Name: series-workflowz65zh Phase: Succeeded StartedAt: 2026-08-26 22:53:27 +0000 UTC FinishedAt: 2026-08-27 00:10:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz65zh[0] Phase: Succeeded StartedAt: 2026-08-26 22:53:27 +0000 UTC FinishedAt: 2026-08-26 22:59:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz65zh[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 22:53:27 +0000 UTC FinishedAt: 2026-08-26 22:59:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "ec8477a492cb24f2c334847c8734ca56c7ffdd29", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD", "KVM_AMD_SEV", "CRYPTO_DEV_CCP_DD", "CRYPTO_DEV_SP_PSP", "AMD_IOMMU", "IOMMU_SUPPORT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "ec8477a492cb24f2c334847c8734ca56c7ffdd29", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD", "KVM_AMD_SEV", "CRYPTO_DEV_CCP_DD", "CRYPTO_DEV_SP_PSP", "AMD_IOMMU", "IOMMU_SUPPORT" ], "series_id": "cc0bd5b4-43c7-414a-b18a-677a2a7e94bc" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "sev_mem_enc_ioctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfQ0NQX0REJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfU1BfUFNQJiMzNDssCiAgICAmIzM0O0FNRF9JT01NVSYjMzQ7LAogICAgJiMzNDtJT01NVV9TVVBQT1JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2V2X21lbV9lbmNfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBDUFUgbWl0aWdhdGlvbiBzZWxlY3Rpb24gbG9naWMgKElCUlMsIEF1dG9JQlJTLCBTRVYtU05QKSBhbmQgS1ZNIFNFViBpbml0aWFsaXphdGlvbiBmZWF0dXJlIHZhbGlkYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuIFRoZSBtb2RpZmllZCBkYXRhIHN0cnVjdHVyZXMgKGxpa2UgYHN0cnVjdCBrdm1fc2V2X2luaXRgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBgY29weV9mcm9tX3VzZXJgIGJlZm9yZSBiZWluZyByZWFkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgZXhwb3NlZCBieSB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmFsaWRhdGlvbiBvZiBgdm1zYV9mZWF0dXJlc2AgZHVyaW5nIEtWTSBTRVYgZ3Vlc3QgaW5pdGlhbGl6YXRpb24gKGBLVk1fU0VWX0lOSVQyYCBpb2N0bCkgYW5kIGFkZHMgbmV3IFNFVi1TTlAgZmVhdHVyZXMgdG8gdGhlIHN1cHBvcnRlZCBsaXN0LiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgdGhlIG5ldyBmZWF0dXJlIHZhbGlkYXRpb24gbG9naWMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGJ1Z3MuIFRoZSBDUFUgYnVnIG1pdGlnYXRpb24gY2hhbmdlcyBhcmUgYm9vdC10aW1lIGxvZ2ljIGFuZCBub3QgZGlyZWN0bHkgZnV6emFibGUgZnJvbSB1c2Vyc3BhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5YjAwZjNmNjYzODY1NmYxNTBmOGQ5OGFmNmU0YzllMDQyNjg3MDljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMjI6NTc6MTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWdcbmluZGV4IDE1ZmQ5ZWM1ZWNhY2IuLmI5YTdkZGVmNGNiYWIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9LY29uZmlnXG5AQCAtMjQ5NiwxMiAmIzQzOzI0OTYsMTMgQEAgY29uZmlnIE1JVElHQVRJT05fSUJQQl9FTlRSWVxuIFxuIGNvbmZpZyBNSVRJR0FUSU9OX0lCUlNfRU5UUllcbiBcdGJvb2wgXCYjMzQ7RW5hYmxlIElCUlMgb24ga2VybmVsIGVudHJ5XCYjMzQ7XG4tXHRkZXBlbmRzIG9uIENQVV9TVVBfSU5URUwgXHUwMDI2XHUwMDI2IFg4Nl82NFxuJiM0MztcdGRlcGVuZHMgb24gWDg2XzY0XG4gXHRkZWZhdWx0IHlcbiBcdGhlbHBcbiBcdCAgQ29tcGlsZSB0aGUga2VybmVsIHdpdGggc3VwcG9ydCBmb3IgdGhlIHNwZWN0cmVfdjI9aWJycyBtaXRpZ2F0aW9uLlxuLVx0ICBUaGlzIG1pdGlnYXRlcyBib3RoIHNwZWN0cmVfdjIgYW5kIHJldGJsZWVkIGF0IGdyZWF0IGNvc3QgdG9cbi1cdCAgcGVyZm9ybWFuY2UuXG4mIzQzO1x0ICBUaGlzIG1pdGlnYXRlcyBzcGVjdHJlX3YyIGF0IGdyZWF0IGNvc3QgdG8gcGVyZm9ybWFuY2UuICBPbiBJbnRlbCxcbiYjNDM7XHQgIGl0IGFsc28gbWl0aWdhdGVzIHJldGJsZWVkLiAgT24gQU1EL0h5Z29uLCByZXRibGVlZCBtaXRpZ2F0aW9uXG4mIzQzO1x0ICByZXF1aXJlcyBNSVRJR0FUSU9OX1VOUkVUX0VOVFJZIG9yIE1JVElHQVRJT05fSUJQQl9FTlRSWS5cbiBcbiBjb25maWcgTUlUSUdBVElPTl9TUlNPXG4gXHRib29sIFwmIzM0O01pdGlnYXRlIHNwZWN1bGF0aXZlIFJBUyBvdmVyZmxvdyBvbiBBTURcJiMzNDtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuaW5kZXggZjcwZWU3NGI1ZjkyMS4uM2FhZDJiNTNmNTliZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbkBAIC00NzIsNiAmIzQzOzQ3Miw3IEBAXG4gI2RlZmluZSBYODZfRkVBVFVSRV9BTExPV0VEX1NFVl9GRUFUVVJFUyAoMTkqMzImIzQzOzI3KSAvKiBBbGxvd2VkIFNFViBGZWF0dXJlcyAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfU1ZTTVx0XHQoMTkqMzImIzQzOzI4KSAvKiBcJiMzNDtzdnNtXCYjMzQ7IFNWU00gcHJlc2VudCAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfSFZfSU5VU0VfV1JfQUxMT1dFRFx0KDE5KjMyJiM0MzszMCkgLyogQWxsb3cgV3JpdGUgdG8gaW4tdXNlIGh5cGVydmlzb3Itb3duZWQgcGFnZXMgKi9cbiYjNDM7I2RlZmluZSBYODZfRkVBVFVSRV9TTlBfSUJQQl9PTl9FTlRSWVx0KDE5KjMyJiM0MzszMSkgLyogU0VWLVNOUCBJQlBCIG9uIFZNIEVudHJ5ICovXG4gXG4gLyogQU1ELWRlZmluZWQgRXh0ZW5kZWQgRmVhdHVyZSAyIEVBWCwgQ1BVSUQgbGV2ZWwgMHg4MDAwMDAyMSAoRUFYKSwgd29yZCAyMCAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfTk9fTkVTVEVEX0RBVEFfQlBcdCgyMCozMiYjNDM7IDApIC8qIE5vIE5lc3RlZCBEYXRhIEJyZWFrcG9pbnRzICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuaW5kZXggYWE2MzQzMWJhOTJjMy4uMGRhMjIzNGI3MWM2OSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuQEAgLTMwNSwxMSAmIzQzOzMwNSwxOCBAQCBzdGF0aWNfYXNzZXJ0KChBVklDX01BWF9QSFlTSUNBTF9JRCBcdTAwMjYgQVZJQ19QSFlTSUNBTF9NQVhfSU5ERVhfTUFTSykgPT0gQVZJQ19NQVhfXG4gc3RhdGljX2Fzc2VydCgoWDJBVklDX01BWF9QSFlTSUNBTF9JRCBcdTAwMjYgQVZJQ19QSFlTSUNBTF9NQVhfSU5ERVhfTUFTSykgPT0gWDJBVklDX01BWF9QSFlTSUNBTF9JRCk7XG4gc3RhdGljX2Fzc2VydCgoWDJBVklDXzRLX01BWF9QSFlTSUNBTF9JRCBcdTAwMjYgQVZJQ19QSFlTSUNBTF9NQVhfSU5ERVhfTUFTSykgPT0gWDJBVklDXzRLX01BWF9QSFlTSUNBTF9JRCk7XG4gXG4tI2RlZmluZSBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRVx0XHRcdFx0QklUKDApXG4tI2RlZmluZSBTVk1fU0VWX0ZFQVRfUkVTVFJJQ1RFRF9JTkpFQ1RJT05cdFx0QklUKDMpXG4tI2RlZmluZSBTVk1fU0VWX0ZFQVRfQUxURVJOQVRFX0lOSkVDVElPTlx0XHRCSVQoNClcbi0jZGVmaW5lIFNWTV9TRVZfRkVBVF9ERUJVR19TV0FQXHRcdFx0XHRCSVQoNSlcbi0jZGVmaW5lIFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDXHRcdFx0XHRCSVQoOSlcbiYjNDM7I2RlZmluZSBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRVx0XHRcdFx0QklUX1VMTCgwKVxuJiM0MzsjZGVmaW5lIFNWTV9TRVZfRkVBVF9SRVNUUklDVEVEX0lOSkVDVElPTlx0XHRCSVRfVUxMKDMpXG4mIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX0FMVEVSTkFURV9JTkpFQ1RJT05cdFx0QklUX1VMTCg0KVxuJiM0MzsjZGVmaW5lIFNWTV9TRVZfRkVBVF9ERUJVR19TV0FQXHRcdFx0XHRCSVRfVUxMKDUpXG4mIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX0JUQl9JU09MQVRJT05cdFx0XHRCSVRfVUxMKDcpXG4mIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0NcdFx0XHRcdEJJVF9VTEwoOSlcbiYjNDM7I2RlZmluZSBTVk1fU0VWX0ZFQVRfSUJQQl9PTl9FTlRSWVx0XHRcdEJJVF9VTEwoMjEpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFNWTV9TRVZfRkVBVF9TTlBfT05MWV9NQVNLXHQoU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkUgfCBcXFxuJiM0MztcdFx0XHRcdFx0IFNWTV9TRVZfRkVBVF9CVEJfSVNPTEFUSU9OIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBTVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQyB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgU1ZNX1NFVl9GRUFUX0lCUEJfT05fRU5UUlkpXG4gXG4gI2RlZmluZSBWTUNCX0FMTE9XRURfU0VWX0ZFQVRVUkVTX1ZBTElEXHRcdFx0QklUX1VMTCg2MylcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1Z3MuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYnVncy5jXG5pbmRleCA1NmVhYzU2MTFjMzE4Li4wODc4MGUwZDM3ZWM3IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYnVncy5jXG5AQCAtMTMwNSw3ICYjNDM7MTMwNSwxNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcmV0YmxlZWRfdXBkYXRlX21pdGlnYXRpb24odm9pZClcbiBcbiBcdC8qXG4gXHQgKiBMZXQgSUJSUyB0cnVtcCBhbGwgb24gSW50ZWwgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGVmZmVjdHMgb2YgdGhlXG4tXHQgKiByZXRibGVlZD0gY21kbGluZSBvcHRpb24gZXhjZXB0IGZvciBjYWxsIGRlcHRoIGJhc2VkIHN0dWZmaW5nXG4mIzQzO1x0ICogcmV0YmxlZWQ9IGNtZGxpbmUgb3B0aW9uIGV4Y2VwdCBmb3IgY2FsbCBkZXB0aCBiYXNlZCBzdHVmZmluZy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIE9uIEFNRC9IeWdvbiwgbGVnYWN5IFNQRUNfQ1RSTC5JQlJTIHRvZ2dsaW5nIGRvZXMgbm90IG1pdGlnYXRlIHRoZVxuJiM0MztcdCAqIEJyYW5jaCBUeXBlIENvbmZ1c2lvbiBSRVRCbGVlZCB2YXJpYW50OiBSRVQgcHJlZGljdGlvbiBjb21lcyBmcm9tXG4mIzQzO1x0ICogdGhlIFJldHVybiBBZGRyZXNzIFByZWRpY3Rvciwgbm90IHRoZSByZXN0cmljdGVkIGluZGlyZWN0IGJyYW5jaFxuJiM0MztcdCAqIHByZWRpY3RvcnMgdGhhdCBJQlJTIGNvbnRyb2xzLiAgU28ga2VlcCB0aGlzIEludGVsLW9ubHkgYW5kIGxlYXZlXG4mIzQzO1x0ICogQU1EJiMzOTtzIHNvZnR3YXJlIHJldHVybi10aHVuayBtaXRpZ2F0aW9uIChVTlJFVC9JQlBCKSBpbiBwbGFjZSBldmVuXG4mIzQzO1x0ICogd2hlbiBzcGVjdHJlX3YyPWlicnMgaXMgc2VsZWN0ZWQuXG4gXHQgKi9cbiBcdGlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkge1xuIFx0XHRzd2l0Y2ggKHNwZWN0cmVfdjJfZW5hYmxlZCkge1xuQEAgLTE2NzIsNiAmIzQzOzE2NzksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcmV0cG9saW5lX3NlcV9lbmFibGVkKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9XG4gI2RlZmluZSBTUEVDVFJFX1YyX0xGRU5DRV9NU0cgXCYjMzQ7V0FSTklORzogTEZFTkNFIG1pdGlnYXRpb24gaXMgbm90IHJlY29tbWVuZGVkIGZvciB0aGlzIENQVSwgZGF0YSBsZWFrcyBwb3NzaWJsZSFcXG5cJiMzNDtcbiAjZGVmaW5lIFNQRUNUUkVfVjJfRUlCUlNfRUJQRl9NU0cgXCYjMzQ7V0FSTklORzogVW5wcml2aWxlZ2VkIGVCUEYgaXMgZW5hYmxlZCB3aXRoIGVJQlJTIG9uLCBkYXRhIGxlYWtzIHBvc3NpYmxlIHZpYSBTcGVjdHJlIHYyIEJIQiBhdHRhY2tzIVxcblwmIzM0O1xuICNkZWZpbmUgU1BFQ1RSRV9WMl9FSUJSU19MRkVOQ0VfRUJQRl9TTVRfTVNHIFwmIzM0O1dBUk5JTkc6IFVucHJpdmlsZWdlZCBlQlBGIGlzIGVuYWJsZWQgd2l0aCBlSUJSUyYjNDM7TEZFTkNFIG1pdGlnYXRpb24gYW5kIFNNVCwgZGF0YSBsZWFrcyBwb3NzaWJsZSB2aWEgU3BlY3RyZSB2MiBCSEIgYXR0YWNrcyFcXG5cJiMzNDtcbiYjNDM7I2RlZmluZSBTUEVDVFJFX1YyX0VJQlJTX1NOUF9QRVJGX01TRyBcJiMzNDtXQVJOSU5HOiBlSUJSUyBtaXRpZ2F0aW9uIGVuYWJsZXMgQXV0b0lCUlMgb24gU0VWLVNOUCBlbmFibGVkIENQVSwgdGhpcyBtYXkgY2F1c2UgcGVyZm9ybWFuY2UgbG9zc1xcblwmIzM0O1xuICNkZWZpbmUgU1BFQ1RSRV9WMl9JQlJTX1BFUkZfTVNHIFwmIzM0O1dBUk5JTkc6IElCUlMgbWl0aWdhdGlvbiBzZWxlY3RlZCBvbiBFbmhhbmNlZCBJQlJTIENQVSwgdGhpcyBtYXkgY2F1c2UgdW5uZWNlc3NhcnkgcGVyZm9ybWFuY2UgbG9zc1xcblwmIzM0O1xuIFxuICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbkBAIC0yMTY1LDExICYjNDM7MjE3Myw2IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzcGVjdHJlX3YyX3NlbGVjdF9taXRpZ2F0aW9uKHZvaWQpXG4gXHRcdHNwZWN0cmVfdjJfY21kID0gU1BFQ1RSRV9WMl9DTURfQVVUTztcbiBcdH1cbiBcbi1cdGlmIChzcGVjdHJlX3YyX2NtZCA9PSBTUEVDVFJFX1YyX0NNRF9JQlJTIFx1MDAyNlx1MDAyNiBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCkge1xuLVx0XHRwcl9lcnIoXCYjMzQ7SUJSUyBzZWxlY3RlZCBidXQgbm90IEludGVsIENQVS4gU3dpdGNoaW5nIHRvIEFVVE8gc2VsZWN0XFxuXCYjMzQ7KTtcbi1cdFx0c3BlY3RyZV92Ml9jbWQgPSBTUEVDVFJFX1YyX0NNRF9BVVRPO1xuLVx0fVxuLVxuIFx0aWYgKHNwZWN0cmVfdjJfY21kID09IFNQRUNUUkVfVjJfQ01EX0lCUlMgXHUwMDI2XHUwMDI2ICFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSUJSUykpIHtcbiBcdFx0cHJfZXJyKFwmIzM0O0lCUlMgc2VsZWN0ZWQgYnV0IENQVSBkb2VzbiYjMzk7dCBoYXZlIElCUlMuIFN3aXRjaGluZyB0byBBVVRPIHNlbGVjdFxcblwmIzM0Oyk7XG4gXHRcdHNwZWN0cmVfdjJfY21kID0gU1BFQ1RSRV9WMl9DTURfQVVUTztcbkBAIC0yMTk0LDcgJiM0MzsyMTk3LDE1IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzcGVjdHJlX3YyX3NlbGVjdF9taXRpZ2F0aW9uKHZvaWQpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGZhbGx0aHJvdWdoO1xuIFx0Y2FzZSBTUEVDVFJFX1YyX0NNRF9GT1JDRTpcbi1cdFx0aWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9JQlJTX0VOSEFOQ0VEKSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFByZWZlciByZXRwb2xpbmUgd2hlbiBTTlAgaXMgZW5hYmxlZCBiZWNhdXNlIEF1dG9JQlJTXG4mIzQzO1x0XHQgKiBkZWdyYWRlcyBob3N0IHVzZXJzcGFjZSBpbmRpcmVjdCBicmFuY2ggcGVyZm9ybWFuY2UuICBPbmx5XG4mIzQzO1x0XHQgKiBkbyBzbyBpZiByZXRwb2xpbmUgaXMgYWN0dWFsbHkgYnVpbHQgaW4sIG90aGVyd2lzZSBBdXRvSUJSU1xuJiM0MztcdFx0ICogaXMgYmV0dGVyIHRoYW4gbGVhdmluZyB0aGUgc3lzdGVtIHVubWl0aWdhdGVkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0lCUlNfRU5IQU5DRUQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICEoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NFVl9TTlApIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICAgSVNfRU5BQkxFRChDT05GSUdfTUlUSUdBVElPTl9SRVRQT0xJTkUpKSkge1xuIFx0XHRcdHNwZWN0cmVfdjJfZW5hYmxlZCA9IFNQRUNUUkVfVjJfRUlCUlM7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbkBAIC0yMjc3LDE1ICYjNDM7MjI4OCwyNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc3BlY3RyZV92Ml9hcHBseV9taXRpZ2F0aW9uKHZvaWQpXG4gXHRpZiAoc3BlY3RyZV92Ml9lbmFibGVkID09IFNQRUNUUkVfVjJfRUlCUlMgXHUwMDI2XHUwMDI2IHVucHJpdmlsZWdlZF9lYnBmX2VuYWJsZWQoKSlcbiBcdFx0cHJfZXJyKFNQRUNUUkVfVjJfRUlCUlNfRUJQRl9NU0cpO1xuIFxuLVx0aWYgKHNwZWN0cmVfdjJfaW5faWJyc19tb2RlKHNwZWN0cmVfdjJfZW5hYmxlZCkpIHtcbi1cdFx0aWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BVVRPSUJSUykpIHtcbi1cdFx0XHRtc3Jfc2V0X2JpdChNU1JfRUZFUiwgX0VGRVJfQVVUT0lCUlMpO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHg4Nl9zcGVjX2N0cmxfYmFzZSB8PSBTUEVDX0NUUkxfSUJSUztcbi1cdFx0XHR1cGRhdGVfc3BlY19jdHJsKHg4Nl9zcGVjX2N0cmxfYmFzZSk7XG4tXHRcdH1cbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9uIEF1dG9JQlJTLWNhcGFibGUgQ1BVcywgZUlCUlMgaXMgZW5hYmxlZCB0aHJvdWdoIEVGRVIuQVVUT0lCUlNcbiYjNDM7XHQgKiByYXRoZXIgdGhhbiBTUEVDX0NUUkwuSUJSUy4gIExlZ2FjeSBzcGVjdHJlX3YyPWlicnMga2VlcHMgdXNpbmdcbiYjNDM7XHQgKiBTUEVDX0NUUkwuSUJSUyBldmVuIHRoZXJlLCBhcyBpdCBuZWVkcyB0byBiZSB0b2dnbGVkIG9uIGtlcm5lbFxuJiM0MztcdCAqIGVudHJ5L2V4aXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNwZWN0cmVfdjJfaW5fZWlicnNfbW9kZShzcGVjdHJlX3YyX2VuYWJsZWQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVVUT0lCUlMpKSB7XG4mIzQzO1x0XHRtc3Jfc2V0X2JpdChNU1JfRUZFUiwgX0VGRVJfQVVUT0lCUlMpO1xuJiM0MztcdH0gZWxzZSBpZiAoc3BlY3RyZV92Ml9pbl9pYnJzX21vZGUoc3BlY3RyZV92Ml9lbmFibGVkKSkge1xuJiM0MztcdFx0eDg2X3NwZWNfY3RybF9iYXNlIHw9IFNQRUNfQ1RSTF9JQlJTO1xuJiM0MztcdFx0dXBkYXRlX3NwZWNfY3RybCh4ODZfc3BlY19jdHJsX2Jhc2UpO1xuIFx0fVxuIFxuJiM0MztcdGlmIChzcGVjdHJlX3YyX2luX2VpYnJzX21vZGUoc3BlY3RyZV92Ml9lbmFibGVkKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NFVl9TTlApKVxuJiM0MztcdFx0cHJfd2FybihTUEVDVFJFX1YyX0VJQlJTX1NOUF9QRVJGX01TRyk7XG4mIzQzO1xuIFx0c3dpdGNoIChzcGVjdHJlX3YyX2VuYWJsZWQpIHtcbiBcdGNhc2UgU1BFQ1RSRV9WMl9OT05FOlxuIFx0XHRyZXR1cm47XG5AQCAtMzI4NCw2ICYjNDM7MzMwNCwxNyBAQCB2b2lkIF9faW5pdCBjcHVfc2VsZWN0X21pdGlnYXRpb25zKHZvaWQpXG4gXHRcdHg4Nl9zcGVjX2N0cmxfYmFzZSBcdTAwMjY9IH5TUEVDX0NUUkxfTUlUSUdBVElPTlNfTUFTSztcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIExpa2V3aXNlIGZvciBFRkVSLkFVVE9JQlJTOiBoZWFkXzY0LlMgcHJlc2VydmVzIHRoZSBpbmNvbWluZyBFRkVSXG4mIzQzO1x0ICogYml0cywgc28gYSBrZXhlYyBmcm9tIGEga2VybmVsIHRoYXQgcmFuIGluIEF1dG9JQlJTIG1vZGUgY2FycmllcyB0aGVcbiYjNDM7XHQgKiBiaXQgaW50byB0aGlzIG9uZS4gIENsZWFyIGl0IGFuZCBsZXQgdGhlIG1pdGlnYXRpb24gc2VsZWN0aW9uIGJlbG93XG4mIzQzO1x0ICogcmVkaXNjb3ZlciBpdC4gIFRoaXMgYWxzbyBydW5zIGJlZm9yZSBpbml0X3JlYWxfbW9kZSgpIHNuYXBzaG90c1xuJiM0MztcdCAqIEVGRVIgZm9yIHRoZSBBUCB0cmFtcG9saW5lLCBzbyBBUHMgaW5oZXJpdCB3aGF0ZXZlciB0aGlzIGtlcm5lbFxuJiM0MztcdCAqIHNldHRsZXMgb24gcmF0aGVyIHRoYW4gdGhlIHByZXZpb3VzIGtlcm5lbCYjMzk7cyBjaG9pY2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfQVVUT0lCUlMpKVxuJiM0MztcdFx0bXNyX2NsZWFyX2JpdChNU1JfRUZFUiwgX0VGRVJfQVVUT0lCUlMpO1xuJiM0MztcbiBcdHg4Nl9hcmNoX2NhcF9tc3IgPSB4ODZfcmVhZF9hcmNoX2NhcF9tc3IoKTtcbiBcbiBcdGNwdV9wcmludF9hdHRhY2tfdmVjdG9ycygpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jXG5pbmRleCBjNzM1MjgyN2Y0OTFkLi5jNTY4ZDc0MjgyYTg0IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uY1xuQEAgLTE0OTYsMTMgJiM0MzsxNDk2LDkgQEAgc3RhdGljIHZvaWQgX19pbml0IGNwdV9zZXRfYnVnX2JpdHMoc3RydWN0IGNwdWluZm9feDg2ICpjKVxuIFx0LypcbiBcdCAqIEFNRCYjMzk7cyBBdXRvSUJSUyBpcyBlcXVpdmFsZW50IHRvIEludGVsJiMzOTtzIGVJQlJTIC0gdXNlIHRoZSBJbnRlbCBmZWF0dXJlXG4gXHQgKiBmbGFnIGFuZCBwcm90ZWN0IGZyb20gdmVuZG9yLXNwZWNpZmljIGJ1Z3MgdmlhIHRoZSB3aGl0ZWxpc3QuXG4tXHQgKlxuLVx0ICogRG9uJiMzOTt0IHVzZSBBdXRvSUJSUyB3aGVuIFNOUCBpcyBlbmFibGVkIGJlY2F1c2UgaXQgZGVncmFkZXMgaG9zdFxuLVx0ICogdXNlcnNwYWNlIGluZGlyZWN0IGJyYW5jaCBwZXJmb3JtYW5jZS5cbiBcdCAqL1xuIFx0aWYgKCh4ODZfYXJjaF9jYXBfbXNyIFx1MDAyNiBBUkNIX0NBUF9JQlJTX0FMTCkgfHxcbi1cdCAgICAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9BVVRPSUJSUykgXHUwMDI2XHUwMDI2XG4tXHQgICAgICFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFVl9TTlApKSkge1xuJiM0MztcdCAgICBjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0FVVE9JQlJTKSkge1xuIFx0XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX0lCUlNfRU5IQU5DRUQpO1xuIFx0XHRpZiAoIWNwdV9tYXRjaGVzKGNwdV92dWxuX3doaXRlbGlzdCwgTk9fRUlCUlNfUEJSU0IpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgISh4ODZfYXJjaF9jYXBfbXNyIFx1MDAyNiBBUkNIX0NBUF9QQlJTQl9OTykpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbmluZGV4IDU3MDU3MjNmMWY0MTIuLjUzY2M2ZDA0Mzg4MzYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5AQCAtNTA2LDcgJiM0Mzs1MDYsNyBAQCBzdGF0aWMgaW50IF9fc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKCFzbnBfYWN0aXZlKVxuLVx0XHR2YWxpZF92bXNhX2ZlYXR1cmVzIFx1MDAyNj0gflNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDO1xuJiM0MztcdFx0dmFsaWRfdm1zYV9mZWF0dXJlcyBcdTAwMjY9IH5TVk1fU0VWX0ZFQVRfU05QX09OTFlfTUFTSztcbiBcbiBcdGlmIChkYXRhLVx1MDAzZXZtc2FfZmVhdHVyZXMgXHUwMDI2IH52YWxpZF92bXNhX2ZlYXR1cmVzKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0zMjU3LDggJiM0MzszMjU3LDIzIEBAIHZvaWQgX19pbml0IHNldl9oYXJkd2FyZV9zZXR1cCh2b2lkKVxuIFx0ICAgIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfTk9fTkVTVEVEX0RBVEFfQlApKVxuIFx0XHRzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgfD0gU1ZNX1NFVl9GRUFUX0RFQlVHX1NXQVA7XG4gXG4tXHRpZiAoc2V2X3NucF9lbmFibGVkIFx1MDAyNlx1MDAyNiB0c2Nfa2h6IFx1MDAyNlx1MDAyNiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NOUF9TRUNVUkVfVFNDKSlcbi1cdFx0c2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDO1xuJiM0MztcdGlmIChzZXZfc25wX2VuYWJsZWQpIHtcbiYjNDM7XHRcdHNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVW5saWtlIFNlY3VyZSBUU0MgYW5kIElCUEItb24tRW50cnkgYmVsb3csIEJUQiBJc29sYXRpb24gaGFzXG4mIzQzO1x0XHQgKiBubyBob3N0IGVudW1lcmF0aW9uIGJpdCB0byBnYXRlIG9uOiB0aGUgQVBNIGRlZmluZXMgaXQgYXNcbiYjNDM7XHRcdCAqIGFyY2hpdGVjdHVyYWxseSBwcmVzZW50IG9uIGV2ZXJ5IFNFVi1TTlAtY2FwYWJsZSBwcm9jZXNzb3IuXG4mIzQzO1x0XHQgKiBJZiBTTlAgaXMgc3VwcG9ydGVkLCBCVEIgSXNvbGF0aW9uIGlzIGF2YWlsYWJsZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9CVEJfSVNPTEFUSU9OO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0c2Nfa2h6IFx1MDAyNlx1MDAyNiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NOUF9TRUNVUkVfVFNDKSlcbiYjNDM7XHRcdFx0c2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDO1xuJiM0MztcbiYjNDM7XHRcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NOUF9JQlBCX09OX0VOVFJZKSlcbiYjNDM7XHRcdFx0c2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9JQlBCX09OX0VOVFJZO1xuJiM0MztcdH1cbiB9XG4gXG4gdm9pZCBzZXZfaGFyZHdhcmVfdW5zZXR1cCh2b2lkKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmggYi90b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG5pbmRleCA2NTQ3YzBhZWU0NWI3Li42MzRjZDA5MzY2ZGE2IDEwMDY0NFxuLS0tIGEvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuQEAgLTQ2MCw2ICYjNDM7NDYwLDcgQEBcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0FMTE9XRURfU0VWX0ZFQVRVUkVTICgxOSozMiYjNDM7MjcpIC8qIEFsbG93ZWQgU0VWIEZlYXR1cmVzICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9TVlNNXHRcdCgxOSozMiYjNDM7MjgpIC8qIFwmIzM0O3N2c21cJiMzNDsgU1ZTTSBwcmVzZW50ICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9IVl9JTlVTRV9XUl9BTExPV0VEXHQoMTkqMzImIzQzOzMwKSAvKiBBbGxvdyBXcml0ZSB0byBpbi11c2UgaHlwZXJ2aXNvci1vd25lZCBwYWdlcyAqL1xuJiM0MzsjZGVmaW5lIFg4Nl9GRUFUVVJFX1NOUF9JQlBCX09OX0VOVFJZXHQoMTkqMzImIzQzOzMxKSAvKiBTRVYtU05QIElCUEIgb24gVk0gRW50cnkgKi9cbiBcbiAvKiBBTUQtZGVmaW5lZCBFeHRlbmRlZCBGZWF0dXJlIDIgRUFYLCBDUFVJRCBsZXZlbCAweDgwMDAwMDIxIChFQVgpLCB3b3JkIDIwICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9OT19ORVNURURfREFUQV9CUFx0KDIwKjMyJiM0MzsgMCkgLyogTm8gTmVzdGVkIERhdGEgQnJlYWtwb2ludHMgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuY1xuaW5kZXggODdiZmY0ZmJiN2VkNS4uM2Y1OTJlMjQ1YTY2ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmNcbkBAIC0xMywxNyAmIzQzOzEzLDI1IEBAXG4gI2luY2x1ZGUgXCYjMzQ7c3ZtX3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4gXG4tI2RlZmluZSBTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUCAzMnVcbiYjNDM7I2RlZmluZSBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRVx0XHRCSVRfVUxMKDApXG4mIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX0RFQlVHX1NXQVBcdFx0QklUX1VMTCg1KVxuJiM0MzsjZGVmaW5lIFNWTV9TRVZfRkVBVF9CVEJfSVNPTEFUSU9OXHRCSVRfVUxMKDcpXG4mIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0NcdFx0QklUX1VMTCg5KVxuJiM0MzsjZGVmaW5lIFNWTV9TRVZfRkVBVF9JQlBCX09OX0VOVFJZXHRCSVRfVUxMKDIxKVxuJiM0MztcbiYjNDM7LyogRmVhdHVyZXMgdmFsaWQgb25seSBmb3IgU05QIGd1ZXN0cywgcmVqZWN0ZWQgZm9yIFNFVi1FUyBhbmQgYmVsb3cuICovXG4mIzQzOyNkZWZpbmUgU05QX09OTFlfRkVBVFVSRVNcdFx0KFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBTVk1fU0VWX0ZFQVRfQlRCX0lTT0xBVElPTiB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0MgfCBcXFxuJiM0MztcdFx0XHRcdFx0IFNWTV9TRVZfRkVBVF9JQlBCX09OX0VOVFJZKVxuIFxuIC8qXG4gICogU29tZSBmZWF0dXJlcyBtYXkgaGF2ZSBoaWRkZW4gZGVwZW5kZW5jaWVzLCBvciBtYXkgb25seSB3b3JrXG4gICogZm9yIGNlcnRhaW4gVk0gdHlwZXMuICBFcnIgb24gdGhlIHNpZGUgb2Ygc2FmZXR5IGFuZCBkb24mIzM5O3RcbiAgKiBleHBlY3QgdGhhdCBhbGwgc3VwcG9ydGVkIGZlYXR1cmVzIGNhbiBiZSBwYXNzZWQgb25lIGJ5IG9uZVxuICAqIHRvIEtWTV9TRVZfSU5JVDIuXG4tICpcbi0gKiAoV2VsbCwgcmlnaHQgbm93IHRoZXJlJiMzOTtzIG9ubHkgb25lLi4uKVxuICAqL1xuLSNkZWZpbmUgS05PV05fRkVBVFVSRVMgU1ZNX1NFVl9GRUFUX0RFQlVHX1NXQVBcbiYjNDM7I2RlZmluZSBLTk9XTl9GRUFUVVJFU1x0XHQoU1ZNX1NFVl9GRUFUX0RFQlVHX1NXQVAgfCBTTlBfT05MWV9GRUFUVVJFUylcbiBcbiBpbnQga3ZtX2ZkO1xuIHU2NCBzdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcztcbkBAIC0xMDgsNyAmIzQzOzExNiw3IEBAIHZvaWQgdGVzdF9mZWF0dXJlcyh1MzIgdm1fdHlwZSwgdTY0IHN1cHBvcnRlZF9mZWF0dXJlcylcbiBcdFx0aWYgKCEoc3VwcG9ydGVkX2ZlYXR1cmVzIFx1MDAyNiBCSVRfVUxMKGkpKSlcbiBcdFx0XHR0ZXN0X2luaXQyX2ludmFsaWQodm1fdHlwZSxcbiBcdFx0XHRcdFx1MDAyNihzdHJ1Y3Qga3ZtX3Nldl9pbml0KXsgLnZtc2FfZmVhdHVyZXMgPSBCSVRfVUxMKGkpIH0sXG4tXHRcdFx0XHRcJiMzNDt1bmtub3duIGZlYXR1cmVcJiMzNDspO1xuJiM0MztcdFx0XHRcdFwmIzM0O3Vua25vd24gb3IgdW5zdXBwb3J0ZWQgZmVhdHVyZSBmb3IgVk0gdHlwZVwmIzM0Oyk7XG4gXHRcdGVsc2UgaWYgKEtOT1dOX0ZFQVRVUkVTIFx1MDAyNiBCSVRfVUxMKGkpKVxuIFx0XHRcdHRlc3RfaW5pdDIodm1fdHlwZSxcbiBcdFx0XHRcdFx1MDAyNihzdHJ1Y3Qga3ZtX3Nldl9pbml0KXsgLnZtc2FfZmVhdHVyZXMgPSBCSVRfVUxMKGkpIH0pO1xuQEAgLTE1Nyw3ICYjNDM7MTY1LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcbiBcdHRlc3RfZmVhdHVyZXMoS1ZNX1g4Nl9TRVZfVk0sIDApO1xuIFx0aWYgKGhhdmVfc2V2X2VzKVxuLVx0XHR0ZXN0X2ZlYXR1cmVzKEtWTV9YODZfU0VWX0VTX1ZNLCBzdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyk7XG4mIzQzO1x0XHR0ZXN0X2ZlYXR1cmVzKEtWTV9YODZfU0VWX0VTX1ZNLCBzdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyBcdTAwMjYgflNOUF9PTkxZX0ZFQVRVUkVTKTtcbiBcdGlmIChoYXZlX3NucClcbiBcdFx0dGVzdF9mZWF0dXJlcyhLVk1fWDg2X1NOUF9WTSwgc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fQU1EX1NFViYjMzQ7LAogICAgJiMzNDtDUllQVE9fREVWX0NDUF9ERCYjMzQ7LAogICAgJiMzNDtDUllQVE9fREVWX1NQX1BTUCYjMzQ7LAogICAgJiMzNDtBTURfSU9NTVUmIzM0OywKICAgICYjMzQ7SU9NTVVfU1VQUE9SVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Nldl9tZW1fZW5jX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIG9mIGB2bXNhX2ZlYXR1cmVzYCBkdXJpbmcgS1ZNIFNFViBndWVzdCBpbml0aWFsaXphdGlvbiAoYEtWTV9TRVZfSU5JVDJgIGlvY3RsKSBhbmQgYWRkcyBuZXcgU0VWLVNOUCBmZWF0dXJlcyB0byB0aGUgc3VwcG9ydGVkIGxpc3QuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgbmV3IGZlYXR1cmUgdmFsaWRhdGlvbiBsb2dpYyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYnVncy4gVGhlIENQVSBidWcgbWl0aWdhdGlvbiBjaGFuZ2VzIGFyZSBib290LXRpbWUgbG9naWMgYW5kIG5vdCBkaXJlY3RseSBmdXp6YWJsZSBmcm9tIHVzZXJzcGFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDliMDBmM2Y2NjM4NjU2ZjE1MGY4ZDk4YWY2ZTRjOWUwNDI2ODcwOWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAyMjo1NzoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IDE1ZmQ5ZWM1ZWNhY2IuLmI5YTdkZGVmNGNiYWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvS2NvbmZpZwpAQCAtMjQ5NiwxMiAmIzQzOzI0OTYsMTMgQEAgY29uZmlnIE1JVElHQVRJT05fSUJQQl9FTlRSWQogCiBjb25maWcgTUlUSUdBVElPTl9JQlJTX0VOVFJZCiAJYm9vbCAmIzM0O0VuYWJsZSBJQlJTIG9uIGtlcm5lbCBlbnRyeSYjMzQ7Ci0JZGVwZW5kcyBvbiBDUFVfU1VQX0lOVEVMICZhbXA7JmFtcDsgWDg2XzY0CiYjNDM7CWRlcGVuZHMgb24gWDg2XzY0CiAJZGVmYXVsdCB5CiAJaGVscAogCSAgQ29tcGlsZSB0aGUga2VybmVsIHdpdGggc3VwcG9ydCBmb3IgdGhlIHNwZWN0cmVfdjI9aWJycyBtaXRpZ2F0aW9uLgotCSAgVGhpcyBtaXRpZ2F0ZXMgYm90aCBzcGVjdHJlX3YyIGFuZCByZXRibGVlZCBhdCBncmVhdCBjb3N0IHRvCi0JICBwZXJmb3JtYW5jZS4KJiM0MzsJICBUaGlzIG1pdGlnYXRlcyBzcGVjdHJlX3YyIGF0IGdyZWF0IGNvc3QgdG8gcGVyZm9ybWFuY2UuICBPbiBJbnRlbCwKJiM0MzsJICBpdCBhbHNvIG1pdGlnYXRlcyByZXRibGVlZC4gIE9uIEFNRC9IeWdvbiwgcmV0YmxlZWQgbWl0aWdhdGlvbgomIzQzOwkgIHJlcXVpcmVzIE1JVElHQVRJT05fVU5SRVRfRU5UUlkgb3IgTUlUSUdBVElPTl9JQlBCX0VOVFJZLgogCiBjb25maWcgTUlUSUdBVElPTl9TUlNPCiAJYm9vbCAmIzM0O01pdGlnYXRlIHNwZWN1bGF0aXZlIFJBUyBvdmVyZmxvdyBvbiBBTUQmIzM0OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgKaW5kZXggZjcwZWU3NGI1ZjkyMS4uM2FhZDJiNTNmNTliZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oCkBAIC00NzIsNiAmIzQzOzQ3Miw3IEBACiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0FMTE9XRURfU0VWX0ZFQVRVUkVTICgxOSozMiYjNDM7MjcpIC8qIEFsbG93ZWQgU0VWIEZlYXR1cmVzICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1NWU00JCSgxOSozMiYjNDM7MjgpIC8qICYjMzQ7c3ZzbSYjMzQ7IFNWU00gcHJlc2VudCAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9IVl9JTlVTRV9XUl9BTExPV0VECSgxOSozMiYjNDM7MzApIC8qIEFsbG93IFdyaXRlIHRvIGluLXVzZSBoeXBlcnZpc29yLW93bmVkIHBhZ2VzICovCiYjNDM7I2RlZmluZSBYODZfRkVBVFVSRV9TTlBfSUJQQl9PTl9FTlRSWQkoMTkqMzImIzQzOzMxKSAvKiBTRVYtU05QIElCUEIgb24gVk0gRW50cnkgKi8KIAogLyogQU1ELWRlZmluZWQgRXh0ZW5kZWQgRmVhdHVyZSAyIEVBWCwgQ1BVSUQgbGV2ZWwgMHg4MDAwMDAyMSAoRUFYKSwgd29yZCAyMCAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9OT19ORVNURURfREFUQV9CUAkoMjAqMzImIzQzOyAwKSAvKiBObyBOZXN0ZWQgRGF0YSBCcmVha3BvaW50cyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaAppbmRleCBhYTYzNDMxYmE5MmMzLi4wZGEyMjM0YjcxYzY5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaApAQCAtMzA1LDExICYjNDM7MzA1LDE4IEBAIHN0YXRpY19hc3NlcnQoKEFWSUNfTUFYX1BIWVNJQ0FMX0lEICZhbXA7IEFWSUNfUEhZU0lDQUxfTUFYX0lOREVYX01BU0spID09IEFWSUNfTUFYXwogc3RhdGljX2Fzc2VydCgoWDJBVklDX01BWF9QSFlTSUNBTF9JRCAmYW1wOyBBVklDX1BIWVNJQ0FMX01BWF9JTkRFWF9NQVNLKSA9PSBYMkFWSUNfTUFYX1BIWVNJQ0FMX0lEKTsKIHN0YXRpY19hc3NlcnQoKFgyQVZJQ180S19NQVhfUEhZU0lDQUxfSUQgJmFtcDsgQVZJQ19QSFlTSUNBTF9NQVhfSU5ERVhfTUFTSykgPT0gWDJBVklDXzRLX01BWF9QSFlTSUNBTF9JRCk7CiAKLSNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkUJCQkJQklUKDApCi0jZGVmaW5lIFNWTV9TRVZfRkVBVF9SRVNUUklDVEVEX0lOSkVDVElPTgkJQklUKDMpCi0jZGVmaW5lIFNWTV9TRVZfRkVBVF9BTFRFUk5BVEVfSU5KRUNUSU9OCQlCSVQoNCkKLSNkZWZpbmUgU1ZNX1NFVl9GRUFUX0RFQlVHX1NXQVAJCQkJQklUKDUpCi0jZGVmaW5lIFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDCQkJCUJJVCg5KQomIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkUJCQkJQklUX1VMTCgwKQomIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1JFU1RSSUNURURfSU5KRUNUSU9OCQlCSVRfVUxMKDMpCiYjNDM7I2RlZmluZSBTVk1fU0VWX0ZFQVRfQUxURVJOQVRFX0lOSkVDVElPTgkJQklUX1VMTCg0KQomIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX0RFQlVHX1NXQVAJCQkJQklUX1VMTCg1KQomIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX0JUQl9JU09MQVRJT04JCQlCSVRfVUxMKDcpCiYjNDM7I2RlZmluZSBTVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQwkJCQlCSVRfVUxMKDkpCiYjNDM7I2RlZmluZSBTVk1fU0VWX0ZFQVRfSUJQQl9PTl9FTlRSWQkJCUJJVF9VTEwoMjEpCiYjNDM7CiYjNDM7I2RlZmluZSBTVk1fU0VWX0ZFQVRfU05QX09OTFlfTUFTSwkoU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkUgfCBcCiYjNDM7CQkJCQkgU1ZNX1NFVl9GRUFUX0JUQl9JU09MQVRJT04gfCBcCiYjNDM7CQkJCQkgU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0MgfCBcCiYjNDM7CQkJCQkgU1ZNX1NFVl9GRUFUX0lCUEJfT05fRU5UUlkpCiAKICNkZWZpbmUgVk1DQl9BTExPV0VEX1NFVl9GRUFUVVJFU19WQUxJRAkJCUJJVF9VTEwoNjMpCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYnVncy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmMKaW5kZXggNTZlYWM1NjExYzMxOC4uMDg3ODBlMGQzN2VjNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmMKQEAgLTEzMDUsNyAmIzQzOzEzMDUsMTQgQEAgc3RhdGljIHZvaWQgX19pbml0IHJldGJsZWVkX3VwZGF0ZV9taXRpZ2F0aW9uKHZvaWQpCiAKIAkvKgogCSAqIExldCBJQlJTIHRydW1wIGFsbCBvbiBJbnRlbCB3aXRob3V0IGFmZmVjdGluZyB0aGUgZWZmZWN0cyBvZiB0aGUKLQkgKiByZXRibGVlZD0gY21kbGluZSBvcHRpb24gZXhjZXB0IGZvciBjYWxsIGRlcHRoIGJhc2VkIHN0dWZmaW5nCiYjNDM7CSAqIHJldGJsZWVkPSBjbWRsaW5lIG9wdGlvbiBleGNlcHQgZm9yIGNhbGwgZGVwdGggYmFzZWQgc3R1ZmZpbmcuCiYjNDM7CSAqCiYjNDM7CSAqIE9uIEFNRC9IeWdvbiwgbGVnYWN5IFNQRUNfQ1RSTC5JQlJTIHRvZ2dsaW5nIGRvZXMgbm90IG1pdGlnYXRlIHRoZQomIzQzOwkgKiBCcmFuY2ggVHlwZSBDb25mdXNpb24gUkVUQmxlZWQgdmFyaWFudDogUkVUIHByZWRpY3Rpb24gY29tZXMgZnJvbQomIzQzOwkgKiB0aGUgUmV0dXJuIEFkZHJlc3MgUHJlZGljdG9yLCBub3QgdGhlIHJlc3RyaWN0ZWQgaW5kaXJlY3QgYnJhbmNoCiYjNDM7CSAqIHByZWRpY3RvcnMgdGhhdCBJQlJTIGNvbnRyb2xzLiAgU28ga2VlcCB0aGlzIEludGVsLW9ubHkgYW5kIGxlYXZlCiYjNDM7CSAqIEFNRCYjMzk7cyBzb2Z0d2FyZSByZXR1cm4tdGh1bmsgbWl0aWdhdGlvbiAoVU5SRVQvSUJQQikgaW4gcGxhY2UgZXZlbgomIzQzOwkgKiB3aGVuIHNwZWN0cmVfdjI9aWJycyBpcyBzZWxlY3RlZC4KIAkgKi8KIAlpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwpIHsKIAkJc3dpdGNoIChzcGVjdHJlX3YyX2VuYWJsZWQpIHsKQEAgLTE2NzIsNiAmIzQzOzE2NzksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcmV0cG9saW5lX3NlcV9lbmFibGVkKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZGVmaW5lIFNQRUNUUkVfVjJfTEZFTkNFX01TRyAmIzM0O1dBUk5JTkc6IExGRU5DRSBtaXRpZ2F0aW9uIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgdGhpcyBDUFUsIGRhdGEgbGVha3MgcG9zc2libGUhXG4mIzM0OwogI2RlZmluZSBTUEVDVFJFX1YyX0VJQlJTX0VCUEZfTVNHICYjMzQ7V0FSTklORzogVW5wcml2aWxlZ2VkIGVCUEYgaXMgZW5hYmxlZCB3aXRoIGVJQlJTIG9uLCBkYXRhIGxlYWtzIHBvc3NpYmxlIHZpYSBTcGVjdHJlIHYyIEJIQiBhdHRhY2tzIVxuJiMzNDsKICNkZWZpbmUgU1BFQ1RSRV9WMl9FSUJSU19MRkVOQ0VfRUJQRl9TTVRfTVNHICYjMzQ7V0FSTklORzogVW5wcml2aWxlZ2VkIGVCUEYgaXMgZW5hYmxlZCB3aXRoIGVJQlJTJiM0MztMRkVOQ0UgbWl0aWdhdGlvbiBhbmQgU01ULCBkYXRhIGxlYWtzIHBvc3NpYmxlIHZpYSBTcGVjdHJlIHYyIEJIQiBhdHRhY2tzIVxuJiMzNDsKJiM0MzsjZGVmaW5lIFNQRUNUUkVfVjJfRUlCUlNfU05QX1BFUkZfTVNHICYjMzQ7V0FSTklORzogZUlCUlMgbWl0aWdhdGlvbiBlbmFibGVzIEF1dG9JQlJTIG9uIFNFVi1TTlAgZW5hYmxlZCBDUFUsIHRoaXMgbWF5IGNhdXNlIHBlcmZvcm1hbmNlIGxvc3NcbiYjMzQ7CiAjZGVmaW5lIFNQRUNUUkVfVjJfSUJSU19QRVJGX01TRyAmIzM0O1dBUk5JTkc6IElCUlMgbWl0aWdhdGlvbiBzZWxlY3RlZCBvbiBFbmhhbmNlZCBJQlJTIENQVSwgdGhpcyBtYXkgY2F1c2UgdW5uZWNlc3NhcnkgcGVyZm9ybWFuY2UgbG9zc1xuJiMzNDsKIAogI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTApAQCAtMjE2NSwxMSAmIzQzOzIxNzMsNiBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc3BlY3RyZV92Ml9zZWxlY3RfbWl0aWdhdGlvbih2b2lkKQogCQlzcGVjdHJlX3YyX2NtZCA9IFNQRUNUUkVfVjJfQ01EX0FVVE87CiAJfQogCi0JaWYgKHNwZWN0cmVfdjJfY21kID09IFNQRUNUUkVfVjJfQ01EX0lCUlMgJmFtcDsmYW1wOyBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCkgewotCQlwcl9lcnIoJiMzNDtJQlJTIHNlbGVjdGVkIGJ1dCBub3QgSW50ZWwgQ1BVLiBTd2l0Y2hpbmcgdG8gQVVUTyBzZWxlY3RcbiYjMzQ7KTsKLQkJc3BlY3RyZV92Ml9jbWQgPSBTUEVDVFJFX1YyX0NNRF9BVVRPOwotCX0KLQogCWlmIChzcGVjdHJlX3YyX2NtZCA9PSBTUEVDVFJFX1YyX0NNRF9JQlJTICZhbXA7JmFtcDsgIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9JQlJTKSkgewogCQlwcl9lcnIoJiMzNDtJQlJTIHNlbGVjdGVkIGJ1dCBDUFUgZG9lc24mIzM5O3QgaGF2ZSBJQlJTLiBTd2l0Y2hpbmcgdG8gQVVUTyBzZWxlY3RcbiYjMzQ7KTsKIAkJc3BlY3RyZV92Ml9jbWQgPSBTUEVDVFJFX1YyX0NNRF9BVVRPOwpAQCAtMjE5NCw3ICYjNDM7MjE5NywxNSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc3BlY3RyZV92Ml9zZWxlY3RfbWl0aWdhdGlvbih2b2lkKQogCQkJYnJlYWs7CiAJCWZhbGx0aHJvdWdoOwogCWNhc2UgU1BFQ1RSRV9WMl9DTURfRk9SQ0U6Ci0JCWlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSUJSU19FTkhBTkNFRCkpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBQcmVmZXIgcmV0cG9saW5lIHdoZW4gU05QIGlzIGVuYWJsZWQgYmVjYXVzZSBBdXRvSUJSUwomIzQzOwkJICogZGVncmFkZXMgaG9zdCB1c2Vyc3BhY2UgaW5kaXJlY3QgYnJhbmNoIHBlcmZvcm1hbmNlLiAgT25seQomIzQzOwkJICogZG8gc28gaWYgcmV0cG9saW5lIGlzIGFjdHVhbGx5IGJ1aWx0IGluLCBvdGhlcndpc2UgQXV0b0lCUlMKJiM0MzsJCSAqIGlzIGJldHRlciB0aGFuIGxlYXZpbmcgdGhlIHN5c3RlbSB1bm1pdGlnYXRlZC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9JQlJTX0VOSEFOQ0VEKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIShib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU0VWX1NOUCkgJmFtcDsmYW1wOwomIzQzOwkJICAgICAgSVNfRU5BQkxFRChDT05GSUdfTUlUSUdBVElPTl9SRVRQT0xJTkUpKSkgewogCQkJc3BlY3RyZV92Ml9lbmFibGVkID0gU1BFQ1RSRV9WMl9FSUJSUzsKIAkJCWJyZWFrOwogCQl9CkBAIC0yMjc3LDE1ICYjNDM7MjI4OCwyNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc3BlY3RyZV92Ml9hcHBseV9taXRpZ2F0aW9uKHZvaWQpCiAJaWYgKHNwZWN0cmVfdjJfZW5hYmxlZCA9PSBTUEVDVFJFX1YyX0VJQlJTICZhbXA7JmFtcDsgdW5wcml2aWxlZ2VkX2VicGZfZW5hYmxlZCgpKQogCQlwcl9lcnIoU1BFQ1RSRV9WMl9FSUJSU19FQlBGX01TRyk7CiAKLQlpZiAoc3BlY3RyZV92Ml9pbl9pYnJzX21vZGUoc3BlY3RyZV92Ml9lbmFibGVkKSkgewotCQlpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FVVE9JQlJTKSkgewotCQkJbXNyX3NldF9iaXQoTVNSX0VGRVIsIF9FRkVSX0FVVE9JQlJTKTsKLQkJfSBlbHNlIHsKLQkJCXg4Nl9zcGVjX2N0cmxfYmFzZSB8PSBTUEVDX0NUUkxfSUJSUzsKLQkJCXVwZGF0ZV9zcGVjX2N0cmwoeDg2X3NwZWNfY3RybF9iYXNlKTsKLQkJfQomIzQzOwkvKgomIzQzOwkgKiBPbiBBdXRvSUJSUy1jYXBhYmxlIENQVXMsIGVJQlJTIGlzIGVuYWJsZWQgdGhyb3VnaCBFRkVSLkFVVE9JQlJTCiYjNDM7CSAqIHJhdGhlciB0aGFuIFNQRUNfQ1RSTC5JQlJTLiAgTGVnYWN5IHNwZWN0cmVfdjI9aWJycyBrZWVwcyB1c2luZwomIzQzOwkgKiBTUEVDX0NUUkwuSUJSUyBldmVuIHRoZXJlLCBhcyBpdCBuZWVkcyB0byBiZSB0b2dnbGVkIG9uIGtlcm5lbAomIzQzOwkgKiBlbnRyeS9leGl0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHNwZWN0cmVfdjJfaW5fZWlicnNfbW9kZShzcGVjdHJlX3YyX2VuYWJsZWQpICZhbXA7JmFtcDsKJiM0MzsJICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BVVRPSUJSUykpIHsKJiM0MzsJCW1zcl9zZXRfYml0KE1TUl9FRkVSLCBfRUZFUl9BVVRPSUJSUyk7CiYjNDM7CX0gZWxzZSBpZiAoc3BlY3RyZV92Ml9pbl9pYnJzX21vZGUoc3BlY3RyZV92Ml9lbmFibGVkKSkgewomIzQzOwkJeDg2X3NwZWNfY3RybF9iYXNlIHw9IFNQRUNfQ1RSTF9JQlJTOwomIzQzOwkJdXBkYXRlX3NwZWNfY3RybCh4ODZfc3BlY19jdHJsX2Jhc2UpOwogCX0KIAomIzQzOwlpZiAoc3BlY3RyZV92Ml9pbl9laWJyc19tb2RlKHNwZWN0cmVfdjJfZW5hYmxlZCkgJmFtcDsmYW1wOwomIzQzOwkgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NFVl9TTlApKQomIzQzOwkJcHJfd2FybihTUEVDVFJFX1YyX0VJQlJTX1NOUF9QRVJGX01TRyk7CiYjNDM7CiAJc3dpdGNoIChzcGVjdHJlX3YyX2VuYWJsZWQpIHsKIAljYXNlIFNQRUNUUkVfVjJfTk9ORToKIAkJcmV0dXJuOwpAQCAtMzI4NCw2ICYjNDM7MzMwNCwxNyBAQCB2b2lkIF9faW5pdCBjcHVfc2VsZWN0X21pdGlnYXRpb25zKHZvaWQpCiAJCXg4Nl9zcGVjX2N0cmxfYmFzZSAmYW1wOz0gflNQRUNfQ1RSTF9NSVRJR0FUSU9OU19NQVNLOwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBMaWtld2lzZSBmb3IgRUZFUi5BVVRPSUJSUzogaGVhZF82NC5TIHByZXNlcnZlcyB0aGUgaW5jb21pbmcgRUZFUgomIzQzOwkgKiBiaXRzLCBzbyBhIGtleGVjIGZyb20gYSBrZXJuZWwgdGhhdCByYW4gaW4gQXV0b0lCUlMgbW9kZSBjYXJyaWVzIHRoZQomIzQzOwkgKiBiaXQgaW50byB0aGlzIG9uZS4gIENsZWFyIGl0IGFuZCBsZXQgdGhlIG1pdGlnYXRpb24gc2VsZWN0aW9uIGJlbG93CiYjNDM7CSAqIHJlZGlzY292ZXIgaXQuICBUaGlzIGFsc28gcnVucyBiZWZvcmUgaW5pdF9yZWFsX21vZGUoKSBzbmFwc2hvdHMKJiM0MzsJICogRUZFUiBmb3IgdGhlIEFQIHRyYW1wb2xpbmUsIHNvIEFQcyBpbmhlcml0IHdoYXRldmVyIHRoaXMga2VybmVsCiYjNDM7CSAqIHNldHRsZXMgb24gcmF0aGVyIHRoYW4gdGhlIHByZXZpb3VzIGtlcm5lbCYjMzk7cyBjaG9pY2UuCiYjNDM7CSAqLwomIzQzOwlpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9BVVRPSUJSUykpCiYjNDM7CQltc3JfY2xlYXJfYml0KE1TUl9FRkVSLCBfRUZFUl9BVVRPSUJSUyk7CiYjNDM7CiAJeDg2X2FyY2hfY2FwX21zciA9IHg4Nl9yZWFkX2FyY2hfY2FwX21zcigpOwogCiAJY3B1X3ByaW50X2F0dGFja192ZWN0b3JzKCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwppbmRleCBjNzM1MjgyN2Y0OTFkLi5jNTY4ZDc0MjgyYTg0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKQEAgLTE0OTYsMTMgJiM0MzsxNDk2LDkgQEAgc3RhdGljIHZvaWQgX19pbml0IGNwdV9zZXRfYnVnX2JpdHMoc3RydWN0IGNwdWluZm9feDg2ICpjKQogCS8qCiAJICogQU1EJiMzOTtzIEF1dG9JQlJTIGlzIGVxdWl2YWxlbnQgdG8gSW50ZWwmIzM5O3MgZUlCUlMgLSB1c2UgdGhlIEludGVsIGZlYXR1cmUKIAkgKiBmbGFnIGFuZCBwcm90ZWN0IGZyb20gdmVuZG9yLXNwZWNpZmljIGJ1Z3MgdmlhIHRoZSB3aGl0ZWxpc3QuCi0JICoKLQkgKiBEb24mIzM5O3QgdXNlIEF1dG9JQlJTIHdoZW4gU05QIGlzIGVuYWJsZWQgYmVjYXVzZSBpdCBkZWdyYWRlcyBob3N0Ci0JICogdXNlcnNwYWNlIGluZGlyZWN0IGJyYW5jaCBwZXJmb3JtYW5jZS4KIAkgKi8KIAlpZiAoKHg4Nl9hcmNoX2NhcF9tc3IgJmFtcDsgQVJDSF9DQVBfSUJSU19BTEwpIHx8Ci0JICAgIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0FVVE9JQlJTKSAmYW1wOyZhbXA7Ci0JICAgICAhY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TRVZfU05QKSkpIHsKJiM0MzsJICAgIGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfQVVUT0lCUlMpKSB7CiAJCXNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfSUJSU19FTkhBTkNFRCk7CiAJCWlmICghY3B1X21hdGNoZXMoY3B1X3Z1bG5fd2hpdGVsaXN0LCBOT19FSUJSU19QQlJTQikgJmFtcDsmYW1wOwogCQkgICAgISh4ODZfYXJjaF9jYXBfbXNyICZhbXA7IEFSQ0hfQ0FQX1BCUlNCX05PKSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCmluZGV4IDU3MDU3MjNmMWY0MTIuLjUzY2M2ZDA0Mzg4MzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwpAQCAtNTA2LDcgJiM0Mzs1MDYsNyBAQCBzdGF0aWMgaW50IF9fc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFzbnBfYWN0aXZlKQotCQl2YWxpZF92bXNhX2ZlYXR1cmVzICZhbXA7PSB+U1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0M7CiYjNDM7CQl2YWxpZF92bXNhX2ZlYXR1cmVzICZhbXA7PSB+U1ZNX1NFVl9GRUFUX1NOUF9PTkxZX01BU0s7CiAKIAlpZiAoZGF0YS0mZ3Q7dm1zYV9mZWF0dXJlcyAmYW1wOyB+dmFsaWRfdm1zYV9mZWF0dXJlcykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMjU3LDggJiM0MzszMjU3LDIzIEBAIHZvaWQgX19pbml0IHNldl9oYXJkd2FyZV9zZXR1cCh2b2lkKQogCSAgICBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX05PX05FU1RFRF9EQVRBX0JQKSkKIAkJc2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9ERUJVR19TV0FQOwogCi0JaWYgKHNldl9zbnBfZW5hYmxlZCAmYW1wOyZhbXA7IHRzY19raHogJmFtcDsmYW1wOyBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NOUF9TRUNVUkVfVFNDKSkKLQkJc2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDOwomIzQzOwlpZiAoc2V2X3NucF9lbmFibGVkKSB7CiYjNDM7CQlzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgfD0gU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkU7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogVW5saWtlIFNlY3VyZSBUU0MgYW5kIElCUEItb24tRW50cnkgYmVsb3csIEJUQiBJc29sYXRpb24gaGFzCiYjNDM7CQkgKiBubyBob3N0IGVudW1lcmF0aW9uIGJpdCB0byBnYXRlIG9uOiB0aGUgQVBNIGRlZmluZXMgaXQgYXMKJiM0MzsJCSAqIGFyY2hpdGVjdHVyYWxseSBwcmVzZW50IG9uIGV2ZXJ5IFNFVi1TTlAtY2FwYWJsZSBwcm9jZXNzb3IuCiYjNDM7CQkgKiBJZiBTTlAgaXMgc3VwcG9ydGVkLCBCVEIgSXNvbGF0aW9uIGlzIGF2YWlsYWJsZS4KJiM0MzsJCSAqLwomIzQzOwkJc2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9CVEJfSVNPTEFUSU9OOwomIzQzOwomIzQzOwkJaWYgKHRzY19raHogJmFtcDsmYW1wOyBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NOUF9TRUNVUkVfVFNDKSkKJiM0MzsJCQlzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgfD0gU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0M7CiYjNDM7CiYjNDM7CQlpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TTlBfSUJQQl9PTl9FTlRSWSkpCiYjNDM7CQkJc2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9JQlBCX09OX0VOVFJZOwomIzQzOwl9CiB9CiAKIHZvaWQgc2V2X2hhcmR3YXJlX3Vuc2V0dXAodm9pZCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmggYi90b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oCmluZGV4IDY1NDdjMGFlZTQ1YjcuLjYzNGNkMDkzNjZkYTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaApAQCAtNDYwLDYgJiM0Mzs0NjAsNyBAQAogI2RlZmluZSBYODZfRkVBVFVSRV9BTExPV0VEX1NFVl9GRUFUVVJFUyAoMTkqMzImIzQzOzI3KSAvKiBBbGxvd2VkIFNFViBGZWF0dXJlcyAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9TVlNNCQkoMTkqMzImIzQzOzI4KSAvKiAmIzM0O3N2c20mIzM0OyBTVlNNIHByZXNlbnQgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfSFZfSU5VU0VfV1JfQUxMT1dFRAkoMTkqMzImIzQzOzMwKSAvKiBBbGxvdyBXcml0ZSB0byBpbi11c2UgaHlwZXJ2aXNvci1vd25lZCBwYWdlcyAqLwomIzQzOyNkZWZpbmUgWDg2X0ZFQVRVUkVfU05QX0lCUEJfT05fRU5UUlkJKDE5KjMyJiM0MzszMSkgLyogU0VWLVNOUCBJQlBCIG9uIFZNIEVudHJ5ICovCiAKIC8qIEFNRC1kZWZpbmVkIEV4dGVuZGVkIEZlYXR1cmUgMiBFQVgsIENQVUlEIGxldmVsIDB4ODAwMDAwMjEgKEVBWCksIHdvcmQgMjAgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfTk9fTkVTVEVEX0RBVEFfQlAJKDIwKjMyJiM0MzsgMCkgLyogTm8gTmVzdGVkIERhdGEgQnJlYWtwb2ludHMgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jCmluZGV4IDg3YmZmNGZiYjdlZDUuLjNmNTkyZTI0NWE2NmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYwpAQCAtMTMsMTcgJiM0MzsxMywyNSBAQAogI2luY2x1ZGUgJiMzNDtzdm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwogCi0jZGVmaW5lIFNWTV9TRVZfRkVBVF9ERUJVR19TV0FQIDMydQomIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkUJCUJJVF9VTEwoMCkKJiM0MzsjZGVmaW5lIFNWTV9TRVZfRkVBVF9ERUJVR19TV0FQCQlCSVRfVUxMKDUpCiYjNDM7I2RlZmluZSBTVk1fU0VWX0ZFQVRfQlRCX0lTT0xBVElPTglCSVRfVUxMKDcpCiYjNDM7I2RlZmluZSBTVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQwkJQklUX1VMTCg5KQomIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX0lCUEJfT05fRU5UUlkJQklUX1VMTCgyMSkKJiM0MzsKJiM0MzsvKiBGZWF0dXJlcyB2YWxpZCBvbmx5IGZvciBTTlAgZ3Vlc3RzLCByZWplY3RlZCBmb3IgU0VWLUVTIGFuZCBiZWxvdy4gKi8KJiM0MzsjZGVmaW5lIFNOUF9PTkxZX0ZFQVRVUkVTCQkoU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkUgfCBcCiYjNDM7CQkJCQkgU1ZNX1NFVl9GRUFUX0JUQl9JU09MQVRJT04gfCBcCiYjNDM7CQkJCQkgU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0MgfCBcCiYjNDM7CQkJCQkgU1ZNX1NFVl9GRUFUX0lCUEJfT05fRU5UUlkpCiAKIC8qCiAgKiBTb21lIGZlYXR1cmVzIG1heSBoYXZlIGhpZGRlbiBkZXBlbmRlbmNpZXMsIG9yIG1heSBvbmx5IHdvcmsKICAqIGZvciBjZXJ0YWluIFZNIHR5cGVzLiAgRXJyIG9uIHRoZSBzaWRlIG9mIHNhZmV0eSBhbmQgZG9uJiMzOTt0CiAgKiBleHBlY3QgdGhhdCBhbGwgc3VwcG9ydGVkIGZlYXR1cmVzIGNhbiBiZSBwYXNzZWQgb25lIGJ5IG9uZQogICogdG8gS1ZNX1NFVl9JTklUMi4KLSAqCi0gKiAoV2VsbCwgcmlnaHQgbm93IHRoZXJlJiMzOTtzIG9ubHkgb25lLi4uKQogICovCi0jZGVmaW5lIEtOT1dOX0ZFQVRVUkVTIFNWTV9TRVZfRkVBVF9ERUJVR19TV0FQCiYjNDM7I2RlZmluZSBLTk9XTl9GRUFUVVJFUwkJKFNWTV9TRVZfRkVBVF9ERUJVR19TV0FQIHwgU05QX09OTFlfRkVBVFVSRVMpCiAKIGludCBrdm1fZmQ7CiB1NjQgc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXM7CkBAIC0xMDgsNyAmIzQzOzExNiw3IEBAIHZvaWQgdGVzdF9mZWF0dXJlcyh1MzIgdm1fdHlwZSwgdTY0IHN1cHBvcnRlZF9mZWF0dXJlcykKIAkJaWYgKCEoc3VwcG9ydGVkX2ZlYXR1cmVzICZhbXA7IEJJVF9VTEwoaSkpKQogCQkJdGVzdF9pbml0Ml9pbnZhbGlkKHZtX3R5cGUsCiAJCQkJJmFtcDsoc3RydWN0IGt2bV9zZXZfaW5pdCl7IC52bXNhX2ZlYXR1cmVzID0gQklUX1VMTChpKSB9LAotCQkJCSYjMzQ7dW5rbm93biBmZWF0dXJlJiMzNDspOwomIzQzOwkJCQkmIzM0O3Vua25vd24gb3IgdW5zdXBwb3J0ZWQgZmVhdHVyZSBmb3IgVk0gdHlwZSYjMzQ7KTsKIAkJZWxzZSBpZiAoS05PV05fRkVBVFVSRVMgJmFtcDsgQklUX1VMTChpKSkKIAkJCXRlc3RfaW5pdDIodm1fdHlwZSwKIAkJCQkmYW1wOyhzdHJ1Y3Qga3ZtX3Nldl9pbml0KXsgLnZtc2FfZmVhdHVyZXMgPSBCSVRfVUxMKGkpIH0pOwpAQCAtMTU3LDcgJiM0MzsxNjUsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCiAJdGVzdF9mZWF0dXJlcyhLVk1fWDg2X1NFVl9WTSwgMCk7CiAJaWYgKGhhdmVfc2V2X2VzKQotCQl0ZXN0X2ZlYXR1cmVzKEtWTV9YODZfU0VWX0VTX1ZNLCBzdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyk7CiYjNDM7CQl0ZXN0X2ZlYXR1cmVzKEtWTV9YODZfU0VWX0VTX1ZNLCBzdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyAmYW1wOyB+U05QX09OTFlfRkVBVFVSRVMpOwogCWlmIChoYXZlX3NucCkKIAkJdGVzdF9mZWF0dXJlcyhLVk1fWDg2X1NOUF9WTSwgc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNzYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA4MzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFNFVi1TTlAgRmVhdHVyZSBWYWxpZGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBuZWNlc3NpdGF0ZSBmdXp6aW5nLiBNeSBpbml0aWFsIHNjYW4gcG9pbnRzIHRvIG1vZGlmaWNhdGlvbnMgYWNyb3NzIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIG1pdGlnYXRpb24gc3RyYXRlZ2llcyBmb3IgQ1BVIHZ1bG5lcmFiaWxpdGllcyBhbmQgZW5oYW5jZW1lbnRzIHRvIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgZmVhdHVyZXMsIHBhcnRpY3VsYXJseSBTRVYtU05QLgoKVGhlIGNoYW5nZXMgaW4gYGFyY2gveDg2L0tjb25maWdgLCBgYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaGAsIGFuZCBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhgIGludHJvZHVjZSBhbmQgbW9kaWZ5IGZlYXR1cmUgZmxhZ3MgYW5kIGRlZmluaXRpb25zLiBgYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmNgIGFuZCBgYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uY2Agc2hvdyB1cGRhdGVzIHRvIGV4aXN0aW5nIG1pdGlnYXRpb24gbG9naWMgcmVsYXRlZCB0byB0aGluZ3MgbGlrZSByZXRibGVlZCBhbmQgU3BlY3RyZSB2MiwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGV4cG9zdXJlLiBUaGUgdXBkYXRlcyBpbiBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gU0VWLVNOUCBzdXBwb3J0IHdpdGhpbiBLVk0sIHdoaWNoIGNhdGNoZXMgbXkgYXR0ZW50aW9uLiBUaGUgdXBkYXRlcyB0byB0aGUgdG9vbHMgYW5kIHNlbGZ0ZXN0cyBhcmUgYWxzbyBub3QgZGlyZWN0bHkgcmVsZXZhbnQuCgpGaXJzdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWFjaGFiaWxpdHkgb2YgdGhlc2UgY2hhbmdlcy4gVGhlIGJvb3QtdGltZSBsb2dpYyBpbiBgYnVncy5jYCBhbmQgYGNvbW1vbi5jYCBpcyBjZXJ0YWlubHkgdG91Y2hlZCBkdXJpbmcga2VybmVsIGluaXRpYWxpemF0aW9uLCB3aGljaCBjYW4gY2VydGFpbmx5IGluZmx1ZW5jZSBleGVjdXRpb24gcGF0aHMsIGJ1dCBpc24mIzM5O3QgYXMgcmVhZGlseSBhY2Nlc3NpYmxlIGFzIGEgdXNlcnNwYWNlIGludGVyZmFjZS4gSG93ZXZlciwgdGhlIFNFVi1yZWxhdGVkIGNoYW5nZXMgaW4gYHNldi5jYCBhcmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBTcGVjaWZpY2FsbHksIGBfX3Nldl9ndWVzdF9pbml0YCBhbmQgYHNldl9oYXJkd2FyZV9zZXR1cGAgYXJlIGNyaXRpY2FsIGZvciB0aGUgc2V0dXAgb2YgdGhlIEtWTSBTRVYgZ3Vlc3QgZW52aXJvbm1lbnQuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgS1ZNLCB0aGVyZWZvcmUsIGlmIHJlYWNoYWJsZSwgaXQgaXMgZnV6emVhYmxlLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogYXJlIHRoZXNlIGNoYW5nZXMgd29ydGggZnV6emluZz8gVGhlIENQVSBidWcgbWl0aWdhdGlvbiBjaGFuZ2VzIGF0IGJvb3QgYXJlIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIGFzIHRoZXkgbWlnaHQgaW5mbHVlbmNlIHRoZSBtaXRpZ2F0aW9uIGJlaGF2aW9yLCBidXQgbXkgbWFpbiBmb2N1cyBpcyBvbiB0aGUgU0VWIGNoYW5nZXMsIHdoaWNoIGludm9sdmUgZGlyZWN0IGludGVyYWN0aW9uIHdpdGggYSBoeXBlcnZpc29yLiBTcGVjaWZpY2FsbHksIHRoZSBgX19zZXZfZ3Vlc3RfaW5pdGAgZnVuY3Rpb24sIHdoaWNoIGFwcGVhcnMgdG8gdmFsaWRhdGUgYHZtc2FfZmVhdHVyZXNgLCBsb29rcyBwcm9taXNpbmcuIFRoaXMgdmFsaWRhdGlvbiBwcm9jZXNzLCBpZiBmbGF3ZWQsIGNvdWxkIGxlYWQgdG8gc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLgoKTGV0JiMzOTtzIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZS4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhpcyBiaXQgb2YgYF9fc2V2X2d1ZXN0X2luaXRgOgoKYGBgYwpzdGF0aWMgaW50IF9fc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsCi4uLgoJaWYgKCFzbnBfYWN0aXZlKQoJCXZhbGlkX3Ztc2FfZmVhdHVyZXMgJmFtcDs9IH5TVk1fU0VWX0ZFQVRfU05QX09OTFlfTUFTSzsKCglpZiAoZGF0YS0mZ3Q7dm1zYV9mZWF0dXJlcyAmYW1wOyB+dmFsaWRfdm1zYV9mZWF0dXJlcykKCQlyZXR1cm4gLUVJTlZBTDsKYGBgCgpUaGlzIHZhbGlkYXRpb24gc2VlbXMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggS1ZNIGlvY3RscyEgVGhpcyBwYXJ0IHZhbGlkYXRlcyB0aGUgYHZtc2FfZmVhdHVyZXNgIGZpZWxkLiBUaGUgaW9jdGwgaXMgbGlrZWx5IGBLVk1fTUVNT1JZX0VOQ1JZUFRfT1BgIHdpdGggYEtWTV9TRVZfSU5JVDJgLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIHF1aWNrbHkuIEkgbmVlZCB0byBnZXQgcmVhZHkgdG8gY3JhZnQgc29tZSBmdXp6aW5nIGlucHV0cy4gVGhpcyBpcyBkZWZpbml0ZWx5IGZ1enphYmxlIQoKT2theSwgdGltZSB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBmdW5jdGlvbnMgYW5kIGFyZ3VtZW50cyB0byB0YXJnZXQgd2l0aCB0aGUgZnV6emVyLgpgX19zZXZfZ3Vlc3RfaW5pdGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIGxldCYjMzk7cyBzZWUgd2hlcmUgaXQmIzM5O3MgYmVpbmcgY2FsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc2V2X2d1ZXN0X2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDc3PXN0YXRpYyB2b2lkIHNucF9ndWVzdF9yZXFfY2xlYW51cChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTAtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ5MTpzdGF0aWMgaW50IF9fc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5Mi1cdFx0XHQgICAgc3RydWN0IGt2bV9zZXZfaW5pdCAqZGF0YSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTU4MT1zdGF0aWMgaW50IHNldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjAwLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MDE6XHRyZXR1cm4gX19zZXZfZ3Vlc3RfaW5pdChrdm0sIGFyZ3AsIFx1MDAyNmRhdGEsIHZtX3R5cGUpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MDItfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NjA0PXN0YXRpYyBpbnQgc2V2X2d1ZXN0X2luaXQyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjE4LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MTk6XHRyZXR1cm4gX19zZXZfZ3Vlc3RfaW5pdChrdm0sIGFyZ3AsIFx1MDAyNmRhdGEsIGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MjAtfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzM0OD12b2lkIHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMzNTQtXHQgKlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMzU1Olx0ICogQ2hlY2tpbmcgZm9yIFNFViYjNDM7IG91dHNpZGUgb2Yga3ZtLVx1MDAzZWxvY2sgaXMgc2FmZSBhcyBfX3Nldl9ndWVzdF9pbml0KClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzM1Ni1cdCAqIGNhbiBvbmx5IGJlIGRvbmUgYmVmb3JlIHZDUFVzIGFyZSBjcmVhdGVkLCBjYWNoZXMgY2FuIGJlIGluY29oZXJlbnRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDM3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgdGhlIFNFViBHdWVzdCBJbml0aWFsaXphdGlvbiBGbG93KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgc2V2X2d1ZXN0X2luaXRgIGFuZCBgc2V2X2d1ZXN0X2luaXQyYC4gSSBrbm93IHRoZXkgYm90aCB1bHRpbWF0ZWx5IGZ1bm5lbCBpbnRvIGBfX3Nldl9ndWVzdF9pbml0YC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCBvZiBjb3Vyc2UsIGlzIHdoYXQmIzM5O3MgdHJpZ2dlcmluZyB0aGVzZSBgc2V2X2d1ZXN0X2luaXRgIGZ1bmN0aW9ucyBpbiB0aGUgZmlyc3QgcGxhY2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIOKAkyB3aG8mIzM5O3MgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgdGhvc2UgZW50cnkgcG9pbnRzLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aG9zZSBmdW5jdGlvbnMgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBhbmQgZGV0ZXJtaW5lIHRoZSBvdmVyYWxsIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBwaWN0dXJlIGhlcmUuIExldCYjMzk7cyBzZWUgd2hvJiMzOTtzIGFjdHVhbGx5IG1ha2luZyB0aGVzZSBjYWxscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXZfZ3Vlc3RfaW5pdDImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9NTgxPXN0YXRpYyBpbnQgc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MDMtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjYwNDpzdGF0aWMgaW50IHNldl9ndWVzdF9pbml0MihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjA1LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI2NDg9aW50IHNldl9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjg0LVx0Y2FzZSBLVk1fU0VWX0lOSVQyOlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNjg1Olx0XHRyID0gc2V2X2d1ZXN0X2luaXQyKGt2bSwgXHUwMDI2c2V2X2NtZCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2ODYtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NzMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYHNldl9tZW1fZW5jX2lvY3RsYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHNldl9tZW1fZW5jX2lvY3RsYC4gIE15IGZpcnN0IHF1ZXN0aW9uIGlzIGFsd2F5czogaXMgdGhpcyB0aGUgZW50cnkgcG9pbnQ/ICBTZWVtcyBsaWtlIGl0LiBOb3csIHRoZSBiaWdnZXIgcXVlc3Rpb24gaXMsIGlzIHRoaXMgZnVuY3Rpb24gZGVjbGFyZWQgc3RhdGljYWxseSBvciBub3Q/IEtub3dpbmcgdGhhdCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyB2aXNpYmlsaXR5IGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3MgZGlnIGluIGFuZCB2ZXJpZnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V2X21lbV9lbmNfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjYzOD1zdGF0aWMgaW50IHNucF9lbmFibGVfY2VydHMoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY0Ny1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjY0ODppbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY0OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyODAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYHNldl9tZW1fZW5jX2lvY3RsYCBhbmQgYHNldl9oYXJkd2FyZV9zZXR1cGAqKgoKT2theSwgc28gdGhlIGBzZXZfbWVtX2VuY19pb2N0bGAgZnVuY3Rpb24gKmlzbiYjMzk7dCogZGVjbGFyZWQgYXMgc3RhdGljLiBHb29kLiBUaGF0IGNsYXJpZmllcyB0aGF0IHBvaW50IGltbWVkaWF0ZWx5LiBOb3csIG15IG5leHQgc3RlcCBpcyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHNldl9oYXJkd2FyZV9zZXR1cGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHByb2dyZXNzaW9uIGhlcmUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGF0IHNldHVwIHJvdXRpbmUuIEkgaGF2ZSBhIGh1bmNoIGl0JiMzOTtzIHJlbGF0ZWQsIG9mIGNvdXJzZSwgYnV0IGl0JiMzOTtzIHRpbWUgdG8gY29uZmlybSBhbmQgZmlndXJlIG91dCB0aGUgZXhhY3QgcmVsYXRpb25zaGlwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXZfaGFyZHdhcmVfc2V0dXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzA4MT1zdGF0aWMgY29uc3QgY2hhciAqIF9faW5pdCBzZXZfc3RyX2ZlYXR1cmVfc3RhdGUoYm9vbCBpc19zdXBwb3J0ZWQsIGJvb2wgaXNfdXNhYmxlKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzA4NS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzA4Njp2b2lkIF9faW5pdCBzZXZfaGFyZHdhcmVfc2V0dXAodm9pZClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzA4Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjIyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IEluaXRpYWwgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcyBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIG1vc3QgZnJ1aXRmdWwgZnV6emluZyB0YXJnZXRzIGFyZS4gYHNldl9oYXJkd2FyZV9zZXR1cGAgaXMgY2xlYXJseSBvdXQuIEl0JiMzOTtzIGFuIGluaXQgZnVuY3Rpb24sIHJ1bnMgYXQgYm9vdCwgbm90IGlkZWFsIGZvciBkeW5hbWljIGZ1enppbmcuIFRoZSBrZXkgc2VlbXMgdG8gYmUgYXJvdW5kIGBfX3Nldl9ndWVzdF9pbml0YCwgYXMgaXQmIzM5O3MgY2FsbGVkIHRocm91Z2ggYHNldl9ndWVzdF9pbml0MmAgYW5kIGBzZXZfZ3Vlc3RfaW5pdGAsIGFuZCB0aG9zZSBhcmUgcmVhY2hlZCB2aWEgYHNldl9tZW1fZW5jX2lvY3RsYC4gVGhhdCYjMzk7cyB0aGUgbW9zdCBwcm9taXNpbmcgbGVhZCBzbyBmYXIuCgpOb3csIGxldCYjMzk7cyBwZWVrIGludG8gdGhvc2UgYGFyY2gveDg2L2tlcm5lbC9jcHUvYnVncy5jYCBjaGFuZ2VzLiBBbHJpZ2h0LCBgcmV0YmxlZWRfdXBkYXRlX21pdGlnYXRpb25gLCBgc3BlY3RyZV92Ml9zZWxlY3RfbWl0aWdhdGlvbmAsIGFuZCB0aGUgbWl0aWdhdGlvbiBhcHBsaWNhdGlvbiBmdW5jdGlvbnMg4oCTIHRoZXkmIzM5O3JlIGFsbCBgX19pbml0YC4gVGhhdCYjMzk7cyBhIGRlYWQgZW5kOyBpbml0IGZ1bmN0aW9ucyBhcmVuJiMzOTt0IGVhc2lseSBmdXp6ZWQgZnJvbSB1c2Vyc3BhY2UuIEkmIzM5O2xsIGlnbm9yZSB0aGVtLgoKU28sIHRoZSBmb2N1cyBpcyByZWFsbHkgdGhlIEtWTSBTRVYgc3R1ZmYuIEdvb2QuIFRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgYWNjZXNzaWJpbGl0eS4gQ2FuIEkgaGl0IEtWTSBTRVYgaW4gUUVNVT8gSSB0aGluayBzbyDigJMgUUVNVSBjYW4gZW11bGF0ZSBTRVYsIG9yIGF0IGxlYXN0IHRoZSBLVk0gaW9jdGxzIGFyZSByZWFjaGFibGUuIFRoZSBTRVYgaGFyZHdhcmUgcmVxdWlyZW1lbnQgaXMgYSBjb21wbGljYXRpb24sIG9idmlvdXNseSwgbmVlZGluZyBhbiBBTUQgQ1BVIHdpdGggU0VWIHN1cHBvcnQuIEJ1dCwgYW5kIHRoaXMgaXMgdGhlIGltcG9ydGFudCBwYXJ0LCBTeXprYWxsZXIgKnNob3VsZCogYmUgYWJsZSB0byBmdXp6IHRoZSBLVk0gaW9jdGxzIGV2ZW4gd2l0aG91dCBmdWxsIGhhcmR3YXJlIHN1cHBvcnQuIEl0IGRvZXNuJiMzOTt0IGNhcmUgaWYgaXQgaXMgb24gQU1EIGhhcmR3YXJlIG9yIG5vdC4KCldhaXQgYSBzZWNvbmQsIHRob3VnaC4gSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgdGhlIHJlYWNoYWJpbGl0eSBvZiBgc2V2X21lbV9lbmNfaW9jdGxgLiBEb2VzIGl0ICpyZXF1aXJlKiBTRVYgaGFyZHdhcmUgdG8gYmUgYWNjZXNzaWJsZT8gSSBuZWVkIHRvIGNoZWNrIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgZWZmb3J0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V2X21lbV9lbmNfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI2Mzg9c3RhdGljIGludCBzbnBfZW5hYmxlX2NlcnRzKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2NDctXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI2NDg6aW50IHNldl9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2NDkte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTMyOD1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0NDUtXHQuZGV2X2dldF9hdHRyID0gc2V2X2Rldl9nZXRfYXR0cixcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTQ0NjpcdC5tZW1fZW5jX2lvY3RsID0gc2V2X21lbV9lbmNfaW9jdGwsXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0NDctXHQubWVtX2VuY19yZWdpc3Rlcl9yZWdpb24gPSBzZXZfbWVtX2VuY19yZWdpc3Rlcl9yZWdpb24sXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD05ODM9Ym9vbCBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5ODQ6aW50IHNldl9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05ODUtaW50IHNldl9tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzkxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggS1ZNIGFuZCBTRVY6CgoqKk15IEluaXRpYWwgVGhvdWdodHMgb24gYHNldl9tZW1fZW5jX2lvY3RsYCoqCgpBbHJpZ2h0LCBzbyBgc2V2X21lbV9lbmNfaW9jdGxgIGlzIHRoZSByb3V0aW5lIHRoYXQgaGFuZGxlcyBgS1ZNX01FTU9SWV9FTkNSWVBUX09QYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgdGhlIGludGVyZmFjZSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBtZW1vcnkgZW5jcnlwdGlvbiBjYXBhYmlsaXRpZXMgd2l0aGluIEtWTS4gTXkgZmlyc3QgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBob3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGhhbmRsZSBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSAqZG9lc24mIzM5O3QqIGFjdHVhbGx5IHN1cHBvcnQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKT8gRG9lcyBpdCBoYXZlIGEgcXVpY2ssIGVhcmx5IGNoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIHJlcXVpcmVkIENQVSBmZWF0dXJlcyBvciBwbGF0Zm9ybSBzdXBwb3J0LCBvciBkb2VzIGl0IHRyeSB0byBnbyB0aHJvdWdoIHRoZSBtb3Rpb25zIGFuZCBmYWlsIGxhdGVyIGluIHRoZSBwcm9jZXNzPyBJJiMzOTttIGhvcGluZyBpdCYjMzk7cyB0aGUgZm9ybWVyLCBmb3IgcGVyZm9ybWFuY2UgYW5kIGVycm9yIGhhbmRsaW5nLiBJdCB3b3VsZCBiZSBhIHNpZ25pZmljYW50IGlzc3VlIGlmIGl0IGF0dGVtcHRlZCBzb21lIFNFViBvcGVyYXRpb24gYW5kIHRoZW4gZXJyb3JlZCBvdXQgYXQgYSBkZWVwZXIgbGV2ZWwuIEEgY2xlYXIsIHVwLWZyb250IGNoZWNrIHdvdWxkIGJlIG11Y2ggY2xlYW5lci4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBkZXRlcm1pbmUgdGhpcyBhcyB0aGUgaW5pdGlhbCBmb2N1cyBvZiB0aGUgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V2X21lbV9lbmNfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjYzOD1zdGF0aWMgaW50IHNucF9lbmFibGVfY2VydHMoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY0Ny1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjY0ODppbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY0OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjM3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyBgc2V2X21lbV9lbmNfaW9jdGxgKioKCkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiBgc2V2X21lbV9lbmNfaW9jdGxgLiBKdXN0IHRoZSBuYW1lIGl0c2VsZiBpcyBhIGRlY2VudCBoaW50OyBpdCBzY3JlYW1zICYjMzQ7bWVtb3J5IGVuY3J5cHRpb24mIzM0OyBhbmQgJiMzNDtpb2N0bCYjMzQ7LiBGcm9tIGEgaGlnaC1sZXZlbCBwZXJzcGVjdGl2ZSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyDigJMgdGhlIGludGVyZmFjZSB0aHJvdWdoIHdoaWNoIHVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGUgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBtZW1vcnkgZW5jcnlwdGlvbiBmZWF0dXJlcy4gSSYjMzk7bSBrZWVuIHRvIHNlZSB0aGUgc3BlY2lmaWMgaW9jdGwgbnVtYmVycywgd2hhdCBraW5kIG9mIGNvbW1hbmRzIGFyZSBzdXBwb3J0ZWQsIGFuZCBob3cgdGhlIGludGVyYWN0aW9uIGlzIHN0cnVjdHVyZWQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGtleSBtYW5hZ2VtZW50LCBtZW1vcnkgcmVnaW9uIHNldHVwLCBhdHRlc3RhdGlvbiByZXF1ZXN0cywgYW5kIHBvdGVudGlhbGx5IGV2ZW4gZGVidWcvc3RhdHVzIGluZm9ybWF0aW9uLiBNeSBiYWNrZ3JvdW5kIHRlbGxzIG1lIHRoYXQgSSYjMzk7bSBleHBlY3RpbmcgaXQgdG8gYmUgY29tcGxleDsgdGhhdCYjMzk7cyBqdXN0IHRoZSBuYXR1cmUgb2Ygc2VjdXJpdHkgYXJjaGl0ZWN0dXJlcy4gQnV0LCBhbHNvIGl0IHdpbGwgcHJvdmlkZSBhIGNydWNpYWwgcGllY2UgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBzeXN0ZW0gYWN0dWFsbHkgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBjb2RlIGNvbmZpcm1zIG15IGluaXRpYWwgYXNzdW1wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2NDgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjY0ODpcdGludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxuMjY0OTpcdHtcbjI2NTA6XHRcdHN0cnVjdCBrdm1fc2V2X2NtZCBzZXZfY21kO1xuMjY1MTpcdFx0aW50IHI7XG4yNjUyOlx0XG4yNjUzOlx0XHRpZiAoIXNldl9lbmFibGVkKVxuMjY1NDpcdFx0XHRyZXR1cm4gLUVOT1RUWTtcbjI2NTU6XHRcbjI2NTY6XHRcdGlmICghYXJncClcbjI2NTc6XHRcdFx0cmV0dXJuIDA7XG4yNjU4Olx0XG4yNjU5Olx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2c2V2X2NtZCwgYXJncCwgc2l6ZW9mKHN0cnVjdCBrdm1fc2V2X2NtZCkpKVxuMjY2MDpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjI2NjE6XHRcbjI2NjI6XHRcdGd1YXJkKG11dGV4KShcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4yNjYzOlx0XG4yNjY0Olx0XHQvKiBPbmx5IHRoZSBlbmNfY29udGV4dF9vd25lciBoYW5kbGVzIHNvbWUgbWVtb3J5IGVuYyBvcGVyYXRpb25zLiAqL1xuMjY2NTpcdFx0aWYgKGlzX21pcnJvcmluZ19lbmNfY29udGV4dChrdm0pIFx1MDAyNlx1MDAyNlxuMjY2NjpcdFx0ICAgICFpc19jbWRfYWxsb3dlZF9mcm9tX21pcnJvcihzZXZfY21kLmlkKSlcbjI2Njc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yNjY4Olx0XG4yNjY5Olx0XHQvKlxuMjY3MDpcdFx0ICogT25jZSBLVk1fU0VWX0lOSVQyIGluaXRpYWxpemVzIGEgS1ZNIGluc3RhbmNlIGFzIGFuIFNOUCBndWVzdCwgb25seVxuMjY3MTpcdFx0ICogYWxsb3cgdGhlIHVzZSBvZiBTTlAtc3BlY2lmaWMgY29tbWFuZHMuXG4yNjcyOlx0XHQgKi9cbjI2NzM6XHRcdGlmIChzZXZfc25wX2d1ZXN0KGt2bSkgXHUwMDI2XHUwMDI2IHNldl9jbWQuaWQgXHUwMDNjIEtWTV9TRVZfU05QX0xBVU5DSF9TVEFSVClcbjI2NzQ6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjI2NzU6XHRcbjI2NzY6XHRcdHN3aXRjaCAoc2V2X2NtZC5pZCkge1xuMjY3NzpcdFx0Y2FzZSBLVk1fU0VWX0VTX0lOSVQ6XG4yNjc4Olx0XHRcdGlmICghc2V2X2VzX2VuYWJsZWQpXG4yNjc5Olx0XHRcdFx0cmV0dXJuIC1FTk9UVFk7XG4yNjgwOlx0XHRcdGZhbGx0aHJvdWdoO1xuMjY4MTpcdFx0Y2FzZSBLVk1fU0VWX0lOSVQ6XG4yNjgyOlx0XHRcdHIgPSBzZXZfZ3Vlc3RfaW5pdChrdm0sIFx1MDAyNnNldl9jbWQpO1xuMjY4MzpcdFx0XHRicmVhaztcbjI2ODQ6XHRcdGNhc2UgS1ZNX1NFVl9JTklUMjpcbjI2ODU6XHRcdFx0ciA9IHNldl9ndWVzdF9pbml0Mihrdm0sIFx1MDAyNnNldl9jbWQpO1xuMjY4NjpcdFx0XHRicmVhaztcbjI2ODc6XHRcdGNhc2UgS1ZNX1NFVl9MQVVOQ0hfU1RBUlQ6XG4yNjg4Olx0XHRcdHIgPSBzZXZfbGF1bmNoX3N0YXJ0KGt2bSwgXHUwMDI2c2V2X2NtZCk7XG4yNjg5Olx0XHRcdGJyZWFrO1xuMjY5MDpcdFx0Y2FzZSBLVk1fU0VWX0xBVU5DSF9VUERBVEVfREFUQTpcbjI2OTE6XHRcdFx0ciA9IHNldl9sYXVuY2hfdXBkYXRlX2RhdGEoa3ZtLCBcdTAwMjZzZXZfY21kKTtcbjI2OTI6XHRcdFx0YnJlYWs7XG4yNjkzOlx0XHRjYXNlIEtWTV9TRVZfTEFVTkNIX1VQREFURV9WTVNBOlxuMjY5NDpcdFx0XHRyID0gc2V2X2xhdW5jaF91cGRhdGVfdm1zYShrdm0sIFx1MDAyNnNldl9jbWQpO1xuMjY5NTpcdFx0XHRicmVhaztcbjI2OTY6XHRcdGNhc2UgS1ZNX1NFVl9MQVVOQ0hfTUVBU1VSRTpcbjI2OTc6XHRcdFx0ciA9IHNldl9sYXVuY2hfbWVhc3VyZShrdm0sIFx1MDAyNnNldl9jbWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMxNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU0VWIFJlYWNoYWJpbGl0eSBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSBhIGNoZWNrIGZvciBgc2V2X2VuYWJsZWRgLiBUaGF0JiMzOTtzIHRoZSBnYXRla2VlcGVyLiBJdCYjMzk7cyB0aWVkIHRvIGhhcmR3YXJlIHN1cHBvcnQsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIGFib3V0IHdoZXRoZXIgdGhpcyBjb2RlIHBhdGggaXMgZXZlbiAqcG9zc2libGUqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVS4gU3l6a2FsbGVyJiMzOTtzIHVzZWQgb24gR0NFLCBhbmQgR0NFICpkb2VzKiBvZmZlciBBTUQgaW5zdGFuY2VzIHdpdGggU0VWIGNhcGFiaWxpdGllcyAoTjJELCBDMkQsIGV0Yy4pLiBUaGF0JiMzOTtzIHByb21pc2luZywgSSBzaG91bGQgbm90ZSB0aGF0LgoKQnV0IFN5emthbGxlciBydW5zIGluIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiDigJMgUUVNVSBvbiBHQ0UuIFNvLCBkb2VzIFFFTVUgc3VwcG9ydCBuZXN0ZWQgU0VWPyBZZXMsIGl0IGRvZXMuIFFFTVUgYW5kIEtWTSBoYW5kbGUgbmVzdGVkIFNFViwgdGhvdWdoIGl0JiMzOTtzIG5vdCBhbHdheXMgZW5hYmxlZCBieSBkZWZhdWx0LiBUaGF0IGFsaWducyB3aXRoIHRoZSBlYXJsaWVyIHRob3VnaHQgYWJvdXQgU0VWIHN1cHBvcnQuCgpUaGVuLCB0aGVyZSBpcyB0aGUgY29uZnVzaW5nIHN0YXRlbWVudC4gVGhlIHByb21wdCBzYXlzLCAmIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBUaGF0IHRocm93cyBtZSBmb3IgYSBsb29wIGluaXRpYWxseS4gU0VWICppcyogcmVhY2hhYmxlIGluIFFFTVUgaWYgdGhlIGhvc3QgaGFzIHRoZSBoYXJkd2FyZSBhbmQgcGFzc2VzIGl0IHRocm91Z2gsIG9yIGlmIGl0JiMzOTtzIGVtdWxhdGVkLCBidXQgdGhlICYjMzQ7ZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7IGlzIHRocm93aW5nIG1lIG9mZi4gU0VWIGlzbiYjMzk7dCAqZnVsbHkqIGVtdWxhdGVkIGluIHNvZnR3YXJlOyBpdCBmdW5kYW1lbnRhbGx5IG5lZWRzIGhhcmR3YXJlLiBTbywgaWYgdGhlIGNvZGUgZGVtYW5kcyBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlIGFuc3dlciBpcyBmYWxzZS4KCldhaXQsIHllcywgU0VWIG5lZWRzIEFNRCBFUFlDIHByb2Nlc3NvcnMuIFRoYXQmIzM5O3MgdGhlIGtleS4gQW5kIGlzIGl0IGVtdWxhdGVkIGluICpzdGFuZGFyZCogUUVNVT8gTm8sIGl0IHJlbGllcyBvbiBLVk0gYW5kIHRoZSBob3N0IENQVSBmb3IgU0VWLCB0aGF0JiMzOTtzIGltcG9ydGFudC4gQnV0IHN5emthbGxlciAqZG9lcyogZnV6eiBLVk0uIEtWTSBpcyBjb3JlIGtlcm5lbCBsb2dpYy4gU28sIGl0JiMzOTtzIHdvcnRoIHNlZWluZyBpZiBgc2V2X2d1ZXN0X2luaXQyYCBpcyByZWFjaGFibGUuCgpJZiBgc2V2X2VuYWJsZWRgIGlzIGZhbHNlLCB3ZSBnZXQgYC1FTk9UVFlgLiBCdXQgY2FuIGBzZXZfZW5hYmxlZGAgYWN0dWFsbHkgYmUgdHJ1ZSBpbiBRRU1VPyBZZXMsIGlmIHdlIHJ1biBRRU1VIHdpdGggS1ZNIG9uIGFuIEFNRCBob3N0IHdpdGggU0VWLiBTeXprYWxsZXIgaGFzIEtWTSBmdXp6aW5nIHRoYXQgcnVucyBvbiBBTUQgaG9zdHM7IEkganVzdCBoYXZlIHRvIGNvbmZpcm0gdGhlIEtWTSBob3N0IHN1cHBvcnRzIHRoZSByaWdodCBDUFUuIFRoZXJlZm9yZSwgeWVzLCB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlLgoKT2theSwgbGV04oCZcyBkaWcgaW50byB0aGUgY2hhbmdlcyBpbiBgX19zZXZfZ3Vlc3RfaW5pdGAuIFRoZXNlIGxpbmVzOgpgYGBjCglpZiAoIXNucF9hY3RpdmUpCgkJdmFsaWRfdm1zYV9mZWF0dXJlcyAmYW1wOz0gflNWTV9TRVZfRkVBVF9TTlBfT05MWV9NQVNLOwoKCWlmIChkYXRhLSZndDt2bXNhX2ZlYXR1cmVzICZhbXA7IH52YWxpZF92bXNhX2ZlYXR1cmVzKQoJCXJldHVybiAtRUlOVkFMOwpgYGAKVGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgaW4gaG93IGB2bXNhX2ZlYXR1cmVzYCBhcmUgdmFsaWRhdGVkIGR1cmluZyBgS1ZNX1NFVl9JTklUMmAuIERlZmluaXRlbHkgd29ydGggZnV6emluZyEKCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogd2hhdCBhcmUgdGhlIGZvY3VzIHN5bWJvbHM/IGBzZXZfbWVtX2VuY19pb2N0bGAgc2VlbXMgbGlrZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludC4gYHNldl9ndWVzdF9pbml0MmAgYW5kIGBzZXZfZ3Vlc3RfaW5pdGAgYXJlIHN0YXRpYyBidXQgc3RpbGwgcmVsZXZhbnQuIEJ1dCBgc2V2X2d1ZXN0X2luaXQyYCBtaWdodCBub3QgYmUgaW5saW5lZCBpZiBpdCYjMzk7cyBsYXJnZS4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYHNldl9ndWVzdF9pbml0MmAgaXMgYWN0dWFsbHkgc3RhdGljLiBPa2F5LCB5ZXMsIGl0IGlzLiBTbywgYHNldl9tZW1fZW5jX2lvY3RsYCBpdCBpcy4KCkZpbmFsbHksIHRoZSBjb25maWd1cmF0aW9uczogd2UgbmVlZCBgQ09ORklHX0tWTWAgYW5kIGBDT05GSUdfS1ZNX0FNRGAgZm9yIEtWTSBhbmQgU1ZNL1NFViBzdXBwb3J0LiBHb3R0YSBtYWtlIHN1cmUgdGhvc2UgYXJlIGVuYWJsZWQuIFRpbWUgdG8gY2hlY2sgYGFyY2gveDg2L2t2bS9LY29uZmlnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9BTUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMzQ9Y29uZmlnIEtWTV9JTlRFTF9URFhcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAzNQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLVk0gU0VWIFZ1bG5lcmFiaWxpdHkgU3VyZmFjZSoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGJvdGggYEtWTV9BTURgIGFuZCBgS1ZNX0FNRF9TRVZgIGFyZSBjcnVjaWFsIGhlcmUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGlnIGludG8gdGhlIHJlY2VudCBjaGFuZ2VzLCBzdGFydGluZyB3aXRoIGBhcmNoL3g4Ni9rZXJuZWwvY3B1L2J1Z3MuY2AuIEkgc2VlIHRoZSBTcGVjdHJlIHYyIG1pdGlnYXRpb24gbG9naWMgdGhlcmUsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBgQVVUT0lCUlNgIGFuZCBgSUJSU2AgbW9kZXMuIEl0JiMzOTtzIGJvb3QtdGltZSBzdHVmZi4gTm93LCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpc21pc3MgZnV6emluZyB0aGlzIGRpcmVjdGx5LCBzaW5jZSB0aGVzZSBtaXRpZ2F0aW9ucyBhcmUgc2V0IHVwIG9uY2UgZHVyaW5nIGJvb3QgYW5kLCBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgZG9uJiMzOTt0IGR5bmFtaWNhbGx5IHJlYWN0IHRvIHVzZXIgaW5wdXQgKGJhcnJpbmcgcGVyaGFwcyBrZXJuZWwgY29tbWFuZCBsaW5lIG9wdGlvbnMsIHdoaWNoIFN5emthbGxlciAqY291bGQqIHRyeSBidXQgZG9lc24mIzM5O3QgdXN1YWxseSB0YXJnZXQgZm9yIGVhY2ggdGVzdCBjYXNlKS4KCkhvd2V2ZXIsIHRoZSBLVk0gU0VWIGNoYW5nZXMuLi4gdGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaG9zZSBmdW5jdGlvbnMgKmFyZSogcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgdGhleSBjb25zdW1lIHVzZXJzcGFjZSBkYXRhIHZpYSB0aGluZ3MgbGlrZSBgZGF0YS0mZ3Q7dm1zYV9mZWF0dXJlc2AuIFRoaXMgaXMgYSBtdWNoIG1vcmUgcHJvbWlzaW5nIHRhcmdldCBmb3IgZnV6emluZy4KCkkgbmVlZCB0byBjb25maXJtIGlmIGBzZXZfbWVtX2VuY19pb2N0bGAgaXMgdGhlIGNvcnJlY3QgZm9jYWwgcG9pbnQuIFllcywgaXQmIzM5O3MgdGhlIGhhbmRsZXIgZm9yIGBLVk1fTUVNT1JZX0VOQ1JZUFRfT1BgLiBUaGF0IGlzIHRoZSByaWdodCBwbGFjZSB0byBmb2N1cyBteSBlZmZvcnRzLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgc2NhbiBmb3Igb3RoZXIgbW9kaWZpZWQgS1ZNIFNFViBmdW5jdGlvbnMuIGBzZXZfaGFyZHdhcmVfc2V0dXBgIGlzIGNsZWFybHkgYSBvbmUtdGltZSBgX19pbml0YCBmdW5jdGlvbiwgc28gaXQmIzM5O3MgcHJvYmFibHkgbm90IGEgZ29vZCB0YXJnZXQuIGBfX3Nldl9ndWVzdF9pbml0YCBpcyBzdGF0aWMgYW5kIGxpa2VseSBpbnRlcm5hbCB0byB0aGUgS1ZNIHNldHVwLCBzbyBpdCYjMzk7cyBub3QgYSBzdHJvbmcgY29udGVuZGVyIGVpdGhlci4KCkNoZWNraW5nIGluIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCBmb3IgYHNldl9tZW1fZW5jX2lvY3RsYC4gWXVwLCBpdCYjMzk7cyB0aGVyZS4gVGhpcyBoYW5kbGVzIGBLVk1fU0VWX0lOSVQyYC4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayBpZiBgS1ZNX0FNRF9TRVZgIGRlcGVuZHMgb24gYW55dGhpbmcgZWxzZSB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9BTURfU0VWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTQ2PWNvbmZpZyBLVk1fQU1EXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDQyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgZGVwZW5kZW5jaWVzIG9mIGBLVk1fQU1EX1NFVmAsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OgoKKipEZWx2aW5nIGludG8gS1ZNX0FNRF9TRVYgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyYWwgdW5kZXJwaW5uaW5ncyBvZiBgS1ZNX0FNRF9TRVZgLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nLCAmIzM0O1doZXJlIGRvZXMgdGhpcyBmaXQgaW4gdGhlIGxhcmdlciBLVk0gZWNvc3lzdGVtPyYjMzQ7IEkgbmVlZCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcy4gSSBhbHJlYWR5IGhhdmUgYSBwcmV0dHkgZ29vZCBtZW50YWwgbW9kZWwgb2YgS1ZNLCBoeXBlcnZpc29ycywgYW5kIHNlY3VyaXR5IGV4dGVuc2lvbnMgbGlrZSBTRVYsIGJ1dCB1bmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpYyByZWxhdGlvbnNoaXAgb2YgdGhpcyBtb2R1bGUgdG8gdGhlIHdob2xlIGlzIHBhcmFtb3VudCB0byBhIGRlZXAgY29tcHJlaGVuc2lvbi4gV2hhdCBvdGhlciBLVk0gY29tcG9uZW50cyBpcyBpdCBidWlsdCB1cG9uPyBXaGF0IHNwZWNpZmljIEFNRCBoYXJkd2FyZSBmZWF0dXJlcyBkb2VzIGl0IHJlbHkgb24/IFdoYXQgb3RoZXIgbW9kdWxlcyBtaWdodCBiZSBpbXBhY3RlZCBvciBuZWVkIHRvIGJlIHByZXNlbnQ/IFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgY29kZSwgaXQmIzM5O3MgYWJvdXQgdGhlIHNlY3VyaXR5IG1vZGVsIGl0IGVuYWJsZXMuIFdoYXQgYXJlIHRoZSB0cnVzdCBib3VuZGFyaWVzPyBBbnkgcG90ZW50aWFsIGF0dGFjayB2ZWN0b3JzIHN0ZW1taW5nIGZyb20gY29tcG9uZW50IGludGVyZGVwZW5kZW5jaWVzPyBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSBtYXAgb3V0IHRoZSByZWxhdGlvbnNoaXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTY6XHRjb25maWcgS1ZNX0FNRF9TRVZcbiAxNTc6XHRcdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuIDE1ODpcdFx0ZGVmYXVsdCB5XG4gMTU5Olx0XHRkZXBlbmRzIG9uIEtWTV9BTUQgXHUwMDI2XHUwMDI2IFg4Nl82NFxuIDE2MDpcdFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX1NQX1BTUCBcdTAwMjZcdTAwMjYgIShLVk1fQU1EPXkgXHUwMDI2XHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pXG4gMTYxOlx0XHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cbiAxNjI6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuIDE2MzpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9DT05WRVJUXG4gMTY0Olx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1JFQ0xBSU1cbiAxNjU6XHRcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuIDE2NjpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuIDE2NzpcdFx0aGVscFxuIDE2ODpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgZW5jcnlwdGVkIFZNcyB3aGljaCB1c2UgU2VjdXJlXG4gMTY5Olx0XHQgIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSwgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiB3aXRoXG4gMTcwOlx0XHQgIEVuY3J5cHRlZCBTdGF0ZSAoU0VWLUVTKSwgYW5kIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gd2l0aFxuIDE3MTpcdFx0ICBTZWN1cmUgTmVzdGVkIFBhZ2luZyAoU0VWLVNOUCkgdGVjaG5vbG9naWVzIG9uIEFNRCBwcm9jZXNzb3JzLlxuIDE3MjpcdFxuIDE3MzpcdGNvbmZpZyBLVk1fSU9BUElDXG4gMTc0Olx0XHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4gMTc1Olx0XHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2ODcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIGZvciBLZXJuZWwgTW9kdWxlIFNlbGVjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZGVwZW5kZW5jaWVzOiBgS1ZNX0FNRGAsIGBYODZfNjRgLCBgQ1JZUFRPX0RFVl9TUF9QU1BgLCBhbmQgYENSWVBUT19ERVZfQ0NQX0REYC4gQmFzZWQgb24gdGhhdCwgSSBkZWZpbml0ZWx5IG5lZWQgdG8gcHVsbCBpbiBgS1ZNYCwgYEtWTV9BTURgLCBhbmQgYEtWTV9BTURfU0VWYC4gVGhvc2Ugc2VlbSBwcmV0dHkgY2xlYXItY3V0IGdpdmVuIHRoZSBBTUQtc3BlY2lmaWMgS1ZNIG1vZHVsZS4gQW5kIG9mIGNvdXJzZSwgSSBoYXZlIHRvIGluY2x1ZGUgdGhlIGNyeXB0byBkZXZpY2VzLCBgQ1JZUFRPX0RFVl9TUF9QU1BgIGFuZCBgQ1JZUFRPX0RFVl9DQ1BfRERgLgoKTm93LCB3YWl0IGEgc2Vjb25kLi4uIGBDUllQVE9fREVWX1NQX1BTUGAgYW5kIGBDUllQVE9fREVWX0NDUF9ERGAgKmFyZSogcmVxdWlyZWQuIEkgaGFkIGJldHRlciBnbyBiYWNrIGFuZCBkb3VibGUgY2hlY2sgdGhhdCBgQ1JZUFRPX0RFVl9TUF9QU1BgIGlzIHdoYXQgSSB0aGluayBpdCBpcywgYmVmb3JlIG1vdmluZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENSWVBUT19ERVZfU1BfUFNQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnPTIzPWNvbmZpZyBDUllQVE9fREVWX0NDUF9DUllQVE9cbi0tXG5kcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZy0zNy1cbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnOjM4OmNvbmZpZyBDUllQVE9fREVWX1NQX1BTUFxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMzktXHRib29sIFwmIzM0O1BsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKSBkZXZpY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxMzkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIHRoZSBwcm92aWRlZCB0ZXh0OgoKKipFeGFtaW5pbmcgdGhlIENDUCBLY29uZmlnIEZpbGUqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHdoYXQmIzM5O3MgZ29pbmcgb24gYXJvdW5kIGxpbmUgMzguIEdpdmVuIHRoZSBjb250ZXh0LCBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoZSBDQ1AgaGFyZHdhcmUuIFRoaXMgS2NvbmZpZyBmaWxlIGxpa2VseSBkZWZpbmVzIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmb3IgdGhlIENDUCBkcml2ZXIsIHNvIHVuZGVyc3RhbmRpbmcgdGhlc2Ugc2V0dGluZ3MgaXMgY3J1Y2lhbCBmb3IgcHJvcGVyIGludGVncmF0aW9uLiBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIGRlZmluaW5nIHNvbWUgZmVhdHVyZXMgb3IgdGhlIGhhcmR3YXJlIGRldGFpbHMuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBzcGVjaWZpYyBjb25kaXRpb25hbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0XHRzZWxlY3QgQ1JZUFRPX0FVVEhFTkNcbiAgMzE6XHRcdHNlbGVjdCBDUllQVE9fUlNBXG4gIDMyOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNcbiAgMzM6XHRcdGhlbHBcbiAgMzQ6XHRcdCAgU3VwcG9ydCBmb3IgdXNpbmcgdGhlIGNyeXB0b2dyYXBoaWMgQVBJIHdpdGggdGhlIEFNRCBDcnlwdG9ncmFwaGljXG4gIDM1Olx0XHQgIENvcHJvY2Vzc29yLiBUaGlzIG1vZHVsZSBzdXBwb3J0cyBvZmZsb2FkIG9mIFNIQSBhbmQgQUVTIGFsZ29yaXRobXMuXG4gIDM2Olx0XHQgIElmIHlvdSBjaG9vc2UgJiMzOTtNJiMzOTsgaGVyZSwgdGhpcyBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2NwX2NyeXB0by5cbiAgMzc6XHRcbiAgMzg6XHRjb25maWcgQ1JZUFRPX0RFVl9TUF9QU1BcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7UGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApIGRldmljZVwmIzM0O1xuICA0MDpcdFx0ZGVmYXVsdCB5XG4gIDQxOlx0XHRkZXBlbmRzIG9uIENSWVBUT19ERVZfQ0NQX0REIFx1MDAyNlx1MDAyNiBYODZfNjQgXHUwMDI2XHUwMDI2IEFNRF9JT01NVVxuICA0MjpcdFx0c2VsZWN0IFBDSV9UU00gaWYgUENJXG4gIDQzOlx0XHRoZWxwXG4gIDQ0Olx0XHQgUHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgQU1EIFBsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKS5cbiAgNDU6XHRcdCBUaGUgUFNQIGlzIGEgZGVkaWNhdGVkIHByb2Nlc3NvciB0aGF0IHByb3ZpZGVzIHN1cHBvcnQgZm9yIGtleVxuICA0NjpcdFx0IG1hbmFnZW1lbnQgY29tbWFuZHMgaW4gU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBtb2RlLFxuICA0NzpcdFx0IGFsb25nIHdpdGggc29mdHdhcmUtYmFzZWQgVHJ1c3RlZCBFeGVjdXRpb24gRW52aXJvbm1lbnQgKFRFRSkgdG9cbiAgNDg6XHRcdCBlbmFibGUgdGhpcmQtcGFydHkgdHJ1c3RlZCBhcHBsaWNhdGlvbnMuXG4gIDQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjQwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRGVwZW5kZW5jeSBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ1JZUFRPX0RFVl9TUF9QU1BgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgaXQgcmVsaWVzIG9uIGBDUllQVE9fREVWX0NDUF9ERGAsIGBYODZfNjRgLCBhbmQgYEFNRF9JT01NVWAuIEZpbmUsIG5vIHByb2JsZW0sIHRoYXQmIzM5O3MgZXhwZWN0ZWQuIFNpbmNlIEkga25vdyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHg4Nl82NCwgYFg4Nl82NGAgaXNuJiMzOTt0IGEgc3VycHJpc2UuIFRoYXQgbGVhdmVzIG1lIHRvIGNoZWNrIGBDUllQVE9fREVWX0NDUF9ERGAgYW5kIGBBTURfSU9NTVVgIHRvIG1ha2Ugc3VyZSB0aGV5JiMzOTtyZSBhbGwgc2V0LiBUaGUgaW1tZWRpYXRlIHRoaW5nIHRvIGRvIGlzIGRpdmUgaW50byB0aGUgc3RhdGUgb2YgYENSWVBUT19ERVZfQ0NQX0REYCwgc2luY2UgdGhhdCYjMzk7cyBwcm9iYWJseSB0aGUgbW9zdCByZWxldmFudCB0byBpbnZlc3RpZ2F0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENSWVBUT19ERVZfQ0NQX0REJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnOjI6Y29uZmlnIENSWVBUT19ERVZfQ0NQX0REXG5kcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U2VjdXJlIFByb2Nlc3NvciBkZXZpY2UgZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDAxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIEtjb25maWcgZmlsZToKCioqTmF2aWdhdGluZyB0aGUgQ0NQIEtjb25maWcgRmlsZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMi4gTXkgaW5pdGlhbCBleHBlY3RhdGlvbiBpcyB0aGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIGRlZmluaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBDQ1AgKENyeXB0b2dyYXBoaWMgQ29wcm9jZXNzb3IpIGRyaXZlci4gR2l2ZW4gdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gbGl2ZXMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGZvdW5kYXRpb25hbCBidWlsZGluZyBibG9ja3M6IHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBkZWZhdWx0IHNldHRpbmdzLCBhbmQgYW55IGZlYXR1cmUgZmxhZ3MgdGhhdCYjMzk7bGwgZ2l2ZSBtZSBhIGdyYW51bGFyIGNvbnRyb2wgb3ZlciB3aGljaCBDQ1AgZnVuY3Rpb25hbGl0aWVzIGFyZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwga2VybmVsIGJ1aWxkLiBJIHdhbnQgdG8gc2VlIGhvdyBtb2R1bGFyIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgYW5kIGlmIEkgY2FuIGVhc2lseSBzZWxlY3Qgb3IgZGVzZWxlY3Qgc3BlY2lmaWMgcGFydHMgb2YgdGhlIGRyaXZlci4gSSBhbSBnb2luZyB0byBzZWUgaWYgdGhpcyBpcyBhbiBvbGRlciBzdHlsZSBvZiBLY29uZmlnIGFuZCBuZWVkIHRvIGNoZWNrIHdoYXQgdGhlIEtjb25maWcgc3ludGF4IHVzZWQgaXMsIGFuZCBpZiB0aGVyZSBhcmUgYW55IGludGVyZXN0aW5nIHVzZXMgb2YgYHNlbGVjdGAgb3IgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgQ1JZUFRPX0RFVl9DQ1BfRERcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1NlY3VyZSBQcm9jZXNzb3IgZGV2aWNlIGRyaXZlclwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBDUFVfU1VQX0FNRCB8fCBBUk02NFxuICAgNTpcdFx0ZGVmYXVsdCBtXG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIFByb3ZpZGVzIEFNRCBTZWN1cmUgUHJvY2Vzc29yIGRldmljZSBkcml2ZXIuXG4gICA4Olx0XHQgIElmIHlvdSBjaG9vc2UgJiMzOTtNJiMzOTsgaGVyZSwgdGhpcyBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2NwLlxuICAgOTpcdFxuICAxMDpcdGNvbmZpZyBDUllQVE9fREVWX1NQX0NDUFxuICAxMTpcdFx0Ym9vbCBcJiMzNDtDcnlwdG9ncmFwaGljIENvcHJvY2Vzc29yIGRldmljZVwmIzM0O1xuICAxMjpcdFx0ZGVmYXVsdCB5XG4gIDEzOlx0XHRkZXBlbmRzIG9uIENSWVBUT19ERVZfQ0NQX0REIFx1MDAyNlx1MDAyNiBETUFERVZJQ0VTXG4gIDE0Olx0XHRzZWxlY3QgSFdfUkFORE9NXG4gIDE1Olx0XHRzZWxlY3QgRE1BX0VOR0lORVxuICAxNjpcdFx0c2VsZWN0IENSWVBUT19TSEExXG4gIDE3Olx0XHRzZWxlY3QgQ1JZUFRPX1NIQTI1NlxuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBQcm92aWRlcyB0aGUgc3VwcG9ydCBmb3IgQU1EIENyeXB0b2dyYXBoaWMgQ29wcm9jZXNzb3IgKENDUCkgZGV2aWNlXG4gIDIwOlx0XHQgIHdoaWNoIGNhbiBiZSB1c2VkIHRvIG9mZmxvYWQgZW5jcnlwdGlvbiBvcGVyYXRpb25zIHN1Y2ggYXMgU0hBLCBBRVNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NDgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBSZXZpZXcqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBgQ1JZUFRPX0RFVl9DQ1BfRERgIGZlYXR1cmUuIFRoZSBkZXBlbmRlbmNpZXMgYXJlIGNsZWFyOiBlaXRoZXIgYENQVV9TVVBfQU1EYCBvciBgQVJNNjRgLiBHb29kLCBgQ1BVX1NVUF9BTURgIGlzIHN0YW5kYXJkIGZhcmUgZm9yIHg4Niwgd2hpY2ggaXMgd2hhdCBJJiMzOTttIHByaW1hcmlseSB3b3JraW5nIHdpdGggaGVyZS4KCkFscmlnaHQsIHNvIHRoZSBlbmFibGluZyBjb25maWdzIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBJJiMzOTtsbCBuZWVkIGBLVk1gLCBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIG9idmlvdXNseSBgQ1JZUFRPX0RFVl9DQ1BfRERgIGl0c2VsZiwgYENSWVBUT19ERVZfU1BfUFNQYCB3aGljaCBzZWVtcyByZWxhdGVkLCBhbmQgYEFNRF9JT01NVWAgdG8gbWFuYWdlIHRoZSBJL08uIFNlZW1zIHJlYXNvbmFibGUsIGFsbCBleHBlY3RlZCBjb25maWd1cmF0aW9ucyBpbiB0aGlzIHNwYWNlLgoKSG9sZCBvbi4uLiB0aGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBhcmNoL3g4Ni9LY29uZmlnYCBhbmQgaXMgcmVsYXRlZCB0byBgTUlUSUdBVElPTl9JQlJTX0VOVFJZYC4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIElCUlMgbWl0aWdhdGlvbiBpcyBiZWluZyBoYW5kbGVkLiBMZXQgbWUgbG9vayBpbnRvIGBNSVRJR0FUSU9OX0lCUlNfRU5UUllgLiBHb3R0YSBlbnN1cmUgSSYjMzk7bSBhd2FyZSBvZiB0aGUgZnVsbCBpbXBhY3QgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1JVElHQVRJT05fSUJSU19FTlRSWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz0yNDg5PWNvbmZpZyBNSVRJR0FUSU9OX0lCUEJfRU5UUllcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTI0OTYtXG5hcmNoL3g4Ni9LY29uZmlnOjI0OTc6Y29uZmlnIE1JVElHQVRJT05fSUJSU19FTlRSWVxuYXJjaC94ODYvS2NvbmZpZy0yNDk4LVx0Ym9vbCBcJiMzNDtFbmFibGUgSUJSUyBvbiBrZXJuZWwgZW50cnlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwNjgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSB4ODYgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgYXJjaC94ODYvS2NvbmZpZ2AsIHJpZ2h0IGFyb3VuZCBsaW5lIDI0OTcuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBob25lIGluIG9uIHRoZSByZWxldmFudCBzZWN0aW9uLiBJ4oCZbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgaW5mbHVlbmNlIHRoZSBjb2RlIHBhdGggSSYjMzk7bSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gSG9wZWZ1bGx5LCB0aGlzIGlzIHRoZSByaWdodCBzcG90IGZvciB0aGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gdG8gYmUgZGVzY3JpYmVkISBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDk3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI0OTc6XHRjb25maWcgTUlUSUdBVElPTl9JQlJTX0VOVFJZXG4yNDk4Olx0XHRib29sIFwmIzM0O0VuYWJsZSBJQlJTIG9uIGtlcm5lbCBlbnRyeVwmIzM0O1xuMjQ5OTpcdFx0ZGVwZW5kcyBvbiBYODZfNjRcbjI1MDA6XHRcdGRlZmF1bHQgeVxuMjUwMTpcdFx0aGVscFxuMjUwMjpcdFx0ICBDb21waWxlIHRoZSBrZXJuZWwgd2l0aCBzdXBwb3J0IGZvciB0aGUgc3BlY3RyZV92Mj1pYnJzIG1pdGlnYXRpb24uXG4yNTAzOlx0XHQgIFRoaXMgbWl0aWdhdGVzIHNwZWN0cmVfdjIgYXQgZ3JlYXQgY29zdCB0byBwZXJmb3JtYW5jZS4gIE9uIEludGVsLFxuMjUwNDpcdFx0ICBpdCBhbHNvIG1pdGlnYXRlcyByZXRibGVlZC4gIE9uIEFNRC9IeWdvbiwgcmV0YmxlZWQgbWl0aWdhdGlvblxuMjUwNTpcdFx0ICByZXF1aXJlcyBNSVRJR0FUSU9OX1VOUkVUX0VOVFJZIG9yIE1JVElHQVRJT05fSUJQQl9FTlRSWS5cbjI1MDY6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0NDkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgS1ZNIFNFViBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIHRoaXMgbmV3IGltcGxlbWVudGF0aW9uIGhhcyBLVk0gU0VWIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hpY2ggaXMgZ29vZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9uYWwgY2hhbmdlIGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlIHRoYXQgY2FuIGJlIHRhcmdldGVkIGZvciBmdXp6aW5nLiBJdCBsb29rcyBsaWtlIHRoZSBLVk0gU0VWIGZlYXR1cmUgdmFsaWRhdGlvbiB3aXRoaW4gYF9fc2V2X2d1ZXN0X2luaXRgIGlzIHRoZSBrZXkgYXJlYSwgYW5kIHRoZSBvYnZpb3VzIGZvY3VzIHN5bWJvbCBpcyBgc2V2X21lbV9lbmNfaW9jdGxgLgoKTGV0IG1lIGNvbmZpcm0gdGhhdCBgc2V2X21lbV9lbmNfaW9jdGxgIGlzIGluZGVlZCB0aGUgc29sZSBlbnRyeSBwb2ludCwgYXQgbGVhc3QgZnJvbSB0aGlzIHBlcnNwZWN0aXZlLiBZZXMsIGl0IGhhbmRsZXMgdGhlIGBLVk1fTUVNT1JZX0VOQ1JZUFRfT1BgIGlvY3RsLCBzbyB0aGF0JiMzOTtzIHRoZSBwcmltYXJ5IGF2ZW51ZS4KCkhtbSwgYW55dGhpbmcgZWxzZSBjaGFuZ2VkPyBBaCwgeWVzLCBpbiBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AsIGBzZXZfaGFyZHdhcmVfc2V0dXBgIGlzIGFkZGluZyBhIGZldyBtb3JlIGZlYXR1cmVzIHRvIGBzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXNgOiBgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkVgLCBgU1ZNX1NFVl9GRUFUX0JUQl9JU09MQVRJT05gLCBgU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0NgLCBhbmQgYFNWTV9TRVZfRkVBVF9JQlBCX09OX0VOVFJZYC4gVGhhdCBtYWtlcyBzZW5zZTsgdGhlc2UgZmVhdHVyZXMgYXJlIG5vdyBpbmNvcnBvcmF0ZWQgaW50byBgS1ZNX1NFVl9JTklUMmAgYW5kIHZhbGlkYXRlZCBpbiBgX19zZXZfZ3Vlc3RfaW5pdGAuIFNvLCBhZ2FpbiwgYHNldl9tZW1fZW5jX2lvY3RsYCBpdCBpcy4gRGVmaW5pdGVseSB0aGUgc3ltYm9sIHRvIGZvY3VzIG9uLgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBlbmFibGVkOiBgS1ZNYCwgYEtWTV9BTURgLCBgS1ZNX0FNRF9TRVZgLCBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBgQ1JZUFRPX0RFVl9TUF9QU1BgLCBhbmQgYEFNRF9JT01NVWAuIEFuZCBub3cgSSB3YW50IHRvIHF1aWNrbHkgY2hlY2sgaWYgYEFNRF9JT01NVWAgZGVwZW5kcyBvbiBhbnl0aGluZyBlbHNlLiBUaGF0IHdpbGwgaW5mbHVlbmNlIGhvdyBJIGFwcHJvYWNoIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFNRF9JT01NVSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjI4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBBTUQgSU9NTVUgRHJpdmVyKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBBTUQgSU9NTVUgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgZHJpdmVycy9pb21tdS9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGNvZGUgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIHRoZSBJbnB1dC9PdXRwdXQgTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCBmdW5jdGlvbmFsaXR5IHNwZWNpZmljIHRvIEFNRCBwbGF0Zm9ybXMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGRyaXZlciYjMzk7cyBzdHJ1Y3R1cmUsIGlkZW50aWZ5IGtleSBlbnRyeSBwb2ludHMgZm9yIGRldmljZSBhc3NpZ25tZW50IGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcsIGFuZCBsaWtlbHkgdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgcmVnaXN0ZXJzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYEFNRF9JT01NVWAgaW4gdGhhdCBkaXJlY3RvcnkuIEkgZmlndXJlIHRoYXQgc2hvdWxkIHNlcnZlIGFzIGEgc29saWQgbGVhZCB0byBkaXJlY3QgbWUgdG93YXJkIHRoZSByZWxldmFudCBmaWxlcyBhbmQgZnVuY3Rpb25zIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBhbmFseXppbmcuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgZGlnZ2luZyBiZWdpbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBTURfSU9NTVUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTItIyBBTUQgSU9NTVUgc3VwcG9ydFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZzozOmNvbmZpZyBBTURfSU9NTVVcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctNC1cdGJvb2wgXCYjMzQ7QU1EIElPTU1VIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTMyLVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZzozMzpjb25maWcgQU1EX0lPTU1VX0lPTU1VRkRcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctMzQtXHRib29sIFwmIzM0O0VuYWJsZSBJT01NVUZEIGZlYXR1cmVzIGZvciBBTUQgSU9NTVUgKEVYUEVSSU1FTlRBTClcJiMzNDtcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQyLVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZzo0Mzpjb25maWcgQU1EX0lPTU1VX0RFQlVHRlNcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctNDQtXHRib29sIFwmIzM0O0VuYWJsZSBBTUQgSU9NTVUgaW50ZXJuYWxzIGluIERlYnVnRlNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2OTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBLY29uZmlnIGZpbGU6CgoqKkRpdmluZyBpbnRvIHRoZSBBTUQgSU9NTVUgS2NvbmZpZyoqCgpPa2F5LCB0aW1lIHRvIGNyYWNrIG9wZW4gdGhlIGBkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gaHViIGZvciBBTUQmIzM5O3MgSU9NTVUgZHJpdmVyLiBLbm93aW5nIHRoaXMsIEkmIzM5O20gYW50aWNpcGF0aW5nIGEgc3RydWN0dXJlZCBsYXlvdXQ6IGl0IHNob3VsZCBkZWZpbmUgdGhlIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgc2V0dGluZ3MgdGhhdCBjb250cm9sIHRoZSBpbmNsdXNpb24gYW5kIGJlaGF2aW9yIG9mIHRoZSBBTUQgSU9NTVUgc3VwcG9ydCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipDb25maWcgb3B0aW9uczoqKiBXaGF0IGFyZSB0aGUga2V5IGBDT05GSUdfYCBvcHRpb25zIHRoYXQgZGV2ZWxvcGVycyBjYW4gdHdlYWs/IEkgZXhwZWN0IHRvIHNlZSB0b2dnbGVzIGZvciBlbmFibGluZy9kaXNhYmxpbmcgdGhlIEFNRCBJT01NVSBlbnRpcmVseSwgb3IgZmluZS1ncmFpbmVkIGNvbnRyb2xzIG92ZXIgc3BlY2lmaWMgZmVhdHVyZXMgb3IgaGFyZHdhcmUgYXNwZWN0cy4gSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoZSBzcGVjaWZpYyBncmFudWxhcml0eS4KKiAgICoqRGVwZW5kZW5jaWVzOioqIFdoYXQgb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgb3IgZmVhdHVyZXMgYXJlIHRoaXMgZHJpdmVyIHJlbGlhbnQgdXBvbj8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgbGlua2luZyBpdCB0byByZWxldmFudCBDUFUsIHBsYXRmb3JtLCBvciBkZXZpY2UgZHJpdmVyIG9wdGlvbnMuIEFyZSB0aGVyZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBzZWN1cml0eSBmZWF0dXJlcyBvciB2aXJ0dWFsaXphdGlvbiB0ZWNobm9sb2dpZXM/CiogICAqKkRlZmF1bHQgc2V0dGluZ3M6KiogV2hhdCBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zPyBBcmUgdGhleSBjb25zZXJ2YXRpdmUgZGVmYXVsdHM/IERvIHRoZXkgcHJpb3JpdGl6ZSBwZXJmb3JtYW5jZSBvciBjb21wYXRpYmlsaXR5PyBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBzZW5zZSBvZiBob3cgdGhlIGRyaXZlciBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIG91dC1vZi10aGUtYm94LgoqICAgKipIZWxwIHRleHQ6KiogR29vZCBLY29uZmlnIGZpbGVzIGhhdmUgaGVscGZ1bCBkZXNjcmlwdGlvbnMgZm9yIGVhY2ggb3B0aW9uLiBJJiMzOTtsbCBiZSBzY2FubmluZyB0aGVzZSBkZXNjcmlwdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBhbmQgaW1wbGljYXRpb25zIG9mIGVhY2ggY29uZmlndXJhdGlvbiBjaG9pY2UuIEkmIzM5O2xsIGJlIGp1ZGdpbmcgdGhlIHF1YWxpdHkgb2YgZG9jdW1lbnRhdGlvbi4KKiAgICoqQ29uZGl0aW9uYWwgaW5jbHVzaW9uOioqIEFyZSB0aGVyZSBvcHRpb25zIHRoYXQgYXJlIG9ubHkgYXZhaWxhYmxlIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucywgbWF5YmUgc3BlY2lmaWMgQ1BVIG1vZGVscyBvciBoYXJkd2FyZSBjb25maWd1cmF0aW9ucz8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYGlmYCBzdGF0ZW1lbnRzLgoqICAgKipBcmNoaXRlY3R1cmFsIGNvbnNpZGVyYXRpb25zOioqIEkgd2lsbCBiZSBsb29raW5nIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIEFNRCBJT01NVSBnZW5lcmF0aW9ucyBvciBjaGlwc2V0cy4KCkkmIzM5O20gYWxzbyBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgc3R5bGUuIEEgd2VsbC13cml0dGVuIEtjb25maWcgZmlsZSBpcyBhIGpveSB0byByZWFkIOKAkyB3ZWxsLWZvcm1hdHRlZCwgY29uc2lzdGVudCwgYW5kIGNsZWFyLiBJdCYjMzk7bGwgZ2l2ZSBtZSBhIHN0cm9uZyBpbmRpY2F0aW9uIG9mIHRoZSBtYXR1cml0eSBhbmQgbWFpbnRhaW5hYmlsaXR5IG9mIHRoaXMgZHJpdmVyLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvYW1kL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjIEFNRCBJT01NVSBzdXBwb3J0XG4gICAzOlx0Y29uZmlnIEFNRF9JT01NVVxuICAgNDpcdFx0Ym9vbCBcJiMzNDtBTUQgSU9NTVUgc3VwcG9ydFwmIzM0O1xuICAgNTpcdFx0c2VsZWN0IFNXSU9UTEJcbiAgIDY6XHRcdHNlbGVjdCBQQ0lfTVNJXG4gICA3Olx0XHRzZWxlY3QgUENJX0FUU1xuICAgODpcdFx0c2VsZWN0IFBDSV9QUklcbiAgIDk6XHRcdHNlbGVjdCBQQ0lfUEFTSURcbiAgMTA6XHRcdHNlbGVjdCBJUlFfTVNJX0xJQlxuICAxMTpcdFx0c2VsZWN0IE1NVV9OT1RJRklFUlxuICAxMjpcdFx0c2VsZWN0IElPTU1VX0FQSVxuICAxMzpcdFx0c2VsZWN0IElPTU1VX0lPVkFcbiAgMTQ6XHRcdHNlbGVjdCBJT01NVV9TVkFcbiAgMTU6XHRcdHNlbGVjdCBJT01NVV9JT1BGXG4gIDE2Olx0XHRzZWxlY3QgSU9NTVVGRF9EUklWRVIgaWYgSU9NTVVGRFxuICAxNzpcdFx0c2VsZWN0IEdFTkVSSUNfUFRcbiAgMTg6XHRcdHNlbGVjdCBJT01NVV9QVFxuICAxOTpcdFx0c2VsZWN0IElPTU1VX1BUX0FNRFYxXG4gIDIwOlx0XHRzZWxlY3QgSU9NTVVfUFRfWDg2XzY0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDgzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGl0JiMzOTtzIHJlbGF0aXZlbHkgc2VsZi1jb250YWluZWQg4oCTIG5vIG1ham9yLCBnbGFyaW5nIGRlcGVuZGVuY2llcyBqdW1wIG91dCBhdCBtZS4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBsb2NhdGVkIHdpdGhpbiBgZHJpdmVycy9pb21tdS9LY29uZmlnYCBpcyBrZXksIGFuZCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGl0cyBhdmFpbGFiaWxpdHkgaXMgbGlua2VkIHRvIGBJT01NVV9TVVBQT1JUYC4gTWFrZXMgc2Vuc2UsIG9mIGNvdXJzZSwgdGhhdCYjMzk7cyB3aGF0IHRoYXQgZGlyZWN0b3J5IGFuZCBmaWxlIGFyZSBmb3IuIFRpbWUgdG8gZ28gdmVyaWZ5IHRoYXQgYElPTU1VX1NVUFBPUlRgIGlzIGluZGVlZCB0aGUgZGVjaWRpbmcgZmFjdG9yIGhlcmUsIGFuZCBzZWUgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgYXJlIGZvciB0aGUgb3ZlcmFsbCBzeXN0ZW0gY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElPTU1VX1NVUFBPUlQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pb21tdS9LY29uZmlnPTEwPWNvbmZpZyBJT01NVUZEX0RSSVZFUlxuLS1cbmRyaXZlcnMvaW9tbXUvS2NvbmZpZy0xMy1cbmRyaXZlcnMvaW9tbXUvS2NvbmZpZzoxNDptZW51Y29uZmlnIElPTU1VX1NVUFBPUlRcbmRyaXZlcnMvaW9tbXUvS2NvbmZpZy0xNS1cdGJvb2wgXCYjMzQ7SU9NTVUgSGFyZHdhcmUgU3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTc3NwoJCQkJCQkJb3V0cHV0OiAxOTQKCQkJCQkJCXRob3VnaHRzOiA2NjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneTogS1ZNIFNFViBGZWF0dXJlIFZhbGlkYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZvY3VzIG9uIGZ1enppbmcgYSBzcGVjaWZpYyBhcmVhLCBhbmQgaXQgbG9va3MgbGlrZSBpdCBjZW50ZXJzIGFyb3VuZCBgSU9NTVVfU1VQUE9SVGAuIEkgbmVlZCB0aGF0LiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgaW4gcGxheT8gSSBoYXZlIGBLVk1gLCBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIGBDUllQVE9fREVWX0NDUF9ERGAsIGBDUllQVE9fREVWX1NQX1BTUGAsIGBBTURfSU9NTVVgLCBhbmQgYElPTU1VX1NVUFBPUlRgLgoKUmlnaHQsIG5vdyB3aGF0JiMzOTtzIHRoZSBtb3N0IHJlbGV2YW50ICYjMzQ7Zm9jdXMgc3ltYm9sJiMzNDs/IEFoLCBgc2V2X21lbV9lbmNfaW9jdGxgIHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBvbmUsIGl0JiMzOTtzIHRoZSBtYWluIGhhbmRsZXIuIFdoYXQgYWJvdXQgdGhvc2Ugb3RoZXIgU0VWIHJlbGF0ZWQgc3ltYm9scywgYHNldl9ndWVzdF9pbml0MmAgYW5kIGBfX3Nldl9ndWVzdF9pbml0YD8gVGhleSBsb29rIHN0YXRpYyBhbmQgcG9zc2libHkgaW5saW5lZCwgc28gYHNldl9tZW1fZW5jX2lvY3RsYCBpcyBpbmRlZWQgdGhlIGJlc3QgdGFyZ2V0LgoKQW5kIHllcCwgYHNldl9tZW1fZW5jX2lvY3RsYCAqaXMqIHRoZSBvbmx5IGlvY3RsIGhhbmRsZXIsIHNwZWNpZmljYWxseSwgaXQgaGFuZGxlcyBgS1ZNX01FTU9SWV9FTkNSWVBUX09QYC4gVGhhdCBjb25maXJtcyBpdC4KCk5vdyB0byBzb2xpZGlmeSB0aGlzIGxvZ2ljOiBUaGUgcGF0Y2ggKm1vZGlmaWVzKiB0aGUgdmFsaWRhdGlvbiBvZiBgdm1zYV9mZWF0dXJlc2AgZHVyaW5nIEtWTSBTRVYgZ3Vlc3QgaW5pdGlhbGl6YXRpb24gKHRoZSBgS1ZNX1NFVl9JTklUMmAgaW9jdGwpLiBQbHVzLCBpdCYjMzk7cyBhZGRpbmcgbmV3IFNFVi1TTlAgZmVhdHVyZXMgdG8gdGhlIHN1cHBvcnRlZCBsaXN0LiBUaGlzIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBLVk0gaW9jdGxzLCAqdGhhdCYjMzk7cyogdGhlIGVudHJ5cG9pbnQuIFRoYXQmIzM5O3MgKnBlcmZlY3QqIGZvciBmdXp6aW5nOyB0aGUgbmV3IGZlYXR1cmUgdmFsaWRhdGlvbiBpcyB3aGVyZSB0aGUgYnVncyB3aWxsIGJlIQoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgb3RoZXIgY2hhbmdlcy4gTG9va3MgbGlrZSBgYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmNgIGFuZCBgYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uY2AgYXJlIHJlbGF0ZWQgdG8gbWl0aWdhdGlvbiBsb2dpYyBmb3IgcmV0YmxlZWQsIHNwZWN0cmVfdjIsIGFuZCBBdXRvSUJSUy4gVGhvc2UgYXJlIGJvb3QtdGltZSB0aGluZ3MsIHNvIG5vIHVzZXIgaW5wdXQgdGhlcmUuIEFuZCB0aGUgYEtjb25maWdgIGFuZCBoZWFkZXIgZmlsZXMganVzdCBkZWZpbmUgdGhlIGZlYXR1cmVzIGZvciB0aGUgbWl0aWdhdGlvbnMuIFRoZSBzZWxmdGVzdHMgYXJlIGp1c3QgdXBkYXRpbmcgdGVzdHMuIFNvLCBkZWZpbml0ZWx5IG5vIGZ1enogdGFyZ2V0cyB0aGVyZS4KCkFscmlnaHQsIGJhY2sgdG8gdGhlIGNvbmZpZ3MuIEkga25vdyBJIGhhdmUgdG8gaGF2ZToKKiAgIGBLVk1gCiogICBgS1ZNX0FNRGAKKiAgIGBLVk1fQU1EX1NFVmAKKiAgIGBDUllQVE9fREVWX0NDUF9ERGAgKEltcG9ydGFudCwgaXQmIzM5O3MgYSB0cmlzdGF0ZS4pCiogICBgQ1JZUFRPX0RFVl9TUF9QU1BgIChCb29sKQoqICAgYEFNRF9JT01NVWAgKEJvb2wpCiogICBgSU9NTVVfU1VQUE9SVGAgKEJvb2wpCgpPa2F5LCBJIGhhdmUgbXkgY29yZSBjb25maWd1cmF0aW9ucywgYW5kIEkmIzM5O3ZlIHplcm9lZCBpbiBvbiB0aGUga2V5IGZ1enphYmxlIHRhcmdldC4gVGltZSB0byB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgc3RhcnQgZnV6emluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfQ0NQX0REJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfU1BfUFNQJiMzNDssCiAgICAmIzM0O0FNRF9JT01NVSYjMzQ7LAogICAgJiMzNDtJT01NVV9TVVBQT1JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2V2X21lbV9lbmNfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZhbGlkYXRpb24gb2YgYHZtc2FfZmVhdHVyZXNgIGR1cmluZyBLVk0gU0VWIGd1ZXN0IGluaXRpYWxpemF0aW9uIChgS1ZNX1NFVl9JTklUMmAgaW9jdGwpIGFuZCBhZGRzIG5ldyBTRVYtU05QIGZlYXR1cmVzIHRvIHRoZSBzdXBwb3J0ZWQgbGlzdC4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZSBuZXcgZmVhdHVyZSB2YWxpZGF0aW9uIGxvZ2ljIGRvZXNuJiMzOTt0IGludHJvZHVjZSBidWdzLiBUaGUgQ1BVIGJ1ZyBtaXRpZ2F0aW9uIGNoYW5nZXMgYXJlIGJvb3QtdGltZSBsb2dpYyBhbmQgbm90IGRpcmVjdGx5IGZ1enphYmxlIGZyb20gdXNlcnNwYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fQU1EX1NFViYjMzQ7LAogICAgJiMzNDtDUllQVE9fREVWX0NDUF9ERCYjMzQ7LAogICAgJiMzNDtDUllQVE9fREVWX1NQX1BTUCYjMzQ7LAogICAgJiMzNDtBTURfSU9NTVUmIzM0OywKICAgICYjMzQ7SU9NTVVfU1VQUE9SVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Nldl9tZW1fZW5jX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIG9mIGB2bXNhX2ZlYXR1cmVzYCBkdXJpbmcgS1ZNIFNFViBndWVzdCBpbml0aWFsaXphdGlvbiAoYEtWTV9TRVZfSU5JVDJgIGlvY3RsKSBhbmQgYWRkcyBuZXcgU0VWLVNOUCBmZWF0dXJlcyB0byB0aGUgc3VwcG9ydGVkIGxpc3QuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgbmV3IGZlYXR1cmUgdmFsaWRhdGlvbiBsb2dpYyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYnVncy4gVGhlIENQVSBidWcgbWl0aWdhdGlvbiBjaGFuZ2VzIGFyZSBib290LXRpbWUgbG9naWMgYW5kIG5vdCBkaXJlY3RseSBmdXp6YWJsZSBmcm9tIHVzZXJzcGFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBDUFUgbWl0aWdhdGlvbiBzZWxlY3Rpb24gbG9naWMgKElCUlMsIEF1dG9JQlJTLCBTRVYtU05QKSBhbmQgS1ZNIFNFViBpbml0aWFsaXphdGlvbiBmZWF0dXJlIHZhbGlkYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuIFRoZSBtb2RpZmllZCBkYXRhIHN0cnVjdHVyZXMgKGxpa2UgYHN0cnVjdCBrdm1fc2V2X2luaXRgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBgY29weV9mcm9tX3VzZXJgIGJlZm9yZSBiZWluZyByZWFkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgZXhwb3NlZCBieSB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5YjAwZjNmNjYzODY1NmYxNTBmOGQ5OGFmNmU0YzllMDQyNjg3MDljCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMjI6NTc6MTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZwppbmRleCAxNWZkOWVjNWVjYWNiLi5iOWE3ZGRlZjRjYmFiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L0tjb25maWcKQEAgLTI0OTYsMTIgJiM0MzsyNDk2LDEzIEBAIGNvbmZpZyBNSVRJR0FUSU9OX0lCUEJfRU5UUlkKIAogY29uZmlnIE1JVElHQVRJT05fSUJSU19FTlRSWQogCWJvb2wgJiMzNDtFbmFibGUgSUJSUyBvbiBrZXJuZWwgZW50cnkmIzM0OwotCWRlcGVuZHMgb24gQ1BVX1NVUF9JTlRFTCAmYW1wOyZhbXA7IFg4Nl82NAomIzQzOwlkZXBlbmRzIG9uIFg4Nl82NAogCWRlZmF1bHQgeQogCWhlbHAKIAkgIENvbXBpbGUgdGhlIGtlcm5lbCB3aXRoIHN1cHBvcnQgZm9yIHRoZSBzcGVjdHJlX3YyPWlicnMgbWl0aWdhdGlvbi4KLQkgIFRoaXMgbWl0aWdhdGVzIGJvdGggc3BlY3RyZV92MiBhbmQgcmV0YmxlZWQgYXQgZ3JlYXQgY29zdCB0bwotCSAgcGVyZm9ybWFuY2UuCiYjNDM7CSAgVGhpcyBtaXRpZ2F0ZXMgc3BlY3RyZV92MiBhdCBncmVhdCBjb3N0IHRvIHBlcmZvcm1hbmNlLiAgT24gSW50ZWwsCiYjNDM7CSAgaXQgYWxzbyBtaXRpZ2F0ZXMgcmV0YmxlZWQuICBPbiBBTUQvSHlnb24sIHJldGJsZWVkIG1pdGlnYXRpb24KJiM0MzsJICByZXF1aXJlcyBNSVRJR0FUSU9OX1VOUkVUX0VOVFJZIG9yIE1JVElHQVRJT05fSUJQQl9FTlRSWS4KIAogY29uZmlnIE1JVElHQVRJT05fU1JTTwogCWJvb2wgJiMzNDtNaXRpZ2F0ZSBzcGVjdWxhdGl2ZSBSQVMgb3ZlcmZsb3cgb24gQU1EJiMzNDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oCmluZGV4IGY3MGVlNzRiNWY5MjEuLjNhYWQyYjUzZjU5YmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaApAQCAtNDcyLDYgJiM0Mzs0NzIsNyBAQAogI2RlZmluZSBYODZfRkVBVFVSRV9BTExPV0VEX1NFVl9GRUFUVVJFUyAoMTkqMzImIzQzOzI3KSAvKiBBbGxvd2VkIFNFViBGZWF0dXJlcyAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9TVlNNCQkoMTkqMzImIzQzOzI4KSAvKiAmIzM0O3N2c20mIzM0OyBTVlNNIHByZXNlbnQgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfSFZfSU5VU0VfV1JfQUxMT1dFRAkoMTkqMzImIzQzOzMwKSAvKiBBbGxvdyBXcml0ZSB0byBpbi11c2UgaHlwZXJ2aXNvci1vd25lZCBwYWdlcyAqLwomIzQzOyNkZWZpbmUgWDg2X0ZFQVRVUkVfU05QX0lCUEJfT05fRU5UUlkJKDE5KjMyJiM0MzszMSkgLyogU0VWLVNOUCBJQlBCIG9uIFZNIEVudHJ5ICovCiAKIC8qIEFNRC1kZWZpbmVkIEV4dGVuZGVkIEZlYXR1cmUgMiBFQVgsIENQVUlEIGxldmVsIDB4ODAwMDAwMjEgKEVBWCksIHdvcmQgMjAgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfTk9fTkVTVEVEX0RBVEFfQlAJKDIwKjMyJiM0MzsgMCkgLyogTm8gTmVzdGVkIERhdGEgQnJlYWtwb2ludHMgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKaW5kZXggYWE2MzQzMWJhOTJjMy4uMGRhMjIzNGI3MWM2OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKQEAgLTMwNSwxMSAmIzQzOzMwNSwxOCBAQCBzdGF0aWNfYXNzZXJ0KChBVklDX01BWF9QSFlTSUNBTF9JRCAmYW1wOyBBVklDX1BIWVNJQ0FMX01BWF9JTkRFWF9NQVNLKSA9PSBBVklDX01BWF8KIHN0YXRpY19hc3NlcnQoKFgyQVZJQ19NQVhfUEhZU0lDQUxfSUQgJmFtcDsgQVZJQ19QSFlTSUNBTF9NQVhfSU5ERVhfTUFTSykgPT0gWDJBVklDX01BWF9QSFlTSUNBTF9JRCk7CiBzdGF0aWNfYXNzZXJ0KChYMkFWSUNfNEtfTUFYX1BIWVNJQ0FMX0lEICZhbXA7IEFWSUNfUEhZU0lDQUxfTUFYX0lOREVYX01BU0spID09IFgyQVZJQ180S19NQVhfUEhZU0lDQUxfSUQpOwogCi0jZGVmaW5lIFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFCQkJCUJJVCgwKQotI2RlZmluZSBTVk1fU0VWX0ZFQVRfUkVTVFJJQ1RFRF9JTkpFQ1RJT04JCUJJVCgzKQotI2RlZmluZSBTVk1fU0VWX0ZFQVRfQUxURVJOQVRFX0lOSkVDVElPTgkJQklUKDQpCi0jZGVmaW5lIFNWTV9TRVZfRkVBVF9ERUJVR19TV0FQCQkJCUJJVCg1KQotI2RlZmluZSBTVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQwkJCQlCSVQoOSkKJiM0MzsjZGVmaW5lIFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFCQkJCUJJVF9VTEwoMCkKJiM0MzsjZGVmaW5lIFNWTV9TRVZfRkVBVF9SRVNUUklDVEVEX0lOSkVDVElPTgkJQklUX1VMTCgzKQomIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX0FMVEVSTkFURV9JTkpFQ1RJT04JCUJJVF9VTEwoNCkKJiM0MzsjZGVmaW5lIFNWTV9TRVZfRkVBVF9ERUJVR19TV0FQCQkJCUJJVF9VTEwoNSkKJiM0MzsjZGVmaW5lIFNWTV9TRVZfRkVBVF9CVEJfSVNPTEFUSU9OCQkJQklUX1VMTCg3KQomIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0MJCQkJQklUX1VMTCg5KQomIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX0lCUEJfT05fRU5UUlkJCQlCSVRfVUxMKDIxKQomIzQzOwomIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NOUF9PTkxZX01BU0sJKFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFIHwgXAomIzQzOwkJCQkJIFNWTV9TRVZfRkVBVF9CVEJfSVNPTEFUSU9OIHwgXAomIzQzOwkJCQkJIFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDIHwgXAomIzQzOwkJCQkJIFNWTV9TRVZfRkVBVF9JQlBCX09OX0VOVFJZKQogCiAjZGVmaW5lIFZNQ0JfQUxMT1dFRF9TRVZfRkVBVFVSRVNfVkFMSUQJCQlCSVRfVUxMKDYzKQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1Z3MuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYnVncy5jCmluZGV4IDU2ZWFjNTYxMWMzMTguLjA4NzgwZTBkMzdlYzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYnVncy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYnVncy5jCkBAIC0xMzA1LDcgJiM0MzsxMzA1LDE0IEBAIHN0YXRpYyB2b2lkIF9faW5pdCByZXRibGVlZF91cGRhdGVfbWl0aWdhdGlvbih2b2lkKQogCiAJLyoKIAkgKiBMZXQgSUJSUyB0cnVtcCBhbGwgb24gSW50ZWwgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGVmZmVjdHMgb2YgdGhlCi0JICogcmV0YmxlZWQ9IGNtZGxpbmUgb3B0aW9uIGV4Y2VwdCBmb3IgY2FsbCBkZXB0aCBiYXNlZCBzdHVmZmluZwomIzQzOwkgKiByZXRibGVlZD0gY21kbGluZSBvcHRpb24gZXhjZXB0IGZvciBjYWxsIGRlcHRoIGJhc2VkIHN0dWZmaW5nLgomIzQzOwkgKgomIzQzOwkgKiBPbiBBTUQvSHlnb24sIGxlZ2FjeSBTUEVDX0NUUkwuSUJSUyB0b2dnbGluZyBkb2VzIG5vdCBtaXRpZ2F0ZSB0aGUKJiM0MzsJICogQnJhbmNoIFR5cGUgQ29uZnVzaW9uIFJFVEJsZWVkIHZhcmlhbnQ6IFJFVCBwcmVkaWN0aW9uIGNvbWVzIGZyb20KJiM0MzsJICogdGhlIFJldHVybiBBZGRyZXNzIFByZWRpY3Rvciwgbm90IHRoZSByZXN0cmljdGVkIGluZGlyZWN0IGJyYW5jaAomIzQzOwkgKiBwcmVkaWN0b3JzIHRoYXQgSUJSUyBjb250cm9scy4gIFNvIGtlZXAgdGhpcyBJbnRlbC1vbmx5IGFuZCBsZWF2ZQomIzQzOwkgKiBBTUQmIzM5O3Mgc29mdHdhcmUgcmV0dXJuLXRodW5rIG1pdGlnYXRpb24gKFVOUkVUL0lCUEIpIGluIHBsYWNlIGV2ZW4KJiM0MzsJICogd2hlbiBzcGVjdHJlX3YyPWlicnMgaXMgc2VsZWN0ZWQuCiAJICovCiAJaWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKSB7CiAJCXN3aXRjaCAoc3BlY3RyZV92Ml9lbmFibGVkKSB7CkBAIC0xNjcyLDYgJiM0MzsxNjc5LDcgQEAgc3RhdGljIGlubGluZSBib29sIHJldHBvbGluZV9zZXFfZW5hYmxlZCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfQogI2RlZmluZSBTUEVDVFJFX1YyX0xGRU5DRV9NU0cgJiMzNDtXQVJOSU5HOiBMRkVOQ0UgbWl0aWdhdGlvbiBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHRoaXMgQ1BVLCBkYXRhIGxlYWtzIHBvc3NpYmxlIVxuJiMzNDsKICNkZWZpbmUgU1BFQ1RSRV9WMl9FSUJSU19FQlBGX01TRyAmIzM0O1dBUk5JTkc6IFVucHJpdmlsZWdlZCBlQlBGIGlzIGVuYWJsZWQgd2l0aCBlSUJSUyBvbiwgZGF0YSBsZWFrcyBwb3NzaWJsZSB2aWEgU3BlY3RyZSB2MiBCSEIgYXR0YWNrcyFcbiYjMzQ7CiAjZGVmaW5lIFNQRUNUUkVfVjJfRUlCUlNfTEZFTkNFX0VCUEZfU01UX01TRyAmIzM0O1dBUk5JTkc6IFVucHJpdmlsZWdlZCBlQlBGIGlzIGVuYWJsZWQgd2l0aCBlSUJSUyYjNDM7TEZFTkNFIG1pdGlnYXRpb24gYW5kIFNNVCwgZGF0YSBsZWFrcyBwb3NzaWJsZSB2aWEgU3BlY3RyZSB2MiBCSEIgYXR0YWNrcyFcbiYjMzQ7CiYjNDM7I2RlZmluZSBTUEVDVFJFX1YyX0VJQlJTX1NOUF9QRVJGX01TRyAmIzM0O1dBUk5JTkc6IGVJQlJTIG1pdGlnYXRpb24gZW5hYmxlcyBBdXRvSUJSUyBvbiBTRVYtU05QIGVuYWJsZWQgQ1BVLCB0aGlzIG1heSBjYXVzZSBwZXJmb3JtYW5jZSBsb3NzXG4mIzM0OwogI2RlZmluZSBTUEVDVFJFX1YyX0lCUlNfUEVSRl9NU0cgJiMzNDtXQVJOSU5HOiBJQlJTIG1pdGlnYXRpb24gc2VsZWN0ZWQgb24gRW5oYW5jZWQgSUJSUyBDUFUsIHRoaXMgbWF5IGNhdXNlIHVubmVjZXNzYXJ5IHBlcmZvcm1hbmNlIGxvc3NcbiYjMzQ7CiAKICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTEwKQEAgLTIxNjUsMTEgJiM0MzsyMTczLDYgQEAgc3RhdGljIHZvaWQgX19pbml0IHNwZWN0cmVfdjJfc2VsZWN0X21pdGlnYXRpb24odm9pZCkKIAkJc3BlY3RyZV92Ml9jbWQgPSBTUEVDVFJFX1YyX0NNRF9BVVRPOwogCX0KIAotCWlmIChzcGVjdHJlX3YyX2NtZCA9PSBTUEVDVFJFX1YyX0NNRF9JQlJTICZhbXA7JmFtcDsgYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwpIHsKLQkJcHJfZXJyKCYjMzQ7SUJSUyBzZWxlY3RlZCBidXQgbm90IEludGVsIENQVS4gU3dpdGNoaW5nIHRvIEFVVE8gc2VsZWN0XG4mIzM0Oyk7Ci0JCXNwZWN0cmVfdjJfY21kID0gU1BFQ1RSRV9WMl9DTURfQVVUTzsKLQl9Ci0KIAlpZiAoc3BlY3RyZV92Ml9jbWQgPT0gU1BFQ1RSRV9WMl9DTURfSUJSUyAmYW1wOyZhbXA7ICFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSUJSUykpIHsKIAkJcHJfZXJyKCYjMzQ7SUJSUyBzZWxlY3RlZCBidXQgQ1BVIGRvZXNuJiMzOTt0IGhhdmUgSUJSUy4gU3dpdGNoaW5nIHRvIEFVVE8gc2VsZWN0XG4mIzM0Oyk7CiAJCXNwZWN0cmVfdjJfY21kID0gU1BFQ1RSRV9WMl9DTURfQVVUTzsKQEAgLTIxOTQsNyAmIzQzOzIxOTcsMTUgQEAgc3RhdGljIHZvaWQgX19pbml0IHNwZWN0cmVfdjJfc2VsZWN0X21pdGlnYXRpb24odm9pZCkKIAkJCWJyZWFrOwogCQlmYWxsdGhyb3VnaDsKIAljYXNlIFNQRUNUUkVfVjJfQ01EX0ZPUkNFOgotCQlpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0lCUlNfRU5IQU5DRUQpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogUHJlZmVyIHJldHBvbGluZSB3aGVuIFNOUCBpcyBlbmFibGVkIGJlY2F1c2UgQXV0b0lCUlMKJiM0MzsJCSAqIGRlZ3JhZGVzIGhvc3QgdXNlcnNwYWNlIGluZGlyZWN0IGJyYW5jaCBwZXJmb3JtYW5jZS4gIE9ubHkKJiM0MzsJCSAqIGRvIHNvIGlmIHJldHBvbGluZSBpcyBhY3R1YWxseSBidWlsdCBpbiwgb3RoZXJ3aXNlIEF1dG9JQlJTCiYjNDM7CQkgKiBpcyBiZXR0ZXIgdGhhbiBsZWF2aW5nIHRoZSBzeXN0ZW0gdW5taXRpZ2F0ZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSUJSU19FTkhBTkNFRCkgJmFtcDsmYW1wOwomIzQzOwkJICAgICEoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NFVl9TTlApICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgIElTX0VOQUJMRUQoQ09ORklHX01JVElHQVRJT05fUkVUUE9MSU5FKSkpIHsKIAkJCXNwZWN0cmVfdjJfZW5hYmxlZCA9IFNQRUNUUkVfVjJfRUlCUlM7CiAJCQlicmVhazsKIAkJfQpAQCAtMjI3NywxNSAmIzQzOzIyODgsMjQgQEAgc3RhdGljIHZvaWQgX19pbml0IHNwZWN0cmVfdjJfYXBwbHlfbWl0aWdhdGlvbih2b2lkKQogCWlmIChzcGVjdHJlX3YyX2VuYWJsZWQgPT0gU1BFQ1RSRV9WMl9FSUJSUyAmYW1wOyZhbXA7IHVucHJpdmlsZWdlZF9lYnBmX2VuYWJsZWQoKSkKIAkJcHJfZXJyKFNQRUNUUkVfVjJfRUlCUlNfRUJQRl9NU0cpOwogCi0JaWYgKHNwZWN0cmVfdjJfaW5faWJyc19tb2RlKHNwZWN0cmVfdjJfZW5hYmxlZCkpIHsKLQkJaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BVVRPSUJSUykpIHsKLQkJCW1zcl9zZXRfYml0KE1TUl9FRkVSLCBfRUZFUl9BVVRPSUJSUyk7Ci0JCX0gZWxzZSB7Ci0JCQl4ODZfc3BlY19jdHJsX2Jhc2UgfD0gU1BFQ19DVFJMX0lCUlM7Ci0JCQl1cGRhdGVfc3BlY19jdHJsKHg4Nl9zcGVjX2N0cmxfYmFzZSk7Ci0JCX0KJiM0MzsJLyoKJiM0MzsJICogT24gQXV0b0lCUlMtY2FwYWJsZSBDUFVzLCBlSUJSUyBpcyBlbmFibGVkIHRocm91Z2ggRUZFUi5BVVRPSUJSUwomIzQzOwkgKiByYXRoZXIgdGhhbiBTUEVDX0NUUkwuSUJSUy4gIExlZ2FjeSBzcGVjdHJlX3YyPWlicnMga2VlcHMgdXNpbmcKJiM0MzsJICogU1BFQ19DVFJMLklCUlMgZXZlbiB0aGVyZSwgYXMgaXQgbmVlZHMgdG8gYmUgdG9nZ2xlZCBvbiBrZXJuZWwKJiM0MzsJICogZW50cnkvZXhpdC4KJiM0MzsJICovCiYjNDM7CWlmIChzcGVjdHJlX3YyX2luX2VpYnJzX21vZGUoc3BlY3RyZV92Ml9lbmFibGVkKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVVUT0lCUlMpKSB7CiYjNDM7CQltc3Jfc2V0X2JpdChNU1JfRUZFUiwgX0VGRVJfQVVUT0lCUlMpOwomIzQzOwl9IGVsc2UgaWYgKHNwZWN0cmVfdjJfaW5faWJyc19tb2RlKHNwZWN0cmVfdjJfZW5hYmxlZCkpIHsKJiM0MzsJCXg4Nl9zcGVjX2N0cmxfYmFzZSB8PSBTUEVDX0NUUkxfSUJSUzsKJiM0MzsJCXVwZGF0ZV9zcGVjX2N0cmwoeDg2X3NwZWNfY3RybF9iYXNlKTsKIAl9CiAKJiM0MzsJaWYgKHNwZWN0cmVfdjJfaW5fZWlicnNfbW9kZShzcGVjdHJlX3YyX2VuYWJsZWQpICZhbXA7JmFtcDsKJiM0MzsJICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9TRVZfU05QKSkKJiM0MzsJCXByX3dhcm4oU1BFQ1RSRV9WMl9FSUJSU19TTlBfUEVSRl9NU0cpOwomIzQzOwogCXN3aXRjaCAoc3BlY3RyZV92Ml9lbmFibGVkKSB7CiAJY2FzZSBTUEVDVFJFX1YyX05PTkU6CiAJCXJldHVybjsKQEAgLTMyODQsNiAmIzQzOzMzMDQsMTcgQEAgdm9pZCBfX2luaXQgY3B1X3NlbGVjdF9taXRpZ2F0aW9ucyh2b2lkKQogCQl4ODZfc3BlY19jdHJsX2Jhc2UgJmFtcDs9IH5TUEVDX0NUUkxfTUlUSUdBVElPTlNfTUFTSzsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogTGlrZXdpc2UgZm9yIEVGRVIuQVVUT0lCUlM6IGhlYWRfNjQuUyBwcmVzZXJ2ZXMgdGhlIGluY29taW5nIEVGRVIKJiM0MzsJICogYml0cywgc28gYSBrZXhlYyBmcm9tIGEga2VybmVsIHRoYXQgcmFuIGluIEF1dG9JQlJTIG1vZGUgY2FycmllcyB0aGUKJiM0MzsJICogYml0IGludG8gdGhpcyBvbmUuICBDbGVhciBpdCBhbmQgbGV0IHRoZSBtaXRpZ2F0aW9uIHNlbGVjdGlvbiBiZWxvdwomIzQzOwkgKiByZWRpc2NvdmVyIGl0LiAgVGhpcyBhbHNvIHJ1bnMgYmVmb3JlIGluaXRfcmVhbF9tb2RlKCkgc25hcHNob3RzCiYjNDM7CSAqIEVGRVIgZm9yIHRoZSBBUCB0cmFtcG9saW5lLCBzbyBBUHMgaW5oZXJpdCB3aGF0ZXZlciB0aGlzIGtlcm5lbAomIzQzOwkgKiBzZXR0bGVzIG9uIHJhdGhlciB0aGFuIHRoZSBwcmV2aW91cyBrZXJuZWwmIzM5O3MgY2hvaWNlLgomIzQzOwkgKi8KJiM0MzsJaWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfQVVUT0lCUlMpKQomIzQzOwkJbXNyX2NsZWFyX2JpdChNU1JfRUZFUiwgX0VGRVJfQVVUT0lCUlMpOwomIzQzOwogCXg4Nl9hcmNoX2NhcF9tc3IgPSB4ODZfcmVhZF9hcmNoX2NhcF9tc3IoKTsKIAogCWNwdV9wcmludF9hdHRhY2tfdmVjdG9ycygpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKaW5kZXggYzczNTI4MjdmNDkxZC4uYzU2OGQ3NDI4MmE4NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCkBAIC0xNDk2LDEzICYjNDM7MTQ5Niw5IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBjcHVfc2V0X2J1Z19iaXRzKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIAkvKgogCSAqIEFNRCYjMzk7cyBBdXRvSUJSUyBpcyBlcXVpdmFsZW50IHRvIEludGVsJiMzOTtzIGVJQlJTIC0gdXNlIHRoZSBJbnRlbCBmZWF0dXJlCiAJICogZmxhZyBhbmQgcHJvdGVjdCBmcm9tIHZlbmRvci1zcGVjaWZpYyBidWdzIHZpYSB0aGUgd2hpdGVsaXN0LgotCSAqCi0JICogRG9uJiMzOTt0IHVzZSBBdXRvSUJSUyB3aGVuIFNOUCBpcyBlbmFibGVkIGJlY2F1c2UgaXQgZGVncmFkZXMgaG9zdAotCSAqIHVzZXJzcGFjZSBpbmRpcmVjdCBicmFuY2ggcGVyZm9ybWFuY2UuCiAJICovCiAJaWYgKCh4ODZfYXJjaF9jYXBfbXNyICZhbXA7IEFSQ0hfQ0FQX0lCUlNfQUxMKSB8fAotCSAgICAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9BVVRPSUJSUykgJmFtcDsmYW1wOwotCSAgICAgIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU0VWX1NOUCkpKSB7CiYjNDM7CSAgICBjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0FVVE9JQlJTKSkgewogCQlzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX0lCUlNfRU5IQU5DRUQpOwogCQlpZiAoIWNwdV9tYXRjaGVzKGNwdV92dWxuX3doaXRlbGlzdCwgTk9fRUlCUlNfUEJSU0IpICZhbXA7JmFtcDsKIAkJICAgICEoeDg2X2FyY2hfY2FwX21zciAmYW1wOyBBUkNIX0NBUF9QQlJTQl9OTykpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwppbmRleCA1NzA1NzIzZjFmNDEyLi41M2NjNmQwNDM4ODM2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKQEAgLTUwNiw3ICYjNDM7NTA2LDcgQEAgc3RhdGljIGludCBfX3Nldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghc25wX2FjdGl2ZSkKLQkJdmFsaWRfdm1zYV9mZWF0dXJlcyAmYW1wOz0gflNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDOwomIzQzOwkJdmFsaWRfdm1zYV9mZWF0dXJlcyAmYW1wOz0gflNWTV9TRVZfRkVBVF9TTlBfT05MWV9NQVNLOwogCiAJaWYgKGRhdGEtJmd0O3Ztc2FfZmVhdHVyZXMgJmFtcDsgfnZhbGlkX3Ztc2FfZmVhdHVyZXMpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzI1Nyw4ICYjNDM7MzI1NywyMyBAQCB2b2lkIF9faW5pdCBzZXZfaGFyZHdhcmVfc2V0dXAodm9pZCkKIAkgICAgY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9OT19ORVNURURfREFUQV9CUCkpCiAJCXNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUDsKIAotCWlmIChzZXZfc25wX2VuYWJsZWQgJmFtcDsmYW1wOyB0c2Nfa2h6ICZhbXA7JmFtcDsgY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TTlBfU0VDVVJFX1RTQykpCi0JCXNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQzsKJiM0MzsJaWYgKHNldl9zbnBfZW5hYmxlZCkgewomIzQzOwkJc2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIFVubGlrZSBTZWN1cmUgVFNDIGFuZCBJQlBCLW9uLUVudHJ5IGJlbG93LCBCVEIgSXNvbGF0aW9uIGhhcwomIzQzOwkJICogbm8gaG9zdCBlbnVtZXJhdGlvbiBiaXQgdG8gZ2F0ZSBvbjogdGhlIEFQTSBkZWZpbmVzIGl0IGFzCiYjNDM7CQkgKiBhcmNoaXRlY3R1cmFsbHkgcHJlc2VudCBvbiBldmVyeSBTRVYtU05QLWNhcGFibGUgcHJvY2Vzc29yLgomIzQzOwkJICogSWYgU05QIGlzIHN1cHBvcnRlZCwgQlRCIElzb2xhdGlvbiBpcyBhdmFpbGFibGUuCiYjNDM7CQkgKi8KJiM0MzsJCXNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfQlRCX0lTT0xBVElPTjsKJiM0MzsKJiM0MzsJCWlmICh0c2Nfa2h6ICZhbXA7JmFtcDsgY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TTlBfU0VDVVJFX1RTQykpCiYjNDM7CQkJc2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDOwomIzQzOwomIzQzOwkJaWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU05QX0lCUEJfT05fRU5UUlkpKQomIzQzOwkJCXNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfSUJQQl9PTl9FTlRSWTsKJiM0MzsJfQogfQogCiB2b2lkIHNldl9oYXJkd2FyZV91bnNldHVwKHZvaWQpCmRpZmYgLS1naXQgYS90b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oIGIvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaAppbmRleCA2NTQ3YzBhZWU0NWI3Li42MzRjZDA5MzY2ZGE2IDEwMDY0NAotLS0gYS90b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgKQEAgLTQ2MCw2ICYjNDM7NDYwLDcgQEAKICNkZWZpbmUgWDg2X0ZFQVRVUkVfQUxMT1dFRF9TRVZfRkVBVFVSRVMgKDE5KjMyJiM0MzsyNykgLyogQWxsb3dlZCBTRVYgRmVhdHVyZXMgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfU1ZTTQkJKDE5KjMyJiM0MzsyOCkgLyogJiMzNDtzdnNtJiMzNDsgU1ZTTSBwcmVzZW50ICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0hWX0lOVVNFX1dSX0FMTE9XRUQJKDE5KjMyJiM0MzszMCkgLyogQWxsb3cgV3JpdGUgdG8gaW4tdXNlIGh5cGVydmlzb3Itb3duZWQgcGFnZXMgKi8KJiM0MzsjZGVmaW5lIFg4Nl9GRUFUVVJFX1NOUF9JQlBCX09OX0VOVFJZCSgxOSozMiYjNDM7MzEpIC8qIFNFVi1TTlAgSUJQQiBvbiBWTSBFbnRyeSAqLwogCiAvKiBBTUQtZGVmaW5lZCBFeHRlbmRlZCBGZWF0dXJlIDIgRUFYLCBDUFVJRCBsZXZlbCAweDgwMDAwMDIxIChFQVgpLCB3b3JkIDIwICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX05PX05FU1RFRF9EQVRBX0JQCSgyMCozMiYjNDM7IDApIC8qIE5vIE5lc3RlZCBEYXRhIEJyZWFrcG9pbnRzICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYwppbmRleCA4N2JmZjRmYmI3ZWQ1Li4zZjU5MmUyNDVhNjZkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMKQEAgLTEzLDE3ICYjNDM7MTMsMjUgQEAKICNpbmNsdWRlICYjMzQ7c3ZtX3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKIAotI2RlZmluZSBTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUCAzMnUKJiM0MzsjZGVmaW5lIFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFCQlCSVRfVUxMKDApCiYjNDM7I2RlZmluZSBTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUAkJQklUX1VMTCg1KQomIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX0JUQl9JU09MQVRJT04JQklUX1VMTCg3KQomIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0MJCUJJVF9VTEwoOSkKJiM0MzsjZGVmaW5lIFNWTV9TRVZfRkVBVF9JQlBCX09OX0VOVFJZCUJJVF9VTEwoMjEpCiYjNDM7CiYjNDM7LyogRmVhdHVyZXMgdmFsaWQgb25seSBmb3IgU05QIGd1ZXN0cywgcmVqZWN0ZWQgZm9yIFNFVi1FUyBhbmQgYmVsb3cuICovCiYjNDM7I2RlZmluZSBTTlBfT05MWV9GRUFUVVJFUwkJKFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFIHwgXAomIzQzOwkJCQkJIFNWTV9TRVZfRkVBVF9CVEJfSVNPTEFUSU9OIHwgXAomIzQzOwkJCQkJIFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDIHwgXAomIzQzOwkJCQkJIFNWTV9TRVZfRkVBVF9JQlBCX09OX0VOVFJZKQogCiAvKgogICogU29tZSBmZWF0dXJlcyBtYXkgaGF2ZSBoaWRkZW4gZGVwZW5kZW5jaWVzLCBvciBtYXkgb25seSB3b3JrCiAgKiBmb3IgY2VydGFpbiBWTSB0eXBlcy4gIEVyciBvbiB0aGUgc2lkZSBvZiBzYWZldHkgYW5kIGRvbiYjMzk7dAogICogZXhwZWN0IHRoYXQgYWxsIHN1cHBvcnRlZCBmZWF0dXJlcyBjYW4gYmUgcGFzc2VkIG9uZSBieSBvbmUKICAqIHRvIEtWTV9TRVZfSU5JVDIuCi0gKgotICogKFdlbGwsIHJpZ2h0IG5vdyB0aGVyZSYjMzk7cyBvbmx5IG9uZS4uLikKICAqLwotI2RlZmluZSBLTk9XTl9GRUFUVVJFUyBTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUAomIzQzOyNkZWZpbmUgS05PV05fRkVBVFVSRVMJCShTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUCB8IFNOUF9PTkxZX0ZFQVRVUkVTKQogCiBpbnQga3ZtX2ZkOwogdTY0IHN1cHBvcnRlZF92bXNhX2ZlYXR1cmVzOwpAQCAtMTA4LDcgJiM0MzsxMTYsNyBAQCB2b2lkIHRlc3RfZmVhdHVyZXModTMyIHZtX3R5cGUsIHU2NCBzdXBwb3J0ZWRfZmVhdHVyZXMpCiAJCWlmICghKHN1cHBvcnRlZF9mZWF0dXJlcyAmYW1wOyBCSVRfVUxMKGkpKSkKIAkJCXRlc3RfaW5pdDJfaW52YWxpZCh2bV90eXBlLAogCQkJCSZhbXA7KHN0cnVjdCBrdm1fc2V2X2luaXQpeyAudm1zYV9mZWF0dXJlcyA9IEJJVF9VTEwoaSkgfSwKLQkJCQkmIzM0O3Vua25vd24gZmVhdHVyZSYjMzQ7KTsKJiM0MzsJCQkJJiMzNDt1bmtub3duIG9yIHVuc3VwcG9ydGVkIGZlYXR1cmUgZm9yIFZNIHR5cGUmIzM0Oyk7CiAJCWVsc2UgaWYgKEtOT1dOX0ZFQVRVUkVTICZhbXA7IEJJVF9VTEwoaSkpCiAJCQl0ZXN0X2luaXQyKHZtX3R5cGUsCiAJCQkJJmFtcDsoc3RydWN0IGt2bV9zZXZfaW5pdCl7IC52bXNhX2ZlYXR1cmVzID0gQklUX1VMTChpKSB9KTsKQEAgLTE1Nyw3ICYjNDM7MTY1LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCXRlc3RfZmVhdHVyZXMoS1ZNX1g4Nl9TRVZfVk0sIDApOwogCWlmIChoYXZlX3Nldl9lcykKLQkJdGVzdF9mZWF0dXJlcyhLVk1fWDg2X1NFVl9FU19WTSwgc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMpOwomIzQzOwkJdGVzdF9mZWF0dXJlcyhLVk1fWDg2X1NFVl9FU19WTSwgc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgJmFtcDsgflNOUF9PTkxZX0ZFQVRVUkVTKTsKIAlpZiAoaGF2ZV9zbnApCiAJCXRlc3RfZmVhdHVyZXMoS1ZNX1g4Nl9TTlBfVk0sIHN1cHBvcnRlZF92bXNhX2ZlYXR1cmVzKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI3MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQ2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIENoYW5nZXMgZm9yIHg4NiBDUFUgYW5kIEtWTSBTRVYgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0d2Vha2luZyB0aGUgeDg2IENQVSBmZWF0dXJlcyBhbmQgdGhlIEtWTSBTRVYgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gVGhlIGNoYW5nZXMgYXJlIHNwcmVhZCBhY3Jvc3MgYSBidW5jaCBvZiBmaWxlczogYGFyY2gveDg2L0tjb25maWdgLCBzb21lIGhlYWRlciBmaWxlcyBsaWtlIGBjcHVmZWF0dXJlcy5oYCBhbmQgYHN2bS5oYCwgYW5kIHRoZW4gaW50byBzb21lIGtlcm5lbCBjb2RlLCBgYnVncy5jYCwgYGNvbW1vbi5jYCwgYW5kIGBzZXYuY2AsIGFsb25nIHdpdGggYSBmZXcgc2VsZnRlc3RzLiBTZWVtcyBsaWtlIGEgcHJldHR5IGZvY3VzZWQgdXBkYXRlLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNjYW4gZm9yIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGJlIG1pc3VzZWQsIGFuZCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1pZ2h0IGJlIGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4KCkl0IGxvb2tzIGxpa2UgdGhlIG1lYXQgb2YgdGhlIHBhdGNoIGlzIGFib3V0IENQVSBtaXRpZ2F0aW9uIGZsYWdzIOKAkyB0aGluZ3MgbGlrZSBJQlJTLCBBdXRvSUJSUywgU0VWLVNOUCwgYW5kIElCUEIgb24gZW50cnkuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhhdCBgc2V2LmNgIGZpbGUgbm93LCBzcGVjaWZpY2FsbHkgdGhhdCBzbmlwcGV0IGFyb3VuZCBsaW5lIDUwNi4gSSBzZWUgdGhleSYjMzk7dmUgY2hhbmdlZCBob3cgYHZhbGlkX3Ztc2FfZmVhdHVyZXNgIGlzIGhhbmRsZWQuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgbWFza2luZyBvdXQgYFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDYCBpZiBTTlAgaXNuJiMzOTt0IGFjdGl2ZS4gQnV0IHRoZW4gSSYjMzk7bSBzZWVpbmcgYFNWTV9TRVZfRkVBVF9TTlBfT05MWV9NQVNLYCB3aGljaCBzZWVtcyBsaWtlIHNvbWV0aGluZyBpbnRlcmVzdGluZyB0byBsb29rIGludG8uCgpIb2xkIG9uIGEgbWludXRlLi4uIGBkYXRhYCBpcyBhIHBvaW50ZXIgdG8gYHN0cnVjdCBrdm1fc2V2X2luaXRgLCBhbmQgaXQmIzM5O3MgYmVpbmcgY29waWVkIGZyb20gdXNlciBzcGFjZSwgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LiBEb2VzIHRoaXMgZnVuY3Rpb24sIG9yIGFueSBzdWJzZXF1ZW50IGNhbGxzIHRvIHRoaXMsIHJldHVybiBhbnl0aGluZyB0byB1c2VyIHNwYWNlPyBJIG5lZWQgdG8gdHJhY2sgdGhlIGRhdGEgZmxvdy4gVGhhdCBjb3VsZCBiZSBhIGtleSBwb2ludCBvZiBhdHRhY2sgaWYgbm90IGNvcnJlY3RseSBoYW5kbGVkLiBMZXQgbWUgbG9vayBhdCB0aGUgYF9fc2V2X2d1ZXN0X2luaXRgIGZ1bmN0aW9uIGFuZCBpdHMgY2FsbGVyLCB3aGljaCBpcyBgc2V2X2d1ZXN0X2luaXRgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBJIG5lZWQgdG8gc2VlIGlmIGFueSBvZiB0aGF0IHVzZXItc3BhY2Utc3VwcGxpZWQgZGF0YSBpcyBiZWluZyB1c2VkIHRvIHdyaXRlIGJhY2sgdG8gdXNlciBzcGFjZS4gSXQgY291bGQgYmUgYW4gaW50ZXJlc3RpbmcgdmVjdG9yIHRvIGV4cGxvaXQgaWYgdGhleSYjMzk7cmUgbm90IGNhcmVmdWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc2V2X2d1ZXN0X2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDc3PXN0YXRpYyB2b2lkIHNucF9ndWVzdF9yZXFfY2xlYW51cChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTAtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ5MTpzdGF0aWMgaW50IF9fc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5Mi1cdFx0XHQgICAgc3RydWN0IGt2bV9zZXZfaW5pdCAqZGF0YSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTU4MT1zdGF0aWMgaW50IHNldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjAwLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MDE6XHRyZXR1cm4gX19zZXZfZ3Vlc3RfaW5pdChrdm0sIGFyZ3AsIFx1MDAyNmRhdGEsIHZtX3R5cGUpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MDItfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NjA0PXN0YXRpYyBpbnQgc2V2X2d1ZXN0X2luaXQyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjE4LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MTk6XHRyZXR1cm4gX19zZXZfZ3Vlc3RfaW5pdChrdm0sIGFyZ3AsIFx1MDAyNmRhdGEsIGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MjAtfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzM0OD12b2lkIHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMzNTQtXHQgKlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMzU1Olx0ICogQ2hlY2tpbmcgZm9yIFNFViYjNDM7IG91dHNpZGUgb2Yga3ZtLVx1MDAzZWxvY2sgaXMgc2FmZSBhcyBfX3Nldl9ndWVzdF9pbml0KClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzM1Ni1cdCAqIGNhbiBvbmx5IGJlIGRvbmUgYmVmb3JlIHZDUFVzIGFyZSBjcmVhdGVkLCBjYWNoZXMgY2FuIGJlIGluY29oZXJlbnRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgwMgoJCQkJCQkJb3V0cHV0OiAxMzYKCQkJCQkJCXRob3VnaHRzOiAyNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS01TQU4gTmVjZXNzaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZm9jdXNpbmcgb24gQ1BVIGZlYXR1cmUgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBTRVYtU05QIGFuZCBJQlJTLiBUaGUgYmVhdXR5IG9mIGl0IGlzIHRoYXQgaXQmIzM5O3MgKnB1cmVseSogYWJvdXQgdGhlIGxvZ2ljIGZvciBDUFUgbWl0aWdhdGlvbiBzZWxlY3Rpb24gYW5kIHZhbGlkYXRpbmcgS1ZNIFNFViBpbml0aWFsaXphdGlvbiBmZWF0dXJlcy4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdGhhdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLiBObyBuZXcgYWxsb2NhdGlvbnMgYXJlIGhhcHBlbmluZywgYW5kIGNydWNpYWxseSwgSSYjMzk7bSBzZWVpbmcgbm90aGluZyB0aGF0IGhpbnRzIGF0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgZGF0YS0mZ3Q7dm1zYV9mZWF0dXJlc2AgYml0LiBBaCwgcmlnaHQsIHRoYXQgY29tZXMgZnJvbSB0aGUgYHN0cnVjdCBrdm1fc2V2X2luaXRgIHN0cnVjdHVyZSwgd2hpY2ggaXMgY29waWVkIGZyb20gdXNlciBzcGFjZS4gQW5kIEkmIzM5O20gbG9va2luZyByaWdodCBhdCB0aGUgYGNvcHlfZnJvbV91c2VyYCBjYWxsIGluIGBzZXZfZ3Vlc3RfaW5pdDJgOgoKYGBgYwpzdGF0aWMgaW50IHNldl9ndWVzdF9pbml0MihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncCkKewogICAgc3RydWN0IGt2bV9zZXZfaW5pdCBkYXRhOwoKICAgIGlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2RhdGEsICh2b2lkIF9fdXNlciAqKSh1aW50cHRyX3QpYXJncC0mZ3Q7ZGF0YSwgc2l6ZW9mKGRhdGEpKSkKICAgICAgICByZXR1cm4gLUVGQVVMVDsKCiAgICByZXR1cm4gX19zZXZfZ3Vlc3RfaW5pdChrdm0sIGFyZ3AsICZhbXA7ZGF0YSwga3ZtLSZndDthcmNoLnZtX3R5cGUpOwp9CmBgYAoKT2theSwgZ29vZC4gYGRhdGFgIGlzICpmdWxseSogaW5pdGlhbGl6ZWQgYnkgdGhhdCBgY29weV9mcm9tX3VzZXJgIGNhbGwuIFRoZXJlJiMzOTtzIG5vIHdheSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGxlYWtlZCB0aHJvdWdoIHRoYXQgcGF0aC4gVGhpcyBpcyBzb2xpZC4KClRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpcyB0aGF0IEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gSSYjMzk7bSBnb2luZyB0byBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBDUFUgbWl0aWdhdGlvbiBzZWxlY3Rpb24gbG9naWMgKElCUlMsIEF1dG9JQlJTLCBTRVYtU05QKSBhbmQgS1ZNIFNFViBpbml0aWFsaXphdGlvbiBmZWF0dXJlIHZhbGlkYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuIFRoZSBtb2RpZmllZCBkYXRhIHN0cnVjdHVyZXMgKGxpa2UgYHN0cnVjdCBrdm1fc2V2X2luaXRgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBgY29weV9mcm9tX3VzZXJgIGJlZm9yZSBiZWluZyByZWFkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgZXhwb3NlZCBieSB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQ1BVIG1pdGlnYXRpb24gc2VsZWN0aW9uIGxvZ2ljIChJQlJTLCBBdXRvSUJSUywgU0VWLVNOUCkgYW5kIEtWTSBTRVYgaW5pdGlhbGl6YXRpb24gZmVhdHVyZSB2YWxpZGF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLiBUaGUgbW9kaWZpZWQgZGF0YSBzdHJ1Y3R1cmVzIChsaWtlIGBzdHJ1Y3Qga3ZtX3Nldl9pbml0YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGZyb20gdXNlciBzcGFjZSB2aWEgYGNvcHlfZnJvbV91c2VyYCBiZWZvcmUgYmVpbmcgcmVhZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIGV4cG9zZWQgYnkgdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTc6MTIuMjI0NzcwNzkzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2ODkyMTU2Mzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIkNSWVBUT19ERVZfQ0NQX0REXCIsXG4gICAgXCJDUllQVE9fREVWX1NQX1BTUFwiLFxuICAgIFwiQU1EX0lPTU1VXCIsXG4gICAgXCJJT01NVV9TVVBQT1JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2V2X21lbV9lbmNfaW9jdGxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIENQVSBtaXRpZ2F0aW9uIHNlbGVjdGlvbiBsb2dpYyAoSUJSUywgQXV0b0lCUlMsIFNFVi1TTlApIGFuZCBLVk0gU0VWIGluaXRpYWxpemF0aW9uIGZlYXR1cmUgdmFsaWRhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIG1vZGlmaWVkIGRhdGEgc3RydWN0dXJlcyAobGlrZSBgc3RydWN0IGt2bV9zZXZfaW5pdGApIGFyZSBmdWxseSBpbml0aWFsaXplZCBmcm9tIHVzZXIgc3BhY2UgdmlhIGBjb3B5X2Zyb21fdXNlcmAgYmVmb3JlIGJlaW5nIHJlYWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZhbGlkYXRpb24gb2YgYHZtc2FfZmVhdHVyZXNgIGR1cmluZyBLVk0gU0VWIGd1ZXN0IGluaXRpYWxpemF0aW9uIChgS1ZNX1NFVl9JTklUMmAgaW9jdGwpIGFuZCBhZGRzIG5ldyBTRVYtU05QIGZlYXR1cmVzIHRvIHRoZSBzdXBwb3J0ZWQgbGlzdC4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZSBuZXcgZmVhdHVyZSB2YWxpZGF0aW9uIGxvZ2ljIGRvZXNuJ3QgaW50cm9kdWNlIGJ1Z3MuIFRoZSBDUFUgYnVnIG1pdGlnYXRpb24gY2hhbmdlcyBhcmUgYm9vdC10aW1lIGxvZ2ljIGFuZCBub3QgZGlyZWN0bHkgZnV6emFibGUgZnJvbSB1c2Vyc3BhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU3OjEyLjIyNDc3NTMyM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMDA3NTg2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDliMDBmM2Y2NjM4NjU2ZjE1MGY4ZDk4YWY2ZTRjOWUwNDI2ODcwOWNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMjYgMjI6NTc6MTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWdcXG5pbmRleCAxNWZkOWVjNWVjYWNiLi5iOWE3ZGRlZjRjYmFiIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L0tjb25maWdcXG4rKysgYi9hcmNoL3g4Ni9LY29uZmlnXFxuQEAgLTI0OTYsMTIgKzI0OTYsMTMgQEAgY29uZmlnIE1JVElHQVRJT05fSUJQQl9FTlRSWVxcbiBcXG4gY29uZmlnIE1JVElHQVRJT05fSUJSU19FTlRSWVxcbiBcXHRib29sIFxcXCJFbmFibGUgSUJSUyBvbiBrZXJuZWwgZW50cnlcXFwiXFxuLVxcdGRlcGVuZHMgb24gQ1BVX1NVUF9JTlRFTCBcXHUwMDI2XFx1MDAyNiBYODZfNjRcXG4rXFx0ZGVwZW5kcyBvbiBYODZfNjRcXG4gXFx0ZGVmYXVsdCB5XFxuIFxcdGhlbHBcXG4gXFx0ICBDb21waWxlIHRoZSBrZXJuZWwgd2l0aCBzdXBwb3J0IGZvciB0aGUgc3BlY3RyZV92Mj1pYnJzIG1pdGlnYXRpb24uXFxuLVxcdCAgVGhpcyBtaXRpZ2F0ZXMgYm90aCBzcGVjdHJlX3YyIGFuZCByZXRibGVlZCBhdCBncmVhdCBjb3N0IHRvXFxuLVxcdCAgcGVyZm9ybWFuY2UuXFxuK1xcdCAgVGhpcyBtaXRpZ2F0ZXMgc3BlY3RyZV92MiBhdCBncmVhdCBjb3N0IHRvIHBlcmZvcm1hbmNlLiAgT24gSW50ZWwsXFxuK1xcdCAgaXQgYWxzbyBtaXRpZ2F0ZXMgcmV0YmxlZWQuICBPbiBBTUQvSHlnb24sIHJldGJsZWVkIG1pdGlnYXRpb25cXG4rXFx0ICByZXF1aXJlcyBNSVRJR0FUSU9OX1VOUkVUX0VOVFJZIG9yIE1JVElHQVRJT05fSUJQQl9FTlRSWS5cXG4gXFxuIGNvbmZpZyBNSVRJR0FUSU9OX1NSU09cXG4gXFx0Ym9vbCBcXFwiTWl0aWdhdGUgc3BlY3VsYXRpdmUgUkFTIG92ZXJmbG93IG9uIEFNRFxcXCJcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcXG5pbmRleCBmNzBlZTc0YjVmOTIxLi4zYWFkMmI1M2Y1OWJmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXFxuQEAgLTQ3Miw2ICs0NzIsNyBAQFxcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0FMTE9XRURfU0VWX0ZFQVRVUkVTICgxOSozMisyNykgLyogQWxsb3dlZCBTRVYgRmVhdHVyZXMgKi9cXG4gI2RlZmluZSBYODZfRkVBVFVSRV9TVlNNXFx0XFx0KDE5KjMyKzI4KSAvKiBcXFwic3ZzbVxcXCIgU1ZTTSBwcmVzZW50ICovXFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfSFZfSU5VU0VfV1JfQUxMT1dFRFxcdCgxOSozMiszMCkgLyogQWxsb3cgV3JpdGUgdG8gaW4tdXNlIGh5cGVydmlzb3Itb3duZWQgcGFnZXMgKi9cXG4rI2RlZmluZSBYODZfRkVBVFVSRV9TTlBfSUJQQl9PTl9FTlRSWVxcdCgxOSozMiszMSkgLyogU0VWLVNOUCBJQlBCIG9uIFZNIEVudHJ5ICovXFxuIFxcbiAvKiBBTUQtZGVmaW5lZCBFeHRlbmRlZCBGZWF0dXJlIDIgRUFYLCBDUFVJRCBsZXZlbCAweDgwMDAwMDIxIChFQVgpLCB3b3JkIDIwICovXFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfTk9fTkVTVEVEX0RBVEFfQlBcXHQoMjAqMzIrIDApIC8qIE5vIE5lc3RlZCBEYXRhIEJyZWFrcG9pbnRzICovXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcXG5pbmRleCBhYTYzNDMxYmE5MmMzLi4wZGEyMjM0YjcxYzY5IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcXG5AQCAtMzA1LDExICszMDUsMTggQEAgc3RhdGljX2Fzc2VydCgoQVZJQ19NQVhfUEhZU0lDQUxfSUQgXFx1MDAyNiBBVklDX1BIWVNJQ0FMX01BWF9JTkRFWF9NQVNLKSA9PSBBVklDX01BWF9cXG4gc3RhdGljX2Fzc2VydCgoWDJBVklDX01BWF9QSFlTSUNBTF9JRCBcXHUwMDI2IEFWSUNfUEhZU0lDQUxfTUFYX0lOREVYX01BU0spID09IFgyQVZJQ19NQVhfUEhZU0lDQUxfSUQpO1xcbiBzdGF0aWNfYXNzZXJ0KChYMkFWSUNfNEtfTUFYX1BIWVNJQ0FMX0lEIFxcdTAwMjYgQVZJQ19QSFlTSUNBTF9NQVhfSU5ERVhfTUFTSykgPT0gWDJBVklDXzRLX01BWF9QSFlTSUNBTF9JRCk7XFxuIFxcbi0jZGVmaW5lIFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFXFx0XFx0XFx0XFx0QklUKDApXFxuLSNkZWZpbmUgU1ZNX1NFVl9GRUFUX1JFU1RSSUNURURfSU5KRUNUSU9OXFx0XFx0QklUKDMpXFxuLSNkZWZpbmUgU1ZNX1NFVl9GRUFUX0FMVEVSTkFURV9JTkpFQ1RJT05cXHRcXHRCSVQoNClcXG4tI2RlZmluZSBTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUFxcdFxcdFxcdFxcdEJJVCg1KVxcbi0jZGVmaW5lIFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDXFx0XFx0XFx0XFx0QklUKDkpXFxuKyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkVcXHRcXHRcXHRcXHRCSVRfVUxMKDApXFxuKyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1JFU1RSSUNURURfSU5KRUNUSU9OXFx0XFx0QklUX1VMTCgzKVxcbisjZGVmaW5lIFNWTV9TRVZfRkVBVF9BTFRFUk5BVEVfSU5KRUNUSU9OXFx0XFx0QklUX1VMTCg0KVxcbisjZGVmaW5lIFNWTV9TRVZfRkVBVF9ERUJVR19TV0FQXFx0XFx0XFx0XFx0QklUX1VMTCg1KVxcbisjZGVmaW5lIFNWTV9TRVZfRkVBVF9CVEJfSVNPTEFUSU9OXFx0XFx0XFx0QklUX1VMTCg3KVxcbisjZGVmaW5lIFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDXFx0XFx0XFx0XFx0QklUX1VMTCg5KVxcbisjZGVmaW5lIFNWTV9TRVZfRkVBVF9JQlBCX09OX0VOVFJZXFx0XFx0XFx0QklUX1VMTCgyMSlcXG4rXFxuKyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NOUF9PTkxZX01BU0tcXHQoU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkUgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBTVk1fU0VWX0ZFQVRfQlRCX0lTT0xBVElPTiB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgU1ZNX1NFVl9GRUFUX0lCUEJfT05fRU5UUlkpXFxuIFxcbiAjZGVmaW5lIFZNQ0JfQUxMT1dFRF9TRVZfRkVBVFVSRVNfVkFMSURcXHRcXHRcXHRCSVRfVUxMKDYzKVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1Z3MuY1xcbmluZGV4IDU2ZWFjNTYxMWMzMTguLjA4NzgwZTBkMzdlYzcgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmNcXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1Z3MuY1xcbkBAIC0xMzA1LDcgKzEzMDUsMTQgQEAgc3RhdGljIHZvaWQgX19pbml0IHJldGJsZWVkX3VwZGF0ZV9taXRpZ2F0aW9uKHZvaWQpXFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBMZXQgSUJSUyB0cnVtcCBhbGwgb24gSW50ZWwgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGVmZmVjdHMgb2YgdGhlXFxuLVxcdCAqIHJldGJsZWVkPSBjbWRsaW5lIG9wdGlvbiBleGNlcHQgZm9yIGNhbGwgZGVwdGggYmFzZWQgc3R1ZmZpbmdcXG4rXFx0ICogcmV0YmxlZWQ9IGNtZGxpbmUgb3B0aW9uIGV4Y2VwdCBmb3IgY2FsbCBkZXB0aCBiYXNlZCBzdHVmZmluZy5cXG4rXFx0ICpcXG4rXFx0ICogT24gQU1EL0h5Z29uLCBsZWdhY3kgU1BFQ19DVFJMLklCUlMgdG9nZ2xpbmcgZG9lcyBub3QgbWl0aWdhdGUgdGhlXFxuK1xcdCAqIEJyYW5jaCBUeXBlIENvbmZ1c2lvbiBSRVRCbGVlZCB2YXJpYW50OiBSRVQgcHJlZGljdGlvbiBjb21lcyBmcm9tXFxuK1xcdCAqIHRoZSBSZXR1cm4gQWRkcmVzcyBQcmVkaWN0b3IsIG5vdCB0aGUgcmVzdHJpY3RlZCBpbmRpcmVjdCBicmFuY2hcXG4rXFx0ICogcHJlZGljdG9ycyB0aGF0IElCUlMgY29udHJvbHMuICBTbyBrZWVwIHRoaXMgSW50ZWwtb25seSBhbmQgbGVhdmVcXG4rXFx0ICogQU1EJ3Mgc29mdHdhcmUgcmV0dXJuLXRodW5rIG1pdGlnYXRpb24gKFVOUkVUL0lCUEIpIGluIHBsYWNlIGV2ZW5cXG4rXFx0ICogd2hlbiBzcGVjdHJlX3YyPWlicnMgaXMgc2VsZWN0ZWQuXFxuIFxcdCAqL1xcbiBcXHRpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwpIHtcXG4gXFx0XFx0c3dpdGNoIChzcGVjdHJlX3YyX2VuYWJsZWQpIHtcXG5AQCAtMTY3Miw2ICsxNjc5LDcgQEAgc3RhdGljIGlubGluZSBib29sIHJldHBvbGluZV9zZXFfZW5hYmxlZCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxcbiAjZGVmaW5lIFNQRUNUUkVfVjJfTEZFTkNFX01TRyBcXFwiV0FSTklORzogTEZFTkNFIG1pdGlnYXRpb24gaXMgbm90IHJlY29tbWVuZGVkIGZvciB0aGlzIENQVSwgZGF0YSBsZWFrcyBwb3NzaWJsZSFcXFxcblxcXCJcXG4gI2RlZmluZSBTUEVDVFJFX1YyX0VJQlJTX0VCUEZfTVNHIFxcXCJXQVJOSU5HOiBVbnByaXZpbGVnZWQgZUJQRiBpcyBlbmFibGVkIHdpdGggZUlCUlMgb24sIGRhdGEgbGVha3MgcG9zc2libGUgdmlhIFNwZWN0cmUgdjIgQkhCIGF0dGFja3MhXFxcXG5cXFwiXFxuICNkZWZpbmUgU1BFQ1RSRV9WMl9FSUJSU19MRkVOQ0VfRUJQRl9TTVRfTVNHIFxcXCJXQVJOSU5HOiBVbnByaXZpbGVnZWQgZUJQRiBpcyBlbmFibGVkIHdpdGggZUlCUlMrTEZFTkNFIG1pdGlnYXRpb24gYW5kIFNNVCwgZGF0YSBsZWFrcyBwb3NzaWJsZSB2aWEgU3BlY3RyZSB2MiBCSEIgYXR0YWNrcyFcXFxcblxcXCJcXG4rI2RlZmluZSBTUEVDVFJFX1YyX0VJQlJTX1NOUF9QRVJGX01TRyBcXFwiV0FSTklORzogZUlCUlMgbWl0aWdhdGlvbiBlbmFibGVzIEF1dG9JQlJTIG9uIFNFVi1TTlAgZW5hYmxlZCBDUFUsIHRoaXMgbWF5IGNhdXNlIHBlcmZvcm1hbmNlIGxvc3NcXFxcblxcXCJcXG4gI2RlZmluZSBTUEVDVFJFX1YyX0lCUlNfUEVSRl9NU0cgXFxcIldBUk5JTkc6IElCUlMgbWl0aWdhdGlvbiBzZWxlY3RlZCBvbiBFbmhhbmNlZCBJQlJTIENQVSwgdGhpcyBtYXkgY2F1c2UgdW5uZWNlc3NhcnkgcGVyZm9ybWFuY2UgbG9zc1xcXFxuXFxcIlxcbiBcXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbkBAIC0yMTY1LDExICsyMTczLDYgQEAgc3RhdGljIHZvaWQgX19pbml0IHNwZWN0cmVfdjJfc2VsZWN0X21pdGlnYXRpb24odm9pZClcXG4gXFx0XFx0c3BlY3RyZV92Ml9jbWQgPSBTUEVDVFJFX1YyX0NNRF9BVVRPO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoc3BlY3RyZV92Ml9jbWQgPT0gU1BFQ1RSRV9WMl9DTURfSUJSUyBcXHUwMDI2XFx1MDAyNiBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCkge1xcbi1cXHRcXHRwcl9lcnIoXFxcIklCUlMgc2VsZWN0ZWQgYnV0IG5vdCBJbnRlbCBDUFUuIFN3aXRjaGluZyB0byBBVVRPIHNlbGVjdFxcXFxuXFxcIik7XFxuLVxcdFxcdHNwZWN0cmVfdjJfY21kID0gU1BFQ1RSRV9WMl9DTURfQVVUTztcXG4tXFx0fVxcbi1cXG4gXFx0aWYgKHNwZWN0cmVfdjJfY21kID09IFNQRUNUUkVfVjJfQ01EX0lCUlMgXFx1MDAyNlxcdTAwMjYgIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9JQlJTKSkge1xcbiBcXHRcXHRwcl9lcnIoXFxcIklCUlMgc2VsZWN0ZWQgYnV0IENQVSBkb2Vzbid0IGhhdmUgSUJSUy4gU3dpdGNoaW5nIHRvIEFVVE8gc2VsZWN0XFxcXG5cXFwiKTtcXG4gXFx0XFx0c3BlY3RyZV92Ml9jbWQgPSBTUEVDVFJFX1YyX0NNRF9BVVRPO1xcbkBAIC0yMTk0LDcgKzIxOTcsMTUgQEAgc3RhdGljIHZvaWQgX19pbml0IHNwZWN0cmVfdjJfc2VsZWN0X21pdGlnYXRpb24odm9pZClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGZhbGx0aHJvdWdoO1xcbiBcXHRjYXNlIFNQRUNUUkVfVjJfQ01EX0ZPUkNFOlxcbi1cXHRcXHRpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0lCUlNfRU5IQU5DRUQpKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFByZWZlciByZXRwb2xpbmUgd2hlbiBTTlAgaXMgZW5hYmxlZCBiZWNhdXNlIEF1dG9JQlJTXFxuK1xcdFxcdCAqIGRlZ3JhZGVzIGhvc3QgdXNlcnNwYWNlIGluZGlyZWN0IGJyYW5jaCBwZXJmb3JtYW5jZS4gIE9ubHlcXG4rXFx0XFx0ICogZG8gc28gaWYgcmV0cG9saW5lIGlzIGFjdHVhbGx5IGJ1aWx0IGluLCBvdGhlcndpc2UgQXV0b0lCUlNcXG4rXFx0XFx0ICogaXMgYmV0dGVyIHRoYW4gbGVhdmluZyB0aGUgc3lzdGVtIHVubWl0aWdhdGVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9JQlJTX0VOSEFOQ0VEKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIShib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU0VWX1NOUCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICAgSVNfRU5BQkxFRChDT05GSUdfTUlUSUdBVElPTl9SRVRQT0xJTkUpKSkge1xcbiBcXHRcXHRcXHRzcGVjdHJlX3YyX2VuYWJsZWQgPSBTUEVDVFJFX1YyX0VJQlJTO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbkBAIC0yMjc3LDE1ICsyMjg4LDI0IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzcGVjdHJlX3YyX2FwcGx5X21pdGlnYXRpb24odm9pZClcXG4gXFx0aWYgKHNwZWN0cmVfdjJfZW5hYmxlZCA9PSBTUEVDVFJFX1YyX0VJQlJTIFxcdTAwMjZcXHUwMDI2IHVucHJpdmlsZWdlZF9lYnBmX2VuYWJsZWQoKSlcXG4gXFx0XFx0cHJfZXJyKFNQRUNUUkVfVjJfRUlCUlNfRUJQRl9NU0cpO1xcbiBcXG4tXFx0aWYgKHNwZWN0cmVfdjJfaW5faWJyc19tb2RlKHNwZWN0cmVfdjJfZW5hYmxlZCkpIHtcXG4tXFx0XFx0aWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BVVRPSUJSUykpIHtcXG4tXFx0XFx0XFx0bXNyX3NldF9iaXQoTVNSX0VGRVIsIF9FRkVSX0FVVE9JQlJTKTtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0eDg2X3NwZWNfY3RybF9iYXNlIHw9IFNQRUNfQ1RSTF9JQlJTO1xcbi1cXHRcXHRcXHR1cGRhdGVfc3BlY19jdHJsKHg4Nl9zcGVjX2N0cmxfYmFzZSk7XFxuLVxcdFxcdH1cXG4rXFx0LypcXG4rXFx0ICogT24gQXV0b0lCUlMtY2FwYWJsZSBDUFVzLCBlSUJSUyBpcyBlbmFibGVkIHRocm91Z2ggRUZFUi5BVVRPSUJSU1xcbitcXHQgKiByYXRoZXIgdGhhbiBTUEVDX0NUUkwuSUJSUy4gIExlZ2FjeSBzcGVjdHJlX3YyPWlicnMga2VlcHMgdXNpbmdcXG4rXFx0ICogU1BFQ19DVFJMLklCUlMgZXZlbiB0aGVyZSwgYXMgaXQgbmVlZHMgdG8gYmUgdG9nZ2xlZCBvbiBrZXJuZWxcXG4rXFx0ICogZW50cnkvZXhpdC5cXG4rXFx0ICovXFxuK1xcdGlmIChzcGVjdHJlX3YyX2luX2VpYnJzX21vZGUoc3BlY3RyZV92Ml9lbmFibGVkKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FVVE9JQlJTKSkge1xcbitcXHRcXHRtc3Jfc2V0X2JpdChNU1JfRUZFUiwgX0VGRVJfQVVUT0lCUlMpO1xcbitcXHR9IGVsc2UgaWYgKHNwZWN0cmVfdjJfaW5faWJyc19tb2RlKHNwZWN0cmVfdjJfZW5hYmxlZCkpIHtcXG4rXFx0XFx0eDg2X3NwZWNfY3RybF9iYXNlIHw9IFNQRUNfQ1RSTF9JQlJTO1xcbitcXHRcXHR1cGRhdGVfc3BlY19jdHJsKHg4Nl9zcGVjX2N0cmxfYmFzZSk7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChzcGVjdHJlX3YyX2luX2VpYnJzX21vZGUoc3BlY3RyZV92Ml9lbmFibGVkKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NFVl9TTlApKVxcbitcXHRcXHRwcl93YXJuKFNQRUNUUkVfVjJfRUlCUlNfU05QX1BFUkZfTVNHKTtcXG4rXFxuIFxcdHN3aXRjaCAoc3BlY3RyZV92Ml9lbmFibGVkKSB7XFxuIFxcdGNhc2UgU1BFQ1RSRV9WMl9OT05FOlxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTMyODQsNiArMzMwNCwxNyBAQCB2b2lkIF9faW5pdCBjcHVfc2VsZWN0X21pdGlnYXRpb25zKHZvaWQpXFxuIFxcdFxcdHg4Nl9zcGVjX2N0cmxfYmFzZSBcXHUwMDI2PSB+U1BFQ19DVFJMX01JVElHQVRJT05TX01BU0s7XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIExpa2V3aXNlIGZvciBFRkVSLkFVVE9JQlJTOiBoZWFkXzY0LlMgcHJlc2VydmVzIHRoZSBpbmNvbWluZyBFRkVSXFxuK1xcdCAqIGJpdHMsIHNvIGEga2V4ZWMgZnJvbSBhIGtlcm5lbCB0aGF0IHJhbiBpbiBBdXRvSUJSUyBtb2RlIGNhcnJpZXMgdGhlXFxuK1xcdCAqIGJpdCBpbnRvIHRoaXMgb25lLiAgQ2xlYXIgaXQgYW5kIGxldCB0aGUgbWl0aWdhdGlvbiBzZWxlY3Rpb24gYmVsb3dcXG4rXFx0ICogcmVkaXNjb3ZlciBpdC4gIFRoaXMgYWxzbyBydW5zIGJlZm9yZSBpbml0X3JlYWxfbW9kZSgpIHNuYXBzaG90c1xcbitcXHQgKiBFRkVSIGZvciB0aGUgQVAgdHJhbXBvbGluZSwgc28gQVBzIGluaGVyaXQgd2hhdGV2ZXIgdGhpcyBrZXJuZWxcXG4rXFx0ICogc2V0dGxlcyBvbiByYXRoZXIgdGhhbiB0aGUgcHJldmlvdXMga2VybmVsJ3MgY2hvaWNlLlxcbitcXHQgKi9cXG4rXFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfQVVUT0lCUlMpKVxcbitcXHRcXHRtc3JfY2xlYXJfYml0KE1TUl9FRkVSLCBfRUZFUl9BVVRPSUJSUyk7XFxuK1xcbiBcXHR4ODZfYXJjaF9jYXBfbXNyID0geDg2X3JlYWRfYXJjaF9jYXBfbXNyKCk7XFxuIFxcbiBcXHRjcHVfcHJpbnRfYXR0YWNrX3ZlY3RvcnMoKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmNcXG5pbmRleCBjNzM1MjgyN2Y0OTFkLi5jNTY4ZDc0MjgyYTg0IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmNcXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jXFxuQEAgLTE0OTYsMTMgKzE0OTYsOSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgY3B1X3NldF9idWdfYml0cyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXFxuIFxcdC8qXFxuIFxcdCAqIEFNRCdzIEF1dG9JQlJTIGlzIGVxdWl2YWxlbnQgdG8gSW50ZWwncyBlSUJSUyAtIHVzZSB0aGUgSW50ZWwgZmVhdHVyZVxcbiBcXHQgKiBmbGFnIGFuZCBwcm90ZWN0IGZyb20gdmVuZG9yLXNwZWNpZmljIGJ1Z3MgdmlhIHRoZSB3aGl0ZWxpc3QuXFxuLVxcdCAqXFxuLVxcdCAqIERvbid0IHVzZSBBdXRvSUJSUyB3aGVuIFNOUCBpcyBlbmFibGVkIGJlY2F1c2UgaXQgZGVncmFkZXMgaG9zdFxcbi1cXHQgKiB1c2Vyc3BhY2UgaW5kaXJlY3QgYnJhbmNoIHBlcmZvcm1hbmNlLlxcbiBcXHQgKi9cXG4gXFx0aWYgKCh4ODZfYXJjaF9jYXBfbXNyIFxcdTAwMjYgQVJDSF9DQVBfSUJSU19BTEwpIHx8XFxuLVxcdCAgICAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9BVVRPSUJSUykgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICAhY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TRVZfU05QKSkpIHtcXG4rXFx0ICAgIGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfQVVUT0lCUlMpKSB7XFxuIFxcdFxcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfSUJSU19FTkhBTkNFRCk7XFxuIFxcdFxcdGlmICghY3B1X21hdGNoZXMoY3B1X3Z1bG5fd2hpdGVsaXN0LCBOT19FSUJSU19QQlJTQikgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICEoeDg2X2FyY2hfY2FwX21zciBcXHUwMDI2IEFSQ0hfQ0FQX1BCUlNCX05PKSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG5pbmRleCA1NzA1NzIzZjFmNDEyLi41M2NjNmQwNDM4ODM2IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXFxuQEAgLTUwNiw3ICs1MDYsNyBAQCBzdGF0aWMgaW50IF9fc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0aWYgKCFzbnBfYWN0aXZlKVxcbi1cXHRcXHR2YWxpZF92bXNhX2ZlYXR1cmVzIFxcdTAwMjY9IH5TVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQztcXG4rXFx0XFx0dmFsaWRfdm1zYV9mZWF0dXJlcyBcXHUwMDI2PSB+U1ZNX1NFVl9GRUFUX1NOUF9PTkxZX01BU0s7XFxuIFxcbiBcXHRpZiAoZGF0YS1cXHUwMDNldm1zYV9mZWF0dXJlcyBcXHUwMDI2IH52YWxpZF92bXNhX2ZlYXR1cmVzKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5AQCAtMzI1Nyw4ICszMjU3LDIzIEBAIHZvaWQgX19pbml0IHNldl9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbiBcXHQgICAgY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9OT19ORVNURURfREFUQV9CUCkpXFxuIFxcdFxcdHNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUDtcXG4gXFxuLVxcdGlmIChzZXZfc25wX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYgdHNjX2toeiBcXHUwMDI2XFx1MDAyNiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NOUF9TRUNVUkVfVFNDKSlcXG4tXFx0XFx0c2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDO1xcbitcXHRpZiAoc2V2X3NucF9lbmFibGVkKSB7XFxuK1xcdFxcdHNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFVubGlrZSBTZWN1cmUgVFNDIGFuZCBJQlBCLW9uLUVudHJ5IGJlbG93LCBCVEIgSXNvbGF0aW9uIGhhc1xcbitcXHRcXHQgKiBubyBob3N0IGVudW1lcmF0aW9uIGJpdCB0byBnYXRlIG9uOiB0aGUgQVBNIGRlZmluZXMgaXQgYXNcXG4rXFx0XFx0ICogYXJjaGl0ZWN0dXJhbGx5IHByZXNlbnQgb24gZXZlcnkgU0VWLVNOUC1jYXBhYmxlIHByb2Nlc3Nvci5cXG4rXFx0XFx0ICogSWYgU05QIGlzIHN1cHBvcnRlZCwgQlRCIElzb2xhdGlvbiBpcyBhdmFpbGFibGUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgfD0gU1ZNX1NFVl9GRUFUX0JUQl9JU09MQVRJT047XFxuK1xcbitcXHRcXHRpZiAodHNjX2toeiBcXHUwMDI2XFx1MDAyNiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NOUF9TRUNVUkVfVFNDKSlcXG4rXFx0XFx0XFx0c2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDO1xcbitcXG4rXFx0XFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU05QX0lCUEJfT05fRU5UUlkpKVxcbitcXHRcXHRcXHRzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgfD0gU1ZNX1NFVl9GRUFUX0lCUEJfT05fRU5UUlk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gdm9pZCBzZXZfaGFyZHdhcmVfdW5zZXR1cCh2b2lkKVxcbmRpZmYgLS1naXQgYS90b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oIGIvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxcbmluZGV4IDY1NDdjMGFlZTQ1YjcuLjYzNGNkMDkzNjZkYTYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxcbisrKyBiL3Rvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcXG5AQCAtNDYwLDYgKzQ2MCw3IEBAXFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfQUxMT1dFRF9TRVZfRkVBVFVSRVMgKDE5KjMyKzI3KSAvKiBBbGxvd2VkIFNFViBGZWF0dXJlcyAqL1xcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1NWU01cXHRcXHQoMTkqMzIrMjgpIC8qIFxcXCJzdnNtXFxcIiBTVlNNIHByZXNlbnQgKi9cXG4gI2RlZmluZSBYODZfRkVBVFVSRV9IVl9JTlVTRV9XUl9BTExPV0VEXFx0KDE5KjMyKzMwKSAvKiBBbGxvdyBXcml0ZSB0byBpbi11c2UgaHlwZXJ2aXNvci1vd25lZCBwYWdlcyAqL1xcbisjZGVmaW5lIFg4Nl9GRUFUVVJFX1NOUF9JQlBCX09OX0VOVFJZXFx0KDE5KjMyKzMxKSAvKiBTRVYtU05QIElCUEIgb24gVk0gRW50cnkgKi9cXG4gXFxuIC8qIEFNRC1kZWZpbmVkIEV4dGVuZGVkIEZlYXR1cmUgMiBFQVgsIENQVUlEIGxldmVsIDB4ODAwMDAwMjEgKEVBWCksIHdvcmQgMjAgKi9cXG4gI2RlZmluZSBYODZfRkVBVFVSRV9OT19ORVNURURfREFUQV9CUFxcdCgyMCozMisgMCkgLyogTm8gTmVzdGVkIERhdGEgQnJlYWtwb2ludHMgKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmNcXG5pbmRleCA4N2JmZjRmYmI3ZWQ1Li4zZjU5MmUyNDVhNjZkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jXFxuQEAgLTEzLDE3ICsxMywyNSBAQFxcbiAjaW5jbHVkZSBcXFwic3ZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbiBcXG4tI2RlZmluZSBTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUCAzMnVcXG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRVxcdFxcdEJJVF9VTEwoMClcXG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUFxcdFxcdEJJVF9VTEwoNSlcXG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfQlRCX0lTT0xBVElPTlxcdEJJVF9VTEwoNylcXG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQ1xcdFxcdEJJVF9VTEwoOSlcXG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfSUJQQl9PTl9FTlRSWVxcdEJJVF9VTEwoMjEpXFxuK1xcbisvKiBGZWF0dXJlcyB2YWxpZCBvbmx5IGZvciBTTlAgZ3Vlc3RzLCByZWplY3RlZCBmb3IgU0VWLUVTIGFuZCBiZWxvdy4gKi9cXG4rI2RlZmluZSBTTlBfT05MWV9GRUFUVVJFU1xcdFxcdChTVk1fU0VWX0ZFQVRfU05QX0FDVElWRSB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IFNWTV9TRVZfRkVBVF9CVEJfSVNPTEFUSU9OIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0MgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBTVk1fU0VWX0ZFQVRfSUJQQl9PTl9FTlRSWSlcXG4gXFxuIC8qXFxuICAqIFNvbWUgZmVhdHVyZXMgbWF5IGhhdmUgaGlkZGVuIGRlcGVuZGVuY2llcywgb3IgbWF5IG9ubHkgd29ya1xcbiAgKiBmb3IgY2VydGFpbiBWTSB0eXBlcy4gIEVyciBvbiB0aGUgc2lkZSBvZiBzYWZldHkgYW5kIGRvbid0XFxuICAqIGV4cGVjdCB0aGF0IGFsbCBzdXBwb3J0ZWQgZmVhdHVyZXMgY2FuIGJlIHBhc3NlZCBvbmUgYnkgb25lXFxuICAqIHRvIEtWTV9TRVZfSU5JVDIuXFxuLSAqXFxuLSAqIChXZWxsLCByaWdodCBub3cgdGhlcmUncyBvbmx5IG9uZS4uLilcXG4gICovXFxuLSNkZWZpbmUgS05PV05fRkVBVFVSRVMgU1ZNX1NFVl9GRUFUX0RFQlVHX1NXQVBcXG4rI2RlZmluZSBLTk9XTl9GRUFUVVJFU1xcdFxcdChTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUCB8IFNOUF9PTkxZX0ZFQVRVUkVTKVxcbiBcXG4gaW50IGt2bV9mZDtcXG4gdTY0IHN1cHBvcnRlZF92bXNhX2ZlYXR1cmVzO1xcbkBAIC0xMDgsNyArMTE2LDcgQEAgdm9pZCB0ZXN0X2ZlYXR1cmVzKHUzMiB2bV90eXBlLCB1NjQgc3VwcG9ydGVkX2ZlYXR1cmVzKVxcbiBcXHRcXHRpZiAoIShzdXBwb3J0ZWRfZmVhdHVyZXMgXFx1MDAyNiBCSVRfVUxMKGkpKSlcXG4gXFx0XFx0XFx0dGVzdF9pbml0Ml9pbnZhbGlkKHZtX3R5cGUsXFxuIFxcdFxcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGt2bV9zZXZfaW5pdCl7IC52bXNhX2ZlYXR1cmVzID0gQklUX1VMTChpKSB9LFxcbi1cXHRcXHRcXHRcXHRcXFwidW5rbm93biBmZWF0dXJlXFxcIik7XFxuK1xcdFxcdFxcdFxcdFxcXCJ1bmtub3duIG9yIHVuc3VwcG9ydGVkIGZlYXR1cmUgZm9yIFZNIHR5cGVcXFwiKTtcXG4gXFx0XFx0ZWxzZSBpZiAoS05PV05fRkVBVFVSRVMgXFx1MDAyNiBCSVRfVUxMKGkpKVxcbiBcXHRcXHRcXHR0ZXN0X2luaXQyKHZtX3R5cGUsXFxuIFxcdFxcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGt2bV9zZXZfaW5pdCl7IC52bXNhX2ZlYXR1cmVzID0gQklUX1VMTChpKSB9KTtcXG5AQCAtMTU3LDcgKzE2NSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcbiBcXHR0ZXN0X2ZlYXR1cmVzKEtWTV9YODZfU0VWX1ZNLCAwKTtcXG4gXFx0aWYgKGhhdmVfc2V2X2VzKVxcbi1cXHRcXHR0ZXN0X2ZlYXR1cmVzKEtWTV9YODZfU0VWX0VTX1ZNLCBzdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyk7XFxuK1xcdFxcdHRlc3RfZmVhdHVyZXMoS1ZNX1g4Nl9TRVZfRVNfVk0sIHN1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIFxcdTAwMjYgflNOUF9PTkxZX0ZFQVRVUkVTKTtcXG4gXFx0aWYgKGhhdmVfc25wKVxcbiBcXHRcXHR0ZXN0X2ZlYXR1cmVzKEtWTV9YODZfU05QX1ZNLCBzdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjo1NzoxMy43NDU1NDcwODlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjAwNjA2MTExODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJLVk1fQU1EX1NFVlwiLFxuICAgIFwiQ1JZUFRPX0RFVl9DQ1BfRERcIixcbiAgICBcIkNSWVBUT19ERVZfU1BfUFNQXCIsXG4gICAgXCJBTURfSU9NTVVcIixcbiAgICBcIklPTU1VX1NVUFBPUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZXZfbWVtX2VuY19pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIG9mIGB2bXNhX2ZlYXR1cmVzYCBkdXJpbmcgS1ZNIFNFViBndWVzdCBpbml0aWFsaXphdGlvbiAoYEtWTV9TRVZfSU5JVDJgIGlvY3RsKSBhbmQgYWRkcyBuZXcgU0VWLVNOUCBmZWF0dXJlcyB0byB0aGUgc3VwcG9ydGVkIGxpc3QuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgbmV3IGZlYXR1cmUgdmFsaWRhdGlvbiBsb2dpYyBkb2Vzbid0IGludHJvZHVjZSBidWdzLiBUaGUgQ1BVIGJ1ZyBtaXRpZ2F0aW9uIGNoYW5nZXMgYXJlIGJvb3QtdGltZSBsb2dpYyBhbmQgbm90IGRpcmVjdGx5IGZ1enphYmxlIGZyb20gdXNlcnNwYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5YjAwZjNmNjYzODY1NmYxNTBmOGQ5OGFmNmU0YzllMDQyNjg3MDljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMjI6NTc6MTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZ1xuaW5kZXggMTVmZDllYzVlY2FjYi4uYjlhN2RkZWY0Y2JhYiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L0tjb25maWdcbisrKyBiL2FyY2gveDg2L0tjb25maWdcbkBAIC0yNDk2LDEyICsyNDk2LDEzIEBAIGNvbmZpZyBNSVRJR0FUSU9OX0lCUEJfRU5UUllcbiBcbiBjb25maWcgTUlUSUdBVElPTl9JQlJTX0VOVFJZXG4gXHRib29sIFwiRW5hYmxlIElCUlMgb24ga2VybmVsIGVudHJ5XCJcbi1cdGRlcGVuZHMgb24gQ1BVX1NVUF9JTlRFTCBcdTAwMjZcdTAwMjYgWDg2XzY0XG4rXHRkZXBlbmRzIG9uIFg4Nl82NFxuIFx0ZGVmYXVsdCB5XG4gXHRoZWxwXG4gXHQgIENvbXBpbGUgdGhlIGtlcm5lbCB3aXRoIHN1cHBvcnQgZm9yIHRoZSBzcGVjdHJlX3YyPWlicnMgbWl0aWdhdGlvbi5cbi1cdCAgVGhpcyBtaXRpZ2F0ZXMgYm90aCBzcGVjdHJlX3YyIGFuZCByZXRibGVlZCBhdCBncmVhdCBjb3N0IHRvXG4tXHQgIHBlcmZvcm1hbmNlLlxuK1x0ICBUaGlzIG1pdGlnYXRlcyBzcGVjdHJlX3YyIGF0IGdyZWF0IGNvc3QgdG8gcGVyZm9ybWFuY2UuICBPbiBJbnRlbCxcbitcdCAgaXQgYWxzbyBtaXRpZ2F0ZXMgcmV0YmxlZWQuICBPbiBBTUQvSHlnb24sIHJldGJsZWVkIG1pdGlnYXRpb25cbitcdCAgcmVxdWlyZXMgTUlUSUdBVElPTl9VTlJFVF9FTlRSWSBvciBNSVRJR0FUSU9OX0lCUEJfRU5UUlkuXG4gXG4gY29uZmlnIE1JVElHQVRJT05fU1JTT1xuIFx0Ym9vbCBcIk1pdGlnYXRlIHNwZWN1bGF0aXZlIFJBUyBvdmVyZmxvdyBvbiBBTURcIlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG5pbmRleCBmNzBlZTc0YjVmOTIxLi4zYWFkMmI1M2Y1OWJmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuQEAgLTQ3Miw2ICs0NzIsNyBAQFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfQUxMT1dFRF9TRVZfRkVBVFVSRVMgKDE5KjMyKzI3KSAvKiBBbGxvd2VkIFNFViBGZWF0dXJlcyAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfU1ZTTVx0XHQoMTkqMzIrMjgpIC8qIFwic3ZzbVwiIFNWU00gcHJlc2VudCAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfSFZfSU5VU0VfV1JfQUxMT1dFRFx0KDE5KjMyKzMwKSAvKiBBbGxvdyBXcml0ZSB0byBpbi11c2UgaHlwZXJ2aXNvci1vd25lZCBwYWdlcyAqL1xuKyNkZWZpbmUgWDg2X0ZFQVRVUkVfU05QX0lCUEJfT05fRU5UUllcdCgxOSozMiszMSkgLyogU0VWLVNOUCBJQlBCIG9uIFZNIEVudHJ5ICovXG4gXG4gLyogQU1ELWRlZmluZWQgRXh0ZW5kZWQgRmVhdHVyZSAyIEVBWCwgQ1BVSUQgbGV2ZWwgMHg4MDAwMDAyMSAoRUFYKSwgd29yZCAyMCAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfTk9fTkVTVEVEX0RBVEFfQlBcdCgyMCozMisgMCkgLyogTm8gTmVzdGVkIERhdGEgQnJlYWtwb2ludHMgKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXG5pbmRleCBhYTYzNDMxYmE5MmMzLi4wZGEyMjM0YjcxYzY5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXG5AQCAtMzA1LDExICszMDUsMTggQEAgc3RhdGljX2Fzc2VydCgoQVZJQ19NQVhfUEhZU0lDQUxfSUQgXHUwMDI2IEFWSUNfUEhZU0lDQUxfTUFYX0lOREVYX01BU0spID09IEFWSUNfTUFYX1xuIHN0YXRpY19hc3NlcnQoKFgyQVZJQ19NQVhfUEhZU0lDQUxfSUQgXHUwMDI2IEFWSUNfUEhZU0lDQUxfTUFYX0lOREVYX01BU0spID09IFgyQVZJQ19NQVhfUEhZU0lDQUxfSUQpO1xuIHN0YXRpY19hc3NlcnQoKFgyQVZJQ180S19NQVhfUEhZU0lDQUxfSUQgXHUwMDI2IEFWSUNfUEhZU0lDQUxfTUFYX0lOREVYX01BU0spID09IFgyQVZJQ180S19NQVhfUEhZU0lDQUxfSUQpO1xuIFxuLSNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkVcdFx0XHRcdEJJVCgwKVxuLSNkZWZpbmUgU1ZNX1NFVl9GRUFUX1JFU1RSSUNURURfSU5KRUNUSU9OXHRcdEJJVCgzKVxuLSNkZWZpbmUgU1ZNX1NFVl9GRUFUX0FMVEVSTkFURV9JTkpFQ1RJT05cdFx0QklUKDQpXG4tI2RlZmluZSBTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUFx0XHRcdFx0QklUKDUpXG4tI2RlZmluZSBTVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQ1x0XHRcdFx0QklUKDkpXG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRVx0XHRcdFx0QklUX1VMTCgwKVxuKyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1JFU1RSSUNURURfSU5KRUNUSU9OXHRcdEJJVF9VTEwoMylcbisjZGVmaW5lIFNWTV9TRVZfRkVBVF9BTFRFUk5BVEVfSU5KRUNUSU9OXHRcdEJJVF9VTEwoNClcbisjZGVmaW5lIFNWTV9TRVZfRkVBVF9ERUJVR19TV0FQXHRcdFx0XHRCSVRfVUxMKDUpXG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfQlRCX0lTT0xBVElPTlx0XHRcdEJJVF9VTEwoNylcbisjZGVmaW5lIFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDXHRcdFx0XHRCSVRfVUxMKDkpXG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfSUJQQl9PTl9FTlRSWVx0XHRcdEJJVF9VTEwoMjEpXG4rXG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfU05QX09OTFlfTUFTS1x0KFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFIHwgXFxcbitcdFx0XHRcdFx0IFNWTV9TRVZfRkVBVF9CVEJfSVNPTEFUSU9OIHwgXFxcbitcdFx0XHRcdFx0IFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDIHwgXFxcbitcdFx0XHRcdFx0IFNWTV9TRVZfRkVBVF9JQlBCX09OX0VOVFJZKVxuIFxuICNkZWZpbmUgVk1DQl9BTExPV0VEX1NFVl9GRUFUVVJFU19WQUxJRFx0XHRcdEJJVF9VTEwoNjMpXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1Z3MuY1xuaW5kZXggNTZlYWM1NjExYzMxOC4uMDg3ODBlMGQzN2VjNyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYnVncy5jXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1Z3MuY1xuQEAgLTEzMDUsNyArMTMwNSwxNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcmV0YmxlZWRfdXBkYXRlX21pdGlnYXRpb24odm9pZClcbiBcbiBcdC8qXG4gXHQgKiBMZXQgSUJSUyB0cnVtcCBhbGwgb24gSW50ZWwgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGVmZmVjdHMgb2YgdGhlXG4tXHQgKiByZXRibGVlZD0gY21kbGluZSBvcHRpb24gZXhjZXB0IGZvciBjYWxsIGRlcHRoIGJhc2VkIHN0dWZmaW5nXG4rXHQgKiByZXRibGVlZD0gY21kbGluZSBvcHRpb24gZXhjZXB0IGZvciBjYWxsIGRlcHRoIGJhc2VkIHN0dWZmaW5nLlxuK1x0ICpcbitcdCAqIE9uIEFNRC9IeWdvbiwgbGVnYWN5IFNQRUNfQ1RSTC5JQlJTIHRvZ2dsaW5nIGRvZXMgbm90IG1pdGlnYXRlIHRoZVxuK1x0ICogQnJhbmNoIFR5cGUgQ29uZnVzaW9uIFJFVEJsZWVkIHZhcmlhbnQ6IFJFVCBwcmVkaWN0aW9uIGNvbWVzIGZyb21cbitcdCAqIHRoZSBSZXR1cm4gQWRkcmVzcyBQcmVkaWN0b3IsIG5vdCB0aGUgcmVzdHJpY3RlZCBpbmRpcmVjdCBicmFuY2hcbitcdCAqIHByZWRpY3RvcnMgdGhhdCBJQlJTIGNvbnRyb2xzLiAgU28ga2VlcCB0aGlzIEludGVsLW9ubHkgYW5kIGxlYXZlXG4rXHQgKiBBTUQncyBzb2Z0d2FyZSByZXR1cm4tdGh1bmsgbWl0aWdhdGlvbiAoVU5SRVQvSUJQQikgaW4gcGxhY2UgZXZlblxuK1x0ICogd2hlbiBzcGVjdHJlX3YyPWlicnMgaXMgc2VsZWN0ZWQuXG4gXHQgKi9cbiBcdGlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkge1xuIFx0XHRzd2l0Y2ggKHNwZWN0cmVfdjJfZW5hYmxlZCkge1xuQEAgLTE2NzIsNiArMTY3OSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCByZXRwb2xpbmVfc2VxX2VuYWJsZWQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cbiAjZGVmaW5lIFNQRUNUUkVfVjJfTEZFTkNFX01TRyBcIldBUk5JTkc6IExGRU5DRSBtaXRpZ2F0aW9uIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgdGhpcyBDUFUsIGRhdGEgbGVha3MgcG9zc2libGUhXFxuXCJcbiAjZGVmaW5lIFNQRUNUUkVfVjJfRUlCUlNfRUJQRl9NU0cgXCJXQVJOSU5HOiBVbnByaXZpbGVnZWQgZUJQRiBpcyBlbmFibGVkIHdpdGggZUlCUlMgb24sIGRhdGEgbGVha3MgcG9zc2libGUgdmlhIFNwZWN0cmUgdjIgQkhCIGF0dGFja3MhXFxuXCJcbiAjZGVmaW5lIFNQRUNUUkVfVjJfRUlCUlNfTEZFTkNFX0VCUEZfU01UX01TRyBcIldBUk5JTkc6IFVucHJpdmlsZWdlZCBlQlBGIGlzIGVuYWJsZWQgd2l0aCBlSUJSUytMRkVOQ0UgbWl0aWdhdGlvbiBhbmQgU01ULCBkYXRhIGxlYWtzIHBvc3NpYmxlIHZpYSBTcGVjdHJlIHYyIEJIQiBhdHRhY2tzIVxcblwiXG4rI2RlZmluZSBTUEVDVFJFX1YyX0VJQlJTX1NOUF9QRVJGX01TRyBcIldBUk5JTkc6IGVJQlJTIG1pdGlnYXRpb24gZW5hYmxlcyBBdXRvSUJSUyBvbiBTRVYtU05QIGVuYWJsZWQgQ1BVLCB0aGlzIG1heSBjYXVzZSBwZXJmb3JtYW5jZSBsb3NzXFxuXCJcbiAjZGVmaW5lIFNQRUNUUkVfVjJfSUJSU19QRVJGX01TRyBcIldBUk5JTkc6IElCUlMgbWl0aWdhdGlvbiBzZWxlY3RlZCBvbiBFbmhhbmNlZCBJQlJTIENQVSwgdGhpcyBtYXkgY2F1c2UgdW5uZWNlc3NhcnkgcGVyZm9ybWFuY2UgbG9zc1xcblwiXG4gXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuQEAgLTIxNjUsMTEgKzIxNzMsNiBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc3BlY3RyZV92Ml9zZWxlY3RfbWl0aWdhdGlvbih2b2lkKVxuIFx0XHRzcGVjdHJlX3YyX2NtZCA9IFNQRUNUUkVfVjJfQ01EX0FVVE87XG4gXHR9XG4gXG4tXHRpZiAoc3BlY3RyZV92Ml9jbWQgPT0gU1BFQ1RSRV9WMl9DTURfSUJSUyBcdTAwMjZcdTAwMjYgYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwpIHtcbi1cdFx0cHJfZXJyKFwiSUJSUyBzZWxlY3RlZCBidXQgbm90IEludGVsIENQVS4gU3dpdGNoaW5nIHRvIEFVVE8gc2VsZWN0XFxuXCIpO1xuLVx0XHRzcGVjdHJlX3YyX2NtZCA9IFNQRUNUUkVfVjJfQ01EX0FVVE87XG4tXHR9XG4tXG4gXHRpZiAoc3BlY3RyZV92Ml9jbWQgPT0gU1BFQ1RSRV9WMl9DTURfSUJSUyBcdTAwMjZcdTAwMjYgIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9JQlJTKSkge1xuIFx0XHRwcl9lcnIoXCJJQlJTIHNlbGVjdGVkIGJ1dCBDUFUgZG9lc24ndCBoYXZlIElCUlMuIFN3aXRjaGluZyB0byBBVVRPIHNlbGVjdFxcblwiKTtcbiBcdFx0c3BlY3RyZV92Ml9jbWQgPSBTUEVDVFJFX1YyX0NNRF9BVVRPO1xuQEAgLTIxOTQsNyArMjE5NywxNSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc3BlY3RyZV92Ml9zZWxlY3RfbWl0aWdhdGlvbih2b2lkKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRmYWxsdGhyb3VnaDtcbiBcdGNhc2UgU1BFQ1RSRV9WMl9DTURfRk9SQ0U6XG4tXHRcdGlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSUJSU19FTkhBTkNFRCkpIHtcbitcdFx0LypcbitcdFx0ICogUHJlZmVyIHJldHBvbGluZSB3aGVuIFNOUCBpcyBlbmFibGVkIGJlY2F1c2UgQXV0b0lCUlNcbitcdFx0ICogZGVncmFkZXMgaG9zdCB1c2Vyc3BhY2UgaW5kaXJlY3QgYnJhbmNoIHBlcmZvcm1hbmNlLiAgT25seVxuK1x0XHQgKiBkbyBzbyBpZiByZXRwb2xpbmUgaXMgYWN0dWFsbHkgYnVpbHQgaW4sIG90aGVyd2lzZSBBdXRvSUJSU1xuK1x0XHQgKiBpcyBiZXR0ZXIgdGhhbiBsZWF2aW5nIHRoZSBzeXN0ZW0gdW5taXRpZ2F0ZWQuXG4rXHRcdCAqL1xuK1x0XHRpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0lCUlNfRU5IQU5DRUQpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIShib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU0VWX1NOUCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAgIElTX0VOQUJMRUQoQ09ORklHX01JVElHQVRJT05fUkVUUE9MSU5FKSkpIHtcbiBcdFx0XHRzcGVjdHJlX3YyX2VuYWJsZWQgPSBTUEVDVFJFX1YyX0VJQlJTO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtMjI3NywxNSArMjI4OCwyNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc3BlY3RyZV92Ml9hcHBseV9taXRpZ2F0aW9uKHZvaWQpXG4gXHRpZiAoc3BlY3RyZV92Ml9lbmFibGVkID09IFNQRUNUUkVfVjJfRUlCUlMgXHUwMDI2XHUwMDI2IHVucHJpdmlsZWdlZF9lYnBmX2VuYWJsZWQoKSlcbiBcdFx0cHJfZXJyKFNQRUNUUkVfVjJfRUlCUlNfRUJQRl9NU0cpO1xuIFxuLVx0aWYgKHNwZWN0cmVfdjJfaW5faWJyc19tb2RlKHNwZWN0cmVfdjJfZW5hYmxlZCkpIHtcbi1cdFx0aWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BVVRPSUJSUykpIHtcbi1cdFx0XHRtc3Jfc2V0X2JpdChNU1JfRUZFUiwgX0VGRVJfQVVUT0lCUlMpO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHg4Nl9zcGVjX2N0cmxfYmFzZSB8PSBTUEVDX0NUUkxfSUJSUztcbi1cdFx0XHR1cGRhdGVfc3BlY19jdHJsKHg4Nl9zcGVjX2N0cmxfYmFzZSk7XG4tXHRcdH1cbitcdC8qXG4rXHQgKiBPbiBBdXRvSUJSUy1jYXBhYmxlIENQVXMsIGVJQlJTIGlzIGVuYWJsZWQgdGhyb3VnaCBFRkVSLkFVVE9JQlJTXG4rXHQgKiByYXRoZXIgdGhhbiBTUEVDX0NUUkwuSUJSUy4gIExlZ2FjeSBzcGVjdHJlX3YyPWlicnMga2VlcHMgdXNpbmdcbitcdCAqIFNQRUNfQ1RSTC5JQlJTIGV2ZW4gdGhlcmUsIGFzIGl0IG5lZWRzIHRvIGJlIHRvZ2dsZWQgb24ga2VybmVsXG4rXHQgKiBlbnRyeS9leGl0LlxuK1x0ICovXG4rXHRpZiAoc3BlY3RyZV92Ml9pbl9laWJyc19tb2RlKHNwZWN0cmVfdjJfZW5hYmxlZCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FVVE9JQlJTKSkge1xuK1x0XHRtc3Jfc2V0X2JpdChNU1JfRUZFUiwgX0VGRVJfQVVUT0lCUlMpO1xuK1x0fSBlbHNlIGlmIChzcGVjdHJlX3YyX2luX2licnNfbW9kZShzcGVjdHJlX3YyX2VuYWJsZWQpKSB7XG4rXHRcdHg4Nl9zcGVjX2N0cmxfYmFzZSB8PSBTUEVDX0NUUkxfSUJSUztcbitcdFx0dXBkYXRlX3NwZWNfY3RybCh4ODZfc3BlY19jdHJsX2Jhc2UpO1xuIFx0fVxuIFxuK1x0aWYgKHNwZWN0cmVfdjJfaW5fZWlicnNfbW9kZShzcGVjdHJlX3YyX2VuYWJsZWQpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9TRVZfU05QKSlcbitcdFx0cHJfd2FybihTUEVDVFJFX1YyX0VJQlJTX1NOUF9QRVJGX01TRyk7XG4rXG4gXHRzd2l0Y2ggKHNwZWN0cmVfdjJfZW5hYmxlZCkge1xuIFx0Y2FzZSBTUEVDVFJFX1YyX05PTkU6XG4gXHRcdHJldHVybjtcbkBAIC0zMjg0LDYgKzMzMDQsMTcgQEAgdm9pZCBfX2luaXQgY3B1X3NlbGVjdF9taXRpZ2F0aW9ucyh2b2lkKVxuIFx0XHR4ODZfc3BlY19jdHJsX2Jhc2UgXHUwMDI2PSB+U1BFQ19DVFJMX01JVElHQVRJT05TX01BU0s7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogTGlrZXdpc2UgZm9yIEVGRVIuQVVUT0lCUlM6IGhlYWRfNjQuUyBwcmVzZXJ2ZXMgdGhlIGluY29taW5nIEVGRVJcbitcdCAqIGJpdHMsIHNvIGEga2V4ZWMgZnJvbSBhIGtlcm5lbCB0aGF0IHJhbiBpbiBBdXRvSUJSUyBtb2RlIGNhcnJpZXMgdGhlXG4rXHQgKiBiaXQgaW50byB0aGlzIG9uZS4gIENsZWFyIGl0IGFuZCBsZXQgdGhlIG1pdGlnYXRpb24gc2VsZWN0aW9uIGJlbG93XG4rXHQgKiByZWRpc2NvdmVyIGl0LiAgVGhpcyBhbHNvIHJ1bnMgYmVmb3JlIGluaXRfcmVhbF9tb2RlKCkgc25hcHNob3RzXG4rXHQgKiBFRkVSIGZvciB0aGUgQVAgdHJhbXBvbGluZSwgc28gQVBzIGluaGVyaXQgd2hhdGV2ZXIgdGhpcyBrZXJuZWxcbitcdCAqIHNldHRsZXMgb24gcmF0aGVyIHRoYW4gdGhlIHByZXZpb3VzIGtlcm5lbCdzIGNob2ljZS5cbitcdCAqL1xuK1x0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfQVVUT0lCUlMpKVxuK1x0XHRtc3JfY2xlYXJfYml0KE1TUl9FRkVSLCBfRUZFUl9BVVRPSUJSUyk7XG4rXG4gXHR4ODZfYXJjaF9jYXBfbXNyID0geDg2X3JlYWRfYXJjaF9jYXBfbXNyKCk7XG4gXG4gXHRjcHVfcHJpbnRfYXR0YWNrX3ZlY3RvcnMoKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uY1xuaW5kZXggYzczNTI4MjdmNDkxZC4uYzU2OGQ3NDI4MmE4NCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmNcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmNcbkBAIC0xNDk2LDEzICsxNDk2LDkgQEAgc3RhdGljIHZvaWQgX19pbml0IGNwdV9zZXRfYnVnX2JpdHMoc3RydWN0IGNwdWluZm9feDg2ICpjKVxuIFx0LypcbiBcdCAqIEFNRCdzIEF1dG9JQlJTIGlzIGVxdWl2YWxlbnQgdG8gSW50ZWwncyBlSUJSUyAtIHVzZSB0aGUgSW50ZWwgZmVhdHVyZVxuIFx0ICogZmxhZyBhbmQgcHJvdGVjdCBmcm9tIHZlbmRvci1zcGVjaWZpYyBidWdzIHZpYSB0aGUgd2hpdGVsaXN0LlxuLVx0ICpcbi1cdCAqIERvbid0IHVzZSBBdXRvSUJSUyB3aGVuIFNOUCBpcyBlbmFibGVkIGJlY2F1c2UgaXQgZGVncmFkZXMgaG9zdFxuLVx0ICogdXNlcnNwYWNlIGluZGlyZWN0IGJyYW5jaCBwZXJmb3JtYW5jZS5cbiBcdCAqL1xuIFx0aWYgKCh4ODZfYXJjaF9jYXBfbXNyIFx1MDAyNiBBUkNIX0NBUF9JQlJTX0FMTCkgfHxcbi1cdCAgICAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9BVVRPSUJSUykgXHUwMDI2XHUwMDI2XG4tXHQgICAgICFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFVl9TTlApKSkge1xuK1x0ICAgIGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfQVVUT0lCUlMpKSB7XG4gXHRcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfSUJSU19FTkhBTkNFRCk7XG4gXHRcdGlmICghY3B1X21hdGNoZXMoY3B1X3Z1bG5fd2hpdGVsaXN0LCBOT19FSUJSU19QQlJTQikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhKHg4Nl9hcmNoX2NhcF9tc3IgXHUwMDI2IEFSQ0hfQ0FQX1BCUlNCX05PKSlcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuaW5kZXggNTcwNTcyM2YxZjQxMi4uNTNjYzZkMDQzODgzNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbkBAIC01MDYsNyArNTA2LDcgQEAgc3RhdGljIGludCBfX3Nldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmICghc25wX2FjdGl2ZSlcbi1cdFx0dmFsaWRfdm1zYV9mZWF0dXJlcyBcdTAwMjY9IH5TVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQztcbitcdFx0dmFsaWRfdm1zYV9mZWF0dXJlcyBcdTAwMjY9IH5TVk1fU0VWX0ZFQVRfU05QX09OTFlfTUFTSztcbiBcbiBcdGlmIChkYXRhLVx1MDAzZXZtc2FfZmVhdHVyZXMgXHUwMDI2IH52YWxpZF92bXNhX2ZlYXR1cmVzKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0zMjU3LDggKzMyNTcsMjMgQEAgdm9pZCBfX2luaXQgc2V2X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4gXHQgICAgY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9OT19ORVNURURfREFUQV9CUCkpXG4gXHRcdHNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUDtcbiBcbi1cdGlmIChzZXZfc25wX2VuYWJsZWQgXHUwMDI2XHUwMDI2IHRzY19raHogXHUwMDI2XHUwMDI2IGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU05QX1NFQ1VSRV9UU0MpKVxuLVx0XHRzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgfD0gU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0M7XG4rXHRpZiAoc2V2X3NucF9lbmFibGVkKSB7XG4rXHRcdHNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRTtcbitcbitcdFx0LypcbitcdFx0ICogVW5saWtlIFNlY3VyZSBUU0MgYW5kIElCUEItb24tRW50cnkgYmVsb3csIEJUQiBJc29sYXRpb24gaGFzXG4rXHRcdCAqIG5vIGhvc3QgZW51bWVyYXRpb24gYml0IHRvIGdhdGUgb246IHRoZSBBUE0gZGVmaW5lcyBpdCBhc1xuK1x0XHQgKiBhcmNoaXRlY3R1cmFsbHkgcHJlc2VudCBvbiBldmVyeSBTRVYtU05QLWNhcGFibGUgcHJvY2Vzc29yLlxuK1x0XHQgKiBJZiBTTlAgaXMgc3VwcG9ydGVkLCBCVEIgSXNvbGF0aW9uIGlzIGF2YWlsYWJsZS5cbitcdFx0ICovXG4rXHRcdHNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfQlRCX0lTT0xBVElPTjtcbitcbitcdFx0aWYgKHRzY19raHogXHUwMDI2XHUwMDI2IGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU05QX1NFQ1VSRV9UU0MpKVxuK1x0XHRcdHNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQztcbitcbitcdFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU05QX0lCUEJfT05fRU5UUlkpKVxuK1x0XHRcdHNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfSUJQQl9PTl9FTlRSWTtcbitcdH1cbiB9XG4gXG4gdm9pZCBzZXZfaGFyZHdhcmVfdW5zZXR1cCh2b2lkKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmggYi90b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG5pbmRleCA2NTQ3YzBhZWU0NWI3Li42MzRjZDA5MzY2ZGE2IDEwMDY0NFxuLS0tIGEvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuKysrIGIvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuQEAgLTQ2MCw2ICs0NjAsNyBAQFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfQUxMT1dFRF9TRVZfRkVBVFVSRVMgKDE5KjMyKzI3KSAvKiBBbGxvd2VkIFNFViBGZWF0dXJlcyAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfU1ZTTVx0XHQoMTkqMzIrMjgpIC8qIFwic3ZzbVwiIFNWU00gcHJlc2VudCAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfSFZfSU5VU0VfV1JfQUxMT1dFRFx0KDE5KjMyKzMwKSAvKiBBbGxvdyBXcml0ZSB0byBpbi11c2UgaHlwZXJ2aXNvci1vd25lZCBwYWdlcyAqL1xuKyNkZWZpbmUgWDg2X0ZFQVRVUkVfU05QX0lCUEJfT05fRU5UUllcdCgxOSozMiszMSkgLyogU0VWLVNOUCBJQlBCIG9uIFZNIEVudHJ5ICovXG4gXG4gLyogQU1ELWRlZmluZWQgRXh0ZW5kZWQgRmVhdHVyZSAyIEVBWCwgQ1BVSUQgbGV2ZWwgMHg4MDAwMDAyMSAoRUFYKSwgd29yZCAyMCAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfTk9fTkVTVEVEX0RBVEFfQlBcdCgyMCozMisgMCkgLyogTm8gTmVzdGVkIERhdGEgQnJlYWtwb2ludHMgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuY1xuaW5kZXggODdiZmY0ZmJiN2VkNS4uM2Y1OTJlMjQ1YTY2ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmNcbkBAIC0xMywxNyArMTMsMjUgQEBcbiAjaW5jbHVkZSBcInN2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuIFxuLSNkZWZpbmUgU1ZNX1NFVl9GRUFUX0RFQlVHX1NXQVAgMzJ1XG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRVx0XHRCSVRfVUxMKDApXG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUFx0XHRCSVRfVUxMKDUpXG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfQlRCX0lTT0xBVElPTlx0QklUX1VMTCg3KVxuKyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0NcdFx0QklUX1VMTCg5KVxuKyNkZWZpbmUgU1ZNX1NFVl9GRUFUX0lCUEJfT05fRU5UUllcdEJJVF9VTEwoMjEpXG4rXG4rLyogRmVhdHVyZXMgdmFsaWQgb25seSBmb3IgU05QIGd1ZXN0cywgcmVqZWN0ZWQgZm9yIFNFVi1FUyBhbmQgYmVsb3cuICovXG4rI2RlZmluZSBTTlBfT05MWV9GRUFUVVJFU1x0XHQoU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkUgfCBcXFxuK1x0XHRcdFx0XHQgU1ZNX1NFVl9GRUFUX0JUQl9JU09MQVRJT04gfCBcXFxuK1x0XHRcdFx0XHQgU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0MgfCBcXFxuK1x0XHRcdFx0XHQgU1ZNX1NFVl9GRUFUX0lCUEJfT05fRU5UUlkpXG4gXG4gLypcbiAgKiBTb21lIGZlYXR1cmVzIG1heSBoYXZlIGhpZGRlbiBkZXBlbmRlbmNpZXMsIG9yIG1heSBvbmx5IHdvcmtcbiAgKiBmb3IgY2VydGFpbiBWTSB0eXBlcy4gIEVyciBvbiB0aGUgc2lkZSBvZiBzYWZldHkgYW5kIGRvbid0XG4gICogZXhwZWN0IHRoYXQgYWxsIHN1cHBvcnRlZCBmZWF0dXJlcyBjYW4gYmUgcGFzc2VkIG9uZSBieSBvbmVcbiAgKiB0byBLVk1fU0VWX0lOSVQyLlxuLSAqXG4tICogKFdlbGwsIHJpZ2h0IG5vdyB0aGVyZSdzIG9ubHkgb25lLi4uKVxuICAqL1xuLSNkZWZpbmUgS05PV05fRkVBVFVSRVMgU1ZNX1NFVl9GRUFUX0RFQlVHX1NXQVBcbisjZGVmaW5lIEtOT1dOX0ZFQVRVUkVTXHRcdChTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUCB8IFNOUF9PTkxZX0ZFQVRVUkVTKVxuIFxuIGludCBrdm1fZmQ7XG4gdTY0IHN1cHBvcnRlZF92bXNhX2ZlYXR1cmVzO1xuQEAgLTEwOCw3ICsxMTYsNyBAQCB2b2lkIHRlc3RfZmVhdHVyZXModTMyIHZtX3R5cGUsIHU2NCBzdXBwb3J0ZWRfZmVhdHVyZXMpXG4gXHRcdGlmICghKHN1cHBvcnRlZF9mZWF0dXJlcyBcdTAwMjYgQklUX1VMTChpKSkpXG4gXHRcdFx0dGVzdF9pbml0Ml9pbnZhbGlkKHZtX3R5cGUsXG4gXHRcdFx0XHRcdTAwMjYoc3RydWN0IGt2bV9zZXZfaW5pdCl7IC52bXNhX2ZlYXR1cmVzID0gQklUX1VMTChpKSB9LFxuLVx0XHRcdFx0XCJ1bmtub3duIGZlYXR1cmVcIik7XG4rXHRcdFx0XHRcInVua25vd24gb3IgdW5zdXBwb3J0ZWQgZmVhdHVyZSBmb3IgVk0gdHlwZVwiKTtcbiBcdFx0ZWxzZSBpZiAoS05PV05fRkVBVFVSRVMgXHUwMDI2IEJJVF9VTEwoaSkpXG4gXHRcdFx0dGVzdF9pbml0Mih2bV90eXBlLFxuIFx0XHRcdFx0XHUwMDI2KHN0cnVjdCBrdm1fc2V2X2luaXQpeyAudm1zYV9mZWF0dXJlcyA9IEJJVF9VTEwoaSkgfSk7XG5AQCAtMTU3LDcgKzE2NSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXG4gXHR0ZXN0X2ZlYXR1cmVzKEtWTV9YODZfU0VWX1ZNLCAwKTtcbiBcdGlmIChoYXZlX3Nldl9lcylcbi1cdFx0dGVzdF9mZWF0dXJlcyhLVk1fWDg2X1NFVl9FU19WTSwgc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMpO1xuK1x0XHR0ZXN0X2ZlYXR1cmVzKEtWTV9YODZfU0VWX0VTX1ZNLCBzdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyBcdTAwMjYgflNOUF9PTkxZX0ZFQVRVUkVTKTtcbiBcdGlmIChoYXZlX3NucClcbiBcdFx0dGVzdF9mZWF0dXJlcyhLVk1fWDg2X1NOUF9WTSwgc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTc6MTMuNzQ1NTQ4MzA5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE5MTg4OTIxMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFNFVi1TTlAgRmVhdHVyZSBWYWxpZGF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgbmVjZXNzaXRhdGUgZnV6emluZy4gTXkgaW5pdGlhbCBzY2FuIHBvaW50cyB0byBtb2RpZmljYXRpb25zIGFjcm9zcyB0aGUgeDg2IGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBtaXRpZ2F0aW9uIHN0cmF0ZWdpZXMgZm9yIENQVSB2dWxuZXJhYmlsaXRpZXMgYW5kIGVuaGFuY2VtZW50cyB0byBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIGZlYXR1cmVzLCBwYXJ0aWN1bGFybHkgU0VWLVNOUC5cblxuVGhlIGNoYW5nZXMgaW4gYGFyY2gveDg2L0tjb25maWdgLCBgYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaGAsIGFuZCBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhgIGludHJvZHVjZSBhbmQgbW9kaWZ5IGZlYXR1cmUgZmxhZ3MgYW5kIGRlZmluaXRpb25zLiBgYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmNgIGFuZCBgYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uY2Agc2hvdyB1cGRhdGVzIHRvIGV4aXN0aW5nIG1pdGlnYXRpb24gbG9naWMgcmVsYXRlZCB0byB0aGluZ3MgbGlrZSByZXRibGVlZCBhbmQgU3BlY3RyZSB2MiwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGV4cG9zdXJlLiBUaGUgdXBkYXRlcyBpbiBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gU0VWLVNOUCBzdXBwb3J0IHdpdGhpbiBLVk0sIHdoaWNoIGNhdGNoZXMgbXkgYXR0ZW50aW9uLiBUaGUgdXBkYXRlcyB0byB0aGUgdG9vbHMgYW5kIHNlbGZ0ZXN0cyBhcmUgYWxzbyBub3QgZGlyZWN0bHkgcmVsZXZhbnQuXG5cbkZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGVzZSBjaGFuZ2VzLiBUaGUgYm9vdC10aW1lIGxvZ2ljIGluIGBidWdzLmNgIGFuZCBgY29tbW9uLmNgIGlzIGNlcnRhaW5seSB0b3VjaGVkIGR1cmluZyBrZXJuZWwgaW5pdGlhbGl6YXRpb24sIHdoaWNoIGNhbiBjZXJ0YWlubHkgaW5mbHVlbmNlIGV4ZWN1dGlvbiBwYXRocywgYnV0IGlzbid0IGFzIHJlYWRpbHkgYWNjZXNzaWJsZSBhcyBhIHVzZXJzcGFjZSBpbnRlcmZhY2UuIEhvd2V2ZXIsIHRoZSBTRVYtcmVsYXRlZCBjaGFuZ2VzIGluIGBzZXYuY2AgYXJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gU3BlY2lmaWNhbGx5LCBgX19zZXZfZ3Vlc3RfaW5pdGAgYW5kIGBzZXZfaGFyZHdhcmVfc2V0dXBgIGFyZSBjcml0aWNhbCBmb3IgdGhlIHNldHVwIG9mIHRoZSBLVk0gU0VWIGd1ZXN0IGVudmlyb25tZW50LiBUaGlzIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBleGVyY2lzZWQgdmlhIEtWTSwgdGhlcmVmb3JlLCBpZiByZWFjaGFibGUsIGl0IGlzIGZ1enplYWJsZS5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogYXJlIHRoZXNlIGNoYW5nZXMgd29ydGggZnV6emluZz8gVGhlIENQVSBidWcgbWl0aWdhdGlvbiBjaGFuZ2VzIGF0IGJvb3QgYXJlIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIGFzIHRoZXkgbWlnaHQgaW5mbHVlbmNlIHRoZSBtaXRpZ2F0aW9uIGJlaGF2aW9yLCBidXQgbXkgbWFpbiBmb2N1cyBpcyBvbiB0aGUgU0VWIGNoYW5nZXMsIHdoaWNoIGludm9sdmUgZGlyZWN0IGludGVyYWN0aW9uIHdpdGggYSBoeXBlcnZpc29yLiBTcGVjaWZpY2FsbHksIHRoZSBgX19zZXZfZ3Vlc3RfaW5pdGAgZnVuY3Rpb24sIHdoaWNoIGFwcGVhcnMgdG8gdmFsaWRhdGUgYHZtc2FfZmVhdHVyZXNgLCBsb29rcyBwcm9taXNpbmcuIFRoaXMgdmFsaWRhdGlvbiBwcm9jZXNzLCBpZiBmbGF3ZWQsIGNvdWxkIGxlYWQgdG8gc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLlxuXG5MZXQncyBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUuIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoaXMgYml0IG9mIGBfX3Nldl9ndWVzdF9pbml0YDpcblxuYGBgY1xuc3RhdGljIGludCBfX3Nldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxuLi4uXG5cdGlmICghc25wX2FjdGl2ZSlcblx0XHR2YWxpZF92bXNhX2ZlYXR1cmVzIFx1MDAyNj0gflNWTV9TRVZfRkVBVF9TTlBfT05MWV9NQVNLO1xuXG5cdGlmIChkYXRhLVx1MDAzZXZtc2FfZmVhdHVyZXMgXHUwMDI2IH52YWxpZF92bXNhX2ZlYXR1cmVzKVxuXHRcdHJldHVybiAtRUlOVkFMO1xuYGBgXG5cblRoaXMgdmFsaWRhdGlvbiBzZWVtcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBLVk0gaW9jdGxzISBUaGlzIHBhcnQgdmFsaWRhdGVzIHRoZSBgdm1zYV9mZWF0dXJlc2AgZmllbGQuIFRoZSBpb2N0bCBpcyBsaWtlbHkgYEtWTV9NRU1PUllfRU5DUllQVF9PUGAgd2l0aCBgS1ZNX1NFVl9JTklUMmAuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgcXVpY2tseS4gSSBuZWVkIHRvIGdldCByZWFkeSB0byBjcmFmdCBzb21lIGZ1enppbmcgaW5wdXRzLiBUaGlzIGlzIGRlZmluaXRlbHkgZnV6emFibGUhXG5cbk9rYXksIHRpbWUgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgZnVuY3Rpb25zIGFuZCBhcmd1bWVudHMgdG8gdGFyZ2V0IHdpdGggdGhlIGZ1enplci5cbmBfX3Nldl9ndWVzdF9pbml0YCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgc28gbGV0J3Mgc2VlIHdoZXJlIGl0J3MgYmVpbmcgY2FsbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mjc2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODM0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTc6MjUuNjY0NDQzNzgxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNzQ2NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc2V2X2d1ZXN0X2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ3Nz1zdGF0aWMgdm9pZCBzbnBfZ3Vlc3RfcmVxX2NsZWFudXAoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTAtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0OTE6c3RhdGljIGludCBfX3Nldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDkyLVxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3Nldl9pbml0ICpkYXRhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz01ODE9c3RhdGljIGludCBzZXZfZ3Vlc3RfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjAwLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NjAxOlxcdHJldHVybiBfX3Nldl9ndWVzdF9pbml0KGt2bSwgYXJncCwgXFx1MDAyNmRhdGEsIHZtX3R5cGUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjAyLX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NjA0PXN0YXRpYyBpbnQgc2V2X2d1ZXN0X2luaXQyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MTgtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MTk6XFx0cmV0dXJuIF9fc2V2X2d1ZXN0X2luaXQoa3ZtLCBhcmdwLCBcXHUwMDI2ZGF0YSwga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjIwLX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzM0OD12b2lkIHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzM1NC1cXHQgKlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzM1NTpcXHQgKiBDaGVja2luZyBmb3IgU0VWKyBvdXRzaWRlIG9mIGt2bS1cXHUwMDNlbG9jayBpcyBzYWZlIGFzIF9fc2V2X2d1ZXN0X2luaXQoKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzM1Ni1cXHQgKiBjYW4gb25seSBiZSBkb25lIGJlZm9yZSB2Q1BVcyBhcmUgY3JlYXRlZCwgY2FjaGVzIGNhbiBiZSBpbmNvaGVyZW50XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU3OjI1LjcxNTE5NzQxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0OTA4ODE1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgU0VWIEd1ZXN0IEluaXRpYWxpemF0aW9uIEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgc2V2X2d1ZXN0X2luaXRgIGFuZCBgc2V2X2d1ZXN0X2luaXQyYC4gSSBrbm93IHRoZXkgYm90aCB1bHRpbWF0ZWx5IGZ1bm5lbCBpbnRvIGBfX3Nldl9ndWVzdF9pbml0YC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCBvZiBjb3Vyc2UsIGlzIHdoYXQncyB0cmlnZ2VyaW5nIHRoZXNlIGBzZXZfZ3Vlc3RfaW5pdGAgZnVuY3Rpb25zIGluIHRoZSBmaXJzdCBwbGFjZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGgg4oCTIHdobydzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHRob3NlIGVudHJ5IHBvaW50cy4gSSdsbCBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aG9zZSBmdW5jdGlvbnMgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBhbmQgZGV0ZXJtaW5lIHRoZSBvdmVyYWxsIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUgaGVyZS4gTGV0J3Mgc2VlIHdobydzIGFjdHVhbGx5IG1ha2luZyB0aGVzZSBjYWxscy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQzNywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU3OjI5LjI2NDI4NzUxNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzAzOTI2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXZfZ3Vlc3RfaW5pdDJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTU4MT1zdGF0aWMgaW50IHNldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MDMtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MDQ6c3RhdGljIGludCBzZXZfZ3Vlc3RfaW5pdDIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MDUte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjQ4PWludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjg0LVxcdGNhc2UgS1ZNX1NFVl9JTklUMjpcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI2ODU6XFx0XFx0ciA9IHNldl9ndWVzdF9pbml0Mihrdm0sIFxcdTAwMjZzZXZfY21kKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2ODYtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU3OjI5LjMxMTMyOTEyM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjcyMzkzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgc2V2X21lbV9lbmNfaW9jdGxgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHNldl9tZW1fZW5jX2lvY3RsYC4gIE15IGZpcnN0IHF1ZXN0aW9uIGlzIGFsd2F5czogaXMgdGhpcyB0aGUgZW50cnkgcG9pbnQ/ICBTZWVtcyBsaWtlIGl0LiBOb3csIHRoZSBiaWdnZXIgcXVlc3Rpb24gaXMsIGlzIHRoaXMgZnVuY3Rpb24gZGVjbGFyZWQgc3RhdGljYWxseSBvciBub3Q/IEtub3dpbmcgdGhhdCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyB2aXNpYmlsaXR5IGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQncyBkaWcgaW4gYW5kIHZlcmlmeS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk3MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU3OjMyLjkzODU3MTE3OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ3NDgxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXZfbWVtX2VuY19pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjYzOD1zdGF0aWMgaW50IHNucF9lbmFibGVfY2VydHMoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjQ3LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjY0ODppbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2NDkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjo1NzozMi45ODUwNDg0MTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTg0ODU3NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHNldl9tZW1fZW5jX2lvY3RsYCBhbmQgYHNldl9oYXJkd2FyZV9zZXR1cGAqKlxuXG5Pa2F5LCBzbyB0aGUgYHNldl9tZW1fZW5jX2lvY3RsYCBmdW5jdGlvbiAqaXNuJ3QqIGRlY2xhcmVkIGFzIHN0YXRpYy4gR29vZC4gVGhhdCBjbGFyaWZpZXMgdGhhdCBwb2ludCBpbW1lZGlhdGVseS4gTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBzZXZfaGFyZHdhcmVfc2V0dXBgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4gVGhhdCdzIHRoZSBsb2dpY2FsIHByb2dyZXNzaW9uIGhlcmUuIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gaW4gdGhhdCBzZXR1cCByb3V0aW5lLiBJIGhhdmUgYSBodW5jaCBpdCdzIHJlbGF0ZWQsIG9mIGNvdXJzZSwgYnV0IGl0J3MgdGltZSB0byBjb25maXJtIGFuZCBmaWd1cmUgb3V0IHRoZSBleGFjdCByZWxhdGlvbnNoaXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjgwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTc6MzcuMTY5OTA3OTUxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODk0NjIyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXZfaGFyZHdhcmVfc2V0dXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTMwODE9c3RhdGljIGNvbnN0IGNoYXIgKiBfX2luaXQgc2V2X3N0cl9mZWF0dXJlX3N0YXRlKGJvb2wgaXNfc3VwcG9ydGVkLCBib29sIGlzX3VzYWJsZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzA4NS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMwODY6dm9pZCBfX2luaXQgc2V2X2hhcmR3YXJlX3NldHVwKHZvaWQpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMDg3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTc6MzcuMjE4ODU4ODZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzg4MTA0NjEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjaGFuZ2VzIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgbW9zdCBmcnVpdGZ1bCBmdXp6aW5nIHRhcmdldHMgYXJlLiBgc2V2X2hhcmR3YXJlX3NldHVwYCBpcyBjbGVhcmx5IG91dC4gSXQncyBhbiBpbml0IGZ1bmN0aW9uLCBydW5zIGF0IGJvb3QsIG5vdCBpZGVhbCBmb3IgZHluYW1pYyBmdXp6aW5nLiBUaGUga2V5IHNlZW1zIHRvIGJlIGFyb3VuZCBgX19zZXZfZ3Vlc3RfaW5pdGAsIGFzIGl0J3MgY2FsbGVkIHRocm91Z2ggYHNldl9ndWVzdF9pbml0MmAgYW5kIGBzZXZfZ3Vlc3RfaW5pdGAsIGFuZCB0aG9zZSBhcmUgcmVhY2hlZCB2aWEgYHNldl9tZW1fZW5jX2lvY3RsYC4gVGhhdCdzIHRoZSBtb3N0IHByb21pc2luZyBsZWFkIHNvIGZhci5cblxuTm93LCBsZXQncyBwZWVrIGludG8gdGhvc2UgYGFyY2gveDg2L2tlcm5lbC9jcHUvYnVncy5jYCBjaGFuZ2VzLiBBbHJpZ2h0LCBgcmV0YmxlZWRfdXBkYXRlX21pdGlnYXRpb25gLCBgc3BlY3RyZV92Ml9zZWxlY3RfbWl0aWdhdGlvbmAsIGFuZCB0aGUgbWl0aWdhdGlvbiBhcHBsaWNhdGlvbiBmdW5jdGlvbnMg4oCTIHRoZXkncmUgYWxsIGBfX2luaXRgLiBUaGF0J3MgYSBkZWFkIGVuZDsgaW5pdCBmdW5jdGlvbnMgYXJlbid0IGVhc2lseSBmdXp6ZWQgZnJvbSB1c2Vyc3BhY2UuIEknbGwgaWdub3JlIHRoZW0uXG5cblNvLCB0aGUgZm9jdXMgaXMgcmVhbGx5IHRoZSBLVk0gU0VWIHN0dWZmLiBHb29kLiBUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIGFjY2Vzc2liaWxpdHkuIENhbiBJIGhpdCBLVk0gU0VWIGluIFFFTVU/IEkgdGhpbmsgc28g4oCTIFFFTVUgY2FuIGVtdWxhdGUgU0VWLCBvciBhdCBsZWFzdCB0aGUgS1ZNIGlvY3RscyBhcmUgcmVhY2hhYmxlLiBUaGUgU0VWIGhhcmR3YXJlIHJlcXVpcmVtZW50IGlzIGEgY29tcGxpY2F0aW9uLCBvYnZpb3VzbHksIG5lZWRpbmcgYW4gQU1EIENQVSB3aXRoIFNFViBzdXBwb3J0LiBCdXQsIGFuZCB0aGlzIGlzIHRoZSBpbXBvcnRhbnQgcGFydCwgU3l6a2FsbGVyICpzaG91bGQqIGJlIGFibGUgdG8gZnV6eiB0aGUgS1ZNIGlvY3RscyBldmVuIHdpdGhvdXQgZnVsbCBoYXJkd2FyZSBzdXBwb3J0LiBJdCBkb2Vzbid0IGNhcmUgaWYgaXQgaXMgb24gQU1EIGhhcmR3YXJlIG9yIG5vdC5cblxuV2FpdCBhIHNlY29uZCwgdGhvdWdoLiBJIG5lZWQgdG8gYmUgc3VyZSBhYm91dCB0aGUgcmVhY2hhYmlsaXR5IG9mIGBzZXZfbWVtX2VuY19pb2N0bGAuIERvZXMgaXQgKnJlcXVpcmUqIFNFViBoYXJkd2FyZSB0byBiZSBhY2Nlc3NpYmxlPyBJIG5lZWQgdG8gY2hlY2sgYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGVmZm9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjIyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU3OjQ1LjA5OTkwNjc1N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwODEyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V2X21lbV9lbmNfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjM4PXN0YXRpYyBpbnQgc25wX2VuYWJsZV9jZXJ0cyhzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2NDctXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNjQ4OmludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY0OS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTUzMjg9c3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0NDUtXFx0LmRldl9nZXRfYXR0ciA9IHNldl9kZXZfZ2V0X2F0dHIsXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1NDQ2OlxcdC5tZW1fZW5jX2lvY3RsID0gc2V2X21lbV9lbmNfaW9jdGwsXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDQ3LVxcdC5tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbiA9IHNldl9tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbixcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9OTgzPWJvb2wgc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjk4NDppbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05ODUtaW50IHNldl9tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU3OjQ1LjE0ODk5Mjg2N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQ4MjI3MTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggS1ZNIGFuZCBTRVY6XG5cbioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBgc2V2X21lbV9lbmNfaW9jdGxgKipcblxuQWxyaWdodCwgc28gYHNldl9tZW1fZW5jX2lvY3RsYCBpcyB0aGUgcm91dGluZSB0aGF0IGhhbmRsZXMgYEtWTV9NRU1PUllfRU5DUllQVF9PUGAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgdGhlIGludGVyZmFjZSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBtZW1vcnkgZW5jcnlwdGlvbiBjYXBhYmlsaXRpZXMgd2l0aGluIEtWTS4gTXkgZmlyc3QgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBob3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGhhbmRsZSBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSAqZG9lc24ndCogYWN0dWFsbHkgc3VwcG9ydCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpPyBEb2VzIGl0IGhhdmUgYSBxdWljaywgZWFybHkgY2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgcmVxdWlyZWQgQ1BVIGZlYXR1cmVzIG9yIHBsYXRmb3JtIHN1cHBvcnQsIG9yIGRvZXMgaXQgdHJ5IHRvIGdvIHRocm91Z2ggdGhlIG1vdGlvbnMgYW5kIGZhaWwgbGF0ZXIgaW4gdGhlIHByb2Nlc3M/IEknbSBob3BpbmcgaXQncyB0aGUgZm9ybWVyLCBmb3IgcGVyZm9ybWFuY2UgYW5kIGVycm9yIGhhbmRsaW5nLiBJdCB3b3VsZCBiZSBhIHNpZ25pZmljYW50IGlzc3VlIGlmIGl0IGF0dGVtcHRlZCBzb21lIFNFViBvcGVyYXRpb24gYW5kIHRoZW4gZXJyb3JlZCBvdXQgYXQgYSBkZWVwZXIgbGV2ZWwuIEEgY2xlYXIsIHVwLWZyb250IGNoZWNrIHdvdWxkIGJlIG11Y2ggY2xlYW5lci4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBkZXRlcm1pbmUgdGhpcyBhcyB0aGUgaW5pdGlhbCBmb2N1cyBvZiB0aGUgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3OTEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjo1Nzo0OS4wOTcyMjI4ODVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTYyMzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldl9tZW1fZW5jX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjM4PXN0YXRpYyBpbnQgc25wX2VuYWJsZV9jZXJ0cyhzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2NDctXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNjQ4OmludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY0OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU3OjQ5LjE0NTE5MDc2NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTYzNDYxMTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgc2V2X21lbV9lbmNfaW9jdGxgKipcblxuQWxyaWdodCwgdGltZSB0byBjcmFjayBvcGVuIGBzZXZfbWVtX2VuY19pb2N0bGAuIEp1c3QgdGhlIG5hbWUgaXRzZWxmIGlzIGEgZGVjZW50IGhpbnQ7IGl0IHNjcmVhbXMgXCJtZW1vcnkgZW5jcnlwdGlvblwiIGFuZCBcImlvY3RsXCIuIEZyb20gYSBoaWdoLWxldmVsIHBlcnNwZWN0aXZlLCBJJ20gZXhwZWN0aW5nIHRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMg4oCTIHRoZSBpbnRlcmZhY2UgdGhyb3VnaCB3aGljaCB1c2Vyc3BhY2UgaW50ZXJhY3RzIHdpdGggdGhlIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgbWVtb3J5IGVuY3J5cHRpb24gZmVhdHVyZXMuIEknbSBrZWVuIHRvIHNlZSB0aGUgc3BlY2lmaWMgaW9jdGwgbnVtYmVycywgd2hhdCBraW5kIG9mIGNvbW1hbmRzIGFyZSBzdXBwb3J0ZWQsIGFuZCBob3cgdGhlIGludGVyYWN0aW9uIGlzIHN0cnVjdHVyZWQuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2Uga2V5IG1hbmFnZW1lbnQsIG1lbW9yeSByZWdpb24gc2V0dXAsIGF0dGVzdGF0aW9uIHJlcXVlc3RzLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBkZWJ1Zy9zdGF0dXMgaW5mb3JtYXRpb24uIE15IGJhY2tncm91bmQgdGVsbHMgbWUgdGhhdCBJJ20gZXhwZWN0aW5nIGl0IHRvIGJlIGNvbXBsZXg7IHRoYXQncyBqdXN0IHRoZSBuYXR1cmUgb2Ygc2VjdXJpdHkgYXJjaGl0ZWN0dXJlcy4gQnV0LCBhbHNvIGl0IHdpbGwgcHJvdmlkZSBhIGNydWNpYWwgcGllY2UgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBzeXN0ZW0gYWN0dWFsbHkgZnVuY3Rpb25zLiBMZXQncyBzZWUgaWYgdGhlIGNvZGUgY29uZmlybXMgbXkgaW5pdGlhbCBhc3N1bXB0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMzcsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjo1Nzo1My4xMDg2NTQ3NjNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjY0OCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjY0ODpcXHRpbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcXG4yNjQ5OlxcdHtcXG4yNjUwOlxcdFxcdHN0cnVjdCBrdm1fc2V2X2NtZCBzZXZfY21kO1xcbjI2NTE6XFx0XFx0aW50IHI7XFxuMjY1MjpcXHRcXG4yNjUzOlxcdFxcdGlmICghc2V2X2VuYWJsZWQpXFxuMjY1NDpcXHRcXHRcXHRyZXR1cm4gLUVOT1RUWTtcXG4yNjU1OlxcdFxcbjI2NTY6XFx0XFx0aWYgKCFhcmdwKVxcbjI2NTc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjY1ODpcXHRcXG4yNjU5OlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2c2V2X2NtZCwgYXJncCwgc2l6ZW9mKHN0cnVjdCBrdm1fc2V2X2NtZCkpKVxcbjI2NjA6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMjY2MTpcXHRcXG4yNjYyOlxcdFxcdGd1YXJkKG11dGV4KShcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG4yNjYzOlxcdFxcbjI2NjQ6XFx0XFx0LyogT25seSB0aGUgZW5jX2NvbnRleHRfb3duZXIgaGFuZGxlcyBzb21lIG1lbW9yeSBlbmMgb3BlcmF0aW9ucy4gKi9cXG4yNjY1OlxcdFxcdGlmIChpc19taXJyb3JpbmdfZW5jX2NvbnRleHQoa3ZtKSBcXHUwMDI2XFx1MDAyNlxcbjI2NjY6XFx0XFx0ICAgICFpc19jbWRfYWxsb3dlZF9mcm9tX21pcnJvcihzZXZfY21kLmlkKSlcXG4yNjY3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI2Njg6XFx0XFxuMjY2OTpcXHRcXHQvKlxcbjI2NzA6XFx0XFx0ICogT25jZSBLVk1fU0VWX0lOSVQyIGluaXRpYWxpemVzIGEgS1ZNIGluc3RhbmNlIGFzIGFuIFNOUCBndWVzdCwgb25seVxcbjI2NzE6XFx0XFx0ICogYWxsb3cgdGhlIHVzZSBvZiBTTlAtc3BlY2lmaWMgY29tbWFuZHMuXFxuMjY3MjpcXHRcXHQgKi9cXG4yNjczOlxcdFxcdGlmIChzZXZfc25wX2d1ZXN0KGt2bSkgXFx1MDAyNlxcdTAwMjYgc2V2X2NtZC5pZCBcXHUwMDNjIEtWTV9TRVZfU05QX0xBVU5DSF9TVEFSVClcXG4yNjc0OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMjY3NTpcXHRcXG4yNjc2OlxcdFxcdHN3aXRjaCAoc2V2X2NtZC5pZCkge1xcbjI2Nzc6XFx0XFx0Y2FzZSBLVk1fU0VWX0VTX0lOSVQ6XFxuMjY3ODpcXHRcXHRcXHRpZiAoIXNldl9lc19lbmFibGVkKVxcbjI2Nzk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuMjY4MDpcXHRcXHRcXHRmYWxsdGhyb3VnaDtcXG4yNjgxOlxcdFxcdGNhc2UgS1ZNX1NFVl9JTklUOlxcbjI2ODI6XFx0XFx0XFx0ciA9IHNldl9ndWVzdF9pbml0KGt2bSwgXFx1MDAyNnNldl9jbWQpO1xcbjI2ODM6XFx0XFx0XFx0YnJlYWs7XFxuMjY4NDpcXHRcXHRjYXNlIEtWTV9TRVZfSU5JVDI6XFxuMjY4NTpcXHRcXHRcXHRyID0gc2V2X2d1ZXN0X2luaXQyKGt2bSwgXFx1MDAyNnNldl9jbWQpO1xcbjI2ODY6XFx0XFx0XFx0YnJlYWs7XFxuMjY4NzpcXHRcXHRjYXNlIEtWTV9TRVZfTEFVTkNIX1NUQVJUOlxcbjI2ODg6XFx0XFx0XFx0ciA9IHNldl9sYXVuY2hfc3RhcnQoa3ZtLCBcXHUwMDI2c2V2X2NtZCk7XFxuMjY4OTpcXHRcXHRcXHRicmVhaztcXG4yNjkwOlxcdFxcdGNhc2UgS1ZNX1NFVl9MQVVOQ0hfVVBEQVRFX0RBVEE6XFxuMjY5MTpcXHRcXHRcXHRyID0gc2V2X2xhdW5jaF91cGRhdGVfZGF0YShrdm0sIFxcdTAwMjZzZXZfY21kKTtcXG4yNjkyOlxcdFxcdFxcdGJyZWFrO1xcbjI2OTM6XFx0XFx0Y2FzZSBLVk1fU0VWX0xBVU5DSF9VUERBVEVfVk1TQTpcXG4yNjk0OlxcdFxcdFxcdHIgPSBzZXZfbGF1bmNoX3VwZGF0ZV92bXNhKGt2bSwgXFx1MDAyNnNldl9jbWQpO1xcbjI2OTU6XFx0XFx0XFx0YnJlYWs7XFxuMjY5NjpcXHRcXHRjYXNlIEtWTV9TRVZfTEFVTkNIX01FQVNVUkU6XFxuMjY5NzpcXHRcXHRcXHRyID0gc2V2X2xhdW5jaF9tZWFzdXJlKGt2bSwgXFx1MDAyNnNldl9jbWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjo1Nzo1My4xMDg4NzM3ODNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE5ODM0MjQ5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNFViBSZWFjaGFiaWxpdHkgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgY2hlY2sgZm9yIGBzZXZfZW5hYmxlZGAuIFRoYXQncyB0aGUgZ2F0ZWtlZXBlci4gSXQncyB0aWVkIHRvIGhhcmR3YXJlIHN1cHBvcnQsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIGFib3V0IHdoZXRoZXIgdGhpcyBjb2RlIHBhdGggaXMgZXZlbiAqcG9zc2libGUqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVS4gU3l6a2FsbGVyJ3MgdXNlZCBvbiBHQ0UsIGFuZCBHQ0UgKmRvZXMqIG9mZmVyIEFNRCBpbnN0YW5jZXMgd2l0aCBTRVYgY2FwYWJpbGl0aWVzIChOMkQsIEMyRCwgZXRjLikuIFRoYXQncyBwcm9taXNpbmcsIEkgc2hvdWxkIG5vdGUgdGhhdC5cblxuQnV0IFN5emthbGxlciBydW5zIGluIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiDigJMgUUVNVSBvbiBHQ0UuIFNvLCBkb2VzIFFFTVUgc3VwcG9ydCBuZXN0ZWQgU0VWPyBZZXMsIGl0IGRvZXMuIFFFTVUgYW5kIEtWTSBoYW5kbGUgbmVzdGVkIFNFViwgdGhvdWdoIGl0J3Mgbm90IGFsd2F5cyBlbmFibGVkIGJ5IGRlZmF1bHQuIFRoYXQgYWxpZ25zIHdpdGggdGhlIGVhcmxpZXIgdGhvdWdodCBhYm91dCBTRVYgc3VwcG9ydC5cblxuVGhlbiwgdGhlcmUgaXMgdGhlIGNvbmZ1c2luZyBzdGF0ZW1lbnQuIFRoZSBwcm9tcHQgc2F5cywgXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gVGhhdCB0aHJvd3MgbWUgZm9yIGEgbG9vcCBpbml0aWFsbHkuIFNFViAqaXMqIHJlYWNoYWJsZSBpbiBRRU1VIGlmIHRoZSBob3N0IGhhcyB0aGUgaGFyZHdhcmUgYW5kIHBhc3NlcyBpdCB0aHJvdWdoLCBvciBpZiBpdCdzIGVtdWxhdGVkLCBidXQgdGhlIFwiZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiIGlzIHRocm93aW5nIG1lIG9mZi4gU0VWIGlzbid0ICpmdWxseSogZW11bGF0ZWQgaW4gc29mdHdhcmU7IGl0IGZ1bmRhbWVudGFsbHkgbmVlZHMgaGFyZHdhcmUuIFNvLCBpZiB0aGUgY29kZSBkZW1hbmRzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCB0aGUgYW5zd2VyIGlzIGZhbHNlLlxuXG5XYWl0LCB5ZXMsIFNFViBuZWVkcyBBTUQgRVBZQyBwcm9jZXNzb3JzLiBUaGF0J3MgdGhlIGtleS4gQW5kIGlzIGl0IGVtdWxhdGVkIGluICpzdGFuZGFyZCogUUVNVT8gTm8sIGl0IHJlbGllcyBvbiBLVk0gYW5kIHRoZSBob3N0IENQVSBmb3IgU0VWLCB0aGF0J3MgaW1wb3J0YW50LiBCdXQgc3l6a2FsbGVyICpkb2VzKiBmdXp6IEtWTS4gS1ZNIGlzIGNvcmUga2VybmVsIGxvZ2ljLiBTbywgaXQncyB3b3J0aCBzZWVpbmcgaWYgYHNldl9ndWVzdF9pbml0MmAgaXMgcmVhY2hhYmxlLlxuXG5JZiBgc2V2X2VuYWJsZWRgIGlzIGZhbHNlLCB3ZSBnZXQgYC1FTk9UVFlgLiBCdXQgY2FuIGBzZXZfZW5hYmxlZGAgYWN0dWFsbHkgYmUgdHJ1ZSBpbiBRRU1VPyBZZXMsIGlmIHdlIHJ1biBRRU1VIHdpdGggS1ZNIG9uIGFuIEFNRCBob3N0IHdpdGggU0VWLiBTeXprYWxsZXIgaGFzIEtWTSBmdXp6aW5nIHRoYXQgcnVucyBvbiBBTUQgaG9zdHM7IEkganVzdCBoYXZlIHRvIGNvbmZpcm0gdGhlIEtWTSBob3N0IHN1cHBvcnRzIHRoZSByaWdodCBDUFUuIFRoZXJlZm9yZSwgeWVzLCB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlLlxuXG5Pa2F5LCBsZXTigJlzIGRpZyBpbnRvIHRoZSBjaGFuZ2VzIGluIGBfX3Nldl9ndWVzdF9pbml0YC4gVGhlc2UgbGluZXM6XG5gYGBjXG5cdGlmICghc25wX2FjdGl2ZSlcblx0XHR2YWxpZF92bXNhX2ZlYXR1cmVzIFx1MDAyNj0gflNWTV9TRVZfRkVBVF9TTlBfT05MWV9NQVNLO1xuXG5cdGlmIChkYXRhLVx1MDAzZXZtc2FfZmVhdHVyZXMgXHUwMDI2IH52YWxpZF92bXNhX2ZlYXR1cmVzKVxuXHRcdHJldHVybiAtRUlOVkFMO1xuYGBgXG5UaGF0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgc3BlY2lmaWNhbGx5IGluIGhvdyBgdm1zYV9mZWF0dXJlc2AgYXJlIHZhbGlkYXRlZCBkdXJpbmcgYEtWTV9TRVZfSU5JVDJgLiBEZWZpbml0ZWx5IHdvcnRoIGZ1enppbmchXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogd2hhdCBhcmUgdGhlIGZvY3VzIHN5bWJvbHM/IGBzZXZfbWVtX2VuY19pb2N0bGAgc2VlbXMgbGlrZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludC4gYHNldl9ndWVzdF9pbml0MmAgYW5kIGBzZXZfZ3Vlc3RfaW5pdGAgYXJlIHN0YXRpYyBidXQgc3RpbGwgcmVsZXZhbnQuIEJ1dCBgc2V2X2d1ZXN0X2luaXQyYCBtaWdodCBub3QgYmUgaW5saW5lZCBpZiBpdCdzIGxhcmdlLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgc2V2X2d1ZXN0X2luaXQyYCBpcyBhY3R1YWxseSBzdGF0aWMuIE9rYXksIHllcywgaXQgaXMuIFNvLCBgc2V2X21lbV9lbmNfaW9jdGxgIGl0IGlzLlxuXG5GaW5hbGx5LCB0aGUgY29uZmlndXJhdGlvbnM6IHdlIG5lZWQgYENPTkZJR19LVk1gIGFuZCBgQ09ORklHX0tWTV9BTURgIGZvciBLVk0gYW5kIFNWTS9TRVYgc3VwcG9ydC4gR290dGEgbWFrZSBzdXJlIHRob3NlIGFyZSBlbmFibGVkLiBUaW1lIHRvIGNoZWNrIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzE2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTg6MDUuMDkyMzAxMDQ5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY4MTA1OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQU1EXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTEzND1jb25maWcgS1ZNX0lOVEVMX1REWFxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTg6MDYuMjYwNDE1N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTg2NjM5MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEtWTSBTRVYgVnVsbmVyYWJpbGl0eSBTdXJmYWNlKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBib3RoIGBLVk1fQU1EYCBhbmQgYEtWTV9BTURfU0VWYCBhcmUgY3J1Y2lhbCBoZXJlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIHRoZSByZWNlbnQgY2hhbmdlcywgc3RhcnRpbmcgd2l0aCBgYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmNgLiBJIHNlZSB0aGUgU3BlY3RyZSB2MiBtaXRpZ2F0aW9uIGxvZ2ljIHRoZXJlLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgYEFVVE9JQlJTYCBhbmQgYElCUlNgIG1vZGVzLiBJdCdzIGJvb3QtdGltZSBzdHVmZi4gTm93LCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpc21pc3MgZnV6emluZyB0aGlzIGRpcmVjdGx5LCBzaW5jZSB0aGVzZSBtaXRpZ2F0aW9ucyBhcmUgc2V0IHVwIG9uY2UgZHVyaW5nIGJvb3QgYW5kLCBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgZG9uJ3QgZHluYW1pY2FsbHkgcmVhY3QgdG8gdXNlciBpbnB1dCAoYmFycmluZyBwZXJoYXBzIGtlcm5lbCBjb21tYW5kIGxpbmUgb3B0aW9ucywgd2hpY2ggU3l6a2FsbGVyICpjb3VsZCogdHJ5IGJ1dCBkb2Vzbid0IHVzdWFsbHkgdGFyZ2V0IGZvciBlYWNoIHRlc3QgY2FzZSkuXG5cbkhvd2V2ZXIsIHRoZSBLVk0gU0VWIGNoYW5nZXMuLi4gdGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFRob3NlIGZ1bmN0aW9ucyAqYXJlKiByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIGFuZCBtb3JlIGltcG9ydGFudGx5LCB0aGV5IGNvbnN1bWUgdXNlcnNwYWNlIGRhdGEgdmlhIHRoaW5ncyBsaWtlIGBkYXRhLVx1MDAzZXZtc2FfZmVhdHVyZXNgLiBUaGlzIGlzIGEgbXVjaCBtb3JlIHByb21pc2luZyB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGBzZXZfbWVtX2VuY19pb2N0bGAgaXMgdGhlIGNvcnJlY3QgZm9jYWwgcG9pbnQuIFllcywgaXQncyB0aGUgaGFuZGxlciBmb3IgYEtWTV9NRU1PUllfRU5DUllQVF9PUGAuIFRoYXQgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGZvY3VzIG15IGVmZm9ydHMuXG5cbkxldCdzIGRvIGEgcXVpY2sgc2NhbiBmb3Igb3RoZXIgbW9kaWZpZWQgS1ZNIFNFViBmdW5jdGlvbnMuIGBzZXZfaGFyZHdhcmVfc2V0dXBgIGlzIGNsZWFybHkgYSBvbmUtdGltZSBgX19pbml0YCBmdW5jdGlvbiwgc28gaXQncyBwcm9iYWJseSBub3QgYSBnb29kIHRhcmdldC4gYF9fc2V2X2d1ZXN0X2luaXRgIGlzIHN0YXRpYyBhbmQgbGlrZWx5IGludGVybmFsIHRvIHRoZSBLVk0gc2V0dXAsIHNvIGl0J3Mgbm90IGEgc3Ryb25nIGNvbnRlbmRlciBlaXRoZXIuXG5cbkNoZWNraW5nIGluIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCBmb3IgYHNldl9tZW1fZW5jX2lvY3RsYC4gWXVwLCBpdCdzIHRoZXJlLiBUaGlzIGhhbmRsZXMgYEtWTV9TRVZfSU5JVDJgLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgaWYgYEtWTV9BTURfU0VWYCBkZXBlbmRzIG9uIGFueXRoaW5nIGVsc2UgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDM1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU4OjE0LjI0NzA1Njc3N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg3MjAzOTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQU1EX1NFVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNDY9Y29uZmlnIEtWTV9BTURcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU4OjE0LjUzNDI2NTg0MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDEwNzMzNzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgZGVwZW5kZW5jaWVzIG9mIGBLVk1fQU1EX1NFVmAsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKkRlbHZpbmcgaW50byBLVk1fQU1EX1NFViBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyYWwgdW5kZXJwaW5uaW5ncyBvZiBgS1ZNX0FNRF9TRVZgLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsIFwiV2hlcmUgZG9lcyB0aGlzIGZpdCBpbiB0aGUgbGFyZ2VyIEtWTSBlY29zeXN0ZW0/XCIgSSBuZWVkIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzLiBJIGFscmVhZHkgaGF2ZSBhIHByZXR0eSBnb29kIG1lbnRhbCBtb2RlbCBvZiBLVk0sIGh5cGVydmlzb3JzLCBhbmQgc2VjdXJpdHkgZXh0ZW5zaW9ucyBsaWtlIFNFViwgYnV0IHVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljIHJlbGF0aW9uc2hpcCBvZiB0aGlzIG1vZHVsZSB0byB0aGUgd2hvbGUgaXMgcGFyYW1vdW50IHRvIGEgZGVlcCBjb21wcmVoZW5zaW9uLiBXaGF0IG90aGVyIEtWTSBjb21wb25lbnRzIGlzIGl0IGJ1aWx0IHVwb24/IFdoYXQgc3BlY2lmaWMgQU1EIGhhcmR3YXJlIGZlYXR1cmVzIGRvZXMgaXQgcmVseSBvbj8gV2hhdCBvdGhlciBtb2R1bGVzIG1pZ2h0IGJlIGltcGFjdGVkIG9yIG5lZWQgdG8gYmUgcHJlc2VudD8gVGhpcyBpc24ndCBqdXN0IGFib3V0IGNvZGUsIGl0J3MgYWJvdXQgdGhlIHNlY3VyaXR5IG1vZGVsIGl0IGVuYWJsZXMuIFdoYXQgYXJlIHRoZSB0cnVzdCBib3VuZGFyaWVzPyBBbnkgcG90ZW50aWFsIGF0dGFjayB2ZWN0b3JzIHN0ZW1taW5nIGZyb20gY29tcG9uZW50IGludGVyZGVwZW5kZW5jaWVzPyBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IG1hcCBvdXQgdGhlIHJlbGF0aW9uc2hpcHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDQyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTg6MTguOTQ1MDAxMjE1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1NixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE1NjpcXHRjb25maWcgS1ZNX0FNRF9TRVZcXG4gMTU3OlxcdFxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuIDE1ODpcXHRcXHRkZWZhdWx0IHlcXG4gMTU5OlxcdFxcdGRlcGVuZHMgb24gS1ZNX0FNRCBcXHUwMDI2XFx1MDAyNiBYODZfNjRcXG4gMTYwOlxcdFxcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9TUF9QU1AgXFx1MDAyNlxcdTAwMjYgIShLVk1fQU1EPXkgXFx1MDAyNlxcdTAwMjYgQ1JZUFRPX0RFVl9DQ1BfREQ9bSlcXG4gMTYxOlxcdFxcdHNlbGVjdCBBUkNIX0hBU19DQ19QTEFURk9STVxcbiAxNjI6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuIDE2MzpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0NPTlZFUlRcXG4gMTY0OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUkVDTEFJTVxcbiAxNjU6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxuIDE2NjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXFxuIDE2NzpcXHRcXHRoZWxwXFxuIDE2ODpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIGxhdW5jaGluZyBlbmNyeXB0ZWQgVk1zIHdoaWNoIHVzZSBTZWN1cmVcXG4gMTY5OlxcdFxcdCAgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpLCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIHdpdGhcXG4gMTcwOlxcdFxcdCAgRW5jcnlwdGVkIFN0YXRlIChTRVYtRVMpLCBhbmQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiB3aXRoXFxuIDE3MTpcXHRcXHQgIFNlY3VyZSBOZXN0ZWQgUGFnaW5nIChTRVYtU05QKSB0ZWNobm9sb2dpZXMgb24gQU1EIHByb2Nlc3NvcnMuXFxuIDE3MjpcXHRcXG4gMTczOlxcdGNvbmZpZyBLVk1fSU9BUElDXFxuIDE3NDpcXHRcXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4gMTc1OlxcdFxcdGRlZmF1bHQgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjo1ODoxOC45NDUwNzA3NzVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUxNDc3ODE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBSZWFzb25pbmcgZm9yIEtlcm5lbCBNb2R1bGUgU2VsZWN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZGVwZW5kZW5jaWVzOiBgS1ZNX0FNRGAsIGBYODZfNjRgLCBgQ1JZUFRPX0RFVl9TUF9QU1BgLCBhbmQgYENSWVBUT19ERVZfQ0NQX0REYC4gQmFzZWQgb24gdGhhdCwgSSBkZWZpbml0ZWx5IG5lZWQgdG8gcHVsbCBpbiBgS1ZNYCwgYEtWTV9BTURgLCBhbmQgYEtWTV9BTURfU0VWYC4gVGhvc2Ugc2VlbSBwcmV0dHkgY2xlYXItY3V0IGdpdmVuIHRoZSBBTUQtc3BlY2lmaWMgS1ZNIG1vZHVsZS4gQW5kIG9mIGNvdXJzZSwgSSBoYXZlIHRvIGluY2x1ZGUgdGhlIGNyeXB0byBkZXZpY2VzLCBgQ1JZUFRPX0RFVl9TUF9QU1BgIGFuZCBgQ1JZUFRPX0RFVl9DQ1BfRERgLlxuXG5Ob3csIHdhaXQgYSBzZWNvbmQuLi4gYENSWVBUT19ERVZfU1BfUFNQYCBhbmQgYENSWVBUT19ERVZfQ0NQX0REYCAqYXJlKiByZXF1aXJlZC4gSSBoYWQgYmV0dGVyIGdvIGJhY2sgYW5kIGRvdWJsZSBjaGVjayB0aGF0IGBDUllQVE9fREVWX1NQX1BTUGAgaXMgd2hhdCBJIHRoaW5rIGl0IGlzLCBiZWZvcmUgbW92aW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY4NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU4OjIzLjQ1OTg1MTM5NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ5Njg5MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENSWVBUT19ERVZfU1BfUFNQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvY3J5cHRvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZz0yMz1jb25maWcgQ1JZUFRPX0RFVl9DQ1BfQ1JZUFRPXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZy0zNy1cXG5kcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZzozODpjb25maWcgQ1JZUFRPX0RFVl9TUF9QU1BcXG5kcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZy0zOS1cXHRib29sIFxcXCJQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCkgZGV2aWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjo1ODoyMy41MTQ4MjMyMDRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3MDU2NzE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyB0aGUgcHJvdmlkZWQgdGV4dDpcblxuKipFeGFtaW5pbmcgdGhlIENDUCBLY29uZmlnIEZpbGUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZ2AgZmlsZS4gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHdoYXQncyBnb2luZyBvbiBhcm91bmQgbGluZSAzOC4gR2l2ZW4gdGhlIGNvbnRleHQsIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB0aGUgQ0NQIGhhcmR3YXJlLiBUaGlzIEtjb25maWcgZmlsZSBsaWtlbHkgZGVmaW5lcyB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIHRoZSBDQ1AgZHJpdmVyLCBzbyB1bmRlcnN0YW5kaW5nIHRoZXNlIHNldHRpbmdzIGlzIGNydWNpYWwgZm9yIHByb3BlciBpbnRlZ3JhdGlvbi4gSSdtIGFzc3VtaW5nIGl0J3MgZGVmaW5pbmcgc29tZSBmZWF0dXJlcyBvciB0aGUgaGFyZHdhcmUgZGV0YWlscy4gSSdsbCBmb2N1cyBvbiB0aGUgc3BlY2lmaWMgY29uZGl0aW9uYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzEzOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU4OjI2Ljc4NTM5NzMwNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0FVVEhFTkNcXG4gIDMxOlxcdFxcdHNlbGVjdCBDUllQVE9fUlNBXFxuICAzMjpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNcXG4gIDMzOlxcdFxcdGhlbHBcXG4gIDM0OlxcdFxcdCAgU3VwcG9ydCBmb3IgdXNpbmcgdGhlIGNyeXB0b2dyYXBoaWMgQVBJIHdpdGggdGhlIEFNRCBDcnlwdG9ncmFwaGljXFxuICAzNTpcXHRcXHQgIENvcHJvY2Vzc29yLiBUaGlzIG1vZHVsZSBzdXBwb3J0cyBvZmZsb2FkIG9mIFNIQSBhbmQgQUVTIGFsZ29yaXRobXMuXFxuICAzNjpcXHRcXHQgIElmIHlvdSBjaG9vc2UgJ00nIGhlcmUsIHRoaXMgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNjcF9jcnlwdG8uXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZyBDUllQVE9fREVWX1NQX1BTUFxcbiAgMzk6XFx0XFx0Ym9vbCBcXFwiUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApIGRldmljZVxcXCJcXG4gIDQwOlxcdFxcdGRlZmF1bHQgeVxcbiAgNDE6XFx0XFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX0NDUF9ERCBcXHUwMDI2XFx1MDAyNiBYODZfNjQgXFx1MDAyNlxcdTAwMjYgQU1EX0lPTU1VXFxuICA0MjpcXHRcXHRzZWxlY3QgUENJX1RTTSBpZiBQQ0lcXG4gIDQzOlxcdFxcdGhlbHBcXG4gIDQ0OlxcdFxcdCBQcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBBTUQgUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApLlxcbiAgNDU6XFx0XFx0IFRoZSBQU1AgaXMgYSBkZWRpY2F0ZWQgcHJvY2Vzc29yIHRoYXQgcHJvdmlkZXMgc3VwcG9ydCBmb3Iga2V5XFxuICA0NjpcXHRcXHQgbWFuYWdlbWVudCBjb21tYW5kcyBpbiBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIG1vZGUsXFxuICA0NzpcXHRcXHQgYWxvbmcgd2l0aCBzb2Z0d2FyZS1iYXNlZCBUcnVzdGVkIEV4ZWN1dGlvbiBFbnZpcm9ubWVudCAoVEVFKSB0b1xcbiAgNDg6XFx0XFx0IGVuYWJsZSB0aGlyZC1wYXJ0eSB0cnVzdGVkIGFwcGxpY2F0aW9ucy5cXG4gIDQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjo1ODoyNi43ODU0NTkzMjRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5ODI3MjMxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBEZXBlbmRlbmN5IEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ1JZUFRPX0RFVl9TUF9QU1BgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgaXQgcmVsaWVzIG9uIGBDUllQVE9fREVWX0NDUF9ERGAsIGBYODZfNjRgLCBhbmQgYEFNRF9JT01NVWAuIEZpbmUsIG5vIHByb2JsZW0sIHRoYXQncyBleHBlY3RlZC4gU2luY2UgSSBrbm93IHdlJ3JlIGRlYWxpbmcgd2l0aCB4ODZfNjQsIGBYODZfNjRgIGlzbid0IGEgc3VycHJpc2UuIFRoYXQgbGVhdmVzIG1lIHRvIGNoZWNrIGBDUllQVE9fREVWX0NDUF9ERGAgYW5kIGBBTURfSU9NTVVgIHRvIG1ha2Ugc3VyZSB0aGV5J3JlIGFsbCBzZXQuIFRoZSBpbW1lZGlhdGUgdGhpbmcgdG8gZG8gaXMgZGl2ZSBpbnRvIHRoZSBzdGF0ZSBvZiBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBzaW5jZSB0aGF0J3MgcHJvYmFibHkgdGhlIG1vc3QgcmVsZXZhbnQgdG8gaW52ZXN0aWdhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjQwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjo1ODozMC40ODM3MzQ1NzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODIyMTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDUllQVE9fREVWX0NDUF9ERFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnOjI6Y29uZmlnIENSWVBUT19ERVZfQ0NQX0REXFxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiU2VjdXJlIFByb2Nlc3NvciBkZXZpY2UgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjo1ODozMC41MzM1NTk0MTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzMzc3NTMzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIEtjb25maWcgZmlsZTpcblxuKipOYXZpZ2F0aW5nIHRoZSBDQ1AgS2NvbmZpZyBGaWxlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMi4gTXkgaW5pdGlhbCBleHBlY3RhdGlvbiBpcyB0aGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIGRlZmluaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBDQ1AgKENyeXB0b2dyYXBoaWMgQ29wcm9jZXNzb3IpIGRyaXZlci4gR2l2ZW4gdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUsIGl0J3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBsaXZlcy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBmb3VuZGF0aW9uYWwgYnVpbGRpbmcgYmxvY2tzOiB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgZGVmYXVsdCBzZXR0aW5ncywgYW5kIGFueSBmZWF0dXJlIGZsYWdzIHRoYXQnbGwgZ2l2ZSBtZSBhIGdyYW51bGFyIGNvbnRyb2wgb3ZlciB3aGljaCBDQ1AgZnVuY3Rpb25hbGl0aWVzIGFyZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwga2VybmVsIGJ1aWxkLiBJIHdhbnQgdG8gc2VlIGhvdyBtb2R1bGFyIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgYW5kIGlmIEkgY2FuIGVhc2lseSBzZWxlY3Qgb3IgZGVzZWxlY3Qgc3BlY2lmaWMgcGFydHMgb2YgdGhlIGRyaXZlci4gSSBhbSBnb2luZyB0byBzZWUgaWYgdGhpcyBpcyBhbiBvbGRlciBzdHlsZSBvZiBLY29uZmlnIGFuZCBuZWVkIHRvIGNoZWNrIHdoYXQgdGhlIEtjb25maWcgc3ludGF4IHVzZWQgaXMsIGFuZCBpZiB0aGVyZSBhcmUgYW55IGludGVyZXN0aW5nIHVzZXMgb2YgYHNlbGVjdGAgb3IgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDAxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTg6MzQuNDY3MzM3MDY2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgQ1JZUFRPX0RFVl9DQ1BfRERcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJTZWN1cmUgUHJvY2Vzc29yIGRldmljZSBkcml2ZXJcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIENQVV9TVVBfQU1EIHx8IEFSTTY0XFxuICAgNTpcXHRcXHRkZWZhdWx0IG1cXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgUHJvdmlkZXMgQU1EIFNlY3VyZSBQcm9jZXNzb3IgZGV2aWNlIGRyaXZlci5cXG4gICA4OlxcdFxcdCAgSWYgeW91IGNob29zZSAnTScgaGVyZSwgdGhpcyBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2NwLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRjb25maWcgQ1JZUFRPX0RFVl9TUF9DQ1BcXG4gIDExOlxcdFxcdGJvb2wgXFxcIkNyeXB0b2dyYXBoaWMgQ29wcm9jZXNzb3IgZGV2aWNlXFxcIlxcbiAgMTI6XFx0XFx0ZGVmYXVsdCB5XFxuICAxMzpcXHRcXHRkZXBlbmRzIG9uIENSWVBUT19ERVZfQ0NQX0REIFxcdTAwMjZcXHUwMDI2IERNQURFVklDRVNcXG4gIDE0OlxcdFxcdHNlbGVjdCBIV19SQU5ET01cXG4gIDE1OlxcdFxcdHNlbGVjdCBETUFfRU5HSU5FXFxuICAxNjpcXHRcXHRzZWxlY3QgQ1JZUFRPX1NIQTFcXG4gIDE3OlxcdFxcdHNlbGVjdCBDUllQVE9fU0hBMjU2XFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIFByb3ZpZGVzIHRoZSBzdXBwb3J0IGZvciBBTUQgQ3J5cHRvZ3JhcGhpYyBDb3Byb2Nlc3NvciAoQ0NQKSBkZXZpY2VcXG4gIDIwOlxcdFxcdCAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gb2ZmbG9hZCBlbmNyeXB0aW9uIG9wZXJhdGlvbnMgc3VjaCBhcyBTSEEsIEFFU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjo1ODozNC40Njc0MDA0NTZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxMTg1NDEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIFJldmlldyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBgQ1JZUFRPX0RFVl9DQ1BfRERgIGZlYXR1cmUuIFRoZSBkZXBlbmRlbmNpZXMgYXJlIGNsZWFyOiBlaXRoZXIgYENQVV9TVVBfQU1EYCBvciBgQVJNNjRgLiBHb29kLCBgQ1BVX1NVUF9BTURgIGlzIHN0YW5kYXJkIGZhcmUgZm9yIHg4Niwgd2hpY2ggaXMgd2hhdCBJJ20gcHJpbWFyaWx5IHdvcmtpbmcgd2l0aCBoZXJlLlxuXG5BbHJpZ2h0LCBzbyB0aGUgZW5hYmxpbmcgY29uZmlncyBhcmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogSSdsbCBuZWVkIGBLVk1gLCBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIG9idmlvdXNseSBgQ1JZUFRPX0RFVl9DQ1BfRERgIGl0c2VsZiwgYENSWVBUT19ERVZfU1BfUFNQYCB3aGljaCBzZWVtcyByZWxhdGVkLCBhbmQgYEFNRF9JT01NVWAgdG8gbWFuYWdlIHRoZSBJL08uIFNlZW1zIHJlYXNvbmFibGUsIGFsbCBleHBlY3RlZCBjb25maWd1cmF0aW9ucyBpbiB0aGlzIHNwYWNlLlxuXG5Ib2xkIG9uLi4uIHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYGFyY2gveDg2L0tjb25maWdgIGFuZCBpcyByZWxhdGVkIHRvIGBNSVRJR0FUSU9OX0lCUlNfRU5UUllgLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgSUJSUyBtaXRpZ2F0aW9uIGlzIGJlaW5nIGhhbmRsZWQuIExldCBtZSBsb29rIGludG8gYE1JVElHQVRJT05fSUJSU19FTlRSWWAuIEdvdHRhIGVuc3VyZSBJJ20gYXdhcmUgb2YgdGhlIGZ1bGwgaW1wYWN0IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTQ4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTg6MzguNjc5MjU2NTEzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTg1Njc3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUlUSUdBVElPTl9JQlJTX0VOVFJZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz0yNDg5PWNvbmZpZyBNSVRJR0FUSU9OX0lCUEJfRU5UUllcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMjQ5Ni1cXG5hcmNoL3g4Ni9LY29uZmlnOjI0OTc6Y29uZmlnIE1JVElHQVRJT05fSUJSU19FTlRSWVxcbmFyY2gveDg2L0tjb25maWctMjQ5OC1cXHRib29sIFxcXCJFbmFibGUgSUJSUyBvbiBrZXJuZWwgZW50cnlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU4OjM4LjcyNTExNjQ4MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjgxNjA1NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSB4ODYgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uLiBMZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gYGFyY2gveDg2L0tjb25maWdgLCByaWdodCBhcm91bmQgbGluZSAyNDk3LiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gaG9uZSBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbi4gSeKAmW0gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGluZmx1ZW5jZSB0aGUgY29kZSBwYXRoIEknbSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gSG9wZWZ1bGx5LCB0aGlzIGlzIHRoZSByaWdodCBzcG90IGZvciB0aGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gdG8gYmUgZGVzY3JpYmVkISBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDY4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTg6NDIuMDA2NzI1MzYyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0OTcsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0OTc6XFx0Y29uZmlnIE1JVElHQVRJT05fSUJSU19FTlRSWVxcbjI0OTg6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIElCUlMgb24ga2VybmVsIGVudHJ5XFxcIlxcbjI0OTk6XFx0XFx0ZGVwZW5kcyBvbiBYODZfNjRcXG4yNTAwOlxcdFxcdGRlZmF1bHQgeVxcbjI1MDE6XFx0XFx0aGVscFxcbjI1MDI6XFx0XFx0ICBDb21waWxlIHRoZSBrZXJuZWwgd2l0aCBzdXBwb3J0IGZvciB0aGUgc3BlY3RyZV92Mj1pYnJzIG1pdGlnYXRpb24uXFxuMjUwMzpcXHRcXHQgIFRoaXMgbWl0aWdhdGVzIHNwZWN0cmVfdjIgYXQgZ3JlYXQgY29zdCB0byBwZXJmb3JtYW5jZS4gIE9uIEludGVsLFxcbjI1MDQ6XFx0XFx0ICBpdCBhbHNvIG1pdGlnYXRlcyByZXRibGVlZC4gIE9uIEFNRC9IeWdvbiwgcmV0YmxlZWQgbWl0aWdhdGlvblxcbjI1MDU6XFx0XFx0ICByZXF1aXJlcyBNSVRJR0FUSU9OX1VOUkVUX0VOVFJZIG9yIE1JVElHQVRJT05fSUJQQl9FTlRSWS5cXG4yNTA2OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjo1ODo0Mi4wMDY4Njk3MzJaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY4ODM4MjUyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBLVk0gU0VWIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGlzIG5ldyBpbXBsZW1lbnRhdGlvbiBoYXMgS1ZNIFNFViBlbmFibGVkIGJ5IGRlZmF1bHQsIHdoaWNoIGlzIGdvb2QuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbmFsIGNoYW5nZSBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZSB0aGF0IGNhbiBiZSB0YXJnZXRlZCBmb3IgZnV6emluZy4gSXQgbG9va3MgbGlrZSB0aGUgS1ZNIFNFViBmZWF0dXJlIHZhbGlkYXRpb24gd2l0aGluIGBfX3Nldl9ndWVzdF9pbml0YCBpcyB0aGUga2V5IGFyZWEsIGFuZCB0aGUgb2J2aW91cyBmb2N1cyBzeW1ib2wgaXMgYHNldl9tZW1fZW5jX2lvY3RsYC5cblxuTGV0IG1lIGNvbmZpcm0gdGhhdCBgc2V2X21lbV9lbmNfaW9jdGxgIGlzIGluZGVlZCB0aGUgc29sZSBlbnRyeSBwb2ludCwgYXQgbGVhc3QgZnJvbSB0aGlzIHBlcnNwZWN0aXZlLiBZZXMsIGl0IGhhbmRsZXMgdGhlIGBLVk1fTUVNT1JZX0VOQ1JZUFRfT1BgIGlvY3RsLCBzbyB0aGF0J3MgdGhlIHByaW1hcnkgYXZlbnVlLlxuXG5IbW0sIGFueXRoaW5nIGVsc2UgY2hhbmdlZD8gQWgsIHllcywgaW4gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLCBgc2V2X2hhcmR3YXJlX3NldHVwYCBpcyBhZGRpbmcgYSBmZXcgbW9yZSBmZWF0dXJlcyB0byBgc2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzYDogYFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFYCwgYFNWTV9TRVZfRkVBVF9CVEJfSVNPTEFUSU9OYCwgYFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDYCwgYW5kIGBTVk1fU0VWX0ZFQVRfSUJQQl9PTl9FTlRSWWAuIFRoYXQgbWFrZXMgc2Vuc2U7IHRoZXNlIGZlYXR1cmVzIGFyZSBub3cgaW5jb3Jwb3JhdGVkIGludG8gYEtWTV9TRVZfSU5JVDJgIGFuZCB2YWxpZGF0ZWQgaW4gYF9fc2V2X2d1ZXN0X2luaXRgLiBTbywgYWdhaW4sIGBzZXZfbWVtX2VuY19pb2N0bGAgaXQgaXMuIERlZmluaXRlbHkgdGhlIHN5bWJvbCB0byBmb2N1cyBvbi5cblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIGVuYWJsZWQ6IGBLVk1gLCBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIGBDUllQVE9fREVWX0NDUF9ERGAsIGBDUllQVE9fREVWX1NQX1BTUGAsIGFuZCBgQU1EX0lPTU1VYC4gQW5kIG5vdyBJIHdhbnQgdG8gcXVpY2tseSBjaGVjayBpZiBgQU1EX0lPTU1VYCBkZXBlbmRzIG9uIGFueXRoaW5nIGVsc2UuIFRoYXQgd2lsbCBpbmZsdWVuY2UgaG93IEkgYXBwcm9hY2ggdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0NDksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjo1ODo0OS42OTUyNTQ0ODZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwOTU1OTQ4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQU1EX0lPTU1VXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW9tbXUvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTg6NDkuNzQ2MjE5NDQ0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDM5NTk4NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQU1EIElPTU1VIERyaXZlcioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIEFNRCBJT01NVSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBkcml2ZXJzL2lvbW11L2AgZGlyZWN0b3J5LiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGNvZGUgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIHRoZSBJbnB1dC9PdXRwdXQgTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCBmdW5jdGlvbmFsaXR5IHNwZWNpZmljIHRvIEFNRCBwbGF0Zm9ybXMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGRyaXZlcidzIHN0cnVjdHVyZSwgaWRlbnRpZnkga2V5IGVudHJ5IHBvaW50cyBmb3IgZGV2aWNlIGFzc2lnbm1lbnQgYW5kIGludGVycnVwdCBoYW5kbGluZywgYW5kIGxpa2VseSB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSByZWdpc3RlcnMuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHNlYXJjaCBmb3IgaW5zdGFuY2VzIG9mIGBBTURfSU9NTVVgIGluIHRoYXQgZGlyZWN0b3J5LiBJIGZpZ3VyZSB0aGF0IHNob3VsZCBzZXJ2ZSBhcyBhIHNvbGlkIGxlYWQgdG8gZGlyZWN0IG1lIHRvd2FyZCB0aGUgcmVsZXZhbnQgZmlsZXMgYW5kIGZ1bmN0aW9ucyBJJ20gaW50ZXJlc3RlZCBpbiBhbmFseXppbmcuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgZGlnZ2luZyBiZWdpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjI4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTg6NTMuNTUwMTgyMzU3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU2NTI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQU1EX0lPTU1VXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW9tbXUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctMi0jIEFNRCBJT01NVSBzdXBwb3J0XFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZzozOmNvbmZpZyBBTURfSU9NTVVcXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQtXFx0Ym9vbCBcXFwiQU1EIElPTU1VIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTMyLVxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6MzM6Y29uZmlnIEFNRF9JT01NVV9JT01NVUZEXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0zNC1cXHRib29sIFxcXCJFbmFibGUgSU9NTVVGRCBmZWF0dXJlcyBmb3IgQU1EIElPTU1VIChFWFBFUklNRU5UQUwpXFxcIlxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00Mi1cXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnOjQzOmNvbmZpZyBBTURfSU9NTVVfREVCVUdGU1xcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctNDQtXFx0Ym9vbCBcXFwiRW5hYmxlIEFNRCBJT01NVSBpbnRlcm5hbHMgaW4gRGVidWdGU1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTg6NTMuNTk4NzUyNzk2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5ODQxNDM3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBLY29uZmlnIGZpbGU6XG5cbioqRGl2aW5nIGludG8gdGhlIEFNRCBJT01NVSBLY29uZmlnKipcblxuT2theSwgdGltZSB0byBjcmFjayBvcGVuIHRoZSBgZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZ2AgZmlsZS4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gaHViIGZvciBBTUQncyBJT01NVSBkcml2ZXIuIEtub3dpbmcgdGhpcywgSSdtIGFudGljaXBhdGluZyBhIHN0cnVjdHVyZWQgbGF5b3V0OiBpdCBzaG91bGQgZGVmaW5lIHRoZSBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBkZWZhdWx0IHNldHRpbmdzIHRoYXQgY29udHJvbCB0aGUgaW5jbHVzaW9uIGFuZCBiZWhhdmlvciBvZiB0aGUgQU1EIElPTU1VIHN1cHBvcnQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICAqKkNvbmZpZyBvcHRpb25zOioqIFdoYXQgYXJlIHRoZSBrZXkgYENPTkZJR19gIG9wdGlvbnMgdGhhdCBkZXZlbG9wZXJzIGNhbiB0d2Vhaz8gSSBleHBlY3QgdG8gc2VlIHRvZ2dsZXMgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyB0aGUgQU1EIElPTU1VIGVudGlyZWx5LCBvciBmaW5lLWdyYWluZWQgY29udHJvbHMgb3ZlciBzcGVjaWZpYyBmZWF0dXJlcyBvciBoYXJkd2FyZSBhc3BlY3RzLiBJJ20gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgZ3JhbnVsYXJpdHkuXG4qICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBvciBmZWF0dXJlcyBhcmUgdGhpcyBkcml2ZXIgcmVsaWFudCB1cG9uPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIGxpbmtpbmcgaXQgdG8gcmVsZXZhbnQgQ1BVLCBwbGF0Zm9ybSwgb3IgZGV2aWNlIGRyaXZlciBvcHRpb25zLiBBcmUgdGhlcmUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgc2VjdXJpdHkgZmVhdHVyZXMgb3IgdmlydHVhbGl6YXRpb24gdGVjaG5vbG9naWVzP1xuKiAgICoqRGVmYXVsdCBzZXR0aW5nczoqKiBXaGF0IGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnM/IEFyZSB0aGV5IGNvbnNlcnZhdGl2ZSBkZWZhdWx0cz8gRG8gdGhleSBwcmlvcml0aXplIHBlcmZvcm1hbmNlIG9yIGNvbXBhdGliaWxpdHk/IEknbSBob3BpbmcgdG8gZ2V0IGEgc2Vuc2Ugb2YgaG93IHRoZSBkcml2ZXIgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBvdXQtb2YtdGhlLWJveC5cbiogICAqKkhlbHAgdGV4dDoqKiBHb29kIEtjb25maWcgZmlsZXMgaGF2ZSBoZWxwZnVsIGRlc2NyaXB0aW9ucyBmb3IgZWFjaCBvcHRpb24uIEknbGwgYmUgc2Nhbm5pbmcgdGhlc2UgZGVzY3JpcHRpb25zIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2UgYW5kIGltcGxpY2F0aW9ucyBvZiBlYWNoIGNvbmZpZ3VyYXRpb24gY2hvaWNlLiBJJ2xsIGJlIGp1ZGdpbmcgdGhlIHF1YWxpdHkgb2YgZG9jdW1lbnRhdGlvbi5cbiogICAqKkNvbmRpdGlvbmFsIGluY2x1c2lvbjoqKiBBcmUgdGhlcmUgb3B0aW9ucyB0aGF0IGFyZSBvbmx5IGF2YWlsYWJsZSB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMsIG1heWJlIHNwZWNpZmljIENQVSBtb2RlbHMgb3IgaGFyZHdhcmUgY29uZmlndXJhdGlvbnM/IEknbGwgYmUgbG9va2luZyBmb3IgYGlmYCBzdGF0ZW1lbnRzLlxuKiAgICoqQXJjaGl0ZWN0dXJhbCBjb25zaWRlcmF0aW9uczoqKiBJIHdpbGwgYmUgbG9va2luZyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBBTUQgSU9NTVUgZ2VuZXJhdGlvbnMgb3IgY2hpcHNldHMuXG5cbkknbSBhbHNvIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG92ZXJhbGwgc3RydWN0dXJlIGFuZCBzdHlsZS4gQSB3ZWxsLXdyaXR0ZW4gS2NvbmZpZyBmaWxlIGlzIGEgam95IHRvIHJlYWQg4oCTIHdlbGwtZm9ybWF0dGVkLCBjb25zaXN0ZW50LCBhbmQgY2xlYXIuIEl0J2xsIGdpdmUgbWUgYSBzdHJvbmcgaW5kaWNhdGlvbiBvZiB0aGUgbWF0dXJpdHkgYW5kIG1haW50YWluYWJpbGl0eSBvZiB0aGlzIGRyaXZlci4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjkzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTg6NTguNTgyODk5NThaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0IyBBTUQgSU9NTVUgc3VwcG9ydFxcbiAgIDM6XFx0Y29uZmlnIEFNRF9JT01NVVxcbiAgIDQ6XFx0XFx0Ym9vbCBcXFwiQU1EIElPTU1VIHN1cHBvcnRcXFwiXFxuICAgNTpcXHRcXHRzZWxlY3QgU1dJT1RMQlxcbiAgIDY6XFx0XFx0c2VsZWN0IFBDSV9NU0lcXG4gICA3OlxcdFxcdHNlbGVjdCBQQ0lfQVRTXFxuICAgODpcXHRcXHRzZWxlY3QgUENJX1BSSVxcbiAgIDk6XFx0XFx0c2VsZWN0IFBDSV9QQVNJRFxcbiAgMTA6XFx0XFx0c2VsZWN0IElSUV9NU0lfTElCXFxuICAxMTpcXHRcXHRzZWxlY3QgTU1VX05PVElGSUVSXFxuICAxMjpcXHRcXHRzZWxlY3QgSU9NTVVfQVBJXFxuICAxMzpcXHRcXHRzZWxlY3QgSU9NTVVfSU9WQVxcbiAgMTQ6XFx0XFx0c2VsZWN0IElPTU1VX1NWQVxcbiAgMTU6XFx0XFx0c2VsZWN0IElPTU1VX0lPUEZcXG4gIDE2OlxcdFxcdHNlbGVjdCBJT01NVUZEX0RSSVZFUiBpZiBJT01NVUZEXFxuICAxNzpcXHRcXHRzZWxlY3QgR0VORVJJQ19QVFxcbiAgMTg6XFx0XFx0c2VsZWN0IElPTU1VX1BUXFxuICAxOTpcXHRcXHRzZWxlY3QgSU9NTVVfUFRfQU1EVjFcXG4gIDIwOlxcdFxcdHNlbGVjdCBJT01NVV9QVF9YODZfNjRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTg6NTguNTgyOTU5OTJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2NjExNTU0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGl0J3MgcmVsYXRpdmVseSBzZWxmLWNvbnRhaW5lZCDigJMgbm8gbWFqb3IsIGdsYXJpbmcgZGVwZW5kZW5jaWVzIGp1bXAgb3V0IGF0IG1lLiBUaGUgZmFjdCB0aGF0IGl0J3MgbG9jYXRlZCB3aXRoaW4gYGRyaXZlcnMvaW9tbXUvS2NvbmZpZ2AgaXMga2V5LCBhbmQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBpdHMgYXZhaWxhYmlsaXR5IGlzIGxpbmtlZCB0byBgSU9NTVVfU1VQUE9SVGAuIE1ha2VzIHNlbnNlLCBvZiBjb3Vyc2UsIHRoYXQncyB3aGF0IHRoYXQgZGlyZWN0b3J5IGFuZCBmaWxlIGFyZSBmb3IuIFRpbWUgdG8gZ28gdmVyaWZ5IHRoYXQgYElPTU1VX1NVUFBPUlRgIGlzIGluZGVlZCB0aGUgZGVjaWRpbmcgZmFjdG9yIGhlcmUsIGFuZCBzZWUgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgYXJlIGZvciB0aGUgb3ZlcmFsbCBzeXN0ZW0gY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0ODMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU5OjAyLjY0OTA3NzkzOFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0OTA3MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElPTU1VX1NVUFBPUlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pb21tdS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW9tbXUvS2NvbmZpZz0xMD1jb25maWcgSU9NTVVGRF9EUklWRVJcXG4tLVxcbmRyaXZlcnMvaW9tbXUvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL2lvbW11L0tjb25maWc6MTQ6bWVudWNvbmZpZyBJT01NVV9TVVBQT1JUXFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTE1LVxcdGJvb2wgXFxcIklPTU1VIEhhcmR3YXJlIFN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU5OjAyLjY5NjU3NDcyN1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTAzNDMzOTE1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBLVk0gU0VWIEZlYXR1cmUgVmFsaWRhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmb2N1cyBvbiBmdXp6aW5nIGEgc3BlY2lmaWMgYXJlYSwgYW5kIGl0IGxvb2tzIGxpa2UgaXQgY2VudGVycyBhcm91bmQgYElPTU1VX1NVUFBPUlRgLiBJIG5lZWQgdGhhdC4gTGV0J3Mgc2VlLi4uIHdoYXQgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgaW4gcGxheT8gSSBoYXZlIGBLVk1gLCBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIGBDUllQVE9fREVWX0NDUF9ERGAsIGBDUllQVE9fREVWX1NQX1BTUGAsIGBBTURfSU9NTVVgLCBhbmQgYElPTU1VX1NVUFBPUlRgLlxuXG5SaWdodCwgbm93IHdoYXQncyB0aGUgbW9zdCByZWxldmFudCBcImZvY3VzIHN5bWJvbFwiPyBBaCwgYHNldl9tZW1fZW5jX2lvY3RsYCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgb25lLCBpdCdzIHRoZSBtYWluIGhhbmRsZXIuIFdoYXQgYWJvdXQgdGhvc2Ugb3RoZXIgU0VWIHJlbGF0ZWQgc3ltYm9scywgYHNldl9ndWVzdF9pbml0MmAgYW5kIGBfX3Nldl9ndWVzdF9pbml0YD8gVGhleSBsb29rIHN0YXRpYyBhbmQgcG9zc2libHkgaW5saW5lZCwgc28gYHNldl9tZW1fZW5jX2lvY3RsYCBpcyBpbmRlZWQgdGhlIGJlc3QgdGFyZ2V0LlxuXG5BbmQgeWVwLCBgc2V2X21lbV9lbmNfaW9jdGxgICppcyogdGhlIG9ubHkgaW9jdGwgaGFuZGxlciwgc3BlY2lmaWNhbGx5LCBpdCBoYW5kbGVzIGBLVk1fTUVNT1JZX0VOQ1JZUFRfT1BgLiBUaGF0IGNvbmZpcm1zIGl0LlxuXG5Ob3cgdG8gc29saWRpZnkgdGhpcyBsb2dpYzogVGhlIHBhdGNoICptb2RpZmllcyogdGhlIHZhbGlkYXRpb24gb2YgYHZtc2FfZmVhdHVyZXNgIGR1cmluZyBLVk0gU0VWIGd1ZXN0IGluaXRpYWxpemF0aW9uICh0aGUgYEtWTV9TRVZfSU5JVDJgIGlvY3RsKS4gUGx1cywgaXQncyBhZGRpbmcgbmV3IFNFVi1TTlAgZmVhdHVyZXMgdG8gdGhlIHN1cHBvcnRlZCBsaXN0LiBUaGlzIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBLVk0gaW9jdGxzLCAqdGhhdCdzKiB0aGUgZW50cnlwb2ludC4gVGhhdCdzICpwZXJmZWN0KiBmb3IgZnV6emluZzsgdGhlIG5ldyBmZWF0dXJlIHZhbGlkYXRpb24gaXMgd2hlcmUgdGhlIGJ1Z3Mgd2lsbCBiZSFcblxuTGV0J3MgcXVpY2tseSBjaGVjayBvdGhlciBjaGFuZ2VzLiBMb29rcyBsaWtlIGBhcmNoL3g4Ni9rZXJuZWwvY3B1L2J1Z3MuY2AgYW5kIGBhcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jYCBhcmUgcmVsYXRlZCB0byBtaXRpZ2F0aW9uIGxvZ2ljIGZvciByZXRibGVlZCwgc3BlY3RyZV92MiwgYW5kIEF1dG9JQlJTLiBUaG9zZSBhcmUgYm9vdC10aW1lIHRoaW5ncywgc28gbm8gdXNlciBpbnB1dCB0aGVyZS4gQW5kIHRoZSBgS2NvbmZpZ2AgYW5kIGhlYWRlciBmaWxlcyBqdXN0IGRlZmluZSB0aGUgZmVhdHVyZXMgZm9yIHRoZSBtaXRpZ2F0aW9ucy4gVGhlIHNlbGZ0ZXN0cyBhcmUganVzdCB1cGRhdGluZyB0ZXN0cy4gU28sIGRlZmluaXRlbHkgbm8gZnV6eiB0YXJnZXRzIHRoZXJlLlxuXG5BbHJpZ2h0LCBiYWNrIHRvIHRoZSBjb25maWdzLiBJIGtub3cgSSBoYXZlIHRvIGhhdmU6XG4qICAgYEtWTWBcbiogICBgS1ZNX0FNRGBcbiogICBgS1ZNX0FNRF9TRVZgXG4qICAgYENSWVBUT19ERVZfQ0NQX0REYCAoSW1wb3J0YW50LCBpdCdzIGEgdHJpc3RhdGUuKVxuKiAgIGBDUllQVE9fREVWX1NQX1BTUGAgKEJvb2wpXG4qICAgYEFNRF9JT01NVWAgKEJvb2wpXG4qICAgYElPTU1VX1NVUFBPUlRgIChCb29sKVxuXG5Pa2F5LCBJIGhhdmUgbXkgY29yZSBjb25maWd1cmF0aW9ucywgYW5kIEkndmUgemVyb2VkIGluIG9uIHRoZSBrZXkgZnV6emFibGUgdGFyZ2V0LiBUaW1lIHRvIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBzdGFydCBmdXp6aW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc3NywiT3V0cHV0VG9rZW5zIjoxOTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTk6MTMuNzMwOTE2MjI5WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUyNDAwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIkNSWVBUT19ERVZfQ0NQX0REXCIsXG4gICAgXCJDUllQVE9fREVWX1NQX1BTUFwiLFxuICAgIFwiQU1EX0lPTU1VXCIsXG4gICAgXCJJT01NVV9TVVBQT1JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2V2X21lbV9lbmNfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmFsaWRhdGlvbiBvZiBgdm1zYV9mZWF0dXJlc2AgZHVyaW5nIEtWTSBTRVYgZ3Vlc3QgaW5pdGlhbGl6YXRpb24gKGBLVk1fU0VWX0lOSVQyYCBpb2N0bCkgYW5kIGFkZHMgbmV3IFNFVi1TTlAgZmVhdHVyZXMgdG8gdGhlIHN1cHBvcnRlZCBsaXN0LiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgdGhlIG5ldyBmZWF0dXJlIHZhbGlkYXRpb24gbG9naWMgZG9lc24ndCBpbnRyb2R1Y2UgYnVncy4gVGhlIENQVSBidWcgbWl0aWdhdGlvbiBjaGFuZ2VzIGFyZSBib290LXRpbWUgbG9naWMgYW5kIG5vdCBkaXJlY3RseSBmdXp6YWJsZSBmcm9tIHVzZXJzcGFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTV9BTURfU0VWXCIsXG4gICAgXCJDUllQVE9fREVWX0NDUF9ERFwiLFxuICAgIFwiQ1JZUFRPX0RFVl9TUF9QU1BcIixcbiAgICBcIkFNRF9JT01NVVwiLFxuICAgIFwiSU9NTVVfU1VQUE9SVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNldl9tZW1fZW5jX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZhbGlkYXRpb24gb2YgYHZtc2FfZmVhdHVyZXNgIGR1cmluZyBLVk0gU0VWIGd1ZXN0IGluaXRpYWxpemF0aW9uIChgS1ZNX1NFVl9JTklUMmAgaW9jdGwpIGFuZCBhZGRzIG5ldyBTRVYtU05QIGZlYXR1cmVzIHRvIHRoZSBzdXBwb3J0ZWQgbGlzdC4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZSBuZXcgZmVhdHVyZSB2YWxpZGF0aW9uIGxvZ2ljIGRvZXNuJ3QgaW50cm9kdWNlIGJ1Z3MuIFRoZSBDUFUgYnVnIG1pdGlnYXRpb24gY2hhbmdlcyBhcmUgYm9vdC10aW1lIGxvZ2ljIGFuZCBub3QgZGlyZWN0bHkgZnV6emFibGUgZnJvbSB1c2Vyc3BhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU5OjEzLjgwNjE2MDk3N1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMTA3NTY4MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjo1OToxMy44MDY1NTQ5NDhaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTUzMTAzNTg2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIENQVSBtaXRpZ2F0aW9uIHNlbGVjdGlvbiBsb2dpYyAoSUJSUywgQXV0b0lCUlMsIFNFVi1TTlApIGFuZCBLVk0gU0VWIGluaXRpYWxpemF0aW9uIGZlYXR1cmUgdmFsaWRhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIG1vZGlmaWVkIGRhdGEgc3RydWN0dXJlcyAobGlrZSBgc3RydWN0IGt2bV9zZXZfaW5pdGApIGFyZSBmdWxseSBpbml0aWFsaXplZCBmcm9tIHVzZXIgc3BhY2UgdmlhIGBjb3B5X2Zyb21fdXNlcmAgYmVmb3JlIGJlaW5nIHJlYWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWIwMGYzZjY2Mzg2NTZmMTUwZjhkOThhZjZlNGM5ZTA0MjY4NzA5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDIyOjU3OjEwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWdcbmluZGV4IDE1ZmQ5ZWM1ZWNhY2IuLmI5YTdkZGVmNGNiYWIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9LY29uZmlnXG4rKysgYi9hcmNoL3g4Ni9LY29uZmlnXG5AQCAtMjQ5NiwxMiArMjQ5NiwxMyBAQCBjb25maWcgTUlUSUdBVElPTl9JQlBCX0VOVFJZXG4gXG4gY29uZmlnIE1JVElHQVRJT05fSUJSU19FTlRSWVxuIFx0Ym9vbCBcIkVuYWJsZSBJQlJTIG9uIGtlcm5lbCBlbnRyeVwiXG4tXHRkZXBlbmRzIG9uIENQVV9TVVBfSU5URUwgXHUwMDI2XHUwMDI2IFg4Nl82NFxuK1x0ZGVwZW5kcyBvbiBYODZfNjRcbiBcdGRlZmF1bHQgeVxuIFx0aGVscFxuIFx0ICBDb21waWxlIHRoZSBrZXJuZWwgd2l0aCBzdXBwb3J0IGZvciB0aGUgc3BlY3RyZV92Mj1pYnJzIG1pdGlnYXRpb24uXG4tXHQgIFRoaXMgbWl0aWdhdGVzIGJvdGggc3BlY3RyZV92MiBhbmQgcmV0YmxlZWQgYXQgZ3JlYXQgY29zdCB0b1xuLVx0ICBwZXJmb3JtYW5jZS5cbitcdCAgVGhpcyBtaXRpZ2F0ZXMgc3BlY3RyZV92MiBhdCBncmVhdCBjb3N0IHRvIHBlcmZvcm1hbmNlLiAgT24gSW50ZWwsXG4rXHQgIGl0IGFsc28gbWl0aWdhdGVzIHJldGJsZWVkLiAgT24gQU1EL0h5Z29uLCByZXRibGVlZCBtaXRpZ2F0aW9uXG4rXHQgIHJlcXVpcmVzIE1JVElHQVRJT05fVU5SRVRfRU5UUlkgb3IgTUlUSUdBVElPTl9JQlBCX0VOVFJZLlxuIFxuIGNvbmZpZyBNSVRJR0FUSU9OX1NSU09cbiBcdGJvb2wgXCJNaXRpZ2F0ZSBzcGVjdWxhdGl2ZSBSQVMgb3ZlcmZsb3cgb24gQU1EXCJcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuaW5kZXggZjcwZWU3NGI1ZjkyMS4uM2FhZDJiNTNmNTliZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbkBAIC00NzIsNiArNDcyLDcgQEBcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0FMTE9XRURfU0VWX0ZFQVRVUkVTICgxOSozMisyNykgLyogQWxsb3dlZCBTRVYgRmVhdHVyZXMgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1NWU01cdFx0KDE5KjMyKzI4KSAvKiBcInN2c21cIiBTVlNNIHByZXNlbnQgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0hWX0lOVVNFX1dSX0FMTE9XRURcdCgxOSozMiszMCkgLyogQWxsb3cgV3JpdGUgdG8gaW4tdXNlIGh5cGVydmlzb3Itb3duZWQgcGFnZXMgKi9cbisjZGVmaW5lIFg4Nl9GRUFUVVJFX1NOUF9JQlBCX09OX0VOVFJZXHQoMTkqMzIrMzEpIC8qIFNFVi1TTlAgSUJQQiBvbiBWTSBFbnRyeSAqL1xuIFxuIC8qIEFNRC1kZWZpbmVkIEV4dGVuZGVkIEZlYXR1cmUgMiBFQVgsIENQVUlEIGxldmVsIDB4ODAwMDAwMjEgKEVBWCksIHdvcmQgMjAgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX05PX05FU1RFRF9EQVRBX0JQXHQoMjAqMzIrIDApIC8qIE5vIE5lc3RlZCBEYXRhIEJyZWFrcG9pbnRzICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuaW5kZXggYWE2MzQzMWJhOTJjMy4uMGRhMjIzNGI3MWM2OSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuQEAgLTMwNSwxMSArMzA1LDE4IEBAIHN0YXRpY19hc3NlcnQoKEFWSUNfTUFYX1BIWVNJQ0FMX0lEIFx1MDAyNiBBVklDX1BIWVNJQ0FMX01BWF9JTkRFWF9NQVNLKSA9PSBBVklDX01BWF9cbiBzdGF0aWNfYXNzZXJ0KChYMkFWSUNfTUFYX1BIWVNJQ0FMX0lEIFx1MDAyNiBBVklDX1BIWVNJQ0FMX01BWF9JTkRFWF9NQVNLKSA9PSBYMkFWSUNfTUFYX1BIWVNJQ0FMX0lEKTtcbiBzdGF0aWNfYXNzZXJ0KChYMkFWSUNfNEtfTUFYX1BIWVNJQ0FMX0lEIFx1MDAyNiBBVklDX1BIWVNJQ0FMX01BWF9JTkRFWF9NQVNLKSA9PSBYMkFWSUNfNEtfTUFYX1BIWVNJQ0FMX0lEKTtcbiBcbi0jZGVmaW5lIFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFXHRcdFx0XHRCSVQoMClcbi0jZGVmaW5lIFNWTV9TRVZfRkVBVF9SRVNUUklDVEVEX0lOSkVDVElPTlx0XHRCSVQoMylcbi0jZGVmaW5lIFNWTV9TRVZfRkVBVF9BTFRFUk5BVEVfSU5KRUNUSU9OXHRcdEJJVCg0KVxuLSNkZWZpbmUgU1ZNX1NFVl9GRUFUX0RFQlVHX1NXQVBcdFx0XHRcdEJJVCg1KVxuLSNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0NcdFx0XHRcdEJJVCg5KVxuKyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkVcdFx0XHRcdEJJVF9VTEwoMClcbisjZGVmaW5lIFNWTV9TRVZfRkVBVF9SRVNUUklDVEVEX0lOSkVDVElPTlx0XHRCSVRfVUxMKDMpXG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfQUxURVJOQVRFX0lOSkVDVElPTlx0XHRCSVRfVUxMKDQpXG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUFx0XHRcdFx0QklUX1VMTCg1KVxuKyNkZWZpbmUgU1ZNX1NFVl9GRUFUX0JUQl9JU09MQVRJT05cdFx0XHRCSVRfVUxMKDcpXG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQ1x0XHRcdFx0QklUX1VMTCg5KVxuKyNkZWZpbmUgU1ZNX1NFVl9GRUFUX0lCUEJfT05fRU5UUllcdFx0XHRCSVRfVUxMKDIxKVxuK1xuKyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NOUF9PTkxZX01BU0tcdChTVk1fU0VWX0ZFQVRfU05QX0FDVElWRSB8IFxcXG4rXHRcdFx0XHRcdCBTVk1fU0VWX0ZFQVRfQlRCX0lTT0xBVElPTiB8IFxcXG4rXHRcdFx0XHRcdCBTVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQyB8IFxcXG4rXHRcdFx0XHRcdCBTVk1fU0VWX0ZFQVRfSUJQQl9PTl9FTlRSWSlcbiBcbiAjZGVmaW5lIFZNQ0JfQUxMT1dFRF9TRVZfRkVBVFVSRVNfVkFMSURcdFx0XHRCSVRfVUxMKDYzKVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYnVncy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmNcbmluZGV4IDU2ZWFjNTYxMWMzMTguLjA4NzgwZTBkMzdlYzcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1Z3MuY1xuKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmNcbkBAIC0xMzA1LDcgKzEzMDUsMTQgQEAgc3RhdGljIHZvaWQgX19pbml0IHJldGJsZWVkX3VwZGF0ZV9taXRpZ2F0aW9uKHZvaWQpXG4gXG4gXHQvKlxuIFx0ICogTGV0IElCUlMgdHJ1bXAgYWxsIG9uIEludGVsIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBlZmZlY3RzIG9mIHRoZVxuLVx0ICogcmV0YmxlZWQ9IGNtZGxpbmUgb3B0aW9uIGV4Y2VwdCBmb3IgY2FsbCBkZXB0aCBiYXNlZCBzdHVmZmluZ1xuK1x0ICogcmV0YmxlZWQ9IGNtZGxpbmUgb3B0aW9uIGV4Y2VwdCBmb3IgY2FsbCBkZXB0aCBiYXNlZCBzdHVmZmluZy5cbitcdCAqXG4rXHQgKiBPbiBBTUQvSHlnb24sIGxlZ2FjeSBTUEVDX0NUUkwuSUJSUyB0b2dnbGluZyBkb2VzIG5vdCBtaXRpZ2F0ZSB0aGVcbitcdCAqIEJyYW5jaCBUeXBlIENvbmZ1c2lvbiBSRVRCbGVlZCB2YXJpYW50OiBSRVQgcHJlZGljdGlvbiBjb21lcyBmcm9tXG4rXHQgKiB0aGUgUmV0dXJuIEFkZHJlc3MgUHJlZGljdG9yLCBub3QgdGhlIHJlc3RyaWN0ZWQgaW5kaXJlY3QgYnJhbmNoXG4rXHQgKiBwcmVkaWN0b3JzIHRoYXQgSUJSUyBjb250cm9scy4gIFNvIGtlZXAgdGhpcyBJbnRlbC1vbmx5IGFuZCBsZWF2ZVxuK1x0ICogQU1EJ3Mgc29mdHdhcmUgcmV0dXJuLXRodW5rIG1pdGlnYXRpb24gKFVOUkVUL0lCUEIpIGluIHBsYWNlIGV2ZW5cbitcdCAqIHdoZW4gc3BlY3RyZV92Mj1pYnJzIGlzIHNlbGVjdGVkLlxuIFx0ICovXG4gXHRpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwpIHtcbiBcdFx0c3dpdGNoIChzcGVjdHJlX3YyX2VuYWJsZWQpIHtcbkBAIC0xNjcyLDYgKzE2NzksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcmV0cG9saW5lX3NlcV9lbmFibGVkKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9XG4gI2RlZmluZSBTUEVDVFJFX1YyX0xGRU5DRV9NU0cgXCJXQVJOSU5HOiBMRkVOQ0UgbWl0aWdhdGlvbiBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHRoaXMgQ1BVLCBkYXRhIGxlYWtzIHBvc3NpYmxlIVxcblwiXG4gI2RlZmluZSBTUEVDVFJFX1YyX0VJQlJTX0VCUEZfTVNHIFwiV0FSTklORzogVW5wcml2aWxlZ2VkIGVCUEYgaXMgZW5hYmxlZCB3aXRoIGVJQlJTIG9uLCBkYXRhIGxlYWtzIHBvc3NpYmxlIHZpYSBTcGVjdHJlIHYyIEJIQiBhdHRhY2tzIVxcblwiXG4gI2RlZmluZSBTUEVDVFJFX1YyX0VJQlJTX0xGRU5DRV9FQlBGX1NNVF9NU0cgXCJXQVJOSU5HOiBVbnByaXZpbGVnZWQgZUJQRiBpcyBlbmFibGVkIHdpdGggZUlCUlMrTEZFTkNFIG1pdGlnYXRpb24gYW5kIFNNVCwgZGF0YSBsZWFrcyBwb3NzaWJsZSB2aWEgU3BlY3RyZSB2MiBCSEIgYXR0YWNrcyFcXG5cIlxuKyNkZWZpbmUgU1BFQ1RSRV9WMl9FSUJSU19TTlBfUEVSRl9NU0cgXCJXQVJOSU5HOiBlSUJSUyBtaXRpZ2F0aW9uIGVuYWJsZXMgQXV0b0lCUlMgb24gU0VWLVNOUCBlbmFibGVkIENQVSwgdGhpcyBtYXkgY2F1c2UgcGVyZm9ybWFuY2UgbG9zc1xcblwiXG4gI2RlZmluZSBTUEVDVFJFX1YyX0lCUlNfUEVSRl9NU0cgXCJXQVJOSU5HOiBJQlJTIG1pdGlnYXRpb24gc2VsZWN0ZWQgb24gRW5oYW5jZWQgSUJSUyBDUFUsIHRoaXMgbWF5IGNhdXNlIHVubmVjZXNzYXJ5IHBlcmZvcm1hbmNlIGxvc3NcXG5cIlxuIFxuICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbkBAIC0yMTY1LDExICsyMTczLDYgQEAgc3RhdGljIHZvaWQgX19pbml0IHNwZWN0cmVfdjJfc2VsZWN0X21pdGlnYXRpb24odm9pZClcbiBcdFx0c3BlY3RyZV92Ml9jbWQgPSBTUEVDVFJFX1YyX0NNRF9BVVRPO1xuIFx0fVxuIFxuLVx0aWYgKHNwZWN0cmVfdjJfY21kID09IFNQRUNUUkVfVjJfQ01EX0lCUlMgXHUwMDI2XHUwMDI2IGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0lOVEVMKSB7XG4tXHRcdHByX2VycihcIklCUlMgc2VsZWN0ZWQgYnV0IG5vdCBJbnRlbCBDUFUuIFN3aXRjaGluZyB0byBBVVRPIHNlbGVjdFxcblwiKTtcbi1cdFx0c3BlY3RyZV92Ml9jbWQgPSBTUEVDVFJFX1YyX0NNRF9BVVRPO1xuLVx0fVxuLVxuIFx0aWYgKHNwZWN0cmVfdjJfY21kID09IFNQRUNUUkVfVjJfQ01EX0lCUlMgXHUwMDI2XHUwMDI2ICFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSUJSUykpIHtcbiBcdFx0cHJfZXJyKFwiSUJSUyBzZWxlY3RlZCBidXQgQ1BVIGRvZXNuJ3QgaGF2ZSBJQlJTLiBTd2l0Y2hpbmcgdG8gQVVUTyBzZWxlY3RcXG5cIik7XG4gXHRcdHNwZWN0cmVfdjJfY21kID0gU1BFQ1RSRV9WMl9DTURfQVVUTztcbkBAIC0yMTk0LDcgKzIxOTcsMTUgQEAgc3RhdGljIHZvaWQgX19pbml0IHNwZWN0cmVfdjJfc2VsZWN0X21pdGlnYXRpb24odm9pZClcbiBcdFx0XHRicmVhaztcbiBcdFx0ZmFsbHRocm91Z2g7XG4gXHRjYXNlIFNQRUNUUkVfVjJfQ01EX0ZPUkNFOlxuLVx0XHRpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0lCUlNfRU5IQU5DRUQpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFByZWZlciByZXRwb2xpbmUgd2hlbiBTTlAgaXMgZW5hYmxlZCBiZWNhdXNlIEF1dG9JQlJTXG4rXHRcdCAqIGRlZ3JhZGVzIGhvc3QgdXNlcnNwYWNlIGluZGlyZWN0IGJyYW5jaCBwZXJmb3JtYW5jZS4gIE9ubHlcbitcdFx0ICogZG8gc28gaWYgcmV0cG9saW5lIGlzIGFjdHVhbGx5IGJ1aWx0IGluLCBvdGhlcndpc2UgQXV0b0lCUlNcbitcdFx0ICogaXMgYmV0dGVyIHRoYW4gbGVhdmluZyB0aGUgc3lzdGVtIHVubWl0aWdhdGVkLlxuK1x0XHQgKi9cbitcdFx0aWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9JQlJTX0VOSEFOQ0VEKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICEoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NFVl9TTlApIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgICBJU19FTkFCTEVEKENPTkZJR19NSVRJR0FUSU9OX1JFVFBPTElORSkpKSB7XG4gXHRcdFx0c3BlY3RyZV92Ml9lbmFibGVkID0gU1BFQ1RSRV9WMl9FSUJSUztcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTIyNzcsMTUgKzIyODgsMjQgQEAgc3RhdGljIHZvaWQgX19pbml0IHNwZWN0cmVfdjJfYXBwbHlfbWl0aWdhdGlvbih2b2lkKVxuIFx0aWYgKHNwZWN0cmVfdjJfZW5hYmxlZCA9PSBTUEVDVFJFX1YyX0VJQlJTIFx1MDAyNlx1MDAyNiB1bnByaXZpbGVnZWRfZWJwZl9lbmFibGVkKCkpXG4gXHRcdHByX2VycihTUEVDVFJFX1YyX0VJQlJTX0VCUEZfTVNHKTtcbiBcbi1cdGlmIChzcGVjdHJlX3YyX2luX2licnNfbW9kZShzcGVjdHJlX3YyX2VuYWJsZWQpKSB7XG4tXHRcdGlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVVUT0lCUlMpKSB7XG4tXHRcdFx0bXNyX3NldF9iaXQoTVNSX0VGRVIsIF9FRkVSX0FVVE9JQlJTKTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHR4ODZfc3BlY19jdHJsX2Jhc2UgfD0gU1BFQ19DVFJMX0lCUlM7XG4tXHRcdFx0dXBkYXRlX3NwZWNfY3RybCh4ODZfc3BlY19jdHJsX2Jhc2UpO1xuLVx0XHR9XG4rXHQvKlxuK1x0ICogT24gQXV0b0lCUlMtY2FwYWJsZSBDUFVzLCBlSUJSUyBpcyBlbmFibGVkIHRocm91Z2ggRUZFUi5BVVRPSUJSU1xuK1x0ICogcmF0aGVyIHRoYW4gU1BFQ19DVFJMLklCUlMuICBMZWdhY3kgc3BlY3RyZV92Mj1pYnJzIGtlZXBzIHVzaW5nXG4rXHQgKiBTUEVDX0NUUkwuSUJSUyBldmVuIHRoZXJlLCBhcyBpdCBuZWVkcyB0byBiZSB0b2dnbGVkIG9uIGtlcm5lbFxuK1x0ICogZW50cnkvZXhpdC5cbitcdCAqL1xuK1x0aWYgKHNwZWN0cmVfdjJfaW5fZWlicnNfbW9kZShzcGVjdHJlX3YyX2VuYWJsZWQpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BVVRPSUJSUykpIHtcbitcdFx0bXNyX3NldF9iaXQoTVNSX0VGRVIsIF9FRkVSX0FVVE9JQlJTKTtcbitcdH0gZWxzZSBpZiAoc3BlY3RyZV92Ml9pbl9pYnJzX21vZGUoc3BlY3RyZV92Ml9lbmFibGVkKSkge1xuK1x0XHR4ODZfc3BlY19jdHJsX2Jhc2UgfD0gU1BFQ19DVFJMX0lCUlM7XG4rXHRcdHVwZGF0ZV9zcGVjX2N0cmwoeDg2X3NwZWNfY3RybF9iYXNlKTtcbiBcdH1cbiBcbitcdGlmIChzcGVjdHJlX3YyX2luX2VpYnJzX21vZGUoc3BlY3RyZV92Ml9lbmFibGVkKSBcdTAwMjZcdTAwMjZcbitcdCAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU0VWX1NOUCkpXG4rXHRcdHByX3dhcm4oU1BFQ1RSRV9WMl9FSUJSU19TTlBfUEVSRl9NU0cpO1xuK1xuIFx0c3dpdGNoIChzcGVjdHJlX3YyX2VuYWJsZWQpIHtcbiBcdGNhc2UgU1BFQ1RSRV9WMl9OT05FOlxuIFx0XHRyZXR1cm47XG5AQCAtMzI4NCw2ICszMzA0LDE3IEBAIHZvaWQgX19pbml0IGNwdV9zZWxlY3RfbWl0aWdhdGlvbnModm9pZClcbiBcdFx0eDg2X3NwZWNfY3RybF9iYXNlIFx1MDAyNj0gflNQRUNfQ1RSTF9NSVRJR0FUSU9OU19NQVNLO1xuIFx0fVxuIFxuK1x0LypcbitcdCAqIExpa2V3aXNlIGZvciBFRkVSLkFVVE9JQlJTOiBoZWFkXzY0LlMgcHJlc2VydmVzIHRoZSBpbmNvbWluZyBFRkVSXG4rXHQgKiBiaXRzLCBzbyBhIGtleGVjIGZyb20gYSBrZXJuZWwgdGhhdCByYW4gaW4gQXV0b0lCUlMgbW9kZSBjYXJyaWVzIHRoZVxuK1x0ICogYml0IGludG8gdGhpcyBvbmUuICBDbGVhciBpdCBhbmQgbGV0IHRoZSBtaXRpZ2F0aW9uIHNlbGVjdGlvbiBiZWxvd1xuK1x0ICogcmVkaXNjb3ZlciBpdC4gIFRoaXMgYWxzbyBydW5zIGJlZm9yZSBpbml0X3JlYWxfbW9kZSgpIHNuYXBzaG90c1xuK1x0ICogRUZFUiBmb3IgdGhlIEFQIHRyYW1wb2xpbmUsIHNvIEFQcyBpbmhlcml0IHdoYXRldmVyIHRoaXMga2VybmVsXG4rXHQgKiBzZXR0bGVzIG9uIHJhdGhlciB0aGFuIHRoZSBwcmV2aW91cyBrZXJuZWwncyBjaG9pY2UuXG4rXHQgKi9cbitcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX0FVVE9JQlJTKSlcbitcdFx0bXNyX2NsZWFyX2JpdChNU1JfRUZFUiwgX0VGRVJfQVVUT0lCUlMpO1xuK1xuIFx0eDg2X2FyY2hfY2FwX21zciA9IHg4Nl9yZWFkX2FyY2hfY2FwX21zcigpO1xuIFxuIFx0Y3B1X3ByaW50X2F0dGFja192ZWN0b3JzKCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmNcbmluZGV4IGM3MzUyODI3ZjQ5MWQuLmM1NjhkNzQyODJhODQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jXG5AQCAtMTQ5NiwxMyArMTQ5Niw5IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBjcHVfc2V0X2J1Z19iaXRzKHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcbiBcdC8qXG4gXHQgKiBBTUQncyBBdXRvSUJSUyBpcyBlcXVpdmFsZW50IHRvIEludGVsJ3MgZUlCUlMgLSB1c2UgdGhlIEludGVsIGZlYXR1cmVcbiBcdCAqIGZsYWcgYW5kIHByb3RlY3QgZnJvbSB2ZW5kb3Itc3BlY2lmaWMgYnVncyB2aWEgdGhlIHdoaXRlbGlzdC5cbi1cdCAqXG4tXHQgKiBEb24ndCB1c2UgQXV0b0lCUlMgd2hlbiBTTlAgaXMgZW5hYmxlZCBiZWNhdXNlIGl0IGRlZ3JhZGVzIGhvc3Rcbi1cdCAqIHVzZXJzcGFjZSBpbmRpcmVjdCBicmFuY2ggcGVyZm9ybWFuY2UuXG4gXHQgKi9cbiBcdGlmICgoeDg2X2FyY2hfY2FwX21zciBcdTAwMjYgQVJDSF9DQVBfSUJSU19BTEwpIHx8XG4tXHQgICAgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfQVVUT0lCUlMpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICAhY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TRVZfU05QKSkpIHtcbitcdCAgICBjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0FVVE9JQlJTKSkge1xuIFx0XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX0lCUlNfRU5IQU5DRUQpO1xuIFx0XHRpZiAoIWNwdV9tYXRjaGVzKGNwdV92dWxuX3doaXRlbGlzdCwgTk9fRUlCUlNfUEJSU0IpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgISh4ODZfYXJjaF9jYXBfbXNyIFx1MDAyNiBBUkNIX0NBUF9QQlJTQl9OTykpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbmluZGV4IDU3MDU3MjNmMWY0MTIuLjUzY2M2ZDA0Mzg4MzYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5AQCAtNTA2LDcgKzUwNiw3IEBAIHN0YXRpYyBpbnQgX19zZXZfZ3Vlc3RfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncCxcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoIXNucF9hY3RpdmUpXG4tXHRcdHZhbGlkX3Ztc2FfZmVhdHVyZXMgXHUwMDI2PSB+U1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0M7XG4rXHRcdHZhbGlkX3Ztc2FfZmVhdHVyZXMgXHUwMDI2PSB+U1ZNX1NFVl9GRUFUX1NOUF9PTkxZX01BU0s7XG4gXG4gXHRpZiAoZGF0YS1cdTAwM2V2bXNhX2ZlYXR1cmVzIFx1MDAyNiB+dmFsaWRfdm1zYV9mZWF0dXJlcylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMzI1Nyw4ICszMjU3LDIzIEBAIHZvaWQgX19pbml0IHNldl9oYXJkd2FyZV9zZXR1cCh2b2lkKVxuIFx0ICAgIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfTk9fTkVTVEVEX0RBVEFfQlApKVxuIFx0XHRzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgfD0gU1ZNX1NFVl9GRUFUX0RFQlVHX1NXQVA7XG4gXG4tXHRpZiAoc2V2X3NucF9lbmFibGVkIFx1MDAyNlx1MDAyNiB0c2Nfa2h6IFx1MDAyNlx1MDAyNiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NOUF9TRUNVUkVfVFNDKSlcbi1cdFx0c2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDO1xuK1x0aWYgKHNldl9zbnBfZW5hYmxlZCkge1xuK1x0XHRzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgfD0gU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkU7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFVubGlrZSBTZWN1cmUgVFNDIGFuZCBJQlBCLW9uLUVudHJ5IGJlbG93LCBCVEIgSXNvbGF0aW9uIGhhc1xuK1x0XHQgKiBubyBob3N0IGVudW1lcmF0aW9uIGJpdCB0byBnYXRlIG9uOiB0aGUgQVBNIGRlZmluZXMgaXQgYXNcbitcdFx0ICogYXJjaGl0ZWN0dXJhbGx5IHByZXNlbnQgb24gZXZlcnkgU0VWLVNOUC1jYXBhYmxlIHByb2Nlc3Nvci5cbitcdFx0ICogSWYgU05QIGlzIHN1cHBvcnRlZCwgQlRCIElzb2xhdGlvbiBpcyBhdmFpbGFibGUuXG4rXHRcdCAqL1xuK1x0XHRzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgfD0gU1ZNX1NFVl9GRUFUX0JUQl9JU09MQVRJT047XG4rXG4rXHRcdGlmICh0c2Nfa2h6IFx1MDAyNlx1MDAyNiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NOUF9TRUNVUkVfVFNDKSlcbitcdFx0XHRzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgfD0gU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0M7XG4rXG4rXHRcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NOUF9JQlBCX09OX0VOVFJZKSlcbitcdFx0XHRzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgfD0gU1ZNX1NFVl9GRUFUX0lCUEJfT05fRU5UUlk7XG4rXHR9XG4gfVxuIFxuIHZvaWQgc2V2X2hhcmR3YXJlX3Vuc2V0dXAodm9pZClcbmRpZmYgLS1naXQgYS90b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oIGIvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuaW5kZXggNjU0N2MwYWVlNDViNy4uNjM0Y2QwOTM2NmRhNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbisrKyBiL3Rvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbkBAIC00NjAsNiArNDYwLDcgQEBcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0FMTE9XRURfU0VWX0ZFQVRVUkVTICgxOSozMisyNykgLyogQWxsb3dlZCBTRVYgRmVhdHVyZXMgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1NWU01cdFx0KDE5KjMyKzI4KSAvKiBcInN2c21cIiBTVlNNIHByZXNlbnQgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0hWX0lOVVNFX1dSX0FMTE9XRURcdCgxOSozMiszMCkgLyogQWxsb3cgV3JpdGUgdG8gaW4tdXNlIGh5cGVydmlzb3Itb3duZWQgcGFnZXMgKi9cbisjZGVmaW5lIFg4Nl9GRUFUVVJFX1NOUF9JQlBCX09OX0VOVFJZXHQoMTkqMzIrMzEpIC8qIFNFVi1TTlAgSUJQQiBvbiBWTSBFbnRyeSAqL1xuIFxuIC8qIEFNRC1kZWZpbmVkIEV4dGVuZGVkIEZlYXR1cmUgMiBFQVgsIENQVUlEIGxldmVsIDB4ODAwMDAwMjEgKEVBWCksIHdvcmQgMjAgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX05PX05FU1RFRF9EQVRBX0JQXHQoMjAqMzIrIDApIC8qIE5vIE5lc3RlZCBEYXRhIEJyZWFrcG9pbnRzICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmNcbmluZGV4IDg3YmZmNGZiYjdlZDUuLjNmNTkyZTI0NWE2NmQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jXG5AQCAtMTMsMTcgKzEzLDI1IEBAXG4gI2luY2x1ZGUgXCJzdm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiBcbi0jZGVmaW5lIFNWTV9TRVZfRkVBVF9ERUJVR19TV0FQIDMydVxuKyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkVcdFx0QklUX1VMTCgwKVxuKyNkZWZpbmUgU1ZNX1NFVl9GRUFUX0RFQlVHX1NXQVBcdFx0QklUX1VMTCg1KVxuKyNkZWZpbmUgU1ZNX1NFVl9GRUFUX0JUQl9JU09MQVRJT05cdEJJVF9VTEwoNylcbisjZGVmaW5lIFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDXHRcdEJJVF9VTEwoOSlcbisjZGVmaW5lIFNWTV9TRVZfRkVBVF9JQlBCX09OX0VOVFJZXHRCSVRfVUxMKDIxKVxuK1xuKy8qIEZlYXR1cmVzIHZhbGlkIG9ubHkgZm9yIFNOUCBndWVzdHMsIHJlamVjdGVkIGZvciBTRVYtRVMgYW5kIGJlbG93LiAqL1xuKyNkZWZpbmUgU05QX09OTFlfRkVBVFVSRVNcdFx0KFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFIHwgXFxcbitcdFx0XHRcdFx0IFNWTV9TRVZfRkVBVF9CVEJfSVNPTEFUSU9OIHwgXFxcbitcdFx0XHRcdFx0IFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDIHwgXFxcbitcdFx0XHRcdFx0IFNWTV9TRVZfRkVBVF9JQlBCX09OX0VOVFJZKVxuIFxuIC8qXG4gICogU29tZSBmZWF0dXJlcyBtYXkgaGF2ZSBoaWRkZW4gZGVwZW5kZW5jaWVzLCBvciBtYXkgb25seSB3b3JrXG4gICogZm9yIGNlcnRhaW4gVk0gdHlwZXMuICBFcnIgb24gdGhlIHNpZGUgb2Ygc2FmZXR5IGFuZCBkb24ndFxuICAqIGV4cGVjdCB0aGF0IGFsbCBzdXBwb3J0ZWQgZmVhdHVyZXMgY2FuIGJlIHBhc3NlZCBvbmUgYnkgb25lXG4gICogdG8gS1ZNX1NFVl9JTklUMi5cbi0gKlxuLSAqIChXZWxsLCByaWdodCBub3cgdGhlcmUncyBvbmx5IG9uZS4uLilcbiAgKi9cbi0jZGVmaW5lIEtOT1dOX0ZFQVRVUkVTIFNWTV9TRVZfRkVBVF9ERUJVR19TV0FQXG4rI2RlZmluZSBLTk9XTl9GRUFUVVJFU1x0XHQoU1ZNX1NFVl9GRUFUX0RFQlVHX1NXQVAgfCBTTlBfT05MWV9GRUFUVVJFUylcbiBcbiBpbnQga3ZtX2ZkO1xuIHU2NCBzdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcztcbkBAIC0xMDgsNyArMTE2LDcgQEAgdm9pZCB0ZXN0X2ZlYXR1cmVzKHUzMiB2bV90eXBlLCB1NjQgc3VwcG9ydGVkX2ZlYXR1cmVzKVxuIFx0XHRpZiAoIShzdXBwb3J0ZWRfZmVhdHVyZXMgXHUwMDI2IEJJVF9VTEwoaSkpKVxuIFx0XHRcdHRlc3RfaW5pdDJfaW52YWxpZCh2bV90eXBlLFxuIFx0XHRcdFx0XHUwMDI2KHN0cnVjdCBrdm1fc2V2X2luaXQpeyAudm1zYV9mZWF0dXJlcyA9IEJJVF9VTEwoaSkgfSxcbi1cdFx0XHRcdFwidW5rbm93biBmZWF0dXJlXCIpO1xuK1x0XHRcdFx0XCJ1bmtub3duIG9yIHVuc3VwcG9ydGVkIGZlYXR1cmUgZm9yIFZNIHR5cGVcIik7XG4gXHRcdGVsc2UgaWYgKEtOT1dOX0ZFQVRVUkVTIFx1MDAyNiBCSVRfVUxMKGkpKVxuIFx0XHRcdHRlc3RfaW5pdDIodm1fdHlwZSxcbiBcdFx0XHRcdFx1MDAyNihzdHJ1Y3Qga3ZtX3Nldl9pbml0KXsgLnZtc2FfZmVhdHVyZXMgPSBCSVRfVUxMKGkpIH0pO1xuQEAgLTE1Nyw3ICsxNjUsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFxuIFx0dGVzdF9mZWF0dXJlcyhLVk1fWDg2X1NFVl9WTSwgMCk7XG4gXHRpZiAoaGF2ZV9zZXZfZXMpXG4tXHRcdHRlc3RfZmVhdHVyZXMoS1ZNX1g4Nl9TRVZfRVNfVk0sIHN1cHBvcnRlZF92bXNhX2ZlYXR1cmVzKTtcbitcdFx0dGVzdF9mZWF0dXJlcyhLVk1fWDg2X1NFVl9FU19WTSwgc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgXHUwMDI2IH5TTlBfT05MWV9GRUFUVVJFUyk7XG4gXHRpZiAoaGF2ZV9zbnApXG4gXHRcdHRlc3RfZmVhdHVyZXMoS1ZNX1g4Nl9TTlBfVk0sIHN1cHBvcnRlZF92bXNhX2ZlYXR1cmVzKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU5OjEzLjgwNjU1NTY2OFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjA4NjA5MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwgQ2hhbmdlcyBmb3IgeDg2IENQVSBhbmQgS1ZNIFNFViBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIHR3ZWFraW5nIHRoZSB4ODYgQ1BVIGZlYXR1cmVzIGFuZCB0aGUgS1ZNIFNFViBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBUaGUgY2hhbmdlcyBhcmUgc3ByZWFkIGFjcm9zcyBhIGJ1bmNoIG9mIGZpbGVzOiBgYXJjaC94ODYvS2NvbmZpZ2AsIHNvbWUgaGVhZGVyIGZpbGVzIGxpa2UgYGNwdWZlYXR1cmVzLmhgIGFuZCBgc3ZtLmhgLCBhbmQgdGhlbiBpbnRvIHNvbWUga2VybmVsIGNvZGUsIGBidWdzLmNgLCBgY29tbW9uLmNgLCBhbmQgYHNldi5jYCwgYWxvbmcgd2l0aCBhIGZldyBzZWxmdGVzdHMuIFNlZW1zIGxpa2UgYSBwcmV0dHkgZm9jdXNlZCB1cGRhdGUuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBzY2FuIGZvciBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBoZXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBiZSBtaXN1c2VkLCBhbmQgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBhbnkgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBtaWdodCBiZSBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXG5cbkl0IGxvb2tzIGxpa2UgdGhlIG1lYXQgb2YgdGhlIHBhdGNoIGlzIGFib3V0IENQVSBtaXRpZ2F0aW9uIGZsYWdzIOKAkyB0aGluZ3MgbGlrZSBJQlJTLCBBdXRvSUJSUywgU0VWLVNOUCwgYW5kIElCUEIgb24gZW50cnkuIEknbSBmb2N1c2luZyBvbiB0aGF0IGBzZXYuY2AgZmlsZSBub3csIHNwZWNpZmljYWxseSB0aGF0IHNuaXBwZXQgYXJvdW5kIGxpbmUgNTA2LiBJIHNlZSB0aGV5J3ZlIGNoYW5nZWQgaG93IGB2YWxpZF92bXNhX2ZlYXR1cmVzYCBpcyBoYW5kbGVkLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgbWFza2luZyBvdXQgYFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDYCBpZiBTTlAgaXNuJ3QgYWN0aXZlLiBCdXQgdGhlbiBJJ20gc2VlaW5nIGBTVk1fU0VWX0ZFQVRfU05QX09OTFlfTUFTS2Agd2hpY2ggc2VlbXMgbGlrZSBzb21ldGhpbmcgaW50ZXJlc3RpbmcgdG8gbG9vayBpbnRvLlxuXG5Ib2xkIG9uIGEgbWludXRlLi4uIGBkYXRhYCBpcyBhIHBvaW50ZXIgdG8gYHN0cnVjdCBrdm1fc2V2X2luaXRgLCBhbmQgaXQncyBiZWluZyBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlLCBwYXNzZWQgYXMgYW4gYXJndW1lbnQuIERvZXMgdGhpcyBmdW5jdGlvbiwgb3IgYW55IHN1YnNlcXVlbnQgY2FsbHMgdG8gdGhpcywgcmV0dXJuIGFueXRoaW5nIHRvIHVzZXIgc3BhY2U/IEkgbmVlZCB0byB0cmFjayB0aGUgZGF0YSBmbG93LiBUaGF0IGNvdWxkIGJlIGEga2V5IHBvaW50IG9mIGF0dGFjayBpZiBub3QgY29ycmVjdGx5IGhhbmRsZWQuIExldCBtZSBsb29rIGF0IHRoZSBgX19zZXZfZ3Vlc3RfaW5pdGAgZnVuY3Rpb24gYW5kIGl0cyBjYWxsZXIsIHdoaWNoIGlzIGBzZXZfZ3Vlc3RfaW5pdGAgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEkgbmVlZCB0byBzZWUgaWYgYW55IG9mIHRoYXQgdXNlci1zcGFjZS1zdXBwbGllZCBkYXRhIGlzIGJlaW5nIHVzZWQgdG8gd3JpdGUgYmFjayB0byB1c2VyIHNwYWNlLiBJdCBjb3VsZCBiZSBhbiBpbnRlcmVzdGluZyB2ZWN0b3IgdG8gZXhwbG9pdCBpZiB0aGV5J3JlIG5vdCBjYXJlZnVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjczLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTk6MjEuNDE1MTY3NTQyWiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzkxNjAwMDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc2V2X2d1ZXN0X2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ3Nz1zdGF0aWMgdm9pZCBzbnBfZ3Vlc3RfcmVxX2NsZWFudXAoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTAtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0OTE6c3RhdGljIGludCBfX3Nldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDkyLVxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3Nldl9pbml0ICpkYXRhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz01ODE9c3RhdGljIGludCBzZXZfZ3Vlc3RfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjAwLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NjAxOlxcdHJldHVybiBfX3Nldl9ndWVzdF9pbml0KGt2bSwgYXJncCwgXFx1MDAyNmRhdGEsIHZtX3R5cGUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjAyLX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NjA0PXN0YXRpYyBpbnQgc2V2X2d1ZXN0X2luaXQyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MTgtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MTk6XFx0cmV0dXJuIF9fc2V2X2d1ZXN0X2luaXQoa3ZtLCBhcmdwLCBcXHUwMDI2ZGF0YSwga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjIwLX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzM0OD12b2lkIHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzM1NC1cXHQgKlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzM1NTpcXHQgKiBDaGVja2luZyBmb3IgU0VWKyBvdXRzaWRlIG9mIGt2bS1cXHUwMDNlbG9jayBpcyBzYWZlIGFzIF9fc2V2X2d1ZXN0X2luaXQoKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzM1Ni1cXHQgKiBjYW4gb25seSBiZSBkb25lIGJlZm9yZSB2Q1BVcyBhcmUgY3JlYXRlZCwgY2FjaGVzIGNhbiBiZSBpbmNvaGVyZW50XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU5OjIyLjgwNjc3NDY1MVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzEwMTIwNTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtNU0FOIE5lY2Vzc2l0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2luZyBvbiBDUFUgZmVhdHVyZSBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIFNFVi1TTlAgYW5kIElCUlMuIFRoZSBiZWF1dHkgb2YgaXQgaXMgdGhhdCBpdCdzICpwdXJlbHkqIGFib3V0IHRoZSBsb2dpYyBmb3IgQ1BVIG1pdGlnYXRpb24gc2VsZWN0aW9uIGFuZCB2YWxpZGF0aW5nIEtWTSBTRVYgaW5pdGlhbGl6YXRpb24gZmVhdHVyZXMuIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRoYXQgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS4gTm8gbmV3IGFsbG9jYXRpb25zIGFyZSBoYXBwZW5pbmcsIGFuZCBjcnVjaWFsbHksIEknbSBzZWVpbmcgbm90aGluZyB0aGF0IGhpbnRzIGF0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBkYXRhLVx1MDAzZXZtc2FfZmVhdHVyZXNgIGJpdC4gQWgsIHJpZ2h0LCB0aGF0IGNvbWVzIGZyb20gdGhlIGBzdHJ1Y3Qga3ZtX3Nldl9pbml0YCBzdHJ1Y3R1cmUsIHdoaWNoIGlzIGNvcGllZCBmcm9tIHVzZXIgc3BhY2UuIEFuZCBJJ20gbG9va2luZyByaWdodCBhdCB0aGUgYGNvcHlfZnJvbV91c2VyYCBjYWxsIGluIGBzZXZfZ3Vlc3RfaW5pdDJgOlxuXG5gYGBjXG5zdGF0aWMgaW50IHNldl9ndWVzdF9pbml0MihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcbntcbiAgICBzdHJ1Y3Qga3ZtX3Nldl9pbml0IGRhdGE7XG5cbiAgICBpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2ZGF0YSwgKHZvaWQgX191c2VyICopKHVpbnRwdHJfdClhcmdwLVx1MDAzZWRhdGEsIHNpemVvZihkYXRhKSkpXG4gICAgICAgIHJldHVybiAtRUZBVUxUO1xuXG4gICAgcmV0dXJuIF9fc2V2X2d1ZXN0X2luaXQoa3ZtLCBhcmdwLCBcdTAwMjZkYXRhLCBrdm0tXHUwMDNlYXJjaC52bV90eXBlKTtcbn1cbmBgYFxuXG5Pa2F5LCBnb29kLiBgZGF0YWAgaXMgKmZ1bGx5KiBpbml0aWFsaXplZCBieSB0aGF0IGBjb3B5X2Zyb21fdXNlcmAgY2FsbC4gVGhlcmUncyBubyB3YXkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciBsZWFrZWQgdGhyb3VnaCB0aGF0IHBhdGguIFRoaXMgaXMgc29saWQuXG5cblRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpcyB0aGF0IEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBJJ20gZ29pbmcgdG8gc2V0IGBOZWVkc0tNU0FOPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgwMiwiT3V0cHV0VG9rZW5zIjoxMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTk6MjkuMTE2ODk4NTU3WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBDUFUgbWl0aWdhdGlvbiBzZWxlY3Rpb24gbG9naWMgKElCUlMsIEF1dG9JQlJTLCBTRVYtU05QKSBhbmQgS1ZNIFNFViBpbml0aWFsaXphdGlvbiBmZWF0dXJlIHZhbGlkYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuIFRoZSBtb2RpZmllZCBkYXRhIHN0cnVjdHVyZXMgKGxpa2UgYHN0cnVjdCBrdm1fc2V2X2luaXRgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBgY29weV9mcm9tX3VzZXJgIGJlZm9yZSBiZWluZyByZWFkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgZXhwb3NlZCBieSB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIENQVSBtaXRpZ2F0aW9uIHNlbGVjdGlvbiBsb2dpYyAoSUJSUywgQXV0b0lCUlMsIFNFVi1TTlApIGFuZCBLVk0gU0VWIGluaXRpYWxpemF0aW9uIGZlYXR1cmUgdmFsaWRhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIG1vZGlmaWVkIGRhdGEgc3RydWN0dXJlcyAobGlrZSBgc3RydWN0IGt2bV9zZXZfaW5pdGApIGFyZSBmdWxseSBpbml0aWFsaXplZCBmcm9tIHVzZXIgc3BhY2UgdmlhIGBjb3B5X2Zyb21fdXNlcmAgYmVmb3JlIGJlaW5nIHJlYWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz65zh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 22:53:27 +0000 UTC FinishedAt: 2026-08-26 22:59:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "ec8477a492cb24f2c334847c8734ca56c7ffdd29", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD", "KVM_AMD_SEV", "CRYPTO_DEV_CCP_DD", "CRYPTO_DEV_SP_PSP", "AMD_IOMMU", "IOMMU_SUPPORT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "ec8477a492cb24f2c334847c8734ca56c7ffdd29", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_AMD", "KVM_AMD_SEV", "CRYPTO_DEV_CCP_DD", "CRYPTO_DEV_SP_PSP", "AMD_IOMMU", "IOMMU_SUPPORT" ], "series_id": "cc0bd5b4-43c7-414a-b18a-677a2a7e94bc" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "sev_mem_enc_ioctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfQ0NQX0REJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfU1BfUFNQJiMzNDssCiAgICAmIzM0O0FNRF9JT01NVSYjMzQ7LAogICAgJiMzNDtJT01NVV9TVVBQT1JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2V2X21lbV9lbmNfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBDUFUgbWl0aWdhdGlvbiBzZWxlY3Rpb24gbG9naWMgKElCUlMsIEF1dG9JQlJTLCBTRVYtU05QKSBhbmQgS1ZNIFNFViBpbml0aWFsaXphdGlvbiBmZWF0dXJlIHZhbGlkYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuIFRoZSBtb2RpZmllZCBkYXRhIHN0cnVjdHVyZXMgKGxpa2UgYHN0cnVjdCBrdm1fc2V2X2luaXRgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBgY29weV9mcm9tX3VzZXJgIGJlZm9yZSBiZWluZyByZWFkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgZXhwb3NlZCBieSB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmFsaWRhdGlvbiBvZiBgdm1zYV9mZWF0dXJlc2AgZHVyaW5nIEtWTSBTRVYgZ3Vlc3QgaW5pdGlhbGl6YXRpb24gKGBLVk1fU0VWX0lOSVQyYCBpb2N0bCkgYW5kIGFkZHMgbmV3IFNFVi1TTlAgZmVhdHVyZXMgdG8gdGhlIHN1cHBvcnRlZCBsaXN0LiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgdGhlIG5ldyBmZWF0dXJlIHZhbGlkYXRpb24gbG9naWMgZG9lc24mIzM5O3QgaW50cm9kdWNlIGJ1Z3MuIFRoZSBDUFUgYnVnIG1pdGlnYXRpb24gY2hhbmdlcyBhcmUgYm9vdC10aW1lIGxvZ2ljIGFuZCBub3QgZGlyZWN0bHkgZnV6emFibGUgZnJvbSB1c2Vyc3BhY2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5YjAwZjNmNjYzODY1NmYxNTBmOGQ5OGFmNmU0YzllMDQyNjg3MDljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMjI6NTc6MTAgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWdcbmluZGV4IDE1ZmQ5ZWM1ZWNhY2IuLmI5YTdkZGVmNGNiYWIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9LY29uZmlnXG5AQCAtMjQ5NiwxMiAmIzQzOzI0OTYsMTMgQEAgY29uZmlnIE1JVElHQVRJT05fSUJQQl9FTlRSWVxuIFxuIGNvbmZpZyBNSVRJR0FUSU9OX0lCUlNfRU5UUllcbiBcdGJvb2wgXCYjMzQ7RW5hYmxlIElCUlMgb24ga2VybmVsIGVudHJ5XCYjMzQ7XG4tXHRkZXBlbmRzIG9uIENQVV9TVVBfSU5URUwgXHUwMDI2XHUwMDI2IFg4Nl82NFxuJiM0MztcdGRlcGVuZHMgb24gWDg2XzY0XG4gXHRkZWZhdWx0IHlcbiBcdGhlbHBcbiBcdCAgQ29tcGlsZSB0aGUga2VybmVsIHdpdGggc3VwcG9ydCBmb3IgdGhlIHNwZWN0cmVfdjI9aWJycyBtaXRpZ2F0aW9uLlxuLVx0ICBUaGlzIG1pdGlnYXRlcyBib3RoIHNwZWN0cmVfdjIgYW5kIHJldGJsZWVkIGF0IGdyZWF0IGNvc3QgdG9cbi1cdCAgcGVyZm9ybWFuY2UuXG4mIzQzO1x0ICBUaGlzIG1pdGlnYXRlcyBzcGVjdHJlX3YyIGF0IGdyZWF0IGNvc3QgdG8gcGVyZm9ybWFuY2UuICBPbiBJbnRlbCxcbiYjNDM7XHQgIGl0IGFsc28gbWl0aWdhdGVzIHJldGJsZWVkLiAgT24gQU1EL0h5Z29uLCByZXRibGVlZCBtaXRpZ2F0aW9uXG4mIzQzO1x0ICByZXF1aXJlcyBNSVRJR0FUSU9OX1VOUkVUX0VOVFJZIG9yIE1JVElHQVRJT05fSUJQQl9FTlRSWS5cbiBcbiBjb25maWcgTUlUSUdBVElPTl9TUlNPXG4gXHRib29sIFwmIzM0O01pdGlnYXRlIHNwZWN1bGF0aXZlIFJBUyBvdmVyZmxvdyBvbiBBTURcJiMzNDtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuaW5kZXggZjcwZWU3NGI1ZjkyMS4uM2FhZDJiNTNmNTliZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbkBAIC00NzIsNiAmIzQzOzQ3Miw3IEBAXG4gI2RlZmluZSBYODZfRkVBVFVSRV9BTExPV0VEX1NFVl9GRUFUVVJFUyAoMTkqMzImIzQzOzI3KSAvKiBBbGxvd2VkIFNFViBGZWF0dXJlcyAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfU1ZTTVx0XHQoMTkqMzImIzQzOzI4KSAvKiBcJiMzNDtzdnNtXCYjMzQ7IFNWU00gcHJlc2VudCAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfSFZfSU5VU0VfV1JfQUxMT1dFRFx0KDE5KjMyJiM0MzszMCkgLyogQWxsb3cgV3JpdGUgdG8gaW4tdXNlIGh5cGVydmlzb3Itb3duZWQgcGFnZXMgKi9cbiYjNDM7I2RlZmluZSBYODZfRkVBVFVSRV9TTlBfSUJQQl9PTl9FTlRSWVx0KDE5KjMyJiM0MzszMSkgLyogU0VWLVNOUCBJQlBCIG9uIFZNIEVudHJ5ICovXG4gXG4gLyogQU1ELWRlZmluZWQgRXh0ZW5kZWQgRmVhdHVyZSAyIEVBWCwgQ1BVSUQgbGV2ZWwgMHg4MDAwMDAyMSAoRUFYKSwgd29yZCAyMCAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfTk9fTkVTVEVEX0RBVEFfQlBcdCgyMCozMiYjNDM7IDApIC8qIE5vIE5lc3RlZCBEYXRhIEJyZWFrcG9pbnRzICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuaW5kZXggYWE2MzQzMWJhOTJjMy4uMGRhMjIzNGI3MWM2OSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuQEAgLTMwNSwxMSAmIzQzOzMwNSwxOCBAQCBzdGF0aWNfYXNzZXJ0KChBVklDX01BWF9QSFlTSUNBTF9JRCBcdTAwMjYgQVZJQ19QSFlTSUNBTF9NQVhfSU5ERVhfTUFTSykgPT0gQVZJQ19NQVhfXG4gc3RhdGljX2Fzc2VydCgoWDJBVklDX01BWF9QSFlTSUNBTF9JRCBcdTAwMjYgQVZJQ19QSFlTSUNBTF9NQVhfSU5ERVhfTUFTSykgPT0gWDJBVklDX01BWF9QSFlTSUNBTF9JRCk7XG4gc3RhdGljX2Fzc2VydCgoWDJBVklDXzRLX01BWF9QSFlTSUNBTF9JRCBcdTAwMjYgQVZJQ19QSFlTSUNBTF9NQVhfSU5ERVhfTUFTSykgPT0gWDJBVklDXzRLX01BWF9QSFlTSUNBTF9JRCk7XG4gXG4tI2RlZmluZSBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRVx0XHRcdFx0QklUKDApXG4tI2RlZmluZSBTVk1fU0VWX0ZFQVRfUkVTVFJJQ1RFRF9JTkpFQ1RJT05cdFx0QklUKDMpXG4tI2RlZmluZSBTVk1fU0VWX0ZFQVRfQUxURVJOQVRFX0lOSkVDVElPTlx0XHRCSVQoNClcbi0jZGVmaW5lIFNWTV9TRVZfRkVBVF9ERUJVR19TV0FQXHRcdFx0XHRCSVQoNSlcbi0jZGVmaW5lIFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDXHRcdFx0XHRCSVQoOSlcbiYjNDM7I2RlZmluZSBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRVx0XHRcdFx0QklUX1VMTCgwKVxuJiM0MzsjZGVmaW5lIFNWTV9TRVZfRkVBVF9SRVNUUklDVEVEX0lOSkVDVElPTlx0XHRCSVRfVUxMKDMpXG4mIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX0FMVEVSTkFURV9JTkpFQ1RJT05cdFx0QklUX1VMTCg0KVxuJiM0MzsjZGVmaW5lIFNWTV9TRVZfRkVBVF9ERUJVR19TV0FQXHRcdFx0XHRCSVRfVUxMKDUpXG4mIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX0JUQl9JU09MQVRJT05cdFx0XHRCSVRfVUxMKDcpXG4mIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0NcdFx0XHRcdEJJVF9VTEwoOSlcbiYjNDM7I2RlZmluZSBTVk1fU0VWX0ZFQVRfSUJQQl9PTl9FTlRSWVx0XHRcdEJJVF9VTEwoMjEpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFNWTV9TRVZfRkVBVF9TTlBfT05MWV9NQVNLXHQoU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkUgfCBcXFxuJiM0MztcdFx0XHRcdFx0IFNWTV9TRVZfRkVBVF9CVEJfSVNPTEFUSU9OIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBTVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQyB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgU1ZNX1NFVl9GRUFUX0lCUEJfT05fRU5UUlkpXG4gXG4gI2RlZmluZSBWTUNCX0FMTE9XRURfU0VWX0ZFQVRVUkVTX1ZBTElEXHRcdFx0QklUX1VMTCg2MylcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1Z3MuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYnVncy5jXG5pbmRleCA1NmVhYzU2MTFjMzE4Li4wODc4MGUwZDM3ZWM3IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYnVncy5jXG5AQCAtMTMwNSw3ICYjNDM7MTMwNSwxNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcmV0YmxlZWRfdXBkYXRlX21pdGlnYXRpb24odm9pZClcbiBcbiBcdC8qXG4gXHQgKiBMZXQgSUJSUyB0cnVtcCBhbGwgb24gSW50ZWwgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGVmZmVjdHMgb2YgdGhlXG4tXHQgKiByZXRibGVlZD0gY21kbGluZSBvcHRpb24gZXhjZXB0IGZvciBjYWxsIGRlcHRoIGJhc2VkIHN0dWZmaW5nXG4mIzQzO1x0ICogcmV0YmxlZWQ9IGNtZGxpbmUgb3B0aW9uIGV4Y2VwdCBmb3IgY2FsbCBkZXB0aCBiYXNlZCBzdHVmZmluZy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIE9uIEFNRC9IeWdvbiwgbGVnYWN5IFNQRUNfQ1RSTC5JQlJTIHRvZ2dsaW5nIGRvZXMgbm90IG1pdGlnYXRlIHRoZVxuJiM0MztcdCAqIEJyYW5jaCBUeXBlIENvbmZ1c2lvbiBSRVRCbGVlZCB2YXJpYW50OiBSRVQgcHJlZGljdGlvbiBjb21lcyBmcm9tXG4mIzQzO1x0ICogdGhlIFJldHVybiBBZGRyZXNzIFByZWRpY3Rvciwgbm90IHRoZSByZXN0cmljdGVkIGluZGlyZWN0IGJyYW5jaFxuJiM0MztcdCAqIHByZWRpY3RvcnMgdGhhdCBJQlJTIGNvbnRyb2xzLiAgU28ga2VlcCB0aGlzIEludGVsLW9ubHkgYW5kIGxlYXZlXG4mIzQzO1x0ICogQU1EJiMzOTtzIHNvZnR3YXJlIHJldHVybi10aHVuayBtaXRpZ2F0aW9uIChVTlJFVC9JQlBCKSBpbiBwbGFjZSBldmVuXG4mIzQzO1x0ICogd2hlbiBzcGVjdHJlX3YyPWlicnMgaXMgc2VsZWN0ZWQuXG4gXHQgKi9cbiBcdGlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkge1xuIFx0XHRzd2l0Y2ggKHNwZWN0cmVfdjJfZW5hYmxlZCkge1xuQEAgLTE2NzIsNiAmIzQzOzE2NzksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcmV0cG9saW5lX3NlcV9lbmFibGVkKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9XG4gI2RlZmluZSBTUEVDVFJFX1YyX0xGRU5DRV9NU0cgXCYjMzQ7V0FSTklORzogTEZFTkNFIG1pdGlnYXRpb24gaXMgbm90IHJlY29tbWVuZGVkIGZvciB0aGlzIENQVSwgZGF0YSBsZWFrcyBwb3NzaWJsZSFcXG5cJiMzNDtcbiAjZGVmaW5lIFNQRUNUUkVfVjJfRUlCUlNfRUJQRl9NU0cgXCYjMzQ7V0FSTklORzogVW5wcml2aWxlZ2VkIGVCUEYgaXMgZW5hYmxlZCB3aXRoIGVJQlJTIG9uLCBkYXRhIGxlYWtzIHBvc3NpYmxlIHZpYSBTcGVjdHJlIHYyIEJIQiBhdHRhY2tzIVxcblwmIzM0O1xuICNkZWZpbmUgU1BFQ1RSRV9WMl9FSUJSU19MRkVOQ0VfRUJQRl9TTVRfTVNHIFwmIzM0O1dBUk5JTkc6IFVucHJpdmlsZWdlZCBlQlBGIGlzIGVuYWJsZWQgd2l0aCBlSUJSUyYjNDM7TEZFTkNFIG1pdGlnYXRpb24gYW5kIFNNVCwgZGF0YSBsZWFrcyBwb3NzaWJsZSB2aWEgU3BlY3RyZSB2MiBCSEIgYXR0YWNrcyFcXG5cJiMzNDtcbiYjNDM7I2RlZmluZSBTUEVDVFJFX1YyX0VJQlJTX1NOUF9QRVJGX01TRyBcJiMzNDtXQVJOSU5HOiBlSUJSUyBtaXRpZ2F0aW9uIGVuYWJsZXMgQXV0b0lCUlMgb24gU0VWLVNOUCBlbmFibGVkIENQVSwgdGhpcyBtYXkgY2F1c2UgcGVyZm9ybWFuY2UgbG9zc1xcblwmIzM0O1xuICNkZWZpbmUgU1BFQ1RSRV9WMl9JQlJTX1BFUkZfTVNHIFwmIzM0O1dBUk5JTkc6IElCUlMgbWl0aWdhdGlvbiBzZWxlY3RlZCBvbiBFbmhhbmNlZCBJQlJTIENQVSwgdGhpcyBtYXkgY2F1c2UgdW5uZWNlc3NhcnkgcGVyZm9ybWFuY2UgbG9zc1xcblwmIzM0O1xuIFxuICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbkBAIC0yMTY1LDExICYjNDM7MjE3Myw2IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzcGVjdHJlX3YyX3NlbGVjdF9taXRpZ2F0aW9uKHZvaWQpXG4gXHRcdHNwZWN0cmVfdjJfY21kID0gU1BFQ1RSRV9WMl9DTURfQVVUTztcbiBcdH1cbiBcbi1cdGlmIChzcGVjdHJlX3YyX2NtZCA9PSBTUEVDVFJFX1YyX0NNRF9JQlJTIFx1MDAyNlx1MDAyNiBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCkge1xuLVx0XHRwcl9lcnIoXCYjMzQ7SUJSUyBzZWxlY3RlZCBidXQgbm90IEludGVsIENQVS4gU3dpdGNoaW5nIHRvIEFVVE8gc2VsZWN0XFxuXCYjMzQ7KTtcbi1cdFx0c3BlY3RyZV92Ml9jbWQgPSBTUEVDVFJFX1YyX0NNRF9BVVRPO1xuLVx0fVxuLVxuIFx0aWYgKHNwZWN0cmVfdjJfY21kID09IFNQRUNUUkVfVjJfQ01EX0lCUlMgXHUwMDI2XHUwMDI2ICFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSUJSUykpIHtcbiBcdFx0cHJfZXJyKFwmIzM0O0lCUlMgc2VsZWN0ZWQgYnV0IENQVSBkb2VzbiYjMzk7dCBoYXZlIElCUlMuIFN3aXRjaGluZyB0byBBVVRPIHNlbGVjdFxcblwmIzM0Oyk7XG4gXHRcdHNwZWN0cmVfdjJfY21kID0gU1BFQ1RSRV9WMl9DTURfQVVUTztcbkBAIC0yMTk0LDcgJiM0MzsyMTk3LDE1IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzcGVjdHJlX3YyX3NlbGVjdF9taXRpZ2F0aW9uKHZvaWQpXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGZhbGx0aHJvdWdoO1xuIFx0Y2FzZSBTUEVDVFJFX1YyX0NNRF9GT1JDRTpcbi1cdFx0aWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9JQlJTX0VOSEFOQ0VEKSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFByZWZlciByZXRwb2xpbmUgd2hlbiBTTlAgaXMgZW5hYmxlZCBiZWNhdXNlIEF1dG9JQlJTXG4mIzQzO1x0XHQgKiBkZWdyYWRlcyBob3N0IHVzZXJzcGFjZSBpbmRpcmVjdCBicmFuY2ggcGVyZm9ybWFuY2UuICBPbmx5XG4mIzQzO1x0XHQgKiBkbyBzbyBpZiByZXRwb2xpbmUgaXMgYWN0dWFsbHkgYnVpbHQgaW4sIG90aGVyd2lzZSBBdXRvSUJSU1xuJiM0MztcdFx0ICogaXMgYmV0dGVyIHRoYW4gbGVhdmluZyB0aGUgc3lzdGVtIHVubWl0aWdhdGVkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0lCUlNfRU5IQU5DRUQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICEoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NFVl9TTlApIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICAgSVNfRU5BQkxFRChDT05GSUdfTUlUSUdBVElPTl9SRVRQT0xJTkUpKSkge1xuIFx0XHRcdHNwZWN0cmVfdjJfZW5hYmxlZCA9IFNQRUNUUkVfVjJfRUlCUlM7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbkBAIC0yMjc3LDE1ICYjNDM7MjI4OCwyNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc3BlY3RyZV92Ml9hcHBseV9taXRpZ2F0aW9uKHZvaWQpXG4gXHRpZiAoc3BlY3RyZV92Ml9lbmFibGVkID09IFNQRUNUUkVfVjJfRUlCUlMgXHUwMDI2XHUwMDI2IHVucHJpdmlsZWdlZF9lYnBmX2VuYWJsZWQoKSlcbiBcdFx0cHJfZXJyKFNQRUNUUkVfVjJfRUlCUlNfRUJQRl9NU0cpO1xuIFxuLVx0aWYgKHNwZWN0cmVfdjJfaW5faWJyc19tb2RlKHNwZWN0cmVfdjJfZW5hYmxlZCkpIHtcbi1cdFx0aWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BVVRPSUJSUykpIHtcbi1cdFx0XHRtc3Jfc2V0X2JpdChNU1JfRUZFUiwgX0VGRVJfQVVUT0lCUlMpO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHg4Nl9zcGVjX2N0cmxfYmFzZSB8PSBTUEVDX0NUUkxfSUJSUztcbi1cdFx0XHR1cGRhdGVfc3BlY19jdHJsKHg4Nl9zcGVjX2N0cmxfYmFzZSk7XG4tXHRcdH1cbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9uIEF1dG9JQlJTLWNhcGFibGUgQ1BVcywgZUlCUlMgaXMgZW5hYmxlZCB0aHJvdWdoIEVGRVIuQVVUT0lCUlNcbiYjNDM7XHQgKiByYXRoZXIgdGhhbiBTUEVDX0NUUkwuSUJSUy4gIExlZ2FjeSBzcGVjdHJlX3YyPWlicnMga2VlcHMgdXNpbmdcbiYjNDM7XHQgKiBTUEVDX0NUUkwuSUJSUyBldmVuIHRoZXJlLCBhcyBpdCBuZWVkcyB0byBiZSB0b2dnbGVkIG9uIGtlcm5lbFxuJiM0MztcdCAqIGVudHJ5L2V4aXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNwZWN0cmVfdjJfaW5fZWlicnNfbW9kZShzcGVjdHJlX3YyX2VuYWJsZWQpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVVUT0lCUlMpKSB7XG4mIzQzO1x0XHRtc3Jfc2V0X2JpdChNU1JfRUZFUiwgX0VGRVJfQVVUT0lCUlMpO1xuJiM0MztcdH0gZWxzZSBpZiAoc3BlY3RyZV92Ml9pbl9pYnJzX21vZGUoc3BlY3RyZV92Ml9lbmFibGVkKSkge1xuJiM0MztcdFx0eDg2X3NwZWNfY3RybF9iYXNlIHw9IFNQRUNfQ1RSTF9JQlJTO1xuJiM0MztcdFx0dXBkYXRlX3NwZWNfY3RybCh4ODZfc3BlY19jdHJsX2Jhc2UpO1xuIFx0fVxuIFxuJiM0MztcdGlmIChzcGVjdHJlX3YyX2luX2VpYnJzX21vZGUoc3BlY3RyZV92Ml9lbmFibGVkKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NFVl9TTlApKVxuJiM0MztcdFx0cHJfd2FybihTUEVDVFJFX1YyX0VJQlJTX1NOUF9QRVJGX01TRyk7XG4mIzQzO1xuIFx0c3dpdGNoIChzcGVjdHJlX3YyX2VuYWJsZWQpIHtcbiBcdGNhc2UgU1BFQ1RSRV9WMl9OT05FOlxuIFx0XHRyZXR1cm47XG5AQCAtMzI4NCw2ICYjNDM7MzMwNCwxNyBAQCB2b2lkIF9faW5pdCBjcHVfc2VsZWN0X21pdGlnYXRpb25zKHZvaWQpXG4gXHRcdHg4Nl9zcGVjX2N0cmxfYmFzZSBcdTAwMjY9IH5TUEVDX0NUUkxfTUlUSUdBVElPTlNfTUFTSztcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIExpa2V3aXNlIGZvciBFRkVSLkFVVE9JQlJTOiBoZWFkXzY0LlMgcHJlc2VydmVzIHRoZSBpbmNvbWluZyBFRkVSXG4mIzQzO1x0ICogYml0cywgc28gYSBrZXhlYyBmcm9tIGEga2VybmVsIHRoYXQgcmFuIGluIEF1dG9JQlJTIG1vZGUgY2FycmllcyB0aGVcbiYjNDM7XHQgKiBiaXQgaW50byB0aGlzIG9uZS4gIENsZWFyIGl0IGFuZCBsZXQgdGhlIG1pdGlnYXRpb24gc2VsZWN0aW9uIGJlbG93XG4mIzQzO1x0ICogcmVkaXNjb3ZlciBpdC4gIFRoaXMgYWxzbyBydW5zIGJlZm9yZSBpbml0X3JlYWxfbW9kZSgpIHNuYXBzaG90c1xuJiM0MztcdCAqIEVGRVIgZm9yIHRoZSBBUCB0cmFtcG9saW5lLCBzbyBBUHMgaW5oZXJpdCB3aGF0ZXZlciB0aGlzIGtlcm5lbFxuJiM0MztcdCAqIHNldHRsZXMgb24gcmF0aGVyIHRoYW4gdGhlIHByZXZpb3VzIGtlcm5lbCYjMzk7cyBjaG9pY2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfQVVUT0lCUlMpKVxuJiM0MztcdFx0bXNyX2NsZWFyX2JpdChNU1JfRUZFUiwgX0VGRVJfQVVUT0lCUlMpO1xuJiM0MztcbiBcdHg4Nl9hcmNoX2NhcF9tc3IgPSB4ODZfcmVhZF9hcmNoX2NhcF9tc3IoKTtcbiBcbiBcdGNwdV9wcmludF9hdHRhY2tfdmVjdG9ycygpO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jXG5pbmRleCBjNzM1MjgyN2Y0OTFkLi5jNTY4ZDc0MjgyYTg0IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uY1xuQEAgLTE0OTYsMTMgJiM0MzsxNDk2LDkgQEAgc3RhdGljIHZvaWQgX19pbml0IGNwdV9zZXRfYnVnX2JpdHMoc3RydWN0IGNwdWluZm9feDg2ICpjKVxuIFx0LypcbiBcdCAqIEFNRCYjMzk7cyBBdXRvSUJSUyBpcyBlcXVpdmFsZW50IHRvIEludGVsJiMzOTtzIGVJQlJTIC0gdXNlIHRoZSBJbnRlbCBmZWF0dXJlXG4gXHQgKiBmbGFnIGFuZCBwcm90ZWN0IGZyb20gdmVuZG9yLXNwZWNpZmljIGJ1Z3MgdmlhIHRoZSB3aGl0ZWxpc3QuXG4tXHQgKlxuLVx0ICogRG9uJiMzOTt0IHVzZSBBdXRvSUJSUyB3aGVuIFNOUCBpcyBlbmFibGVkIGJlY2F1c2UgaXQgZGVncmFkZXMgaG9zdFxuLVx0ICogdXNlcnNwYWNlIGluZGlyZWN0IGJyYW5jaCBwZXJmb3JtYW5jZS5cbiBcdCAqL1xuIFx0aWYgKCh4ODZfYXJjaF9jYXBfbXNyIFx1MDAyNiBBUkNIX0NBUF9JQlJTX0FMTCkgfHxcbi1cdCAgICAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9BVVRPSUJSUykgXHUwMDI2XHUwMDI2XG4tXHQgICAgICFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFVl9TTlApKSkge1xuJiM0MztcdCAgICBjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0FVVE9JQlJTKSkge1xuIFx0XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX0lCUlNfRU5IQU5DRUQpO1xuIFx0XHRpZiAoIWNwdV9tYXRjaGVzKGNwdV92dWxuX3doaXRlbGlzdCwgTk9fRUlCUlNfUEJSU0IpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgISh4ODZfYXJjaF9jYXBfbXNyIFx1MDAyNiBBUkNIX0NBUF9QQlJTQl9OTykpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbmluZGV4IDU3MDU3MjNmMWY0MTIuLjUzY2M2ZDA0Mzg4MzYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5AQCAtNTA2LDcgJiM0Mzs1MDYsNyBAQCBzdGF0aWMgaW50IF9fc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuIFx0aWYgKCFzbnBfYWN0aXZlKVxuLVx0XHR2YWxpZF92bXNhX2ZlYXR1cmVzIFx1MDAyNj0gflNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDO1xuJiM0MztcdFx0dmFsaWRfdm1zYV9mZWF0dXJlcyBcdTAwMjY9IH5TVk1fU0VWX0ZFQVRfU05QX09OTFlfTUFTSztcbiBcbiBcdGlmIChkYXRhLVx1MDAzZXZtc2FfZmVhdHVyZXMgXHUwMDI2IH52YWxpZF92bXNhX2ZlYXR1cmVzKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0zMjU3LDggJiM0MzszMjU3LDIzIEBAIHZvaWQgX19pbml0IHNldl9oYXJkd2FyZV9zZXR1cCh2b2lkKVxuIFx0ICAgIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfTk9fTkVTVEVEX0RBVEFfQlApKVxuIFx0XHRzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgfD0gU1ZNX1NFVl9GRUFUX0RFQlVHX1NXQVA7XG4gXG4tXHRpZiAoc2V2X3NucF9lbmFibGVkIFx1MDAyNlx1MDAyNiB0c2Nfa2h6IFx1MDAyNlx1MDAyNiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NOUF9TRUNVUkVfVFNDKSlcbi1cdFx0c2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDO1xuJiM0MztcdGlmIChzZXZfc25wX2VuYWJsZWQpIHtcbiYjNDM7XHRcdHNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogVW5saWtlIFNlY3VyZSBUU0MgYW5kIElCUEItb24tRW50cnkgYmVsb3csIEJUQiBJc29sYXRpb24gaGFzXG4mIzQzO1x0XHQgKiBubyBob3N0IGVudW1lcmF0aW9uIGJpdCB0byBnYXRlIG9uOiB0aGUgQVBNIGRlZmluZXMgaXQgYXNcbiYjNDM7XHRcdCAqIGFyY2hpdGVjdHVyYWxseSBwcmVzZW50IG9uIGV2ZXJ5IFNFVi1TTlAtY2FwYWJsZSBwcm9jZXNzb3IuXG4mIzQzO1x0XHQgKiBJZiBTTlAgaXMgc3VwcG9ydGVkLCBCVEIgSXNvbGF0aW9uIGlzIGF2YWlsYWJsZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9CVEJfSVNPTEFUSU9OO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0c2Nfa2h6IFx1MDAyNlx1MDAyNiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NOUF9TRUNVUkVfVFNDKSlcbiYjNDM7XHRcdFx0c2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDO1xuJiM0MztcbiYjNDM7XHRcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NOUF9JQlBCX09OX0VOVFJZKSlcbiYjNDM7XHRcdFx0c2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9JQlBCX09OX0VOVFJZO1xuJiM0MztcdH1cbiB9XG4gXG4gdm9pZCBzZXZfaGFyZHdhcmVfdW5zZXR1cCh2b2lkKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmggYi90b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG5pbmRleCA2NTQ3YzBhZWU0NWI3Li42MzRjZDA5MzY2ZGE2IDEwMDY0NFxuLS0tIGEvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuQEAgLTQ2MCw2ICYjNDM7NDYwLDcgQEBcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0FMTE9XRURfU0VWX0ZFQVRVUkVTICgxOSozMiYjNDM7MjcpIC8qIEFsbG93ZWQgU0VWIEZlYXR1cmVzICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9TVlNNXHRcdCgxOSozMiYjNDM7MjgpIC8qIFwmIzM0O3N2c21cJiMzNDsgU1ZTTSBwcmVzZW50ICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9IVl9JTlVTRV9XUl9BTExPV0VEXHQoMTkqMzImIzQzOzMwKSAvKiBBbGxvdyBXcml0ZSB0byBpbi11c2UgaHlwZXJ2aXNvci1vd25lZCBwYWdlcyAqL1xuJiM0MzsjZGVmaW5lIFg4Nl9GRUFUVVJFX1NOUF9JQlBCX09OX0VOVFJZXHQoMTkqMzImIzQzOzMxKSAvKiBTRVYtU05QIElCUEIgb24gVk0gRW50cnkgKi9cbiBcbiAvKiBBTUQtZGVmaW5lZCBFeHRlbmRlZCBGZWF0dXJlIDIgRUFYLCBDUFVJRCBsZXZlbCAweDgwMDAwMDIxIChFQVgpLCB3b3JkIDIwICovXG4gI2RlZmluZSBYODZfRkVBVFVSRV9OT19ORVNURURfREFUQV9CUFx0KDIwKjMyJiM0MzsgMCkgLyogTm8gTmVzdGVkIERhdGEgQnJlYWtwb2ludHMgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuY1xuaW5kZXggODdiZmY0ZmJiN2VkNS4uM2Y1OTJlMjQ1YTY2ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmNcbkBAIC0xMywxNyAmIzQzOzEzLDI1IEBAXG4gI2luY2x1ZGUgXCYjMzQ7c3ZtX3V0aWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2tzZWxmdGVzdC5oXCYjMzQ7XG4gXG4tI2RlZmluZSBTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUCAzMnVcbiYjNDM7I2RlZmluZSBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRVx0XHRCSVRfVUxMKDApXG4mIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX0RFQlVHX1NXQVBcdFx0QklUX1VMTCg1KVxuJiM0MzsjZGVmaW5lIFNWTV9TRVZfRkVBVF9CVEJfSVNPTEFUSU9OXHRCSVRfVUxMKDcpXG4mIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0NcdFx0QklUX1VMTCg5KVxuJiM0MzsjZGVmaW5lIFNWTV9TRVZfRkVBVF9JQlBCX09OX0VOVFJZXHRCSVRfVUxMKDIxKVxuJiM0MztcbiYjNDM7LyogRmVhdHVyZXMgdmFsaWQgb25seSBmb3IgU05QIGd1ZXN0cywgcmVqZWN0ZWQgZm9yIFNFVi1FUyBhbmQgYmVsb3cuICovXG4mIzQzOyNkZWZpbmUgU05QX09OTFlfRkVBVFVSRVNcdFx0KFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBTVk1fU0VWX0ZFQVRfQlRCX0lTT0xBVElPTiB8IFxcXG4mIzQzO1x0XHRcdFx0XHQgU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0MgfCBcXFxuJiM0MztcdFx0XHRcdFx0IFNWTV9TRVZfRkVBVF9JQlBCX09OX0VOVFJZKVxuIFxuIC8qXG4gICogU29tZSBmZWF0dXJlcyBtYXkgaGF2ZSBoaWRkZW4gZGVwZW5kZW5jaWVzLCBvciBtYXkgb25seSB3b3JrXG4gICogZm9yIGNlcnRhaW4gVk0gdHlwZXMuICBFcnIgb24gdGhlIHNpZGUgb2Ygc2FmZXR5IGFuZCBkb24mIzM5O3RcbiAgKiBleHBlY3QgdGhhdCBhbGwgc3VwcG9ydGVkIGZlYXR1cmVzIGNhbiBiZSBwYXNzZWQgb25lIGJ5IG9uZVxuICAqIHRvIEtWTV9TRVZfSU5JVDIuXG4tICpcbi0gKiAoV2VsbCwgcmlnaHQgbm93IHRoZXJlJiMzOTtzIG9ubHkgb25lLi4uKVxuICAqL1xuLSNkZWZpbmUgS05PV05fRkVBVFVSRVMgU1ZNX1NFVl9GRUFUX0RFQlVHX1NXQVBcbiYjNDM7I2RlZmluZSBLTk9XTl9GRUFUVVJFU1x0XHQoU1ZNX1NFVl9GRUFUX0RFQlVHX1NXQVAgfCBTTlBfT05MWV9GRUFUVVJFUylcbiBcbiBpbnQga3ZtX2ZkO1xuIHU2NCBzdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcztcbkBAIC0xMDgsNyAmIzQzOzExNiw3IEBAIHZvaWQgdGVzdF9mZWF0dXJlcyh1MzIgdm1fdHlwZSwgdTY0IHN1cHBvcnRlZF9mZWF0dXJlcylcbiBcdFx0aWYgKCEoc3VwcG9ydGVkX2ZlYXR1cmVzIFx1MDAyNiBCSVRfVUxMKGkpKSlcbiBcdFx0XHR0ZXN0X2luaXQyX2ludmFsaWQodm1fdHlwZSxcbiBcdFx0XHRcdFx1MDAyNihzdHJ1Y3Qga3ZtX3Nldl9pbml0KXsgLnZtc2FfZmVhdHVyZXMgPSBCSVRfVUxMKGkpIH0sXG4tXHRcdFx0XHRcJiMzNDt1bmtub3duIGZlYXR1cmVcJiMzNDspO1xuJiM0MztcdFx0XHRcdFwmIzM0O3Vua25vd24gb3IgdW5zdXBwb3J0ZWQgZmVhdHVyZSBmb3IgVk0gdHlwZVwmIzM0Oyk7XG4gXHRcdGVsc2UgaWYgKEtOT1dOX0ZFQVRVUkVTIFx1MDAyNiBCSVRfVUxMKGkpKVxuIFx0XHRcdHRlc3RfaW5pdDIodm1fdHlwZSxcbiBcdFx0XHRcdFx1MDAyNihzdHJ1Y3Qga3ZtX3Nldl9pbml0KXsgLnZtc2FfZmVhdHVyZXMgPSBCSVRfVUxMKGkpIH0pO1xuQEAgLTE1Nyw3ICYjNDM7MTY1LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiBcbiBcdHRlc3RfZmVhdHVyZXMoS1ZNX1g4Nl9TRVZfVk0sIDApO1xuIFx0aWYgKGhhdmVfc2V2X2VzKVxuLVx0XHR0ZXN0X2ZlYXR1cmVzKEtWTV9YODZfU0VWX0VTX1ZNLCBzdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyk7XG4mIzQzO1x0XHR0ZXN0X2ZlYXR1cmVzKEtWTV9YODZfU0VWX0VTX1ZNLCBzdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyBcdTAwMjYgflNOUF9PTkxZX0ZFQVRVUkVTKTtcbiBcdGlmIChoYXZlX3NucClcbiBcdFx0dGVzdF9mZWF0dXJlcyhLVk1fWDg2X1NOUF9WTSwgc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fQU1EX1NFViYjMzQ7LAogICAgJiMzNDtDUllQVE9fREVWX0NDUF9ERCYjMzQ7LAogICAgJiMzNDtDUllQVE9fREVWX1NQX1BTUCYjMzQ7LAogICAgJiMzNDtBTURfSU9NTVUmIzM0OywKICAgICYjMzQ7SU9NTVVfU1VQUE9SVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Nldl9tZW1fZW5jX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIG9mIGB2bXNhX2ZlYXR1cmVzYCBkdXJpbmcgS1ZNIFNFViBndWVzdCBpbml0aWFsaXphdGlvbiAoYEtWTV9TRVZfSU5JVDJgIGlvY3RsKSBhbmQgYWRkcyBuZXcgU0VWLVNOUCBmZWF0dXJlcyB0byB0aGUgc3VwcG9ydGVkIGxpc3QuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgbmV3IGZlYXR1cmUgdmFsaWRhdGlvbiBsb2dpYyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYnVncy4gVGhlIENQVSBidWcgbWl0aWdhdGlvbiBjaGFuZ2VzIGFyZSBib290LXRpbWUgbG9naWMgYW5kIG5vdCBkaXJlY3RseSBmdXp6YWJsZSBmcm9tIHVzZXJzcGFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDliMDBmM2Y2NjM4NjU2ZjE1MGY4ZDk4YWY2ZTRjOWUwNDI2ODcwOWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAyMjo1NzoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IDE1ZmQ5ZWM1ZWNhY2IuLmI5YTdkZGVmNGNiYWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvS2NvbmZpZwpAQCAtMjQ5NiwxMiAmIzQzOzI0OTYsMTMgQEAgY29uZmlnIE1JVElHQVRJT05fSUJQQl9FTlRSWQogCiBjb25maWcgTUlUSUdBVElPTl9JQlJTX0VOVFJZCiAJYm9vbCAmIzM0O0VuYWJsZSBJQlJTIG9uIGtlcm5lbCBlbnRyeSYjMzQ7Ci0JZGVwZW5kcyBvbiBDUFVfU1VQX0lOVEVMICZhbXA7JmFtcDsgWDg2XzY0CiYjNDM7CWRlcGVuZHMgb24gWDg2XzY0CiAJZGVmYXVsdCB5CiAJaGVscAogCSAgQ29tcGlsZSB0aGUga2VybmVsIHdpdGggc3VwcG9ydCBmb3IgdGhlIHNwZWN0cmVfdjI9aWJycyBtaXRpZ2F0aW9uLgotCSAgVGhpcyBtaXRpZ2F0ZXMgYm90aCBzcGVjdHJlX3YyIGFuZCByZXRibGVlZCBhdCBncmVhdCBjb3N0IHRvCi0JICBwZXJmb3JtYW5jZS4KJiM0MzsJICBUaGlzIG1pdGlnYXRlcyBzcGVjdHJlX3YyIGF0IGdyZWF0IGNvc3QgdG8gcGVyZm9ybWFuY2UuICBPbiBJbnRlbCwKJiM0MzsJICBpdCBhbHNvIG1pdGlnYXRlcyByZXRibGVlZC4gIE9uIEFNRC9IeWdvbiwgcmV0YmxlZWQgbWl0aWdhdGlvbgomIzQzOwkgIHJlcXVpcmVzIE1JVElHQVRJT05fVU5SRVRfRU5UUlkgb3IgTUlUSUdBVElPTl9JQlBCX0VOVFJZLgogCiBjb25maWcgTUlUSUdBVElPTl9TUlNPCiAJYm9vbCAmIzM0O01pdGlnYXRlIHNwZWN1bGF0aXZlIFJBUyBvdmVyZmxvdyBvbiBBTUQmIzM0OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgKaW5kZXggZjcwZWU3NGI1ZjkyMS4uM2FhZDJiNTNmNTliZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oCkBAIC00NzIsNiAmIzQzOzQ3Miw3IEBACiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0FMTE9XRURfU0VWX0ZFQVRVUkVTICgxOSozMiYjNDM7MjcpIC8qIEFsbG93ZWQgU0VWIEZlYXR1cmVzICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1NWU00JCSgxOSozMiYjNDM7MjgpIC8qICYjMzQ7c3ZzbSYjMzQ7IFNWU00gcHJlc2VudCAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9IVl9JTlVTRV9XUl9BTExPV0VECSgxOSozMiYjNDM7MzApIC8qIEFsbG93IFdyaXRlIHRvIGluLXVzZSBoeXBlcnZpc29yLW93bmVkIHBhZ2VzICovCiYjNDM7I2RlZmluZSBYODZfRkVBVFVSRV9TTlBfSUJQQl9PTl9FTlRSWQkoMTkqMzImIzQzOzMxKSAvKiBTRVYtU05QIElCUEIgb24gVk0gRW50cnkgKi8KIAogLyogQU1ELWRlZmluZWQgRXh0ZW5kZWQgRmVhdHVyZSAyIEVBWCwgQ1BVSUQgbGV2ZWwgMHg4MDAwMDAyMSAoRUFYKSwgd29yZCAyMCAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9OT19ORVNURURfREFUQV9CUAkoMjAqMzImIzQzOyAwKSAvKiBObyBOZXN0ZWQgRGF0YSBCcmVha3BvaW50cyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaAppbmRleCBhYTYzNDMxYmE5MmMzLi4wZGEyMjM0YjcxYzY5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaApAQCAtMzA1LDExICYjNDM7MzA1LDE4IEBAIHN0YXRpY19hc3NlcnQoKEFWSUNfTUFYX1BIWVNJQ0FMX0lEICZhbXA7IEFWSUNfUEhZU0lDQUxfTUFYX0lOREVYX01BU0spID09IEFWSUNfTUFYXwogc3RhdGljX2Fzc2VydCgoWDJBVklDX01BWF9QSFlTSUNBTF9JRCAmYW1wOyBBVklDX1BIWVNJQ0FMX01BWF9JTkRFWF9NQVNLKSA9PSBYMkFWSUNfTUFYX1BIWVNJQ0FMX0lEKTsKIHN0YXRpY19hc3NlcnQoKFgyQVZJQ180S19NQVhfUEhZU0lDQUxfSUQgJmFtcDsgQVZJQ19QSFlTSUNBTF9NQVhfSU5ERVhfTUFTSykgPT0gWDJBVklDXzRLX01BWF9QSFlTSUNBTF9JRCk7CiAKLSNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkUJCQkJQklUKDApCi0jZGVmaW5lIFNWTV9TRVZfRkVBVF9SRVNUUklDVEVEX0lOSkVDVElPTgkJQklUKDMpCi0jZGVmaW5lIFNWTV9TRVZfRkVBVF9BTFRFUk5BVEVfSU5KRUNUSU9OCQlCSVQoNCkKLSNkZWZpbmUgU1ZNX1NFVl9GRUFUX0RFQlVHX1NXQVAJCQkJQklUKDUpCi0jZGVmaW5lIFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDCQkJCUJJVCg5KQomIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkUJCQkJQklUX1VMTCgwKQomIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1JFU1RSSUNURURfSU5KRUNUSU9OCQlCSVRfVUxMKDMpCiYjNDM7I2RlZmluZSBTVk1fU0VWX0ZFQVRfQUxURVJOQVRFX0lOSkVDVElPTgkJQklUX1VMTCg0KQomIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX0RFQlVHX1NXQVAJCQkJQklUX1VMTCg1KQomIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX0JUQl9JU09MQVRJT04JCQlCSVRfVUxMKDcpCiYjNDM7I2RlZmluZSBTVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQwkJCQlCSVRfVUxMKDkpCiYjNDM7I2RlZmluZSBTVk1fU0VWX0ZFQVRfSUJQQl9PTl9FTlRSWQkJCUJJVF9VTEwoMjEpCiYjNDM7CiYjNDM7I2RlZmluZSBTVk1fU0VWX0ZFQVRfU05QX09OTFlfTUFTSwkoU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkUgfCBcCiYjNDM7CQkJCQkgU1ZNX1NFVl9GRUFUX0JUQl9JU09MQVRJT04gfCBcCiYjNDM7CQkJCQkgU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0MgfCBcCiYjNDM7CQkJCQkgU1ZNX1NFVl9GRUFUX0lCUEJfT05fRU5UUlkpCiAKICNkZWZpbmUgVk1DQl9BTExPV0VEX1NFVl9GRUFUVVJFU19WQUxJRAkJCUJJVF9VTEwoNjMpCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYnVncy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmMKaW5kZXggNTZlYWM1NjExYzMxOC4uMDg3ODBlMGQzN2VjNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmMKQEAgLTEzMDUsNyAmIzQzOzEzMDUsMTQgQEAgc3RhdGljIHZvaWQgX19pbml0IHJldGJsZWVkX3VwZGF0ZV9taXRpZ2F0aW9uKHZvaWQpCiAKIAkvKgogCSAqIExldCBJQlJTIHRydW1wIGFsbCBvbiBJbnRlbCB3aXRob3V0IGFmZmVjdGluZyB0aGUgZWZmZWN0cyBvZiB0aGUKLQkgKiByZXRibGVlZD0gY21kbGluZSBvcHRpb24gZXhjZXB0IGZvciBjYWxsIGRlcHRoIGJhc2VkIHN0dWZmaW5nCiYjNDM7CSAqIHJldGJsZWVkPSBjbWRsaW5lIG9wdGlvbiBleGNlcHQgZm9yIGNhbGwgZGVwdGggYmFzZWQgc3R1ZmZpbmcuCiYjNDM7CSAqCiYjNDM7CSAqIE9uIEFNRC9IeWdvbiwgbGVnYWN5IFNQRUNfQ1RSTC5JQlJTIHRvZ2dsaW5nIGRvZXMgbm90IG1pdGlnYXRlIHRoZQomIzQzOwkgKiBCcmFuY2ggVHlwZSBDb25mdXNpb24gUkVUQmxlZWQgdmFyaWFudDogUkVUIHByZWRpY3Rpb24gY29tZXMgZnJvbQomIzQzOwkgKiB0aGUgUmV0dXJuIEFkZHJlc3MgUHJlZGljdG9yLCBub3QgdGhlIHJlc3RyaWN0ZWQgaW5kaXJlY3QgYnJhbmNoCiYjNDM7CSAqIHByZWRpY3RvcnMgdGhhdCBJQlJTIGNvbnRyb2xzLiAgU28ga2VlcCB0aGlzIEludGVsLW9ubHkgYW5kIGxlYXZlCiYjNDM7CSAqIEFNRCYjMzk7cyBzb2Z0d2FyZSByZXR1cm4tdGh1bmsgbWl0aWdhdGlvbiAoVU5SRVQvSUJQQikgaW4gcGxhY2UgZXZlbgomIzQzOwkgKiB3aGVuIHNwZWN0cmVfdjI9aWJycyBpcyBzZWxlY3RlZC4KIAkgKi8KIAlpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwpIHsKIAkJc3dpdGNoIChzcGVjdHJlX3YyX2VuYWJsZWQpIHsKQEAgLTE2NzIsNiAmIzQzOzE2NzksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcmV0cG9saW5lX3NlcV9lbmFibGVkKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZGVmaW5lIFNQRUNUUkVfVjJfTEZFTkNFX01TRyAmIzM0O1dBUk5JTkc6IExGRU5DRSBtaXRpZ2F0aW9uIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgdGhpcyBDUFUsIGRhdGEgbGVha3MgcG9zc2libGUhXG4mIzM0OwogI2RlZmluZSBTUEVDVFJFX1YyX0VJQlJTX0VCUEZfTVNHICYjMzQ7V0FSTklORzogVW5wcml2aWxlZ2VkIGVCUEYgaXMgZW5hYmxlZCB3aXRoIGVJQlJTIG9uLCBkYXRhIGxlYWtzIHBvc3NpYmxlIHZpYSBTcGVjdHJlIHYyIEJIQiBhdHRhY2tzIVxuJiMzNDsKICNkZWZpbmUgU1BFQ1RSRV9WMl9FSUJSU19MRkVOQ0VfRUJQRl9TTVRfTVNHICYjMzQ7V0FSTklORzogVW5wcml2aWxlZ2VkIGVCUEYgaXMgZW5hYmxlZCB3aXRoIGVJQlJTJiM0MztMRkVOQ0UgbWl0aWdhdGlvbiBhbmQgU01ULCBkYXRhIGxlYWtzIHBvc3NpYmxlIHZpYSBTcGVjdHJlIHYyIEJIQiBhdHRhY2tzIVxuJiMzNDsKJiM0MzsjZGVmaW5lIFNQRUNUUkVfVjJfRUlCUlNfU05QX1BFUkZfTVNHICYjMzQ7V0FSTklORzogZUlCUlMgbWl0aWdhdGlvbiBlbmFibGVzIEF1dG9JQlJTIG9uIFNFVi1TTlAgZW5hYmxlZCBDUFUsIHRoaXMgbWF5IGNhdXNlIHBlcmZvcm1hbmNlIGxvc3NcbiYjMzQ7CiAjZGVmaW5lIFNQRUNUUkVfVjJfSUJSU19QRVJGX01TRyAmIzM0O1dBUk5JTkc6IElCUlMgbWl0aWdhdGlvbiBzZWxlY3RlZCBvbiBFbmhhbmNlZCBJQlJTIENQVSwgdGhpcyBtYXkgY2F1c2UgdW5uZWNlc3NhcnkgcGVyZm9ybWFuY2UgbG9zc1xuJiMzNDsKIAogI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTApAQCAtMjE2NSwxMSAmIzQzOzIxNzMsNiBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc3BlY3RyZV92Ml9zZWxlY3RfbWl0aWdhdGlvbih2b2lkKQogCQlzcGVjdHJlX3YyX2NtZCA9IFNQRUNUUkVfVjJfQ01EX0FVVE87CiAJfQogCi0JaWYgKHNwZWN0cmVfdjJfY21kID09IFNQRUNUUkVfVjJfQ01EX0lCUlMgJmFtcDsmYW1wOyBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCkgewotCQlwcl9lcnIoJiMzNDtJQlJTIHNlbGVjdGVkIGJ1dCBub3QgSW50ZWwgQ1BVLiBTd2l0Y2hpbmcgdG8gQVVUTyBzZWxlY3RcbiYjMzQ7KTsKLQkJc3BlY3RyZV92Ml9jbWQgPSBTUEVDVFJFX1YyX0NNRF9BVVRPOwotCX0KLQogCWlmIChzcGVjdHJlX3YyX2NtZCA9PSBTUEVDVFJFX1YyX0NNRF9JQlJTICZhbXA7JmFtcDsgIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9JQlJTKSkgewogCQlwcl9lcnIoJiMzNDtJQlJTIHNlbGVjdGVkIGJ1dCBDUFUgZG9lc24mIzM5O3QgaGF2ZSBJQlJTLiBTd2l0Y2hpbmcgdG8gQVVUTyBzZWxlY3RcbiYjMzQ7KTsKIAkJc3BlY3RyZV92Ml9jbWQgPSBTUEVDVFJFX1YyX0NNRF9BVVRPOwpAQCAtMjE5NCw3ICYjNDM7MjE5NywxNSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc3BlY3RyZV92Ml9zZWxlY3RfbWl0aWdhdGlvbih2b2lkKQogCQkJYnJlYWs7CiAJCWZhbGx0aHJvdWdoOwogCWNhc2UgU1BFQ1RSRV9WMl9DTURfRk9SQ0U6Ci0JCWlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSUJSU19FTkhBTkNFRCkpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBQcmVmZXIgcmV0cG9saW5lIHdoZW4gU05QIGlzIGVuYWJsZWQgYmVjYXVzZSBBdXRvSUJSUwomIzQzOwkJICogZGVncmFkZXMgaG9zdCB1c2Vyc3BhY2UgaW5kaXJlY3QgYnJhbmNoIHBlcmZvcm1hbmNlLiAgT25seQomIzQzOwkJICogZG8gc28gaWYgcmV0cG9saW5lIGlzIGFjdHVhbGx5IGJ1aWx0IGluLCBvdGhlcndpc2UgQXV0b0lCUlMKJiM0MzsJCSAqIGlzIGJldHRlciB0aGFuIGxlYXZpbmcgdGhlIHN5c3RlbSB1bm1pdGlnYXRlZC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9JQlJTX0VOSEFOQ0VEKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIShib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU0VWX1NOUCkgJmFtcDsmYW1wOwomIzQzOwkJICAgICAgSVNfRU5BQkxFRChDT05GSUdfTUlUSUdBVElPTl9SRVRQT0xJTkUpKSkgewogCQkJc3BlY3RyZV92Ml9lbmFibGVkID0gU1BFQ1RSRV9WMl9FSUJSUzsKIAkJCWJyZWFrOwogCQl9CkBAIC0yMjc3LDE1ICYjNDM7MjI4OCwyNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc3BlY3RyZV92Ml9hcHBseV9taXRpZ2F0aW9uKHZvaWQpCiAJaWYgKHNwZWN0cmVfdjJfZW5hYmxlZCA9PSBTUEVDVFJFX1YyX0VJQlJTICZhbXA7JmFtcDsgdW5wcml2aWxlZ2VkX2VicGZfZW5hYmxlZCgpKQogCQlwcl9lcnIoU1BFQ1RSRV9WMl9FSUJSU19FQlBGX01TRyk7CiAKLQlpZiAoc3BlY3RyZV92Ml9pbl9pYnJzX21vZGUoc3BlY3RyZV92Ml9lbmFibGVkKSkgewotCQlpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FVVE9JQlJTKSkgewotCQkJbXNyX3NldF9iaXQoTVNSX0VGRVIsIF9FRkVSX0FVVE9JQlJTKTsKLQkJfSBlbHNlIHsKLQkJCXg4Nl9zcGVjX2N0cmxfYmFzZSB8PSBTUEVDX0NUUkxfSUJSUzsKLQkJCXVwZGF0ZV9zcGVjX2N0cmwoeDg2X3NwZWNfY3RybF9iYXNlKTsKLQkJfQomIzQzOwkvKgomIzQzOwkgKiBPbiBBdXRvSUJSUy1jYXBhYmxlIENQVXMsIGVJQlJTIGlzIGVuYWJsZWQgdGhyb3VnaCBFRkVSLkFVVE9JQlJTCiYjNDM7CSAqIHJhdGhlciB0aGFuIFNQRUNfQ1RSTC5JQlJTLiAgTGVnYWN5IHNwZWN0cmVfdjI9aWJycyBrZWVwcyB1c2luZwomIzQzOwkgKiBTUEVDX0NUUkwuSUJSUyBldmVuIHRoZXJlLCBhcyBpdCBuZWVkcyB0byBiZSB0b2dnbGVkIG9uIGtlcm5lbAomIzQzOwkgKiBlbnRyeS9leGl0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHNwZWN0cmVfdjJfaW5fZWlicnNfbW9kZShzcGVjdHJlX3YyX2VuYWJsZWQpICZhbXA7JmFtcDsKJiM0MzsJICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BVVRPSUJSUykpIHsKJiM0MzsJCW1zcl9zZXRfYml0KE1TUl9FRkVSLCBfRUZFUl9BVVRPSUJSUyk7CiYjNDM7CX0gZWxzZSBpZiAoc3BlY3RyZV92Ml9pbl9pYnJzX21vZGUoc3BlY3RyZV92Ml9lbmFibGVkKSkgewomIzQzOwkJeDg2X3NwZWNfY3RybF9iYXNlIHw9IFNQRUNfQ1RSTF9JQlJTOwomIzQzOwkJdXBkYXRlX3NwZWNfY3RybCh4ODZfc3BlY19jdHJsX2Jhc2UpOwogCX0KIAomIzQzOwlpZiAoc3BlY3RyZV92Ml9pbl9laWJyc19tb2RlKHNwZWN0cmVfdjJfZW5hYmxlZCkgJmFtcDsmYW1wOwomIzQzOwkgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NFVl9TTlApKQomIzQzOwkJcHJfd2FybihTUEVDVFJFX1YyX0VJQlJTX1NOUF9QRVJGX01TRyk7CiYjNDM7CiAJc3dpdGNoIChzcGVjdHJlX3YyX2VuYWJsZWQpIHsKIAljYXNlIFNQRUNUUkVfVjJfTk9ORToKIAkJcmV0dXJuOwpAQCAtMzI4NCw2ICYjNDM7MzMwNCwxNyBAQCB2b2lkIF9faW5pdCBjcHVfc2VsZWN0X21pdGlnYXRpb25zKHZvaWQpCiAJCXg4Nl9zcGVjX2N0cmxfYmFzZSAmYW1wOz0gflNQRUNfQ1RSTF9NSVRJR0FUSU9OU19NQVNLOwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBMaWtld2lzZSBmb3IgRUZFUi5BVVRPSUJSUzogaGVhZF82NC5TIHByZXNlcnZlcyB0aGUgaW5jb21pbmcgRUZFUgomIzQzOwkgKiBiaXRzLCBzbyBhIGtleGVjIGZyb20gYSBrZXJuZWwgdGhhdCByYW4gaW4gQXV0b0lCUlMgbW9kZSBjYXJyaWVzIHRoZQomIzQzOwkgKiBiaXQgaW50byB0aGlzIG9uZS4gIENsZWFyIGl0IGFuZCBsZXQgdGhlIG1pdGlnYXRpb24gc2VsZWN0aW9uIGJlbG93CiYjNDM7CSAqIHJlZGlzY292ZXIgaXQuICBUaGlzIGFsc28gcnVucyBiZWZvcmUgaW5pdF9yZWFsX21vZGUoKSBzbmFwc2hvdHMKJiM0MzsJICogRUZFUiBmb3IgdGhlIEFQIHRyYW1wb2xpbmUsIHNvIEFQcyBpbmhlcml0IHdoYXRldmVyIHRoaXMga2VybmVsCiYjNDM7CSAqIHNldHRsZXMgb24gcmF0aGVyIHRoYW4gdGhlIHByZXZpb3VzIGtlcm5lbCYjMzk7cyBjaG9pY2UuCiYjNDM7CSAqLwomIzQzOwlpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9BVVRPSUJSUykpCiYjNDM7CQltc3JfY2xlYXJfYml0KE1TUl9FRkVSLCBfRUZFUl9BVVRPSUJSUyk7CiYjNDM7CiAJeDg2X2FyY2hfY2FwX21zciA9IHg4Nl9yZWFkX2FyY2hfY2FwX21zcigpOwogCiAJY3B1X3ByaW50X2F0dGFja192ZWN0b3JzKCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwppbmRleCBjNzM1MjgyN2Y0OTFkLi5jNTY4ZDc0MjgyYTg0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKQEAgLTE0OTYsMTMgJiM0MzsxNDk2LDkgQEAgc3RhdGljIHZvaWQgX19pbml0IGNwdV9zZXRfYnVnX2JpdHMoc3RydWN0IGNwdWluZm9feDg2ICpjKQogCS8qCiAJICogQU1EJiMzOTtzIEF1dG9JQlJTIGlzIGVxdWl2YWxlbnQgdG8gSW50ZWwmIzM5O3MgZUlCUlMgLSB1c2UgdGhlIEludGVsIGZlYXR1cmUKIAkgKiBmbGFnIGFuZCBwcm90ZWN0IGZyb20gdmVuZG9yLXNwZWNpZmljIGJ1Z3MgdmlhIHRoZSB3aGl0ZWxpc3QuCi0JICoKLQkgKiBEb24mIzM5O3QgdXNlIEF1dG9JQlJTIHdoZW4gU05QIGlzIGVuYWJsZWQgYmVjYXVzZSBpdCBkZWdyYWRlcyBob3N0Ci0JICogdXNlcnNwYWNlIGluZGlyZWN0IGJyYW5jaCBwZXJmb3JtYW5jZS4KIAkgKi8KIAlpZiAoKHg4Nl9hcmNoX2NhcF9tc3IgJmFtcDsgQVJDSF9DQVBfSUJSU19BTEwpIHx8Ci0JICAgIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0FVVE9JQlJTKSAmYW1wOyZhbXA7Ci0JICAgICAhY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TRVZfU05QKSkpIHsKJiM0MzsJICAgIGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfQVVUT0lCUlMpKSB7CiAJCXNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfSUJSU19FTkhBTkNFRCk7CiAJCWlmICghY3B1X21hdGNoZXMoY3B1X3Z1bG5fd2hpdGVsaXN0LCBOT19FSUJSU19QQlJTQikgJmFtcDsmYW1wOwogCQkgICAgISh4ODZfYXJjaF9jYXBfbXNyICZhbXA7IEFSQ0hfQ0FQX1BCUlNCX05PKSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCmluZGV4IDU3MDU3MjNmMWY0MTIuLjUzY2M2ZDA0Mzg4MzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwpAQCAtNTA2LDcgJiM0Mzs1MDYsNyBAQCBzdGF0aWMgaW50IF9fc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFzbnBfYWN0aXZlKQotCQl2YWxpZF92bXNhX2ZlYXR1cmVzICZhbXA7PSB+U1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0M7CiYjNDM7CQl2YWxpZF92bXNhX2ZlYXR1cmVzICZhbXA7PSB+U1ZNX1NFVl9GRUFUX1NOUF9PTkxZX01BU0s7CiAKIAlpZiAoZGF0YS0mZ3Q7dm1zYV9mZWF0dXJlcyAmYW1wOyB+dmFsaWRfdm1zYV9mZWF0dXJlcykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMjU3LDggJiM0MzszMjU3LDIzIEBAIHZvaWQgX19pbml0IHNldl9oYXJkd2FyZV9zZXR1cCh2b2lkKQogCSAgICBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX05PX05FU1RFRF9EQVRBX0JQKSkKIAkJc2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9ERUJVR19TV0FQOwogCi0JaWYgKHNldl9zbnBfZW5hYmxlZCAmYW1wOyZhbXA7IHRzY19raHogJmFtcDsmYW1wOyBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NOUF9TRUNVUkVfVFNDKSkKLQkJc2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDOwomIzQzOwlpZiAoc2V2X3NucF9lbmFibGVkKSB7CiYjNDM7CQlzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgfD0gU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkU7CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogVW5saWtlIFNlY3VyZSBUU0MgYW5kIElCUEItb24tRW50cnkgYmVsb3csIEJUQiBJc29sYXRpb24gaGFzCiYjNDM7CQkgKiBubyBob3N0IGVudW1lcmF0aW9uIGJpdCB0byBnYXRlIG9uOiB0aGUgQVBNIGRlZmluZXMgaXQgYXMKJiM0MzsJCSAqIGFyY2hpdGVjdHVyYWxseSBwcmVzZW50IG9uIGV2ZXJ5IFNFVi1TTlAtY2FwYWJsZSBwcm9jZXNzb3IuCiYjNDM7CQkgKiBJZiBTTlAgaXMgc3VwcG9ydGVkLCBCVEIgSXNvbGF0aW9uIGlzIGF2YWlsYWJsZS4KJiM0MzsJCSAqLwomIzQzOwkJc2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9CVEJfSVNPTEFUSU9OOwomIzQzOwomIzQzOwkJaWYgKHRzY19raHogJmFtcDsmYW1wOyBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NOUF9TRUNVUkVfVFNDKSkKJiM0MzsJCQlzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgfD0gU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0M7CiYjNDM7CiYjNDM7CQlpZiAoY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TTlBfSUJQQl9PTl9FTlRSWSkpCiYjNDM7CQkJc2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9JQlBCX09OX0VOVFJZOwomIzQzOwl9CiB9CiAKIHZvaWQgc2V2X2hhcmR3YXJlX3Vuc2V0dXAodm9pZCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmggYi90b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oCmluZGV4IDY1NDdjMGFlZTQ1YjcuLjYzNGNkMDkzNjZkYTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaApAQCAtNDYwLDYgJiM0Mzs0NjAsNyBAQAogI2RlZmluZSBYODZfRkVBVFVSRV9BTExPV0VEX1NFVl9GRUFUVVJFUyAoMTkqMzImIzQzOzI3KSAvKiBBbGxvd2VkIFNFViBGZWF0dXJlcyAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9TVlNNCQkoMTkqMzImIzQzOzI4KSAvKiAmIzM0O3N2c20mIzM0OyBTVlNNIHByZXNlbnQgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfSFZfSU5VU0VfV1JfQUxMT1dFRAkoMTkqMzImIzQzOzMwKSAvKiBBbGxvdyBXcml0ZSB0byBpbi11c2UgaHlwZXJ2aXNvci1vd25lZCBwYWdlcyAqLwomIzQzOyNkZWZpbmUgWDg2X0ZFQVRVUkVfU05QX0lCUEJfT05fRU5UUlkJKDE5KjMyJiM0MzszMSkgLyogU0VWLVNOUCBJQlBCIG9uIFZNIEVudHJ5ICovCiAKIC8qIEFNRC1kZWZpbmVkIEV4dGVuZGVkIEZlYXR1cmUgMiBFQVgsIENQVUlEIGxldmVsIDB4ODAwMDAwMjEgKEVBWCksIHdvcmQgMjAgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfTk9fTkVTVEVEX0RBVEFfQlAJKDIwKjMyJiM0MzsgMCkgLyogTm8gTmVzdGVkIERhdGEgQnJlYWtwb2ludHMgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jCmluZGV4IDg3YmZmNGZiYjdlZDUuLjNmNTkyZTI0NWE2NmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYwpAQCAtMTMsMTcgJiM0MzsxMywyNSBAQAogI2luY2x1ZGUgJiMzNDtzdm1fdXRpbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7a3NlbGZ0ZXN0LmgmIzM0OwogCi0jZGVmaW5lIFNWTV9TRVZfRkVBVF9ERUJVR19TV0FQIDMydQomIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkUJCUJJVF9VTEwoMCkKJiM0MzsjZGVmaW5lIFNWTV9TRVZfRkVBVF9ERUJVR19TV0FQCQlCSVRfVUxMKDUpCiYjNDM7I2RlZmluZSBTVk1fU0VWX0ZFQVRfQlRCX0lTT0xBVElPTglCSVRfVUxMKDcpCiYjNDM7I2RlZmluZSBTVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQwkJQklUX1VMTCg5KQomIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX0lCUEJfT05fRU5UUlkJQklUX1VMTCgyMSkKJiM0MzsKJiM0MzsvKiBGZWF0dXJlcyB2YWxpZCBvbmx5IGZvciBTTlAgZ3Vlc3RzLCByZWplY3RlZCBmb3IgU0VWLUVTIGFuZCBiZWxvdy4gKi8KJiM0MzsjZGVmaW5lIFNOUF9PTkxZX0ZFQVRVUkVTCQkoU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkUgfCBcCiYjNDM7CQkJCQkgU1ZNX1NFVl9GRUFUX0JUQl9JU09MQVRJT04gfCBcCiYjNDM7CQkJCQkgU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0MgfCBcCiYjNDM7CQkJCQkgU1ZNX1NFVl9GRUFUX0lCUEJfT05fRU5UUlkpCiAKIC8qCiAgKiBTb21lIGZlYXR1cmVzIG1heSBoYXZlIGhpZGRlbiBkZXBlbmRlbmNpZXMsIG9yIG1heSBvbmx5IHdvcmsKICAqIGZvciBjZXJ0YWluIFZNIHR5cGVzLiAgRXJyIG9uIHRoZSBzaWRlIG9mIHNhZmV0eSBhbmQgZG9uJiMzOTt0CiAgKiBleHBlY3QgdGhhdCBhbGwgc3VwcG9ydGVkIGZlYXR1cmVzIGNhbiBiZSBwYXNzZWQgb25lIGJ5IG9uZQogICogdG8gS1ZNX1NFVl9JTklUMi4KLSAqCi0gKiAoV2VsbCwgcmlnaHQgbm93IHRoZXJlJiMzOTtzIG9ubHkgb25lLi4uKQogICovCi0jZGVmaW5lIEtOT1dOX0ZFQVRVUkVTIFNWTV9TRVZfRkVBVF9ERUJVR19TV0FQCiYjNDM7I2RlZmluZSBLTk9XTl9GRUFUVVJFUwkJKFNWTV9TRVZfRkVBVF9ERUJVR19TV0FQIHwgU05QX09OTFlfRkVBVFVSRVMpCiAKIGludCBrdm1fZmQ7CiB1NjQgc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXM7CkBAIC0xMDgsNyAmIzQzOzExNiw3IEBAIHZvaWQgdGVzdF9mZWF0dXJlcyh1MzIgdm1fdHlwZSwgdTY0IHN1cHBvcnRlZF9mZWF0dXJlcykKIAkJaWYgKCEoc3VwcG9ydGVkX2ZlYXR1cmVzICZhbXA7IEJJVF9VTEwoaSkpKQogCQkJdGVzdF9pbml0Ml9pbnZhbGlkKHZtX3R5cGUsCiAJCQkJJmFtcDsoc3RydWN0IGt2bV9zZXZfaW5pdCl7IC52bXNhX2ZlYXR1cmVzID0gQklUX1VMTChpKSB9LAotCQkJCSYjMzQ7dW5rbm93biBmZWF0dXJlJiMzNDspOwomIzQzOwkJCQkmIzM0O3Vua25vd24gb3IgdW5zdXBwb3J0ZWQgZmVhdHVyZSBmb3IgVk0gdHlwZSYjMzQ7KTsKIAkJZWxzZSBpZiAoS05PV05fRkVBVFVSRVMgJmFtcDsgQklUX1VMTChpKSkKIAkJCXRlc3RfaW5pdDIodm1fdHlwZSwKIAkJCQkmYW1wOyhzdHJ1Y3Qga3ZtX3Nldl9pbml0KXsgLnZtc2FfZmVhdHVyZXMgPSBCSVRfVUxMKGkpIH0pOwpAQCAtMTU3LDcgJiM0MzsxNjUsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCiAJdGVzdF9mZWF0dXJlcyhLVk1fWDg2X1NFVl9WTSwgMCk7CiAJaWYgKGhhdmVfc2V2X2VzKQotCQl0ZXN0X2ZlYXR1cmVzKEtWTV9YODZfU0VWX0VTX1ZNLCBzdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyk7CiYjNDM7CQl0ZXN0X2ZlYXR1cmVzKEtWTV9YODZfU0VWX0VTX1ZNLCBzdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyAmYW1wOyB+U05QX09OTFlfRkVBVFVSRVMpOwogCWlmIChoYXZlX3NucCkKIAkJdGVzdF9mZWF0dXJlcyhLVk1fWDg2X1NOUF9WTSwgc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNzYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA4MzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFNFVi1TTlAgRmVhdHVyZSBWYWxpZGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBuZWNlc3NpdGF0ZSBmdXp6aW5nLiBNeSBpbml0aWFsIHNjYW4gcG9pbnRzIHRvIG1vZGlmaWNhdGlvbnMgYWNyb3NzIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIG1pdGlnYXRpb24gc3RyYXRlZ2llcyBmb3IgQ1BVIHZ1bG5lcmFiaWxpdGllcyBhbmQgZW5oYW5jZW1lbnRzIHRvIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgZmVhdHVyZXMsIHBhcnRpY3VsYXJseSBTRVYtU05QLgoKVGhlIGNoYW5nZXMgaW4gYGFyY2gveDg2L0tjb25maWdgLCBgYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaGAsIGFuZCBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhgIGludHJvZHVjZSBhbmQgbW9kaWZ5IGZlYXR1cmUgZmxhZ3MgYW5kIGRlZmluaXRpb25zLiBgYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmNgIGFuZCBgYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uY2Agc2hvdyB1cGRhdGVzIHRvIGV4aXN0aW5nIG1pdGlnYXRpb24gbG9naWMgcmVsYXRlZCB0byB0aGluZ3MgbGlrZSByZXRibGVlZCBhbmQgU3BlY3RyZSB2MiwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGV4cG9zdXJlLiBUaGUgdXBkYXRlcyBpbiBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gU0VWLVNOUCBzdXBwb3J0IHdpdGhpbiBLVk0sIHdoaWNoIGNhdGNoZXMgbXkgYXR0ZW50aW9uLiBUaGUgdXBkYXRlcyB0byB0aGUgdG9vbHMgYW5kIHNlbGZ0ZXN0cyBhcmUgYWxzbyBub3QgZGlyZWN0bHkgcmVsZXZhbnQuCgpGaXJzdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWFjaGFiaWxpdHkgb2YgdGhlc2UgY2hhbmdlcy4gVGhlIGJvb3QtdGltZSBsb2dpYyBpbiBgYnVncy5jYCBhbmQgYGNvbW1vbi5jYCBpcyBjZXJ0YWlubHkgdG91Y2hlZCBkdXJpbmcga2VybmVsIGluaXRpYWxpemF0aW9uLCB3aGljaCBjYW4gY2VydGFpbmx5IGluZmx1ZW5jZSBleGVjdXRpb24gcGF0aHMsIGJ1dCBpc24mIzM5O3QgYXMgcmVhZGlseSBhY2Nlc3NpYmxlIGFzIGEgdXNlcnNwYWNlIGludGVyZmFjZS4gSG93ZXZlciwgdGhlIFNFVi1yZWxhdGVkIGNoYW5nZXMgaW4gYHNldi5jYCBhcmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiBTcGVjaWZpY2FsbHksIGBfX3Nldl9ndWVzdF9pbml0YCBhbmQgYHNldl9oYXJkd2FyZV9zZXR1cGAgYXJlIGNyaXRpY2FsIGZvciB0aGUgc2V0dXAgb2YgdGhlIEtWTSBTRVYgZ3Vlc3QgZW52aXJvbm1lbnQuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGV4ZXJjaXNlZCB2aWEgS1ZNLCB0aGVyZWZvcmUsIGlmIHJlYWNoYWJsZSwgaXQgaXMgZnV6emVhYmxlLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogYXJlIHRoZXNlIGNoYW5nZXMgd29ydGggZnV6emluZz8gVGhlIENQVSBidWcgbWl0aWdhdGlvbiBjaGFuZ2VzIGF0IGJvb3QgYXJlIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIGFzIHRoZXkgbWlnaHQgaW5mbHVlbmNlIHRoZSBtaXRpZ2F0aW9uIGJlaGF2aW9yLCBidXQgbXkgbWFpbiBmb2N1cyBpcyBvbiB0aGUgU0VWIGNoYW5nZXMsIHdoaWNoIGludm9sdmUgZGlyZWN0IGludGVyYWN0aW9uIHdpdGggYSBoeXBlcnZpc29yLiBTcGVjaWZpY2FsbHksIHRoZSBgX19zZXZfZ3Vlc3RfaW5pdGAgZnVuY3Rpb24sIHdoaWNoIGFwcGVhcnMgdG8gdmFsaWRhdGUgYHZtc2FfZmVhdHVyZXNgLCBsb29rcyBwcm9taXNpbmcuIFRoaXMgdmFsaWRhdGlvbiBwcm9jZXNzLCBpZiBmbGF3ZWQsIGNvdWxkIGxlYWQgdG8gc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLgoKTGV0JiMzOTtzIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZS4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhpcyBiaXQgb2YgYF9fc2V2X2d1ZXN0X2luaXRgOgoKYGBgYwpzdGF0aWMgaW50IF9fc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsCi4uLgoJaWYgKCFzbnBfYWN0aXZlKQoJCXZhbGlkX3Ztc2FfZmVhdHVyZXMgJmFtcDs9IH5TVk1fU0VWX0ZFQVRfU05QX09OTFlfTUFTSzsKCglpZiAoZGF0YS0mZ3Q7dm1zYV9mZWF0dXJlcyAmYW1wOyB+dmFsaWRfdm1zYV9mZWF0dXJlcykKCQlyZXR1cm4gLUVJTlZBTDsKYGBgCgpUaGlzIHZhbGlkYXRpb24gc2VlbXMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggS1ZNIGlvY3RscyEgVGhpcyBwYXJ0IHZhbGlkYXRlcyB0aGUgYHZtc2FfZmVhdHVyZXNgIGZpZWxkLiBUaGUgaW9jdGwgaXMgbGlrZWx5IGBLVk1fTUVNT1JZX0VOQ1JZUFRfT1BgIHdpdGggYEtWTV9TRVZfSU5JVDJgLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzIHF1aWNrbHkuIEkgbmVlZCB0byBnZXQgcmVhZHkgdG8gY3JhZnQgc29tZSBmdXp6aW5nIGlucHV0cy4gVGhpcyBpcyBkZWZpbml0ZWx5IGZ1enphYmxlIQoKT2theSwgdGltZSB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBmdW5jdGlvbnMgYW5kIGFyZ3VtZW50cyB0byB0YXJnZXQgd2l0aCB0aGUgZnV6emVyLgpgX19zZXZfZ3Vlc3RfaW5pdGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHNvIGxldCYjMzk7cyBzZWUgd2hlcmUgaXQmIzM5O3MgYmVpbmcgY2FsbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc2V2X2d1ZXN0X2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDc3PXN0YXRpYyB2b2lkIHNucF9ndWVzdF9yZXFfY2xlYW51cChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTAtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ5MTpzdGF0aWMgaW50IF9fc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5Mi1cdFx0XHQgICAgc3RydWN0IGt2bV9zZXZfaW5pdCAqZGF0YSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTU4MT1zdGF0aWMgaW50IHNldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjAwLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MDE6XHRyZXR1cm4gX19zZXZfZ3Vlc3RfaW5pdChrdm0sIGFyZ3AsIFx1MDAyNmRhdGEsIHZtX3R5cGUpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MDItfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NjA0PXN0YXRpYyBpbnQgc2V2X2d1ZXN0X2luaXQyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjE4LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MTk6XHRyZXR1cm4gX19zZXZfZ3Vlc3RfaW5pdChrdm0sIGFyZ3AsIFx1MDAyNmRhdGEsIGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MjAtfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzM0OD12b2lkIHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMzNTQtXHQgKlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMzU1Olx0ICogQ2hlY2tpbmcgZm9yIFNFViYjNDM7IG91dHNpZGUgb2Yga3ZtLVx1MDAzZWxvY2sgaXMgc2FmZSBhcyBfX3Nldl9ndWVzdF9pbml0KClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzM1Ni1cdCAqIGNhbiBvbmx5IGJlIGRvbmUgYmVmb3JlIHZDUFVzIGFyZSBjcmVhdGVkLCBjYWNoZXMgY2FuIGJlIGluY29oZXJlbnRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDM3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgdGhlIFNFViBHdWVzdCBJbml0aWFsaXphdGlvbiBGbG93KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgc2V2X2d1ZXN0X2luaXRgIGFuZCBgc2V2X2d1ZXN0X2luaXQyYC4gSSBrbm93IHRoZXkgYm90aCB1bHRpbWF0ZWx5IGZ1bm5lbCBpbnRvIGBfX3Nldl9ndWVzdF9pbml0YC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCBvZiBjb3Vyc2UsIGlzIHdoYXQmIzM5O3MgdHJpZ2dlcmluZyB0aGVzZSBgc2V2X2d1ZXN0X2luaXRgIGZ1bmN0aW9ucyBpbiB0aGUgZmlyc3QgcGxhY2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIOKAkyB3aG8mIzM5O3MgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgdGhvc2UgZW50cnkgcG9pbnRzLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aG9zZSBmdW5jdGlvbnMgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBhbmQgZGV0ZXJtaW5lIHRoZSBvdmVyYWxsIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBwaWN0dXJlIGhlcmUuIExldCYjMzk7cyBzZWUgd2hvJiMzOTtzIGFjdHVhbGx5IG1ha2luZyB0aGVzZSBjYWxscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXZfZ3Vlc3RfaW5pdDImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9NTgxPXN0YXRpYyBpbnQgc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MDMtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjYwNDpzdGF0aWMgaW50IHNldl9ndWVzdF9pbml0MihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjA1LXtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI2NDg9aW50IHNldl9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjg0LVx0Y2FzZSBLVk1fU0VWX0lOSVQyOlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNjg1Olx0XHRyID0gc2V2X2d1ZXN0X2luaXQyKGt2bSwgXHUwMDI2c2V2X2NtZCk7XG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2ODYtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NzMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYHNldl9tZW1fZW5jX2lvY3RsYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHNldl9tZW1fZW5jX2lvY3RsYC4gIE15IGZpcnN0IHF1ZXN0aW9uIGlzIGFsd2F5czogaXMgdGhpcyB0aGUgZW50cnkgcG9pbnQ/ICBTZWVtcyBsaWtlIGl0LiBOb3csIHRoZSBiaWdnZXIgcXVlc3Rpb24gaXMsIGlzIHRoaXMgZnVuY3Rpb24gZGVjbGFyZWQgc3RhdGljYWxseSBvciBub3Q/IEtub3dpbmcgdGhhdCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyB2aXNpYmlsaXR5IGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3MgZGlnIGluIGFuZCB2ZXJpZnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V2X21lbV9lbmNfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjYzOD1zdGF0aWMgaW50IHNucF9lbmFibGVfY2VydHMoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY0Ny1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjY0ODppbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY0OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyODAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYHNldl9tZW1fZW5jX2lvY3RsYCBhbmQgYHNldl9oYXJkd2FyZV9zZXR1cGAqKgoKT2theSwgc28gdGhlIGBzZXZfbWVtX2VuY19pb2N0bGAgZnVuY3Rpb24gKmlzbiYjMzk7dCogZGVjbGFyZWQgYXMgc3RhdGljLiBHb29kLiBUaGF0IGNsYXJpZmllcyB0aGF0IHBvaW50IGltbWVkaWF0ZWx5LiBOb3csIG15IG5leHQgc3RlcCBpcyB0byB0YWtlIGEgbG9vayBhdCB0aGUgYHNldl9oYXJkd2FyZV9zZXR1cGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIHByb2dyZXNzaW9uIGhlcmUuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiBpbiB0aGF0IHNldHVwIHJvdXRpbmUuIEkgaGF2ZSBhIGh1bmNoIGl0JiMzOTtzIHJlbGF0ZWQsIG9mIGNvdXJzZSwgYnV0IGl0JiMzOTtzIHRpbWUgdG8gY29uZmlybSBhbmQgZmlndXJlIG91dCB0aGUgZXhhY3QgcmVsYXRpb25zaGlwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXZfaGFyZHdhcmVfc2V0dXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzA4MT1zdGF0aWMgY29uc3QgY2hhciAqIF9faW5pdCBzZXZfc3RyX2ZlYXR1cmVfc3RhdGUoYm9vbCBpc19zdXBwb3J0ZWQsIGJvb2wgaXNfdXNhYmxlKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzA4NS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzA4Njp2b2lkIF9faW5pdCBzZXZfaGFyZHdhcmVfc2V0dXAodm9pZClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzA4Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjIyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3k6IEluaXRpYWwgQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcyBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIG1vc3QgZnJ1aXRmdWwgZnV6emluZyB0YXJnZXRzIGFyZS4gYHNldl9oYXJkd2FyZV9zZXR1cGAgaXMgY2xlYXJseSBvdXQuIEl0JiMzOTtzIGFuIGluaXQgZnVuY3Rpb24sIHJ1bnMgYXQgYm9vdCwgbm90IGlkZWFsIGZvciBkeW5hbWljIGZ1enppbmcuIFRoZSBrZXkgc2VlbXMgdG8gYmUgYXJvdW5kIGBfX3Nldl9ndWVzdF9pbml0YCwgYXMgaXQmIzM5O3MgY2FsbGVkIHRocm91Z2ggYHNldl9ndWVzdF9pbml0MmAgYW5kIGBzZXZfZ3Vlc3RfaW5pdGAsIGFuZCB0aG9zZSBhcmUgcmVhY2hlZCB2aWEgYHNldl9tZW1fZW5jX2lvY3RsYC4gVGhhdCYjMzk7cyB0aGUgbW9zdCBwcm9taXNpbmcgbGVhZCBzbyBmYXIuCgpOb3csIGxldCYjMzk7cyBwZWVrIGludG8gdGhvc2UgYGFyY2gveDg2L2tlcm5lbC9jcHUvYnVncy5jYCBjaGFuZ2VzLiBBbHJpZ2h0LCBgcmV0YmxlZWRfdXBkYXRlX21pdGlnYXRpb25gLCBgc3BlY3RyZV92Ml9zZWxlY3RfbWl0aWdhdGlvbmAsIGFuZCB0aGUgbWl0aWdhdGlvbiBhcHBsaWNhdGlvbiBmdW5jdGlvbnMg4oCTIHRoZXkmIzM5O3JlIGFsbCBgX19pbml0YC4gVGhhdCYjMzk7cyBhIGRlYWQgZW5kOyBpbml0IGZ1bmN0aW9ucyBhcmVuJiMzOTt0IGVhc2lseSBmdXp6ZWQgZnJvbSB1c2Vyc3BhY2UuIEkmIzM5O2xsIGlnbm9yZSB0aGVtLgoKU28sIHRoZSBmb2N1cyBpcyByZWFsbHkgdGhlIEtWTSBTRVYgc3R1ZmYuIEdvb2QuIFRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgYWNjZXNzaWJpbGl0eS4gQ2FuIEkgaGl0IEtWTSBTRVYgaW4gUUVNVT8gSSB0aGluayBzbyDigJMgUUVNVSBjYW4gZW11bGF0ZSBTRVYsIG9yIGF0IGxlYXN0IHRoZSBLVk0gaW9jdGxzIGFyZSByZWFjaGFibGUuIFRoZSBTRVYgaGFyZHdhcmUgcmVxdWlyZW1lbnQgaXMgYSBjb21wbGljYXRpb24sIG9idmlvdXNseSwgbmVlZGluZyBhbiBBTUQgQ1BVIHdpdGggU0VWIHN1cHBvcnQuIEJ1dCwgYW5kIHRoaXMgaXMgdGhlIGltcG9ydGFudCBwYXJ0LCBTeXprYWxsZXIgKnNob3VsZCogYmUgYWJsZSB0byBmdXp6IHRoZSBLVk0gaW9jdGxzIGV2ZW4gd2l0aG91dCBmdWxsIGhhcmR3YXJlIHN1cHBvcnQuIEl0IGRvZXNuJiMzOTt0IGNhcmUgaWYgaXQgaXMgb24gQU1EIGhhcmR3YXJlIG9yIG5vdC4KCldhaXQgYSBzZWNvbmQsIHRob3VnaC4gSSBuZWVkIHRvIGJlIHN1cmUgYWJvdXQgdGhlIHJlYWNoYWJpbGl0eSBvZiBgc2V2X21lbV9lbmNfaW9jdGxgLiBEb2VzIGl0ICpyZXF1aXJlKiBTRVYgaGFyZHdhcmUgdG8gYmUgYWNjZXNzaWJsZT8gSSBuZWVkIHRvIGNoZWNrIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgZWZmb3J0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V2X21lbV9lbmNfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTI2Mzg9c3RhdGljIGludCBzbnBfZW5hYmxlX2NlcnRzKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2NDctXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI2NDg6aW50IHNldl9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2NDkte1xuLS1cbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM9NTMyOD1zdHJ1Y3Qga3ZtX3g4Nl9vcHMgc3ZtX3g4Nl9vcHMgX19pbml0ZGF0YSA9IHtcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0NDUtXHQuZGV2X2dldF9hdHRyID0gc2V2X2Rldl9nZXRfYXR0cixcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmM6NTQ0NjpcdC5tZW1fZW5jX2lvY3RsID0gc2V2X21lbV9lbmNfaW9jdGwsXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0NDctXHQubWVtX2VuY19yZWdpc3Rlcl9yZWdpb24gPSBzZXZfbWVtX2VuY19yZWdpc3Rlcl9yZWdpb24sXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaD05ODM9Ym9vbCBzZXZfdmNwdV9uZWVkc19pbml0aWFsaXphdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaDo5ODQ6aW50IHNldl9tZW1fZW5jX2lvY3RsKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApO1xuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05ODUtaW50IHNldl9tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzkxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggS1ZNIGFuZCBTRVY6CgoqKk15IEluaXRpYWwgVGhvdWdodHMgb24gYHNldl9tZW1fZW5jX2lvY3RsYCoqCgpBbHJpZ2h0LCBzbyBgc2V2X21lbV9lbmNfaW9jdGxgIGlzIHRoZSByb3V0aW5lIHRoYXQgaGFuZGxlcyBgS1ZNX01FTU9SWV9FTkNSWVBUX09QYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgdGhlIGludGVyZmFjZSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBtZW1vcnkgZW5jcnlwdGlvbiBjYXBhYmlsaXRpZXMgd2l0aGluIEtWTS4gTXkgZmlyc3QgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBob3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGhhbmRsZSBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSAqZG9lc24mIzM5O3QqIGFjdHVhbGx5IHN1cHBvcnQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKT8gRG9lcyBpdCBoYXZlIGEgcXVpY2ssIGVhcmx5IGNoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIHJlcXVpcmVkIENQVSBmZWF0dXJlcyBvciBwbGF0Zm9ybSBzdXBwb3J0LCBvciBkb2VzIGl0IHRyeSB0byBnbyB0aHJvdWdoIHRoZSBtb3Rpb25zIGFuZCBmYWlsIGxhdGVyIGluIHRoZSBwcm9jZXNzPyBJJiMzOTttIGhvcGluZyBpdCYjMzk7cyB0aGUgZm9ybWVyLCBmb3IgcGVyZm9ybWFuY2UgYW5kIGVycm9yIGhhbmRsaW5nLiBJdCB3b3VsZCBiZSBhIHNpZ25pZmljYW50IGlzc3VlIGlmIGl0IGF0dGVtcHRlZCBzb21lIFNFViBvcGVyYXRpb24gYW5kIHRoZW4gZXJyb3JlZCBvdXQgYXQgYSBkZWVwZXIgbGV2ZWwuIEEgY2xlYXIsIHVwLWZyb250IGNoZWNrIHdvdWxkIGJlIG11Y2ggY2xlYW5lci4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBkZXRlcm1pbmUgdGhpcyBhcyB0aGUgaW5pdGlhbCBmb2N1cyBvZiB0aGUgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V2X21lbV9lbmNfaW9jdGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjYzOD1zdGF0aWMgaW50IHNucF9lbmFibGVfY2VydHMoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY0Ny1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjY0ODppbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY0OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMjM3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyBgc2V2X21lbV9lbmNfaW9jdGxgKioKCkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgb3BlbiBgc2V2X21lbV9lbmNfaW9jdGxgLiBKdXN0IHRoZSBuYW1lIGl0c2VsZiBpcyBhIGRlY2VudCBoaW50OyBpdCBzY3JlYW1zICYjMzQ7bWVtb3J5IGVuY3J5cHRpb24mIzM0OyBhbmQgJiMzNDtpb2N0bCYjMzQ7LiBGcm9tIGEgaGlnaC1sZXZlbCBwZXJzcGVjdGl2ZSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyDigJMgdGhlIGludGVyZmFjZSB0aHJvdWdoIHdoaWNoIHVzZXJzcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGUgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBtZW1vcnkgZW5jcnlwdGlvbiBmZWF0dXJlcy4gSSYjMzk7bSBrZWVuIHRvIHNlZSB0aGUgc3BlY2lmaWMgaW9jdGwgbnVtYmVycywgd2hhdCBraW5kIG9mIGNvbW1hbmRzIGFyZSBzdXBwb3J0ZWQsIGFuZCBob3cgdGhlIGludGVyYWN0aW9uIGlzIHN0cnVjdHVyZWQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGtleSBtYW5hZ2VtZW50LCBtZW1vcnkgcmVnaW9uIHNldHVwLCBhdHRlc3RhdGlvbiByZXF1ZXN0cywgYW5kIHBvdGVudGlhbGx5IGV2ZW4gZGVidWcvc3RhdHVzIGluZm9ybWF0aW9uLiBNeSBiYWNrZ3JvdW5kIHRlbGxzIG1lIHRoYXQgSSYjMzk7bSBleHBlY3RpbmcgaXQgdG8gYmUgY29tcGxleDsgdGhhdCYjMzk7cyBqdXN0IHRoZSBuYXR1cmUgb2Ygc2VjdXJpdHkgYXJjaGl0ZWN0dXJlcy4gQnV0LCBhbHNvIGl0IHdpbGwgcHJvdmlkZSBhIGNydWNpYWwgcGllY2UgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBzeXN0ZW0gYWN0dWFsbHkgZnVuY3Rpb25zLiBMZXQmIzM5O3Mgc2VlIGlmIHRoZSBjb2RlIGNvbmZpcm1zIG15IGluaXRpYWwgYXNzdW1wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3N2bS9zZXYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2NDgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjY0ODpcdGludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxuMjY0OTpcdHtcbjI2NTA6XHRcdHN0cnVjdCBrdm1fc2V2X2NtZCBzZXZfY21kO1xuMjY1MTpcdFx0aW50IHI7XG4yNjUyOlx0XG4yNjUzOlx0XHRpZiAoIXNldl9lbmFibGVkKVxuMjY1NDpcdFx0XHRyZXR1cm4gLUVOT1RUWTtcbjI2NTU6XHRcbjI2NTY6XHRcdGlmICghYXJncClcbjI2NTc6XHRcdFx0cmV0dXJuIDA7XG4yNjU4Olx0XG4yNjU5Olx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2c2V2X2NtZCwgYXJncCwgc2l6ZW9mKHN0cnVjdCBrdm1fc2V2X2NtZCkpKVxuMjY2MDpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjI2NjE6XHRcbjI2NjI6XHRcdGd1YXJkKG11dGV4KShcdTAwMjZrdm0tXHUwMDNlbG9jayk7XG4yNjYzOlx0XG4yNjY0Olx0XHQvKiBPbmx5IHRoZSBlbmNfY29udGV4dF9vd25lciBoYW5kbGVzIHNvbWUgbWVtb3J5IGVuYyBvcGVyYXRpb25zLiAqL1xuMjY2NTpcdFx0aWYgKGlzX21pcnJvcmluZ19lbmNfY29udGV4dChrdm0pIFx1MDAyNlx1MDAyNlxuMjY2NjpcdFx0ICAgICFpc19jbWRfYWxsb3dlZF9mcm9tX21pcnJvcihzZXZfY21kLmlkKSlcbjI2Njc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4yNjY4Olx0XG4yNjY5Olx0XHQvKlxuMjY3MDpcdFx0ICogT25jZSBLVk1fU0VWX0lOSVQyIGluaXRpYWxpemVzIGEgS1ZNIGluc3RhbmNlIGFzIGFuIFNOUCBndWVzdCwgb25seVxuMjY3MTpcdFx0ICogYWxsb3cgdGhlIHVzZSBvZiBTTlAtc3BlY2lmaWMgY29tbWFuZHMuXG4yNjcyOlx0XHQgKi9cbjI2NzM6XHRcdGlmIChzZXZfc25wX2d1ZXN0KGt2bSkgXHUwMDI2XHUwMDI2IHNldl9jbWQuaWQgXHUwMDNjIEtWTV9TRVZfU05QX0xBVU5DSF9TVEFSVClcbjI2NzQ6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjI2NzU6XHRcbjI2NzY6XHRcdHN3aXRjaCAoc2V2X2NtZC5pZCkge1xuMjY3NzpcdFx0Y2FzZSBLVk1fU0VWX0VTX0lOSVQ6XG4yNjc4Olx0XHRcdGlmICghc2V2X2VzX2VuYWJsZWQpXG4yNjc5Olx0XHRcdFx0cmV0dXJuIC1FTk9UVFk7XG4yNjgwOlx0XHRcdGZhbGx0aHJvdWdoO1xuMjY4MTpcdFx0Y2FzZSBLVk1fU0VWX0lOSVQ6XG4yNjgyOlx0XHRcdHIgPSBzZXZfZ3Vlc3RfaW5pdChrdm0sIFx1MDAyNnNldl9jbWQpO1xuMjY4MzpcdFx0XHRicmVhaztcbjI2ODQ6XHRcdGNhc2UgS1ZNX1NFVl9JTklUMjpcbjI2ODU6XHRcdFx0ciA9IHNldl9ndWVzdF9pbml0Mihrdm0sIFx1MDAyNnNldl9jbWQpO1xuMjY4NjpcdFx0XHRicmVhaztcbjI2ODc6XHRcdGNhc2UgS1ZNX1NFVl9MQVVOQ0hfU1RBUlQ6XG4yNjg4Olx0XHRcdHIgPSBzZXZfbGF1bmNoX3N0YXJ0KGt2bSwgXHUwMDI2c2V2X2NtZCk7XG4yNjg5Olx0XHRcdGJyZWFrO1xuMjY5MDpcdFx0Y2FzZSBLVk1fU0VWX0xBVU5DSF9VUERBVEVfREFUQTpcbjI2OTE6XHRcdFx0ciA9IHNldl9sYXVuY2hfdXBkYXRlX2RhdGEoa3ZtLCBcdTAwMjZzZXZfY21kKTtcbjI2OTI6XHRcdFx0YnJlYWs7XG4yNjkzOlx0XHRjYXNlIEtWTV9TRVZfTEFVTkNIX1VQREFURV9WTVNBOlxuMjY5NDpcdFx0XHRyID0gc2V2X2xhdW5jaF91cGRhdGVfdm1zYShrdm0sIFx1MDAyNnNldl9jbWQpO1xuMjY5NTpcdFx0XHRicmVhaztcbjI2OTY6XHRcdGNhc2UgS1ZNX1NFVl9MQVVOQ0hfTUVBU1VSRTpcbjI2OTc6XHRcdFx0ciA9IHNldl9sYXVuY2hfbWVhc3VyZShrdm0sIFx1MDAyNnNldl9jbWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzMxNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU0VWIFJlYWNoYWJpbGl0eSBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSBhIGNoZWNrIGZvciBgc2V2X2VuYWJsZWRgLiBUaGF0JiMzOTtzIHRoZSBnYXRla2VlcGVyLiBJdCYjMzk7cyB0aWVkIHRvIGhhcmR3YXJlIHN1cHBvcnQsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIGFib3V0IHdoZXRoZXIgdGhpcyBjb2RlIHBhdGggaXMgZXZlbiAqcG9zc2libGUqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVS4gU3l6a2FsbGVyJiMzOTtzIHVzZWQgb24gR0NFLCBhbmQgR0NFICpkb2VzKiBvZmZlciBBTUQgaW5zdGFuY2VzIHdpdGggU0VWIGNhcGFiaWxpdGllcyAoTjJELCBDMkQsIGV0Yy4pLiBUaGF0JiMzOTtzIHByb21pc2luZywgSSBzaG91bGQgbm90ZSB0aGF0LgoKQnV0IFN5emthbGxlciBydW5zIGluIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiDigJMgUUVNVSBvbiBHQ0UuIFNvLCBkb2VzIFFFTVUgc3VwcG9ydCBuZXN0ZWQgU0VWPyBZZXMsIGl0IGRvZXMuIFFFTVUgYW5kIEtWTSBoYW5kbGUgbmVzdGVkIFNFViwgdGhvdWdoIGl0JiMzOTtzIG5vdCBhbHdheXMgZW5hYmxlZCBieSBkZWZhdWx0LiBUaGF0IGFsaWducyB3aXRoIHRoZSBlYXJsaWVyIHRob3VnaHQgYWJvdXQgU0VWIHN1cHBvcnQuCgpUaGVuLCB0aGVyZSBpcyB0aGUgY29uZnVzaW5nIHN0YXRlbWVudC4gVGhlIHByb21wdCBzYXlzLCAmIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7LiBUaGF0IHRocm93cyBtZSBmb3IgYSBsb29wIGluaXRpYWxseS4gU0VWICppcyogcmVhY2hhYmxlIGluIFFFTVUgaWYgdGhlIGhvc3QgaGFzIHRoZSBoYXJkd2FyZSBhbmQgcGFzc2VzIGl0IHRocm91Z2gsIG9yIGlmIGl0JiMzOTtzIGVtdWxhdGVkLCBidXQgdGhlICYjMzQ7ZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7IGlzIHRocm93aW5nIG1lIG9mZi4gU0VWIGlzbiYjMzk7dCAqZnVsbHkqIGVtdWxhdGVkIGluIHNvZnR3YXJlOyBpdCBmdW5kYW1lbnRhbGx5IG5lZWRzIGhhcmR3YXJlLiBTbywgaWYgdGhlIGNvZGUgZGVtYW5kcyBzcGVjaWZpYyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlIGFuc3dlciBpcyBmYWxzZS4KCldhaXQsIHllcywgU0VWIG5lZWRzIEFNRCBFUFlDIHByb2Nlc3NvcnMuIFRoYXQmIzM5O3MgdGhlIGtleS4gQW5kIGlzIGl0IGVtdWxhdGVkIGluICpzdGFuZGFyZCogUUVNVT8gTm8sIGl0IHJlbGllcyBvbiBLVk0gYW5kIHRoZSBob3N0IENQVSBmb3IgU0VWLCB0aGF0JiMzOTtzIGltcG9ydGFudC4gQnV0IHN5emthbGxlciAqZG9lcyogZnV6eiBLVk0uIEtWTSBpcyBjb3JlIGtlcm5lbCBsb2dpYy4gU28sIGl0JiMzOTtzIHdvcnRoIHNlZWluZyBpZiBgc2V2X2d1ZXN0X2luaXQyYCBpcyByZWFjaGFibGUuCgpJZiBgc2V2X2VuYWJsZWRgIGlzIGZhbHNlLCB3ZSBnZXQgYC1FTk9UVFlgLiBCdXQgY2FuIGBzZXZfZW5hYmxlZGAgYWN0dWFsbHkgYmUgdHJ1ZSBpbiBRRU1VPyBZZXMsIGlmIHdlIHJ1biBRRU1VIHdpdGggS1ZNIG9uIGFuIEFNRCBob3N0IHdpdGggU0VWLiBTeXprYWxsZXIgaGFzIEtWTSBmdXp6aW5nIHRoYXQgcnVucyBvbiBBTUQgaG9zdHM7IEkganVzdCBoYXZlIHRvIGNvbmZpcm0gdGhlIEtWTSBob3N0IHN1cHBvcnRzIHRoZSByaWdodCBDUFUuIFRoZXJlZm9yZSwgeWVzLCB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlLgoKT2theSwgbGV04oCZcyBkaWcgaW50byB0aGUgY2hhbmdlcyBpbiBgX19zZXZfZ3Vlc3RfaW5pdGAuIFRoZXNlIGxpbmVzOgpgYGBjCglpZiAoIXNucF9hY3RpdmUpCgkJdmFsaWRfdm1zYV9mZWF0dXJlcyAmYW1wOz0gflNWTV9TRVZfRkVBVF9TTlBfT05MWV9NQVNLOwoKCWlmIChkYXRhLSZndDt2bXNhX2ZlYXR1cmVzICZhbXA7IH52YWxpZF92bXNhX2ZlYXR1cmVzKQoJCXJldHVybiAtRUlOVkFMOwpgYGAKVGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgaW4gaG93IGB2bXNhX2ZlYXR1cmVzYCBhcmUgdmFsaWRhdGVkIGR1cmluZyBgS1ZNX1NFVl9JTklUMmAuIERlZmluaXRlbHkgd29ydGggZnV6emluZyEKCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogd2hhdCBhcmUgdGhlIGZvY3VzIHN5bWJvbHM/IGBzZXZfbWVtX2VuY19pb2N0bGAgc2VlbXMgbGlrZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludC4gYHNldl9ndWVzdF9pbml0MmAgYW5kIGBzZXZfZ3Vlc3RfaW5pdGAgYXJlIHN0YXRpYyBidXQgc3RpbGwgcmVsZXZhbnQuIEJ1dCBgc2V2X2d1ZXN0X2luaXQyYCBtaWdodCBub3QgYmUgaW5saW5lZCBpZiBpdCYjMzk7cyBsYXJnZS4gTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYHNldl9ndWVzdF9pbml0MmAgaXMgYWN0dWFsbHkgc3RhdGljLiBPa2F5LCB5ZXMsIGl0IGlzLiBTbywgYHNldl9tZW1fZW5jX2lvY3RsYCBpdCBpcy4KCkZpbmFsbHksIHRoZSBjb25maWd1cmF0aW9uczogd2UgbmVlZCBgQ09ORklHX0tWTWAgYW5kIGBDT05GSUdfS1ZNX0FNRGAgZm9yIEtWTSBhbmQgU1ZNL1NFViBzdXBwb3J0LiBHb3R0YSBtYWtlIHN1cmUgdGhvc2UgYXJlIGVuYWJsZWQuIFRpbWUgdG8gY2hlY2sgYGFyY2gveDg2L2t2bS9LY29uZmlnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9BTUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMzQ9Y29uZmlnIEtWTV9JTlRFTF9URFhcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAzNQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLVk0gU0VWIFZ1bG5lcmFiaWxpdHkgU3VyZmFjZSoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGJvdGggYEtWTV9BTURgIGFuZCBgS1ZNX0FNRF9TRVZgIGFyZSBjcnVjaWFsIGhlcmUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGlnIGludG8gdGhlIHJlY2VudCBjaGFuZ2VzLCBzdGFydGluZyB3aXRoIGBhcmNoL3g4Ni9rZXJuZWwvY3B1L2J1Z3MuY2AuIEkgc2VlIHRoZSBTcGVjdHJlIHYyIG1pdGlnYXRpb24gbG9naWMgdGhlcmUsIHNwZWNpZmljYWxseSBob3cgaXQgaGFuZGxlcyBgQVVUT0lCUlNgIGFuZCBgSUJSU2AgbW9kZXMuIEl0JiMzOTtzIGJvb3QtdGltZSBzdHVmZi4gTm93LCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpc21pc3MgZnV6emluZyB0aGlzIGRpcmVjdGx5LCBzaW5jZSB0aGVzZSBtaXRpZ2F0aW9ucyBhcmUgc2V0IHVwIG9uY2UgZHVyaW5nIGJvb3QgYW5kLCBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgZG9uJiMzOTt0IGR5bmFtaWNhbGx5IHJlYWN0IHRvIHVzZXIgaW5wdXQgKGJhcnJpbmcgcGVyaGFwcyBrZXJuZWwgY29tbWFuZCBsaW5lIG9wdGlvbnMsIHdoaWNoIFN5emthbGxlciAqY291bGQqIHRyeSBidXQgZG9lc24mIzM5O3QgdXN1YWxseSB0YXJnZXQgZm9yIGVhY2ggdGVzdCBjYXNlKS4KCkhvd2V2ZXIsIHRoZSBLVk0gU0VWIGNoYW5nZXMuLi4gdGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaG9zZSBmdW5jdGlvbnMgKmFyZSogcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgdGhleSBjb25zdW1lIHVzZXJzcGFjZSBkYXRhIHZpYSB0aGluZ3MgbGlrZSBgZGF0YS0mZ3Q7dm1zYV9mZWF0dXJlc2AuIFRoaXMgaXMgYSBtdWNoIG1vcmUgcHJvbWlzaW5nIHRhcmdldCBmb3IgZnV6emluZy4KCkkgbmVlZCB0byBjb25maXJtIGlmIGBzZXZfbWVtX2VuY19pb2N0bGAgaXMgdGhlIGNvcnJlY3QgZm9jYWwgcG9pbnQuIFllcywgaXQmIzM5O3MgdGhlIGhhbmRsZXIgZm9yIGBLVk1fTUVNT1JZX0VOQ1JZUFRfT1BgLiBUaGF0IGlzIHRoZSByaWdodCBwbGFjZSB0byBmb2N1cyBteSBlZmZvcnRzLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgc2NhbiBmb3Igb3RoZXIgbW9kaWZpZWQgS1ZNIFNFViBmdW5jdGlvbnMuIGBzZXZfaGFyZHdhcmVfc2V0dXBgIGlzIGNsZWFybHkgYSBvbmUtdGltZSBgX19pbml0YCBmdW5jdGlvbiwgc28gaXQmIzM5O3MgcHJvYmFibHkgbm90IGEgZ29vZCB0YXJnZXQuIGBfX3Nldl9ndWVzdF9pbml0YCBpcyBzdGF0aWMgYW5kIGxpa2VseSBpbnRlcm5hbCB0byB0aGUgS1ZNIHNldHVwLCBzbyBpdCYjMzk7cyBub3QgYSBzdHJvbmcgY29udGVuZGVyIGVpdGhlci4KCkNoZWNraW5nIGluIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCBmb3IgYHNldl9tZW1fZW5jX2lvY3RsYC4gWXVwLCBpdCYjMzk7cyB0aGVyZS4gVGhpcyBoYW5kbGVzIGBLVk1fU0VWX0lOSVQyYC4KCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayBpZiBgS1ZNX0FNRF9TRVZgIGRlcGVuZHMgb24gYW55dGhpbmcgZWxzZSB0aGF0IEkgbmVlZCB0byBiZSBhd2FyZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9BTURfU0VWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTQ2PWNvbmZpZyBLVk1fQU1EXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDQyCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgZGVwZW5kZW5jaWVzIG9mIGBLVk1fQU1EX1NFVmAsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OgoKKipEZWx2aW5nIGludG8gS1ZNX0FNRF9TRVYgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyYWwgdW5kZXJwaW5uaW5ncyBvZiBgS1ZNX0FNRF9TRVZgLiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nLCAmIzM0O1doZXJlIGRvZXMgdGhpcyBmaXQgaW4gdGhlIGxhcmdlciBLVk0gZWNvc3lzdGVtPyYjMzQ7IEkgbmVlZCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcy4gSSBhbHJlYWR5IGhhdmUgYSBwcmV0dHkgZ29vZCBtZW50YWwgbW9kZWwgb2YgS1ZNLCBoeXBlcnZpc29ycywgYW5kIHNlY3VyaXR5IGV4dGVuc2lvbnMgbGlrZSBTRVYsIGJ1dCB1bmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpYyByZWxhdGlvbnNoaXAgb2YgdGhpcyBtb2R1bGUgdG8gdGhlIHdob2xlIGlzIHBhcmFtb3VudCB0byBhIGRlZXAgY29tcHJlaGVuc2lvbi4gV2hhdCBvdGhlciBLVk0gY29tcG9uZW50cyBpcyBpdCBidWlsdCB1cG9uPyBXaGF0IHNwZWNpZmljIEFNRCBoYXJkd2FyZSBmZWF0dXJlcyBkb2VzIGl0IHJlbHkgb24/IFdoYXQgb3RoZXIgbW9kdWxlcyBtaWdodCBiZSBpbXBhY3RlZCBvciBuZWVkIHRvIGJlIHByZXNlbnQ/IFRoaXMgaXNuJiMzOTt0IGp1c3QgYWJvdXQgY29kZSwgaXQmIzM5O3MgYWJvdXQgdGhlIHNlY3VyaXR5IG1vZGVsIGl0IGVuYWJsZXMuIFdoYXQgYXJlIHRoZSB0cnVzdCBib3VuZGFyaWVzPyBBbnkgcG90ZW50aWFsIGF0dGFjayB2ZWN0b3JzIHN0ZW1taW5nIGZyb20gY29tcG9uZW50IGludGVyZGVwZW5kZW5jaWVzPyBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSBtYXAgb3V0IHRoZSByZWxhdGlvbnNoaXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTY6XHRjb25maWcgS1ZNX0FNRF9TRVZcbiAxNTc6XHRcdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuIDE1ODpcdFx0ZGVmYXVsdCB5XG4gMTU5Olx0XHRkZXBlbmRzIG9uIEtWTV9BTUQgXHUwMDI2XHUwMDI2IFg4Nl82NFxuIDE2MDpcdFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX1NQX1BTUCBcdTAwMjZcdTAwMjYgIShLVk1fQU1EPXkgXHUwMDI2XHUwMDI2IENSWVBUT19ERVZfQ0NQX0REPW0pXG4gMTYxOlx0XHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cbiAxNjI6XHRcdHNlbGVjdCBLVk1fR0VORVJJQ19NRU1PUllfQVRUUklCVVRFU1xuIDE2MzpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9DT05WRVJUXG4gMTY0Olx0XHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1JFQ0xBSU1cbiAxNjU6XHRcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fSU5WQUxJREFURVxuIDE2NjpcdFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9QT1BVTEFURVxuIDE2NzpcdFx0aGVscFxuIDE2ODpcdFx0ICBQcm92aWRlcyBzdXBwb3J0IGZvciBsYXVuY2hpbmcgZW5jcnlwdGVkIFZNcyB3aGljaCB1c2UgU2VjdXJlXG4gMTY5Olx0XHQgIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSwgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiB3aXRoXG4gMTcwOlx0XHQgIEVuY3J5cHRlZCBTdGF0ZSAoU0VWLUVTKSwgYW5kIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gd2l0aFxuIDE3MTpcdFx0ICBTZWN1cmUgTmVzdGVkIFBhZ2luZyAoU0VWLVNOUCkgdGVjaG5vbG9naWVzIG9uIEFNRCBwcm9jZXNzb3JzLlxuIDE3MjpcdFxuIDE3MzpcdGNvbmZpZyBLVk1fSU9BUElDXG4gMTc0Olx0XHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4gMTc1Olx0XHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY2ODcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIGZvciBLZXJuZWwgTW9kdWxlIFNlbGVjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZGVwZW5kZW5jaWVzOiBgS1ZNX0FNRGAsIGBYODZfNjRgLCBgQ1JZUFRPX0RFVl9TUF9QU1BgLCBhbmQgYENSWVBUT19ERVZfQ0NQX0REYC4gQmFzZWQgb24gdGhhdCwgSSBkZWZpbml0ZWx5IG5lZWQgdG8gcHVsbCBpbiBgS1ZNYCwgYEtWTV9BTURgLCBhbmQgYEtWTV9BTURfU0VWYC4gVGhvc2Ugc2VlbSBwcmV0dHkgY2xlYXItY3V0IGdpdmVuIHRoZSBBTUQtc3BlY2lmaWMgS1ZNIG1vZHVsZS4gQW5kIG9mIGNvdXJzZSwgSSBoYXZlIHRvIGluY2x1ZGUgdGhlIGNyeXB0byBkZXZpY2VzLCBgQ1JZUFRPX0RFVl9TUF9QU1BgIGFuZCBgQ1JZUFRPX0RFVl9DQ1BfRERgLgoKTm93LCB3YWl0IGEgc2Vjb25kLi4uIGBDUllQVE9fREVWX1NQX1BTUGAgYW5kIGBDUllQVE9fREVWX0NDUF9ERGAgKmFyZSogcmVxdWlyZWQuIEkgaGFkIGJldHRlciBnbyBiYWNrIGFuZCBkb3VibGUgY2hlY2sgdGhhdCBgQ1JZUFRPX0RFVl9TUF9QU1BgIGlzIHdoYXQgSSB0aGluayBpdCBpcywgYmVmb3JlIG1vdmluZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENSWVBUT19ERVZfU1BfUFNQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnPTIzPWNvbmZpZyBDUllQVE9fREVWX0NDUF9DUllQVE9cbi0tXG5kcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZy0zNy1cbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnOjM4OmNvbmZpZyBDUllQVE9fREVWX1NQX1BTUFxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMzktXHRib29sIFwmIzM0O1BsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKSBkZXZpY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxMzkKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIHRoZSBwcm92aWRlZCB0ZXh0OgoKKipFeGFtaW5pbmcgdGhlIENDUCBLY29uZmlnIEZpbGUqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHdoYXQmIzM5O3MgZ29pbmcgb24gYXJvdW5kIGxpbmUgMzguIEdpdmVuIHRoZSBjb250ZXh0LCBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoZSBDQ1AgaGFyZHdhcmUuIFRoaXMgS2NvbmZpZyBmaWxlIGxpa2VseSBkZWZpbmVzIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmb3IgdGhlIENDUCBkcml2ZXIsIHNvIHVuZGVyc3RhbmRpbmcgdGhlc2Ugc2V0dGluZ3MgaXMgY3J1Y2lhbCBmb3IgcHJvcGVyIGludGVncmF0aW9uLiBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIGRlZmluaW5nIHNvbWUgZmVhdHVyZXMgb3IgdGhlIGhhcmR3YXJlIGRldGFpbHMuIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBzcGVjaWZpYyBjb25kaXRpb25hbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDMwOlx0XHRzZWxlY3QgQ1JZUFRPX0FVVEhFTkNcbiAgMzE6XHRcdHNlbGVjdCBDUllQVE9fUlNBXG4gIDMyOlx0XHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNcbiAgMzM6XHRcdGhlbHBcbiAgMzQ6XHRcdCAgU3VwcG9ydCBmb3IgdXNpbmcgdGhlIGNyeXB0b2dyYXBoaWMgQVBJIHdpdGggdGhlIEFNRCBDcnlwdG9ncmFwaGljXG4gIDM1Olx0XHQgIENvcHJvY2Vzc29yLiBUaGlzIG1vZHVsZSBzdXBwb3J0cyBvZmZsb2FkIG9mIFNIQSBhbmQgQUVTIGFsZ29yaXRobXMuXG4gIDM2Olx0XHQgIElmIHlvdSBjaG9vc2UgJiMzOTtNJiMzOTsgaGVyZSwgdGhpcyBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2NwX2NyeXB0by5cbiAgMzc6XHRcbiAgMzg6XHRjb25maWcgQ1JZUFRPX0RFVl9TUF9QU1BcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7UGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApIGRldmljZVwmIzM0O1xuICA0MDpcdFx0ZGVmYXVsdCB5XG4gIDQxOlx0XHRkZXBlbmRzIG9uIENSWVBUT19ERVZfQ0NQX0REIFx1MDAyNlx1MDAyNiBYODZfNjQgXHUwMDI2XHUwMDI2IEFNRF9JT01NVVxuICA0MjpcdFx0c2VsZWN0IFBDSV9UU00gaWYgUENJXG4gIDQzOlx0XHRoZWxwXG4gIDQ0Olx0XHQgUHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgQU1EIFBsYXRmb3JtIFNlY3VyaXR5IFByb2Nlc3NvciAoUFNQKS5cbiAgNDU6XHRcdCBUaGUgUFNQIGlzIGEgZGVkaWNhdGVkIHByb2Nlc3NvciB0aGF0IHByb3ZpZGVzIHN1cHBvcnQgZm9yIGtleVxuICA0NjpcdFx0IG1hbmFnZW1lbnQgY29tbWFuZHMgaW4gU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBtb2RlLFxuICA0NzpcdFx0IGFsb25nIHdpdGggc29mdHdhcmUtYmFzZWQgVHJ1c3RlZCBFeGVjdXRpb24gRW52aXJvbm1lbnQgKFRFRSkgdG9cbiAgNDg6XHRcdCBlbmFibGUgdGhpcmQtcGFydHkgdHJ1c3RlZCBhcHBsaWNhdGlvbnMuXG4gIDQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjQwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRGVwZW5kZW5jeSBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ1JZUFRPX0RFVl9TUF9QU1BgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgaXQgcmVsaWVzIG9uIGBDUllQVE9fREVWX0NDUF9ERGAsIGBYODZfNjRgLCBhbmQgYEFNRF9JT01NVWAuIEZpbmUsIG5vIHByb2JsZW0sIHRoYXQmIzM5O3MgZXhwZWN0ZWQuIFNpbmNlIEkga25vdyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHg4Nl82NCwgYFg4Nl82NGAgaXNuJiMzOTt0IGEgc3VycHJpc2UuIFRoYXQgbGVhdmVzIG1lIHRvIGNoZWNrIGBDUllQVE9fREVWX0NDUF9ERGAgYW5kIGBBTURfSU9NTVVgIHRvIG1ha2Ugc3VyZSB0aGV5JiMzOTtyZSBhbGwgc2V0LiBUaGUgaW1tZWRpYXRlIHRoaW5nIHRvIGRvIGlzIGRpdmUgaW50byB0aGUgc3RhdGUgb2YgYENSWVBUT19ERVZfQ0NQX0REYCwgc2luY2UgdGhhdCYjMzk7cyBwcm9iYWJseSB0aGUgbW9zdCByZWxldmFudCB0byBpbnZlc3RpZ2F0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENSWVBUT19ERVZfQ0NQX0REJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnOjI6Y29uZmlnIENSWVBUT19ERVZfQ0NQX0REXG5kcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7U2VjdXJlIFByb2Nlc3NvciBkZXZpY2UgZHJpdmVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDAxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIEtjb25maWcgZmlsZToKCioqTmF2aWdhdGluZyB0aGUgQ0NQIEtjb25maWcgRmlsZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMi4gTXkgaW5pdGlhbCBleHBlY3RhdGlvbiBpcyB0aGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIGRlZmluaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBDQ1AgKENyeXB0b2dyYXBoaWMgQ29wcm9jZXNzb3IpIGRyaXZlci4gR2l2ZW4gdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gbGl2ZXMuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGZvdW5kYXRpb25hbCBidWlsZGluZyBibG9ja3M6IHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBkZWZhdWx0IHNldHRpbmdzLCBhbmQgYW55IGZlYXR1cmUgZmxhZ3MgdGhhdCYjMzk7bGwgZ2l2ZSBtZSBhIGdyYW51bGFyIGNvbnRyb2wgb3ZlciB3aGljaCBDQ1AgZnVuY3Rpb25hbGl0aWVzIGFyZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwga2VybmVsIGJ1aWxkLiBJIHdhbnQgdG8gc2VlIGhvdyBtb2R1bGFyIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgYW5kIGlmIEkgY2FuIGVhc2lseSBzZWxlY3Qgb3IgZGVzZWxlY3Qgc3BlY2lmaWMgcGFydHMgb2YgdGhlIGRyaXZlci4gSSBhbSBnb2luZyB0byBzZWUgaWYgdGhpcyBpcyBhbiBvbGRlciBzdHlsZSBvZiBLY29uZmlnIGFuZCBuZWVkIHRvIGNoZWNrIHdoYXQgdGhlIEtjb25maWcgc3ludGF4IHVzZWQgaXMsIGFuZCBpZiB0aGVyZSBhcmUgYW55IGludGVyZXN0aW5nIHVzZXMgb2YgYHNlbGVjdGAgb3IgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgQ1JZUFRPX0RFVl9DQ1BfRERcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1NlY3VyZSBQcm9jZXNzb3IgZGV2aWNlIGRyaXZlclwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBDUFVfU1VQX0FNRCB8fCBBUk02NFxuICAgNTpcdFx0ZGVmYXVsdCBtXG4gICA2Olx0XHRoZWxwXG4gICA3Olx0XHQgIFByb3ZpZGVzIEFNRCBTZWN1cmUgUHJvY2Vzc29yIGRldmljZSBkcml2ZXIuXG4gICA4Olx0XHQgIElmIHlvdSBjaG9vc2UgJiMzOTtNJiMzOTsgaGVyZSwgdGhpcyBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2NwLlxuICAgOTpcdFxuICAxMDpcdGNvbmZpZyBDUllQVE9fREVWX1NQX0NDUFxuICAxMTpcdFx0Ym9vbCBcJiMzNDtDcnlwdG9ncmFwaGljIENvcHJvY2Vzc29yIGRldmljZVwmIzM0O1xuICAxMjpcdFx0ZGVmYXVsdCB5XG4gIDEzOlx0XHRkZXBlbmRzIG9uIENSWVBUT19ERVZfQ0NQX0REIFx1MDAyNlx1MDAyNiBETUFERVZJQ0VTXG4gIDE0Olx0XHRzZWxlY3QgSFdfUkFORE9NXG4gIDE1Olx0XHRzZWxlY3QgRE1BX0VOR0lORVxuICAxNjpcdFx0c2VsZWN0IENSWVBUT19TSEExXG4gIDE3Olx0XHRzZWxlY3QgQ1JZUFRPX1NIQTI1NlxuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBQcm92aWRlcyB0aGUgc3VwcG9ydCBmb3IgQU1EIENyeXB0b2dyYXBoaWMgQ29wcm9jZXNzb3IgKENDUCkgZGV2aWNlXG4gIDIwOlx0XHQgIHdoaWNoIGNhbiBiZSB1c2VkIHRvIG9mZmxvYWQgZW5jcnlwdGlvbiBvcGVyYXRpb25zIHN1Y2ggYXMgU0hBLCBBRVNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NDgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBSZXZpZXcqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBgQ1JZUFRPX0RFVl9DQ1BfRERgIGZlYXR1cmUuIFRoZSBkZXBlbmRlbmNpZXMgYXJlIGNsZWFyOiBlaXRoZXIgYENQVV9TVVBfQU1EYCBvciBgQVJNNjRgLiBHb29kLCBgQ1BVX1NVUF9BTURgIGlzIHN0YW5kYXJkIGZhcmUgZm9yIHg4Niwgd2hpY2ggaXMgd2hhdCBJJiMzOTttIHByaW1hcmlseSB3b3JraW5nIHdpdGggaGVyZS4KCkFscmlnaHQsIHNvIHRoZSBlbmFibGluZyBjb25maWdzIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBJJiMzOTtsbCBuZWVkIGBLVk1gLCBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIG9idmlvdXNseSBgQ1JZUFRPX0RFVl9DQ1BfRERgIGl0c2VsZiwgYENSWVBUT19ERVZfU1BfUFNQYCB3aGljaCBzZWVtcyByZWxhdGVkLCBhbmQgYEFNRF9JT01NVWAgdG8gbWFuYWdlIHRoZSBJL08uIFNlZW1zIHJlYXNvbmFibGUsIGFsbCBleHBlY3RlZCBjb25maWd1cmF0aW9ucyBpbiB0aGlzIHNwYWNlLgoKSG9sZCBvbi4uLiB0aGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBhcmNoL3g4Ni9LY29uZmlnYCBhbmQgaXMgcmVsYXRlZCB0byBgTUlUSUdBVElPTl9JQlJTX0VOVFJZYC4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIElCUlMgbWl0aWdhdGlvbiBpcyBiZWluZyBoYW5kbGVkLiBMZXQgbWUgbG9vayBpbnRvIGBNSVRJR0FUSU9OX0lCUlNfRU5UUllgLiBHb3R0YSBlbnN1cmUgSSYjMzk7bSBhd2FyZSBvZiB0aGUgZnVsbCBpbXBhY3QgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1JVElHQVRJT05fSUJSU19FTlRSWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZz0yNDg5PWNvbmZpZyBNSVRJR0FUSU9OX0lCUEJfRU5UUllcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTI0OTYtXG5hcmNoL3g4Ni9LY29uZmlnOjI0OTc6Y29uZmlnIE1JVElHQVRJT05fSUJSU19FTlRSWVxuYXJjaC94ODYvS2NvbmZpZy0yNDk4LVx0Ym9vbCBcJiMzNDtFbmFibGUgSUJSUyBvbiBrZXJuZWwgZW50cnlcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwNjgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSB4ODYgS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgYXJjaC94ODYvS2NvbmZpZ2AsIHJpZ2h0IGFyb3VuZCBsaW5lIDI0OTcuIFRoYXQgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBob25lIGluIG9uIHRoZSByZWxldmFudCBzZWN0aW9uLiBJ4oCZbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgaW5mbHVlbmNlIHRoZSBjb2RlIHBhdGggSSYjMzk7bSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gSG9wZWZ1bGx5LCB0aGlzIGlzIHRoZSByaWdodCBzcG90IGZvciB0aGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gdG8gYmUgZGVzY3JpYmVkISBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDk3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI0OTc6XHRjb25maWcgTUlUSUdBVElPTl9JQlJTX0VOVFJZXG4yNDk4Olx0XHRib29sIFwmIzM0O0VuYWJsZSBJQlJTIG9uIGtlcm5lbCBlbnRyeVwmIzM0O1xuMjQ5OTpcdFx0ZGVwZW5kcyBvbiBYODZfNjRcbjI1MDA6XHRcdGRlZmF1bHQgeVxuMjUwMTpcdFx0aGVscFxuMjUwMjpcdFx0ICBDb21waWxlIHRoZSBrZXJuZWwgd2l0aCBzdXBwb3J0IGZvciB0aGUgc3BlY3RyZV92Mj1pYnJzIG1pdGlnYXRpb24uXG4yNTAzOlx0XHQgIFRoaXMgbWl0aWdhdGVzIHNwZWN0cmVfdjIgYXQgZ3JlYXQgY29zdCB0byBwZXJmb3JtYW5jZS4gIE9uIEludGVsLFxuMjUwNDpcdFx0ICBpdCBhbHNvIG1pdGlnYXRlcyByZXRibGVlZC4gIE9uIEFNRC9IeWdvbiwgcmV0YmxlZWQgbWl0aWdhdGlvblxuMjUwNTpcdFx0ICByZXF1aXJlcyBNSVRJR0FUSU9OX1VOUkVUX0VOVFJZIG9yIE1JVElHQVRJT05fSUJQQl9FTlRSWS5cbjI1MDY6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk0NDkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgS1ZNIFNFViBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIHRoaXMgbmV3IGltcGxlbWVudGF0aW9uIGhhcyBLVk0gU0VWIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hpY2ggaXMgZ29vZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUga2V5IGZ1bmN0aW9uYWwgY2hhbmdlIGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlIHRoYXQgY2FuIGJlIHRhcmdldGVkIGZvciBmdXp6aW5nLiBJdCBsb29rcyBsaWtlIHRoZSBLVk0gU0VWIGZlYXR1cmUgdmFsaWRhdGlvbiB3aXRoaW4gYF9fc2V2X2d1ZXN0X2luaXRgIGlzIHRoZSBrZXkgYXJlYSwgYW5kIHRoZSBvYnZpb3VzIGZvY3VzIHN5bWJvbCBpcyBgc2V2X21lbV9lbmNfaW9jdGxgLgoKTGV0IG1lIGNvbmZpcm0gdGhhdCBgc2V2X21lbV9lbmNfaW9jdGxgIGlzIGluZGVlZCB0aGUgc29sZSBlbnRyeSBwb2ludCwgYXQgbGVhc3QgZnJvbSB0aGlzIHBlcnNwZWN0aXZlLiBZZXMsIGl0IGhhbmRsZXMgdGhlIGBLVk1fTUVNT1JZX0VOQ1JZUFRfT1BgIGlvY3RsLCBzbyB0aGF0JiMzOTtzIHRoZSBwcmltYXJ5IGF2ZW51ZS4KCkhtbSwgYW55dGhpbmcgZWxzZSBjaGFuZ2VkPyBBaCwgeWVzLCBpbiBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AsIGBzZXZfaGFyZHdhcmVfc2V0dXBgIGlzIGFkZGluZyBhIGZldyBtb3JlIGZlYXR1cmVzIHRvIGBzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXNgOiBgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkVgLCBgU1ZNX1NFVl9GRUFUX0JUQl9JU09MQVRJT05gLCBgU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0NgLCBhbmQgYFNWTV9TRVZfRkVBVF9JQlBCX09OX0VOVFJZYC4gVGhhdCBtYWtlcyBzZW5zZTsgdGhlc2UgZmVhdHVyZXMgYXJlIG5vdyBpbmNvcnBvcmF0ZWQgaW50byBgS1ZNX1NFVl9JTklUMmAgYW5kIHZhbGlkYXRlZCBpbiBgX19zZXZfZ3Vlc3RfaW5pdGAuIFNvLCBhZ2FpbiwgYHNldl9tZW1fZW5jX2lvY3RsYCBpdCBpcy4gRGVmaW5pdGVseSB0aGUgc3ltYm9sIHRvIGZvY3VzIG9uLgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBlbmFibGVkOiBgS1ZNYCwgYEtWTV9BTURgLCBgS1ZNX0FNRF9TRVZgLCBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBgQ1JZUFRPX0RFVl9TUF9QU1BgLCBhbmQgYEFNRF9JT01NVWAuIEFuZCBub3cgSSB3YW50IHRvIHF1aWNrbHkgY2hlY2sgaWYgYEFNRF9JT01NVWAgZGVwZW5kcyBvbiBhbnl0aGluZyBlbHNlLiBUaGF0IHdpbGwgaW5mbHVlbmNlIGhvdyBJIGFwcHJvYWNoIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFNRF9JT01NVSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjI4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBBTUQgSU9NTVUgRHJpdmVyKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBBTUQgSU9NTVUgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgZHJpdmVycy9pb21tdS9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGNvZGUgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIHRoZSBJbnB1dC9PdXRwdXQgTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCBmdW5jdGlvbmFsaXR5IHNwZWNpZmljIHRvIEFNRCBwbGF0Zm9ybXMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGRyaXZlciYjMzk7cyBzdHJ1Y3R1cmUsIGlkZW50aWZ5IGtleSBlbnRyeSBwb2ludHMgZm9yIGRldmljZSBhc3NpZ25tZW50IGFuZCBpbnRlcnJ1cHQgaGFuZGxpbmcsIGFuZCBsaWtlbHkgdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgcmVnaXN0ZXJzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gc2VhcmNoIGZvciBpbnN0YW5jZXMgb2YgYEFNRF9JT01NVWAgaW4gdGhhdCBkaXJlY3RvcnkuIEkgZmlndXJlIHRoYXQgc2hvdWxkIHNlcnZlIGFzIGEgc29saWQgbGVhZCB0byBkaXJlY3QgbWUgdG93YXJkIHRoZSByZWxldmFudCBmaWxlcyBhbmQgZnVuY3Rpb25zIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBhbmFseXppbmcuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgZGlnZ2luZyBiZWdpbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBTURfSU9NTVUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTItIyBBTUQgSU9NTVUgc3VwcG9ydFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZzozOmNvbmZpZyBBTURfSU9NTVVcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctNC1cdGJvb2wgXCYjMzQ7QU1EIElPTU1VIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTMyLVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZzozMzpjb25maWcgQU1EX0lPTU1VX0lPTU1VRkRcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctMzQtXHRib29sIFwmIzM0O0VuYWJsZSBJT01NVUZEIGZlYXR1cmVzIGZvciBBTUQgSU9NTVUgKEVYUEVSSU1FTlRBTClcJiMzNDtcbi0tXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQyLVxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZzo0Mzpjb25maWcgQU1EX0lPTU1VX0RFQlVHRlNcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctNDQtXHRib29sIFwmIzM0O0VuYWJsZSBBTUQgSU9NTVUgaW50ZXJuYWxzIGluIERlYnVnRlNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2OTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBLY29uZmlnIGZpbGU6CgoqKkRpdmluZyBpbnRvIHRoZSBBTUQgSU9NTVUgS2NvbmZpZyoqCgpPa2F5LCB0aW1lIHRvIGNyYWNrIG9wZW4gdGhlIGBkcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gaHViIGZvciBBTUQmIzM5O3MgSU9NTVUgZHJpdmVyLiBLbm93aW5nIHRoaXMsIEkmIzM5O20gYW50aWNpcGF0aW5nIGEgc3RydWN0dXJlZCBsYXlvdXQ6IGl0IHNob3VsZCBkZWZpbmUgdGhlIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGRlZmF1bHQgc2V0dGluZ3MgdGhhdCBjb250cm9sIHRoZSBpbmNsdXNpb24gYW5kIGJlaGF2aW9yIG9mIHRoZSBBTUQgSU9NTVUgc3VwcG9ydCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipDb25maWcgb3B0aW9uczoqKiBXaGF0IGFyZSB0aGUga2V5IGBDT05GSUdfYCBvcHRpb25zIHRoYXQgZGV2ZWxvcGVycyBjYW4gdHdlYWs/IEkgZXhwZWN0IHRvIHNlZSB0b2dnbGVzIGZvciBlbmFibGluZy9kaXNhYmxpbmcgdGhlIEFNRCBJT01NVSBlbnRpcmVseSwgb3IgZmluZS1ncmFpbmVkIGNvbnRyb2xzIG92ZXIgc3BlY2lmaWMgZmVhdHVyZXMgb3IgaGFyZHdhcmUgYXNwZWN0cy4gSSYjMzk7bSBjdXJpb3VzIGFib3V0IHRoZSBzcGVjaWZpYyBncmFudWxhcml0eS4KKiAgICoqRGVwZW5kZW5jaWVzOioqIFdoYXQgb3RoZXIga2VybmVsIHN1YnN5c3RlbXMgb3IgZmVhdHVyZXMgYXJlIHRoaXMgZHJpdmVyIHJlbGlhbnQgdXBvbj8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgbGlua2luZyBpdCB0byByZWxldmFudCBDUFUsIHBsYXRmb3JtLCBvciBkZXZpY2UgZHJpdmVyIG9wdGlvbnMuIEFyZSB0aGVyZSBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBzZWN1cml0eSBmZWF0dXJlcyBvciB2aXJ0dWFsaXphdGlvbiB0ZWNobm9sb2dpZXM/CiogICAqKkRlZmF1bHQgc2V0dGluZ3M6KiogV2hhdCBhcmUgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zPyBBcmUgdGhleSBjb25zZXJ2YXRpdmUgZGVmYXVsdHM/IERvIHRoZXkgcHJpb3JpdGl6ZSBwZXJmb3JtYW5jZSBvciBjb21wYXRpYmlsaXR5PyBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBzZW5zZSBvZiBob3cgdGhlIGRyaXZlciBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIG91dC1vZi10aGUtYm94LgoqICAgKipIZWxwIHRleHQ6KiogR29vZCBLY29uZmlnIGZpbGVzIGhhdmUgaGVscGZ1bCBkZXNjcmlwdGlvbnMgZm9yIGVhY2ggb3B0aW9uLiBJJiMzOTtsbCBiZSBzY2FubmluZyB0aGVzZSBkZXNjcmlwdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBhbmQgaW1wbGljYXRpb25zIG9mIGVhY2ggY29uZmlndXJhdGlvbiBjaG9pY2UuIEkmIzM5O2xsIGJlIGp1ZGdpbmcgdGhlIHF1YWxpdHkgb2YgZG9jdW1lbnRhdGlvbi4KKiAgICoqQ29uZGl0aW9uYWwgaW5jbHVzaW9uOioqIEFyZSB0aGVyZSBvcHRpb25zIHRoYXQgYXJlIG9ubHkgYXZhaWxhYmxlIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucywgbWF5YmUgc3BlY2lmaWMgQ1BVIG1vZGVscyBvciBoYXJkd2FyZSBjb25maWd1cmF0aW9ucz8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYGlmYCBzdGF0ZW1lbnRzLgoqICAgKipBcmNoaXRlY3R1cmFsIGNvbnNpZGVyYXRpb25zOioqIEkgd2lsbCBiZSBsb29raW5nIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIEFNRCBJT01NVSBnZW5lcmF0aW9ucyBvciBjaGlwc2V0cy4KCkkmIzM5O20gYWxzbyBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgc3R5bGUuIEEgd2VsbC13cml0dGVuIEtjb25maWcgZmlsZSBpcyBhIGpveSB0byByZWFkIOKAkyB3ZWxsLWZvcm1hdHRlZCwgY29uc2lzdGVudCwgYW5kIGNsZWFyLiBJdCYjMzk7bGwgZ2l2ZSBtZSBhIHN0cm9uZyBpbmRpY2F0aW9uIG9mIHRoZSBtYXR1cml0eSBhbmQgbWFpbnRhaW5hYmlsaXR5IG9mIHRoaXMgZHJpdmVyLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvaW9tbXUvYW1kL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjIEFNRCBJT01NVSBzdXBwb3J0XG4gICAzOlx0Y29uZmlnIEFNRF9JT01NVVxuICAgNDpcdFx0Ym9vbCBcJiMzNDtBTUQgSU9NTVUgc3VwcG9ydFwmIzM0O1xuICAgNTpcdFx0c2VsZWN0IFNXSU9UTEJcbiAgIDY6XHRcdHNlbGVjdCBQQ0lfTVNJXG4gICA3Olx0XHRzZWxlY3QgUENJX0FUU1xuICAgODpcdFx0c2VsZWN0IFBDSV9QUklcbiAgIDk6XHRcdHNlbGVjdCBQQ0lfUEFTSURcbiAgMTA6XHRcdHNlbGVjdCBJUlFfTVNJX0xJQlxuICAxMTpcdFx0c2VsZWN0IE1NVV9OT1RJRklFUlxuICAxMjpcdFx0c2VsZWN0IElPTU1VX0FQSVxuICAxMzpcdFx0c2VsZWN0IElPTU1VX0lPVkFcbiAgMTQ6XHRcdHNlbGVjdCBJT01NVV9TVkFcbiAgMTU6XHRcdHNlbGVjdCBJT01NVV9JT1BGXG4gIDE2Olx0XHRzZWxlY3QgSU9NTVVGRF9EUklWRVIgaWYgSU9NTVVGRFxuICAxNzpcdFx0c2VsZWN0IEdFTkVSSUNfUFRcbiAgMTg6XHRcdHNlbGVjdCBJT01NVV9QVFxuICAxOTpcdFx0c2VsZWN0IElPTU1VX1BUX0FNRFYxXG4gIDIwOlx0XHRzZWxlY3QgSU9NTVVfUFRfWDg2XzY0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDgzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGl0JiMzOTtzIHJlbGF0aXZlbHkgc2VsZi1jb250YWluZWQg4oCTIG5vIG1ham9yLCBnbGFyaW5nIGRlcGVuZGVuY2llcyBqdW1wIG91dCBhdCBtZS4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBsb2NhdGVkIHdpdGhpbiBgZHJpdmVycy9pb21tdS9LY29uZmlnYCBpcyBrZXksIGFuZCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGl0cyBhdmFpbGFiaWxpdHkgaXMgbGlua2VkIHRvIGBJT01NVV9TVVBQT1JUYC4gTWFrZXMgc2Vuc2UsIG9mIGNvdXJzZSwgdGhhdCYjMzk7cyB3aGF0IHRoYXQgZGlyZWN0b3J5IGFuZCBmaWxlIGFyZSBmb3IuIFRpbWUgdG8gZ28gdmVyaWZ5IHRoYXQgYElPTU1VX1NVUFBPUlRgIGlzIGluZGVlZCB0aGUgZGVjaWRpbmcgZmFjdG9yIGhlcmUsIGFuZCBzZWUgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgYXJlIGZvciB0aGUgb3ZlcmFsbCBzeXN0ZW0gY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElPTU1VX1NVUFBPUlQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2lvbW11L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pb21tdS9LY29uZmlnPTEwPWNvbmZpZyBJT01NVUZEX0RSSVZFUlxuLS1cbmRyaXZlcnMvaW9tbXUvS2NvbmZpZy0xMy1cbmRyaXZlcnMvaW9tbXUvS2NvbmZpZzoxNDptZW51Y29uZmlnIElPTU1VX1NVUFBPUlRcbmRyaXZlcnMvaW9tbXUvS2NvbmZpZy0xNS1cdGJvb2wgXCYjMzQ7SU9NTVUgSGFyZHdhcmUgU3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTc3NwoJCQkJCQkJb3V0cHV0OiAxOTQKCQkJCQkJCXRob3VnaHRzOiA2NjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneTogS1ZNIFNFViBGZWF0dXJlIFZhbGlkYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZvY3VzIG9uIGZ1enppbmcgYSBzcGVjaWZpYyBhcmVhLCBhbmQgaXQgbG9va3MgbGlrZSBpdCBjZW50ZXJzIGFyb3VuZCBgSU9NTVVfU1VQUE9SVGAuIEkgbmVlZCB0aGF0LiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgaW4gcGxheT8gSSBoYXZlIGBLVk1gLCBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIGBDUllQVE9fREVWX0NDUF9ERGAsIGBDUllQVE9fREVWX1NQX1BTUGAsIGBBTURfSU9NTVVgLCBhbmQgYElPTU1VX1NVUFBPUlRgLgoKUmlnaHQsIG5vdyB3aGF0JiMzOTtzIHRoZSBtb3N0IHJlbGV2YW50ICYjMzQ7Zm9jdXMgc3ltYm9sJiMzNDs/IEFoLCBgc2V2X21lbV9lbmNfaW9jdGxgIHNlZW1zIHRvIGJlIHRoZSBjcml0aWNhbCBvbmUsIGl0JiMzOTtzIHRoZSBtYWluIGhhbmRsZXIuIFdoYXQgYWJvdXQgdGhvc2Ugb3RoZXIgU0VWIHJlbGF0ZWQgc3ltYm9scywgYHNldl9ndWVzdF9pbml0MmAgYW5kIGBfX3Nldl9ndWVzdF9pbml0YD8gVGhleSBsb29rIHN0YXRpYyBhbmQgcG9zc2libHkgaW5saW5lZCwgc28gYHNldl9tZW1fZW5jX2lvY3RsYCBpcyBpbmRlZWQgdGhlIGJlc3QgdGFyZ2V0LgoKQW5kIHllcCwgYHNldl9tZW1fZW5jX2lvY3RsYCAqaXMqIHRoZSBvbmx5IGlvY3RsIGhhbmRsZXIsIHNwZWNpZmljYWxseSwgaXQgaGFuZGxlcyBgS1ZNX01FTU9SWV9FTkNSWVBUX09QYC4gVGhhdCBjb25maXJtcyBpdC4KCk5vdyB0byBzb2xpZGlmeSB0aGlzIGxvZ2ljOiBUaGUgcGF0Y2ggKm1vZGlmaWVzKiB0aGUgdmFsaWRhdGlvbiBvZiBgdm1zYV9mZWF0dXJlc2AgZHVyaW5nIEtWTSBTRVYgZ3Vlc3QgaW5pdGlhbGl6YXRpb24gKHRoZSBgS1ZNX1NFVl9JTklUMmAgaW9jdGwpLiBQbHVzLCBpdCYjMzk7cyBhZGRpbmcgbmV3IFNFVi1TTlAgZmVhdHVyZXMgdG8gdGhlIHN1cHBvcnRlZCBsaXN0LiBUaGlzIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBLVk0gaW9jdGxzLCAqdGhhdCYjMzk7cyogdGhlIGVudHJ5cG9pbnQuIFRoYXQmIzM5O3MgKnBlcmZlY3QqIGZvciBmdXp6aW5nOyB0aGUgbmV3IGZlYXR1cmUgdmFsaWRhdGlvbiBpcyB3aGVyZSB0aGUgYnVncyB3aWxsIGJlIQoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgb3RoZXIgY2hhbmdlcy4gTG9va3MgbGlrZSBgYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmNgIGFuZCBgYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uY2AgYXJlIHJlbGF0ZWQgdG8gbWl0aWdhdGlvbiBsb2dpYyBmb3IgcmV0YmxlZWQsIHNwZWN0cmVfdjIsIGFuZCBBdXRvSUJSUy4gVGhvc2UgYXJlIGJvb3QtdGltZSB0aGluZ3MsIHNvIG5vIHVzZXIgaW5wdXQgdGhlcmUuIEFuZCB0aGUgYEtjb25maWdgIGFuZCBoZWFkZXIgZmlsZXMganVzdCBkZWZpbmUgdGhlIGZlYXR1cmVzIGZvciB0aGUgbWl0aWdhdGlvbnMuIFRoZSBzZWxmdGVzdHMgYXJlIGp1c3QgdXBkYXRpbmcgdGVzdHMuIFNvLCBkZWZpbml0ZWx5IG5vIGZ1enogdGFyZ2V0cyB0aGVyZS4KCkFscmlnaHQsIGJhY2sgdG8gdGhlIGNvbmZpZ3MuIEkga25vdyBJIGhhdmUgdG8gaGF2ZToKKiAgIGBLVk1gCiogICBgS1ZNX0FNRGAKKiAgIGBLVk1fQU1EX1NFVmAKKiAgIGBDUllQVE9fREVWX0NDUF9ERGAgKEltcG9ydGFudCwgaXQmIzM5O3MgYSB0cmlzdGF0ZS4pCiogICBgQ1JZUFRPX0RFVl9TUF9QU1BgIChCb29sKQoqICAgYEFNRF9JT01NVWAgKEJvb2wpCiogICBgSU9NTVVfU1VQUE9SVGAgKEJvb2wpCgpPa2F5LCBJIGhhdmUgbXkgY29yZSBjb25maWd1cmF0aW9ucywgYW5kIEkmIzM5O3ZlIHplcm9lZCBpbiBvbiB0aGUga2V5IGZ1enphYmxlIHRhcmdldC4gVGltZSB0byB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgc3RhcnQgZnV6emluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fQU1EJiMzNDssCiAgICAmIzM0O0tWTV9BTURfU0VWJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfQ0NQX0REJiMzNDssCiAgICAmIzM0O0NSWVBUT19ERVZfU1BfUFNQJiMzNDssCiAgICAmIzM0O0FNRF9JT01NVSYjMzQ7LAogICAgJiMzNDtJT01NVV9TVVBQT1JUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2V2X21lbV9lbmNfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZhbGlkYXRpb24gb2YgYHZtc2FfZmVhdHVyZXNgIGR1cmluZyBLVk0gU0VWIGd1ZXN0IGluaXRpYWxpemF0aW9uIChgS1ZNX1NFVl9JTklUMmAgaW9jdGwpIGFuZCBhZGRzIG5ldyBTRVYtU05QIGZlYXR1cmVzIHRvIHRoZSBzdXBwb3J0ZWQgbGlzdC4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZSBuZXcgZmVhdHVyZSB2YWxpZGF0aW9uIGxvZ2ljIGRvZXNuJiMzOTt0IGludHJvZHVjZSBidWdzLiBUaGUgQ1BVIGJ1ZyBtaXRpZ2F0aW9uIGNoYW5nZXMgYXJlIGJvb3QtdGltZSBsb2dpYyBhbmQgbm90IGRpcmVjdGx5IGZ1enphYmxlIGZyb20gdXNlcnNwYWNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7S1ZNX0FNRCYjMzQ7LAogICAgJiMzNDtLVk1fQU1EX1NFViYjMzQ7LAogICAgJiMzNDtDUllQVE9fREVWX0NDUF9ERCYjMzQ7LAogICAgJiMzNDtDUllQVE9fREVWX1NQX1BTUCYjMzQ7LAogICAgJiMzNDtBTURfSU9NTVUmIzM0OywKICAgICYjMzQ7SU9NTVVfU1VQUE9SVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Nldl9tZW1fZW5jX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIG9mIGB2bXNhX2ZlYXR1cmVzYCBkdXJpbmcgS1ZNIFNFViBndWVzdCBpbml0aWFsaXphdGlvbiAoYEtWTV9TRVZfSU5JVDJgIGlvY3RsKSBhbmQgYWRkcyBuZXcgU0VWLVNOUCBmZWF0dXJlcyB0byB0aGUgc3VwcG9ydGVkIGxpc3QuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgbmV3IGZlYXR1cmUgdmFsaWRhdGlvbiBsb2dpYyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYnVncy4gVGhlIENQVSBidWcgbWl0aWdhdGlvbiBjaGFuZ2VzIGFyZSBib290LXRpbWUgbG9naWMgYW5kIG5vdCBkaXJlY3RseSBmdXp6YWJsZSBmcm9tIHVzZXJzcGFjZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBDUFUgbWl0aWdhdGlvbiBzZWxlY3Rpb24gbG9naWMgKElCUlMsIEF1dG9JQlJTLCBTRVYtU05QKSBhbmQgS1ZNIFNFViBpbml0aWFsaXphdGlvbiBmZWF0dXJlIHZhbGlkYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuIFRoZSBtb2RpZmllZCBkYXRhIHN0cnVjdHVyZXMgKGxpa2UgYHN0cnVjdCBrdm1fc2V2X2luaXRgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBgY29weV9mcm9tX3VzZXJgIGJlZm9yZSBiZWluZyByZWFkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgZXhwb3NlZCBieSB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5YjAwZjNmNjYzODY1NmYxNTBmOGQ5OGFmNmU0YzllMDQyNjg3MDljCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMjI6NTc6MTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZwppbmRleCAxNWZkOWVjNWVjYWNiLi5iOWE3ZGRlZjRjYmFiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L0tjb25maWcKQEAgLTI0OTYsMTIgJiM0MzsyNDk2LDEzIEBAIGNvbmZpZyBNSVRJR0FUSU9OX0lCUEJfRU5UUlkKIAogY29uZmlnIE1JVElHQVRJT05fSUJSU19FTlRSWQogCWJvb2wgJiMzNDtFbmFibGUgSUJSUyBvbiBrZXJuZWwgZW50cnkmIzM0OwotCWRlcGVuZHMgb24gQ1BVX1NVUF9JTlRFTCAmYW1wOyZhbXA7IFg4Nl82NAomIzQzOwlkZXBlbmRzIG9uIFg4Nl82NAogCWRlZmF1bHQgeQogCWhlbHAKIAkgIENvbXBpbGUgdGhlIGtlcm5lbCB3aXRoIHN1cHBvcnQgZm9yIHRoZSBzcGVjdHJlX3YyPWlicnMgbWl0aWdhdGlvbi4KLQkgIFRoaXMgbWl0aWdhdGVzIGJvdGggc3BlY3RyZV92MiBhbmQgcmV0YmxlZWQgYXQgZ3JlYXQgY29zdCB0bwotCSAgcGVyZm9ybWFuY2UuCiYjNDM7CSAgVGhpcyBtaXRpZ2F0ZXMgc3BlY3RyZV92MiBhdCBncmVhdCBjb3N0IHRvIHBlcmZvcm1hbmNlLiAgT24gSW50ZWwsCiYjNDM7CSAgaXQgYWxzbyBtaXRpZ2F0ZXMgcmV0YmxlZWQuICBPbiBBTUQvSHlnb24sIHJldGJsZWVkIG1pdGlnYXRpb24KJiM0MzsJICByZXF1aXJlcyBNSVRJR0FUSU9OX1VOUkVUX0VOVFJZIG9yIE1JVElHQVRJT05fSUJQQl9FTlRSWS4KIAogY29uZmlnIE1JVElHQVRJT05fU1JTTwogCWJvb2wgJiMzNDtNaXRpZ2F0ZSBzcGVjdWxhdGl2ZSBSQVMgb3ZlcmZsb3cgb24gQU1EJiMzNDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oCmluZGV4IGY3MGVlNzRiNWY5MjEuLjNhYWQyYjUzZjU5YmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaApAQCAtNDcyLDYgJiM0Mzs0NzIsNyBAQAogI2RlZmluZSBYODZfRkVBVFVSRV9BTExPV0VEX1NFVl9GRUFUVVJFUyAoMTkqMzImIzQzOzI3KSAvKiBBbGxvd2VkIFNFViBGZWF0dXJlcyAqLwogI2RlZmluZSBYODZfRkVBVFVSRV9TVlNNCQkoMTkqMzImIzQzOzI4KSAvKiAmIzM0O3N2c20mIzM0OyBTVlNNIHByZXNlbnQgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfSFZfSU5VU0VfV1JfQUxMT1dFRAkoMTkqMzImIzQzOzMwKSAvKiBBbGxvdyBXcml0ZSB0byBpbi11c2UgaHlwZXJ2aXNvci1vd25lZCBwYWdlcyAqLwomIzQzOyNkZWZpbmUgWDg2X0ZFQVRVUkVfU05QX0lCUEJfT05fRU5UUlkJKDE5KjMyJiM0MzszMSkgLyogU0VWLVNOUCBJQlBCIG9uIFZNIEVudHJ5ICovCiAKIC8qIEFNRC1kZWZpbmVkIEV4dGVuZGVkIEZlYXR1cmUgMiBFQVgsIENQVUlEIGxldmVsIDB4ODAwMDAwMjEgKEVBWCksIHdvcmQgMjAgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfTk9fTkVTVEVEX0RBVEFfQlAJKDIwKjMyJiM0MzsgMCkgLyogTm8gTmVzdGVkIERhdGEgQnJlYWtwb2ludHMgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKaW5kZXggYWE2MzQzMWJhOTJjMy4uMGRhMjIzNGI3MWM2OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKQEAgLTMwNSwxMSAmIzQzOzMwNSwxOCBAQCBzdGF0aWNfYXNzZXJ0KChBVklDX01BWF9QSFlTSUNBTF9JRCAmYW1wOyBBVklDX1BIWVNJQ0FMX01BWF9JTkRFWF9NQVNLKSA9PSBBVklDX01BWF8KIHN0YXRpY19hc3NlcnQoKFgyQVZJQ19NQVhfUEhZU0lDQUxfSUQgJmFtcDsgQVZJQ19QSFlTSUNBTF9NQVhfSU5ERVhfTUFTSykgPT0gWDJBVklDX01BWF9QSFlTSUNBTF9JRCk7CiBzdGF0aWNfYXNzZXJ0KChYMkFWSUNfNEtfTUFYX1BIWVNJQ0FMX0lEICZhbXA7IEFWSUNfUEhZU0lDQUxfTUFYX0lOREVYX01BU0spID09IFgyQVZJQ180S19NQVhfUEhZU0lDQUxfSUQpOwogCi0jZGVmaW5lIFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFCQkJCUJJVCgwKQotI2RlZmluZSBTVk1fU0VWX0ZFQVRfUkVTVFJJQ1RFRF9JTkpFQ1RJT04JCUJJVCgzKQotI2RlZmluZSBTVk1fU0VWX0ZFQVRfQUxURVJOQVRFX0lOSkVDVElPTgkJQklUKDQpCi0jZGVmaW5lIFNWTV9TRVZfRkVBVF9ERUJVR19TV0FQCQkJCUJJVCg1KQotI2RlZmluZSBTVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQwkJCQlCSVQoOSkKJiM0MzsjZGVmaW5lIFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFCQkJCUJJVF9VTEwoMCkKJiM0MzsjZGVmaW5lIFNWTV9TRVZfRkVBVF9SRVNUUklDVEVEX0lOSkVDVElPTgkJQklUX1VMTCgzKQomIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX0FMVEVSTkFURV9JTkpFQ1RJT04JCUJJVF9VTEwoNCkKJiM0MzsjZGVmaW5lIFNWTV9TRVZfRkVBVF9ERUJVR19TV0FQCQkJCUJJVF9VTEwoNSkKJiM0MzsjZGVmaW5lIFNWTV9TRVZfRkVBVF9CVEJfSVNPTEFUSU9OCQkJQklUX1VMTCg3KQomIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0MJCQkJQklUX1VMTCg5KQomIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX0lCUEJfT05fRU5UUlkJCQlCSVRfVUxMKDIxKQomIzQzOwomIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NOUF9PTkxZX01BU0sJKFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFIHwgXAomIzQzOwkJCQkJIFNWTV9TRVZfRkVBVF9CVEJfSVNPTEFUSU9OIHwgXAomIzQzOwkJCQkJIFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDIHwgXAomIzQzOwkJCQkJIFNWTV9TRVZfRkVBVF9JQlBCX09OX0VOVFJZKQogCiAjZGVmaW5lIFZNQ0JfQUxMT1dFRF9TRVZfRkVBVFVSRVNfVkFMSUQJCQlCSVRfVUxMKDYzKQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1Z3MuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYnVncy5jCmluZGV4IDU2ZWFjNTYxMWMzMTguLjA4NzgwZTBkMzdlYzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYnVncy5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYnVncy5jCkBAIC0xMzA1LDcgJiM0MzsxMzA1LDE0IEBAIHN0YXRpYyB2b2lkIF9faW5pdCByZXRibGVlZF91cGRhdGVfbWl0aWdhdGlvbih2b2lkKQogCiAJLyoKIAkgKiBMZXQgSUJSUyB0cnVtcCBhbGwgb24gSW50ZWwgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGVmZmVjdHMgb2YgdGhlCi0JICogcmV0YmxlZWQ9IGNtZGxpbmUgb3B0aW9uIGV4Y2VwdCBmb3IgY2FsbCBkZXB0aCBiYXNlZCBzdHVmZmluZwomIzQzOwkgKiByZXRibGVlZD0gY21kbGluZSBvcHRpb24gZXhjZXB0IGZvciBjYWxsIGRlcHRoIGJhc2VkIHN0dWZmaW5nLgomIzQzOwkgKgomIzQzOwkgKiBPbiBBTUQvSHlnb24sIGxlZ2FjeSBTUEVDX0NUUkwuSUJSUyB0b2dnbGluZyBkb2VzIG5vdCBtaXRpZ2F0ZSB0aGUKJiM0MzsJICogQnJhbmNoIFR5cGUgQ29uZnVzaW9uIFJFVEJsZWVkIHZhcmlhbnQ6IFJFVCBwcmVkaWN0aW9uIGNvbWVzIGZyb20KJiM0MzsJICogdGhlIFJldHVybiBBZGRyZXNzIFByZWRpY3Rvciwgbm90IHRoZSByZXN0cmljdGVkIGluZGlyZWN0IGJyYW5jaAomIzQzOwkgKiBwcmVkaWN0b3JzIHRoYXQgSUJSUyBjb250cm9scy4gIFNvIGtlZXAgdGhpcyBJbnRlbC1vbmx5IGFuZCBsZWF2ZQomIzQzOwkgKiBBTUQmIzM5O3Mgc29mdHdhcmUgcmV0dXJuLXRodW5rIG1pdGlnYXRpb24gKFVOUkVUL0lCUEIpIGluIHBsYWNlIGV2ZW4KJiM0MzsJICogd2hlbiBzcGVjdHJlX3YyPWlicnMgaXMgc2VsZWN0ZWQuCiAJICovCiAJaWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKSB7CiAJCXN3aXRjaCAoc3BlY3RyZV92Ml9lbmFibGVkKSB7CkBAIC0xNjcyLDYgJiM0MzsxNjc5LDcgQEAgc3RhdGljIGlubGluZSBib29sIHJldHBvbGluZV9zZXFfZW5hYmxlZCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfQogI2RlZmluZSBTUEVDVFJFX1YyX0xGRU5DRV9NU0cgJiMzNDtXQVJOSU5HOiBMRkVOQ0UgbWl0aWdhdGlvbiBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHRoaXMgQ1BVLCBkYXRhIGxlYWtzIHBvc3NpYmxlIVxuJiMzNDsKICNkZWZpbmUgU1BFQ1RSRV9WMl9FSUJSU19FQlBGX01TRyAmIzM0O1dBUk5JTkc6IFVucHJpdmlsZWdlZCBlQlBGIGlzIGVuYWJsZWQgd2l0aCBlSUJSUyBvbiwgZGF0YSBsZWFrcyBwb3NzaWJsZSB2aWEgU3BlY3RyZSB2MiBCSEIgYXR0YWNrcyFcbiYjMzQ7CiAjZGVmaW5lIFNQRUNUUkVfVjJfRUlCUlNfTEZFTkNFX0VCUEZfU01UX01TRyAmIzM0O1dBUk5JTkc6IFVucHJpdmlsZWdlZCBlQlBGIGlzIGVuYWJsZWQgd2l0aCBlSUJSUyYjNDM7TEZFTkNFIG1pdGlnYXRpb24gYW5kIFNNVCwgZGF0YSBsZWFrcyBwb3NzaWJsZSB2aWEgU3BlY3RyZSB2MiBCSEIgYXR0YWNrcyFcbiYjMzQ7CiYjNDM7I2RlZmluZSBTUEVDVFJFX1YyX0VJQlJTX1NOUF9QRVJGX01TRyAmIzM0O1dBUk5JTkc6IGVJQlJTIG1pdGlnYXRpb24gZW5hYmxlcyBBdXRvSUJSUyBvbiBTRVYtU05QIGVuYWJsZWQgQ1BVLCB0aGlzIG1heSBjYXVzZSBwZXJmb3JtYW5jZSBsb3NzXG4mIzM0OwogI2RlZmluZSBTUEVDVFJFX1YyX0lCUlNfUEVSRl9NU0cgJiMzNDtXQVJOSU5HOiBJQlJTIG1pdGlnYXRpb24gc2VsZWN0ZWQgb24gRW5oYW5jZWQgSUJSUyBDUFUsIHRoaXMgbWF5IGNhdXNlIHVubmVjZXNzYXJ5IHBlcmZvcm1hbmNlIGxvc3NcbiYjMzQ7CiAKICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTEwKQEAgLTIxNjUsMTEgJiM0MzsyMTczLDYgQEAgc3RhdGljIHZvaWQgX19pbml0IHNwZWN0cmVfdjJfc2VsZWN0X21pdGlnYXRpb24odm9pZCkKIAkJc3BlY3RyZV92Ml9jbWQgPSBTUEVDVFJFX1YyX0NNRF9BVVRPOwogCX0KIAotCWlmIChzcGVjdHJlX3YyX2NtZCA9PSBTUEVDVFJFX1YyX0NNRF9JQlJTICZhbXA7JmFtcDsgYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwpIHsKLQkJcHJfZXJyKCYjMzQ7SUJSUyBzZWxlY3RlZCBidXQgbm90IEludGVsIENQVS4gU3dpdGNoaW5nIHRvIEFVVE8gc2VsZWN0XG4mIzM0Oyk7Ci0JCXNwZWN0cmVfdjJfY21kID0gU1BFQ1RSRV9WMl9DTURfQVVUTzsKLQl9Ci0KIAlpZiAoc3BlY3RyZV92Ml9jbWQgPT0gU1BFQ1RSRV9WMl9DTURfSUJSUyAmYW1wOyZhbXA7ICFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSUJSUykpIHsKIAkJcHJfZXJyKCYjMzQ7SUJSUyBzZWxlY3RlZCBidXQgQ1BVIGRvZXNuJiMzOTt0IGhhdmUgSUJSUy4gU3dpdGNoaW5nIHRvIEFVVE8gc2VsZWN0XG4mIzM0Oyk7CiAJCXNwZWN0cmVfdjJfY21kID0gU1BFQ1RSRV9WMl9DTURfQVVUTzsKQEAgLTIxOTQsNyAmIzQzOzIxOTcsMTUgQEAgc3RhdGljIHZvaWQgX19pbml0IHNwZWN0cmVfdjJfc2VsZWN0X21pdGlnYXRpb24odm9pZCkKIAkJCWJyZWFrOwogCQlmYWxsdGhyb3VnaDsKIAljYXNlIFNQRUNUUkVfVjJfQ01EX0ZPUkNFOgotCQlpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0lCUlNfRU5IQU5DRUQpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogUHJlZmVyIHJldHBvbGluZSB3aGVuIFNOUCBpcyBlbmFibGVkIGJlY2F1c2UgQXV0b0lCUlMKJiM0MzsJCSAqIGRlZ3JhZGVzIGhvc3QgdXNlcnNwYWNlIGluZGlyZWN0IGJyYW5jaCBwZXJmb3JtYW5jZS4gIE9ubHkKJiM0MzsJCSAqIGRvIHNvIGlmIHJldHBvbGluZSBpcyBhY3R1YWxseSBidWlsdCBpbiwgb3RoZXJ3aXNlIEF1dG9JQlJTCiYjNDM7CQkgKiBpcyBiZXR0ZXIgdGhhbiBsZWF2aW5nIHRoZSBzeXN0ZW0gdW5taXRpZ2F0ZWQuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSUJSU19FTkhBTkNFRCkgJmFtcDsmYW1wOwomIzQzOwkJICAgICEoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NFVl9TTlApICZhbXA7JmFtcDsKJiM0MzsJCSAgICAgIElTX0VOQUJMRUQoQ09ORklHX01JVElHQVRJT05fUkVUUE9MSU5FKSkpIHsKIAkJCXNwZWN0cmVfdjJfZW5hYmxlZCA9IFNQRUNUUkVfVjJfRUlCUlM7CiAJCQlicmVhazsKIAkJfQpAQCAtMjI3NywxNSAmIzQzOzIyODgsMjQgQEAgc3RhdGljIHZvaWQgX19pbml0IHNwZWN0cmVfdjJfYXBwbHlfbWl0aWdhdGlvbih2b2lkKQogCWlmIChzcGVjdHJlX3YyX2VuYWJsZWQgPT0gU1BFQ1RSRV9WMl9FSUJSUyAmYW1wOyZhbXA7IHVucHJpdmlsZWdlZF9lYnBmX2VuYWJsZWQoKSkKIAkJcHJfZXJyKFNQRUNUUkVfVjJfRUlCUlNfRUJQRl9NU0cpOwogCi0JaWYgKHNwZWN0cmVfdjJfaW5faWJyc19tb2RlKHNwZWN0cmVfdjJfZW5hYmxlZCkpIHsKLQkJaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BVVRPSUJSUykpIHsKLQkJCW1zcl9zZXRfYml0KE1TUl9FRkVSLCBfRUZFUl9BVVRPSUJSUyk7Ci0JCX0gZWxzZSB7Ci0JCQl4ODZfc3BlY19jdHJsX2Jhc2UgfD0gU1BFQ19DVFJMX0lCUlM7Ci0JCQl1cGRhdGVfc3BlY19jdHJsKHg4Nl9zcGVjX2N0cmxfYmFzZSk7Ci0JCX0KJiM0MzsJLyoKJiM0MzsJICogT24gQXV0b0lCUlMtY2FwYWJsZSBDUFVzLCBlSUJSUyBpcyBlbmFibGVkIHRocm91Z2ggRUZFUi5BVVRPSUJSUwomIzQzOwkgKiByYXRoZXIgdGhhbiBTUEVDX0NUUkwuSUJSUy4gIExlZ2FjeSBzcGVjdHJlX3YyPWlicnMga2VlcHMgdXNpbmcKJiM0MzsJICogU1BFQ19DVFJMLklCUlMgZXZlbiB0aGVyZSwgYXMgaXQgbmVlZHMgdG8gYmUgdG9nZ2xlZCBvbiBrZXJuZWwKJiM0MzsJICogZW50cnkvZXhpdC4KJiM0MzsJICovCiYjNDM7CWlmIChzcGVjdHJlX3YyX2luX2VpYnJzX21vZGUoc3BlY3RyZV92Ml9lbmFibGVkKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVVUT0lCUlMpKSB7CiYjNDM7CQltc3Jfc2V0X2JpdChNU1JfRUZFUiwgX0VGRVJfQVVUT0lCUlMpOwomIzQzOwl9IGVsc2UgaWYgKHNwZWN0cmVfdjJfaW5faWJyc19tb2RlKHNwZWN0cmVfdjJfZW5hYmxlZCkpIHsKJiM0MzsJCXg4Nl9zcGVjX2N0cmxfYmFzZSB8PSBTUEVDX0NUUkxfSUJSUzsKJiM0MzsJCXVwZGF0ZV9zcGVjX2N0cmwoeDg2X3NwZWNfY3RybF9iYXNlKTsKIAl9CiAKJiM0MzsJaWYgKHNwZWN0cmVfdjJfaW5fZWlicnNfbW9kZShzcGVjdHJlX3YyX2VuYWJsZWQpICZhbXA7JmFtcDsKJiM0MzsJICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9TRVZfU05QKSkKJiM0MzsJCXByX3dhcm4oU1BFQ1RSRV9WMl9FSUJSU19TTlBfUEVSRl9NU0cpOwomIzQzOwogCXN3aXRjaCAoc3BlY3RyZV92Ml9lbmFibGVkKSB7CiAJY2FzZSBTUEVDVFJFX1YyX05PTkU6CiAJCXJldHVybjsKQEAgLTMyODQsNiAmIzQzOzMzMDQsMTcgQEAgdm9pZCBfX2luaXQgY3B1X3NlbGVjdF9taXRpZ2F0aW9ucyh2b2lkKQogCQl4ODZfc3BlY19jdHJsX2Jhc2UgJmFtcDs9IH5TUEVDX0NUUkxfTUlUSUdBVElPTlNfTUFTSzsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogTGlrZXdpc2UgZm9yIEVGRVIuQVVUT0lCUlM6IGhlYWRfNjQuUyBwcmVzZXJ2ZXMgdGhlIGluY29taW5nIEVGRVIKJiM0MzsJICogYml0cywgc28gYSBrZXhlYyBmcm9tIGEga2VybmVsIHRoYXQgcmFuIGluIEF1dG9JQlJTIG1vZGUgY2FycmllcyB0aGUKJiM0MzsJICogYml0IGludG8gdGhpcyBvbmUuICBDbGVhciBpdCBhbmQgbGV0IHRoZSBtaXRpZ2F0aW9uIHNlbGVjdGlvbiBiZWxvdwomIzQzOwkgKiByZWRpc2NvdmVyIGl0LiAgVGhpcyBhbHNvIHJ1bnMgYmVmb3JlIGluaXRfcmVhbF9tb2RlKCkgc25hcHNob3RzCiYjNDM7CSAqIEVGRVIgZm9yIHRoZSBBUCB0cmFtcG9saW5lLCBzbyBBUHMgaW5oZXJpdCB3aGF0ZXZlciB0aGlzIGtlcm5lbAomIzQzOwkgKiBzZXR0bGVzIG9uIHJhdGhlciB0aGFuIHRoZSBwcmV2aW91cyBrZXJuZWwmIzM5O3MgY2hvaWNlLgomIzQzOwkgKi8KJiM0MzsJaWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfQVVUT0lCUlMpKQomIzQzOwkJbXNyX2NsZWFyX2JpdChNU1JfRUZFUiwgX0VGRVJfQVVUT0lCUlMpOwomIzQzOwogCXg4Nl9hcmNoX2NhcF9tc3IgPSB4ODZfcmVhZF9hcmNoX2NhcF9tc3IoKTsKIAogCWNwdV9wcmludF9hdHRhY2tfdmVjdG9ycygpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKaW5kZXggYzczNTI4MjdmNDkxZC4uYzU2OGQ3NDI4MmE4NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCkBAIC0xNDk2LDEzICYjNDM7MTQ5Niw5IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBjcHVfc2V0X2J1Z19iaXRzKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIAkvKgogCSAqIEFNRCYjMzk7cyBBdXRvSUJSUyBpcyBlcXVpdmFsZW50IHRvIEludGVsJiMzOTtzIGVJQlJTIC0gdXNlIHRoZSBJbnRlbCBmZWF0dXJlCiAJICogZmxhZyBhbmQgcHJvdGVjdCBmcm9tIHZlbmRvci1zcGVjaWZpYyBidWdzIHZpYSB0aGUgd2hpdGVsaXN0LgotCSAqCi0JICogRG9uJiMzOTt0IHVzZSBBdXRvSUJSUyB3aGVuIFNOUCBpcyBlbmFibGVkIGJlY2F1c2UgaXQgZGVncmFkZXMgaG9zdAotCSAqIHVzZXJzcGFjZSBpbmRpcmVjdCBicmFuY2ggcGVyZm9ybWFuY2UuCiAJICovCiAJaWYgKCh4ODZfYXJjaF9jYXBfbXNyICZhbXA7IEFSQ0hfQ0FQX0lCUlNfQUxMKSB8fAotCSAgICAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9BVVRPSUJSUykgJmFtcDsmYW1wOwotCSAgICAgIWNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU0VWX1NOUCkpKSB7CiYjNDM7CSAgICBjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0FVVE9JQlJTKSkgewogCQlzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX0lCUlNfRU5IQU5DRUQpOwogCQlpZiAoIWNwdV9tYXRjaGVzKGNwdV92dWxuX3doaXRlbGlzdCwgTk9fRUlCUlNfUEJSU0IpICZhbXA7JmFtcDsKIAkJICAgICEoeDg2X2FyY2hfY2FwX21zciAmYW1wOyBBUkNIX0NBUF9QQlJTQl9OTykpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuYwppbmRleCA1NzA1NzIzZjFmNDEyLi41M2NjNmQwNDM4ODM2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmMKQEAgLTUwNiw3ICYjNDM7NTA2LDcgQEAgc3RhdGljIGludCBfX3Nldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghc25wX2FjdGl2ZSkKLQkJdmFsaWRfdm1zYV9mZWF0dXJlcyAmYW1wOz0gflNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDOwomIzQzOwkJdmFsaWRfdm1zYV9mZWF0dXJlcyAmYW1wOz0gflNWTV9TRVZfRkVBVF9TTlBfT05MWV9NQVNLOwogCiAJaWYgKGRhdGEtJmd0O3Ztc2FfZmVhdHVyZXMgJmFtcDsgfnZhbGlkX3Ztc2FfZmVhdHVyZXMpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzI1Nyw4ICYjNDM7MzI1NywyMyBAQCB2b2lkIF9faW5pdCBzZXZfaGFyZHdhcmVfc2V0dXAodm9pZCkKIAkgICAgY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9OT19ORVNURURfREFUQV9CUCkpCiAJCXNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUDsKIAotCWlmIChzZXZfc25wX2VuYWJsZWQgJmFtcDsmYW1wOyB0c2Nfa2h6ICZhbXA7JmFtcDsgY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TTlBfU0VDVVJFX1RTQykpCi0JCXNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQzsKJiM0MzsJaWYgKHNldl9zbnBfZW5hYmxlZCkgewomIzQzOwkJc2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIFVubGlrZSBTZWN1cmUgVFNDIGFuZCBJQlBCLW9uLUVudHJ5IGJlbG93LCBCVEIgSXNvbGF0aW9uIGhhcwomIzQzOwkJICogbm8gaG9zdCBlbnVtZXJhdGlvbiBiaXQgdG8gZ2F0ZSBvbjogdGhlIEFQTSBkZWZpbmVzIGl0IGFzCiYjNDM7CQkgKiBhcmNoaXRlY3R1cmFsbHkgcHJlc2VudCBvbiBldmVyeSBTRVYtU05QLWNhcGFibGUgcHJvY2Vzc29yLgomIzQzOwkJICogSWYgU05QIGlzIHN1cHBvcnRlZCwgQlRCIElzb2xhdGlvbiBpcyBhdmFpbGFibGUuCiYjNDM7CQkgKi8KJiM0MzsJCXNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfQlRCX0lTT0xBVElPTjsKJiM0MzsKJiM0MzsJCWlmICh0c2Nfa2h6ICZhbXA7JmFtcDsgY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TTlBfU0VDVVJFX1RTQykpCiYjNDM7CQkJc2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDOwomIzQzOwomIzQzOwkJaWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU05QX0lCUEJfT05fRU5UUlkpKQomIzQzOwkJCXNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfSUJQQl9PTl9FTlRSWTsKJiM0MzsJfQogfQogCiB2b2lkIHNldl9oYXJkd2FyZV91bnNldHVwKHZvaWQpCmRpZmYgLS1naXQgYS90b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oIGIvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaAppbmRleCA2NTQ3YzBhZWU0NWI3Li42MzRjZDA5MzY2ZGE2IDEwMDY0NAotLS0gYS90b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmgKQEAgLTQ2MCw2ICYjNDM7NDYwLDcgQEAKICNkZWZpbmUgWDg2X0ZFQVRVUkVfQUxMT1dFRF9TRVZfRkVBVFVSRVMgKDE5KjMyJiM0MzsyNykgLyogQWxsb3dlZCBTRVYgRmVhdHVyZXMgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfU1ZTTQkJKDE5KjMyJiM0MzsyOCkgLyogJiMzNDtzdnNtJiMzNDsgU1ZTTSBwcmVzZW50ICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0hWX0lOVVNFX1dSX0FMTE9XRUQJKDE5KjMyJiM0MzszMCkgLyogQWxsb3cgV3JpdGUgdG8gaW4tdXNlIGh5cGVydmlzb3Itb3duZWQgcGFnZXMgKi8KJiM0MzsjZGVmaW5lIFg4Nl9GRUFUVVJFX1NOUF9JQlBCX09OX0VOVFJZCSgxOSozMiYjNDM7MzEpIC8qIFNFVi1TTlAgSUJQQiBvbiBWTSBFbnRyeSAqLwogCiAvKiBBTUQtZGVmaW5lZCBFeHRlbmRlZCBGZWF0dXJlIDIgRUFYLCBDUFVJRCBsZXZlbCAweDgwMDAwMDIxIChFQVgpLCB3b3JkIDIwICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX05PX05FU1RFRF9EQVRBX0JQCSgyMCozMiYjNDM7IDApIC8qIE5vIE5lc3RlZCBEYXRhIEJyZWFrcG9pbnRzICovCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYwppbmRleCA4N2JmZjRmYmI3ZWQ1Li4zZjU5MmUyNDVhNjZkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmMKQEAgLTEzLDE3ICYjNDM7MTMsMjUgQEAKICNpbmNsdWRlICYjMzQ7c3ZtX3V0aWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2tzZWxmdGVzdC5oJiMzNDsKIAotI2RlZmluZSBTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUCAzMnUKJiM0MzsjZGVmaW5lIFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFCQlCSVRfVUxMKDApCiYjNDM7I2RlZmluZSBTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUAkJQklUX1VMTCg1KQomIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX0JUQl9JU09MQVRJT04JQklUX1VMTCg3KQomIzQzOyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0MJCUJJVF9VTEwoOSkKJiM0MzsjZGVmaW5lIFNWTV9TRVZfRkVBVF9JQlBCX09OX0VOVFJZCUJJVF9VTEwoMjEpCiYjNDM7CiYjNDM7LyogRmVhdHVyZXMgdmFsaWQgb25seSBmb3IgU05QIGd1ZXN0cywgcmVqZWN0ZWQgZm9yIFNFVi1FUyBhbmQgYmVsb3cuICovCiYjNDM7I2RlZmluZSBTTlBfT05MWV9GRUFUVVJFUwkJKFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFIHwgXAomIzQzOwkJCQkJIFNWTV9TRVZfRkVBVF9CVEJfSVNPTEFUSU9OIHwgXAomIzQzOwkJCQkJIFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDIHwgXAomIzQzOwkJCQkJIFNWTV9TRVZfRkVBVF9JQlBCX09OX0VOVFJZKQogCiAvKgogICogU29tZSBmZWF0dXJlcyBtYXkgaGF2ZSBoaWRkZW4gZGVwZW5kZW5jaWVzLCBvciBtYXkgb25seSB3b3JrCiAgKiBmb3IgY2VydGFpbiBWTSB0eXBlcy4gIEVyciBvbiB0aGUgc2lkZSBvZiBzYWZldHkgYW5kIGRvbiYjMzk7dAogICogZXhwZWN0IHRoYXQgYWxsIHN1cHBvcnRlZCBmZWF0dXJlcyBjYW4gYmUgcGFzc2VkIG9uZSBieSBvbmUKICAqIHRvIEtWTV9TRVZfSU5JVDIuCi0gKgotICogKFdlbGwsIHJpZ2h0IG5vdyB0aGVyZSYjMzk7cyBvbmx5IG9uZS4uLikKICAqLwotI2RlZmluZSBLTk9XTl9GRUFUVVJFUyBTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUAomIzQzOyNkZWZpbmUgS05PV05fRkVBVFVSRVMJCShTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUCB8IFNOUF9PTkxZX0ZFQVRVUkVTKQogCiBpbnQga3ZtX2ZkOwogdTY0IHN1cHBvcnRlZF92bXNhX2ZlYXR1cmVzOwpAQCAtMTA4LDcgJiM0MzsxMTYsNyBAQCB2b2lkIHRlc3RfZmVhdHVyZXModTMyIHZtX3R5cGUsIHU2NCBzdXBwb3J0ZWRfZmVhdHVyZXMpCiAJCWlmICghKHN1cHBvcnRlZF9mZWF0dXJlcyAmYW1wOyBCSVRfVUxMKGkpKSkKIAkJCXRlc3RfaW5pdDJfaW52YWxpZCh2bV90eXBlLAogCQkJCSZhbXA7KHN0cnVjdCBrdm1fc2V2X2luaXQpeyAudm1zYV9mZWF0dXJlcyA9IEJJVF9VTEwoaSkgfSwKLQkJCQkmIzM0O3Vua25vd24gZmVhdHVyZSYjMzQ7KTsKJiM0MzsJCQkJJiMzNDt1bmtub3duIG9yIHVuc3VwcG9ydGVkIGZlYXR1cmUgZm9yIFZNIHR5cGUmIzM0Oyk7CiAJCWVsc2UgaWYgKEtOT1dOX0ZFQVRVUkVTICZhbXA7IEJJVF9VTEwoaSkpCiAJCQl0ZXN0X2luaXQyKHZtX3R5cGUsCiAJCQkJJmFtcDsoc3RydWN0IGt2bV9zZXZfaW5pdCl7IC52bXNhX2ZlYXR1cmVzID0gQklUX1VMTChpKSB9KTsKQEAgLTE1Nyw3ICYjNDM7MTY1LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCXRlc3RfZmVhdHVyZXMoS1ZNX1g4Nl9TRVZfVk0sIDApOwogCWlmIChoYXZlX3Nldl9lcykKLQkJdGVzdF9mZWF0dXJlcyhLVk1fWDg2X1NFVl9FU19WTSwgc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMpOwomIzQzOwkJdGVzdF9mZWF0dXJlcyhLVk1fWDg2X1NFVl9FU19WTSwgc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgJmFtcDsgflNOUF9PTkxZX0ZFQVRVUkVTKTsKIAlpZiAoaGF2ZV9zbnApCiAJCXRlc3RfZmVhdHVyZXMoS1ZNX1g4Nl9TTlBfVk0sIHN1cHBvcnRlZF92bXNhX2ZlYXR1cmVzKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI3MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQ2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIENoYW5nZXMgZm9yIHg4NiBDUFUgYW5kIEtWTSBTRVYgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0d2Vha2luZyB0aGUgeDg2IENQVSBmZWF0dXJlcyBhbmQgdGhlIEtWTSBTRVYgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcy4gVGhlIGNoYW5nZXMgYXJlIHNwcmVhZCBhY3Jvc3MgYSBidW5jaCBvZiBmaWxlczogYGFyY2gveDg2L0tjb25maWdgLCBzb21lIGhlYWRlciBmaWxlcyBsaWtlIGBjcHVmZWF0dXJlcy5oYCBhbmQgYHN2bS5oYCwgYW5kIHRoZW4gaW50byBzb21lIGtlcm5lbCBjb2RlLCBgYnVncy5jYCwgYGNvbW1vbi5jYCwgYW5kIGBzZXYuY2AsIGFsb25nIHdpdGggYSBmZXcgc2VsZnRlc3RzLiBTZWVtcyBsaWtlIGEgcHJldHR5IGZvY3VzZWQgdXBkYXRlLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHNjYW4gZm9yIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIGJlaW5nIHNlbnQgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGJlIG1pc3VzZWQsIGFuZCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IG1pZ2h0IGJlIGRlcGVuZGVudCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4KCkl0IGxvb2tzIGxpa2UgdGhlIG1lYXQgb2YgdGhlIHBhdGNoIGlzIGFib3V0IENQVSBtaXRpZ2F0aW9uIGZsYWdzIOKAkyB0aGluZ3MgbGlrZSBJQlJTLCBBdXRvSUJSUywgU0VWLVNOUCwgYW5kIElCUEIgb24gZW50cnkuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhhdCBgc2V2LmNgIGZpbGUgbm93LCBzcGVjaWZpY2FsbHkgdGhhdCBzbmlwcGV0IGFyb3VuZCBsaW5lIDUwNi4gSSBzZWUgdGhleSYjMzk7dmUgY2hhbmdlZCBob3cgYHZhbGlkX3Ztc2FfZmVhdHVyZXNgIGlzIGhhbmRsZWQuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgbWFza2luZyBvdXQgYFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDYCBpZiBTTlAgaXNuJiMzOTt0IGFjdGl2ZS4gQnV0IHRoZW4gSSYjMzk7bSBzZWVpbmcgYFNWTV9TRVZfRkVBVF9TTlBfT05MWV9NQVNLYCB3aGljaCBzZWVtcyBsaWtlIHNvbWV0aGluZyBpbnRlcmVzdGluZyB0byBsb29rIGludG8uCgpIb2xkIG9uIGEgbWludXRlLi4uIGBkYXRhYCBpcyBhIHBvaW50ZXIgdG8gYHN0cnVjdCBrdm1fc2V2X2luaXRgLCBhbmQgaXQmIzM5O3MgYmVpbmcgY29waWVkIGZyb20gdXNlciBzcGFjZSwgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LiBEb2VzIHRoaXMgZnVuY3Rpb24sIG9yIGFueSBzdWJzZXF1ZW50IGNhbGxzIHRvIHRoaXMsIHJldHVybiBhbnl0aGluZyB0byB1c2VyIHNwYWNlPyBJIG5lZWQgdG8gdHJhY2sgdGhlIGRhdGEgZmxvdy4gVGhhdCBjb3VsZCBiZSBhIGtleSBwb2ludCBvZiBhdHRhY2sgaWYgbm90IGNvcnJlY3RseSBoYW5kbGVkLiBMZXQgbWUgbG9vayBhdCB0aGUgYF9fc2V2X2d1ZXN0X2luaXRgIGZ1bmN0aW9uIGFuZCBpdHMgY2FsbGVyLCB3aGljaCBpcyBgc2V2X2d1ZXN0X2luaXRgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBJIG5lZWQgdG8gc2VlIGlmIGFueSBvZiB0aGF0IHVzZXItc3BhY2Utc3VwcGxpZWQgZGF0YSBpcyBiZWluZyB1c2VkIHRvIHdyaXRlIGJhY2sgdG8gdXNlciBzcGFjZS4gSXQgY291bGQgYmUgYW4gaW50ZXJlc3RpbmcgdmVjdG9yIHRvIGV4cGxvaXQgaWYgdGhleSYjMzk7cmUgbm90IGNhcmVmdWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc2V2X2d1ZXN0X2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9zdm0vc2V2LmM9NDc3PXN0YXRpYyB2b2lkIHNucF9ndWVzdF9yZXFfY2xlYW51cChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTAtXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjQ5MTpzdGF0aWMgaW50IF9fc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTQ5Mi1cdFx0XHQgICAgc3RydWN0IGt2bV9zZXZfaW5pdCAqZGF0YSxcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTU4MT1zdGF0aWMgaW50IHNldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjAwLVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MDE6XHRyZXR1cm4gX19zZXZfZ3Vlc3RfaW5pdChrdm0sIGFyZ3AsIFx1MDAyNmRhdGEsIHZtX3R5cGUpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MDItfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NjA0PXN0YXRpYyBpbnQgc2V2X2d1ZXN0X2luaXQyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjE4LVxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MTk6XHRyZXR1cm4gX19zZXZfZ3Vlc3RfaW5pdChrdm0sIGFyZ3AsIFx1MDAyNmRhdGEsIGt2bS1cdTAwM2VhcmNoLnZtX3R5cGUpO1xuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MjAtfVxuLS1cbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzM0OD12b2lkIHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTMzNTQtXHQgKlxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzozMzU1Olx0ICogQ2hlY2tpbmcgZm9yIFNFViYjNDM7IG91dHNpZGUgb2Yga3ZtLVx1MDAzZWxvY2sgaXMgc2FmZSBhcyBfX3Nldl9ndWVzdF9pbml0KClcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzM1Ni1cdCAqIGNhbiBvbmx5IGJlIGRvbmUgYmVmb3JlIHZDUFVzIGFyZSBjcmVhdGVkLCBjYWNoZXMgY2FuIGJlIGluY29oZXJlbnRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgwMgoJCQkJCQkJb3V0cHV0OiAxMzYKCQkJCQkJCXRob3VnaHRzOiAyNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS01TQU4gTmVjZXNzaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZm9jdXNpbmcgb24gQ1BVIGZlYXR1cmUgaGFuZGxpbmcsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBTRVYtU05QIGFuZCBJQlJTLiBUaGUgYmVhdXR5IG9mIGl0IGlzIHRoYXQgaXQmIzM5O3MgKnB1cmVseSogYWJvdXQgdGhlIGxvZ2ljIGZvciBDUFUgbWl0aWdhdGlvbiBzZWxlY3Rpb24gYW5kIHZhbGlkYXRpbmcgS1ZNIFNFViBpbml0aWFsaXphdGlvbiBmZWF0dXJlcy4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdGhhdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyB0byB1c2VyIHNwYWNlLiBObyBuZXcgYWxsb2NhdGlvbnMgYXJlIGhhcHBlbmluZywgYW5kIGNydWNpYWxseSwgSSYjMzk7bSBzZWVpbmcgbm90aGluZyB0aGF0IGhpbnRzIGF0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgZGF0YS0mZ3Q7dm1zYV9mZWF0dXJlc2AgYml0LiBBaCwgcmlnaHQsIHRoYXQgY29tZXMgZnJvbSB0aGUgYHN0cnVjdCBrdm1fc2V2X2luaXRgIHN0cnVjdHVyZSwgd2hpY2ggaXMgY29waWVkIGZyb20gdXNlciBzcGFjZS4gQW5kIEkmIzM5O20gbG9va2luZyByaWdodCBhdCB0aGUgYGNvcHlfZnJvbV91c2VyYCBjYWxsIGluIGBzZXZfZ3Vlc3RfaW5pdDJgOgoKYGBgYwpzdGF0aWMgaW50IHNldl9ndWVzdF9pbml0MihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncCkKewogICAgc3RydWN0IGt2bV9zZXZfaW5pdCBkYXRhOwoKICAgIGlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2RhdGEsICh2b2lkIF9fdXNlciAqKSh1aW50cHRyX3QpYXJncC0mZ3Q7ZGF0YSwgc2l6ZW9mKGRhdGEpKSkKICAgICAgICByZXR1cm4gLUVGQVVMVDsKCiAgICByZXR1cm4gX19zZXZfZ3Vlc3RfaW5pdChrdm0sIGFyZ3AsICZhbXA7ZGF0YSwga3ZtLSZndDthcmNoLnZtX3R5cGUpOwp9CmBgYAoKT2theSwgZ29vZC4gYGRhdGFgIGlzICpmdWxseSogaW5pdGlhbGl6ZWQgYnkgdGhhdCBgY29weV9mcm9tX3VzZXJgIGNhbGwuIFRoZXJlJiMzOTtzIG5vIHdheSB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGxlYWtlZCB0aHJvdWdoIHRoYXQgcGF0aC4gVGhpcyBpcyBzb2xpZC4KClRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpcyB0aGF0IEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4gSSYjMzk7bSBnb2luZyB0byBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBDUFUgbWl0aWdhdGlvbiBzZWxlY3Rpb24gbG9naWMgKElCUlMsIEF1dG9JQlJTLCBTRVYtU05QKSBhbmQgS1ZNIFNFViBpbml0aWFsaXphdGlvbiBmZWF0dXJlIHZhbGlkYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuIFRoZSBtb2RpZmllZCBkYXRhIHN0cnVjdHVyZXMgKGxpa2UgYHN0cnVjdCBrdm1fc2V2X2luaXRgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBgY29weV9mcm9tX3VzZXJgIGJlZm9yZSBiZWluZyByZWFkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgZXhwb3NlZCBieSB0aGVzZSBjaGFuZ2VzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQ1BVIG1pdGlnYXRpb24gc2VsZWN0aW9uIGxvZ2ljIChJQlJTLCBBdXRvSUJSUywgU0VWLVNOUCkgYW5kIEtWTSBTRVYgaW5pdGlhbGl6YXRpb24gZmVhdHVyZSB2YWxpZGF0aW9uLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgb3IgaW5pdGlhbGl6ZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLiBUaGUgbW9kaWZpZWQgZGF0YSBzdHJ1Y3R1cmVzIChsaWtlIGBzdHJ1Y3Qga3ZtX3Nldl9pbml0YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIGZyb20gdXNlciBzcGFjZSB2aWEgYGNvcHlfZnJvbV91c2VyYCBiZWZvcmUgYmVpbmcgcmVhZC4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIGV4cG9zZWQgYnkgdGhlc2UgY2hhbmdlcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTc6MTIuMjI0NzcwNzkzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2ODkyMTU2Mzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIkNSWVBUT19ERVZfQ0NQX0REXCIsXG4gICAgXCJDUllQVE9fREVWX1NQX1BTUFwiLFxuICAgIFwiQU1EX0lPTU1VXCIsXG4gICAgXCJJT01NVV9TVVBQT1JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2V2X21lbV9lbmNfaW9jdGxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIENQVSBtaXRpZ2F0aW9uIHNlbGVjdGlvbiBsb2dpYyAoSUJSUywgQXV0b0lCUlMsIFNFVi1TTlApIGFuZCBLVk0gU0VWIGluaXRpYWxpemF0aW9uIGZlYXR1cmUgdmFsaWRhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIG1vZGlmaWVkIGRhdGEgc3RydWN0dXJlcyAobGlrZSBgc3RydWN0IGt2bV9zZXZfaW5pdGApIGFyZSBmdWxseSBpbml0aWFsaXplZCBmcm9tIHVzZXIgc3BhY2UgdmlhIGBjb3B5X2Zyb21fdXNlcmAgYmVmb3JlIGJlaW5nIHJlYWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZhbGlkYXRpb24gb2YgYHZtc2FfZmVhdHVyZXNgIGR1cmluZyBLVk0gU0VWIGd1ZXN0IGluaXRpYWxpemF0aW9uIChgS1ZNX1NFVl9JTklUMmAgaW9jdGwpIGFuZCBhZGRzIG5ldyBTRVYtU05QIGZlYXR1cmVzIHRvIHRoZSBzdXBwb3J0ZWQgbGlzdC4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZSBuZXcgZmVhdHVyZSB2YWxpZGF0aW9uIGxvZ2ljIGRvZXNuJ3QgaW50cm9kdWNlIGJ1Z3MuIFRoZSBDUFUgYnVnIG1pdGlnYXRpb24gY2hhbmdlcyBhcmUgYm9vdC10aW1lIGxvZ2ljIGFuZCBub3QgZGlyZWN0bHkgZnV6emFibGUgZnJvbSB1c2Vyc3BhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU3OjEyLjIyNDc3NTMyM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMDA3NTg2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDliMDBmM2Y2NjM4NjU2ZjE1MGY4ZDk4YWY2ZTRjOWUwNDI2ODcwOWNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgMjYgMjI6NTc6MTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWdcXG5pbmRleCAxNWZkOWVjNWVjYWNiLi5iOWE3ZGRlZjRjYmFiIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L0tjb25maWdcXG4rKysgYi9hcmNoL3g4Ni9LY29uZmlnXFxuQEAgLTI0OTYsMTIgKzI0OTYsMTMgQEAgY29uZmlnIE1JVElHQVRJT05fSUJQQl9FTlRSWVxcbiBcXG4gY29uZmlnIE1JVElHQVRJT05fSUJSU19FTlRSWVxcbiBcXHRib29sIFxcXCJFbmFibGUgSUJSUyBvbiBrZXJuZWwgZW50cnlcXFwiXFxuLVxcdGRlcGVuZHMgb24gQ1BVX1NVUF9JTlRFTCBcXHUwMDI2XFx1MDAyNiBYODZfNjRcXG4rXFx0ZGVwZW5kcyBvbiBYODZfNjRcXG4gXFx0ZGVmYXVsdCB5XFxuIFxcdGhlbHBcXG4gXFx0ICBDb21waWxlIHRoZSBrZXJuZWwgd2l0aCBzdXBwb3J0IGZvciB0aGUgc3BlY3RyZV92Mj1pYnJzIG1pdGlnYXRpb24uXFxuLVxcdCAgVGhpcyBtaXRpZ2F0ZXMgYm90aCBzcGVjdHJlX3YyIGFuZCByZXRibGVlZCBhdCBncmVhdCBjb3N0IHRvXFxuLVxcdCAgcGVyZm9ybWFuY2UuXFxuK1xcdCAgVGhpcyBtaXRpZ2F0ZXMgc3BlY3RyZV92MiBhdCBncmVhdCBjb3N0IHRvIHBlcmZvcm1hbmNlLiAgT24gSW50ZWwsXFxuK1xcdCAgaXQgYWxzbyBtaXRpZ2F0ZXMgcmV0YmxlZWQuICBPbiBBTUQvSHlnb24sIHJldGJsZWVkIG1pdGlnYXRpb25cXG4rXFx0ICByZXF1aXJlcyBNSVRJR0FUSU9OX1VOUkVUX0VOVFJZIG9yIE1JVElHQVRJT05fSUJQQl9FTlRSWS5cXG4gXFxuIGNvbmZpZyBNSVRJR0FUSU9OX1NSU09cXG4gXFx0Ym9vbCBcXFwiTWl0aWdhdGUgc3BlY3VsYXRpdmUgUkFTIG92ZXJmbG93IG9uIEFNRFxcXCJcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcXG5pbmRleCBmNzBlZTc0YjVmOTIxLi4zYWFkMmI1M2Y1OWJmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXFxuQEAgLTQ3Miw2ICs0NzIsNyBAQFxcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0FMTE9XRURfU0VWX0ZFQVRVUkVTICgxOSozMisyNykgLyogQWxsb3dlZCBTRVYgRmVhdHVyZXMgKi9cXG4gI2RlZmluZSBYODZfRkVBVFVSRV9TVlNNXFx0XFx0KDE5KjMyKzI4KSAvKiBcXFwic3ZzbVxcXCIgU1ZTTSBwcmVzZW50ICovXFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfSFZfSU5VU0VfV1JfQUxMT1dFRFxcdCgxOSozMiszMCkgLyogQWxsb3cgV3JpdGUgdG8gaW4tdXNlIGh5cGVydmlzb3Itb3duZWQgcGFnZXMgKi9cXG4rI2RlZmluZSBYODZfRkVBVFVSRV9TTlBfSUJQQl9PTl9FTlRSWVxcdCgxOSozMiszMSkgLyogU0VWLVNOUCBJQlBCIG9uIFZNIEVudHJ5ICovXFxuIFxcbiAvKiBBTUQtZGVmaW5lZCBFeHRlbmRlZCBGZWF0dXJlIDIgRUFYLCBDUFVJRCBsZXZlbCAweDgwMDAwMDIxIChFQVgpLCB3b3JkIDIwICovXFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfTk9fTkVTVEVEX0RBVEFfQlBcXHQoMjAqMzIrIDApIC8qIE5vIE5lc3RlZCBEYXRhIEJyZWFrcG9pbnRzICovXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcXG5pbmRleCBhYTYzNDMxYmE5MmMzLi4wZGEyMjM0YjcxYzY5IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcXG5AQCAtMzA1LDExICszMDUsMTggQEAgc3RhdGljX2Fzc2VydCgoQVZJQ19NQVhfUEhZU0lDQUxfSUQgXFx1MDAyNiBBVklDX1BIWVNJQ0FMX01BWF9JTkRFWF9NQVNLKSA9PSBBVklDX01BWF9cXG4gc3RhdGljX2Fzc2VydCgoWDJBVklDX01BWF9QSFlTSUNBTF9JRCBcXHUwMDI2IEFWSUNfUEhZU0lDQUxfTUFYX0lOREVYX01BU0spID09IFgyQVZJQ19NQVhfUEhZU0lDQUxfSUQpO1xcbiBzdGF0aWNfYXNzZXJ0KChYMkFWSUNfNEtfTUFYX1BIWVNJQ0FMX0lEIFxcdTAwMjYgQVZJQ19QSFlTSUNBTF9NQVhfSU5ERVhfTUFTSykgPT0gWDJBVklDXzRLX01BWF9QSFlTSUNBTF9JRCk7XFxuIFxcbi0jZGVmaW5lIFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFXFx0XFx0XFx0XFx0QklUKDApXFxuLSNkZWZpbmUgU1ZNX1NFVl9GRUFUX1JFU1RSSUNURURfSU5KRUNUSU9OXFx0XFx0QklUKDMpXFxuLSNkZWZpbmUgU1ZNX1NFVl9GRUFUX0FMVEVSTkFURV9JTkpFQ1RJT05cXHRcXHRCSVQoNClcXG4tI2RlZmluZSBTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUFxcdFxcdFxcdFxcdEJJVCg1KVxcbi0jZGVmaW5lIFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDXFx0XFx0XFx0XFx0QklUKDkpXFxuKyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkVcXHRcXHRcXHRcXHRCSVRfVUxMKDApXFxuKyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1JFU1RSSUNURURfSU5KRUNUSU9OXFx0XFx0QklUX1VMTCgzKVxcbisjZGVmaW5lIFNWTV9TRVZfRkVBVF9BTFRFUk5BVEVfSU5KRUNUSU9OXFx0XFx0QklUX1VMTCg0KVxcbisjZGVmaW5lIFNWTV9TRVZfRkVBVF9ERUJVR19TV0FQXFx0XFx0XFx0XFx0QklUX1VMTCg1KVxcbisjZGVmaW5lIFNWTV9TRVZfRkVBVF9CVEJfSVNPTEFUSU9OXFx0XFx0XFx0QklUX1VMTCg3KVxcbisjZGVmaW5lIFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDXFx0XFx0XFx0XFx0QklUX1VMTCg5KVxcbisjZGVmaW5lIFNWTV9TRVZfRkVBVF9JQlBCX09OX0VOVFJZXFx0XFx0XFx0QklUX1VMTCgyMSlcXG4rXFxuKyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NOUF9PTkxZX01BU0tcXHQoU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkUgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBTVk1fU0VWX0ZFQVRfQlRCX0lTT0xBVElPTiB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgU1ZNX1NFVl9GRUFUX0lCUEJfT05fRU5UUlkpXFxuIFxcbiAjZGVmaW5lIFZNQ0JfQUxMT1dFRF9TRVZfRkVBVFVSRVNfVkFMSURcXHRcXHRcXHRCSVRfVUxMKDYzKVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1Z3MuY1xcbmluZGV4IDU2ZWFjNTYxMWMzMTguLjA4NzgwZTBkMzdlYzcgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmNcXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1Z3MuY1xcbkBAIC0xMzA1LDcgKzEzMDUsMTQgQEAgc3RhdGljIHZvaWQgX19pbml0IHJldGJsZWVkX3VwZGF0ZV9taXRpZ2F0aW9uKHZvaWQpXFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBMZXQgSUJSUyB0cnVtcCBhbGwgb24gSW50ZWwgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGVmZmVjdHMgb2YgdGhlXFxuLVxcdCAqIHJldGJsZWVkPSBjbWRsaW5lIG9wdGlvbiBleGNlcHQgZm9yIGNhbGwgZGVwdGggYmFzZWQgc3R1ZmZpbmdcXG4rXFx0ICogcmV0YmxlZWQ9IGNtZGxpbmUgb3B0aW9uIGV4Y2VwdCBmb3IgY2FsbCBkZXB0aCBiYXNlZCBzdHVmZmluZy5cXG4rXFx0ICpcXG4rXFx0ICogT24gQU1EL0h5Z29uLCBsZWdhY3kgU1BFQ19DVFJMLklCUlMgdG9nZ2xpbmcgZG9lcyBub3QgbWl0aWdhdGUgdGhlXFxuK1xcdCAqIEJyYW5jaCBUeXBlIENvbmZ1c2lvbiBSRVRCbGVlZCB2YXJpYW50OiBSRVQgcHJlZGljdGlvbiBjb21lcyBmcm9tXFxuK1xcdCAqIHRoZSBSZXR1cm4gQWRkcmVzcyBQcmVkaWN0b3IsIG5vdCB0aGUgcmVzdHJpY3RlZCBpbmRpcmVjdCBicmFuY2hcXG4rXFx0ICogcHJlZGljdG9ycyB0aGF0IElCUlMgY29udHJvbHMuICBTbyBrZWVwIHRoaXMgSW50ZWwtb25seSBhbmQgbGVhdmVcXG4rXFx0ICogQU1EJ3Mgc29mdHdhcmUgcmV0dXJuLXRodW5rIG1pdGlnYXRpb24gKFVOUkVUL0lCUEIpIGluIHBsYWNlIGV2ZW5cXG4rXFx0ICogd2hlbiBzcGVjdHJlX3YyPWlicnMgaXMgc2VsZWN0ZWQuXFxuIFxcdCAqL1xcbiBcXHRpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwpIHtcXG4gXFx0XFx0c3dpdGNoIChzcGVjdHJlX3YyX2VuYWJsZWQpIHtcXG5AQCAtMTY3Miw2ICsxNjc5LDcgQEAgc3RhdGljIGlubGluZSBib29sIHJldHBvbGluZV9zZXFfZW5hYmxlZCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxcbiAjZGVmaW5lIFNQRUNUUkVfVjJfTEZFTkNFX01TRyBcXFwiV0FSTklORzogTEZFTkNFIG1pdGlnYXRpb24gaXMgbm90IHJlY29tbWVuZGVkIGZvciB0aGlzIENQVSwgZGF0YSBsZWFrcyBwb3NzaWJsZSFcXFxcblxcXCJcXG4gI2RlZmluZSBTUEVDVFJFX1YyX0VJQlJTX0VCUEZfTVNHIFxcXCJXQVJOSU5HOiBVbnByaXZpbGVnZWQgZUJQRiBpcyBlbmFibGVkIHdpdGggZUlCUlMgb24sIGRhdGEgbGVha3MgcG9zc2libGUgdmlhIFNwZWN0cmUgdjIgQkhCIGF0dGFja3MhXFxcXG5cXFwiXFxuICNkZWZpbmUgU1BFQ1RSRV9WMl9FSUJSU19MRkVOQ0VfRUJQRl9TTVRfTVNHIFxcXCJXQVJOSU5HOiBVbnByaXZpbGVnZWQgZUJQRiBpcyBlbmFibGVkIHdpdGggZUlCUlMrTEZFTkNFIG1pdGlnYXRpb24gYW5kIFNNVCwgZGF0YSBsZWFrcyBwb3NzaWJsZSB2aWEgU3BlY3RyZSB2MiBCSEIgYXR0YWNrcyFcXFxcblxcXCJcXG4rI2RlZmluZSBTUEVDVFJFX1YyX0VJQlJTX1NOUF9QRVJGX01TRyBcXFwiV0FSTklORzogZUlCUlMgbWl0aWdhdGlvbiBlbmFibGVzIEF1dG9JQlJTIG9uIFNFVi1TTlAgZW5hYmxlZCBDUFUsIHRoaXMgbWF5IGNhdXNlIHBlcmZvcm1hbmNlIGxvc3NcXFxcblxcXCJcXG4gI2RlZmluZSBTUEVDVFJFX1YyX0lCUlNfUEVSRl9NU0cgXFxcIldBUk5JTkc6IElCUlMgbWl0aWdhdGlvbiBzZWxlY3RlZCBvbiBFbmhhbmNlZCBJQlJTIENQVSwgdGhpcyBtYXkgY2F1c2UgdW5uZWNlc3NhcnkgcGVyZm9ybWFuY2UgbG9zc1xcXFxuXFxcIlxcbiBcXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxcbkBAIC0yMTY1LDExICsyMTczLDYgQEAgc3RhdGljIHZvaWQgX19pbml0IHNwZWN0cmVfdjJfc2VsZWN0X21pdGlnYXRpb24odm9pZClcXG4gXFx0XFx0c3BlY3RyZV92Ml9jbWQgPSBTUEVDVFJFX1YyX0NNRF9BVVRPO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoc3BlY3RyZV92Ml9jbWQgPT0gU1BFQ1RSRV9WMl9DTURfSUJSUyBcXHUwMDI2XFx1MDAyNiBib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCkge1xcbi1cXHRcXHRwcl9lcnIoXFxcIklCUlMgc2VsZWN0ZWQgYnV0IG5vdCBJbnRlbCBDUFUuIFN3aXRjaGluZyB0byBBVVRPIHNlbGVjdFxcXFxuXFxcIik7XFxuLVxcdFxcdHNwZWN0cmVfdjJfY21kID0gU1BFQ1RSRV9WMl9DTURfQVVUTztcXG4tXFx0fVxcbi1cXG4gXFx0aWYgKHNwZWN0cmVfdjJfY21kID09IFNQRUNUUkVfVjJfQ01EX0lCUlMgXFx1MDAyNlxcdTAwMjYgIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9JQlJTKSkge1xcbiBcXHRcXHRwcl9lcnIoXFxcIklCUlMgc2VsZWN0ZWQgYnV0IENQVSBkb2Vzbid0IGhhdmUgSUJSUy4gU3dpdGNoaW5nIHRvIEFVVE8gc2VsZWN0XFxcXG5cXFwiKTtcXG4gXFx0XFx0c3BlY3RyZV92Ml9jbWQgPSBTUEVDVFJFX1YyX0NNRF9BVVRPO1xcbkBAIC0yMTk0LDcgKzIxOTcsMTUgQEAgc3RhdGljIHZvaWQgX19pbml0IHNwZWN0cmVfdjJfc2VsZWN0X21pdGlnYXRpb24odm9pZClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGZhbGx0aHJvdWdoO1xcbiBcXHRjYXNlIFNQRUNUUkVfVjJfQ01EX0ZPUkNFOlxcbi1cXHRcXHRpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0lCUlNfRU5IQU5DRUQpKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFByZWZlciByZXRwb2xpbmUgd2hlbiBTTlAgaXMgZW5hYmxlZCBiZWNhdXNlIEF1dG9JQlJTXFxuK1xcdFxcdCAqIGRlZ3JhZGVzIGhvc3QgdXNlcnNwYWNlIGluZGlyZWN0IGJyYW5jaCBwZXJmb3JtYW5jZS4gIE9ubHlcXG4rXFx0XFx0ICogZG8gc28gaWYgcmV0cG9saW5lIGlzIGFjdHVhbGx5IGJ1aWx0IGluLCBvdGhlcndpc2UgQXV0b0lCUlNcXG4rXFx0XFx0ICogaXMgYmV0dGVyIHRoYW4gbGVhdmluZyB0aGUgc3lzdGVtIHVubWl0aWdhdGVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9JQlJTX0VOSEFOQ0VEKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIShib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU0VWX1NOUCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICAgSVNfRU5BQkxFRChDT05GSUdfTUlUSUdBVElPTl9SRVRQT0xJTkUpKSkge1xcbiBcXHRcXHRcXHRzcGVjdHJlX3YyX2VuYWJsZWQgPSBTUEVDVFJFX1YyX0VJQlJTO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbkBAIC0yMjc3LDE1ICsyMjg4LDI0IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzcGVjdHJlX3YyX2FwcGx5X21pdGlnYXRpb24odm9pZClcXG4gXFx0aWYgKHNwZWN0cmVfdjJfZW5hYmxlZCA9PSBTUEVDVFJFX1YyX0VJQlJTIFxcdTAwMjZcXHUwMDI2IHVucHJpdmlsZWdlZF9lYnBmX2VuYWJsZWQoKSlcXG4gXFx0XFx0cHJfZXJyKFNQRUNUUkVfVjJfRUlCUlNfRUJQRl9NU0cpO1xcbiBcXG4tXFx0aWYgKHNwZWN0cmVfdjJfaW5faWJyc19tb2RlKHNwZWN0cmVfdjJfZW5hYmxlZCkpIHtcXG4tXFx0XFx0aWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BVVRPSUJSUykpIHtcXG4tXFx0XFx0XFx0bXNyX3NldF9iaXQoTVNSX0VGRVIsIF9FRkVSX0FVVE9JQlJTKTtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0eDg2X3NwZWNfY3RybF9iYXNlIHw9IFNQRUNfQ1RSTF9JQlJTO1xcbi1cXHRcXHRcXHR1cGRhdGVfc3BlY19jdHJsKHg4Nl9zcGVjX2N0cmxfYmFzZSk7XFxuLVxcdFxcdH1cXG4rXFx0LypcXG4rXFx0ICogT24gQXV0b0lCUlMtY2FwYWJsZSBDUFVzLCBlSUJSUyBpcyBlbmFibGVkIHRocm91Z2ggRUZFUi5BVVRPSUJSU1xcbitcXHQgKiByYXRoZXIgdGhhbiBTUEVDX0NUUkwuSUJSUy4gIExlZ2FjeSBzcGVjdHJlX3YyPWlicnMga2VlcHMgdXNpbmdcXG4rXFx0ICogU1BFQ19DVFJMLklCUlMgZXZlbiB0aGVyZSwgYXMgaXQgbmVlZHMgdG8gYmUgdG9nZ2xlZCBvbiBrZXJuZWxcXG4rXFx0ICogZW50cnkvZXhpdC5cXG4rXFx0ICovXFxuK1xcdGlmIChzcGVjdHJlX3YyX2luX2VpYnJzX21vZGUoc3BlY3RyZV92Ml9lbmFibGVkKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FVVE9JQlJTKSkge1xcbitcXHRcXHRtc3Jfc2V0X2JpdChNU1JfRUZFUiwgX0VGRVJfQVVUT0lCUlMpO1xcbitcXHR9IGVsc2UgaWYgKHNwZWN0cmVfdjJfaW5faWJyc19tb2RlKHNwZWN0cmVfdjJfZW5hYmxlZCkpIHtcXG4rXFx0XFx0eDg2X3NwZWNfY3RybF9iYXNlIHw9IFNQRUNfQ1RSTF9JQlJTO1xcbitcXHRcXHR1cGRhdGVfc3BlY19jdHJsKHg4Nl9zcGVjX2N0cmxfYmFzZSk7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChzcGVjdHJlX3YyX2luX2VpYnJzX21vZGUoc3BlY3RyZV92Ml9lbmFibGVkKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NFVl9TTlApKVxcbitcXHRcXHRwcl93YXJuKFNQRUNUUkVfVjJfRUlCUlNfU05QX1BFUkZfTVNHKTtcXG4rXFxuIFxcdHN3aXRjaCAoc3BlY3RyZV92Ml9lbmFibGVkKSB7XFxuIFxcdGNhc2UgU1BFQ1RSRV9WMl9OT05FOlxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTMyODQsNiArMzMwNCwxNyBAQCB2b2lkIF9faW5pdCBjcHVfc2VsZWN0X21pdGlnYXRpb25zKHZvaWQpXFxuIFxcdFxcdHg4Nl9zcGVjX2N0cmxfYmFzZSBcXHUwMDI2PSB+U1BFQ19DVFJMX01JVElHQVRJT05TX01BU0s7XFxuIFxcdH1cXG4gXFxuK1xcdC8qXFxuK1xcdCAqIExpa2V3aXNlIGZvciBFRkVSLkFVVE9JQlJTOiBoZWFkXzY0LlMgcHJlc2VydmVzIHRoZSBpbmNvbWluZyBFRkVSXFxuK1xcdCAqIGJpdHMsIHNvIGEga2V4ZWMgZnJvbSBhIGtlcm5lbCB0aGF0IHJhbiBpbiBBdXRvSUJSUyBtb2RlIGNhcnJpZXMgdGhlXFxuK1xcdCAqIGJpdCBpbnRvIHRoaXMgb25lLiAgQ2xlYXIgaXQgYW5kIGxldCB0aGUgbWl0aWdhdGlvbiBzZWxlY3Rpb24gYmVsb3dcXG4rXFx0ICogcmVkaXNjb3ZlciBpdC4gIFRoaXMgYWxzbyBydW5zIGJlZm9yZSBpbml0X3JlYWxfbW9kZSgpIHNuYXBzaG90c1xcbitcXHQgKiBFRkVSIGZvciB0aGUgQVAgdHJhbXBvbGluZSwgc28gQVBzIGluaGVyaXQgd2hhdGV2ZXIgdGhpcyBrZXJuZWxcXG4rXFx0ICogc2V0dGxlcyBvbiByYXRoZXIgdGhhbiB0aGUgcHJldmlvdXMga2VybmVsJ3MgY2hvaWNlLlxcbitcXHQgKi9cXG4rXFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfQVVUT0lCUlMpKVxcbitcXHRcXHRtc3JfY2xlYXJfYml0KE1TUl9FRkVSLCBfRUZFUl9BVVRPSUJSUyk7XFxuK1xcbiBcXHR4ODZfYXJjaF9jYXBfbXNyID0geDg2X3JlYWRfYXJjaF9jYXBfbXNyKCk7XFxuIFxcbiBcXHRjcHVfcHJpbnRfYXR0YWNrX3ZlY3RvcnMoKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmNcXG5pbmRleCBjNzM1MjgyN2Y0OTFkLi5jNTY4ZDc0MjgyYTg0IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmNcXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jXFxuQEAgLTE0OTYsMTMgKzE0OTYsOSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgY3B1X3NldF9idWdfYml0cyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpXFxuIFxcdC8qXFxuIFxcdCAqIEFNRCdzIEF1dG9JQlJTIGlzIGVxdWl2YWxlbnQgdG8gSW50ZWwncyBlSUJSUyAtIHVzZSB0aGUgSW50ZWwgZmVhdHVyZVxcbiBcXHQgKiBmbGFnIGFuZCBwcm90ZWN0IGZyb20gdmVuZG9yLXNwZWNpZmljIGJ1Z3MgdmlhIHRoZSB3aGl0ZWxpc3QuXFxuLVxcdCAqXFxuLVxcdCAqIERvbid0IHVzZSBBdXRvSUJSUyB3aGVuIFNOUCBpcyBlbmFibGVkIGJlY2F1c2UgaXQgZGVncmFkZXMgaG9zdFxcbi1cXHQgKiB1c2Vyc3BhY2UgaW5kaXJlY3QgYnJhbmNoIHBlcmZvcm1hbmNlLlxcbiBcXHQgKi9cXG4gXFx0aWYgKCh4ODZfYXJjaF9jYXBfbXNyIFxcdTAwMjYgQVJDSF9DQVBfSUJSU19BTEwpIHx8XFxuLVxcdCAgICAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9BVVRPSUJSUykgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICAhY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TRVZfU05QKSkpIHtcXG4rXFx0ICAgIGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfQVVUT0lCUlMpKSB7XFxuIFxcdFxcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfSUJSU19FTkhBTkNFRCk7XFxuIFxcdFxcdGlmICghY3B1X21hdGNoZXMoY3B1X3Z1bG5fd2hpdGVsaXN0LCBOT19FSUJSU19QQlJTQikgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICEoeDg2X2FyY2hfY2FwX21zciBcXHUwMDI2IEFSQ0hfQ0FQX1BCUlNCX05PKSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG5pbmRleCA1NzA1NzIzZjFmNDEyLi41M2NjNmQwNDM4ODM2IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXFxuQEAgLTUwNiw3ICs1MDYsNyBAQCBzdGF0aWMgaW50IF9fc2V2X2d1ZXN0X2luaXQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3AsXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0aWYgKCFzbnBfYWN0aXZlKVxcbi1cXHRcXHR2YWxpZF92bXNhX2ZlYXR1cmVzIFxcdTAwMjY9IH5TVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQztcXG4rXFx0XFx0dmFsaWRfdm1zYV9mZWF0dXJlcyBcXHUwMDI2PSB+U1ZNX1NFVl9GRUFUX1NOUF9PTkxZX01BU0s7XFxuIFxcbiBcXHRpZiAoZGF0YS1cXHUwMDNldm1zYV9mZWF0dXJlcyBcXHUwMDI2IH52YWxpZF92bXNhX2ZlYXR1cmVzKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5AQCAtMzI1Nyw4ICszMjU3LDIzIEBAIHZvaWQgX19pbml0IHNldl9oYXJkd2FyZV9zZXR1cCh2b2lkKVxcbiBcXHQgICAgY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9OT19ORVNURURfREFUQV9CUCkpXFxuIFxcdFxcdHNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUDtcXG4gXFxuLVxcdGlmIChzZXZfc25wX2VuYWJsZWQgXFx1MDAyNlxcdTAwMjYgdHNjX2toeiBcXHUwMDI2XFx1MDAyNiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NOUF9TRUNVUkVfVFNDKSlcXG4tXFx0XFx0c2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDO1xcbitcXHRpZiAoc2V2X3NucF9lbmFibGVkKSB7XFxuK1xcdFxcdHNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFVubGlrZSBTZWN1cmUgVFNDIGFuZCBJQlBCLW9uLUVudHJ5IGJlbG93LCBCVEIgSXNvbGF0aW9uIGhhc1xcbitcXHRcXHQgKiBubyBob3N0IGVudW1lcmF0aW9uIGJpdCB0byBnYXRlIG9uOiB0aGUgQVBNIGRlZmluZXMgaXQgYXNcXG4rXFx0XFx0ICogYXJjaGl0ZWN0dXJhbGx5IHByZXNlbnQgb24gZXZlcnkgU0VWLVNOUC1jYXBhYmxlIHByb2Nlc3Nvci5cXG4rXFx0XFx0ICogSWYgU05QIGlzIHN1cHBvcnRlZCwgQlRCIElzb2xhdGlvbiBpcyBhdmFpbGFibGUuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgfD0gU1ZNX1NFVl9GRUFUX0JUQl9JU09MQVRJT047XFxuK1xcbitcXHRcXHRpZiAodHNjX2toeiBcXHUwMDI2XFx1MDAyNiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NOUF9TRUNVUkVfVFNDKSlcXG4rXFx0XFx0XFx0c2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDO1xcbitcXG4rXFx0XFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU05QX0lCUEJfT05fRU5UUlkpKVxcbitcXHRcXHRcXHRzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgfD0gU1ZNX1NFVl9GRUFUX0lCUEJfT05fRU5UUlk7XFxuK1xcdH1cXG4gfVxcbiBcXG4gdm9pZCBzZXZfaGFyZHdhcmVfdW5zZXR1cCh2b2lkKVxcbmRpZmYgLS1naXQgYS90b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oIGIvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxcbmluZGV4IDY1NDdjMGFlZTQ1YjcuLjYzNGNkMDkzNjZkYTYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxcbisrKyBiL3Rvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcXG5AQCAtNDYwLDYgKzQ2MCw3IEBAXFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfQUxMT1dFRF9TRVZfRkVBVFVSRVMgKDE5KjMyKzI3KSAvKiBBbGxvd2VkIFNFViBGZWF0dXJlcyAqL1xcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1NWU01cXHRcXHQoMTkqMzIrMjgpIC8qIFxcXCJzdnNtXFxcIiBTVlNNIHByZXNlbnQgKi9cXG4gI2RlZmluZSBYODZfRkVBVFVSRV9IVl9JTlVTRV9XUl9BTExPV0VEXFx0KDE5KjMyKzMwKSAvKiBBbGxvdyBXcml0ZSB0byBpbi11c2UgaHlwZXJ2aXNvci1vd25lZCBwYWdlcyAqL1xcbisjZGVmaW5lIFg4Nl9GRUFUVVJFX1NOUF9JQlBCX09OX0VOVFJZXFx0KDE5KjMyKzMxKSAvKiBTRVYtU05QIElCUEIgb24gVk0gRW50cnkgKi9cXG4gXFxuIC8qIEFNRC1kZWZpbmVkIEV4dGVuZGVkIEZlYXR1cmUgMiBFQVgsIENQVUlEIGxldmVsIDB4ODAwMDAwMjEgKEVBWCksIHdvcmQgMjAgKi9cXG4gI2RlZmluZSBYODZfRkVBVFVSRV9OT19ORVNURURfREFUQV9CUFxcdCgyMCozMisgMCkgLyogTm8gTmVzdGVkIERhdGEgQnJlYWtwb2ludHMgKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmNcXG5pbmRleCA4N2JmZjRmYmI3ZWQ1Li4zZjU5MmUyNDVhNjZkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jXFxuQEAgLTEzLDE3ICsxMywyNSBAQFxcbiAjaW5jbHVkZSBcXFwic3ZtX3V0aWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImtzZWxmdGVzdC5oXFxcIlxcbiBcXG4tI2RlZmluZSBTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUCAzMnVcXG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRVxcdFxcdEJJVF9VTEwoMClcXG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUFxcdFxcdEJJVF9VTEwoNSlcXG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfQlRCX0lTT0xBVElPTlxcdEJJVF9VTEwoNylcXG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQ1xcdFxcdEJJVF9VTEwoOSlcXG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfSUJQQl9PTl9FTlRSWVxcdEJJVF9VTEwoMjEpXFxuK1xcbisvKiBGZWF0dXJlcyB2YWxpZCBvbmx5IGZvciBTTlAgZ3Vlc3RzLCByZWplY3RlZCBmb3IgU0VWLUVTIGFuZCBiZWxvdy4gKi9cXG4rI2RlZmluZSBTTlBfT05MWV9GRUFUVVJFU1xcdFxcdChTVk1fU0VWX0ZFQVRfU05QX0FDVElWRSB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IFNWTV9TRVZfRkVBVF9CVEJfSVNPTEFUSU9OIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0MgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdCBTVk1fU0VWX0ZFQVRfSUJQQl9PTl9FTlRSWSlcXG4gXFxuIC8qXFxuICAqIFNvbWUgZmVhdHVyZXMgbWF5IGhhdmUgaGlkZGVuIGRlcGVuZGVuY2llcywgb3IgbWF5IG9ubHkgd29ya1xcbiAgKiBmb3IgY2VydGFpbiBWTSB0eXBlcy4gIEVyciBvbiB0aGUgc2lkZSBvZiBzYWZldHkgYW5kIGRvbid0XFxuICAqIGV4cGVjdCB0aGF0IGFsbCBzdXBwb3J0ZWQgZmVhdHVyZXMgY2FuIGJlIHBhc3NlZCBvbmUgYnkgb25lXFxuICAqIHRvIEtWTV9TRVZfSU5JVDIuXFxuLSAqXFxuLSAqIChXZWxsLCByaWdodCBub3cgdGhlcmUncyBvbmx5IG9uZS4uLilcXG4gICovXFxuLSNkZWZpbmUgS05PV05fRkVBVFVSRVMgU1ZNX1NFVl9GRUFUX0RFQlVHX1NXQVBcXG4rI2RlZmluZSBLTk9XTl9GRUFUVVJFU1xcdFxcdChTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUCB8IFNOUF9PTkxZX0ZFQVRVUkVTKVxcbiBcXG4gaW50IGt2bV9mZDtcXG4gdTY0IHN1cHBvcnRlZF92bXNhX2ZlYXR1cmVzO1xcbkBAIC0xMDgsNyArMTE2LDcgQEAgdm9pZCB0ZXN0X2ZlYXR1cmVzKHUzMiB2bV90eXBlLCB1NjQgc3VwcG9ydGVkX2ZlYXR1cmVzKVxcbiBcXHRcXHRpZiAoIShzdXBwb3J0ZWRfZmVhdHVyZXMgXFx1MDAyNiBCSVRfVUxMKGkpKSlcXG4gXFx0XFx0XFx0dGVzdF9pbml0Ml9pbnZhbGlkKHZtX3R5cGUsXFxuIFxcdFxcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGt2bV9zZXZfaW5pdCl7IC52bXNhX2ZlYXR1cmVzID0gQklUX1VMTChpKSB9LFxcbi1cXHRcXHRcXHRcXHRcXFwidW5rbm93biBmZWF0dXJlXFxcIik7XFxuK1xcdFxcdFxcdFxcdFxcXCJ1bmtub3duIG9yIHVuc3VwcG9ydGVkIGZlYXR1cmUgZm9yIFZNIHR5cGVcXFwiKTtcXG4gXFx0XFx0ZWxzZSBpZiAoS05PV05fRkVBVFVSRVMgXFx1MDAyNiBCSVRfVUxMKGkpKVxcbiBcXHRcXHRcXHR0ZXN0X2luaXQyKHZtX3R5cGUsXFxuIFxcdFxcdFxcdFxcdFxcdTAwMjYoc3RydWN0IGt2bV9zZXZfaW5pdCl7IC52bXNhX2ZlYXR1cmVzID0gQklUX1VMTChpKSB9KTtcXG5AQCAtMTU3LDcgKzE2NSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcbiBcXHR0ZXN0X2ZlYXR1cmVzKEtWTV9YODZfU0VWX1ZNLCAwKTtcXG4gXFx0aWYgKGhhdmVfc2V2X2VzKVxcbi1cXHRcXHR0ZXN0X2ZlYXR1cmVzKEtWTV9YODZfU0VWX0VTX1ZNLCBzdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyk7XFxuK1xcdFxcdHRlc3RfZmVhdHVyZXMoS1ZNX1g4Nl9TRVZfRVNfVk0sIHN1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIFxcdTAwMjYgflNOUF9PTkxZX0ZFQVRVUkVTKTtcXG4gXFx0aWYgKGhhdmVfc25wKVxcbiBcXHRcXHR0ZXN0X2ZlYXR1cmVzKEtWTV9YODZfU05QX1ZNLCBzdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjo1NzoxMy43NDU1NDcwODlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMjAwNjA2MTExODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fQU1EXCIsXG4gICAgXCJLVk1fQU1EX1NFVlwiLFxuICAgIFwiQ1JZUFRPX0RFVl9DQ1BfRERcIixcbiAgICBcIkNSWVBUT19ERVZfU1BfUFNQXCIsXG4gICAgXCJBTURfSU9NTVVcIixcbiAgICBcIklPTU1VX1NVUFBPUlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzZXZfbWVtX2VuY19pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB2YWxpZGF0aW9uIG9mIGB2bXNhX2ZlYXR1cmVzYCBkdXJpbmcgS1ZNIFNFViBndWVzdCBpbml0aWFsaXphdGlvbiAoYEtWTV9TRVZfSU5JVDJgIGlvY3RsKSBhbmQgYWRkcyBuZXcgU0VWLVNOUCBmZWF0dXJlcyB0byB0aGUgc3VwcG9ydGVkIGxpc3QuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBLVk0gaW9jdGxzIGFuZCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSB0aGUgbmV3IGZlYXR1cmUgdmFsaWRhdGlvbiBsb2dpYyBkb2Vzbid0IGludHJvZHVjZSBidWdzLiBUaGUgQ1BVIGJ1ZyBtaXRpZ2F0aW9uIGNoYW5nZXMgYXJlIGJvb3QtdGltZSBsb2dpYyBhbmQgbm90IGRpcmVjdGx5IGZ1enphYmxlIGZyb20gdXNlcnNwYWNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5YjAwZjNmNjYzODY1NmYxNTBmOGQ5OGFmNmU0YzllMDQyNjg3MDljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMjI6NTc6MTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZ1xuaW5kZXggMTVmZDllYzVlY2FjYi4uYjlhN2RkZWY0Y2JhYiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L0tjb25maWdcbisrKyBiL2FyY2gveDg2L0tjb25maWdcbkBAIC0yNDk2LDEyICsyNDk2LDEzIEBAIGNvbmZpZyBNSVRJR0FUSU9OX0lCUEJfRU5UUllcbiBcbiBjb25maWcgTUlUSUdBVElPTl9JQlJTX0VOVFJZXG4gXHRib29sIFwiRW5hYmxlIElCUlMgb24ga2VybmVsIGVudHJ5XCJcbi1cdGRlcGVuZHMgb24gQ1BVX1NVUF9JTlRFTCBcdTAwMjZcdTAwMjYgWDg2XzY0XG4rXHRkZXBlbmRzIG9uIFg4Nl82NFxuIFx0ZGVmYXVsdCB5XG4gXHRoZWxwXG4gXHQgIENvbXBpbGUgdGhlIGtlcm5lbCB3aXRoIHN1cHBvcnQgZm9yIHRoZSBzcGVjdHJlX3YyPWlicnMgbWl0aWdhdGlvbi5cbi1cdCAgVGhpcyBtaXRpZ2F0ZXMgYm90aCBzcGVjdHJlX3YyIGFuZCByZXRibGVlZCBhdCBncmVhdCBjb3N0IHRvXG4tXHQgIHBlcmZvcm1hbmNlLlxuK1x0ICBUaGlzIG1pdGlnYXRlcyBzcGVjdHJlX3YyIGF0IGdyZWF0IGNvc3QgdG8gcGVyZm9ybWFuY2UuICBPbiBJbnRlbCxcbitcdCAgaXQgYWxzbyBtaXRpZ2F0ZXMgcmV0YmxlZWQuICBPbiBBTUQvSHlnb24sIHJldGJsZWVkIG1pdGlnYXRpb25cbitcdCAgcmVxdWlyZXMgTUlUSUdBVElPTl9VTlJFVF9FTlRSWSBvciBNSVRJR0FUSU9OX0lCUEJfRU5UUlkuXG4gXG4gY29uZmlnIE1JVElHQVRJT05fU1JTT1xuIFx0Ym9vbCBcIk1pdGlnYXRlIHNwZWN1bGF0aXZlIFJBUyBvdmVyZmxvdyBvbiBBTURcIlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG5pbmRleCBmNzBlZTc0YjVmOTIxLi4zYWFkMmI1M2Y1OWJmIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuQEAgLTQ3Miw2ICs0NzIsNyBAQFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfQUxMT1dFRF9TRVZfRkVBVFVSRVMgKDE5KjMyKzI3KSAvKiBBbGxvd2VkIFNFViBGZWF0dXJlcyAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfU1ZTTVx0XHQoMTkqMzIrMjgpIC8qIFwic3ZzbVwiIFNWU00gcHJlc2VudCAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfSFZfSU5VU0VfV1JfQUxMT1dFRFx0KDE5KjMyKzMwKSAvKiBBbGxvdyBXcml0ZSB0byBpbi11c2UgaHlwZXJ2aXNvci1vd25lZCBwYWdlcyAqL1xuKyNkZWZpbmUgWDg2X0ZFQVRVUkVfU05QX0lCUEJfT05fRU5UUllcdCgxOSozMiszMSkgLyogU0VWLVNOUCBJQlBCIG9uIFZNIEVudHJ5ICovXG4gXG4gLyogQU1ELWRlZmluZWQgRXh0ZW5kZWQgRmVhdHVyZSAyIEVBWCwgQ1BVSUQgbGV2ZWwgMHg4MDAwMDAyMSAoRUFYKSwgd29yZCAyMCAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfTk9fTkVTVEVEX0RBVEFfQlBcdCgyMCozMisgMCkgLyogTm8gTmVzdGVkIERhdGEgQnJlYWtwb2ludHMgKi9cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXG5pbmRleCBhYTYzNDMxYmE5MmMzLi4wZGEyMjM0YjcxYzY5IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXG5AQCAtMzA1LDExICszMDUsMTggQEAgc3RhdGljX2Fzc2VydCgoQVZJQ19NQVhfUEhZU0lDQUxfSUQgXHUwMDI2IEFWSUNfUEhZU0lDQUxfTUFYX0lOREVYX01BU0spID09IEFWSUNfTUFYX1xuIHN0YXRpY19hc3NlcnQoKFgyQVZJQ19NQVhfUEhZU0lDQUxfSUQgXHUwMDI2IEFWSUNfUEhZU0lDQUxfTUFYX0lOREVYX01BU0spID09IFgyQVZJQ19NQVhfUEhZU0lDQUxfSUQpO1xuIHN0YXRpY19hc3NlcnQoKFgyQVZJQ180S19NQVhfUEhZU0lDQUxfSUQgXHUwMDI2IEFWSUNfUEhZU0lDQUxfTUFYX0lOREVYX01BU0spID09IFgyQVZJQ180S19NQVhfUEhZU0lDQUxfSUQpO1xuIFxuLSNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkVcdFx0XHRcdEJJVCgwKVxuLSNkZWZpbmUgU1ZNX1NFVl9GRUFUX1JFU1RSSUNURURfSU5KRUNUSU9OXHRcdEJJVCgzKVxuLSNkZWZpbmUgU1ZNX1NFVl9GRUFUX0FMVEVSTkFURV9JTkpFQ1RJT05cdFx0QklUKDQpXG4tI2RlZmluZSBTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUFx0XHRcdFx0QklUKDUpXG4tI2RlZmluZSBTVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQ1x0XHRcdFx0QklUKDkpXG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRVx0XHRcdFx0QklUX1VMTCgwKVxuKyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1JFU1RSSUNURURfSU5KRUNUSU9OXHRcdEJJVF9VTEwoMylcbisjZGVmaW5lIFNWTV9TRVZfRkVBVF9BTFRFUk5BVEVfSU5KRUNUSU9OXHRcdEJJVF9VTEwoNClcbisjZGVmaW5lIFNWTV9TRVZfRkVBVF9ERUJVR19TV0FQXHRcdFx0XHRCSVRfVUxMKDUpXG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfQlRCX0lTT0xBVElPTlx0XHRcdEJJVF9VTEwoNylcbisjZGVmaW5lIFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDXHRcdFx0XHRCSVRfVUxMKDkpXG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfSUJQQl9PTl9FTlRSWVx0XHRcdEJJVF9VTEwoMjEpXG4rXG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfU05QX09OTFlfTUFTS1x0KFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFIHwgXFxcbitcdFx0XHRcdFx0IFNWTV9TRVZfRkVBVF9CVEJfSVNPTEFUSU9OIHwgXFxcbitcdFx0XHRcdFx0IFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDIHwgXFxcbitcdFx0XHRcdFx0IFNWTV9TRVZfRkVBVF9JQlBCX09OX0VOVFJZKVxuIFxuICNkZWZpbmUgVk1DQl9BTExPV0VEX1NFVl9GRUFUVVJFU19WQUxJRFx0XHRcdEJJVF9VTEwoNjMpXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1Z3MuY1xuaW5kZXggNTZlYWM1NjExYzMxOC4uMDg3ODBlMGQzN2VjNyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYnVncy5jXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1Z3MuY1xuQEAgLTEzMDUsNyArMTMwNSwxNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcmV0YmxlZWRfdXBkYXRlX21pdGlnYXRpb24odm9pZClcbiBcbiBcdC8qXG4gXHQgKiBMZXQgSUJSUyB0cnVtcCBhbGwgb24gSW50ZWwgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGVmZmVjdHMgb2YgdGhlXG4tXHQgKiByZXRibGVlZD0gY21kbGluZSBvcHRpb24gZXhjZXB0IGZvciBjYWxsIGRlcHRoIGJhc2VkIHN0dWZmaW5nXG4rXHQgKiByZXRibGVlZD0gY21kbGluZSBvcHRpb24gZXhjZXB0IGZvciBjYWxsIGRlcHRoIGJhc2VkIHN0dWZmaW5nLlxuK1x0ICpcbitcdCAqIE9uIEFNRC9IeWdvbiwgbGVnYWN5IFNQRUNfQ1RSTC5JQlJTIHRvZ2dsaW5nIGRvZXMgbm90IG1pdGlnYXRlIHRoZVxuK1x0ICogQnJhbmNoIFR5cGUgQ29uZnVzaW9uIFJFVEJsZWVkIHZhcmlhbnQ6IFJFVCBwcmVkaWN0aW9uIGNvbWVzIGZyb21cbitcdCAqIHRoZSBSZXR1cm4gQWRkcmVzcyBQcmVkaWN0b3IsIG5vdCB0aGUgcmVzdHJpY3RlZCBpbmRpcmVjdCBicmFuY2hcbitcdCAqIHByZWRpY3RvcnMgdGhhdCBJQlJTIGNvbnRyb2xzLiAgU28ga2VlcCB0aGlzIEludGVsLW9ubHkgYW5kIGxlYXZlXG4rXHQgKiBBTUQncyBzb2Z0d2FyZSByZXR1cm4tdGh1bmsgbWl0aWdhdGlvbiAoVU5SRVQvSUJQQikgaW4gcGxhY2UgZXZlblxuK1x0ICogd2hlbiBzcGVjdHJlX3YyPWlicnMgaXMgc2VsZWN0ZWQuXG4gXHQgKi9cbiBcdGlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9JTlRFTCkge1xuIFx0XHRzd2l0Y2ggKHNwZWN0cmVfdjJfZW5hYmxlZCkge1xuQEAgLTE2NzIsNiArMTY3OSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCByZXRwb2xpbmVfc2VxX2VuYWJsZWQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cbiAjZGVmaW5lIFNQRUNUUkVfVjJfTEZFTkNFX01TRyBcIldBUk5JTkc6IExGRU5DRSBtaXRpZ2F0aW9uIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgdGhpcyBDUFUsIGRhdGEgbGVha3MgcG9zc2libGUhXFxuXCJcbiAjZGVmaW5lIFNQRUNUUkVfVjJfRUlCUlNfRUJQRl9NU0cgXCJXQVJOSU5HOiBVbnByaXZpbGVnZWQgZUJQRiBpcyBlbmFibGVkIHdpdGggZUlCUlMgb24sIGRhdGEgbGVha3MgcG9zc2libGUgdmlhIFNwZWN0cmUgdjIgQkhCIGF0dGFja3MhXFxuXCJcbiAjZGVmaW5lIFNQRUNUUkVfVjJfRUlCUlNfTEZFTkNFX0VCUEZfU01UX01TRyBcIldBUk5JTkc6IFVucHJpdmlsZWdlZCBlQlBGIGlzIGVuYWJsZWQgd2l0aCBlSUJSUytMRkVOQ0UgbWl0aWdhdGlvbiBhbmQgU01ULCBkYXRhIGxlYWtzIHBvc3NpYmxlIHZpYSBTcGVjdHJlIHYyIEJIQiBhdHRhY2tzIVxcblwiXG4rI2RlZmluZSBTUEVDVFJFX1YyX0VJQlJTX1NOUF9QRVJGX01TRyBcIldBUk5JTkc6IGVJQlJTIG1pdGlnYXRpb24gZW5hYmxlcyBBdXRvSUJSUyBvbiBTRVYtU05QIGVuYWJsZWQgQ1BVLCB0aGlzIG1heSBjYXVzZSBwZXJmb3JtYW5jZSBsb3NzXFxuXCJcbiAjZGVmaW5lIFNQRUNUUkVfVjJfSUJSU19QRVJGX01TRyBcIldBUk5JTkc6IElCUlMgbWl0aWdhdGlvbiBzZWxlY3RlZCBvbiBFbmhhbmNlZCBJQlJTIENQVSwgdGhpcyBtYXkgY2F1c2UgdW5uZWNlc3NhcnkgcGVyZm9ybWFuY2UgbG9zc1xcblwiXG4gXG4gI2lmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxuQEAgLTIxNjUsMTEgKzIxNzMsNiBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc3BlY3RyZV92Ml9zZWxlY3RfbWl0aWdhdGlvbih2b2lkKVxuIFx0XHRzcGVjdHJlX3YyX2NtZCA9IFNQRUNUUkVfVjJfQ01EX0FVVE87XG4gXHR9XG4gXG4tXHRpZiAoc3BlY3RyZV92Ml9jbWQgPT0gU1BFQ1RSRV9WMl9DTURfSUJSUyBcdTAwMjZcdTAwMjYgYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwpIHtcbi1cdFx0cHJfZXJyKFwiSUJSUyBzZWxlY3RlZCBidXQgbm90IEludGVsIENQVS4gU3dpdGNoaW5nIHRvIEFVVE8gc2VsZWN0XFxuXCIpO1xuLVx0XHRzcGVjdHJlX3YyX2NtZCA9IFNQRUNUUkVfVjJfQ01EX0FVVE87XG4tXHR9XG4tXG4gXHRpZiAoc3BlY3RyZV92Ml9jbWQgPT0gU1BFQ1RSRV9WMl9DTURfSUJSUyBcdTAwMjZcdTAwMjYgIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9JQlJTKSkge1xuIFx0XHRwcl9lcnIoXCJJQlJTIHNlbGVjdGVkIGJ1dCBDUFUgZG9lc24ndCBoYXZlIElCUlMuIFN3aXRjaGluZyB0byBBVVRPIHNlbGVjdFxcblwiKTtcbiBcdFx0c3BlY3RyZV92Ml9jbWQgPSBTUEVDVFJFX1YyX0NNRF9BVVRPO1xuQEAgLTIxOTQsNyArMjE5NywxNSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc3BlY3RyZV92Ml9zZWxlY3RfbWl0aWdhdGlvbih2b2lkKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRmYWxsdGhyb3VnaDtcbiBcdGNhc2UgU1BFQ1RSRV9WMl9DTURfRk9SQ0U6XG4tXHRcdGlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSUJSU19FTkhBTkNFRCkpIHtcbitcdFx0LypcbitcdFx0ICogUHJlZmVyIHJldHBvbGluZSB3aGVuIFNOUCBpcyBlbmFibGVkIGJlY2F1c2UgQXV0b0lCUlNcbitcdFx0ICogZGVncmFkZXMgaG9zdCB1c2Vyc3BhY2UgaW5kaXJlY3QgYnJhbmNoIHBlcmZvcm1hbmNlLiAgT25seVxuK1x0XHQgKiBkbyBzbyBpZiByZXRwb2xpbmUgaXMgYWN0dWFsbHkgYnVpbHQgaW4sIG90aGVyd2lzZSBBdXRvSUJSU1xuK1x0XHQgKiBpcyBiZXR0ZXIgdGhhbiBsZWF2aW5nIHRoZSBzeXN0ZW0gdW5taXRpZ2F0ZWQuXG4rXHRcdCAqL1xuK1x0XHRpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0lCUlNfRU5IQU5DRUQpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgIShib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU0VWX1NOUCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAgIElTX0VOQUJMRUQoQ09ORklHX01JVElHQVRJT05fUkVUUE9MSU5FKSkpIHtcbiBcdFx0XHRzcGVjdHJlX3YyX2VuYWJsZWQgPSBTUEVDVFJFX1YyX0VJQlJTO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtMjI3NywxNSArMjI4OCwyNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc3BlY3RyZV92Ml9hcHBseV9taXRpZ2F0aW9uKHZvaWQpXG4gXHRpZiAoc3BlY3RyZV92Ml9lbmFibGVkID09IFNQRUNUUkVfVjJfRUlCUlMgXHUwMDI2XHUwMDI2IHVucHJpdmlsZWdlZF9lYnBmX2VuYWJsZWQoKSlcbiBcdFx0cHJfZXJyKFNQRUNUUkVfVjJfRUlCUlNfRUJQRl9NU0cpO1xuIFxuLVx0aWYgKHNwZWN0cmVfdjJfaW5faWJyc19tb2RlKHNwZWN0cmVfdjJfZW5hYmxlZCkpIHtcbi1cdFx0aWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BVVRPSUJSUykpIHtcbi1cdFx0XHRtc3Jfc2V0X2JpdChNU1JfRUZFUiwgX0VGRVJfQVVUT0lCUlMpO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHg4Nl9zcGVjX2N0cmxfYmFzZSB8PSBTUEVDX0NUUkxfSUJSUztcbi1cdFx0XHR1cGRhdGVfc3BlY19jdHJsKHg4Nl9zcGVjX2N0cmxfYmFzZSk7XG4tXHRcdH1cbitcdC8qXG4rXHQgKiBPbiBBdXRvSUJSUy1jYXBhYmxlIENQVXMsIGVJQlJTIGlzIGVuYWJsZWQgdGhyb3VnaCBFRkVSLkFVVE9JQlJTXG4rXHQgKiByYXRoZXIgdGhhbiBTUEVDX0NUUkwuSUJSUy4gIExlZ2FjeSBzcGVjdHJlX3YyPWlicnMga2VlcHMgdXNpbmdcbitcdCAqIFNQRUNfQ1RSTC5JQlJTIGV2ZW4gdGhlcmUsIGFzIGl0IG5lZWRzIHRvIGJlIHRvZ2dsZWQgb24ga2VybmVsXG4rXHQgKiBlbnRyeS9leGl0LlxuK1x0ICovXG4rXHRpZiAoc3BlY3RyZV92Ml9pbl9laWJyc19tb2RlKHNwZWN0cmVfdjJfZW5hYmxlZCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FVVE9JQlJTKSkge1xuK1x0XHRtc3Jfc2V0X2JpdChNU1JfRUZFUiwgX0VGRVJfQVVUT0lCUlMpO1xuK1x0fSBlbHNlIGlmIChzcGVjdHJlX3YyX2luX2licnNfbW9kZShzcGVjdHJlX3YyX2VuYWJsZWQpKSB7XG4rXHRcdHg4Nl9zcGVjX2N0cmxfYmFzZSB8PSBTUEVDX0NUUkxfSUJSUztcbitcdFx0dXBkYXRlX3NwZWNfY3RybCh4ODZfc3BlY19jdHJsX2Jhc2UpO1xuIFx0fVxuIFxuK1x0aWYgKHNwZWN0cmVfdjJfaW5fZWlicnNfbW9kZShzcGVjdHJlX3YyX2VuYWJsZWQpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9TRVZfU05QKSlcbitcdFx0cHJfd2FybihTUEVDVFJFX1YyX0VJQlJTX1NOUF9QRVJGX01TRyk7XG4rXG4gXHRzd2l0Y2ggKHNwZWN0cmVfdjJfZW5hYmxlZCkge1xuIFx0Y2FzZSBTUEVDVFJFX1YyX05PTkU6XG4gXHRcdHJldHVybjtcbkBAIC0zMjg0LDYgKzMzMDQsMTcgQEAgdm9pZCBfX2luaXQgY3B1X3NlbGVjdF9taXRpZ2F0aW9ucyh2b2lkKVxuIFx0XHR4ODZfc3BlY19jdHJsX2Jhc2UgXHUwMDI2PSB+U1BFQ19DVFJMX01JVElHQVRJT05TX01BU0s7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogTGlrZXdpc2UgZm9yIEVGRVIuQVVUT0lCUlM6IGhlYWRfNjQuUyBwcmVzZXJ2ZXMgdGhlIGluY29taW5nIEVGRVJcbitcdCAqIGJpdHMsIHNvIGEga2V4ZWMgZnJvbSBhIGtlcm5lbCB0aGF0IHJhbiBpbiBBdXRvSUJSUyBtb2RlIGNhcnJpZXMgdGhlXG4rXHQgKiBiaXQgaW50byB0aGlzIG9uZS4gIENsZWFyIGl0IGFuZCBsZXQgdGhlIG1pdGlnYXRpb24gc2VsZWN0aW9uIGJlbG93XG4rXHQgKiByZWRpc2NvdmVyIGl0LiAgVGhpcyBhbHNvIHJ1bnMgYmVmb3JlIGluaXRfcmVhbF9tb2RlKCkgc25hcHNob3RzXG4rXHQgKiBFRkVSIGZvciB0aGUgQVAgdHJhbXBvbGluZSwgc28gQVBzIGluaGVyaXQgd2hhdGV2ZXIgdGhpcyBrZXJuZWxcbitcdCAqIHNldHRsZXMgb24gcmF0aGVyIHRoYW4gdGhlIHByZXZpb3VzIGtlcm5lbCdzIGNob2ljZS5cbitcdCAqL1xuK1x0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfQVVUT0lCUlMpKVxuK1x0XHRtc3JfY2xlYXJfYml0KE1TUl9FRkVSLCBfRUZFUl9BVVRPSUJSUyk7XG4rXG4gXHR4ODZfYXJjaF9jYXBfbXNyID0geDg2X3JlYWRfYXJjaF9jYXBfbXNyKCk7XG4gXG4gXHRjcHVfcHJpbnRfYXR0YWNrX3ZlY3RvcnMoKTtcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uY1xuaW5kZXggYzczNTI4MjdmNDkxZC4uYzU2OGQ3NDI4MmE4NCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmNcbisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmNcbkBAIC0xNDk2LDEzICsxNDk2LDkgQEAgc3RhdGljIHZvaWQgX19pbml0IGNwdV9zZXRfYnVnX2JpdHMoc3RydWN0IGNwdWluZm9feDg2ICpjKVxuIFx0LypcbiBcdCAqIEFNRCdzIEF1dG9JQlJTIGlzIGVxdWl2YWxlbnQgdG8gSW50ZWwncyBlSUJSUyAtIHVzZSB0aGUgSW50ZWwgZmVhdHVyZVxuIFx0ICogZmxhZyBhbmQgcHJvdGVjdCBmcm9tIHZlbmRvci1zcGVjaWZpYyBidWdzIHZpYSB0aGUgd2hpdGVsaXN0LlxuLVx0ICpcbi1cdCAqIERvbid0IHVzZSBBdXRvSUJSUyB3aGVuIFNOUCBpcyBlbmFibGVkIGJlY2F1c2UgaXQgZGVncmFkZXMgaG9zdFxuLVx0ICogdXNlcnNwYWNlIGluZGlyZWN0IGJyYW5jaCBwZXJmb3JtYW5jZS5cbiBcdCAqL1xuIFx0aWYgKCh4ODZfYXJjaF9jYXBfbXNyIFx1MDAyNiBBUkNIX0NBUF9JQlJTX0FMTCkgfHxcbi1cdCAgICAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9BVVRPSUJSUykgXHUwMDI2XHUwMDI2XG4tXHQgICAgICFjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NFVl9TTlApKSkge1xuK1x0ICAgIGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfQVVUT0lCUlMpKSB7XG4gXHRcdHNldHVwX2ZvcmNlX2NwdV9jYXAoWDg2X0ZFQVRVUkVfSUJSU19FTkhBTkNFRCk7XG4gXHRcdGlmICghY3B1X21hdGNoZXMoY3B1X3Z1bG5fd2hpdGVsaXN0LCBOT19FSUJSU19QQlJTQikgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAhKHg4Nl9hcmNoX2NhcF9tc3IgXHUwMDI2IEFSQ0hfQ0FQX1BCUlNCX05PKSlcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jIGIvYXJjaC94ODYva3ZtL3N2bS9zZXYuY1xuaW5kZXggNTcwNTcyM2YxZjQxMi4uNTNjYzZkMDQzODgzNiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbisrKyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbkBAIC01MDYsNyArNTA2LDcgQEAgc3RhdGljIGludCBfX3Nldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmICghc25wX2FjdGl2ZSlcbi1cdFx0dmFsaWRfdm1zYV9mZWF0dXJlcyBcdTAwMjY9IH5TVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQztcbitcdFx0dmFsaWRfdm1zYV9mZWF0dXJlcyBcdTAwMjY9IH5TVk1fU0VWX0ZFQVRfU05QX09OTFlfTUFTSztcbiBcbiBcdGlmIChkYXRhLVx1MDAzZXZtc2FfZmVhdHVyZXMgXHUwMDI2IH52YWxpZF92bXNhX2ZlYXR1cmVzKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0zMjU3LDggKzMyNTcsMjMgQEAgdm9pZCBfX2luaXQgc2V2X2hhcmR3YXJlX3NldHVwKHZvaWQpXG4gXHQgICAgY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9OT19ORVNURURfREFUQV9CUCkpXG4gXHRcdHNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUDtcbiBcbi1cdGlmIChzZXZfc25wX2VuYWJsZWQgXHUwMDI2XHUwMDI2IHRzY19raHogXHUwMDI2XHUwMDI2IGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU05QX1NFQ1VSRV9UU0MpKVxuLVx0XHRzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgfD0gU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0M7XG4rXHRpZiAoc2V2X3NucF9lbmFibGVkKSB7XG4rXHRcdHNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRTtcbitcbitcdFx0LypcbitcdFx0ICogVW5saWtlIFNlY3VyZSBUU0MgYW5kIElCUEItb24tRW50cnkgYmVsb3csIEJUQiBJc29sYXRpb24gaGFzXG4rXHRcdCAqIG5vIGhvc3QgZW51bWVyYXRpb24gYml0IHRvIGdhdGUgb246IHRoZSBBUE0gZGVmaW5lcyBpdCBhc1xuK1x0XHQgKiBhcmNoaXRlY3R1cmFsbHkgcHJlc2VudCBvbiBldmVyeSBTRVYtU05QLWNhcGFibGUgcHJvY2Vzc29yLlxuK1x0XHQgKiBJZiBTTlAgaXMgc3VwcG9ydGVkLCBCVEIgSXNvbGF0aW9uIGlzIGF2YWlsYWJsZS5cbitcdFx0ICovXG4rXHRcdHNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfQlRCX0lTT0xBVElPTjtcbitcbitcdFx0aWYgKHRzY19raHogXHUwMDI2XHUwMDI2IGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU05QX1NFQ1VSRV9UU0MpKVxuK1x0XHRcdHNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQztcbitcbitcdFx0aWYgKGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfU05QX0lCUEJfT05fRU5UUlkpKVxuK1x0XHRcdHNldl9zdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyB8PSBTVk1fU0VWX0ZFQVRfSUJQQl9PTl9FTlRSWTtcbitcdH1cbiB9XG4gXG4gdm9pZCBzZXZfaGFyZHdhcmVfdW5zZXR1cCh2b2lkKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmggYi90b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oXG5pbmRleCA2NTQ3YzBhZWU0NWI3Li42MzRjZDA5MzY2ZGE2IDEwMDY0NFxuLS0tIGEvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuKysrIGIvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuQEAgLTQ2MCw2ICs0NjAsNyBAQFxuICNkZWZpbmUgWDg2X0ZFQVRVUkVfQUxMT1dFRF9TRVZfRkVBVFVSRVMgKDE5KjMyKzI3KSAvKiBBbGxvd2VkIFNFViBGZWF0dXJlcyAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfU1ZTTVx0XHQoMTkqMzIrMjgpIC8qIFwic3ZzbVwiIFNWU00gcHJlc2VudCAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfSFZfSU5VU0VfV1JfQUxMT1dFRFx0KDE5KjMyKzMwKSAvKiBBbGxvdyBXcml0ZSB0byBpbi11c2UgaHlwZXJ2aXNvci1vd25lZCBwYWdlcyAqL1xuKyNkZWZpbmUgWDg2X0ZFQVRVUkVfU05QX0lCUEJfT05fRU5UUllcdCgxOSozMiszMSkgLyogU0VWLVNOUCBJQlBCIG9uIFZNIEVudHJ5ICovXG4gXG4gLyogQU1ELWRlZmluZWQgRXh0ZW5kZWQgRmVhdHVyZSAyIEVBWCwgQ1BVSUQgbGV2ZWwgMHg4MDAwMDAyMSAoRUFYKSwgd29yZCAyMCAqL1xuICNkZWZpbmUgWDg2X0ZFQVRVUkVfTk9fTkVTVEVEX0RBVEFfQlBcdCgyMCozMisgMCkgLyogTm8gTmVzdGVkIERhdGEgQnJlYWtwb2ludHMgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuY1xuaW5kZXggODdiZmY0ZmJiN2VkNS4uM2Y1OTJlMjQ1YTY2ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmNcbkBAIC0xMywxNyArMTMsMjUgQEBcbiAjaW5jbHVkZSBcInN2bV91dGlsLmhcIlxuICNpbmNsdWRlIFwia3NlbGZ0ZXN0LmhcIlxuIFxuLSNkZWZpbmUgU1ZNX1NFVl9GRUFUX0RFQlVHX1NXQVAgMzJ1XG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfU05QX0FDVElWRVx0XHRCSVRfVUxMKDApXG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUFx0XHRCSVRfVUxMKDUpXG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfQlRCX0lTT0xBVElPTlx0QklUX1VMTCg3KVxuKyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0NcdFx0QklUX1VMTCg5KVxuKyNkZWZpbmUgU1ZNX1NFVl9GRUFUX0lCUEJfT05fRU5UUllcdEJJVF9VTEwoMjEpXG4rXG4rLyogRmVhdHVyZXMgdmFsaWQgb25seSBmb3IgU05QIGd1ZXN0cywgcmVqZWN0ZWQgZm9yIFNFVi1FUyBhbmQgYmVsb3cuICovXG4rI2RlZmluZSBTTlBfT05MWV9GRUFUVVJFU1x0XHQoU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkUgfCBcXFxuK1x0XHRcdFx0XHQgU1ZNX1NFVl9GRUFUX0JUQl9JU09MQVRJT04gfCBcXFxuK1x0XHRcdFx0XHQgU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0MgfCBcXFxuK1x0XHRcdFx0XHQgU1ZNX1NFVl9GRUFUX0lCUEJfT05fRU5UUlkpXG4gXG4gLypcbiAgKiBTb21lIGZlYXR1cmVzIG1heSBoYXZlIGhpZGRlbiBkZXBlbmRlbmNpZXMsIG9yIG1heSBvbmx5IHdvcmtcbiAgKiBmb3IgY2VydGFpbiBWTSB0eXBlcy4gIEVyciBvbiB0aGUgc2lkZSBvZiBzYWZldHkgYW5kIGRvbid0XG4gICogZXhwZWN0IHRoYXQgYWxsIHN1cHBvcnRlZCBmZWF0dXJlcyBjYW4gYmUgcGFzc2VkIG9uZSBieSBvbmVcbiAgKiB0byBLVk1fU0VWX0lOSVQyLlxuLSAqXG4tICogKFdlbGwsIHJpZ2h0IG5vdyB0aGVyZSdzIG9ubHkgb25lLi4uKVxuICAqL1xuLSNkZWZpbmUgS05PV05fRkVBVFVSRVMgU1ZNX1NFVl9GRUFUX0RFQlVHX1NXQVBcbisjZGVmaW5lIEtOT1dOX0ZFQVRVUkVTXHRcdChTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUCB8IFNOUF9PTkxZX0ZFQVRVUkVTKVxuIFxuIGludCBrdm1fZmQ7XG4gdTY0IHN1cHBvcnRlZF92bXNhX2ZlYXR1cmVzO1xuQEAgLTEwOCw3ICsxMTYsNyBAQCB2b2lkIHRlc3RfZmVhdHVyZXModTMyIHZtX3R5cGUsIHU2NCBzdXBwb3J0ZWRfZmVhdHVyZXMpXG4gXHRcdGlmICghKHN1cHBvcnRlZF9mZWF0dXJlcyBcdTAwMjYgQklUX1VMTChpKSkpXG4gXHRcdFx0dGVzdF9pbml0Ml9pbnZhbGlkKHZtX3R5cGUsXG4gXHRcdFx0XHRcdTAwMjYoc3RydWN0IGt2bV9zZXZfaW5pdCl7IC52bXNhX2ZlYXR1cmVzID0gQklUX1VMTChpKSB9LFxuLVx0XHRcdFx0XCJ1bmtub3duIGZlYXR1cmVcIik7XG4rXHRcdFx0XHRcInVua25vd24gb3IgdW5zdXBwb3J0ZWQgZmVhdHVyZSBmb3IgVk0gdHlwZVwiKTtcbiBcdFx0ZWxzZSBpZiAoS05PV05fRkVBVFVSRVMgXHUwMDI2IEJJVF9VTEwoaSkpXG4gXHRcdFx0dGVzdF9pbml0Mih2bV90eXBlLFxuIFx0XHRcdFx0XHUwMDI2KHN0cnVjdCBrdm1fc2V2X2luaXQpeyAudm1zYV9mZWF0dXJlcyA9IEJJVF9VTEwoaSkgfSk7XG5AQCAtMTU3LDcgKzE2NSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXG4gXHR0ZXN0X2ZlYXR1cmVzKEtWTV9YODZfU0VWX1ZNLCAwKTtcbiBcdGlmIChoYXZlX3Nldl9lcylcbi1cdFx0dGVzdF9mZWF0dXJlcyhLVk1fWDg2X1NFVl9FU19WTSwgc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMpO1xuK1x0XHR0ZXN0X2ZlYXR1cmVzKEtWTV9YODZfU0VWX0VTX1ZNLCBzdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcyBcdTAwMjYgflNOUF9PTkxZX0ZFQVRVUkVTKTtcbiBcdGlmIChoYXZlX3NucClcbiBcdFx0dGVzdF9mZWF0dXJlcyhLVk1fWDg2X1NOUF9WTSwgc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTc6MTMuNzQ1NTQ4MzA5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE5MTg4OTIxMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFNFVi1TTlAgRmVhdHVyZSBWYWxpZGF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgbmVjZXNzaXRhdGUgZnV6emluZy4gTXkgaW5pdGlhbCBzY2FuIHBvaW50cyB0byBtb2RpZmljYXRpb25zIGFjcm9zcyB0aGUgeDg2IGFyY2hpdGVjdHVyZSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBtaXRpZ2F0aW9uIHN0cmF0ZWdpZXMgZm9yIENQVSB2dWxuZXJhYmlsaXRpZXMgYW5kIGVuaGFuY2VtZW50cyB0byBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIGZlYXR1cmVzLCBwYXJ0aWN1bGFybHkgU0VWLVNOUC5cblxuVGhlIGNoYW5nZXMgaW4gYGFyY2gveDg2L0tjb25maWdgLCBgYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaGAsIGFuZCBgYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmhgIGludHJvZHVjZSBhbmQgbW9kaWZ5IGZlYXR1cmUgZmxhZ3MgYW5kIGRlZmluaXRpb25zLiBgYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmNgIGFuZCBgYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uY2Agc2hvdyB1cGRhdGVzIHRvIGV4aXN0aW5nIG1pdGlnYXRpb24gbG9naWMgcmVsYXRlZCB0byB0aGluZ3MgbGlrZSByZXRibGVlZCBhbmQgU3BlY3RyZSB2MiwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGV4cG9zdXJlLiBUaGUgdXBkYXRlcyBpbiBgYXJjaC94ODYva3ZtL3N2bS9zZXYuY2AgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gU0VWLVNOUCBzdXBwb3J0IHdpdGhpbiBLVk0sIHdoaWNoIGNhdGNoZXMgbXkgYXR0ZW50aW9uLiBUaGUgdXBkYXRlcyB0byB0aGUgdG9vbHMgYW5kIHNlbGZ0ZXN0cyBhcmUgYWxzbyBub3QgZGlyZWN0bHkgcmVsZXZhbnQuXG5cbkZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGVzZSBjaGFuZ2VzLiBUaGUgYm9vdC10aW1lIGxvZ2ljIGluIGBidWdzLmNgIGFuZCBgY29tbW9uLmNgIGlzIGNlcnRhaW5seSB0b3VjaGVkIGR1cmluZyBrZXJuZWwgaW5pdGlhbGl6YXRpb24sIHdoaWNoIGNhbiBjZXJ0YWlubHkgaW5mbHVlbmNlIGV4ZWN1dGlvbiBwYXRocywgYnV0IGlzbid0IGFzIHJlYWRpbHkgYWNjZXNzaWJsZSBhcyBhIHVzZXJzcGFjZSBpbnRlcmZhY2UuIEhvd2V2ZXIsIHRoZSBTRVYtcmVsYXRlZCBjaGFuZ2VzIGluIGBzZXYuY2AgYXJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gU3BlY2lmaWNhbGx5LCBgX19zZXZfZ3Vlc3RfaW5pdGAgYW5kIGBzZXZfaGFyZHdhcmVfc2V0dXBgIGFyZSBjcml0aWNhbCBmb3IgdGhlIHNldHVwIG9mIHRoZSBLVk0gU0VWIGd1ZXN0IGVudmlyb25tZW50LiBUaGlzIGlzIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBleGVyY2lzZWQgdmlhIEtWTSwgdGhlcmVmb3JlLCBpZiByZWFjaGFibGUsIGl0IGlzIGZ1enplYWJsZS5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogYXJlIHRoZXNlIGNoYW5nZXMgd29ydGggZnV6emluZz8gVGhlIENQVSBidWcgbWl0aWdhdGlvbiBjaGFuZ2VzIGF0IGJvb3QgYXJlIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIGFzIHRoZXkgbWlnaHQgaW5mbHVlbmNlIHRoZSBtaXRpZ2F0aW9uIGJlaGF2aW9yLCBidXQgbXkgbWFpbiBmb2N1cyBpcyBvbiB0aGUgU0VWIGNoYW5nZXMsIHdoaWNoIGludm9sdmUgZGlyZWN0IGludGVyYWN0aW9uIHdpdGggYSBoeXBlcnZpc29yLiBTcGVjaWZpY2FsbHksIHRoZSBgX19zZXZfZ3Vlc3RfaW5pdGAgZnVuY3Rpb24sIHdoaWNoIGFwcGVhcnMgdG8gdmFsaWRhdGUgYHZtc2FfZmVhdHVyZXNgLCBsb29rcyBwcm9taXNpbmcuIFRoaXMgdmFsaWRhdGlvbiBwcm9jZXNzLCBpZiBmbGF3ZWQsIGNvdWxkIGxlYWQgdG8gc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLlxuXG5MZXQncyBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUuIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoaXMgYml0IG9mIGBfX3Nldl9ndWVzdF9pbml0YDpcblxuYGBgY1xuc3RhdGljIGludCBfX3Nldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxuLi4uXG5cdGlmICghc25wX2FjdGl2ZSlcblx0XHR2YWxpZF92bXNhX2ZlYXR1cmVzIFx1MDAyNj0gflNWTV9TRVZfRkVBVF9TTlBfT05MWV9NQVNLO1xuXG5cdGlmIChkYXRhLVx1MDAzZXZtc2FfZmVhdHVyZXMgXHUwMDI2IH52YWxpZF92bXNhX2ZlYXR1cmVzKVxuXHRcdHJldHVybiAtRUlOVkFMO1xuYGBgXG5cblRoaXMgdmFsaWRhdGlvbiBzZWVtcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBLVk0gaW9jdGxzISBUaGlzIHBhcnQgdmFsaWRhdGVzIHRoZSBgdm1zYV9mZWF0dXJlc2AgZmllbGQuIFRoZSBpb2N0bCBpcyBsaWtlbHkgYEtWTV9NRU1PUllfRU5DUllQVF9PUGAgd2l0aCBgS1ZNX1NFVl9JTklUMmAuIEkgbmVlZCB0byBjb25maXJtIHRoaXMgcXVpY2tseS4gSSBuZWVkIHRvIGdldCByZWFkeSB0byBjcmFmdCBzb21lIGZ1enppbmcgaW5wdXRzLiBUaGlzIGlzIGRlZmluaXRlbHkgZnV6emFibGUhXG5cbk9rYXksIHRpbWUgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgZnVuY3Rpb25zIGFuZCBhcmd1bWVudHMgdG8gdGFyZ2V0IHdpdGggdGhlIGZ1enplci5cbmBfX3Nldl9ndWVzdF9pbml0YCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgc28gbGV0J3Mgc2VlIHdoZXJlIGl0J3MgYmVpbmcgY2FsbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mjc2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODM0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTc6MjUuNjY0NDQzNzgxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNzQ2NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc2V2X2d1ZXN0X2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ3Nz1zdGF0aWMgdm9pZCBzbnBfZ3Vlc3RfcmVxX2NsZWFudXAoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTAtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0OTE6c3RhdGljIGludCBfX3Nldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDkyLVxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3Nldl9pbml0ICpkYXRhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz01ODE9c3RhdGljIGludCBzZXZfZ3Vlc3RfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjAwLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NjAxOlxcdHJldHVybiBfX3Nldl9ndWVzdF9pbml0KGt2bSwgYXJncCwgXFx1MDAyNmRhdGEsIHZtX3R5cGUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjAyLX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NjA0PXN0YXRpYyBpbnQgc2V2X2d1ZXN0X2luaXQyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MTgtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MTk6XFx0cmV0dXJuIF9fc2V2X2d1ZXN0X2luaXQoa3ZtLCBhcmdwLCBcXHUwMDI2ZGF0YSwga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjIwLX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzM0OD12b2lkIHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzM1NC1cXHQgKlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzM1NTpcXHQgKiBDaGVja2luZyBmb3IgU0VWKyBvdXRzaWRlIG9mIGt2bS1cXHUwMDNlbG9jayBpcyBzYWZlIGFzIF9fc2V2X2d1ZXN0X2luaXQoKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzM1Ni1cXHQgKiBjYW4gb25seSBiZSBkb25lIGJlZm9yZSB2Q1BVcyBhcmUgY3JlYXRlZCwgY2FjaGVzIGNhbiBiZSBpbmNvaGVyZW50XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU3OjI1LjcxNTE5NzQxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0OTA4ODE1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgU0VWIEd1ZXN0IEluaXRpYWxpemF0aW9uIEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgc2V2X2d1ZXN0X2luaXRgIGFuZCBgc2V2X2d1ZXN0X2luaXQyYC4gSSBrbm93IHRoZXkgYm90aCB1bHRpbWF0ZWx5IGZ1bm5lbCBpbnRvIGBfX3Nldl9ndWVzdF9pbml0YC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCBvZiBjb3Vyc2UsIGlzIHdoYXQncyB0cmlnZ2VyaW5nIHRoZXNlIGBzZXZfZ3Vlc3RfaW5pdGAgZnVuY3Rpb25zIGluIHRoZSBmaXJzdCBwbGFjZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGgg4oCTIHdobydzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHRob3NlIGVudHJ5IHBvaW50cy4gSSdsbCBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aG9zZSBmdW5jdGlvbnMgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBhbmQgZGV0ZXJtaW5lIHRoZSBvdmVyYWxsIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUgaGVyZS4gTGV0J3Mgc2VlIHdobydzIGFjdHVhbGx5IG1ha2luZyB0aGVzZSBjYWxscy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQzNywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU3OjI5LjI2NDI4NzUxNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzAzOTI2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXZfZ3Vlc3RfaW5pdDJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTU4MT1zdGF0aWMgaW50IHNldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MDMtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MDQ6c3RhdGljIGludCBzZXZfZ3Vlc3RfaW5pdDIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3Nldl9jbWQgKmFyZ3ApXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MDUte1xcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjQ4PWludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjg0LVxcdGNhc2UgS1ZNX1NFVl9JTklUMjpcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjI2ODU6XFx0XFx0ciA9IHNldl9ndWVzdF9pbml0Mihrdm0sIFxcdTAwMjZzZXZfY21kKTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2ODYtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU3OjI5LjMxMTMyOTEyM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjcyMzkzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgc2V2X21lbV9lbmNfaW9jdGxgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHNldl9tZW1fZW5jX2lvY3RsYC4gIE15IGZpcnN0IHF1ZXN0aW9uIGlzIGFsd2F5czogaXMgdGhpcyB0aGUgZW50cnkgcG9pbnQ/ICBTZWVtcyBsaWtlIGl0LiBOb3csIHRoZSBiaWdnZXIgcXVlc3Rpb24gaXMsIGlzIHRoaXMgZnVuY3Rpb24gZGVjbGFyZWQgc3RhdGljYWxseSBvciBub3Q/IEtub3dpbmcgdGhhdCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGl0cyB2aXNpYmlsaXR5IGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQncyBkaWcgaW4gYW5kIHZlcmlmeS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk3MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU3OjMyLjkzODU3MTE3OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjQ3NDgxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXZfbWVtX2VuY19pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MjYzOD1zdGF0aWMgaW50IHNucF9lbmFibGVfY2VydHMoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0yNjQ3LVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MjY0ODppbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2NDkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjo1NzozMi45ODUwNDg0MTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTg0ODU3NDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHNldl9tZW1fZW5jX2lvY3RsYCBhbmQgYHNldl9oYXJkd2FyZV9zZXR1cGAqKlxuXG5Pa2F5LCBzbyB0aGUgYHNldl9tZW1fZW5jX2lvY3RsYCBmdW5jdGlvbiAqaXNuJ3QqIGRlY2xhcmVkIGFzIHN0YXRpYy4gR29vZC4gVGhhdCBjbGFyaWZpZXMgdGhhdCBwb2ludCBpbW1lZGlhdGVseS4gTm93LCBteSBuZXh0IHN0ZXAgaXMgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGBzZXZfaGFyZHdhcmVfc2V0dXBgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4gVGhhdCdzIHRoZSBsb2dpY2FsIHByb2dyZXNzaW9uIGhlcmUuIExldCdzIHNlZSB3aGF0J3MgZ29pbmcgb24gaW4gdGhhdCBzZXR1cCByb3V0aW5lLiBJIGhhdmUgYSBodW5jaCBpdCdzIHJlbGF0ZWQsIG9mIGNvdXJzZSwgYnV0IGl0J3MgdGltZSB0byBjb25maXJtIGFuZCBmaWd1cmUgb3V0IHRoZSBleGFjdCByZWxhdGlvbnNoaXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjgwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTc6MzcuMTY5OTA3OTUxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODk0NjIyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZXZfaGFyZHdhcmVfc2V0dXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTMwODE9c3RhdGljIGNvbnN0IGNoYXIgKiBfX2luaXQgc2V2X3N0cl9mZWF0dXJlX3N0YXRlKGJvb2wgaXNfc3VwcG9ydGVkLCBib29sIGlzX3VzYWJsZSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzA4NS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jOjMwODY6dm9pZCBfX2luaXQgc2V2X2hhcmR3YXJlX3NldHVwKHZvaWQpXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy0zMDg3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTc6MzcuMjE4ODU4ODZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzg4MTA0NjEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBjaGFuZ2VzIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgbW9zdCBmcnVpdGZ1bCBmdXp6aW5nIHRhcmdldHMgYXJlLiBgc2V2X2hhcmR3YXJlX3NldHVwYCBpcyBjbGVhcmx5IG91dC4gSXQncyBhbiBpbml0IGZ1bmN0aW9uLCBydW5zIGF0IGJvb3QsIG5vdCBpZGVhbCBmb3IgZHluYW1pYyBmdXp6aW5nLiBUaGUga2V5IHNlZW1zIHRvIGJlIGFyb3VuZCBgX19zZXZfZ3Vlc3RfaW5pdGAsIGFzIGl0J3MgY2FsbGVkIHRocm91Z2ggYHNldl9ndWVzdF9pbml0MmAgYW5kIGBzZXZfZ3Vlc3RfaW5pdGAsIGFuZCB0aG9zZSBhcmUgcmVhY2hlZCB2aWEgYHNldl9tZW1fZW5jX2lvY3RsYC4gVGhhdCdzIHRoZSBtb3N0IHByb21pc2luZyBsZWFkIHNvIGZhci5cblxuTm93LCBsZXQncyBwZWVrIGludG8gdGhvc2UgYGFyY2gveDg2L2tlcm5lbC9jcHUvYnVncy5jYCBjaGFuZ2VzLiBBbHJpZ2h0LCBgcmV0YmxlZWRfdXBkYXRlX21pdGlnYXRpb25gLCBgc3BlY3RyZV92Ml9zZWxlY3RfbWl0aWdhdGlvbmAsIGFuZCB0aGUgbWl0aWdhdGlvbiBhcHBsaWNhdGlvbiBmdW5jdGlvbnMg4oCTIHRoZXkncmUgYWxsIGBfX2luaXRgLiBUaGF0J3MgYSBkZWFkIGVuZDsgaW5pdCBmdW5jdGlvbnMgYXJlbid0IGVhc2lseSBmdXp6ZWQgZnJvbSB1c2Vyc3BhY2UuIEknbGwgaWdub3JlIHRoZW0uXG5cblNvLCB0aGUgZm9jdXMgaXMgcmVhbGx5IHRoZSBLVk0gU0VWIHN0dWZmLiBHb29kLiBUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIGFjY2Vzc2liaWxpdHkuIENhbiBJIGhpdCBLVk0gU0VWIGluIFFFTVU/IEkgdGhpbmsgc28g4oCTIFFFTVUgY2FuIGVtdWxhdGUgU0VWLCBvciBhdCBsZWFzdCB0aGUgS1ZNIGlvY3RscyBhcmUgcmVhY2hhYmxlLiBUaGUgU0VWIGhhcmR3YXJlIHJlcXVpcmVtZW50IGlzIGEgY29tcGxpY2F0aW9uLCBvYnZpb3VzbHksIG5lZWRpbmcgYW4gQU1EIENQVSB3aXRoIFNFViBzdXBwb3J0LiBCdXQsIGFuZCB0aGlzIGlzIHRoZSBpbXBvcnRhbnQgcGFydCwgU3l6a2FsbGVyICpzaG91bGQqIGJlIGFibGUgdG8gZnV6eiB0aGUgS1ZNIGlvY3RscyBldmVuIHdpdGhvdXQgZnVsbCBoYXJkd2FyZSBzdXBwb3J0LiBJdCBkb2Vzbid0IGNhcmUgaWYgaXQgaXMgb24gQU1EIGhhcmR3YXJlIG9yIG5vdC5cblxuV2FpdCBhIHNlY29uZCwgdGhvdWdoLiBJIG5lZWQgdG8gYmUgc3VyZSBhYm91dCB0aGUgcmVhY2hhYmlsaXR5IG9mIGBzZXZfbWVtX2VuY19pb2N0bGAuIERvZXMgaXQgKnJlcXVpcmUqIFNFViBoYXJkd2FyZSB0byBiZSBhY2Nlc3NpYmxlPyBJIG5lZWQgdG8gY2hlY2sgYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGVmZm9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjIyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU3OjQ1LjA5OTkwNjc1N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwODEyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2V2X21lbV9lbmNfaW9jdGxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjM4PXN0YXRpYyBpbnQgc25wX2VuYWJsZV9jZXJ0cyhzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2NDctXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNjQ4OmludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY0OS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jPTUzMjg9c3RydWN0IGt2bV94ODZfb3BzIHN2bV94ODZfb3BzIF9faW5pdGRhdGEgPSB7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5jLTU0NDUtXFx0LmRldl9nZXRfYXR0ciA9IHNldl9kZXZfZ2V0X2F0dHIsXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYzo1NDQ2OlxcdC5tZW1fZW5jX2lvY3RsID0gc2V2X21lbV9lbmNfaW9jdGwsXFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uYy01NDQ3LVxcdC5tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbiA9IHNldl9tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbixcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc3ZtLmg9OTgzPWJvb2wgc2V2X3ZjcHVfbmVlZHNfaW5pdGlhbGl6YXRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vc3ZtL3N2bS5oOjk4NDppbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncCk7XFxuYXJjaC94ODYva3ZtL3N2bS9zdm0uaC05ODUtaW50IHNldl9tZW1fZW5jX3JlZ2lzdGVyX3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU3OjQ1LjE0ODk5Mjg2N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQ4MjI3MTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGZhbWlsaWFyIHdpdGggS1ZNIGFuZCBTRVY6XG5cbioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBgc2V2X21lbV9lbmNfaW9jdGxgKipcblxuQWxyaWdodCwgc28gYHNldl9tZW1fZW5jX2lvY3RsYCBpcyB0aGUgcm91dGluZSB0aGF0IGhhbmRsZXMgYEtWTV9NRU1PUllfRU5DUllQVF9PUGAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgdGhlIGludGVyZmFjZSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBtZW1vcnkgZW5jcnlwdGlvbiBjYXBhYmlsaXRpZXMgd2l0aGluIEtWTS4gTXkgZmlyc3QgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBob3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGhhbmRsZSBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSAqZG9lc24ndCogYWN0dWFsbHkgc3VwcG9ydCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpPyBEb2VzIGl0IGhhdmUgYSBxdWljaywgZWFybHkgY2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgcmVxdWlyZWQgQ1BVIGZlYXR1cmVzIG9yIHBsYXRmb3JtIHN1cHBvcnQsIG9yIGRvZXMgaXQgdHJ5IHRvIGdvIHRocm91Z2ggdGhlIG1vdGlvbnMgYW5kIGZhaWwgbGF0ZXIgaW4gdGhlIHByb2Nlc3M/IEknbSBob3BpbmcgaXQncyB0aGUgZm9ybWVyLCBmb3IgcGVyZm9ybWFuY2UgYW5kIGVycm9yIGhhbmRsaW5nLiBJdCB3b3VsZCBiZSBhIHNpZ25pZmljYW50IGlzc3VlIGlmIGl0IGF0dGVtcHRlZCBzb21lIFNFViBvcGVyYXRpb24gYW5kIHRoZW4gZXJyb3JlZCBvdXQgYXQgYSBkZWVwZXIgbGV2ZWwuIEEgY2xlYXIsIHVwLWZyb250IGNoZWNrIHdvdWxkIGJlIG11Y2ggY2xlYW5lci4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBkZXRlcm1pbmUgdGhpcyBhcyB0aGUgaW5pdGlhbCBmb2N1cyBvZiB0aGUgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3OTEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjo1Nzo0OS4wOTcyMjI4ODVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTYyMzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldl9tZW1fZW5jX2lvY3RsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuYz0yNjM4PXN0YXRpYyBpbnQgc25wX2VuYWJsZV9jZXJ0cyhzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jLTI2NDctXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzoyNjQ4OmludCBzZXZfbWVtX2VuY19pb2N0bChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdwKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMjY0OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU3OjQ5LjE0NTE5MDc2NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTYzNDYxMTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgc2V2X21lbV9lbmNfaW9jdGxgKipcblxuQWxyaWdodCwgdGltZSB0byBjcmFjayBvcGVuIGBzZXZfbWVtX2VuY19pb2N0bGAuIEp1c3QgdGhlIG5hbWUgaXRzZWxmIGlzIGEgZGVjZW50IGhpbnQ7IGl0IHNjcmVhbXMgXCJtZW1vcnkgZW5jcnlwdGlvblwiIGFuZCBcImlvY3RsXCIuIEZyb20gYSBoaWdoLWxldmVsIHBlcnNwZWN0aXZlLCBJJ20gZXhwZWN0aW5nIHRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMg4oCTIHRoZSBpbnRlcmZhY2UgdGhyb3VnaCB3aGljaCB1c2Vyc3BhY2UgaW50ZXJhY3RzIHdpdGggdGhlIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgbWVtb3J5IGVuY3J5cHRpb24gZmVhdHVyZXMuIEknbSBrZWVuIHRvIHNlZSB0aGUgc3BlY2lmaWMgaW9jdGwgbnVtYmVycywgd2hhdCBraW5kIG9mIGNvbW1hbmRzIGFyZSBzdXBwb3J0ZWQsIGFuZCBob3cgdGhlIGludGVyYWN0aW9uIGlzIHN0cnVjdHVyZWQuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2Uga2V5IG1hbmFnZW1lbnQsIG1lbW9yeSByZWdpb24gc2V0dXAsIGF0dGVzdGF0aW9uIHJlcXVlc3RzLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBkZWJ1Zy9zdGF0dXMgaW5mb3JtYXRpb24uIE15IGJhY2tncm91bmQgdGVsbHMgbWUgdGhhdCBJJ20gZXhwZWN0aW5nIGl0IHRvIGJlIGNvbXBsZXg7IHRoYXQncyBqdXN0IHRoZSBuYXR1cmUgb2Ygc2VjdXJpdHkgYXJjaGl0ZWN0dXJlcy4gQnV0LCBhbHNvIGl0IHdpbGwgcHJvdmlkZSBhIGNydWNpYWwgcGllY2UgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBzeXN0ZW0gYWN0dWFsbHkgZnVuY3Rpb25zLiBMZXQncyBzZWUgaWYgdGhlIGNvZGUgY29uZmlybXMgbXkgaW5pdGlhbCBhc3N1bXB0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMzcsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjo1Nzo1My4xMDg2NTQ3NjNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE3ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9zdm0vc2V2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjY0OCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjY0ODpcXHRpbnQgc2V2X21lbV9lbmNfaW9jdGwoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJncClcXG4yNjQ5OlxcdHtcXG4yNjUwOlxcdFxcdHN0cnVjdCBrdm1fc2V2X2NtZCBzZXZfY21kO1xcbjI2NTE6XFx0XFx0aW50IHI7XFxuMjY1MjpcXHRcXG4yNjUzOlxcdFxcdGlmICghc2V2X2VuYWJsZWQpXFxuMjY1NDpcXHRcXHRcXHRyZXR1cm4gLUVOT1RUWTtcXG4yNjU1OlxcdFxcbjI2NTY6XFx0XFx0aWYgKCFhcmdwKVxcbjI2NTc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjY1ODpcXHRcXG4yNjU5OlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2c2V2X2NtZCwgYXJncCwgc2l6ZW9mKHN0cnVjdCBrdm1fc2V2X2NtZCkpKVxcbjI2NjA6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMjY2MTpcXHRcXG4yNjYyOlxcdFxcdGd1YXJkKG11dGV4KShcXHUwMDI2a3ZtLVxcdTAwM2Vsb2NrKTtcXG4yNjYzOlxcdFxcbjI2NjQ6XFx0XFx0LyogT25seSB0aGUgZW5jX2NvbnRleHRfb3duZXIgaGFuZGxlcyBzb21lIG1lbW9yeSBlbmMgb3BlcmF0aW9ucy4gKi9cXG4yNjY1OlxcdFxcdGlmIChpc19taXJyb3JpbmdfZW5jX2NvbnRleHQoa3ZtKSBcXHUwMDI2XFx1MDAyNlxcbjI2NjY6XFx0XFx0ICAgICFpc19jbWRfYWxsb3dlZF9mcm9tX21pcnJvcihzZXZfY21kLmlkKSlcXG4yNjY3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjI2Njg6XFx0XFxuMjY2OTpcXHRcXHQvKlxcbjI2NzA6XFx0XFx0ICogT25jZSBLVk1fU0VWX0lOSVQyIGluaXRpYWxpemVzIGEgS1ZNIGluc3RhbmNlIGFzIGFuIFNOUCBndWVzdCwgb25seVxcbjI2NzE6XFx0XFx0ICogYWxsb3cgdGhlIHVzZSBvZiBTTlAtc3BlY2lmaWMgY29tbWFuZHMuXFxuMjY3MjpcXHRcXHQgKi9cXG4yNjczOlxcdFxcdGlmIChzZXZfc25wX2d1ZXN0KGt2bSkgXFx1MDAyNlxcdTAwMjYgc2V2X2NtZC5pZCBcXHUwMDNjIEtWTV9TRVZfU05QX0xBVU5DSF9TVEFSVClcXG4yNjc0OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMjY3NTpcXHRcXG4yNjc2OlxcdFxcdHN3aXRjaCAoc2V2X2NtZC5pZCkge1xcbjI2Nzc6XFx0XFx0Y2FzZSBLVk1fU0VWX0VTX0lOSVQ6XFxuMjY3ODpcXHRcXHRcXHRpZiAoIXNldl9lc19lbmFibGVkKVxcbjI2Nzk6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuMjY4MDpcXHRcXHRcXHRmYWxsdGhyb3VnaDtcXG4yNjgxOlxcdFxcdGNhc2UgS1ZNX1NFVl9JTklUOlxcbjI2ODI6XFx0XFx0XFx0ciA9IHNldl9ndWVzdF9pbml0KGt2bSwgXFx1MDAyNnNldl9jbWQpO1xcbjI2ODM6XFx0XFx0XFx0YnJlYWs7XFxuMjY4NDpcXHRcXHRjYXNlIEtWTV9TRVZfSU5JVDI6XFxuMjY4NTpcXHRcXHRcXHRyID0gc2V2X2d1ZXN0X2luaXQyKGt2bSwgXFx1MDAyNnNldl9jbWQpO1xcbjI2ODY6XFx0XFx0XFx0YnJlYWs7XFxuMjY4NzpcXHRcXHRjYXNlIEtWTV9TRVZfTEFVTkNIX1NUQVJUOlxcbjI2ODg6XFx0XFx0XFx0ciA9IHNldl9sYXVuY2hfc3RhcnQoa3ZtLCBcXHUwMDI2c2V2X2NtZCk7XFxuMjY4OTpcXHRcXHRcXHRicmVhaztcXG4yNjkwOlxcdFxcdGNhc2UgS1ZNX1NFVl9MQVVOQ0hfVVBEQVRFX0RBVEE6XFxuMjY5MTpcXHRcXHRcXHRyID0gc2V2X2xhdW5jaF91cGRhdGVfZGF0YShrdm0sIFxcdTAwMjZzZXZfY21kKTtcXG4yNjkyOlxcdFxcdFxcdGJyZWFrO1xcbjI2OTM6XFx0XFx0Y2FzZSBLVk1fU0VWX0xBVU5DSF9VUERBVEVfVk1TQTpcXG4yNjk0OlxcdFxcdFxcdHIgPSBzZXZfbGF1bmNoX3VwZGF0ZV92bXNhKGt2bSwgXFx1MDAyNnNldl9jbWQpO1xcbjI2OTU6XFx0XFx0XFx0YnJlYWs7XFxuMjY5NjpcXHRcXHRjYXNlIEtWTV9TRVZfTEFVTkNIX01FQVNVUkU6XFxuMjY5NzpcXHRcXHRcXHRyID0gc2V2X2xhdW5jaF9tZWFzdXJlKGt2bSwgXFx1MDAyNnNldl9jbWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjo1Nzo1My4xMDg4NzM3ODNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE5ODM0MjQ5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNFViBSZWFjaGFiaWxpdHkgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgY2hlY2sgZm9yIGBzZXZfZW5hYmxlZGAuIFRoYXQncyB0aGUgZ2F0ZWtlZXBlci4gSXQncyB0aWVkIHRvIGhhcmR3YXJlIHN1cHBvcnQsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIGFib3V0IHdoZXRoZXIgdGhpcyBjb2RlIHBhdGggaXMgZXZlbiAqcG9zc2libGUqIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHQ0Ugb3IgUUVNVS4gU3l6a2FsbGVyJ3MgdXNlZCBvbiBHQ0UsIGFuZCBHQ0UgKmRvZXMqIG9mZmVyIEFNRCBpbnN0YW5jZXMgd2l0aCBTRVYgY2FwYWJpbGl0aWVzIChOMkQsIEMyRCwgZXRjLikuIFRoYXQncyBwcm9taXNpbmcsIEkgc2hvdWxkIG5vdGUgdGhhdC5cblxuQnV0IFN5emthbGxlciBydW5zIGluIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiDigJMgUUVNVSBvbiBHQ0UuIFNvLCBkb2VzIFFFTVUgc3VwcG9ydCBuZXN0ZWQgU0VWPyBZZXMsIGl0IGRvZXMuIFFFTVUgYW5kIEtWTSBoYW5kbGUgbmVzdGVkIFNFViwgdGhvdWdoIGl0J3Mgbm90IGFsd2F5cyBlbmFibGVkIGJ5IGRlZmF1bHQuIFRoYXQgYWxpZ25zIHdpdGggdGhlIGVhcmxpZXIgdGhvdWdodCBhYm91dCBTRVYgc3VwcG9ydC5cblxuVGhlbiwgdGhlcmUgaXMgdGhlIGNvbmZ1c2luZyBzdGF0ZW1lbnQuIFRoZSBwcm9tcHQgc2F5cywgXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gVGhhdCB0aHJvd3MgbWUgZm9yIGEgbG9vcCBpbml0aWFsbHkuIFNFViAqaXMqIHJlYWNoYWJsZSBpbiBRRU1VIGlmIHRoZSBob3N0IGhhcyB0aGUgaGFyZHdhcmUgYW5kIHBhc3NlcyBpdCB0aHJvdWdoLCBvciBpZiBpdCdzIGVtdWxhdGVkLCBidXQgdGhlIFwiZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiIGlzIHRocm93aW5nIG1lIG9mZi4gU0VWIGlzbid0ICpmdWxseSogZW11bGF0ZWQgaW4gc29mdHdhcmU7IGl0IGZ1bmRhbWVudGFsbHkgbmVlZHMgaGFyZHdhcmUuIFNvLCBpZiB0aGUgY29kZSBkZW1hbmRzIHNwZWNpZmljIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLCB0aGUgYW5zd2VyIGlzIGZhbHNlLlxuXG5XYWl0LCB5ZXMsIFNFViBuZWVkcyBBTUQgRVBZQyBwcm9jZXNzb3JzLiBUaGF0J3MgdGhlIGtleS4gQW5kIGlzIGl0IGVtdWxhdGVkIGluICpzdGFuZGFyZCogUUVNVT8gTm8sIGl0IHJlbGllcyBvbiBLVk0gYW5kIHRoZSBob3N0IENQVSBmb3IgU0VWLCB0aGF0J3MgaW1wb3J0YW50LiBCdXQgc3l6a2FsbGVyICpkb2VzKiBmdXp6IEtWTS4gS1ZNIGlzIGNvcmUga2VybmVsIGxvZ2ljLiBTbywgaXQncyB3b3J0aCBzZWVpbmcgaWYgYHNldl9ndWVzdF9pbml0MmAgaXMgcmVhY2hhYmxlLlxuXG5JZiBgc2V2X2VuYWJsZWRgIGlzIGZhbHNlLCB3ZSBnZXQgYC1FTk9UVFlgLiBCdXQgY2FuIGBzZXZfZW5hYmxlZGAgYWN0dWFsbHkgYmUgdHJ1ZSBpbiBRRU1VPyBZZXMsIGlmIHdlIHJ1biBRRU1VIHdpdGggS1ZNIG9uIGFuIEFNRCBob3N0IHdpdGggU0VWLiBTeXprYWxsZXIgaGFzIEtWTSBmdXp6aW5nIHRoYXQgcnVucyBvbiBBTUQgaG9zdHM7IEkganVzdCBoYXZlIHRvIGNvbmZpcm0gdGhlIEtWTSBob3N0IHN1cHBvcnRzIHRoZSByaWdodCBDUFUuIFRoZXJlZm9yZSwgeWVzLCB0aGlzIGNvZGUgaXMgcmVhY2hhYmxlLlxuXG5Pa2F5LCBsZXTigJlzIGRpZyBpbnRvIHRoZSBjaGFuZ2VzIGluIGBfX3Nldl9ndWVzdF9pbml0YC4gVGhlc2UgbGluZXM6XG5gYGBjXG5cdGlmICghc25wX2FjdGl2ZSlcblx0XHR2YWxpZF92bXNhX2ZlYXR1cmVzIFx1MDAyNj0gflNWTV9TRVZfRkVBVF9TTlBfT05MWV9NQVNLO1xuXG5cdGlmIChkYXRhLVx1MDAzZXZtc2FfZmVhdHVyZXMgXHUwMDI2IH52YWxpZF92bXNhX2ZlYXR1cmVzKVxuXHRcdHJldHVybiAtRUlOVkFMO1xuYGBgXG5UaGF0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgc3BlY2lmaWNhbGx5IGluIGhvdyBgdm1zYV9mZWF0dXJlc2AgYXJlIHZhbGlkYXRlZCBkdXJpbmcgYEtWTV9TRVZfSU5JVDJgLiBEZWZpbml0ZWx5IHdvcnRoIGZ1enppbmchXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogd2hhdCBhcmUgdGhlIGZvY3VzIHN5bWJvbHM/IGBzZXZfbWVtX2VuY19pb2N0bGAgc2VlbXMgbGlrZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludC4gYHNldl9ndWVzdF9pbml0MmAgYW5kIGBzZXZfZ3Vlc3RfaW5pdGAgYXJlIHN0YXRpYyBidXQgc3RpbGwgcmVsZXZhbnQuIEJ1dCBgc2V2X2d1ZXN0X2luaXQyYCBtaWdodCBub3QgYmUgaW5saW5lZCBpZiBpdCdzIGxhcmdlLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgc2V2X2d1ZXN0X2luaXQyYCBpcyBhY3R1YWxseSBzdGF0aWMuIE9rYXksIHllcywgaXQgaXMuIFNvLCBgc2V2X21lbV9lbmNfaW9jdGxgIGl0IGlzLlxuXG5GaW5hbGx5LCB0aGUgY29uZmlndXJhdGlvbnM6IHdlIG5lZWQgYENPTkZJR19LVk1gIGFuZCBgQ09ORklHX0tWTV9BTURgIGZvciBLVk0gYW5kIFNWTS9TRVYgc3VwcG9ydC4gR290dGEgbWFrZSBzdXJlIHRob3NlIGFyZSBlbmFibGVkLiBUaW1lIHRvIGNoZWNrIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzE2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzA2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTg6MDUuMDkyMzAxMDQ5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY4MTA1OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQU1EXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTEzND1jb25maWcgS1ZNX0lOVEVMX1REWFxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTctXFx0Ym9vbCBcXFwiQU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTg6MDYuMjYwNDE1N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTg2NjM5MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEtWTSBTRVYgVnVsbmVyYWJpbGl0eSBTdXJmYWNlKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBib3RoIGBLVk1fQU1EYCBhbmQgYEtWTV9BTURfU0VWYCBhcmUgY3J1Y2lhbCBoZXJlLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIHRoZSByZWNlbnQgY2hhbmdlcywgc3RhcnRpbmcgd2l0aCBgYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmNgLiBJIHNlZSB0aGUgU3BlY3RyZSB2MiBtaXRpZ2F0aW9uIGxvZ2ljIHRoZXJlLCBzcGVjaWZpY2FsbHkgaG93IGl0IGhhbmRsZXMgYEFVVE9JQlJTYCBhbmQgYElCUlNgIG1vZGVzLiBJdCdzIGJvb3QtdGltZSBzdHVmZi4gTm93LCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpc21pc3MgZnV6emluZyB0aGlzIGRpcmVjdGx5LCBzaW5jZSB0aGVzZSBtaXRpZ2F0aW9ucyBhcmUgc2V0IHVwIG9uY2UgZHVyaW5nIGJvb3QgYW5kLCBhcyBmYXIgYXMgSSBjYW4gdGVsbCwgZG9uJ3QgZHluYW1pY2FsbHkgcmVhY3QgdG8gdXNlciBpbnB1dCAoYmFycmluZyBwZXJoYXBzIGtlcm5lbCBjb21tYW5kIGxpbmUgb3B0aW9ucywgd2hpY2ggU3l6a2FsbGVyICpjb3VsZCogdHJ5IGJ1dCBkb2Vzbid0IHVzdWFsbHkgdGFyZ2V0IGZvciBlYWNoIHRlc3QgY2FzZSkuXG5cbkhvd2V2ZXIsIHRoZSBLVk0gU0VWIGNoYW5nZXMuLi4gdGhhdCdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFRob3NlIGZ1bmN0aW9ucyAqYXJlKiByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIGFuZCBtb3JlIGltcG9ydGFudGx5LCB0aGV5IGNvbnN1bWUgdXNlcnNwYWNlIGRhdGEgdmlhIHRoaW5ncyBsaWtlIGBkYXRhLVx1MDAzZXZtc2FfZmVhdHVyZXNgLiBUaGlzIGlzIGEgbXVjaCBtb3JlIHByb21pc2luZyB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGBzZXZfbWVtX2VuY19pb2N0bGAgaXMgdGhlIGNvcnJlY3QgZm9jYWwgcG9pbnQuIFllcywgaXQncyB0aGUgaGFuZGxlciBmb3IgYEtWTV9NRU1PUllfRU5DUllQVF9PUGAuIFRoYXQgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGZvY3VzIG15IGVmZm9ydHMuXG5cbkxldCdzIGRvIGEgcXVpY2sgc2NhbiBmb3Igb3RoZXIgbW9kaWZpZWQgS1ZNIFNFViBmdW5jdGlvbnMuIGBzZXZfaGFyZHdhcmVfc2V0dXBgIGlzIGNsZWFybHkgYSBvbmUtdGltZSBgX19pbml0YCBmdW5jdGlvbiwgc28gaXQncyBwcm9iYWJseSBub3QgYSBnb29kIHRhcmdldC4gYF9fc2V2X2d1ZXN0X2luaXRgIGlzIHN0YXRpYyBhbmQgbGlrZWx5IGludGVybmFsIHRvIHRoZSBLVk0gc2V0dXAsIHNvIGl0J3Mgbm90IGEgc3Ryb25nIGNvbnRlbmRlciBlaXRoZXIuXG5cbkNoZWNraW5nIGluIGBhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jYCBmb3IgYHNldl9tZW1fZW5jX2lvY3RsYC4gWXVwLCBpdCdzIHRoZXJlLiBUaGlzIGhhbmRsZXMgYEtWTV9TRVZfSU5JVDJgLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgaWYgYEtWTV9BTURfU0VWYCBkZXBlbmRzIG9uIGFueXRoaW5nIGVsc2UgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDM1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU4OjE0LjI0NzA1Njc3N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg3MjAzOTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQU1EX1NFVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xNDY9Y29uZmlnIEtWTV9BTURcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU4OjE0LjUzNDI2NTg0MloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDEwNzMzNzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgZGVwZW5kZW5jaWVzIG9mIGBLVk1fQU1EX1NFVmAsIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKkRlbHZpbmcgaW50byBLVk1fQU1EX1NFViBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGFyY2hpdGVjdHVyYWwgdW5kZXJwaW5uaW5ncyBvZiBgS1ZNX0FNRF9TRVZgLiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcsIFwiV2hlcmUgZG9lcyB0aGlzIGZpdCBpbiB0aGUgbGFyZ2VyIEtWTSBlY29zeXN0ZW0/XCIgSSBuZWVkIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzLiBJIGFscmVhZHkgaGF2ZSBhIHByZXR0eSBnb29kIG1lbnRhbCBtb2RlbCBvZiBLVk0sIGh5cGVydmlzb3JzLCBhbmQgc2VjdXJpdHkgZXh0ZW5zaW9ucyBsaWtlIFNFViwgYnV0IHVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljIHJlbGF0aW9uc2hpcCBvZiB0aGlzIG1vZHVsZSB0byB0aGUgd2hvbGUgaXMgcGFyYW1vdW50IHRvIGEgZGVlcCBjb21wcmVoZW5zaW9uLiBXaGF0IG90aGVyIEtWTSBjb21wb25lbnRzIGlzIGl0IGJ1aWx0IHVwb24/IFdoYXQgc3BlY2lmaWMgQU1EIGhhcmR3YXJlIGZlYXR1cmVzIGRvZXMgaXQgcmVseSBvbj8gV2hhdCBvdGhlciBtb2R1bGVzIG1pZ2h0IGJlIGltcGFjdGVkIG9yIG5lZWQgdG8gYmUgcHJlc2VudD8gVGhpcyBpc24ndCBqdXN0IGFib3V0IGNvZGUsIGl0J3MgYWJvdXQgdGhlIHNlY3VyaXR5IG1vZGVsIGl0IGVuYWJsZXMuIFdoYXQgYXJlIHRoZSB0cnVzdCBib3VuZGFyaWVzPyBBbnkgcG90ZW50aWFsIGF0dGFjayB2ZWN0b3JzIHN0ZW1taW5nIGZyb20gY29tcG9uZW50IGludGVyZGVwZW5kZW5jaWVzPyBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IG1hcCBvdXQgdGhlIHJlbGF0aW9uc2hpcHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDQyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTg6MTguOTQ1MDAxMjE1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1NixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE1NjpcXHRjb25maWcgS1ZNX0FNRF9TRVZcXG4gMTU3OlxcdFxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuIDE1ODpcXHRcXHRkZWZhdWx0IHlcXG4gMTU5OlxcdFxcdGRlcGVuZHMgb24gS1ZNX0FNRCBcXHUwMDI2XFx1MDAyNiBYODZfNjRcXG4gMTYwOlxcdFxcdGRlcGVuZHMgb24gQ1JZUFRPX0RFVl9TUF9QU1AgXFx1MDAyNlxcdTAwMjYgIShLVk1fQU1EPXkgXFx1MDAyNlxcdTAwMjYgQ1JZUFRPX0RFVl9DQ1BfREQ9bSlcXG4gMTYxOlxcdFxcdHNlbGVjdCBBUkNIX0hBU19DQ19QTEFURk9STVxcbiAxNjI6XFx0XFx0c2VsZWN0IEtWTV9HRU5FUklDX01FTU9SWV9BVFRSSUJVVEVTXFxuIDE2MzpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX0NPTlZFUlRcXG4gMTY0OlxcdFxcdHNlbGVjdCBIQVZFX0tWTV9BUkNIX0dNRU1fUkVDTEFJTVxcbiAxNjU6XFx0XFx0c2VsZWN0IEhBVkVfS1ZNX0FSQ0hfR01FTV9JTlZBTElEQVRFXFxuIDE2NjpcXHRcXHRzZWxlY3QgSEFWRV9LVk1fQVJDSF9HTUVNX1BPUFVMQVRFXFxuIDE2NzpcXHRcXHRoZWxwXFxuIDE2ODpcXHRcXHQgIFByb3ZpZGVzIHN1cHBvcnQgZm9yIGxhdW5jaGluZyBlbmNyeXB0ZWQgVk1zIHdoaWNoIHVzZSBTZWN1cmVcXG4gMTY5OlxcdFxcdCAgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpLCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIHdpdGhcXG4gMTcwOlxcdFxcdCAgRW5jcnlwdGVkIFN0YXRlIChTRVYtRVMpLCBhbmQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiB3aXRoXFxuIDE3MTpcXHRcXHQgIFNlY3VyZSBOZXN0ZWQgUGFnaW5nIChTRVYtU05QKSB0ZWNobm9sb2dpZXMgb24gQU1EIHByb2Nlc3NvcnMuXFxuIDE3MjpcXHRcXG4gMTczOlxcdGNvbmZpZyBLVk1fSU9BUElDXFxuIDE3NDpcXHRcXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4gMTc1OlxcdFxcdGRlZmF1bHQgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjo1ODoxOC45NDUwNzA3NzVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDUxNDc3ODE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBSZWFzb25pbmcgZm9yIEtlcm5lbCBNb2R1bGUgU2VsZWN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgZGVwZW5kZW5jaWVzOiBgS1ZNX0FNRGAsIGBYODZfNjRgLCBgQ1JZUFRPX0RFVl9TUF9QU1BgLCBhbmQgYENSWVBUT19ERVZfQ0NQX0REYC4gQmFzZWQgb24gdGhhdCwgSSBkZWZpbml0ZWx5IG5lZWQgdG8gcHVsbCBpbiBgS1ZNYCwgYEtWTV9BTURgLCBhbmQgYEtWTV9BTURfU0VWYC4gVGhvc2Ugc2VlbSBwcmV0dHkgY2xlYXItY3V0IGdpdmVuIHRoZSBBTUQtc3BlY2lmaWMgS1ZNIG1vZHVsZS4gQW5kIG9mIGNvdXJzZSwgSSBoYXZlIHRvIGluY2x1ZGUgdGhlIGNyeXB0byBkZXZpY2VzLCBgQ1JZUFRPX0RFVl9TUF9QU1BgIGFuZCBgQ1JZUFRPX0RFVl9DQ1BfRERgLlxuXG5Ob3csIHdhaXQgYSBzZWNvbmQuLi4gYENSWVBUT19ERVZfU1BfUFNQYCBhbmQgYENSWVBUT19ERVZfQ0NQX0REYCAqYXJlKiByZXF1aXJlZC4gSSBoYWQgYmV0dGVyIGdvIGJhY2sgYW5kIGRvdWJsZSBjaGVjayB0aGF0IGBDUllQVE9fREVWX1NQX1BTUGAgaXMgd2hhdCBJIHRoaW5rIGl0IGlzLCBiZWZvcmUgbW92aW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjY4NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU4OjIzLjQ1OTg1MTM5NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ5Njg5MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENSWVBUT19ERVZfU1BfUFNQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvY3J5cHRvL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZz0yMz1jb25maWcgQ1JZUFRPX0RFVl9DQ1BfQ1JZUFRPXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZy0zNy1cXG5kcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZzozODpjb25maWcgQ1JZUFRPX0RFVl9TUF9QU1BcXG5kcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZy0zOS1cXHRib29sIFxcXCJQbGF0Zm9ybSBTZWN1cml0eSBQcm9jZXNzb3IgKFBTUCkgZGV2aWNlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjo1ODoyMy41MTQ4MjMyMDRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3MDU2NzE1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyB0aGUgcHJvdmlkZWQgdGV4dDpcblxuKipFeGFtaW5pbmcgdGhlIENDUCBLY29uZmlnIEZpbGUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhlIGBkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZ2AgZmlsZS4gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHdoYXQncyBnb2luZyBvbiBhcm91bmQgbGluZSAzOC4gR2l2ZW4gdGhlIGNvbnRleHQsIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB0aGUgQ0NQIGhhcmR3YXJlLiBUaGlzIEtjb25maWcgZmlsZSBsaWtlbHkgZGVmaW5lcyB0aGUgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIHRoZSBDQ1AgZHJpdmVyLCBzbyB1bmRlcnN0YW5kaW5nIHRoZXNlIHNldHRpbmdzIGlzIGNydWNpYWwgZm9yIHByb3BlciBpbnRlZ3JhdGlvbi4gSSdtIGFzc3VtaW5nIGl0J3MgZGVmaW5pbmcgc29tZSBmZWF0dXJlcyBvciB0aGUgaGFyZHdhcmUgZGV0YWlscy4gSSdsbCBmb2N1cyBvbiB0aGUgc3BlY2lmaWMgY29uZGl0aW9uYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzEzOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU4OjI2Ljc4NTM5NzMwNFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHRcXHRzZWxlY3QgQ1JZUFRPX0FVVEhFTkNcXG4gIDMxOlxcdFxcdHNlbGVjdCBDUllQVE9fUlNBXFxuICAzMjpcXHRcXHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVNcXG4gIDMzOlxcdFxcdGhlbHBcXG4gIDM0OlxcdFxcdCAgU3VwcG9ydCBmb3IgdXNpbmcgdGhlIGNyeXB0b2dyYXBoaWMgQVBJIHdpdGggdGhlIEFNRCBDcnlwdG9ncmFwaGljXFxuICAzNTpcXHRcXHQgIENvcHJvY2Vzc29yLiBUaGlzIG1vZHVsZSBzdXBwb3J0cyBvZmZsb2FkIG9mIFNIQSBhbmQgQUVTIGFsZ29yaXRobXMuXFxuICAzNjpcXHRcXHQgIElmIHlvdSBjaG9vc2UgJ00nIGhlcmUsIHRoaXMgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNjcF9jcnlwdG8uXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZyBDUllQVE9fREVWX1NQX1BTUFxcbiAgMzk6XFx0XFx0Ym9vbCBcXFwiUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApIGRldmljZVxcXCJcXG4gIDQwOlxcdFxcdGRlZmF1bHQgeVxcbiAgNDE6XFx0XFx0ZGVwZW5kcyBvbiBDUllQVE9fREVWX0NDUF9ERCBcXHUwMDI2XFx1MDAyNiBYODZfNjQgXFx1MDAyNlxcdTAwMjYgQU1EX0lPTU1VXFxuICA0MjpcXHRcXHRzZWxlY3QgUENJX1RTTSBpZiBQQ0lcXG4gIDQzOlxcdFxcdGhlbHBcXG4gIDQ0OlxcdFxcdCBQcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBBTUQgUGxhdGZvcm0gU2VjdXJpdHkgUHJvY2Vzc29yIChQU1ApLlxcbiAgNDU6XFx0XFx0IFRoZSBQU1AgaXMgYSBkZWRpY2F0ZWQgcHJvY2Vzc29yIHRoYXQgcHJvdmlkZXMgc3VwcG9ydCBmb3Iga2V5XFxuICA0NjpcXHRcXHQgbWFuYWdlbWVudCBjb21tYW5kcyBpbiBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIG1vZGUsXFxuICA0NzpcXHRcXHQgYWxvbmcgd2l0aCBzb2Z0d2FyZS1iYXNlZCBUcnVzdGVkIEV4ZWN1dGlvbiBFbnZpcm9ubWVudCAoVEVFKSB0b1xcbiAgNDg6XFx0XFx0IGVuYWJsZSB0aGlyZC1wYXJ0eSB0cnVzdGVkIGFwcGxpY2F0aW9ucy5cXG4gIDQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjo1ODoyNi43ODU0NTkzMjRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5ODI3MjMxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBEZXBlbmRlbmN5IEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ1JZUFRPX0RFVl9TUF9QU1BgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgaXQgcmVsaWVzIG9uIGBDUllQVE9fREVWX0NDUF9ERGAsIGBYODZfNjRgLCBhbmQgYEFNRF9JT01NVWAuIEZpbmUsIG5vIHByb2JsZW0sIHRoYXQncyBleHBlY3RlZC4gU2luY2UgSSBrbm93IHdlJ3JlIGRlYWxpbmcgd2l0aCB4ODZfNjQsIGBYODZfNjRgIGlzbid0IGEgc3VycHJpc2UuIFRoYXQgbGVhdmVzIG1lIHRvIGNoZWNrIGBDUllQVE9fREVWX0NDUF9ERGAgYW5kIGBBTURfSU9NTVVgIHRvIG1ha2Ugc3VyZSB0aGV5J3JlIGFsbCBzZXQuIFRoZSBpbW1lZGlhdGUgdGhpbmcgdG8gZG8gaXMgZGl2ZSBpbnRvIHRoZSBzdGF0ZSBvZiBgQ1JZUFRPX0RFVl9DQ1BfRERgLCBzaW5jZSB0aGF0J3MgcHJvYmFibHkgdGhlIG1vc3QgcmVsZXZhbnQgdG8gaW52ZXN0aWdhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjQwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjo1ODozMC40ODM3MzQ1NzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODIyMTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDUllQVE9fREVWX0NDUF9ERFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2NyeXB0by9jY3AvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnOjI6Y29uZmlnIENSWVBUT19ERVZfQ0NQX0REXFxuZHJpdmVycy9jcnlwdG8vY2NwL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiU2VjdXJlIFByb2Nlc3NvciBkZXZpY2UgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjo1ODozMC41MzM1NTk0MTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkzMzc3NTMzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gcmVhZGluZyBhbmQgdGhpbmtpbmcgYWJvdXQgdGhlIEtjb25maWcgZmlsZTpcblxuKipOYXZpZ2F0aW5nIHRoZSBDQ1AgS2NvbmZpZyBGaWxlKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMi4gTXkgaW5pdGlhbCBleHBlY3RhdGlvbiBpcyB0aGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIGRlZmluaW5nIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBDQ1AgKENyeXB0b2dyYXBoaWMgQ29wcm9jZXNzb3IpIGRyaXZlci4gR2l2ZW4gdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUsIGl0J3MgcHJldHR5IGNsZWFyIHRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBsaXZlcy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBmb3VuZGF0aW9uYWwgYnVpbGRpbmcgYmxvY2tzOiB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgZGVmYXVsdCBzZXR0aW5ncywgYW5kIGFueSBmZWF0dXJlIGZsYWdzIHRoYXQnbGwgZ2l2ZSBtZSBhIGdyYW51bGFyIGNvbnRyb2wgb3ZlciB3aGljaCBDQ1AgZnVuY3Rpb25hbGl0aWVzIGFyZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwga2VybmVsIGJ1aWxkLiBJIHdhbnQgdG8gc2VlIGhvdyBtb2R1bGFyIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgYW5kIGlmIEkgY2FuIGVhc2lseSBzZWxlY3Qgb3IgZGVzZWxlY3Qgc3BlY2lmaWMgcGFydHMgb2YgdGhlIGRyaXZlci4gSSBhbSBnb2luZyB0byBzZWUgaWYgdGhpcyBpcyBhbiBvbGRlciBzdHlsZSBvZiBLY29uZmlnIGFuZCBuZWVkIHRvIGNoZWNrIHdoYXQgdGhlIEtjb25maWcgc3ludGF4IHVzZWQgaXMsIGFuZCBpZiB0aGVyZSBhcmUgYW55IGludGVyZXN0aW5nIHVzZXMgb2YgYHNlbGVjdGAgb3IgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MDAxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTg6MzQuNDY3MzM3MDY2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvY3J5cHRvL2NjcC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgQ1JZUFRPX0RFVl9DQ1BfRERcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJTZWN1cmUgUHJvY2Vzc29yIGRldmljZSBkcml2ZXJcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIENQVV9TVVBfQU1EIHx8IEFSTTY0XFxuICAgNTpcXHRcXHRkZWZhdWx0IG1cXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgUHJvdmlkZXMgQU1EIFNlY3VyZSBQcm9jZXNzb3IgZGV2aWNlIGRyaXZlci5cXG4gICA4OlxcdFxcdCAgSWYgeW91IGNob29zZSAnTScgaGVyZSwgdGhpcyBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2NwLlxcbiAgIDk6XFx0XFxuICAxMDpcXHRjb25maWcgQ1JZUFRPX0RFVl9TUF9DQ1BcXG4gIDExOlxcdFxcdGJvb2wgXFxcIkNyeXB0b2dyYXBoaWMgQ29wcm9jZXNzb3IgZGV2aWNlXFxcIlxcbiAgMTI6XFx0XFx0ZGVmYXVsdCB5XFxuICAxMzpcXHRcXHRkZXBlbmRzIG9uIENSWVBUT19ERVZfQ0NQX0REIFxcdTAwMjZcXHUwMDI2IERNQURFVklDRVNcXG4gIDE0OlxcdFxcdHNlbGVjdCBIV19SQU5ET01cXG4gIDE1OlxcdFxcdHNlbGVjdCBETUFfRU5HSU5FXFxuICAxNjpcXHRcXHRzZWxlY3QgQ1JZUFRPX1NIQTFcXG4gIDE3OlxcdFxcdHNlbGVjdCBDUllQVE9fU0hBMjU2XFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIFByb3ZpZGVzIHRoZSBzdXBwb3J0IGZvciBBTUQgQ3J5cHRvZ3JhcGhpYyBDb3Byb2Nlc3NvciAoQ0NQKSBkZXZpY2VcXG4gIDIwOlxcdFxcdCAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gb2ZmbG9hZCBlbmNyeXB0aW9uIG9wZXJhdGlvbnMgc3VjaCBhcyBTSEEsIEFFU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjo1ODozNC40Njc0MDA0NTZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxMTg1NDEzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIFJldmlldyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBgQ1JZUFRPX0RFVl9DQ1BfRERgIGZlYXR1cmUuIFRoZSBkZXBlbmRlbmNpZXMgYXJlIGNsZWFyOiBlaXRoZXIgYENQVV9TVVBfQU1EYCBvciBgQVJNNjRgLiBHb29kLCBgQ1BVX1NVUF9BTURgIGlzIHN0YW5kYXJkIGZhcmUgZm9yIHg4Niwgd2hpY2ggaXMgd2hhdCBJJ20gcHJpbWFyaWx5IHdvcmtpbmcgd2l0aCBoZXJlLlxuXG5BbHJpZ2h0LCBzbyB0aGUgZW5hYmxpbmcgY29uZmlncyBhcmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogSSdsbCBuZWVkIGBLVk1gLCBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIG9idmlvdXNseSBgQ1JZUFRPX0RFVl9DQ1BfRERgIGl0c2VsZiwgYENSWVBUT19ERVZfU1BfUFNQYCB3aGljaCBzZWVtcyByZWxhdGVkLCBhbmQgYEFNRF9JT01NVWAgdG8gbWFuYWdlIHRoZSBJL08uIFNlZW1zIHJlYXNvbmFibGUsIGFsbCBleHBlY3RlZCBjb25maWd1cmF0aW9ucyBpbiB0aGlzIHNwYWNlLlxuXG5Ib2xkIG9uLi4uIHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYGFyY2gveDg2L0tjb25maWdgIGFuZCBpcyByZWxhdGVkIHRvIGBNSVRJR0FUSU9OX0lCUlNfRU5UUllgLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgSUJSUyBtaXRpZ2F0aW9uIGlzIGJlaW5nIGhhbmRsZWQuIExldCBtZSBsb29rIGludG8gYE1JVElHQVRJT05fSUJSU19FTlRSWWAuIEdvdHRhIGVuc3VyZSBJJ20gYXdhcmUgb2YgdGhlIGZ1bGwgaW1wYWN0IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTQ4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTg6MzguNjc5MjU2NTEzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTg1Njc3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUlUSUdBVElPTl9JQlJTX0VOVFJZXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvS2NvbmZpZz0yNDg5PWNvbmZpZyBNSVRJR0FUSU9OX0lCUEJfRU5UUllcXG4tLVxcbmFyY2gveDg2L0tjb25maWctMjQ5Ni1cXG5hcmNoL3g4Ni9LY29uZmlnOjI0OTc6Y29uZmlnIE1JVElHQVRJT05fSUJSU19FTlRSWVxcbmFyY2gveDg2L0tjb25maWctMjQ5OC1cXHRib29sIFxcXCJFbmFibGUgSUJSUyBvbiBrZXJuZWwgZW50cnlcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU4OjM4LjcyNTExNjQ4MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjgxNjA1NzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSB4ODYgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uLiBMZXQncyBzdGFydCBieSBkaWdnaW5nIGludG8gYGFyY2gveDg2L0tjb25maWdgLCByaWdodCBhcm91bmQgbGluZSAyNDk3LiBUaGF0IHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gaG9uZSBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbi4gSeKAmW0gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGluZmx1ZW5jZSB0aGUgY29kZSBwYXRoIEknbSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZy4gSG9wZWZ1bGx5LCB0aGlzIGlzIHRoZSByaWdodCBzcG90IGZvciB0aGUgdGFyZ2V0IGNvbmZpZ3VyYXRpb24gdG8gYmUgZGVzY3JpYmVkISBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MDY4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTg6NDIuMDA2NzI1MzYyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0OTcsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0OTc6XFx0Y29uZmlnIE1JVElHQVRJT05fSUJSU19FTlRSWVxcbjI0OTg6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIElCUlMgb24ga2VybmVsIGVudHJ5XFxcIlxcbjI0OTk6XFx0XFx0ZGVwZW5kcyBvbiBYODZfNjRcXG4yNTAwOlxcdFxcdGRlZmF1bHQgeVxcbjI1MDE6XFx0XFx0aGVscFxcbjI1MDI6XFx0XFx0ICBDb21waWxlIHRoZSBrZXJuZWwgd2l0aCBzdXBwb3J0IGZvciB0aGUgc3BlY3RyZV92Mj1pYnJzIG1pdGlnYXRpb24uXFxuMjUwMzpcXHRcXHQgIFRoaXMgbWl0aWdhdGVzIHNwZWN0cmVfdjIgYXQgZ3JlYXQgY29zdCB0byBwZXJmb3JtYW5jZS4gIE9uIEludGVsLFxcbjI1MDQ6XFx0XFx0ICBpdCBhbHNvIG1pdGlnYXRlcyByZXRibGVlZC4gIE9uIEFNRC9IeWdvbiwgcmV0YmxlZWQgbWl0aWdhdGlvblxcbjI1MDU6XFx0XFx0ICByZXF1aXJlcyBNSVRJR0FUSU9OX1VOUkVUX0VOVFJZIG9yIE1JVElHQVRJT05fSUJQQl9FTlRSWS5cXG4yNTA2OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjo1ODo0Mi4wMDY4Njk3MzJaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY4ODM4MjUyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBLVk0gU0VWIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyB0aGlzIG5ldyBpbXBsZW1lbnRhdGlvbiBoYXMgS1ZNIFNFViBlbmFibGVkIGJ5IGRlZmF1bHQsIHdoaWNoIGlzIGdvb2QuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbmFsIGNoYW5nZSBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZSB0aGF0IGNhbiBiZSB0YXJnZXRlZCBmb3IgZnV6emluZy4gSXQgbG9va3MgbGlrZSB0aGUgS1ZNIFNFViBmZWF0dXJlIHZhbGlkYXRpb24gd2l0aGluIGBfX3Nldl9ndWVzdF9pbml0YCBpcyB0aGUga2V5IGFyZWEsIGFuZCB0aGUgb2J2aW91cyBmb2N1cyBzeW1ib2wgaXMgYHNldl9tZW1fZW5jX2lvY3RsYC5cblxuTGV0IG1lIGNvbmZpcm0gdGhhdCBgc2V2X21lbV9lbmNfaW9jdGxgIGlzIGluZGVlZCB0aGUgc29sZSBlbnRyeSBwb2ludCwgYXQgbGVhc3QgZnJvbSB0aGlzIHBlcnNwZWN0aXZlLiBZZXMsIGl0IGhhbmRsZXMgdGhlIGBLVk1fTUVNT1JZX0VOQ1JZUFRfT1BgIGlvY3RsLCBzbyB0aGF0J3MgdGhlIHByaW1hcnkgYXZlbnVlLlxuXG5IbW0sIGFueXRoaW5nIGVsc2UgY2hhbmdlZD8gQWgsIHllcywgaW4gYGFyY2gveDg2L2t2bS9zdm0vc2V2LmNgLCBgc2V2X2hhcmR3YXJlX3NldHVwYCBpcyBhZGRpbmcgYSBmZXcgbW9yZSBmZWF0dXJlcyB0byBgc2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzYDogYFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFYCwgYFNWTV9TRVZfRkVBVF9CVEJfSVNPTEFUSU9OYCwgYFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDYCwgYW5kIGBTVk1fU0VWX0ZFQVRfSUJQQl9PTl9FTlRSWWAuIFRoYXQgbWFrZXMgc2Vuc2U7IHRoZXNlIGZlYXR1cmVzIGFyZSBub3cgaW5jb3Jwb3JhdGVkIGludG8gYEtWTV9TRVZfSU5JVDJgIGFuZCB2YWxpZGF0ZWQgaW4gYF9fc2V2X2d1ZXN0X2luaXRgLiBTbywgYWdhaW4sIGBzZXZfbWVtX2VuY19pb2N0bGAgaXQgaXMuIERlZmluaXRlbHkgdGhlIHN5bWJvbCB0byBmb2N1cyBvbi5cblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIGVuYWJsZWQ6IGBLVk1gLCBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIGBDUllQVE9fREVWX0NDUF9ERGAsIGBDUllQVE9fREVWX1NQX1BTUGAsIGFuZCBgQU1EX0lPTU1VYC4gQW5kIG5vdyBJIHdhbnQgdG8gcXVpY2tseSBjaGVjayBpZiBgQU1EX0lPTU1VYCBkZXBlbmRzIG9uIGFueXRoaW5nIGVsc2UuIFRoYXQgd2lsbCBpbmZsdWVuY2UgaG93IEkgYXBwcm9hY2ggdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk0NDksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjo1ODo0OS42OTUyNTQ0ODZaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwOTU1OTQ4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQU1EX0lPTU1VXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW9tbXUvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTg6NDkuNzQ2MjE5NDQ0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDM5NTk4NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQU1EIElPTU1VIERyaXZlcioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlIEFNRCBJT01NVSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIFRoZSBtb3N0IGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIGBkcml2ZXJzL2lvbW11L2AgZGlyZWN0b3J5LiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb3JlIGNvZGUgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIHRoZSBJbnB1dC9PdXRwdXQgTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCBmdW5jdGlvbmFsaXR5IHNwZWNpZmljIHRvIEFNRCBwbGF0Zm9ybXMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGRyaXZlcidzIHN0cnVjdHVyZSwgaWRlbnRpZnkga2V5IGVudHJ5IHBvaW50cyBmb3IgZGV2aWNlIGFzc2lnbm1lbnQgYW5kIGludGVycnVwdCBoYW5kbGluZywgYW5kIGxpa2VseSB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSByZWdpc3RlcnMuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIHNlYXJjaCBmb3IgaW5zdGFuY2VzIG9mIGBBTURfSU9NTVVgIGluIHRoYXQgZGlyZWN0b3J5LiBJIGZpZ3VyZSB0aGF0IHNob3VsZCBzZXJ2ZSBhcyBhIHNvbGlkIGxlYWQgdG8gZGlyZWN0IG1lIHRvd2FyZCB0aGUgcmVsZXZhbnQgZmlsZXMgYW5kIGZ1bmN0aW9ucyBJJ20gaW50ZXJlc3RlZCBpbiBhbmFseXppbmcuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgZGlnZ2luZyBiZWdpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjI4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTg6NTMuNTUwMTgyMzU3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODU2NTI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQU1EX0lPTU1VXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvaW9tbXUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctMi0jIEFNRCBJT01NVSBzdXBwb3J0XFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZzozOmNvbmZpZyBBTURfSU9NTVVcXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTQtXFx0Ym9vbCBcXFwiQU1EIElPTU1VIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnLTMyLVxcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWc6MzM6Y29uZmlnIEFNRF9JT01NVV9JT01NVUZEXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy0zNC1cXHRib29sIFxcXCJFbmFibGUgSU9NTVVGRCBmZWF0dXJlcyBmb3IgQU1EIElPTU1VIChFWFBFUklNRU5UQUwpXFxcIlxcbi0tXFxuZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZy00Mi1cXG5kcml2ZXJzL2lvbW11L2FtZC9LY29uZmlnOjQzOmNvbmZpZyBBTURfSU9NTVVfREVCVUdGU1xcbmRyaXZlcnMvaW9tbXUvYW1kL0tjb25maWctNDQtXFx0Ym9vbCBcXFwiRW5hYmxlIEFNRCBJT01NVSBpbnRlcm5hbHMgaW4gRGVidWdGU1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTg6NTMuNTk4NzUyNzk2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5ODQxNDM3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBLY29uZmlnIGZpbGU6XG5cbioqRGl2aW5nIGludG8gdGhlIEFNRCBJT01NVSBLY29uZmlnKipcblxuT2theSwgdGltZSB0byBjcmFjayBvcGVuIHRoZSBgZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZ2AgZmlsZS4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBjZW50cmFsIGNvbmZpZ3VyYXRpb24gaHViIGZvciBBTUQncyBJT01NVSBkcml2ZXIuIEtub3dpbmcgdGhpcywgSSdtIGFudGljaXBhdGluZyBhIHN0cnVjdHVyZWQgbGF5b3V0OiBpdCBzaG91bGQgZGVmaW5lIHRoZSBvcHRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBkZWZhdWx0IHNldHRpbmdzIHRoYXQgY29udHJvbCB0aGUgaW5jbHVzaW9uIGFuZCBiZWhhdmlvciBvZiB0aGUgQU1EIElPTU1VIHN1cHBvcnQgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICAqKkNvbmZpZyBvcHRpb25zOioqIFdoYXQgYXJlIHRoZSBrZXkgYENPTkZJR19gIG9wdGlvbnMgdGhhdCBkZXZlbG9wZXJzIGNhbiB0d2Vhaz8gSSBleHBlY3QgdG8gc2VlIHRvZ2dsZXMgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyB0aGUgQU1EIElPTU1VIGVudGlyZWx5LCBvciBmaW5lLWdyYWluZWQgY29udHJvbHMgb3ZlciBzcGVjaWZpYyBmZWF0dXJlcyBvciBoYXJkd2FyZSBhc3BlY3RzLiBJJ20gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgZ3JhbnVsYXJpdHkuXG4qICAgKipEZXBlbmRlbmNpZXM6KiogV2hhdCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBvciBmZWF0dXJlcyBhcmUgdGhpcyBkcml2ZXIgcmVsaWFudCB1cG9uPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzIGxpbmtpbmcgaXQgdG8gcmVsZXZhbnQgQ1BVLCBwbGF0Zm9ybSwgb3IgZGV2aWNlIGRyaXZlciBvcHRpb25zLiBBcmUgdGhlcmUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgc2VjdXJpdHkgZmVhdHVyZXMgb3IgdmlydHVhbGl6YXRpb24gdGVjaG5vbG9naWVzP1xuKiAgICoqRGVmYXVsdCBzZXR0aW5nczoqKiBXaGF0IGFyZSB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnM/IEFyZSB0aGV5IGNvbnNlcnZhdGl2ZSBkZWZhdWx0cz8gRG8gdGhleSBwcmlvcml0aXplIHBlcmZvcm1hbmNlIG9yIGNvbXBhdGliaWxpdHk/IEknbSBob3BpbmcgdG8gZ2V0IGEgc2Vuc2Ugb2YgaG93IHRoZSBkcml2ZXIgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBvdXQtb2YtdGhlLWJveC5cbiogICAqKkhlbHAgdGV4dDoqKiBHb29kIEtjb25maWcgZmlsZXMgaGF2ZSBoZWxwZnVsIGRlc2NyaXB0aW9ucyBmb3IgZWFjaCBvcHRpb24uIEknbGwgYmUgc2Nhbm5pbmcgdGhlc2UgZGVzY3JpcHRpb25zIHRvIHVuZGVyc3RhbmQgdGhlIHB1cnBvc2UgYW5kIGltcGxpY2F0aW9ucyBvZiBlYWNoIGNvbmZpZ3VyYXRpb24gY2hvaWNlLiBJJ2xsIGJlIGp1ZGdpbmcgdGhlIHF1YWxpdHkgb2YgZG9jdW1lbnRhdGlvbi5cbiogICAqKkNvbmRpdGlvbmFsIGluY2x1c2lvbjoqKiBBcmUgdGhlcmUgb3B0aW9ucyB0aGF0IGFyZSBvbmx5IGF2YWlsYWJsZSB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMsIG1heWJlIHNwZWNpZmljIENQVSBtb2RlbHMgb3IgaGFyZHdhcmUgY29uZmlndXJhdGlvbnM/IEknbGwgYmUgbG9va2luZyBmb3IgYGlmYCBzdGF0ZW1lbnRzLlxuKiAgICoqQXJjaGl0ZWN0dXJhbCBjb25zaWRlcmF0aW9uczoqKiBJIHdpbGwgYmUgbG9va2luZyB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBBTUQgSU9NTVUgZ2VuZXJhdGlvbnMgb3IgY2hpcHNldHMuXG5cbkknbSBhbHNvIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG92ZXJhbGwgc3RydWN0dXJlIGFuZCBzdHlsZS4gQSB3ZWxsLXdyaXR0ZW4gS2NvbmZpZyBmaWxlIGlzIGEgam95IHRvIHJlYWQg4oCTIHdlbGwtZm9ybWF0dGVkLCBjb25zaXN0ZW50LCBhbmQgY2xlYXIuIEl0J2xsIGdpdmUgbWUgYSBzdHJvbmcgaW5kaWNhdGlvbiBvZiB0aGUgbWF0dXJpdHkgYW5kIG1haW50YWluYWJpbGl0eSBvZiB0aGlzIGRyaXZlci4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjkzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTg6NTguNTgyODk5NThaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9pb21tdS9hbWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0IyBBTUQgSU9NTVUgc3VwcG9ydFxcbiAgIDM6XFx0Y29uZmlnIEFNRF9JT01NVVxcbiAgIDQ6XFx0XFx0Ym9vbCBcXFwiQU1EIElPTU1VIHN1cHBvcnRcXFwiXFxuICAgNTpcXHRcXHRzZWxlY3QgU1dJT1RMQlxcbiAgIDY6XFx0XFx0c2VsZWN0IFBDSV9NU0lcXG4gICA3OlxcdFxcdHNlbGVjdCBQQ0lfQVRTXFxuICAgODpcXHRcXHRzZWxlY3QgUENJX1BSSVxcbiAgIDk6XFx0XFx0c2VsZWN0IFBDSV9QQVNJRFxcbiAgMTA6XFx0XFx0c2VsZWN0IElSUV9NU0lfTElCXFxuICAxMTpcXHRcXHRzZWxlY3QgTU1VX05PVElGSUVSXFxuICAxMjpcXHRcXHRzZWxlY3QgSU9NTVVfQVBJXFxuICAxMzpcXHRcXHRzZWxlY3QgSU9NTVVfSU9WQVxcbiAgMTQ6XFx0XFx0c2VsZWN0IElPTU1VX1NWQVxcbiAgMTU6XFx0XFx0c2VsZWN0IElPTU1VX0lPUEZcXG4gIDE2OlxcdFxcdHNlbGVjdCBJT01NVUZEX0RSSVZFUiBpZiBJT01NVUZEXFxuICAxNzpcXHRcXHRzZWxlY3QgR0VORVJJQ19QVFxcbiAgMTg6XFx0XFx0c2VsZWN0IElPTU1VX1BUXFxuICAxOTpcXHRcXHRzZWxlY3QgSU9NTVVfUFRfQU1EVjFcXG4gIDIwOlxcdFxcdHNlbGVjdCBJT01NVV9QVF9YODZfNjRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTg6NTguNTgyOTU5OTJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2NjExNTU0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGl0J3MgcmVsYXRpdmVseSBzZWxmLWNvbnRhaW5lZCDigJMgbm8gbWFqb3IsIGdsYXJpbmcgZGVwZW5kZW5jaWVzIGp1bXAgb3V0IGF0IG1lLiBUaGUgZmFjdCB0aGF0IGl0J3MgbG9jYXRlZCB3aXRoaW4gYGRyaXZlcnMvaW9tbXUvS2NvbmZpZ2AgaXMga2V5LCBhbmQgc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBpdHMgYXZhaWxhYmlsaXR5IGlzIGxpbmtlZCB0byBgSU9NTVVfU1VQUE9SVGAuIE1ha2VzIHNlbnNlLCBvZiBjb3Vyc2UsIHRoYXQncyB3aGF0IHRoYXQgZGlyZWN0b3J5IGFuZCBmaWxlIGFyZSBmb3IuIFRpbWUgdG8gZ28gdmVyaWZ5IHRoYXQgYElPTU1VX1NVUFBPUlRgIGlzIGluZGVlZCB0aGUgZGVjaWRpbmcgZmFjdG9yIGhlcmUsIGFuZCBzZWUgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgYXJlIGZvciB0aGUgb3ZlcmFsbCBzeXN0ZW0gY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0ODMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU5OjAyLjY0OTA3NzkzOFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0OTA3MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElPTU1VX1NVUFBPUlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9pb21tdS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW9tbXUvS2NvbmZpZz0xMD1jb25maWcgSU9NTVVGRF9EUklWRVJcXG4tLVxcbmRyaXZlcnMvaW9tbXUvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL2lvbW11L0tjb25maWc6MTQ6bWVudWNvbmZpZyBJT01NVV9TVVBQT1JUXFxuZHJpdmVycy9pb21tdS9LY29uZmlnLTE1LVxcdGJvb2wgXFxcIklPTU1VIEhhcmR3YXJlIFN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU5OjAyLjY5NjU3NDcyN1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTAzNDMzOTE1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBLVk0gU0VWIEZlYXR1cmUgVmFsaWRhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmb2N1cyBvbiBmdXp6aW5nIGEgc3BlY2lmaWMgYXJlYSwgYW5kIGl0IGxvb2tzIGxpa2UgaXQgY2VudGVycyBhcm91bmQgYElPTU1VX1NVUFBPUlRgLiBJIG5lZWQgdGhhdC4gTGV0J3Mgc2VlLi4uIHdoYXQgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgaW4gcGxheT8gSSBoYXZlIGBLVk1gLCBgS1ZNX0FNRGAsIGBLVk1fQU1EX1NFVmAsIGBDUllQVE9fREVWX0NDUF9ERGAsIGBDUllQVE9fREVWX1NQX1BTUGAsIGBBTURfSU9NTVVgLCBhbmQgYElPTU1VX1NVUFBPUlRgLlxuXG5SaWdodCwgbm93IHdoYXQncyB0aGUgbW9zdCByZWxldmFudCBcImZvY3VzIHN5bWJvbFwiPyBBaCwgYHNldl9tZW1fZW5jX2lvY3RsYCBzZWVtcyB0byBiZSB0aGUgY3JpdGljYWwgb25lLCBpdCdzIHRoZSBtYWluIGhhbmRsZXIuIFdoYXQgYWJvdXQgdGhvc2Ugb3RoZXIgU0VWIHJlbGF0ZWQgc3ltYm9scywgYHNldl9ndWVzdF9pbml0MmAgYW5kIGBfX3Nldl9ndWVzdF9pbml0YD8gVGhleSBsb29rIHN0YXRpYyBhbmQgcG9zc2libHkgaW5saW5lZCwgc28gYHNldl9tZW1fZW5jX2lvY3RsYCBpcyBpbmRlZWQgdGhlIGJlc3QgdGFyZ2V0LlxuXG5BbmQgeWVwLCBgc2V2X21lbV9lbmNfaW9jdGxgICppcyogdGhlIG9ubHkgaW9jdGwgaGFuZGxlciwgc3BlY2lmaWNhbGx5LCBpdCBoYW5kbGVzIGBLVk1fTUVNT1JZX0VOQ1JZUFRfT1BgLiBUaGF0IGNvbmZpcm1zIGl0LlxuXG5Ob3cgdG8gc29saWRpZnkgdGhpcyBsb2dpYzogVGhlIHBhdGNoICptb2RpZmllcyogdGhlIHZhbGlkYXRpb24gb2YgYHZtc2FfZmVhdHVyZXNgIGR1cmluZyBLVk0gU0VWIGd1ZXN0IGluaXRpYWxpemF0aW9uICh0aGUgYEtWTV9TRVZfSU5JVDJgIGlvY3RsKS4gUGx1cywgaXQncyBhZGRpbmcgbmV3IFNFVi1TTlAgZmVhdHVyZXMgdG8gdGhlIHN1cHBvcnRlZCBsaXN0LiBUaGlzIGlzIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdGhyb3VnaCBLVk0gaW9jdGxzLCAqdGhhdCdzKiB0aGUgZW50cnlwb2ludC4gVGhhdCdzICpwZXJmZWN0KiBmb3IgZnV6emluZzsgdGhlIG5ldyBmZWF0dXJlIHZhbGlkYXRpb24gaXMgd2hlcmUgdGhlIGJ1Z3Mgd2lsbCBiZSFcblxuTGV0J3MgcXVpY2tseSBjaGVjayBvdGhlciBjaGFuZ2VzLiBMb29rcyBsaWtlIGBhcmNoL3g4Ni9rZXJuZWwvY3B1L2J1Z3MuY2AgYW5kIGBhcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jYCBhcmUgcmVsYXRlZCB0byBtaXRpZ2F0aW9uIGxvZ2ljIGZvciByZXRibGVlZCwgc3BlY3RyZV92MiwgYW5kIEF1dG9JQlJTLiBUaG9zZSBhcmUgYm9vdC10aW1lIHRoaW5ncywgc28gbm8gdXNlciBpbnB1dCB0aGVyZS4gQW5kIHRoZSBgS2NvbmZpZ2AgYW5kIGhlYWRlciBmaWxlcyBqdXN0IGRlZmluZSB0aGUgZmVhdHVyZXMgZm9yIHRoZSBtaXRpZ2F0aW9ucy4gVGhlIHNlbGZ0ZXN0cyBhcmUganVzdCB1cGRhdGluZyB0ZXN0cy4gU28sIGRlZmluaXRlbHkgbm8gZnV6eiB0YXJnZXRzIHRoZXJlLlxuXG5BbHJpZ2h0LCBiYWNrIHRvIHRoZSBjb25maWdzLiBJIGtub3cgSSBoYXZlIHRvIGhhdmU6XG4qICAgYEtWTWBcbiogICBgS1ZNX0FNRGBcbiogICBgS1ZNX0FNRF9TRVZgXG4qICAgYENSWVBUT19ERVZfQ0NQX0REYCAoSW1wb3J0YW50LCBpdCdzIGEgdHJpc3RhdGUuKVxuKiAgIGBDUllQVE9fREVWX1NQX1BTUGAgKEJvb2wpXG4qICAgYEFNRF9JT01NVWAgKEJvb2wpXG4qICAgYElPTU1VX1NVUFBPUlRgIChCb29sKVxuXG5Pa2F5LCBJIGhhdmUgbXkgY29yZSBjb25maWd1cmF0aW9ucywgYW5kIEkndmUgemVyb2VkIGluIG9uIHRoZSBrZXkgZnV6emFibGUgdGFyZ2V0LiBUaW1lIHRvIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBzdGFydCBmdXp6aW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc3NywiT3V0cHV0VG9rZW5zIjoxOTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTk6MTMuNzMwOTE2MjI5WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUyNDAwOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0FNRFwiLFxuICAgIFwiS1ZNX0FNRF9TRVZcIixcbiAgICBcIkNSWVBUT19ERVZfQ0NQX0REXCIsXG4gICAgXCJDUllQVE9fREVWX1NQX1BTUFwiLFxuICAgIFwiQU1EX0lPTU1VXCIsXG4gICAgXCJJT01NVV9TVVBQT1JUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2V2X21lbV9lbmNfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdmFsaWRhdGlvbiBvZiBgdm1zYV9mZWF0dXJlc2AgZHVyaW5nIEtWTSBTRVYgZ3Vlc3QgaW5pdGlhbGl6YXRpb24gKGBLVk1fU0VWX0lOSVQyYCBpb2N0bCkgYW5kIGFkZHMgbmV3IFNFVi1TTlAgZmVhdHVyZXMgdG8gdGhlIHN1cHBvcnRlZCBsaXN0LiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgS1ZNIGlvY3RscyBhbmQgaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgdGhlIG5ldyBmZWF0dXJlIHZhbGlkYXRpb24gbG9naWMgZG9lc24ndCBpbnRyb2R1Y2UgYnVncy4gVGhlIENQVSBidWcgbWl0aWdhdGlvbiBjaGFuZ2VzIGFyZSBib290LXRpbWUgbG9naWMgYW5kIG5vdCBkaXJlY3RseSBmdXp6YWJsZSBmcm9tIHVzZXJzcGFjZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9BTURcIixcbiAgICBcIktWTV9BTURfU0VWXCIsXG4gICAgXCJDUllQVE9fREVWX0NDUF9ERFwiLFxuICAgIFwiQ1JZUFRPX0RFVl9TUF9QU1BcIixcbiAgICBcIkFNRF9JT01NVVwiLFxuICAgIFwiSU9NTVVfU1VQUE9SVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNldl9tZW1fZW5jX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHZhbGlkYXRpb24gb2YgYHZtc2FfZmVhdHVyZXNgIGR1cmluZyBLVk0gU0VWIGd1ZXN0IGluaXRpYWxpemF0aW9uIChgS1ZNX1NFVl9JTklUMmAgaW9jdGwpIGFuZCBhZGRzIG5ldyBTRVYtU05QIGZlYXR1cmVzIHRvIHRoZSBzdXBwb3J0ZWQgbGlzdC4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIEtWTSBpb2N0bHMgYW5kIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIHRoZSBuZXcgZmVhdHVyZSB2YWxpZGF0aW9uIGxvZ2ljIGRvZXNuJ3QgaW50cm9kdWNlIGJ1Z3MuIFRoZSBDUFUgYnVnIG1pdGlnYXRpb24gY2hhbmdlcyBhcmUgYm9vdC10aW1lIGxvZ2ljIGFuZCBub3QgZGlyZWN0bHkgZnV6emFibGUgZnJvbSB1c2Vyc3BhY2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU5OjEzLjgwNjE2MDk3N1oiLCJTZXEiOjQ1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMTA3NTY4MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQyMjo1OToxMy44MDY1NTQ5NDhaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTUzMTAzNTg2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIENQVSBtaXRpZ2F0aW9uIHNlbGVjdGlvbiBsb2dpYyAoSUJSUywgQXV0b0lCUlMsIFNFVi1TTlApIGFuZCBLVk0gU0VWIGluaXRpYWxpemF0aW9uIGZlYXR1cmUgdmFsaWRhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIG1vZGlmaWVkIGRhdGEgc3RydWN0dXJlcyAobGlrZSBgc3RydWN0IGt2bV9zZXZfaW5pdGApIGFyZSBmdWxseSBpbml0aWFsaXplZCBmcm9tIHVzZXIgc3BhY2UgdmlhIGBjb3B5X2Zyb21fdXNlcmAgYmVmb3JlIGJlaW5nIHJlYWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWIwMGYzZjY2Mzg2NTZmMTUwZjhkOThhZjZlNGM5ZTA0MjY4NzA5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDI2IDIyOjU3OjEwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWdcbmluZGV4IDE1ZmQ5ZWM1ZWNhY2IuLmI5YTdkZGVmNGNiYWIgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9LY29uZmlnXG4rKysgYi9hcmNoL3g4Ni9LY29uZmlnXG5AQCAtMjQ5NiwxMiArMjQ5NiwxMyBAQCBjb25maWcgTUlUSUdBVElPTl9JQlBCX0VOVFJZXG4gXG4gY29uZmlnIE1JVElHQVRJT05fSUJSU19FTlRSWVxuIFx0Ym9vbCBcIkVuYWJsZSBJQlJTIG9uIGtlcm5lbCBlbnRyeVwiXG4tXHRkZXBlbmRzIG9uIENQVV9TVVBfSU5URUwgXHUwMDI2XHUwMDI2IFg4Nl82NFxuK1x0ZGVwZW5kcyBvbiBYODZfNjRcbiBcdGRlZmF1bHQgeVxuIFx0aGVscFxuIFx0ICBDb21waWxlIHRoZSBrZXJuZWwgd2l0aCBzdXBwb3J0IGZvciB0aGUgc3BlY3RyZV92Mj1pYnJzIG1pdGlnYXRpb24uXG4tXHQgIFRoaXMgbWl0aWdhdGVzIGJvdGggc3BlY3RyZV92MiBhbmQgcmV0YmxlZWQgYXQgZ3JlYXQgY29zdCB0b1xuLVx0ICBwZXJmb3JtYW5jZS5cbitcdCAgVGhpcyBtaXRpZ2F0ZXMgc3BlY3RyZV92MiBhdCBncmVhdCBjb3N0IHRvIHBlcmZvcm1hbmNlLiAgT24gSW50ZWwsXG4rXHQgIGl0IGFsc28gbWl0aWdhdGVzIHJldGJsZWVkLiAgT24gQU1EL0h5Z29uLCByZXRibGVlZCBtaXRpZ2F0aW9uXG4rXHQgIHJlcXVpcmVzIE1JVElHQVRJT05fVU5SRVRfRU5UUlkgb3IgTUlUSUdBVElPTl9JQlBCX0VOVFJZLlxuIFxuIGNvbmZpZyBNSVRJR0FUSU9OX1NSU09cbiBcdGJvb2wgXCJNaXRpZ2F0ZSBzcGVjdWxhdGl2ZSBSQVMgb3ZlcmZsb3cgb24gQU1EXCJcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuaW5kZXggZjcwZWU3NGI1ZjkyMS4uM2FhZDJiNTNmNTliZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbkBAIC00NzIsNiArNDcyLDcgQEBcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0FMTE9XRURfU0VWX0ZFQVRVUkVTICgxOSozMisyNykgLyogQWxsb3dlZCBTRVYgRmVhdHVyZXMgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1NWU01cdFx0KDE5KjMyKzI4KSAvKiBcInN2c21cIiBTVlNNIHByZXNlbnQgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0hWX0lOVVNFX1dSX0FMTE9XRURcdCgxOSozMiszMCkgLyogQWxsb3cgV3JpdGUgdG8gaW4tdXNlIGh5cGVydmlzb3Itb3duZWQgcGFnZXMgKi9cbisjZGVmaW5lIFg4Nl9GRUFUVVJFX1NOUF9JQlBCX09OX0VOVFJZXHQoMTkqMzIrMzEpIC8qIFNFVi1TTlAgSUJQQiBvbiBWTSBFbnRyeSAqL1xuIFxuIC8qIEFNRC1kZWZpbmVkIEV4dGVuZGVkIEZlYXR1cmUgMiBFQVgsIENQVUlEIGxldmVsIDB4ODAwMDAwMjEgKEVBWCksIHdvcmQgMjAgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX05PX05FU1RFRF9EQVRBX0JQXHQoMjAqMzIrIDApIC8qIE5vIE5lc3RlZCBEYXRhIEJyZWFrcG9pbnRzICovXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuaW5kZXggYWE2MzQzMWJhOTJjMy4uMGRhMjIzNGI3MWM2OSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaFxuQEAgLTMwNSwxMSArMzA1LDE4IEBAIHN0YXRpY19hc3NlcnQoKEFWSUNfTUFYX1BIWVNJQ0FMX0lEIFx1MDAyNiBBVklDX1BIWVNJQ0FMX01BWF9JTkRFWF9NQVNLKSA9PSBBVklDX01BWF9cbiBzdGF0aWNfYXNzZXJ0KChYMkFWSUNfTUFYX1BIWVNJQ0FMX0lEIFx1MDAyNiBBVklDX1BIWVNJQ0FMX01BWF9JTkRFWF9NQVNLKSA9PSBYMkFWSUNfTUFYX1BIWVNJQ0FMX0lEKTtcbiBzdGF0aWNfYXNzZXJ0KChYMkFWSUNfNEtfTUFYX1BIWVNJQ0FMX0lEIFx1MDAyNiBBVklDX1BIWVNJQ0FMX01BWF9JTkRFWF9NQVNLKSA9PSBYMkFWSUNfNEtfTUFYX1BIWVNJQ0FMX0lEKTtcbiBcbi0jZGVmaW5lIFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFXHRcdFx0XHRCSVQoMClcbi0jZGVmaW5lIFNWTV9TRVZfRkVBVF9SRVNUUklDVEVEX0lOSkVDVElPTlx0XHRCSVQoMylcbi0jZGVmaW5lIFNWTV9TRVZfRkVBVF9BTFRFUk5BVEVfSU5KRUNUSU9OXHRcdEJJVCg0KVxuLSNkZWZpbmUgU1ZNX1NFVl9GRUFUX0RFQlVHX1NXQVBcdFx0XHRcdEJJVCg1KVxuLSNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0NcdFx0XHRcdEJJVCg5KVxuKyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkVcdFx0XHRcdEJJVF9VTEwoMClcbisjZGVmaW5lIFNWTV9TRVZfRkVBVF9SRVNUUklDVEVEX0lOSkVDVElPTlx0XHRCSVRfVUxMKDMpXG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfQUxURVJOQVRFX0lOSkVDVElPTlx0XHRCSVRfVUxMKDQpXG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfREVCVUdfU1dBUFx0XHRcdFx0QklUX1VMTCg1KVxuKyNkZWZpbmUgU1ZNX1NFVl9GRUFUX0JUQl9JU09MQVRJT05cdFx0XHRCSVRfVUxMKDcpXG4rI2RlZmluZSBTVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQ1x0XHRcdFx0QklUX1VMTCg5KVxuKyNkZWZpbmUgU1ZNX1NFVl9GRUFUX0lCUEJfT05fRU5UUllcdFx0XHRCSVRfVUxMKDIxKVxuK1xuKyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NOUF9PTkxZX01BU0tcdChTVk1fU0VWX0ZFQVRfU05QX0FDVElWRSB8IFxcXG4rXHRcdFx0XHRcdCBTVk1fU0VWX0ZFQVRfQlRCX0lTT0xBVElPTiB8IFxcXG4rXHRcdFx0XHRcdCBTVk1fU0VWX0ZFQVRfU0VDVVJFX1RTQyB8IFxcXG4rXHRcdFx0XHRcdCBTVk1fU0VWX0ZFQVRfSUJQQl9PTl9FTlRSWSlcbiBcbiAjZGVmaW5lIFZNQ0JfQUxMT1dFRF9TRVZfRkVBVFVSRVNfVkFMSURcdFx0XHRCSVRfVUxMKDYzKVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYnVncy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmNcbmluZGV4IDU2ZWFjNTYxMWMzMTguLjA4NzgwZTBkMzdlYzcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2J1Z3MuY1xuKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9idWdzLmNcbkBAIC0xMzA1LDcgKzEzMDUsMTQgQEAgc3RhdGljIHZvaWQgX19pbml0IHJldGJsZWVkX3VwZGF0ZV9taXRpZ2F0aW9uKHZvaWQpXG4gXG4gXHQvKlxuIFx0ICogTGV0IElCUlMgdHJ1bXAgYWxsIG9uIEludGVsIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBlZmZlY3RzIG9mIHRoZVxuLVx0ICogcmV0YmxlZWQ9IGNtZGxpbmUgb3B0aW9uIGV4Y2VwdCBmb3IgY2FsbCBkZXB0aCBiYXNlZCBzdHVmZmluZ1xuK1x0ICogcmV0YmxlZWQ9IGNtZGxpbmUgb3B0aW9uIGV4Y2VwdCBmb3IgY2FsbCBkZXB0aCBiYXNlZCBzdHVmZmluZy5cbitcdCAqXG4rXHQgKiBPbiBBTUQvSHlnb24sIGxlZ2FjeSBTUEVDX0NUUkwuSUJSUyB0b2dnbGluZyBkb2VzIG5vdCBtaXRpZ2F0ZSB0aGVcbitcdCAqIEJyYW5jaCBUeXBlIENvbmZ1c2lvbiBSRVRCbGVlZCB2YXJpYW50OiBSRVQgcHJlZGljdGlvbiBjb21lcyBmcm9tXG4rXHQgKiB0aGUgUmV0dXJuIEFkZHJlc3MgUHJlZGljdG9yLCBub3QgdGhlIHJlc3RyaWN0ZWQgaW5kaXJlY3QgYnJhbmNoXG4rXHQgKiBwcmVkaWN0b3JzIHRoYXQgSUJSUyBjb250cm9scy4gIFNvIGtlZXAgdGhpcyBJbnRlbC1vbmx5IGFuZCBsZWF2ZVxuK1x0ICogQU1EJ3Mgc29mdHdhcmUgcmV0dXJuLXRodW5rIG1pdGlnYXRpb24gKFVOUkVUL0lCUEIpIGluIHBsYWNlIGV2ZW5cbitcdCAqIHdoZW4gc3BlY3RyZV92Mj1pYnJzIGlzIHNlbGVjdGVkLlxuIFx0ICovXG4gXHRpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwpIHtcbiBcdFx0c3dpdGNoIChzcGVjdHJlX3YyX2VuYWJsZWQpIHtcbkBAIC0xNjcyLDYgKzE2NzksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcmV0cG9saW5lX3NlcV9lbmFibGVkKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9XG4gI2RlZmluZSBTUEVDVFJFX1YyX0xGRU5DRV9NU0cgXCJXQVJOSU5HOiBMRkVOQ0UgbWl0aWdhdGlvbiBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHRoaXMgQ1BVLCBkYXRhIGxlYWtzIHBvc3NpYmxlIVxcblwiXG4gI2RlZmluZSBTUEVDVFJFX1YyX0VJQlJTX0VCUEZfTVNHIFwiV0FSTklORzogVW5wcml2aWxlZ2VkIGVCUEYgaXMgZW5hYmxlZCB3aXRoIGVJQlJTIG9uLCBkYXRhIGxlYWtzIHBvc3NpYmxlIHZpYSBTcGVjdHJlIHYyIEJIQiBhdHRhY2tzIVxcblwiXG4gI2RlZmluZSBTUEVDVFJFX1YyX0VJQlJTX0xGRU5DRV9FQlBGX1NNVF9NU0cgXCJXQVJOSU5HOiBVbnByaXZpbGVnZWQgZUJQRiBpcyBlbmFibGVkIHdpdGggZUlCUlMrTEZFTkNFIG1pdGlnYXRpb24gYW5kIFNNVCwgZGF0YSBsZWFrcyBwb3NzaWJsZSB2aWEgU3BlY3RyZSB2MiBCSEIgYXR0YWNrcyFcXG5cIlxuKyNkZWZpbmUgU1BFQ1RSRV9WMl9FSUJSU19TTlBfUEVSRl9NU0cgXCJXQVJOSU5HOiBlSUJSUyBtaXRpZ2F0aW9uIGVuYWJsZXMgQXV0b0lCUlMgb24gU0VWLVNOUCBlbmFibGVkIENQVSwgdGhpcyBtYXkgY2F1c2UgcGVyZm9ybWFuY2UgbG9zc1xcblwiXG4gI2RlZmluZSBTUEVDVFJFX1YyX0lCUlNfUEVSRl9NU0cgXCJXQVJOSU5HOiBJQlJTIG1pdGlnYXRpb24gc2VsZWN0ZWQgb24gRW5oYW5jZWQgSUJSUyBDUFUsIHRoaXMgbWF5IGNhdXNlIHVubmVjZXNzYXJ5IHBlcmZvcm1hbmNlIGxvc3NcXG5cIlxuIFxuICNpZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbkBAIC0yMTY1LDExICsyMTczLDYgQEAgc3RhdGljIHZvaWQgX19pbml0IHNwZWN0cmVfdjJfc2VsZWN0X21pdGlnYXRpb24odm9pZClcbiBcdFx0c3BlY3RyZV92Ml9jbWQgPSBTUEVDVFJFX1YyX0NNRF9BVVRPO1xuIFx0fVxuIFxuLVx0aWYgKHNwZWN0cmVfdjJfY21kID09IFNQRUNUUkVfVjJfQ01EX0lCUlMgXHUwMDI2XHUwMDI2IGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0lOVEVMKSB7XG4tXHRcdHByX2VycihcIklCUlMgc2VsZWN0ZWQgYnV0IG5vdCBJbnRlbCBDUFUuIFN3aXRjaGluZyB0byBBVVRPIHNlbGVjdFxcblwiKTtcbi1cdFx0c3BlY3RyZV92Ml9jbWQgPSBTUEVDVFJFX1YyX0NNRF9BVVRPO1xuLVx0fVxuLVxuIFx0aWYgKHNwZWN0cmVfdjJfY21kID09IFNQRUNUUkVfVjJfQ01EX0lCUlMgXHUwMDI2XHUwMDI2ICFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSUJSUykpIHtcbiBcdFx0cHJfZXJyKFwiSUJSUyBzZWxlY3RlZCBidXQgQ1BVIGRvZXNuJ3QgaGF2ZSBJQlJTLiBTd2l0Y2hpbmcgdG8gQVVUTyBzZWxlY3RcXG5cIik7XG4gXHRcdHNwZWN0cmVfdjJfY21kID0gU1BFQ1RSRV9WMl9DTURfQVVUTztcbkBAIC0yMTk0LDcgKzIxOTcsMTUgQEAgc3RhdGljIHZvaWQgX19pbml0IHNwZWN0cmVfdjJfc2VsZWN0X21pdGlnYXRpb24odm9pZClcbiBcdFx0XHRicmVhaztcbiBcdFx0ZmFsbHRocm91Z2g7XG4gXHRjYXNlIFNQRUNUUkVfVjJfQ01EX0ZPUkNFOlxuLVx0XHRpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0lCUlNfRU5IQU5DRUQpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIFByZWZlciByZXRwb2xpbmUgd2hlbiBTTlAgaXMgZW5hYmxlZCBiZWNhdXNlIEF1dG9JQlJTXG4rXHRcdCAqIGRlZ3JhZGVzIGhvc3QgdXNlcnNwYWNlIGluZGlyZWN0IGJyYW5jaCBwZXJmb3JtYW5jZS4gIE9ubHlcbitcdFx0ICogZG8gc28gaWYgcmV0cG9saW5lIGlzIGFjdHVhbGx5IGJ1aWx0IGluLCBvdGhlcndpc2UgQXV0b0lCUlNcbitcdFx0ICogaXMgYmV0dGVyIHRoYW4gbGVhdmluZyB0aGUgc3lzdGVtIHVubWl0aWdhdGVkLlxuK1x0XHQgKi9cbitcdFx0aWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9JQlJTX0VOSEFOQ0VEKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICEoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1NFVl9TTlApIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgICBJU19FTkFCTEVEKENPTkZJR19NSVRJR0FUSU9OX1JFVFBPTElORSkpKSB7XG4gXHRcdFx0c3BlY3RyZV92Ml9lbmFibGVkID0gU1BFQ1RSRV9WMl9FSUJSUztcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTIyNzcsMTUgKzIyODgsMjQgQEAgc3RhdGljIHZvaWQgX19pbml0IHNwZWN0cmVfdjJfYXBwbHlfbWl0aWdhdGlvbih2b2lkKVxuIFx0aWYgKHNwZWN0cmVfdjJfZW5hYmxlZCA9PSBTUEVDVFJFX1YyX0VJQlJTIFx1MDAyNlx1MDAyNiB1bnByaXZpbGVnZWRfZWJwZl9lbmFibGVkKCkpXG4gXHRcdHByX2VycihTUEVDVFJFX1YyX0VJQlJTX0VCUEZfTVNHKTtcbiBcbi1cdGlmIChzcGVjdHJlX3YyX2luX2licnNfbW9kZShzcGVjdHJlX3YyX2VuYWJsZWQpKSB7XG4tXHRcdGlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVVUT0lCUlMpKSB7XG4tXHRcdFx0bXNyX3NldF9iaXQoTVNSX0VGRVIsIF9FRkVSX0FVVE9JQlJTKTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHR4ODZfc3BlY19jdHJsX2Jhc2UgfD0gU1BFQ19DVFJMX0lCUlM7XG4tXHRcdFx0dXBkYXRlX3NwZWNfY3RybCh4ODZfc3BlY19jdHJsX2Jhc2UpO1xuLVx0XHR9XG4rXHQvKlxuK1x0ICogT24gQXV0b0lCUlMtY2FwYWJsZSBDUFVzLCBlSUJSUyBpcyBlbmFibGVkIHRocm91Z2ggRUZFUi5BVVRPSUJSU1xuK1x0ICogcmF0aGVyIHRoYW4gU1BFQ19DVFJMLklCUlMuICBMZWdhY3kgc3BlY3RyZV92Mj1pYnJzIGtlZXBzIHVzaW5nXG4rXHQgKiBTUEVDX0NUUkwuSUJSUyBldmVuIHRoZXJlLCBhcyBpdCBuZWVkcyB0byBiZSB0b2dnbGVkIG9uIGtlcm5lbFxuK1x0ICogZW50cnkvZXhpdC5cbitcdCAqL1xuK1x0aWYgKHNwZWN0cmVfdjJfaW5fZWlicnNfbW9kZShzcGVjdHJlX3YyX2VuYWJsZWQpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BVVRPSUJSUykpIHtcbitcdFx0bXNyX3NldF9iaXQoTVNSX0VGRVIsIF9FRkVSX0FVVE9JQlJTKTtcbitcdH0gZWxzZSBpZiAoc3BlY3RyZV92Ml9pbl9pYnJzX21vZGUoc3BlY3RyZV92Ml9lbmFibGVkKSkge1xuK1x0XHR4ODZfc3BlY19jdHJsX2Jhc2UgfD0gU1BFQ19DVFJMX0lCUlM7XG4rXHRcdHVwZGF0ZV9zcGVjX2N0cmwoeDg2X3NwZWNfY3RybF9iYXNlKTtcbiBcdH1cbiBcbitcdGlmIChzcGVjdHJlX3YyX2luX2VpYnJzX21vZGUoc3BlY3RyZV92Ml9lbmFibGVkKSBcdTAwMjZcdTAwMjZcbitcdCAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU0VWX1NOUCkpXG4rXHRcdHByX3dhcm4oU1BFQ1RSRV9WMl9FSUJSU19TTlBfUEVSRl9NU0cpO1xuK1xuIFx0c3dpdGNoIChzcGVjdHJlX3YyX2VuYWJsZWQpIHtcbiBcdGNhc2UgU1BFQ1RSRV9WMl9OT05FOlxuIFx0XHRyZXR1cm47XG5AQCAtMzI4NCw2ICszMzA0LDE3IEBAIHZvaWQgX19pbml0IGNwdV9zZWxlY3RfbWl0aWdhdGlvbnModm9pZClcbiBcdFx0eDg2X3NwZWNfY3RybF9iYXNlIFx1MDAyNj0gflNQRUNfQ1RSTF9NSVRJR0FUSU9OU19NQVNLO1xuIFx0fVxuIFxuK1x0LypcbitcdCAqIExpa2V3aXNlIGZvciBFRkVSLkFVVE9JQlJTOiBoZWFkXzY0LlMgcHJlc2VydmVzIHRoZSBpbmNvbWluZyBFRkVSXG4rXHQgKiBiaXRzLCBzbyBhIGtleGVjIGZyb20gYSBrZXJuZWwgdGhhdCByYW4gaW4gQXV0b0lCUlMgbW9kZSBjYXJyaWVzIHRoZVxuK1x0ICogYml0IGludG8gdGhpcyBvbmUuICBDbGVhciBpdCBhbmQgbGV0IHRoZSBtaXRpZ2F0aW9uIHNlbGVjdGlvbiBiZWxvd1xuK1x0ICogcmVkaXNjb3ZlciBpdC4gIFRoaXMgYWxzbyBydW5zIGJlZm9yZSBpbml0X3JlYWxfbW9kZSgpIHNuYXBzaG90c1xuK1x0ICogRUZFUiBmb3IgdGhlIEFQIHRyYW1wb2xpbmUsIHNvIEFQcyBpbmhlcml0IHdoYXRldmVyIHRoaXMga2VybmVsXG4rXHQgKiBzZXR0bGVzIG9uIHJhdGhlciB0aGFuIHRoZSBwcmV2aW91cyBrZXJuZWwncyBjaG9pY2UuXG4rXHQgKi9cbitcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX0FVVE9JQlJTKSlcbitcdFx0bXNyX2NsZWFyX2JpdChNU1JfRUZFUiwgX0VGRVJfQVVUT0lCUlMpO1xuK1xuIFx0eDg2X2FyY2hfY2FwX21zciA9IHg4Nl9yZWFkX2FyY2hfY2FwX21zcigpO1xuIFxuIFx0Y3B1X3ByaW50X2F0dGFja192ZWN0b3JzKCk7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmNcbmluZGV4IGM3MzUyODI3ZjQ5MWQuLmM1NjhkNzQyODJhODQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jXG5AQCAtMTQ5NiwxMyArMTQ5Niw5IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBjcHVfc2V0X2J1Z19iaXRzKHN0cnVjdCBjcHVpbmZvX3g4NiAqYylcbiBcdC8qXG4gXHQgKiBBTUQncyBBdXRvSUJSUyBpcyBlcXVpdmFsZW50IHRvIEludGVsJ3MgZUlCUlMgLSB1c2UgdGhlIEludGVsIGZlYXR1cmVcbiBcdCAqIGZsYWcgYW5kIHByb3RlY3QgZnJvbSB2ZW5kb3Itc3BlY2lmaWMgYnVncyB2aWEgdGhlIHdoaXRlbGlzdC5cbi1cdCAqXG4tXHQgKiBEb24ndCB1c2UgQXV0b0lCUlMgd2hlbiBTTlAgaXMgZW5hYmxlZCBiZWNhdXNlIGl0IGRlZ3JhZGVzIGhvc3Rcbi1cdCAqIHVzZXJzcGFjZSBpbmRpcmVjdCBicmFuY2ggcGVyZm9ybWFuY2UuXG4gXHQgKi9cbiBcdGlmICgoeDg2X2FyY2hfY2FwX21zciBcdTAwMjYgQVJDSF9DQVBfSUJSU19BTEwpIHx8XG4tXHQgICAgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfQVVUT0lCUlMpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICAhY3B1X2ZlYXR1cmVfZW5hYmxlZChYODZfRkVBVFVSRV9TRVZfU05QKSkpIHtcbitcdCAgICBjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0FVVE9JQlJTKSkge1xuIFx0XHRzZXR1cF9mb3JjZV9jcHVfY2FwKFg4Nl9GRUFUVVJFX0lCUlNfRU5IQU5DRUQpO1xuIFx0XHRpZiAoIWNwdV9tYXRjaGVzKGNwdV92dWxuX3doaXRlbGlzdCwgTk9fRUlCUlNfUEJSU0IpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgISh4ODZfYXJjaF9jYXBfbXNyIFx1MDAyNiBBUkNIX0NBUF9QQlJTQl9OTykpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3N2bS9zZXYuYyBiL2FyY2gveDg2L2t2bS9zdm0vc2V2LmNcbmluZGV4IDU3MDU3MjNmMWY0MTIuLjUzY2M2ZDA0Mzg4MzYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG4rKysgYi9hcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jXG5AQCAtNTA2LDcgKzUwNiw3IEBAIHN0YXRpYyBpbnQgX19zZXZfZ3Vlc3RfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncCxcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoIXNucF9hY3RpdmUpXG4tXHRcdHZhbGlkX3Ztc2FfZmVhdHVyZXMgXHUwMDI2PSB+U1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0M7XG4rXHRcdHZhbGlkX3Ztc2FfZmVhdHVyZXMgXHUwMDI2PSB+U1ZNX1NFVl9GRUFUX1NOUF9PTkxZX01BU0s7XG4gXG4gXHRpZiAoZGF0YS1cdTAwM2V2bXNhX2ZlYXR1cmVzIFx1MDAyNiB+dmFsaWRfdm1zYV9mZWF0dXJlcylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMzI1Nyw4ICszMjU3LDIzIEBAIHZvaWQgX19pbml0IHNldl9oYXJkd2FyZV9zZXR1cCh2b2lkKVxuIFx0ICAgIGNwdV9mZWF0dXJlX2VuYWJsZWQoWDg2X0ZFQVRVUkVfTk9fTkVTVEVEX0RBVEFfQlApKVxuIFx0XHRzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgfD0gU1ZNX1NFVl9GRUFUX0RFQlVHX1NXQVA7XG4gXG4tXHRpZiAoc2V2X3NucF9lbmFibGVkIFx1MDAyNlx1MDAyNiB0c2Nfa2h6IFx1MDAyNlx1MDAyNiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NOUF9TRUNVUkVfVFNDKSlcbi1cdFx0c2V2X3N1cHBvcnRlZF92bXNhX2ZlYXR1cmVzIHw9IFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDO1xuK1x0aWYgKHNldl9zbnBfZW5hYmxlZCkge1xuK1x0XHRzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgfD0gU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkU7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFVubGlrZSBTZWN1cmUgVFNDIGFuZCBJQlBCLW9uLUVudHJ5IGJlbG93LCBCVEIgSXNvbGF0aW9uIGhhc1xuK1x0XHQgKiBubyBob3N0IGVudW1lcmF0aW9uIGJpdCB0byBnYXRlIG9uOiB0aGUgQVBNIGRlZmluZXMgaXQgYXNcbitcdFx0ICogYXJjaGl0ZWN0dXJhbGx5IHByZXNlbnQgb24gZXZlcnkgU0VWLVNOUC1jYXBhYmxlIHByb2Nlc3Nvci5cbitcdFx0ICogSWYgU05QIGlzIHN1cHBvcnRlZCwgQlRCIElzb2xhdGlvbiBpcyBhdmFpbGFibGUuXG4rXHRcdCAqL1xuK1x0XHRzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgfD0gU1ZNX1NFVl9GRUFUX0JUQl9JU09MQVRJT047XG4rXG4rXHRcdGlmICh0c2Nfa2h6IFx1MDAyNlx1MDAyNiBjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NOUF9TRUNVUkVfVFNDKSlcbitcdFx0XHRzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgfD0gU1ZNX1NFVl9GRUFUX1NFQ1VSRV9UU0M7XG4rXG4rXHRcdGlmIChjcHVfZmVhdHVyZV9lbmFibGVkKFg4Nl9GRUFUVVJFX1NOUF9JQlBCX09OX0VOVFJZKSlcbitcdFx0XHRzZXZfc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgfD0gU1ZNX1NFVl9GRUFUX0lCUEJfT05fRU5UUlk7XG4rXHR9XG4gfVxuIFxuIHZvaWQgc2V2X2hhcmR3YXJlX3Vuc2V0dXAodm9pZClcbmRpZmYgLS1naXQgYS90b29scy9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlcy5oIGIvdG9vbHMvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZXMuaFxuaW5kZXggNjU0N2MwYWVlNDViNy4uNjM0Y2QwOTM2NmRhNiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbisrKyBiL3Rvb2xzL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmVzLmhcbkBAIC00NjAsNiArNDYwLDcgQEBcbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0FMTE9XRURfU0VWX0ZFQVRVUkVTICgxOSozMisyNykgLyogQWxsb3dlZCBTRVYgRmVhdHVyZXMgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX1NWU01cdFx0KDE5KjMyKzI4KSAvKiBcInN2c21cIiBTVlNNIHByZXNlbnQgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0hWX0lOVVNFX1dSX0FMTE9XRURcdCgxOSozMiszMCkgLyogQWxsb3cgV3JpdGUgdG8gaW4tdXNlIGh5cGVydmlzb3Itb3duZWQgcGFnZXMgKi9cbisjZGVmaW5lIFg4Nl9GRUFUVVJFX1NOUF9JQlBCX09OX0VOVFJZXHQoMTkqMzIrMzEpIC8qIFNFVi1TTlAgSUJQQiBvbiBWTSBFbnRyeSAqL1xuIFxuIC8qIEFNRC1kZWZpbmVkIEV4dGVuZGVkIEZlYXR1cmUgMiBFQVgsIENQVUlEIGxldmVsIDB4ODAwMDAwMjEgKEVBWCksIHdvcmQgMjAgKi9cbiAjZGVmaW5lIFg4Nl9GRUFUVVJFX05PX05FU1RFRF9EQVRBX0JQXHQoMjAqMzIrIDApIC8qIE5vIE5lc3RlZCBEYXRhIEJyZWFrcG9pbnRzICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zZXZfaW5pdDJfdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc2V2X2luaXQyX3Rlc3RzLmNcbmluZGV4IDg3YmZmNGZiYjdlZDUuLjNmNTkyZTI0NWE2NmQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3Nldl9pbml0Ml90ZXN0cy5jXG5AQCAtMTMsMTcgKzEzLDI1IEBAXG4gI2luY2x1ZGUgXCJzdm1fdXRpbC5oXCJcbiAjaW5jbHVkZSBcImtzZWxmdGVzdC5oXCJcbiBcbi0jZGVmaW5lIFNWTV9TRVZfRkVBVF9ERUJVR19TV0FQIDMydVxuKyNkZWZpbmUgU1ZNX1NFVl9GRUFUX1NOUF9BQ1RJVkVcdFx0QklUX1VMTCgwKVxuKyNkZWZpbmUgU1ZNX1NFVl9GRUFUX0RFQlVHX1NXQVBcdFx0QklUX1VMTCg1KVxuKyNkZWZpbmUgU1ZNX1NFVl9GRUFUX0JUQl9JU09MQVRJT05cdEJJVF9VTEwoNylcbisjZGVmaW5lIFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDXHRcdEJJVF9VTEwoOSlcbisjZGVmaW5lIFNWTV9TRVZfRkVBVF9JQlBCX09OX0VOVFJZXHRCSVRfVUxMKDIxKVxuK1xuKy8qIEZlYXR1cmVzIHZhbGlkIG9ubHkgZm9yIFNOUCBndWVzdHMsIHJlamVjdGVkIGZvciBTRVYtRVMgYW5kIGJlbG93LiAqL1xuKyNkZWZpbmUgU05QX09OTFlfRkVBVFVSRVNcdFx0KFNWTV9TRVZfRkVBVF9TTlBfQUNUSVZFIHwgXFxcbitcdFx0XHRcdFx0IFNWTV9TRVZfRkVBVF9CVEJfSVNPTEFUSU9OIHwgXFxcbitcdFx0XHRcdFx0IFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDIHwgXFxcbitcdFx0XHRcdFx0IFNWTV9TRVZfRkVBVF9JQlBCX09OX0VOVFJZKVxuIFxuIC8qXG4gICogU29tZSBmZWF0dXJlcyBtYXkgaGF2ZSBoaWRkZW4gZGVwZW5kZW5jaWVzLCBvciBtYXkgb25seSB3b3JrXG4gICogZm9yIGNlcnRhaW4gVk0gdHlwZXMuICBFcnIgb24gdGhlIHNpZGUgb2Ygc2FmZXR5IGFuZCBkb24ndFxuICAqIGV4cGVjdCB0aGF0IGFsbCBzdXBwb3J0ZWQgZmVhdHVyZXMgY2FuIGJlIHBhc3NlZCBvbmUgYnkgb25lXG4gICogdG8gS1ZNX1NFVl9JTklUMi5cbi0gKlxuLSAqIChXZWxsLCByaWdodCBub3cgdGhlcmUncyBvbmx5IG9uZS4uLilcbiAgKi9cbi0jZGVmaW5lIEtOT1dOX0ZFQVRVUkVTIFNWTV9TRVZfRkVBVF9ERUJVR19TV0FQXG4rI2RlZmluZSBLTk9XTl9GRUFUVVJFU1x0XHQoU1ZNX1NFVl9GRUFUX0RFQlVHX1NXQVAgfCBTTlBfT05MWV9GRUFUVVJFUylcbiBcbiBpbnQga3ZtX2ZkO1xuIHU2NCBzdXBwb3J0ZWRfdm1zYV9mZWF0dXJlcztcbkBAIC0xMDgsNyArMTE2LDcgQEAgdm9pZCB0ZXN0X2ZlYXR1cmVzKHUzMiB2bV90eXBlLCB1NjQgc3VwcG9ydGVkX2ZlYXR1cmVzKVxuIFx0XHRpZiAoIShzdXBwb3J0ZWRfZmVhdHVyZXMgXHUwMDI2IEJJVF9VTEwoaSkpKVxuIFx0XHRcdHRlc3RfaW5pdDJfaW52YWxpZCh2bV90eXBlLFxuIFx0XHRcdFx0XHUwMDI2KHN0cnVjdCBrdm1fc2V2X2luaXQpeyAudm1zYV9mZWF0dXJlcyA9IEJJVF9VTEwoaSkgfSxcbi1cdFx0XHRcdFwidW5rbm93biBmZWF0dXJlXCIpO1xuK1x0XHRcdFx0XCJ1bmtub3duIG9yIHVuc3VwcG9ydGVkIGZlYXR1cmUgZm9yIFZNIHR5cGVcIik7XG4gXHRcdGVsc2UgaWYgKEtOT1dOX0ZFQVRVUkVTIFx1MDAyNiBCSVRfVUxMKGkpKVxuIFx0XHRcdHRlc3RfaW5pdDIodm1fdHlwZSxcbiBcdFx0XHRcdFx1MDAyNihzdHJ1Y3Qga3ZtX3Nldl9pbml0KXsgLnZtc2FfZmVhdHVyZXMgPSBCSVRfVUxMKGkpIH0pO1xuQEAgLTE1Nyw3ICsxNjUsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFxuIFx0dGVzdF9mZWF0dXJlcyhLVk1fWDg2X1NFVl9WTSwgMCk7XG4gXHRpZiAoaGF2ZV9zZXZfZXMpXG4tXHRcdHRlc3RfZmVhdHVyZXMoS1ZNX1g4Nl9TRVZfRVNfVk0sIHN1cHBvcnRlZF92bXNhX2ZlYXR1cmVzKTtcbitcdFx0dGVzdF9mZWF0dXJlcyhLVk1fWDg2X1NFVl9FU19WTSwgc3VwcG9ydGVkX3Ztc2FfZmVhdHVyZXMgXHUwMDI2IH5TTlBfT05MWV9GRUFUVVJFUyk7XG4gXHRpZiAoaGF2ZV9zbnApXG4gXHRcdHRlc3RfZmVhdHVyZXMoS1ZNX1g4Nl9TTlBfVk0sIHN1cHBvcnRlZF92bXNhX2ZlYXR1cmVzKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU5OjEzLjgwNjU1NTY2OFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjA4NjA5MzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXJuZWwgQ2hhbmdlcyBmb3IgeDg2IENQVSBhbmQgS1ZNIFNFViBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIHR3ZWFraW5nIHRoZSB4ODYgQ1BVIGZlYXR1cmVzIGFuZCB0aGUgS1ZNIFNFViBpbml0aWFsaXphdGlvbiBwcm9jZXNzLiBUaGUgY2hhbmdlcyBhcmUgc3ByZWFkIGFjcm9zcyBhIGJ1bmNoIG9mIGZpbGVzOiBgYXJjaC94ODYvS2NvbmZpZ2AsIHNvbWUgaGVhZGVyIGZpbGVzIGxpa2UgYGNwdWZlYXR1cmVzLmhgIGFuZCBgc3ZtLmhgLCBhbmQgdGhlbiBpbnRvIHNvbWUga2VybmVsIGNvZGUsIGBidWdzLmNgLCBgY29tbW9uLmNgLCBhbmQgYHNldi5jYCwgYWxvbmcgd2l0aCBhIGZldyBzZWxmdGVzdHMuIFNlZW1zIGxpa2UgYSBwcmV0dHkgZm9jdXNlZCB1cGRhdGUuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBzY2FuIGZvciBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcyBoZXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBiZSBtaXN1c2VkLCBhbmQgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBhbnkgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBtaWdodCBiZSBkZXBlbmRlbnQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXG5cbkl0IGxvb2tzIGxpa2UgdGhlIG1lYXQgb2YgdGhlIHBhdGNoIGlzIGFib3V0IENQVSBtaXRpZ2F0aW9uIGZsYWdzIOKAkyB0aGluZ3MgbGlrZSBJQlJTLCBBdXRvSUJSUywgU0VWLVNOUCwgYW5kIElCUEIgb24gZW50cnkuIEknbSBmb2N1c2luZyBvbiB0aGF0IGBzZXYuY2AgZmlsZSBub3csIHNwZWNpZmljYWxseSB0aGF0IHNuaXBwZXQgYXJvdW5kIGxpbmUgNTA2LiBJIHNlZSB0aGV5J3ZlIGNoYW5nZWQgaG93IGB2YWxpZF92bXNhX2ZlYXR1cmVzYCBpcyBoYW5kbGVkLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgbWFza2luZyBvdXQgYFNWTV9TRVZfRkVBVF9TRUNVUkVfVFNDYCBpZiBTTlAgaXNuJ3QgYWN0aXZlLiBCdXQgdGhlbiBJJ20gc2VlaW5nIGBTVk1fU0VWX0ZFQVRfU05QX09OTFlfTUFTS2Agd2hpY2ggc2VlbXMgbGlrZSBzb21ldGhpbmcgaW50ZXJlc3RpbmcgdG8gbG9vayBpbnRvLlxuXG5Ib2xkIG9uIGEgbWludXRlLi4uIGBkYXRhYCBpcyBhIHBvaW50ZXIgdG8gYHN0cnVjdCBrdm1fc2V2X2luaXRgLCBhbmQgaXQncyBiZWluZyBjb3BpZWQgZnJvbSB1c2VyIHNwYWNlLCBwYXNzZWQgYXMgYW4gYXJndW1lbnQuIERvZXMgdGhpcyBmdW5jdGlvbiwgb3IgYW55IHN1YnNlcXVlbnQgY2FsbHMgdG8gdGhpcywgcmV0dXJuIGFueXRoaW5nIHRvIHVzZXIgc3BhY2U/IEkgbmVlZCB0byB0cmFjayB0aGUgZGF0YSBmbG93LiBUaGF0IGNvdWxkIGJlIGEga2V5IHBvaW50IG9mIGF0dGFjayBpZiBub3QgY29ycmVjdGx5IGhhbmRsZWQuIExldCBtZSBsb29rIGF0IHRoZSBgX19zZXZfZ3Vlc3RfaW5pdGAgZnVuY3Rpb24gYW5kIGl0cyBjYWxsZXIsIHdoaWNoIGlzIGBzZXZfZ3Vlc3RfaW5pdGAgb3Igc29tZXRoaW5nIHNpbWlsYXIuIEkgbmVlZCB0byBzZWUgaWYgYW55IG9mIHRoYXQgdXNlci1zcGFjZS1zdXBwbGllZCBkYXRhIGlzIGJlaW5nIHVzZWQgdG8gd3JpdGUgYmFjayB0byB1c2VyIHNwYWNlLiBJdCBjb3VsZCBiZSBhbiBpbnRlcmVzdGluZyB2ZWN0b3IgdG8gZXhwbG9pdCBpZiB0aGV5J3JlIG5vdCBjYXJlZnVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjczLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTk6MjEuNDE1MTY3NTQyWiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzkxNjAwMDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc2V2X2d1ZXN0X2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL3N2bS9zZXYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vc3ZtL3Nldi5jPTQ3Nz1zdGF0aWMgdm9pZCBzbnBfZ3Vlc3RfcmVxX2NsZWFudXAoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy00OTAtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo0OTE6c3RhdGljIGludCBfX3Nldl9ndWVzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwLFxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNDkyLVxcdFxcdFxcdCAgICBzdHJ1Y3Qga3ZtX3Nldl9pbml0ICpkYXRhLFxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYz01ODE9c3RhdGljIGludCBzZXZfZ3Vlc3RfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjAwLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6NjAxOlxcdHJldHVybiBfX3Nldl9ndWVzdF9pbml0KGt2bSwgYXJncCwgXFx1MDAyNmRhdGEsIHZtX3R5cGUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjAyLX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9NjA0PXN0YXRpYyBpbnQgc2V2X2d1ZXN0X2luaXQyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zZXZfY21kICphcmdwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYy02MTgtXFxuYXJjaC94ODYva3ZtL3N2bS9zZXYuYzo2MTk6XFx0cmV0dXJuIF9fc2V2X2d1ZXN0X2luaXQoa3ZtLCBhcmdwLCBcXHUwMDI2ZGF0YSwga3ZtLVxcdTAwM2VhcmNoLnZtX3R5cGUpO1xcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtNjIwLX1cXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM9MzM0OD12b2lkIHNldl9ndWVzdF9tZW1vcnlfcmVjbGFpbWVkKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzM1NC1cXHQgKlxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmM6MzM1NTpcXHQgKiBDaGVja2luZyBmb3IgU0VWKyBvdXRzaWRlIG9mIGt2bS1cXHUwMDNlbG9jayBpcyBzYWZlIGFzIF9fc2V2X2d1ZXN0X2luaXQoKVxcbmFyY2gveDg2L2t2bS9zdm0vc2V2LmMtMzM1Ni1cXHQgKiBjYW4gb25seSBiZSBkb25lIGJlZm9yZSB2Q1BVcyBhcmUgY3JlYXRlZCwgY2FjaGVzIGNhbiBiZSBpbmNvaGVyZW50XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIyOjU5OjIyLjgwNjc3NDY1MVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzEwMTIwNTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtNU0FOIE5lY2Vzc2l0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2luZyBvbiBDUFUgZmVhdHVyZSBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGluIHRoZSBjb250ZXh0IG9mIFNFVi1TTlAgYW5kIElCUlMuIFRoZSBiZWF1dHkgb2YgaXQgaXMgdGhhdCBpdCdzICpwdXJlbHkqIGFib3V0IHRoZSBsb2dpYyBmb3IgQ1BVIG1pdGlnYXRpb24gc2VsZWN0aW9uIGFuZCB2YWxpZGF0aW5nIEtWTSBTRVYgaW5pdGlhbGl6YXRpb24gZmVhdHVyZXMuIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRoYXQgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS4gTm8gbmV3IGFsbG9jYXRpb25zIGFyZSBoYXBwZW5pbmcsIGFuZCBjcnVjaWFsbHksIEknbSBzZWVpbmcgbm90aGluZyB0aGF0IGhpbnRzIGF0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBkYXRhLVx1MDAzZXZtc2FfZmVhdHVyZXNgIGJpdC4gQWgsIHJpZ2h0LCB0aGF0IGNvbWVzIGZyb20gdGhlIGBzdHJ1Y3Qga3ZtX3Nldl9pbml0YCBzdHJ1Y3R1cmUsIHdoaWNoIGlzIGNvcGllZCBmcm9tIHVzZXIgc3BhY2UuIEFuZCBJJ20gbG9va2luZyByaWdodCBhdCB0aGUgYGNvcHlfZnJvbV91c2VyYCBjYWxsIGluIGBzZXZfZ3Vlc3RfaW5pdDJgOlxuXG5gYGBjXG5zdGF0aWMgaW50IHNldl9ndWVzdF9pbml0MihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fc2V2X2NtZCAqYXJncClcbntcbiAgICBzdHJ1Y3Qga3ZtX3Nldl9pbml0IGRhdGE7XG5cbiAgICBpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2ZGF0YSwgKHZvaWQgX191c2VyICopKHVpbnRwdHJfdClhcmdwLVx1MDAzZWRhdGEsIHNpemVvZihkYXRhKSkpXG4gICAgICAgIHJldHVybiAtRUZBVUxUO1xuXG4gICAgcmV0dXJuIF9fc2V2X2d1ZXN0X2luaXQoa3ZtLCBhcmdwLCBcdTAwMjZkYXRhLCBrdm0tXHUwMDNlYXJjaC52bV90eXBlKTtcbn1cbmBgYFxuXG5Pa2F5LCBnb29kLiBgZGF0YWAgaXMgKmZ1bGx5KiBpbml0aWFsaXplZCBieSB0aGF0IGBjb3B5X2Zyb21fdXNlcmAgY2FsbC4gVGhlcmUncyBubyB3YXkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciBsZWFrZWQgdGhyb3VnaCB0aGF0IHBhdGguIFRoaXMgaXMgc29saWQuXG5cblRoZXJlZm9yZSwgbXkgYXNzZXNzbWVudCBpcyB0aGF0IEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBJJ20gZ29pbmcgdG8gc2V0IGBOZWVkc0tNU0FOPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODgwMiwiT3V0cHV0VG9rZW5zIjoxMzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjI6NTk6MjkuMTE2ODk4NTU3WiIsIlNlcSI6NTAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBDUFUgbWl0aWdhdGlvbiBzZWxlY3Rpb24gbG9naWMgKElCUlMsIEF1dG9JQlJTLCBTRVYtU05QKSBhbmQgS1ZNIFNFViBpbml0aWFsaXphdGlvbiBmZWF0dXJlIHZhbGlkYXRpb24uIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQuIFRoZSBtb2RpZmllZCBkYXRhIHN0cnVjdHVyZXMgKGxpa2UgYHN0cnVjdCBrdm1fc2V2X2luaXRgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgZnJvbSB1c2VyIHNwYWNlIHZpYSBgY29weV9mcm9tX3VzZXJgIGJlZm9yZSBiZWluZyByZWFkLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgZXhwb3NlZCBieSB0aGVzZSBjaGFuZ2VzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIENQVSBtaXRpZ2F0aW9uIHNlbGVjdGlvbiBsb2dpYyAoSUJSUywgQXV0b0lCUlMsIFNFVi1TTlApIGFuZCBLVk0gU0VWIGluaXRpYWxpemF0aW9uIGZlYXR1cmUgdmFsaWRhdGlvbi4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gVGhlIG1vZGlmaWVkIGRhdGEgc3RydWN0dXJlcyAobGlrZSBgc3RydWN0IGt2bV9zZXZfaW5pdGApIGFyZSBmdWxseSBpbml0aWFsaXplZCBmcm9tIHVzZXIgc3BhY2UgdmlhIGBjb3B5X2Zyb21fdXNlcmAgYmVmb3JlIGJlaW5nIHJlYWQuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyBleHBvc2VkIGJ5IHRoZXNlIGNoYW5nZXMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz65zh[1] Phase: Succeeded StartedAt: 2026-08-26 22:59:40 +0000 UTC FinishedAt: 2026-08-26 22:59:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz65zh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 22:59:40 +0000 UTC FinishedAt: 2026-08-26 22:59:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz65zh[2] Phase: Succeeded StartedAt: 2026-08-26 22:59:40 +0000 UTC FinishedAt: 2026-08-27 00:10:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-26 22:59:40 +0000 UTC FinishedAt: 2026-08-27 00:10:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-26 22:59:40 +0000 UTC FinishedAt: 2026-08-26 22:59:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-26 22:59:40 +0000 UTC FinishedAt: 2026-08-26 22:59:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz65zh/series-workflowz65zh-convert-artifact-2056872415/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-26 22:59:50 +0000 UTC FinishedAt: 2026-08-26 23:16:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-26 22:59:50 +0000 UTC FinishedAt: 2026-08-26 23:16:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*f1716ddb-da6c-448e-97d2-7c39c5840567,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz65zh/series-workflowz65zh-convert-artifact-2056872415/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "413a9e0a-af9c-41d2-b752-47c986119ec9", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz65zh/series-workflowz65zh-build-action-128730853/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-26 22:59:50 +0000 UTC FinishedAt: 2026-08-26 23:16:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*f1716ddb-da6c-448e-97d2-7c39c5840567,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz65zh/series-workflowz65zh-convert-artifact-2056872415/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "413a9e0a-af9c-41d2-b752-47c986119ec9", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz65zh/series-workflowz65zh-build-action-128730853/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-26 23:16:28 +0000 UTC FinishedAt: 2026-08-26 23:16:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-26 23:16:28 +0000 UTC FinishedAt: 2026-08-26 23:16:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-26 23:16:28 +0000 UTC FinishedAt: 2026-08-26 23:16:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-26 23:16:28 +0000 UTC FinishedAt: 2026-08-26 23:16:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz65zh/series-workflowz65zh-convert-artifact-3707455854/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-26 23:16:38 +0000 UTC FinishedAt: 2026-08-26 23:18:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-26 23:16:38 +0000 UTC FinishedAt: 2026-08-26 23:18:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*413a9e0a-af9c-41d2-b752-47c986119ec9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz65zh/series-workflowz65zh-build-action-128730853/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-26 23:18:32 +0000 UTC FinishedAt: 2026-08-26 23:18:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-26 23:18:32 +0000 UTC FinishedAt: 2026-08-26 23:18:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-26 23:18:32 +0000 UTC FinishedAt: 2026-08-26 23:34:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-26 23:18:32 +0000 UTC FinishedAt: 2026-08-26 23:34:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*f1716ddb-da6c-448e-97d2-7c39c5840567,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz65zh/series-workflowz65zh-convert-artifact-3707455854/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "b960bf00-1d21-4e96-a099-b89375427d54", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz65zh/series-workflowz65zh-build-action-3542424194/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-26 23:18:32 +0000 UTC FinishedAt: 2026-08-26 23:34:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*f1716ddb-da6c-448e-97d2-7c39c5840567,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz65zh/series-workflowz65zh-convert-artifact-3707455854/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "b960bf00-1d21-4e96-a099-b89375427d54", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz65zh/series-workflowz65zh-build-action-3542424194/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-26 23:34:55 +0000 UTC FinishedAt: 2026-08-26 23:34:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-26 23:34:55 +0000 UTC FinishedAt: 2026-08-26 23:34:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-26 23:34:55 +0000 UTC FinishedAt: 2026-08-26 23:36:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-26 23:34:55 +0000 UTC FinishedAt: 2026-08-26 23:36:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b960bf00-1d21-4e96-a099-b89375427d54,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz65zh/series-workflowz65zh-build-action-3542424194/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-26 23:36:49 +0000 UTC FinishedAt: 2026-08-27 00:10:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-26 23:36:49 +0000 UTC FinishedAt: 2026-08-27 00:10:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*413a9e0a-af9c-41d2-b752-47c986119ec9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b960bf00-1d21-4e96-a099-b89375427d54,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz65zh/series-workflowz65zh-build-action-128730853/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz65zh/series-workflowz65zh-build-action-3542424194/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-26 23:36:49 +0000 UTC FinishedAt: 2026-08-26 23:36:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-26 23:36:49 +0000 UTC FinishedAt: 2026-08-26 23:36:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz65zh/series-workflowz65zh-convert-artifact-2357809939/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-26 23:36:49 +0000 UTC FinishedAt: 2026-08-26 23:36:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-26 23:36:49 +0000 UTC FinishedAt: 2026-08-26 23:36:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-26 23:36:49 +0000 UTC FinishedAt: 2026-08-26 23:36:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-26 23:36:59 +0000 UTC FinishedAt: 2026-08-27 00:10:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz65zh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["sev_mem_enc_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ec8477a492cb24f2c334847c8734ca56c7ffdd29","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_AMD","KVM_AMD_SEV","CRYPTO_DEV_CCP_DD","CRYPTO_DEV_SP_PSP","AMD_IOMMU","IOMMU_SUPPORT"],"series_id":"cc0bd5b4-43c7-414a-b18a-677a2a7e94bc","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-26 23:36:59 +0000 UTC FinishedAt: 2026-08-27 00:10:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*413a9e0a-af9c-41d2-b752-47c986119ec9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b960bf00-1d21-4e96-a099-b89375427d54,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz65zh/series-workflowz65zh-build-action-128730853/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz65zh/series-workflowz65zh-build-action-3542424194/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowz65zh/series-workflowz65zh-convert-artifact-2357809939/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}