ZGlmZiAtLWdpdCBhL2JhY2twb3J0ZWRfZml4ZXMvQW5kcm9pZC5icCBiL2JhY2twb3J0ZWRfZml4ZXMvQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjBmM2ZjCi0tLSAvZGV2L251bGwKKysrIGIvYmFja3BvcnRlZF9maXhlcy9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsMTE1IEBACisvLyBDb3B5cmlnaHQgMjAyNCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitwYWNrYWdlIHsKKyAgICBkZWZhdWx0X2FwcGxpY2FibGVfbGljZW5zZXM6IFsiQW5kcm9pZC1BcGFjaGUtMi4wIl0sCisgICAgZGVmYXVsdF90ZWFtOiAidHJlbmR5X3RlYW1fYW5kcm9pZF9tZWRpYV9yZWxpYWJpbGl0eSIsCit9CisKK2dlbnJ1bGUgeworICAgIG5hbWU6ICJhcHBsaWVkX2JhY2twb3J0ZWRfZml4ZXMiLAorICAgIHRvb2xzOiBbImFwcGxpZWRfYmFja3BvcnRlZF9maXhlc19tYWluIl0sCisgICAgc3JjczogWyI6YXBwbGllZF9iYWNrcG9ydGVkX2ZpeF9iaW5wYnMiXSwKKyAgICBvdXQ6IFsiYXBwbGllZF9iYWNrcG9ydGVkX2ZpeGVzLnByb3AiXSwKKyAgICBjbWQ6ICIkKGxvY2F0aW9uIGFwcGxpZWRfYmFja3BvcnRlZF9maXhlc19tYWluKSIgKworICAgICAgICAiIC1wICQobG9jYXRpb24gYXBwbGllZF9iYWNrcG9ydGVkX2ZpeGVzLnByb3ApIiArCisgICAgICAgICIgJChpbikiLAorfQorCitqYXZhX2xpYnJhcnkgeworICAgIG5hbWU6ICJiYWNrcG9ydGVkX2ZpeGVzX3Byb3RvIiwKKyAgICBzcmNzOiBbCisgICAgICAgICJiYWNrcG9ydGVkX2ZpeGVzLnByb3RvIiwKKyAgICBdLAorICAgIGhvc3Rfc3VwcG9ydGVkOiB0cnVlLAorfQorCitqYXZhX2xpYnJhcnkgeworICAgIG5hbWU6ICJiYWNrcG9ydGVkX2ZpeGVzX2NvbW1vbiIsCisgICAgc3JjczogWyJzcmMvamF2YS9jb20vYW5kcm9pZC9idWlsZC9iYWNrcG9ydGVkZml4ZXMvY29tbW9uLyouamF2YSJdLAorICAgIHN0YXRpY19saWJzOiBbCisgICAgICAgICJiYWNrcG9ydGVkX2ZpeGVzX3Byb3RvIiwKKyAgICAgICAgImd1YXZhIiwKKyAgICBdLAorICAgIGhvc3Rfc3VwcG9ydGVkOiB0cnVlLAorfQorCitqYXZhX3Rlc3RfaG9zdCB7CisgICAgbmFtZTogImJhY2twb3J0ZWRfZml4ZXNfY29tbW9uX3Rlc3QiLAorICAgIHNyY3M6IFsidGVzdHMvamF2YS9jb20vYW5kcm9pZC9idWlsZC9iYWNrcG9ydGVkZml4ZXMvY29tbW9uLyouamF2YSJdLAorICAgIHN0YXRpY19saWJzOiBbCisgICAgICAgICJiYWNrcG9ydGVkX2ZpeGVzX2NvbW1vbiIsCisgICAgICAgICJiYWNrcG9ydGVkX2ZpeGVzX3Byb3RvIiwKKyAgICAgICAgImp1bml0IiwKKyAgICAgICAgInRydXRoIiwKKyAgICAgICAgInRydXRoLWxpdGVwcm90by1leHRlbnNpb24iLAorICAgICAgICAidHJ1dGgtcHJvdG8tZXh0ZW5zaW9uIiwKKyAgICBdLAorICAgIHRlc3Rfb3B0aW9uczogeworICAgICAgICB1bml0X3Rlc3Q6IHRydWUsCisgICAgfSwKKyAgICB0ZXN0X3N1aXRlczogWyJnZW5lcmFsLXRlc3RzIl0sCit9CisKK2phdmFfbGlicmFyeSB7CisgICAgbmFtZTogImFwcGxpZWRfYmFja3BvcnRlZF9maXhlc19saWIiLAorICAgIHNyY3M6IFsic3JjL2phdmEvY29tL2FuZHJvaWQvYnVpbGQvYmFja3BvcnRlZGZpeGVzLyouamF2YSJdLAorICAgIHN0YXRpY19saWJzOiBbCisgICAgICAgICJiYWNrcG9ydGVkX2ZpeGVzX2NvbW1vbiIsCisgICAgICAgICJiYWNrcG9ydGVkX2ZpeGVzX3Byb3RvIiwKKyAgICAgICAgImpjb21tYW5kZXIiLAorICAgICAgICAiZ3VhdmEiLAorICAgIF0sCisgICAgaG9zdF9zdXBwb3J0ZWQ6IHRydWUsCit9CisKK2phdmFfYmluYXJ5X2hvc3QgeworICAgIG5hbWU6ICJhcHBsaWVkX2JhY2twb3J0ZWRfZml4ZXNfbWFpbiIsCisgICAgbWFpbl9jbGFzczogImNvbS5hbmRyb2lkLmJ1aWxkLmJhY2twb3J0ZWRmaXhlcy5NYWluIiwKKyAgICBzdGF0aWNfbGliczogWworICAgICAgICAiYXBwbGllZF9iYWNrcG9ydGVkX2ZpeGVzX2xpYiIsCisgICAgXSwKK30KKworamF2YV90ZXN0X2hvc3QgeworICAgIG5hbWU6ICJhcHBsaWVkX2JhY2twb3J0ZWRfZml4ZXNfdGVzdCIsCisgICAgc3JjczogWyJ0ZXN0cy9qYXZhL2NvbS9hbmRyb2lkL2J1aWxkL2JhY2twb3J0ZWRmaXhlcy8qLmphdmEiXSwKKyAgICBzdGF0aWNfbGliczogWworICAgICAgICAiYXBwbGllZF9iYWNrcG9ydGVkX2ZpeGVzX2xpYiIsCisgICAgICAgICJiYWNrcG9ydGVkX2ZpeGVzX3Byb3RvIiwKKyAgICAgICAgImp1bml0IiwKKyAgICAgICAgInRydXRoIiwKKyAgICBdLAorICAgIHRlc3Rfb3B0aW9uczogeworICAgICAgICB1bml0X3Rlc3Q6IHRydWUsCisgICAgfSwKKyAgICB0ZXN0X3N1aXRlczogWyJnZW5lcmFsLXRlc3RzIl0sCit9CisKK2dlbnNyY3MgeworICAgIG5hbWU6ICJhcHBsaWVkX2JhY2twb3J0ZWRfZml4X2JpbnBicyIsCisgICAgdG9vbHM6IFsiYXByb3RvYyJdLAorICAgIHNyY3M6IFsKKyAgICAgICAgImFwcGxpZWRfZml4ZXMvKi50eHRwYiIsCisgICAgXSwKKyAgICB0b29sX2ZpbGVzOiBbCisgICAgICAgICJiYWNrcG9ydGVkX2ZpeGVzLnByb3RvIiwKKyAgICBdLAorICAgIG91dHB1dF9leHRlbnNpb246ICJiaW5wYiIsCisgICAgY21kOiAiJChsb2NhdGlvbiBhcHJvdG9jKSAgIiArCisgICAgICAgICIgLS1lbmNvZGU9Y29tLmFuZHJvaWQuYnVpbGQuYmFja3BvcnRlZGZpeGVzLkJhY2twb3J0ZWRGaXgiICsKKyAgICAgICAgIiAgJChsb2NhdGlvbiBiYWNrcG9ydGVkX2ZpeGVzLnByb3RvKSIgKworICAgICAgICAiIDwgJChpbikiICsKKyAgICAgICAgIiA+ICQob3V0KTsgZWNobyAkKG91dCkiLAorfQpkaWZmIC0tZ2l0IGEvYmFja3BvcnRlZF9maXhlcy9PV05FUlMgYi9iYWNrcG9ydGVkX2ZpeGVzL09XTkVSUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzE3NmJmCi0tLSAvZGV2L251bGwKKysrIGIvYmFja3BvcnRlZF9maXhlcy9PV05FUlMKQEAgLTAsMCArMSwzIEBACitlc3NpY2tAZ29vZ2xlLmNvbQorbmNoYWxrb0Bnb29nbGUuY29tCitwb3J0bWFubmNAZ29vZ2xlLmNvbQpkaWZmIC0tZ2l0IGEvY29yZS90YXNrcy90b29scy91cGRhdGVfYm9vdGxvYWRlcl9yYWRpb19pbWFnZS5tayBiL2JhY2twb3J0ZWRfZml4ZXMvYXBwbGllZF9maXhlcy9raTM1MDAzNzAyMy50eHRwYgpzaW1pbGFyaXR5IGluZGV4IDczJQpyZW5hbWUgZnJvbSBjb3JlL3Rhc2tzL3Rvb2xzL3VwZGF0ZV9ib290bG9hZGVyX3JhZGlvX2ltYWdlLm1rCnJlbmFtZSB0byBiYWNrcG9ydGVkX2ZpeGVzL2FwcGxpZWRfZml4ZXMva2kzNTAwMzcwMjMudHh0cGIKaW5kZXggMGViZjI0Ny4uNDU2YTdhZSAxMDA2NDQKLS0tIGEvY29yZS90YXNrcy90b29scy91cGRhdGVfYm9vdGxvYWRlcl9yYWRpb19pbWFnZS5taworKysgYi9iYWNrcG9ydGVkX2ZpeGVzL2FwcGxpZWRfZml4ZXMva2kzNTAwMzcwMjMudHh0cGIKQEAgLTQsMTQgKzQsMTYgQEAKICMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICMKLSMgICAgICBodHRwOiN3d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAjCiAjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKICMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisjIHByb3RvLWZpbGU6IC4uL2JhY2twb3J0ZWRfZml4ZXMucHJvdG8KKyMgcHJvdG8tbWVzc2FnZTogQmFja3BvcnRlZEZpeAogCi1pZmVxICgkKFVTRVNfREVWSUNFX0dPT0dMRV9aVU1BKSx0cnVlKQotICAgIC1pbmNsdWRlIHZlbmRvci9nb29nbGVfZGV2aWNlcy96dW1hL3ByZWJ1aWx0cy9taXNjX2JpbnMvdXBkYXRlX2Jvb3Rsb2FkZXJfcmFkaW9faW1hZ2UubWsKLWVuZGlmCitrbm93bl9pc3N1ZTogMzUwMDM3MDIzCithbGlhczogMQpkaWZmIC0tZ2l0IGEvYmFja3BvcnRlZF9maXhlcy9iYWNrcG9ydGVkX2ZpeGVzLnByb3RvIGIvYmFja3BvcnRlZF9maXhlcy9iYWNrcG9ydGVkX2ZpeGVzLnByb3RvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNjE4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9iYWNrcG9ydGVkX2ZpeGVzL2JhY2twb3J0ZWRfZml4ZXMucHJvdG8KQEAgLTAsMCArMSwzNyBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworc3ludGF4ID0gInByb3RvMiI7CisKK3BhY2thZ2UgY29tLmFuZHJvaWQuYnVpbGQuYmFja3BvcnRlZGZpeGVzOworCitvcHRpb24gamF2YV9tdWx0aXBsZV9maWxlcyA9IHRydWU7CisKKy8vIEEgbGlzdCBvZiBiYWNrcG9ydGVkIGZpeGVzLgorbWVzc2FnZSBCYWNrcG9ydGVkRml4ZXMgeworICByZXBlYXRlZCBCYWNrcG9ydGVkRml4IGZpeGVzID0gMTsKK30KKworLy8gQSBrbm93biBpc3N1ZSBhcHByb3ZlZCBmb3IgcmVwb3J0aW5nIEJ1aWxkLmdldEJhY2twb3J0ZWRGaXhTdGF0dXMKK21lc3NhZ2UgQmFja3BvcnRlZEZpeCB7CisKKyAgLy8gVGhlIGlzc3VlIGlkIGZyb20gdGhlIHB1YmxpYyBidWcgdHJhY2tlcgorICAvLyBodHRwczovL2lzc3VldHJhY2tlci5nb29nbGUuY29tL2lzc3Vlcy97a25vd25faXNzdWV9CisgIG9wdGlvbmFsIGludDY0IGtub3duX2lzc3VlID0gMTsKKyAgLy8gVGhlIGFsaWFzIGZvciB0aGUga25vd24gaXNzdWUuCisgIC8vIDEgLSAxMDIzIGFyZSB2YWxpZCBhbGlhc2VzCisgIC8vIE11c3QgYmUgdW5pcXVlIGFjcm9zcyBhbGwgYmFja3BvcnRlZCBmaXhlcy4KKyAgb3B0aW9uYWwgaW50MzIgYWxpYXMgPSAyOworfQorCmRpZmYgLS1naXQgYS9iYWNrcG9ydGVkX2ZpeGVzL3NyYy9qYXZhL2NvbS9hbmRyb2lkL2J1aWxkL2JhY2twb3J0ZWRmaXhlcy9NYWluLmphdmEgYi9iYWNrcG9ydGVkX2ZpeGVzL3NyYy9qYXZhL2NvbS9hbmRyb2lkL2J1aWxkL2JhY2twb3J0ZWRmaXhlcy9NYWluLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkxNDhjYwotLS0gL2Rldi9udWxsCisrKyBiL2JhY2twb3J0ZWRfZml4ZXMvc3JjL2phdmEvY29tL2FuZHJvaWQvYnVpbGQvYmFja3BvcnRlZGZpeGVzL01haW4uamF2YQpAQCAtMCwwICsxLDc5IEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uYW5kcm9pZC5idWlsZC5iYWNrcG9ydGVkZml4ZXM7CisKK2ltcG9ydCBzdGF0aWMgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzLlVURl84OworCitpbXBvcnQgY29tLmFuZHJvaWQuYnVpbGQuYmFja3BvcnRlZGZpeGVzLmNvbW1vbi5DbG9zYWJsZUNvbGxlY3Rpb247CitpbXBvcnQgY29tLmFuZHJvaWQuYnVpbGQuYmFja3BvcnRlZGZpeGVzLmNvbW1vbi5QYXJzZXI7CisKK2ltcG9ydCBjb20uYmV1c3QuamNvbW1hbmRlci5KQ29tbWFuZGVyOworaW1wb3J0IGNvbS5iZXVzdC5qY29tbWFuZGVyLlBhcmFtZXRlcjsKK2ltcG9ydCBjb20uYmV1c3QuamNvbW1hbmRlci5jb252ZXJ0ZXJzLkZpbGVDb252ZXJ0ZXI7CitpbXBvcnQgY29tLmdvb2dsZS5jb21tb24uaW8uRmlsZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLldyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9yczsKKworcHVibGljIGZpbmFsIGNsYXNzIE1haW4geworICAgIEBQYXJhbWV0ZXIoZGVzY3JpcHRpb24gPSAiQmFja3BvcnRlZEZpeCBwcm90byBiaW5hcnkgZmlsZXMiLCBjb252ZXJ0ZXIgPSBGaWxlQ29udmVydGVyLmNsYXNzLAorICAgICAgICAgICAgcmVxdWlyZWQgPSB0cnVlKQorICAgIExpc3Q8RmlsZT4gZml4RmlsZXM7CisgICAgQFBhcmFtZXRlcihkZXNjcmlwdGlvbiA9ICJUaGUgZmlsZSB0byB3cml0ZSB0aGUgcHJvcGVydHkgdmFsdWUgdG8uIiwKKyAgICAgICAgICAgIG5hbWVzID0geyItLXByb3BlcnR5X2ZpbGUiLCAiLXAifSwgY29udmVydGVyID0gRmlsZUNvbnZlcnRlci5jbGFzcywgcmVxdWlyZWQgPSB0cnVlKQorICAgIEZpbGUgcHJvcGVydHlGaWxlOworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nLi4uIGFyZ3YpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBNYWluIG1haW4gPSBuZXcgTWFpbigpOworICAgICAgICBKQ29tbWFuZGVyLm5ld0J1aWxkZXIoKS5hZGRPYmplY3QobWFpbikuYnVpbGQoKS5wYXJzZShhcmd2KTsKKyAgICAgICAgbWFpbi5ydW4oKTsKKyAgICB9CisKKyAgICBNYWluKCkgeworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBydW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgdHJ5ICh2YXIgZml4U3RyZWFtcyA9IENsb3NhYmxlQ29sbGVjdGlvbi53cmFwKFBhcnNlci5nZXRGaWxlSW5wdXRTdHJlYW1zKGZpeEZpbGVzKSk7CisgICAgICAgICAgICAgdmFyIG91dCA9IEZpbGVzLm5ld1dyaXRlcihwcm9wZXJ0eUZpbGUsIFVURl84KSkgeworICAgICAgICAgICAgdmFyIGZpeGVzID0gUGFyc2VyLnBhcnNlQmFja3BvcnRlZEZpeGVzKGZpeFN0cmVhbXMuZ2V0Q29sbGVjdGlvbigpKTsKKyAgICAgICAgICAgIHdyaXRlRml4ZXNBc0FsaWFzQml0U2V0KGZpeGVzLCBvdXQpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgd3JpdGVGaXhlc0FzQWxpYXNCaXRTZXQoQmFja3BvcnRlZEZpeGVzIGZpeGVzLCBXcml0ZXIgb3V0KSB7CisgICAgICAgIFByaW50V3JpdGVyIHByaW50V3JpdGVyID0gbmV3IFByaW50V3JpdGVyKG91dCk7CisgICAgICAgIHByaW50V3JpdGVyLnByaW50bG4oIiMgVGhlIGZvbGxvd2luZyBiYWNrcG9ydGVkIGZpeGVzIGhhdmUgYmVlbiBhcHBsaWVkIik7CisgICAgICAgIGZvciAodmFyIGYgOiBmaXhlcy5nZXRGaXhlc0xpc3QoKSkgeworICAgICAgICAgICAgcHJpbnRXcml0ZXIucHJpbnRmKCIjIGh0dHBzOi8vaXNzdWV0cmFja2VyLmdvb2dsZS5jb20vaXNzdWVzLyVkIHdpdGggYWxpYXMgJWQiLAorICAgICAgICAgICAgICAgICAgICBmLmdldEtub3duSXNzdWUoKSwgZi5nZXRBbGlhcygpKTsKKyAgICAgICAgICAgIHByaW50V3JpdGVyLnByaW50bG4oKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgYnNBcnJheSA9IFBhcnNlci5nZXRCaXRTZXRBcnJheSgKKyAgICAgICAgICAgICAgICBmaXhlcy5nZXRGaXhlc0xpc3QoKS5zdHJlYW0oKS5tYXBUb0ludChCYWNrcG9ydGVkRml4OjpnZXRBbGlhcykudG9BcnJheSgpKTsKKyAgICAgICAgU3RyaW5nIGJzU3RyaW5nID0gQXJyYXlzLnN0cmVhbShic0FycmF5KS5tYXBUb09iaihMb25nOjp0b1N0cmluZykuY29sbGVjdCgKKyAgICAgICAgICAgICAgICBDb2xsZWN0b3JzLmpvaW5pbmcoIiwiKSk7CisgICAgICAgIHByaW50V3JpdGVyLnByaW50Zigicm8uYnVpbGQuYmFja3BvcnRlZF9maXhlcy5hbGlhc19iaXRzZXQubG9uZ19saXN0PSVzIiwgYnNTdHJpbmcpOworICAgICAgICBwcmludFdyaXRlci5wcmludGxuKCk7CisgICAgICAgIGlmIChwcmludFdyaXRlci5jaGVja0Vycm9yKCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUaGVyZSB3YXMgYW4gZXJyb3Igd3JpdGluZyB0byAiICsgb3V0LnRvU3RyaW5nKCkpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYmFja3BvcnRlZF9maXhlcy9zcmMvamF2YS9jb20vYW5kcm9pZC9idWlsZC9iYWNrcG9ydGVkZml4ZXMvY29tbW9uL0Nsb3NhYmxlQ29sbGVjdGlvbi5qYXZhIGIvYmFja3BvcnRlZF9maXhlcy9zcmMvamF2YS9jb20vYW5kcm9pZC9idWlsZC9iYWNrcG9ydGVkZml4ZXMvY29tbW9uL0Nsb3NhYmxlQ29sbGVjdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YjY3MzAKLS0tIC9kZXYvbnVsbAorKysgYi9iYWNrcG9ydGVkX2ZpeGVzL3NyYy9qYXZhL2NvbS9hbmRyb2lkL2J1aWxkL2JhY2twb3J0ZWRmaXhlcy9jb21tb24vQ2xvc2FibGVDb2xsZWN0aW9uLmphdmEKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5hbmRyb2lkLmJ1aWxkLmJhY2twb3J0ZWRmaXhlcy5jb21tb247CisKK2ltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0LkltbXV0YWJsZUxpc3Q7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworCisvKiogQW4gQXV0b0Nsb3NlYWJsZSBob2xkZXIgZm9yIGEgY29sbGVjdGlvbiBvZiBBdXRvQ2xvc2VhYmxlcy4gKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBDbG9zYWJsZUNvbGxlY3Rpb248VCBleHRlbmRzIEF1dG9DbG9zZWFibGUsIEMgZXh0ZW5kcyBDb2xsZWN0aW9uPFQ+PiBpbXBsZW1lbnRzCisgICAgICAgIEF1dG9DbG9zZWFibGUgeworICAgIEMgc291cmNlOworCisgICAgLyoqIE1ha2VzIHRoZSBjb2xsZWN0aW9uIEF1dG9DbG9zZWFibGUuICovCisgICAgcHVibGljIHN0YXRpYyA8VCBleHRlbmRzIEF1dG9DbG9zZWFibGUsIEMgZXh0ZW5kcyBDb2xsZWN0aW9uPFQ+PiBDbG9zYWJsZUNvbGxlY3Rpb248VCwgQz4gd3JhcCgKKyAgICAgICAgICAgIEMgc291cmNlKSB7CisgICAgICAgIHJldHVybiBuZXcgQ2xvc2FibGVDb2xsZWN0aW9uPD4oc291cmNlKTsKKyAgICB9CisKKyAgICBwcml2YXRlIENsb3NhYmxlQ29sbGVjdGlvbihDIHNvdXJjZSkgeworICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTsKKyAgICB9CisKKyAgICAvKiogR2V0IHRoZSBzb3VyY2UgY29sbGVjdGlvbi4gKi8KKyAgICBwdWJsaWMgQyBnZXRDb2xsZWN0aW9uKCkgeworICAgICAgICByZXR1cm4gc291cmNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIENsb3NlcyBlYWNoIGl0ZW0gaW4gdGhlIGNvbGxlY3Rpb24uCisgICAgICoKKyAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbiBpZiBhbnkgY2xvc2UgdGhyb3dzIGFuIGFuIGV4Y2VwdGlvbiwgYSBuZXcgZXhjZXB0aW9uIGlzIHRocm93biB3aXRoCisgICAgICogICAgICAgICAgICAgICAgICAgYWxsIHRoZSBleGNlcHRpb25zIHRocm93biBjbG9zaW5nIHRoZSBzdHJlYW1zIGFkZGVkIGFzIGEgc3VwcHJlc3NlZAorICAgICAqICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgdmFyIGZhaWx1cmVzID0gbmV3IEFycmF5TGlzdDxFeGNlcHRpb24+KCk7CisgICAgICAgIGZvciAoVCB0IDogc291cmNlKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHQuY2xvc2UoKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgZmFpbHVyZXMuYWRkKGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghZmFpbHVyZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBFeGNlcHRpb24gZSA9IG5ldyBFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICIlZCBvZiAlZCBmYWlsZWQgd2hpbGUgY2xvc2luZyIuZm9ybWF0dGVkKGZhaWx1cmVzLnNpemUoKSwgc291cmNlLnNpemUoKSkpOworICAgICAgICAgICAgZmFpbHVyZXMuZm9yRWFjaChlOjphZGRTdXBwcmVzc2VkKTsKKyAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9iYWNrcG9ydGVkX2ZpeGVzL3NyYy9qYXZhL2NvbS9hbmRyb2lkL2J1aWxkL2JhY2twb3J0ZWRmaXhlcy9jb21tb24vUGFyc2VyLmphdmEgYi9iYWNrcG9ydGVkX2ZpeGVzL3NyYy9qYXZhL2NvbS9hbmRyb2lkL2J1aWxkL2JhY2twb3J0ZWRmaXhlcy9jb21tb24vUGFyc2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIwOGI4ZgotLS0gL2Rldi9udWxsCisrKyBiL2JhY2twb3J0ZWRfZml4ZXMvc3JjL2phdmEvY29tL2FuZHJvaWQvYnVpbGQvYmFja3BvcnRlZGZpeGVzL2NvbW1vbi9QYXJzZXIuamF2YQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmFuZHJvaWQuYnVpbGQuYmFja3BvcnRlZGZpeGVzLmNvbW1vbjsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmJ1aWxkLmJhY2twb3J0ZWRmaXhlcy5CYWNrcG9ydGVkRml4OworaW1wb3J0IGNvbS5hbmRyb2lkLmJ1aWxkLmJhY2twb3J0ZWRmaXhlcy5CYWNrcG9ydGVkRml4ZXM7CisKK2ltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0LkltbXV0YWJsZUxpc3Q7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5CaXRTZXQ7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKKworLyoqIFN0YXRpYyB1dGlsaXRpZXMgZm9yIHdvcmtpbmcgd2l0aCB7QGxpbmsgQmFja3BvcnRlZEZpeGVzfS4gKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBQYXJzZXIgeworCisgICAgLyoqIENyZWF0ZXMgbGlzdCBvZiBGaWxlSW5wdXRTdHJlYW1zIGZvciBhIGxpc3Qgb2YgZmlsZXMuICovCisgICAgcHVibGljIHN0YXRpYyBJbW11dGFibGVMaXN0PEZpbGVJbnB1dFN0cmVhbT4gZ2V0RmlsZUlucHV0U3RyZWFtcyhMaXN0PEZpbGU+IGZpeEZpbGVzKSB0aHJvd3MKKyAgICAgICAgICAgIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7CisgICAgICAgIHZhciBzdHJlYW1zID0gSW1tdXRhYmxlTGlzdC48RmlsZUlucHV0U3RyZWFtPmJ1aWxkZXIoKTsKKyAgICAgICAgZm9yICh2YXIgZiA6IGZpeEZpbGVzKSB7CisgICAgICAgICAgICBzdHJlYW1zLmFkZChuZXcgRmlsZUlucHV0U3RyZWFtKGYpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3RyZWFtcy5idWlsZCgpOworICAgIH0KKworICAgIC8qKiBDb252ZXJ0cyBhIGxpc3Qgb2YgYmFja3BvcnRlZCBmaXggYWxpYXNlcyBpbnRvIGEgbG9uZyBhcnJheSByZXByZXNlbnRpbmcgYSB7QGxpbmsgQml0U2V0fSAqLworICAgIHB1YmxpYyBzdGF0aWMgbG9uZ1tdIGdldEJpdFNldEFycmF5KGludFtdIGFsaWFzZXMpIHsKKyAgICAgICAgQml0U2V0IGJzID0gbmV3IEJpdFNldCgpOworICAgICAgICBmb3IgKGludCBhIDogYWxpYXNlcykgeworICAgICAgICAgICAgYnMuc2V0KGEpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBicy50b0xvbmdBcnJheSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSB7QGxpbmsgQmFja3BvcnRlZEZpeGVzfSBmcm9tIGEgbGlzdCBvZiB7QGxpbmsgQmFja3BvcnRlZEZpeH0gYmluYXJ5IHByb3RvIHN0cmVhbXMuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBCYWNrcG9ydGVkRml4ZXMgcGFyc2VCYWNrcG9ydGVkRml4ZXMoTGlzdDw/IGV4dGVuZHMgSW5wdXRTdHJlYW0+IGZpeFN0cmVhbXMpCisgICAgICAgICAgICB0aHJvd3MKKyAgICAgICAgICAgIElPRXhjZXB0aW9uIHsKKyAgICAgICAgdmFyIGZpeGVzID0gQmFja3BvcnRlZEZpeGVzLm5ld0J1aWxkZXIoKTsKKyAgICAgICAgZm9yICh2YXIgcyA6IGZpeFN0cmVhbXMpIHsKKyAgICAgICAgICAgIEJhY2twb3J0ZWRGaXggZml4ID0gQmFja3BvcnRlZEZpeC5wYXJzZUZyb20ocyk7CisgICAgICAgICAgICBmaXhlcy5hZGRGaXhlcyhmaXgpOworICAgICAgICAgICAgcy5jbG9zZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmaXhlcy5idWlsZCgpOworICAgIH0KKworICAgIHByaXZhdGUgUGFyc2VyKCkgeworICAgIH0KK30KZGlmZiAtLWdpdCBhL2JhY2twb3J0ZWRfZml4ZXMvdGVzdHMvamF2YS9jb20vYW5kcm9pZC9idWlsZC9iYWNrcG9ydGVkZml4ZXMvTWFpblRlc3QuamF2YSBiL2JhY2twb3J0ZWRfZml4ZXMvdGVzdHMvamF2YS9jb20vYW5kcm9pZC9idWlsZC9iYWNrcG9ydGVkZml4ZXMvTWFpblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDA2MWUxCi0tLSAvZGV2L251bGwKKysrIGIvYmFja3BvcnRlZF9maXhlcy90ZXN0cy9qYXZhL2NvbS9hbmRyb2lkL2J1aWxkL2JhY2twb3J0ZWRmaXhlcy9NYWluVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjQgQEAKKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5hbmRyb2lkLmJ1aWxkLmJhY2twb3J0ZWRmaXhlczsKKworaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLnRydXRoLlRydXRoOworCitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOworCisvKiogVGVzdHMgZm9yIHtAbGluayBNYWlufS4gKi8KK3B1YmxpYyBjbGFzcyBNYWluVGVzdCB7CisKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgd3JpdGVGaXhlc0FzQWxpYXNCaXRTZXRfZGVmYXVsdCgpIHsKKyAgICAgICAgQmFja3BvcnRlZEZpeGVzIGZpeGVzID0gQmFja3BvcnRlZEZpeGVzLm5ld0J1aWxkZXIoKS5idWlsZCgpOworICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IFN0cmluZ1dyaXRlcigpOworCisgICAgICAgIE1haW4ud3JpdGVGaXhlc0FzQWxpYXNCaXRTZXQoZml4ZXMsIG5ldyBQcmludFdyaXRlcihyZXN1bHQpKTsKKworICAgICAgICBUcnV0aC5hc3NlcnRUaGF0KHJlc3VsdC50b1N0cmluZygpKQorICAgICAgICAgICAgICAgIC5pc0VxdWFsVG8oIiIiCisgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSBmb2xsb3dpbmcgYmFja3BvcnRlZCBmaXhlcyBoYXZlIGJlZW4gYXBwbGllZAorICAgICAgICAgICAgICAgICAgICAgICAgcm8uYnVpbGQuYmFja3BvcnRlZF9maXhlcy5hbGlhc19iaXRzZXQubG9uZ19saXN0PQorICAgICAgICAgICAgICAgICAgICAgICAgIiIiKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHdyaXRlRml4ZXNBc0FsaWFzQml0U2V0X3NvbWUoKSB7CisgICAgICAgIEJhY2twb3J0ZWRGaXhlcyBmaXhlcyA9IEJhY2twb3J0ZWRGaXhlcy5uZXdCdWlsZGVyKCkKKyAgICAgICAgICAgICAgICAuYWRkRml4ZXMoQmFja3BvcnRlZEZpeC5uZXdCdWlsZGVyKCkuc2V0S25vd25Jc3N1ZSgxMjM0TCkuc2V0QWxpYXMoMSkpCisgICAgICAgICAgICAgICAgLmFkZEZpeGVzKEJhY2twb3J0ZWRGaXgubmV3QnVpbGRlcigpLnNldEtub3duSXNzdWUoM0wpLnNldEFsaWFzKDY1KSkKKyAgICAgICAgICAgICAgICAuYWRkRml4ZXMoQmFja3BvcnRlZEZpeC5uZXdCdWlsZGVyKCkuc2V0S25vd25Jc3N1ZSg0TCkuc2V0QWxpYXMoNjcpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpOworICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IFN0cmluZ1dyaXRlcigpOworCisgICAgICAgIE1haW4ud3JpdGVGaXhlc0FzQWxpYXNCaXRTZXQoZml4ZXMsIG5ldyBQcmludFdyaXRlcihyZXN1bHQpKTsKKworICAgICAgICBUcnV0aC5hc3NlcnRUaGF0KHJlc3VsdC50b1N0cmluZygpKQorICAgICAgICAgICAgICAgIC5pc0VxdWFsVG8oIiIiCisgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSBmb2xsb3dpbmcgYmFja3BvcnRlZCBmaXhlcyBoYXZlIGJlZW4gYXBwbGllZAorICAgICAgICAgICAgICAgICAgICAgICAgIyBodHRwczovL2lzc3VldHJhY2tlci5nb29nbGUuY29tL2lzc3Vlcy8xMjM0IHdpdGggYWxpYXMgMQorICAgICAgICAgICAgICAgICAgICAgICAgIyBodHRwczovL2lzc3VldHJhY2tlci5nb29nbGUuY29tL2lzc3Vlcy8zIHdpdGggYWxpYXMgNjUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgaHR0cHM6Ly9pc3N1ZXRyYWNrZXIuZ29vZ2xlLmNvbS9pc3N1ZXMvNCB3aXRoIGFsaWFzIDY3CisgICAgICAgICAgICAgICAgICAgICAgICByby5idWlsZC5iYWNrcG9ydGVkX2ZpeGVzLmFsaWFzX2JpdHNldC5sb25nX2xpc3Q9MiwxMAorICAgICAgICAgICAgICAgICAgICAgICAgIiIiKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9iYWNrcG9ydGVkX2ZpeGVzL3Rlc3RzL2phdmEvY29tL2FuZHJvaWQvYnVpbGQvYmFja3BvcnRlZGZpeGVzL2NvbW1vbi9DbG9zZWFibGVDb2xsZWN0aW9uVGVzdC5qYXZhIGIvYmFja3BvcnRlZF9maXhlcy90ZXN0cy9qYXZhL2NvbS9hbmRyb2lkL2J1aWxkL2JhY2twb3J0ZWRmaXhlcy9jb21tb24vQ2xvc2VhYmxlQ29sbGVjdGlvblRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2Q4NGE4Ci0tLSAvZGV2L251bGwKKysrIGIvYmFja3BvcnRlZF9maXhlcy90ZXN0cy9qYXZhL2NvbS9hbmRyb2lkL2J1aWxkL2JhY2twb3J0ZWRmaXhlcy9jb21tb24vQ2xvc2VhYmxlQ29sbGVjdGlvblRlc3QuamF2YQpAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmFuZHJvaWQuYnVpbGQuYmFja3BvcnRlZGZpeGVzLmNvbW1vbjsKKworaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmNvbGxlY3QuSW1tdXRhYmxlU2V0OworaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLnRydXRoLkNvcnJlc3BvbmRlbmNlOworaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLnRydXRoLlRydXRoOworCitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKKy8qKiBUZXN0cyBmb3Ige0BsaW5rIENsb3NhYmxlQ29sbGVjdGlvbn0uICovCitwdWJsaWMgY2xhc3MgQ2xvc2VhYmxlQ29sbGVjdGlvblRlc3QgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRmFrZUNsb3NlYWJsZSBpbXBsZW1lbnRzIEF1dG9DbG9zZWFibGUgeworICAgICAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gdGhyb3dPbkNsb3NlOworICAgICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBuYW1lOworCisKKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIGlzQ2xvc2VkID0gZmFsc2U7CisKKyAgICAgICAgcHJpdmF0ZSBGYWtlQ2xvc2VhYmxlKFN0cmluZyBuYW1lLCBib29sZWFuIHRocm93T25DbG9zZSkgeworICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgICAgIHRoaXMudGhyb3dPbkNsb3NlID0gdGhyb3dPbkNsb3NlOworCisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHN0YXRpYyBGYWtlQ2xvc2VhYmxlIG5hbWVkKFN0cmluZyBuYW1lKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IEZha2VDbG9zZWFibGUobmFtZSwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgRmFrZUNsb3NlYWJsZSBmYWlsaW5nKFN0cmluZyBuYW1lKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IEZha2VDbG9zZWFibGUobmFtZSwgdHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0Nsb3NlZCgpIHsKKyAgICAgICAgICAgIHJldHVybiBpc0Nsb3NlZDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgaWYgKHRocm93T25DbG9zZSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24obmFtZSArICIgY2xvc2UgZmFpbGVkIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpc0Nsb3NlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgYm90aENsb3NlZCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICB2YXIgYyA9IEltbXV0YWJsZVNldC5vZihGYWtlQ2xvc2VhYmxlLm5hbWVkKCJmb28iKSwgRmFrZUNsb3NlYWJsZS5uYW1lZCgiYmFyIikpOworICAgICAgICB0cnkgKHZhciBjYyA9IENsb3NhYmxlQ29sbGVjdGlvbi53cmFwKGMpOykgeworICAgICAgICAgICAgVHJ1dGguYXNzZXJ0VGhhdChjYy5nZXRDb2xsZWN0aW9uKCkpLmlzU2FtZUluc3RhbmNlQXMoYyk7CisgICAgICAgIH0KKyAgICAgICAgVHJ1dGguYXNzZXJ0VGhhdChjKQorICAgICAgICAgICAgICAgIC5jb21wYXJpbmdFbGVtZW50c1VzaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgQ29ycmVzcG9uZGVuY2UudHJhbnNmb3JtaW5nKEZha2VDbG9zZWFibGU6OmlzQ2xvc2VkLCAiaXMgY2xvc2VkIikpCisgICAgICAgICAgICAgICAgLmNvbnRhaW5zRXhhY3RseSh0cnVlLCB0cnVlKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIGJvdGhGYWlsZWQoKSB7CisgICAgICAgIHZhciBjID0gSW1tdXRhYmxlU2V0Lm9mKEZha2VDbG9zZWFibGUuZmFpbGluZygiZm9vIiksIEZha2VDbG9zZWFibGUuZmFpbGluZygiYmFyIikpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0cnkgKHZhciBjYyA9IENsb3NhYmxlQ29sbGVjdGlvbi53cmFwKGMpOykgeworICAgICAgICAgICAgICAgIFRydXRoLmFzc2VydFRoYXQoY2MuZ2V0Q29sbGVjdGlvbigpKS5pc1NhbWVJbnN0YW5jZUFzKGMpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgVHJ1dGguYXNzZXJ0VGhhdChlKS5oYXNNZXNzYWdlVGhhdCgpLmlzRXF1YWxUbygiMiBvZiAyIGZhaWxlZCB3aGlsZSBjbG9zaW5nIik7CisgICAgICAgICAgICBUcnV0aC5hc3NlcnRUaGF0KGUuZ2V0U3VwcHJlc3NlZCgpKQorICAgICAgICAgICAgICAgICAgICAuYXNMaXN0KCkKKyAgICAgICAgICAgICAgICAgICAgLmNvbXBhcmluZ0VsZW1lbnRzVXNpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ycmVzcG9uZGVuY2UudHJhbnNmb3JtaW5nKEV4Y2VwdGlvbjo6Z2V0TWVzc2FnZSwgImhhcyBhIG1lc3NhZ2Ugb2YgIikpCisgICAgICAgICAgICAgICAgICAgIC5jb250YWluc0V4YWN0bHkoImZvbyBjbG9zZSBmYWlsZWQiLCAiYmFyIGNsb3NlIGZhaWxlZCIpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYmFja3BvcnRlZF9maXhlcy90ZXN0cy9qYXZhL2NvbS9hbmRyb2lkL2J1aWxkL2JhY2twb3J0ZWRmaXhlcy9jb21tb24vUGFyc2VyVGVzdC5qYXZhIGIvYmFja3BvcnRlZF9maXhlcy90ZXN0cy9qYXZhL2NvbS9hbmRyb2lkL2J1aWxkL2JhY2twb3J0ZWRmaXhlcy9jb21tb24vUGFyc2VyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NGU2OTQKLS0tIC9kZXYvbnVsbAorKysgYi9iYWNrcG9ydGVkX2ZpeGVzL3Rlc3RzL2phdmEvY29tL2FuZHJvaWQvYnVpbGQvYmFja3BvcnRlZGZpeGVzL2NvbW1vbi9QYXJzZXJUZXN0LmphdmEKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5hbmRyb2lkLmJ1aWxkLmJhY2twb3J0ZWRmaXhlcy5jb21tb247CisKK2ltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5jb21tb24udHJ1dGguVHJ1dGguYXNzZXJ0VGhhdDsKK2ltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5jb21tb24udHJ1dGguZXh0ZW5zaW9ucy5wcm90by5Qcm90b1RydXRoLmFzc2VydFRoYXQ7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5idWlsZC5iYWNrcG9ydGVkZml4ZXMuQmFja3BvcnRlZEZpeDsKK2ltcG9ydCBjb20uYW5kcm9pZC5idWlsZC5iYWNrcG9ydGVkZml4ZXMuQmFja3BvcnRlZEZpeGVzOworCitpbXBvcnQgY29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFibGVMaXN0OworCitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKK2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKKworLyoqIFRlc3RzIGZvciB7QGxpbmsgUGFyc2VyfS4qLworcHVibGljIGNsYXNzIFBhcnNlclRlc3QgeworCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBnZXRGaWxlSW5wdXRTdHJlYW1zKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgdmFyIHJlc3VsdHMgPSBQYXJzZXIuZ2V0RmlsZUlucHV0U3RyZWFtcygKKyAgICAgICAgICAgICAgICBJbW11dGFibGVMaXN0Lm9mKEZpbGVzLmNyZWF0ZVRlbXBGaWxlKCJ0ZXN0IiwgbnVsbCkudG9GaWxlKCkpKTsKKyAgICAgICAgYXNzZXJ0VGhhdChyZXN1bHRzKS5pc05vdEVtcHR5KCk7CisgICAgfQorCisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIGdldEJpdFNldEFycmF5X2VtcHR5KCkgeworICAgICAgICB2YXIgcmVzdWx0cyA9IFBhcnNlci5nZXRCaXRTZXRBcnJheShuZXcgaW50W117fSk7CisgICAgICAgIGFzc2VydFRoYXQocmVzdWx0cykuaXNFbXB0eSgpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgZ2V0Qml0U2V0QXJyYXlfMl8zXzY0KCkgeworICAgICAgICB2YXIgcmVzdWx0cyA9IFBhcnNlci5nZXRCaXRTZXRBcnJheShuZXcgaW50W117MiwzLDY0fSk7CisgICAgICAgIGFzc2VydFRoYXQocmVzdWx0cykuYXNMaXN0KCkuY29udGFpbnNFeGFjdGx5KDEyTCwxTCkuaW5PcmRlcigpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgcGFyc2VCYWNrcG9ydGVkRml4ZXNfZW1wdHkoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICB2YXIgcmVzdWx0ID0gUGFyc2VyLnBhcnNlQmFja3BvcnRlZEZpeGVzKEltbXV0YWJsZUxpc3Qub2YoKSk7CisgICAgICAgIGFzc2VydFRoYXQocmVzdWx0KS5pc0VxdWFsVG8oQmFja3BvcnRlZEZpeGVzLmdldERlZmF1bHRJbnN0YW5jZSgpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHBhcnNlQmFja3BvcnRlZEZpeGVzX29uZUJsYW5rKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IFBhcnNlci5wYXJzZUJhY2twb3J0ZWRGaXhlcygKKyAgICAgICAgICAgICAgICBJbW11dGFibGVMaXN0Lm9mKGlucHV0U3RyZWFtKEJhY2twb3J0ZWRGaXguZ2V0RGVmYXVsdEluc3RhbmNlKCkpKSk7CisKKyAgICAgICAgYXNzZXJ0VGhhdChyZXN1bHQpLmlzRXF1YWxUbygKKyAgICAgICAgICAgICAgICBCYWNrcG9ydGVkRml4ZXMubmV3QnVpbGRlcigpCisgICAgICAgICAgICAgICAgICAgICAgICAuYWRkRml4ZXMoQmFja3BvcnRlZEZpeC5nZXREZWZhdWx0SW5zdGFuY2UoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHBhcnNlQmFja3BvcnRlZEZpeGVzX3R3bygpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIEJhY2twb3J0ZWRGaXgga2kxMjMgPSBCYWNrcG9ydGVkRml4Lm5ld0J1aWxkZXIoKQorICAgICAgICAgICAgICAgIC5zZXRLbm93bklzc3VlKDEyMykKKyAgICAgICAgICAgICAgICAuc2V0QWxpYXMoMSkKKyAgICAgICAgICAgICAgICAuYnVpbGQoKTsKKyAgICAgICAgQmFja3BvcnRlZEZpeCBraTQ1NiA9IEJhY2twb3J0ZWRGaXgubmV3QnVpbGRlcigpCisgICAgICAgICAgICAgICAgLnNldEtub3duSXNzdWUoNDU2KQorICAgICAgICAgICAgICAgIC5zZXRBbGlhcygyKQorICAgICAgICAgICAgICAgIC5idWlsZCgpOworICAgICAgICB2YXIgcmVzdWx0ID0gUGFyc2VyLnBhcnNlQmFja3BvcnRlZEZpeGVzKAorICAgICAgICAgICAgICAgIEltbXV0YWJsZUxpc3Qub2YoaW5wdXRTdHJlYW0oa2kxMjMpLCBpbnB1dFN0cmVhbShraTQ1NikpKTsKKyAgICAgICAgYXNzZXJ0VGhhdChyZXN1bHQpLmlzRXF1YWxUbygKKyAgICAgICAgICAgICAgICBCYWNrcG9ydGVkRml4ZXMubmV3QnVpbGRlcigpCisgICAgICAgICAgICAgICAgICAgICAgICAuYWRkRml4ZXMoa2kxMjMpCisgICAgICAgICAgICAgICAgICAgICAgICAuYWRkRml4ZXMoa2k0NTYpCisgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgQnl0ZUFycmF5SW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0oQmFja3BvcnRlZEZpeCBmKSB7CisgICAgICAgIHJldHVybiBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oZi50b0J5dGVBcnJheSgpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jaS9BbmRyb2lkLmJwIGIvY2kvQW5kcm9pZC5icAppbmRleCA2ZDRhYzM1Li4zZjI4YmU0IDEwMDY0NAotLS0gYS9jaS9BbmRyb2lkLmJwCisrKyBiL2NpL0FuZHJvaWQuYnAKQEAgLTI1LDcgKzI1LDcgQEAKICAgICAgICAgImJ1aWxkX3Rlc3Rfc3VpdGVzX3Rlc3QucHkiLAogICAgIF0sCiAgICAgbGliczogWwotICAgICAgICAiYnVpbGRfdGVzdF9zdWl0ZXMiLAorICAgICAgICAiYnVpbGRfdGVzdF9zdWl0ZXNfbGliIiwKICAgICAgICAgInB5ZmFrZWZzIiwKICAgICAgICAgImNpX3Rlc3RfbGliIiwKICAgICBdLApAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICAiYnVpbGRfdGVzdF9zdWl0ZXNfbG9jYWxfdGVzdC5weSIsCiAgICAgXSwKICAgICBsaWJzOiBbCi0gICAgICAgICJidWlsZF90ZXN0X3N1aXRlcyIsCisgICAgICAgICJidWlsZF90ZXN0X3N1aXRlc19saWIiLAogICAgICAgICAicHlmYWtlZnMiLAogICAgICAgICAiY2lfdGVzdF9saWIiLAogICAgIF0sCkBAIC03OSw3ICs3OSw3IEBACiAgICAgICAgICJvcHRpbWl6ZWRfdGFyZ2V0c190ZXN0LnB5IiwKICAgICBdLAogICAgIGxpYnM6IFsKLSAgICAgICAgImJ1aWxkX3Rlc3Rfc3VpdGVzIiwKKyAgICAgICAgImJ1aWxkX3Rlc3Rfc3VpdGVzX2xpYiIsCiAgICAgICAgICJweWZha2VmcyIsCiAgICAgXSwKICAgICB0ZXN0X29wdGlvbnM6IHsKQEAgLTk1LDEzICs5NSwzNiBAQAogICAgIH0sCiB9CiAKLXB5dGhvbl9saWJyYXJ5X2hvc3QgeworcHl0aG9uX2JpbmFyeV9ob3N0IHsKICAgICBuYW1lOiAiYnVpbGRfdGVzdF9zdWl0ZXMiLAogICAgIHNyY3M6IFsKICAgICAgICAgImJ1aWxkX3Rlc3Rfc3VpdGVzLnB5IiwKICAgICAgICAgIm9wdGltaXplZF90YXJnZXRzLnB5IiwKICAgICAgICAgInRlc3RfbWFwcGluZ19tb2R1bGVfcmV0cmlldmVyLnB5IiwKICAgICAgICAgImJ1aWxkX2NvbnRleHQucHkiLAorICAgICAgICAidGVzdF9kaXNjb3ZlcnlfYWdlbnQucHkiLAorICAgICAgICAibWV0cmljc19hZ2VudC5weSIsCisgICAgICAgICJidWlsZGJvdC5weSIsCisgICAgXSwKKyAgICBtYWluOiAiYnVpbGRfdGVzdF9zdWl0ZXMucHkiLAorICAgIGxpYnM6IFsKKyAgICAgICAgInNvb25nLW1ldHJpY3MtcHJvdG8tcHkiLAorICAgIF0sCit9CisKK3B5dGhvbl9saWJyYXJ5X2hvc3QgeworICAgIG5hbWU6ICJidWlsZF90ZXN0X3N1aXRlc19saWIiLAorICAgIHNyY3M6IFsKKyAgICAgICAgImJ1aWxkX3Rlc3Rfc3VpdGVzLnB5IiwKKyAgICAgICAgIm9wdGltaXplZF90YXJnZXRzLnB5IiwKKyAgICAgICAgInRlc3RfbWFwcGluZ19tb2R1bGVfcmV0cmlldmVyLnB5IiwKKyAgICAgICAgImJ1aWxkX2NvbnRleHQucHkiLAorICAgICAgICAidGVzdF9kaXNjb3ZlcnlfYWdlbnQucHkiLAorICAgICAgICAibWV0cmljc19hZ2VudC5weSIsCisgICAgICAgICJidWlsZGJvdC5weSIsCisgICAgXSwKKyAgICBsaWJzOiBbCisgICAgICAgICJzb29uZy1tZXRyaWNzLXByb3RvLXB5IiwKICAgICBdLAogfQogCmRpZmYgLS1naXQgYS9jaS9idWlsZF9jb250ZXh0LnB5IGIvY2kvYnVpbGRfY29udGV4dC5weQppbmRleCBjYzQ4ZDUzLi5jN2ExZGVmIDEwMDY0NAotLS0gYS9jaS9idWlsZF9jb250ZXh0LnB5CisrKyBiL2NpL2J1aWxkX2NvbnRleHQucHkKQEAgLTQ3LDYgKzQ3LDkgQEAKICAgICAgIHNlbGYuaXNfdGVzdF9tYXBwaW5nID0gRmFsc2UKICAgICAgIHNlbGYudGVzdF9tYXBwaW5nX3Rlc3RfZ3JvdXBzID0gc2V0KCkKICAgICAgIHNlbGYuZmlsZV9kb3dubG9hZF9vcHRpb25zID0gc2V0KCkKKyAgICAgIHNlbGYubmFtZSA9IHRlc3RfaW5mb19kaWN0LmdldCgnbmFtZScpCisgICAgICBzZWxmLmNvbW1hbmQgPSB0ZXN0X2luZm9fZGljdC5nZXQoJ2NvbW1hbmQnKQorICAgICAgc2VsZi5leHRyYV9vcHRpb25zID0gdGVzdF9pbmZvX2RpY3QuZ2V0KCdleHRyYU9wdGlvbnMnKQogICAgICAgZm9yIG9wdCBpbiB0ZXN0X2luZm9fZGljdC5nZXQoJ2V4dHJhT3B0aW9ucycsIFtdKToKICAgICAgICAga2V5ID0gb3B0LmdldCgna2V5JykKICAgICAgICAgaWYga2V5ID09ICd0ZXN0LW1hcHBpbmctdGVzdC1ncm91cCc6CmRpZmYgLS1naXQgYS9jb3JlL3Rhc2tzL3Rvb2xzL3VwZGF0ZV9ib290bG9hZGVyX3JhZGlvX2ltYWdlLm1rIGIvY2kvYnVpbGRfZGV2aWNlX2FuZF90ZXN0cwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CnNpbWlsYXJpdHkgaW5kZXggNjIlCmNvcHkgZnJvbSBjb3JlL3Rhc2tzL3Rvb2xzL3VwZGF0ZV9ib290bG9hZGVyX3JhZGlvX2ltYWdlLm1rCmNvcHkgdG8gY2kvYnVpbGRfZGV2aWNlX2FuZF90ZXN0cwppbmRleCAwZWJmMjQ3Li42M2QzY2UzCi0tLSBhL2NvcmUvdGFza3MvdG9vbHMvdXBkYXRlX2Jvb3Rsb2FkZXJfcmFkaW9faW1hZ2UubWsKKysrIGIvY2kvYnVpbGRfZGV2aWNlX2FuZF90ZXN0cwpAQCAtMSwxNyArMSwxOSBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIyEvdXNyL2Jpbi9lbnYgYmFzaAorIworIyBDb3B5cmlnaHQgMjAyNCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAogIwogIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICMKLSMgICAgICBodHRwOiN3d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAjCiAjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKICMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCitzZXQgLWV1byBwaXBlZmFpbAogCi1pZmVxICgkKFVTRVNfREVWSUNFX0dPT0dMRV9aVU1BKSx0cnVlKQotICAgIC1pbmNsdWRlIHZlbmRvci9nb29nbGVfZGV2aWNlcy96dW1hL3ByZWJ1aWx0cy9taXNjX2JpbnMvdXBkYXRlX2Jvb3Rsb2FkZXJfcmFkaW9faW1hZ2UubWsKLWVuZGlmCitidWlsZC9zb29uZy9zb29uZ191aS5iYXNoIC0tbWFrZS1tb2RlIGJ1aWxkX3Rlc3Rfc3VpdGVzCiskKGJ1aWxkL3Nvb25nL3Nvb25nX3VpLmJhc2ggLS1kdW1wdmFyLW1vZGUgSE9TVF9PVVQpL2Jpbi9idWlsZF90ZXN0X3N1aXRlcyAtLWRldmljZS1idWlsZCAkQApkaWZmIC0tZ2l0IGEvY2kvYnVpbGRfbWV0YWRhdGEgYi9jaS9idWlsZF9tZXRhZGF0YQppbmRleCBhOGViNjVkLi5jZDAxMWM4IDEwMDc1NQotLS0gYS9jaS9idWlsZF9tZXRhZGF0YQorKysgYi9jaS9idWlsZF9tZXRhZGF0YQpAQCAtMjAsNiArMjAsOSBAQAogZXhwb3J0IFRBUkdFVF9SRUxFQVNFPXRydW5rX3N0YWdpbmcKIGV4cG9ydCBUQVJHRVRfQlVJTERfVkFSSUFOVD1lbmcKIAotYnVpbGQvc29vbmcvYmluL20gZGlzdCBcCitUQVJHRVRTPSgKICAgICBhbGxfdGVhbXMKKyAgICByZWxlYXNlX2NvbmZpZ19tZXRhZGF0YQorKQogCitidWlsZC9zb29uZy9iaW4vbSBkaXN0ICR7VEFSR0VUU1tAXX0KZGlmZiAtLWdpdCBhL2NpL2J1aWxkX3Rlc3Rfc3VpdGVzIGIvY2kvYnVpbGRfdGVzdF9zdWl0ZXMKaW5kZXggNWFhZjJmNC4uNzQ0NzBhOCAxMDA3NTUKLS0tIGEvY2kvYnVpbGRfdGVzdF9zdWl0ZXMKKysrIGIvY2kvYnVpbGRfdGVzdF9zdWl0ZXMKQEAgLTEsNCArMSw0IEBACi0jIXByZWJ1aWx0cy9idWlsZC10b29scy9saW51eC14ODYvYmluL3B5My1jbWQgLUIKKyMhL3Vzci9iaW4vZW52IGJhc2gKICMKICMgQ29weXJpZ2h0IDIwMjQsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICMKQEAgLTEzLDggKzEzLDcgQEAKICMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCitzZXQgLWV1byBwaXBlZmFpbAogCi1pbXBvcnQgYnVpbGRfdGVzdF9zdWl0ZXMKLWltcG9ydCBzeXMKLQotYnVpbGRfdGVzdF9zdWl0ZXMubWFpbihzeXMuYXJndlsxOl0pCitidWlsZC9zb29uZy9zb29uZ191aS5iYXNoIC0tbWFrZS1tb2RlIGJ1aWxkX3Rlc3Rfc3VpdGVzCiskKGJ1aWxkL3Nvb25nL3Nvb25nX3VpLmJhc2ggLS1kdW1wdmFyLW1vZGUgSE9TVF9PVVQpL2Jpbi9idWlsZF90ZXN0X3N1aXRlcyAkQApkaWZmIC0tZ2l0IGEvY2kvYnVpbGRfdGVzdF9zdWl0ZXMucHkgYi9jaS9idWlsZF90ZXN0X3N1aXRlcy5weQppbmRleCBiOGM0YTM4Li5iNjdlY2VjIDEwMDY0NAotLS0gYS9jaS9idWlsZF90ZXN0X3N1aXRlcy5weQorKysgYi9jaS9idWlsZF90ZXN0X3N1aXRlcy5weQpAQCAtMjAsMTYgKzIwLDIwIEBACiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiBpbXBvcnQgcGF0aGxpYgoraW1wb3J0IHJlCiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cwogZnJvbSB0eXBpbmcgaW1wb3J0IENhbGxhYmxlCiBmcm9tIGJ1aWxkX2NvbnRleHQgaW1wb3J0IEJ1aWxkQ29udGV4dAogaW1wb3J0IG9wdGltaXplZF90YXJnZXRzCitpbXBvcnQgbWV0cmljc19hZ2VudAoraW1wb3J0IHRlc3RfZGlzY292ZXJ5X2FnZW50CiAKIAotUkVRVUlSRURfRU5WX1ZBUlMgPSBmcm96ZW5zZXQoWydUQVJHRVRfUFJPRFVDVCcsICdUQVJHRVRfUkVMRUFTRScsICdUT1AnXSkKK1JFUVVJUkVEX0VOVl9WQVJTID0gZnJvemVuc2V0KFsnVEFSR0VUX1BST0RVQ1QnLCAnVEFSR0VUX1JFTEVBU0UnLCAnVE9QJywgJ0RJU1RfRElSJ10pCiBTT09OR19VSV9FWEVfUkVMX1BBVEggPSAnYnVpbGQvc29vbmcvc29vbmdfdWkuYmFzaCcKIExPR19QQVRIID0gJ2xvZ3MvYnVpbGRfdGVzdF9zdWl0ZXMubG9nJworUkVRVUlSRURfQlVJTERfVEFSR0VUUyA9IGZyb3plbnNldChbJ2Rpc3QnXSkKIAogCiBjbGFzcyBFcnJvcihFeGNlcHRpb24pOgpAQCAtNzAsMTIgKzc0LDQ2IEBACiAKICAgICBidWlsZF90YXJnZXRzID0gc2V0KCkKICAgICBwYWNrYWdpbmdfY29tbWFuZHNfZ2V0dGVycyA9IFtdCi0gICAgZm9yIHRhcmdldCBpbiBzZWxmLmFyZ3MuZXh0cmFfdGFyZ2V0czoKLSAgICAgIGlmIHNlbGYuX3VudXNlZF90YXJnZXRfZXhjbHVzaW9uX2VuYWJsZWQoCi0gICAgICAgICAgdGFyZ2V0Ci0gICAgICApIGFuZCBub3Qgc2VsZi5idWlsZF9jb250ZXh0LmJ1aWxkX3RhcmdldF91c2VkKHRhcmdldCk6Ci0gICAgICAgIGNvbnRpbnVlCisgICAgIyBJbiBvcmRlciB0byByb2xsIG9wdGltaXphdGlvbnMgb3V0IGRpZmZlcmVudGx5IGJldHdlZW4gdGVzdCBzdWl0ZXMgYW5kCisgICAgIyBkZXZpY2UgYnVpbGRzLCB3ZSBoYXZlIHNlcGFyYXRlIGZsYWdzLgorICAgIGlmICgKKyAgICAgICAgJ3Rlc3Rfc3VpdGVzX3ppcF90ZXN0X2Rpc2NvdmVyeScKKyAgICAgICAgaW4gc2VsZi5idWlsZF9jb250ZXh0LmVuYWJsZWRfYnVpbGRfZmVhdHVyZXMKKyAgICAgICAgYW5kIG5vdCBzZWxmLmFyZ3MuZGV2aWNlX2J1aWxkCisgICAgKSBvciAoCisgICAgICAgICdkZXZpY2VfemlwX3Rlc3RfZGlzY292ZXJ5JworICAgICAgICBpbiBzZWxmLmJ1aWxkX2NvbnRleHQuZW5hYmxlZF9idWlsZF9mZWF0dXJlcworICAgICAgICBhbmQgc2VsZi5hcmdzLmRldmljZV9idWlsZAorICAgICk6CisgICAgICBwcmVsaW1pbmFyeV9idWlsZF90YXJnZXRzID0gc2VsZi5fY29sbGVjdF9wcmVsaW1pbmFyeV9idWlsZF90YXJnZXRzKCkKKyAgICBlbHNlOgorICAgICAgcHJlbGltaW5hcnlfYnVpbGRfdGFyZ2V0cyA9IHNlbGYuX2xlZ2FjeV9jb2xsZWN0X3ByZWxpbWluYXJ5X2J1aWxkX3RhcmdldHMoKQogCisgICAgICAjIEtlZXAgcmVwb3J0aW5nIG1ldHJpY3Mgd2hlbiB0ZXN0IGRpc2NvdmVyeSBpcyBkaXNhYmxlZC4KKyAgICAgICMgVG8gYmUgcmVtb3ZlZCBvbmNlIHRlc3QgZGlzY292ZXJ5IGlzIGZ1bGx5IHJvbGxlZCBvdXQuCisgICAgICBvcHRpbWl6YXRpb25fcmF0aW9uYWxlID0gJycKKyAgICAgIHRlc3RfZGlzY292ZXJ5X3ppcF9yZWdleGVzID0gc2V0KCkKKyAgICAgIHRyeToKKyAgICAgICAgdGVzdF9kaXNjb3ZlcnlfemlwX3JlZ2V4ZXMgPSBzZWxmLl9nZXRfdGVzdF9kaXNjb3ZlcnlfemlwX3JlZ2V4ZXMoKQorICAgICAgICBsb2dnaW5nLmluZm8oZidEaXNjb3ZlcmVkIHRlc3QgZGlzY292ZXJ5IHJlZ2V4ZXM6IHt0ZXN0X2Rpc2NvdmVyeV96aXBfcmVnZXhlc30nKQorICAgICAgZXhjZXB0IHRlc3RfZGlzY292ZXJ5X2FnZW50LlRlc3REaXNjb3ZlcnlFcnJvciBhcyBlOgorICAgICAgICBvcHRpbWl6YXRpb25fcmF0aW9uYWxlID0gZS5tZXNzYWdlCisgICAgICAgIGxvZ2dpbmcud2FybmluZyhmJ1VuYWJsZSB0byBwZXJmb3JtIHRlc3QgZGlzY292ZXJ5OiB7b3B0aW1pemF0aW9uX3JhdGlvbmFsZX0nKQorCisgICAgICBmb3IgdGFyZ2V0IGluIHNlbGYuYXJncy5leHRyYV90YXJnZXRzOgorICAgICAgICBpZiBvcHRpbWl6YXRpb25fcmF0aW9uYWxlOgorICAgICAgICAgIGdldF9tZXRyaWNzX2FnZW50KCkucmVwb3J0X3Vub3B0aW1pemVkX3RhcmdldCh0YXJnZXQsIG9wdGltaXphdGlvbl9yYXRpb25hbGUpCisgICAgICAgICAgY29udGludWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgIHJlZ2V4ID0gcidcYiglcy4qKVxiJyAlIHJlLmVzY2FwZSh0YXJnZXQpCisgICAgICAgICAgaWYgYW55KHJlLnNlYXJjaChyZWdleCwgb3B0KSBmb3Igb3B0IGluIHRlc3RfZGlzY292ZXJ5X3ppcF9yZWdleGVzKToKKyAgICAgICAgICAgIGdldF9tZXRyaWNzX2FnZW50KCkucmVwb3J0X3Vub3B0aW1pemVkX3RhcmdldCh0YXJnZXQsICdUZXN0IGFydGlmYWN0IHVzZWQuJykKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgZ2V0X21ldHJpY3NfYWdlbnQoKS5yZXBvcnRfb3B0aW1pemVkX3RhcmdldCh0YXJnZXQpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICBsb2dnaW5nLmVycm9yKGYndW5hYmxlIHRvIHBhcnNlIHRlc3QgZGlzY292ZXJ5IG91dHB1dDoge3JlcHIoZSl9JykKKworICAgIGZvciB0YXJnZXQgaW4gcHJlbGltaW5hcnlfYnVpbGRfdGFyZ2V0czoKICAgICAgIHRhcmdldF9vcHRpbWl6ZXJfZ2V0dGVyID0gc2VsZi50YXJnZXRfb3B0aW1pemF0aW9ucy5nZXQodGFyZ2V0LCBOb25lKQogICAgICAgaWYgbm90IHRhcmdldF9vcHRpbWl6ZXJfZ2V0dGVyOgogICAgICAgICBidWlsZF90YXJnZXRzLmFkZCh0YXJnZXQpCkBAIC05MSwxMiArMTI5LDg1IEBACiAKICAgICByZXR1cm4gQnVpbGRQbGFuKGJ1aWxkX3RhcmdldHMsIHBhY2thZ2luZ19jb21tYW5kc19nZXR0ZXJzKQogCisgIGRlZiBfY29sbGVjdF9wcmVsaW1pbmFyeV9idWlsZF90YXJnZXRzKHNlbGYpOgorICAgIGJ1aWxkX3RhcmdldHMgPSBzZXQoKQorICAgIHRyeToKKyAgICAgIHRlc3RfZGlzY292ZXJ5X3ppcF9yZWdleGVzID0gc2VsZi5fZ2V0X3Rlc3RfZGlzY292ZXJ5X3ppcF9yZWdleGVzKCkKKyAgICAgIGxvZ2dpbmcuaW5mbyhmJ0Rpc2NvdmVyZWQgdGVzdCBkaXNjb3ZlcnkgcmVnZXhlczoge3Rlc3RfZGlzY292ZXJ5X3ppcF9yZWdleGVzfScpCisgICAgZXhjZXB0IHRlc3RfZGlzY292ZXJ5X2FnZW50LlRlc3REaXNjb3ZlcnlFcnJvciBhcyBlOgorICAgICAgb3B0aW1pemF0aW9uX3JhdGlvbmFsZSA9IGUubWVzc2FnZQorICAgICAgbG9nZ2luZy53YXJuaW5nKGYnVW5hYmxlIHRvIHBlcmZvcm0gdGVzdCBkaXNjb3Zlcnk6IHtvcHRpbWl6YXRpb25fcmF0aW9uYWxlfScpCisKKyAgICAgIGZvciB0YXJnZXQgaW4gc2VsZi5hcmdzLmV4dHJhX3RhcmdldHM6CisgICAgICAgIGdldF9tZXRyaWNzX2FnZW50KCkucmVwb3J0X3Vub3B0aW1pemVkX3RhcmdldCh0YXJnZXQsIG9wdGltaXphdGlvbl9yYXRpb25hbGUpCisgICAgICByZXR1cm4gc2VsZi5fbGVnYWN5X2NvbGxlY3RfcHJlbGltaW5hcnlfYnVpbGRfdGFyZ2V0cygpCisKKyAgICBmb3IgdGFyZ2V0IGluIHNlbGYuYXJncy5leHRyYV90YXJnZXRzOgorICAgICAgaWYgdGFyZ2V0IGluIFJFUVVJUkVEX0JVSUxEX1RBUkdFVFM6CisgICAgICAgIGJ1aWxkX3RhcmdldHMuYWRkKHRhcmdldCkKKyAgICAgICAgY29udGludWUKKworICAgICAgcmVnZXggPSByJ1xiKCVzLiopXGInICUgcmUuZXNjYXBlKHRhcmdldCkKKyAgICAgIGZvciBvcHQgaW4gdGVzdF9kaXNjb3ZlcnlfemlwX3JlZ2V4ZXM6CisgICAgICAgIHRyeToKKyAgICAgICAgICBpZiByZS5zZWFyY2gocmVnZXgsIG9wdCk6CisgICAgICAgICAgICBnZXRfbWV0cmljc19hZ2VudCgpLnJlcG9ydF91bm9wdGltaXplZF90YXJnZXQodGFyZ2V0LCAnVGVzdCBhcnRpZmFjdCB1c2VkLicpCisgICAgICAgICAgICBidWlsZF90YXJnZXRzLmFkZCh0YXJnZXQpCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgIGdldF9tZXRyaWNzX2FnZW50KCkucmVwb3J0X29wdGltaXplZF90YXJnZXQodGFyZ2V0KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgIyBJbiBjYXNlIG9mIGV4Y2VwdGlvbiByZXBvcnQgYXMgdW5vcHRpbWl6ZWQKKyAgICAgICAgICBidWlsZF90YXJnZXRzLmFkZCh0YXJnZXQpCisgICAgICAgICAgZ2V0X21ldHJpY3NfYWdlbnQoKS5yZXBvcnRfdW5vcHRpbWl6ZWRfdGFyZ2V0KHRhcmdldCwgZidFcnJvciBpbiBwYXJzaW5nIHRlc3QgZGlzY292ZXJ5IG91dHB1dCBmb3Ige3RhcmdldH06IHtyZXByKGUpfScpCisgICAgICAgICAgbG9nZ2luZy5lcnJvcihmJ3VuYWJsZSB0byBwYXJzZSB0ZXN0IGRpc2NvdmVyeSBvdXRwdXQ6IHtyZXByKGUpfScpCisKKyAgICByZXR1cm4gYnVpbGRfdGFyZ2V0cworCisgIGRlZiBfbGVnYWN5X2NvbGxlY3RfcHJlbGltaW5hcnlfYnVpbGRfdGFyZ2V0cyhzZWxmKToKKyAgICBidWlsZF90YXJnZXRzID0gc2V0KCkKKyAgICBmb3IgdGFyZ2V0IGluIHNlbGYuYXJncy5leHRyYV90YXJnZXRzOgorICAgICAgaWYgc2VsZi5fdW51c2VkX3RhcmdldF9leGNsdXNpb25fZW5hYmxlZCgKKyAgICAgICAgICB0YXJnZXQKKyAgICAgICkgYW5kIG5vdCBzZWxmLmJ1aWxkX2NvbnRleHQuYnVpbGRfdGFyZ2V0X3VzZWQodGFyZ2V0KToKKyAgICAgICAgY29udGludWUKKworICAgICAgYnVpbGRfdGFyZ2V0cy5hZGQodGFyZ2V0KQorICAgIHJldHVybiBidWlsZF90YXJnZXRzCisKICAgZGVmIF91bnVzZWRfdGFyZ2V0X2V4Y2x1c2lvbl9lbmFibGVkKHNlbGYsIHRhcmdldDogc3RyKSAtPiBib29sOgogICAgIHJldHVybiAoCiAgICAgICAgIGYne3RhcmdldH1fdW51c2VkX2V4Y2x1c2lvbicKICAgICAgICAgaW4gc2VsZi5idWlsZF9jb250ZXh0LmVuYWJsZWRfYnVpbGRfZmVhdHVyZXMKICAgICApCiAKKyAgZGVmIF9nZXRfdGVzdF9kaXNjb3ZlcnlfemlwX3JlZ2V4ZXMoc2VsZikgLT4gc2V0W3N0cl06CisgICAgYnVpbGRfdGFyZ2V0X3JlZ2V4ZXMgPSBzZXQoKQorICAgIGZvciB0ZXN0X2luZm8gaW4gc2VsZi5idWlsZF9jb250ZXh0LnRlc3RfaW5mb3M6CisgICAgICB0Zl9jb21tYW5kID0gc2VsZi5fYnVpbGRfdGZfY29tbWFuZCh0ZXN0X2luZm8pCisgICAgICBkaXNjb3ZlcnlfYWdlbnQgPSB0ZXN0X2Rpc2NvdmVyeV9hZ2VudC5UZXN0RGlzY292ZXJ5QWdlbnQodHJhZGVmZWRfYXJncz10Zl9jb21tYW5kKQorICAgICAgZm9yIHJlZ2V4IGluIGRpc2NvdmVyeV9hZ2VudC5kaXNjb3Zlcl90ZXN0X3ppcF9yZWdleGVzKCk6CisgICAgICAgIGJ1aWxkX3RhcmdldF9yZWdleGVzLmFkZChyZWdleCkKKyAgICByZXR1cm4gYnVpbGRfdGFyZ2V0X3JlZ2V4ZXMKKworCisgIGRlZiBfYnVpbGRfdGZfY29tbWFuZChzZWxmLCB0ZXN0X2luZm8pIC0+IGxpc3Rbc3RyXToKKyAgICBjb21tYW5kID0gW3Rlc3RfaW5mby5jb21tYW5kXQorICAgIGZvciBleHRyYV9vcHRpb24gaW4gdGVzdF9pbmZvLmV4dHJhX29wdGlvbnM6CisgICAgICBpZiBub3QgZXh0cmFfb3B0aW9uLmdldCgna2V5Jyk6CisgICAgICAgIGNvbnRpbnVlCisgICAgICBhcmdfa2V5ID0gJy0tJyArIGV4dHJhX29wdGlvbi5nZXQoJ2tleScpCisgICAgICBpZiBhcmdfa2V5ID09ICctLWJ1aWxkLWlkJzoKKyAgICAgICAgY29tbWFuZC5hcHBlbmQoYXJnX2tleSkKKyAgICAgICAgY29tbWFuZC5hcHBlbmQob3MuZW52aXJvbi5nZXQoJ0JVSUxEX05VTUJFUicpKQorICAgICAgICBjb250aW51ZQorICAgICAgaWYgZXh0cmFfb3B0aW9uLmdldCgndmFsdWVzJyk6CisgICAgICAgIGZvciB2YWx1ZSBpbiBleHRyYV9vcHRpb24uZ2V0KCd2YWx1ZXMnKToKKyAgICAgICAgICBjb21tYW5kLmFwcGVuZChhcmdfa2V5KQorICAgICAgICAgIGNvbW1hbmQuYXBwZW5kKHZhbHVlKQorICAgICAgZWxzZToKKyAgICAgICAgY29tbWFuZC5hcHBlbmQoYXJnX2tleSkKKworICAgIHJldHVybiBjb21tYW5kCiAKIEBkYXRhY2xhc3MoZnJvemVuPVRydWUpCiBjbGFzcyBCdWlsZFBsYW46CkBAIC0xMTMsMTkgKzIyNCwyNyBAQAogICBSZXR1cm5zOgogICAgIFRoZSBleGl0IGNvZGUgb2YgdGhlIGJ1aWxkLgogICAiIiIKLSAgYXJncyA9IHBhcnNlX2FyZ3MoYXJndikKLSAgY2hlY2tfcmVxdWlyZWRfZW52KCkKLSAgYnVpbGRfY29udGV4dCA9IEJ1aWxkQ29udGV4dChsb2FkX2J1aWxkX2NvbnRleHQoKSkKLSAgYnVpbGRfcGxhbm5lciA9IEJ1aWxkUGxhbm5lcigKLSAgICAgIGJ1aWxkX2NvbnRleHQsIGFyZ3MsIG9wdGltaXplZF90YXJnZXRzLk9QVElNSVpFRF9CVUlMRF9UQVJHRVRTCi0gICkKLSAgYnVpbGRfcGxhbiA9IGJ1aWxkX3BsYW5uZXIuY3JlYXRlX2J1aWxkX3BsYW4oKQorICBnZXRfbWV0cmljc19hZ2VudCgpLmFuYWx5c2lzX3N0YXJ0KCkKKyAgdHJ5OgorICAgIGFyZ3MgPSBwYXJzZV9hcmdzKGFyZ3YpCisgICAgY2hlY2tfcmVxdWlyZWRfZW52KCkKKyAgICBidWlsZF9jb250ZXh0ID0gQnVpbGRDb250ZXh0KGxvYWRfYnVpbGRfY29udGV4dCgpKQorICAgIGJ1aWxkX3BsYW5uZXIgPSBCdWlsZFBsYW5uZXIoCisgICAgICAgIGJ1aWxkX2NvbnRleHQsIGFyZ3MsIG9wdGltaXplZF90YXJnZXRzLk9QVElNSVpFRF9CVUlMRF9UQVJHRVRTCisgICAgKQorICAgIGJ1aWxkX3BsYW4gPSBidWlsZF9wbGFubmVyLmNyZWF0ZV9idWlsZF9wbGFuKCkKKyAgZXhjZXB0OgorICAgIHJhaXNlCisgIGZpbmFsbHk6CisgICAgZ2V0X21ldHJpY3NfYWdlbnQoKS5hbmFseXNpc19lbmQoKQogCiAgIHRyeToKICAgICBleGVjdXRlX2J1aWxkX3BsYW4oYnVpbGRfcGxhbikKICAgZXhjZXB0IEJ1aWxkRmFpbHVyZUVycm9yIGFzIGU6CiAgICAgbG9nZ2luZy5lcnJvcignQnVpbGQgY29tbWFuZCBmYWlsZWQhIENoZWNrIGJ1aWxkX2xvZyBmb3IgZGV0YWlscy4nKQogICAgIHJldHVybiBlLnJldHVybl9jb2RlCisgIGZpbmFsbHk6CisgICAgZ2V0X21ldHJpY3NfYWdlbnQoKS5lbmRfcmVwb3J0aW5nKCkKIAogICByZXR1cm4gMAogCkBAIC0xMzYsNiArMjU1LDExIEBACiAgIGFyZ3BhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAnZXh0cmFfdGFyZ2V0cycsIG5hcmdzPScqJywgaGVscD0nRXh0cmEgdGVzdCBzdWl0ZXMgdG8gYnVpbGQuJwogICApCisgIGFyZ3BhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAnLS1kZXZpY2UtYnVpbGQnLAorICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgIGhlbHA9J0ZsYWcgdG8gaW5kaWNhdGUgcnVubmluZyBhIGRldmljZSBidWlsZC4nLAorICApCiAKICAgcmV0dXJuIGFyZ3BhcnNlci5wYXJzZV9hcmdzKGFyZ3YpCiAKQEAgLTE4MywxMiArMzA3LDE1IEBACiAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgogICAgIHJhaXNlIEJ1aWxkRmFpbHVyZUVycm9yKGUucmV0dXJuY29kZSkgZnJvbSBlCiAKLSAgZm9yIHBhY2thZ2luZ19jb21tYW5kc19nZXR0ZXIgaW4gYnVpbGRfcGxhbi5wYWNrYWdpbmdfY29tbWFuZHNfZ2V0dGVyczoKLSAgICB0cnk6CisgIGdldF9tZXRyaWNzX2FnZW50KCkucGFja2FnaW5nX3N0YXJ0KCkKKyAgdHJ5OgorICAgIGZvciBwYWNrYWdpbmdfY29tbWFuZHNfZ2V0dGVyIGluIGJ1aWxkX3BsYW4ucGFja2FnaW5nX2NvbW1hbmRzX2dldHRlcnM6CiAgICAgICBmb3IgcGFja2FnaW5nX2NvbW1hbmQgaW4gcGFja2FnaW5nX2NvbW1hbmRzX2dldHRlcigpOgogICAgICAgICBydW5fY29tbWFuZChwYWNrYWdpbmdfY29tbWFuZCkKLSAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKLSAgICAgIHJhaXNlIEJ1aWxkRmFpbHVyZUVycm9yKGUucmV0dXJuY29kZSkgZnJvbSBlCisgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgIHJhaXNlIEJ1aWxkRmFpbHVyZUVycm9yKGUucmV0dXJuY29kZSkgZnJvbSBlCisgIGZpbmFsbHk6CisgICAgZ2V0X21ldHJpY3NfYWdlbnQoKS5wYWNrYWdpbmdfZW5kKCkKIAogCiBkZWYgZ2V0X3RvcCgpIC0+IHBhdGhsaWIuUGF0aDoKQEAgLTE5OSw2ICszMjYsMTAgQEAKICAgc3VicHJvY2Vzcy5ydW4oYXJncz1hcmdzLCBjaGVjaz1UcnVlLCBzdGRvdXQ9c3Rkb3V0KQogCiAKK2RlZiBnZXRfbWV0cmljc19hZ2VudCgpOgorICByZXR1cm4gbWV0cmljc19hZ2VudC5NZXRyaWNzQWdlbnQuaW5zdGFuY2UoKQorCisKIGRlZiBtYWluKGFyZ3YpOgogICBkaXN0X2RpciA9IG9zLmVudmlyb24uZ2V0KCdESVNUX0RJUicpCiAgIGlmIGRpc3RfZGlyOgpAQCAtMjA5LDMgKzM0MCw3IEBACiAgICAgICAgIGZpbGVuYW1lPWxvZ19maWxlLAogICAgICkKICAgc3lzLmV4aXQoYnVpbGRfdGVzdF9zdWl0ZXMoYXJndikpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgbWFpbihzeXMuYXJndlsxOl0pCmRpZmYgLS1naXQgYS9jaS9idWlsZF90ZXN0X3N1aXRlc190ZXN0LnB5IGIvY2kvYnVpbGRfdGVzdF9zdWl0ZXNfdGVzdC5weQppbmRleCAyYWZhYWI3Li4yOWQyNjhlIDEwMDY0NAotLS0gYS9jaS9idWlsZF90ZXN0X3N1aXRlc190ZXN0LnB5CisrKyBiL2NpL2J1aWxkX3Rlc3Rfc3VpdGVzX3Rlc3QucHkKQEAgLTM3LDYgKzM3LDggQEAKIGltcG9ydCBjaV90ZXN0X2xpYgogaW1wb3J0IG9wdGltaXplZF90YXJnZXRzCiBmcm9tIHB5ZmFrZWZzIGltcG9ydCBmYWtlX2ZpbGVzeXN0ZW1fdW5pdHRlc3QKK2ltcG9ydCBtZXRyaWNzX2FnZW50CitpbXBvcnQgdGVzdF9kaXNjb3ZlcnlfYWdlbnQKIAogCiBjbGFzcyBCdWlsZFRlc3RTdWl0ZXNUZXN0KGZha2VfZmlsZXN5c3RlbV91bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC01Miw2ICs1NCwxMCBAQAogICAgIHNlbGYuYWRkQ2xlYW51cChzdWJwcm9jZXNzX3J1bl9wYXRjaGVyLnN0b3ApCiAgICAgc2VsZi5tb2NrX3N1YnByb2Nlc3NfcnVuID0gc3VicHJvY2Vzc19ydW5fcGF0Y2hlci5zdGFydCgpCiAKKyAgICBtZXRyaWNzX2FnZW50X2ZpbmFsaXplX3BhdGNoZXIgPSBtb2NrLnBhdGNoKCdtZXRyaWNzX2FnZW50Lk1ldHJpY3NBZ2VudC5lbmRfcmVwb3J0aW5nJykKKyAgICBzZWxmLmFkZENsZWFudXAobWV0cmljc19hZ2VudF9maW5hbGl6ZV9wYXRjaGVyLnN0b3ApCisgICAgc2VsZi5tb2NrX21ldHJpY3NfYWdlbnRfZW5kID0gbWV0cmljc19hZ2VudF9maW5hbGl6ZV9wYXRjaGVyLnN0YXJ0KCkKKwogICAgIHNlbGYuX3NldHVwX3dvcmtpbmdfYnVpbGRfZW52KCkKIAogICBkZWYgdGVzdF9taXNzaW5nX3RhcmdldF9yZWxlYXNlX2Vudl92YXJfcmFpc2VzKHNlbGYpOgpAQCAtNzIsNiArNzgsMTIgQEAKICAgICB3aXRoIHNlbGYuYXNzZXJ0X3JhaXNlc193b3JkKGJ1aWxkX3Rlc3Rfc3VpdGVzLkVycm9yLCAnVE9QJyk6CiAgICAgICBidWlsZF90ZXN0X3N1aXRlcy5tYWluKFtdKQogCisgIGRlZiB0ZXN0X21pc3NpbmdfZGlzdF9kaXJfZW52X3Zhcl9yYWlzZXMoc2VsZik6CisgICAgZGVsIG9zLmVudmlyb25bJ0RJU1RfRElSJ10KKworICAgIHdpdGggc2VsZi5hc3NlcnRfcmFpc2VzX3dvcmQoYnVpbGRfdGVzdF9zdWl0ZXMuRXJyb3IsICdESVNUX0RJUicpOgorICAgICAgYnVpbGRfdGVzdF9zdWl0ZXMubWFpbihbXSkKKwogICBkZWYgdGVzdF9pbnZhbGlkX2FyZ19yYWlzZXMoc2VsZik6CiAgICAgaW52YWxpZF9hcmdzID0gWyctLWludmFsaWRfYXJnJ10KIApAQCAtMTA4LDYgKzEyMCw5IEBACiAgICAgc2VsZi5zb29uZ191aV9kaXIgPSBzZWxmLmZha2VfdG9wLmpvaW5wYXRoKCdidWlsZC9zb29uZycpCiAgICAgc2VsZi5zb29uZ191aV9kaXIubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKQogCisgICAgc2VsZi5sb2dzX2RpciA9IHNlbGYuZmFrZV90b3Auam9pbnBhdGgoJ2Rpc3QvbG9ncycpCisgICAgc2VsZi5sb2dzX2Rpci5ta2RpcihwYXJlbnRzPVRydWUsIGV4aXN0X29rPVRydWUpCisKICAgICBzZWxmLnNvb25nX3VpID0gc2VsZi5zb29uZ191aV9kaXIuam9pbnBhdGgoJ3Nvb25nX3VpLmJhc2gnKQogICAgIHNlbGYuc29vbmdfdWkudG91Y2goKQogCkBAIC0xMTUsNiArMTMwLDcgQEAKICAgICAgICAgJ1RBUkdFVF9SRUxFQVNFJzogJ3JlbGVhc2UnLAogICAgICAgICAnVEFSR0VUX1BST0RVQ1QnOiAncHJvZHVjdCcsCiAgICAgICAgICdUT1AnOiBzdHIoc2VsZi5mYWtlX3RvcCksCisgICAgICAgICdESVNUX0RJUic6IHN0cihzZWxmLmZha2VfdG9wLmpvaW5wYXRoKCdkaXN0JykpLAogICAgIH0pCiAKICAgICBzZWxmLm1vY2tfc3VicHJvY2Vzc19ydW4ucmV0dXJuX3ZhbHVlID0gMApAQCAtMjU2LDYgKzI3MiwxMiBAQAogICAgIGRlZiBnZXRfZW5hYmxlZF9mbGFnKHNlbGYpOgogICAgICAgcmV0dXJuIGYne3NlbGYudGFyZ2V0fV9lbmFibGVkJwogCisgIGRlZiBzZXRVcChzZWxmKToKKyAgICB0ZXN0X2Rpc2NvdmVyeV9hZ2VudF9wYXRjaGVyID0gbW9jay5wYXRjaCgndGVzdF9kaXNjb3ZlcnlfYWdlbnQuVGVzdERpc2NvdmVyeUFnZW50LmRpc2NvdmVyX3Rlc3RfemlwX3JlZ2V4ZXMnKQorICAgIHNlbGYuYWRkQ2xlYW51cCh0ZXN0X2Rpc2NvdmVyeV9hZ2VudF9wYXRjaGVyLnN0b3ApCisgICAgc2VsZi5tb2NrX3Rlc3RfZGlzY292ZXJ5X2FnZW50X2VuZCA9IHRlc3RfZGlzY292ZXJ5X2FnZW50X3BhdGNoZXIuc3RhcnQoKQorCisKICAgZGVmIHRlc3RfYnVpbGRfb3B0aW1pemF0aW9uX29mZl9idWlsZHNfZXZlcnl0aGluZyhzZWxmKToKICAgICBidWlsZF90YXJnZXRzID0geyd0YXJnZXRfMScsICd0YXJnZXRfMid9CiAgICAgYnVpbGRfcGxhbm5lciA9IHNlbGYuY3JlYXRlX2J1aWxkX3BsYW5uZXIoCmRpZmYgLS1naXQgYS9jaS9tZXRyaWNzX2FnZW50LnB5IGIvY2kvbWV0cmljc19hZ2VudC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzI0NzllCi0tLSAvZGV2L251bGwKKysrIGIvY2kvbWV0cmljc19hZ2VudC5weQpAQCAtMCwwICsxLDExNiBAQAorIyBDb3B5cmlnaHQgMjAyNCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisiIiJNZXRyaWNzQWdlbnQgaXMgYSBzaW5nbGV0b24gY2xhc3MgdGhhdCBjb2xsZWN0cyBtZXRyaWNzIGZvciBvcHRpbWl6ZWQgYnVpbGQuIiIiCisKK2Zyb20gZW51bSBpbXBvcnQgRW51bQoraW1wb3J0IHRpbWUKK2ltcG9ydCBtZXRyaWNzX3BiMgoraW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZworCisKK2NsYXNzIE1ldHJpY3NBZ2VudDoKKyAgX1NPT05HX01FVFJJQ1NfUEFUSCA9ICdsb2dzL3Nvb25nX21ldHJpY3MnCisgIF9ESVNUX0RJUiA9ICdESVNUX0RJUicKKyAgX2luc3RhbmNlID0gTm9uZQorCisgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICByYWlzZSBSdW50aW1lRXJyb3IoCisgICAgICAgICdNZXRyaWNzQWdlbnQgY2Fubm90IGJlIGluc3RhbnRpYWxpemVkLCB1c2UgaW5zdGFuY2UoKSBpbnN0ZWFkJworICAgICkKKworICBAY2xhc3NtZXRob2QKKyAgZGVmIGluc3RhbmNlKGNscyk6CisgICAgaWYgbm90IGNscy5faW5zdGFuY2U6CisgICAgICBjbHMuX2luc3RhbmNlID0gY2xzLl9fbmV3X18oY2xzKQorICAgICAgY2xzLl9pbnN0YW5jZS5fcHJvdG8gPSBtZXRyaWNzX3BiMi5PcHRpbWl6ZWRCdWlsZE1ldHJpY3MoKQorICAgICAgY2xzLl9pbnN0YW5jZS5faW5pdF9wcm90bygpCisgICAgICBjbHMuX2luc3RhbmNlLl90YXJnZXRfcmVzdWx0cyA9IGRpY3QoKQorCisgICAgcmV0dXJuIGNscy5faW5zdGFuY2UKKworICBkZWYgX2luaXRfcHJvdG8oc2VsZik6CisgICAgc2VsZi5fcHJvdG8uYW5hbHlzaXNfcGVyZi5uYW1lID0gJ09wdGltaXplZCBidWlsZCBhbmFseXNpcyB0aW1lLicKKyAgICBzZWxmLl9wcm90by5wYWNrYWdpbmdfcGVyZi5uYW1lID0gJ09wdGltaXplZCBidWlsZCB0b3RhbCBwYWNrYWdpbmcgdGltZS4nCisKKyAgZGVmIGFuYWx5c2lzX3N0YXJ0KHNlbGYpOgorICAgIHNlbGYuX3Byb3RvLmFuYWx5c2lzX3BlcmYuc3RhcnRfdGltZSA9IHRpbWUudGltZV9ucygpCisKKyAgZGVmIGFuYWx5c2lzX2VuZChzZWxmKToKKyAgICBzZWxmLl9wcm90by5hbmFseXNpc19wZXJmLnJlYWxfdGltZSA9ICgKKyAgICAgICAgdGltZS50aW1lX25zKCkgLSBzZWxmLl9wcm90by5hbmFseXNpc19wZXJmLnN0YXJ0X3RpbWUKKyAgICApCisKKyAgZGVmIHBhY2thZ2luZ19zdGFydChzZWxmKToKKyAgICBzZWxmLl9wcm90by5wYWNrYWdpbmdfcGVyZi5zdGFydF90aW1lID0gdGltZS50aW1lX25zKCkKKworICBkZWYgcGFja2FnaW5nX2VuZChzZWxmKToKKyAgICBzZWxmLl9wcm90by5wYWNrYWdpbmdfcGVyZi5yZWFsX3RpbWUgPSAoCisgICAgICAgIHRpbWUudGltZV9ucygpIC0gc2VsZi5fcHJvdG8ucGFja2FnaW5nX3BlcmYuc3RhcnRfdGltZQorICAgICkKKworICBkZWYgcmVwb3J0X29wdGltaXplZF90YXJnZXQoc2VsZiwgbmFtZTogc3RyKToKKyAgICB0YXJnZXRfcmVzdWx0ID0gbWV0cmljc19wYjIuT3B0aW1pemVkQnVpbGRNZXRyaWNzLlRhcmdldE9wdGltaXphdGlvblJlc3VsdCgpCisgICAgdGFyZ2V0X3Jlc3VsdC5uYW1lID0gbmFtZQorICAgIHRhcmdldF9yZXN1bHQub3B0aW1pemVkID0gVHJ1ZQorICAgIHNlbGYuX3RhcmdldF9yZXN1bHRzW25hbWVdID0gdGFyZ2V0X3Jlc3VsdAorCisgIGRlZiByZXBvcnRfdW5vcHRpbWl6ZWRfdGFyZ2V0KHNlbGYsIG5hbWU6IHN0ciwgb3B0aW1pemF0aW9uX3JhdGlvbmFsZTogc3RyKToKKyAgICB0YXJnZXRfcmVzdWx0ID0gbWV0cmljc19wYjIuT3B0aW1pemVkQnVpbGRNZXRyaWNzLlRhcmdldE9wdGltaXphdGlvblJlc3VsdCgpCisgICAgdGFyZ2V0X3Jlc3VsdC5uYW1lID0gbmFtZQorICAgIHRhcmdldF9yZXN1bHQub3B0aW1pemF0aW9uX3JhdGlvbmFsZSA9IG9wdGltaXphdGlvbl9yYXRpb25hbGUKKyAgICB0YXJnZXRfcmVzdWx0Lm9wdGltaXplZCA9IEZhbHNlCisgICAgc2VsZi5fdGFyZ2V0X3Jlc3VsdHNbbmFtZV0gPSB0YXJnZXRfcmVzdWx0CisKKyAgZGVmIHRhcmdldF9wYWNrYWdpbmdfc3RhcnQoc2VsZiwgbmFtZTogc3RyKToKKyAgICB0YXJnZXRfcmVzdWx0ID0gc2VsZi5fdGFyZ2V0X3Jlc3VsdHMuZ2V0KG5hbWUpCisgICAgdGFyZ2V0X3Jlc3VsdC5wYWNrYWdpbmdfcGVyZi5zdGFydF90aW1lID0gdGltZS50aW1lX25zKCkKKyAgICBzZWxmLl90YXJnZXRfcmVzdWx0c1tuYW1lXSA9IHRhcmdldF9yZXN1bHQKKworICBkZWYgdGFyZ2V0X3BhY2thZ2luZ19lbmQoc2VsZiwgbmFtZTogc3RyKToKKyAgICB0YXJnZXRfcmVzdWx0ID0gc2VsZi5fdGFyZ2V0X3Jlc3VsdHMuZ2V0KG5hbWUpCisgICAgdGFyZ2V0X3Jlc3VsdC5wYWNrYWdpbmdfcGVyZi5yZWFsX3RpbWUgPSAoCisgICAgICAgIHRpbWUudGltZV9ucygpIC0gdGFyZ2V0X3Jlc3VsdC5wYWNrYWdpbmdfcGVyZi5zdGFydF90aW1lCisgICAgKQorCisgIGRlZiBhZGRfdGFyZ2V0X2FydGlmYWN0KAorICAgICAgc2VsZiwKKyAgICAgIHRhcmdldF9uYW1lOiBzdHIsCisgICAgICBhcnRpZmFjdF9uYW1lOiBzdHIsCisgICAgICBzaXplOiBpbnQsCisgICAgICBpbmNsdWRlZF9tb2R1bGVzOiBzZXRbc3RyXSwKKyAgKToKKyAgICB0YXJnZXRfcmVzdWx0ID0gc2VsZi50YXJnZXRfcmVzdWx0cy5nZXQodGFyZ2V0X25hbWUpCisgICAgYXJ0aWZhY3QgPSAoCisgICAgICAgIG1ldHJpY3NfcGIyLk9wdGltaXplZEJ1aWxkTWV0cmljcy5UYXJnZXRPcHRpbWl6YXRpb25SZXN1bHQuT3V0cHV0QXJ0aWZhY3QoKQorICAgICkKKyAgICBhcnRpZmFjdC5uYW1lID0gYXJ0aWZhY3RfbmFtZQorICAgIGFydGlmYWN0LnNpemUgPSBzaXplCisgICAgZm9yIG1vZHVsZSBpbiBpbmNsdWRlZF9tb2R1bGVzOgorICAgICAgYXJ0aWZhY3QuaW5jbHVkZWRfbW9kdWxlcy5hZGQobW9kdWxlKQorICAgIHRhcmdldF9yZXN1bHQub3V0cHV0X2FydGlmYWN0cy5hZGQoYXJ0aWZhY3QpCisKKyAgZGVmIGVuZF9yZXBvcnRpbmcoc2VsZik6CisgICAgZm9yIHRhcmdldF9yZXN1bHQgaW4gc2VsZi5fdGFyZ2V0X3Jlc3VsdHMudmFsdWVzKCk6CisgICAgICBzZWxmLl9wcm90by50YXJnZXRfcmVzdWx0LmFwcGVuZCh0YXJnZXRfcmVzdWx0KQorICAgIHNvb25nX21ldHJpY3NfcHJvdG8gPSBtZXRyaWNzX3BiMi5NZXRyaWNzQmFzZSgpCisgICAgIyBSZWFkIGluIGV4aXN0aW5nIG1ldHJpY3MgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIHdyaXR0ZW4gb3V0IGJ5IHRoZSBzb29uZworICAgICMgYnVpbGQgY29tbWFuZCBzbyB0aGF0IHdlIGRvbid0IG92ZXJ3cml0ZSB0aGVtLgorICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ob3MuZW52aXJvbltzZWxmLl9ESVNUX0RJUl0sIHNlbGYuX1NPT05HX01FVFJJQ1NfUEFUSCksICdyYicpIGFzIGY6CisgICAgICBzb29uZ19tZXRyaWNzX3Byb3RvLlBhcnNlRnJvbVN0cmluZyhmLnJlYWQoKSkKKyAgICBzb29uZ19tZXRyaWNzX3Byb3RvLm9wdGltaXplZF9idWlsZF9tZXRyaWNzLkNvcHlGcm9tKHNlbGYuX3Byb3RvKQorICAgIGxvZ2dpbmcuaW5mbyhzb29uZ19tZXRyaWNzX3Byb3RvKQorICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ob3MuZW52aXJvbltzZWxmLl9ESVNUX0RJUl0sIHNlbGYuX1NPT05HX01FVFJJQ1NfUEFUSCksICd3YicpIGFzIGY6CisgICAgICBmLndyaXRlKHNvb25nX21ldHJpY3NfcHJvdG8uU2VyaWFsaXplVG9TdHJpbmcoKSkKZGlmZiAtLWdpdCBhL2NpL3Rlc3RfZGlzY292ZXJ5X2FnZW50LnB5IGIvY2kvdGVzdF9kaXNjb3ZlcnlfYWdlbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA4ZWU0NwotLS0gL2Rldi9udWxsCisrKyBiL2NpL3Rlc3RfZGlzY292ZXJ5X2FnZW50LnB5CkBAIC0wLDAgKzEsMTIwIEBACisjIENvcHlyaWdodCAyMDI0LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisiIiJUZXN0IGRpc2NvdmVyeSBhZ2VudCB0aGF0IHVzZXMgVHJhZGVGZWQgdG8gZGlzY292ZXIgdGVzdCBhcnRpZmFjdHMuIiIiCitpbXBvcnQgZ2xvYgoraW1wb3J0IGpzb24KK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCisKKworY2xhc3MgVGVzdERpc2NvdmVyeUFnZW50OgorICAiIiJUZXN0IGRpc2NvdmVyeSBhZ2VudC4iIiIKKworICBfVFJBREVGRURfUFJFQlVJTFRfSkFSX1JFTEFUSVZFX1BBVEggPSAoCisgICAgICAidmVuZG9yL2dvb2dsZV90cmFkZWZlZGVyYXRpb24vcHJlYnVpbHRzL2ZpbGVncm91cHMvZ29vZ2xlLXRyYWRlZmVkLyIKKyAgKQorCisgIF9UUkFERUZFRF9OT19QT1NTSUJMRV9URVNUX0RJU0NPVkVSWV9LRVkgPSAiTm9Qb3NzaWJsZVRlc3REaXNjb3ZlcnkiCisKKyAgX1RSQURFRkVEX1RFU1RfWklQX1JFR0VYRVNfTElTVF9LRVkgPSAiVGVzdFppcFJlZ2V4ZXMiCisKKyAgX1RSQURFRkVEX0RJU0NPVkVSWV9PVVRQVVRfRklMRV9OQU1FID0gInRlc3RfZGlzY292ZXJ5X2FnZW50LnR4dCIKKworICBkZWYgX19pbml0X18oCisgICAgICBzZWxmLAorICAgICAgdHJhZGVmZWRfYXJnczogbGlzdFtzdHJdLAorICAgICAgdGVzdF9tYXBwaW5nX3ppcF9wYXRoOiBzdHIgPSAiIiwKKyAgICAgIHRyYWRlZmVkX2phcl9yZXZlbGFudF9maWxlc19wYXRoOiBzdHIgPSBfVFJBREVGRURfUFJFQlVJTFRfSkFSX1JFTEFUSVZFX1BBVEgsCisgICk6CisgICAgc2VsZi50cmFkZWZlZF9hcmdzID0gdHJhZGVmZWRfYXJncworICAgIHNlbGYudGVzdF9tYXBwaW5nX3ppcF9wYXRoID0gdGVzdF9tYXBwaW5nX3ppcF9wYXRoCisgICAgc2VsZi50cmFkZWZlZF9qYXJfcmVsZXZhbnRfZmlsZXNfcGF0aCA9IHRyYWRlZmVkX2phcl9yZXZlbGFudF9maWxlc19wYXRoCisKKyAgZGVmIGRpc2NvdmVyX3Rlc3RfemlwX3JlZ2V4ZXMoc2VsZikgLT4gbGlzdFtzdHJdOgorICAgICIiIkRpc2NvdmVyIHRlc3QgemlwIHJlZ2V4ZXMgZnJvbSBUcmFkZUZlZC4KKworICAgIFJldHVybnM6CisgICAgICBBIGxpc3Qgb2YgdGVzdCB6aXAgcmVnZXhlcyB0aGF0IFRGIGlzIGdvaW5nIHRvIHRyeSB0byBwdWxsIGZpbGVzIGZyb20uCisgICAgIiIiCisgICAgdGVzdF9kaXNjb3Zlcnlfb3V0cHV0X2ZpbGVfbmFtZSA9IG9zLnBhdGguam9pbigKKyAgICAgICAgb3MuZW52aXJvbi5nZXQoJ1RPUCcpLCAnb3V0Jywgc2VsZi5fVFJBREVGRURfRElTQ09WRVJZX09VVFBVVF9GSUxFX05BTUUKKyAgICApCisgICAgd2l0aCBvcGVuKAorICAgICAgICB0ZXN0X2Rpc2NvdmVyeV9vdXRwdXRfZmlsZV9uYW1lLCBtb2RlPSJ3K3QiCisgICAgKSBhcyB0ZXN0X2Rpc2NvdmVyeV9vdXRwdXRfZmlsZToKKyAgICAgIGphdmFfYXJncyA9IFtdCisgICAgICBqYXZhX2FyZ3MuYXBwZW5kKCJwcmVidWlsdHMvamRrL2pkazIxL2xpbnV4LXg4Ni9iaW4vamF2YSIpCisgICAgICBqYXZhX2FyZ3MuYXBwZW5kKCItY3AiKQorICAgICAgamF2YV9hcmdzLmFwcGVuZCgKKyAgICAgICAgICBzZWxmLmNyZWF0ZV9jbGFzc3BhdGgoc2VsZi50cmFkZWZlZF9qYXJfcmVsZXZhbnRfZmlsZXNfcGF0aCkKKyAgICAgICkKKyAgICAgIGphdmFfYXJncy5hcHBlbmQoCisgICAgICAgICAgImNvbS5hbmRyb2lkLnRyYWRlZmVkLm9ic2VydmF0b3J5LlRlc3RaaXBEaXNjb3ZlcnlFeGVjdXRvciIKKyAgICAgICkKKyAgICAgIGphdmFfYXJncy5leHRlbmQoc2VsZi50cmFkZWZlZF9hcmdzKQorICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgIGVudi51cGRhdGUoeyJESVNDT1ZFUllfT1VUUFVUX0ZJTEUiOiB0ZXN0X2Rpc2NvdmVyeV9vdXRwdXRfZmlsZS5uYW1lfSkKKyAgICAgIGxvZ2dpbmcuaW5mbyhmIkNhbGxpbmcgdGVzdCBkaXNjb3Zlcnkgd2l0aCBhcmdzOiB7amF2YV9hcmdzfSIpCisgICAgICB0cnk6CisgICAgICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MucnVuKGFyZ3M9amF2YV9hcmdzLCBlbnY9ZW52LCB0ZXh0PVRydWUsIGNoZWNrPVRydWUpCisgICAgICAgIGxvZ2dpbmcuaW5mbyhmIlRlc3QgemlwIGRpc2NvdmVyeSBvdXRwdXQ6IHtyZXN1bHQuc3Rkb3V0fSIpCisgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgcmFpc2UgVGVzdERpc2NvdmVyeUVycm9yKAorICAgICAgICAgICAgZiJGYWlsZWQgdG8gcnVuIHRlc3QgZGlzY292ZXJ5LCBzdHJvdXQ6IHtlLnN0ZG91dH0sIHN0cmVycjoiCisgICAgICAgICAgICBmIiB7ZS5zdGRlcnJ9LCByZXR1cm5jb2RlOiB7ZS5yZXR1cm5jb2RlfSIKKyAgICAgICAgKQorICAgICAgZGF0YSA9IGpzb24ubG9hZHModGVzdF9kaXNjb3Zlcnlfb3V0cHV0X2ZpbGUucmVhZCgpKQorICAgICAgbG9nZ2luZy5pbmZvKGYiVGVzdCBkaXNjb3ZlcnkgcmVzdWx0IGZpbGUgY29udGVudDoge2RhdGF9IikKKyAgICAgIGlmICgKKyAgICAgICAgICBzZWxmLl9UUkFERUZFRF9OT19QT1NTSUJMRV9URVNUX0RJU0NPVkVSWV9LRVkgaW4gZGF0YQorICAgICAgICAgIGFuZCBkYXRhW3NlbGYuX1RSQURFRkVEX05PX1BPU1NJQkxFX1RFU1RfRElTQ09WRVJZX0tFWV0KKyAgICAgICk6CisgICAgICAgIHJhaXNlIFRlc3REaXNjb3ZlcnlFcnJvcigiTm8gcG9zc2libGUgdGVzdCBkaXNjb3ZlcnkiKQorICAgICAgaWYgKAorICAgICAgICAgIGRhdGFbc2VsZi5fVFJBREVGRURfVEVTVF9aSVBfUkVHRVhFU19MSVNUX0tFWV0gaXMgTm9uZQorICAgICAgICAgIG9yIGRhdGFbc2VsZi5fVFJBREVGRURfVEVTVF9aSVBfUkVHRVhFU19MSVNUX0tFWV0gaXMgW10KKyAgICAgICk6CisgICAgICAgIHJhaXNlIFRlc3REaXNjb3ZlcnlFcnJvcigiTm8gdGVzdCB6aXAgcmVnZXhlcyByZXR1cm5lZCIpCisgICAgICByZXR1cm4gZGF0YVtzZWxmLl9UUkFERUZFRF9URVNUX1pJUF9SRUdFWEVTX0xJU1RfS0VZXQorCisgIGRlZiBkaXNjb3Zlcl90ZXN0X21vZHVsZXMoc2VsZikgLT4gbGlzdFtzdHJdOgorICAgICIiIkRpc2NvdmVyIHRlc3QgbW9kdWxlcyBmcm9tIFRyYWRlRmVkLgorCisgICAgUmV0dXJuczoKKyAgICAgIEEgbGlzdCBvZiB0ZXN0IG1vZHVsZXMgdGhhdCBUcmFkZUZlZCBpcyBnb2luZyB0byBleGVjdXRlIGJhc2VkIG9uIHRoZQorICAgICAgVHJhZGVGZWQgdGVzdCBhcmdzLgorICAgICIiIgorICAgIHJldHVybiBbXQorCisgIGRlZiBjcmVhdGVfY2xhc3NwYXRoKHNlbGYsIGRpcmVjdG9yeSk6CisgICAgIiIiQ3JlYXRlcyBhIGNsYXNzcGF0aCBzdHJpbmcgZnJvbSBhbGwgLmphciBmaWxlcyBpbiB0aGUgZ2l2ZW4gZGlyZWN0b3J5LgorCisgICAgQXJnczoKKyAgICAgIGRpcmVjdG9yeTogVGhlIGRpcmVjdG9yeSB0byBzZWFyY2ggZm9yIC5qYXIgZmlsZXMuCisKKyAgICBSZXR1cm5zOgorICAgICAgQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjbGFzc3BhdGgsIHdpdGggamFyIGZpbGVzIHNlcGFyYXRlZCBieSB0aGUKKyAgICAgIE9TLXNwZWNpZmljIHBhdGggc2VwYXJhdG9yIChlLmcuLCAnOicgb24gTGludXgvbWFjT1MsICc7JyBvbiBXaW5kb3dzKS4KKyAgICAiIiIKKyAgICBqYXJfZmlsZXMgPSBnbG9iLmdsb2Iob3MucGF0aC5qb2luKGRpcmVjdG9yeSwgIiouamFyIikpCisgICAgcmV0dXJuIG9zLnBhdGhzZXAuam9pbihqYXJfZmlsZXMpCisKKworY2xhc3MgVGVzdERpc2NvdmVyeUVycm9yKEV4Y2VwdGlvbik6CisgICIiIkEgVGVzdERpc2NvdmVyeUVycm9yY2xhc3MuIiIiCisKKyAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2UpOgorICAgIHN1cGVyKCkuX19pbml0X18obWVzc2FnZSkKKyAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlCmRpZmYgLS1naXQgYS9jb2dzZXR1cC5zaCBiL2NvZ3NldHVwLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzY0YTA2Li4wMDAwMDAwCi0tLSBhL2NvZ3NldHVwLnNoCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotIwotIyBDb3B5cmlnaHQgKEMpIDIwMjMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSMKLQotIyBUaGlzIGZpbGUgaXMgZXhlY3V0ZWQgYnkgYnVpbGQvZW52c2V0dXAuc2gsIGFuZCBjYW4gdXNlIGFueXRoaW5nCi0jIGRlZmluZWQgaW4gZW52c2V0dXAuc2guCi1mdW5jdGlvbiBfY3JlYXRlX291dF9zeW1saW5rX2Zvcl9jb2coKSB7Ci0gIGlmIFtbICIke09VVF9ESVJ9IiA9PSAiIiBdXTsgdGhlbgotICAgIE9VVF9ESVI9Im91dCIKLSAgZmkKLQotICAjIGdldG91dGRpciBlbnN1cmVzIHBhdGhzIGFyZSBhYnNvbHV0ZS4gZW52c2V0dXAgY291bGQgYmUgY2FsbGVkIGZyb20gYQotICAjIGRpcmVjdG9yeSBvdGhlciB0aGFuIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZQotICBsb2NhbCBvdXRkaXI9JChnZXRvdXRkaXIpCi0gIGlmIFtbIC1MICIke291dGRpcn0iIF1dOyB0aGVuCi0gICAgcmV0dXJuCi0gIGZpCi0gIGlmIFsgLWQgIiR7b3V0ZGlyfSIgXTsgdGhlbgotICAgIGVjaG8gLWUgIlx0T3V0cHV0IGRpcmVjdG9yeSAke291dGRpcn0gY2Fubm90IGJlIHByZXNlbnQgaW4gYSBDb2cgd29ya3NwYWNlLiIKLSAgICBlY2hvIC1lICJcdERlbGV0ZSBcIiR7b3V0ZGlyfVwiIG9yIGNyZWF0ZSBhIHN5bWxpbmsgZnJvbSBcIiR7b3V0ZGlyfVwiIHRvIGEgZGlyZWN0b3J5IG91dHNpZGUgeW91ciB3b3Jrc3BhY2UuIgotICAgIHJldHVybiAxCi0gIGZpCi0KLSAgREVGQVVMVF9PVVRQVVRfRElSPSIke0hPTUV9Ly5jb2cvYW5kcm9pZC1idWlsZC1vdXQiCi0gIG1rZGlyIC1wICR7REVGQVVMVF9PVVRQVVRfRElSfQotICBsbiAtcyAke0RFRkFVTFRfT1VUUFVUX0RJUn0gJHtvdXRkaXJ9Ci19Ci0KLSMgVGhpcyBmdW5jdGlvbiBzZXRzIHVwIHRoZSBidWlsZCBlbnZpcm9ubWVudCB0byBiZSBhcHByb3ByaWF0ZSBmb3IgQ29nLgotZnVuY3Rpb24gX3NldHVwX2NvZ19lbnYoKSB7Ci0gIF9jcmVhdGVfb3V0X3N5bWxpbmtfZm9yX2NvZwotICBpZiBbICIkPyIgLWVxICIxIiBdOyB0aGVuCi0gICAgZWNobyAtZSAiXGVbMDszM21XQVJOSU5HOlxlWzAwbSBDb2cgZW52aXJvbm1lbnQgc2V0dXAgZmFpbGVkISIKLSAgICByZXR1cm4gMQotICBmaQotCi0gIGV4cG9ydCBBTkRST0lEX0JVSUxEX0VOVklST05NRU5UX0NPTkZJRz0iZ29vZ2xlci1jb2ciCi0KLSAgIyBSdW5uaW5nIHJlcG8gY29tbWFuZCB3aXRoaW4gQ29nIHdvcmtzcGFjZXMgaXMgbm90IHN1cHBvcnRlZCwgc28gb3ZlcnJpZGUKLSAgIyBpdCB3aXRoIHRoaXMgZnVuY3Rpb24uIElmIHRoZSB1c2VyIGlzIHJ1bm5pbmcgcmVwbyB3aXRoaW4gYSBDb2cgd29ya3NwYWNlLAotICAjIHdlJ2xsIGZhaWwgd2l0aCBhbiBlcnJvciwgb3RoZXJ3aXNlLCB3ZSBydW4gdGhlIG9yaWdpbmFsIHJlcG8gY29tbWFuZCB3aXRoCi0gICMgdGhlIGdpdmVuIGFyZ3MuCi0gIGlmICEgT1JJR19SRVBPX1BBVEg9YHdoaWNoIHJlcG9gOyB0aGVuCi0gICAgcmV0dXJuIDAKLSAgZmkKLSAgZnVuY3Rpb24gcmVwbyB7Ci0gICAgaWYgW1sgIiR7UFdEfSIgPT0gL2dvb2dsZS9jb2cvKiBdXTsgdGhlbgotICAgICAgZWNobyAtZSAiXGVbMDE7MzFtRVJST1I6XGVbMG1yZXBvIGNvbW1hbmQgaXMgZGlzYWxsb3dlZCB3aXRoaW4gQ29nIHdvcmtzcGFjZXMuIgotICAgICAgcmV0dXJuIDEKLSAgICBmaQotICAgICR7T1JJR19SRVBPX1BBVEh9ICIkQCIKLSAgfQotfQotCi1pZiBbWyAiJHtQV0R9IiAhPSAvZ29vZ2xlL2NvZy8qIF1dOyB0aGVuCi0gIGVjaG8gLWUgIlxlWzAxOzMxbUVSUk9SOlxlWzBtIFRoaXMgc2NyaXB0IG11c3QgYmUgcnVuIGZyb20gYSBDb2cgd29ya3NwYWNlLiIKLWZpCi0KLV9zZXR1cF9jb2dfZW52CmRpZmYgLS1naXQgYS9jb3JlL01ha2VmaWxlIGIvY29yZS9NYWtlZmlsZQppbmRleCBlNWExOWUwLi4wYzFkZWVkIDEwMDY0NAotLS0gYS9jb3JlL01ha2VmaWxlCisrKyBiL2NvcmUvTWFrZWZpbGUKQEAgLTE5Miw2ICsxOTIsMzQgQEAKIHVuaXF1ZV9wcm9kdWN0X2NvcHlfZmlsZXNfcGFpcnMgOj0KIHVuaXF1ZV9wcm9kdWN0X2NvcHlfZmlsZXNfZGVzdGluYXRpb25zIDo9CiAKKworIyBSZXR1cm5zIGEgbGlzdCBvZiBFWFRSQV9JTlNUQUxMX1pJUFMgdHJpb3Mgd2hvc2UgcHJpbWFyeSBmaWxlIGlzIGNvbnRhaW5lZCB3aXRoaW4gJCgxKQorIyBUaGUgdHJpb3Mgd2lsbCBjb250YWluIHRoZSBwcmltYXJ5IGluc3RhbGxlZCBmaWxlIDogdGhlIGRpcmVjdG9yeSB0byB1bnppcCB0aGUgemlwIHRvIDogdGhlIHppcAorZGVmaW5lIHJlbGV2YW50LWV4dHJhLWluc3RhbGwtemlwcworJChzdHJpcCAkKGZvcmVhY2ggcCwkKEVYVFJBX0lOU1RBTExfWklQUyksIFwKKyAgJChpZiAkKGZpbHRlciAkKGNhbGwgd29yZC1jb2xvbiwxLCQocCkpLCQoMSkpLCBcCisgICAgJChwKSkpKQorZW5kZWYKKworIyBXcml0ZXMgYSB0ZXh0IGZpbGUgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIGZpbGVzIHRoYXQgd2lsbCBiZSBpbnNpZGUgYSBwYXJ0aXRpb24uCisjIEFsbCB0aGUgZmlsZSBwYXRocyB3aWxsIGJlIHJlbGF0aXZlIHRvIHRoZSBwYXJ0aXRpb24ncyBzdGFnaW5nIGRpcmVjdG9yeS4KKyMgSXQgd2lsbCBhbHNvIHRha2UgaW50byBhY2NvdW50IGZpbGVzIGluc2lkZSB6aXBzIGxpc3RlZCBpbiBFWFRSQV9JTlNUQUxMX1pJUFMuCisjCisjIEFyZ3VtZW50czoKKyMgICAkKDEpOiBPdXRwdXQgZmlsZQorIyAgICQoMik6IFRoZSBwYXJ0aXRpb24ncyBzdGFnaW5nIGRpcmVjdG9yeQorIyAgICQoMyk6IEZpbGVzIHRvIGluY2x1ZGUgaW4gdGhlIHBhcnRpdGlvbgorZGVmaW5lIHdyaXRlLXBhcnRpdGlvbi1maWxlLWxpc3QKKyQoMSk6IFBSSVZBVEVfRklMRVMgOj0gJChzdWJzdCAkKDIpLywsJChmaWx0ZXIgJCgyKS8lLCQoMykpKQorJCgxKTogUFJJVkFURV9FWFRSQV9JTlNUQUxMX1pJUFMgOj0gJChjYWxsIHJlbGV2YW50LWV4dHJhLWluc3RhbGwtemlwcywkKGZpbHRlciAkKDIpLyUsJCgzKSkpCiskKDEpOiAkJChIT1NUX09VVF9FWEVDVVRBQkxFUykvZXh0cmFfaW5zdGFsbF96aXBzX2ZpbGVfbGlzdCAkKGZvcmVhY2ggcCwkKGNhbGwgcmVsZXZhbnQtZXh0cmEtaW5zdGFsbC16aXBzLCQoZmlsdGVyICQoMikvJSwkKDMpKSksJChjYWxsIHdvcmQtY29sb24sMywkKHApKSkKKwlAZWNobyBXcml0aW5nICQkQAorCXJtIC1mICQkQAorCWVjaG8gLW4gPiAkJEAKKwkkJChmb3JlYWNoIGYsJCQoUFJJVkFURV9GSUxFUyksZWNobyAiJCQoZikiID4+ICQkQCQkKG5ld2xpbmUpKQorCSQkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9leHRyYV9pbnN0YWxsX3ppcHNfZmlsZV9saXN0ICQoMikgJCQoUFJJVkFURV9FWFRSQV9JTlNUQUxMX1pJUFMpID4+ICQkQAorZW5kZWYKKwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBSZXR1cm5zIHRoZSBtYXggYWxsb3dlZCBzaXplIGZvciBhbiBpbWFnZSBzdWl0YWJsZSBmb3IgaGFzaCB2ZXJpZmljYXRpb24KICMgKGUuZy4sIGJvb3QuaW1nLCByZWNvdmVyeS5pbWcsIGV0YykuCkBAIC02OTIsNyArNzIwLDcgQEAKIAogQk9BUkRfS0VSTkVMX01PRFVMRV9ESVJTICs9IHRvcAogCi0jIERlZmF1bHQgdG8gbm90IGdlbmVyYXRpbmcgbW9kdWxlcy5kZXAgZm9yIGtlcm5lbCBtb2R1bGVzIG9uIHN5c3RlbQorIyBEZWZhdWx0IHRvIG5vdCBnZW5lcmF0aW5nIG1vZHVsZXMubG9hZCBmb3Iga2VybmVsIG1vZHVsZXMgb24gc3lzdGVtCiAjIHNpZGUuIFdlIHNob3VsZCBvbmx5IGxvYWQgdGhlc2UgbW9kdWxlcyBpZiB0aGV5IGFyZSBkZXBlbmRlZCBieSB2ZW5kb3IKICMgc2lkZSBtb2R1bGVzLgogaWZlcSAoJChCT0FSRF9TWVNURU1fS0VSTkVMX01PRFVMRVNfTE9BRCksKQpAQCAtODQ0LDYgKzg3Miw3IEBACiBTT09OR19DT05WX0RBVEEgOj0gJChjYWxsIGludGVybWVkaWF0ZXMtZGlyLWZvcixQQUNLQUdJTkcsc29vbmdfY29udmVyc2lvbikvc29vbmdfY29udl9kYXRhCiAkKFNPT05HX0NPTlZfREFUQSk6CiAJQHJtIC1mICRACisJQHRvdWNoICRAICMgVGhpcyBmaWxlIG11c3QgYmUgcHJlc2VudCBldmVuIGlmIFNPT05HX0NPTlYgaXMgZW1wdHkuCiAJQCQoZm9yZWFjaCBzLCQoU09PTkdfQ09OViksZWNobyAiJChzKSwkKFNPT05HX0NPTlYuJChzKS5UWVBFKSwkKHNvcnQgJChTT09OR19DT05WLiQocykuUFJPQkxFTVMpKSwkKHNvcnQgJChmaWx0ZXItb3V0ICQoU09PTkdfQUxSRUFEWV9DT05WKSwkKFNPT05HX0NPTlYuJChzKS5ERVBTKSkpLCQoc29ydCAkKFNPT05HX0NPTlYuJChzKS5NQUtFRklMRVMpKSwkKHNvcnQgJChTT09OR19DT05WLiQocykuSU5TVEFMTEVEKSkiID4+JEA7KQogCiAkKGNhbGwgZGVjbGFyZS0xcC10YXJnZXQsJChTT09OR19DT05WX0RBVEEpLGJ1aWxkKQpAQCAtMTI2Nyw2ICsxMjk2LDEwIEBACiAKIGVuZGlmCiAKKworcmFtZGlza19pbnRlcm1lZGlhdGVzIDo9JD0gJChjYWxsIGludGVybWVkaWF0ZXMtZGlyLWZvcixQQUNLQUdJTkcscmFtZGlzaykKKyQoZXZhbCAkKGNhbGwgd3JpdGUtcGFydGl0aW9uLWZpbGUtbGlzdCwkKHJhbWRpc2tfaW50ZXJtZWRpYXRlcykvZmlsZV9saXN0LnR4dCwkKFRBUkdFVF9SQU1ESVNLX09VVCksJChJTlRFUk5BTF9SQU1ESVNLX0ZJTEVTKSkpCisKICMgVGhlIHZhbHVlIG9mIFJBTURJU0tfTk9ERV9MSVNUIGlzIGRlZmluZWQgaW4gc3lzdGVtL2NvcmUvcm9vdGRpci9BbmRyb2lkLmJwLgogIyBUaGlzIGZpbGUgY29udGFpbnMgL2RldiBub2RlcyBkZXNjcmlwdGlvbiBhZGRlZCB0byB0aGUgZ2VuZXJpYyByYW1kaXNrCiAKQEAgLTE1NjQsNiArMTU5Nyw3IEBACiAJJChBVkJUT09MKSBhZGRfaGFzaF9mb290ZXIgXAogICAgICAgICAgICAtLWltYWdlICRAIFwKIAkgICAkKGNhbGwgZ2V0LXBhcnRpdGlvbi1zaXplLWFyZ3VtZW50LCQoQk9BUkRfSU5JVF9CT09UX0lNQUdFX1BBUlRJVElPTl9TSVpFKSkgXAorCSAgIC0tc2FsdCAkJChzaGEyNTZzdW0gJChCVUlMRF9OVU1CRVJfRklMRSkgJChCVUlMRF9EQVRFVElNRV9GSUxFKSB8IGN1dCAtZCAiICIgLWYgMSB8IHRyIC1kICdcbicpIFwKIAkgICAtLXBhcnRpdGlvbl9uYW1lIGluaXRfYm9vdCAkKElOVEVSTkFMX0FWQl9JTklUX0JPT1RfU0lHTklOR19BUkdTKSBcCiAJICAgJChCT0FSRF9BVkJfSU5JVF9CT09UX0FERF9IQVNIX0ZPT1RFUl9BUkdTKQogCkBAIC0xNjIyLDYgKzE2NTYsOCBAQAogICAgICQoQUxMX0RFRkFVTFRfSU5TVEFMTEVEX01PRFVMRVMpKQogCiBJTlRFUk5BTF9WRU5ET1JfUkFNRElTS19UQVJHRVQgOj0gJChjYWxsIGludGVybWVkaWF0ZXMtZGlyLWZvcixQQUNLQUdJTkcsdmVuZG9yX2Jvb3QpL3ZlbmRvcl9yYW1kaXNrLmNwaW8kKFJBTURJU0tfRVhUKQordmVuZG9yX3JhbWRpc2tfaW50ZXJtZWRpYXRlcyA6PSQ9ICQoY2FsbCBpbnRlcm1lZGlhdGVzLWRpci1mb3IsUEFDS0FHSU5HLHZlbmRvcl9yYW1kaXNrKQorJChldmFsICQoY2FsbCB3cml0ZS1wYXJ0aXRpb24tZmlsZS1saXN0LCQodmVuZG9yX3JhbWRpc2tfaW50ZXJtZWRpYXRlcykvZmlsZV9saXN0LnR4dCwkKFRBUkdFVF9WRU5ET1JfUkFNRElTS19PVVQpLCQoSU5URVJOQUxfVkVORE9SX1JBTURJU0tfRklMRVMpKSkKIAogIyBFeGNsdWRlIHJlY292ZXJ5IGZpbGVzIGluIHRoZSBkZWZhdWx0IHZlbmRvciByYW1kaXNrIGlmIGluY2x1ZGluZyBhIHN0YW5kYWxvbmUKICMgcmVjb3ZlcnkgcmFtZGlzayBpbiB2ZW5kb3JfYm9vdC4KQEAgLTE2NzYsMTIgKzE3MTIsMTMgQEAKICAgSU5URVJOQUxfVkVORE9SX0JPT1RJTUFHRV9BUkdTICs9IC0tdmVuZG9yX2NtZGxpbmUgIiQoSU5URVJOQUxfS0VSTkVMX0NNRExJTkUpIgogZW5kaWYKIAotaWZkZWYgSU5URVJOQUxfQk9PVENPTkZJRworaWZuZXEgKCwgJChJTlRFUk5BTF9CT09UQ09ORklHKSQoSU5URVJOQUxfQk9PVENPTkZJR19GSUxFKSkKICAgSU5URVJOQUxfVkVORE9SX0JPT1RDT05GSUdfVEFSR0VUIDo9ICQoUFJPRFVDVF9PVVQpL3ZlbmRvci1ib290Y29uZmlnLmltZwogICAkKElOVEVSTkFMX1ZFTkRPUl9CT09UQ09ORklHX1RBUkdFVCk6CiAJcm0gLWYgJEAKIAkkKGZvcmVhY2ggcGFyYW0sJChJTlRFUk5BTF9CT09UQ09ORklHKSwgXAogCSBwcmludGYgIiVzXG4iICQocGFyYW0pID4+ICRAOykKKwljYXQgJChJTlRFUk5BTF9CT09UQ09ORklHX0ZJTEUpID4+ICRACiAgIElOVEVSTkFMX1ZFTkRPUl9CT09USU1BR0VfQVJHUyArPSAtLXZlbmRvcl9ib290Y29uZmlnICQoSU5URVJOQUxfVkVORE9SX0JPT1RDT05GSUdfVEFSR0VUKQogZW5kaWYKIApAQCAtMTczNiw2ICsxNzczLDcgQEAKIAkkKEFWQlRPT0wpIGFkZF9oYXNoX2Zvb3RlciBcCiAgICAgICAgICAgIC0taW1hZ2UgJEAgXAogCSAgICQoY2FsbCBnZXQtcGFydGl0aW9uLXNpemUtYXJndW1lbnQsJChCT0FSRF9WRU5ET1JfQk9PVElNQUdFX1BBUlRJVElPTl9TSVpFKSkgXAorCSAgIC0tc2FsdCAkJChzaGEyNTZzdW0gJChCVUlMRF9OVU1CRVJfRklMRSkgJChCVUlMRF9EQVRFVElNRV9GSUxFKSB8IGN1dCAtZCAiICIgLWYgMSB8IHRyIC1kICdcbicpIFwKIAkgICAtLXBhcnRpdGlvbl9uYW1lIHZlbmRvcl9ib290ICQoSU5URVJOQUxfQVZCX1ZFTkRPUl9CT09UX1NJR05JTkdfQVJHUykgXAogCSAgICQoQk9BUkRfQVZCX1ZFTkRPUl9CT09UX0FERF9IQVNIX0ZPT1RFUl9BUkdTKQogZWxzZQpAQCAtMjkwMSw2ICsyOTM5LDkgQEAKICQoZXJyb3IgTVREIGRldmljZSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIGFuZCB0aHVzIEJPQVJEX05BTkRfU1BBUkVfU0laRSBpcyBkZXByZWNhdGVkLikKIGVuZGlmCiAKK3JlY292ZXJ5X2ludGVybWVkaWF0ZXMgOj0gJChjYWxsIGludGVybWVkaWF0ZXMtZGlyLWZvcixQQUNLQUdJTkcscmVjb3ZlcnkpCiskKGV2YWwgJChjYWxsIHdyaXRlLXBhcnRpdGlvbi1maWxlLWxpc3QsJChyZWNvdmVyeV9pbnRlcm1lZGlhdGVzKS9maWxlX2xpc3QudHh0LCQoVEFSR0VUX1JFQ09WRVJZX09VVCksJChJTlRFUk5BTF9SRUNPVkVSWUlNQUdFX0ZJTEVTKSkpCisKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBCdWlsZCBkZWJ1ZyByYW1kaXNrIGFuZCBkZWJ1ZyBib290IGltYWdlLgpAQCAtMzQ3MywzMSArMzUxNCw2IEBACiAKIEZVTExfU1lTVEVNSU1BR0VfREVQUyArPSAkKElOVEVSTkFMX1JPT1RfRklMRVMpICQoSU5TVEFMTEVEX0ZJTEVTX0ZJTEVfUk9PVCkKIAotIyBSZXR1cm5zIGEgbGlzdCBvZiBFWFRSQV9JTlNUQUxMX1pJUFMgdHJpb3Mgd2hvc2UgcHJpbWFyeSBmaWxlIGlzIGNvbnRhaW5lZCB3aXRoaW4gJCgxKQotIyBUaGUgdHJpb3Mgd2lsbCBjb250YWluIHRoZSBwcmltYXJ5IGluc3RhbGxlZCBmaWxlIDogdGhlIGRpcmVjdG9yeSB0byB1bnppcCB0aGUgemlwIHRvIDogdGhlIHppcAotZGVmaW5lIHJlbGV2YW50LWV4dHJhLWluc3RhbGwtemlwcwotJChzdHJpcCAkKGZvcmVhY2ggcCwkKEVYVFJBX0lOU1RBTExfWklQUyksIFwKLSAgJChpZiAkKGZpbHRlciAkKGNhbGwgd29yZC1jb2xvbiwxLCQocCkpLCQoMSkpLCBcCi0gICAgJChwKSkpKQotZW5kZWYKLQotIyBXcml0ZXMgYSB0ZXh0IGZpbGUgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIGZpbGVzIHRoYXQgd2lsbCBiZSBpbnNpZGUgYSBwYXJ0aXRpb24uCi0jIEFsbCB0aGUgZmlsZSBwYXRocyB3aWxsIGJlIHJlbGF0aXZlIHRvIHRoZSBwYXJ0aXRpb24ncyBzdGFnaW5nIGRpcmVjdG9yeS4KLSMgSXQgd2lsbCBhbHNvIHRha2UgaW50byBhY2NvdW50IGZpbGVzIGluc2lkZSB6aXBzIGxpc3RlZCBpbiBFWFRSQV9JTlNUQUxMX1pJUFMuCi0jCi0jIEFyZ3VtZW50czoKLSMgICAkKDEpOiBPdXRwdXQgZmlsZQotIyAgICQoMik6IFRoZSBwYXJ0aXRpb24ncyBzdGFnaW5nIGRpcmVjdG9yeQotIyAgICQoMyk6IEZpbGVzIHRvIGluY2x1ZGUgaW4gdGhlIHBhcnRpdGlvbgotZGVmaW5lIHdyaXRlLXBhcnRpdGlvbi1maWxlLWxpc3QKLSQoMSk6ICQkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9leHRyYV9pbnN0YWxsX3ppcHNfZmlsZV9saXN0ICQoZm9yZWFjaCBwLCQoY2FsbCByZWxldmFudC1leHRyYS1pbnN0YWxsLXppcHMsJChmaWx0ZXIgJCgyKS8lLCQoMykpKSwkKGNhbGwgd29yZC1jb2xvbiwzLCQocCkpKQotCUBlY2hvIFdyaXRpbmcgJCRACi0Jcm0gLWYgJCRACi0JZWNobyAtbiA+ICQkQAotCSQkKGZvcmVhY2ggZiwkKHN1YnN0ICQoMikvLCwkKGZpbHRlciAkKDIpLyUsJCgzKSkpLGVjaG8gIiQkKGYpIiA+PiAkJEAkJChuZXdsaW5lKSkKLQkkJChIT1NUX09VVF9FWEVDVVRBQkxFUykvZXh0cmFfaW5zdGFsbF96aXBzX2ZpbGVfbGlzdCAkKDIpICQoY2FsbCByZWxldmFudC1leHRyYS1pbnN0YWxsLXppcHMsJChmaWx0ZXIgJCgyKS8lLCQoMykpKSA+PiAkJEAKLWVuZGVmCi0KICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGlmZGVmIEJVSUxESU5HX1NZU1RFTV9JTUFHRQogCkBAIC0zNTY5LDE0ICszNTg1LDI0IEBACiBmaWxlX2xpc3RfZGlmZiA6PSAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9maWxlX2xpc3RfZGlmZiQoSE9TVF9FWEVDVVRBQkxFX1NVRkZJWCkKIHN5c3RlbV9maWxlX2RpZmZfdGltZXN0YW1wIDo9ICQoc3lzdGVtaW1hZ2VfaW50ZXJtZWRpYXRlcykvZmlsZV9kaWZmLnRpbWVzdGFtcAogCisjIFRoZSBidWlsZCBjb25maWd1cmF0aW9uIHRvIGJ1aWxkIHRoZSBSRUwgdmVyc2lvbiBtYXkgaGF2ZSBtb3JlIGZpbGVzIHRvIGFsbG93LgorIyBVc2UgYWxsb3dsaXN0X25leHQgaW4gYWRkaXRpb24gdG8gdGhlIGFsbG93bGlzdCBpbiB0aGlzIGNhc2UuCitzeXN0ZW1fZmlsZV9kaWZmX2FsbG93bGlzdF9uZXh0IDo9CitpZmVxIChSRUwsJChQTEFURk9STV9WRVJTSU9OX0NPREVOQU1FKSkKK3N5c3RlbV9maWxlX2RpZmZfYWxsb3dsaXN0X25leHQgOj0gJChBTExfTU9EVUxFUy5zeXN0ZW1faW1hZ2VfZGlmZl9hbGxvd2xpc3RfbmV4dC5JTlNUQUxMRUQpCiskKHN5c3RlbV9maWxlX2RpZmZfdGltZXN0YW1wKTogUFJJVkFURV9BTExPV0xJU1RfTkVYVCA6PSAkKHN5c3RlbV9maWxlX2RpZmZfYWxsb3dsaXN0X25leHQpCitlbmRpZgogJChzeXN0ZW1fZmlsZV9kaWZmX3RpbWVzdGFtcCk6IFwKIAkgICAgJChzeXN0ZW1pbWFnZV9pbnRlcm1lZGlhdGVzKS9maWxlX2xpc3QudHh0IFwKIAkgICAgJChBTExfTU9EVUxFUy4kKFBST0RVQ1RfU09PTkdfREVGSU5FRF9TWVNURU1fSU1BR0UpLkZJTEVTWVNURU1fRklMRUxJU1QpIFwKIAkgICAgJChBTExfTU9EVUxFUy5zeXN0ZW1faW1hZ2VfZGlmZl9hbGxvd2xpc3QuSU5TVEFMTEVEKSBcCisJICAgICQoc3lzdGVtX2ZpbGVfZGlmZl9hbGxvd2xpc3RfbmV4dCkgXAogCSAgICAkKGZpbGVfbGlzdF9kaWZmKQogCSQoZmlsZV9saXN0X2RpZmYpICQoc3lzdGVtaW1hZ2VfaW50ZXJtZWRpYXRlcykvZmlsZV9saXN0LnR4dCBcCiAJICAkKEFMTF9NT0RVTEVTLiQoUFJPRFVDVF9TT09OR19ERUZJTkVEX1NZU1RFTV9JTUFHRSkuRklMRVNZU1RFTV9GSUxFTElTVCkgXAotCSAgJChBTExfTU9EVUxFUy5zeXN0ZW1faW1hZ2VfZGlmZl9hbGxvd2xpc3QuSU5TVEFMTEVEKSAkKFBST0RVQ1RfU09PTkdfREVGSU5FRF9TWVNURU1fSU1BR0UpCisJICAkKFBST0RVQ1RfU09PTkdfREVGSU5FRF9TWVNURU1fSU1BR0UpIFwKKwkgIC0tYWxsb3dsaXN0cyAkKEFMTF9NT0RVTEVTLnN5c3RlbV9pbWFnZV9kaWZmX2FsbG93bGlzdC5JTlNUQUxMRUQpIFwKKwkgICQoUFJJVkFURV9BTExPV0xJU1RfTkVYVCkKIAl0b3VjaCAkQAogCiAkKEJVSUxUX1NZU1RFTUlNQUdFKTogJChzeXN0ZW1fZmlsZV9kaWZmX3RpbWVzdGFtcCkKQEAgLTQwMDIsNiArNDAyOCwyMSBAQAogICAgICQoZmlsdGVyICQoVEFSR0VUX09VVF9QUk9EVUNUKS8lLFwKICAgICAgICQoQUxMX0RFRkFVTFRfSU5TVEFMTEVEX01PRFVMRVMpKQogCisjIEluc3RhbGwgcHJvZHVjdC9ldGMvbGlua2VyLmNvbmZpZy5wYiB3aXRoIFBST0RVQ1RfUFJPRFVDVF9MSU5LRVJfQ09ORklHX0ZSQUdNRU5UUworcHJvZHVjdF9saW5rZXJfY29uZmlnX2ZpbGUgOj0gJChUQVJHRVRfT1VUX1BST0RVQ1QpL2V0Yy9saW5rZXIuY29uZmlnLnBiCiskKHByb2R1Y3RfbGlua2VyX2NvbmZpZ19maWxlKTogcHJpdmF0ZV9saW5rZXJfY29uZmlnX2ZyYWdtZW50cyA6PSAkKFBST0RVQ1RfUFJPRFVDVF9MSU5LRVJfQ09ORklHX0ZSQUdNRU5UUykKKyQocHJvZHVjdF9saW5rZXJfY29uZmlnX2ZpbGUpOiAkKElOVEVSTkFMX1BST0RVQ1RJTUFHRV9GSUxFUykgfCAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9jb252X2xpbmtlcl9jb25maWcKKwlAZWNobyBDcmVhdGluZyBsaW5rZXIgY29uZmlnOiAkQAorCUBta2RpciAtcCAkKGRpciAkQCkKKwlAcm0gLWYgJEAKKwkkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9jb252X2xpbmtlcl9jb25maWcgcHJvdG8gXAorCQktLXNvdXJjZSAkKGNhbGwgbm9ybWFsaXplLXBhdGgtbGlzdCwkKHByaXZhdGVfbGlua2VyX2NvbmZpZ19mcmFnbWVudHMpKSBcCisJCS0tb3V0cHV0ICRACiskKGNhbGwgZGVmaW5lIGRlY2xhcmUtMXAtdGFyZ2V0LCQocHJvZHVjdF9saW5rZXJfY29uZmlnX2ZpbGUpLCkKK0lOVEVSTkFMX1BST0RVQ1RJTUFHRV9GSUxFUyArPSAkKHByb2R1Y3RfbGlua2VyX2NvbmZpZ19maWxlKQorQUxMX0RFRkFVTFRfSU5TVEFMTEVEX01PRFVMRVMgKz0gJChwcm9kdWN0X2xpbmtlcl9jb25maWdfZmlsZSkKKworCiBJTlNUQUxMRURfRklMRVNfRklMRV9QUk9EVUNUIDo9ICQoUFJPRFVDVF9PVVQpL2luc3RhbGxlZC1maWxlcy1wcm9kdWN0LnR4dAogSU5TVEFMTEVEX0ZJTEVTX0pTT05fUFJPRFVDVCA6PSAkKElOU1RBTExFRF9GSUxFU19GSUxFX1BST0RVQ1Q6LnR4dD0uanNvbikKICQoSU5TVEFMTEVEX0ZJTEVTX0ZJTEVfUFJPRFVDVCk6IC5LQVRJX0lNUExJQ0lUX09VVFBVVFMgOj0gJChJTlNUQUxMRURfRklMRVNfSlNPTl9QUk9EVUNUKQpAQCAtNTEzOCw2ICs1MTc5LDggQEAKICMgUnVuIGFwZXhfc2Vwb2xpY3lfdGVzdHMgZm9yIGFsbCBpbnN0YWxsZWQgQVBFWGVzCiAKIGlmZXEgKCwkKFRBUkdFVF9CVUlMRF9VTkJVTkRMRUQpKQorIyBUT0RPKGIvMzUzODk2ODE3KSBhcGV4X3NlcG9saWN5X3Rlc3RzIHN1cHBvcnRzIG9ubHkgZXh0NAoraWZlcSAoZXh0NCwkKFBST0RVQ1RfREVGQVVMVF9BUEVYX1BBWUxPQURfVFlQRSkpCiBpbnRlcm1lZGlhdGUgOj0gJChjYWxsIGludGVybWVkaWF0ZXMtZGlyLWZvcixQQUNLQUdJTkcsYXBleF9zZXBvbGljeV90ZXN0cykKIGFwZXhfZGlycyA6PSBcCiAgICQoVEFSR0VUX09VVCkvYXBleC8lIFwKQEAgLTUxNzcsNiArNTIyMCw3IEBACiAKIGFwZXhfZmlsZXMgOj0KIGludGVybWVkaWF0ZSA6PQorZW5kaWYgIyBQUk9EVUNUX0RFRkFVTFRfQVBFWF9QQVlMT0FEX1RZUEUKIGVuZGlmICMgVEFSR0VUX0JVSUxEX1VOQlVORExFRAogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01MjcyLDcgKzUzMTYsNyBAQAogCSAgLS1kaXJtYXAgL3N5c3RlbV9leHQ6JChUQVJHRVRfT1VUX1NZU1RFTV9FWFQpIFwKIAkgIC0tZGlybWFwIC9wcm9kdWN0OiQoVEFSR0VUX09VVF9QUk9EVUNUKSBcCiAJICAtLWRpcm1hcCAvYXBleDokKEFQRVhfT1VUKSBcCi0JICAkKFZJTlRGX0ZSQU1FV09SS19NQU5JRkVTVF9GUk9aRU5fRElSKSA+ICRAIDI+JjEgKSB8fCAoIGNhdCAkQCAmJiBleGl0IDEgKQorCSAgc3lzdGVtL2xpYmhpZGwvdmludGZkYXRhL2Zyb3plbiA+ICRAIDI+JjEgKSB8fCAoIGNhdCAkQCAmJiBleGl0IDEgKQogCiAkKGNhbGwgZGVjbGFyZS0xcC10YXJnZXQsJCh2aW50ZmZtX2xvZykpCiAKQEAgLTU2NDUsNiArNTY4OSw3IEBACiAgIGJyb3RsaSBcCiAgIGJzZGlmZiBcCiAgIGJ1aWxkX2ltYWdlIFwKKyAgYnVpbGRfbWl4ZWRfa2VybmVsc19yYW1kaXNrX2hvc3QgXAogICBidWlsZF9zdXBlcl9pbWFnZSBcCiAgIGJ1aWxkX3Zlcml0eV9tZXRhZGF0YSBcCiAgIGJ1aWxkX3Zlcml0eV90cmVlIFwKQEAgLTYzNjAsNiArNjQwNSwxMCBAQAogICBlbmRpZgogZW5kaWYKIAoraWZkZWYgQlVJTERJTkdfVkVORE9SX0tFUk5FTF9CT09UX0lNQUdFCisgICQoQlVJTFRfVEFSR0VUX0ZJTEVTX0RJUik6ICQoSU5URVJOQUxfVkVORE9SX0tFUk5FTF9SQU1ESVNLX0ZJTEVTKQorZW5kaWYKKwogaWZkZWYgQlVJTERJTkdfUkVDT1ZFUllfSU1BR0UKICAgIyBUT0RPKGIvMzA0MTQ0MjgpOiBDYW4ndCBkZXBlbmQgb24gSU5URVJOQUxfUkVDT1ZFUllJTUFHRV9GSUxFUyBhbG9uZSBsaWtlIG90aGVyCiAgICMgQlVJTFRfVEFSR0VUX0ZJTEVTX1BBQ0tBR0UgZGVwZW5kZW5jaWVzIGJlY2F1c2UgY3VycmVudGx5IHRoZXJlJ3JlIGNwL3JzeW5jL3JtCkBAIC03OTUzLDExICs4MDAyLDE2IEBACiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgRGVza3RvcCBwYWNrIHJlY292ZXJ5IGltYWdlIGhvb2suCi1pZm5lcSAoLCQoc3RyaXAgJChQQUNLX0RFU0tUT1BfUkVDT1ZFUllfSU1BR0UpKSkKK2lmZXEgKCQoQk9BUkRfVVNFU19ERVNLVE9QX1JFQ09WRVJZX0lNQUdFKSx0cnVlKQogUEFDS19SRUNPVkVSWV9JTUFHRV9UQVJHRVQgOj0gJChQUk9EVUNUX09VVCkvYW5kcm9pZC1kZXNrdG9wX3JlY292ZXJ5X2ltYWdlLmJpbgorUEFDS19SRUNPVkVSWV9JTUFHRV9BUkdTIDo9IC0tbm9hcmNoaXZlIC0tcmVjb3ZlcnkKKworaWZuZXEgKCwkKHN0cmlwICQoUEFDS19SRUNPVkVSWV9JTUFHRV9FWFBFUklNRU5UQUwpKSkKK1BBQ0tfUkVDT1ZFUllfSU1BR0VfQVJHUyArPSAtLWV4cGVyaW1lbnRhbAorZW5kaWYgIyBQQUNLX1JFQ09WRVJZX0lNQUdFX0VYUEVSSU1FTlRBTAogCiAkKFBBQ0tfUkVDT1ZFUllfSU1BR0VfVEFSR0VUKTogJChJTUFHRVMpICQoUEFDS19JTUFHRV9TQ1JJUFQpCi0JJChQQUNLX0lNQUdFX1NDUklQVCkgLS1vdXRfZGlyICQoUFJPRFVDVF9PVVQpIC0tbm9hcmNoaXZlIC0tcmVjb3ZlcnkKKwkkKFBBQ0tfSU1BR0VfU0NSSVBUKSAtLW91dF9kaXIgJChQUk9EVUNUX09VVCkgJChQQUNLX1JFQ09WRVJZX0lNQUdFX0FSR1MpCiAKIFBBQ0tFRF9SRUNPVkVSWV9JTUFHRV9BUkNISVZFX1RBUkdFVCA6PSAkKFBBQ0tfUkVDT1ZFUllfSU1BR0VfVEFSR0VUKS5negogCkBAIC03OTY5LDE1ICs4MDIzLDIwIEBACiAuUEhPTlk6IHBhY2stcmVjb3ZlcnktaW1hZ2UKIHBhY2stcmVjb3ZlcnktaW1hZ2U6ICQoUEFDS19SRUNPVkVSWV9JTUFHRV9UQVJHRVQpCiAKLWVuZGlmICMgUEFDS19ERVNLVE9QX1JFQ09WRVJZX0lNQUdFCitlbmRpZiAjIEJPQVJEX1VTRVNfREVTS1RPUF9SRUNPVkVSWV9JTUFHRQogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIERlc2t0b3AgcGFjayB1cGRhdGUgaW1hZ2UgaG9vay4KLWlmbmVxICgsJChzdHJpcCAkKFBBQ0tfREVTS1RPUF9VUERBVEVfSU1BR0UpKSkKK2lmZXEgKCQoQk9BUkRfVVNFU19ERVNLVE9QX1VQREFURV9JTUFHRSksdHJ1ZSkKIFBBQ0tfVVBEQVRFX0lNQUdFX1RBUkdFVCA6PSAkKFBST0RVQ1RfT1VUKS9hbmRyb2lkLWRlc2t0b3BfdXBkYXRlX2ltYWdlLmJpbgorUEFDS19VUERBVEVfSU1BR0VfQVJHUyA6PSAtLW5vYXJjaGl2ZSAtLXVwZGF0ZQorCitpZm5lcSAoLCQoc3RyaXAgJChQQUNLX1VQREFURV9JTUFHRV9FWFBFUklNRU5UQUwpKSkKK1BBQ0tfVVBEQVRFX0lNQUdFX0FSR1MgKz0gLS1leHBlcmltZW50YWwKK2VuZGlmICMgUEFDS19VUERBVEVfSU1BR0VfRVhQRVJJTUVOVEFMCiAKICQoUEFDS19VUERBVEVfSU1BR0VfVEFSR0VUKTogJChJTUFHRVMpICQoUEFDS19JTUFHRV9TQ1JJUFQpCi0JJChQQUNLX0lNQUdFX1NDUklQVCkgLS1vdXRfZGlyICQoUFJPRFVDVF9PVVQpIC0tbm9hcmNoaXZlIC0tdXBkYXRlCisJJChQQUNLX0lNQUdFX1NDUklQVCkgLS1vdXRfZGlyICQoUFJPRFVDVF9PVVQpICQoUEFDS19VUERBVEVfSU1BR0VfQVJHUykKIAogUEFDS0VEX1VQREFURV9JTUFHRV9BUkNISVZFX1RBUkdFVCA6PSAkKFBBQ0tfVVBEQVRFX0lNQUdFX1RBUkdFVCkuZ3oKIApAQCAtNzk4OSw3ICs4MDQ4LDI5IEBACiAuUEhPTlk6IHBhY2stdXBkYXRlLWltYWdlCiBwYWNrLXVwZGF0ZS1pbWFnZTogJChQQUNLX1VQREFURV9JTUFHRV9UQVJHRVQpCiAKLWVuZGlmICMgUEFDS19ERVNLVE9QX1VQREFURV9JTUFHRQorZW5kaWYgIyBCT0FSRF9VU0VTX0RFU0tUT1BfVVBEQVRFX0lNQUdFCisKK1BBQ0tfTUlHUkFUSU9OX0lNQUdFX1NDUklQVCA6PSAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9wYWNrX21pZ3JhdGlvbl9pbWFnZQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlc2t0b3AgcGFjayBtaWdyYXRpb24gaW1hZ2UgaG9vay4KK2lmZXEgKCQoQU5EUk9JRF9ERVNLVE9QX01JR1JBVElPTl9JTUFHRSksdHJ1ZSkKK1BBQ0tfTUlHUkFUSU9OX0lNQUdFX1RBUkdFVCA6PSAkKFBST0RVQ1RfT1VUKS9hbmRyb2lkLWRlc2t0b3BfbWlncmF0aW9uX2ltYWdlLmJpbgorCiskKFBBQ0tfTUlHUkFUSU9OX0lNQUdFX1RBUkdFVCk6ICQoSU1BR0VTKSAkKFBBQ0tfTUlHUkFUSU9OX0lNQUdFX1NDUklQVCkKKwkkKFBBQ0tfTUlHUkFUSU9OX0lNQUdFX1NDUklQVCkgLS1vdXRfZGlyICQoUFJPRFVDVF9PVVQpIC0tbm9hcmNoaXZlCisKK1BBQ0tFRF9NSUdSQVRJT05fSU1BR0VfQVJDSElWRV9UQVJHRVQgOj0gJChQQUNLX01JR1JBVElPTl9JTUFHRV9UQVJHRVQpLmd6CisKKyQoUEFDS0VEX01JR1JBVElPTl9JTUFHRV9BUkNISVZFX1RBUkdFVCk6ICQoUEFDS19NSUdSQVRJT05fSU1BR0VfVEFSR0VUKSB8ICQoR1pJUCkKKwkkKEdaSVApIC1mayAkKFBBQ0tfTUlHUkFUSU9OX0lNQUdFX1RBUkdFVCkKKworJChjYWxsIGRpc3QtZm9yLWdvYWxzLGRpc3RfZmlsZXMsJChQQUNLRURfTUlHUkFUSU9OX0lNQUdFX0FSQ0hJVkVfVEFSR0VUKSkKKworLlBIT05ZOiBwYWNrLW1pZ3JhdGlvbi1pbWFnZQorcGFjay1taWdyYXRpb24taW1hZ2U6ICQoUEFDS19NSUdSQVRJT05fSU1BR0VfVEFSR0VUKQorCitlbmRpZiAjIEFORFJPSURfREVTS1RPUF9NSUdSQVRJT05fSU1BR0UKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBPUyBMaWNlbnNpbmcKZGlmZiAtLWdpdCBhL2NvcmUvYW5kcm9pZF9zb29uZ19jb25maWdfdmFycy5tayBiL2NvcmUvYW5kcm9pZF9zb29uZ19jb25maWdfdmFycy5tawppbmRleCA3YmExODZiLi40NGUyMzk4IDEwMDY0NAotLS0gYS9jb3JlL2FuZHJvaWRfc29vbmdfY29uZmlnX3ZhcnMubWsKKysrIGIvY29yZS9hbmRyb2lkX3Nvb25nX2NvbmZpZ192YXJzLm1rCkBAIC0zMCwxMiArMzAsMjkgQEAKICQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsQU5EUk9JRCxCT0FSRF9VU0VTX1JFQ09WRVJZX0FTX0JPT1QsJChCT0FSRF9VU0VTX1JFQ09WRVJZX0FTX0JPT1QpKQogJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxBTkRST0lELEJPQVJEX01PVkVfR1NJX0FWQl9LRVlTX1RPX1ZFTkRPUl9CT09ULCQoQk9BUkRfTU9WRV9HU0lfQVZCX0tFWVNfVE9fVkVORE9SX0JPT1QpKQogJChjYWxsIGFkZF9zb29uZ19jb25maWdfdmFyLEFORFJPSUQsQ0hFQ0tfREVWX1RZUEVfVklPTEFUSU9OUykKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsQU5EUk9JRCxIQVNfQk9BUkRfU1lTVEVNX0VYVF9QUkVCVUlMVF9ESVIsJChpZiAkKEJPQVJEX1NZU1RFTV9FWFRfUFJFQlVJTFRfRElSKSx0cnVlLGZhbHNlKSkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsQU5EUk9JRCxIQVNfQk9BUkRfUFJPRFVDVF9QUkVCVUlMVF9ESVIsJChpZiAkKEJPQVJEX1BST0RVQ1RfUFJFQlVJTFRfRElSKSx0cnVlLGZhbHNlKSkKICQoY2FsbCBhZGRfc29vbmdfY29uZmlnX3ZhcixBTkRST0lELFBMQVRGT1JNX1NFUE9MSUNZX1ZFUlNJT04pCiAkKGNhbGwgYWRkX3Nvb25nX2NvbmZpZ192YXIsQU5EUk9JRCxQTEFURk9STV9TRVBPTElDWV9DT01QQVRfVkVSU0lPTlMpCiAkKGNhbGwgYWRkX3Nvb25nX2NvbmZpZ192YXIsQU5EUk9JRCxQUk9EVUNUX0lOU1RBTExfREVCVUdfUE9MSUNZX1RPX1NZU1RFTV9FWFQpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLEFORFJPSUQsUkVMRUFTRV9CT0FSRF9BUElfTEVWRUxfRlJPWkVOLCQoUkVMRUFTRV9CT0FSRF9BUElfTEVWRUxfRlJPWkVOKSkKICQoY2FsbCBhZGRfc29vbmdfY29uZmlnX3ZhcixBTkRST0lELFRBUkdFVF9EWU5BTUlDXzY0XzMyX0RSTVNFUlZFUikKICQoY2FsbCBhZGRfc29vbmdfY29uZmlnX3ZhcixBTkRST0lELFRBUkdFVF9FTkFCTEVfTUVESUFEUk1fNjQpCiAkKGNhbGwgYWRkX3Nvb25nX2NvbmZpZ192YXIsQU5EUk9JRCxUQVJHRVRfRFlOQU1JQ182NF8zMl9NRURJQVNFUlZFUikKKyQoY2FsbCBhZGRfc29vbmdfY29uZmlnX3ZhcixBTkRST0lELEJPQVJEX0dFTkZTX0xBQkVMU19WRVJTSU9OKQorCiskKGNhbGwgYWRkX3Nvb25nX2NvbmZpZ192YXIsQU5EUk9JRCxBRERJVElPTkFMX000REVGUywkKGlmICQoQk9BUkRfU0VQT0xJQ1lfTTRERUZTKSwkKGFkZHByZWZpeCAtRCwkKEJPQVJEX1NFUE9MSUNZX000REVGUykpKSkKKworIyBGb3IgYm9vdGFibGUvcmVjb3ZlcnkKK1JFQ09WRVJZX0FQSV9WRVJTSU9OIDo9IDMKK1JFQ09WRVJZX0ZTVEFCX1ZFUlNJT04gOj0gMgorJChjYWxsIHNvb25nX2NvbmZpZ19zZXQsIHJlY292ZXJ5LCByZWNvdmVyeV9hcGlfdmVyc2lvbiwgJChSRUNPVkVSWV9BUElfVkVSU0lPTikpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldCwgcmVjb3ZlcnksIHJlY292ZXJ5X2ZzdGFiX3ZlcnNpb24sICQoUkVDT1ZFUllfRlNUQUJfVkVSU0lPTikpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLCByZWNvdmVyeSAsdGFyZ2V0X3VzZXJpbWFnZXNfdXNlX2YyZnMgLCQoaWYgJChUQVJHRVRfVVNFUklNQUdFU19VU0VfRjJGUyksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLCByZWNvdmVyeSAsaGFzX2JvYXJkX2NhY2hlaW1hZ2VfcGFydGl0aW9uX3NpemUgLCQoaWYgJChCT0FSRF9DQUNIRUlNQUdFX1BBUlRJVElPTl9TSVpFKSx0cnVlLGZhbHNlKSkKK2lmZGVmIFRBUkdFVF9SRUNPVkVSWV9VSV9MSUIKKyAgJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfc3RyaW5nX2xpc3QsIHJlY292ZXJ5LCB0YXJnZXRfcmVjb3ZlcnlfdWlfbGliLCAkKFRBUkdFVF9SRUNPVkVSWV9VSV9MSUIpKQorZW5kaWYKIAogIyBGb3IgU2FuaXRpemVycwogJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxBTkRST0lELEFTQU5fRU5BQkxFRCwkKGlmICQoZmlsdGVyIGFkZHJlc3MsJChTQU5JVElaRV9UQVJHRVQpKSx0cnVlLGZhbHNlKSkKQEAgLTYwLDYgKzc3LDExIEBACiAjIFRoZSBkZWZhdWx0IHZhbHVlIG9mIEFSVF9CVUlMRF9IT1NUX0RFQlVHIGlzIHRydWUKICQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsYXJ0X21vZHVsZSxhcnRfYnVpbGRfaG9zdF9kZWJ1ZywkKGlmICQoZmlsdGVyIGZhbHNlLCQoQVJUX0JVSUxEX0hPU1RfREVCVUcpKSxmYWxzZSx0cnVlKSkKIAorIyBGb3IgY2hyZQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxjaHJlLGNocmVfZGFlbW9uX2xhbWFfZW5hYmxlZCwkKGlmICQoZmlsdGVyIHRydWUsJChDSFJFX0RBRU1PTl9MUE1BX0VOQUJMRUQpKSx0cnVlLGZhbHNlKSkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsY2hyZSxjaHJlX2RlZGljYXRlZF90cmFuc3BvcnRfY2hhbm5lbF9lbmFibGVkLCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKENIUkVfREVESUNBVEVEX1RSQU5TUE9SVF9DSEFOTkVMX0VOQUJMRUQpKSx0cnVlLGZhbHNlKSkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsY2hyZSxjaHJlX2xvZ19hdG9tX2V4dGVuc2lvbl9lbmFibGVkLCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKENIUkVfTE9HX0FUT01fRVhURU5TSU9OX0VOQUJMRUQpKSx0cnVlLGZhbHNlKSkKKwogaWZkZWYgVEFSR0VUX0JPQVJEX0FVVE8KICAgJChjYWxsIGFkZF9zb29uZ19jb25maWdfdmFyX3ZhbHVlLCBBTkRST0lELCB0YXJnZXRfYm9hcmRfYXV0bywgJChUQVJHRVRfQk9BUkRfQVVUTykpCiBlbmRpZgpAQCAtNzcsNiArOTksOSBAQAogU1lTVEVNVUlfT1BUSU1JWkVfSkFWQSA/PSB0cnVlCiAkKGNhbGwgYWRkX3Nvb25nX2NvbmZpZ192YXIsQU5EUk9JRCxTWVNURU1VSV9PUFRJTUlaRV9KQVZBKQogCisjIEZsYWcgdG8gdXNlIGJhc2VsaW5lIHByb2ZpbGUgZm9yIFN5c3RlbVVJLgorJChjYWxsIHNvb25nX2NvbmZpZ19zZXQsQU5EUk9JRCxyZWxlYXNlX3N5c3RlbXVpX3VzZV9zcGVlZF9wcm9maWxlLCQoUkVMRUFTRV9TWVNURU1VSV9VU0VfU1BFRURfUFJPRklMRSkpCisKICMgRmxhZyBmb3IgZW5hYmxpbmcgY29tcG9zZSBmb3IgTGF1bmNoZXIuCiAkKGNhbGwgc29vbmdfY29uZmlnX3NldCxBTkRST0lELHJlbGVhc2VfZW5hYmxlX2NvbXBvc2VfaW5fbGF1bmNoZXIsJChSRUxFQVNFX0VOQUJMRV9DT01QT1NFX0lOX0xBVU5DSEVSKSkKIApAQCAtOTQsNiArMTE5LDEwIEBACiAkKGNhbGwgYWRkX3Nvb25nX2NvbmZpZ192YXJfdmFsdWUsQU5EUk9JRCxhdmZfbWljcm9kcm9pZF9ndWVzdF9na2lfdmVyc2lvbiwkKFBST0RVQ1RfQVZGX01JQ1JPRFJPSURfR1VFU1RfR0tJX1ZFUlNJT04pKQogZW5kaWYKIAoraWZkZWYgVEFSR0VUX0JPT1RTXzE2SworJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxBTkRST0lELHRhcmdldF9ib290c18xNmssJChmaWx0ZXIgdHJ1ZSwkKFRBUkdFVF9CT09UU18xNkspKSkKK2VuZGlmCisKIGlmZGVmIFBST0RVQ1RfTUVNQ0dfVjJfRk9SQ0VfRU5BQkxFRAogJChjYWxsIGFkZF9zb29uZ19jb25maWdfdmFyX3ZhbHVlLEFORFJPSUQsbWVtY2dfdjJfZm9yY2VfZW5hYmxlZCwkKFBST0RVQ1RfTUVNQ0dfVjJfRk9SQ0VfRU5BQkxFRCkpCiBlbmRpZgpAQCAtMTc1LDYgKzIwNCwxOSBAQAogIyBSZXF1aXJlZCBhcyBwbGF0Zm9ybV9ib290Y2xhc3NwYXRoIGlzIHVzaW5nIHRoaXMgbmFtZXNwYWNlCiAkKGNhbGwgc29vbmdfY29uZmlnX3NldCxib290Y2xhc3NwYXRoLHJlbGVhc2VfY3Jhc2hyZWNvdmVyeV9tb2R1bGUsJChSRUxFQVNFX0NSQVNIUkVDT1ZFUllfTU9EVUxFKSkKIAorCisjIEFkZCBvbmRldmljZWludGVsbGlnZW5jZSBtb2R1bGUgYnVpbGQgZmxhZyB0byBzb29uZworaWZlcSAodHJ1ZSwkKFJFTEVBU0VfT05ERVZJQ0VfSU5URUxMSUdFTkNFX01PRFVMRSkpCisgICAgJChjYWxsIHNvb25nX2NvbmZpZ19zZXQsQU5EUk9JRCxyZWxlYXNlX29uZGV2aWNlX2ludGVsbGlnZW5jZV9tb2R1bGUsdHJ1ZSkKKyAgICAjIFJlcXVpcmVkIGFzIHBsYXRmb3JtX2Jvb3RjbGFzc3BhdGggaXMgdXNpbmcgdGhpcyBuYW1lc3BhY2UKKyAgICAkKGNhbGwgc29vbmdfY29uZmlnX3NldCxib290Y2xhc3NwYXRoLHJlbGVhc2Vfb25kZXZpY2VfaW50ZWxsaWdlbmNlX21vZHVsZSx0cnVlKQorCitlbHNlCisgICAgJChjYWxsIHNvb25nX2NvbmZpZ19zZXQsQU5EUk9JRCxyZWxlYXNlX29uZGV2aWNlX2ludGVsbGlnZW5jZV9wbGF0Zm9ybSx0cnVlKQorICAgICQoY2FsbCBzb29uZ19jb25maWdfc2V0LGJvb3RjbGFzc3BhdGgscmVsZWFzZV9vbmRldmljZV9pbnRlbGxpZ2VuY2VfcGxhdGZvcm0sdHJ1ZSkKKworZW5kaWYKKwogIyBBZGQgdXByb2Jlc3RhdHMgYnVpbGQgZmxhZyB0byBzb29uZwogJChjYWxsIHNvb25nX2NvbmZpZ19zZXQsQU5EUk9JRCxyZWxlYXNlX3Vwcm9iZXN0YXRzX21vZHVsZSwkKFJFTEVBU0VfVVBST0JFU1RBVFNfTU9EVUxFKSkKICMgQWRkIHVwcm9iZXN0YXRzIGZpbGUgbW92ZSBmbGFncyB0byBzb29uZywgZm9yIGJvdGggcGxhdGZvcm0gYW5kIG1vZHVsZQpAQCAtMjAxLDMgKzI0Myw2MiBAQAogCiAjIEFkZCB1c2VfY2FtZXJhX3Y0bDJfaGFsIGZsYWcgZm9yIGhhcmR3YXJlL2xpYmhhcmR3YXJlL21vZHVsZXMvY2FtZXJhLzNfNDpjYW1lcmEudjRsMgogJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxjYW1lcmEsdXNlX2NhbWVyYV92NGwyX2hhbCwkKGlmICQoZmlsdGVyIHRydWUsJChVU0VfQ0FNRVJBX1Y0TDJfSEFMKSksdHJ1ZSxmYWxzZSkpCisKKyMgQWRkIGF1ZGlvc2VydmVyX211bHRpbGliIGZsYWcgZm9yIGhhcmR3YXJlL2ludGVyZmFjZXMvc291bmR0cmlnZ2VyLzIuMC9kZWZhdWx0OmFuZHJvaWQuaGFyZHdhcmUuc291bmR0cmlnZ2VyQDIuMC1pbXBsCitpZm5lcSAoJChzdHJpcCAkKEFVRElPU0VSVkVSX01VTFRJTElCKSksKQorICAkKGNhbGwgc29vbmdfY29uZmlnX3NldCxzb3VuZHRyaWdnZXIsYXVkaW9zZXJ2ZXJfbXVsdGlsaWIsJChBVURJT1NFUlZFUl9NVUxUSUxJQikpCitlbmRpZgorCisjIEFkZCBzaW1fY291bnQsIGRpc2FibGVfcmlsZF9vZW1faG9vaywgYW5kIHVzZV9hb3NwX3JpbGQgZmxhZyBmb3IgcmlsIHJlbGF0ZWQgbW9kdWxlcworJChjYWxsIHNvb25nX2NvbmZpZ19zZXQscmlsLHNpbV9jb3VudCwkKFNJTV9DT1VOVCkpCitpZm5lcSAoJChESVNBQkxFX1JJTERfT0VNX0hPT0spLCBmYWxzZSkKKyAgJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxyaWwsZGlzYWJsZV9yaWxkX29lbV9ob29rLHRydWUpCitlbmRpZgoraWZuZXEgKCQoRU5BQkxFX1ZFTkRPUl9SSUxfU0VSVklDRSksIHRydWUpCisgICQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wscmlsLHVzZV9hb3NwX3JpbGQsdHJ1ZSkKK2VuZGlmCisKKyMgRXhwb3J0IHRhcmdldF9ib2FyZF9wbGF0Zm9ybSB0byBzb29uZyBmb3IgaGFyZHdhcmUvZ29vZ2xlL2dyYXBoaWNzL2NvbW1vbi9saWJtZW10cmFjazptZW10cmFjay4kKFRBUkdFVF9CT0FSRF9QTEFURk9STSkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0LEFORFJPSUQsdGFyZ2V0X2JvYXJkX3BsYXRmb3JtLCQoVEFSR0VUX0JPQVJEX1BMQVRGT1JNKSkKKworIyBFeHBvcnQgYm9hcmRfdXNlc19zY2FsZXJfbTJtMXNob3QgYW5kIGJvYXJkX3VzZXNfYWxpZ25fcmVzdHJpY3Rpb24gdG8gc29vbmcgZm9yIGhhcmR3YXJlL2dvb2dsZS9ncmFwaGljcy9jb21tb24vbGlic2NhbGVyOmxpYmV4eW5vc3NjYWxlcgorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxnb29nbGVfZ3JhcGhpY3MsYm9hcmRfdXNlc19zY2FsZXJfbTJtMXNob3QsJChpZiAkKGZpbHRlciB0cnVlLCQoQk9BUkRfVVNFU19TQ0FMRVJfTTJNMVNIT1QpKSx0cnVlLGZhbHNlKSkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsZ29vZ2xlX2dyYXBoaWNzLGJvYXJkX3VzZXNfYWxpZ25fcmVzdHJpY3Rpb24sJChpZiAkKGZpbHRlciB0cnVlLCQoQk9BUkRfVVNFU19BTElHTl9SRVNUUklDVElPTikpLHRydWUsZmFsc2UpKQorCisjIEV4cG9ydCByZWxhdGVkIHZhcmlhYmxlcyB0byBzb29uZyBmb3IgaGFyZHdhcmUvZ29vZ2xlL2dyYXBoaWNzL2NvbW1vbi9saWJhY3J5bDpsaWJhY3J5bAoraWZkZWYgQk9BUkRfTElCQUNSWUxfREVGQVVMVF9DT01QT1NJVE9SCisgICQoY2FsbCBzb29uZ19jb25maWdfc2V0LGFjcnlsLGxpYmFjcnlsX2RlZmF1bHRfY29tcG9zaXRvciwkKEJPQVJEX0xJQkFDUllMX0RFRkFVTFRfQ09NUE9TSVRPUikpCitlbmRpZgoraWZkZWYgQk9BUkRfTElCQUNSWUxfREVGQVVMVF9TQ0FMRVIKKyAgJChjYWxsIHNvb25nX2NvbmZpZ19zZXQsYWNyeWwsbGliYWNyeWxfZGVmYXVsdF9zY2FsZXIsJChCT0FSRF9MSUJBQ1JZTF9ERUZBVUxUX1NDQUxFUikpCitlbmRpZgoraWZkZWYgQk9BUkRfTElCQUNSWUxfREVGQVVMVF9CTFRFUgorICAkKGNhbGwgc29vbmdfY29uZmlnX3NldCxhY3J5bCxsaWJhY3J5bF9kZWZhdWx0X2JsdGVyLCQoQk9BUkRfTElCQUNSWUxfREVGQVVMVF9CTFRFUikpCitlbmRpZgoraWZkZWYgQk9BUkRfTElCQUNSWUxfRzJEX0hEUl9QTFVHSU4KKyAgI0JPQVJEX0xJQkFDUllMX0cyRF9IRFJfUExVR0lOIGlzIHNldCBpbiBlYWNoIGJvYXJkIGNvbmZpZworICAkKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGFjcnlsLGxpYmFjcnlsX3VzZV9nMmRfaGRyX3BsdWdpbix0cnVlKQorZW5kaWYKKworIyBFeHBvcnQgcmVsYXRlZCB2YXJpYWJsZXMgdG8gc29vbmcgZm9yIGhhcmR3YXJlL2dvb2dsZS9ncmFwaGljcy9jb21tb24vQm9hcmRDb25maWdDRmxhZ3MubWsKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsZ29vZ2xlX2dyYXBoaWNzLGh3Y19ub19zdXBwb3J0X3NraXBfdmFsaWRhdGUsJChpZiAkKGZpbHRlciB0cnVlLCQoSFdDX05PX1NVUFBPUlRfU0tJUF9WQUxJREFURSkpLHRydWUsZmFsc2UpKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxnb29nbGVfZ3JhcGhpY3MsaHdjX3N1cHBvcnRfY29sb3JfdHJhbnNmb3JtLCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKEhXQ19TVVBQT1JUX0NPTE9SX1RSQU5TRk9STSkpLHRydWUsZmFsc2UpKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxnb29nbGVfZ3JhcGhpY3MsaHdjX3N1cHBvcnRfcmVuZGVyX2ludGVudCwkKGlmICQoZmlsdGVyIHRydWUsJChIV0NfU1VQUE9SVF9SRU5ERVJfSU5URU5UKSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGdvb2dsZV9ncmFwaGljcyxib2FyZF91c2VzX3ZpcnR1YWxfZGlzcGxheSwkKGlmICQoZmlsdGVyIHRydWUsJChCT0FSRF9VU0VTX1ZJUlRVQUxfRElTUExBWSkpLHRydWUsZmFsc2UpKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxnb29nbGVfZ3JhcGhpY3MsYm9hcmRfdXNlc19kdCwkKGlmICQoZmlsdGVyIHRydWUsJChCT0FSRF9VU0VTX0RUKSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGdvb2dsZV9ncmFwaGljcyxib2FyZF91c2VzX2RlY29uXzY0Yml0X2FkZHJlc3MsJChpZiAkKGZpbHRlciB0cnVlLCQoQk9BUkRfVVNFU19ERUNPTl82NEJJVF9BRERSRVNTKSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGdvb2dsZV9ncmFwaGljcyxib2FyZF91c2VzX2hkcnVpX2dsZXNfY29udmVyc2lvbiwkKGlmICQoZmlsdGVyIHRydWUsJChCT0FSRF9VU0VTX0hEUlVJX0dMRVNfQ09OVkVSU0lPTikpLHRydWUsZmFsc2UpKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxnb29nbGVfZ3JhcGhpY3MsdXNlc19pZGlzcGxheV9pbnRmX3NlYywkKGlmICQoZmlsdGVyIHRydWUsJChVU0VTX0lESVNQTEFZX0lOVEZfU0VDKSksdHJ1ZSxmYWxzZSkpCisKKyMgVmFyaWFibGVzIGZvciBmc19jb25maWcKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsZnNfY29uZmlnLHZlbmRvciwkKGlmICQoQk9BUkRfVVNFU19WRU5ET1JJTUFHRSkkKEJPQVJEX1ZFTkRPUklNQUdFX0ZJTEVfU1lTVEVNX1RZUEUpLHRydWUsZmFsc2UpKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxmc19jb25maWcsb2VtLCQoaWYgJChCT0FSRF9VU0VTX09FTUlNQUdFKSQoQk9BUkRfT0VNSU1BR0VfRklMRV9TWVNURU1fVFlQRSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGZzX2NvbmZpZyxvZG0sJChpZiAkKEJPQVJEX1VTRVNfT0RNSU1BR0UpJChCT0FSRF9PRE1JTUFHRV9GSUxFX1NZU1RFTV9UWVBFKSx0cnVlLGZhbHNlKSkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsZnNfY29uZmlnLHZlbmRvcl9kbGttLCQoaWYgJChCT0FSRF9VU0VTX1ZFTkRPUl9ETEtNSU1BR0UpJChCT0FSRF9WRU5ET1JfRExLTUlNQUdFX0ZJTEVfU1lTVEVNX1RZUEUpLHRydWUsZmFsc2UpKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxmc19jb25maWcsb2RtX2Rsa20sJChpZiAkKEJPQVJEX1VTRVNfT0RNX0RMS01JTUFHRSkkKEJPQVJEX09ETV9ETEtNSU1BR0VfRklMRV9TWVNURU1fVFlQRSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGZzX2NvbmZpZyxzeXN0ZW1fZGxrbSwkKGlmICQoQk9BUkRfVVNFU19TWVNURU1fRExLTUlNQUdFKSQoQk9BUkRfU1lTVEVNX0RMS01JTUFHRV9GSUxFX1NZU1RFTV9UWVBFKSx0cnVlLGZhbHNlKSkKKworIyBWYXJpYWJsZXMgZm9yIHRlbGVwaG9ueQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCx0ZWxlcGhvbnksc2VjX2NwX3NlY3VyZV9ib290LCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKFNFQ19DUF9TRUNVUkVfQk9PVCkpLHRydWUsZmFsc2UpKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCx0ZWxlcGhvbnksY2JkX3Byb3RvY29sX3NpdCwkKGlmICQoZmlsdGVyIHRydWUsJChDQkRfUFJPVE9DT0xfU0lUKSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLHRlbGVwaG9ueSx1c2VfcmFkaW9leHRlcm5hbF9oYWxfYWlkbCwkKGlmICQoZmlsdGVyIHRydWUsJChVU0VfUkFESU9FWFRFUk5BTF9IQUxfQUlETCkpLHRydWUsZmFsc2UpKQpkaWZmIC0tZ2l0IGEvY29yZS9iaW5hcnkubWsgYi9jb3JlL2JpbmFyeS5tawppbmRleCAzYzVjNmU1Li45ZGJmMWZkIDEwMDY0NAotLS0gYS9jb3JlL2JpbmFyeS5taworKysgYi9jb3JlL2JpbmFyeS5tawpAQCAtMTk2LDcgKzE5Niw3IEBACiBlbmRpZgogZW5kaWYKIAotbXlfbmRrX3N5c3Jvb3RfaW5jbHVkZSA6PQorbXlfbmRrX3N5c3Jvb3QgOj0KIG15X25ka19zeXNyb290X2xpYiA6PQogbXlfYXBpX2xldmVsIDo9IDEwMDAwCiAKQEAgLTIyOSwxMSArMjI5LDkgQEAKIAogICBteV9idWlsdF9uZGsgOj0gJChTT09OR19PVVRfRElSKS9uZGsKICAgbXlfbmRrX3RyaXBsZSA6PSAkKCQoTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWClUQVJHRVRfTkRLX1RSSVBMRSkKLSAgbXlfbmRrX3N5c3Jvb3RfaW5jbHVkZSA6PSBcCi0gICAgICAkKG15X2J1aWx0X25kaykvc3lzcm9vdC91c3IvaW5jbHVkZSBcCi0gICAgICAkKG15X2J1aWx0X25kaykvc3lzcm9vdC91c3IvaW5jbHVkZS8kKG15X25ka190cmlwbGUpIFwKKyAgbXlfbmRrX3N5c3Jvb3QgOj0gJChteV9idWlsdF9uZGspL3N5c3Jvb3QKIAotICBteV9uZGtfc3lzcm9vdF9saWIgOj0gJChteV9idWlsdF9uZGspL3N5c3Jvb3QvdXNyL2xpYi8kKG15X25ka190cmlwbGUpLyQobXlfbmRrX2FwaSkKKyAgbXlfbmRrX3N5c3Jvb3RfbGliIDo9ICQobXlfbmRrX3N5c3Jvb3QpL3Vzci9saWIvJChteV9uZGtfdHJpcGxlKS8kKG15X25ka19hcGkpCiAKICAgIyBUaGUgYmlvbmljIGxpbmtlciBub3cgaGFzIHN1cHBvcnQgZm9yIHBhY2tlZCByZWxvY2F0aW9ucyBhbmQgZ251IHN0eWxlCiAgICMgaGFzaGVzICh3aGljaCBhcmUgbXVjaCBmYXN0ZXIhKSwgYnV0IHNoaXBwaW5nIHRvIG9sZGVyIGRldmljZXMgcmVxdWlyZXMKQEAgLTM1MiwxOCArMzUwLDIwIEBACiAgIGlmbmVxICgkKExPQ0FMX0lOX1ZFTkRPUiksKQogICAgICMgVmVuZG9yIG1vZHVsZXMgaGF2ZSBMT0NBTF9JTl9WRU5ET1IKICAgICBteV9jZmxhZ3MgKz0gLURfX0FORFJPSURfVkVORE9SX18KLQotICAgIGlmZXEgKCQoQk9BUkRfQVBJX0xFVkVMKSwpCi0gICAgICAjIFRPRE8oYi8zMTQwMzY4NDcpOiBUaGlzIGlzIGEgZmFsbGJhY2sgZm9yIFVEQyB0YXJnZXRzLgotICAgICAgIyBUaGlzIG11c3QgYmUgYSBidWlsZCBmYWlsdXJlIHdoZW4gVURDIGlzIG5vIGxvbmdlciBidWlsdCBmcm9tIHRoaXMgc291cmNlIHRyZWUuCi0gICAgICBteV9jZmxhZ3MgKz0gLURfX0FORFJPSURfVkVORE9SX0FQSV9fPSQoUExBVEZPUk1fU0RLX1ZFUlNJT04pCi0gICAgZWxzZQotICAgICAgbXlfY2ZsYWdzICs9IC1EX19BTkRST0lEX1ZFTkRPUl9BUElfXz0kKEJPQVJEX0FQSV9MRVZFTCkKLSAgICBlbmRpZgogICBlbHNlIGlmbmVxICgkKExPQ0FMX0lOX1BST0RVQ1QpLCkKICAgICAjIFByb2R1Y3QgbW9kdWxlcyBoYXZlIExPQ0FMX0lOX1BST0RVQ1QKICAgICBteV9jZmxhZ3MgKz0gLURfX0FORFJPSURfUFJPRFVDVF9fCiAgIGVuZGlmCisKKyAgIyBEZWZpbmUgX19BTkRST0lEX1ZFTkRPUl9BUElfXyBmb3IgYm90aCBwcm9kdWN0IGFuZCB2ZW5kb3IgdmFyaWFudHMgYmVjYXVzZQorICAjIHRoZXkgYm90aCB1c2UgdGhlIHNhbWUgTExOREsgbGlicmFyaWVzLgorICBpZmVxICgkKEJPQVJEX0FQSV9MRVZFTCksKQorICAgICMgVE9ETyhiLzMxNDAzNjg0Nyk6IFRoaXMgaXMgYSBmYWxsYmFjayBmb3IgVURDIHRhcmdldHMuCisgICAgIyBUaGlzIG11c3QgYmUgYSBidWlsZCBmYWlsdXJlIHdoZW4gVURDIGlzIG5vIGxvbmdlciBidWlsdCBmcm9tIHRoaXMgc291cmNlIHRyZWUuCisgICAgbXlfY2ZsYWdzICs9IC1EX19BTkRST0lEX1ZFTkRPUl9BUElfXz0kKFBMQVRGT1JNX1NES19WRVJTSU9OKQorICBlbHNlCisgICAgbXlfY2ZsYWdzICs9IC1EX19BTkRST0lEX1ZFTkRPUl9BUElfXz0kKEJPQVJEX0FQSV9MRVZFTCkKKyAgZW5kaWYKIGVuZGlmCiAKIGlmbmRlZiBMT0NBTF9JU19IT1NUX01PRFVMRQpAQCAtMTY0OCwxOSArMTY0OCw2IEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogaWZuZGVmIExPQ0FMX0lTX0hPU1RfTU9EVUxFCiAKLWlmZXEgKCQoY2FsbCBtb2R1bGUtaW4tdmVuZG9yLW9yLXByb2R1Y3QpLHRydWUpCi0gIG15X3RhcmdldF9nbG9iYWxfY19pbmNsdWRlcyA6PQotICBteV90YXJnZXRfZ2xvYmFsX2Nfc3lzdGVtX2luY2x1ZGVzIDo9ICQoVEFSR0VUX09VVF9IRUFERVJTKQotZWxzZSBpZmRlZiBMT0NBTF9TREtfVkVSU0lPTgotICBteV90YXJnZXRfZ2xvYmFsX2NfaW5jbHVkZXMgOj0KLSAgbXlfdGFyZ2V0X2dsb2JhbF9jX3N5c3RlbV9pbmNsdWRlcyA6PSAkKG15X25ka19zdGxfaW5jbHVkZV9wYXRoKSAkKG15X25ka19zeXNyb290X2luY2x1ZGUpCi1lbHNlCi0gIG15X3RhcmdldF9nbG9iYWxfY19pbmNsdWRlcyA6PSAkKFNSQ19IRUFERVJTKSBcCi0gICAgJCgkKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpJChteV9wcmVmaXgpQ19JTkNMVURFUykKLSAgbXlfdGFyZ2V0X2dsb2JhbF9jX3N5c3RlbV9pbmNsdWRlcyA6PSAkKFNSQ19TWVNURU1fSEVBREVSUykgXAotICAgICQoJChMT0NBTF8yTkRfQVJDSF9WQVJfUFJFRklYKSQobXlfcHJlZml4KUNfU1lTVEVNX0lOQ0xVREVTKQotZW5kaWYKLQogbXlfdGFyZ2V0X2dsb2JhbF9jZmxhZ3MgOj0gJCgkKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpQ0xBTkdfJChteV9wcmVmaXgpR0xPQkFMX0NGTEFHUykKIG15X3RhcmdldF9nbG9iYWxfY29ubHlmbGFncyA6PSAkKCQoTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWClDTEFOR18kKG15X3ByZWZpeClHTE9CQUxfQ09OTFlGTEFHUykgJChteV9jX3N0ZF9jb25seWZsYWdzKQogbXlfdGFyZ2V0X2dsb2JhbF9jcHBmbGFncyA6PSAkKCQoTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWClDTEFOR18kKG15X3ByZWZpeClHTE9CQUxfQ1BQRkxBR1MpICQobXlfY3BwX3N0ZF9jcHBmbGFncykKQEAgLTE2NzYsNiArMTY2MywyMiBAQAogICBteV90YXJnZXRfZ2xvYmFsX2xkZmxhZ3MgOj0gJCgkKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpQ0xBTkdfJChteV9wcmVmaXgpR0xPQkFMX0xERkxBR1MpCiBlbmRpZiAjIG15X3VzZV9jbGFuZ19sbGQKIAoraWZlcSAoJChjYWxsIG1vZHVsZS1pbi12ZW5kb3Itb3ItcHJvZHVjdCksdHJ1ZSkKKyAgbXlfdGFyZ2V0X2dsb2JhbF9jX2luY2x1ZGVzIDo9CisgIG15X3RhcmdldF9nbG9iYWxfY19zeXN0ZW1faW5jbHVkZXMgOj0gJChUQVJHRVRfT1VUX0hFQURFUlMpCisgIG15X3RhcmdldF9nbG9iYWxfY2ZsYWdzICs9IC1ub3N0ZGxpYmluYworZWxzZSBpZmRlZiBMT0NBTF9TREtfVkVSU0lPTgorICBteV90YXJnZXRfZ2xvYmFsX2NfaW5jbHVkZXMgOj0KKyAgbXlfdGFyZ2V0X2dsb2JhbF9jX3N5c3RlbV9pbmNsdWRlcyA6PSAkKG15X25ka19zdGxfaW5jbHVkZV9wYXRoKQorICBteV90YXJnZXRfZ2xvYmFsX2NmbGFncyArPSAtLXN5c3Jvb3QgJChteV9uZGtfc3lzcm9vdCkKK2Vsc2UKKyAgbXlfdGFyZ2V0X2dsb2JhbF9jX2luY2x1ZGVzIDo9ICQoU1JDX0hFQURFUlMpIFwKKyAgICAkKCQoTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWCkkKG15X3ByZWZpeClDX0lOQ0xVREVTKQorICBteV90YXJnZXRfZ2xvYmFsX2Nfc3lzdGVtX2luY2x1ZGVzIDo9ICQoU1JDX1NZU1RFTV9IRUFERVJTKSBcCisgICAgJCgkKExPQ0FMXzJORF9BUkNIX1ZBUl9QUkVGSVgpJChteV9wcmVmaXgpQ19TWVNURU1fSU5DTFVERVMpCisgIG15X3RhcmdldF9nbG9iYWxfY2ZsYWdzICs9IC1ub3N0ZGxpYmluYworZW5kaWYKKwogbXlfdGFyZ2V0X3RyaXBsZSA6PSAkKCQoTE9DQUxfMk5EX0FSQ0hfVkFSX1BSRUZJWClDTEFOR18kKG15X3ByZWZpeClUUklQTEUpCiBpZm5kZWYgTE9DQUxfSVNfSE9TVF9NT0RVTEUKICAgbXlfdGFyZ2V0X3RyaXBsZV9mbGFnIDo9IC10YXJnZXQgJChteV90YXJnZXRfdHJpcGxlKSQobXlfYXBpX2xldmVsKQpkaWZmIC0tZ2l0IGEvY29yZS9ib2FyZF9jb25maWcubWsgYi9jb3JlL2JvYXJkX2NvbmZpZy5tawppbmRleCA1NjA2OTY0Li44NTlhNmIyIDEwMDY0NAotLS0gYS9jb3JlL2JvYXJkX2NvbmZpZy5taworKysgYi9jb3JlL2JvYXJkX2NvbmZpZy5tawpAQCAtMjcsNiArMjcsNyBAQAogX2JvYXJkX3N0cmlwX3JlYWRvbmx5X2xpc3QgKz0gQk9BUkRfS0VSTkVMX0NNRExJTkUKIF9ib2FyZF9zdHJpcF9yZWFkb25seV9saXN0ICs9IEJPQVJEX0JPT1RfSEVBREVSX1ZFUlNJT04KIF9ib2FyZF9zdHJpcF9yZWFkb25seV9saXN0ICs9IEJPQVJEX0JPT1RDT05GSUcKK19ib2FyZF9zdHJpcF9yZWFkb25seV9saXN0ICs9IEJPQVJEX0JPT1RDT05GSUdfRklMRQogX2JvYXJkX3N0cmlwX3JlYWRvbmx5X2xpc3QgKz0gQk9BUkRfS0VSTkVMX0JBU0UKIF9ib2FyZF9zdHJpcF9yZWFkb25seV9saXN0ICs9IEJPQVJEX1VTRVNfR0VORVJJQ19BVURJTwogX2JvYXJkX3N0cmlwX3JlYWRvbmx5X2xpc3QgKz0gQk9BUkRfVVNFU19SRUNPVkVSWV9BU19CT09UCkBAIC0yMjQsNiArMjI1LDcgQEAKICAgICAgICQoU1JDX1RBUkdFVF9ESVIpL2JvYXJkLyQoVEFSR0VUX0RFVklDRSkvQm9hcmRDb25maWcubWsgXAogICAgICAgZGV2aWNlL2dlbmVyaWMvZ29sZGZpc2gvYm9hcmQvJChUQVJHRVRfREVWSUNFKS9Cb2FyZENvbmZpZy5tayBcCiAgICAgICBkZXZpY2UvZ29vZ2xlL2N1dHRsZWZpc2gvYm9hcmQvJChUQVJHRVRfREVWSUNFKS9Cb2FyZENvbmZpZy5tayBcCisgICAgICB2ZW5kb3IvZ29vZ2xlL3Byb2R1Y3RzL2N1dHRsZWZpc2gvcGl4ZWxfd2F0Y2gvYm9hcmQvJChUQVJHRVRfREVWSUNFKS9Cb2FyZENvbmZpZy5tayBcCiAgICAgICAkKHNoZWxsIHRlc3QgLWQgZGV2aWNlICYmIGZpbmQgLUwgZGV2aWNlIC1tYXhkZXB0aCA0IC1wYXRoICcqLyQoVEFSR0VUX0RFVklDRSkvQm9hcmRDb25maWcubWsnKSBcCiAgICAgICAkKHNoZWxsIHRlc3QgLWQgdmVuZG9yICYmIGZpbmQgLUwgdmVuZG9yIC1tYXhkZXB0aCA0IC1wYXRoICcqLyQoVEFSR0VUX0RFVklDRSkvQm9hcmRDb25maWcubWsnKSBcCiAgICAgKSkpCkBAIC0yODgsNiArMjkwLDcgQEAKICAgICAkKGVycm9yIFZhbGlkIHZhbHVlcyBvZiAkKHZhcikgYXJlICJ0cnVlIiwgImZhbHNlIiwgYW5kICIiLiBOb3QgIiQoJCh2YXIpKSIpKSkKIAogaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvYm9hcmRfY29uZmlnX3dpZmkubWsKK2luY2x1ZGUgJChCVUlMRF9TWVNURU0pL2JvYXJkX2NvbmZpZ193cGFfc3VwcGxpY2FudC5tawogCiAjIFNldCB1cCBzb29uZyBjb25maWcgZm9yICJzb29uZ19jb25maWdfdmFsdWVfdmFyaWFibGUiLgogLWluY2x1ZGUgdmVuZG9yL2dvb2dsZS9idWlsZC9zb29uZy9zb29uZ19jb25maWdfbmFtZXNwYWNlL2NhbWVyYS5tawpAQCAtMzExLDkgKzMxNCwxMCBAQAogLktBVElfUkVBRE9OTFkgOj0gJChfYm9hcmRfc3RyaXBfcmVhZG9ubHlfbGlzdCkKIAogSU5URVJOQUxfS0VSTkVMX0NNRExJTkUgOj0gJChCT0FSRF9LRVJORUxfQ01ETElORSkKLWlmbmVxICgsJChCT0FSRF9CT09UQ09ORklHKSkKK2lmbmVxICgsJChCT0FSRF9CT09UQ09ORklHKSQoQk9BUkRfQk9PVENPTkZJR19GSUxFKSkKICAgSU5URVJOQUxfS0VSTkVMX0NNRExJTkUgKz0gYm9vdGNvbmZpZwogICBJTlRFUk5BTF9CT09UQ09ORklHIDo9ICQoQk9BUkRfQk9PVENPTkZJRykKKyAgSU5URVJOQUxfQk9PVENPTkZJR19GSUxFIDo9ICQoQk9BUkRfQk9PVENPTkZJR19GSUxFKQogZW5kaWYKIAogaWZuZXEgKCQoZmlsdGVyICU2NCwkKFRBUkdFVF9BUkNIKSksKQpAQCAtOTIyLDYgKzkyNiwxOCBAQAogZW5kaWYKIC5LQVRJX1JFQURPTkxZIDo9IEJPQVJEX1VTRVNfUFZNRldJTUFHRQogCitCT0FSRF9VU0VTX0RFU0tUT1BfUkVDT1ZFUllfSU1BR0UgOj0KK2lmZXEgKCQoUFJPRFVDVF9CVUlMRF9ERVNLVE9QX1JFQ09WRVJZX0lNQUdFKSx0cnVlKQorICBCT0FSRF9VU0VTX0RFU0tUT1BfUkVDT1ZFUllfSU1BR0UgOj0gdHJ1ZQorZW5kaWYKKy5LQVRJX1JFQURPTkxZIDo9IEJPQVJEX1VTRVNfREVTS1RPUF9SRUNPVkVSWV9JTUFHRQorCitCT0FSRF9VU0VTX0RFU0tUT1BfVVBEQVRFX0lNQUdFIDo9CitpZmVxICgkKFBST0RVQ1RfQlVJTERfREVTS1RPUF9VUERBVEVfSU1BR0UpLHRydWUpCisgIEJPQVJEX1VTRVNfREVTS1RPUF9VUERBVEVfSU1BR0UgOj0gdHJ1ZQorZW5kaWYKKy5LQVRJX1JFQURPTkxZIDo9IEJPQVJEX1VTRVNfREVTS1RPUF9VUERBVEVfSU1BR0UKKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBFbnN1cmUgY29uc2lzdGVuY3kgYW1vbmcgVEFSR0VUX1JFQ09WRVJZX1VQREFURVJfTElCUywgQUJfT1RBX1VQREFURVIsIGFuZCBQUk9EVUNUX09UQV9GT1JDRV9OT05fQUJfUEFDS0FHRS4KIFRBUkdFVF9SRUNPVkVSWV9VUERBVEVSX0xJQlMgPz0KZGlmZiAtLWdpdCBhL2NvcmUvYm9hcmRfY29uZmlnX3dwYV9zdXBwbGljYW50Lm1rIGIvY29yZS9ib2FyZF9jb25maWdfd3BhX3N1cHBsaWNhbnQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVmNDM4ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvYm9hcmRfY29uZmlnX3dwYV9zdXBwbGljYW50Lm1rCkBAIC0wLDAgKzEsODggQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRoaXMgZmlsZSBhZGRzIHdwYV9zdXBwbGljYW50XzggdmFyaWFibGVzIGludG8gc29vbmcgY29uZmlnIG5hbWVzcGFjZSAoYHdwYV9zdXBwbGljYW50XzhgKQorIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaWZkZWYgQk9BUkRfSE9TVEFQRF9EUklWRVIKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsd3BhX3N1cHBsaWNhbnRfOCx3cGFfYnVpbGRfaG9zdGFwZCx0cnVlKQoraWZuZXEgKCQoQk9BUkRfSE9TVEFQRF9EUklWRVIpLE5MODAyMTEpCisgICAgJChlcnJvciBCT0FSRF9IT1NUQVBEX0RSSVZFUiBzZXQgdG8gJChCT0FSRF9IT1NUQVBEX0RSSVZFUikgYnV0IGN1cnJlbnQgc29vbmcgZXhwZWN0ZWQgaXQgc2hvdWxkIGJlIE5MODAyMTEgb25seSEpCitlbmRpZgorZW5kaWYKKworaWZkZWYgQk9BUkRfV1BBX1NVUFBMSUNBTlRfRFJJVkVSCitpZm5lcSAoJChCT0FSRF9XUEFfU1VQUExJQ0FOVF9EUklWRVIpLE5MODAyMTEpCisgICAgJChlcnJvciBCT0FSRF9XUEFfU1VQUExJQ0FOVF9EUklWRVIgc2V0IHRvICQoQk9BUkRfV1BBX1NVUFBMSUNBTlRfRFJJVkVSKSBidXQgY3VycmVudCBzb29uZyBleHBlY3RlZCBpdCBzaG91bGQgYmUgTkw4MDIxMSBvbmx5ISkKK2VuZGlmCitlbmRpZgorCisjIFRoaXMgaXMgZm9yIENPTkZJR19EUklWRVJfTkw4MDIxMV9CUkNNLCBDT05GSUdfRFJJVkVSX05MODAyMTFfU1lOQSwgQ09ORklHX0RSSVZFUl9OTDgwMjExX1FDQQorIyBBbmQgaXQgaXMgb25seSB1c2VkIGZvciBhIGNmbGFncyBzZXR0aW5nIGluIGRyaXZlci4KKyQoY2FsbCBzb29uZ19jb25maWdfc2V0LHdwYV9zdXBwbGljYW50XzgsYm9hcmRfd2xhbl9kZXZpY2UsJChCT0FSRF9XTEFOX0RFVklDRSkpCisKKyMgQmVsb25nIHRvIENPTkZJR19JRUVFODAyMTFBWCBkZWZpbml0aW9uCitpZmVxICgkKFdJRklfRkVBVFVSRV9IT1NUQVBEXzExQVgpLHRydWUpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLHdwYV9zdXBwbGljYW50XzgsaG9zdGFwZF8xMWF4LHRydWUpCitlbmRpZgorCisjIEJlbG9uZyB0byBDT05GSUdfSUVFRTgwMjExQkUgZGVmaW5pdGlvbgoraWZlcSAoJChXSUZJX0ZFQVRVUkVfSE9TVEFQRF8xMUJFKSx0cnVlKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCx3cGFfc3VwcGxpY2FudF84LGhvc3RhcGRfMTFiZSx0cnVlKQorZW5kaWYKKworIyBQTEFURk9STV9WRVJTSU9OCiskKGNhbGwgc29vbmdfY29uZmlnX3NldCx3cGFfc3VwcGxpY2FudF84LHBsYXRmb3JtX3ZlcnNpb24sJChQTEFURk9STV9WRVJTSU9OKSkKKworIyBCT0FSRF9IT1NUQVBEX1BSSVZBVEVfTElCCitpZmVxICgkKEJPQVJEX0hPU1RBUERfUFJJVkFURV9MSUIpLCkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsd3BhX3N1cHBsaWNhbnRfOCxob3N0YXBkX3VzZV9zdHViX2xpYix0cnVlKQorZWxzZQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXQsd3BhX3N1cHBsaWNhbnRfOCxib2FyZF9ob3N0YXBkX3ByaXZhdGVfbGliLCQoQk9BUkRfSE9TVEFQRF9QUklWQVRFX0xJQikpCitlbmRpZgorCitpZmVxICgkKEJPQVJEX0hPU1RBUERfQ09ORklHXzgwMjExV19NRlBfT1BUSU9OQUwpLHRydWUpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLHdwYV9zdXBwbGljYW50XzgsYm9hcmRfaG9zdGFwZF9jb25maWdfODAyMTF3X21mcF9vcHRpb25hbCx0cnVlKQorZW5kaWYKKworaWZuZXEgKCQoQk9BUkRfSE9TVEFQRF9QUklWQVRFX0xJQl9FVkVOVCksKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCx3cGFfc3VwcGxpY2FudF84LGJvYXJkX2hvc3RhcGRfcHJpdmF0ZV9saWJfZXZlbnQsdHJ1ZSkKK2VuZGlmCisKKyMgQk9BUkRfV1BBX1NVUFBMSUNBTlRfUFJJVkFURV9MSUIKK2lmZXEgKCQoQk9BUkRfV1BBX1NVUFBMSUNBTlRfUFJJVkFURV9MSUIpLCkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsd3BhX3N1cHBsaWNhbnRfOCx3cGFfc3VwcGxpY2FudF91c2Vfc3R1Yl9saWIsdHJ1ZSkKK2Vsc2UKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0LHdwYV9zdXBwbGljYW50XzgsYm9hcmRfd3BhX3N1cHBsaWNhbnRfcHJpdmF0ZV9saWIsJChCT0FSRF9XUEFfU1VQUExJQ0FOVF9QUklWQVRFX0xJQikpCitlbmRpZgorCitpZm5lcSAoJChCT0FSRF9XUEFfU1VQUExJQ0FOVF9QUklWQVRFX0xJQl9FVkVOVCksKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCx3cGFfc3VwcGxpY2FudF84LGJvYXJkX3dwYV9zdXBwbGljYW50X3ByaXZhdGVfbGliX2V2ZW50LHRydWUpCitlbmRpZgorCitpZmVxICgkKFdJRklfUFJJVl9DTURfVVBEQVRFX01CT19DRUxMX1NUQVRVUyksIGVuYWJsZWQpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLHdwYV9zdXBwbGljYW50Xzgsd2lmaV9wcml2X2NtZF91cGRhdGVfbWJvX2NlbGxfc3RhdHVzLHRydWUpCitlbmRpZgorCitpZmVxICgkKFdJRklfSElETF9VTklGSUVEX1NVUFBMSUNBTlRfU0VSVklDRV9SQ19FTlRSWSksIHRydWUpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLHdwYV9zdXBwbGljYW50Xzgsd2lmaV9oaWRsX3VuaWZpZWRfc3VwcGxpY2FudF9zZXJ2aWNlX3JjX2VudHJ5LHRydWUpCitlbmRpZgorCisjIE5ldyBhZGRlZCBpbiBpbnRlcm5hbCBtYWluCitpZmVxICgkKFdJRklfQlJDTV9PUEVOX1NPVVJDRV9NVUxUSV9BS00pLCBlbmFibGVkKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCx3cGFfc3VwcGxpY2FudF84LHdpZmlfYnJjbV9vcGVuX3NvdXJjZV9tdWx0aV9ha20sdHJ1ZSkKK2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL2J1aWxkX2lkLm1rIGIvY29yZS9idWlsZF9pZC5tawppbmRleCBkNTZmNjFiLi44NGNlZjhmIDEwMDY0NAotLS0gYS9jb3JlL2J1aWxkX2lkLm1rCisrKyBiL2NvcmUvYnVpbGRfaWQubWsKQEAgLTE4LDQgKzE4LDQgQEAKICMgKGxpa2UgIkNSQjAxIikuICBJdCBtdXN0IGJlIGEgc2luZ2xlIHdvcmQsIGFuZCBpcwogIyBjYXBpdGFsaXplZCBieSBjb252ZW50aW9uLgogCi1CVUlMRF9JRD1BUDRBLjI1MDIwNS4wMDIKK0JVSUxEX0lEPUJQMUEuMjUwNTA1LjAwNQpkaWZmIC0tZ2l0IGEvY29yZS9jb21iby9hcmNoL3g4Ni9hbGRlcmxha2UubWsgYi9jb3JlL2NvbWJvL2FyY2gveDg2L2FsZGVybGFrZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2FlNmVkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9jb21iby9hcmNoL3g4Ni9hbGRlcmxha2UubWsKQEAgLTAsMCArMSw2IEBACisjIENvbmZpZ3VyYXRpb24gZm9yIExpbnV4IG9uIHg4Ni4KKyMgR2VuZXJhdGluZyBiaW5hcmllcyBmb3IgcHJvY2Vzc29ycworIyB0aGF0IGhhdmUgQVZYMiBmZWF0dXJlIGZsYWcKKyMKKworQVJDSF9YODZfSEFWRV9TU0U0XzEgOj0gdHJ1ZQpkaWZmIC0tZ2l0IGEvY29yZS9jb21iby9hcmNoL3g4Nl82NC9hbGRlcmxha2UubWsgYi9jb3JlL2NvbWJvL2FyY2gveDg2XzY0L2FsZGVybGFrZS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2FlNmVkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9jb21iby9hcmNoL3g4Nl82NC9hbGRlcmxha2UubWsKQEAgLTAsMCArMSw2IEBACisjIENvbmZpZ3VyYXRpb24gZm9yIExpbnV4IG9uIHg4Ni4KKyMgR2VuZXJhdGluZyBiaW5hcmllcyBmb3IgcHJvY2Vzc29ycworIyB0aGF0IGhhdmUgQVZYMiBmZWF0dXJlIGZsYWcKKyMKKworQVJDSF9YODZfSEFWRV9TU0U0XzEgOj0gdHJ1ZQpkaWZmIC0tZ2l0IGEvY29yZS9jb25maWcubWsgYi9jb3JlL2NvbmZpZy5tawppbmRleCAyMmQxMzlkLi41ZmI3ZjhjIDEwMDY0NAotLS0gYS9jb3JlL2NvbmZpZy5taworKysgYi9jb3JlL2NvbmZpZy5tawpAQCAtMzMwLDYgKzMzMCwxOCBAQAogJChldmFsIFNPT05HX0NPTkZJR19UWVBFXyQoc3RyaXAgJDEpXyQoc3RyaXAgJDIpOj1ib29sKQogZW5kZWYKIAorIyBzb29uZ19jb25maWdfc2V0X3N0cmluZ19saXN0IGlzIHRoZSBzYW1lIGFzIHNvb25nX2NvbmZpZ19zZXQsIGJ1dCBpdCB3aWxsCisjIGFsc28gdHlwZSB0aGUgdmFyaWFibGUgYXMgYSBsaXN0IG9mIHN0cmluZ3MsIHNvIHRoYXQgd2hlbiB1c2luZyBzZWxlY3QoKSBleHByZXNzaW9ucworIyBpbiBibHVlcHJpbnQgZmlsZXMgdGhleSBjYW4gdXNlIGxpc3QgdmFsdWVzIGluc3RlYWQgb2Ygc3RyaW5ncy4KKyMgVGhlIHZhbHVlcyBvZiB0aGUgbGlzdCBtdXN0IGJlIHNwYWNlLXNlcGFyYXRlZC4KKyMgJDEgaXMgdGhlIG5hbWVzcGFjZS4gJDIgaXMgdGhlIHZhcmlhYmxlIG5hbWUuICQzIGlzIHRoZSB2YXJpYWJsZSB2YWx1ZS4KKyMgRXg6ICQoY2FsbCBzb29uZ19jb25maWdfc2V0X3N0cmluZ19saXN0LGFjbWUsQ09PTF9MSUJTLGEgYikKK2RlZmluZSBzb29uZ19jb25maWdfc2V0X3N0cmluZ19saXN0CiskKGNhbGwgc29vbmdfY29uZmlnX2RlZmluZV9pbnRlcm5hbCwkMSwkMikgXAorJChldmFsIFNPT05HX0NPTkZJR18kKHN0cmlwICQxKV8kKHN0cmlwICQyKTo9JChzdHJpcCAkMykpCiskKGV2YWwgU09PTkdfQ09ORklHX1RZUEVfJChzdHJpcCAkMSlfJChzdHJpcCAkMik6PXN0cmluZ19saXN0KQorZW5kZWYKKwogIyBzb29uZ19jb25maWdfYXBwZW5kIGFwcGVuZHMgdG8gdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBpbiB0aGUgZ2l2ZW4gU29vbmcKICMgY29uZmlnIG5hbWVzcGFjZS4gSWYgdGhlIHZhcmlhYmxlIGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGRlZmluZWQuIElmIHRoZQogIyBuYW1lc3BhY2UgZG9lcyBub3QgIGV4aXN0LCBpdCB3aWxsIGJlIGRlZmluZWQuCkBAIC00MzIsMTMgKzQ0NCw2IEBACiBlbmRpZgogLktBVElfUkVBRE9OTFkgOj0gVEFSR0VUX01BWF9QQUdFX1NJWkVfU1VQUE9SVEVECiAKLWlmZGVmIFBST0RVQ1RfQ0hFQ0tfUFJFQlVJTFRfTUFYX1BBR0VfU0laRQotICBUQVJHRVRfQ0hFQ0tfUFJFQlVJTFRfTUFYX1BBR0VfU0laRSA6PSAkKFBST0RVQ1RfQ0hFQ0tfUFJFQlVJTFRfTUFYX1BBR0VfU0laRSkKLWVsc2UKLSAgVEFSR0VUX0NIRUNLX1BSRUJVSUxUX01BWF9QQUdFX1NJWkUgOj0gZmFsc2UKLWVuZGlmCi0uS0FUSV9SRUFET05MWSA6PSBUQVJHRVRfQ0hFQ0tfUFJFQlVJTFRfTUFYX1BBR0VfU0laRQotCiAjIEJvb2xlYW4gdmFyaWFibGUgZGV0ZXJtaW5pbmcgaWYgQU9TUCByZWxpZXMgb24gYmlvbmljJ3MgUEFHRV9TSVpFIG1hY3JvLgogaWZkZWYgUFJPRFVDVF9OT19CSU9OSUNfUEFHRV9TSVpFX01BQ1JPCiAgIFRBUkdFVF9OT19CSU9OSUNfUEFHRV9TSVpFX01BQ1JPIDo9ICQoUFJPRFVDVF9OT19CSU9OSUNfUEFHRV9TSVpFX01BQ1JPKQpAQCAtODE5LDYgKzgyNCwxOCBAQAogICBlbmRpZgogZW5kaWYKIAoraWZkZWYgUFJPRFVDVF9DSEVDS19QUkVCVUlMVF9NQVhfUEFHRV9TSVpFCisgIFRBUkdFVF9DSEVDS19QUkVCVUlMVF9NQVhfUEFHRV9TSVpFIDo9ICQoUFJPRFVDVF9DSEVDS19QUkVCVUlMVF9NQVhfUEFHRV9TSVpFKQorZWxzZSBpZmVxICh0cnVlLCQoVEFSR0VUX0JVSUxEX1VOQlVORExFRCkpCisgICMgdW5idW5kbGVkIGJ1aWxkcyBtYXkgbm90IGhhdmUgdXBkYXRlZCBidWlsZCBzb3VyY2VzCisgIFRBUkdFVF9DSEVDS19QUkVCVUlMVF9NQVhfUEFHRV9TSVpFIDo9IGZhbHNlCitlbHNlIGlmbmVxICgkKGNhbGwgbWF0aF9ndF9vcl9lcSwkKFBST0RVQ1RfU0hJUFBJTkdfQVBJX0xFVkVMKSwzNiksKQorICBUQVJHRVRfQ0hFQ0tfUFJFQlVJTFRfTUFYX1BBR0VfU0laRSA6PSB0cnVlCitlbHNlCisgIFRBUkdFVF9DSEVDS19QUkVCVUlMVF9NQVhfUEFHRV9TSVpFIDo9IGZhbHNlCitlbmRpZgorLktBVElfUkVBRE9OTFkgOj0gVEFSR0VUX0NIRUNLX1BSRUJVSUxUX01BWF9QQUdFX1NJWkUKKwogIyBTZXQgQk9BUkRfU1lTVEVNU0RLX1ZFUlNJT05TIHRvIHRoZSBsYXRlc3QgU3lzdGVtU0RLIHZlcnNpb24gc3RhcnRpbmcgZnJvbSBQLWxhdW5jaGluZwogIyBkZXZpY2VzIGlmIHVuc2V0LgogaWZuZGVmIEJPQVJEX1NZU1RFTVNES19WRVJTSU9OUwpAQCAtODQxLDEyICs4NTgsNiBAQAogLktBVElfUkVBRE9OTFkgOj0gQk9BUkRfQ1VSUkVOVF9BUElfTEVWRUxfRk9SX1ZFTkRPUl9NT0RVTEVTCiAKIGlmZGVmIFBST0RVQ1RfU0hJUFBJTkdfQVBJX0xFVkVMCi0gIGJvYXJkX2FwaV9sZXZlbCA6PSAkKGZpcnN0d29yZCAkKEJPQVJEX0FQSV9MRVZFTCkgJChCT0FSRF9TSElQUElOR19BUElfTEVWRUwpKQotICBpZm5lcSAoLCQoYm9hcmRfYXBpX2xldmVsKSkKLSAgICBtaW5fc3lzdGVtc2RrX3ZlcnNpb24gOj0gJChjYWxsIG1hdGhfbWluLCQoYm9hcmRfYXBpX2xldmVsKSwkKFBST0RVQ1RfU0hJUFBJTkdfQVBJX0xFVkVMKSkKLSAgZWxzZQotICAgIG1pbl9zeXN0ZW1zZGtfdmVyc2lvbiA6PSAkKFBST0RVQ1RfU0hJUFBJTkdfQVBJX0xFVkVMKQotICBlbmRpZgogICBpZm5lcSAoJChjYWxsIG1hdGhfZ3Rfb3JfZXEsJChQUk9EVUNUX1NISVBQSU5HX0FQSV9MRVZFTCksMjkpLCkKICAgICBpZm5lcSAoJChCT0FSRF9PVEFfRlJBTUVXT1JLX1ZCTUVUQV9WRVJTSU9OX09WRVJSSURFKSwpCiAgICAgICAkKGVycm9yIFdoZW4gUFJPRFVDVF9TSElQUElOR19BUElfTEVWRUwgPj0gMjksIEJPQVJEX09UQV9GUkFNRVdPUktfVkJNRVRBX1ZFUlNJT05fT1ZFUlJJREUgY2Fubm90IGJlIHNldCkKQEAgLTg5OSw2ICs5MTAsMTEgQEAKICAgICBQTEFURk9STV9TRVBPTElDWV9DT01QQVRfVkVSU0lPTlMgXAogICAgIFBMQVRGT1JNX1NFUE9MSUNZX1ZFUlNJT04gXAogCitCT0FSRF9HRU5GU19MQUJFTFNfVkVSU0lPTiA/PSAkKEJPQVJEX0FQSV9MRVZFTCkKK2lmZXEgKCQoY2FsbCBtYXRoX2d0LCQoQk9BUkRfQVBJX0xFVkVMKSwkKEJPQVJEX0dFTkZTX0xBQkVMU19WRVJTSU9OKSksdHJ1ZSkKKyAgJChlcnJvciBCT0FSRF9HRU5GU19MQUJFTFNfVkVSU0lPTiAoJChCT0FSRF9HRU5GU19MQUJFTFNfVkVSU0lPTikpIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIEJPQVJEX0FQSV9MRVZFTCAoJChCT0FSRF9BUElfTEVWRUwpKSkKK2VuZGlmCisKIGlmZXEgKCQoUFJPRFVDVF9SRVRST0ZJVF9EWU5BTUlDX1BBUlRJVElPTlMpLHRydWUpCiAgIGlmbmVxICgkKFBST0RVQ1RfVVNFX0RZTkFNSUNfUEFSVElUSU9OUyksdHJ1ZSkKICAgICAkKGVycm9yIFBST0RVQ1RfVVNFX0RZTkFNSUNfUEFSVElUSU9OUyBtdXN0IGJlIHRydWUgd2hlbiBQUk9EVUNUX1JFVFJPRklUX0RZTkFNSUNfUEFSVElUSU9OUyBcCkBAIC0xMzA3LDEwICsxMzIzLDYgQEAKIFNPT05HX1ZBUklBQkxFUyA6PQogU09PTkdfRVhUUkFfVkFSSUFCTEVTIDo9CiAKLS1pbmNsdWRlIGV4dGVybmFsL2x0cC9hbmRyb2lkL2x0cF9wYWNrYWdlX2xpc3QubWsKLURFRkFVTFRfREFUQV9PVVRfTU9EVUxFUyA6PSBsdHAgJChsdHBfcGFja2FnZXMpCi0uS0FUSV9SRUFET05MWSA6PSBERUZBVUxUX0RBVEFfT1VUX01PRFVMRVMKLQogIyBSdWxlcyBmb3IgUUNPTSB0YXJnZXRzCiBpbmNsdWRlIHZlbmRvci9vbW5pL2J1aWxkL2NvcmUvcWNvbV90YXJnZXQubWsKIApkaWZmIC0tZ2l0IGEvY29yZS9kZWZpbml0aW9ucy5tayBiL2NvcmUvZGVmaW5pdGlvbnMubWsKaW5kZXggYTFiZGRkYi4uMTZkYjRiZiAxMDA2NDQKLS0tIGEvY29yZS9kZWZpbml0aW9ucy5taworKysgYi9jb3JlL2RlZmluaXRpb25zLm1rCkBAIC0yNjA1LDcgKzI2MDUsODcgQEAKICAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMDg1MDEsMTA5MDAwLCQoMSkpLCQoMikpCiAgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTA5MDAxLDEwOTUwMCwkKDEpKSwkKDIpKQogICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEwOTUwMSwxMTAwMDAsJCgxKSksJCgyKSkKLSAgICAgICAgQCQoaWYgJCh3b3JkbGlzdCAxMTAwMDEsMTEwMDAyLCQoMSkpLCQoZXJyb3IgZHVtcC13b3Jkcy10by1maWxlOiBUb28gbWFueSB3b3JkcyAoJCh3b3JkcyAkKDEpKSkpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDExMDAwMSwxMTA1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMTA1MDEsMTExMDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTExMDAxLDExMTUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDExMTUwMSwxMTIwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMTIwMDEsMTEyNTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTEyNTAxLDExMzAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDExMzAwMSwxMTM1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMTM1MDEsMTE0MDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTE0MDAxLDExNDUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDExNDUwMSwxMTUwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMTUwMDEsMTE1NTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTE1NTAxLDExNjAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDExNjAwMSwxMTY1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMTY1MDEsMTE3MDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTE3MDAxLDExNzUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDExNzUwMSwxMTgwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMTgwMDEsMTE4NTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTE4NTAxLDExOTAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDExOTAwMSwxMTk1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMTk1MDEsMTIwMDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTIwMDAxLDEyMDUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEyMDUwMSwxMjEwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMjEwMDEsMTIxNTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTIxNTAxLDEyMjAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEyMjAwMSwxMjI1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMjI1MDEsMTIzMDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTIzMDAxLDEyMzUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEyMzUwMSwxMjQwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMjQwMDEsMTI0NTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTI0NTAxLDEyNTAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEyNTAwMSwxMjU1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMjU1MDEsMTI2MDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTI2MDAxLDEyNjUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEyNjUwMSwxMjcwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMjcwMDEsMTI3NTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTI3NTAxLDEyODAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEyODAwMSwxMjg1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMjg1MDEsMTI5MDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTI5MDAxLDEyOTUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEyOTUwMSwxMzAwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMzAwMDEsMTMwNTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTMwNTAxLDEzMTAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEzMTAwMSwxMzE1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMzE1MDEsMTMyMDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTMyMDAxLDEzMjUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEzMjUwMSwxMzMwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMzMwMDEsMTMzNTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTMzNTAxLDEzNDAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEzNDAwMSwxMzQ1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMzQ1MDEsMTM1MDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTM1MDAxLDEzNTUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEzNTUwMSwxMzYwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMzYwMDEsMTM2NTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTM2NTAxLDEzNzAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEzNzAwMSwxMzc1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMzc1MDEsMTM4MDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTM4MDAxLDEzODUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEzODUwMSwxMzkwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMzkwMDEsMTM5NTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTM5NTAxLDE0MDAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDE0MDAwMSwxNDA1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxNDA1MDEsMTQxMDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTQxMDAxLDE0MTUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDE0MTUwMSwxNDIwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxNDIwMDEsMTQyNTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTQyNTAxLDE0MzAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDE0MzAwMSwxNDM1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxNDM1MDEsMTQ0MDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTQ0MDAxLDE0NDUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDE0NDUwMSwxNDUwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxNDUwMDEsMTQ1NTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTQ1NTAxLDE0NjAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDE0NjAwMSwxNDY1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxNDY1MDEsMTQ3MDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTQ3MDAxLDE0NzUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDE0NzUwMSwxNDgwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxNDgwMDEsMTQ4NTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTQ4NTAxLDE0OTAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDE0OTAwMSwxNDk1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxNDk1MDEsMTUwMDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGlmICQod29yZGxpc3QgMTUwMDAxLDE1MDAwMiwkKDEpKSwkKGVycm9yIGR1bXAtd29yZHMtdG8tZmlsZTogVG9vIG1hbnkgd29yZHMgKCQod29yZHMgJCgxKSkpKSkKIGVuZGVmCiAjIFJldHVybiBqYXIgYXJndW1lbnRzIHRvIGNvbXByZXNzIGZpbGVzIGluIGEgZ2l2ZW4gZGlyZWN0b3J5CiAjICQoMSk6IGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9kZXhfcHJlb3B0Lm1rIGIvY29yZS9kZXhfcHJlb3B0Lm1rCmluZGV4IDkwNmQ3ZjAuLjg4ZTBjYzcgMTAwNjQ0Ci0tLSBhL2NvcmUvZGV4X3ByZW9wdC5taworKysgYi9jb3JlL2RleF9wcmVvcHQubWsKQEAgLTEzLDI4ICsxMyw2IEBACiBpbnN0YWxsLW9uLXN5c3RlbS1vdGhlciA9ICQoZmlsdGVyLW91dCAkKFBST0RVQ1RfREVYUFJFT1BUX1NQRUVEX0FQUFMpICQoUFJPRFVDVF9TWVNURU1fU0VSVkVSX0FQUFMpLCQoYmFzZW5hbWUgJChub3RkaXIgJChmaWx0ZXIgJChmb3JlYWNoIGYsJChTWVNURU1fT1RIRVJfT0RFWF9GSUxURVIpLCQoVEFSR0VUX09VVCkvJChmKSksJCgxKSkpKSkKIGVuZGlmCiAKLSMgSW5zdGFsbCBib290IGltYWdlcyBmb3IgdGVzdGluZyBvbiBob3N0LiBXZSBleGNsdWRlIGZyYW1ld29yayBpbWFnZSBhcyBpdCBpcyBub3QgcGFydCBvZiBhcnQgbWFuaWZlc3QuCi1teV9ib290X2ltYWdlX2FyY2ggOj0gSE9TVF9BUkNICi1teV9ib290X2ltYWdlX291dCA6PSAkKEhPU1RfT1VUKQotbXlfYm9vdF9pbWFnZV9zeW1zIDo9ICQoSE9TVF9PVVQpL3N5bWJvbHMKLUhPU1RfQk9PVF9JTUFHRV9NT0RVTEUgOj0gXAotICAkKGZvcmVhY2ggbXlfYm9vdF9pbWFnZV9uYW1lLGFydF9ob3N0LCQoc3RyaXAgXAotICAgICQoZXZhbCBpbmNsdWRlICQoQlVJTERfU1lTVEVNKS9kZXhfcHJlb3B0X2xpYmFydC5taykgXAotICAgICQobXlfYm9vdF9pbWFnZV9tb2R1bGUpKSkKLUhPU1RfQk9PVF9JTUFHRSA6PSAkKGNhbGwgbW9kdWxlLWluc3RhbGxlZC1maWxlcywkKEhPU1RfQk9PVF9JTUFHRV9NT0RVTEUpKQotaWZkZWYgSE9TVF8yTkRfQVJDSAotICBteV9ib290X2ltYWdlX2FyY2ggOj0gSE9TVF8yTkRfQVJDSAotICAyTkRfSE9TVF9CT09UX0lNQUdFX01PRFVMRSA6PSBcCi0gICAgJChmb3JlYWNoIG15X2Jvb3RfaW1hZ2VfbmFtZSxhcnRfaG9zdCwkKHN0cmlwIFwKLSAgICAgICQoZXZhbCBpbmNsdWRlICQoQlVJTERfU1lTVEVNKS9kZXhfcHJlb3B0X2xpYmFydC5taykgXAotICAgICAgJChteV9ib290X2ltYWdlX21vZHVsZSkpKQotICAyTkRfSE9TVF9CT09UX0lNQUdFIDo9ICQoY2FsbCBtb2R1bGUtaW5zdGFsbGVkLWZpbGVzLCQoMk5EX0hPU1RfQk9PVF9JTUFHRV9NT0RVTEUpKQotZW5kaWYKLW15X2Jvb3RfaW1hZ2VfYXJjaCA6PQotbXlfYm9vdF9pbWFnZV9vdXQgOj0KLW15X2Jvb3RfaW1hZ2Vfc3ltcyA6PQotbXlfYm9vdF9pbWFnZV9tb2R1bGUgOj0KLQogIyBCdWlsZCB0aGUgYm9vdC56aXAgd2hpY2ggY29udGFpbnMgdGhlIGJvb3QgamFycyBhbmQgdGhlaXIgY29tcGlsYXRpb24gb3V0cHV0CiAjIFdlIGNhbiBkbyB0aGlzIG9ubHkgaWYgcHJlb3B0IGlzIGVuYWJsZWQgYW5kIGlmIHRoZSBwcm9kdWN0IHVzZXMgbGliYXJ0IGNvbmZpZyAod2hpY2ggc2V0cyB0aGUKICMgZGVmYXVsdCBwcm9wZXJ0aWVzIGZvciBwcmVvcHRpbmcpLgpkaWZmIC0tZ2l0IGEvY29yZS9kZXhfcHJlb3B0X2xpYmFydC5tayBiL2NvcmUvZGV4X3ByZW9wdF9saWJhcnQubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyYzk5NDIuLjAwMDAwMDAKLS0tIGEvY29yZS9kZXhfcHJlb3B0X2xpYmFydC5taworKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQVJUIGJvb3QgaW1hZ2UgaW5zdGFsbGF0aW9uCi0jIElucHV0IHZhcmlhYmxlczoKLSMgICBteV9ib290X2ltYWdlX25hbWU6IHRoZSBib290IGltYWdlIHRvIGluc3RhbGwKLSMgICBteV9ib290X2ltYWdlX2FyY2g6IHRoZSBhcmNoaXRlY3R1cmUgdG8gaW5zdGFsbCAoZS5nLiBUQVJHRVRfQVJDSCwgbm90IGV4cGFuZGVkKQotIyAgIG15X2Jvb3RfaW1hZ2Vfb3V0OiAgdGhlIGluc3RhbGwgZGlyZWN0b3J5IChlLmcuICQoUFJPRFVDVF9PVVQpKQotIyAgIG15X2Jvb3RfaW1hZ2Vfc3ltczogdGhlIHN5bWJvbHMgZGlyZWN0b3IgKGUuZy4gJChUQVJHRVRfT1VUX1VOU1RSSVBQRUQpKQotIwotIyBPdXRwdXQgdmFyaWFibGVzOgotIyAgIG15X2Jvb3RfaW1hZ2VfbW9kdWxlOiB0aGUgY3JlYXRlZCBtb2R1bGUgbmFtZS4gRW1wdHkgaWYgbm8gbW9kdWxlIGlzIGNyZWF0ZWQuCi0jCi0jIEluc3RhbGwgdGhlIGJvb3QgaW1hZ2VzIGNvbXBpbGVkIGJ5IFNvb25nLgotIyBDcmVhdGUgYSBtb2R1bGUgbmFtZWQgZGV4cHJlb3B0X2Jvb3RqYXIuJChteV9ib290X2ltYWdlX25hbWUpXyQoJChteV9ib290X2ltYWdlX2FyY2gpKQotIyB0aGF0IGluc3RhbGxzIGFsbCBvZiBib290IGltYWdlIGZpbGVzLgotIyBJZiB0aGVyZSBpcyBubyBmaWxlIHRvIGluc3RhbGwgZm9yICQobXlfYm9vdF9pbWFnZV9uYW1lKSwgZm9yIGV4YW1wbGUgd2hlbgotIyBidWlsZGluZyBhbiB1bmJ1bmRsZWQgYnVpbGQsIHRoZW4gbm8gbW9kdWxlIGlzIGNyZWF0ZWQuCi0jCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBUYWtlcyBhIGxpc3Qgb2Ygc3JjOmRlc3QgaW5zdGFsbCBwYWlycyBhbmQgcmV0dXJucyBhIG5ldyBsaXN0IHdpdGggYSBwYXRoCi0jIHByZWZpeGVkIHRvIGVhY2ggZGVzdCB2YWx1ZS4KLSMgJCgxKTogbGlzdCBvZiBzcmM6ZGVzdCBpbnN0YWxsIHBhaXJzCi0jICQoMik6IHBhdGggdG8gcHJlZml4IHRvIGVhY2ggZGVzdCB2YWx1ZQotZGVmaW5lIHByZWZpeC1jb3B5LW1hbnktZmlsZXMtZGVzdAotJChmb3JlYWNoIHYsJCgxKSwkKGNhbGwgd29yZC1jb2xvbiwxLCQodikpOiQoMikkKGNhbGwgd29yZC1jb2xvbiwyLCQodikpKQotZW5kZWYKLQotIyBDb252ZXJ0cyBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgdmRleCBwYXRoIGludG8gYSBsb2NhdGlvbiB0aGF0IGNhbiBiZSBzaGFyZWQKLSMgYmV0d2VlbiBhcmNoaXRlY3R1cmVzLgotZGVmaW5lIHZkZXgtc2hhcmVkLWluc3RhbGwtcGF0aAotJChkaXIgJChwYXRzdWJzdCAlLywlLCQoZGlyICQoMSkpKSkkKG5vdGRpciAkKDEpKQotZW5kZWYKLQotIyBUYWtlcyBhIGxpc3Qgb2Ygc3JjOmRlc3QgaW5zdGFsbCBwYWlycyBvZiB2ZGV4IGZpbGVzIGFuZCByZXR1cm5zIGEgbmV3IGxpc3QKLSMgd2hlcmUgZWFjaCBkZXN0IGhhcyBiZWVuIHJld3JpdHRlbiB0byB0aGUgc2hhcmVkIGxvY2F0aW9uIGZvciB2ZGV4IGZpbGVzLgotZGVmaW5lIHZkZXgtY29weS1tYW55LWZpbGVzLXNoYXJlZC1kZXN0Ci0kKGZvcmVhY2ggdiwkKDEpLCQoY2FsbCB3b3JkLWNvbG9uLDEsJCh2KSk6JChjYWxsIHZkZXgtc2hhcmVkLWluc3RhbGwtcGF0aCwkKGNhbGwgd29yZC1jb2xvbiwyLCQodikpKSkKLWVuZGVmCi0KLSMgQ3JlYXRlcyBhIHJ1bGUgdG8gc3ltbGluayBhbiBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgdmRleCBmaWxlIHRvIHRoZSBzaGFyZWQKLSMgbG9jYXRpb24gZm9yIHRoYXQgdmRleCBmaWxlLgotZGVmaW5lIHN5bWxpbmstdmRleC1maWxlCi0kKHN0cmlwIFwKLSAgJChjYWxsIHN5bWxpbmstZmlsZSxcCi0gICAgJChjYWxsIHZkZXgtc2hhcmVkLWluc3RhbGwtcGF0aCwkKDEpKSxcCi0gICAgLi4vJChub3RkaXIgJCgxKSksXAotICAgICQoMSkpXAotICAkKDEpKQotZW5kZWYKLQotIyBUYWtlcyBhIGxpc3Qgb2Ygc3JjOmRlc3QgaW5zdGFsbCBwYWlycyBvZiB2ZGV4IGZpbGVzIGFuZCBjcmVhdGVzIHJ1bGVzIHRvCi0jIHN5bWxpbmsgZWFjaCBkZXN0IHRvIHRoZSBzaGFyZWQgbG9jYXRpb24gZm9yIHRoYXQgdmRleCBmaWxlLgotZGVmaW5lIHN5bWxpbmstdmRleC1maWxlcwotJChmb3JlYWNoIHYsJCgxKSwkKGNhbGwgc3ltbGluay12ZGV4LWZpbGUsJChjYWxsIHdvcmQtY29sb24sMiwkKHYpKSkpCi1lbmRlZgotCi1teV9ib290X2ltYWdlX21vZHVsZSA6PQotCi1teV9zdWZmaXggOj0gJChteV9ib290X2ltYWdlX25hbWUpXyQoJChteV9ib290X2ltYWdlX2FyY2gpKQotbXlfY29weV9wYWlycyA6PSAkKGNhbGwgcHJlZml4LWNvcHktbWFueS1maWxlcy1kZXN0LCQoREVYUFJFT1BUX0lNQUdFX0JVSUxUX0lOU1RBTExFRF8kKG15X3N1ZmZpeCkpLCQobXlfYm9vdF9pbWFnZV9vdXQpKQotbXlfdmRleF9jb3B5X3BhaXJzIDo9ICQoY2FsbCBwcmVmaXgtY29weS1tYW55LWZpbGVzLWRlc3QsJChERVhQUkVPUFRfSU1BR0VfVkRFWF9CVUlMVF9JTlNUQUxMRURfJChteV9zdWZmaXgpKSwkKG15X2Jvb3RfaW1hZ2Vfb3V0KSkKLW15X3ZkZXhfY29weV9zaGFyZWRfcGFpcnMgOj0gJChjYWxsIHZkZXgtY29weS1tYW55LWZpbGVzLXNoYXJlZC1kZXN0LCQobXlfdmRleF9jb3B5X3BhaXJzKSkKLWlmZXEgKCwkKGZpbHRlciAlXzJORF9BUkNILCQobXlfYm9vdF9pbWFnZV9hcmNoKSkpCi0gICMgT25seSBpbnN0YWxsIHRoZSB2ZGV4IHRvIHRoZSBzaGFyZWQgbG9jYXRpb24gZm9yIHRoZSBwcmltYXJ5IGFyY2hpdGVjdHVyZS4KLSAgbXlfY29weV9wYWlycyArPSAkKG15X3ZkZXhfY29weV9zaGFyZWRfcGFpcnMpCi1lbmRpZgotCi1teV91bnN0cmlwcGVkX2NvcHlfcGFpcnMgOj0gJChjYWxsIHByZWZpeC1jb3B5LW1hbnktZmlsZXMtZGVzdCwkKERFWFBSRU9QVF9JTUFHRV9VTlNUUklQUEVEX0JVSUxUX0lOU1RBTExFRF8kKG15X3N1ZmZpeCkpLCQobXlfYm9vdF9pbWFnZV9zeW1zKSkKLQotIyBHZW5lcmF0ZSB0aGUgYm9vdCBpbWFnZSBtb2R1bGUgb25seSBpZiB0aGVyZSBpcyBhbnkgZmlsZSB0byBpbnN0YWxsLgotaWZuZXEgKCwkKHN0cmlwICQobXlfY29weV9wYWlycykpKQotICBteV9maXJzdF9wYWlyIDo9ICQoZmlyc3R3b3JkICQobXlfY29weV9wYWlycykpCi0gIG15X3Jlc3RfcGFpcnMgOj0gJCh3b3JkbGlzdCAyLCQod29yZHMgJChteV9jb3B5X3BhaXJzKSksJChteV9jb3B5X3BhaXJzKSkKLQotICBteV9maXJzdF9zcmMgOj0gJChjYWxsIHdvcmQtY29sb24sMSwkKG15X2ZpcnN0X3BhaXIpKQotICBteV9maXJzdF9kZXN0IDo9ICQoY2FsbCB3b3JkLWNvbG9uLDIsJChteV9maXJzdF9wYWlyKSkKLQotICBteV9pbnN0YWxsZWQgOj0gJChjYWxsIGNvcHktbWFueS1maWxlcywkKG15X2NvcHlfcGFpcnMpKQotICBteV91bnN0cmlwcGVkX2luc3RhbGxlZCA6PSAkKGNhbGwgY29weS1tYW55LWZpbGVzLCQobXlfdW5zdHJpcHBlZF9jb3B5X3BhaXJzKSkKLQotICBteV9zeW1saW5rcyA6PSAkKGNhbGwgc3ltbGluay12ZGV4LWZpbGVzLCQobXlfdmRleF9jb3B5X3BhaXJzKSkKLQotICAjIFdlIGRvbid0IGhhdmUgYSBMT0NBTF9QQVRIIGZvciB0aGUgYXV0by1nZW5lcmF0ZWQgbW9kdWxlcywgc28gbGV0IGl0IGJlIHRoZSAkKEJVSUxEX1NZU1RFTSkuCi0gIExPQ0FMX1BBVEggOj0gJChCVUlMRF9TWVNURU0pCi0gICMgSGFjayB0byBsZXQgdGhlc2UgcHNldWRvLW1vZHVsZXMgd3JhcHBlZCBhcm91bmQgU29vbmcgbW9kdWxlcyB1c2UgTE9DQUxfU09PTkdfSU5TVEFMTEVEX01PRFVMRS4KLSAgTE9DQUxfTU9EVUxFX01BS0VGSUxFIDo9ICQoU09PTkdfQU5EUk9JRF9NSykKLQotICBpbmNsdWRlICQoQ0xFQVJfVkFSUykKLSAgTE9DQUxfTU9EVUxFIDo9IGRleHByZW9wdF9ib290amFyLiQobXlfc3VmZml4KQotICBMT0NBTF9QUkVCVUlMVF9NT0RVTEVfRklMRSA6PSAkKG15X2ZpcnN0X3NyYykKLSAgTE9DQUxfTU9EVUxFX1BBVEggOj0gJChkaXIgJChteV9maXJzdF9kZXN0KSkKLSAgTE9DQUxfTU9EVUxFX1NURU0gOj0gJChub3RkaXIgJChteV9maXJzdF9kZXN0KSkKLSAgTE9DQUxfU09PTkdfSU5TVEFMTF9QQUlSUyA6PSAkKG15X2NvcHlfcGFpcnMpCi0gIExPQ0FMX1NPT05HX0lOU1RBTExfU1lNTElOS1MgOj0gJChteV9zeW1saW5rcykKLSAgTE9DQUxfU09PTkdfSU5TVEFMTEVEX01PRFVMRSA6PSAkKG15X2ZpcnN0X2Rlc3QpCi0gIExPQ0FMX1NPT05HX0xJQ0VOU0VfTUVUQURBVEEgOj0gJChERVhQUkVPUFRfSU1BR0VfTElDRU5TRV9NRVRBREFUQV8kKG15X3N1ZmZpeCkpCi0gIGlmbmVxICgsJChzdHJpcCAkKGZpbHRlciBIT1NUXyUsJChteV9ib290X2ltYWdlX2FyY2gpKSkpCi0gICAgTE9DQUxfSVNfSE9TVF9NT0RVTEUgOj0gdHJ1ZQotICBlbmRpZgotICBMT0NBTF9NT0RVTEVfQ0xBU1MgOj0gRVRDCi0gIGluY2x1ZGUgJChCVUlMRF9QUkVCVUlMVCkKLSAgJChMT0NBTF9CVUlMVF9NT0RVTEUpOiB8ICQobXlfdW5zdHJpcHBlZF9pbnN0YWxsZWQpCi0gICMgSW5zdGFsbGluZyBib290LmFydCBjYXVzZXMgYWxsIGJvb3QgaW1hZ2UgYml0cyB0byBiZSBpbnN0YWxsZWQuCi0gICMgS2VlcCB0aGlzIG9sZCBiZWhhdmlvciBpbiBjYXNlIGFueW9uZSBzdGlsbCBuZWVkcyBpdC4KLSAgJChMT0NBTF9JTlNUQUxMRURfTU9EVUxFKTogJCh3b3JkbGlzdCAyLCQod29yZHMgJChteV9pbnN0YWxsZWQpKSwkKG15X2luc3RhbGxlZCkpICQobXlfc3ltbGlua3MpCi0gICQobXlfYWxsX3RhcmdldHMpOiAkKG15X2luc3RhbGxlZCkgJChteV9zeW1saW5rcykKLQotICBteV9ib290X2ltYWdlX21vZHVsZSA6PSAkKExPQ0FMX01PRFVMRSkKLWVuZGlmICAjIG15X2NvcHlfcGFpcnMgIT0gZW1wdHkKZGlmZiAtLWdpdCBhL2NvcmUvamF2YV9jb21tb24ubWsgYi9jb3JlL2phdmFfY29tbW9uLm1rCmluZGV4IGEyMWYwNjIuLmY1NzRiNzYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YV9jb21tb24ubWsKKysrIGIvY29yZS9qYXZhX2NvbW1vbi5tawpAQCAtMzIsNyArMzIsNyBAQAogICAgIGVsc2UgaWZuZXEgKCwkKExPQ0FMX1NES19WRVJTSU9OKSQoVEFSR0VUX0JVSUxEX1VTRV9QUkVCVUlMVF9TREtTKSkKICAgICAgICMgVE9ETyhjY3Jvc3MpOiBhbGxvdyAxLjkgZm9yIGN1cnJlbnQgYW5kIHVuYnVuZGxlZCBvbmNlIHdlIGhhdmUgU0RLIHN5c3RlbSBtb2R1bGVzCiAgICAgICBMT0NBTF9KQVZBX0xBTkdVQUdFX1ZFUlNJT04gOj0gMS44Ci0gICAgZWxzZSBpZmVxICgkKEVYUEVSSU1FTlRBTF9UQVJHRVRfSkFWQV9WRVJTSU9OXzIxKSx0cnVlKQorICAgIGVsc2UgaWZlcSAoJChSRUxFQVNFX1RBUkdFVF9KQVZBXzIxKSx0cnVlKQogICAgICAgTE9DQUxfSkFWQV9MQU5HVUFHRV9WRVJTSU9OIDo9IDIxCiAgICAgZWxzZQogICAgICAgTE9DQUxfSkFWQV9MQU5HVUFHRV9WRVJTSU9OIDo9IDE3CmRpZmYgLS1naXQgYS9jb3JlL2xheW91dGxpYl9kYXRhLm1rIGIvY29yZS9sYXlvdXRsaWJfZGF0YS5tawppbmRleCBlNDIwYTAwLi5mMjI4ZWY2IDEwMDY0NAotLS0gYS9jb3JlL2xheW91dGxpYl9kYXRhLm1rCisrKyBiL2NvcmUvbGF5b3V0bGliX2RhdGEubWsKQEAgLTMsMTEgKzMsMTAgQEAKIEZPTlRfVEVNUCA6PSAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLFBBQ0tBR0lORyxmb250cyxIT1NULENPTU1PTikKIAogIyBUaGUgZm9udCBjb25maWd1cmF0aW9uIGZpbGVzIC0gc3lzdGVtX2ZvbnRzLnhtbCwgZmFsbGJhY2tfZm9udHMueG1sIGV0Yy4KLWZvbnRfY29uZmlnIDo9ICQoc29ydCAkKHdpbGRjYXJkIGZyYW1ld29ya3MvYmFzZS9kYXRhL2ZvbnRzLyoueG1sKSkKK2ZvbnRfY29uZmlnIDo9ICQoZmlsdGVyICQoVEFSR0VUX09VVCkvZXRjL2ZvbnQlLnhtbCwgJChJTlRFUk5BTF9TWVNURU1JTUFHRV9GSUxFUykpCiBmb250X2NvbmZpZyA6PSAkKGFkZHByZWZpeCAkKEZPTlRfVEVNUCkvLCAkKG5vdGRpciAkKGZvbnRfY29uZmlnKSkpCiAKLSQoZm9udF9jb25maWcpOiAkKEZPTlRfVEVNUCkvJS54bWw6IFwKLQkJCWZyYW1ld29ya3MvYmFzZS9kYXRhL2ZvbnRzLyUueG1sCiskKGZvbnRfY29uZmlnKTogJChGT05UX1RFTVApLyU6ICQoVEFSR0VUX09VVCkvZXRjLyUKIAkkKGhpZGUpIG1rZGlyIC1wICQoZGlyICRAKQogCSQoaGlkZSkgY3AgLXZmICQ8ICRACiAKQEAgLTMxLDggKzMwLDE4IEBACiAJJChoaWRlKSBta2RpciAtcCAkKGRpciAkQCkKIAkkKGhpZGUpIGNwIC12ZiAkPCAkQAogCi0jIExpc3Qgb2YgYWxsIGRhdGEgZmlsZXMgLSBmb250IGZpbGVzLCBmb250IGNvbmZpZ3VyYXRpb24gZmlsZXMsIGtleSBjaGFyYWN0ZXIgbWFwIGZpbGVzCi1MQVlPVVRMSUJfRklMRVMgOj0gJChmb250c19kZXZpY2UpICQoZm9udF9jb25maWcpICQoa2V5Ym9hcmRzKQorSFlQSEVOX1RFTVAgOj0gJChjYWxsIGludGVybWVkaWF0ZXMtZGlyLWZvcixQQUNLQUdJTkcsaHlwaGVuLEhPU1QsQ09NTU9OKQorCisjIFRoZSBoeXBoZW5hdGlvbiBwYXR0ZXJuIGZpbGVzIG5lZWRlZCB0byBzdXBwb3J0IHRleHQgaHlwaGVuYXRpb24KK2h5cGhlbiA6PSAkKGZpbHRlciAkKFRBUkdFVF9PVVQpL3Vzci9oeXBoZW4tZGF0YS8lLmh5YiwgJChJTlRFUk5BTF9TWVNURU1JTUFHRV9GSUxFUykpCitoeXBoZW4gOj0gJChhZGRwcmVmaXggJChIWVBIRU5fVEVNUCkvLCAkKG5vdGRpciAkKGh5cGhlbikpKQorCiskKGh5cGhlbik6ICQoSFlQSEVOX1RFTVApLyU6ICQoVEFSR0VUX09VVCkvdXNyL2h5cGhlbi1kYXRhLyUKKwkkKGhpZGUpIG1rZGlyIC1wICQoZGlyICRAKQorCSQoaGlkZSkgY3AgLXZmICQ8ICRACisKKyMgTGlzdCBvZiBhbGwgZGF0YSBmaWxlcyAtIGZvbnQgZmlsZXMsIGZvbnQgY29uZmlndXJhdGlvbiBmaWxlcywga2V5IGNoYXJhY3RlciBtYXAgZmlsZXMsIGh5cGhlbmF0aW9uIHBhdHRlcm4gZmlsZXMKK0xBWU9VVExJQl9GSUxFUyA6PSAkKGZvbnRzX2RldmljZSkgJChmb250X2NvbmZpZykgJChrZXlib2FyZHMpICQoaHlwaGVuKQogCiAuUEhPTlk6IGxheW91dGxpYiBsYXlvdXRsaWItdGVzdHMKIGxheW91dGxpYiBsYXlvdXRsaWItdGVzdHM6ICQoTEFZT1VUTElCX0ZJTEVTKQpAQCAtNDAsNiArNDksNyBAQAogJChjYWxsIGRpc3QtZm9yLWdvYWxzLCBsYXlvdXRsaWIsICQoZm9yZWFjaCBtLCQoZm9udHNfZGV2aWNlKSwgJChtKTpsYXlvdXRsaWJfbmF0aXZlL2ZvbnRzLyQobm90ZGlyICQobSkpKSkKICQoY2FsbCBkaXN0LWZvci1nb2FscywgbGF5b3V0bGliLCAkKGZvcmVhY2ggbSwkKGZvbnRfY29uZmlnKSwgJChtKTpsYXlvdXRsaWJfbmF0aXZlL2ZvbnRzLyQobm90ZGlyICQobSkpKSkKICQoY2FsbCBkaXN0LWZvci1nb2FscywgbGF5b3V0bGliLCAkKGZvcmVhY2ggbSwkKGtleWJvYXJkcyksICQobSk6bGF5b3V0bGliX25hdGl2ZS9rZXlib2FyZHMvJChub3RkaXIgJChtKSkpKQorJChjYWxsIGRpc3QtZm9yLWdvYWxzLCBsYXlvdXRsaWIsICQoZm9yZWFjaCBtLCQoaHlwaGVuKSwgJChtKTpsYXlvdXRsaWJfbmF0aXZlL2h5cGhlbi1kYXRhLyQobm90ZGlyICQobSkpKSkKIAogRk9OVF9URU1QIDo9CiBmb250X2NvbmZpZyA6PQpAQCAtOTUsNiArMTA1LDcgQEAKIF9sYXlvdXRsaWJfZm9udF9jb25maWdfZmlsZXMgOj0gJChzb3J0ICQod2lsZGNhcmQgZnJhbWV3b3Jrcy9iYXNlL2RhdGEvZm9udHMvKi54bWwpKQogX2xheW91dGxpYl9mb250c19maWxlcyA6PSAkKGZpbHRlciAkKFRBUkdFVF9PVVQpL2ZvbnRzLyUudHRmICQoVEFSR0VUX09VVCkvZm9udHMvJS50dGMgJChUQVJHRVRfT1VUKS9mb250cy8lLm90ZiwgJChJTlRFUk5BTF9TWVNURU1JTUFHRV9GSUxFUykpCiBfbGF5b3V0bGliX2tleWJvYXJkX2ZpbGVzIDo9ICQoc29ydCAkKHdpbGRjYXJkIGZyYW1ld29ya3MvYmFzZS9kYXRhL2tleWJvYXJkcy8qLmtjbSkpCitfbGF5b3V0bGliX2h5cGhlbl9maWxlcyA6PSAkKGZpbHRlciAkKFRBUkdFVF9PVVQpL3Vzci9oeXBoZW4tZGF0YS8lLmh5YiwgJChJTlRFUk5BTF9TWVNURU1JTUFHRV9GSUxFUykpCiAKICMgRmluZCBvdXQgZmlsZXMgZGlzdGVkIHdpdGggbGF5b3V0bGliIGluIFNvb25nLgogIyMjIEZpbHRlciBvdXQgc3RhdGljIGxpYnJhcmllcyBmb3IgV2luZG93cyBhbmQgZmlsZXMgYWxyZWFkeSBoYW5kbGVkIGluIG1ha2UuCkBAIC0xMjQsNiArMTM1LDEzIEBACiAJICBlY2hvIGRhdGEva2V5Ym9hcmRzLyQobm90ZGlyICRmKSxmcmFtZXdvcmtzL2Jhc2UvZGF0YS9rZXlib2FyZHMscHJlYnVpbHRfZXRjLCwsLCwkZiwsLCA+PiAkQDsgXAogCSkKIAorCSQoZm9yZWFjaCBmLCQoX2xheW91dGxpYl9oeXBoZW5fZmlsZXMpLCBcCisJICAkKGV2YWwgX21vZHVsZV9uYW1lIDo9ICQoQUxMX0lOU1RBTExFRF9GSUxFUy4kZikpIFwKKwkgICQoZXZhbCBfbW9kdWxlX3BhdGggOj0gJChzdHJpcCAkKHNvcnQgJChBTExfTU9EVUxFUy4kKF9tb2R1bGVfbmFtZSkuUEFUSCkpKSkgXAorCSAgJChldmFsIF9zb29uZ19tb2R1bGVfdHlwZSA6PSAkKHN0cmlwICQoc29ydCAkKEFMTF9NT0RVTEVTLiQoX21vZHVsZV9uYW1lKS5TT09OR19NT0RVTEVfVFlQRSkpKSkgXAorCSAgZWNobyBkYXRhL2h5cGhlbi1kYXRhLyQobm90ZGlyICRmKSwkKF9tb2R1bGVfcGF0aCksJChfc29vbmdfbW9kdWxlX3R5cGUpLCwsLCwkZiwsLCA+PiAkQDsgXAorCSkKKwogCSQoZm9yZWFjaCBmLCQoX2xheW91dGxpYl9maWxlc19kaXN0ZWRfYnlfc29vbmcpLCBcCiAJICAkKGV2YWwgX3ByZWJ1aWx0X21vZHVsZV9maWxlIDo9ICQoY2FsbCB3b3JkLWNvbG9uLDEsJGYpKSBcCiAJICAkKGV2YWwgX2Rpc3RfZmlsZSA6PSAkKGNhbGwgd29yZC1jb2xvbiwyLCRmKSkgXApAQCAtMTUyLDcgKzE3MCw3IEBACiAKIC5QSE9OWTogbGF5b3V0bGliLXNib20KIGxheW91dGxpYi1zYm9tOiAkKExBWU9VVExJQl9TQk9NKS9sYXlvdXRsaWIuc3BkeC5qc29uCi0kKExBWU9VVExJQl9TQk9NKS9sYXlvdXRsaWIuc3BkeC5qc29uOiAkKFBST0RVQ1RfT1VUKS9hbHdheXNfZGlydHlfZmlsZS50eHQgJChHRU5fU0JPTSkgJChMQVlPVVRMSUJfU0JPTSkvc2JvbS1tZXRhZGF0YS5jc3YgJChfbGF5b3V0bGliX2ZvbnRfY29uZmlnX2ZpbGVzKSAkKF9sYXlvdXRsaWJfZm9udHNfZmlsZXMpICQoTEFZT1VUTElCX0JVSUxEX1BST1ApL2xheW91dGxpYi1idWlsZC5wcm9wICQoX2xheW91dGxpYl9rZXlib2FyZF9maWxlcykgJChMQVlPVVRMSUJfUkVTX0ZJTEVTKSAkKEVNVUxBVEVEX09WRVJMQVlTX0ZJTEVTKSAkKERFVklDRV9PVkVSTEFZU19GSUxFUykKKyQoTEFZT1VUTElCX1NCT00pL2xheW91dGxpYi5zcGR4Lmpzb246ICQoUFJPRFVDVF9PVVQpL2Fsd2F5c19kaXJ0eV9maWxlLnR4dCAkKEdFTl9TQk9NKSAkKExBWU9VVExJQl9TQk9NKS9zYm9tLW1ldGFkYXRhLmNzdiAkKF9sYXlvdXRsaWJfZm9udF9jb25maWdfZmlsZXMpICQoX2xheW91dGxpYl9mb250c19maWxlcykgJChMQVlPVVRMSUJfQlVJTERfUFJPUCkvbGF5b3V0bGliLWJ1aWxkLnByb3AgJChfbGF5b3V0bGliX2tleWJvYXJkX2ZpbGVzKSAkKF9sYXlvdXRsaWJfaHlwaGVuX2ZpbGVzKSAkKExBWU9VVExJQl9SRVNfRklMRVMpICQoRU1VTEFURURfT1ZFUkxBWVNfRklMRVMpICQoREVWSUNFX09WRVJMQVlTX0ZJTEVTKQogCXJtIC1yZiAkQAogCSQoR0VOX1NCT00pIC0tb3V0cHV0X2ZpbGUgJEAgLS1tZXRhZGF0YSAkKExBWU9VVExJQl9TQk9NKS9zYm9tLW1ldGFkYXRhLmNzdiAtLWJ1aWxkX3ZlcnNpb24gJChCVUlMRF9GSU5HRVJQUklOVF9GUk9NX0ZJTEUpIC0tcHJvZHVjdF9tZnIgIiQoUFJPRFVDVF9NQU5VRkFDVFVSRVIpIiAtLW1vZHVsZV9uYW1lICJsYXlvdXRsaWIiIC0tanNvbgogCmRpZmYgLS1naXQgYS9jb3JlL21haW4ubWsgYi9jb3JlL21haW4ubWsKaW5kZXggZTVmNWI5ZC4uN2MwN2Y5ZCAxMDA2NDQKLS0tIGEvY29yZS9tYWluLm1rCisrKyBiL2NvcmUvbWFpbi5tawpAQCAtODMsNiArODMsOCBAQAogLWluY2x1ZGUgdGVzdC9jdHMtcm9vdC90b29scy9idWlsZC9jb25maWcubWsKICMgV1ZUUy1zcGVjaWZpYyBjb25maWcuCiAtaW5jbHVkZSB0ZXN0L3d2dHMvdG9vbHMvYnVpbGQvY29uZmlnLm1rCisjIERUUy1zcGVjaWZpYyBjb25maWcuCistaW5jbHVkZSB0ZXN0L2R0cy90b29scy9idWlsZC9jb25maWcubWsKIAogCiAjIENsZWFuIHJ1bGVzCkBAIC0yNzUsMTEgKzI3NywyNCBAQAogIyBJbmNsdWRlIGFsbCBvZiB0aGUgbWFrZWZpbGVzIGluIHRoZSBzeXN0ZW0KICMKIAotc3ViZGlyX21ha2VmaWxlcyA6PSAkKFNPT05HX09VVF9ESVIpL2luc3RhbGxzLSQoVEFSR0VUX1BST0RVQ1QpJChDT1ZFUkFHRV9TVUZGSVgpLm1rICQoU09PTkdfQU5EUk9JRF9NSykKK3N1YmRpcl9tYWtlZmlsZXMgOj0gXAorICAgICQoU09PTkdfT1VUX0RJUikvaW5zdGFsbHMtJChUQVJHRVRfUFJPRFVDVCkkKENPVkVSQUdFX1NVRkZJWCkubWsgXAorICAgICQoU09PTkdfQU5EUk9JRF9NSykgXAorICAgIGJ1aWxkL21ha2UvdGFyZ2V0L2JvYXJkL2FuZHJvaWQtaW5mby5tawogCiAjIEFuZHJvaWQubWsgZmlsZXMgYXJlIG9ubHkgdXNlZCBvbiBMaW51eCBidWlsZHMsIE1hYyBvbmx5IHN1cHBvcnRzIEFuZHJvaWQuYnAKIGlmZXEgKCQoSE9TVF9PUyksbGludXgpCi0gIHN1YmRpcl9tYWtlZmlsZXMgKz0gJChmaWxlIDwkKE9VVF9ESVIpLy5tb2R1bGVfcGF0aHMvQW5kcm9pZC5tay5saXN0KQorICBpZmVxICgkKFBST0RVQ1RfSUdOT1JFX0FMTF9BTkRST0lETUspLHRydWUpCisgICAgYWxsb3dlZF9hbmRyb2lkbWtfZmlsZXMgOj0KKyAgICBpZmRlZiBQUk9EVUNUX0FORFJPSURNS19BTExPV0xJU1RfRklMRQorICAgICAgLWluY2x1ZGUgJChQUk9EVUNUX0FORFJPSURNS19BTExPV0xJU1RfRklMRSkKKyAgICBlbmRpZgorICAgIGFsbG93ZWRfYW5kcm9pZG1rX2ZpbGVzICs9ICQoUFJPRFVDVF9BTExPV0VEX0FORFJPSURNS19GSUxFUykKKyAgICBzdWJkaXJfbWFrZWZpbGVzICs9ICQoZmlsdGVyICQoYWxsb3dlZF9hbmRyb2lkbWtfZmlsZXMpLCQoZmlsZSA8JChPVVRfRElSKS8ubW9kdWxlX3BhdGhzL0FuZHJvaWQubWsubGlzdCkpCisgICAgYWxsb3dlZF9hbmRyb2lkbWtfZmlsZXMgOj0KKyAgZWxzZQorICAgIHN1YmRpcl9tYWtlZmlsZXMgKz0gJChmaWxlIDwkKE9VVF9ESVIpLy5tb2R1bGVfcGF0aHMvQW5kcm9pZC5tay5saXN0KQorICBlbmRpZgogZW5kaWYKIAogc3ViZGlyX21ha2VmaWxlcyArPSAkKFNPT05HX09VVF9ESVIpL2xhdGUtJChUQVJHRVRfUFJPRFVDVCkkKENPVkVSQUdFX1NVRkZJWCkubWsKQEAgLTI5MCw3ICszMDUsNyBAQAogJChmb3JlYWNoIG1rLCQoc3ViZGlyX21ha2VmaWxlcyksJChpbmZvIFskKGNhbGwgaW5jX2FuZF9wcmludCxzdWJkaXJfbWFrZWZpbGVzX2luYykvJChzdWJkaXJfbWFrZWZpbGVzX3RvdGFsKV0gaW5jbHVkaW5nICQobWspIC4uLikkKGV2YWwgaW5jbHVkZSAkKG1rKSkpCiAKICMgQnVpbGQgYm9vdGxvYWRlci5pbWcvcmFkaW8uaW1nLCBhbmQgdW5wYWNrIHRoZSBwYXJ0aXRpb25zLgotaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvdGFza3MvdG9vbHMvdXBkYXRlX2Jvb3Rsb2FkZXJfcmFkaW9faW1hZ2UubWsKKy1pbmNsdWRlIHZlbmRvci9nb29nbGVfZGV2aWNlcy8kKFRBUkdFVF9TT0MpL3ByZWJ1aWx0cy9taXNjX2JpbnMvdXBkYXRlX2Jvb3Rsb2FkZXJfcmFkaW9faW1hZ2UubWsKIAogIyBGb3IgYW4gdW5idW5kbGVkIGltYWdlLCB3ZSBjYW4gc2tpcCBibHVlcHJpbnRfdG9vbHMgYmVjYXVzZSB1bmJ1bmRsZWQgaW1hZ2UKICMgYWltcyB0byByZW1vdmUgYSBsYXJnZSBudW1iZXIgZnJhbWV3b3JrIHByb2plY3RzIGZyb20gdGhlIG1hbmlmZXN0LCB0aGUKQEAgLTk4MSw4ICs5OTYsOCBAQAogIyBSZXR1cm5zIG1vZHVsZXMgaW5jbHVkZWQgYXV0b21hdGljYWxseSBhcyBhIHJlc3VsdCBvZiBjZXJ0YWluIEJvYXJkQ29uZmlnCiAjIHZhcmlhYmxlcyBiZWluZyBzZXQuCiBkZWZpbmUgYXV0by1pbmNsdWRlZC1tb2R1bGVzCi0gIGxsbmRrX2luX3N5c3RlbSBcCi0gICQoaWYgJChERVZJQ0VfTUFOSUZFU1RfRklMRSksdmVuZG9yX21hbmlmZXN0LnhtbCkgXAorICAkKGZvcmVhY2ggdm5ka192ZXIsJChQUk9EVUNUX0VYVFJBX1ZOREtfVkVSU0lPTlMpLGNvbS5hbmRyb2lkLnZuZGsudiQodm5ka192ZXIpKSBcCisgIGxsbmRrLmxpYnJhcmllcy50eHQgXAogICAkKGlmICQoREVWSUNFX01BTklGRVNUX1NLVVMpLCQoZm9yZWFjaCBza3UsICQoREVWSUNFX01BTklGRVNUX1NLVVMpLHZlbmRvcl9tYW5pZmVzdF8kKHNrdSkueG1sKSkgXAogICAkKGlmICQoT0RNX01BTklGRVNUX0ZJTEVTKSxvZG1fbWFuaWZlc3QueG1sKSBcCiAgICQoaWYgJChPRE1fTUFOSUZFU1RfU0tVUyksJChmb3JlYWNoIHNrdSwgJChPRE1fTUFOSUZFU1RfU0tVUyksb2RtX21hbmlmZXN0XyQoc2t1KS54bWwpKSBcCkBAIC0xMzg0LDYgKzEzOTksNyBAQAogICAgICQoSU5TVEFMTEVEX1JBTURJU0tfVEFSR0VUKSBcCiAgICAgJChJTlNUQUxMRURfQk9PVElNQUdFX1RBUkdFVCkgXAogICAgICQoSU5TVEFMTEVEX0lOSVRfQk9PVF9JTUFHRV9UQVJHRVQpIFwKKyAgICAkKElOU1RBTExFRF9EVEJPSU1BR0VfVEFSR0VUKSBcCiAgICAgJChJTlNUQUxMRURfUkFESU9JTUFHRV9UQVJHRVQpIFwKICAgICAkKElOU1RBTExFRF9ERUJVR19SQU1ESVNLX1RBUkdFVCkgXAogICAgICQoSU5TVEFMTEVEX0RFQlVHX0JPT1RJTUFHRV9UQVJHRVQpIFwKQEAgLTE4OTksNyArMTkxNSw2IEBACiAJICAkKGV2YWwgX2tlcm5lbF9tb2R1bGVfY29weV9maWxlcyA6PSAkKHNvcnQgJChmaWx0ZXIgJSQoX3BhdGhfb25fZGV2aWNlKSwkKEtFUk5FTF9NT0RVTEVfQ09QWV9GSUxFUykpKSkgXAogCSAgJChldmFsIF9pc19idWlsZF9wcm9wIDo9ICQoY2FsbCBpcy1idWlsZC1wcm9wLCRmKSkgXAogCSAgJChldmFsIF9pc19ub3RpY2VfZmlsZSA6PSAkKGNhbGwgaXMtbm90aWNlLWZpbGUsJGYpKSBcCi0JICAkKGV2YWwgX2lzX2RleHByZW9wdF9pbWFnZV9wcm9maWxlIDo9ICQoaWYgJChmaWx0ZXIgJTovJChfcGF0aF9vbl9kZXZpY2UpLCQoREVYUFJFT1BUX0lNQUdFX1BST0ZJTEVfQlVJTFRfSU5TVEFMTEVEKSksWSkpIFwKIAkgICQoZXZhbCBfaXNfcHJvZHVjdF9zeXN0ZW1fb3RoZXJfYXZia2V5IDo9ICQoaWYgJChmaW5kc3RyaW5nICRmLCQoSU5TVEFMTEVEX1BST0RVQ1RfU1lTVEVNX09USEVSX0FWQktFWV9UQVJHRVQpKSxZKSkgXAogCSAgJChldmFsIF9pc19ldmVudF9sb2dfdGFnc19maWxlIDo9ICQoaWYgJChmaW5kc3RyaW5nICRmLCQoZXZlbnRfbG9nX3RhZ3NfZmlsZSkpLFkpKSBcCiAJICAkKGV2YWwgX2lzX3N5c3RlbV9vdGhlcl9vZGV4X21hcmtlciA6PSAkKGlmICQoZmluZHN0cmluZyAkZiwkKElOU1RBTExFRF9TWVNURU1fT1RIRVJfT0RFWF9NQVJLRVIpKSxZKSkgXApAQCAtMTkwOSw3ICsxOTI0LDcgQEAKIAkgICQoZXZhbCBfaXNfcGFydGl0aW9uX2NvbXBhdF9zeW1saW5rIDo9ICQoaWYgJChmaW5kc3RyaW5nICRmLCQoUEFSVElUSU9OX0NPTVBBVF9TWU1MSU5LUykpLFkpKSBcCiAJICAkKGV2YWwgX2lzX2ZsYWdzX2ZpbGUgOj0gJChpZiAkKGZpbmRzdHJpbmcgJGYsICQoQUxMX0ZMQUdTX0ZJTEVTKSksWSkpIFwKIAkgICQoZXZhbCBfaXNfcm9vdGRpcl9zeW1saW5rIDo9ICQoaWYgJChmaW5kc3RyaW5nICRmLCAkKEFMTF9ST09URElSX1NZTUxJTktTKSksWSkpIFwKLQkgICQoZXZhbCBfaXNfcGxhdGZvcm1fZ2VuZXJhdGVkIDo9ICQoX2lzX2J1aWxkX3Byb3ApJChfaXNfbm90aWNlX2ZpbGUpJChfaXNfZGV4cHJlb3B0X2ltYWdlX3Byb2ZpbGUpJChfaXNfcHJvZHVjdF9zeXN0ZW1fb3RoZXJfYXZia2V5KSQoX2lzX2V2ZW50X2xvZ190YWdzX2ZpbGUpJChfaXNfc3lzdGVtX290aGVyX29kZXhfbWFya2VyKSQoX2lzX2tlcm5lbF9tb2R1bGVzX2Jsb2NrbGlzdCkkKF9pc19mc3Zlcml0eV9idWlsZF9tYW5pZmVzdF9hcGspJChfaXNfbGlua2VyX2NvbmZpZykkKF9pc19wYXJ0aXRpb25fY29tcGF0X3N5bWxpbmspJChfaXNfZmxhZ3NfZmlsZSkkKF9pc19yb290ZGlyX3N5bWxpbmspKSBcCisJICAkKGV2YWwgX2lzX3BsYXRmb3JtX2dlbmVyYXRlZCA6PSAkKF9pc19idWlsZF9wcm9wKSQoX2lzX25vdGljZV9maWxlKSQoX2lzX3Byb2R1Y3Rfc3lzdGVtX290aGVyX2F2YmtleSkkKF9pc19ldmVudF9sb2dfdGFnc19maWxlKSQoX2lzX3N5c3RlbV9vdGhlcl9vZGV4X21hcmtlcikkKF9pc19rZXJuZWxfbW9kdWxlc19ibG9ja2xpc3QpJChfaXNfZnN2ZXJpdHlfYnVpbGRfbWFuaWZlc3RfYXBrKSQoX2lzX2xpbmtlcl9jb25maWcpJChfaXNfcGFydGl0aW9uX2NvbXBhdF9zeW1saW5rKSQoX2lzX2ZsYWdzX2ZpbGUpJChfaXNfcm9vdGRpcl9zeW1saW5rKSkgXAogCSAgJChldmFsIF9zdGF0aWNfbGlicyA6PSAkKGlmICQoX2lzX3Nvb25nX21vZHVsZSksLCQoQUxMX0lOU1RBTExFRF9GSUxFUy4kZi5TVEFUSUNfTElCUkFSSUVTKSkpIFwKIAkgICQoZXZhbCBfd2hvbGVfc3RhdGljX2xpYnMgOj0gJChpZiAkKF9pc19zb29uZ19tb2R1bGUpLCwkKEFMTF9JTlNUQUxMRURfRklMRVMuJGYuV0hPTEVfU1RBVElDX0xJQlJBUklFUykpKSBcCiAJICAkKGV2YWwgX2xpY2Vuc2VfdGV4dCA6PSAkKGlmICQoZmlsdGVyICQoX2J1aWxkX291dHB1dF9wYXRoKSwkKEFMTF9OT05fTU9EVUxFUykpLCQoQUxMX05PTl9NT0RVTEVTLiQoX2J1aWxkX291dHB1dF9wYXRoKS5OT1RJQ0VTKSkpIFwKZGlmZiAtLWdpdCBhL2NvcmUvcGFja2FnaW5nL2ZsYWdzLm1rIGIvY29yZS9wYWNrYWdpbmcvZmxhZ3MubWsKaW5kZXggNDY5M2JjZC4uZmQ5ZGM5YiAxMDA2NDQKLS0tIGEvY29yZS9wYWNrYWdpbmcvZmxhZ3MubWsKKysrIGIvY29yZS9wYWNrYWdpbmcvZmxhZ3MubWsKQEAgLTI0LDEwICsyNCwxMSBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBBY29uZmlnIEZsYWdzCiAKLSMgQ3JlYXRlIGEgc3VtbWFyeSBmaWxlIG9mIGJ1aWxkIGZsYWdzIGZvciBlYWNoIHBhcnRpdGlvbgorIyBDcmVhdGUgYSBzdW1tYXJ5IGZpbGUgb2YgYnVpbGQgZmxhZ3MgZm9yIGEgc2luZ2xlIHBhcnRpdGlvbgogIyAkKDEpOiBidWlsdCBhY29uZmlnIGZsYWdzIGZpbGUgKG91dCkKICMgJCgyKTogaW5zdGFsbGVkIGFjb25maWcgZmxhZ3MgZmlsZSAob3V0KQogIyAkKDMpOiB0aGUgcGFydGl0aW9uIChpbikKKyMgJCg0KTogaW5wdXQgYWNvbmZpZyBmaWxlcyBmb3IgdGhlIHBhcnRpdGlvbiAoaW4pCiBkZWZpbmUgZ2VuZXJhdGUtcGFydGl0aW9uLWFjb25maWctZmxhZy1maWxlCiAkKGV2YWwgJChzdHJpcCAkKDEpKTogUFJJVkFURV9PVVQgOj0gJChzdHJpcCAkKDEpKSkKICQoZXZhbCAkKHN0cmlwICQoMSkpOiBQUklWQVRFX0lOIDo9ICQoc3RyaXAgJCg0KSkpCkBAIC0zNSw3ICszNiw4IEBACiAJbWtkaXIgLXAgJCQoZGlyICQkKFBSSVZBVEVfT1VUKSkKIAkkJChpZiAkJChQUklWQVRFX0lOKSwgXAogCQkkJChBQ09ORklHKSBkdW1wIC0tZGVkdXAgLS1mb3JtYXQgcHJvdG9idWYgLS1vdXQgJCQoUFJJVkFURV9PVVQpIFwKLQkJCS0tZmlsdGVyIGNvbnRhaW5lcjokKHN0cmlwICQoMykpIFwKKwkJCS0tZmlsdGVyIGNvbnRhaW5lcjokKHN0cmlwICQoMykpK3N0YXRlOkVOQUJMRUQgXAorCQkJLS1maWx0ZXIgY29udGFpbmVyOiQoc3RyaXAgJCgzKSkrcGVybWlzc2lvbjpSRUFEX1dSSVRFIFwKIAkJCSQkKGFkZHByZWZpeCAtLWNhY2hlICwkJChQUklWQVRFX0lOKSksIFwKIAkJZWNobyAtbiA+ICQkKFBSSVZBVEVfT1VUKSBcCiAJKQpAQCAtOTcsNDIgKzk5LDU0IEBACiAjICQoMSk6IGJ1aWx0IGFjb25maWcgZmxhZ3Mgc3RvcmFnZSBwYWNrYWdlIG1hcCBmaWxlIChvdXQpCiAjICQoMik6IGJ1aWx0IGFjb25maWcgZmxhZ3Mgc3RvcmFnZSBmbGFnIG1hcCBmaWxlIChvdXQpCiAjICQoMyk6IGJ1aWx0IGFjb25maWcgZmxhZ3Mgc3RvcmFnZSBmbGFnIHZhbCBmaWxlIChvdXQpCi0jICQoNCk6IGluc3RhbGxlZCBhY29uZmlnIGZsYWdzIHN0b3JhZ2UgcGFja2FnZSBtYXAgZmlsZSAob3V0KQotIyAkKDUpOiBpbnN0YWxsZWQgYWNvbmZpZyBmbGFncyBzdG9yYWdlIGZsYWcgbWFwIGZpbGUgKG91dCkKLSMgJCg2KTogaW5zdGFsbGVkIGFjb25maWcgZmxhZ3Mgc3RvcmFnZSBmbGFnIHZhbHVlIGZpbGUgKG91dCkKLSMgJCg3KTogaW5wdXQgYWNvbmZpZyBmaWxlcyBmb3IgdGhlIHBhcnRpdGlvbiAoaW4pCi0jICQoOCk6IHBhcnRpdGlvbiBuYW1lCisjICQoNCk6IGJ1aWx0IGFjb25maWcgZmxhZ3Mgc3RvcmFnZSBmbGFnIGluZm8gZmlsZSAob3V0KQorIyAkKDUpOiBpbnN0YWxsZWQgYWNvbmZpZyBmbGFncyBzdG9yYWdlIHBhY2thZ2UgbWFwIGZpbGUgKG91dCkKKyMgJCg2KTogaW5zdGFsbGVkIGFjb25maWcgZmxhZ3Mgc3RvcmFnZSBmbGFnIG1hcCBmaWxlIChvdXQpCisjICQoNyk6IGluc3RhbGxlZCBhY29uZmlnIGZsYWdzIHN0b3JhZ2UgZmxhZyB2YWx1ZSBmaWxlIChvdXQpCisjICQoOCk6IGluc3RhbGxlZCBhY29uZmlnIGZsYWdzIHN0b3JhZ2UgZmxhZyBpbmZvIGZpbGUgKG91dCkKKyMgJCg5KTogaW5wdXQgYWNvbmZpZyBmaWxlcyBmb3IgdGhlIHBhcnRpdGlvbiAoaW4pCisjICQoMTApOiBwYXJ0aXRpb24gbmFtZQogZGVmaW5lIGdlbmVyYXRlLXBhcnRpdGlvbi1hY29uZmlnLXN0b3JhZ2UtZmlsZQogJChldmFsICQoc3RyaXAgJCgxKSk6IFBSSVZBVEVfT1VUIDo9ICQoc3RyaXAgJCgxKSkpCi0kKGV2YWwgJChzdHJpcCAkKDEpKTogUFJJVkFURV9JTiA6PSAkKHN0cmlwICQoNykpKQotJChzdHJpcCAkKDEpKTogJChBQ09ORklHKSAkKHN0cmlwICQoNykpCiskKGV2YWwgJChzdHJpcCAkKDEpKTogUFJJVkFURV9JTiA6PSAkKHN0cmlwICQoOSkpKQorJChzdHJpcCAkKDEpKTogJChBQ09ORklHKSAkKHN0cmlwICQoOSkpCiAJbWtkaXIgLXAgJCQoZGlyICQkKFBSSVZBVEVfT1VUKSkKIAkkJChpZiAkJChQUklWQVRFX0lOKSwgXAotCQkkJChBQ09ORklHKSBjcmVhdGUtc3RvcmFnZSAtLWNvbnRhaW5lciAkKDgpIC0tZmlsZSBwYWNrYWdlX21hcCAtLW91dCAkJChQUklWQVRFX09VVCkgXAorCQkkJChBQ09ORklHKSBjcmVhdGUtc3RvcmFnZSAtLWNvbnRhaW5lciAkKDEwKSAtLWZpbGUgcGFja2FnZV9tYXAgLS1vdXQgJCQoUFJJVkFURV9PVVQpIFwKIAkJCSQkKGFkZHByZWZpeCAtLWNhY2hlICwkJChQUklWQVRFX0lOKSksIFwKIAkpCiAJdG91Y2ggJCQoUFJJVkFURV9PVVQpCiAkKGV2YWwgJChzdHJpcCAkKDIpKTogUFJJVkFURV9PVVQgOj0gJChzdHJpcCAkKDIpKSkKLSQoZXZhbCAkKHN0cmlwICQoMikpOiBQUklWQVRFX0lOIDo9ICQoc3RyaXAgJCg3KSkpCi0kKHN0cmlwICQoMikpOiAkKEFDT05GSUcpICQoc3RyaXAgJCg3KSkKKyQoZXZhbCAkKHN0cmlwICQoMikpOiBQUklWQVRFX0lOIDo9ICQoc3RyaXAgJCg5KSkpCiskKHN0cmlwICQoMikpOiAkKEFDT05GSUcpICQoc3RyaXAgJCg5KSkKIAlta2RpciAtcCAkJChkaXIgJCQoUFJJVkFURV9PVVQpKQogCSQkKGlmICQkKFBSSVZBVEVfSU4pLCBcCi0JCSQkKEFDT05GSUcpIGNyZWF0ZS1zdG9yYWdlIC0tY29udGFpbmVyICQoOCkgLS1maWxlIGZsYWdfbWFwIC0tb3V0ICQkKFBSSVZBVEVfT1VUKSBcCisJCSQkKEFDT05GSUcpIGNyZWF0ZS1zdG9yYWdlIC0tY29udGFpbmVyICQoMTApIC0tZmlsZSBmbGFnX21hcCAtLW91dCAkJChQUklWQVRFX09VVCkgXAogCQkJJCQoYWRkcHJlZml4IC0tY2FjaGUgLCQkKFBSSVZBVEVfSU4pKSwgXAogCSkKIAl0b3VjaCAkJChQUklWQVRFX09VVCkKICQoZXZhbCAkKHN0cmlwICQoMykpOiBQUklWQVRFX09VVCA6PSAkKHN0cmlwICQoMykpKQotJChldmFsICQoc3RyaXAgJCgzKSk6IFBSSVZBVEVfSU4gOj0gJChzdHJpcCAkKDcpKSkKLSQoc3RyaXAgJCgzKSk6ICQoQUNPTkZJRykgJChzdHJpcCAkKDcpKQorJChldmFsICQoc3RyaXAgJCgzKSk6IFBSSVZBVEVfSU4gOj0gJChzdHJpcCAkKDkpKSkKKyQoc3RyaXAgJCgzKSk6ICQoQUNPTkZJRykgJChzdHJpcCAkKDkpKQogCW1rZGlyIC1wICQkKGRpciAkJChQUklWQVRFX09VVCkpCiAJJCQoaWYgJCQoUFJJVkFURV9JTiksIFwKLQkJJCQoQUNPTkZJRykgY3JlYXRlLXN0b3JhZ2UgLS1jb250YWluZXIgJCg4KSAtLWZpbGUgZmxhZ192YWwgLS1vdXQgJCQoUFJJVkFURV9PVVQpIFwKKwkJJCQoQUNPTkZJRykgY3JlYXRlLXN0b3JhZ2UgLS1jb250YWluZXIgJCgxMCkgLS1maWxlIGZsYWdfdmFsIC0tb3V0ICQkKFBSSVZBVEVfT1VUKSBcCiAJCSQkKGFkZHByZWZpeCAtLWNhY2hlICwkJChQUklWQVRFX0lOKSksIFwKIAkpCiAJdG91Y2ggJCQoUFJJVkFURV9PVVQpCi0kKGNhbGwgY29weS1vbmUtZmlsZSwgJChzdHJpcCAkKDEpKSwgJCg0KSkKLSQoY2FsbCBjb3B5LW9uZS1maWxlLCAkKHN0cmlwICQoMikpLCAkKDUpKQotJChjYWxsIGNvcHktb25lLWZpbGUsICQoc3RyaXAgJCgzKSksICQoNikpCiskKGV2YWwgJChzdHJpcCAkKDQpKTogUFJJVkFURV9PVVQgOj0gJChzdHJpcCAkKDQpKSkKKyQoZXZhbCAkKHN0cmlwICQoNCkpOiBQUklWQVRFX0lOIDo9ICQoc3RyaXAgJCg5KSkpCiskKHN0cmlwICQoNCkpOiAkKEFDT05GSUcpICQoc3RyaXAgJCg5KSkKKwlta2RpciAtcCAkJChkaXIgJCQoUFJJVkFURV9PVVQpKQorCSQkKGlmICQkKFBSSVZBVEVfSU4pLCBcCisJCSQkKEFDT05GSUcpIGNyZWF0ZS1zdG9yYWdlIC0tY29udGFpbmVyICQoMTApIC0tZmlsZSBmbGFnX2luZm8gLS1vdXQgJCQoUFJJVkFURV9PVVQpIFwKKwkJJCQoYWRkcHJlZml4IC0tY2FjaGUgLCQkKFBSSVZBVEVfSU4pKSwgXAorCSkKKwl0b3VjaCAkJChQUklWQVRFX09VVCkKKyQoY2FsbCBjb3B5LW9uZS1maWxlLCAkKHN0cmlwICQoMSkpLCAkKDUpKQorJChjYWxsIGNvcHktb25lLWZpbGUsICQoc3RyaXAgJCgyKSksICQoNikpCiskKGNhbGwgY29weS1vbmUtZmlsZSwgJChzdHJpcCAkKDMpKSwgJCg3KSkKKyQoY2FsbCBjb3B5LW9uZS1maWxlLCAkKHN0cmlwICQoNCkpLCAkKDgpKQogZW5kZWYKIAogaWZlcSAoJChSRUxFQVNFX0NSRUFURV9BQ09ORklHX1NUT1JBR0VfRklMRSksdHJ1ZSkKQEAgLTE0MCwxMyArMTU0LDE2IEBACiAJJChldmFsIGFjb25maWdfc3RvcmFnZV9wYWNrYWdlX21hcC4kKHBhcnRpdGlvbikgOj0gJChQUk9EVUNUX09VVCkvJChwYXJ0aXRpb24pL2V0Yy9hY29uZmlnL3BhY2thZ2UubWFwKSBcCiAJJChldmFsIGFjb25maWdfc3RvcmFnZV9mbGFnX21hcC4kKHBhcnRpdGlvbikgOj0gJChQUk9EVUNUX09VVCkvJChwYXJ0aXRpb24pL2V0Yy9hY29uZmlnL2ZsYWcubWFwKSBcCiAJJChldmFsIGFjb25maWdfc3RvcmFnZV9mbGFnX3ZhbC4kKHBhcnRpdGlvbikgOj0gJChQUk9EVUNUX09VVCkvJChwYXJ0aXRpb24pL2V0Yy9hY29uZmlnL2ZsYWcudmFsKSBcCisJJChldmFsIGFjb25maWdfc3RvcmFnZV9mbGFnX2luZm8uJChwYXJ0aXRpb24pIDo9ICQoUFJPRFVDVF9PVVQpLyQocGFydGl0aW9uKS9ldGMvYWNvbmZpZy9mbGFnLmluZm8pIFwKIAkkKGV2YWwgJChjYWxsIGdlbmVyYXRlLXBhcnRpdGlvbi1hY29uZmlnLXN0b3JhZ2UtZmlsZSwgXAogCQkJCSQoVEFSR0VUX09VVF9GTEFHUykvJChwYXJ0aXRpb24pL3BhY2thZ2UubWFwLCBcCiAJCQkJJChUQVJHRVRfT1VUX0ZMQUdTKS8kKHBhcnRpdGlvbikvZmxhZy5tYXAsIFwKIAkJCQkkKFRBUkdFVF9PVVRfRkxBR1MpLyQocGFydGl0aW9uKS9mbGFnLnZhbCwgXAorCQkJCSQoVEFSR0VUX09VVF9GTEFHUykvJChwYXJ0aXRpb24pL2ZsYWcuaW5mbywgXAogCQkJCSQoYWNvbmZpZ19zdG9yYWdlX3BhY2thZ2VfbWFwLiQocGFydGl0aW9uKSksIFwKIAkJCQkkKGFjb25maWdfc3RvcmFnZV9mbGFnX21hcC4kKHBhcnRpdGlvbikpLCBcCiAJCQkJJChhY29uZmlnX3N0b3JhZ2VfZmxhZ192YWwuJChwYXJ0aXRpb24pKSwgXAorCQkJCSQoYWNvbmZpZ19zdG9yYWdlX2ZsYWdfaW5mby4kKHBhcnRpdGlvbikpLCBcCiAJCQkJJChhY29uZmlnX2ZsYWdfc3VtbWFyaWVzX3Byb3RvYnVmLiQocGFydGl0aW9uKSksIFwKIAkJCQkkKHBhcnRpdGlvbiksIFwKIAkpKSBcCkBAIC0xNjIsNiArMTc5LDcgQEAKIAkJCSQoYWNvbmZpZ19zdG9yYWdlX3BhY2thZ2VfbWFwLiQocGFydGl0aW9uKSkgXAogCQkJJChhY29uZmlnX3N0b3JhZ2VfZmxhZ19tYXAuJChwYXJ0aXRpb24pKSBcCiAJCQkkKGFjb25maWdfc3RvcmFnZV9mbGFnX3ZhbC4kKHBhcnRpdGlvbikpIFwKKwkJCSQoYWNvbmZpZ19zdG9yYWdlX2ZsYWdfaW5mby4kKHBhcnRpdGlvbikpIFwKIAkJKSkKIAogQUxMX0RFRkFVTFRfSU5TVEFMTEVEX01PRFVMRVMgKz0gJChyZXF1aXJlZF9mbGFnc19maWxlcykKQEAgLTE4MSw0ICsxOTksNSBAQAogCSQoZXZhbCBhY29uZmlnX3N0b3JhZ2VfcGFja2FnZV9tYXAuJChwYXJ0aXRpb24pOj0pIFwKIAkkKGV2YWwgYWNvbmZpZ19zdG9yYWdlX2ZsYWdfbWFwLiQocGFydGl0aW9uKTo9KSBcCiAJJChldmFsIGFjb25maWdfc3RvcmFnZV9mbGFnX3ZhbC4kKHBhcnRpdGlvbik6PSkgXAorCSQoZXZhbCBhY29uZmlnX3N0b3JhZ2VfZmxhZ19pbmZvLiQocGFydGl0aW9uKTo9KSBcCiApCmRpZmYgLS1naXQgYS9jb3JlL3Byb2R1Y3QubWsgYi9jb3JlL3Byb2R1Y3QubWsKaW5kZXggZTM2YzFlZC4uY2NhYzc4YiAxMDA2NDQKLS0tIGEvY29yZS9wcm9kdWN0Lm1rCisrKyBiL2NvcmUvcHJvZHVjdC5tawpAQCAtMjg0LDYgKzI4NCw5IEBACiAjIFdoZXRoZXIgQVBFWCBzaG91bGQgYmUgY29tcHJlc3NlZCBvciBub3QKIF9wcm9kdWN0X3NpbmdsZV92YWx1ZV92YXJzICs9IFBST0RVQ1RfQ09NUFJFU1NFRF9BUEVYCiAKKyMgRGVmYXVsdCBmcyB0eXBlIGZvciBBUEVYIHBheWxvYWQgaW1hZ2UgKGFwZXhfcGF5bG9hZC5pbWcpCitfcHJvZHVjdF9zaW5nbGVfdmFsdWVfdmFycyArPSBQUk9EVUNUX0RFRkFVTFRfQVBFWF9QQVlMT0FEX1RZUEUKKwogIyBWTkRLIHZlcnNpb24gb2YgcHJvZHVjdCBwYXJ0aXRpb24uIEl0IGNhbiBiZSAnY3VycmVudCcgaWYgdGhlIHByb2R1Y3QKICMgcGFydGl0aW9ucyB1c2VzIFBMQVRGT1JNX1ZOREtfVkVSU0lPTi4KIF9wcm9kdWN0X3NpbmdsZV92YWx1ZV92YXJzICs9IFBST0RVQ1RfUFJPRFVDVF9WTkRLX1ZFUlNJT04KQEAgLTM2Niw2ICszNjksOCBAQAogX3Byb2R1Y3Rfc2luZ2xlX3ZhbHVlX3ZhcnMgKz0gUFJPRFVDVF9CVUlMRF9WQk1FVEFfSU1BR0UKIF9wcm9kdWN0X3NpbmdsZV92YWx1ZV92YXJzICs9IFBST0RVQ1RfQlVJTERfU1VQRVJfRU1QVFlfSU1BR0UKIF9wcm9kdWN0X3NpbmdsZV92YWx1ZV92YXJzICs9IFBST0RVQ1RfQlVJTERfUFZNRldfSU1BR0UKK19wcm9kdWN0X3NpbmdsZV92YWx1ZV92YXJzICs9IFBST0RVQ1RfQlVJTERfREVTS1RPUF9SRUNPVkVSWV9JTUFHRQorX3Byb2R1Y3Rfc2luZ2xlX3ZhbHVlX3ZhcnMgKz0gUFJPRFVDVF9CVUlMRF9ERVNLVE9QX1VQREFURV9JTUFHRQogCiAjIExpc3Qgb2YgYm9vdCBqYXJzIGRlbGl2ZXJlZCB2aWEgdXBkYXRhYmxlIEFQRVhlcywgZm9sbG93aW5nIHRoZSBzYW1lIGZvcm1hdCBhcwogIyBQUk9EVUNUX0JPT1RfSkFSUy4KQEAgLTM5MCwyMCArMzk1LDYgQEAKICMgSWYgc2V0LCBKYXZhIG1vZHVsZSBpbiBwcm9kdWN0IHBhcnRpdGlvbiBjYW5ub3QgdXNlIGhpZGRlbiBBUElzLgogX3Byb2R1Y3Rfc2luZ2xlX3ZhbHVlX3ZhcnMgKz0gUFJPRFVDVF9FTkZPUkNFX1BST0RVQ1RfUEFSVElUSU9OX0lOVEVSRkFDRQogCi0jIElmIHNldCwgb25seSBqYXZhX3Nka19saWJyYXJ5IGNhbiBiZSB1c2VkIGF0IGludGVyLXBhcnRpdGlvbiBkZXBlbmRlbmN5LgotIyBOb3RlOiBCdWlsZCBlcnJvciBpZiBCT0FSRF9WTkRLX1ZFUlNJT04gaXMgbm90IHNldCB3aGlsZQotIyAgICAgICBQUk9EVUNUX0VORk9SQ0VfSU5URVJfUEFSVElUSU9OX0pBVkFfU0RLX0xJQlJBUlkgaXMgdHJ1ZSwgYmVjYXVzZQotIyAgICAgICBQUk9EVUNUX0VORk9SQ0VfSU5URVJfUEFSVElUSU9OX0pBVkFfU0RLX0xJQlJBUlkgaGFzIG5vIG1lYW5pbmcgaWYKLSMgICAgICAgQk9BUkRfVk5ES19WRVJTSU9OIGlzIG5vdCBzZXQuCi0jIE5vdGU6IFdoZW4gUFJPRFVDVF9FTkZPUkNFX1BST0RVQ1RfUEFSVElUSU9OX0lOVEVSRkFDRSBpcyBub3Qgc2V0LCB0aGVyZSBhcmUKLSMgICAgICAgbm8gcmVzdHJpY3Rpb25zIGF0IGRlcGVuZGVuY3kgYmV0d2VlbiBzeXN0ZW0gYW5kIHByb2R1Y3QgcGFydGl0aW9uLgotX3Byb2R1Y3Rfc2luZ2xlX3ZhbHVlX3ZhcnMgKz0gUFJPRFVDVF9FTkZPUkNFX0lOVEVSX1BBUlRJVElPTl9KQVZBX1NES19MSUJSQVJZCi0KLSMgQWxsb3dsaXN0IGZvciBQUk9EVUNUX0VORk9SQ0VfSU5URVJfUEFSVElUSU9OX0pBVkFfU0RLX0xJQlJBUlkgb3B0aW9uLgotIyBMaXN0ZWQgbW9kdWxlcyBhcmUgYWxsb3dlZCBhdCBpbnRlci1wYXJ0aXRpb24gZGVwZW5kZW5jeSBldmVuIGlmIGl0IGlzbid0Ci0jIGEgamF2YV9zZGtfbGlicmFyeSBtb2R1bGUuCi1fcHJvZHVjdF9saXN0X3ZhcnMgKz0gUFJPRFVDVF9JTlRFUl9QQVJUSVRJT05fSkFWQV9MSUJSQVJZX0FMTE9XTElTVAotCiAjIEluc3RhbGwgYSBjb3B5IG9mIHRoZSBkZWJ1ZyBwb2xpY3kgdG8gdGhlIHN5c3RlbV9leHQgcGFydGl0aW9uLCBhbmQgYWxsb3cKICMgaW5pdC1zZWNvbmQtc3RhZ2UgdG8gbG9hZCBkZWJ1ZyBwb2xpY3kgZnJvbSBzeXN0ZW1fZXh0LgogIyBUaGlzIG9wdGlvbiBpcyBvbmx5IG1lYW50IHRvIGJlIHNldCBieSBjb21wbGlhbmNlIEdTSSB0YXJnZXRzLgpAQCAtNDM2LDggKzQyNyw5IEBACiAjIElmIHRydWUsIHRoZSBjZ3JvdXAgdjIgaGllcmFyY2h5IHdpbGwgYmUgc3BsaXQgaW50byBhcHBzL3N5c3RlbSBzdWJ0cmVlcwogX3Byb2R1Y3Rfc2luZ2xlX3ZhbHVlX3ZhcnMgKz0gUFJPRFVDVF9DR1JPVVBfVjJfU1lTX0FQUF9JU09MQVRJT05fRU5BQkxFRAogCi0jIExpc3Qgb2YgLmpzb24gZmlsZXMgdG8gYmUgbWVyZ2VkL2NvbXBpbGVkIGludG8gdmVuZG9yL2V0Yy9saW5rZXIuY29uZmlnLnBiCisjIExpc3Qgb2YgLmpzb24gZmlsZXMgdG8gYmUgbWVyZ2VkL2NvbXBpbGVkIGludG8gdmVuZG9yL2V0Yy9saW5rZXIuY29uZmlnLnBiIGFuZCBwcm9kdWN0L2V0Yy9saW5rZXIuY29uZmlnLnBiCiBfcHJvZHVjdF9saXN0X3ZhcnMgKz0gUFJPRFVDVF9WRU5ET1JfTElOS0VSX0NPTkZJR19GUkFHTUVOVFMKK19wcm9kdWN0X2xpc3RfdmFycyArPSBQUk9EVUNUX1BST0RVQ1RfTElOS0VSX0NPTkZJR19GUkFHTUVOVFMKIAogIyBXaGV0aGVyIHRvIHVzZSB1c2VyZmF1bHRmZCBHQy4KICMgUG9zc2libGUgdmFsdWVzIGFyZToKQEAgLTUwMyw2ICs0OTUsMTMgQEAKICMgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBzeXN0ZW1fbGlua2VyX2NvbmZpZy4KIF9wcm9kdWN0X2xpc3RfdmFycyArPSBQUk9EVUNUX0VYVFJBX1NUVUJfTElCUkFSSUVTCiAKKyMgSWYgc2V0IHRvIHRydWUsIGFsbCBBbmRyb2lkLm1rIGZpbGVzIHdpbGwgYmUgaWdub3JlZC4KK19wcm9kdWN0X3NpbmdsZV92YWx1ZV92YXJzICs9IFBST0RVQ1RfSUdOT1JFX0FMTF9BTkRST0lETUsKKyMgV2hlbiBQUk9EVUNUX0lHTk9SRV9BTExfQU5EUk9JRE1LIGlzIHNldCB0byB0cnVlLCB0aGlzIHZhcmlhYmxlIHdpbGwgYmUgdXNlZCB0byBhbGxvdyBzb21lIEFuZHJvaWQubWsgZmlsZXMuCitfcHJvZHVjdF9saXN0X3ZhcnMgKz0gUFJPRFVDVF9BTExPV0VEX0FORFJPSURNS19GSUxFUworIyBXaGVuIFBST0RVQ1RfSUdOT1JFX0FMTF9BTkRST0lETUsgaXMgc2V0IHRvIHRydWUsIHBhdGggb2YgZmlsZSB0aGF0IGNvbnRhaW5zIGEgbGlzdCBvZiBhbGxvd2VkIEFuZHJvaWQubWsgZmlsZXMKK19wcm9kdWN0X3NpbmdsZV92YWx1ZV92YXJzICs9IFBST0RVQ1RfQU5EUk9JRE1LX0FMTE9XTElTVF9GSUxFCisKIC5LQVRJX1JFQURPTkxZIDo9IF9wcm9kdWN0X3NpbmdsZV92YWx1ZV92YXJzIF9wcm9kdWN0X2xpc3RfdmFycwogX3Byb2R1Y3RfdmFyX2xpc3QgOj0kPSAkKF9wcm9kdWN0X3NpbmdsZV92YWx1ZV92YXJzKSAkKF9wcm9kdWN0X2xpc3RfdmFycykKIApkaWZmIC0tZ2l0IGEvY29yZS9wcm9kdWN0X2NvbmZpZy5tayBiL2NvcmUvcHJvZHVjdF9jb25maWcubWsKaW5kZXggNzM4ZDRjZi4uZjkzYjYzYyAxMDA2NDQKLS0tIGEvY29yZS9wcm9kdWN0X2NvbmZpZy5taworKysgYi9jb3JlL3Byb2R1Y3RfY29uZmlnLm1rCkBAIC00MjQsMTAgKzQyNCwxMiBAQAogICBlbmRpZgogZW5kaWYKIAotJChmb3JlYWNoIHBhaXIsJChQUk9EVUNUX0FQRVhfQk9PVF9KQVJTKSwgXAotICAkKGV2YWwgamFyIDo9ICQoY2FsbCB3b3JkLWNvbG9uLDIsJChwYWlyKSkpIFwKLSAgJChpZiAkKGZpbmRzdHJpbmcgJChqYXIpLCAkKFBST0RVQ1RfQk9PVF9KQVJTKSksIFwKLSAgICAkKGVycm9yIEEgamFyIGluIFBST0RVQ1RfQVBFWF9CT09UX0pBUlMgbXVzdCBub3QgYmUgaW4gUFJPRFVDVF9CT09UX0pBUlMsIGJ1dCAkKGphcikgaXMpKSkKKyQoZm9yZWFjaCBhcGV4cGFpciwkKFBST0RVQ1RfQVBFWF9CT09UX0pBUlMpLCBcCisgICQoZm9yZWFjaCBwbGF0Zm9ybXBhaXIsJChQUk9EVUNUX0JPT1RfSkFSUyksIFwKKyAgICAkKGV2YWwgYXBleGphciA6PSAkKGNhbGwgd29yZC1jb2xvbiwyLCQoYXBleHBhaXIpKSkgXAorICAgICQoZXZhbCBwbGF0Zm9ybWphciA6PSAkKGNhbGwgd29yZC1jb2xvbiwyLCQocGxhdGZvcm1wYWlyKSkpIFwKKyAgICAkKGlmICQoZmlsdGVyICQoYXBleGphciksICQocGxhdGZvcm1qYXIpKSwgXAorICAgICAgJChlcnJvciBBIGphciBpbiBQUk9EVUNUX0FQRVhfQk9PVF9KQVJTIG11c3Qgbm90IGJlIGluIFBST0RVQ1RfQk9PVF9KQVJTLCBidXQgJChhcGV4amFyKSBpcykpKSkKIAogRU5GT1JDRV9TWVNURU1fQ0VSVElGSUNBVEUgOj0gJChQUk9EVUNUX0VORk9SQ0VfQVJUSUZBQ1RfU1lTVEVNX0NFUlRJRklDQVRFX1JFUVVJUkVNRU5UKQogRU5GT1JDRV9TWVNURU1fQ0VSVElGSUNBVEVfQUxMT1dfTElTVCA6PSAkKFBST0RVQ1RfQVJUSUZBQ1RfU1lTVEVNX0NFUlRJRklDQVRFX1JFUVVJUkVNRU5UX0FMTE9XX0xJU1QpCkBAIC00NjYsMTcgKzQ2OCwyNiBAQAogICAgICQoZXZhbCBTQU5JVElaRVIuJChUQVJHRVRfUFJPRFVDVCkuJChtKS5DT05GSUcgOj0gJChjZikpKSkKIF9wc21jX21vZHVsZXMgOj0KIAotIyBSZXNldCBBREIga2V5cyBmb3Igbm9uLWRlYnVnZ2FibGUgYnVpbGRzCi1pZmVxICgsJChmaWx0ZXIgZW5nIHVzZXJkZWJ1ZywkKFRBUkdFVF9CVUlMRF9WQVJJQU5UKSkpCisjIFJlc2V0IEFEQiBrZXlzLiBJZiBSRUxFQVNFX0JVSUxEX1VTRV9WQVJJQU5UX0ZMQUdTIGlzIHNldCBsb29rIGZvcgorIyB0aGUgdmFsdWUgb2YgYSBkZWRpY2F0ZWQgZmxhZy4gT3RoZXJ3aXNlIGNoZWNrIGlmIGJ1aWxkIHZhcmlhbnQgaXMKKyMgbm9uLWRlYnVnZ2FibGUuCitpZm5lcSAoLCQoUkVMRUFTRV9CVUlMRF9VU0VfVkFSSUFOVF9GTEFHUykpCitpZm5lcSAoLCQoUkVMRUFTRV9CVUlMRF9QVVJHRV9QUk9EVUNUX0FEQl9LRVlTKSkKICAgUFJPRFVDVF9BREJfS0VZUyA6PQogZW5kaWYKK2Vsc2UgaWZlcSAoLCQoZmlsdGVyIGVuZyB1c2VyZGVidWcsJChUQVJHRVRfQlVJTERfVkFSSUFOVCkpKQorICBQUk9EVUNUX0FEQl9LRVlTIDo9CitlbmRpZgorCiBpZm5lcSAoJChmaWx0ZXItb3V0IDAgMSwkKHdvcmRzICQoUFJPRFVDVF9BREJfS0VZUykpKSwpCiAgICQoZXJyb3IgT25seSBvbmUgZmlsZSBtYXkgYmUgaW4gUFJPRFVDVF9BREJfS0VZUzogJChQUk9EVUNUX0FEQl9LRVlTKSkKIGVuZGlmCiAKICMgU2hvdyBhIHdhcm5pbmcgd2FsbCBvZiB0ZXh0IGlmIG5vbi1jb21wbGlhbmNlLUdTSSBwcm9kdWN0cyBzZXQgdGhpcyBvcHRpb24uCiBpZmRlZiBQUk9EVUNUX0lOU1RBTExfREVCVUdfUE9MSUNZX1RPX1NZU1RFTV9FWFQKLSAgaWZlcSAoLCQoZmlsdGVyIGdzaV9hcm0gZ3NpX2FybTY0IGdzaV94ODYgZ3NpX3g4Nl82NCBnc2lfY2FyX2FybTY0IGdzaV9jYXJfeDg2XzY0IGdzaV90dl9hcm0gZ3NpX3R2X2FybTY0LCQoUFJPRFVDVF9OQU1FKSkpCisgIGlmZXEgKCwkKGZpbHRlciBnc2lfYXJtIGdzaV9hcm02NCBnc2lfYXJtNjRfc29vbmdfc3lzdGVtIGdzaV94ODYgZ3NpX3g4Nl82NCBcCisgICAgICAgICAgICAgICAgICBnc2lfeDg2XzY0X3Nvb25nX3N5c3RlbSBnc2lfY2FyX2FybTY0IGdzaV9jYXJfeDg2XzY0IFwKKyAgICAgICAgICAgICAgICAgIGdzaV90dl9hcm0gZ3NpX3R2X2FybTY0LCQoUFJPRFVDVF9OQU1FKSkpCiAgICAgJCh3YXJuaW5nIFBST0RVQ1RfSU5TVEFMTF9ERUJVR19QT0xJQ1lfVE9fU1lTVEVNX0VYVCBpcyBzZXQgYnV0IFwKICAgICAgIFBST0RVQ1RfTkFNRSAoJChQUk9EVUNUX05BTUUpKSBkb2Vzbid0IGxvb2sgbGlrZSBhIEdTSSBmb3IgY29tcGxpYW5jZSBcCiAgICAgICB0ZXN0aW5nLiBUaGlzIGlzIGEgc3BlY2lhbCBjb25maWd1cmF0aW9uIGZvciBjb21wbGlhbmNlIEdTSSwgc28gZG8gbWFrZSBcCkBAIC01MzIsNiArNTQzLDE3IEBACiAgIFBST0RVQ1RfQ09NUFJFU1NFRF9BUEVYIDo9ICQoT1ZFUlJJREVfUFJPRFVDVF9DT01QUkVTU0VEX0FQRVgpCiBlbmRpZgogCitpZmRlZiBPVkVSUklERV9QUk9EVUNUX0RFRkFVTFRfQVBFWF9QQVlMT0FEX1RZUEUKKyAgUFJPRFVDVF9ERUZBVUxUX0FQRVhfUEFZTE9BRF9UWVBFIDo9ICQoT1ZFUlJJREVfUFJPRFVDVF9ERUZBVUxUX0FQRVhfUEFZTE9BRF9UWVBFKQorZWxzZSBpZmVxICgkKFBST0RVQ1RfREVGQVVMVF9BUEVYX1BBWUxPQURfVFlQRSksKQorICAjIFVzZSBleHQ0IGFzIGEgZGVmYXVsdCBwYXlsb2FkIGZzIHR5cGUKKyAgUFJPRFVDVF9ERUZBVUxUX0FQRVhfUEFZTE9BRF9UWVBFIDo9IGV4dDQKK2VuZGlmCitpZmVxICgkKGZpbHRlciBleHQ0IGVyb2ZzLCQoUFJPRFVDVF9ERUZBVUxUX0FQRVhfUEFZTE9BRF9UWVBFKSksKQorICAkKGVycm9yIFBST0RVQ1RfREVGQVVMVF9BUEVYX1BBWUxPQURfVFlQRSBzaG91bGQgYmUgZWl0aGVyIGVyb2ZzIG9yIGV4dDQsXAorICAgIG5vdCAkKFBST0RVQ1RfREVGQVVMVF9BUEVYX1BBWUxPQURfVFlQRSkuKQorZW5kaWYKKwogJChLQVRJX29ic29sZXRlX3ZhciBPVkVSUklERV9QUk9EVUNUX0VYVFJBX1ZOREtfVkVSU0lPTlMgXAogICAgICxVc2UgUFJPRFVDVF9FWFRSQV9WTkRLX1ZFUlNJT05TIGluc3RlYWQpCiAKQEAgLTYwMiw3ICs2MjQsMTIgQEAKICAgICAjIFZlbmRvcnMgd2l0aCBHUkYgbXVzdCBkZWZpbmUgQk9BUkRfU0hJUFBJTkdfQVBJX0xFVkVMIGZvciB0aGUgdmVuZG9yIEFQSSBsZXZlbC4KICAgICAjIEluIHRoaXMgY2FzZSwgdGhlIFZTUiBBUEkgbGV2ZWwgaXMgdGhlIG1pbmltdW0gb2YgdGhlIFBST0RVQ1RfU0hJUFBJTkdfQVBJX0xFVkVMCiAgICAgIyBhbmQgUkVMRUFTRV9CT0FSRF9BUElfTEVWRUwKLSAgICBWU1JfVkVORE9SX0FQSV9MRVZFTCA6PSAkKGNhbGwgbWF0aF9taW4sJChWU1JfVkVORE9SX0FQSV9MRVZFTCksJChSRUxFQVNFX0JPQVJEX0FQSV9MRVZFTCkpCisgICAgYm9hcmRfYXBpX2xldmVsIDo9ICQoUkVMRUFTRV9CT0FSRF9BUElfTEVWRUwpCisgICAgaWZkZWYgQk9BUkRfQVBJX0xFVkVMX1BST1BfT1ZFUlJJREUKKyAgICAgIGJvYXJkX2FwaV9sZXZlbCA6PSAkKEJPQVJEX0FQSV9MRVZFTF9QUk9QX09WRVJSSURFKQorICAgIGVuZGlmCisgICAgVlNSX1ZFTkRPUl9BUElfTEVWRUwgOj0gJChjYWxsIG1hdGhfbWluLCQoVlNSX1ZFTkRPUl9BUElfTEVWRUwpLCQoYm9hcmRfYXBpX2xldmVsKSkKKyAgICBib2FyZF9hcGlfbGV2ZWwgOj0KICAgZW5kaWYKIGVuZGlmCiAuS0FUSV9SRUFET05MWSA6PSBWU1JfVkVORE9SX0FQSV9MRVZFTApkaWZmIC0tZ2l0IGEvY29yZS9wcm9ndWFyZC5mbGFncyBiL2NvcmUvcHJvZ3VhcmQuZmxhZ3MKaW5kZXggYWE0MDZiOS4uNTE0OGU1NiAxMDA2NDQKLS0tIGEvY29yZS9wcm9ndWFyZC5mbGFncworKysgYi9jb3JlL3Byb2d1YXJkLmZsYWdzCkBAIC0zOCw2ICszOCwxNyBAQAogICBAY29tLmFuZHJvaWQuaW50ZXJuYWwuYW5ub3RhdGlvbnMuS2VlcEZvcldlYWtSZWZlcmVuY2UgPGZpZWxkcz47CiB9CiAKKyMgTmVlZGVkIHRvIGVuc3VyZSBjYWxsYmFjayBmaWVsZCByZWZlcmVuY2VzIGFyZSBrZXB0IGluIHRoZWlyIHJlc3BlY3RpdmUKKyMgb3duaW5nIGNsYXNzZXMgd2hlbiB0aGUgZG93bnN0cmVhbSBjYWxsYmFjayByZWdpc3RyYXJzIG9ubHkgc3RvcmUgd2VhayByZWZzLgorLWlmIEBjb20uYW5kcm9pZC5pbnRlcm5hbC5hbm5vdGF0aW9ucy5XZWFrbHlSZWZlcmVuY2VkQ2FsbGJhY2sgY2xhc3MgKgorLWtlZXBjbGFzc21lbWJlcnMsYWxsb3dhY2Nlc3Ntb2RpZmljYXRpb24gY2xhc3MgKiB7CisgIDwxPiAqOworfQorLWlmIGNsYXNzICogZXh0ZW5kcyBAY29tLmFuZHJvaWQuaW50ZXJuYWwuYW5ub3RhdGlvbnMuV2Vha2x5UmVmZXJlbmNlZENhbGxiYWNrICoqCista2VlcGNsYXNzbWVtYmVycyxhbGxvd2FjY2Vzc21vZGlmaWNhdGlvbiBjbGFzcyAqIHsKKyAgPDE+ICo7Cit9CisKICMgVW5kZXJzdGFuZCB0aGUgY29tbW9uIEBLZWVwIGFubm90YXRpb24gZnJvbSB2YXJpb3VzIEFuZHJvaWQgcGFja2FnZXM6CiAjICAqIGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uCiAjICAqIGFuZHJvaWR4LmFubm90YXRpb24KZGlmZiAtLWdpdCBhL2NvcmUvcHJvamVjdF9kZWZpbml0aW9ucy5tayBiL2NvcmUvcHJvamVjdF9kZWZpbml0aW9ucy5tawppbmRleCA1NzI4YjY3Li4xODRiMDNlIDEwMDY0NAotLS0gYS9jb3JlL3Byb2plY3RfZGVmaW5pdGlvbnMubWsKKysrIGIvY29yZS9wcm9qZWN0X2RlZmluaXRpb25zLm1rCkBAIC0yMiwzICsyMiw2IEBACiAjIEluY2x1ZGUgZGVmaW5pdGlvbnMgZm9yIHByZWJ1aWx0IFNESywgaWYgcHJlc2VudC4KICMKIC1pbmNsdWRlIHByZWJ1aWx0cy9zZGsvY3VycmVudC9kZWZpbml0aW9ucy5taworCisjIFNEVi1zcGVjaWZpYyBjb25maWcuCistaW5jbHVkZSBzeXN0ZW0vc29mdHdhcmVfZGVmaW5lZF92ZWhpY2xlL3BsYXRmb3JtL2NvbmZpZy5tawpkaWZmIC0tZ2l0IGEvY29yZS9yYXZlbndvb2RfdGVzdF9jb25maWdfdGVtcGxhdGUueG1sIGIvY29yZS9yYXZlbndvb2RfdGVzdF9jb25maWdfdGVtcGxhdGUueG1sCmluZGV4IDJmMjFiYWUuLjllOWRkNzYgMTAwNjQ0Ci0tLSBhL2NvcmUvcmF2ZW53b29kX3Rlc3RfY29uZmlnX3RlbXBsYXRlLnhtbAorKysgYi9jb3JlL3JhdmVud29vZF90ZXN0X2NvbmZpZ190ZW1wbGF0ZS54bWwKQEAgLTIyLDYgKzIyLDcgQEAKICAgICA8b3B0aW9uIG5hbWU9InVzZS1yYXZlbndvb2QtcmVzb3VyY2VzIiB2YWx1ZT0idHJ1ZSIgLz4KICAgICA8b3B0aW9uIG5hbWU9ImV4Y2x1ZGUtcGF0aHMiIHZhbHVlPSJqYXZhIiAvPgogICAgIDxvcHRpb24gbmFtZT0ibnVsbC1kZXZpY2UiIHZhbHVlPSJ0cnVlIiAvPgorICAgIDxvcHRpb24gbmFtZT0iZG8tbm90LXN3YWxsb3ctcnVubmVyLWVycm9ycyIgdmFsdWU9InRydWUiIC8+CiAKICAgICB7RVhUUkFfQ09ORklHU30KIApkaWZmIC0tZ2l0IGEvY29yZS9yb2JvbGVjdHJpY190ZXN0X2NvbmZpZ190ZW1wbGF0ZS54bWwgYi9jb3JlL3JvYm9sZWN0cmljX3Rlc3RfY29uZmlnX3RlbXBsYXRlLnhtbAppbmRleCBiMWQwYzJmLi4xOTU2YjZlIDEwMDY0NAotLS0gYS9jb3JlL3JvYm9sZWN0cmljX3Rlc3RfY29uZmlnX3RlbXBsYXRlLnhtbAorKysgYi9jb3JlL3JvYm9sZWN0cmljX3Rlc3RfY29uZmlnX3RlbXBsYXRlLnhtbApAQCAtMjIsNiArMjIsMTMgQEAKICAgICA8b3B0aW9uIG5hbWU9ImV4Y2x1ZGUtcGF0aHMiIHZhbHVlPSJqYXZhIiAvPgogICAgIDxvcHRpb24gbmFtZT0idXNlLXJvYm9sZWN0cmljLXJlc291cmNlcyIgdmFsdWU9InRydWUiIC8+CiAKKyAgICA8IS0tIGF0dGVtcHQgdG8gYWx3YXlzIHNob3cgVHJhZGVmZWQgZXJyb3JzIC0tPgorICAgIDxvcHRpb24gbmFtZT0iZG8tbm90LXN3YWxsb3ctcnVubmVyLWVycm9ycyIgdmFsdWU9InRydWUiIC8+CisKKyAgICA8IS0tIHByZXZlbnQgVHJhZGVmZWQgZnJvbSBoYW5naW5nIGluZGVmaW5pdGVseSBpbiBDSSAtLT4KKyAgICA8b3B0aW9uIG5hbWU9InNvY2tldC10aW1lb3V0IiB2YWx1ZT0iNjAwMDAwIiAvPgorICAgIDxvcHRpb24gbmFtZT0idGVzdC1jYXNlLXRpbWVvdXQiIHZhbHVlPSIybSIgLz4KKwogICAgIHtFWFRSQV9DT05GSUdTfQogCiAgICAgPHRlc3QgY2xhc3M9ImNvbS5hbmRyb2lkLnRyYWRlZmVkLnRlc3R0eXBlLklzb2xhdGVkSG9zdFRlc3QiID4KQEAgLTMzLDUgKzQwLDE1IEBACiAgICAgICAgIDxvcHRpb24gbmFtZT0iamF2YS1mbGFncyIgdmFsdWU9Ii0tYWRkLW9wZW5zPWphdmEuYmFzZS9qZGsuaW50ZXJuYWwudXRpbC5yYW5kb209QUxMLVVOTkFNRUQiLz4KICAgICAgICAgPCEtLSBiLzI1MTM4NzI1NSAtLT4KICAgICAgICAgPG9wdGlvbiBuYW1lPSJqYXZhLWZsYWdzIiB2YWx1ZT0iLS1hZGQtb3BlbnM9amF2YS5iYXNlL2phdmEuaW89QUxMLVVOTkFNRUQiLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJqYXZhLWZsYWdzIiB2YWx1ZT0iLS1hZGQtb3BlbnM9amF2YS5iYXNlL2phdmEubmV0PUFMTC1VTk5BTUVEIi8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iamF2YS1mbGFncyIgdmFsdWU9Ii0tYWRkLW9wZW5zPWphdmEuYmFzZS9qYXZhLm5pbz1BTEwtVU5OQU1FRCIvPiA8IS0tIHJlcXVpcmVkIGZvciBTaGFkb3dWTVJ1bnRpbWUgLS0+CisgICAgICAgIDxvcHRpb24gbmFtZT0iamF2YS1mbGFncyIgdmFsdWU9Ii0tYWRkLW9wZW5zPWphdmEuYmFzZS9qYXZhLnNlY3VyaXR5PUFMTC1VTk5BTUVEIi8+CisgICAgICAgIDxvcHRpb24gbmFtZT0iamF2YS1mbGFncyIgdmFsdWU9Ii0tYWRkLW9wZW5zPWphdmEuYmFzZS9qYXZhLnRleHQ9QUxMLVVOTkFNRUQiLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJqYXZhLWZsYWdzIiB2YWx1ZT0iLS1hZGQtb3BlbnM9amF2YS5iYXNlL2phdmEudXRpbD1BTEwtVU5OQU1FRCIvPgorICAgICAgICA8b3B0aW9uIG5hbWU9ImphdmEtZmxhZ3MiIHZhbHVlPSItLWFkZC1vcGVucz1qYXZhLmJhc2UvamRrLmludGVybmFsLmFjY2Vzcz1BTEwtVU5OQU1FRCIvPgorICAgICAgICA8b3B0aW9uIG5hbWU9ImphdmEtZmxhZ3MiIHZhbHVlPSItLWFkZC1vcGVucz1qYXZhLmRlc2t0b3AvamF2YS5hd3QuZm9udD1BTEwtVU5OQU1FRCIvPgorICAgICAgICA8b3B0aW9uIG5hbWU9ImphdmEtZmxhZ3MiIHZhbHVlPSItLWFkZC1vcGVucz1qZGsuY29tcGlsZXIvY29tLnN1bi50b29scy5qYXZhYy5hcGk9QUxMLVVOTkFNRUQiLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJqYXZhLWZsYWdzIiB2YWx1ZT0iLS1hZGQtb3BlbnM9amRrLmNvbXBpbGVyL2NvbS5zdW4udG9vbHMuamF2YWMubWFpbj1BTEwtVU5OQU1FRCIvPgorICAgICAgICA8b3B0aW9uIG5hbWU9ImphdmEtZmxhZ3MiIHZhbHVlPSItLWFkZC1vcGVucz1qZGsuY29tcGlsZXIvY29tLnN1bi50b29scy5qYXZhYy51dGlsPUFMTC1VTk5BTUVEIi8+CiAgICAgPC90ZXN0PgogPC9jb25maWd1cmF0aW9uPgpkaWZmIC0tZ2l0IGEvY29yZS9zb29uZ19hcHBfcHJlYnVpbHQubWsgYi9jb3JlL3Nvb25nX2FwcF9wcmVidWlsdC5tawppbmRleCBkZjFjZjJkLi5hYjkyMjdmIDEwMDY0NAotLS0gYS9jb3JlL3Nvb25nX2FwcF9wcmVidWlsdC5taworKysgYi9jb3JlL3Nvb25nX2FwcF9wcmVidWlsdC5tawpAQCAtMjI0LDMwICsyMjQsNiBAQAogaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvbGlua190eXBlLm1rCiBlbmRpZiAjICFMT0NBTF9JU19IT1NUX01PRFVMRQogCi1pZmVxICgsJChmaWx0ZXIgdGVzdHMsJChMT0NBTF9NT0RVTEVfVEFHUykpKQotICBpZmRlZiBMT0NBTF9TT09OR19ERVZJQ0VfUlJPX0RJUlMKLSAgICAkKGNhbGwgYXBwZW5kX2VuZm9yY2VfcnJvX3NvdXJjZXMsIFwKLSAgICAgICAgJChteV9yZWdpc3Rlcl9uYW1lKSwgXAotICAgICAgICBmYWxzZSwgXAotICAgICAgICAkKExPQ0FMX0ZVTExfTUFOSUZFU1RfRklMRSksIFwKLSAgICAgICAgJChpZiAkKExPQ0FMX0VYUE9SVF9QQUNLQUdFX1JFU09VUkNFUyksdHJ1ZSxmYWxzZSksIFwKLSAgICAgICAgJChMT0NBTF9TT09OR19ERVZJQ0VfUlJPX0RJUlMpLCBcCi0gICAgICAgIHZlbmRvciBcCi0gICAgKQotICBlbmRpZgotCi0gIGlmZGVmIExPQ0FMX1NPT05HX1BST0RVQ1RfUlJPX0RJUlMKLSAgICAkKGNhbGwgYXBwZW5kX2VuZm9yY2VfcnJvX3NvdXJjZXMsIFwKLSAgICAgICAgJChteV9yZWdpc3Rlcl9uYW1lKSwgXAotICAgICAgICBmYWxzZSwgXAotICAgICAgICAkKExPQ0FMX0ZVTExfTUFOSUZFU1RfRklMRSksIFwKLSAgICAgICAgJChpZiAkKExPQ0FMX0VYUE9SVF9QQUNLQUdFX1JFU09VUkNFUyksdHJ1ZSxmYWxzZSksIFwKLSAgICAgICAgJChMT0NBTF9TT09OR19QUk9EVUNUX1JST19ESVJTKSwgXAotICAgICAgICBwcm9kdWN0IFwKLSAgICApCi0gIGVuZGlmCi1lbmRpZgotCiBpZmRlZiBMT0NBTF9QUkVCVUlMVF9DT1ZFUkFHRV9BUkNISVZFCiAgIG15X2NvdmVyYWdlX2RpciA6PSAkKFRBUkdFVF9PVVRfQ09WRVJBR0UpLyQocGF0c3Vic3QgJChQUk9EVUNUX09VVCkvJSwlLCQobXlfbW9kdWxlX3BhdGgpKQogICBteV9jb3ZlcmFnZV9jb3B5X3BhaXJzIDo9ICQoZm9yZWFjaCBmLCQoTE9DQUxfUFJFQlVJTFRfQ09WRVJBR0VfQVJDSElWRSksJChmKTokKG15X2NvdmVyYWdlX2RpcikvJChub3RkaXIgICQoZikpKQpkaWZmIC0tZ2l0IGEvY29yZS9zb29uZ19jb25maWcubWsgYi9jb3JlL3Nvb25nX2NvbmZpZy5tawppbmRleCAxZTYzODhhLi5hMDA3ODg4IDEwMDY0NAotLS0gYS9jb3JlL3Nvb25nX2NvbmZpZy5taworKysgYi9jb3JlL3Nvb25nX2NvbmZpZy5tawpAQCAtMTUwLDYgKzE1MCw3IEBACiAkKGNhbGwgYWRkX2pzb25fc3RyLCAgQnRDb25maWdJbmNsdWRlRGlyLCAgICAgICAgICAgICAgICAkKEJPQVJEX0JMVUVUT09USF9CRFJPSURfQlVJTERDRkdfSU5DTFVERV9ESVIpKQogJChjYWxsIGFkZF9qc29uX2xpc3QsIERldmljZUtlcm5lbEhlYWRlcnMsICAgICAgICAgICAgICAgJChUQVJHRVRfREVWSUNFX0tFUk5FTF9IRUFERVJTKSAkKFRBUkdFVF9CT0FSRF9LRVJORUxfSEVBREVSUykgJChUQVJHRVRfUFJPRFVDVF9LRVJORUxfSEVBREVSUykpCiAkKGNhbGwgYWRkX2pzb25fc3RyLCAgVmVuZG9yQXBpTGV2ZWwsICAgICAgICAgICAgICAgICAgICAkKEJPQVJEX0FQSV9MRVZFTCkpCiskKGNhbGwgYWRkX2pzb25fc3RyLCAgVmVuZG9yQXBpTGV2ZWxQcm9wT3ZlcnJpZGUsICAgICAgICAkKEJPQVJEX0FQSV9MRVZFTF9QUk9QX09WRVJSSURFKSkKICQoY2FsbCBhZGRfanNvbl9saXN0LCBFeHRyYVZuZGtWZXJzaW9ucywgICAgICAgICAgICAgICAgICQoUFJPRFVDVF9FWFRSQV9WTkRLX1ZFUlNJT05TKSkKICQoY2FsbCBhZGRfanNvbl9saXN0LCBEZXZpY2VTeXN0ZW1TZGtWZXJzaW9ucywgICAgICAgICAgICQoQk9BUkRfU1lTVEVNU0RLX1ZFUlNJT05TKSkKICQoY2FsbCBhZGRfanNvbl9saXN0LCBQbGF0Zm9ybV9zeXN0ZW1zZGtfdmVyc2lvbnMsICAgICAgICQoUExBVEZPUk1fU1lTVEVNU0RLX1ZFUlNJT05TKSkKQEAgLTE4MiwxMCArMTgzLDE5IEBACiAKICQoY2FsbCBhZGRfanNvbl9ib29sLCBVbWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZmlsdGVyIHRydWUsJChUQVJHRVRfVVNFUl9NT0RFX0xJTlVYKSkpCiAkKGNhbGwgYWRkX2pzb25fc3RyLCAgVmVuZG9yUGF0aCwgICAgICAgICAgICAgICAgICAgICAgICAkKFRBUkdFVF9DT1BZX09VVF9WRU5ET1IpKQorJChjYWxsIGFkZF9qc29uX3N0ciwgIFZlbmRvckRsa21QYXRoLCAgICAgICAgICAgICAgICAgICAgJChUQVJHRVRfQ09QWV9PVVRfVkVORE9SX0RMS00pKQorJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJ1aWxkaW5nVmVuZG9ySW1hZ2UsICAgICAgICAgICAgICAgJChCVUlMRElOR19WRU5ET1JfSU1BR0UpKQogJChjYWxsIGFkZF9qc29uX3N0ciwgIE9kbVBhdGgsICAgICAgICAgICAgICAgICAgICAgICAgICAgJChUQVJHRVRfQ09QWV9PVVRfT0RNKSkKKyQoY2FsbCBhZGRfanNvbl9ib29sLCBCdWlsZGluZ09kbUltYWdlLCAgICAgICAgICAgICAgICAgICQoQlVJTERJTkdfT0RNX0lNQUdFKSkKKyQoY2FsbCBhZGRfanNvbl9zdHIsICBPZG1EbGttUGF0aCwgICAgICAgICAgICAgICAgICAgICAgICQoVEFSR0VUX0NPUFlfT1VUX09ETV9ETEtNKSkKICQoY2FsbCBhZGRfanNvbl9zdHIsICBQcm9kdWN0UGF0aCwgICAgICAgICAgICAgICAgICAgICAgICQoVEFSR0VUX0NPUFlfT1VUX1BST0RVQ1QpKQorJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJ1aWxkaW5nUHJvZHVjdEltYWdlLCAgICAgICAgICAgICAgJChCVUlMRElOR19QUk9EVUNUX0lNQUdFKSkKICQoY2FsbCBhZGRfanNvbl9zdHIsICBTeXN0ZW1FeHRQYXRoLCAgICAgICAgICAgICAgICAgICAgICQoVEFSR0VUX0NPUFlfT1VUX1NZU1RFTV9FWFQpKQorJChjYWxsIGFkZF9qc29uX3N0ciwgIFN5c3RlbURsa21QYXRoLCAgICAgICAgICAgICAgICAgICAgJChUQVJHRVRfQ09QWV9PVVRfU1lTVEVNX0RMS00pKQorJChjYWxsIGFkZF9qc29uX3N0ciwgIE9lbVBhdGgsICAgICAgICAgICAgICAgICAgICAgICAgICAgJChUQVJHRVRfQ09QWV9PVVRfT0VNKSkKICQoY2FsbCBhZGRfanNvbl9ib29sLCBNaW5pbWl6ZUphdmFEZWJ1Z0luZm8sICAgICAgICAgICAgICQoZmlsdGVyIHRydWUsJChQUk9EVUNUX01JTklNSVpFX0pBVkFfREVCVUdfSU5GTykpKQorJChjYWxsIGFkZF9qc29uX3N0ciwgIFJlY292ZXJ5UGF0aCwgICAgICAgICAgICAgICAgICAgICAgJChUQVJHRVRfQ09QWV9PVVRfUkVDT1ZFUlkpKQorJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJ1aWxkaW5nUmVjb3ZlcnlJbWFnZSwgICAgICAgICAgICAgJChCVUlMRElOR19SRUNPVkVSWV9JTUFHRSkpCiAKICQoY2FsbCBhZGRfanNvbl9ib29sLCBVc2VHb21hLCAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZmlsdGVyLW91dCBmYWxzZSwkKFVTRV9HT01BKSkpCiAkKGNhbGwgYWRkX2pzb25fYm9vbCwgVXNlUkJFLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGZpbHRlci1vdXQgZmFsc2UsJChVU0VfUkJFKSkpCkBAIC0yNjUsMTQgKzI3NSw4IEBACiAkKGNhbGwgYWRkX2pzb25fYm9vbCwgRW5mb3JjZVByb2R1Y3RQYXJ0aXRpb25JbnRlcmZhY2UsICAkKGZpbHRlciB0cnVlLCQoUFJPRFVDVF9FTkZPUkNFX1BST0RVQ1RfUEFSVElUSU9OX0lOVEVSRkFDRSkpKQogJChjYWxsIGFkZF9qc29uX3N0ciwgIERldmljZUN1cnJlbnRBcGlMZXZlbEZvclZlbmRvck1vZHVsZXMsICAkKEJPQVJEX0NVUlJFTlRfQVBJX0xFVkVMX0ZPUl9WRU5ET1JfTU9EVUxFUykpCiAKLSQoY2FsbCBhZGRfanNvbl9ib29sLCBFbmZvcmNlSW50ZXJQYXJ0aXRpb25KYXZhU2RrTGlicmFyeSwgJChmaWx0ZXIgdHJ1ZSwkKFBST0RVQ1RfRU5GT1JDRV9JTlRFUl9QQVJUSVRJT05fSkFWQV9TREtfTElCUkFSWSkpKQotJChjYWxsIGFkZF9qc29uX2xpc3QsIEludGVyUGFydGl0aW9uSmF2YUxpYnJhcnlBbGxvd0xpc3QsICQoUFJPRFVDVF9JTlRFUl9QQVJUSVRJT05fSkFWQV9MSUJSQVJZX0FMTE9XTElTVCkpCi0KICQoY2FsbCBhZGRfanNvbl9ib29sLCBDb21wcmVzc2VkQXBleCwgJChmaWx0ZXIgdHJ1ZSwkKFBST0RVQ1RfQ09NUFJFU1NFRF9BUEVYKSkpCi0KLWlmbmRlZiBBUEVYX0JVSUxEX0ZPUl9QUkVfU19ERVZJQ0VTCi0kKGNhbGwgYWRkX2pzb25fYm9vbCwgVHJpbW1lZEFwZXgsICQoZmlsdGVyIHRydWUsJChQUk9EVUNUX1RSSU1NRURfQVBFWCkpKQotZW5kaWYKKyQoY2FsbCBhZGRfanNvbl9zdHIsIERlZmF1bHRBcGV4UGF5bG9hZFR5cGUsICQoUFJPRFVDVF9ERUZBVUxUX0FQRVhfUEFZTE9BRF9UWVBFKSkKIAogJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJvYXJkVXNlc1JlY292ZXJ5QXNCb290LCAkKGZpbHRlciB0cnVlLCQoQk9BUkRfVVNFU19SRUNPVkVSWV9BU19CT09UKSkpCiAKQEAgLTMxOSw2ICszMjMsOCBAQAogCiAkKGNhbGwgYWRkX2pzb25fc3RyLCAgUHJvZHVjdE1hbnVmYWN0dXJlciwgJChQUk9EVUNUX01BTlVGQUNUVVJFUikpCiAkKGNhbGwgYWRkX2pzb25fc3RyLCAgUHJvZHVjdEJyYW5kLCAgICAgICAgJChQUk9EVUNUX0JSQU5EKSkKKyQoY2FsbCBhZGRfanNvbl9zdHIsICBQcm9kdWN0RGV2aWNlLCAgICAgICAkKFBST0RVQ1RfREVWSUNFKSkKKyQoY2FsbCBhZGRfanNvbl9zdHIsICBQcm9kdWN0TW9kZWwsICAgICAgICAkKFBST0RVQ1RfTU9ERUwpKQogCiAkKGNhbGwgYWRkX2pzb25fc3RyLCBSZWxlYXNlVmVyc2lvbiwgICAgJChfUkVMRUFTRV9WRVJTSU9OKSkKICQoY2FsbCBhZGRfanNvbl9saXN0LCBSZWxlYXNlQWNvbmZpZ1ZhbHVlU2V0cywgICAgJChSRUxFQVNFX0FDT05GSUdfVkFMVUVfU0VUUykpCkBAIC0zNTAsNiArMzU2LDkgQEAKICQoY2FsbCBhZGRfanNvbl9saXN0LCBTeXN0ZW1FeHRQcm9wRmlsZXMsICQoVEFSR0VUX1NZU1RFTV9FWFRfUFJPUCkpCiAkKGNhbGwgYWRkX2pzb25fbGlzdCwgUHJvZHVjdFByb3BGaWxlcywgJChUQVJHRVRfUFJPRFVDVF9QUk9QKSkKICQoY2FsbCBhZGRfanNvbl9saXN0LCBPZG1Qcm9wRmlsZXMsICQoVEFSR0VUX09ETV9QUk9QKSkKKyQoY2FsbCBhZGRfanNvbl9saXN0LCBWZW5kb3JQcm9wRmlsZXMsICQoVEFSR0VUX1ZFTkRPUl9QUk9QKSkKKworJChjYWxsIGFkZF9qc29uX3N0ciwgRXh0cmFBbGxvd2VkRGVwc1R4dCwgJChFWFRSQV9BTExPV0VEX0RFUFNfVFhUKSkKIAogIyBEbyBub3Qgc2V0IEFydFRhcmdldEluY2x1ZGVEZWJ1Z0J1aWxkIGludG8gYW55IHZhbHVlIGlmIFBST0RVQ1RfQVJUX1RBUkdFVF9JTkNMVURFX0RFQlVHX0JVSUxEIGlzIG5vdCBzZXQsCiAjIHRvIGhhdmUgdGhlIHNhbWUgYmVoYXZpb3IgZnJvbSBydW50aW1lX2xpYmFydC5tay4KQEAgLTM2Nyw2ICszNzYsMTc5IEBACiAkKGNhbGwgYWRkX2pzb25fbGlzdCwgQm9hcmRBdmJTeXN0ZW1BZGRIYXNodHJlZUZvb3RlckFyZ3MsICQoQk9BUkRfQVZCX1NZU1RFTV9BRERfSEFTSFRSRUVfRk9PVEVSX0FSR1MpKQogJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJvYXJkQXZiRW5hYmxlLCAkKGZpbHRlciB0cnVlLCQoQk9BUkRfQVZCX0VOQUJMRSkpKQogCiskKGNhbGwgYWRkX2pzb25fc3RyLCBBZGJLZXlzLCAkKFBST0RVQ1RfQURCX0tFWVMpKQorCiskKGNhbGwgYWRkX2pzb25fbWFwLCBQYXJ0aXRpb25WYXJzRm9yU29vbmdNaWdyYXRpb25Pbmx5RG9Ob3RVc2UpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsICBQcm9kdWN0RGlyZWN0b3J5LCAgICAkKGRpciAkKElOVEVSTkFMX1BST0RVQ1QpKSkKKworICAkKGNhbGwgYWRkX2pzb25fbWFwLFBhcnRpdGlvblF1YWxpZmllZFZhcmlhYmxlcykKKyAgJChmb3JlYWNoIGltYWdlX3R5cGUsSU5JVF9CT09UIEJPT1QgVkVORE9SX0JPT1QgU1lTVEVNIFZFTkRPUiBDQUNIRSBVU0VSREFUQSBQUk9EVUNUIFNZU1RFTV9FWFQgT0VNIE9ETSBWRU5ET1JfRExLTSBPRE1fRExLTSBTWVNURU1fRExLTSwgXAorICAgICQoY2FsbCBhZGRfanNvbl9tYXAsJChjYWxsIHRvLWxvd2VyLCQoaW1hZ2VfdHlwZSkpKSBcCisgICAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJ1aWxkaW5nSW1hZ2UsICQoZmlsdGVyIHRydWUsJChCVUlMRElOR18kKGltYWdlX3R5cGUpX0lNQUdFKSkpIFwKKyAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEVyb2ZzQ29tcHJlc3NvciwgJChCT0FSRF8kKGltYWdlX3R5cGUpSU1BR0VfRVJPRlNfQ09NUFJFU1NPUikpIFwKKyAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEVyb2ZzQ29tcHJlc3NIaW50cywgJChCT0FSRF8kKGltYWdlX3R5cGUpSU1BR0VfRVJPRlNfQ09NUFJFU1NfSElOVFMpKSBcCisgICAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRFcm9mc1BjbHVzdGVyU2l6ZSwgJChCT0FSRF8kKGltYWdlX3R5cGUpSU1BR0VfRVJPRlNfUENMVVNURVJfU0laRSkpIFwKKyAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEV4dGZzSW5vZGVDb3VudCwgJChCT0FSRF8kKGltYWdlX3R5cGUpSU1BR0VfRVhURlNfSU5PREVfQ09VTlQpKSBcCisgICAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRFeHRmc1JzdlBjdCwgJChCT0FSRF8kKGltYWdlX3R5cGUpSU1BR0VfRVhURlNfUlNWX1BDVCkpIFwKKyAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEYyZnNTbG9hZENvbXByZXNzRmxhZ3MsICQoQk9BUkRfJChpbWFnZV90eXBlKUlNQUdFX0YyRlNfU0xPQURfQ09NUFJFU1NfRkxBR1MpKSBcCisgICAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRGaWxlU3lzdGVtQ29tcHJlc3MsICQoQk9BUkRfJChpbWFnZV90eXBlKUlNQUdFX0ZJTEVfU1lTVEVNX0NPTVBSRVNTKSkgXAorICAgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkRmlsZVN5c3RlbVR5cGUsICQoQk9BUkRfJChpbWFnZV90eXBlKUlNQUdFX0ZJTEVfU1lTVEVNX1RZUEUpKSBcCisgICAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRKb3VybmFsU2l6ZSwgJChCT0FSRF8kKGltYWdlX3R5cGUpSU1BR0VfSk9VUk5BTF9TSVpFKSkgXAorICAgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkUGFydGl0aW9uUmVzZXJ2ZWRTaXplLCAkKEJPQVJEXyQoaW1hZ2VfdHlwZSlJTUFHRV9QQVJUSVRJT05fUkVTRVJWRURfU0laRSkpIFwKKyAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZFBhcnRpdGlvblNpemUsICQoQk9BUkRfJChpbWFnZV90eXBlKUlNQUdFX1BBUlRJVElPTl9TSVpFKSkgXAorICAgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkU3F1YXNoZnNCbG9ja1NpemUsICQoQk9BUkRfJChpbWFnZV90eXBlKUlNQUdFX1NRVUFTSEZTX0JMT0NLX1NJWkUpKSBcCisgICAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRTcXVhc2hmc0NvbXByZXNzb3IsICQoQk9BUkRfJChpbWFnZV90eXBlKUlNQUdFX1NRVUFTSEZTX0NPTVBSRVNTT1IpKSBcCisgICAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRTcXVhc2hmc0NvbXByZXNzb3JPcHQsICQoQk9BUkRfJChpbWFnZV90eXBlKUlNQUdFX1NRVUFTSEZTX0NPTVBSRVNTT1JfT1BUKSkgXAorICAgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkU3F1YXNoZnNEaXNhYmxlNGtBbGlnbiwgJChCT0FSRF8kKGltYWdlX3R5cGUpSU1BR0VfU1FVQVNIRlNfRElTQUJMRV80S19BTElHTikpIFwKKyAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEF2YktleVBhdGgsICQoQk9BUkRfQVZCXyQoaW1hZ2VfdHlwZSlfS0VZX1BBVEgpKSBcCisgICAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRBdmJBbGdvcml0aG0sICQoQk9BUkRfQVZCXyQoaW1hZ2VfdHlwZSlfQUxHT1JJVEhNKSkgXAorICAgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkQXZiUm9sbGJhY2tJbmRleCwgJChCT0FSRF9BVkJfJChpbWFnZV90eXBlKV9ST0xMQkFDS19JTkRFWCkpIFwKKyAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEF2YlJvbGxiYWNrSW5kZXhMb2NhdGlvbiwgJChCT0FSRF9BVkJfJChpbWFnZV90eXBlKV9ST0xMQkFDS19JTkRFWF9MT0NBVElPTikpIFwKKyAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEF2YkFkZEhhc2h0cmVlRm9vdGVyQXJncywgJChCT0FSRF9BVkJfJChpbWFnZV90eXBlKV9BRERfSEFTSFRSRUVfRk9PVEVSX0FSR1MpKSBcCisgICAgJChjYWxsIGFkZF9qc29uX3N0ciwgUHJvZHVjdEJhc2VGc1BhdGgsICQoUFJPRFVDVF8kKGltYWdlX3R5cGUpX0JBU0VfRlNfUEFUSCkpIFwKKyAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBQcm9kdWN0SGVhZHJvb20sICQoUFJPRFVDVF8kKGltYWdlX3R5cGUpX0hFQURST09NKSkgXAorICAgICQoY2FsbCBhZGRfanNvbl9zdHIsIFByb2R1Y3RWZXJpdHlQYXJ0aXRpb24sICQoUFJPRFVDVF8kKGltYWdlX3R5cGUpX1ZFUklUWV9QQVJUSVRJT04pKSBcCisgICAgJChjYWxsIGVuZF9qc29uX21hcCkgXAorICApCisgICQoY2FsbCBlbmRfanNvbl9tYXApCisKKyAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIFRhcmdldFVzZXJpbWFnZXNVc2VFeHQyLCAkKGZpbHRlciB0cnVlLCQoVEFSR0VUX1VTRVJJTUFHRVNfVVNFX0VYVDIpKSkKKyAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIFRhcmdldFVzZXJpbWFnZXNVc2VFeHQzLCAkKGZpbHRlciB0cnVlLCQoVEFSR0VUX1VTRVJJTUFHRVNfVVNFX0VYVDMpKSkKKyAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIFRhcmdldFVzZXJpbWFnZXNVc2VFeHQ0LCAkKGZpbHRlciB0cnVlLCQoVEFSR0VUX1VTRVJJTUFHRVNfVVNFX0VYVDQpKSkKKworICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgVGFyZ2V0VXNlcmltYWdlc1NwYXJzZUV4dERpc2FibGVkLCAkKGZpbHRlciB0cnVlLCQoVEFSR0VUX1VTRVJJTUFHRVNfU1BBUlNFX0VYVF9ESVNBQkxFRCkpKQorICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgVGFyZ2V0VXNlcmltYWdlc1NwYXJzZUVyb2ZzRGlzYWJsZWQsICQoZmlsdGVyIHRydWUsJChUQVJHRVRfVVNFUklNQUdFU19TUEFSU0VfRVJPRlNfRElTQUJMRUQpKSkKKyAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIFRhcmdldFVzZXJpbWFnZXNTcGFyc2VTcXVhc2hmc0Rpc2FibGVkLCAkKGZpbHRlciB0cnVlLCQoVEFSR0VUX1VTRVJJTUFHRVNfU1BBUlNFX1NRVUFTSEZTX0RJU0FCTEVEKSkpCisgICQoY2FsbCBhZGRfanNvbl9ib29sLCBUYXJnZXRVc2VyaW1hZ2VzU3BhcnNlRjJmc0Rpc2FibGVkLCAkKGZpbHRlciB0cnVlLCQoVEFSR0VUX1VTRVJJTUFHRVNfU1BBUlNFX0YyRlNfRElTQUJMRUQpKSkKKworICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEVyb2ZzQ29tcHJlc3NvciwgJChCT0FSRF9FUk9GU19DT01QUkVTU09SKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRFcm9mc0NvbXByZXNzb3JIaW50cywgJChCT0FSRF9FUk9GU19DT01QUkVTU19ISU5UUykpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkRXJvZnNQY2x1c3RlclNpemUsICQoQk9BUkRfRVJPRlNfUENMVVNURVJfU0laRSkpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkRXJvZnNTaGFyZUR1cEJsb2NrcywgJChCT0FSRF9FUk9GU19TSEFSRV9EVVBfQkxPQ0tTKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRFcm9mc1VzZUxlZ2FjeUNvbXByZXNzaW9uLCAkKEJPQVJEX0VST0ZTX1VTRV9MRUdBQ1lfQ09NUFJFU1NJT04pKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEV4dDRTaGFyZUR1cEJsb2NrcywgJChCT0FSRF9FWFQ0X1NIQVJFX0RVUF9CTE9DS1MpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEZsYXNoTG9naWNhbEJsb2NrU2l6ZSwgJChCT0FSRF9GTEFTSF9MT0dJQ0FMX0JMT0NLX1NJWkUpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEZsYXNoRXJhc2VCbG9ja1NpemUsICQoQk9BUkRfRkxBU0hfRVJBU0VfQkxPQ0tfU0laRSkpCisgICQoY2FsbCBhZGRfanNvbl9ib29sLCBCdWlsZGluZ1ZibWV0YUltYWdlLCAkKEJVSUxESU5HX1ZCTUVUQV9JTUFHRSkpCisKKyAgIyBib290IGltYWdlIHN0dWZmCisgICQoY2FsbCBhZGRfanNvbl9ib29sLCBCdWlsZGluZ1JhbWRpc2tJbWFnZSwgJChmaWx0ZXIgdHJ1ZSwkKEJVSUxESU5HX1JBTURJU0tfSU1BR0UpKSkKKyAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIFByb2R1Y3RCdWlsZEJvb3RJbWFnZSwgJChmaWx0ZXIgdHJ1ZSwkKFBST0RVQ1RfQlVJTERfQk9PVF9JTUFHRSkpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBQcm9kdWN0QnVpbGRWZW5kb3JCb290SW1hZ2UsICQoUFJPRFVDVF9CVUlMRF9WRU5ET1JfQk9PVF9JTUFHRSkpCisgICQoY2FsbCBhZGRfanNvbl9ib29sLCBQcm9kdWN0QnVpbGRJbml0Qm9vdEltYWdlLCAkKGZpbHRlciB0cnVlLCQoUFJPRFVDVF9CVUlMRF9JTklUX0JPT1RfSU1BR0UpKSkKKyAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJvYXJkVXNlc1JlY292ZXJ5QXNCb290LCAkKGZpbHRlciB0cnVlLCQoQk9BUkRfVVNFU19SRUNPVkVSWV9BU19CT09UKSkpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkUHJlYnVpbHRCb290aW1hZ2UsICQoQk9BUkRfUFJFQlVJTFRfQk9PVF9JTUFHRSkpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkUHJlYnVpbHRJbml0Qm9vdGltYWdlLCAkKEJPQVJEX1BSRUJVSUxUX0lOSVRfQk9PVF9JTUFHRSkpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkQm9vdGltYWdlUGFydGl0aW9uU2l6ZSwgJChCT0FSRF9CT09USU1BR0VfUEFSVElUSU9OX1NJWkUpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEluaXRCb290aW1hZ2VQYXJ0aXRpb25TaXplLCAkKEJPQVJEX0lOSVRfQk9PVF9JTUFHRV9QQVJUSVRJT05fU0laRSkpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkQm9vdEhlYWRlclZlcnNpb24sICQoQk9BUkRfQk9PVF9IRUFERVJfVkVSU0lPTikpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIFRhcmdldEtlcm5lbFBhdGgsICQoVEFSR0VUX0tFUk5FTF9QQVRIKSkKKyAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJvYXJkVXNlc0dlbmVyaWNLZXJuZWxJbWFnZSwgJChCT0FSRF9VU0VTX0dFTkVSSUNfS0VSTkVMX0lNQUdFKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9vdFNlY3VyaXR5UGF0Y2gsICQoQk9PVF9TRUNVUklUWV9QQVRDSCkpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIEluaXRCb290U2VjdXJpdHlQYXRjaCwgJChJTklUX0JPT1RfU0VDVVJJVFlfUEFUQ0gpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBWZW5kb3JTZWN1cml0eVBhdGNoLCAkKFZFTkRPUl9TRUNVUklUWV9QQVRDSCkpCisgICQoY2FsbCBhZGRfanNvbl9ib29sLCBCb2FyZEluY2x1ZGVEdGJJbkJvb3RpbWcsICQoQk9BUkRfSU5DTFVERV9EVEJfSU5fQk9PVElNRykpCisgICQoY2FsbCBhZGRfanNvbl9saXN0LCBJbnRlcm5hbEtlcm5lbENtZGxpbmUsICQoSU5URVJOQUxfS0VSTkVMX0NNRExJTkUpKQorICAkKGNhbGwgYWRkX2pzb25fbGlzdCwgSW50ZXJuYWxCb290Y29uZmlnLCAkKElOVEVSTkFMX0JPT1RDT05GSUcpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBJbnRlcm5hbEJvb3Rjb25maWdGaWxlLCAkKElOVEVSTkFMX0JPT1RDT05GSUdfRklMRSkpCisKKyAgIyBzdXBlciBpbWFnZSBzdHVmZgorICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgUHJvZHVjdFVzZUR5bmFtaWNQYXJ0aXRpb25zLCAkKGZpbHRlciB0cnVlLCQoUFJPRFVDVF9VU0VfRFlOQU1JQ19QQVJUSVRJT05TKSkpCisgICQoY2FsbCBhZGRfanNvbl9ib29sLCBQcm9kdWN0UmV0cm9maXREeW5hbWljUGFydGl0aW9ucywgJChmaWx0ZXIgdHJ1ZSwkKFBST0RVQ1RfUkVUUk9GSVRfRFlOQU1JQ19QQVJUSVRJT05TKSkpCisgICQoY2FsbCBhZGRfanNvbl9ib29sLCBQcm9kdWN0QnVpbGRTdXBlclBhcnRpdGlvbiwgJChmaWx0ZXIgdHJ1ZSwkKFBST0RVQ1RfQlVJTERfU1VQRVJfUEFSVElUSU9OKSkpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkU3VwZXJQYXJ0aXRpb25TaXplLCAkKEJPQVJEX1NVUEVSX1BBUlRJVElPTl9TSVpFKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRTdXBlclBhcnRpdGlvbk1ldGFkYXRhRGV2aWNlLCAkKEJPQVJEX1NVUEVSX1BBUlRJVElPTl9NRVRBREFUQV9ERVZJQ0UpKQorICAkKGNhbGwgYWRkX2pzb25fbGlzdCwgQm9hcmRTdXBlclBhcnRpdGlvbkJsb2NrRGV2aWNlcywgJChCT0FSRF9TVVBFUl9QQVJUSVRJT05fQkxPQ0tfREVWSUNFUykpCisgICQoY2FsbCBhZGRfanNvbl9tYXAsIEJvYXJkU3VwZXJQYXJ0aXRpb25Hcm91cHMpCisgICAgJChmb3JlYWNoIGdyb3VwLCAkKEJPQVJEX1NVUEVSX1BBUlRJVElPTl9HUk9VUFMpLCBcCisgICAgICAkKGNhbGwgYWRkX2pzb25fbWFwLCAkKGdyb3VwKSkgXAorICAgICAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBHcm91cFNpemUsICQoQk9BUkRfJChjYWxsIHRvLXVwcGVyLCQoZ3JvdXApKV9TSVpFKSkgXAorICAgICAgICAkKGlmICQoQk9BUkRfJChjYWxsIHRvLXVwcGVyLCQoZ3JvdXApKV9QQVJUSVRJT05fTElTVCksIFwKKyAgICAgICAgICAkKGNhbGwgYWRkX2pzb25fbGlzdCwgUGFydGl0aW9uTGlzdCwgJChCT0FSRF8kKGNhbGwgdG8tdXBwZXIsJChncm91cCkpX1BBUlRJVElPTl9MSVNUKSkpIFwKKyAgICAgICQoY2FsbCBlbmRfanNvbl9tYXApKQorICAgICQoY2FsbCBlbmRfanNvbl9tYXApCisgICQoY2FsbCBhZGRfanNvbl9ib29sLCBQcm9kdWN0VmlydHVhbEFiT3RhLCAkKGZpbHRlciB0cnVlLCQoUFJPRFVDVF9WSVJUVUFMX0FCX09UQSkpKQorICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgUHJvZHVjdFZpcnR1YWxBYk90YVJldHJvZml0LCAkKGZpbHRlciB0cnVlLCQoUFJPRFVDVF9WSVJUVUFMX0FCX09UQV9SRVRST0ZJVCkpKQorICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgQWJPdGFVcGRhdGVyLCAkKGZpbHRlciB0cnVlLCQoQUJfT1RBX1VQREFURVIpKSkKKworICAjIEF2YiAoYW5kcm9pZCB2ZXJpZmllZCBib290KSBzdHVmZgorICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgQm9hcmRBdmJFbmFibGUsICQoZmlsdGVyIHRydWUsJChCT0FSRF9BVkJfRU5BQkxFKSkpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkQXZiQWxnb3JpdGhtLCAkKEJPQVJEX0FWQl9BTEdPUklUSE0pKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEF2YktleVBhdGgsICQoQk9BUkRfQVZCX0tFWV9QQVRIKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRBdmJSb2xsYmFja0luZGV4LCAkKEJPQVJEX0FWQl9ST0xMQkFDS19JTkRFWCkpCisgICQoY2FsbCBhZGRfanNvbl9tYXAsIENoYWluZWRWYm1ldGFQYXJ0aXRpb25zKQorICAkKGZvcmVhY2ggcGFydGl0aW9uLHN5c3RlbSB2ZW5kb3IgJChCT0FSRF9BVkJfVkJNRVRBX0NVU1RPTV9QQVJUSVRJT05TKSxcCisgICAgJChjYWxsIGFkZF9qc29uX21hcCwgJChwYXJ0aXRpb24pKSBcCisgICAgICAkKGNhbGwgYWRkX2pzb25fbGlzdCxQYXJ0aXRpb25zLCQoQk9BUkRfQVZCX1ZCTUVUQV8kKGNhbGwgdG8tdXBwZXIsJChwYXJ0aXRpb24pKSkpIFwKKyAgICAgICQoY2FsbCBhZGRfanNvbl9zdHIsS2V5LCQoQk9BUkRfQVZCX1ZCTUVUQV8kKGNhbGwgdG8tdXBwZXIsJChwYXJ0aXRpb24pKV9LRVlfUEFUSCkpIFwKKyAgICAgICQoY2FsbCBhZGRfanNvbl9zdHIsQWxnb3JpdGhtLCQoQk9BUkRfQVZCX1ZCTUVUQV8kKGNhbGwgdG8tdXBwZXIsJChwYXJ0aXRpb24pKV9BTEdPUklUSE0pKSBcCisgICAgICAkKGNhbGwgYWRkX2pzb25fc3RyLFJvbGxiYWNrSW5kZXgsJChCT0FSRF9BVkJfVkJNRVRBXyQoY2FsbCB0by11cHBlciwkKHBhcnRpdGlvbikpX1JPTExCQUNLX0lOREVYKSkgXAorICAgICAgJChjYWxsIGFkZF9qc29uX3N0cixSb2xsYmFja0luZGV4TG9jYXRpb24sJChCT0FSRF9BVkJfVkJNRVRBXyQoY2FsbCB0by11cHBlciwkKHBhcnRpdGlvbikpX1JPTExCQUNLX0lOREVYX0xPQ0FUSU9OKSkgXAorICAgICQoY2FsbCBlbmRfanNvbl9tYXApKQorICAkKGNhbGwgZW5kX2pzb25fbWFwKQorCisgICQoY2FsbCBhZGRfanNvbl9ib29sLCBQcm9kdWN0VXNlRHluYW1pY1BhcnRpdGlvblNpemUsICQoZmlsdGVyIHRydWUsJChQUk9EVUNUX1VTRV9EWU5BTUlDX1BBUlRJVElPTl9TSVpFKSkpCisgICQoY2FsbCBhZGRfanNvbl9ib29sLCBDb3B5SW1hZ2VzRm9yVGFyZ2V0RmlsZXNaaXAsICQoZmlsdGVyIHRydWUsJChDT1BZX0lNQUdFU19GT1JfVEFSR0VUX0ZJTEVTX1pJUCkpKQorCisgICQoY2FsbCBhZGRfanNvbl9saXN0LCBQcm9kdWN0UGFja2FnZXMsICQoUFJPRFVDVF9QQUNLQUdFUykpCisgICQoY2FsbCBhZGRfanNvbl9saXN0LCBQcm9kdWN0UGFja2FnZXNEZWJ1ZywgJChQUk9EVUNUX1BBQ0tBR0VTX0RFQlVHKSkKKworICAjIFVzZWQgdG8gZ2VuZXJhdGUgL3ZlbmRvci9saW5rZXIuY29uZmlnLnBiCisgICQoY2FsbCBhZGRfanNvbl9saXN0LCBWZW5kb3JMaW5rZXJDb25maWdTcmNzLCAkKFBST0RVQ1RfVkVORE9SX0xJTktFUl9DT05GSUdfRlJBR01FTlRTKSkKKyAgJChjYWxsIGFkZF9qc29uX2xpc3QsIFByb2R1Y3RMaW5rZXJDb25maWdTcmNzLCAkKFBST0RVQ1RfUFJPRFVDVF9MSU5LRVJfQ09ORklHX0ZSQUdNRU5UUykpCisKKyAgIyBVc2VkIHRvIGdlbmVyYXRlIF9kbGttIHBhcnRpdGlvbnMKKyAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJ1aWxkaW5nU3lzdGVtRGxrbUltYWdlLCAgICAgICAgICAgICAgICQoQlVJTERJTkdfU1lTVEVNX0RMS01fSU1BR0UpKQorICAkKGNhbGwgYWRkX2pzb25fbGlzdCwgU3lzdGVtS2VybmVsTW9kdWxlcywgJChCT0FSRF9TWVNURU1fS0VSTkVMX01PRFVMRVMpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBTeXN0ZW1LZXJuZWxCbG9ja2xpc3RGaWxlLCAkKEJPQVJEX1NZU1RFTV9LRVJORUxfTU9EVUxFU19CTE9DS0xJU1RfRklMRSkpCisgICQoY2FsbCBhZGRfanNvbl9saXN0LCBTeXN0ZW1LZXJuZWxMb2FkTW9kdWxlcywgJChCT0FSRF9TWVNURU1fS0VSTkVMX01PRFVMRVNfTE9BRCkpCisgICQoY2FsbCBhZGRfanNvbl9ib29sLCBCdWlsZGluZ1ZlbmRvckRsa21JbWFnZSwgICAgICAgICAgICAgICAkKEJVSUxESU5HX1ZFTkRPUl9ETEtNX0lNQUdFKSkKKyAgJChjYWxsIGFkZF9qc29uX2xpc3QsIFZlbmRvcktlcm5lbE1vZHVsZXMsICQoQk9BUkRfVkVORE9SX0tFUk5FTF9NT0RVTEVTKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgVmVuZG9yS2VybmVsQmxvY2tsaXN0RmlsZSwgJChCT0FSRF9WRU5ET1JfS0VSTkVMX01PRFVMRVNfQkxPQ0tMSVNUX0ZJTEUpKQorICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgQnVpbGRpbmdPZG1EbGttSW1hZ2UsICAgICAgICAgICAgICAgJChCVUlMRElOR19PRE1fRExLTV9JTUFHRSkpCisgICQoY2FsbCBhZGRfanNvbl9saXN0LCBPZG1LZXJuZWxNb2R1bGVzLCAkKEJPQVJEX09ETV9LRVJORUxfTU9EVUxFUykpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIE9kbUtlcm5lbEJsb2NrbGlzdEZpbGUsICQoQk9BUkRfT0RNX0tFUk5FTF9NT0RVTEVTX0JMT0NLTElTVF9GSUxFKSkKKyAgJChjYWxsIGFkZF9qc29uX2xpc3QsIFZlbmRvclJhbWRpc2tLZXJuZWxNb2R1bGVzLCAkKEJPQVJEX1ZFTkRPUl9SQU1ESVNLX0tFUk5FTF9NT0RVTEVTKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgVmVuZG9yUmFtZGlza0tlcm5lbEJsb2NrbGlzdEZpbGUsICQoQk9BUkRfVkVORE9SX1JBTURJU0tfS0VSTkVMX01PRFVMRVNfQkxPQ0tMSVNUX0ZJTEUpKQorICAkKGNhbGwgYWRkX2pzb25fbGlzdCwgVmVuZG9yUmFtZGlza0tlcm5lbExvYWRNb2R1bGVzLCAkKEJPQVJEX1ZFTkRPUl9SQU1ESVNLX0tFUk5FTF9NT0RVTEVTX0xPQUQpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBWZW5kb3JSYW1kaXNrS2VybmVsT3B0aW9uc0ZpbGUsICQoQk9BUkRfVkVORE9SX1JBTURJU0tfS0VSTkVMX01PRFVMRVNfT1BUSU9OU19GSUxFKSkKKworICAjIFVzZWQgdG8gZ2VuZXJhdGUgL3ZlbmRvci9idWlsZC5wcm9wCisgICQoY2FsbCBhZGRfanNvbl9saXN0LCBCb2FyZEluZm9GaWxlcywgJChpZiAkKFRBUkdFVF9CT0FSRF9JTkZPX0ZJTEVTKSwkKFRBUkdFVF9CT0FSRF9JTkZPX0ZJTEVTKSwkKGZpcnN0d29yZCAkKFRBUkdFVF9CT0FSRF9JTkZPX0ZJTEUpICQod2lsZGNhcmQgJChUQVJHRVRfREVWSUNFX0RJUikvYm9hcmQtaW5mby50eHQpKSkpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvb3RMb2FkZXJCb2FyZE5hbWUsICQoVEFSR0VUX0JPT1RMT0FERVJfQk9BUkRfTkFNRSkpCisKKyAgJChjYWxsIGFkZF9qc29uX2xpc3QsIFByb2R1Y3RDb3B5RmlsZXMsICQoUFJPRFVDVF9DT1BZX0ZJTEVTKSkKKworICAjIFVzZWQgdG8gZ2VuZXJhdGUgZnN2IG1ldGEKKyAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIFByb2R1Y3RGc3Zlcml0eUdlbmVyYXRlTWV0YWRhdGEsICAgICAgICAgICAgICAgJChQUk9EVUNUX0ZTVkVSSVRZX0dFTkVSQVRFX01FVEFEQVRBKSkKKworICAjIFVzZWQgdG8gZ2VuZXJhdGUgcmVjb3ZlcnkgcGFydGl0aW9uCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIFRhcmdldFNjcmVlbkRlbnNpdHksICQoVEFSR0VUX1NDUkVFTl9ERU5TSVRZKSkKKworJChjYWxsIGVuZF9qc29uX21hcCkKKworIyBGb3IgY29udmVydGluZyB2aW50Zl9kYXRhCiskKGNhbGwgYWRkX2pzb25fbGlzdCwgRGV2aWNlTWF0cml4RmlsZSwgJChERVZJQ0VfTUFUUklYX0ZJTEUpKQorJChjYWxsIGFkZF9qc29uX2xpc3QsIFByb2R1Y3RNYW5pZmVzdEZpbGVzLCAkKFBST0RVQ1RfTUFOSUZFU1RfRklMRVMpKQorJChjYWxsIGFkZF9qc29uX2xpc3QsIFN5c3RlbU1hbmlmZXN0RmlsZSwgJChERVZJQ0VfRlJBTUVXT1JLX01BTklGRVNUX0ZJTEUpKQorU1lTVEVNX0VYVF9IV1NFUlZJQ0VfRklMRVMgOj0KK2lmZXEgKCQoUFJPRFVDVF9ISURMX0VOQUJMRUQpLHRydWUpCisgIGlmbmVxICgkKGZpbHRlciBod3NlcnZpY2VtYW5hZ2VyLCQoUFJPRFVDVF9QQUNLQUdFUykpLCkKKyAgICBTWVNURU1fRVhUX0hXU0VSVklDRV9GSUxFUyArPSBzeXN0ZW0vaHdzZXJ2aWNlbWFuYWdlci9od3NlcnZpY2VtYW5hZ2VyX25vX21heC54bWwKKyAgZWxzZQorICAgICQoZXJyb3IgSWYgUFJPRFVDVF9ISURMX0VOQUJMRUQgaXMgc2V0LCBod3NlcnZpY2VtYW5hZ2VyIG11c3QgYmUgYWRkZWQgdG8gUFJPRFVDVF9QQUNLQUdFUyBleHBsaWNpdGx5KQorICBlbmRpZgorZWxzZQorICBpZm5lcSAoJChmaWx0ZXIgaHdzZXJ2aWNlbWFuYWdlciwkKFBST0RVQ1RfUEFDS0FHRVMpKSwpCisgICAgU1lTVEVNX0VYVF9IV1NFUlZJQ0VfRklMRVMgKz0gc3lzdGVtL2h3c2VydmljZW1hbmFnZXIvaHdzZXJ2aWNlbWFuYWdlci54bWwKKyAgZWxzZSBpZm5lcSAoJChmaWx0ZXIgaHdzZXJ2aWNlbWFuYWdlciwkKFBST0RVQ1RfUEFDS0FHRVNfU0hJUFBJTkdfQVBJX0xFVkVMXzM0KSksKQorICAgIFNZU1RFTV9FWFRfSFdTRVJWSUNFX0ZJTEVTICs9IHN5c3RlbS9od3NlcnZpY2VtYW5hZ2VyL2h3c2VydmljZW1hbmFnZXIueG1sCisgIGVuZGlmCitlbmRpZgorJChjYWxsIGFkZF9qc29uX2xpc3QsIFN5c3RlbUV4dE1hbmlmZXN0RmlsZXMsICQoU1lTVEVNX0VYVF9NQU5JRkVTVF9GSUxFUykgJChTWVNURU1fRVhUX0hXU0VSVklDRV9GSUxFUykpCiskKGNhbGwgYWRkX2pzb25fbGlzdCwgRGV2aWNlTWFuaWZlc3RGaWxlcywgJChERVZJQ0VfTUFOSUZFU1RfRklMRSkpCiskKGNhbGwgYWRkX2pzb25fbGlzdCwgT2RtTWFuaWZlc3RGaWxlcywgJChPRE1fTUFOSUZFU1RfRklMRVMpKQorCiAkKGNhbGwganNvbl9lbmQpCiAKICQoZmlsZSA+JChTT09OR19WQVJJQUJMRVMpLnRtcCwkKGpzb25fY29udGVudHMpKQpkaWZmIC0tZ2l0IGEvY29yZS9zb29uZ19leHRyYV9jb25maWcubWsgYi9jb3JlL3Nvb25nX2V4dHJhX2NvbmZpZy5tawppbmRleCA2NzY1ODEzLi42M2FiYjBkIDEwMDY0NAotLS0gYS9jb3JlL3Nvb25nX2V4dHJhX2NvbmZpZy5taworKysgYi9jb3JlL3Nvb25nX2V4dHJhX2NvbmZpZy5tawpAQCAtNDMsNiArNDMsNyBAQAogJChjYWxsIGFkZF9qc29uX2xpc3QsIFBST0RVQ1RfUFJPRFVDVF9QUk9QRVJUSUVTLCAgICAgICAgJChjYWxsIGNvbGxhcHNlLXByb3AtcGFpcnMsUFJPRFVDVF9QUk9EVUNUX1BST1BFUlRJRVMpKQogJChjYWxsIGFkZF9qc29uX2xpc3QsIFBST0RVQ1RfT0RNX1BST1BFUlRJRVMsICAgICAgICAgICAgJChjYWxsIGNvbGxhcHNlLXByb3AtcGFpcnMsUFJPRFVDVF9PRE1fUFJPUEVSVElFUykpCiAkKGNhbGwgYWRkX2pzb25fbGlzdCwgUFJPRFVDVF9QUk9QRVJUWV9PVkVSUklERVMsICAgICAgICAkKGNhbGwgY29sbGFwc2UtcHJvcC1wYWlycyxQUk9EVUNUX1BST1BFUlRZX09WRVJSSURFUykpCiskKGNhbGwgYWRkX2pzb25fbGlzdCwgUFJPRFVDVF9ERUZBVUxUX1BST1BFUlRZX09WRVJSSURFUywgICAgICAgICQoY2FsbCBjb2xsYXBzZS1wcm9wLXBhaXJzLFBST0RVQ1RfREVGQVVMVF9QUk9QRVJUWV9PVkVSUklERVMpKQogCiAkKGNhbGwgYWRkX2pzb25fbGlzdCwgT01OSV9QUk9EVUNUX1BST1BFUlRJRVMsICAgICAgJChjYWxsIGNvbGxhcHNlLXByb3AtcGFpcnMsT01OSV9QUk9EVUNUX1BST1BFUlRJRVMpKQogJChjYWxsIGFkZF9qc29uX2xpc3QsIFBST0RVQ1RfQlVJTERfUFJPUF9PVkVSUklERVMsICAgICAgJChjYWxsIGNvbGxhcHNlLXByb3AtcGFpcnMsUFJPRFVDVF9CVUlMRF9QUk9QX09WRVJSSURFUykpCmRpZmYgLS1naXQgYS9jb3JlL3N5c3Byb3AubWsgYi9jb3JlL3N5c3Byb3AubWsKaW5kZXggOGNiMmExMi4uMDE1YjM2NiAxMDA2NDQKLS0tIGEvY29yZS9zeXNwcm9wLm1rCisrKyBiL2NvcmUvc3lzcHJvcC5tawpAQCAtNzgsNiArNzgsNyBAQAogICAgIGVjaG8gInJvLiQoMSkuYnVpbGQudmVyc2lvbi5yZWxlYXNlPSQoUExBVEZPUk1fVkVSU0lPTl9MQVNUX1NUQUJMRSkiID4+ICQoMik7XAogICAgIGVjaG8gInJvLiQoMSkuYnVpbGQudmVyc2lvbi5yZWxlYXNlX29yX2NvZGVuYW1lPSQoUExBVEZPUk1fVkVSU0lPTikiID4+ICQoMik7XAogICAgIGVjaG8gInJvLiQoMSkuYnVpbGQudmVyc2lvbi5zZGs9JChQTEFURk9STV9TREtfVkVSU0lPTikiID4+ICQoMik7XAorICAgIGVjaG8gInJvLiQoMSkuYnVpbGQudmVyc2lvbi5zZGtfbWlub3I9JChQTEFURk9STV9TREtfTUlOT1JfVkVSU0lPTikiID4+ICQoMik7XAogICAgICc7XAogCiBlbmRlZgpAQCAtMTg3LDcgKzE4OCw3IEBACiBlbmRpZgogCiBCVUlMRF9GSU5HRVJQUklOVF9GSUxFIDo9ICQoUFJPRFVDVF9PVVQpL2J1aWxkX2ZpbmdlcnByaW50LnR4dAotaWZuZXEgKCwkKHNoZWxsIG1rZGlyIC1wICQoUFJPRFVDVF9PVVQpICYmIGVjaG8gJChCVUlMRF9GSU5HRVJQUklOVCkgPiQoQlVJTERfRklOR0VSUFJJTlRfRklMRSkgJiYgZ3JlcCAiICIgJChCVUlMRF9GSU5HRVJQUklOVF9GSUxFKSkpCitpZm5lcSAoLCQoc2hlbGwgbWtkaXIgLXAgJChQUk9EVUNUX09VVCkgJiYgZWNobyAkKEJVSUxEX0ZJTkdFUlBSSU5UKSA+JChCVUlMRF9GSU5HRVJQUklOVF9GSUxFKS50bXAgJiYgKGlmICEgY21wIC1zICQoQlVJTERfRklOR0VSUFJJTlRfRklMRSkudG1wICQoQlVJTERfRklOR0VSUFJJTlRfRklMRSk7IHRoZW4gbXYgJChCVUlMRF9GSU5HRVJQUklOVF9GSUxFKS50bXAgJChCVUlMRF9GSU5HRVJQUklOVF9GSUxFKTsgZWxzZSBybSAkKEJVSUxEX0ZJTkdFUlBSSU5UX0ZJTEUpLnRtcDsgZmkpICYmIGdyZXAgIiAiICQoQlVJTERfRklOR0VSUFJJTlRfRklMRSkpKQogICAkKGVycm9yIEJVSUxEX0ZJTkdFUlBSSU5UIGNhbm5vdCBjb250YWluIHNwYWNlczogIiQoZmlsZSA8JChCVUlMRF9GSU5HRVJQUklOVF9GSUxFKSkiKQogZW5kaWYKIEJVSUxEX0ZJTkdFUlBSSU5UX0ZST01fRklMRSA6PSAkJChjYXQgJChCVUlMRF9GSU5HRVJQUklOVF9GSUxFKSkKQEAgLTI4NSw1MSArMjg2LDE3IEBACiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyB2ZW5kb3JfZGxrbS9ldGMvYnVpbGQucHJvcAotIworIyBvZG1fZGxrbS9ldGMvYnVpbGQucHJvcAorIyBzeXN0ZW1fZGxrbS9idWlsZC5wcm9wCisjIFRoZXNlIGFyZSBidWlsdCBieSBTb29uZy4gU2VlIGJ1aWxkL3Nvb25nL0FuZHJvaWQuYnAKIAogSU5TVEFMTEVEX1ZFTkRPUl9ETEtNX0JVSUxEX1BST1BfVEFSR0VUIDo9ICQoVEFSR0VUX09VVF9WRU5ET1JfRExLTSkvZXRjL2J1aWxkLnByb3AKLSQoZXZhbCAkKGNhbGwgYnVpbGQtcHJvcGVydGllcyxcCi0gICAgdmVuZG9yX2Rsa20sXAotICAgICQoSU5TVEFMTEVEX1ZFTkRPUl9ETEtNX0JVSUxEX1BST1BfVEFSR0VUKSxcCi0gICAgJChlbXB0eSksXAotICAgICQoZW1wdHkpLFwKLSAgICAkKGVtcHR5KSxcCi0gICAgJChlbXB0eSksXAotICAgICQoZW1wdHkpKSkKLQotJChldmFsICQoY2FsbCBkZWNsYXJlLTFwLXRhcmdldCwkKElOU1RBTExFRF9WRU5ET1JfRExLTV9CVUlMRF9QUk9QX1RBUkdFVCkpKQotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgb2RtX2Rsa20vZXRjL2J1aWxkLnByb3AKLSMKLQogSU5TVEFMTEVEX09ETV9ETEtNX0JVSUxEX1BST1BfVEFSR0VUIDo9ICQoVEFSR0VUX09VVF9PRE1fRExLTSkvZXRjL2J1aWxkLnByb3AKLSQoZXZhbCAkKGNhbGwgYnVpbGQtcHJvcGVydGllcyxcCi0gICAgb2RtX2Rsa20sXAotICAgICQoSU5TVEFMTEVEX09ETV9ETEtNX0JVSUxEX1BST1BfVEFSR0VUKSxcCi0gICAgJChlbXB0eSksXAotICAgICQoZW1wdHkpLFwKLSAgICAkKGVtcHR5KSxcCi0gICAgJChlbXB0eSksXAotICAgICQoZW1wdHkpKSkKLQotJChldmFsICQoY2FsbCBkZWNsYXJlLTFwLXRhcmdldCwkKElOU1RBTExFRF9PRE1fRExLTV9CVUlMRF9QUk9QX1RBUkdFVCkpKQotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgc3lzdGVtX2Rsa20vYnVpbGQucHJvcAotIwotCiBJTlNUQUxMRURfU1lTVEVNX0RMS01fQlVJTERfUFJPUF9UQVJHRVQgOj0gJChUQVJHRVRfT1VUX1NZU1RFTV9ETEtNKS9ldGMvYnVpbGQucHJvcAotJChldmFsICQoY2FsbCBidWlsZC1wcm9wZXJ0aWVzLFwKLSAgICBzeXN0ZW1fZGxrbSxcCi0gICAgJChJTlNUQUxMRURfU1lTVEVNX0RMS01fQlVJTERfUFJPUF9UQVJHRVQpLFwKLSAgICAkKGVtcHR5KSxcCi0gICAgJChlbXB0eSksXAotICAgICQoZW1wdHkpLFwKLSAgICAkKGVtcHR5KSxcCi0gICAgJChlbXB0eSkpKQotCi0kKGV2YWwgJChjYWxsIGRlY2xhcmUtMXAtdGFyZ2V0LCQoSU5TVEFMTEVEX1NZU1RFTV9ETEtNX0JVSUxEX1BST1BfVEFSR0VUKSkpCitBTExfREVGQVVMVF9JTlNUQUxMRURfTU9EVUxFUyArPSBcCisgICQoSU5TVEFMTEVEX1ZFTkRPUl9ETEtNX0JVSUxEX1BST1BfVEFSR0VUKSBcCisgICQoSU5TVEFMTEVEX09ETV9ETEtNX0JVSUxEX1BST1BfVEFSR0VUKSBcCisgICQoSU5TVEFMTEVEX1NZU1RFTV9ETEtNX0JVSUxEX1BST1BfVEFSR0VUKSBcCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgc3lzdGVtX2V4dC9ldGMvYnVpbGQucHJvcApAQCAtMzM5LDIyICszMDYsMTIgQEAKIAogSU5TVEFMTEVEX1NZU1RFTV9FWFRfQlVJTERfUFJPUF9UQVJHRVQgOj0gJChUQVJHRVRfT1VUX1NZU1RFTV9FWFQpL2V0Yy9idWlsZC5wcm9wCiAKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyByYW1kaXNrL2Jvb3QvZXRjL2J1aWxkLnByb3AKLSMKLQogUkFNRElTS19CVUlMRF9QUk9QX1JFTF9QQVRIIDo9IHN5c3RlbS9ldGMvcmFtZGlzay9idWlsZC5wcm9wCitpZmVxICh0cnVlLCQoQk9BUkRfVVNFU19SRUNPVkVSWV9BU19CT09UKSkKK0lOU1RBTExFRF9SQU1ESVNLX0JVSUxEX1BST1BfVEFSR0VUIDo9ICQoVEFSR0VUX1JFQ09WRVJZX1JPT1RfT1VUKS9maXJzdF9zdGFnZV9yYW1kaXNrLyQoUkFNRElTS19CVUlMRF9QUk9QX1JFTF9QQVRIKQorZWxzZQogSU5TVEFMTEVEX1JBTURJU0tfQlVJTERfUFJPUF9UQVJHRVQgOj0gJChUQVJHRVRfUkFNRElTS19PVVQpLyQoUkFNRElTS19CVUlMRF9QUk9QX1JFTF9QQVRIKQotJChldmFsICQoY2FsbCBidWlsZC1wcm9wZXJ0aWVzLFwKLSAgICBib290aW1hZ2UsXAotICAgICQoSU5TVEFMTEVEX1JBTURJU0tfQlVJTERfUFJPUF9UQVJHRVQpLFwKLSAgICAkKGVtcHR5KSxcCi0gICAgJChlbXB0eSksXAotICAgICQoZW1wdHkpLFwKLSAgICAkKGVtcHR5KSxcCi0gICAgJChlbXB0eSkpKQotCi0kKGV2YWwgJChjYWxsIGRlY2xhcmUtMXAtdGFyZ2V0LCQoSU5TVEFMTEVEX1JBTURJU0tfQlVJTERfUFJPUF9UQVJHRVQpKSkKK2VuZGlmCiAKIEFMTF9JTlNUQUxMRURfQlVJTERfUFJPUF9GSUxFUyA6PSBcCiAgICQoSU5TVEFMTEVEX0JVSUxEX1BST1BfVEFSR0VUKSBcCmRpZmYgLS1naXQgYS9jb3JlL3N5c3Byb3BfY29uZmlnLm1rIGIvY29yZS9zeXNwcm9wX2NvbmZpZy5tawppbmRleCA2OTA2NjExLi4xOTkxNTAzIDEwMDY0NAotLS0gYS9jb3JlL3N5c3Byb3BfY29uZmlnLm1rCisrKyBiL2NvcmUvc3lzcHJvcF9jb25maWcubWsKQEAgLTkxLDggKzkxLDEyIEBACiAjIEJ1aWxkIHN5c3RlbSBzZXQgQk9BUkRfQVBJX0xFVkVMIHRvIHNob3cgdGhlIGFwaSBsZXZlbCBvZiB0aGUgdmVuZG9yIEFQSSBzdXJmYWNlLgogIyBUaGlzIG11c3Qgbm90IGJlIGFsdGVyZWQgb3V0c2lkZSBvZiBidWlsZCBzeXN0ZW0uCiBpZmRlZiBCT0FSRF9BUElfTEVWRUwKLUFERElUSU9OQUxfVkVORE9SX1BST1BFUlRJRVMgKz0gXAotICAgIHJvLmJvYXJkLmFwaV9sZXZlbD0kKEJPQVJEX0FQSV9MRVZFTCkKKyAgQURESVRJT05BTF9WRU5ET1JfUFJPUEVSVElFUyArPSBcCisgICAgcm8uYm9hcmQuYXBpX2xldmVsPz0kKEJPQVJEX0FQSV9MRVZFTCkKKyAgaWZkZWYgQk9BUkRfQVBJX0xFVkVMX1BST1BfT1ZFUlJJREUKKyAgICBBRERJVElPTkFMX1ZFTkRPUl9QUk9QRVJUSUVTICs9IFwKKyAgICAgIHJvLmJvYXJkLmFwaV9sZXZlbD0kKEJPQVJEX0FQSV9MRVZFTF9QUk9QX09WRVJSSURFKQorICBlbmRpZgogZW5kaWYKICMgUkVMRUFTRV9CT0FSRF9BUElfTEVWRUxfRlJPWkVOIGlzIHRydWUgd2hlbiB0aGUgdmVuZG9yIEFQSSBzdXJmYWNlIGlzIGZyb3plbi4KIGlmZGVmIFJFTEVBU0VfQk9BUkRfQVBJX0xFVkVMX0ZST1pFTgpkaWZmIC0tZ2l0IGEvY29yZS90YXNrcy9hdXRvcmVwcm8ubWsgYi9jb3JlL3Rhc2tzL2F1dG9yZXByby5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjgxZjliCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS90YXNrcy9hdXRvcmVwcm8ubWsKQEAgLTAsMCArMSwzOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworaWZuZXEgKCQod2lsZGNhcmQgdGVzdC9zdHMvUkVBRE1FLWF1dG9yZXByby5tZCksKQordGVzdF9zdWl0ZV9uYW1lIDo9IGF1dG9yZXBybwordGVzdF9zdWl0ZV90cmFkZWZlZCA6PSBzdHMtdHJhZGVmZWQKK3Rlc3Rfc3VpdGVfcmVhZG1lIDo9IHRlc3Qvc3RzL1JFQURNRS1hdXRvcmVwcm8ubWQKK2F1dG9yZXByb196aXAgOj0gJChIT1NUX09VVCkvJCh0ZXN0X3N1aXRlX25hbWUpL2F1dG9yZXByby56aXAKKworaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvdGFza3MvdG9vbHMvY29tcGF0aWJpbGl0eS5taworCithdXRvcmVwcm9fcGx1Z2luX3NrZWwgOj0gJChjYWxsIGludGVybWVkaWF0ZXMtZGlyLWZvcixFVEMsYXV0b3JlcHJvLXBsdWdpbi1za2VsLnppcCkvYXV0b3JlcHJvLXBsdWdpbi1za2VsLnppcAorCiskKGF1dG9yZXByb196aXApOiBBVVRPUkVQUk9fWklQIDo9ICQoY29tcGF0aWJpbGl0eV96aXApCiskKGF1dG9yZXByb196aXApOiBBVVRPUkVQUk9fUExVR0lOX1NLRUwgOj0gJChhdXRvcmVwcm9fcGx1Z2luX3NrZWwpCiskKGF1dG9yZXByb196aXApOiAkKE1FUkdFX1pJUFMpICQoWklQMlpJUCkgJChjb21wYXRpYmlsaXR5X3ppcCkgJChhdXRvcmVwcm9fcGx1Z2luX3NrZWwpCisJcm0gLWYgJEAgJChBVVRPUkVQUk9fWklQKV9maWx0ZXJlZAorCSQoWklQMlpJUCkgLWkgJChBVVRPUkVQUk9fWklQKSAtbyAkKEFVVE9SRVBST19aSVApX2ZpbHRlcmVkIFwKKwkJLXggYW5kcm9pZC1hdXRvcmVwcm8vdG9vbHMvc3RzLXRyYWRlZmVkLXRlc3RzLmphciBcCisJCSdhbmRyb2lkLWF1dG9yZXByby90b29scy8qOmF1dG9yZXByby9zcmMvbWFpbi9yZXNvdXJjZXMvc3RzLXRyYWRlZmVkLXRvb2xzLycKKwkkKE1FUkdFX1pJUFMpICRAICQoQVVUT1JFUFJPX1pJUClfZmlsdGVyZWQgJChBVVRPUkVQUk9fUExVR0lOX1NLRUwpCisJcm0gLWYgJChBVVRPUkVQUk9fWklQKV9maWx0ZXJlZAorCisuUEhPTlk6IGF1dG9yZXBybworYXV0b3JlcHJvOiAkKGF1dG9yZXByb196aXApCiskKGNhbGwgZGlzdC1mb3ItZ29hbHMsIGF1dG9yZXBybywgJChhdXRvcmVwcm9femlwKSkKKworZW5kaWYKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2dzaS9BbmRyb2lkLm1rIGIvY29yZS90YXNrcy9jaGVjay1hYmktZHVtcC1saXN0Lm1rCnNpbWlsYXJpdHkgaW5kZXggNzElCnJlbmFtZSBmcm9tIHRhcmdldC9wcm9kdWN0L2dzaS9BbmRyb2lkLm1rCnJlbmFtZSB0byBjb3JlL3Rhc2tzL2NoZWNrLWFiaS1kdW1wLWxpc3QubWsKaW5kZXggMzY4OTdmZS4uODFkNTQ5ZSAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvZ3NpL0FuZHJvaWQubWsKKysrIGIvY29yZS90YXNrcy9jaGVjay1hYmktZHVtcC1saXN0Lm1rCkBAIC0xLDQgKzEsMTYgQEAKLUxPQ0FMX1BBVEg6PSAkKGNhbGwgbXktZGlyKQorIyBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIENoZWNrIHRoZSBnZW5lcmF0ZSBsaXN0IGFnYWluc3QgdGhlIGxhdGVzdCBsaXN0IHN0b3JlZCBpbiB0aGUKQEAgLTEwOSw2MCArMTIxLDMgQEAKIAkkKGlmICQoYWRkZWRfdm5ka19hYmlfZHVtcHMpJChhZGRlZF9wbGF0Zm9ybV9hYmlfZHVtcHMpLGV4aXQgMSkKIAkkKGhpZGUpIG1rZGlyIC1wICQoZGlyICRAKQogCSQoaGlkZSkgdG91Y2ggJEAKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFZOREsgcGFja2FnZSBhbmQgc25hcHNob3QuCi0KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9NT0RVTEUgOj0gdm5ka19hcGV4X3NuYXBzaG90X3BhY2thZ2UKLUxPQ0FMX0xJQ0VOU0VfS0lORFMgOj0gU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMAotTE9DQUxfTElDRU5TRV9DT05ESVRJT05TIDo9IG5vdGljZQotTE9DQUxfTk9USUNFX0ZJTEUgOj0gYnVpbGQvc29vbmcvbGljZW5zZXMvTElDRU5TRQotTE9DQUxfUkVRVUlSRURfTU9EVUxFUyA6PSAkKGZvcmVhY2ggdm5ka192ZXIsJChQUk9EVUNUX0VYVFJBX1ZOREtfVkVSU0lPTlMpLGNvbS5hbmRyb2lkLnZuZGsudiQodm5ka192ZXIpKQotaW5jbHVkZSAkKEJVSUxEX1BIT05ZX1BBQ0tBR0UpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBEZWZpbmUgUGhvbnkgbW9kdWxlIHRvIGluc3RhbGwgTExOREsgbW9kdWxlcyB3aGljaCBhcmUgaW5zdGFsbGVkIGluCi0jIHRoZSBzeXN0ZW0gaW1hZ2UKLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotTE9DQUxfTU9EVUxFIDo9IGxsbmRrX2luX3N5c3RlbQotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRSA6PSBidWlsZC9zb29uZy9saWNlbnNlcy9MSUNFTlNFCi0KLSMgRmlsdGVyIExMTkRLIGxpYnMgbW92ZWQgdG8gQVBFWCB0byBhdm9pZCBwdWxsaW5nIHRoZW0gaW50byAvc3lzdGVtL0xJQgotTE9DQUxfUkVRVUlSRURfTU9EVUxFUyA6PSBcCi0gICAgJChmaWx0ZXItb3V0ICQoTExOREtfTU9WRURfVE9fQVBFWF9MSUJSQVJJRVMpLCQoTExOREtfTElCUkFSSUVTKSkgXAotICAgIGxsbmRrLmxpYnJhcmllcy50eHQKLQotCi1pbmNsdWRlICQoQlVJTERfUEhPTllfUEFDS0FHRSkKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGluaXQuZ3NpLnJjLCBHU0ktc3BlY2lmaWMgaW5pdCBzY3JpcHQuCi0KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotTE9DQUxfTU9EVUxFIDo9IGluaXQuZ3NpLnJjCi1MT0NBTF9MSUNFTlNFX0tJTkRTIDo9IFNQRFgtbGljZW5zZS1pZGVudGlmaWVyLUFwYWNoZS0yLjAKLUxPQ0FMX0xJQ0VOU0VfQ09ORElUSU9OUyA6PSBub3RpY2UKLUxPQ0FMX05PVElDRV9GSUxFIDo9IGJ1aWxkL3Nvb25nL2xpY2Vuc2VzL0xJQ0VOU0UKLUxPQ0FMX1NSQ19GSUxFUyA6PSAkKExPQ0FMX01PRFVMRSkKLUxPQ0FMX01PRFVMRV9DTEFTUyA6PSBFVEMKLUxPQ0FMX1NZU1RFTV9FWFRfTU9EVUxFIDo9IHRydWUKLUxPQ0FMX01PRFVMRV9SRUxBVElWRV9QQVRIIDo9IGluaXQKLQotaW5jbHVkZSAkKEJVSUxEX1BSRUJVSUxUKQotCi0KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotTE9DQUxfTU9EVUxFIDo9IGluaXQudm5kay1ub2RlZi5yYwotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRSA6PSBidWlsZC9zb29uZy9saWNlbnNlcy9MSUNFTlNFCi1MT0NBTF9TUkNfRklMRVMgOj0gJChMT0NBTF9NT0RVTEUpCi1MT0NBTF9NT0RVTEVfQ0xBU1MgOj0gRVRDCi1MT0NBTF9TWVNURU1fRVhUX01PRFVMRSA6PSB0cnVlCi1MT0NBTF9NT0RVTEVfUkVMQVRJVkVfUEFUSCA6PSBnc2kKLQotaW5jbHVkZSAkKEJVSUxEX1BSRUJVSUxUKQpkaWZmIC0tZ2l0IGEvY29yZS90YXNrcy9kdHMubWsgYi9jb3JlL3Rhc2tzL2R0cy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjA5MDgyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS90YXNrcy9kdHMubWsKQEAgLTAsMCArMSwyOCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworIyBEZXNrdG9wIHRlc3Qgc3VpdGUKK2lmbmVxICgkKHdpbGRjYXJkIHRlc3QvZHRzL3Rvb2xzL2R0cy10cmFkZWZlZC9SRUFETUUpLCkKK3Rlc3Rfc3VpdGVfbmFtZSA6PSBkdHMKK3Rlc3Rfc3VpdGVfdHJhZGVmZWQgOj0gZHRzLXRyYWRlZmVkCit0ZXN0X3N1aXRlX3JlYWRtZSA6PSB0ZXN0L2R0cy90b29scy9kdHMtdHJhZGVmZWQvUkVBRE1FCit0ZXN0X3N1aXRlX3Rvb2xzIDo9ICQoSE9TVF9PVVRfSkFWQV9MSUJSQVJJRVMpL2F0c19jb25zb2xlX2RlcGxveS5qYXIgXAorICAkKEhPU1RfT1VUX0pBVkFfTElCUkFSSUVTKS9hdHNfb2xjX3NlcnZlcl9sb2NhbF9tb2RlX2RlcGxveS5qYXIKKworaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvdGFza3MvdG9vbHMvY29tcGF0aWJpbGl0eS5taworCisuUEhPTlk6IGR0cworZHRzOiAkKGNvbXBhdGliaWxpdHlfemlwKSAkKGNvbXBhdGliaWxpdHlfdGVzdHNfbGlzdF96aXApCiskKGNhbGwgZGlzdC1mb3ItZ29hbHMsIGR0cywgJChjb21wYXRpYmlsaXR5X3ppcCkgJChjb21wYXRpYmlsaXR5X3Rlc3RzX2xpc3RfemlwKSkKK2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3Rhc2tzL2dlbmVyYWwtdGVzdHMubWsgYi9jb3JlL3Rhc2tzL2dlbmVyYWwtdGVzdHMubWsKaW5kZXggZDZmYzA3Mi4uMTkwMWVkNSAxMDA2NDQKLS0tIGEvY29yZS90YXNrcy9nZW5lcmFsLXRlc3RzLm1rCisrKyBiL2NvcmUvdGFza3MvZ2VuZXJhbC10ZXN0cy5tawpAQCAtMjcsMjEgKzI3LDkgQEAKICMgQ3JlYXRlIGFuIGFydGlmYWN0IHRvIGluY2x1ZGUgYWxsIHRlc3QgY29uZmlnIGZpbGVzIGluIGdlbmVyYWwtdGVzdHMuCiBnZW5lcmFsX3Rlc3RzX2NvbmZpZ3NfemlwIDo9ICQoUFJPRFVDVF9PVVQpL2dlbmVyYWwtdGVzdHNfY29uZmlncy56aXAKIAotIyBDb3B5IGtlcm5lbCB0ZXN0IG1vZHVsZXMgdG8gdGVzdGNhc2VzIGRpcmVjdG9yaWVzCi1pbmNsdWRlICQoQlVJTERfU1lTVEVNKS90YXNrcy90b29scy92dHMta2VybmVsLXRlc3RzLm1rCi1sdHBfY29weV9wYWlycyA6PSBcCi0gICQoY2FsbCB0YXJnZXQtbmF0aXZlLWNvcHktcGFpcnMsJChrZXJuZWxfbHRwX21vZHVsZXMpLCQoa2VybmVsX2x0cF9ob3N0X291dCkpCi1jb3B5X2x0cF90ZXN0cyA6PSAkKGNhbGwgY29weS1tYW55LWZpbGVzLCQobHRwX2NvcHlfcGFpcnMpKQotCi0jIFBIT05ZIHRhcmdldCB0byBiZSB1c2VkIHRvIGJ1aWxkIGFuZCB0ZXN0IGB2dHNfbHRwX3Rlc3RzYCB3aXRob3V0IGJ1aWxkaW5nIGZ1bGwgdnRzCi0uUEhPTlk6IHZ0c19rZXJuZWxfbHRwX3Rlc3RzCi12dHNfa2VybmVsX2x0cF90ZXN0czogJChjb3B5X2x0cF90ZXN0cykKLQogZ2VuZXJhbF90ZXN0c19zaGFyZWRfbGlic196aXAgOj0gJChQUk9EVUNUX09VVCkvZ2VuZXJhbC10ZXN0c19ob3N0LXNoYXJlZC1saWJzLnppcAogCiAkKGdlbmVyYWxfdGVzdHNfemlwKSA6ICQoZ2VuZXJhbF90ZXN0c19zaGFyZWRfbGlic196aXApCi0kKGdlbmVyYWxfdGVzdHNfemlwKSA6ICQoY29weV9sdHBfdGVzdHMpCi0kKGdlbmVyYWxfdGVzdHNfemlwKSA6IFBSSVZBVEVfS0VSTkVMX0xUUF9IT1NUX09VVCA6PSAkKGtlcm5lbF9sdHBfaG9zdF9vdXQpCiAkKGdlbmVyYWxfdGVzdHNfemlwKSA6IFBSSVZBVEVfZ2VuZXJhbF90ZXN0c19saXN0X3ppcCA6PSAkKGdlbmVyYWxfdGVzdHNfbGlzdF96aXApCiAkKGdlbmVyYWxfdGVzdHNfemlwKSA6IC5LQVRJX0lNUExJQ0lUX09VVFBVVFMgOj0gJChnZW5lcmFsX3Rlc3RzX2xpc3RfemlwKSAkKGdlbmVyYWxfdGVzdHNfY29uZmlnc196aXApCiAkKGdlbmVyYWxfdGVzdHNfemlwKSA6IFBSSVZBVEVfVE9PTFMgOj0gJChnZW5lcmFsX3Rlc3RzX3Rvb2xzKQpAQCAtNTIsNyArNDAsNiBAQAogCXJtIC1mICRAICQoUFJJVkFURV9nZW5lcmFsX3Rlc3RzX2xpc3RfemlwKQogCW1rZGlyIC1wICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikgJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS90b29scwogCWVjaG8gJChzb3J0ICQoQ09NUEFUSUJJTElUWS5nZW5lcmFsLXRlc3RzLkZJTEVTKSAkKENPTVBBVElCSUxJVFkuZ2VuZXJhbC10ZXN0cy5TT09OR19JTlNUQUxMRURfQ09NUEFUSUJJTElUWV9TVVBQT1JUX0ZJTEVTKSkgfCB0ciAiICIgIlxuIiA+ICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvbGlzdAotCWZpbmQgJChQUklWQVRFX0tFUk5FTF9MVFBfSE9TVF9PVVQpID4+ICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvbGlzdAogCWdyZXAgJChIT1NUX09VVF9URVNUQ0FTRVMpICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvbGlzdCA+ICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvaG9zdC5saXN0IHx8IHRydWUKIAlncmVwICQoVEFSR0VUX09VVF9URVNUQ0FTRVMpICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvbGlzdCA+ICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvdGFyZ2V0Lmxpc3QgfHwgdHJ1ZQogCWdyZXAgLWUgLipcXC5jb25maWckJCAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL2hvc3QubGlzdCA+ICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvaG9zdC10ZXN0LWNvbmZpZ3MubGlzdCB8fCB0cnVlCmRpZmYgLS1naXQgYS9jb3JlL3Rhc2tzL3ByZWJ1aWx0X3RyYWRlZmVkLm1rIGIvY29yZS90YXNrcy9wcmVidWlsdF90cmFkZWZlZC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmM1N2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS90YXNrcy9wcmVidWlsdF90cmFkZWZlZC5tawpAQCAtMCwwICsxLDIyIEBACisjIENvcHlyaWdodCAoQykgMjAyMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitpZmVxICgsJCh3aWxkY2FyZCB0b29scy90cmFkZWZlZGVyYXRpb24vY29yZSkpCisuUEhPTlk6IHRyYWRlZmVkLWNvcmUKK3RyYWRlZmVkLWNvcmU6IHRyYWRlZmVkIGF0ZXN0X3RyYWRlZmVkLnNoCisuUEhPTlk6IHRyYWRlZmVkLWFsbAordHJhZGVmZWQtYWxsOiB0cmFkZWZlZCBhdGVzdF90cmFkZWZlZC5zaAorCiskKGNhbGwgZGlzdC1mb3ItZ29hbHMsIHRyYWRlZmVkLCAkKEhPU1RfT1VUKS9ldGMvdHJhZGVmZWQuemlwKQorZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvdGFza3Mvc3RzLXNkay5tayBiL2NvcmUvdGFza3Mvc3RzLXNkay5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFiYmMyOS4uMDAwMDAwMAotLS0gYS9jb3JlL3Rhc2tzL3N0cy1zZGsubWsKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAyMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi1pZm5lcSAoJCh3aWxkY2FyZCB0ZXN0L3N0cy9SRUFETUUtc3RzLXNkay5tZCksKQotdGVzdF9zdWl0ZV9uYW1lIDo9IHN0cy1zZGsKLXRlc3Rfc3VpdGVfdHJhZGVmZWQgOj0gc3RzLXRyYWRlZmVkCi10ZXN0X3N1aXRlX3JlYWRtZSA6PSB0ZXN0L3N0cy9SRUFETUUtc3RzLXNkay5tZAotc3RzX3Nka196aXAgOj0gJChIT1NUX09VVCkvJCh0ZXN0X3N1aXRlX25hbWUpL3N0cy1zZGsuemlwCi0KLWluY2x1ZGUgJChCVUlMRF9TWVNURU0pL3Rhc2tzL3Rvb2xzL2NvbXBhdGliaWxpdHkubWsKLQotc3RzX3Nka19wbHVnaW5fc2tlbCA6PSAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLEVUQyxzdHMtc2RrLXBsdWdpbi1za2VsLnppcCkvc3RzLXNkay1wbHVnaW4tc2tlbC56aXAKLQotJChzdHNfc2RrX3ppcCk6IFNUU19TREtfWklQIDo9ICQoY29tcGF0aWJpbGl0eV96aXApCi0kKHN0c19zZGtfemlwKTogU1RTX1NES19QTFVHSU5fU0tFTCA6PSAkKHN0c19zZGtfcGx1Z2luX3NrZWwpCi0kKHN0c19zZGtfemlwKTogJChNRVJHRV9aSVBTKSAkKFpJUDJaSVApICQoY29tcGF0aWJpbGl0eV96aXApICQoc3RzX3Nka19wbHVnaW5fc2tlbCkKLQlybSAtZiAkQCAkKFNUU19TREtfWklQKV9maWx0ZXJlZAotCSQoWklQMlpJUCkgLWkgJChTVFNfU0RLX1pJUCkgLW8gJChTVFNfU0RLX1pJUClfZmlsdGVyZWQgXAotCQkteCBhbmRyb2lkLXN0cy1zZGsvdG9vbHMvc3RzLXRyYWRlZmVkLXRlc3RzLmphciBcCi0JCSdhbmRyb2lkLXN0cy1zZGsvdG9vbHMvKjpzdHMtc2RrL3NyYy9tYWluL3Jlc291cmNlcy9zdHMtdHJhZGVmZWQtdG9vbHMvJwotCSQoTUVSR0VfWklQUykgJEAgJChTVFNfU0RLX1pJUClfZmlsdGVyZWQgJChTVFNfU0RLX1BMVUdJTl9TS0VMKQotCXJtIC1mICQoU1RTX1NES19aSVApX2ZpbHRlcmVkCi0KLS5QSE9OWTogc3RzLXNkawotc3RzLXNkazogJChzdHNfc2RrX3ppcCkKLSQoY2FsbCBkaXN0LWZvci1nb2Fscywgc3RzLXNkaywgJChzdHNfc2RrX3ppcCkpCi0KLWVuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3Rhc2tzL3Rvb2xzL3Z0cy1rZXJuZWwtdGVzdHMubWsgYi9jb3JlL3Rhc2tzL3Rvb2xzL3Z0cy1rZXJuZWwtdGVzdHMubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3MjdkYzEuLjAwMDAwMDAKLS0tIGEvY29yZS90YXNrcy90b29scy92dHMta2VybmVsLXRlc3RzLm1rCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMjIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotLWluY2x1ZGUgZXh0ZXJuYWwvbHRwL2FuZHJvaWQvbHRwX3BhY2thZ2VfbGlzdC5tawotCi1pbmNsdWRlICQoQlVJTERfU1lTVEVNKS90YXNrcy90b29scy92dHNfcGFja2FnZV91dGlscy5tawotCi0jIENvcHkga2VybmVsIHRlc3QgbW9kdWxlcyB0byB0ZXN0Y2FzZXMgZGlyZWN0b3JpZXMKLWtlcm5lbF9sdHBfaG9zdF9vdXQgOj0gJChIT1NUX09VVF9URVNUQ0FTRVMpL3Z0c19rZXJuZWxfbHRwX3Rlc3RzCi1rZXJuZWxfbHRwX3Z0c19vdXQgOj0gJChIT1NUX09VVCkvJCh0ZXN0X3N1aXRlX25hbWUpL2FuZHJvaWQtJCh0ZXN0X3N1aXRlX25hbWUpL3Rlc3RjYXNlcy92dHNfa2VybmVsX2x0cF90ZXN0cwota2VybmVsX2x0cF9tb2R1bGVzIDo9IFwKLSAgICBsdHAgXAotICAgICQobHRwX3BhY2thZ2VzKQpkaWZmIC0tZ2l0IGEvY29yZS90YXNrcy90b29scy92dHNfcGFja2FnZV91dGlscy5tayBiL2NvcmUvdGFza3MvdG9vbHMvdnRzX3BhY2thZ2VfdXRpbHMubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhODE5ZjIuLjAwMDAwMDAKLS0tIGEvY29yZS90YXNrcy90b29scy92dHNfcGFja2FnZV91dGlscy5taworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDIwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jCi0KLSMgJCgxKTogTGlzdCBvZiB0YXJnZXQgbmF0aXZlIGZpbGVzIHRvIGNvcHkuCi0jICQoMik6IENvcHkgZGVzdGluYXRpb24gZGlyZWN0b3J5LgotIyBFdmFsdWF0ZXMgdG8gYSBsaXN0IG9mICI6Ii1zZXBhcmF0ZWQgcGFpcnMgc3JjOmRzdC4KLWRlZmluZSB0YXJnZXQtbmF0aXZlLWNvcHktcGFpcnMKLSQoZm9yZWFjaCBtLCQoMSksXAotICAkKGV2YWwgX2J1aWx0X2ZpbGVzIDo9ICQoc3RyaXAgJChBTExfTU9EVUxFUy4kKG0pLkJVSUxUX0lOU1RBTExFRClcCi0gICQoQUxMX01PRFVMRVMuJChtKSQoVEFSR0VUXzJORF9BUkNIX01PRFVMRV9TVUZGSVgpLkJVSUxUX0lOU1RBTExFRCkpKVwKLSAgJChmb3JlYWNoIGksICQoc29ydCAkKF9idWlsdF9maWxlcykpLFwKLSAgICAkKGV2YWwgYnVpX2lucyA6PSAkKHN1YnN0IDosJChzcGFjZSksJChpKSkpXAotICAgICQoZXZhbCBpbnMgOj0gJCh3b3JkIDIsJChidWlfaW5zKSkpXAotICAgICQoaWYgJChmaWx0ZXIgJChUQVJHRVRfT1VUX1JPT1QpLyUsJChpbnMpKSxcCi0gICAgICAkKGV2YWwgYnVpIDo9ICQod29yZCAxLCQoYnVpX2lucykpKVwKLSAgICAgICQoZXZhbCBteV9jb3B5X2Rlc3QgOj0gJChwYXRzdWJzdCBkYXRhLyUsREFUQS8lLFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHBhdHN1YnN0IHN5c3RlbS8lLERBVEEvJSxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQocGF0c3Vic3QgJChQUk9EVUNUX09VVCkvJSwlLCQoaW5zKSkpKSlcCi0gICAgICAkKGNhbGwgZGVjbGFyZS1jb3B5LXRhcmdldC1saWNlbnNlLW1ldGFkYXRhLCQoMikvJChteV9jb3B5X2Rlc3QpLCQoYnVpKSlcCi0gICAgICAkKGJ1aSk6JCgyKS8kKG15X2NvcHlfZGVzdCkpKSkKLWVuZGVmCmRpZmYgLS1naXQgYS9jb3JlL3Rhc2tzL3Z0cy1jb3JlLXRlc3RzLm1rIGIvY29yZS90YXNrcy92dHMtY29yZS10ZXN0cy5tawppbmRleCAxZWViMDc4Li4xMWJiOTMyIDEwMDY0NAotLS0gYS9jb3JlL3Rhc2tzL3Z0cy1jb3JlLXRlc3RzLm1rCisrKyBiL2NvcmUvdGFza3MvdnRzLWNvcmUtdGVzdHMubWsKQEAgLTE2LDE1ICsxNiw2IEBACiB0ZXN0X3N1aXRlX3RyYWRlZmVkIDo9IHZ0cy10cmFkZWZlZAogdGVzdF9zdWl0ZV9yZWFkbWUgOj0gdGVzdC92dHMvdG9vbHMvdnRzLWNvcmUtdHJhZGVmZWQvUkVBRE1FCiAKLWluY2x1ZGUgJChCVUlMRF9TWVNURU0pL3Rhc2tzL3Rvb2xzL3Z0cy1rZXJuZWwtdGVzdHMubWsKLQotbHRwX2NvcHlfcGFpcnMgOj0gXAotICAkKGNhbGwgdGFyZ2V0LW5hdGl2ZS1jb3B5LXBhaXJzLCQoa2VybmVsX2x0cF9tb2R1bGVzKSwkKGtlcm5lbF9sdHBfdnRzX291dCkpCi0KLWNvcHlfbHRwX3Rlc3RzIDo9ICQoY2FsbCBjb3B5LW1hbnktZmlsZXMsJChsdHBfY29weV9wYWlycykpCi0KLXRlc3Rfc3VpdGVfZXh0cmFfZGVwcyA6PSAkKGNvcHlfbHRwX3Rlc3RzKQotCiBpbmNsdWRlICQoQlVJTERfU1lTVEVNKS90YXNrcy90b29scy9jb21wYXRpYmlsaXR5Lm1rCiAKIC5QSE9OWTogdnRzCmRpZmYgLS1naXQgYS9jb3JlL3ZlcnNpb25fdXRpbC5tayBiL2NvcmUvdmVyc2lvbl91dGlsLm1rCmluZGV4IDBlMzQ2MzQuLmRkY2JkYTIgMTAwNjQ0Ci0tLSBhL2NvcmUvdmVyc2lvbl91dGlsLm1rCisrKyBiL2NvcmUvdmVyc2lvbl91dGlsLm1rCkBAIC0yMyw2ICsyMyw3IEBACiAjICAgICBQTEFURk9STV9ESVNQTEFZX1ZFUlNJT04KICMgICAgIFBMQVRGT1JNX1NES19WRVJTSU9OCiAjICAgICBQTEFURk9STV9TREtfRVhURU5TSU9OX1ZFUlNJT04KKyMgICAgIFBMQVRGT1JNX0JBU0VfU0RLX0VYVEVOU0lPTl9WRVJTSU9OCiAjICAgICBQTEFURk9STV9WRVJTSU9OX0NPREVOQU1FCiAjICAgICBERUZBVUxUX0FQUF9UQVJHRVRfU0RLCiAjICAgICBCVUlMRF9JRApAQCAtNjEsMTQgKzYyLDI4IEBACiBQTEFURk9STV9TREtfVkVSU0lPTiA6PSAkKFJFTEVBU0VfUExBVEZPUk1fU0RLX1ZFUlNJT04pCiAuS0FUSV9SRUFET05MWSA6PSBQTEFURk9STV9TREtfVkVSU0lPTgogCitpZmRlZiBQTEFURk9STV9TREtfTUlOT1JfVkVSU0lPTgorICAkKGVycm9yIERvIG5vdCBzZXQgUExBVEZPUk1fU0RLX01JTk9SX1ZFUlNJT04gZGlyZWN0bHkuIFVzZSBSRUxFQVNFX1BMQVRGT1JNX1NES19NSU5PUl9WRVJTSU9OLiB2YWx1ZTogJChQTEFURk9STV9TREtfTUlOT1JfVkVSU0lPTikpCitlbmRpZgorUExBVEZPUk1fU0RLX01JTk9SX1ZFUlNJT04gOj0gJChSRUxFQVNFX1BMQVRGT1JNX1NES19NSU5PUl9WRVJTSU9OKQorLktBVElfUkVBRE9OTFkgOj0gUExBVEZPUk1fU0RLX01JTk9SX1ZFUlNJT04KKwogaWZkZWYgUExBVEZPUk1fU0RLX0VYVEVOU0lPTl9WRVJTSU9OCiAgICQoZXJyb3IgRG8gbm90IHNldCBQTEFURk9STV9TREtfRVhURU5TSU9OX1ZFUlNJT04gZGlyZWN0bHkuIFVzZSBSRUxFQVNFX1BMQVRGT1JNX1NES19FWFRFTlNJT05fVkVSU0lPTi4gdmFsdWU6ICQoUExBVEZPUk1fU0RLX0VYVEVOU0lPTl9WRVJTSU9OKSkKIGVuZGlmCiBQTEFURk9STV9TREtfRVhURU5TSU9OX1ZFUlNJT04gOj0gJChSRUxFQVNFX1BMQVRGT1JNX1NES19FWFRFTlNJT05fVkVSU0lPTikKIC5LQVRJX1JFQURPTkxZIDo9IFBMQVRGT1JNX1NES19FWFRFTlNJT05fVkVSU0lPTgogCi0jIFRoaXMgaXMgdGhlIHNkayBleHRlbnNpb24gdmVyc2lvbiB0aGF0IFBMQVRGT1JNX1NES19WRVJTSU9OIHNoaXBzIHdpdGguCi1QTEFURk9STV9CQVNFX1NES19FWFRFTlNJT05fVkVSU0lPTiA6PSAkKFBMQVRGT1JNX1NES19FWFRFTlNJT05fVkVSU0lPTikKK2lmZGVmIFBMQVRGT1JNX0JBU0VfU0RLX0VYVEVOU0lPTl9WRVJTSU9OCisgICQoZXJyb3IgRG8gbm90IHNldCBQTEFURk9STV9CQVNFX1NES19FWFRFTlNJT05fVkVSU0lPTiBkaXJlY3RseS4gVXNlIFJFTEVBU0VfUExBVEZPUk1fQkFTRV9TREtfRVhURU5TSU9OX1ZFUlNJT04uIHZhbHVlOiAkKFBMQVRGT1JNX0JBU0VfU0RLX0VYVEVOU0lPTl9WRVJTSU9OKSkKK2VuZGlmCitpZmRlZiBSRUxFQVNFX1BMQVRGT1JNX0JBU0VfU0RLX0VYVEVOU0lPTl9WRVJTSU9OCisgICMgVGhpcyBpcyB0aGUgc2RrIGV4dGVuc2lvbiB2ZXJzaW9uIHRoYXQgUExBVEZPUk1fU0RLX1ZFUlNJT04gc2hpcHMgd2l0aC4KKyAgUExBVEZPUk1fQkFTRV9TREtfRVhURU5TSU9OX1ZFUlNJT04gOj0gJChSRUxFQVNFX1BMQVRGT1JNX0JBU0VfU0RLX0VYVEVOU0lPTl9WRVJTSU9OKQorZWxzZQorICAjIEZhbGxiYWNrIHRvIFBMQVRGT1JNX1NES19FWFRFTlNJT05fVkVSU0lPTiBpZiBSRUxFQVNFX1BMQVRGT1JNX0JBU0VfU0RLX0VYVEVOU0lPTl9WRVJTSU9OIGlzIHVuZGVmaW5lZC4KKyAgUExBVEZPUk1fQkFTRV9TREtfRVhURU5TSU9OX1ZFUlNJT04gOj0gJChQTEFURk9STV9TREtfRVhURU5TSU9OX1ZFUlNJT04pCitlbmRpZgogLktBVElfUkVBRE9OTFkgOj0gUExBVEZPUk1fQkFTRV9TREtfRVhURU5TSU9OX1ZFUlNJT04KIAogaWZkZWYgUExBVEZPUk1fVkVSU0lPTl9DT0RFTkFNRQpkaWZmIC0tZ2l0IGEvZW52c2V0dXAuc2ggYi9lbnZzZXR1cC5zaAppbmRleCA0MTFkYTc1Li4wZjVmNmQwIDEwMDY0NAotLS0gYS9lbnZzZXR1cC5zaAorKysgYi9lbnZzZXR1cC5zaApAQCAtMzYwLDcgKzM2MCw2IEBACiAgICAgICBwYWNrYWdlcy9tb2R1bGVzL2FkYi9hZGIuYmFzaAogICAgICAgc3lzdGVtL2NvcmUvZmFzdGJvb3QvZmFzdGJvb3QuYmFzaAogICAgICAgdG9vbHMvYXN1aXRlL2FzdWl0ZS5zaAotICAgICAgcHJlYnVpbHRzL2JhemVsL2NvbW1vbi9iYXplbC1jb21wbGV0ZS5iYXNoCiAgICAgKQogICAgICMgQ29tcGxldGlvbiBjYW4gYmUgZGlzYWJsZWQgc2VsZWN0aXZlbHkgdG8gYWxsb3cgdXNlcnMgdG8gdXNlIG5vbi1zdGFuZGFyZCBjb21wbGV0aW9uLgogICAgICMgZS5nLgpAQCAtNDQwLDYgKzQzOSw3IEBACiBmdW5jdGlvbiBsdW5jaCgpCiB7CiAgICAgbG9jYWwgYW5zd2VyCisgICAgc2V0dXBfY29nX2Vudl9pZl9uZWVkZWQKIAogICAgIGlmIFtbICQjIC1ndCAxIF1dOyB0aGVuCiAgICAgICAgIGVjaG8gInVzYWdlOiBsdW5jaCBbdGFyZ2V0XSIgPiYyCkBAIC0xMTAzLDEwICsxMTAzLDcgQEAKICAgICAgICAgZG9uZQogICAgIGRvbmUKIAotICAgIGlmIFtbICIke1BXRH0iID09IC9nb29nbGUvY29nLyogXV07IHRoZW4KLSAgICAgICAgZj0iYnVpbGQvbWFrZS9jb2dzZXR1cC5zaCIKLSAgICAgICAgZWNobyAiaW5jbHVkaW5nICRmIjsgLiAiJFQvJGYiCi0gICAgZmkKKyAgICBzZXR1cF9jb2dfZW52X2lmX25lZWRlZAogfQogCiBmdW5jdGlvbiBzaG93Y29tbWFuZHMoKSB7CmRpZmYgLS1naXQgYS9zaGVsbF91dGlscy5zaCBiL3NoZWxsX3V0aWxzLnNoCmluZGV4IDg2ZjNmNDkuLjkwNTNjNDIgMTAwNjQ0Ci0tLSBhL3NoZWxsX3V0aWxzLnNoCisrKyBiL3NoZWxsX3V0aWxzLnNoCkBAIC02Myw2ICs2Myw3MCBAQAogfQogZmkKIAorIyBUaGlzIGZ1bmN0aW9uIHNldHMgdXAgdGhlIGJ1aWxkIGVudmlyb25tZW50IHRvIGJlIGFwcHJvcHJpYXRlIGZvciBDb2cuCitmdW5jdGlvbiBzZXR1cF9jb2dfZW52X2lmX25lZWRlZCgpIHsKKyAgbG9jYWwgdG9wPSQoZ2V0dG9wKQorCisgICMgcmV0dXJuIGVhcmx5IGlmIG5vdCBpbiBhIGNvZyB3b3Jrc3BhY2UKKyAgaWYgW1sgISAiJHRvcCIgPX4gXi9nb29nbGUvY29nIF1dOyB0aGVuCisgICAgcmV0dXJuIDAKKyAgZmkKKworICBzZXR1cF9jb2dfc3ltbGluaworCisgIGV4cG9ydCBBTkRST0lEX0JVSUxEX0VOVklST05NRU5UX0NPTkZJRz0iZ29vZ2xlci1jb2ciCisKKyAgIyBSdW5uaW5nIHJlcG8gY29tbWFuZCB3aXRoaW4gQ29nIHdvcmtzcGFjZXMgaXMgbm90IHN1cHBvcnRlZCwgc28gb3ZlcnJpZGUKKyAgIyBpdCB3aXRoIHRoaXMgZnVuY3Rpb24uIElmIHRoZSB1c2VyIGlzIHJ1bm5pbmcgcmVwbyB3aXRoaW4gYSBDb2cgd29ya3NwYWNlLAorICAjIHdlJ2xsIGZhaWwgd2l0aCBhbiBlcnJvciwgb3RoZXJ3aXNlLCB3ZSBydW4gdGhlIG9yaWdpbmFsIHJlcG8gY29tbWFuZCB3aXRoCisgICMgdGhlIGdpdmVuIGFyZ3MuCisgIGlmICEgT1JJR19SRVBPX1BBVEg9YHdoaWNoIHJlcG9gOyB0aGVuCisgICAgcmV0dXJuIDAKKyAgZmkKKyAgZnVuY3Rpb24gcmVwbyB7CisgICAgaWYgW1sgIiR7UFdEfSIgPT0gL2dvb2dsZS9jb2cvKiBdXTsgdGhlbgorICAgICAgZWNobyAtZSAiXGVbMDE7MzFtRVJST1I6XGVbMG1yZXBvIGNvbW1hbmQgaXMgZGlzYWxsb3dlZCB3aXRoaW4gQ29nIHdvcmtzcGFjZXMuIgorICAgICAga2lsbCAtSU5UICQkICMgZXhpdHMgdGhlIHNjcmlwdCB3aXRob3V0IGV4aXRpbmcgdGhlIHVzZXIncyBzaGVsbAorICAgIGZpCisgICAgJHtPUklHX1JFUE9fUEFUSH0gIiRAIgorICB9Cit9CisKKyMgY3JlYXRlcyBhIHN5bWxpbmsgZm9yIHRoZSBvdXQvIGRpciB3aGVuIGluc2lkZSBhIGNvZyB3b3Jrc3BhY2UuCitmdW5jdGlvbiBzZXR1cF9jb2dfc3ltbGluaygpIHsKKyAgbG9jYWwgb3V0X2Rpcj0kKGdldG91dGRpcikKKyAgbG9jYWwgdG9wPSQoZ2V0dG9wKQorCisgICMgcmV0dXJuIGVhcmx5IGlmIG91dCBkaXIgaXMgYWxyZWFkeSBhIHN5bWxpbmsKKyAgaWYgW1sgLUwgIiRvdXRfZGlyIiBdXTsgdGhlbgorICAgIHJldHVybiAwCisgIGZpCisKKyAgIyByZXR1cm4gZWFybHkgaWYgb3V0IGRpciBpcyBub3QgaW4gdGhlIHdvcmtzcGFjZQorICBpZiBbWyAhICIkb3V0X2RpciIgPX4gXiR0b3AvIF1dOyB0aGVuCisgICAgcmV0dXJuIDAKKyAgZmkKKworICBsb2NhbCBsaW5rX2Rlc3RpbmF0aW9uPSIke0hPTUV9Ly5jb2cvYW5kcm9pZC1idWlsZC1vdXQiCisKKyAgIyByZW1vdmUgZXhpc3Rpbmcgb3V0LyBkaXIgaWYgaXQgZXhpc3RzCisgIGlmIFtbIC1kICIkb3V0X2RpciIgXV07IHRoZW4KKyAgICBlY2hvICJEZXRlY3RlZCBleGlzdGluZyBvdXQvIGRpcmVjdG9yeSBpbiB0aGUgQ29nIHdvcmtzcGFjZSB3aGljaCBpcyBub3Qgc3VwcG9ydGVkLiBSZXBhaXJpbmcgd29ya3NwYWNlIGJ5IHJlbW92aW5nIGl0IGFuZCBjcmVhdGluZyB0aGUgc3ltbGluayB0byB+Ly5jb2cvYW5kcm9pZC1idWlsZC1vdXQiCisgICAgaWYgISBybSAtcmYgIiRvdXRfZGlyIjsgdGhlbgorICAgICAgZWNobyAiRmFpbGVkIHRvIHJlbW92ZSBleGlzdGluZyBvdXQvIGRpcmVjdG9yeTogJG91dF9kaXIiID4mMgorICAgICAga2lsbCAtSU5UICQkICMgZXhpdHMgdGhlIHNjcmlwdCB3aXRob3V0IGV4aXRpbmcgdGhlIHVzZXIncyBzaGVsbAorICAgIGZpCisgIGZpCisKKyAgIyBjcmVhdGUgc3ltbGluaworICBlY2hvICJDcmVhdGluZyBzeW1saW5rOiAkb3V0X2RpciAtPiAkbGlua19kZXN0aW5hdGlvbiIKKyAgbWtkaXIgLXAgJHtsaW5rX2Rlc3RpbmF0aW9ufQorICBpZiAhIGxuIC1zICIkbGlua19kZXN0aW5hdGlvbiIgIiRvdXRfZGlyIjsgdGhlbgorICAgIGVjaG8gIkZhaWxlZCB0byBjcmVhdGUgY29nIHN5bWxpbms6ICRvdXRfZGlyIC0+ICRsaW5rX2Rlc3RpbmF0aW9uIiA+JjIKKyAgICBraWxsIC1JTlQgJCQgIyBleGl0cyB0aGUgc2NyaXB0IHdpdGhvdXQgZXhpdGluZyB0aGUgdXNlcidzIHNoZWxsCisgIGZpCit9CisKIGZ1bmN0aW9uIGdldG91dGRpcgogewogICAgIGxvY2FsIHRvcD0kKGdldHRvcCkKQEAgLTExNCwxMSArMTc4LDExIEBACiAgICAgICAgIGVjaG8gLW4gIiR7Y29sb3JfZmFpbGVkfSMjIyMgZmFpbGVkIHRvIGJ1aWxkIHNvbWUgdGFyZ2V0cyAiCiAgICAgZmkKICAgICBpZiBbICRob3VycyAtZ3QgMCBdIDsgdGhlbgotICAgICAgICBwcmludGYgIiglMDJnOiUwMmc6JTAyZyAoaGg6bW06c3MpKSIgJGhvdXJzICRtaW5zICRzZWNzCisgICAgICAgIHByaW50ZiAiKCUwMmQ6JTAyZDolMDJkIChoaDptbTpzcykpIiAkaG91cnMgJG1pbnMgJHNlY3MKICAgICBlbGlmIFsgJG1pbnMgLWd0IDAgXSA7IHRoZW4KLSAgICAgICAgcHJpbnRmICIoJTAyZzolMDJnIChtbTpzcykpIiAkbWlucyAkc2VjcworICAgICAgICBwcmludGYgIiglMDJkOiUwMmQgKG1tOnNzKSkiICRtaW5zICRzZWNzCiAgICAgZWxpZiBbICRzZWNzIC1ndCAwIF0gOyB0aGVuCi0gICAgICAgIHByaW50ZiAiKCVzIHNlY29uZHMpIiAkc2VjcworICAgICAgICBwcmludGYgIiglZCBzZWNvbmRzKSIgJHNlY3MKICAgICBmaQogICAgIGVjaG8gIiAjIyMjJHtjb2xvcl9yZXNldH0iCiAgICAgZWNobwpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2JvYXJkL0FuZHJvaWQubWsgYi90YXJnZXQvYm9hcmQvYW5kcm9pZC1pbmZvLm1rCnNpbWlsYXJpdHkgaW5kZXggNzElCnJlbmFtZSBmcm9tIHRhcmdldC9ib2FyZC9BbmRyb2lkLm1rCnJlbmFtZSB0byB0YXJnZXQvYm9hcmQvYW5kcm9pZC1pbmZvLm1rCmluZGV4IDgxMzNhZjkuLjM2YmUwMDIgMTAwNjQ0Ci0tLSBhL3RhcmdldC9ib2FyZC9BbmRyb2lkLm1rCisrKyBiL3RhcmdldC9ib2FyZC9hbmRyb2lkLWluZm8ubWsKQEAgLTUxLDI5ICs1MSw2IEBACiAKICMgQ29weSBjb21wYXRpYmlsaXR5IG1ldGFkYXRhIHRvIHRoZSBkZXZpY2UuCiAKLSMgRGV2aWNlIE1hbmlmZXN0Ci1pZmRlZiBERVZJQ0VfTUFOSUZFU1RfRklMRQotIyAkKERFVklDRV9NQU5JRkVTVF9GSUxFKSBjYW4gYmUgYSBsaXN0IG9mIGZpbGVzCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLUxPQ0FMX01PRFVMRSAgICAgICAgOj0gdmVuZG9yX21hbmlmZXN0LnhtbAotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wIGxlZ2FjeV9ub3RfYV9jb250cmlidXRpb24KLUxPQ0FMX0xJQ0VOU0VfQ09ORElUSU9OUyA6PSBieV9leGNlcHRpb25fb25seSBub3RfYWxsb3dlZCBub3RpY2UKLUxPQ0FMX01PRFVMRV9TVEVNICAgOj0gbWFuaWZlc3QueG1sCi1MT0NBTF9NT0RVTEVfQ0xBU1MgIDo9IEVUQwotTE9DQUxfTU9EVUxFX1BBVEggICA6PSAkKFRBUkdFVF9PVVRfVkVORE9SKS9ldGMvdmludGYKLQotR0VOIDo9ICQobG9jYWwtZ2VuZXJhdGVkLXNvdXJjZXMtZGlyKS9tYW5pZmVzdC54bWwKLSQoR0VOKTogUFJJVkFURV9ERVZJQ0VfTUFOSUZFU1RfRklMRSA6PSAkKERFVklDRV9NQU5JRkVTVF9GSUxFKQotJChHRU4pOiAkKERFVklDRV9NQU5JRkVTVF9GSUxFKSAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9hc3NlbWJsZV92aW50ZgotCUJPQVJEX1NFUE9MSUNZX1ZFUlM9JChCT0FSRF9TRVBPTElDWV9WRVJTKSBcCi0JUFJPRFVDVF9FTkZPUkNFX1ZJTlRGX01BTklGRVNUPSQoUFJPRFVDVF9FTkZPUkNFX1ZJTlRGX01BTklGRVNUKSBcCi0JJChIT1NUX09VVF9FWEVDVVRBQkxFUykvYXNzZW1ibGVfdmludGYgLW8gJEAgXAotCQktaSAkKGNhbGwgbm9ybWFsaXplLXBhdGgtbGlzdCwkKFBSSVZBVEVfREVWSUNFX01BTklGRVNUX0ZJTEUpKQotCi1MT0NBTF9QUkVCVUlMVF9NT0RVTEVfRklMRSA6PSAkKEdFTikKLWluY2x1ZGUgJChCVUlMRF9QUkVCVUlMVCkKLWVuZGlmCi0KICMgREVWSUNFX01BTklGRVNUX1NLVVM6IGEgbGlzdCBvZiBTS1VTIHdoZXJlIERFVklDRV9NQU5JRkVTVF88c2t1Pl9GSUxFUyBpcyBkZWZpbmVkLgogaWZkZWYgREVWSUNFX01BTklGRVNUX1NLVVMKIApAQCAtMTEyLDMwICs4OSw2IEBACiAKIGVuZGlmICMgREVWSUNFX01BTklGRVNUX1NLVVMKIAotIyBPRE0gbWFuaWZlc3QKLWlmZGVmIE9ETV9NQU5JRkVTVF9GSUxFUwotIyBPRE1fTUFOSUZFU1RfRklMRVMgaXMgYSBsaXN0IG9mIGZpbGVzIHRoYXQgaXMgY29tYmluZWQgYW5kIGluc3RhbGxlZCBhcyB0aGUgZGVmYXVsdCBPRE0gbWFuaWZlc3QuCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLUxPQ0FMX01PRFVMRSA6PSBvZG1fbWFuaWZlc3QueG1sCi1MT0NBTF9MSUNFTlNFX0tJTkRTIDo9IFNQRFgtbGljZW5zZS1pZGVudGlmaWVyLUFwYWNoZS0yLjAgbGVnYWN5X25vdF9hX2NvbnRyaWJ1dGlvbgotTE9DQUxfTElDRU5TRV9DT05ESVRJT05TIDo9IGJ5X2V4Y2VwdGlvbl9vbmx5IG5vdF9hbGxvd2VkIG5vdGljZQotTE9DQUxfTU9EVUxFX1NURU0gOj0gbWFuaWZlc3QueG1sCi1MT0NBTF9NT0RVTEVfQ0xBU1MgOj0gRVRDCi1MT0NBTF9NT0RVTEVfUkVMQVRJVkVfUEFUSCA6PSB2aW50ZgotTE9DQUxfT0RNX01PRFVMRSA6PSB0cnVlCi0KLUdFTiA6PSAkKGxvY2FsLWdlbmVyYXRlZC1zb3VyY2VzLWRpcikvbWFuaWZlc3QueG1sCi0kKEdFTik6IFBSSVZBVEVfU1JDX0ZJTEVTIDo9ICQoT0RNX01BTklGRVNUX0ZJTEVTKQotJChHRU4pOiAkKE9ETV9NQU5JRkVTVF9GSUxFUykgJChIT1NUX09VVF9FWEVDVVRBQkxFUykvYXNzZW1ibGVfdmludGYKLQkjIFNldCBWSU5URl9JR05PUkVfVEFSR0VUX0ZDTV9WRVJTSU9OIHRvIHRydWUgYmVjYXVzZSBpdCBzaG91bGQgb25seSBiZSBpbiBkZXZpY2UgbWFuaWZlc3QuCi0JVklOVEZfSUdOT1JFX1RBUkdFVF9GQ01fVkVSU0lPTj10cnVlIFwKLQkkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9hc3NlbWJsZV92aW50ZiAtbyAkQCBcCi0JCS1pICQoY2FsbCBub3JtYWxpemUtcGF0aC1saXN0LCQoUFJJVkFURV9TUkNfRklMRVMpKQotCi1MT0NBTF9QUkVCVUlMVF9NT0RVTEVfRklMRSA6PSAkKEdFTikKLWluY2x1ZGUgJChCVUlMRF9QUkVCVUlMVCkKLWVuZGlmICMgT0RNX01BTklGRVNUX0ZJTEVTCi0KICMgT0RNX01BTklGRVNUX1NLVVM6IGEgbGlzdCBvZiBTS1VTIHdoZXJlIE9ETV9NQU5JRkVTVF88c2t1Pl9GSUxFUyBhcmUgZGVmaW5lZC4KIGlmZGVmIE9ETV9NQU5JRkVTVF9TS1VTCiAKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2FwcF9mdW5jdGlvbl9leHRlbnNpb25zLm1rIGIvdGFyZ2V0L3Byb2R1Y3QvYXBwX2Z1bmN0aW9uX2V4dGVuc2lvbnMubWsKaW5kZXggYTYxYWZkYy4uZTYwMWZkNyAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvYXBwX2Z1bmN0aW9uX2V4dGVuc2lvbnMubWsKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvYXBwX2Z1bmN0aW9uX2V4dGVuc2lvbnMubWsKQEAgLTE4LDUgKzE4LDUgQEAKIAogIyAvc3lzdGVtX2V4dCBwYWNrYWdlcwogUFJPRFVDVF9QQUNLQUdFUyArPSBcCi0gICAgY29tLmdvb2dsZS5hbmRyb2lkLmFwcGZ1bmN0aW9ucy5zaWRlY2FyIFwKLSAgICBhcHBmdW5jdGlvbnMuc2lkZWNhci54bWwKKyAgICBjb20uYW5kcm9pZC5leHRlbnNpb25zLmFwcGZ1bmN0aW9ucyBcCisgICAgYXBwZnVuY3Rpb25zLmV4dGVuc2lvbi54bWwKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2Jhc2Vfc3lzdGVtLm1rIGIvdGFyZ2V0L3Byb2R1Y3QvYmFzZV9zeXN0ZW0ubWsKaW5kZXggNTg2ZDJiOC4uYTc4YzAyMyAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvYmFzZV9zeXN0ZW0ubWsKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvYmFzZV9zeXN0ZW0ubWsKQEAgLTE3LDcgKzE3LDcgQEAKICMgQmFzZSBtb2R1bGVzIGFuZCBzZXR0aW5ncyBmb3IgdGhlIHN5c3RlbSBwYXJ0aXRpb24uCiBQUk9EVUNUX1BBQ0tBR0VTICs9IFwKICAgICBhYnggXAotICAgIGFjb25maWdkIFwKKyAgICBhY29uZmlnZC1zeXN0ZW0gXAogICAgIGFkYmRfc3lzdGVtX2FwaSBcCiAgICAgYWZsYWdzIFwKICAgICBhbSBcCkBAIC05Niw2ICs5Niw3IEBACiAgICAgZW5oYW5jZWQtY29uZmlybWF0aW9uLnhtbCBcCiAgICAgRXh0U2hhcmVkIFwKICAgICBmbGFnc19oZWFsdGhfY2hlY2sgXAorICAgIGZyYW1ld29yay1jb25uZWN0aXZpdHktYiBcCiAgICAgZnJhbWV3b3JrLWdyYXBoaWNzIFwKICAgICBmcmFtZXdvcmstbG9jYXRpb24gXAogICAgIGZyYW1ld29yay1taW51cy1hcGV4IFwKQEAgLTIwNSw3ICsyMDYsNiBAQAogICAgIGxpYnN0ZGMrKyBcCiAgICAgbGlic3lzdXRpbHMgXAogICAgIGxpYnVpIFwKLSAgICBsaWJ1cHJvYmVzdGF0c19jbGllbnQgXAogICAgIGxpYnVzYmhvc3QgXAogICAgIGxpYnV0aWxzIFwKICAgICBsaWJ2aW50Zl9qbmkgXApAQCAtMjEzLDYgKzIxMyw3IEBACiAgICAgbGlid2lsaGVsbSBcCiAgICAgbGlua2VyIFwKICAgICBsbGtkIFwKKyAgICBsbG5ka19saWJzIFwKICAgICBsbWtkIFwKICAgICBMb2NhbFRyYW5zcG9ydCBcCiAgICAgbG9ja3NldHRpbmdzIFwKQEAgLTI0OCw2ICsyNDksNyBAQAogICAgIHBpbnRvb2wgXAogICAgIHBsYXRmb3JtLnhtbCBcCiAgICAgcG0gXAorICAgIHByZWZldGNoIFwKICAgICBwcmVpbnN0YWxsZWQtcGFja2FnZXMtYXNsLWZpbGVzLnhtbCBcCiAgICAgcHJlaW5zdGFsbGVkLXBhY2thZ2VzLXBsYXRmb3JtLnhtbCBcCiAgICAgcHJlaW5zdGFsbGVkLXBhY2thZ2VzLXN0cmljdC1zaWduYXR1cmUueG1sIFwKQEAgLTI3Niw3ICsyNzgsNiBAQAogICAgIFNoZWxsIFwKICAgICBzaGVsbF9hbmRfdXRpbGl0aWVzX3N5c3RlbSBcCiAgICAgc20gXAotICAgIHNuYXBzaG90Y3RsIFwKICAgICBzbmFwdXNlcmQgXAogICAgIHN0b3JhZ2VkIFwKICAgICBzdXJmYWNlZmxpbmdlciBcCkBAIC0yODksNiArMjkwLDcgQEAKICAgICB0b21ic3RvbmVkIFwKICAgICB0cmFjZWQgXAogICAgIHRyYWNlZF9wcm9iZXMgXAorICAgIHRyYWRlaW5tb2RlIFwKICAgICB0dW5lMmZzIFwKICAgICB1aWF1dG9tYXRvciBcCiAgICAgdWlucHV0IFwKQEAgLTMwOCw4ICszMTAsMjAgQEAKICAgUFJPRFVDVF9QQUNLQUdFUyArPSBcCiAgICAgICAgIGNvbS5hbmRyb2lkLmNyYXNocmVjb3ZlcnkgXAogCitlbHNlCisgIFBST0RVQ1RfUEFDS0FHRVMgKz0gXAorICAgIGZyYW1ld29yay1wbGF0Zm9ybWNyYXNocmVjb3ZlcnkgXAorCiBlbmRpZgogCisjIFdoZW4gd2UgcmVsZWFzZSBvbmRldmljZWludGVsbGlnZW5jZSBpbiBuZXVyYWxuZXR3b3JrcyBtb2R1bGUKK2lmbmVxICgkKFJFTEVBU0VfT05ERVZJQ0VfSU5URUxMSUdFTkNFX01PRFVMRSksdHJ1ZSkKKyAgUFJPRFVDVF9QQUNLQUdFUyArPSBcCisgICAgICAgIGZyYW1ld29yay1vbmRldmljZWludGVsbGlnZW5jZS1wbGF0Zm9ybQorCitlbmRpZgorCisKICMgV2hlbiB3ZSByZWxlYXNlIHVwcm9iZXN0YXRzIG1vZHVsZQogaWZlcSAoJChSRUxFQVNFX1VQUk9CRVNUQVRTX01PRFVMRSksdHJ1ZSkKICAgICBQUk9EVUNUX1BBQ0tBR0VTICs9IFwKQEAgLTMxOCw2ICszMzIsNyBAQAogZWxzZQogICAgIFBST0RVQ1RfUEFDS0FHRVMgKz0gXAogICAgICAgICB1cHJvYmVzdGF0cyBcCisgICAgICAgIGxpYnVwcm9iZXN0YXRzX2NsaWVudCBcCiAKIGVuZGlmCiAKQEAgLTM0OCw4ICszNjMsNyBAQAogIyBDaGVjayBpZiB0aGUgYnVpbGQgc3VwcG9ydHMgUHJvZmlsaW5nIG1vZHVsZQogaWZlcSAoJChSRUxFQVNFX1BBQ0tBR0VfUFJPRklMSU5HX01PRFVMRSksdHJ1ZSkKICAgICBQUk9EVUNUX1BBQ0tBR0VTICs9IFwKLSAgICAgICBjb20uYW5kcm9pZC5wcm9maWxpbmcgXAotICAgICAgIHRyYWNlX3JlZGFjdG9yCisgICAgICAgY29tLmFuZHJvaWQucHJvZmlsaW5nCiBlbmRpZgogCiBpZmVxICgkKFJFTEVBU0VfVVNFX1dFQlZJRVdfQk9PVFNUUkFQX01PRFVMRSksdHJ1ZSkKQEAgLTM2Miw2ICszNzYsMTEgQEAKICAgICAgICAgY29tLmFuZHJvaWQucmFuZ2luZwogZW5kaWYKIAoraWZlcSAoJChSRUxFQVNFX01FTU9SWV9NQU5BR0VNRU5UX0RBRU1PTiksdHJ1ZSkKKyAgUFJPRFVDVF9QQUNLQUdFUyArPSBcCisgICAgICAgIG1tX2RhZW1vbgorZW5kaWYKKwogIyBWSU5URiBkYXRhIGZvciBzeXN0ZW0gaW1hZ2UKIFBST0RVQ1RfUEFDS0FHRVMgKz0gXAogICAgIHN5c3RlbV9tYW5pZmVzdC54bWwgXApAQCAtNDM2LDYgKzQ1NSw3IEBACiAgICAgbHBkdW1wIFwKICAgICBta2UyZnMgXAogICAgIG1rZnMuZXJvZnMgXAorICAgIHBidG9tYnN0b25lIFwKICAgICByZXNpemUyZnMgXAogICAgIHNnZGlzayBcCiAgICAgc3FsaXRlMyBcCkBAIC01MDMsNiArNTIzLDcgQEAKICAgICByZWNvcmRfYmluZGVyIFwKICAgICBzZXJ2aWNlZGlzcGF0Y2hlciBcCiAgICAgc2hvd21hcCBcCisgICAgc25hcHNob3RjdGwgXAogICAgIHNxbGl0ZTMgXAogICAgIHNzIFwKICAgICBzdGFydF93aXRoX2xvY2thZ2VudCBcCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9iYXNlX3N5c3RlbV9leHQubWsgYi90YXJnZXQvcHJvZHVjdC9iYXNlX3N5c3RlbV9leHQubWsKaW5kZXggZmViZTUzNy4uNjc2N2I5YSAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvYmFzZV9zeXN0ZW1fZXh0Lm1rCisrKyBiL3RhcmdldC9wcm9kdWN0L2Jhc2Vfc3lzdGVtX2V4dC5tawpAQCAtMzAsMyArMzAsOCBAQAogUFJPRFVDVF9QQUNLQUdFU19TSElQUElOR19BUElfTEVWRUxfMzQgKz0gXAogICAgIGh3c2VydmljZW1hbmFnZXIgXAogICAgIGFuZHJvaWQuaGlkbC5hbGxvY2F0b3JAMS4wLXNlcnZpY2UgXAorCisjIEFwcEZ1bmN0aW9uIEV4dGVuc2lvbnMKK2lmbmVxICgsJChSRUxFQVNFX0FQUEZVTkNUSU9OX1NJREVDQVIpKQorICAgICQoY2FsbCBpbmhlcml0LXByb2R1Y3QsICQoU1JDX1RBUkdFVF9ESVIpL3Byb2R1Y3QvYXBwX2Z1bmN0aW9uX2V4dGVuc2lvbnMubWspCitlbmRpZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2Jhc2VfdmVuZG9yLm1rIGIvdGFyZ2V0L3Byb2R1Y3QvYmFzZV92ZW5kb3IubWsKaW5kZXggYTgwZTBiMy4uMTZmYzdmZCAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvYmFzZV92ZW5kb3IubWsKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvYmFzZV92ZW5kb3IubWsKQEAgLTE3LDcgKzE3LDYgQEAKICMgQmFzZSBtb2R1bGVzIGFuZCBzZXR0aW5ncyBmb3IgcmVjb3ZlcnkuCiBQUk9EVUNUX1BBQ0tBR0VTICs9IFwKICAgICBhZGJkLnJlY292ZXJ5IFwKLSAgICBhbmRyb2lkLmhhcmR3YXJlLmhlYWx0aEAyLjAtaW1wbC1kZWZhdWx0LnJlY292ZXJ5IFwKICAgICBidWlsZF9mbGFnX3ZlbmRvciBcCiAgICAgY2dyb3Vwcy5yZWNvdmVyeS5qc29uIFwKICAgICBjaGFyZ2VyLnJlY292ZXJ5IFwKQEAgLTcyLDYgKzcxLDggQEAKICAgICBwYXNzd2Rfb2RtIFwKICAgICBwYXNzd2RfdmVuZG9yIFwKICAgICBzZWxpbnV4X3BvbGljeV9ub25zeXN0ZW0gXAorICAgIHNlbGludXhfcG9saWN5X3ZlbmRvciBcCisgICAgc2VsaW51eF9wb2xpY3lfb2RtIFwKICAgICBzaGVsbF9hbmRfdXRpbGl0aWVzX3ZlbmRvciBcCiAgICAgb2RtLWJ1aWxkLnByb3AgXAogCkBAIC0xMDUsNiArMTA2LDcgQEAKICMgVklOVEYgZGF0YSBmb3IgdmVuZG9yIGltYWdlCiBQUk9EVUNUX1BBQ0tBR0VTICs9IFwKICAgICB2ZW5kb3JfY29tcGF0aWJpbGl0eV9tYXRyaXgueG1sIFwKKyAgICB2ZW5kb3JfbWFuaWZlc3QueG1sIFwKIAogIyBCYXNlIG1vZHVsZXMgYW5kIHNldHRpbmdzIGZvciB0aGUgZGVidWcgcmFtZGlzaywgd2hpY2ggaXMgdGhlbiBwYWNrZWQKICMgaW50byBhIGJvb3QtZGVidWcuaW1nIGFuZCBhIHZlbmRvcl9ib290LWRlYnVnLmltZy4KZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2J1aWxkX3ZhcmlhYmxlcy5tayBiL3RhcmdldC9wcm9kdWN0L2J1aWxkX3ZhcmlhYmxlcy5tawppbmRleCA3NjYxZTA2Li5jOTM2OTExIDEwMDY0NAotLS0gYS90YXJnZXQvcHJvZHVjdC9idWlsZF92YXJpYWJsZXMubWsKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvYnVpbGRfdmFyaWFibGVzLm1rCkBAIC0yMCw4ICsyMCwxNyBAQAogIyBDb250cm9sIGxpYmJpbmRlciBjbGllbnQgY2FjaGluZwogJChjYWxsIHNvb25nX2NvbmZpZ19zZXQsIGxpYmJpbmRlciwgcmVsZWFzZV9saWJiaW5kZXJfY2xpZW50X2NhY2hlLCAkKFJFTEVBU0VfTElCQklOREVSX0NMSUVOVF9DQUNIRSkpCiAKKyMgQ29udHJvbCBjYWNoaW5nIHdoaWxlIGFkZGluZyBzZXJ2aWNlIGluIGxpYmJpbmRlciBjYWNoZQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXQsIGxpYmJpbmRlciwgcmVsZWFzZV9saWJiaW5kZXJfYWRkc2VydmljZV9jYWNoZSwgJChSRUxFQVNFX0xJQkJJTkRFUl9BRERTRVJWSUNFX0NBQ0hFKSkKKworIyBSZW1vdmUgc3RhdGljIGxpc3QgaW4gbGliYmluZGVyIGNhY2hlCiskKGNhbGwgc29vbmdfY29uZmlnX3NldCwgbGliYmluZGVyLCByZWxlYXNlX2xpYmJpbmRlcl9yZW1vdmVfY2FjaGVfc3RhdGljX2xpc3QsICQoUkVMRUFTRV9MSUJCSU5ERVJfUkVNT1ZFX0NBQ0hFX1NUQVRJQ19MSVNUKSkKKwogIyBVc2UgdGhlIGNvbmZpZ3VyZWQgcmVsZWFzZSBvZiBzcWxpdGUKICQoY2FsbCBzb29uZ19jb25maWdfc2V0LCBsaWJzcWxpdGUzLCByZWxlYXNlX3BhY2thZ2VfbGlic3FsaXRlMywgJChSRUxFQVNFX1BBQ0tBR0VfTElCU1FMSVRFMykpCiAKICMgVXNlIHRoZSBjb25maWd1cmVkIE1lc3NhZ2VRdWV1ZSBpbXBsZW1lbnRhdGlvbgogJChjYWxsIHNvb25nX2NvbmZpZ19zZXQsIG1lc3NhZ2VxdWV1ZSwgcmVsZWFzZV9wYWNrYWdlX21lc3NhZ2VxdWV1ZV9pbXBsZW1lbnRhdGlvbiwgJChSRUxFQVNFX1BBQ0tBR0VfTUVTU0FHRVFVRVVFX0lNUExFTUVOVEFUSU9OKSkKKworIyBVc2UgdGhlIGNvbmZpZ3VyZWQgdmVyc2lvbiBvZiBXZWJWaWV3CiskKGNhbGwgc29vbmdfY29uZmlnX3NldCwgd2VidmlldywgcmVsZWFzZV9wYWNrYWdlX3dlYnZpZXdfdmVyc2lvbiwgJChSRUxFQVNFX1BBQ0tBR0VfV0VCVklFV19WRVJTSU9OKSkKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2RlZmF1bHRfYXJ0X2NvbmZpZy5tayBiL3RhcmdldC9wcm9kdWN0L2RlZmF1bHRfYXJ0X2NvbmZpZy5tawppbmRleCAwOTk5M2YzLi4wYjZmOTgxIDEwMDY0NAotLS0gYS90YXJnZXQvcHJvZHVjdC9kZWZhdWx0X2FydF9jb25maWcubWsKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvZGVmYXVsdF9hcnRfY29uZmlnLm1rCkBAIC01MSw2ICs1MSw3IEBACiAgICAgZnJhbWV3b3JrLW1pbnVzLWFwZXggXAogICAgIGZyYW1ld29yay1ncmFwaGljcyBcCiAgICAgZnJhbWV3b3JrLWxvY2F0aW9uIFwKKyAgICBmcmFtZXdvcmstY29ubmVjdGl2aXR5LWIgXAogICAgIGV4dCBcCiAgICAgdGVsZXBob255LWNvbW1vbiBcCiAgICAgdm9pcC1jb21tb24gXApAQCAtOTAsMTEgKzkxLDI3IEBACiAgICAgY29tLmFuZHJvaWQudmlydDpmcmFtZXdvcmstdmlydHVhbGl6YXRpb24gXAogICAgIGNvbS5hbmRyb2lkLndpZmk6ZnJhbWV3b3JrLXdpZmkgXAogCi0jIFdoZW4gd2UgcmVsZWFzZSBjcmFzaHJlY292ZXJ5IG1vZHVsZQorIyBXaGVuIGNyYXNocmVjb3ZlcnkgbW9kdWxlIGlzIHJlYWR5IHVzZSBhcGV4IGphcgorIyBlbHNlIHB1dCB0aGUgcGxhdGZvcm0gamFyIGluIHN5c3RlbQogaWZlcSAoJChSRUxFQVNFX0NSQVNIUkVDT1ZFUllfTU9EVUxFKSx0cnVlKQotICBQUk9EVUNUX0FQRVhfQk9PVF9KQVJTICs9IFwKKyAgICBQUk9EVUNUX0FQRVhfQk9PVF9KQVJTICs9IFwKICAgICAgICAgY29tLmFuZHJvaWQuY3Jhc2hyZWNvdmVyeTpmcmFtZXdvcmstY3Jhc2hyZWNvdmVyeSBcCiAKK2Vsc2UKKyAgICBQUk9EVUNUX0JPT1RfSkFSUyArPSBcCisgICAgICAgIGZyYW1ld29yay1wbGF0Zm9ybWNyYXNocmVjb3ZlcnkgXAorCitlbmRpZgorCisjIFdoZW4gd2UgcmVsZWFzZSBvbmRldmljZWludGVsbGlnZW5jZSBpbiBOZXVyYWxOZXR3b3JrcyBtb2R1bGUKK2lmZXEgKCQoUkVMRUFTRV9PTkRFVklDRV9JTlRFTExJR0VOQ0VfTU9EVUxFKSx0cnVlKQorICAgIFBST0RVQ1RfQVBFWF9CT09UX0pBUlMgKz0gXAorICAgIGNvbS5hbmRyb2lkLm5ldXJhbG5ldHdvcmtzOmZyYW1ld29yay1vbmRldmljZWludGVsbGlnZW5jZSBcCisKK2Vsc2UKKyAgICBQUk9EVUNUX0JPT1RfSkFSUyArPSBcCisgICAgICAgIGZyYW1ld29yay1vbmRldmljZWludGVsbGlnZW5jZS1wbGF0Zm9ybSBcCisKIGVuZGlmCiAKICMgQ2hlY2sgaWYgdGhlIGJ1aWxkIHN1cHBvcnRzIE5GQyBhcGV4IG9yIG5vdApAQCAtMTQyLDYgKzE1OSwxMyBAQAogCiBlbmRpZgogCisjIFdoZW4gd2UgcmVsZWFzZSBvbmRldmljZWludGVsbGlnZW5jZSBpbiBOZXVyYWxOZXR3b3JrcyBtb2R1bGUKK2lmZXEgKCQoUkVMRUFTRV9PTkRFVklDRV9JTlRFTExJR0VOQ0VfTU9EVUxFKSx0cnVlKQorICAgIFBST0RVQ1RfQVBFWF9TWVNURU1fU0VSVkVSX0pBUlMgKz0gXAorICAgICAgICBjb20uYW5kcm9pZC5uZXVyYWxuZXR3b3JrczpzZXJ2aWNlLW9uZGV2aWNlaW50ZWxsaWdlbmNlCisKK2VuZGlmCisKIGlmZXEgKCQoUkVMRUFTRV9BVkZfRU5BQkxFX0xMUFZNX0NIQU5HRVMpLHRydWUpCiAgIFBST0RVQ1RfQVBFWF9TWVNURU1fU0VSVkVSX0pBUlMgKz0gY29tLmFuZHJvaWQudmlydDpzZXJ2aWNlLXZpcnR1YWxpemF0aW9uCiBlbmRpZgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvZ2VuZXJpYy9BbmRyb2lkLmJwIGIvdGFyZ2V0L3Byb2R1Y3QvZ2VuZXJpYy9BbmRyb2lkLmJwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YTIwYjQKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvcHJvZHVjdC9nZW5lcmljL0FuZHJvaWQuYnAKQEAgLTAsMCArMSw5MTUgQEAKK2dlbmVyaWNfcm9vdGRpcnMgPSBbCisgICAgImFjY3QiLAorICAgICJhcGV4IiwKKyAgICAiYm9vdHN0cmFwLWFwZXgiLAorICAgICJjb25maWciLAorICAgICJkYXRhIiwKKyAgICAiZGF0YV9taXJyb3IiLAorICAgICJkZWJ1Z19yYW1kaXNrIiwKKyAgICAiZGV2IiwKKyAgICAibGlua2VyY29uZmlnIiwKKyAgICAibWV0YWRhdGEiLAorICAgICJtbnQiLAorICAgICJvZG0iLAorICAgICJvZG1fZGxrbSIsCisgICAgIm9lbSIsCisgICAgInBvc3RpbnN0YWxsIiwKKyAgICAicHJvYyIsCisgICAgInNlY29uZF9zdGFnZV9yZXNvdXJjZXMiLAorICAgICJzdG9yYWdlIiwKKyAgICAic3lzIiwKKyAgICAic3lzdGVtIiwKKyAgICAic3lzdGVtX2Rsa20iLAorICAgICJ0bXAiLAorICAgICJ2ZW5kb3IiLAorICAgICJ2ZW5kb3JfZGxrbSIsCitdCisKK2FuZHJvaWRfcm9vdGRpcnMgPSBbCisgICAgInN5c3RlbV9leHQiLAorICAgICJwcm9kdWN0IiwKK10KKworZ2VuZXJpY19zeW1saW5rcyA9IFsKKyAgICB7CisgICAgICAgIHRhcmdldDogIi9zeXN0ZW0vYmluL2luaXQiLAorICAgICAgICBuYW1lOiAiaW5pdCIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHRhcmdldDogIi9zeXN0ZW0vZXRjIiwKKyAgICAgICAgbmFtZTogImV0YyIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHRhcmdldDogIi9zeXN0ZW0vYmluIiwKKyAgICAgICAgbmFtZTogImJpbiIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHRhcmdldDogIi92ZW5kb3IiLAorICAgICAgICBuYW1lOiAic3lzdGVtL3ZlbmRvciIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHRhcmdldDogIi9zeXN0ZW1fZGxrbS9saWIvbW9kdWxlcyIsCisgICAgICAgIG5hbWU6ICJzeXN0ZW0vbGliL21vZHVsZXMiLAorICAgIH0sCisgICAgeworICAgICAgICB0YXJnZXQ6ICIvZGF0YS91c2VyX2RlLzAvY29tLmFuZHJvaWQuc2hlbGwvZmlsZXMvYnVncmVwb3J0cyIsCisgICAgICAgIG5hbWU6ICJidWdyZXBvcnRzIiwKKyAgICB9LAorICAgIHsKKyAgICAgICAgdGFyZ2V0OiAiL3N5cy9rZXJuZWwvZGVidWciLAorICAgICAgICBuYW1lOiAiZCIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHRhcmdldDogIi9zdG9yYWdlL3NlbGYvcHJpbWFyeSIsCisgICAgICAgIG5hbWU6ICJzZGNhcmQiLAorICAgIH0sCisgICAgeworICAgICAgICB0YXJnZXQ6ICIvcHJvZHVjdC9ldGMvc2VjdXJpdHkvYWRiX2tleXMiLAorICAgICAgICBuYW1lOiAiYWRiX2tleXMiLAorICAgIH0sCisgICAgLy8gRm9yIFRyZWJsZSBHZW5lcmljIFN5c3RlbSBJbWFnZSAoR1NJKSwgc3lzdGVtLWFzLXJvb3QgR1NJIG5lZWRzIHRvIHdvcmsgb24gYm90aCBkZXZpY2VzIHdpdGgKKyAgICAvLyBhbmQgd2l0aG91dCAvb2RtIHBhcnRpdGlvbi4gVGhvc2Ugc3ltbGlua3MgYXJlIGZvciBkZXZpY2VzIHdpdGhvdXQgL29kbSBwYXJ0aXRpb24uIEZvcgorICAgIC8vIGRldmljZXMgd2l0aCAvb2RtIHBhcnRpdGlvbiwgbW91bnQgb2RtLmltZyB1bmRlciAvb2RtIHdpbGwgaGlkZSB0aG9zZSBzeW1saW5rcy4KKyAgICB7CisgICAgICAgIHRhcmdldDogIi92ZW5kb3Ivb2RtL2FwcCIsCisgICAgICAgIG5hbWU6ICJvZG0vYXBwIiwKKyAgICB9LAorICAgIHsKKyAgICAgICAgdGFyZ2V0OiAiL3ZlbmRvci9vZG0vYmluIiwKKyAgICAgICAgbmFtZTogIm9kbS9iaW4iLAorICAgIH0sCisgICAgeworICAgICAgICB0YXJnZXQ6ICIvdmVuZG9yL29kbS9ldGMiLAorICAgICAgICBuYW1lOiAib2RtL2V0YyIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHRhcmdldDogIi92ZW5kb3Ivb2RtL2Zpcm13YXJlIiwKKyAgICAgICAgbmFtZTogIm9kbS9maXJtd2FyZSIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHRhcmdldDogIi92ZW5kb3Ivb2RtL2ZyYW1ld29yayIsCisgICAgICAgIG5hbWU6ICJvZG0vZnJhbWV3b3JrIiwKKyAgICB9LAorICAgIHsKKyAgICAgICAgdGFyZ2V0OiAiL3ZlbmRvci9vZG0vbGliIiwKKyAgICAgICAgbmFtZTogIm9kbS9saWIiLAorICAgIH0sCisgICAgeworICAgICAgICB0YXJnZXQ6ICIvdmVuZG9yL29kbS9saWI2NCIsCisgICAgICAgIG5hbWU6ICJvZG0vbGliNjQiLAorICAgIH0sCisgICAgeworICAgICAgICB0YXJnZXQ6ICIvdmVuZG9yL29kbS9vdmVybGF5IiwKKyAgICAgICAgbmFtZTogIm9kbS9vdmVybGF5IiwKKyAgICB9LAorICAgIHsKKyAgICAgICAgdGFyZ2V0OiAiL3ZlbmRvci9vZG0vcHJpdi1hcHAiLAorICAgICAgICBuYW1lOiAib2RtL3ByaXYtYXBwIiwKKyAgICB9LAorICAgIHsKKyAgICAgICAgdGFyZ2V0OiAiL3ZlbmRvci9vZG0vdXNyIiwKKyAgICAgICAgbmFtZTogIm9kbS91c3IiLAorICAgIH0sCitdCisKK2FuZHJvaWRfc3ltbGlua3MgPSBbCisgICAgeworICAgICAgICB0YXJnZXQ6ICIvcHJvZHVjdCIsCisgICAgICAgIG5hbWU6ICJzeXN0ZW0vcHJvZHVjdCIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHRhcmdldDogIi9zeXN0ZW1fZXh0IiwKKyAgICAgICAgbmFtZTogInN5c3RlbS9zeXN0ZW1fZXh0IiwKKyAgICB9LAorICAgIHsKKyAgICAgICAgdGFyZ2V0OiAiL2RhdGEvY2FjaGUiLAorICAgICAgICBuYW1lOiAiY2FjaGUiLAorICAgIH0sCitdCisKK2ZpbGVncm91cCB7CisgICAgbmFtZTogImdlbmVyaWNfc3lzdGVtX3NpZ25fa2V5IiwKKyAgICBzcmNzOiBbIjphdmJfdGVzdGtleV9yc2E0MDk2Il0sCit9CisKK3Bob255IHsKKyAgICBuYW1lOiAiZ2VuZXJpY19zeXN0ZW1fZm9udHMiLAorICAgIHJlcXVpcmVkOiBbCisgICAgICAgICJBbmRyb2lkQ2xvY2sudHRmIiwKKyAgICAgICAgIkNhcnJvaXNHb3RoaWNTQy1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJDb21pbmdTb29uLnR0ZiIsCisgICAgICAgICJDdXRpdmVNb25vLnR0ZiIsCisgICAgICAgICJEYW5jaW5nU2NyaXB0LVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIkRyb2lkU2Fuc01vbm8udHRmIiwKKyAgICAgICAgIk5vdG9Db2xvckVtb2ppLnR0ZiIsCisgICAgICAgICJOb3RvQ29sb3JFbW9qaUZsYWdzLnR0ZiIsCisgICAgICAgICJOb3RvTmFza2hBcmFiaWMtQm9sZC50dGYiLAorICAgICAgICAiTm90b05hc2toQXJhYmljLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9OYXNraEFyYWJpY1VJLUJvbGQudHRmIiwKKyAgICAgICAgIk5vdG9OYXNraEFyYWJpY1VJLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zQWRsYW0tVkYudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zQWhvbS1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc0FuYXRvbGlhbkhpZXJvZ2x5cGhzLVJlZ3VsYXIub3RmIiwKKyAgICAgICAgIk5vdG9TYW5zQXJtZW5pYW4tVkYudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zQXZlc3Rhbi1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0JhbGluZXNlLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zQmFtdW0tUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNCYXNzYVZhaC1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc0JhdGFrLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zQmVuZ2FsaS1WRi50dGYiLAorICAgICAgICAiTm90b1NhbnNCZW5nYWxpVUktVkYudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zQmhhaWtzdWtpLVJlZ3VsYXIub3RmIiwKKyAgICAgICAgIk5vdG9TYW5zQnJhaG1pLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zQnVnaW5lc2UtUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNCdWhpZC1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0NKSy1SZWd1bGFyLnR0YyIsCisgICAgICAgICJOb3RvU2Fuc0NhbmFkaWFuQWJvcmlnaW5hbC1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0Nhcmlhbi1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0NoYWttYS1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc0NoYW0tQm9sZC50dGYiLAorICAgICAgICAiTm90b1NhbnNDaGFtLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zQ2hlcm9rZWUtUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNDb3B0aWMtUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNDdW5laWZvcm0tUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNDeXByaW90LVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zRGVzZXJldC1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0RldmFuYWdhcmktVkYudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zRGV2YW5hZ2FyaVVJLVZGLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0VneXB0aWFuSGllcm9nbHlwaHMtUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNFbGJhc2FuLVJlZ3VsYXIub3RmIiwKKyAgICAgICAgIk5vdG9TYW5zRXRoaW9waWMtVkYudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zR2VvcmdpYW4tVkYudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zR2xhZ29saXRpYy1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0dvdGhpYy1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0dyYW50aGEtUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNHdWphcmF0aS1Cb2xkLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0d1amFyYXRpLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zR3VqYXJhdGlVSS1Cb2xkLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0d1amFyYXRpVUktUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNHdW5qYWxhR29uZGktUmVndWxhci5vdGYiLAorICAgICAgICAiTm90b1NhbnNHdXJtdWtoaS1WRi50dGYiLAorICAgICAgICAiTm90b1NhbnNHdXJtdWtoaVVJLVZGLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0hhbmlmaVJvaGluZ3lhLVJlZ3VsYXIub3RmIiwKKyAgICAgICAgIk5vdG9TYW5zSGFudW5vby1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0hhdHJhbi1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc0hlYnJldy1Cb2xkLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0hlYnJldy1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0ltcGVyaWFsQXJhbWFpYy1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0luc2NyaXB0aW9uYWxQYWhsYXZpLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zSW5zY3JpcHRpb25hbFBhcnRoaWFuLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zSmF2YW5lc2UtUmVndWxhci5vdGYiLAorICAgICAgICAiTm90b1NhbnNLYWl0aGktUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNLYW5uYWRhLVZGLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0thbm5hZGFVSS1WRi50dGYiLAorICAgICAgICAiTm90b1NhbnNLYXlhaExpLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zS2hhcm9zaHRoaS1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0tobWVyLVZGLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0tobWVyVUktQm9sZC50dGYiLAorICAgICAgICAiTm90b1NhbnNLaG1lclVJLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zS2hvamtpLVJlZ3VsYXIub3RmIiwKKyAgICAgICAgIk5vdG9TYW5zTGFvLUJvbGQudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zTGFvLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zTGFvVUktQm9sZC50dGYiLAorICAgICAgICAiTm90b1NhbnNMYW9VSS1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0xlcGNoYS1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc0xpbWJ1LVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zTGluZWFyQS1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc0xpbmVhckItUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNMaXN1LVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zTHljaWFuLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zTHlkaWFuLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zTWFsYXlhbGFtLVZGLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc01hbGF5YWxhbVVJLVZGLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc01hbmRhaWMtUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNNYW5pY2hhZWFuLVJlZ3VsYXIub3RmIiwKKyAgICAgICAgIk5vdG9TYW5zTWFyY2hlbi1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc01hc2FyYW1Hb25kaS1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc01lZGVmYWlkcmluLVZGLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc01lZXRlaU1heWVrLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zTWVyb2l0aWMtUmVndWxhci5vdGYiLAorICAgICAgICAiTm90b1NhbnNNaWFvLVJlZ3VsYXIub3RmIiwKKyAgICAgICAgIk5vdG9TYW5zTW9kaS1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc01vbmdvbGlhbi1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc01yby1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc011bHRhbmktUmVndWxhci5vdGYiLAorICAgICAgICAiTm90b1NhbnNNeWFubWFyLUJvbGQub3RmIiwKKyAgICAgICAgIk5vdG9TYW5zTXlhbm1hci1NZWRpdW0ub3RmIiwKKyAgICAgICAgIk5vdG9TYW5zTXlhbm1hci1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc015YW5tYXJVSS1Cb2xkLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc015YW5tYXJVSS1NZWRpdW0ub3RmIiwKKyAgICAgICAgIk5vdG9TYW5zTXlhbm1hclVJLVJlZ3VsYXIub3RmIiwKKyAgICAgICAgIk5vdG9TYW5zTktvLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zTmFiYXRhZWFuLVJlZ3VsYXIub3RmIiwKKyAgICAgICAgIk5vdG9TYW5zTmV3VGFpTHVlLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zTmV3YS1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc09naGFtLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zT2xDaGlraS1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc09sZEl0YWxpYy1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc09sZE5vcnRoQXJhYmlhbi1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc09sZFBlcm1pYy1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc09sZFBlcnNpYW4tUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNPbGRTb3V0aEFyYWJpYW4tUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNPbGRUdXJraWMtUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNPcml5YS1Cb2xkLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc09yaXlhLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zT3JpeWFVSS1Cb2xkLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc09yaXlhVUktUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNPc2FnZS1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc09zbWFueWEtUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNQYWhhd2hIbW9uZy1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc1BhbG15cmVuZS1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc1BhdUNpbkhhdS1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc1BoYWdzUGEtUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNQaG9lbmljaWFuLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zUmVqYW5nLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zUnVuaWMtUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNTYW1hcml0YW4tUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNTYXVyYXNodHJhLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zU2hhcmFkYS1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc1NoYXZpYW4tUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNTaW5oYWxhLVZGLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc1NpbmhhbGFVSS1WRi50dGYiLAorICAgICAgICAiTm90b1NhbnNTb3JhU29tcGVuZy1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2Fuc1NveW9tYm8tVkYudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zU3VuZGFuZXNlLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zU3lsb3RpTmFncmktUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNTeW1ib2xzLVJlZ3VsYXItU3Vic2V0dGVkLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc1N5bWJvbHMtUmVndWxhci1TdWJzZXR0ZWQyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc1N5cmlhY0Vhc3Rlcm4tUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNTeXJpYWNFc3RyYW5nZWxhLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zU3lyaWFjV2VzdGVybi1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc1RhZ2Fsb2ctUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNUYWdiYW53YS1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc1RhaUxlLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zVGFpVGhhbS1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc1RhaVZpZXQtUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNUYWtyaS1WRi50dGYiLAorICAgICAgICAiTm90b1NhbnNUYW1pbC1WRi50dGYiLAorICAgICAgICAiTm90b1NhbnNUYW1pbFVJLVZGLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc1RlbHVndS1WRi50dGYiLAorICAgICAgICAiTm90b1NhbnNUZWx1Z3VVSS1WRi50dGYiLAorICAgICAgICAiTm90b1NhbnNUaGFhbmEtQm9sZC50dGYiLAorICAgICAgICAiTm90b1NhbnNUaGFhbmEtUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNUaGFpLUJvbGQudHRmIiwKKyAgICAgICAgIk5vdG9TYW5zVGhhaS1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc1RoYWlVSS1Cb2xkLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc1RoYWlVSS1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2Fuc1RpZmluYWdoLVJlZ3VsYXIub3RmIiwKKyAgICAgICAgIk5vdG9TYW5zVWdhcml0aWMtUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNWYWktUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NhbnNXYW5jaG8tUmVndWxhci5vdGYiLAorICAgICAgICAiTm90b1NhbnNXYXJhbmdDaXRpLVJlZ3VsYXIub3RmIiwKKyAgICAgICAgIk5vdG9TYW5zWWktUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NlcmlmLUJvbGQudHRmIiwKKyAgICAgICAgIk5vdG9TZXJpZi1Cb2xkSXRhbGljLnR0ZiIsCisgICAgICAgICJOb3RvU2VyaWYtSXRhbGljLnR0ZiIsCisgICAgICAgICJOb3RvU2VyaWYtUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NlcmlmQXJtZW5pYW4tVkYudHRmIiwKKyAgICAgICAgIk5vdG9TZXJpZkJlbmdhbGktVkYudHRmIiwKKyAgICAgICAgIk5vdG9TZXJpZkNKSy1SZWd1bGFyLnR0YyIsCisgICAgICAgICJOb3RvU2VyaWZEZXZhbmFnYXJpLVZGLnR0ZiIsCisgICAgICAgICJOb3RvU2VyaWZEb2dyYS1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2VyaWZFdGhpb3BpYy1WRi50dGYiLAorICAgICAgICAiTm90b1NlcmlmR2VvcmdpYW4tVkYudHRmIiwKKyAgICAgICAgIk5vdG9TZXJpZkd1amFyYXRpLVZGLnR0ZiIsCisgICAgICAgICJOb3RvU2VyaWZHdXJtdWtoaS1WRi50dGYiLAorICAgICAgICAiTm90b1NlcmlmSGVicmV3LUJvbGQudHRmIiwKKyAgICAgICAgIk5vdG9TZXJpZkhlYnJldy1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJOb3RvU2VyaWZIZW50YWlnYW5hLnR0ZiIsCisgICAgICAgICJOb3RvU2VyaWZLYW5uYWRhLVZGLnR0ZiIsCisgICAgICAgICJOb3RvU2VyaWZLaG1lci1Cb2xkLm90ZiIsCisgICAgICAgICJOb3RvU2VyaWZLaG1lci1SZWd1bGFyLm90ZiIsCisgICAgICAgICJOb3RvU2VyaWZMYW8tQm9sZC50dGYiLAorICAgICAgICAiTm90b1NlcmlmTGFvLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIk5vdG9TZXJpZk1hbGF5YWxhbS1WRi50dGYiLAorICAgICAgICAiTm90b1NlcmlmTXlhbm1hci1Cb2xkLm90ZiIsCisgICAgICAgICJOb3RvU2VyaWZNeWFubWFyLVJlZ3VsYXIub3RmIiwKKyAgICAgICAgIk5vdG9TZXJpZk55aWFrZW5nUHVhY2h1ZUhtb25nLVZGLnR0ZiIsCisgICAgICAgICJOb3RvU2VyaWZTaW5oYWxhLVZGLnR0ZiIsCisgICAgICAgICJOb3RvU2VyaWZUYW1pbC1WRi50dGYiLAorICAgICAgICAiTm90b1NlcmlmVGVsdWd1LVZGLnR0ZiIsCisgICAgICAgICJOb3RvU2VyaWZUaGFpLUJvbGQudHRmIiwKKyAgICAgICAgIk5vdG9TZXJpZlRoYWktUmVndWxhci50dGYiLAorICAgICAgICAiTm90b1NlcmlmVGliZXRhbi1WRi50dGYiLAorICAgICAgICAiTm90b1NlcmlmWWV6aWRpLVZGLnR0ZiIsCisgICAgICAgICJSb2JvdG8tUmVndWxhci50dGYiLAorICAgICAgICAiUm9ib3RvRmxleC1SZWd1bGFyLnR0ZiIsCisgICAgICAgICJSb2JvdG9TdGF0aWMtUmVndWxhci50dGYiLAorICAgICAgICAiU291cmNlU2Fuc1Byby1Cb2xkLnR0ZiIsCisgICAgICAgICJTb3VyY2VTYW5zUHJvLUJvbGRJdGFsaWMudHRmIiwKKyAgICAgICAgIlNvdXJjZVNhbnNQcm8tSXRhbGljLnR0ZiIsCisgICAgICAgICJTb3VyY2VTYW5zUHJvLVJlZ3VsYXIudHRmIiwKKyAgICAgICAgIlNvdXJjZVNhbnNQcm8tU2VtaUJvbGQudHRmIiwKKyAgICAgICAgIlNvdXJjZVNhbnNQcm8tU2VtaUJvbGRJdGFsaWMudHRmIiwKKyAgICAgICAgImZvbnRfZmFsbGJhY2sueG1sIiwKKyAgICAgICAgImZvbnRzLnhtbCIsCisgICAgXSwKK30KKworYW5kcm9pZF9maWxlc3lzdGVtX2RlZmF1bHRzIHsKKyAgICBuYW1lOiAic3lzdGVtX2ltYWdlX2RlZmF1bHRzIiwKKyAgICBwYXJ0aXRpb25fbmFtZTogInN5c3RlbSIsCisgICAgYmFzZV9kaXI6ICJzeXN0ZW0iLAorICAgIGRpcnM6IGdlbmVyaWNfcm9vdGRpcnMsCisgICAgc3ltbGlua3M6IGdlbmVyaWNfc3ltbGlua3MsCisgICAgZmlsZV9jb250ZXh0czogIjpwbGF0X2ZpbGVfY29udGV4dHMiLAorICAgIGxpbmtlcl9jb25maWc6IHsKKyAgICAgICAgZ2VuX2xpbmtlcl9jb25maWc6IHRydWUsCisgICAgICAgIGxpbmtlcl9jb25maWdfc3JjczogWyI6c3lzdGVtX2xpbmtlcl9jb25maWdfanNvbl9maWxlIl0sCisgICAgfSwKKyAgICBmc3Zlcml0eTogeworICAgICAgICBpbnB1dHM6IFsKKyAgICAgICAgICAgICJldGMvYm9vdC1pbWFnZS5wcm9mIiwKKyAgICAgICAgICAgICJldGMvY2xhc3NwYXRocy8qLnBiIiwKKyAgICAgICAgICAgICJldGMvZGlydHktaW1hZ2Utb2JqZWN0cyIsCisgICAgICAgICAgICAiZXRjL3ByZWxvYWRlZC1jbGFzc2VzIiwKKyAgICAgICAgICAgICJmcmFtZXdvcmsvKiIsCisgICAgICAgICAgICAiZnJhbWV3b3JrLyovKiIsIC8vIGZyYW1ld29yay97YXJjaH0KKyAgICAgICAgICAgICJmcmFtZXdvcmsvb2F0LyovKiIsIC8vIGZyYW1ld29yay9vYXQve2FyY2h9CisgICAgICAgIF0sCisgICAgICAgIGxpYnM6IFsiOmZyYW1ld29yay1yZXN7LmV4cG9ydC1wYWNrYWdlLmFwa30iXSwKKyAgICB9LAorICAgIGJ1aWxkX2xvZ3RhZ3M6IHRydWUsCisgICAgZ2VuX2Fjb25maWdfZmxhZ3NfcGI6IHRydWUsCisKKyAgICBjb21waWxlX211bHRpbGliOiAiYm90aCIsCisKKyAgICB1c2VfYXZiOiB0cnVlLAorICAgIGF2Yl9wcml2YXRlX2tleTogIjpnZW5lcmljX3N5c3RlbV9zaWduX2tleSIsCisgICAgYXZiX2FsZ29yaXRobTogIlNIQTI1Nl9SU0E0MDk2IiwKKyAgICBhdmJfaGFzaF9hbGdvcml0aG06ICJzaGEyNTYiLAorCisgICAgZGVwczogWworICAgICAgICAiYWJ4IiwKKyAgICAgICAgImFjb25maWdkLXN5c3RlbSIsCisgICAgICAgICJhZmxhZ3MiLAorICAgICAgICAiYW0iLAorICAgICAgICAiYW5kcm9pZC5zb2Z0d2FyZS5jcmVkZW50aWFscy5wcmVidWlsdC54bWwiLCAvLyBnZW5lcmljX3N5c3RlbQorICAgICAgICAiYW5kcm9pZC5zb2Z0d2FyZS53ZWJ2aWV3LnByZWJ1aWx0LnhtbCIsIC8vIG1lZGlhX3N5c3RlbQorICAgICAgICAiYW5kcm9pZC5zb2Z0d2FyZS53aW5kb3dfbWFnbmlmaWNhdGlvbi5wcmVidWlsdC54bWwiLCAvLyBoYW5kaGVsZF9zeXN0ZW0KKyAgICAgICAgImFuZHJvaWQuc3lzdGVtLnN1c3BlbmQtc2VydmljZSIsCisgICAgICAgICJhcGV4ZCIsCisgICAgICAgICJhcHBvcHMiLAorICAgICAgICAiYXBwcm92ZWQtb2draS1idWlsZHMueG1sIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgImFwcHdpZGdldCIsCisgICAgICAgICJhdHJhY2UiLAorICAgICAgICAiYXVkaW9zZXJ2ZXIiLAorICAgICAgICAiYmNjIiwKKyAgICAgICAgImJsYW5rX3NjcmVlbiIsCisgICAgICAgICJibGtpZCIsCisgICAgICAgICJibWdyIiwKKyAgICAgICAgImJvb3RhbmltYXRpb24iLAorICAgICAgICAiYm9vdHN0YXQiLAorICAgICAgICAiYnBmbG9hZGVyIiwKKyAgICAgICAgImJ1IiwKKyAgICAgICAgImJ1Z3JlcG9ydCIsCisgICAgICAgICJidWdyZXBvcnR6IiwKKyAgICAgICAgImNhbWVyYXNlcnZlciIsCisgICAgICAgICJjZ3JvdXBzLmpzb24iLAorICAgICAgICAiY21kIiwKKyAgICAgICAgImNvbnRlbnQiLAorICAgICAgICAiY3BwcmVvcHRzLnNoIiwgLy8gZ2VuZXJpY19zeXN0ZW0KKyAgICAgICAgImNyZWRzdG9yZSIsCisgICAgICAgICJkZWJ1Z2dlcmQiLAorICAgICAgICAiZGV2aWNlX2NvbmZpZyIsCisgICAgICAgICJkaXJ0eS1pbWFnZS1vYmplY3RzIiwKKyAgICAgICAgImRtY3RsIiwKKyAgICAgICAgImRtZXNnZCIsCisgICAgICAgICJkbnNtYXNxIiwKKyAgICAgICAgImRwbSIsCisgICAgICAgICJkdW1wLmVyb2ZzIiwKKyAgICAgICAgImR1bXBzdGF0ZSIsCisgICAgICAgICJkdW1wc3lzIiwKKyAgICAgICAgImUyZnNjayIsCisgICAgICAgICJlbmhhbmNlZC1jb25maXJtYXRpb24ueG1sIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgImV0Y19ob3N0cyIsCisgICAgICAgICJmbGFnc19oZWFsdGhfY2hlY2siLAorICAgICAgICAiZnJhbWV3b3JrLWF1ZGlvX2VmZmVjdHMueG1sIiwgLy8gZm9yIGhhbmRoZWxkIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAiZnJhbWV3b3JrLXN5c2NvbmZpZy54bWwiLAorICAgICAgICAiZnNfY29uZmlnX2RpcnNfc3lzdGVtIiwKKyAgICAgICAgImZzX2NvbmZpZ19maWxlc19zeXN0ZW0iLAorICAgICAgICAiZnNjay5lcm9mcyIsCisgICAgICAgICJmc2NrLmYyZnMiLCAvLyBmb3IgbWVkaWFfc3lzdGVtCisgICAgICAgICJmc2NrX21zZG9zIiwKKyAgICAgICAgImZzdmVyaXR5LXJlbGVhc2UtY2VydC1kZXIiLAorICAgICAgICAiZ2F0ZWtlZXBlcmQiLAorICAgICAgICAiZ3B1X2NvdW50ZXJfcHJvZHVjZXIiLAorICAgICAgICAiZ3B1c2VydmljZSIsCisgICAgICAgICJncm91cF9zeXN0ZW0iLAorICAgICAgICAiZ3NpX3Rvb2wiLAorICAgICAgICAiZ3NpZCIsCisgICAgICAgICJoZWFwcHJvZmQiLAorICAgICAgICAiaGlkIiwKKyAgICAgICAgImhpZGRlbmFwaS1wYWNrYWdlLXdoaXRlbGlzdC54bWwiLCAvLyBmcm9tIHJ1bnRpbWVfbGliYXJ0CisgICAgICAgICJpZGNfZGF0YSIsCisgICAgICAgICJpZG1hcDIiLAorICAgICAgICAiaWRtYXAyZCIsCisgICAgICAgICJpbWUiLAorICAgICAgICAiaW5jaWRlbnQiLAorICAgICAgICAiaW5jaWRlbnQtaGVscGVyLWNtZCIsCisgICAgICAgICJpbmNpZGVudF9oZWxwZXIiLAorICAgICAgICAiaW5jaWRlbnRkIiwKKyAgICAgICAgImluaXQuZW52aXJvbi5yYy1zb29uZyIsCisgICAgICAgICJpbml0LnVzYi5jb25maWdmcy5yYyIsCisgICAgICAgICJpbml0LnVzYi5yYyIsCisgICAgICAgICJpbml0Lnp5Z290ZTMyLnJjIiwKKyAgICAgICAgImluaXQuenlnb3RlNjQucmMiLAorICAgICAgICAiaW5pdC56eWdvdGU2NF8zMi5yYyIsCisgICAgICAgICJpbml0aWFsLXBhY2thZ2Utc3RvcHBlZC1zdGF0ZXMueG1sIiwKKyAgICAgICAgImlucHV0IiwKKyAgICAgICAgImluc3RhbGxkIiwKKyAgICAgICAgImlwIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgImlwdGFibGVzIiwKKyAgICAgICAgImtjbWRsaW5lY3RybCIsCisgICAgICAgICJrZXJuZWwtbGlmZXRpbWVzLnhtbCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJrZXljaGFyc19kYXRhIiwKKyAgICAgICAgImtleWxheW91dF9kYXRhIiwKKyAgICAgICAgImtleXN0b3JlMiIsCisgICAgICAgICJsZC5tYyIsCisgICAgICAgICJsbGtkIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgImxta2QiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAibG9ja3NldHRpbmdzIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgImxvZ2NhdCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJsb2dkIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgImxvZ3BlcnNpc3Quc3RhcnQiLAorICAgICAgICAibHBkdW1wIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgImxzaGFsIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgIm1ha2VfZjJmcyIsIC8vIG1lZGlhX3N5c3RlbQorICAgICAgICAibWRuc2QiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAibWVkaWFfcHJvZmlsZXNfVjFfMC5kdGQiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAibWVkaWFjb2RlYy5wb2xpY3kiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAibWVkaWFleHRyYWN0b3IiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAibWVkaWFtZXRyaWNzIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgIm1pc2N0cmwiLCAvLyBmcm9tIGJhc2Vfc3lzdGVtCisgICAgICAgICJta2UyZnMiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAibWtmcy5lcm9mcyIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJtb25rZXkiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAibXRlY3RybCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJuZGMiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAibmV0ZCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJuZXR1dGlscy13cmFwcGVyLTEuMCIsIC8vIGZ1bGxfYmFzZQorICAgICAgICAibm90aWNlX3htbF9zeXN0ZW0iLAorICAgICAgICAib2RzaWduIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgIm90YXByZW9wdF9zY3JpcHQiLCAvLyBnZW5lcmljX3N5c3RlbQorICAgICAgICAicGFja2FnZS1zaGFyZWR1aWQtYWxsb3dsaXN0LnhtbCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJwYXNzd2Rfc3lzdGVtIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInBlcmZldHRvIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInBpbmciLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAicGluZzYiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAicGludG9vbCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJwbGF0Zm9ybS54bWwiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAicG0iLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAicHJlZmV0Y2giLCAvL2Jhc2Vfc3lzdGVtCisgICAgICAgICJwcmVpbnN0YWxsZWQtcGFja2FnZXMtYXNsLWZpbGVzLnhtbCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJwcmVpbnN0YWxsZWQtcGFja2FnZXMtcGxhdGZvcm0tZ2VuZXJpYy1zeXN0ZW0ueG1sIiwgLy8gZ2VuZXJpY19zeXN0ZW0KKyAgICAgICAgInByZWluc3RhbGxlZC1wYWNrYWdlcy1wbGF0Zm9ybS1oYW5kaGVsZC1zeXN0ZW0ueG1sIiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICJwcmVpbnN0YWxsZWQtcGFja2FnZXMtcGxhdGZvcm0ueG1sIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInByZWluc3RhbGxlZC1wYWNrYWdlcy1zdHJpY3Qtc2lnbmF0dXJlLnhtbCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJwcmVsb2FkZWQtY2xhc3NlcyIsIC8vIG9rCisgICAgICAgICJwcmludGZsYWdzIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInByaXZhcHAtcGVybWlzc2lvbnMtcGxhdGZvcm0ueG1sIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInBybmdfc2VlZGVyIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInB1YmxpYy5saWJyYXJpZXMuYW5kcm9pZC50eHQiLAorICAgICAgICAicmVjb3ZlcnktcGVyc2lzdCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJyZWNvdmVyeS1yZWZyZXNoIiwgLy8gZ2VuZXJpY19zeXN0ZW0KKyAgICAgICAgInJlcXVlc3RzeW5jIiwgLy8gbWVkaWFfc3lzdGVtCisgICAgICAgICJyZXNpemUyZnMiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAicnNzX2h3bV9yZXNldCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJydW4tYXMiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAic2NoZWR0ZXN0IiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInNjcmVlbmNhcCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJzY3JlZW5yZWNvcmQiLCAvLyBoYW5kaGVsZF9zeXN0ZW0KKyAgICAgICAgInNkY2FyZCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJzZWNkaXNjYXJkIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInNlbnNvcnNlcnZpY2UiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAic2VydmljZSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJzZXJ2aWNlbWFuYWdlciIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJzZXR0aW5ncyIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJzZmRvIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInNnZGlzayIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJzbSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJzbmFwc2hvdGN0bCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJzbmFwdXNlcmQiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAic3RvcmFnZWQiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAic3VyZmFjZWZsaW5nZXIiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAic3ZjIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInN5c3RlbV9tYW5pZmVzdC54bWwiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAidGFza19wcm9maWxlcy5qc29uIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInRjIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInRlbGVjb20iLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAidG9tYnN0b25lZCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJ0cmFjZWQiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAidHJhY2VkX3Byb2JlcyIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJ0cmFkZWlubW9kZSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJ0dW5lMmZzIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInVpYXV0b21hdG9yIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInVpbnB1dCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJ1bmNyeXB0IiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInVwZGF0ZV9lbmdpbmUiLCAvLyBnZW5lcmljX3N5c3RlbQorICAgICAgICAidXBkYXRlX2VuZ2luZV9zaWRlbG9hZCIsIC8vIHJlY292ZXJ5CisgICAgICAgICJ1cGRhdGVfdmVyaWZpZXIiLCAvLyBnZW5lcmljX3N5c3RlbQorICAgICAgICAidXNiZCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJ2ZGMiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAidmlydHVhbF9jYW1lcmEiLCAvLyBoYW5kaGVsZF9zeXN0ZW0gLy8gcmVsZWFzZV9wYWNrYWdlX3ZpcnR1YWxfY2FtZXJhCisgICAgICAgICJ2b2xkIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInZyIiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICJ3YXRjaGRvZ2QiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAid2lmaS5yYyIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJ3aWZpY29uZCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJ3bSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgXSArIHNlbGVjdChyZWxlYXNlX2ZsYWcoIlJFTEVBU0VfUExBVEZPUk1fVkVSU0lPTl9DT0RFTkFNRSIpLCB7CisgICAgICAgICJSRUwiOiBbXSwKKyAgICAgICAgZGVmYXVsdDogWworICAgICAgICAgICAgImFuZHJvaWQuc29mdHdhcmUucHJldmlld19zZGsucHJlYnVpbHQueG1sIiwgLy8gbWVkaWFfc3lzdGVtCisgICAgICAgIF0sCisgICAgfSkgKyBzZWxlY3QocmVsZWFzZV9mbGFnKCJSRUxFQVNFX01FTU9SWV9NQU5BR0VNRU5UX0RBRU1PTiIpLCB7CisgICAgICAgIHRydWU6IFsKKyAgICAgICAgICAgICJtbV9kYWVtb24iLCAvLyBiYXNlX3N5c3RlbSAoUkVMRUFTRV9NRU1PUllfTUFOQUdFTUVOVF9EQUVNT04pCisgICAgICAgIF0sCisgICAgICAgIGRlZmF1bHQ6IFtdLAorICAgIH0pICsgc2VsZWN0KHByb2R1Y3RfdmFyaWFibGUoImRlYnVnZ2FibGUiKSwgeworICAgICAgICB0cnVlOiBbCisgICAgICAgICAgICAiYWRldmljZV9maW5nZXJwcmludCIsCisgICAgICAgICAgICAiYXJwaW5nIiwKKyAgICAgICAgICAgICJhdmJjdGwiLAorICAgICAgICAgICAgImJvb3RjdGwiLAorICAgICAgICAgICAgImRtdXNlcmQiLAorICAgICAgICAgICAgImV2ZW11LXJlY29yZCIsCisgICAgICAgICAgICAiaWRsY2xpIiwKKyAgICAgICAgICAgICJpbml0LWRlYnVnLnJjIiwKKyAgICAgICAgICAgICJpb3RvcCIsCisgICAgICAgICAgICAiaXBlcmYzIiwKKyAgICAgICAgICAgICJpdyIsCisgICAgICAgICAgICAibGF5ZXJ0cmFjZWdlbmVyYXRvciIsCisgICAgICAgICAgICAibG9ndGFnZC5yYyIsCisgICAgICAgICAgICAib3QtY2xpLWZ0ZCIsCisgICAgICAgICAgICAib3QtY3RsIiwKKyAgICAgICAgICAgICJwcm9jcmFuayIsCisgICAgICAgICAgICAicHJvZmNvbGxlY3RjdGwiLAorICAgICAgICAgICAgInByb2Zjb2xsZWN0ZCIsCisgICAgICAgICAgICAicmVjb3JkX2JpbmRlciIsCisgICAgICAgICAgICAic2FuaXRpemVyLXN0YXR1cyIsCisgICAgICAgICAgICAic2VydmljZWRpc3BhdGNoZXIiLAorICAgICAgICAgICAgInNob3dtYXAiLAorICAgICAgICAgICAgInNxbGl0ZTMiLAorICAgICAgICAgICAgInNzIiwKKyAgICAgICAgICAgICJzdGFydF93aXRoX2xvY2thZ2VudCIsCisgICAgICAgICAgICAic3RyYWNlIiwKKyAgICAgICAgICAgICJzdSIsCisgICAgICAgICAgICAidGlueWNhcCIsCisgICAgICAgICAgICAidGlueWhvc3RsZXNzIiwKKyAgICAgICAgICAgICJ0aW55bWl4IiwKKyAgICAgICAgICAgICJ0aW55cGNtaW5mbyIsCisgICAgICAgICAgICAidGlueXBsYXkiLCAvLyBob3N0CisgICAgICAgICAgICAidHJhY2VwYXRoIiwKKyAgICAgICAgICAgICJ0cmFjZXBhdGg2IiwKKyAgICAgICAgICAgICJ0cmFjZXJvdXRlNiIsCisgICAgICAgICAgICAidW53aW5kX2luZm8iLAorICAgICAgICAgICAgInVud2luZF9yZWdfaW5mbyIsCisgICAgICAgICAgICAidW53aW5kX3N5bWJvbHMiLAorICAgICAgICAgICAgInVwZGF0ZV9lbmdpbmVfY2xpZW50IiwKKyAgICAgICAgXSwKKyAgICAgICAgZGVmYXVsdDogW10sCisgICAgfSksCisgICAgbXVsdGlsaWI6IHsKKyAgICAgICAgY29tbW9uOiB7CisgICAgICAgICAgICBkZXBzOiBbCisgICAgICAgICAgICAgICAgIkJhY2t1cFJlc3RvcmVDb25maXJtYXRpb24iLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJCYXNpY0RyZWFtcyIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAgICAgICAgICJCbG9ja2VkTnVtYmVyUHJvdmlkZXIiLCAvLyBoYW5kaGVsZF9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiQmx1ZXRvb3RoTWlkaVNlcnZpY2UiLCAvLyBoYW5kaGVsZF9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiQm9va21hcmtQcm92aWRlciIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAgICAgICAgICJCdWlsdEluUHJpbnRTZXJ2aWNlIiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICAgICAgICAgIkNhbGVuZGFyUHJvdmlkZXIiLCAvLyBoYW5kaGVsZF9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiQ2FsbExvZ0JhY2t1cCIsIC8vIHRlbGVwaG9ueV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiQ2FtZXJhRXh0ZW5zaW9uc1Byb3h5IiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICAgICAgICAgIkNhcHRpdmVQb3J0YWxMb2dpbiIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAgICAgICAgICJDYXJyaWVyRGVmYXVsdEFwcCIsIC8vIHRlbGVwaG9ueV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiQ2VsbEJyb2FkY2FzdExlZ2FjeUFwcCIsIC8vIHRlbGVwaG9ueV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiQ2VydEluc3RhbGxlciIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAgICAgICAgICJDb21wYW5pb25EZXZpY2VNYW5hZ2VyIiwgLy8gbWVkaWFfc3lzdGVtCisgICAgICAgICAgICAgICAgIkNvbnRhY3RzUHJvdmlkZXIiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJDcmVkZW50aWFsTWFuYWdlciIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAgICAgICAgICJEZXZpY2VBc1dlYmNhbSIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAgICAgICAgICJEZXZpY2VEaWFnbm9zdGljcyIsIC8vIGhhbmRoZWxkX3N5c3RlbSAtIGludGVybmFsCisgICAgICAgICAgICAgICAgIkRvY3VtZW50c1VJIiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICAgICAgICAgIkRvd25sb2FkUHJvdmlkZXIiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJEb3dubG9hZFByb3ZpZGVyVWkiLCAvLyBoYW5kaGVsZF9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiRHluYW1pY1N5c3RlbUluc3RhbGxhdGlvblNlcnZpY2UiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJFMmVlQ29udGFjdEtleXNQcm92aWRlciIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgIkVhc3RlckVnZyIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAgICAgICAgICJFeHRTaGFyZWQiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJFeHRlcm5hbFN0b3JhZ2VQcm92aWRlciIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAgICAgICAgICJGdXNlZExvY2F0aW9uIiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICAgICAgICAgIkhUTUxWaWV3ZXIiLCAvLyBtZWRpYV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiSW5wdXREZXZpY2VzIiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICAgICAgICAgIkludGVudFJlc29sdmVyIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiS2V5Q2hhaW4iLCAvLyBoYW5kaGVsZF9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiTGl2ZVdhbGxwYXBlcnNQaWNrZXIiLCAvLyBnZW5lcmljX3N5c3RlbSwgZnVsbF9iYXNlCisgICAgICAgICAgICAgICAgIkxvY2FsVHJhbnNwb3J0IiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiTWFuYWdlZFByb3Zpc2lvbmluZyIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAgICAgICAgICJNZWRpYVByb3ZpZGVyTGVnYWN5IiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiTW1zU2VydmljZSIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAgICAgICAgICJNdHBTZXJ2aWNlIiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICAgICAgICAgIk11c2ljRlgiLCAvLyBoYW5kaGVsZF9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiTmV0d29ya1N0YWNrIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiT05TIiwgLy8gdGVsZXBob255X3N5c3RlbQorICAgICAgICAgICAgICAgICJQYWNQcm9jZXNzb3IiLCAvLyBoYW5kaGVsZF9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiUGFja2FnZUluc3RhbGxlciIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgIlBhcnRuZXJCb29rbWFya3NQcm92aWRlciIsIC8vIGdlbmVyaWNfc3lzdGVtCisgICAgICAgICAgICAgICAgIlByaW50UmVjb21tZW5kYXRpb25TZXJ2aWNlIiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICAgICAgICAgIlByaW50U3Bvb2xlciIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAgICAgICAgICJQcm94eUhhbmRsZXIiLCAvLyBoYW5kaGVsZF9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiU2VjdXJlRWxlbWVudCIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAgICAgICAgICJTZXR0aW5nc1Byb3ZpZGVyIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiU2hhcmVkU3RvcmFnZUJhY2t1cCIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAgICAgICAgICJTaGVsbCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgIlNpbUFwcERpYWxvZyIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAgICAgICAgICJTb3VuZFBpY2tlciIsIC8vIG5vdCBpbnN0YWxsZWQgYnkgYW55b25lCisgICAgICAgICAgICAgICAgIlN0YXRlbWVudFNlcnZpY2UiLCAvLyBtZWRpYV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiU3RrIiwgLy8gZ2VuZXJpY19zeXN0ZW0KKyAgICAgICAgICAgICAgICAiVGFnIiwgLy8gZ2VuZXJpY19zeXN0ZW0KKyAgICAgICAgICAgICAgICAiVGVsZVNlcnZpY2UiLCAvLyBoYW5kaGVsZF9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiVGVsZWNvbSIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAgICAgICAgICJUZWxlcGhvbnlQcm92aWRlciIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAgICAgICAgICJUcmFjZXVyIiwgLy8gaGFuZGhlbGRfc3lzdGVtCisgICAgICAgICAgICAgICAgIlVzZXJEaWN0aW9uYXJ5UHJvdmlkZXIiLCAvLyBoYW5kaGVsZF9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiVnBuRGlhbG9ncyIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAgICAgICAgICJXYWxscGFwZXJCYWNrdXAiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJhZGJkX3N5c3RlbV9hcGkiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJhbmRyb2lkLmhpZGwuYmFzZS1WMS4wLWphdmEiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJhbmRyb2lkLmhpZGwubWFuYWdlci1WMS4wLWphdmEiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJhbmRyb2lkLnRlc3QuYmFzZSIsIC8vIGZyb20gcnVudGltZV9saWJhcnQKKyAgICAgICAgICAgICAgICAiYW5kcm9pZC50ZXN0Lm1vY2siLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJhbmRyb2lkLnRlc3QucnVubmVyIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiYW9zcF9tYWlubGluZV9tb2R1bGVzIiwgLy8gb2sKKyAgICAgICAgICAgICAgICAiYnVpbGRfZmxhZ19zeXN0ZW0iLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJjaGFyZ2VyX3Jlc19pbWFnZXMiLCAvLyBnZW5lcmljX3N5c3RlbQorICAgICAgICAgICAgICAgICJjb20uYW5kcm9pZC5hcGV4LmN0cy5zaGltLnYxX3ByZWJ1aWx0IiwgLy8gb2sKKyAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQuY2VsbGJyb2FkY2FzdCIsIC8vIHRlbGVwaG9ueV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQuZnV0dXJlLnVzYi5hY2Nlc3NvcnkiLCAvLyBtZWRpYV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQubG9jYXRpb24ucHJvdmlkZXIiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJjb20uYW5kcm9pZC5tZWRpYS5yZW1vdGVkaXNwbGF5IiwgLy8gbWVkaWFfc3lzdGVtCisgICAgICAgICAgICAgICAgImNvbS5hbmRyb2lkLm1lZGlhLnJlbW90ZWRpc3BsYXkueG1sIiwgLy8gbWVkaWFfc3lzdGVtCisgICAgICAgICAgICAgICAgImNvbS5hbmRyb2lkLm1lZGlhZHJtLnNpZ25lciIsIC8vIG1lZGlhX3N5c3RlbQorICAgICAgICAgICAgICAgICJjb20uYW5kcm9pZC5uZmNfZXh0cmFzIiwgLy8gb2sKKyAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQubmZjc2VydmljZXMiLCAvLyBiYXNlX3N5c3RlbSAoUkVMRUFTRV9QQUNLQUdFX05GQ19TVEFDSyAhPSBOZmNOY2kpCisgICAgICAgICAgICAgICAgImNvbS5hbmRyb2lkLnJ1bnRpbWUiLCAvLyBvaworICAgICAgICAgICAgICAgICJkZXhfYm9vdGphcnMiLAorICAgICAgICAgICAgICAgICJleHQiLCAvLyBmcm9tIHJ1bnRpbWVfbGliYXJ0CisgICAgICAgICAgICAgICAgImZyYW1ld29yay1ncmFwaGljcyIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImZyYW1ld29yay1sb2NhdGlvbiIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImZyYW1ld29yay1taW51cy1hcGV4LWluc3RhbGwtZGVwZW5kZW5jaWVzIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiZnJhbWV3b3JrLWNvbm5lY3Rpdml0eS1iIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiZnJhbWV3b3JrX2NvbXBhdGliaWxpdHlfbWF0cml4LmRldmljZS54bWwiLAorICAgICAgICAgICAgICAgICJnZW5lcmljX3N5c3RlbV9mb250cyIsIC8vIG9rCisgICAgICAgICAgICAgICAgImh3c2VydmljZW1hbmFnZXJfY29tcGF0X3N5bWxpbmtfbW9kdWxlIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiaHlwaC1kYXRhIiwKKyAgICAgICAgICAgICAgICAiaW1zLWNvbW1vbiIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImluaXRfc3lzdGVtIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiamF2YXgub2JleCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxsbmRrLmxpYnJhcmllcy50eHQiLCAvL29rCisgICAgICAgICAgICAgICAgIm9yZy5hcGFjaGUuaHR0cC5sZWdhY3kiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJwZXJmZXR0by1leHRyYXMiLCAvLyBzeXN0ZW0KKyAgICAgICAgICAgICAgICAic2FuaXRpemVyLmxpYnJhcmllcy50eHQiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJzZWxpbnV4X3BvbGljeV9zeXN0ZW1fc29vbmciLCAvLyBvaworICAgICAgICAgICAgICAgICJzZXJ2aWNlcyIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgInNoZWxsX2FuZF91dGlsaXRpZXNfc3lzdGVtIiwgLy8gb2sKKyAgICAgICAgICAgICAgICAic3lzdGVtLWJ1aWxkLnByb3AiLAorICAgICAgICAgICAgICAgICJzeXN0ZW1fY29tcGF0aWJpbGl0eV9tYXRyaXgueG1sIiwgLy9iYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJ0ZWxlcGhvbnktY29tbW9uIiwgLy8gbGlicyBmcm9tIFRlbGVTZXJ2aWNlCisgICAgICAgICAgICAgICAgInZvaXAtY29tbW9uIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgIF0gKyBzZWxlY3Qoc29vbmdfY29uZmlnX3ZhcmlhYmxlKCJBTkRST0lEIiwgInJlbGVhc2VfY3Jhc2hyZWNvdmVyeV9tb2R1bGUiKSwgeworICAgICAgICAgICAgICAgICJ0cnVlIjogWworICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQuY3Jhc2hyZWNvdmVyeSIsIC8vIGJhc2Vfc3lzdGVtIChSRUxFQVNFX0NSQVNIUkVDT1ZFUllfTU9EVUxFKQorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgZGVmYXVsdDogWworICAgICAgICAgICAgICAgICAgICAiZnJhbWV3b3JrLXBsYXRmb3JtY3Jhc2hyZWNvdmVyeSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIH0pICsgc2VsZWN0KHJlbGVhc2VfZmxhZygiUkVMRUFTRV9PTkRFVklDRV9JTlRFTExJR0VOQ0VfTU9EVUxFIiksIHsKKyAgICAgICAgICAgICAgICB0cnVlOiBbCisgICAgICAgICAgICAgICAgICAgICJjb20uYW5kcm9pZC5uZXVyYWxuZXR3b3JrcyIsIC8vIGJhc2Vfc3lzdGVtIChSRUxFQVNFX09OREVWSUNFX0lOVEVMTElHRU5DRV9NT0RVTEUpCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBbCisgICAgICAgICAgICAgICAgICAgICJmcmFtZXdvcmstb25kZXZpY2VpbnRlbGxpZ2VuY2UtcGxhdGZvcm0iLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICB9KSArIHNlbGVjdChzb29uZ19jb25maWdfdmFyaWFibGUoIkFORFJPSUQiLCAicmVsZWFzZV9wYWNrYWdlX3Byb2ZpbGluZ19tb2R1bGUiKSwgeworICAgICAgICAgICAgICAgICJ0cnVlIjogWworICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQucHJvZmlsaW5nIiwgLy8gYmFzZV9zeXN0ZW0gKFJFTEVBU0VfUEFDS0FHRV9QUk9GSUxJTkdfTU9EVUxFKQorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgZGVmYXVsdDogW10sCisgICAgICAgICAgICB9KSArIHNlbGVjdChyZWxlYXNlX2ZsYWcoIlJFTEVBU0VfQVZBVEFSX1BJQ0tFUl9BUFAiKSwgeworICAgICAgICAgICAgICAgIHRydWU6IFsKKyAgICAgICAgICAgICAgICAgICAgIkF2YXRhclBpY2tlciIsIC8vIGdlbmVyaWNfc3lzdGVtIChSRUxFQVNFX0FWQVRBUl9QSUNLRVJfQVBQKQorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgZGVmYXVsdDogW10sCisgICAgICAgICAgICB9KSArIHNlbGVjdChyZWxlYXNlX2ZsYWcoIlJFTEVBU0VfVVBST0JFU1RBVFNfTU9EVUxFIiksIHsKKyAgICAgICAgICAgICAgICB0cnVlOiBbCisgICAgICAgICAgICAgICAgICAgICJjb20uYW5kcm9pZC51cHJvYmVzdGF0cyIsIC8vIGJhc2Vfc3lzdGVtIChSRUxFQVNFX1VQUk9CRVNUQVRTX01PRFVMRSkKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFtdLAorICAgICAgICAgICAgfSksCisgICAgICAgIH0sCisgICAgICAgIHByZWZlcjMyOiB7CisgICAgICAgICAgICBkZXBzOiBbCisgICAgICAgICAgICAgICAgImRybXNlcnZlciIsIC8vIG1lZGlhX3N5c3RlbQorICAgICAgICAgICAgICAgICJtZWRpYXNlcnZlciIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICBdLAorICAgICAgICB9LAorICAgICAgICBsaWI2NDogeworICAgICAgICAgICAgZGVwczogWworICAgICAgICAgICAgICAgICJhbmRyb2lkLnN5c3RlbS52aXJ0dWFsaXphdGlvbmNvbW1vbi1uZGsiLAorICAgICAgICAgICAgICAgICJhbmRyb2lkLnN5c3RlbS52aXJ0dWFsaXphdGlvbnNlcnZpY2UtbmRrIiwKKyAgICAgICAgICAgICAgICAibGliZ3NpIiwKKyAgICAgICAgICAgICAgICAic2VydmljZW1hbmFnZXIiLAorICAgICAgICAgICAgXSArIHNlbGVjdChyZWxlYXNlX2ZsYWcoIlJFTEVBU0VfVVBST0JFU1RBVFNfTU9EVUxFIiksIHsKKyAgICAgICAgICAgICAgICB0cnVlOiBbXSwKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBbCisgICAgICAgICAgICAgICAgICAgICJ1cHJvYmVzdGF0cyIsIC8vIGJhc2Vfc3lzdGVtIGludGVybmFsCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIH0pLAorICAgICAgICB9LAorICAgICAgICBib3RoOiB7CisgICAgICAgICAgICBkZXBzOiBbCisgICAgICAgICAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUuYmlvbWV0cmljcy5maW5nZXJwcmludEAyLjEiLCAvLyBnZW5lcmljX3N5c3RlbQorICAgICAgICAgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLnJhZGlvLmNvbmZpZ0AxLjAiLCAvLyBnZW5lcmljX3N5c3RlbQorICAgICAgICAgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLnJhZGlvLmRlcHJlY2F0ZWRAMS4wIiwgLy8gZ2VuZXJpY19zeXN0ZW0KKyAgICAgICAgICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5yYWRpb0AxLjAiLCAvLyBnZW5lcmljX3N5c3RlbQorICAgICAgICAgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLnJhZGlvQDEuMSIsIC8vIGdlbmVyaWNfc3lzdGVtCisgICAgICAgICAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUucmFkaW9AMS4yIiwgLy8gZ2VuZXJpY19zeXN0ZW0KKyAgICAgICAgICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5yYWRpb0AxLjMiLCAvLyBnZW5lcmljX3N5c3RlbQorICAgICAgICAgICAgICAgICJhbmRyb2lkLmhhcmR3YXJlLnJhZGlvQDEuNCIsIC8vIGdlbmVyaWNfc3lzdGVtCisgICAgICAgICAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUuc2VjdXJlX2VsZW1lbnRAMS4wIiwgLy8gZ2VuZXJpY19zeXN0ZW0KKyAgICAgICAgICAgICAgICAiYXBwX3Byb2Nlc3MiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJib3Jpbmdzc2xfc2VsZl90ZXN0IiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAiaGVhcHByb2ZkX2NsaWVudCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYkVHTCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYkVHTF9hbmdsZSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYkVUQzEiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJGRlRFbSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYkdMRVN2MV9DTSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYkdMRVN2MV9DTV9hbmdsZSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYkdMRVN2MiIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYkdMRVN2Ml9hbmdsZSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYkdMRVN2MyIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYk9wZW5NQVhBTCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYk9wZW5TTEVTIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGliYWF1ZGlvIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGliYWxhcm1fam5pIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGliYW1pZGkiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJhbmRyb2lkIiwKKyAgICAgICAgICAgICAgICAibGliYW5kcm9pZF9ydW50aW1lIiwKKyAgICAgICAgICAgICAgICAibGliYW5kcm9pZF9zZXJ2ZXJzIiwKKyAgICAgICAgICAgICAgICAibGliYW5kcm9pZGZ3IiwKKyAgICAgICAgICAgICAgICAibGliYXJ0cGFsZXR0ZS1zeXN0ZW0iLAorICAgICAgICAgICAgICAgICJsaWJhdWRpby1yZXNhbXBsZXIiLCAvLyBnZW5lcmljLXN5c3RlbQorICAgICAgICAgICAgICAgICJsaWJhdWRpb2VmZmVjdF9qbmkiLAorICAgICAgICAgICAgICAgICJsaWJhdWRpb2hhbCIsIC8vIGdlbmVyaWMtc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYmF1ZGlvcG9saWN5ZW5naW5lY29uZmlndXJhYmxlIiwgLy8gZ2VuZXJpYy1zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGliYmluZGVyIiwKKyAgICAgICAgICAgICAgICAibGliYmluZGVyX25kayIsCisgICAgICAgICAgICAgICAgImxpYmJpbmRlcl9ycGNfdW5zdGFibGUiLAorICAgICAgICAgICAgICAgICJsaWJjYW1lcmEybmRrIiwKKyAgICAgICAgICAgICAgICAibGliY2dyb3VwcmMiLCAvLyBsbG5kayBsaWJyYXJ5CisgICAgICAgICAgICAgICAgImxpYmNsYW5nX3J0LmFzYW4iLAorICAgICAgICAgICAgICAgICJsaWJjb21waWxlcl9ydCIsCisgICAgICAgICAgICAgICAgImxpYmN1dGlscyIsIC8vIHVzZWQgYnkgbWFueSBsaWJzCisgICAgICAgICAgICAgICAgImxpYmRtYWJ1ZmhlYXAiLCAvLyB1c2VkIGJ5IG1hbnkgbGlicworICAgICAgICAgICAgICAgICJsaWJkcm0iLCAvLyB1c2VkIGJ5IG1hbnkgbGlicyAvLyBnZW5lcmljX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJkcm1mcmFtZXdvcmsiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJkcm1mcmFtZXdvcmtfam5pIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGliZmR0cmFjayIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYmZpbHRlcmZ3IiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGliZmlsdGVycGFja19pbWFnZXByb2MiLCAvLyBtZWRpYV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGliZndkbG9ja2VuZ2luZSIsIC8vIGdlbmVyaWNfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYmdhdGVrZWVwZXIiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJndWkiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJoYXJkd2FyZSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYmhhcmR3YXJlX2xlZ2FjeSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYmhpZGx0cmFuc3BvcnQiLCAvLyBnZW5lcmljX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJod2JpbmRlciIsIC8vIGdlbmVyaWNfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYmlucHV0IiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGliaW5wdXRmbGluZ2VyIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGliaXByb3V0ZXV0aWwiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJqbmlncmFwaGljcyIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYmpwZWciLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJsb2ciLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJsb2d3cmFwIiwgLy8gZ2VuZXJpY19zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlibHo0IiwgLy8gZ2VuZXJpY19zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlibWVkaWEiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJtZWRpYV9qbmkiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJtZWRpYW5kayIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYm1pbnVpIiwgLy8gZ2VuZXJpY19zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlibW9ua2V5X2puaSIsIC8vIGJhc2Vfc3lzdGVtIC0gaW50ZXJuYWwKKyAgICAgICAgICAgICAgICAibGlibXRwIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlibmV0ZF9jbGllbnQiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJuZXRsaW5rIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlibmV0dXRpbHMiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJuZXVyYWxuZXR3b3Jrc19wYWNrYWdlaW5mbyIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYm5sIiwgLy8gZ2VuZXJpY19zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlicGRmaXVtIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlicG9saWN5LXN1YnN5c3RlbSIsIC8vIGdlbmVyaWNfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYnBvd2VyIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlicG93ZXJtYW5hZ2VyIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlicHJvdG9idWYtY3BwLWZ1bGwiLCAvLyBnZW5lcmljX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJyYWRpb19tZXRhZGF0YSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYnJzX2puaSIsIC8vIGhhbmRoZWxkX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJydHBfam5pIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlic2Vuc29yc2VydmljZSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYnNmcGx1Z2luX2Njb2RlYyIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYnNraWEiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJzb25pYyIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYnNvbml2b3giLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJzb3VuZHBvb2wiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJzcGVleHJlc2FtcGxlciIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYnNxbGl0ZSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYnN0YWdlZnJpZ2h0IiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlic3RhZ2VmcmlnaHRfZm91bmRhdGlvbiIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYnN0YWdlZnJpZ2h0X29teCIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYnN0ZGMrKyIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYnN5c3V0aWxzIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlidWkiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJ1c2Job3N0IiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlidXRpbHMiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJ2ZW5kb3JzdXBwb3J0IiwgLy8gbGxuZGsgbGlicmFyeQorICAgICAgICAgICAgICAgICJsaWJ2aW50Zl9qbmkiLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJ2dWxrYW4iLCAvLyBiYXNlX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJ3ZWJ2aWV3Y2hyb21pdW1fbG9hZGVyIiwgLy8gbWVkaWFfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpYndlYnZpZXdjaHJvbWl1bV9wbGF0X3N1cHBvcnQiLCAvLyBtZWRpYV9zeXN0ZW0KKyAgICAgICAgICAgICAgICAibGlid2lsaGVsbSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICAgICAgImxpbmtlciIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICAgICBdICsgc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiQU5EUk9JRCIsICJUQVJHRVRfRFlOQU1JQ182NF8zMl9EUk1TRVJWRVIiKSwgeworICAgICAgICAgICAgICAgICJ0cnVlIjogWyJkcm1zZXJ2ZXIiXSwKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBbXSwKKyAgICAgICAgICAgIH0pICsgc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiQU5EUk9JRCIsICJUQVJHRVRfRFlOQU1JQ182NF8zMl9NRURJQVNFUlZFUiIpLCB7CisgICAgICAgICAgICAgICAgInRydWUiOiBbIm1lZGlhc2VydmVyIl0sCisgICAgICAgICAgICAgICAgZGVmYXVsdDogW10sCisgICAgICAgICAgICB9KSArIHNlbGVjdChyZWxlYXNlX2ZsYWcoIlJFTEVBU0VfVVBST0JFU1RBVFNfTU9EVUxFIiksIHsKKyAgICAgICAgICAgICAgICB0cnVlOiBbXSwKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBbCisgICAgICAgICAgICAgICAgICAgICJsaWJ1cHJvYmVzdGF0c19jbGllbnQiLCAvLyBiYXNlX3N5c3RlbSBpbnRlcm5hbAorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICB9KSwKKyAgICAgICAgfSwKKyAgICB9LAorICAgIGFyY2g6IHsKKyAgICAgICAgYXJtNjQ6IHsKKyAgICAgICAgICAgIGRlcHM6IFsKKyAgICAgICAgICAgICAgICAibGliY2xhbmdfcnQuaHdhc2FuIiwKKyAgICAgICAgICAgICAgICAibGliY19od2FzYW4iLAorICAgICAgICAgICAgXSwKKyAgICAgICAgfSwKKyAgICB9LAorfQorCithbmRyb2lkX3N5c3RlbV9pbWFnZSB7CisgICAgbmFtZTogImFvc3Bfc2hhcmVkX3N5c3RlbV9pbWFnZSIsCisgICAgZGVmYXVsdHM6IFsic3lzdGVtX2ltYWdlX2RlZmF1bHRzIl0sCisgICAgZGlyczogYW5kcm9pZF9yb290ZGlycywKKyAgICBzeW1saW5rczogYW5kcm9pZF9zeW1saW5rcywKKyAgICB0eXBlOiAiZXJvZnMiLAorICAgIGVyb2ZzOiB7CisgICAgICAgIGNvbXByZXNzb3I6ICJsejRoYyw5IiwKKyAgICAgICAgY29tcHJlc3NfaGludHM6ICJlcm9mc19jb21wcmVzc19oaW50cy50eHQiLAorICAgIH0sCit9CmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9nZW5lcmljL09XTkVSUyBiL3RhcmdldC9wcm9kdWN0L2dlbmVyaWMvT1dORVJTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMTQ0NmYKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvcHJvZHVjdC9nZW5lcmljL09XTkVSUwpAQCAtMCwwICsxLDYgQEAKKyMgQnVnIGNvbXBvbmVudDogMTMyMjcxMworaW5zZW9iQGdvb2dsZS5jb20KK2plb25naWtAZ29vZ2xlLmNvbQoraml5b25nQGdvb2dsZS5jb20KK2p1c3Rpbnl1bkBnb29nbGUuY29tCitraXlvdW5na2ltQGdvb2dsZS5jb20KZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2dlbmVyaWMvZXJvZnNfY29tcHJlc3NfaGludHMudHh0IGIvdGFyZ2V0L3Byb2R1Y3QvZ2VuZXJpYy9lcm9mc19jb21wcmVzc19oaW50cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIyYTcxMQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9wcm9kdWN0L2dlbmVyaWMvZXJvZnNfY29tcHJlc3NfaGludHMudHh0CkBAIC0wLDAgKzEgQEAKKzAgLipcLmFwZXgkClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvZ2VuZXJpY19yYW1kaXNrLm1rIGIvdGFyZ2V0L3Byb2R1Y3QvZ2VuZXJpY19yYW1kaXNrLm1rCmluZGV4IGViYWM2MmYuLjVlY2I1NWYgMTAwNjQ0Ci0tLSBhL3RhcmdldC9wcm9kdWN0L2dlbmVyaWNfcmFtZGlzay5taworKysgYi90YXJnZXQvcHJvZHVjdC9nZW5lcmljX3JhbWRpc2subWsKQEAgLTIzLDYgKzIzLDcgQEAKIFBST0RVQ1RfUEFDS0FHRVMgKz0gXAogICAgIGluaXRfZmlyc3Rfc3RhZ2UgXAogICAgIHNuYXB1c2VyZF9yYW1kaXNrIFwKKyAgICByYW1kaXNrLWJ1aWxkLnByb3AgXAogCiAjIERlYnVnIHJhbWRpc2sKIFBST0RVQ1RfUEFDS0FHRVMgKz0gXApAQCAtMzUsOCArMzYsNiBAQAogX215X3BhdGhzIDo9IFwKICAgICAkKFRBUkdFVF9DT1BZX09VVF9SQU1ESVNLKS8gXAogICAgICQoVEFSR0VUX0NPUFlfT1VUX0RFQlVHX1JBTURJU0spLyBcCi0gICAgc3lzdGVtL3Vzci9zaGFyZS96b25laW5mby90el92ZXJzaW9uIFwKLSAgICBzeXN0ZW0vdXNyL3NoYXJlL3pvbmVpbmZvL3R6ZGF0YSBcCiAgICAgJChUQVJHRVRfQ09QWV9PVVRfUkVDT1ZFUlkpL3Jvb3QvZmlyc3Rfc3RhZ2VfcmFtZGlzay9zeXN0ZW0gXAogCiAKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2dvX2RlZmF1bHRzX2NvbW1vbi5tayBiL3RhcmdldC9wcm9kdWN0L2dvX2RlZmF1bHRzX2NvbW1vbi5tawppbmRleCBmZDQwNDdhLi4wZmNmMTZiIDEwMDY0NAotLS0gYS90YXJnZXQvcHJvZHVjdC9nb19kZWZhdWx0c19jb21tb24ubWsKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvZ29fZGVmYXVsdHNfY29tbW9uLm1rCkBAIC0yNCwxMSArMjQsNiBAQAogIyBTcGVlZCBwcm9maWxlIHNlcnZpY2VzIGFuZCB3aWZpLXNlcnZpY2UgdG8gcmVkdWNlIFJBTSBhbmQgc3RvcmFnZS4KIFBST0RVQ1RfU1lTVEVNX1NFUlZFUl9DT01QSUxFUl9GSUxURVIgOj0gc3BlZWQtcHJvZmlsZQogCi0jIFVzZSBhIHByb2ZpbGUgYmFzZWQgYm9vdCBpbWFnZSBmb3IgdGhpcyBkZXZpY2UuIE5vdGUgdGhhdCB0aGlzIGlzIGN1cnJlbnRseSBhCi0jIGdlbmVyaWMgcHJvZmlsZSBhbmQgbm90IEFuZHJvaWQgR28gb3B0aW1pemVkLgotUFJPRFVDVF9VU0VfUFJPRklMRV9GT1JfQk9PVF9JTUFHRSA6PSB0cnVlCi1QUk9EVUNUX0RFWF9QUkVPUFRfQk9PVF9JTUFHRV9QUk9GSUxFX0xPQ0FUSU9OIDo9IGZyYW1ld29ya3MvYmFzZS9jb25maWcvYm9vdC1pbWFnZS1wcm9maWxlLnR4dAotCiAjIERvIG5vdCBnZW5lcmF0ZSBsaWJhcnRkLgogUFJPRFVDVF9BUlRfVEFSR0VUX0lOQ0xVREVfREVCVUdfQlVJTEQgOj0gZmFsc2UKIApkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvZ3NpL0FuZHJvaWQuYnAgYi90YXJnZXQvcHJvZHVjdC9nc2kvQW5kcm9pZC5icAppbmRleCA0NWJhMTQzLi45ZTg5NDZkIDEwMDY0NAotLS0gYS90YXJnZXQvcHJvZHVjdC9nc2kvQW5kcm9pZC5icAorKysgYi90YXJnZXQvcHJvZHVjdC9nc2kvQW5kcm9pZC5icApAQCAtNDYsMyArNDYsMTY0IEBACiAgICAgaW5zdGFsbGVkX2xvY2F0aW9uOiAiZXRjL2luaXQvY29uZmlnIiwKICAgICBzeW1saW5rX3RhcmdldDogIi9zeXN0ZW0vc3lzdGVtX2V4dC9ldGMvaW5pdC9jb25maWciLAogfQorCisvLyBpbml0LmdzaS5yYywgR1NJLXNwZWNpZmljIGluaXQgc2NyaXB0LgorcHJlYnVpbHRfZXRjIHsKKyAgICBuYW1lOiAiaW5pdC5nc2kucmMiLAorICAgIHNyYzogImluaXQuZ3NpLnJjIiwKKyAgICBzeXN0ZW1fZXh0X3NwZWNpZmljOiB0cnVlLAorICAgIHJlbGF0aXZlX2luc3RhbGxfcGF0aDogImluaXQiLAorfQorCitwcmVidWlsdF9ldGMgeworICAgIG5hbWU6ICJpbml0LnZuZGstbm9kZWYucmMiLAorICAgIHNyYzogImluaXQudm5kay1ub2RlZi5yYyIsCisgICAgc3lzdGVtX2V4dF9zcGVjaWZpYzogdHJ1ZSwKKyAgICByZWxhdGl2ZV9pbnN0YWxsX3BhdGg6ICJnc2kiLAorfQorCitnc2lfc3ltbGlua3MgPSBbCisgICAgeworICAgICAgICB0YXJnZXQ6ICIvc3lzdGVtL3N5c3RlbV9leHQiLAorICAgICAgICBuYW1lOiAic3lzdGVtX2V4dCIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHRhcmdldDogIi9zeXN0ZW0vcHJvZHVjdCIsCisgICAgICAgIG5hbWU6ICJwcm9kdWN0IiwKKyAgICB9LAorICAgIHsKKyAgICAgICAgdGFyZ2V0OiAiL29kbS9vZG1fZGxrbS9ldGMiLAorICAgICAgICBuYW1lOiAib2RtX2Rsa20vZXRjIiwKKyAgICB9LAorICAgIHsKKyAgICAgICAgdGFyZ2V0OiAiL3ZlbmRvci92ZW5kb3JfZGxrbS9ldGMiLAorICAgICAgICBuYW1lOiAidmVuZG9yX2Rsa20vZXRjIiwKKyAgICB9LAorXQorCithbmRyb2lkX3N5c3RlbV9pbWFnZSB7CisgICAgbmFtZTogImFuZHJvaWRfZ3NpIiwKKyAgICBkZWZhdWx0czogWyJzeXN0ZW1faW1hZ2VfZGVmYXVsdHMiXSwKKyAgICBzeW1saW5rczogZ3NpX3N5bWxpbmtzLAorICAgIGRpcnM6IFsiY2FjaGUiXSwKKyAgICBkZXBzOiBbCisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgLy8gZ3NpX3N5c3RlbV9leHQKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgICAgIC8vIGhhbmRoZWxkIHBhY2thZ2VzCisgICAgICAgICJMYXVuY2hlcjNRdWlja1N0ZXAiLAorICAgICAgICAiUHJvdmlzaW9uIiwKKyAgICAgICAgIlNldHRpbmdzIiwKKyAgICAgICAgIlN0b3JhZ2VNYW5hZ2VyIiwKKyAgICAgICAgIlN5c3RlbVVJIiwKKworICAgICAgICAvLyB0ZWxlcGhvbnkgcGFja2FnZXMKKyAgICAgICAgIkNhcnJpZXJDb25maWciLAorCisgICAgICAgIC8vIEluc3RhbGwgYSBjb3B5IG9mIHRoZSBkZWJ1ZyBwb2xpY3kgdG8gdGhlIHN5c3RlbV9leHQgcGFydGl0aW9uLCBhbmQgYWxsb3cKKyAgICAgICAgLy8gaW5pdC1zZWNvbmQtc3RhZ2UgdG8gbG9hZCBkZWJ1ZyBwb2xpY3kgZnJvbSBzeXN0ZW1fZXh0LgorICAgICAgICAvLyBUaGlzIG9wdGlvbiBpcyBvbmx5IG1lYW50IHRvIGJlIHNldCBieSBjb21wbGlhbmNlIEdTSSB0YXJnZXRzLgorICAgICAgICAic3lzdGVtX2V4dF91c2VyZGVidWdfcGxhdF9zZXBvbGljeS5jaWwiLAorCisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgLy8gYmFzZV9zeXN0ZW1fZXh0CisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgImJ1aWxkX2ZsYWdfc3lzdGVtX2V4dCIsCisgICAgICAgICJmc19jb25maWdfZGlyc19zeXN0ZW1fZXh0IiwKKyAgICAgICAgImZzX2NvbmZpZ19maWxlc19zeXN0ZW1fZXh0IiwKKyAgICAgICAgImdyb3VwX3N5c3RlbV9leHQiLAorICAgICAgICAicGFzc3dkX3N5c3RlbV9leHQiLAorICAgICAgICAiU2F0ZWxsaXRlQ2xpZW50IiwKKyAgICAgICAgInNlbGludXhfcG9saWN5X3N5c3RlbV9leHQiLAorICAgICAgICAic3lzdGVtX2V4dF9tYW5pZmVzdC54bWwiLAorICAgICAgICAic3lzdGVtX2V4dC1idWlsZC5wcm9wIiwKKyAgICAgICAgLy8gQmFzZSBtb2R1bGVzIHdoZW4gc2hpcHBpbmcgYXBpIGxldmVsIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAzNAorICAgICAgICAiaHdzZXJ2aWNlbWFuYWdlciIsCisgICAgICAgICJhbmRyb2lkLmhpZGwuYWxsb2NhdG9yQDEuMC1zZXJ2aWNlIiwKKworICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgICAgIC8vIHdpbmRvd19leHRlbnNpb25zX2Jhc2UKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgICAgICAiYW5kcm9pZHgud2luZG93LmV4dGVuc2lvbnMiLAorICAgICAgICAiYW5kcm9pZHgud2luZG93LnNpZGVjYXIiLAorCisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgLy8gZ3NpX3JlbGVhc2UKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgICAgICAiZ3NpX3NraXBfbW91bnQuY2ZnIiwKKyAgICAgICAgImluaXQuZ3NpLnJjIiwKKyAgICAgICAgImluaXQudm5kay1ub2RlZi5yYyIsCisgICAgICAgIC8vIE92ZXJsYXkgdGhlIEdTSSBzcGVjaWZpYyBzZXR0aW5nIGZvciBmcmFtZXdvcmsgYW5kIFN5c3RlbVVJCisgICAgICAgICJnc2lfb3ZlcmxheV9mcmFtZXdvcmsiLAorICAgICAgICAiZ3NpX292ZXJsYXlfc3lzdGVtdWkiLAorCisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgLy8gVk5ESworICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgICAgICJjb20uYW5kcm9pZC52bmRrLnYzMCIsCisgICAgICAgICJjb20uYW5kcm9pZC52bmRrLnYzMSIsCisgICAgICAgICJjb20uYW5kcm9pZC52bmRrLnYzMiIsCisgICAgICAgICJjb20uYW5kcm9pZC52bmRrLnYzMyIsCisgICAgICAgICJjb20uYW5kcm9pZC52bmRrLnYzNCIsCisKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgICAgICAvLyBBVkYKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgICAgICAiY29tLmFuZHJvaWQuY29tcG9zIiwKKyAgICAgICAgImZlYXR1cmVzX2NvbS5hbmRyb2lkLnZpcnQueG1sIiwKKworICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgICAgIC8vIGdzaV9wcm9kdWN0CisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgIkJyb3dzZXIyIiwKKyAgICAgICAgIkNhbWVyYTIiLAorICAgICAgICAiRGlhbGVyIiwKKyAgICAgICAgIkxhdGluSU1FIiwKKyAgICAgICAgImFwbnMtZnVsbC1jb25mLnhtbCIsCisKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgICAgICAvLyBtZWRpYV9wcm9kdWN0CisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgIndlYnZpZXciLAorCisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgLy8gYmFzZV9wcm9kdWN0CisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgICAgICAvLyBCYXNlIG1vZHVsZXMgYW5kIHNldHRpbmdzIGZvciB0aGUgcHJvZHVjdCBwYXJ0aXRpb24uCisgICAgICAgICJidWlsZF9mbGFnX3Byb2R1Y3QiLAorICAgICAgICAiZnNfY29uZmlnX2RpcnNfcHJvZHVjdCIsCisgICAgICAgICJmc19jb25maWdfZmlsZXNfcHJvZHVjdCIsCisgICAgICAgICJncm91cF9wcm9kdWN0IiwKKyAgICAgICAgIk1vZHVsZU1ldGFkYXRhIiwKKyAgICAgICAgInBhc3N3ZF9wcm9kdWN0IiwKKyAgICAgICAgInByb2R1Y3RfY29tcGF0aWJpbGl0eV9tYXRyaXgueG1sIiwKKyAgICAgICAgInByb2R1Y3RfbWFuaWZlc3QueG1sIiwKKyAgICAgICAgInNlbGludXhfcG9saWN5X3Byb2R1Y3QiLAorICAgICAgICAicHJvZHVjdC1idWlsZC5wcm9wIiwKKworICAgICAgICAvLyBBVURJTworICAgICAgICAiZnJhbWV3b3Jrc19zb3VuZHMiLAorCisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgICAgICAiY2hhcmdlciIsCisgICAgXSArIHNlbGVjdChwcm9kdWN0X3ZhcmlhYmxlKCJkZWJ1Z2dhYmxlIiksIHsKKyAgICAgICAgLy8gUGFja2FnZXMgaW5jbHVkZWQgb25seSBmb3IgZW5nIG9yIHVzZXJkZWJ1ZyBidWlsZHMsIHByZXZpb3VzbHkgZGVidWcgdGFnZ2VkCisgICAgICAgIHRydWU6IFsiYWRiX2tleXMiXSwKKyAgICAgICAgZGVmYXVsdDogW10sCisgICAgfSksCisgICAgbXVsdGlsaWI6IHsKKyAgICAgICAgYm90aDogeworICAgICAgICAgICAgLy8gUFJPRFVDVF9QQUNLQUdFU19TSElQUElOR19BUElfTEVWRUxfMzQKKyAgICAgICAgICAgIGRlcHM6IFsiYW5kcm9pZC5oaWRsLm1lbW9yeUAxLjAtaW1wbCJdLAorICAgICAgICB9LAorICAgIH0sCisgICAgZW5hYmxlZDogc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiQU5EUk9JRCIsICJQUk9EVUNUX0lOU1RBTExfREVCVUdfUE9MSUNZX1RPX1NZU1RFTV9FWFQiKSwgeworICAgICAgICAidHJ1ZSI6IHRydWUsCisgICAgICAgIGRlZmF1bHQ6IGZhbHNlLAorICAgIH0pLAorICAgIHR5cGU6ICJleHQ0IiwKK30KZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2dzaS9jdXJyZW50LnR4dCBiL3RhcmdldC9wcm9kdWN0L2dzaS9jdXJyZW50LnR4dAppbmRleCBmNzcxOTE2Li5jYmI4YTBlIDEwMDY0NAotLS0gYS90YXJnZXQvcHJvZHVjdC9nc2kvY3VycmVudC50eHQKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvZ3NpL2N1cnJlbnQudHh0CkBAIC0yNCw3ICsyNCw3IEBACiBWTkRLLVNQOiBhbmRyb2lkLmhhcmR3YXJlLmNvbW1vbi1WMi1uZGsuc28KIFZOREstU1A6IGFuZHJvaWQuaGFyZHdhcmUuY29tbW9uLmZtcS1WMS1uZGsuc28KIFZOREstU1A6IGFuZHJvaWQuaGFyZHdhcmUuZ3JhcGhpY3MuYWxsb2NhdG9yLVYyLW5kay5zbwotVk5ESy1TUDogYW5kcm9pZC5oYXJkd2FyZS5ncmFwaGljcy5jb21tb24tVjUtbmRrLnNvCitWTkRLLVNQOiBhbmRyb2lkLmhhcmR3YXJlLmdyYXBoaWNzLmNvbW1vbi1WNi1uZGsuc28KIFZOREstU1A6IGFuZHJvaWQuaGFyZHdhcmUuZ3JhcGhpY3MuY29tbW9uQDEuMC5zbwogVk5ESy1TUDogYW5kcm9pZC5oYXJkd2FyZS5ncmFwaGljcy5jb21tb25AMS4xLnNvCiBWTkRLLVNQOiBhbmRyb2lkLmhhcmR3YXJlLmdyYXBoaWNzLmNvbW1vbkAxLjIuc28KZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2dzaV9yZWxlYXNlLm1rIGIvdGFyZ2V0L3Byb2R1Y3QvZ3NpX3JlbGVhc2UubWsKaW5kZXggMzk0MjhkMi4uZjAwYzM4YyAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvZ3NpX3JlbGVhc2UubWsKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvZ3NpX3JlbGVhc2UubWsKQEAgLTgyLDYgKzgyLDcgQEAKICMgQWRkaXRpb25hbCBzZXR0aW5ncyB1c2VkIGluIGFsbCBHU0kgYnVpbGRzCiBQUk9EVUNUX1BST0RVQ1RfUFJPUEVSVElFUyArPSBcCiAgICAgcm8uY3J5cHRvLm1ldGFkYXRhX2luaXRfZGVsZXRlX2FsbF9rZXlzLmVuYWJsZWQ9ZmFsc2UgXAorICAgIGRlYnVnLmNvZGVjMi5icXBvb2xfZGVhbGxvY19hZnRlcl9zdG9wPTEgXAogCiAjIFdpbmRvdyBFeHRlbnNpb25zCiBpZm5lcSAoJChQUk9EVUNUX0lTX0FUViksdHJ1ZSkKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L21lZGlhX3N5c3RlbV9leHQubWsgYi90YXJnZXQvcHJvZHVjdC9tZWRpYV9zeXN0ZW1fZXh0Lm1rCmluZGV4IDM0ZDhkZTMuLmU3OWE3ZWIgMTAwNjQ0Ci0tLSBhL3RhcmdldC9wcm9kdWN0L21lZGlhX3N5c3RlbV9leHQubWsKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvbWVkaWFfc3lzdGVtX2V4dC5tawpAQCAtMjAsMTQgKzIwLDUgQEAKICMgYmFzZV9zeXN0ZW1fZXh0Lm1rLgogJChjYWxsIGluaGVyaXQtcHJvZHVjdCwgJChTUkNfVEFSR0VUX0RJUikvcHJvZHVjdC9iYXNlX3N5c3RlbV9leHQubWspCiAKLSMgL3N5c3RlbV9leHQgcGFja2FnZXMKLVBST0RVQ1RfUEFDS0FHRVMgKz0gXAotICAgIHZuZGtfYXBleF9zbmFwc2hvdF9wYWNrYWdlIFwKLQogIyBXaW5kb3cgRXh0ZW5zaW9ucwogJChjYWxsIGluaGVyaXQtcHJvZHVjdCwgJChTUkNfVEFSR0VUX0RJUikvcHJvZHVjdC93aW5kb3dfZXh0ZW5zaW9uc19iYXNlLm1rKQotCi0jIEFwcEZ1bmN0aW9uIEV4dGVuc2lvbnMKLWlmbmVxICgsJChSRUxFQVNFX0FQUEZVTkNUSU9OX1NJREVDQVIpKQotICAgICQoY2FsbCBpbmhlcml0LXByb2R1Y3QsICQoU1JDX1RBUkdFVF9ESVIpL3Byb2R1Y3QvYXBwX2Z1bmN0aW9uX2V4dGVuc2lvbnMubWspCi1lbmRpZgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3Qvc2VjdXJpdHkvQW5kcm9pZC5icCBiL3RhcmdldC9wcm9kdWN0L3NlY3VyaXR5L0FuZHJvaWQuYnAKaW5kZXggMGQ3YjM1ZS4uZmZiZWMwNiAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3Qvc2VjdXJpdHkvQW5kcm9pZC5icAorKysgYi90YXJnZXQvcHJvZHVjdC9zZWN1cml0eS9BbmRyb2lkLmJwCkBAIC0zNywzICszNyw4IEBACiAgICAgcmVsYXRpdmVfaW5zdGFsbF9wYXRoOiAic2VjdXJpdHkiLAogICAgIGZpbGVuYW1lOiAib3RhY2VydHMuemlwIiwKIH0KKworYWRiX2tleXMgeworICAgIG5hbWU6ICJhZGJfa2V5cyIsCisgICAgcHJvZHVjdF9zcGVjaWZpYzogdHJ1ZSwKK30KZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L3NlY3VyaXR5L0FuZHJvaWQubWsgYi90YXJnZXQvcHJvZHVjdC9zZWN1cml0eS9BbmRyb2lkLm1rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzhlNWJiLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9wcm9kdWN0L3NlY3VyaXR5L0FuZHJvaWQubWsKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1MT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGFkYiBrZXksIGlmIGNvbmZpZ3VyZWQgdmlhIFBST0RVQ1RfQURCX0tFWVMKLWlmZGVmIFBST0RVQ1RfQURCX0tFWVMKLSAgaWZuZXEgKCQoZmlsdGVyIGVuZyB1c2VyZGVidWcsJChUQVJHRVRfQlVJTERfVkFSSUFOVCkpLCkKLSAgICBpbmNsdWRlICQoQ0xFQVJfVkFSUykKLSAgICBMT0NBTF9NT0RVTEUgOj0gYWRiX2tleXMKLSAgICBMT0NBTF9MSUNFTlNFX0tJTkRTIDo9IFNQRFgtbGljZW5zZS1pZGVudGlmaWVyLUFwYWNoZS0yLjAKLSAgICBMT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gbm90aWNlCi0gICAgTE9DQUxfTk9USUNFX0ZJTEUgOj0gYnVpbGQvc29vbmcvbGljZW5zZXMvTElDRU5TRQotICAgIExPQ0FMX01PRFVMRV9DTEFTUyA6PSBFVEMKLSAgICBMT0NBTF9NT0RVTEVfUEFUSCA6PSAkKFRBUkdFVF9PVVRfUFJPRFVDVF9FVEMpL3NlY3VyaXR5Ci0gICAgTE9DQUxfUFJFQlVJTFRfTU9EVUxFX0ZJTEUgOj0gJChQUk9EVUNUX0FEQl9LRVlTKQotICAgIGluY2x1ZGUgJChCVUlMRF9QUkVCVUlMVCkKLSAgZW5kaWYKLWVuZGlmCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC92aXJ0dWFsX2FiX290YS9jb21wcmVzc2lvbi5tayBiL3RhcmdldC9wcm9kdWN0L3ZpcnR1YWxfYWJfb3RhL2NvbXByZXNzaW9uLm1rCmluZGV4IGRjMWVlM2UuLmU3N2MzNmYgMTAwNjQ0Ci0tLSBhL3RhcmdldC9wcm9kdWN0L3ZpcnR1YWxfYWJfb3RhL2NvbXByZXNzaW9uLm1rCisrKyBiL3RhcmdldC9wcm9kdWN0L3ZpcnR1YWxfYWJfb3RhL2NvbXByZXNzaW9uLm1rCkBAIC0xOCw5ICsxOCwxMiBAQAogCiBQUk9EVUNUX1ZFTkRPUl9QUk9QRVJUSUVTICs9IHJvLnZpcnR1YWxfYWIuY29tcHJlc3Npb24uZW5hYmxlZD10cnVlCiBQUk9EVUNUX1ZFTkRPUl9QUk9QRVJUSUVTICs9IHJvLnZpcnR1YWxfYWIudXNlcnNwYWNlLnNuYXBzaG90cy5lbmFibGVkPXRydWUKLVBST0RVQ1RfVkVORE9SX1BST1BFUlRJRVMgKz0gcm8udmlydHVhbF9hYi5pb191cmluZy5lbmFibGVkPXRydWUKIFBST0RVQ1RfVkVORE9SX1BST1BFUlRJRVMgKz0gcm8udmlydHVhbF9hYi5iYXRjaF93cml0ZXM9dHJ1ZQogCisjIE9wdGlvbmFsIGFzc2lnbm1lbnQuIE9uIGxvdyBtZW1vcnkgZGV2aWNlcywgZGlzYWJsaW5nIGlvX3VyaW5nIGNhbiByZWxpZXZlIGNwdSBhbmQgbWVtb3J5CisjIHByZXNzdXJlIGR1cmluZyBhbiBPVEEuCitQUk9EVUNUX1ZFTkRPUl9QUk9QRVJUSUVTICs9IHJvLnZpcnR1YWxfYWIuaW9fdXJpbmcuZW5hYmxlZD89dHJ1ZQorCiAjIEVuYWJsaW5nIHRoaXMgcHJvcGVydHksIHdpbGwgaW1wcm92ZSBPVEEgaW5zdGFsbCB0aW1lCiAjIGJ1dCB3aWxsIHVzZSBhbiBhZGRpdGlvbmFsIENQVSBjb3JlCiAjIFBST0RVQ1RfVkVORE9SX1BST1BFUlRJRVMgKz0gcm8udmlydHVhbF9hYi5jb21wcmVzc2lvbi50aHJlYWRzPXRydWUKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L3ZpcnR1YWxfYWJfb3RhL3ZhYmNfZmVhdHVyZXMubWsgYi90YXJnZXQvcHJvZHVjdC92aXJ0dWFsX2FiX290YS92YWJjX2ZlYXR1cmVzLm1rCmluZGV4IGUyNzQ1YTEuLmQwOTI2OTkgMTAwNjQ0Ci0tLSBhL3RhcmdldC9wcm9kdWN0L3ZpcnR1YWxfYWJfb3RhL3ZhYmNfZmVhdHVyZXMubWsKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvdmlydHVhbF9hYl9vdGEvdmFiY19mZWF0dXJlcy5tawpAQCAtMzEsMTQgKzMxLDE1IEBACiAKIFBST0RVQ1RfVkVORE9SX1BST1BFUlRJRVMgKz0gcm8udmlydHVhbF9hYi5jb21wcmVzc2lvbi5lbmFibGVkPXRydWUKIFBST0RVQ1RfVkVORE9SX1BST1BFUlRJRVMgKz0gcm8udmlydHVhbF9hYi51c2Vyc3BhY2Uuc25hcHNob3RzLmVuYWJsZWQ9dHJ1ZQotUFJPRFVDVF9WRU5ET1JfUFJPUEVSVElFUyArPSByby52aXJ0dWFsX2FiLmlvX3VyaW5nLmVuYWJsZWQ9dHJ1ZQotUFJPRFVDVF9WRU5ET1JfUFJPUEVSVElFUyArPSByby52aXJ0dWFsX2FiLmNvbXByZXNzaW9uLnhvci5lbmFibGVkPXRydWUKIFBST0RVQ1RfVkVORE9SX1BST1BFUlRJRVMgKz0gcm8udmlydHVhbF9hYi5iYXRjaF93cml0ZXM9dHJ1ZQorCisjIE9wdGlvbmFsIGFzc2lnbm1lbnRzLCBsb3cgbWVtb3J5IGRldmljZXMgbWF5IGJlbmVmaXQgZnJvbSBvdmVycmlkaW5nIHRoZXNlLgorUFJPRFVDVF9WRU5ET1JfUFJPUEVSVElFUyArPSByby52aXJ0dWFsX2FiLmlvX3VyaW5nLmVuYWJsZWQ/PXRydWUKK1BST0RVQ1RfVkVORE9SX1BST1BFUlRJRVMgKz0gcm8udmlydHVhbF9hYi5jb21wcmVzc2lvbi54b3IuZW5hYmxlZD89dHJ1ZQorCiAjIExvdyBtZW1vcnkgZGV2aWNlIGNvbmZpZ3VyYXRpb25zLiBJZiBtZW1vcnkgdXNhZ2UgYW5kIGNwdSB1dGlsaXphdGlvbiBpcwogIyBhIGJvdHRsZW5lY2sgZHVyaW5nIE9UQSwgdGhlIGJlbG93IGNvbmZpZ3VyYXRpb25zIGNhbiBiZSBhZGRlZCB0byBhCi0jIGRldmljZSdzIC5tayBmaWxlIGltcHJvdmUgcGVyZm9ybWFuY2UgZm9yIGxvdyBtZW0gZGV2aWNlcy4gRGlzYWJsaW5nCi0jIHJvLnZpcnR1YWxfYWIuY29tcHJlc3Npb24ueG9yLmVuYWJsZWQgYW5kIHJvLnZpcnR1YWxfYWIuaW9fdXJpbmcuZW5hYmxlZAotIyBpcyBhbHNvIHJlY29tbWVuZGVkCisjIGRldmljZSdzIC5tayBmaWxlIGltcHJvdmUgcGVyZm9ybWFuY2UgZm9yIGxvdyBtZW0gZGV2aWNlcy4KICMKICMgUFJPRFVDVF9WRU5ET1JfUFJPUEVSVElFUyArPSByby52aXJ0dWFsX2FiLnJlYWRfYWhlYWRfc2l6ZT0xNgogIyBQUk9EVUNUX1ZFTkRPUl9QUk9QRVJUSUVTICs9IHJvLnZpcnR1YWxfYWIub19kaXJlY3QuZW5hYmxlZD10cnVlCmRpZmYgLS1naXQgYS90ZWFtcy9BbmRyb2lkLmJwIGIvdGVhbXMvQW5kcm9pZC5icAppbmRleCAwZjViNDc1Li5hMmIwZDE0IDEwMDY0NAotLS0gYS90ZWFtcy9BbmRyb2lkLmJwCisrKyBiL3RlYW1zL0FuZHJvaWQuYnAKQEAgLTEzLDYgKzEzLDkgQEAKIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCisvLyBET04nVCBBREQgTkVXIFJVTEVTIEhFUkUuIEZvciBtb3JlIGRldGFpbHMgcmVmZXIgdG8KKy8vIGdvL25ldy1hbmRyb2lkLW93bmVyc2hpcC1tb2RlbAorCiBwYWNrYWdlIHsKICAgICBkZWZhdWx0X2FwcGxpY2FibGVfbGljZW5zZXM6IFsiQW5kcm9pZC1BcGFjaGUtMi4wIl0sCiB9CkBAIC02NywxMyArNzAsNiBAQAogfQogCiB0ZWFtIHsKLSAgICBuYW1lOiAidHJlbmR5X3RlYW1fd2Vhcl93ZWFyX2Nsb3VkX3BsYXRmb3JtIiwKLQotICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzU5MTc3NjI1MjYyODE3MjgKLSAgICB0cmVuZHlfdGVhbV9pZDogIjU5MTc3NjI1MjYyODE3MjgiLAotfQotCi10ZWFtIHsKICAgICBuYW1lOiAidHJlbmR5X3RlYW1fcGl4ZWxfc3lzdGVtX3NvZnR3YXJlIiwKIAogICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzQ4NTYwMDUxMjA2MjI1OTIKQEAgLTUxNSwxMyArNTExLDYgQEAKIH0KIAogdGVhbSB7Ci0gICAgbmFtZTogInRyZW5keV90ZWFtX3dlYXJfd2Vhcl9ub3RpZmljYXRpb25zX2FsZXJ0c19hdHRlbnRpb25fbWFuYWdlbWVudCIsCi0KLSAgICAvLyBnby90cmVuZHkvbWFuYWdlL2VuZ2luZWVycy82MjY3NjQzNjgxOTk2ODAwCi0gICAgdHJlbmR5X3RlYW1faWQ6ICI2MjY3NjQzNjgxOTk2ODAwIiwKLX0KLQotdGVhbSB7CiAgICAgbmFtZTogInRyZW5keV90ZWFtX2Z3a19uZmMiLAogCiAgICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNTk2MjMxMjUxMjg2NDI1NgpAQCAtNTI5LDEzICs1MTgsNiBAQAogfQogCiB0ZWFtIHsKLSAgICBuYW1lOiAidHJlbmR5X3RlYW1fd2Vhcl9wZXJzb25hbGl6YXRpb25fZGV2ZWxvcGVyX3N1cmZhY2VzIiwKLQotICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzQ4MTk4OTA5ODg4MTAyNDAKLSAgICB0cmVuZHlfdGVhbV9pZDogIjQ4MTk4OTA5ODg4MTAyNDAiLAotfQotCi10ZWFtIHsKICAgICBuYW1lOiAidHJlbmR5X3RlYW1fc3Jhamt1bWFyX3RlYW0iLAogCiAgICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNTE3MDA1Mzg5NDAxMjkyOApAQCAtNjkwLDEzICs2NzIsNiBAQAogfQogCiB0ZWFtIHsKLSAgICBuYW1lOiAidHJlbmR5X3RlYW1fdGVzdF9lbmdfYW5kcm9pZF93ZWFyIiwKLQotICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzQ5NzkxNTA0MjI5MzM1MDQKLSAgICB0cmVuZHlfdGVhbV9pZDogIjQ5NzkxNTA0MjI5MzM1MDQiLAotfQotCi10ZWFtIHsKICAgICBuYW1lOiAidHJlbmR5X3RlYW1fbWVzY2hfdGVhbSIsCiAKICAgICAvLyBnby90cmVuZHkvbWFuYWdlL2VuZ2luZWVycy81MjA1NDY1ODk5MzY4NDQ4CkBAIC03MTgsMTMgKzY5Myw2IEBACiB9CiAKIHRlYW0gewotICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV93ZWFyX3dlYXJfZGV2ZWxvcGVyX2RldngiLAotCi0gICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNDg5NDg5MDc2NDY5NzYwMAotICAgIHRyZW5keV90ZWFtX2lkOiAiNDg5NDg5MDc2NDY5NzYwMCIsCi19Ci0KLXRlYW0gewogICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV9hbmRyb2lkX3J1c3QiLAogCiAgICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNDg0NDYwMDU4NjMwNTUzNgpAQCAtOTI4LDEzICs4OTYsNiBAQAogfQogCiB0ZWFtIHsKLSAgICBuYW1lOiAidHJlbmR5X3RlYW1fd2Vhcl93YWxsZXRfb25fd2VhciIsCi0KLSAgICAvLyBnby90cmVuZHkvbWFuYWdlL2VuZ2luZWVycy81NzI0OTYwNDM3NzMxMzI4Ci0gICAgdHJlbmR5X3RlYW1faWQ6ICI1NzI0OTYwNDM3NzMxMzI4IiwKLX0KLQotdGVhbSB7CiAgICAgbmFtZTogInRyZW5keV90ZWFtX2dsYW5jZWFibGVzIiwKIAogICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzQ2NTgyMjIwMDQ2MDA4MzIKQEAgLTEwNjgsMTMgKzEwMjksNiBAQAogfQogCiB0ZWFtIHsKLSAgICBuYW1lOiAidHJlbmR5X3RlYW1fd2Vhcl8zeHAiLAotCi0gICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNTY5MjMxNzYxMjUzOTkwNAotICAgIHRyZW5keV90ZWFtX2lkOiAiNTY5MjMxNzYxMjUzOTkwNCIsCi19Ci0KLXRlYW0gewogICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV9jbG9ja3dvcmsiLAogCiAgICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNDkwODc4MTY3ODc1NTg0MApAQCAtMTIwOCwxMyArMTE2Miw2IEBACiB9CiAKIHRlYW0gewotICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV93ZWFyX3NvZnR3YXJlX250aSIsCi0KLSAgICAvLyBnby90cmVuZHkvbWFuYWdlL2VuZ2luZWVycy81MTY0OTczNTU4NzU5NDI0Ci0gICAgdHJlbmR5X3RlYW1faWQ6ICI1MTY0OTczNTU4NzU5NDI0IiwKLX0KLQotdGVhbSB7CiAgICAgbmFtZTogInRyZW5keV90ZWFtX21hY2hpbmVfbGVhcm5pbmciLAogCiAgICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNTI3NjU2ODMxODI0NjkxMgpAQCAtMTMwNiwxMyArMTI1Myw2IEBACiB9CiAKIHRlYW0gewotICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV93ZWFyX3dlYXJfcG93ZXJfZW11bGF0b3IiLAotCi0gICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNTE2MDMzODkzNjcyNTUwNAotICAgIHRyZW5keV90ZWFtX2lkOiAiNTE2MDMzODkzNjcyNTUwNCIsCi19Ci0KLXRlYW0gewogICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV9kZXByZWNhdGVkX2ZyYW1ld29ya19zdmV0b3NsYXZnYW5vdiIsCiAKICAgICAvLyBnby90cmVuZHkvbWFuYWdlL2VuZ2luZWVycy82NDA0MTE3NDkyNTMxMjAwCkBAIC0xMzI3LDEzICsxMjY3LDYgQEAKIH0KIAogdGVhbSB7Ci0gICAgbmFtZTogInRyZW5keV90ZWFtX3dlYXJfb3B1cyIsCi0KLSAgICAvLyBnby90cmVuZHkvbWFuYWdlL2VuZ2luZWVycy81MDk4MzUxNjM2Njc2NjA4Ci0gICAgdHJlbmR5X3RlYW1faWQ6ICI1MDk4MzUxNjM2Njc2NjA4IiwKLX0KLQotdGVhbSB7CiAgICAgbmFtZTogInRyZW5keV90ZWFtX3RleHRfdG9fc3BlZWNoIiwKIAogICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzYzNjg5MzMxMjA0NDIzNjgKQEAgLTE0MzksMTMgKzEzNzIsNiBAQAogfQogCiB0ZWFtIHsKLSAgICBuYW1lOiAidHJlbmR5X3RlYW1fd2Vhcl9kZXZlbG9wZXJfZm91bmRhdGlvbiIsCi0KLSAgICAvLyBnby90cmVuZHkvbWFuYWdlL2VuZ2luZWVycy81MjM5MTI3MTA4NjQ4OTYwCi0gICAgdHJlbmR5X3RlYW1faWQ6ICI1MjM5MTI3MTA4NjQ4OTYwIiwKLX0KLQotdGVhbSB7CiAgICAgbmFtZTogInRyZW5keV90ZWFtX3RwbV90dmMiLAogCiAgICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNTM5MDY4MzMzMzIzMDU5MgpAQCAtMTQ1MywxMyArMTM3OSw2IEBACiB9CiAKIHRlYW0gewotICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV93ZWFyX3dlYXJfdXgiLAotCi0gICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNTc4MjA5NzQxMTA4MDE5MgotICAgIHRyZW5keV90ZWFtX2lkOiAiNTc4MjA5NzQxMTA4MDE5MiIsCi19Ci0KLXRlYW0gewogICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV9sc2VfZGVza3RvcF9vc19leHBlcmllbmNlIiwKIAogICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzUxMjUyMzQ5MDA0MzQ5NDQKQEAgLTE2NzAsMTMgKzE1ODksNiBAQAogfQogCiB0ZWFtIHsKLSAgICBuYW1lOiAidHJlbmR5X3RlYW1fd2Vhcl93ZWFyX2Fzc2lzdGFudCIsCi0KLSAgICAvLyBnby90cmVuZHkvbWFuYWdlL2VuZ2luZWVycy81ODQ4MDc1MzA2MTcyNDE2Ci0gICAgdHJlbmR5X3RlYW1faWQ6ICI1ODQ4MDc1MzA2MTcyNDE2IiwKLX0KLQotdGVhbSB7CiAgICAgbmFtZTogInRyZW5keV90ZWFtX2FuZHJvaWRfcG93ZXJfYW5kX2NvbW1zX2luZnJhIiwKIAogICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzUzMjU1NDc2NTMzMzI5OTIKQEAgLTM0NTUsNiArMzM2NywxMyBAQAogfQogCiB0ZWFtIHsKKyAgICBuYW1lOiAidHJlbmR5X3RlYW1fYWFvc19kaXNwbGF5X3NhZmV0eV90cmlhZ2UiLAorCisgICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNjUyMjA5MzY2Mzc4MDg2NAorICAgIHRyZW5keV90ZWFtX2lkOiAiNjUyMjA5MzY2Mzc4MDg2NCIsCit9CisKK3RlYW0gewogICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV9jYW1lcmFfaHRjX2xnX3F1YWxjb21tIiwKIAogICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzYzMzIwOTk0ODA5MTE4NzIKQEAgLTQ0NDcsMyArNDM2Niw0MSBAQAogICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzU3ODc5Mzg0NTQ4NjM4NzIKICAgICB0cmVuZHlfdGVhbV9pZDogIjU3ODc5Mzg0NTQ4NjM4NzIiLAogfQorCit0ZWFtIHsKKyAgICBuYW1lOiAidHJlbmR5X3RlYW1fYXJ0X2Nsb3VkIiwKKworICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzUxMjE0NDA2NDc1Nzc2MDAKKyAgICB0cmVuZHlfdGVhbV9pZDogIjUxMjE0NDA2NDc1Nzc2MDAiLAorfQorCit0ZWFtIHsKKyAgICBuYW1lOiAidHJlbmR5X3RlYW1fcmF2ZW53b29kIiwKKworICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzYwMjcxODE1MDA0OTc5MjAKKyAgICB0cmVuZHlfdGVhbV9pZDogIjYwMjcxODE1MDA0OTc5MjAiLAorfQorCit0ZWFtIHsKKyAgICBuYW1lOiAidHJlbmR5X3RlYW1fYXV0b21vdGl2ZV9jYXN0IiwKKworICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzUyOTM2ODMwMjYyNjQwNjQKKyAgICB0cmVuZHlfdGVhbV9pZDogIjUyOTM2ODMwMjYyNjQwNjQiLAorfQorCit0ZWFtIHsKKyAgICBuYW1lOiAidHJlbmR5X3RlYW1fd2Vhcl9zdGFuZGFsb25lX2tpZHMiLAorCisgICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNjMwMzI5ODcwMzk0OTgyNAorICAgIHRyZW5keV90ZWFtX2lkOiAiNjMwMzI5ODcwMzk0OTgyNCIsCit9CisKK3RlYW0geworICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV9kZXNrdG9wX3N0YXRzIiwKKworICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzU0NDA3NjQxMTQyMDY3MjAKKyAgICB0cmVuZHlfdGVhbV9pZDogIjU0NDA3NjQxMTQyMDY3MjAiLAorfQorCisvLyBET04nVCBBREQgTkVXIFJVTEVTIEhFUkUuIEZvciBtb3JlIGRldGFpbHMgcmVmZXIgdG8KKy8vIGdvL25ldy1hbmRyb2lkLW93bmVyc2hpcC1tb2RlbApkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9PV05FUlMgYi90b29scy9hY29uZmlnL09XTkVSUwppbmRleCA5YTc2Mjc5Li5jOTJmYzdjIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL09XTkVSUworKysgYi90b29scy9hY29uZmlnL09XTkVSUwpAQCAtMSw3ICsxLDggQEAKLWFtaGtAZ29vZ2xlLmNvbQogZHpzaGVuQGdvb2dsZS5jb20KLWpoYW1AZ29vZ2xlLmNvbQotam9lb0Bnb29nbGUuY29tCiBvcGdAZ29vZ2xlLmNvbQogdGVkYmF1ZXJAZ29vZ2xlLmNvbQogemhpZG91QGdvb2dsZS5jb20KKworYW1oa0Bnb29nbGUuY29tICAje0xBU1RfUkVTT1JUX1NVR0dFU1RJT059CitqaGFtQGdvb2dsZS5jb20gICN7TEFTVF9SRVNPUlRfU1VHR0VTVElPTn0KK2pvZW9AZ29vZ2xlLmNvbSAgI3tMQVNUX1JFU09SVF9TVUdHRVNUSU9OfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9URVNUX01BUFBJTkcgYi90b29scy9hY29uZmlnL1RFU1RfTUFQUElORwppbmRleCAxNWU0MTg3Li5hN2YwYTRmIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL1RFU1RfTUFQUElORworKysgYi90b29scy9hY29uZmlnL1RFU1RfTUFQUElORwpAQCAtMTAyLDEyICsxMDIsMTQgQEAKICAgICB7CiAgICAgICAvLyBhY29uZmlnX3N0b3JhZ2UgZmlsZSBqYXZhIGludGVncmF0aW9uIHRlc3RzCiAgICAgICAibmFtZSI6ICJhY29uZmlnX3N0b3JhZ2VfZmlsZS50ZXN0LmphdmEiCi0gICAgfQotICBdLAotICAicG9zdHN1Ym1pdCI6IFsKKyAgICB9LAogICAgIHsKLSAgICAgIC8vIGFjb25maWdfc3RvcmFnZSByZWFkIGFwaSBqYXZhIGludGVncmF0aW9uIHRlc3RzCi0gICAgICAibmFtZSI6ICJhY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkudGVzdC5qYXZhIgorICAgICAgLy8gYWNvbmZpZ19zdG9yYWdlIHJlYWQgZnVuY3Rpb25hbCB0ZXN0CisgICAgICAibmFtZSI6ICJhY29uZmlnX3N0b3JhZ2VfcmVhZF9mdW5jdGlvbmFsIgorICAgIH0sCisgICAgeworICAgICAgLy8gYWNvbmZpZ19zdG9yYWdlIHJlYWQgdW5pdCB0ZXN0CisgICAgICAibmFtZSI6ICJhY29uZmlnX3N0b3JhZ2VfcmVhZF91bml0IgogICAgIH0KICAgXQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL0FuZHJvaWQuYnAgYi90b29scy9hY29uZmlnL2Fjb25maWcvQW5kcm9pZC5icAppbmRleCA2ODUyMWFmLi41ZTNlYjEyIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWcvQW5kcm9pZC5icAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWcvQW5kcm9pZC5icApAQCAtNjgsNiArNjgsMTQgQEAKICAgICBdLAogfQogCithY29uZmlnX3ZhbHVlcyB7CisgICAgbmFtZTogImFjb25maWcudGVzdC5mbGFnLnNlY29uZF92YWx1ZXMiLAorICAgIHBhY2thZ2U6ICJjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QiLAorICAgIHNyY3M6IFsKKyAgICAgICAgInRlc3RzL3RoaXJkLnZhbHVlcyIsCisgICAgXSwKK30KKwogYWNvbmZpZ192YWx1ZV9zZXQgewogICAgIG5hbWU6ICJhY29uZmlnLnRlc3QuZmxhZy52YWx1ZV9zZXQiLAogICAgIHZhbHVlczogWwpAQCAtMjM0LDYgKzI0Miw3IEBACiAgICAgbmFtZTogImxpYmFjb25maWdfdGVzdF9ydXN0X2xpYnJhcnkiLAogICAgIGNyYXRlX25hbWU6ICJhY29uZmlnX3Rlc3RfcnVzdF9saWJyYXJ5IiwKICAgICBhY29uZmlnX2RlY2xhcmF0aW9uczogImFjb25maWcudGVzdC5mbGFncyIsCisgICAgaG9zdF9zdXBwb3J0ZWQ6IHRydWUsCiB9CiAKIHJ1c3RfdGVzdCB7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL2NvZGVnZW4vY3BwLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9jb2RlZ2VuL2NwcC5ycwppbmRleCA3YTljMzgyLi5hZTE4Njc5IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL2NvZGVnZW4vY3BwLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29kZWdlbi9jcHAucnMKQEAgLTEyNyw2ICsxMjcsMjYgQEAKICAgICBmbGFnX2lkczogSGFzaE1hcDxTdHJpbmcsIHUxNj4sCiAgICAgcndfY291bnQ6ICZtdXQgaTMyLAogKSAtPiBDbGFzc0VsZW1lbnQgeworICAgIGxldCBub19hc3NpZ25lZF9vZmZzZXQgPQorICAgICAgICAocGYuY29udGFpbmVyKCkgPT0gInN5c3RlbSIgfHwgcGYuY29udGFpbmVyKCkgPT0gInZlbmRvciIgfHwgcGYuY29udGFpbmVyKCkgPT0gInByb2R1Y3QiKQorICAgICAgICAgICAgJiYgcGYucGVybWlzc2lvbigpID09IFByb3RvRmxhZ1Blcm1pc3Npb246OlJFQURfT05MWQorICAgICAgICAgICAgJiYgcGYuc3RhdGUoKSA9PSBQcm90b0ZsYWdTdGF0ZTo6RElTQUJMRUQ7CisKKyAgICBsZXQgZmxhZ19vZmZzZXQgPSBtYXRjaCBmbGFnX2lkcy5nZXQocGYubmFtZSgpKSB7CisgICAgICAgIFNvbWUob2Zmc2V0KSA9PiBvZmZzZXQsCisgICAgICAgIE5vbmUgPT4geworICAgICAgICAgICAgLy8gU3lzdGVtL3ZlbmRvci9wcm9kdWN0IFJPK2Rpc2FibGVkIGZsYWdzIGhhdmUgbm8gb2Zmc2V0IGluIHN0b3JhZ2UgZmlsZXMuCisgICAgICAgICAgICAvLyBBc3NpZ24gcGxhY2Vob2xkZXIgdmFsdWUuCisgICAgICAgICAgICBpZiBub19hc3NpZ25lZF9vZmZzZXQgeworICAgICAgICAgICAgICAgICYwCisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBBbGwgb3RoZXIgZmxhZ3MgX211c3RfIGhhdmUgYW4gb2Zmc2V0LgorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcGFuaWMhKCJ7fSIsIGZvcm1hdCEoIm1pc3NpbmcgZmxhZyBvZmZzZXQgZm9yIHt9IiwgcGYubmFtZSgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCiAgICAgQ2xhc3NFbGVtZW50IHsKICAgICAgICAgcmVhZHdyaXRlX2lkeDogaWYgcGYucGVybWlzc2lvbigpID09IFByb3RvRmxhZ1Blcm1pc3Npb246OlJFQURfV1JJVEUgewogICAgICAgICAgICAgbGV0IGluZGV4ID0gKnJ3X2NvdW50OwpAQCAtMTQ0LDcgKzE2NCw3IEBACiAgICAgICAgIH0sCiAgICAgICAgIGZsYWdfbmFtZTogcGYubmFtZSgpLnRvX3N0cmluZygpLAogICAgICAgICBmbGFnX21hY3JvOiBwZi5uYW1lKCkudG9fdXBwZXJjYXNlKCksCi0gICAgICAgIGZsYWdfb2Zmc2V0OiAqZmxhZ19pZHMuZ2V0KHBmLm5hbWUoKSkuZXhwZWN0KCJ2YWx1ZXMgY2hlY2tlZCBhdCBmbGFnIHBhcnNlIHRpbWUiKSwKKyAgICAgICAgZmxhZ19vZmZzZXQ6ICpmbGFnX29mZnNldCwKICAgICAgICAgZGV2aWNlX2NvbmZpZ19uYW1lc3BhY2U6IHBmLm5hbWVzcGFjZSgpLnRvX3N0cmluZygpLAogICAgICAgICBkZXZpY2VfY29uZmlnX2ZsYWc6IGNvZGVnZW46OmNyZWF0ZV9kZXZpY2VfY29uZmlnX2lkZW50KHBhY2thZ2UsIHBmLm5hbWUoKSkKICAgICAgICAgICAgIC5leHBlY3QoInZhbHVlcyBjaGVja2VkIGF0IGZsYWcgcGFyc2UgdGltZSIpLApkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9jb2RlZ2VuL2phdmEucnMgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL2NvZGVnZW4vamF2YS5ycwppbmRleCAxYWM1OGMxLi43YWZmNGU5IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL2NvZGVnZW4vamF2YS5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL2NvZGVnZW4vamF2YS5ycwpAQCAtMzIsNiArMzIsNyBAQAogICAgIGNvZGVnZW5fbW9kZTogQ29kZWdlbk1vZGUsCiAgICAgZmxhZ19pZHM6IEhhc2hNYXA8U3RyaW5nLCB1MTY+LAogICAgIGFsbG93X2luc3RydW1lbnRhdGlvbjogYm9vbCwKKyAgICBwYWNrYWdlX2ZpbmdlcnByaW50OiB1NjQsCiApIC0+IFJlc3VsdDxWZWM8T3V0cHV0RmlsZT4+CiB3aGVyZQogICAgIEk6IEl0ZXJhdG9yPEl0ZW0gPSBQcm90b1BhcnNlZEZsYWc+LApAQCAtNDYsNiArNDcsNyBAQAogICAgIGxldCBydW50aW1lX2xvb2t1cF9yZXF1aXJlZCA9CiAgICAgICAgIGZsYWdfZWxlbWVudHMuaXRlcigpLmFueSh8ZWxlbXwgZWxlbS5pc19yZWFkX3dyaXRlKSB8fCBsaWJyYXJ5X2V4cG9ydGVkOwogICAgIGxldCBjb250YWluZXIgPSAoZmxhZ19lbGVtZW50cy5maXJzdCgpLmV4cGVjdCgiemVybyB0ZW1wbGF0ZSBmbGFncyIpLmNvbnRhaW5lcikudG9fc3RyaW5nKCk7CisgICAgbGV0IGlzX3BsYXRmb3JtX2NvbnRhaW5lciA9IG1hdGNoZXMhKGNvbnRhaW5lci5hc19zdHIoKSwgInN5c3RlbSIgfCAicHJvZHVjdCIgfCAidmVuZG9yIik7CiAgICAgbGV0IGNvbnRleHQgPSBDb250ZXh0IHsKICAgICAgICAgZmxhZ19lbGVtZW50cywKICAgICAgICAgbmFtZXNwYWNlX2ZsYWdzLApAQCAtNTYsNiArNTgsOCBAQAogICAgICAgICBsaWJyYXJ5X2V4cG9ydGVkLAogICAgICAgICBhbGxvd19pbnN0cnVtZW50YXRpb24sCiAgICAgICAgIGNvbnRhaW5lciwKKyAgICAgICAgaXNfcGxhdGZvcm1fY29udGFpbmVyLAorICAgICAgICBwYWNrYWdlX2ZpbmdlcnByaW50OiBmb3JtYXQhKCIweHs6WH1MIiwgcGFja2FnZV9maW5nZXJwcmludCksCiAgICAgfTsKICAgICBsZXQgbXV0IHRlbXBsYXRlID0gVGlueVRlbXBsYXRlOjpuZXcoKTsKICAgICB0ZW1wbGF0ZS5hZGRfdGVtcGxhdGUoIkZsYWdzLmphdmEiLCBpbmNsdWRlX3N0ciEoIi4uLy4uL3RlbXBsYXRlcy9GbGFncy5qYXZhLnRlbXBsYXRlIikpPzsKQEAgLTEyMyw2ICsxMjcsOCBAQAogICAgIHB1YiBsaWJyYXJ5X2V4cG9ydGVkOiBib29sLAogICAgIHB1YiBhbGxvd19pbnN0cnVtZW50YXRpb246IGJvb2wsCiAgICAgcHViIGNvbnRhaW5lcjogU3RyaW5nLAorICAgIHB1YiBpc19wbGF0Zm9ybV9jb250YWluZXI6IGJvb2wsCisgICAgcHViIHBhY2thZ2VfZmluZ2VycHJpbnQ6IFN0cmluZywKIH0KIAogI1tkZXJpdmUoU2VyaWFsaXplLCBEZWJ1ZyldCkBAIC0xMzcsNiArMTQzLDcgQEAKICAgICBwdWIgZGVmYXVsdF92YWx1ZTogYm9vbCwKICAgICBwdWIgZGV2aWNlX2NvbmZpZ19uYW1lc3BhY2U6IFN0cmluZywKICAgICBwdWIgZGV2aWNlX2NvbmZpZ19mbGFnOiBTdHJpbmcsCisgICAgcHViIGZsYWdfbmFtZTogU3RyaW5nLAogICAgIHB1YiBmbGFnX25hbWVfY29uc3RhbnRfc3VmZml4OiBTdHJpbmcsCiAgICAgcHViIGZsYWdfb2Zmc2V0OiB1MTYsCiAgICAgcHViIGlzX3JlYWRfd3JpdGU6IGJvb2wsCkBAIC0xNTEsMTMgKzE1OCwzNSBAQAogKSAtPiBGbGFnRWxlbWVudCB7CiAgICAgbGV0IGRldmljZV9jb25maWdfZmxhZyA9IGNvZGVnZW46OmNyZWF0ZV9kZXZpY2VfY29uZmlnX2lkZW50KHBhY2thZ2UsIHBmLm5hbWUoKSkKICAgICAgICAgLmV4cGVjdCgidmFsdWVzIGNoZWNrZWQgYXQgZmxhZyBwYXJzZSB0aW1lIik7CisKKyAgICBsZXQgbm9fYXNzaWduZWRfb2Zmc2V0ID0KKyAgICAgICAgKHBmLmNvbnRhaW5lcigpID09ICJzeXN0ZW0iIHx8IHBmLmNvbnRhaW5lcigpID09ICJ2ZW5kb3IiIHx8IHBmLmNvbnRhaW5lcigpID09ICJwcm9kdWN0IikKKyAgICAgICAgICAgICYmIHBmLnBlcm1pc3Npb24oKSA9PSBQcm90b0ZsYWdQZXJtaXNzaW9uOjpSRUFEX09OTFkKKyAgICAgICAgICAgICYmIHBmLnN0YXRlKCkgPT0gUHJvdG9GbGFnU3RhdGU6OkRJU0FCTEVEOworCisgICAgbGV0IGZsYWdfb2Zmc2V0ID0gbWF0Y2ggZmxhZ19vZmZzZXRzLmdldChwZi5uYW1lKCkpIHsKKyAgICAgICAgU29tZShvZmZzZXQpID0+IG9mZnNldCwKKyAgICAgICAgTm9uZSA9PiB7CisgICAgICAgICAgICAvLyBTeXN0ZW0vdmVuZG9yL3Byb2R1Y3QgUk8rZGlzYWJsZWQgZmxhZ3MgaGF2ZSBubyBvZmZzZXQgaW4gc3RvcmFnZSBmaWxlcy4KKyAgICAgICAgICAgIC8vIEFzc2lnbiBwbGFjZWhvbGRlciB2YWx1ZS4KKyAgICAgICAgICAgIGlmIG5vX2Fzc2lnbmVkX29mZnNldCB7CisgICAgICAgICAgICAgICAgJjAKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEFsbCBvdGhlciBmbGFncyBfbXVzdF8gaGF2ZSBhbiBvZmZzZXQuCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBwYW5pYyEoInt9IiwgZm9ybWF0ISgibWlzc2luZyBmbGFnIG9mZnNldCBmb3Ige30iLCBwZi5uYW1lKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKICAgICBGbGFnRWxlbWVudCB7CiAgICAgICAgIGNvbnRhaW5lcjogcGYuY29udGFpbmVyKCkudG9fc3RyaW5nKCksCiAgICAgICAgIGRlZmF1bHRfdmFsdWU6IHBmLnN0YXRlKCkgPT0gUHJvdG9GbGFnU3RhdGU6OkVOQUJMRUQsCiAgICAgICAgIGRldmljZV9jb25maWdfbmFtZXNwYWNlOiBwZi5uYW1lc3BhY2UoKS50b19zdHJpbmcoKSwKICAgICAgICAgZGV2aWNlX2NvbmZpZ19mbGFnLAorICAgICAgICBmbGFnX25hbWU6IHBmLm5hbWUoKS50b19zdHJpbmcoKSwKICAgICAgICAgZmxhZ19uYW1lX2NvbnN0YW50X3N1ZmZpeDogcGYubmFtZSgpLnRvX2FzY2lpX3VwcGVyY2FzZSgpLAotICAgICAgICBmbGFnX29mZnNldDogKmZsYWdfb2Zmc2V0cy5nZXQocGYubmFtZSgpKS5leHBlY3QoImRpZG50IGZpbmQgcGFja2FnZSBvZmZzZXQgOigiKSwKKyAgICAgICAgZmxhZ19vZmZzZXQ6ICpmbGFnX29mZnNldCwKICAgICAgICAgaXNfcmVhZF93cml0ZTogcGYucGVybWlzc2lvbigpID09IFByb3RvRmxhZ1Blcm1pc3Npb246OlJFQURfV1JJVEUsCiAgICAgICAgIG1ldGhvZF9uYW1lOiBmb3JtYXRfamF2YV9tZXRob2RfbmFtZShwZi5uYW1lKCkpLAogICAgICAgICBwcm9wZXJ0aWVzOiBmb3JtYXRfcHJvcGVydHlfbmFtZShwZi5uYW1lc3BhY2UoKSksCkBAIC00OTksNyArNTI4LDggQEAKICAgICAgICAgICAgIG1vZGlmaWVkX3BhcnNlZF9mbGFncy5pbnRvX2l0ZXIoKSwKICAgICAgICAgICAgIG1vZGUsCiAgICAgICAgICAgICBmbGFnX2lkcywKLSAgICAgICAgICAgIGZhbHNlLAorICAgICAgICAgICAgdHJ1ZSwKKyAgICAgICAgICAgIDU4MDExNDQ3ODQ2MTgyMjE2NjgsCiAgICAgICAgICkKICAgICAgICAgLnVud3JhcCgpOwogICAgICAgICBsZXQgZXhwZWN0X2ZsYWdzX2NvbnRlbnQgPSBFWFBFQ1RFRF9GTEFHX0NPTU1PTl9DT05URU5ULnRvX3N0cmluZygpCkBAIC01MDcsMjUgKzUzNywzOCBAQAogICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgRmVhdHVyZUZsYWdzIEZFQVRVUkVfRkxBR1MgPSBuZXcgRmVhdHVyZUZsYWdzSW1wbCgpOwogICAgICAgICB9IiM7CiAKLSAgICAgICAgbGV0IGV4cGVjdGVkX2ZlYXR1cmVmbGFnc21wbF9jb250ZW50XzAgPSByIyIKKyAgICAgICAgbGV0IGV4cGVjdGVkX2ZlYXR1cmVmbGFnc21wbF9jb250ZW50ID0gciMiCiAgICAgICAgIHBhY2thZ2UgY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0OwogICAgICAgICAvLyBUT0RPKGIvMzAzNzczMDU1KTogUmVtb3ZlIHRoZSBhbm5vdGF0aW9uIGFmdGVyIGFjY2VzcyBpc3N1ZSBpcyByZXNvbHZlZC4KICAgICAgICAgaW1wb3J0IGFuZHJvaWQuY29tcGF0LmFubm90YXRpb24uVW5zdXBwb3J0ZWRBcHBVc2FnZTsKLSAgICAgICAgaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuRGV2aWNlQ29uZmlnOwotICAgICAgICBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5EZXZpY2VDb25maWcuUHJvcGVydGllczsKLSAgICAgICAgIiM7Ci0KLSAgICAgICAgbGV0IGV4cGVjdGVkX2ZlYXR1cmVmbGFnc21wbF9jb250ZW50XzEgPSByIyIKKyAgICAgICAgaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7CisgICAgICAgIGltcG9ydCBhbmRyb2lkLm9zLmZsYWdnaW5nLlBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbDsKKyAgICAgICAgaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAgICAgICAgIC8qKiBAaGlkZSAqLwogICAgICAgICBwdWJsaWMgZmluYWwgY2xhc3MgRmVhdHVyZUZsYWdzSW1wbCBpbXBsZW1lbnRzIEZlYXR1cmVGbGFncyB7Ci0gICAgICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2xhdGlsZSBib29sZWFuIGFjb25maWdfdGVzdF9pc19jYWNoZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIHZvbGF0aWxlIGJvb2xlYW4gb3RoZXJfbmFtZXNwYWNlX2lzX2NhY2hlZCA9IGZhbHNlOworICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QuRmVhdHVyZUZsYWdzSW1wbCI7CisgICAgICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2xhdGlsZSBib29sZWFuIGlzQ2FjaGVkID0gZmFsc2U7CiAgICAgICAgICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGRpc2FibGVkUncgPSBmYWxzZTsKICAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZGlzYWJsZWRSd0V4cG9ydGVkID0gZmFsc2U7CiAgICAgICAgICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGRpc2FibGVkUndJbk90aGVyTmFtZXNwYWNlID0gZmFsc2U7CiAgICAgICAgICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGVuYWJsZWRSdyA9IHRydWU7Ci0gICAgICAgICIjOwotICAgICAgICBsZXQgZXhwZWN0ZWRfZmVhdHVyZWZsYWdzbXBsX2NvbnRlbnRfMiA9IHIjIgorICAgICAgICAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsIHJlYWRlciA9IFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5sb2FkKCJzeXN0ZW0iLCAiY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0IiwgMHg1MDgxQ0U3MjIxQzc3MDY0TCk7CisgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkUncgPSByZWFkZXIuZ2V0Qm9vbGVhbkZsYWdWYWx1ZSgwKTsKKyAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWRSd0V4cG9ydGVkID0gcmVhZGVyLmdldEJvb2xlYW5GbGFnVmFsdWUoMSk7CisgICAgICAgICAgICAgICAgICAgIGVuYWJsZWRSdyA9IHJlYWRlci5nZXRCb29sZWFuRmxhZ1ZhbHVlKDcpOworICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZFJ3SW5PdGhlck5hbWVzcGFjZSA9IHJlYWRlci5nZXRCb29sZWFuRmxhZ1ZhbHVlKDIpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgZS50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChOb0NsYXNzRGVmRm91bmRFcnJvciBlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGZvciBtYWlubGluZSBtb2R1bGUgcnVubmluZyBvbiBvbGRlciBkZXZpY2VzLgorICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBiZSByZXBsYWNlcyB0byB2ZXJzaW9uIGNoZWNrLCBhZnRlciB0aGUgdmVyc2lvbiBidW1wLgorICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsIGUudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlzQ2FjaGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICBAY29tLmFuZHJvaWQuYWNvbmZpZy5hbm5vdGF0aW9ucy5BY29uZmlnRmxhZ0FjY2Vzc29yCiAgICAgICAgICAgICBAVW5zdXBwb3J0ZWRBcHBVc2FnZQpAQCAtNTM2LDggKzU3OSw4IEBACiAgICAgICAgICAgICBAY29tLmFuZHJvaWQuYWNvbmZpZy5hbm5vdGF0aW9ucy5BY29uZmlnRmxhZ0FjY2Vzc29yCiAgICAgICAgICAgICBAVW5zdXBwb3J0ZWRBcHBVc2FnZQogICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gZGlzYWJsZWRSdygpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWFjb25maWdfdGVzdF9pc19jYWNoZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgbG9hZF9vdmVycmlkZXNfYWNvbmZpZ190ZXN0KCk7CisgICAgICAgICAgICAgICAgaWYgKCFpc0NhY2hlZCkgeworICAgICAgICAgICAgICAgICAgICBpbml0KCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiBkaXNhYmxlZFJ3OwogICAgICAgICAgICAgfQpAQCAtNTQ1LDggKzU4OCw4IEBACiAgICAgICAgICAgICBAY29tLmFuZHJvaWQuYWNvbmZpZy5hbm5vdGF0aW9ucy5BY29uZmlnRmxhZ0FjY2Vzc29yCiAgICAgICAgICAgICBAVW5zdXBwb3J0ZWRBcHBVc2FnZQogICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gZGlzYWJsZWRSd0V4cG9ydGVkKCkgewotICAgICAgICAgICAgICAgIGlmICghYWNvbmZpZ190ZXN0X2lzX2NhY2hlZCkgewotICAgICAgICAgICAgICAgICAgICBsb2FkX292ZXJyaWRlc19hY29uZmlnX3Rlc3QoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzQ2FjaGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGluaXQoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIGRpc2FibGVkUndFeHBvcnRlZDsKICAgICAgICAgICAgIH0KQEAgLTU1NCw4ICs1OTcsOCBAQAogICAgICAgICAgICAgQGNvbS5hbmRyb2lkLmFjb25maWcuYW5ub3RhdGlvbnMuQWNvbmZpZ0ZsYWdBY2Nlc3NvcgogICAgICAgICAgICAgQFVuc3VwcG9ydGVkQXBwVXNhZ2UKICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGRpc2FibGVkUndJbk90aGVyTmFtZXNwYWNlKCkgewotICAgICAgICAgICAgICAgIGlmICghb3RoZXJfbmFtZXNwYWNlX2lzX2NhY2hlZCkgewotICAgICAgICAgICAgICAgICAgICBsb2FkX292ZXJyaWRlc19vdGhlcl9uYW1lc3BhY2UoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzQ2FjaGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGluaXQoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIGRpc2FibGVkUndJbk90aGVyTmFtZXNwYWNlOwogICAgICAgICAgICAgfQpAQCAtNTg3LDIzNyArNjMwLDE3IEBACiAgICAgICAgICAgICBAY29tLmFuZHJvaWQuYWNvbmZpZy5hbm5vdGF0aW9ucy5BY29uZmlnRmxhZ0FjY2Vzc29yCiAgICAgICAgICAgICBAVW5zdXBwb3J0ZWRBcHBVc2FnZQogICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gZW5hYmxlZFJ3KCkgewotICAgICAgICAgICAgICAgIGlmICghYWNvbmZpZ190ZXN0X2lzX2NhY2hlZCkgewotICAgICAgICAgICAgICAgICAgICBsb2FkX292ZXJyaWRlc19hY29uZmlnX3Rlc3QoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzQ2FjaGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGluaXQoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVuYWJsZWRSdzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAiIzsKIAotICAgICAgICBsZXQgZXhwZWN0X2ZlYXR1cmVmbGFnc2ltcGxfY29udGVudF9vbGQgPSBleHBlY3RlZF9mZWF0dXJlZmxhZ3NtcGxfY29udGVudF8wLnRvX293bmVkKCkKLSAgICAgICAgICAgICsgZXhwZWN0ZWRfZmVhdHVyZWZsYWdzbXBsX2NvbnRlbnRfMQotICAgICAgICAgICAgKyByIyIKLSAgICAgICAgICAgIHByaXZhdGUgdm9pZCBsb2FkX292ZXJyaWRlc19hY29uZmlnX3Rlc3QoKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gRGV2aWNlQ29uZmlnLmdldFByb3BlcnRpZXMoImFjb25maWdfdGVzdCIpOwotICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZFJ3ID0KLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZ2V0Qm9vbGVhbihGbGFncy5GTEFHX0RJU0FCTEVEX1JXLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkUndFeHBvcnRlZCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmdldEJvb2xlYW4oRmxhZ3MuRkxBR19ESVNBQkxFRF9SV19FWFBPUlRFRCwgZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICBlbmFibGVkUncgPQotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5nZXRCb29sZWFuKEZsYWdzLkZMQUdfRU5BQkxFRF9SVywgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICJDYW5ub3QgcmVhZCB2YWx1ZSBmcm9tIG5hbWVzcGFjZSBhY29uZmlnX3Rlc3QgIgotICAgICAgICAgICAgICAgICAgICAgICAgKyAiZnJvbSBEZXZpY2VDb25maWcuIEl0IGNvdWxkIGJlIHRoYXQgdGhlIGNvZGUgdXNpbmcgZmxhZyAiCi0gICAgICAgICAgICAgICAgICAgICAgICArICJleGVjdXRlZCBiZWZvcmUgU2V0dGluZ3NQcm92aWRlciBpbml0aWFsaXphdGlvbi4gUGxlYXNlIHVzZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICArICJmaXhlZCByZWFkLW9ubHkgZmxhZyBieSBhZGRpbmcgaXNfZml4ZWRfcmVhZF9vbmx5OiB0cnVlIGluICIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgImZsYWcgZGVjbGFyYXRpb24uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGUKLSAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYWNvbmZpZ190ZXN0X2lzX2NhY2hlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHByaXZhdGUgdm9pZCBsb2FkX292ZXJyaWRlc19vdGhlcl9uYW1lc3BhY2UoKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gRGV2aWNlQ29uZmlnLmdldFByb3BlcnRpZXMoIm90aGVyX25hbWVzcGFjZSIpOwotICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZFJ3SW5PdGhlck5hbWVzcGFjZSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmdldEJvb2xlYW4oRmxhZ3MuRkxBR19ESVNBQkxFRF9SV19JTl9PVEhFUl9OQU1FU1BBQ0UsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCByZWFkIHZhbHVlIGZyb20gbmFtZXNwYWNlIG90aGVyX25hbWVzcGFjZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICArICJmcm9tIERldmljZUNvbmZpZy4gSXQgY291bGQgYmUgdGhhdCB0aGUgY29kZSB1c2luZyBmbGFnICIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgImV4ZWN1dGVkIGJlZm9yZSBTZXR0aW5nc1Byb3ZpZGVyIGluaXRpYWxpemF0aW9uLiBQbGVhc2UgdXNlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgImZpeGVkIHJlYWQtb25seSBmbGFnIGJ5IGFkZGluZyBpc19maXhlZF9yZWFkX29ubHk6IHRydWUgaW4gIgotICAgICAgICAgICAgICAgICAgICAgICAgKyAiZmxhZyBkZWNsYXJhdGlvbi4iLAotICAgICAgICAgICAgICAgICAgICAgICAgZQotICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBvdGhlcl9uYW1lc3BhY2VfaXNfY2FjaGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0iIwotICAgICAgICAgICAgKyBleHBlY3RlZF9mZWF0dXJlZmxhZ3NtcGxfY29udGVudF8yOwotCiAgICAgICAgIGxldCBtdXQgZmlsZV9zZXQgPSBIYXNoTWFwOjpmcm9tKFsKICAgICAgICAgICAgICgiY29tL2FuZHJvaWQvYWNvbmZpZy90ZXN0L0ZsYWdzLmphdmEiLCBleHBlY3RfZmxhZ3NfY29udGVudC5hc19zdHIoKSksCi0gICAgICAgICAgICAoCi0gICAgICAgICAgICAgICAgImNvbS9hbmRyb2lkL2Fjb25maWcvdGVzdC9GZWF0dXJlRmxhZ3NJbXBsLmphdmEiLAotICAgICAgICAgICAgICAgICZleHBlY3RfZmVhdHVyZWZsYWdzaW1wbF9jb250ZW50X29sZCwKLSAgICAgICAgICAgICksCi0gICAgICAgICAgICAoImNvbS9hbmRyb2lkL2Fjb25maWcvdGVzdC9GZWF0dXJlRmxhZ3MuamF2YSIsIEVYUEVDVEVEX0ZFQVRVUkVGTEFHU19DT01NT05fQ09OVEVOVCksCi0gICAgICAgICAgICAoCi0gICAgICAgICAgICAgICAgImNvbS9hbmRyb2lkL2Fjb25maWcvdGVzdC9DdXN0b21GZWF0dXJlRmxhZ3MuamF2YSIsCi0gICAgICAgICAgICAgICAgRVhQRUNURURfQ1VTVE9NRkVBVFVSRUZMQUdTX0NPTlRFTlQsCi0gICAgICAgICAgICApLAotICAgICAgICAgICAgKAotICAgICAgICAgICAgICAgICJjb20vYW5kcm9pZC9hY29uZmlnL3Rlc3QvRmFrZUZlYXR1cmVGbGFnc0ltcGwuamF2YSIsCi0gICAgICAgICAgICAgICAgRVhQRUNURURfRkFLRUZFQVRVUkVGTEFHU0lNUExfQ09OVEVOVCwKLSAgICAgICAgICAgICksCi0gICAgICAgIF0pOwotCi0gICAgICAgIGZvciBmaWxlIGluIGdlbmVyYXRlZF9maWxlcyB7Ci0gICAgICAgICAgICBsZXQgZmlsZV9wYXRoID0gZmlsZS5wYXRoLnRvX3N0cigpLnVud3JhcCgpOwotICAgICAgICAgICAgYXNzZXJ0IShmaWxlX3NldC5jb250YWluc19rZXkoZmlsZV9wYXRoKSwgIkNhbm5vdCBmaW5kIHt9IiwgZmlsZV9wYXRoKTsKLSAgICAgICAgICAgIGFzc2VydF9lcSEoCi0gICAgICAgICAgICAgICAgTm9uZSwKLSAgICAgICAgICAgICAgICBjcmF0ZTo6dGVzdDo6Zmlyc3Rfc2lnbmlmaWNhbnRfY29kZV9kaWZmKAotICAgICAgICAgICAgICAgICAgICBmaWxlX3NldC5nZXQoZmlsZV9wYXRoKS51bndyYXAoKSwKLSAgICAgICAgICAgICAgICAgICAgJlN0cmluZzo6ZnJvbV91dGY4KGZpbGUuY29udGVudHMpLnVud3JhcCgpCi0gICAgICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICAgICAiRmlsZSB7fSBjb250ZW50IGlzIG5vdCBjb3JyZWN0IiwKLSAgICAgICAgICAgICAgICBmaWxlX3BhdGgKLSAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBmaWxlX3NldC5yZW1vdmUoZmlsZV9wYXRoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGFzc2VydCEoZmlsZV9zZXQuaXNfZW1wdHkoKSk7Ci0KLSAgICAgICAgbGV0IHBhcnNlZF9mbGFncyA9IGNyYXRlOjp0ZXN0OjpwYXJzZV90ZXN0X2ZsYWdzKCk7Ci0gICAgICAgIGxldCBtb2RlID0gQ29kZWdlbk1vZGU6OlByb2R1Y3Rpb247Ci0gICAgICAgIGxldCBtb2RpZmllZF9wYXJzZWRfZmxhZ3MgPQotICAgICAgICAgICAgY3JhdGU6OmNvbW1hbmRzOjptb2RpZnlfcGFyc2VkX2ZsYWdzX2Jhc2VkX29uX21vZGUocGFyc2VkX2ZsYWdzLCBtb2RlKS51bndyYXAoKTsKLSAgICAgICAgbGV0IGZsYWdfaWRzID0KLSAgICAgICAgICAgIGFzc2lnbl9mbGFnX2lkcyhjcmF0ZTo6dGVzdDo6VEVTVF9QQUNLQUdFLCBtb2RpZmllZF9wYXJzZWRfZmxhZ3MuaXRlcigpKS51bndyYXAoKTsKLSAgICAgICAgbGV0IGdlbmVyYXRlZF9maWxlcyA9IGdlbmVyYXRlX2phdmFfY29kZSgKLSAgICAgICAgICAgIGNyYXRlOjp0ZXN0OjpURVNUX1BBQ0tBR0UsCi0gICAgICAgICAgICBtb2RpZmllZF9wYXJzZWRfZmxhZ3MuaW50b19pdGVyKCksCi0gICAgICAgICAgICBtb2RlLAotICAgICAgICAgICAgZmxhZ19pZHMsCi0gICAgICAgICAgICB0cnVlLAotICAgICAgICApCi0gICAgICAgIC51bndyYXAoKTsKLQotICAgICAgICBsZXQgZXhwZWN0X2ZlYXR1cmVmbGFnc2ltcGxfY29udGVudF9uZXcgPSBleHBlY3RlZF9mZWF0dXJlZmxhZ3NtcGxfY29udGVudF8wLnRvX293bmVkKCkKLSAgICAgICAgICAgICsgciMiCi0gICAgICAgICAgICBpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuU3RvcmFnZUludGVybmFsUmVhZGVyOwotICAgICAgICAgICAgaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0gICAgICAgICAgICAiIwotICAgICAgICAgICAgKyBleHBlY3RlZF9mZWF0dXJlZmxhZ3NtcGxfY29udGVudF8xCi0gICAgICAgICAgICArIHIjIgotICAgICAgICBTdG9yYWdlSW50ZXJuYWxSZWFkZXIgcmVhZGVyOwotICAgICAgICBib29sZWFuIHJlYWRGcm9tTmV3U3RvcmFnZTsKLQotICAgICAgICBib29sZWFuIHVzZU5ld1N0b3JhZ2VWYWx1ZUFuZERpc2NhcmRPbGQgPSBmYWxzZTsKLQotICAgICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgVEFHID0gIkFjb25maWdKYXZhQ29kZWdlbiI7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBTVUNDRVNTX0xPRyA9ICJzdWNjZXNzOiAlcyB2YWx1ZSBtYXRjaGVzIjsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIE1JU01BVENIX0xPRyA9ICJlcnJvcjogJXMgdmFsdWUgbWlzbWF0Y2gsIG5ldyBzdG9yYWdlIHZhbHVlIGlzICVzLCBvbGQgc3RvcmFnZSB2YWx1ZSBpcyAlcyI7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBFUlJPUl9MT0cgPSAiZXJyb3I6IGZhaWxlZCB0byByZWFkIGZsYWcgdmFsdWUiOwotCi0gICAgICAgIHByaXZhdGUgdm9pZCBpbml0KCkgewotICAgICAgICAgICAgaWYgKHJlYWRlciAhPSBudWxsKSByZXR1cm47Ci0gICAgICAgICAgICBpZiAoRGV2aWNlQ29uZmlnLmdldEJvb2xlYW4oImNvcmVfZXhwZXJpbWVudHNfdGVhbV9pbnRlcm5hbCIsICJjb20uYW5kcm9pZC5wcm92aWRlcnMuc2V0dGluZ3Muc3RvcmFnZV90ZXN0X21pc3Npb25fMSIsIGZhbHNlKSkgewotICAgICAgICAgICAgICAgIHJlYWRGcm9tTmV3U3RvcmFnZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgcmVhZGVyID0gbmV3IFN0b3JhZ2VJbnRlcm5hbFJlYWRlcigic3lzdGVtIiwgImNvbS5hbmRyb2lkLmFjb25maWcudGVzdCIpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG51bGw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB1c2VOZXdTdG9yYWdlVmFsdWVBbmREaXNjYXJkT2xkID0KLSAgICAgICAgICAgICAgICBEZXZpY2VDb25maWcuZ2V0Qm9vbGVhbigiY29yZV9leHBlcmltZW50c190ZWFtX2ludGVybmFsIiwgImNvbS5hbmRyb2lkLnByb3ZpZGVycy5zZXR0aW5ncy51c2VfbmV3X3N0b3JhZ2VfdmFsdWUiLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgbG9hZF9vdmVycmlkZXNfYWNvbmZpZ190ZXN0KCkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBEZXZpY2VDb25maWcuZ2V0UHJvcGVydGllcygiYWNvbmZpZ190ZXN0Iik7Ci0gICAgICAgICAgICAgICAgZGlzYWJsZWRSdyA9Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZ2V0Qm9vbGVhbihGbGFncy5GTEFHX0RJU0FCTEVEX1JXLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgZGlzYWJsZWRSd0V4cG9ydGVkID0KLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5nZXRCb29sZWFuKEZsYWdzLkZMQUdfRElTQUJMRURfUldfRVhQT1JURUQsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBlbmFibGVkUncgPQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmdldEJvb2xlYW4oRmxhZ3MuRkxBR19FTkFCTEVEX1JXLCB0cnVlKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCByZWFkIHZhbHVlIGZyb20gbmFtZXNwYWNlIGFjb25maWdfdGVzdCAiCi0gICAgICAgICAgICAgICAgICAgICsgImZyb20gRGV2aWNlQ29uZmlnLiBJdCBjb3VsZCBiZSB0aGF0IHRoZSBjb2RlIHVzaW5nIGZsYWcgIgotICAgICAgICAgICAgICAgICAgICArICJleGVjdXRlZCBiZWZvcmUgU2V0dGluZ3NQcm92aWRlciBpbml0aWFsaXphdGlvbi4gUGxlYXNlIHVzZSAiCi0gICAgICAgICAgICAgICAgICAgICsgImZpeGVkIHJlYWQtb25seSBmbGFnIGJ5IGFkZGluZyBpc19maXhlZF9yZWFkX29ubHk6IHRydWUgaW4gIgotICAgICAgICAgICAgICAgICAgICArICJmbGFnIGRlY2xhcmF0aW9uLiIsCi0gICAgICAgICAgICAgICAgICAgIGUKLSAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYWNvbmZpZ190ZXN0X2lzX2NhY2hlZCA9IHRydWU7Ci0gICAgICAgICAgICBpbml0KCk7Ci0gICAgICAgICAgICBpZiAocmVhZEZyb21OZXdTdG9yYWdlICYmIHJlYWRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgYm9vbGVhbiB2YWw7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgdmFsID0gcmVhZGVyLmdldEJvb2xlYW5GbGFnVmFsdWUoMSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YWwgIT0gZGlzYWJsZWRSdykgewotICAgICAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBTdHJpbmcuZm9ybWF0KE1JU01BVENIX0xPRywgImRpc2FibGVkUnciLCB2YWwsIGRpc2FibGVkUncpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmICh1c2VOZXdTdG9yYWdlVmFsdWVBbmREaXNjYXJkT2xkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZFJ3ID0gdmFsOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdmFsID0gcmVhZGVyLmdldEJvb2xlYW5GbGFnVmFsdWUoMik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YWwgIT0gZGlzYWJsZWRSd0V4cG9ydGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFN0cmluZy5mb3JtYXQoTUlTTUFUQ0hfTE9HLCAiZGlzYWJsZWRSd0V4cG9ydGVkIiwgdmFsLCBkaXNhYmxlZFJ3RXhwb3J0ZWQpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmICh1c2VOZXdTdG9yYWdlVmFsdWVBbmREaXNjYXJkT2xkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZFJ3RXhwb3J0ZWQgPSB2YWw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB2YWwgPSByZWFkZXIuZ2V0Qm9vbGVhbkZsYWdWYWx1ZSg4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCAhPSBlbmFibGVkUncpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgU3RyaW5nLmZvcm1hdChNSVNNQVRDSF9MT0csICJlbmFibGVkUnciLCB2YWwsIGVuYWJsZWRSdykpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHVzZU5ld1N0b3JhZ2VWYWx1ZUFuZERpc2NhcmRPbGQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWRSdyA9IHZhbDsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCBFUlJPUl9MT0csIGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBsb2FkX292ZXJyaWRlc19vdGhlcl9uYW1lc3BhY2UoKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIFByb3BlcnRpZXMgcHJvcGVydGllcyA9IERldmljZUNvbmZpZy5nZXRQcm9wZXJ0aWVzKCJvdGhlcl9uYW1lc3BhY2UiKTsKLSAgICAgICAgICAgICAgICBkaXNhYmxlZFJ3SW5PdGhlck5hbWVzcGFjZSA9Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZ2V0Qm9vbGVhbihGbGFncy5GTEFHX0RJU0FCTEVEX1JXX0lOX09USEVSX05BTUVTUEFDRSwgZmFsc2UpOwotICAgICAgICAgICAgfSBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IHJlYWQgdmFsdWUgZnJvbSBuYW1lc3BhY2Ugb3RoZXJfbmFtZXNwYWNlICIKLSAgICAgICAgICAgICAgICAgICAgKyAiZnJvbSBEZXZpY2VDb25maWcuIEl0IGNvdWxkIGJlIHRoYXQgdGhlIGNvZGUgdXNpbmcgZmxhZyAiCi0gICAgICAgICAgICAgICAgICAgICsgImV4ZWN1dGVkIGJlZm9yZSBTZXR0aW5nc1Byb3ZpZGVyIGluaXRpYWxpemF0aW9uLiBQbGVhc2UgdXNlICIKLSAgICAgICAgICAgICAgICAgICAgKyAiZml4ZWQgcmVhZC1vbmx5IGZsYWcgYnkgYWRkaW5nIGlzX2ZpeGVkX3JlYWRfb25seTogdHJ1ZSBpbiAiCi0gICAgICAgICAgICAgICAgICAgICsgImZsYWcgZGVjbGFyYXRpb24uIiwKLSAgICAgICAgICAgICAgICAgICAgZQotICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBvdGhlcl9uYW1lc3BhY2VfaXNfY2FjaGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGluaXQoKTsKLSAgICAgICAgICAgIGlmIChyZWFkRnJvbU5ld1N0b3JhZ2UgJiYgcmVhZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBib29sZWFuIHZhbDsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICB2YWwgPSByZWFkZXIuZ2V0Qm9vbGVhbkZsYWdWYWx1ZSgzKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCAhPSBkaXNhYmxlZFJ3SW5PdGhlck5hbWVzcGFjZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBTdHJpbmcuZm9ybWF0KE1JU01BVENIX0xPRywgImRpc2FibGVkUndJbk90aGVyTmFtZXNwYWNlIiwgdmFsLCBkaXNhYmxlZFJ3SW5PdGhlck5hbWVzcGFjZSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHVzZU5ld1N0b3JhZ2VWYWx1ZUFuZERpc2NhcmRPbGQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkUndJbk90aGVyTmFtZXNwYWNlID0gdmFsOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsIEVSUk9SX0xPRywgZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IiMgKyBleHBlY3RlZF9mZWF0dXJlZmxhZ3NtcGxfY29udGVudF8yOwotCi0gICAgICAgIGxldCBtdXQgZmlsZV9zZXQgPSBIYXNoTWFwOjpmcm9tKFsKLSAgICAgICAgICAgICgiY29tL2FuZHJvaWQvYWNvbmZpZy90ZXN0L0ZsYWdzLmphdmEiLCBleHBlY3RfZmxhZ3NfY29udGVudC5hc19zdHIoKSksCi0gICAgICAgICAgICAoCi0gICAgICAgICAgICAgICAgImNvbS9hbmRyb2lkL2Fjb25maWcvdGVzdC9GZWF0dXJlRmxhZ3NJbXBsLmphdmEiLAotICAgICAgICAgICAgICAgICZleHBlY3RfZmVhdHVyZWZsYWdzaW1wbF9jb250ZW50X25ldywKLSAgICAgICAgICAgICksCisgICAgICAgICAgICAoImNvbS9hbmRyb2lkL2Fjb25maWcvdGVzdC9GZWF0dXJlRmxhZ3NJbXBsLmphdmEiLCBleHBlY3RlZF9mZWF0dXJlZmxhZ3NtcGxfY29udGVudCksCiAgICAgICAgICAgICAoImNvbS9hbmRyb2lkL2Fjb25maWcvdGVzdC9GZWF0dXJlRmxhZ3MuamF2YSIsIEVYUEVDVEVEX0ZFQVRVUkVGTEFHU19DT01NT05fQ09OVEVOVCksCiAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgImNvbS9hbmRyb2lkL2Fjb25maWcvdGVzdC9DdXN0b21GZWF0dXJlRmxhZ3MuamF2YSIsCkBAIC04NjEsNiArNjg0LDcgQEAKICAgICAgICAgICAgIG1vZGUsCiAgICAgICAgICAgICBmbGFnX2lkcywKICAgICAgICAgICAgIHRydWUsCisgICAgICAgICAgICA1ODAxMTQ0Nzg0NjE4MjIxNjY4LAogICAgICAgICApCiAgICAgICAgIC51bndyYXAoKTsKIApAQCAtODk5LDYgKzcyMyw3IEBACiAKICAgICAgICAgbGV0IGV4cGVjdF9mZWF0dXJlX2ZsYWdzX2ltcGxfY29udGVudCA9IHIjIgogICAgICAgICBwYWNrYWdlIGNvbS5hbmRyb2lkLmFjb25maWcudGVzdDsKKyAgICAgICAgaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwogICAgICAgICBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5EZXZpY2VDb25maWc7CiAgICAgICAgIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkRldmljZUNvbmZpZy5Qcm9wZXJ0aWVzOwogICAgICAgICAvKiogQGhpZGUgKi8KQEAgLTkwOCw4ICs3MzMsOCBAQAogICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBlbmFibGVkRml4ZWRSb0V4cG9ydGVkID0gZmFsc2U7CiAgICAgICAgICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGVuYWJsZWRSb0V4cG9ydGVkID0gZmFsc2U7CiAKLQogICAgICAgICAgICAgcHJpdmF0ZSB2b2lkIGxvYWRfb3ZlcnJpZGVzX2Fjb25maWdfdGVzdCgpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBsb25nIGlkZW50ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CiAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gRGV2aWNlQ29uZmlnLmdldFByb3BlcnRpZXMoImFjb25maWdfdGVzdCIpOwogICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZFJ3RXhwb3J0ZWQgPQpAQCAtOTI3LDI3ICs3NTIsMzEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICsgImZsYWcgZGVjbGFyYXRpb24uIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGUKICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGZvciBpc29sYXRlZCBwcm9jZXNzIGNhc2UsIHNraXAgbG9hZGluZyBmbGFnIHZhbHVlIGZyb20gdGhlIHN0b3JhZ2UsIHVzZSB0aGUgZGVmYXVsdAorICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkZW50KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYWNvbmZpZ190ZXN0X2lzX2NhY2hlZCA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGRpc2FibGVkUndFeHBvcnRlZCgpIHsKICAgICAgICAgICAgICAgICBpZiAoIWFjb25maWdfdGVzdF9pc19jYWNoZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgbG9hZF9vdmVycmlkZXNfYWNvbmZpZ190ZXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2FkX292ZXJyaWRlc19hY29uZmlnX3Rlc3QoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIGRpc2FibGVkUndFeHBvcnRlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gZW5hYmxlZEZpeGVkUm9FeHBvcnRlZCgpIHsKICAgICAgICAgICAgICAgICBpZiAoIWFjb25maWdfdGVzdF9pc19jYWNoZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgbG9hZF9vdmVycmlkZXNfYWNvbmZpZ190ZXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2FkX292ZXJyaWRlc19hY29uZmlnX3Rlc3QoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVuYWJsZWRGaXhlZFJvRXhwb3J0ZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGVuYWJsZWRSb0V4cG9ydGVkKCkgewogICAgICAgICAgICAgICAgIGlmICghYWNvbmZpZ190ZXN0X2lzX2NhY2hlZCkgewotICAgICAgICAgICAgICAgICAgICBsb2FkX292ZXJyaWRlc19hY29uZmlnX3Rlc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRfb3ZlcnJpZGVzX2Fjb25maWdfdGVzdCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gZW5hYmxlZFJvRXhwb3J0ZWQ7CiAgICAgICAgICAgICB9CkBAIC0xMDU0LDYgKzg4Myw3IEBACiAgICAgICAgICAgICBtb2RlLAogICAgICAgICAgICAgZmxhZ19pZHMsCiAgICAgICAgICAgICB0cnVlLAorICAgICAgICAgICAgNTgwMTE0NDc4NDYxODIyMTY2OCwKICAgICAgICAgKQogICAgICAgICAudW53cmFwKCk7CiAKQEAgLTExNzUsNiArMTAwNSw3IEBACiAgICAgICAgICAgICBtb2RlLAogICAgICAgICAgICAgZmxhZ19pZHMsCiAgICAgICAgICAgICB0cnVlLAorICAgICAgICAgICAgNTgwMTE0NDc4NDYxODIyMTY2OCwKICAgICAgICAgKQogICAgICAgICAudW53cmFwKCk7CiAgICAgICAgIGxldCBleHBlY3RfZmVhdHVyZWZsYWdzX2NvbnRlbnQgPSByIyIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29kZWdlbi9ydXN0LnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9jb2RlZ2VuL3J1c3QucnMKaW5kZXggN2JjMzRkNi4uMmJmNTY1YSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9jb2RlZ2VuL3J1c3QucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9jb2RlZ2VuL3J1c3QucnMKQEAgLTg4LDYgKzg4LDI3IEBACiBpbXBsIFRlbXBsYXRlUGFyc2VkRmxhZyB7CiAgICAgI1thbGxvdyhjbGlwcHk6Om5vbm1pbmltYWxfYm9vbCldCiAgICAgZm4gbmV3KHBhY2thZ2U6ICZzdHIsIGZsYWdfb2Zmc2V0czogSGFzaE1hcDxTdHJpbmcsIHUxNj4sIHBmOiAmUHJvdG9QYXJzZWRGbGFnKSAtPiBTZWxmIHsKKyAgICAgICAgbGV0IG5vX2Fzc2lnbmVkX29mZnNldCA9IChwZi5jb250YWluZXIoKSA9PSAic3lzdGVtIgorICAgICAgICAgICAgfHwgcGYuY29udGFpbmVyKCkgPT0gInZlbmRvciIKKyAgICAgICAgICAgIHx8IHBmLmNvbnRhaW5lcigpID09ICJwcm9kdWN0IikKKyAgICAgICAgICAgICYmIHBmLnBlcm1pc3Npb24oKSA9PSBQcm90b0ZsYWdQZXJtaXNzaW9uOjpSRUFEX09OTFkKKyAgICAgICAgICAgICYmIHBmLnN0YXRlKCkgPT0gUHJvdG9GbGFnU3RhdGU6OkRJU0FCTEVEOworCisgICAgICAgIGxldCBmbGFnX29mZnNldCA9IG1hdGNoIGZsYWdfb2Zmc2V0cy5nZXQocGYubmFtZSgpKSB7CisgICAgICAgICAgICBTb21lKG9mZnNldCkgPT4gb2Zmc2V0LAorICAgICAgICAgICAgTm9uZSA9PiB7CisgICAgICAgICAgICAgICAgLy8gU3lzdGVtL3ZlbmRvci9wcm9kdWN0IFJPK2Rpc2FibGVkIGZsYWdzIGhhdmUgbm8gb2Zmc2V0IGluIHN0b3JhZ2UgZmlsZXMuCisgICAgICAgICAgICAgICAgLy8gQXNzaWduIHBsYWNlaG9sZGVyIHZhbHVlLgorICAgICAgICAgICAgICAgIGlmIG5vX2Fzc2lnbmVkX29mZnNldCB7CisgICAgICAgICAgICAgICAgICAgICYwCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIEFsbCBvdGhlciBmbGFncyBfbXVzdF8gaGF2ZSBhbiBvZmZzZXQuCisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHBhbmljISgie30iLCBmb3JtYXQhKCJtaXNzaW5nIGZsYWcgb2Zmc2V0IGZvciB7fSIsIHBmLm5hbWUoKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKwogICAgICAgICBTZWxmIHsKICAgICAgICAgICAgIHJlYWR3cml0ZTogcGYucGVybWlzc2lvbigpID09IFByb3RvRmxhZ1Blcm1pc3Npb246OlJFQURfV1JJVEUsCiAgICAgICAgICAgICBkZWZhdWx0X3ZhbHVlOiBtYXRjaCBwZi5zdGF0ZSgpIHsKQEAgLTk2LDcgKzExNyw3IEBACiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgbmFtZTogcGYubmFtZSgpLnRvX3N0cmluZygpLAogICAgICAgICAgICAgY29udGFpbmVyOiBwZi5jb250YWluZXIoKS50b19zdHJpbmcoKSwKLSAgICAgICAgICAgIGZsYWdfb2Zmc2V0OiAqZmxhZ19vZmZzZXRzLmdldChwZi5uYW1lKCkpLmV4cGVjdCgiZGlkbnQgZmluZCBwYWNrYWdlIG9mZnNldCA6KCIpLAorICAgICAgICAgICAgZmxhZ19vZmZzZXQ6ICpmbGFnX29mZnNldCwKICAgICAgICAgICAgIGRldmljZV9jb25maWdfbmFtZXNwYWNlOiBwZi5uYW1lc3BhY2UoKS50b19zdHJpbmcoKSwKICAgICAgICAgICAgIGRldmljZV9jb25maWdfZmxhZzogY29kZWdlbjo6Y3JlYXRlX2RldmljZV9jb25maWdfaWRlbnQocGFja2FnZSwgcGYubmFtZSgpKQogICAgICAgICAgICAgICAgIC5leHBlY3QoInZhbHVlcyBjaGVja2VkIGF0IGZsYWcgcGFyc2UgdGltZSIpLApAQCAtMjU5LDEwICsyODAsNiBAQAogLy8vIGZsYWcgcHJvdmlkZXIKIHB1YiBzdHJ1Y3QgRmxhZ1Byb3ZpZGVyOwogCi1zdGF0aWMgUkVBRF9GUk9NX05FV19TVE9SQUdFOiBMYXp5TG9jazxib29sPiA9IExhenlMb2NrOjpuZXcofHwgdW5zYWZlIHsKLSAgICBQYXRoOjpuZXcoIi9tZXRhZGF0YS9hY29uZmlnL2Jvb3QvZW5hYmxlX29ubHlfbmV3X3N0b3JhZ2UiKS5leGlzdHMoKQotfSk7Ci0KIHN0YXRpYyBQQUNLQUdFX09GRlNFVDogTGF6eUxvY2s8UmVzdWx0PE9wdGlvbjx1MzI+LCBBY29uZmlnU3RvcmFnZUVycm9yPj4gPSBMYXp5TG9jazo6bmV3KHx8IHVuc2FmZSB7CiAgICAgZ2V0X21hcHBlZF9zdG9yYWdlX2ZpbGUoInN5c3RlbSIsIFN0b3JhZ2VGaWxlVHlwZTo6UGFja2FnZU1hcCkKICAgICAuYW5kX3RoZW4ofHBhY2thZ2VfbWFwfCBnZXRfcGFja2FnZV9yZWFkX2NvbnRleHQoJnBhY2thZ2VfbWFwLCAiY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0IikpCkBAIC0yNzUsNyArMjkyLDQ2IEBACiAKIC8vLyBmbGFnIHZhbHVlIGNhY2hlIGZvciBkaXNhYmxlZF9ydwogc3RhdGljIENBQ0hFRF9kaXNhYmxlZF9ydzogTGF6eUxvY2s8Ym9vbD4gPSBMYXp5TG9jazo6bmV3KHx8IHsKLSAgICBpZiAqUkVBRF9GUk9NX05FV19TVE9SQUdFIHsKKyAgICAvLyBUaGlzIHdpbGwgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLiBTdWJzZXF1ZW50IGNhbGxzIGFmdGVyIHRoZSBmaXJzdCBhcmUgbm9vcHMuCisgICAgbG9nZ2VyOjppbml0KAorICAgICAgICBsb2dnZXI6OkNvbmZpZzo6ZGVmYXVsdCgpCisgICAgICAgICAgICAud2l0aF90YWdfb25fZGV2aWNlKCJhY29uZmlnX3J1c3RfY29kZWdlbiIpCisgICAgICAgICAgICAud2l0aF9tYXhfbGV2ZWwoTGV2ZWxGaWx0ZXI6OkluZm8pKTsKKworICAgIGxldCBmbGFnX3ZhbHVlX3Jlc3VsdCA9IEZMQUdfVkFMX01BUAorICAgICAgICAuYXNfcmVmKCkKKyAgICAgICAgLm1hcF9lcnIofGVycnwgZm9ybWF0ISgiZmFpbGVkIHRvIGdldCBmbGFnIHZhbCBtYXA6IHtlcnJ9IikpCisgICAgICAgIC5hbmRfdGhlbih8ZmxhZ192YWxfbWFwfCB7CisgICAgICAgICAgICBQQUNLQUdFX09GRlNFVAorICAgICAgICAgICAgICAgLmFzX3JlZigpCisgICAgICAgICAgICAgICAubWFwX2Vycih8ZXJyfCBmb3JtYXQhKCJmYWlsZWQgdG8gZ2V0IHBhY2thZ2UgcmVhZCBvZmZzZXQ6IHtlcnJ9IikpCisgICAgICAgICAgICAgICAuYW5kX3RoZW4ofHBhY2thZ2Vfb2Zmc2V0fCB7CisgICAgICAgICAgICAgICAgICAgbWF0Y2ggcGFja2FnZV9vZmZzZXQgeworICAgICAgICAgICAgICAgICAgICAgICBTb21lKG9mZnNldCkgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2Jvb2xlYW5fZmxhZ192YWx1ZSgmZmxhZ192YWxfbWFwLCBvZmZzZXQgKyAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXBfZXJyKHxlcnJ8IGZvcm1hdCEoImZhaWxlZCB0byBnZXQgZmxhZzoge2Vycn0iKSkKKyAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgTm9uZSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2chKExldmVsOjpFcnJvciwgIm5vIGNvbnRleHQgZm91bmQgZm9yIHBhY2thZ2UgY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBFcnIoZm9ybWF0ISgiZmFpbGVkIHRvIGZsYWcgcGFja2FnZSBjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QiKSkKKyAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIH0pOworCisgICAgbWF0Y2ggZmxhZ192YWx1ZV9yZXN1bHQgeworICAgICAgICBPayhmbGFnX3ZhbHVlKSA9PiB7CisgICAgICAgICAgICByZXR1cm4gZmxhZ192YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgRXJyKGVycikgPT4geworICAgICAgICAgICAgbG9nIShMZXZlbDo6RXJyb3IsICJhY29uZmlnX3J1c3RfY29kZWdlbjogZXJyb3I6IHtlcnJ9Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9Cit9KTsKKworLy8vIGZsYWcgdmFsdWUgY2FjaGUgZm9yIGRpc2FibGVkX3J3X2V4cG9ydGVkCitzdGF0aWMgQ0FDSEVEX2Rpc2FibGVkX3J3X2V4cG9ydGVkOiBMYXp5TG9jazxib29sPiA9IExhenlMb2NrOjpuZXcofHwgewogICAgICAgICAvLyBUaGlzIHdpbGwgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLiBTdWJzZXF1ZW50IGNhbGxzIGFmdGVyIHRoZSBmaXJzdCBhcmUgbm9vcHMuCiAgICAgICAgIGxvZ2dlcjo6aW5pdCgKICAgICAgICAgICAgIGxvZ2dlcjo6Q29uZmlnOjpkZWZhdWx0KCkKQEAgLTI5NSw3ICszNTEsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2Jvb2xlYW5fZmxhZ192YWx1ZSgmZmxhZ192YWxfbWFwLCBvZmZzZXQgKyAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcF9lcnIofGVycnwgZm9ybWF0ISgiZmFpbGVkIHRvIGdldCBmbGFnOiB7ZXJyfSIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSA9PiBFcnIoIm5vIGNvbnRleHQgZm91bmQgZm9yIHBhY2thZ2UgJ2NvbS5hbmRyb2lkLmFjb25maWcudGVzdCciLnRvX3N0cmluZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2chKExldmVsOjpFcnJvciwgIm5vIGNvbnRleHQgZm91bmQgZm9yIHBhY2thZ2UgY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycihmb3JtYXQhKCJmYWlsZWQgdG8gZmxhZyBwYWNrYWdlIGNvbS5hbmRyb2lkLmFjb25maWcudGVzdCIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICB9KTsKQEAgLTMwNiwyMCArMzY1LDEzIEBACiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgRXJyKGVycikgPT4gewogICAgICAgICAgICAgICAgIGxvZyEoTGV2ZWw6OkVycm9yLCAiYWNvbmZpZ19ydXN0X2NvZGVnZW46IGVycm9yOiB7ZXJyfSIpOwotICAgICAgICAgICAgICAgIHBhbmljISgiZmFpbGVkIHRvIHJlYWQgZmxhZyB2YWx1ZToge2Vycn0iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmbGFnc19ydXN0OjpHZXRTZXJ2ZXJDb25maWd1cmFibGVGbGFnKAotICAgICAgICAgICAgImFjb25maWdfZmxhZ3MuYWNvbmZpZ190ZXN0IiwKLSAgICAgICAgICAgICJjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QuZGlzYWJsZWRfcnciLAotICAgICAgICAgICAgImZhbHNlIikgPT0gInRydWUiCi0gICAgfQogfSk7CiAKLS8vLyBmbGFnIHZhbHVlIGNhY2hlIGZvciBkaXNhYmxlZF9yd19leHBvcnRlZAotc3RhdGljIENBQ0hFRF9kaXNhYmxlZF9yd19leHBvcnRlZDogTGF6eUxvY2s8Ym9vbD4gPSBMYXp5TG9jazo6bmV3KHx8IHsKLSAgICBpZiAqUkVBRF9GUk9NX05FV19TVE9SQUdFIHsKKy8vLyBmbGFnIHZhbHVlIGNhY2hlIGZvciBkaXNhYmxlZF9yd19pbl9vdGhlcl9uYW1lc3BhY2UKK3N0YXRpYyBDQUNIRURfZGlzYWJsZWRfcndfaW5fb3RoZXJfbmFtZXNwYWNlOiBMYXp5TG9jazxib29sPiA9IExhenlMb2NrOjpuZXcofHwgewogICAgICAgICAvLyBUaGlzIHdpbGwgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLiBTdWJzZXF1ZW50IGNhbGxzIGFmdGVyIHRoZSBmaXJzdCBhcmUgbm9vcHMuCiAgICAgICAgIGxvZ2dlcjo6aW5pdCgKICAgICAgICAgICAgIGxvZ2dlcjo6Q29uZmlnOjpkZWZhdWx0KCkKQEAgLTMzOSw3ICszOTEsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2Jvb2xlYW5fZmxhZ192YWx1ZSgmZmxhZ192YWxfbWFwLCBvZmZzZXQgKyAyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcF9lcnIofGVycnwgZm9ybWF0ISgiZmFpbGVkIHRvIGdldCBmbGFnOiB7ZXJyfSIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSA9PiBFcnIoIm5vIGNvbnRleHQgZm91bmQgZm9yIHBhY2thZ2UgJ2NvbS5hbmRyb2lkLmFjb25maWcudGVzdCciLnRvX3N0cmluZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2chKExldmVsOjpFcnJvciwgIm5vIGNvbnRleHQgZm91bmQgZm9yIHBhY2thZ2UgY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycihmb3JtYXQhKCJmYWlsZWQgdG8gZmxhZyBwYWNrYWdlIGNvbS5hbmRyb2lkLmFjb25maWcudGVzdCIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgICB9KTsKQEAgLTM1MCw2NSArNDA1LDE0IEBACiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgRXJyKGVycikgPT4gewogICAgICAgICAgICAgICAgIGxvZyEoTGV2ZWw6OkVycm9yLCAiYWNvbmZpZ19ydXN0X2NvZGVnZW46IGVycm9yOiB7ZXJyfSIpOwotICAgICAgICAgICAgICAgIHBhbmljISgiZmFpbGVkIHRvIHJlYWQgZmxhZyB2YWx1ZToge2Vycn0iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmbGFnc19ydXN0OjpHZXRTZXJ2ZXJDb25maWd1cmFibGVGbGFnKAotICAgICAgICAgICAgImFjb25maWdfZmxhZ3MuYWNvbmZpZ190ZXN0IiwKLSAgICAgICAgICAgICJjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QuZGlzYWJsZWRfcndfZXhwb3J0ZWQiLAotICAgICAgICAgICAgImZhbHNlIikgPT0gInRydWUiCi0gICAgfQotfSk7Ci0KLS8vLyBmbGFnIHZhbHVlIGNhY2hlIGZvciBkaXNhYmxlZF9yd19pbl9vdGhlcl9uYW1lc3BhY2UKLXN0YXRpYyBDQUNIRURfZGlzYWJsZWRfcndfaW5fb3RoZXJfbmFtZXNwYWNlOiBMYXp5TG9jazxib29sPiA9IExhenlMb2NrOjpuZXcofHwgewotICAgIGlmICpSRUFEX0ZST01fTkVXX1NUT1JBR0UgewotICAgICAgICAvLyBUaGlzIHdpbGwgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLiBTdWJzZXF1ZW50IGNhbGxzIGFmdGVyIHRoZSBmaXJzdCBhcmUgbm9vcHMuCi0gICAgICAgIGxvZ2dlcjo6aW5pdCgKLSAgICAgICAgICAgIGxvZ2dlcjo6Q29uZmlnOjpkZWZhdWx0KCkKLSAgICAgICAgICAgICAgICAud2l0aF90YWdfb25fZGV2aWNlKCJhY29uZmlnX3J1c3RfY29kZWdlbiIpCi0gICAgICAgICAgICAgICAgLndpdGhfbWF4X2xldmVsKExldmVsRmlsdGVyOjpJbmZvKSk7Ci0KLSAgICAgICAgbGV0IGZsYWdfdmFsdWVfcmVzdWx0ID0gRkxBR19WQUxfTUFQCi0gICAgICAgICAgICAuYXNfcmVmKCkKLSAgICAgICAgICAgIC5tYXBfZXJyKHxlcnJ8IGZvcm1hdCEoImZhaWxlZCB0byBnZXQgZmxhZyB2YWwgbWFwOiB7ZXJyfSIpKQotICAgICAgICAgICAgLmFuZF90aGVuKHxmbGFnX3ZhbF9tYXB8IHsKLSAgICAgICAgICAgICAgICBQQUNLQUdFX09GRlNFVAotICAgICAgICAgICAgICAgICAgICAuYXNfcmVmKCkKLSAgICAgICAgICAgICAgICAgICAgLm1hcF9lcnIofGVycnwgZm9ybWF0ISgiZmFpbGVkIHRvIGdldCBwYWNrYWdlIHJlYWQgb2Zmc2V0OiB7ZXJyfSIpKQotICAgICAgICAgICAgICAgICAgICAuYW5kX3RoZW4ofHBhY2thZ2Vfb2Zmc2V0fCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCBwYWNrYWdlX29mZnNldCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU29tZShvZmZzZXQpID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2Jvb2xlYW5fZmxhZ192YWx1ZSgmZmxhZ192YWxfbWFwLCBvZmZzZXQgKyAzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcF9lcnIofGVycnwgZm9ybWF0ISgiZmFpbGVkIHRvIGdldCBmbGFnOiB7ZXJyfSIpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSA9PiBFcnIoIm5vIGNvbnRleHQgZm91bmQgZm9yIHBhY2thZ2UgJ2NvbS5hbmRyb2lkLmFjb25maWcudGVzdCciLnRvX3N0cmluZygpKQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9KQotICAgICAgICAgICAgICAgIH0pOwotCi0gICAgICAgIG1hdGNoIGZsYWdfdmFsdWVfcmVzdWx0IHsKLSAgICAgICAgICAgIE9rKGZsYWdfdmFsdWUpID0+IHsKLSAgICAgICAgICAgICAgICAgcmV0dXJuIGZsYWdfdmFsdWU7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgRXJyKGVycikgPT4gewotICAgICAgICAgICAgICAgIGxvZyEoTGV2ZWw6OkVycm9yLCAiYWNvbmZpZ19ydXN0X2NvZGVnZW46IGVycm9yOiB7ZXJyfSIpOwotICAgICAgICAgICAgICAgIHBhbmljISgiZmFpbGVkIHRvIHJlYWQgZmxhZyB2YWx1ZToge2Vycn0iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZsYWdzX3J1c3Q6OkdldFNlcnZlckNvbmZpZ3VyYWJsZUZsYWcoCi0gICAgICAgICAgICAiYWNvbmZpZ19mbGFncy5vdGhlcl9uYW1lc3BhY2UiLAotICAgICAgICAgICAgImNvbS5hbmRyb2lkLmFjb25maWcudGVzdC5kaXNhYmxlZF9yd19pbl9vdGhlcl9uYW1lc3BhY2UiLAotICAgICAgICAgICAgImZhbHNlIikgPT0gInRydWUiCi0gICAgfQogfSk7CiAKIAogLy8vIGZsYWcgdmFsdWUgY2FjaGUgZm9yIGVuYWJsZWRfcncKIHN0YXRpYyBDQUNIRURfZW5hYmxlZF9ydzogTGF6eUxvY2s8Ym9vbD4gPSBMYXp5TG9jazo6bmV3KHx8IHsKLSAgICBpZiAqUkVBRF9GUk9NX05FV19TVE9SQUdFIHsKICAgICAgICAgLy8gVGhpcyB3aWxsIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4gU3Vic2VxdWVudCBjYWxscyBhZnRlciB0aGUgZmlyc3QgYXJlIG5vb3BzLgogICAgICAgICBsb2dnZXI6OmluaXQoCiAgICAgICAgICAgICBsb2dnZXI6OkNvbmZpZzo6ZGVmYXVsdCgpCkBAIC00MjUsMTAgKzQyOSwxMyBAQAogICAgICAgICAgICAgICAgICAgICAuYW5kX3RoZW4ofHBhY2thZ2Vfb2Zmc2V0fCB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCBwYWNrYWdlX29mZnNldCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29tZShvZmZzZXQpID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2Jvb2xlYW5fZmxhZ192YWx1ZSgmZmxhZ192YWxfbWFwLCBvZmZzZXQgKyA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfYm9vbGVhbl9mbGFnX3ZhbHVlKCZmbGFnX3ZhbF9tYXAsIG9mZnNldCArIDcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwX2Vycih8ZXJyfCBmb3JtYXQhKCJmYWlsZWQgdG8gZ2V0IGZsYWc6IHtlcnJ9IikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lID0+IEVycigibm8gY29udGV4dCBmb3VuZCBmb3IgcGFja2FnZSAnY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0JyIudG9fc3RyaW5nKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyEoTGV2ZWw6OkVycm9yLCAibm8gY29udGV4dCBmb3VuZCBmb3IgcGFja2FnZSBjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXJyKGZvcm1hdCEoImZhaWxlZCB0byBmbGFnIHBhY2thZ2UgY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0IikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgIH0pOwpAQCAtNDM5LDE1ICs0NDYsOSBAQAogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIEVycihlcnIpID0+IHsKICAgICAgICAgICAgICAgICBsb2chKExldmVsOjpFcnJvciwgImFjb25maWdfcnVzdF9jb2RlZ2VuOiBlcnJvcjoge2Vycn0iKTsKLSAgICAgICAgICAgICAgICBwYW5pYyEoImZhaWxlZCB0byByZWFkIGZsYWcgdmFsdWU6IHtlcnJ9Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmbGFnc19ydXN0OjpHZXRTZXJ2ZXJDb25maWd1cmFibGVGbGFnKAotICAgICAgICAgICAgImFjb25maWdfZmxhZ3MuYWNvbmZpZ190ZXN0IiwKLSAgICAgICAgICAgICJjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QuZW5hYmxlZF9ydyIsCi0gICAgICAgICAgICAidHJ1ZSIpID09ICJ0cnVlIgotICAgIH0KIH0pOwogCiBpbXBsIEZsYWdQcm92aWRlciB7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL2NvbW1hbmRzLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9jb21tYW5kcy5ycwppbmRleCA3OTdhODkzLi41MDM2YmMxIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL2NvbW1hbmRzLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29tbWFuZHMucnMKQEAgLTE3LDcgKzE3LDcgQEAKIHVzZSBhbnlob3c6OntiYWlsLCBlbnN1cmUsIENvbnRleHQsIFJlc3VsdH07CiB1c2UgaXRlcnRvb2xzOjpJdGVydG9vbHM7CiB1c2UgcHJvdG9idWY6Ok1lc3NhZ2U7Ci11c2Ugc3RkOjpjb2xsZWN0aW9uczo6e0JUcmVlTWFwLCBIYXNoTWFwfTsKK3VzZSBzdGQ6OmNvbGxlY3Rpb25zOjpIYXNoTWFwOwogdXNlIHN0ZDo6aGFzaDo6SGFzaGVyOwogdXNlIHN0ZDo6aW86OlJlYWQ7CiB1c2Ugc3RkOjpwYXRoOjpQYXRoQnVmOwpAQCAtNjksNiArNjksNyBAQAogICAgIGRlY2xhcmF0aW9uczogVmVjPElucHV0PiwKICAgICB2YWx1ZXM6IFZlYzxJbnB1dD4sCiAgICAgZGVmYXVsdF9wZXJtaXNzaW9uOiBQcm90b0ZsYWdQZXJtaXNzaW9uLAorICAgIGFsbG93X3JlYWRfd3JpdGU6IGJvb2wsCiApIC0+IFJlc3VsdDxWZWM8dTg+PiB7CiAgICAgbGV0IG11dCBwYXJzZWRfZmxhZ3MgPSBQcm90b1BhcnNlZEZsYWdzOjpuZXcoKTsKIApAQCAtMTk1LDYgKzE5NiwxNiBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgIWFsbG93X3JlYWRfd3JpdGUgeworICAgICAgICBpZiBsZXQgU29tZShwZikgPSBwYXJzZWRfZmxhZ3MKKyAgICAgICAgICAgIC5wYXJzZWRfZmxhZworICAgICAgICAgICAgLml0ZXIoKQorICAgICAgICAgICAgLmZpbmQofHBmfCBwZi5wZXJtaXNzaW9uKCkgPT0gUHJvdG9GbGFnUGVybWlzc2lvbjo6UkVBRF9XUklURSkKKyAgICAgICAgeworICAgICAgICAgICAgYmFpbCEoImZsYWcge30gaGFzIHBlcm1pc3Npb24gUkVBRF9XUklURSwgYnV0IGFsbG93X3JlYWRfd3JpdGUgaXMgZmFsc2UiLCBwZi5uYW1lKCkpOworICAgICAgICB9CisgICAgfQorCiAgICAgLy8gQ3JlYXRlIGEgc29ydGVkIHBhcnNlZF9mbGFncwogICAgIGFjb25maWdfcHJvdG9zOjpwYXJzZWRfZmxhZ3M6OnNvcnRfcGFyc2VkX2ZsYWdzKCZtdXQgcGFyc2VkX2ZsYWdzKTsKICAgICBhY29uZmlnX3Byb3Rvczo6cGFyc2VkX2ZsYWdzOjp2ZXJpZnlfZmllbGRzKCZwYXJzZWRfZmxhZ3MpPzsKQEAgLTIxNCw2ICsyMjUsOSBAQAogICAgICAgICBiYWlsISgibm8gcGFyc2VkIGZsYWdzLCBvciB0aGUgcGFyc2VkIGZsYWdzIHVzZSBkaWZmZXJlbnQgcGFja2FnZXMiKTsKICAgICB9OwogICAgIGxldCBwYWNrYWdlID0gcGFja2FnZS50b19zdHJpbmcoKTsKKyAgICBsZXQgbXV0IGZsYWdfbmFtZXMgPQorICAgICAgICBtb2RpZmllZF9wYXJzZWRfZmxhZ3MuaXRlcigpLm1hcCh8cGZ8IHBmLm5hbWUoKS50b19zdHJpbmcoKSkuY29sbGVjdDo6PFZlYzxfPj4oKTsKKyAgICBsZXQgcGFja2FnZV9maW5nZXJwcmludCA9IGNvbXB1dGVfZmxhZ3NfZmluZ2VycHJpbnQoJm11dCBmbGFnX25hbWVzKTsKICAgICBsZXQgZmxhZ19pZHMgPSBhc3NpZ25fZmxhZ19pZHMoJnBhY2thZ2UsIG1vZGlmaWVkX3BhcnNlZF9mbGFncy5pdGVyKCkpPzsKICAgICBnZW5lcmF0ZV9qYXZhX2NvZGUoCiAgICAgICAgICZwYWNrYWdlLApAQCAtMjIxLDYgKzIzNSw3IEBACiAgICAgICAgIGNvZGVnZW5fbW9kZSwKICAgICAgICAgZmxhZ19pZHMsCiAgICAgICAgIGFsbG93X2luc3RydW1lbnRhdGlvbiwKKyAgICAgICAgcGFja2FnZV9maW5nZXJwcmludCwKICAgICApCiB9CiAKQEAgLTI4MCwxMCArMjk1LDExIEBACiAgICAgY2FjaGVzOiBWZWM8SW5wdXQ+LAogICAgIGNvbnRhaW5lcjogJnN0ciwKICAgICBmaWxlOiAmU3RvcmFnZUZpbGVUeXBlLAorICAgIHZlcnNpb246IHUzMiwKICkgLT4gUmVzdWx0PFZlYzx1OD4+IHsKICAgICBsZXQgcGFyc2VkX2ZsYWdzX3ZlYzogVmVjPFByb3RvUGFyc2VkRmxhZ3M+ID0KICAgICAgICAgY2FjaGVzLmludG9faXRlcigpLm1hcCh8bXV0IGlucHV0fCBpbnB1dC50cnlfcGFyc2VfZmxhZ3MoKSkuY29sbGVjdDo6PFJlc3VsdDxWZWM8Xz4+PigpPzsKLSAgICBnZW5lcmF0ZV9zdG9yYWdlX2ZpbGUoY29udGFpbmVyLCBwYXJzZWRfZmxhZ3NfdmVjLml0ZXIoKSwgZmlsZSkKKyAgICBnZW5lcmF0ZV9zdG9yYWdlX2ZpbGUoY29udGFpbmVyLCBwYXJzZWRfZmxhZ3NfdmVjLml0ZXIoKSwgZmlsZSwgdmVyc2lvbikKIH0KIAogcHViIGZuIGNyZWF0ZV9kZXZpY2VfY29uZmlnX2RlZmF1bHRzKG11dCBpbnB1dDogSW5wdXQpIC0+IFJlc3VsdDxWZWM8dTg+PiB7CkBAIC00MDcsMzggKzQyMyw2MCBAQAogewogICAgIGFzc2VydCEocGFyc2VkX2ZsYWdzX2l0ZXIuY2xvbmUoKS50dXBsZV93aW5kb3dzKCkuYWxsKHwoYSwgYil8IGEubmFtZSgpIDw9IGIubmFtZSgpKSk7CiAgICAgbGV0IG11dCBmbGFnX2lkcyA9IEhhc2hNYXA6Om5ldygpOwotICAgIGZvciAoaWRfdG9fYXNzaWduLCBwZikgaW4gKDBfdTMyLi4pLnppcChwYXJzZWRfZmxhZ3NfaXRlcikgeworICAgIGxldCBtdXQgZmxhZ19pZHggPSAwOworICAgIGZvciBwZiBpbiBwYXJzZWRfZmxhZ3NfaXRlciB7CiAgICAgICAgIGlmIHBhY2thZ2UgIT0gcGYucGFja2FnZSgpIHsKICAgICAgICAgICAgIHJldHVybiBFcnIoYW55aG93Ojphbnlob3chKCJlbmNvdW50ZXJlZCBhIGZsYWcgbm90IGluIGN1cnJlbnQgcGFja2FnZSIpKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIHB1dCBhIGNhcCBvbiBob3cgbWFueSBmbGFncyBhIHBhY2thZ2UgY2FuIGNvbnRhaW4gdG8gNjU1MzUKLSAgICAgICAgaWYgaWRfdG9fYXNzaWduID4gdTE2OjpNQVggYXMgdTMyIHsKKyAgICAgICAgaWYgZmxhZ19pZHggPiB1MTY6Ok1BWCBhcyB1MzIgewogICAgICAgICAgICAgcmV0dXJuIEVycihhbnlob3c6OmFueWhvdyEoInRoZSBudW1iZXIgb2YgZmxhZ3MgaW4gYSBwYWNrYWdlIGNhbm5vdCBleGNlZWQgNjU1MzUiKSk7CiAgICAgICAgIH0KIAotICAgICAgICBmbGFnX2lkcy5pbnNlcnQocGYubmFtZSgpLnRvX3N0cmluZygpLCBpZF90b19hc3NpZ24gYXMgdTE2KTsKKyAgICAgICAgLy8gRXhjbHVkZSBzeXN0ZW0vdmVuZG9yL3Byb2R1Y3QgZmxhZ3MgdGhhdCBhcmUgUk8rZGlzYWJsZWQuCisgICAgICAgIGxldCBzaG91bGRfZmlsdGVyX2NvbnRhaW5lciA9IHBmLmNvbnRhaW5lciA9PSBTb21lKCJ2ZW5kb3IiLnRvX3N0cmluZygpKQorICAgICAgICAgICAgfHwgcGYuY29udGFpbmVyID09IFNvbWUoInN5c3RlbSIudG9fc3RyaW5nKCkpCisgICAgICAgICAgICB8fCBwZi5jb250YWluZXIgPT0gU29tZSgicHJvZHVjdCIudG9fc3RyaW5nKCkpOworICAgICAgICBpZiAhKHNob3VsZF9maWx0ZXJfY29udGFpbmVyCisgICAgICAgICAgICAmJiBwZi5zdGF0ZSA9PSBTb21lKFByb3RvRmxhZ1N0YXRlOjpESVNBQkxFRC5pbnRvKCkpCisgICAgICAgICAgICAmJiBwZi5wZXJtaXNzaW9uID09IFNvbWUoUHJvdG9GbGFnUGVybWlzc2lvbjo6UkVBRF9PTkxZLmludG8oKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsYWdfaWRzLmluc2VydChwZi5uYW1lKCkudG9fc3RyaW5nKCksIGZsYWdfaWR4IGFzIHUxNik7CisgICAgICAgICAgICBmbGFnX2lkeCArPSAxOworICAgICAgICB9CiAgICAgfQogICAgIE9rKGZsYWdfaWRzKQogfQogCiAjW2FsbG93KGRlYWRfY29kZSldIC8vIFRPRE86IGIvMzE2MzU3Njg2IC0gVXNlIGZpbmdlcnByaW50IGluIGNvZGVnZW4gdG8KICAgICAgICAgICAgICAgICAgICAgLy8gcHJvdGVjdCBoYXJkY29kZWQgb2Zmc2V0IHJlYWRzLgotcHViIGZuIGNvbXB1dGVfZmxhZ19vZmZzZXRzX2ZpbmdlcnByaW50KGZsYWdzX21hcDogJkhhc2hNYXA8U3RyaW5nLCB1MTY+KSAtPiBSZXN1bHQ8dTY0PiB7CisgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZXMgYSBmaW5nZXJwcmludCBvZiB0aGUgZmxhZyBuYW1lcyAod2hpY2ggcmVxdWlyZXMgc29ydGluZyB0aGUgdmVjdG9yKS4KKyAgICAgICAgICAgICAgICAgICAgLy8gRmluZ2VycHJpbnQgaXMgdXNlZCBieSBib3RoIGNvZGVnZW4gYW5kIHN0b3JhZ2UgZmlsZXMuCitwdWIgZm4gY29tcHV0ZV9mbGFnc19maW5nZXJwcmludChmbGFnX25hbWVzOiAmbXV0IFZlYzxTdHJpbmc+KSAtPiB1NjQgeworICAgIGZsYWdfbmFtZXMuc29ydCgpOworCiAgICAgbGV0IG11dCBoYXNoZXIgPSBTaXBIYXNoZXIxMzo6bmV3KCk7Ci0KLSAgICAvLyBOZWVkIHRvIHNvcnQgdG8gZW5zdXJlIHRoZSBkYXRhIGlzIGFkZGVkIHRvIHRoZSBoYXNoZXIgaW4gdGhlIHNhbWUgb3JkZXIKLSAgICAvLyBlYWNoIHJ1bi4KLSAgICBsZXQgc29ydGVkX21hcDogQlRyZWVNYXA8JlN0cmluZywgJnUxNj4gPSBmbGFnc19tYXAuaXRlcigpLmNvbGxlY3QoKTsKLQotICAgIGZvciAoZmxhZywgb2Zmc2V0KSBpbiBzb3J0ZWRfbWFwIHsKLSAgICAgICAgLy8gU2VlIGh0dHBzOi8vZG9jcy5ycy9zaXBoYXNoZXIvbGF0ZXN0L3NpcGhhc2hlci8jbm90ZSBmb3IgdXNlIG9mIHdyaXRlCi0gICAgICAgIC8vIG92ZXIgd3JpdGVfaTE2LiBTaW1pbGFybHksIHVzZSB0b19iZV9ieXRlcyByYXRoZXIgdGhhbiB0b19uZV9ieXRlcyB0bwotICAgICAgICAvLyBlbnN1cmUgY29uc2lzdGVuY3kuCisgICAgZm9yIGZsYWcgaW4gZmxhZ19uYW1lcyB7CiAgICAgICAgIGhhc2hlci53cml0ZShmbGFnLmFzX2J5dGVzKCkpOwotICAgICAgICBoYXNoZXIud3JpdGUoJm9mZnNldC50b19iZV9ieXRlcygpKTsKICAgICB9Ci0gICAgT2soaGFzaGVyLmZpbmlzaCgpKQorICAgIGhhc2hlci5maW5pc2goKQorfQorCisjW2FsbG93KGRlYWRfY29kZSldIC8vIFRPRE86IGIvMzE2MzU3Njg2IC0gVXNlIGZpbmdlcnByaW50IGluIGNvZGVnZW4gdG8KKyAgICAgICAgICAgICAgICAgICAgLy8gcHJvdGVjdCBoYXJkY29kZWQgb2Zmc2V0IHJlYWRzLgorICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0cyBQcm90b1BhcnNlZEZsYWdzIGludG8gYSB2ZWN0b3Igb2Ygc3RyaW5ncyBjb250YWluaW5nIGFsbCBvZiB0aGUgZmxhZworICAgICAgICAgICAgICAgICAgICAvLyBuYW1lcy4gSGVscGVyIGZuIGZvciBjcmVhdGluZyBmaW5nZXJwcmludCBmb3IgY29kZWdlbiBmaWxlcy4gRmxhZ3MgbXVzdCBhbGwKKyAgICAgICAgICAgICAgICAgICAgLy8gYmVsb25nIHRvIHRoZSBzYW1lIHBhY2thZ2UuCitmbiBleHRyYWN0X2ZsYWdfbmFtZXMoZmxhZ3M6IFByb3RvUGFyc2VkRmxhZ3MpIC0+IFJlc3VsdDxWZWM8U3RyaW5nPj4geworICAgIGxldCBzZXBhcmF0ZWRfZmxhZ3M6IFZlYzxQcm90b1BhcnNlZEZsYWc+ID0gZmxhZ3MucGFyc2VkX2ZsYWcuaW50b19pdGVyKCkuY29sbGVjdDo6PFZlYzxfPj4oKTsKKworICAgIC8vIEFsbCBmbGFncyBtdXN0IGJlbG9uZyB0byB0aGUgc2FtZSBwYWNrYWdlIGFzIHRoZSBmaW5nZXJwcmludCBpcyBwZXItcGFja2FnZS4KKyAgICBsZXQgU29tZShfcGFja2FnZSkgPSBmaW5kX3VuaXF1ZV9wYWNrYWdlKCZzZXBhcmF0ZWRfZmxhZ3MpIGVsc2UgeworICAgICAgICBiYWlsISgiTm8gcGFyc2VkIGZsYWdzLCBvciB0aGUgcGFyc2VkIGZsYWdzIHVzZSBkaWZmZXJlbnQgcGFja2FnZXMuIik7CisgICAgfTsKKworICAgIE9rKHNlcGFyYXRlZF9mbGFncy5pbnRvX2l0ZXIoKS5tYXAofGZsYWd8IGZsYWcubmFtZS51bndyYXAoKSkuY29sbGVjdDo6PFZlYzxfPj4oKSkKIH0KIAogI1tjZmcodGVzdCldCkBAIC00NDksMTMgKzQ4Nyw0OCBAQAogICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X29mZnNldF9maW5nZXJwcmludCgpIHsKICAgICAgICAgbGV0IHBhcnNlZF9mbGFncyA9IGNyYXRlOjp0ZXN0OjpwYXJzZV90ZXN0X2ZsYWdzKCk7Ci0gICAgICAgIGxldCBwYWNrYWdlID0gZmluZF91bmlxdWVfcGFja2FnZSgmcGFyc2VkX2ZsYWdzLnBhcnNlZF9mbGFnKS51bndyYXAoKS50b19zdHJpbmcoKTsKLSAgICAgICAgbGV0IGZsYWdfaWRzID0gYXNzaWduX2ZsYWdfaWRzKCZwYWNrYWdlLCBwYXJzZWRfZmxhZ3MucGFyc2VkX2ZsYWcuaXRlcigpKS51bndyYXAoKTsKLSAgICAgICAgbGV0IGV4cGVjdGVkX2ZpbmdlcnByaW50ID0gMTA3MDk4OTI0ODEwMDIyNTIxMzJ1NjQ7CisgICAgICAgIGxldCBleHBlY3RlZF9maW5nZXJwcmludDogdTY0ID0gNTgwMTE0NDc4NDYxODIyMTY2ODsKIAotICAgICAgICBsZXQgaGFzaF9yZXN1bHQgPSBjb21wdXRlX2ZsYWdfb2Zmc2V0c19maW5nZXJwcmludCgmZmxhZ19pZHMpOworICAgICAgICBsZXQgbXV0IGV4dHJhY3RlZF9mbGFncyA9IGV4dHJhY3RfZmxhZ19uYW1lcyhwYXJzZWRfZmxhZ3MpLnVud3JhcCgpOworICAgICAgICBsZXQgaGFzaF9yZXN1bHQgPSBjb21wdXRlX2ZsYWdzX2ZpbmdlcnByaW50KCZtdXQgZXh0cmFjdGVkX2ZsYWdzKTsKIAotICAgICAgICBhc3NlcnRfZXEhKGhhc2hfcmVzdWx0LnVud3JhcCgpLCBleHBlY3RlZF9maW5nZXJwcmludCk7CisgICAgICAgIGFzc2VydF9lcSEoaGFzaF9yZXN1bHQsIGV4cGVjdGVkX2ZpbmdlcnByaW50KTsKKyAgICB9CisKKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9vZmZzZXRfZmluZ2VycHJpbnRfbWF0Y2hlc19mcm9tX3BhY2thZ2UoKSB7CisgICAgICAgIGxldCBwYXJzZWRfZmxhZ3M6IFByb3RvUGFyc2VkRmxhZ3MgPSBjcmF0ZTo6dGVzdDo6cGFyc2VfdGVzdF9mbGFncygpOworCisgICAgICAgIC8vIEFsbCB0ZXN0IGZsYWdzIGFyZSBpbiB0aGUgc2FtZSBwYWNrYWdlLCBzbyBmaW5nZXJwcmludCBmcm9tIGFsbCBvZiB0aGVtLgorICAgICAgICBsZXQgbXV0IGV4dHJhY3RlZF9mbGFncyA9IGV4dHJhY3RfZmxhZ19uYW1lcyhwYXJzZWRfZmxhZ3MuY2xvbmUoKSkudW53cmFwKCk7CisgICAgICAgIGxldCByZXN1bHRfZnJvbV9wYXJzZWRfZmxhZ3MgPSBjb21wdXRlX2ZsYWdzX2ZpbmdlcnByaW50KCZtdXQgZXh0cmFjdGVkX2ZsYWdzKTsKKworICAgICAgICBsZXQgbXV0IGZsYWdfbmFtZXNfdmVjID0gcGFyc2VkX2ZsYWdzCisgICAgICAgICAgICAucGFyc2VkX2ZsYWcKKyAgICAgICAgICAgIC5jbG9uZSgpCisgICAgICAgICAgICAuaW50b19pdGVyKCkKKyAgICAgICAgICAgIC5tYXAofGZsYWd8IGZsYWcubmFtZS51bndyYXAoKSkKKyAgICAgICAgICAgIC5tYXAoU3RyaW5nOjpmcm9tKQorICAgICAgICAgICAgLmNvbGxlY3Q6OjxWZWM8Xz4+KCk7CisgICAgICAgIGxldCByZXN1bHRfZnJvbV9uYW1lcyA9IGNvbXB1dGVfZmxhZ3NfZmluZ2VycHJpbnQoJm11dCBmbGFnX25hbWVzX3ZlYyk7CisKKyAgICAgICAgLy8gQXNzZXJ0IHRoZSBzYW1lIGhhc2ggaXMgZ2VuZXJhdGVkIGZvciBlYWNoIGNhc2UuCisgICAgICAgIGFzc2VydF9lcSEocmVzdWx0X2Zyb21fcGFyc2VkX2ZsYWdzLCByZXN1bHRfZnJvbV9uYW1lcyk7CisgICAgfQorCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3Rfb2Zmc2V0X2ZpbmdlcnByaW50X2RpZmZlcmVudF9wYWNrYWdlc19kb2VzX25vdF9tYXRjaCgpIHsKKyAgICAgICAgLy8gUGFyc2UgZmxhZ3MgZnJvbSB0d28gcGFja2FnZXMuCisgICAgICAgIGxldCBwYXJzZWRfZmxhZ3M6IFByb3RvUGFyc2VkRmxhZ3MgPSBjcmF0ZTo6dGVzdDo6cGFyc2VfdGVzdF9mbGFncygpOworICAgICAgICBsZXQgc2Vjb25kX3BhcnNlZF9mbGFncyA9IGNyYXRlOjp0ZXN0OjpwYXJzZV9zZWNvbmRfcGFja2FnZV9mbGFncygpOworCisgICAgICAgIGxldCBtdXQgZXh0cmFjdGVkX2ZsYWdzID0gZXh0cmFjdF9mbGFnX25hbWVzKHBhcnNlZF9mbGFncykudW53cmFwKCk7CisgICAgICAgIGxldCByZXN1bHRfZnJvbV9wYXJzZWRfZmxhZ3MgPSBjb21wdXRlX2ZsYWdzX2ZpbmdlcnByaW50KCZtdXQgZXh0cmFjdGVkX2ZsYWdzKTsKKyAgICAgICAgbGV0IG11dCBzZWNvbmRfZXh0cmFjdGVkX2ZsYWdzID0gZXh0cmFjdF9mbGFnX25hbWVzKHNlY29uZF9wYXJzZWRfZmxhZ3MpLnVud3JhcCgpOworICAgICAgICBsZXQgc2Vjb25kX3Jlc3VsdCA9IGNvbXB1dGVfZmxhZ3NfZmluZ2VycHJpbnQoJm11dCBzZWNvbmRfZXh0cmFjdGVkX2ZsYWdzKTsKKworICAgICAgICAvLyBEaWZmZXJlbnQgZmxhZ3Mgc2hvdWxkIGhhdmUgYSBkaWZmZXJlbnQgZmluZ2VycHJpbnQuCisgICAgICAgIGFzc2VydF9uZSEocmVzdWx0X2Zyb21fcGFyc2VkX2ZsYWdzLCBzZWNvbmRfcmVzdWx0KTsKICAgICB9CiAKICAgICAjW3Rlc3RdCkBAIC01MjksNiArNjAyLDcgQEAKICAgICAgICAgICAgIGRlY2xhcmF0aW9uLAogICAgICAgICAgICAgdmFsdWUsCiAgICAgICAgICAgICBQcm90b0ZsYWdQZXJtaXNzaW9uOjpSRUFEX09OTFksCisgICAgICAgICAgICB0cnVlLAogICAgICAgICApCiAgICAgICAgIC51bndyYXAoKTsKICAgICAgICAgbGV0IHBhcnNlZF9mbGFncyA9CkBAIC01NjIsNiArNjM2LDcgQEAKICAgICAgICAgICAgIGRlY2xhcmF0aW9uLAogICAgICAgICAgICAgdmFsdWUsCiAgICAgICAgICAgICBQcm90b0ZsYWdQZXJtaXNzaW9uOjpSRUFEX1dSSVRFLAorICAgICAgICAgICAgdHJ1ZSwKICAgICAgICAgKQogICAgICAgICAudW53cmFwX2VycigpOwogICAgICAgICBhc3NlcnRfZXEhKApAQCAtNTkzLDYgKzY2OCw3IEBACiAgICAgICAgICAgICBkZWNsYXJhdGlvbiwKICAgICAgICAgICAgIHZhbHVlLAogICAgICAgICAgICAgUHJvdG9GbGFnUGVybWlzc2lvbjo6UkVBRF9XUklURSwKKyAgICAgICAgICAgIHRydWUsCiAgICAgICAgICkKICAgICAgICAgLnVud3JhcF9lcnIoKTsKICAgICAgICAgYXNzZXJ0X2VxISgKQEAgLTYwMCw2ICs2NzYsMTIxIEBACiAgICAgICAgICAgICAiZmFpbGVkIHRvIHBhcnNlIG1lbW9yeTogZXhwZWN0ZWQgY29udGFpbmVyIGFyZ3VtZW50LmNvbnRhaW5lciwgZ290IGRlY2xhcmF0aW9uLmNvbnRhaW5lciIKICAgICAgICAgKTsKICAgICB9CisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfcGFyc2VfZmxhZ3Nfbm9fYWxsb3dfcmVhZF93cml0ZV9kZWZhdWx0X2Vycm9yKCkgeworICAgICAgICBsZXQgZmlyc3RfZmxhZyA9IHIjIgorICAgICAgICBwYWNrYWdlOiAiY29tLmZpcnN0IgorICAgICAgICBjb250YWluZXI6ICJjb20uZmlyc3QuY29udGFpbmVyIgorICAgICAgICBmbGFnIHsKKyAgICAgICAgICAgIG5hbWU6ICJmaXJzdCIKKyAgICAgICAgICAgIG5hbWVzcGFjZTogImZpcnN0X25zIgorICAgICAgICAgICAgZGVzY3JpcHRpb246ICJUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZmlyc3QgZmxhZy4iCisgICAgICAgICAgICBidWc6ICIxMjMiCisgICAgICAgIH0KKyAgICAgICAgIiM7CisgICAgICAgIGxldCBkZWNsYXJhdGlvbiA9CisgICAgICAgICAgICB2ZWMhW0lucHV0IHsgc291cmNlOiAibWVtb3J5Ii50b19zdHJpbmcoKSwgcmVhZGVyOiBCb3g6Om5ldyhmaXJzdF9mbGFnLmFzX2J5dGVzKCkpIH1dOworCisgICAgICAgIGxldCBlcnJvciA9IGNyYXRlOjpjb21tYW5kczo6cGFyc2VfZmxhZ3MoCisgICAgICAgICAgICAiY29tLmZpcnN0IiwKKyAgICAgICAgICAgIFNvbWUoImNvbS5maXJzdC5jb250YWluZXIiKSwKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uLAorICAgICAgICAgICAgdmVjIVtdLAorICAgICAgICAgICAgUHJvdG9GbGFnUGVybWlzc2lvbjo6UkVBRF9XUklURSwKKyAgICAgICAgICAgIGZhbHNlLAorICAgICAgICApCisgICAgICAgIC51bndyYXBfZXJyKCk7CisgICAgICAgIGFzc2VydF9lcSEoCisgICAgICAgICAgICBmb3JtYXQhKCJ7Oj99IiwgZXJyb3IpLAorICAgICAgICAgICAgImZsYWcgZmlyc3QgaGFzIHBlcm1pc3Npb24gUkVBRF9XUklURSwgYnV0IGFsbG93X3JlYWRfd3JpdGUgaXMgZmFsc2UiCisgICAgICAgICk7CisgICAgfQorCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfcGFyc2VfZmxhZ3Nfbm9fYWxsb3dfcmVhZF93cml0ZV92YWx1ZV9lcnJvcigpIHsKKyAgICAgICAgbGV0IGZpcnN0X2ZsYWcgPSByIyIKKyAgICAgICAgcGFja2FnZTogImNvbS5maXJzdCIKKyAgICAgICAgY29udGFpbmVyOiAiY29tLmZpcnN0LmNvbnRhaW5lciIKKyAgICAgICAgZmxhZyB7CisgICAgICAgICAgICBuYW1lOiAiZmlyc3QiCisgICAgICAgICAgICBuYW1lc3BhY2U6ICJmaXJzdF9ucyIKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAiVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGZpcnN0IGZsYWcuIgorICAgICAgICAgICAgYnVnOiAiMTIzIgorICAgICAgICB9CisgICAgICAgICIjOworICAgICAgICBsZXQgZGVjbGFyYXRpb24gPQorICAgICAgICAgICAgdmVjIVtJbnB1dCB7IHNvdXJjZTogIm1lbW9yeSIudG9fc3RyaW5nKCksIHJlYWRlcjogQm94OjpuZXcoZmlyc3RfZmxhZy5hc19ieXRlcygpKSB9XTsKKworICAgICAgICBsZXQgZmlyc3RfZmxhZ192YWx1ZSA9IHIjIgorICAgICAgICBmbGFnX3ZhbHVlIHsKKyAgICAgICAgICAgIHBhY2thZ2U6ICJjb20uZmlyc3QiCisgICAgICAgICAgICBuYW1lOiAiZmlyc3QiCisgICAgICAgICAgICBzdGF0ZTogRElTQUJMRUQKKyAgICAgICAgICAgIHBlcm1pc3Npb246IFJFQURfV1JJVEUKKyAgICAgICAgfQorICAgICAgICAiIzsKKyAgICAgICAgbGV0IHZhbHVlID0gdmVjIVtJbnB1dCB7CisgICAgICAgICAgICBzb3VyY2U6ICJtZW1vcnkiLnRvX3N0cmluZygpLAorICAgICAgICAgICAgcmVhZGVyOiBCb3g6Om5ldyhmaXJzdF9mbGFnX3ZhbHVlLmFzX2J5dGVzKCkpLAorICAgICAgICB9XTsKKyAgICAgICAgbGV0IGVycm9yID0gY3JhdGU6OmNvbW1hbmRzOjpwYXJzZV9mbGFncygKKyAgICAgICAgICAgICJjb20uZmlyc3QiLAorICAgICAgICAgICAgU29tZSgiY29tLmZpcnN0LmNvbnRhaW5lciIpLAorICAgICAgICAgICAgZGVjbGFyYXRpb24sCisgICAgICAgICAgICB2YWx1ZSwKKyAgICAgICAgICAgIFByb3RvRmxhZ1Blcm1pc3Npb246OlJFQURfT05MWSwKKyAgICAgICAgICAgIGZhbHNlLAorICAgICAgICApCisgICAgICAgIC51bndyYXBfZXJyKCk7CisgICAgICAgIGFzc2VydF9lcSEoCisgICAgICAgICAgICBmb3JtYXQhKCJ7Oj99IiwgZXJyb3IpLAorICAgICAgICAgICAgImZsYWcgZmlyc3QgaGFzIHBlcm1pc3Npb24gUkVBRF9XUklURSwgYnV0IGFsbG93X3JlYWRfd3JpdGUgaXMgZmFsc2UiCisgICAgICAgICk7CisgICAgfQorCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfcGFyc2VfZmxhZ3Nfbm9fYWxsb3dfcmVhZF93cml0ZV9zdWNjZXNzKCkgeworICAgICAgICBsZXQgZmlyc3RfZmxhZyA9IHIjIgorICAgICAgICBwYWNrYWdlOiAiY29tLmZpcnN0IgorICAgICAgICBjb250YWluZXI6ICJjb20uZmlyc3QuY29udGFpbmVyIgorICAgICAgICBmbGFnIHsKKyAgICAgICAgICAgIG5hbWU6ICJmaXJzdCIKKyAgICAgICAgICAgIG5hbWVzcGFjZTogImZpcnN0X25zIgorICAgICAgICAgICAgZGVzY3JpcHRpb246ICJUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZmlyc3QgZmxhZy4iCisgICAgICAgICAgICBidWc6ICIxMjMiCisgICAgICAgIH0KKyAgICAgICAgIiM7CisgICAgICAgIGxldCBkZWNsYXJhdGlvbiA9CisgICAgICAgICAgICB2ZWMhW0lucHV0IHsgc291cmNlOiAibWVtb3J5Ii50b19zdHJpbmcoKSwgcmVhZGVyOiBCb3g6Om5ldyhmaXJzdF9mbGFnLmFzX2J5dGVzKCkpIH1dOworCisgICAgICAgIGxldCBmaXJzdF9mbGFnX3ZhbHVlID0gciMiCisgICAgICAgIGZsYWdfdmFsdWUgeworICAgICAgICAgICAgcGFja2FnZTogImNvbS5maXJzdCIKKyAgICAgICAgICAgIG5hbWU6ICJmaXJzdCIKKyAgICAgICAgICAgIHN0YXRlOiBESVNBQkxFRAorICAgICAgICAgICAgcGVybWlzc2lvbjogUkVBRF9PTkxZCisgICAgICAgIH0KKyAgICAgICAgIiM7CisgICAgICAgIGxldCB2YWx1ZSA9IHZlYyFbSW5wdXQgeworICAgICAgICAgICAgc291cmNlOiAibWVtb3J5Ii50b19zdHJpbmcoKSwKKyAgICAgICAgICAgIHJlYWRlcjogQm94OjpuZXcoZmlyc3RfZmxhZ192YWx1ZS5hc19ieXRlcygpKSwKKyAgICAgICAgfV07CisgICAgICAgIGxldCBmbGFnc19ieXRlcyA9IGNyYXRlOjpjb21tYW5kczo6cGFyc2VfZmxhZ3MoCisgICAgICAgICAgICAiY29tLmZpcnN0IiwKKyAgICAgICAgICAgIFNvbWUoImNvbS5maXJzdC5jb250YWluZXIiKSwKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uLAorICAgICAgICAgICAgdmFsdWUsCisgICAgICAgICAgICBQcm90b0ZsYWdQZXJtaXNzaW9uOjpSRUFEX09OTFksCisgICAgICAgICAgICBmYWxzZSwKKyAgICAgICAgKQorICAgICAgICAudW53cmFwKCk7CisgICAgICAgIGxldCBwYXJzZWRfZmxhZ3MgPQorICAgICAgICAgICAgYWNvbmZpZ19wcm90b3M6OnBhcnNlZF9mbGFnczo6dHJ5X2Zyb21fYmluYXJ5X3Byb3RvKCZmbGFnc19ieXRlcykudW53cmFwKCk7CisgICAgICAgIGFzc2VydF9lcSEoMSwgcGFyc2VkX2ZsYWdzLnBhcnNlZF9mbGFnLmxlbigpKTsKKyAgICAgICAgbGV0IHBhcnNlZF9mbGFnID0gcGFyc2VkX2ZsYWdzLnBhcnNlZF9mbGFnLmZpcnN0KCkudW53cmFwKCk7CisgICAgICAgIGFzc2VydF9lcSEoUHJvdG9GbGFnU3RhdGU6OkRJU0FCTEVELCBwYXJzZWRfZmxhZy5zdGF0ZSgpKTsKKyAgICAgICAgYXNzZXJ0X2VxIShQcm90b0ZsYWdQZXJtaXNzaW9uOjpSRUFEX09OTFksIHBhcnNlZF9mbGFnLnBlcm1pc3Npb24oKSk7CisgICAgfQogCiAgICAgI1t0ZXN0XQogICAgIGZuIHRlc3RfcGFyc2VfZmxhZ3Nfb3ZlcnJpZGVfZml4ZWRfcmVhZF9vbmx5KCkgewpAQCAtNjM1LDYgKzgyNiw3IEBACiAgICAgICAgICAgICBkZWNsYXJhdGlvbiwKICAgICAgICAgICAgIHZhbHVlLAogICAgICAgICAgICAgUHJvdG9GbGFnUGVybWlzc2lvbjo6UkVBRF9XUklURSwKKyAgICAgICAgICAgIHRydWUsCiAgICAgICAgICkKICAgICAgICAgLnVud3JhcF9lcnIoKTsKICAgICAgICAgYXNzZXJ0X2VxISgKQEAgLTY2OSw2ICs4NjEsNyBAQAogICAgICAgICAgICAgZGVjbGFyYXRpb24sCiAgICAgICAgICAgICB2YWx1ZSwKICAgICAgICAgICAgIFByb3RvRmxhZ1Blcm1pc3Npb246OlJFQURfT05MWSwKKyAgICAgICAgICAgIHRydWUsCiAgICAgICAgICkKICAgICAgICAgLnVud3JhcCgpOwogICAgICAgICBsZXQgcGFyc2VkX2ZsYWdzID0KQEAgLTcwOSw2ICs5MDIsMzAgQEAKICAgICB9CiAKICAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9kdW1wX211bHRpcGxlX2ZpbHRlcnMoKSB7CisgICAgICAgIGxldCBpbnB1dCA9IHBhcnNlX3Rlc3RfZmxhZ3NfYXNfaW5wdXQoKTsKKyAgICAgICAgbGV0IGJ5dGVzID0gZHVtcF9wYXJzZWRfZmxhZ3MoCisgICAgICAgICAgICB2ZWMhW2lucHV0XSwKKyAgICAgICAgICAgIER1bXBGb3JtYXQ6OkN1c3RvbSgie2Z1bGx5X3F1YWxpZmllZF9uYW1lfSIudG9fc3RyaW5nKCkpLAorICAgICAgICAgICAgJlsiY29udGFpbmVyOnN5c3RlbStzdGF0ZTpFTkFCTEVEIiwgImNvbnRhaW5lcjpzeXN0ZW0rcGVybWlzc2lvbjpSRUFEX1dSSVRFIl0sCisgICAgICAgICAgICBmYWxzZSwKKyAgICAgICAgKQorICAgICAgICAudW53cmFwKCk7CisgICAgICAgIGxldCB0ZXh0ID0gc3RkOjpzdHI6OmZyb21fdXRmOCgmYnl0ZXMpLnVud3JhcCgpOworICAgICAgICBsZXQgZXhwZWN0ZWRfZmxhZ19saXN0ID0gJlsKKyAgICAgICAgICAgICJjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QuZGlzYWJsZWRfcnciLAorICAgICAgICAgICAgImNvbS5hbmRyb2lkLmFjb25maWcudGVzdC5kaXNhYmxlZF9yd19leHBvcnRlZCIsCisgICAgICAgICAgICAiY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0LmRpc2FibGVkX3J3X2luX290aGVyX25hbWVzcGFjZSIsCisgICAgICAgICAgICAiY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0LmVuYWJsZWRfZml4ZWRfcm8iLAorICAgICAgICAgICAgImNvbS5hbmRyb2lkLmFjb25maWcudGVzdC5lbmFibGVkX2ZpeGVkX3JvX2V4cG9ydGVkIiwKKyAgICAgICAgICAgICJjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QuZW5hYmxlZF9ybyIsCisgICAgICAgICAgICAiY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0LmVuYWJsZWRfcm9fZXhwb3J0ZWQiLAorICAgICAgICAgICAgImNvbS5hbmRyb2lkLmFjb25maWcudGVzdC5lbmFibGVkX3J3IiwKKyAgICAgICAgXTsKKyAgICAgICAgYXNzZXJ0X2VxIShleHBlY3RlZF9mbGFnX2xpc3QubWFwKHxzfCBmb3JtYXQhKCJ7fVxuIiwgcykpLmpvaW4oIiIpLCB0ZXh0KTsKKyAgICB9CisKKyAgICAjW3Rlc3RdCiAgICAgZm4gdGVzdF9kdW1wX3RleHRwcm90b19mb3JtYXRfZGVkdXAoKSB7CiAgICAgICAgIGxldCBpbnB1dCA9IHBhcnNlX3Rlc3RfZmxhZ3NfYXNfaW5wdXQoKTsKICAgICAgICAgbGV0IGlucHV0MiA9IHBhcnNlX3Rlc3RfZmxhZ3NfYXNfaW5wdXQoKTsKQEAgLTc3MCwxNSArOTg3LDE0IEBACiAgICAgICAgIGxldCBwYWNrYWdlID0gZmluZF91bmlxdWVfcGFja2FnZSgmcGFyc2VkX2ZsYWdzLnBhcnNlZF9mbGFnKS51bndyYXAoKS50b19zdHJpbmcoKTsKICAgICAgICAgbGV0IGZsYWdfaWRzID0gYXNzaWduX2ZsYWdfaWRzKCZwYWNrYWdlLCBwYXJzZWRfZmxhZ3MucGFyc2VkX2ZsYWcuaXRlcigpKS51bndyYXAoKTsKICAgICAgICAgbGV0IGV4cGVjdGVkX2ZsYWdfaWRzID0gSGFzaE1hcDo6ZnJvbShbCi0gICAgICAgICAgICAoU3RyaW5nOjpmcm9tKCJkaXNhYmxlZF9ybyIpLCAwX3UxNiksCi0gICAgICAgICAgICAoU3RyaW5nOjpmcm9tKCJkaXNhYmxlZF9ydyIpLCAxX3UxNiksCi0gICAgICAgICAgICAoU3RyaW5nOjpmcm9tKCJkaXNhYmxlZF9yd19leHBvcnRlZCIpLCAyX3UxNiksCi0gICAgICAgICAgICAoU3RyaW5nOjpmcm9tKCJkaXNhYmxlZF9yd19pbl9vdGhlcl9uYW1lc3BhY2UiKSwgM191MTYpLAotICAgICAgICAgICAgKFN0cmluZzo6ZnJvbSgiZW5hYmxlZF9maXhlZF9ybyIpLCA0X3UxNiksCi0gICAgICAgICAgICAoU3RyaW5nOjpmcm9tKCJlbmFibGVkX2ZpeGVkX3JvX2V4cG9ydGVkIiksIDVfdTE2KSwKLSAgICAgICAgICAgIChTdHJpbmc6OmZyb20oImVuYWJsZWRfcm8iKSwgNl91MTYpLAotICAgICAgICAgICAgKFN0cmluZzo6ZnJvbSgiZW5hYmxlZF9yb19leHBvcnRlZCIpLCA3X3UxNiksCi0gICAgICAgICAgICAoU3RyaW5nOjpmcm9tKCJlbmFibGVkX3J3IiksIDhfdTE2KSwKKyAgICAgICAgICAgIChTdHJpbmc6OmZyb20oImRpc2FibGVkX3J3IiksIDBfdTE2KSwKKyAgICAgICAgICAgIChTdHJpbmc6OmZyb20oImRpc2FibGVkX3J3X2V4cG9ydGVkIiksIDFfdTE2KSwKKyAgICAgICAgICAgIChTdHJpbmc6OmZyb20oImRpc2FibGVkX3J3X2luX290aGVyX25hbWVzcGFjZSIpLCAyX3UxNiksCisgICAgICAgICAgICAoU3RyaW5nOjpmcm9tKCJlbmFibGVkX2ZpeGVkX3JvIiksIDNfdTE2KSwKKyAgICAgICAgICAgIChTdHJpbmc6OmZyb20oImVuYWJsZWRfZml4ZWRfcm9fZXhwb3J0ZWQiKSwgNF91MTYpLAorICAgICAgICAgICAgKFN0cmluZzo6ZnJvbSgiZW5hYmxlZF9ybyIpLCA1X3UxNiksCisgICAgICAgICAgICAoU3RyaW5nOjpmcm9tKCJlbmFibGVkX3JvX2V4cG9ydGVkIiksIDZfdTE2KSwKKyAgICAgICAgICAgIChTdHJpbmc6OmZyb20oImVuYWJsZWRfcnciKSwgN191MTYpLAogICAgICAgICBdKTsKICAgICAgICAgYXNzZXJ0X2VxIShmbGFnX2lkcywgZXhwZWN0ZWRfZmxhZ19pZHMpOwogICAgIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvbWFpbi5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvbWFpbi5ycwppbmRleCAxZmI2NGY5Li5jMzkwMjg4IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL21haW4ucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9tYWluLnJzCkBAIC0xNiw2ICsxNiw4IEBACiAKIC8vISBgYWNvbmZpZ2AgaXMgYSBidWlsZCB0aW1lIHRvb2wgdG8gbWFuYWdlIGJ1aWxkIHRpbWUgY29uZmlndXJhdGlvbnMsIHN1Y2ggYXMgZmVhdHVyZSBmbGFncy4KIAordXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjpERUZBVUxUX0ZJTEVfVkVSU0lPTjsKK3VzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6TUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT047CiB1c2UgYW55aG93Ojp7YW55aG93LCBiYWlsLCBDb250ZXh0LCBSZXN1bHR9OwogdXNlIGNsYXA6OntidWlsZGVyOjpBcmdBY3Rpb24sIGJ1aWxkZXI6OkVudW1WYWx1ZVBhcnNlciwgQXJnLCBBcmdNYXRjaGVzLCBDb21tYW5kfTsKIHVzZSBjb3JlOjphbnk6OkFueTsKQEAgLTQ5LDggKzUxLDcgQEAKICAgICAgICAgLnN1YmNvbW1hbmQoCiAgICAgICAgICAgICBDb21tYW5kOjpuZXcoImNyZWF0ZS1jYWNoZSIpCiAgICAgICAgICAgICAgICAgLmFyZyhBcmc6Om5ldygicGFja2FnZSIpLmxvbmcoInBhY2thZ2UiKS5yZXF1aXJlZCh0cnVlKSkKLSAgICAgICAgICAgICAgICAvLyBUT0RPKGIvMzEyNzY5NzEwKTogTWFrZSB0aGlzIGFyZ3VtZW50IHJlcXVpcmVkLgotICAgICAgICAgICAgICAgIC5hcmcoQXJnOjpuZXcoImNvbnRhaW5lciIpLmxvbmcoImNvbnRhaW5lciIpKQorICAgICAgICAgICAgICAgIC5hcmcoQXJnOjpuZXcoImNvbnRhaW5lciIpLmxvbmcoImNvbnRhaW5lciIpLnJlcXVpcmVkKHRydWUpKQogICAgICAgICAgICAgICAgIC5hcmcoQXJnOjpuZXcoImRlY2xhcmF0aW9ucyIpLmxvbmcoImRlY2xhcmF0aW9ucyIpLmFjdGlvbihBcmdBY3Rpb246OkFwcGVuZCkpCiAgICAgICAgICAgICAgICAgLmFyZyhBcmc6Om5ldygidmFsdWVzIikubG9uZygidmFsdWVzIikuYWN0aW9uKEFyZ0FjdGlvbjo6QXBwZW5kKSkKICAgICAgICAgICAgICAgICAuYXJnKApAQCAtNjEsNiArNjIsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29tbWFuZHM6OkRFRkFVTFRfRkxBR19QRVJNSVNTSU9OLAogICAgICAgICAgICAgICAgICAgICAgICAgKSksCiAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIC5hcmcoCisgICAgICAgICAgICAgICAgICAgIEFyZzo6bmV3KCJhbGxvdy1yZWFkLXdyaXRlIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5sb25nKCJhbGxvdy1yZWFkLXdyaXRlIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZV9wYXJzZXIoY2xhcDo6dmFsdWVfcGFyc2VyIShib29sKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0X3ZhbHVlKCJ0cnVlIiksCisgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgIC5hcmcoQXJnOjpuZXcoImNhY2hlIikubG9uZygiY2FjaGUiKS5yZXF1aXJlZCh0cnVlKSksCiAgICAgICAgICkKICAgICAgICAgLnN1YmNvbW1hbmQoCkBAIC0xNTksNyArMTY2LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVfcGFyc2VyKHxzOiAmc3RyfCBTdG9yYWdlRmlsZVR5cGU6OnRyeV9mcm9tKHMpKSwKICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgLmFyZyhBcmc6Om5ldygiY2FjaGUiKS5sb25nKCJjYWNoZSIpLmFjdGlvbihBcmdBY3Rpb246OkFwcGVuZCkucmVxdWlyZWQodHJ1ZSkpCi0gICAgICAgICAgICAgICAgLmFyZyhBcmc6Om5ldygib3V0IikubG9uZygib3V0IikucmVxdWlyZWQodHJ1ZSkpLAorICAgICAgICAgICAgICAgIC5hcmcoQXJnOjpuZXcoIm91dCIpLmxvbmcoIm91dCIpLnJlcXVpcmVkKHRydWUpKQorICAgICAgICAgICAgICAgIC5hcmcoCisgICAgICAgICAgICAgICAgICAgIEFyZzo6bmV3KCJ2ZXJzaW9uIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5sb25nKCJ2ZXJzaW9uIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5yZXF1aXJlZChmYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZV9wYXJzZXIofHM6ICZzdHJ8IHMucGFyc2U6Ojx1MzI+KCkpLAorICAgICAgICAgICAgICAgICksCiAgICAgICAgICkKIH0KIApAQCAtMjM1LDEyICsyNDgsMTUgQEAKICAgICAgICAgICAgICAgICBzdWJfbWF0Y2hlcywKICAgICAgICAgICAgICAgICAiZGVmYXVsdC1wZXJtaXNzaW9uIiwKICAgICAgICAgICAgICk/OworICAgICAgICAgICAgbGV0IGFsbG93X3JlYWRfd3JpdGUgPSBnZXRfb3B0aW9uYWxfYXJnOjo8Ym9vbD4oc3ViX21hdGNoZXMsICJhbGxvdy1yZWFkLXdyaXRlIikKKyAgICAgICAgICAgICAgICAuZXhwZWN0KCJmYWlsZWQgdG8gcGFyc2UgYWxsb3ctcmVhZC13cml0ZSIpOwogICAgICAgICAgICAgbGV0IG91dHB1dCA9IGNvbW1hbmRzOjpwYXJzZV9mbGFncygKICAgICAgICAgICAgICAgICBwYWNrYWdlLAogICAgICAgICAgICAgICAgIGNvbnRhaW5lciwKICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnMsCiAgICAgICAgICAgICAgICAgdmFsdWVzLAogICAgICAgICAgICAgICAgICpkZWZhdWx0X3Blcm1pc3Npb24sCisgICAgICAgICAgICAgICAgKmFsbG93X3JlYWRfd3JpdGUsCiAgICAgICAgICAgICApCiAgICAgICAgICAgICAuY29udGV4dCgiZmFpbGVkIHRvIGNyZWF0ZSBjYWNoZSIpPzsKICAgICAgICAgICAgIGxldCBwYXRoID0gZ2V0X3JlcXVpcmVkX2FyZzo6PFN0cmluZz4oc3ViX21hdGNoZXMsICJjYWNoZSIpPzsKQEAgLTMwOSwxMiArMzI1LDE4IEBACiAgICAgICAgICAgICB3cml0ZV9vdXRwdXRfdG9fZmlsZV9vcl9zdGRvdXQocGF0aCwgJm91dHB1dCk/OwogICAgICAgICB9CiAgICAgICAgIFNvbWUoKCJjcmVhdGUtc3RvcmFnZSIsIHN1Yl9tYXRjaGVzKSkgPT4geworICAgICAgICAgICAgbGV0IHZlcnNpb24gPQorICAgICAgICAgICAgICAgIGdldF9vcHRpb25hbF9hcmc6Ojx1MzI+KHN1Yl9tYXRjaGVzLCAidmVyc2lvbiIpLnVud3JhcF9vcigmREVGQVVMVF9GSUxFX1ZFUlNJT04pOworICAgICAgICAgICAgaWYgKnZlcnNpb24gPiBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTiB7CisgICAgICAgICAgICAgICAgYmFpbCEoIkludmFsaWQgdmVyc2lvbiBzZWxlY3RlZCAoe30pIiwgdmVyc2lvbik7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZXQgZmlsZSA9IGdldF9yZXF1aXJlZF9hcmc6OjxTdG9yYWdlRmlsZVR5cGU+KHN1Yl9tYXRjaGVzLCAiZmlsZSIpCiAgICAgICAgICAgICAgICAgLmNvbnRleHQoIkludmFsaWQgc3RvcmFnZSBmaWxlIHNlbGVjdGlvbiIpPzsKICAgICAgICAgICAgIGxldCBjYWNoZSA9IG9wZW5femVyb19vcl9tb3JlX2ZpbGVzKHN1Yl9tYXRjaGVzLCAiY2FjaGUiKT87CiAgICAgICAgICAgICBsZXQgY29udGFpbmVyID0gZ2V0X3JlcXVpcmVkX2FyZzo6PFN0cmluZz4oc3ViX21hdGNoZXMsICJjb250YWluZXIiKT87CiAgICAgICAgICAgICBsZXQgcGF0aCA9IGdldF9yZXF1aXJlZF9hcmc6OjxTdHJpbmc+KHN1Yl9tYXRjaGVzLCAib3V0Iik/OwotICAgICAgICAgICAgbGV0IG91dHB1dCA9IGNvbW1hbmRzOjpjcmVhdGVfc3RvcmFnZShjYWNoZSwgY29udGFpbmVyLCBmaWxlKQorCisgICAgICAgICAgICBsZXQgb3V0cHV0ID0gY29tbWFuZHM6OmNyZWF0ZV9zdG9yYWdlKGNhY2hlLCBjb250YWluZXIsIGZpbGUsICp2ZXJzaW9uKQogICAgICAgICAgICAgICAgIC5jb250ZXh0KCJmYWlsZWQgdG8gY3JlYXRlIHN0b3JhZ2UgZmlsZXMiKT87CiAgICAgICAgICAgICB3cml0ZV9vdXRwdXRfdG9fZmlsZV9vcl9zdGRvdXQocGF0aCwgJm91dHB1dCk/OwogICAgICAgICB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvZmxhZ19pbmZvLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL2ZsYWdfaW5mby5ycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTQzZGFhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL2ZsYWdfaW5mby5ycwpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKwordXNlIGNyYXRlOjpjb21tYW5kczo6YXNzaWduX2ZsYWdfaWRzOwordXNlIGNyYXRlOjpzdG9yYWdlOjpGbGFnUGFja2FnZTsKK3VzZSBhY29uZmlnX3Byb3Rvczo6e1Byb3RvRmxhZ1Blcm1pc3Npb24sIFByb3RvRmxhZ1N0YXRlfTsKK3VzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6e0ZsYWdJbmZvSGVhZGVyLCBGbGFnSW5mb0xpc3QsIEZsYWdJbmZvTm9kZSwgU3RvcmFnZUZpbGVUeXBlfTsKK3VzZSBhbnlob3c6Onthbnlob3csIFJlc3VsdH07CisKK2ZuIG5ld19oZWFkZXIoY29udGFpbmVyOiAmc3RyLCBudW1fZmxhZ3M6IHUzMiwgdmVyc2lvbjogdTMyKSAtPiBGbGFnSW5mb0hlYWRlciB7CisgICAgRmxhZ0luZm9IZWFkZXIgeworICAgICAgICB2ZXJzaW9uLAorICAgICAgICBjb250YWluZXI6IFN0cmluZzo6ZnJvbShjb250YWluZXIpLAorICAgICAgICBmaWxlX3R5cGU6IFN0b3JhZ2VGaWxlVHlwZTo6RmxhZ0luZm8gYXMgdTgsCisgICAgICAgIGZpbGVfc2l6ZTogMCwKKyAgICAgICAgbnVtX2ZsYWdzLAorICAgICAgICBib29sZWFuX2ZsYWdfb2Zmc2V0OiAwLAorICAgIH0KK30KKworcHViIGZuIGNyZWF0ZV9mbGFnX2luZm8oCisgICAgY29udGFpbmVyOiAmc3RyLAorICAgIHBhY2thZ2VzOiAmW0ZsYWdQYWNrYWdlXSwKKyAgICB2ZXJzaW9uOiB1MzIsCispIC0+IFJlc3VsdDxGbGFnSW5mb0xpc3Q+IHsKKyAgICAvLyBFeGNsdWRlIHN5c3RlbS92ZW5kb3IvcHJvZHVjdCBmbGFncyB0aGF0IGFyZSBSTytkaXNhYmxlZC4KKyAgICBsZXQgbXV0IGZpbHRlcmVkX3BhY2thZ2VzID0gcGFja2FnZXMudG9fdmVjKCk7CisgICAgaWYgY29udGFpbmVyID09ICJzeXN0ZW0iIHx8IGNvbnRhaW5lciA9PSAidmVuZG9yIiB8fCBjb250YWluZXIgPT0gInByb2R1Y3QiIHsKKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gZmlsdGVyZWRfcGFja2FnZXMuaXRlcl9tdXQoKSB7CisgICAgICAgICAgICBwYWNrYWdlLmJvb2xlYW5fZmxhZ3MucmV0YWluKHxifCB7CisgICAgICAgICAgICAgICAgIShiLnN0YXRlID09IFNvbWUoUHJvdG9GbGFnU3RhdGU6OkRJU0FCTEVELmludG8oKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgYi5wZXJtaXNzaW9uID09IFNvbWUoUHJvdG9GbGFnUGVybWlzc2lvbjo6UkVBRF9PTkxZLmludG8oKSkpCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGxldCBudW1fZmxhZ3MgPSBmaWx0ZXJlZF9wYWNrYWdlcy5pdGVyKCkubWFwKHxwa2d8IHBrZy5ib29sZWFuX2ZsYWdzLmxlbigpIGFzIHUzMikuc3VtKCk7CisKKyAgICBsZXQgbXV0IGlzX2ZsYWdfcncgPSB2ZWMhW2ZhbHNlOyBudW1fZmxhZ3MgYXMgdXNpemVdOworICAgIGZvciBwa2cgaW4gZmlsdGVyZWRfcGFja2FnZXMgeworICAgICAgICBsZXQgc3RhcnRfaW5kZXggPSBwa2cuYm9vbGVhbl9zdGFydF9pbmRleCBhcyB1c2l6ZTsKKyAgICAgICAgbGV0IGZsYWdfaWRzID0gYXNzaWduX2ZsYWdfaWRzKHBrZy5wYWNrYWdlX25hbWUsIHBrZy5ib29sZWFuX2ZsYWdzLml0ZXIoKS5jb3BpZWQoKSk/OworICAgICAgICBmb3IgcGYgaW4gcGtnLmJvb2xlYW5fZmxhZ3MgeworICAgICAgICAgICAgbGV0IGZpZCA9IGZsYWdfaWRzCisgICAgICAgICAgICAgICAgLmdldChwZi5uYW1lKCkpCisgICAgICAgICAgICAgICAgLm9rX29yKGFueWhvdyEoZm9ybWF0ISgibWlzc2luZyBmbGFnIGlkIGZvciB7fSIsIHBmLm5hbWUoKSkpKT87CisgICAgICAgICAgICBpc19mbGFnX3J3W3N0YXJ0X2luZGV4ICsgKCpmaWQgYXMgdXNpemUpXSA9CisgICAgICAgICAgICAgICAgcGYucGVybWlzc2lvbigpID09IFByb3RvRmxhZ1Blcm1pc3Npb246OlJFQURfV1JJVEU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBsZXQgbXV0IGxpc3QgPSBGbGFnSW5mb0xpc3QgeworICAgICAgICBoZWFkZXI6IG5ld19oZWFkZXIoY29udGFpbmVyLCBudW1fZmxhZ3MsIHZlcnNpb24pLAorICAgICAgICBub2RlczogaXNfZmxhZ19ydy5pdGVyKCkubWFwKHwmcnd8IEZsYWdJbmZvTm9kZTo6Y3JlYXRlKHJ3KSkuY29sbGVjdCgpLAorICAgIH07CisKKyAgICAvLyBpbml0aWFsaXplIGFsbCBoZWFkZXIgZmllbGRzCisgICAgbGlzdC5oZWFkZXIuYm9vbGVhbl9mbGFnX29mZnNldCA9IGxpc3QuaGVhZGVyLmludG9fYnl0ZXMoKS5sZW4oKSBhcyB1MzI7CisgICAgbGV0IGJ5dGVzX3Blcl9ub2RlID0gRmxhZ0luZm9Ob2RlOjpjcmVhdGUoZmFsc2UpLmludG9fYnl0ZXMoKS5sZW4oKSBhcyB1MzI7CisgICAgbGlzdC5oZWFkZXIuZmlsZV9zaXplID0gbGlzdC5oZWFkZXIuYm9vbGVhbl9mbGFnX29mZnNldCArIG51bV9mbGFncyAqIGJ5dGVzX3Blcl9ub2RlOworCisgICAgT2sobGlzdCkKK30KKworI1tjZmcodGVzdCldCittb2QgdGVzdHMgeworICAgIHVzZSBzdXBlcjo6KjsKKyAgICB1c2UgY3JhdGU6OnN0b3JhZ2U6Ontncm91cF9mbGFnc19ieV9wYWNrYWdlLCB0ZXN0czo6cGFyc2VfYWxsX3Rlc3RfZmxhZ3N9OworICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6REVGQVVMVF9GSUxFX1ZFUlNJT047CisKKyAgICBwdWIgZm4gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3RfZnJvbV9zb3VyY2UoKSAtPiBSZXN1bHQ8RmxhZ0luZm9MaXN0PiB7CisgICAgICAgIGxldCBjYWNoZXMgPSBwYXJzZV9hbGxfdGVzdF9mbGFncygpOworICAgICAgICBsZXQgcGFja2FnZXMgPSBncm91cF9mbGFnc19ieV9wYWNrYWdlKGNhY2hlcy5pdGVyKCksIERFRkFVTFRfRklMRV9WRVJTSU9OKTsKKyAgICAgICAgY3JlYXRlX2ZsYWdfaW5mbygibW9ja3VwIiwgJnBhY2thZ2VzLCBERUZBVUxUX0ZJTEVfVkVSU0lPTikKKyAgICB9CisKKyAgICAjW3Rlc3RdCisgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGhlIGZsYWcgaW5mbyBjcmVhdGlvbiBhbmQgZWFjaCBmaWVsZAorICAgIGZuIHRlc3RfbGlzdF9jb250ZW50cygpIHsKKyAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3RfZnJvbV9zb3VyY2UoKTsKKyAgICAgICAgYXNzZXJ0IShmbGFnX2luZm9fbGlzdC5pc19vaygpKTsKKyAgICAgICAgbGV0IGV4cGVjdGVkX2ZsYWdfaW5mb19saXN0ID0KKyAgICAgICAgICAgIGFjb25maWdfc3RvcmFnZV9maWxlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTik7CisgICAgICAgIGFzc2VydF9lcSEoZmxhZ19pbmZvX2xpc3QudW53cmFwKCksIGV4cGVjdGVkX2ZsYWdfaW5mb19saXN0KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvZmxhZ190YWJsZS5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9mbGFnX3RhYmxlLnJzCmluZGV4IGE5NzEyMTEuLjNiMjQ1YTcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9mbGFnX3RhYmxlLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9mbGFnX3RhYmxlLnJzCkBAIC0xNiwxNiArMTYsMTUgQEAKIAogdXNlIGNyYXRlOjpjb21tYW5kczo6YXNzaWduX2ZsYWdfaWRzOwogdXNlIGNyYXRlOjpzdG9yYWdlOjpGbGFnUGFja2FnZTsKLXVzZSBhY29uZmlnX3Byb3Rvczo6UHJvdG9GbGFnUGVybWlzc2lvbjsKK3VzZSBhY29uZmlnX3Byb3Rvczo6e1Byb3RvRmxhZ1Blcm1pc3Npb24sIFByb3RvRmxhZ1N0YXRlfTsKIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6ewogICAgIGdldF90YWJsZV9zaXplLCBGbGFnVGFibGUsIEZsYWdUYWJsZUhlYWRlciwgRmxhZ1RhYmxlTm9kZSwgU3RvcmFnZUZpbGVUeXBlLCBTdG9yZWRGbGFnVHlwZSwKLSAgICBGSUxFX1ZFUlNJT04sCiB9OwogdXNlIGFueWhvdzo6e2FueWhvdywgUmVzdWx0fTsKIAotZm4gbmV3X2hlYWRlcihjb250YWluZXI6ICZzdHIsIG51bV9mbGFnczogdTMyKSAtPiBGbGFnVGFibGVIZWFkZXIgeworZm4gbmV3X2hlYWRlcihjb250YWluZXI6ICZzdHIsIG51bV9mbGFnczogdTMyLCB2ZXJzaW9uOiB1MzIpIC0+IEZsYWdUYWJsZUhlYWRlciB7CiAgICAgRmxhZ1RhYmxlSGVhZGVyIHsKLSAgICAgICAgdmVyc2lvbjogRklMRV9WRVJTSU9OLAorICAgICAgICB2ZXJzaW9uLAogICAgICAgICBjb250YWluZXI6IFN0cmluZzo6ZnJvbShjb250YWluZXIpLAogICAgICAgICBmaWxlX3R5cGU6IFN0b3JhZ2VGaWxlVHlwZTo6RmxhZ01hcCBhcyB1OCwKICAgICAgICAgZmlsZV9zaXplOiAwLApAQCAtNjMsOSArNjIsMTkgQEAKICAgICB9CiAKICAgICBmbiBjcmVhdGVfbm9kZXMocGFja2FnZTogJkZsYWdQYWNrYWdlLCBudW1fYnVja2V0czogdTMyKSAtPiBSZXN1bHQ8VmVjPFNlbGY+PiB7CisgICAgICAgIC8vIEV4Y2x1ZGUgc3lzdGVtL3ZlbmRvci9wcm9kdWN0IGZsYWdzIHRoYXQgYXJlIFJPK2Rpc2FibGVkLgorICAgICAgICBsZXQgbXV0IGZpbHRlcmVkX3BhY2thZ2UgPSBwYWNrYWdlLmNsb25lKCk7CisgICAgICAgIGZpbHRlcmVkX3BhY2thZ2UuYm9vbGVhbl9mbGFncy5yZXRhaW4ofGZ8IHsKKyAgICAgICAgICAgICEoKGYuY29udGFpbmVyID09IFNvbWUoInN5c3RlbSIudG9fc3RyaW5nKCkpCisgICAgICAgICAgICAgICAgfHwgZi5jb250YWluZXIgPT0gU29tZSgidmVuZG9yIi50b19zdHJpbmcoKSkKKyAgICAgICAgICAgICAgICB8fCBmLmNvbnRhaW5lciA9PSBTb21lKCJwcm9kdWN0Ii50b19zdHJpbmcoKSkpCisgICAgICAgICAgICAgICAgJiYgZi5wZXJtaXNzaW9uID09IFNvbWUoUHJvdG9GbGFnUGVybWlzc2lvbjo6UkVBRF9PTkxZLmludG8oKSkKKyAgICAgICAgICAgICAgICAmJiBmLnN0YXRlID09IFNvbWUoUHJvdG9GbGFnU3RhdGU6OkRJU0FCTEVELmludG8oKSkpCisgICAgICAgIH0pOworCiAgICAgICAgIGxldCBmbGFnX2lkcyA9Ci0gICAgICAgICAgICBhc3NpZ25fZmxhZ19pZHMocGFja2FnZS5wYWNrYWdlX25hbWUsIHBhY2thZ2UuYm9vbGVhbl9mbGFncy5pdGVyKCkuY29waWVkKCkpPzsKLSAgICAgICAgcGFja2FnZQorICAgICAgICAgICAgYXNzaWduX2ZsYWdfaWRzKHBhY2thZ2UucGFja2FnZV9uYW1lLCBmaWx0ZXJlZF9wYWNrYWdlLmJvb2xlYW5fZmxhZ3MuaXRlcigpLmNvcGllZCgpKT87CisgICAgICAgIGZpbHRlcmVkX3BhY2thZ2UKICAgICAgICAgICAgIC5ib29sZWFuX2ZsYWdzCiAgICAgICAgICAgICAuaXRlcigpCiAgICAgICAgICAgICAubWFwKHwmcGZ8IHsKQEAgLTg2LDEyICs5NSwxNiBAQAogICAgIH0KIH0KIAotcHViIGZuIGNyZWF0ZV9mbGFnX3RhYmxlKGNvbnRhaW5lcjogJnN0ciwgcGFja2FnZXM6ICZbRmxhZ1BhY2thZ2VdKSAtPiBSZXN1bHQ8RmxhZ1RhYmxlPiB7CitwdWIgZm4gY3JlYXRlX2ZsYWdfdGFibGUoCisgICAgY29udGFpbmVyOiAmc3RyLAorICAgIHBhY2thZ2VzOiAmW0ZsYWdQYWNrYWdlXSwKKyAgICB2ZXJzaW9uOiB1MzIsCispIC0+IFJlc3VsdDxGbGFnVGFibGU+IHsKICAgICAvLyBjcmVhdGUgdGFibGUKICAgICBsZXQgbnVtX2ZsYWdzID0gcGFja2FnZXMuaXRlcigpLm1hcCh8cGtnfCBwa2cuYm9vbGVhbl9mbGFncy5sZW4oKSBhcyB1MzIpLnN1bSgpOwogICAgIGxldCBudW1fYnVja2V0cyA9IGdldF90YWJsZV9zaXplKG51bV9mbGFncyk/OwogCi0gICAgbGV0IG11dCBoZWFkZXIgPSBuZXdfaGVhZGVyKGNvbnRhaW5lciwgbnVtX2ZsYWdzKTsKKyAgICBsZXQgbXV0IGhlYWRlciA9IG5ld19oZWFkZXIoY29udGFpbmVyLCBudW1fZmxhZ3MsIHZlcnNpb24pOwogICAgIGxldCBtdXQgYnVja2V0cyA9IHZlYyFbTm9uZTsgbnVtX2J1Y2tldHMgYXMgdXNpemVdOwogICAgIGxldCBtdXQgbm9kZV93cmFwcGVycyA9IHBhY2thZ2VzCiAgICAgICAgIC5pdGVyKCkKQEAgLTEzOCwxMyArMTUxLDE1IEBACiAKICNbY2ZnKHRlc3QpXQogbW9kIHRlc3RzIHsKKyAgICB1c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OkRFRkFVTFRfRklMRV9WRVJTSU9OOworCiAgICAgdXNlIHN1cGVyOjoqOwogICAgIHVzZSBjcmF0ZTo6c3RvcmFnZTo6e2dyb3VwX2ZsYWdzX2J5X3BhY2thZ2UsIHRlc3RzOjpwYXJzZV9hbGxfdGVzdF9mbGFnc307CiAKICAgICBmbiBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlX2Zyb21fc291cmNlKCkgLT4gUmVzdWx0PEZsYWdUYWJsZT4gewogICAgICAgICBsZXQgY2FjaGVzID0gcGFyc2VfYWxsX3Rlc3RfZmxhZ3MoKTsKLSAgICAgICAgbGV0IHBhY2thZ2VzID0gZ3JvdXBfZmxhZ3NfYnlfcGFja2FnZShjYWNoZXMuaXRlcigpKTsKLSAgICAgICAgY3JlYXRlX2ZsYWdfdGFibGUoIm1vY2t1cCIsICZwYWNrYWdlcykKKyAgICAgICAgbGV0IHBhY2thZ2VzID0gZ3JvdXBfZmxhZ3NfYnlfcGFja2FnZShjYWNoZXMuaXRlcigpLCBERUZBVUxUX0ZJTEVfVkVSU0lPTik7CisgICAgICAgIGNyZWF0ZV9mbGFnX3RhYmxlKCJtb2NrdXAiLCAmcGFja2FnZXMsIERFRkFVTFRfRklMRV9WRVJTSU9OKQogICAgIH0KIAogICAgICNbdGVzdF0KQEAgLTE1Miw3ICsxNjcsOCBAQAogICAgIGZuIHRlc3RfdGFibGVfY29udGVudHMoKSB7CiAgICAgICAgIGxldCBmbGFnX3RhYmxlID0gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZV9mcm9tX3NvdXJjZSgpOwogICAgICAgICBhc3NlcnQhKGZsYWdfdGFibGUuaXNfb2soKSk7Ci0gICAgICAgIGxldCBleHBlY3RlZF9mbGFnX3RhYmxlID0gYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OnRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUoKTsKKyAgICAgICAgbGV0IGV4cGVjdGVkX2ZsYWdfdGFibGUgPQorICAgICAgICAgICAgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OnRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgICAgICBhc3NlcnRfZXEhKGZsYWdfdGFibGUudW53cmFwKCksIGV4cGVjdGVkX2ZsYWdfdGFibGUpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9mbGFnX3ZhbHVlLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL2ZsYWdfdmFsdWUucnMKaW5kZXggYzE1YmE1NC4uM2NmYTQ0NyAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL2ZsYWdfdmFsdWUucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL2ZsYWdfdmFsdWUucnMKQEAgLTE2LDEzICsxNiwxMyBAQAogCiB1c2UgY3JhdGU6OmNvbW1hbmRzOjphc3NpZ25fZmxhZ19pZHM7CiB1c2UgY3JhdGU6OnN0b3JhZ2U6OkZsYWdQYWNrYWdlOwotdXNlIGFjb25maWdfcHJvdG9zOjpQcm90b0ZsYWdTdGF0ZTsKLXVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6e0ZsYWdWYWx1ZUhlYWRlciwgRmxhZ1ZhbHVlTGlzdCwgU3RvcmFnZUZpbGVUeXBlLCBGSUxFX1ZFUlNJT059OwordXNlIGFjb25maWdfcHJvdG9zOjp7UHJvdG9GbGFnUGVybWlzc2lvbiwgUHJvdG9GbGFnU3RhdGV9OwordXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7RmxhZ1ZhbHVlSGVhZGVyLCBGbGFnVmFsdWVMaXN0LCBTdG9yYWdlRmlsZVR5cGV9OwogdXNlIGFueWhvdzo6e2FueWhvdywgUmVzdWx0fTsKIAotZm4gbmV3X2hlYWRlcihjb250YWluZXI6ICZzdHIsIG51bV9mbGFnczogdTMyKSAtPiBGbGFnVmFsdWVIZWFkZXIgeworZm4gbmV3X2hlYWRlcihjb250YWluZXI6ICZzdHIsIG51bV9mbGFnczogdTMyLCB2ZXJzaW9uOiB1MzIpIC0+IEZsYWdWYWx1ZUhlYWRlciB7CiAgICAgRmxhZ1ZhbHVlSGVhZGVyIHsKLSAgICAgICAgdmVyc2lvbjogRklMRV9WRVJTSU9OLAorICAgICAgICB2ZXJzaW9uLAogICAgICAgICBjb250YWluZXI6IFN0cmluZzo6ZnJvbShjb250YWluZXIpLAogICAgICAgICBmaWxlX3R5cGU6IFN0b3JhZ2VGaWxlVHlwZTo6RmxhZ1ZhbCBhcyB1OCwKICAgICAgICAgZmlsZV9zaXplOiAwLApAQCAtMzEsMTYgKzMxLDI3IEBACiAgICAgfQogfQogCi1wdWIgZm4gY3JlYXRlX2ZsYWdfdmFsdWUoY29udGFpbmVyOiAmc3RyLCBwYWNrYWdlczogJltGbGFnUGFja2FnZV0pIC0+IFJlc3VsdDxGbGFnVmFsdWVMaXN0PiB7Ci0gICAgLy8gY3JlYXRlIGxpc3QKLSAgICBsZXQgbnVtX2ZsYWdzID0gcGFja2FnZXMuaXRlcigpLm1hcCh8cGtnfCBwa2cuYm9vbGVhbl9mbGFncy5sZW4oKSBhcyB1MzIpLnN1bSgpOwotCitwdWIgZm4gY3JlYXRlX2ZsYWdfdmFsdWUoCisgICAgY29udGFpbmVyOiAmc3RyLAorICAgIHBhY2thZ2VzOiAmW0ZsYWdQYWNrYWdlXSwKKyAgICB2ZXJzaW9uOiB1MzIsCispIC0+IFJlc3VsdDxGbGFnVmFsdWVMaXN0PiB7CisgICAgLy8gRXhjbHVkZSBzeXN0ZW0vdmVuZG9yL3Byb2R1Y3QgZmxhZ3MgdGhhdCBhcmUgUk8rZGlzYWJsZWQuCisgICAgbGV0IG11dCBmaWx0ZXJlZF9wYWNrYWdlcyA9IHBhY2thZ2VzLnRvX3ZlYygpOworICAgIGlmIGNvbnRhaW5lciA9PSAic3lzdGVtIiB8fCBjb250YWluZXIgPT0gInZlbmRvciIgfHwgY29udGFpbmVyID09ICJwcm9kdWN0IiB7CisgICAgICAgIGZvciBwYWNrYWdlIGluIGZpbHRlcmVkX3BhY2thZ2VzLml0ZXJfbXV0KCkgeworICAgICAgICAgICAgcGFja2FnZS5ib29sZWFuX2ZsYWdzLnJldGFpbih8YnwgeworICAgICAgICAgICAgICAgICEoYi5zdGF0ZSA9PSBTb21lKFByb3RvRmxhZ1N0YXRlOjpESVNBQkxFRC5pbnRvKCkpCisgICAgICAgICAgICAgICAgICAgICYmIGIucGVybWlzc2lvbiA9PSBTb21lKFByb3RvRmxhZ1Blcm1pc3Npb246OlJFQURfT05MWS5pbnRvKCkpKQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisgICAgbGV0IG51bV9mbGFncyA9IGZpbHRlcmVkX3BhY2thZ2VzLml0ZXIoKS5tYXAofHBrZ3wgcGtnLmJvb2xlYW5fZmxhZ3MubGVuKCkgYXMgdTMyKS5zdW0oKTsKICAgICBsZXQgbXV0IGxpc3QgPSBGbGFnVmFsdWVMaXN0IHsKLSAgICAgICAgaGVhZGVyOiBuZXdfaGVhZGVyKGNvbnRhaW5lciwgbnVtX2ZsYWdzKSwKKyAgICAgICAgaGVhZGVyOiBuZXdfaGVhZGVyKGNvbnRhaW5lciwgbnVtX2ZsYWdzLCB2ZXJzaW9uKSwKICAgICAgICAgYm9vbGVhbnM6IHZlYyFbZmFsc2U7IG51bV9mbGFncyBhcyB1c2l6ZV0sCiAgICAgfTsKLQotICAgIGZvciBwa2cgaW4gcGFja2FnZXMuaXRlcigpIHsKKyAgICBmb3IgcGtnIGluIGZpbHRlcmVkX3BhY2thZ2VzIHsKICAgICAgICAgbGV0IHN0YXJ0X2luZGV4ID0gcGtnLmJvb2xlYW5fc3RhcnRfaW5kZXggYXMgdXNpemU7CiAgICAgICAgIGxldCBmbGFnX2lkcyA9IGFzc2lnbl9mbGFnX2lkcyhwa2cucGFja2FnZV9uYW1lLCBwa2cuYm9vbGVhbl9mbGFncy5pdGVyKCkuY29waWVkKCkpPzsKICAgICAgICAgZm9yIHBmIGluIHBrZy5ib29sZWFuX2ZsYWdzLml0ZXIoKSB7CkBAIC02MSwxMyArNzIsMTUgQEAKIAogI1tjZmcodGVzdCldCiBtb2QgdGVzdHMgeworICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6REVGQVVMVF9GSUxFX1ZFUlNJT047CisKICAgICB1c2Ugc3VwZXI6Oio7CiAgICAgdXNlIGNyYXRlOjpzdG9yYWdlOjp7Z3JvdXBfZmxhZ3NfYnlfcGFja2FnZSwgdGVzdHM6OnBhcnNlX2FsbF90ZXN0X2ZsYWdzfTsKIAogICAgIHB1YiBmbiBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3RfZnJvbV9zb3VyY2UoKSAtPiBSZXN1bHQ8RmxhZ1ZhbHVlTGlzdD4gewogICAgICAgICBsZXQgY2FjaGVzID0gcGFyc2VfYWxsX3Rlc3RfZmxhZ3MoKTsKLSAgICAgICAgbGV0IHBhY2thZ2VzID0gZ3JvdXBfZmxhZ3NfYnlfcGFja2FnZShjYWNoZXMuaXRlcigpKTsKLSAgICAgICAgY3JlYXRlX2ZsYWdfdmFsdWUoIm1vY2t1cCIsICZwYWNrYWdlcykKKyAgICAgICAgbGV0IHBhY2thZ2VzID0gZ3JvdXBfZmxhZ3NfYnlfcGFja2FnZShjYWNoZXMuaXRlcigpLCBERUZBVUxUX0ZJTEVfVkVSU0lPTik7CisgICAgICAgIGNyZWF0ZV9mbGFnX3ZhbHVlKCJtb2NrdXAiLCAmcGFja2FnZXMsIERFRkFVTFRfRklMRV9WRVJTSU9OKQogICAgIH0KIAogICAgICNbdGVzdF0KQEAgLTc2LDcgKzg5LDcgQEAKICAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdF9mcm9tX3NvdXJjZSgpOwogICAgICAgICBhc3NlcnQhKGZsYWdfdmFsdWVfbGlzdC5pc19vaygpKTsKICAgICAgICAgbGV0IGV4cGVjdGVkX2ZsYWdfdmFsdWVfbGlzdCA9Ci0gICAgICAgICAgICBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KCk7CisgICAgICAgICAgICBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgYXNzZXJ0X2VxIShmbGFnX3ZhbHVlX2xpc3QudW53cmFwKCksIGV4cGVjdGVkX2ZsYWdfdmFsdWVfbGlzdCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL21vZC5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9tb2QucnMKaW5kZXggNzMzMzlmMi4uNjFlNjVkMSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL21vZC5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvbW9kLnJzCkBAIC0xNCwyMyArMTQsMjcgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKK3B1YiBtb2QgZmxhZ19pbmZvOwogcHViIG1vZCBmbGFnX3RhYmxlOwogcHViIG1vZCBmbGFnX3ZhbHVlOwogcHViIG1vZCBwYWNrYWdlX3RhYmxlOwogCi11c2UgYW55aG93Ojp7YW55aG93LCBSZXN1bHR9OwordXNlIGFueWhvdzo6UmVzdWx0OwogdXNlIHN0ZDo6Y29sbGVjdGlvbnM6OntIYXNoTWFwLCBIYXNoU2V0fTsKIAordXNlIGNyYXRlOjpjb21tYW5kczo6Y29tcHV0ZV9mbGFnc19maW5nZXJwcmludDsKIHVzZSBjcmF0ZTo6c3RvcmFnZTo6ewotICAgIGZsYWdfdGFibGU6OmNyZWF0ZV9mbGFnX3RhYmxlLCBmbGFnX3ZhbHVlOjpjcmVhdGVfZmxhZ192YWx1ZSwKKyAgICBmbGFnX2luZm86OmNyZWF0ZV9mbGFnX2luZm8sIGZsYWdfdGFibGU6OmNyZWF0ZV9mbGFnX3RhYmxlLCBmbGFnX3ZhbHVlOjpjcmVhdGVfZmxhZ192YWx1ZSwKICAgICBwYWNrYWdlX3RhYmxlOjpjcmVhdGVfcGFja2FnZV90YWJsZSwKIH07Ci11c2UgYWNvbmZpZ19wcm90b3M6OntQcm90b1BhcnNlZEZsYWcsIFByb3RvUGFyc2VkRmxhZ3N9OwordXNlIGFjb25maWdfcHJvdG9zOjp7UHJvdG9GbGFnUGVybWlzc2lvbiwgUHJvdG9GbGFnU3RhdGUsIFByb3RvUGFyc2VkRmxhZywgUHJvdG9QYXJzZWRGbGFnc307CiB1c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OlN0b3JhZ2VGaWxlVHlwZTsKIAorI1tkZXJpdmUoQ2xvbmUpXQogcHViIHN0cnVjdCBGbGFnUGFja2FnZTwnYT4gewogICAgIHB1YiBwYWNrYWdlX25hbWU6ICYnYSBzdHIsCiAgICAgcHViIHBhY2thZ2VfaWQ6IHUzMiwKKyAgICBwdWIgZmluZ2VycHJpbnQ6IHU2NCwKICAgICBwdWIgZmxhZ19uYW1lczogSGFzaFNldDwmJ2Egc3RyPiwKICAgICBwdWIgYm9vbGVhbl9mbGFnczogVmVjPCYnYSBQcm90b1BhcnNlZEZsYWc+LAogICAgIC8vIFRoZSBpbmRleCBvZiB0aGUgZmlyc3QgYm9vbGVhbiBmbGFnIGluIHRoaXMgYWNvbmZpZyBwYWNrYWdlIGFtb25nIGFsbCBib29sZWFuCkBAIC00Myw2ICs0Nyw3IEBACiAgICAgICAgIEZsYWdQYWNrYWdlIHsKICAgICAgICAgICAgIHBhY2thZ2VfbmFtZSwKICAgICAgICAgICAgIHBhY2thZ2VfaWQsCisgICAgICAgICAgICBmaW5nZXJwcmludDogMCwKICAgICAgICAgICAgIGZsYWdfbmFtZXM6IEhhc2hTZXQ6Om5ldygpLAogICAgICAgICAgICAgYm9vbGVhbl9mbGFnczogdmVjIVtdLAogICAgICAgICAgICAgYm9vbGVhbl9zdGFydF9pbmRleDogMCwKQEAgLTU2LDcgKzYxLDcgQEAKICAgICB9CiB9CiAKLXB1YiBmbiBncm91cF9mbGFnc19ieV9wYWNrYWdlPCdhLCBJPihwYXJzZWRfZmxhZ3NfdmVjX2l0ZXI6IEkpIC0+IFZlYzxGbGFnUGFja2FnZTwnYT4+CitwdWIgZm4gZ3JvdXBfZmxhZ3NfYnlfcGFja2FnZTwnYSwgST4ocGFyc2VkX2ZsYWdzX3ZlY19pdGVyOiBJLCB2ZXJzaW9uOiB1MzIpIC0+IFZlYzxGbGFnUGFja2FnZTwnYT4+CiB3aGVyZQogICAgIEk6IEl0ZXJhdG9yPEl0ZW0gPSAmJ2EgUHJvdG9QYXJzZWRGbGFncz4sCiB7CkBAIC02OSwxNSArNzQsMzMgQEAKICAgICAgICAgICAgIGlmIGluZGV4ID09IHBhY2thZ2VzLmxlbigpIHsKICAgICAgICAgICAgICAgICBwYWNrYWdlcy5wdXNoKEZsYWdQYWNrYWdlOjpuZXcocGFyc2VkX2ZsYWcucGFja2FnZSgpLCBpbmRleCBhcyB1MzIpKTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRXhjbHVkZSBzeXN0ZW0vdmVuZG9yL3Byb2R1Y3QgZmxhZ3MgdGhhdCBhcmUgUk8rZGlzYWJsZWQuCisgICAgICAgICAgICBpZiAocGFyc2VkX2ZsYWcuY29udGFpbmVyID09IFNvbWUoInN5c3RlbSIudG9fc3RyaW5nKCkpCisgICAgICAgICAgICAgICAgfHwgcGFyc2VkX2ZsYWcuY29udGFpbmVyID09IFNvbWUoInZlbmRvciIudG9fc3RyaW5nKCkpCisgICAgICAgICAgICAgICAgfHwgcGFyc2VkX2ZsYWcuY29udGFpbmVyID09IFNvbWUoInByb2R1Y3QiLnRvX3N0cmluZygpKSkKKyAgICAgICAgICAgICAgICAmJiBwYXJzZWRfZmxhZy5wZXJtaXNzaW9uID09IFNvbWUoUHJvdG9GbGFnUGVybWlzc2lvbjo6UkVBRF9PTkxZLmludG8oKSkKKyAgICAgICAgICAgICAgICAmJiBwYXJzZWRfZmxhZy5zdGF0ZSA9PSBTb21lKFByb3RvRmxhZ1N0YXRlOjpESVNBQkxFRC5pbnRvKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIHBhY2thZ2VzW2luZGV4XS5pbnNlcnQocGFyc2VkX2ZsYWcpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gY2FjbHVhdGUgYm9vbGVhbiBmbGFnIHN0YXJ0IGluZGV4IGZvciBlYWNoIHBhY2thZ2UKKyAgICAvLyBDYWxjdWxhdGUgYm9vbGVhbiBmbGFnIHN0YXJ0IGluZGV4IGZvciBlYWNoIHBhY2thZ2UKICAgICBsZXQgbXV0IGJvb2xlYW5fc3RhcnRfaW5kZXggPSAwOwogICAgIGZvciBwIGluIHBhY2thZ2VzLml0ZXJfbXV0KCkgewogICAgICAgICBwLmJvb2xlYW5fc3RhcnRfaW5kZXggPSBib29sZWFuX3N0YXJ0X2luZGV4OwogICAgICAgICBib29sZWFuX3N0YXJ0X2luZGV4ICs9IHAuYm9vbGVhbl9mbGFncy5sZW4oKSBhcyB1MzI7CisKKyAgICAgICAgaWYgdmVyc2lvbiA+PSAyIHsKKyAgICAgICAgICAgIGxldCBtdXQgZmxhZ19uYW1lc192ZWMgPQorICAgICAgICAgICAgICAgIHAuZmxhZ19uYW1lcy5jbG9uZSgpLmludG9faXRlcigpLm1hcChTdHJpbmc6OmZyb20pLmNvbGxlY3Q6OjxWZWM8Xz4+KCk7CisgICAgICAgICAgICBsZXQgZmluZ2VycHJpbnQgPSBjb21wdXRlX2ZsYWdzX2ZpbmdlcnByaW50KCZtdXQgZmxhZ19uYW1lc192ZWMpOworICAgICAgICAgICAgcC5maW5nZXJwcmludCA9IGZpbmdlcnByaW50OworICAgICAgICB9CiAgICAgfQogCiAgICAgcGFja2FnZXMKQEAgLTg3LDMxICsxMTAsMzcgQEAKICAgICBjb250YWluZXI6ICZzdHIsCiAgICAgcGFyc2VkX2ZsYWdzX3ZlY19pdGVyOiBJLAogICAgIGZpbGU6ICZTdG9yYWdlRmlsZVR5cGUsCisgICAgdmVyc2lvbjogdTMyLAogKSAtPiBSZXN1bHQ8VmVjPHU4Pj4KIHdoZXJlCiAgICAgSTogSXRlcmF0b3I8SXRlbSA9ICYnYSBQcm90b1BhcnNlZEZsYWdzPiwKIHsKLSAgICBsZXQgcGFja2FnZXMgPSBncm91cF9mbGFnc19ieV9wYWNrYWdlKHBhcnNlZF9mbGFnc192ZWNfaXRlcik7CisgICAgbGV0IHBhY2thZ2VzID0gZ3JvdXBfZmxhZ3NfYnlfcGFja2FnZShwYXJzZWRfZmxhZ3NfdmVjX2l0ZXIsIHZlcnNpb24pOwogCiAgICAgbWF0Y2ggZmlsZSB7CiAgICAgICAgIFN0b3JhZ2VGaWxlVHlwZTo6UGFja2FnZU1hcCA9PiB7Ci0gICAgICAgICAgICBsZXQgcGFja2FnZV90YWJsZSA9IGNyZWF0ZV9wYWNrYWdlX3RhYmxlKGNvbnRhaW5lciwgJnBhY2thZ2VzKT87CisgICAgICAgICAgICBsZXQgcGFja2FnZV90YWJsZSA9IGNyZWF0ZV9wYWNrYWdlX3RhYmxlKGNvbnRhaW5lciwgJnBhY2thZ2VzLCB2ZXJzaW9uKT87CiAgICAgICAgICAgICBPayhwYWNrYWdlX3RhYmxlLmludG9fYnl0ZXMoKSkKICAgICAgICAgfQogICAgICAgICBTdG9yYWdlRmlsZVR5cGU6OkZsYWdNYXAgPT4gewotICAgICAgICAgICAgbGV0IGZsYWdfdGFibGUgPSBjcmVhdGVfZmxhZ190YWJsZShjb250YWluZXIsICZwYWNrYWdlcyk/OworICAgICAgICAgICAgbGV0IGZsYWdfdGFibGUgPSBjcmVhdGVfZmxhZ190YWJsZShjb250YWluZXIsICZwYWNrYWdlcywgdmVyc2lvbik/OwogICAgICAgICAgICAgT2soZmxhZ190YWJsZS5pbnRvX2J5dGVzKCkpCiAgICAgICAgIH0KICAgICAgICAgU3RvcmFnZUZpbGVUeXBlOjpGbGFnVmFsID0+IHsKLSAgICAgICAgICAgIGxldCBmbGFnX3ZhbHVlID0gY3JlYXRlX2ZsYWdfdmFsdWUoY29udGFpbmVyLCAmcGFja2FnZXMpPzsKKyAgICAgICAgICAgIGxldCBmbGFnX3ZhbHVlID0gY3JlYXRlX2ZsYWdfdmFsdWUoY29udGFpbmVyLCAmcGFja2FnZXMsIHZlcnNpb24pPzsKICAgICAgICAgICAgIE9rKGZsYWdfdmFsdWUuaW50b19ieXRlcygpKQogICAgICAgICB9Ci0gICAgICAgIF8gPT4gRXJyKGFueWhvdyEoImFjb25maWcgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY3JlYXRpb24gb2YgdGhpcyBzdG9yYWdlIGZpbGUgdHlwZSIpKSwKKyAgICAgICAgU3RvcmFnZUZpbGVUeXBlOjpGbGFnSW5mbyA9PiB7CisgICAgICAgICAgICBsZXQgZmxhZ19pbmZvID0gY3JlYXRlX2ZsYWdfaW5mbyhjb250YWluZXIsICZwYWNrYWdlcywgdmVyc2lvbik/OworICAgICAgICAgICAgT2soZmxhZ19pbmZvLmludG9fYnl0ZXMoKSkKKyAgICAgICAgfQogICAgIH0KIH0KIAogI1tjZmcodGVzdCldCiBtb2QgdGVzdHMgeworICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6REVGQVVMVF9GSUxFX1ZFUlNJT047CisKICAgICB1c2Ugc3VwZXI6Oio7CiAgICAgdXNlIGNyYXRlOjpJbnB1dDsKIApAQCAtMTU0LDYgKzE4Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXI6IEJveDo6bmV3KHZhbHVlX2NvbnRlbnQpLAogICAgICAgICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAgICAgICAgY3JhdGU6OmNvbW1hbmRzOjpERUZBVUxUX0ZMQUdfUEVSTUlTU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgdHJ1ZSwKICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgLnVud3JhcCgpOwogICAgICAgICAgICAgICAgIGFjb25maWdfcHJvdG9zOjpwYXJzZWRfZmxhZ3M6OnRyeV9mcm9tX2JpbmFyeV9wcm90bygmYnl0ZXMpLnVud3JhcCgpCkBAIC0xNjQsNyArMTk0LDcgQEAKICAgICAjW3Rlc3RdCiAgICAgZm4gdGVzdF9mbGFnX3BhY2thZ2UoKSB7CiAgICAgICAgIGxldCBjYWNoZXMgPSBwYXJzZV9hbGxfdGVzdF9mbGFncygpOwotICAgICAgICBsZXQgcGFja2FnZXMgPSBncm91cF9mbGFnc19ieV9wYWNrYWdlKGNhY2hlcy5pdGVyKCkpOworICAgICAgICBsZXQgcGFja2FnZXMgPSBncm91cF9mbGFnc19ieV9wYWNrYWdlKGNhY2hlcy5pdGVyKCksIERFRkFVTFRfRklMRV9WRVJTSU9OKTsKIAogICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VzLml0ZXIoKSB7CiAgICAgICAgICAgICBsZXQgcGtnX25hbWUgPSBwa2cucGFja2FnZV9uYW1lOwpAQCAtMTg0LDYgKzIxNCw3IEBACiAgICAgICAgIGFzc2VydCEocGFja2FnZXNbMF0uZmxhZ19uYW1lcy5jb250YWlucygiZGlzYWJsZWRfcnciKSk7CiAgICAgICAgIGFzc2VydCEocGFja2FnZXNbMF0uZmxhZ19uYW1lcy5jb250YWlucygiZW5hYmxlZF9ybyIpKTsKICAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlc1swXS5ib29sZWFuX3N0YXJ0X2luZGV4LCAwKTsKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlc1swXS5maW5nZXJwcmludCwgMCk7CiAKICAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlc1sxXS5wYWNrYWdlX25hbWUsICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIik7CiAgICAgICAgIGFzc2VydF9lcSEocGFja2FnZXNbMV0ucGFja2FnZV9pZCwgMSk7CkBAIC0xOTIsNiArMjIzLDcgQEAKICAgICAgICAgYXNzZXJ0IShwYWNrYWdlc1sxXS5mbGFnX25hbWVzLmNvbnRhaW5zKCJkaXNhYmxlZF9ydyIpKTsKICAgICAgICAgYXNzZXJ0IShwYWNrYWdlc1sxXS5mbGFnX25hbWVzLmNvbnRhaW5zKCJlbmFibGVkX2ZpeGVkX3JvIikpOwogICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VzWzFdLmJvb2xlYW5fc3RhcnRfaW5kZXgsIDMpOworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VzWzBdLmZpbmdlcnByaW50LCAwKTsKIAogICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VzWzJdLnBhY2thZ2VfbmFtZSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiKTsKICAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlc1syXS5wYWNrYWdlX2lkLCAyKTsKQEAgLTE5OSw1ICsyMzEsNDkgQEAKICAgICAgICAgYXNzZXJ0IShwYWNrYWdlc1syXS5mbGFnX25hbWVzLmNvbnRhaW5zKCJlbmFibGVkX3J3IikpOwogICAgICAgICBhc3NlcnQhKHBhY2thZ2VzWzJdLmZsYWdfbmFtZXMuY29udGFpbnMoImVuYWJsZWRfZml4ZWRfcm8iKSk7CiAgICAgICAgIGFzc2VydF9lcSEocGFja2FnZXNbMl0uYm9vbGVhbl9zdGFydF9pbmRleCwgNik7CisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZXNbMl0uZmluZ2VycHJpbnQsIDApOworICAgIH0KKworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X2ZsYWdfcGFja2FnZV93aXRoX2ZpbmdlcnByaW50KCkgeworICAgICAgICBsZXQgY2FjaGVzID0gcGFyc2VfYWxsX3Rlc3RfZmxhZ3MoKTsKKyAgICAgICAgbGV0IHBhY2thZ2VzID0gZ3JvdXBfZmxhZ3NfYnlfcGFja2FnZShjYWNoZXMuaXRlcigpLCAyKTsKKworICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VzLml0ZXIoKSB7CisgICAgICAgICAgICBsZXQgcGtnX25hbWUgPSBwa2cucGFja2FnZV9uYW1lOworICAgICAgICAgICAgYXNzZXJ0X2VxIShwa2cuZmxhZ19uYW1lcy5sZW4oKSwgcGtnLmJvb2xlYW5fZmxhZ3MubGVuKCkpOworICAgICAgICAgICAgZm9yIHBmIGluIHBrZy5ib29sZWFuX2ZsYWdzLml0ZXIoKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0IShwa2cuZmxhZ19uYW1lcy5jb250YWlucyhwZi5uYW1lKCkpKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRfZXEhKHBmLnBhY2thZ2UoKSwgcGtnX25hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlcy5sZW4oKSwgMyk7CisKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlc1swXS5wYWNrYWdlX25hbWUsICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIik7CisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZXNbMF0ucGFja2FnZV9pZCwgMCk7CisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZXNbMF0uZmxhZ19uYW1lcy5sZW4oKSwgMyk7CisgICAgICAgIGFzc2VydCEocGFja2FnZXNbMF0uZmxhZ19uYW1lcy5jb250YWlucygiZW5hYmxlZF9ydyIpKTsKKyAgICAgICAgYXNzZXJ0IShwYWNrYWdlc1swXS5mbGFnX25hbWVzLmNvbnRhaW5zKCJkaXNhYmxlZF9ydyIpKTsKKyAgICAgICAgYXNzZXJ0IShwYWNrYWdlc1swXS5mbGFnX25hbWVzLmNvbnRhaW5zKCJlbmFibGVkX3JvIikpOworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VzWzBdLmJvb2xlYW5fc3RhcnRfaW5kZXgsIDApOworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VzWzBdLmZpbmdlcnByaW50LCAxNTI0ODk0ODUxMDU5MDE1ODA4NnU2NCk7CisKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlc1sxXS5wYWNrYWdlX25hbWUsICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIik7CisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZXNbMV0ucGFja2FnZV9pZCwgMSk7CisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZXNbMV0uZmxhZ19uYW1lcy5sZW4oKSwgMyk7CisgICAgICAgIGFzc2VydCEocGFja2FnZXNbMV0uZmxhZ19uYW1lcy5jb250YWlucygiZW5hYmxlZF9ybyIpKTsKKyAgICAgICAgYXNzZXJ0IShwYWNrYWdlc1sxXS5mbGFnX25hbWVzLmNvbnRhaW5zKCJkaXNhYmxlZF9ydyIpKTsKKyAgICAgICAgYXNzZXJ0IShwYWNrYWdlc1sxXS5mbGFnX25hbWVzLmNvbnRhaW5zKCJlbmFibGVkX2ZpeGVkX3JvIikpOworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VzWzFdLmJvb2xlYW5fc3RhcnRfaW5kZXgsIDMpOworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VzWzFdLmZpbmdlcnByaW50LCA0NDMxOTQwNTAyMjc0ODU3OTY0dTY0KTsKKworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VzWzJdLnBhY2thZ2VfbmFtZSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiKTsKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlc1syXS5wYWNrYWdlX2lkLCAyKTsKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlc1syXS5mbGFnX25hbWVzLmxlbigpLCAyKTsKKyAgICAgICAgYXNzZXJ0IShwYWNrYWdlc1syXS5mbGFnX25hbWVzLmNvbnRhaW5zKCJlbmFibGVkX3J3IikpOworICAgICAgICBhc3NlcnQhKHBhY2thZ2VzWzJdLmZsYWdfbmFtZXMuY29udGFpbnMoImVuYWJsZWRfZml4ZWRfcm8iKSk7CisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZXNbMl0uYm9vbGVhbl9zdGFydF9pbmRleCwgNik7CisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZXNbMl0uZmluZ2VycHJpbnQsIDE2MjMzMjI5OTE3NzExNjIyMzc1dTY0KTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvcGFja2FnZV90YWJsZS5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9wYWNrYWdlX3RhYmxlLnJzCmluZGV4IGM1MzYwMmYuLjUzZGFhN2YgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9wYWNrYWdlX3RhYmxlLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9wYWNrYWdlX3RhYmxlLnJzCkBAIC0xOCwxNCArMTgsMTMgQEAKIAogdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7CiAgICAgZ2V0X3RhYmxlX3NpemUsIFBhY2thZ2VUYWJsZSwgUGFja2FnZVRhYmxlSGVhZGVyLCBQYWNrYWdlVGFibGVOb2RlLCBTdG9yYWdlRmlsZVR5cGUsCi0gICAgRklMRV9WRVJTSU9OLAogfTsKIAogdXNlIGNyYXRlOjpzdG9yYWdlOjpGbGFnUGFja2FnZTsKIAotZm4gbmV3X2hlYWRlcihjb250YWluZXI6ICZzdHIsIG51bV9wYWNrYWdlczogdTMyKSAtPiBQYWNrYWdlVGFibGVIZWFkZXIgeworZm4gbmV3X2hlYWRlcihjb250YWluZXI6ICZzdHIsIG51bV9wYWNrYWdlczogdTMyLCB2ZXJzaW9uOiB1MzIpIC0+IFBhY2thZ2VUYWJsZUhlYWRlciB7CiAgICAgUGFja2FnZVRhYmxlSGVhZGVyIHsKLSAgICAgICAgdmVyc2lvbjogRklMRV9WRVJTSU9OLAorICAgICAgICB2ZXJzaW9uLAogICAgICAgICBjb250YWluZXI6IFN0cmluZzo6ZnJvbShjb250YWluZXIpLAogICAgICAgICBmaWxlX3R5cGU6IFN0b3JhZ2VGaWxlVHlwZTo6UGFja2FnZU1hcCBhcyB1OCwKICAgICAgICAgZmlsZV9zaXplOiAwLApAQCAtNDgsNiArNDcsNyBAQAogICAgICAgICBsZXQgbm9kZSA9IFBhY2thZ2VUYWJsZU5vZGUgewogICAgICAgICAgICAgcGFja2FnZV9uYW1lOiBTdHJpbmc6OmZyb20ocGFja2FnZS5wYWNrYWdlX25hbWUpLAogICAgICAgICAgICAgcGFja2FnZV9pZDogcGFja2FnZS5wYWNrYWdlX2lkLAorICAgICAgICAgICAgZmluZ2VycHJpbnQ6IHBhY2thZ2UuZmluZ2VycHJpbnQsCiAgICAgICAgICAgICBib29sZWFuX3N0YXJ0X2luZGV4OiBwYWNrYWdlLmJvb2xlYW5fc3RhcnRfaW5kZXgsCiAgICAgICAgICAgICBuZXh0X29mZnNldDogTm9uZSwKICAgICAgICAgfTsKQEAgLTU2LDIwICs1NiwyNiBAQAogICAgIH0KIH0KIAotcHViIGZuIGNyZWF0ZV9wYWNrYWdlX3RhYmxlKGNvbnRhaW5lcjogJnN0ciwgcGFja2FnZXM6ICZbRmxhZ1BhY2thZ2VdKSAtPiBSZXN1bHQ8UGFja2FnZVRhYmxlPiB7CitwdWIgZm4gY3JlYXRlX3BhY2thZ2VfdGFibGUoCisgICAgY29udGFpbmVyOiAmc3RyLAorICAgIHBhY2thZ2VzOiAmW0ZsYWdQYWNrYWdlXSwKKyAgICB2ZXJzaW9uOiB1MzIsCispIC0+IFJlc3VsdDxQYWNrYWdlVGFibGU+IHsKICAgICAvLyBjcmVhdGUgdGFibGUKICAgICBsZXQgbnVtX3BhY2thZ2VzID0gcGFja2FnZXMubGVuKCkgYXMgdTMyOwogICAgIGxldCBudW1fYnVja2V0cyA9IGdldF90YWJsZV9zaXplKG51bV9wYWNrYWdlcyk/OwotICAgIGxldCBtdXQgaGVhZGVyID0gbmV3X2hlYWRlcihjb250YWluZXIsIG51bV9wYWNrYWdlcyk7CisgICAgbGV0IG11dCBoZWFkZXIgPSBuZXdfaGVhZGVyKGNvbnRhaW5lciwgbnVtX3BhY2thZ2VzLCB2ZXJzaW9uKTsKICAgICBsZXQgbXV0IGJ1Y2tldHMgPSB2ZWMhW05vbmU7IG51bV9idWNrZXRzIGFzIHVzaXplXTsKLSAgICBsZXQgbXV0IG5vZGVfd3JhcHBlcnM6IFZlYzxfPiA9Ci0gICAgICAgIHBhY2thZ2VzLml0ZXIoKS5tYXAofHBrZ3wgUGFja2FnZVRhYmxlTm9kZVdyYXBwZXI6Om5ldyhwa2csIG51bV9idWNrZXRzKSkuY29sbGVjdCgpOworICAgIGxldCBtdXQgbm9kZV93cmFwcGVyczogVmVjPF8+ID0gcGFja2FnZXMKKyAgICAgICAgLml0ZXIoKQorICAgICAgICAubWFwKHxwa2c6ICZGbGFnUGFja2FnZTwnXz58IFBhY2thZ2VUYWJsZU5vZGVXcmFwcGVyOjpuZXcocGtnLCBudW1fYnVja2V0cykpCisgICAgICAgIC5jb2xsZWN0KCk7CiAKICAgICAvLyBpbml0aWFsaXplIGFsbCBoZWFkZXIgZmllbGRzCiAgICAgaGVhZGVyLmJ1Y2tldF9vZmZzZXQgPSBoZWFkZXIuaW50b19ieXRlcygpLmxlbigpIGFzIHUzMjsKICAgICBoZWFkZXIubm9kZV9vZmZzZXQgPSBoZWFkZXIuYnVja2V0X29mZnNldCArIG51bV9idWNrZXRzICogNDsKICAgICBoZWFkZXIuZmlsZV9zaXplID0gaGVhZGVyLm5vZGVfb2Zmc2V0Ci0gICAgICAgICsgbm9kZV93cmFwcGVycy5pdGVyKCkubWFwKHx4fCB4Lm5vZGUuaW50b19ieXRlcygpLmxlbigpKS5zdW06Ojx1c2l6ZT4oKSBhcyB1MzI7CisgICAgICAgICsgbm9kZV93cmFwcGVycy5pdGVyKCkubWFwKHx4fCB4Lm5vZGUuaW50b19ieXRlcyh2ZXJzaW9uKS5sZW4oKSkuc3VtOjo8dXNpemU+KCkgYXMgdTMyOwogCiAgICAgLy8gc29ydCBub2RlX3dyYXBwZXJzIGJ5IGJ1Y2tldCBpbmRleCBmb3IgZWZmaWNpZW5jeQogICAgIG5vZGVfd3JhcHBlcnMuc29ydF9ieSh8YSwgYnwgYS5idWNrZXRfaW5kZXguY21wKCZiLmJ1Y2tldF9pbmRleCkpOwpAQCAtODcsNyArOTMsNyBAQAogICAgICAgICBpZiBidWNrZXRzW25vZGVfYnVja2V0X2lkeCBhcyB1c2l6ZV0uaXNfbm9uZSgpIHsKICAgICAgICAgICAgIGJ1Y2tldHNbbm9kZV9idWNrZXRfaWR4IGFzIHVzaXplXSA9IFNvbWUob2Zmc2V0KTsKICAgICAgICAgfQotICAgICAgICBvZmZzZXQgKz0gbm9kZV93cmFwcGVyc1tpXS5ub2RlLmludG9fYnl0ZXMoKS5sZW4oKSBhcyB1MzI7CisgICAgICAgIG9mZnNldCArPSBub2RlX3dyYXBwZXJzW2ldLm5vZGUuaW50b19ieXRlcyh2ZXJzaW9uKS5sZW4oKSBhcyB1MzI7CiAKICAgICAgICAgaWYgbGV0IFNvbWUoaW5kZXgpID0gbmV4dF9ub2RlX2J1Y2tldF9pZHggewogICAgICAgICAgICAgaWYgaW5kZXggPT0gbm9kZV9idWNrZXRfaWR4IHsKQEAgLTEwNiwyMSArMTEyLDU5IEBACiAKICNbY2ZnKHRlc3QpXQogbW9kIHRlc3RzIHsKKyAgICB1c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OntERUZBVUxUX0ZJTEVfVkVSU0lPTiwgTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT059OworCiAgICAgdXNlIHN1cGVyOjoqOwogICAgIHVzZSBjcmF0ZTo6c3RvcmFnZTo6e2dyb3VwX2ZsYWdzX2J5X3BhY2thZ2UsIHRlc3RzOjpwYXJzZV9hbGxfdGVzdF9mbGFnc307CiAKLSAgICBwdWIgZm4gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZV9mcm9tX3NvdXJjZSgpIC0+IFJlc3VsdDxQYWNrYWdlVGFibGU+IHsKKyAgICBwdWIgZm4gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZV9mcm9tX3NvdXJjZSh2ZXJzaW9uOiB1MzIpIC0+IFJlc3VsdDxQYWNrYWdlVGFibGU+IHsKICAgICAgICAgbGV0IGNhY2hlcyA9IHBhcnNlX2FsbF90ZXN0X2ZsYWdzKCk7Ci0gICAgICAgIGxldCBwYWNrYWdlcyA9IGdyb3VwX2ZsYWdzX2J5X3BhY2thZ2UoY2FjaGVzLml0ZXIoKSk7Ci0gICAgICAgIGNyZWF0ZV9wYWNrYWdlX3RhYmxlKCJtb2NrdXAiLCAmcGFja2FnZXMpCisgICAgICAgIGxldCBwYWNrYWdlcyA9IGdyb3VwX2ZsYWdzX2J5X3BhY2thZ2UoY2FjaGVzLml0ZXIoKSwgdmVyc2lvbik7CisgICAgICAgIGNyZWF0ZV9wYWNrYWdlX3RhYmxlKCJtb2NrdXAiLCAmcGFja2FnZXMsIHZlcnNpb24pCiAgICAgfQogCiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRoZSB0YWJsZSBjcmVhdGlvbiBhbmQgZWFjaCBmaWVsZAotICAgIGZuIHRlc3RfdGFibGVfY29udGVudHMoKSB7Ci0gICAgICAgIGxldCBwYWNrYWdlX3RhYmxlID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZV9mcm9tX3NvdXJjZSgpOwotICAgICAgICBhc3NlcnQhKHBhY2thZ2VfdGFibGUuaXNfb2soKSk7Ci0gICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX3RhYmxlID0gYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OnRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoKTsKLSAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlX3RhYmxlLnVud3JhcCgpLCBleHBlY3RlZF9wYWNrYWdlX3RhYmxlKTsKKyAgICBmbiB0ZXN0X3RhYmxlX2NvbnRlbnRzX2RlZmF1bHRfdmVyc2lvbigpIHsKKyAgICAgICAgbGV0IHBhY2thZ2VfdGFibGVfcmVzdWx0ID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZV9mcm9tX3NvdXJjZShERUZBVUxUX0ZJTEVfVkVSU0lPTik7CisgICAgICAgIGFzc2VydCEocGFja2FnZV90YWJsZV9yZXN1bHQuaXNfb2soKSk7CisgICAgICAgIGxldCBwYWNrYWdlX3RhYmxlID0gcGFja2FnZV90YWJsZV9yZXN1bHQudW53cmFwKCk7CisKKyAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfdGFibGUgPQorICAgICAgICAgICAgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OnRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoREVGQVVMVF9GSUxFX1ZFUlNJT04pOworCisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZV90YWJsZS5oZWFkZXIsIGV4cGVjdGVkX3BhY2thZ2VfdGFibGUuaGVhZGVyKTsKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlX3RhYmxlLmJ1Y2tldHMsIGV4cGVjdGVkX3BhY2thZ2VfdGFibGUuYnVja2V0cyk7CisgICAgICAgIGZvciAobm9kZSwgZXhwZWN0ZWRfbm9kZSkgaW4KKyAgICAgICAgICAgIHBhY2thZ2VfdGFibGUubm9kZXMuaXRlcigpLnppcChleHBlY3RlZF9wYWNrYWdlX3RhYmxlLm5vZGVzLml0ZXIoKSkKKyAgICAgICAgeworICAgICAgICAgICAgYXNzZXJ0X2VxIShub2RlLnBhY2thZ2VfbmFtZSwgZXhwZWN0ZWRfbm9kZS5wYWNrYWdlX25hbWUpOworICAgICAgICAgICAgYXNzZXJ0X2VxIShub2RlLnBhY2thZ2VfaWQsIGV4cGVjdGVkX25vZGUucGFja2FnZV9pZCk7CisgICAgICAgICAgICBhc3NlcnRfZXEhKG5vZGUuYm9vbGVhbl9zdGFydF9pbmRleCwgZXhwZWN0ZWRfbm9kZS5ib29sZWFuX3N0YXJ0X2luZGV4KTsKKyAgICAgICAgICAgIGFzc2VydF9lcSEobm9kZS5uZXh0X29mZnNldCwgZXhwZWN0ZWRfbm9kZS5uZXh0X29mZnNldCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAjW3Rlc3RdCisgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGhlIHRhYmxlIGNyZWF0aW9uIGFuZCBlYWNoIGZpZWxkCisgICAgZm4gdGVzdF90YWJsZV9jb250ZW50c19tYXhfdmVyc2lvbigpIHsKKyAgICAgICAgbGV0IHBhY2thZ2VfdGFibGVfcmVzdWx0ID0KKyAgICAgICAgICAgIGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGVfZnJvbV9zb3VyY2UoTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04pOworICAgICAgICBhc3NlcnQhKHBhY2thZ2VfdGFibGVfcmVzdWx0LmlzX29rKCkpOworICAgICAgICBsZXQgcGFja2FnZV90YWJsZSA9IHBhY2thZ2VfdGFibGVfcmVzdWx0LnVud3JhcCgpOworCisgICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX3RhYmxlID0KKyAgICAgICAgICAgIGFjb25maWdfc3RvcmFnZV9maWxlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OKTsKKworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VfdGFibGUuaGVhZGVyLCBleHBlY3RlZF9wYWNrYWdlX3RhYmxlLmhlYWRlcik7CisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZV90YWJsZS5idWNrZXRzLCBleHBlY3RlZF9wYWNrYWdlX3RhYmxlLmJ1Y2tldHMpOworICAgICAgICBmb3IgKG5vZGUsIGV4cGVjdGVkX25vZGUpIGluCisgICAgICAgICAgICBwYWNrYWdlX3RhYmxlLm5vZGVzLml0ZXIoKS56aXAoZXhwZWN0ZWRfcGFja2FnZV90YWJsZS5ub2Rlcy5pdGVyKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydF9lcSEobm9kZS5wYWNrYWdlX25hbWUsIGV4cGVjdGVkX25vZGUucGFja2FnZV9uYW1lKTsKKyAgICAgICAgICAgIGFzc2VydF9lcSEobm9kZS5wYWNrYWdlX2lkLCBleHBlY3RlZF9ub2RlLnBhY2thZ2VfaWQpOworICAgICAgICAgICAgYXNzZXJ0X2VxIShub2RlLmJvb2xlYW5fc3RhcnRfaW5kZXgsIGV4cGVjdGVkX25vZGUuYm9vbGVhbl9zdGFydF9pbmRleCk7CisgICAgICAgICAgICBhc3NlcnRfZXEhKG5vZGUubmV4dF9vZmZzZXQsIGV4cGVjdGVkX25vZGUubmV4dF9vZmZzZXQpOworICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy90ZXN0LnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy90ZXN0LnJzCmluZGV4IDc0MDljZGEuLjEwZGEyNTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvdGVzdC5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3Rlc3QucnMKQEAgLTI2Niw2ICsyNjYsNyBAQAogICAgICAgICAgICAgICAgIHJlYWRlcjogQm94OjpuZXcoaW5jbHVkZV9ieXRlcyEoIi4uL3Rlc3RzL3JlYWRfb25seV90ZXN0LnZhbHVlcyIpLmFzX3NsaWNlKCkpLAogICAgICAgICAgICAgfV0sCiAgICAgICAgICAgICBjcmF0ZTo6Y29tbWFuZHM6OkRFRkFVTFRfRkxBR19QRVJNSVNTSU9OLAorICAgICAgICAgICAgdHJ1ZSwKICAgICAgICAgKQogICAgICAgICAudW53cmFwKCk7CiAgICAgICAgIGFjb25maWdfcHJvdG9zOjpwYXJzZWRfZmxhZ3M6OnRyeV9mcm9tX2JpbmFyeV9wcm90bygmYnl0ZXMpLnVud3JhcCgpCkBAIC0yOTAsNiArMjkxLDI2IEBACiAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICBjcmF0ZTo6Y29tbWFuZHM6OkRFRkFVTFRfRkxBR19QRVJNSVNTSU9OLAorICAgICAgICAgICAgdHJ1ZSwKKyAgICAgICAgKQorICAgICAgICAudW53cmFwKCk7CisgICAgICAgIGFjb25maWdfcHJvdG9zOjpwYXJzZWRfZmxhZ3M6OnRyeV9mcm9tX2JpbmFyeV9wcm90bygmYnl0ZXMpLnVud3JhcCgpCisgICAgfQorCisgICAgcHViIGZuIHBhcnNlX3NlY29uZF9wYWNrYWdlX2ZsYWdzKCkgLT4gUHJvdG9QYXJzZWRGbGFncyB7CisgICAgICAgIGxldCBieXRlcyA9IGNyYXRlOjpjb21tYW5kczo6cGFyc2VfZmxhZ3MoCisgICAgICAgICAgICAiY29tLmFuZHJvaWQuYWNvbmZpZy5zZWNvbmRfdGVzdCIsCisgICAgICAgICAgICBTb21lKCJzeXN0ZW0iKSwKKyAgICAgICAgICAgIHZlYyFbSW5wdXQgeworICAgICAgICAgICAgICAgIHNvdXJjZTogInRlc3RzL3Rlc3Rfc2Vjb25kX3BhY2thZ2UuYWNvbmZpZyIudG9fc3RyaW5nKCksCisgICAgICAgICAgICAgICAgcmVhZGVyOiBCb3g6Om5ldyhpbmNsdWRlX2J5dGVzISgiLi4vdGVzdHMvdGVzdF9zZWNvbmRfcGFja2FnZS5hY29uZmlnIikuYXNfc2xpY2UoKSksCisgICAgICAgICAgICB9XSwKKyAgICAgICAgICAgIHZlYyFbSW5wdXQgeworICAgICAgICAgICAgICAgIHNvdXJjZTogInRlc3RzL3RoaXJkLnZhbHVlcyIudG9fc3RyaW5nKCksCisgICAgICAgICAgICAgICAgcmVhZGVyOiBCb3g6Om5ldyhpbmNsdWRlX2J5dGVzISgiLi4vdGVzdHMvdGhpcmQudmFsdWVzIikuYXNfc2xpY2UoKSksCisgICAgICAgICAgICB9XSwKKyAgICAgICAgICAgIGNyYXRlOjpjb21tYW5kczo6REVGQVVMVF9GTEFHX1BFUk1JU1NJT04sCisgICAgICAgICAgICB0cnVlLAogICAgICAgICApCiAgICAgICAgIC51bndyYXAoKTsKICAgICAgICAgYWNvbmZpZ19wcm90b3M6OnBhcnNlZF9mbGFnczo6dHJ5X2Zyb21fYmluYXJ5X3Byb3RvKCZieXRlcykudW53cmFwKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZW1wbGF0ZXMvRmVhdHVyZUZsYWdzLmphdmEudGVtcGxhdGUgYi90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL0ZlYXR1cmVGbGFncy5qYXZhLnRlbXBsYXRlCmluZGV4IDM4YzhmMTMuLmQyNzk5YjIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZW1wbGF0ZXMvRmVhdHVyZUZsYWdzLmphdmEudGVtcGxhdGUKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3RlbXBsYXRlcy9GZWF0dXJlRmxhZ3MuamF2YS50ZW1wbGF0ZQpAQCAtMTksNCArMTksNCBAQAoge3sgLWVuZGlmIH19CiAgICAgYm9vbGVhbiB7aXRlbS5tZXRob2RfbmFtZX0oKTsKIHt7IC1lbmRmb3IgfX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL0ZlYXR1cmVGbGFnc0ltcGwuamF2YS50ZW1wbGF0ZSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZW1wbGF0ZXMvRmVhdHVyZUZsYWdzSW1wbC5qYXZhLnRlbXBsYXRlCmluZGV4IGJjMDFhYTQuLmI2MDVlNzIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZW1wbGF0ZXMvRmVhdHVyZUZsYWdzSW1wbC5qYXZhLnRlbXBsYXRlCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZW1wbGF0ZXMvRmVhdHVyZUZsYWdzSW1wbC5qYXZhLnRlbXBsYXRlCkBAIC0xLDY2ICsxLDg2IEBACiBwYWNrYWdlIHtwYWNrYWdlX25hbWV9Owoge3sgLWlmIG5vdCBpc190ZXN0X21vZGUgfX0KLXt7IGlmIG5vdCBsaWJyYXJ5X2V4cG9ydGVkLSB9fQore3sgLWlmIGFsbG93X2luc3RydW1lbnRhdGlvbiB9fQore3sgaWYgbm90IGxpYnJhcnlfZXhwb3J0ZWQtIH19eyMtIG9ubHkgbmV3IHN0b3JhZ2UgZm9yIHByb2QgbW9kZSAjfQogLy8gVE9ETyhiLzMwMzc3MzA1NSk6IFJlbW92ZSB0aGUgYW5ub3RhdGlvbiBhZnRlciBhY2Nlc3MgaXNzdWUgaXMgcmVzb2x2ZWQuCiBpbXBvcnQgYW5kcm9pZC5jb21wYXQuYW5ub3RhdGlvbi5VbnN1cHBvcnRlZEFwcFVzYWdlOwote3sgLWVuZGlmIH19Ci0KIHt7IC1pZiBydW50aW1lX2xvb2t1cF9yZXF1aXJlZCB9fQotaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuRGV2aWNlQ29uZmlnOwotaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuRGV2aWNlQ29uZmlnLlByb3BlcnRpZXM7Ci0KLQote3sgLWlmIG5vdCBsaWJyYXJ5X2V4cG9ydGVkIH19Ci17eyAtaWYgYWxsb3dfaW5zdHJ1bWVudGF0aW9uIH19Ci1pbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuU3RvcmFnZUludGVybmFsUmVhZGVyOworaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Cit7eyBpZiBpc19wbGF0Zm9ybV9jb250YWluZXIgfX0KK2ltcG9ydCBhbmRyb2lkLm9zLmZsYWdnaW5nLlBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbDsKK3t7IC1lbHNlIH19CitpbXBvcnQgYW5kcm9pZC5vcy5mbGFnZ2luZy5BY29uZmlnUGFja2FnZUludGVybmFsOwore3sgLWVuZGlmIH19CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIHt7IC1lbmRpZiB9fQote3sgLWVuZGlmIH19Ci0KLXt7IC1lbmRpZiB9fQogLyoqIEBoaWRlICovCiBwdWJsaWMgZmluYWwgY2xhc3MgRmVhdHVyZUZsYWdzSW1wbCBpbXBsZW1lbnRzIEZlYXR1cmVGbGFncyBcewoge3sgLWlmIHJ1bnRpbWVfbG9va3VwX3JlcXVpcmVkIH19Ci17eyAtZm9yIG5hbWVzcGFjZV93aXRoX2ZsYWdzIGluIG5hbWVzcGFjZV9mbGFncyB9fQotICAgIHByaXZhdGUgc3RhdGljIHZvbGF0aWxlIGJvb2xlYW4ge25hbWVzcGFjZV93aXRoX2ZsYWdzLm5hbWVzcGFjZX1faXNfY2FjaGVkID0gZmFsc2U7Ci17eyAtZW5kZm9yLSB9fQotCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJ7cGFja2FnZV9uYW1lfS5GZWF0dXJlRmxhZ3NJbXBsIjsKKyAgICBwcml2YXRlIHN0YXRpYyB2b2xhdGlsZSBib29sZWFuIGlzQ2FjaGVkID0gZmFsc2U7CiB7eyBmb3IgZmxhZyBpbiBmbGFnX2VsZW1lbnRzIH19Ci17ey0gaWYgZmxhZy5pc19yZWFkX3dyaXRlIH19Cit7eyAtaWYgZmxhZy5pc19yZWFkX3dyaXRlIH19CiAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiB7ZmxhZy5tZXRob2RfbmFtZX0gPSB7ZmxhZy5kZWZhdWx0X3ZhbHVlfTsKIHt7IC1lbmRpZiB9fQoge3sgLWVuZGZvciB9fQote3sgLWlmIG5vdCBsaWJyYXJ5X2V4cG9ydGVkIH19Ci17eyAtaWYgYWxsb3dfaW5zdHJ1bWVudGF0aW9uIH19Ci0gICAgU3RvcmFnZUludGVybmFsUmVhZGVyIHJlYWRlcjsKLSAgICBib29sZWFuIHJlYWRGcm9tTmV3U3RvcmFnZTsKLQotICAgIGJvb2xlYW4gdXNlTmV3U3RvcmFnZVZhbHVlQW5kRGlzY2FyZE9sZCA9IGZhbHNlOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFRBRyA9ICJBY29uZmlnSmF2YUNvZGVnZW4iOwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBTVUNDRVNTX0xPRyA9ICJzdWNjZXNzOiAlcyB2YWx1ZSBtYXRjaGVzIjsKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgTUlTTUFUQ0hfTE9HID0gImVycm9yOiAlcyB2YWx1ZSBtaXNtYXRjaCwgbmV3IHN0b3JhZ2UgdmFsdWUgaXMgJXMsIG9sZCBzdG9yYWdlIHZhbHVlIGlzICVzIjsKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgRVJST1JfTE9HID0gImVycm9yOiBmYWlsZWQgdG8gcmVhZCBmbGFnIHZhbHVlIjsKIAogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgXHsKLSAgICAgICAgaWYgKHJlYWRlciAhPSBudWxsKSByZXR1cm47Ci0gICAgICAgIGlmIChEZXZpY2VDb25maWcuZ2V0Qm9vbGVhbigiY29yZV9leHBlcmltZW50c190ZWFtX2ludGVybmFsIiwgImNvbS5hbmRyb2lkLnByb3ZpZGVycy5zZXR0aW5ncy5zdG9yYWdlX3Rlc3RfbWlzc2lvbl8xIiwgZmFsc2UpKSBcewotICAgICAgICAgICAgcmVhZEZyb21OZXdTdG9yYWdlID0gdHJ1ZTsKLSAgICAgICAgICAgIHRyeSBcewotICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyBTdG9yYWdlSW50ZXJuYWxSZWFkZXIoIntjb250YWluZXJ9IiwgIntwYWNrYWdlX25hbWV9Iik7Ci0gICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgXHsKLSAgICAgICAgICAgICAgICByZWFkZXIgPSBudWxsOwotICAgICAgICAgICAgfQorICAgICAgICB0cnkgXHsKK3t7IGlmIGlzX3BsYXRmb3JtX2NvbnRhaW5lciB9fQorICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsIHJlYWRlciA9IFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5sb2FkKCJ7Y29udGFpbmVyfSIsICJ7cGFja2FnZV9uYW1lfSIsIHtwYWNrYWdlX2ZpbmdlcnByaW50fSk7Cit7eyAtZWxzZSB9fQorICAgICAgICAgICAgQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbCByZWFkZXIgPSBBY29uZmlnUGFja2FnZUludGVybmFsLmxvYWQoIntjb250YWluZXJ9IiwgIntwYWNrYWdlX25hbWV9Iiwge3BhY2thZ2VfZmluZ2VycHJpbnR9KTsKK3t7IC1lbmRpZiB9fQorICAgICAgICB7eyAtZm9yIG5hbWVzcGFjZV93aXRoX2ZsYWdzIGluIG5hbWVzcGFjZV9mbGFncyB9fQorICAgICAgICB7eyAtZm9yIGZsYWcgaW4gbmFtZXNwYWNlX3dpdGhfZmxhZ3MuZmxhZ3MgfX0KKyAgICAgICAge3sgLWlmIGZsYWcuaXNfcmVhZF93cml0ZSB9fQorICAgICAgICAgICAge2ZsYWcubWV0aG9kX25hbWV9ID0gcmVhZGVyLmdldEJvb2xlYW5GbGFnVmFsdWUoe2ZsYWcuZmxhZ19vZmZzZXR9KTsKKyAgICAgICAge3sgLWVuZGlmIH19CisgICAgICAgIHt7IC1lbmRmb3IgfX0KKyAgICAgICAge3sgLWVuZGZvciB9fQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgXHsKKyAgICAgICAgICAgIExvZy5lKFRBRywgZS50b1N0cmluZygpKTsKKyAgICAgICAgfSBjYXRjaCAoTm9DbGFzc0RlZkZvdW5kRXJyb3IgZSkgXHsKKyAgICAgICAgICAgIC8vIGZvciBtYWlubGluZSBtb2R1bGUgcnVubmluZyBvbiBvbGRlciBkZXZpY2VzLgorICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgcmVwbGFjZXMgdG8gdmVyc2lvbiBjaGVjaywgYWZ0ZXIgdGhlIHZlcnNpb24gYnVtcC4KKyAgICAgICAgICAgIExvZy5lKFRBRywgZS50b1N0cmluZygpKTsKICAgICAgICAgfQotCi0gICAgICAgIHVzZU5ld1N0b3JhZ2VWYWx1ZUFuZERpc2NhcmRPbGQgPQotICAgICAgICAgICAgRGV2aWNlQ29uZmlnLmdldEJvb2xlYW4oImNvcmVfZXhwZXJpbWVudHNfdGVhbV9pbnRlcm5hbCIsICJjb20uYW5kcm9pZC5wcm92aWRlcnMuc2V0dGluZ3MudXNlX25ld19zdG9yYWdlX3ZhbHVlIiwgZmFsc2UpOworICAgICAgICBpc0NhY2hlZCA9IHRydWU7CiAgICAgfQotCit7eyAtZW5kaWYgfX17Iy0gZW5kIG9mIHJ1bnRpbWVfbG9va3VwX3JlcXVpcmVkICN9Cit7eyAtZm9yIGZsYWcgaW4gZmxhZ19lbGVtZW50cyB9fQorICAgIEBPdmVycmlkZQorICAgIEBjb20uYW5kcm9pZC5hY29uZmlnLmFubm90YXRpb25zLkFjb25maWdGbGFnQWNjZXNzb3IKKyAgICBAVW5zdXBwb3J0ZWRBcHBVc2FnZQorICAgIHB1YmxpYyBib29sZWFuIHtmbGFnLm1ldGhvZF9uYW1lfSgpIFx7Cit7eyAtaWYgZmxhZy5pc19yZWFkX3dyaXRlIH19CisgICAgICAgIGlmICghaXNDYWNoZWQpIFx7CisgICAgICAgICAgICBpbml0KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHtmbGFnLm1ldGhvZF9uYW1lfTsKK3t7IC1lbHNlIH19CisgICAgICAgIHJldHVybiB7ZmxhZy5kZWZhdWx0X3ZhbHVlfTsKIHt7IC1lbmRpZiB9fQorICAgIH0KK3t7IGVuZGZvciB9fQorfQore3sgLWVsc2UtIH19eyMtIGRldmljZSBjb25maWcgZm9yIGV4cHJvdGVkIG1vZGUgI30KK2ltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKK2ltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkRldmljZUNvbmZpZzsKK2ltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkRldmljZUNvbmZpZy5Qcm9wZXJ0aWVzOworLyoqIEBoaWRlICovCitwdWJsaWMgZmluYWwgY2xhc3MgRmVhdHVyZUZsYWdzSW1wbCBpbXBsZW1lbnRzIEZlYXR1cmVGbGFncyBcewore3sgLWZvciBuYW1lc3BhY2Vfd2l0aF9mbGFncyBpbiBuYW1lc3BhY2VfZmxhZ3MgfX0KKyAgICBwcml2YXRlIHN0YXRpYyB2b2xhdGlsZSBib29sZWFuIHtuYW1lc3BhY2Vfd2l0aF9mbGFncy5uYW1lc3BhY2V9X2lzX2NhY2hlZCA9IGZhbHNlOwore3sgLWVuZGZvci0gfX0KK3t7IGZvciBmbGFnIGluIGZsYWdfZWxlbWVudHMgfX0KK3t7IC1pZiBmbGFnLmlzX3JlYWRfd3JpdGUgfX0KKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHtmbGFnLm1ldGhvZF9uYW1lfSA9IHtmbGFnLmRlZmF1bHRfdmFsdWV9Owoge3sgLWVuZGlmIH19Cit7eyAtZW5kZm9yIH19CiB7eyBmb3IgbmFtZXNwYWNlX3dpdGhfZmxhZ3MgaW4gbmFtZXNwYWNlX2ZsYWdzIH19CiAgICAgcHJpdmF0ZSB2b2lkIGxvYWRfb3ZlcnJpZGVzX3tuYW1lc3BhY2Vfd2l0aF9mbGFncy5uYW1lc3BhY2V9KCkgXHsKKyAgICAgICAgZmluYWwgbG9uZyBpZGVudCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICB0cnkgXHsKICAgICAgICAgICAgIFByb3BlcnRpZXMgcHJvcGVydGllcyA9IERldmljZUNvbmZpZy5nZXRQcm9wZXJ0aWVzKCJ7bmFtZXNwYWNlX3dpdGhfZmxhZ3MubmFtZXNwYWNlfSIpOwoge3sgLWZvciBmbGFnIGluIG5hbWVzcGFjZV93aXRoX2ZsYWdzLmZsYWdzIH19CkBAIC03OCwzNSArOTgsNzMgQEAKICAgICAgICAgICAgICAgICArICJmbGFnIGRlY2xhcmF0aW9uLiIsCiAgICAgICAgICAgICAgICAgZQogICAgICAgICAgICAgKTsKKyAgICAgICAgfSBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZSkgXHsKKyAgICAgICAgICAgIC8vIGZvciBpc29sYXRlZCBwcm9jZXNzIGNhc2UsIHNraXAgbG9hZGluZyBmbGFnIHZhbHVlIGZyb20gdGhlIHN0b3JhZ2UsIHVzZSB0aGUgZGVmYXVsdAorICAgICAgICB9IGZpbmFsbHkgXHsKKyAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkZW50KTsKICAgICAgICAgfQogICAgICAgICB7bmFtZXNwYWNlX3dpdGhfZmxhZ3MubmFtZXNwYWNlfV9pc19jYWNoZWQgPSB0cnVlOwote3sgLWlmIG5vdCBsaWJyYXJ5X2V4cG9ydGVkIH19Ci17eyAtaWYgYWxsb3dfaW5zdHJ1bWVudGF0aW9uIH19Ci0gICAgICAgIGluaXQoKTsKLSAgICAgICAgaWYgKHJlYWRGcm9tTmV3U3RvcmFnZSAmJiByZWFkZXIgIT0gbnVsbCkgXHsKLSAgICAgICAgICAgIGJvb2xlYW4gdmFsOwotICAgICAgICAgICAgdHJ5IFx7Ci17eyAtZm9yIGZsYWcgaW4gbmFtZXNwYWNlX3dpdGhfZmxhZ3MuZmxhZ3MgfX0KLXt7IC1pZiBmbGFnLmlzX3JlYWRfd3JpdGUgfX0KKyAgICB9Cit7eyBlbmRmb3ItIH19Cit7eyAtZm9yIGZsYWcgaW4gZmxhZ19lbGVtZW50cyB9fQorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIHtmbGFnLm1ldGhvZF9uYW1lfSgpIFx7CisgICAgICAgIGlmICghe2ZsYWcuZGV2aWNlX2NvbmZpZ19uYW1lc3BhY2V9X2lzX2NhY2hlZCkgXHsKKyAgICAgICAgICAgIGxvYWRfb3ZlcnJpZGVzX3tmbGFnLmRldmljZV9jb25maWdfbmFtZXNwYWNlfSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB7ZmxhZy5tZXRob2RfbmFtZX07CisgICAgfQore3sgZW5kZm9yIH19Cit9Cit7eyAtZW5kaWYtIH19IHsjLSBlbmQgZXhwb3J0ZWQgbW9kZSAjfQore3sgZWxzZSB9fSB7Iy0gZWxzZSBmb3IgYWxsb3dfaW5zdHJ1bWVudGF0aW9uIGlzIG5vdCBlbmFibGVkICN9Cit7eyBpZiBub3QgbGlicmFyeV9leHBvcnRlZC0gfX0KKy8vIFRPRE8oYi8zMDM3NzMwNTUpOiBSZW1vdmUgdGhlIGFubm90YXRpb24gYWZ0ZXIgYWNjZXNzIGlzc3VlIGlzIHJlc29sdmVkLgoraW1wb3J0IGFuZHJvaWQuY29tcGF0LmFubm90YXRpb24uVW5zdXBwb3J0ZWRBcHBVc2FnZTsKK3t7IC1lbmRpZiB9fQogCi0gICAgICAgICAgICAgICAgdmFsID0gcmVhZGVyLmdldEJvb2xlYW5GbGFnVmFsdWUoe2ZsYWcuZmxhZ19vZmZzZXR9KTsKLSAgICAgICAgICAgICAgICBpZiAodmFsICE9IHtmbGFnLm1ldGhvZF9uYW1lfSkgXHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBTdHJpbmcuZm9ybWF0KE1JU01BVENIX0xPRywgIntmbGFnLm1ldGhvZF9uYW1lfSIsIHZhbCwge2ZsYWcubWV0aG9kX25hbWV9KSk7Ci0gICAgICAgICAgICAgICAgfQore3sgLWlmIHJ1bnRpbWVfbG9va3VwX3JlcXVpcmVkIH19CitpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CitpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5EZXZpY2VDb25maWc7CitpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5EZXZpY2VDb25maWcuUHJvcGVydGllczsKK3t7IC1lbmRpZiB9fQorLyoqIEBoaWRlICovCitwdWJsaWMgZmluYWwgY2xhc3MgRmVhdHVyZUZsYWdzSW1wbCBpbXBsZW1lbnRzIEZlYXR1cmVGbGFncyBcewore3sgLWlmIHJ1bnRpbWVfbG9va3VwX3JlcXVpcmVkIH19Cit7eyAtZm9yIG5hbWVzcGFjZV93aXRoX2ZsYWdzIGluIG5hbWVzcGFjZV9mbGFncyB9fQorICAgIHByaXZhdGUgc3RhdGljIHZvbGF0aWxlIGJvb2xlYW4ge25hbWVzcGFjZV93aXRoX2ZsYWdzLm5hbWVzcGFjZX1faXNfY2FjaGVkID0gZmFsc2U7Cit7eyAtZW5kZm9yLSB9fQogCi0gICAgICAgICAgICAgICAgaWYgKHVzZU5ld1N0b3JhZ2VWYWx1ZUFuZERpc2NhcmRPbGQpIFx7Ci0gICAgICAgICAgICAgICAgICAgIHtmbGFnLm1ldGhvZF9uYW1lfSA9IHZhbDsKLSAgICAgICAgICAgICAgICB9Ci0KK3t7IGZvciBmbGFnIGluIGZsYWdfZWxlbWVudHMgfX0KK3t7LSBpZiBmbGFnLmlzX3JlYWRfd3JpdGUgfX0KKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHtmbGFnLm1ldGhvZF9uYW1lfSA9IHtmbGFnLmRlZmF1bHRfdmFsdWV9Owoge3sgLWVuZGlmIH19CiB7eyAtZW5kZm9yIH19Ci0gICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgXHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCBFUlJPUl9MT0csIGUpOwotICAgICAgICAgICAgfQore3sgZm9yIG5hbWVzcGFjZV93aXRoX2ZsYWdzIGluIG5hbWVzcGFjZV9mbGFncyB9fQorICAgIHByaXZhdGUgdm9pZCBsb2FkX292ZXJyaWRlc197bmFtZXNwYWNlX3dpdGhfZmxhZ3MubmFtZXNwYWNlfSgpIFx7CisgICAgICAgIGZpbmFsIGxvbmcgaWRlbnQgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKKyAgICAgICAgdHJ5IFx7CisgICAgICAgICAgICBQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBEZXZpY2VDb25maWcuZ2V0UHJvcGVydGllcygie25hbWVzcGFjZV93aXRoX2ZsYWdzLm5hbWVzcGFjZX0iKTsKK3t7IC1mb3IgZmxhZyBpbiBuYW1lc3BhY2Vfd2l0aF9mbGFncy5mbGFncyB9fQore3sgLWlmIGZsYWcuaXNfcmVhZF93cml0ZSB9fQorICAgICAgICAgICAge2ZsYWcubWV0aG9kX25hbWV9ID0KKyAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmdldEJvb2xlYW4oRmxhZ3MuRkxBR197ZmxhZy5mbGFnX25hbWVfY29uc3RhbnRfc3VmZml4fSwge2ZsYWcuZGVmYXVsdF92YWx1ZX0pOwore3sgLWVuZGlmIH19Cit7eyAtZW5kZm9yIH19CisgICAgICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIFx7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAiQ2Fubm90IHJlYWQgdmFsdWUgZnJvbSBuYW1lc3BhY2Uge25hbWVzcGFjZV93aXRoX2ZsYWdzLm5hbWVzcGFjZX0gIgorICAgICAgICAgICAgICAgICsgImZyb20gRGV2aWNlQ29uZmlnLiBJdCBjb3VsZCBiZSB0aGF0IHRoZSBjb2RlIHVzaW5nIGZsYWcgIgorICAgICAgICAgICAgICAgICsgImV4ZWN1dGVkIGJlZm9yZSBTZXR0aW5nc1Byb3ZpZGVyIGluaXRpYWxpemF0aW9uLiBQbGVhc2UgdXNlICIKKyAgICAgICAgICAgICAgICArICJmaXhlZCByZWFkLW9ubHkgZmxhZyBieSBhZGRpbmcgaXNfZml4ZWRfcmVhZF9vbmx5OiB0cnVlIGluICIKKyAgICAgICAgICAgICAgICArICJmbGFnIGRlY2xhcmF0aW9uLiIsCisgICAgICAgICAgICAgICAgZQorICAgICAgICAgICAgKTsKKyAgICAgICAgfSBmaW5hbGx5IFx7CisgICAgICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZGVudCk7CiAgICAgICAgIH0KLXt7IC1lbmRpZiB9fQote3sgLWVuZGlmIH19Ci0gICAgfQorICAgICAgICB7bmFtZXNwYWNlX3dpdGhfZmxhZ3MubmFtZXNwYWNlfV9pc19jYWNoZWQgPSB0cnVlOworfQoge3sgZW5kZm9yLSB9fQoge3sgLWVuZGlmIH19eyMtIGVuZCBvZiBydW50aW1lX2xvb2t1cF9yZXF1aXJlZCAjfQoge3sgLWZvciBmbGFnIGluIGZsYWdfZWxlbWVudHMgfX0KQEAgLTEyNyw4ICsxODUsOCBAQAogICAgIH0KIHt7IGVuZGZvciB9fQogfQote3sgZWxzZSB9fQoteyMtIEdlbmVyYXRlIG9ubHkgc3R1YiBpZiBpbiB0ZXN0IG1vZGUgI30KK3t7IGVuZGlmfX0geyMtIGVuZGlmIGZvciBhbGxvd19pbnN0cnVtZW50YXRpb24gI30KK3t7IGVsc2UgfX0geyMtIEdlbmVyYXRlIG9ubHkgc3R1YiBpZiBpbiB0ZXN0IG1vZGUgI30KIC8qKiBAaGlkZSAqLwogcHVibGljIGZpbmFsIGNsYXNzIEZlYXR1cmVGbGFnc0ltcGwgaW1wbGVtZW50cyBGZWF0dXJlRmxhZ3MgXHsKIHt7IGZvciBmbGFnIGluIGZsYWdfZWxlbWVudHMgfX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZW1wbGF0ZXMvY3BwX3NvdXJjZV9maWxlLnRlbXBsYXRlIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3RlbXBsYXRlcy9jcHBfc291cmNlX2ZpbGUudGVtcGxhdGUKaW5kZXggODUyYjkwNS4uOWJlNTllMCAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3RlbXBsYXRlcy9jcHBfc291cmNlX2ZpbGUudGVtcGxhdGUKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3RlbXBsYXRlcy9jcHBfc291cmNlX2ZpbGUudGVtcGxhdGUKQEAgLTc2LDI3ICs3NiwyOCBAQAogICAgICAgICAgICAgOiBib29sZWFuX3N0YXJ0X2luZGV4XygpCiAgICAgICAgICAgICB7eyAtZW5kaWYgfX0KICAgICAgICAgICAgICwgZmxhZ192YWx1ZV9maWxlXyhudWxscHRyKQotICAgICAgICAgICAgLCByZWFkX2Zyb21fbmV3X3N0b3JhZ2VfKGZhbHNlKSBcewotCi0gICAgICAgICAgICBpZiAoYWNjZXNzKCIvbWV0YWRhdGEvYWNvbmZpZy9ib290L2VuYWJsZV9vbmx5X25ld19zdG9yYWdlIiwgRl9PSykgPT0gMCkgXHsKLSAgICAgICAgICAgICAgIHJlYWRfZnJvbV9uZXdfc3RvcmFnZV8gPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXJlYWRfZnJvbV9uZXdfc3RvcmFnZV8pIFx7Ci0gICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAsIHBhY2thZ2VfZXhpc3RzX2luX3N0b3JhZ2VfKHRydWUpIFx7CiAKICAgICAgICAgICAgIGF1dG8gcGFja2FnZV9tYXBfZmlsZSA9IGFjb25maWdfc3RvcmFnZTo6Z2V0X21hcHBlZF9maWxlKAogICAgICAgICAgICAgICAgICAie2NvbnRhaW5lcn0iLAogICAgICAgICAgICAgICAgICBhY29uZmlnX3N0b3JhZ2U6OlN0b3JhZ2VGaWxlVHlwZTo6cGFja2FnZV9tYXApOwogICAgICAgICAgICAgaWYgKCFwYWNrYWdlX21hcF9maWxlLm9rKCkpIFx7CiAgICAgICAgICAgICAgICAgQUxPR0UoImVycm9yOiBmYWlsZWQgdG8gZ2V0IHBhY2thZ2UgbWFwIGZpbGU6ICVzIiwgcGFja2FnZV9tYXBfZmlsZS5lcnJvcigpLmNfc3RyKCkpOworICAgICAgICAgICAgICAgIHBhY2thZ2VfZXhpc3RzX2luX3N0b3JhZ2VfID0gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBhdXRvIGNvbnRleHQgPSBhY29uZmlnX3N0b3JhZ2U6OmdldF9wYWNrYWdlX3JlYWRfY29udGV4dCgKICAgICAgICAgICAgICAgICAqKnBhY2thZ2VfbWFwX2ZpbGUsICJ7cGFja2FnZX0iKTsKICAgICAgICAgICAgIGlmICghY29udGV4dC5vaygpKSBcewogICAgICAgICAgICAgICAgIEFMT0dFKCJlcnJvcjogZmFpbGVkIHRvIGdldCBwYWNrYWdlIHJlYWQgY29udGV4dDogJXMiLCBjb250ZXh0LmVycm9yKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgcGFja2FnZV9leGlzdHNfaW5fc3RvcmFnZV8gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghKGNvbnRleHQtPnBhY2thZ2VfZXhpc3RzKSkgXHsKKyAgICAgICAgICAgICAgICBwYWNrYWdlX2V4aXN0c19pbl9zdG9yYWdlXyA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gY2FjaGUgcGFja2FnZSBib29sZWFuIGZsYWcgc3RhcnQgaW5kZXgKQEAgLTExMCw2ICsxMTEsOCBAQAogICAgICAgICAgICAgICAgIGFjb25maWdfc3RvcmFnZTo6U3RvcmFnZUZpbGVUeXBlOjpmbGFnX3ZhbCk7CiAgICAgICAgICAgICBpZiAoIWZsYWdfdmFsdWVfZmlsZS5vaygpKSBcewogICAgICAgICAgICAgICAgIEFMT0dFKCJlcnJvcjogZmFpbGVkIHRvIGdldCBmbGFnIHZhbHVlIGZpbGU6ICVzIiwgZmxhZ192YWx1ZV9maWxlLmVycm9yKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgcGFja2FnZV9leGlzdHNfaW5fc3RvcmFnZV8gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIGNhY2hlIGZsYWcgdmFsdWUgZmlsZQpAQCAtMTI1LDIyICsxMjgsMTkgQEAKICAgICAgICAgICAgIHt7IC1pZiBpdGVtLnJlYWR3cml0ZSB9fQogICAgICAgICAgICAgaWYgKGNhY2hlX1t7aXRlbS5yZWFkd3JpdGVfaWR4fV0gPT0gLTEpIFx7CiAgICAgICAgICAgICB7eyBpZiBhbGxvd19pbnN0cnVtZW50YXRpb24tIH19Ci0gICAgICAgICAgICAgICAgaWYgKHJlYWRfZnJvbV9uZXdfc3RvcmFnZV8pIFx7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBhY29uZmlnX3N0b3JhZ2U6OmdldF9ib29sZWFuX2ZsYWdfdmFsdWUoCi0gICAgICAgICAgICAgICAgICAgICAgICAqZmxhZ192YWx1ZV9maWxlXywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW5fc3RhcnRfaW5kZXhfICsge2l0ZW0uZmxhZ19vZmZzZXR9KTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLm9rKCkpIFx7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBTE9HRSgiZXJyb3I6IGZhaWxlZCB0byByZWFkIGZsYWcgdmFsdWU6ICVzIiwgdmFsdWUuZXJyb3IoKS5jX3N0cigpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGNhY2hlX1t7aXRlbS5yZWFkd3JpdGVfaWR4fV0gPSAqdmFsdWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIFx7Ci0gICAgICAgICAgICAgICAgICAgIGNhY2hlX1t7aXRlbS5yZWFkd3JpdGVfaWR4fV0gPSBzZXJ2ZXJfY29uZmlndXJhYmxlX2ZsYWdzOjpHZXRTZXJ2ZXJDb25maWd1cmFibGVGbGFnKAotICAgICAgICAgICAgICAgICAgICAgICAgImFjb25maWdfZmxhZ3Mue2l0ZW0uZGV2aWNlX2NvbmZpZ19uYW1lc3BhY2V9IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJ7aXRlbS5kZXZpY2VfY29uZmlnX2ZsYWd9IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJ7aXRlbS5kZWZhdWx0X3ZhbHVlfSIpID09ICJ0cnVlIjsKKyAgICAgICAgICAgICAgICBpZiAoIXBhY2thZ2VfZXhpc3RzX2luX3N0b3JhZ2VfKSBceworICAgICAgICAgICAgICAgICAgICByZXR1cm4ge2l0ZW0uZGVmYXVsdF92YWx1ZX07CiAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYXV0byB2YWx1ZSA9IGFjb25maWdfc3RvcmFnZTo6Z2V0X2Jvb2xlYW5fZmxhZ192YWx1ZSgKKyAgICAgICAgICAgICAgICAgICAgKmZsYWdfdmFsdWVfZmlsZV8sCisgICAgICAgICAgICAgICAgICAgIGJvb2xlYW5fc3RhcnRfaW5kZXhfICsge2l0ZW0uZmxhZ19vZmZzZXR9KTsKKworICAgICAgICAgICAgICAgIGlmICghdmFsdWUub2soKSkgXHsKKyAgICAgICAgICAgICAgICAgICAgQUxPR0UoImVycm9yOiBmYWlsZWQgdG8gcmVhZCBmbGFnIHZhbHVlOiAlcyIsIHZhbHVlLmVycm9yKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY2FjaGVfW3tpdGVtLnJlYWR3cml0ZV9pZHh9XSA9ICp2YWx1ZTsKICAgICAgICAgICAgIHt7IC1lbHNlLSB9fQogICAgICAgICAgICAgICAgIGNhY2hlX1t7aXRlbS5yZWFkd3JpdGVfaWR4fV0gPSBzZXJ2ZXJfY29uZmlndXJhYmxlX2ZsYWdzOjpHZXRTZXJ2ZXJDb25maWd1cmFibGVGbGFnKAogICAgICAgICAgICAgICAgICAgICAiYWNvbmZpZ19mbGFncy57aXRlbS5kZXZpY2VfY29uZmlnX25hbWVzcGFjZX0iLApAQCAtMTY3LDcgKzE2Nyw3IEBACiAKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPGFjb25maWdfc3RvcmFnZTo6TWFwcGVkU3RvcmFnZUZpbGU+IGZsYWdfdmFsdWVfZmlsZV87CiAKLSAgICAgICAgYm9vbCByZWFkX2Zyb21fbmV3X3N0b3JhZ2VfOworICAgICAgICBib29sIHBhY2thZ2VfZXhpc3RzX2luX3N0b3JhZ2VfOwogICAgIHt7IC1lbmRpZiB9fQogICAgIHt7IC1lbmRpZiB9fQogCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL3J1c3QudGVtcGxhdGUgYi90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL3J1c3QudGVtcGxhdGUKaW5kZXggYzJmMTYyZi4uZTllMTAzMiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3RlbXBsYXRlcy9ydXN0LnRlbXBsYXRlCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZW1wbGF0ZXMvcnVzdC50ZW1wbGF0ZQpAQCAtMTAsMTAgKzEwLDYgQEAKIAoge3sgaWYgaGFzX3JlYWR3cml0ZS0gfX0KIHt7IGlmIGFsbG93X2luc3RydW1lbnRhdGlvbiB9fQotc3RhdGljIFJFQURfRlJPTV9ORVdfU1RPUkFHRTogTGF6eUxvY2s8Ym9vbD4gPSBMYXp5TG9jazo6bmV3KHx8IHVuc2FmZSBcewotICAgIFBhdGg6Om5ldygiL21ldGFkYXRhL2Fjb25maWcvYm9vdC9lbmFibGVfb25seV9uZXdfc3RvcmFnZSIpLmV4aXN0cygpCi19KTsKLQogc3RhdGljIFBBQ0tBR0VfT0ZGU0VUOiBMYXp5TG9jazxSZXN1bHQ8T3B0aW9uPHUzMj4sIEFjb25maWdTdG9yYWdlRXJyb3I+PiA9IExhenlMb2NrOjpuZXcofHwgdW5zYWZlIFx7CiAgICAgZ2V0X21hcHBlZF9zdG9yYWdlX2ZpbGUoIntjb250YWluZXJ9IiwgU3RvcmFnZUZpbGVUeXBlOjpQYWNrYWdlTWFwKQogICAgIC5hbmRfdGhlbih8cGFja2FnZV9tYXB8IGdldF9wYWNrYWdlX3JlYWRfY29udGV4dCgmcGFja2FnZV9tYXAsICJ7cGFja2FnZX0iKSkKQEAgLTMxLDQ1ICsyNyw0MSBAQAoge3sgaWYgYWxsb3dfaW5zdHJ1bWVudGF0aW9uIH19CiBzdGF0aWMgQ0FDSEVEX3tmbGFnLm5hbWV9OiBMYXp5TG9jazxib29sPiA9IExhenlMb2NrOjpuZXcofHwgXHsKIAotICAgIGlmICpSRUFEX0ZST01fTkVXX1NUT1JBR0UgXHsKLSAgICAgICAgLy8gVGhpcyB3aWxsIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4gU3Vic2VxdWVudCBjYWxscyBhZnRlciB0aGUgZmlyc3QgYXJlIG5vb3BzLgotICAgICAgICBsb2dnZXI6OmluaXQoCi0gICAgICAgICAgICBsb2dnZXI6OkNvbmZpZzo6ZGVmYXVsdCgpCi0gICAgICAgICAgICAgICAgLndpdGhfdGFnX29uX2RldmljZSgiYWNvbmZpZ19ydXN0X2NvZGVnZW4iKQotICAgICAgICAgICAgICAgIC53aXRoX21heF9sZXZlbChMZXZlbEZpbHRlcjo6SW5mbykpOworICAgIC8vIFRoaXMgd2lsbCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIFN1YnNlcXVlbnQgY2FsbHMgYWZ0ZXIgdGhlIGZpcnN0IGFyZSBub29wcy4KKyAgICBsb2dnZXI6OmluaXQoCisgICAgICAgIGxvZ2dlcjo6Q29uZmlnOjpkZWZhdWx0KCkKKyAgICAgICAgICAgIC53aXRoX3RhZ19vbl9kZXZpY2UoImFjb25maWdfcnVzdF9jb2RlZ2VuIikKKyAgICAgICAgICAgIC53aXRoX21heF9sZXZlbChMZXZlbEZpbHRlcjo6SW5mbykpOwogCi0gICAgICAgIGxldCBmbGFnX3ZhbHVlX3Jlc3VsdCA9IEZMQUdfVkFMX01BUAotICAgICAgICAgICAgLmFzX3JlZigpCi0gICAgICAgICAgICAubWFwX2Vycih8ZXJyfCBmb3JtYXQhKCJmYWlsZWQgdG8gZ2V0IGZsYWcgdmFsIG1hcDogXHtlcnJ9IikpCi0gICAgICAgICAgICAuYW5kX3RoZW4ofGZsYWdfdmFsX21hcHwgXHsKLSAgICAgICAgICAgICAgICBQQUNLQUdFX09GRlNFVAotICAgICAgICAgICAgICAgICAgICAuYXNfcmVmKCkKLSAgICAgICAgICAgICAgICAgICAgLm1hcF9lcnIofGVycnwgZm9ybWF0ISgiZmFpbGVkIHRvIGdldCBwYWNrYWdlIHJlYWQgb2Zmc2V0OiBce2Vycn0iKSkKLSAgICAgICAgICAgICAgICAgICAgLmFuZF90aGVuKHxwYWNrYWdlX29mZnNldHwgXHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoIHBhY2thZ2Vfb2Zmc2V0IFx7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU29tZShvZmZzZXQpID0+IFx7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9ib29sZWFuX2ZsYWdfdmFsdWUoJmZsYWdfdmFsX21hcCwgb2Zmc2V0ICsge2ZsYWcuZmxhZ19vZmZzZXR9KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcF9lcnIofGVycnwgZm9ybWF0ISgiZmFpbGVkIHRvIGdldCBmbGFnOiBce2Vycn0iKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUgPT4gRXJyKCJubyBjb250ZXh0IGZvdW5kIGZvciBwYWNrYWdlICd7cGFja2FnZX0nIi50b19zdHJpbmcoKSkKKyAgICBsZXQgZmxhZ192YWx1ZV9yZXN1bHQgPSBGTEFHX1ZBTF9NQVAKKyAgICAgICAgLmFzX3JlZigpCisgICAgICAgIC5tYXBfZXJyKHxlcnJ8IGZvcm1hdCEoImZhaWxlZCB0byBnZXQgZmxhZyB2YWwgbWFwOiBce2Vycn0iKSkKKyAgICAgICAgLmFuZF90aGVuKHxmbGFnX3ZhbF9tYXB8IFx7CisgICAgICAgICAgICBQQUNLQUdFX09GRlNFVAorICAgICAgICAgICAgICAgIC5hc19yZWYoKQorICAgICAgICAgICAgICAgIC5tYXBfZXJyKHxlcnJ8IGZvcm1hdCEoImZhaWxlZCB0byBnZXQgcGFja2FnZSByZWFkIG9mZnNldDogXHtlcnJ9IikpCisgICAgICAgICAgICAgICAgLmFuZF90aGVuKHxwYWNrYWdlX29mZnNldHwgXHsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2ggcGFja2FnZV9vZmZzZXQgXHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNvbWUob2Zmc2V0KSA9PiBceworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9ib29sZWFuX2ZsYWdfdmFsdWUoJmZsYWdfdmFsX21hcCwgb2Zmc2V0ICsge2ZsYWcuZmxhZ19vZmZzZXR9KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwX2Vycih8ZXJyfCBmb3JtYXQhKCJmYWlsZWQgdG8gZ2V0IGZsYWc6IFx7ZXJyfSIpKQorICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUgPT4gXHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2chKExldmVsOjpFcnJvciwgIm5vIGNvbnRleHQgZm91bmQgZm9yIHBhY2thZ2Uge3BhY2thZ2V9Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXJyKGZvcm1hdCEoImZhaWxlZCB0byBmbGFnIHBhY2thZ2Uge3BhY2thZ2V9IikpCiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgbWF0Y2ggZmxhZ192YWx1ZV9yZXN1bHQgXHsKLSAgICAgICAgICAgIE9rKGZsYWdfdmFsdWUpID0+IFx7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZsYWdfdmFsdWU7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgRXJyKGVycikgPT4gXHsKLSAgICAgICAgICAgICAgICBsb2chKExldmVsOjpFcnJvciwgImFjb25maWdfcnVzdF9jb2RlZ2VuOiBlcnJvcjogXHtlcnJ9Iik7Ci0gICAgICAgICAgICAgICAgcGFuaWMhKCJmYWlsZWQgdG8gcmVhZCBmbGFnIHZhbHVlOiBce2Vycn0iKTsKLSAgICAgICAgICAgIH0KKyAgICBtYXRjaCBmbGFnX3ZhbHVlX3Jlc3VsdCBceworICAgICAgICBPayhmbGFnX3ZhbHVlKSA9PiBceworICAgICAgICAgICAgcmV0dXJuIGZsYWdfdmFsdWU7CisgICAgICAgIH0sCisgICAgICAgIEVycihlcnIpID0+IFx7CisgICAgICAgICAgICBsb2chKExldmVsOjpFcnJvciwgImFjb25maWdfcnVzdF9jb2RlZ2VuOiBlcnJvcjogXHtlcnJ9Iik7CisgICAgICAgICAgICByZXR1cm4ge2ZsYWcuZGVmYXVsdF92YWx1ZX07CiAgICAgICAgIH0KLSAgICB9IGVsc2UgXHsKLSAgICAgICAgZmxhZ3NfcnVzdDo6R2V0U2VydmVyQ29uZmlndXJhYmxlRmxhZygKLSAgICAgICAgICAgICJhY29uZmlnX2ZsYWdzLntmbGFnLmRldmljZV9jb25maWdfbmFtZXNwYWNlfSIsCi0gICAgICAgICAgICAie2ZsYWcuZGV2aWNlX2NvbmZpZ19mbGFnfSIsCi0gICAgICAgICAgICAie2ZsYWcuZGVmYXVsdF92YWx1ZX0iKSA9PSAidHJ1ZSIKICAgICB9CiAKIH0pOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3Rlc3RzL3Rlc3Rfc2Vjb25kX3BhY2thZ2UuYWNvbmZpZyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZXN0cy90ZXN0X3NlY29uZF9wYWNrYWdlLmFjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg4YmM5NgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZXN0cy90ZXN0X3NlY29uZF9wYWNrYWdlLmFjb25maWcKQEAgLTAsMCArMSwxMCBAQAorcGFja2FnZTogImNvbS5hbmRyb2lkLmFjb25maWcuc2Vjb25kX3Rlc3QiCitjb250YWluZXI6ICJzeXN0ZW0iCisKK2ZsYWcgeworICAgIG5hbWU6ICJ0ZXN0aW5nX2ZsYWciCisgICAgbmFtZXNwYWNlOiAiYW5vdGhlcl9uYW1lc3BhY2UiCisgICAgZGVzY3JpcHRpb246ICJUaGlzIGlzIGEgZmxhZyBmb3IgdGVzdGluZy4iCisgICAgYnVnOiAiMTIzIgorfQorCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvdGVzdHMvdGhpcmQudmFsdWVzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3Rlc3RzL3RoaXJkLnZhbHVlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzU4MzJhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3Rlc3RzL3RoaXJkLnZhbHVlcwpAQCAtMCwwICsxLDYgQEAKK2ZsYWdfdmFsdWUgeworICAgIHBhY2thZ2U6ICJjb20uYW5kcm9pZC5hY29uZmlnLnNlY29uZF90ZXN0IgorICAgIG5hbWU6ICJ0ZXN0aW5nX2ZsYWciCisgICAgc3RhdGU6IERJU0FCTEVECisgICAgcGVybWlzc2lvbjogUkVBRF9XUklURQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy9BbmRyb2lkLmJwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy9BbmRyb2lkLmJwCmluZGV4IGRkYTdhNTUuLmJkZjk2ZWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvQW5kcm9pZC5icAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL0FuZHJvaWQuYnAKQEAgLTYxLDggKzYxLDEyIEBACiAgICAgbmFtZTogImxpYmFjb25maWdfamF2YV9ob3N0X2RldmljZV9wYXRoc19zcmMiLAogICAgIHNyY3M6IFsic3JjL0hvc3REZXZpY2VQcm90b3NUZW1wbGF0ZS5qYXZhIl0sCiAgICAgb3V0OiBbIkhvc3REZXZpY2VQcm90b3MuamF2YSJdLAotICAgIHRvb2xfZmlsZXM6IFsicGFydGl0aW9uX2Fjb25maWdfZmxhZ3NfcGF0aHMudHh0Il0sCi0gICAgY21kOiAic2VkIC1lICcvVEVNUExBVEUve3IkKGxvY2F0aW9uIHBhcnRpdGlvbl9hY29uZmlnX2ZsYWdzX3BhdGhzLnR4dCknIC1lICdkfScgJChpbikgPiAkKG91dCkiLAorICAgIHRvb2xfZmlsZXM6IFsKKyAgICAgICAgInBhcnRpdGlvbl9hY29uZmlnX2ZsYWdzX3BhdGhzLnR4dCIsCisgICAgICAgICJtYWlubGluZV9hY29uZmlnX2ZsYWdzX3BhdGhzLnR4dCIsCisgICAgXSwKKyAgICBjbWQ6ICJzZWQgLWUgJy9URU1QTEFURS97ciQobG9jYXRpb24gcGFydGl0aW9uX2Fjb25maWdfZmxhZ3NfcGF0aHMudHh0KScgLWUgJ2R9JyAkKGluKSA+ICQob3V0KS50bXAgJiYgIiArCisgICAgInNlZCAtZSAnL01BSU5MSU5FX1Qve3IkKGxvY2F0aW9uIG1haW5saW5lX2Fjb25maWdfZmxhZ3NfcGF0aHMudHh0KScgLWUgJ2R9JyAkKG91dCkudG1wID4gJChvdXQpIiwKIH0KIAogamF2YV9saWJyYXJ5X2hvc3QgewpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy9tYWlubGluZV9hY29uZmlnX2ZsYWdzX3BhdGhzLnR4dCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvbWFpbmxpbmVfYWNvbmZpZ19mbGFnc19wYXRocy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY3M2E4NAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvbWFpbmxpbmVfYWNvbmZpZ19mbGFnc19wYXRocy50eHQKQEAgLTAsMCArMSwyMCBAQAorIi9hcGV4L2NvbS5hbmRyb2lkLmFkc2VydmljZXMvZXRjL2Fjb25maWdfZmxhZ3MucGIiLAorIi9hcGV4L2NvbS5hbmRyb2lkLmFwcHNlYXJjaC9ldGMvYWNvbmZpZ19mbGFncy5wYiIsCisiL2FwZXgvY29tLmFuZHJvaWQuYXJ0L2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiwKKyIvYXBleC9jb20uYW5kcm9pZC5idHNlcnZpY2VzL2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiwKKyIvYXBleC9jb20uYW5kcm9pZC5jZWxsYnJvYWRjYXN0L2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiwKKyIvYXBleC9jb20uYW5kcm9pZC5jb25maWdpbmZyYXN0cnVjdHVyZS9ldGMvYWNvbmZpZ19mbGFncy5wYiIsCisiL2FwZXgvY29tLmFuZHJvaWQuY29uc2NyeXB0L2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiwKKyIvYXBleC9jb20uYW5kcm9pZC5kZXZpY2Vsb2NrL2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiwKKyIvYXBleC9jb20uYW5kcm9pZC5oZWFsdGhmaXRuZXNzL2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiwKKyIvYXBleC9jb20uYW5kcm9pZC5pcHNlYy9ldGMvYWNvbmZpZ19mbGFncy5wYiIsCisiL2FwZXgvY29tLmFuZHJvaWQubWVkaWEvZXRjL2Fjb25maWdfZmxhZ3MucGIiLAorIi9hcGV4L2NvbS5hbmRyb2lkLm1lZGlhcHJvdmlkZXIvZXRjL2Fjb25maWdfZmxhZ3MucGIiLAorIi9hcGV4L2NvbS5hbmRyb2lkLm9uZGV2aWNlcGVyc29uYWxpemF0aW9uL2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiwKKyIvYXBleC9jb20uYW5kcm9pZC5vcy5zdGF0c2QvZXRjL2Fjb25maWdfZmxhZ3MucGIiLAorIi9hcGV4L2NvbS5hbmRyb2lkLnBlcm1pc3Npb24vZXRjL2Fjb25maWdfZmxhZ3MucGIiLAorIi9hcGV4L2NvbS5hbmRyb2lkLnByb2ZpbGluZy9ldGMvYWNvbmZpZ19mbGFncy5wYiIsCisiL2FwZXgvY29tLmFuZHJvaWQudGV0aGVyaW5nL2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiwKKyIvYXBleC9jb20uYW5kcm9pZC51d2IvZXRjL2Fjb25maWdfZmxhZ3MucGIiLAorIi9hcGV4L2NvbS5hbmRyb2lkLnZpcnQvZXRjL2Fjb25maWdfZmxhZ3MucGIiLAorIi9hcGV4L2NvbS5hbmRyb2lkLndpZmkvZXRjL2Fjb25maWdfZmxhZ3MucGIiLApkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy9wYXJ0aXRpb25fYWNvbmZpZ19mbGFnc19wYXRocy50eHQgYi90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL3BhcnRpdGlvbl9hY29uZmlnX2ZsYWdzX3BhdGhzLnR4dAppbmRleCAxNDBjZDIxLi5lOTk3ZTNkIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL3BhcnRpdGlvbl9hY29uZmlnX2ZsYWdzX3BhdGhzLnR4dAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL3BhcnRpdGlvbl9hY29uZmlnX2ZsYWdzX3BhdGhzLnR4dApAQCAtMSw0ICsxLDMgQEAKICIvc3lzdGVtL2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiwKLSIvc3lzdGVtX2V4dC9ldGMvYWNvbmZpZ19mbGFncy5wYiIsCiAiL3Byb2R1Y3QvZXRjL2Fjb25maWdfZmxhZ3MucGIiLAogIi92ZW5kb3IvZXRjL2Fjb25maWdfZmxhZ3MucGIiLApkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy9zcmMvSG9zdERldmljZVByb3Rvc1RlbXBsYXRlLmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL3NyYy9Ib3N0RGV2aWNlUHJvdG9zVGVtcGxhdGUuamF2YQppbmRleCA4NDQyMzJiLi5lN2QwYTc2IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL3NyYy9Ib3N0RGV2aWNlUHJvdG9zVGVtcGxhdGUuamF2YQorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL3NyYy9Ib3N0RGV2aWNlUHJvdG9zVGVtcGxhdGUuamF2YQpAQCAtMjUsNiArMjUsNyBAQAogCiAvKioKICAqIEEgaG9zdCBsaWIgdGhhdCBjYW4gcmVhZCBhbGwgYWNvbmZpZyBwcm90byBmaWxlIHBhdGhzIG9uIGEgZ2l2ZW4gZGV2aWNlLgorICogVGhpcyBsaWIgaXMgb25seSBhdmFpbGFibGUgb24gZGV2aWNlIHdpdGggcm9vdCBhY2Nlc3MgKHVzZXJkZWJ1Zy9lbmcpLgogICovCiBwdWJsaWMgY2xhc3MgSG9zdERldmljZVByb3RvcyB7CiAgICAgLyoqCkBAIC0zOSw4ICs0MCwxMyBAQAogICAgICAgICBURU1QTEFURQogICAgIH07CiAKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nW10gTUFJTkxJTkVfUEFUSFMgPSB7CisgICAgICAgIE1BSU5MSU5FX1QKKyAgICB9OworCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFQRVhfRElSID0gIi9hcGV4IjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVDVVJTSVZFTFlfTElTVF9BUEVYX0RJUl9DT01NQU5EID0gInNoZWxsIGZpbmQgL2FwZXggfCBncmVwIGFjb25maWdfZmxhZ3MiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSRUNVUlNJVkVMWV9MSVNUX0FQRVhfRElSX0NPTU1BTkQgPQorICAgICAgICAic2hlbGwgc3UgMCBmaW5kIC9hcGV4IHwgZ3JlcCBhY29uZmlnX2ZsYWdzIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVBFWF9BQ09ORklHX1BBVEhfU1VGRklYID0gIi9ldGMvYWNvbmZpZ19mbGFncy5wYiI7CiAKIApAQCAtNTMsNyArNTksOCBAQAogICAgICAgICBTdHJpbmcgYWRiQ29tbWFuZE91dHB1dCA9IGFkYkNvbW1hbmRFeGVjdXRvci5leGVjdXRlQWRiQ29tbWFuZCgKICAgICAgICAgICAgIFJFQ1VSU0lWRUxZX0xJU1RfQVBFWF9ESVJfQ09NTUFORCk7CiAKLSAgICAgICAgaWYgKGFkYkNvbW1hbmRPdXRwdXQgPT0gbnVsbCkgeworICAgICAgICBpZiAoYWRiQ29tbWFuZE91dHB1dCA9PSBudWxsIHx8IGFkYkNvbW1hbmRPdXRwdXQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBwYXRocy5hZGRBbGwoQXJyYXlzLmFzTGlzdChNQUlOTElORV9QQVRIUykpOwogICAgICAgICAgICAgcmV0dXJuIHBhdGhzOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvc3JjL2xpYi5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvc3JjL2xpYi5ycwppbmRleCA5YWI5Y2VhLi44ODcxYjRmIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL3NyYy9saWIucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy9zcmMvbGliLnJzCkBAIC02MiwxMyArNjIsMTIgQEAKIAogICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X3JlYWRfcGFydGl0aW9uX3BhdGhzKCkgewotICAgICAgICBhc3NlcnRfZXEhKHJlYWRfcGFydGl0aW9uX3BhdGhzKCkubGVuKCksIDQpOworICAgICAgICBhc3NlcnRfZXEhKHJlYWRfcGFydGl0aW9uX3BhdGhzKCkubGVuKCksIDMpOwogCiAgICAgICAgIGFzc2VydF9lcSEoCiAgICAgICAgICAgICByZWFkX3BhcnRpdGlvbl9wYXRocygpLAogICAgICAgICAgICAgdmVjIVsKICAgICAgICAgICAgICAgICBQYXRoQnVmOjpmcm9tKCIvc3lzdGVtL2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiksCi0gICAgICAgICAgICAgICAgUGF0aEJ1Zjo6ZnJvbSgiL3N5c3RlbV9leHQvZXRjL2Fjb25maWdfZmxhZ3MucGIiKSwKICAgICAgICAgICAgICAgICBQYXRoQnVmOjpmcm9tKCIvcHJvZHVjdC9ldGMvYWNvbmZpZ19mbGFncy5wYiIpLAogICAgICAgICAgICAgICAgIFBhdGhCdWY6OmZyb20oIi92ZW5kb3IvZXRjL2Fjb25maWdfZmxhZ3MucGIiKQogICAgICAgICAgICAgXQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2ZsYWdzL0FuZHJvaWQuYnAgYi90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3MvQW5kcm9pZC5icAppbmRleCBlMzI3Y2VkLi40YzFmZDRlIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3MvQW5kcm9pZC5icAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3MvQW5kcm9pZC5icApAQCAtNDQsMyArNDQsOCBAQAogICAgIG5hbWU6ICJsaWJhY29uZmlnX2ZsYWdzX2NjIiwKICAgICBhY29uZmlnX2RlY2xhcmF0aW9uczogImFjb25maWdfZmxhZ3MiLAogfQorCitqYXZhX2Fjb25maWdfbGlicmFyeSB7CisgICAgbmFtZTogImFjb25maWdfZmxhZ3NfamF2YSIsCisgICAgYWNvbmZpZ19kZWNsYXJhdGlvbnM6ICJhY29uZmlnX2ZsYWdzIiwKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19mbGFncy9mbGFncy5hY29uZmlnIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2ZsYWdzL2ZsYWdzLmFjb25maWcKaW5kZXggZGI4YjFiNy4uMGEwMDRjYSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2ZsYWdzL2ZsYWdzLmFjb25maWcKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2ZsYWdzL2ZsYWdzLmFjb25maWcKQEAgLTcsMyArNywxMCBAQAogICBidWc6ICIzMTIyMzU1OTYiCiAgIGRlc2NyaXB0aW9uOiAiV2hlbiBlbmFibGVkLCBhY29uZmlnIGZsYWdzIGFyZSByZWFkIGZyb20gdGhlIG5ldyBhY29uZmlnIHN0b3JhZ2Ugb25seS4iCiB9CisKK2ZsYWcgeworICBuYW1lOiAiZW5hYmxlX2Fjb25maWdkX2Zyb21fbWFpbmxpbmUiCisgIG5hbWVzcGFjZTogImNvcmVfZXhwZXJpbWVudHNfdGVhbV9pbnRlcm5hbCIKKyAgYnVnOiAiMzY5ODA4ODA1IgorICBkZXNjcmlwdGlvbjogIldoZW4gZW5hYmxlZCwgbGF1bmNoIGFjb25maWdkIGZyb20gY29uZmlnIGluZnJhIG1vZHVsZS4iCit9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3Mvc3JjL2xpYi5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19mbGFncy9zcmMvbGliLnJzCmluZGV4IGE2MDdlZmIuLjJlODkxMjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19mbGFncy9zcmMvbGliLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19mbGFncy9zcmMvbGliLnJzCkBAIC0zNCw2ICszNCwxMSBAQAogICAgIHB1YiBmbiBlbmFibGVfb25seV9uZXdfc3RvcmFnZSgpIC0+IGJvb2wgewogICAgICAgICBhY29uZmlnX2ZsYWdzX3J1c3Q6OmVuYWJsZV9vbmx5X25ld19zdG9yYWdlKCkKICAgICB9CisKKyAgICAvLy8gUmV0dXJucyB0aGUgdmFsdWUgZm9yIHRoZSBlbmFibGVfYWNvbmZpZ2RfZnJvbV9tYWlubGluZSBmbGFnLgorICAgIHB1YiBmbiBlbmFibGVfYWNvbmZpZ2RfZnJvbV9tYWlubGluZSgpIC0+IGJvb2wgeworICAgICAgICBhY29uZmlnX2ZsYWdzX3J1c3Q6OmVuYWJsZV9vbmx5X25ld19zdG9yYWdlKCkKKyAgICB9CiB9CiAKIC8vLyBNb2R1bGUgdXNlZCB3aGVuIGJ1aWxkaW5nIHdpdGggY2FyZ28KQEAgLTQ0LDQgKzQ5LDEwIEBACiAgICAgICAgIC8vIFVzZWQgb25seSB0byBlbmFibGUgdHlwZWNoZWNraW5nIGFuZCB0ZXN0aW5nIHdpdGggY2FyZ28KICAgICAgICAgdHJ1ZQogICAgIH0KKworICAgIC8vLyBSZXR1cm5zIGEgcGxhY2Vob2xkZXIgdmFsdWUgZm9yIHRoZSBlbmFibGVfYWNvbmZpZ2RfZnJvbV9tYWlubGluZSBmbGFnLgorICAgIHB1YiBmbiBlbmFibGVfYWNvbmZpZ2RfZnJvbV9tYWlubGluZSgpIC0+IGJvb2wgeworICAgICAgICAvLyBVc2VkIG9ubHkgdG8gZW5hYmxlIHR5cGVjaGVja2luZyBhbmQgdGVzdGluZyB3aXRoIGNhcmdvCisgICAgICAgIHRydWUKKyAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9mbGFnX2luZm8ucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9mbGFnX2luZm8ucnMKaW5kZXggZjA5MDM5Ni4uY2YxNjgzNCAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvZmxhZ19pbmZvLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2ZsYWdfaW5mby5ycwpAQCAtMTk0LDEyICsxOTQsMTUgQEAKICNbY2ZnKHRlc3QpXQogbW9kIHRlc3RzIHsKICAgICB1c2Ugc3VwZXI6Oio7Ci0gICAgdXNlIGNyYXRlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdDsKKyAgICB1c2UgY3JhdGU6OnsKKyAgICAgICAgdGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QsIERFRkFVTFRfRklMRV9WRVJTSU9OLCBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTiwKKyAgICB9OwogCi0gICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRoZSB2YWx1ZSBsaXN0IHNlcmlhbGl6YXRpb24KLSAgICBmbiB0ZXN0X3NlcmlhbGl6YXRpb24oKSB7Ci0gICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KCk7CisgICAgLy8gVE9ETzogYi8zNzYxMDgyNjggLSBVc2UgcGFyYW1ldGVyaXplZCB0ZXN0cy4KKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9zZXJpYWxpemF0aW9uX2RlZmF1bHQoKSB7CisgICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKTsKIAogICAgICAgICBsZXQgaGVhZGVyOiAmRmxhZ0luZm9IZWFkZXIgPSAmZmxhZ19pbmZvX2xpc3QuaGVhZGVyOwogICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF9oZWFkZXIgPSBGbGFnSW5mb0hlYWRlcjo6ZnJvbV9ieXRlcygmaGVhZGVyLmludG9fYnl0ZXMoKSk7CkBAIC0yMjAsMjAgKzIyMyw0MiBAQAogICAgIH0KIAogICAgICNbdGVzdF0KLSAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0aGF0IHZlcnNpb24gbnVtYmVyIHNob3VsZCBiZSBhdCB0aGUgdG9wIG9mIHNlcmlhbGl6ZWQKLSAgICAvLyBieXRlcwotICAgIGZuIHRlc3RfdmVyc2lvbl9udW1iZXIoKSB7Ci0gICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KCk7Ci0gICAgICAgIGxldCBieXRlcyA9ICZmbGFnX2luZm9fbGlzdC5pbnRvX2J5dGVzKCk7Ci0gICAgICAgIGxldCBtdXQgaGVhZCA9IDA7Ci0gICAgICAgIGxldCB2ZXJzaW9uID0gcmVhZF91MzJfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKS51bndyYXAoKTsKLSAgICAgICAgYXNzZXJ0X2VxISh2ZXJzaW9uLCAxKTsKKyAgICBmbiB0ZXN0X3NlcmlhbGl6YXRpb25fbWF4KCkgeworICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdChNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTik7CisKKyAgICAgICAgbGV0IGhlYWRlcjogJkZsYWdJbmZvSGVhZGVyID0gJmZsYWdfaW5mb19saXN0LmhlYWRlcjsKKyAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfaGVhZGVyID0gRmxhZ0luZm9IZWFkZXI6OmZyb21fYnl0ZXMoJmhlYWRlci5pbnRvX2J5dGVzKCkpOworICAgICAgICBhc3NlcnQhKHJlaW50ZXJwcmV0ZWRfaGVhZGVyLmlzX29rKCkpOworICAgICAgICBhc3NlcnRfZXEhKGhlYWRlciwgJnJlaW50ZXJwcmV0ZWRfaGVhZGVyLnVud3JhcCgpKTsKKworICAgICAgICBsZXQgbm9kZXM6ICZWZWM8RmxhZ0luZm9Ob2RlPiA9ICZmbGFnX2luZm9fbGlzdC5ub2RlczsKKyAgICAgICAgZm9yIG5vZGUgaW4gbm9kZXMuaXRlcigpIHsKKyAgICAgICAgICAgIGxldCByZWludGVycHJldGVkX25vZGUgPSBGbGFnSW5mb05vZGU6OmZyb21fYnl0ZXMoJm5vZGUuaW50b19ieXRlcygpKS51bndyYXAoKTsKKyAgICAgICAgICAgIGFzc2VydF9lcSEobm9kZSwgJnJlaW50ZXJwcmV0ZWRfbm9kZSk7CisgICAgICAgIH0KKworICAgICAgICBsZXQgZmxhZ19pbmZvX2J5dGVzID0gZmxhZ19pbmZvX2xpc3QuaW50b19ieXRlcygpOworICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF9pbmZvX2xpc3QgPSBGbGFnSW5mb0xpc3Q6OmZyb21fYnl0ZXMoJmZsYWdfaW5mb19ieXRlcyk7CisgICAgICAgIGFzc2VydCEocmVpbnRlcnByZXRlZF9pbmZvX2xpc3QuaXNfb2soKSk7CisgICAgICAgIGFzc2VydF9lcSEoJmZsYWdfaW5mb19saXN0LCAmcmVpbnRlcnByZXRlZF9pbmZvX2xpc3QudW53cmFwKCkpOworICAgICAgICBhc3NlcnRfZXEhKGZsYWdfaW5mb19ieXRlcy5sZW4oKSBhcyB1MzIsIGhlYWRlci5maWxlX3NpemUpOwogICAgIH0KIAorICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRoYXQgdmVyc2lvbiBudW1iZXIgc2hvdWxkIGJlIGF0IHRoZSB0b3Agb2Ygc2VyaWFsaXplZAorICAgIC8vIGJ5dGVzCiAgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfdmVyc2lvbl9udW1iZXIoKSB7CisgICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKTsKKyAgICAgICAgbGV0IGJ5dGVzID0gJmZsYWdfaW5mb19saXN0LmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IG11dCBoZWFkID0gMDsKKyAgICAgICAgbGV0IHZlcnNpb25fZnJvbV9maWxlID0gcmVhZF91MzJfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKS51bndyYXAoKTsKKyAgICAgICAgYXNzZXJ0X2VxISh2ZXJzaW9uX2Zyb21fZmlsZSwgREVGQVVMVF9GSUxFX1ZFUlNJT04pOworICAgIH0KKwogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIGZpbGUgdHlwZSBjaGVjaworICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X2ZpbGVfdHlwZV9jaGVjaygpIHsKLSAgICAgICAgbGV0IG11dCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KCk7CisgICAgICAgIGxldCBtdXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAgICAgICAgIGZsYWdfaW5mb19saXN0LmhlYWRlci5maWxlX3R5cGUgPSAxMjN1ODsKICAgICAgICAgbGV0IGVycm9yID0gRmxhZ0luZm9MaXN0Ojpmcm9tX2J5dGVzKCZmbGFnX2luZm9fbGlzdC5pbnRvX2J5dGVzKCkpLnVud3JhcF9lcnIoKTsKICAgICAgICAgYXNzZXJ0X2VxISgKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2ZsYWdfdGFibGUucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9mbGFnX3RhYmxlLnJzCmluZGV4IDA1ODhmZTUuLjZmYmVlMDIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2ZsYWdfdGFibGUucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvZmxhZ190YWJsZS5ycwpAQCAtMjIwLDEyICsyMjAsMTUgQEAKICNbY2ZnKHRlc3QpXQogbW9kIHRlc3RzIHsKICAgICB1c2Ugc3VwZXI6Oio7Ci0gICAgdXNlIGNyYXRlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX3RhYmxlOworICAgIHVzZSBjcmF0ZTo6eworICAgICAgICB0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX3RhYmxlLCBERUZBVUxUX0ZJTEVfVkVSU0lPTiwgTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04sCisgICAgfTsKIAotICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0aGUgdGFibGUgc2VyaWFsaXphdGlvbgotICAgIGZuIHRlc3Rfc2VyaWFsaXphdGlvbigpIHsKLSAgICAgICAgbGV0IGZsYWdfdGFibGUgPSBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKCk7CisgICAgLy8gVE9ETzogYi8zNzYxMDgyNjggLSBVc2UgcGFyYW1ldGVyaXplZCB0ZXN0cy4KKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9zZXJpYWxpemF0aW9uX2RlZmF1bHQoKSB7CisgICAgICAgIGxldCBmbGFnX3RhYmxlID0gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAKICAgICAgICAgbGV0IGhlYWRlcjogJkZsYWdUYWJsZUhlYWRlciA9ICZmbGFnX3RhYmxlLmhlYWRlcjsKICAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfaGVhZGVyID0gRmxhZ1RhYmxlSGVhZGVyOjpmcm9tX2J5dGVzKCZoZWFkZXIuaW50b19ieXRlcygpKTsKQEAgLTI0NiwyMCArMjQ5LDQyIEBACiAgICAgfQogCiAgICAgI1t0ZXN0XQotICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRoYXQgdmVyc2lvbiBudW1iZXIgc2hvdWxkIGJlIGF0IHRoZSB0b3Agb2Ygc2VyaWFsaXplZAotICAgIC8vIGJ5dGVzCi0gICAgZm4gdGVzdF92ZXJzaW9uX251bWJlcigpIHsKLSAgICAgICAgbGV0IGZsYWdfdGFibGUgPSBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKCk7Ci0gICAgICAgIGxldCBieXRlcyA9ICZmbGFnX3RhYmxlLmludG9fYnl0ZXMoKTsKLSAgICAgICAgbGV0IG11dCBoZWFkID0gMDsKLSAgICAgICAgbGV0IHZlcnNpb24gPSByZWFkX3UzMl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpLnVud3JhcCgpOwotICAgICAgICBhc3NlcnRfZXEhKHZlcnNpb24sIDEpOworICAgIGZuIHRlc3Rfc2VyaWFsaXphdGlvbl9tYXgoKSB7CisgICAgICAgIGxldCBmbGFnX3RhYmxlID0gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZShNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTik7CisKKyAgICAgICAgbGV0IGhlYWRlcjogJkZsYWdUYWJsZUhlYWRlciA9ICZmbGFnX3RhYmxlLmhlYWRlcjsKKyAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfaGVhZGVyID0gRmxhZ1RhYmxlSGVhZGVyOjpmcm9tX2J5dGVzKCZoZWFkZXIuaW50b19ieXRlcygpKTsKKyAgICAgICAgYXNzZXJ0IShyZWludGVycHJldGVkX2hlYWRlci5pc19vaygpKTsKKyAgICAgICAgYXNzZXJ0X2VxIShoZWFkZXIsICZyZWludGVycHJldGVkX2hlYWRlci51bndyYXAoKSk7CisKKyAgICAgICAgbGV0IG5vZGVzOiAmVmVjPEZsYWdUYWJsZU5vZGU+ID0gJmZsYWdfdGFibGUubm9kZXM7CisgICAgICAgIGZvciBub2RlIGluIG5vZGVzLml0ZXIoKSB7CisgICAgICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF9ub2RlID0gRmxhZ1RhYmxlTm9kZTo6ZnJvbV9ieXRlcygmbm9kZS5pbnRvX2J5dGVzKCkpLnVud3JhcCgpOworICAgICAgICAgICAgYXNzZXJ0X2VxIShub2RlLCAmcmVpbnRlcnByZXRlZF9ub2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIGxldCBmbGFnX3RhYmxlX2J5dGVzID0gZmxhZ190YWJsZS5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCByZWludGVycHJldGVkX3RhYmxlID0gRmxhZ1RhYmxlOjpmcm9tX2J5dGVzKCZmbGFnX3RhYmxlX2J5dGVzKTsKKyAgICAgICAgYXNzZXJ0IShyZWludGVycHJldGVkX3RhYmxlLmlzX29rKCkpOworICAgICAgICBhc3NlcnRfZXEhKCZmbGFnX3RhYmxlLCAmcmVpbnRlcnByZXRlZF90YWJsZS51bndyYXAoKSk7CisgICAgICAgIGFzc2VydF9lcSEoZmxhZ190YWJsZV9ieXRlcy5sZW4oKSBhcyB1MzIsIGhlYWRlci5maWxlX3NpemUpOwogICAgIH0KIAorICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRoYXQgdmVyc2lvbiBudW1iZXIgc2hvdWxkIGJlIGF0IHRoZSB0b3Agb2Ygc2VyaWFsaXplZAorICAgIC8vIGJ5dGVzCiAgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfdmVyc2lvbl9udW1iZXIoKSB7CisgICAgICAgIGxldCBmbGFnX3RhYmxlID0gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTik7CisgICAgICAgIGxldCBieXRlcyA9ICZmbGFnX3RhYmxlLmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IG11dCBoZWFkID0gMDsKKyAgICAgICAgbGV0IHZlcnNpb25fZnJvbV9maWxlID0gcmVhZF91MzJfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKS51bndyYXAoKTsKKyAgICAgICAgYXNzZXJ0X2VxISh2ZXJzaW9uX2Zyb21fZmlsZSwgREVGQVVMVF9GSUxFX1ZFUlNJT04pOworICAgIH0KKwogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIGZpbGUgdHlwZSBjaGVjaworICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X2ZpbGVfdHlwZV9jaGVjaygpIHsKLSAgICAgICAgbGV0IG11dCBmbGFnX3RhYmxlID0gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZSgpOworICAgICAgICBsZXQgbXV0IGZsYWdfdGFibGUgPSBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgZmxhZ190YWJsZS5oZWFkZXIuZmlsZV90eXBlID0gMTIzdTg7CiAgICAgICAgIGxldCBlcnJvciA9IEZsYWdUYWJsZTo6ZnJvbV9ieXRlcygmZmxhZ190YWJsZS5pbnRvX2J5dGVzKCkpLnVud3JhcF9lcnIoKTsKICAgICAgICAgYXNzZXJ0X2VxISgKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2ZsYWdfdmFsdWUucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9mbGFnX3ZhbHVlLnJzCmluZGV4IGI2NGMxMGUuLjlhMTRiZWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2ZsYWdfdmFsdWUucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvZmxhZ192YWx1ZS5ycwpAQCAtMTMyLDEyICsxMzIsMzIgQEAKICNbY2ZnKHRlc3QpXQogbW9kIHRlc3RzIHsKICAgICB1c2Ugc3VwZXI6Oio7Ci0gICAgdXNlIGNyYXRlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3Q7CisgICAgdXNlIGNyYXRlOjp7CisgICAgICAgIHRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCwgREVGQVVMVF9GSUxFX1ZFUlNJT04sIE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OLAorICAgIH07CiAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGhlIHZhbHVlIGxpc3Qgc2VyaWFsaXphdGlvbgotICAgIGZuIHRlc3Rfc2VyaWFsaXphdGlvbigpIHsKLSAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpOworICAgIC8vIFRPRE86IGIvMzc2MTA4MjY4IC0gVXNlIHBhcmFtZXRlcml6ZWQgdGVzdHMuCisgICAgZm4gdGVzdF9zZXJpYWxpemF0aW9uX2RlZmF1bHQoKSB7CisgICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pOworCisgICAgICAgIGxldCBoZWFkZXI6ICZGbGFnVmFsdWVIZWFkZXIgPSAmZmxhZ192YWx1ZV9saXN0LmhlYWRlcjsKKyAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfaGVhZGVyID0gRmxhZ1ZhbHVlSGVhZGVyOjpmcm9tX2J5dGVzKCZoZWFkZXIuaW50b19ieXRlcygpKTsKKyAgICAgICAgYXNzZXJ0IShyZWludGVycHJldGVkX2hlYWRlci5pc19vaygpKTsKKyAgICAgICAgYXNzZXJ0X2VxIShoZWFkZXIsICZyZWludGVycHJldGVkX2hlYWRlci51bndyYXAoKSk7CisKKyAgICAgICAgbGV0IGZsYWdfdmFsdWVfYnl0ZXMgPSBmbGFnX3ZhbHVlX2xpc3QuaW50b19ieXRlcygpOworICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF92YWx1ZV9saXN0ID0gRmxhZ1ZhbHVlTGlzdDo6ZnJvbV9ieXRlcygmZmxhZ192YWx1ZV9ieXRlcyk7CisgICAgICAgIGFzc2VydCEocmVpbnRlcnByZXRlZF92YWx1ZV9saXN0LmlzX29rKCkpOworICAgICAgICBhc3NlcnRfZXEhKCZmbGFnX3ZhbHVlX2xpc3QsICZyZWludGVycHJldGVkX3ZhbHVlX2xpc3QudW53cmFwKCkpOworICAgICAgICBhc3NlcnRfZXEhKGZsYWdfdmFsdWVfYnl0ZXMubGVuKCkgYXMgdTMyLCBoZWFkZXIuZmlsZV9zaXplKTsKKyAgICB9CisKKyAgICAjW3Rlc3RdCisgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGhlIHZhbHVlIGxpc3Qgc2VyaWFsaXphdGlvbgorICAgIGZuIHRlc3Rfc2VyaWFsaXphdGlvbl9tYXgoKSB7CisgICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04pOwogCiAgICAgICAgIGxldCBoZWFkZXI6ICZGbGFnVmFsdWVIZWFkZXIgPSAmZmxhZ192YWx1ZV9saXN0LmhlYWRlcjsKICAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfaGVhZGVyID0gRmxhZ1ZhbHVlSGVhZGVyOjpmcm9tX2J5dGVzKCZoZWFkZXIuaW50b19ieXRlcygpKTsKQEAgLTE1NSwxNyArMTc1LDE3IEBACiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGhhdCB2ZXJzaW9uIG51bWJlciBzaG91bGQgYmUgYXQgdGhlIHRvcCBvZiBzZXJpYWxpemVkCiAgICAgLy8gYnl0ZXMKICAgICBmbiB0ZXN0X3ZlcnNpb25fbnVtYmVyKCkgewotICAgICAgICBsZXQgZmxhZ192YWx1ZV9saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KCk7CisgICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgICAgICBsZXQgYnl0ZXMgPSAmZmxhZ192YWx1ZV9saXN0LmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IG11dCBoZWFkID0gMDsKLSAgICAgICAgbGV0IHZlcnNpb24gPSByZWFkX3UzMl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpLnVud3JhcCgpOwotICAgICAgICBhc3NlcnRfZXEhKHZlcnNpb24sIDEpOworICAgICAgICBsZXQgdmVyc2lvbl9mcm9tX2ZpbGUgPSByZWFkX3UzMl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpLnVud3JhcCgpOworICAgICAgICBhc3NlcnRfZXEhKHZlcnNpb25fZnJvbV9maWxlLCBERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAgICAgfQogCiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIGZpbGUgdHlwZSBjaGVjawogICAgIGZuIHRlc3RfZmlsZV90eXBlX2NoZWNrKCkgewotICAgICAgICBsZXQgbXV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpOworICAgICAgICBsZXQgbXV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAgICAgICAgIGZsYWdfdmFsdWVfbGlzdC5oZWFkZXIuZmlsZV90eXBlID0gMTIzdTg7CiAgICAgICAgIGxldCBlcnJvciA9IEZsYWdWYWx1ZUxpc3Q6OmZyb21fYnl0ZXMoJmZsYWdfdmFsdWVfbGlzdC5pbnRvX2J5dGVzKCkpLnVud3JhcF9lcnIoKTsKICAgICAgICAgYXNzZXJ0X2VxISgKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2xpYi5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2xpYi5ycwppbmRleCBjZjUyYmMwLi5lOTkxMzIwIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9saWIucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvbGliLnJzCkBAIC01Nyw4ICs1NywxMyBAQAogICAgIEJ5dGVzUGFyc2VGYWlsLCBIYXNoVGFibGVTaXplTGltaXQsIEludmFsaWRGbGFnVmFsdWVUeXBlLCBJbnZhbGlkU3RvcmVkRmxhZ1R5cGUsCiB9OwogCi0vLy8gU3RvcmFnZSBmaWxlIHZlcnNpb24KLXB1YiBjb25zdCBGSUxFX1ZFUlNJT046IHUzMiA9IDE7CisvLy8gVGhlIG1heCBzdG9yYWdlIGZpbGUgdmVyc2lvbiBmcm9tIHdoaWNoIHdlIGNhbiBzYWZlbHkgcmVhZC93cml0ZS4gTWF5IGJlCisvLy8gZXhwZXJpbWVudGFsLgorcHViIGNvbnN0IE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OOiB1MzIgPSAyOworCisvLy8gVGhlIG5ld2VzdCBmdWxseS1yZWxlYXNlZCB2ZXJzaW9uLiBVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCwgdGhpcyBpcyB0aGUKKy8vLyB2ZXJzaW9uIHdlIHdpbGwgd3JpdGUuCitwdWIgY29uc3QgREVGQVVMVF9GSUxFX1ZFUlNJT046IHUzMiA9IDE7CiAKIC8vLyBHb29kIGhhc2ggdGFibGUgcHJpbWUgbnVtYmVyCiBwdWIoY3JhdGUpIGNvbnN0IEhBU0hfUFJJTUVTOiBbdTMyOyAyOV0gPSBbCkBAIC0yNDQsNiArMjQ5LDExIEBACiAgICAgT2sodmFsKQogfQogCisvLy8gUmVhZCBhbmQgcGFyc2UgdGhlIGZpcnN0IDQgYnl0ZXMgb2YgYnVmIGFzIHUzMi4KK3B1YiBmbiByZWFkX3UzMl9mcm9tX3N0YXJ0X29mX2J5dGVzKGJ1ZjogJlt1OF0pIC0+IFJlc3VsdDx1MzIsIEFjb25maWdTdG9yYWdlRXJyb3I+IHsKKyAgICByZWFkX3UzMl9mcm9tX2J5dGVzKGJ1ZiwgJm11dCAwKQorfQorCiAvLy8gUmVhZCBhbmQgcGFyc2UgYnl0ZXMgYXMgdTMyCiBwdWIgZm4gcmVhZF91MzJfZnJvbV9ieXRlcyhidWY6ICZbdThdLCBoZWFkOiAmbXV0IHVzaXplKSAtPiBSZXN1bHQ8dTMyLCBBY29uZmlnU3RvcmFnZUVycm9yPiB7CiAgICAgbGV0IHZhbCA9CkBAIC0yNTQsNiArMjY0LDE2IEBACiAgICAgT2sodmFsKQogfQogCisvLyBSZWFkIGFuZCBwYXJzZSBieXRlcyBhcyB1NjQKK3B1YiBmbiByZWFkX3U2NF9mcm9tX2J5dGVzKGJ1ZjogJlt1OF0sIGhlYWQ6ICZtdXQgdXNpemUpIC0+IFJlc3VsdDx1NjQsIEFjb25maWdTdG9yYWdlRXJyb3I+IHsKKyAgICBsZXQgdmFsID0KKyAgICAgICAgdTY0Ojpmcm9tX2xlX2J5dGVzKGJ1ZlsqaGVhZC4uKmhlYWQgKyA4XS50cnlfaW50bygpLm1hcF9lcnIofGVycm1zZ3wgeworICAgICAgICAgICAgQnl0ZXNQYXJzZUZhaWwoYW55aG93ISgiZmFpbCB0byBwYXJzZSB1NjQgZnJvbSBieXRlczoge30iLCBlcnJtc2cpKQorICAgICAgICB9KT8pOworICAgICpoZWFkICs9IDg7CisgICAgT2sodmFsKQorfQorCiAvLy8gUmVhZCBhbmQgcGFyc2UgYnl0ZXMgYXMgc3RyaW5nCiBwdWIoY3JhdGUpIGZuIHJlYWRfc3RyX2Zyb21fYnl0ZXMoCiAgICAgYnVmOiAmW3U4XSwKQEAgLTUxNiwxMCArNTM2LDE1IEBACiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGhlIGZsYWcgbGlzdCBhcGkKICAgICBmbiB0ZXN0X2xpc3RfZmxhZygpIHsKICAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPQotICAgICAgICAgICAgd3JpdGVfYnl0ZXNfdG9fdGVtcF9maWxlKCZjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKCkuaW50b19ieXRlcygpKS51bndyYXAoKTsKLSAgICAgICAgbGV0IGZsYWdfdGFibGUgPSB3cml0ZV9ieXRlc190b190ZW1wX2ZpbGUoJmNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUoKS5pbnRvX2J5dGVzKCkpLnVud3JhcCgpOwotICAgICAgICBsZXQgZmxhZ192YWx1ZV9saXN0ID0KLSAgICAgICAgICAgIHdyaXRlX2J5dGVzX3RvX3RlbXBfZmlsZSgmY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KCkuaW50b19ieXRlcygpKS51bndyYXAoKTsKKyAgICAgICAgICAgIHdyaXRlX2J5dGVzX3RvX3RlbXBfZmlsZSgmY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpKQorICAgICAgICAgICAgICAgIC51bndyYXAoKTsKKyAgICAgICAgbGV0IGZsYWdfdGFibGUgPQorICAgICAgICAgICAgd3JpdGVfYnl0ZXNfdG9fdGVtcF9maWxlKCZjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKS5pbnRvX2J5dGVzKCkpCisgICAgICAgICAgICAgICAgLnVud3JhcCgpOworICAgICAgICBsZXQgZmxhZ192YWx1ZV9saXN0ID0gd3JpdGVfYnl0ZXNfdG9fdGVtcF9maWxlKAorICAgICAgICAgICAgJmNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpLAorICAgICAgICApCisgICAgICAgIC51bndyYXAoKTsKIAogICAgICAgICBsZXQgcGFja2FnZV90YWJsZV9wYXRoID0gcGFja2FnZV90YWJsZS5wYXRoKCkuZGlzcGxheSgpLnRvX3N0cmluZygpOwogICAgICAgICBsZXQgZmxhZ190YWJsZV9wYXRoID0gZmxhZ190YWJsZS5wYXRoKCkuZGlzcGxheSgpLnRvX3N0cmluZygpOwpAQCAtNTg0LDEyICs2MDksMTkgQEAKICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0aGUgZmxhZyBsaXN0IHdpdGggaW5mbyBhcGkKICAgICBmbiB0ZXN0X2xpc3RfZmxhZ193aXRoX2luZm8oKSB7CiAgICAgICAgIGxldCBwYWNrYWdlX3RhYmxlID0KLSAgICAgICAgICAgIHdyaXRlX2J5dGVzX3RvX3RlbXBfZmlsZSgmY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZSgpLmludG9fYnl0ZXMoKSkudW53cmFwKCk7Ci0gICAgICAgIGxldCBmbGFnX3RhYmxlID0gd3JpdGVfYnl0ZXNfdG9fdGVtcF9maWxlKCZjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKCkuaW50b19ieXRlcygpKS51bndyYXAoKTsKLSAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9Ci0gICAgICAgICAgICB3cml0ZV9ieXRlc190b190ZW1wX2ZpbGUoJmNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpLmludG9fYnl0ZXMoKSkudW53cmFwKCk7Ci0gICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9Ci0gICAgICAgICAgICB3cml0ZV9ieXRlc190b190ZW1wX2ZpbGUoJmNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KCkuaW50b19ieXRlcygpKS51bndyYXAoKTsKKyAgICAgICAgICAgIHdyaXRlX2J5dGVzX3RvX3RlbXBfZmlsZSgmY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpKQorICAgICAgICAgICAgICAgIC51bndyYXAoKTsKKyAgICAgICAgbGV0IGZsYWdfdGFibGUgPQorICAgICAgICAgICAgd3JpdGVfYnl0ZXNfdG9fdGVtcF9maWxlKCZjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKS5pbnRvX2J5dGVzKCkpCisgICAgICAgICAgICAgICAgLnVud3JhcCgpOworICAgICAgICBsZXQgZmxhZ192YWx1ZV9saXN0ID0gd3JpdGVfYnl0ZXNfdG9fdGVtcF9maWxlKAorICAgICAgICAgICAgJmNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpLAorICAgICAgICApCisgICAgICAgIC51bndyYXAoKTsKKyAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gd3JpdGVfYnl0ZXNfdG9fdGVtcF9maWxlKAorICAgICAgICAgICAgJmNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKS5pbnRvX2J5dGVzKCksCisgICAgICAgICkKKyAgICAgICAgLnVud3JhcCgpOwogCiAgICAgICAgIGxldCBwYWNrYWdlX3RhYmxlX3BhdGggPSBwYWNrYWdlX3RhYmxlLnBhdGgoKS5kaXNwbGF5KCkudG9fc3RyaW5nKCk7CiAgICAgICAgIGxldCBmbGFnX3RhYmxlX3BhdGggPSBmbGFnX3RhYmxlLnBhdGgoKS5kaXNwbGF5KCkudG9fc3RyaW5nKCk7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9wYWNrYWdlX3RhYmxlLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvcGFja2FnZV90YWJsZS5ycwppbmRleCBhNWJkOWU2Li4yMTM1N2M3IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9wYWNrYWdlX3RhYmxlLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL3BhY2thZ2VfdGFibGUucnMKQEAgLTE3LDcgKzE3LDEwIEBACiAvLyEgcGFja2FnZSB0YWJsZSBtb2R1bGUgZGVmaW5lcyB0aGUgcGFja2FnZSB0YWJsZSBmaWxlIGZvcm1hdCBhbmQgbWV0aG9kcyBmb3Igc2VyaWFsaXphdGlvbgogLy8hIGFuZCBkZXNlcmlhbGl6YXRpb24KIAotdXNlIGNyYXRlOjp7Z2V0X2J1Y2tldF9pbmRleCwgcmVhZF9zdHJfZnJvbV9ieXRlcywgcmVhZF91MzJfZnJvbV9ieXRlcywgcmVhZF91OF9mcm9tX2J5dGVzfTsKK3VzZSBjcmF0ZTo6eworICAgIGdldF9idWNrZXRfaW5kZXgsIHJlYWRfc3RyX2Zyb21fYnl0ZXMsIHJlYWRfdTMyX2Zyb21fYnl0ZXMsIHJlYWRfdTY0X2Zyb21fYnl0ZXMsCisgICAgcmVhZF91OF9mcm9tX2J5dGVzLAorfTsKIHVzZSBjcmF0ZTo6e0Fjb25maWdTdG9yYWdlRXJyb3IsIFN0b3JhZ2VGaWxlVHlwZX07CiB1c2UgYW55aG93Ojphbnlob3c7CiB1c2Ugc2VyZGU6OntEZXNlcmlhbGl6ZSwgU2VyaWFsaXplfTsKQEAgLTk3LDYgKzEwMCw3IEBACiBwdWIgc3RydWN0IFBhY2thZ2VUYWJsZU5vZGUgewogICAgIHB1YiBwYWNrYWdlX25hbWU6IFN0cmluZywKICAgICBwdWIgcGFja2FnZV9pZDogdTMyLAorICAgIHB1YiBmaW5nZXJwcmludDogdTY0LAogICAgIC8vIFRoZSBpbmRleCBvZiB0aGUgZmlyc3QgYm9vbGVhbiBmbGFnIGluIHRoaXMgYWNvbmZpZyBwYWNrYWdlIGFtb25nIGFsbCBib29sZWFuCiAgICAgLy8gZmxhZ3MgaW4gdGhpcyBjb250YWluZXIuCiAgICAgcHViIGJvb2xlYW5fc3RhcnRfaW5kZXg6IHUzMiwKQEAgLTEwOCw4ICsxMTIsMTIgQEAKICAgICBmbiBmbXQoJnNlbGYsIGY6ICZtdXQgZm10OjpGb3JtYXR0ZXIpIC0+IGZtdDo6UmVzdWx0IHsKICAgICAgICAgd3JpdGVsbiEoCiAgICAgICAgICAgICBmLAotICAgICAgICAgICAgIlBhY2thZ2U6IHt9LCBJZDoge30sIEJvb2xlYW4gZmxhZyBzdGFydCBpbmRleDoge30sIE5leHQ6IHs6P30iLAotICAgICAgICAgICAgc2VsZi5wYWNrYWdlX25hbWUsIHNlbGYucGFja2FnZV9pZCwgc2VsZi5ib29sZWFuX3N0YXJ0X2luZGV4LCBzZWxmLm5leHRfb2Zmc2V0CisgICAgICAgICAgICAiUGFja2FnZToge30sIElkOiB7fSwgRmluZ2VycHJpbnQ6IHt9LCBCb29sZWFuIGZsYWcgc3RhcnQgaW5kZXg6IHt9LCBOZXh0OiB7Oj99IiwKKyAgICAgICAgICAgIHNlbGYucGFja2FnZV9uYW1lLAorICAgICAgICAgICAgc2VsZi5wYWNrYWdlX2lkLAorICAgICAgICAgICAgc2VsZi5maW5nZXJwcmludCwKKyAgICAgICAgICAgIHNlbGYuYm9vbGVhbl9zdGFydF9pbmRleCwKKyAgICAgICAgICAgIHNlbGYubmV4dF9vZmZzZXQKICAgICAgICAgKT87CiAgICAgICAgIE9rKCgpKQogICAgIH0KQEAgLTExNyw3ICsxMjUsMTYgQEAKIAogaW1wbCBQYWNrYWdlVGFibGVOb2RlIHsKICAgICAvLy8gU2VyaWFsaXplIHRvIGJ5dGVzCi0gICAgcHViIGZuIGludG9fYnl0ZXMoJnNlbGYpIC0+IFZlYzx1OD4geworICAgIHB1YiBmbiBpbnRvX2J5dGVzKCZzZWxmLCB2ZXJzaW9uOiB1MzIpIC0+IFZlYzx1OD4geworICAgICAgICBtYXRjaCB2ZXJzaW9uIHsKKyAgICAgICAgICAgIDEgPT4gU2VsZjo6aW50b19ieXRlc192MShzZWxmKSwKKyAgICAgICAgICAgIDIgPT4gU2VsZjo6aW50b19ieXRlc192MihzZWxmKSwKKyAgICAgICAgICAgIC8vIFRPRE8oYi8zMTYzNTc2ODYpOiBpbnRvX2J5dGVzIHNob3VsZCByZXR1cm4gYSBSZXN1bHQuCisgICAgICAgICAgICBfID0+IFNlbGY6OmludG9fYnl0ZXNfdjIoJnNlbGYpLAorICAgICAgICB9CisgICAgfQorCisgICAgZm4gaW50b19ieXRlc192MSgmc2VsZikgLT4gVmVjPHU4PiB7CiAgICAgICAgIGxldCBtdXQgcmVzdWx0ID0gVmVjOjpuZXcoKTsKICAgICAgICAgbGV0IG5hbWVfYnl0ZXMgPSBzZWxmLnBhY2thZ2VfbmFtZS5hc19ieXRlcygpOwogICAgICAgICByZXN1bHQuZXh0ZW5kX2Zyb21fc2xpY2UoJihuYW1lX2J5dGVzLmxlbigpIGFzIHUzMikudG9fbGVfYnl0ZXMoKSk7CkBAIC0xMjgsMTggKzE0NSw2MCBAQAogICAgICAgICByZXN1bHQKICAgICB9CiAKLSAgICAvLy8gRGVzZXJpYWxpemUgZnJvbSBieXRlcwotICAgIHB1YiBmbiBmcm9tX2J5dGVzKGJ5dGVzOiAmW3U4XSkgLT4gUmVzdWx0PFNlbGYsIEFjb25maWdTdG9yYWdlRXJyb3I+IHsKKyAgICBmbiBpbnRvX2J5dGVzX3YyKCZzZWxmKSAtPiBWZWM8dTg+IHsKKyAgICAgICAgbGV0IG11dCByZXN1bHQgPSBWZWM6Om5ldygpOworICAgICAgICBsZXQgbmFtZV9ieXRlcyA9IHNlbGYucGFja2FnZV9uYW1lLmFzX2J5dGVzKCk7CisgICAgICAgIHJlc3VsdC5leHRlbmRfZnJvbV9zbGljZSgmKG5hbWVfYnl0ZXMubGVuKCkgYXMgdTMyKS50b19sZV9ieXRlcygpKTsKKyAgICAgICAgcmVzdWx0LmV4dGVuZF9mcm9tX3NsaWNlKG5hbWVfYnl0ZXMpOworICAgICAgICByZXN1bHQuZXh0ZW5kX2Zyb21fc2xpY2UoJnNlbGYucGFja2FnZV9pZC50b19sZV9ieXRlcygpKTsKKyAgICAgICAgcmVzdWx0LmV4dGVuZF9mcm9tX3NsaWNlKCZzZWxmLmZpbmdlcnByaW50LnRvX2xlX2J5dGVzKCkpOworICAgICAgICByZXN1bHQuZXh0ZW5kX2Zyb21fc2xpY2UoJnNlbGYuYm9vbGVhbl9zdGFydF9pbmRleC50b19sZV9ieXRlcygpKTsKKyAgICAgICAgcmVzdWx0LmV4dGVuZF9mcm9tX3NsaWNlKCZzZWxmLm5leHRfb2Zmc2V0LnVud3JhcF9vcigwKS50b19sZV9ieXRlcygpKTsKKyAgICAgICAgcmVzdWx0CisgICAgfQorCisgICAgLy8vIERlc2VyaWFsaXplIGZyb20gYnl0ZXMgYmFzZWQgb24gZmlsZSB2ZXJzaW9uLgorICAgIHB1YiBmbiBmcm9tX2J5dGVzKGJ5dGVzOiAmW3U4XSwgdmVyc2lvbjogdTMyKSAtPiBSZXN1bHQ8U2VsZiwgQWNvbmZpZ1N0b3JhZ2VFcnJvcj4geworICAgICAgICBtYXRjaCB2ZXJzaW9uIHsKKyAgICAgICAgICAgIDEgPT4gU2VsZjo6ZnJvbV9ieXRlc192MShieXRlcyksCisgICAgICAgICAgICAyID0+IFNlbGY6OmZyb21fYnl0ZXNfdjIoYnl0ZXMpLAorICAgICAgICAgICAgXyA9PiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVycihBY29uZmlnU3RvcmFnZUVycm9yOjpCeXRlc1BhcnNlRmFpbChhbnlob3chKAorICAgICAgICAgICAgICAgICAgICAiQmluYXJ5IGZpbGUgaXMgYW4gdW5zdXBwb3J0ZWQgdmVyc2lvbjoge30iLAorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uCisgICAgICAgICAgICAgICAgKSkpCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmbiBmcm9tX2J5dGVzX3YxKGJ5dGVzOiAmW3U4XSkgLT4gUmVzdWx0PFNlbGYsIEFjb25maWdTdG9yYWdlRXJyb3I+IHsKICAgICAgICAgbGV0IG11dCBoZWFkID0gMDsKLSAgICAgICAgbGV0IG5vZGUgPSBTZWxmIHsKLSAgICAgICAgICAgIHBhY2thZ2VfbmFtZTogcmVhZF9zdHJfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKT8sCi0gICAgICAgICAgICBwYWNrYWdlX2lkOiByZWFkX3UzMl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpPywKLSAgICAgICAgICAgIGJvb2xlYW5fc3RhcnRfaW5kZXg6IHJlYWRfdTMyX2Zyb21fYnl0ZXMoYnl0ZXMsICZtdXQgaGVhZCk/LAotICAgICAgICAgICAgbmV4dF9vZmZzZXQ6IG1hdGNoIHJlYWRfdTMyX2Zyb21fYnl0ZXMoYnl0ZXMsICZtdXQgaGVhZCk/IHsKLSAgICAgICAgICAgICAgICAwID0+IE5vbmUsCi0gICAgICAgICAgICAgICAgdmFsID0+IFNvbWUodmFsKSwKLSAgICAgICAgICAgIH0sCisgICAgICAgIGxldCBwYWNrYWdlX25hbWUgPSByZWFkX3N0cl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpPzsKKyAgICAgICAgbGV0IHBhY2thZ2VfaWQgPSByZWFkX3UzMl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpPzsKKyAgICAgICAgLy8gdjEgZG9lcyBub3QgaGF2ZSBmaW5nZXJwcmludCwgc28ganVzdCBzZXQgdG8gMC4KKyAgICAgICAgbGV0IGZpbmdlcnByaW50OiB1NjQgPSAwOworICAgICAgICBsZXQgYm9vbGVhbl9zdGFydF9pbmRleCA9IHJlYWRfdTMyX2Zyb21fYnl0ZXMoYnl0ZXMsICZtdXQgaGVhZCk/OworICAgICAgICBsZXQgbmV4dF9vZmZzZXQgPSBtYXRjaCByZWFkX3UzMl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpPyB7CisgICAgICAgICAgICAwID0+IE5vbmUsCisgICAgICAgICAgICB2YWwgPT4gU29tZSh2YWwpLAogICAgICAgICB9OworCisgICAgICAgIGxldCBub2RlID0gU2VsZiB7IHBhY2thZ2VfbmFtZSwgcGFja2FnZV9pZCwgZmluZ2VycHJpbnQsIGJvb2xlYW5fc3RhcnRfaW5kZXgsIG5leHRfb2Zmc2V0IH07CisgICAgICAgIE9rKG5vZGUpCisgICAgfQorCisgICAgZm4gZnJvbV9ieXRlc192MihieXRlczogJlt1OF0pIC0+IFJlc3VsdDxTZWxmLCBBY29uZmlnU3RvcmFnZUVycm9yPiB7CisgICAgICAgIGxldCBtdXQgaGVhZCA9IDA7CisgICAgICAgIGxldCBwYWNrYWdlX25hbWUgPSByZWFkX3N0cl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpPzsKKyAgICAgICAgbGV0IHBhY2thZ2VfaWQgPSByZWFkX3UzMl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpPzsKKyAgICAgICAgbGV0IGZpbmdlcnByaW50ID0gcmVhZF91NjRfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKT87CisgICAgICAgIGxldCBib29sZWFuX3N0YXJ0X2luZGV4ID0gcmVhZF91MzJfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKT87CisgICAgICAgIGxldCBuZXh0X29mZnNldCA9IG1hdGNoIHJlYWRfdTMyX2Zyb21fYnl0ZXMoYnl0ZXMsICZtdXQgaGVhZCk/IHsKKyAgICAgICAgICAgIDAgPT4gTm9uZSwKKyAgICAgICAgICAgIHZhbCA9PiBTb21lKHZhbCksCisgICAgICAgIH07CisKKyAgICAgICAgbGV0IG5vZGUgPSBTZWxmIHsgcGFja2FnZV9uYW1lLCBwYWNrYWdlX2lkLCBmaW5nZXJwcmludCwgYm9vbGVhbl9zdGFydF9pbmRleCwgbmV4dF9vZmZzZXQgfTsKICAgICAgICAgT2sobm9kZSkKICAgICB9CiAKQEAgLTE4MCw3ICsyMzksMTEgQEAKICAgICAgICAgWwogICAgICAgICAgICAgc2VsZi5oZWFkZXIuaW50b19ieXRlcygpLAogICAgICAgICAgICAgc2VsZi5idWNrZXRzLml0ZXIoKS5tYXAofHZ8IHYudW53cmFwX29yKDApLnRvX2xlX2J5dGVzKCkpLmNvbGxlY3Q6OjxWZWM8Xz4+KCkuY29uY2F0KCksCi0gICAgICAgICAgICBzZWxmLm5vZGVzLml0ZXIoKS5tYXAofHZ8IHYuaW50b19ieXRlcygpKS5jb2xsZWN0Ojo8VmVjPF8+PigpLmNvbmNhdCgpLAorICAgICAgICAgICAgc2VsZi5ub2RlcworICAgICAgICAgICAgICAgIC5pdGVyKCkKKyAgICAgICAgICAgICAgICAubWFwKHx2fCB2LmludG9fYnl0ZXMoc2VsZi5oZWFkZXIudmVyc2lvbikpCisgICAgICAgICAgICAgICAgLmNvbGxlY3Q6OjxWZWM8Xz4+KCkKKyAgICAgICAgICAgICAgICAuY29uY2F0KCksCiAgICAgICAgIF0KICAgICAgICAgLmNvbmNhdCgpCiAgICAgfQpAQCAtMTk5LDggKzI2Miw4IEBACiAgICAgICAgICAgICAuY29sbGVjdCgpOwogICAgICAgICBsZXQgbm9kZXMgPSAoMC4ubnVtX3BhY2thZ2VzKQogICAgICAgICAgICAgLm1hcCh8X3wgewotICAgICAgICAgICAgICAgIGxldCBub2RlID0gUGFja2FnZVRhYmxlTm9kZTo6ZnJvbV9ieXRlcygmYnl0ZXNbaGVhZC4uXSk/OwotICAgICAgICAgICAgICAgIGhlYWQgKz0gbm9kZS5pbnRvX2J5dGVzKCkubGVuKCk7CisgICAgICAgICAgICAgICAgbGV0IG5vZGUgPSBQYWNrYWdlVGFibGVOb2RlOjpmcm9tX2J5dGVzKCZieXRlc1toZWFkLi5dLCBoZWFkZXIudmVyc2lvbik/OworICAgICAgICAgICAgICAgIGhlYWQgKz0gbm9kZS5pbnRvX2J5dGVzKGhlYWRlci52ZXJzaW9uKS5sZW4oKTsKICAgICAgICAgICAgICAgICBPayhub2RlKQogICAgICAgICAgICAgfSkKICAgICAgICAgICAgIC5jb2xsZWN0Ojo8UmVzdWx0PFZlYzxfPiwgQWNvbmZpZ1N0b3JhZ2VFcnJvcj4+KCkKQEAgLTIyMCwxMSArMjgzLDEzIEBACiBtb2QgdGVzdHMgewogICAgIHVzZSBzdXBlcjo6KjsKICAgICB1c2UgY3JhdGU6OnRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGU7CisgICAgdXNlIGNyYXRlOjp7cmVhZF91MzJfZnJvbV9zdGFydF9vZl9ieXRlcywgREVGQVVMVF9GSUxFX1ZFUlNJT04sIE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OfTsKIAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0aGUgdGFibGUgc2VyaWFsaXphdGlvbgotICAgIGZuIHRlc3Rfc2VyaWFsaXphdGlvbigpIHsKLSAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKCk7CisgICAgLy8gVE9ETzogYi8zNzYxMDgyNjggLSBVc2UgcGFyYW1ldGVyaXplZCB0ZXN0cy4KKyAgICBmbiB0ZXN0X3NlcmlhbGl6YXRpb25fZGVmYXVsdCgpIHsKKyAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgbGV0IGhlYWRlcjogJlBhY2thZ2VUYWJsZUhlYWRlciA9ICZwYWNrYWdlX3RhYmxlLmhlYWRlcjsKICAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfaGVhZGVyID0gUGFja2FnZVRhYmxlSGVhZGVyOjpmcm9tX2J5dGVzKCZoZWFkZXIuaW50b19ieXRlcygpKTsKICAgICAgICAgYXNzZXJ0IShyZWludGVycHJldGVkX2hlYWRlci5pc19vaygpKTsKQEAgLTIzMiw3ICsyOTcsMzIgQEAKIAogICAgICAgICBsZXQgbm9kZXM6ICZWZWM8UGFja2FnZVRhYmxlTm9kZT4gPSAmcGFja2FnZV90YWJsZS5ub2RlczsKICAgICAgICAgZm9yIG5vZGUgaW4gbm9kZXMuaXRlcigpIHsKLSAgICAgICAgICAgIGxldCByZWludGVycHJldGVkX25vZGUgPSBQYWNrYWdlVGFibGVOb2RlOjpmcm9tX2J5dGVzKCZub2RlLmludG9fYnl0ZXMoKSkudW53cmFwKCk7CisgICAgICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF9ub2RlID0KKyAgICAgICAgICAgICAgICBQYWNrYWdlVGFibGVOb2RlOjpmcm9tX2J5dGVzKCZub2RlLmludG9fYnl0ZXMoaGVhZGVyLnZlcnNpb24pLCBoZWFkZXIudmVyc2lvbikKKyAgICAgICAgICAgICAgICAgICAgLnVud3JhcCgpOworICAgICAgICAgICAgYXNzZXJ0X2VxIShub2RlLCAmcmVpbnRlcnByZXRlZF9ub2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIGxldCBwYWNrYWdlX3RhYmxlX2J5dGVzID0gcGFja2FnZV90YWJsZS5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCByZWludGVycHJldGVkX3RhYmxlID0gUGFja2FnZVRhYmxlOjpmcm9tX2J5dGVzKCZwYWNrYWdlX3RhYmxlX2J5dGVzKTsKKyAgICAgICAgYXNzZXJ0IShyZWludGVycHJldGVkX3RhYmxlLmlzX29rKCkpOworICAgICAgICBhc3NlcnRfZXEhKCZwYWNrYWdlX3RhYmxlLCAmcmVpbnRlcnByZXRlZF90YWJsZS51bndyYXAoKSk7CisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZV90YWJsZV9ieXRlcy5sZW4oKSBhcyB1MzIsIGhlYWRlci5maWxlX3NpemUpOworICAgIH0KKworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X3NlcmlhbGl6YXRpb25fbWF4KCkgeworICAgICAgICBsZXQgcGFja2FnZV90YWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04pOworICAgICAgICBsZXQgaGVhZGVyOiAmUGFja2FnZVRhYmxlSGVhZGVyID0gJnBhY2thZ2VfdGFibGUuaGVhZGVyOworICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF9oZWFkZXIgPSBQYWNrYWdlVGFibGVIZWFkZXI6OmZyb21fYnl0ZXMoJmhlYWRlci5pbnRvX2J5dGVzKCkpOworICAgICAgICBhc3NlcnQhKHJlaW50ZXJwcmV0ZWRfaGVhZGVyLmlzX29rKCkpOworICAgICAgICBhc3NlcnRfZXEhKGhlYWRlciwgJnJlaW50ZXJwcmV0ZWRfaGVhZGVyLnVud3JhcCgpKTsKKworICAgICAgICBsZXQgbm9kZXM6ICZWZWM8UGFja2FnZVRhYmxlTm9kZT4gPSAmcGFja2FnZV90YWJsZS5ub2RlczsKKyAgICAgICAgZm9yIG5vZGUgaW4gbm9kZXMuaXRlcigpIHsKKyAgICAgICAgICAgIGxldCByZWludGVycHJldGVkX25vZGUgPQorICAgICAgICAgICAgICAgIFBhY2thZ2VUYWJsZU5vZGU6OmZyb21fYnl0ZXMoJm5vZGUuaW50b19ieXRlcyhoZWFkZXIudmVyc2lvbiksIGhlYWRlci52ZXJzaW9uKQorICAgICAgICAgICAgICAgICAgICAudW53cmFwKCk7CiAgICAgICAgICAgICBhc3NlcnRfZXEhKG5vZGUsICZyZWludGVycHJldGVkX25vZGUpOwogICAgICAgICB9CiAKQEAgLTI0NywxNyArMzM3LDM2IEBACiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGhhdCB2ZXJzaW9uIG51bWJlciBzaG91bGQgYmUgYXQgdGhlIHRvcCBvZiBzZXJpYWxpemVkCiAgICAgLy8gYnl0ZXMKICAgICBmbiB0ZXN0X3ZlcnNpb25fbnVtYmVyKCkgewotICAgICAgICBsZXQgcGFja2FnZV90YWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoKTsKKyAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgbGV0IGJ5dGVzID0gJnBhY2thZ2VfdGFibGUuaW50b19ieXRlcygpOwotICAgICAgICBsZXQgbXV0IGhlYWQgPSAwOwotICAgICAgICBsZXQgdmVyc2lvbiA9IHJlYWRfdTMyX2Zyb21fYnl0ZXMoYnl0ZXMsICZtdXQgaGVhZCkudW53cmFwKCk7Ci0gICAgICAgIGFzc2VydF9lcSEodmVyc2lvbiwgMSk7CisgICAgICAgIGxldCB1bnBhY2tlZF92ZXJzaW9uID0gcmVhZF91MzJfZnJvbV9zdGFydF9vZl9ieXRlcyhieXRlcykudW53cmFwKCk7CisgICAgICAgIGFzc2VydF9lcSEodW5wYWNrZWRfdmVyc2lvbiwgREVGQVVMVF9GSUxFX1ZFUlNJT04pOworICAgIH0KKworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X3JvdW5kX3RyaXBfZGVmYXVsdCgpIHsKKyAgICAgICAgbGV0IHRhYmxlOiBQYWNrYWdlVGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKTsKKyAgICAgICAgbGV0IHRhYmxlX2J5dGVzID0gdGFibGUuaW50b19ieXRlcygpOworCisgICAgICAgIGxldCByZWludGVycHJldGVkX3RhYmxlID0gUGFja2FnZVRhYmxlOjpmcm9tX2J5dGVzKCZ0YWJsZV9ieXRlcykudW53cmFwKCk7CisKKyAgICAgICAgYXNzZXJ0X2VxISh0YWJsZSwgcmVpbnRlcnByZXRlZF90YWJsZSk7CisgICAgfQorCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3Rfcm91bmRfdHJpcF9tYXgoKSB7CisgICAgICAgIGxldCB0YWJsZTogUGFja2FnZVRhYmxlID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZShNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTik7CisgICAgICAgIGxldCB0YWJsZV9ieXRlcyA9IHRhYmxlLmludG9fYnl0ZXMoKTsKKworICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF90YWJsZSA9IFBhY2thZ2VUYWJsZTo6ZnJvbV9ieXRlcygmdGFibGVfYnl0ZXMpLnVud3JhcCgpOworCisgICAgICAgIGFzc2VydF9lcSEodGFibGUsIHJlaW50ZXJwcmV0ZWRfdGFibGUpOwogICAgIH0KIAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biBmaWxlIHR5cGUgY2hlY2sKICAgICBmbiB0ZXN0X2ZpbGVfdHlwZV9jaGVjaygpIHsKLSAgICAgICAgbGV0IG11dCBwYWNrYWdlX3RhYmxlID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZSgpOworICAgICAgICBsZXQgbXV0IHBhY2thZ2VfdGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgcGFja2FnZV90YWJsZS5oZWFkZXIuZmlsZV90eXBlID0gMTIzdTg7CiAgICAgICAgIGxldCBlcnJvciA9IFBhY2thZ2VUYWJsZTo6ZnJvbV9ieXRlcygmcGFja2FnZV90YWJsZS5pbnRvX2J5dGVzKCkpLnVud3JhcF9lcnIoKTsKICAgICAgICAgYXNzZXJ0X2VxISgKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL3Rlc3RfdXRpbHMucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy90ZXN0X3V0aWxzLnJzCmluZGV4IDEwNjY2NmMuLjdjNjAzZGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL3Rlc3RfdXRpbHMucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvdGVzdF91dGlscy5ycwpAQCAtMjQsMzIgKzI0LDU5IEBACiB1c2Ugc3RkOjppbzo6V3JpdGU7CiB1c2UgdGVtcGZpbGU6Ok5hbWVkVGVtcEZpbGU7CiAKLXB1YiBmbiBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKCkgLT4gUGFja2FnZVRhYmxlIHsKK3B1YiBmbiBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKHZlcnNpb246IHUzMikgLT4gUGFja2FnZVRhYmxlIHsKICAgICBsZXQgaGVhZGVyID0gUGFja2FnZVRhYmxlSGVhZGVyIHsKLSAgICAgICAgdmVyc2lvbjogMSwKKyAgICAgICAgdmVyc2lvbjogdmVyc2lvbiwKICAgICAgICAgY29udGFpbmVyOiBTdHJpbmc6OmZyb20oIm1vY2t1cCIpLAogICAgICAgICBmaWxlX3R5cGU6IFN0b3JhZ2VGaWxlVHlwZTo6UGFja2FnZU1hcCBhcyB1OCwKLSAgICAgICAgZmlsZV9zaXplOiAyMDksCisgICAgICAgIGZpbGVfc2l6ZTogbWF0Y2ggdmVyc2lvbiB7CisgICAgICAgICAgICAxID0+IDIwOSwKKyAgICAgICAgICAgIDIgPT4gMjMzLAorICAgICAgICAgICAgXyA9PiBwYW5pYyEoIlVuc3VwcG9ydGVkIHZlcnNpb24uIiksCisgICAgICAgIH0sCiAgICAgICAgIG51bV9wYWNrYWdlczogMywKICAgICAgICAgYnVja2V0X29mZnNldDogMzEsCiAgICAgICAgIG5vZGVfb2Zmc2V0OiA1OSwKICAgICB9OwotICAgIGxldCBidWNrZXRzOiBWZWM8T3B0aW9uPHUzMj4+ID0gdmVjIVtTb21lKDU5KSwgTm9uZSwgTm9uZSwgU29tZSgxMDkpLCBOb25lLCBOb25lLCBOb25lXTsKKyAgICBsZXQgYnVja2V0czogVmVjPE9wdGlvbjx1MzI+PiA9IG1hdGNoIHZlcnNpb24geworICAgICAgICAxID0+IHZlYyFbU29tZSg1OSksIE5vbmUsIE5vbmUsIFNvbWUoMTA5KSwgTm9uZSwgTm9uZSwgTm9uZV0sCisgICAgICAgIDIgPT4gdmVjIVtTb21lKDU5KSwgTm9uZSwgTm9uZSwgU29tZSgxMTcpLCBOb25lLCBOb25lLCBOb25lXSwKKyAgICAgICAgXyA9PiBwYW5pYyEoIlVuc3VwcG9ydGVkIHZlcnNpb24uIiksCisgICAgfTsKICAgICBsZXQgZmlyc3Rfbm9kZSA9IFBhY2thZ2VUYWJsZU5vZGUgewogICAgICAgICBwYWNrYWdlX25hbWU6IFN0cmluZzo6ZnJvbSgiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIpLAogICAgICAgICBwYWNrYWdlX2lkOiAxLAorICAgICAgICBmaW5nZXJwcmludDogbWF0Y2ggdmVyc2lvbiB7CisgICAgICAgICAgICAxID0+IDAsCisgICAgICAgICAgICAyID0+IDQ0MzE5NDA1MDIyNzQ4NTc5NjR1NjQsCisgICAgICAgICAgICBfID0+IHBhbmljISgiVW5zdXBwb3J0ZWQgdmVyc2lvbi4iKSwKKyAgICAgICAgfSwKICAgICAgICAgYm9vbGVhbl9zdGFydF9pbmRleDogMywKICAgICAgICAgbmV4dF9vZmZzZXQ6IE5vbmUsCiAgICAgfTsKICAgICBsZXQgc2Vjb25kX25vZGUgPSBQYWNrYWdlVGFibGVOb2RlIHsKICAgICAgICAgcGFja2FnZV9uYW1lOiBTdHJpbmc6OmZyb20oImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiKSwKICAgICAgICAgcGFja2FnZV9pZDogMCwKKyAgICAgICAgZmluZ2VycHJpbnQ6IG1hdGNoIHZlcnNpb24geworICAgICAgICAgICAgMSA9PiAwLAorICAgICAgICAgICAgMiA9PiAxNTI0ODk0ODUxMDU5MDE1ODA4NnU2NCwKKyAgICAgICAgICAgIF8gPT4gcGFuaWMhKCJVbnN1cHBvcnRlZCB2ZXJzaW9uLiIpLAorICAgICAgICB9LAogICAgICAgICBib29sZWFuX3N0YXJ0X2luZGV4OiAwLAotICAgICAgICBuZXh0X29mZnNldDogU29tZSgxNTkpLAorICAgICAgICBuZXh0X29mZnNldDogbWF0Y2ggdmVyc2lvbiB7CisgICAgICAgICAgICAxID0+IFNvbWUoMTU5KSwKKyAgICAgICAgICAgIDIgPT4gU29tZSgxNzUpLAorICAgICAgICAgICAgXyA9PiBwYW5pYyEoIlVuc3VwcG9ydGVkIHZlcnNpb24uIiksCisgICAgICAgIH0sCiAgICAgfTsKICAgICBsZXQgdGhpcmRfbm9kZSA9IFBhY2thZ2VUYWJsZU5vZGUgewogICAgICAgICBwYWNrYWdlX25hbWU6IFN0cmluZzo6ZnJvbSgiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIpLAogICAgICAgICBwYWNrYWdlX2lkOiAyLAorICAgICAgICBmaW5nZXJwcmludDogbWF0Y2ggdmVyc2lvbiB7CisgICAgICAgICAgICAxID0+IDAsCisgICAgICAgICAgICAyID0+IDE2MjMzMjI5OTE3NzExNjIyMzc1dTY0LAorICAgICAgICAgICAgXyA9PiBwYW5pYyEoIlVuc3VwcG9ydGVkIHZlcnNpb24uIiksCisgICAgICAgIH0sCiAgICAgICAgIGJvb2xlYW5fc3RhcnRfaW5kZXg6IDYsCiAgICAgICAgIG5leHRfb2Zmc2V0OiBOb25lLAogICAgIH07CkBAIC03Niw5ICsxMDMsOSBAQAogICAgIH0KIH0KIAotcHViIGZuIGNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUoKSAtPiBGbGFnVGFibGUgeworcHViIGZuIGNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUodmVyc2lvbjogdTMyKSAtPiBGbGFnVGFibGUgewogICAgIGxldCBoZWFkZXIgPSBGbGFnVGFibGVIZWFkZXIgewotICAgICAgICB2ZXJzaW9uOiAxLAorICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uLAogICAgICAgICBjb250YWluZXI6IFN0cmluZzo6ZnJvbSgibW9ja3VwIiksCiAgICAgICAgIGZpbGVfdHlwZTogU3RvcmFnZUZpbGVUeXBlOjpGbGFnTWFwIGFzIHU4LAogICAgICAgICBmaWxlX3NpemU6IDMyMSwKQEAgLTExOCw5ICsxNDUsOSBAQAogICAgIEZsYWdUYWJsZSB7IGhlYWRlciwgYnVja2V0cywgbm9kZXMgfQogfQogCi1wdWIgZm4gY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KCkgLT4gRmxhZ1ZhbHVlTGlzdCB7CitwdWIgZm4gY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KHZlcnNpb246IHUzMikgLT4gRmxhZ1ZhbHVlTGlzdCB7CiAgICAgbGV0IGhlYWRlciA9IEZsYWdWYWx1ZUhlYWRlciB7Ci0gICAgICAgIHZlcnNpb246IDEsCisgICAgICAgIHZlcnNpb246IHZlcnNpb24sCiAgICAgICAgIGNvbnRhaW5lcjogU3RyaW5nOjpmcm9tKCJtb2NrdXAiKSwKICAgICAgICAgZmlsZV90eXBlOiBTdG9yYWdlRmlsZVR5cGU6OkZsYWdWYWwgYXMgdTgsCiAgICAgICAgIGZpbGVfc2l6ZTogMzUsCkBAIC0xMzEsOSArMTU4LDkgQEAKICAgICBGbGFnVmFsdWVMaXN0IHsgaGVhZGVyLCBib29sZWFucyB9CiB9CiAKLXB1YiBmbiBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdCgpIC0+IEZsYWdJbmZvTGlzdCB7CitwdWIgZm4gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QodmVyc2lvbjogdTMyKSAtPiBGbGFnSW5mb0xpc3QgewogICAgIGxldCBoZWFkZXIgPSBGbGFnSW5mb0hlYWRlciB7Ci0gICAgICAgIHZlcnNpb246IDEsCisgICAgICAgIHZlcnNpb246IHZlcnNpb24sCiAgICAgICAgIGNvbnRhaW5lcjogU3RyaW5nOjpmcm9tKCJtb2NrdXAiKSwKICAgICAgICAgZmlsZV90eXBlOiBTdG9yYWdlRmlsZVR5cGU6OkZsYWdJbmZvIGFzIHU4LAogICAgICAgICBmaWxlX3NpemU6IDM1LApkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL0Fjb25maWdTdG9yYWdlRXhjZXB0aW9uLmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uamF2YQppbmRleCA4NmE3NWYyLi4zMjRjNTVkIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uamF2YQorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uamF2YQpAQCAtMTYsMTIgKzE2LDEyMiBAQAogCiBwYWNrYWdlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlOwogCisvKioKKyAqIEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgYWNjZXNzaW5nIEFjb25maWcgU3RvcmFnZS4KKyAqCisgKiA8cD5UaGlzIGV4Y2VwdGlvbiBpbmRpY2F0ZXMgYSBnZW5lcmFsIHByb2JsZW0gd2l0aCBBY29uZmlnIFN0b3JhZ2UsIHN1Y2ggYXMgYW4gaW5hYmlsaXR5IHRvIHJlYWQKKyAqIG9yIHdyaXRlIGRhdGEuCisgKi8KIHB1YmxpYyBjbGFzcyBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24geworCisgICAgLyoqIEdlbmVyaWMgZXJyb3IgY29kZSBpbmRpY2F0aW5nIGFuIHVuc3BlY2lmaWVkIEFjb25maWcgU3RvcmFnZSBlcnJvci4gKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9HRU5FUklDID0gMDsKKworICAgIC8qKiBFcnJvciBjb2RlIGluZGljYXRpbmcgdGhhdCB0aGUgQWNvbmZpZyBTdG9yYWdlIHN5c3RlbSBpcyBub3QgZm91bmQgb24gdGhlIGRldmljZS4gKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9TVE9SQUdFX1NZU1RFTV9OT1RfRk9VTkQgPSAxOworCisgICAgLyoqIEVycm9yIGNvZGUgaW5kaWNhdGluZyB0aGF0IHRoZSByZXF1ZXN0ZWQgY29uZmlndXJhdGlvbiBwYWNrYWdlIGlzIG5vdCBmb3VuZC4gKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9QQUNLQUdFX05PVF9GT1VORCA9IDI7CisKKyAgICAvKiogRXJyb3IgY29kZSBpbmRpY2F0aW5nIHRoYXQgdGhlIHNwZWNpZmllZCBjb250YWluZXIgaXMgbm90IGZvdW5kLiAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0NPTlRBSU5FUl9OT1RfRk9VTkQgPSAzOworCisgICAgLyoqIEVycm9yIGNvZGUgaW5kaWNhdGluZyB0aGF0IHRoZXJlIHdhcyBhbiBlcnJvciByZWFkaW5nIHRoZSBBY29uZmlnIFN0b3JhZ2UgZmlsZS4gKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9DQU5OT1RfUkVBRF9TVE9SQUdFX0ZJTEUgPSA0OworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfRklMRV9GSU5HRVJQUklOVF9NSVNNQVRDSCA9IDU7CisKKyAgICBwcml2YXRlIGZpbmFsIGludCBtRXJyb3JDb2RlOworCisgICAgLyoqCisgICAgICogQ29uc3RydWN0cyBhIG5ldyB7QGNvZGUgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb259IHdpdGggYSBnZW5lcmljIGVycm9yIGNvZGUgYW5kIHRoZSBzcGVjaWZpZWQKKyAgICAgKiBkZXRhaWwgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBtc2cgVGhlIGRldGFpbCBtZXNzYWdlIGZvciB0aGlzIGV4Y2VwdGlvbi4KKyAgICAgKi8KICAgICBwdWJsaWMgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24oU3RyaW5nIG1zZykgewogICAgICAgICBzdXBlcihtc2cpOworICAgICAgICBtRXJyb3JDb2RlID0gRVJST1JfR0VORVJJQzsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IHtAY29kZSBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbn0gd2l0aCBhIGdlbmVyaWMgZXJyb3IgY29kZSwgdGhlIHNwZWNpZmllZAorICAgICAqIGRldGFpbCBtZXNzYWdlLCBhbmQgY2F1c2UuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbXNnIFRoZSBkZXRhaWwgbWVzc2FnZSBmb3IgdGhpcyBleGNlcHRpb24uCisgICAgICogQHBhcmFtIGNhdXNlIFRoZSBjYXVzZSBvZiB0aGlzIGV4Y2VwdGlvbi4KKyAgICAgKi8KICAgICBwdWJsaWMgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24oU3RyaW5nIG1zZywgVGhyb3dhYmxlIGNhdXNlKSB7CiAgICAgICAgIHN1cGVyKG1zZywgY2F1c2UpOworICAgICAgICBtRXJyb3JDb2RlID0gRVJST1JfR0VORVJJQzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IHtAY29kZSBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbn0gd2l0aCB0aGUgc3BlY2lmaWVkIGVycm9yIGNvZGUgYW5kIGRldGFpbAorICAgICAqIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZXJyb3JDb2RlIFRoZSBlcnJvciBjb2RlIGZvciB0aGlzIGV4Y2VwdGlvbi4KKyAgICAgKiBAcGFyYW0gbXNnIFRoZSBkZXRhaWwgbWVzc2FnZSBmb3IgdGhpcyBleGNlcHRpb24uCisgICAgICovCisgICAgcHVibGljIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uKGludCBlcnJvckNvZGUsIFN0cmluZyBtc2cpIHsKKyAgICAgICAgc3VwZXIobXNnKTsKKyAgICAgICAgbUVycm9yQ29kZSA9IGVycm9yQ29kZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IHtAY29kZSBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbn0gd2l0aCB0aGUgc3BlY2lmaWVkIGVycm9yIGNvZGUsIGRldGFpbAorICAgICAqIG1lc3NhZ2UsIGFuZCBjYXVzZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBlcnJvckNvZGUgVGhlIGVycm9yIGNvZGUgZm9yIHRoaXMgZXhjZXB0aW9uLgorICAgICAqIEBwYXJhbSBtc2cgVGhlIGRldGFpbCBtZXNzYWdlIGZvciB0aGlzIGV4Y2VwdGlvbi4KKyAgICAgKiBAcGFyYW0gY2F1c2UgVGhlIGNhdXNlIG9mIHRoaXMgZXhjZXB0aW9uLgorICAgICAqLworICAgIHB1YmxpYyBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbihpbnQgZXJyb3JDb2RlLCBTdHJpbmcgbXNnLCBUaHJvd2FibGUgY2F1c2UpIHsKKyAgICAgICAgc3VwZXIobXNnLCBjYXVzZSk7CisgICAgICAgIG1FcnJvckNvZGUgPSBlcnJvckNvZGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgZXJyb3IgY29kZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBleGNlcHRpb24uCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFRoZSBlcnJvciBjb2RlLgorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0RXJyb3JDb2RlKCkgeworICAgICAgICByZXR1cm4gbUVycm9yQ29kZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlIGZvciB0aGlzIGV4Y2VwdGlvbiwgaW5jbHVkaW5nIHRoZSBlcnJvciBjb2RlIGFuZCB0aGUgb3JpZ2luYWwKKyAgICAgKiBtZXNzYWdlLgorICAgICAqCisgICAgICogQHJldHVybiBUaGUgZXJyb3IgbWVzc2FnZS4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKSB7CisgICAgICAgIHJldHVybiBlcnJvclN0cmluZygpICsgIjogIiArIHN1cGVyLmdldE1lc3NhZ2UoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlcnJvciBjb2RlLgorICAgICAqCisgICAgICogQHJldHVybiBUaGUgZXJyb3IgY29kZSBzdHJpbmcuCisgICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmcgZXJyb3JTdHJpbmcoKSB7CisgICAgICAgIHN3aXRjaCAobUVycm9yQ29kZSkgeworICAgICAgICAgICAgY2FzZSBFUlJPUl9HRU5FUklDOgorICAgICAgICAgICAgICAgIHJldHVybiAiRVJST1JfR0VORVJJQyI7CisgICAgICAgICAgICBjYXNlIEVSUk9SX1NUT1JBR0VfU1lTVEVNX05PVF9GT1VORDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkVSUk9SX1NUT1JBR0VfU1lTVEVNX05PVF9GT1VORCI7CisgICAgICAgICAgICBjYXNlIEVSUk9SX1BBQ0tBR0VfTk9UX0ZPVU5EOgorICAgICAgICAgICAgICAgIHJldHVybiAiRVJST1JfUEFDS0FHRV9OT1RfRk9VTkQiOworICAgICAgICAgICAgY2FzZSBFUlJPUl9DT05UQUlORVJfTk9UX0ZPVU5EOgorICAgICAgICAgICAgICAgIHJldHVybiAiRVJST1JfQ09OVEFJTkVSX05PVF9GT1VORCI7CisgICAgICAgICAgICBjYXNlIEVSUk9SX0NBTk5PVF9SRUFEX1NUT1JBR0VfRklMRToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkVSUk9SX0NBTk5PVF9SRUFEX1NUT1JBR0VfRklMRSI7CisgICAgICAgICAgICBjYXNlIEVSUk9SX0ZJTEVfRklOR0VSUFJJTlRfTUlTTUFUQ0g6CisgICAgICAgICAgICAgICAgcmV0dXJuICJFUlJPUl9GSUxFX0ZJTkdFUlBSSU5UX01JU01BVENIIjsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICI8VW5rbm93biBlcnJvciBjb2RlICIgKyBtRXJyb3JDb2RlICsgIj4iOworICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL0J5dGVCdWZmZXJSZWFkZXIuamF2YSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9CeXRlQnVmZmVyUmVhZGVyLmphdmEKaW5kZXggNGJlYTA4My4uOTU3MTU2OCAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL0J5dGVCdWZmZXJSZWFkZXIuamF2YQorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvQnl0ZUJ1ZmZlclJlYWRlci5qYXZhCkBAIC00MSw4ICs0MSwxNiBAQAogICAgICAgICByZXR1cm4gdGhpcy5tQnl0ZUJ1ZmZlci5nZXRJbnQoKTsKICAgICB9CiAKKyAgICBwdWJsaWMgbG9uZyByZWFkTG9uZygpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubUJ5dGVCdWZmZXIuZ2V0TG9uZygpOworICAgIH0KKwogICAgIHB1YmxpYyBTdHJpbmcgcmVhZFN0cmluZygpIHsKICAgICAgICAgaW50IGxlbmd0aCA9IHJlYWRJbnQoKTsKKyAgICAgICAgaWYgKGxlbmd0aCA+IDEwMjQpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgIlN0cmluZyBsZW5ndGggZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgc2l6ZSAoMTAyNCBieXRlcyk6ICIgKyBsZW5ndGgpOworICAgICAgICB9CiAgICAgICAgIGJ5dGVbXSBieXRlcyA9IG5ldyBieXRlW2xlbmd0aF07CiAgICAgICAgIG1CeXRlQnVmZmVyLmdldChieXRlcywgMCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoYnl0ZXMsIFN0YW5kYXJkQ2hhcnNldHMuVVRGXzgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL0ZpbGVUeXBlLmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvRmlsZVR5cGUuamF2YQppbmRleCBiMGIxYjliLi5jMzU0ODczIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvRmlsZVR5cGUuamF2YQorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvRmlsZVR5cGUuamF2YQpAQCAtNDIsNCArNDIsMjAgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQogICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgIHJldHVybiAiUEFDS0FHRV9NQVAiOworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIHJldHVybiAiRkxBR19NQVAiOworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIHJldHVybiAiRkxBR19WQUwiOworICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIHJldHVybiAiRkxBR19JTkZPIjsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICJ1bnJlY29nbml6ZWQgdHlwZSI7CisgICAgICAgIH0KKyAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvRmxhZ1RhYmxlLmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvRmxhZ1RhYmxlLmphdmEKaW5kZXggOTgzOGE3Yy4uNzU3ODQ0YSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL0ZsYWdUYWJsZS5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9GbGFnVGFibGUuamF2YQpAQCAtMzcsOSArMzcsMTYgQEAKICAgICBwdWJsaWMgTm9kZSBnZXQoaW50IHBhY2thZ2VJZCwgU3RyaW5nIGZsYWdOYW1lKSB7CiAgICAgICAgIGludCBudW1CdWNrZXRzID0gKG1IZWFkZXIubU5vZGVPZmZzZXQgLSBtSGVhZGVyLm1CdWNrZXRPZmZzZXQpIC8gNDsKICAgICAgICAgaW50IGJ1Y2tldEluZGV4ID0gVGFibGVVdGlscy5nZXRCdWNrZXRJbmRleChtYWtlS2V5KHBhY2thZ2VJZCwgZmxhZ05hbWUpLCBudW1CdWNrZXRzKTsKKyAgICAgICAgaW50IG5ld1Bvc2l0aW9uID0gbUhlYWRlci5tQnVja2V0T2Zmc2V0ICsgYnVja2V0SW5kZXggKiA0OworICAgICAgICBpZiAobmV3UG9zaXRpb24gPj0gbUhlYWRlci5tTm9kZU9mZnNldCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KIAotICAgICAgICBtUmVhZGVyLnBvc2l0aW9uKG1IZWFkZXIubUJ1Y2tldE9mZnNldCArIGJ1Y2tldEluZGV4ICogNCk7CisgICAgICAgIG1SZWFkZXIucG9zaXRpb24obmV3UG9zaXRpb24pOwogICAgICAgICBpbnQgbm9kZUluZGV4ID0gbVJlYWRlci5yZWFkSW50KCk7CisgICAgICAgIGlmIChub2RlSW5kZXggPCBtSGVhZGVyLm1Ob2RlT2Zmc2V0IHx8IG5vZGVJbmRleCA+PSBtSGVhZGVyLm1GaWxlU2l6ZSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KIAogICAgICAgICB3aGlsZSAobm9kZUluZGV4ICE9IC0xKSB7CiAgICAgICAgICAgICBtUmVhZGVyLnBvc2l0aW9uKG5vZGVJbmRleCk7CkBAIC01MCw3ICs1Nyw3IEBACiAgICAgICAgICAgICBub2RlSW5kZXggPSBub2RlLm1OZXh0T2Zmc2V0OwogICAgICAgICB9CiAKLSAgICAgICAgdGhyb3cgbmV3IEFjb25maWdTdG9yYWdlRXhjZXB0aW9uKCJnZXQgY2Fubm90IGZpbmQgZmxhZzogIiArIGZsYWdOYW1lKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogCiAgICAgcHVibGljIEhlYWRlciBnZXRIZWFkZXIoKSB7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvUGFja2FnZVRhYmxlLmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvUGFja2FnZVRhYmxlLmphdmEKaW5kZXggNzczYjg4Mi4uYTQ1ZDEyYSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL1BhY2thZ2VUYWJsZS5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9QYWNrYWdlVGFibGUuamF2YQpAQCAtMzUsMjMgKzM1LDI5IEBACiAgICAgfQogCiAgICAgcHVibGljIE5vZGUgZ2V0KFN0cmluZyBwYWNrYWdlTmFtZSkgewotCiAgICAgICAgIGludCBudW1CdWNrZXRzID0gKG1IZWFkZXIubU5vZGVPZmZzZXQgLSBtSGVhZGVyLm1CdWNrZXRPZmZzZXQpIC8gNDsKICAgICAgICAgaW50IGJ1Y2tldEluZGV4ID0gVGFibGVVdGlscy5nZXRCdWNrZXRJbmRleChwYWNrYWdlTmFtZS5nZXRCeXRlcyhVVEZfOCksIG51bUJ1Y2tldHMpOwotCi0gICAgICAgIG1SZWFkZXIucG9zaXRpb24obUhlYWRlci5tQnVja2V0T2Zmc2V0ICsgYnVja2V0SW5kZXggKiA0KTsKKyAgICAgICAgaW50IG5ld1Bvc2l0aW9uID0gbUhlYWRlci5tQnVja2V0T2Zmc2V0ICsgYnVja2V0SW5kZXggKiA0OworICAgICAgICBpZiAobmV3UG9zaXRpb24gPj0gbUhlYWRlci5tTm9kZU9mZnNldCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgbVJlYWRlci5wb3NpdGlvbihuZXdQb3NpdGlvbik7CiAgICAgICAgIGludCBub2RlSW5kZXggPSBtUmVhZGVyLnJlYWRJbnQoKTsKIAorICAgICAgICBpZiAobm9kZUluZGV4IDwgbUhlYWRlci5tTm9kZU9mZnNldCB8fCBub2RlSW5kZXggPj0gbUhlYWRlci5tRmlsZVNpemUpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKICAgICAgICAgd2hpbGUgKG5vZGVJbmRleCAhPSAtMSkgewogICAgICAgICAgICAgbVJlYWRlci5wb3NpdGlvbihub2RlSW5kZXgpOwotICAgICAgICAgICAgTm9kZSBub2RlID0gTm9kZS5mcm9tQnl0ZXMobVJlYWRlcik7CisgICAgICAgICAgICBOb2RlIG5vZGUgPSBOb2RlLmZyb21CeXRlcyhtUmVhZGVyLCBtSGVhZGVyLm1WZXJzaW9uKTsKICAgICAgICAgICAgIGlmIChPYmplY3RzLmVxdWFscyhwYWNrYWdlTmFtZSwgbm9kZS5tUGFja2FnZU5hbWUpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBub2RlSW5kZXggPSBub2RlLm1OZXh0T2Zmc2V0OwogICAgICAgICB9CiAKLSAgICAgICAgdGhyb3cgbmV3IEFjb25maWdTdG9yYWdlRXhjZXB0aW9uKCJnZXQgY2Fubm90IGZpbmQgcGFja2FnZTogIiArIHBhY2thZ2VOYW1lKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogCiAgICAgcHVibGljIEhlYWRlciBnZXRIZWFkZXIoKSB7CkBAIC02OCw3ICs3NCw3IEBACiAgICAgICAgIHByaXZhdGUgaW50IG1CdWNrZXRPZmZzZXQ7CiAgICAgICAgIHByaXZhdGUgaW50IG1Ob2RlT2Zmc2V0OwogCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgSGVhZGVyIGZyb21CeXRlcyhCeXRlQnVmZmVyUmVhZGVyIHJlYWRlcikgeworICAgICAgICBwcml2YXRlIHN0YXRpYyBIZWFkZXIgZnJvbUJ5dGVzKEJ5dGVCdWZmZXJSZWFkZXIgcmVhZGVyKSB7CiAgICAgICAgICAgICBIZWFkZXIgaGVhZGVyID0gbmV3IEhlYWRlcigpOwogICAgICAgICAgICAgaGVhZGVyLm1WZXJzaW9uID0gcmVhZGVyLnJlYWRJbnQoKTsKICAgICAgICAgICAgIGhlYWRlci5tQ29udGFpbmVyID0gcmVhZGVyLnJlYWRTdHJpbmcoKTsKQEAgLTExOCwxMCArMTI0LDI0IEBACiAKICAgICAgICAgcHJpdmF0ZSBTdHJpbmcgbVBhY2thZ2VOYW1lOwogICAgICAgICBwcml2YXRlIGludCBtUGFja2FnZUlkOworICAgICAgICBwcml2YXRlIGxvbmcgbVBhY2thZ2VGaW5nZXJwcmludDsKICAgICAgICAgcHJpdmF0ZSBpbnQgbUJvb2xlYW5TdGFydEluZGV4OwogICAgICAgICBwcml2YXRlIGludCBtTmV4dE9mZnNldDsKKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1IYXNQYWNrYWdlRmluZ2VycHJpbnQ7CiAKLSAgICAgICAgcHVibGljIHN0YXRpYyBOb2RlIGZyb21CeXRlcyhCeXRlQnVmZmVyUmVhZGVyIHJlYWRlcikgeworICAgICAgICBwcml2YXRlIHN0YXRpYyBOb2RlIGZyb21CeXRlcyhCeXRlQnVmZmVyUmVhZGVyIHJlYWRlciwgaW50IHZlcnNpb24pIHsKKyAgICAgICAgICAgIHN3aXRjaCAodmVyc2lvbikgeworICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZyb21CeXRlc1YxKHJlYWRlcik7CisgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnJvbUJ5dGVzVjIocmVhZGVyKTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAvLyBEbyB3ZSB3YW50IHRvIHRocm93IGhlcmU/CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTm9kZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgTm9kZSBmcm9tQnl0ZXNWMShCeXRlQnVmZmVyUmVhZGVyIHJlYWRlcikgewogICAgICAgICAgICAgTm9kZSBub2RlID0gbmV3IE5vZGUoKTsKICAgICAgICAgICAgIG5vZGUubVBhY2thZ2VOYW1lID0gcmVhZGVyLnJlYWRTdHJpbmcoKTsKICAgICAgICAgICAgIG5vZGUubVBhY2thZ2VJZCA9IHJlYWRlci5yZWFkSW50KCk7CkBAIC0xMzEsNiArMTUxLDE4IEBACiAgICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICAgfQogCisgICAgICAgIHByaXZhdGUgc3RhdGljIE5vZGUgZnJvbUJ5dGVzVjIoQnl0ZUJ1ZmZlclJlYWRlciByZWFkZXIpIHsKKyAgICAgICAgICAgIE5vZGUgbm9kZSA9IG5ldyBOb2RlKCk7CisgICAgICAgICAgICBub2RlLm1QYWNrYWdlTmFtZSA9IHJlYWRlci5yZWFkU3RyaW5nKCk7CisgICAgICAgICAgICBub2RlLm1QYWNrYWdlSWQgPSByZWFkZXIucmVhZEludCgpOworICAgICAgICAgICAgbm9kZS5tUGFja2FnZUZpbmdlcnByaW50ID0gcmVhZGVyLnJlYWRMb25nKCk7CisgICAgICAgICAgICBub2RlLm1Cb29sZWFuU3RhcnRJbmRleCA9IHJlYWRlci5yZWFkSW50KCk7CisgICAgICAgICAgICBub2RlLm1OZXh0T2Zmc2V0ID0gcmVhZGVyLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIG5vZGUubU5leHRPZmZzZXQgPSBub2RlLm1OZXh0T2Zmc2V0ID09IDAgPyAtMSA6IG5vZGUubU5leHRPZmZzZXQ7CisgICAgICAgICAgICBub2RlLm1IYXNQYWNrYWdlRmluZ2VycHJpbnQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgIH0KKwogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKICAgICAgICAgICAgIHJldHVybiBPYmplY3RzLmhhc2gobVBhY2thZ2VOYW1lLCBtUGFja2FnZUlkLCBtQm9vbGVhblN0YXJ0SW5kZXgsIG1OZXh0T2Zmc2V0KTsKQEAgLTE2MSw2ICsxOTMsMTAgQEAKICAgICAgICAgICAgIHJldHVybiBtUGFja2FnZUlkOwogICAgICAgICB9CiAKKyAgICAgICAgcHVibGljIGxvbmcgZ2V0UGFja2FnZUZpbmdlcnByaW50KCkgeworICAgICAgICAgICAgcmV0dXJuIG1QYWNrYWdlRmluZ2VycHJpbnQ7CisgICAgICAgIH0KKwogICAgICAgICBwdWJsaWMgaW50IGdldEJvb2xlYW5TdGFydEluZGV4KCkgewogICAgICAgICAgICAgcmV0dXJuIG1Cb29sZWFuU3RhcnRJbmRleDsKICAgICAgICAgfQpAQCAtMTY4LDUgKzIwNCw5IEBACiAgICAgICAgIHB1YmxpYyBpbnQgZ2V0TmV4dE9mZnNldCgpIHsKICAgICAgICAgICAgIHJldHVybiBtTmV4dE9mZnNldDsKICAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBib29sZWFuIGhhc1BhY2thZ2VGaW5nZXJwcmludCgpIHsKKyAgICAgICAgICAgIHJldHVybiBtSGFzUGFja2FnZUZpbmdlcnByaW50OworICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL1N0b3JhZ2VGaWxlUHJvdmlkZXIuamF2YSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9TdG9yYWdlRmlsZVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFhNGUyNgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9TdG9yYWdlRmlsZVByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlOworCitpbXBvcnQgamF2YS5pby5DbG9zZWFibGU7CitpbXBvcnQgamF2YS5uaW8uTWFwcGVkQnl0ZUJ1ZmZlcjsKK2ltcG9ydCBqYXZhLm5pby5jaGFubmVscy5GaWxlQ2hhbm5lbDsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkRpcmVjdG9yeVN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEubmlvLmZpbGUuTm9TdWNoRmlsZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlN0YW5kYXJkT3Blbk9wdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworLyoqIEBoaWRlICovCitwdWJsaWMgY2xhc3MgU3RvcmFnZUZpbGVQcm92aWRlciB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9NQVBfUEFUSCA9ICIvbWV0YWRhdGEvYWNvbmZpZy9tYXBzLyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfQk9PVF9QQVRIID0gIi9tZXRhZGF0YS9hY29uZmlnL2Jvb3QvIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUE1BUF9GSUxFX0VYVCA9ICIucGFja2FnZS5tYXAiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGTUFQX0ZJTEVfRVhUID0gIi5mbGFnLm1hcCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTF9GSUxFX0VYVCA9ICIudmFsIjsKKworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1NYXBQYXRoOworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1Cb290UGF0aDsKKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBzdGF0aWMgU3RvcmFnZUZpbGVQcm92aWRlciBnZXREZWZhdWx0UHJvdmlkZXIoKSB7CisgICAgICAgIHJldHVybiBuZXcgU3RvcmFnZUZpbGVQcm92aWRlcihERUZBVUxUX01BUF9QQVRILCBERUZBVUxUX0JPT1RfUEFUSCk7CisgICAgfQorCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIFN0b3JhZ2VGaWxlUHJvdmlkZXIoU3RyaW5nIG1hcFBhdGgsIFN0cmluZyBib290UGF0aCkgeworICAgICAgICBtTWFwUGF0aCA9IG1hcFBhdGg7CisgICAgICAgIG1Cb290UGF0aCA9IGJvb3RQYXRoOworICAgIH0KKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBMaXN0PFN0cmluZz4gbGlzdENvbnRhaW5lcnMoU3RyaW5nW10gZXhjbHVkZXMpIHsKKyAgICAgICAgTGlzdDxTdHJpbmc+IHJlc3VsdCA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBTZXQ8U3RyaW5nPiBzZXQgPSBuZXcgSGFzaFNldDw+KEFycmF5cy5hc0xpc3QoZXhjbHVkZXMpKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgRGlyZWN0b3J5U3RyZWFtPFBhdGg+IHN0cmVhbSA9CisgICAgICAgICAgICAgICAgICAgIEZpbGVzLm5ld0RpcmVjdG9yeVN0cmVhbShQYXRocy5nZXQobU1hcFBhdGgpLCAiKiIgKyBQTUFQX0ZJTEVfRVhUKTsKKyAgICAgICAgICAgIGZvciAoUGF0aCBlbnRyeSA6IHN0cmVhbSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBmaWxlTmFtZSA9IGVudHJ5LmdldEZpbGVOYW1lKCkudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgY29udGFpbmVyID0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lLnN1YnN0cmluZygwLCBmaWxlTmFtZS5sZW5ndGgoKSAtIFBNQVBfRklMRV9FWFQubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIGlmICghc2V0LmNvbnRhaW5zKGNvbnRhaW5lcikpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChjb250YWluZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoTm9TdWNoRmlsZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEFjb25maWdTdG9yYWdlRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KCJGYWlsIHRvIGxpc3QgbWFwIGZpbGVzIGluIHBhdGggJXMiLCBtTWFwUGF0aCksIGUpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgUGFja2FnZVRhYmxlIGdldFBhY2thZ2VUYWJsZShTdHJpbmcgY29udGFpbmVyKSB7CisgICAgICAgIHJldHVybiBnZXRQYWNrYWdlVGFibGUoUGF0aHMuZ2V0KG1NYXBQYXRoLCBjb250YWluZXIgKyBQTUFQX0ZJTEVfRVhUKSk7CisgICAgfQorCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIEZsYWdUYWJsZSBnZXRGbGFnVGFibGUoU3RyaW5nIGNvbnRhaW5lcikgeworICAgICAgICByZXR1cm4gRmxhZ1RhYmxlLmZyb21CeXRlcygKKyAgICAgICAgICAgICAgICBtYXBTdG9yYWdlRmlsZShQYXRocy5nZXQobU1hcFBhdGgsIGNvbnRhaW5lciArIEZNQVBfRklMRV9FWFQpLCBGaWxlVHlwZS5GTEFHX01BUCkpOworICAgIH0KKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBGbGFnVmFsdWVMaXN0IGdldEZsYWdWYWx1ZUxpc3QoU3RyaW5nIGNvbnRhaW5lcikgeworICAgICAgICByZXR1cm4gRmxhZ1ZhbHVlTGlzdC5mcm9tQnl0ZXMoCisgICAgICAgICAgICAgICAgbWFwU3RvcmFnZUZpbGUoUGF0aHMuZ2V0KG1Cb290UGF0aCwgY29udGFpbmVyICsgVkFMX0ZJTEVfRVhUKSwgRmlsZVR5cGUuRkxBR19WQUwpKTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIFBhY2thZ2VUYWJsZSBnZXRQYWNrYWdlVGFibGUoUGF0aCBwYXRoKSB7CisgICAgICAgIHJldHVybiBQYWNrYWdlVGFibGUuZnJvbUJ5dGVzKG1hcFN0b3JhZ2VGaWxlKHBhdGgsIEZpbGVUeXBlLlBBQ0tBR0VfTUFQKSk7CisgICAgfQorCisgICAgLy8gTWFwIGEgc3RvcmFnZSBmaWxlIGdpdmVuIGZpbGUgcGF0aAorICAgIHByaXZhdGUgc3RhdGljIE1hcHBlZEJ5dGVCdWZmZXIgbWFwU3RvcmFnZUZpbGUoUGF0aCBmaWxlLCBGaWxlVHlwZSB0eXBlKSB7CisgICAgICAgIEZpbGVDaGFubmVsIGNoYW5uZWwgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY2hhbm5lbCA9IEZpbGVDaGFubmVsLm9wZW4oZmlsZSwgU3RhbmRhcmRPcGVuT3B0aW9uLlJFQUQpOworICAgICAgICAgICAgcmV0dXJuIGNoYW5uZWwubWFwKEZpbGVDaGFubmVsLk1hcE1vZGUuUkVBRF9PTkxZLCAwLCBjaGFubmVsLnNpemUoKSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLkVSUk9SX0NBTk5PVF9SRUFEX1NUT1JBR0VfRklMRSwKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgiRmFpbCB0byBtbWFwIHN0b3JhZ2UgJXMgZmlsZSAlcyIsIHR5cGUudG9TdHJpbmcoKSwgZmlsZSksCisgICAgICAgICAgICAgICAgICAgIGUpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgcXVpZXRseURpc3Bvc2UoY2hhbm5lbCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHF1aWV0bHlEaXNwb3NlKENsb3NlYWJsZSBjbG9zYWJsZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKGNsb3NhYmxlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBjbG9zYWJsZS5jbG9zZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgLy8gbm8gbmVlZCB0byBjYXJlLCBhdCBsZWFzdCBhcyBvZiBub3cKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvQW5kcm9pZC5icCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvQW5kcm9pZC5icAppbmRleCAxMmU0YWNhLi5iZDQ2ZDVmIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL0FuZHJvaWQuYnAKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9BbmRyb2lkLmJwCkBAIC0xMCwxMCArMTAsMTQgQEAKICAgICAgICAgImxpYmJhc2UiLAogICAgIF0sCiAgICAgZGF0YTogWwotICAgICAgICAicGFja2FnZS5tYXAiLAotICAgICAgICAiZmxhZy5tYXAiLAotICAgICAgICAiZmxhZy52YWwiLAotICAgICAgICAiZmxhZy5pbmZvIiwKKyAgICAgICAgImRhdGEvdjEvcGFja2FnZV92MS5tYXAiLAorICAgICAgICAiZGF0YS92MS9mbGFnX3YxLm1hcCIsCisgICAgICAgICJkYXRhL3YxL2ZsYWdfdjEudmFsIiwKKyAgICAgICAgImRhdGEvdjEvZmxhZ192MS5pbmZvIiwKKyAgICAgICAgImRhdGEvdjIvcGFja2FnZV92Mi5tYXAiLAorICAgICAgICAiZGF0YS92Mi9mbGFnX3YyLm1hcCIsCisgICAgICAgICJkYXRhL3YyL2ZsYWdfdjIudmFsIiwKKyAgICAgICAgImRhdGEvdjIvZmxhZ192Mi5pbmZvIiwKICAgICBdLAogICAgIHRlc3Rfc3VpdGVzOiBbCiAgICAgICAgICJkZXZpY2UtdGVzdHMiLApAQCAtMzUsMTAgKzM5LDE0IEBACiAgICAgdGVzdF9jb25maWc6ICJBbmRyb2lkU3RvcmFnZUphdmVUZXN0LnhtbCIsCiAgICAgc2RrX3ZlcnNpb246ICJ0ZXN0X2N1cnJlbnQiLAogICAgIGRhdGE6IFsKLSAgICAgICAgInBhY2thZ2UubWFwIiwKLSAgICAgICAgImZsYWcubWFwIiwKLSAgICAgICAgImZsYWcudmFsIiwKLSAgICAgICAgImZsYWcuaW5mbyIsCisgICAgICAgICJkYXRhL3YxL3BhY2thZ2VfdjEubWFwIiwKKyAgICAgICAgImRhdGEvdjEvZmxhZ192MS5tYXAiLAorICAgICAgICAiZGF0YS92MS9mbGFnX3YxLnZhbCIsCisgICAgICAgICJkYXRhL3YxL2ZsYWdfdjEuaW5mbyIsCisgICAgICAgICJkYXRhL3YyL3BhY2thZ2VfdjIubWFwIiwKKyAgICAgICAgImRhdGEvdjIvZmxhZ192Mi5tYXAiLAorICAgICAgICAiZGF0YS92Mi9mbGFnX3YyLnZhbCIsCisgICAgICAgICJkYXRhL3YyL2ZsYWdfdjIuaW5mbyIsCiAgICAgXSwKICAgICB0ZXN0X3N1aXRlczogWwogICAgICAgICAiZ2VuZXJhbC10ZXN0cyIsCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL0FuZHJvaWRTdG9yYWdlSmF2ZVRlc3QueG1sIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9BbmRyb2lkU3RvcmFnZUphdmVUZXN0LnhtbAppbmRleCAyZDUyZDQ0Li5iZmMyMzhlIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL0FuZHJvaWRTdG9yYWdlSmF2ZVRlc3QueG1sCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvQW5kcm9pZFN0b3JhZ2VKYXZlVGVzdC54bWwKQEAgLTIxLDEzICsyMSwxOCBAQAogICAgIDwvdGFyZ2V0X3ByZXBhcmVyPgogICAgIDx0YXJnZXRfcHJlcGFyZXIgY2xhc3M9ImNvbS5hbmRyb2lkLmNvbXBhdGliaWxpdHkuY29tbW9uLnRyYWRlZmVkLnRhcmdldHByZXAuRmlsZVB1c2hlciI+CiAgICAgICAgIDxvcHRpb24gbmFtZT0iY2xlYW51cCIgdmFsdWU9InRydWUiIC8+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9InBhY2thZ2UubWFwLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX2ZpbGVfdGVzdF9qYXZhL3Rlc3RkYXRhL3BhY2thZ2UubWFwIiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2giIHZhbHVlPSJmbGFnLm1hcC0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9maWxlX3Rlc3RfamF2YS90ZXN0ZGF0YS9mbGFnLm1hcCIgLz4KLSAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0iZmxhZy52YWwtPi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfZmlsZV90ZXN0X2phdmEvdGVzdGRhdGEvZmxhZy52YWwiIC8+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9ImZsYWcuaW5mby0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9maWxlX3Rlc3RfamF2YS90ZXN0ZGF0YS9mbGFnLmluZm8iIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9InBhY2thZ2VfdjEubWFwLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX2ZpbGVfdGVzdF9qYXZhL3Rlc3RkYXRhL21vY2sudjEucGFja2FnZS5tYXAiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9ImZsYWdfdjEubWFwLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX2ZpbGVfdGVzdF9qYXZhL3Rlc3RkYXRhL21vY2sudjEuZmxhZy5tYXAiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9ImZsYWdfdjEudmFsLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX2ZpbGVfdGVzdF9qYXZhL3Rlc3RkYXRhL21vY2sudjEudmFsIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2giIHZhbHVlPSJmbGFnX3YxLmluZm8tPi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfZmlsZV90ZXN0X2phdmEvdGVzdGRhdGEvbW9jay52MS5pbmZvIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2giIHZhbHVlPSJwYWNrYWdlX3YyLm1hcC0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9maWxlX3Rlc3RfamF2YS90ZXN0ZGF0YS9tb2NrLnYyLnBhY2thZ2UubWFwIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2giIHZhbHVlPSJmbGFnX3YyLm1hcC0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9maWxlX3Rlc3RfamF2YS90ZXN0ZGF0YS9tb2NrLnYyLmZsYWcubWFwIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2giIHZhbHVlPSJmbGFnX3YyLnZhbC0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9maWxlX3Rlc3RfamF2YS90ZXN0ZGF0YS9tb2NrLnYyLnZhbCIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0iZmxhZ192Mi5pbmZvLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX2ZpbGVfdGVzdF9qYXZhL3Rlc3RkYXRhL21vY2sudjIuaW5mbyIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwb3N0LXB1c2giIHZhbHVlPSJjaG1vZCArciAvZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX2ZpbGVfdGVzdF9qYXZhL3Rlc3RkYXRhLyIgLz4KICAgICA8L3RhcmdldF9wcmVwYXJlcj4KICAgICA8dGVzdCBjbGFzcz0iY29tLmFuZHJvaWQudHJhZGVmZWQudGVzdHR5cGUuQW5kcm9pZEpVbml0VGVzdCIgPgogICAgICAgICA8b3B0aW9uIG5hbWU9InBhY2thZ2UiIHZhbHVlPSJhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0IiAvPgogICAgICAgICA8b3B0aW9uIG5hbWU9InJ1bnRpbWUtaGludCIgdmFsdWU9IjFtIiAvPgogICAgIDwvdGVzdD4KLTwvY29uZmlndXJhdGlvbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2ZsYWcuaW5mbyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92MS9mbGFnX3YxLmluZm8Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZmxhZy5pbmZvCnJlbmFtZSB0byB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5pbmZvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZmxhZy5tYXAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5tYXAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZmxhZy5tYXAKcmVuYW1lIHRvIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92MS9mbGFnX3YxLm1hcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2ZsYWcudmFsIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEudmFsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2ZsYWcudmFsCnJlbmFtZSB0byB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS52YWwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9wYWNrYWdlLm1hcCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92MS9wYWNrYWdlX3YxLm1hcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9wYWNrYWdlLm1hcApyZW5hbWUgdG8gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YxL3BhY2thZ2VfdjEubWFwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLmluZm8gYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYjdmZGUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi5pbmZvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLm1hcCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLm1hcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjQ2ODVjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YyL2ZsYWdfdjIubWFwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLnZhbCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLnZhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2Q0NzUwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YyL2ZsYWdfdjIudmFsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92Mi9wYWNrYWdlX3YyLm1hcCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92Mi9wYWNrYWdlX3YyLm1hcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTlmOTVlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YyL3BhY2thZ2VfdjIubWFwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvamFyamFyLnR4dCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvamFyamFyLnR4dAppbmRleCBhNmMxN2ZhLi4yNDk1MmVjIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2phcmphci50eHQKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9qYXJqYXIudHh0CkBAIC03LDYgKzcsOCBAQAogcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GaWxlVHlwZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LkZpbGVUeXBlCiBydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkZsYWdWYWx1ZUxpc3QgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5GbGFnVmFsdWVMaXN0CiBydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLlRhYmxlVXRpbHMgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5UYWJsZVV0aWxzCitydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkFjb25maWdQYWNrYWdlSW1wbCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LkFjb25maWdQYWNrYWdlSW1wbAorcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5TdG9yYWdlRmlsZVByb3ZpZGVyIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QuU3RvcmFnZUZpbGVQcm92aWRlcgogCiAKIHJ1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuRmxhZ1RhYmxlJCogYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5GbGFnVGFibGUkQDEKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9GbGFnVGFibGVUZXN0LmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvRmxhZ1RhYmxlVGVzdC5qYXZhCmluZGV4IGZkNDBkNGMuLmRjNDY1YjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9GbGFnVGFibGVUZXN0LmphdmEKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zcmNzL0ZsYWdUYWJsZVRlc3QuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0RmxhZ1RhYmxlX3JpZ2h0SGVhZGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIEZsYWdUYWJsZSBmbGFnVGFibGUgPSBGbGFnVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdEZsYWdNYXBCeXRlQnVmZmVyKCkpOworICAgICAgICBGbGFnVGFibGUgZmxhZ1RhYmxlID0gRmxhZ1RhYmxlLmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RGbGFnTWFwQnl0ZUJ1ZmZlcigxKSk7CiAgICAgICAgIEZsYWdUYWJsZS5IZWFkZXIgaGVhZGVyID0gZmxhZ1RhYmxlLmdldEhlYWRlcigpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMSwgaGVhZGVyLmdldFZlcnNpb24oKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygibW9ja3VwIiwgaGVhZGVyLmdldENvbnRhaW5lcigpKTsKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEZsYWdUYWJsZV9yaWdodE5vZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgRmxhZ1RhYmxlIGZsYWdUYWJsZSA9IEZsYWdUYWJsZS5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0RmxhZ01hcEJ5dGVCdWZmZXIoKSk7CisgICAgICAgIEZsYWdUYWJsZSBmbGFnVGFibGUgPSBGbGFnVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdEZsYWdNYXBCeXRlQnVmZmVyKDEpKTsKIAogICAgICAgICBGbGFnVGFibGUuTm9kZSBub2RlMSA9IGZsYWdUYWJsZS5nZXQoMCwgImVuYWJsZWRfcm8iKTsKICAgICAgICAgRmxhZ1RhYmxlLk5vZGUgbm9kZTIgPSBmbGFnVGFibGUuZ2V0KDAsICJlbmFibGVkX3J3Iik7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvRmxhZ1ZhbHVlTGlzdFRlc3QuamF2YSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9GbGFnVmFsdWVMaXN0VGVzdC5qYXZhCmluZGV4IDFiMGRlNjMuLjMwNmRmN2QgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9GbGFnVmFsdWVMaXN0VGVzdC5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9GbGFnVmFsdWVMaXN0VGVzdC5qYXZhCkBAIC0zNCw3ICszNCw3IEBACiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0RmxhZ1ZhbHVlTGlzdF9yaWdodEhlYWRlcigpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBGbGFnVmFsdWVMaXN0IGZsYWdWYWx1ZUxpc3QgPQotICAgICAgICAgICAgICAgIEZsYWdWYWx1ZUxpc3QuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdEZsYWdWYWxCeXRlQnVmZmVyKCkpOworICAgICAgICAgICAgICAgIEZsYWdWYWx1ZUxpc3QuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdEZsYWdWYWxCeXRlQnVmZmVyKDEpKTsKICAgICAgICAgRmxhZ1ZhbHVlTGlzdC5IZWFkZXIgaGVhZGVyID0gZmxhZ1ZhbHVlTGlzdC5nZXRIZWFkZXIoKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGhlYWRlci5nZXRWZXJzaW9uKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoIm1vY2t1cCIsIGhlYWRlci5nZXRDb250YWluZXIoKSk7CkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0RmxhZ1ZhbHVlTGlzdF9yaWdodE5vZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgRmxhZ1ZhbHVlTGlzdCBmbGFnVmFsdWVMaXN0ID0KLSAgICAgICAgICAgICAgICBGbGFnVmFsdWVMaXN0LmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RGbGFnVmFsQnl0ZUJ1ZmZlcigpKTsKKyAgICAgICAgICAgICAgICBGbGFnVmFsdWVMaXN0LmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RGbGFnVmFsQnl0ZUJ1ZmZlcigxKSk7CiAKICAgICAgICAgYm9vbGVhbltdIGV4cGVjdGVkID0gbmV3IGJvb2xlYW5bXSB7ZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlfTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLmxlbmd0aCwgZmxhZ1ZhbHVlTGlzdC5zaXplKCkpOwpAQCAtNjAsMTEgKzYwLDExIEBACiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0RmxhZ1ZhbHVlTGlzdF9nZXRWYWx1ZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBQYWNrYWdlVGFibGUgcGFja2FnZVRhYmxlID0KLSAgICAgICAgICAgICAgICBQYWNrYWdlVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdFBhY2thZ2VNYXBCeXRlQnVmZmVyKCkpOwotICAgICAgICBGbGFnVGFibGUgZmxhZ1RhYmxlID0gRmxhZ1RhYmxlLmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RGbGFnTWFwQnl0ZUJ1ZmZlcigpKTsKKyAgICAgICAgICAgICAgICBQYWNrYWdlVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdFBhY2thZ2VNYXBCeXRlQnVmZmVyKDEpKTsKKyAgICAgICAgRmxhZ1RhYmxlIGZsYWdUYWJsZSA9IEZsYWdUYWJsZS5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0RmxhZ01hcEJ5dGVCdWZmZXIoMSkpOwogCiAgICAgICAgIEZsYWdWYWx1ZUxpc3QgZmxhZ1ZhbHVlTGlzdCA9Ci0gICAgICAgICAgICAgICAgRmxhZ1ZhbHVlTGlzdC5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0RmxhZ1ZhbEJ5dGVCdWZmZXIoKSk7CisgICAgICAgICAgICAgICAgRmxhZ1ZhbHVlTGlzdC5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0RmxhZ1ZhbEJ5dGVCdWZmZXIoMSkpOwogCiAgICAgICAgIFBhY2thZ2VUYWJsZS5Ob2RlIHBOb2RlID0gcGFja2FnZVRhYmxlLmdldCgiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIpOwogICAgICAgICBGbGFnVGFibGUuTm9kZSBmTm9kZSA9IGZsYWdUYWJsZS5nZXQocE5vZGUuZ2V0UGFja2FnZUlkKCksICJlbmFibGVkX3J3Iik7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvUGFja2FnZVRhYmxlVGVzdC5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zcmNzL1BhY2thZ2VUYWJsZVRlc3QuamF2YQppbmRleCBlN2UxOWQ4Li41OTA2ZDhiIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvUGFja2FnZVRhYmxlVGVzdC5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9QYWNrYWdlVGFibGVUZXN0LmphdmEKQEAgLTE3LDYgKzE3LDggQEAKIHBhY2thZ2UgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdDsKIAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwogCiBpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuRmlsZVR5cGU7CiBpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuUGFja2FnZVRhYmxlOwpAQCAtMzEsNyArMzMsNyBAQAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdFBhY2thZ2VUYWJsZV9yaWdodEhlYWRlcigpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBQYWNrYWdlVGFibGUgcGFja2FnZVRhYmxlID0KLSAgICAgICAgICAgICAgICBQYWNrYWdlVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdFBhY2thZ2VNYXBCeXRlQnVmZmVyKCkpOworICAgICAgICAgICAgICAgIFBhY2thZ2VUYWJsZS5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0UGFja2FnZU1hcEJ5dGVCdWZmZXIoMSkpOwogICAgICAgICBQYWNrYWdlVGFibGUuSGVhZGVyIGhlYWRlciA9IHBhY2thZ2VUYWJsZS5nZXRIZWFkZXIoKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGhlYWRlci5nZXRWZXJzaW9uKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoIm1vY2t1cCIsIGhlYWRlci5nZXRDb250YWluZXIoKSk7CkBAIC00Myw5ICs0NSwyMyBAQAogICAgIH0KIAogICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFBhY2thZ2VUYWJsZV9yaWdodEhlYWRlcl92MigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBQYWNrYWdlVGFibGUgcGFja2FnZVRhYmxlID0KKyAgICAgICAgICAgICAgICBQYWNrYWdlVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdFBhY2thZ2VNYXBCeXRlQnVmZmVyKDIpKTsKKyAgICAgICAgUGFja2FnZVRhYmxlLkhlYWRlciBoZWFkZXIgPSBwYWNrYWdlVGFibGUuZ2V0SGVhZGVyKCk7CisgICAgICAgIGFzc2VydEVxdWFscygyLCBoZWFkZXIuZ2V0VmVyc2lvbigpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJtb2NrdXAiLCBoZWFkZXIuZ2V0Q29udGFpbmVyKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoRmlsZVR5cGUuUEFDS0FHRV9NQVAsIGhlYWRlci5nZXRGaWxlVHlwZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIzMywgaGVhZGVyLmdldEZpbGVTaXplKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMywgaGVhZGVyLmdldE51bVBhY2thZ2VzKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMzEsIGhlYWRlci5nZXRCdWNrZXRPZmZzZXQoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyg1OSwgaGVhZGVyLmdldE5vZGVPZmZzZXQoKSk7CisgICAgfQorCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0UGFja2FnZVRhYmxlX3JpZ2h0Tm9kZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBQYWNrYWdlVGFibGUgcGFja2FnZVRhYmxlID0KLSAgICAgICAgICAgICAgICBQYWNrYWdlVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdFBhY2thZ2VNYXBCeXRlQnVmZmVyKCkpOworICAgICAgICAgICAgICAgIFBhY2thZ2VUYWJsZS5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0UGFja2FnZU1hcEJ5dGVCdWZmZXIoMSkpOwogCiAgICAgICAgIFBhY2thZ2VUYWJsZS5Ob2RlIG5vZGUxID0gcGFja2FnZVRhYmxlLmdldCgiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIpOwogICAgICAgICBQYWNrYWdlVGFibGUuTm9kZSBub2RlMiA9IHBhY2thZ2VUYWJsZS5nZXQoImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiKTsKQEAgLTY2LDUgKzgyLDQzIEBACiAgICAgICAgIGFzc2VydEVxdWFscygxNTksIG5vZGUxLmdldE5leHRPZmZzZXQoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygtMSwgbm9kZTIuZ2V0TmV4dE9mZnNldCgpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKC0xLCBub2RlNC5nZXROZXh0T2Zmc2V0KCkpOworCisgICAgICAgIGFzc2VydEZhbHNlKG5vZGUxLmhhc1BhY2thZ2VGaW5nZXJwcmludCgpKTsKKyAgICAgICAgYXNzZXJ0RmFsc2Uobm9kZTIuaGFzUGFja2FnZUZpbmdlcnByaW50KCkpOworICAgICAgICBhc3NlcnRGYWxzZShub2RlNC5oYXNQYWNrYWdlRmluZ2VycHJpbnQoKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0UGFja2FnZVRhYmxlX3JpZ2h0Tm9kZV92MigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBQYWNrYWdlVGFibGUgcGFja2FnZVRhYmxlID0KKyAgICAgICAgICAgICAgICBQYWNrYWdlVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdFBhY2thZ2VNYXBCeXRlQnVmZmVyKDIpKTsKKworICAgICAgICBQYWNrYWdlVGFibGUuTm9kZSBub2RlMSA9IHBhY2thZ2VUYWJsZS5nZXQoImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiKTsKKyAgICAgICAgUGFja2FnZVRhYmxlLk5vZGUgbm9kZTIgPSBwYWNrYWdlVGFibGUuZ2V0KCJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIik7CisgICAgICAgIFBhY2thZ2VUYWJsZS5Ob2RlIG5vZGU0ID0gcGFja2FnZVRhYmxlLmdldCgiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIpOworCisgICAgICAgIGFzc2VydEVxdWFscygiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsIG5vZGUxLmdldFBhY2thZ2VOYW1lKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLCBub2RlMi5nZXRQYWNrYWdlTmFtZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80Iiwgbm9kZTQuZ2V0UGFja2FnZU5hbWUoKSk7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIG5vZGUxLmdldFBhY2thZ2VJZCgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIG5vZGUyLmdldFBhY2thZ2VJZCgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIG5vZGU0LmdldFBhY2thZ2VJZCgpKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMoMCwgbm9kZTEuZ2V0Qm9vbGVhblN0YXJ0SW5kZXgoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygzLCBub2RlMi5nZXRCb29sZWFuU3RhcnRJbmRleCgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIG5vZGU0LmdldEJvb2xlYW5TdGFydEluZGV4KCkpOworCisgICAgICAgIGFzc2VydEVxdWFscygxNzUsIG5vZGUxLmdldE5leHRPZmZzZXQoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygtMSwgbm9kZTIuZ2V0TmV4dE9mZnNldCgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKC0xLCBub2RlNC5nZXROZXh0T2Zmc2V0KCkpOworCisgICAgICAgIGFzc2VydFRydWUobm9kZTEuaGFzUGFja2FnZUZpbmdlcnByaW50KCkpOworICAgICAgICBhc3NlcnRUcnVlKG5vZGUyLmhhc1BhY2thZ2VGaW5nZXJwcmludCgpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShub2RlNC5oYXNQYWNrYWdlRmluZ2VycHJpbnQoKSk7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKC0zMTk3Nzk1NTYzMTE5MzkzNTMwTCwgbm9kZTEuZ2V0UGFja2FnZUZpbmdlcnByaW50KCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoNDQzMTk0MDUwMjI3NDg1Nzk2NEwsIG5vZGUyLmdldFBhY2thZ2VGaW5nZXJwcmludCgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKC0yMjEzNTE0MTU1OTk3OTI5MjQxTCwgbm9kZTQuZ2V0UGFja2FnZUZpbmdlcnByaW50KCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9TdG9yYWdlRmlsZVByb3ZpZGVyVGVzdC5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zcmNzL1N0b3JhZ2VGaWxlUHJvdmlkZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI3MjBmOQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9TdG9yYWdlRmlsZVByb3ZpZGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3Q7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90TnVsbDsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOworCitpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuRmxhZ1RhYmxlOworaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkZsYWdWYWx1ZUxpc3Q7CitpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuUGFja2FnZVRhYmxlOworaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLlN0b3JhZ2VGaWxlUHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKK2ltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7CitpbXBvcnQgb3JnLmp1bml0LnJ1bm5lcnMuSlVuaXQ0OworCitpbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoczsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworQFJ1bldpdGgoSlVuaXQ0LmNsYXNzKQorcHVibGljIGNsYXNzIFN0b3JhZ2VGaWxlUHJvdmlkZXJUZXN0IHsKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdGxpc3RDb250YWluZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0b3JhZ2VGaWxlUHJvdmlkZXIgcCA9CisgICAgICAgICAgICAgICAgbmV3IFN0b3JhZ2VGaWxlUHJvdmlkZXIoVGVzdERhdGFVdGlscy5URVNUREFUQV9QQVRILCBUZXN0RGF0YVV0aWxzLlRFU1REQVRBX1BBVEgpOworICAgICAgICBTdHJpbmdbXSBleGNsdWRlcyA9IHt9OworICAgICAgICBMaXN0PFN0cmluZz4gY29udGFpbmVycyA9IHAubGlzdENvbnRhaW5lcnMoZXhjbHVkZXMpOworICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY29udGFpbmVycy5zaXplKCkpOworCisgICAgICAgIGV4Y2x1ZGVzID0gbmV3IFN0cmluZ1tdIHsibW9jay52MSJ9OworICAgICAgICBjb250YWluZXJzID0gcC5saXN0Q29udGFpbmVycyhleGNsdWRlcyk7CisgICAgICAgIGFzc2VydEVxdWFscygxLCBjb250YWluZXJzLnNpemUoKSk7CisKKyAgICAgICAgcCA9IG5ldyBTdG9yYWdlRmlsZVByb3ZpZGVyKCJmYWtlL3BhdGgvIiwgImZha2UvcGF0aC8iKTsKKyAgICAgICAgY29udGFpbmVycyA9IHAubGlzdENvbnRhaW5lcnMoZXhjbHVkZXMpOworICAgICAgICBhc3NlcnRUcnVlKGNvbnRhaW5lcnMuaXNFbXB0eSgpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RMb2FkRmlsZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3RvcmFnZUZpbGVQcm92aWRlciBwID0KKyAgICAgICAgICAgICAgICBuZXcgU3RvcmFnZUZpbGVQcm92aWRlcihUZXN0RGF0YVV0aWxzLlRFU1REQVRBX1BBVEgsIFRlc3REYXRhVXRpbHMuVEVTVERBVEFfUEFUSCk7CisgICAgICAgIFBhY2thZ2VUYWJsZSBwdCA9IHAuZ2V0UGFja2FnZVRhYmxlKCJtb2NrLnYxIik7CisgICAgICAgIGFzc2VydE5vdE51bGwocHQpOworICAgICAgICBGbGFnVGFibGUgZiA9IHAuZ2V0RmxhZ1RhYmxlKCJtb2NrLnYxIik7CisgICAgICAgIGFzc2VydE5vdE51bGwoZik7CisgICAgICAgIEZsYWdWYWx1ZUxpc3QgdiA9IHAuZ2V0RmxhZ1ZhbHVlTGlzdCgibW9jay52MSIpOworICAgICAgICBhc3NlcnROb3ROdWxsKHYpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9UZXN0RGF0YVV0aWxzLmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvVGVzdERhdGFVdGlscy5qYXZhCmluZGV4IGYzNTk1MmQuLjM4ODk3MWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9UZXN0RGF0YVV0aWxzLmphdmEKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zcmNzL1Rlc3REYXRhVXRpbHMuamF2YQpAQCAtMjEsMjggKzIxLDI3IEBACiBpbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKIAogcHVibGljIGZpbmFsIGNsYXNzIFRlc3REYXRhVXRpbHMgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1BBQ0tBR0VfTUFQX1BBVEggPSAicGFja2FnZS5tYXAiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX0ZMQUdfTUFQX1BBVEggPSAiZmxhZy5tYXAiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX0ZMQUdfVkFMX1BBVEggPSAiZmxhZy52YWwiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX0ZMQUdfSU5GT19QQVRIID0gImZsYWcuaW5mbyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfUEFDS0FHRV9NQVBfUEFUSCA9ICJtb2NrLnYlZC5wYWNrYWdlLm1hcCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfRkxBR19NQVBfUEFUSCA9ICJtb2NrLnYlZC5mbGFnLm1hcCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfRkxBR19WQUxfUEFUSCA9ICJtb2NrLnYlZC52YWwiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX0ZMQUdfSU5GT19QQVRIID0gIm1vY2sudiVkLmluZm8iOwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1REQVRBX1BBVEggPQotICAgICAgICAgICAgIi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfZmlsZV90ZXN0X2phdmEvdGVzdGRhdGEvIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUREFUQV9QQVRIID0gIi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfZmlsZV90ZXN0X2phdmEvdGVzdGRhdGEvIjsKIAotICAgIHB1YmxpYyBzdGF0aWMgQnl0ZUJ1ZmZlciBnZXRUZXN0UGFja2FnZU1hcEJ5dGVCdWZmZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIHJlYWRGaWxlKFRFU1REQVRBX1BBVEggKyBURVNUX1BBQ0tBR0VfTUFQX1BBVEgpOworICAgIHB1YmxpYyBzdGF0aWMgQnl0ZUJ1ZmZlciBnZXRUZXN0UGFja2FnZU1hcEJ5dGVCdWZmZXIoaW50IHZlcnNpb24pIHRocm93cyBFeGNlcHRpb24geworICAgICAgICByZXR1cm4gcmVhZEZpbGUoVEVTVERBVEFfUEFUSCArIFN0cmluZy5mb3JtYXQoVEVTVF9QQUNLQUdFX01BUF9QQVRILCB2ZXJzaW9uKSk7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBCeXRlQnVmZmVyIGdldFRlc3RGbGFnTWFwQnl0ZUJ1ZmZlcigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gcmVhZEZpbGUoVEVTVERBVEFfUEFUSCArIFRFU1RfRkxBR19NQVBfUEFUSCk7CisgICAgcHVibGljIHN0YXRpYyBCeXRlQnVmZmVyIGdldFRlc3RGbGFnTWFwQnl0ZUJ1ZmZlcihpbnQgdmVyc2lvbikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiByZWFkRmlsZShURVNUREFUQV9QQVRIICsgU3RyaW5nLmZvcm1hdChURVNUX0ZMQUdfTUFQX1BBVEgsIHZlcnNpb24pKTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIEJ5dGVCdWZmZXIgZ2V0VGVzdEZsYWdWYWxCeXRlQnVmZmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiByZWFkRmlsZShURVNUREFUQV9QQVRIICsgVEVTVF9GTEFHX1ZBTF9QQVRIKTsKKyAgICBwdWJsaWMgc3RhdGljIEJ5dGVCdWZmZXIgZ2V0VGVzdEZsYWdWYWxCeXRlQnVmZmVyKGludCB2ZXJzaW9uKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIHJlYWRGaWxlKFRFU1REQVRBX1BBVEggKyBTdHJpbmcuZm9ybWF0KFRFU1RfRkxBR19WQUxfUEFUSCwgdmVyc2lvbikpOwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgQnl0ZUJ1ZmZlciBnZXRUZXN0RmxhZ0luZm9CeXRlQnVmZmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiByZWFkRmlsZShURVNUREFUQV9QQVRIICsgVEVTVF9GTEFHX0lORk9fUEFUSCk7CisgICAgcHVibGljIHN0YXRpYyBCeXRlQnVmZmVyIGdldFRlc3RGbGFnSW5mb0J5dGVCdWZmZXIoaW50IHZlcnNpb24pIHRocm93cyBFeGNlcHRpb24geworICAgICAgICByZXR1cm4gcmVhZEZpbGUoVEVTVERBVEFfUEFUSCArIFN0cmluZy5mb3JtYXQoVEVTVF9GTEFHX0lORk9fUEFUSCwgdmVyc2lvbikpOwogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIEJ5dGVCdWZmZXIgcmVhZEZpbGUoU3RyaW5nIGZpbGVOYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3RvcmFnZV9maWxlX3Rlc3QuY3BwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zdG9yYWdlX2ZpbGVfdGVzdC5jcHAKaW5kZXggZWJkMWRkOC4uNWMwMDhhZiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zdG9yYWdlX2ZpbGVfdGVzdC5jcHAKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zdG9yYWdlX2ZpbGVfdGVzdC5jcHAKQEAgLTI0LDEwICsyNCw4IEBACiB1c2luZyBuYW1lc3BhY2UgYW5kcm9pZDo6YmFzZTsKIHVzaW5nIG5hbWVzcGFjZSBhY29uZmlnX3N0b3JhZ2U7CiAKLXZvaWQgdmVyaWZ5X3ZhbHVlKGNvbnN0IEZsYWdWYWx1ZVN1bW1hcnkmIGZsYWcsCi0gICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcGFja2FnZV9uYW1lLAotICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZsYWdfbmFtZSwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmbGFnX3ZhbCwKK3ZvaWQgdmVyaWZ5X3ZhbHVlKGNvbnN0IEZsYWdWYWx1ZVN1bW1hcnkmIGZsYWcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYWNrYWdlX25hbWUsCisgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmxhZ19uYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgZmxhZ192YWwsCiAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWVfdHlwZSkgewogICBBU1NFUlRfRVEoZmxhZy5wYWNrYWdlX25hbWUsIHBhY2thZ2VfbmFtZSk7CiAgIEFTU0VSVF9FUShmbGFnLmZsYWdfbmFtZSwgZmxhZ19uYW1lKTsKQEAgLTM5LDEwICszNyw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYWNrYWdlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmbGFnX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmbGFnX3ZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfcmVhZHdyaXRlLAotICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc19zZXJ2ZXJfb3ZlcnJpZGUsCi0gICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzX2xvY2FsX292ZXJyaWRlKSB7CisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZV90eXBlLCBib29sIGlzX3JlYWR3cml0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNfc2VydmVyX292ZXJyaWRlLCBib29sIGhhc19sb2NhbF9vdmVycmlkZSkgewogICBBU1NFUlRfRVEoZmxhZy5wYWNrYWdlX25hbWUsIHBhY2thZ2VfbmFtZSk7CiAgIEFTU0VSVF9FUShmbGFnLmZsYWdfbmFtZSwgZmxhZ19uYW1lKTsKICAgQVNTRVJUX0VRKGZsYWcuZmxhZ192YWx1ZSwgZmxhZ192YWwpOwpAQCAtNTIsNjEgKzQ4LDEzNyBAQAogICBBU1NFUlRfRVEoZmxhZy5oYXNfbG9jYWxfb3ZlcnJpZGUsIGhhc19sb2NhbF9vdmVycmlkZSk7CiB9CiAKK1Jlc3VsdDxzdGQ6OnZlY3RvcjxGbGFnVmFsdWVTdW1tYXJ5Pj4gZ2V0X2ZsYWdfbGlzdF9yZXN1bHQoCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgdmVyc2lvbikgeworICBhdXRvIGNvbnN0IHRlc3RfYmFzZV9kaXIgPSBHZXRFeGVjdXRhYmxlRGlyZWN0b3J5KCk7CisgIGF1dG8gY29uc3QgdGVzdF9kaXIgPSB0ZXN0X2Jhc2VfZGlyICsgIi9kYXRhL3YiICsgdmVyc2lvbjsKKyAgYXV0byBjb25zdCBwYWNrYWdlX21hcCA9IHRlc3RfZGlyICsgIi9wYWNrYWdlX3YiICsgdmVyc2lvbiArICIubWFwIjsKKyAgYXV0byBjb25zdCBmbGFnX21hcCA9IHRlc3RfZGlyICsgIi9mbGFnX3YiICsgdmVyc2lvbiArICIubWFwIjsKKyAgYXV0byBjb25zdCBmbGFnX3ZhbCA9IHRlc3RfZGlyICsgIi9mbGFnX3YiICsgdmVyc2lvbiArICIudmFsIjsKKyAgcmV0dXJuIGFjb25maWdfc3RvcmFnZTo6bGlzdF9mbGFncyhwYWNrYWdlX21hcCwgZmxhZ19tYXAsIGZsYWdfdmFsKTsKK30KKworUmVzdWx0PHN0ZDo6dmVjdG9yPEZsYWdWYWx1ZUFuZEluZm9TdW1tYXJ5Pj4gZ2V0X2ZsYWdfbGlzdF9yZXN1bHRfd2l0aF9pbmZvKAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHZlcnNpb24pIHsKKyAgYXV0byBjb25zdCB0ZXN0X2Jhc2VfZGlyID0gR2V0RXhlY3V0YWJsZURpcmVjdG9yeSgpOworICBhdXRvIGNvbnN0IHRlc3RfZGlyID0gdGVzdF9iYXNlX2RpciArICIvZGF0YS92IiArIHZlcnNpb247CisgIGF1dG8gY29uc3QgcGFja2FnZV9tYXAgPSB0ZXN0X2RpciArICIvcGFja2FnZV92IiArIHZlcnNpb24gKyAiLm1hcCI7CisgIGF1dG8gY29uc3QgZmxhZ19tYXAgPSB0ZXN0X2RpciArICIvZmxhZ192IiArIHZlcnNpb24gKyAiLm1hcCI7CisgIGF1dG8gY29uc3QgZmxhZ192YWwgPSB0ZXN0X2RpciArICIvZmxhZ192IiArIHZlcnNpb24gKyAiLnZhbCI7CisgIGF1dG8gY29uc3QgZmxhZ19pbmZvID0gdGVzdF9kaXIgKyAiL2ZsYWdfdiIgKyB2ZXJzaW9uICsgIi5pbmZvIjsKKyAgcmV0dXJuIGFjb25maWdfc3RvcmFnZTo6bGlzdF9mbGFnc193aXRoX2luZm8ocGFja2FnZV9tYXAsIGZsYWdfbWFwLCBmbGFnX3ZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ19pbmZvKTsKK30KKwogVEVTVChBY29uZmlnU3RvcmFnZUZpbGVUZXN0LCB0ZXN0X2xpc3RfZmxhZykgewotICBhdXRvIGNvbnN0IHRlc3RfZGlyID0gR2V0RXhlY3V0YWJsZURpcmVjdG9yeSgpOwotICBhdXRvIGNvbnN0IHBhY2thZ2VfbWFwID0gdGVzdF9kaXIgKyAiL3BhY2thZ2UubWFwIjsKLSAgYXV0byBjb25zdCBmbGFnX21hcCA9IHRlc3RfZGlyICsgIi9mbGFnLm1hcCI7Ci0gIGF1dG8gY29uc3QgZmxhZ192YWwgPSB0ZXN0X2RpciArICIvZmxhZy52YWwiOwotICBhdXRvIGZsYWdfbGlzdF9yZXN1bHQgPSBhY29uZmlnX3N0b3JhZ2U6Omxpc3RfZmxhZ3MoCi0gICAgICBwYWNrYWdlX21hcCwgZmxhZ19tYXAsIGZsYWdfdmFsKTsKKyAgYXV0byBmbGFnX2xpc3RfcmVzdWx0ID0gZ2V0X2ZsYWdfbGlzdF9yZXN1bHQoIjEiKTsKICAgQVNTRVJUX1RSVUUoZmxhZ19saXN0X3Jlc3VsdC5vaygpKTsKIAogICBhdXRvIGNvbnN0JiBmbGFnX2xpc3QgPSAqZmxhZ19saXN0X3Jlc3VsdDsKICAgQVNTRVJUX0VRKGZsYWdfbGlzdC5zaXplKCksIDgpOwotICB2ZXJpZnlfdmFsdWUoZmxhZ19saXN0WzBdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsICJkaXNhYmxlZF9ydyIsCi0gICAgICAgICAgICAgICAiZmFsc2UiLCAiUmVhZFdyaXRlQm9vbGVhbiIpOworICB2ZXJpZnlfdmFsdWUoZmxhZ19saXN0WzBdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsCisgICAgICAgICAgICAgICAiZGlzYWJsZWRfcnciLCAiZmFsc2UiLCAiUmVhZFdyaXRlQm9vbGVhbiIpOwogICB2ZXJpZnlfdmFsdWUoZmxhZ19saXN0WzFdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsICJlbmFibGVkX3JvIiwKICAgICAgICAgICAgICAgICJ0cnVlIiwgIlJlYWRPbmx5Qm9vbGVhbiIpOwogICB2ZXJpZnlfdmFsdWUoZmxhZ19saXN0WzJdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsICJlbmFibGVkX3J3IiwKICAgICAgICAgICAgICAgICJ0cnVlIiwgIlJlYWRXcml0ZUJvb2xlYW4iKTsKLSAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFszXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLCAiZGlzYWJsZWRfcnciLAotICAgICAgICAgICAgICAgImZhbHNlIiwgIlJlYWRXcml0ZUJvb2xlYW4iKTsKLSAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFs0XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLCAiZW5hYmxlZF9maXhlZF9ybyIsCi0gICAgICAgICAgICAgICAidHJ1ZSIsICJGaXhlZFJlYWRPbmx5Qm9vbGVhbiIpOworICB2ZXJpZnlfdmFsdWUoZmxhZ19saXN0WzNdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsCisgICAgICAgICAgICAgICAiZGlzYWJsZWRfcnciLCAiZmFsc2UiLCAiUmVhZFdyaXRlQm9vbGVhbiIpOworICB2ZXJpZnlfdmFsdWUoZmxhZ19saXN0WzRdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsCisgICAgICAgICAgICAgICAiZW5hYmxlZF9maXhlZF9ybyIsICJ0cnVlIiwgIkZpeGVkUmVhZE9ubHlCb29sZWFuIik7CiAgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbNV0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwgImVuYWJsZWRfcm8iLAogICAgICAgICAgICAgICAgInRydWUiLCAiUmVhZE9ubHlCb29sZWFuIik7Ci0gIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbNl0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80IiwgImVuYWJsZWRfZml4ZWRfcm8iLAotICAgICAgICAgICAgICAgInRydWUiLCAiRml4ZWRSZWFkT25seUJvb2xlYW4iKTsKKyAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFs2XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiLAorICAgICAgICAgICAgICAgImVuYWJsZWRfZml4ZWRfcm8iLCAidHJ1ZSIsICJGaXhlZFJlYWRPbmx5Qm9vbGVhbiIpOworICB2ZXJpZnlfdmFsdWUoZmxhZ19saXN0WzddLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIsICJlbmFibGVkX3J3IiwKKyAgICAgICAgICAgICAgICJ0cnVlIiwgIlJlYWRXcml0ZUJvb2xlYW4iKTsKK30KKworLy8gVE9ETzogYi8zNzYyNTY0NzIgLSBVc2UgcGFyYW1ldGVyaXplZCB0ZXN0cy4KK1RFU1QoQWNvbmZpZ1N0b3JhZ2VGaWxlVGVzdCwgdGVzdF9saXN0X2ZsYWdfdjIpIHsKKyAgYXV0byBmbGFnX2xpc3RfcmVzdWx0ID0gZ2V0X2ZsYWdfbGlzdF9yZXN1bHQoIjIiKTsKKyAgQVNTRVJUX1RSVUUoZmxhZ19saXN0X3Jlc3VsdC5vaygpKTsKKworICBhdXRvIGNvbnN0JiBmbGFnX2xpc3QgPSAqZmxhZ19saXN0X3Jlc3VsdDsKKyAgQVNTRVJUX0VRKGZsYWdfbGlzdC5zaXplKCksIDgpOworICB2ZXJpZnlfdmFsdWUoZmxhZ19saXN0WzBdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsCisgICAgICAgICAgICAgICAiZGlzYWJsZWRfcnciLCAiZmFsc2UiLCAiUmVhZFdyaXRlQm9vbGVhbiIpOworICB2ZXJpZnlfdmFsdWUoZmxhZ19saXN0WzFdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsICJlbmFibGVkX3JvIiwKKyAgICAgICAgICAgICAgICJ0cnVlIiwgIlJlYWRPbmx5Qm9vbGVhbiIpOworICB2ZXJpZnlfdmFsdWUoZmxhZ19saXN0WzJdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsICJlbmFibGVkX3J3IiwKKyAgICAgICAgICAgICAgICJ0cnVlIiwgIlJlYWRXcml0ZUJvb2xlYW4iKTsKKyAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFszXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLAorICAgICAgICAgICAgICAgImRpc2FibGVkX3J3IiwgImZhbHNlIiwgIlJlYWRXcml0ZUJvb2xlYW4iKTsKKyAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFs0XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLAorICAgICAgICAgICAgICAgImVuYWJsZWRfZml4ZWRfcm8iLCAidHJ1ZSIsICJGaXhlZFJlYWRPbmx5Qm9vbGVhbiIpOworICB2ZXJpZnlfdmFsdWUoZmxhZ19saXN0WzVdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsICJlbmFibGVkX3JvIiwKKyAgICAgICAgICAgICAgICJ0cnVlIiwgIlJlYWRPbmx5Qm9vbGVhbiIpOworICB2ZXJpZnlfdmFsdWUoZmxhZ19saXN0WzZdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIsCisgICAgICAgICAgICAgICAiZW5hYmxlZF9maXhlZF9ybyIsICJ0cnVlIiwgIkZpeGVkUmVhZE9ubHlCb29sZWFuIik7CiAgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbN10sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80IiwgImVuYWJsZWRfcnciLAogICAgICAgICAgICAgICAgInRydWUiLCAiUmVhZFdyaXRlQm9vbGVhbiIpOwogfQogCiBURVNUKEFjb25maWdTdG9yYWdlRmlsZVRlc3QsIHRlc3RfbGlzdF9mbGFnX3dpdGhfaW5mbykgewotICBhdXRvIGNvbnN0IHRlc3RfZGlyID0gR2V0RXhlY3V0YWJsZURpcmVjdG9yeSgpOwotICBhdXRvIGNvbnN0IHBhY2thZ2VfbWFwID0gdGVzdF9kaXIgKyAiL3BhY2thZ2UubWFwIjsKLSAgYXV0byBjb25zdCBmbGFnX21hcCA9IHRlc3RfZGlyICsgIi9mbGFnLm1hcCI7Ci0gIGF1dG8gY29uc3QgZmxhZ192YWwgPSB0ZXN0X2RpciArICIvZmxhZy52YWwiOwotICBhdXRvIGNvbnN0IGZsYWdfaW5mbyA9IHRlc3RfZGlyICsgIi9mbGFnLmluZm8iOwotICBhdXRvIGZsYWdfbGlzdF9yZXN1bHQgPSBhY29uZmlnX3N0b3JhZ2U6Omxpc3RfZmxhZ3Nfd2l0aF9pbmZvKAotICAgICAgcGFja2FnZV9tYXAsIGZsYWdfbWFwLCBmbGFnX3ZhbCwgZmxhZ19pbmZvKTsKKyAgYXV0byBmbGFnX2xpc3RfcmVzdWx0ID0gZ2V0X2ZsYWdfbGlzdF9yZXN1bHRfd2l0aF9pbmZvKCIxIik7CiAgIEFTU0VSVF9UUlVFKGZsYWdfbGlzdF9yZXN1bHQub2soKSk7CiAKICAgYXV0byBjb25zdCYgZmxhZ19saXN0ID0gKmZsYWdfbGlzdF9yZXN1bHQ7CiAgIEFTU0VSVF9FUShmbGFnX2xpc3Quc2l6ZSgpLCA4KTsKLSAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzBdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsICJkaXNhYmxlZF9ydyIsCi0gICAgICAgICAgICAgICAgICAgICJmYWxzZSIsICJSZWFkV3JpdGVCb29sZWFuIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTsKLSAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzFdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsICJlbmFibGVkX3JvIiwKLSAgICAgICAgICAgICAgICAgICAgInRydWUiLCAiUmVhZE9ubHlCb29sZWFuIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7Ci0gIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFsyXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLCAiZW5hYmxlZF9ydyIsCi0gICAgICAgICAgICAgICAgICAgICJ0cnVlIiwgIlJlYWRXcml0ZUJvb2xlYW4iLCB0cnVlLCBmYWxzZSwgZmFsc2UpOwotICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbM10sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwgImRpc2FibGVkX3J3IiwKLSAgICAgICAgICAgICAgICAgICAgImZhbHNlIiwgIlJlYWRXcml0ZUJvb2xlYW4iLCB0cnVlLCBmYWxzZSwgZmFsc2UpOwotICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbNF0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwgImVuYWJsZWRfZml4ZWRfcm8iLAotICAgICAgICAgICAgICAgICAgICAidHJ1ZSIsICJGaXhlZFJlYWRPbmx5Qm9vbGVhbiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwotICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbNV0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwgImVuYWJsZWRfcm8iLAotICAgICAgICAgICAgICAgICAgICAidHJ1ZSIsICJSZWFkT25seUJvb2xlYW4iLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKLSAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzZdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIsICJlbmFibGVkX2ZpeGVkX3JvIiwKLSAgICAgICAgICAgICAgICAgICAgInRydWUiLCAiRml4ZWRSZWFkT25seUJvb2xlYW4iLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKLSAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzddLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIsICJlbmFibGVkX3J3IiwKLSAgICAgICAgICAgICAgICAgICAgInRydWUiLCAiUmVhZFdyaXRlQm9vbGVhbiIsIHRydWUsIGZhbHNlLCBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFswXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLAorICAgICAgICAgICAgICAgICAgICAiZGlzYWJsZWRfcnciLCAiZmFsc2UiLCAiUmVhZFdyaXRlQm9vbGVhbiIsIHRydWUsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFsxXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLAorICAgICAgICAgICAgICAgICAgICAiZW5hYmxlZF9ybyIsICJ0cnVlIiwgIlJlYWRPbmx5Qm9vbGVhbiIsIGZhbHNlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbMl0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwKKyAgICAgICAgICAgICAgICAgICAgImVuYWJsZWRfcnciLCAidHJ1ZSIsICJSZWFkV3JpdGVCb29sZWFuIiwgdHJ1ZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzNdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsCisgICAgICAgICAgICAgICAgICAgICJkaXNhYmxlZF9ydyIsICJmYWxzZSIsICJSZWFkV3JpdGVCb29sZWFuIiwgdHJ1ZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzRdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsCisgICAgICAgICAgICAgICAgICAgICJlbmFibGVkX2ZpeGVkX3JvIiwgInRydWUiLCAiRml4ZWRSZWFkT25seUJvb2xlYW4iLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UsIGZhbHNlKTsKKyAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzVdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsCisgICAgICAgICAgICAgICAgICAgICJlbmFibGVkX3JvIiwgInRydWUiLCAiUmVhZE9ubHlCb29sZWFuIiwgZmFsc2UsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFs2XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiLAorICAgICAgICAgICAgICAgICAgICAiZW5hYmxlZF9maXhlZF9ybyIsICJ0cnVlIiwgIkZpeGVkUmVhZE9ubHlCb29sZWFuIiwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFs3XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiLAorICAgICAgICAgICAgICAgICAgICAiZW5hYmxlZF9ydyIsICJ0cnVlIiwgIlJlYWRXcml0ZUJvb2xlYW4iLCB0cnVlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworfQorCitURVNUKEFjb25maWdTdG9yYWdlRmlsZVRlc3QsIHRlc3RfbGlzdF9mbGFnX3dpdGhfaW5mb192MikgeworICBhdXRvIGZsYWdfbGlzdF9yZXN1bHQgPSBnZXRfZmxhZ19saXN0X3Jlc3VsdF93aXRoX2luZm8oIjIiKTsKKyAgQVNTRVJUX1RSVUUoZmxhZ19saXN0X3Jlc3VsdC5vaygpKTsKKworICBhdXRvIGNvbnN0JiBmbGFnX2xpc3QgPSAqZmxhZ19saXN0X3Jlc3VsdDsKKyAgQVNTRVJUX0VRKGZsYWdfbGlzdC5zaXplKCksIDgpOworICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbMF0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwKKyAgICAgICAgICAgICAgICAgICAgImRpc2FibGVkX3J3IiwgImZhbHNlIiwgIlJlYWRXcml0ZUJvb2xlYW4iLCB0cnVlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbMV0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwKKyAgICAgICAgICAgICAgICAgICAgImVuYWJsZWRfcm8iLCAidHJ1ZSIsICJSZWFkT25seUJvb2xlYW4iLCBmYWxzZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzJdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsCisgICAgICAgICAgICAgICAgICAgICJlbmFibGVkX3J3IiwgInRydWUiLCAiUmVhZFdyaXRlQm9vbGVhbiIsIHRydWUsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFszXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLAorICAgICAgICAgICAgICAgICAgICAiZGlzYWJsZWRfcnciLCAiZmFsc2UiLCAiUmVhZFdyaXRlQm9vbGVhbiIsIHRydWUsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFs0XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLAorICAgICAgICAgICAgICAgICAgICAiZW5hYmxlZF9maXhlZF9ybyIsICJ0cnVlIiwgIkZpeGVkUmVhZE9ubHlCb29sZWFuIiwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFs1XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLAorICAgICAgICAgICAgICAgICAgICAiZW5hYmxlZF9ybyIsICJ0cnVlIiwgIlJlYWRPbmx5Qm9vbGVhbiIsIGZhbHNlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbNl0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80IiwKKyAgICAgICAgICAgICAgICAgICAgImVuYWJsZWRfZml4ZWRfcm8iLCAidHJ1ZSIsICJGaXhlZFJlYWRPbmx5Qm9vbGVhbiIsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSwgZmFsc2UpOworICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbN10sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80IiwKKyAgICAgICAgICAgICAgICAgICAgImVuYWJsZWRfcnciLCAidHJ1ZSIsICJSZWFkV3JpdGVCb29sZWFuIiwgdHJ1ZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL0FuZHJvaWQuYnAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9BbmRyb2lkLmJwCmluZGV4IGY5NmIyMjMuLjYyMTRlMmMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL0FuZHJvaWQuYnAKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvQW5kcm9pZC5icApAQCAtMzYsMTAgKzM2LDEwIEBACiAgICAgICAgICJsaWJyYW5kIiwKICAgICBdLAogICAgIGRhdGE6IFsKLSAgICAgICAgInRlc3RzL3BhY2thZ2UubWFwIiwKLSAgICAgICAgInRlc3RzL2ZsYWcubWFwIiwKLSAgICAgICAgInRlc3RzL2ZsYWcudmFsIiwKLSAgICAgICAgInRlc3RzL2ZsYWcuaW5mbyIsCisgICAgICAgICJ0ZXN0cy9kYXRhL3YxL3BhY2thZ2VfdjEubWFwIiwKKyAgICAgICAgInRlc3RzL2RhdGEvdjEvZmxhZ192MS5tYXAiLAorICAgICAgICAidGVzdHMvZGF0YS92MS9mbGFnX3YxLnZhbCIsCisgICAgICAgICJ0ZXN0cy9kYXRhL3YxL2ZsYWdfdjEuaW5mbyIsCiAgICAgXSwKIH0KIApAQCAtMTA3LDMxICsxMDcsMTIgQEAKICAgICBhZmRvOiB0cnVlLAogfQogCi1zb29uZ19jb25maWdfbW9kdWxlX3R5cGUgewotICAgIG5hbWU6ICJhY29uZmlnX2xpYl9jY19zaGFyZWRfbGlua19kZWZhdWx0cyIsCi0gICAgbW9kdWxlX3R5cGU6ICJjY19kZWZhdWx0cyIsCi0gICAgY29uZmlnX25hbWVzcGFjZTogIkFjb25maWciLAotICAgIGJvb2xfdmFyaWFibGVzOiBbCi0gICAgICAgICJyZWFkX2Zyb21fbmV3X3N0b3JhZ2UiLAotICAgIF0sCi0gICAgcHJvcGVydGllczogWwotICAgICAgICAic2hhcmVkX2xpYnMiLAotICAgIF0sCi19Ci0KLXNvb25nX2NvbmZpZ19ib29sX3ZhcmlhYmxlIHsKLSAgICBuYW1lOiAicmVhZF9mcm9tX25ld19zdG9yYWdlIiwKLX0KLQotYWNvbmZpZ19saWJfY2Nfc2hhcmVkX2xpbmtfZGVmYXVsdHMgeworY2NfZGVmYXVsdHMgewogICAgIG5hbWU6ICJhY29uZmlnX2xpYl9jY19zaGFyZWRfbGluay5kZWZhdWx0cyIsCi0gICAgc29vbmdfY29uZmlnX3ZhcmlhYmxlczogewotICAgICAgICByZWFkX2Zyb21fbmV3X3N0b3JhZ2U6IHsKLSAgICAgICAgICAgIHNoYXJlZF9saWJzOiBbCi0gICAgICAgICAgICAgICAgImxpYmFjb25maWdfc3RvcmFnZV9yZWFkX2FwaV9jYyIsCi0gICAgICAgICAgICBdLAotICAgICAgICB9LAotICAgIH0sCisgICAgc2hhcmVkX2xpYnM6IHNlbGVjdChyZWxlYXNlX2ZsYWcoIlJFTEVBU0VfUkVBRF9GUk9NX05FV19TVE9SQUdFIiksIHsKKyAgICAgICAgdHJ1ZTogWyJsaWJhY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGlfY2MiXSwKKyAgICAgICAgZGVmYXVsdDogW10sCisgICAgfSksCiB9CiAKIGNjX2RlZmF1bHRzIHsKQEAgLTE3NCwzNiArMTU1LDIwIEBACiAgICAgbmFtZTogImFjb25maWdfc3RvcmFnZV9yZWFkZXJfamF2YSIsCiAgICAgc3JjczogWwogICAgICAgICAic3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9TdG9yYWdlSW50ZXJuYWxSZWFkZXIuamF2YSIsCisgICAgICAgICJzcmNzL2FuZHJvaWQvb3MvZmxhZ2dpbmcvUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmphdmEiLAogICAgIF0sCiAgICAgbGliczogWwogICAgICAgICAidW5zdXBwb3J0ZWRhcHB1c2FnZSIsCiAgICAgICAgICJzdHJpY3RfbW9kZV9zdHViIiwKKyAgICAgICAgImFjb25maWdfc3RvcmFnZV9zdHViIiwKICAgICBdLAogICAgIHN0YXRpY19saWJzOiBbCiAgICAgICAgICJhY29uZmlnX3N0b3JhZ2VfZmlsZV9qYXZhIiwKICAgICBdLAogICAgIHNka192ZXJzaW9uOiAiY29yZV9jdXJyZW50IiwKICAgICBob3N0X3N1cHBvcnRlZDogdHJ1ZSwKLSAgICBtaW5fc2RrX3ZlcnNpb246ICIyOSIsCi0gICAgYXBleF9hdmFpbGFibGU6IFsKLSAgICAgICAgIi8vYXBleF9hdmFpbGFibGU6cGxhdGZvcm0iLAotICAgICAgICAiLy9hcGV4X2F2YWlsYWJsZTphbnlhcGV4IiwKKyAgICB2aXNpYmlsaXR5OiBbCisgICAgICAgICIvL2ZyYW1ld29ya3MvYmFzZSIsCisgICAgICAgICIvL2J1aWxkL21ha2UvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMiLAogICAgIF0sCiB9Ci0KLWphdmFfbGlicmFyeSB7Ci0gICAgbmFtZTogImFjb25maWdfc3RvcmFnZV9yZWFkZXJfamF2YV9ub25lIiwKLSAgICBzcmNzOiBbCi0gICAgICAgICJzcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL1N0b3JhZ2VJbnRlcm5hbFJlYWRlci5qYXZhIiwKLSAgICBdLAotICAgIGxpYnM6IFsKLSAgICAgICAgInVuc3VwcG9ydGVkYXBwdXNhZ2Utc2RrLW5vbmUiLAotICAgICAgICAiZmFrZV9kZXZpY2VfY29uZmlnIiwKLSAgICBdLAotICAgIHN0YXRpY19saWJzOiBbCi0gICAgICAgICJhY29uZmlnX3N0b3JhZ2VfZmlsZV9qYXZhX25vbmUiLAotICAgIF0sCi0gICAgc2RrX3ZlcnNpb246ICJub25lIiwKLSAgICBzeXN0ZW1fbW9kdWxlczogImNvcmUtYWxsLXN5c3RlbS1tb2R1bGVzIiwKLSAgICBob3N0X3N1cHBvcnRlZDogdHJ1ZSwKLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9mbGFnX2luZm9fcXVlcnkucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvZmxhZ19pbmZvX3F1ZXJ5LnJzCmluZGV4IDZkMDMzNzcuLjY4YjYxOTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9mbGFnX2luZm9fcXVlcnkucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL2ZsYWdfaW5mb19xdWVyeS5ycwpAQCAtMTYsOCArMTYsMTAgQEAKIAogLy8hIGZsYWcgdmFsdWUgcXVlcnkgbW9kdWxlIGRlZmluZXMgdGhlIGZsYWcgdmFsdWUgZmlsZSByZWFkIGZyb20gbWFwcGVkIGJ5dGVzCiAKLXVzZSBjcmF0ZTo6e0Fjb25maWdTdG9yYWdlRXJyb3IsIEZJTEVfVkVSU0lPTn07Ci11c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OntmbGFnX2luZm86OkZsYWdJbmZvSGVhZGVyLCByZWFkX3U4X2Zyb21fYnl0ZXMsIEZsYWdWYWx1ZVR5cGV9OwordXNlIGNyYXRlOjpBY29uZmlnU3RvcmFnZUVycm9yOwordXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7CisgICAgZmxhZ19pbmZvOjpGbGFnSW5mb0hlYWRlciwgcmVhZF91OF9mcm9tX2J5dGVzLCBGbGFnVmFsdWVUeXBlLCBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTiwKK307CiB1c2UgYW55aG93Ojphbnlob3c7CiAKIC8vLyBHZXQgZmxhZyBhdHRyaWJ1dGUgYml0ZmllbGQKQEAgLTI3LDExICsyOSwxMSBAQAogICAgIGZsYWdfaW5kZXg6IHUzMiwKICkgLT4gUmVzdWx0PHU4LCBBY29uZmlnU3RvcmFnZUVycm9yPiB7CiAgICAgbGV0IGludGVycHJldGVkX2hlYWRlciA9IEZsYWdJbmZvSGVhZGVyOjpmcm9tX2J5dGVzKGJ1Zik/OwotICAgIGlmIGludGVycHJldGVkX2hlYWRlci52ZXJzaW9uID4gY3JhdGU6OkZJTEVfVkVSU0lPTiB7CisgICAgaWYgaW50ZXJwcmV0ZWRfaGVhZGVyLnZlcnNpb24gPiBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTiB7CiAgICAgICAgIHJldHVybiBFcnIoQWNvbmZpZ1N0b3JhZ2VFcnJvcjo6SGlnaGVyU3RvcmFnZUZpbGVWZXJzaW9uKGFueWhvdyEoCiAgICAgICAgICAgICAiQ2Fubm90IHJlYWQgc3RvcmFnZSBmaWxlIHdpdGggYSBoaWdoZXIgdmVyc2lvbiBvZiB7fSB3aXRoIGxpYiB2ZXJzaW9uIHt9IiwKICAgICAgICAgICAgIGludGVycHJldGVkX2hlYWRlci52ZXJzaW9uLAotICAgICAgICAgICAgRklMRV9WRVJTSU9OCisgICAgICAgICAgICBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTgogICAgICAgICApKSk7CiAgICAgfQogCkBAIC01MywxMiArNTUsMTQgQEAKICNbY2ZnKHRlc3QpXQogbW9kIHRlc3RzIHsKICAgICB1c2Ugc3VwZXI6Oio7Ci0gICAgdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QsIEZsYWdJbmZvQml0fTsKKyAgICB1c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OnsKKyAgICAgICAgdGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QsIEZsYWdJbmZvQml0LCBERUZBVUxUX0ZJTEVfVkVSU0lPTiwKKyAgICB9OwogCiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHF1ZXJ5IGlmIGZsYWcgaGFzIHNlcnZlciBvdmVycmlkZQogICAgIGZuIHRlc3RfaXNfZmxhZ19zdGlja3koKSB7Ci0gICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KCkuaW50b19ieXRlcygpOworICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpOwogICAgICAgICBmb3Igb2Zmc2V0IGluIDAuLjggewogICAgICAgICAgICAgbGV0IGF0dHJpYnV0ZSA9CiAgICAgICAgICAgICAgICAgZmluZF9mbGFnX2F0dHJpYnV0ZSgmZmxhZ19pbmZvX2xpc3RbLi5dLCBGbGFnVmFsdWVUeXBlOjpCb29sZWFuLCBvZmZzZXQpLnVud3JhcCgpOwpAQCAtNjksNyArNzMsNyBAQAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biBxdWVyeSBpZiBmbGFnIGlzIHJlYWR3cml0ZQogICAgIGZuIHRlc3RfaXNfZmxhZ19yZWFkd3JpdGUoKSB7Ci0gICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KCkuaW50b19ieXRlcygpOworICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpOwogICAgICAgICBsZXQgYmFzZWxpbmU6IFZlYzxib29sPiA9IHZlYyFbdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWVdOwogICAgICAgICBmb3Igb2Zmc2V0IGluIDAuLjggewogICAgICAgICAgICAgbGV0IGF0dHJpYnV0ZSA9CkBAIC04NCw3ICs4OCw3IEBACiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHF1ZXJ5IGlmIGZsYWcgaGFzIGxvY2FsIG92ZXJyaWRlCiAgICAgZm4gdGVzdF9mbGFnX2hhc19vdmVycmlkZSgpIHsKLSAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoKS5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKS5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGZvciBvZmZzZXQgaW4gMC4uOCB7CiAgICAgICAgICAgICBsZXQgYXR0cmlidXRlID0KICAgICAgICAgICAgICAgICBmaW5kX2ZsYWdfYXR0cmlidXRlKCZmbGFnX2luZm9fbGlzdFsuLl0sIEZsYWdWYWx1ZVR5cGU6OkJvb2xlYW4sIG9mZnNldCkudW53cmFwKCk7CkBAIC05NSw3ICs5OSw3IEBACiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHF1ZXJ5IGJleW9uZCB0aGUgZW5kIG9mIGJvb2xlYW4gc2VjdGlvbgogICAgIGZuIHRlc3RfYm9vbGVhbl9vdXRfb2ZfcmFuZ2UoKSB7Ci0gICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KCkuaW50b19ieXRlcygpOworICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpOwogICAgICAgICBsZXQgZXJyb3IgPQogICAgICAgICAgICAgZmluZF9mbGFnX2F0dHJpYnV0ZSgmZmxhZ19pbmZvX2xpc3RbLi5dLCBGbGFnVmFsdWVUeXBlOjpCb29sZWFuLCA4KS51bndyYXBfZXJyKCk7CiAgICAgICAgIGFzc2VydF9lcSEoCkBAIC0xMDcsMTYgKzExMSwxNiBAQAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biBxdWVyeSBlcnJvciB3aGVuIGZpbGUgaGFzIGEgaGlnaGVyIHZlcnNpb24KICAgICBmbiB0ZXN0X2hpZ2hlcl92ZXJzaW9uX3N0b3JhZ2VfZmlsZSgpIHsKLSAgICAgICAgbGV0IG11dCBpbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdCgpOwotICAgICAgICBpbmZvX2xpc3QuaGVhZGVyLnZlcnNpb24gPSBjcmF0ZTo6RklMRV9WRVJTSU9OICsgMTsKKyAgICAgICAgbGV0IG11dCBpbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTik7CisgICAgICAgIGluZm9fbGlzdC5oZWFkZXIudmVyc2lvbiA9IE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OICsgMTsKICAgICAgICAgbGV0IGZsYWdfaW5mbyA9IGluZm9fbGlzdC5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGxldCBlcnJvciA9IGZpbmRfZmxhZ19hdHRyaWJ1dGUoJmZsYWdfaW5mb1suLl0sIEZsYWdWYWx1ZVR5cGU6OkJvb2xlYW4sIDQpLnVud3JhcF9lcnIoKTsKICAgICAgICAgYXNzZXJ0X2VxISgKICAgICAgICAgICAgIGZvcm1hdCEoIns6P30iLCBlcnJvciksCiAgICAgICAgICAgICBmb3JtYXQhKAogICAgICAgICAgICAgICAgICJIaWdoZXJTdG9yYWdlRmlsZVZlcnNpb24oQ2Fubm90IHJlYWQgc3RvcmFnZSBmaWxlIHdpdGggYSBoaWdoZXIgdmVyc2lvbiBvZiB7fSB3aXRoIGxpYiB2ZXJzaW9uIHt9KSIsCi0gICAgICAgICAgICAgICAgY3JhdGU6OkZJTEVfVkVSU0lPTiArIDEsCi0gICAgICAgICAgICAgICAgY3JhdGU6OkZJTEVfVkVSU0lPTgorICAgICAgICAgICAgICAgIE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OICsgMSwKKyAgICAgICAgICAgICAgICBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTgogICAgICAgICAgICAgKQogICAgICAgICApOwogICAgIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9mbGFnX3RhYmxlX3F1ZXJ5LnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL2ZsYWdfdGFibGVfcXVlcnkucnMKaW5kZXggYTFhNDc5My4uM2U4N2FjYyAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL2ZsYWdfdGFibGVfcXVlcnkucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL2ZsYWdfdGFibGVfcXVlcnkucnMKQEAgLTE2LDkgKzE2LDEwIEBACiAKIC8vISBmbGFnIHRhYmxlIHF1ZXJ5IG1vZHVsZSBkZWZpbmVzIHRoZSBmbGFnIHRhYmxlIGZpbGUgcmVhZCBmcm9tIG1hcHBlZCBieXRlcwogCi11c2UgY3JhdGU6OntBY29uZmlnU3RvcmFnZUVycm9yLCBGSUxFX1ZFUlNJT059OwordXNlIGNyYXRlOjpBY29uZmlnU3RvcmFnZUVycm9yOwogdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7CiAgICAgZmxhZ190YWJsZTo6RmxhZ1RhYmxlSGVhZGVyLCBmbGFnX3RhYmxlOjpGbGFnVGFibGVOb2RlLCByZWFkX3UzMl9mcm9tX2J5dGVzLCBTdG9yZWRGbGFnVHlwZSwKKyAgICBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTiwKIH07CiB1c2UgYW55aG93Ojphbnlob3c7CiAKQEAgLTM2LDExICszNywxMSBAQAogICAgIGZsYWc6ICZzdHIsCiApIC0+IFJlc3VsdDxPcHRpb248RmxhZ1JlYWRDb250ZXh0PiwgQWNvbmZpZ1N0b3JhZ2VFcnJvcj4gewogICAgIGxldCBpbnRlcnByZXRlZF9oZWFkZXIgPSBGbGFnVGFibGVIZWFkZXI6OmZyb21fYnl0ZXMoYnVmKT87Ci0gICAgaWYgaW50ZXJwcmV0ZWRfaGVhZGVyLnZlcnNpb24gPiBjcmF0ZTo6RklMRV9WRVJTSU9OIHsKKyAgICBpZiBpbnRlcnByZXRlZF9oZWFkZXIudmVyc2lvbiA+IE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OIHsKICAgICAgICAgcmV0dXJuIEVycihBY29uZmlnU3RvcmFnZUVycm9yOjpIaWdoZXJTdG9yYWdlRmlsZVZlcnNpb24oYW55aG93ISgKICAgICAgICAgICAgICJDYW5ub3QgcmVhZCBzdG9yYWdlIGZpbGUgd2l0aCBhIGhpZ2hlciB2ZXJzaW9uIG9mIHt9IHdpdGggbGliIHZlcnNpb24ge30iLAogICAgICAgICAgICAgaW50ZXJwcmV0ZWRfaGVhZGVyLnZlcnNpb24sCi0gICAgICAgICAgICBGSUxFX1ZFUlNJT04KKyAgICAgICAgICAgIE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OCiAgICAgICAgICkpKTsKICAgICB9CiAKQEAgLTczLDEyICs3NCwxMiBAQAogI1tjZmcodGVzdCldCiBtb2QgdGVzdHMgewogICAgIHVzZSBzdXBlcjo6KjsKLSAgICB1c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OnRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X2ZsYWdfdGFibGU7CisgICAgdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ190YWJsZSwgREVGQVVMVF9GSUxFX1ZFUlNJT059OwogCiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRhYmxlIHF1ZXJ5CiAgICAgZm4gdGVzdF9mbGFnX3F1ZXJ5KCkgewotICAgICAgICBsZXQgZmxhZ190YWJsZSA9IGNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUoKS5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCBmbGFnX3RhYmxlID0gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpOwogICAgICAgICBsZXQgYmFzZWxpbmUgPSB2ZWMhWwogICAgICAgICAgICAgKDAsICJlbmFibGVkX3JvIiwgU3RvcmVkRmxhZ1R5cGU6OlJlYWRPbmx5Qm9vbGVhbiwgMXUxNiksCiAgICAgICAgICAgICAoMCwgImVuYWJsZWRfcnciLCBTdG9yZWRGbGFnVHlwZTo6UmVhZFdyaXRlQm9vbGVhbiwgMnUxNiksCkBAIC0xMDAsNyArMTAxLDcgQEAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGFibGUgcXVlcnkgb2YgYSBub24gZXhpc3QgZmxhZwogICAgIGZuIHRlc3Rfbm90X2V4aXN0ZWRfZmxhZ19xdWVyeSgpIHsKLSAgICAgICAgbGV0IGZsYWdfdGFibGUgPSBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKCkuaW50b19ieXRlcygpOworICAgICAgICBsZXQgZmxhZ190YWJsZSA9IGNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IGZsYWdfY29udGV4dCA9IGZpbmRfZmxhZ19yZWFkX2NvbnRleHQoJmZsYWdfdGFibGVbLi5dLCAxLCAiZGlzYWJsZWRfZml4ZWRfcm8iKS51bndyYXAoKTsKICAgICAgICAgYXNzZXJ0X2VxIShmbGFnX2NvbnRleHQsIE5vbmUpOwogICAgICAgICBsZXQgZmxhZ19jb250ZXh0ID0gZmluZF9mbGFnX3JlYWRfY29udGV4dCgmZmxhZ190YWJsZVsuLl0sIDIsICJkaXNhYmxlZF9ydyIpLnVud3JhcCgpOwpAQCAtMTEwLDE2ICsxMTEsMTYgQEAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gcXVlcnkgZXJyb3Igd2hlbiBmaWxlIGhhcyBhIGhpZ2hlciB2ZXJzaW9uCiAgICAgZm4gdGVzdF9oaWdoZXJfdmVyc2lvbl9zdG9yYWdlX2ZpbGUoKSB7Ci0gICAgICAgIGxldCBtdXQgdGFibGUgPSBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKCk7Ci0gICAgICAgIHRhYmxlLmhlYWRlci52ZXJzaW9uID0gY3JhdGU6OkZJTEVfVkVSU0lPTiArIDE7CisgICAgICAgIGxldCBtdXQgdGFibGUgPSBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKTsKKyAgICAgICAgdGFibGUuaGVhZGVyLnZlcnNpb24gPSBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTiArIDE7CiAgICAgICAgIGxldCBmbGFnX3RhYmxlID0gdGFibGUuaW50b19ieXRlcygpOwogICAgICAgICBsZXQgZXJyb3IgPSBmaW5kX2ZsYWdfcmVhZF9jb250ZXh0KCZmbGFnX3RhYmxlWy4uXSwgMCwgImVuYWJsZWRfcm8iKS51bndyYXBfZXJyKCk7CiAgICAgICAgIGFzc2VydF9lcSEoCiAgICAgICAgICAgICBmb3JtYXQhKCJ7Oj99IiwgZXJyb3IpLAogICAgICAgICAgICAgZm9ybWF0ISgKICAgICAgICAgICAgICAgICAiSGlnaGVyU3RvcmFnZUZpbGVWZXJzaW9uKENhbm5vdCByZWFkIHN0b3JhZ2UgZmlsZSB3aXRoIGEgaGlnaGVyIHZlcnNpb24gb2Yge30gd2l0aCBsaWIgdmVyc2lvbiB7fSkiLAotICAgICAgICAgICAgICAgIGNyYXRlOjpGSUxFX1ZFUlNJT04gKyAxLAotICAgICAgICAgICAgICAgIGNyYXRlOjpGSUxFX1ZFUlNJT04KKyAgICAgICAgICAgICAgICBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTiArIDEsCisgICAgICAgICAgICAgICAgTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04KICAgICAgICAgICAgICkKICAgICAgICAgKTsKICAgICB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvZmxhZ192YWx1ZV9xdWVyeS5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9mbGFnX3ZhbHVlX3F1ZXJ5LnJzCmluZGV4IDlkMzJhMTYuLjM1ZjU2OTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9mbGFnX3ZhbHVlX3F1ZXJ5LnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9mbGFnX3ZhbHVlX3F1ZXJ5LnJzCkBAIC0xNiwxOCArMTYsMjAgQEAKIAogLy8hIGZsYWcgdmFsdWUgcXVlcnkgbW9kdWxlIGRlZmluZXMgdGhlIGZsYWcgdmFsdWUgZmlsZSByZWFkIGZyb20gbWFwcGVkIGJ5dGVzCiAKLXVzZSBjcmF0ZTo6e0Fjb25maWdTdG9yYWdlRXJyb3IsIEZJTEVfVkVSU0lPTn07Ci11c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OntmbGFnX3ZhbHVlOjpGbGFnVmFsdWVIZWFkZXIsIHJlYWRfdThfZnJvbV9ieXRlc307Cit1c2UgY3JhdGU6OkFjb25maWdTdG9yYWdlRXJyb3I7Cit1c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OnsKKyAgICBmbGFnX3ZhbHVlOjpGbGFnVmFsdWVIZWFkZXIsIHJlYWRfdThfZnJvbV9ieXRlcywgTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04sCit9OwogdXNlIGFueWhvdzo6YW55aG93OwogCiAvLy8gUXVlcnkgZmxhZyB2YWx1ZQogcHViIGZuIGZpbmRfYm9vbGVhbl9mbGFnX3ZhbHVlKGJ1ZjogJlt1OF0sIGZsYWdfaW5kZXg6IHUzMikgLT4gUmVzdWx0PGJvb2wsIEFjb25maWdTdG9yYWdlRXJyb3I+IHsKICAgICBsZXQgaW50ZXJwcmV0ZWRfaGVhZGVyID0gRmxhZ1ZhbHVlSGVhZGVyOjpmcm9tX2J5dGVzKGJ1Zik/OwotICAgIGlmIGludGVycHJldGVkX2hlYWRlci52ZXJzaW9uID4gY3JhdGU6OkZJTEVfVkVSU0lPTiB7CisgICAgaWYgaW50ZXJwcmV0ZWRfaGVhZGVyLnZlcnNpb24gPiBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTiB7CiAgICAgICAgIHJldHVybiBFcnIoQWNvbmZpZ1N0b3JhZ2VFcnJvcjo6SGlnaGVyU3RvcmFnZUZpbGVWZXJzaW9uKGFueWhvdyEoCiAgICAgICAgICAgICAiQ2Fubm90IHJlYWQgc3RvcmFnZSBmaWxlIHdpdGggYSBoaWdoZXIgdmVyc2lvbiBvZiB7fSB3aXRoIGxpYiB2ZXJzaW9uIHt9IiwKICAgICAgICAgICAgIGludGVycHJldGVkX2hlYWRlci52ZXJzaW9uLAotICAgICAgICAgICAgRklMRV9WRVJTSU9OCisgICAgICAgICAgICBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTgogICAgICAgICApKSk7CiAgICAgfQogCkBAIC00NiwxMiArNDgsMTIgQEAKICNbY2ZnKHRlc3QpXQogbW9kIHRlc3RzIHsKICAgICB1c2Ugc3VwZXI6Oio7Ci0gICAgdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3Q7CisgICAgdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0LCBERUZBVUxUX0ZJTEVfVkVSU0lPTn07CiAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gZmxhZyB2YWx1ZSBxdWVyeQogICAgIGZuIHRlc3RfZmxhZ192YWx1ZV9xdWVyeSgpIHsKLSAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpLmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpOwogICAgICAgICBsZXQgYmFzZWxpbmU6IFZlYzxib29sPiA9IHZlYyFbZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlXTsKICAgICAgICAgZm9yIChvZmZzZXQsIGV4cGVjdGVkX3ZhbHVlKSBpbiBiYXNlbGluZS5pbnRvX2l0ZXIoKS5lbnVtZXJhdGUoKSB7CiAgICAgICAgICAgICBsZXQgZmxhZ192YWx1ZSA9IGZpbmRfYm9vbGVhbl9mbGFnX3ZhbHVlKCZmbGFnX3ZhbHVlX2xpc3RbLi5dLCBvZmZzZXQgYXMgdTMyKS51bndyYXAoKTsKQEAgLTYyLDcgKzY0LDcgQEAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gcXVlcnkgYmV5b25kIHRoZSBlbmQgb2YgYm9vbGVhbiBzZWN0aW9uCiAgICAgZm4gdGVzdF9ib29sZWFuX291dF9vZl9yYW5nZSgpIHsKLSAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpLmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpOwogICAgICAgICBsZXQgZXJyb3IgPSBmaW5kX2Jvb2xlYW5fZmxhZ192YWx1ZSgmZmxhZ192YWx1ZV9saXN0Wy4uXSwgOCkudW53cmFwX2VycigpOwogICAgICAgICBhc3NlcnRfZXEhKAogICAgICAgICAgICAgZm9ybWF0ISgiezo/fSIsIGVycm9yKSwKQEAgLTczLDE2ICs3NSwxNiBAQAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biBxdWVyeSBlcnJvciB3aGVuIGZpbGUgaGFzIGEgaGlnaGVyIHZlcnNpb24KICAgICBmbiB0ZXN0X2hpZ2hlcl92ZXJzaW9uX3N0b3JhZ2VfZmlsZSgpIHsKLSAgICAgICAgbGV0IG11dCB2YWx1ZV9saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KCk7Ci0gICAgICAgIHZhbHVlX2xpc3QuaGVhZGVyLnZlcnNpb24gPSBjcmF0ZTo6RklMRV9WRVJTSU9OICsgMTsKKyAgICAgICAgbGV0IG11dCB2YWx1ZV9saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKTsKKyAgICAgICAgdmFsdWVfbGlzdC5oZWFkZXIudmVyc2lvbiA9IE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OICsgMTsKICAgICAgICAgbGV0IGZsYWdfdmFsdWUgPSB2YWx1ZV9saXN0LmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IGVycm9yID0gZmluZF9ib29sZWFuX2ZsYWdfdmFsdWUoJmZsYWdfdmFsdWVbLi5dLCA0KS51bndyYXBfZXJyKCk7CiAgICAgICAgIGFzc2VydF9lcSEoCiAgICAgICAgICAgICBmb3JtYXQhKCJ7Oj99IiwgZXJyb3IpLAogICAgICAgICAgICAgZm9ybWF0ISgKICAgICAgICAgICAgICAgICAiSGlnaGVyU3RvcmFnZUZpbGVWZXJzaW9uKENhbm5vdCByZWFkIHN0b3JhZ2UgZmlsZSB3aXRoIGEgaGlnaGVyIHZlcnNpb24gb2Yge30gd2l0aCBsaWIgdmVyc2lvbiB7fSkiLAotICAgICAgICAgICAgICAgIGNyYXRlOjpGSUxFX1ZFUlNJT04gKyAxLAotICAgICAgICAgICAgICAgIGNyYXRlOjpGSUxFX1ZFUlNJT04KKyAgICAgICAgICAgICAgICBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTiArIDEsCisgICAgICAgICAgICAgICAgTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04KICAgICAgICAgICAgICkKICAgICAgICAgKTsKICAgICB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvbGliLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL2xpYi5ycwppbmRleCBkNzZjZjNmLi5kM2NjOWQ0IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvbGliLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9saWIucnMKQEAgLTQ0LDkgKzQ0LDEwIEBACiAKIHB1YiB1c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OntBY29uZmlnU3RvcmFnZUVycm9yLCBGbGFnVmFsdWVUeXBlLCBTdG9yYWdlRmlsZVR5cGV9OwogcHViIHVzZSBmbGFnX3RhYmxlX3F1ZXJ5OjpGbGFnUmVhZENvbnRleHQ7CitwdWIgdXNlIG1hcHBlZF9maWxlOjptYXBfZmlsZTsKIHB1YiB1c2UgcGFja2FnZV90YWJsZV9xdWVyeTo6UGFja2FnZVJlYWRDb250ZXh0OwogCi11c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OntyZWFkX3UzMl9mcm9tX2J5dGVzLCBGSUxFX1ZFUlNJT059OwordXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjpyZWFkX3UzMl9mcm9tX2J5dGVzOwogdXNlIGZsYWdfaW5mb19xdWVyeTo6ZmluZF9mbGFnX2F0dHJpYnV0ZTsKIHVzZSBmbGFnX3RhYmxlX3F1ZXJ5OjpmaW5kX2ZsYWdfcmVhZF9jb250ZXh0OwogdXNlIGZsYWdfdmFsdWVfcXVlcnk6OmZpbmRfYm9vbGVhbl9mbGFnX3ZhbHVlOwpAQCAtMTE0LDEzICsxMTUsMTMgQEAKIAogLy8vIEdldCB0aGUgYm9vbGVhbiBmbGFnIHZhbHVlLgogLy8vCi0vLy8gXGlucHV0IGZpbGU6IG1hcHBlZCBmbGFnIGZpbGUKKy8vLyBcaW5wdXQgZmlsZTogYSBieXRlIHNsaWNlLCBjYW4gYmUgZWl0aGVyICZNbWFwIG9yICZNYXBNdXQKIC8vLyBcaW5wdXQgaW5kZXg6IGJvb2xlYW4gZmxhZyBvZmZzZXQKIC8vLwogLy8vIFxyZXR1cm4KIC8vLyBJZiB0aGUgcHJvdmlkZSBvZmZzZXQgaXMgdmFsaWQsIGl0IHJldHVybnMgdGhlIGJvb2xlYW4gZmxhZyB2YWx1ZSwgb3RoZXJ3aXNlIGl0CiAvLy8gcmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZS4KLXB1YiBmbiBnZXRfYm9vbGVhbl9mbGFnX3ZhbHVlKGZpbGU6ICZNbWFwLCBpbmRleDogdTMyKSAtPiBSZXN1bHQ8Ym9vbCwgQWNvbmZpZ1N0b3JhZ2VFcnJvcj4geworcHViIGZuIGdldF9ib29sZWFuX2ZsYWdfdmFsdWUoZmlsZTogJlt1OF0sIGluZGV4OiB1MzIpIC0+IFJlc3VsdDxib29sLCBBY29uZmlnU3RvcmFnZUVycm9yPiB7CiAgICAgZmluZF9ib29sZWFuX2ZsYWdfdmFsdWUoZmlsZSwgaW5kZXgpCiB9CiAKQEAgLTE0OCw3ICsxNDksNyBAQAogCiAvLy8gR2V0IHRoZSBmbGFnIGF0dHJpYnV0ZS4KIC8vLwotLy8vIFxpbnB1dCBmaWxlOiBtYXBwZWQgZmxhZyBpbmZvIGZpbGUKKy8vLyBcaW5wdXQgZmlsZTogYSBieXRlIHNsaWNlLCBjYW4gYmUgZWl0aGVyICZNbWFwIG9yICZNYXBNdXQKIC8vLyBcaW5wdXQgZmxhZ190eXBlOiBmbGFnIHZhbHVlIHR5cGUKIC8vLyBcaW5wdXQgZmxhZ19pbmRleDogZmxhZyBpbmRleAogLy8vCkBAIC0xNTYsNyArMTU3LDcgQEAKIC8vLyBJZiB0aGUgcHJvdmlkZSBvZmZzZXQgaXMgdmFsaWQsIGl0IHJldHVybnMgdGhlIGZsYWcgYXR0cmlidXRlIGJpdGZpbGVkLCBvdGhlcndpc2UgaXQKIC8vLyByZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlLgogcHViIGZuIGdldF9mbGFnX2F0dHJpYnV0ZSgKLSAgICBmaWxlOiAmTW1hcCwKKyAgICBmaWxlOiAmW3U4XSwKICAgICBmbGFnX3R5cGU6IEZsYWdWYWx1ZVR5cGUsCiAgICAgZmxhZ19pbmRleDogdTMyLAogKSAtPiBSZXN1bHQ8dTgsIEFjb25maWdTdG9yYWdlRXJyb3I+IHsKQEAgLTQxMiwxMCArNDEzLDEwIEBACiAgICAgICAgIGxldCBmbGFnX21hcCA9IHN0b3JhZ2VfZGlyLmNsb25lKCkgKyAiL21hcHMvbW9ja3VwLmZsYWcubWFwIjsKICAgICAgICAgbGV0IGZsYWdfdmFsID0gc3RvcmFnZV9kaXIuY2xvbmUoKSArICIvYm9vdC9tb2NrdXAudmFsIjsKICAgICAgICAgbGV0IGZsYWdfaW5mbyA9IHN0b3JhZ2VfZGlyLmNsb25lKCkgKyAiL2Jvb3QvbW9ja3VwLmluZm8iOwotICAgICAgICBmczo6Y29weSgiLi90ZXN0cy9wYWNrYWdlLm1hcCIsICZwYWNrYWdlX21hcCkudW53cmFwKCk7Ci0gICAgICAgIGZzOjpjb3B5KCIuL3Rlc3RzL2ZsYWcubWFwIiwgJmZsYWdfbWFwKS51bndyYXAoKTsKLSAgICAgICAgZnM6OmNvcHkoIi4vdGVzdHMvZmxhZy52YWwiLCAmZmxhZ192YWwpLnVud3JhcCgpOwotICAgICAgICBmczo6Y29weSgiLi90ZXN0cy9mbGFnLmluZm8iLCAmZmxhZ19pbmZvKS51bndyYXAoKTsKKyAgICAgICAgZnM6OmNvcHkoIi4vdGVzdHMvZGF0YS92MS9wYWNrYWdlX3YxLm1hcCIsICZwYWNrYWdlX21hcCkudW53cmFwKCk7CisgICAgICAgIGZzOjpjb3B5KCIuL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5tYXAiLCAmZmxhZ19tYXApLnVud3JhcCgpOworICAgICAgICBmczo6Y29weSgiLi90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEudmFsIiwgJmZsYWdfdmFsKS51bndyYXAoKTsKKyAgICAgICAgZnM6OmNvcHkoIi4vdGVzdHMvZGF0YS92MS9mbGFnX3YxLmluZm8iLCAmZmxhZ19pbmZvKS51bndyYXAoKTsKIAogICAgICAgICByZXR1cm4gc3RvcmFnZV9kaXI7CiAgICAgfQpAQCAtNDMyLDIxICs0MzMsMjQgQEAKICAgICAgICAgICAgIGdldF9wYWNrYWdlX3JlYWRfY29udGV4dCgmcGFja2FnZV9tYXBwZWRfZmlsZSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiKQogICAgICAgICAgICAgICAgIC51bndyYXAoKQogICAgICAgICAgICAgICAgIC51bndyYXAoKTsKLSAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCA9IFBhY2thZ2VSZWFkQ29udGV4dCB7IHBhY2thZ2VfaWQ6IDAsIGJvb2xlYW5fc3RhcnRfaW5kZXg6IDAgfTsKKyAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCA9CisgICAgICAgICAgICBQYWNrYWdlUmVhZENvbnRleHQgeyBwYWNrYWdlX2lkOiAwLCBib29sZWFuX3N0YXJ0X2luZGV4OiAwLCBmaW5nZXJwcmludDogMCB9OwogICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VfY29udGV4dCwgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0KTsKIAogICAgICAgICBsZXQgcGFja2FnZV9jb250ZXh0ID0KICAgICAgICAgICAgIGdldF9wYWNrYWdlX3JlYWRfY29udGV4dCgmcGFja2FnZV9tYXBwZWRfZmlsZSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiKQogICAgICAgICAgICAgICAgIC51bndyYXAoKQogICAgICAgICAgICAgICAgIC51bndyYXAoKTsKLSAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCA9IFBhY2thZ2VSZWFkQ29udGV4dCB7IHBhY2thZ2VfaWQ6IDEsIGJvb2xlYW5fc3RhcnRfaW5kZXg6IDMgfTsKKyAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCA9CisgICAgICAgICAgICBQYWNrYWdlUmVhZENvbnRleHQgeyBwYWNrYWdlX2lkOiAxLCBib29sZWFuX3N0YXJ0X2luZGV4OiAzLCBmaW5nZXJwcmludDogMCB9OwogICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VfY29udGV4dCwgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0KTsKIAogICAgICAgICBsZXQgcGFja2FnZV9jb250ZXh0ID0KICAgICAgICAgICAgIGdldF9wYWNrYWdlX3JlYWRfY29udGV4dCgmcGFja2FnZV9tYXBwZWRfZmlsZSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiKQogICAgICAgICAgICAgICAgIC51bndyYXAoKQogICAgICAgICAgICAgICAgIC51bndyYXAoKTsKLSAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCA9IFBhY2thZ2VSZWFkQ29udGV4dCB7IHBhY2thZ2VfaWQ6IDIsIGJvb2xlYW5fc3RhcnRfaW5kZXg6IDYgfTsKKyAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCA9CisgICAgICAgICAgICBQYWNrYWdlUmVhZENvbnRleHQgeyBwYWNrYWdlX2lkOiAyLCBib29sZWFuX3N0YXJ0X2luZGV4OiA2LCBmaW5nZXJwcmludDogMCB9OwogICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VfY29udGV4dCwgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0KTsKICAgICB9CiAKQEAgLTUwNyw5ICs1MTEsOSBAQAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biBmbGFnIHN0b3JhZ2UgZmlsZSB2ZXJzaW9uIG51bWJlciBxdWVyeSBhcGkKICAgICBmbiB0ZXN0X3N0b3JhZ2VfdmVyc2lvbl9xdWVyeSgpIHsKLSAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vdGVzdHMvcGFja2FnZS5tYXAiKS51bndyYXAoKSwgMSk7Ci0gICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL3Rlc3RzL2ZsYWcubWFwIikudW53cmFwKCksIDEpOwotICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi90ZXN0cy9mbGFnLnZhbCIpLnVud3JhcCgpLCAxKTsKLSAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vdGVzdHMvZmxhZy5pbmZvIikudW53cmFwKCksIDEpOworICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi90ZXN0cy9kYXRhL3YxL3BhY2thZ2VfdjEubWFwIikudW53cmFwKCksIDEpOworICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEubWFwIikudW53cmFwKCksIDEpOworICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEudmFsIikudW53cmFwKCksIDEpOworICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEuaW5mbyIpLnVud3JhcCgpLCAxKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvbWFwcGVkX2ZpbGUucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvbWFwcGVkX2ZpbGUucnMKaW5kZXggNWExNjY0NS4uZjRlMjY5ZSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL21hcHBlZF9maWxlLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9tYXBwZWRfZmlsZS5ycwpAQCAtMjgsNyArMjgsNyBAQAogLy8vIFRoZSBtZW1vcnkgbWFwcGVkIGZpbGUgbWF5IGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGlmIHRoZXJlIGFyZSB3cml0ZXMgdG8gdGhpcwogLy8vIGZpbGUgYWZ0ZXIgYmVpbmcgbWFwcGVkLiBFbnN1cmUgbm8gd3JpdGVzIGNhbiBoYXBwZW4gdG8gdGhpcyBmaWxlIHdoaWxlIHRoaXMKIC8vLyBtYXBwaW5nIHN0YXlzIGFsaXZlLgotdW5zYWZlIGZuIG1hcF9maWxlKGZpbGVfcGF0aDogJnN0cikgLT4gUmVzdWx0PE1tYXAsIEFjb25maWdTdG9yYWdlRXJyb3I+IHsKK3B1YiB1bnNhZmUgZm4gbWFwX2ZpbGUoZmlsZV9wYXRoOiAmc3RyKSAtPiBSZXN1bHQ8TW1hcCwgQWNvbmZpZ1N0b3JhZ2VFcnJvcj4gewogICAgIGxldCBmaWxlID0gRmlsZTo6b3BlbihmaWxlX3BhdGgpCiAgICAgICAgIC5tYXBfZXJyKHxlcnJtc2d8IEZpbGVSZWFkRmFpbChhbnlob3chKCJGYWlsZWQgdG8gb3BlbiBmaWxlIHt9OiB7fSIsIGZpbGVfcGF0aCwgZXJybXNnKSkpPzsKICAgICB1bnNhZmUgewpAQCAtOTcsMTAgKzk3LDEwIEBACiAgICAgICAgIGxldCBmbGFnX21hcCA9IHN0b3JhZ2VfZGlyLmNsb25lKCkgKyAiL21hcHMvbW9ja3VwLmZsYWcubWFwIjsKICAgICAgICAgbGV0IGZsYWdfdmFsID0gc3RvcmFnZV9kaXIuY2xvbmUoKSArICIvYm9vdC9tb2NrdXAudmFsIjsKICAgICAgICAgbGV0IGZsYWdfaW5mbyA9IHN0b3JhZ2VfZGlyLmNsb25lKCkgKyAiL2Jvb3QvbW9ja3VwLmluZm8iOwotICAgICAgICBmczo6Y29weSgiLi90ZXN0cy9wYWNrYWdlLm1hcCIsICZwYWNrYWdlX21hcCkudW53cmFwKCk7Ci0gICAgICAgIGZzOjpjb3B5KCIuL3Rlc3RzL2ZsYWcubWFwIiwgJmZsYWdfbWFwKS51bndyYXAoKTsKLSAgICAgICAgZnM6OmNvcHkoIi4vdGVzdHMvZmxhZy52YWwiLCAmZmxhZ192YWwpLnVud3JhcCgpOwotICAgICAgICBmczo6Y29weSgiLi90ZXN0cy9mbGFnLmluZm8iLCAmZmxhZ19pbmZvKS51bndyYXAoKTsKKyAgICAgICAgZnM6OmNvcHkoIi4vdGVzdHMvZGF0YS92MS9wYWNrYWdlX3YxLm1hcCIsICZwYWNrYWdlX21hcCkudW53cmFwKCk7CisgICAgICAgIGZzOjpjb3B5KCIuL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5tYXAiLCAmZmxhZ19tYXApLnVud3JhcCgpOworICAgICAgICBmczo6Y29weSgiLi90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEudmFsIiwgJmZsYWdfdmFsKS51bndyYXAoKTsKKyAgICAgICAgZnM6OmNvcHkoIi4vdGVzdHMvZGF0YS92MS9mbGFnX3YxLmluZm8iLCAmZmxhZ19pbmZvKS51bndyYXAoKTsKIAogICAgICAgICByZXR1cm4gc3RvcmFnZV9kaXI7CiAgICAgfQpAQCAtMTA4LDkgKzEwOCw5IEBACiAgICAgI1t0ZXN0XQogICAgIGZuIHRlc3RfbWFwcGVkX2ZpbGVfY29udGVudHMoKSB7CiAgICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoKTsKLSAgICAgICAgbWFwX2FuZF92ZXJpZnkoJnN0b3JhZ2VfZGlyLCBTdG9yYWdlRmlsZVR5cGU6OlBhY2thZ2VNYXAsICIuL3Rlc3RzL3BhY2thZ2UubWFwIik7Ci0gICAgICAgIG1hcF9hbmRfdmVyaWZ5KCZzdG9yYWdlX2RpciwgU3RvcmFnZUZpbGVUeXBlOjpGbGFnTWFwLCAiLi90ZXN0cy9mbGFnLm1hcCIpOwotICAgICAgICBtYXBfYW5kX3ZlcmlmeSgmc3RvcmFnZV9kaXIsIFN0b3JhZ2VGaWxlVHlwZTo6RmxhZ1ZhbCwgIi4vdGVzdHMvZmxhZy52YWwiKTsKLSAgICAgICAgbWFwX2FuZF92ZXJpZnkoJnN0b3JhZ2VfZGlyLCBTdG9yYWdlRmlsZVR5cGU6OkZsYWdJbmZvLCAiLi90ZXN0cy9mbGFnLmluZm8iKTsKKyAgICAgICAgbWFwX2FuZF92ZXJpZnkoJnN0b3JhZ2VfZGlyLCBTdG9yYWdlRmlsZVR5cGU6OlBhY2thZ2VNYXAsICIuL3Rlc3RzL2RhdGEvdjEvcGFja2FnZV92MS5tYXAiKTsKKyAgICAgICAgbWFwX2FuZF92ZXJpZnkoJnN0b3JhZ2VfZGlyLCBTdG9yYWdlRmlsZVR5cGU6OkZsYWdNYXAsICIuL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5tYXAiKTsKKyAgICAgICAgbWFwX2FuZF92ZXJpZnkoJnN0b3JhZ2VfZGlyLCBTdG9yYWdlRmlsZVR5cGU6OkZsYWdWYWwsICIuL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS52YWwiKTsKKyAgICAgICAgbWFwX2FuZF92ZXJpZnkoJnN0b3JhZ2VfZGlyLCBTdG9yYWdlRmlsZVR5cGU6OkZsYWdJbmZvLCAiLi90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEuaW5mbyIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9wYWNrYWdlX3RhYmxlX3F1ZXJ5LnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL3BhY2thZ2VfdGFibGVfcXVlcnkucnMKaW5kZXggMmNiODU0Yi4uYjIwNjY4ZiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL3BhY2thZ2VfdGFibGVfcXVlcnkucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL3BhY2thZ2VfdGFibGVfcXVlcnkucnMKQEAgLTE2LDkgKzE2LDEwIEBACiAKIC8vISBwYWNrYWdlIHRhYmxlIHF1ZXJ5IG1vZHVsZSBkZWZpbmVzIHRoZSBwYWNrYWdlIHRhYmxlIGZpbGUgcmVhZCBmcm9tIG1hcHBlZCBieXRlcwogCi11c2UgY3JhdGU6OntBY29uZmlnU3RvcmFnZUVycm9yLCBGSUxFX1ZFUlNJT059OwordXNlIGNyYXRlOjpBY29uZmlnU3RvcmFnZUVycm9yOwogdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7CiAgICAgcGFja2FnZV90YWJsZTo6UGFja2FnZVRhYmxlSGVhZGVyLCBwYWNrYWdlX3RhYmxlOjpQYWNrYWdlVGFibGVOb2RlLCByZWFkX3UzMl9mcm9tX2J5dGVzLAorICAgIE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OLAogfTsKIHVzZSBhbnlob3c6OmFueWhvdzsKIApAQCAtMjcsNiArMjgsNyBAQAogcHViIHN0cnVjdCBQYWNrYWdlUmVhZENvbnRleHQgewogICAgIHB1YiBwYWNrYWdlX2lkOiB1MzIsCiAgICAgcHViIGJvb2xlYW5fc3RhcnRfaW5kZXg6IHUzMiwKKyAgICBwdWIgZmluZ2VycHJpbnQ6IHU2NCwKIH0KIAogLy8vIFF1ZXJ5IHBhY2thZ2UgcmVhZCBjb250ZXh0OiBwYWNrYWdlIGlkIGFuZCBzdGFydCBpbmRleApAQCAtMzUsMTEgKzM3LDExIEBACiAgICAgcGFja2FnZTogJnN0ciwKICkgLT4gUmVzdWx0PE9wdGlvbjxQYWNrYWdlUmVhZENvbnRleHQ+LCBBY29uZmlnU3RvcmFnZUVycm9yPiB7CiAgICAgbGV0IGludGVycHJldGVkX2hlYWRlciA9IFBhY2thZ2VUYWJsZUhlYWRlcjo6ZnJvbV9ieXRlcyhidWYpPzsKLSAgICBpZiBpbnRlcnByZXRlZF9oZWFkZXIudmVyc2lvbiA+IEZJTEVfVkVSU0lPTiB7CisgICAgaWYgaW50ZXJwcmV0ZWRfaGVhZGVyLnZlcnNpb24gPiBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTiB7CiAgICAgICAgIHJldHVybiBFcnIoQWNvbmZpZ1N0b3JhZ2VFcnJvcjo6SGlnaGVyU3RvcmFnZUZpbGVWZXJzaW9uKGFueWhvdyEoCiAgICAgICAgICAgICAiQ2Fubm90IHJlYWQgc3RvcmFnZSBmaWxlIHdpdGggYSBoaWdoZXIgdmVyc2lvbiBvZiB7fSB3aXRoIGxpYiB2ZXJzaW9uIHt9IiwKICAgICAgICAgICAgIGludGVycHJldGVkX2hlYWRlci52ZXJzaW9uLAotICAgICAgICAgICAgRklMRV9WRVJTSU9OCisgICAgICAgICAgICBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTgogICAgICAgICApKSk7CiAgICAgfQogCkBAIC01NSwxMSArNTcsMTMgQEAKICAgICB9CiAKICAgICBsb29wIHsKLSAgICAgICAgbGV0IGludGVycHJldGVkX25vZGUgPSBQYWNrYWdlVGFibGVOb2RlOjpmcm9tX2J5dGVzKCZidWZbcGFja2FnZV9ub2RlX29mZnNldC4uXSk/OworICAgICAgICBsZXQgaW50ZXJwcmV0ZWRfbm9kZSA9CisgICAgICAgICAgICBQYWNrYWdlVGFibGVOb2RlOjpmcm9tX2J5dGVzKCZidWZbcGFja2FnZV9ub2RlX29mZnNldC4uXSwgaW50ZXJwcmV0ZWRfaGVhZGVyLnZlcnNpb24pPzsKICAgICAgICAgaWYgaW50ZXJwcmV0ZWRfbm9kZS5wYWNrYWdlX25hbWUgPT0gcGFja2FnZSB7CiAgICAgICAgICAgICByZXR1cm4gT2soU29tZShQYWNrYWdlUmVhZENvbnRleHQgewogICAgICAgICAgICAgICAgIHBhY2thZ2VfaWQ6IGludGVycHJldGVkX25vZGUucGFja2FnZV9pZCwKICAgICAgICAgICAgICAgICBib29sZWFuX3N0YXJ0X2luZGV4OiBpbnRlcnByZXRlZF9ub2RlLmJvb2xlYW5fc3RhcnRfaW5kZXgsCisgICAgICAgICAgICAgICAgZmluZ2VycHJpbnQ6IGludGVycHJldGVkX25vZGUuZmluZ2VycHJpbnQsCiAgICAgICAgICAgICB9KSk7CiAgICAgICAgIH0KICAgICAgICAgbWF0Y2ggaW50ZXJwcmV0ZWRfbm9kZS5uZXh0X29mZnNldCB7CkBAIC03MiwyOSArNzYsNjggQEAKICNbY2ZnKHRlc3QpXQogbW9kIHRlc3RzIHsKICAgICB1c2Ugc3VwZXI6Oio7Ci0gICAgdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlOworICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6e3Rlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUsIERFRkFVTFRfRklMRV9WRVJTSU9OfTsKIAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0YWJsZSBxdWVyeQogICAgIGZuIHRlc3RfcGFja2FnZV9xdWVyeSgpIHsKLSAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKCkuaW50b19ieXRlcygpOworICAgICAgICBsZXQgcGFja2FnZV90YWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IHBhY2thZ2VfY29udGV4dCA9CiAgICAgICAgICAgICBmaW5kX3BhY2thZ2VfcmVhZF9jb250ZXh0KCZwYWNrYWdlX3RhYmxlWy4uXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiKQogICAgICAgICAgICAgICAgIC51bndyYXAoKQogICAgICAgICAgICAgICAgIC51bndyYXAoKTsKLSAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCA9IFBhY2thZ2VSZWFkQ29udGV4dCB7IHBhY2thZ2VfaWQ6IDAsIGJvb2xlYW5fc3RhcnRfaW5kZXg6IDAgfTsKKyAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCA9CisgICAgICAgICAgICBQYWNrYWdlUmVhZENvbnRleHQgeyBwYWNrYWdlX2lkOiAwLCBib29sZWFuX3N0YXJ0X2luZGV4OiAwLCBmaW5nZXJwcmludDogMCB9OwogICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VfY29udGV4dCwgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0KTsKICAgICAgICAgbGV0IHBhY2thZ2VfY29udGV4dCA9CiAgICAgICAgICAgICBmaW5kX3BhY2thZ2VfcmVhZF9jb250ZXh0KCZwYWNrYWdlX3RhYmxlWy4uXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiKQogICAgICAgICAgICAgICAgIC51bndyYXAoKQogICAgICAgICAgICAgICAgIC51bndyYXAoKTsKLSAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCA9IFBhY2thZ2VSZWFkQ29udGV4dCB7IHBhY2thZ2VfaWQ6IDEsIGJvb2xlYW5fc3RhcnRfaW5kZXg6IDMgfTsKKyAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCA9CisgICAgICAgICAgICBQYWNrYWdlUmVhZENvbnRleHQgeyBwYWNrYWdlX2lkOiAxLCBib29sZWFuX3N0YXJ0X2luZGV4OiAzLCBmaW5nZXJwcmludDogMCB9OwogICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VfY29udGV4dCwgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0KTsKICAgICAgICAgbGV0IHBhY2thZ2VfY29udGV4dCA9CiAgICAgICAgICAgICBmaW5kX3BhY2thZ2VfcmVhZF9jb250ZXh0KCZwYWNrYWdlX3RhYmxlWy4uXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiKQogICAgICAgICAgICAgICAgIC51bndyYXAoKQogICAgICAgICAgICAgICAgIC51bndyYXAoKTsKLSAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCA9IFBhY2thZ2VSZWFkQ29udGV4dCB7IHBhY2thZ2VfaWQ6IDIsIGJvb2xlYW5fc3RhcnRfaW5kZXg6IDYgfTsKKyAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCA9CisgICAgICAgICAgICBQYWNrYWdlUmVhZENvbnRleHQgeyBwYWNrYWdlX2lkOiAyLCBib29sZWFuX3N0YXJ0X2luZGV4OiA2LCBmaW5nZXJwcmludDogMCB9OworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VfY29udGV4dCwgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0KTsKKyAgICB9CisKKyAgICAjW3Rlc3RdCisgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGFibGUgcXVlcnkKKyAgICBmbiB0ZXN0X3BhY2thZ2VfcXVlcnlfdjIoKSB7CisgICAgICAgIGxldCBwYWNrYWdlX3RhYmxlID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZSgyKS5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCBwYWNrYWdlX2NvbnRleHQgPQorICAgICAgICAgICAgZmluZF9wYWNrYWdlX3JlYWRfY29udGV4dCgmcGFja2FnZV90YWJsZVsuLl0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIikKKyAgICAgICAgICAgICAgICAudW53cmFwKCkKKyAgICAgICAgICAgICAgICAudW53cmFwKCk7CisgICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQgPSBQYWNrYWdlUmVhZENvbnRleHQgeworICAgICAgICAgICAgcGFja2FnZV9pZDogMCwKKyAgICAgICAgICAgIGJvb2xlYW5fc3RhcnRfaW5kZXg6IDAsCisgICAgICAgICAgICBmaW5nZXJwcmludDogMTUyNDg5NDg1MTA1OTAxNTgwODZ1NjQsCisgICAgICAgIH07CisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZV9jb250ZXh0LCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQpOworICAgICAgICBsZXQgcGFja2FnZV9jb250ZXh0ID0KKyAgICAgICAgICAgIGZpbmRfcGFja2FnZV9yZWFkX2NvbnRleHQoJnBhY2thZ2VfdGFibGVbLi5dLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIpCisgICAgICAgICAgICAgICAgLnVud3JhcCgpCisgICAgICAgICAgICAgICAgLnVud3JhcCgpOworICAgICAgICBsZXQgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0ID0gUGFja2FnZVJlYWRDb250ZXh0IHsKKyAgICAgICAgICAgIHBhY2thZ2VfaWQ6IDEsCisgICAgICAgICAgICBib29sZWFuX3N0YXJ0X2luZGV4OiAzLAorICAgICAgICAgICAgZmluZ2VycHJpbnQ6IDQ0MzE5NDA1MDIyNzQ4NTc5NjR1NjQsCisgICAgICAgIH07CisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZV9jb250ZXh0LCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQpOworICAgICAgICBsZXQgcGFja2FnZV9jb250ZXh0ID0KKyAgICAgICAgICAgIGZpbmRfcGFja2FnZV9yZWFkX2NvbnRleHQoJnBhY2thZ2VfdGFibGVbLi5dLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIpCisgICAgICAgICAgICAgICAgLnVud3JhcCgpCisgICAgICAgICAgICAgICAgLnVud3JhcCgpOworICAgICAgICBsZXQgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0ID0gUGFja2FnZVJlYWRDb250ZXh0IHsKKyAgICAgICAgICAgIHBhY2thZ2VfaWQ6IDIsCisgICAgICAgICAgICBib29sZWFuX3N0YXJ0X2luZGV4OiA2LAorICAgICAgICAgICAgZmluZ2VycHJpbnQ6IDE2MjMzMjI5OTE3NzExNjIyMzc1dTY0LAorICAgICAgICB9OwogICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VfY29udGV4dCwgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0KTsKICAgICB9CiAKQEAgLTEwMiw3ICsxNDUsNyBAQAogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRhYmxlIHF1ZXJ5IG9mIGEgbm9uIGV4aXN0IHBhY2thZ2UKICAgICBmbiB0ZXN0X25vdF9leGlzdGVkX3BhY2thZ2VfcXVlcnkoKSB7CiAgICAgICAgIC8vIHRoaXMgd2lsbCBsYW5kIGF0IGFuIGVtcHR5IGJ1Y2tldAotICAgICAgICBsZXQgcGFja2FnZV90YWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoKS5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCBwYWNrYWdlX3RhYmxlID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpOwogICAgICAgICBsZXQgcGFja2FnZV9jb250ZXh0ID0KICAgICAgICAgICAgIGZpbmRfcGFja2FnZV9yZWFkX2NvbnRleHQoJnBhY2thZ2VfdGFibGVbLi5dLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMyIpCiAgICAgICAgICAgICAgICAgLnVud3JhcCgpOwpAQCAtMTE3LDggKzE2MCw4IEBACiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHF1ZXJ5IGVycm9yIHdoZW4gZmlsZSBoYXMgYSBoaWdoZXIgdmVyc2lvbgogICAgIGZuIHRlc3RfaGlnaGVyX3ZlcnNpb25fc3RvcmFnZV9maWxlKCkgewotICAgICAgICBsZXQgbXV0IHRhYmxlID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZSgpOwotICAgICAgICB0YWJsZS5oZWFkZXIudmVyc2lvbiA9IGNyYXRlOjpGSUxFX1ZFUlNJT04gKyAxOworICAgICAgICBsZXQgbXV0IHRhYmxlID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTik7CisgICAgICAgIHRhYmxlLmhlYWRlci52ZXJzaW9uID0gTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04gKyAxOwogICAgICAgICBsZXQgcGFja2FnZV90YWJsZSA9IHRhYmxlLmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IGVycm9yID0KICAgICAgICAgICAgIGZpbmRfcGFja2FnZV9yZWFkX2NvbnRleHQoJnBhY2thZ2VfdGFibGVbLi5dLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIpCkBAIC0xMjcsOCArMTcwLDggQEAKICAgICAgICAgICAgIGZvcm1hdCEoIns6P30iLCBlcnJvciksCiAgICAgICAgICAgICBmb3JtYXQhKAogICAgICAgICAgICAgICAgICJIaWdoZXJTdG9yYWdlRmlsZVZlcnNpb24oQ2Fubm90IHJlYWQgc3RvcmFnZSBmaWxlIHdpdGggYSBoaWdoZXIgdmVyc2lvbiBvZiB7fSB3aXRoIGxpYiB2ZXJzaW9uIHt9KSIsCi0gICAgICAgICAgICAgICAgY3JhdGU6OkZJTEVfVkVSU0lPTiArIDEsCi0gICAgICAgICAgICAgICAgY3JhdGU6OkZJTEVfVkVSU0lPTgorICAgICAgICAgICAgICAgIE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OICsgMSwKKyAgICAgICAgICAgICAgICBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTgogICAgICAgICAgICAgKQogICAgICAgICApOwogICAgIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvU3RvcmFnZUludGVybmFsUmVhZGVyLmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL1N0b3JhZ2VJbnRlcm5hbFJlYWRlci5qYXZhCmluZGV4IDI5ZWJlZTUuLjZmYmNkYjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvU3RvcmFnZUludGVybmFsUmVhZGVyLmphdmEKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9TdG9yYWdlSW50ZXJuYWxSZWFkZXIuamF2YQpAQCAtNTMsOSArNTMsNiBAQAogICAgIEBVbnN1cHBvcnRlZEFwcFVzYWdlCiAgICAgcHVibGljIGJvb2xlYW4gZ2V0Qm9vbGVhbkZsYWdWYWx1ZShpbnQgaW5kZXgpIHsKICAgICAgICAgaW5kZXggKz0gbVBhY2thZ2VCb29sZWFuU3RhcnRPZmZzZXQ7Ci0gICAgICAgIGlmIChpbmRleCA+PSBtRmxhZ1ZhbHVlTGlzdC5zaXplKCkpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbigiRmFpbCB0byBnZXQgYm9vbGVhbiBmbGFnIHZhbHVlIik7Ci0gICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1GbGFnVmFsdWVMaXN0LmdldEJvb2xlYW4oaW5kZXgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3Jjcy9hbmRyb2lkL29zL2ZsYWdnaW5nL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3Jjcy9hbmRyb2lkL29zL2ZsYWdnaW5nL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3M2Q5ZWIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmNzL2FuZHJvaWQvb3MvZmxhZ2dpbmcvUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmphdmEKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQub3MuZmxhZ2dpbmc7CisKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5BY29uZmlnU3RvcmFnZUV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GbGFnVmFsdWVMaXN0OworaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLlBhY2thZ2VUYWJsZTsKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5TdG9yYWdlRmlsZVByb3ZpZGVyOworaW1wb3J0IGFuZHJvaWQuY29tcGF0LmFubm90YXRpb24uVW5zdXBwb3J0ZWRBcHBVc2FnZTsKK2ltcG9ydCBhbmRyb2lkLm9zLlN0cmljdE1vZGU7CisKKy8qKgorICogQW4ge0Bjb2RlIGFjb25maWd9IHBhY2thZ2UgY29udGFpbmluZyB0aGUgZW5hYmxlZCBzdGF0ZSBvZiBpdHMgZmxhZ3MuCisgKgorICogPHA+PHN0cm9uZz5Ob3RlOiB0aGlzIGlzIGludGVuZGVkIG9ubHkgdG8gYmUgdXNlZCBieSBnZW5lcmF0ZWQgY29kZS4gVG8gZGV0ZXJtaW5lIGlmIGEgZ2l2ZW4gZmxhZworICogaXMgZW5hYmxlZCBpbiBhcHAgY29kZSwgdGhlIGdlbmVyYXRlZCBhbmRyb2lkIGZsYWdzIHNob3VsZCBiZSB1c2VkLjwvc3Ryb25nPgorICoKKyAqIDxwPlRoaXMgY2xhc3MgaXMgbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgYW5kIHNob3VsZCBiZSB1c2VkIGJ5IEFjbm9maWcgRmxhZyBpbnRlcm5hbGx5IDwvYj4gSXQKKyAqIGlzIGludGVuZGVkIGZvciBpbnRlcm5hbCB1c2Ugb25seSBhbmQgd2lsbCBiZSBjaGFuZ2VkIG9yIHJlbW92ZWQgd2l0aG91dCBub3RpY2UuCisgKgorICogPHA+VGhpcyBjbGFzcyBpcyB1c2VkIHRvIHJlYWQgdGhlIGZsYWcgZnJvbSBBY29uZmlnIFBhY2thZ2UuRWFjaCBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIHdpbGwKKyAqIGNhY2hlIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gb25lIHBhY2thZ2UuIFRvIHJlYWQgZmxhZ3MgZnJvbSBhIGRpZmZlcmVudCBwYWNrYWdlLCBhIG5ldyBpbnN0YW5jZQorICogb2YgdGhpcyBjbGFzcyBzaG91bGQgYmUge0BsaW5rICNsb2FkIGxvYWRlZH0uCisgKgorICogQGhpZGUKKyAqLworcHVibGljIGNsYXNzIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbCB7CisKKyAgICBwcml2YXRlIGZpbmFsIEZsYWdWYWx1ZUxpc3QgbUZsYWdWYWx1ZUxpc3Q7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbVBhY2thZ2VCb29sZWFuU3RhcnRPZmZzZXQ7CisKKyAgICBwcml2YXRlIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbCgKKyAgICAgICAgICAgIEZsYWdWYWx1ZUxpc3QgZmxhZ1ZhbHVlTGlzdCwgaW50IHBhY2thZ2VCb29sZWFuU3RhcnRPZmZzZXQpIHsKKyAgICAgICAgdGhpcy5tRmxhZ1ZhbHVlTGlzdCA9IGZsYWdWYWx1ZUxpc3Q7CisgICAgICAgIHRoaXMubVBhY2thZ2VCb29sZWFuU3RhcnRPZmZzZXQgPSBwYWNrYWdlQm9vbGVhblN0YXJ0T2Zmc2V0OworICAgIH0KKworICAgIC8qKgorICAgICAqIExvYWRzIGFuIEFjb25maWcgcGFja2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyIGFuZCB2ZXJpZmllcyBpdHMgZmluZ2VycHJpbnQuCisgICAgICoKKyAgICAgKiA8cD5UaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlIG9ubHkgYW5kIG1heSBiZSBjaGFuZ2VkIG9yIHJlbW92ZWQgd2l0aG91dAorICAgICAqIG5vdGljZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb250YWluZXIgVGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lci4KKyAgICAgKiBAcGFyYW0gcGFja2FnZU5hbWUgVGhlIG5hbWUgb2YgdGhlIEFjb25maWcgcGFja2FnZS4KKyAgICAgKiBAcGFyYW0gcGFja2FnZUZpbmdlcnByaW50IFRoZSBleHBlY3RlZCBmaW5nZXJwcmludCBvZiB0aGUgcGFja2FnZS4KKyAgICAgKiBAcmV0dXJuIEFuIGluc3RhbmNlIG9mIHtAbGluayBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWx9IHJlcHJlc2VudGluZyB0aGUgbG9hZGVkCisgICAgICogICAgIHBhY2thZ2UuCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBAVW5zdXBwb3J0ZWRBcHBVc2FnZQorICAgIHB1YmxpYyBzdGF0aWMgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsIGxvYWQoCisgICAgICAgICAgICBTdHJpbmcgY29udGFpbmVyLCBTdHJpbmcgcGFja2FnZU5hbWUsIGxvbmcgcGFja2FnZUZpbmdlcnByaW50KSB7CisgICAgICAgIHJldHVybiBsb2FkKAorICAgICAgICAgICAgICAgIGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICBwYWNrYWdlTmFtZSwKKyAgICAgICAgICAgICAgICBwYWNrYWdlRmluZ2VycHJpbnQsCisgICAgICAgICAgICAgICAgU3RvcmFnZUZpbGVQcm92aWRlci5nZXREZWZhdWx0UHJvdmlkZXIoKSk7CisgICAgfQorCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHN0YXRpYyBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwgbG9hZCgKKyAgICAgICAgICAgIFN0cmluZyBjb250YWluZXIsCisgICAgICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUsCisgICAgICAgICAgICBsb25nIHBhY2thZ2VGaW5nZXJwcmludCwKKyAgICAgICAgICAgIFN0b3JhZ2VGaWxlUHJvdmlkZXIgZmlsZVByb3ZpZGVyKSB7CisgICAgICAgIFN0cmljdE1vZGUuVGhyZWFkUG9saWN5IG9sZFBvbGljeSA9IFN0cmljdE1vZGUuYWxsb3dUaHJlYWREaXNrUmVhZHMoKTsKKyAgICAgICAgUGFja2FnZVRhYmxlLk5vZGUgcE5vZGUgPSBudWxsOworICAgICAgICBGbGFnVmFsdWVMaXN0IHZMaXN0ID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHBOb2RlID0gZmlsZVByb3ZpZGVyLmdldFBhY2thZ2VUYWJsZShjb250YWluZXIpLmdldChwYWNrYWdlTmFtZSk7CisgICAgICAgICAgICB2TGlzdCA9IGZpbGVQcm92aWRlci5nZXRGbGFnVmFsdWVMaXN0KGNvbnRhaW5lcik7CisgICAgICAgIH0gY2F0Y2ggKEFjb25maWdTdG9yYWdlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBBY29uZmlnU3RvcmFnZVJlYWRFeGNlcHRpb24oZS5nZXRFcnJvckNvZGUoKSwgZS50b1N0cmluZygpKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIFN0cmljdE1vZGUuc2V0VGhyZWFkUG9saWN5KG9sZFBvbGljeSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocE5vZGUgPT0gbnVsbCB8fCB2TGlzdCA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQWNvbmZpZ1N0b3JhZ2VSZWFkRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICBBY29uZmlnU3RvcmFnZVJlYWRFeGNlcHRpb24uRVJST1JfUEFDS0FHRV9OT1RfRk9VTkQsCisgICAgICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhY2thZ2UgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBwYWNrYWdlTmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGluIGNvbnRhaW5lciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRhaW5lcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGNhbm5vdCBiZSBmb3VuZCBvbiB0aGUgZGV2aWNlIikpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBOb2RlLmhhc1BhY2thZ2VGaW5nZXJwcmludCgpICYmIHBhY2thZ2VGaW5nZXJwcmludCAhPSBwTm9kZS5nZXRQYWNrYWdlRmluZ2VycHJpbnQoKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEFjb25maWdTdG9yYWdlUmVhZEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgNSwgLy8gQWNvbmZpZ1N0b3JhZ2VSZWFkRXhjZXB0aW9uLkVSUk9SX0ZJTEVfRklOR0VSUFJJTlRfTUlTTUFUQ0gsCisgICAgICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhY2thZ2UgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBwYWNrYWdlTmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGluIGNvbnRhaW5lciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbnRhaW5lcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGNhbm5vdCBiZSBmb3VuZCBvbiB0aGUgZGV2aWNlIikpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ldyBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwodkxpc3QsIHBOb2RlLmdldEJvb2xlYW5TdGFydEluZGV4KCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHJpZXZlcyB0aGUgdmFsdWUgb2YgYSBib29sZWFuIGZsYWcgdXNpbmcgaXRzIGluZGV4LgorICAgICAqCisgICAgICogPHA+VGhpcyBtZXRob2QgaXMgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSBvbmx5IGFuZCBtYXkgYmUgY2hhbmdlZCBvciByZW1vdmVkIHdpdGhvdXQKKyAgICAgKiBub3RpY2UuCisgICAgICoKKyAgICAgKiA8cD5UaGlzIG1ldGhvZCByZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIGEgZmxhZyB3aXRoaW4gdGhlIGxvYWRlZCBBY29uZmlnIHBhY2thZ2UgdXNpbmcgaXRzCisgICAgICogaW5kZXguIFRoZSBpbmRleCBpcyBnZW5lcmF0ZWQgYXQgYnVpbGQgdGltZSBhbmQgbWF5IHZhcnkgYmV0d2VlbiBidWlsZHMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBmbGFnIHdpdGhpbiB0aGUgcGFja2FnZS4KKyAgICAgKiBAcmV0dXJuIFRoZSBib29sZWFuIHZhbHVlIG9mIHRoZSBmbGFnLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgQFVuc3VwcG9ydGVkQXBwVXNhZ2UKKyAgICBwdWJsaWMgYm9vbGVhbiBnZXRCb29sZWFuRmxhZ1ZhbHVlKGludCBpbmRleCkgeworICAgICAgICByZXR1cm4gbUZsYWdWYWx1ZUxpc3QuZ2V0Qm9vbGVhbihpbmRleCArIG1QYWNrYWdlQm9vbGVhblN0YXJ0T2Zmc2V0KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL0FuZHJvaWRUZXN0LnhtbCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL0Fjb25maWdTdG9yYWdlUmVhZEZ1bmN0aW9uYWxUZXN0LnhtbApzaW1pbGFyaXR5IGluZGV4IDg5JQpyZW5hbWUgZnJvbSB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL0FuZHJvaWRUZXN0LnhtbApyZW5hbWUgdG8gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvQWNvbmZpZ1N0b3JhZ2VSZWFkRnVuY3Rpb25hbFRlc3QueG1sCmluZGV4IDk5YzllMjUuLmVlNTAwNjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvQW5kcm9pZFRlc3QueG1sCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL0Fjb25maWdTdG9yYWdlUmVhZEZ1bmN0aW9uYWxUZXN0LnhtbApAQCAtMjYsNyArMjYsNyBAQAogICAgIDwvdGFyZ2V0X3ByZXBhcmVyPgogCiAgICAgPHRhcmdldF9wcmVwYXJlciBjbGFzcz0iY29tLmFuZHJvaWQudHJhZGVmZWQudGFyZ2V0cHJlcC5UZXN0QXBwSW5zdGFsbFNldHVwIj4KLSAgICAgICAgPG9wdGlvbiBuYW1lPSJ0ZXN0LWZpbGUtbmFtZSIgdmFsdWU9ImFjb25maWdfc3RvcmFnZV9yZWFkX2FwaS50ZXN0LmphdmEuYXBrIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9InRlc3QtZmlsZS1uYW1lIiB2YWx1ZT0iYWNvbmZpZ19zdG9yYWdlX3JlYWRfZnVuY3Rpb25hbC5hcGsiIC8+CiAgICAgPC90YXJnZXRfcHJlcGFyZXI+CiAKICAgICA8dGFyZ2V0X3ByZXBhcmVyIGNsYXNzPSJjb20uYW5kcm9pZC50cmFkZWZlZC50YXJnZXRwcmVwLkRpc2FibGVTRUxpbnV4VGFyZ2V0UHJlcGFyZXIiIC8+CkBAIC0zNSwxNyArMzUsMTcgQEAKICAgICA8dGFyZ2V0X3ByZXBhcmVyIGNsYXNzPSJjb20uYW5kcm9pZC50cmFkZWZlZC50YXJnZXRwcmVwLlB1c2hGaWxlUHJlcGFyZXIiPgogICAgICAgICA8b3B0aW9uIG5hbWU9ImNsZWFudXAiIHZhbHVlPSJ0cnVlIiAvPgogICAgICAgICA8b3B0aW9uIG5hbWU9ImFib3J0LW9uLXB1c2gtZmFpbHVyZSIgdmFsdWU9InRydWUiIC8+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0icHVzaC1maWxlIiBrZXk9InBhY2thZ2UubWFwIgorICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2gtZmlsZSIga2V5PSJwYWNrYWdlX3YxLm1hcCIKICAgICAgICAgICAgICAgICB2YWx1ZT0iL2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfamF2YV9hcGlfdGVzdC9tYXBzL21vY2t1cC5wYWNrYWdlLm1hcCIgLz4KLSAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoLWZpbGUiIGtleT0iZmxhZy5tYXAiCisgICAgICAgIDxvcHRpb24gbmFtZT0icHVzaC1maWxlIiBrZXk9ImZsYWdfdjEubWFwIgogICAgICAgICAgICAgICAgIHZhbHVlPSIvZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19qYXZhX2FwaV90ZXN0L21hcHMvbW9ja3VwLmZsYWcubWFwIiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2gtZmlsZSIga2V5PSJmbGFnLnZhbCIKKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoLWZpbGUiIGtleT0iZmxhZ192MS52YWwiCiAgICAgICAgICAgICAgICAgdmFsdWU9Ii9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX2phdmFfYXBpX3Rlc3QvYm9vdC9tb2NrdXAudmFsIiAvPgogICAgIDwvdGFyZ2V0X3ByZXBhcmVyPgogCiAgICAgPHRlc3QgY2xhc3M9ImNvbS5hbmRyb2lkLnRyYWRlZmVkLnRlc3R0eXBlLkFuZHJvaWRKVW5pdFRlc3QiID4KICAgICAgICAgPG9wdGlvbiBuYW1lPSJydW5uZXIiIHZhbHVlPSJhbmRyb2lkeC50ZXN0LnJ1bm5lci5BbmRyb2lkSlVuaXRSdW5uZXIiIC8+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0icGFja2FnZSIgdmFsdWU9ImFuZHJvaWQuYWNvbmZpZ19zdG9yYWdlLnRlc3QiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0icGFja2FnZSIgdmFsdWU9ImFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QiIC8+CiAgICAgICAgIDxvcHRpb24gbmFtZT0icnVudGltZS1oaW50IiB2YWx1ZT0iMW0iIC8+CiAgICAgPC90ZXN0PgotPC9jb25maWd1cmF0aW9uPgorPC9jb25maWd1cmF0aW9uPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL0Fjb25maWdTdG9yYWdlUmVhZFVuaXRUZXN0LnhtbCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL0Fjb25maWdTdG9yYWdlUmVhZFVuaXRUZXN0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTI4ZGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvQWNvbmZpZ1N0b3JhZ2VSZWFkVW5pdFRlc3QueG1sCkBAIC0wLDAgKzEsMzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tCisgIH4gQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAgfgorICB+IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgfgorICB+ICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIH4KKyAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgIC0tPgorPGNvbmZpZ3VyYXRpb24gZGVzY3JpcHRpb249IlRlc3QgYWNvbmZpZyBzdG9yYWdlIGphdmEgdGVzdHMiPgorICAgIDx0YXJnZXRfcHJlcGFyZXIgY2xhc3M9ImNvbS5hbmRyb2lkLnRyYWRlZmVkLnRhcmdldHByZXAuc3VpdGUuU3VpdGVBcGtJbnN0YWxsZXIiPgorICAgICAgICA8b3B0aW9uIG5hbWU9ImNsZWFudXAtYXBrcyIgdmFsdWU9InRydWUiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0idGVzdC1maWxlLW5hbWUiIHZhbHVlPSJhY29uZmlnX3N0b3JhZ2VfcmVhZF91bml0LmFwayIgLz4KKyAgICA8L3RhcmdldF9wcmVwYXJlcj4KKyAgICA8dGFyZ2V0X3ByZXBhcmVyIGNsYXNzPSJjb20uYW5kcm9pZC5jb21wYXRpYmlsaXR5LmNvbW1vbi50cmFkZWZlZC50YXJnZXRwcmVwLkZpbGVQdXNoZXIiPgorICAgICAgICA8b3B0aW9uIG5hbWU9ImNsZWFudXAiIHZhbHVlPSJ0cnVlIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2giIHZhbHVlPSJwYWNrYWdlX3YyLm1hcC0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9yZWFkX3VuaXQvdGVzdGRhdGEvbW9ja3VwLnBhY2thZ2UubWFwIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2giIHZhbHVlPSJmbGFnX3YyLm1hcC0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9yZWFkX3VuaXQvdGVzdGRhdGEvbW9ja3VwLmZsYWcubWFwIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2giIHZhbHVlPSJmbGFnX3YyLnZhbC0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9yZWFkX3VuaXQvdGVzdGRhdGEvbW9ja3VwLnZhbCIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0iZmxhZ192Mi5pbmZvLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX3JlYWRfdW5pdC90ZXN0ZGF0YS9tb2NrdXAuaW5mbyIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwb3N0LXB1c2giIHZhbHVlPSJjaG1vZCArciAvZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX3JlYWRfdW5pdC90ZXN0ZGF0YS8iIC8+CisgICAgPC90YXJnZXRfcHJlcGFyZXI+CisgICAgPHRlc3QgY2xhc3M9ImNvbS5hbmRyb2lkLnRyYWRlZmVkLnRlc3R0eXBlLkFuZHJvaWRKVW5pdFRlc3QiID4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwYWNrYWdlIiB2YWx1ZT0iYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdCIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJydW50aW1lLWhpbnQiIHZhbHVlPSIxbSIgLz4KKyAgICA8L3Rlc3Q+Cis8L2NvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9BbmRyb2lkLmJwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvQW5kcm9pZC5icAppbmRleCBlZDBjNzI4Li43MDIzMjVkIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL0FuZHJvaWQuYnAKQEAgLTEsOSArMSwxNCBAQAogZmlsZWdyb3VwIHsKICAgICBuYW1lOiAicmVhZF9hcGlfdGVzdF9zdG9yYWdlX2ZpbGVzIiwKLSAgICBzcmNzOiBbInBhY2thZ2UubWFwIiwKLSAgICAgICAgImZsYWcubWFwIiwKLSAgICAgICAgImZsYWcudmFsIiwKLSAgICAgICAgImZsYWcuaW5mbyIKKyAgICBzcmNzOiBbCisgICAgICAgICJkYXRhL3YxL3BhY2thZ2VfdjEubWFwIiwKKyAgICAgICAgImRhdGEvdjEvZmxhZ192MS5tYXAiLAorICAgICAgICAiZGF0YS92MS9mbGFnX3YxLnZhbCIsCisgICAgICAgICJkYXRhL3YxL2ZsYWdfdjEuaW5mbyIsCisgICAgICAgICJkYXRhL3YyL3BhY2thZ2VfdjIubWFwIiwKKyAgICAgICAgImRhdGEvdjIvZmxhZ192Mi5tYXAiLAorICAgICAgICAiZGF0YS92Mi9mbGFnX3YyLnZhbCIsCisgICAgICAgICJkYXRhL3YyL2ZsYWdfdjIuaW5mbyIsCiAgICAgXSwKIH0KIApAQCAtNDMsMyArNDgsNTIgQEAKICAgICAgICAgImdlbmVyYWwtdGVzdHMiLAogICAgIF0sCiB9CisKK2FuZHJvaWRfdGVzdCB7CisgICAgbmFtZTogImFjb25maWdfc3RvcmFnZV9yZWFkX2Z1bmN0aW9uYWwiLAorICAgIHNyY3M6IFsKKyAgICAgICAgImZ1bmN0aW9uYWwvc3Jjcy8qKi8qLmphdmEiLAorICAgIF0sCisgICAgc3RhdGljX2xpYnM6IFsKKyAgICAgICAgImFjb25maWdfZGV2aWNlX3BhdGhzX2phdmEiLAorICAgICAgICAiYWNvbmZpZ19zdG9yYWdlX2ZpbGVfamF2YSIsCisgICAgICAgICJhbmRyb2lkeC50ZXN0LnJ1bGVzIiwKKyAgICAgICAgImxpYmFjb25maWdfc3RvcmFnZV9yZWFkX2FwaV9qYXZhIiwKKyAgICAgICAgImp1bml0IiwKKyAgICBdLAorICAgIGpuaV9saWJzOiBbCisgICAgICAgICJsaWJhY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGlfcnVzdF9qbmkiLAorICAgIF0sCisgICAgZGF0YTogWworICAgICAgICAiOnJlYWRfYXBpX3Rlc3Rfc3RvcmFnZV9maWxlcyIsCisgICAgXSwKKyAgICBwbGF0Zm9ybV9hcGlzOiB0cnVlLAorICAgIGNlcnRpZmljYXRlOiAicGxhdGZvcm0iLAorICAgIHRlc3Rfc3VpdGVzOiBbCisgICAgICAgICJnZW5lcmFsLXRlc3RzIiwKKyAgICBdLAorICAgIHRlc3RfY29uZmlnOiAiQWNvbmZpZ1N0b3JhZ2VSZWFkRnVuY3Rpb25hbFRlc3QueG1sIiwKKyAgICB0ZWFtOiAidHJlbmR5X3RlYW1fYW5kcm9pZF9jb3JlX2V4cGVyaW1lbnRzIiwKK30KKworYW5kcm9pZF90ZXN0IHsKKyAgICBuYW1lOiAiYWNvbmZpZ19zdG9yYWdlX3JlYWRfdW5pdCIsCisgICAgdGVhbTogInRyZW5keV90ZWFtX2FuZHJvaWRfY29yZV9leHBlcmltZW50cyIsCisgICAgc3JjczogWworICAgICAgICAidW5pdC9zcmNzLyoqLyouamF2YSIsCisgICAgXSwKKyAgICBzdGF0aWNfbGliczogWworICAgICAgICAiYW5kcm9pZHgudGVzdC5ydW5uZXIiLAorICAgICAgICAianVuaXQiLAorICAgICAgICAiYWNvbmZpZ19zdG9yYWdlX3JlYWRlcl9qYXZhIiwKKyAgICBdLAorICAgIHNka192ZXJzaW9uOiAidGVzdF9jdXJyZW50IiwKKyAgICBkYXRhOiBbCisgICAgICAgICI6cmVhZF9hcGlfdGVzdF9zdG9yYWdlX2ZpbGVzIiwKKyAgICBdLAorICAgIHRlc3Rfc3VpdGVzOiBbCisgICAgICAgICJnZW5lcmFsLXRlc3RzIiwKKyAgICBdLAorICAgIHRlc3RfY29uZmlnOiAiQWNvbmZpZ1N0b3JhZ2VSZWFkVW5pdFRlc3QueG1sIiwKKyAgICBqYXJqYXJfcnVsZXM6ICJqYXJqYXIudHh0IiwKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvQW5kcm9pZE1hbmlmZXN0LnhtbCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL0FuZHJvaWRNYW5pZmVzdC54bWwKc2ltaWxhcml0eSBpbmRleCA4OSUKcmVuYW1lIGZyb20gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9BbmRyb2lkTWFuaWZlc3QueG1sCnJlbmFtZSB0byB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9BbmRyb2lkTWFuaWZlc3QueG1sCmluZGV4IDc4YmZiMzcuLjVlMDE4NzkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvQW5kcm9pZE1hbmlmZXN0LnhtbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9BbmRyb2lkTWFuaWZlc3QueG1sCkBAIC0xNSwxMiArMTUsMTMgQEAKICAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAgLS0+CiAKLTxtYW5pZmVzdCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIHBhY2thZ2U9ImFuZHJvaWQuYWNvbmZpZ19zdG9yYWdlLnRlc3QiPgorPG1hbmlmZXN0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICBwYWNrYWdlPSJhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0Ij4KICAgICA8YXBwbGljYXRpb24+CiAgICAgICAgIDx1c2VzLWxpYnJhcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnRlc3QucnVubmVyIiAvPgogICAgIDwvYXBwbGljYXRpb24+CiAKICAgICA8aW5zdHJ1bWVudGF0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZHgudGVzdC5ydW5uZXIuQW5kcm9pZEpVbml0UnVubmVyIgotICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0YXJnZXRQYWNrYWdlPSJhbmRyb2lkLmFjb25maWdfc3RvcmFnZS50ZXN0IiAvPgorICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0YXJnZXRQYWNrYWdlPSJhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0IiAvPgogCiA8L21hbmlmZXN0PgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZmxhZy5pbmZvIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92MS9mbGFnX3YxLmluZm8Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2ZsYWcuaW5mbwpyZW5hbWUgdG8gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92MS9mbGFnX3YxLmluZm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZmxhZy5tYXAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEubWFwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9mbGFnLm1hcApyZW5hbWUgdG8gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92MS9mbGFnX3YxLm1hcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9mbGFnLnZhbCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS52YWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2ZsYWcudmFsCnJlbmFtZSB0byB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEudmFsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL3BhY2thZ2UubWFwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92MS9wYWNrYWdlX3YxLm1hcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvcGFja2FnZS5tYXAKcmVuYW1lIHRvIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjEvcGFja2FnZV92MS5tYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLmluZm8gYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YyL2ZsYWdfdjIuaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGI3ZmRlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLmluZm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLm1hcCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi5tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y0Njg1YwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi5tYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLnZhbCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi52YWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdkNDc1MAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi52YWwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92Mi9wYWNrYWdlX3YyLm1hcCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjIvcGFja2FnZV92Mi5tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE5Zjk1ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjIvcGFja2FnZV92Mi5tYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9BY29uZmlnU3RvcmFnZVJlYWRBUElUZXN0LmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9mdW5jdGlvbmFsL3NyY3MvQWNvbmZpZ1N0b3JhZ2VSZWFkQVBJVGVzdC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvQWNvbmZpZ1N0b3JhZ2VSZWFkQVBJVGVzdC5qYXZhCnJlbmFtZSB0byB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9mdW5jdGlvbmFsL3NyY3MvQWNvbmZpZ1N0b3JhZ2VSZWFkQVBJVGVzdC5qYXZhCmluZGV4IDE5MTc0MWUuLjZkZDFiY2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvQWNvbmZpZ1N0b3JhZ2VSZWFkQVBJVGVzdC5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2Z1bmN0aW9uYWwvc3Jjcy9BY29uZmlnU3RvcmFnZVJlYWRBUElUZXN0LmphdmEKQEAgLTI2Nyw0ICsyNjcsNCBAQAogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHJWYWwsIGpWYWwpOwogICAgICAgICB9CiAgICAgfQotfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2Z1bmN0aW9uYWwvc3Jjcy9QbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWxUZXN0LmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9mdW5jdGlvbmFsL3NyY3MvUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZTIyNGIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9mdW5jdGlvbmFsL3NyY3MvUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0OworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRocm93czsKKworaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5EZXZpY2VQcm90b3M7CitpbXBvcnQgYW5kcm9pZC5hY29uZmlnLm5hbm8uQWNvbmZpZzsKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcubmFuby5BY29uZmlnLnBhcnNlZF9mbGFnOworaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkZsYWdUYWJsZTsKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GbGFnVmFsdWVMaXN0OworaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLlBhY2thZ2VUYWJsZTsKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5TdG9yYWdlRmlsZVByb3ZpZGVyOworaW1wb3J0IGFuZHJvaWQub3MuZmxhZ2dpbmcuQWNvbmZpZ1N0b3JhZ2VSZWFkRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQub3MuZmxhZ2dpbmcuUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsOworCitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CitpbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOworaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXJzLkpVbml0NDsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitAUnVuV2l0aChKVW5pdDQuY2xhc3MpCitwdWJsaWMgY2xhc3MgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsVGVzdCB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTZXQ8U3RyaW5nPiBQTEFURk9STV9DT05UQUlORVJTID0gU2V0Lm9mKCJzeXN0ZW0iLCAidmVuZG9yIiwgInByb2R1Y3QiKTsKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEFjb25maWdQYWNrYWdlSW50ZXJuYWxfbG9hZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIExpc3Q8cGFyc2VkX2ZsYWc+IGZsYWdzID0gRGV2aWNlUHJvdG9zLmxvYWRBbmRQYXJzZUZsYWdQcm90b3MoKTsKKyAgICAgICAgTWFwPFN0cmluZywgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsPiByZWFkZXJNYXAgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIFN0b3JhZ2VGaWxlUHJvdmlkZXIgZnAgPSBTdG9yYWdlRmlsZVByb3ZpZGVyLmdldERlZmF1bHRQcm92aWRlcigpOworCisgICAgICAgIGZvciAocGFyc2VkX2ZsYWcgZmxhZyA6IGZsYWdzKSB7CisgICAgICAgICAgICBpZiAoZmxhZy5wZXJtaXNzaW9uID09IEFjb25maWcuUkVBRF9PTkxZICYmIGZsYWcuc3RhdGUgPT0gQWNvbmZpZy5ESVNBQkxFRCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3RyaW5nIGNvbnRhaW5lciA9IGZsYWcuY29udGFpbmVyOworICAgICAgICAgICAgU3RyaW5nIHBhY2thZ2VOYW1lID0gZmxhZy5wYWNrYWdlXzsKKyAgICAgICAgICAgIFN0cmluZyBmbGFnTmFtZSA9IGZsYWcubmFtZTsKKyAgICAgICAgICAgIGlmICghUExBVEZPUk1fQ09OVEFJTkVSUy5jb250YWlucyhjb250YWluZXIpKSBjb250aW51ZTsKKworICAgICAgICAgICAgUGFja2FnZVRhYmxlIHBUYWJsZSA9IGZwLmdldFBhY2thZ2VUYWJsZShjb250YWluZXIpOworICAgICAgICAgICAgUGFja2FnZVRhYmxlLk5vZGUgcE5vZGUgPSBwVGFibGUuZ2V0KHBhY2thZ2VOYW1lKTsKKyAgICAgICAgICAgIEZsYWdUYWJsZSBmVGFibGUgPSBmcC5nZXRGbGFnVGFibGUoY29udGFpbmVyKTsKKyAgICAgICAgICAgIEZsYWdUYWJsZS5Ob2RlIGZOb2RlID0gZlRhYmxlLmdldChwTm9kZS5nZXRQYWNrYWdlSWQoKSwgZmxhZ05hbWUpOworICAgICAgICAgICAgRmxhZ1ZhbHVlTGlzdCBmTGlzdCA9IGZwLmdldEZsYWdWYWx1ZUxpc3QoY29udGFpbmVyKTsKKworICAgICAgICAgICAgaW50IGluZGV4ID0gcE5vZGUuZ2V0Qm9vbGVhblN0YXJ0SW5kZXgoKSArIGZOb2RlLmdldEZsYWdJbmRleCgpOworICAgICAgICAgICAgYm9vbGVhbiByVmFsID0gZkxpc3QuZ2V0Qm9vbGVhbihpbmRleCk7CisKKyAgICAgICAgICAgIGxvbmcgZmluZ2VycHJpbnQgPSBwTm9kZS5nZXRQYWNrYWdlRmluZ2VycHJpbnQoKTsKKworICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsIHJlYWRlciA9IHJlYWRlck1hcC5nZXQocGFja2FnZU5hbWUpOworICAgICAgICAgICAgaWYgKHJlYWRlciA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmVhZGVyID0gUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmxvYWQoY29udGFpbmVyLCBwYWNrYWdlTmFtZSwgZmluZ2VycHJpbnQpOworICAgICAgICAgICAgICAgIHJlYWRlck1hcC5wdXQocGFja2FnZU5hbWUsIHJlYWRlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBib29sZWFuIGpWYWwgPSByZWFkZXIuZ2V0Qm9vbGVhbkZsYWdWYWx1ZShmTm9kZS5nZXRGbGFnSW5kZXgoKSk7CisKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyhyVmFsLCBqVmFsKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEFjb25maWdQYWNrYWdlX2xvYWRfd2l0aEVycm9yKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgLy8gY29udGFpbmVyIG5vdCBmb3VuZCBmYWtlX2NvbnRhaW5lcgorICAgICAgICBBY29uZmlnU3RvcmFnZVJlYWRFeGNlcHRpb24gZSA9CisgICAgICAgICAgICAgICAgYXNzZXJ0VGhyb3dzKAorICAgICAgICAgICAgICAgICAgICAgICAgQWNvbmZpZ1N0b3JhZ2VSZWFkRXhjZXB0aW9uLmNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgKCkgLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmxvYWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZha2VfY29udGFpbmVyIiwgImZha2VfcGFja2FnZSIsIDApKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKEFjb25maWdTdG9yYWdlUmVhZEV4Y2VwdGlvbi5FUlJPUl9DQU5OT1RfUkVBRF9TVE9SQUdFX0ZJTEUsIGUuZ2V0RXJyb3JDb2RlKCkpOworCisgICAgICAgIC8vIHBhY2thZ2Ugbm90IGZvdW5kCisgICAgICAgIGUgPQorICAgICAgICAgICAgICAgIGFzc2VydFRocm93cygKKyAgICAgICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlUmVhZEV4Y2VwdGlvbi5jbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICgpIC0+IFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5sb2FkKCJzeXN0ZW0iLCAiZmFrZV9jb250YWluZXIiLCAwKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhBY29uZmlnU3RvcmFnZVJlYWRFeGNlcHRpb24uRVJST1JfUEFDS0FHRV9OT1RfRk9VTkQsIGUuZ2V0RXJyb3JDb2RlKCkpOworCisgICAgICAgIC8vIGZpbmdlcnByaW50IGRvZXNuJ3QgbWF0Y2gKKyAgICAgICAgTGlzdDxwYXJzZWRfZmxhZz4gZmxhZ3MgPSBEZXZpY2VQcm90b3MubG9hZEFuZFBhcnNlRmxhZ1Byb3RvcygpOworICAgICAgICBTdG9yYWdlRmlsZVByb3ZpZGVyIGZwID0gU3RvcmFnZUZpbGVQcm92aWRlci5nZXREZWZhdWx0UHJvdmlkZXIoKTsKKworICAgICAgICBwYXJzZWRfZmxhZyBmbGFnID0gZmxhZ3MuZ2V0KDApOworCisgICAgICAgIFN0cmluZyBjb250YWluZXIgPSBmbGFnLmNvbnRhaW5lcjsKKyAgICAgICAgU3RyaW5nIHBhY2thZ2VOYW1lID0gZmxhZy5wYWNrYWdlXzsKKyAgICAgICAgYm9vbGVhbiB2YWx1ZSA9IGZsYWcuc3RhdGUgPT0gQWNvbmZpZy5FTkFCTEVEOworCisgICAgICAgIFBhY2thZ2VUYWJsZSBwVGFibGUgPSBmcC5nZXRQYWNrYWdlVGFibGUoY29udGFpbmVyKTsKKyAgICAgICAgUGFja2FnZVRhYmxlLk5vZGUgcE5vZGUgPSBwVGFibGUuZ2V0KHBhY2thZ2VOYW1lKTsKKworICAgICAgICBpZiAocE5vZGUuaGFzUGFja2FnZUZpbmdlcnByaW50KCkpIHsKKyAgICAgICAgICAgIGxvbmcgZmluZ2VycHJpbnQgPSBwTm9kZS5nZXRQYWNrYWdlRmluZ2VycHJpbnQoKTsKKyAgICAgICAgICAgIGUgPQorICAgICAgICAgICAgICAgICAgICBhc3NlcnRUaHJvd3MoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNvbmZpZ1N0b3JhZ2VSZWFkRXhjZXB0aW9uLmNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpIC0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwubG9hZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLCBwYWNrYWdlTmFtZSwgZmluZ2VycHJpbnQgKyAxKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoCisgICAgICAgICAgICAgICAgICAgIC8vIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLkVSUk9SX0ZJTEVfRklOR0VSUFJJTlRfTUlTTUFUQ0gsCisgICAgICAgICAgICAgICAgICAgIDUsIGUuZ2V0RXJyb3JDb2RlKCkpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9TdG9yYWdlSW50ZXJuYWxSZWFkZXJUZXN0LmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9mdW5jdGlvbmFsL3NyY3MvU3RvcmFnZUludGVybmFsUmVhZGVyVGVzdC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvU3RvcmFnZUludGVybmFsUmVhZGVyVGVzdC5qYXZhCnJlbmFtZSB0byB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9mdW5jdGlvbmFsL3NyY3MvU3RvcmFnZUludGVybmFsUmVhZGVyVGVzdC5qYXZhCmluZGV4IDNhMWJiYTAuLjhhOGYwNTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvU3RvcmFnZUludGVybmFsUmVhZGVyVGVzdC5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2Z1bmN0aW9uYWwvc3Jjcy9TdG9yYWdlSW50ZXJuYWxSZWFkZXJUZXN0LmphdmEKQEAgLTQyLDQgKzQyLDQgQEAKICAgICAgICAgYXNzZXJ0RmFsc2UocmVhZGVyLmdldEJvb2xlYW5GbGFnVmFsdWUoMCkpOwogICAgICAgICBhc3NlcnRUcnVlKHJlYWRlci5nZXRCb29sZWFuRmxhZ1ZhbHVlKDEpKTsKICAgICB9Ci19Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamFyamFyLnR4dCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phcmphci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkyNTBkNAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phcmphci50eHQKQEAgLTAsMCArMSwxOSBAQAorcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5BY29uZmlnU3RvcmFnZUV4Y2VwdGlvbiBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LkFjb25maWdTdG9yYWdlRXhjZXB0aW9uCitydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkZsYWdUYWJsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LkZsYWdUYWJsZQorcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5QYWNrYWdlVGFibGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5QYWNrYWdlVGFibGUKK3J1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuQnl0ZUJ1ZmZlclJlYWRlciBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LkJ5dGVCdWZmZXJSZWFkZXIKK3J1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuRmxhZ1R5cGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5GbGFnVHlwZQorcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5TaXBIYXNoZXIxMyBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LlNpcEhhc2hlcjEzCitydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkZpbGVUeXBlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QuRmlsZVR5cGUKK3J1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuRmxhZ1ZhbHVlTGlzdCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LkZsYWdWYWx1ZUxpc3QKK3J1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuVGFibGVVdGlscyBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LlRhYmxlVXRpbHMKK3J1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuQWNvbmZpZ1BhY2thZ2VJbXBsIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QuQWNvbmZpZ1BhY2thZ2VJbXBsCitydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLlN0b3JhZ2VGaWxlUHJvdmlkZXIgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5TdG9yYWdlRmlsZVByb3ZpZGVyCisKKworcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GbGFnVGFibGUkKiBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LkZsYWdUYWJsZSRAMQorcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5QYWNrYWdlVGFibGUkKiBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LlBhY2thZ2VUYWJsZSRAMQorcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GbGFnVmFsdWVMaXN0JCogYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5GbGFnVmFsdWVMaXN0QDEKK3J1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuU2lwSGFzaGVyMTMkKiBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LlNpcEhhc2hlcjEzQDEKKworcnVsZSBhbmRyb2lkLm9zLmZsYWdnaW5nLlBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LlBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbApkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9BbmRyb2lkLmJwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9BbmRyb2lkLmJwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDRlOWFkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvQW5kcm9pZC5icAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLWFuZHJvaWRfdGVzdCB7Ci0gICAgbmFtZTogImFjb25maWdfc3RvcmFnZV9yZWFkX2FwaS50ZXN0LmphdmEiLAotICAgIHNyY3M6IFsiLi8qKi8qLmphdmEiXSwKLSAgICBzdGF0aWNfbGliczogWwotICAgICAgICAiYWNvbmZpZ19kZXZpY2VfcGF0aHNfamF2YSIsCi0gICAgICAgICJhY29uZmlnX3N0b3JhZ2VfZmlsZV9qYXZhIiwKLSAgICAgICAgImFjb25maWdfc3RvcmFnZV9yZWFkZXJfamF2YSIsCi0gICAgICAgICJhbmRyb2lkeC50ZXN0LnJ1bGVzIiwKLSAgICAgICAgImxpYmFjb25maWdfc3RvcmFnZV9yZWFkX2FwaV9qYXZhIiwKLSAgICAgICAgImp1bml0IiwKLSAgICBdLAotICAgIGpuaV9saWJzOiBbCi0gICAgICAgICJsaWJhY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGlfcnVzdF9qbmkiLAotICAgIF0sCi0gICAgZGF0YTogWwotICAgICAgICAiOnJlYWRfYXBpX3Rlc3Rfc3RvcmFnZV9maWxlcyIsCi0gICAgXSwKLSAgICBwbGF0Zm9ybV9hcGlzOiB0cnVlLAotICAgIGNlcnRpZmljYXRlOiAicGxhdGZvcm0iLAotICAgIHRlc3Rfc3VpdGVzOiBbCi0gICAgICAgICJnZW5lcmFsLXRlc3RzIiwKLSAgICBdLAotICAgIHRlYW06ICJ0cmVuZHlfdGVhbV9hbmRyb2lkX2NvcmVfZXhwZXJpbWVudHMiLAotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvc3RvcmFnZV9yZWFkX2FwaV90ZXN0LmNwcCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL3N0b3JhZ2VfcmVhZF9hcGlfdGVzdC5jcHAKaW5kZXggNmQyOTA0NS4uNTI4OWZhYSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvc3RvcmFnZV9yZWFkX2FwaV90ZXN0LmNwcAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9zdG9yYWdlX3JlYWRfYXBpX3Rlc3QuY3BwCkBAIC00NSw3ICs0NSw4IEBACiAgIH0KIAogICB2b2lkIFNldFVwKCkgb3ZlcnJpZGUgewotICAgIGF1dG8gY29uc3QgdGVzdF9kaXIgPSBhbmRyb2lkOjpiYXNlOjpHZXRFeGVjdXRhYmxlRGlyZWN0b3J5KCk7CisgICAgYXV0byBjb25zdCB0ZXN0X2Jhc2VfZGlyID0gYW5kcm9pZDo6YmFzZTo6R2V0RXhlY3V0YWJsZURpcmVjdG9yeSgpOworICAgIGF1dG8gY29uc3QgdGVzdF9kaXIgPSB0ZXN0X2Jhc2VfZGlyICsgIi9kYXRhL3YxIjsKICAgICBzdG9yYWdlX2RpciA9IHN0ZDo6c3RyaW5nKHJvb3RfZGlyLnBhdGgpOwogICAgIGF1dG8gbWFwc19kaXIgPSBzdG9yYWdlX2RpciArICIvbWFwcyI7CiAgICAgYXV0byBib290X2RpciA9IHN0b3JhZ2VfZGlyICsgIi9ib290IjsKQEAgLTU1LDEwICs1NiwxMCBAQAogICAgIGZsYWdfbWFwID0gc3RkOjpzdHJpbmcobWFwc19kaXIpICsgIi9tb2NrdXAuZmxhZy5tYXAiOwogICAgIGZsYWdfdmFsID0gc3RkOjpzdHJpbmcoYm9vdF9kaXIpICsgIi9tb2NrdXAudmFsIjsKICAgICBmbGFnX2luZm8gPSBzdGQ6OnN0cmluZyhib290X2RpcikgKyAiL21vY2t1cC5pbmZvIjsKLSAgICBjb3B5X2ZpbGUodGVzdF9kaXIgKyAiL3BhY2thZ2UubWFwIiwgcGFja2FnZV9tYXApOwotICAgIGNvcHlfZmlsZSh0ZXN0X2RpciArICIvZmxhZy5tYXAiLCBmbGFnX21hcCk7Ci0gICAgY29weV9maWxlKHRlc3RfZGlyICsgIi9mbGFnLnZhbCIsIGZsYWdfdmFsKTsKLSAgICBjb3B5X2ZpbGUodGVzdF9kaXIgKyAiL2ZsYWcuaW5mbyIsIGZsYWdfaW5mbyk7CisgICAgY29weV9maWxlKHRlc3RfZGlyICsgIi9wYWNrYWdlX3YxLm1hcCIsIHBhY2thZ2VfbWFwKTsKKyAgICBjb3B5X2ZpbGUodGVzdF9kaXIgKyAiL2ZsYWdfdjEubWFwIiwgZmxhZ19tYXApOworICAgIGNvcHlfZmlsZSh0ZXN0X2RpciArICIvZmxhZ192MS52YWwiLCBmbGFnX3ZhbCk7CisgICAgY29weV9maWxlKHRlc3RfZGlyICsgIi9mbGFnX3YxLmluZm8iLCBmbGFnX2luZm8pOwogICB9CiAKICAgdm9pZCBUZWFyRG93bigpIG92ZXJyaWRlIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL3N0b3JhZ2VfcmVhZF9hcGlfdGVzdC5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL3N0b3JhZ2VfcmVhZF9hcGlfdGVzdC5ycwppbmRleCBhZmM0NGQ0Li4yYThlZGYzIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9zdG9yYWdlX3JlYWRfYXBpX3Rlc3QucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvc3RvcmFnZV9yZWFkX2FwaV90ZXN0LnJzCkBAIC05LDcgKzksNyBAQAogICAgIHVzZSByYW5kOjpSbmc7CiAgICAgdXNlIHN0ZDo6ZnM7CiAKLSAgICBmbiBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKCkgLT4gU3RyaW5nIHsKKyAgICBmbiBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKHZlcnNpb246IHUzMikgLT4gU3RyaW5nIHsKICAgICAgICAgbGV0IG11dCBybmcgPSByYW5kOjp0aHJlYWRfcm5nKCk7CiAgICAgICAgIGxldCBudW1iZXI6IHUzMiA9IHJuZy5nZW4oKTsKICAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gU3RyaW5nOjpmcm9tKCIvdG1wLyIpICsgJm51bWJlci50b19zdHJpbmcoKTsKQEAgLTI2LDE3ICsyNiwxNyBAQAogICAgICAgICBsZXQgZmxhZ19tYXAgPSBzdG9yYWdlX2Rpci5jbG9uZSgpICsgIi9tYXBzL21vY2t1cC5mbGFnLm1hcCI7CiAgICAgICAgIGxldCBmbGFnX3ZhbCA9IHN0b3JhZ2VfZGlyLmNsb25lKCkgKyAiL2Jvb3QvbW9ja3VwLnZhbCI7CiAgICAgICAgIGxldCBmbGFnX2luZm8gPSBzdG9yYWdlX2Rpci5jbG9uZSgpICsgIi9ib290L21vY2t1cC5pbmZvIjsKLSAgICAgICAgZnM6OmNvcHkoIi4vcGFja2FnZS5tYXAiLCBwYWNrYWdlX21hcCkudW53cmFwKCk7Ci0gICAgICAgIGZzOjpjb3B5KCIuL2ZsYWcubWFwIiwgZmxhZ19tYXApLnVud3JhcCgpOwotICAgICAgICBmczo6Y29weSgiLi9mbGFnLnZhbCIsIGZsYWdfdmFsKS51bndyYXAoKTsKLSAgICAgICAgZnM6OmNvcHkoIi4vZmxhZy5pbmZvIiwgZmxhZ19pbmZvKS51bndyYXAoKTsKKyAgICAgICAgZnM6OmNvcHkoZm9ybWF0ISgiLi9kYXRhL3Z7MH0vcGFja2FnZV92ezB9Lm1hcCIsIHZlcnNpb24pLCBwYWNrYWdlX21hcCkudW53cmFwKCk7CisgICAgICAgIGZzOjpjb3B5KGZvcm1hdCEoIi4vZGF0YS92ezB9L2ZsYWdfdnswfS5tYXAiLCB2ZXJzaW9uKSwgZmxhZ19tYXApLnVud3JhcCgpOworICAgICAgICBmczo6Y29weShmb3JtYXQhKCIuL2RhdGEvdnt9L2ZsYWdfdnswfS52YWwiLCB2ZXJzaW9uKSwgZmxhZ192YWwpLnVud3JhcCgpOworICAgICAgICBmczo6Y29weShmb3JtYXQhKCIuL2RhdGEvdnt9L2ZsYWdfdnswfS5pbmZvIiwgdmVyc2lvbiksIGZsYWdfaW5mbykudW53cmFwKCk7CiAKICAgICAgICAgc3RvcmFnZV9kaXIKICAgICB9CiAKICAgICAjW3Rlc3RdCi0gICAgZm4gdGVzdF91bmF2YWlsYWJsZV9zdG9hcmdlKCkgewotICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKCk7CisgICAgZm4gdGVzdF91bmF2YWlsYWJsZV9zdG9yYWdlKCkgeworICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKDEpOwogICAgICAgICAvLyBTQUZFVFk6CiAgICAgICAgIC8vIFRoZSBzYWZldHkgaGVyZSBpcyBlbnN1cmVkIGFzIHRoZSB0ZXN0IHByb2Nlc3Mgd2lsbCBub3Qgd3JpdGUgdG8gdGVtcCBzdG9yYWdlIGZpbGUKICAgICAgICAgbGV0IGVyciA9IHVuc2FmZSB7CkBAIC01Myw3ICs1Myw3IEBACiAKICAgICAjW3Rlc3RdCiAgICAgZm4gdGVzdF9wYWNrYWdlX2NvbnRleHRfcXVlcnkoKSB7Ci0gICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoKTsKKyAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygxKTsKICAgICAgICAgLy8gU0FGRVRZOgogICAgICAgICAvLyBUaGUgc2FmZXR5IGhlcmUgaXMgZW5zdXJlZCBhcyB0aGUgdGVzdCBwcm9jZXNzIHdpbGwgbm90IHdyaXRlIHRvIHRlbXAgc3RvcmFnZSBmaWxlCiAgICAgICAgIGxldCBwYWNrYWdlX21hcHBlZF9maWxlID0gdW5zYWZlIHsKQEAgLTY0LDI3ICs2NCw3MyBAQAogICAgICAgICAgICAgZ2V0X3BhY2thZ2VfcmVhZF9jb250ZXh0KCZwYWNrYWdlX21hcHBlZF9maWxlLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIpCiAgICAgICAgICAgICAgICAgLnVud3JhcCgpCiAgICAgICAgICAgICAgICAgLnVud3JhcCgpOwotICAgICAgICBsZXQgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0ID0gUGFja2FnZVJlYWRDb250ZXh0IHsgcGFja2FnZV9pZDogMCwgYm9vbGVhbl9zdGFydF9pbmRleDogMCB9OworICAgICAgICBsZXQgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0ID0KKyAgICAgICAgICAgIFBhY2thZ2VSZWFkQ29udGV4dCB7IHBhY2thZ2VfaWQ6IDAsIGJvb2xlYW5fc3RhcnRfaW5kZXg6IDAsIGZpbmdlcnByaW50OiAwIH07CiAgICAgICAgIGFzc2VydF9lcSEocGFja2FnZV9jb250ZXh0LCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQpOwogCiAgICAgICAgIGxldCBwYWNrYWdlX2NvbnRleHQgPQogICAgICAgICAgICAgZ2V0X3BhY2thZ2VfcmVhZF9jb250ZXh0KCZwYWNrYWdlX21hcHBlZF9maWxlLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIpCiAgICAgICAgICAgICAgICAgLnVud3JhcCgpCiAgICAgICAgICAgICAgICAgLnVud3JhcCgpOwotICAgICAgICBsZXQgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0ID0gUGFja2FnZVJlYWRDb250ZXh0IHsgcGFja2FnZV9pZDogMSwgYm9vbGVhbl9zdGFydF9pbmRleDogMyB9OworICAgICAgICBsZXQgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0ID0KKyAgICAgICAgICAgIFBhY2thZ2VSZWFkQ29udGV4dCB7IHBhY2thZ2VfaWQ6IDEsIGJvb2xlYW5fc3RhcnRfaW5kZXg6IDMsIGZpbmdlcnByaW50OiAwIH07CiAgICAgICAgIGFzc2VydF9lcSEocGFja2FnZV9jb250ZXh0LCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQpOwogCiAgICAgICAgIGxldCBwYWNrYWdlX2NvbnRleHQgPQogICAgICAgICAgICAgZ2V0X3BhY2thZ2VfcmVhZF9jb250ZXh0KCZwYWNrYWdlX21hcHBlZF9maWxlLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIpCiAgICAgICAgICAgICAgICAgLnVud3JhcCgpCiAgICAgICAgICAgICAgICAgLnVud3JhcCgpOwotICAgICAgICBsZXQgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0ID0gUGFja2FnZVJlYWRDb250ZXh0IHsgcGFja2FnZV9pZDogMiwgYm9vbGVhbl9zdGFydF9pbmRleDogNiB9OworICAgICAgICBsZXQgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0ID0KKyAgICAgICAgICAgIFBhY2thZ2VSZWFkQ29udGV4dCB7IHBhY2thZ2VfaWQ6IDIsIGJvb2xlYW5fc3RhcnRfaW5kZXg6IDYsIGZpbmdlcnByaW50OiAwIH07CisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZV9jb250ZXh0LCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQpOworICAgIH0KKworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X3BhY2thZ2VfY29udGV4dF9xdWVyeV93aXRoX2ZpbmdlcnByaW50KCkgeworICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKDIpOworICAgICAgICAvLyBTQUZFVFk6CisgICAgICAgIC8vIFRoZSBzYWZldHkgaGVyZSBpcyBlbnN1cmVkIGFzIHRoZSB0ZXN0IHByb2Nlc3Mgd2lsbCBub3Qgd3JpdGUgdG8gdGVtcCBzdG9yYWdlIGZpbGUKKyAgICAgICAgbGV0IHBhY2thZ2VfbWFwcGVkX2ZpbGUgPSB1bnNhZmUgeworICAgICAgICAgICAgZ2V0X21hcHBlZF9maWxlKCZzdG9yYWdlX2RpciwgIm1vY2t1cCIsIFN0b3JhZ2VGaWxlVHlwZTo6UGFja2FnZU1hcCkudW53cmFwKCkKKyAgICAgICAgfTsKKworICAgICAgICBsZXQgcGFja2FnZV9jb250ZXh0ID0KKyAgICAgICAgICAgIGdldF9wYWNrYWdlX3JlYWRfY29udGV4dCgmcGFja2FnZV9tYXBwZWRfZmlsZSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiKQorICAgICAgICAgICAgICAgIC51bndyYXAoKQorICAgICAgICAgICAgICAgIC51bndyYXAoKTsKKyAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCA9IFBhY2thZ2VSZWFkQ29udGV4dCB7CisgICAgICAgICAgICBwYWNrYWdlX2lkOiAwLAorICAgICAgICAgICAgYm9vbGVhbl9zdGFydF9pbmRleDogMCwKKyAgICAgICAgICAgIGZpbmdlcnByaW50OiAxNTI0ODk0ODUxMDU5MDE1ODA4NnU2NCwKKyAgICAgICAgfTsKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlX2NvbnRleHQsIGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCk7CisKKyAgICAgICAgbGV0IHBhY2thZ2VfY29udGV4dCA9CisgICAgICAgICAgICBnZXRfcGFja2FnZV9yZWFkX2NvbnRleHQoJnBhY2thZ2VfbWFwcGVkX2ZpbGUsICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIikKKyAgICAgICAgICAgICAgICAudW53cmFwKCkKKyAgICAgICAgICAgICAgICAudW53cmFwKCk7CisgICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQgPSBQYWNrYWdlUmVhZENvbnRleHQgeworICAgICAgICAgICAgcGFja2FnZV9pZDogMSwKKyAgICAgICAgICAgIGJvb2xlYW5fc3RhcnRfaW5kZXg6IDMsCisgICAgICAgICAgICBmaW5nZXJwcmludDogNDQzMTk0MDUwMjI3NDg1Nzk2NHU2NCwKKyAgICAgICAgfTsKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlX2NvbnRleHQsIGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCk7CisKKyAgICAgICAgbGV0IHBhY2thZ2VfY29udGV4dCA9CisgICAgICAgICAgICBnZXRfcGFja2FnZV9yZWFkX2NvbnRleHQoJnBhY2thZ2VfbWFwcGVkX2ZpbGUsICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80IikKKyAgICAgICAgICAgICAgICAudW53cmFwKCkKKyAgICAgICAgICAgICAgICAudW53cmFwKCk7CisgICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQgPSBQYWNrYWdlUmVhZENvbnRleHQgeworICAgICAgICAgICAgcGFja2FnZV9pZDogMiwKKyAgICAgICAgICAgIGJvb2xlYW5fc3RhcnRfaW5kZXg6IDYsCisgICAgICAgICAgICBmaW5nZXJwcmludDogMTYyMzMyMjk5MTc3MTE2MjIzNzV1NjQsCisgICAgICAgIH07CiAgICAgICAgIGFzc2VydF9lcSEocGFja2FnZV9jb250ZXh0LCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQpOwogICAgIH0KIAogICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X25vbmVfZXhpc3RfcGFja2FnZV9jb250ZXh0X3F1ZXJ5KCkgewotICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKCk7CisgICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoMSk7CiAgICAgICAgIC8vIFNBRkVUWToKICAgICAgICAgLy8gVGhlIHNhZmV0eSBoZXJlIGlzIGVuc3VyZWQgYXMgdGhlIHRlc3QgcHJvY2VzcyB3aWxsIG5vdCB3cml0ZSB0byB0ZW1wIHN0b3JhZ2UgZmlsZQogICAgICAgICBsZXQgcGFja2FnZV9tYXBwZWRfZmlsZSA9IHVuc2FmZSB7CkBAIC05OSw3ICsxNDUsNyBAQAogCiAgICAgI1t0ZXN0XQogICAgIGZuIHRlc3RfZmxhZ19jb250ZXh0X3F1ZXJ5KCkgewotICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKCk7CisgICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoMSk7CiAgICAgICAgIC8vIFNBRkVUWToKICAgICAgICAgLy8gVGhlIHNhZmV0eSBoZXJlIGlzIGVuc3VyZWQgYXMgdGhlIHRlc3QgcHJvY2VzcyB3aWxsIG5vdCB3cml0ZSB0byB0ZW1wIHN0b3JhZ2UgZmlsZQogICAgICAgICBsZXQgZmxhZ19tYXBwZWRfZmlsZSA9CkBAIC0xMjUsNyArMTcxLDcgQEAKIAogICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X25vbmVfZXhpc3RfZmxhZ19jb250ZXh0X3F1ZXJ5KCkgewotICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKCk7CisgICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoMSk7CiAgICAgICAgIC8vIFNBRkVUWToKICAgICAgICAgLy8gVGhlIHNhZmV0eSBoZXJlIGlzIGVuc3VyZWQgYXMgdGhlIHRlc3QgcHJvY2VzcyB3aWxsIG5vdCB3cml0ZSB0byB0ZW1wIHN0b3JhZ2UgZmlsZQogICAgICAgICBsZXQgZmxhZ19tYXBwZWRfZmlsZSA9CkBAIC0xNDEsNyArMTg3LDcgQEAKIAogICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X2Jvb2xlYW5fZmxhZ192YWx1ZV9xdWVyeSgpIHsKLSAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygpOworICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKDEpOwogICAgICAgICAvLyBTQUZFVFk6CiAgICAgICAgIC8vIFRoZSBzYWZldHkgaGVyZSBpcyBlbnN1cmVkIGFzIHRoZSB0ZXN0IHByb2Nlc3Mgd2lsbCBub3Qgd3JpdGUgdG8gdGVtcCBzdG9yYWdlIGZpbGUKICAgICAgICAgbGV0IGZsYWdfdmFsdWVfZmlsZSA9CkBAIC0xNTUsNyArMjAxLDcgQEAKIAogICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X2ludmFsaWRfYm9vbGVhbl9mbGFnX3ZhbHVlX3F1ZXJ5KCkgewotICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKCk7CisgICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoMSk7CiAgICAgICAgIC8vIFNBRkVUWToKICAgICAgICAgLy8gVGhlIHNhZmV0eSBoZXJlIGlzIGVuc3VyZWQgYXMgdGhlIHRlc3QgcHJvY2VzcyB3aWxsIG5vdCB3cml0ZSB0byB0ZW1wIHN0b3JhZ2UgZmlsZQogICAgICAgICBsZXQgZmxhZ192YWx1ZV9maWxlID0KQEAgLTE2OSw3ICsyMTUsNyBAQAogCiAgICAgI1t0ZXN0XQogICAgIGZuIHRlc3RfZmxhZ19pbmZvX3F1ZXJ5KCkgewotICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKCk7CisgICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoMSk7CiAgICAgICAgIC8vIFNBRkVUWToKICAgICAgICAgLy8gVGhlIHNhZmV0eSBoZXJlIGlzIGVuc3VyZWQgYXMgdGhlIHRlc3QgcHJvY2VzcyB3aWxsIG5vdCB3cml0ZSB0byB0ZW1wIHN0b3JhZ2UgZmlsZQogICAgICAgICBsZXQgZmxhZ19pbmZvX2ZpbGUgPQpAQCAtMTg2LDcgKzIzMiw3IEBACiAKICAgICAjW3Rlc3RdCiAgICAgZm4gdGVzdF9pbnZhbGlkX2Jvb2xlYW5fZmxhZ19pbmZvX3F1ZXJ5KCkgewotICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKCk7CisgICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoMSk7CiAgICAgICAgIC8vIFNBRkVUWToKICAgICAgICAgLy8gVGhlIHNhZmV0eSBoZXJlIGlzIGVuc3VyZWQgYXMgdGhlIHRlc3QgcHJvY2VzcyB3aWxsIG5vdCB3cml0ZSB0byB0ZW1wIHN0b3JhZ2UgZmlsZQogICAgICAgICBsZXQgZmxhZ19pbmZvX2ZpbGUgPQpAQCAtMTk5LDEwICsyNDUsMTggQEAKICAgICB9CiAKICAgICAjW3Rlc3RdCi0gICAgZm4gdGVzdF9zdG9yYWdlX3ZlcnNpb25fcXVlcnkoKSB7Ci0gICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL3BhY2thZ2UubWFwIikudW53cmFwKCksIDEpOwotICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi9mbGFnLm1hcCIpLnVud3JhcCgpLCAxKTsKLSAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vZmxhZy52YWwiKS51bndyYXAoKSwgMSk7Ci0gICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL2ZsYWcuaW5mbyIpLnVud3JhcCgpLCAxKTsKKyAgICBmbiB0ZXN0X3N0b3JhZ2VfdmVyc2lvbl9xdWVyeV92MSgpIHsKKyAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vZGF0YS92MS9wYWNrYWdlX3YxLm1hcCIpLnVud3JhcCgpLCAxKTsKKyAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vZGF0YS92MS9mbGFnX3YxLm1hcCIpLnVud3JhcCgpLCAxKTsKKyAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vZGF0YS92MS9mbGFnX3YxLnZhbCIpLnVud3JhcCgpLCAxKTsKKyAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vZGF0YS92MS9mbGFnX3YxLmluZm8iKS51bndyYXAoKSwgMSk7CisgICAgfQorCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3Rfc3RvcmFnZV92ZXJzaW9uX3F1ZXJ5X3YyKCkgeworICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi9kYXRhL3YyL3BhY2thZ2VfdjIubWFwIikudW53cmFwKCksIDIpOworICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi9kYXRhL3YyL2ZsYWdfdjIubWFwIikudW53cmFwKCksIDIpOworICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi9kYXRhL3YyL2ZsYWdfdjIudmFsIikudW53cmFwKCksIDIpOworICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi9kYXRhL3YyL2ZsYWdfdjIuaW5mbyIpLnVud3JhcCgpLCAyKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy91bml0L3NyY3MvUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsVGVzdC5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvdW5pdC9zcmNzL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjFmMGVhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvdW5pdC9zcmNzL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbFRlc3QuamF2YQpAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdDsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUaHJvd3M7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKKworaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLlBhY2thZ2VUYWJsZTsKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5TdG9yYWdlRmlsZVByb3ZpZGVyOworaW1wb3J0IGFuZHJvaWQub3MuZmxhZ2dpbmcuQWNvbmZpZ1N0b3JhZ2VSZWFkRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQub3MuZmxhZ2dpbmcuUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsOworCitpbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKK2ltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7CitpbXBvcnQgb3JnLmp1bml0LnJ1bm5lcnMuSlVuaXQ0OworCitAUnVuV2l0aChKVW5pdDQuY2xhc3MpCitwdWJsaWMgY2xhc3MgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsVGVzdCB7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUREFUQV9QQVRIID0KKyAgICAgICAgICAgICIvZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX3JlYWRfdW5pdC90ZXN0ZGF0YS8iOworCisgICAgcHJpdmF0ZSBTdG9yYWdlRmlsZVByb3ZpZGVyIHByOworCisgICAgQEJlZm9yZQorICAgIHB1YmxpYyB2b2lkIHNldHVwKCkgeworICAgICAgICBwciA9IG5ldyBTdG9yYWdlRmlsZVByb3ZpZGVyKFRFU1REQVRBX1BBVEgsIFRFU1REQVRBX1BBVEgpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdExvYWRfY29udGFpbmVyX3BhY2thZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgUGFja2FnZVRhYmxlIHBhY2thZ2VUYWJsZSA9IHByLmdldFBhY2thZ2VUYWJsZSgibW9ja3VwIik7CisKKyAgICAgICAgUGFja2FnZVRhYmxlLk5vZGUgbm9kZTEgPSBwYWNrYWdlVGFibGUuZ2V0KCJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIik7CisKKyAgICAgICAgbG9uZyBmaW5nZXJwcmludCA9IG5vZGUxLmdldFBhY2thZ2VGaW5nZXJwcmludCgpOworICAgICAgICBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwgcCA9CisgICAgICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmxvYWQoCisgICAgICAgICAgICAgICAgICAgICAgICAibW9ja3VwIiwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLCBmaW5nZXJwcmludCwgcHIpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdExvYWRfY29udGFpbmVyX3BhY2thZ2VfZXJyb3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgUGFja2FnZVRhYmxlIHBhY2thZ2VUYWJsZSA9IHByLmdldFBhY2thZ2VUYWJsZSgibW9ja3VwIik7CisgICAgICAgIFBhY2thZ2VUYWJsZS5Ob2RlIG5vZGUxID0gcGFja2FnZVRhYmxlLmdldCgiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIpOworICAgICAgICBsb25nIGZpbmdlcnByaW50ID0gbm9kZTEuZ2V0UGFja2FnZUZpbmdlcnByaW50KCk7CisgICAgICAgIC8vIGNhbm5vdCBmaW5kIHBhY2thZ2UKKyAgICAgICAgQWNvbmZpZ1N0b3JhZ2VSZWFkRXhjZXB0aW9uIGUgPQorICAgICAgICAgICAgICAgIGFzc2VydFRocm93cygKKyAgICAgICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlUmVhZEV4Y2VwdGlvbi5jbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICgpIC0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5sb2FkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2NrdXAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluZ2VycHJpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKEFjb25maWdTdG9yYWdlUmVhZEV4Y2VwdGlvbi5FUlJPUl9QQUNLQUdFX05PVF9GT1VORCwgZS5nZXRFcnJvckNvZGUoKSk7CisKKyAgICAgICAgLy8gY2Fubm90IGZpbmQgY29udGFpbmVyCisgICAgICAgIGUgPQorICAgICAgICAgICAgICAgIGFzc2VydFRocm93cygKKyAgICAgICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlUmVhZEV4Y2VwdGlvbi5jbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICgpIC0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5sb2FkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmdlcnByaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhBY29uZmlnU3RvcmFnZVJlYWRFeGNlcHRpb24uRVJST1JfQ0FOTk9UX1JFQURfU1RPUkFHRV9GSUxFLCBlLmdldEVycm9yQ29kZSgpKTsKKworICAgICAgICBlID0KKyAgICAgICAgICAgICAgICBhc3NlcnRUaHJvd3MoCisgICAgICAgICAgICAgICAgICAgICAgICBBY29uZmlnU3RvcmFnZVJlYWRFeGNlcHRpb24uY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAoKSAtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwubG9hZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmdlcnByaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhBY29uZmlnU3RvcmFnZVJlYWRFeGNlcHRpb24uRVJST1JfQ0FOTk9UX1JFQURfU1RPUkFHRV9GSUxFLCBlLmdldEVycm9yQ29kZSgpKTsKKworICAgICAgICAvLyBmaW5nZXJwcmludCBkb2Vzbid0IG1hdGNoCisgICAgICAgIGUgPQorICAgICAgICAgICAgICAgIGFzc2VydFRocm93cygKKyAgICAgICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlUmVhZEV4Y2VwdGlvbi5jbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICgpIC0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5sb2FkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2NrdXAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5nZXJwcmludCArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKAorICAgICAgICAgICAgICAgIC8vIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLkVSUk9SX0ZJTEVfRklOR0VSUFJJTlRfTUlTTUFUQ0gsCisgICAgICAgICAgICAgICAgNSwgZS5nZXRFcnJvckNvZGUoKSk7CisKKyAgICAgICAgLy8gbmV3IHN0b3JhZ2UgZG9lc24ndCBleGlzdAorICAgICAgICBwciA9IG5ldyBTdG9yYWdlRmlsZVByb3ZpZGVyKCJmYWtlL3BhdGgvIiwgImZha2UvcGF0aC8iKTsKKyAgICAgICAgZSA9CisgICAgICAgICAgICAgICAgYXNzZXJ0VGhyb3dzKAorICAgICAgICAgICAgICAgICAgICAgICAgQWNvbmZpZ1N0b3JhZ2VSZWFkRXhjZXB0aW9uLmNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgKCkgLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmxvYWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vY2t1cCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmdlcnByaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhBY29uZmlnU3RvcmFnZVJlYWRFeGNlcHRpb24uRVJST1JfQ0FOTk9UX1JFQURfU1RPUkFHRV9GSUxFLCBlLmdldEVycm9yQ29kZSgpKTsKKworICAgICAgICAvLyBmaWxlIHJlYWQgaXNzdWUKKyAgICAgICAgcHIgPSBuZXcgU3RvcmFnZUZpbGVQcm92aWRlcihURVNUREFUQV9QQVRILCAiZmFrZS9wYXRoLyIpOworICAgICAgICBlID0KKyAgICAgICAgICAgICAgICBhc3NlcnRUaHJvd3MoCisgICAgICAgICAgICAgICAgICAgICAgICBBY29uZmlnU3RvcmFnZVJlYWRFeGNlcHRpb24uY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAoKSAtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwubG9hZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9ja3VwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluZ2VycHJpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKEFjb25maWdTdG9yYWdlUmVhZEV4Y2VwdGlvbi5FUlJPUl9DQU5OT1RfUkVBRF9TVE9SQUdFX0ZJTEUsIGUuZ2V0RXJyb3JDb2RlKCkpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEdldEJvb2xlYW5GbGFnVmFsdWVfaW5kZXgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgUGFja2FnZVRhYmxlIHBhY2thZ2VUYWJsZSA9IHByLmdldFBhY2thZ2VUYWJsZSgibW9ja3VwIik7CisgICAgICAgIFBhY2thZ2VUYWJsZS5Ob2RlIG5vZGUxID0gcGFja2FnZVRhYmxlLmdldCgiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIpOworICAgICAgICBsb25nIGZpbmdlcnByaW50ID0gbm9kZTEuZ2V0UGFja2FnZUZpbmdlcnByaW50KCk7CisgICAgICAgIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbCBwID0KKyAgICAgICAgICAgICAgICBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwubG9hZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICJtb2NrdXAiLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsIGZpbmdlcnByaW50LCBwcik7CisgICAgICAgIGFzc2VydEZhbHNlKHAuZ2V0Qm9vbGVhbkZsYWdWYWx1ZSgwKSk7CisgICAgICAgIGFzc2VydFRydWUocC5nZXRCb29sZWFuRmxhZ1ZhbHVlKDEpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShwLmdldEJvb2xlYW5GbGFnVmFsdWUoMikpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9BbmRyb2lkLmJwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpL0FuZHJvaWQuYnAKaW5kZXggMGYxOTYyYy4uNGM4ODJiNCAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpL0FuZHJvaWQuYnAKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpL0FuZHJvaWQuYnAKQEAgLTE2LDYgKzE2LDExIEBACiAgICAgICAgICJsaWJhY29uZmlnX3N0b3JhZ2VfZmlsZSIsCiAgICAgICAgICJsaWJhY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkiLAogICAgIF0sCisgICAgbWluX3Nka192ZXJzaW9uOiAiMzQiLAorICAgIGFwZXhfYXZhaWxhYmxlOiBbCisgICAgICAgICIvL2FwZXhfYXZhaWxhYmxlOmFueWFwZXgiLAorICAgICAgICAiLy9hcGV4X2F2YWlsYWJsZTpwbGF0Zm9ybSIsCisgICAgXSwKIH0KIAogcnVzdF9saWJyYXJ5IHsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpLmNwcCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpLmNwcAppbmRleCA3YjQzNTc0Li4wM2E4ZmEyIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV93cml0ZV9hcGkvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS5jcHAKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpL2Fjb25maWdfc3RvcmFnZV93cml0ZV9hcGkuY3BwCkBAIC0xMDAsMTggKzEwMCw0IEBACiAgIHJldHVybiB7fTsKIH0KIAotYW5kcm9pZDo6YmFzZTo6UmVzdWx0PHZvaWQ+IGNyZWF0ZV9mbGFnX2luZm8oCi0gICAgc3RkOjpzdHJpbmcgY29uc3QmIHBhY2thZ2VfbWFwLAotICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBmbGFnX21hcCwKLSAgICBzdGQ6OnN0cmluZyBjb25zdCYgZmxhZ19pbmZvX291dCkgewotICBhdXRvIGNyZWF0aW9uX2N4eCA9IGNyZWF0ZV9mbGFnX2luZm9fY3h4KAotICAgICAgcnVzdDo6U3RyKHBhY2thZ2VfbWFwLmNfc3RyKCkpLAotICAgICAgcnVzdDo6U3RyKGZsYWdfbWFwLmNfc3RyKCkpLAotICAgICAgcnVzdDo6U3RyKGZsYWdfaW5mb19vdXQuY19zdHIoKSkpOwotICBpZiAoY3JlYXRpb25fY3h4LnN1Y2Nlc3MpIHsKLSAgICByZXR1cm4ge307Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIGFuZHJvaWQ6OmJhc2U6OkVycm9yKCkgPDwgY3JlYXRpb25fY3h4LmVycm9yX21lc3NhZ2U7Ci0gIH0KLX0KIH0gLy8gbmFtZXNwYWNlIGFjb25maWdfc3RvcmFnZQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpL2luY2x1ZGUvYWNvbmZpZ19zdG9yYWdlL2Fjb25maWdfc3RvcmFnZV93cml0ZV9hcGkuaHBwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpL2luY2x1ZGUvYWNvbmZpZ19zdG9yYWdlL2Fjb25maWdfc3RvcmFnZV93cml0ZV9hcGkuaHBwCmluZGV4IDBiYmE3ZmYuLjUwYTUxODggMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9pbmNsdWRlL2Fjb25maWdfc3RvcmFnZS9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpLmhwcAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV93cml0ZV9hcGkvaW5jbHVkZS9hY29uZmlnX3N0b3JhZ2UvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS5ocHAKQEAgLTM2LDEzICszNiw0IEBACiAgICAgdWludDMyX3Qgb2Zmc2V0LAogICAgIGJvb2wgdmFsdWUpOwogCi0vLy8gQ3JlYXRlIGZsYWcgaW5mbyBmaWxlIGJhc2VkIG9uIHBhY2thZ2UgYW5kIGZsYWcgbWFwCi0vLy8gXGlucHV0IHBhY2thZ2VfbWFwOiBwYWNrYWdlIG1hcCBmaWxlCi0vLy8gXGlucHV0IGZsYWdfbWFwOiBmbGFnIG1hcCBmaWxlCi0vLy8gXGlucHV0IGZsYWdfaW5mb19vdXQ6IGZsYWcgaW5mbyBmaWxlIHRvIGJlIGNyZWF0ZWQKLWFuZHJvaWQ6OmJhc2U6OlJlc3VsdDx2b2lkPiBjcmVhdGVfZmxhZ19pbmZvKAotICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBwYWNrYWdlX21hcCwKLSAgICBzdGQ6OnN0cmluZyBjb25zdCYgZmxhZ19tYXAsCi0gICAgc3RkOjpzdHJpbmcgY29uc3QmIGZsYWdfaW5mb19vdXQpOwotCiB9IC8vIG5hbWVzcGFjZSBhY29uZmlnX3N0b3JhZ2UKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9zcmMvZmxhZ19pbmZvX3VwZGF0ZS5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9zcmMvZmxhZ19pbmZvX3VwZGF0ZS5ycwppbmRleCA3ZTYwNzEzLi41NzIxMTA1IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV93cml0ZV9hcGkvc3JjL2ZsYWdfaW5mb191cGRhdGUucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpL3NyYy9mbGFnX2luZm9fdXBkYXRlLnJzCkBAIC0xOCw3ICsxOCw3IEBACiAKIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6ewogICAgIHJlYWRfdThfZnJvbV9ieXRlcywgQWNvbmZpZ1N0b3JhZ2VFcnJvciwgRmxhZ0luZm9CaXQsIEZsYWdJbmZvSGVhZGVyLCBGbGFnVmFsdWVUeXBlLAotICAgIEZJTEVfVkVSU0lPTiwKKyAgICBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTiwKIH07CiB1c2UgYW55aG93Ojphbnlob3c7CiAKQEAgLTI4LDExICsyOCwxMSBAQAogICAgIGZsYWdfaW5kZXg6IHUzMiwKICkgLT4gUmVzdWx0PHVzaXplLCBBY29uZmlnU3RvcmFnZUVycm9yPiB7CiAgICAgbGV0IGludGVycHJldGVkX2hlYWRlciA9IEZsYWdJbmZvSGVhZGVyOjpmcm9tX2J5dGVzKGJ1Zik/OwotICAgIGlmIGludGVycHJldGVkX2hlYWRlci52ZXJzaW9uID4gRklMRV9WRVJTSU9OIHsKKyAgICBpZiBpbnRlcnByZXRlZF9oZWFkZXIudmVyc2lvbiA+IE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OIHsKICAgICAgICAgcmV0dXJuIEVycihBY29uZmlnU3RvcmFnZUVycm9yOjpIaWdoZXJTdG9yYWdlRmlsZVZlcnNpb24oYW55aG93ISgKICAgICAgICAgICAgICJDYW5ub3Qgd3JpdGUgdG8gc3RvcmFnZSBmaWxlIHdpdGggYSBoaWdoZXIgdmVyc2lvbiBvZiB7fSB3aXRoIGxpYiB2ZXJzaW9uIHt9IiwKICAgICAgICAgICAgIGludGVycHJldGVkX2hlYWRlci52ZXJzaW9uLAotICAgICAgICAgICAgRklMRV9WRVJTSU9OCisgICAgICAgICAgICBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTgogICAgICAgICApKSk7CiAgICAgfQogCkBAIC05NCwxMyArOTQsMTMgQEAKICNbY2ZnKHRlc3QpXQogbW9kIHRlc3RzIHsKICAgICB1c2Ugc3VwZXI6Oio7Ci0gICAgdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdDsKKyAgICB1c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6Ont0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdCwgREVGQVVMVF9GSUxFX1ZFUlNJT059OwogICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGk6OmZsYWdfaW5mb19xdWVyeTo6ZmluZF9mbGFnX2F0dHJpYnV0ZTsKIAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biBoYXMgc2VydmVyIG92ZXJyaWRlIHVwZGF0ZQogICAgIGZuIHRlc3RfdXBkYXRlX2ZsYWdfaGFzX3NlcnZlcl9vdmVycmlkZSgpIHsKLSAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoKTsKKyAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgICAgICBsZXQgbXV0IGJ1ZiA9IGZsYWdfaW5mb19saXN0LmludG9fYnl0ZXMoKTsKICAgICAgICAgZm9yIGkgaW4gMC4uZmxhZ19pbmZvX2xpc3QuaGVhZGVyLm51bV9mbGFncyB7CiAgICAgICAgICAgICB1cGRhdGVfZmxhZ19oYXNfc2VydmVyX292ZXJyaWRlKCZtdXQgYnVmLCBGbGFnVmFsdWVUeXBlOjpCb29sZWFuLCBpLCB0cnVlKS51bndyYXAoKTsKQEAgLTExNSw3ICsxMTUsNyBAQAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biBoYXMgbG9jYWwgb3ZlcnJpZGUgdXBkYXRlCiAgICAgZm4gdGVzdF91cGRhdGVfZmxhZ19oYXNfbG9jYWxfb3ZlcnJpZGUoKSB7Ci0gICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KCk7CisgICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgbGV0IG11dCBidWYgPSBmbGFnX2luZm9fbGlzdC5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGZvciBpIGluIDAuLmZsYWdfaW5mb19saXN0LmhlYWRlci5udW1fZmxhZ3MgewogICAgICAgICAgICAgdXBkYXRlX2ZsYWdfaGFzX2xvY2FsX292ZXJyaWRlKCZtdXQgYnVmLCBGbGFnVmFsdWVUeXBlOjpCb29sZWFuLCBpLCB0cnVlKS51bndyYXAoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9zcmMvZmxhZ192YWx1ZV91cGRhdGUucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV93cml0ZV9hcGkvc3JjL2ZsYWdfdmFsdWVfdXBkYXRlLnJzCmluZGV4IGRkMTVjOTkuLjk3NzJkYjkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9zcmMvZmxhZ192YWx1ZV91cGRhdGUucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpL3NyYy9mbGFnX3ZhbHVlX3VwZGF0ZS5ycwpAQCAtMTYsNyArMTYsNyBAQAogCiAvLyEgZmxhZyB2YWx1ZSB1cGRhdGUgbW9kdWxlIGRlZmluZXMgdGhlIGZsYWcgdmFsdWUgZmlsZSB3cml0ZSB0byBtYXBwZWQgYnl0ZXMKIAotdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7QWNvbmZpZ1N0b3JhZ2VFcnJvciwgRmxhZ1ZhbHVlSGVhZGVyLCBGSUxFX1ZFUlNJT059OwordXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7QWNvbmZpZ1N0b3JhZ2VFcnJvciwgRmxhZ1ZhbHVlSGVhZGVyLCBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTn07CiB1c2UgYW55aG93Ojphbnlob3c7CiAKIC8vLyBTZXQgZmxhZyB2YWx1ZQpAQCAtMjYsMTEgKzI2LDExIEBACiAgICAgZmxhZ192YWx1ZTogYm9vbCwKICkgLT4gUmVzdWx0PHVzaXplLCBBY29uZmlnU3RvcmFnZUVycm9yPiB7CiAgICAgbGV0IGludGVycHJldGVkX2hlYWRlciA9IEZsYWdWYWx1ZUhlYWRlcjo6ZnJvbV9ieXRlcyhidWYpPzsKLSAgICBpZiBpbnRlcnByZXRlZF9oZWFkZXIudmVyc2lvbiA+IEZJTEVfVkVSU0lPTiB7CisgICAgaWYgaW50ZXJwcmV0ZWRfaGVhZGVyLnZlcnNpb24gPiBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTiB7CiAgICAgICAgIHJldHVybiBFcnIoQWNvbmZpZ1N0b3JhZ2VFcnJvcjo6SGlnaGVyU3RvcmFnZUZpbGVWZXJzaW9uKGFueWhvdyEoCiAgICAgICAgICAgICAiQ2Fubm90IHdyaXRlIHRvIHN0b3JhZ2UgZmlsZSB3aXRoIGEgaGlnaGVyIHZlcnNpb24gb2Yge30gd2l0aCBsaWIgdmVyc2lvbiB7fSIsCiAgICAgICAgICAgICBpbnRlcnByZXRlZF9oZWFkZXIudmVyc2lvbiwKLSAgICAgICAgICAgIEZJTEVfVkVSU0lPTgorICAgICAgICAgICAgTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04KICAgICAgICAgKSkpOwogICAgIH0KIApAQCAtNDksMTIgKzQ5LDEyIEBACiAjW2NmZyh0ZXN0KV0KIG1vZCB0ZXN0cyB7CiAgICAgdXNlIHN1cGVyOjoqOwotICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0OworICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6e3Rlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCwgREVGQVVMVF9GSUxFX1ZFUlNJT059OwogCiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIGZsYWcgdmFsdWUgdXBkYXRlCiAgICAgZm4gdGVzdF9ib29sZWFuX2ZsYWdfdmFsdWVfdXBkYXRlKCkgewotICAgICAgICBsZXQgZmxhZ192YWx1ZV9saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KCk7CisgICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgICAgICBsZXQgdmFsdWVfb2Zmc2V0ID0gZmxhZ192YWx1ZV9saXN0LmhlYWRlci5ib29sZWFuX3ZhbHVlX29mZnNldDsKICAgICAgICAgbGV0IG11dCBjb250ZW50ID0gZmxhZ192YWx1ZV9saXN0LmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IHRydWVfYnl0ZSA9IHU4Ojpmcm9tKHRydWUpLnRvX2xlX2J5dGVzKClbMF07CkBAIC03Miw3ICs3Miw3IEBACiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHVwZGF0ZSBiZXlvbmQgdGhlIGVuZCBvZiBib29sZWFuIHNlY3Rpb24KICAgICBmbiB0ZXN0X2Jvb2xlYW5fb3V0X29mX3JhbmdlKCkgewotICAgICAgICBsZXQgbXV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpLmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IG11dCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IGVycm9yID0gdXBkYXRlX2Jvb2xlYW5fZmxhZ192YWx1ZSgmbXV0IGZsYWdfdmFsdWVfbGlzdFsuLl0sIDgsIHRydWUpLnVud3JhcF9lcnIoKTsKICAgICAgICAgYXNzZXJ0X2VxISgKICAgICAgICAgICAgIGZvcm1hdCEoIns6P30iLCBlcnJvciksCkBAIC04MywxNiArODMsMTYgQEAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gcXVlcnkgZXJyb3Igd2hlbiBmaWxlIGhhcyBhIGhpZ2hlciB2ZXJzaW9uCiAgICAgZm4gdGVzdF9oaWdoZXJfdmVyc2lvbl9zdG9yYWdlX2ZpbGUoKSB7Ci0gICAgICAgIGxldCBtdXQgdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpOwotICAgICAgICB2YWx1ZV9saXN0LmhlYWRlci52ZXJzaW9uID0gRklMRV9WRVJTSU9OICsgMTsKKyAgICAgICAgbGV0IG11dCB2YWx1ZV9saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKTsKKyAgICAgICAgdmFsdWVfbGlzdC5oZWFkZXIudmVyc2lvbiA9IE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OICsgMTsKICAgICAgICAgbGV0IG11dCBmbGFnX3ZhbHVlID0gdmFsdWVfbGlzdC5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGxldCBlcnJvciA9IHVwZGF0ZV9ib29sZWFuX2ZsYWdfdmFsdWUoJm11dCBmbGFnX3ZhbHVlWy4uXSwgNCwgdHJ1ZSkudW53cmFwX2VycigpOwogICAgICAgICBhc3NlcnRfZXEhKAogICAgICAgICAgICAgZm9ybWF0ISgiezo/fSIsIGVycm9yKSwKICAgICAgICAgICAgIGZvcm1hdCEoCiAgICAgICAgICAgICAgICAgIkhpZ2hlclN0b3JhZ2VGaWxlVmVyc2lvbihDYW5ub3Qgd3JpdGUgdG8gc3RvcmFnZSBmaWxlIHdpdGggYSBoaWdoZXIgdmVyc2lvbiBvZiB7fSB3aXRoIGxpYiB2ZXJzaW9uIHt9KSIsCi0gICAgICAgICAgICAgICAgRklMRV9WRVJTSU9OICsgMSwKLSAgICAgICAgICAgICAgICBGSUxFX1ZFUlNJT04KKyAgICAgICAgICAgICAgICBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTiArIDEsCisgICAgICAgICAgICAgICAgTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04KICAgICAgICAgICAgICkKICAgICAgICAgKTsKICAgICB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV93cml0ZV9hcGkvc3JjL2xpYi5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9zcmMvbGliLnJzCmluZGV4IDAzOTZhNjMuLjA5YmI0MWYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9zcmMvbGliLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9zcmMvbGliLnJzCkBAIC0yNCwxNSArMjQsMTAgQEAKICNbY2ZnKHRlc3QpXQogbW9kIHRlc3RfdXRpbHM7CiAKLXVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6ewotICAgIEFjb25maWdTdG9yYWdlRXJyb3IsIEZsYWdJbmZvSGVhZGVyLCBGbGFnSW5mb0xpc3QsIEZsYWdJbmZvTm9kZSwgRmxhZ1RhYmxlLCBGbGFnVmFsdWVUeXBlLAotICAgIFBhY2thZ2VUYWJsZSwgU3RvcmFnZUZpbGVUeXBlLCBTdG9yZWRGbGFnVHlwZSwgRklMRV9WRVJTSU9OLAotfTsKK3VzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6e0Fjb25maWdTdG9yYWdlRXJyb3IsIEZsYWdWYWx1ZVR5cGV9OwogCiB1c2UgYW55aG93Ojphbnlob3c7CiB1c2UgbWVtbWFwMjo6TW1hcE11dDsKLXVzZSBzdGQ6OmZzOjpGaWxlOwotdXNlIHN0ZDo6aW86OntSZWFkLCBXcml0ZX07CiAKIC8vLyBHZXQgcmVhZCB3cml0ZSBtYXBwZWQgc3RvcmFnZSBmaWxlcy4KIC8vLwpAQCAtMTA0LDg2ICs5OSw2IEBACiAgICAgfSkKIH0KIAotLy8vIFJlYWQgaW4gc3RvcmFnZSBmaWxlIGFzIGJ5dGVzCi1mbiByZWFkX2ZpbGVfdG9fYnl0ZXMoZmlsZV9wYXRoOiAmc3RyKSAtPiBSZXN1bHQ8VmVjPHU4PiwgQWNvbmZpZ1N0b3JhZ2VFcnJvcj4gewotICAgIGxldCBtdXQgZmlsZSA9IEZpbGU6Om9wZW4oZmlsZV9wYXRoKS5tYXBfZXJyKHxlcnJtc2d8IHsKLSAgICAgICAgQWNvbmZpZ1N0b3JhZ2VFcnJvcjo6RmlsZVJlYWRGYWlsKGFueWhvdyEoIkZhaWxlZCB0byBvcGVuIGZpbGUge306IHt9IiwgZmlsZV9wYXRoLCBlcnJtc2cpKQotICAgIH0pPzsKLSAgICBsZXQgbXV0IGJ1ZmZlciA9IFZlYzo6bmV3KCk7Ci0gICAgZmlsZS5yZWFkX3RvX2VuZCgmbXV0IGJ1ZmZlcikubWFwX2Vycih8ZXJybXNnfCB7Ci0gICAgICAgIEFjb25maWdTdG9yYWdlRXJyb3I6OkZpbGVSZWFkRmFpbChhbnlob3chKAotICAgICAgICAgICAgIkZhaWxlZCB0byByZWFkIGJ5dGVzIGZyb20gZmlsZSB7fToge30iLAotICAgICAgICAgICAgZmlsZV9wYXRoLAotICAgICAgICAgICAgZXJybXNnCi0gICAgICAgICkpCi0gICAgfSk/OwotICAgIE9rKGJ1ZmZlcikKLX0KLQotLy8vIENyZWF0ZSBmbGFnIGluZm8gZmlsZSBnaXZlbiBwYWNrYWdlIG1hcCBmaWxlIGFuZCBmbGFnIG1hcCBmaWxlCi0vLy8gXGlucHV0IHBhY2thZ2VfbWFwOiBwYWNrYWdlIG1hcCBmaWxlCi0vLy8gXGlucHV0IGZsYWdfbWFwOiBmbGFnIG1hcCBmaWxlCi0vLy8gXG91dHB1dCBmbGFnX2luZm9fb3V0OiBjcmVhdGVkIGZsYWcgaW5mbyBmaWxlCi1wdWIgZm4gY3JlYXRlX2ZsYWdfaW5mbygKLSAgICBwYWNrYWdlX21hcDogJnN0ciwKLSAgICBmbGFnX21hcDogJnN0ciwKLSAgICBmbGFnX2luZm9fb3V0OiAmc3RyLAotKSAtPiBSZXN1bHQ8KCksIEFjb25maWdTdG9yYWdlRXJyb3I+IHsKLSAgICBsZXQgcGFja2FnZV90YWJsZSA9IFBhY2thZ2VUYWJsZTo6ZnJvbV9ieXRlcygmcmVhZF9maWxlX3RvX2J5dGVzKHBhY2thZ2VfbWFwKT8pPzsKLSAgICBsZXQgZmxhZ190YWJsZSA9IEZsYWdUYWJsZTo6ZnJvbV9ieXRlcygmcmVhZF9maWxlX3RvX2J5dGVzKGZsYWdfbWFwKT8pPzsKLQotICAgIGlmIHBhY2thZ2VfdGFibGUuaGVhZGVyLmNvbnRhaW5lciAhPSBmbGFnX3RhYmxlLmhlYWRlci5jb250YWluZXIgewotICAgICAgICByZXR1cm4gRXJyKEFjb25maWdTdG9yYWdlRXJyb3I6OkZpbGVDcmVhdGlvbkZhaWwoYW55aG93ISgKLSAgICAgICAgICAgICJjb250YWluZXIgZm9yIHBhY2thZ2UgbWFwIHt9IGFuZCBmbGFnIG1hcCB7fSBkb2VzIG5vdCBtYXRjaCIsCi0gICAgICAgICAgICBwYWNrYWdlX3RhYmxlLmhlYWRlci5jb250YWluZXIsCi0gICAgICAgICAgICBmbGFnX3RhYmxlLmhlYWRlci5jb250YWluZXIsCi0gICAgICAgICkpKTsKLSAgICB9Ci0KLSAgICBsZXQgbXV0IHBhY2thZ2Vfc3RhcnRfaW5kZXggPSB2ZWMhWzA7IHBhY2thZ2VfdGFibGUuaGVhZGVyLm51bV9wYWNrYWdlcyBhcyB1c2l6ZV07Ci0gICAgZm9yIG5vZGUgaW4gcGFja2FnZV90YWJsZS5ub2Rlcy5pdGVyKCkgewotICAgICAgICBwYWNrYWdlX3N0YXJ0X2luZGV4W25vZGUucGFja2FnZV9pZCBhcyB1c2l6ZV0gPSBub2RlLmJvb2xlYW5fc3RhcnRfaW5kZXg7Ci0gICAgfQotCi0gICAgbGV0IG11dCBpc19mbGFnX3J3ID0gdmVjIVtmYWxzZTsgZmxhZ190YWJsZS5oZWFkZXIubnVtX2ZsYWdzIGFzIHVzaXplXTsKLSAgICBmb3Igbm9kZSBpbiBmbGFnX3RhYmxlLm5vZGVzLml0ZXIoKSB7Ci0gICAgICAgIGxldCBmbGFnX2luZGV4ID0gcGFja2FnZV9zdGFydF9pbmRleFtub2RlLnBhY2thZ2VfaWQgYXMgdXNpemVdICsgbm9kZS5mbGFnX2luZGV4IGFzIHUzMjsKLSAgICAgICAgaXNfZmxhZ19yd1tmbGFnX2luZGV4IGFzIHVzaXplXSA9IG5vZGUuZmxhZ190eXBlID09IFN0b3JlZEZsYWdUeXBlOjpSZWFkV3JpdGVCb29sZWFuOwotICAgIH0KLQotICAgIGxldCBtdXQgbGlzdCA9IEZsYWdJbmZvTGlzdCB7Ci0gICAgICAgIGhlYWRlcjogRmxhZ0luZm9IZWFkZXIgewotICAgICAgICAgICAgdmVyc2lvbjogRklMRV9WRVJTSU9OLAotICAgICAgICAgICAgY29udGFpbmVyOiBmbGFnX3RhYmxlLmhlYWRlci5jb250YWluZXIsCi0gICAgICAgICAgICBmaWxlX3R5cGU6IFN0b3JhZ2VGaWxlVHlwZTo6RmxhZ0luZm8gYXMgdTgsCi0gICAgICAgICAgICBmaWxlX3NpemU6IDAsCi0gICAgICAgICAgICBudW1fZmxhZ3M6IGZsYWdfdGFibGUuaGVhZGVyLm51bV9mbGFncywKLSAgICAgICAgICAgIGJvb2xlYW5fZmxhZ19vZmZzZXQ6IDAsCi0gICAgICAgIH0sCi0gICAgICAgIG5vZGVzOiBpc19mbGFnX3J3Lml0ZXIoKS5tYXAofCZyd3wgRmxhZ0luZm9Ob2RlOjpjcmVhdGUocncpKS5jb2xsZWN0KCksCi0gICAgfTsKLQotICAgIGxpc3QuaGVhZGVyLmJvb2xlYW5fZmxhZ19vZmZzZXQgPSBsaXN0LmhlYWRlci5pbnRvX2J5dGVzKCkubGVuKCkgYXMgdTMyOwotICAgIGxpc3QuaGVhZGVyLmZpbGVfc2l6ZSA9IGxpc3QuaW50b19ieXRlcygpLmxlbigpIGFzIHUzMjsKLQotICAgIGxldCBtdXQgZmlsZSA9IEZpbGU6OmNyZWF0ZShmbGFnX2luZm9fb3V0KS5tYXBfZXJyKHxlcnJtc2d8IHsKLSAgICAgICAgQWNvbmZpZ1N0b3JhZ2VFcnJvcjo6RmlsZUNyZWF0aW9uRmFpbChhbnlob3chKAotICAgICAgICAgICAgImZhaWwgdG8gY3JlYXRlIGZpbGUge306IHt9IiwKLSAgICAgICAgICAgIGZsYWdfaW5mb19vdXQsCi0gICAgICAgICAgICBlcnJtc2cKLSAgICAgICAgKSkKLSAgICB9KT87Ci0gICAgZmlsZS53cml0ZV9hbGwoJmxpc3QuaW50b19ieXRlcygpKS5tYXBfZXJyKHxlcnJtc2d8IHsKLSAgICAgICAgQWNvbmZpZ1N0b3JhZ2VFcnJvcjo6RmlsZUNyZWF0aW9uRmFpbChhbnlob3chKAotICAgICAgICAgICAgImZhaWwgdG8gd3JpdGUgdG8gZmlsZSB7fToge30iLAotICAgICAgICAgICAgZmxhZ19pbmZvX291dCwKLSAgICAgICAgICAgIGVycm1zZwotICAgICAgICApKQotICAgIH0pPzsKLQotICAgIE9rKCgpKQotfQotCiAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLy8KIC8vIENDIElOVEVSTE9QCiAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLy8KQEAgLTIxMiwxMiArMTI3LDYgQEAKICAgICAgICAgcHViIGVycm9yX21lc3NhZ2U6IFN0cmluZywKICAgICB9CiAKLSAgICAvLyBGbGFnIGluZm8gZmlsZSBjcmVhdGlvbiByZXR1cm4gZm9yIGNjIGludGVybG9wCi0gICAgcHViIHN0cnVjdCBGbGFnSW5mb0NyZWF0aW9uQ1hYIHsKLSAgICAgICAgcHViIHN1Y2Nlc3M6IGJvb2wsCi0gICAgICAgIHB1YiBlcnJvcl9tZXNzYWdlOiBTdHJpbmcsCi0gICAgfQotCiAgICAgLy8gUnVzdCBleHBvcnQgdG8gYysrCiAgICAgZXh0ZXJuICJSdXN0IiB7CiAgICAgICAgIHB1YiBmbiB1cGRhdGVfYm9vbGVhbl9mbGFnX3ZhbHVlX2N4eCgKQEAgLTIzOSwxMiArMTQ4LDYgQEAKICAgICAgICAgICAgIG9mZnNldDogdTMyLAogICAgICAgICAgICAgdmFsdWU6IGJvb2wsCiAgICAgICAgICkgLT4gRmxhZ0hhc0xvY2FsT3ZlcnJpZGVVcGRhdGVDWFg7Ci0KLSAgICAgICAgcHViIGZuIGNyZWF0ZV9mbGFnX2luZm9fY3h4KAotICAgICAgICAgICAgcGFja2FnZV9tYXA6ICZzdHIsCi0gICAgICAgICAgICBmbGFnX21hcDogJnN0ciwKLSAgICAgICAgICAgIGZsYWdfaW5mb19vdXQ6ICZzdHIsCi0gICAgICAgICkgLT4gRmxhZ0luZm9DcmVhdGlvbkNYWDsKICAgICB9CiB9CiAKQEAgLTMyOSwzNCArMjMyLDE1IEBACiAgICAgfQogfQogCi0vLy8gQ3JlYXRlIGZsYWcgaW5mbyBmaWxlIGNjIGludGVybG9wCi1wdWIoY3JhdGUpIGZuIGNyZWF0ZV9mbGFnX2luZm9fY3h4KAotICAgIHBhY2thZ2VfbWFwOiAmc3RyLAotICAgIGZsYWdfbWFwOiAmc3RyLAotICAgIGZsYWdfaW5mb19vdXQ6ICZzdHIsCi0pIC0+IGZmaTo6RmxhZ0luZm9DcmVhdGlvbkNYWCB7Ci0gICAgbWF0Y2ggY3JlYXRlX2ZsYWdfaW5mbyhwYWNrYWdlX21hcCwgZmxhZ19tYXAsIGZsYWdfaW5mb19vdXQpIHsKLSAgICAgICAgT2soKCkpID0+IGZmaTo6RmxhZ0luZm9DcmVhdGlvbkNYWCB7IHN1Y2Nlc3M6IHRydWUsIGVycm9yX21lc3NhZ2U6IFN0cmluZzo6ZnJvbSgiIikgfSwKLSAgICAgICAgRXJyKGVycm1zZykgPT4gewotICAgICAgICAgICAgZmZpOjpGbGFnSW5mb0NyZWF0aW9uQ1hYIHsgc3VjY2VzczogZmFsc2UsIGVycm9yX21lc3NhZ2U6IGZvcm1hdCEoIns6P30iLCBlcnJtc2cpIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQogI1tjZmcodGVzdCldCiBtb2QgdGVzdHMgewogICAgIHVzZSBzdXBlcjo6KjsKICAgICB1c2UgY3JhdGU6OnRlc3RfdXRpbHM6OmNvcHlfdG9fdGVtcF9maWxlOwotICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6dGVzdF91dGlsczo6ewotICAgICAgICBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdCwgY3JlYXRlX3Rlc3RfZmxhZ190YWJsZSwgY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZSwKLSAgICAgICAgd3JpdGVfYnl0ZXNfdG9fdGVtcF9maWxlLAotICAgIH07CiAgICAgdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjpGbGFnSW5mb0JpdDsKICAgICB1c2UgYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpOjpmbGFnX2luZm9fcXVlcnk6OmZpbmRfZmxhZ19hdHRyaWJ1dGU7CiAgICAgdXNlIGFjb25maWdfc3RvcmFnZV9yZWFkX2FwaTo6ZmxhZ192YWx1ZV9xdWVyeTo6ZmluZF9ib29sZWFuX2ZsYWdfdmFsdWU7CiAgICAgdXNlIHN0ZDo6ZnM6OkZpbGU7CiAgICAgdXNlIHN0ZDo6aW86OlJlYWQ7Ci0gICAgdXNlIHRlbXBmaWxlOjpOYW1lZFRlbXBGaWxlOwogCiAgICAgZm4gZ2V0X2Jvb2xlYW5fZmxhZ192YWx1ZV9hdF9vZmZzZXQoZmlsZTogJnN0ciwgb2Zmc2V0OiB1MzIpIC0+IGJvb2wgewogICAgICAgICBsZXQgbXV0IGYgPSBGaWxlOjpvcGVuKCZmaWxlKS51bndyYXAoKTsKQEAgLTQzOSwzMSArMzIzLDQgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLQotICAgIGZuIGNyZWF0ZV9lbXB0eV90ZW1wX2ZpbGUoKSAtPiBSZXN1bHQ8TmFtZWRUZW1wRmlsZSwgQWNvbmZpZ1N0b3JhZ2VFcnJvcj4gewotICAgICAgICBsZXQgZmlsZSA9IE5hbWVkVGVtcEZpbGU6Om5ldygpLm1hcF9lcnIofF98IHsKLSAgICAgICAgICAgIEFjb25maWdTdG9yYWdlRXJyb3I6OkZpbGVDcmVhdGlvbkZhaWwoYW55aG93ISgiRmFpbGVkIHRvIGNyZWF0ZSB0ZW1wIGZpbGUiKSkKLSAgICAgICAgfSk/OwotICAgICAgICBPayhmaWxlKQotICAgIH0KLQotICAgICNbdGVzdF0KLSAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0aGUgZmxhZyBpbmZvIGNyZWF0aW9uCi0gICAgZm4gdGVzdF9jcmVhdGVfZmxhZ19pbmZvKCkgewotICAgICAgICBsZXQgcGFja2FnZV90YWJsZSA9Ci0gICAgICAgICAgICB3cml0ZV9ieXRlc190b190ZW1wX2ZpbGUoJmNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoKS5pbnRvX2J5dGVzKCkpLnVud3JhcCgpOwotICAgICAgICBsZXQgZmxhZ190YWJsZSA9IHdyaXRlX2J5dGVzX3RvX3RlbXBfZmlsZSgmY3JlYXRlX3Rlc3RfZmxhZ190YWJsZSgpLmludG9fYnl0ZXMoKSkudW53cmFwKCk7Ci0gICAgICAgIGxldCBmbGFnX2luZm8gPSBjcmVhdGVfZW1wdHlfdGVtcF9maWxlKCkudW53cmFwKCk7Ci0KLSAgICAgICAgbGV0IHBhY2thZ2VfdGFibGVfcGF0aCA9IHBhY2thZ2VfdGFibGUucGF0aCgpLmRpc3BsYXkoKS50b19zdHJpbmcoKTsKLSAgICAgICAgbGV0IGZsYWdfdGFibGVfcGF0aCA9IGZsYWdfdGFibGUucGF0aCgpLmRpc3BsYXkoKS50b19zdHJpbmcoKTsKLSAgICAgICAgbGV0IGZsYWdfaW5mb19wYXRoID0gZmxhZ19pbmZvLnBhdGgoKS5kaXNwbGF5KCkudG9fc3RyaW5nKCk7Ci0KLSAgICAgICAgYXNzZXJ0IShjcmVhdGVfZmxhZ19pbmZvKCZwYWNrYWdlX3RhYmxlX3BhdGgsICZmbGFnX3RhYmxlX3BhdGgsICZmbGFnX2luZm9fcGF0aCkuaXNfb2soKSk7Ci0KLSAgICAgICAgbGV0IGZsYWdfaW5mbyA9Ci0gICAgICAgICAgICBGbGFnSW5mb0xpc3Q6OmZyb21fYnl0ZXMoJnJlYWRfZmlsZV90b19ieXRlcygmZmxhZ19pbmZvX3BhdGgpLnVud3JhcCgpKS51bndyYXAoKTsKLSAgICAgICAgbGV0IGV4cGVjdGVkX2ZsYWdfaW5mbyA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KCk7Ci0gICAgICAgIGFzc2VydF9lcSEoZmxhZ19pbmZvLCBleHBlY3RlZF9mbGFnX2luZm8pOwotICAgIH0KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWZsYWdzL0FuZHJvaWQuYnAgYi90b29scy9hY29uZmlnL2FmbGFncy9BbmRyb2lkLmJwCmluZGV4IDIwNDBjYzYuLmE3YWNlZWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWZsYWdzL0FuZHJvaWQuYnAKKysrIGIvdG9vbHMvYWNvbmZpZy9hZmxhZ3MvQW5kcm9pZC5icApAQCAtMTIsNyArMTIsNyBAQAogICAgICAgICAibGliYWNvbmZpZ19kZXZpY2VfcGF0aHMiLAogICAgICAgICAibGliYWNvbmZpZ19mbGFncyIsCiAgICAgICAgICJsaWJhY29uZmlnX3Byb3RvcyIsCi0gICAgICAgICJsaWJhY29uZmlnZF9wcm90b3MiLAorICAgICAgICAibGliYWNvbmZpZ2RfcHJvdG9zX3J1c3QiLAogICAgICAgICAibGliYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpIiwKICAgICAgICAgImxpYmFjb25maWdfc3RvcmFnZV9maWxlIiwKICAgICAgICAgImxpYmFueWhvdyIsCkBAIC0yMCw2ICsyMCwxMCBAQAogICAgICAgICAibGlibml4IiwKICAgICAgICAgImxpYnByb3RvYnVmIiwKICAgICAgICAgImxpYnJlZ2V4IiwKKyAgICAgICAgLy8gVE9ETzogYi8zNzEwMjExNzQgcmVtb3ZlIHRoaXMgZmFrZSBkZXBlbmRlbmN5IG9uY2Ugd2UgZmluZCBhIHByb3BlciBzdHJhdGVneSB0bworICAgICAgICAvLyBkZWFsIHdpdGggdGVzdCBhY29uZmlnIGxpYnMgYXJlIG5vdCBwcmVzZW50IGluIHN0b3JhZ2UgYmVjYXVzZSB0aGV5IGFyZSBuZXZlciB1c2VkCisgICAgICAgIC8vIGJ5IHRoZSBhY3R1YWwgYnVpbGQKKyAgICAgICAgImxpYmFjb25maWdfdGVzdF9ydXN0X2xpYnJhcnkiLAogICAgIF0sCiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWZsYWdzL0NhcmdvLnRvbWwgYi90b29scy9hY29uZmlnL2FmbGFncy9DYXJnby50b21sCmluZGV4IDdlZmNlNmQuLmQzMWUyMzIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWZsYWdzL0NhcmdvLnRvbWwKKysrIGIvdG9vbHMvYWNvbmZpZy9hZmxhZ3MvQ2FyZ28udG9tbApAQCAtOSwxMCArOSwxMCBAQAogcHJvdG9idWYgPSAiMy4yLjAiCiByZWdleCA9ICIxLjEwLjMiCiBhY29uZmlnX3Byb3RvcyA9IHsgcGF0aCA9ICIuLi9hY29uZmlnX3Byb3RvcyIgfQotYWNvbmZpZ2RfcHJvdG9zID0geyB2ZXJzaW9uID0gIjAuMS4wIiwgcGF0aCA9ICIuLi8uLi8uLi8uLi8uLi9zeXN0ZW0vc2VydmVyX2NvbmZpZ3VyYWJsZV9mbGFncy9hY29uZmlnZCJ9CithY29uZmlnZF9wcm90b3MgPSB7IHZlcnNpb24gPSAiMC4xLjAiLCBwYXRoID0gIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL21vZHVsZXMvQ29uZmlnSW5mcmFzdHJ1Y3R1cmUvYWNvbmZpZ2QvcHJvdG8ifQogbml4ID0geyB2ZXJzaW9uID0gIjAuMjguMCIsIGZlYXR1cmVzID0gWyJ1c2VyIl0gfQogYWNvbmZpZ19zdG9yYWdlX2ZpbGUgPSB7IHZlcnNpb24gPSAiMC4xLjAiLCBwYXRoID0gIi4uL2Fjb25maWdfc3RvcmFnZV9maWxlIiB9CiBhY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkgPSB7IHZlcnNpb24gPSAiMC4xLjAiLCBwYXRoID0gIi4uL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaSIgfQogY2xhcCA9IHt2ZXJzaW9uID0gIjQuNS4yIiB9CiBhY29uZmlnX2RldmljZV9wYXRocyA9IHsgdmVyc2lvbiA9ICIwLjEuMCIsIHBhdGggPSAiLi4vYWNvbmZpZ19kZXZpY2VfcGF0aHMiIH0KLWFjb25maWdfZmxhZ3MgPSB7IHZlcnNpb24gPSAiMC4xLjAiLCBwYXRoID0gIi4uL2Fjb25maWdfZmxhZ3MiIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCithY29uZmlnX2ZsYWdzID0geyB2ZXJzaW9uID0gIjAuMS4wIiwgcGF0aCA9ICIuLi9hY29uZmlnX2ZsYWdzIiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2FmbGFncy9zcmMvYWNvbmZpZ19zdG9yYWdlX3NvdXJjZS5ycyBiL3Rvb2xzL2Fjb25maWcvYWZsYWdzL3NyYy9hY29uZmlnX3N0b3JhZ2Vfc291cmNlLnJzCmluZGV4IDY4ZWRmN2QuLmFlZjdkN2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWZsYWdzL3NyYy9hY29uZmlnX3N0b3JhZ2Vfc291cmNlLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWZsYWdzL3NyYy9hY29uZmlnX3N0b3JhZ2Vfc291cmNlLnJzCkBAIC05Myw3ICs5Myw4IEBACiAgICAgICAgIHNwZWNpYWxfZmllbGRzOiBTcGVjaWFsRmllbGRzOjpuZXcoKSwKICAgICB9OwogCi0gICAgbGV0IG11dCBzb2NrZXQgPSBVbml4U3RyZWFtOjpjb25uZWN0KCIvZGV2L3NvY2tldC9hY29uZmlnZCIpPzsKKyAgICBsZXQgc29ja2V0X25hbWUgPSAiL2Rldi9zb2NrZXQvYWNvbmZpZ2Rfc3lzdGVtIjsKKyAgICBsZXQgbXV0IHNvY2tldCA9IFVuaXhTdHJlYW06OmNvbm5lY3Qoc29ja2V0X25hbWUpPzsKIAogICAgIGxldCBtZXNzYWdlX2J1ZmZlciA9IG1lc3NhZ2VzLndyaXRlX3RvX2J5dGVzKCk/OwogICAgIGxldCBtdXQgbWVzc2FnZV9sZW5ndGhfYnVmZmVyOiBbdTg7IDRdID0gWzA7IDRdOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hZmxhZ3Mvc3JjL2xvYWRfcHJvdG9zLnJzIGIvdG9vbHMvYWNvbmZpZy9hZmxhZ3Mvc3JjL2xvYWRfcHJvdG9zLnJzCmluZGV4IDkwZDg1OTkuLmM1YWM4ZmYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWZsYWdzL3NyYy9sb2FkX3Byb3Rvcy5ycworKysgYi90b29scy9hY29uZmlnL2FmbGFncy9zcmMvbG9hZF9wcm90b3MucnMKQEAgLTUxLDcgKzUxLDEwIEBACiAKICAgICBsZXQgcGF0aHMgPSBhY29uZmlnX2RldmljZV9wYXRoczo6cGFyc2VkX2ZsYWdzX3Byb3RvX3BhdGhzKCk/OwogICAgIGZvciBwYXRoIGluIHBhdGhzIHsKLSAgICAgICAgbGV0IGJ5dGVzID0gZnM6OnJlYWQocGF0aC5jbG9uZSgpKT87CisgICAgICAgIGxldCBPayhieXRlcykgPSBmczo6cmVhZCgmcGF0aCkgZWxzZSB7CisgICAgICAgICAgICBlcHJpbnRsbiEoIndhcm5pbmc6IGZhaWxlZCB0byByZWFkIHs6P30iLCBwYXRoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9OwogICAgICAgICBsZXQgcGFyc2VkX2ZsYWdzOiBQcm90b1BhcnNlZEZsYWdzID0gcHJvdG9idWY6Ok1lc3NhZ2U6OnBhcnNlX2Zyb21fYnl0ZXMoJmJ5dGVzKT87CiAgICAgICAgIGZvciBmbGFnIGluIHBhcnNlZF9mbGFncy5wYXJzZWRfZmxhZyB7CiAgICAgICAgICAgICAvLyBUT0RPKGIvMzM0OTU0NzQ4KTogZW5mb3JjZSBvbmUtY29udGFpbmVyLXBlci1mbGFnIGludmFyaWFudC4KQEAgLTYwLDMgKzYzLDEwIEBACiAgICAgfQogICAgIE9rKHJlc3VsdCkKIH0KKworcHViKGNyYXRlKSBmbiBsaXN0X2NvbnRhaW5lcnMoKSAtPiBSZXN1bHQ8VmVjPFN0cmluZz4+IHsKKyAgICBPayhhY29uZmlnX2RldmljZV9wYXRoczo6cGFyc2VkX2ZsYWdzX3Byb3RvX3BhdGhzKCk/CisgICAgICAgIC5pbnRvX2l0ZXIoKQorICAgICAgICAubWFwKHxwfCBpbmZlcl9jb250YWluZXIoJnApKQorICAgICAgICAuY29sbGVjdCgpKQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hZmxhZ3Mvc3JjL21haW4ucnMgYi90b29scy9hY29uZmlnL2FmbGFncy9zcmMvbWFpbi5ycwppbmRleCAwN2I3MjQzLi44MTczYmMyIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2FmbGFncy9zcmMvbWFpbi5ycworKysgYi90b29scy9hY29uZmlnL2FmbGFncy9zcmMvbWFpbi5ycwpAQCAtMjUzLDYgKzI1MywxNCBAQAogICAgICAgICBGbGFnU291cmNlVHlwZTo6RGV2aWNlQ29uZmlnID0+IERldmljZUNvbmZpZ1NvdXJjZTo6bGlzdF9mbGFncygpPywKICAgICAgICAgRmxhZ1NvdXJjZVR5cGU6OkFjb25maWdTdG9yYWdlID0+IEFjb25maWdTdG9yYWdlU291cmNlOjpsaXN0X2ZsYWdzKCk/LAogICAgIH07CisKKyAgICBpZiBsZXQgU29tZShyZWYgYykgPSBjb250YWluZXIgeworICAgICAgICBlbnN1cmUhKAorICAgICAgICAgICAgbG9hZF9wcm90b3M6Omxpc3RfY29udGFpbmVycygpPy5jb250YWlucyhjKSwKKyAgICAgICAgICAgIGZvcm1hdCEoImNvbnRhaW5lciAne30nIG5vdCBmb3VuZCIsICZjKQorICAgICAgICApOworICAgIH0KKwogICAgIGxldCBmbGFncyA9IChGaWx0ZXIgeyBjb250YWluZXIgfSkuYXBwbHkoJmZsYWdzX3VuZmlsdGVyZWQpOwogICAgIGxldCBwYWRkaW5nX2luZm8gPSBQYWRkaW5nSW5mbyB7CiAgICAgICAgIGxvbmdlc3RfZmxhZ19jb2w6IGZsYWdzLml0ZXIoKS5tYXAofGZ8IGYucXVhbGlmaWVkX25hbWUoKS5sZW4oKSkubWF4KCkudW53cmFwX29yKDApLApAQCAtMjk4LDcgKzMwNiw3IEBACiAgICAgICAgIENvbW1hbmQ6Okxpc3QgeyBjb250YWluZXIgfSA9PiB7CiAgICAgICAgICAgICBpZiBhY29uZmlnX2ZsYWdzOjphdXRvX2dlbmVyYXRlZDo6ZW5hYmxlX29ubHlfbmV3X3N0b3JhZ2UoKSB7CiAgICAgICAgICAgICAgICAgbGlzdChGbGFnU291cmNlVHlwZTo6QWNvbmZpZ1N0b3JhZ2UsIGNvbnRhaW5lcikKLSAgICAgICAgICAgICAgICAgICAgLm1hcF9lcnIofGVycnwgYW55aG93ISgic3RvcmFnZSBtYXkgbm90IGJlIGVuYWJsZWQ6IHtlcnJ9IikpCisgICAgICAgICAgICAgICAgICAgIC5tYXBfZXJyKHxlcnJ8IGFueWhvdyEoImNvdWxkIG5vdCBsaXN0IGZsYWdzOiB7ZXJyfSIpKQogICAgICAgICAgICAgICAgICAgICAubWFwKFNvbWUpCiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGxpc3QoRmxhZ1NvdXJjZVR5cGU6OkRldmljZUNvbmZpZywgY29udGFpbmVyKS5tYXAoU29tZSkKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL0FuZHJvaWQuYnAgYi90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9BbmRyb2lkLmJwCmluZGV4IDc3MDQ3NDIuLjFjNWI3YzUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL0FuZHJvaWQuYnAKKysrIGIvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvQW5kcm9pZC5icApAQCAtMTUsOSArMTUsNyBAQAogamF2YV9saWJyYXJ5IHsKICAgICBuYW1lOiAiZmFrZV9kZXZpY2VfY29uZmlnIiwKICAgICBzcmNzOiBbCi0gICAgICAgICJzcmMvYW5kcm9pZC91dGlsL0xvZy5qYXZhIiwKLSAgICAgICAgInNyYy9hbmRyb2lkL3Byb3ZpZGVyL0RldmljZUNvbmZpZy5qYXZhIiwKLSAgICAgICAgInNyYy9hbmRyb2lkL29zL1N0cmljdE1vZGUuamF2YSIsCisgICAgICAgICJzcmMvKiovKi5qYXZhIiwKICAgICBdLAogICAgIHNka192ZXJzaW9uOiAibm9uZSIsCiAgICAgc3lzdGVtX21vZHVsZXM6ICJjb3JlLWFsbC1zeXN0ZW0tbW9kdWxlcyIsCkBAIC0zNCwzICszMiwyNCBAQAogICAgIGhvc3Rfc3VwcG9ydGVkOiB0cnVlLAogICAgIGlzX3N0dWJzX21vZHVsZTogdHJ1ZSwKIH0KKworamF2YV9saWJyYXJ5IHsKKyAgICBuYW1lOiAiYWNvbmZpZ19zdG9yYWdlX3N0dWIiLAorICAgIHNyY3M6IFsKKyAgICAgICAgInNyYy9hbmRyb2lkL29zL2ZsYWdnaW5nLyoqLyouamF2YSIsCisgICAgXSwKKyAgICBzZGtfdmVyc2lvbjogImNvcmVfY3VycmVudCIsCisgICAgaG9zdF9zdXBwb3J0ZWQ6IHRydWUsCisgICAgaXNfc3R1YnNfbW9kdWxlOiB0cnVlLAorfQorCitqYXZhX2xpYnJhcnkgeworICAgIG5hbWU6ICJhY29uZmlnX3N0b3JhZ2Vfc3R1Yl9ub25lIiwKKyAgICBzcmNzOiBbCisgICAgICAgICJzcmMvYW5kcm9pZC9vcy9mbGFnZ2luZy8qKi8qLmphdmEiLAorICAgIF0sCisgICAgc2RrX3ZlcnNpb246ICJub25lIiwKKyAgICBzeXN0ZW1fbW9kdWxlczogImNvcmUtYWxsLXN5c3RlbS1tb2R1bGVzIiwKKyAgICBob3N0X3N1cHBvcnRlZDogdHJ1ZSwKKyAgICBpc19zdHVic19tb2R1bGU6IHRydWUsCit9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9vcy9CaW5kZXIuamF2YSBiL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL0JpbmRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMjMxM2QKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9vcy9CaW5kZXIuamF2YQpAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLm9zOworCitwdWJsaWMgY2xhc3MgQmluZGVyIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgY2xlYXJDYWxsaW5nSWRlbnRpdHkoKSB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiU3R1YiEiKTsKKyAgICB9CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIHJlc3RvcmVDYWxsaW5nSWRlbnRpdHkobG9uZyB0b2tlbikgeworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlN0dWIhIik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvc3JjL2FuZHJvaWQvb3MvQnVpbGQuamF2YSBiL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL0J1aWxkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVjNzJmYgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL0J1aWxkLmphdmEKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5vczsKKworcHVibGljIGNsYXNzIEJ1aWxkIHsKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFZFUlNJT04geworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTREtfSU5UID0gMDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9vcy9mbGFnZ2luZy9BY29uZmlnUGFja2FnZS5qYXZhIGIvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvc3JjL2FuZHJvaWQvb3MvZmxhZ2dpbmcvQWNvbmZpZ1BhY2thZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2FjNTE2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvc3JjL2FuZHJvaWQvb3MvZmxhZ2dpbmcvQWNvbmZpZ1BhY2thZ2UuamF2YQpAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLm9zLmZsYWdnaW5nOworCisvKgorICogVGhpcyBjbGFzcyBhbGxvd3MgZ2VuZXJhdGVkIGFjb25maWcgY29kZSB0byBjb21waWxlIGluZGVwZW5kZW50bHkgb2YgdGhlIGZyYW1ld29yay4KKyAqLworcHVibGljIGNsYXNzIEFjb25maWdQYWNrYWdlIHsKKyAgICBwdWJsaWMgc3RhdGljIEFjb25maWdQYWNrYWdlIGxvYWQoU3RyaW5nIHBhY2thZ2VOYW1lKSB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiU3R1YiEiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBnZXRCb29sZWFuRmxhZ1ZhbHVlKFN0cmluZyBmbGFnTmFtZSwgYm9vbGVhbiBkZWZhdWx0VmFsdWUpIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJTdHViISIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL2ZsYWdnaW5nL0Fjb25maWdQYWNrYWdlSW50ZXJuYWwuamF2YSBiL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL2ZsYWdnaW5nL0Fjb25maWdQYWNrYWdlSW50ZXJuYWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDg0MDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvc3JjL2FuZHJvaWQvb3MvZmxhZ2dpbmcvQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQub3MuZmxhZ2dpbmc7CisKKy8qCisgKiBUaGlzIGNsYXNzIGFsbG93cyBnZW5lcmF0ZWQgYWNvbmZpZyBjb2RlIHRvIGNvbXBpbGUgaW5kZXBlbmRlbnRseSBvZiB0aGUgZnJhbWV3b3JrLgorICovCitwdWJsaWMgY2xhc3MgQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbCB7CisKKyAgICBwdWJsaWMgc3RhdGljIEFjb25maWdQYWNrYWdlSW50ZXJuYWwgbG9hZCgKKyAgICAgICAgICAgIFN0cmluZyBjb250YWluZXIsIFN0cmluZyBwYWNrYWdlTmFtZSwgbG9uZyBwYWNrYWdlRmluZ2VycHJpbnQpIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJTdHViISIpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGdldEJvb2xlYW5GbGFnVmFsdWUoaW50IGluZGV4KSB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiU3R1YiEiKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9vcy9mbGFnZ2luZy9BY29uZmlnU3RvcmFnZVJlYWRFeGNlcHRpb24uamF2YSBiL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL2ZsYWdnaW5nL0Fjb25maWdTdG9yYWdlUmVhZEV4Y2VwdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZWM5OGMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9vcy9mbGFnZ2luZy9BY29uZmlnU3RvcmFnZVJlYWRFeGNlcHRpb24uamF2YQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLm9zLmZsYWdnaW5nOworCitwdWJsaWMgY2xhc3MgQWNvbmZpZ1N0b3JhZ2VSZWFkRXhjZXB0aW9uIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbiB7CisKKyAgICAvKiogR2VuZXJpYyBlcnJvciBjb2RlIGluZGljYXRpbmcgYW4gdW5zcGVjaWZpZWQgQWNvbmZpZyBTdG9yYWdlIGVycm9yLiAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0dFTkVSSUMgPSAwOworCisgICAgLyoqIEVycm9yIGNvZGUgaW5kaWNhdGluZyB0aGF0IHRoZSBBY29uZmlnIFN0b3JhZ2Ugc3lzdGVtIGlzIG5vdCBmb3VuZCBvbiB0aGUgZGV2aWNlLiAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX1NUT1JBR0VfU1lTVEVNX05PVF9GT1VORCA9IDE7CisKKyAgICAvKiogRXJyb3IgY29kZSBpbmRpY2F0aW5nIHRoYXQgdGhlIHJlcXVlc3RlZCBjb25maWd1cmF0aW9uIHBhY2thZ2UgaXMgbm90IGZvdW5kLiAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX1BBQ0tBR0VfTk9UX0ZPVU5EID0gMjsKKworICAgIC8qKiBFcnJvciBjb2RlIGluZGljYXRpbmcgdGhhdCB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lciBpcyBub3QgZm91bmQuICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfQ09OVEFJTkVSX05PVF9GT1VORCA9IDM7CisKKyAgICAvKiogRXJyb3IgY29kZSBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgd2FzIGFuIGVycm9yIHJlYWRpbmcgdGhlIEFjb25maWcgU3RvcmFnZSBmaWxlLiAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0NBTk5PVF9SRUFEX1NUT1JBR0VfRklMRSA9IDQ7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9GSUxFX0ZJTkdFUlBSSU5UX01JU01BVENIID0gNTsKKworICAgIHB1YmxpYyBBY29uZmlnU3RvcmFnZVJlYWRFeGNlcHRpb24oaW50IGVycm9yQ29kZSwgU3RyaW5nIG1zZykgeworICAgICAgICBzdXBlcihtc2cpOworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlN0dWIhIik7CisgICAgfQorCisgICAgcHVibGljIEFjb25maWdTdG9yYWdlUmVhZEV4Y2VwdGlvbihpbnQgZXJyb3JDb2RlLCBTdHJpbmcgbXNnLCBUaHJvd2FibGUgY2F1c2UpIHsKKyAgICAgICAgc3VwZXIobXNnLCBjYXVzZSk7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiU3R1YiEiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgQWNvbmZpZ1N0b3JhZ2VSZWFkRXhjZXB0aW9uKGludCBlcnJvckNvZGUsIFRocm93YWJsZSBjYXVzZSkgeworICAgICAgICBzdXBlcihjYXVzZSk7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiU3R1YiEiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGdldEVycm9yQ29kZSgpIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJTdHViISIpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSgpIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJTdHViISIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL2ZsYWdnaW5nL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5qYXZhIGIvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvc3JjL2FuZHJvaWQvb3MvZmxhZ2dpbmcvUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgzYjI1MQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL2ZsYWdnaW5nL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQub3MuZmxhZ2dpbmc7CisKKy8qCisgKiBUaGlzIGNsYXNzIGFsbG93cyBnZW5lcmF0ZWQgYWNvbmZpZyBjb2RlIHRvIGNvbXBpbGUgaW5kZXBlbmRlbnRseSBvZiB0aGUgZnJhbWV3b3JrLgorICovCitwdWJsaWMgY2xhc3MgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsIHsKKworICAgIHB1YmxpYyBzdGF0aWMgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsIGxvYWQoCisgICAgICAgICAgICBTdHJpbmcgY29udGFpbmVyLCBTdHJpbmcgcGFja2FnZU5hbWUsIGxvbmcgcGFja2FnZUZpbmdlcnByaW50KSB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiU3R1YiEiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBnZXRCb29sZWFuRmxhZ1ZhbHVlKGludCBpbmRleCkgeworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlN0dWIhIik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYXV0b19nZW5fdGVzdF9jb25maWcucHkgYi90b29scy9hdXRvX2dlbl90ZXN0X2NvbmZpZy5weQppbmRleCA4ZWU1OTlhLi5kNTRjNDEyIDEwMDc1NQotLS0gYS90b29scy9hdXRvX2dlbl90ZXN0X2NvbmZpZy5weQorKysgYi90b29scy9hdXRvX2dlbl90ZXN0X2NvbmZpZy5weQpAQCAtMzQsNiArMzQsNyBAQAogUExBQ0VIT0xERVJfUEFDS0FHRSA9ICd7UEFDS0FHRX0nCiBQTEFDRUhPTERFUl9SVU5ORVIgPSAne1JVTk5FUn0nCiBQTEFDRUhPTERFUl9URVNUX1RZUEUgPSAne1RFU1RfVFlQRX0nCitQTEFDRUhPTERFUl9FWFRSQV9URVNUX1JVTk5FUl9DT05GSUdTID0gJ3tFWFRSQV9URVNUX1JVTk5FUl9DT05GSUdTfScKIAogCiBkZWYgbWFpbihhcmd2KToKQEAgLTU5LDYgKzYwLDcgQEAKICAgICAgICJpbnN0cnVtZW50YXRpb25fdGVzdF9jb25maWdfdGVtcGxhdGUiLAogICAgICAgaGVscD0iUGF0aCB0byB0aGUgaW5zdHJ1bWVudGF0aW9uIHRlc3QgY29uZmlnIHRlbXBsYXRlLiIpCiAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tZXh0cmEtY29uZmlncyIsIGRlZmF1bHQ9IiIpCisgIHBhcnNlci5hZGRfYXJndW1lbnQoIi0tZXh0cmEtdGVzdC1ydW5uZXItY29uZmlncyIsIGRlZmF1bHQ9IiIpCiAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhhcmd2KQogCiAgIHRhcmdldF9jb25maWcgPSBhcmdzLnRhcmdldF9jb25maWcKQEAgLTY2LDYgKzY4LDcgQEAKICAgZW1wdHlfY29uZmlnID0gYXJncy5lbXB0eV9jb25maWcKICAgaW5zdHJ1bWVudGF0aW9uX3Rlc3RfY29uZmlnX3RlbXBsYXRlID0gYXJncy5pbnN0cnVtZW50YXRpb25fdGVzdF9jb25maWdfdGVtcGxhdGUKICAgZXh0cmFfY29uZmlncyA9ICdcbicuam9pbihhcmdzLmV4dHJhX2NvbmZpZ3Muc3BsaXQoJ1xcbicpKQorICBleHRyYV90ZXN0X3J1bm5lcl9jb25maWdzID0gJ1xuJy5qb2luKGFyZ3MuZXh0cmFfdGVzdF9ydW5uZXJfY29uZmlncy5zcGxpdCgnXFxuJykpCiAKICAgbW9kdWxlID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKHRhcmdldF9jb25maWcpKVswXQogCkBAIC0xMzEsNiArMTM0LDcgQEAKICAgICBjb25maWcgPSBjb25maWcucmVwbGFjZShQTEFDRUhPTERFUl9QQUNLQUdFLCBwYWNrYWdlKQogICAgIGNvbmZpZyA9IGNvbmZpZy5yZXBsYWNlKFBMQUNFSE9MREVSX1RFU1RfVFlQRSwgdGVzdF90eXBlKQogICAgIGNvbmZpZyA9IGNvbmZpZy5yZXBsYWNlKFBMQUNFSE9MREVSX0VYVFJBX0NPTkZJR1MsIGV4dHJhX2NvbmZpZ3MpCisgICAgY29uZmlnID0gY29uZmlnLnJlcGxhY2UoUExBQ0VIT0xERVJfRVhUUkFfVEVTVF9SVU5ORVJfQ09ORklHUywgZXh0cmFfdGVzdF9ydW5uZXJfY29uZmlncykKICAgICBjb25maWcgPSBjb25maWcucmVwbGFjZShQTEFDRUhPTERFUl9SVU5ORVIsIHJ1bm5lcikKICAgICB3aXRoIG9wZW4odGFyZ2V0X2NvbmZpZywgJ3cnKSBhcyBjb25maWdfZmlsZToKICAgICAgIGNvbmZpZ19maWxlLndyaXRlKGNvbmZpZykKZGlmZiAtLWdpdCBhL3Rvb2xzL2NvbXBsaWFuY2UvZ28ud29yayBiL3Rvb2xzL2NvbXBsaWFuY2UvZ28ud29yawppbmRleCBhMjRkMmVhLi41MDZlNjE5IDEwMDY0NAotLS0gYS90b29scy9jb21wbGlhbmNlL2dvLndvcmsKKysrIGIvdG9vbHMvY29tcGxpYW5jZS9nby53b3JrCkBAIC0xLDQgKzEsNCBAQAotZ28gMS4yMgorZ28gMS4yMwogCiB1c2UgKAogCS4KZGlmZiAtLWdpdCBhL3Rvb2xzL2VkaXRfbW9uaXRvci9BbmRyb2lkLmJwIGIvdG9vbHMvZWRpdF9tb25pdG9yL0FuZHJvaWQuYnAKaW5kZXggYjkzOTYzMy4uYjhhYzViZiAxMDA2NDQKLS0tIGEvdG9vbHMvZWRpdF9tb25pdG9yL0FuZHJvaWQuYnAKKysrIGIvdG9vbHMvZWRpdF9tb25pdG9yL0FuZHJvaWQuYnAKQEAgLTIxLDEwICsyMSwyNyBAQAogfQogCiBweXRob25fbGlicmFyeV9ob3N0IHsKKyAgICBuYW1lOiAiZWRpdF9ldmVudF9wcm90byIsCisgICAgc3JjczogWworICAgICAgICAicHJvdG8vZWRpdF9ldmVudC5wcm90byIsCisgICAgXSwKKyAgICBwcm90bzogeworICAgICAgICBjYW5vbmljYWxfcGF0aF9mcm9tX3Jvb3Q6IGZhbHNlLAorICAgIH0sCit9CisKK3B5dGhvbl9saWJyYXJ5X2hvc3QgewogICAgIG5hbWU6ICJlZGl0X21vbml0b3JfbGliIiwKICAgICBwa2dfcGF0aDogImVkaXRfbW9uaXRvciIsCiAgICAgc3JjczogWwogICAgICAgICAiZGFlbW9uX21hbmFnZXIucHkiLAorICAgICAgICAiZWRpdF9tb25pdG9yLnB5IiwKKyAgICAgICAgInV0aWxzLnB5IiwKKyAgICBdLAorICAgIGxpYnM6IFsKKyAgICAgICAgImFzdWl0ZV9jY19jbGllbnQiLAorICAgICAgICAiZWRpdF9ldmVudF9wcm90byIsCisgICAgICAgICJ3YXRjaGRvZyIsCiAgICAgXSwKIH0KIApAQCAtNDIsMyArNTksNjAgQEAKICAgICAgICAgdW5pdF90ZXN0OiB0cnVlLAogICAgIH0sCiB9CisKK3B5dGhvbl90ZXN0X2hvc3QgeworICAgIG5hbWU6ICJlZGl0X21vbml0b3JfdGVzdCIsCisgICAgbWFpbjogImVkaXRfbW9uaXRvcl90ZXN0LnB5IiwKKyAgICBwa2dfcGF0aDogImVkaXRfbW9uaXRvciIsCisgICAgc3JjczogWworICAgICAgICAiZWRpdF9tb25pdG9yX3Rlc3QucHkiLAorICAgIF0sCisgICAgbGliczogWworICAgICAgICAiZWRpdF9tb25pdG9yX2xpYiIsCisgICAgXSwKKyAgICB0ZXN0X29wdGlvbnM6IHsKKyAgICAgICAgdW5pdF90ZXN0OiB0cnVlLAorICAgIH0sCit9CisKK3B5dGhvbl90ZXN0X2hvc3QgeworICAgIG5hbWU6ICJlZGl0X21vbml0b3JfdXRpbHNfdGVzdCIsCisgICAgbWFpbjogInV0aWxzX3Rlc3QucHkiLAorICAgIHBrZ19wYXRoOiAiZWRpdF9tb25pdG9yIiwKKyAgICBzcmNzOiBbCisgICAgICAgICJ1dGlsc190ZXN0LnB5IiwKKyAgICBdLAorICAgIGxpYnM6IFsKKyAgICAgICAgImVkaXRfbW9uaXRvcl9saWIiLAorICAgIF0sCisgICAgdGVzdF9vcHRpb25zOiB7CisgICAgICAgIHVuaXRfdGVzdDogdHJ1ZSwKKyAgICB9LAorfQorCitweXRob25fdGVzdF9ob3N0IHsKKyAgICBuYW1lOiAiZWRpdF9tb25pdG9yX2ludGVncmF0aW9uX3Rlc3QiLAorICAgIG1haW46ICJlZGl0X21vbml0b3JfaW50ZWdyYXRpb25fdGVzdC5weSIsCisgICAgcGtnX3BhdGg6ICJ0ZXN0ZGF0YSIsCisgICAgc3JjczogWworICAgICAgICAiZWRpdF9tb25pdG9yX2ludGVncmF0aW9uX3Rlc3QucHkiLAorICAgIF0sCisgICAgdGVzdF9vcHRpb25zOiB7CisgICAgICAgIHVuaXRfdGVzdDogdHJ1ZSwKKyAgICB9LAorICAgIGRhdGE6IFsKKyAgICAgICAgIjplZGl0X21vbml0b3IiLAorICAgIF0sCit9CisKK3B5dGhvbl9iaW5hcnlfaG9zdCB7CisgICAgbmFtZTogImVkaXRfbW9uaXRvciIsCisgICAgcGtnX3BhdGg6ICJlZGl0X21vbml0b3IiLAorICAgIHNyY3M6IFsKKyAgICAgICAgIm1haW4ucHkiLAorICAgIF0sCisgICAgbGliczogWworICAgICAgICAiZWRpdF9tb25pdG9yX2xpYiIsCisgICAgXSwKKyAgICBtYWluOiAibWFpbi5weSIsCit9CmRpZmYgLS1naXQgYS90b29scy9lZGl0X21vbml0b3IvZGFlbW9uX21hbmFnZXIucHkgYi90b29scy9lZGl0X21vbml0b3IvZGFlbW9uX21hbmFnZXIucHkKaW5kZXggOGVjMjU4OC4uN2Q2NjZmZSAxMDA2NDQKLS0tIGEvdG9vbHMvZWRpdF9tb25pdG9yL2RhZW1vbl9tYW5hZ2VyLnB5CisrKyBiL3Rvb2xzL2VkaXRfbW9uaXRvci9kYWVtb25fbWFuYWdlci5weQpAQCAtMTMsMTggKzEzLDM1IEBACiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCiAKK2ltcG9ydCBlcnJubworaW1wb3J0IGZjbnRsCitpbXBvcnQgZ2V0cGFzcwogaW1wb3J0IGhhc2hsaWIKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCiBpbXBvcnQgb3MKIGltcG9ydCBwYXRobGliCitpbXBvcnQgcGxhdGZvcm0KIGltcG9ydCBzaWduYWwKIGltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB0aW1lCiAKK2Zyb20gYXRlc3QubWV0cmljcyBpbXBvcnQgY2xlYXJjdXRfY2xpZW50Citmcm9tIGF0ZXN0LnByb3RvIGltcG9ydCBjbGllbnRhbmFseXRpY3NfcGIyCitmcm9tIGVkaXRfbW9uaXRvciBpbXBvcnQgdXRpbHMKK2Zyb20gcHJvdG8gaW1wb3J0IGVkaXRfZXZlbnRfcGIyCiAKLURFRkFVTFRfUFJPQ0VTU19URVJNSU5BVElPTl9USU1FT1VUX1NFQ09ORFMgPSAxCitERUZBVUxUX1BST0NFU1NfVEVSTUlOQVRJT05fVElNRU9VVF9TRUNPTkRTID0gNQorREVGQVVMVF9NT05JVE9SX0lOVEVSVkFMX1NFQ09ORFMgPSA1CitERUZBVUxUX01FTU9SWV9VU0FHRV9USFJFU0hPTEQgPSAwLjAyICAjIDIlIG9mIHRvdGFsIG1lbW9yeQorREVGQVVMVF9DUFVfVVNBR0VfVEhSRVNIT0xEID0gMjAwCitERUZBVUxUX1JFQk9PVF9USU1FT1VUX1NFQ09ORFMgPSA2MCAqIDYwICogMjQKK0JMT0NLX1NJR05fRklMRSA9ICJlZGl0X21vbml0b3JfYmxvY2tfc2lnbiIKKyMgRW51bSBvZiB0aGUgQ2xlYXJjdXQgbG9nIHNvdXJjZSBkZWZpbmVkIHVuZGVyCisjIC9nb29nbGUzL3dpcmVsZXNzL2FuZHJvaWQvcGxheS9wbGF5bG9nL3Byb3RvL2xvZ19zb3VyY2VfZW51bS5wcm90bworTE9HX1NPVVJDRSA9IDI1MjQKIAogCiBkZWYgZGVmYXVsdF9kYWVtb25fdGFyZ2V0KCk6CkBAIC00MCwzNyArNTcsMjA5IEBACiAgICAgICBiaW5hcnlfcGF0aDogc3RyLAogICAgICAgZGFlbW9uX3RhcmdldDogY2FsbGFibGUgPSBkZWZhdWx0X2RhZW1vbl90YXJnZXQsCiAgICAgICBkYWVtb25fYXJnczogdHVwbGUgPSAoKSwKKyAgICAgIGNjbGllbnQ6IGNsZWFyY3V0X2NsaWVudC5DbGVhcmN1dCB8IE5vbmUgPSBOb25lLAogICApOgogICAgIHNlbGYuYmluYXJ5X3BhdGggPSBiaW5hcnlfcGF0aAogICAgIHNlbGYuZGFlbW9uX3RhcmdldCA9IGRhZW1vbl90YXJnZXQKICAgICBzZWxmLmRhZW1vbl9hcmdzID0gZGFlbW9uX2FyZ3MKKyAgICBzZWxmLmNjbGllbnQgPSBjY2xpZW50IG9yIGNsZWFyY3V0X2NsaWVudC5DbGVhcmN1dChMT0dfU09VUkNFKQogCisgICAgc2VsZi51c2VyX25hbWUgPSBnZXRwYXNzLmdldHVzZXIoKQorICAgIHNlbGYuaG9zdF9uYW1lID0gcGxhdGZvcm0ubm9kZSgpCisgICAgc2VsZi5zb3VyY2Vfcm9vdCA9IG9zLmVudmlyb24uZ2V0KCJBTkRST0lEX0JVSUxEX1RPUCIsICIiKQogICAgIHNlbGYucGlkID0gb3MuZ2V0cGlkKCkKICAgICBzZWxmLmRhZW1vbl9wcm9jZXNzID0gTm9uZQogCisgICAgc2VsZi5tYXhfbWVtb3J5X3VzYWdlID0gMAorICAgIHNlbGYubWF4X2NwdV91c2FnZSA9IDAKKyAgICBzZWxmLnRvdGFsX21lbW9yeV9zaXplID0gb3Muc3lzY29uZigiU0NfUEFHRV9TSVpFIikgKiBvcy5zeXNjb25mKAorICAgICAgICAiU0NfUEhZU19QQUdFUyIKKyAgICApCisKICAgICBwaWRfZmlsZV9kaXIgPSBwYXRobGliLlBhdGgodGVtcGZpbGUuZ2V0dGVtcGRpcigpKS5qb2lucGF0aCgiZWRpdF9tb25pdG9yIikKICAgICBwaWRfZmlsZV9kaXIubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKQogICAgIHNlbGYucGlkX2ZpbGVfcGF0aCA9IHNlbGYuX2dldF9waWRfZmlsZV9wYXRoKHBpZF9maWxlX2RpcikKKyAgICBzZWxmLmJsb2NrX3NpZ24gPSBwYXRobGliLlBhdGgodGVtcGZpbGUuZ2V0dGVtcGRpcigpKS5qb2lucGF0aCgKKyAgICAgICAgQkxPQ0tfU0lHTl9GSUxFCisgICAgKQogCiAgIGRlZiBzdGFydChzZWxmKToKICAgICAiIiJXcml0ZXMgdGhlIHBpZGZpbGUgYW5kIHN0YXJ0cyB0aGUgZGFlbW9uIHByb2Nlcy4iIiIKLSAgICB0cnk6Ci0gICAgICBzZWxmLl9zdG9wX2FueV9leGlzdGluZ19pbnN0YW5jZSgpCi0gICAgICBzZWxmLl93cml0ZV9waWRfdG9fcGlkZmlsZSgpCi0gICAgICBzZWxmLl9zdGFydF9kYWVtb25fcHJvY2VzcygpCi0gICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgotICAgICAgbG9nZ2luZy5leGNlcHRpb24oIkZhaWxlZCB0byBzdGFydCBkYWVtb24gbWFuYWdlciB3aXRoIGVycm9yICVzIiwgZSkKKyAgICBpZiBub3QgdXRpbHMuaXNfZmVhdHVyZV9lbmFibGVkKAorICAgICAgICAiZWRpdF9tb25pdG9yIiwKKyAgICAgICAgc2VsZi51c2VyX25hbWUsCisgICAgICAgICJFTkFCTEVfQU5EUk9JRF9FRElUX01PTklUT1IiLAorICAgICAgICAxMDAsCisgICAgKToKKyAgICAgIGxvZ2dpbmcud2FybmluZygiRWRpdCBtb25pdG9yIGlzIGRpc2FibGVkLCBleGl0aW5nLi4uIikKKyAgICAgIHJldHVybgorCisgICAgaWYgc2VsZi5ibG9ja19zaWduLmV4aXN0cygpOgorICAgICAgbG9nZ2luZy53YXJuaW5nKCJCbG9jayBzaWduIGZvdW5kLCBleGl0aW5nLi4uIikKKyAgICAgIHJldHVybgorCisgICAgaWYgc2VsZi5iaW5hcnlfcGF0aC5zdGFydHN3aXRoKCIvZ29vZ2xlL2NvZy8iKToKKyAgICAgIGxvZ2dpbmcud2FybmluZygiRWRpdCBtb25pdG9yIGZvciBjb2cgaXMgbm90IHN1cHBvcnRlZCwgZXhpdGluZy4uLiIpCisgICAgICByZXR1cm4KKworICAgIHNldHVwX2xvY2tfZmlsZSA9IHBhdGhsaWIuUGF0aCh0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkpLmpvaW5wYXRoKAorICAgICAgICBzZWxmLnBpZF9maWxlX3BhdGgubmFtZSArICIuc2V0dXAiCisgICAgKQorICAgIGxvZ2dpbmcuaW5mbygic2V0dXAgbG9jayBmaWxlOiAlcyIsIHNldHVwX2xvY2tfZmlsZSkKKyAgICB3aXRoIG9wZW4oc2V0dXBfbG9ja19maWxlLCAidyIpIGFzIGY6CisgICAgICB0cnk6CisgICAgICAgICMgQWNxdWlyZSBhbiBleGNsdXNpdmUgbG9jaworICAgICAgICBmY250bC5mbG9jayhmLCBmY250bC5MT0NLX0VYIHwgZmNudGwuTE9DS19OQikKKyAgICAgICAgc2VsZi5fc3RvcF9hbnlfZXhpc3RpbmdfaW5zdGFuY2UoKQorICAgICAgICBzZWxmLl93cml0ZV9waWRfdG9fcGlkZmlsZSgpCisgICAgICAgIHNlbGYuX3N0YXJ0X2RhZW1vbl9wcm9jZXNzKCkKKyAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgaWYgKAorICAgICAgICAgICAgaXNpbnN0YW5jZShlLCBJT0Vycm9yKSBhbmQgZS5lcnJubyA9PSBlcnJuby5FQUdBSU4KKyAgICAgICAgKTogICMgRmFpbGVkIHRvIGFjcXVpcmUgdGhlIGZpbGUgbG9jay4KKyAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoIkFub3RoZXIgZWRpdCBtb25pdG9yIGlzIHN0YXJ0aW5nLCBleGl0aW5uZy4uLiIpCisgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgbG9nZ2luZy5leGNlcHRpb24oIkZhaWxlZCB0byBzdGFydCBkYWVtb24gbWFuYWdlciB3aXRoIGVycm9yICVzIiwgZSkKKyAgICAgICAgICBzZWxmLl9zZW5kX2Vycm9yX2V2ZW50X3RvX2NsZWFyY3V0KAorICAgICAgICAgICAgICBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuRkFJTEVEX1RPX1NUQVJUX0VESVRfTU9OSVRPUgorICAgICAgICAgICkKKyAgICAgICAgICByYWlzZSBlCisgICAgICBmaW5hbGx5OgorICAgICAgICAjIFJlbGVhc2UgdGhlIGxvY2sKKyAgICAgICAgZmNudGwuZmxvY2soZiwgZmNudGwuTE9DS19VTikKKworICBkZWYgbW9uaXRvcl9kYWVtb24oCisgICAgICBzZWxmLAorICAgICAgaW50ZXJ2YWw6IGludCA9IERFRkFVTFRfTU9OSVRPUl9JTlRFUlZBTF9TRUNPTkRTLAorICAgICAgbWVtb3J5X3RocmVzaG9sZDogZmxvYXQgPSBERUZBVUxUX01FTU9SWV9VU0FHRV9USFJFU0hPTEQsCisgICAgICBjcHVfdGhyZXNob2xkOiBmbG9hdCA9IERFRkFVTFRfQ1BVX1VTQUdFX1RIUkVTSE9MRCwKKyAgICAgIHJlYm9vdF90aW1lb3V0OiBpbnQgPSBERUZBVUxUX1JFQk9PVF9USU1FT1VUX1NFQ09ORFMsCisgICk6CisgICAgIiIiTW9uaXRzIHRoZSBkYWVtb24gcHJvY2VzcyBzdGF0dXMuCisKKyAgICBQZXJpb2RpY2FsbHkgY2hlY2sgdGhlIENQVS9NZW1vcnkgdXNhZ2Ugb2YgdGhlIGRhZW1vbiBwcm9jZXNzIGFzIGxvbmcgYXMgdGhlCisgICAgcHJvY2VzcyBpcyBzdGlsbCBydW5uaW5nIGFuZCBraWxsIHRoZSBwcm9jZXNzIGlmIHRoZSByZXNvdXJjZSB1c2FnZSBpcyBhYm92ZQorICAgIGdpdmVuIHRocmVzaG9sZHMuCisgICAgIiIiCisgICAgaWYgbm90IHNlbGYuZGFlbW9uX3Byb2Nlc3M6CisgICAgICByZXR1cm4KKworICAgIGxvZ2dpbmcuaW5mbygic3RhcnQgbW9uaXRvcmluZyBkYWVtb24gcHJvY2VzcyAlZC4iLCBzZWxmLmRhZW1vbl9wcm9jZXNzLnBpZCkKKyAgICByZWJvb3RfdGltZSA9IHRpbWUudGltZSgpICsgcmVib290X3RpbWVvdXQKKyAgICB3aGlsZSBzZWxmLmRhZW1vbl9wcm9jZXNzLmlzX2FsaXZlKCk6CisgICAgICBpZiB0aW1lLnRpbWUoKSA+IHJlYm9vdF90aW1lOgorICAgICAgICBzZWxmLnJlYm9vdCgpCisgICAgICB0cnk6CisgICAgICAgIG1lbW9yeV91c2FnZSA9IHNlbGYuX2dldF9wcm9jZXNzX21lbW9yeV9wZXJjZW50KHNlbGYuZGFlbW9uX3Byb2Nlc3MucGlkKQorICAgICAgICBzZWxmLm1heF9tZW1vcnlfdXNhZ2UgPSBtYXgoc2VsZi5tYXhfbWVtb3J5X3VzYWdlLCBtZW1vcnlfdXNhZ2UpCisKKyAgICAgICAgY3B1X3VzYWdlID0gc2VsZi5fZ2V0X3Byb2Nlc3NfY3B1X3BlcmNlbnQoc2VsZi5kYWVtb25fcHJvY2Vzcy5waWQpCisgICAgICAgIHNlbGYubWF4X2NwdV91c2FnZSA9IG1heChzZWxmLm1heF9jcHVfdXNhZ2UsIGNwdV91c2FnZSkKKworICAgICAgICB0aW1lLnNsZWVwKGludGVydmFsKQorICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAjIExvZ2dpbmcgdGhlIGVycm9yIGFuZCBjb250aW51ZS4KKyAgICAgICAgbG9nZ2luZy53YXJuaW5nKCJGYWlsZWQgdG8gbW9uaXRvciBkYWVtb24gcHJvY2VzcyB3aXRoIGVycm9yOiAlcyIsIGUpCisKKyAgICAgIGlmIHNlbGYubWF4X21lbW9yeV91c2FnZSA+PSBtZW1vcnlfdGhyZXNob2xkOgorICAgICAgICBzZWxmLl9zZW5kX2Vycm9yX2V2ZW50X3RvX2NsZWFyY3V0KAorICAgICAgICAgICAgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LktJTExFRF9EVUVfVE9fRVhDRUVERURfTUVNT1JZX1VTQUdFCisgICAgICAgICkKKyAgICAgICAgbG9nZ2luZy5lcnJvcigKKyAgICAgICAgICAgICJEYWVtb24gcHJvY2VzcyBpcyBjb25zdW1pbmcgdG9vIG11Y2ggbWVtb3J5LCByZWJvb3RpbmcuLi4iCisgICAgICAgICkKKyAgICAgICAgc2VsZi5yZWJvb3QoKQorCisgICAgICBpZiBzZWxmLm1heF9jcHVfdXNhZ2UgPj0gY3B1X3RocmVzaG9sZDoKKyAgICAgICAgc2VsZi5fc2VuZF9lcnJvcl9ldmVudF90b19jbGVhcmN1dCgKKyAgICAgICAgICAgIGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5LSUxMRURfRFVFX1RPX0VYQ0VFREVEX0NQVV9VU0FHRQorICAgICAgICApCisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIkRhZW1vbiBwcm9jZXNzIGlzIGNvbnN1bWluZyB0b28gbXVjaCBjcHUsIGtpbGxpbmcuLi4iKQorICAgICAgICBzZWxmLl90ZXJtaW5hdGVfcHJvY2VzcyhzZWxmLmRhZW1vbl9wcm9jZXNzLnBpZCkKKworICAgIGxvZ2dpbmcuaW5mbygKKyAgICAgICAgIkRhZW1vbiBwcm9jZXNzICVkIHRlcm1pbmF0ZWQuIE1heCBtZW1vcnkgdXNhZ2U6ICVmLCBNYXggY3B1IgorICAgICAgICAiIHVzYWdlOiAlZi4iLAorICAgICAgICBzZWxmLmRhZW1vbl9wcm9jZXNzLnBpZCwKKyAgICAgICAgc2VsZi5tYXhfbWVtb3J5X3VzYWdlLAorICAgICAgICBzZWxmLm1heF9jcHVfdXNhZ2UsCisgICAgKQogCiAgIGRlZiBzdG9wKHNlbGYpOgogICAgICIiIlN0b3BzIHRoZSBkYWVtb24gcHJvY2VzcyBhbmQgcmVtb3ZlcyB0aGUgcGlkZmlsZS4iIiIKIAotICAgIGxvZ2dpbmcuZGVidWcoImluIGRhZW1vbiBtYW5hZ2VyIGNsZWFudXAuIikKKyAgICBsb2dnaW5nLmluZm8oImluIGRhZW1vbiBtYW5hZ2VyIGNsZWFudXAuIikKICAgICB0cnk6Ci0gICAgICBpZiBzZWxmLmRhZW1vbl9wcm9jZXNzIGFuZCBzZWxmLmRhZW1vbl9wcm9jZXNzLmlzX2FsaXZlKCk6Ci0gICAgICAgIHNlbGYuX3Rlcm1pbmF0ZV9wcm9jZXNzKHNlbGYuZGFlbW9uX3Byb2Nlc3MucGlkKQotICAgICAgc2VsZi5fcmVtb3ZlX3BpZGZpbGUoKQorICAgICAgaWYgc2VsZi5kYWVtb25fcHJvY2VzczoKKyAgICAgICAgIyBUaGUgZGFlbW9uIHByb2Nlc3MgbWlnaHQgYWxyZWFkeSBpbiB0ZXJtaW5hdGlvbiBwcm9jZXNzLAorICAgICAgICAjIHdhaXQgc29tZSB0aW1lIGJlZm9yZSBraWxsIGl0IGV4cGxpY2l0bHkuCisgICAgICAgIHNlbGYuX3dhaXRfZm9yX3Byb2Nlc3NfdGVybWluYXRlKHNlbGYuZGFlbW9uX3Byb2Nlc3MucGlkLCAxKQorICAgICAgICBpZiBzZWxmLmRhZW1vbl9wcm9jZXNzLmlzX2FsaXZlKCk6CisgICAgICAgICAgc2VsZi5fdGVybWluYXRlX3Byb2Nlc3Moc2VsZi5kYWVtb25fcHJvY2Vzcy5waWQpCisgICAgICBzZWxmLl9yZW1vdmVfcGlkZmlsZShzZWxmLnBpZCkKKyAgICAgIGxvZ2dpbmcuaW5mbygiU3VjY2Vzc2Z1bGx5IHN0b3BwZWQgZGFlbW9uIG1hbmFnZXIuIikKICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICBsb2dnaW5nLmV4Y2VwdGlvbigiRmFpbGVkIHRvIHN0b3AgZGFlbW9uIG1hbmFnZXIgd2l0aCBlcnJvciAlcyIsIGUpCisgICAgICBzZWxmLl9zZW5kX2Vycm9yX2V2ZW50X3RvX2NsZWFyY3V0KAorICAgICAgICAgIGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5GQUlMRURfVE9fU1RPUF9FRElUX01PTklUT1IKKyAgICAgICkKKyAgICAgIHN5cy5leGl0KDEpCisgICAgZmluYWxseToKKyAgICAgIHNlbGYuY2NsaWVudC5mbHVzaF9ldmVudHMoKQorCisgIGRlZiByZWJvb3Qoc2VsZik6CisgICAgIiIiUmVib290cyB0aGUgY3VycmVudCBwcm9jZXNzLgorCisgICAgU3RvcHMgdGhlIGN1cnJlbnQgZGFlbW9uIG1hbmFnZXIgYW5kIHJlYm9vdHMgdGhlIGVudGlyZSBwcm9jZXNzIGJhc2VkIG9uCisgICAgdGhlIGJpbmFyeSBmaWxlLiBFeGl0cyBkaXJlY3RseSBJZiB0aGUgYmluYXJ5IGZpbGUgbm8gbG9uZ2VyIGV4aXN0cy4KKyAgICAiIiIKKyAgICBsb2dnaW5nLmluZm8oIlJlYm9vdGluZyBwcm9jZXNzIGJhc2VkIG9uIGJpbmFyeSAlcy4iLCBzZWxmLmJpbmFyeV9wYXRoKQorCisgICAgIyBTdG9wIHRoZSBjdXJyZW50IGRhZW1vbiBtYW5hZ2VyIGZpcnN0LgorICAgIHNlbGYuc3RvcCgpCisKKyAgICAjIElmIHRoZSBiaW5hcnkgbm8gbG9uZ2VyIGV4aXN0cywgZXhpdCBkaXJlY3RseS4KKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5iaW5hcnlfcGF0aCk6CisgICAgICBsb2dnaW5nLmluZm8oImJpbmFyeSAlcyBubyBsb25nZXIgZXhpc3RzLCBleGl0aW5nLiIsIHNlbGYuYmluYXJ5X3BhdGgpCisgICAgICBzeXMuZXhpdCgwKQorCisgICAgdHJ5OgorICAgICAgb3MuZXhlY3Yoc2VsZi5iaW5hcnlfcGF0aCwgc3lzLmFyZ3YpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgIGxvZ2dpbmcuZXhjZXB0aW9uKCJGYWlsZWQgdG8gcmVib290IHByb2Nlc3Mgd2l0aCBlcnJvcjogJXMuIiwgZSkKKyAgICAgIHNlbGYuX3NlbmRfZXJyb3JfZXZlbnRfdG9fY2xlYXJjdXQoCisgICAgICAgICAgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LkZBSUxFRF9UT19SRUJPT1RfRURJVF9NT05JVE9SCisgICAgICApCisgICAgICBzeXMuZXhpdCgxKSAgIyBJbmRpY2F0ZSBhbiBlcnJvciBvY2N1cnJlZAorCisgIGRlZiBjbGVhbnVwKHNlbGYpOgorICAgICIiIldpcGVzIG91dCBhbGwgZWRpdCBtb25pdG9yIGluc3RhbmNlcyBpbiB0aGUgc3lzdGVtLgorCisgICAgU3RvcHMgYWxsIHRoZSBleGlzdGluZyBlZGl0IG1vbml0b3IgaW5zdGFuY2VzIGFuZCBwbGFjZSBhIGJsb2NrIHNpZ24KKyAgICB0byBwcmV2ZW50IGFueSBlZGl0IG1vbml0b3IgcHJvY2VzcyB0byBzdGFydC4gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkCisgICAgaW4gZW1lcmdlbmN5IGNhc2Ugd2hlbiB0aGVyZSdzIHNvbWV0aGluZyBnb2VzIHdyb25nIHdpdGggdGhlIGVkaXQgbW9uaXRvcgorICAgIHRoYXQgcmVxdWlyZXMgaW1tZWRpYXRlIGNsZWFudXAgdG8gcHJldmVudCBkYW1hbmdlciB0byB0aGUgc3lzdGVtLgorICAgICIiIgorICAgIGxvZ2dpbmcuZGVidWcoIlN0YXJ0IGNsZWFuaW5nIHVwIGFsbCBleGlzdGluZyBpbnN0YW5jZXMuIikKKyAgICBzZWxmLl9zZW5kX2Vycm9yX2V2ZW50X3RvX2NsZWFyY3V0KGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5GT1JDRV9DTEVBTlVQKQorCisgICAgdHJ5OgorICAgICAgIyBGaXJzdCBwbGFjZXMgYSBibG9jayBzaWduIHRvIHByZXZlbnQgYW55IGVkaXQgbW9uaXRvciBwcm9jZXNzIHRvIHN0YXJ0LgorICAgICAgc2VsZi5ibG9ja19zaWduLnRvdWNoKCkKKyAgICBleGNlcHQgKEZpbGVOb3RGb3VuZEVycm9yLCBQZXJtaXNzaW9uRXJyb3IsIE9TRXJyb3IpOgorICAgICAgbG9nZ2luZy5leGNlcHRpb24oIkZhaWxlZCB0byBwbGFjZSB0aGUgYmxvY2sgc2lnbiIpCisKKyAgICAjIEZpbmRzIGFuZCBraWxscyBhbGwgdGhlIGV4aXN0aW5nIGluc3RhbmNlcyBvZiBlZGl0IG1vbml0b3IuCisgICAgZXhpc3RpbmdfaW5zdGFuY2VzX3BpZHMgPSBzZWxmLl9maW5kX2FsbF9pbnN0YW5jZXNfcGlkcygpCisgICAgZm9yIHBpZCBpbiBleGlzdGluZ19pbnN0YW5jZXNfcGlkczoKKyAgICAgIGxvZ2dpbmcuaW5mbygKKyAgICAgICAgICAiRm91bmQgZXhpc3RpbmcgZWRpdCBtb25pdG9yIGluc3RhbmNlIHdpdGggcGlkICVkLCBraWxsaW5nLi4uIiwgcGlkCisgICAgICApCisgICAgICB0cnk6CisgICAgICAgIHNlbGYuX3Rlcm1pbmF0ZV9wcm9jZXNzKHBpZCkKKyAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIGxvZ2dpbmcuZXhjZXB0aW9uKCJGYWlsZWQgdG8gdGVybWluYXRlIHByb2Nlc3MgJWQiLCBwaWQpCiAKICAgZGVmIF9zdG9wX2FueV9leGlzdGluZ19pbnN0YW5jZShzZWxmKToKICAgICBpZiBub3Qgc2VsZi5waWRfZmlsZV9wYXRoLmV4aXN0cygpOgpAQCAtODIsMTEgKzI3MSwxNSBAQAogICAgIGlmIGV4X3BpZDoKICAgICAgIGxvZ2dpbmcuaW5mbygiRm91bmQgYW5vdGhlciBpbnN0YW5jZSB3aXRoIHBpZCAlZC4iLCBleF9waWQpCiAgICAgICBzZWxmLl90ZXJtaW5hdGVfcHJvY2VzcyhleF9waWQpCi0gICAgICBzZWxmLl9yZW1vdmVfcGlkZmlsZSgpCisgICAgICBzZWxmLl9yZW1vdmVfcGlkZmlsZShleF9waWQpCiAKLSAgZGVmIF9yZWFkX3BpZF9mcm9tX3BpZGZpbGUoc2VsZik6Ci0gICAgd2l0aCBvcGVuKHNlbGYucGlkX2ZpbGVfcGF0aCwgInIiKSBhcyBmOgotICAgICAgcmV0dXJuIGludChmLnJlYWQoKS5zdHJpcCgpKQorICBkZWYgX3JlYWRfcGlkX2Zyb21fcGlkZmlsZShzZWxmKSAtPiBpbnQgfCBOb25lOgorICAgIHRyeToKKyAgICAgIHdpdGggb3BlbihzZWxmLnBpZF9maWxlX3BhdGgsICJyIikgYXMgZjoKKyAgICAgICAgcmV0dXJuIGludChmLnJlYWQoKS5zdHJpcCgpKQorICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvciBhcyBlOgorICAgICAgbG9nZ2luZy53YXJuaW5nKCJwaWRmaWxlICVzIGRvZXMgbm90IGV4aXN0LiIsIHNlbGYucGlkX2ZpbGVfcGF0aCkKKyAgICAgIHJldHVybiBOb25lCiAKICAgZGVmIF93cml0ZV9waWRfdG9fcGlkZmlsZShzZWxmKToKICAgICAiIiJDcmVhdGVzIGEgcGlkZmlsZSBhbmQgd3JpdGVzIHRoZSBjdXJyZW50IHBpZCB0byB0aGUgZmlsZS4KQEAgLTExMCw2ICszMDMsNyBAQAogICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcygKICAgICAgICAgdGFyZ2V0PXNlbGYuZGFlbW9uX3RhcmdldCwgYXJncz1zZWxmLmRhZW1vbl9hcmdzCiAgICAgKQorICAgIHAuZGFlbW9uID0gVHJ1ZQogICAgIHAuc3RhcnQoKQogCiAgICAgbG9nZ2luZy5pbmZvKCJTdGFydCBzdWJwcm9jZXNzIHdpdGggUElEICVkIiwgcC5waWQpCkBAIC0xNjEsNyArMzU1LDIzIEBACiAgICAgICApCiAgICAgICByZXR1cm4gVHJ1ZQogCi0gIGRlZiBfcmVtb3ZlX3BpZGZpbGUoc2VsZik6CisgIGRlZiBfcmVtb3ZlX3BpZGZpbGUoc2VsZiwgZXhwZWN0ZWRfcGlkOiBpbnQpOgorICAgIHJlY29yZGVkX3BpZCA9IHNlbGYuX3JlYWRfcGlkX2Zyb21fcGlkZmlsZSgpCisKKyAgICBpZiByZWNvcmRlZF9waWQgaXMgTm9uZToKKyAgICAgIGxvZ2dpbmcuaW5mbygicGlkIGZpbGUgJXMgYWxyZWFkeSByZW1vdmVkLiIsIHNlbGYucGlkX2ZpbGVfcGF0aCkKKyAgICAgIHJldHVybgorCisgICAgaWYgcmVjb3JkZWRfcGlkICE9IGV4cGVjdGVkX3BpZDoKKyAgICAgIGxvZ2dpbmcud2FybmluZygKKyAgICAgICAgICAicGlkIGZpbGUgY29udGFpbnMgcGlkIGZyb20gYSBkaWZmZXJlbnQgcHJvY2VzcywgZXhwZWN0ZWQgcGlkOiAlZCwiCisgICAgICAgICAgIiBhY3R1YWwgcGlkOiAlZC4iLAorICAgICAgICAgIGV4cGVjdGVkX3BpZCwKKyAgICAgICAgICByZWNvcmRlZF9waWQsCisgICAgICApCisgICAgICByZXR1cm4KKworICAgIGxvZ2dpbmcuZGVidWcoInJlbW92aW5nIHBpZGZpbGUgd3JpdHRlbiBieSBwcm9jZXNzICVzIiwgZXhwZWN0ZWRfcGlkKQogICAgIHRyeToKICAgICAgIG9zLnJlbW92ZShzZWxmLnBpZF9maWxlX3BhdGgpCiAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgpAQCAtMTgwLDMgKzM5MCw3NCBAQAogICAgIGxvZ2dpbmcuaW5mbygicGlkX2ZpbGVfcGF0aDogJXMiLCBwaWRfZmlsZV9wYXRoKQogCiAgICAgcmV0dXJuIHBpZF9maWxlX3BhdGgKKworICBkZWYgX2dldF9wcm9jZXNzX21lbW9yeV9wZXJjZW50KHNlbGYsIHBpZDogaW50KSAtPiBmbG9hdDoKKyAgICB3aXRoIG9wZW4oZiIvcHJvYy97cGlkfS9zdGF0IiwgInIiKSBhcyBmOgorICAgICAgc3RhdF9kYXRhID0gZi5yZWFkbGluZSgpLnNwbGl0KCkKKyAgICAgICMgUlNTIGlzIHRoZSAyNHRoIGZpZWxkIGluIC9wcm9jL1twaWRdL3N0YXQKKyAgICAgIHJzc19wYWdlcyA9IGludChzdGF0X2RhdGFbMjNdKQorICAgICAgcHJvY2Vzc19tZW1vcnkgPSByc3NfcGFnZXMgKiA0ICogMTAyNCAgIyBDb252ZXJ0IHRvIGJ5dGVzCisKKyAgICByZXR1cm4gKAorICAgICAgICBwcm9jZXNzX21lbW9yeSAvIHNlbGYudG90YWxfbWVtb3J5X3NpemUKKyAgICAgICAgaWYgc2VsZi50b3RhbF9tZW1vcnlfc2l6ZQorICAgICAgICBlbHNlIDAuMAorICAgICkKKworICBkZWYgX2dldF9wcm9jZXNzX2NwdV9wZXJjZW50KHNlbGYsIHBpZDogaW50LCBpbnRlcnZhbDogaW50ID0gMSkgLT4gZmxvYXQ6CisgICAgdG90YWxfc3RhcnRfdGltZSA9IHNlbGYuX2dldF90b3RhbF9jcHVfdGltZShwaWQpCisgICAgd2l0aCBvcGVuKCIvcHJvYy91cHRpbWUiLCAiciIpIGFzIGY6CisgICAgICB1cHRpbWVfc3RhcnQgPSBmbG9hdChmLnJlYWRsaW5lKCkuc3BsaXQoKVswXSkKKworICAgIHRpbWUuc2xlZXAoaW50ZXJ2YWwpCisKKyAgICB0b3RhbF9lbmRfdGltZSA9IHNlbGYuX2dldF90b3RhbF9jcHVfdGltZShwaWQpCisgICAgd2l0aCBvcGVuKCIvcHJvYy91cHRpbWUiLCAiciIpIGFzIGY6CisgICAgICB1cHRpbWVfZW5kID0gZmxvYXQoZi5yZWFkbGluZSgpLnNwbGl0KClbMF0pCisKKyAgICByZXR1cm4gKAorICAgICAgICAodG90YWxfZW5kX3RpbWUgLSB0b3RhbF9zdGFydF90aW1lKSAvICh1cHRpbWVfZW5kIC0gdXB0aW1lX3N0YXJ0KSAqIDEwMAorICAgICkKKworICBkZWYgX2dldF90b3RhbF9jcHVfdGltZShzZWxmLCBwaWQ6IGludCkgLT4gZmxvYXQ6CisgICAgd2l0aCBvcGVuKGYiL3Byb2Mve3N0cihwaWQpfS9zdGF0IiwgInIiKSBhcyBmOgorICAgICAgc3RhdHMgPSBmLnJlYWRsaW5lKCkuc3BsaXQoKQorICAgICAgIyB1dGltZSBpcyB0aGUgMTR0aCBmaWVsZCBpbiAvcHJvYy9bcGlkXS9zdGF0IG1lYXN1cmVkIGluIGNsb2NrIHRpY2tzLgorICAgICAgdXRpbWUgPSBpbnQoc3RhdHNbMTNdKQorICAgICAgIyBzdGltZSBpcyB0aGUgMTV0aCBmaWVsZCBpbiAvcHJvYy9bcGlkXS9zdGF0IG1lYXN1cmVkIGluIGNsb2NrIHRpY2tzLgorICAgICAgc3RpbWUgPSBpbnQoc3RhdHNbMTRdKQorICAgICAgcmV0dXJuICh1dGltZSArIHN0aW1lKSAvIG9zLnN5c2NvbmYob3Muc3lzY29uZl9uYW1lc1siU0NfQ0xLX1RDSyJdKQorCisgIGRlZiBfZmluZF9hbGxfaW5zdGFuY2VzX3BpZHMoc2VsZikgLT4gbGlzdFtpbnRdOgorICAgIHBpZHMgPSBbXQorCisgICAgdHJ5OgorICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJwcyIsICItZWYiLCAiLS1uby1oZWFkZXJzIl0sIHRleHQ9VHJ1ZSkKKyAgICAgIGZvciBsaW5lIGluIG91dHB1dC5zcGxpdGxpbmVzKCk6CisgICAgICAgIHBhcnRzID0gbGluZS5zcGxpdCgpCisgICAgICAgIHByb2Nlc3NfcGF0aCA9IHBhcnRzWzddCisgICAgICAgIGlmIHBhdGhsaWIuUGF0aChwcm9jZXNzX3BhdGgpLm5hbWUgPT0gImVkaXRfbW9uaXRvciI6CisgICAgICAgICAgcGlkID0gaW50KHBhcnRzWzFdKQorICAgICAgICAgIGlmIHBpZCAhPSBzZWxmLnBpZDogICMgZXhjbHVkZSB0aGUgY3VycmVudCBwcm9jZXNzCisgICAgICAgICAgICBwaWRzLmFwcGVuZChwaWQpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgIGxvZ2dpbmcuZXhjZXB0aW9uKAorICAgICAgICAgICJGYWlsZWQgdG8gZ2V0IHBpZHMgb2YgZXhpc3RpbmcgZWRpdCBtb25pdG9ycyBmcm9tIHBzIGNvbW1hbmQuIgorICAgICAgKQorCisgICAgcmV0dXJuIHBpZHMKKworICBkZWYgX3NlbmRfZXJyb3JfZXZlbnRfdG9fY2xlYXJjdXQoc2VsZiwgZXJyb3JfdHlwZSk6CisgICAgZWRpdF9tb25pdG9yX2Vycm9yX2V2ZW50X3Byb3RvID0gZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50KAorICAgICAgICB1c2VyX25hbWU9c2VsZi51c2VyX25hbWUsCisgICAgICAgIGhvc3RfbmFtZT1zZWxmLmhvc3RfbmFtZSwKKyAgICAgICAgc291cmNlX3Jvb3Q9c2VsZi5zb3VyY2Vfcm9vdCwKKyAgICApCisgICAgZWRpdF9tb25pdG9yX2Vycm9yX2V2ZW50X3Byb3RvLmVkaXRfbW9uaXRvcl9lcnJvcl9ldmVudC5Db3B5RnJvbSgKKyAgICAgICAgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LkVkaXRNb25pdG9yRXJyb3JFdmVudChlcnJvcl90eXBlPWVycm9yX3R5cGUpCisgICAgKQorICAgIGxvZ19ldmVudCA9IGNsaWVudGFuYWx5dGljc19wYjIuTG9nRXZlbnQoCisgICAgICAgIGV2ZW50X3RpbWVfbXM9aW50KHRpbWUudGltZSgpICogMTAwMCksCisgICAgICAgIHNvdXJjZV9leHRlbnNpb249ZWRpdF9tb25pdG9yX2Vycm9yX2V2ZW50X3Byb3RvLlNlcmlhbGl6ZVRvU3RyaW5nKCksCisgICAgKQorICAgIHNlbGYuY2NsaWVudC5sb2cobG9nX2V2ZW50KQpkaWZmIC0tZ2l0IGEvdG9vbHMvZWRpdF9tb25pdG9yL2RhZW1vbl9tYW5hZ2VyX3Rlc3QucHkgYi90b29scy9lZGl0X21vbml0b3IvZGFlbW9uX21hbmFnZXJfdGVzdC5weQppbmRleCAyMTRiMDM4Li5iZTI4OTY1IDEwMDY0NAotLS0gYS90b29scy9lZGl0X21vbml0b3IvZGFlbW9uX21hbmFnZXJfdGVzdC5weQorKysgYi90b29scy9lZGl0X21vbml0b3IvZGFlbW9uX21hbmFnZXJfdGVzdC5weQpAQCAtMTQsNiArMTQsNyBAQAogCiAiIiJVbml0dGVzdHMgZm9yIERhZW1vbk1hbmFnZXIuIiIiCiAKK2ltcG9ydCBmY250bAogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKIGltcG9ydCBvcwpAQCAtMjYsNiArMjcsOCBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCiBmcm9tIGVkaXRfbW9uaXRvciBpbXBvcnQgZGFlbW9uX21hbmFnZXIKK2Zyb20gcHJvdG8gaW1wb3J0IGVkaXRfZXZlbnRfcGIyCisKIAogVEVTVF9CSU5BUllfRklMRSA9ICcvcGF0aC90by90ZXN0X2JpbmFyeScKIFRFU1RfUElEX0ZJTEVfUEFUSCA9ICgKQEAgLTQzLDYgKzQ2LDI1IEBACiAgICAgdGltZS5zbGVlcCgxKQogCiAKK2RlZiBtZW1vcnlfY29uc3VtZV9kYWVtb25fdGFyZ2V0KHNpemVfbWIpOgorICB0cnk6CisgICAgc2l6ZV9ieXRlcyA9IHNpemVfbWIgKiAxMDI0ICogMTAyNAorICAgIGR1bW15X2RhdGEgPSBieXRlYXJyYXkoc2l6ZV9ieXRlcykKKyAgICB0aW1lLnNsZWVwKDEwKQorICBleGNlcHQgTWVtb3J5RXJyb3I6CisgICAgcHJpbnQoZidQcm9jZXNzIGZhaWxlZCB0byBhbGxvY2F0ZSB7c2l6ZV9tYn0gTUIgb2YgbWVtb3J5LicpCisKKworZGVmIGNwdV9jb25zdW1lX2RhZW1vbl90YXJnZXQodGFyZ2V0X3VzYWdlX3BlcmNlbnQpOgorICB3aGlsZSBUcnVlOgorICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorICAgIHdoaWxlIHRpbWUudGltZSgpIC0gc3RhcnRfdGltZSA8IHRhcmdldF91c2FnZV9wZXJjZW50IC8gMTAwOgorICAgICAgcGFzcyAgIyBCdXN5IGxvb3AgdG8gY29uc3VtZSBDUFUKKworICAgICMgU2xlZXAgdG8gcmVkdWNlIENQVSB1c2FnZQorICAgIHRpbWUuc2xlZXAoMSAtIHRhcmdldF91c2FnZV9wZXJjZW50IC8gMTAwKQorCisKIGNsYXNzIERhZW1vbk1hbmFnZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICBAY2xhc3NtZXRob2QKQEAgLTYwLDYgKzgyLDEwIEBACiAgICAgIyBTZXRzIHRoZSB0ZW1wZGlyIHVuZGVyIHRoZSB3b3JraW5nIGRpciBzbyBhbnkgdGVtcCBmaWxlcyBjcmVhdGVkIGR1cmluZwogICAgICMgdGVzdHMgd2lsbCBiZSBjbGVhbmVkLgogICAgIHRlbXBmaWxlLnRlbXBkaXIgPSBzZWxmLndvcmtpbmdfZGlyLm5hbWUKKyAgICBzZWxmLnBhdGNoID0gbW9jay5wYXRjaC5kaWN0KAorICAgICAgICBvcy5lbnZpcm9uLCB7J0VOQUJMRV9BTkRST0lEX0VESVRfTU9OSVRPUic6ICd0cnVlJ30KKyAgICApCisgICAgc2VsZi5wYXRjaC5zdGFydCgpCiAKICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICMgQ2xlYW5zIHVwIGFueSBjaGlsZCBwcm9jZXNzZXMgbGVmdCBieSB0aGUgdGVzdHMuCkBAIC02NywyNiArOTMsMTggQEAKICAgICBzZWxmLndvcmtpbmdfZGlyLmNsZWFudXAoKQogICAgICMgUmVzdG9yZXMgdGVtcGRpci4KICAgICB0ZW1wZmlsZS50ZW1wZGlyID0gc2VsZi5vcmlnaW5hbF90ZW1wZGlyCisgICAgc2VsZi5wYXRjaC5zdG9wKCkKICAgICBzdXBlcigpLnRlYXJEb3duKCkKIAogICBkZWYgdGVzdF9zdGFydF9zdWNjZXNzX3dpdGhfbm9fZXhpc3RpbmdfaW5zdGFuY2Uoc2VsZik6CiAgICAgc2VsZi5hc3NlcnRfcnVuX3NpbXBsZV9kYWVtb25fc3VjY2VzcygpCiAKICAgZGVmIHRlc3Rfc3RhcnRfc3VjY2Vzc193aXRoX2V4aXN0aW5nX2luc3RhbmNlX3J1bm5pbmcoc2VsZik6Ci0gICAgIyBDcmVhdGUgYSBsb25nIHJ1bm5pbmcgc3VicHJvY2VzcwotICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9bG9uZ19ydW5uaW5nX2RhZW1vbikKLSAgICBwLnN0YXJ0KCkKLQotICAgICMgQ3JlYXRlIGEgcGlkZmlsZSB3aXRoIHRoZSBzdWJwcm9jZXNzIHBpZAotICAgIHBpZF9maWxlX3BhdGhfZGlyID0gcGF0aGxpYi5QYXRoKHNlbGYud29ya2luZ19kaXIubmFtZSkuam9pbnBhdGgoCi0gICAgICAgICdlZGl0X21vbml0b3InCi0gICAgKQotICAgIHBpZF9maWxlX3BhdGhfZGlyLm1rZGlyKHBhcmVudHM9VHJ1ZSwgZXhpc3Rfb2s9VHJ1ZSkKLSAgICB3aXRoIG9wZW4ocGlkX2ZpbGVfcGF0aF9kaXIuam9pbnBhdGgoVEVTVF9QSURfRklMRV9QQVRIKSwgJ3cnKSBhcyBmOgotICAgICAgZi53cml0ZShzdHIocC5waWQpKQorICAgICMgQ3JlYXRlIGEgcnVubmluZyBkYWVtb24gc3VicHJvY2VzcworICAgIHAgPSBzZWxmLl9jcmVhdGVfZmFrZV9kZWFtb25fcHJvY2VzcygpCiAKICAgICBzZWxmLmFzc2VydF9ydW5fc2ltcGxlX2RhZW1vbl9zdWNjZXNzKCkKLSAgICBwLnRlcm1pbmF0ZSgpCisgICAgc2VsZi5hc3NlcnRfbm9fc3VicHJvY2Vzc19ydW5uaW5nKCkKIAogICBkZWYgdGVzdF9zdGFydF9zdWNjZXNzX3dpdGhfZXhpc3RpbmdfaW5zdGFuY2VfYWxyZWFkeV9kZWFkKHNlbGYpOgogICAgICMgQ3JlYXRlIGEgcGlkZmlsZSB3aXRoIHBpZCB0aGF0IGRvZXMgbm90IGV4aXN0LgpAQCAtMTAyLDcgKzEyMCw3IEBACiAgIGRlZiB0ZXN0X3N0YXJ0X3N1Y2Nlc3Nfd2l0aF9leGlzdGluZ19pbnN0YW5jZV9mcm9tX2RpZmZlcmVudF9iaW5hcnkoc2VsZik6CiAgICAgIyBGaXJzdCBzdGFydCBhbiBpbnN0YW5jZSBiYXNlZCBvbiAic29tZV9iaW5hcnlfcGF0aCIKICAgICBleGlzdGluZ19kbSA9IGRhZW1vbl9tYW5hZ2VyLkRhZW1vbk1hbmFnZXIoCi0gICAgICAgICJzb21lX2JpbmFyeV9wYXRoIiwKKyAgICAgICAgJ3NvbWVfYmluYXJ5X3BhdGgnLAogICAgICAgICBkYWVtb25fdGFyZ2V0PWxvbmdfcnVubmluZ19kYWVtb24sCiAgICAgKQogICAgIGV4aXN0aW5nX2RtLnN0YXJ0KCkKQEAgLTExMCw2ICsxMjgsNTYgQEAKICAgICBzZWxmLmFzc2VydF9ydW5fc2ltcGxlX2RhZW1vbl9zdWNjZXNzKCkKICAgICBleGlzdGluZ19kbS5zdG9wKCkKIAorICBkZWYgdGVzdF9zdGFydF9yZXR1cm5fZGlyZWN0bHlfaWZfYmxvY2tfc2lnbl9leGlzdHMoc2VsZik6CisgICAgIyBDcmVhdGVzIHRoZSBibG9jayBzaWduLgorICAgIHBhdGhsaWIuUGF0aChzZWxmLndvcmtpbmdfZGlyLm5hbWUpLmpvaW5wYXRoKAorICAgICAgICBkYWVtb25fbWFuYWdlci5CTE9DS19TSUdOX0ZJTEUKKyAgICApLnRvdWNoKCkKKworICAgIGRtID0gZGFlbW9uX21hbmFnZXIuRGFlbW9uTWFuYWdlcihURVNUX0JJTkFSWV9GSUxFKQorICAgIGRtLnN0YXJ0KCkKKworICAgICMgVmVyaWZ5IG5vIGRhZW1vbiBwcm9jZXNzIGlzIHN0YXJ0ZWQuCisgICAgc2VsZi5hc3NlcnRJc05vbmUoZG0uZGFlbW9uX3Byb2Nlc3MpCisKKyAgQG1vY2sucGF0Y2guZGljdCgKKyAgICAgIG9zLmVudmlyb24sIHsnRU5BQkxFX0FORFJPSURfRURJVF9NT05JVE9SJzogJ2ZhbHNlJ30sIGNsZWFyPVRydWUKKyAgKQorICBkZWYgdGVzdF9zdGFydF9yZXR1cm5fZGlyZWN0bHlfaWZfZGlzYWJsZWQoc2VsZik6CisgICAgZG0gPSBkYWVtb25fbWFuYWdlci5EYWVtb25NYW5hZ2VyKFRFU1RfQklOQVJZX0ZJTEUpCisgICAgZG0uc3RhcnQoKQorCisgICAgIyBWZXJpZnkgbm8gZGFlbW9uIHByb2Nlc3MgaXMgc3RhcnRlZC4KKyAgICBzZWxmLmFzc2VydElzTm9uZShkbS5kYWVtb25fcHJvY2VzcykKKworICBkZWYgdGVzdF9zdGFydF9yZXR1cm5fZGlyZWN0bHlfaWZfaW5fY29nX2VudihzZWxmKToKKyAgICBkbSA9IGRhZW1vbl9tYW5hZ2VyLkRhZW1vbk1hbmFnZXIoCisgICAgICAgICcvZ29vZ2xlL2NvZy9jbG91ZC91c2VyL3dvcmtzcGFjZS9lZGl0X21vbml0b3InCisgICAgKQorICAgIGRtLnN0YXJ0KCkKKworICAgICMgVmVyaWZ5IG5vIGRhZW1vbiBwcm9jZXNzIGlzIHN0YXJ0ZWQuCisgICAgc2VsZi5hc3NlcnRJc05vbmUoZG0uZGFlbW9uX3Byb2Nlc3MpCisKKyAgZGVmIHRlc3Rfc3RhcnRfZmFpbGVkX290aGVyX2luc3RhbmNlX2lzX3N0YXJ0aW5nKHNlbGYpOgorICAgIGYgPSBvcGVuKAorICAgICAgICBwYXRobGliLlBhdGgoc2VsZi53b3JraW5nX2Rpci5uYW1lKS5qb2lucGF0aCgKKyAgICAgICAgICAgIFRFU1RfUElEX0ZJTEVfUEFUSCArICcuc2V0dXAnCisgICAgICAgICksCisgICAgICAgICd3JywKKyAgICApCisgICAgIyBBY3F1aXJlIGFuIGV4Y2x1c2l2ZSBsb2NrCisgICAgZmNudGwuZmxvY2soZiwgZmNudGwuTE9DS19FWCB8IGZjbnRsLkxPQ0tfTkIpCisKKyAgICBkbSA9IGRhZW1vbl9tYW5hZ2VyLkRhZW1vbk1hbmFnZXIoVEVTVF9CSU5BUllfRklMRSkKKyAgICBkbS5zdGFydCgpCisKKyAgICAjIFJlbGVhc2UgdGhlIGxvY2sKKyAgICBmY250bC5mbG9jayhmLCBmY250bC5MT0NLX1VOKQorICAgIGYuY2xvc2UoKQorICAgICMgVmVyaWZ5IG5vIGRhZW1vbiBwcm9jZXNzIGlzIHN0YXJ0ZWQuCisgICAgc2VsZi5hc3NlcnRJc05vbmUoZG0uZGFlbW9uX3Byb2Nlc3MpCisKICAgQG1vY2sucGF0Y2goJ29zLmtpbGwnKQogICBkZWYgdGVzdF9zdGFydF9mYWlsZWRfdG9fa2lsbF9leGlzdGluZ19pbnN0YW5jZShzZWxmLCBtb2NrX2tpbGwpOgogICAgIG1vY2tfa2lsbC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoJ1Vua25vd24gT1NFcnJvcicpCkBAIC0xMjAsMzQgKzE4OCwxMDcgQEAKICAgICB3aXRoIG9wZW4ocGlkX2ZpbGVfcGF0aF9kaXIuam9pbnBhdGgoVEVTVF9QSURfRklMRV9QQVRIKSwgJ3cnKSBhcyBmOgogICAgICAgZi53cml0ZSgnMTIzNDU2JykKIAotICAgIGRtID0gZGFlbW9uX21hbmFnZXIuRGFlbW9uTWFuYWdlcihURVNUX0JJTkFSWV9GSUxFKQotICAgIGRtLnN0YXJ0KCkKLQotICAgICMgVmVyaWZ5IG5vIGRhZW1vbiBwcm9jZXNzIGlzIHN0YXJ0ZWQuCi0gICAgc2VsZi5hc3NlcnRJc05vbmUoZG0uZGFlbW9uX3Byb2Nlc3MpCisgICAgZmFrZV9jY2xpZW50ID0gRmFrZUNsZWFyY3V0Q2xpZW50KCkKKyAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpOgorICAgICAgZG0gPSBkYWVtb25fbWFuYWdlci5EYWVtb25NYW5hZ2VyKFRFU1RfQklOQVJZX0ZJTEUsIGNjbGllbnQ9ZmFrZV9jY2xpZW50KQorICAgICAgZG0uc3RhcnQoKQorICAgIHNlbGYuX2Fzc2VydF9lcnJvcl9ldmVudF9sb2dnZWQoCisgICAgICAgIGZha2VfY2NsaWVudCwgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LkZBSUxFRF9UT19TVEFSVF9FRElUX01PTklUT1IKKyAgICApCiAKICAgZGVmIHRlc3Rfc3RhcnRfZmFpbGVkX3RvX3dyaXRlX3BpZGZpbGUoc2VsZik6CiAgICAgcGlkX2ZpbGVfcGF0aF9kaXIgPSBwYXRobGliLlBhdGgoc2VsZi53b3JraW5nX2Rpci5uYW1lKS5qb2lucGF0aCgKICAgICAgICAgJ2VkaXRfbW9uaXRvcicKICAgICApCiAgICAgcGlkX2ZpbGVfcGF0aF9kaXIubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKQorCiAgICAgIyBNYWtlcyB0aGUgZGlyZWN0b3J5IHJlYWQtb25seSBzbyB3cml0ZSBwaWRmaWxlIHdpbGwgZmFpbC4KICAgICBvcy5jaG1vZChwaWRfZmlsZV9wYXRoX2RpciwgMG81NTUpCiAKLSAgICBkbSA9IGRhZW1vbl9tYW5hZ2VyLkRhZW1vbk1hbmFnZXIoVEVTVF9CSU5BUllfRklMRSkKLSAgICBkbS5zdGFydCgpCi0KLSAgICAjIFZlcmlmaWVzIG5vIGRhZW1vbiBwcm9jZXNzIGlzIHN0YXJ0ZWQuCi0gICAgc2VsZi5hc3NlcnRJc05vbmUoZG0uZGFlbW9uX3Byb2Nlc3MpCisgICAgZmFrZV9jY2xpZW50ID0gRmFrZUNsZWFyY3V0Q2xpZW50KCkKKyAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFBlcm1pc3Npb25FcnJvcik6CisgICAgICBkbSA9IGRhZW1vbl9tYW5hZ2VyLkRhZW1vbk1hbmFnZXIoVEVTVF9CSU5BUllfRklMRSwgY2NsaWVudD1mYWtlX2NjbGllbnQpCisgICAgICBkbS5zdGFydCgpCisgICAgc2VsZi5fYXNzZXJ0X2Vycm9yX2V2ZW50X2xvZ2dlZCgKKyAgICAgICAgZmFrZV9jY2xpZW50LCBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuRkFJTEVEX1RPX1NUQVJUX0VESVRfTU9OSVRPUgorICAgICkKIAogICBkZWYgdGVzdF9zdGFydF9mYWlsZWRfdG9fc3RhcnRfZGFlbW9uX3Byb2Nlc3Moc2VsZik6CisgICAgZmFrZV9jY2xpZW50ID0gRmFrZUNsZWFyY3V0Q2xpZW50KCkKKyAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICBkbSA9IGRhZW1vbl9tYW5hZ2VyLkRhZW1vbk1hbmFnZXIoCisgICAgICAgICAgVEVTVF9CSU5BUllfRklMRSwKKyAgICAgICAgICBkYWVtb25fdGFyZ2V0PSd3cm9uZ190YXJnZXQnLAorICAgICAgICAgIGRhZW1vbl9hcmdzPSgxKSwKKyAgICAgICAgICBjY2xpZW50PWZha2VfY2NsaWVudCwKKyAgICAgICkKKyAgICAgIGRtLnN0YXJ0KCkKKyAgICBzZWxmLl9hc3NlcnRfZXJyb3JfZXZlbnRfbG9nZ2VkKAorICAgICAgICBmYWtlX2NjbGllbnQsIGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5GQUlMRURfVE9fU1RBUlRfRURJVF9NT05JVE9SCisgICAgKQorCisgIEBtb2NrLnBhdGNoKCdvcy5leGVjdicpCisgIGRlZiB0ZXN0X21vbml0b3JfcmVib290X3dpdGhfaGlnaF9tZW1vcnlfdXNhZ2Uoc2VsZiwgbW9ja19leGVjdik6CisgICAgZmFrZV9jY2xpZW50ID0gRmFrZUNsZWFyY3V0Q2xpZW50KCkKKyAgICBiaW5hcnlfZmlsZSA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgKKyAgICAgICAgZGlyPXNlbGYud29ya2luZ19kaXIubmFtZSwgZGVsZXRlPUZhbHNlCisgICAgKQorCiAgICAgZG0gPSBkYWVtb25fbWFuYWdlci5EYWVtb25NYW5hZ2VyKAotICAgICAgICBURVNUX0JJTkFSWV9GSUxFLCBkYWVtb25fdGFyZ2V0PSd3cm9uZ190YXJnZXQnLCBkYWVtb25fYXJncz0oMSkKKyAgICAgICAgYmluYXJ5X2ZpbGUubmFtZSwKKyAgICAgICAgZGFlbW9uX3RhcmdldD1tZW1vcnlfY29uc3VtZV9kYWVtb25fdGFyZ2V0LAorICAgICAgICBkYWVtb25fYXJncz0oMiwpLAorICAgICAgICBjY2xpZW50PWZha2VfY2NsaWVudCwKKyAgICApCisgICAgIyBzZXQgdGhlIGZha2UgdG90YWxfbWVtb3J5X3NpemUKKyAgICBkbS50b3RhbF9tZW1vcnlfc2l6ZSA9IDEwMCAqIDEwMjQgKiAxMDI0CisgICAgZG0uc3RhcnQoKQorICAgIGRtLm1vbml0b3JfZGFlbW9uKGludGVydmFsPTEpCisKKyAgICBzZWxmLmFzc2VydFRydWUoZG0ubWF4X21lbW9yeV91c2FnZSA+PSAwLjAyKQorICAgIHNlbGYuYXNzZXJ0X25vX3N1YnByb2Nlc3NfcnVubmluZygpCisgICAgc2VsZi5fYXNzZXJ0X2Vycm9yX2V2ZW50X2xvZ2dlZCgKKyAgICAgICAgZmFrZV9jY2xpZW50LAorICAgICAgICBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuS0lMTEVEX0RVRV9UT19FWENFRURFRF9NRU1PUllfVVNBR0UsCisgICAgKQorICAgIG1vY2tfZXhlY3YuYXNzZXJ0X2NhbGxlZF9vbmNlKCkKKworICBkZWYgdGVzdF9tb25pdG9yX2RhZW1vbl9zdWJwcm9jZXNzX2tpbGxlZF9oaWdoX2NwdV91c2FnZShzZWxmKToKKyAgICBmYWtlX2NjbGllbnQgPSBGYWtlQ2xlYXJjdXRDbGllbnQoKQorICAgIGRtID0gZGFlbW9uX21hbmFnZXIuRGFlbW9uTWFuYWdlcigKKyAgICAgICAgVEVTVF9CSU5BUllfRklMRSwKKyAgICAgICAgZGFlbW9uX3RhcmdldD1jcHVfY29uc3VtZV9kYWVtb25fdGFyZ2V0LAorICAgICAgICBkYWVtb25fYXJncz0oMjAsKSwKKyAgICAgICAgY2NsaWVudD1mYWtlX2NjbGllbnQsCiAgICAgKQogICAgIGRtLnN0YXJ0KCkKKyAgICBkbS5tb25pdG9yX2RhZW1vbihpbnRlcnZhbD0xLCBjcHVfdGhyZXNob2xkPTIwKQogCi0gICAgIyBWZXJpZmllcyBubyBkYWVtb24gcHJvY2VzcyBpcyBzdGFydGVkLgotICAgIHNlbGYuYXNzZXJ0SXNOb25lKGRtLmRhZW1vbl9wcm9jZXNzKQorICAgIHNlbGYuYXNzZXJ0VHJ1ZShkbS5tYXhfY3B1X3VzYWdlID49IDIwKQorICAgIHNlbGYuYXNzZXJ0X25vX3N1YnByb2Nlc3NfcnVubmluZygpCisgICAgc2VsZi5fYXNzZXJ0X2Vycm9yX2V2ZW50X2xvZ2dlZCgKKyAgICAgICAgZmFrZV9jY2xpZW50LAorICAgICAgICBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuS0lMTEVEX0RVRV9UT19FWENFRURFRF9DUFVfVVNBR0UsCisgICAgKQorCisgIEBtb2NrLnBhdGNoKCdzdWJwcm9jZXNzLmNoZWNrX291dHB1dCcpCisgIGRlZiB0ZXN0X21vbml0b3JfZGFlbW9uX2ZhaWxlZF9kb2VzX25vdF9tYXR0ZXIoc2VsZiwgbW9ja19vdXRwdXQpOgorICAgIG1vY2tfb3V0cHV0LnNpZGVfZWZmZWN0ID0gT1NFcnJvcignVW5rbm93biBPU0Vycm9yJykKKyAgICBzZWxmLmFzc2VydF9ydW5fc2ltcGxlX2RhZW1vbl9zdWNjZXNzKCkKKworICBAbW9jay5wYXRjaCgnb3MuZXhlY3YnKQorICBkZWYgdGVzdF9tb25pdG9yX2RhZW1vbl9yZWJvb3RfdHJpZ2dlcmVkKHNlbGYsIG1vY2tfZXhlY3YpOgorICAgIGJpbmFyeV9maWxlID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKAorICAgICAgICBkaXI9c2VsZi53b3JraW5nX2Rpci5uYW1lLCBkZWxldGU9RmFsc2UKKyAgICApCisKKyAgICBkbSA9IGRhZW1vbl9tYW5hZ2VyLkRhZW1vbk1hbmFnZXIoCisgICAgICAgIGJpbmFyeV9maWxlLm5hbWUsCisgICAgICAgIGRhZW1vbl90YXJnZXQ9bG9uZ19ydW5uaW5nX2RhZW1vbiwKKyAgICApCisgICAgZG0uc3RhcnQoKQorICAgIGRtLm1vbml0b3JfZGFlbW9uKHJlYm9vdF90aW1lb3V0PTAuNSkKKyAgICBtb2NrX2V4ZWN2LmFzc2VydF9jYWxsZWRfb25jZSgpCiAKICAgZGVmIHRlc3Rfc3RvcF9zdWNjZXNzKHNlbGYpOgogICAgIGRtID0gZGFlbW9uX21hbmFnZXIuRGFlbW9uTWFuYWdlcigKQEAgLTE2MiwyNyArMzAzLDExNCBAQAogICBAbW9jay5wYXRjaCgnb3Mua2lsbCcpCiAgIGRlZiB0ZXN0X3N0b3BfZmFpbGVkX3RvX2tpbGxfZGFlbW9uX3Byb2Nlc3Moc2VsZiwgbW9ja19raWxsKToKICAgICBtb2NrX2tpbGwuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCdVbmtub3duIE9TRXJyb3InKQorICAgIGZha2VfY2NsaWVudCA9IEZha2VDbGVhcmN1dENsaWVudCgpCiAgICAgZG0gPSBkYWVtb25fbWFuYWdlci5EYWVtb25NYW5hZ2VyKAotICAgICAgICBURVNUX0JJTkFSWV9GSUxFLCBkYWVtb25fdGFyZ2V0PWxvbmdfcnVubmluZ19kYWVtb24KKyAgICAgICAgVEVTVF9CSU5BUllfRklMRSwKKyAgICAgICAgZGFlbW9uX3RhcmdldD1sb25nX3J1bm5pbmdfZGFlbW9uLAorICAgICAgICBjY2xpZW50PWZha2VfY2NsaWVudCwKICAgICApCi0gICAgZG0uc3RhcnQoKQotICAgIGRtLnN0b3AoKQogCi0gICAgc2VsZi5hc3NlcnRUcnVlKGRtLmRhZW1vbl9wcm9jZXNzLmlzX2FsaXZlKCkpCi0gICAgc2VsZi5hc3NlcnRUcnVlKGRtLnBpZF9maWxlX3BhdGguZXhpc3RzKCkpCisgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KToKKyAgICAgIGRtLnN0YXJ0KCkKKyAgICAgIGRtLnN0b3AoKQorICAgICAgc2VsZi5hc3NlcnRUcnVlKGRtLmRhZW1vbl9wcm9jZXNzLmlzX2FsaXZlKCkpCisgICAgICBzZWxmLmFzc2VydFRydWUoZG0ucGlkX2ZpbGVfcGF0aC5leGlzdHMoKSkKKyAgICBzZWxmLl9hc3NlcnRfZXJyb3JfZXZlbnRfbG9nZ2VkKAorICAgICAgICBmYWtlX2NjbGllbnQsIGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5GQUlMRURfVE9fU1RPUF9FRElUX01PTklUT1IKKyAgICApCiAKICAgQG1vY2sucGF0Y2goJ29zLnJlbW92ZScpCiAgIGRlZiB0ZXN0X3N0b3BfZmFpbGVkX3RvX3JlbW92ZV9waWRmaWxlKHNlbGYsIG1vY2tfcmVtb3ZlKToKICAgICBtb2NrX3JlbW92ZS5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoJ1Vua25vd24gT1NFcnJvcicpCiAKKyAgICBmYWtlX2NjbGllbnQgPSBGYWtlQ2xlYXJjdXRDbGllbnQoKQorICAgIGRtID0gZGFlbW9uX21hbmFnZXIuRGFlbW9uTWFuYWdlcigKKyAgICAgICAgVEVTVF9CSU5BUllfRklMRSwKKyAgICAgICAgZGFlbW9uX3RhcmdldD1sb25nX3J1bm5pbmdfZGFlbW9uLAorICAgICAgICBjY2xpZW50PWZha2VfY2NsaWVudCwKKyAgICApCisKKyAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpOgorICAgICAgZG0uc3RhcnQoKQorICAgICAgZG0uc3RvcCgpCisgICAgICBzZWxmLmFzc2VydF9ub19zdWJwcm9jZXNzX3J1bm5pbmcoKQorICAgICAgc2VsZi5hc3NlcnRUcnVlKGRtLnBpZF9maWxlX3BhdGguZXhpc3RzKCkpCisKKyAgICBzZWxmLl9hc3NlcnRfZXJyb3JfZXZlbnRfbG9nZ2VkKAorICAgICAgICBmYWtlX2NjbGllbnQsIGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5GQUlMRURfVE9fU1RPUF9FRElUX01PTklUT1IKKyAgICApCisKKyAgQG1vY2sucGF0Y2goJ29zLmV4ZWN2JykKKyAgZGVmIHRlc3RfcmVib290X3N1Y2Nlc3Moc2VsZiwgbW9ja19leGVjdik6CisgICAgYmluYXJ5X2ZpbGUgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoCisgICAgICAgIGRpcj1zZWxmLndvcmtpbmdfZGlyLm5hbWUsIGRlbGV0ZT1GYWxzZQorICAgICkKKworICAgIGRtID0gZGFlbW9uX21hbmFnZXIuRGFlbW9uTWFuYWdlcigKKyAgICAgICAgYmluYXJ5X2ZpbGUubmFtZSwgZGFlbW9uX3RhcmdldD1sb25nX3J1bm5pbmdfZGFlbW9uCisgICAgKQorICAgIGRtLnN0YXJ0KCkKKyAgICBkbS5yZWJvb3QoKQorCisgICAgIyBWZXJpZmllcyB0aGUgb2xkIHByb2Nlc3MgaXMgc3RvcHBlZAorICAgIHNlbGYuYXNzZXJ0X25vX3N1YnByb2Nlc3NfcnVubmluZygpCisgICAgc2VsZi5hc3NlcnRGYWxzZShkbS5waWRfZmlsZV9wYXRoLmV4aXN0cygpKQorCisgICAgbW9ja19leGVjdi5hc3NlcnRfY2FsbGVkX29uY2UoKQorCisgIEBtb2NrLnBhdGNoKCdvcy5leGVjdicpCisgIGRlZiB0ZXN0X3JlYm9vdF9iaW5hcnlfbm9fbG9uZ2VyX2V4aXN0cyhzZWxmLCBtb2NrX2V4ZWN2KToKICAgICBkbSA9IGRhZW1vbl9tYW5hZ2VyLkRhZW1vbk1hbmFnZXIoCiAgICAgICAgIFRFU1RfQklOQVJZX0ZJTEUsIGRhZW1vbl90YXJnZXQ9bG9uZ19ydW5uaW5nX2RhZW1vbgogICAgICkKICAgICBkbS5zdGFydCgpCi0gICAgZG0uc3RvcCgpCiAKLSAgICBzZWxmLmFzc2VydF9ub19zdWJwcm9jZXNzX3J1bm5pbmcoKQotICAgIHNlbGYuYXNzZXJ0VHJ1ZShkbS5waWRfZmlsZV9wYXRoLmV4aXN0cygpKQorICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCk6CisgICAgICBkbS5yZWJvb3QoKQorICAgICAgbW9ja19leGVjdi5hc3NlcnRfbm90X2NhbGxlZCgpCisgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5jb2RlLCAwKQorCisgIEBtb2NrLnBhdGNoKCdvcy5leGVjdicpCisgIGRlZiB0ZXN0X3JlYm9vdF9mYWlsZWQoc2VsZiwgbW9ja19leGVjdik6CisgICAgbW9ja19leGVjdi5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoJ1Vua25vd24gT1NFcnJvcicpCisgICAgZmFrZV9jY2xpZW50ID0gRmFrZUNsZWFyY3V0Q2xpZW50KCkKKyAgICBiaW5hcnlfZmlsZSA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgKKyAgICAgICAgZGlyPXNlbGYud29ya2luZ19kaXIubmFtZSwgZGVsZXRlPUZhbHNlCisgICAgKQorCisgICAgZG0gPSBkYWVtb25fbWFuYWdlci5EYWVtb25NYW5hZ2VyKAorICAgICAgICBiaW5hcnlfZmlsZS5uYW1lLAorICAgICAgICBkYWVtb25fdGFyZ2V0PWxvbmdfcnVubmluZ19kYWVtb24sCisgICAgICAgIGNjbGllbnQ9ZmFrZV9jY2xpZW50LAorICAgICkKKyAgICBkbS5zdGFydCgpCisKKyAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpOgorICAgICAgZG0ucmVib290KCkKKyAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmNvZGUsIDEpCisgICAgc2VsZi5fYXNzZXJ0X2Vycm9yX2V2ZW50X2xvZ2dlZCgKKyAgICAgICAgZmFrZV9jY2xpZW50LCBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuRkFJTEVEX1RPX1JFQk9PVF9FRElUX01PTklUT1IKKyAgICApCisKKyAgQG1vY2sucGF0Y2goJ3N1YnByb2Nlc3MuY2hlY2tfb3V0cHV0JykKKyAgZGVmIHRlc3RfY2xlYW51cF9zdWNjZXNzKHNlbGYsIG1vY2tfY2hlY2tfb3V0cHV0KToKKyAgICBwID0gc2VsZi5fY3JlYXRlX2Zha2VfZGVhbW9uX3Byb2Nlc3MoKQorICAgIGZha2VfY2NsaWVudCA9IEZha2VDbGVhcmN1dENsaWVudCgpCisgICAgbW9ja19jaGVja19vdXRwdXQucmV0dXJuX3ZhbHVlID0gZid1c2VyIHtwLnBpZH0gMSAxIDEgMSAxIGVkaXRfbW9uaXRvciBhcmcnCisKKyAgICBkbSA9IGRhZW1vbl9tYW5hZ2VyLkRhZW1vbk1hbmFnZXIoCisgICAgICAgIFRFU1RfQklOQVJZX0ZJTEUsCisgICAgICAgIGRhZW1vbl90YXJnZXQ9bG9uZ19ydW5uaW5nX2RhZW1vbiwKKyAgICAgICAgY2NsaWVudD1mYWtlX2NjbGllbnQsCisgICAgKQorICAgIGRtLmNsZWFudXAoKQorCisgICAgc2VsZi5hc3NlcnRGYWxzZShwLmlzX2FsaXZlKCkpCisgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICBwYXRobGliLlBhdGgoc2VsZi53b3JraW5nX2Rpci5uYW1lKQorICAgICAgICAuam9pbnBhdGgoZGFlbW9uX21hbmFnZXIuQkxPQ0tfU0lHTl9GSUxFKQorICAgICAgICAuZXhpc3RzKCkKKyAgICApCiAKICAgZGVmIGFzc2VydF9ydW5fc2ltcGxlX2RhZW1vbl9zdWNjZXNzKHNlbGYpOgogICAgIGRhbW9uZV9vdXRwdXRfZmlsZSA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgKQEAgLTE5NCw3ICs0MjIsNyBAQAogICAgICAgICBkYWVtb25fYXJncz0oZGFtb25lX291dHB1dF9maWxlLm5hbWUsKSwKICAgICApCiAgICAgZG0uc3RhcnQoKQotICAgIGRtLmRhZW1vbl9wcm9jZXNzLmpvaW4oKQorICAgIGRtLm1vbml0b3JfZGFlbW9uKGludGVydmFsPTEpCiAKICAgICAjIFZlcmlmaWVzIHRoZSBleHBlY3RlZCBwaWQgZmlsZSBpcyBjcmVhdGVkLgogICAgIGV4cGVjdGVkX3BpZF9maWxlX3BhdGggPSBwYXRobGliLlBhdGgoc2VsZi53b3JraW5nX2Rpci5uYW1lKS5qb2lucGF0aCgKQEAgLTIxNCw3ICs0NDIsNyBAQAogICAgICAgICAgIHNlbGYuX2lzX3Byb2Nlc3NfYWxpdmUoY2hpbGRfcGlkKSwgZidwcm9jZXNzIHtjaGlsZF9waWR9IHN0aWxsIGFsaXZlJwogICAgICAgKQogCi0gIGRlZiBfZ2V0X2NoaWxkX3Byb2Nlc3NlcyhzZWxmLCBwYXJlbnRfcGlkKToKKyAgZGVmIF9nZXRfY2hpbGRfcHJvY2Vzc2VzKHNlbGYsIHBhcmVudF9waWQ6IGludCkgLT4gbGlzdFtpbnRdOgogICAgIHRyeToKICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAogICAgICAgICAgIFsncHMnLCAnLW8nLCAncGlkLHBwaWQnLCAnLS1uby1oZWFkZXJzJ10sIHRleHQ9VHJ1ZQpAQCAtMjI5LDcgKzQ1Nyw3IEBACiAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CiAgICAgICBzZWxmLmZhaWwoZidmYWlsZWQgdG8gZ2V0IGNoaWxkIHByb2Nlc3MsIGVycm9yOiB7ZX0nKQogCi0gIGRlZiBfaXNfcHJvY2Vzc19hbGl2ZShzZWxmLCBwaWQpOgorICBkZWYgX2lzX3Byb2Nlc3NfYWxpdmUoc2VsZiwgcGlkOiBpbnQpIC0+IGJvb2w6CiAgICAgdHJ5OgogICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCiAgICAgICAgICAgWydwcycsICctcCcsIHN0cihwaWQpLCAnLW8nLCAnc3RhdGU9J10sIHRleHQ9VHJ1ZQpAQCAtMjQ4LDYgKzQ3Niw0OSBAQAogICAgICAgICAjIHByb2Nlc3MgYWxyZWFkeSB0ZXJtaW5hdGVkCiAgICAgICAgIHBhc3MKIAorICBkZWYgX2NyZWF0ZV9mYWtlX2RlYW1vbl9wcm9jZXNzKAorICAgICAgc2VsZiwgbmFtZTogc3RyID0gVEVTVF9QSURfRklMRV9QQVRICisgICkgLT4gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3M6CisgICAgIyBDcmVhdGUgYSBsb25nIHJ1bm5pbmcgc3VicHJvY2VzcworICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9bG9uZ19ydW5uaW5nX2RhZW1vbikKKyAgICBwLnN0YXJ0KCkKKworICAgICMgQ3JlYXRlIHRoZSBwaWRmaWxlIHdpdGggdGhlIHN1YnByb2Nlc3MgcGlkCisgICAgcGlkX2ZpbGVfcGF0aF9kaXIgPSBwYXRobGliLlBhdGgoc2VsZi53b3JraW5nX2Rpci5uYW1lKS5qb2lucGF0aCgKKyAgICAgICAgJ2VkaXRfbW9uaXRvcicKKyAgICApCisgICAgcGlkX2ZpbGVfcGF0aF9kaXIubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKQorICAgIHdpdGggb3BlbihwaWRfZmlsZV9wYXRoX2Rpci5qb2lucGF0aChuYW1lKSwgJ3cnKSBhcyBmOgorICAgICAgZi53cml0ZShzdHIocC5waWQpKQorICAgIHJldHVybiBwCisKKyAgZGVmIF9hc3NlcnRfZXJyb3JfZXZlbnRfbG9nZ2VkKHNlbGYsIGZha2VfY2NsaWVudCwgZXJyb3JfdHlwZSk6CisgICAgZXJyb3JfZXZlbnRzID0gZmFrZV9jY2xpZW50LmdldF9zZW50X2V2ZW50cygpCisgICAgc2VsZi5hc3NlcnRFcXVhbHMobGVuKGVycm9yX2V2ZW50cyksIDEpCisgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5Gcm9tU3RyaW5nKAorICAgICAgICAgICAgZXJyb3JfZXZlbnRzWzBdLnNvdXJjZV9leHRlbnNpb24KKyAgICAgICAgKS5lZGl0X21vbml0b3JfZXJyb3JfZXZlbnQuZXJyb3JfdHlwZSwKKyAgICAgICAgZXJyb3JfdHlwZSwKKyAgICApCisKKworY2xhc3MgRmFrZUNsZWFyY3V0Q2xpZW50OgorCisgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICBzZWxmLnBlbmRpbmdfbG9nX2V2ZW50cyA9IFtdCisgICAgc2VsZi5zZW50X2xvZ19ldmVudCA9IFtdCisKKyAgZGVmIGxvZyhzZWxmLCBsb2dfZXZlbnQpOgorICAgIHNlbGYucGVuZGluZ19sb2dfZXZlbnRzLmFwcGVuZChsb2dfZXZlbnQpCisKKyAgZGVmIGZsdXNoX2V2ZW50cyhzZWxmKToKKyAgICBzZWxmLnNlbnRfbG9nX2V2ZW50LmV4dGVuZChzZWxmLnBlbmRpbmdfbG9nX2V2ZW50cykKKyAgICBzZWxmLnBlbmRpbmdfbG9nX2V2ZW50cy5jbGVhcigpCisKKyAgZGVmIGdldF9zZW50X2V2ZW50cyhzZWxmKToKKyAgICByZXR1cm4gc2VsZi5zZW50X2xvZ19ldmVudCArIHNlbGYucGVuZGluZ19sb2dfZXZlbnRzCisKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9lZGl0X21vbml0b3IvZWRpdF9tb25pdG9yLnB5IGIvdG9vbHMvZWRpdF9tb25pdG9yL2VkaXRfbW9uaXRvci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjUyOGU4Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvZWRpdF9tb25pdG9yL2VkaXRfbW9uaXRvci5weQpAQCAtMCwwICsxLDIyMCBAQAorIyBDb3B5cmlnaHQgMjAyNCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisKK2ltcG9ydCBnZXRwYXNzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uCitpbXBvcnQgb3MKK2ltcG9ydCBwYXRobGliCitpbXBvcnQgcGxhdGZvcm0KK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0aW1lCisKK2Zyb20gYXRlc3QubWV0cmljcyBpbXBvcnQgY2xlYXJjdXRfY2xpZW50Citmcm9tIGF0ZXN0LnByb3RvIGltcG9ydCBjbGllbnRhbmFseXRpY3NfcGIyCitmcm9tIHByb3RvIGltcG9ydCBlZGl0X2V2ZW50X3BiMgorZnJvbSB3YXRjaGRvZy5ldmVudHMgaW1wb3J0IEZpbGVTeXN0ZW1FdmVudAorZnJvbSB3YXRjaGRvZy5ldmVudHMgaW1wb3J0IFBhdHRlcm5NYXRjaGluZ0V2ZW50SGFuZGxlcgorZnJvbSB3YXRjaGRvZy5vYnNlcnZlcnMgaW1wb3J0IE9ic2VydmVyCisKKyMgRW51bSBvZiB0aGUgQ2xlYXJjdXQgbG9nIHNvdXJjZSBkZWZpbmVkIHVuZGVyCisjIC9nb29nbGUzL3dpcmVsZXNzL2FuZHJvaWQvcGxheS9wbGF5bG9nL3Byb3RvL2xvZ19zb3VyY2VfZW51bS5wcm90bworTE9HX1NPVVJDRSA9IDI1MjQKK0RFRkFVTFRfRkxVU0hfSU5URVJWQUxfU0VDT05EUyA9IDUKK0RFRkFVTFRfU0lOR0xFX0VWRU5UU19TSVpFX1RIUkVTSE9MRCA9IDEwMAorCisKK2NsYXNzIENsZWFyY3V0RXZlbnRIYW5kbGVyKFBhdHRlcm5NYXRjaGluZ0V2ZW50SGFuZGxlcik6CisKKyAgZGVmIF9faW5pdF9fKAorICAgICAgc2VsZiwKKyAgICAgIHBhdGg6IHN0ciwKKyAgICAgIGZsdXNoX2ludGVydmFsX3NlYzogaW50LAorICAgICAgc2luZ2xlX2V2ZW50c19zaXplX3RocmVzaG9sZDogaW50LAorICAgICAgaXNfZHJ5X3J1bjogYm9vbCA9IEZhbHNlLAorICAgICAgY2NsaWVudDogY2xlYXJjdXRfY2xpZW50LkNsZWFyY3V0IHwgTm9uZSA9IE5vbmUsCisgICk6CisKKyAgICBzdXBlcigpLl9faW5pdF9fKHBhdHRlcm5zPVsiKiJdLCBpZ25vcmVfZGlyZWN0b3JpZXM9VHJ1ZSkKKyAgICBzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoID0gcGF0aAorICAgIHNlbGYuZmx1c2hfaW50ZXJ2YWxfc2VjID0gZmx1c2hfaW50ZXJ2YWxfc2VjCisgICAgc2VsZi5zaW5nbGVfZXZlbnRzX3NpemVfdGhyZXNob2xkID0gc2luZ2xlX2V2ZW50c19zaXplX3RocmVzaG9sZAorICAgIHNlbGYuaXNfZHJ5X3J1biA9IGlzX2RyeV9ydW4KKyAgICBzZWxmLmNjbGllbnQgPSBjY2xpZW50IG9yIGNsZWFyY3V0X2NsaWVudC5DbGVhcmN1dChMT0dfU09VUkNFKQorCisgICAgc2VsZi51c2VyX25hbWUgPSBnZXRwYXNzLmdldHVzZXIoKQorICAgIHNlbGYuaG9zdF9uYW1lID0gcGxhdGZvcm0ubm9kZSgpCisgICAgc2VsZi5zb3VyY2Vfcm9vdCA9IG9zLmVudmlyb24uZ2V0KCJBTkRST0lEX0JVSUxEX1RPUCIsICIiKQorCisgICAgc2VsZi5wZW5kaW5nX2V2ZW50cyA9IFtdCisgICAgc2VsZi5fc2NoZWR1bGVkX2xvZ190aHJlYWQgPSBOb25lCisgICAgc2VsZi5fcGVuZGluZ19ldmVudHNfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKworICBkZWYgb25fbW92ZWQoc2VsZiwgZXZlbnQ6IEZpbGVTeXN0ZW1FdmVudCk6CisgICAgc2VsZi5fbG9nX2VkaXRfZXZlbnQoZXZlbnQsIGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5NT1ZFKQorCisgIGRlZiBvbl9jcmVhdGVkKHNlbGYsIGV2ZW50OiBGaWxlU3lzdGVtRXZlbnQpOgorICAgIHNlbGYuX2xvZ19lZGl0X2V2ZW50KGV2ZW50LCBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuQ1JFQVRFKQorCisgIGRlZiBvbl9kZWxldGVkKHNlbGYsIGV2ZW50OiBGaWxlU3lzdGVtRXZlbnQpOgorICAgIHNlbGYuX2xvZ19lZGl0X2V2ZW50KGV2ZW50LCBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuREVMRVRFKQorCisgIGRlZiBvbl9tb2RpZmllZChzZWxmLCBldmVudDogRmlsZVN5c3RlbUV2ZW50KToKKyAgICBzZWxmLl9sb2dfZWRpdF9ldmVudChldmVudCwgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50Lk1PRElGWSkKKworICBkZWYgZmx1c2hhbGwoc2VsZik6CisgICAgbG9nZ2luZy5pbmZvKCJmbHVzaGluZyBhbGwgcGVuZGluZyBldmVudHMuIikKKyAgICBpZiBzZWxmLl9zY2hlZHVsZWRfbG9nX3RocmVhZDoKKyAgICAgIGxvZ2dpbmcuaW5mbygiY2FuY2VsaW5nIGxvZyB0aHJlYWQiKQorICAgICAgc2VsZi5fc2NoZWR1bGVkX2xvZ190aHJlYWQuY2FuY2VsKCkKKyAgICAgIHNlbGYuX3NjaGVkdWxlZF9sb2dfdGhyZWFkID0gTm9uZQorCisgICAgc2VsZi5fbG9nX2NsZWFyY3V0X2V2ZW50cygpCisgICAgc2VsZi5jY2xpZW50LmZsdXNoX2V2ZW50cygpCisKKyAgZGVmIF9sb2dfZWRpdF9ldmVudCgKKyAgICAgIHNlbGYsIGV2ZW50OiBGaWxlU3lzdGVtRXZlbnQsIGVkaXRfdHlwZTogZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LkVkaXRUeXBlCisgICk6CisgICAgdHJ5OgorICAgICAgZXZlbnRfdGltZSA9IHRpbWUudGltZSgpCisKKyAgICAgIGlmIHNlbGYuX2lzX2hpZGRlbl9maWxlKHBhdGhsaWIuUGF0aChldmVudC5zcmNfcGF0aCkpOgorICAgICAgICBsb2dnaW5nLmRlYnVnKCJpZ25vcmUgaGlkZGVuIGZpbGU6ICVzLiIsIGV2ZW50LnNyY19wYXRoKQorICAgICAgICByZXR1cm4KKworICAgICAgaWYgbm90IHNlbGYuX2lzX3VuZGVyX2dpdF9wcm9qZWN0KHBhdGhsaWIuUGF0aChldmVudC5zcmNfcGF0aCkpOgorICAgICAgICBsb2dnaW5nLmRlYnVnKAorICAgICAgICAgICAgImlnbm9yZSBmaWxlICVzIHdoaWNoIGRvZXMgbm90IGJlbG9uZyB0byBhIGdpdCBwcm9qZWN0IiwKKyAgICAgICAgICAgIGV2ZW50LnNyY19wYXRoLAorICAgICAgICApCisgICAgICAgIHJldHVybgorCisgICAgICBsb2dnaW5nLmluZm8oIiVzOiAlcyIsIGV2ZW50LmV2ZW50X3R5cGUsIGV2ZW50LnNyY19wYXRoKQorCisgICAgICBldmVudF9wcm90byA9IGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudCgKKyAgICAgICAgICB1c2VyX25hbWU9c2VsZi51c2VyX25hbWUsCisgICAgICAgICAgaG9zdF9uYW1lPXNlbGYuaG9zdF9uYW1lLAorICAgICAgICAgIHNvdXJjZV9yb290PXNlbGYuc291cmNlX3Jvb3QsCisgICAgICApCisgICAgICBldmVudF9wcm90by5zaW5nbGVfZWRpdF9ldmVudC5Db3B5RnJvbSgKKyAgICAgICAgICBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuU2luZ2xlRWRpdEV2ZW50KAorICAgICAgICAgICAgICBmaWxlX3BhdGg9ZXZlbnQuc3JjX3BhdGgsIGVkaXRfdHlwZT1lZGl0X3R5cGUKKyAgICAgICAgICApCisgICAgICApCisgICAgICB3aXRoIHNlbGYuX3BlbmRpbmdfZXZlbnRzX2xvY2s6CisgICAgICAgIHNlbGYucGVuZGluZ19ldmVudHMuYXBwZW5kKChldmVudF9wcm90bywgZXZlbnRfdGltZSkpCisgICAgICAgIGlmIG5vdCBzZWxmLl9zY2hlZHVsZWRfbG9nX3RocmVhZDoKKyAgICAgICAgICBsb2dnaW5nLmRlYnVnKAorICAgICAgICAgICAgICAiU2NoZWR1bGluZyB0aHJlYWQgdG8gcnVuIGluICVkIHNlY29uZHMiLCBzZWxmLmZsdXNoX2ludGVydmFsX3NlYworICAgICAgICAgICkKKyAgICAgICAgICBzZWxmLl9zY2hlZHVsZWRfbG9nX3RocmVhZCA9IHRocmVhZGluZy5UaW1lcigKKyAgICAgICAgICAgICAgc2VsZi5mbHVzaF9pbnRlcnZhbF9zZWMsIHNlbGYuX2xvZ19jbGVhcmN1dF9ldmVudHMKKyAgICAgICAgICApCisgICAgICAgICAgc2VsZi5fc2NoZWR1bGVkX2xvZ190aHJlYWQuc3RhcnQoKQorCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgIGxvZ2dpbmcuZXhjZXB0aW9uKCJGYWlsZWQgdG8gbG9nIGVkaXQgZXZlbnQuIikKKworICBkZWYgX2lzX2hpZGRlbl9maWxlKHNlbGYsIGZpbGVfcGF0aDogcGF0aGxpYi5QYXRoKSAtPiBib29sOgorICAgIHJldHVybiBhbnkoCisgICAgICAgIHBhcnQuc3RhcnRzd2l0aCgiLiIpCisgICAgICAgIGZvciBwYXJ0IGluIGZpbGVfcGF0aC5yZWxhdGl2ZV90byhzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoKS5wYXJ0cworICAgICkKKworICBkZWYgX2lzX3VuZGVyX2dpdF9wcm9qZWN0KHNlbGYsIGZpbGVfcGF0aDogcGF0aGxpYi5QYXRoKSAtPiBib29sOgorICAgIHJvb3RfcGF0aCA9IHBhdGhsaWIuUGF0aChzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoKS5yZXNvbHZlKCkKKyAgICByZXR1cm4gYW55KAorICAgICAgICByb290X3BhdGguam9pbnBhdGgoZGlyKS5qb2lucGF0aCgnLmdpdCcpLmV4aXN0cygpCisgICAgICAgIGZvciBkaXIgaW4gZmlsZV9wYXRoLnJlbGF0aXZlX3RvKHJvb3RfcGF0aCkucGFyZW50cworICAgICkKKworICBkZWYgX2xvZ19jbGVhcmN1dF9ldmVudHMoc2VsZik6CisgICAgd2l0aCBzZWxmLl9wZW5kaW5nX2V2ZW50c19sb2NrOgorICAgICAgc2VsZi5fc2NoZWR1bGVkX2xvZ190aHJlYWQgPSBOb25lCisgICAgICBlZGl0X2V2ZW50cyA9IHNlbGYucGVuZGluZ19ldmVudHMKKyAgICAgIHNlbGYucGVuZGluZ19ldmVudHMgPSBbXQorCisgICAgcGVuZGluZ19ldmVudHNfc2l6ZSA9IGxlbihlZGl0X2V2ZW50cykKKyAgICBpZiBwZW5kaW5nX2V2ZW50c19zaXplID4gc2VsZi5zaW5nbGVfZXZlbnRzX3NpemVfdGhyZXNob2xkOgorICAgICAgbG9nZ2luZy5pbmZvKAorICAgICAgICAgICJnb3QgJWQgZXZlbnRzIGluICVkIHNlY29uZHMsIHNlbmRpbmcgYWdncmVnYXRlZCBldmVudHMgaW5zdGVhZCIsCisgICAgICAgICAgcGVuZGluZ19ldmVudHNfc2l6ZSwKKyAgICAgICAgICBzZWxmLmZsdXNoX2ludGVydmFsX3NlYywKKyAgICAgICkKKyAgICAgIGFnZ3JlZ2F0ZWRfZXZlbnRfdGltZSA9IGVkaXRfZXZlbnRzWzBdWzFdCisgICAgICBhZ2dyZWdhdGVkX2V2ZW50X3Byb3RvID0gZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50KAorICAgICAgICAgIHVzZXJfbmFtZT1zZWxmLnVzZXJfbmFtZSwKKyAgICAgICAgICBob3N0X25hbWU9c2VsZi5ob3N0X25hbWUsCisgICAgICAgICAgc291cmNlX3Jvb3Q9c2VsZi5zb3VyY2Vfcm9vdCwKKyAgICAgICkKKyAgICAgIGFnZ3JlZ2F0ZWRfZXZlbnRfcHJvdG8uYWdncmVnYXRlZF9lZGl0X2V2ZW50LkNvcHlGcm9tKAorICAgICAgICAgIGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5BZ2dyZWdhdGVkRWRpdEV2ZW50KAorICAgICAgICAgICAgICBudW1fZWRpdHM9cGVuZGluZ19ldmVudHNfc2l6ZQorICAgICAgICAgICkKKyAgICAgICkKKyAgICAgIGVkaXRfZXZlbnRzID0gWyhhZ2dyZWdhdGVkX2V2ZW50X3Byb3RvLCBhZ2dyZWdhdGVkX2V2ZW50X3RpbWUpXQorCisgICAgaWYgc2VsZi5pc19kcnlfcnVuOgorICAgICAgbG9nZ2luZy5pbmZvKCJTZW50ICVkIGVkaXQgZXZlbnRzIGluIGRyeSBydW4uIiwgbGVuKGVkaXRfZXZlbnRzKSkKKyAgICAgIHJldHVybgorCisgICAgZm9yIGV2ZW50X3Byb3RvLCBldmVudF90aW1lIGluIGVkaXRfZXZlbnRzOgorICAgICAgbG9nX2V2ZW50ID0gY2xpZW50YW5hbHl0aWNzX3BiMi5Mb2dFdmVudCgKKyAgICAgICAgICBldmVudF90aW1lX21zPWludChldmVudF90aW1lICogMTAwMCksCisgICAgICAgICAgc291cmNlX2V4dGVuc2lvbj1ldmVudF9wcm90by5TZXJpYWxpemVUb1N0cmluZygpLAorICAgICAgKQorICAgICAgc2VsZi5jY2xpZW50LmxvZyhsb2dfZXZlbnQpCisKKyAgICBsb2dnaW5nLmluZm8oInNlbnQgJWQgZWRpdCBldmVudHMiLCBsZW4oZWRpdF9ldmVudHMpKQorCisKK2RlZiBzdGFydCgKKyAgICBwYXRoOiBzdHIsCisgICAgaXNfZHJ5X3J1bjogYm9vbCA9IEZhbHNlLAorICAgIGZsdXNoX2ludGVydmFsX3NlYzogaW50ID0gREVGQVVMVF9GTFVTSF9JTlRFUlZBTF9TRUNPTkRTLAorICAgIHNpbmdsZV9ldmVudHNfc2l6ZV90aHJlc2hvbGQ6IGludCA9IERFRkFVTFRfU0lOR0xFX0VWRU5UU19TSVpFX1RIUkVTSE9MRCwKKyAgICBjY2xpZW50OiBjbGVhcmN1dF9jbGllbnQuQ2xlYXJjdXQgfCBOb25lID0gTm9uZSwKKyAgICBwaXBlX3NlbmRlcjogbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uQ29ubmVjdGlvbiB8IE5vbmUgPSBOb25lLAorKToKKyAgIiIiTWV0aG9kIHRvIHN0YXJ0IHRoZSBlZGl0IG1vbml0b3IuCisKKyAgVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgdG8gc3RhcnQgdGhlIGVkaXQgbW9uaXRvciBhcyBhIHN1YnByb2Nlc3Mgb2YKKyAgdGhlIGRhZW1vbiBtYW5hZ2VyLgorCisgIHBhcmFtczoKKyAgICBwYXRoOiBUaGUgcm9vdCBwYXRoIHRvIG1vbml0b3IKKyAgICBjY2xpZW50OiBUaGUgY2xlYXJjdXQgY2xpZW50IHRvIHNlbmQgdGhlIGVkaXQgbG9ncy4KKyAgICBjb25uOiB0aGUgc2VuZGVyIG9mIHRoZSBwaXBlIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGRlYW1vbiBtYW5hZ2VyLgorICAiIiIKKyAgZXZlbnRfaGFuZGxlciA9IENsZWFyY3V0RXZlbnRIYW5kbGVyKAorICAgICAgcGF0aCwgZmx1c2hfaW50ZXJ2YWxfc2VjLCBzaW5nbGVfZXZlbnRzX3NpemVfdGhyZXNob2xkLCBpc19kcnlfcnVuLCBjY2xpZW50KQorICBvYnNlcnZlciA9IE9ic2VydmVyKCkKKworICBsb2dnaW5nLmluZm8oIlN0YXJ0aW5nIG9ic2VydmVyIG9uIHBhdGggJXMuIiwgcGF0aCkKKyAgb2JzZXJ2ZXIuc2NoZWR1bGUoZXZlbnRfaGFuZGxlciwgcGF0aCwgcmVjdXJzaXZlPVRydWUpCisgIG9ic2VydmVyLnN0YXJ0KCkKKyAgbG9nZ2luZy5pbmZvKCJPYnNlcnZlciBzdGFydGVkLiIpCisgIGlmIHBpcGVfc2VuZGVyOgorICAgIHBpcGVfc2VuZGVyLnNlbmQoIk9ic2VydmVyIHN0YXJ0ZWQuIikKKworICB0cnk6CisgICAgd2hpbGUgVHJ1ZToKKyAgICAgIHRpbWUuc2xlZXAoMSkKKyAgZmluYWxseToKKyAgICBldmVudF9oYW5kbGVyLmZsdXNoYWxsKCkKKyAgICBvYnNlcnZlci5zdG9wKCkKKyAgICBvYnNlcnZlci5qb2luKCkKKyAgICBpZiBwaXBlX3NlbmRlcjoKKyAgICAgIHBpcGVfc2VuZGVyLmNsb3NlKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2VkaXRfbW9uaXRvci9lZGl0X21vbml0b3JfaW50ZWdyYXRpb25fdGVzdC5weSBiL3Rvb2xzL2VkaXRfbW9uaXRvci9lZGl0X21vbml0b3JfaW50ZWdyYXRpb25fdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzliOTM2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvZWRpdF9tb25pdG9yL2VkaXRfbW9uaXRvcl9pbnRlZ3JhdGlvbl90ZXN0LnB5CkBAIC0wLDAgKzEsMTY5IEBACisjIENvcHlyaWdodCAyMDI0LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyIiIkludGVncmF0aW9uIHRlc3RzIGZvciBFZGl0IE1vbml0b3IuIiIiCisKK2ltcG9ydCBnbG9iCitmcm9tIGltcG9ydGxpYiBpbXBvcnQgcmVzb3VyY2VzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgcGF0aGxpYgoraW1wb3J0IHNodXRpbAoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jaworCisKK2NsYXNzIEVkaXRNb25pdG9ySW50ZWdyYXRpb25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICBAY2xhc3NtZXRob2QKKyAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICBzdXBlcigpLnNldFVwQ2xhc3MoKQorICAgICMgQ29uZmlndXJlIHRvIHByaW50IGxvZ2dpbmcgdG8gc3Rkb3V0LgorICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoZmlsZW5hbWU9Tm9uZSwgbGV2ZWw9bG9nZ2luZy5ERUJVRykKKyAgICBjb25zb2xlID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKHN5cy5zdGRvdXQpCisgICAgbG9nZ2luZy5nZXRMb2dnZXIoIiIpLmFkZEhhbmRsZXIoY29uc29sZSkKKworICBkZWYgc2V0VXAoc2VsZik6CisgICAgc3VwZXIoKS5zZXRVcCgpCisgICAgc2VsZi53b3JraW5nX2RpciA9IHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeSgpCisgICAgc2VsZi5yb290X21vbml0b3JpbmdfcGF0aCA9IHBhdGhsaWIuUGF0aChzZWxmLndvcmtpbmdfZGlyLm5hbWUpLmpvaW5wYXRoKAorICAgICAgICAiZmlsZXMiCisgICAgKQorICAgIHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGgubWtkaXIoKQorICAgIHNlbGYuZWRpdF9tb25pdG9yX2JpbmFyeV9wYXRoID0gc2VsZi5faW1wb3J0X2V4ZWN1dGFibGUoImVkaXRfbW9uaXRvciIpCisgICAgc2VsZi5wYXRjaCA9IG1vY2sucGF0Y2guZGljdCgKKyAgICAgICAgb3MuZW52aXJvbiwgeyJFTkFCTEVfQU5EUk9JRF9FRElUX01PTklUT1IiOiAidHJ1ZSJ9CisgICAgKQorICAgIHNlbGYucGF0Y2guc3RhcnQoKQorCisgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICBzZWxmLnBhdGNoLnN0b3AoKQorICAgIHNlbGYud29ya2luZ19kaXIuY2xlYW51cCgpCisgICAgc3VwZXIoKS50ZWFyRG93bigpCisKKyAgZGVmIHRlc3RfbG9nX3NpbmdsZV9lZGl0X2V2ZW50X3N1Y2Nlc3Moc2VsZik6CisgICAgcCA9IHNlbGYuX3N0YXJ0X2VkaXRfbW9uaXRvcl9wcm9jZXNzKCkKKworICAgICMgQ3JlYXRlIHRoZSAuZ2l0IGZpbGUgdW5kZXIgdGhlIG1vbml0b3JpbmcgZGlyLgorICAgIHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGguam9pbnBhdGgoIi5naXQiKS50b3VjaCgpCisKKyAgICAjIENyZWF0ZSBhbmQgbW9kaWZ5IGEgZmlsZS4KKyAgICB0ZXN0X2ZpbGUgPSBzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoLmpvaW5wYXRoKCJ0ZXN0LnR4dCIpCisgICAgd2l0aCBvcGVuKHRlc3RfZmlsZSwgInciKSBhcyBmOgorICAgICAgZi53cml0ZSgic29tZXRoaW5nIikKKworICAgICMgTW92ZSB0aGUgZmlsZS4KKyAgICB0ZXN0X2ZpbGVfbW92ZWQgPSBzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoLmpvaW5wYXRoKCJuZXdfdGVzdC50eHQiKQorICAgIHRlc3RfZmlsZS5yZW5hbWUodGVzdF9maWxlX21vdmVkKQorCisgICAgIyBEZWxldGUgdGhlIGZpbGUuCisgICAgdGVzdF9maWxlX21vdmVkLnVubGluaygpCisKKyAgICAjIEdpdmUgc29tZSB0aW1lIGZvciB0aGUgZWRpdCBtb25pdG9yIHRvIHJlY2VpdmUgdGhlIGVkaXQgZXZlbnQuCisgICAgdGltZS5zbGVlcCgxKQorICAgICMgU3RvcCB0aGUgZWRpdCBtb25pdG9yIGFuZCBmbHVzaCBhbGwgZXZlbnRzLgorICAgIG9zLmtpbGwocC5waWQsIHNpZ25hbC5TSUdJTlQpCisgICAgcC5jb21tdW5pY2F0ZSgpCisKKyAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2dldF9sb2dnZWRfZXZlbnRzX251bSgpLCA0KQorCisgIGRlZiB0ZXN0X3N0YXJ0X211bHRpcGxlX2VkaXRfbW9uaXRvcl9vbmx5X29uZV9zdGFydGVkKHNlbGYpOgorICAgIHAxID0gc2VsZi5fc3RhcnRfZWRpdF9tb25pdG9yX3Byb2Nlc3Mod2FpdF9mb3Jfb2JzZXJ2ZXJfc3RhcnQ9RmFsc2UpCisgICAgcDIgPSBzZWxmLl9zdGFydF9lZGl0X21vbml0b3JfcHJvY2Vzcyh3YWl0X2Zvcl9vYnNlcnZlcl9zdGFydD1GYWxzZSkKKyAgICBwMyA9IHNlbGYuX3N0YXJ0X2VkaXRfbW9uaXRvcl9wcm9jZXNzKHdhaXRfZm9yX29ic2VydmVyX3N0YXJ0PUZhbHNlKQorCisgICAgbGl2ZV9wcm9jZXNzZXMgPSBzZWxmLl9nZXRfbGl2ZV9wcm9jZXNzZXMoW3AxLCBwMiwgcDNdKQorCisgICAgIyBDbGVhbnVwIGFsbCBsaXZlIHByb2Nlc3Nlcy4KKyAgICBmb3IgcCBpbiBsaXZlX3Byb2Nlc3NlczoKKyAgICAgIG9zLmtpbGwocC5waWQsIHNpZ25hbC5TSUdJTlQpCisgICAgICBwLmNvbW11bmljYXRlKCkKKworICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxpdmVfcHJvY2Vzc2VzKSwgMSkKKworICBkZWYgX3N0YXJ0X2VkaXRfbW9uaXRvcl9wcm9jZXNzKHNlbGYsIHdhaXRfZm9yX29ic2VydmVyX3N0YXJ0PVRydWUpOgorICAgIGNvbW1hbmQgPSBmIiIiCisgICAgZXhwb3J0IFRNUERJUj0ie3NlbGYud29ya2luZ19kaXIubmFtZX0iCisgICAge3NlbGYuZWRpdF9tb25pdG9yX2JpbmFyeV9wYXRofSAtLXBhdGg9e3NlbGYucm9vdF9tb25pdG9yaW5nX3BhdGh9IC0tZHJ5X3J1biIiIgorICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKAorICAgICAgICBjb21tYW5kLAorICAgICAgICBzaGVsbD1UcnVlLAorICAgICAgICB0ZXh0PVRydWUsCisgICAgICAgIHN0YXJ0X25ld19zZXNzaW9uPVRydWUsCisgICAgICAgIGV4ZWN1dGFibGU9Ii9iaW4vYmFzaCIsCisgICAgKQorICAgIGlmIHdhaXRfZm9yX29ic2VydmVyX3N0YXJ0OgorICAgICAgc2VsZi5fd2FpdF9mb3Jfb2JzZXJ2ZXJfc3RhcnQodGltZV9vdXQ9NSkKKworICAgIHJldHVybiBwCisKKyAgZGVmIF93YWl0X2Zvcl9vYnNlcnZlcl9zdGFydChzZWxmLCB0aW1lX291dCk6CisgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCisKKyAgICB3aGlsZSB0aW1lLnRpbWUoKSA8IHN0YXJ0X3RpbWUgKyB0aW1lX291dDoKKyAgICAgIGxvZ19maWxlcyA9IGdsb2IuZ2xvYihzZWxmLndvcmtpbmdfZGlyLm5hbWUgKyAiL2VkaXRfbW9uaXRvcl8qLyoubG9nIikKKyAgICAgIGlmIGxvZ19maWxlczoKKyAgICAgICAgd2l0aCBvcGVuKGxvZ19maWxlc1swXSwgInIiKSBhcyBmOgorICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICBsb2dnaW5nLmRlYnVnKCJpbml0aWFsIGxvZzogJXMiLCBsaW5lKQorICAgICAgICAgICAgaWYgbGluZS5yc3RyaXAoIlxuIikuZW5kc3dpdGgoIk9ic2VydmVyIHN0YXJ0ZWQuIik6CisgICAgICAgICAgICAgIHJldHVybgorICAgICAgZWxzZToKKyAgICAgICAgdGltZS5zbGVlcCgxKQorCisgICAgc2VsZi5mYWlsKGYiT2JzZXJ2ZXIgbm90IHN0YXJ0ZWQgaW4ge3RpbWVfb3V0fSBzZWNvbmRzLiIpCisKKyAgZGVmIF9nZXRfbG9nZ2VkX2V2ZW50c19udW0oc2VsZik6CisgICAgbG9nX2ZpbGVzID0gZ2xvYi5nbG9iKHNlbGYud29ya2luZ19kaXIubmFtZSArICIvZWRpdF9tb25pdG9yXyovKi5sb2ciKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxvZ19maWxlcyksIDEpCisKKyAgICB3aXRoIG9wZW4obG9nX2ZpbGVzWzBdLCAiciIpIGFzIGY6CisgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICBsb2dnaW5nLmRlYnVnKCJjb21wbGV0ZSBsb2c6ICVzIiwgbGluZSkKKyAgICAgICAgaWYgbGluZS5yc3RyaXAoIlxuIikuZW5kc3dpdGgoImluIGRyeSBydW4uIik6CisgICAgICAgICAgcmV0dXJuIGludChsaW5lLnNwbGl0KCI6IilbLTFdLnNwbGl0KCIgIilbMl0pCisKKyAgICByZXR1cm4gMAorCisgIGRlZiBfZ2V0X2xpdmVfcHJvY2Vzc2VzKHNlbGYsIHByb2Nlc3Nlcyk6CisgICAgbGl2ZV9wcm9jZXNzZXMgPSBbXQorICAgIGZvciBwIGluIHByb2Nlc3NlczoKKyAgICAgIHRyeToKKyAgICAgICAgcC53YWl0KHRpbWVvdXQ9NSkKKyAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLlRpbWVvdXRFeHBpcmVkIGFzIGU6CisgICAgICAgIGxpdmVfcHJvY2Vzc2VzLmFwcGVuZChwKQorICAgICAgICBsb2dnaW5nLmluZm8oInByb2Nlc3M6ICVkIHN0aWxsIGFsaXZlLiIsIHAucGlkKQorICAgICAgZWxzZToKKyAgICAgICAgbG9nZ2luZy5pbmZvKCJwcm9jZXNzOiAlZCBzdG9wcGVkLiIsIHAucGlkKQorICAgIHJldHVybiBsaXZlX3Byb2Nlc3NlcworCisgIGRlZiBfaW1wb3J0X2V4ZWN1dGFibGUoc2VsZiwgZXhlY3V0YWJsZV9uYW1lOiBzdHIpIC0+IHBhdGhsaWIuUGF0aDoKKyAgICBiaW5hcnlfZGlyID0gcGF0aGxpYi5QYXRoKHNlbGYud29ya2luZ19kaXIubmFtZSkuam9pbnBhdGgoImJpbmFyeSIpCisgICAgYmluYXJ5X2Rpci5ta2RpcigpCisgICAgZXhlY3V0YWJsZV9wYXRoID0gYmluYXJ5X2Rpci5qb2lucGF0aChleGVjdXRhYmxlX25hbWUpCisgICAgd2l0aCByZXNvdXJjZXMuYXNfZmlsZSgKKyAgICAgICAgcmVzb3VyY2VzLmZpbGVzKCJ0ZXN0ZGF0YSIpLmpvaW5wYXRoKGV4ZWN1dGFibGVfbmFtZSkKKyAgICApIGFzIGJpbmFyeToKKyAgICAgIHNodXRpbC5jb3B5KGJpbmFyeSwgZXhlY3V0YWJsZV9wYXRoKQorICAgIGV4ZWN1dGFibGVfcGF0aC5jaG1vZCgwbzc1NSkKKyAgICByZXR1cm4gZXhlY3V0YWJsZV9wYXRoCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9lZGl0X21vbml0b3IvZWRpdF9tb25pdG9yX3Rlc3QucHkgYi90b29scy9lZGl0X21vbml0b3IvZWRpdF9tb25pdG9yX3Rlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRhMzg3MQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2VkaXRfbW9uaXRvci9lZGl0X21vbml0b3JfdGVzdC5weQpAQCAtMCwwICsxLDMwMSBAQAorIyBDb3B5cmlnaHQgMjAyNCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisiIiJVbml0dGVzdHMgZm9yIEVkaXQgTW9uaXRvci4iIiIKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKK2ltcG9ydCBvcworaW1wb3J0IHBhdGhsaWIKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGF0ZXN0LnByb3RvIGltcG9ydCBjbGllbnRhbmFseXRpY3NfcGIyCitmcm9tIGVkaXRfbW9uaXRvciBpbXBvcnQgZWRpdF9tb25pdG9yCitmcm9tIHByb3RvIGltcG9ydCBlZGl0X2V2ZW50X3BiMgorCisKK2NsYXNzIEVkaXRNb25pdG9yVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgQGNsYXNzbWV0aG9kCisgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgc3VwZXIoKS5zZXRVcENsYXNzKCkKKyAgICAjIENvbmZpZ3VyZSB0byBwcmludCBsb2dnaW5nIHRvIHN0ZG91dC4KKyAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGZpbGVuYW1lPU5vbmUsIGxldmVsPWxvZ2dpbmcuREVCVUcpCisgICAgY29uc29sZSA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihzeXMuc3Rkb3V0KQorICAgIGxvZ2dpbmcuZ2V0TG9nZ2VyKCcnKS5hZGRIYW5kbGVyKGNvbnNvbGUpCisKKyAgZGVmIHNldFVwKHNlbGYpOgorICAgIHN1cGVyKCkuc2V0VXAoKQorICAgIHNlbGYud29ya2luZ19kaXIgPSB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkoKQorICAgIHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGggPSBwYXRobGliLlBhdGgoc2VsZi53b3JraW5nX2Rpci5uYW1lKS5qb2lucGF0aCgKKyAgICAgICAgJ2ZpbGVzJworICAgICkKKyAgICBzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoLm1rZGlyKCkKKyAgICBzZWxmLmxvZ19ldmVudF9kaXIgPSBwYXRobGliLlBhdGgoc2VsZi53b3JraW5nX2Rpci5uYW1lKS5qb2lucGF0aCgnbG9ncycpCisgICAgc2VsZi5sb2dfZXZlbnRfZGlyLm1rZGlyKCkKKworICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgc2VsZi53b3JraW5nX2Rpci5jbGVhbnVwKCkKKyAgICBzdXBlcigpLnRlYXJEb3duKCkKKworICBkZWYgdGVzdF9sb2dfc2luZ2xlX2VkaXRfZXZlbnRfc3VjY2VzcyhzZWxmKToKKyAgICAjIENyZWF0ZSB0aGUgLmdpdCBmaWxlIHVuZGVyIHRoZSBtb25pdG9yaW5nIGRpci4KKyAgICBzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoLmpvaW5wYXRoKCcuZ2l0JykudG91Y2goKQorICAgIGZha2VfY2NsaWVudCA9IEZha2VDbGVhcmN1dENsaWVudCgKKyAgICAgICAgbG9nX291dHB1dF9maWxlPXNlbGYubG9nX2V2ZW50X2Rpci5qb2lucGF0aCgnbG9ncy5vdXRwdXQnKQorICAgICkKKyAgICBwID0gc2VsZi5fc3RhcnRfdGVzdF9lZGl0X21vbml0b3JfcHJvY2VzcyhmYWtlX2NjbGllbnQpCisKKyAgICAjIENyZWF0ZSBhbmQgbW9kaWZ5IGEgZmlsZS4KKyAgICB0ZXN0X2ZpbGUgPSBzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoLmpvaW5wYXRoKCd0ZXN0LnR4dCcpCisgICAgd2l0aCBvcGVuKHRlc3RfZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgZi53cml0ZSgnc29tZXRoaW5nJykKKyAgICAjIE1vdmUgdGhlIGZpbGUuCisgICAgdGVzdF9maWxlX21vdmVkID0gc2VsZi5yb290X21vbml0b3JpbmdfcGF0aC5qb2lucGF0aCgnbmV3X3Rlc3QudHh0JykKKyAgICB0ZXN0X2ZpbGUucmVuYW1lKHRlc3RfZmlsZV9tb3ZlZCkKKyAgICAjIERlbGV0ZSB0aGUgZmlsZS4KKyAgICB0ZXN0X2ZpbGVfbW92ZWQudW5saW5rKCkKKyAgICAjIEdpdmUgc29tZSB0aW1lIGZvciB0aGUgZWRpdCBtb25pdG9yIHRvIHJlY2VpdmUgdGhlIGVkaXQgZXZlbnQuCisgICAgdGltZS5zbGVlcCgxKQorICAgICMgU3RvcCB0aGUgZWRpdCBtb25pdG9yIGFuZCBmbHVzaCBhbGwgZXZlbnRzLgorICAgIG9zLmtpbGwocC5waWQsIHNpZ25hbC5TSUdJTlQpCisgICAgcC5qb2luKCkKKworICAgIGxvZ2dlZF9ldmVudHMgPSBzZWxmLl9nZXRfbG9nZ2VkX2V2ZW50cygpCisgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obG9nZ2VkX2V2ZW50cyksIDQpCisgICAgZXhwZWN0ZWRfY3JlYXRlX2V2ZW50ID0gZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LlNpbmdsZUVkaXRFdmVudCgKKyAgICAgICAgZmlsZV9wYXRoPXN0cigKKyAgICAgICAgICAgIHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGguam9pbnBhdGgoJ3Rlc3QudHh0JykucmVzb2x2ZSgpCisgICAgICAgICksCisgICAgICAgIGVkaXRfdHlwZT1lZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuQ1JFQVRFLAorICAgICkKKyAgICBleHBlY3RlZF9tb2RpZnlfZXZlbnQgPSBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuU2luZ2xlRWRpdEV2ZW50KAorICAgICAgICBmaWxlX3BhdGg9c3RyKAorICAgICAgICAgICAgc2VsZi5yb290X21vbml0b3JpbmdfcGF0aC5qb2lucGF0aCgndGVzdC50eHQnKS5yZXNvbHZlKCkKKyAgICAgICAgKSwKKyAgICAgICAgZWRpdF90eXBlPWVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5NT0RJRlksCisgICAgKQorICAgIGV4cGVjdGVkX21vdmVfZXZlbnQgPSBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuU2luZ2xlRWRpdEV2ZW50KAorICAgICAgICBmaWxlX3BhdGg9c3RyKAorICAgICAgICAgICAgc2VsZi5yb290X21vbml0b3JpbmdfcGF0aC5qb2lucGF0aCgndGVzdC50eHQnKS5yZXNvbHZlKCkKKyAgICAgICAgKSwKKyAgICAgICAgZWRpdF90eXBlPWVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5NT1ZFLAorICAgICkKKyAgICBleHBlY3RlZF9kZWxldGVfZXZlbnQgPSBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuU2luZ2xlRWRpdEV2ZW50KAorICAgICAgICBmaWxlX3BhdGg9c3RyKAorICAgICAgICAgICAgc2VsZi5yb290X21vbml0b3JpbmdfcGF0aC5qb2lucGF0aCgnbmV3X3Rlc3QudHh0JykucmVzb2x2ZSgpCisgICAgICAgICksCisgICAgICAgIGVkaXRfdHlwZT1lZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuREVMRVRFLAorICAgICkKKyAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICBleHBlY3RlZF9jcmVhdGVfZXZlbnQsCisgICAgICAgIGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5Gcm9tU3RyaW5nKAorICAgICAgICAgICAgbG9nZ2VkX2V2ZW50c1swXS5zb3VyY2VfZXh0ZW5zaW9uCisgICAgICAgICkuc2luZ2xlX2VkaXRfZXZlbnQsCisgICAgKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgIGV4cGVjdGVkX21vZGlmeV9ldmVudCwKKyAgICAgICAgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LkZyb21TdHJpbmcoCisgICAgICAgICAgICBsb2dnZWRfZXZlbnRzWzFdLnNvdXJjZV9leHRlbnNpb24KKyAgICAgICAgKS5zaW5nbGVfZWRpdF9ldmVudCwKKyAgICApCisgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgZXhwZWN0ZWRfbW92ZV9ldmVudCwKKyAgICAgICAgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LkZyb21TdHJpbmcoCisgICAgICAgICAgICBsb2dnZWRfZXZlbnRzWzJdLnNvdXJjZV9leHRlbnNpb24KKyAgICAgICAgKS5zaW5nbGVfZWRpdF9ldmVudCwKKyAgICApCisgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgZXhwZWN0ZWRfZGVsZXRlX2V2ZW50LAorICAgICAgICBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuRnJvbVN0cmluZygKKyAgICAgICAgICAgIGxvZ2dlZF9ldmVudHNbM10uc291cmNlX2V4dGVuc2lvbgorICAgICAgICApLnNpbmdsZV9lZGl0X2V2ZW50LAorICAgICkKKworCisgIGRlZiB0ZXN0X2xvZ19hZ2dyZWdhdGVkX2VkaXRfZXZlbnRfc3VjY2VzcyhzZWxmKToKKyAgICAjIENyZWF0ZSB0aGUgLmdpdCBmaWxlIHVuZGVyIHRoZSBtb25pdG9yaW5nIGRpci4KKyAgICBzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoLmpvaW5wYXRoKCcuZ2l0JykudG91Y2goKQorICAgIGZha2VfY2NsaWVudCA9IEZha2VDbGVhcmN1dENsaWVudCgKKyAgICAgICAgbG9nX291dHB1dF9maWxlPXNlbGYubG9nX2V2ZW50X2Rpci5qb2lucGF0aCgnbG9ncy5vdXRwdXQnKQorICAgICkKKyAgICBwID0gc2VsZi5fc3RhcnRfdGVzdF9lZGl0X21vbml0b3JfcHJvY2VzcyhmYWtlX2NjbGllbnQpCisKKyAgICAjIENyZWF0ZSA2IHRlc3QgZmlsZXMKKyAgICBmb3IgaSBpbiByYW5nZSg2KToKKyAgICAgIHRlc3RfZmlsZSA9IHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGguam9pbnBhdGgoJ3Rlc3RfJyArIHN0cihpKSkKKyAgICAgIHRlc3RfZmlsZS50b3VjaCgpCisKKyAgICAjIEdpdmUgc29tZSB0aW1lIGZvciB0aGUgZWRpdCBtb25pdG9yIHRvIHJlY2VpdmUgdGhlIGVkaXQgZXZlbnQuCisgICAgdGltZS5zbGVlcCgxKQorICAgICMgU3RvcCB0aGUgZWRpdCBtb25pdG9yIGFuZCBmbHVzaCBhbGwgZXZlbnRzLgorICAgIG9zLmtpbGwocC5waWQsIHNpZ25hbC5TSUdJTlQpCisgICAgcC5qb2luKCkKKworICAgIGxvZ2dlZF9ldmVudHMgPSBzZWxmLl9nZXRfbG9nZ2VkX2V2ZW50cygpCisgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obG9nZ2VkX2V2ZW50cyksIDEpCisKKyAgICBleHBlY3RlZF9hZ2dyZWdhdGVkX2VkaXRfZXZlbnQgPSAoCisgICAgICAgIGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5BZ2dyZWdhdGVkRWRpdEV2ZW50KAorICAgICAgICAgICAgbnVtX2VkaXRzPTYsCisgICAgICAgICkKKyAgICApCisKKyAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICBleHBlY3RlZF9hZ2dyZWdhdGVkX2VkaXRfZXZlbnQsCisgICAgICAgIGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5Gcm9tU3RyaW5nKAorICAgICAgICAgICAgbG9nZ2VkX2V2ZW50c1swXS5zb3VyY2VfZXh0ZW5zaW9uCisgICAgICAgICkuYWdncmVnYXRlZF9lZGl0X2V2ZW50LAorICAgICkKKworICBkZWYgdGVzdF9kb19ub3RfbG9nX2VkaXRfZXZlbnRfZm9yX2RpcmVjdG9yeV9jaGFuZ2Uoc2VsZik6CisgICAgIyBDcmVhdGUgdGhlIC5naXQgZmlsZSB1bmRlciB0aGUgbW9uaXRvcmluZyBkaXIuCisgICAgc2VsZi5yb290X21vbml0b3JpbmdfcGF0aC5qb2lucGF0aCgnLmdpdCcpLnRvdWNoKCkKKyAgICBmYWtlX2NjbGllbnQgPSBGYWtlQ2xlYXJjdXRDbGllbnQoCisgICAgICAgIGxvZ19vdXRwdXRfZmlsZT1zZWxmLmxvZ19ldmVudF9kaXIuam9pbnBhdGgoJ2xvZ3Mub3V0cHV0JykKKyAgICApCisgICAgcCA9IHNlbGYuX3N0YXJ0X3Rlc3RfZWRpdF9tb25pdG9yX3Byb2Nlc3MoZmFrZV9jY2xpZW50KQorCisgICAgIyBDcmVhdGUgYSBzdWIgZGlyZWN0b3J5CisgICAgc2VsZi5yb290X21vbml0b3JpbmdfcGF0aC5qb2lucGF0aCgndGVzdF9kaXInKS5ta2RpcigpCisgICAgIyBHaXZlIHNvbWUgdGltZSBmb3IgdGhlIGVkaXQgbW9uaXRvciB0byByZWNlaXZlIHRoZSBlZGl0IGV2ZW50LgorICAgIHRpbWUuc2xlZXAoMSkKKyAgICAjIFN0b3AgdGhlIGVkaXQgbW9uaXRvciBhbmQgZmx1c2ggYWxsIGV2ZW50cy4KKyAgICBvcy5raWxsKHAucGlkLCBzaWduYWwuU0lHSU5UKQorICAgIHAuam9pbigpCisKKyAgICBsb2dnZWRfZXZlbnRzID0gc2VsZi5fZ2V0X2xvZ2dlZF9ldmVudHMoKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxvZ2dlZF9ldmVudHMpLCAwKQorCisgIGRlZiB0ZXN0X2RvX25vdF9sb2dfZWRpdF9ldmVudF9mb3JfaGlkZGVuX2ZpbGUoc2VsZik6CisgICAgIyBDcmVhdGUgdGhlIC5naXQgZmlsZSB1bmRlciB0aGUgbW9uaXRvcmluZyBkaXIuCisgICAgc2VsZi5yb290X21vbml0b3JpbmdfcGF0aC5qb2lucGF0aCgnLmdpdCcpLnRvdWNoKCkKKyAgICBmYWtlX2NjbGllbnQgPSBGYWtlQ2xlYXJjdXRDbGllbnQoCisgICAgICAgIGxvZ19vdXRwdXRfZmlsZT1zZWxmLmxvZ19ldmVudF9kaXIuam9pbnBhdGgoJ2xvZ3Mub3V0cHV0JykKKyAgICApCisgICAgcCA9IHNlbGYuX3N0YXJ0X3Rlc3RfZWRpdF9tb25pdG9yX3Byb2Nlc3MoZmFrZV9jY2xpZW50KQorCisgICAgIyBDcmVhdGUgYSBoaWRkZW4gZmlsZS4KKyAgICBzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoLmpvaW5wYXRoKCcudGVzdC50eHQnKS50b3VjaCgpCisgICAgIyBDcmVhdGUgYSBoaWRkZW4gZGlyLgorICAgIGhpZGRlbl9kaXIgPSBzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoLmpvaW5wYXRoKCcudGVzdCcpCisgICAgaGlkZGVuX2Rpci5ta2RpcigpCisgICAgaGlkZGVuX2Rpci5qb2lucGF0aCgndGVzdC50eHQnKS50b3VjaCgpCisgICAgIyBHaXZlIHNvbWUgdGltZSBmb3IgdGhlIGVkaXQgbW9uaXRvciB0byByZWNlaXZlIHRoZSBlZGl0IGV2ZW50LgorICAgIHRpbWUuc2xlZXAoMSkKKyAgICAjIFN0b3AgdGhlIGVkaXQgbW9uaXRvciBhbmQgZmx1c2ggYWxsIGV2ZW50cy4KKyAgICBvcy5raWxsKHAucGlkLCBzaWduYWwuU0lHSU5UKQorICAgIHAuam9pbigpCisKKyAgICBsb2dnZWRfZXZlbnRzID0gc2VsZi5fZ2V0X2xvZ2dlZF9ldmVudHMoKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxvZ2dlZF9ldmVudHMpLCAwKQorCisgIGRlZiB0ZXN0X2RvX25vdF9sb2dfZWRpdF9ldmVudF9mb3Jfbm9uX2dpdF9wcm9qZWN0X2ZpbGUoc2VsZik6CisgICAgZmFrZV9jY2xpZW50ID0gRmFrZUNsZWFyY3V0Q2xpZW50KAorICAgICAgICBsb2dfb3V0cHV0X2ZpbGU9c2VsZi5sb2dfZXZlbnRfZGlyLmpvaW5wYXRoKCdsb2dzLm91dHB1dCcpCisgICAgKQorICAgIHAgPSBzZWxmLl9zdGFydF90ZXN0X2VkaXRfbW9uaXRvcl9wcm9jZXNzKGZha2VfY2NsaWVudCkKKworICAgICMgQ3JlYXRlIGEgZmlsZS4KKyAgICBzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoLmpvaW5wYXRoKCd0ZXN0LnR4dCcpLnRvdWNoKCkKKyAgICAjIENyZWF0ZSBhIGZpbGUgdW5kZXIgYSBzdWIgZGlyLgorICAgIHN1Yl9kaXIgPSBzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoLmpvaW5wYXRoKCcudGVzdCcpCisgICAgc3ViX2Rpci5ta2RpcigpCisgICAgc3ViX2Rpci5qb2lucGF0aCgndGVzdC50eHQnKS50b3VjaCgpCisgICAgIyBHaXZlIHNvbWUgdGltZSBmb3IgdGhlIGVkaXQgbW9uaXRvciB0byByZWNlaXZlIHRoZSBlZGl0IGV2ZW50LgorICAgIHRpbWUuc2xlZXAoMSkKKyAgICAjIFN0b3AgdGhlIGVkaXQgbW9uaXRvciBhbmQgZmx1c2ggYWxsIGV2ZW50cy4KKyAgICBvcy5raWxsKHAucGlkLCBzaWduYWwuU0lHSU5UKQorICAgIHAuam9pbigpCisKKyAgICBsb2dnZWRfZXZlbnRzID0gc2VsZi5fZ2V0X2xvZ2dlZF9ldmVudHMoKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxvZ2dlZF9ldmVudHMpLCAwKQorCisgIGRlZiB0ZXN0X2xvZ19lZGl0X2V2ZW50X2ZhaWwoc2VsZik6CisgICAgIyBDcmVhdGUgdGhlIC5naXQgZmlsZSB1bmRlciB0aGUgbW9uaXRvcmluZyBkaXIuCisgICAgc2VsZi5yb290X21vbml0b3JpbmdfcGF0aC5qb2lucGF0aCgnLmdpdCcpLnRvdWNoKCkKKyAgICBmYWtlX2NjbGllbnQgPSBGYWtlQ2xlYXJjdXRDbGllbnQoCisgICAgICAgIGxvZ19vdXRwdXRfZmlsZT1zZWxmLmxvZ19ldmVudF9kaXIuam9pbnBhdGgoJ2xvZ3Mub3V0cHV0JyksCisgICAgICAgIHJhaXNlX2xvZ19leGNlcHRpb249VHJ1ZSwKKyAgICApCisgICAgcCA9IHNlbGYuX3N0YXJ0X3Rlc3RfZWRpdF9tb25pdG9yX3Byb2Nlc3MoZmFrZV9jY2xpZW50KQorCisgICAgIyBDcmVhdGUgYSBmaWxlLgorICAgIHNlbGYucm9vdF9tb25pdG9yaW5nX3BhdGguam9pbnBhdGgoJ3Rlc3QudHh0JykudG91Y2goKQorICAgICMgR2l2ZSBzb21lIHRpbWUgZm9yIHRoZSBlZGl0IG1vbml0b3IgdG8gcmVjZWl2ZSB0aGUgZWRpdCBldmVudC4KKyAgICB0aW1lLnNsZWVwKDEpCisgICAgIyBTdG9wIHRoZSBlZGl0IG1vbml0b3IgYW5kIGZsdXNoIGFsbCBldmVudHMuCisgICAgb3Mua2lsbChwLnBpZCwgc2lnbmFsLlNJR0lOVCkKKyAgICBwLmpvaW4oKQorCisgICAgbG9nZ2VkX2V2ZW50cyA9IHNlbGYuX2dldF9sb2dnZWRfZXZlbnRzKCkKKyAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsb2dnZWRfZXZlbnRzKSwgMCkKKworICBkZWYgX3N0YXJ0X3Rlc3RfZWRpdF9tb25pdG9yX3Byb2Nlc3MoCisgICAgICBzZWxmLCBjY2xpZW50CisgICkgLT4gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3M6CisgICAgcmVjZWl2ZXIsIHNlbmRlciA9IG11bHRpcHJvY2Vzc2luZy5QaXBlKCkKKyAgICAjIFN0YXJ0IGVkaXQgbW9uaXRvciBpbiBhIHN1YnByb2Nlc3MuCisgICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKAorICAgICAgICB0YXJnZXQ9ZWRpdF9tb25pdG9yLnN0YXJ0LAorICAgICAgICBhcmdzPShzdHIoc2VsZi5yb290X21vbml0b3JpbmdfcGF0aC5yZXNvbHZlKCkpLCBGYWxzZSwgMC41LCA1LCBjY2xpZW50LCBzZW5kZXIpLAorICAgICkKKyAgICBwLmRhZW1vbiA9IFRydWUKKyAgICBwLnN0YXJ0KCkKKworICAgICMgV2FpdCB1bnRpbCBvYnNlcnZlciBzdGFydGVkLgorICAgIHJlY2VpdmVkX2RhdGEgPSByZWNlaXZlci5yZWN2KCkKKyAgICBzZWxmLmFzc2VydEVxdWFscyhyZWNlaXZlZF9kYXRhLCAnT2JzZXJ2ZXIgc3RhcnRlZC4nKQorCisgICAgcmVjZWl2ZXIuY2xvc2UoKQorICAgIHJldHVybiBwCisKKyAgZGVmIF9nZXRfbG9nZ2VkX2V2ZW50cyhzZWxmKToKKyAgICB3aXRoIG9wZW4oc2VsZi5sb2dfZXZlbnRfZGlyLmpvaW5wYXRoKCdsb2dzLm91dHB1dCcpLCAncmInKSBhcyBmOgorICAgICAgZGF0YSA9IGYucmVhZCgpCisKKyAgICByZXR1cm4gWworICAgICAgICBjbGllbnRhbmFseXRpY3NfcGIyLkxvZ0V2ZW50LkZyb21TdHJpbmcocmVjb3JkKQorICAgICAgICBmb3IgcmVjb3JkIGluIGRhdGEuc3BsaXQoYidceDAwJykKKyAgICAgICAgaWYgcmVjb3JkCisgICAgXQorCisKK2NsYXNzIEZha2VDbGVhcmN1dENsaWVudDoKKworICBkZWYgX19pbml0X18oc2VsZiwgbG9nX291dHB1dF9maWxlLCByYWlzZV9sb2dfZXhjZXB0aW9uPUZhbHNlKToKKyAgICBzZWxmLnBlbmRpbmdfbG9nX2V2ZW50cyA9IFtdCisgICAgc2VsZi5yYWlzZV9sb2dfZXhjZXB0aW9uID0gcmFpc2VfbG9nX2V4Y2VwdGlvbgorICAgIHNlbGYubG9nX291dHB1dF9maWxlID0gbG9nX291dHB1dF9maWxlCisKKyAgZGVmIGxvZyhzZWxmLCBsb2dfZXZlbnQpOgorICAgIGlmIHNlbGYucmFpc2VfbG9nX2V4Y2VwdGlvbjoKKyAgICAgIHJhaXNlIEV4Y2VwdGlvbigndW5rbm93biBleGNlcHRpb24nKQorICAgIHNlbGYucGVuZGluZ19sb2dfZXZlbnRzLmFwcGVuZChsb2dfZXZlbnQpCisKKyAgZGVmIGZsdXNoX2V2ZW50cyhzZWxmKToKKyAgICBkZWxpbWl0ZXIgPSBiJ1x4MDAnICAjIFVzZSBhIG51bGwgYnl0ZSBhcyB0aGUgZGVsaW1pdGVyCisgICAgd2l0aCBvcGVuKHNlbGYubG9nX291dHB1dF9maWxlLCAnd2InKSBhcyBmOgorICAgICAgZm9yIGxvZ19ldmVudCBpbiBzZWxmLnBlbmRpbmdfbG9nX2V2ZW50czoKKyAgICAgICAgZi53cml0ZShsb2dfZXZlbnQuU2VyaWFsaXplVG9TdHJpbmcoKSArIGRlbGltaXRlcikKKworICAgIHNlbGYucGVuZGluZ19sb2dfZXZlbnRzLmNsZWFyKCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2VkaXRfbW9uaXRvci9tYWluLnB5IGIvdG9vbHMvZWRpdF9tb25pdG9yL21haW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MyZDE4MwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2VkaXRfbW9uaXRvci9tYWluLnB5CkBAIC0wLDAgKzEsMTE5IEBACisjIENvcHlyaWdodCAyMDI0LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCisKK2Zyb20gZWRpdF9tb25pdG9yIGltcG9ydCBkYWVtb25fbWFuYWdlcgorZnJvbSBlZGl0X21vbml0b3IgaW1wb3J0IGVkaXRfbW9uaXRvcgorCisKK2RlZiBjcmVhdGVfYXJnX3BhcnNlcigpOgorICAiIiJDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IGFyZyBwYXJzZXIuIiIiCisKKyAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCisgICAgICBkZXNjcmlwdGlvbj0oCisgICAgICAgICAgJ01vbml0b3JzIGVkaXRzIGluIEFuZHJvaWQgc291cmNlIGNvZGUgYW5kIHVwbG9hZHMgdGhlIGVkaXQgbG9ncy4nCisgICAgICApLAorICAgICAgYWRkX2hlbHA9VHJ1ZSwKKyAgICAgIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5SYXdEZXNjcmlwdGlvbkhlbHBGb3JtYXR0ZXIsCisgICkKKworICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgJy0tcGF0aCcsCisgICAgICB0eXBlPXN0ciwKKyAgICAgIHJlcXVpcmVkPVRydWUsCisgICAgICBoZWxwPSdSb290IHBhdGggdG8gbW9uaXRvciB0aGUgZWRpdCBldmVudHMuJywKKyAgKQorCisgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAnLS1kcnlfcnVuJywKKyAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICBoZWxwPSdEcnkgcnVuIHRoZSBlZGl0IG1vbml0b3IuIFRoaXMgc3RhcnRzIHRoZSBlZGl0IG1vbml0b3IgcHJvY2VzcyB3aXRob3V0IGFjdHVhbGx5IHNlbmQgdGhlIGVkaXQgbG9ncyB0byBjbGVhcmN1dC4nLAorICApCisKKyAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICctLWZvcmNlX2NsZWFudXAnLAorICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgIGhlbHA9KAorICAgICAgICAgICdJbnN0ZWFkIG9mIHN0YXJ0IGEgbmV3IGVkaXQgbW9uaXRvciwgZm9yY2Ugc3RvcCBhbGwgZXhpc3RpbmcgZWRpdCcKKyAgICAgICAgICAnIG1vbml0b3JzIGluIHRoZSBzeXN0ZW0uIFRoaXMgb3B0aW9uIGlzIG9ubHkgdXNlZCBpbiBlbWVyZ2VudCBjYXNlcycKKyAgICAgICAgICAnIHdoZW4gd2Ugd2FudCB0byBwcmV2ZW50IHVzZXIgZGFtYWdlIGJ5IHRoZSBlZGl0IG1vbml0b3IuJworICAgICAgKSwKKyAgKQorCisgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAnLS12ZXJib3NlJywKKyAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICBoZWxwPSgKKyAgICAgICAgICAnTG9nIHZlcmJvc2UgaW5mbyBpbiB0aGUgbG9nIGZpbGUgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLicKKyAgICAgICksCisgICkKKworICByZXR1cm4gcGFyc2VyCisKKworZGVmIGNvbmZpZ3VyZV9sb2dnaW5nKHZlcmJvc2U9RmFsc2UpOgorICByb290X2xvZ2dpbmdfZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2VkaXRfbW9uaXRvcl8nKQorICBfLCBsb2dfcGF0aCA9IHRlbXBmaWxlLm1rc3RlbXAoZGlyPXJvb3RfbG9nZ2luZ19kaXIsIHN1ZmZpeD0nLmxvZycpCisKKworICBsb2dfZm10ID0gJyUoYXNjdGltZSlzLiUobXNlY3MpMDNkICUoZmlsZW5hbWUpczolKGxpbmVubylzOiUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzJworICBkYXRlX2ZtdCA9ICclWS0lbS0lZCAlSDolTTolUycKKyAgbG9nX2xldmVsID0gbG9nZ2luZy5ERUJVRyBpZiB2ZXJib3NlIGVsc2UgbG9nZ2luZy5JTkZPCisKKyAgbG9nZ2luZy5iYXNpY0NvbmZpZygKKyAgICAgIGZpbGVuYW1lPWxvZ19wYXRoLCBsZXZlbD1sb2dfbGV2ZWwsIGZvcm1hdD1sb2dfZm10LCBkYXRlZm10PWRhdGVfZm10CisgICkKKyAgIyBGaWx0ZXIgb3V0IGxvZ3MgZnJvbSBpbm90aWZ5X2J1ZmYgdG8gcHJldmVudCBsb2cgcG9sbHV0aW9uLgorICBsb2dnaW5nLmdldExvZ2dlcignd2F0Y2hkb2cub2JzZXJ2ZXJzLmlub3RpZnlfYnVmZmVyJykuYWRkRmlsdGVyKAorICAgICAgbGFtYmRhIHJlY29yZDogcmVjb3JkLmZpbGVuYW1lICE9ICdpbm90aWZ5X2J1ZmZlci5weScpCisgIHByaW50KGYnbG9nZ2luZyB0byBmaWxlIHtsb2dfcGF0aH0nKQorCisKK2RlZiB0ZXJtX3NpZ25hbF9oYW5kbGVyKF9zaWduYWxfbnVtYmVyLCBfZnJhbWUpOgorICBsb2dnaW5nLmluZm8oJ1Byb2Nlc3MgJWQgcmVjZWl2ZWQgU0lHVEVSTSwgVGVybWluYXRpbmcuLi4nLCBvcy5nZXRwaWQoKSkKKyAgc3lzLmV4aXQoMCkKKworCitkZWYgbWFpbihhcmd2OiBsaXN0W3N0cl0pOgorICBhcmdzID0gY3JlYXRlX2FyZ19wYXJzZXIoKS5wYXJzZV9hcmdzKGFyZ3ZbMTpdKQorICBjb25maWd1cmVfbG9nZ2luZyhhcmdzLnZlcmJvc2UpCisgIGlmIGFyZ3MuZHJ5X3J1bjoKKyAgICBsb2dnaW5nLmluZm8oJ1RoaXMgaXMgYSBkcnkgcnVuLicpCisgIGRtID0gZGFlbW9uX21hbmFnZXIuRGFlbW9uTWFuYWdlcigKKyAgICAgIGJpbmFyeV9wYXRoPWFyZ3ZbMF0sCisgICAgICBkYWVtb25fdGFyZ2V0PWVkaXRfbW9uaXRvci5zdGFydCwKKyAgICAgIGRhZW1vbl9hcmdzPShhcmdzLnBhdGgsIGFyZ3MuZHJ5X3J1biksCisgICkKKworICB0cnk6CisgICAgaWYgYXJncy5mb3JjZV9jbGVhbnVwOgorICAgICAgZG0uY2xlYW51cCgpCisgICAgZWxzZToKKyAgICAgIGRtLnN0YXJ0KCkKKyAgICAgIGRtLm1vbml0b3JfZGFlbW9uKCkKKyAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICBsb2dnaW5nLmV4Y2VwdGlvbignVW5leHBlY3RlZCBleGNlcHRpb24gcmFpc2VkIHdoZW4gcnVuIGRhZW1vbi4nKQorICBmaW5hbGx5OgorICAgIGRtLnN0b3AoKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1RFUk0sIHRlcm1fc2lnbmFsX2hhbmRsZXIpCisgIG1haW4oc3lzLmFyZ3YpCmRpZmYgLS1naXQgYS90b29scy9lZGl0X21vbml0b3IvcHJvdG8vZWRpdF9ldmVudC5wcm90byBiL3Rvb2xzL2VkaXRfbW9uaXRvci9wcm90by9lZGl0X2V2ZW50LnByb3RvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhY2MyZTcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9lZGl0X21vbml0b3IvcHJvdG8vZWRpdF9ldmVudC5wcm90bwpAQCAtMCwwICsxLDU3IEBACitzeW50YXggPSAicHJvdG8zIjsKKworcGFja2FnZSB0b29scy5hc3VpdGUuZWRpdF9tb25pdG9yOworCittZXNzYWdlIEVkaXRFdmVudCB7CisgIGVudW0gRWRpdFR5cGUgeworICAgIFVOU1VQUE9SVEVEX1RZUEUgPSAwOworICAgIENSRUFURSA9IDE7CisgICAgTU9ESUZZID0gMjsKKyAgICBERUxFVEUgPSAzOworICAgIE1PVkUgPSA0OworICB9CisKKyAgZW51bSBFcnJvclR5cGUgeworICAgIFVOS05PV05fRVJST1IgPSAwOworICAgIEZBSUxFRF9UT19TVEFSVF9FRElUX01PTklUT1IgPSAxOworICAgIEZBSUxFRF9UT19TVE9QX0VESVRfTU9OSVRPUiA9IDI7CisgICAgRkFJTEVEX1RPX1JFQk9PVF9FRElUX01PTklUT1IgPSAzOworICAgIEtJTExFRF9EVUVfVE9fRVhDRUVERURfTUVNT1JZX1VTQUdFID0gNDsKKyAgICBGT1JDRV9DTEVBTlVQID0gNTsKKyAgICBLSUxMRURfRFVFX1RPX0VYQ0VFREVEX0NQVV9VU0FHRSA9IDY7CisgIH0KKworICAvLyBFdmVudCB0aGF0IGxvZ3MgYSBzaW5nbGUgZWRpdAorICBtZXNzYWdlIFNpbmdsZUVkaXRFdmVudCB7CisgICAgLy8gRnVsbCBwYXRoIG9mIHRoZSBmaWxlIHRoYXQgZWRpdGVkLgorICAgIHN0cmluZyBmaWxlX3BhdGggPSAxOworICAgIC8vIFR5cGUgb2YgdGhlIGVkaXQuCisgICAgRWRpdFR5cGUgZWRpdF90eXBlID0gMjsKKyAgfQorCisgIC8vIEV2ZW50IHRoYXQgbG9ncyBhZ2dyZWdhdGVkIGluZm8gZm9yIGEgc2V0IG9mIGVkaXRzLgorICBtZXNzYWdlIEFnZ3JlZ2F0ZWRFZGl0RXZlbnQgeworICAgIGludDMyIG51bV9lZGl0cyA9IDE7CisgIH0KKworICAvLyBFdmVudCB0aGF0IGxvZ3MgZXJyb3JzIGhhcHBlbmVkIGluIHRoZSBlZGl0IG1vbml0b3IuCisgIG1lc3NhZ2UgRWRpdE1vbml0b3JFcnJvckV2ZW50IHsKKyAgICBFcnJvclR5cGUgZXJyb3JfdHlwZSA9IDE7CisgIH0KKworICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLy8gRklFTERTIEZPUiBFZGl0RXZlbnQKKyAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC8vIEludGVybmFsIHVzZXIgbmFtZS4KKyAgc3RyaW5nIHVzZXJfbmFtZSA9IDE7CisgIC8vIFRoZSByb290IG9mIEFuZHJvaWQgc291cmNlLgorICBzdHJpbmcgc291cmNlX3Jvb3QgPSAyOworICAvLyBOYW1lIG9mIHRoZSBob3N0IHdvcmtzdGF0aW9uLgorICBzdHJpbmcgaG9zdF9uYW1lID0gMzsKKworICBvbmVvZiBldmVudCB7CisgICAgU2luZ2xlRWRpdEV2ZW50IHNpbmdsZV9lZGl0X2V2ZW50ID0gNDsKKyAgICBBZ2dyZWdhdGVkRWRpdEV2ZW50IGFnZ3JlZ2F0ZWRfZWRpdF9ldmVudCA9IDU7CisgICAgRWRpdE1vbml0b3JFcnJvckV2ZW50IGVkaXRfbW9uaXRvcl9lcnJvcl9ldmVudCA9IDY7CisgIH0KK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2VkaXRfbW9uaXRvci91dGlscy5weSBiL3Rvb2xzL2VkaXRfbW9uaXRvci91dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODg5NDlkCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvZWRpdF9tb25pdG9yL3V0aWxzLnB5CkBAIC0wLDAgKzEsNTMgQEAKKyMgQ29weXJpZ2h0IDIwMjQsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworaW1wb3J0IGhhc2hsaWIKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MKKworCitkZWYgaXNfZmVhdHVyZV9lbmFibGVkKAorICAgIGZlYXR1cmVfbmFtZTogc3RyLAorICAgIHVzZXJfbmFtZTogc3RyLAorICAgIGVuYWJsZV9mbGFnOiBzdHIgPSBOb25lLAorICAgIHJvbGxvdXRfcGVyY2VudDogaW50ID0gMTAwLAorKSAtPiBib29sOgorICAiIiJEZXRlcm1pbmUgd2hldGhlciB0aGUgZ2l2ZW4gZmVhdHVyZSBpcyBlbmFibGVkLgorCisgIFdoZXRoZXIgYSBnaXZlbiBmZWF0dXJlIGlzIGVuYWJsZWQgb3Igbm90IGRlcGVuZHMgb24gdHdvIGZsYWdzOiAxKSB0aGUKKyAgZW5hYmxlX2ZsYWcgdGhhdCBleHBsaWNpdGx5IGVuYWJsZS9kaXNhYmxlIHRoZSBmZWF0dXJlIGFuZCAyKSB0aGUgcm9sbG91dF9mbGFnCisgIHRoYXQgY29udHJvbHMgdGhlIHJvbGxvdXQgcGVyY2VudGFnZS4KKworICBBcmdzOgorICAgIGZlYXR1cmVfbmFtZTogbmFtZSBvZiB0aGUgZmVhdHVyZS4KKyAgICB1c2VyX25hbWU6IHN5c3RlbSB1c2VyIG5hbWUuCisgICAgZW5hYmxlX2ZsYWc6IG5hbWUgb2YgdGhlIGVudiB2YXIgdGhhdCBlbmFibGVzL2Rpc2FibGVzIHRoZSBmZWF0dXJlCisgICAgICBleHBsaWNpdGx5LgorICAgIHJvbGxvdXRfZmxnOiBuYW1lIG9mIHRoZSBlbnYgdmFyIHRoYXQgY29udHJvbHMgdGhlIHJvbGxvdXQgcGVyY2VudGFnZSwgdGhlCisgICAgICB2YWx1ZSBzdG9yZWQgaW4gdGhlIGVudiB2YXIgc2hvdWxkIGJlIGFuIGludCBiZXR3ZWVuIDAgYW5kIDEwMCBzdHJpbmcKKyAgIiIiCisgIGlmIGVuYWJsZV9mbGFnOgorICAgIGlmIG9zLmVudmlyb24uZ2V0KGVuYWJsZV9mbGFnLCAiIikgPT0gImZhbHNlIjoKKyAgICAgIGxvZ2dpbmcuaW5mbygiZmVhdHVyZTogJXMgaXMgZGlzYWJsZWQiLCBmZWF0dXJlX25hbWUpCisgICAgICByZXR1cm4gRmFsc2UKKworICAgIGlmIG9zLmVudmlyb24uZ2V0KGVuYWJsZV9mbGFnLCAiIikgPT0gInRydWUiOgorICAgICAgbG9nZ2luZy5pbmZvKCJmZWF0dXJlOiAlcyBpcyBlbmFibGVkIiwgZmVhdHVyZV9uYW1lKQorICAgICAgcmV0dXJuIFRydWUKKworICBoYXNoX29iamVjdCA9IGhhc2hsaWIuc2hhMjU2KCkKKyAgaGFzaF9vYmplY3QudXBkYXRlKCh1c2VyX25hbWUgKyBmZWF0dXJlX25hbWUpLmVuY29kZSgidXRmLTgiKSkKKyAgaGFzaF9udW1iZXIgPSBpbnQoaGFzaF9vYmplY3QuaGV4ZGlnZXN0KCksIDE2KSAlIDEwMAorCisgIHJldHVybiBoYXNoX251bWJlciA8IHJvbGxvdXRfcGVyY2VudApkaWZmIC0tZ2l0IGEvdG9vbHMvZWRpdF9tb25pdG9yL3V0aWxzX3Rlc3QucHkgYi90b29scy9lZGl0X21vbml0b3IvdXRpbHNfdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzMwYWExCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvZWRpdF9tb25pdG9yL3V0aWxzX3Rlc3QucHkKQEAgLTAsMCArMSw3MSBAQAorIyBDb3B5cmlnaHQgMjAyNCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisiIiJVbml0dGVzdHMgZm9yIGVkaXQgbW9uaXRvciB1dGlscy4iIiIKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCisKK2Zyb20gZWRpdF9tb25pdG9yIGltcG9ydCB1dGlscworCitURVNUX1VTRVIgPSAndGVzdF91c2VyJworVEVTVF9GRUFUVVJFID0gJ3Rlc3RfZmVhdHVyZScKK0VOQUJMRV9URVNUX0ZFQVRVUkVfRkxBRyA9ICdFTkFCTEVfVEVTVF9GRUFUVVJFJworUk9MTE9VVF9URVNUX0ZFQVRVUkVfRkxBRyA9ICdST0xMT1VUX1RFU1RfRkVBVFVSRScKKworCitjbGFzcyBFbmFibGVGZWF0dXJlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgZGVmIHRlc3RfZmVhdHVyZV9lbmFibGVkX3dpdGhvdXRfZmxhZyhzZWxmKToKKyAgICBzZWxmLmFzc2VydFRydWUodXRpbHMuaXNfZmVhdHVyZV9lbmFibGVkKFRFU1RfRkVBVFVSRSwgVEVTVF9VU0VSKSkKKworICBAbW9jay5wYXRjaC5kaWN0KG9zLmVudmlyb24sIHtFTkFCTEVfVEVTVF9GRUFUVVJFX0ZMQUc6ICdmYWxzZSd9LCBjbGVhcj1UcnVlKQorICBkZWYgdGVzdF9mZWF0dXJlX2Rpc2FibGVkX3dpdGhfZmxhZyhzZWxmKToKKyAgICBzZWxmLmFzc2VydEZhbHNlKAorICAgICAgICB1dGlscy5pc19mZWF0dXJlX2VuYWJsZWQoCisgICAgICAgICAgICBURVNUX0ZFQVRVUkUsIFRFU1RfVVNFUiwgRU5BQkxFX1RFU1RfRkVBVFVSRV9GTEFHCisgICAgICAgICkKKyAgICApCisKKyAgQG1vY2sucGF0Y2guZGljdChvcy5lbnZpcm9uLCB7RU5BQkxFX1RFU1RfRkVBVFVSRV9GTEFHOiAndHJ1ZSd9LCBjbGVhcj1UcnVlKQorICBkZWYgdGVzdF9mZWF0dXJlX2VuYWJsZWRfd2l0aF9mbGFnKHNlbGYpOgorICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgdXRpbHMuaXNfZmVhdHVyZV9lbmFibGVkKAorICAgICAgICAgICAgVEVTVF9GRUFUVVJFLCBURVNUX1VTRVIsIEVOQUJMRV9URVNUX0ZFQVRVUkVfRkxBRworICAgICAgICApCisgICAgKQorCisgIGRlZiB0ZXN0X2ZlYXR1cmVfZW5hYmxlZF93aXRoX3JvbGxvdXRfcGVyY2VudGFnZShzZWxmKToKKyAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgIHV0aWxzLmlzX2ZlYXR1cmVfZW5hYmxlZCgKKyAgICAgICAgICAgIFRFU1RfRkVBVFVSRSwKKyAgICAgICAgICAgIFRFU1RfVVNFUiwKKyAgICAgICAgICAgIEVOQUJMRV9URVNUX0ZFQVRVUkVfRkxBRywKKyAgICAgICAgICAgIDkwLAorICAgICAgICApCisgICAgKQorCisgIGRlZiB0ZXN0X2ZlYXR1cmVfZGlzYWJsZWRfd2l0aF9yb2xsb3V0X3BlcmNlbnRhZ2Uoc2VsZik6CisgICAgc2VsZi5hc3NlcnRGYWxzZSgKKyAgICAgICAgdXRpbHMuaXNfZmVhdHVyZV9lbmFibGVkKAorICAgICAgICAgICAgVEVTVF9GRUFUVVJFLAorICAgICAgICAgICAgVEVTVF9VU0VSLAorICAgICAgICAgICAgRU5BQkxFX1RFU1RfRkVBVFVSRV9GTEFHLAorICAgICAgICAgICAgMTAsCisgICAgICAgICkKKyAgICApCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS90b29scy9maWxlbGlzdGRpZmYvQW5kcm9pZC5icCBiL3Rvb2xzL2ZpbGVsaXN0ZGlmZi9BbmRyb2lkLmJwCmluZGV4IGFiNzY2ZDYuLjM4MjZlNTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2ZpbGVsaXN0ZGlmZi9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL2ZpbGVsaXN0ZGlmZi9BbmRyb2lkLmJwCkBAIC0yNCw0ICsyNCw5IEBACiBwcmVidWlsdF9ldGNfaG9zdCB7CiAgICAgbmFtZTogInN5c3RlbV9pbWFnZV9kaWZmX2FsbG93bGlzdCIsCiAgICAgc3JjOiAiYWxsb3dsaXN0IiwKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CisKK3ByZWJ1aWx0X2V0Y19ob3N0IHsKKyAgICBuYW1lOiAic3lzdGVtX2ltYWdlX2RpZmZfYWxsb3dsaXN0X25leHQiLAorICAgIHNyYzogImFsbG93bGlzdF9uZXh0IiwKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2ZpbGVsaXN0ZGlmZi9hbGxvd2xpc3QgYi90b29scy9maWxlbGlzdGRpZmYvYWxsb3dsaXN0CmluZGV4IDEyMDA0NWUuLmViNzg1ODcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2ZpbGVsaXN0ZGlmZi9hbGxvd2xpc3QKKysrIGIvdG9vbHMvZmlsZWxpc3RkaWZmL2FsbG93bGlzdApAQCAtMSw1MSArMSw1IEBACi0jIEtub3duIGRpZmZzIG9ubHkgaW4gdGhlIEtBVEkgc3lzdGVtIGltYWdlCi1ldGMvTk9USUNFLnhtbC5negotZnJhbWV3b3JrL29hdC94ODZfNjQvYXBleEBjb20uYW5kcm9pZC5jb21wb3NAamF2YWxpYkBzZXJ2aWNlLWNvbXBvcy5qYXJAY2xhc3Nlcy5vZGV4Ci1mcmFtZXdvcmsvb2F0L3g4Nl82NC9hcGV4QGNvbS5hbmRyb2lkLmNvbXBvc0BqYXZhbGliQHNlcnZpY2UtY29tcG9zLmphckBjbGFzc2VzLm9kZXguZnN2X21ldGEKLWZyYW1ld29yay9vYXQveDg2XzY0L2FwZXhAY29tLmFuZHJvaWQuY29tcG9zQGphdmFsaWJAc2VydmljZS1jb21wb3MuamFyQGNsYXNzZXMudmRleAotZnJhbWV3b3JrL29hdC94ODZfNjQvYXBleEBjb20uYW5kcm9pZC5jb21wb3NAamF2YWxpYkBzZXJ2aWNlLWNvbXBvcy5qYXJAY2xhc3Nlcy52ZGV4LmZzdl9tZXRhCi1saWIvYWF1ZGlvLWFpZGwtY3BwLnNvCi1saWIvYW5kcm9pZC5oYXJkd2FyZS5iaW9tZXRyaWNzLmZpbmdlcnByaW50QDIuMS5zbwotbGliL2FuZHJvaWQuaGFyZHdhcmUucmFkaW8uY29uZmlnQDEuMC5zbwotbGliL2FuZHJvaWQuaGFyZHdhcmUucmFkaW8uZGVwcmVjYXRlZEAxLjAuc28KLWxpYi9hbmRyb2lkLmhhcmR3YXJlLnJhZGlvQDEuMC5zbwotbGliL2FuZHJvaWQuaGFyZHdhcmUucmFkaW9AMS4xLnNvCi1saWIvYW5kcm9pZC5oYXJkd2FyZS5yYWRpb0AxLjIuc28KLWxpYi9hbmRyb2lkLmhhcmR3YXJlLnJhZGlvQDEuMy5zbwotbGliL2FuZHJvaWQuaGFyZHdhcmUucmFkaW9AMS40LnNvCi1saWIvYW5kcm9pZC5oYXJkd2FyZS5zZWN1cmVfZWxlbWVudEAxLjAuc28KLWxpYi9jb20uYW5kcm9pZC5tZWRpYS5hYXVkaW8tYWNvbmZpZy1jYy5zbwotbGliL2hlYXBwcm9mZF9jbGllbnQuc28KLWxpYi9oZWFwcHJvZmRfY2xpZW50X2FwaS5zbwotbGliL2xpYmFhdWRpby5zbwotbGliL2xpYmFhdWRpb19pbnRlcm5hbC5zbwotbGliL2xpYmFsYXJtX2puaS5zbwotbGliL2xpYmFtaWRpLnNvCi1saWIvbGliY3Vwcy5zbwotbGliL2xpYmpuaV9kZXZpY2VBc1dlYmNhbS5zbwotbGliL2xpYnByaW50c3Bvb2xlcl9qbmkuc28KLWxpYi9saWJ2ZW5kb3JzdXBwb3J0LnNvCi1saWIvbGlid2Zkcy5zbwotbGliL2xpYnl1di5zbwotCi0jIGIvMzUxMjU4NDYxCi1hZGJfa2V5cworIyBLbm93biBkaWZmcyB0aGF0IGFyZSBpbnN0YWxsZWQgaW4gZWl0aGVyIHN5c3RlbSBpbWFnZSB3aXRoIHRoZSBjb25maWd1cmF0aW9uCisjIGIvMzUzNDI5NDIyCiBpbml0LmVudmlyb24ucmMKLQotIyBLbm93biBkaWZmcyBvbmx5IGluIHRoZSBTb29uZyBzeXN0ZW0gaW1hZ2UKLWxpYi9saWJoaWRjb21tYW5kX2puaS5zbwotbGliL2xpYnVpbnB1dGNvbW1hbmRfam5pLnNvCi0KLSMgS25vd24gZGlmZnMgaW4gaW50ZXJuYWwgc291cmNlCi1iaW4vdXByb2Jlc3RhdHMKLWV0Yy9hY29uZmlnL2ZsYWcubWFwCi1ldGMvYWNvbmZpZy9mbGFnLnZhbAotZXRjL2Fjb25maWcvcGFja2FnZS5tYXAKLWV0Yy9icGYvdXByb2Jlc3RhdHMvQml0bWFwQWxsb2NhdGlvbi5vCi1ldGMvYnBmL3Vwcm9iZXN0YXRzL0dlbmVyaWNJbnN0cnVtZW50YXRpb24ubwotZXRjL2JwZi91cHJvYmVzdGF0cy9Qcm9jZXNzTWFuYWdlbWVudC5vCi1ldGMvaW5pdC9VcHJvYmVTdGF0cy5yYwotbGliL2xpYnVwcm9iZXN0YXRzX2NsaWVudC5zbwotbGliNjQvbGlidXByb2Jlc3RhdHNfY2xpZW50LnNvCi1wcml2LWFwcC9EZXZpY2VEaWFnbm9zdGljcy9EZXZpY2VEaWFnbm9zdGljcy5hcGsKLQorIyBiLzMzODM0MjM4MQorZXRjL05PVElDRS54bWwuZ3oKZGlmZiAtLWdpdCBhL3Rvb2xzL2ZpbGVsaXN0ZGlmZi9hbGxvd2xpc3RfbmV4dCBiL3Rvb2xzL2ZpbGVsaXN0ZGlmZi9hbGxvd2xpc3RfbmV4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjkxYzlmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvZmlsZWxpc3RkaWZmL2FsbG93bGlzdF9uZXh0CkBAIC0wLDAgKzEsOSBAQAorIyBBbGxvd2xpc3Qgb25seSBmb3IgdGhlIG5leHQgcmVsZWFzZSBjb25maWd1cmF0aW9uLgorIyBUT0RPKGIvMzY5Njc4MTIyKTogVGhlIGxpc3Qgd2lsbCBiZSBjbGVhcmVkIHdoZW4gdGhlIHRydW5rIGNvbmZpZ3VyYXRpb25zIGFyZQorIyBhdmFpbGFibGUgdG8gdGhlIG5leHQuCisKKyMgS0FUSSBvbmx5IGluc3RhbGxlZCBmaWxlcworZnJhbWV3b3JrL29hdC94ODZfNjQvYXBleEBjb20uYW5kcm9pZC5jb21wb3NAamF2YWxpYkBzZXJ2aWNlLWNvbXBvcy5qYXJAY2xhc3Nlcy5vZGV4CitmcmFtZXdvcmsvb2F0L3g4Nl82NC9hcGV4QGNvbS5hbmRyb2lkLmNvbXBvc0BqYXZhbGliQHNlcnZpY2UtY29tcG9zLmphckBjbGFzc2VzLm9kZXguZnN2X21ldGEKK2ZyYW1ld29yay9vYXQveDg2XzY0L2FwZXhAY29tLmFuZHJvaWQuY29tcG9zQGphdmFsaWJAc2VydmljZS1jb21wb3MuamFyQGNsYXNzZXMudmRleAorZnJhbWV3b3JrL29hdC94ODZfNjQvYXBleEBjb20uYW5kcm9pZC5jb21wb3NAamF2YWxpYkBzZXJ2aWNlLWNvbXBvcy5qYXJAY2xhc3Nlcy52ZGV4LmZzdl9tZXRhCmRpZmYgLS1naXQgYS90b29scy9maWxlbGlzdGRpZmYvZmlsZV9saXN0X2RpZmYucHkgYi90b29scy9maWxlbGlzdGRpZmYvZmlsZV9saXN0X2RpZmYucHkKaW5kZXggY2RjNWIyZS4uYTY0MDhlOCAxMDA2NDQKLS0tIGEvdG9vbHMvZmlsZWxpc3RkaWZmL2ZpbGVfbGlzdF9kaWZmLnB5CisrKyBiL3Rvb2xzL2ZpbGVsaXN0ZGlmZi9maWxlX2xpc3RfZGlmZi5weQpAQCAtMTksMzggKzE5LDU0IEBACiBDT0xPUl9FUlJPUiA9ICdcMDMzWzkxbScKIENPTE9SX05PUk1BTCA9ICdcMDMzWzBtJwogCi1kZWYgZmluZF91bmlxdWVfaXRlbXMoa2F0aV9pbnN0YWxsZWRfZmlsZXMsIHNvb25nX2luc3RhbGxlZF9maWxlcywgYWxsb3dsaXN0LCBzeXN0ZW1fbW9kdWxlX25hbWUpOgorZGVmIGZpbmRfdW5pcXVlX2l0ZW1zKGthdGlfaW5zdGFsbGVkX2ZpbGVzLCBzb29uZ19pbnN0YWxsZWRfZmlsZXMsIHN5c3RlbV9tb2R1bGVfbmFtZSwgYWxsb3dsaXN0cyk6CiAgICAgd2l0aCBvcGVuKGthdGlfaW5zdGFsbGVkX2ZpbGVzLCAncicpIGFzIGthdGlfbGlzdF9maWxlLCBcCi0gICAgICAgICAgICBvcGVuKHNvb25nX2luc3RhbGxlZF9maWxlcywgJ3InKSBhcyBzb29uZ19saXN0X2ZpbGUsIFwKLSAgICAgICAgICAgIG9wZW4oYWxsb3dsaXN0LCAncicpIGFzIGFsbG93bGlzdF9maWxlOgorICAgICAgICAgICAgb3Blbihzb29uZ19pbnN0YWxsZWRfZmlsZXMsICdyJykgYXMgc29vbmdfbGlzdF9maWxlOgogICAgICAgICBrYXRpX2ZpbGVzID0gc2V0KGthdGlfbGlzdF9maWxlLnJlYWQoKS5zcGxpdCgpKQogICAgICAgICBzb29uZ19maWxlcyA9IHNldChzb29uZ19saXN0X2ZpbGUucmVhZCgpLnNwbGl0KCkpCi0gICAgICAgIGFsbG93ZWRfZmlsZXMgPSBzZXQoZmlsdGVyKGxhbWJkYSB4OiBsZW4oeCksIG1hcChsYW1iZGEgeDogeC5sc3RyaXAoKS5zcGxpdCgnIycsMSlbMF0ucnN0cmlwKCkgLCBhbGxvd2xpc3RfZmlsZS5yZWFkKCkuc3BsaXQoJ1xuJykpKSkKKworICAgIGFsbG93ZWRfZmlsZXMgPSBzZXQoKQorICAgIGZvciBhbGxvd2xpc3QgaW4gYWxsb3dsaXN0czoKKyAgICAgICAgd2l0aCBvcGVuKGFsbG93bGlzdCwgJ3InKSBhcyBhbGxvd2xpc3RfZmlsZToKKyAgICAgICAgICAgIGFsbG93ZWRfZmlsZXMudXBkYXRlKHNldChmaWx0ZXIobGFtYmRhIHg6IGxlbih4KSwgbWFwKGxhbWJkYSB4OiB4LmxzdHJpcCgpLnNwbGl0KCcjJywxKVswXS5yc3RyaXAoKSAsIGFsbG93bGlzdF9maWxlLnJlYWQoKS5zcGxpdCgnXG4nKSkpKSkKIAogICAgIGRlZiBpc191bmtub3duX2RpZmYoZmlsZXBhdGgpOgotICAgICAgICByZXR1cm4gbm90IGZpbGVwYXRoIGluIGFsbG93ZWRfZmlsZXMKKyAgICAgICAgcmV0dXJuIGZpbGVwYXRoIG5vdCBpbiBhbGxvd2VkX2ZpbGVzCisKKyAgICBkZWYgaXNfdW5uZWNlc3NhcnlfYWxsb3dsaXN0KGZpbGVwYXRoKToKKyAgICAgICAgcmV0dXJuIGZpbGVwYXRoIG5vdCBpbiBrYXRpX2ZpbGVzLnN5bW1ldHJpY19kaWZmZXJlbmNlKHNvb25nX2ZpbGVzKQogCiAgICAgdW5pcXVlX2luX2thdGkgPSBzZXQoZmlsdGVyKGlzX3Vua25vd25fZGlmZiwga2F0aV9maWxlcyAtIHNvb25nX2ZpbGVzKSkKICAgICB1bmlxdWVfaW5fc29vbmcgPSBzZXQoZmlsdGVyKGlzX3Vua25vd25fZGlmZiwgc29vbmdfZmlsZXMgLSBrYXRpX2ZpbGVzKSkKKyAgICB1bm5lY2Vzc2FyeV9hbGxvd2xpc3RzID0gc2V0KGZpbHRlcihpc191bm5lY2Vzc2FyeV9hbGxvd2xpc3QsIGFsbG93ZWRfZmlsZXMpKQogCiAgICAgaWYgdW5pcXVlX2luX2thdGk6Ci0gICAgICAgIHByaW50KGYne0NPTE9SX0VSUk9SfVBsZWFzZSBhZGQgZm9sbG93aW5nIG1vZHVsZXMgaW50byBzeXN0ZW0gaW1hZ2UgbW9kdWxlIHtzeXN0ZW1fbW9kdWxlX25hbWV9LntDT0xPUl9OT1JNQUx9JykKLSAgICAgICAgcHJpbnQoZid7Q09MT1JfV0FSTklOR31LQVRJIG9ubHkgbW9kdWxlKHMpOntDT0xPUl9OT1JNQUx9JykKKyAgICAgICAgcHJpbnQoJycpCisgICAgICAgIHByaW50KGYne0NPTE9SX0VSUk9SfU1pc3NpbmcgcmVxdWlyZWQgbW9kdWxlcyBpbiB7c3lzdGVtX21vZHVsZV9uYW1lfSBtb2R1bGUue0NPTE9SX05PUk1BTH0nKQorICAgICAgICBwcmludChmJ1RvIHJlc29sdmUgdGhpcyBpc3N1ZSwgcGxlYXNlIGFkZCB0aGUgbW9kdWxlcyB0byB0aGUgQW5kcm9pZC5icCBmaWxlIGZvciB0aGUge3N5c3RlbV9tb2R1bGVfbmFtZX0gdG8gaW5zdGFsbCB0aGUgZm9sbG93aW5nIEtBVEkgb25seSBpbnN0YWxsZWQgZmlsZXMuJykKKyAgICAgICAgcHJpbnQoZidZb3UgY2FuIGZpbmQgdGhlIGNvcnJlY3QgQW5kcm9pZC5icCBmaWxlIHVzaW5nIHRoZSBjb21tYW5kICJnb21vZCB7c3lzdGVtX21vZHVsZV9uYW1lfSIuJykKKyAgICAgICAgcHJpbnQoZid7Q09MT1JfV0FSTklOR31LQVRJIG9ubHkgaW5zdGFsbGVkIGZpbGUocyk6e0NPTE9SX05PUk1BTH0nKQogICAgICAgICBmb3IgaXRlbSBpbiBzb3J0ZWQodW5pcXVlX2luX2thdGkpOgotICAgICAgICAgICAgcHJpbnQoaXRlbSkKKyAgICAgICAgICAgIHByaW50KCcgICcraXRlbSkKIAogICAgIGlmIHVuaXF1ZV9pbl9zb29uZzoKLSAgICAgICAgaWYgdW5pcXVlX2luX2thdGk6Ci0gICAgICAgICAgICBwcmludCgnJykKLQotICAgICAgICBwcmludChmJ3tDT0xPUl9FUlJPUn1QbGVhc2UgYWRkIGZvbGxvd2luZyBtb2R1bGVzIGludG8gYnVpbGQvbWFrZS90YXJnZXQvcHJvZHVjdC9iYXNlX3N5c3RlbS5tay57Q09MT1JfTk9STUFMfScpCi0gICAgICAgIHByaW50KGYne0NPTE9SX1dBUk5JTkd9U29vbmcgb25seSBtb2R1bGUocyk6e0NPTE9SX05PUk1BTH0nKQotICAgICAgICBmb3IgaXRlbSBpbiBzb3J0ZWQodW5pcXVlX2luX3Nvb25nKToKLSAgICAgICAgICAgIHByaW50KGl0ZW0pCi0KLSAgICBpZiB1bmlxdWVfaW5fa2F0aSBvciB1bmlxdWVfaW5fc29vbmc6CiAgICAgICAgIHByaW50KCcnKQotICAgICAgICBwcmludChmJ3tDT0xPUl9FUlJPUn1GQUlMRUQ6IFN5c3RlbSBpbWFnZSBmcm9tIEtBVEkgYW5kIFNPT05HIGRpZmZlcnMgZnJvbSBpbnN0YWxsZWQgZmlsZSBsaXN0LntDT0xPUl9OT1JNQUx9JykKKyAgICAgICAgcHJpbnQoZid7Q09MT1JfRVJST1J9TWlzc2luZyBwYWNrYWdlcyBpbiBiYXNlX3N5c3RlbS5tay57Q09MT1JfTk9STUFMfScpCisgICAgICAgIHByaW50KCdQbGVhc2UgYWRkIHBhY2thZ2VzIGludG8gYnVpbGQvbWFrZS90YXJnZXQvcHJvZHVjdC9iYXNlX3N5c3RlbS5tayBvciBidWlsZC9tYWtlL3Rvb2xzL2ZpbGVsaXN0ZGlmZi9hbGxvd2xpc3QgdG8gaW5zdGFsbCBvciBza2lwIHRoZSBmb2xsb3dpbmcgU29vbmcgb25seSBpbnN0YWxsZWQgZmlsZXMuJykKKyAgICAgICAgcHJpbnQoZid7Q09MT1JfV0FSTklOR31Tb29uZyBvbmx5IGluc3RhbGxlZCBmaWxlKHMpOntDT0xPUl9OT1JNQUx9JykKKyAgICAgICAgZm9yIGl0ZW0gaW4gc29ydGVkKHVuaXF1ZV9pbl9zb29uZyk6CisgICAgICAgICAgICBwcmludCgnICAnK2l0ZW0pCisKKyAgICBpZiB1bm5lY2Vzc2FyeV9hbGxvd2xpc3RzOgorICAgICAgICBwcmludCgnJykKKyAgICAgICAgcHJpbnQoZid7Q09MT1JfRVJST1J9VW5uZWNlc3NhcnkgZmlsZXMgaW4gYWxsb3dsaXN0LntDT0xPUl9OT1JNQUx9JykKKyAgICAgICAgcHJpbnQoJ1BsZWFzZSByZW1vdmUgdGhlc2UgZW50cmllcyBmcm9tIGJ1aWxkL21ha2UvdG9vbHMvZmlsZWxpc3RkaWZmL2FsbG93bGlzdCcpCisgICAgICAgIGZvciBpdGVtIGluIHNvcnRlZCh1bm5lY2Vzc2FyeV9hbGxvd2xpc3RzKToKKyAgICAgICAgICAgIHByaW50KCcgICcraXRlbSkKKworCisgICAgaWYgdW5pcXVlX2luX2thdGkgb3IgdW5pcXVlX2luX3Nvb25nIG9yIHVubmVjZXNzYXJ5X2FsbG93bGlzdHM6CisgICAgICAgIHByaW50KCcnKQogICAgICAgICBzeXMuZXhpdCgxKQogCiAKQEAgLTU5LDggKzc1LDggQEAKIAogICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2thdGlfaW5zdGFsbGVkX2ZpbGVfbGlzdCcpCiAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnc29vbmdfaW5zdGFsbGVkX2ZpbGVfbGlzdCcpCi0gICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnYWxsb3dsaXN0JykKICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdzeXN0ZW1fbW9kdWxlX25hbWUnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tYWxsb3dsaXN0cycsIG5hcmdzPScqJywgZGVmYXVsdD1bXSkKICAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQogCi0gICAgZmluZF91bmlxdWVfaXRlbXMoYXJncy5rYXRpX2luc3RhbGxlZF9maWxlX2xpc3QsIGFyZ3Muc29vbmdfaW5zdGFsbGVkX2ZpbGVfbGlzdCwgYXJncy5hbGxvd2xpc3QsIGFyZ3Muc3lzdGVtX21vZHVsZV9uYW1lKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyAgICBmaW5kX3VuaXF1ZV9pdGVtcyhhcmdzLmthdGlfaW5zdGFsbGVkX2ZpbGVfbGlzdCwgYXJncy5zb29uZ19pbnN0YWxsZWRfZmlsZV9saXN0LCBhcmdzLnN5c3RlbV9tb2R1bGVfbmFtZSwgYXJncy5hbGxvd2xpc3RzKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL2ZpbmFsaXphdGlvbi9lbnZpcm9ubWVudC5zaCBiL3Rvb2xzL2ZpbmFsaXphdGlvbi9lbnZpcm9ubWVudC5zaAppbmRleCBjZjNlNjFiLi45YTI4N2M0IDEwMDc1NQotLS0gYS90b29scy9maW5hbGl6YXRpb24vZW52aXJvbm1lbnQuc2gKKysrIGIvdG9vbHMvZmluYWxpemF0aW9uL2Vudmlyb25tZW50LnNoCkBAIC0zNCwzICszNCw0IEBACiBleHBvcnQgRklOQUxfQ09SUkVTUE9ORElOR19QTEFURk9STV9WRVJTSU9OPScxNicKIGV4cG9ydCBGSU5BTF9ORVhUX0JPQVJEX0FQSV9MRVZFTD0nMjAyNjA0JwogZXhwb3J0IEZJTkFMX05FWFRfQ09SUkVTUE9ORElOR19WRVJTSU9OX0xFVFRFUj0nWCcKK2V4cG9ydCBGSU5BTF9ORVhUX0NPUlJFU1BPTkRJTkdfU0RLX1ZFUlNJT049JzM3JwpkaWZmIC0tZ2l0IGEvdG9vbHMvZmluYWxpemF0aW9uL2ZpbmFsaXplLXZpbnRmLXJlc291cmNlcy5zaCBiL3Rvb2xzL2ZpbmFsaXphdGlvbi9maW5hbGl6ZS12aW50Zi1yZXNvdXJjZXMuc2gKaW5kZXggNmYxYTZmNi4uNDVlZmMxMCAxMDA3NTUKLS0tIGEvdG9vbHMvZmluYWxpemF0aW9uL2ZpbmFsaXplLXZpbnRmLXJlc291cmNlcy5zaAorKysgYi90b29scy9maW5hbGl6YXRpb24vZmluYWxpemUtdmludGYtcmVzb3VyY2VzLnNoCkBAIC0xNiw2ICsxNiwxMyBAQAogICAgIGV4cG9ydCBUQVJHRVRfUkVMRUFTRT1maW5hXzAKICAgICBleHBvcnQgVEFSR0VUX1BST0RVQ1Q9YW9zcF9hcm02NAogCisgICAgIyBidWlsZC9zb29uZworICAgIGxvY2FsIHZlbmRvcl9hcGlfbGV2ZWxfbWFwPSJjYXNlICR7RklOQUxfTkVYVF9CT0FSRF9BUElfTEVWRUx9OiIKKyAgICBpZiAhIGdyZXAgLXEgIiR2ZW5kb3JfYXBpX2xldmVsX21hcCIgIiR0b3AvYnVpbGQvc29vbmcvYW5kcm9pZC92ZW5kb3JfYXBpX2xldmVscy5nbyIgOyB0aGVuCisgICAgICAgIHNlZCAtaSAtZSAiL2Nhc2UgJHtGSU5BTF9CT0FSRF9BUElfTEVWRUx9Oi97TjthIFxcXHQkdmVuZG9yX2FwaV9sZXZlbF9tYXBcblx0XHRzZGtWZXJzaW9uID0gJHtGSU5BTF9ORVhUX0NPUlJFU1BPTkRJTkdfU0RLX1ZFUlNJT059CisgICAgICAgIH0iICIkdG9wL2J1aWxkL3Nvb25nL2FuZHJvaWQvdmVuZG9yX2FwaV9sZXZlbHMuZ28iCisgICAgZmkKKwogICAgICMgc3lzdGVtL3NlcG9saWN5CiAgICAgIiR0b3Avc3lzdGVtL3NlcG9saWN5L3Rvb2xzL2ZpbmFsaXplLXZpbnRmLXJlc291cmNlcy5zaCIgIiR0b3AiICIkRklOQUxfQk9BUkRfQVBJX0xFVkVMIgogCmRpZmYgLS1naXQgYS90b29scy9mc19jb25maWcvQW5kcm9pZC5icCBiL3Rvb2xzL2ZzX2NvbmZpZy9BbmRyb2lkLmJwCmluZGV4IDZhYTUyODkuLmE1YjZmZDAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2ZzX2NvbmZpZy9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL2ZzX2NvbmZpZy9BbmRyb2lkLmJwCkBAIC0yNzcsNiArMjc3LDcgQEAKICAgICBvdXQ6IFsib3V0Il0sCiB9CiAKKy8vIHN5c3RlbQogZ2VucnVsZSB7CiAgICAgbmFtZTogImZzX2NvbmZpZ19kaXJzX3N5c3RlbV9nZW4iLAogICAgIGRlZmF1bHRzOiBbImZzX2NvbmZpZ19kZWZhdWx0cyJdLApAQCAtMzA3LDYgKzMwOCw3IEBACiAgICAgc3JjOiAiOmZzX2NvbmZpZ19maWxlc19zeXN0ZW1fZ2VuIiwKIH0KIAorLy8gc3lzdGVtX2V4dAogZ2VucnVsZSB7CiAgICAgbmFtZTogImZzX2NvbmZpZ19kaXJzX3N5c3RlbV9leHRfZ2VuIiwKICAgICBkZWZhdWx0czogWyJmc19jb25maWdfZGVmYXVsdHMiXSwKQEAgLTMzNyw2ICszMzksNyBAQAogICAgIHN5c3RlbV9leHRfc3BlY2lmaWM6IHRydWUsCiB9CiAKKy8vIHByb2R1Y3QKIGdlbnJ1bGUgewogICAgIG5hbWU6ICJmc19jb25maWdfZGlyc19wcm9kdWN0X2dlbiIsCiAgICAgZGVmYXVsdHM6IFsiZnNfY29uZmlnX2RlZmF1bHRzIl0sCkBAIC0zNjcsNiArMzcwLDcgQEAKICAgICBwcm9kdWN0X3NwZWNpZmljOiB0cnVlLAogfQogCisvLyB2ZW5kb3IKIGdlbnJ1bGUgewogICAgIG5hbWU6ICJmc19jb25maWdfZGlyc192ZW5kb3JfZ2VuIiwKICAgICBkZWZhdWx0czogWyJmc19jb25maWdfZGVmYXVsdHMiXSwKQEAgLTM5Nyw2ICs0MDEsNyBAQAogICAgIHZlbmRvcjogdHJ1ZSwKIH0KIAorLy8gb2RtCiBnZW5ydWxlIHsKICAgICBuYW1lOiAiZnNfY29uZmlnX2RpcnNfb2RtX2dlbiIsCiAgICAgZGVmYXVsdHM6IFsiZnNfY29uZmlnX2RlZmF1bHRzIl0sCkBAIC00MjcsNCArNDMyLDIxNCBAQAogICAgIGRldmljZV9zcGVjaWZpYzogdHJ1ZSwKIH0KIAotLy8gVE9ETyhqaXlvbmcpOiBhZGQgZnNfY29uZmlnIGZvciBvZW0sIHN5c3RlbV9kbGttLCB2ZW5kb3JfZGxrbSwgb2RtX2Rsa20gcGFydGl0aW9ucworLy8gc3lzdGVtX2Rsa20KK2dlbnJ1bGUgeworICAgIG5hbWU6ICJmc19jb25maWdfZGlyc19zeXN0ZW1fZGxrbV9nZW4iLAorICAgIGRlZmF1bHRzOiBbImZzX2NvbmZpZ19kZWZhdWx0cyJdLAorICAgIGNtZDogZnNfY29uZmlnX2NtZF9kaXJzICsKKyAgICAgICAgIi0tcGFydGl0aW9uIHN5c3RlbV9kbGttICIgKworICAgICAgICAiJChsb2NhdGlvbnMgOnRhcmdldF9mc19jb25maWdfZ2VuKSIsCit9CisKK3ByZWJ1aWx0X2V0YyB7CisgICAgbmFtZTogImZzX2NvbmZpZ19kaXJzX3N5c3RlbV9kbGttIiwKKyAgICBmaWxlbmFtZTogImZzX2NvbmZpZ19kaXJzIiwKKyAgICBzcmM6ICI6ZnNfY29uZmlnX2RpcnNfc3lzdGVtX2Rsa21fZ2VuIiwKKyAgICBzeXN0ZW1fZGxrbV9zcGVjaWZpYzogdHJ1ZSwKK30KKworZ2VucnVsZSB7CisgICAgbmFtZTogImZzX2NvbmZpZ19maWxlc19zeXN0ZW1fZGxrbV9nZW4iLAorICAgIGRlZmF1bHRzOiBbImZzX2NvbmZpZ19kZWZhdWx0cyJdLAorICAgIGNtZDogZnNfY29uZmlnX2NtZF9maWxlcyArCisgICAgICAgICItLXBhcnRpdGlvbiBzeXN0ZW1fZGxrbSAiICsKKyAgICAgICAgIiQobG9jYXRpb25zIDp0YXJnZXRfZnNfY29uZmlnX2dlbikiLAorfQorCitwcmVidWlsdF9ldGMgeworICAgIG5hbWU6ICJmc19jb25maWdfZmlsZXNfc3lzdGVtX2Rsa20iLAorICAgIGZpbGVuYW1lOiAiZnNfY29uZmlnX2ZpbGVzIiwKKyAgICBzcmM6ICI6ZnNfY29uZmlnX2ZpbGVzX3N5c3RlbV9kbGttX2dlbiIsCisgICAgc3lzdGVtX2Rsa21fc3BlY2lmaWM6IHRydWUsCit9CisKKy8vIHZlbmRvcl9kbGttCitnZW5ydWxlIHsKKyAgICBuYW1lOiAiZnNfY29uZmlnX2RpcnNfdmVuZG9yX2Rsa21fZ2VuIiwKKyAgICBkZWZhdWx0czogWyJmc19jb25maWdfZGVmYXVsdHMiXSwKKyAgICBjbWQ6IGZzX2NvbmZpZ19jbWRfZGlycyArCisgICAgICAgICItLXBhcnRpdGlvbiB2ZW5kb3JfZGxrbSAiICsKKyAgICAgICAgIiQobG9jYXRpb25zIDp0YXJnZXRfZnNfY29uZmlnX2dlbikiLAorfQorCitwcmVidWlsdF9ldGMgeworICAgIG5hbWU6ICJmc19jb25maWdfZGlyc192ZW5kb3JfZGxrbSIsCisgICAgZmlsZW5hbWU6ICJmc19jb25maWdfZGlycyIsCisgICAgc3JjOiAiOmZzX2NvbmZpZ19kaXJzX3ZlbmRvcl9kbGttX2dlbiIsCisgICAgdmVuZG9yX2Rsa21fc3BlY2lmaWM6IHRydWUsCit9CisKK2dlbnJ1bGUgeworICAgIG5hbWU6ICJmc19jb25maWdfZmlsZXNfdmVuZG9yX2Rsa21fZ2VuIiwKKyAgICBkZWZhdWx0czogWyJmc19jb25maWdfZGVmYXVsdHMiXSwKKyAgICBjbWQ6IGZzX2NvbmZpZ19jbWRfZmlsZXMgKworICAgICAgICAiLS1wYXJ0aXRpb24gdmVuZG9yX2Rsa20gIiArCisgICAgICAgICIkKGxvY2F0aW9ucyA6dGFyZ2V0X2ZzX2NvbmZpZ19nZW4pIiwKK30KKworcHJlYnVpbHRfZXRjIHsKKyAgICBuYW1lOiAiZnNfY29uZmlnX2ZpbGVzX3ZlbmRvcl9kbGttIiwKKyAgICBmaWxlbmFtZTogImZzX2NvbmZpZ19maWxlcyIsCisgICAgc3JjOiAiOmZzX2NvbmZpZ19maWxlc192ZW5kb3JfZGxrbV9nZW4iLAorICAgIHZlbmRvcl9kbGttX3NwZWNpZmljOiB0cnVlLAorfQorCisvLyBvZG1fZGxrbQorZ2VucnVsZSB7CisgICAgbmFtZTogImZzX2NvbmZpZ19kaXJzX29kbV9kbGttX2dlbiIsCisgICAgZGVmYXVsdHM6IFsiZnNfY29uZmlnX2RlZmF1bHRzIl0sCisgICAgY21kOiBmc19jb25maWdfY21kX2RpcnMgKworICAgICAgICAiLS1wYXJ0aXRpb24gb2RtX2Rsa20gIiArCisgICAgICAgICIkKGxvY2F0aW9ucyA6dGFyZ2V0X2ZzX2NvbmZpZ19nZW4pIiwKK30KKworcHJlYnVpbHRfZXRjIHsKKyAgICBuYW1lOiAiZnNfY29uZmlnX2RpcnNfb2RtX2Rsa20iLAorICAgIGZpbGVuYW1lOiAiZnNfY29uZmlnX2RpcnMiLAorICAgIHNyYzogIjpmc19jb25maWdfZGlyc19vZG1fZGxrbV9nZW4iLAorICAgIG9kbV9kbGttX3NwZWNpZmljOiB0cnVlLAorfQorCitnZW5ydWxlIHsKKyAgICBuYW1lOiAiZnNfY29uZmlnX2ZpbGVzX29kbV9kbGttX2dlbiIsCisgICAgZGVmYXVsdHM6IFsiZnNfY29uZmlnX2RlZmF1bHRzIl0sCisgICAgY21kOiBmc19jb25maWdfY21kX2ZpbGVzICsKKyAgICAgICAgIi0tcGFydGl0aW9uIG9kbV9kbGttICIgKworICAgICAgICAiJChsb2NhdGlvbnMgOnRhcmdldF9mc19jb25maWdfZ2VuKSIsCit9CisKK3ByZWJ1aWx0X2V0YyB7CisgICAgbmFtZTogImZzX2NvbmZpZ19maWxlc19vZG1fZGxrbSIsCisgICAgZmlsZW5hbWU6ICJmc19jb25maWdfZmlsZXMiLAorICAgIHNyYzogIjpmc19jb25maWdfZmlsZXNfb2RtX2Rsa21fZ2VuIiwKKyAgICBvZG1fZGxrbV9zcGVjaWZpYzogdHJ1ZSwKK30KKworLy8gb2VtCitnZW5ydWxlIHsKKyAgICBuYW1lOiAiZnNfY29uZmlnX2RpcnNfb2VtX2dlbiIsCisgICAgZGVmYXVsdHM6IFsiZnNfY29uZmlnX2RlZmF1bHRzIl0sCisgICAgY21kOiBmc19jb25maWdfY21kX2RpcnMgKworICAgICAgICAiLS1wYXJ0aXRpb24gb2VtICIgKworICAgICAgICAiJChsb2NhdGlvbnMgOnRhcmdldF9mc19jb25maWdfZ2VuKSIsCit9CisKK3ByZWJ1aWx0X2V0YyB7CisgICAgbmFtZTogImZzX2NvbmZpZ19kaXJzX29lbSIsCisgICAgZmlsZW5hbWU6ICJmc19jb25maWdfZGlycyIsCisgICAgc3JjOiAiOmZzX2NvbmZpZ19kaXJzX29lbV9nZW4iLAorICAgIG9lbV9zcGVjaWZpYzogdHJ1ZSwKK30KKworZ2VucnVsZSB7CisgICAgbmFtZTogImZzX2NvbmZpZ19maWxlc19vZW1fZ2VuIiwKKyAgICBkZWZhdWx0czogWyJmc19jb25maWdfZGVmYXVsdHMiXSwKKyAgICBjbWQ6IGZzX2NvbmZpZ19jbWRfZmlsZXMgKworICAgICAgICAiLS1wYXJ0aXRpb24gb2VtICIgKworICAgICAgICAiJChsb2NhdGlvbnMgOnRhcmdldF9mc19jb25maWdfZ2VuKSIsCit9CisKK3ByZWJ1aWx0X2V0YyB7CisgICAgbmFtZTogImZzX2NvbmZpZ19maWxlc19vZW0iLAorICAgIGZpbGVuYW1lOiAiZnNfY29uZmlnX2ZpbGVzIiwKKyAgICBzcmM6ICI6ZnNfY29uZmlnX2ZpbGVzX29lbV9nZW4iLAorICAgIG9lbV9zcGVjaWZpYzogdHJ1ZSwKK30KKworLy8gR2VuZXJhdGUgdGhlIDxwPi9ldGMvZnNfY29uZmlnX2RpcnMgYmluYXJ5IGZpbGVzIGZvciBlYWNoIHBhcnRpdGlvbi4KKy8vIEFkZCBmc19jb25maWdfZGlycyB0byBQUk9EVUNUX1BBQ0tBR0VTIGluIHRoZSBkZXZpY2UgbWFrZSBmaWxlIHRvIGVuYWJsZS4KK3Bob255IHsKKyAgICBuYW1lOiAiZnNfY29uZmlnX2RpcnMiLAorICAgIHJlcXVpcmVkOiBbCisgICAgICAgICJmc19jb25maWdfZGlyc19zeXN0ZW0iLAorICAgICAgICAiZnNfY29uZmlnX2RpcnNfc3lzdGVtX2V4dCIsCisgICAgICAgICJmc19jb25maWdfZGlyc19wcm9kdWN0IiwKKyAgICAgICAgImZzX2NvbmZpZ19kaXJzX25vbnN5c3RlbSIsCisgICAgXSwKK30KKworLy8gR2VuZXJhdGUgdGhlIDxwPi9ldGMvZnNfY29uZmlnX2ZpbGVzIGJpbmFyeSBmaWxlcyBmb3IgZWFjaCBwYXJ0aXRpb24uCisvLyBBZGQgZnNfY29uZmlnX2ZpbGVzIHRvIFBST0RVQ1RfUEFDS0FHRVMgaW4gdGhlIGRldmljZSBtYWtlIGZpbGUgdG8gZW5hYmxlLgorcGhvbnkgeworICAgIG5hbWU6ICJmc19jb25maWdfZmlsZXMiLAorICAgIHJlcXVpcmVkOiBbCisgICAgICAgICJmc19jb25maWdfZmlsZXNfc3lzdGVtIiwKKyAgICAgICAgImZzX2NvbmZpZ19maWxlc19zeXN0ZW1fZXh0IiwKKyAgICAgICAgImZzX2NvbmZpZ19maWxlc19wcm9kdWN0IiwKKyAgICAgICAgImZzX2NvbmZpZ19maWxlc19ub25zeXN0ZW0iLAorICAgIF0sCit9CisKKy8vIEdlbmVyYXRlIHRoZSA8cD4vZXRjL2ZzX2NvbmZpZ19kaXJzIGJpbmFyeSBmaWxlcyBmb3IgYWxsIGVuYWJsZWQgcGFydGl0aW9ucworLy8gZXhjbHVkaW5nIC9zeXN0ZW0sIC9zeXN0ZW1fZXh0IGFuZCAvcHJvZHVjdC4gQWRkIGZzX2NvbmZpZ19kaXJzX25vbnN5c3RlbSB0bworLy8gUFJPRFVDVF9QQUNLQUdFUyBpbiB0aGUgZGV2aWNlIG1ha2UgZmlsZSB0byBlbmFibGUuCitwaG9ueSB7CisgICAgbmFtZTogImZzX2NvbmZpZ19kaXJzX25vbnN5c3RlbSIsCisgICAgcmVxdWlyZWQ6IFtdICsKKyAgICAgICAgc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiZnNfY29uZmlnIiwgInZlbmRvciIpLCB7CisgICAgICAgICAgICB0cnVlOiBbImZzX2NvbmZpZ19kaXJzX3ZlbmRvciJdLAorICAgICAgICAgICAgZGVmYXVsdDogW10sCisgICAgICAgIH0pICsKKyAgICAgICAgc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiZnNfY29uZmlnIiwgIm9lbSIpLCB7CisgICAgICAgICAgICB0cnVlOiBbImZzX2NvbmZpZ19kaXJzX29lbSJdLAorICAgICAgICAgICAgZGVmYXVsdDogW10sCisgICAgICAgIH0pICsKKyAgICAgICAgc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiZnNfY29uZmlnIiwgIm9kbSIpLCB7CisgICAgICAgICAgICB0cnVlOiBbImZzX2NvbmZpZ19kaXJzX29kbSJdLAorICAgICAgICAgICAgZGVmYXVsdDogW10sCisgICAgICAgIH0pICsKKyAgICAgICAgc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiZnNfY29uZmlnIiwgInZlbmRvcl9kbGttIiksIHsKKyAgICAgICAgICAgIHRydWU6IFsiZnNfY29uZmlnX2RpcnNfdmVuZG9yX2Rsa20iXSwKKyAgICAgICAgICAgIGRlZmF1bHQ6IFtdLAorICAgICAgICB9KSArCisgICAgICAgIHNlbGVjdChzb29uZ19jb25maWdfdmFyaWFibGUoImZzX2NvbmZpZyIsICJvZG1fZGxrbSIpLCB7CisgICAgICAgICAgICB0cnVlOiBbImZzX2NvbmZpZ19kaXJzX29kbV9kbGttIl0sCisgICAgICAgICAgICBkZWZhdWx0OiBbXSwKKyAgICAgICAgfSkgKworICAgICAgICBzZWxlY3Qoc29vbmdfY29uZmlnX3ZhcmlhYmxlKCJmc19jb25maWciLCAic3lzdGVtX2Rsa20iKSwgeworICAgICAgICAgICAgdHJ1ZTogWyJmc19jb25maWdfZGlyc19zeXN0ZW1fZGxrbSJdLAorICAgICAgICAgICAgZGVmYXVsdDogW10sCisgICAgICAgIH0pLAorfQorCisvLyBHZW5lcmF0ZSB0aGUgPHA+L2V0Yy9mc19jb25maWdfZmlsZXMgYmluYXJ5IGZpbGVzIGZvciBhbGwgZW5hYmxlZCBwYXJ0aXRpb25zCisvLyBleGNsdWRpbmcgL3N5c3RlbSwgL3N5c3RlbV9leHQgYW5kIC9wcm9kdWN0LiBBZGQgZnNfY29uZmlnX2ZpbGVzX25vbnN5c3RlbSB0bworLy8gUFJPRFVDVF9QQUNLQUdFUyBpbiB0aGUgZGV2aWNlIG1ha2UgZmlsZSB0byBlbmFibGUuCitwaG9ueSB7CisgICAgbmFtZTogImZzX2NvbmZpZ19maWxlc19ub25zeXN0ZW0iLAorICAgIHJlcXVpcmVkOiBbXSArCisgICAgICAgIHNlbGVjdChzb29uZ19jb25maWdfdmFyaWFibGUoImZzX2NvbmZpZyIsICJ2ZW5kb3IiKSwgeworICAgICAgICAgICAgdHJ1ZTogWyJmc19jb25maWdfZmlsZXNfdmVuZG9yIl0sCisgICAgICAgICAgICBkZWZhdWx0OiBbXSwKKyAgICAgICAgfSkgKworICAgICAgICBzZWxlY3Qoc29vbmdfY29uZmlnX3ZhcmlhYmxlKCJmc19jb25maWciLCAib2VtIiksIHsKKyAgICAgICAgICAgIHRydWU6IFsiZnNfY29uZmlnX2ZpbGVzX29lbSJdLAorICAgICAgICAgICAgZGVmYXVsdDogW10sCisgICAgICAgIH0pICsKKyAgICAgICAgc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiZnNfY29uZmlnIiwgIm9kbSIpLCB7CisgICAgICAgICAgICB0cnVlOiBbImZzX2NvbmZpZ19maWxlc19vZG0iXSwKKyAgICAgICAgICAgIGRlZmF1bHQ6IFtdLAorICAgICAgICB9KSArCisgICAgICAgIHNlbGVjdChzb29uZ19jb25maWdfdmFyaWFibGUoImZzX2NvbmZpZyIsICJ2ZW5kb3JfZGxrbSIpLCB7CisgICAgICAgICAgICB0cnVlOiBbImZzX2NvbmZpZ19maWxlc192ZW5kb3JfZGxrbSJdLAorICAgICAgICAgICAgZGVmYXVsdDogW10sCisgICAgICAgIH0pICsKKyAgICAgICAgc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiZnNfY29uZmlnIiwgIm9kbV9kbGttIiksIHsKKyAgICAgICAgICAgIHRydWU6IFsiZnNfY29uZmlnX2ZpbGVzX29kbV9kbGttIl0sCisgICAgICAgICAgICBkZWZhdWx0OiBbXSwKKyAgICAgICAgfSkgKworICAgICAgICBzZWxlY3Qoc29vbmdfY29uZmlnX3ZhcmlhYmxlKCJmc19jb25maWciLCAic3lzdGVtX2Rsa20iKSwgeworICAgICAgICAgICAgdHJ1ZTogWyJmc19jb25maWdfZmlsZXNfc3lzdGVtX2Rsa20iXSwKKyAgICAgICAgICAgIGRlZmF1bHQ6IFtdLAorICAgICAgICB9KSwKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2ZzX2NvbmZpZy9BbmRyb2lkLm1rIGIvdG9vbHMvZnNfY29uZmlnL0FuZHJvaWQubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0YzM2MjYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvZnNfY29uZmlnL0FuZHJvaWQubWsKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotTE9DQUxfUEFUSCA6PSAkKGNhbGwgbXktZGlyKQotCi0jIE9uZSBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZy5oIGZpbGUgYnkgdXNpbmcgVEFSR0VUX0ZTX0NPTkZJR19HRU4uCi0jICAgU2V0IFRBUkdFVF9GU19DT05GSUdfR0VOIHRvIGNvbnRhaW4gYSBsaXN0IG9mIGludGVybWVkaWF0ZSBmb3JtYXQgZmlsZXMKLSMgICBmb3IgZ2VuZXJhdGluZyB0aGUgYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZy5oIGZpbGUuCi0jCi0jIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZSBSRUFETUUKLQotaWZuZXEgKCQod2lsZGNhcmQgJChUQVJHRVRfREVWSUNFX0RJUikvYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZy5oKSwpCi0kKGVycm9yIFVzaW5nICQoVEFSR0VUX0RFVklDRV9ESVIpL2FuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcuaCBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIFRBUkdFVF9GU19DT05GSUdfR0VOIGluc3RlYWQpCi1lbmRpZgotCi1hbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnIDo9IHN5c3RlbS9jb3JlL2xpYmN1dGlscy9pbmNsdWRlL3ByaXZhdGUvYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZy5oCi1jYXBhYmlsaXR5X2hlYWRlciA6PSBiaW9uaWMvbGliYy9rZXJuZWwvdWFwaS9saW51eC9jYXBhYmlsaXR5LmgKLQotIyBMaXN0IG9mIHN1cHBvcnRlZCB2ZW5kb3IsIG9lbSwgb2RtLCB2ZW5kb3JfZGxrbSwgb2RtX2Rsa20sIGFuZCBzeXN0ZW1fZGxrbSBQYXJ0aXRpb25zCi1mc19jb25maWdfZ2VuZXJhdGVfZXh0cmFfcGFydGl0aW9uX2xpc3QgOj0gJChzdHJpcCBcCi0gICQoaWYgJChCT0FSRF9VU0VTX1ZFTkRPUklNQUdFKSQoQk9BUkRfVkVORE9SSU1BR0VfRklMRV9TWVNURU1fVFlQRSksdmVuZG9yKSBcCi0gICQoaWYgJChCT0FSRF9VU0VTX09FTUlNQUdFKSQoQk9BUkRfT0VNSU1BR0VfRklMRV9TWVNURU1fVFlQRSksb2VtKSBcCi0gICQoaWYgJChCT0FSRF9VU0VTX09ETUlNQUdFKSQoQk9BUkRfT0RNSU1BR0VfRklMRV9TWVNURU1fVFlQRSksb2RtKSBcCi0gICQoaWYgJChCT0FSRF9VU0VTX1ZFTkRPUl9ETEtNSU1BR0UpJChCT0FSRF9WRU5ET1JfRExLTUlNQUdFX0ZJTEVfU1lTVEVNX1RZUEUpLHZlbmRvcl9kbGttKSBcCi0gICQoaWYgJChCT0FSRF9VU0VTX09ETV9ETEtNSU1BR0UpJChCT0FSRF9PRE1fRExLTUlNQUdFX0ZJTEVfU1lTVEVNX1RZUEUpLG9kbV9kbGttKSBcCi0gICQoaWYgJChCT0FSRF9VU0VTX1NZU1RFTV9ETEtNSU1BR0UpJChCT0FSRF9TWVNURU1fRExLTUlNQUdFX0ZJTEVfU1lTVEVNX1RZUEUpLHN5c3RlbV9kbGttKSBcCi0pCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgR2VuZXJhdGUgdGhlIDxwPi9ldGMvZnNfY29uZmlnX2RpcnMgYmluYXJ5IGZpbGVzIGZvciBlYWNoIHBhcnRpdGlvbi4KLSMgQWRkIGZzX2NvbmZpZ19kaXJzIHRvIFBST0RVQ1RfUEFDS0FHRVMgaW4gdGhlIGRldmljZSBtYWtlIGZpbGUgdG8gZW5hYmxlLgotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX01PRFVMRSA6PSBmc19jb25maWdfZGlycwotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRSA6PSBidWlsZC9zb29uZy9saWNlbnNlcy9MSUNFTlNFCi1MT0NBTF9SRVFVSVJFRF9NT0RVTEVTIDo9IFwKLSAgZnNfY29uZmlnX2RpcnNfc3lzdGVtIFwKLSAgZnNfY29uZmlnX2RpcnNfc3lzdGVtX2V4dCBcCi0gIGZzX2NvbmZpZ19kaXJzX3Byb2R1Y3QgXAotICBmc19jb25maWdfZGlyc19ub25zeXN0ZW0KLWluY2x1ZGUgJChCVUlMRF9QSE9OWV9QQUNLQUdFKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEdlbmVyYXRlIHRoZSA8cD4vZXRjL2ZzX2NvbmZpZ19maWxlcyBiaW5hcnkgZmlsZXMgZm9yIGVhY2ggcGFydGl0aW9uLgotIyBBZGQgZnNfY29uZmlnX2ZpbGVzIHRvIFBST0RVQ1RfUEFDS0FHRVMgaW4gdGhlIGRldmljZSBtYWtlIGZpbGUgdG8gZW5hYmxlLgotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX01PRFVMRSA6PSBmc19jb25maWdfZmlsZXMKLUxPQ0FMX0xJQ0VOU0VfS0lORFMgOj0gU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMAotTE9DQUxfTElDRU5TRV9DT05ESVRJT05TIDo9IG5vdGljZQotTE9DQUxfTk9USUNFX0ZJTEUgOj0gYnVpbGQvc29vbmcvbGljZW5zZXMvTElDRU5TRQotTE9DQUxfUkVRVUlSRURfTU9EVUxFUyA6PSBcCi0gIGZzX2NvbmZpZ19maWxlc19zeXN0ZW0gXAotICBmc19jb25maWdfZmlsZXNfc3lzdGVtX2V4dCBcCi0gIGZzX2NvbmZpZ19maWxlc19wcm9kdWN0IFwKLSAgZnNfY29uZmlnX2ZpbGVzX25vbnN5c3RlbQotaW5jbHVkZSAkKEJVSUxEX1BIT05ZX1BBQ0tBR0UpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgR2VuZXJhdGUgdGhlIDxwPi9ldGMvZnNfY29uZmlnX2RpcnMgYmluYXJ5IGZpbGVzIGZvciBhbGwgZW5hYmxlZCBwYXJ0aXRpb25zCi0jIGV4Y2x1ZGluZyAvc3lzdGVtLCAvc3lzdGVtX2V4dCBhbmQgL3Byb2R1Y3QuIEFkZCBmc19jb25maWdfZGlyc19ub25zeXN0ZW0gdG8KLSMgUFJPRFVDVF9QQUNLQUdFUyBpbiB0aGUgZGV2aWNlIG1ha2UgZmlsZSB0byBlbmFibGUuCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfTU9EVUxFIDo9IGZzX2NvbmZpZ19kaXJzX25vbnN5c3RlbQotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRSA6PSBidWlsZC9zb29uZy9saWNlbnNlcy9MSUNFTlNFCi1MT0NBTF9SRVFVSVJFRF9NT0RVTEVTIDo9ICQoZm9yZWFjaCB0LCQoZnNfY29uZmlnX2dlbmVyYXRlX2V4dHJhX3BhcnRpdGlvbl9saXN0KSxmc19jb25maWdfZGlyc18kKHQpKQotaW5jbHVkZSAkKEJVSUxEX1BIT05ZX1BBQ0tBR0UpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgR2VuZXJhdGUgdGhlIDxwPi9ldGMvZnNfY29uZmlnX2ZpbGVzIGJpbmFyeSBmaWxlcyBmb3IgYWxsIGVuYWJsZWQgcGFydGl0aW9ucwotIyBleGNsdWRpbmcgL3N5c3RlbSwgL3N5c3RlbV9leHQgYW5kIC9wcm9kdWN0LiBBZGQgZnNfY29uZmlnX2ZpbGVzX25vbnN5c3RlbSB0bwotIyBQUk9EVUNUX1BBQ0tBR0VTIGluIHRoZSBkZXZpY2UgbWFrZSBmaWxlIHRvIGVuYWJsZS4KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9NT0RVTEUgOj0gZnNfY29uZmlnX2ZpbGVzX25vbnN5c3RlbQotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRSA6PSBidWlsZC9zb29uZy9saWNlbnNlcy9MSUNFTlNFCi1MT0NBTF9SRVFVSVJFRF9NT0RVTEVTIDo9ICQoZm9yZWFjaCB0LCQoZnNfY29uZmlnX2dlbmVyYXRlX2V4dHJhX3BhcnRpdGlvbl9saXN0KSxmc19jb25maWdfZmlsZXNfJCh0KSkKLWluY2x1ZGUgJChCVUlMRF9QSE9OWV9QQUNLQUdFKQotCi1pZm5lcSAoJChmaWx0ZXIgb2VtLCQoZnNfY29uZmlnX2dlbmVyYXRlX2V4dHJhX3BhcnRpdGlvbl9saXN0KSksKQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBHZW5lcmF0ZSB0aGUgb2VtL2V0Yy9mc19jb25maWdfZGlycyBiaW5hcnkgZmlsZSBmb3IgdGhlIHRhcmdldAotIyBBZGQgZnNfY29uZmlnX2RpcnMgb3IgZnNfY29uZmlnX2RpcnNfbm9uc3lzdGVtIHRvIFBST0RVQ1RfUEFDS0FHRVMKLSMgaW4gdGhlIGRldmljZSBtYWtlIGZpbGUgdG8gZW5hYmxlCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfTU9EVUxFIDo9IGZzX2NvbmZpZ19kaXJzX29lbQotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRSA6PSBidWlsZC9zb29uZy9saWNlbnNlcy9MSUNFTlNFCi1MT0NBTF9NT0RVTEVfQ0xBU1MgOj0gRVRDCi1MT0NBTF9JTlNUQUxMRURfTU9EVUxFX1NURU0gOj0gZnNfY29uZmlnX2RpcnMKLUxPQ0FMX01PRFVMRV9QQVRIIDo9ICQoVEFSR0VUX09VVF9PRU0pL2V0YwotaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvYmFzZV9ydWxlcy5tawotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX0FORFJPSURfRlNfSERSIDo9ICQoYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZykKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9BTkRST0lEX0NBUF9IRFIgOj0gJChjYXBhYmlsaXR5X2hlYWRlcikKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9UQVJHRVRfRlNfQ09ORklHX0dFTiA6PSAkKFRBUkdFVF9GU19DT05GSUdfR0VOKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiAkKExPQ0FMX1BBVEgpL2ZzX2NvbmZpZ19nZW5lcmF0b3IucHkgJChUQVJHRVRfRlNfQ09ORklHX0dFTikgJChhbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnKSAkKGNhcGFiaWxpdHlfaGVhZGVyKQotCUBta2RpciAtcCAkKGRpciAkQCkKLQkkPCBmc2NvbmZpZyBcCi0JICAgLS1haWQtaGVhZGVyICQoUFJJVkFURV9BTkRST0lEX0ZTX0hEUikgXAotCSAgIC0tY2FwYWJpbGl0eS1oZWFkZXIgJChQUklWQVRFX0FORFJPSURfQ0FQX0hEUikgXAotCSAgIC0tcGFydGl0aW9uIG9lbSBcCi0JICAgLS1kaXJzIFwKLQkgICAtLW91dF9maWxlICRAIFwKLQkgICAkKG9yICQoUFJJVkFURV9UQVJHRVRfRlNfQ09ORklHX0dFTiksL2Rldi9udWxsKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEdlbmVyYXRlIHRoZSBvZW0vZXRjL2ZzX2NvbmZpZ19maWxlcyBiaW5hcnkgZmlsZSBmb3IgdGhlIHRhcmdldAotIyBBZGQgZnNfY29uZmlnX2ZpbGVzIG9yIGZzX2NvbmZpZ19maWxlc19ub25zeXN0ZW0gdG8gUFJPRFVDVF9QQUNLQUdFUwotIyBpbiB0aGUgZGV2aWNlIG1ha2UgZmlsZSB0byBlbmFibGUKLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9NT0RVTEUgOj0gZnNfY29uZmlnX2ZpbGVzX29lbQotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRSA6PSBidWlsZC9zb29uZy9saWNlbnNlcy9MSUNFTlNFCi1MT0NBTF9NT0RVTEVfQ0xBU1MgOj0gRVRDCi1MT0NBTF9JTlNUQUxMRURfTU9EVUxFX1NURU0gOj0gZnNfY29uZmlnX2ZpbGVzCi1MT0NBTF9NT0RVTEVfUEFUSCA6PSAkKFRBUkdFVF9PVVRfT0VNKS9ldGMKLWluY2x1ZGUgJChCVUlMRF9TWVNURU0pL2Jhc2VfcnVsZXMubWsKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9BTkRST0lEX0ZTX0hEUiA6PSAkKGFuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcpCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfQU5EUk9JRF9DQVBfSERSIDo9ICQoY2FwYWJpbGl0eV9oZWFkZXIpCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfVEFSR0VUX0ZTX0NPTkZJR19HRU4gOj0gJChUQVJHRVRfRlNfQ09ORklHX0dFTikKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogJChMT0NBTF9QQVRIKS9mc19jb25maWdfZ2VuZXJhdG9yLnB5ICQoVEFSR0VUX0ZTX0NPTkZJR19HRU4pICQoYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZykgJChjYXBhYmlsaXR5X2hlYWRlcikKLQlAbWtkaXIgLXAgJChkaXIgJEApCi0JJDwgZnNjb25maWcgXAotCSAgIC0tYWlkLWhlYWRlciAkKFBSSVZBVEVfQU5EUk9JRF9GU19IRFIpIFwKLQkgICAtLWNhcGFiaWxpdHktaGVhZGVyICQoUFJJVkFURV9BTkRST0lEX0NBUF9IRFIpIFwKLQkgICAtLXBhcnRpdGlvbiBvZW0gXAotCSAgIC0tZmlsZXMgXAotCSAgIC0tb3V0X2ZpbGUgJEAgXAotCSAgICQob3IgJChQUklWQVRFX1RBUkdFVF9GU19DT05GSUdfR0VOKSwvZGV2L251bGwpCi0KLWVuZGlmCi0KLWlmbmVxICgkKGZpbHRlciB2ZW5kb3JfZGxrbSwkKGZzX2NvbmZpZ19nZW5lcmF0ZV9leHRyYV9wYXJ0aXRpb25fbGlzdCkpLCkKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgR2VuZXJhdGUgdGhlIHZlbmRvcl9kbGttL2V0Yy9mc19jb25maWdfZGlycyBiaW5hcnkgZmlsZSBmb3IgdGhlIHRhcmdldAotIyBBZGQgZnNfY29uZmlnX2RpcnMgb3IgZnNfY29uZmlnX2RpcnNfbm9uc3lzdGVtIHRvIFBST0RVQ1RfUEFDS0FHRVMgaW4KLSMgdGhlIGRldmljZSBtYWtlIGZpbGUgdG8gZW5hYmxlCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfTU9EVUxFIDo9IGZzX2NvbmZpZ19kaXJzX3ZlbmRvcl9kbGttCi1MT0NBTF9MSUNFTlNFX0tJTkRTIDo9IFNQRFgtbGljZW5zZS1pZGVudGlmaWVyLUFwYWNoZS0yLjAKLUxPQ0FMX0xJQ0VOU0VfQ09ORElUSU9OUyA6PSBub3RpY2UKLUxPQ0FMX05PVElDRV9GSUxFIDo9IGJ1aWxkL3Nvb25nL2xpY2Vuc2VzL0xJQ0VOU0UKLUxPQ0FMX01PRFVMRV9DTEFTUyA6PSBFVEMKLUxPQ0FMX0lOU1RBTExFRF9NT0RVTEVfU1RFTSA6PSBmc19jb25maWdfZGlycwotTE9DQUxfTU9EVUxFX1BBVEggOj0gJChUQVJHRVRfT1VUX1ZFTkRPUl9ETEtNKS9ldGMKLWluY2x1ZGUgJChCVUlMRF9TWVNURU0pL2Jhc2VfcnVsZXMubWsKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9BTkRST0lEX0ZTX0hEUiA6PSAkKGFuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcpCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfQU5EUk9JRF9DQVBfSERSIDo9ICQoY2FwYWJpbGl0eV9oZWFkZXIpCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfVEFSR0VUX0ZTX0NPTkZJR19HRU4gOj0gJChUQVJHRVRfRlNfQ09ORklHX0dFTikKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogJChMT0NBTF9QQVRIKS9mc19jb25maWdfZ2VuZXJhdG9yLnB5ICQoVEFSR0VUX0ZTX0NPTkZJR19HRU4pICQoYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZykgJChjYXBhYmlsaXR5X2hlYWRlcikKLQlAbWtkaXIgLXAgJChkaXIgJEApCi0JJDwgZnNjb25maWcgXAotCSAgIC0tYWlkLWhlYWRlciAkKFBSSVZBVEVfQU5EUk9JRF9GU19IRFIpIFwKLQkgICAtLWNhcGFiaWxpdHktaGVhZGVyICQoUFJJVkFURV9BTkRST0lEX0NBUF9IRFIpIFwKLQkgICAtLXBhcnRpdGlvbiB2ZW5kb3JfZGxrbSBcCi0JICAgLS1kaXJzIFwKLQkgICAtLW91dF9maWxlICRAIFwKLQkgICAkKG9yICQoUFJJVkFURV9UQVJHRVRfRlNfQ09ORklHX0dFTiksL2Rldi9udWxsKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEdlbmVyYXRlIHRoZSB2ZW5kb3JfZGxrbS9ldGMvZnNfY29uZmlnX2ZpbGVzIGJpbmFyeSBmaWxlIGZvciB0aGUgdGFyZ2V0Ci0jIEFkZCBmc19jb25maWdfZmlsZXMgb3IgZnNfY29uZmlnX2ZpbGVzX25vbnN5c3RlbSB0byBQUk9EVUNUX1BBQ0tBR0VTIGluCi0jIHRoZSBkZXZpY2UgbWFrZSBmaWxlIHRvIGVuYWJsZQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX01PRFVMRSA6PSBmc19jb25maWdfZmlsZXNfdmVuZG9yX2Rsa20KLUxPQ0FMX0xJQ0VOU0VfS0lORFMgOj0gU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMAotTE9DQUxfTElDRU5TRV9DT05ESVRJT05TIDo9IG5vdGljZQotTE9DQUxfTk9USUNFX0ZJTEUgOj0gYnVpbGQvc29vbmcvbGljZW5zZXMvTElDRU5TRQotTE9DQUxfTU9EVUxFX0NMQVNTIDo9IEVUQwotTE9DQUxfSU5TVEFMTEVEX01PRFVMRV9TVEVNIDo9IGZzX2NvbmZpZ19maWxlcwotTE9DQUxfTU9EVUxFX1BBVEggOj0gJChUQVJHRVRfT1VUX1ZFTkRPUl9ETEtNKS9ldGMKLWluY2x1ZGUgJChCVUlMRF9TWVNURU0pL2Jhc2VfcnVsZXMubWsKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9BTkRST0lEX0ZTX0hEUiA6PSAkKGFuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcpCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfQU5EUk9JRF9DQVBfSERSIDo9ICQoY2FwYWJpbGl0eV9oZWFkZXIpCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfVEFSR0VUX0ZTX0NPTkZJR19HRU4gOj0gJChUQVJHRVRfRlNfQ09ORklHX0dFTikKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogJChMT0NBTF9QQVRIKS9mc19jb25maWdfZ2VuZXJhdG9yLnB5ICQoVEFSR0VUX0ZTX0NPTkZJR19HRU4pICQoYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZykgJChjYXBhYmlsaXR5X2hlYWRlcikKLQlAbWtkaXIgLXAgJChkaXIgJEApCi0JJDwgZnNjb25maWcgXAotCSAgIC0tYWlkLWhlYWRlciAkKFBSSVZBVEVfQU5EUk9JRF9GU19IRFIpIFwKLQkgICAtLWNhcGFiaWxpdHktaGVhZGVyICQoUFJJVkFURV9BTkRST0lEX0NBUF9IRFIpIFwKLQkgICAtLXBhcnRpdGlvbiB2ZW5kb3JfZGxrbSBcCi0JICAgLS1maWxlcyBcCi0JICAgLS1vdXRfZmlsZSAkQCBcCi0JICAgJChvciAkKFBSSVZBVEVfVEFSR0VUX0ZTX0NPTkZJR19HRU4pLC9kZXYvbnVsbCkKLQotZW5kaWYKLQotaWZuZXEgKCQoZmlsdGVyIG9kbV9kbGttLCQoZnNfY29uZmlnX2dlbmVyYXRlX2V4dHJhX3BhcnRpdGlvbl9saXN0KSksKQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBHZW5lcmF0ZSB0aGUgb2RtX2Rsa20vZXRjL2ZzX2NvbmZpZ19kaXJzIGJpbmFyeSBmaWxlIGZvciB0aGUgdGFyZ2V0Ci0jIEFkZCBmc19jb25maWdfZGlycyBvciBmc19jb25maWdfZGlyc19ub25zeXN0ZW0gdG8gUFJPRFVDVF9QQUNLQUdFUwotIyBpbiB0aGUgZGV2aWNlIG1ha2UgZmlsZSB0byBlbmFibGUKLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9NT0RVTEUgOj0gZnNfY29uZmlnX2RpcnNfb2RtX2Rsa20KLUxPQ0FMX0xJQ0VOU0VfS0lORFMgOj0gU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMAotTE9DQUxfTElDRU5TRV9DT05ESVRJT05TIDo9IG5vdGljZQotTE9DQUxfTk9USUNFX0ZJTEUgOj0gYnVpbGQvc29vbmcvbGljZW5zZXMvTElDRU5TRQotTE9DQUxfTU9EVUxFX0NMQVNTIDo9IEVUQwotTE9DQUxfSU5TVEFMTEVEX01PRFVMRV9TVEVNIDo9IGZzX2NvbmZpZ19kaXJzCi1MT0NBTF9NT0RVTEVfUEFUSCA6PSAkKFRBUkdFVF9PVVRfT0RNX0RMS00pL2V0YwotaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvYmFzZV9ydWxlcy5tawotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX0FORFJPSURfRlNfSERSIDo9ICQoYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZykKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9BTkRST0lEX0NBUF9IRFIgOj0gJChjYXBhYmlsaXR5X2hlYWRlcikKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9UQVJHRVRfRlNfQ09ORklHX0dFTiA6PSAkKFRBUkdFVF9GU19DT05GSUdfR0VOKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiAkKExPQ0FMX1BBVEgpL2ZzX2NvbmZpZ19nZW5lcmF0b3IucHkgJChUQVJHRVRfRlNfQ09ORklHX0dFTikgJChhbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnKSAkKGNhcGFiaWxpdHlfaGVhZGVyKQotCUBta2RpciAtcCAkKGRpciAkQCkKLQkkPCBmc2NvbmZpZyBcCi0JICAgLS1haWQtaGVhZGVyICQoUFJJVkFURV9BTkRST0lEX0ZTX0hEUikgXAotCSAgIC0tY2FwYWJpbGl0eS1oZWFkZXIgJChQUklWQVRFX0FORFJPSURfQ0FQX0hEUikgXAotCSAgIC0tcGFydGl0aW9uIG9kbV9kbGttIFwKLQkgICAtLWRpcnMgXAotCSAgIC0tb3V0X2ZpbGUgJEAgXAotCSAgICQob3IgJChQUklWQVRFX1RBUkdFVF9GU19DT05GSUdfR0VOKSwvZGV2L251bGwpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgR2VuZXJhdGUgdGhlIG9kbV9kbGttL2V0Yy9mc19jb25maWdfZmlsZXMgYmluYXJ5IGZpbGUgZm9yIHRoZSB0YXJnZXQKLSMgQWRkIGZzX2NvbmZpZ19maWxlcyBvciBmc19jb25maWdfZmlsZXNfbm9uc3lzdGVtIHRvIFBST0RVQ1RfUEFDS0FHRVMKLSMgaW4gdGhlIGRldmljZSBtYWtlIGZpbGUgdG8gZW5hYmxlCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfTU9EVUxFIDo9IGZzX2NvbmZpZ19maWxlc19vZG1fZGxrbQotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRSA6PSBidWlsZC9zb29uZy9saWNlbnNlcy9MSUNFTlNFCi1MT0NBTF9NT0RVTEVfQ0xBU1MgOj0gRVRDCi1MT0NBTF9JTlNUQUxMRURfTU9EVUxFX1NURU0gOj0gZnNfY29uZmlnX2ZpbGVzCi1MT0NBTF9NT0RVTEVfUEFUSCA6PSAkKFRBUkdFVF9PVVRfT0RNX0RMS00pL2V0YwotaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvYmFzZV9ydWxlcy5tawotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX0FORFJPSURfRlNfSERSIDo9ICQoYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZykKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9BTkRST0lEX0NBUF9IRFIgOj0gJChjYXBhYmlsaXR5X2hlYWRlcikKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9UQVJHRVRfRlNfQ09ORklHX0dFTiA6PSAkKFRBUkdFVF9GU19DT05GSUdfR0VOKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiAkKExPQ0FMX1BBVEgpL2ZzX2NvbmZpZ19nZW5lcmF0b3IucHkgJChUQVJHRVRfRlNfQ09ORklHX0dFTikgJChhbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnKSAkKGNhcGFiaWxpdHlfaGVhZGVyKQotCUBta2RpciAtcCAkKGRpciAkQCkKLQkkPCBmc2NvbmZpZyBcCi0JICAgLS1haWQtaGVhZGVyICQoUFJJVkFURV9BTkRST0lEX0ZTX0hEUikgXAotCSAgIC0tY2FwYWJpbGl0eS1oZWFkZXIgJChQUklWQVRFX0FORFJPSURfQ0FQX0hEUikgXAotCSAgIC0tcGFydGl0aW9uIG9kbV9kbGttIFwKLQkgICAtLWZpbGVzIFwKLQkgICAtLW91dF9maWxlICRAIFwKLQkgICAkKG9yICQoUFJJVkFURV9UQVJHRVRfRlNfQ09ORklHX0dFTiksL2Rldi9udWxsKQotCi1lbmRpZgotCi1pZm5lcSAoJChmaWx0ZXIgc3lzdGVtX2Rsa20sJChmc19jb25maWdfZ2VuZXJhdGVfZXh0cmFfcGFydGl0aW9uX2xpc3QpKSwpCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEdlbmVyYXRlIHRoZSBzeXN0ZW1fZGxrbS9ldGMvZnNfY29uZmlnX2RpcnMgYmluYXJ5IGZpbGUgZm9yIHRoZSB0YXJnZXQKLSMgQWRkIGZzX2NvbmZpZ19kaXJzIG9yIGZzX2NvbmZpZ19kaXJzX25vbnN5c3RlbSB0byBQUk9EVUNUX1BBQ0tBR0VTCi0jIGluIHRoZSBkZXZpY2UgbWFrZSBmaWxlIHRvIGVuYWJsZQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX01PRFVMRSA6PSBmc19jb25maWdfZGlyc19zeXN0ZW1fZGxrbQotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRSA6PSBidWlsZC9zb29uZy9saWNlbnNlcy9MSUNFTlNFCi1MT0NBTF9NT0RVTEVfQ0xBU1MgOj0gRVRDCi1MT0NBTF9JTlNUQUxMRURfTU9EVUxFX1NURU0gOj0gZnNfY29uZmlnX2RpcnMKLUxPQ0FMX01PRFVMRV9QQVRIIDo9ICQoVEFSR0VUX09VVF9TWVNURU1fRExLTSkvZXRjCi1pbmNsdWRlICQoQlVJTERfU1lTVEVNKS9iYXNlX3J1bGVzLm1rCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfQU5EUk9JRF9GU19IRFIgOj0gJChhbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX0FORFJPSURfQ0FQX0hEUiA6PSAkKGNhcGFiaWxpdHlfaGVhZGVyKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX1RBUkdFVF9GU19DT05GSUdfR0VOIDo9ICQoVEFSR0VUX0ZTX0NPTkZJR19HRU4pCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6ICQoTE9DQUxfUEFUSCkvZnNfY29uZmlnX2dlbmVyYXRvci5weSAkKFRBUkdFVF9GU19DT05GSUdfR0VOKSAkKGFuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcpICQoY2FwYWJpbGl0eV9oZWFkZXIpCi0JQG1rZGlyIC1wICQoZGlyICRAKQotCSQ8IGZzY29uZmlnIFwKLQkgICAtLWFpZC1oZWFkZXIgJChQUklWQVRFX0FORFJPSURfRlNfSERSKSBcCi0JICAgLS1jYXBhYmlsaXR5LWhlYWRlciAkKFBSSVZBVEVfQU5EUk9JRF9DQVBfSERSKSBcCi0JICAgLS1wYXJ0aXRpb24gc3lzdGVtX2Rsa20gXAotCSAgIC0tZGlycyBcCi0JICAgLS1vdXRfZmlsZSAkQCBcCi0JICAgJChvciAkKFBSSVZBVEVfVEFSR0VUX0ZTX0NPTkZJR19HRU4pLC9kZXYvbnVsbCkKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBHZW5lcmF0ZSB0aGUgc3lzdGVtX2Rsa20vZXRjL2ZzX2NvbmZpZ19maWxlcyBiaW5hcnkgZmlsZSBmb3IgdGhlIHRhcmdldAotIyBBZGQgZnNfY29uZmlnX2ZpbGVzIG9yIGZzX2NvbmZpZ19maWxlc19ub25zeXN0ZW0gdG8gUFJPRFVDVF9QQUNLQUdFUwotIyBpbiB0aGUgZGV2aWNlIG1ha2UgZmlsZSB0byBlbmFibGUKLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9NT0RVTEUgOj0gZnNfY29uZmlnX2ZpbGVzX3N5c3RlbV9kbGttCi1MT0NBTF9MSUNFTlNFX0tJTkRTIDo9IFNQRFgtbGljZW5zZS1pZGVudGlmaWVyLUFwYWNoZS0yLjAKLUxPQ0FMX0xJQ0VOU0VfQ09ORElUSU9OUyA6PSBub3RpY2UKLUxPQ0FMX05PVElDRV9GSUxFIDo9IGJ1aWxkL3Nvb25nL2xpY2Vuc2VzL0xJQ0VOU0UKLUxPQ0FMX01PRFVMRV9DTEFTUyA6PSBFVEMKLUxPQ0FMX0lOU1RBTExFRF9NT0RVTEVfU1RFTSA6PSBmc19jb25maWdfZmlsZXMKLUxPQ0FMX01PRFVMRV9QQVRIIDo9ICQoVEFSR0VUX09VVF9TWVNURU1fRExLTSkvZXRjCi1pbmNsdWRlICQoQlVJTERfU1lTVEVNKS9iYXNlX3J1bGVzLm1rCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfQU5EUk9JRF9GU19IRFIgOj0gJChhbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX0FORFJPSURfQ0FQX0hEUiA6PSAkKGNhcGFiaWxpdHlfaGVhZGVyKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX1RBUkdFVF9GU19DT05GSUdfR0VOIDo9ICQoVEFSR0VUX0ZTX0NPTkZJR19HRU4pCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6ICQoTE9DQUxfUEFUSCkvZnNfY29uZmlnX2dlbmVyYXRvci5weSAkKFRBUkdFVF9GU19DT05GSUdfR0VOKSAkKGFuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcpICQoY2FwYWJpbGl0eV9oZWFkZXIpCi0JQG1rZGlyIC1wICQoZGlyICRAKQotCSQ8IGZzY29uZmlnIFwKLQkgICAtLWFpZC1oZWFkZXIgJChQUklWQVRFX0FORFJPSURfRlNfSERSKSBcCi0JICAgLS1jYXBhYmlsaXR5LWhlYWRlciAkKFBSSVZBVEVfQU5EUk9JRF9DQVBfSERSKSBcCi0JICAgLS1wYXJ0aXRpb24gc3lzdGVtX2Rsa20gXAotCSAgIC0tZmlsZXMgXAotCSAgIC0tb3V0X2ZpbGUgJEAgXAotCSAgICQob3IgJChQUklWQVRFX1RBUkdFVF9GU19DT05GSUdfR0VOKSwvZGV2L251bGwpCi0KLWVuZGlmCi0KLWFuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcgOj0KLWNhcGFiaWxpdHlfaGVhZGVyIDo9Ci1mc19jb25maWdfZ2VuZXJhdGVfZXh0cmFfcGFydGl0aW9uX2xpc3QgOj0KZGlmZiAtLWdpdCBhL3Rvb2xzL2lkZV9xdWVyeS9pZGVfcXVlcnkuZ28gYi90b29scy9pZGVfcXVlcnkvaWRlX3F1ZXJ5LmdvCmluZGV4IDIzYzdhYmQuLmM3Y2Y1ZWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2lkZV9xdWVyeS9pZGVfcXVlcnkuZ28KKysrIGIvdG9vbHMvaWRlX3F1ZXJ5L2lkZV9xdWVyeS5nbwpAQCAtMjkzLDExICsyOTMsMTkgQEAKIC8vIElmIGEgZmlsZSBpcyBjb3ZlcmVkIGJ5IG11bHRpcGxlIG1vZHVsZXMsIHRoZSBmaXJzdCBtb2R1bGUgaXMgcmV0dXJuZWQuCiBmdW5jIGZpbmRKYXZhTW9kdWxlcyhwYXRocyBbXXN0cmluZywgbW9kdWxlcyBtYXBbc3RyaW5nXSpqYXZhTW9kdWxlKSBtYXBbc3RyaW5nXXN0cmluZyB7CiAJcmV0IDo9IG1ha2UobWFwW3N0cmluZ11zdHJpbmcpCi0JZm9yIG5hbWUsIG1vZHVsZSA6PSByYW5nZSBtb2R1bGVzIHsKKwkvLyBBIGZpbGUgbWF5IGJlIHBhcnQgb2YgbXVsdGlwbGUgbW9kdWxlcy4gVG8gbWFrZSB0aGUgcmVzdWx0IGRldGVybWluaXN0aWMsCisJLy8gY2hlY2sgdGhlIG1vZHVsZXMgaW4gc29ydGVkIG9yZGVyLgorCWtleXMgOj0gbWFrZShbXXN0cmluZywgMCwgbGVuKG1vZHVsZXMpKQorCWZvciBuYW1lIDo9IHJhbmdlIG1vZHVsZXMgeworCQlrZXlzID0gYXBwZW5kKGtleXMsIG5hbWUpCisJfQorCXNsaWNlcy5Tb3J0KGtleXMpCisJZm9yIF8sIG5hbWUgOj0gcmFuZ2Uga2V5cyB7CiAJCWlmIHN0cmluZ3MuSGFzU3VmZml4KG5hbWUsICIuaW1wbCIpIHsKIAkJCWNvbnRpbnVlCiAJCX0KIAorCQltb2R1bGUgOj0gbW9kdWxlc1tuYW1lXQogCQlmb3IgaSwgcCA6PSByYW5nZSBwYXRocyB7CiAJCQlpZiBzbGljZXMuQ29udGFpbnMobW9kdWxlLlNyY3MsIHApIHsKIAkJCQlyZXRbcF0gPSBuYW1lCkBAIC0zNDEsNiArMzQ5LDggQEAKIAkJCUlkOiAgICAgICAgICAgICAgbW9kdWxlTmFtZSwKIAkJCUxhbmd1YWdlOiAgICAgICAgcGIuTGFuZ3VhZ2VfTEFOR1VBR0VfSkFWQSwKIAkJCVNvdXJjZUZpbGVQYXRoczogbS5TcmNzLAorCQkJR2VuZXJhdGVkRmlsZXM6ICBnZW5GaWxlcyhlbnYsIG0pLAorCQkJRGVwZW5kZW5jeUlkczogICBtLkRlcHMsCiAJCX0KIAkJdW5pdHNCeUlkW3UuSWRdID0gdQogCkBAIC0zNTUsMTQgKzM2NSwxMSBAQAogCQkJCWNvbnRpbnVlCiAJCQl9CiAKLQkJCXZhciBwYXRocyBbXXN0cmluZwotCQkJcGF0aHMgPSBhcHBlbmQocGF0aHMsIG1vZC5TcmNzLi4uKQotCQkJcGF0aHMgPSBhcHBlbmQocGF0aHMsIG1vZC5TcmNKYXJzLi4uKQotCQkJcGF0aHMgPSBhcHBlbmQocGF0aHMsIG1vZC5KYXJzLi4uKQogCQkJdW5pdHNCeUlkW25hbWVdID0gJnBiLkJ1aWxkYWJsZVVuaXR7CiAJCQkJSWQ6ICAgICAgICAgICAgICBuYW1lLAogCQkJCVNvdXJjZUZpbGVQYXRoczogbW9kLlNyY3MsCi0JCQkJR2VuZXJhdGVkRmlsZXM6ICBnZW5GaWxlcyhlbnYsIHBhdGhzKSwKKwkJCQlHZW5lcmF0ZWRGaWxlczogIGdlbkZpbGVzKGVudiwgbW9kKSwKKwkJCQlEZXBlbmRlbmN5SWRzOiAgIG1vZC5EZXBzLAogCQkJfQogCiAJCQlmb3IgXywgZCA6PSByYW5nZSBtb2QuRGVwcyB7CkBAIC0zNzksOCArMzg2LDEzIEBACiB9CiAKIC8vIGdlbkZpbGVzIHJldHVybnMgdGhlIGdlbmVyYXRlZCBmaWxlcyAocGF0aHMgdGhhdCBzdGFydCB3aXRoIG91dERpci8pIGZvciB0aGUKLS8vIGdpdmVuIHBhdGhzLiBHZW5lcmF0ZWQgZmlsZXMgdGhhdCBkbyBub3QgZXhpc3QgYXJlIGlnbm9yZWQuCi1mdW5jIGdlbkZpbGVzKGVudiBFbnYsIHBhdGhzIFtdc3RyaW5nKSBbXSpwYi5HZW5lcmF0ZWRGaWxlIHsKKy8vIGdpdmVuIG1vZHVsZS4gR2VuZXJhdGVkIGZpbGVzIHRoYXQgZG8gbm90IGV4aXN0IGFyZSBpZ25vcmVkLgorZnVuYyBnZW5GaWxlcyhlbnYgRW52LCBtb2QgKmphdmFNb2R1bGUpIFtdKnBiLkdlbmVyYXRlZEZpbGUgeworCXZhciBwYXRocyBbXXN0cmluZworCXBhdGhzID0gYXBwZW5kKHBhdGhzLCBtb2QuU3Jjcy4uLikKKwlwYXRocyA9IGFwcGVuZChwYXRocywgbW9kLlNyY0phcnMuLi4pCisJcGF0aHMgPSBhcHBlbmQocGF0aHMsIG1vZC5KYXJzLi4uKQorCiAJcHJlZml4IDo9IGVudi5PdXREaXIgKyAiLyIKIAl2YXIgcmV0IFtdKnBiLkdlbmVyYXRlZEZpbGUKIAlmb3IgXywgcCA6PSByYW5nZSBwYXRocyB7CmRpZmYgLS1naXQgYS90b29scy9pZGVfcXVlcnkvaWRlX3F1ZXJ5LnNoIGIvdG9vbHMvaWRlX3F1ZXJ5L2lkZV9xdWVyeS5zaAppbmRleCA2ZjliMGM0Li44ZGZmZmMxIDEwMDc1NQotLS0gYS90b29scy9pZGVfcXVlcnkvaWRlX3F1ZXJ5LnNoCisrKyBiL3Rvb2xzL2lkZV9xdWVyeS9pZGVfcXVlcnkuc2gKQEAgLTE5LDcgKzE5LDcgQEAKIHJlcXVpcmVfdG9wCiAKICMgRW5zdXJlIGNvZ3NldHVwIChvdXQvIHdpbGwgYmUgc3ltbGluayBvdXRzaWRlIHRoZSByZXBvKQotLiAke1RPUH0vYnVpbGQvbWFrZS9jb2dzZXR1cC5zaAorc2V0dXBfY29nX2Vudl9pZl9uZWVkZWQKIAogY2FzZSAkKHVuYW1lIC1zKSBpbgogICAgIExpbnV4KQpkaWZmIC0tZ2l0IGEvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2lkZV9xdWVyeS5vdXQgYi90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvaWRlX3F1ZXJ5Lm91dAppbmRleCBjZDdjZTZkLi5iZTQ4ZGExIDEwMDY0NAotLS0gYS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvaWRlX3F1ZXJ5Lm91dAorKysgYi90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvaWRlX3F1ZXJ5Lm91dApAQCAtMSw3ICsxLDkgQEAKIAotA291dBKWYQotOGJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9nZW5lcmFsLmNjGjhwcmVidWlsdHMvY2xhbmcvaG9zdC9saW51eC14ODYvY2xhbmctcjUyMjgxNy9iaW4vY2xhbmcrKxoHLW10aHVtYhoDLU9zGhQtZm9taXQtZnJhbWUtcG9pbnRlchoGLW1sbHZtGhktZW5hYmxlLXNocmluay13cmFwPWZhbHNlGgMtTzIaBS1XYWxsGgctV2V4dHJhGgstV2luaXQtc2VsZhoPLVdwb2ludGVyLWFyaXRoGhgtV3VuZ3VhcmRlZC1hdmFpbGFiaWxpdHkaES1XZXJyb3I9ZGF0ZS10aW1lGhYtV2Vycm9yPWludC1jb252ZXJzaW9uGhMtV2Vycm9yPXByYWdtYS1wYWNrGiYtV2Vycm9yPXByYWdtYS1wYWNrLXN1c3BpY2lvdXMtaW5jbHVkZRoYLVdlcnJvcj1zaXplb2YtYXJyYXktZGl2GhctV2Vycm9yPXN0cmluZy1wbHVzLWludBonLVdlcnJvcj11bnJlYWNoYWJsZS1jb2RlLWxvb3AtaW5jcmVtZW50GiItV25vLWVycm9yPWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zGhMtV25vLWM5OS1kZXNpZ25hdG9yGhktV25vLWdudS1mb2xkaW5nLWNvbnN0YW50GiItV25vLWluY29uc2lzdGVudC1taXNzaW5nLW92ZXJyaWRlGhwtV25vLWVycm9yPXJlb3JkZXItaW5pdC1saXN0GhYtV25vLXJlb3JkZXItaW5pdC1saXN0GhEtV25vLXNpZ24tY29tcGFyZRoLLVduby11bnVzZWQaCS1EQU5EUk9JRBoILUROREVCVUcaBy1VREVCVUcaKC1EX19jb21waWxlcl9vZmZzZXRvZj1fX2J1aWx0aW5fb2Zmc2V0b2YaKi1EX19BTkRST0lEX1VOQVZBSUxBQkxFX1NZTUJPTFNfQVJFX1dFQUtfXxoJLWZhZGRyc2lnGhktZmRlYnVnLWRlZmF1bHQtdmVyc2lvbj01GhMtZmNvbG9yLWRpYWdub3N0aWNzGhEtZmZwLWNvbnRyYWN0PW9mZhoPLWZuby1leGNlcHRpb25zGhQtZm5vLXN0cmljdC1hbGlhc2luZxoSLWZtZXNzYWdlLWxlbmd0aD0wGiMtZm5vLXJlbGF4ZWQtdGVtcGxhdGUtdGVtcGxhdGUtYXJncxoXLWdzaW1wbGUtdGVtcGxhdGUtbmFtZXMaCC1nej16c3RkGhYtbm8tY2Fub25pY2FsLXByZWZpeGVzGhEtV25vLWVycm9yPWZvcm1hdBoiLWZkZWJ1Zy1wcmVmaXgtbWFwPS9wcm9jL3NlbGYvY3dkPRocLWZ0cml2aWFsLWF1dG8tdmFyLWluaXQ9emVybxoCLWcaEy1mZnVuY3Rpb24tc2VjdGlvbnMaDy1mZGF0YS1zZWN0aW9ucxoQLWZuby1zaG9ydC1lbnVtcxoPLWZ1bndpbmQtdGFibGVzGhgtZnN0YWNrLXByb3RlY3Rvci1zdHJvbmcaES1XYSwtLW5vZXhlY3N0YWNrGhMtRF9GT1JUSUZZX1NPVVJDRT0yGhMtV3N0cmljdC1hbGlhc2luZz0yGhMtV2Vycm9yPXJldHVybi10eXBlGhgtV2Vycm9yPW5vbi12aXJ0dWFsLWR0b3IaDy1XZXJyb3I9YWRkcmVzcxoWLVdlcnJvcj1zZXF1ZW5jZS1wb2ludBoXLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHkaDC1ub3N0ZGxpYmluYxoaLWZkZWJ1Zy1pbmZvLWZvci1wcm9maWxpbmcaDC1tc29mdC1mbG9hdBoOLW1hcmNoPWFybXY3LWEaEi1tZmxvYXQtYWJpPXNvZnRmcBoKLS1tZnB1PW5lb24aLy1JYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwGrMBLUlvdXQvc29vbmcvLmludGVybWVkaWF0ZXMvYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2lkZV9xdWVyeV9wcm9iZXJzY3JpcHRfY2MvYW5kcm9pZF9hcm1fYXJtdjctYS1uZW9uL2dlbi9wcm90by9idWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAahQEtSW91dC9zb29uZy8uaW50ZXJtZWRpYXRlcy9idWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvaWRlX3F1ZXJ5X3Byb2JlcnNjcmlwdF9jYy9hbmRyb2lkX2FybV9hcm12Ny1hLW5lb24vZ2VuL3Byb3RvGhQtRF9fTElCQ19BUElfXz0xMDAwMBoULURfX0xJQk1fQVBJX189MTAwMDAaFS1EX19MSUJETF9BUElfXz0xMDAwMBoXLUlleHRlcm5hbC9wcm90b2J1Zi9zcmMaWS1JcHJlYnVpbHRzL2NsYW5nL2hvc3QvbGludXgteDg2L2NsYW5nLXI1MjI4MTcvYW5kcm9pZF9saWJjKysvcGxhdGZvcm0vYXJtL2luY2x1ZGUvYysrL3YxGj0tSXByZWJ1aWx0cy9jbGFuZy9ob3N0L2xpbnV4LXg4Ni9jbGFuZy1yNTIyODE3L2luY2x1ZGUvYysrL3YxGiAtSWJpb25pYy9saWJjL2FzeW5jX3NhZmUvaW5jbHVkZRofLUlzeXN0ZW0vbG9nZ2luZy9saWJsb2cvaW5jbHVkZRonLUliaW9uaWMvbGliYy9zeXN0ZW1fcHJvcGVydGllcy9pbmNsdWRlGjwtSXN5c3RlbS9jb3JlL3Byb3BlcnR5X3NlcnZpY2UvbGlicHJvcGVydHlpbmZvcGFyc2VyL2luY2x1ZGUaCC1pc3lzdGVtGhNiaW9uaWMvbGliYy9pbmNsdWRlGggtaXN5c3RlbRofYmlvbmljL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybRoILWlzeXN0ZW0aF2Jpb25pYy9saWJjL2tlcm5lbC91YXBpGggtaXN5c3RlbRofYmlvbmljL2xpYmMva2VybmVsL2FuZHJvaWQvc2NzaRoILWlzeXN0ZW0aH2Jpb25pYy9saWJjL2tlcm5lbC9hbmRyb2lkL3VhcGkaBy10YXJnZXQaHWFybXY3YS1saW51eC1hbmRyb2lkZWFiaTEwMDAwGhAtREFORFJPSURfU1RSSUNUGgUtZlBJRRoHLVdlcnJvchoVLVduby11bnVzZWQtcGFyYW1ldGVyGhktREdPT0dMRV9QUk9UT0JVRl9OT19SVFRJGhYtV2ltcGxpY2l0LWZhbGx0aHJvdWdoGiotRF9MSUJDUFBfRU5BQkxFX1RIUkVBRF9TQUZFVFlfQU5OT1RBVElPTlMaFS1Xbm8tZ251LWluY2x1ZGUtbmV4dBobLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuGgYtbWxsdm0aGS1lbmFibGUtc2hyaW5rLXdyYXA9ZmFsc2UaDC1zdGQ9Z251KysyMBoJLWZuby1ydHRpGhUtSXN5c3RlbS9jb3JlL2luY2x1ZGUaHy1Jc3lzdGVtL2xvZ2dpbmcvbGlibG9nL2luY2x1ZGUaHC1Jc3lzdGVtL21lZGlhL2F1ZGlvL2luY2x1ZGUaHi1JaGFyZHdhcmUvbGliaGFyZHdhcmUvaW5jbHVkZRolLUloYXJkd2FyZS9saWJoYXJkd2FyZV9sZWdhY3kvaW5jbHVkZRoWLUloYXJkd2FyZS9yaWwvaW5jbHVkZRobLUlmcmFtZXdvcmtzL25hdGl2ZS9pbmNsdWRlGiItSWZyYW1ld29ya3MvbmF0aXZlL29wZW5nbC9pbmNsdWRlGhctSWZyYW1ld29ya3MvYXYvaW5jbHVkZRoWLVdlcnJvcj1ib29sLW9wZXJhdGlvbhogLVdlcnJvcj1mb3JtYXQtaW5zdWZmaWNpZW50LWFyZ3MaJS1XZXJyb3I9aW1wbGljaXQtaW50LWZsb2F0LWNvbnZlcnNpb24aGy1XZXJyb3I9aW50LWluLWJvb2wtY29udGV4dBobLVdlcnJvcj1pbnQtdG8tcG9pbnRlci1jYXN0GhstV2Vycm9yPXBvaW50ZXItdG8taW50LWNhc3QaFy1XZXJyb3I9eG9yLXVzZWQtYXMtcG93Gh4tV25vLXZvaWQtcG9pbnRlci10by1lbnVtLWNhc3QaHS1Xbm8tdm9pZC1wb2ludGVyLXRvLWludC1jYXN0GhgtV25vLXBvaW50ZXItdG8taW50LWNhc3QaFi1XZXJyb3I9Zm9ydGlmeS1zb3VyY2UaFC1Xbm8tdW51c2VkLXZhcmlhYmxlGh8tV25vLW1pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzGhMtV25vLXBhY2tlZC1ub24tcG9kGhwtV2Vycm9yPWFkZHJlc3Mtb2YtdGVtcG9yYXJ5GistV2Vycm9yPWluY29tcGF0aWJsZS1mdW5jdGlvbi1wb2ludGVyLXR5cGVzGhgtV2Vycm9yPW51bGwtZGVyZWZlcmVuY2UaEy1XZXJyb3I9cmV0dXJuLXR5cGUaIi1Xbm8tdGF1dG9sb2dpY2FsLWNvbnN0YW50LWNvbXBhcmUaJC1Xbm8tdGF1dG9sb2dpY2FsLXR5cGUtbGltaXQtY29tcGFyZRoiLVduby1pbXBsaWNpdC1pbnQtZmxvYXQtY29udmVyc2lvbhohLVduby10YXV0b2xvZ2ljYWwtb3ZlcmxhcC1jb21wYXJlGhQtV25vLWRlcHJlY2F0ZWQtY29weRoZLVduby1yYW5nZS1sb29wLWNvbnN0cnVjdBoiLVduby16ZXJvLWFzLW51bGwtcG9pbnRlci1jb25zdGFudBopLVduby1kZXByZWNhdGVkLWFub24tZW51bS1lbnVtLWNvbnZlcnNpb24aJC1Xbm8tZGVwcmVjYXRlZC1lbnVtLWVudW0tY29udmVyc2lvbhoVLVduby1wZXNzaW1pemluZy1tb3ZlGh4tV25vLW5vbi1jLXR5cGVkZWYtZm9yLWxpbmthZ2UaEy1Xbm8tYWxpZ24tbWlzbWF0Y2gaIi1Xbm8tZXJyb3I9dW51c2VkLWJ1dC1zZXQtdmFyaWFibGUaIy1Xbm8tZXJyb3I9dW51c2VkLWJ1dC1zZXQtcGFyYW1ldGVyGh4tV25vLWVycm9yPWRlcHJlY2F0ZWQtYnVpbHRpbnMaFS1Xbm8tZXJyb3I9ZGVwcmVjYXRlZBoyLVduby1lcnJvcj1zaW5nbGUtYml0LWJpdGZpZWxkLWNvbnN0YW50LWNvbnZlcnNpb24aJC1Xbm8tZXJyb3I9ZW51bS1jb25zdGV4cHItY29udmVyc2lvbhobLVduby1lcnJvcj1pbnZhbGlkLW9mZnNldG9mGiYtV25vLWRlcHJlY2F0ZWQtZHluYW1pYy1leGNlcHRpb24tc3BlYxo4YnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2dlbmVyYWwuY2Mi1T8KKwNvdXQyeAorOGJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9nZW5lcmFsLmNjEgIIARo4YnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2dlbmVyYWwuY2M6lyIKKzhidWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvZ2VuZXJhbC5jYxACGjhidWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvZ2VuZXJhbC5jYyI4cHJlYnVpbHRzL2NsYW5nL2hvc3QvbGludXgteDg2L2NsYW5nLXI1MzA1NjcvYmluL2NsYW5nKysiDC1ub3N0ZGxpYmluYyIHLW10aHVtYiIDLU9zIhQtZm9taXQtZnJhbWUtcG9pbnRlciIGLW1sbHZtIhktZW5hYmxlLXNocmluay13cmFwPWZhbHNlIgMtTzIiBS1XYWxsIgctV2V4dHJhIgstV2luaXQtc2VsZiIPLVdwb2ludGVyLWFyaXRoIhgtV3VuZ3VhcmRlZC1hdmFpbGFiaWxpdHkiES1XZXJyb3I9ZGF0ZS10aW1lIhYtV2Vycm9yPWludC1jb252ZXJzaW9uIhMtV2Vycm9yPXByYWdtYS1wYWNrIiYtV2Vycm9yPXByYWdtYS1wYWNrLXN1c3BpY2lvdXMtaW5jbHVkZSIYLVdlcnJvcj1zaXplb2YtYXJyYXktZGl2IhctV2Vycm9yPXN0cmluZy1wbHVzLWludCInLVdlcnJvcj11bnJlYWNoYWJsZS1jb2RlLWxvb3AtaW5jcmVtZW50IiItV25vLWVycm9yPWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIhMtV25vLWMyMy1leHRlbnNpb25zIhMtV25vLWM5OS1kZXNpZ25hdG9yIhktV25vLWdudS1mb2xkaW5nLWNvbnN0YW50IiItV25vLWluY29uc2lzdGVudC1taXNzaW5nLW92ZXJyaWRlIhwtV25vLWVycm9yPXJlb3JkZXItaW5pdC1saXN0IhYtV25vLXJlb3JkZXItaW5pdC1saXN0IhEtV25vLXNpZ24tY29tcGFyZSILLVduby11bnVzZWQiCS1EQU5EUk9JRCIILUROREVCVUciBy1VREVCVUciKC1EX19jb21waWxlcl9vZmZzZXRvZj1fX2J1aWx0aW5fb2Zmc2V0b2YiKi1EX19BTkRST0lEX1VOQVZBSUxBQkxFX1NZTUJPTFNfQVJFX1dFQUtfXyIJLWZhZGRyc2lnIhktZmRlYnVnLWRlZmF1bHQtdmVyc2lvbj01IhMtZmNvbG9yLWRpYWdub3N0aWNzIhEtZmZwLWNvbnRyYWN0PW9mZiIPLWZuby1leGNlcHRpb25zIhQtZm5vLXN0cmljdC1hbGlhc2luZyISLWZtZXNzYWdlLWxlbmd0aD0wIhctZ3NpbXBsZS10ZW1wbGF0ZS1uYW1lcyIILWd6PXpzdGQiFi1uby1jYW5vbmljYWwtcHJlZml4ZXMiIi1mZGVidWctcHJlZml4LW1hcD0vcHJvYy9zZWxmL2N3ZD0iHC1mdHJpdmlhbC1hdXRvLXZhci1pbml0PXplcm8iAi1nIhMtZmZ1bmN0aW9uLXNlY3Rpb25zIg8tZmRhdGEtc2VjdGlvbnMiEC1mbm8tc2hvcnQtZW51bXMiDy1mdW53aW5kLXRhYmxlcyIYLWZzdGFjay1wcm90ZWN0b3Itc3Ryb25nIhEtV2EsLS1ub2V4ZWNzdGFjayITLURfRk9SVElGWV9TT1VSQ0U9MiITLVdzdHJpY3QtYWxpYXNpbmc9MiITLVdlcnJvcj1yZXR1cm4tdHlwZSIYLVdlcnJvcj1ub24tdmlydHVhbC1kdG9yIg8tV2Vycm9yPWFkZHJlc3MiFi1XZXJyb3I9c2VxdWVuY2UtcG9pbnQiFy1XZXJyb3I9Zm9ybWF0LXNlY3VyaXR5IgwtbXNvZnQtZmxvYXQiDi1tYXJjaD1hcm12Ny1hIhItbWZsb2F0LWFiaT1zb2Z0ZnAiCistbWZwdT1uZW9uIi8tSWJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcCKzAS1Jb3V0L3Nvb25nLy5pbnRlcm1lZGlhdGVzL2J1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9pZGVfcXVlcnlfcHJvYmVyc2NyaXB0X2NjL2FuZHJvaWRfYXJtX2FybXY3LWEtbmVvbi9nZW4vcHJvdG8vYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwIoUBLUlvdXQvc29vbmcvLmludGVybWVkaWF0ZXMvYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2lkZV9xdWVyeV9wcm9iZXJzY3JpcHRfY2MvYW5kcm9pZF9hcm1fYXJtdjctYS1uZW9uL2dlbi9wcm90byIULURfX0xJQkNfQVBJX189MTAwMDAiFC1EX19MSUJNX0FQSV9fPTEwMDAwIhUtRF9fTElCRExfQVBJX189MTAwMDAiFy1JZXh0ZXJuYWwvcHJvdG9idWYvc3JjIlktSXByZWJ1aWx0cy9jbGFuZy9ob3N0L2xpbnV4LXg4Ni9jbGFuZy1yNTMwNTY3L2FuZHJvaWRfbGliYysrL3BsYXRmb3JtL2FybS9pbmNsdWRlL2MrKy92MSI9LUlwcmVidWlsdHMvY2xhbmcvaG9zdC9saW51eC14ODYvY2xhbmctcjUzMDU2Ny9pbmNsdWRlL2MrKy92MSIgLUliaW9uaWMvbGliYy9hc3luY19zYWZlL2luY2x1ZGUiHy1Jc3lzdGVtL2xvZ2dpbmcvbGlibG9nL2luY2x1ZGUiJy1JYmlvbmljL2xpYmMvc3lzdGVtX3Byb3BlcnRpZXMvaW5jbHVkZSI8LUlzeXN0ZW0vY29yZS9wcm9wZXJ0eV9zZXJ2aWNlL2xpYnByb3BlcnR5aW5mb3BhcnNlci9pbmNsdWRlIggtaXN5c3RlbSITYmlvbmljL2xpYmMvaW5jbHVkZSIILWlzeXN0ZW0iH2Jpb25pYy9saWJjL2tlcm5lbC91YXBpL2FzbS1hcm0iCC1pc3lzdGVtIhdiaW9uaWMvbGliYy9rZXJuZWwvdWFwaSIILWlzeXN0ZW0iH2Jpb25pYy9saWJjL2tlcm5lbC9hbmRyb2lkL3Njc2kiCC1pc3lzdGVtIh9iaW9uaWMvbGliYy9rZXJuZWwvYW5kcm9pZC91YXBpIgctdGFyZ2V0Ih1hcm12N2EtbGludXgtYW5kcm9pZGVhYmkxMDAwMCIQLURBTkRST0lEX1NUUklDVCIFLWZQSUUiBy1XZXJyb3IiFS1Xbm8tdW51c2VkLXBhcmFtZXRlciIZLURHT09HTEVfUFJPVE9CVUZfTk9fUlRUSSIWLVdpbXBsaWNpdC1mYWxsdGhyb3VnaCIqLURfTElCQ1BQX0VOQUJMRV9USFJFQURfU0FGRVRZX0FOTk9UQVRJT05TIhUtV25vLWdudS1pbmNsdWRlLW5leHQiGy1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbiIGLW1sbHZtIhktZW5hYmxlLXNocmluay13cmFwPWZhbHNlIgwtc3RkPWdudSsrMjAiCS1mbm8tcnR0aSIVLUlzeXN0ZW0vY29yZS9pbmNsdWRlIh8tSXN5c3RlbS9sb2dnaW5nL2xpYmxvZy9pbmNsdWRlIhwtSXN5c3RlbS9tZWRpYS9hdWRpby9pbmNsdWRlIh4tSWhhcmR3YXJlL2xpYmhhcmR3YXJlL2luY2x1ZGUiJS1JaGFyZHdhcmUvbGliaGFyZHdhcmVfbGVnYWN5L2luY2x1ZGUiFi1JaGFyZHdhcmUvcmlsL2luY2x1ZGUiGy1JZnJhbWV3b3Jrcy9uYXRpdmUvaW5jbHVkZSIiLUlmcmFtZXdvcmtzL25hdGl2ZS9vcGVuZ2wvaW5jbHVkZSIXLUlmcmFtZXdvcmtzL2F2L2luY2x1ZGUiFi1XZXJyb3I9Ym9vbC1vcGVyYXRpb24iIC1XZXJyb3I9Zm9ybWF0LWluc3VmZmljaWVudC1hcmdzIiUtV2Vycm9yPWltcGxpY2l0LWludC1mbG9hdC1jb252ZXJzaW9uIhstV2Vycm9yPWludC1pbi1ib29sLWNvbnRleHQiGy1XZXJyb3I9aW50LXRvLXBvaW50ZXItY2FzdCIbLVdlcnJvcj1wb2ludGVyLXRvLWludC1jYXN0IhctV2Vycm9yPXhvci11c2VkLWFzLXBvdyIeLVduby12b2lkLXBvaW50ZXItdG8tZW51bS1jYXN0Ih0tV25vLXZvaWQtcG9pbnRlci10by1pbnQtY2FzdCIYLVduby1wb2ludGVyLXRvLWludC1jYXN0IhYtV2Vycm9yPWZvcnRpZnktc291cmNlIhQtV25vLXVudXNlZC12YXJpYWJsZSIfLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyITLVduby1wYWNrZWQtbm9uLXBvZCIcLVdlcnJvcj1hZGRyZXNzLW9mLXRlbXBvcmFyeSIrLVdlcnJvcj1pbmNvbXBhdGlibGUtZnVuY3Rpb24tcG9pbnRlci10eXBlcyIYLVdlcnJvcj1udWxsLWRlcmVmZXJlbmNlIhMtV2Vycm9yPXJldHVybi10eXBlIiItV25vLXRhdXRvbG9naWNhbC1jb25zdGFudC1jb21wYXJlIiQtV25vLXRhdXRvbG9naWNhbC10eXBlLWxpbWl0LWNvbXBhcmUiIi1Xbm8taW1wbGljaXQtaW50LWZsb2F0LWNvbnZlcnNpb24iIS1Xbm8tdGF1dG9sb2dpY2FsLW92ZXJsYXAtY29tcGFyZSIULVduby1kZXByZWNhdGVkLWNvcHkiGS1Xbm8tcmFuZ2UtbG9vcC1jb25zdHJ1Y3QiIi1Xbm8temVyby1hcy1udWxsLXBvaW50ZXItY29uc3RhbnQiKS1Xbm8tZGVwcmVjYXRlZC1hbm9uLWVudW0tZW51bS1jb252ZXJzaW9uIiQtV25vLWRlcHJlY2F0ZWQtZW51bS1lbnVtLWNvbnZlcnNpb24iGy1Xbm8tZXJyb3I9cGVzc2ltaXppbmctbW92ZSIeLVduby1ub24tYy10eXBlZGVmLWZvci1saW5rYWdlIhMtV25vLWFsaWduLW1pc21hdGNoIiItV25vLWVycm9yPXVudXNlZC1idXQtc2V0LXZhcmlhYmxlIiMtV25vLWVycm9yPXVudXNlZC1idXQtc2V0LXBhcmFtZXRlciIeLVduby1lcnJvcj1kZXByZWNhdGVkLWJ1aWx0aW5zIhUtV25vLWVycm9yPWRlcHJlY2F0ZWQiJi1Xbm8tZGVwcmVjYXRlZC1keW5hbWljLWV4Y2VwdGlvbi1zcGVjIiQtV25vLWVycm9yPWVudW0tY29uc3RleHByLWNvbnZlcnNpb24iGy1Xbm8tZXJyb3I9aW52YWxpZC1vZmZzZXRvZiIpLVduby1lcnJvcj10aHJlYWQtc2FmZXR5LXJlZmVyZW5jZS1yZXR1cm4iFi1Xbm8tdmxhLWN4eC1leHRlbnNpb24iOGJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9nZW5lcmFsLmNjMkVnZW5maWxlc19mb3JfYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2dlbmVyYWwuY2M6n0AKK0VnZW5maWxlc19mb3JfYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2dlbmVyYWwuY2Mq1T8KILYBc29vbmcvLmludGVybWVkaWF0ZXMvYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2lkZV9xdWVyeV9wcm9iZXJzY3JpcHRfY2MvYW5kcm9pZF9hcm1fYXJtdjctYS1uZW9uL2dlbi9wcm90by9idWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvZm9vLnBiLmgSmT4vLyBHZW5lcmF0ZWQgYnkgdGhlIHByb3RvY29sIGJ1ZmZlciBjb21waWxlci4gIERPIE5PVCBFRElUIQogLy8gc291cmNlOiBidWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvZm9vLnByb3RvCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9yZWdlbi5zaCBiL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9yZWdlbi5zaAppbmRleCAyZWRmZTUzLi4wNGEwMjY0IDEwMDc1NQotLS0gYS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvcmVnZW4uc2gKKysrIGIvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL3JlZ2VuLnNoCkBAIC0yMSwxMyArMjEsOCBAQAogIyBpZGVfcXVlcnkuc2guIFRoZSBwcm9iZXIgZG9lc24ndCBjaGVjay1vdXQgdGhlIGZ1bGwgc291cmNlIGNvZGUsIHNvIGl0CiAjIGNhbid0IHJ1biBpZGVfcXVlcnkuc2ggaXRzZWxmLgogCi1jZCAkKGRpcm5hbWUgJEJBU0hfU09VUkNFKQotc291cmNlICQocHdkKS8uLi8uLi8uLi9zaGVsbF91dGlscy5zaAotcmVxdWlyZV90b3AKLQogZmlsZXNfdG9fYnVpbGQ9KAogICBidWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvZ2VuZXJhbC5jYwogKQogCi1jZCAke1RPUH0KIGJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L2lkZV9xdWVyeS5zaCAtLWx1bmNoX3RhcmdldD1hb3NwX2FybS10cnVua19zdGFnaW5nLWVuZyAke2ZpbGVzX3RvX2J1aWxkW0BdfSA+IGJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2lkZV9xdWVyeS5vdXQKZGlmZiAtLWdpdCBhL3Rvb2xzL21ldGFkYXRhL0FuZHJvaWQuYnAgYi90b29scy9tZXRhZGF0YS9BbmRyb2lkLmJwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3N2QxMDZkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL21ldGFkYXRhL0FuZHJvaWQuYnAKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1wYWNrYWdlIHsKLSAgICBkZWZhdWx0X2FwcGxpY2FibGVfbGljZW5zZXM6IFsiQW5kcm9pZC1BcGFjaGUtMi4wIl0sCi19Ci0KLWJsdWVwcmludF9nb19iaW5hcnkgewotICAgIG5hbWU6ICJtZXRhZGF0YSIsCi0gICAgZGVwczogWwotICAgICAgICAgICAgInNvb25nLXRlc3RpbmctdGVzdF9zcGVjX3Byb3RvIiwKLSAgICAgICAgICAgICJzb29uZy10ZXN0aW5nLWNvZGVfbWV0YWRhdGFfcHJvdG8iLAotICAgICAgICAgICAgInNvb25nLXRlc3RpbmctY29kZV9tZXRhZGF0YV9pbnRlcm5hbF9wcm90byIsCi0gICAgICAgICAgICAiZ29sYW5nLXByb3RvYnVmLXByb3RvIiwKLSAgICAgICAgXSwKLSAgICBzcmNzOiBbCi0gICAgICAgICJnZW5lcmF0b3IuZ28iLAotICAgIF0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9tZXRhZGF0YS9PV05FUlMgYi90b29scy9tZXRhZGF0YS9PV05FUlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzYmNkZjEuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbWV0YWRhdGEvT1dORVJTCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1kYXJpb2ZyZW5pQGdvb2dsZS5jb20KLWpvZW9AZ29vZ2xlLmNvbQotcm9uaXNoQGdvb2dsZS5jb20KLWNhZGl0eWFAZ29vZ2xlLmNvbQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWV0YWRhdGEvZ2VuZXJhdG9yLmdvIGIvdG9vbHMvbWV0YWRhdGEvZ2VuZXJhdG9yLmdvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzY2OGJlLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL21ldGFkYXRhL2dlbmVyYXRvci5nbworKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi1wYWNrYWdlIG1haW4KLQotaW1wb3J0ICgKLQkiZmxhZyIKLQkiZm10IgotCSJpbyIKLQkibG9nIgotCSJvcyIKLQkic29ydCIKLQkic3RyaW5ncyIKLQkic3luYyIKLQotCSJhbmRyb2lkL3Nvb25nL3Rlc3RpbmcvY29kZV9tZXRhZGF0YV9pbnRlcm5hbF9wcm90byIKLQkiYW5kcm9pZC9zb29uZy90ZXN0aW5nL2NvZGVfbWV0YWRhdGFfcHJvdG8iCi0JImFuZHJvaWQvc29vbmcvdGVzdGluZy90ZXN0X3NwZWNfcHJvdG8iCi0JImdvb2dsZS5nb2xhbmcub3JnL3Byb3RvYnVmL3Byb3RvIgotKQotCi10eXBlIGtleVRvTG9ja3NNYXAgc3RydWN0IHsKLQlsb2NrcyBzeW5jLk1hcAotfQotCi1mdW5jIChrbCAqa2V5VG9Mb2Nrc01hcCkgR2V0TG9ja0ZvcktleShrZXkgc3RyaW5nKSAqc3luYy5NdXRleCB7Ci0JbXV0ZXgsIF8gOj0ga2wubG9ja3MuTG9hZE9yU3RvcmUoa2V5LCAmc3luYy5NdXRleHt9KQotCXJldHVybiBtdXRleC4oKnN5bmMuTXV0ZXgpCi19Ci0KLS8vIERlZmluZSBhIHN0cnVjdCB0byBob2xkIHRoZSBjb21iaW5hdGlvbiBvZiB0ZWFtIElEIGFuZCBtdWx0aS1vd25lcnNoaXAgZmxhZyBmb3IgdmFsaWRhdGlvbgotdHlwZSBzb3VyY2VGaWxlQXR0cmlidXRlcyBzdHJ1Y3QgewotCVRlYW1JRCAgICAgICAgIHN0cmluZwotCU11bHRpT3duZXJzaGlwIGJvb2wKLQlQYXRoICAgICAgICAgICBzdHJpbmcKLX0KLQotZnVuYyBnZXRTb3J0ZWRLZXlzKHN5bmNNYXAgKnN5bmMuTWFwKSBbXXN0cmluZyB7Ci0JdmFyIGFsbEtleXMgW11zdHJpbmcKLQlzeW5jTWFwLlJhbmdlKAotCQlmdW5jKGtleSwgXyBpbnRlcmZhY2V7fSkgYm9vbCB7Ci0JCQlhbGxLZXlzID0gYXBwZW5kKGFsbEtleXMsIGtleS4oc3RyaW5nKSkKLQkJCXJldHVybiB0cnVlCi0JCX0sCi0JKQotCi0Jc29ydC5TdHJpbmdzKGFsbEtleXMpCi0JcmV0dXJuIGFsbEtleXMKLX0KLQotLy8gd3JpdGVQcm90b1RvRmlsZSBtYXJzaGFscyBhIHByb3RvYnVmIG1lc3NhZ2UgYW5kIHdyaXRlcyBpdCB0byBhIGZpbGUKLWZ1bmMgd3JpdGVQcm90b1RvRmlsZShvdXRwdXRGaWxlIHN0cmluZywgbWVzc2FnZSBwcm90by5NZXNzYWdlKSB7Ci0JZGF0YSwgZXJyIDo9IHByb3RvLk1hcnNoYWwobWVzc2FnZSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJbG9nLkZhdGFsKGVycikKLQl9Ci0JZmlsZSwgZXJyIDo9IG9zLkNyZWF0ZShvdXRwdXRGaWxlKQotCWlmIGVyciAhPSBuaWwgewotCQlsb2cuRmF0YWwoZXJyKQotCX0KLQlkZWZlciBmaWxlLkNsb3NlKCkKLQotCV8sIGVyciA9IGZpbGUuV3JpdGUoZGF0YSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJbG9nLkZhdGFsKGVycikKLQl9Ci19Ci0KLWZ1bmMgcmVhZEZpbGVUb1N0cmluZyhmaWxlUGF0aCBzdHJpbmcpIHN0cmluZyB7Ci0JZmlsZSwgZXJyIDo9IG9zLk9wZW4oZmlsZVBhdGgpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCWxvZy5GYXRhbChlcnIpCi0JfQotCWRlZmVyIGZpbGUuQ2xvc2UoKQotCi0JZGF0YSwgZXJyIDo9IGlvLlJlYWRBbGwoZmlsZSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJbG9nLkZhdGFsKGVycikKLQl9Ci0JcmV0dXJuIHN0cmluZyhkYXRhKQotfQotCi1mdW5jIHdyaXRlRW1wdHlPdXRwdXRQcm90byhvdXRwdXRGaWxlIHN0cmluZywgbWV0YWRhdGFSdWxlIHN0cmluZykgewotCWZpbGUsIGVyciA6PSBvcy5DcmVhdGUob3V0cHV0RmlsZSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJbG9nLkZhdGFsKGVycikKLQl9Ci0JdmFyIG1lc3NhZ2UgcHJvdG8uTWVzc2FnZQotCWlmIG1ldGFkYXRhUnVsZSA9PSAidGVzdF9zcGVjIiB7Ci0JCW1lc3NhZ2UgPSAmdGVzdF9zcGVjX3Byb3RvLlRlc3RTcGVje30KLQl9IGVsc2UgaWYgbWV0YWRhdGFSdWxlID09ICJjb2RlX21ldGFkYXRhIiB7Ci0JCW1lc3NhZ2UgPSAmY29kZV9tZXRhZGF0YV9wcm90by5Db2RlTWV0YWRhdGF7fQotCX0KLQlkYXRhLCBlcnIgOj0gcHJvdG8uTWFyc2hhbChtZXNzYWdlKQotCWlmIGVyciAhPSBuaWwgewotCQlsb2cuRmF0YWwoZXJyKQotCX0KLQlkZWZlciBmaWxlLkNsb3NlKCkKLQotCV8sIGVyciA9IGZpbGUuV3JpdGUoW11ieXRlKGRhdGEpKQotCWlmIGVyciAhPSBuaWwgewotCQlsb2cuRmF0YWwoZXJyKQotCX0KLX0KLQotZnVuYyBwcm9jZXNzVGVzdFNwZWNQcm90b2J1ZigKLQlmaWxlUGF0aCBzdHJpbmcsIG93bmVyc2hpcE1ldGFkYXRhTWFwICpzeW5jLk1hcCwga2V5TG9ja3MgKmtleVRvTG9ja3NNYXAsCi0JZXJyQ2ggY2hhbiBlcnJvciwgd2cgKnN5bmMuV2FpdEdyb3VwLAotKSB7Ci0JZGVmZXIgd2cuRG9uZSgpCi0KLQlmaWxlQ29udGVudCA6PSBzdHJpbmdzLlRyaW1SaWdodChyZWFkRmlsZVRvU3RyaW5nKGZpbGVQYXRoKSwgIlxuIikKLQl0ZXN0RGF0YSA6PSB0ZXN0X3NwZWNfcHJvdG8uVGVzdFNwZWN7fQotCWVyciA6PSBwcm90by5Vbm1hcnNoYWwoW11ieXRlKGZpbGVDb250ZW50KSwgJnRlc3REYXRhKQotCWlmIGVyciAhPSBuaWwgewotCQllcnJDaCA8LSBlcnIKLQkJcmV0dXJuCi0JfQotCi0Jb3duZXJzaGlwTWV0YWRhdGEgOj0gdGVzdERhdGEuR2V0T3duZXJzaGlwTWV0YWRhdGFMaXN0KCkKLQlmb3IgXywgbWV0YWRhdGEgOj0gcmFuZ2Ugb3duZXJzaGlwTWV0YWRhdGEgewotCQlrZXkgOj0gbWV0YWRhdGEuR2V0VGFyZ2V0TmFtZSgpCi0JCWxvY2sgOj0ga2V5TG9ja3MuR2V0TG9ja0ZvcktleShrZXkpCi0JCWxvY2suTG9jaygpCi0KLQkJdmFsdWUsIGxvYWRlZCA6PSBvd25lcnNoaXBNZXRhZGF0YU1hcC5Mb2FkT3JTdG9yZSgKLQkJCWtleSwgW10qdGVzdF9zcGVjX3Byb3RvLlRlc3RTcGVjX093bmVyc2hpcE1ldGFkYXRhe21ldGFkYXRhfSwKLQkJKQotCQlpZiBsb2FkZWQgewotCQkJZXhpc3RpbmdNZXRhZGF0YSA6PSB2YWx1ZS4oW10qdGVzdF9zcGVjX3Byb3RvLlRlc3RTcGVjX093bmVyc2hpcE1ldGFkYXRhKQotCQkJaXNEdXBsaWNhdGUgOj0gZmFsc2UKLQkJCWZvciBfLCBleGlzdGluZyA6PSByYW5nZSBleGlzdGluZ01ldGFkYXRhIHsKLQkJCQlpZiBtZXRhZGF0YS5HZXRUcmVuZHlUZWFtSWQoKSAhPSBleGlzdGluZy5HZXRUcmVuZHlUZWFtSWQoKSB7Ci0JCQkJCWVyckNoIDwtIGZtdC5FcnJvcmYoCi0JCQkJCQkiQ29uZmxpY3RpbmcgdHJlbmR5IHRlYW0gSURzIGZvdW5kIGZvciAlcyBhdDpcbiVzIHdpdGggdGVhbUlkIisKLQkJCQkJCQkiOiAlcyxcbiVzIHdpdGggdGVhbUlkOiAlcyIsCi0JCQkJCQlrZXksCi0JCQkJCQltZXRhZGF0YS5HZXRQYXRoKCksIG1ldGFkYXRhLkdldFRyZW5keVRlYW1JZCgpLCBleGlzdGluZy5HZXRQYXRoKCksCi0JCQkJCQlleGlzdGluZy5HZXRUcmVuZHlUZWFtSWQoKSwKLQkJCQkJKQotCi0JCQkJCWxvY2suVW5sb2NrKCkKLQkJCQkJcmV0dXJuCi0JCQkJfQotCQkJCWlmIG1ldGFkYXRhLkdldFRyZW5keVRlYW1JZCgpID09IGV4aXN0aW5nLkdldFRyZW5keVRlYW1JZCgpICYmIG1ldGFkYXRhLkdldFBhdGgoKSA9PSBleGlzdGluZy5HZXRQYXRoKCkgewotCQkJCQlpc0R1cGxpY2F0ZSA9IHRydWUKLQkJCQkJYnJlYWsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAhaXNEdXBsaWNhdGUgewotCQkJCWV4aXN0aW5nTWV0YWRhdGEgPSBhcHBlbmQoZXhpc3RpbmdNZXRhZGF0YSwgbWV0YWRhdGEpCi0JCQkJb3duZXJzaGlwTWV0YWRhdGFNYXAuU3RvcmUoa2V5LCBleGlzdGluZ01ldGFkYXRhKQotCQkJfQotCQl9Ci0KLQkJbG9jay5VbmxvY2soKQotCX0KLX0KLQotLy8gcHJvY2Vzc0NvZGVNZXRhZGF0YVByb3RvYnVmIHByb2Nlc3NlcyBDb2RlTWV0YWRhdGEgcHJvdG9idWYgZmlsZXMKLWZ1bmMgcHJvY2Vzc0NvZGVNZXRhZGF0YVByb3RvYnVmKAotCWZpbGVQYXRoIHN0cmluZywgb3duZXJzaGlwTWV0YWRhdGFNYXAgKnN5bmMuTWFwLCBzb3VyY2VGaWxlTWV0YWRhdGFNYXAgKnN5bmMuTWFwLCBrZXlMb2NrcyAqa2V5VG9Mb2Nrc01hcCwKLQllcnJDaCBjaGFuIGVycm9yLCB3ZyAqc3luYy5XYWl0R3JvdXAsCi0pIHsKLQlkZWZlciB3Zy5Eb25lKCkKLQotCWZpbGVDb250ZW50IDo9IHN0cmluZ3MuVHJpbVJpZ2h0KHJlYWRGaWxlVG9TdHJpbmcoZmlsZVBhdGgpLCAiXG4iKQotCWludGVybmFsQ29kZURhdGEgOj0gY29kZV9tZXRhZGF0YV9pbnRlcm5hbF9wcm90by5Db2RlTWV0YWRhdGFJbnRlcm5hbHt9Ci0JZXJyIDo9IHByb3RvLlVubWFyc2hhbChbXWJ5dGUoZmlsZUNvbnRlbnQpLCAmaW50ZXJuYWxDb2RlRGF0YSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJZXJyQ2ggPC0gZXJyCi0JCXJldHVybgotCX0KLQotCS8vIFByb2Nlc3MgZWFjaCBUYXJnZXRPd25lcnNoaXAgZW50cnkKLQlmb3IgXywgaW50ZXJuYWxNZXRhZGF0YSA6PSByYW5nZSBpbnRlcm5hbENvZGVEYXRhLkdldFRhcmdldE93bmVyc2hpcExpc3QoKSB7Ci0JCWtleSA6PSBpbnRlcm5hbE1ldGFkYXRhLkdldFRhcmdldE5hbWUoKQotCQlsb2NrIDo9IGtleUxvY2tzLkdldExvY2tGb3JLZXkoa2V5KQotCQlsb2NrLkxvY2soKQotCi0JCWZvciBfLCBzcmNGaWxlIDo9IHJhbmdlIGludGVybmFsTWV0YWRhdGEuR2V0U291cmNlRmlsZXMoKSB7Ci0JCQlzcmNGaWxlS2V5IDo9IHNyY0ZpbGUKLQkJCXNyY0ZpbGVMb2NrIDo9IGtleUxvY2tzLkdldExvY2tGb3JLZXkoc3JjRmlsZUtleSkKLQkJCXNyY0ZpbGVMb2NrLkxvY2soKQotCQkJYXR0cmlidXRlcyA6PSBzb3VyY2VGaWxlQXR0cmlidXRlc3sKLQkJCQlUZWFtSUQ6ICAgICAgICAgaW50ZXJuYWxNZXRhZGF0YS5HZXRUcmVuZHlUZWFtSWQoKSwKLQkJCQlNdWx0aU93bmVyc2hpcDogaW50ZXJuYWxNZXRhZGF0YS5HZXRNdWx0aU93bmVyc2hpcCgpLAotCQkJCVBhdGg6ICAgICAgICAgICBpbnRlcm5hbE1ldGFkYXRhLkdldFBhdGgoKSwKLQkJCX0KLQotCQkJZXhpc3RpbmdBdHRyaWJ1dGVzLCBleGlzdHMgOj0gc291cmNlRmlsZU1ldGFkYXRhTWFwLkxvYWQoc3JjRmlsZUtleSkKLQkJCWlmIGV4aXN0cyB7Ci0JCQkJZXhpc3RpbmcgOj0gZXhpc3RpbmdBdHRyaWJ1dGVzLihzb3VyY2VGaWxlQXR0cmlidXRlcykKLQkJCQlpZiBhdHRyaWJ1dGVzLlRlYW1JRCAhPSBleGlzdGluZy5UZWFtSUQgJiYgKCFhdHRyaWJ1dGVzLk11bHRpT3duZXJzaGlwIHx8ICFleGlzdGluZy5NdWx0aU93bmVyc2hpcCkgewotCQkJCQllcnJDaCA8LSBmbXQuRXJyb3JmKAotCQkJCQkJIkNvbmZsaWN0IGZvdW5kIGZvciBzb3VyY2UgZmlsZSAlcyBjb3ZlcmVkIGF0ICVzIHdpdGggdGVhbSBJRDogJXMuIEV4aXN0aW5nIHRlYW0gSUQ6ICVzIGFuZCBwYXRoOiAlcy4iKwotCQkJCQkJCSIgSWYgbXVsdGktb3duZXJzaGlwIGlzIHJlcXVpcmVkLCBtdWx0aU93bmVyc2hpcCBzaG91bGQgYmUgc2V0IHRvIHRydWUgaW4gYWxsIHRlc3Rfc3BlYyBtb2R1bGVzIHVzaW5nIHRoaXMgdGFyZ2V0LiAiKwotCQkJCQkJCSJNdWx0aXBsZS1vd25lcnNoaXAgaW4gZ2VuZXJhbCBpcyBkaXNjb3VyYWdlZCB0aG91Z2ggYXMgaXQgbWFrZSBpbmZyYXN0cnVjdHVyZSBhcm91bmQgYW5kcm9pZCByZWx5aW5nIG9uIHRoaXMgaW5mb3JtYXRpb24gcGljayB1cCBhIHJhbmRvbSB2YWx1ZSB3aGVuIGl0IG5lZWRzIG9ubHkgb25lLiIsCi0JCQkJCQlzcmNGaWxlLCBpbnRlcm5hbE1ldGFkYXRhLkdldFBhdGgoKSwgYXR0cmlidXRlcy5UZWFtSUQsIGV4aXN0aW5nLlRlYW1JRCwgZXhpc3RpbmcuUGF0aCwKLQkJCQkJKQotCQkJCQlzcmNGaWxlTG9jay5VbmxvY2soKQotCQkJCQlsb2NrLlVubG9jaygpCi0JCQkJCXJldHVybgotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJLy8gU3RvcmUgdGhlIG1ldGFkYXRhIGlmIG5vIGNvbmZsaWN0Ci0JCQkJc291cmNlRmlsZU1ldGFkYXRhTWFwLlN0b3JlKHNyY0ZpbGVLZXksIGF0dHJpYnV0ZXMpCi0JCQl9Ci0JCQlzcmNGaWxlTG9jay5VbmxvY2soKQotCQl9Ci0KLQkJdmFsdWUsIGxvYWRlZCA6PSBvd25lcnNoaXBNZXRhZGF0YU1hcC5Mb2FkT3JTdG9yZSgKLQkJCWtleSwgW10qY29kZV9tZXRhZGF0YV9pbnRlcm5hbF9wcm90by5Db2RlTWV0YWRhdGFJbnRlcm5hbF9UYXJnZXRPd25lcnNoaXB7aW50ZXJuYWxNZXRhZGF0YX0sCi0JCSkKLQkJaWYgbG9hZGVkIHsKLQkJCWV4aXN0aW5nTWV0YWRhdGEgOj0gdmFsdWUuKFtdKmNvZGVfbWV0YWRhdGFfaW50ZXJuYWxfcHJvdG8uQ29kZU1ldGFkYXRhSW50ZXJuYWxfVGFyZ2V0T3duZXJzaGlwKQotCQkJaXNEdXBsaWNhdGUgOj0gZmFsc2UKLQkJCWZvciBfLCBleGlzdGluZyA6PSByYW5nZSBleGlzdGluZ01ldGFkYXRhIHsKLQkJCQlpZiBpbnRlcm5hbE1ldGFkYXRhLkdldFRyZW5keVRlYW1JZCgpID09IGV4aXN0aW5nLkdldFRyZW5keVRlYW1JZCgpICYmIGludGVybmFsTWV0YWRhdGEuR2V0UGF0aCgpID09IGV4aXN0aW5nLkdldFBhdGgoKSB7Ci0JCQkJCWlzRHVwbGljYXRlID0gdHJ1ZQotCQkJCQlicmVhawotCQkJCX0KLQkJCX0KLQkJCWlmICFpc0R1cGxpY2F0ZSB7Ci0JCQkJZXhpc3RpbmdNZXRhZGF0YSA9IGFwcGVuZChleGlzdGluZ01ldGFkYXRhLCBpbnRlcm5hbE1ldGFkYXRhKQotCQkJCW93bmVyc2hpcE1ldGFkYXRhTWFwLlN0b3JlKGtleSwgZXhpc3RpbmdNZXRhZGF0YSkKLQkJCX0KLQkJfQotCi0JCWxvY2suVW5sb2NrKCkKLQl9Ci19Ci0KLWZ1bmMgbWFpbigpIHsKLQlpbnB1dEZpbGUgOj0gZmxhZy5TdHJpbmcoImlucHV0RmlsZSIsICIiLCAiSW5wdXQgZmlsZSBwYXRoIikKLQlvdXRwdXRGaWxlIDo9IGZsYWcuU3RyaW5nKCJvdXRwdXRGaWxlIiwgIiIsICJPdXRwdXQgZmlsZSBwYXRoIikKLQlydWxlIDo9IGZsYWcuU3RyaW5nKAotCQkicnVsZSIsICIiLCAiTWV0YWRhdGEgcnVsZSAoSGludDogdGVzdF9zcGVjIG9yIGNvZGVfbWV0YWRhdGEpIiwKLQkpCi0JZmxhZy5QYXJzZSgpCi0KLQlpZiAqaW5wdXRGaWxlID09ICIiIHx8ICpvdXRwdXRGaWxlID09ICIiIHx8ICpydWxlID09ICIiIHsKLQkJZm10LlByaW50bG4oIlVzYWdlOiBtZXRhZGF0YSAtcnVsZSA8cnVsZT4gLWlucHV0RmlsZSA8aW5wdXQgZmlsZSBwYXRoPiAtb3V0cHV0RmlsZSA8b3V0cHV0IGZpbGUgcGF0aD4iKQotCQlvcy5FeGl0KDEpCi0JfQotCi0JaW5wdXRGaWxlRGF0YSA6PSBzdHJpbmdzLlRyaW1SaWdodChyZWFkRmlsZVRvU3RyaW5nKCppbnB1dEZpbGUpLCAiXG4iKQotCWZpbGVQYXRocyA6PSBzdHJpbmdzLlNwbGl0KGlucHV0RmlsZURhdGEsICIgIikKLQlpZiBsZW4oZmlsZVBhdGhzKSA9PSAxICYmIGZpbGVQYXRoc1swXSA9PSAiIiB7Ci0JCXdyaXRlRW1wdHlPdXRwdXRQcm90bygqb3V0cHV0RmlsZSwgKnJ1bGUpCi0JCXJldHVybgotCX0KLQlvd25lcnNoaXBNZXRhZGF0YU1hcCA6PSAmc3luYy5NYXB7fQotCWtleUxvY2tzIDo9ICZrZXlUb0xvY2tzTWFwe30KLQllcnJDaCA6PSBtYWtlKGNoYW4gZXJyb3IsIGxlbihmaWxlUGF0aHMpKQotCXZhciB3ZyBzeW5jLldhaXRHcm91cAotCi0Jc3dpdGNoICpydWxlIHsKLQljYXNlICJ0ZXN0X3NwZWMiOgotCQlmb3IgXywgZmlsZVBhdGggOj0gcmFuZ2UgZmlsZVBhdGhzIHsKLQkJCXdnLkFkZCgxKQotCQkJZ28gcHJvY2Vzc1Rlc3RTcGVjUHJvdG9idWYoCi0JCQkJZmlsZVBhdGgsIG93bmVyc2hpcE1ldGFkYXRhTWFwLCBrZXlMb2NrcywgZXJyQ2gsICZ3ZywKLQkJCSkKLQkJfQotCi0JCXdnLldhaXQoKQotCQljbG9zZShlcnJDaCkKLQotCQlmb3IgZXJyIDo9IHJhbmdlIGVyckNoIHsKLQkJCWxvZy5GYXRhbChlcnIpCi0JCX0KLQotCQlhbGxLZXlzIDo9IGdldFNvcnRlZEtleXMob3duZXJzaGlwTWV0YWRhdGFNYXApCi0JCXZhciBhbGxNZXRhZGF0YSBbXSp0ZXN0X3NwZWNfcHJvdG8uVGVzdFNwZWNfT3duZXJzaGlwTWV0YWRhdGEKLQotCQlmb3IgXywga2V5IDo9IHJhbmdlIGFsbEtleXMgewotCQkJdmFsdWUsIF8gOj0gb3duZXJzaGlwTWV0YWRhdGFNYXAuTG9hZChrZXkpCi0JCQltZXRhZGF0YUxpc3QgOj0gdmFsdWUuKFtdKnRlc3Rfc3BlY19wcm90by5UZXN0U3BlY19Pd25lcnNoaXBNZXRhZGF0YSkKLQkJCWFsbE1ldGFkYXRhID0gYXBwZW5kKGFsbE1ldGFkYXRhLCBtZXRhZGF0YUxpc3QuLi4pCi0JCX0KLQotCQl0ZXN0U3BlYyA6PSAmdGVzdF9zcGVjX3Byb3RvLlRlc3RTcGVjewotCQkJT3duZXJzaGlwTWV0YWRhdGFMaXN0OiBhbGxNZXRhZGF0YSwKLQkJfQotCQl3cml0ZVByb3RvVG9GaWxlKCpvdXRwdXRGaWxlLCB0ZXN0U3BlYykKLQkJYnJlYWsKLQljYXNlICJjb2RlX21ldGFkYXRhIjoKLQkJc291cmNlRmlsZU1ldGFkYXRhTWFwIDo9ICZzeW5jLk1hcHt9Ci0JCWZvciBfLCBmaWxlUGF0aCA6PSByYW5nZSBmaWxlUGF0aHMgewotCQkJd2cuQWRkKDEpCi0JCQlnbyBwcm9jZXNzQ29kZU1ldGFkYXRhUHJvdG9idWYoCi0JCQkJZmlsZVBhdGgsIG93bmVyc2hpcE1ldGFkYXRhTWFwLCBzb3VyY2VGaWxlTWV0YWRhdGFNYXAsIGtleUxvY2tzLCBlcnJDaCwgJndnLAotCQkJKQotCQl9Ci0KLQkJd2cuV2FpdCgpCi0JCWNsb3NlKGVyckNoKQotCi0JCWZvciBlcnIgOj0gcmFuZ2UgZXJyQ2ggewotCQkJbG9nLkZhdGFsKGVycikKLQkJfQotCi0JCXNvcnRlZEtleXMgOj0gZ2V0U29ydGVkS2V5cyhvd25lcnNoaXBNZXRhZGF0YU1hcCkKLQkJYWxsTWV0YWRhdGEgOj0gbWFrZShbXSpjb2RlX21ldGFkYXRhX3Byb3RvLkNvZGVNZXRhZGF0YV9UYXJnZXRPd25lcnNoaXAsIDApCi0JCWZvciBfLCBrZXkgOj0gcmFuZ2Ugc29ydGVkS2V5cyB7Ci0JCQl2YWx1ZSwgXyA6PSBvd25lcnNoaXBNZXRhZGF0YU1hcC5Mb2FkKGtleSkKLQkJCW1ldGFkYXRhIDo9IHZhbHVlLihbXSpjb2RlX21ldGFkYXRhX2ludGVybmFsX3Byb3RvLkNvZGVNZXRhZGF0YUludGVybmFsX1RhcmdldE93bmVyc2hpcCkKLQkJCWZvciBfLCBtIDo9IHJhbmdlIG1ldGFkYXRhIHsKLQkJCQl0YXJnZXROYW1lIDo9IG0uR2V0VGFyZ2V0TmFtZSgpCi0JCQkJcGF0aCA6PSBtLkdldFBhdGgoKQotCQkJCXRyZW5keVRlYW1JZCA6PSBtLkdldFRyZW5keVRlYW1JZCgpCi0KLQkJCQlhbGxNZXRhZGF0YSA9IGFwcGVuZChhbGxNZXRhZGF0YSwgJmNvZGVfbWV0YWRhdGFfcHJvdG8uQ29kZU1ldGFkYXRhX1RhcmdldE93bmVyc2hpcHsKLQkJCQkJVGFyZ2V0TmFtZTogICAmdGFyZ2V0TmFtZSwKLQkJCQkJUGF0aDogICAgICAgICAmcGF0aCwKLQkJCQkJVHJlbmR5VGVhbUlkOiAmdHJlbmR5VGVhbUlkLAotCQkJCQlTb3VyY2VGaWxlczogIG0uR2V0U291cmNlRmlsZXMoKSwKLQkJCQl9KQotCQkJfQotCQl9Ci0KLQkJZmluYWxNZXRhZGF0YSA6PSAmY29kZV9tZXRhZGF0YV9wcm90by5Db2RlTWV0YWRhdGF7Ci0JCQlUYXJnZXRPd25lcnNoaXBMaXN0OiBhbGxNZXRhZGF0YSwKLQkJfQotCQl3cml0ZVByb3RvVG9GaWxlKCpvdXRwdXRGaWxlLCBmaW5hbE1ldGFkYXRhKQotCQlicmVhawotCWRlZmF1bHQ6Ci0JCWxvZy5GYXRhbGYoIk5vIHNwZWNpZmljIHByb2Nlc3NpbmcgaW1wbGVtZW50ZWQgZm9yIHJ1bGUgJyVzJy5cbiIsICpydWxlKQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rvb2xzL21ldGFkYXRhL2dvLm1vZCBiL3Rvb2xzL21ldGFkYXRhL2dvLm1vZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTlkMDRiMS4uMDAwMDAwMAotLS0gYS90b29scy9tZXRhZGF0YS9nby5tb2QKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLW1vZHVsZSBhbmRyb2lkL3Nvb25nL3Rvb2xzL21ldGFkYXRhCi0KLXJlcXVpcmUgZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYgdjAuMC4wCi0KLXJlcGxhY2UgZ29vZ2xlLmdvbGFuZy5vcmcvcHJvdG9idWYgdjAuMC4wID0+IC4uLy4uLy4uL2V4dGVybmFsL2dvbGFuZy1wcm90b2J1ZgotCi1nbyAxLjE4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWV0YWRhdGEvZ28ud29yayBiL3Rvb2xzL21ldGFkYXRhL2dvLndvcmsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyY2RmOGUuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbWV0YWRhdGEvZ28ud29yaworKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLWdvIDEuMTgKLQotdXNlICgKLQkuCi0JLi4vLi4vLi4vLi4vZXh0ZXJuYWwvZ29sYW5nLXByb3RvYnVmCi0JLi4vLi4vLi4vc29vbmcvdGVzdGluZy90ZXN0X3NwZWNfcHJvdG8KLQkuLi8uLi8uLi9zb29uZy90ZXN0aW5nL2NvZGVfbWV0YWRhdGFfcHJvdG8KLQkuLi8uLi8uLi9zb29uZy90ZXN0aW5nL2NvZGVfbWV0YWRhdGFfcHJvdG9faW50ZXJuYWwKLSkKLQotcmVwbGFjZSBnb29nbGUuZ29sYW5nLm9yZy9wcm90b2J1ZiB2MC4wLjAgPT4gLi4vLi4vLi4vLi4vZXh0ZXJuYWwvZ29sYW5nLXByb3RvYnVmCmRpZmYgLS1naXQgYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9lbXB0eUlucHV0RmlsZS50eHQgYi90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9lbXB0eUlucHV0RmlsZS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiMTM3ODkuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZW1wdHlJbnB1dEZpbGUudHh0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotCmRpZmYgLS1naXQgYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9leHBlY3RlZENvZGVNZXRhZGF0YU91dHB1dC50eHQgYi90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9leHBlY3RlZENvZGVNZXRhZGF0YU91dHB1dC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1NWNmNDAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZXhwZWN0ZWRDb2RlTWV0YWRhdGFPdXRwdXQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0KLSAKLQNiYXISCi1BbmRyb2lkLmJwGgUxMjM0NiIGYi5qYXZhCi0gCi0DZm9vEgotQW5kcm9pZC5icBoFMTIzNDUiBmEuamF2YQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2V4cGVjdGVkT3V0cHV0RmlsZS50eHQgYi90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9leHBlY3RlZE91dHB1dEZpbGUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGQzODJmLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2V4cGVjdGVkT3V0cHV0RmlsZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0KLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtb25lEgotQW5kcm9pZC5icBoFMTIzNDUKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtc2l4EgotQW5kcm9pZC5icBoFMTIzNDYKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtc2l4EgotQXF3ZXJ0eS5icBoFMTIzNDYKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtc2l4EgotQXBvaXV5dC5icBoFMTIzNDYKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtdHdvEgotQW5kcm9pZC5icBoFMTIzNDUKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtdHdvEgotQXNkZmdoai5icBoFMTIzNDUKLS4KLRlqYXZhLXRlc3QtbW9kdWxlLW5hbWUtdHdvEgotQXp4Y3Zibi5icBoFMTIzNDUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9maWxlMS50eHQgYi90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9maWxlMS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxYmVlZDAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZmlsZTEudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotCi0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLW9uZRIKLUFuZHJvaWQuYnAaBTEyMzQ1Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXR3bxIKLUFuZHJvaWQuYnAaBTEyMzQ1Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXR3bxIKLUFzZGZnaGouYnAaBTEyMzQ1Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXR3bxIKLUF6eGN2Ym4uYnAaBTEyMzQ1CmRpZmYgLS1naXQgYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9maWxlMi50eHQgYi90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9maWxlMi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyYTc1M2YuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZmlsZTIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotCi0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLW9uZRIKLUFuZHJvaWQuYnAaBTEyMzQ1Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXNpeBIKLUFuZHJvaWQuYnAaBTEyMzQ2Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLW9uZRIKLUFuZHJvaWQuYnAaBTEyMzQ1Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXNpeBIKLUFxd2VydHkuYnAaBTEyMzQ2Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXNpeBIKLUFwb2l1eXQuYnAaBTEyMzQ2Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXNpeBIKLUFwb2l1eXQuYnAaBTEyMzQ2Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXNpeBIKLUFwb2l1eXQuYnAaBTEyMzQ2Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXNpeBIKLUFwb2l1eXQuYnAaBTEyMzQ2CmRpZmYgLS1naXQgYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9maWxlMy50eHQgYi90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9maWxlMy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxYmVlZDAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZmlsZTMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotCi0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLW9uZRIKLUFuZHJvaWQuYnAaBTEyMzQ1Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXR3bxIKLUFuZHJvaWQuYnAaBTEyMzQ1Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXR3bxIKLUFzZGZnaGouYnAaBTEyMzQ1Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXR3bxIKLUF6eGN2Ym4uYnAaBTEyMzQ1CmRpZmYgLS1naXQgYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9maWxlNC50eHQgYi90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9maWxlNC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNzU5MDAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZmlsZTQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotCi0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLW9uZRIKLUFuZHJvaWQuYnAaBTEyMzQ1Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXNpeBIKLUFuZHJvaWQuYnAaBTEyMzQ2Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLW9uZRIKLUFuZHJvaWQuYnAaBTEyMzQ2Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXNpeBIKLUFxd2VydHkuYnAaBTEyMzQ2Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXNpeBIKLUFwb2l1eXQuYnAaBTEyMzQ2Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXNpeBIKLUFwb2l1eXQuYnAaBTEyMzQ2Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXNpeBIKLUFwb2l1eXQuYnAaBTEyMzQ2Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXNpeBIKLUFwb2l1eXQuYnAaBTEyMzQ2CmRpZmYgLS1naXQgYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9maWxlNS50eHQgYi90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9maWxlNS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ZGUwNjQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZmlsZTUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0KLSAKLQNmb28SCi1BbmRyb2lkLmJwGgUxMjM0NSIGYS5qYXZhCmRpZmYgLS1naXQgYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9maWxlNi50eHQgYi90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9maWxlNi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljN2NkY2QuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZmlsZTYudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0KLSAKLQNiYXISCi1BbmRyb2lkLmJwGgUxMjM0NiIGYi5qYXZhCmRpZmYgLS1naXQgYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9maWxlNy50eHQgYi90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9maWxlNy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ZGUwNjQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZmlsZTcudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0KLSAKLQNmb28SCi1BbmRyb2lkLmJwGgUxMjM0NSIGYS5qYXZhCmRpZmYgLS1naXQgYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9maWxlOC50eHQgYi90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9maWxlOC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5MzE2OTAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZmlsZTgudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0KLSAKLQNmb28SCi1BbmRyb2lkLmdwGgUxMjM0NiIGYS5qYXZhCmRpZmYgLS1naXQgYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9nZW5lcmF0ZWRDb2RlTWV0YWRhdGFPdXRwdXQudHh0IGIvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZ2VuZXJhdGVkQ29kZU1ldGFkYXRhT3V0cHV0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU1Y2Y0MC4uMDAwMDAwMAotLS0gYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9nZW5lcmF0ZWRDb2RlTWV0YWRhdGFPdXRwdXQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0KLSAKLQNiYXISCi1BbmRyb2lkLmJwGgUxMjM0NiIGYi5qYXZhCi0gCi0DZm9vEgotQW5kcm9pZC5icBoFMTIzNDUiBmEuamF2YQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2dlbmVyYXRlZENvZGVNZXRhZGF0YU91dHB1dEZpbGUudHh0IGIvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZ2VuZXJhdGVkQ29kZU1ldGFkYXRhT3V0cHV0RmlsZS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1NWNmNDAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZ2VuZXJhdGVkQ29kZU1ldGFkYXRhT3V0cHV0RmlsZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLQotIAotA2JhchIKLUFuZHJvaWQuYnAaBTEyMzQ2IgZiLmphdmEKLSAKLQNmb28SCi1BbmRyb2lkLmJwGgUxMjM0NSIGYS5qYXZhClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZ2VuZXJhdGVkRW1wdHlPdXRwdXRGaWxlLnR4dCBiL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2dlbmVyYXRlZEVtcHR5T3V0cHV0RmlsZS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvZ2VuZXJhdGVkRW1wdHlPdXRwdXRGaWxlLnR4dAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9nZW5lcmF0ZWRPdXRwdXRGaWxlLnR4dCBiL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2dlbmVyYXRlZE91dHB1dEZpbGUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGQzODJmLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2dlbmVyYXRlZE91dHB1dEZpbGUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotCi0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLW9uZRIKLUFuZHJvaWQuYnAaBTEyMzQ1Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXNpeBIKLUFuZHJvaWQuYnAaBTEyMzQ2Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXNpeBIKLUFxd2VydHkuYnAaBTEyMzQ2Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXNpeBIKLUFwb2l1eXQuYnAaBTEyMzQ2Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXR3bxIKLUFuZHJvaWQuYnAaBTEyMzQ1Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXR3bxIKLUFzZGZnaGouYnAaBTEyMzQ1Ci0uCi0ZamF2YS10ZXN0LW1vZHVsZS1uYW1lLXR3bxIKLUF6eGN2Ym4uYnAaBTEyMzQ1ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvaW5wdXRDb2RlTWV0YWRhdGEudHh0IGIvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvaW5wdXRDb2RlTWV0YWRhdGEudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTgxYjdkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2lucHV0Q29kZU1ldGFkYXRhLnR4dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWZpbGU1LnR4dCBmaWxlNi50eHQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9pbnB1dENvZGVNZXRhZGF0YU5lZ2F0aXZlLnR4dCBiL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2lucHV0Q29kZU1ldGFkYXRhTmVnYXRpdmUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjY2OGU0Li4wMDAwMDAwCi0tLSBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2lucHV0Q29kZU1ldGFkYXRhTmVnYXRpdmUudHh0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotZmlsZTcudHh0IGZpbGU4LnR4dApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL21ldGFkYXRhL3Rlc3RkYXRhL2lucHV0RmlsZXMudHh0IGIvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvaW5wdXRGaWxlcy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0NGJjOTQuLjAwMDAwMDAKLS0tIGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvaW5wdXRGaWxlcy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1maWxlMS50eHQgZmlsZTIudHh0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvaW5wdXRGaWxlc05lZ2F0aXZlQ2FzZS50eHQgYi90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9pbnB1dEZpbGVzTmVnYXRpdmVDYXNlLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM3YWEzZi4uMDAwMDAwMAotLS0gYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9pbnB1dEZpbGVzTmVnYXRpdmVDYXNlLnR4dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWZpbGUzLnR4dCBmaWxlNC50eHQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9tZXRhZGF0YV90ZXN0LmdvIGIvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvbWV0YWRhdGFfdGVzdC5nbwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE0YWRkMy4uMDAwMDAwMAotLS0gYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9tZXRhZGF0YV90ZXN0LmdvCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLXBhY2thZ2UgbWFpbgotCi1pbXBvcnQgKAotCSJmbXQiCi0JImlvL2lvdXRpbCIKLQkib3MvZXhlYyIKLQkic3RyaW5ncyIKLQkidGVzdGluZyIKLSkKLQotZnVuYyBUZXN0TWV0YWRhdGEodCAqdGVzdGluZy5UKSB7Ci0JY21kIDo9IGV4ZWMuQ29tbWFuZCgKLQkJIm1ldGFkYXRhIiwgIi1ydWxlIiwgInRlc3Rfc3BlYyIsICItaW5wdXRGaWxlIiwgIi4vaW5wdXRGaWxlcy50eHQiLCAiLW91dHB1dEZpbGUiLAotCQkiLi9nZW5lcmF0ZWRPdXRwdXRGaWxlLnR4dCIsCi0JKQotCXN0ZGVyciwgZXJyIDo9IGNtZC5Db21iaW5lZE91dHB1dCgpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXQuRmF0YWxmKCJFcnJvciBydW5uaW5nIG1ldGFkYXRhIGNvbW1hbmQ6ICVzLiBFcnJvcjogJXYiLCBzdGRlcnIsIGVycikKLQl9Ci0KLQkvLyBSZWFkIHRoZSBjb250ZW50cyBvZiB0aGUgZXhwZWN0ZWQgb3V0cHV0IGZpbGUKLQlleHBlY3RlZE91dHB1dCwgZXJyIDo9IGlvdXRpbC5SZWFkRmlsZSgiLi9leHBlY3RlZE91dHB1dEZpbGUudHh0IikKLQlpZiBlcnIgIT0gbmlsIHsKLQkJdC5GYXRhbGYoIkVycm9yIHJlYWRpbmcgZXhwZWN0ZWQgb3V0cHV0IGZpbGU6ICVzIiwgZXJyKQotCX0KLQotCS8vIFJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBnZW5lcmF0ZWQgb3V0cHV0IGZpbGUKLQlnZW5lcmF0ZWRPdXRwdXQsIGVyciA6PSBpb3V0aWwuUmVhZEZpbGUoIi4vZ2VuZXJhdGVkT3V0cHV0RmlsZS50eHQiKQotCWlmIGVyciAhPSBuaWwgewotCQl0LkZhdGFsZigiRXJyb3IgcmVhZGluZyBnZW5lcmF0ZWQgb3V0cHV0IGZpbGU6ICVzIiwgZXJyKQotCX0KLQotCWZtdC5QcmludGxuKCkKLQotCS8vIENvbXBhcmUgdGhlIGNvbnRlbnRzCi0JaWYgc3RyaW5nKGV4cGVjdGVkT3V0cHV0KSAhPSBzdHJpbmcoZ2VuZXJhdGVkT3V0cHV0KSB7Ci0JCXQuRXJyb3JmKCJHZW5lcmF0ZWQgZmlsZSBjb250ZW50cyBkbyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIG91dHB1dCIpCi0JfQotfQotCi1mdW5jIFRlc3RNZXRhZGF0YU5lZ2F0aXZlQ2FzZSh0ICp0ZXN0aW5nLlQpIHsKLQljbWQgOj0gZXhlYy5Db21tYW5kKAotCQkibWV0YWRhdGEiLCAiLXJ1bGUiLCAidGVzdF9zcGVjIiwgIi1pbnB1dEZpbGUiLCAiLi9pbnB1dEZpbGVzTmVnYXRpdmVDYXNlLnR4dCIsICItb3V0cHV0RmlsZSIsCi0JCSIuL2dlbmVyYXRlZE91dHB1dEZpbGVOZWdhdGl2ZUNhc2UudHh0IiwKLQkpCi0Jc3RkZXJyLCBlcnIgOj0gY21kLkNvbWJpbmVkT3V0cHV0KCkKLQlpZiBlcnIgPT0gbmlsIHsKLQkJdC5GYXRhbGYoCi0JCQkiRXhwZWN0ZWQgYW4gZXJyb3IsIGJ1dCB0aGUgbWV0YWRhdGEgY29tbWFuZCBleGVjdXRlZCBzdWNjZXNzZnVsbHkuIE91dHB1dDogJXMiLAotCQkJc3RkZXJyLAotCQkpCi0JfQotCi0JZXhwZWN0ZWRFcnJvciA6PSAiQ29uZmxpY3RpbmcgdHJlbmR5IHRlYW0gSURzIGZvdW5kIGZvciBqYXZhLXRlc3QtbW9kdWxlIiArCi0JCSItbmFtZS1vbmUgYXQ6XG5BbmRyb2lkLmJwIHdpdGggdGVhbUlkOiAxMjM0NiwiICsKLQkJIlxuQW5kcm9pZC5icCB3aXRoIHRlYW1JZDogMTIzNDUiCi0JaWYgIXN0cmluZ3MuQ29udGFpbnMoCi0JCXN0cmluZ3MuVHJpbVNwYWNlKHN0cmluZyhzdGRlcnIpKSwgc3RyaW5ncy5UcmltU3BhY2UoZXhwZWN0ZWRFcnJvciksCi0JKSB7Ci0JCXQuRXJyb3JmKAotCQkJIlVuZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZS4gRXhwZWN0ZWQgdG8gY29udGFpbjogJXMsIEdvdDogJXMiLAotCQkJZXhwZWN0ZWRFcnJvciwgc3RkZXJyLAotCQkpCi0JfQotfQotCi1mdW5jIFRlc3RFbXB0eUlucHV0RmlsZSh0ICp0ZXN0aW5nLlQpIHsKLQljbWQgOj0gZXhlYy5Db21tYW5kKAotCQkibWV0YWRhdGEiLCAiLXJ1bGUiLCAidGVzdF9zcGVjIiwgIi1pbnB1dEZpbGUiLCAiLi9lbXB0eUlucHV0RmlsZS50eHQiLCAiLW91dHB1dEZpbGUiLAotCQkiLi9nZW5lcmF0ZWRFbXB0eU91dHB1dEZpbGUudHh0IiwKLQkpCi0Jc3RkZXJyLCBlcnIgOj0gY21kLkNvbWJpbmVkT3V0cHV0KCkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJdC5GYXRhbGYoIkVycm9yIHJ1bm5pbmcgbWV0YWRhdGEgY29tbWFuZDogJXMuIEVycm9yOiAldiIsIHN0ZGVyciwgZXJyKQotCX0KLQotCS8vIFJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBnZW5lcmF0ZWQgb3V0cHV0IGZpbGUKLQlnZW5lcmF0ZWRPdXRwdXQsIGVyciA6PSBpb3V0aWwuUmVhZEZpbGUoIi4vZ2VuZXJhdGVkRW1wdHlPdXRwdXRGaWxlLnR4dCIpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXQuRmF0YWxmKCJFcnJvciByZWFkaW5nIGdlbmVyYXRlZCBvdXRwdXQgZmlsZTogJXMiLCBlcnIpCi0JfQotCi0JZm10LlByaW50bG4oKQotCi0JLy8gQ29tcGFyZSB0aGUgY29udGVudHMKLQlpZiBzdHJpbmcoZ2VuZXJhdGVkT3V0cHV0KSAhPSAiXG4iIHsKLQkJdC5FcnJvcmYoIkdlbmVyYXRlZCBmaWxlIGNvbnRlbnRzIGRvIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgb3V0cHV0IikKLQl9Ci19Ci0KLWZ1bmMgVGVzdENvZGVNZXRhZGF0YSh0ICp0ZXN0aW5nLlQpIHsKLQljbWQgOj0gZXhlYy5Db21tYW5kKAotCQkibWV0YWRhdGEiLCAiLXJ1bGUiLCAiY29kZV9tZXRhZGF0YSIsICItaW5wdXRGaWxlIiwgIi4vaW5wdXRDb2RlTWV0YWRhdGEudHh0IiwgIi1vdXRwdXRGaWxlIiwKLQkJIi4vZ2VuZXJhdGVkQ29kZU1ldGFkYXRhT3V0cHV0RmlsZS50eHQiLAotCSkKLQlzdGRlcnIsIGVyciA6PSBjbWQuQ29tYmluZWRPdXRwdXQoKQotCWlmIGVyciAhPSBuaWwgewotCQl0LkZhdGFsZigiRXJyb3IgcnVubmluZyBtZXRhZGF0YSBjb21tYW5kOiAlcy4gRXJyb3I6ICV2Iiwgc3RkZXJyLCBlcnIpCi0JfQotCi0JLy8gUmVhZCB0aGUgY29udGVudHMgb2YgdGhlIGV4cGVjdGVkIG91dHB1dCBmaWxlCi0JZXhwZWN0ZWRPdXRwdXQsIGVyciA6PSBpb3V0aWwuUmVhZEZpbGUoIi4vZXhwZWN0ZWRDb2RlTWV0YWRhdGFPdXRwdXQudHh0IikKLQlpZiBlcnIgIT0gbmlsIHsKLQkJdC5GYXRhbGYoIkVycm9yIHJlYWRpbmcgZXhwZWN0ZWQgb3V0cHV0IGZpbGU6ICVzIiwgZXJyKQotCX0KLQotCS8vIFJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBnZW5lcmF0ZWQgb3V0cHV0IGZpbGUKLQlnZW5lcmF0ZWRPdXRwdXQsIGVyciA6PSBpb3V0aWwuUmVhZEZpbGUoIi4vZ2VuZXJhdGVkQ29kZU1ldGFkYXRhT3V0cHV0RmlsZS50eHQiKQotCWlmIGVyciAhPSBuaWwgewotCQl0LkZhdGFsZigiRXJyb3IgcmVhZGluZyBnZW5lcmF0ZWQgb3V0cHV0IGZpbGU6ICVzIiwgZXJyKQotCX0KLQotCWZtdC5QcmludGxuKCkKLQotCS8vIENvbXBhcmUgdGhlIGNvbnRlbnRzCi0JaWYgc3RyaW5nKGV4cGVjdGVkT3V0cHV0KSAhPSBzdHJpbmcoZ2VuZXJhdGVkT3V0cHV0KSB7Ci0JCXQuRXJyb3JmKCJHZW5lcmF0ZWQgZmlsZSBjb250ZW50cyBkbyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIG91dHB1dCIpCi0JfQotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWV0YWRhdGEvdGVzdGRhdGEvb3V0cHV0RmlsZS50eHQgYi90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9vdXRwdXRGaWxlLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBkMzgyZi4uMDAwMDAwMAotLS0gYS90b29scy9tZXRhZGF0YS90ZXN0ZGF0YS9vdXRwdXRGaWxlLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLQotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1vbmUSCi1BbmRyb2lkLmJwGgUxMjM0NQotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1zaXgSCi1BbmRyb2lkLmJwGgUxMjM0NgotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1zaXgSCi1BcXdlcnR5LmJwGgUxMjM0NgotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS1zaXgSCi1BcG9pdXl0LmJwGgUxMjM0NgotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS10d28SCi1BbmRyb2lkLmJwGgUxMjM0NQotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS10d28SCi1Bc2RmZ2hqLmJwGgUxMjM0NQotLgotGWphdmEtdGVzdC1tb2R1bGUtbmFtZS10d28SCi1BenhjdmJuLmJwGgUxMjM0NQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3JlbGVhc2V0b29scy9BbmRyb2lkLmJwIGIvdG9vbHMvcmVsZWFzZXRvb2xzL0FuZHJvaWQuYnAKaW5kZXggOGM3MTA0NC4uZTM3MWIyMyAxMDA2NDQKLS0tIGEvdG9vbHMvcmVsZWFzZXRvb2xzL0FuZHJvaWQuYnAKKysrIGIvdG9vbHMvcmVsZWFzZXRvb2xzL0FuZHJvaWQuYnAKQEAgLTYzNyw2ICs2MzcsOCBAQAogICAgIF0sCiAgICAgZGF0YTogWwogICAgICAgICAidGVzdGRhdGEvKiovKiIsCisgICAgXSwKKyAgICBkZXZpY2VfY29tbW9uX2RhdGE6IFsKICAgICAgICAgIjpjb20uYW5kcm9pZC5hcGV4LmNvbXByZXNzZWQudjEiLAogICAgICAgICAiOmNvbS5hbmRyb2lkLmFwZXgudmVuZG9yLmZvby53aXRoX3ZpbnRmIiwKICAgICBdLApkaWZmIC0tZ2l0IGEvdG9vbHMvcmVsZWFzZXRvb2xzL2FkZF9pbWdfdG9fdGFyZ2V0X2ZpbGVzLnB5IGIvdG9vbHMvcmVsZWFzZXRvb2xzL2FkZF9pbWdfdG9fdGFyZ2V0X2ZpbGVzLnB5CmluZGV4IGMyNWZmMjcuLjMwYTZhY2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3JlbGVhc2V0b29scy9hZGRfaW1nX3RvX3RhcmdldF9maWxlcy5weQorKysgYi90b29scy9yZWxlYXNldG9vbHMvYWRkX2ltZ190b190YXJnZXRfZmlsZXMucHkKQEAgLTExMDAsNyArMTEwMCw3IEBACiAgICAgdmJtZXRhX3BhcnRpdGlvbnMgPSBjb21tb24uQVZCX1BBUlRJVElPTlNbOl0gKyB0dXBsZShhdmJfY3VzdG9tX3BhcnRpdGlvbnMpCiAKICAgICB2Ym1ldGFfc3lzdGVtID0gT1BUSU9OUy5pbmZvX2RpY3QuZ2V0KCJhdmJfdmJtZXRhX3N5c3RlbSIsICIiKS5zdHJpcCgpCi0gICAgaWYgdmJtZXRhX3N5c3RlbToKKyAgICBpZiB2Ym1ldGFfc3lzdGVtIGFuZCBzZXQodmJtZXRhX3N5c3RlbS5zcGxpdCgpKS5pbnRlcnNlY3Rpb24ocGFydGl0aW9ucyk6CiAgICAgICBiYW5uZXIoInZibWV0YV9zeXN0ZW0iKQogICAgICAgcGFydGl0aW9uc1sidmJtZXRhX3N5c3RlbSJdID0gQWRkVkJNZXRhKAogICAgICAgICAgIG91dHB1dF96aXAsIHBhcnRpdGlvbnMsICJ2Ym1ldGFfc3lzdGVtIiwgdmJtZXRhX3N5c3RlbS5zcGxpdCgpKQpAQCAtMTExMCw3ICsxMTEwLDcgQEAKICAgICAgIHZibWV0YV9wYXJ0aXRpb25zLmFwcGVuZCgidmJtZXRhX3N5c3RlbSIpCiAKICAgICB2Ym1ldGFfdmVuZG9yID0gT1BUSU9OUy5pbmZvX2RpY3QuZ2V0KCJhdmJfdmJtZXRhX3ZlbmRvciIsICIiKS5zdHJpcCgpCi0gICAgaWYgdmJtZXRhX3ZlbmRvcjoKKyAgICBpZiB2Ym1ldGFfdmVuZG9yIGFuZCBzZXQodmJtZXRhX3ZlbmRvci5zcGxpdCgpKS5pbnRlcnNlY3Rpb24ocGFydGl0aW9ucyk6CiAgICAgICBiYW5uZXIoInZibWV0YV92ZW5kb3IiKQogICAgICAgcGFydGl0aW9uc1sidmJtZXRhX3ZlbmRvciJdID0gQWRkVkJNZXRhKAogICAgICAgICAgIG91dHB1dF96aXAsIHBhcnRpdGlvbnMsICJ2Ym1ldGFfdmVuZG9yIiwgdmJtZXRhX3ZlbmRvci5zcGxpdCgpKQpAQCAtMTEzNyw3ICsxMTM3LDcgQEAKICAgICAgICAgICAgIGlmIGl0ZW0gbm90IGluIGluY2x1ZGVkX3BhcnRpdGlvbnNdCiAgICAgICAgIHZibWV0YV9wYXJ0aXRpb25zLmFwcGVuZChwYXJ0aXRpb25fbmFtZSkKIAotICAgIGlmIE9QVElPTlMuaW5mb19kaWN0LmdldCgiYXZiX2J1aWxkaW5nX3ZibWV0YV9pbWFnZSIpID09ICJ0cnVlIjoKKyAgICBpZiBPUFRJT05TLmluZm9fZGljdC5nZXQoImF2Yl9idWlsZGluZ192Ym1ldGFfaW1hZ2UiKSA9PSAidHJ1ZSIgYW5kIHNldCh2Ym1ldGFfcGFydGl0aW9ucykuaW50ZXJzZWN0aW9uKHBhcnRpdGlvbnMpOgogICAgICAgYmFubmVyKCJ2Ym1ldGEiKQogICAgICAgQWRkVkJNZXRhKG91dHB1dF96aXAsIHBhcnRpdGlvbnMsICJ2Ym1ldGEiLCB2Ym1ldGFfcGFydGl0aW9ucykKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcmVsZWFzZXRvb2xzL2FwZXhfdXRpbHMucHkgYi90b29scy9yZWxlYXNldG9vbHMvYXBleF91dGlscy5weQppbmRleCA1NGRmOTU1Li4wOGYyYjgzIDEwMDY0NAotLS0gYS90b29scy9yZWxlYXNldG9vbHMvYXBleF91dGlscy5weQorKysgYi90b29scy9yZWxlYXNldG9vbHMvYXBleF91dGlscy5weQpAQCAtNzksMTUgKzc5LDEwIEBACiAgICAgUmV0dXJuczoKICAgICAgIFRoZSByZXBhY2tlZCBhcGV4IGZpbGUgY29udGFpbmluZyB0aGUgc2lnbmVkIGFwayBmaWxlcy4KICAgICAiIiIKLSAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5kZWJ1Z2ZzX3BhdGgpOgotICAgICAgcmFpc2UgQXBleFNpZ25pbmdFcnJvcigKLSAgICAgICAgICAiQ291bGRuJ3QgZmluZCBsb2NhdGlvbiBvZiBkZWJ1Z2ZzX3N0YXRpYzogIiArCi0gICAgICAgICAgIlBhdGgge30gZG9lcyBub3QgZXhpc3QuICIuZm9ybWF0KHNlbGYuZGVidWdmc19wYXRoKSArCi0gICAgICAgICAgIk1ha2Ugc3VyZSBiaW4vZGVidWdmc19zdGF0aWMgY2FuIGJlIGZvdW5kIGluIC1wIDxwYXRoPiIpCi0gICAgbGlzdF9jbWQgPSBbJ2RlYXBleGVyJywgJy0tZGVidWdmc19wYXRoJywgc2VsZi5kZWJ1Z2ZzX3BhdGgsCi0gICAgICAgICAgICAgICAgJ2xpc3QnLCBzZWxmLmFwZXhfcGF0aF0KLSAgICBlbnRyaWVzX25hbWVzID0gY29tbW9uLlJ1bkFuZENoZWNrT3V0cHV0KGxpc3RfY21kKS5zcGxpdCgpCi0gICAgYXBrX2VudHJpZXMgPSBbbmFtZSBmb3IgbmFtZSBpbiBlbnRyaWVzX25hbWVzIGlmIG5hbWUuZW5kc3dpdGgoJy5hcGsnKV0KKyAgICBwYXlsb2FkX2RpciA9IHNlbGYuRXh0cmFjdEFwZXhQYXlsb2FkKHNlbGYuYXBleF9wYXRoKQorICAgIGFwa19lbnRyaWVzID0gW10KKyAgICBmb3IgYmFzZV9kaXIsIF8sIGZpbGVzIGluIG9zLndhbGsocGF5bG9hZF9kaXIpOgorICAgICAgYXBrX2VudHJpZXMuZXh0ZW5kKG9zLnBhdGguam9pbihiYXNlX2RpciwgZmlsZSkgZm9yIGZpbGUgaW4gZmlsZXMgaWYgZmlsZS5lbmRzd2l0aCgnLmFwaycpKQogCiAgICAgIyBObyBuZWVkIHRvIHNpZ24gYW5kIHJlcGFjaywgcmV0dXJuIHRoZSBvcmlnaW5hbCBhcGV4IHBhdGguCiAgICAgaWYgbm90IGFwa19lbnRyaWVzIGFuZCBzZWxmLnNpZ25fdG9vbCBpcyBOb25lOgpAQCAtMTA1LDE2ICsxMDAsMTYgQEAKICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ0FwayBwYXRoIGRvZXMgbm90IGNvbnRhaW4gdGhlIGludGVuZGVkIGRpcmVjdG9yeSBuYW1lOicKICAgICAgICAgICAgICAgICAgICAgICAgJyAlcycsIGVudHJ5KQogCi0gICAgcGF5bG9hZF9kaXIsIGhhc19zaWduZWRfY29udGVudCA9IHNlbGYuRXh0cmFjdEFwZXhQYXlsb2FkQW5kU2lnbkNvbnRlbnRzKAotICAgICAgICBhcGtfZW50cmllcywgYXBrX2tleXMsIHBheWxvYWRfa2V5LCBzaWduaW5nX2FyZ3MpCisgICAgaGFzX3NpZ25lZF9jb250ZW50ID0gc2VsZi5TaWduQ29udGVudHNJblBheWxvYWQoCisgICAgICAgIHBheWxvYWRfZGlyLCBhcGtfZW50cmllcywgYXBrX2tleXMsIHBheWxvYWRfa2V5LCBzaWduaW5nX2FyZ3MpCiAgICAgaWYgbm90IGhhc19zaWduZWRfY29udGVudDoKICAgICAgIGxvZ2dlci5pbmZvKCdObyBjb250ZW50cyBoYXMgYmVlbiBzaWduZWQgaW4gJXMnLCBzZWxmLmFwZXhfcGF0aCkKICAgICAgIHJldHVybiBzZWxmLmFwZXhfcGF0aAogCiAgICAgcmV0dXJuIHNlbGYuUmVwYWNrQXBleFBheWxvYWQocGF5bG9hZF9kaXIsIHBheWxvYWRfa2V5LCBzaWduaW5nX2FyZ3MpCiAKLSAgZGVmIEV4dHJhY3RBcGV4UGF5bG9hZEFuZFNpZ25Db250ZW50cyhzZWxmLCBhcGtfZW50cmllcywgYXBrX2tleXMsIHBheWxvYWRfa2V5LCBzaWduaW5nX2FyZ3MpOgotICAgICIiIkV4dHJhY3RzIHRoZSBwYXlsb2FkIGltYWdlIGFuZCBzaWducyB0aGUgY29udGFpbmluZyBhcGsgZmlsZXMuIiIiCisgIGRlZiBFeHRyYWN0QXBleFBheWxvYWQoc2VsZiwgYXBleF9wYXRoKToKKyAgICAiIiJFeHRyYWN0cyB0aGUgY29udGVudHMgb2YgYW4gQVBFWCBhbmQgcmV0dXJucyB0aGUgZGlyZWN0b3J5IG9mIHRoZSBjb250ZW50cyIiIgogICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmRlYnVnZnNfcGF0aCk6CiAgICAgICByYWlzZSBBcGV4U2lnbmluZ0Vycm9yKAogICAgICAgICAgICJDb3VsZG4ndCBmaW5kIGxvY2F0aW9uIG9mIGRlYnVnZnNfc3RhdGljOiAiICsKQEAgLTEyOSw5ICsxMjQsMTIgQEAKICAgICBleHRyYWN0X2NtZCA9IFsnZGVhcGV4ZXInLCAnLS1kZWJ1Z2ZzX3BhdGgnLCBzZWxmLmRlYnVnZnNfcGF0aCwKICAgICAgICAgICAgICAgICAgICAnLS1mc2NrZXJvZnNfcGF0aCcsIHNlbGYuZnNja2Vyb2ZzX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgJ2V4dHJhY3QnLAotICAgICAgICAgICAgICAgICAgIHNlbGYuYXBleF9wYXRoLCBwYXlsb2FkX2Rpcl0KKyAgICAgICAgICAgICAgICAgICBhcGV4X3BhdGgsIHBheWxvYWRfZGlyXQogICAgIGNvbW1vbi5SdW5BbmRDaGVja091dHB1dChleHRyYWN0X2NtZCkKKyAgICByZXR1cm4gcGF5bG9hZF9kaXIKIAorICBkZWYgU2lnbkNvbnRlbnRzSW5QYXlsb2FkKHNlbGYsIHBheWxvYWRfZGlyLCBhcGtfZW50cmllcywgYXBrX2tleXMsIHBheWxvYWRfa2V5LCBzaWduaW5nX2FyZ3MpOgorICAgICIiIlNpZ25zIHRoZSBjb250ZW50cyBpbiBwYXlsb2FkLiIiIgogICAgIGhhc19zaWduZWRfY29udGVudCA9IEZhbHNlCiAgICAgZm9yIGVudHJ5IGluIGFwa19lbnRyaWVzOgogICAgICAgYXBrX3BhdGggPSBvcy5wYXRoLmpvaW4ocGF5bG9hZF9kaXIsIGVudHJ5KQpAQCAtMTYzLDcgKzE2MSw3IEBACiAgICAgICBjb21tb24uUnVuQW5kQ2hlY2tPdXRwdXQoY21kKQogICAgICAgaGFzX3NpZ25lZF9jb250ZW50ID0gVHJ1ZQogCi0gICAgcmV0dXJuIHBheWxvYWRfZGlyLCBoYXNfc2lnbmVkX2NvbnRlbnQKKyAgICByZXR1cm4gaGFzX3NpZ25lZF9jb250ZW50CiAKICAgZGVmIFJlcGFja0FwZXhQYXlsb2FkKHNlbGYsIHBheWxvYWRfZGlyLCBwYXlsb2FkX2tleSwgc2lnbmluZ19hcmdzPU5vbmUpOgogICAgICIiIlJlYnVpbGRzIHRoZSBhcGV4IGZpbGUgd2l0aCB0aGUgdXBkYXRlZCBwYXlsb2FkIGRpcmVjdG9yeS4iIiIKZGlmZiAtLWdpdCBhL3Rvb2xzL3JlbGVhc2V0b29scy9vdGFfZnJvbV90YXJnZXRfZmlsZXMucHkgYi90b29scy9yZWxlYXNldG9vbHMvb3RhX2Zyb21fdGFyZ2V0X2ZpbGVzLnB5CmluZGV4IDY0NDZlMWYuLjc2ZDE2OGMgMTAwNzU1Ci0tLSBhL3Rvb2xzL3JlbGVhc2V0b29scy9vdGFfZnJvbV90YXJnZXRfZmlsZXMucHkKKysrIGIvdG9vbHMvcmVsZWFzZXRvb2xzL290YV9mcm9tX3RhcmdldF9maWxlcy5weQpAQCAtMTAzOSw2ICsxMDM5LDkgQEAKIAogICAjIFByZXBhcmUgY3VzdG9tIGltYWdlcy4KICAgaWYgT1BUSU9OUy5jdXN0b21faW1hZ2VzOgorICAgIGlmIHNvdXJjZV9maWxlIGlzIG5vdCBOb25lOgorICAgICAgc291cmNlX2ZpbGUgPSBHZXRUYXJnZXRGaWxlc1ppcEZvckN1c3RvbUltYWdlc1VwZGF0ZXMoCisgICAgICAgICAgIHNvdXJjZV9maWxlLCBPUFRJT05TLmN1c3RvbV9pbWFnZXMpCiAgICAgdGFyZ2V0X2ZpbGUgPSBHZXRUYXJnZXRGaWxlc1ppcEZvckN1c3RvbUltYWdlc1VwZGF0ZXMoCiAgICAgICAgIHRhcmdldF9maWxlLCBPUFRJT05TLmN1c3RvbV9pbWFnZXMpCiAKQEAgLTExMjEsMTcgKzExMjQsMTggQEAKICAgYWRkaXRpb25hbF9hcmdzICs9IFsiLS1lbmFibGVfbHo0ZGlmZj0iICsKICAgICAgICAgICAgICAgICAgICAgICBzdHIoT1BUSU9OUy5lbmFibGVfbHo0ZGlmZikubG93ZXIoKV0KIAorICBlbnZfb3ZlcnJpZGUgPSB7fQogICBpZiBzb3VyY2VfZmlsZSBhbmQgT1BUSU9OUy5lbmFibGVfbHo0ZGlmZjoKLSAgICBpbnB1dF90bXAgPSBjb21tb24uVW56aXBUZW1wKHNvdXJjZV9maWxlLCBbIk1FVEEvbGlibHo0LnNvIl0pCi0gICAgbGlibHo0X3BhdGggPSBvcy5wYXRoLmpvaW4oaW5wdXRfdG1wLCAiTUVUQSIsICJsaWJsejQuc28iKQorICAgIGxpYmx6NF9wYXRoID0gb3MucGF0aC5qb2luKHNvdXJjZV9maWxlLCAiTUVUQSIsICJsaWJsejQuc28iKQogICAgIGFzc2VydCBvcy5wYXRoLmV4aXN0cygKICAgICAgICAgbGlibHo0X3BhdGgpLCAibGlibHo0LnNvIG5vdCBmb3VuZCBpbiBNRVRBLyBkaXIgb2YgdGFyZ2V0IGZpbGUge30iLmZvcm1hdChsaWJsejRfcGF0aCkKICAgICBsb2dnZXIuaW5mbygiRW5hYmxpbmcgbHo0ZGlmZiAlcyIsIGxpYmx6NF9wYXRoKQotICAgIGFkZGl0aW9uYWxfYXJncyArPSBbIi0tbGlibHo0X3BhdGgiLCBsaWJsejRfcGF0aF0KICAgICBlcm9mc19jb21wcmVzc2lvbl9wYXJhbSA9IE9QVElPTlMudGFyZ2V0X2luZm9fZGljdC5nZXQoCiAgICAgICAgICJlcm9mc19kZWZhdWx0X2NvbXByZXNzb3IiKQogICAgIGFzc2VydCBlcm9mc19jb21wcmVzc2lvbl9wYXJhbSBpcyBub3QgTm9uZSwgIidlcm9mc19kZWZhdWx0X2NvbXByZXNzb3InIG5vdCBmb3VuZCBpbiBNRVRBL21pc2NfaW5mby50eHQgb2YgdGFyZ2V0IGJ1aWxkLiBUaGlzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBsejRkaWZmLiIKICAgICBhZGRpdGlvbmFsX2FyZ3MgKz0gWyItLWVyb2ZzX2NvbXByZXNzaW9uX3BhcmFtIiwgZXJvZnNfY29tcHJlc3Npb25fcGFyYW1dCisgICAgZW52X292ZXJyaWRlWyJMRF9QUkVMT0FEIl0gPSBsaWJsejRfcGF0aCArIFwKKyAgICAgICAgIjoiICsgb3MuZW52aXJvbi5nZXQoIkxEX1BSRUxPQUQiLCAiIikKIAogICBpZiBPUFRJT05TLmRpc2FibGVfdmFiYzoKICAgICBhZGRpdGlvbmFsX2FyZ3MgKz0gWyItLWRpc2FibGVfdmFiYz10cnVlIl0KQEAgLTExNDEsMTAgKzExNDUsMTUgQEAKICAgICBhZGRpdGlvbmFsX2FyZ3MgKz0gWyItLWNvbXByZXNzb3JfdHlwZXMiLCBPUFRJT05TLmNvbXByZXNzb3JfdHlwZXNdCiAgIGFkZGl0aW9uYWxfYXJncyArPSBbIi0tbWF4X3RpbWVzdGFtcCIsIG1heF90aW1lc3RhbXBdCiAKKyAgZW52ID0gZGljdChvcy5lbnZpcm9uKQorICBpZiBlbnZfb3ZlcnJpZGU6CisgICAgbG9nZ2VyLmluZm8oIlVzaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyAlcyIsIGVudl9vdmVycmlkZSkKKyAgICBlbnYudXBkYXRlKGVudl9vdmVycmlkZSkKICAgcGF5bG9hZC5HZW5lcmF0ZSgKICAgICAgIHRhcmdldF9maWxlLAogICAgICAgc291cmNlX2ZpbGUsCi0gICAgICBhZGRpdGlvbmFsX2FyZ3MgKyBwYXJ0aXRpb25fdGltZXN0YW1wc19mbGFncworICAgICAgYWRkaXRpb25hbF9hcmdzICsgcGFydGl0aW9uX3RpbWVzdGFtcHNfZmxhZ3MsCisgICAgICBlbnY9ZW52CiAgICkKIAogICAjIFNpZ24gdGhlIHBheWxvYWQuCmRpZmYgLS1naXQgYS90b29scy9yZWxlYXNldG9vbHMvb3RhX3V0aWxzLnB5IGIvdG9vbHMvcmVsZWFzZXRvb2xzL290YV91dGlscy5weQppbmRleCA4MWI1M2RjLi44NTJkNjJiIDEwMDY0NAotLS0gYS90b29scy9yZWxlYXNldG9vbHMvb3RhX3V0aWxzLnB5CisrKyBiL3Rvb2xzL3JlbGVhc2V0b29scy9vdGFfdXRpbHMucHkKQEAgLTg0NSwxNiArODQ1LDE2IEBACiAgICAgc2VsZi5pc19wYXJ0aWFsX3VwZGF0ZSA9IGlzX3BhcnRpYWxfdXBkYXRlCiAgICAgc2VsZi5zcGxfZG93bmdyYWRlID0gc3BsX2Rvd25ncmFkZQogCi0gIGRlZiBfUnVuKHNlbGYsIGNtZCk6ICAjIHB5bGludDogZGlzYWJsZT1uby1zZWxmLXVzZQorICBkZWYgX1J1bihzZWxmLCBjbWQsICoqa3dhcmdzKTogICMgcHlsaW50OiBkaXNhYmxlPW5vLXNlbGYtdXNlCiAgICAgIyBEb24ndCBwaXBlIChidWZmZXIpIHRoZSBvdXRwdXQgaWYgdmVyYm9zZSBpcyBzZXQuIExldAogICAgICMgYnJpbGxvX3VwZGF0ZV9wYXlsb2FkIHdyaXRlIHRvIHN0ZG91dC9zdGRlcnIgZGlyZWN0bHksIHNvIGl0cyBwcm9ncmVzcyBjYW4KICAgICAjIGJlIG1vbml0b3JlZC4KICAgICBpZiBPUFRJT05TLnZlcmJvc2U6Ci0gICAgICBjb21tb24uUnVuQW5kQ2hlY2tPdXRwdXQoY21kLCBzdGRvdXQ9Tm9uZSwgc3RkZXJyPU5vbmUpCisgICAgICBjb21tb24uUnVuQW5kQ2hlY2tPdXRwdXQoY21kLCBzdGRvdXQ9Tm9uZSwgc3RkZXJyPU5vbmUsICoqa3dhcmdzKQogICAgIGVsc2U6Ci0gICAgICBjb21tb24uUnVuQW5kQ2hlY2tPdXRwdXQoY21kKQorICAgICAgY29tbW9uLlJ1bkFuZENoZWNrT3V0cHV0KGNtZCwgKiprd2FyZ3MpCiAKLSAgZGVmIEdlbmVyYXRlKHNlbGYsIHRhcmdldF9maWxlLCBzb3VyY2VfZmlsZT1Ob25lLCBhZGRpdGlvbmFsX2FyZ3M9Tm9uZSk6CisgIGRlZiBHZW5lcmF0ZShzZWxmLCB0YXJnZXRfZmlsZSwgc291cmNlX2ZpbGU9Tm9uZSwgYWRkaXRpb25hbF9hcmdzPU5vbmUsICoqa3dhcmdzKToKICAgICAiIiJHZW5lcmF0ZXMgYSBwYXlsb2FkIGZyb20gdGhlIGdpdmVuIHRhcmdldC1maWxlcyB6aXAocykuCiAKICAgICBBcmdzOgpAQCAtODYzLDYgKzg2Myw3IEBACiAgICAgICAgICAgZ2VuZXJhdGluZyBhIGZ1bGwgT1RBLgogICAgICAgYWRkaXRpb25hbF9hcmdzOiBBIGxpc3Qgb2YgYWRkaXRpb25hbCBhcmdzIHRoYXQgc2hvdWxkIGJlIHBhc3NlZCB0bwogICAgICAgICAgIGRlbHRhX2dlbmVyYXRvciBiaW5hcnk7IG9yIE5vbmUuCisgICAgICBrd2FyZ3M6IEFueSBhZGRpdGlvbmFsIGFyZ3MgdG8gcGFzcyB0byBzdWJwcm9jZXNzLlBvcGVuCiAgICAgIiIiCiAgICAgaWYgYWRkaXRpb25hbF9hcmdzIGlzIE5vbmU6CiAgICAgICBhZGRpdGlvbmFsX2FyZ3MgPSBbXQpAQCAtOTE4LDcgKzkxOSw3IEBACiAgICAgaWYgc2VsZi5pc19wYXJ0aWFsX3VwZGF0ZToKICAgICAgIGNtZC5leHRlbmQoWyItLWlzX3BhcnRpYWxfdXBkYXRlPXRydWUiXSkKICAgICBjbWQuZXh0ZW5kKGFkZGl0aW9uYWxfYXJncykKLSAgICBzZWxmLl9SdW4oY21kKQorICAgIHNlbGYuX1J1bihjbWQsICoqa3dhcmdzKQogCiAgICAgc2VsZi5wYXlsb2FkX2ZpbGUgPSBwYXlsb2FkX2ZpbGUKICAgICBzZWxmLnBheWxvYWRfcHJvcGVydGllcyA9IE5vbmUKZGlmZiAtLWdpdCBhL3Rvb2xzL3NpZ25hcGsvc3JjL2NvbS9hbmRyb2lkL3NpZ25hcGsvU2lnbkFway5qYXZhIGIvdG9vbHMvc2lnbmFway9zcmMvY29tL2FuZHJvaWQvc2lnbmFway9TaWduQXBrLmphdmEKaW5kZXggNmIyMzQxYi4uNjU0ZTE5NiAxMDA2NDQKLS0tIGEvdG9vbHMvc2lnbmFway9zcmMvY29tL2FuZHJvaWQvc2lnbmFway9TaWduQXBrLmphdmEKKysrIGIvdG9vbHMvc2lnbmFway9zcmMvY29tL2FuZHJvaWQvc2lnbmFway9TaWduQXBrLmphdmEKQEAgLTMwMiw3ICszMDIsNiBAQAogICAgICAgICAgICAgZmluYWwgS2V5U3RvcmUga2V5U3RvcmUsIGZpbmFsIFN0cmluZyBrZXlOYW1lKQogICAgICAgICAgICAgdGhyb3dzIENlcnRpZmljYXRlRXhjZXB0aW9uLCBLZXlTdG9yZUV4Y2VwdGlvbiwgTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uLAogICAgICAgICAgICAgICAgICAgICBVbnJlY292ZXJhYmxlS2V5RXhjZXB0aW9uLCBVbnJlY292ZXJhYmxlRW50cnlFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBLZXkga2V5ID0ga2V5U3RvcmUuZ2V0S2V5KGtleU5hbWUsIHJlYWRQYXNzd29yZChrZXlOYW1lKSk7CiAgICAgICAgIGZpbmFsIFByaXZhdGVLZXlFbnRyeSBwcml2YXRlS2V5RW50cnkgPSAoUHJpdmF0ZUtleUVudHJ5KSBrZXlTdG9yZS5nZXRFbnRyeShrZXlOYW1lLCBudWxsKTsKICAgICAgICAgaWYgKHByaXZhdGVLZXlFbnRyeSA9PSBudWxsKSB7CiAgICAgICAgIHRocm93IG5ldyBFcnJvcigK