ZGlmZiAtLWdpdCBhLy5pZGVhLy5naXRpZ25vcmUgYi8uaWRlYS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZDMzNTIKLS0tIC9kZXYvbnVsbAorKysgYi8uaWRlYS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMyBAQAorIyBEZWZhdWx0IGlnbm9yZWQgZmlsZXMKKy9zaGVsZi8KKy93b3Jrc3BhY2UueG1sCmRpZmYgLS1naXQgYS8uaWRlYS9taXNjLnhtbCBiLy5pZGVhL21pc2MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YWU2NTMKLS0tIC9kZXYvbnVsbAorKysgYi8uaWRlYS9taXNjLnhtbApAQCAtMCwwICsxLDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB2ZXJzaW9uPSI0Ij4KKyAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0Um9vdE1hbmFnZXIiIHZlcnNpb249IjIiIHByb2plY3QtamRrLW5hbWU9IjEuOCIgcHJvamVjdC1qZGstdHlwZT0iSmF2YVNESyIgLz4KKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8uaWRlYS9tb2R1bGVzLnhtbCBiLy5pZGVhL21vZHVsZXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNTdlMWYKLS0tIC9kZXYvbnVsbAorKysgYi8uaWRlYS9tb2R1bGVzLnhtbApAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB2ZXJzaW9uPSI0Ij4KKyAgPGNvbXBvbmVudCBuYW1lPSJQcm9qZWN0TW9kdWxlTWFuYWdlciI+CisgICAgPG1vZHVsZXM+CisgICAgICA8bW9kdWxlIGZpbGV1cmw9ImZpbGU6Ly8kUFJPSkVDVF9ESVIkLy5pZGVhL29yZy5lY2xpcHNlLm9wZW5rLXVzZXJtb2R1bGVzLmdyaWRGYWlsdXJlSW5mb3JtYXRpb24uYmFja2VuZC5pbWwiIGZpbGVwYXRoPSIkUFJPSkVDVF9ESVIkLy5pZGVhL29yZy5lY2xpcHNlLm9wZW5rLXVzZXJtb2R1bGVzLmdyaWRGYWlsdXJlSW5mb3JtYXRpb24uYmFja2VuZC5pbWwiIC8+CisgICAgPC9tb2R1bGVzPgorICA8L2NvbXBvbmVudD4KKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8uaWRlYS9vcmcuZWNsaXBzZS5vcGVuay11c2VybW9kdWxlcy5ncmlkRmFpbHVyZUluZm9ybWF0aW9uLmJhY2tlbmQuaW1sIGIvLmlkZWEvb3JnLmVjbGlwc2Uub3BlbmstdXNlcm1vZHVsZXMuZ3JpZEZhaWx1cmVJbmZvcm1hdGlvbi5iYWNrZW5kLmltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmViZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvLmlkZWEvb3JnLmVjbGlwc2Uub3BlbmstdXNlcm1vZHVsZXMuZ3JpZEZhaWx1cmVJbmZvcm1hdGlvbi5iYWNrZW5kLmltbApAQCAtMCwwICsxLDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8bW9kdWxlIHR5cGU9IkpBVkFfTU9EVUxFIiB2ZXJzaW9uPSI0Ij4KKyAgPGNvbXBvbmVudCBuYW1lPSJOZXdNb2R1bGVSb290TWFuYWdlciIgaW5oZXJpdC1jb21waWxlci1vdXRwdXQ9InRydWUiPgorICAgIDxleGNsdWRlLW91dHB1dCAvPgorICAgIDxjb250ZW50IHVybD0iZmlsZTovLyRNT0RVTEVfRElSJCIgLz4KKyAgICA8b3JkZXJFbnRyeSB0eXBlPSJpbmhlcml0ZWRKZGsiIC8+CisgICAgPG9yZGVyRW50cnkgdHlwZT0ic291cmNlRm9sZGVyIiBmb3JUZXN0cz0iZmFsc2UiIC8+CisgIDwvY29tcG9uZW50PgorPC9tb2R1bGU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvLmlkZWEvc29uYXJsaW50L2lzc3Vlc3RvcmUvMy80LzM0ZDY0NjczNmVjYWNmY2JiOGNiOTkwOWIzY2RhYTVlNzQ1MzAzNjAgYi8uaWRlYS9zb25hcmxpbnQvaXNzdWVzdG9yZS8zLzQvMzRkNjQ2NzM2ZWNhY2ZjYmI4Y2I5OTA5YjNjZGFhNWU3NDUzMDM2MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvLmlkZWEvc29uYXJsaW50L2lzc3Vlc3RvcmUvMy80LzM0ZDY0NjczNmVjYWNmY2JiOGNiOTkwOWIzY2RhYTVlNzQ1MzAzNjAKZGlmZiAtLWdpdCBhLy5pZGVhL3NvbmFybGludC9pc3N1ZXN0b3JlL2IvMi9iMjk0NzkwYTBhYmY2ZTYzNDVmZGJlN2I3MGUxNDgwZDk5NGU0ZGI5IGIvLmlkZWEvc29uYXJsaW50L2lzc3Vlc3RvcmUvYi8yL2IyOTQ3OTBhMGFiZjZlNjM0NWZkYmU3YjcwZTE0ODBkOTk0ZTRkYjkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y3NDYyOQotLS0gL2Rldi9udWxsCisrKyBiLy5pZGVhL3NvbmFybGludC9pc3N1ZXN0b3JlL2IvMi9iMjk0NzkwYTBhYmY2ZTYzNDVmZGJlN2I3MGUxNDgwZDk5NGU0ZGI5CkBAIC0wLDAgKzEsMyBAQAorCiuXARIKK2phdmE6UzExODYYHCKAAUFkZCBhIG5lc3RlZCBjb21tZW50IGV4cGxhaW5pbmcgd2h5IHRoaXMgbWV0aG9kIGlzIGVtcHR5LCB0aHJvdyBhbiBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBvciBjb21wbGV0ZSB0aGUgaW1wbGVtZW50YXRpb24uKMjK8N4CClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvLmlkZWEvc29uYXJsaW50L2lzc3Vlc3RvcmUvaW5kZXgucGIgYi8uaWRlYS9zb25hcmxpbnQvaXNzdWVzdG9yZS9pbmRleC5wYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmY0MDZlCi0tLSAvZGV2L251bGwKKysrIGIvLmlkZWEvc29uYXJsaW50L2lzc3Vlc3RvcmUvaW5kZXgucGIKQEAgLTAsMCArMSw1IEBACisKK50BCittZ2ZzQmFja2VuZFNlcnZpY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL2NvbmZpZy9EbXpFeHBvcnRTY2hlZHVsZXJDb25maWcuamF2YRIsYlwyXGIyOTQ3OTBhMGFiZjZlNjM0NWZkYmU3YjcwZTE0ODBkOTk0ZTRkYjkKK2QKKzRnZnNCYWNrZW5kU2VydmljZS9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb24ueW1sEiwzXDRcMzRkNjQ2NzM2ZWNhY2ZjYmI4Y2I5OTA5YjNjZGFhNWU3NDUzMDM2MApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhLy5pZGVhL3Zjcy54bWwgYi8uaWRlYS92Y3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YTI1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi8uaWRlYS92Y3MueG1sCkBAIC0wLDAgKzEsNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHZlcnNpb249IjQiPgorICA8Y29tcG9uZW50IG5hbWU9IlZjc0RpcmVjdG9yeU1hcHBpbmdzIj4KKyAgICA8bWFwcGluZyBkaXJlY3Rvcnk9IiRQUk9KRUNUX0RJUiQiIHZjcz0iR2l0IiAvPgorICA8L2NvbXBvbmVudD4KKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9TQU1PLUludGVyZmFjZS9Eb2NrZXJmaWxlX0RldlNlcnZlciBiL1NBTU8tSW50ZXJmYWNlL0RvY2tlcmZpbGVfRGV2U2VydmVyCmluZGV4IDVkOGU2ODkuLjk0NmFmNjQgMTAwNjQ0Ci0tLSBhL1NBTU8tSW50ZXJmYWNlL0RvY2tlcmZpbGVfRGV2U2VydmVyCisrKyBiL1NBTU8tSW50ZXJmYWNlL0RvY2tlcmZpbGVfRGV2U2VydmVyCkBAIC0xNCw4ICsxNCw2IEBACiBGUk9NIG9wZW5qZGs6OC1qcmUtYWxwaW5lCiAKIEVOViBKQVZBX1RPT0xfT1BUSU9OUyAtYWdlbnRsaWI6amR3cD10cmFuc3BvcnQ9ZHRfc29ja2V0LGFkZHJlc3M9ODAwMCxzZXJ2ZXI9eSxzdXNwZW5kPW4KLUVOViBIVFRQX1BST1hZIGh0dHA6Ly93ZWJwcm94eTMucHRhLmRlOjgwODAKLUVOViBIVFRQU19QUk9YWSBodHRwOi8vd2VicHJveHkzLnB0YS5kZTo4MDgwCiBFTlYgVFogRXVyb3BlL0JlcmxpbgogCiAjIGluc3RhbGwgdHpkYXRhIHRvIHNldCB0aGUgcmlnaHQgdGltZXpvbmUKZGlmZiAtLWdpdCBhL1NBTU8tSW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYW1vaW50ZXJmYWNlL2NvbmZpZy9GZWlnbkNsaWVudENvbmZpZy5qYXZhIGIvU0FNTy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhbW9pbnRlcmZhY2UvY29uZmlnL0ZlaWduQ2xpZW50Q29uZmlnLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2NTZiMTQuLjAwMDAwMDAKLS0tIGEvU0FNTy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhbW9pbnRlcmZhY2UvY29uZmlnL0ZlaWduQ2xpZW50Q29uZmlnLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxOSBDb250cmlidXRvcnMgdG8gdGhlIEVjbGlwc2UgRm91bmRhdGlvbgotICoKLSAqIFNlZSB0aGUgTk9USUNFIGZpbGUocykgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwKLSAqIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQotICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMi4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLgotICoKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2Ftb2ludGVyZmFjZS5jb25maWc7Ci0KLWltcG9ydCBmZWlnbi5SZXF1ZXN0SW50ZXJjZXB0b3I7Ci1pbXBvcnQgZmVpZ24uYXV0aC5CYXNpY0F1dGhSZXF1ZXN0SW50ZXJjZXB0b3I7Ci1pbXBvcnQgbG9tYm9rLmV4dGVybi5sb2c0ai5Mb2c0ajI7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uVmFsdWU7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LmFubm90YXRpb24uQmVhbjsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuYW5ub3RhdGlvbi5Db25maWd1cmF0aW9uOwotCi1ATG9nNGoyCi1AQ29uZmlndXJhdGlvbgotcHVibGljIGNsYXNzIEZlaWduQ2xpZW50Q29uZmlnIHsKLQotICAgIEBWYWx1ZSgiJHtzdG9lcnVuZ3NhdXNrdW5mdC51c2VyfSIpCi0gICAgcHVibGljIFN0cmluZyB1c2VyOwotICAgIEBWYWx1ZSgiJHtzdG9lcnVuZ3NhdXNrdW5mdC5wYXNzd29yZH0iKQotICAgIHB1YmxpYyBTdHJpbmcgcGFzc3dvcmQ7Ci0KLSAgICBAQmVhbgotICAgIHB1YmxpYyBSZXF1ZXN0SW50ZXJjZXB0b3IgYmFzaWNBdXRoUmVxdWVzdEludGVyY2VwdG9yKCkgewotICAgICAgICByZXR1cm4gbmV3IEJhc2ljQXV0aFJlcXVlc3RJbnRlcmNlcHRvcih1c2VyLCBwYXNzd29yZCk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9TQU1PLUludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2Ftb2ludGVyZmFjZS9jb250cm9sbGVyL0ltcG9ydENvbnRyb2xsZXIuamF2YSBiL1NBTU8tSW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYW1vaW50ZXJmYWNlL2NvbnRyb2xsZXIvSW1wb3J0Q29udHJvbGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjE1MGRmLi4wMDAwMDAwCi0tLSBhL1NBTU8tSW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYW1vaW50ZXJmYWNlL2NvbnRyb2xsZXIvSW1wb3J0Q29udHJvbGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTkgQ29udHJpYnV0b3JzIHRvIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24KLSAqCi0gKiBTZWUgdGhlIE5PVElDRSBmaWxlKHMpIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsCi0gKiBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYuIDIuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC4KLSAqCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhbW9pbnRlcmZhY2UuY29udHJvbGxlcjsKLQotaW1wb3J0IGlvLnN3YWdnZXIuYW5ub3RhdGlvbnMuQXBpT3BlcmF0aW9uOwotaW1wb3J0IGlvLnN3YWdnZXIuYW5ub3RhdGlvbnMuQXBpUmVzcG9uc2U7Ci1pbXBvcnQgaW8uc3dhZ2dlci5hbm5vdGF0aW9ucy5BcGlSZXNwb25zZXM7Ci1pbXBvcnQgbG9tYm9rLmV4dGVybi5sb2c0ai5Mb2c0ajI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYW1vaW50ZXJmYWNlLnNlcnZpY2UuSW1wb3J0U2VydmljZTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5odHRwLkh0dHBTdGF0dXM7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLkdldE1hcHBpbmc7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLlJlcXVlc3RNYXBwaW5nOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmJpbmQuYW5ub3RhdGlvbi5SZXNwb25zZVN0YXR1czsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uUmVzdENvbnRyb2xsZXI7Ci0KLWltcG9ydCBqYXZheC54bWwuYmluZC5KQVhCRXhjZXB0aW9uOwotCi1ATG9nNGoyCi1AUmVzdENvbnRyb2xsZXIKLUBSZXF1ZXN0TWFwcGluZygiL3NhbW8iKQotcHVibGljIGNsYXNzIEltcG9ydENvbnRyb2xsZXIgewotCi0gICAgQEF1dG93aXJlZAotICAgIHByaXZhdGUgSW1wb3J0U2VydmljZSBpbXBvcnRTZXJ2aWNlOwotCi0gICAgQEdldE1hcHBpbmcoIi90ZXN0IikKLSAgICBAQXBpT3BlcmF0aW9uKHZhbHVlID0gIkltcG9ydCB2b24gU3TDtnJ1bmdzaW5mb3JtYXRpb25lbiB2b24gU0FSSVMgenUgU0lUIikKLSAgICBAQXBpUmVzcG9uc2VzKHZhbHVlID0gewotICAgICAgICAgICAgQEFwaVJlc3BvbnNlKGNvZGUgPSAyMDEsIG1lc3NhZ2UgPSAiU3TDtnJ1bmdzaW5mb3JtYXRpb24gZXJmb2xncmVpY2ggaW1wb3J0aWVydCIpLAotICAgICAgICAgICAgQEFwaVJlc3BvbnNlKGNvZGUgPSA1MDAsIG1lc3NhZ2UgPSAiS29ubnRlIG5pY2h0IGR1cmNoZ2Vmw7xocnQgd2VyZGVuIikKLSAgICB9KQotICAgIEBSZXNwb25zZVN0YXR1cyhIdHRwU3RhdHVzLk9LKQotICAgIHB1YmxpYyB2b2lkIHRlc3RTYW1vKCkgdGhyb3dzIEpBWEJFeGNlcHRpb24gewotCi0gICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigidGVzdGVyIik7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9TQU1PLUludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2Ftb2ludGVyZmFjZS9kdG9zL0ZvcmVpZ25GYWlsdXJlRGF0YUR0by5qYXZhIGIvU0FNTy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhbW9pbnRlcmZhY2UvZHRvcy9Gb3JlaWduRmFpbHVyZURhdGFEdG8uamF2YQppbmRleCA1NTQ0NDljLi5mYjU5NmJmIDEwMDY0NAotLS0gYS9TQU1PLUludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2Ftb2ludGVyZmFjZS9kdG9zL0ZvcmVpZ25GYWlsdXJlRGF0YUR0by5qYXZhCisrKyBiL1NBTU8tSW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYW1vaW50ZXJmYWNlL2R0b3MvRm9yZWlnbkZhaWx1cmVEYXRhRHRvLmphdmEKQEAgLTE4LDcgKzE4LDExIEBACiBpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmFubm90YXRpb24uSnNvblByb3BlcnR5OwogaW1wb3J0IGxvbWJvay5EYXRhOwogCi1pbXBvcnQgamF2YXgudmFsaWRhdGlvbi5jb25zdHJhaW50cy4qOworaW1wb3J0IGphdmF4LnZhbGlkYXRpb24uY29uc3RyYWludHMuTWF4OworaW1wb3J0IGphdmF4LnZhbGlkYXRpb24uY29uc3RyYWludHMuTWluOworaW1wb3J0IGphdmF4LnZhbGlkYXRpb24uY29uc3RyYWludHMuTm90TnVsbDsKK2ltcG9ydCBqYXZheC52YWxpZGF0aW9uLmNvbnN0cmFpbnRzLlBhdHRlcm47CitpbXBvcnQgamF2YXgudmFsaWRhdGlvbi5jb25zdHJhaW50cy5TaXplOwogaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwogaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwogaW1wb3J0IGphdmEudXRpbC5EYXRlOwpAQCAtMzMsNyArMzcsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOwogCiAgICAgQE5vdE51bGwKLSAgICBAUGF0dGVybihyZWdleHAgPSAiXiR8KFN8V3xGfEd8VEt8U1QpIikKKyAgICBAUGF0dGVybihyZWdleHAgPSAiXiR8KFN8V3xGfEd8VEt8U1R8T1MpIikKICAgICBwcml2YXRlIFN0cmluZyBicmFuY2g7CiAKICAgICBAUGF0dGVybihyZWdleHA9Il4kfChOU3xNU3xIUykiKQpAQCAtNzcsNyArODEsNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIHN0YXRpb25JZDsKIAogICAgIEBTaXplKG1heD0yMDApCi0gICAgQFBhdHRlcm4ocmVnZXhwPSJeJHxbQS1aYS16MC05w4TDpMOWw7bDnMO8w59cXHNfLygpLV0rIikKKyAgICBAUGF0dGVybihyZWdleHA9Il4kfFtBLVphLXowLTnDhMOkw5bDtsOcw7zDn1xcc18vKCksLjs6LV0rIikKICAgICBwcml2YXRlIFN0cmluZyBzdGF0aW9uRGVzY3JpcHRpb247CiAKICAgICBwcml2YXRlIEJpZ0RlY2ltYWwgbG9uZ2l0dWRlOwpkaWZmIC0tZ2l0IGEvU0FNTy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhbW9pbnRlcmZhY2Uvc2VydmljZS9JbXBvcnRTZXJ2aWNlLmphdmEgYi9TQU1PLUludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2Ftb2ludGVyZmFjZS9zZXJ2aWNlL0ltcG9ydFNlcnZpY2UuamF2YQppbmRleCAxNWVlZmIxLi5lNjUyNjg0IDEwMDY0NAotLS0gYS9TQU1PLUludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2Ftb2ludGVyZmFjZS9zZXJ2aWNlL0ltcG9ydFNlcnZpY2UuamF2YQorKysgYi9TQU1PLUludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2Ftb2ludGVyZmFjZS9zZXJ2aWNlL0ltcG9ydFNlcnZpY2UuamF2YQpAQCAtODYsNyArODYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKICAgICAgICAgICAgIGxvZy5pbmZvKCJTdWNjZXNmdWxseSBzZW50IG1lc3NhZ2UgZnJvbSBTQU1PLUludGVyZmFjZSB0byBtYWluLWFwcCB3aXRoIG1ldGFJZDogIiArIGZvcmVpZ25GYWlsdXJlTWVzc2FnZUR0by5nZXRNZXRhSWQoKSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBsb2cuZGVidWcoZS5nZXRNZXNzYWdlKCksIGUpOworICAgICAgICAgICAgbG9nLmVycm9yKGUuZ2V0TWVzc2FnZSgpLCBlKTsKICAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbFNlcnZlckVycm9yRXhjZXB0aW9uKCJjb3VsZC5ub3QucHVzaC5tZXNzYWdlIik7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU0FNTy1JbnRlcmZhY2Uvc3JjL21haW4vcmVzb3VyY2VzL2FwcGxpY2F0aW9uLnltbCBiL1NBTU8tSW50ZXJmYWNlL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi55bWwKaW5kZXggOGNhOTRlYS4uNmUzMDdjYiAxMDA2NDQKLS0tIGEvU0FNTy1JbnRlcmZhY2Uvc3JjL21haW4vcmVzb3VyY2VzL2FwcGxpY2F0aW9uLnltbAorKysgYi9TQU1PLUludGVyZmFjZS9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb24ueW1sCkBAIC0zMSwzMSArMzEsNiBAQAogc2VydmVyOgogICBtYXgtaHR0cC1oZWFkZXItc2l6ZTogMjYyMTQ0CiAKLWp3dDoKLSAgdG9rZW5IZWFkZXI6IEF1dGhvcml6YXRpb24KLSAgdXNlU3RhdGljSnd0OiBmYWxzZQotICBzdGF0aWNKd3Q6IHgKLQotZ3JpZEZhaWx1cmVJbmZvcm1hdGlvbjoKLSAgbWF4TGlzdFNpemU6IDIwMDAKLQotZmVpZ246Ci0gIGNsaWVudDoKLSAgICBjb25maWc6Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBjb25uZWN0VGltZW91dDogNjAwMDAKLSAgICAgICAgcmVhZFRpbWVvdXQ6IDYwMDAwCi1jb3JzOgotICBjb3JzRW5hYmxlZDogZmFsc2UKLQotc3RvZXJ1bmdzYXVza3VuZnQ6Ci0gIGFwaVVybDogaHR0cHM6Ly9zdGFnZS1hcGktb3BlcmF0b3Iuc3RvZXJ1bmdzYXVza3VuZnQuZGUvYXBpL3YxLjAvCi0gIHVzZXI6ICR7R0ZJX1NUT0VSVU5HU0FVU0tVTkZUX1VTRVJOQU1FfQotICBwYXNzd29yZDogJHtHRklfU1RPRVJVTkdTQVVTS1VORlRfUEFTU1dPUkR9Ci0gIHNjaGVkdWxpbmctaW1wb3J0OgotICAgIGVuYWJsZWQ6IGZhbHNlCi0gICAgY3JvbjogMCAqLzE1ICogPyAqICoKLQogc2Z0cDoKICAgZW5hYmxlLXBvbGxpbmc6IHRydWUKICAgaG9zdDogMTY5LjUwLjEzLjE1NApAQCAtNzMsMTEgKzQ4LDYgQEAKIHNwcmluZzoKICAgcHJvZmlsZXM6IHRlc3QKIAotand0OgotICB0b2tlbkhlYWRlcjogQXV0aG9yaXphdGlvbgotICB1c2VTdGF0aWNKd3Q6IHRydWUKLSAgc3RhdGljSnd0OiBleUpoYkdjaU9pSlNVekkxTmlJc0luUjVjQ0lnT2lBaVNsZFVJaXdpYTJsa0lpQTZJQ0pJWWxJM1oycG9ibUUyZVhKUlpuWkpUV2hVU1Y5dFkyZzNabXRUUVdWRlgzaExUakJoWlZsMGJqZGpJbjAuZXlKcWRHa2lPaUk1TUdJME5HRmtPQzFpWWpsbUxUUTFNemt0WVRRd1l5MHlZalF5WlROa05qTmlPR0VpTENKbGVIQWlPakUxTnpnMk5UVTNPVFVzSW01aVppSTZNQ3dpYVdGMElqb3hOVGM0TmpVMU5EazFMQ0pwYzNNaU9pSm9kSFJ3T2k4dmJHOWpZV3hvYjNOME9qZ3dPREF2WVhWMGFDOXlaV0ZzYlhNdlJXeHZaMkp2YjJzaUxDSmhkV1FpT2lKbGJHOW5ZbTl2YXkxaVlXTnJaVzVrSWl3aWMzVmlJam9pT0RZeU5qWTVObVl0WmpGaE1pMDBaR0kxTFRreVpXWXRaVGxoTWpRMk5qZzFZVFUwSWl3aWRIbHdJam9pUW1WaGNtVnlJaXdpWVhwd0lqb2laV3h2WjJKdmIyc3RZbUZqYTJWdVpDSXNJbUYxZEdoZmRHbHRaU0k2TUN3aWMyVnpjMmx2Ymw5emRHRjBaU0k2SWpKbU1XSXpPREU1TFdaak5qUXROREV6TkMxaU5XUXhMV1kzWldZNE56VTVOREJrTkNJc0ltRmpjaUk2SWpFaUxDSmhiR3h2ZDJWa0xXOXlhV2RwYm5NaU9sc2lLaUpkTENKeVpXRnNiVjloWTJObGMzTWlPbnNpY205c1pYTWlPbHNpYTI5dUxXRmtiV2x1SWl3aWEyOXVMWGR5YVhSbGNpSXNJbXR2YmkxaFkyTmxjM01pTENKcmIyNHRjbVZoWkdWeUlsMTlMQ0p5WlhOdmRYSmpaVjloWTJObGMzTWlPbnQ5TENKdVlXMWxJam9pVkdWemRHVnlSbWx5YzNSdVlXMWxYM0ozWVNCVVpYTjBaWEpNWVhOMGJtRnRaVjl5ZDJFaUxDSndjbVZtWlhKeVpXUmZkWE5sY201aGJXVWlPaUowWlhOMGRYTmxjbDl5ZDJFaUxDSm5hWFpsYmw5dVlXMWxJam9pVkdWemRHVnlSbWx5YzNSdVlXMWxYM0ozWVNJc0ltWmhiV2xzZVY5dVlXMWxJam9pVkdWemRHVnlUR0Z6ZEc1aGJXVmZjbmRoSW4wLkRBWVh1djR0S244UlhxTzFqeXR0bkQtdEY0blNoVUJReWZlNGJLYkFpUEF5WTJ4NVliQWYzTTRlWG5MckdxbzgtbG9HS2xkSUNDMjhiTDBMYU1BM0tLa1FFT2ZXNXNmcEdxb042MjEydnM4OW1Pa2x0MFRKWWM1UE1Yd0ZnSjVXQ19US2pkd3E3LWFhRGFmT0VXZWhWMFUxdXQzcy05NG92TllJRW4yOW56WG0yVzFsZG9YSkVxMDNGODgwamx5c1E1emxSdkdGN2VYRUVwRmZJMlVSeXlOUTJVV2gwU3NmcS1nT0F0MnBiRjF1NnByQTVSZnZVbVozdjFldTIxWUxHWnRncVBxeGIxbDZvZHlIM2lwMTVqX0hkZ25UZW81MnlteHVSVWo2NU1za21lM1Y1ZXYyRGl0SEk5dlpnbnBWOElkaGI0VFRXbGlCZUdDT01mREZDZwotCiAtLS0KIAogc3ByaW5nOgpAQCAtODksMTcgKzU5LDkgQEAKICAgICBvcmcuZWNsaXBzZS5vcGVuazogREVCVUcKICAgICBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYjogRVJST1IKIAotand0OgotICB0b2tlbkhlYWRlcjogQXV0aG9yaXphdGlvbgotICB1c2VTdGF0aWNKd3Q6IGZhbHNlCi0gIHN0YXRpY0p3dDogZXlKaGJHY2lPaUpTVXpJMU5pSXNJblI1Y0NJZ09pQWlTbGRVSWl3aWEybGtJaUE2SUNKSVlsSTNaMnBvYm1FMmVYSlJablpKVFdoVVNWOXRZMmczWm10VFFXVkZYM2hMVGpCaFpWbDBiamRqSW4wLmV5SnFkR2tpT2lJNU1HSTBOR0ZrT0MxaVlqbG1MVFExTXprdFlUUXdZeTB5WWpReVpUTmtOak5pT0dFaUxDSmxlSEFpT2pFMU56ZzJOVFUzT1RVc0ltNWlaaUk2TUN3aWFXRjBJam94TlRjNE5qVTFORGsxTENKcGMzTWlPaUpvZEhSd09pOHZiRzlqWVd4b2IzTjBPamd3T0RBdllYVjBhQzl5WldGc2JYTXZSV3h2WjJKdmIyc2lMQ0poZFdRaU9pSmxiRzluWW05dmF5MWlZV05yWlc1a0lpd2ljM1ZpSWpvaU9EWXlOalk1Tm1ZdFpqRmhNaTAwWkdJMUxUa3laV1l0WlRsaE1qUTJOamcxWVRVMElpd2lkSGx3SWpvaVFtVmhjbVZ5SWl3aVlYcHdJam9pWld4dloySnZiMnN0WW1GamEyVnVaQ0lzSW1GMWRHaGZkR2x0WlNJNk1Dd2ljMlZ6YzJsdmJsOXpkR0YwWlNJNklqSm1NV0l6T0RFNUxXWmpOalF0TkRFek5DMWlOV1F4TFdZM1pXWTROelU1TkRCa05DSXNJbUZqY2lJNklqRWlMQ0poYkd4dmQyVmtMVzl5YVdkcGJuTWlPbHNpS2lKZExDSnlaV0ZzYlY5aFkyTmxjM01pT25zaWNtOXNaWE1pT2xzaWEyOXVMV0ZrYldsdUlpd2lhMjl1TFhkeWFYUmxjaUlzSW10dmJpMWhZMk5sYzNNaUxDSnJiMjR0Y21WaFpHVnlJbDE5TENKeVpYTnZkWEpqWlY5aFkyTmxjM01pT250OUxDSnVZVzFsSWpvaVZHVnpkR1Z5Um1seWMzUnVZVzFsWDNKM1lTQlVaWE4wWlhKTVlYTjBibUZ0WlY5eWQyRWlMQ0p3Y21WbVpYSnlaV1JmZFhObGNtNWhiV1VpT2lKMFpYTjBkWE5sY2w5eWQyRWlMQ0puYVhabGJsOXVZVzFsSWpvaVZHVnpkR1Z5Um1seWMzUnVZVzFsWDNKM1lTSXNJbVpoYldsc2VWOXVZVzFsSWpvaVZHVnpkR1Z5VEdGemRHNWhiV1ZmY25kaEluMC5EQVlYdXY0dEtuOFJYcU8xanl0dG5ELXRGNG5TaFVCUXlmZTRiS2JBaVBBeVkyeDVZYkFmM000ZVhuTHJHcW84LWxvR0tsZElDQzI4YkwwTGFNQTNLS2tRRU9mVzVzZnBHcW9ONjIxMnZzODltT2tsdDBUSlljNVBNWHdGZ0o1V0NfVEtqZHdxNy1hYURhZk9FV2VoVjBVMXV0M3MtOTRvdk5ZSUVuMjluelhtMlcxbGRvWEpFcTAzRjg4MGpseXNRNXpsUnZHRjdlWEVFcEZmSTJVUnl5TlEyVVdoMFNzZnEtZ09BdDJwYkYxdTZwckE1UmZ2VW1aM3YxZXUyMVlMR1p0Z3FQcXhiMWw2b2R5SDNpcDE1al9IZGduVGVvNTJ5bXh1UlVqNjVNc2ttZTNWNWV2MkRpdEhJOXZaZ25wVjhJZGhiNFRUV2xpQmVHQ09NZkRGQ2cKLQogc2VydmVyOgogICBwb3J0OiA5MTk4CiAKLWNvcnM6Ci0gIGNvcnNFbmFibGVkOiB0cnVlCi0KIC0tLQogCiBzcHJpbmc6CkBAIC0xMzgsMTQgKzEwMCw2IEBACiAgICAgc2Vzc2lvbjoKICAgICAgIHRyYWNraW5nLW1vZGVzOiBjb29raWUKIAotand0OgotICB0b2tlbkhlYWRlcjogQXV0aG9yaXphdGlvbgotICB1c2VTdGF0aWNKd3Q6IGZhbHNlCi0gIHN0YXRpY0p3dDogZXlKaGJHY2lPaUpTVXpJMU5pSXNJblI1Y0NJZ09pQWlTbGRVSWl3aWEybGtJaUE2SUNKSVlsSTNaMnBvYm1FMmVYSlJablpKVFdoVVNWOXRZMmczWm10VFFXVkZYM2hMVGpCaFpWbDBiamRqSW4wLmV5SnFkR2tpT2lJNU1HSTBOR0ZrT0MxaVlqbG1MVFExTXprdFlUUXdZeTB5WWpReVpUTmtOak5pT0dFaUxDSmxlSEFpT2pFMU56ZzJOVFUzT1RVc0ltNWlaaUk2TUN3aWFXRjBJam94TlRjNE5qVTFORGsxTENKcGMzTWlPaUpvZEhSd09pOHZiRzlqWVd4b2IzTjBPamd3T0RBdllYVjBhQzl5WldGc2JYTXZSV3h2WjJKdmIyc2lMQ0poZFdRaU9pSmxiRzluWW05dmF5MWlZV05yWlc1a0lpd2ljM1ZpSWpvaU9EWXlOalk1Tm1ZdFpqRmhNaTAwWkdJMUxUa3laV1l0WlRsaE1qUTJOamcxWVRVMElpd2lkSGx3SWpvaVFtVmhjbVZ5SWl3aVlYcHdJam9pWld4dloySnZiMnN0WW1GamEyVnVaQ0lzSW1GMWRHaGZkR2x0WlNJNk1Dd2ljMlZ6YzJsdmJsOXpkR0YwWlNJNklqSm1NV0l6T0RFNUxXWmpOalF0TkRFek5DMWlOV1F4TFdZM1pXWTROelU1TkRCa05DSXNJbUZqY2lJNklqRWlMQ0poYkd4dmQyVmtMVzl5YVdkcGJuTWlPbHNpS2lKZExDSnlaV0ZzYlY5aFkyTmxjM01pT25zaWNtOXNaWE1pT2xzaWEyOXVMV0ZrYldsdUlpd2lhMjl1TFhkeWFYUmxjaUlzSW10dmJpMWhZMk5sYzNNaUxDSnJiMjR0Y21WaFpHVnlJbDE5TENKeVpYTnZkWEpqWlY5aFkyTmxjM01pT250OUxDSnVZVzFsSWpvaVZHVnpkR1Z5Um1seWMzUnVZVzFsWDNKM1lTQlVaWE4wWlhKTVlYTjBibUZ0WlY5eWQyRWlMQ0p3Y21WbVpYSnlaV1JmZFhObGNtNWhiV1VpT2lKMFpYTjBkWE5sY2w5eWQyRWlMQ0puYVhabGJsOXVZVzFsSWpvaVZHVnpkR1Z5Um1seWMzUnVZVzFsWDNKM1lTSXNJbVpoYldsc2VWOXVZVzFsSWpvaVZHVnpkR1Z5VEdGemRHNWhiV1ZmY25kaEluMC5EQVlYdXY0dEtuOFJYcU8xanl0dG5ELXRGNG5TaFVCUXlmZTRiS2JBaVBBeVkyeDVZYkFmM000ZVhuTHJHcW84LWxvR0tsZElDQzI4YkwwTGFNQTNLS2tRRU9mVzVzZnBHcW9ONjIxMnZzODltT2tsdDBUSlljNVBNWHdGZ0o1V0NfVEtqZHdxNy1hYURhZk9FV2VoVjBVMXV0M3MtOTRvdk5ZSUVuMjluelhtMlcxbGRvWEpFcTAzRjg4MGpseXNRNXpsUnZHRjdlWEVFcEZmSTJVUnl5TlEyVVdoMFNzZnEtZ09BdDJwYkYxdTZwckE1UmZ2VW1aM3YxZXUyMVlMR1p0Z3FQcXhiMWw2b2R5SDNpcDE1al9IZGduVGVvNTJ5bXh1UlVqNjVNc2ttZTNWNWV2MkRpdEhJOXZaZ25wVjhJZGhiNFRUV2xpQmVHQ09NZkRGQ2cKLQotY29yczoKLSAgY29yc0VuYWJsZWQ6IHRydWUKLQogc3dhZ2dlcjoKICAgYmFzZVVybDogL3Rlc3Qtc3RvZXJ1bmdzYXVza3VuZnQtaW50ZXJmYWNlCiAKZGlmZiAtLWdpdCBhL1NBTU8tSW50ZXJmYWNlL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbl9sb2NhbGRldi55bWwgYi9TQU1PLUludGVyZmFjZS9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb25fbG9jYWxkZXYueW1sCmluZGV4IGVmMTA5YTIuLmNjMWJjNTYgMTAwNjQ0Ci0tLSBhL1NBTU8tSW50ZXJmYWNlL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbl9sb2NhbGRldi55bWwKKysrIGIvU0FNTy1JbnRlcmZhY2Uvc3JjL21haW4vcmVzb3VyY2VzL2FwcGxpY2F0aW9uX2xvY2FsZGV2LnltbApAQCAtMjgsMTYgKzI4LDYgQEAKICAgICBvcmcuZWNsaXBzZS5vcGVuazogREVCVUcKICAgICBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYjogRVJST1IKIAotZXVyZWthOgotICBjbGllbnQ6Ci0gICAgc2VydmljZS11cmw6Ci0gICAgICBkZWZhdWxab25lOiBodHRwOi8vbG9jYWxob3N0Ojg3NjEvCi0gIGluc3RhbmNlOgotICAgIHByZWZlci1pcC1hZGRyZXNzOiB0cnVlCi0KLWluZGV4LWNoYW5uZWw6Ci0gIGVuYWJsZWQ6IHRydWUKLQogc2VydmVyOgogICBwb3J0OiA5MTk2CiAgIG1heC1odHRwLWhlYWRlci1zaXplOiAyNjIxNDQKQEAgLTQ4LDMyICszOCw4IEBACiBncmlkRmFpbHVyZUluZm9ybWF0aW9uOgogICBtYXhMaXN0U2l6ZTogMjAwMAogCi1qd3Q6Ci0gIHRva2VuSGVhZGVyOiBBdXRob3JpemF0aW9uCi0gIHVzZVN0YXRpY0p3dDogZmFsc2UKLSAgc3RhdGljSnd0OiBleUpoYkdjaU9pSlNVekkxTmlJc0luUjVjQ0lnT2lBaVNsZFVJaXdpYTJsa0lpQTZJQ0pJWWxJM1oycG9ibUUyZVhKUlpuWkpUV2hVU1Y5dFkyZzNabXRUUVdWRlgzaExUakJoWlZsMGJqZGpJbjAuZXlKcWRHa2lPaUk1TUdJME5HRmtPQzFpWWpsbUxUUTFNemt0WVRRd1l5MHlZalF5WlROa05qTmlPR0VpTENKbGVIQWlPakUxTnpnMk5UVTNPVFVzSW01aVppSTZNQ3dpYVdGMElqb3hOVGM0TmpVMU5EazFMQ0pwYzNNaU9pSm9kSFJ3T2k4dmJHOWpZV3hvYjNOME9qZ3dPREF2WVhWMGFDOXlaV0ZzYlhNdlJXeHZaMkp2YjJzaUxDSmhkV1FpT2lKbGJHOW5ZbTl2YXkxaVlXTnJaVzVrSWl3aWMzVmlJam9pT0RZeU5qWTVObVl0WmpGaE1pMDBaR0kxTFRreVpXWXRaVGxoTWpRMk5qZzFZVFUwSWl3aWRIbHdJam9pUW1WaGNtVnlJaXdpWVhwd0lqb2laV3h2WjJKdmIyc3RZbUZqYTJWdVpDSXNJbUYxZEdoZmRHbHRaU0k2TUN3aWMyVnpjMmx2Ymw5emRHRjBaU0k2SWpKbU1XSXpPREU1TFdaak5qUXROREV6TkMxaU5XUXhMV1kzWldZNE56VTVOREJrTkNJc0ltRmpjaUk2SWpFaUxDSmhiR3h2ZDJWa0xXOXlhV2RwYm5NaU9sc2lLaUpkTENKeVpXRnNiVjloWTJObGMzTWlPbnNpY205c1pYTWlPbHNpYTI5dUxXRmtiV2x1SWl3aWEyOXVMWGR5YVhSbGNpSXNJbXR2YmkxaFkyTmxjM01pTENKcmIyNHRjbVZoWkdWeUlsMTlMQ0p5WlhOdmRYSmpaVjloWTJObGMzTWlPbnQ5TENKdVlXMWxJam9pVkdWemRHVnlSbWx5YzNSdVlXMWxYM0ozWVNCVVpYTjBaWEpNWVhOMGJtRnRaVjl5ZDJFaUxDSndjbVZtWlhKeVpXUmZkWE5sY201aGJXVWlPaUowWlhOMGRYTmxjbDl5ZDJFaUxDSm5hWFpsYmw5dVlXMWxJam9pVkdWemRHVnlSbWx5YzNSdVlXMWxYM0ozWVNJc0ltWmhiV2xzZVY5dVlXMWxJam9pVkdWemRHVnlUR0Z6ZEc1aGJXVmZjbmRoSW4wLkRBWVh1djR0S244UlhxTzFqeXR0bkQtdEY0blNoVUJReWZlNGJLYkFpUEF5WTJ4NVliQWYzTTRlWG5MckdxbzgtbG9HS2xkSUNDMjhiTDBMYU1BM0tLa1FFT2ZXNXNmcEdxb042MjEydnM4OW1Pa2x0MFRKWWM1UE1Yd0ZnSjVXQ19US2pkd3E3LWFhRGFmT0VXZWhWMFUxdXQzcy05NG92TllJRW4yOW56WG0yVzFsZG9YSkVxMDNGODgwamx5c1E1emxSdkdGN2VYRUVwRmZJMlVSeXlOUTJVV2gwU3NmcS1nT0F0MnBiRjF1NnByQTVSZnZVbVozdjFldTIxWUxHWnRncVBxeGIxbDZvZHlIM2lwMTVqX0hkZ25UZW81MnlteHVSVWo2NU1za21lM1Y1ZXYyRGl0SEk5dlpnbnBWOElkaGI0VFRXbGlCZUdDT01mREZDZwotCi1mZWlnbjoKLSAgY2xpZW50OgotICAgIGNvbmZpZzoKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGNvbm5lY3RUaW1lb3V0OiA1MDAwCi0gICAgICAgIHJlYWRUaW1lb3V0OiA1MDAwCi0gICAgICAgIGxvZ2dlckxldmVsOiBGVUxMCi0KIGxvZ2dpbmcubGV2ZWwub3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5qb2JzLnN0b2VyYXVza3VuZnRpbnRlcmZhY2UuYXBpLlN0b2VyYXVza3VuZnRBcGk6IERFQlVHCiAKLWNvcnM6Ci0gIGNvcnNFbmFibGVkOiB0cnVlCi0KLXN0b2VydW5nc2F1c2t1bmZ0OgotICBhcGlVcmw6IGh0dHBzOi8vc3RhZ2UtYXBpLW9wZXJhdG9yLnN0b2VydW5nc2F1c2t1bmZ0LmRlL2FwaS92MS4wLwotICB1c2VyOiAke0dGSV9TVE9FUlVOR1NBVVNLVU5GVF9VU0VSTkFNRX0KLSAgcGFzc3dvcmQ6ICR7R0ZJX1NUT0VSVU5HU0FVU0tVTkZUX1BBU1NXT1JEfQotICBzY2hlZHVsaW5nLWltcG9ydDoKLSAgICBlbmFibGVkOiBmYWxzZQotICAgIGNyb246IDAgKi8xNSAqID8gKiAqCi0KIC0tLQogCiBzcHJpbmc6CmRpZmYgLS1naXQgYS9TQU1PLUludGVyZmFjZS9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nYmFjay1zcHJpbmcueG1sIGIvU0FNTy1JbnRlcmZhY2Uvc3JjL21haW4vcmVzb3VyY2VzL2xvZ2JhY2stc3ByaW5nLnhtbAppbmRleCAxNjYxOTUyLi5jYjA2NTUzIDEwMDY0NAotLS0gYS9TQU1PLUludGVyZmFjZS9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nYmFjay1zcHJpbmcueG1sCisrKyBiL1NBTU8tSW50ZXJmYWNlL3NyYy9tYWluL3Jlc291cmNlcy9sb2diYWNrLXNwcmluZy54bWwKQEAgLTM4LDE5ICszOCw2IEBACiAgICAgICAgIDwvcm9sbGluZ1BvbGljeT4KICAgICA8L2FwcGVuZGVyPgogCi0gICAgPGFwcGVuZGVyIG5hbWU9IlJvbGxpbmdGaWxlRmVpZ24iIGNsYXNzPSJjaC5xb3MubG9nYmFjay5jb3JlLnJvbGxpbmcuUm9sbGluZ0ZpbGVBcHBlbmRlciI+Ci0gICAgICAgIDxmaWxlPiR7TE9HU30vZmVpZ25jbGllbnQubG9nPC9maWxlPgotICAgICAgICA8ZW5jb2RlciBjbGFzcz0iY2gucW9zLmxvZ2JhY2suY2xhc3NpYy5lbmNvZGVyLlBhdHRlcm5MYXlvdXRFbmNvZGVyIj4KLSAgICAgICAgICAgIDxQYXR0ZXJuPiVkICVwICVjezYwfSBbJXRdICVtJW48L1BhdHRlcm4+Ci0gICAgICAgIDwvZW5jb2Rlcj4KLQotICAgICAgICA8cm9sbGluZ1BvbGljeSBjbGFzcz0iY2gucW9zLmxvZ2JhY2suY29yZS5yb2xsaW5nLlRpbWVCYXNlZFJvbGxpbmdQb2xpY3kiPgotICAgICAgICAgICAgPGZpbGVOYW1lUGF0dGVybj4ke0xPR1N9L2FyY2hpdmVkL2ZlaWduY2xpZW50LSVke3l5eXktTU0tZGR9Lmd6PC9maWxlTmFtZVBhdHRlcm4+Ci0gICAgICAgICAgICA8TWF4SGlzdG9yeT4zMDwvTWF4SGlzdG9yeT4KLSAgICAgICAgICAgIDxjbGVhbkhpc3RvcnlPblN0YXJ0PnRydWU8L2NsZWFuSGlzdG9yeU9uU3RhcnQ+Ci0gICAgICAgIDwvcm9sbGluZ1BvbGljeT4KLSAgICA8L2FwcGVuZGVyPgotCiAgICAgPCEtLSBMT0cgZXZlcnl0aGluZyBhdCBJTkZPIGxldmVsIC0tPgogICAgIDxyb290IGxldmVsPSJpbmZvIj4KICAgICAgICAgPGFwcGVuZGVyLXJlZiByZWY9IlJvbGxpbmdGaWxlU3RkIi8+CkBAIC01OCwxMyArNDUsOSBAQAogICAgIDwvcm9vdD4KIAogICAgIDwhLS0gTE9HICJjb20uYmFlbGR1bmdvcmcuZWNsaXBzZS5vcGVuay5jb250YWN0YmFzZWRhdGEqIiBhdCBJTkZPIGxldmVsIC0tPgotICAgIDxsb2dnZXIgbmFtZT0ib3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYW1vaW50ZXJmYWNlIiBsZXZlbD0iaW5mbyIgYWRkaXRpdml0eT0iZmFsc2UiPgorICAgIDxsb2dnZXIgbmFtZT0ib3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYW1vaW50ZXJmYWNlIiBhZGRpdGl2aXR5PSJmYWxzZSI+CiAgICAgICAgIDxhcHBlbmRlci1yZWYgcmVmPSJSb2xsaW5nRmlsZVN0ZCIvPgogICAgICAgICA8YXBwZW5kZXItcmVmIHJlZj0iQ29uc29sZSIvPgogICAgIDwvbG9nZ2VyPgogCi0gICAgPGxvZ2dlciBuYW1lPSJvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhbW9pbnRlcmZhY2UuYXBpLlN0b2VydW5nc2F1c2t1bmZ0QXBpIiBsZXZlbD0iaW5mbyIgYWRkaXRpdml0eT0iZmFsc2UiPgotICAgICAgICA8YXBwZW5kZXItcmVmIHJlZj0iUm9sbGluZ0ZpbGVGZWlnbiIvPgotICAgIDwvbG9nZ2VyPgotCiA8L2NvbmZpZ3VyYXRpb24+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU0FNTy1JbnRlcmZhY2Uvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhbW9pbnRlcmZhY2UvY29udHJvbGxlci9JbXBvcnRDb250cm9sbGVyVGVzdC5qYXZhIGIvU0FNTy1JbnRlcmZhY2Uvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhbW9pbnRlcmZhY2UvY29udHJvbGxlci9JbXBvcnRDb250cm9sbGVyVGVzdC5qYXZhCmluZGV4IDAzMjgwNDkuLmEyNTY2NjMgMTAwNjQ0Ci0tLSBhL1NBTU8tSW50ZXJmYWNlL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYW1vaW50ZXJmYWNlL2NvbnRyb2xsZXIvSW1wb3J0Q29udHJvbGxlclRlc3QuamF2YQorKysgYi9TQU1PLUludGVyZmFjZS9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2Ftb2ludGVyZmFjZS9jb250cm9sbGVyL0ltcG9ydENvbnRyb2xsZXJUZXN0LmphdmEKQEAgLTE1LDcgKzE1LDYgQEAKIHBhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYW1vaW50ZXJmYWNlLmNvbnRyb2xsZXI7CiAKIGltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhbW9pbnRlcmZhY2UuU2FyaXNJbnRlcmZhY2VBcHBsaWNhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhbW9pbnRlcmZhY2UuYXBpLlN0b2VydW5nc2F1c2t1bmZ0QXBpOwogaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2Ftb2ludGVyZmFjZS5zZXJ2aWNlLkltcG9ydFNlcnZpY2U7CiBpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7CiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOwpAQCAtMzcsOSArMzYsNiBAQAogcHVibGljIGNsYXNzIEltcG9ydENvbnRyb2xsZXJUZXN0IHsKIAogICAgIEBNb2NrQmVhbgotICAgIHByaXZhdGUgU3RvZXJ1bmdzYXVza3VuZnRBcGkgc3RvZXJ1bmdzYXVza3VuZnRBcGk7Ci0KLSAgICBATW9ja0JlYW4KICAgICBwcml2YXRlIEltcG9ydFNlcnZpY2UgaW1wb3J0U2VydmljZTsKIAogICAgIEBBdXRvd2lyZWQKZGlmZiAtLWdpdCBhL1NBTU8tSW50ZXJmYWNlL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYW1vaW50ZXJmYWNlL3NlcnZpY2UvSW1wb3J0U2VydmljZVRlc3QuamF2YSBiL1NBTU8tSW50ZXJmYWNlL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYW1vaW50ZXJmYWNlL3NlcnZpY2UvSW1wb3J0U2VydmljZVRlc3QuamF2YQppbmRleCA3OWM3NmNjLi41NTM0YzVlIDEwMDY0NAotLS0gYS9TQU1PLUludGVyZmFjZS9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2Ftb2ludGVyZmFjZS9zZXJ2aWNlL0ltcG9ydFNlcnZpY2VUZXN0LmphdmEKKysrIGIvU0FNTy1JbnRlcmZhY2Uvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhbW9pbnRlcmZhY2Uvc2VydmljZS9JbXBvcnRTZXJ2aWNlVGVzdC5qYXZhCkBAIC0xNiw3ICsxNiw2IEBACiAKIGltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uZGF0YWJpbmQuT2JqZWN0TWFwcGVyOwogaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2Ftb2ludGVyZmFjZS5TYXJpc0ludGVyZmFjZUFwcGxpY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2Ftb2ludGVyZmFjZS5hcGkuU3RvZXJ1bmdzYXVza3VuZnRBcGk7CiBpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYW1vaW50ZXJmYWNlLmNvbmZpZy5UZXN0Q29uZmlndXJhdGlvbjsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7CiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5ib290LnRlc3QuY29udGV4dC5TcHJpbmdCb290VGVzdDsKQEAgLTM4LDkgKzM3LDYgQEAKICAgICBAQXV0b3dpcmVkCiAgICAgT2JqZWN0TWFwcGVyIG9iamVjdE1hcHBlcjsKIAotICAgIEBNb2NrQmVhbgotICAgIFN0b2VydW5nc2F1c2t1bmZ0QXBpIHN0b2VydW5nc2F1c2t1bmZ0QXBpOwotCiAgICAvKiBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHNob3VsSW1wb3J0VXNlck5vdGlmaWNhdGlvbigpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAKZGlmZiAtLWdpdCBhL1NBUklTLUludGVyZmFjZS8uZ2l0aWdub3JlIGIvU0FSSVMtSW50ZXJmYWNlLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI5MjFmMAotLS0gL2Rldi9udWxsCisrKyBiL1NBUklTLUludGVyZmFjZS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMzcgQEAKK0hFTFAubWQKK3RhcmdldC8KKyEubXZuL3dyYXBwZXIvbWF2ZW4td3JhcHBlci5qYXIKKyEqKi9zcmMvbWFpbi8qKgorISoqL3NyYy90ZXN0LyoqCisKKyMjIyBTVFMgIyMjCisuYXB0X2dlbmVyYXRlZAorLmNsYXNzcGF0aAorLmZhY3RvcnlwYXRoCisucHJvamVjdAorLnNldHRpbmdzCisuc3ByaW5nQmVhbnMKKy5zdHM0LWNhY2hlCisKKyMjIyBMb2dzICMjIworL2xvZ3MKKworIyMjIFNvbmFyICMjIworLy5zY2FubmVyd29yaworCisjIyMgSW50ZWxsaUogSURFQSAjIyMKKy5pZGVhCisqLml3cworKi5pbWwKKyouaXByCisKKyMjIyBOZXRCZWFucyAjIyMKKy9uYnByb2plY3QvcHJpdmF0ZS8KKy9uYmJ1aWxkLworL2Rpc3QvCisvbmJkaXN0LworLy5uYi1ncmFkbGUvCitidWlsZC8KKworIyMjIFZTIENvZGUgIyMjCisudnNjb2RlLwpkaWZmIC0tZ2l0IGEvU0FSSVMtSW50ZXJmYWNlL0RvY2tlcmZpbGVfRGV2U2VydmVyIGIvU0FSSVMtSW50ZXJmYWNlL0RvY2tlcmZpbGVfRGV2U2VydmVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YzNlYWEKLS0tIC9kZXYvbnVsbAorKysgYi9TQVJJUy1JbnRlcmZhY2UvRG9ja2VyZmlsZV9EZXZTZXJ2ZXIKQEAgLTAsMCArMSwxMyBAQAorRlJPTSBvcGVuamRrOjgtanJlLWFscGluZQorCitFTlYgSkFWQV9UT09MX09QVElPTlMgLWFnZW50bGliOmpkd3A9dHJhbnNwb3J0PWR0X3NvY2tldCxhZGRyZXNzPTgwMDAsc2VydmVyPXksc3VzcGVuZD1uCitFTlYgSFRUUF9QUk9YWSBodHRwOi8vd2VicHJveHkzLnB0YS5kZTo4MDgwCitFTlYgSFRUUFNfUFJPWFkgaHR0cDovL3dlYnByb3h5My5wdGEuZGU6ODA4MAorRU5WIFRaIEV1cm9wZS9CZXJsaW4KKworIyBpbnN0YWxsIHR6ZGF0YSB0byBzZXQgdGhlIHJpZ2h0IHRpbWV6b25lCitSVU4gYXBrIGFkZCAtLW5vLWNhY2hlIHR6ZGF0YQorCitDT1BZIC90YXJnZXQvZ3JpZC1mYWlsdXJlLWluZm9ybWF0aW9uLmJhY2tlbmQuc3RvZXJ1bmdzYXVza3VuZnQtaW50ZXJmYWNlLmphciAvdXNyL3NyYy9jYmQvCitXT1JLRElSIHVzci9zcmMvY2JkCitDTUQgWyJqYXZhIiwgIi1qYXIiLCAiLURzcHJpbmcucHJvZmlsZXMuYWN0aXZlPWRldnNlcnZlciIsICJncmlkLWZhaWx1cmUtaW5mb3JtYXRpb24uYmFja2VuZC5zdG9lcnVuZ3NhdXNrdW5mdC1pbnRlcmZhY2UuamFyIl0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9TQVJJUy1JbnRlcmZhY2UvRG9ja2VyZmlsZV9EZXZTZXJ2ZXJVbnNlY3VyZSBiL1NBUklTLUludGVyZmFjZS9Eb2NrZXJmaWxlX0RldlNlcnZlclVuc2VjdXJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMTAxMzMKLS0tIC9kZXYvbnVsbAorKysgYi9TQVJJUy1JbnRlcmZhY2UvRG9ja2VyZmlsZV9EZXZTZXJ2ZXJVbnNlY3VyZQpAQCAtMCwwICsxLDEzIEBACitGUk9NIG9wZW5qZGs6OC1qcmUtYWxwaW5lCisKK0VOViBKQVZBX1RPT0xfT1BUSU9OUyAtYWdlbnRsaWI6amR3cD10cmFuc3BvcnQ9ZHRfc29ja2V0LGFkZHJlc3M9ODAwMCxzZXJ2ZXI9eSxzdXNwZW5kPW4KK0VOViBIVFRQX1BST1hZIGh0dHA6Ly93ZWJwcm94eTMucHRhLmRlOjgwODAKK0VOViBIVFRQU19QUk9YWSBodHRwOi8vd2VicHJveHkzLnB0YS5kZTo4MDgwCitFTlYgVFogRXVyb3BlL0JlcmxpbgorCisjIGluc3RhbGwgdHpkYXRhIHRvIHNldCB0aGUgcmlnaHQgdGltZXpvbmUKK1JVTiBhcGsgYWRkIC0tbm8tY2FjaGUgdHpkYXRhCisKK0NPUFkgL3RhcmdldC9ncmlkLWZhaWx1cmUtaW5mb3JtYXRpb24uYmFja2VuZC5zdG9lcnVuZ3NhdXNrdW5mdC1pbnRlcmZhY2UuamFyIC91c3Ivc3JjL2NiZC8KK1dPUktESVIgdXNyL3NyYy9jYmQKK0NNRCBbImphdmEiLCAiLWphciIsICItRHNwcmluZy5wcm9maWxlcy5hY3RpdmU9ZGV2c2VydmVyLXVuc2VjdXJlIiwgImdyaWQtZmFpbHVyZS1pbmZvcm1hdGlvbi5iYWNrZW5kLnN0b2VydW5nc2F1c2t1bmZ0LWludGVyZmFjZS5qYXIiXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NBUklTLUludGVyZmFjZS9sb21ib2suY29uZmlnIGIvU0FSSVMtSW50ZXJmYWNlL2xvbWJvay5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIzZWRiNAotLS0gL2Rldi9udWxsCisrKyBiL1NBUklTLUludGVyZmFjZS9sb21ib2suY29uZmlnCkBAIC0wLDAgKzEsMiBAQAorY29uZmlnLnN0b3BCdWJibGluZyA9IHRydWUKK2xvbWJvay5hZGRMb21ib2tHZW5lcmF0ZWRBbm5vdGF0aW9uID0gdHJ1ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NBUklTLUludGVyZmFjZS9tdm53IGIvU0FSSVMtSW50ZXJmYWNlL212bncKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE2YjU0MwotLS0gL2Rldi9udWxsCisrKyBiL1NBUklTLUludGVyZmFjZS9tdm53CkBAIC0wLDAgKzEsMzEwIEBACisjIS9iaW4vc2gKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisjIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisjIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1hdmVuIFN0YXJ0IFVwIEJhdGNoIHNjcmlwdAorIworIyBSZXF1aXJlZCBFTlYgdmFyczoKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgSkFWQV9IT01FIC0gbG9jYXRpb24gb2YgYSBKREsgaG9tZSBkaXIKKyMKKyMgT3B0aW9uYWwgRU5WIHZhcnMKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgICBNMl9IT01FIC0gbG9jYXRpb24gb2YgbWF2ZW4yJ3MgaW5zdGFsbGVkIGhvbWUgZGlyCisjICAgTUFWRU5fT1BUUyAtIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoZSBKYXZhIFZNIHdoZW4gcnVubmluZyBNYXZlbgorIyAgICAgZS5nLiB0byBkZWJ1ZyBNYXZlbiBpdHNlbGYsIHVzZQorIyAgICAgICBzZXQgTUFWRU5fT1BUUz0tWGRlYnVnIC1YcnVuamR3cDp0cmFuc3BvcnQ9ZHRfc29ja2V0LHNlcnZlcj15LHN1c3BlbmQ9eSxhZGRyZXNzPTgwMDAKKyMgICBNQVZFTl9TS0lQX1JDIC0gZmxhZyB0byBkaXNhYmxlIGxvYWRpbmcgb2YgbWF2ZW5yYyBmaWxlcworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2lmIFsgLXogIiRNQVZFTl9TS0lQX1JDIiBdIDsgdGhlbgorCisgIGlmIFsgLWYgL2V0Yy9tYXZlbnJjIF0gOyB0aGVuCisgICAgLiAvZXRjL21hdmVucmMKKyAgZmkKKworICBpZiBbIC1mICIkSE9NRS8ubWF2ZW5yYyIgXSA7IHRoZW4KKyAgICAuICIkSE9NRS8ubWF2ZW5yYyIKKyAgZmkKKworZmkKKworIyBPUyBzcGVjaWZpYyBzdXBwb3J0LiAgJHZhciBfbXVzdF8gYmUgc2V0IHRvIGVpdGhlciB0cnVlIG9yIGZhbHNlLgorY3lnd2luPWZhbHNlOworZGFyd2luPWZhbHNlOworbWluZ3c9ZmFsc2UKK2Nhc2UgImB1bmFtZWAiIGluCisgIENZR1dJTiopIGN5Z3dpbj10cnVlIDs7CisgIE1JTkdXKikgbWluZ3c9dHJ1ZTs7CisgIERhcndpbiopIGRhcndpbj10cnVlCisgICAgIyBVc2UgL3Vzci9saWJleGVjL2phdmFfaG9tZSBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gL0xpYnJhcnkvSmF2YS9Ib21lCisgICAgIyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2xpYnJhcnkvbWFjL3FhL3FhMTE3MC9faW5kZXguaHRtbAorICAgIGlmIFsgLXogIiRKQVZBX0hPTUUiIF07IHRoZW4KKyAgICAgIGlmIFsgLXggIi91c3IvbGliZXhlYy9qYXZhX2hvbWUiIF07IHRoZW4KKyAgICAgICAgZXhwb3J0IEpBVkFfSE9NRT0iYC91c3IvbGliZXhlYy9qYXZhX2hvbWVgIgorICAgICAgZWxzZQorICAgICAgICBleHBvcnQgSkFWQV9IT01FPSIvTGlicmFyeS9KYXZhL0hvbWUiCisgICAgICBmaQorICAgIGZpCisgICAgOzsKK2VzYWMKKworaWYgWyAteiAiJEpBVkFfSE9NRSIgXSA7IHRoZW4KKyAgaWYgWyAtciAvZXRjL2dlbnRvby1yZWxlYXNlIF0gOyB0aGVuCisgICAgSkFWQV9IT01FPWBqYXZhLWNvbmZpZyAtLWpyZS1ob21lYAorICBmaQorZmkKKworaWYgWyAteiAiJE0yX0hPTUUiIF0gOyB0aGVuCisgICMjIHJlc29sdmUgbGlua3MgLSAkMCBtYXkgYmUgYSBsaW5rIHRvIG1hdmVuJ3MgaG9tZQorICBQUkc9IiQwIgorCisgICMgbmVlZCB0aGlzIGZvciByZWxhdGl2ZSBzeW1saW5rcworICB3aGlsZSBbIC1oICIkUFJHIiBdIDsgZG8KKyAgICBscz1gbHMgLWxkICIkUFJHImAKKyAgICBsaW5rPWBleHByICIkbHMiIDogJy4qLT4gXCguKlwpJCdgCisgICAgaWYgZXhwciAiJGxpbmsiIDogJy8uKicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIFBSRz0iJGxpbmsiCisgICAgZWxzZQorICAgICAgUFJHPSJgZGlybmFtZSAiJFBSRyJgLyRsaW5rIgorICAgIGZpCisgIGRvbmUKKworICBzYXZlZGRpcj1gcHdkYAorCisgIE0yX0hPTUU9YGRpcm5hbWUgIiRQUkciYC8uLgorCisgICMgbWFrZSBpdCBmdWxseSBxdWFsaWZpZWQKKyAgTTJfSE9NRT1gY2QgIiRNMl9IT01FIiAmJiBwd2RgCisKKyAgY2QgIiRzYXZlZGRpciIKKyAgIyBlY2hvIFVzaW5nIG0yIGF0ICRNMl9IT01FCitmaQorCisjIEZvciBDeWd3aW4sIGVuc3VyZSBwYXRocyBhcmUgaW4gVU5JWCBmb3JtYXQgYmVmb3JlIGFueXRoaW5nIGlzIHRvdWNoZWQKK2lmICRjeWd3aW4gOyB0aGVuCisgIFsgLW4gIiRNMl9IT01FIiBdICYmCisgICAgTTJfSE9NRT1gY3lncGF0aCAtLXVuaXggIiRNMl9IT01FImAKKyAgWyAtbiAiJEpBVkFfSE9NRSIgXSAmJgorICAgIEpBVkFfSE9NRT1gY3lncGF0aCAtLXVuaXggIiRKQVZBX0hPTUUiYAorICBbIC1uICIkQ0xBU1NQQVRIIiBdICYmCisgICAgQ0xBU1NQQVRIPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRDTEFTU1BBVEgiYAorZmkKKworIyBGb3IgTWluZ3csIGVuc3VyZSBwYXRocyBhcmUgaW4gVU5JWCBmb3JtYXQgYmVmb3JlIGFueXRoaW5nIGlzIHRvdWNoZWQKK2lmICRtaW5ndyA7IHRoZW4KKyAgWyAtbiAiJE0yX0hPTUUiIF0gJiYKKyAgICBNMl9IT01FPSJgKGNkICIkTTJfSE9NRSI7IHB3ZClgIgorICBbIC1uICIkSkFWQV9IT01FIiBdICYmCisgICAgSkFWQV9IT01FPSJgKGNkICIkSkFWQV9IT01FIjsgcHdkKWAiCitmaQorCitpZiBbIC16ICIkSkFWQV9IT01FIiBdOyB0aGVuCisgIGphdmFFeGVjdXRhYmxlPSJgd2hpY2ggamF2YWNgIgorICBpZiBbIC1uICIkamF2YUV4ZWN1dGFibGUiIF0gJiYgISBbICJgZXhwciBcIiRqYXZhRXhlY3V0YWJsZVwiIDogJ1woW14gXSpcKSdgIiA9ICJubyIgXTsgdGhlbgorICAgICMgcmVhZGxpbmsoMSkgaXMgbm90IGF2YWlsYWJsZSBhcyBzdGFuZGFyZCBvbiBTb2xhcmlzIDEwLgorICAgIHJlYWRMaW5rPWB3aGljaCByZWFkbGlua2AKKyAgICBpZiBbICEgYGV4cHIgIiRyZWFkTGluayIgOiAnXChbXiBdKlwpJ2AgPSAibm8iIF07IHRoZW4KKyAgICAgIGlmICRkYXJ3aW4gOyB0aGVuCisgICAgICAgIGphdmFIb21lPSJgZGlybmFtZSBcIiRqYXZhRXhlY3V0YWJsZVwiYCIKKyAgICAgICAgamF2YUV4ZWN1dGFibGU9ImBjZCBcIiRqYXZhSG9tZVwiICYmIHB3ZCAtUGAvamF2YWMiCisgICAgICBlbHNlCisgICAgICAgIGphdmFFeGVjdXRhYmxlPSJgcmVhZGxpbmsgLWYgXCIkamF2YUV4ZWN1dGFibGVcImAiCisgICAgICBmaQorICAgICAgamF2YUhvbWU9ImBkaXJuYW1lIFwiJGphdmFFeGVjdXRhYmxlXCJgIgorICAgICAgamF2YUhvbWU9YGV4cHIgIiRqYXZhSG9tZSIgOiAnXCguKlwpL2JpbidgCisgICAgICBKQVZBX0hPTUU9IiRqYXZhSG9tZSIKKyAgICAgIGV4cG9ydCBKQVZBX0hPTUUKKyAgICBmaQorICBmaQorZmkKKworaWYgWyAteiAiJEpBVkFDTUQiIF0gOyB0aGVuCisgIGlmIFsgLW4gIiRKQVZBX0hPTUUiICBdIDsgdGhlbgorICAgIGlmIFsgLXggIiRKQVZBX0hPTUUvanJlL3NoL2phdmEiIF0gOyB0aGVuCisgICAgICAjIElCTSdzIEpESyBvbiBBSVggdXNlcyBzdHJhbmdlIGxvY2F0aW9ucyBmb3IgdGhlIGV4ZWN1dGFibGVzCisgICAgICBKQVZBQ01EPSIkSkFWQV9IT01FL2pyZS9zaC9qYXZhIgorICAgIGVsc2UKKyAgICAgIEpBVkFDTUQ9IiRKQVZBX0hPTUUvYmluL2phdmEiCisgICAgZmkKKyAgZWxzZQorICAgIEpBVkFDTUQ9ImB3aGljaCBqYXZhYCIKKyAgZmkKK2ZpCisKK2lmIFsgISAteCAiJEpBVkFDTUQiIF0gOyB0aGVuCisgIGVjaG8gIkVycm9yOiBKQVZBX0hPTUUgaXMgbm90IGRlZmluZWQgY29ycmVjdGx5LiIgPiYyCisgIGVjaG8gIiAgV2UgY2Fubm90IGV4ZWN1dGUgJEpBVkFDTUQiID4mMgorICBleGl0IDEKK2ZpCisKK2lmIFsgLXogIiRKQVZBX0hPTUUiIF0gOyB0aGVuCisgIGVjaG8gIldhcm5pbmc6IEpBVkFfSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0LiIKK2ZpCisKK0NMQVNTV09STERTX0xBVU5DSEVSPW9yZy5jb2RlaGF1cy5wbGV4dXMuY2xhc3N3b3JsZHMubGF1bmNoZXIuTGF1bmNoZXIKKworIyB0cmF2ZXJzZXMgZGlyZWN0b3J5IHN0cnVjdHVyZSBmcm9tIHByb2Nlc3Mgd29yayBkaXJlY3RvcnkgdG8gZmlsZXN5c3RlbSByb290CisjIGZpcnN0IGRpcmVjdG9yeSB3aXRoIC5tdm4gc3ViZGlyZWN0b3J5IGlzIGNvbnNpZGVyZWQgcHJvamVjdCBiYXNlIGRpcmVjdG9yeQorZmluZF9tYXZlbl9iYXNlZGlyKCkgeworCisgIGlmIFsgLXogIiQxIiBdCisgIHRoZW4KKyAgICBlY2hvICJQYXRoIG5vdCBzcGVjaWZpZWQgdG8gZmluZF9tYXZlbl9iYXNlZGlyIgorICAgIHJldHVybiAxCisgIGZpCisKKyAgYmFzZWRpcj0iJDEiCisgIHdkaXI9IiQxIgorICB3aGlsZSBbICIkd2RpciIgIT0gJy8nIF0gOyBkbworICAgIGlmIFsgLWQgIiR3ZGlyIi8ubXZuIF0gOyB0aGVuCisgICAgICBiYXNlZGlyPSR3ZGlyCisgICAgICBicmVhaworICAgIGZpCisgICAgIyB3b3JrYXJvdW5kIGZvciBKQkVBUC04OTM3IChvbiBTb2xhcmlzIDEwL1NwYXJjKQorICAgIGlmIFsgLWQgIiR7d2Rpcn0iIF07IHRoZW4KKyAgICAgIHdkaXI9YGNkICIkd2Rpci8uLiI7IHB3ZGAKKyAgICBmaQorICAgICMgZW5kIG9mIHdvcmthcm91bmQKKyAgZG9uZQorICBlY2hvICIke2Jhc2VkaXJ9IgorfQorCisjIGNvbmNhdGVuYXRlcyBhbGwgbGluZXMgb2YgYSBmaWxlCitjb25jYXRfbGluZXMoKSB7CisgIGlmIFsgLWYgIiQxIiBdOyB0aGVuCisgICAgZWNobyAiJCh0ciAtcyAnXG4nICcgJyA8ICIkMSIpIgorICBmaQorfQorCitCQVNFX0RJUj1gZmluZF9tYXZlbl9iYXNlZGlyICIkKHB3ZCkiYAoraWYgWyAteiAiJEJBU0VfRElSIiBdOyB0aGVuCisgIGV4aXQgMTsKK2ZpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBFeHRlbnNpb24gdG8gYWxsb3cgYXV0b21hdGljYWxseSBkb3dubG9hZGluZyB0aGUgbWF2ZW4td3JhcHBlci5qYXIgZnJvbSBNYXZlbi1jZW50cmFsCisjIFRoaXMgYWxsb3dzIHVzaW5nIHRoZSBtYXZlbiB3cmFwcGVyIGluIHByb2plY3RzIHRoYXQgcHJvaGliaXQgY2hlY2tpbmcgaW4gYmluYXJ5IGRhdGEuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2lmIFsgLXIgIiRCQVNFX0RJUi8ubXZuL3dyYXBwZXIvbWF2ZW4td3JhcHBlci5qYXIiIF07IHRoZW4KKyAgICBpZiBbICIkTVZOV19WRVJCT1NFIiA9IHRydWUgXTsgdGhlbgorICAgICAgZWNobyAiRm91bmQgLm12bi93cmFwcGVyL21hdmVuLXdyYXBwZXIuamFyIgorICAgIGZpCitlbHNlCisgICAgaWYgWyAiJE1WTldfVkVSQk9TRSIgPSB0cnVlIF07IHRoZW4KKyAgICAgIGVjaG8gIkNvdWxkbid0IGZpbmQgLm12bi93cmFwcGVyL21hdmVuLXdyYXBwZXIuamFyLCBkb3dubG9hZGluZyBpdCAuLi4iCisgICAgZmkKKyAgICBpZiBbIC1uICIkTVZOV19SRVBPVVJMIiBdOyB0aGVuCisgICAgICBqYXJVcmw9IiRNVk5XX1JFUE9VUkwvaW8vdGFrYXJpL21hdmVuLXdyYXBwZXIvMC41LjYvbWF2ZW4td3JhcHBlci0wLjUuNi5qYXIiCisgICAgZWxzZQorICAgICAgamFyVXJsPSJodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvaW8vdGFrYXJpL21hdmVuLXdyYXBwZXIvMC41LjYvbWF2ZW4td3JhcHBlci0wLjUuNi5qYXIiCisgICAgZmkKKyAgICB3aGlsZSBJRlM9Ij0iIHJlYWQga2V5IHZhbHVlOyBkbworICAgICAgY2FzZSAiJGtleSIgaW4gKHdyYXBwZXJVcmwpIGphclVybD0iJHZhbHVlIjsgYnJlYWsgOzsKKyAgICAgIGVzYWMKKyAgICBkb25lIDwgIiRCQVNFX0RJUi8ubXZuL3dyYXBwZXIvbWF2ZW4td3JhcHBlci5wcm9wZXJ0aWVzIgorICAgIGlmIFsgIiRNVk5XX1ZFUkJPU0UiID0gdHJ1ZSBdOyB0aGVuCisgICAgICBlY2hvICJEb3dubG9hZGluZyBmcm9tOiAkamFyVXJsIgorICAgIGZpCisgICAgd3JhcHBlckphclBhdGg9IiRCQVNFX0RJUi8ubXZuL3dyYXBwZXIvbWF2ZW4td3JhcHBlci5qYXIiCisgICAgaWYgJGN5Z3dpbjsgdGhlbgorICAgICAgd3JhcHBlckphclBhdGg9YGN5Z3BhdGggLS1wYXRoIC0td2luZG93cyAiJHdyYXBwZXJKYXJQYXRoImAKKyAgICBmaQorCisgICAgaWYgY29tbWFuZCAtdiB3Z2V0ID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIGlmIFsgIiRNVk5XX1ZFUkJPU0UiID0gdHJ1ZSBdOyB0aGVuCisgICAgICAgICAgZWNobyAiRm91bmQgd2dldCAuLi4gdXNpbmcgd2dldCIKKyAgICAgICAgZmkKKyAgICAgICAgaWYgWyAteiAiJE1WTldfVVNFUk5BTUUiIF0gfHwgWyAteiAiJE1WTldfUEFTU1dPUkQiIF07IHRoZW4KKyAgICAgICAgICAgIHdnZXQgIiRqYXJVcmwiIC1PICIkd3JhcHBlckphclBhdGgiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHdnZXQgLS1odHRwLXVzZXI9JE1WTldfVVNFUk5BTUUgLS1odHRwLXBhc3N3b3JkPSRNVk5XX1BBU1NXT1JEICIkamFyVXJsIiAtTyAiJHdyYXBwZXJKYXJQYXRoIgorICAgICAgICBmaQorICAgIGVsaWYgY29tbWFuZCAtdiBjdXJsID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIGlmIFsgIiRNVk5XX1ZFUkJPU0UiID0gdHJ1ZSBdOyB0aGVuCisgICAgICAgICAgZWNobyAiRm91bmQgY3VybCAuLi4gdXNpbmcgY3VybCIKKyAgICAgICAgZmkKKyAgICAgICAgaWYgWyAteiAiJE1WTldfVVNFUk5BTUUiIF0gfHwgWyAteiAiJE1WTldfUEFTU1dPUkQiIF07IHRoZW4KKyAgICAgICAgICAgIGN1cmwgLW8gIiR3cmFwcGVySmFyUGF0aCIgIiRqYXJVcmwiIC1mCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGN1cmwgLS11c2VyICRNVk5XX1VTRVJOQU1FOiRNVk5XX1BBU1NXT1JEIC1vICIkd3JhcHBlckphclBhdGgiICIkamFyVXJsIiAtZgorICAgICAgICBmaQorCisgICAgZWxzZQorICAgICAgICBpZiBbICIkTVZOV19WRVJCT1NFIiA9IHRydWUgXTsgdGhlbgorICAgICAgICAgIGVjaG8gIkZhbGxpbmcgYmFjayB0byB1c2luZyBKYXZhIHRvIGRvd25sb2FkIgorICAgICAgICBmaQorICAgICAgICBqYXZhQ2xhc3M9IiRCQVNFX0RJUi8ubXZuL3dyYXBwZXIvTWF2ZW5XcmFwcGVyRG93bmxvYWRlci5qYXZhIgorICAgICAgICAjIEZvciBDeWd3aW4sIHN3aXRjaCBwYXRocyB0byBXaW5kb3dzIGZvcm1hdCBiZWZvcmUgcnVubmluZyBqYXZhYworICAgICAgICBpZiAkY3lnd2luOyB0aGVuCisgICAgICAgICAgamF2YUNsYXNzPWBjeWdwYXRoIC0tcGF0aCAtLXdpbmRvd3MgIiRqYXZhQ2xhc3MiYAorICAgICAgICBmaQorICAgICAgICBpZiBbIC1lICIkamF2YUNsYXNzIiBdOyB0aGVuCisgICAgICAgICAgICBpZiBbICEgLWUgIiRCQVNFX0RJUi8ubXZuL3dyYXBwZXIvTWF2ZW5XcmFwcGVyRG93bmxvYWRlci5jbGFzcyIgXTsgdGhlbgorICAgICAgICAgICAgICAgIGlmIFsgIiRNVk5XX1ZFUkJPU0UiID0gdHJ1ZSBdOyB0aGVuCisgICAgICAgICAgICAgICAgICBlY2hvICIgLSBDb21waWxpbmcgTWF2ZW5XcmFwcGVyRG93bmxvYWRlci5qYXZhIC4uLiIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICMgQ29tcGlsaW5nIHRoZSBKYXZhIGNsYXNzCisgICAgICAgICAgICAgICAgKCIkSkFWQV9IT01FL2Jpbi9qYXZhYyIgIiRqYXZhQ2xhc3MiKQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGlmIFsgLWUgIiRCQVNFX0RJUi8ubXZuL3dyYXBwZXIvTWF2ZW5XcmFwcGVyRG93bmxvYWRlci5jbGFzcyIgXTsgdGhlbgorICAgICAgICAgICAgICAgICMgUnVubmluZyB0aGUgZG93bmxvYWRlcgorICAgICAgICAgICAgICAgIGlmIFsgIiRNVk5XX1ZFUkJPU0UiID0gdHJ1ZSBdOyB0aGVuCisgICAgICAgICAgICAgICAgICBlY2hvICIgLSBSdW5uaW5nIE1hdmVuV3JhcHBlckRvd25sb2FkZXIuamF2YSAuLi4iCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAoIiRKQVZBX0hPTUUvYmluL2phdmEiIC1jcCAubXZuL3dyYXBwZXIgTWF2ZW5XcmFwcGVyRG93bmxvYWRlciAiJE1BVkVOX1BST0pFQ1RCQVNFRElSIikKKyAgICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgZmkKK2ZpCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRW5kIG9mIGV4dGVuc2lvbgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2V4cG9ydCBNQVZFTl9QUk9KRUNUQkFTRURJUj0ke01BVkVOX0JBU0VESVI6LSIkQkFTRV9ESVIifQoraWYgWyAiJE1WTldfVkVSQk9TRSIgPSB0cnVlIF07IHRoZW4KKyAgZWNobyAkTUFWRU5fUFJPSkVDVEJBU0VESVIKK2ZpCitNQVZFTl9PUFRTPSIkKGNvbmNhdF9saW5lcyAiJE1BVkVOX1BST0pFQ1RCQVNFRElSLy5tdm4vanZtLmNvbmZpZyIpICRNQVZFTl9PUFRTIgorCisjIEZvciBDeWd3aW4sIHN3aXRjaCBwYXRocyB0byBXaW5kb3dzIGZvcm1hdCBiZWZvcmUgcnVubmluZyBqYXZhCitpZiAkY3lnd2luOyB0aGVuCisgIFsgLW4gIiRNMl9IT01FIiBdICYmCisgICAgTTJfSE9NRT1gY3lncGF0aCAtLXBhdGggLS13aW5kb3dzICIkTTJfSE9NRSJgCisgIFsgLW4gIiRKQVZBX0hPTUUiIF0gJiYKKyAgICBKQVZBX0hPTUU9YGN5Z3BhdGggLS1wYXRoIC0td2luZG93cyAiJEpBVkFfSE9NRSJgCisgIFsgLW4gIiRDTEFTU1BBVEgiIF0gJiYKKyAgICBDTEFTU1BBVEg9YGN5Z3BhdGggLS1wYXRoIC0td2luZG93cyAiJENMQVNTUEFUSCJgCisgIFsgLW4gIiRNQVZFTl9QUk9KRUNUQkFTRURJUiIgXSAmJgorICAgIE1BVkVOX1BST0pFQ1RCQVNFRElSPWBjeWdwYXRoIC0tcGF0aCAtLXdpbmRvd3MgIiRNQVZFTl9QUk9KRUNUQkFTRURJUiJgCitmaQorCisjIFByb3ZpZGUgYSAic3RhbmRhcmRpemVkIiB3YXkgdG8gcmV0cmlldmUgdGhlIENMSSBhcmdzIHRoYXQgd2lsbAorIyB3b3JrIHdpdGggYm90aCBXaW5kb3dzIGFuZCBub24tV2luZG93cyBleGVjdXRpb25zLgorTUFWRU5fQ01EX0xJTkVfQVJHUz0iJE1BVkVOX0NPTkZJRyAkQCIKK2V4cG9ydCBNQVZFTl9DTURfTElORV9BUkdTCisKK1dSQVBQRVJfTEFVTkNIRVI9b3JnLmFwYWNoZS5tYXZlbi53cmFwcGVyLk1hdmVuV3JhcHBlck1haW4KKworZXhlYyAiJEpBVkFDTUQiIFwKKyAgJE1BVkVOX09QVFMgXAorICAtY2xhc3NwYXRoICIkTUFWRU5fUFJPSkVDVEJBU0VESVIvLm12bi93cmFwcGVyL21hdmVuLXdyYXBwZXIuamFyIiBcCisgICItRG1hdmVuLmhvbWU9JHtNMl9IT01FfSIgIi1EbWF2ZW4ubXVsdGlNb2R1bGVQcm9qZWN0RGlyZWN0b3J5PSR7TUFWRU5fUFJPSkVDVEJBU0VESVJ9IiBcCisgICR7V1JBUFBFUl9MQVVOQ0hFUn0gJE1BVkVOX0NPTkZJRyAiJEAiCmRpZmYgLS1naXQgYS9TQVJJUy1JbnRlcmZhY2UvbXZudy5jbWQgYi9TQVJJUy1JbnRlcmZhY2UvbXZudy5jbWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhkNDMzNwotLS0gL2Rldi9udWxsCisrKyBiL1NBUklTLUludGVyZmFjZS9tdm53LmNtZApAQCAtMCwwICsxLDE4MiBAQAorQFJFTSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitAUkVNIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKK0BSRU0gb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCitAUkVNIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCitAUkVNIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKK0BSRU0gdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorQFJFTSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCitAUkVNIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKK0BSRU0KK0BSRU0gICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorQFJFTQorQFJFTSBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCitAUkVNIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCitAUkVNICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorQFJFTSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKK0BSRU0gc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworQFJFTSB1bmRlciB0aGUgTGljZW5zZS4KK0BSRU0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitAUkVNIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0BSRU0gTWF2ZW4gU3RhcnQgVXAgQmF0Y2ggc2NyaXB0CitAUkVNCitAUkVNIFJlcXVpcmVkIEVOViB2YXJzOgorQFJFTSBKQVZBX0hPTUUgLSBsb2NhdGlvbiBvZiBhIEpESyBob21lIGRpcgorQFJFTQorQFJFTSBPcHRpb25hbCBFTlYgdmFycworQFJFTSBNMl9IT01FIC0gbG9jYXRpb24gb2YgbWF2ZW4yJ3MgaW5zdGFsbGVkIGhvbWUgZGlyCitAUkVNIE1BVkVOX0JBVENIX0VDSE8gLSBzZXQgdG8gJ29uJyB0byBlbmFibGUgdGhlIGVjaG9pbmcgb2YgdGhlIGJhdGNoIGNvbW1hbmRzCitAUkVNIE1BVkVOX0JBVENIX1BBVVNFIC0gc2V0IHRvICdvbicgdG8gd2FpdCBmb3IgYSBrZXlzdHJva2UgYmVmb3JlIGVuZGluZworQFJFTSBNQVZFTl9PUFRTIC0gcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhlIEphdmEgVk0gd2hlbiBydW5uaW5nIE1hdmVuCitAUkVNICAgICBlLmcuIHRvIGRlYnVnIE1hdmVuIGl0c2VsZiwgdXNlCitAUkVNIHNldCBNQVZFTl9PUFRTPS1YZGVidWcgLVhydW5qZHdwOnRyYW5zcG9ydD1kdF9zb2NrZXQsc2VydmVyPXksc3VzcGVuZD15LGFkZHJlc3M9ODAwMAorQFJFTSBNQVZFTl9TS0lQX1JDIC0gZmxhZyB0byBkaXNhYmxlIGxvYWRpbmcgb2YgbWF2ZW5yYyBmaWxlcworQFJFTSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0BSRU0gQmVnaW4gYWxsIFJFTSBsaW5lcyB3aXRoICdAJyBpbiBjYXNlIE1BVkVOX0JBVENIX0VDSE8gaXMgJ29uJworQGVjaG8gb2ZmCitAUkVNIHNldCB0aXRsZSBvZiBjb21tYW5kIHdpbmRvdwordGl0bGUgJTAKK0BSRU0gZW5hYmxlIGVjaG9pbmcgYnkgc2V0dGluZyBNQVZFTl9CQVRDSF9FQ0hPIHRvICdvbicKK0BpZiAiJU1BVkVOX0JBVENIX0VDSE8lIiA9PSAib24iICBlY2hvICVNQVZFTl9CQVRDSF9FQ0hPJQorCitAUkVNIHNldCAlSE9NRSUgdG8gZXF1aXZhbGVudCBvZiAkSE9NRQoraWYgIiVIT01FJSIgPT0gIiIgKHNldCAiSE9NRT0lSE9NRURSSVZFJSVIT01FUEFUSCUiKQorCitAUkVNIEV4ZWN1dGUgYSB1c2VyIGRlZmluZWQgc2NyaXB0IGJlZm9yZSB0aGlzIG9uZQoraWYgbm90ICIlTUFWRU5fU0tJUF9SQyUiID09ICIiIGdvdG8gc2tpcFJjUHJlCitAUkVNIGNoZWNrIGZvciBwcmUgc2NyaXB0LCBvbmNlIHdpdGggbGVnYWN5IC5iYXQgZW5kaW5nIGFuZCBvbmNlIHdpdGggLmNtZCBlbmRpbmcKK2lmIGV4aXN0ICIlSE9NRSVcbWF2ZW5yY19wcmUuYmF0IiBjYWxsICIlSE9NRSVcbWF2ZW5yY19wcmUuYmF0IgoraWYgZXhpc3QgIiVIT01FJVxtYXZlbnJjX3ByZS5jbWQiIGNhbGwgIiVIT01FJVxtYXZlbnJjX3ByZS5jbWQiCis6c2tpcFJjUHJlCisKK0BzZXRsb2NhbAorCitzZXQgRVJST1JfQ09ERT0wCisKK0BSRU0gVG8gaXNvbGF0ZSBpbnRlcm5hbCB2YXJpYWJsZXMgZnJvbSBwb3NzaWJsZSBwb3N0IHNjcmlwdHMsIHdlIHVzZSBhbm90aGVyIHNldGxvY2FsCitAc2V0bG9jYWwKKworQFJFTSA9PT09IFNUQVJUIFZBTElEQVRJT04gPT09PQoraWYgbm90ICIlSkFWQV9IT01FJSIgPT0gIiIgZ290byBPa0pIb21lCisKK2VjaG8uCitlY2hvIEVycm9yOiBKQVZBX0hPTUUgbm90IGZvdW5kIGluIHlvdXIgZW52aXJvbm1lbnQuID4mMgorZWNobyBQbGVhc2Ugc2V0IHRoZSBKQVZBX0hPTUUgdmFyaWFibGUgaW4geW91ciBlbnZpcm9ubWVudCB0byBtYXRjaCB0aGUgPiYyCitlY2hvIGxvY2F0aW9uIG9mIHlvdXIgSmF2YSBpbnN0YWxsYXRpb24uID4mMgorZWNoby4KK2dvdG8gZXJyb3IKKworOk9rSkhvbWUKK2lmIGV4aXN0ICIlSkFWQV9IT01FJVxiaW5camF2YS5leGUiIGdvdG8gaW5pdAorCitlY2hvLgorZWNobyBFcnJvcjogSkFWQV9IT01FIGlzIHNldCB0byBhbiBpbnZhbGlkIGRpcmVjdG9yeS4gPiYyCitlY2hvIEpBVkFfSE9NRSA9ICIlSkFWQV9IT01FJSIgPiYyCitlY2hvIFBsZWFzZSBzZXQgdGhlIEpBVkFfSE9NRSB2YXJpYWJsZSBpbiB5b3VyIGVudmlyb25tZW50IHRvIG1hdGNoIHRoZSA+JjIKK2VjaG8gbG9jYXRpb24gb2YgeW91ciBKYXZhIGluc3RhbGxhdGlvbi4gPiYyCitlY2hvLgorZ290byBlcnJvcgorCitAUkVNID09PT0gRU5EIFZBTElEQVRJT04gPT09PQorCis6aW5pdAorCitAUkVNIEZpbmQgdGhlIHByb2plY3QgYmFzZSBkaXIsIGkuZS4gdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSBmb2xkZXIgIi5tdm4iLgorQFJFTSBGYWxsYmFjayB0byBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlmIG5vdCBmb3VuZC4KKworc2V0IE1BVkVOX1BST0pFQ1RCQVNFRElSPSVNQVZFTl9CQVNFRElSJQorSUYgTk9UICIlTUFWRU5fUFJPSkVDVEJBU0VESVIlIj09IiIgZ290byBlbmREZXRlY3RCYXNlRGlyCisKK3NldCBFWEVDX0RJUj0lQ0QlCitzZXQgV0RJUj0lRVhFQ19ESVIlCis6ZmluZEJhc2VEaXIKK0lGIEVYSVNUICIlV0RJUiUiXC5tdm4gZ290byBiYXNlRGlyRm91bmQKK2NkIC4uCitJRiAiJVdESVIlIj09IiVDRCUiIGdvdG8gYmFzZURpck5vdEZvdW5kCitzZXQgV0RJUj0lQ0QlCitnb3RvIGZpbmRCYXNlRGlyCisKKzpiYXNlRGlyRm91bmQKK3NldCBNQVZFTl9QUk9KRUNUQkFTRURJUj0lV0RJUiUKK2NkICIlRVhFQ19ESVIlIgorZ290byBlbmREZXRlY3RCYXNlRGlyCisKKzpiYXNlRGlyTm90Rm91bmQKK3NldCBNQVZFTl9QUk9KRUNUQkFTRURJUj0lRVhFQ19ESVIlCitjZCAiJUVYRUNfRElSJSIKKworOmVuZERldGVjdEJhc2VEaXIKKworSUYgTk9UIEVYSVNUICIlTUFWRU5fUFJPSkVDVEJBU0VESVIlXC5tdm5canZtLmNvbmZpZyIgZ290byBlbmRSZWFkQWRkaXRpb25hbENvbmZpZworCitAc2V0bG9jYWwgRW5hYmxlRXh0ZW5zaW9ucyBFbmFibGVEZWxheWVkRXhwYW5zaW9uCitmb3IgL0YgInVzZWJhY2txIGRlbGltcz0iICUlYSBpbiAoIiVNQVZFTl9QUk9KRUNUQkFTRURJUiVcLm12blxqdm0uY29uZmlnIikgZG8gc2V0IEpWTV9DT05GSUdfTUFWRU5fUFJPUFM9IUpWTV9DT05GSUdfTUFWRU5fUFJPUFMhICUlYQorQGVuZGxvY2FsICYgc2V0IEpWTV9DT05GSUdfTUFWRU5fUFJPUFM9JUpWTV9DT05GSUdfTUFWRU5fUFJPUFMlCisKKzplbmRSZWFkQWRkaXRpb25hbENvbmZpZworCitTRVQgTUFWRU5fSkFWQV9FWEU9IiVKQVZBX0hPTUUlXGJpblxqYXZhLmV4ZSIKK3NldCBXUkFQUEVSX0pBUj0iJU1BVkVOX1BST0pFQ1RCQVNFRElSJVwubXZuXHdyYXBwZXJcbWF2ZW4td3JhcHBlci5qYXIiCitzZXQgV1JBUFBFUl9MQVVOQ0hFUj1vcmcuYXBhY2hlLm1hdmVuLndyYXBwZXIuTWF2ZW5XcmFwcGVyTWFpbgorCitzZXQgRE9XTkxPQURfVVJMPSJodHRwczovL3JlcG8ubWF2ZW4uYXBhY2hlLm9yZy9tYXZlbjIvaW8vdGFrYXJpL21hdmVuLXdyYXBwZXIvMC41LjYvbWF2ZW4td3JhcHBlci0wLjUuNi5qYXIiCisKK0ZPUiAvRiAidG9rZW5zPTEsMiBkZWxpbXM9PSIgJSVBIElOICgiJU1BVkVOX1BST0pFQ1RCQVNFRElSJVwubXZuXHdyYXBwZXJcbWF2ZW4td3JhcHBlci5wcm9wZXJ0aWVzIikgRE8gKAorICAgIElGICIlJUEiPT0id3JhcHBlclVybCIgU0VUIERPV05MT0FEX1VSTD0lJUIKKykKKworQFJFTSBFeHRlbnNpb24gdG8gYWxsb3cgYXV0b21hdGljYWxseSBkb3dubG9hZGluZyB0aGUgbWF2ZW4td3JhcHBlci5qYXIgZnJvbSBNYXZlbi1jZW50cmFsCitAUkVNIFRoaXMgYWxsb3dzIHVzaW5nIHRoZSBtYXZlbiB3cmFwcGVyIGluIHByb2plY3RzIHRoYXQgcHJvaGliaXQgY2hlY2tpbmcgaW4gYmluYXJ5IGRhdGEuCitpZiBleGlzdCAlV1JBUFBFUl9KQVIlICgKKyAgICBpZiAiJU1WTldfVkVSQk9TRSUiID09ICJ0cnVlIiAoCisgICAgICAgIGVjaG8gRm91bmQgJVdSQVBQRVJfSkFSJQorICAgICkKKykgZWxzZSAoCisgICAgaWYgbm90ICIlTVZOV19SRVBPVVJMJSIgPT0gIiIgKAorICAgICAgICBTRVQgRE9XTkxPQURfVVJMPSIlTVZOV19SRVBPVVJMJS9pby90YWthcmkvbWF2ZW4td3JhcHBlci8wLjUuNi9tYXZlbi13cmFwcGVyLTAuNS42LmphciIKKyAgICApCisgICAgaWYgIiVNVk5XX1ZFUkJPU0UlIiA9PSAidHJ1ZSIgKAorICAgICAgICBlY2hvIENvdWxkbid0IGZpbmQgJVdSQVBQRVJfSkFSJSwgZG93bmxvYWRpbmcgaXQgLi4uCisgICAgICAgIGVjaG8gRG93bmxvYWRpbmcgZnJvbTogJURPV05MT0FEX1VSTCUKKyAgICApCisKKyAgICBwb3dlcnNoZWxsIC1Db21tYW5kICImeyJeCisJCSIkd2ViY2xpZW50ID0gbmV3LW9iamVjdCBTeXN0ZW0uTmV0LldlYkNsaWVudDsiXgorCQkiaWYgKC1ub3QgKFtzdHJpbmddOjpJc051bGxPckVtcHR5KCclTVZOV19VU0VSTkFNRSUnKSAtYW5kIFtzdHJpbmddOjpJc051bGxPckVtcHR5KCclTVZOV19QQVNTV09SRCUnKSkpIHsiXgorCQkiJHdlYmNsaWVudC5DcmVkZW50aWFscyA9IG5ldy1vYmplY3QgU3lzdGVtLk5ldC5OZXR3b3JrQ3JlZGVudGlhbCgnJU1WTldfVVNFUk5BTUUlJywgJyVNVk5XX1BBU1NXT1JEJScpOyJeCisJCSJ9Il4KKwkJIltOZXQuU2VydmljZVBvaW50TWFuYWdlcl06OlNlY3VyaXR5UHJvdG9jb2wgPSBbTmV0LlNlY3VyaXR5UHJvdG9jb2xUeXBlXTo6VGxzMTI7ICR3ZWJjbGllbnQuRG93bmxvYWRGaWxlKCclRE9XTkxPQURfVVJMJScsICclV1JBUFBFUl9KQVIlJykiXgorCQkifSIKKyAgICBpZiAiJU1WTldfVkVSQk9TRSUiID09ICJ0cnVlIiAoCisgICAgICAgIGVjaG8gRmluaXNoZWQgZG93bmxvYWRpbmcgJVdSQVBQRVJfSkFSJQorICAgICkKKykKK0BSRU0gRW5kIG9mIGV4dGVuc2lvbgorCitAUkVNIFByb3ZpZGUgYSAic3RhbmRhcmRpemVkIiB3YXkgdG8gcmV0cmlldmUgdGhlIENMSSBhcmdzIHRoYXQgd2lsbAorQFJFTSB3b3JrIHdpdGggYm90aCBXaW5kb3dzIGFuZCBub24tV2luZG93cyBleGVjdXRpb25zLgorc2V0IE1BVkVOX0NNRF9MSU5FX0FSR1M9JSoKKworJU1BVkVOX0pBVkFfRVhFJSAlSlZNX0NPTkZJR19NQVZFTl9QUk9QUyUgJU1BVkVOX09QVFMlICVNQVZFTl9ERUJVR19PUFRTJSAtY2xhc3NwYXRoICVXUkFQUEVSX0pBUiUgIi1EbWF2ZW4ubXVsdGlNb2R1bGVQcm9qZWN0RGlyZWN0b3J5PSVNQVZFTl9QUk9KRUNUQkFTRURJUiUiICVXUkFQUEVSX0xBVU5DSEVSJSAlTUFWRU5fQ09ORklHJSAlKgoraWYgRVJST1JMRVZFTCAxIGdvdG8gZXJyb3IKK2dvdG8gZW5kCisKKzplcnJvcgorc2V0IEVSUk9SX0NPREU9MQorCis6ZW5kCitAZW5kbG9jYWwgJiBzZXQgRVJST1JfQ09ERT0lRVJST1JfQ09ERSUKKworaWYgbm90ICIlTUFWRU5fU0tJUF9SQyUiID09ICIiIGdvdG8gc2tpcFJjUG9zdAorQFJFTSBjaGVjayBmb3IgcG9zdCBzY3JpcHQsIG9uY2Ugd2l0aCBsZWdhY3kgLmJhdCBlbmRpbmcgYW5kIG9uY2Ugd2l0aCAuY21kIGVuZGluZworaWYgZXhpc3QgIiVIT01FJVxtYXZlbnJjX3Bvc3QuYmF0IiBjYWxsICIlSE9NRSVcbWF2ZW5yY19wb3N0LmJhdCIKK2lmIGV4aXN0ICIlSE9NRSVcbWF2ZW5yY19wb3N0LmNtZCIgY2FsbCAiJUhPTUUlXG1hdmVucmNfcG9zdC5jbWQiCis6c2tpcFJjUG9zdAorCitAUkVNIHBhdXNlIHRoZSBzY3JpcHQgaWYgTUFWRU5fQkFUQ0hfUEFVU0UgaXMgc2V0IHRvICdvbicKK2lmICIlTUFWRU5fQkFUQ0hfUEFVU0UlIiA9PSAib24iIHBhdXNlCisKK2lmICIlTUFWRU5fVEVSTUlOQVRFX0NNRCUiID09ICJvbiIgZXhpdCAlRVJST1JfQ09ERSUKKworZXhpdCAvQiAlRVJST1JfQ09ERSUKZGlmZiAtLWdpdCBhL1NBUklTLUludGVyZmFjZS9wb20ueG1sIGIvU0FSSVMtSW50ZXJmYWNlL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMwOWNjYgotLS0gL2Rldi9udWxsCisrKyBiL1NBUklTLUludGVyZmFjZS9wb20ueG1sCkBAIC0wLDAgKzEsMjMzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKwkJIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHBzOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKwk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisJPHBhcmVudD4KKwkJPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yay5ib290PC9ncm91cElkPgorCQk8YXJ0aWZhY3RJZD5zcHJpbmctYm9vdC1zdGFydGVyLXBhcmVudDwvYXJ0aWZhY3RJZD4KKwkJPHZlcnNpb24+Mi4yLjQuUkVMRUFTRTwvdmVyc2lvbj4KKwkJPHJlbGF0aXZlUGF0aC8+IDwhLS0gbG9va3VwIHBhcmVudCBmcm9tIHJlcG9zaXRvcnkgLS0+CisJPC9wYXJlbnQ+CisJPGdyb3VwSWQ+b3JnLmVjbGlwc2Uub3Blbms8L2dyb3VwSWQ+CisJPGFydGlmYWN0SWQ+Z3JpZC1mYWlsdXJlLWluZm9ybWF0aW9uLmJhY2tlbmQuc2FyaXMtaW50ZXJmYWNlPC9hcnRpZmFjdElkPgorCTx2ZXJzaW9uPjAuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorCTxuYW1lPmdyaWQtZmFpbHVyZS1pbmZvcm1hdGlvbi5zYXJpcy1pbnRlcmZhY2U8L25hbWU+CisJPGRlc2NyaXB0aW9uPkdyaWQtRmFpbHVyZS1JbmZvcm1hdGlvbiBQcm9qZWN0IGZvciBvcGVuS09OU0VRVUVOWjwvZGVzY3JpcHRpb24+CisKKwk8cHJvcGVydGllcz4KKwkJPHNraXAuYXNjaWlkb2M+ZmFsc2U8L3NraXAuYXNjaWlkb2M+CisJCTxtYXZlbi50ZXN0LnNraXA+ZmFsc2U8L21hdmVuLnRlc3Quc2tpcD4KKworCQk8amF2YS52ZXJzaW9uPjEuODwvamF2YS52ZXJzaW9uPgorCQk8c3ByaW5nLWNsb3VkLnZlcnNpb24+SG94dG9uLlJFTEVBU0U8L3NwcmluZy1jbG91ZC52ZXJzaW9uPgorCQk8c3ByaW5nZm94LnZlcnNpb24+Mi45LjI8L3NwcmluZ2ZveC52ZXJzaW9uPgorCQk8c3ByaW5nLXNlY3VyaXR5LXRlc3QudmVyc2lvbj41LjIuMS5SRUxFQVNFPC9zcHJpbmctc2VjdXJpdHktdGVzdC52ZXJzaW9uPgorCQk8cG93ZXJNb2NrUmVmbGVjdC52ZXJzaW9uPjIuMC4wPC9wb3dlck1vY2tSZWZsZWN0LnZlcnNpb24+CisJCTxzb25hci1tYXZlbi1wbHVnaW4udmVyc2lvbj4zLjI8L3NvbmFyLW1hdmVuLXBsdWdpbi52ZXJzaW9uPgorCQk8YXNjaWlkb2N0b3ItbWF2ZW4tcGx1Z2luLXZlcnNpb24+MS41LjM8L2FzY2lpZG9jdG9yLW1hdmVuLXBsdWdpbi12ZXJzaW9uPgorCQk8YXNjaWlkb2N0b3JqLXBkZi12ZXJzaW9uPjEuNS4wLWFscGhhLjExPC9hc2NpaWRvY3RvcmotcGRmLXZlcnNpb24+CisJCTxhc2NpaWRvY3RvcmotdmVyc2lvbj4xLjUuNDwvYXNjaWlkb2N0b3JqLXZlcnNpb24+CisJCTxhc2NpaWRvY3RvcmotZGlhZ3JhbS12ZXJzaW9ucz4xLjUuNC4xPC9hc2NpaWRvY3RvcmotZGlhZ3JhbS12ZXJzaW9ucz4KKwkJPGphY29jby1tYXZlbi1wbHVnaW4udmVyc2lvbj4wLjguNTwvamFjb2NvLW1hdmVuLXBsdWdpbi52ZXJzaW9uPgorCQk8anJ1YnktY29tcGxldGUtdmVyc2lvbj45LjAuMC4wPC9qcnVieS1jb21wbGV0ZS12ZXJzaW9uPgorCQk8bWFwc3RydWN0LnZlcnNpb24+MS4yLjAuRmluYWw8L21hcHN0cnVjdC52ZXJzaW9uPgorCQk8Zmx5d2F5LWNvcmUudmVyc2lvbj42LjAuODwvZmx5d2F5LWNvcmUudmVyc2lvbj4KKwkJPHBvc3RncmVzcWwudmVyc2lvbj40Mi4yLjg8L3Bvc3RncmVzcWwudmVyc2lvbj4KKwkJPGxvbWJvY2sudmVyc2lvbj4xLjE4LjEwPC9sb21ib2NrLnZlcnNpb24+CisJCTxoMi52ZXJzaW9uPjEuNC4yMDA8L2gyLnZlcnNpb24+CisJCTxqc29ud2VidG9rZW4udmVyc2lvbj4wLjkuMTwvanNvbndlYnRva2VuLnZlcnNpb24+CisJCTxvcGVuZmVpZ24udmVyc2lvbj4yLjIuMC5SRUxFQVNFPC9vcGVuZmVpZ24udmVyc2lvbj4KKwkJPGtleWNsb2FrLWNvcmUudmVyc2lvbj4zLjQuMi5GaW5hbDwva2V5Y2xvYWstY29yZS52ZXJzaW9uPgorCQk8bmV4bW8udmVyc2lvbj41LjIuMTwvbmV4bW8udmVyc2lvbj4KKwkJPHJhYmJpdG1xLnZlcnNpb24+NS4yLjA8L3JhYmJpdG1xLnZlcnNpb24+CisJPC9wcm9wZXJ0aWVzPgorCisJPGRlcGVuZGVuY2llcz4KKwkJPCEtLSBodHRwczovL212bnJlcG9zaXRvcnkuY29tL2FydGlmYWN0L29yZy5zcHJpbmdmcmFtZXdvcmsuYW1xcC9zcHJpbmctcmFiYml0LXRlc3QgLS0+CisJCTxkZXBlbmRlbmN5PgorCQkJPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yay5hbXFwPC9ncm91cElkPgorCQkJPGFydGlmYWN0SWQ+c3ByaW5nLXJhYmJpdC10ZXN0PC9hcnRpZmFjdElkPgorCQkJPHZlcnNpb24+Mi4yLjcuUkVMRUFTRTwvdmVyc2lvbj4KKwkJCTxzY29wZT50ZXN0PC9zY29wZT4KKwkJPC9kZXBlbmRlbmN5PgorCisJCTxkZXBlbmRlbmN5PgorCQkJPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yay5ib290PC9ncm91cElkPgorCQkJPGFydGlmYWN0SWQ+c3ByaW5nLWJvb3Qtc3RhcnRlci13ZWI8L2FydGlmYWN0SWQ+CisJCTwvZGVwZW5kZW5jeT4KKwkJPGRlcGVuZGVuY3k+CisJCQk8Z3JvdXBJZD5vcmcuc3ByaW5nZnJhbWV3b3JrLmJvb3Q8L2dyb3VwSWQ+CisJCQk8YXJ0aWZhY3RJZD5zcHJpbmctYm9vdC1zdGFydGVyLXdlYi1zZXJ2aWNlczwvYXJ0aWZhY3RJZD4KKwkJPC9kZXBlbmRlbmN5PgorCQk8ZGVwZW5kZW5jeT4KKwkJCTxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdDwvZ3JvdXBJZD4KKwkJCTxhcnRpZmFjdElkPnNwcmluZy1ib290LXN0YXJ0ZXItYW1xcDwvYXJ0aWZhY3RJZD4KKwkJPC9kZXBlbmRlbmN5PgorCQk8ZGVwZW5kZW5jeT4KKwkJCTxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdDwvZ3JvdXBJZD4KKwkJCTxhcnRpZmFjdElkPnNwcmluZy1ib290LXN0YXJ0ZXItaW50ZWdyYXRpb248L2FydGlmYWN0SWQ+CisJCQk8dmVyc2lvbj4yLjIuNS5SRUxFQVNFPC92ZXJzaW9uPgorCQk8L2RlcGVuZGVuY3k+CisJCTxkZXBlbmRlbmN5PgorCQkJPGdyb3VwSWQ+b3JnLnByb2plY3Rsb21ib2s8L2dyb3VwSWQ+CisJCQk8YXJ0aWZhY3RJZD5sb21ib2s8L2FydGlmYWN0SWQ+CisJCQk8dmVyc2lvbj4ke2xvbWJvay52ZXJzaW9ufTwvdmVyc2lvbj4KKwkJCTxvcHRpb25hbD50cnVlPC9vcHRpb25hbD4KKwkJPC9kZXBlbmRlbmN5PgorCQk8ZGVwZW5kZW5jeT4KKwkJCTxncm91cElkPm9yZy5tYXBzdHJ1Y3Q8L2dyb3VwSWQ+CisJCQk8YXJ0aWZhY3RJZD5tYXBzdHJ1Y3QtcHJvY2Vzc29yPC9hcnRpZmFjdElkPgorCQkJPHZlcnNpb24+JHttYXBzdHJ1Y3QudmVyc2lvbn08L3ZlcnNpb24+CisJCQk8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgorCQk8L2RlcGVuZGVuY3k+CisJCTxkZXBlbmRlbmN5PgorCQkJPGdyb3VwSWQ+aW8uc3ByaW5nZm94PC9ncm91cElkPgorCQkJPGFydGlmYWN0SWQ+c3ByaW5nZm94LXN3YWdnZXIyPC9hcnRpZmFjdElkPgorCQkJPHZlcnNpb24+JHtzcHJpbmdmb3gudmVyc2lvbn08L3ZlcnNpb24+CisJCTwvZGVwZW5kZW5jeT4KKwkJPGRlcGVuZGVuY3k+CisJCQk8Z3JvdXBJZD5pby5zcHJpbmdmb3g8L2dyb3VwSWQ+CisJCQk8YXJ0aWZhY3RJZD5zcHJpbmdmb3gtc3dhZ2dlci11aTwvYXJ0aWZhY3RJZD4KKwkJCTx2ZXJzaW9uPiR7c3ByaW5nZm94LnZlcnNpb259PC92ZXJzaW9uPgorCQk8L2RlcGVuZGVuY3k+CisJCTxkZXBlbmRlbmN5PgorCQkJPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yay5ib290PC9ncm91cElkPgorCQkJPGFydGlmYWN0SWQ+c3ByaW5nLWJvb3Qtc3RhcnRlci10ZXN0PC9hcnRpZmFjdElkPgorCQkJPHNjb3BlPnRlc3Q8L3Njb3BlPgorCQkJPGV4Y2x1c2lvbnM+CisJCQkJPGV4Y2x1c2lvbj4KKwkJCQkJPGdyb3VwSWQ+b3JnLmp1bml0LnZpbnRhZ2U8L2dyb3VwSWQ+CisJCQkJCTxhcnRpZmFjdElkPmp1bml0LXZpbnRhZ2UtZW5naW5lPC9hcnRpZmFjdElkPgorCQkJCTwvZXhjbHVzaW9uPgorCQkJPC9leGNsdXNpb25zPgorCQk8L2RlcGVuZGVuY3k+CisJCTxkZXBlbmRlbmN5PgorCQkJPGdyb3VwSWQ+b3JnLnBvd2VybW9jazwvZ3JvdXBJZD4KKwkJCTxhcnRpZmFjdElkPnBvd2VybW9jay1yZWZsZWN0PC9hcnRpZmFjdElkPgorCQkJPHZlcnNpb24+JHtwb3dlck1vY2tSZWZsZWN0LnZlcnNpb259PC92ZXJzaW9uPgorCQkJPHNjb3BlPnRlc3Q8L3Njb3BlPgorCQk8L2RlcGVuZGVuY3k+CisJCTxkZXBlbmRlbmN5PgorCQkJPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yay5iYXRjaDwvZ3JvdXBJZD4KKwkJCTxhcnRpZmFjdElkPnNwcmluZy1iYXRjaC1jb3JlPC9hcnRpZmFjdElkPgorCQkJPHZlcnNpb24+NC4yLjEuUkVMRUFTRTwvdmVyc2lvbj4KKwkJPC9kZXBlbmRlbmN5PgorCisJCTxkZXBlbmRlbmN5PgorCQkJPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yay5iYXRjaDwvZ3JvdXBJZD4KKwkJCTxhcnRpZmFjdElkPnNwcmluZy1iYXRjaC10ZXN0PC9hcnRpZmFjdElkPgorCQkJPHNjb3BlPnRlc3Q8L3Njb3BlPgorCQk8L2RlcGVuZGVuY3k+CisKKwkJPGRlcGVuZGVuY3k+CisJCQk8Z3JvdXBJZD5jb20ucmFiYml0bXE8L2dyb3VwSWQ+CisJCQk8YXJ0aWZhY3RJZD5hbXFwLWNsaWVudDwvYXJ0aWZhY3RJZD4KKwkJCTx2ZXJzaW9uPiR7cmFiYml0bXEudmVyc2lvbn08L3ZlcnNpb24+CisJCTwvZGVwZW5kZW5jeT4KKworCQk8ZGVwZW5kZW5jeT4KKwkJCTxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcmsuY2xvdWQ8L2dyb3VwSWQ+CisJCQk8YXJ0aWZhY3RJZD5zcHJpbmctY2xvdWQtc3RhcnRlci1vcGVuZmVpZ248L2FydGlmYWN0SWQ+CisJCQk8dmVyc2lvbj4ke29wZW5mZWlnbi52ZXJzaW9ufTwvdmVyc2lvbj4KKwkJPC9kZXBlbmRlbmN5PgorCQk8ZGVwZW5kZW5jeT4KKwkJCTxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcmsuY2xvdWQ8L2dyb3VwSWQ+CisJCQk8YXJ0aWZhY3RJZD5zcHJpbmctY2xvdWQtc3RhcnRlci1uZXRmbGl4LXJpYmJvbjwvYXJ0aWZhY3RJZD4KKwkJCTx2ZXJzaW9uPiR7b3BlbmZlaWduLnZlcnNpb259PC92ZXJzaW9uPgorCQk8L2RlcGVuZGVuY3k+CisKKwkJPGRlcGVuZGVuY3k+CisJCQk8Z3JvdXBJZD5vcmcuc3ByaW5nZnJhbWV3b3JrLmNsb3VkPC9ncm91cElkPgorCQkJPGFydGlmYWN0SWQ+c3ByaW5nLWNsb3VkLWNvbnRyYWN0LXdpcmVtb2NrPC9hcnRpZmFjdElkPgorCQkJPHNjb3BlPnRlc3Q8L3Njb3BlPgorCQk8L2RlcGVuZGVuY3k+CisKKwkJPGRlcGVuZGVuY3k+CisJCQk8Z3JvdXBJZD5vcmcuc3ByaW5nZnJhbWV3b3JrLmNsb3VkPC9ncm91cElkPgorCQkJPGFydGlmYWN0SWQ+c3ByaW5nLWNsb3VkLXN0cmVhbS10ZXN0LXN1cHBvcnQ8L2FydGlmYWN0SWQ+CisJCQk8c2NvcGU+dGVzdDwvc2NvcGU+CisJCTwvZGVwZW5kZW5jeT4KKworCisJPC9kZXBlbmRlbmNpZXM+CisKKwk8ZGVwZW5kZW5jeU1hbmFnZW1lbnQ+CisJCTxkZXBlbmRlbmNpZXM+CisJCQk8ZGVwZW5kZW5jeT4KKwkJCQk8Z3JvdXBJZD5vcmcuc3ByaW5nZnJhbWV3b3JrLmNsb3VkPC9ncm91cElkPgorCQkJCTxhcnRpZmFjdElkPnNwcmluZy1jbG91ZC1kZXBlbmRlbmNpZXM8L2FydGlmYWN0SWQ+CisJCQkJPHZlcnNpb24+JHtzcHJpbmctY2xvdWQudmVyc2lvbn08L3ZlcnNpb24+CisJCQkJPHR5cGU+cG9tPC90eXBlPgorCQkJCTxzY29wZT5pbXBvcnQ8L3Njb3BlPgorCQkJPC9kZXBlbmRlbmN5PgorCQk8L2RlcGVuZGVuY2llcz4KKwk8L2RlcGVuZGVuY3lNYW5hZ2VtZW50PgorCisJPGJ1aWxkPgorCQk8ZmluYWxOYW1lPiR7cHJvamVjdC5hcnRpZmFjdElkfTwvZmluYWxOYW1lPgorCQk8cGx1Z2lucz4KKwkJCTxwbHVnaW4+CisJCQkJPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yay5ib290PC9ncm91cElkPgorCQkJCTxhcnRpZmFjdElkPnNwcmluZy1ib290LW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKwkJCTwvcGx1Z2luPgorCQkJPHBsdWdpbj4KKwkJCQk8Z3JvdXBJZD5vcmcuamFjb2NvPC9ncm91cElkPgorCQkJCTxhcnRpZmFjdElkPmphY29jby1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisJCQkJPHZlcnNpb24+JHtqYWNvY28tbWF2ZW4tcGx1Z2luLnZlcnNpb259PC92ZXJzaW9uPgorCQkJCTxjb25maWd1cmF0aW9uPgorCQkJCQk8c2tpcD4ke21hdmVuLnRlc3Quc2tpcH08L3NraXA+CisJCQkJCTxvdXRwdXQ+ZmlsZTwvb3V0cHV0PgorCQkJCQk8YXBwZW5kPnRydWU8L2FwcGVuZD4KKwkJCQkJPGV4Y2x1ZGVzPgorCQkJCQkJPGV4Y2x1ZGU+KiovR2xvYmFscy4qPC9leGNsdWRlPgorCQkJCQk8L2V4Y2x1ZGVzPgorCQkJCTwvY29uZmlndXJhdGlvbj4KKwkJCQk8ZXhlY3V0aW9ucz4KKwkJCQkJPGV4ZWN1dGlvbj4KKwkJCQkJCTxpZD5qYWNvY28taW5pdGlhbGl6ZTwvaWQ+CisJCQkJCQk8Z29hbHM+CisJCQkJCQkJPGdvYWw+cHJlcGFyZS1hZ2VudDwvZ29hbD4KKwkJCQkJCTwvZ29hbHM+CisJCQkJCTwvZXhlY3V0aW9uPgorCQkJCQk8ZXhlY3V0aW9uPgorCQkJCQkJPGlkPmphY29jby1zaXRlPC9pZD4KKwkJCQkJCTxwaGFzZT52ZXJpZnk8L3BoYXNlPgorCQkJCQkJPGdvYWxzPgorCQkJCQkJCTxnb2FsPnJlcG9ydDwvZ29hbD4KKwkJCQkJCTwvZ29hbHM+CisJCQkJCTwvZXhlY3V0aW9uPgorCQkJCTwvZXhlY3V0aW9ucz4KKwkJCTwvcGx1Z2luPgorCQkJPHBsdWdpbj4KKwkJCQk8Z3JvdXBJZD5vcmcuc29uYXJzb3VyY2Uuc2Nhbm5lci5tYXZlbjwvZ3JvdXBJZD4KKwkJCQk8YXJ0aWZhY3RJZD5zb25hci1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisJCQkJPHZlcnNpb24+JHtzb25hci1tYXZlbi1wbHVnaW4udmVyc2lvbn08L3ZlcnNpb24+CisJCQk8L3BsdWdpbj4KKwkJCTwhLS0gdGFnOjp3c2RsW10gLS0+CisJCQk8cGx1Z2luPgorCQkJCTxncm91cElkPm9yZy5qdm5ldC5qYXhiMi5tYXZlbjI8L2dyb3VwSWQ+CisJCQkJPGFydGlmYWN0SWQ+bWF2ZW4tamF4YjItcGx1Z2luPC9hcnRpZmFjdElkPgorCQkJCTxleGVjdXRpb25zPgorCQkJCQk8ZXhlY3V0aW9uPgorCQkJCQkJPGlkPndzZGwtZ2VuZXJhdGU8L2lkPgorCQkJCQkJPGNvbmZpZ3VyYXRpb24+CisJCQkJCQkJPGdlbmVyYXRlUGFja2FnZT5vcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhcmlzaW50ZXJmYWNlLndzZGw8L2dlbmVyYXRlUGFja2FnZT4KKwkJCQkJCQk8c2NoZW1hSW5jbHVkZXM+CisJCQkJCQkJCTxpbmNsdWRlPioud3NkbDwvaW5jbHVkZT4KKwkJCQkJCQkJPCEtLSA8aW5jbHVkZT5jb3VudHJpZXMud3NkbDwvaW5jbHVkZT4gLS0+CisJCQkJCQkJCTwhLS0gPGluY2x1ZGU+U3RvZXJ1bmdlbnNlcnZpY2Uud3NkbDwvaW5jbHVkZT4gLS0+CisJCQkJCQkJPC9zY2hlbWFJbmNsdWRlcz4KKwkJCQkJCQk8Y2F0YWxvZz4ke3Byb2plY3QuYmFzZWRpcn0vc3JjL21haW4vcmVzb3VyY2VzL2NhdGFsb2cuY2F0PC9jYXRhbG9nPgorCQkJCQkJPC9jb25maWd1cmF0aW9uPgorCQkJCQkJPGdvYWxzPgorCQkJCQkJCTxnb2FsPmdlbmVyYXRlPC9nb2FsPgorCQkJCQkJPC9nb2Fscz4KKwkJCQkJPC9leGVjdXRpb24+CisJCQkJPC9leGVjdXRpb25zPgorCQkJPC9wbHVnaW4+CisKKworCQk8L3BsdWdpbnM+CisJPC9idWlsZD4KKworPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvU0FSSVMtSW50ZXJmYWNlL3NhcmlzTW9ja1Jlc3BvbnNlLnhtbCBiL1NBUklTLUludGVyZmFjZS9zYXJpc01vY2tSZXNwb25zZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYzZmJiYQotLS0gL2Rldi9udWxsCisrKyBiL1NBUklTLUludGVyZmFjZS9zYXJpc01vY2tSZXNwb25zZS54bWwKQEAgLTAsMCArMSwyMSBAQAorPEdldEFrdHVlbGxlR1ZVc0luZm9BbGxnZW1laW5SZXNwb25zZSB4bWxucz0iaHR0cDovL3RlbXB1cmkub3JnLyI+CisgICAgPEdldEFrdHVlbGxlR1ZVc0luZm9BbGxnZW1laW5SZXN1bHQ+CisgICAgICAgIDxWaWV3R2VwbGFudGVWVT4KKyAgICAgICAgICAgIDxWZXJzb3JndW5nc3VudGVyYnJlY2h1bmdJRD45MjIzMDwvVmVyc29yZ3VuZ3N1bnRlcmJyZWNodW5nSUQ+CisgICAgICAgICAgICA8QmVnaW5uPjIwMTktMDctMThUMDg6MDA6MDA8L0JlZ2lubj4KKyAgICAgICAgICAgIDxFbmRlPjIwMTktMDctMThUMDk6MzA6MDA8L0VuZGU+CisgICAgICAgICAgICA8QW56YWhsS3VuZGVuPjE8L0FuemFobEt1bmRlbj4KKyAgICAgICAgICAgIDxPcnQ+RG9sbGVybjwvT3J0PgorICAgICAgICAgICAgPFN0cmFzc2U+R2Vyc3RlbmthbXA8L1N0cmFzc2U+CisgICAgICAgICAgICA8SGF1c251bW1lcm4+MS0xMzwvSGF1c251bW1lcm4+CisgICAgICAgICAgICA8QmVtZXJrdW5nPkhhdXNhbnNjaGx1c3MgaGVyc3RlbGxlbiBiZWkgSHMuIE5yLiAzIGE8L0JlbWVya3VuZz4KKyAgICAgICAgICAgIDxSZWFsaXNpZXJ0PmZhbHNlPC9SZWFsaXNpZXJ0PgorICAgICAgICAgICAgPFN0cmFzc2VuQWJzY2huaXR0SUQ+MzE3NzUyPC9TdHJhc3NlbkFic2Nobml0dElEPgorICAgICAgICAgICAgPExldHp0ZUFlbmRlcnVuZ0FtPjAwMDEtMDEtMDFUMDA6MDA6MDA8L0xldHp0ZUFlbmRlcnVuZ0FtPgorICAgICAgICAgICAgPFN0b2VydW5nPjI2NTkwNjwvU3RvZXJ1bmc+CisgICAgICAgICAgICA8UGx6PjIxNzM5PC9QbHo+CisgICAgICAgICAgICA8U3BhcnRlSUQ+Mjg5OTwvU3BhcnRlSUQ+CisgICAgICAgICAgICA8U3BhcnRlPkdWVSBTdHJvbTwvU3BhcnRlPgorICAgICAgICA8L1ZpZXdHZXBsYW50ZVZVPgorICAgIDwvR2V0QWt0dWVsbGVHVlVzSW5mb0FsbGdlbWVpblJlc3VsdD4KKzwvR2V0QWt0dWVsbGVHVlVzSW5mb0FsbGdlbWVpblJlc3BvbnNlPgpkaWZmIC0tZ2l0IGEvU0FSSVMtSW50ZXJmYWNlL3NvbmFyLXByb2plY3QucHJvcGVydGllcyBiL1NBUklTLUludGVyZmFjZS9zb25hci1wcm9qZWN0LnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQyNzE4ZgotLS0gL2Rldi9udWxsCisrKyBiL1NBUklTLUludGVyZmFjZS9zb25hci1wcm9qZWN0LnByb3BlcnRpZXMKQEAgLTAsMCArMSwxOSBAQAorIyBtdXN0IGJlIHVuaXF1ZSBpbiBhIGdpdmVuIFNvbmFyUXViZSBpbnN0YW5jZQorc29uYXIucHJvamVjdEtleT1vcGVuay5wdGEuZGU6c3RvZXJ1bmdzYXVza3VuZnRpbnRlcmZhY2UKKyMgdGhpcyBpcyB0aGUgbmFtZSBhbmQgdmVyc2lvbiBkaXNwbGF5ZWQgaW4gdGhlIFNvbmFyUXViZSBVSS4gV2FzIG1hbmRhdG9yeSBwcmlvciB0byBTb25hclF1YmUgNi4xLgorc29uYXIucHJvamVjdE5hbWU9Z3JpZC1mYWlsdXJlLWluZm9ybWF0aW9uLnN0b2VydW5nc2F1c2t1bmZ0aW50ZXJmYWNlCitzb25hci5wcm9qZWN0VmVyc2lvbj0wLjAuMV9TbmFwc2hvdAorc29uYXIuamF2YS5iaW5hcmllcz10YXJnZXQvY2xhc3NlcworIAorIyBMYW5ndWFnZQorc29uYXIubGFuZ3VhZ2U9CisgCitzb25hci5zb3VyY2VFbmNvZGluZz1VVEYtOAorc29uYXIuc291cmNlcz1zcmMvbWFpbgorc29uYXIuZXhjbHVzaW9ucz0qKi9tb2RlbC8qLmphdmEsKiovdmlld21vZGVsLyouamF2YSwqKi9kdG9zLyouamF2YSwgKiovUmFiYml0TXFDb25maWcuamF2YQorc29uYXIudGVzdHM9c3JjL3Rlc3QKKyNzb25hci50ZXN0LmluY2x1c2lvbnM9KiovKi5zcGVjLnRzCitzb25hci50ZXN0LmV4Y2x1c2lvbnM9KiovbW9kZWwvKiosKiovdmlld21vZGVsLyoqLCoqL2R0b3MvKi5qYXZhLCAqKi9SYWJiaXRNcUNvbmZpZy5qYXZhCisjc29uYXIudHMudHNsaW50Y29uZmlncGF0aD10c2xpbnQuanNvbgorCitzb25hci50eXBlc2NyaXB0Lmxjb3YucmVwb3J0UGF0aHM9Y292ZXJhZ2UvbGNvdi5pbmZvClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYXJpc2ludGVyZmFjZS9TYXJpc0ludGVyZmFjZUFwcGxpY2F0aW9uLmphdmEgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL1NhcmlzSW50ZXJmYWNlQXBwbGljYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTlmYjEzCi0tLSAvZGV2L251bGwKKysrIGIvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYXJpc2ludGVyZmFjZS9TYXJpc0ludGVyZmFjZUFwcGxpY2F0aW9uLmphdmEKQEAgLTAsMCArMSwxNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhcmlzaW50ZXJmYWNlOworCitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5ib290LlNwcmluZ0FwcGxpY2F0aW9uOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdC5hdXRvY29uZmlndXJlLlNwcmluZ0Jvb3RBcHBsaWNhdGlvbjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNsb3VkLm9wZW5mZWlnbi5FbmFibGVGZWlnbkNsaWVudHM7CisKK0BTcHJpbmdCb290QXBwbGljYXRpb24KK0BFbmFibGVGZWlnbkNsaWVudHMKK3B1YmxpYyBjbGFzcyBTYXJpc0ludGVyZmFjZUFwcGxpY2F0aW9uIHsKKworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKwkJU3ByaW5nQXBwbGljYXRpb24ucnVuKFNhcmlzSW50ZXJmYWNlQXBwbGljYXRpb24uY2xhc3MpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvU0FNTy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhbW9pbnRlcmZhY2UvYXBpL1N0b2VydW5nc2F1c2t1bmZ0QXBpLmphdmEgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL2FwaS9TdG9lcnVuZ3NhdXNrdW5mdEFwaS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggODIlCnJlbmFtZSBmcm9tIFNBTU8tSW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYW1vaW50ZXJmYWNlL2FwaS9TdG9lcnVuZ3NhdXNrdW5mdEFwaS5qYXZhCnJlbmFtZSB0byBTQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL2FwaS9TdG9lcnVuZ3NhdXNrdW5mdEFwaS5qYXZhCmluZGV4IGRiNzI4ODAuLmU1YmNjZDAgMTAwNjQ0Ci0tLSBhL1NBTU8tSW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYW1vaW50ZXJmYWNlL2FwaS9TdG9lcnVuZ3NhdXNrdW5mdEFwaS5qYXZhCisrKyBiL1NBUklTLUludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2FyaXNpbnRlcmZhY2UvYXBpL1N0b2VydW5nc2F1c2t1bmZ0QXBpLmphdmEKQEAgLTEyLDEwICsxMiwxMCBAQAogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhbW9pbnRlcmZhY2UuYXBpOworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhcmlzaW50ZXJmYWNlLmFwaTsKIAotaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2Ftb2ludGVyZmFjZS5kdG9zLlN0b2VydW5nc2F1c2t1bmZ0T3V0YWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2Ftb2ludGVyZmFjZS5kdG9zLlN0b2VydW5nc2F1c2t1bmZ0VXNlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhcmlzaW50ZXJmYWNlLmR0b3MuU3RvZXJ1bmdzYXVza3VuZnRPdXRhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS5kdG9zLlN0b2VydW5nc2F1c2t1bmZ0VXNlck5vdGlmaWNhdGlvbjsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNsb3VkLm9wZW5mZWlnbi5GZWlnbkNsaWVudDsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uR2V0TWFwcGluZzsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uUG9zdE1hcHBpbmc7CmRpZmYgLS1naXQgYS9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL2NvbmZpZy9GZWlnbkNsaWVudENvbmZpZy5qYXZhIGIvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYXJpc2ludGVyZmFjZS9jb25maWcvRmVpZ25DbGllbnRDb25maWcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTBhNTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYXJpc2ludGVyZmFjZS9jb25maWcvRmVpZ25DbGllbnRDb25maWcuamF2YQpAQCAtMCwwICsxLDI0IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2FyaXNpbnRlcmZhY2UuY29uZmlnOworCitpbXBvcnQgZmVpZ24uUmVxdWVzdEludGVyY2VwdG9yOworaW1wb3J0IGZlaWduLmF1dGguQmFzaWNBdXRoUmVxdWVzdEludGVyY2VwdG9yOworaW1wb3J0IGxvbWJvay5leHRlcm4ubG9nNGouTG9nNGoyOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLlZhbHVlOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5hbm5vdGF0aW9uLkJlYW47CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LmFubm90YXRpb24uQ29uZmlndXJhdGlvbjsKKworQExvZzRqMgorQENvbmZpZ3VyYXRpb24KK3B1YmxpYyBjbGFzcyBGZWlnbkNsaWVudENvbmZpZyB7CisKKyAgICBAVmFsdWUoIiR7c3RvZXJ1bmdzYXVza3VuZnQudXNlcn0iKQorICAgIHB1YmxpYyBTdHJpbmcgdXNlcjsKKyAgICBAVmFsdWUoIiR7c3RvZXJ1bmdzYXVza3VuZnQucGFzc3dvcmR9IikKKyAgICBwdWJsaWMgU3RyaW5nIHBhc3N3b3JkOworCisgICAgQEJlYW4KKyAgICBwdWJsaWMgUmVxdWVzdEludGVyY2VwdG9yIGJhc2ljQXV0aFJlcXVlc3RJbnRlcmNlcHRvcigpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBCYXNpY0F1dGhSZXF1ZXN0SW50ZXJjZXB0b3IodXNlciwgcGFzc3dvcmQpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYXJpc2ludGVyZmFjZS9jb25maWcvSW1wb3J0U2NoZWR1bGVyQ29uZmlnLmphdmEgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL2NvbmZpZy9JbXBvcnRTY2hlZHVsZXJDb25maWcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2Y5ZGY5Ci0tLSAvZGV2L251bGwKKysrIGIvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYXJpc2ludGVyZmFjZS9jb25maWcvSW1wb3J0U2NoZWR1bGVyQ29uZmlnLmphdmEKQEAgLTAsMCArMSwzOCBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhcmlzaW50ZXJmYWNlLmNvbmZpZzsKKworaW1wb3J0IGxvbWJvay5leHRlcm4ubG9nNGouTG9nNGoyOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2FyaXNpbnRlcmZhY2Uuc2VydmljZS5JbXBvcnRTZXJ2aWNlOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5WYWx1ZTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJvb3QuYXV0b2NvbmZpZ3VyZS5jb25kaXRpb24uQ29uZGl0aW9uYWxPblByb3BlcnR5OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5hbm5vdGF0aW9uLkJlYW47CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LmFubm90YXRpb24uQ29uZmlndXJhdGlvbjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnNjaGVkdWxpbmcuYW5ub3RhdGlvbi5FbmFibGVTY2hlZHVsaW5nOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc2NoZWR1bGluZy5hbm5vdGF0aW9uLlNjaGVkdWxlZDsKKworQExvZzRqMgorQENvbmZpZ3VyYXRpb24KK0BFbmFibGVTY2hlZHVsaW5nCitAQ29uZGl0aW9uYWxPblByb3BlcnR5KHByZWZpeCA9ICJzdG9lcnVuZ3NhdXNrdW5mdC5zY2hlZHVsaW5nLWltcG9ydCIsIG5hbWUgPSAiZW5hYmxlZCIsIGhhdmluZ1ZhbHVlID0gInRydWUiLCBtYXRjaElmTWlzc2luZyA9IGZhbHNlKQorcHVibGljIGNsYXNzIEltcG9ydFNjaGVkdWxlckNvbmZpZyB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NIRURVTEVSX05BTUUgPSAiU3RvZXJhdXNrdW5mdGltcG9ydC1TY2hlZHVsZXIiOworCisgICAgQEF1dG93aXJlZAorICAgIEltcG9ydFNlcnZpY2UgaW1wb3J0U2VydmljZTsKKworICAgIEBWYWx1ZSgiJHtzdG9lcnVuZ3NhdXNrdW5mdC5zY2hlZHVsaW5nLWltcG9ydC5jcm9ufSIpCisgICAgcHJpdmF0ZSBTdHJpbmcgY3JvbkV4cHJlc3Npb247CisKKyAgICBAQmVhbgorICAgIHB1YmxpYyB2b2lkIGxvZ0NvbmZpZ0xkYXAoKSB7CisgICAgICAgIGxvZy5pbmZvKFNDSEVEVUxFUl9OQU1FICsgIiBpcyBlbmFibGVkIHdpdGggY3JvbiBleHByZXNzaW9uOiAiICsgY3JvbkV4cHJlc3Npb24pOworICAgIH0KKworICAgIEBTY2hlZHVsZWQoY3JvbiA9ICIke3N0b2VydW5nc2F1c2t1bmZ0LnNjaGVkdWxpbmctaW1wb3J0LmNyb259IikKKyAgICBwdWJsaWMgdm9pZCBzY2hlZHVsZVRhc2tJbXBvcnRVc2VyTm90aWZpY2F0aW9ucygpIHsKKyAgICAgICAgbG9nLmluZm8oIkV4ZWN1dGluZyIgKyBTQ0hFRFVMRVJfTkFNRSArICIgdGFzazogSW1wb3J0aW5nIGF2YWlsYWJsZSB1c2Vybm90aWZpY2F0aW9ucyBmcm9tIHN0b2VydW5nc2F1c2t1bmZ0LmRlIik7CisgICAgICAgIGltcG9ydFNlcnZpY2UuaW1wb3J0VXNlck5vdGlmaWNhdGlvbnMoKTsKKyAgICAgICAgbG9nLmluZm8oIkZpbmlzaGVkICIgKyBTQ0hFRFVMRVJfTkFNRSArICIgdGFzazogSW1wb3J0aW5nIGF2YWlsYWJsZSB1c2Vybm90aWZpY2F0aW9ucyBmcm9tIHN0b2VydW5nc2F1c2t1bmZ0LmRlIik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYXJpc2ludGVyZmFjZS9jb25maWcvU29hcENsaWVudENvbmZpZy5qYXZhIGIvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYXJpc2ludGVyZmFjZS9jb25maWcvU29hcENsaWVudENvbmZpZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ODg4ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL2NvbmZpZy9Tb2FwQ2xpZW50Q29uZmlnLmphdmEKQEAgLTAsMCArMSwyNSBAQAorcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhcmlzaW50ZXJmYWNlLmNvbmZpZzsKKy8qCitpbXBvcnQgY29tLnN1bi54bWwuaW50ZXJuYWwud3MuZGV2ZWxvcGVyLkpBWEJDb250ZXh0RmFjdG9yeTsKK2ltcG9ydCBmZWlnbi5jb2RlYy5EZWNvZGVyOworaW1wb3J0IGZlaWduLmNvZGVjLkVuY29kZXI7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LmFubm90YXRpb24uQmVhbjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuYW5ub3RhdGlvbi5Db25maWd1cmF0aW9uOworCitAQ29uZmlndXJhdGlvbgorcHVibGljIGNsYXNzIFNvYXBDbGllbnRDb25maWcgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSkFYQkNvbnRleHRGYWN0b3J5IGpheGJGYWN0b3J5ID0gbmV3IEpBWEJDb250ZXh0RmFjdG9yeS5CdWlsZGVyKCkKKyAgICAgICAgICAgIC53aXRoTWFyc2hhbGxlckpBWEJFbmNvZGluZygiVVRGLTgiKQorICAgICAgICAgICAgLndpdGhNYXJzaGFsbGVyU2NoZW1hTG9jYXRpb24oImh0dHA6Ly9hcGlob3N0IGh0dHA6Ly9hcGlob3N0L3NjaGVtYS54c2QiKQorICAgICAgICAgICAgLmJ1aWxkKCk7CisKKyAgICBAQmVhbgorICAgIHB1YmxpYyBFbmNvZGVyIGZlaWduRW5jb2RlcigpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBTT0FQRW5jb2RlcihqYXhiRmFjdG9yeSk7CisgICAgfQorICAgIEBCZWFuCisgICAgcHVibGljIERlY29kZXIgZmVpZ25EZWNvZGVyKCkgeworICAgICAgICByZXR1cm4gbmV3IFNPQVBEZWNvZGVyKGpheGJGYWN0b3J5KTsKKyAgICB9Cit9Ki8KZGlmZiAtLWdpdCBhL1NBUklTLUludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2FyaXNpbnRlcmZhY2UvY29uZmlnL1NvYXBDb25maWd1cmF0aW9uLmphdmEgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL2NvbmZpZy9Tb2FwQ29uZmlndXJhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYjFkODIKLS0tIC9kZXYvbnVsbAorKysgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL2NvbmZpZy9Tb2FwQ29uZmlndXJhdGlvbi5qYXZhCkBAIC0wLDAgKzEsMzAgQEAKKworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhcmlzaW50ZXJmYWNlLmNvbmZpZzsKKworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2FyaXNpbnRlcmZhY2Uuc2VydmljZS5TYXJpc1dlYnNlcnZpY2U7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LmFubm90YXRpb24uQmVhbjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuYW5ub3RhdGlvbi5Db25maWd1cmF0aW9uOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsub3htLmpheGIuSmF4YjJNYXJzaGFsbGVyOworCitAQ29uZmlndXJhdGlvbgorcHVibGljIGNsYXNzIFNvYXBDb25maWd1cmF0aW9uIHsKKworCUBCZWFuCisJcHVibGljIEpheGIyTWFyc2hhbGxlciBtYXJzaGFsbGVyKCkgeworCQlKYXhiMk1hcnNoYWxsZXIgbWFyc2hhbGxlciA9IG5ldyBKYXhiMk1hcnNoYWxsZXIoKTsKKwkJLy8gdGhpcyBwYWNrYWdlIG11c3QgbWF0Y2ggdGhlIHBhY2thZ2UgaW4gdGhlIDxnZW5lcmF0ZVBhY2thZ2U+IHNwZWNpZmllZCBpbgorCQkvLyBwb20ueG1sCisJCW1hcnNoYWxsZXIuc2V0Q29udGV4dFBhdGgoIm9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2FyaXNpbnRlcmZhY2Uud3NkbCIpOworCQlyZXR1cm4gbWFyc2hhbGxlcjsKKwl9CisKKwlAQmVhbgorCXB1YmxpYyBTYXJpc1dlYnNlcnZpY2Ugc2FyaXNXZWJzZXJ2aWNlKEpheGIyTWFyc2hhbGxlciBtYXJzaGFsbGVyKSB7CisJCVNhcmlzV2Vic2VydmljZSBzYXJpc1dlYnNlcnZpY2UgPSBuZXcgU2FyaXNXZWJzZXJ2aWNlKCk7CisvLwkJc2FyaXNXZWJzZXJ2aWNlLnNldERlZmF1bHRVcmkoImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC93cyIpOworCQlzYXJpc1dlYnNlcnZpY2Uuc2V0TWFyc2hhbGxlcihtYXJzaGFsbGVyKTsKKwkJc2FyaXNXZWJzZXJ2aWNlLnNldFVubWFyc2hhbGxlcihtYXJzaGFsbGVyKTsKKwkJcmV0dXJuIHNhcmlzV2Vic2VydmljZTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL1NBUklTLUludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2FyaXNpbnRlcmZhY2UvY29uZmlnL1N3YWdnZXJDb25maWcuamF2YSBiL1NBUklTLUludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2FyaXNpbnRlcmZhY2UvY29uZmlnL1N3YWdnZXJDb25maWcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDMyMmQwCi0tLSAvZGV2L251bGwKKysrIGIvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYXJpc2ludGVyZmFjZS9jb25maWcvU3dhZ2dlckNvbmZpZy5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS5jb25maWc7CisKK2ltcG9ydCBsb21ib2suZXh0ZXJuLmxvZzRqLkxvZzRqMjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5WYWx1ZTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuYW5ub3RhdGlvbi5CZWFuOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5hbm5vdGF0aW9uLkNvbmZpZ3VyYXRpb247CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LmFubm90YXRpb24uUHJvZmlsZTsKK2ltcG9ydCBzcHJpbmdmb3guZG9jdW1lbnRhdGlvbi5zcGkuRG9jdW1lbnRhdGlvblR5cGU7CitpbXBvcnQgc3ByaW5nZm94LmRvY3VtZW50YXRpb24uc3ByaW5nLndlYi5wYXRocy5SZWxhdGl2ZVBhdGhQcm92aWRlcjsKK2ltcG9ydCBzcHJpbmdmb3guZG9jdW1lbnRhdGlvbi5zcHJpbmcud2ViLnBsdWdpbnMuRG9ja2V0OworaW1wb3J0IHNwcmluZ2ZveC5kb2N1bWVudGF0aW9uLnN3YWdnZXIyLmFubm90YXRpb25zLkVuYWJsZVN3YWdnZXIyOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKKworQExvZzRqMgorQENvbmZpZ3VyYXRpb24KK0BFbmFibGVTd2FnZ2VyMgorQFByb2ZpbGUoeyIhdGVzdCIsIiFwcm9kIn0pCitwdWJsaWMgY2xhc3MgU3dhZ2dlckNvbmZpZyB7CisKKyAgICBAVmFsdWUoIiR7c3dhZ2dlci5iYXNlVXJsOn0iKQorICAgIHB1YmxpYyBTdHJpbmcgYmFzZVVybDsKKyAgICBAVmFsdWUoIiR7c3dhZ2dlci5wcm94eVVybDp9IikKKyAgICBwdWJsaWMgU3RyaW5nIHByb3h5VXJsOworCisgICAgQEJlYW4KKyAgICBwdWJsaWMgRG9ja2V0IGFwaShTZXJ2bGV0Q29udGV4dCBzZXJ2bGV0Q29udGV4dCkgeworICAgICAgICByZXR1cm4gbmV3IERvY2tldChEb2N1bWVudGF0aW9uVHlwZS5TV0FHR0VSXzIpLnBhdGhQcm92aWRlcihuZXcgUmVsYXRpdmVQYXRoUHJvdmlkZXIoc2VydmxldENvbnRleHQpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIFN0cmluZyBnZXRBcHBsaWNhdGlvbkJhc2VQYXRoKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBiYXNlVXJsICsgc3VwZXIuZ2V0QXBwbGljYXRpb25CYXNlUGF0aCgpOworICAgICAgICAgICAgfQorICAgICAgICB9KS5ob3N0KHByb3h5VXJsKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL2NvbmZpZy9yYWJiaXRNcS9SYWJiaXRNcUNvbmZpZy5qYXZhIGIvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYXJpc2ludGVyZmFjZS9jb25maWcvcmFiYml0TXEvUmFiYml0TXFDb25maWcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODg0NDMzCi0tLSAvZGV2L251bGwKKysrIGIvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYXJpc2ludGVyZmFjZS9jb25maWcvcmFiYml0TXEvUmFiYml0TXFDb25maWcuamF2YQpAQCAtMCwwICsxLDczIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2FyaXNpbnRlcmZhY2UuY29uZmlnLnJhYmJpdE1xOworCitpbXBvcnQgbG9tYm9rLkRhdGE7CitpbXBvcnQgbG9tYm9rLmV4dGVybi5sb2c0ai5Mb2c0ajI7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5hbXFwLmNvcmUuQmluZGluZ0J1aWxkZXI7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5hbXFwLmNvcmUuRGlyZWN0RXhjaGFuZ2U7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5hbXFwLmNvcmUuUXVldWU7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5hbXFwLnJhYmJpdC5hbm5vdGF0aW9uLkVuYWJsZVJhYmJpdDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmFtcXAucmFiYml0LmNvcmUuUmFiYml0QWRtaW47CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5hbXFwLnJhYmJpdC5jb3JlLlJhYmJpdFRlbXBsYXRlOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuYW5ub3RhdGlvbi5CZWFuOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5hbm5vdGF0aW9uLkNvbmZpZ3VyYXRpb247CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LmFubm90YXRpb24uUHJvZmlsZTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmludGVncmF0aW9uLmFubm90YXRpb24uU2VydmljZUFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmludGVncmF0aW9uLmNoYW5uZWwuRGlyZWN0Q2hhbm5lbDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmludGVncmF0aW9uLmNvbmZpZy5FbmFibGVJbnRlZ3JhdGlvbjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLm1lc3NhZ2luZy5NZXNzYWdlQ2hhbm5lbDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLm1lc3NhZ2luZy5NZXNzYWdlSGFuZGxlcjsKKworaW1wb3J0IGphdmF4LmFubm90YXRpb24uUG9zdENvbnN0cnVjdDsKKworQFByb2ZpbGUoIiF0ZXN0IikKK0BDb25maWd1cmF0aW9uCitATG9nNGoyCitARW5hYmxlUmFiYml0CitARW5hYmxlSW50ZWdyYXRpb24KK0BEYXRhCitwdWJsaWMgY2xhc3MgUmFiYml0TXFDb25maWcgeworCisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgUmFiYml0VGVtcGxhdGUgcmFiYml0VGVtcGxhdGU7CisKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBSYWJiaXRNcVByb3BlcnRpZXMgcmFiYml0TXFQcm9wZXJ0aWVzOworCisgICAgQEJlYW4KKyAgICBwdWJsaWMgTWVzc2FnZUNoYW5uZWwgZmFpbHVyZUltcG9ydENoYW5uZWwoKSB7CisgICAgICAgIHJldHVybiBuZXcgRGlyZWN0Q2hhbm5lbCgpOworICAgIH0KKworICAgIEBQb3N0Q29uc3RydWN0CisgICAgcHVibGljIHZvaWQgYnVpbGRBbGxRdWV1ZXMoKSB7CisgICAgICAgIGxvZy5pbmZvKCJSYWJiaXRNcUNvbmZpZzogQ29uZmlndXJpbmcgYWxsIEV4Y2hhbmdlcyBhbmQgUXVldWVzIik7CisKKyAgICAgICAgUmFiYml0QWRtaW4gYWRtaW4gPSBuZXcgUmFiYml0QWRtaW4ocmFiYml0VGVtcGxhdGUpOworCisgICAgICAgIC8vIE5ldWVyc3RlbGx1bmcgRXhjaGFuZ2UgdW5kIFF1ZXVlcyAoSW1wb3J0KSBmYWxscyBkaWVzZSBuaWNodCB2b3JoYW5kZW4gc2luZCAocGFzc2llcnQgbnVyIGRhbm4hKQorICAgICAgICBEaXJlY3RFeGNoYW5nZSBpbXBvcnRFeGNoYW5nZSA9IG5ldyBEaXJlY3RFeGNoYW5nZShyYWJiaXRNcVByb3BlcnRpZXMuZ2V0SW1wb3J0RXhjaGFuZ2UoKSk7CisgICAgICAgIGxvZy5pbmZvKCIqKioqKioqKioqKioqKiBDb25maWd1cmUgSW1wb3J0IFJhYmJpdE1RICoqKioqKioqKioqKioqIik7CisgICAgICAgIGxvZy5pbmZvKCJJbXBvcnRFeGNoYW5nZTogIiArIHJhYmJpdE1xUHJvcGVydGllcy5nZXRJbXBvcnRFeGNoYW5nZSgpKTsKKyAgICAgICAgYWRtaW4uZGVjbGFyZUV4Y2hhbmdlKGltcG9ydEV4Y2hhbmdlKTsKKyAgICAgICAgUXVldWUgaW1wb3J0UXVldWUgPSBuZXcgUXVldWUocmFiYml0TXFQcm9wZXJ0aWVzLmdldEltcG9ydFF1ZXVlKCkpOworICAgICAgICBsb2cuaW5mbygiSW1wb3J0UXVldWU6ICIgKyByYWJiaXRNcVByb3BlcnRpZXMuZ2V0SW1wb3J0UXVldWUoKSk7CisgICAgICAgIGxvZy5pbmZvKCJJbXBvcnRLZXk6ICAgIiArIHJhYmJpdE1xUHJvcGVydGllcy5nZXRJbXBvcnRLZXkoKSk7CisgICAgICAgIGFkbWluLmRlY2xhcmVRdWV1ZShpbXBvcnRRdWV1ZSk7CisgICAgICAgIGFkbWluLmRlY2xhcmVCaW5kaW5nKEJpbmRpbmdCdWlsZGVyLmJpbmQoaW1wb3J0UXVldWUpLnRvKGltcG9ydEV4Y2hhbmdlKS53aXRoKHJhYmJpdE1xUHJvcGVydGllcy5nZXRJbXBvcnRLZXkoKSkpOworCisgICAgfQorCisgICAgQEJlYW4KKyAgICBAU2VydmljZUFjdGl2YXRvcihpbnB1dENoYW5uZWwgPSAiZmFpbHVyZUltcG9ydENoYW5uZWwiKQorICAgIHB1YmxpYyBNZXNzYWdlSGFuZGxlciBtZXNzYWdlSGFuZGxlcigpIHsKKworICAgICAgICByZXR1cm4gbWVzc2FnZSAtPiByYWJiaXRUZW1wbGF0ZS5jb252ZXJ0QW5kU2VuZChyYWJiaXRNcVByb3BlcnRpZXMuZ2V0SW1wb3J0RXhjaGFuZ2UoKSwKKyAgICAgICAgICAgICAgICByYWJiaXRNcVByb3BlcnRpZXMuZ2V0SW1wb3J0S2V5KCksIG1lc3NhZ2UuZ2V0UGF5bG9hZCgpLCBtZXNzYWdlMSAtPiB7CisgICAgICAgICAgICBtZXNzYWdlMS5nZXRNZXNzYWdlUHJvcGVydGllcygpLmdldEhlYWRlcnMoKS5wdXQoIm1ldGFJZCIsIG1lc3NhZ2UuZ2V0SGVhZGVycygpLmdldCgibWV0YUlkIikpOworICAgICAgICAgICAgbWVzc2FnZTEuZ2V0TWVzc2FnZVByb3BlcnRpZXMoKS5nZXRIZWFkZXJzKCkucHV0KCJkZXNjcmlwdGlvbiIsIG1lc3NhZ2UuZ2V0SGVhZGVycygpLmdldCgiZGVzY3JpcHRpb24iKSk7CisgICAgICAgICAgICBtZXNzYWdlMS5nZXRNZXNzYWdlUHJvcGVydGllcygpLmdldEhlYWRlcnMoKS5wdXQoInNvdXJjZSIsIG1lc3NhZ2UuZ2V0SGVhZGVycygpLmdldCgic291cmNlIikpOworICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2UxOworICAgICAgICB9KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL2NvbmZpZy9yYWJiaXRNcS9SYWJiaXRNcVByb3BlcnRpZXMuamF2YSBiL1NBUklTLUludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2FyaXNpbnRlcmZhY2UvY29uZmlnL3JhYmJpdE1xL1JhYmJpdE1xUHJvcGVydGllcy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYzZjOTMKLS0tIC9kZXYvbnVsbAorKysgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL2NvbmZpZy9yYWJiaXRNcS9SYWJiaXRNcVByb3BlcnRpZXMuamF2YQpAQCAtMCwwICsxLDMwIEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2FyaXNpbnRlcmZhY2UuY29uZmlnLnJhYmJpdE1xOworCitpbXBvcnQgbG9tYm9rLkdldHRlcjsKK2ltcG9ydCBsb21ib2suU2V0dGVyOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdC5jb250ZXh0LnByb3BlcnRpZXMuQ29uZmlndXJhdGlvblByb3BlcnRpZXM7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LmFubm90YXRpb24uQ29uZmlndXJhdGlvbjsKKworQEdldHRlcgorQFNldHRlcgorQENvbmZpZ3VyYXRpb24KK0BDb25maWd1cmF0aW9uUHJvcGVydGllcyhwcmVmaXggPSAic3ByaW5nLnJhYmJpdG1xIiwgaWdub3JlVW5rbm93bkZpZWxkcyA9IHRydWUpCitwdWJsaWMgY2xhc3MgUmFiYml0TXFQcm9wZXJ0aWVzIHsKKworICAgIHByaXZhdGUgU3RyaW5nIGhvc3Q7CisgICAgcHJpdmF0ZSBTdHJpbmcgcG9ydDsKKyAgICBwcml2YXRlIFN0cmluZyB1c2VybmFtZTsKKyAgICBwcml2YXRlIFN0cmluZyBwYXNzd29yZDsKKworICAgIHByaXZhdGUgU3RyaW5nIGltcG9ydEV4Y2hhbmdlOworICAgIHByaXZhdGUgU3RyaW5nIGltcG9ydFF1ZXVlOworICAgIHByaXZhdGUgU3RyaW5nIGltcG9ydEtleTsKKworfQorCisKKworCisKKworCmRpZmYgLS1naXQgYS9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL2NvbnN0YW50cy9Db25zdGFudHMuamF2YSBiL1NBUklTLUludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2FyaXNpbnRlcmZhY2UvY29uc3RhbnRzL0NvbnN0YW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZjBhNjMKLS0tIC9kZXYvbnVsbAorKysgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL2NvbnN0YW50cy9Db25zdGFudHMuamF2YQpAQCAtMCwwICsxLDMyIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxOSBDb250cmlidXRvcnMgdG8gdGhlIEVjbGlwc2UgRm91bmRhdGlvbgorICoKKyAqIFNlZSB0aGUgTk9USUNFIGZpbGUocykgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwKKyAqIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMi4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS5jb25zdGFudHM7CisKK3B1YmxpYyBmaW5hbCBjbGFzcyBDb25zdGFudHMgeworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1JDX1NBUklTID0gIlNBUklTIjsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJSQU5DSF9FTEVDVFJJQ0lUWSA9ICJTIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWT0xUQUdFX0xWTF9MT1cgPSAiTlMiOworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExBTk5FRF9PVVRBR0UgPSAicGxhbm5lZCI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVU5QTEFOTkVEX09VVEFHRSA9ICJ1bnBsYW5uZWQiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNSQ19TVE9FUlVOR1NBVVNLVU5GVF9ERSA9ICJzdG9lcnVuZ3NhdXNrdW5mdC5kZSI7CisKKworICAgIHByaXZhdGUgQ29uc3RhbnRzKCkgeworICAgICAgICAvLyBlbXB0eSBDb25zdHJ1Y3RvciBmb3IgdGhlIHNha2Ugb2YgU09OQVIKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL2NvbnRyb2xsZXIvSW1wb3J0Q29udHJvbGxlci5qYXZhIGIvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYXJpc2ludGVyZmFjZS9jb250cm9sbGVyL0ltcG9ydENvbnRyb2xsZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODVlYWYyCi0tLSAvZGV2L251bGwKKysrIGIvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYXJpc2ludGVyZmFjZS9jb250cm9sbGVyL0ltcG9ydENvbnRyb2xsZXIuamF2YQpAQCAtMCwwICsxLDgzIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxOSBDb250cmlidXRvcnMgdG8gdGhlIEVjbGlwc2UgRm91bmRhdGlvbgorICoKKyAqIFNlZSB0aGUgTk9USUNFIGZpbGUocykgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwKKyAqIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMi4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2FyaXNpbnRlcmZhY2UuY29udHJvbGxlcjsKKworaW1wb3J0IGlvLnN3YWdnZXIuYW5ub3RhdGlvbnMuQXBpT3BlcmF0aW9uOworaW1wb3J0IGlvLnN3YWdnZXIuYW5ub3RhdGlvbnMuQXBpUmVzcG9uc2U7CitpbXBvcnQgaW8uc3dhZ2dlci5hbm5vdGF0aW9ucy5BcGlSZXNwb25zZXM7CitpbXBvcnQgbG9tYm9rLmV4dGVybi5sb2c0ai5Mb2c0ajI7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS5zZXJ2aWNlLkltcG9ydFNlcnZpY2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS5zZXJ2aWNlLlNhcmlzV2Vic2VydmljZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhcmlzaW50ZXJmYWNlLndzZGwuR2V0QWt0dWVsbGVHVlVzSW5mb0FsbGdlbWVpbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhcmlzaW50ZXJmYWNlLndzZGwuR2V0QWt0dWVsbGVHVlVzSW5mb0FsbGdlbWVpblJlc3BvbnNlOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2FyaXNpbnRlcmZhY2Uud3NkbC5HZXRDb3VudHJ5UmVzcG9uc2U7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuaHR0cC5IdHRwU3RhdHVzOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmJpbmQuYW5ub3RhdGlvbi4qOworCitpbXBvcnQgamF2YXgueG1sLmJpbmQuSkFYQkNvbnRleHQ7CitpbXBvcnQgamF2YXgueG1sLmJpbmQuSkFYQkV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZheC54bWwuYmluZC5Vbm1hcnNoYWxsZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOworCitATG9nNGoyCitAUmVzdENvbnRyb2xsZXIKK0BSZXF1ZXN0TWFwcGluZygiL3NhcmlzIikKK3B1YmxpYyBjbGFzcyBJbXBvcnRDb250cm9sbGVyIHsKKworICAgIEBBdXRvd2lyZWQKKyAgICBwcml2YXRlIEltcG9ydFNlcnZpY2UgaW1wb3J0U2VydmljZTsKKworICAgIEBBdXRvd2lyZWQKKyAgICBwcml2YXRlIFNhcmlzV2Vic2VydmljZSBzYXJpc1dlYnNlcnZpY2U7CisKKyAgICBAR2V0TWFwcGluZygiL3VzZXJub3RpZmljYXRpb24taW1wb3J0LXRlc3QiKQorICAgIEBBcGlPcGVyYXRpb24odmFsdWUgPSAiSW1wb3J0IGVpbmVyIGV4dGVybmVuIFN0w7ZydW5nc2luZm9ybWF0aW9uIHZvbiBTdMO2cnVuZ3NhdXNrdW5mdC5kZSB6dSBTSVQiKQorICAgIEBBcGlSZXNwb25zZXModmFsdWUgPSB7CisgICAgICAgICAgICBAQXBpUmVzcG9uc2UoY29kZSA9IDIwMSwgbWVzc2FnZSA9ICJTdMO2cnVuZ3NpbmZvcm1hdGlvbiBlcmZvbGdyZWljaCBpbXBvcnRpZXJ0IiksCisgICAgICAgICAgICBAQXBpUmVzcG9uc2UoY29kZSA9IDUwMCwgbWVzc2FnZSA9ICJLb25udGUgbmljaHQgZHVyY2hnZWbDvGhydCB3ZXJkZW4iKQorICAgIH0pCisgICAgQFJlc3BvbnNlU3RhdHVzKEh0dHBTdGF0dXMuT0spCisgICAgcHVibGljIHZvaWQgaW1wb3J0VXNlck5vdGlmaWNhdGlvbigpIHsKKyAgICAgICAgaW1wb3J0U2VydmljZS5pbXBvcnRVc2VyTm90aWZpY2F0aW9ucygpOworICAgIH0KKworICAgIEBHZXRNYXBwaW5nKCIvc29hcC10ZXN0IikKKyAgICBAQXBpT3BlcmF0aW9uKHZhbHVlID0gIkltcG9ydCB2b24gU3TDtnJ1bmdzaW5mb3JtYXRpb25lbiB2b24gU0FSSVMgenUgU0lUIikKKyAgICBAQXBpUmVzcG9uc2VzKHZhbHVlID0geworICAgICAgICAgICAgQEFwaVJlc3BvbnNlKGNvZGUgPSAyMDEsIG1lc3NhZ2UgPSAiU3TDtnJ1bmdzaW5mb3JtYXRpb24gZXJmb2xncmVpY2ggaW1wb3J0aWVydCIpLAorICAgICAgICAgICAgQEFwaVJlc3BvbnNlKGNvZGUgPSA1MDAsIG1lc3NhZ2UgPSAiS29ubnRlIG5pY2h0IGR1cmNoZ2Vmw7xocnQgd2VyZGVuIikKKyAgICB9KQorICAgIEBSZXNwb25zZVN0YXR1cyhIdHRwU3RhdHVzLk9LKQorICAgIHB1YmxpYyB2b2lkIHRlc3RTb2FwKCkgdGhyb3dzIEpBWEJFeGNlcHRpb24geworICAgICAgICBHZXRDb3VudHJ5UmVzcG9uc2UgcmVzcG9uc2UgPSBzYXJpc1dlYnNlcnZpY2UuZ2V0Q291bnRyeSgiU3BhaW4iKTsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKHJlc3BvbnNlLmdldENvdW50cnkoKS5nZXRDdXJyZW5jeSgpKTsKKyAgICB9CisKKyAgICBAR2V0TWFwcGluZygiL2ltcG9ydEZvcmVpZ25GYWlsdXJlcy10ZXN0IikKKyAgICBAQXBpT3BlcmF0aW9uKHZhbHVlID0gIkltcG9ydCB2b24gU3TDtnJ1bmdzaW5mb3JtYXRpb25lbiB2b24gU0FSSVMgenUgU0lUIikKKyAgICBAQXBpUmVzcG9uc2VzKHZhbHVlID0geworICAgICAgICAgICAgQEFwaVJlc3BvbnNlKGNvZGUgPSAyMDEsIG1lc3NhZ2UgPSAiU3TDtnJ1bmdzaW5mb3JtYXRpb24gZXJmb2xncmVpY2ggaW1wb3J0aWVydCIpLAorICAgICAgICAgICAgQEFwaVJlc3BvbnNlKGNvZGUgPSA1MDAsIG1lc3NhZ2UgPSAiS29ubnRlIG5pY2h0IGR1cmNoZ2Vmw7xocnQgd2VyZGVuIikKKyAgICB9KQorICAgIEBSZXNwb25zZVN0YXR1cyhIdHRwU3RhdHVzLk9LKQorICAgIHB1YmxpYyB2b2lkIGltcG9ydEZvcmVpZ25GYWlsdXJlcygpIHRocm93cyBKQVhCRXhjZXB0aW9uIHsKKworICAgICAgICBpbXBvcnRTZXJ2aWNlLmltcG9ydEZvcmVpZ25GYWlsdXJlcygpOworICAgICAgICBHZXRDb3VudHJ5UmVzcG9uc2UgcmVzcG9uc2UgPSBzYXJpc1dlYnNlcnZpY2UuZ2V0Q291bnRyeSgiU3BhaW4iKTsKKyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKHJlc3BvbnNlLmdldENvdW50cnkoKS5nZXRDdXJyZW5jeSgpKTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL1NBUklTLUludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2FyaXNpbnRlcmZhY2UvZHRvcy9GYWlsdXJlSW5mb3JtYXRpb25EdG8uamF2YSBiL1NBUklTLUludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2FyaXNpbnRlcmZhY2UvZHRvcy9GYWlsdXJlSW5mb3JtYXRpb25EdG8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGI3MzJiCi0tLSAvZGV2L251bGwKKysrIGIvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYXJpc2ludGVyZmFjZS9kdG9zL0ZhaWx1cmVJbmZvcm1hdGlvbkR0by5qYXZhCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxOSBDb250cmlidXRvcnMgdG8gdGhlIEVjbGlwc2UgRm91bmRhdGlvbgorICoKKyAqIFNlZSB0aGUgTk9USUNFIGZpbGUocykgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwKKyAqIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMi4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2FyaXNpbnRlcmZhY2UuZHRvczsKKworaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5hbm5vdGF0aW9uLkpzb25Gb3JtYXQ7CitpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmFubm90YXRpb24uSnNvblByb3BlcnR5OworaW1wb3J0IGxvbWJvay5EYXRhOworCitpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7CitpbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuVVVJRDsKKworQERhdGEKK3B1YmxpYyBjbGFzcyBGYWlsdXJlSW5mb3JtYXRpb25EdG8gaW1wbGVtZW50cyBTZXJpYWxpemFibGUgeworICAgIEBKc29uUHJvcGVydHkoImlkIikKKyAgICBwcml2YXRlIFVVSUQgdXVpZDsKKyAgICBwcml2YXRlIFN0cmluZyB0aXRsZTsKKyAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsKKyAgICBwcml2YXRlIExvbmcgdmVyc2lvbk51bWJlcjsKKyAgICBwcml2YXRlIFN0cmluZyByZXNwb25zaWJpbGl0eTsKKyAgICBwcml2YXRlIFN0cmluZyBpbnRlcm5FeHRlcm47CisgICAgcHJpdmF0ZSBTdHJpbmcgdm9sdGFnZUxldmVsOworICAgIHByaXZhdGUgU3RyaW5nIHByZXNzdXJlTGV2ZWw7CisKKyAgICBASnNvbkZvcm1hdChzaGFwZSA9IEpzb25Gb3JtYXQuU2hhcGUuU1RSSU5HLCBwYXR0ZXJuID0gInl5eXktTU0tZGQnVCdISDptbTpzcy5TU1MnWiciKQorICAgIHByaXZhdGUgRGF0ZSBmYWlsdXJlQmVnaW47CisKKyAgICBASnNvbkZvcm1hdChzaGFwZSA9IEpzb25Gb3JtYXQuU2hhcGUuU1RSSU5HLCBwYXR0ZXJuID0gInl5eXktTU0tZGQnVCdISDptbTpzcy5TU1MnWiciKQorICAgIHByaXZhdGUgRGF0ZSBmYWlsdXJlRW5kUGxhbm5lZDsKKworICAgIEBKc29uRm9ybWF0KHNoYXBlID0gSnNvbkZvcm1hdC5TaGFwZS5TVFJJTkcsIHBhdHRlcm4gPSAieXl5eS1NTS1kZCdUJ0hIOm1tOnNzLlNTUydaJyIpCisgICAgcHJpdmF0ZSBEYXRlIGZhaWx1cmVFbmRSZXN1cHBsaWVkOworCisgICAgcHJpdmF0ZSBTdHJpbmcgcG9zdGNvZGU7CisgICAgcHJpdmF0ZSBTdHJpbmcgY2l0eTsKKyAgICBwcml2YXRlIFN0cmluZyBkaXN0cmljdDsKKyAgICBwcml2YXRlIFN0cmluZyBzdHJlZXQ7CisgICAgcHJpdmF0ZSBTdHJpbmcgaG91c2VudW1iZXI7CisgICAgcHJpdmF0ZSBTdHJpbmcgc3RhdGlvbklkOworICAgIHByaXZhdGUgU3RyaW5nIHN0YXRpb25EZXNjcmlwdGlvbjsKKyAgICBwcml2YXRlIFN0cmluZyBzdGF0aW9uQ29vcmRzOworICAgIHByaXZhdGUgQmlnRGVjaW1hbCBsb25naXR1ZGU7CisgICAgcHJpdmF0ZSBCaWdEZWNpbWFsIGxhdGl0dWRlOworICAgIHByaXZhdGUgU3RyaW5nIG9iamVjdFJlZmVyZW5jZUV4dGVybmFsU3lzdGVtOworICAgIHByaXZhdGUgU3RyaW5nIHB1YmxpY2F0aW9uU3RhdHVzOworICAgIHByaXZhdGUgU3RyaW5nIHB1YmxpY2F0aW9uRnJlZXRleHQ7CisgICAgcHJpdmF0ZSBCb29sZWFuIGNvbmRlbnNlZDsKKyAgICBwcml2YXRlIExvbmcgY29uZGVuc2VkQ291bnQ7CisKKyAgICBASnNvbkZvcm1hdChzaGFwZSA9IEpzb25Gb3JtYXQuU2hhcGUuU1RSSU5HLCBwYXR0ZXJuID0gInl5eXktTU0tZGQnVCdISDptbTpzcy5TU1MnWiciKQorICAgIHByaXZhdGUgRGF0ZSBjcmVhdGVEYXRlOworICAgIHByaXZhdGUgU3RyaW5nIGNyZWF0ZVVzZXI7CisKKyAgICBASnNvbkZvcm1hdChzaGFwZSA9IEpzb25Gb3JtYXQuU2hhcGUuU1RSSU5HLCBwYXR0ZXJuID0gInl5eXktTU0tZGQnVCdISDptbTpzcy5TU1MnWiciKQorICAgIHByaXZhdGUgRGF0ZSBtb2REYXRlOworICAgIHByaXZhdGUgU3RyaW5nIG1vZFVzZXI7CisKKyAgICBwcml2YXRlIFVVSUQgZmFpbHVyZUNsYXNzaWZpY2F0aW9uSWQ7CisgICAgcHJpdmF0ZSBTdHJpbmcgZmFpbHVyZUNsYXNzaWZpY2F0aW9uOworCisgICAgcHJpdmF0ZSBVVUlEIGZhaWx1cmVUeXBlSWQ7CisgICAgcHJpdmF0ZSBTdHJpbmcgZmFpbHVyZVR5cGU7CisKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNQbGFubmVkOworCisgICAgcHJpdmF0ZSBVVUlEIHN0YXR1c0ludGVybklkOworICAgIHByaXZhdGUgU3RyaW5nIHN0YXR1c0ludGVybjsKKworICAgIHByaXZhdGUgVVVJRCBzdGF0dXNFeHRlcm5JZDsKKyAgICBwcml2YXRlIFN0cmluZyBzdGF0dXNFeHRlcm47CisKKyAgICBwcml2YXRlIFVVSUQgYnJhbmNoSWQ7CisgICAgcHJpdmF0ZSBTdHJpbmcgYnJhbmNoOworICAgIHByaXZhdGUgU3RyaW5nIGJyYW5jaERlc2NyaXB0aW9uOworICAgIHByaXZhdGUgU3RyaW5nIGJyYW5jaENvbG9yQ29kZTsKKworICAgIHByaXZhdGUgVVVJRCByYWRpdXNJZDsKKyAgICBwcml2YXRlIExvbmcgcmFkaXVzOworCisgICAgcHJpdmF0ZSBVVUlEIGV4cGVjdGVkUmVhc29uSWQ7CisgICAgcHJpdmF0ZSBTdHJpbmcgZXhwZWN0ZWRSZWFzb25UZXh0OworCisgICAgcHJpdmF0ZSBVVUlEIGZhaWx1cmVJbmZvcm1hdGlvbkNvbmRlbnNlZElkOworCisgICAgLy8gMDogTGF0CisgICAgLy8gMTogTG5nCisgICAgcHJpdmF0ZSBMaXN0PEFycmF5TGlzdDxCaWdEZWNpbWFsPj4gYWRkcmVzc1BvbHlnb25Qb2ludHM7CisKKyAgICBwcml2YXRlIExpc3Q8VVVJRD4gZGlzdHJpYnV0aW9uR3JvdXBVdWlkczsKKworICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IHB1YmxpY2F0aW9uQ2hhbm5lbHM7CisKK30KZGlmZiAtLWdpdCBhL1NBUklTLUludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2FyaXNpbnRlcmZhY2UvZHRvcy9Gb3JlaWduRmFpbHVyZURhdGFEdG8uamF2YSBiL1NBUklTLUludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2FyaXNpbnRlcmZhY2UvZHRvcy9Gb3JlaWduRmFpbHVyZURhdGFEdG8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjBiZjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYXJpc2ludGVyZmFjZS9kdG9zL0ZvcmVpZ25GYWlsdXJlRGF0YUR0by5qYXZhCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDE5IENvbnRyaWJ1dG9ycyB0byB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uCisgKgorICogU2VlIHRoZSBOT1RJQ0UgZmlsZShzKSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbAorICogaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2LiAyLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS5kdG9zOworCitpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmFubm90YXRpb24uSnNvbkZvcm1hdDsKK2ltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uYW5ub3RhdGlvbi5Kc29uUHJvcGVydHk7CitpbXBvcnQgbG9tYm9rLkRhdGE7CisKK2ltcG9ydCBqYXZheC52YWxpZGF0aW9uLmNvbnN0cmFpbnRzLk1heDsKK2ltcG9ydCBqYXZheC52YWxpZGF0aW9uLmNvbnN0cmFpbnRzLk1pbjsKK2ltcG9ydCBqYXZheC52YWxpZGF0aW9uLmNvbnN0cmFpbnRzLk5vdE51bGw7CitpbXBvcnQgamF2YXgudmFsaWRhdGlvbi5jb25zdHJhaW50cy5QYXR0ZXJuOworaW1wb3J0IGphdmF4LnZhbGlkYXRpb24uY29uc3RyYWludHMuU2l6ZTsKK2ltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKK2ltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKKworQERhdGEKK3B1YmxpYyBjbGFzcyBGb3JlaWduRmFpbHVyZURhdGFEdG8gaW1wbGVtZW50cyBTZXJpYWxpemFibGUgeworCisgICAgcHJpdmF0ZSBib29sZWFuIGlzQXV0b3B1Ymxpc2g7CisKKyAgICBATm90TnVsbAorICAgIHByaXZhdGUgYm9vbGVhbiBpc1BsYW5uZWQ7CisKKyAgICBASnNvblByb3BlcnR5KCJkZXNjcmlwdGlvbiIpCisgICAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb247CisKKyAgICBATm90TnVsbAorICAgIEBQYXR0ZXJuKHJlZ2V4cCA9ICJeJHwoU3xXfEZ8R3xUS3xTVHxPUykiKQorICAgIHByaXZhdGUgU3RyaW5nIGJyYW5jaDsKKworICAgIEBQYXR0ZXJuKHJlZ2V4cD0iXiR8KE5TfE1TfEhTKSIpCisgICAgcHJpdmF0ZSBTdHJpbmcgdm9sdGFnZUxldmVsOworCisgICAgQFBhdHRlcm4ocmVnZXhwPSJeJHwoTkR8TUR8SEQpIikKKyAgICBwcml2YXRlIFN0cmluZyBwcmVzc3VyZUxldmVsOworCisgICAgQE5vdE51bGwKKyAgICBASnNvbkZvcm1hdChzaGFwZSA9IEpzb25Gb3JtYXQuU2hhcGUuU1RSSU5HLCBwYXR0ZXJuID0gInl5eXktTU0tZGQnVCdISDptbTpzcy5TU1MnWiciKQorICAgIHByaXZhdGUgRGF0ZSBmYWlsdXJlQmVnaW47CisKKyAgICBASnNvbkZvcm1hdChzaGFwZSA9IEpzb25Gb3JtYXQuU2hhcGUuU1RSSU5HLCBwYXR0ZXJuID0gInl5eXktTU0tZGQnVCdISDptbTpzcy5TU1MnWiciKQorICAgIHByaXZhdGUgRGF0ZSBmYWlsdXJlRW5kUGxhbm5lZDsKKworICAgIEBKc29uRm9ybWF0KHNoYXBlID0gSnNvbkZvcm1hdC5TaGFwZS5TVFJJTkcsIHBhdHRlcm4gPSAieXl5eS1NTS1kZCdUJ0hIOm1tOnNzLlNTUydaJyIpCisgICAgcHJpdmF0ZSBEYXRlIGZhaWx1cmVFbmRSZXN1cHBsaWVkOworCisgICAgQFNpemUobWF4PTEwKQorICAgIEBQYXR0ZXJuKHJlZ2V4cD0iXiR8W0EtWmEtejAtOV8vLV0rIikKKyAgICBwcml2YXRlIFN0cmluZyBwb3N0Y29kZTsKKworICAgIEBTaXplKG1heD0yMDApCisgICAgQFBhdHRlcm4ocmVnZXhwPSJeJHxbQS1aYS16MC05w4TDpMOWw7bDnMO8w59cXHNfLygpLV0rIikKKyAgICBwcml2YXRlIFN0cmluZyBjaXR5OworCisgICAgQFNpemUobWF4PTIwMCkKKyAgICBAUGF0dGVybihyZWdleHA9Il4kfFtBLVphLXowLTnDhMOkw5bDtsOcw7zDn1xcc18vKCktXSsiKQorICAgIHByaXZhdGUgU3RyaW5nIGRpc3RyaWN0OworCisgICAgQFNpemUobWF4PTIwMCkKKyAgICBAUGF0dGVybihyZWdleHA9Il4kfFtBLVphLXowLTnDhMOkw5bDtsOcw7zDn1xcc18vKCktXSsiKQorICAgIHByaXZhdGUgU3RyaW5nIHN0cmVldDsKKworICAgIEBTaXplKG1heD0xMCkKKyAgICBAUGF0dGVybihyZWdleHA9Il4kfFtBLVphLXowLTnDhMOkw5bDtsOcw7zDn1xcc18vKCktXSsiKQorICAgIHByaXZhdGUgU3RyaW5nIGhvdXNlbnVtYmVyOworCisgICAgQFNpemUobWF4PTIwMCkKKyAgICBAUGF0dGVybihyZWdleHA9Il4kfFtBLVphLXowLTnDhMOkw5bDtsOcw7zDn1xcc18vKCktXSsiKQorICAgIHByaXZhdGUgU3RyaW5nIHN0YXRpb25JZDsKKworICAgIEBTaXplKG1heD0yMDApCisgICAgQFBhdHRlcm4ocmVnZXhwPSJeJHxbQS1aYS16MC05w4TDpMOWw7bDnMO8w59cXHNfLygpLC47Oi1dKyIpCisgICAgcHJpdmF0ZSBTdHJpbmcgc3RhdGlvbkRlc2NyaXB0aW9uOworCisgICAgcHJpdmF0ZSBCaWdEZWNpbWFsIGxvbmdpdHVkZTsKKyAgICBwcml2YXRlIEJpZ0RlY2ltYWwgbGF0aXR1ZGU7CisKKyAgICBATWluKDBMKQorICAgIEBNYXgoMTAwMDAwTCkKKyAgICBwcml2YXRlIExvbmcgcmFkaXVzSW5NZXRlcnM7Cit9CmRpZmYgLS1naXQgYS9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL2R0b3MvRm9yZWlnbkZhaWx1cmVNZXNzYWdlRHRvLmphdmEgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL2R0b3MvRm9yZWlnbkZhaWx1cmVNZXNzYWdlRHRvLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RjZWVmMQotLS0gL2Rldi9udWxsCisrKyBiL1NBUklTLUludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2FyaXNpbnRlcmZhY2UvZHRvcy9Gb3JlaWduRmFpbHVyZU1lc3NhZ2VEdG8uamF2YQpAQCAtMCwwICsxLDQ1IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxOSBDb250cmlidXRvcnMgdG8gdGhlIEVjbGlwc2UgRm91bmRhdGlvbgorICoKKyAqIFNlZSB0aGUgTk9USUNFIGZpbGUocykgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwKKyAqIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMi4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2FyaXNpbnRlcmZhY2UuZHRvczsKKworaW1wb3J0IGxvbWJvay5EYXRhOworCitpbXBvcnQgamF2YXgudmFsaWRhdGlvbi5WYWxpZDsKK2ltcG9ydCBqYXZheC52YWxpZGF0aW9uLmNvbnN0cmFpbnRzLk5vdE51bGw7CitpbXBvcnQgamF2YXgudmFsaWRhdGlvbi5jb25zdHJhaW50cy5QYXR0ZXJuOworaW1wb3J0IGphdmF4LnZhbGlkYXRpb24uY29uc3RyYWludHMuU2l6ZTsKK2ltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKKworQERhdGEKK3B1YmxpYyBjbGFzcyBGb3JlaWduRmFpbHVyZU1lc3NhZ2VEdG8gaW1wbGVtZW50cyBTZXJpYWxpemFibGUgeworCisgICAgQE5vdE51bGwKKyAgICBAU2l6ZShtYXg9MjU2KQorICAgIEBQYXR0ZXJuKHJlZ2V4cD0iW0EtWmEtejAtOVxcc18vOi4tXSsiKQorICAgIHByaXZhdGUgU3RyaW5nIG1ldGFJZDsKKworICAgIEBTaXplKG1heD0yNTYpCisgICAgQFBhdHRlcm4ocmVnZXhwPSJeJHxbQS1aYS16MC05XFxzXy8oKSwuOzotXSsiKQorICAgIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOworCisgICAgQE5vdE51bGwKKyAgICBAU2l6ZShtYXg9MTAwKQorICAgIEBQYXR0ZXJuKHJlZ2V4cD0iW0EtWmEtejAtOVxcc18vKCksLjs6LV0rIikKKyAgICBwcml2YXRlIFN0cmluZyBzb3VyY2U7CisKKyAgICBATm90TnVsbAorICAgIHByaXZhdGUgQFZhbGlkIEZvcmVpZ25GYWlsdXJlRGF0YUR0byBwYXlsb2FkOworCit9CmRpZmYgLS1naXQgYS9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL2R0b3MvU3RvZXJ1bmdzYXVza3VuZnRPdXRhZ2UuamF2YSBiL1NBUklTLUludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2FyaXNpbnRlcmZhY2UvZHRvcy9TdG9lcnVuZ3NhdXNrdW5mdE91dGFnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNGNmOTMKLS0tIC9kZXYvbnVsbAorKysgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL2R0b3MvU3RvZXJ1bmdzYXVza3VuZnRPdXRhZ2UuamF2YQpAQCAtMCwwICsxLDI3IEBACitwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2FyaXNpbnRlcmZhY2UuZHRvczsKKworaW1wb3J0IGxvbWJvay5EYXRhOworCitpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7CisKK0BEYXRhCitwdWJsaWMgY2xhc3MgU3RvZXJ1bmdzYXVza3VuZnRPdXRhZ2UgaW1wbGVtZW50cyBTZXJpYWxpemFibGUgeworCisgICAgcHJpdmF0ZSBTdHJpbmcgaWQ7CisgICAgcHJpdmF0ZSBTdHJpbmcgb3BlcmF0b3JJRDsKKyAgICBwcml2YXRlIFN0cmluZyB0eXBlOworICAgIHByaXZhdGUgSW50ZWdlciBvcmlnaW47CisgICAgcHJpdmF0ZSBJbnRlZ2VyIGdlb1R5cGU7CisgICAgcHJpdmF0ZSBTdHJpbmcgZGF0ZTsKKyAgICBwcml2YXRlIFN0cmluZyBlc3RpbWF0ZWRFbmRpbmc7CisgICAgcHJpdmF0ZSBTdHJpbmcgcG9zdGNvZGU7CisgICAgcHJpdmF0ZSBTdHJpbmcgY2l0eTsKKyAgICBwcml2YXRlIFN0cmluZyBkaXN0cmljdDsKKyAgICBwcml2YXRlIFN0cmluZyBhZ3M7CisgICAgcHJpdmF0ZSBJbnRlZ2VyIHJhZGl1czsKKyAgICBwcml2YXRlIFN0cmluZyBjb29yZGluYXRlczsKKyAgICBwcml2YXRlIFN0cmluZyBsaXZlSW5mbzsKKyAgICBwcml2YXRlIEludGVnZXIgc29jaWFsOworICAgIHByaXZhdGUgU3RyaW5nIHNvY2lhbFRleHQ7CisKK30KZGlmZiAtLWdpdCBhL1NBUklTLUludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2FyaXNpbnRlcmZhY2UvZHRvcy9TdG9lcnVuZ3NhdXNrdW5mdFVzZXJOb3RpZmljYXRpb24uamF2YSBiL1NBUklTLUludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2FyaXNpbnRlcmZhY2UvZHRvcy9TdG9lcnVuZ3NhdXNrdW5mdFVzZXJOb3RpZmljYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTZkZTYzCi0tLSAvZGV2L251bGwKKysrIGIvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYXJpc2ludGVyZmFjZS9kdG9zL1N0b2VydW5nc2F1c2t1bmZ0VXNlck5vdGlmaWNhdGlvbi5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS5kdG9zOworCitpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmFubm90YXRpb24uSnNvbklnbm9yZVByb3BlcnRpZXM7CitpbXBvcnQgbG9tYm9rLkRhdGE7CisKK2ltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKKworQEpzb25JZ25vcmVQcm9wZXJ0aWVzKGlnbm9yZVVua25vd24gPSB0cnVlKQorQERhdGEKK3B1YmxpYyBjbGFzcyBTdG9lcnVuZ3NhdXNrdW5mdFVzZXJOb3RpZmljYXRpb24gaW1wbGVtZW50cyBTZXJpYWxpemFibGUgeworCisgICAgcHJpdmF0ZSBTdHJpbmcgaWQ7CisgICAgcHJpdmF0ZSBTdHJpbmcgZGF0ZTsKKyAgICBwcml2YXRlIFN0cmluZyBwb3N0Y29kZTsKKyAgICBwcml2YXRlIFN0cmluZyBjaXR5OworICAgIHByaXZhdGUgU3RyaW5nIHN0cmVldDsKKyAgICBwcml2YXRlIFN0cmluZyBob3VzZU5vOworICAgIHByaXZhdGUgU3RyaW5nIGRpc3RyaWN0OworICAgIHByaXZhdGUgU3RyaW5nIGFnczsKKyAgICBwcml2YXRlIFN0cmluZyBsYXQ7CisgICAgcHJpdmF0ZSBTdHJpbmcgbG5nOworICAgIHByaXZhdGUgU3RyaW5nIGNvbW1lbnQ7CisKK30KZGlmZiAtLWdpdCBhL1NBUklTLUludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2FyaXNpbnRlcmZhY2UvZXhjZXB0aW9ucy9JbnRlcm5hbFNlcnZlckVycm9yRXhjZXB0aW9uLmphdmEgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL2V4Y2VwdGlvbnMvSW50ZXJuYWxTZXJ2ZXJFcnJvckV4Y2VwdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkYjQ5YTQKLS0tIC9kZXYvbnVsbAorKysgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL2V4Y2VwdGlvbnMvSW50ZXJuYWxTZXJ2ZXJFcnJvckV4Y2VwdGlvbi5qYXZhCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDE5IENvbnRyaWJ1dG9ycyB0byB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uCisgKgorICogU2VlIHRoZSBOT1RJQ0UgZmlsZShzKSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbAorICogaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2LiAyLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS5leGNlcHRpb25zOworCitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5odHRwLkh0dHBTdGF0dXM7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLlJlc3BvbnNlU3RhdHVzOworCitAUmVzcG9uc2VTdGF0dXMoY29kZSA9IEh0dHBTdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorcHVibGljIGNsYXNzIEludGVybmFsU2VydmVyRXJyb3JFeGNlcHRpb24gZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9ueworICAgIHB1YmxpYyBJbnRlcm5hbFNlcnZlckVycm9yRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlKSB7CisgICAgICAgIHN1cGVyKG1lc3NhZ2UpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NBUklTLUludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2FyaXNpbnRlcmZhY2UvbWFwcGVyL1NBUklTTWFwcGVyLmphdmEgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL21hcHBlci9TQVJJU01hcHBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNTI3MzYKLS0tIC9kZXYvbnVsbAorKysgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL21hcHBlci9TQVJJU01hcHBlci5qYXZhCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDE5IENvbnRyaWJ1dG9ycyB0byB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uCisgKgorICogU2VlIHRoZSBOT1RJQ0UgZmlsZShzKSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbAorICogaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2LiAyLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS5tYXBwZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhcmlzaW50ZXJmYWNlLmNvbnN0YW50cy5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS5kdG9zLkZhaWx1cmVJbmZvcm1hdGlvbkR0bzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhcmlzaW50ZXJmYWNlLmR0b3MuRm9yZWlnbkZhaWx1cmVEYXRhRHRvOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2FyaXNpbnRlcmZhY2UuZHRvcy5TdG9lcnVuZ3NhdXNrdW5mdE91dGFnZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhcmlzaW50ZXJmYWNlLmR0b3MuU3RvZXJ1bmdzYXVza3VuZnRVc2VyTm90aWZpY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2FyaXNpbnRlcmZhY2Uud3NkbC5WaWV3R2VwbGFudGVWVTsKK2ltcG9ydCBvcmcubWFwc3RydWN0LkFmdGVyTWFwcGluZzsKK2ltcG9ydCBvcmcubWFwc3RydWN0Lk1hcHBlcjsKK2ltcG9ydCBvcmcubWFwc3RydWN0Lk1hcHBpbmc7CitpbXBvcnQgb3JnLm1hcHN0cnVjdC5NYXBwaW5nVGFyZ2V0OworaW1wb3J0IG9yZy5tYXBzdHJ1Y3QuTWFwcGluZ3M7CitpbXBvcnQgb3JnLm1hcHN0cnVjdC5OYW1lZDsKK2ltcG9ydCBvcmcubWFwc3RydWN0LlJlcG9ydGluZ1BvbGljeTsKKworaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXI7CitpbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47CisKK0BNYXBwZXIoY29tcG9uZW50TW9kZWwgPSAic3ByaW5nIiwgdW5tYXBwZWRUYXJnZXRQb2xpY3kgPSBSZXBvcnRpbmdQb2xpY3kuSUdOT1JFKQorcHVibGljIGludGVyZmFjZSBTQVJJU01hcHBlciB7CisKKyAgICBQYXR0ZXJuIFNUUkVFVF9IT1VTRU5VTUJFUl9QQVRURVJOID0gUGF0dGVybi5jb21waWxlKCIoXlxcRCspKFxcZC4qKSIpOworCisgICAgQE1hcHBpbmdzKHsKKyAgICAgICAgICAgIEBNYXBwaW5nKHRhcmdldCA9ICJkZXNjcmlwdGlvbiIsIHNvdXJjZSA9ICJiZW1lcmt1bmciKSwKKyAgICAgICAgICAgIEBNYXBwaW5nKHRhcmdldCA9ICJmYWlsdXJlQmVnaW4iLCBzb3VyY2UgPSAiYmVnaW5uIiwgZGF0ZUZvcm1hdCA9ICJ5eXl5LU1NLWRkJ1QnSEg6bW06c3MuU1NTJ1onIiksCisgICAgICAgICAgICBATWFwcGluZyh0YXJnZXQgPSAiZmFpbHVyZUVuZFBsYW5uZWQiLCBzb3VyY2UgPSAiZW5kZSIpLAorICAgICAgICAgICAgQE1hcHBpbmcodGFyZ2V0ID0gInBvc3Rjb2RlIiwgc291cmNlID0gInBseiIpLAorICAgICAgICAgICAgQE1hcHBpbmcodGFyZ2V0ID0gImNpdHkiLCBzb3VyY2UgPSAib3J0IiksCisgICAgICAgICAgICBATWFwcGluZyh0YXJnZXQgPSAiZGlzdHJpY3QiLCBzb3VyY2UgPSAib3J0c3RlaWwiKSwKKyAgICAgICAgICAgIEBNYXBwaW5nKHRhcmdldCA9ICJzdHJlZXQiLCBzb3VyY2UgPSAic3RyYXNzZSIpLAorICAgICAgICAgICAgQE1hcHBpbmcodGFyZ2V0ID0gImhvdXNlbnVtYmVyIiwgc291cmNlID0gImhhdXNudW1tZXJuIiksIC8vVE9ETyBNZWhyZXJlIEhhdXNudW1tZXJuIG3DtmdsaWNoCisgICAgICAgICAgICBATWFwcGluZyh0YXJnZXQgPSAiYnJhbmNoIiwgc291cmNlID0gInNwYXJ0ZSIsIHF1YWxpZmllZEJ5TmFtZSA9ICJicmFuY2hNYXBwZXJUb0ZvcmVpZ25GYWlsdXJlRGF0YUR0byIpLAorICAgIH0pCisgICAgRm9yZWlnbkZhaWx1cmVEYXRhRHRvIHRvRm9yZWlnbkZhaWx1cmVEYXRhRHRvKFZpZXdHZXBsYW50ZVZVIHNyY0VudGl0eSk7CisKKworICAgIEBBZnRlck1hcHBpbmcKKyAgICBkZWZhdWx0IHZvaWQgYWZ0ZXJNYXBwaW5nUHJvY2VzcyhWaWV3R2VwbGFudGVWVSBzcmNFbnRpdHksIEBNYXBwaW5nVGFyZ2V0IEZvcmVpZ25GYWlsdXJlRGF0YUR0byB0YXJnZXRFbnRpdHkpeworICAgICAgICB0YXJnZXRFbnRpdHkuc2V0UmFkaXVzSW5NZXRlcnMoMEwpOworCisgICAgICAgIHRhcmdldEVudGl0eS5zZXRWb2x0YWdlTGV2ZWwoQ29uc3RhbnRzLlZPTFRBR0VfTFZMX0xPVyk7IC8vVE9ETyBhYmjDpG5naWcgdm9uIFNwYXJ0ZSwgcy4gU3BhcnRlIFRPRE8KKyAgICB9CisKKyAgICBATmFtZWQoImJyYW5jaE1hcHBlclRvRm9yZWlnbkZhaWx1cmVEYXRhRHRvIikKKyAgICBkZWZhdWx0IFN0cmluZyBicmFuY2hNYXBwZXJUb0ZvcmVpZ25GYWlsdXJlRGF0YUR0byhTdHJpbmcgc3BhcnRlVmlld0dlcGxhbnRlVlUpIHsKKyAgICAgICAgaWYgKHNwYXJ0ZVZpZXdHZXBsYW50ZVZVID09IG51bGwgfHwgc3BhcnRlVmlld0dlcGxhbnRlVlUuaXNFbXB0eSgpKSByZXR1cm4gIiI7CisgICAgICAgIC8vVE9ETyBsb2dpayBpbXBsZW1lbnRpZXJlbi4gV2FzIHNpbmQgbcO2Z2xpY2hlIFNwYXJ0ZW4tV2VydGUgdm9uIFNBUklTPworICAgICAgICByZXR1cm4gc3BhcnRlVmlld0dlcGxhbnRlVlU7CisgICAgfQorCisgICAgQE5hbWVkKCJob3VzZW51bWJlck1hcHBlclRvRm9yZWlnbkZhaWx1cmVEYXRhRHRvIikKKyAgICBkZWZhdWx0IFN0cmluZyBob3VzZW51bWJlck1hcHBlclRvRm9yZWlnbkZhaWx1cmVEYXRhRHRvKFN0cmluZyBzdHJlZXRGcm9tVXNlck5vdGlmaWNhdGlvbikgeworICAgICAgICBpZiAoc3RyZWV0RnJvbVVzZXJOb3RpZmljYXRpb24gPT0gbnVsbCB8fCBzdHJlZXRGcm9tVXNlck5vdGlmaWNhdGlvbi5pc0VtcHR5KCkpIHJldHVybiAiIjsKKyAgICAgICAgU3RyaW5nIGhvdXNlbnVtYmVyID0gIiI7CisgICAgICAgIE1hdGNoZXIgbWF0Y2hlciA9IFNUUkVFVF9IT1VTRU5VTUJFUl9QQVRURVJOLm1hdGNoZXIoc3RyZWV0RnJvbVVzZXJOb3RpZmljYXRpb24pOworICAgICAgICBpZiAobWF0Y2hlci5tYXRjaGVzKCkpIHsKKyAgICAgICAgICAgIGhvdXNlbnVtYmVyID0gbWF0Y2hlci5ncm91cCgyKS50cmltKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGhvdXNlbnVtYmVyOworICAgIH0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NBUklTLUludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2FyaXNpbnRlcmZhY2UvbWFwcGVyL1N0b2VydW5nc2F1c2t1bmZ0TWFwcGVyLmphdmEgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL21hcHBlci9TdG9lcnVuZ3NhdXNrdW5mdE1hcHBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YmY3MWQKLS0tIC9kZXYvbnVsbAorKysgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL21hcHBlci9TdG9lcnVuZ3NhdXNrdW5mdE1hcHBlci5qYXZhCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxOSBDb250cmlidXRvcnMgdG8gdGhlIEVjbGlwc2UgRm91bmRhdGlvbgorICoKKyAqIFNlZSB0aGUgTk9USUNFIGZpbGUocykgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwKKyAqIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMi4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2FyaXNpbnRlcmZhY2UubWFwcGVyOworCitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS5jb25zdGFudHMuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2FyaXNpbnRlcmZhY2UuZHRvcy5GYWlsdXJlSW5mb3JtYXRpb25EdG87CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS5kdG9zLkZvcmVpZ25GYWlsdXJlRGF0YUR0bzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhcmlzaW50ZXJmYWNlLmR0b3MuU3RvZXJ1bmdzYXVza3VuZnRPdXRhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS5kdG9zLlN0b2VydW5nc2F1c2t1bmZ0VXNlck5vdGlmaWNhdGlvbjsKK2ltcG9ydCBvcmcubWFwc3RydWN0Lio7CisKK2ltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5yZWdleC5NYXRjaGVyOworaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOworCitATWFwcGVyKGNvbXBvbmVudE1vZGVsID0gInNwcmluZyIsIHVubWFwcGVkVGFyZ2V0UG9saWN5ID0gUmVwb3J0aW5nUG9saWN5LklHTk9SRSkKK3B1YmxpYyBpbnRlcmZhY2UgU3RvZXJ1bmdzYXVza3VuZnRNYXBwZXIgeworCisgICAgZmluYWwgUGF0dGVybiBTVFJFRVRfSE9VU0VOVU1CRVJfUEFUVEVSTiA9IFBhdHRlcm4uY29tcGlsZSgiKF5cXEQrKShcXGQuKikiKTsKKworICAgIEBNYXBwaW5ncyh7CisgICAgICAgICAgICBATWFwcGluZyh0YXJnZXQgPSAiZGVzY3JpcHRpb24iLCBzb3VyY2UgPSAiY29tbWVudCIpLAorICAgICAgICAgICAgQE1hcHBpbmcodGFyZ2V0ID0gImZhaWx1cmVCZWdpbiIsIHNvdXJjZSA9ICJkYXRlIiwgZGF0ZUZvcm1hdCA9ICJ5eXl5LU1NLWRkJ1QnSEg6bW06c3MuU1NTJ1onIiksCisgICAgICAgICAgICBATWFwcGluZyh0YXJnZXQgPSAibG9uZ2l0dWRlIiwgc291cmNlID0gImxuZyIpLAorICAgICAgICAgICAgQE1hcHBpbmcodGFyZ2V0ID0gImxhdGl0dWRlIiwgc291cmNlID0gImxhdCIpLAorICAgICAgICAgICAgQE1hcHBpbmcodGFyZ2V0ID0gInN0cmVldCIsIHNvdXJjZSA9ICJzdHJlZXQiLCBxdWFsaWZpZWRCeU5hbWUgPSAic3RyZWV0TWFwcGVyVG9Gb3JlaWduRmFpbHVyZURhdGFEdG8iKSwKKyAgICAgICAgICAgIEBNYXBwaW5nKHRhcmdldCA9ICJob3VzZW51bWJlciIsIHNvdXJjZSA9ICJob3VzZU5vIiksCisgICAgfSkKKyAgICBGb3JlaWduRmFpbHVyZURhdGFEdG8gdG9Gb3JlaWduRmFpbHVyZURhdGFEdG8oU3RvZXJ1bmdzYXVza3VuZnRVc2VyTm90aWZpY2F0aW9uIHNyY0VudGl0eSk7CisKKworICAgIEBBZnRlck1hcHBpbmcKKyAgICBkZWZhdWx0IHZvaWQgYWZ0ZXJNYXBwaW5nUHJvY2VzcyhTdG9lcnVuZ3NhdXNrdW5mdFVzZXJOb3RpZmljYXRpb24gc3JjRW50aXR5LCBATWFwcGluZ1RhcmdldCBGb3JlaWduRmFpbHVyZURhdGFEdG8gdGFyZ2V0RW50aXR5KXsKKyAgICAgICAgaWYgKHRhcmdldEVudGl0eS5nZXRIb3VzZW51bWJlcigpID09IG51bGwgfHwgdGFyZ2V0RW50aXR5LmdldEhvdXNlbnVtYmVyKCkuaXNFbXB0eSgpKXsKKyAgICAgICAgICAgIHRhcmdldEVudGl0eS5zZXRIb3VzZW51bWJlcihob3VzZW51bWJlck1hcHBlclRvRm9yZWlnbkZhaWx1cmVEYXRhRHRvKHNyY0VudGl0eS5nZXRTdHJlZXQoKSkpOworICAgICAgICB9CisgICAgICAgIHRhcmdldEVudGl0eS5zZXRSYWRpdXNJbk1ldGVycygwTCk7CisgICAgICAgIHRhcmdldEVudGl0eS5zZXRWb2x0YWdlTGV2ZWwoQ29uc3RhbnRzLlZPTFRBR0VfTFZMX0xPVyk7CisgICAgfQorCisgICAgQE5hbWVkKCJzdHJlZXRNYXBwZXJUb0ZvcmVpZ25GYWlsdXJlRGF0YUR0byIpCisgICAgZGVmYXVsdCBTdHJpbmcgc3RyZWV0TWFwcGVyVG9Gb3JlaWduRmFpbHVyZURhdGFEdG8oU3RyaW5nIHN0cmVldEZyb21Vc2VyTm90aWZpY2F0aW9uKSB7CisgICAgICAgIGlmIChzdHJlZXRGcm9tVXNlck5vdGlmaWNhdGlvbiA9PSBudWxsIHx8IHN0cmVldEZyb21Vc2VyTm90aWZpY2F0aW9uLmlzRW1wdHkoKSkgcmV0dXJuICIiOworICAgICAgICBTdHJpbmcgc3RyZWV0ID0gc3RyZWV0RnJvbVVzZXJOb3RpZmljYXRpb247CisgICAgICAgIE1hdGNoZXIgbWF0Y2hlciA9IFNUUkVFVF9IT1VTRU5VTUJFUl9QQVRURVJOLm1hdGNoZXIoc3RyZWV0RnJvbVVzZXJOb3RpZmljYXRpb24pOworICAgICAgICBpZiAobWF0Y2hlci5tYXRjaGVzKCkpIHsKKyAgICAgICAgICAgIHN0cmVldCA9IG1hdGNoZXIuZ3JvdXAoMSkudHJpbSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdHJlZXQ7CisgICAgfQorCisgICAgQE5hbWVkKCJob3VzZW51bWJlck1hcHBlclRvRm9yZWlnbkZhaWx1cmVEYXRhRHRvIikKKyAgICBkZWZhdWx0IFN0cmluZyBob3VzZW51bWJlck1hcHBlclRvRm9yZWlnbkZhaWx1cmVEYXRhRHRvKFN0cmluZyBzdHJlZXRGcm9tVXNlck5vdGlmaWNhdGlvbikgeworICAgICAgICBpZiAoc3RyZWV0RnJvbVVzZXJOb3RpZmljYXRpb24gPT0gbnVsbCB8fCBzdHJlZXRGcm9tVXNlck5vdGlmaWNhdGlvbi5pc0VtcHR5KCkpIHJldHVybiAiIjsKKyAgICAgICAgU3RyaW5nIGhvdXNlbnVtYmVyID0gIiI7CisgICAgICAgIE1hdGNoZXIgbWF0Y2hlciA9IFNUUkVFVF9IT1VTRU5VTUJFUl9QQVRURVJOLm1hdGNoZXIoc3RyZWV0RnJvbVVzZXJOb3RpZmljYXRpb24pOworICAgICAgICBpZiAobWF0Y2hlci5tYXRjaGVzKCkpIHsKKyAgICAgICAgICAgIGhvdXNlbnVtYmVyID0gbWF0Y2hlci5ncm91cCgyKS50cmltKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGhvdXNlbnVtYmVyOworICAgIH0KKworICAgIC8qIEV4cG9ydG1hcHBlciAqLworCisgICAgQEFmdGVyTWFwcGluZworICAgIGRlZmF1bHQgdm9pZCBzZXRDb29yZGluYXRlcyhATWFwcGluZ1RhcmdldCBTdG9lcnVuZ3NhdXNrdW5mdE91dGFnZSB0YXJnZXQsIEZhaWx1cmVJbmZvcm1hdGlvbkR0byBzcmNFbnRpdHkpIHsKKworICAgICAgICAvL1N0w7ZydW5nc2F1c2t1bmZ0LmRlIEtvb3JkaW5hdGVuZm9ybWF0OiBMTkcsTEFUO0xORyxMQVQ7IOKApgorCisgICAgICAgIExpc3Q8QXJyYXlMaXN0PEJpZ0RlY2ltYWw+PiBhZGRyZXNzUG9seWdvblBvaW50cyA9IHNyY0VudGl0eS5nZXRBZGRyZXNzUG9seWdvblBvaW50cygpOworICAgICAgICBpZiAoYWRkcmVzc1BvbHlnb25Qb2ludHMgIT0gbnVsbCAmJiAhYWRkcmVzc1BvbHlnb25Qb2ludHMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBTdHJpbmcgY29vcmRpbmF0ZXNSZXN1bHQgPSAiIjsKKyAgICAgICAgICAgIGZvciAoQXJyYXlMaXN0PEJpZ0RlY2ltYWw+IGFkZHJlc3NQb2x5Z29uUG9pbnQgOiBhZGRyZXNzUG9seWdvblBvaW50cykgeworICAgICAgICAgICAgICAgIC8vaW5kZXggMDogPSBMYXQgLyBpbmRleCAxOj0gTG5nCisgICAgICAgICAgICAgICAgY29vcmRpbmF0ZXNSZXN1bHQgPSBjb29yZGluYXRlc1Jlc3VsdC5jb25jYXQoYWRkcmVzc1BvbHlnb25Qb2ludC5nZXQoMSkudG9TdHJpbmcoKSArICIsIiArIGFkZHJlc3NQb2x5Z29uUG9pbnQuZ2V0KDApLnRvU3RyaW5nKCkgKyI7Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0YXJnZXQuc2V0Q29vcmRpbmF0ZXMoY29vcmRpbmF0ZXNSZXN1bHQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGFyZ2V0LnNldENvb3JkaW5hdGVzKHNyY0VudGl0eS5nZXRMb25naXR1ZGUoKSsgIiwiICsgc3JjRW50aXR5LmdldExhdGl0dWRlKCkpOworICAgICAgICB9CisKKyAgICB9CisKKyAgICBATWFwcGluZ3MoeworICAgICAgICAgICAgQE1hcHBpbmcodGFyZ2V0ID0gImxpdmVJbmZvIiwgc291cmNlID0gImRlc2NyaXB0aW9uIiksCisgICAgICAgICAgICBATWFwcGluZyh0YXJnZXQgPSAiZGF0ZSIsIHNvdXJjZSA9ICJmYWlsdXJlQmVnaW4iLCBkYXRlRm9ybWF0ID0gImRkLk1NLnl5eXkgSEg6bW06c3MiKSwKKyAgICAgICAgICAgIEBNYXBwaW5nKHRhcmdldCA9ICJlc3RpbWF0ZWRFbmRpbmciLCBzb3VyY2UgPSAiZmFpbHVyZUVuZFBsYW5uZWQiLCBkYXRlRm9ybWF0ID0gImRkLk1NLnl5eXkgSEg6bW06c3MiKSwKKyAgICB9KQorICAgIFN0b2VydW5nc2F1c2t1bmZ0T3V0YWdlIHRvU3RvZXJ1bmdzYXVza3VuZnRPdXRhZ2UoRmFpbHVyZUluZm9ybWF0aW9uRHRvIHNyY0VudGl0eSk7CisKKworCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYXJpc2ludGVyZmFjZS9zZXJ2aWNlL0ltcG9ydFNlcnZpY2UuamF2YSBiL1NBUklTLUludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2FyaXNpbnRlcmZhY2Uvc2VydmljZS9JbXBvcnRTZXJ2aWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI4M2I1OAotLS0gL2Rldi9udWxsCisrKyBiL1NBUklTLUludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2FyaXNpbnRlcmZhY2Uvc2VydmljZS9JbXBvcnRTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDE5IENvbnRyaWJ1dG9ycyB0byB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uCisgKgorICogU2VlIHRoZSBOT1RJQ0UgZmlsZShzKSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbAorICogaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2LiAyLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS5zZXJ2aWNlOworCitpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLk9iamVjdE1hcHBlcjsKK2ltcG9ydCBsb21ib2suZXh0ZXJuLmxvZzRqLkxvZzRqMjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhcmlzaW50ZXJmYWNlLmR0b3MuRm9yZWlnbkZhaWx1cmVEYXRhRHRvOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2FyaXNpbnRlcmZhY2UuZHRvcy5Gb3JlaWduRmFpbHVyZU1lc3NhZ2VEdG87CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS5hcGkuU3RvZXJ1bmdzYXVza3VuZnRBcGk7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS5jb25zdGFudHMuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2FyaXNpbnRlcmZhY2UuZHRvcy5TdG9lcnVuZ3NhdXNrdW5mdFVzZXJOb3RpZmljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS5leGNlcHRpb25zLkludGVybmFsU2VydmVyRXJyb3JFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS5tYXBwZXIuU0FSSVNNYXBwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS5tYXBwZXIuU3RvZXJ1bmdzYXVza3VuZnRNYXBwZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS53c2RsLkFycmF5T2ZWaWV3R2VwbGFudGVWVTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhcmlzaW50ZXJmYWNlLndzZGwuR2V0QWt0dWVsbGVHVlVzSW5mb0FsbGdlbWVpblJlc3BvbnNlOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2FyaXNpbnRlcmZhY2Uud3NkbC5WaWV3R2VwbGFudGVWVTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uVmFsdWU7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5ib290LmNvbnRleHQucHJvcGVydGllcy5Db25maWd1cmF0aW9uUHJvcGVydGllczsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJvb3QuY29udGV4dC5wcm9wZXJ0aWVzLkVuYWJsZUNvbmZpZ3VyYXRpb25Qcm9wZXJ0aWVzOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsubWVzc2FnaW5nLk1lc3NhZ2VDaGFubmVsOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsubWVzc2FnaW5nLnN1cHBvcnQuTWVzc2FnZUJ1aWxkZXI7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zdGVyZW90eXBlLlNlcnZpY2U7CisKK2ltcG9ydCBqYXZheC54bWwuYmluZC5KQVhCQ29udGV4dDsKK2ltcG9ydCBqYXZheC54bWwuYmluZC5KQVhCRXhjZXB0aW9uOworaW1wb3J0IGphdmF4LnhtbC5iaW5kLlVubWFyc2hhbGxlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK0BTZXJ2aWNlCitATG9nNGoyCitARW5hYmxlQ29uZmlndXJhdGlvblByb3BlcnRpZXMKK0BDb25maWd1cmF0aW9uUHJvcGVydGllcyhwcmVmaXggPSAicmFiYml0bXEiKQorcHVibGljIGNsYXNzIEltcG9ydFNlcnZpY2UgeworCisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgU3RvZXJ1bmdzYXVza3VuZnRBcGkgc3RvZXJ1bmdzYXVza3VuZnRBcGk7CisKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBNZXNzYWdlQ2hhbm5lbCBmYWlsdXJlSW1wb3J0Q2hhbm5lbDsKKworICAgIEBBdXRvd2lyZWQKKyAgICBwcml2YXRlIE9iamVjdE1hcHBlciBvYmplY3RNYXBwZXI7CisKKyAgICBAQXV0b3dpcmVkCisgICAgU3RvZXJ1bmdzYXVza3VuZnRNYXBwZXIgc3RvZXJ1bmdzYXVza3VuZnRNYXBwZXI7CisKKyAgICBAQXV0b3dpcmVkCisgICAgU0FSSVNNYXBwZXIgc2FyaXNNYXBwZXI7CisKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBTYXJpc1dlYnNlcnZpY2Ugc2FyaXNXZWJzZXJ2aWNlOworCisgICAgQFZhbHVlKCIke2dyaWRGYWlsdXJlSW5mb3JtYXRpb24uYXV0b3B1Ymxpc2g6ZmFsc2V9IikKKyAgICBwcml2YXRlIGJvb2xlYW4gYXV0b3B1Ymxpc2g7CisKKyAgICBwdWJsaWMgdm9pZCBpbXBvcnRGb3JlaWduRmFpbHVyZXMoKSB0aHJvd3MgSkFYQkV4Y2VwdGlvbiB7CisKKy8vICAgICAgICBHZXRBa3R1ZWxsZUdWVXNJbmZvQWxsZ2VtZWluUmVzcG9uc2Ugc2FyaXNSZXNwb25zZSA9IHNhcmlzV2Vic2VydmljZS5nZXRBa3R1ZWxsZUdWVSgpOworCisgICAgICAgIEdldEFrdHVlbGxlR1ZVc0luZm9BbGxnZW1laW5SZXNwb25zZSBzYXJpc1Jlc3BvbnNlID0gZ2V0TW9ja2VkU2FyaXNSZXNwb25zZSgpOworCisgICAgICAgIEFycmF5T2ZWaWV3R2VwbGFudGVWVSBnZXRBa3R1ZWxsZUdWVXNJbmZvQWxsZ2VtZWluUmVzdWx0ID0gc2FyaXNSZXNwb25zZS5nZXRHZXRBa3R1ZWxsZUdWVXNJbmZvQWxsZ2VtZWluUmVzdWx0KCk7CisgICAgICAgIGlmIChnZXRBa3R1ZWxsZUdWVXNJbmZvQWxsZ2VtZWluUmVzdWx0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIExpc3Q8Vmlld0dlcGxhbnRlVlU+IHZpZXdHZXBsYW50ZVZVID0gc2FyaXNSZXNwb25zZS5nZXRHZXRBa3R1ZWxsZUdWVXNJbmZvQWxsZ2VtZWluUmVzdWx0KCkuZ2V0Vmlld0dlcGxhbnRlVlUoKTsKKworICAgICAgICAgICAgZm9yIChWaWV3R2VwbGFudGVWVSBnZXBsYW50ZVZVIDogdmlld0dlcGxhbnRlVlUpIHsKKyAgICAgICAgICAgICAgICBwdXNoRm9yZWlnbkZhaWx1cmUoY3JlYXRlRm9yZWlnbkZhaWx1cmVNZXNzYWdlRHRvKGdlcGxhbnRlVlUpKTsKKyAgICAgICAgICAgICAgICBGb3JlaWduRmFpbHVyZU1lc3NhZ2VEdG8gZm9yZWlnbkZhaWx1cmVNZXNzYWdlRHRvID0gY3JlYXRlRm9yZWlnbkZhaWx1cmVNZXNzYWdlRHRvKGdlcGxhbnRlVlUpOworICAgICAgICAgICAgICAgIGxvZy5pbmZvKCJWZXJzb3JndW5nc3VudGVyYnJlY2h1bmdJRDogIiArIGdlcGxhbnRlVlUuZ2V0VmVyc29yZ3VuZ3N1bnRlcmJyZWNodW5nSUQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIEdldEFrdHVlbGxlR1ZVc0luZm9BbGxnZW1laW5SZXNwb25zZSBnZXRNb2NrZWRTYXJpc1Jlc3BvbnNlKCkgdGhyb3dzIEpBWEJFeGNlcHRpb24geworICAgICAgICBKQVhCQ29udGV4dCBqYXhiQ29udGV4dCA9IEpBWEJDb250ZXh0Lm5ld0luc3RhbmNlKEdldEFrdHVlbGxlR1ZVc0luZm9BbGxnZW1laW5SZXNwb25zZS5jbGFzcyk7CisgICAgICAgIFVubWFyc2hhbGxlciBqYXhiVW5tYXJzaGFsbGVyID0gamF4YkNvbnRleHQuY3JlYXRlVW5tYXJzaGFsbGVyKCk7CisKKyAgICAgICAgRmlsZSBmaWxlID0gbmV3IEZpbGUoInNhcmlzTW9ja1Jlc3BvbnNlLnhtbCIpOworICAgICAgICByZXR1cm4gKEdldEFrdHVlbGxlR1ZVc0luZm9BbGxnZW1laW5SZXNwb25zZSkgamF4YlVubWFyc2hhbGxlci51bm1hcnNoYWwoZmlsZSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgaW1wb3J0VXNlck5vdGlmaWNhdGlvbnMoKSB7CisKKy8vICAgICAgICBMaXN0PFN0b2VydW5nc2F1c2t1bmZ0VXNlck5vdGlmaWNhdGlvbj4gdXNlck5vdGlmaWNhdGlvbkxpc3QgPQorLy8gICAgICAgICAgICAgICAgc3RvZXJ1bmdzYXVza3VuZnRBcGkuZ2V0VXNlck5vdGlmaWNhdGlvbigxKTsKKy8vCisvLyAgICAgICAgZm9yIChTdG9lcnVuZ3NhdXNrdW5mdFVzZXJOb3RpZmljYXRpb24gdXNlck5vdGlmaWNhdGlvbiA6IHVzZXJOb3RpZmljYXRpb25MaXN0KSB7CisvLyAgICAgICAgICAgIHB1c2hGb3JlaWduRmFpbHVyZShjcmVhdGVGb3JlaWduRmFpbHVyZU1lc3NhZ2VEdG8odXNlck5vdGlmaWNhdGlvbikpOworLy8gICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIEZvcmVpZ25GYWlsdXJlTWVzc2FnZUR0byBjcmVhdGVGb3JlaWduRmFpbHVyZU1lc3NhZ2VEdG8oVmlld0dlcGxhbnRlVlUgdmlld0dlcGxhbnRlVlUpIHsKKyAgICAgICAgRm9yZWlnbkZhaWx1cmVNZXNzYWdlRHRvIGZvcmVpZ25GYWlsdXJlTWVzc2FnZUR0byA9IG5ldyBGb3JlaWduRmFpbHVyZU1lc3NhZ2VEdG8oKTsKKyAgICAgICAgZm9yZWlnbkZhaWx1cmVNZXNzYWdlRHRvLnNldE1ldGFJZCh2aWV3R2VwbGFudGVWVS5nZXRWZXJzb3JndW5nc3VudGVyYnJlY2h1bmdJRCgpKyIiKTsKKyAgICAgICAgZm9yZWlnbkZhaWx1cmVNZXNzYWdlRHRvLnNldFNvdXJjZShDb25zdGFudHMuU1JDX1NBUklTKTsKKyAgICAgICAgRm9yZWlnbkZhaWx1cmVEYXRhRHRvIGZvcmVpZ25GYWlsdXJlRGF0YUR0byA9IGNyZWF0ZUZvcmVpZ25GYWlsdXJlRGF0YSh2aWV3R2VwbGFudGVWVSk7CisgICAgICAgIGZvcmVpZ25GYWlsdXJlTWVzc2FnZUR0by5zZXRQYXlsb2FkKGZvcmVpZ25GYWlsdXJlRGF0YUR0byk7CisgICAgICAgIHJldHVybiBmb3JlaWduRmFpbHVyZU1lc3NhZ2VEdG87CisgICAgfQorCisgICAgcHJpdmF0ZSBGb3JlaWduRmFpbHVyZURhdGFEdG8gY3JlYXRlRm9yZWlnbkZhaWx1cmVEYXRhKFZpZXdHZXBsYW50ZVZVIHZpZXdHZXBsYW50ZVZVKSB7CisgICAgICAgIEZvcmVpZ25GYWlsdXJlRGF0YUR0byBmb3JlaWduRmFpbHVyZURhdGFEdG8gPSBzYXJpc01hcHBlci50b0ZvcmVpZ25GYWlsdXJlRGF0YUR0byh2aWV3R2VwbGFudGVWVSk7CisgICAgICAgIGZvcmVpZ25GYWlsdXJlRGF0YUR0by5zZXRCcmFuY2goQ29uc3RhbnRzLkJSQU5DSF9FTEVDVFJJQ0lUWSk7CisgICAgICAgIGZvcmVpZ25GYWlsdXJlRGF0YUR0by5zZXRQbGFubmVkKHRydWUpOworICAgICAgICBmb3JlaWduRmFpbHVyZURhdGFEdG8uc2V0QXV0b3B1Ymxpc2goYXV0b3B1Ymxpc2gpOworICAgICAgICByZXR1cm4gZm9yZWlnbkZhaWx1cmVEYXRhRHRvOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHB1c2hGb3JlaWduRmFpbHVyZShGb3JlaWduRmFpbHVyZU1lc3NhZ2VEdG8gZm9yZWlnbkZhaWx1cmVNZXNzYWdlRHRvKSB7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZhaWx1cmVJbXBvcnRDaGFubmVsLnNlbmQoCisgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VCdWlsZGVyLndpdGhQYXlsb2FkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdE1hcHBlci53cml0ZVZhbHVlQXNTdHJpbmcoZm9yZWlnbkZhaWx1cmVNZXNzYWdlRHRvLmdldFBheWxvYWQoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcigibWV0YUlkIiwgZm9yZWlnbkZhaWx1cmVNZXNzYWdlRHRvLmdldE1ldGFJZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoImRlc2NyaXB0aW9uIiwgZm9yZWlnbkZhaWx1cmVNZXNzYWdlRHRvLmdldERlc2NyaXB0aW9uKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcigic291cmNlIiwgZm9yZWlnbkZhaWx1cmVNZXNzYWdlRHRvLmdldFNvdXJjZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKyAgICAgICAgICAgIGxvZy5pbmZvKCJTdWNjZXNmdWxseSBzZW50IG1lc3NhZ2UgZnJvbSBTQVJJUy1JbnRlcmZhY2UgdG8gbWFpbi1hcHAgd2l0aCBtZXRhSWQ6ICIgKyBmb3JlaWduRmFpbHVyZU1lc3NhZ2VEdG8uZ2V0TWV0YUlkKCkpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgbG9nLmRlYnVnKGUuZ2V0TWVzc2FnZSgpLCBlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbFNlcnZlckVycm9yRXhjZXB0aW9uKCJjb3VsZC5ub3QucHVzaC5tZXNzYWdlIik7CisgICAgICAgIH0KKworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYXJpc2ludGVyZmFjZS9zZXJ2aWNlL1NhcmlzV2Vic2VydmljZS5qYXZhIGIvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYXJpc2ludGVyZmFjZS9zZXJ2aWNlL1NhcmlzV2Vic2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3OTliNzIKLS0tIC9kZXYvbnVsbAorKysgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL3NlcnZpY2UvU2FyaXNXZWJzZXJ2aWNlLmphdmEKQEAgLTAsMCArMSw1NyBAQAorCitwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2FyaXNpbnRlcmZhY2Uuc2VydmljZTsKKworCitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS53c2RsLkdldEFrdHVlbGxlR1ZVc0luZm9BbGxnZW1laW47CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS53c2RsLkdldEFrdHVlbGxlR1ZVc0luZm9BbGxnZW1laW5SZXNwb25zZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhcmlzaW50ZXJmYWNlLndzZGwuR2V0Q291bnRyeVJlcXVlc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS53c2RsLkdldENvdW50cnlSZXNwb25zZTsKK2ltcG9ydCBvcmcuc2xmNGouTG9nZ2VyOworaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXJGYWN0b3J5OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud3MuY2xpZW50LmNvcmUuc3VwcG9ydC5XZWJTZXJ2aWNlR2F0ZXdheVN1cHBvcnQ7CisKK2ltcG9ydCBqYXZheC54bWwuYmluZC5KQVhCQ29udGV4dDsKK2ltcG9ydCBqYXZheC54bWwuYmluZC5KQVhCRXhjZXB0aW9uOworaW1wb3J0IGphdmF4LnhtbC5iaW5kLlVubWFyc2hhbGxlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CisKK3B1YmxpYyBjbGFzcyBTYXJpc1dlYnNlcnZpY2UgZXh0ZW5kcyBXZWJTZXJ2aWNlR2F0ZXdheVN1cHBvcnQgeworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIGxvZyA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKFNhcmlzV2Vic2VydmljZS5jbGFzcyk7CisKKwlwdWJsaWMgR2V0Q291bnRyeVJlc3BvbnNlIGdldENvdW50cnkoU3RyaW5nIGNvdW50cnkpIHsKKworCQlHZXRDb3VudHJ5UmVxdWVzdCByZXF1ZXN0ID0gbmV3IEdldENvdW50cnlSZXF1ZXN0KCk7CisJCXJlcXVlc3Quc2V0TmFtZShjb3VudHJ5KTsKKworCQlsb2cuaW5mbygiUmVxdWVzdGluZyBsb2NhdGlvbiBmb3IgIiArIGNvdW50cnkpOworCisJCS8qR2V0Q291bnRyeVJlc3BvbnNlIHJlc3BvbnNlID0gKEdldENvdW50cnlSZXNwb25zZSkgZ2V0V2ViU2VydmljZVRlbXBsYXRlKCkKKwkJCQkubWFyc2hhbFNlbmRBbmRSZWNlaXZlKCJodHRwOi8vbG9jYWxob3N0OjgwODAvd3MvY291bnRyaWVzIiwgcmVxdWVzdCwKKwkJCQkJCW5ldyBTb2FwQWN0aW9uQ2FsbGJhY2soCisJCQkJCQkJCSJodHRwOi8vc3ByaW5nLmlvL2d1aWRlcy9ncy1wcm9kdWNpbmctd2ViLXNlcnZpY2UvR2V0Q291bnRyeVJlcXVlc3QiKSk7Ki8KKworCQlHZXRDb3VudHJ5UmVzcG9uc2UgcmVzcG9uc2UgPSAoR2V0Q291bnRyeVJlc3BvbnNlKSBnZXRXZWJTZXJ2aWNlVGVtcGxhdGUoKQorCQkJCS5tYXJzaGFsU2VuZEFuZFJlY2VpdmUoImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC93cy9jb3VudHJpZXMiLCByZXF1ZXN0KTsKKworCQlyZXR1cm4gcmVzcG9uc2U7CisJfQorCisJcHVibGljIEdldEFrdHVlbGxlR1ZVc0luZm9BbGxnZW1laW5SZXNwb25zZSBnZXRBa3R1ZWxsZUdWVSgpIHsKKwkJbG9nLmluZm8oImdldEFrdHVlbGxlR1ZVIGNhbGxlZCIpOworCisJCUdldEFrdHVlbGxlR1ZVc0luZm9BbGxnZW1laW4gcmVxdWVzdCA9IG5ldyBHZXRBa3R1ZWxsZUdWVXNJbmZvQWxsZ2VtZWluKCk7CisKKwkJR2V0QWt0dWVsbGVHVlVzSW5mb0FsbGdlbWVpblJlc3BvbnNlIHJlc3BvbnNlID0gKEdldEFrdHVlbGxlR1ZVc0luZm9BbGxnZW1laW5SZXNwb25zZSkgZ2V0V2ViU2VydmljZVRlbXBsYXRlKCkKKwkJCQkubWFyc2hhbFNlbmRBbmRSZWNlaXZlKCJodHRwOi8vc2FyaXNrb24vc2FyaXNrb24vc2VydmljZXMvU3RvZXJ1bmdlbnNlcnZpY2UuYXNteCIsIHJlcXVlc3QpOworCisvKgkJR2V0QWt0dWVsbGVHVlVzSW5mb0FsbGdlbWVpblJlc3BvbnNlIHJlc3BvbnNlID0gKEdldEFrdHVlbGxlR1ZVc0luZm9BbGxnZW1laW5SZXNwb25zZSkgZ2V0V2ViU2VydmljZVRlbXBsYXRlKCkKKwkJCQkubWFyc2hhbFNlbmRBbmRSZWNlaXZlKCJodHRwOi8vc2FyaXNrb24vc2FyaXNrb24vc2VydmljZXMvU3RvZXJ1bmdlbnNlcnZpY2UuYXNteCIsIHJlcXVlc3QsIG5ldyBTb2FwQWN0aW9uQ2FsbGJhY2soCisJCQkJCQkiaHR0cDovL3RlbXB1cmkub3JnL0dldEFrdHVlbGxlR1ZVc0luZm9BbGxnZW1laW4iKSk7Ki8KKworCQlyZXR1cm4gcmVzcG9uc2U7CisJfQorCisKKworfQpkaWZmIC0tZ2l0IGEvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL3Jlc291cmNlcy9TdG9lcnVuZ2Vuc2VydmljZS53c2RsIGIvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL3Jlc291cmNlcy9TdG9lcnVuZ2Vuc2VydmljZS53c2RsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwOGIzODgKLS0tIC9kZXYvbnVsbAorKysgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vcmVzb3VyY2VzL1N0b2VydW5nZW5zZXJ2aWNlLndzZGwKQEAgLTAsMCArMSwxMDAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8d3NkbDpkZWZpbml0aW9ucyB4bWxuczp0bT0iaHR0cDovL21pY3Jvc29mdC5jb20vd3NkbC9taW1lL3RleHRNYXRjaGluZy8iIHhtbG5zOnNvYXBlbmM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiB4bWxuczptaW1lPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL21pbWUvIiB4bWxuczp0bnM9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnMxPSJodHRwOi8vdGVtcHVyaS5vcmcvQWJzdHJhY3RUeXBlcyIgeG1sbnM6cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOnNvYXAxMj0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwMTIvIiB4bWxuczpodHRwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL2h0dHAvIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIj4KKwk8d3NkbDp0eXBlcz4KKwkJPHM6c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90ZW1wdXJpLm9yZy8iPgorCQkJPHM6ZWxlbWVudCBuYW1lPSJHZXRBa3R1ZWxsZUdWVXNJbmZvQWxsZ2VtZWluIj4KKwkJCQk8czpjb21wbGV4VHlwZT4KKwkJCQkJPHM6c2VxdWVuY2U+CisJCQkJCQk8czplbGVtZW50IG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSIxIiBuYW1lPSJkYXRlVGltZSIgdHlwZT0iczpkYXRlVGltZSIgLz4KKwkJCQkJCTxzOmVsZW1lbnQgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9IjEiIG5hbWU9InZvblRvbGVyYW56IiB0eXBlPSJzOmludCIgLz4KKwkJCQkJCTxzOmVsZW1lbnQgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9IjEiIG5hbWU9ImJpc1RvbGVyYW56IiB0eXBlPSJzOmludCIgLz4KKwkJCQkJCTxzOmVsZW1lbnQgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9IjEiIG5hbWU9InNwYXJ0ZUlkIiB0eXBlPSJzOmludCIgLz4KKwkJCQkJCTxzOmVsZW1lbnQgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9IjEiIG5hbWU9ImRpZW5zdHBsYW5JZCIgdHlwZT0iczppbnQiIC8+CisJCQkJCTwvczpzZXF1ZW5jZT4KKwkJCQk8L3M6Y29tcGxleFR5cGU+CQkKKwkJCTwvczplbGVtZW50PgorCQkJPHM6Y29tcGxleFR5cGUgbmFtZT0iVmlld0dlcGxhbnRlVlUiPgorCQkJCTxzOnNlcXVlbmNlPgorCQkJCQk8czplbGVtZW50IG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSIxIiBuYW1lPSJWZXJzb3JndW5nc3VudGVyYnJlY2h1bmdJRCIgdHlwZT0iczppbnQiIC8+CisJCQkJCTxzOmVsZW1lbnQgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9IjEiIG5hbWU9IkJlZ2lubiIgdHlwZT0iczpkYXRlVGltZSIgLz4KKwkJCQkJPHM6ZWxlbWVudCBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0iMSIgbmFtZT0iRW5kZSIgdHlwZT0iczpkYXRlVGltZSIgLz4KKwkJCQkJPHM6ZWxlbWVudCBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0iMSIgbmFtZT0iQW56YWhsS3VuZGVuIiB0eXBlPSJzOmludCIgLz4KKwkJCQkJPHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIgbmFtZT0iT3J0IiB0eXBlPSJzOnN0cmluZyIgLz4KKwkJCQkJPHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIgbmFtZT0iT3J0c3RlaWwiIHR5cGU9InM6c3RyaW5nIiAvPgorCQkJCQk8czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIiBuYW1lPSJTdHJhc3NlIiB0eXBlPSJzOnN0cmluZyIgLz4KKwkJCQkJPHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIgbmFtZT0iSGF1c251bW1lcm4iIHR5cGU9InM6c3RyaW5nIiAvPgorCQkJCQk8czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIiBuYW1lPSJCZW1lcmt1bmciIHR5cGU9InM6c3RyaW5nIiAvPgorCQkJCQk8czplbGVtZW50IG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSIxIiBuYW1lPSJSZWFsaXNpZXJ0IiB0eXBlPSJzOmJvb2xlYW4iIC8+CisJCQkJCTxzOmVsZW1lbnQgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9IjEiIG5hbWU9IlN0cmFzc2VuQWJzY2huaXR0SUQiIHR5cGU9InM6aW50IiAvPgorCQkJCQk8czplbGVtZW50IG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSIxIiBuYW1lPSJMZXR6dGVBZW5kZXJ1bmdBbSIgdHlwZT0iczpkYXRlVGltZSIgLz4KKwkJCQkJPHM6ZWxlbWVudCBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0iMSIgbmFtZT0iU3RvZXJ1bmciIHR5cGU9InM6aW50IiAvPgorCQkJCQk8czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIiBuYW1lPSJQbHoiIHR5cGU9InM6c3RyaW5nIiAvPgorCQkJCQk8czplbGVtZW50IG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSIxIiBuYW1lPSJTcGFydGVJRCIgdHlwZT0iczppbnQiIC8+CisJCQkJCTxzOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiIG5hbWU9IlNwYXJ0ZSIgdHlwZT0iczpzdHJpbmciIC8+CisJCQkJPC9zOnNlcXVlbmNlPgorCQkJPC9zOmNvbXBsZXhUeXBlPgorCQkJPHM6Y29tcGxleFR5cGUgbmFtZT0iQXJyYXlPZlZpZXdHZXBsYW50ZVZVIj4KKwkJCQk8czpzZXF1ZW5jZT4KKwkJCQkJPHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBuYW1lPSJWaWV3R2VwbGFudGVWVSIgbmlsbGFibGU9InRydWUiIHR5cGU9InRuczpWaWV3R2VwbGFudGVWVSIgLz4KKwkJCQk8L3M6c2VxdWVuY2U+CisJCQk8L3M6Y29tcGxleFR5cGU+CisJCQk8czplbGVtZW50IG5hbWU9IkdldEFrdHVlbGxlR1ZVc0luZm9BbGxnZW1laW5SZXNwb25zZSI+CisJCQkJPHM6Y29tcGxleFR5cGU+CisJCQkJCTxzOnNlcXVlbmNlPgorCQkJCQkJPHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIgbmFtZT0iR2V0QWt0dWVsbGVHVlVzSW5mb0FsbGdlbWVpblJlc3VsdCIgdHlwZT0idG5zOkFycmF5T2ZWaWV3R2VwbGFudGVWVSIgLz4KKwkJCQkJPC9zOnNlcXVlbmNlPgorCQkJCTwvczpjb21wbGV4VHlwZT4KKwkJCTwvczplbGVtZW50PgorCQkJPHM6ZWxlbWVudCBuYW1lPSJBcnJheU9mVmlld0dlcGxhbnRlVlUiIG5pbGxhYmxlPSJ0cnVlIiB0eXBlPSJ0bnM6QXJyYXlPZlZpZXdHZXBsYW50ZVZVIiAvPgorCQkJPHM6ZWxlbWVudCBuYW1lPSJWaWV3R2VwbGFudGVWVSIgbmlsbGFibGU9InRydWUiIHR5cGU9InRuczpWaWV3R2VwbGFudGVWVSIgLz4JICAKKwkJPC9zOnNjaGVtYT4JICAKKwkJPHM6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3RlbXB1cmkub3JnL0Fic3RyYWN0VHlwZXMiPgorCQkJPHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iIC8+CisJCQk8czpjb21wbGV4VHlwZSBuYW1lPSJTdHJpbmdBcnJheSI+CisJCQkJPHM6Y29tcGxleENvbnRlbnQgbWl4ZWQ9ImZhbHNlIj4KKwkJCQkJPHM6cmVzdHJpY3Rpb24gYmFzZT0ic29hcGVuYzpBcnJheSI+CisJCQkJCQk8czpzZXF1ZW5jZT4KKwkJCQkJCQk8czplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5hbWU9IlN0cmluZyIgdHlwZT0iczpzdHJpbmciIC8+CisJCQkJCQk8L3M6c2VxdWVuY2U+CisJCQkJCTwvczpyZXN0cmljdGlvbj4KKwkJCQk8L3M6Y29tcGxleENvbnRlbnQ+CisJCQk8L3M6Y29tcGxleFR5cGU+CisJCTwvczpzY2hlbWE+CisJPC93c2RsOnR5cGVzPgorCisJPHdzZGw6bWVzc2FnZSBuYW1lPSJHZXRBa3R1ZWxsZUdWVXNJbmZvQWxsZ2VtZWluU29hcEluIj4KKwkJPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6R2V0QWt0dWVsbGVHVlVzSW5mb0FsbGdlbWVpbiIgLz4KKwk8L3dzZGw6bWVzc2FnZT4KKwk8d3NkbDptZXNzYWdlIG5hbWU9IkdldEFrdHVlbGxlR1ZVc0luZm9BbGxnZW1laW5Tb2FwT3V0Ij4KKwkJPHdzZGw6cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6R2V0QWt0dWVsbGVHVlVzSW5mb0FsbGdlbWVpblJlc3BvbnNlIiAvPgorCTwvd3NkbDptZXNzYWdlPiAgCisKKworCTx3c2RsOnBvcnRUeXBlIG5hbWU9IlN0b2VydW5nZW5TZXJ2aWNlV1NTb2FwIj4KKworCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iR2V0QWt0dWVsbGVHVlVzSW5mb0FsbGdlbWVpbiI+CisJCQk8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6R2V0QWt0dWVsbGVHVlVzSW5mb0FsbGdlbWVpblNvYXBJbiIgLz4KKwkJCTx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6R2V0QWt0dWVsbGVHVlVzSW5mb0FsbGdlbWVpblNvYXBPdXQiIC8+CisJCTwvd3NkbDpvcGVyYXRpb24+CisKKwk8L3dzZGw6cG9ydFR5cGU+CisJCisJPHdzZGw6YmluZGluZyBuYW1lPSJTdG9lcnVuZ2VuU2VydmljZVdTU29hcCIgdHlwZT0idG5zOlN0b2VydW5nZW5TZXJ2aWNlV1NTb2FwIj4KKwkJPHNvYXA6YmluZGluZyB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgLz4gIAorCQk8d3NkbDpvcGVyYXRpb24gbmFtZT0iR2V0QWt0dWVsbGVHVlVzSW5mb0FsbGdlbWVpbiI+CisJCQk8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3RlbXB1cmkub3JnL0dldEFrdHVlbGxlR1ZVc0luZm9BbGxnZW1laW4iIHN0eWxlPSJkb2N1bWVudCIgLz4KKwkJCTx3c2RsOmlucHV0PgorCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgorCQkJPC93c2RsOmlucHV0PgorCQkJPHdzZGw6b3V0cHV0PgorCQkJCTxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIiAvPgorCQkJPC93c2RsOm91dHB1dD4KKwkJPC93c2RsOm9wZXJhdGlvbj4KKwk8L3dzZGw6YmluZGluZz4KKwkKKwk8d3NkbDpzZXJ2aWNlIG5hbWU9IlN0b2VydW5nZW5TZXJ2aWNlV1MiPgorCQk8d3NkbDpwb3J0IG5hbWU9IlN0b2VydW5nZW5TZXJ2aWNlV1NTb2FwIiBiaW5kaW5nPSJ0bnM6U3RvZXJ1bmdlblNlcnZpY2VXU1NvYXAiPgorCQkJPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3Nhcmlza29uL3Nhcmlza29uL3NlcnZpY2VzL1N0b2VydW5nZW5zZXJ2aWNlLmFzbXgiIC8+CisJCTwvd3NkbDpwb3J0PgkJCisJPC93c2RsOnNlcnZpY2U+Cis8L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi55bWwgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vcmVzb3VyY2VzL2FwcGxpY2F0aW9uLnltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWRiNDM3Ci0tLSAvZGV2L251bGwKKysrIGIvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi55bWwKQEAgLTAsMCArMSwxMzEgQEAKKyMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgIENvcHlyaWdodCAoYykgMjAxOSBDb250cmlidXRvcnMgdG8gdGhlIEVjbGlwc2UgRm91bmRhdGlvbgorIworIyAgU2VlIHRoZSBOT1RJQ0UgZmlsZShzKSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbAorIyAgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjCisjICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyMgIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYuIDIuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyMgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC4KKyMKKyMgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wCisjICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitzcHJpbmc6CisgIHJhYmJpdG1xOgorICAgIGhvc3Q6IGVudGRvY2tlcmdzcworICAgIHBvcnQ6IDU2NzIKKyAgICB1c2VybmFtZTogJHtHRklfUkFCQklUTVFfVVNFUk5BTUV9CisgICAgcGFzc3dvcmQ6ICR7R0ZJX1JBQkJJVE1RX1BBU1NXT1JEfQorCisgICAgIyBJbXBvcnRrYW5hbAorICAgIGltcG9ydEV4Y2hhbmdlOiBzaXRJbXBvcnRFeGNoYW5nZQorICAgIGltcG9ydFF1ZXVlOiBzaXRJbXBvcnRRdWV1ZQorICAgIGltcG9ydGtleTogc2l0SW1wb3J0RXhjaGFuZ2UuZmFpbHVyZUltcG9ydEtleQorCitsb2dnaW5nOgorICBsZXZlbDoKKyAgICByb290OiBJTkZPCisgICAgb3JnLmVjbGlwc2Uub3Blbms6IElORk8KKyAgICBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYjogRVJST1IKKworc2VydmVyOgorICBtYXgtaHR0cC1oZWFkZXItc2l6ZTogMjYyMTQ0CisKK2ZlaWduOgorICBjbGllbnQ6CisgICAgY29uZmlnOgorICAgICAgZGVmYXVsdDoKKyAgICAgICAgY29ubmVjdFRpbWVvdXQ6IDYwMDAwCisgICAgICAgIHJlYWRUaW1lb3V0OiA2MDAwMAorCitzdG9lcnVuZ3NhdXNrdW5mdDoKKyAgYXBpVXJsOiBodHRwczovL3N0YWdlLWFwaS1vcGVyYXRvci5zdG9lcnVuZ3NhdXNrdW5mdC5kZS9hcGkvdjEuMC8KKyAgdXNlcjogJHtHRklfU1RPRVJVTkdTQVVTS1VORlRfVVNFUk5BTUV9CisgIHBhc3N3b3JkOiAke0dGSV9TVE9FUlVOR1NBVVNLVU5GVF9QQVNTV09SRH0KKyAgc2NoZWR1bGluZy1pbXBvcnQ6CisgICAgZW5hYmxlZDogZmFsc2UKKyAgICBjcm9uOiAwICovMTUgKiA/ICogKgorICAgIAorZ3JpZEZhaWx1cmVJbmZvcm1hdGlvbjoKKyAgYXV0b3B1Ymxpc2g6IGZhbHNlCisKKy0tLQorCitzcHJpbmc6CisgIHByb2ZpbGVzOiB0ZXN0CisKK3N0b2VydW5nc2F1c2t1bmZ0OgorICBhcGlVcmw6IGh0dHBzOi8vc3RhZ2UtYXBpLW9wZXJhdG9yLnN0b2VydW5nc2F1c2t1bmZ0LmRlL2FwaS92MS4wLworICB1c2VyOiB1c2VyTmFtZQorICBwYXNzd29yZDogc2VjUHdkCisgIHNjaGVkdWxpbmctaW1wb3J0OgorICAgIGVuYWJsZWQ6IHRydWUKKyAgICBjcm9uOiAwICovMTUgKiA/ICogKgorLS0tCisKK3NwcmluZzoKKyAgcHJvZmlsZXM6IGRldnNlcnZlcgorCitsb2dnaW5nOgorICBsZXZlbDoKKyAgICByb290OiBJTkZPCisgICAgb3JnLmVjbGlwc2Uub3Blbms6IERFQlVHCisgICAgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWI6IEVSUk9SCisKK3NlcnZlcjoKKyAgcG9ydDogOTE5NgorCistLS0KKworc3ByaW5nOgorICBwcm9maWxlczogZGV2c2VydmVyLXVuc2VjdXJlCisKK2xvZ2dpbmc6CisgIGxldmVsOgorICAgIHJvb3Q6IElORk8KKyAgICBvcmcuZWNsaXBzZS5vcGVuazogREVCVUcKKyAgICBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYjogRVJST1IKKworc2VydmVyOgorICBwb3J0OiA5MTk3CisKKy0tLQorCitzcHJpbmc6CisgIHByb2ZpbGVzOiBkZXZzZXJ2ZXItYnJhbmNoCisgIHJhYmJpdG1xOgorICAgICMgSW1wb3J0a2FuYWwKKyAgICBpbXBvcnRFeGNoYW5nZTogc2l0SW1wb3J0RXhjaGFuZ2VfYnJhbmNoCisgICAgaW1wb3J0UXVldWU6IHNpdEltcG9ydFF1ZXVlX2JyYW5jaAorICAgIGltcG9ydGtleTogc2l0SW1wb3J0RXhjaGFuZ2UuZmFpbHVyZUltcG9ydEtleQorCistLS0KKworc3ByaW5nOgorICBwcm9maWxlczogcXNlcnZlcgorICByYWJiaXRtcToKKyAgICBob3N0OiBsb2NhbGhvc3QKKyAgICBwb3J0OiA1NjcyCisgICAgdXNlcm5hbWU6ICR7R0ZJX1JBQkJJVE1RX1VTRVJOQU1FfQorICAgIHBhc3N3b3JkOiAke0dGSV9SQUJCSVRNUV9QQVNTV09SRH0KKworICAgICMgSW1wb3J0a2FuYWwKKyAgICBpbXBvcnRFeGNoYW5nZTogc2l0SW1wb3J0RXhjaGFuZ2UKKyAgICBpbXBvcnRRdWV1ZTogc2l0SW1wb3J0UXVldWUKKyAgICBpbXBvcnRrZXk6IHNpdEltcG9ydEV4Y2hhbmdlLmZhaWx1cmVJbXBvcnRLZXkKKworbG9nZ2luZzoKKyAgbGV2ZWw6CisgICAgcm9vdDogSU5GTworICAgIG9yZy5lY2xpcHNlLm9wZW5rOiBERUJVRworICAgIG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViOiBFUlJPUgorCitzZXJ2ZXI6CisgIHBvcnQ6IDkxOTUKKyAgbWF4LWh0dHAtaGVhZGVyLXNpemU6IDI2MjE0NAorICBzZXJ2bGV0OgorICAgIHNlc3Npb246CisgICAgICB0cmFja2luZy1tb2RlczogY29va2llCisKK3N3YWdnZXI6CisgIGJhc2VVcmw6IC90ZXN0LXN0b2VydW5nc2F1c2t1bmZ0LWludGVyZmFjZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NBUklTLUludGVyZmFjZS9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb25fbG9jYWxkZXYueW1sIGIvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbl9sb2NhbGRldi55bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM0MjA0OQotLS0gL2Rldi9udWxsCisrKyBiL1NBUklTLUludGVyZmFjZS9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb25fbG9jYWxkZXYueW1sCkBAIC0wLDAgKzEsODAgQEAKKyMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgIENvcHlyaWdodCAoYykgMjAxOSBDb250cmlidXRvcnMgdG8gdGhlIEVjbGlwc2UgRm91bmRhdGlvbgorIworIyAgU2VlIHRoZSBOT1RJQ0UgZmlsZShzKSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbAorIyAgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisjCisjICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyMgIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYuIDIuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyMgIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC4KKyMKKyMgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wCisjICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitzcHJpbmc6CisgIHJhYmJpdG1xOgorICAgIGhvc3Q6IGVudGRvY2tlcmdzcworICAgIHBvcnQ6IDU2NzIKKyAgICB1c2VybmFtZTogJHtHRklfUkFCQklUTVFfVVNFUk5BTUV9CisgICAgcGFzc3dvcmQ6ICR7R0ZJX1JBQkJJVE1RX1BBU1NXT1JEfQorCisgICAgIyBJbXBvcnRrYW5hbAorICAgIGltcG9ydEV4Y2hhbmdlOiBzaXRJbXBvcnRFeGNoYW5nZV9sb2NhbGRldgorICAgIGltcG9ydFF1ZXVlOiBzaXRJbXBvcnRRdWV1ZV9sb2NhbGRldgorICAgIGltcG9ydGtleTogc2l0SW1wb3J0RXhjaGFuZ2UuZmFpbHVyZUltcG9ydEtleV9sb2NhbGRldgorCitsb2dnaW5nOgorICBsZXZlbDoKKyAgICByb290OiBJTkZPCisgICAgb3JnLmVjbGlwc2Uub3Blbms6IERFQlVHCisgICAgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWI6IEVSUk9SCisgICAgCitpbmRleC1jaGFubmVsOgorICBlbmFibGVkOiB0cnVlCisKK3NlcnZlcjoKKyAgcG9ydDogOTE5NgorICBtYXgtaHR0cC1oZWFkZXItc2l6ZTogMjYyMTQ0CisgIHNlcnZsZXQ6CisgICAgc2Vzc2lvbjoKKyAgICAgIHRyYWNraW5nLW1vZGVzOiBjb29raWUKKworZmVpZ246CisgIGNsaWVudDoKKyAgICBjb25maWc6CisgICAgICBkZWZhdWx0OgorICAgICAgICBjb25uZWN0VGltZW91dDogNTAwMAorICAgICAgICByZWFkVGltZW91dDogNTAwMAorICAgICAgICBsb2dnZXJMZXZlbDogRlVMTAorCitsb2dnaW5nLmxldmVsLm9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uam9icy5zdG9lcmF1c2t1bmZ0aW50ZXJmYWNlLmFwaS5TdG9lcmF1c2t1bmZ0QXBpOiBERUJVRworCitzdG9lcnVuZ3NhdXNrdW5mdDoKKyAgYXBpVXJsOiBodHRwczovL3N0YWdlLWFwaS1vcGVyYXRvci5zdG9lcnVuZ3NhdXNrdW5mdC5kZS9hcGkvdjEuMC8KKyAgdXNlcjogJHtHRklfU1RPRVJVTkdTQVVTS1VORlRfVVNFUk5BTUV9CisgIHBhc3N3b3JkOiAke0dGSV9TVE9FUlVOR1NBVVNLVU5GVF9QQVNTV09SRH0KKyAgc2NoZWR1bGluZy1pbXBvcnQ6CisgICAgZW5hYmxlZDogZmFsc2UKKyAgICBjcm9uOiAwICovMTUgKiA/ICogKgorCitncmlkRmFpbHVyZUluZm9ybWF0aW9uOgorICBhdXRvcHVibGlzaDogZmFsc2UKKworLS0tCisKK3NwcmluZzoKKyAgcHJvZmlsZXM6IGRldi1kYgorICByYWJiaXRtcToKKyAgICBob3N0OiBlbnRkb2NrZXJnc3MKKyAgICBwb3J0OiA1NjcyCisgICAgdXNlcm5hbWU6ICR7R0ZJX1JBQkJJVE1RX1VTRVJOQU1FfQorICAgIHBhc3N3b3JkOiAke0dGSV9SQUJCSVRNUV9QQVNTV09SRH0KKworICAgICMgSW1wb3J0a2FuYWwKKyMgICAgaW1wb3J0RXhjaGFuZ2U6IHNpdEltcG9ydEV4Y2hhbmdlX2xvY2FsZGV2X3NhcmlzX3NpbW9uCisjICAgIGltcG9ydFF1ZXVlOiBzaXRJbXBvcnRRdWV1ZV9sb2NhbGRldl9zYXJpc19zaW1vbgorIyAgICBpbXBvcnRrZXk6IHNpdEltcG9ydEV4Y2hhbmdlLmZhaWx1cmVJbXBvcnRLZXlfbG9jYWxkZXZfc2ltb24KKworICAgICMgSW1wb3J0a2FuYWwKKyAgICBpbXBvcnRFeGNoYW5nZTogc2l0SW1wb3J0RXhjaGFuZ2UKKyAgICBpbXBvcnRRdWV1ZTogc2l0SW1wb3J0UXVldWUKKyAgICBpbXBvcnRrZXk6IHNpdEltcG9ydEV4Y2hhbmdlLmZhaWx1cmVJbXBvcnRLZXkKZGlmZiAtLWdpdCBhL1NBUklTLUludGVyZmFjZS9zcmMvbWFpbi9yZXNvdXJjZXMvY2F0YWxvZy5jYXQgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vcmVzb3VyY2VzL2NhdGFsb2cuY2F0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YmYzMzAKLS0tIC9kZXYvbnVsbAorKysgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vcmVzb3VyY2VzL2NhdGFsb2cuY2F0CkBAIC0wLDAgKzEgQEAKK1BVQkxJQyAiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iICJzb2FwZW5jLnhzZCIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vcmVzb3VyY2VzL2NvdW50cmllcy53c2RsIGIvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL3Jlc291cmNlcy9jb3VudHJpZXMud3NkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjU2ZGNjCi0tLSAvZGV2L251bGwKKysrIGIvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL3Jlc291cmNlcy9jb3VudHJpZXMud3NkbApAQCAtMCwwICsxLDcyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz48d3NkbDpkZWZpbml0aW9ucyB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6c2NoPSJodHRwOi8vc3ByaW5nLmlvL2d1aWRlcy9ncy1wcm9kdWNpbmctd2ViLXNlcnZpY2UiIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iIHhtbG5zOnRucz0iaHR0cDovL3NwcmluZy5pby9ndWlkZXMvZ3MtcHJvZHVjaW5nLXdlYi1zZXJ2aWNlIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zcHJpbmcuaW8vZ3VpZGVzL2dzLXByb2R1Y2luZy13ZWItc2VydmljZSI+CisgIDx3c2RsOnR5cGVzPgorICAgIDx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vc3ByaW5nLmlvL2d1aWRlcy9ncy1wcm9kdWNpbmctd2ViLXNlcnZpY2UiPgorCisgICAgPHhzOmVsZW1lbnQgbmFtZT0iZ2V0Q291bnRyeVJlcXVlc3QiPgorICAgICAgICA8eHM6Y29tcGxleFR5cGU+CisgICAgICAgICAgICA8eHM6c2VxdWVuY2U+CisgICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIi8+CisgICAgICAgICAgICA8L3hzOnNlcXVlbmNlPgorICAgICAgICA8L3hzOmNvbXBsZXhUeXBlPgorICAgIDwveHM6ZWxlbWVudD4KKworICAgIDx4czplbGVtZW50IG5hbWU9ImdldENvdW50cnlSZXNwb25zZSI+CisgICAgICAgIDx4czpjb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDx4czpzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJjb3VudHJ5IiB0eXBlPSJ0bnM6Y291bnRyeSIvPgorICAgICAgICAgICAgPC94czpzZXF1ZW5jZT4KKyAgICAgICAgPC94czpjb21wbGV4VHlwZT4KKyAgICA8L3hzOmVsZW1lbnQ+CisKKyAgICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iY291bnRyeSI+CisgICAgICAgIDx4czpzZXF1ZW5jZT4KKyAgICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Im5hbWUiIHR5cGU9InhzOnN0cmluZyIvPgorICAgICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0icG9wdWxhdGlvbiIgdHlwZT0ieHM6aW50Ii8+CisgICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJjYXBpdGFsIiB0eXBlPSJ4czpzdHJpbmciLz4KKyAgICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9ImN1cnJlbmN5IiB0eXBlPSJ0bnM6Y3VycmVuY3kiLz4KKyAgICAgICAgPC94czpzZXF1ZW5jZT4KKyAgICA8L3hzOmNvbXBsZXhUeXBlPgorCisgICAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iY3VycmVuY3kiPgorICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIj4KKyAgICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iR0JQIi8+CisgICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkVVUiIvPgorICAgICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJQTE4iLz4KKyAgICAgICAgPC94czpyZXN0cmljdGlvbj4KKyAgICA8L3hzOnNpbXBsZVR5cGU+Cis8L3hzOnNjaGVtYT4KKyAgPC93c2RsOnR5cGVzPgorICA8d3NkbDptZXNzYWdlIG5hbWU9ImdldENvdW50cnlSZXNwb25zZSI+CisgICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6Z2V0Q291bnRyeVJlc3BvbnNlIiBuYW1lPSJnZXRDb3VudHJ5UmVzcG9uc2UiPgorICAgIDwvd3NkbDpwYXJ0PgorICA8L3dzZGw6bWVzc2FnZT4KKyAgPHdzZGw6bWVzc2FnZSBuYW1lPSJnZXRDb3VudHJ5UmVxdWVzdCI+CisgICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6Z2V0Q291bnRyeVJlcXVlc3QiIG5hbWU9ImdldENvdW50cnlSZXF1ZXN0Ij4KKyAgICA8L3dzZGw6cGFydD4KKyAgPC93c2RsOm1lc3NhZ2U+CisgIDx3c2RsOnBvcnRUeXBlIG5hbWU9IkNvdW50cmllc1BvcnQiPgorICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJnZXRDb3VudHJ5Ij4KKyAgICAgIDx3c2RsOmlucHV0IG1lc3NhZ2U9InRuczpnZXRDb3VudHJ5UmVxdWVzdCIgbmFtZT0iZ2V0Q291bnRyeVJlcXVlc3QiPgorICAgIDwvd3NkbDppbnB1dD4KKyAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6Z2V0Q291bnRyeVJlc3BvbnNlIiBuYW1lPSJnZXRDb3VudHJ5UmVzcG9uc2UiPgorICAgIDwvd3NkbDpvdXRwdXQ+CisgICAgPC93c2RsOm9wZXJhdGlvbj4KKyAgPC93c2RsOnBvcnRUeXBlPgorICA8d3NkbDpiaW5kaW5nIG5hbWU9IkNvdW50cmllc1BvcnRTb2FwMTEiIHR5cGU9InRuczpDb3VudHJpZXNQb3J0Ij4KKyAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiLz4KKyAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iZ2V0Q291bnRyeSI+CisgICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+CisgICAgICA8d3NkbDppbnB1dCBuYW1lPSJnZXRDb3VudHJ5UmVxdWVzdCI+CisgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+CisgICAgICA8L3dzZGw6aW5wdXQ+CisgICAgICA8d3NkbDpvdXRwdXQgbmFtZT0iZ2V0Q291bnRyeVJlc3BvbnNlIj4KKyAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4KKyAgICAgIDwvd3NkbDpvdXRwdXQ+CisgICAgPC93c2RsOm9wZXJhdGlvbj4KKyAgPC93c2RsOmJpbmRpbmc+CisgIDx3c2RsOnNlcnZpY2UgbmFtZT0iQ291bnRyaWVzUG9ydFNlcnZpY2UiPgorICAgIDx3c2RsOnBvcnQgYmluZGluZz0idG5zOkNvdW50cmllc1BvcnRTb2FwMTEiIG5hbWU9IkNvdW50cmllc1BvcnRTb2FwMTEiPgorICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo4MDgwL3dzIi8+CisgICAgPC93c2RsOnBvcnQ+CisgIDwvd3NkbDpzZXJ2aWNlPgorPC93c2RsOmRlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NBUklTLUludGVyZmFjZS9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nYmFjay1zcHJpbmcueG1sIGIvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL3Jlc291cmNlcy9sb2diYWNrLXNwcmluZy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdjYWNmYgotLS0gL2Rldi9udWxsCisrKyBiL1NBUklTLUludGVyZmFjZS9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nYmFjay1zcHJpbmcueG1sCkBAIC0wLDAgKzEsNTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y29uZmlndXJhdGlvbj4KKworICAgIDxwcm9wZXJ0eSBuYW1lPSJMT0dTIiB2YWx1ZT0iLi9sb2dzIi8+CisKKyAgICA8YXBwZW5kZXIgbmFtZT0iQ29uc29sZSIgY2xhc3M9ImNoLnFvcy5sb2diYWNrLmNvcmUuQ29uc29sZUFwcGVuZGVyIj4KKyAgICAgICAgPGxheW91dCBjbGFzcz0iY2gucW9zLmxvZ2JhY2suY2xhc3NpYy5QYXR0ZXJuTGF5b3V0Ij4KKyAgICAgICAgICAgIDxQYXR0ZXJuPgorICAgICAgICAgICAgICAgICVibGFjayglZHtJU084NjAxfSkgJWhpZ2hsaWdodCglLTVsZXZlbCkgWyVibHVlKCV0KV0gJXllbGxvdyglY3s2MH0pOiAlbXNnJW4ldGhyb3dhYmxlCisgICAgICAgICAgICA8L1BhdHRlcm4+CisgICAgICAgIDwvbGF5b3V0PgorICAgIDwvYXBwZW5kZXI+CisKKyAgICA8YXBwZW5kZXIgbmFtZT0iUm9sbGluZ0ZpbGVTdGQiIGNsYXNzPSJjaC5xb3MubG9nYmFjay5jb3JlLnJvbGxpbmcuUm9sbGluZ0ZpbGVBcHBlbmRlciI+CisgICAgICAgIDxmaWxlPiR7TE9HU30vc2FyaXNJbnRlcmZhY2UubG9nPC9maWxlPgorICAgICAgICA8ZW5jb2RlciBjbGFzcz0iY2gucW9zLmxvZ2JhY2suY2xhc3NpYy5lbmNvZGVyLlBhdHRlcm5MYXlvdXRFbmNvZGVyIj4KKyAgICAgICAgICAgIDxQYXR0ZXJuPiVkICVwICVjezYwfSBbJXRdICVtJW48L1BhdHRlcm4+CisgICAgICAgIDwvZW5jb2Rlcj4KKworICAgICAgICA8cm9sbGluZ1BvbGljeSBjbGFzcz0iY2gucW9zLmxvZ2JhY2suY29yZS5yb2xsaW5nLlRpbWVCYXNlZFJvbGxpbmdQb2xpY3kiPgorICAgICAgICAgICAgPGZpbGVOYW1lUGF0dGVybj4ke0xPR1N9L2FyY2hpdmVkL3NhcmlzSW50ZXJmYWNlLSVke3l5eXktTU0tZGR9Lmd6PC9maWxlTmFtZVBhdHRlcm4+CisgICAgICAgICAgICA8TWF4SGlzdG9yeT4zMDwvTWF4SGlzdG9yeT4KKyAgICAgICAgICAgIDxjbGVhbkhpc3RvcnlPblN0YXJ0PnRydWU8L2NsZWFuSGlzdG9yeU9uU3RhcnQ+CisgICAgICAgIDwvcm9sbGluZ1BvbGljeT4KKyAgICA8L2FwcGVuZGVyPgorCisgICAgPGFwcGVuZGVyIG5hbWU9IlJvbGxpbmdGaWxlRmVpZ24iIGNsYXNzPSJjaC5xb3MubG9nYmFjay5jb3JlLnJvbGxpbmcuUm9sbGluZ0ZpbGVBcHBlbmRlciI+CisgICAgICAgIDxmaWxlPiR7TE9HU30vZmVpZ25jbGllbnQubG9nPC9maWxlPgorICAgICAgICA8ZW5jb2RlciBjbGFzcz0iY2gucW9zLmxvZ2JhY2suY2xhc3NpYy5lbmNvZGVyLlBhdHRlcm5MYXlvdXRFbmNvZGVyIj4KKyAgICAgICAgICAgIDxQYXR0ZXJuPiVkICVwICVjezYwfSBbJXRdICVtJW48L1BhdHRlcm4+CisgICAgICAgIDwvZW5jb2Rlcj4KKworICAgICAgICA8cm9sbGluZ1BvbGljeSBjbGFzcz0iY2gucW9zLmxvZ2JhY2suY29yZS5yb2xsaW5nLlRpbWVCYXNlZFJvbGxpbmdQb2xpY3kiPgorICAgICAgICAgICAgPGZpbGVOYW1lUGF0dGVybj4ke0xPR1N9L2FyY2hpdmVkL2ZlaWduY2xpZW50LSVke3l5eXktTU0tZGR9Lmd6PC9maWxlTmFtZVBhdHRlcm4+CisgICAgICAgICAgICA8TWF4SGlzdG9yeT4zMDwvTWF4SGlzdG9yeT4KKyAgICAgICAgICAgIDxjbGVhbkhpc3RvcnlPblN0YXJ0PnRydWU8L2NsZWFuSGlzdG9yeU9uU3RhcnQ+CisgICAgICAgIDwvcm9sbGluZ1BvbGljeT4KKyAgICA8L2FwcGVuZGVyPgorCisgICAgPCEtLSBMT0cgZXZlcnl0aGluZyBhdCBJTkZPIGxldmVsIC0tPgorICAgIDxyb290IGxldmVsPSJpbmZvIj4KKyAgICAgICAgPGFwcGVuZGVyLXJlZiByZWY9IlJvbGxpbmdGaWxlU3RkIi8+CisgICAgICAgIDxhcHBlbmRlci1yZWYgcmVmPSJDb25zb2xlIi8+CisgICAgPC9yb290PgorCisgICAgPCEtLSBMT0cgImNvbS5iYWVsZHVuZ29yZy5lY2xpcHNlLm9wZW5rLmNvbnRhY3RiYXNlZGF0YSoiIGF0IElORk8gbGV2ZWwgLS0+CisgICAgPGxvZ2dlciBuYW1lPSJvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhcmlzaW50ZXJmYWNlIiBhZGRpdGl2aXR5PSJmYWxzZSI+CisgICAgICAgIDxhcHBlbmRlci1yZWYgcmVmPSJSb2xsaW5nRmlsZVN0ZCIvPgorICAgICAgICA8YXBwZW5kZXItcmVmIHJlZj0iQ29uc29sZSIvPgorICAgIDwvbG9nZ2VyPgorCisgICAgPGxvZ2dlciBuYW1lPSJvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhcmlzaW50ZXJmYWNlLmFwaS5TdG9lcnVuZ3NhdXNrdW5mdEFwaSIgbGV2ZWw9ImluZm8iIGFkZGl0aXZpdHk9ImZhbHNlIj4KKyAgICAgICAgPGFwcGVuZGVyLXJlZiByZWY9IlJvbGxpbmdGaWxlRmVpZ24iLz4KKyAgICA8L2xvZ2dlcj4KKworPC9jb25maWd1cmF0aW9uPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NBUklTLUludGVyZmFjZS9zcmMvbWFpbi9yZXNvdXJjZXMvbWVzc2FnZXMucHJvcGVydGllcyBiL1NBUklTLUludGVyZmFjZS9zcmMvbWFpbi9yZXNvdXJjZXMvbWVzc2FnZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGIzYjExCi0tLSAvZGV2L251bGwKKysrIGIvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL3Jlc291cmNlcy9tZXNzYWdlcy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNSBAQAorI0ZlaGxlcm1lbGR1bmdlbgorY291bGQubm90LnB1c2gubWVzc2FnZT1EYXMgT2JqZWt0IGtvbm50ZSBuaWNodCBhbiBSYWJiaXRNUSBnZXNlbmRldCB3ZXJkZW4uCisKKworCmRpZmYgLS1naXQgYS9TQVJJUy1JbnRlcmZhY2Uvc3JjL21haW4vcmVzb3VyY2VzL3NvYXBlbmMueHNkIGIvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL3Jlc291cmNlcy9zb2FwZW5jLnhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTk3YmYyCi0tLSAvZGV2L251bGwKKysrIGIvU0FSSVMtSW50ZXJmYWNlL3NyYy9tYWluL3Jlc291cmNlcy9zb2FwZW5jLnhzZApAQCAtMCwwICsxLDUzNiBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnID8+CisKKzwhLS0gU2NoZW1hIGZvciB0aGUgU09BUC8xLjEgZW5jb2RpbmcKKworUG9ydGlvbnMgwqkgMjAwMSBEZXZlbG9wTWVudG9yLiAKK8KpIDIwMDEgVzNDIChNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0IGVuIEF1dG9tYXRpcXVlLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgCisgCitUaGlzIGRvY3VtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBXM0MgU29mdHdhcmUgTGljZW5zZSBbMV0gYXMgZGVzY3JpYmVkIGluIHRoZSBGQVEgWzJdLgorWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvY29weXJpZ2h0LXNvZnR3YXJlLTE5OTgwNzIwCitbMl0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC9JUFItRkFRLTIwMDAwNjIwLmh0bWwjRFREIAorQnkgb2J0YWluaW5nLCB1c2luZyBhbmQvb3IgY29weWluZyB0aGlzIHdvcmssIHlvdSAodGhlIGxpY2Vuc2VlKSBhZ3JlZSB0aGF0IHlvdSBoYXZlIHJlYWQsIHVuZGVyc3Rvb2QsIGFuZCB3aWxsIGNvbXBseSB3aXRoIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnM6CisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAgZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBvciByb3lhbHR5IGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgb24gQUxMIGNvcGllcyBvZiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gb3IgcG9ydGlvbnMgdGhlcmVvZiwgaW5jbHVkaW5nIG1vZGlmaWNhdGlvbnMsIHRoYXQgeW91IG1ha2U6CisKKzEuICBUaGUgZnVsbCB0ZXh0IG9mIHRoaXMgTk9USUNFIGluIGEgbG9jYXRpb24gdmlld2FibGUgdG8gdXNlcnMgb2YgdGhlIHJlZGlzdHJpYnV0ZWQgb3IgZGVyaXZhdGl2ZSB3b3JrLiAKKworMi4gIEFueSBwcmUtZXhpc3RpbmcgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGRpc2NsYWltZXJzLCBub3RpY2VzLCBvciB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gSWYgbm9uZSBleGlzdCwgYSBzaG9ydCBub3RpY2Ugb2YgdGhlIGZvbGxvd2luZyBmb3JtIChoeXBlcnRleHQgaXMgcHJlZmVycmVkLCB0ZXh0IGlzIHBlcm1pdHRlZCkgc2hvdWxkIGJlIHVzZWQgd2l0aGluIHRoZSBib2R5IG9mIGFueSByZWRpc3RyaWJ1dGVkIG9yIGRlcml2YXRpdmUgY29kZTogIkNvcHlyaWdodCDCqSAyMDAxIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIChNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0IGVuIEF1dG9tYXRpcXVlLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgUmlnaHRzIFJlc2VydmVkLiBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLyIgCisKKzMuICBOb3RpY2Ugb2YgYW55IGNoYW5nZXMgb3IgbW9kaWZpY2F0aW9ucyB0byB0aGUgVzNDIGZpbGVzLCBpbmNsdWRpbmcgdGhlIGRhdGUgY2hhbmdlcyB3ZXJlIG1hZGUuIChXZSByZWNvbW1lbmQgeW91IHByb3ZpZGUgVVJJcyB0byB0aGUgbG9jYXRpb24gZnJvbSB3aGljaCB0aGUgY29kZSBpcyBkZXJpdmVkLikgICAKKworT3JpZ2luYWwgVzNDIGZpbGVzOyBodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA2L3NvYXAtZW5jb2RpbmcKK0NoYW5nZXMgbWFkZTogCisgICAgIC0gcmV2ZXJ0ZWQgbmFtZXNwYWNlIHRvIGh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvCisgICAgIC0gcmV2ZXJ0ZWQgcm9vdCB0byBvbmx5IGFsbG93IDAgYW5kIDEgYXMgbGV4aWNhbCB2YWx1ZXMKKwkgLSByZW1vdmVkIGRlZmF1bHQgdmFsdWUgZnJvbSByb290IGF0dHJpYnV0ZSBkZWNsYXJhdGlvbgorCitUSElTIFNPRlRXQVJFIEFORCBET0NVTUVOVEFUSU9OIElTIFBST1ZJREVEICJBUyBJUywiIEFORCBDT1BZUklHSFQgSE9MREVSUyBNQUtFIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8sIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEUgVVNFIE9GIFRIRSBTT0ZUV0FSRSBPUiBET0NVTUVOVEFUSU9OIFdJTEwgTk9UIElORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBQQVRFTlRTLCBDT1BZUklHSFRTLCBUUkFERU1BUktTIE9SIE9USEVSIFJJR0hUUy4KKworQ09QWVJJR0hUIEhPTERFUlMgV0lMTCBOT1QgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgQU5ZIFVTRSBPRiBUSEUgU09GVFdBUkUgT1IgRE9DVU1FTlRBVElPTi4KKworVGhlIG5hbWUgYW5kIHRyYWRlbWFya3Mgb2YgY29weXJpZ2h0IGhvbGRlcnMgbWF5IE5PVCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uIFRpdGxlIHRvIGNvcHlyaWdodCBpbiB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIHdpbGwgYXQgYWxsIHRpbWVzIHJlbWFpbiB3aXRoIGNvcHlyaWdodCBob2xkZXJzLgorCistLT4KKzx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgorICAgICAgICAgICB4bWxuczp0bnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIgorICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiA+CisgICAgICAgIAorIDx4czphdHRyaWJ1dGUgbmFtZT0icm9vdCIgPgorICAgPHhzOmFubm90YXRpb24+CisgICAgIDx4czpkb2N1bWVudGF0aW9uPgorCSAgICdyb290JyBjYW4gYmUgdXNlZCB0byBkaXN0aW5ndWlzaCBzZXJpYWxpemF0aW9uIHJvb3RzIGZyb20gb3RoZXIKKyAgICAgICBlbGVtZW50cyB0aGF0IGFyZSBwcmVzZW50IGluIGEgc2VyaWFsaXphdGlvbiBidXQgYXJlIG5vdCByb290cyBvZgorICAgICAgIGEgc2VyaWFsaXplZCB2YWx1ZSBncmFwaCAKKwkgPC94czpkb2N1bWVudGF0aW9uPgorICAgPC94czphbm5vdGF0aW9uPgorICAgPHhzOnNpbXBsZVR5cGU+CisgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSd4czpib29sZWFuJz4KKwkgICA8eHM6cGF0dGVybiB2YWx1ZT0nMHwxJyAvPgorCSA8L3hzOnJlc3RyaWN0aW9uPgorICAgPC94czpzaW1wbGVUeXBlPgorIDwveHM6YXR0cmlidXRlPgorCisgIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJjb21tb25BdHRyaWJ1dGVzIiA+CisgICAgPHhzOmFubm90YXRpb24+CisJICA8eHM6ZG9jdW1lbnRhdGlvbj4KKwkgICAgQXR0cmlidXRlcyBjb21tb24gdG8gYWxsIGVsZW1lbnRzIHRoYXQgZnVuY3Rpb24gYXMgYWNjZXNzb3JzIG9yIAorICAgICAgICByZXByZXNlbnQgaW5kZXBlbmRlbnQgKG11bHRpLXJlZikgdmFsdWVzLiAgVGhlIGhyZWYgYXR0cmlidXRlIGlzCisgICAgICAgIGludGVuZGVkIHRvIGJlIHVzZWQgaW4gYSBtYW5uZXIgbGlrZSBDT05SRUYuICBUaGF0IGlzLCB0aGUgZWxlbWVudAorICAgICAgICBjb250ZW50IHNob3VsZCBiZSBlbXB0eSBpZmYgdGhlIGhyZWYgYXR0cmlidXRlIGFwcGVhcnMKKwkgIDwveHM6ZG9jdW1lbnRhdGlvbj4KKwk8L3hzOmFubm90YXRpb24+CisgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ieHM6SUQiIC8+CisgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJocmVmIiB0eXBlPSJ4czphbnlVUkkiIC8+CisgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiAvPgorICA8L3hzOmF0dHJpYnV0ZUdyb3VwPgorCisgIDwhLS0gR2xvYmFsIEF0dHJpYnV0ZXMuICBUaGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgYXJlIGludGVuZGVkIHRvIGJlIHVzYWJsZSB2aWEgcXVhbGlmaWVkIGF0dHJpYnV0ZSBuYW1lcyBvbiBhbnkgY29tcGxleCB0eXBlIHJlZmVyZW5jaW5nIHRoZW0uIC0tPgorICAgICAgIAorICA8IS0tIEFycmF5IGF0dHJpYnV0ZXMuIE5lZWRlZCB0byBnaXZlIHRoZSB0eXBlIGFuZCBkaW1lbnNpb25zIG9mIGFuIGFycmF5J3MgY29udGVudHMsIGFuZCB0aGUgb2Zmc2V0IGZvciBwYXJ0aWFsbHktdHJhbnNtaXR0ZWQgYXJyYXlzLiAtLT4KKyAgIAorICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJhcnJheUNvb3JkaW5hdGUiID4KKyAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIiAvPgorICA8L3hzOnNpbXBsZVR5cGU+CisgICAgICAgICAgCisgIDx4czphdHRyaWJ1dGUgbmFtZT0iYXJyYXlUeXBlIiB0eXBlPSJ4czpzdHJpbmciIC8+CisgIDx4czphdHRyaWJ1dGUgbmFtZT0ib2Zmc2V0IiB0eXBlPSJ0bnM6YXJyYXlDb29yZGluYXRlIiAvPgorICAKKyAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFycmF5QXR0cmlidXRlcyIgPgorICAgIDx4czphdHRyaWJ1dGUgcmVmPSJ0bnM6YXJyYXlUeXBlIiAvPgorICAgIDx4czphdHRyaWJ1dGUgcmVmPSJ0bnM6b2Zmc2V0IiAvPgorICA8L3hzOmF0dHJpYnV0ZUdyb3VwPiAgICAKKyAgCisgIDx4czphdHRyaWJ1dGUgbmFtZT0icG9zaXRpb24iIHR5cGU9InRuczphcnJheUNvb3JkaW5hdGUiIC8+IAorICAKKyAgPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9ImFycmF5TWVtYmVyQXR0cmlidXRlcyIgPgorICAgIDx4czphdHRyaWJ1dGUgcmVmPSJ0bnM6cG9zaXRpb24iIC8+CisgIDwveHM6YXR0cmlidXRlR3JvdXA+ICAgIAorCisgIDx4czpncm91cCBuYW1lPSJBcnJheSIgPgorICAgIDx4czpzZXF1ZW5jZT4KKyAgICAgIDx4czphbnkgbmFtZXNwYWNlPSIjI2FueSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIC8+CisJPC94czpzZXF1ZW5jZT4KKyAgPC94czpncm91cD4KKworICA8eHM6ZWxlbWVudCBuYW1lPSJBcnJheSIgdHlwZT0idG5zOkFycmF5IiAvPgorICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iQXJyYXkiID4KKyAgICA8eHM6YW5ub3RhdGlvbj4KKwkgIDx4czpkb2N1bWVudGF0aW9uPgorCSAgICdBcnJheScgaXMgYSBjb21wbGV4IHR5cGUgZm9yIGFjY2Vzc29ycyBpZGVudGlmaWVkIGJ5IHBvc2l0aW9uIAorCSAgPC94czpkb2N1bWVudGF0aW9uPgorCTwveHM6YW5ub3RhdGlvbj4KKyAgICA8eHM6Z3JvdXAgcmVmPSJ0bnM6QXJyYXkiIG1pbk9jY3Vycz0iMCIgLz4KKyAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0bnM6YXJyYXlBdHRyaWJ1dGVzIiAvPgorICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRuczpjb21tb25BdHRyaWJ1dGVzIiAvPgorICA8L3hzOmNvbXBsZXhUeXBlPiAKKworICA8IS0tICdTdHJ1Y3QnIGlzIGEgY29tcGxleCB0eXBlIGZvciBhY2Nlc3NvcnMgaWRlbnRpZmllZCBieSBuYW1lLiAKKyAgICAgICBDb25zdHJhaW50OiBObyBlbGVtZW50IG1heSBiZSBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgYW55IG90aGVyLAorICAgICAgIG5vciBtYXkgYW55IGVsZW1lbnQgaGF2ZSBhIG1heE9jY3VycyA+IDEuIC0tPgorICAgCisgIDx4czplbGVtZW50IG5hbWU9IlN0cnVjdCIgdHlwZT0idG5zOlN0cnVjdCIgLz4KKworICA8eHM6Z3JvdXAgbmFtZT0iU3RydWN0IiA+CisgICAgPHhzOnNlcXVlbmNlPgorICAgICAgPHhzOmFueSBuYW1lc3BhY2U9IiMjYW55IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiBwcm9jZXNzQ29udGVudHM9ImxheCIgLz4KKwk8L3hzOnNlcXVlbmNlPgorICA8L3hzOmdyb3VwPgorCisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJTdHJ1Y3QiID4KKyAgICA8eHM6Z3JvdXAgcmVmPSJ0bnM6U3RydWN0IiBtaW5PY2N1cnM9IjAiIC8+CisgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG5zOmNvbW1vbkF0dHJpYnV0ZXMiLz4KKyAgPC94czpjb21wbGV4VHlwZT4gCisKKyAgPCEtLSAnQmFzZTY0JyBjYW4gYmUgdXNlZCB0byBzZXJpYWxpemUgYmluYXJ5IGRhdGEgdXNpbmcgYmFzZTY0IGVuY29kaW5nCisgICAgICAgYXMgZGVmaW5lZCBpbiBSRkMyMDQ1IGJ1dCB3aXRob3V0IHRoZSBNSU1FIGxpbmUgbGVuZ3RoIGxpbWl0YXRpb24uIC0tPgorCisgIDx4czpzaW1wbGVUeXBlIG5hbWU9ImJhc2U2NCIgPgorICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpiYXNlNjRCaW5hcnkiIC8+CisgIDwveHM6c2ltcGxlVHlwZT4KKworIDwhLS0gRWxlbWVudCBkZWNsYXJhdGlvbnMgY29ycmVzcG9uZGluZyB0byBlYWNoIG9mIHRoZSBzaW1wbGUgdHlwZXMgaW4gdGhlIAorICAgICAgWE1MIFNjaGVtYXMgU3BlY2lmaWNhdGlvbi4gLS0+CisKKyAgPHhzOmVsZW1lbnQgbmFtZT0iZHVyYXRpb24iIHR5cGU9InRuczpkdXJhdGlvbiIgLz4KKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImR1cmF0aW9uIiA+CisgICAgPHhzOnNpbXBsZUNvbnRlbnQ+CisgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOmR1cmF0aW9uIiA+CisgICAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRuczpjb21tb25BdHRyaWJ1dGVzIiAvPgorICAgICAgPC94czpleHRlbnNpb24+CisgICAgPC94czpzaW1wbGVDb250ZW50PgorICA8L3hzOmNvbXBsZXhUeXBlPgorCisgIDx4czplbGVtZW50IG5hbWU9ImRhdGVUaW1lIiB0eXBlPSJ0bnM6ZGF0ZVRpbWUiIC8+CisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJkYXRlVGltZSIgPgorICAgIDx4czpzaW1wbGVDb250ZW50PgorICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czpkYXRlVGltZSIgPgorICAgICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0bnM6Y29tbW9uQXR0cmlidXRlcyIgLz4KKyAgICAgIDwveHM6ZXh0ZW5zaW9uPgorICAgIDwveHM6c2ltcGxlQ29udGVudD4KKyAgPC94czpjb21wbGV4VHlwZT4KKworCisKKyAgPHhzOmVsZW1lbnQgbmFtZT0iTk9UQVRJT04iIHR5cGU9InRuczpOT1RBVElPTiIgLz4KKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik5PVEFUSU9OIiA+CisgICAgPHhzOnNpbXBsZUNvbnRlbnQ+CisgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOlFOYW1lIiA+CisgICAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRuczpjb21tb25BdHRyaWJ1dGVzIiAvPgorICAgICAgPC94czpleHRlbnNpb24+CisgICAgPC94czpzaW1wbGVDb250ZW50PgorICA8L3hzOmNvbXBsZXhUeXBlPgorICAKKworICA8eHM6ZWxlbWVudCBuYW1lPSJ0aW1lIiB0eXBlPSJ0bnM6dGltZSIgLz4KKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRpbWUiID4KKyAgICA8eHM6c2ltcGxlQ29udGVudD4KKyAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6dGltZSIgPgorICAgICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0bnM6Y29tbW9uQXR0cmlidXRlcyIgLz4KKyAgICAgIDwveHM6ZXh0ZW5zaW9uPgorICAgIDwveHM6c2ltcGxlQ29udGVudD4KKyAgPC94czpjb21wbGV4VHlwZT4KKworICA8eHM6ZWxlbWVudCBuYW1lPSJkYXRlIiB0eXBlPSJ0bnM6ZGF0ZSIgLz4KKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImRhdGUiID4KKyAgICA8eHM6c2ltcGxlQ29udGVudD4KKyAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6ZGF0ZSIgPgorICAgICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0bnM6Y29tbW9uQXR0cmlidXRlcyIgLz4KKyAgICAgIDwveHM6ZXh0ZW5zaW9uPgorICAgIDwveHM6c2ltcGxlQ29udGVudD4KKyAgPC94czpjb21wbGV4VHlwZT4KKworICA8eHM6ZWxlbWVudCBuYW1lPSJnWWVhck1vbnRoIiB0eXBlPSJ0bnM6Z1llYXJNb250aCIgLz4KKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImdZZWFyTW9udGgiID4KKyAgICA8eHM6c2ltcGxlQ29udGVudD4KKyAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6Z1llYXJNb250aCIgPgorICAgICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0bnM6Y29tbW9uQXR0cmlidXRlcyIgLz4KKyAgICAgIDwveHM6ZXh0ZW5zaW9uPgorICAgIDwveHM6c2ltcGxlQ29udGVudD4KKyAgPC94czpjb21wbGV4VHlwZT4KKworICA8eHM6ZWxlbWVudCBuYW1lPSJnWWVhciIgdHlwZT0idG5zOmdZZWFyIiAvPgorICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZ1llYXIiID4KKyAgICA8eHM6c2ltcGxlQ29udGVudD4KKyAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6Z1llYXIiID4KKyAgICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG5zOmNvbW1vbkF0dHJpYnV0ZXMiIC8+CisgICAgICA8L3hzOmV4dGVuc2lvbj4KKyAgICA8L3hzOnNpbXBsZUNvbnRlbnQ+CisgIDwveHM6Y29tcGxleFR5cGU+CisKKyAgPHhzOmVsZW1lbnQgbmFtZT0iZ01vbnRoRGF5IiB0eXBlPSJ0bnM6Z01vbnRoRGF5IiAvPgorICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZ01vbnRoRGF5IiA+CisgICAgPHhzOnNpbXBsZUNvbnRlbnQ+CisgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOmdNb250aERheSIgPgorICAgICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0bnM6Y29tbW9uQXR0cmlidXRlcyIgLz4KKyAgICAgIDwveHM6ZXh0ZW5zaW9uPgorICAgIDwveHM6c2ltcGxlQ29udGVudD4KKyAgPC94czpjb21wbGV4VHlwZT4KKworICA8eHM6ZWxlbWVudCBuYW1lPSJnRGF5IiB0eXBlPSJ0bnM6Z0RheSIgLz4KKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImdEYXkiID4KKyAgICA8eHM6c2ltcGxlQ29udGVudD4KKyAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6Z0RheSIgPgorICAgICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0bnM6Y29tbW9uQXR0cmlidXRlcyIgLz4KKyAgICAgIDwveHM6ZXh0ZW5zaW9uPgorICAgIDwveHM6c2ltcGxlQ29udGVudD4KKyAgPC94czpjb21wbGV4VHlwZT4KKworICA8eHM6ZWxlbWVudCBuYW1lPSJnTW9udGgiIHR5cGU9InRuczpnTW9udGgiIC8+CisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJnTW9udGgiID4KKyAgICA8eHM6c2ltcGxlQ29udGVudD4KKyAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6Z01vbnRoIiA+CisgICAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRuczpjb21tb25BdHRyaWJ1dGVzIiAvPgorICAgICAgPC94czpleHRlbnNpb24+CisgICAgPC94czpzaW1wbGVDb250ZW50PgorICA8L3hzOmNvbXBsZXhUeXBlPgorICAKKyAgPHhzOmVsZW1lbnQgbmFtZT0iYm9vbGVhbiIgdHlwZT0idG5zOmJvb2xlYW4iIC8+CisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJib29sZWFuIiA+CisgICAgPHhzOnNpbXBsZUNvbnRlbnQ+CisgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOmJvb2xlYW4iID4KKyAgICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG5zOmNvbW1vbkF0dHJpYnV0ZXMiIC8+CisgICAgICA8L3hzOmV4dGVuc2lvbj4KKyAgICA8L3hzOnNpbXBsZUNvbnRlbnQ+CisgIDwveHM6Y29tcGxleFR5cGU+CisKKyAgPHhzOmVsZW1lbnQgbmFtZT0iYmFzZTY0QmluYXJ5IiB0eXBlPSJ0bnM6YmFzZTY0QmluYXJ5IiAvPgorICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iYmFzZTY0QmluYXJ5IiA+CisgICAgPHhzOnNpbXBsZUNvbnRlbnQ+CisgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOmJhc2U2NEJpbmFyeSIgPgorICAgICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0bnM6Y29tbW9uQXR0cmlidXRlcyIgLz4KKyAgICAgIDwveHM6ZXh0ZW5zaW9uPgorICAgIDwveHM6c2ltcGxlQ29udGVudD4KKyAgPC94czpjb21wbGV4VHlwZT4KKworICA8eHM6ZWxlbWVudCBuYW1lPSJoZXhCaW5hcnkiIHR5cGU9InRuczpoZXhCaW5hcnkiIC8+CisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJoZXhCaW5hcnkiID4KKyAgICA8eHM6c2ltcGxlQ29udGVudD4KKyAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czpoZXhCaW5hcnkiID4KKyAgICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0bnM6Y29tbW9uQXR0cmlidXRlcyIgLz4KKyAgICAgPC94czpleHRlbnNpb24+CisgICAgPC94czpzaW1wbGVDb250ZW50PgorICA8L3hzOmNvbXBsZXhUeXBlPgorCisgIDx4czplbGVtZW50IG5hbWU9ImZsb2F0IiB0eXBlPSJ0bnM6ZmxvYXQiIC8+CisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJmbG9hdCIgPgorICAgIDx4czpzaW1wbGVDb250ZW50PgorICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czpmbG9hdCIgPgorICAgICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0bnM6Y29tbW9uQXR0cmlidXRlcyIgLz4KKyAgICAgIDwveHM6ZXh0ZW5zaW9uPgorICAgIDwveHM6c2ltcGxlQ29udGVudD4KKyAgPC94czpjb21wbGV4VHlwZT4KKworICA8eHM6ZWxlbWVudCBuYW1lPSJkb3VibGUiIHR5cGU9InRuczpkb3VibGUiIC8+CisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJkb3VibGUiID4KKyAgICA8eHM6c2ltcGxlQ29udGVudD4KKyAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6ZG91YmxlIiA+CisgICAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRuczpjb21tb25BdHRyaWJ1dGVzIiAvPgorICAgICAgPC94czpleHRlbnNpb24+CisgICAgPC94czpzaW1wbGVDb250ZW50PgorICA8L3hzOmNvbXBsZXhUeXBlPgorCisgIDx4czplbGVtZW50IG5hbWU9ImFueVVSSSIgdHlwZT0idG5zOmFueVVSSSIgLz4KKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImFueVVSSSIgPgorICAgIDx4czpzaW1wbGVDb250ZW50PgorICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czphbnlVUkkiID4KKyAgICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG5zOmNvbW1vbkF0dHJpYnV0ZXMiIC8+CisgICAgICA8L3hzOmV4dGVuc2lvbj4KKyAgICA8L3hzOnNpbXBsZUNvbnRlbnQ+CisgIDwveHM6Y29tcGxleFR5cGU+CisKKyAgPHhzOmVsZW1lbnQgbmFtZT0iUU5hbWUiIHR5cGU9InRuczpRTmFtZSIgLz4KKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IlFOYW1lIiA+CisgICAgPHhzOnNpbXBsZUNvbnRlbnQ+CisgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOlFOYW1lIiA+CisgICAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRuczpjb21tb25BdHRyaWJ1dGVzIiAvPgorICAgICAgPC94czpleHRlbnNpb24+CisgICAgPC94czpzaW1wbGVDb250ZW50PgorICA8L3hzOmNvbXBsZXhUeXBlPgorCisgIAorICA8eHM6ZWxlbWVudCBuYW1lPSJzdHJpbmciIHR5cGU9InRuczpzdHJpbmciIC8+CisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJzdHJpbmciID4KKyAgICA8eHM6c2ltcGxlQ29udGVudD4KKyAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6c3RyaW5nIiA+CisgICAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRuczpjb21tb25BdHRyaWJ1dGVzIiAvPgorICAgICAgPC94czpleHRlbnNpb24+CisgICAgPC94czpzaW1wbGVDb250ZW50PgorICA8L3hzOmNvbXBsZXhUeXBlPgorCisgIDx4czplbGVtZW50IG5hbWU9Im5vcm1hbGl6ZWRTdHJpbmciIHR5cGU9InRuczpub3JtYWxpemVkU3RyaW5nIiAvPgorICA8eHM6Y29tcGxleFR5cGUgbmFtZT0ibm9ybWFsaXplZFN0cmluZyIgPgorICAgIDx4czpzaW1wbGVDb250ZW50PgorICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czpub3JtYWxpemVkU3RyaW5nIiA+CisgICAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRuczpjb21tb25BdHRyaWJ1dGVzIiAvPgorICAgICAgPC94czpleHRlbnNpb24+CisgICAgPC94czpzaW1wbGVDb250ZW50PgorICA8L3hzOmNvbXBsZXhUeXBlPgorCisgIDx4czplbGVtZW50IG5hbWU9InRva2VuIiB0eXBlPSJ0bnM6dG9rZW4iIC8+CisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ0b2tlbiIgPgorICAgIDx4czpzaW1wbGVDb250ZW50PgorICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czp0b2tlbiIgPgorICAgICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0bnM6Y29tbW9uQXR0cmlidXRlcyIgLz4KKyAgICAgIDwveHM6ZXh0ZW5zaW9uPgorICAgIDwveHM6c2ltcGxlQ29udGVudD4KKyAgPC94czpjb21wbGV4VHlwZT4KKworICA8eHM6ZWxlbWVudCBuYW1lPSJsYW5ndWFnZSIgdHlwZT0idG5zOmxhbmd1YWdlIiAvPgorICA8eHM6Y29tcGxleFR5cGUgbmFtZT0ibGFuZ3VhZ2UiID4KKyAgICA8eHM6c2ltcGxlQ29udGVudD4KKyAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6bGFuZ3VhZ2UiID4KKyAgICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG5zOmNvbW1vbkF0dHJpYnV0ZXMiIC8+CisgICAgICA8L3hzOmV4dGVuc2lvbj4KKyAgICA8L3hzOnNpbXBsZUNvbnRlbnQ+CisgIDwveHM6Y29tcGxleFR5cGU+CisKKyAgPHhzOmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0idG5zOk5hbWUiIC8+CisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJOYW1lIiA+CisgICAgPHhzOnNpbXBsZUNvbnRlbnQ+CisgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOk5hbWUiID4KKyAgICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG5zOmNvbW1vbkF0dHJpYnV0ZXMiIC8+CisgICAgICA8L3hzOmV4dGVuc2lvbj4KKyAgICA8L3hzOnNpbXBsZUNvbnRlbnQ+CisgIDwveHM6Y29tcGxleFR5cGU+CisKKyAgPHhzOmVsZW1lbnQgbmFtZT0iTk1UT0tFTiIgdHlwZT0idG5zOk5NVE9LRU4iIC8+CisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJOTVRPS0VOIiA+CisgICAgPHhzOnNpbXBsZUNvbnRlbnQ+CisgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOk5NVE9LRU4iID4KKyAgICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG5zOmNvbW1vbkF0dHJpYnV0ZXMiIC8+CisgICAgICA8L3hzOmV4dGVuc2lvbj4KKyAgICA8L3hzOnNpbXBsZUNvbnRlbnQ+CisgIDwveHM6Y29tcGxleFR5cGU+CisKKyAgPHhzOmVsZW1lbnQgbmFtZT0iTkNOYW1lIiB0eXBlPSJ0bnM6TkNOYW1lIiAvPgorICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTkNOYW1lIiA+CisgICAgPHhzOnNpbXBsZUNvbnRlbnQ+CisgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOk5DTmFtZSIgPgorICAgICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0bnM6Y29tbW9uQXR0cmlidXRlcyIgLz4KKyAgICAgIDwveHM6ZXh0ZW5zaW9uPgorICAgIDwveHM6c2ltcGxlQ29udGVudD4KKyAgPC94czpjb21wbGV4VHlwZT4KKworICA8eHM6ZWxlbWVudCBuYW1lPSJOTVRPS0VOUyIgdHlwZT0idG5zOk5NVE9LRU5TIiAvPgorICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iTk1UT0tFTlMiID4KKyAgICA8eHM6c2ltcGxlQ29udGVudD4KKyAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6Tk1UT0tFTlMiID4KKyAgICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG5zOmNvbW1vbkF0dHJpYnV0ZXMiIC8+CisgICAgICA8L3hzOmV4dGVuc2lvbj4KKyAgICA8L3hzOnNpbXBsZUNvbnRlbnQ+CisgIDwveHM6Y29tcGxleFR5cGU+CisKKyAgPHhzOmVsZW1lbnQgbmFtZT0iSUQiIHR5cGU9InRuczpJRCIgLz4KKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IklEIiA+CisgICAgPHhzOnNpbXBsZUNvbnRlbnQ+CisgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOklEIiA+CisgICAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRuczpjb21tb25BdHRyaWJ1dGVzIiAvPgorICAgICAgPC94czpleHRlbnNpb24+CisgICAgPC94czpzaW1wbGVDb250ZW50PgorICA8L3hzOmNvbXBsZXhUeXBlPgorCisgIDx4czplbGVtZW50IG5hbWU9IklEUkVGIiB0eXBlPSJ0bnM6SURSRUYiIC8+CisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJJRFJFRiIgPgorICAgIDx4czpzaW1wbGVDb250ZW50PgorICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czpJRFJFRiIgPgorICAgICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0bnM6Y29tbW9uQXR0cmlidXRlcyIgLz4KKyAgICAgIDwveHM6ZXh0ZW5zaW9uPgorICAgIDwveHM6c2ltcGxlQ29udGVudD4KKyAgPC94czpjb21wbGV4VHlwZT4KKworICA8eHM6ZWxlbWVudCBuYW1lPSJFTlRJVFkiIHR5cGU9InRuczpFTlRJVFkiIC8+CisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFTlRJVFkiID4KKyAgICA8eHM6c2ltcGxlQ29udGVudD4KKyAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6RU5USVRZIiA+CisgICAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRuczpjb21tb25BdHRyaWJ1dGVzIiAvPgorICAgICAgPC94czpleHRlbnNpb24+CisgICAgPC94czpzaW1wbGVDb250ZW50PgorICA8L3hzOmNvbXBsZXhUeXBlPgorCisgIDx4czplbGVtZW50IG5hbWU9IklEUkVGUyIgdHlwZT0idG5zOklEUkVGUyIgLz4KKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IklEUkVGUyIgPgorICAgIDx4czpzaW1wbGVDb250ZW50PgorICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czpJRFJFRlMiID4KKyAgICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG5zOmNvbW1vbkF0dHJpYnV0ZXMiIC8+CisgICAgICA8L3hzOmV4dGVuc2lvbj4KKyAgICA8L3hzOnNpbXBsZUNvbnRlbnQ+CisgIDwveHM6Y29tcGxleFR5cGU+CisKKyAgPHhzOmVsZW1lbnQgbmFtZT0iRU5USVRJRVMiIHR5cGU9InRuczpFTlRJVElFUyIgLz4KKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkVOVElUSUVTIiA+CisgICAgPHhzOnNpbXBsZUNvbnRlbnQ+CisgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOkVOVElUSUVTIiA+CisgICAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRuczpjb21tb25BdHRyaWJ1dGVzIiAvPgorICAgICAgPC94czpleHRlbnNpb24+CisgICAgPC94czpzaW1wbGVDb250ZW50PgorICA8L3hzOmNvbXBsZXhUeXBlPgorCisgIDx4czplbGVtZW50IG5hbWU9ImRlY2ltYWwiIHR5cGU9InRuczpkZWNpbWFsIiAvPgorICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZGVjaW1hbCIgPgorICAgIDx4czpzaW1wbGVDb250ZW50PgorICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czpkZWNpbWFsIiA+CisgICAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRuczpjb21tb25BdHRyaWJ1dGVzIiAvPgorICAgICAgPC94czpleHRlbnNpb24+CisgICAgPC94czpzaW1wbGVDb250ZW50PgorICA8L3hzOmNvbXBsZXhUeXBlPgorCisgIDx4czplbGVtZW50IG5hbWU9ImludGVnZXIiIHR5cGU9InRuczppbnRlZ2VyIiAvPgorICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iaW50ZWdlciIgPgorICAgIDx4czpzaW1wbGVDb250ZW50PgorICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czppbnRlZ2VyIiA+CisgICAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRuczpjb21tb25BdHRyaWJ1dGVzIiAvPgorICAgICAgPC94czpleHRlbnNpb24+CisgICAgPC94czpzaW1wbGVDb250ZW50PgorICA8L3hzOmNvbXBsZXhUeXBlPgorCisgIDx4czplbGVtZW50IG5hbWU9Im5vblBvc2l0aXZlSW50ZWdlciIgdHlwZT0idG5zOm5vblBvc2l0aXZlSW50ZWdlciIgLz4KKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Im5vblBvc2l0aXZlSW50ZWdlciIgPgorICAgIDx4czpzaW1wbGVDb250ZW50PgorICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czpub25Qb3NpdGl2ZUludGVnZXIiID4KKyAgICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG5zOmNvbW1vbkF0dHJpYnV0ZXMiIC8+CisgICAgICA8L3hzOmV4dGVuc2lvbj4KKyAgICA8L3hzOnNpbXBsZUNvbnRlbnQ+CisgIDwveHM6Y29tcGxleFR5cGU+CisKKyAgPHhzOmVsZW1lbnQgbmFtZT0ibmVnYXRpdmVJbnRlZ2VyIiB0eXBlPSJ0bnM6bmVnYXRpdmVJbnRlZ2VyIiAvPgorICA8eHM6Y29tcGxleFR5cGUgbmFtZT0ibmVnYXRpdmVJbnRlZ2VyIiA+CisgICAgPHhzOnNpbXBsZUNvbnRlbnQ+CisgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOm5lZ2F0aXZlSW50ZWdlciIgPgorICAgICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0bnM6Y29tbW9uQXR0cmlidXRlcyIgLz4KKyAgICAgIDwveHM6ZXh0ZW5zaW9uPgorICAgIDwveHM6c2ltcGxlQ29udGVudD4KKyAgPC94czpjb21wbGV4VHlwZT4KKworICA8eHM6ZWxlbWVudCBuYW1lPSJsb25nIiB0eXBlPSJ0bnM6bG9uZyIgLz4KKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImxvbmciID4KKyAgICA8eHM6c2ltcGxlQ29udGVudD4KKyAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6bG9uZyIgPgorICAgICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0bnM6Y29tbW9uQXR0cmlidXRlcyIgLz4KKyAgICAgIDwveHM6ZXh0ZW5zaW9uPgorICAgIDwveHM6c2ltcGxlQ29udGVudD4KKyAgPC94czpjb21wbGV4VHlwZT4KKworICA8eHM6ZWxlbWVudCBuYW1lPSJpbnQiIHR5cGU9InRuczppbnQiIC8+CisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJpbnQiID4KKyAgICA8eHM6c2ltcGxlQ29udGVudD4KKyAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6aW50IiA+CisgICAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRuczpjb21tb25BdHRyaWJ1dGVzIiAvPgorICAgICAgPC94czpleHRlbnNpb24+CisgICAgPC94czpzaW1wbGVDb250ZW50PgorICA8L3hzOmNvbXBsZXhUeXBlPgorCisgIDx4czplbGVtZW50IG5hbWU9InNob3J0IiB0eXBlPSJ0bnM6c2hvcnQiIC8+CisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJzaG9ydCIgPgorICAgIDx4czpzaW1wbGVDb250ZW50PgorICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czpzaG9ydCIgPgorICAgICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0bnM6Y29tbW9uQXR0cmlidXRlcyIgLz4KKyAgICAgIDwveHM6ZXh0ZW5zaW9uPgorICAgIDwveHM6c2ltcGxlQ29udGVudD4KKyAgPC94czpjb21wbGV4VHlwZT4KKworICA8eHM6ZWxlbWVudCBuYW1lPSJieXRlIiB0eXBlPSJ0bnM6Ynl0ZSIgLz4KKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImJ5dGUiID4KKyAgICA8eHM6c2ltcGxlQ29udGVudD4KKyAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6Ynl0ZSIgPgorICAgICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0bnM6Y29tbW9uQXR0cmlidXRlcyIgLz4KKyAgICAgIDwveHM6ZXh0ZW5zaW9uPgorICAgIDwveHM6c2ltcGxlQ29udGVudD4KKyAgPC94czpjb21wbGV4VHlwZT4KKworICA8eHM6ZWxlbWVudCBuYW1lPSJub25OZWdhdGl2ZUludGVnZXIiIHR5cGU9InRuczpub25OZWdhdGl2ZUludGVnZXIiIC8+CisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJub25OZWdhdGl2ZUludGVnZXIiID4KKyAgICA8eHM6c2ltcGxlQ29udGVudD4KKyAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6bm9uTmVnYXRpdmVJbnRlZ2VyIiA+CisgICAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRuczpjb21tb25BdHRyaWJ1dGVzIiAvPgorICAgICAgPC94czpleHRlbnNpb24+CisgICAgPC94czpzaW1wbGVDb250ZW50PgorICA8L3hzOmNvbXBsZXhUeXBlPgorCisgIDx4czplbGVtZW50IG5hbWU9InVuc2lnbmVkTG9uZyIgdHlwZT0idG5zOnVuc2lnbmVkTG9uZyIgLz4KKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InVuc2lnbmVkTG9uZyIgPgorICAgIDx4czpzaW1wbGVDb250ZW50PgorICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czp1bnNpZ25lZExvbmciID4KKyAgICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG5zOmNvbW1vbkF0dHJpYnV0ZXMiIC8+CisgICAgICA8L3hzOmV4dGVuc2lvbj4KKyAgICA8L3hzOnNpbXBsZUNvbnRlbnQ+CisgIDwveHM6Y29tcGxleFR5cGU+CisKKyAgPHhzOmVsZW1lbnQgbmFtZT0idW5zaWduZWRJbnQiIHR5cGU9InRuczp1bnNpZ25lZEludCIgLz4KKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InVuc2lnbmVkSW50IiA+CisgICAgPHhzOnNpbXBsZUNvbnRlbnQ+CisgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOnVuc2lnbmVkSW50IiA+CisgICAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRuczpjb21tb25BdHRyaWJ1dGVzIiAvPgorICAgICAgPC94czpleHRlbnNpb24+CisgICAgPC94czpzaW1wbGVDb250ZW50PgorICA8L3hzOmNvbXBsZXhUeXBlPgorCisgIDx4czplbGVtZW50IG5hbWU9InVuc2lnbmVkU2hvcnQiIHR5cGU9InRuczp1bnNpZ25lZFNob3J0IiAvPgorICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idW5zaWduZWRTaG9ydCIgPgorICAgIDx4czpzaW1wbGVDb250ZW50PgorICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czp1bnNpZ25lZFNob3J0IiA+CisgICAgICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InRuczpjb21tb25BdHRyaWJ1dGVzIiAvPgorICAgICAgPC94czpleHRlbnNpb24+CisgICAgPC94czpzaW1wbGVDb250ZW50PgorICA8L3hzOmNvbXBsZXhUeXBlPgorCisgIDx4czplbGVtZW50IG5hbWU9InVuc2lnbmVkQnl0ZSIgdHlwZT0idG5zOnVuc2lnbmVkQnl0ZSIgLz4KKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InVuc2lnbmVkQnl0ZSIgPgorICAgIDx4czpzaW1wbGVDb250ZW50PgorICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czp1bnNpZ25lZEJ5dGUiID4KKyAgICAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0idG5zOmNvbW1vbkF0dHJpYnV0ZXMiIC8+CisgICAgICA8L3hzOmV4dGVuc2lvbj4KKyAgICA8L3hzOnNpbXBsZUNvbnRlbnQ+CisgIDwveHM6Y29tcGxleFR5cGU+CisKKyAgPHhzOmVsZW1lbnQgbmFtZT0icG9zaXRpdmVJbnRlZ2VyIiB0eXBlPSJ0bnM6cG9zaXRpdmVJbnRlZ2VyIiAvPgorICA8eHM6Y29tcGxleFR5cGUgbmFtZT0icG9zaXRpdmVJbnRlZ2VyIiA+CisgICAgPHhzOnNpbXBsZUNvbnRlbnQ+CisgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOnBvc2l0aXZlSW50ZWdlciIgPgorICAgICAgICA8eHM6YXR0cmlidXRlR3JvdXAgcmVmPSJ0bnM6Y29tbW9uQXR0cmlidXRlcyIgLz4KKyAgICAgIDwveHM6ZXh0ZW5zaW9uPgorICAgIDwveHM6c2ltcGxlQ29udGVudD4KKyAgPC94czpjb21wbGV4VHlwZT4KKworICA8eHM6ZWxlbWVudCBuYW1lPSJhbnlUeXBlIiAvPgorPC94czpzY2hlbWE+CisKZGlmZiAtLWdpdCBhL1NBUklTLUludGVyZmFjZS9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2FyaXNpbnRlcmZhY2UvY29uZmlnL0ltcG9ydFNjaGVkdWxlckNvbmZpZ1Rlc3QuamF2YSBiL1NBUklTLUludGVyZmFjZS9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2FyaXNpbnRlcmZhY2UvY29uZmlnL0ltcG9ydFNjaGVkdWxlckNvbmZpZ1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGJjMTg4Ci0tLSAvZGV2L251bGwKKysrIGIvU0FSSVMtSW50ZXJmYWNlL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYXJpc2ludGVyZmFjZS9jb25maWcvSW1wb3J0U2NoZWR1bGVyQ29uZmlnVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS5jb25maWc7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhcmlzaW50ZXJmYWNlLlNhcmlzSW50ZXJmYWNlQXBwbGljYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS5hcGkuU3RvZXJ1bmdzYXVza3VuZnRBcGk7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS5zZXJ2aWNlLkltcG9ydFNlcnZpY2U7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uQXV0b3dpcmVkOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdC50ZXN0LmNvbnRleHQuU3ByaW5nQm9vdFRlc3Q7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5ib290LnRlc3QubW9jay5tb2NraXRvLk1vY2tCZWFuOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdC50ZXN0Lm1vY2subW9ja2l0by5TcHlCZWFuOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsudGVzdC5jb250ZXh0LkFjdGl2ZVByb2ZpbGVzOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsudGVzdC5jb250ZXh0LkNvbnRleHRDb25maWd1cmF0aW9uOworaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLnRpbWVzOworaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLnZlcmlmeTsKKworQFNwcmluZ0Jvb3RUZXN0KGNsYXNzZXMgPSBTYXJpc0ludGVyZmFjZUFwcGxpY2F0aW9uLmNsYXNzKQorQENvbnRleHRDb25maWd1cmF0aW9uKGNsYXNzZXMgPSB7VGVzdENvbmZpZ3VyYXRpb24uY2xhc3N9KQorQEFjdGl2ZVByb2ZpbGVzKCJ0ZXN0IikKK3B1YmxpYyBjbGFzcyBJbXBvcnRTY2hlZHVsZXJDb25maWdUZXN0IHsKKworICAgIEBTcHlCZWFuCisgICAgcHJpdmF0ZSBJbXBvcnRTZXJ2aWNlIGltcG9ydFNlcnZpY2U7CisKKyAgICBATW9ja0JlYW4KKyAgICBwcml2YXRlIFN0b2VydW5nc2F1c2t1bmZ0QXBpIHN0b2VydW5nc2F1c2t1bmZ0QXBpOworCisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgSW1wb3J0U2NoZWR1bGVyQ29uZmlnIGltcG9ydFNjaGVkdWxlckNvbmZpZzsKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgc2hvdWxJbXBvcnRVc2VyTm90aWZpY2F0aW9uKCkgeworICAgICAgICBpbXBvcnRTY2hlZHVsZXJDb25maWcuc2NoZWR1bGVUYXNrSW1wb3J0VXNlck5vdGlmaWNhdGlvbnMoKTsKKyAgICAgICAgdmVyaWZ5KGltcG9ydFNlcnZpY2UsIHRpbWVzKDEpKS5pbXBvcnRVc2VyTm90aWZpY2F0aW9ucygpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NBUklTLUludGVyZmFjZS9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2FyaXNpbnRlcmZhY2UvY29uZmlnL1Rlc3RDb25maWd1cmF0aW9uLmphdmEgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL2NvbmZpZy9UZXN0Q29uZmlndXJhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZDQzM2YKLS0tIC9kZXYvbnVsbAorKysgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL2NvbmZpZy9UZXN0Q29uZmlndXJhdGlvbi5qYXZhCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDE5IENvbnRyaWJ1dG9ycyB0byB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uCisgKgorICogU2VlIHRoZSBOT1RJQ0UgZmlsZShzKSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbAorICogaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2LiAyLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS5jb25maWc7CisKKworaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5kYXRhYmluZC5PYmplY3RNYXBwZXI7CitpbXBvcnQgY29tLnJhYmJpdG1xLmNsaWVudC5DaGFubmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2FyaXNpbnRlcmZhY2UuU2FyaXNJbnRlcmZhY2VBcHBsaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhcmlzaW50ZXJmYWNlLmNvbmZpZy5yYWJiaXRNcS5SYWJiaXRNcUNvbmZpZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhcmlzaW50ZXJmYWNlLm1hcHBlci5TdG9lcnVuZ3NhdXNrdW5mdE1hcHBlckltcGw7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5hbXFwLnJhYmJpdC5hbm5vdGF0aW9uLkVuYWJsZVJhYmJpdDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmFtcXAucmFiYml0LmNvbm5lY3Rpb24uQ29ubmVjdGlvbjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmFtcXAucmFiYml0LmNvbm5lY3Rpb24uQ29ubmVjdGlvbkZhY3Rvcnk7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5hbXFwLnJhYmJpdC50ZXN0LlRlc3RSYWJiaXRUZW1wbGF0ZTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5RdWFsaWZpZXI7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5ib290LmF1dG9jb25maWd1cmUuZG9tYWluLkVudGl0eVNjYW47CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5ib290LnRlc3QuY29udGV4dC5Db25maWdGaWxlQXBwbGljYXRpb25Db250ZXh0SW5pdGlhbGl6ZXI7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LmFubm90YXRpb24uQmVhbjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLm1lc3NhZ2luZy5NZXNzYWdlQ2hhbm5lbDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnRlc3QuY29udGV4dC5Db250ZXh0Q29uZmlndXJhdGlvbjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnRlc3QuY29udGV4dC5UZXN0UHJvcGVydHlTb3VyY2U7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitpbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLkFyZ3VtZW50TWF0Y2hlcnMuYW55Qm9vbGVhbjsKK2ltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uQkRETW9ja2l0by5naXZlbjsKK2ltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uQkRETW9ja2l0by53aWxsUmV0dXJuOworaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLmRvTm90aGluZzsKK2ltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by5tb2NrOworCitARW50aXR5U2NhbihiYXNlUGFja2FnZUNsYXNzZXMgPSBTYXJpc0ludGVyZmFjZUFwcGxpY2F0aW9uLmNsYXNzKQorQENvbnRleHRDb25maWd1cmF0aW9uKCBpbml0aWFsaXplcnMgPSB7Q29uZmlnRmlsZUFwcGxpY2F0aW9uQ29udGV4dEluaXRpYWxpemVyLmNsYXNzfSkKK0BUZXN0UHJvcGVydHlTb3VyY2UoInNwcmluZy5jb25maWcubG9jYXRpb249Y2xhc3NwYXRoOmFwcGxpY2F0aW9uLnltbCIpCitARW5hYmxlUmFiYml0CitwdWJsaWMgY2xhc3MgVGVzdENvbmZpZ3VyYXRpb24geworCisgICAgQEJlYW4KKyAgICBPYmplY3RNYXBwZXIgb2JqZWN0TWFwcGVyKCkgeyByZXR1cm4gbmV3IE9iamVjdE1hcHBlcigpOyB9CisKKyAgICBAQmVhbgorICAgIHB1YmxpYyBTdG9lcnVuZ3NhdXNrdW5mdE1hcHBlckltcGwgc3RvZXJ1bmdzYXVza3VuZnRNYXBwZXIoKSB7cmV0dXJuIG5ldyBTdG9lcnVuZ3NhdXNrdW5mdE1hcHBlckltcGwoKTt9CisKKyAgICBAQmVhbgorICAgIHB1YmxpYyBNZXNzYWdlQ2hhbm5lbCBmYWlsdXJlSW1wb3J0Q2hhbm5lbCgpIHtyZXR1cm4gbW9jayhNZXNzYWdlQ2hhbm5lbC5jbGFzcyk7fQorCisgICAgQEJlYW4KKyAgICBAUXVhbGlmaWVyKCJyYWJiaXRNcUNvbmZpZyIpCisgICAgcHVibGljIFJhYmJpdE1xQ29uZmlnIHJhYmJpdE1xQ29uZmlnKCkgeworICAgICAgICBSYWJiaXRNcUNvbmZpZyByYWJiaXRNcUNvbmZpZ01vY2sgPSBtb2NrKFJhYmJpdE1xQ29uZmlnLmNsYXNzKTsKKyAgICAgICAgZG9Ob3RoaW5nKCkud2hlbihyYWJiaXRNcUNvbmZpZ01vY2spLmJ1aWxkQWxsUXVldWVzKCk7CisgICAgICAgIHJldHVybiByYWJiaXRNcUNvbmZpZ01vY2s7CisgICAgfQorCisgICAgQEJlYW4KKyAgICBwdWJsaWMgVGVzdFJhYmJpdFRlbXBsYXRlIHRlbXBsYXRlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIG5ldyBUZXN0UmFiYml0VGVtcGxhdGUoY29ubmVjdGlvbkZhY3RvcnkoKSk7CisgICAgfQorCisgICAgQEJlYW4KKyAgICBwdWJsaWMgQ29ubmVjdGlvbkZhY3RvcnkgY29ubmVjdGlvbkZhY3RvcnkoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBDb25uZWN0aW9uRmFjdG9yeSBmYWN0b3J5ID0gbW9jayhDb25uZWN0aW9uRmFjdG9yeS5jbGFzcyk7CisgICAgICAgIENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IG1vY2soQ29ubmVjdGlvbi5jbGFzcyk7CisgICAgICAgIENoYW5uZWwgY2hhbm5lbCA9IG1vY2soQ2hhbm5lbC5jbGFzcyk7CisgICAgICAgIHdpbGxSZXR1cm4oY29ubmVjdGlvbikuZ2l2ZW4oZmFjdG9yeSkuY3JlYXRlQ29ubmVjdGlvbigpOworICAgICAgICB3aWxsUmV0dXJuKGNoYW5uZWwpLmdpdmVuKGNvbm5lY3Rpb24pLmNyZWF0ZUNoYW5uZWwoYW55Qm9vbGVhbigpKTsKKyAgICAgICAgZ2l2ZW4oY2hhbm5lbC5pc09wZW4oKSkud2lsbFJldHVybih0cnVlKTsKKyAgICAgICAgcmV0dXJuIGZhY3Rvcnk7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9TQVJJUy1JbnRlcmZhY2Uvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL2NvbnRyb2xsZXIvSW1wb3J0Q29udHJvbGxlclRlc3QuamF2YSBiL1NBUklTLUludGVyZmFjZS9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2FyaXNpbnRlcmZhY2UvY29udHJvbGxlci9JbXBvcnRDb250cm9sbGVyVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNGM0ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL2NvbnRyb2xsZXIvSW1wb3J0Q29udHJvbGxlclRlc3QuamF2YQpAQCAtMCwwICsxLDU3IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxOSBDb250cmlidXRvcnMgdG8gdGhlIEVjbGlwc2UgRm91bmRhdGlvbgorICoKKyAqIFNlZSB0aGUgTk9USUNFIGZpbGUocykgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwKKyAqIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMi4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2FyaXNpbnRlcmZhY2UuY29udHJvbGxlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2FyaXNpbnRlcmZhY2UuU2FyaXNJbnRlcmZhY2VBcHBsaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhcmlzaW50ZXJmYWNlLmFwaS5TdG9lcnVuZ3NhdXNrdW5mdEFwaTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhcmlzaW50ZXJmYWNlLnNlcnZpY2UuSW1wb3J0U2VydmljZTsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuVGVzdDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5ib290LnRlc3QuYXV0b2NvbmZpZ3VyZS53ZWIuc2VydmxldC5BdXRvQ29uZmlndXJlTW9ja012YzsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJvb3QudGVzdC5jb250ZXh0LlNwcmluZ0Jvb3RUZXN0OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdC50ZXN0Lm1vY2subW9ja2l0by5Nb2NrQmVhbjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnRlc3QuY29udGV4dC5BY3RpdmVQcm9maWxlczsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnRlc3Qud2ViLnNlcnZsZXQuTW9ja012YzsKKworaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLnRpbWVzOworaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLnZlcmlmeTsKK2ltcG9ydCBzdGF0aWMgb3JnLnNwcmluZ2ZyYW1ld29yay50ZXN0LndlYi5zZXJ2bGV0LnJlcXVlc3QuTW9ja012Y1JlcXVlc3RCdWlsZGVycy5nZXQ7CitpbXBvcnQgc3RhdGljIG9yZy5zcHJpbmdmcmFtZXdvcmsudGVzdC53ZWIuc2VydmxldC5yZXF1ZXN0Lk1vY2tNdmNSZXF1ZXN0QnVpbGRlcnMucG9zdDsKK2ltcG9ydCBzdGF0aWMgb3JnLnNwcmluZ2ZyYW1ld29yay50ZXN0LndlYi5zZXJ2bGV0LnJlc3VsdC5Nb2NrTXZjUmVzdWx0TWF0Y2hlcnMuc3RhdHVzOworCitAU3ByaW5nQm9vdFRlc3QoY2xhc3NlcyA9IFNhcmlzSW50ZXJmYWNlQXBwbGljYXRpb24uY2xhc3MpCitAQXV0b0NvbmZpZ3VyZU1vY2tNdmMKK0BBY3RpdmVQcm9maWxlcygidGVzdCIpCitwdWJsaWMgY2xhc3MgSW1wb3J0Q29udHJvbGxlclRlc3QgeworCisgICAgQE1vY2tCZWFuCisgICAgcHJpdmF0ZSBTdG9lcnVuZ3NhdXNrdW5mdEFwaSBzdG9lcnVuZ3NhdXNrdW5mdEFwaTsKKworICAgIEBNb2NrQmVhbgorICAgIHByaXZhdGUgSW1wb3J0U2VydmljZSBpbXBvcnRTZXJ2aWNlOworCisgICAgQEF1dG93aXJlZAorICAgIHByaXZhdGUgTW9ja012YyBtb2NrTXZjOworCisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsZENhbGxJbXBvcnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKworICAgICAgICBtb2NrTXZjLnBlcmZvcm0oZ2V0KCIvc3RvZXJ1bmdzYXVza3VuZnQvdXNlcm5vdGlmaWNhdGlvbi1pbXBvcnQtdGVzdCIpKQorICAgICAgICAgICAgICAgIC5hbmRFeHBlY3Qoc3RhdHVzKCkuaXMyeHhTdWNjZXNzZnVsKCkpOworCisgICAgICAgIHZlcmlmeShpbXBvcnRTZXJ2aWNlLCB0aW1lcygxKSkuaW1wb3J0VXNlck5vdGlmaWNhdGlvbnMoKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU0FSSVMtSW50ZXJmYWNlL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYXJpc2ludGVyZmFjZS9zZXJ2aWNlL0ltcG9ydFNlcnZpY2VUZXN0LmphdmEgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL3NlcnZpY2UvSW1wb3J0U2VydmljZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzhmNmNlCi0tLSAvZGV2L251bGwKKysrIGIvU0FSSVMtSW50ZXJmYWNlL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYXJpc2ludGVyZmFjZS9zZXJ2aWNlL0ltcG9ydFNlcnZpY2VUZXN0LmphdmEKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTkgQ29udHJpYnV0b3JzIHRvIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24KKyAqCisgKiBTZWUgdGhlIE5PVElDRSBmaWxlKHMpIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsCisgKiBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYuIDIuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhcmlzaW50ZXJmYWNlLnNlcnZpY2U7CisKK2ltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uZGF0YWJpbmQuT2JqZWN0TWFwcGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2FyaXNpbnRlcmZhY2UuU2FyaXNJbnRlcmZhY2VBcHBsaWNhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhcmlzaW50ZXJmYWNlLmFwaS5TdG9lcnVuZ3NhdXNrdW5mdEFwaTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhcmlzaW50ZXJmYWNlLmNvbmZpZy5UZXN0Q29uZmlndXJhdGlvbjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5ib290LnRlc3QuY29udGV4dC5TcHJpbmdCb290VGVzdDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJvb3QudGVzdC5tb2NrLm1vY2tpdG8uTW9ja0JlYW47CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay50ZXN0LmNvbnRleHQuQWN0aXZlUHJvZmlsZXM7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay50ZXN0LmNvbnRleHQuQ29udGV4dENvbmZpZ3VyYXRpb247CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuYXNzZXJ0VGhyb3dzOworaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Bcmd1bWVudE1hdGNoZXJzLmFueTsKKworQFNwcmluZ0Jvb3RUZXN0KGNsYXNzZXMgPSBTYXJpc0ludGVyZmFjZUFwcGxpY2F0aW9uLmNsYXNzKQorQENvbnRleHRDb25maWd1cmF0aW9uKGNsYXNzZXMgPSB7VGVzdENvbmZpZ3VyYXRpb24uY2xhc3N9KQorQEFjdGl2ZVByb2ZpbGVzKCJ0ZXN0IikKK3B1YmxpYyBjbGFzcyBJbXBvcnRTZXJ2aWNlVGVzdCB7CisKKyAgICBAQXV0b3dpcmVkCisgICAgcHJpdmF0ZSBJbXBvcnRTZXJ2aWNlIGltcG9ydFNlcnZpY2U7CisKKyAgICBAQXV0b3dpcmVkCisgICAgT2JqZWN0TWFwcGVyIG9iamVjdE1hcHBlcjsKKworICAgIEBNb2NrQmVhbgorICAgIFN0b2VydW5nc2F1c2t1bmZ0QXBpIHN0b2VydW5nc2F1c2t1bmZ0QXBpOworCisgICAvKiBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHNob3VsSW1wb3J0VXNlck5vdGlmaWNhdGlvbigpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisKKyAgICAgICAgSW1wb3J0U2VydmljZSBpbXBvcnRFeHBvcnRTZXJ2aWNTcHkgPSBzcHkoaW1wb3J0U2VydmljZSk7CisKKyAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBuZXcgQ2xhc3NQYXRoUmVzb3VyY2UoIlVzZXJub3RpZmljYXRpb25Kc29uUmVzcG9uc2UuanNvbiIpLmdldElucHV0U3RyZWFtKCk7CisgICAgICAgIExpc3Q8U3RvZXJ1bmdzYXVza3VuZnRVc2VyTm90aWZpY2F0aW9uPiB1c2VyTm90aWZpY2F0aW9uTGlzdCA9CisgICAgICAgICAgICAgICAgb2JqZWN0TWFwcGVyLnJlYWRWYWx1ZShpcywgbmV3IFR5cGVSZWZlcmVuY2U8TGlzdDxTdG9lcnVuZ3NhdXNrdW5mdFVzZXJOb3RpZmljYXRpb24+PigpIHsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgd2hlbihzdG9lcnVuZ3NhdXNrdW5mdEFwaS5nZXRVc2VyTm90aWZpY2F0aW9uKGFueShJbnRlZ2VyLmNsYXNzKSkpLnRoZW5SZXR1cm4odXNlck5vdGlmaWNhdGlvbkxpc3QpOworCisgICAgICAgIGltcG9ydEV4cG9ydFNlcnZpY1NweS5pbXBvcnRVc2VyTm90aWZpY2F0aW9ucygpOworCisgICAgICAgIHZlcmlmeShpbXBvcnRFeHBvcnRTZXJ2aWNTcHksIHRpbWVzKHVzZXJOb3RpZmljYXRpb25MaXN0LnNpemUoKSkpLnB1c2hGb3JlaWduRmFpbHVyZShhbnkoRm9yZWlnbkZhaWx1cmVNZXNzYWdlRHRvLmNsYXNzKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bEltcG9ydFVzZXJOb3RpZmljYXRpb25NYXBwZXJUZXN0MSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisKKyAgICAgICAgSW1wb3J0U2VydmljZSBpbXBvcnRFeHBvcnRTZXJ2aWNTcHkgPSBzcHkoaW1wb3J0U2VydmljZSk7CisKKyAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBuZXcgQ2xhc3NQYXRoUmVzb3VyY2UoIlVzZXJub3RpZmljYXRpb25Kc29uUmVzcG9uc2UuanNvbiIpLmdldElucHV0U3RyZWFtKCk7CisgICAgICAgIExpc3Q8U3RvZXJ1bmdzYXVza3VuZnRVc2VyTm90aWZpY2F0aW9uPiB1c2VyTm90aWZpY2F0aW9uTGlzdCA9CisgICAgICAgICAgICAgICAgb2JqZWN0TWFwcGVyLnJlYWRWYWx1ZShpcywgbmV3IFR5cGVSZWZlcmVuY2U8TGlzdDxTdG9lcnVuZ3NhdXNrdW5mdFVzZXJOb3RpZmljYXRpb24+PigpIHsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgd2hlbihzdG9lcnVuZ3NhdXNrdW5mdEFwaS5nZXRVc2VyTm90aWZpY2F0aW9uKGFueShJbnRlZ2VyLmNsYXNzKSkpLnRoZW5SZXR1cm4odXNlck5vdGlmaWNhdGlvbkxpc3QpOworCisgICAgICAgIGltcG9ydEV4cG9ydFNlcnZpY1NweS5pbXBvcnRVc2VyTm90aWZpY2F0aW9ucygpOworCisgICAgICAgIHZlcmlmeShpbXBvcnRFeHBvcnRTZXJ2aWNTcHksIHRpbWVzKHVzZXJOb3RpZmljYXRpb25MaXN0LnNpemUoKSkpLnB1c2hGb3JlaWduRmFpbHVyZShhbnkoRm9yZWlnbkZhaWx1cmVNZXNzYWdlRHRvLmNsYXNzKSk7CisgICAgfSovCisKKworfQpkaWZmIC0tZ2l0IGEvU0FSSVMtSW50ZXJmYWNlL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYXJpc2ludGVyZmFjZS9zdXBwb3J0L01vY2tEYXRhSGVscGVyLmphdmEgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL3N1cHBvcnQvTW9ja0RhdGFIZWxwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjgyYzZiCi0tLSAvZGV2L251bGwKKysrIGIvU0FSSVMtSW50ZXJmYWNlL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zYXJpc2ludGVyZmFjZS9zdXBwb3J0L01vY2tEYXRhSGVscGVyLmphdmEKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDE5IENvbnRyaWJ1dG9ycyB0byB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uCisgKgorICogU2VlIHRoZSBOT1RJQ0UgZmlsZShzKSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbAorICogaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2LiAyLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS5zdXBwb3J0OworCitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS5jb25zdGFudHMuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc2FyaXNpbnRlcmZhY2UuZHRvcy5GYWlsdXJlSW5mb3JtYXRpb25EdG87CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5zYXJpc2ludGVyZmFjZS5kdG9zLkZvcmVpZ25GYWlsdXJlRGF0YUR0bzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhcmlzaW50ZXJmYWNlLmR0b3MuRm9yZWlnbkZhaWx1cmVNZXNzYWdlRHRvOworCitpbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7CitpbXBvcnQgamF2YS5zcWwuRGF0ZTsKK2ltcG9ydCBqYXZhLnRleHQuUGFyc2VFeGNlcHRpb247CitpbXBvcnQgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXQ7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuVVVJRDsKKworcHVibGljIGNsYXNzIE1vY2tEYXRhSGVscGVyIHsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFNpbXBsZURhdGVGb3JtYXQgU0lNUExFX0RBVEVfRk9STUFUID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoImRkLk1NLnl5eXkgSEg6bW06c3MiKTsKKworICAgIHByaXZhdGUgTW9ja0RhdGFIZWxwZXIoKSB7fQorCisgICAgcHVibGljIHN0YXRpYyBGb3JlaWduRmFpbHVyZU1lc3NhZ2VEdG8gbW9ja0ZvcmVpZ25GYWlsdXJlRHRvKCkgdGhyb3dzIFBhcnNlRXhjZXB0aW9uIHsKKyAgICAgICAgRm9yZWlnbkZhaWx1cmVNZXNzYWdlRHRvIGZvcmVpZ25GYWlsdXJlTWVzc2FnZUR0byA9IG5ldyBGb3JlaWduRmFpbHVyZU1lc3NhZ2VEdG8oKTsKKyAgICAgICAgZm9yZWlnbkZhaWx1cmVNZXNzYWdlRHRvLnNldE1ldGFJZCgiYTQ1MDk0ODItM2JlMi00NDAyLWE5YmQtZmY5MTY0OWI5YzFlIik7CisgICAgICAgIGZvcmVpZ25GYWlsdXJlTWVzc2FnZUR0by5zZXRTb3VyY2UoQ29uc3RhbnRzLlNSQ19TVE9FUlVOR1NBVVNLVU5GVF9ERSk7CisgICAgICAgIGZvcmVpZ25GYWlsdXJlTWVzc2FnZUR0by5zZXREZXNjcmlwdGlvbigiUm9ocmJydWNoIik7CisKKyAgICAgICAgRm9yZWlnbkZhaWx1cmVEYXRhRHRvIGRhdGFEdG8gPSBuZXcgRm9yZWlnbkZhaWx1cmVEYXRhRHRvKCk7CisgICAgICAgIGRhdGFEdG8uc2V0UGxhbm5lZCh0cnVlKTsKKyAgICAgICAgZGF0YUR0by5zZXRGYWlsdXJlQmVnaW4oU0lNUExFX0RBVEVfRk9STUFULnBhcnNlKCIwNi4wNS4yMDIwIDEyOjMwOjAwIikpOworICAgICAgICBkYXRhRHRvLnNldEZhaWx1cmVFbmRQbGFubmVkKFNJTVBMRV9EQVRFX0ZPUk1BVC5wYXJzZSgiMDYuMDQuMjAyMSAxMzozMDowMCIpKTsKKyAgICAgICAgZGF0YUR0by5zZXRQb3N0Y29kZSgiNTUyMzIiKTsKKyAgICAgICAgZGF0YUR0by5zZXRDaXR5KCJBbHpleSIpOworICAgICAgICBkYXRhRHRvLnNldERlc2NyaXB0aW9uKCJJbiBBbHpleSBpc3QgZWluZSBQTFovR2VtZWluZGVzdMO2cnVuZyIpOworICAgICAgICBmb3JlaWduRmFpbHVyZU1lc3NhZ2VEdG8uc2V0UGF5bG9hZChkYXRhRHRvKTsKKworICAgICAgICByZXR1cm4gZm9yZWlnbkZhaWx1cmVNZXNzYWdlRHRvOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgRm9yZWlnbkZhaWx1cmVNZXNzYWdlRHRvIG1vY2tGb3JlaWduRmFpbHVyZUR0b1dpdGhDb29yZGluYXRlcygpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7CisgICAgICAgIEZvcmVpZ25GYWlsdXJlTWVzc2FnZUR0byBmb3JlaWduRmFpbHVyZU1lc3NhZ2VEdG8gPSBuZXcgRm9yZWlnbkZhaWx1cmVNZXNzYWdlRHRvKCk7CisgICAgICAgIGZvcmVpZ25GYWlsdXJlTWVzc2FnZUR0by5zZXRNZXRhSWQoImE0NTA5NDgyLTNiZTItNDQwMi1hOWJkLWZmOTE2NDliOWMxZSIpOworICAgICAgICBmb3JlaWduRmFpbHVyZU1lc3NhZ2VEdG8uc2V0U291cmNlKENvbnN0YW50cy5TUkNfU1RPRVJVTkdTQVVTS1VORlRfREUpOworICAgICAgICBmb3JlaWduRmFpbHVyZU1lc3NhZ2VEdG8uc2V0RGVzY3JpcHRpb24oIlJvaHJicnVjaCIpOworCisgICAgICAgIEZvcmVpZ25GYWlsdXJlRGF0YUR0byBkYXRhRHRvID0gbmV3IEZvcmVpZ25GYWlsdXJlRGF0YUR0bygpOworICAgICAgICBkYXRhRHRvLnNldFBsYW5uZWQodHJ1ZSk7CisgICAgICAgIGRhdGFEdG8uc2V0RmFpbHVyZUJlZ2luKFNJTVBMRV9EQVRFX0ZPUk1BVC5wYXJzZSgiMDYuMDUuMjAyMCAxMjozMDowMCIpKTsKKyAgICAgICAgZGF0YUR0by5zZXRGYWlsdXJlRW5kUGxhbm5lZChTSU1QTEVfREFURV9GT1JNQVQucGFyc2UoIjA2LjA0LjIwMjEgMTM6MzA6MDAiKSk7CisgICAgICAgIGRhdGFEdG8uc2V0UG9zdGNvZGUoIjU1MjMyIik7CisgICAgICAgIGRhdGFEdG8uc2V0Q2l0eSgiQWx6ZXkiKTsKKyAgICAgICAgZGF0YUR0by5zZXREZXNjcmlwdGlvbigiSW4gQWx6ZXkgaXN0IGVpbmUgUExaL0dlbWVpbmRlc3TDtnJ1bmciKTsKKyAgICAgICAgZGF0YUR0by5zZXRMb25naXR1ZGUobmV3IEJpZ0RlY2ltYWwoIjQ5Ljc4NDIzNzgiKSk7CisgICAgICAgIGRhdGFEdG8uc2V0TGF0aXR1ZGUobmV3IEJpZ0RlY2ltYWwoIjguMDMwODA5MiIpKTsKKyAgICAgICAgZm9yZWlnbkZhaWx1cmVNZXNzYWdlRHRvLnNldFBheWxvYWQoZGF0YUR0byk7CisKKyAgICAgICAgcmV0dXJuIGZvcmVpZ25GYWlsdXJlTWVzc2FnZUR0bzsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEZhaWx1cmVJbmZvcm1hdGlvbkR0byBtb2NrRmFpbHVyZUluZm9ybWF0aW9uRHRvKCkgeworCisgICAgICAgIEZhaWx1cmVJbmZvcm1hdGlvbkR0byBkdG8gPSBuZXcgRmFpbHVyZUluZm9ybWF0aW9uRHRvKCk7CisgICAgICAgIGR0by5zZXRVdWlkKFVVSUQucmFuZG9tVVVJRCgpKTsKKyAgICAgICAgZHRvLnNldFZlcnNpb25OdW1iZXIoM0wpOworICAgICAgICBkdG8uc2V0UmVzcG9uc2liaWxpdHkoIlZhdHRlciBBYnJhaGFtIik7CisgICAgICAgIGR0by5zZXRGYWlsdXJlQmVnaW4oRGF0ZS52YWx1ZU9mKCIyMDIyLTEyLTAxIikpOworICAgICAgICBkdG8uc2V0RmFpbHVyZUVuZFBsYW5uZWQoRGF0ZS52YWx1ZU9mKCIyMDIyLTEyLTAyIikpOworICAgICAgICBkdG8uc2V0RmFpbHVyZUVuZFJlc3VwcGxpZWQoRGF0ZS52YWx1ZU9mKCIyMDIyLTEyLTAzIikpOworCisKKyAgICAgICAgZHRvLnNldFN0cmVldCgiQnVkZW53ZWciKTsKKyAgICAgICAgZHRvLnNldERpc3RyaWN0KCJXZXN0Iik7CisgICAgICAgIGR0by5zZXRDaXR5KCJXYWxkYXUiKTsKKworICAgICAgICBkdG8uc2V0U3RhdGlvbklkKCIyMjQ0ODgtMTIzYmNkIik7CisgICAgICAgIGR0by5zZXRTdGF0aW9uRGVzY3JpcHRpb24oIlRyYWZvIDI1Iik7CisgICAgICAgIGR0by5zZXRTdGF0aW9uQ29vcmRzKCIxMjEsODg1NSIpOworICAgICAgICBkdG8uc2V0TG9uZ2l0dWRlKEJpZ0RlY2ltYWwudmFsdWVPZig4LjY0NjI4MCkpOworICAgICAgICBkdG8uc2V0TGF0aXR1ZGUoQmlnRGVjaW1hbC52YWx1ZU9mKDUwLjExNTYxOCkpOworCisgICAgICAgIGR0by5zZXRSYWRpdXNJZChVVUlELnJhbmRvbVVVSUQoKSk7CisgICAgICAgIGR0by5zZXRSYWRpdXMoNTBMKTsKKworICAgICAgICBkdG8uc2V0UHVibGljYXRpb25TdGF0dXMoInZlcsO2ZmZlbnRsaWNodCIpOworICAgICAgICBkdG8uc2V0UHVibGljYXRpb25GcmVldGV4dCgiS2FiZWwgYXVzIFN0ZWNrZG9zZSBnZXJpc3NlbiIpOworCisgICAgICAgIGR0by5zZXRFeHBlY3RlZFJlYXNvbklkKFVVSUQucmFuZG9tVVVJRCgpKTsKKyAgICAgICAgZHRvLnNldEV4cGVjdGVkUmVhc29uVGV4dCgiS2FiZWxmZWhsZXIgTmllZGVyc3Bhbm51bmciKTsKKworICAgICAgICBkdG8uc2V0RmFpbHVyZUNsYXNzaWZpY2F0aW9uSWQoVVVJRC5yYW5kb21VVUlEKCkpOworICAgICAgICBkdG8uc2V0RmFpbHVyZUNsYXNzaWZpY2F0aW9uKCJGYWlsQ2xhenoiKTsKKworICAgICAgICBkdG8uc2V0RmFpbHVyZVR5cGVJZChVVUlELnJhbmRvbVVVSUQoKSk7CisgICAgICAgIGR0by5zZXRGYWlsdXJlVHlwZSgiRmFpbFR5cG8iKTsKKworICAgICAgICBkdG8uc2V0U3RhdHVzSW50ZXJuSWQoVVVJRC5yYW5kb21VVUlEKCkpOworICAgICAgICBkdG8uc2V0U3RhdHVzSW50ZXJuKCJORVciKTsKKworICAgICAgICBkdG8uc2V0U3RhdHVzRXh0ZXJuSWQoVVVJRC5yYW5kb21VVUlEKCkpOworICAgICAgICBkdG8uc2V0U3RhdHVzRXh0ZXJuKCJDTE9TRUQiKTsKKworICAgICAgICBkdG8uc2V0QnJhbmNoSWQoVVVJRC5yYW5kb21VVUlEKCkpOworICAgICAgICBkdG8uc2V0QnJhbmNoKCJHIik7CisgICAgICAgIGR0by5zZXRCcmFuY2hDb2xvckNvZGUoIiNmZGVhNjQiKTsKKworICAgICAgICBkdG8uc2V0Q3JlYXRlRGF0ZShEYXRlLnZhbHVlT2YoIjIwMjAtMDUtMDgiKSk7CisgICAgICAgIGR0by5zZXRDcmVhdGVVc2VyKCJ3ZWl6ZW5rZWltayIpOworICAgICAgICBkdG8uc2V0TW9kRGF0ZShEYXRlLnZhbHVlT2YoIjIwMjAtMDUtMjMiKSk7CisgICAgICAgIGR0by5zZXRNb2RVc2VyKCJzY2hsb256aCIpOworCisgICAgICAgIHJldHVybiBkdG87CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBMaXN0PEFycmF5TGlzdDxCaWdEZWNpbWFsPj4gbW9ja1BvbHlnb25Db29yZGluYXRlc0xpc3QoKXsKKworICAgICAgICBMaXN0PEFycmF5TGlzdDxCaWdEZWNpbWFsPj4gY29yZGluYXRlc0xpc3QgPSBuZXcgTGlua2VkTGlzdDw+KCk7CisKKyAgICAgICAgQXJyYXlMaXN0PEJpZ0RlY2ltYWw+IGZpcnN0Q29vcmRpbmF0ZSA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBmaXJzdENvb3JkaW5hdGUuYWRkKG5ldyBCaWdEZWNpbWFsKDUzLjUpKTsKKyAgICAgICAgZmlyc3RDb29yZGluYXRlLmFkZChuZXcgQmlnRGVjaW1hbCgyLjcpKTsKKworICAgICAgICBBcnJheUxpc3Q8QmlnRGVjaW1hbD4gc2Vjb25kQ29vcmRpbmF0ZSA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBzZWNvbmRDb29yZGluYXRlLmFkZChuZXcgQmlnRGVjaW1hbCg1Mi44KSk7CisgICAgICAgIHNlY29uZENvb3JkaW5hdGUuYWRkKG5ldyBCaWdEZWNpbWFsKDIuMSkpOworCisgICAgICAgIEFycmF5TGlzdDxCaWdEZWNpbWFsPiB0aGlyZENvb3JkaW5hdGUgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgdGhpcmRDb29yZGluYXRlLmFkZChuZXcgQmlnRGVjaW1hbCg1My42NikpOworICAgICAgICB0aGlyZENvb3JkaW5hdGUuYWRkKG5ldyBCaWdEZWNpbWFsKDIuMzMpKTsKKworICAgICAgICBBcnJheUxpc3Q8QmlnRGVjaW1hbD4gZm91cnRoQ29vcmRpbmF0ZSA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBmb3VydGhDb29yZGluYXRlLmFkZChuZXcgQmlnRGVjaW1hbCg1Mi45KSk7CisgICAgICAgIGZvdXJ0aENvb3JkaW5hdGUuYWRkKG5ldyBCaWdEZWNpbWFsKDIuMCkpOworCisgICAgICAgIEFycmF5TGlzdDxCaWdEZWNpbWFsPiBmaWZ0aENvb3JkaW5hdGUgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgZmlmdGhDb29yZGluYXRlLmFkZChuZXcgQmlnRGVjaW1hbCg1My40NSkpOworICAgICAgICBmaWZ0aENvb3JkaW5hdGUuYWRkKG5ldyBCaWdEZWNpbWFsKDIuNzcpKTsKKworICAgICAgICBjb3JkaW5hdGVzTGlzdC5hZGQoZmlyc3RDb29yZGluYXRlKTsKKyAgICAgICAgY29yZGluYXRlc0xpc3QuYWRkKHNlY29uZENvb3JkaW5hdGUpOworICAgICAgICBjb3JkaW5hdGVzTGlzdC5hZGQodGhpcmRDb29yZGluYXRlKTsKKyAgICAgICAgY29yZGluYXRlc0xpc3QuYWRkKGZvdXJ0aENvb3JkaW5hdGUpOworICAgICAgICBjb3JkaW5hdGVzTGlzdC5hZGQoZmlmdGhDb29yZGluYXRlKTsKKworICAgICAgICByZXR1cm4gY29yZGluYXRlc0xpc3Q7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9TQVJJUy1JbnRlcmZhY2Uvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL3V0aWwvUmVzb3VyY2VMb2FkZXJCYXNlLmphdmEgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NhcmlzaW50ZXJmYWNlL3V0aWwvUmVzb3VyY2VMb2FkZXJCYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJhOTUxMQotLS0gL2Rldi9udWxsCisrKyBiL1NBUklTLUludGVyZmFjZS9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2FyaXNpbnRlcmZhY2UvdXRpbC9SZXNvdXJjZUxvYWRlckJhc2UuamF2YQpAQCAtMCwwICsxLDg2IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxOCBDb250cmlidXRvcnMgdG8gdGhlIEVjbGlwc2UgRm91bmRhdGlvbgorICoKKyAqIFNlZSB0aGUgTk9USUNFIGZpbGUocykgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwKKyAqIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMi4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnNhcmlzaW50ZXJmYWNlLnV0aWw7CisKK2ltcG9ydCBsb21ib2suZXh0ZXJuLmxvZzRqLkxvZzRqMjsKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uQnl0ZU9yZGVyTWFyazsKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uSU9VdGlsczsKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uaW5wdXQuQk9NSW5wdXRTdHJlYW07CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7CitpbXBvcnQgamF2YS5uZXQuVVJJOworaW1wb3J0IGphdmEubmV0LlVSSVN5bnRheEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoOworaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aHM7CisKK0BMb2c0ajIKK3B1YmxpYyBjbGFzcyBSZXNvdXJjZUxvYWRlckJhc2UgeworCisgICAgcHJpdmF0ZSBTdHJpbmcgc3RyZWFtMlN0cmluZyhJbnB1dFN0cmVhbSBpcywgU3RyaW5nIGZpbGVuYW1lKSB7CisgICAgICAgIFN0cmluZ1dyaXRlciB3cml0ZXIgPSBuZXcgU3RyaW5nV3JpdGVyKCk7CisgICAgICAgIEJPTUlucHV0U3RyZWFtIGJvbUlucHV0U3RyZWFtID0gbmV3IEJPTUlucHV0U3RyZWFtKGlzLCBmYWxzZSwgQnl0ZU9yZGVyTWFyay5VVEZfOCwgQnl0ZU9yZGVyTWFyay5VVEZfMTZCRSwgQnl0ZU9yZGVyTWFyay5VVEZfMTZMRSwKKyAgICAgICAgICAgIEJ5dGVPcmRlck1hcmsuVVRGXzMyQkUsIEJ5dGVPcmRlck1hcmsuVVRGXzMyTEUpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBJT1V0aWxzLmNvcHkoYm9tSW5wdXRTdHJlYW0sIHdyaXRlciwgU3RhbmRhcmRDaGFyc2V0cy5VVEZfOC5uYW1lKCkpOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBsb2cuZXJyb3IoIkZlaGxlciBpbiBzdHJlYW0yU3RyaW5nKCkiLCBlKTsKKyAgICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgfQorCisgICAgICAgIGxvZy5kZWJ1ZygiRGF0ZWkgZXJmb2xncmVpY2ggZWluZ2VsZXNlbjogIiArIGZpbGVuYW1lKTsKKyAgICAgICAgcmV0dXJuIHdyaXRlci50b1N0cmluZygpOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgbG9hZFN0cmluZ0Zyb21SZXNvdXJjZShTdHJpbmcgZmlsZW5hbWUpIHsKKyAgICAgICAgQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpOworICAgICAgICBJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IGNsYXNzTG9hZGVyLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOworICAgICAgICBpZiAoaW5wdXRTdHJlYW09PW51bGwpeworICAgICAgICAgICAgbG9nLmVycm9yKCJEYXRlaSBuaWNodCBnZWZ1bmRlbjogIiArIGZpbGVuYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIGxvZy5kZWJ1ZygiRGF0ZWkgZXhpc3RpZXJ0OiAiICsgZmlsZW5hbWUpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgVVJMIHJlc291cmNlID0gY2xhc3NMb2FkZXIuZ2V0UmVzb3VyY2UoZmlsZW5hbWUpOworICAgICAgICAgICAgaWYgKHJlc291cmNlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBVUkkgdXJpID0gcmVzb3VyY2UudG9VUkkoKTsKKyAgICAgICAgICAgICAgICBsb2cuZGVidWcoIlVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKTogIiArIHVyaSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKFVSSVN5bnRheEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBsb2cuZXJyb3IoIkZlaGxlciBpbiBsb2FkU3RyaW5nRnJvbVJlc291cmNlOiAiICsgZmlsZW5hbWUsIGUpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHN0cmVhbTJTdHJpbmcoaW5wdXRTdHJlYW0sIGZpbGVuYW1lKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGxvYWRGcm9tUGF0aChTdHJpbmcgcGF0aCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgUGF0aCBwYXRocyA9IFBhdGhzLmdldChwYXRoKTsKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygicGF0aHM6ICIgKyBwYXRoKTsKKyAgICAgICAgICAgIHRyeSAoSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBGaWxlcy5uZXdJbnB1dFN0cmVhbShQYXRocy5nZXQocGF0aCkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmVhbTJTdHJpbmcoaW5wdXRTdHJlYW0sIHBhdGhzLmdldEZpbGVOYW1lKCkudG9TdHJpbmcoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGxvZy5lcnJvcigiRmVobGVyIGluIGxvYWRGcm9tUGF0aCIsIGUpOworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9TQVJJUy1JbnRlcmZhY2Uvc3JjL3Rlc3QvcmVzb3VyY2VzL1VzZXJub3RpZmljYXRpb25Kc29uUmVzcG9uc2UuanNvbiBiL1NBUklTLUludGVyZmFjZS9zcmMvdGVzdC9yZXNvdXJjZXMvVXNlcm5vdGlmaWNhdGlvbkpzb25SZXNwb25zZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiNDY5YmYKLS0tIC9kZXYvbnVsbAorKysgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL3Rlc3QvcmVzb3VyY2VzL1VzZXJub3RpZmljYXRpb25Kc29uUmVzcG9uc2UuanNvbgpAQCAtMCwwICsxLDY5IEBACitbCisgIHsKKyAgICAiaWQiOiAyNCwKKyAgICAiZGF0ZSI6ICIyOC41LjIwMjAgMTQ6NDk6MTEiLAorICAgICJwb3N0Y29kZSI6ICI1NTIzNyIsCisgICAgImNpdHkiOiAiQm9ybmhlaW0iLAorICAgICJhZ3MiOiBudWxsLAorICAgICJkaXN0cmljdCI6IG51bGwsCisgICAgInN0cmVldCI6ICJCYWhuaG9mc3RyYcOfZSAyNyIsCisgICAgImxhdCI6ICI0OS44MDMxNjE1IiwKKyAgICAibG5nIjogIjguMTkzMjQ3OCIsCisgICAgImNvbW1lbnQiOiAiTGljaHQgYXVzIiwKKyAgICAib3BlcmF0b3JPdXRhZ2VJbkFyZWEiOiAwCisgIH0sCisgIHsKKyAgICAiaWQiOiAyMywKKyAgICAiZGF0ZSI6ICIyOC41LjIwMjAgMTQ6NDk6MTEiLAorICAgICJwb3N0Y29kZSI6ICI1NTIzNyIsCisgICAgImNpdHkiOiAiRmxvbmhlaW0iLAorICAgICJhZ3MiOiBudWxsLAorICAgICJkaXN0cmljdCI6IG51bGwsCisgICAgInN0cmVldCI6ICJBbSBPYmVydG9yIiwKKyAgICAibGF0IjogIjQ5LjgwMzE2MTUiLAorICAgICJsbmciOiAiOC4xOTMyNDc4IiwKKyAgICAiY29tbWVudCI6ICJaYXBwZW5kdXN0ZXIiLAorICAgICJvcGVyYXRvck91dGFnZUluQXJlYSI6IDAsCisgICAgImhvdXNlTm8iOiAiMTMiCisgIH0sCisgIHsKKyAgICAiaWQiOiAyMywKKyAgICAiZGF0ZSI6ICIyOC41LjIwMjAgMTQ6NDk6MTEiLAorICAgICJwb3N0Y29kZSI6ICI1NTIzNyIsCisgICAgImNpdHkiOiAiRmxvbmhlaW0iLAorICAgICJhZ3MiOiBudWxsLAorICAgICJkaXN0cmljdCI6IG51bGwsCisgICAgImxhdCI6ICI0OS44MDMxNjE1IiwKKyAgICAibG5nIjogIjguMTkzMjQ3OCIsCisgICAgImNvbW1lbnQiOiAiWmFwcGVuZHVzdGVyIiwKKyAgICAib3BlcmF0b3JPdXRhZ2VJbkFyZWEiOiAwCisgIH0sCisgIHsKKyAgICAiaWQiOiAyMywKKyAgICAiZGF0ZSI6ICIyOC41LjIwMjAgMTQ6NDk6MTEiLAorICAgICJwb3N0Y29kZSI6ICI1NTIzNyIsCisgICAgImNpdHkiOiAiRmxvbmhlaW0iLAorICAgICJhZ3MiOiBudWxsLAorICAgICJzdHJlZXQiOiAiIiwKKyAgICAiZGlzdHJpY3QiOiBudWxsLAorICAgICJsYXQiOiAiNDkuODAzMTYxNSIsCisgICAgImxuZyI6ICI4LjE5MzI0NzgiLAorICAgICJjb21tZW50IjogIlphcHBlbmR1c3RlciIsCisgICAgIm9wZXJhdG9yT3V0YWdlSW5BcmVhIjogMCwKKyAgICAiaG91c2VObyI6ICIiCisgIH0sCisgIHsKKyAgICAiaWQiOiAyMywKKyAgICAiZGF0ZSI6ICIyOC41LjIwMjAgMTQ6NDk6MTEiLAorICAgICJwb3N0Y29kZSI6ICI1NTIzNyIsCisgICAgImNpdHkiOiAiRmxvbmhlaW0iLAorICAgICJhZ3MiOiBudWxsLAorICAgICJkaXN0cmljdCI6IG51bGwsCisgICAgInN0cmVldCI6ICJBbSBPYmVydG9yIiwKKyAgICAibGF0IjogIjQ5LjgwMzE2MTUiLAorICAgICJsbmciOiAiOC4xOTMyNDc4IiwKKyAgICAiY29tbWVudCI6ICJaYXBwZW5kdXN0ZXIiLAorICAgICJwaG9uZSI6ICIwMTUyMDEyMzQ1NiIsCisgICAgIm9wZXJhdG9yT3V0YWdlSW5BcmVhIjogMAorICB9CitdClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU0FSSVMtSW50ZXJmYWNlL3NyYy90ZXN0L3Jlc291cmNlcy9hcHBsaWNhdGlvbi55bWwgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL3Rlc3QvcmVzb3VyY2VzL2FwcGxpY2F0aW9uLnltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDNiZTgzCi0tLSAvZGV2L251bGwKKysrIGIvU0FSSVMtSW50ZXJmYWNlL3NyYy90ZXN0L3Jlc291cmNlcy9hcHBsaWNhdGlvbi55bWwKQEAgLTAsMCArMSw3NiBAQAorIyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAgQ29weXJpZ2h0IChjKSAyMDE5IENvbnRyaWJ1dG9ycyB0byB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uCisjCisjICBTZWUgdGhlIE5PVElDRSBmaWxlKHMpIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsCisjICBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KKyMKKyMgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorIyAgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMi4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorIyAgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLgorIworIyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAKKyMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK3NwcmluZzoKKyAgcmFiYml0bXE6CisgICAgaG9zdDogaG9zdAorICAgIHBvcnQ6IDU2NzIKKyAgICB1c2VybmFtZTogdXNlck5hbWUKKyAgICBwYXNzd29yZDogc2VjUHdkCisKKyAgICAjIEltcG9ydGthbmFsCisgICAgaW1wb3J0RXhjaGFuZ2U6IHNpdEltcG9ydEV4Y2hhbmdlX2RldgorICAgIGltcG9ydFF1ZXVlOiBzaXRJbXBvcnRRdWV1ZV9kZXYKKyAgICBpbXBvcnRrZXk6IHNpdEltcG9ydEV4Y2hhbmdlLmZhaWx1cmVJbXBvcnRLZXlfZGV2CisKKyAgICAjIEV4cG9ydGthbmFsCisgICAgZXhwb3J0RXhjaGFuZ2U6IHNpdEV4cG9ydEV4Y2hhbmdlX2RldgorICAgIGV4cG9ydFF1ZXVlOiBzdG9lcnVuZ3NhdXNrdW5mdF9leHBvcnRfcXVldWVfdGVzdF9zaW1vbgorICAgIGV4cG9ydEtleTogc3RvZXJ1bmdzYXVza3VuZnRfZXhwb3J0X2tleV90ZXN0X3NpbW9uCisKKworc2VydmVyOgorICBtYXgtaHR0cC1oZWFkZXItc2l6ZTogMjYyMTQ0CisKK2p3dDoKKyAgdG9rZW5IZWFkZXI6IEF1dGhvcml6YXRpb24KKyAgdXNlU3RhdGljSnd0OiBmYWxzZQorICBzdGF0aWNKd3Q6IHgKKworZ3JpZEZhaWx1cmVJbmZvcm1hdGlvbjoKKyAgbWF4TGlzdFNpemU6IDIwMDAKKworCitmZWlnbjoKKyAgY2xpZW50OgorICAgIGNvbmZpZzoKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGNvbm5lY3RUaW1lb3V0OiA2MDAwMAorICAgICAgICByZWFkVGltZW91dDogNjAwMDAKK2NvcnM6CisgIGNvcnNFbmFibGVkOiBmYWxzZQorCitzdG9lcnVuZ3NhdXNrdW5mdDoKKyAgYXBpVXJsOiBodHRwczovL3N0YWdlLWFwaS1vcGVyYXRvci5zdG9lcnVuZ3NhdXNrdW5mdC5kZS9hcGkvdjEuMC8KKyAgdXNlcjogdXNlck5hbWUKKyAgcGFzc3dvcmQ6IHNlY1B3ZAorICBzY2hlZHVsaW5nLWltcG9ydDoKKyAgICBlbmFibGVkOiBmYWxzZQorICAgIGNyb246IDAgKi8xNSAqID8gKiAqCisKKy0tLQorCitzcHJpbmc6CisgIHByb2ZpbGVzOiB0ZXN0CisKK2p3dDoKKyAgdG9rZW5IZWFkZXI6IEF1dGhvcml6YXRpb24KKyAgdXNlU3RhdGljSnd0OiB0cnVlCisgIHN0YXRpY0p3dDogZXlKaGJHY2lPaUpTVXpJMU5pSXNJblI1Y0NJZ09pQWlTbGRVSWl3aWEybGtJaUE2SUNKSVlsSTNaMnBvYm1FMmVYSlJablpKVFdoVVNWOXRZMmczWm10VFFXVkZYM2hMVGpCaFpWbDBiamRqSW4wLmV5SnFkR2tpT2lJNU1HSTBOR0ZrT0MxaVlqbG1MVFExTXprdFlUUXdZeTB5WWpReVpUTmtOak5pT0dFaUxDSmxlSEFpT2pFMU56ZzJOVFUzT1RVc0ltNWlaaUk2TUN3aWFXRjBJam94TlRjNE5qVTFORGsxTENKcGMzTWlPaUpvZEhSd09pOHZiRzlqWVd4b2IzTjBPamd3T0RBdllYVjBhQzl5WldGc2JYTXZSV3h2WjJKdmIyc2lMQ0poZFdRaU9pSmxiRzluWW05dmF5MWlZV05yWlc1a0lpd2ljM1ZpSWpvaU9EWXlOalk1Tm1ZdFpqRmhNaTAwWkdJMUxUa3laV1l0WlRsaE1qUTJOamcxWVRVMElpd2lkSGx3SWpvaVFtVmhjbVZ5SWl3aVlYcHdJam9pWld4dloySnZiMnN0WW1GamEyVnVaQ0lzSW1GMWRHaGZkR2x0WlNJNk1Dd2ljMlZ6YzJsdmJsOXpkR0YwWlNJNklqSm1NV0l6T0RFNUxXWmpOalF0TkRFek5DMWlOV1F4TFdZM1pXWTROelU1TkRCa05DSXNJbUZqY2lJNklqRWlMQ0poYkd4dmQyVmtMVzl5YVdkcGJuTWlPbHNpS2lKZExDSnlaV0ZzYlY5aFkyTmxjM01pT25zaWNtOXNaWE1pT2xzaWEyOXVMV0ZrYldsdUlpd2lhMjl1TFhkeWFYUmxjaUlzSW10dmJpMWhZMk5sYzNNaUxDSnJiMjR0Y21WaFpHVnlJbDE5TENKeVpYTnZkWEpqWlY5aFkyTmxjM01pT250OUxDSnVZVzFsSWpvaVZHVnpkR1Z5Um1seWMzUnVZVzFsWDNKM1lTQlVaWE4wWlhKTVlYTjBibUZ0WlY5eWQyRWlMQ0p3Y21WbVpYSnlaV1JmZFhObGNtNWhiV1VpT2lKMFpYTjBkWE5sY2w5eWQyRWlMQ0puYVhabGJsOXVZVzFsSWpvaVZHVnpkR1Z5Um1seWMzUnVZVzFsWDNKM1lTSXNJbVpoYldsc2VWOXVZVzFsSWpvaVZHVnpkR1Z5VEdGemRHNWhiV1ZmY25kaEluMC5EQVlYdXY0dEtuOFJYcU8xanl0dG5ELXRGNG5TaFVCUXlmZTRiS2JBaVBBeVkyeDVZYkFmM000ZVhuTHJHcW84LWxvR0tsZElDQzI4YkwwTGFNQTNLS2tRRU9mVzVzZnBHcW9ONjIxMnZzODltT2tsdDBUSlljNVBNWHdGZ0o1V0NfVEtqZHdxNy1hYURhZk9FV2VoVjBVMXV0M3MtOTRvdk5ZSUVuMjluelhtMlcxbGRvWEpFcTAzRjg4MGpseXNRNXpsUnZHRjdlWEVFcEZmSTJVUnl5TlEyVVdoMFNzZnEtZ09BdDJwYkYxdTZwckE1UmZ2VW1aM3YxZXUyMVlMR1p0Z3FQcXhiMWw2b2R5SDNpcDE1al9IZGduVGVvNTJ5bXh1UlVqNjVNc2ttZTNWNWV2MkRpdEhJOXZaZ25wVjhJZGhiNFRUV2xpQmVHQ09NZkRGQ2cKKworc3RvZXJ1bmdzYXVza3VuZnQ6CisgIGFwaVVybDogaHR0cHM6Ly9zdGFnZS1hcGktb3BlcmF0b3Iuc3RvZXJ1bmdzYXVza3VuZnQuZGUvYXBpL3YxLjAvCisgIHVzZXI6IHVzZXJOYW1lCisgIHBhc3N3b3JkOiBzZWNQd2QKKyAgc2NoZWR1bGluZy1pbXBvcnQ6CisgICAgZW5hYmxlZDogdHJ1ZQorICAgIGNyb246IDAgKi8xNSAqID8gKiAqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU0FSSVMtSW50ZXJmYWNlL3NyYy90ZXN0L3Jlc291cmNlcy9tb2NraXRvLWV4dGVuc2lvbnMvb3JnLm1vY2tpdG8ucGx1Z2lucy5Nb2NrTWFrZXIgYi9TQVJJUy1JbnRlcmZhY2Uvc3JjL3Rlc3QvcmVzb3VyY2VzL21vY2tpdG8tZXh0ZW5zaW9ucy9vcmcubW9ja2l0by5wbHVnaW5zLk1vY2tNYWtlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTZlZTljCi0tLSAvZGV2L251bGwKKysrIGIvU0FSSVMtSW50ZXJmYWNlL3NyYy90ZXN0L3Jlc291cmNlcy9tb2NraXRvLWV4dGVuc2lvbnMvb3JnLm1vY2tpdG8ucGx1Z2lucy5Nb2NrTWFrZXIKQEAgLTAsMCArMSBAQAorbW9jay1tYWtlci1pbmxpbmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hZGRyZXNzSW1wb3J0L0RvY2tlcmZpbGUgYi9hZGRyZXNzSW1wb3J0L0RvY2tlcmZpbGUKaW5kZXggMGFjMTRjMC4uZjg0OWY4OCAxMDA2NDQKLS0tIGEvYWRkcmVzc0ltcG9ydC9Eb2NrZXJmaWxlCisrKyBiL2FkZHJlc3NJbXBvcnQvRG9ja2VyZmlsZQpAQCAtMTMsOCArMTMsNiBAQAogIwogRlJPTSBvcGVuamRrOjgtanJlLWFscGluZQogCi1FTlYgSFRUUF9QUk9YWSBodHRwOi8vd2VicHJveHkzLnB0YS5kZTo4MDgwCi1FTlYgSFRUUFNfUFJPWFkgaHR0cDovL3dlYnByb3h5My5wdGEuZGU6ODA4MAogRU5WIFRaIEV1cm9wZS9CZXJsaW4KIAogIyBpbnN0YWxsIHR6ZGF0YSB0byBzZXQgdGhlIHJpZ2h0IHRpbWV6b25lCmRpZmYgLS1naXQgYS9hZGRyZXNzSW1wb3J0L3NyYy9tYWluL3Jlc291cmNlcy9sb2diYWNrLXNwcmluZy54bWwgYi9hZGRyZXNzSW1wb3J0L3NyYy9tYWluL3Jlc291cmNlcy9sb2diYWNrLXNwcmluZy54bWwKaW5kZXggY2U3ZTRmZC4uYThjZjJlZSAxMDA2NDQKLS0tIGEvYWRkcmVzc0ltcG9ydC9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nYmFjay1zcHJpbmcueG1sCisrKyBiL2FkZHJlc3NJbXBvcnQvc3JjL21haW4vcmVzb3VyY2VzL2xvZ2JhY2stc3ByaW5nLnhtbApAQCAtNDYsNyArNDYsNyBAQAogICAgIDwvcm9vdD4KIAogICAgIDwhLS0gTE9HICJjb20uYmFlbGR1bmdvcmcuZWNsaXBzZS5vcGVuay5jb250YWN0YmFzZWRhdGEqIiBhdCBJTkZPIGxldmVsIC0tPgotICAgIDxsb2dnZXIgbmFtZT0ib3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5pbXBvcnRhZHJlc3NlcyIgbGV2ZWw9ImluZm8iIGFkZGl0aXZpdHk9ImZhbHNlIj4KKyAgICA8bG9nZ2VyIG5hbWU9Im9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uaW1wb3J0YWRyZXNzZXMiIGFkZGl0aXZpdHk9ImZhbHNlIj4KICAgICAgICAgPGFwcGVuZGVyLXJlZiByZWY9IlJvbGxpbmdGaWxlIi8+CiAgICAgICAgIDxhcHBlbmRlci1yZWYgcmVmPSJDb25zb2xlIi8+CiAgICAgPC9sb2dnZXI+CmRpZmYgLS1naXQgYS9nZnNCYWNrZW5kU2VydmljZS9Eb2NrZXJmaWxlX0JyYW5jaCBiL2dmc0JhY2tlbmRTZXJ2aWNlL0RvY2tlcmZpbGVfQnJhbmNoCmluZGV4IGIwYTJiNTQuLjgyNDkzNDkgMTAwNjQ0Ci0tLSBhL2dmc0JhY2tlbmRTZXJ2aWNlL0RvY2tlcmZpbGVfQnJhbmNoCisrKyBiL2dmc0JhY2tlbmRTZXJ2aWNlL0RvY2tlcmZpbGVfQnJhbmNoCkBAIC0xNSw4ICsxNSw2IEBACiBGUk9NIG9wZW5qZGs6OC1qcmUtYWxwaW5lCiAKIEVOViBKQVZBX1RPT0xfT1BUSU9OUyAtYWdlbnRsaWI6amR3cD10cmFuc3BvcnQ9ZHRfc29ja2V0LGFkZHJlc3M9ODAwMCxzZXJ2ZXI9eSxzdXNwZW5kPW4KLUVOViBIVFRQX1BST1hZIGh0dHA6Ly93ZWJwcm94eTMucHRhLmRlOjgwODAKLUVOViBIVFRQU19QUk9YWSBodHRwOi8vd2VicHJveHkzLnB0YS5kZTo4MDgwCiBFTlYgVFogRXVyb3BlL0JlcmxpbgogCiAjIGluc3RhbGwgdHpkYXRhIHRvIHNldCB0aGUgcmlnaHQgdGltZXpvbmUKZGlmZiAtLWdpdCBhL2dmc0JhY2tlbmRTZXJ2aWNlL0RvY2tlcmZpbGVfRGV2U2VydmVyIGIvZ2ZzQmFja2VuZFNlcnZpY2UvRG9ja2VyZmlsZV9EZXZTZXJ2ZXIKaW5kZXggN2I5OWM1MS4uNGNmYjhjNiAxMDA2NDQKLS0tIGEvZ2ZzQmFja2VuZFNlcnZpY2UvRG9ja2VyZmlsZV9EZXZTZXJ2ZXIKKysrIGIvZ2ZzQmFja2VuZFNlcnZpY2UvRG9ja2VyZmlsZV9EZXZTZXJ2ZXIKQEAgLTE1LDggKzE1LDYgQEAKIEZST00gb3Blbmpkazo4LWpyZS1hbHBpbmUKIAogRU5WIEpBVkFfVE9PTF9PUFRJT05TIC1hZ2VudGxpYjpqZHdwPXRyYW5zcG9ydD1kdF9zb2NrZXQsYWRkcmVzcz04MDAwLHNlcnZlcj15LHN1c3BlbmQ9bgotRU5WIEhUVFBfUFJPWFkgaHR0cDovL3dlYnByb3h5My5wdGEuZGU6ODA4MAotRU5WIEhUVFBTX1BST1hZIGh0dHA6Ly93ZWJwcm94eTMucHRhLmRlOjgwODAKIEVOViBUWiBFdXJvcGUvQmVybGluCiAKICMgaW5zdGFsbCB0emRhdGEgdG8gc2V0IHRoZSByaWdodCB0aW1lem9uZQpkaWZmIC0tZ2l0IGEvZ2ZzQmFja2VuZFNlcnZpY2UvRG9ja2VyZmlsZV9EZXZTZXJ2ZXJVbnNlY3VyZSBiL2dmc0JhY2tlbmRTZXJ2aWNlL0RvY2tlcmZpbGVfRGV2U2VydmVyVW5zZWN1cmUKaW5kZXggZGM1ZjY3ZS4uZmVkNzYzMyAxMDA2NDQKLS0tIGEvZ2ZzQmFja2VuZFNlcnZpY2UvRG9ja2VyZmlsZV9EZXZTZXJ2ZXJVbnNlY3VyZQorKysgYi9nZnNCYWNrZW5kU2VydmljZS9Eb2NrZXJmaWxlX0RldlNlcnZlclVuc2VjdXJlCkBAIC0xNSw4ICsxNSw2IEBACiBGUk9NIG9wZW5qZGs6OC1qcmUtYWxwaW5lCiAKIEVOViBKQVZBX1RPT0xfT1BUSU9OUyAtYWdlbnRsaWI6amR3cD10cmFuc3BvcnQ9ZHRfc29ja2V0LGFkZHJlc3M9ODAwMCxzZXJ2ZXI9eSxzdXNwZW5kPW4KLUVOViBIVFRQX1BST1hZIGh0dHA6Ly93ZWJwcm94eTMucHRhLmRlOjgwODAKLUVOViBIVFRQU19QUk9YWSBodHRwOi8vd2VicHJveHkzLnB0YS5kZTo4MDgwCiBFTlYgVFogRXVyb3BlL0JlcmxpbgogCiAjIGluc3RhbGwgdHpkYXRhIHRvIHNldCB0aGUgcmlnaHQgdGltZXpvbmUKZGlmZiAtLWdpdCBhL2dmc0JhY2tlbmRTZXJ2aWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9icG1uL2ltcGwvR2ZpR3JpZC5qYXZhIGIvZ2ZzQmFja2VuZFNlcnZpY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL2JwbW4vaW1wbC9HZmlHcmlkLmphdmEKaW5kZXggMjc2ZjU5Yy4uMzU4YWM0YiAxMDA2NDQKLS0tIGEvZ2ZzQmFja2VuZFNlcnZpY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL2JwbW4vaW1wbC9HZmlHcmlkLmphdmEKKysrIGIvZ2ZzQmFja2VuZFNlcnZpY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL2JwbW4vaW1wbC9HZmlHcmlkLmphdmEKQEAgLTIwLDEyICsyMCwzNSBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uYnBtbi5iYXNlLlByb2Nlc3NHcmlkOwogaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uYnBtbi5iYXNlLlByb2Nlc3NUYXNrOwogaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uYnBtbi5iYXNlLnRhc2tzLkRlY2lzaW9uVGFzazsKLWltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLmJwbW4uaW1wbC50YXNrcy4qOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uYnBtbi5pbXBsLnRhc2tzLkRlY2lkZUZhaWx1cmVJbmZvQ2FuY2VsZWQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5icG1uLmltcGwudGFza3MuRGVjaWRlRmFpbHVyZUluZm9IYXNTdWJvcmRpbmF0ZWRJbmZvczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLmJwbW4uaW1wbC50YXNrcy5EZWNpZGVGYWlsdXJlSW5mb1BsYW5uZWQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5icG1uLmltcGwudGFza3MuRGVjaWRlRmFpbHVyZUluZm9QdWJsaXNoZWQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5icG1uLmltcGwudGFza3MuRGVjaWRlRmFpbHVyZUluZm9VcGRhdGVkOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uYnBtbi5pbXBsLnRhc2tzLlB1Ymxpc2hGYWlsdXJlVG9DaGFubmVsc1Rhc2s7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5icG1uLmltcGwudGFza3MuUmVQdWJsaXNoRmFpbHVyZVRvTWFpbENoYW5uZWxzVGFzazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLmJwbW4uaW1wbC50YXNrcy5SZXNldFB1Ymxpc2hlZEZsYWdPbkNoYW5uZWxzVGFzazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLmJwbW4uaW1wbC50YXNrcy5TZXRFbmREYXRlVGFzazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLmJwbW4uaW1wbC50YXNrcy5TaG9ydGN1dFRhc2s7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5icG1uLmltcGwudGFza3MuU3RvcmVFZGl0U3RhdHVzT2ZQYXJlbnRUb0NoaWxkcmVuVGFzazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLmJwbW4uaW1wbC50YXNrcy5TdG9yZVB1Ymxpc2hTdGF0dXNUYXNrOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uYnBtbi5pbXBsLnRhc2tzLlVJU3RvcmVGYWlsdXJlSW5mb3JtYXRpb25UYXNrOwogaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uY29uc3RhbnRzLkNvbnN0YW50czsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnN0ZXJlb3R5cGUuQ29tcG9uZW50OwogCi1pbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uYnBtbi5iYXNlLnRhc2tzLkRlY2lzaW9uVGFzay5PdXRwdXRQb3J0Lio7Ci1pbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uYnBtbi5pbXBsLkdmaVByb2Nlc3NTdGF0ZS4qOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLmJwbW4uYmFzZS50YXNrcy5EZWNpc2lvblRhc2suT3V0cHV0UG9ydC5OTzsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5icG1uLmJhc2UudGFza3MuRGVjaXNpb25UYXNrLk91dHB1dFBvcnQuUE9SVDE7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uYnBtbi5iYXNlLnRhc2tzLkRlY2lzaW9uVGFzay5PdXRwdXRQb3J0LlBPUlQyOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLmJwbW4uYmFzZS50YXNrcy5EZWNpc2lvblRhc2suT3V0cHV0UG9ydC5QT1JUMzsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5icG1uLmJhc2UudGFza3MuRGVjaXNpb25UYXNrLk91dHB1dFBvcnQuWUVTOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLmJwbW4uaW1wbC5HZmlQcm9jZXNzU3RhdGUuQ0FOQ0VMRUQ7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uYnBtbi5pbXBsLkdmaVByb2Nlc3NTdGF0ZS5DSEVDS0VEX0ZPUl9QVUJMSVNIXzsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5icG1uLmltcGwuR2ZpUHJvY2Vzc1N0YXRlLkNPTVBMRVRFRDsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5icG1uLmltcGwuR2ZpUHJvY2Vzc1N0YXRlLkNSRUFURUQ7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uYnBtbi5pbXBsLkdmaVByb2Nlc3NTdGF0ZS5ORVc7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uYnBtbi5pbXBsLkdmaVByb2Nlc3NTdGF0ZS5QTEFOTkVEOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLmJwbW4uaW1wbC5HZmlQcm9jZXNzU3RhdGUuUVVBTElGSUVEOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLmJwbW4uaW1wbC5HZmlQcm9jZXNzU3RhdGUuVVBEQVRFRDsKIAogQExvZzRqMgogQENvbXBvbmVudApAQCAtNjgsOCArOTEsMTEgQEAKICAgICAgICAgUHJvY2Vzc1Rhc2sgc3RvcmVFZGl0U3RhdHVzVXBkYXRlZCA9IG5ldyBTaG9ydGN1dFRhc2soIFVQREFURUQgKTsKICAgICAgICAgUHJvY2Vzc1Rhc2sgcmVzZXRQdWJsaXNoZWRGbGFnT25DaGFubmVscyA9IG5ldyBSZXNldFB1Ymxpc2hlZEZsYWdPbkNoYW5uZWxzVGFzaygpOwogCi0gICAgICAgIERlY2lzaW9uVGFzazxHZmlQcm9jZXNzU3ViamVjdD4gZGVjaWRlSGFzU3Vib3JkaW5hdGVkSW5mb3MgPSBuZXcgRGVjaWRlRmFpbHVyZUluZm9IYXNTdWJvcmRpbmF0ZWRJbmZvcygpOwotICAgICAgICBQcm9jZXNzVGFzayBzdG9yZUVkaXRTdGF0dXNPZlBhcmVudEZvckNoaWxkcmVuID0gbmV3IFN0b3JlRWRpdFN0YXR1c09mUGFyZW50VG9DaGlsZHJlblRhc2soKTsKKyAgICAgICAgRGVjaXNpb25UYXNrPEdmaVByb2Nlc3NTdWJqZWN0PiBkZWNpZGVIYXNTdWJvcmRpbmF0ZWRJbmZvc0NvbXBsZXRlZCA9IG5ldyBEZWNpZGVGYWlsdXJlSW5mb0hhc1N1Ym9yZGluYXRlZEluZm9zKCk7CisgICAgICAgIFByb2Nlc3NUYXNrIHN0b3JlRWRpdFN0YXR1c09mUGFyZW50Rm9yQ2hpbGRyZW5Db21wbGV0ZWQgPSBuZXcgU3RvcmVFZGl0U3RhdHVzT2ZQYXJlbnRUb0NoaWxkcmVuVGFzaygpOworCisgICAgICAgIERlY2lzaW9uVGFzazxHZmlQcm9jZXNzU3ViamVjdD4gZGVjaWRlSGFzU3Vib3JkaW5hdGVkSW5mb3NDYW5jZWxsZWQgPSBuZXcgRGVjaWRlRmFpbHVyZUluZm9IYXNTdWJvcmRpbmF0ZWRJbmZvcygpOworICAgICAgICBQcm9jZXNzVGFzayBzdG9yZUVkaXRTdGF0dXNPZlBhcmVudEZvckNoaWxkcmVuQ2FuY2VsbGVkID0gbmV3IFN0b3JlRWRpdFN0YXR1c09mUGFyZW50VG9DaGlsZHJlblRhc2soKTsKIAogICAgICAgICBQcm9jZXNzVGFzayBjb21wbGV0ZWRFbmRwb2ludCA9IHJlZ2lzdGVyKCBDT01QTEVURUQsCiAgICAgICAgICAgICAgICAgbmV3IFVJU3RvcmVGYWlsdXJlSW5mb3JtYXRpb25UYXNrKCAiU3RhdGUgQ09NUEVURUQgVUkgVGFzayIsIHRydWUpKTsKQEAgLTEwNSwxNiArMTMxLDE5IEBACiAgICAgICAgIHJlUHVibGlzaFRvTWFpbENoYW5uZWxzQ29tcGxldGVkLmNvbm5lY3RPdXRwdXRUbyhkZWNpZGVQdWJsaXNoZWRPbkNvbXBsZXRlKTsKICAgICAgICAgZGVjaWRlUHVibGlzaGVkT25Db21wbGV0ZS5jb25uZWN0T3V0cHV0VG8oWUVTLCBzdG9yZVB1YmxpY2F0aW9uU3RhdHVzV2l0aGRyYXduKTsKIAotICAgICAgICBkZWNpZGVQdWJsaXNoZWRPbkNvbXBsZXRlLmNvbm5lY3RPdXRwdXRUbyhOTywgZGVjaWRlSGFzU3Vib3JkaW5hdGVkSW5mb3MpOwotICAgICAgICBzdG9yZVB1YmxpY2F0aW9uU3RhdHVzV2l0aGRyYXduLmNvbm5lY3RPdXRwdXRUbyhkZWNpZGVIYXNTdWJvcmRpbmF0ZWRJbmZvcyk7Ci0gICAgICAgIGRlY2lkZUhhc1N1Ym9yZGluYXRlZEluZm9zLmNvbm5lY3RPdXRwdXRUbyhOTywgY29tcGxldGVkRW5kcG9pbnQpOwotICAgICAgICBkZWNpZGVIYXNTdWJvcmRpbmF0ZWRJbmZvcy5jb25uZWN0T3V0cHV0VG8oWUVTLCBzdG9yZUVkaXRTdGF0dXNPZlBhcmVudEZvckNoaWxkcmVuKTsKLSAgICAgICAgc3RvcmVFZGl0U3RhdHVzT2ZQYXJlbnRGb3JDaGlsZHJlbi5jb25uZWN0T3V0cHV0VG8oY29tcGxldGVkRW5kcG9pbnQpOworICAgICAgICBkZWNpZGVQdWJsaXNoZWRPbkNvbXBsZXRlLmNvbm5lY3RPdXRwdXRUbyhOTywgZGVjaWRlSGFzU3Vib3JkaW5hdGVkSW5mb3NDb21wbGV0ZWQpOworICAgICAgICBzdG9yZVB1YmxpY2F0aW9uU3RhdHVzV2l0aGRyYXduLmNvbm5lY3RPdXRwdXRUbyhkZWNpZGVIYXNTdWJvcmRpbmF0ZWRJbmZvc0NvbXBsZXRlZCk7CisgICAgICAgIGRlY2lkZUhhc1N1Ym9yZGluYXRlZEluZm9zQ29tcGxldGVkLmNvbm5lY3RPdXRwdXRUbyhOTywgY29tcGxldGVkRW5kcG9pbnQpOworICAgICAgICBkZWNpZGVIYXNTdWJvcmRpbmF0ZWRJbmZvc0NvbXBsZXRlZC5jb25uZWN0T3V0cHV0VG8oWUVTLCBzdG9yZUVkaXRTdGF0dXNPZlBhcmVudEZvckNoaWxkcmVuQ29tcGxldGVkKTsKKyAgICAgICAgc3RvcmVFZGl0U3RhdHVzT2ZQYXJlbnRGb3JDaGlsZHJlbkNvbXBsZXRlZC5jb25uZWN0T3V0cHV0VG8oY29tcGxldGVkRW5kcG9pbnQpOwogCiAgICAgICAgIHN0b3JlRWRpdFN0YXR1c0NhbmNlbGVkLmNvbm5lY3RPdXRwdXRUbyhkZWNpZGVQdWJsaXNoZWQpOwogICAgICAgICBkZWNpZGVQdWJsaXNoZWQuY29ubmVjdE91dHB1dFRvKCBZRVMsIHN0b3JlUHViU3RhdHVzV2l0aGRyYXduT25DYW5jZWwpOwotICAgICAgICBkZWNpZGVQdWJsaXNoZWQuY29ubmVjdE91dHB1dFRvKCBOTywgY2FuY2VsZWRFbmRwb2ludCk7Ci0gICAgICAgIHN0b3JlUHViU3RhdHVzV2l0aGRyYXduT25DYW5jZWwuY29ubmVjdE91dHB1dFRvKCBjYW5jZWxlZEVuZHBvaW50ICk7CisgICAgICAgIGRlY2lkZVB1Ymxpc2hlZC5jb25uZWN0T3V0cHV0VG8oIE5PLCBkZWNpZGVIYXNTdWJvcmRpbmF0ZWRJbmZvc0NhbmNlbGxlZCApOworICAgICAgICBzdG9yZVB1YlN0YXR1c1dpdGhkcmF3bk9uQ2FuY2VsLmNvbm5lY3RPdXRwdXRUbyggZGVjaWRlSGFzU3Vib3JkaW5hdGVkSW5mb3NDYW5jZWxsZWQgKTsKKyAgICAgICAgZGVjaWRlSGFzU3Vib3JkaW5hdGVkSW5mb3NDYW5jZWxsZWQuY29ubmVjdE91dHB1dFRvKFlFUywgc3RvcmVFZGl0U3RhdHVzT2ZQYXJlbnRGb3JDaGlsZHJlbkNhbmNlbGxlZCApOworICAgICAgICBkZWNpZGVIYXNTdWJvcmRpbmF0ZWRJbmZvc0NhbmNlbGxlZC5jb25uZWN0T3V0cHV0VG8oTk8sIGNhbmNlbGVkRW5kcG9pbnQgKTsKKyAgICAgICAgc3RvcmVFZGl0U3RhdHVzT2ZQYXJlbnRGb3JDaGlsZHJlbkNhbmNlbGxlZC5jb25uZWN0T3V0cHV0VG8oIGNhbmNlbGVkRW5kcG9pbnQgKTsKIAogICAgICAgICBwdWJsaXNoTWVzc2FnZVRvQ2hhbm5lbHMuY29ubmVjdE91dHB1dFRvKHN0b3JlUHVibGljYXRpb25TdGF0dXNQdWJsaXNoZWQpOwogICAgICAgICBzdG9yZVB1YmxpY2F0aW9uU3RhdHVzUHVibGlzaGVkLmNvbm5lY3RPdXRwdXRUbyh1cGRhdGVNZXNzYWdlKTsKZGlmZiAtLWdpdCBhL2dmc0JhY2tlbmRTZXJ2aWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zZXJ2aWNlL0ZhaWx1cmVJbmZvcm1hdGlvblNlcnZpY2UuamF2YSBiL2dmc0JhY2tlbmRTZXJ2aWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zZXJ2aWNlL0ZhaWx1cmVJbmZvcm1hdGlvblNlcnZpY2UuamF2YQppbmRleCA3OGUzNTIyLi43NjhhOWVmIDEwMDY0NAotLS0gYS9nZnNCYWNrZW5kU2VydmljZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2VydmljZS9GYWlsdXJlSW5mb3JtYXRpb25TZXJ2aWNlLmphdmEKKysrIGIvZ2ZzQmFja2VuZFNlcnZpY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NlcnZpY2UvRmFpbHVyZUluZm9ybWF0aW9uU2VydmljZS5qYXZhCkBAIC02MTEsNiArNjExLDcgQEAKICAgICAgICAgICAgICAgICBjb25kZW5zZWRGYWlsdXJlSW5mb3JtYXRpb24uc2V0TG9uZ2l0dWRlKHRibEluZlRvY2hlY2suZ2V0KCkuZ2V0TG9uZ2l0dWRlKCkpOwogICAgICAgICAgICAgICAgIGNvbmRlbnNlZEZhaWx1cmVJbmZvcm1hdGlvbi5zZXRMYXRpdHVkZSh0YmxJbmZUb2NoZWNrLmdldCgpLmdldExhdGl0dWRlKCkpOwogICAgICAgICAgICAgICAgIGNvbmRlbnNlZEZhaWx1cmVJbmZvcm1hdGlvbi5zZXRBZGRyZXNzVHlwZSh0YmxJbmZUb2NoZWNrLmdldCgpLmdldEFkZHJlc3NUeXBlKCkpOworICAgICAgICAgICAgICAgIGNvbmRlbnNlZEZhaWx1cmVJbmZvcm1hdGlvbi5zZXRGYXVsdExvY2F0aW9uQXJlYSh0YmxJbmZUb2NoZWNrLmdldCgpLmdldEZhdWx0TG9jYXRpb25BcmVhKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgewpAQCAtNjI5LDYgKzYzMCw3IEBACiAgICAgICAgIGlmIChmaXJzdEZhaWx1cmVJbmZvcm1hdGlvbkZpbHRlcmVkLmlzUHJlc2VudCgpKSB7CiAgICAgICAgICAgICBjb25kZW5zZWRGYWlsdXJlSW5mb3JtYXRpb24uc2V0TG9uZ2l0dWRlKGZpcnN0RmFpbHVyZUluZm9ybWF0aW9uRmlsdGVyZWQuZ2V0KCkuZ2V0TG9uZ2l0dWRlKCkpOwogICAgICAgICAgICAgY29uZGVuc2VkRmFpbHVyZUluZm9ybWF0aW9uLnNldExhdGl0dWRlKGZpcnN0RmFpbHVyZUluZm9ybWF0aW9uRmlsdGVyZWQuZ2V0KCkuZ2V0TGF0aXR1ZGUoKSk7CisgICAgICAgICAgICBjb25kZW5zZWRGYWlsdXJlSW5mb3JtYXRpb24uc2V0RmF1bHRMb2NhdGlvbkFyZWEoZmlyc3RGYWlsdXJlSW5mb3JtYXRpb25GaWx0ZXJlZC5nZXQoKS5nZXRGYXVsdExvY2F0aW9uQXJlYSgpKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvZ2ZzQmFja2VuZFNlcnZpY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NlcnZpY2UvSW1wb3J0U2VydmljZS5qYXZhIGIvZ2ZzQmFja2VuZFNlcnZpY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NlcnZpY2UvSW1wb3J0U2VydmljZS5qYXZhCmluZGV4IGY2ZTc4MGMuLjUzNDY4OGIgMTAwNjQ0Ci0tLSBhL2dmc0JhY2tlbmRTZXJ2aWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zZXJ2aWNlL0ltcG9ydFNlcnZpY2UuamF2YQorKysgYi9nZnNCYWNrZW5kU2VydmljZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2VydmljZS9JbXBvcnRTZXJ2aWNlLmphdmEKQEAgLTE3LDYgKzE3LDcgQEAKIGltcG9ydCBsb21ib2suZXh0ZXJuLmxvZzRqLkxvZzRqMjsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZy5TdHJpbmdVdGlsczsKIGltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLmJwbW4uaW1wbC5HZmlQcm9jZXNzU3RhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5jb25zdGFudHMuQ29uc3RhbnRzOwogaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uZXhjZXB0aW9ucy5JbnRlcm5hbFNlcnZlckVycm9yRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24ubWFwcGVyLkZhaWx1cmVJbmZvcm1hdGlvbk1hcHBlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLm1vZGVsLlRibEFkZHJlc3M7CkBAIC05NiwxMSArOTcsMTUgQEAKICAgICAgICAgICAgICAgICBnZmlQcm9jZXNzU3RhdGUgPSBHZmlQcm9jZXNzU3RhdGUuTkVXOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoZm9yZWlnbkZhaWx1cmVEYXRhRHRvLmlzQXV0b3B1Ymxpc2goKSkgeworICAgICAgICAgICAgICAgIGdmaVByb2Nlc3NTdGF0ZSA9IEdmaVByb2Nlc3NTdGF0ZS5RVUFMSUZJRUQ7CisgICAgICAgICAgICAgICAgZmFpbHVyZUluZm9ybWF0aW9uRHRvLnNldFB1YmxpY2F0aW9uU3RhdHVzKENvbnN0YW50cy5QVUJfU1RBVFVTX1ZFUk9FRkZFTlRMSUNIVCk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIEZhaWx1cmVJbmZvcm1hdGlvbkR0byByZXRWYWwgPSBmYWlsdXJlSW5mb3JtYXRpb25TZXJ2aWNlLmluc2VydEZhaWx1cmVJbmZvKGZhaWx1cmVJbmZvcm1hdGlvbkR0bywgZ2ZpUHJvY2Vzc1N0YXRlKTsKICAgICAgICAgICAgIGxvZy5pbmZvKCJFeHRlcm5hbCBmYWlsdXJlIGluZm9ybWF0aW9uIFtNZXRhSWQ6ICIgKyBpbXBvcnREYXRhRHRvLmdldE1ldGFJZCgpICsgIl0gZnJvbSAiICsgaW1wb3J0RGF0YUR0by5nZXRTb3VyY2UoKSArICIgaW1wb3J0ZWQgKGluc2VydGVkKS4iKTsKICAgICAgICAgICAgIHJldHVybiByZXRWYWw7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7CisgICAgICAgIH0gZWxzZSB7CiAKICAgICAgICAgICAgIFVVSUQgc3RhdHVzSW50ZXJuSWRFeGlzdGluZ0R0byA9IGV4aXN0aW5nRHRvLmdldFN0YXR1c0ludGVybklkKCk7CiAKQEAgLTExNSwxMyArMTIwLDE4IEBACiAKICAgICAgICAgICAgIEZhaWx1cmVJbmZvcm1hdGlvbkR0byB1cGRhdGVkRHRvID0gc2V0VXBkYXRlRnJvbUZvcmVpZ25EdG8oaW1wb3J0RGF0YUR0bywgZm9yZWlnbkZhaWx1cmVEYXRhRHRvLCBleGlzdGluZ0R0byk7CiAKLSAgICAgICAgICAgIGlmKCBzdGF0dXNJbnRlcm5JZEV4aXN0aW5nRHRvLmVxdWFscygKKyAgICAgICAgICAgIGlmKCFmb3JlaWduRmFpbHVyZURhdGFEdG8uaXNBdXRvcHVibGlzaCgpICYmIHN0YXR1c0ludGVybklkRXhpc3RpbmdEdG8uZXF1YWxzKAogICAgICAgICAgICAgICAgICAgICBzdGF0dXNTZXJ2aWNlLmdldFN0YXR1c0Zyb21JZChHZmlQcm9jZXNzU3RhdGUuUVVBTElGSUVELmdldFN0YXR1c1ZhbHVlKCkpLmdldFV1aWQoKQogICAgICAgICAgICAgKSkgewogICAgICAgICAgICAgICAgIHVwZGF0ZWREdG8uc2V0U3RhdHVzSW50ZXJuSWQoCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNTZXJ2aWNlLmdldFN0YXR1c0Zyb21JZChHZmlQcm9jZXNzU3RhdGUuVVBEQVRFRC5nZXRTdGF0dXNWYWx1ZSgpKS5nZXRVdWlkKCkKICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoZm9yZWlnbkZhaWx1cmVEYXRhRHRvLmlzQXV0b3B1Ymxpc2goKSkgeworICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbygiQXV0b3B1Ymxpc2ggZm9yIGV4dGVybmFsIGZhaWx1cmUgaW5mb3JtYXRpb24gWyIgKyBpbXBvcnREYXRhRHRvLmdldE1ldGFJZCgpICsgIl0gZnJvbSAiICsgaW1wb3J0RGF0YUR0by5nZXRTb3VyY2UoKSArICIgaXMgdHJ1ZSwgY3VycmVudCBzdGF0dXMgcmVtYWlucyB1bmNoYW5nZWQuIik7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBGYWlsdXJlSW5mb3JtYXRpb25EdG8gcmV0VmFsID0gZmFpbHVyZUluZm9ybWF0aW9uU2VydmljZS51cGRhdGVGYWlsdXJlSW5mbyh1cGRhdGVkRHRvKTsKICAgICAgICAgICAgIGxvZy5pbmZvKCJFeHRlcm5hbCBmYWlsdXJlIGluZm9ybWF0aW9uIFsiICsgaW1wb3J0RGF0YUR0by5nZXRNZXRhSWQoKSArICJdIGZyb20gIiArIGltcG9ydERhdGFEdG8uZ2V0U291cmNlKCkgKyAiIGltcG9ydGVkICh1cGRhdGVkKS4iKTsKICAgICAgICAgICAgIHJldHVybiByZXRWYWw7CmRpZmYgLS1naXQgYS9nZnNCYWNrZW5kU2VydmljZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2VydmljZS9TdGF0aW9uU2VydmljZS5qYXZhIGIvZ2ZzQmFja2VuZFNlcnZpY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NlcnZpY2UvU3RhdGlvblNlcnZpY2UuamF2YQppbmRleCAxM2Q0YmIxLi4xNDJjYmQzIDEwMDY0NAotLS0gYS9nZnNCYWNrZW5kU2VydmljZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2VydmljZS9TdGF0aW9uU2VydmljZS5qYXZhCisrKyBiL2dmc0JhY2tlbmRTZXJ2aWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zZXJ2aWNlL1N0YXRpb25TZXJ2aWNlLmphdmEKQEAgLTQzLDYgKzQzLDggQEAKICAgICBwdWJsaWMgTGlzdDxTdGF0aW9uRHRvPiBnZXRTdGF0aW9ucygpIHsKICAgICAgICAgcmV0dXJuIHN0YXRpb25SZXBvc2l0b3J5LmZpbmRBbGwoKS5zdHJlYW0oKQogICAgICAgICAgICAgICAgIC5tYXAoc3RhdGlvbk1hcHBlcjo6dG9TdGF0aW9uRHRvKQorICAgICAgICAgICAgICAgIC5zb3J0ZWQoICh4LCB5KSAtPiAoeC5nZXRTdGF0aW9uTmFtZSgpKyJAIisgeC5nZXRTdGF0aW9uSWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5jb21wYXJlVG8oeS5nZXRTdGF0aW9uTmFtZSgpKyJAIit5LmdldFN0YXRpb25JZCgpKSkKICAgICAgICAgICAgICAgICAuY29sbGVjdChDb2xsZWN0b3JzLnRvTGlzdCgpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2dmc0JhY2tlbmRTZXJ2aWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi92aWV3bW9kZWwvRm9yZWlnbkZhaWx1cmVEYXRhRHRvLmphdmEgYi9nZnNCYWNrZW5kU2VydmljZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vdmlld21vZGVsL0ZvcmVpZ25GYWlsdXJlRGF0YUR0by5qYXZhCmluZGV4IDA4YzI5OGMuLjgwZWJmMTkgMTAwNjQ0Ci0tLSBhL2dmc0JhY2tlbmRTZXJ2aWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi92aWV3bW9kZWwvRm9yZWlnbkZhaWx1cmVEYXRhRHRvLmphdmEKKysrIGIvZ2ZzQmFja2VuZFNlcnZpY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3ZpZXdtb2RlbC9Gb3JlaWduRmFpbHVyZURhdGFEdG8uamF2YQpAQCAtMzAsNiArMzAsOCBAQAogQERhdGEKIHB1YmxpYyBjbGFzcyBGb3JlaWduRmFpbHVyZURhdGFEdG8gaW1wbGVtZW50cyBTZXJpYWxpemFibGUgewogCisgICAgcHJpdmF0ZSBib29sZWFuIGlzQXV0b3B1Ymxpc2g7CisKICAgICBATm90TnVsbAogICAgIHByaXZhdGUgYm9vbGVhbiBpc1BsYW5uZWQ7CiAKZGlmZiAtLWdpdCBhL2dmc0JhY2tlbmRTZXJ2aWNlL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi55bWwgYi9nZnNCYWNrZW5kU2VydmljZS9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb24ueW1sCmluZGV4IDY4YmNhNjUuLmQ2ZTQ3MDAgMTAwNjQ0Ci0tLSBhL2dmc0JhY2tlbmRTZXJ2aWNlL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi55bWwKKysrIGIvZ2ZzQmFja2VuZFNlcnZpY2Uvc3JjL21haW4vcmVzb3VyY2VzL2FwcGxpY2F0aW9uLnltbApAQCAtMzUyLDcgKzM1Miw5IEBACiAgICAgICAtIG5hbWU6IFN0w7ZydW5nc2F1c2t1bmZ0LmRlCiAgICAgICAgIGV4cG9ydFF1ZXVlOiBzaXRfc3RvZXJ1bmdzYXVza3VuZnRfZXhwb3J0X3F1ZXVlX2JyYW5jaAogICAgICAgICBleHBvcnRLZXk6IHNpdF9zdG9lcnVuZ3NhdXNrdW5mdF9leHBvcnRfa2V5Ci0KKyAgICAgIC0gbmFtZTogU3TDtnJpbmZvdG9vbC1laWdlbmUtV2ViLUtvbXBvbmVudGVuCisgICAgICAgIGV4cG9ydFF1ZXVlOiBzaXRfb3duX2V4cG9ydF9xdWV1ZQorICAgICAgICBleHBvcnRLZXk6IHNpdF9vd25fZXhwb3J0X2tleQogbG9nZ2luZzoKICAgbGV2ZWw6CiAgICAgcm9vdDogSU5GTwpAQCAtNDAzLDcgKzQwNSw5IEBACiAgICAgICAtIG5hbWU6IFN0w7ZydW5nc2F1c2t1bmZ0LmRlCiAgICAgICAgIGV4cG9ydFF1ZXVlOiBzaXRfc3RvZXJ1bmdzYXVza3VuZnRfZXhwb3J0X3F1ZXVlCiAgICAgICAgIGV4cG9ydEtleTogc2l0X3N0b2VydW5nc2F1c2t1bmZ0X2V4cG9ydF9rZXkKLQorICAgICAgLSBuYW1lOiBTdMO2cmluZm90b29sLWVpZ2VuZS1XZWItS29tcG9uZW50ZW4KKyAgICAgICAgZXhwb3J0UXVldWU6IHNpdF9vd25fZXhwb3J0X3F1ZXVlCisgICAgICAgIGV4cG9ydEtleTogc2l0X293bl9leHBvcnRfa2V5CiBsb2dnaW5nOgogICBsZXZlbDoKICAgICByb290OiBJTkZPCmRpZmYgLS1naXQgYS9nZnNCYWNrZW5kU2VydmljZS9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nYmFjay1zcHJpbmcueG1sIGIvZ2ZzQmFja2VuZFNlcnZpY2Uvc3JjL21haW4vcmVzb3VyY2VzL2xvZ2JhY2stc3ByaW5nLnhtbAppbmRleCBiMjRjMTM3Li5kYmUwMThiIDEwMDY0NAotLS0gYS9nZnNCYWNrZW5kU2VydmljZS9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nYmFjay1zcHJpbmcueG1sCisrKyBiL2dmc0JhY2tlbmRTZXJ2aWNlL3NyYy9tYWluL3Jlc291cmNlcy9sb2diYWNrLXNwcmluZy54bWwKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICA8L3Jvb3Q+CiAKICAgICA8IS0tIExPRyAiY29tLmJhZWxkdW5nb3JnLmVjbGlwc2Uub3BlbmsuY29udGFjdGJhc2VkYXRhKiIgYXQgSU5GTyBsZXZlbCAtLT4KLSAgICA8bG9nZ2VyIG5hbWU9Im9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24iIGxldmVsPSJpbmZvIiBhZGRpdGl2aXR5PSJmYWxzZSI+CisgICAgPGxvZ2dlciBuYW1lPSJvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uIiBhZGRpdGl2aXR5PSJmYWxzZSI+CiAgICAgICAgIDxhcHBlbmRlci1yZWYgcmVmPSJSb2xsaW5nRmlsZSIvPgogICAgICAgICA8YXBwZW5kZXItcmVmIHJlZj0iQ29uc29sZSIvPgogICAgIDwvbG9nZ2VyPgpkaWZmIC0tZ2l0IGEvbWFpbEV4cG9ydC9Eb2NrZXJmaWxlX0RldlNlcnZlciBiL21haWxFeHBvcnQvRG9ja2VyZmlsZV9EZXZTZXJ2ZXIKaW5kZXggMjBjNjhmOS4uMWNhYTkxYiAxMDA2NDQKLS0tIGEvbWFpbEV4cG9ydC9Eb2NrZXJmaWxlX0RldlNlcnZlcgorKysgYi9tYWlsRXhwb3J0L0RvY2tlcmZpbGVfRGV2U2VydmVyCkBAIC0xNCw4ICsxNCw2IEBACiBGUk9NIG9wZW5qZGs6OC1qcmUtYWxwaW5lCiAKIEVOViBKQVZBX1RPT0xfT1BUSU9OUyAtYWdlbnRsaWI6amR3cD10cmFuc3BvcnQ9ZHRfc29ja2V0LGFkZHJlc3M9ODAwMCxzZXJ2ZXI9eSxzdXNwZW5kPW4KLUVOViBIVFRQX1BST1hZIGh0dHA6Ly93ZWJwcm94eTMucHRhLmRlOjgwODAKLUVOViBIVFRQU19QUk9YWSBodHRwOi8vd2VicHJveHkzLnB0YS5kZTo4MDgwCiBFTlYgVFogRXVyb3BlL0JlcmxpbgogCiAjIGluc3RhbGwgdHpkYXRhIHRvIHNldCB0aGUgcmlnaHQgdGltZXpvbmUKZGlmZiAtLWdpdCBhL21haWxFeHBvcnQvRG9ja2VyZmlsZV9EZXZTZXJ2ZXJVbnNlY3VyZSBiL21haWxFeHBvcnQvRG9ja2VyZmlsZV9EZXZTZXJ2ZXJVbnNlY3VyZQppbmRleCA5NDIzMTIyLi5mMWZlMzhmIDEwMDY0NAotLS0gYS9tYWlsRXhwb3J0L0RvY2tlcmZpbGVfRGV2U2VydmVyVW5zZWN1cmUKKysrIGIvbWFpbEV4cG9ydC9Eb2NrZXJmaWxlX0RldlNlcnZlclVuc2VjdXJlCkBAIC0xNCw4ICsxNCw2IEBACiBGUk9NIG9wZW5qZGs6OC1qcmUtYWxwaW5lCiAKIEVOViBKQVZBX1RPT0xfT1BUSU9OUyAtYWdlbnRsaWI6amR3cD10cmFuc3BvcnQ9ZHRfc29ja2V0LGFkZHJlc3M9ODAwMCxzZXJ2ZXI9eSxzdXNwZW5kPW4KLUVOViBIVFRQX1BST1hZIGh0dHA6Ly93ZWJwcm94eTMucHRhLmRlOjgwODAKLUVOViBIVFRQU19QUk9YWSBodHRwOi8vd2VicHJveHkzLnB0YS5kZTo4MDgwCiBFTlYgVFogRXVyb3BlL0JlcmxpbgogCiAjIGluc3RhbGwgdHpkYXRhIHRvIHNldCB0aGUgcmlnaHQgdGltZXpvbmUKZGlmZiAtLWdpdCBhL21haWxFeHBvcnQvcG9tLnhtbCBiL21haWxFeHBvcnQvcG9tLnhtbAppbmRleCA0ZjFhZDIxLi4zMzJmYTZiIDEwMDY0NAotLS0gYS9tYWlsRXhwb3J0L3BvbS54bWwKKysrIGIvbWFpbEV4cG9ydC9wb20ueG1sCkBAIC02NCw2ICs2NCwxMCBAQAogCQk8L2RlcGVuZGVuY3k+CiAJCTxkZXBlbmRlbmN5PgogCQkJPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yay5ib290PC9ncm91cElkPgorCQkJPGFydGlmYWN0SWQ+c3ByaW5nLWJvb3Qtc3RhcnRlci1zZWN1cml0eTwvYXJ0aWZhY3RJZD4KKwkJPC9kZXBlbmRlbmN5PgorCQk8ZGVwZW5kZW5jeT4KKwkJCTxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdDwvZ3JvdXBJZD4KIAkJCTxhcnRpZmFjdElkPnNwcmluZy1ib290LXN0YXJ0ZXItYW1xcDwvYXJ0aWZhY3RJZD4KIAkJPC9kZXBlbmRlbmN5PgogCQk8ZGVwZW5kZW5jeT4KQEAgLTEwOSw2ICsxMTMsMTEgQEAKIAkJCTwvZXhjbHVzaW9ucz4KIAkJPC9kZXBlbmRlbmN5PgogCQk8ZGVwZW5kZW5jeT4KKwkJCTxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHk8L2dyb3VwSWQ+CisJCQk8YXJ0aWZhY3RJZD5zcHJpbmctc2VjdXJpdHktdGVzdDwvYXJ0aWZhY3RJZD4KKwkJCTxzY29wZT50ZXN0PC9zY29wZT4KKwkJPC9kZXBlbmRlbmN5PgorCQk8ZGVwZW5kZW5jeT4KIAkJCTxncm91cElkPm9yZy5wb3dlcm1vY2s8L2dyb3VwSWQ+CiAJCQk8YXJ0aWZhY3RJZD5wb3dlcm1vY2stcmVmbGVjdDwvYXJ0aWZhY3RJZD4KIAkJCTx2ZXJzaW9uPiR7cG93ZXJNb2NrUmVmbGVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KZGlmZiAtLWdpdCBhL21haWxFeHBvcnQvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL21haWxleHBvcnQvY29uZmlnL1NlY3VyaXR5Q29uZmlnLmphdmEgYi9tYWlsRXhwb3J0L3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9tYWlsZXhwb3J0L2NvbmZpZy9TZWN1cml0eUNvbmZpZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZTYzYjQKLS0tIC9kZXYvbnVsbAorKysgYi9tYWlsRXhwb3J0L3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9tYWlsZXhwb3J0L2NvbmZpZy9TZWN1cml0eUNvbmZpZy5qYXZhCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDE5IENvbnRyaWJ1dG9ycyB0byB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uCisgKgorICogU2VlIHRoZSBOT1RJQ0UgZmlsZShzKSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbAorICogaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2LiAyLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5tYWlsZXhwb3J0LmNvbmZpZzsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uVmFsdWU7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LmFubm90YXRpb24uQmVhbjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuYW5ub3RhdGlvbi5Db25maWd1cmF0aW9uOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHkuY29uZmlnLmFubm90YXRpb24uYXV0aGVudGljYXRpb24uYnVpbGRlcnMuQXV0aGVudGljYXRpb25NYW5hZ2VyQnVpbGRlcjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnNlY3VyaXR5LmNvbmZpZy5hbm5vdGF0aW9uLm1ldGhvZC5jb25maWd1cmF0aW9uLkVuYWJsZUdsb2JhbE1ldGhvZFNlY3VyaXR5OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHkuY29uZmlnLmFubm90YXRpb24ud2ViLmJ1aWxkZXJzLkh0dHBTZWN1cml0eTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnNlY3VyaXR5LmNvbmZpZy5hbm5vdGF0aW9uLndlYi5jb25maWd1cmF0aW9uLkVuYWJsZVdlYlNlY3VyaXR5OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuc2VjdXJpdHkuY29uZmlnLmFubm90YXRpb24ud2ViLmNvbmZpZ3VyYXRpb24uV2ViU2VjdXJpdHlDb25maWd1cmVyQWRhcHRlcjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnNlY3VyaXR5LmNyeXB0by5mYWN0b3J5LlBhc3N3b3JkRW5jb2RlckZhY3RvcmllczsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnNlY3VyaXR5LmNyeXB0by5wYXNzd29yZC5QYXNzd29yZEVuY29kZXI7CisKKworQENvbmZpZ3VyYXRpb24KK0BFbmFibGVXZWJTZWN1cml0eQorQEVuYWJsZUdsb2JhbE1ldGhvZFNlY3VyaXR5KAorICAgICAgICBwcmVQb3N0RW5hYmxlZCA9IHRydWUsCisgICAgICAgIHNlY3VyZWRFbmFibGVkID0gdHJ1ZSwKKyAgICAgICAganNyMjUwRW5hYmxlZCA9IHRydWUpCitwdWJsaWMgY2xhc3MgU2VjdXJpdHlDb25maWcgZXh0ZW5kcyBXZWJTZWN1cml0eUNvbmZpZ3VyZXJBZGFwdGVyIHsKKworICAgIEBWYWx1ZSgiJHtzZWN1cml0eS5lbmRwb2ludC51c2VyfSIpCisgICAgcHJpdmF0ZSBTdHJpbmcgdXNlcjsKKyAgICBAVmFsdWUoIiR7c2VjdXJpdHkuZW5kcG9pbnQucGFzc3dvcmR9IikKKyAgICBwcml2YXRlIFN0cmluZyBwYXNzd29yZDsKKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIGNvbmZpZ3VyZShIdHRwU2VjdXJpdHkgaHR0cCApIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBodHRwCisgICAgICAgICAgICAgICAgLmNzcmYoKS5kaXNhYmxlKCkKKyAgICAgICAgICAgICAgICAuYXV0aG9yaXplUmVxdWVzdHMoKS5hbnlSZXF1ZXN0KCkuYXV0aGVudGljYXRlZCgpCisgICAgICAgICAgICAgICAgLmFuZCgpCisgICAgICAgICAgICAgICAgLmh0dHBCYXNpYygpOworICAgIH0KKworICAgIEBCZWFuCisgICAgcHVibGljIFBhc3N3b3JkRW5jb2RlciBwYXNzd29yZEVuY29kZXIoKSB7CisgICAgICAgIHJldHVybiBQYXNzd29yZEVuY29kZXJGYWN0b3JpZXMuY3JlYXRlRGVsZWdhdGluZ1Bhc3N3b3JkRW5jb2RlcigpOworICAgIH0KKworICAgIEBBdXRvd2lyZWQKKyAgICBwdWJsaWMgdm9pZCBjb25maWd1cmVHbG9iYWwoQXV0aGVudGljYXRpb25NYW5hZ2VyQnVpbGRlciBhdXRoKQorICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgorICAgIHsKKyAgICAgICAgYXV0aC5pbk1lbW9yeUF1dGhlbnRpY2F0aW9uKCkKKyAgICAgICAgICAgICAgICAud2l0aFVzZXIodXNlcikKKyAgICAgICAgICAgICAgICAucGFzc3dvcmQocGFzc3dvcmRFbmNvZGVyKCkuZW5jb2RlKHBhc3N3b3JkKSkKKyAgICAgICAgICAgICAgICAucm9sZXMoIlVTRVIiKTsKKyAgICB9CisKKworfQorCmRpZmYgLS1naXQgYS9tYWlsRXhwb3J0L3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi55bWwgYi9tYWlsRXhwb3J0L3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi55bWwKaW5kZXggNmYxMmEzMC4uYTU0YTU4YSAxMDA2NDQKLS0tIGEvbWFpbEV4cG9ydC9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb24ueW1sCisrKyBiL21haWxFeHBvcnQvc3JjL21haW4vcmVzb3VyY2VzL2FwcGxpY2F0aW9uLnltbApAQCAtMjMsNzYgKzIzLDQwIEBACiBzZXJ2ZXI6CiAgIG1heC1odHRwLWhlYWRlci1zaXplOiAyNjIxNDQKIAotand0OgotICB0b2tlbkhlYWRlcjogQXV0aG9yaXphdGlvbgotICB1c2VTdGF0aWNKd3Q6IGZhbHNlCi0gIHN0YXRpY0p3dDogeAotCi1ncmlkRmFpbHVyZUluZm9ybWF0aW9uOgotICBtYXhMaXN0U2l6ZTogMjAwMAotCi0KLWZlaWduOgotICBjbGllbnQ6Ci0gICAgY29uZmlnOgotICAgICAgZGVmYXVsdDoKLSAgICAgICAgY29ubmVjdFRpbWVvdXQ6IDYwMDAwCi0gICAgICAgIHJlYWRUaW1lb3V0OiA2MDAwMAotY29yczoKLSAgY29yc0VuYWJsZWQ6IGZhbHNlCi0KIGVtYWlsOgogICBzZW5kZXI6IHNlbmRlckB0ZXN0LnRlc3RlcgogICBzbXRwSG9zdDogZW50ZG9ja2VyZ3NzCiAgIHBvcnQ6IDEwMjUKLQotc3dhZ2dlcjoKLSAgYmFzZVVybDoKLSAgcHJveHlVcmw6CisgIAorc2VjdXJpdHkuZW5kcG9pbnQ6CisgIHVzZXI6ICR7R0ZJX01BTlVBTF9FTkRQT0lOVFNfVVNFUk5BTUV9CisgIHBhc3N3b3JkOiAke0dGSV9NQU5VQUxfRU5EUE9JTlRTX1BBU1NXT1JEfQogCiAtLS0KIAogc3ByaW5nOgogICBwcm9maWxlczogdGVzdAogCi1qd3Q6Ci0gIHRva2VuSGVhZGVyOiBBdXRob3JpemF0aW9uCi0gIHVzZVN0YXRpY0p3dDogdHJ1ZQotICBzdGF0aWNKd3Q6IGV5SmhiR2NpT2lKU1V6STFOaUlzSW5SNWNDSWdPaUFpU2xkVUlpd2lhMmxrSWlBNklDSklZbEkzWjJwb2JtRTJlWEpSWm5aSlRXaFVTVjl0WTJnM1ptdFRRV1ZGWDNoTFRqQmhaVmwwYmpkakluMC5leUpxZEdraU9pSTVNR0kwTkdGa09DMWlZamxtTFRRMU16a3RZVFF3WXkweVlqUXlaVE5rTmpOaU9HRWlMQ0psZUhBaU9qRTFOemcyTlRVM09UVXNJbTVpWmlJNk1Dd2lhV0YwSWpveE5UYzROalUxTkRrMUxDSnBjM01pT2lKb2RIUndPaTh2Ykc5allXeG9iM04wT2pnd09EQXZZWFYwYUM5eVpXRnNiWE12Uld4dloySnZiMnNpTENKaGRXUWlPaUpsYkc5blltOXZheTFpWVdOclpXNWtJaXdpYzNWaUlqb2lPRFl5TmpZNU5tWXRaakZoTWkwMFpHSTFMVGt5WldZdFpUbGhNalEyTmpnMVlUVTBJaXdpZEhsd0lqb2lRbVZoY21WeUlpd2lZWHB3SWpvaVpXeHZaMkp2YjJzdFltRmphMlZ1WkNJc0ltRjFkR2hmZEdsdFpTSTZNQ3dpYzJWemMybHZibDl6ZEdGMFpTSTZJakptTVdJek9ERTVMV1pqTmpRdE5ERXpOQzFpTldReExXWTNaV1k0TnpVNU5EQmtOQ0lzSW1GamNpSTZJakVpTENKaGJHeHZkMlZrTFc5eWFXZHBibk1pT2xzaUtpSmRMQ0p5WldGc2JWOWhZMk5sYzNNaU9uc2ljbTlzWlhNaU9sc2lhMjl1TFdGa2JXbHVJaXdpYTI5dUxYZHlhWFJsY2lJc0ltdHZiaTFoWTJObGMzTWlMQ0pyYjI0dGNtVmhaR1Z5SWwxOUxDSnlaWE52ZFhKalpWOWhZMk5sYzNNaU9udDlMQ0p1WVcxbElqb2lWR1Z6ZEdWeVJtbHljM1J1WVcxbFgzSjNZU0JVWlhOMFpYSk1ZWE4wYm1GdFpWOXlkMkVpTENKd2NtVm1aWEp5WldSZmRYTmxjbTVoYldVaU9pSjBaWE4wZFhObGNsOXlkMkVpTENKbmFYWmxibDl1WVcxbElqb2lWR1Z6ZEdWeVJtbHljM1J1WVcxbFgzSjNZU0lzSW1aaGJXbHNlVjl1WVcxbElqb2lWR1Z6ZEdWeVRHRnpkRzVoYldWZmNuZGhJbjAuREFZWHV2NHRLbjhSWHFPMWp5dHRuRC10RjRuU2hVQlF5ZmU0YktiQWlQQXlZMng1WWJBZjNNNGVYbkxyR3FvOC1sb0dLbGRJQ0MyOGJMMExhTUEzS0trUUVPZlc1c2ZwR3FvTjYyMTJ2czg5bU9rbHQwVEpZYzVQTVh3RmdKNVdDX1RLamR3cTctYWFEYWZPRVdlaFYwVTF1dDNzLTk0b3ZOWUlFbjI5bnpYbTJXMWxkb1hKRXEwM0Y4ODBqbHlzUTV6bFJ2R0Y3ZVhFRXBGZkkyVVJ5eU5RMlVXaDBTc2ZxLWdPQXQycGJGMXU2cHJBNVJmdlVtWjN2MWV1MjFZTEdadGdxUHF4YjFsNm9keUgzaXAxNWpfSGRnblRlbzUyeW14dVJVajY1TXNrbWUzVjVldjJEaXRISTl2WmducFY4SWRoYjRUVFdsaUJlR0NPTWZERkNnCi0KK3NlY3VyaXR5LmVuZHBvaW50OgorICB1c2VyOiBtb2NrdXNlcgorICBwYXNzd29yZDogbW9ja3VzZXIKKyAgCiAtLS0KIAogc3ByaW5nOgogICBwcm9maWxlczogZGV2c2VydmVyCiAKLWp3dDoKLSAgdG9rZW5IZWFkZXI6IEF1dGhvcml6YXRpb24KLSAgdXNlU3RhdGljSnd0OiBmYWxzZQotICBzdGF0aWNKd3Q6IGV5SmhiR2NpT2lKU1V6STFOaUlzSW5SNWNDSWdPaUFpU2xkVUlpd2lhMmxrSWlBNklDSklZbEkzWjJwb2JtRTJlWEpSWm5aSlRXaFVTVjl0WTJnM1ptdFRRV1ZGWDNoTFRqQmhaVmwwYmpkakluMC5leUpxZEdraU9pSTVNR0kwTkdGa09DMWlZamxtTFRRMU16a3RZVFF3WXkweVlqUXlaVE5rTmpOaU9HRWlMQ0psZUhBaU9qRTFOemcyTlRVM09UVXNJbTVpWmlJNk1Dd2lhV0YwSWpveE5UYzROalUxTkRrMUxDSnBjM01pT2lKb2RIUndPaTh2Ykc5allXeG9iM04wT2pnd09EQXZZWFYwYUM5eVpXRnNiWE12Uld4dloySnZiMnNpTENKaGRXUWlPaUpsYkc5blltOXZheTFpWVdOclpXNWtJaXdpYzNWaUlqb2lPRFl5TmpZNU5tWXRaakZoTWkwMFpHSTFMVGt5WldZdFpUbGhNalEyTmpnMVlUVTBJaXdpZEhsd0lqb2lRbVZoY21WeUlpd2lZWHB3SWpvaVpXeHZaMkp2YjJzdFltRmphMlZ1WkNJc0ltRjFkR2hmZEdsdFpTSTZNQ3dpYzJWemMybHZibDl6ZEdGMFpTSTZJakptTVdJek9ERTVMV1pqTmpRdE5ERXpOQzFpTldReExXWTNaV1k0TnpVNU5EQmtOQ0lzSW1GamNpSTZJakVpTENKaGJHeHZkMlZrTFc5eWFXZHBibk1pT2xzaUtpSmRMQ0p5WldGc2JWOWhZMk5sYzNNaU9uc2ljbTlzWlhNaU9sc2lhMjl1TFdGa2JXbHVJaXdpYTI5dUxYZHlhWFJsY2lJc0ltdHZiaTFoWTJObGMzTWlMQ0pyYjI0dGNtVmhaR1Z5SWwxOUxDSnlaWE52ZFhKalpWOWhZMk5sYzNNaU9udDlMQ0p1WVcxbElqb2lWR1Z6ZEdWeVJtbHljM1J1WVcxbFgzSjNZU0JVWlhOMFpYSk1ZWE4wYm1GdFpWOXlkMkVpTENKd2NtVm1aWEp5WldSZmRYTmxjbTVoYldVaU9pSjBaWE4wZFhObGNsOXlkMkVpTENKbmFYWmxibDl1WVcxbElqb2lWR1Z6ZEdWeVJtbHljM1J1WVcxbFgzSjNZU0lzSW1aaGJXbHNlVjl1WVcxbElqb2lWR1Z6ZEdWeVRHRnpkRzVoYldWZmNuZGhJbjAuREFZWHV2NHRLbjhSWHFPMWp5dHRuRC10RjRuU2hVQlF5ZmU0YktiQWlQQXlZMng1WWJBZjNNNGVYbkxyR3FvOC1sb0dLbGRJQ0MyOGJMMExhTUEzS0trUUVPZlc1c2ZwR3FvTjYyMTJ2czg5bU9rbHQwVEpZYzVQTVh3RmdKNVdDX1RLamR3cTctYWFEYWZPRVdlaFYwVTF1dDNzLTk0b3ZOWUlFbjI5bnpYbTJXMWxkb1hKRXEwM0Y4ODBqbHlzUTV6bFJ2R0Y3ZVhFRXBGZkkyVVJ5eU5RMlVXaDBTc2ZxLWdPQXQycGJGMXU2cHJBNVJmdlVtWjN2MWV1MjFZTEdadGdxUHF4YjFsNm9keUgzaXAxNWpfSGRnblRlbzUyeW14dVJVajY1TXNrbWUzVjVldjJEaXRISTl2WmducFY4SWRoYjRUVFdsaUJlR0NPTWZERkNnCi0KIHNlcnZlcjoKICAgcG9ydDogOTIwNQogCi1jb3JzOgotICBjb3JzRW5hYmxlZDogdHJ1ZQotCi0KIC0tLQogCiBzcHJpbmc6CiAgIHByb2ZpbGVzOiBkZXZzZXJ2ZXItdW5zZWN1cmUKIAotand0OgotICB0b2tlbkhlYWRlcjogQXV0aG9yaXphdGlvbgotICB1c2VTdGF0aWNKd3Q6IHRydWUKLSAgc3RhdGljSnd0OiBleUpoYkdjaU9pSlNVekkxTmlJc0luUjVjQ0lnT2lBaVNsZFVJaXdpYTJsa0lpQTZJQ0pJWWxJM1oycG9ibUUyZVhKUlpuWkpUV2hVU1Y5dFkyZzNabXRUUVdWRlgzaExUakJoWlZsMGJqZGpJbjAuZXlKcWRHa2lPaUk1TUdJME5HRmtPQzFpWWpsbUxUUTFNemt0WVRRd1l5MHlZalF5WlROa05qTmlPR0VpTENKbGVIQWlPakUxTnpnMk5UVTNPVFVzSW01aVppSTZNQ3dpYVdGMElqb3hOVGM0TmpVMU5EazFMQ0pwYzNNaU9pSm9kSFJ3T2k4dmJHOWpZV3hvYjNOME9qZ3dPREF2WVhWMGFDOXlaV0ZzYlhNdlJXeHZaMkp2YjJzaUxDSmhkV1FpT2lKbGJHOW5ZbTl2YXkxaVlXTnJaVzVrSWl3aWMzVmlJam9pT0RZeU5qWTVObVl0WmpGaE1pMDBaR0kxTFRreVpXWXRaVGxoTWpRMk5qZzFZVFUwSWl3aWRIbHdJam9pUW1WaGNtVnlJaXdpWVhwd0lqb2laV3h2WjJKdmIyc3RZbUZqYTJWdVpDSXNJbUYxZEdoZmRHbHRaU0k2TUN3aWMyVnpjMmx2Ymw5emRHRjBaU0k2SWpKbU1XSXpPREU1TFdaak5qUXROREV6TkMxaU5XUXhMV1kzWldZNE56VTVOREJrTkNJc0ltRmpjaUk2SWpFaUxDSmhiR3h2ZDJWa0xXOXlhV2RwYm5NaU9sc2lLaUpkTENKeVpXRnNiVjloWTJObGMzTWlPbnNpY205c1pYTWlPbHNpYTI5dUxXRmtiV2x1SWl3aWEyOXVMWGR5YVhSbGNpSXNJbXR2YmkxaFkyTmxjM01pTENKcmIyNHRjbVZoWkdWeUlsMTlMQ0p5WlhOdmRYSmpaVjloWTJObGMzTWlPbnQ5TENKdVlXMWxJam9pVkdWemRHVnlSbWx5YzNSdVlXMWxYM0ozWVNCVVpYTjBaWEpNWVhOMGJtRnRaVjl5ZDJFaUxDSndjbVZtWlhKeVpXUmZkWE5sY201aGJXVWlPaUowWlhOMGRYTmxjbDl5ZDJFaUxDSm5hWFpsYmw5dVlXMWxJam9pVkdWemRHVnlSbWx5YzNSdVlXMWxYM0ozWVNJc0ltWmhiV2xzZVY5dVlXMWxJam9pVkdWemRHVnlUR0Z6ZEc1aGJXVmZjbmRoSW4wLkRBWVh1djR0S244UlhxTzFqeXR0bkQtdEY0blNoVUJReWZlNGJLYkFpUEF5WTJ4NVliQWYzTTRlWG5MckdxbzgtbG9HS2xkSUNDMjhiTDBMYU1BM0tLa1FFT2ZXNXNmcEdxb042MjEydnM4OW1Pa2x0MFRKWWM1UE1Yd0ZnSjVXQ19US2pkd3E3LWFhRGFmT0VXZWhWMFUxdXQzcy05NG92TllJRW4yOW56WG0yVzFsZG9YSkVxMDNGODgwamx5c1E1emxSdkdGN2VYRUVwRmZJMlVSeXlOUTJVV2gwU3NmcS1nT0F0MnBiRjF1NnByQTVSZnZVbVozdjFldTIxWUxHWnRncVBxeGIxbDZvZHlIM2lwMTVqX0hkZ25UZW81MnlteHVSVWo2NU1za21lM1Y1ZXYyRGl0SEk5dlpnbnBWOElkaGI0VFRXbGlCZUdDT01mREZDZwotCiBzZXJ2ZXI6CiAgIHBvcnQ6IDkyMDYKIAotY29yczoKLSAgY29yc0VuYWJsZWQ6IHRydWUKLQogLS0tCiAKIHNwcmluZzoKQEAgLTExMywyNyArNzcsMTAgQEAKICAgICBzZXNzaW9uOgogICAgICAgdHJhY2tpbmctbW9kZXM6IGNvb2tpZQogCi1qd3Q6Ci0gIHRva2VuSGVhZGVyOiBBdXRob3JpemF0aW9uCi0gIHVzZVN0YXRpY0p3dDogZmFsc2UKLSAgc3RhdGljSnd0OiBleUpoYkdjaU9pSlNVekkxTmlJc0luUjVjQ0lnT2lBaVNsZFVJaXdpYTJsa0lpQTZJQ0pJWWxJM1oycG9ibUUyZVhKUlpuWkpUV2hVU1Y5dFkyZzNabXRUUVdWRlgzaExUakJoWlZsMGJqZGpJbjAuZXlKcWRHa2lPaUk1TUdJME5HRmtPQzFpWWpsbUxUUTFNemt0WVRRd1l5MHlZalF5WlROa05qTmlPR0VpTENKbGVIQWlPakUxTnpnMk5UVTNPVFVzSW01aVppSTZNQ3dpYVdGMElqb3hOVGM0TmpVMU5EazFMQ0pwYzNNaU9pSm9kSFJ3T2k4dmJHOWpZV3hvYjNOME9qZ3dPREF2WVhWMGFDOXlaV0ZzYlhNdlJXeHZaMkp2YjJzaUxDSmhkV1FpT2lKbGJHOW5ZbTl2YXkxaVlXTnJaVzVrSWl3aWMzVmlJam9pT0RZeU5qWTVObVl0WmpGaE1pMDBaR0kxTFRreVpXWXRaVGxoTWpRMk5qZzFZVFUwSWl3aWRIbHdJam9pUW1WaGNtVnlJaXdpWVhwd0lqb2laV3h2WjJKdmIyc3RZbUZqYTJWdVpDSXNJbUYxZEdoZmRHbHRaU0k2TUN3aWMyVnpjMmx2Ymw5emRHRjBaU0k2SWpKbU1XSXpPREU1TFdaak5qUXROREV6TkMxaU5XUXhMV1kzWldZNE56VTVOREJrTkNJc0ltRmpjaUk2SWpFaUxDSmhiR3h2ZDJWa0xXOXlhV2RwYm5NaU9sc2lLaUpkTENKeVpXRnNiVjloWTJObGMzTWlPbnNpY205c1pYTWlPbHNpYTI5dUxXRmtiV2x1SWl3aWEyOXVMWGR5YVhSbGNpSXNJbXR2YmkxaFkyTmxjM01pTENKcmIyNHRjbVZoWkdWeUlsMTlMQ0p5WlhOdmRYSmpaVjloWTJObGMzTWlPbnQ5TENKdVlXMWxJam9pVkdWemRHVnlSbWx5YzNSdVlXMWxYM0ozWVNCVVpYTjBaWEpNWVhOMGJtRnRaVjl5ZDJFaUxDSndjbVZtWlhKeVpXUmZkWE5sY201aGJXVWlPaUowWlhOMGRYTmxjbDl5ZDJFaUxDSm5hWFpsYmw5dVlXMWxJam9pVkdWemRHVnlSbWx5YzNSdVlXMWxYM0ozWVNJc0ltWmhiV2xzZVY5dVlXMWxJam9pVkdWemRHVnlUR0Z6ZEc1aGJXVmZjbmRoSW4wLkRBWVh1djR0S244UlhxTzFqeXR0bkQtdEY0blNoVUJReWZlNGJLYkFpUEF5WTJ4NVliQWYzTTRlWG5MckdxbzgtbG9HS2xkSUNDMjhiTDBMYU1BM0tLa1FFT2ZXNXNmcEdxb042MjEydnM4OW1Pa2x0MFRKWWM1UE1Yd0ZnSjVXQ19US2pkd3E3LWFhRGFmT0VXZWhWMFUxdXQzcy05NG92TllJRW4yOW56WG0yVzFsZG9YSkVxMDNGODgwamx5c1E1emxSdkdGN2VYRUVwRmZJMlVSeXlOUTJVV2gwU3NmcS1nT0F0MnBiRjF1NnByQTVSZnZVbVozdjFldTIxWUxHWnRncVBxeGIxbDZvZHlIM2lwMTVqX0hkZ25UZW81MnlteHVSVWo2NU1za21lM1Y1ZXYyRGl0SEk5dlpnbnBWOElkaGI0VFRXbGlCZUdDT01mREZDZwotCi1zZXJ2aWNlczoKLSAgYXV0aE5BdXRoOgotICAgIG5hbWU6IGF1dGhOQXV0aFNlcnZpY2UKLQotYXV0aE5BdXRoU2VydmljZToKLSAgcmliYm9uOgotICAgIGxpc3RPZlNlcnZlcnM6IGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MAotCi1jb3JzOgotICBjb3JzRW5hYmxlZDogdHJ1ZQotCiBlbWFpbDoKICAgc2VuZGVyOiBzZW5kZXJAdGVzdC50ZXN0ZXIKICAgc210cEhvc3Q6IGxvY2FsaG9zdAogICBwb3J0OiAxMDI1CiAKIHN3YWdnZXI6Ci0gIGJhc2VVcmw6IC90ZXN0bWFpbAotICBwcm94eVVybDoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisgIGJhc2VVcmw6IC90ZXN0bWFpbApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21haWxFeHBvcnQvc3JjL21haW4vcmVzb3VyY2VzL2FwcGxpY2F0aW9uX2xvY2FsZGV2LnltbCBiL21haWxFeHBvcnQvc3JjL21haW4vcmVzb3VyY2VzL2FwcGxpY2F0aW9uX2xvY2FsZGV2LnltbAppbmRleCAwZjQ1ZWU0Li5jNjM1NTI5IDEwMDY0NAotLS0gYS9tYWlsRXhwb3J0L3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbl9sb2NhbGRldi55bWwKKysrIGIvbWFpbEV4cG9ydC9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb25fbG9jYWxkZXYueW1sCkBAIC0yMCwxMyArMjAsNiBAQAogICAgIG1haWxfZXhwb3J0X3F1ZXVlOiBzaXRfbWFpbF9leHBvcnRfcXVldWVfbG9jYWxkZXYKICAgICBtYWlsX2V4cG9ydF9yb3V0aW5na2V5OiBzaXRfbWFpbF9leHBvcnRfa2V5X2xvY2FsZGV2CiAKLWV1cmVrYToKLSAgY2xpZW50OgotICAgIHNlcnZpY2UtdXJsOgotICAgICAgZGVmYXVsWm9uZTogaHR0cDovL2xvY2FsaG9zdDo4NzYxLwotICBpbnN0YW5jZToKLSAgICBwcmVmZXItaXAtYWRkcmVzczogdHJ1ZQotCiBpbmRleC1jaGFubmVsOgogICBlbmFibGVkOiB0cnVlCiAKQEAgLTQwLDI4ICszMywxNiBAQAogZ3JpZEZhaWx1cmVJbmZvcm1hdGlvbjoKICAgbWF4TGlzdFNpemU6IDIwMDAKIAotand0OgotICB0b2tlbkhlYWRlcjogQXV0aG9yaXphdGlvbgotICB1c2VTdGF0aWNKd3Q6IGZhbHNlCi0gIHN0YXRpY0p3dDogZXlKaGJHY2lPaUpTVXpJMU5pSXNJblI1Y0NJZ09pQWlTbGRVSWl3aWEybGtJaUE2SUNKSVlsSTNaMnBvYm1FMmVYSlJablpKVFdoVVNWOXRZMmczWm10VFFXVkZYM2hMVGpCaFpWbDBiamRqSW4wLmV5SnFkR2tpT2lJNU1HSTBOR0ZrT0MxaVlqbG1MVFExTXprdFlUUXdZeTB5WWpReVpUTmtOak5pT0dFaUxDSmxlSEFpT2pFMU56ZzJOVFUzT1RVc0ltNWlaaUk2TUN3aWFXRjBJam94TlRjNE5qVTFORGsxTENKcGMzTWlPaUpvZEhSd09pOHZiRzlqWVd4b2IzTjBPamd3T0RBdllYVjBhQzl5WldGc2JYTXZSV3h2WjJKdmIyc2lMQ0poZFdRaU9pSmxiRzluWW05dmF5MWlZV05yWlc1a0lpd2ljM1ZpSWpvaU9EWXlOalk1Tm1ZdFpqRmhNaTAwWkdJMUxUa3laV1l0WlRsaE1qUTJOamcxWVRVMElpd2lkSGx3SWpvaVFtVmhjbVZ5SWl3aVlYcHdJam9pWld4dloySnZiMnN0WW1GamEyVnVaQ0lzSW1GMWRHaGZkR2x0WlNJNk1Dd2ljMlZ6YzJsdmJsOXpkR0YwWlNJNklqSm1NV0l6T0RFNUxXWmpOalF0TkRFek5DMWlOV1F4TFdZM1pXWTROelU1TkRCa05DSXNJbUZqY2lJNklqRWlMQ0poYkd4dmQyVmtMVzl5YVdkcGJuTWlPbHNpS2lKZExDSnlaV0ZzYlY5aFkyTmxjM01pT25zaWNtOXNaWE1pT2xzaWEyOXVMV0ZrYldsdUlpd2lhMjl1TFhkeWFYUmxjaUlzSW10dmJpMWhZMk5sYzNNaUxDSnJiMjR0Y21WaFpHVnlJbDE5TENKeVpYTnZkWEpqWlY5aFkyTmxjM01pT250OUxDSnVZVzFsSWpvaVZHVnpkR1Z5Um1seWMzUnVZVzFsWDNKM1lTQlVaWE4wWlhKTVlYTjBibUZ0WlY5eWQyRWlMQ0p3Y21WbVpYSnlaV1JmZFhObGNtNWhiV1VpT2lKMFpYTjBkWE5sY2w5eWQyRWlMQ0puYVhabGJsOXVZVzFsSWpvaVZHVnpkR1Z5Um1seWMzUnVZVzFsWDNKM1lTSXNJbVpoYldsc2VWOXVZVzFsSWpvaVZHVnpkR1Z5VEdGemRHNWhiV1ZmY25kaEluMC5EQVlYdXY0dEtuOFJYcU8xanl0dG5ELXRGNG5TaFVCUXlmZTRiS2JBaVBBeVkyeDVZYkFmM000ZVhuTHJHcW84LWxvR0tsZElDQzI4YkwwTGFNQTNLS2tRRU9mVzVzZnBHcW9ONjIxMnZzODltT2tsdDBUSlljNVBNWHdGZ0o1V0NfVEtqZHdxNy1hYURhZk9FV2VoVjBVMXV0M3MtOTRvdk5ZSUVuMjluelhtMlcxbGRvWEpFcTAzRjg4MGpseXNRNXpsUnZHRjdlWEVFcEZmSTJVUnl5TlEyVVdoMFNzZnEtZ09BdDJwYkYxdTZwckE1UmZ2VW1aM3YxZXUyMVlMR1p0Z3FQcXhiMWw2b2R5SDNpcDE1al9IZGduVGVvNTJ5bXh1UlVqNjVNc2ttZTNWNWV2MkRpdEhJOXZaZ25wVjhJZGhiNFRUV2xpQmVHQ09NZkRGQ2cKLQotZmVpZ246Ci0gIGNsaWVudDoKLSAgICBjb25maWc6Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBjb25uZWN0VGltZW91dDogNTAwMAotICAgICAgICByZWFkVGltZW91dDogNTAwMAotICAgICAgICBsb2dnZXJMZXZlbDogRlVMTAotCiBsb2dnaW5nLmxldmVsLm9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uam9icy5zdG9lcmF1c2t1bmZ0aW50ZXJmYWNlLmFwaS5TdG9lcmF1c2t1bmZ0QXBpOiBERUJVRwogCi1jb3JzOgotICBjb3JzRW5hYmxlZDogdHJ1ZQotCiBlbWFpbDoKICAgc2VuZGVyOiBzZW5kZXJAb2xhZi5zZW5kZXJzb24KICAgc210cEhvc3Q6IGVudGRvY2tlcmdzcwogICBwb3J0OiAxMDI1CisgIAorc2VjdXJpdHkuZW5kcG9pbnQ6CisgIHVzZXI6ICR7R0ZJX01BTlVBTF9FTkRQT0lOVFNfVVNFUk5BTUV9CisgIHBhc3N3b3JkOiAke0dGSV9NQU5VQUxfRU5EUE9JTlRTX1BBU1NXT1JEfQogCiAtLS0KIApkaWZmIC0tZ2l0IGEvbWFpbEV4cG9ydC9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nYmFjay1zcHJpbmcueG1sIGIvbWFpbEV4cG9ydC9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nYmFjay1zcHJpbmcueG1sCmluZGV4IDllMzUxODQuLjc3ZjI4MDUgMTAwNjQ0Ci0tLSBhL21haWxFeHBvcnQvc3JjL21haW4vcmVzb3VyY2VzL2xvZ2JhY2stc3ByaW5nLnhtbAorKysgYi9tYWlsRXhwb3J0L3NyYy9tYWluL3Jlc291cmNlcy9sb2diYWNrLXNwcmluZy54bWwKQEAgLTMxLDcgKzMxLDcgQEAKICAgICA8L3Jvb3Q+CiAKICAgICA8IS0tIExPRyAiY29tLmJhZWxkdW5nb3JnLmVjbGlwc2Uub3BlbmsuY29udGFjdGJhc2VkYXRhKiIgYXQgSU5GTyBsZXZlbCAtLT4KLSAgICA8bG9nZ2VyIG5hbWU9Im9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uam9icy5zdG9lcmF1c2t1bmZ0aW50ZXJmYWNlIiBsZXZlbD0iaW5mbyIgYWRkaXRpdml0eT0iZmFsc2UiPgorICAgIDxsb2dnZXIgbmFtZT0ib3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5tYWlsZXhwb3J0IiBsZXZlbD0iaW5mbyIgYWRkaXRpdml0eT0iZmFsc2UiPgogICAgICAgICA8YXBwZW5kZXItcmVmIHJlZj0iUm9sbGluZ0ZpbGVTdGQiLz4KICAgICAgICAgPGFwcGVuZGVyLXJlZiByZWY9IkNvbnNvbGUiLz4KICAgICA8L2xvZ2dlcj4KZGlmZiAtLWdpdCBhL21haWxFeHBvcnQvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL21haWxleHBvcnQvY29udHJvbGxlci9FbWFpbENvbnRyb2xsZXJUZXN0LmphdmEgYi9tYWlsRXhwb3J0L3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9tYWlsZXhwb3J0L2NvbnRyb2xsZXIvRW1haWxDb250cm9sbGVyVGVzdC5qYXZhCmluZGV4IGU0YTE3ZDIuLmJkZWI5ZTkgMTAwNjQ0Ci0tLSBhL21haWxFeHBvcnQvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL21haWxleHBvcnQvY29udHJvbGxlci9FbWFpbENvbnRyb2xsZXJUZXN0LmphdmEKKysrIGIvbWFpbEV4cG9ydC9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vbWFpbGV4cG9ydC9jb250cm9sbGVyL0VtYWlsQ29udHJvbGxlclRlc3QuamF2YQpAQCAtMjIsNiArMjIsNyBAQAogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdC50ZXN0LmNvbnRleHQuU3ByaW5nQm9vdFRlc3Q7CiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5ib290LnRlc3QubW9jay5tb2NraXRvLk1vY2tCZWFuOwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuaHR0cC5NZWRpYVR5cGU7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5zZWN1cml0eS50ZXN0LmNvbnRleHQuc3VwcG9ydC5XaXRoTW9ja1VzZXI7CiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay50ZXN0LmNvbnRleHQuQWN0aXZlUHJvZmlsZXM7CiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay50ZXN0LndlYi5zZXJ2bGV0Lk1vY2tNdmM7CiAKQEAgLTQ0LDYgKzQ1LDcgQEAKICAgICBwcml2YXRlIE1vY2tNdmMgbW9ja012YzsKIAogICAgIEBUZXN0CisgICAgQFdpdGhNb2NrVXNlcih2YWx1ZSA9ICJtb2NrZWRVc2VyIikKICAgICBwdWJsaWMgdm9pZCBzaG91bGRSZXR1cm5Pa29uU2VuZCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBtb2NrTXZjLnBlcmZvcm0ocG9zdCgiL21haWwiKQogICAgICAgICAgICAgICAgIC5jb250ZW50VHlwZShNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTikKQEAgLTUyLDYgKzU0LDcgQEAKICAgICB9CiAKICAgICBAVGVzdAorICAgIEBXaXRoTW9ja1VzZXIodmFsdWUgPSAibW9ja2VkVXNlciIpCiAgICAgcHVibGljIHZvaWQgc2hvdWxkUmV0dXJuU3RhdHVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGRvVGhyb3cobmV3IE1lc3NhZ2luZ0V4Y2VwdGlvbigpKS53aGVuKGVtYWlsU2VydmljZSkuc2VuZFRlc3RNYWlsKGFueSgpKTsKICAgICAgICAgbW9ja012Yy5wZXJmb3JtKHBvc3QoIi9tYWlsIikKQEAgLTYwLDQgKzYzLDE0IEBACiAgICAgICAgICkuYW5kRXhwZWN0KHN0YXR1cygpLmlzNXh4U2VydmVyRXJyb3IoKSk7CiAgICAgfQogCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBzaG91bGRSZXR1cm5VbmF1dGhvcml6ZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbW9ja012Yy5wZXJmb3JtKHBvc3QoIi9tYWlsIikKKyAgICAgICAgICAgICAgICAuY29udGVudFR5cGUoTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pCisgICAgICAgICAgICAgICAgLmNvbnRlbnQoInRlc3RAdGVzdC5kZSIpKQorICAgICAgICAgICAgICAgIC5hbmRFeHBlY3Qoc3RhdHVzKCkuaXNVbmF1dGhvcml6ZWQoKSk7CisgICAgfQorCisKKwogfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21haWxFeHBvcnQvc3JjL3Rlc3QvcmVzb3VyY2VzL2FwcGxpY2F0aW9uLnltbCBiL21haWxFeHBvcnQvc3JjL3Rlc3QvcmVzb3VyY2VzL2FwcGxpY2F0aW9uLnltbAppbmRleCA1NjYxYWI2Li4wYmViOWYxIDEwMDY0NAotLS0gYS9tYWlsRXhwb3J0L3NyYy90ZXN0L3Jlc291cmNlcy9hcHBsaWNhdGlvbi55bWwKKysrIGIvbWFpbEV4cG9ydC9zcmMvdGVzdC9yZXNvdXJjZXMvYXBwbGljYXRpb24ueW1sCkBAIC00Niw5ICs0Niw5IEBACiAgIHNtdHBIb3N0OiBsb2NhbGhvc3QKICAgcG9ydDogMzAyNQogCi1zd2FnZ2VyOgotICBiYXNlVXJsOgotICBwcm94eVVybDoKK3NlY3VyaXR5LmVuZHBvaW50OgorICB1c2VyOiBtb2NrdXNlcgorICBwYXNzd29yZDogbW9ja3VzZXIKIC0tLQogCiBzcHJpbmc6CmRpZmYgLS1naXQgYS9zdG9lcnVuZ3NhdXNrdW5mdEludGVyZmFjZS9Eb2NrZXJmaWxlX0RldlNlcnZlciBiL3N0b2VydW5nc2F1c2t1bmZ0SW50ZXJmYWNlL0RvY2tlcmZpbGVfRGV2U2VydmVyCmluZGV4IDQyMDYwMmQuLjZkYTZhMTQgMTAwNjQ0Ci0tLSBhL3N0b2VydW5nc2F1c2t1bmZ0SW50ZXJmYWNlL0RvY2tlcmZpbGVfRGV2U2VydmVyCisrKyBiL3N0b2VydW5nc2F1c2t1bmZ0SW50ZXJmYWNlL0RvY2tlcmZpbGVfRGV2U2VydmVyCkBAIC0xNCw4ICsxNCw2IEBACiBGUk9NIG9wZW5qZGs6OC1qcmUtYWxwaW5lCiAKIEVOViBKQVZBX1RPT0xfT1BUSU9OUyAtYWdlbnRsaWI6amR3cD10cmFuc3BvcnQ9ZHRfc29ja2V0LGFkZHJlc3M9ODAwMCxzZXJ2ZXI9eSxzdXNwZW5kPW4KLUVOViBIVFRQX1BST1hZIGh0dHA6Ly93ZWJwcm94eTMucHRhLmRlOjgwODAKLUVOViBIVFRQU19QUk9YWSBodHRwOi8vd2VicHJveHkzLnB0YS5kZTo4MDgwCiBFTlYgVFogRXVyb3BlL0JlcmxpbgogCiAjIGluc3RhbGwgdHpkYXRhIHRvIHNldCB0aGUgcmlnaHQgdGltZXpvbmUKZGlmZiAtLWdpdCBhL3N0b2VydW5nc2F1c2t1bmZ0SW50ZXJmYWNlL0RvY2tlcmZpbGVfRGV2U2VydmVyVW5zZWN1cmUgYi9zdG9lcnVuZ3NhdXNrdW5mdEludGVyZmFjZS9Eb2NrZXJmaWxlX0RldlNlcnZlclVuc2VjdXJlCmluZGV4IDNjYzVmMjMuLjdkZjYxYWIgMTAwNjQ0Ci0tLSBhL3N0b2VydW5nc2F1c2t1bmZ0SW50ZXJmYWNlL0RvY2tlcmZpbGVfRGV2U2VydmVyVW5zZWN1cmUKKysrIGIvc3RvZXJ1bmdzYXVza3VuZnRJbnRlcmZhY2UvRG9ja2VyZmlsZV9EZXZTZXJ2ZXJVbnNlY3VyZQpAQCAtMTQsOCArMTQsNiBAQAogRlJPTSBvcGVuamRrOjgtanJlLWFscGluZQogCiBFTlYgSkFWQV9UT09MX09QVElPTlMgLWFnZW50bGliOmpkd3A9dHJhbnNwb3J0PWR0X3NvY2tldCxhZGRyZXNzPTgwMDAsc2VydmVyPXksc3VzcGVuZD1uCi1FTlYgSFRUUF9QUk9YWSBodHRwOi8vd2VicHJveHkzLnB0YS5kZTo4MDgwCi1FTlYgSFRUUFNfUFJPWFkgaHR0cDovL3dlYnByb3h5My5wdGEuZGU6ODA4MAogRU5WIFRaIEV1cm9wZS9CZXJsaW4KIAogIyBpbnN0YWxsIHR6ZGF0YSB0byBzZXQgdGhlIHJpZ2h0IHRpbWV6b25lCmRpZmYgLS1naXQgYS9zdG9lcnVuZ3NhdXNrdW5mdEludGVyZmFjZS9wb20ueG1sIGIvc3RvZXJ1bmdzYXVza3VuZnRJbnRlcmZhY2UvcG9tLnhtbAppbmRleCA5ZmIzOTc4Li42ZWQ0NTliIDEwMDY0NAotLS0gYS9zdG9lcnVuZ3NhdXNrdW5mdEludGVyZmFjZS9wb20ueG1sCisrKyBiL3N0b2VydW5nc2F1c2t1bmZ0SW50ZXJmYWNlL3BvbS54bWwKQEAgLTE5LDcgKzE5LDggQEAKIAk8cGFyZW50PgogCQk8Z3JvdXBJZD5vcmcuc3ByaW5nZnJhbWV3b3JrLmJvb3Q8L2dyb3VwSWQ+CiAJCTxhcnRpZmFjdElkPnNwcmluZy1ib290LXN0YXJ0ZXItcGFyZW50PC9hcnRpZmFjdElkPgotCQk8dmVyc2lvbj4yLjIuNC5SRUxFQVNFPC92ZXJzaW9uPgorCQk8IS0tPHZlcnNpb24+Mi4yLjQuUkVMRUFTRTwvdmVyc2lvbj4tLT4KKwkJPHZlcnNpb24+Mi4yLjEwLlJFTEVBU0U8L3ZlcnNpb24+CiAJCTxyZWxhdGl2ZVBhdGgvPiA8IS0tIGxvb2t1cCBwYXJlbnQgZnJvbSByZXBvc2l0b3J5IC0tPgogCTwvcGFyZW50PgogCTxncm91cElkPm9yZy5lY2xpcHNlLm9wZW5rPC9ncm91cElkPgpAQCAtNjEsNyArNjIsNyBAQAogCQk8ZGVwZW5kZW5jeT4KIAkJCTxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcmsuYW1xcDwvZ3JvdXBJZD4KIAkJCTxhcnRpZmFjdElkPnNwcmluZy1yYWJiaXQtdGVzdDwvYXJ0aWZhY3RJZD4KLQkJCTx2ZXJzaW9uPjIuMi43LlJFTEVBU0U8L3ZlcnNpb24+CisJCQk8dmVyc2lvbj4yLjIuMTAuUkVMRUFTRTwvdmVyc2lvbj4KIAkJCTxzY29wZT50ZXN0PC9zY29wZT4KIAkJPC9kZXBlbmRlbmN5PgogCkBAIC04MCw3ICs4MSw2IEBACiAJCTxkZXBlbmRlbmN5PgogCQkJPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yay5ib290PC9ncm91cElkPgogCQkJPGFydGlmYWN0SWQ+c3ByaW5nLWJvb3Qtc3RhcnRlci1pbnRlZ3JhdGlvbjwvYXJ0aWZhY3RJZD4KLQkJCTx2ZXJzaW9uPjIuMi41LlJFTEVBU0U8L3ZlcnNpb24+CiAJCTwvZGVwZW5kZW5jeT4KIAkJPGRlcGVuZGVuY3k+CiAJCQk8Z3JvdXBJZD5vcmcucHJvamVjdGxvbWJvazwvZ3JvdXBJZD4KZGlmZiAtLWdpdCBhL3N0b2VydW5nc2F1c2t1bmZ0SW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zdG9lcmF1c2t1bmZ0aW50ZXJmYWNlL2FwaS9TdG9lcnVuZ3NhdXNrdW5mdEFwaS5qYXZhIGIvc3RvZXJ1bmdzYXVza3VuZnRJbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3N0b2VyYXVza3VuZnRpbnRlcmZhY2UvYXBpL1N0b2VydW5nc2F1c2t1bmZ0QXBpLmphdmEKaW5kZXggOWI3YzM4NC4uOGZjOGIxNCAxMDA2NDQKLS0tIGEvc3RvZXJ1bmdzYXVza3VuZnRJbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3N0b2VyYXVza3VuZnRpbnRlcmZhY2UvYXBpL1N0b2VydW5nc2F1c2t1bmZ0QXBpLmphdmEKKysrIGIvc3RvZXJ1bmdzYXVza3VuZnRJbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3N0b2VyYXVza3VuZnRpbnRlcmZhY2UvYXBpL1N0b2VydW5nc2F1c2t1bmZ0QXBpLmphdmEKQEAgLTE3LDYgKzE3LDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnN0b2VyYXVza3VuZnRpbnRlcmZhY2UuZHRvcy5TdG9lcnVuZ3NhdXNrdW5mdE91dGFnZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnN0b2VyYXVza3VuZnRpbnRlcmZhY2UuZHRvcy5TdG9lcnVuZ3NhdXNrdW5mdFVzZXJOb3RpZmljYXRpb247CiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jbG91ZC5vcGVuZmVpZ24uRmVpZ25DbGllbnQ7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LmFubm90YXRpb24uUHJvZmlsZTsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uR2V0TWFwcGluZzsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYi5iaW5kLmFubm90YXRpb24uUG9zdE1hcHBpbmc7CiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay53ZWIuYmluZC5hbm5vdGF0aW9uLlJlcXVlc3RCb2R5OwpAQCAtMjQsNyArMjUsNyBAQAogCiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKLQorQFByb2ZpbGUoeyIhdGVzdCJ9KQogQEZlaWduQ2xpZW50KG5hbWU9IlN0b2VyYXVza3VuZnQuZGUiLCB1cmw9ICIke3N0b2VydW5nc2F1c2t1bmZ0LmFwaVVybH0iKQogcHVibGljIGludGVyZmFjZSBTdG9lcnVuZ3NhdXNrdW5mdEFwaSB7CiAKZGlmZiAtLWdpdCBhL3N0b2VydW5nc2F1c2t1bmZ0SW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zdG9lcmF1c2t1bmZ0aW50ZXJmYWNlL2R0b3MvRm9yZWlnbkZhaWx1cmVEYXRhRHRvLmphdmEgYi9zdG9lcnVuZ3NhdXNrdW5mdEludGVyZmFjZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc3RvZXJhdXNrdW5mdGludGVyZmFjZS9kdG9zL0ZvcmVpZ25GYWlsdXJlRGF0YUR0by5qYXZhCmluZGV4IDIxODgxYmUuLmI2ZDRlMWUgMTAwNjQ0Ci0tLSBhL3N0b2VydW5nc2F1c2t1bmZ0SW50ZXJmYWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zdG9lcmF1c2t1bmZ0aW50ZXJmYWNlL2R0b3MvRm9yZWlnbkZhaWx1cmVEYXRhRHRvLmphdmEKKysrIGIvc3RvZXJ1bmdzYXVza3VuZnRJbnRlcmZhY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3N0b2VyYXVza3VuZnRpbnRlcmZhY2UvZHRvcy9Gb3JlaWduRmFpbHVyZURhdGFEdG8uamF2YQpAQCAtMTgsNyArMTgsMTEgQEAKIGltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uYW5ub3RhdGlvbi5Kc29uUHJvcGVydHk7CiBpbXBvcnQgbG9tYm9rLkRhdGE7CiAKLWltcG9ydCBqYXZheC52YWxpZGF0aW9uLmNvbnN0cmFpbnRzLio7CitpbXBvcnQgamF2YXgudmFsaWRhdGlvbi5jb25zdHJhaW50cy5NYXg7CitpbXBvcnQgamF2YXgudmFsaWRhdGlvbi5jb25zdHJhaW50cy5NaW47CitpbXBvcnQgamF2YXgudmFsaWRhdGlvbi5jb25zdHJhaW50cy5Ob3ROdWxsOworaW1wb3J0IGphdmF4LnZhbGlkYXRpb24uY29uc3RyYWludHMuUGF0dGVybjsKK2ltcG9ydCBqYXZheC52YWxpZGF0aW9uLmNvbnN0cmFpbnRzLlNpemU7CiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7CiBpbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7CiBpbXBvcnQgamF2YS51dGlsLkRhdGU7CkBAIC0zMyw3ICszNyw3IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgZGVzY3JpcHRpb247CiAKICAgICBATm90TnVsbAotICAgIEBQYXR0ZXJuKHJlZ2V4cCA9ICJeJHwoU3xXfEZ8R3xUS3xTVCkiKQorICAgIEBQYXR0ZXJuKHJlZ2V4cCA9ICJeJHwoU3xXfEZ8R3xUS3xTVHxPUykiKQogICAgIHByaXZhdGUgU3RyaW5nIGJyYW5jaDsKIAogICAgIEBQYXR0ZXJuKHJlZ2V4cD0iXiR8KE5TfE1TfEhTKSIpCkBAIC03Nyw3ICs4MSw3IEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgc3RhdGlvbklkOwogCiAgICAgQFNpemUobWF4PTIwMCkKLSAgICBAUGF0dGVybihyZWdleHA9Il4kfFtBLVphLXowLTnDhMOkw5bDtsOcw7zDn1xcc18vKCktXSsiKQorICAgIEBQYXR0ZXJuKHJlZ2V4cD0iXiR8W0EtWmEtejAtOcOEw6TDlsO2w5zDvMOfXFxzXy8oKSwuOzotXSsiKQogICAgIHByaXZhdGUgU3RyaW5nIHN0YXRpb25EZXNjcmlwdGlvbjsKIAogICAgIHByaXZhdGUgQmlnRGVjaW1hbCBsb25naXR1ZGU7CmRpZmYgLS1naXQgYS9zdG9lcnVuZ3NhdXNrdW5mdEludGVyZmFjZS9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb24ueW1sIGIvc3RvZXJ1bmdzYXVza3VuZnRJbnRlcmZhY2Uvc3JjL21haW4vcmVzb3VyY2VzL2FwcGxpY2F0aW9uLnltbAppbmRleCBkMDBmOWY5Li4zYmRkNDM4IDEwMDY0NAotLS0gYS9zdG9lcnVuZ3NhdXNrdW5mdEludGVyZmFjZS9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb24ueW1sCisrKyBiL3N0b2VydW5nc2F1c2t1bmZ0SW50ZXJmYWNlL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi55bWwKQEAgLTQyLDE0ICs0Miw2IEBACiBzZXJ2ZXI6CiAgIG1heC1odHRwLWhlYWRlci1zaXplOiAyNjIxNDQKIAotand0OgotICB0b2tlbkhlYWRlcjogQXV0aG9yaXphdGlvbgotICB1c2VTdGF0aWNKd3Q6IGZhbHNlCi0gIHN0YXRpY0p3dDogeAotCi1ncmlkRmFpbHVyZUluZm9ybWF0aW9uOgotICBtYXhMaXN0U2l6ZTogMjAwMAotCiAKIGZlaWduOgogICBjbGllbnQ6CkBAIC01Nyw4ICs0OSw2IEBACiAgICAgICBkZWZhdWx0OgogICAgICAgICBjb25uZWN0VGltZW91dDogNjAwMDAKICAgICAgICAgcmVhZFRpbWVvdXQ6IDYwMDAwCi1jb3JzOgotICBjb3JzRW5hYmxlZDogZmFsc2UKIAogc3RvZXJ1bmdzYXVza3VuZnQ6CiAgIGFwaVVybDogaHR0cHM6Ly9zdGFnZS1hcGktb3BlcmF0b3Iuc3RvZXJ1bmdzYXVza3VuZnQuZGUvYXBpL3YxLjAvCkBAIC03NiwxMSArNjYsNiBAQAogc3ByaW5nOgogICBwcm9maWxlczogdGVzdAogCi1qd3Q6Ci0gIHRva2VuSGVhZGVyOiBBdXRob3JpemF0aW9uCi0gIHVzZVN0YXRpY0p3dDogdHJ1ZQotICBzdGF0aWNKd3Q6IGV5SmhiR2NpT2lKU1V6STFOaUlzSW5SNWNDSWdPaUFpU2xkVUlpd2lhMmxrSWlBNklDSklZbEkzWjJwb2JtRTJlWEpSWm5aSlRXaFVTVjl0WTJnM1ptdFRRV1ZGWDNoTFRqQmhaVmwwYmpkakluMC5leUpxZEdraU9pSTVNR0kwTkdGa09DMWlZamxtTFRRMU16a3RZVFF3WXkweVlqUXlaVE5rTmpOaU9HRWlMQ0psZUhBaU9qRTFOemcyTlRVM09UVXNJbTVpWmlJNk1Dd2lhV0YwSWpveE5UYzROalUxTkRrMUxDSnBjM01pT2lKb2RIUndPaTh2Ykc5allXeG9iM04wT2pnd09EQXZZWFYwYUM5eVpXRnNiWE12Uld4dloySnZiMnNpTENKaGRXUWlPaUpsYkc5blltOXZheTFpWVdOclpXNWtJaXdpYzNWaUlqb2lPRFl5TmpZNU5tWXRaakZoTWkwMFpHSTFMVGt5WldZdFpUbGhNalEyTmpnMVlUVTBJaXdpZEhsd0lqb2lRbVZoY21WeUlpd2lZWHB3SWpvaVpXeHZaMkp2YjJzdFltRmphMlZ1WkNJc0ltRjFkR2hmZEdsdFpTSTZNQ3dpYzJWemMybHZibDl6ZEdGMFpTSTZJakptTVdJek9ERTVMV1pqTmpRdE5ERXpOQzFpTldReExXWTNaV1k0TnpVNU5EQmtOQ0lzSW1GamNpSTZJakVpTENKaGJHeHZkMlZrTFc5eWFXZHBibk1pT2xzaUtpSmRMQ0p5WldGc2JWOWhZMk5sYzNNaU9uc2ljbTlzWlhNaU9sc2lhMjl1TFdGa2JXbHVJaXdpYTI5dUxYZHlhWFJsY2lJc0ltdHZiaTFoWTJObGMzTWlMQ0pyYjI0dGNtVmhaR1Z5SWwxOUxDSnlaWE52ZFhKalpWOWhZMk5sYzNNaU9udDlMQ0p1WVcxbElqb2lWR1Z6ZEdWeVJtbHljM1J1WVcxbFgzSjNZU0JVWlhOMFpYSk1ZWE4wYm1GdFpWOXlkMkVpTENKd2NtVm1aWEp5WldSZmRYTmxjbTVoYldVaU9pSjBaWE4wZFhObGNsOXlkMkVpTENKbmFYWmxibDl1WVcxbElqb2lWR1Z6ZEdWeVJtbHljM1J1WVcxbFgzSjNZU0lzSW1aaGJXbHNlVjl1WVcxbElqb2lWR1Z6ZEdWeVRHRnpkRzVoYldWZmNuZGhJbjAuREFZWHV2NHRLbjhSWHFPMWp5dHRuRC10RjRuU2hVQlF5ZmU0YktiQWlQQXlZMng1WWJBZjNNNGVYbkxyR3FvOC1sb0dLbGRJQ0MyOGJMMExhTUEzS0trUUVPZlc1c2ZwR3FvTjYyMTJ2czg5bU9rbHQwVEpZYzVQTVh3RmdKNVdDX1RLamR3cTctYWFEYWZPRVdlaFYwVTF1dDNzLTk0b3ZOWUlFbjI5bnpYbTJXMWxkb1hKRXEwM0Y4ODBqbHlzUTV6bFJ2R0Y3ZVhFRXBGZkkyVVJ5eU5RMlVXaDBTc2ZxLWdPQXQycGJGMXU2cHJBNVJmdlVtWjN2MWV1MjFZTEdadGdxUHF4YjFsNm9keUgzaXAxNWpfSGRnblRlbzUyeW14dVJVajY1TXNrbWUzVjVldjJEaXRISTl2WmducFY4SWRoYjRUVFdsaUJlR0NPTWZERkNnCi0KIHN0b2VydW5nc2F1c2t1bmZ0OgogICBhcGlVcmw6IGh0dHBzOi8vc3RhZ2UtYXBpLW9wZXJhdG9yLnN0b2VydW5nc2F1c2t1bmZ0LmRlL2FwaS92MS4wLwogICB1c2VyOiB1c2VyTmFtZQpAQCAtOTksMTcgKzg0LDkgQEAKICAgICBvcmcuZWNsaXBzZS5vcGVuazogREVCVUcKICAgICBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYjogRVJST1IKIAotand0OgotICB0b2tlbkhlYWRlcjogQXV0aG9yaXphdGlvbgotICB1c2VTdGF0aWNKd3Q6IGZhbHNlCi0gIHN0YXRpY0p3dDogZXlKaGJHY2lPaUpTVXpJMU5pSXNJblI1Y0NJZ09pQWlTbGRVSWl3aWEybGtJaUE2SUNKSVlsSTNaMnBvYm1FMmVYSlJablpKVFdoVVNWOXRZMmczWm10VFFXVkZYM2hMVGpCaFpWbDBiamRqSW4wLmV5SnFkR2tpT2lJNU1HSTBOR0ZrT0MxaVlqbG1MVFExTXprdFlUUXdZeTB5WWpReVpUTmtOak5pT0dFaUxDSmxlSEFpT2pFMU56ZzJOVFUzT1RVc0ltNWlaaUk2TUN3aWFXRjBJam94TlRjNE5qVTFORGsxTENKcGMzTWlPaUpvZEhSd09pOHZiRzlqWVd4b2IzTjBPamd3T0RBdllYVjBhQzl5WldGc2JYTXZSV3h2WjJKdmIyc2lMQ0poZFdRaU9pSmxiRzluWW05dmF5MWlZV05yWlc1a0lpd2ljM1ZpSWpvaU9EWXlOalk1Tm1ZdFpqRmhNaTAwWkdJMUxUa3laV1l0WlRsaE1qUTJOamcxWVRVMElpd2lkSGx3SWpvaVFtVmhjbVZ5SWl3aVlYcHdJam9pWld4dloySnZiMnN0WW1GamEyVnVaQ0lzSW1GMWRHaGZkR2x0WlNJNk1Dd2ljMlZ6YzJsdmJsOXpkR0YwWlNJNklqSm1NV0l6T0RFNUxXWmpOalF0TkRFek5DMWlOV1F4TFdZM1pXWTROelU1TkRCa05DSXNJbUZqY2lJNklqRWlMQ0poYkd4dmQyVmtMVzl5YVdkcGJuTWlPbHNpS2lKZExDSnlaV0ZzYlY5aFkyTmxjM01pT25zaWNtOXNaWE1pT2xzaWEyOXVMV0ZrYldsdUlpd2lhMjl1TFhkeWFYUmxjaUlzSW10dmJpMWhZMk5sYzNNaUxDSnJiMjR0Y21WaFpHVnlJbDE5TENKeVpYTnZkWEpqWlY5aFkyTmxjM01pT250OUxDSnVZVzFsSWpvaVZHVnpkR1Z5Um1seWMzUnVZVzFsWDNKM1lTQlVaWE4wWlhKTVlYTjBibUZ0WlY5eWQyRWlMQ0p3Y21WbVpYSnlaV1JmZFhObGNtNWhiV1VpT2lKMFpYTjBkWE5sY2w5eWQyRWlMQ0puYVhabGJsOXVZVzFsSWpvaVZHVnpkR1Z5Um1seWMzUnVZVzFsWDNKM1lTSXNJbVpoYldsc2VWOXVZVzFsSWpvaVZHVnpkR1Z5VEdGemRHNWhiV1ZmY25kaEluMC5EQVlYdXY0dEtuOFJYcU8xanl0dG5ELXRGNG5TaFVCUXlmZTRiS2JBaVBBeVkyeDVZYkFmM000ZVhuTHJHcW84LWxvR0tsZElDQzI4YkwwTGFNQTNLS2tRRU9mVzVzZnBHcW9ONjIxMnZzODltT2tsdDBUSlljNVBNWHdGZ0o1V0NfVEtqZHdxNy1hYURhZk9FV2VoVjBVMXV0M3MtOTRvdk5ZSUVuMjluelhtMlcxbGRvWEpFcTAzRjg4MGpseXNRNXpsUnZHRjdlWEVFcEZmSTJVUnl5TlEyVVdoMFNzZnEtZ09BdDJwYkYxdTZwckE1UmZ2VW1aM3YxZXUyMVlMR1p0Z3FQcXhiMWw2b2R5SDNpcDE1al9IZGduVGVvNTJ5bXh1UlVqNjVNc2ttZTNWNWV2MkRpdEhJOXZaZ25wVjhJZGhiNFRUV2xpQmVHQ09NZkRGQ2cKLQogc2VydmVyOgogICBwb3J0OiA5MTk1CiAKLWNvcnM6Ci0gIGNvcnNFbmFibGVkOiB0cnVlCi0KIC0tLQogCiBzcHJpbmc6CkBAIC0xMjEsMTcgKzk4LDkgQEAKICAgICBvcmcuZWNsaXBzZS5vcGVuazogREVCVUcKICAgICBvcmcuc3ByaW5nZnJhbWV3b3JrLndlYjogRVJST1IKIAotand0OgotICB0b2tlbkhlYWRlcjogQXV0aG9yaXphdGlvbgotICB1c2VTdGF0aWNKd3Q6IHRydWUKLSAgc3RhdGljSnd0OiBleUpoYkdjaU9pSlNVekkxTmlJc0luUjVjQ0lnT2lBaVNsZFVJaXdpYTJsa0lpQTZJQ0pJWWxJM1oycG9ibUUyZVhKUlpuWkpUV2hVU1Y5dFkyZzNabXRUUVdWRlgzaExUakJoWlZsMGJqZGpJbjAuZXlKcWRHa2lPaUk1TUdJME5HRmtPQzFpWWpsbUxUUTFNemt0WVRRd1l5MHlZalF5WlROa05qTmlPR0VpTENKbGVIQWlPakUxTnpnMk5UVTNPVFVzSW01aVppSTZNQ3dpYVdGMElqb3hOVGM0TmpVMU5EazFMQ0pwYzNNaU9pSm9kSFJ3T2k4dmJHOWpZV3hvYjNOME9qZ3dPREF2WVhWMGFDOXlaV0ZzYlhNdlJXeHZaMkp2YjJzaUxDSmhkV1FpT2lKbGJHOW5ZbTl2YXkxaVlXTnJaVzVrSWl3aWMzVmlJam9pT0RZeU5qWTVObVl0WmpGaE1pMDBaR0kxTFRreVpXWXRaVGxoTWpRMk5qZzFZVFUwSWl3aWRIbHdJam9pUW1WaGNtVnlJaXdpWVhwd0lqb2laV3h2WjJKdmIyc3RZbUZqYTJWdVpDSXNJbUYxZEdoZmRHbHRaU0k2TUN3aWMyVnpjMmx2Ymw5emRHRjBaU0k2SWpKbU1XSXpPREU1TFdaak5qUXROREV6TkMxaU5XUXhMV1kzWldZNE56VTVOREJrTkNJc0ltRmpjaUk2SWpFaUxDSmhiR3h2ZDJWa0xXOXlhV2RwYm5NaU9sc2lLaUpkTENKeVpXRnNiVjloWTJObGMzTWlPbnNpY205c1pYTWlPbHNpYTI5dUxXRmtiV2x1SWl3aWEyOXVMWGR5YVhSbGNpSXNJbXR2YmkxaFkyTmxjM01pTENKcmIyNHRjbVZoWkdWeUlsMTlMQ0p5WlhOdmRYSmpaVjloWTJObGMzTWlPbnQ5TENKdVlXMWxJam9pVkdWemRHVnlSbWx5YzNSdVlXMWxYM0ozWVNCVVpYTjBaWEpNWVhOMGJtRnRaVjl5ZDJFaUxDSndjbVZtWlhKeVpXUmZkWE5sY201aGJXVWlPaUowWlhOMGRYTmxjbDl5ZDJFaUxDSm5hWFpsYmw5dVlXMWxJam9pVkdWemRHVnlSbWx5YzNSdVlXMWxYM0ozWVNJc0ltWmhiV2xzZVY5dVlXMWxJam9pVkdWemRHVnlUR0Z6ZEc1aGJXVmZjbmRoSW4wLkRBWVh1djR0S244UlhxTzFqeXR0bkQtdEY0blNoVUJReWZlNGJLYkFpUEF5WTJ4NVliQWYzTTRlWG5MckdxbzgtbG9HS2xkSUNDMjhiTDBMYU1BM0tLa1FFT2ZXNXNmcEdxb042MjEydnM4OW1Pa2x0MFRKWWM1UE1Yd0ZnSjVXQ19US2pkd3E3LWFhRGFmT0VXZWhWMFUxdXQzcy05NG92TllJRW4yOW56WG0yVzFsZG9YSkVxMDNGODgwamx5c1E1emxSdkdGN2VYRUVwRmZJMlVSeXlOUTJVV2gwU3NmcS1nT0F0MnBiRjF1NnByQTVSZnZVbVozdjFldTIxWUxHWnRncVBxeGIxbDZvZHlIM2lwMTVqX0hkZ25UZW81MnlteHVSVWo2NU1za21lM1Y1ZXYyRGl0SEk5dlpnbnBWOElkaGI0VFRXbGlCZUdDT01mREZDZwotCiBzZXJ2ZXI6CiAgIHBvcnQ6IDkxOTYKIAotY29yczoKLSAgY29yc0VuYWJsZWQ6IHRydWUKLQogLS0tCiAKIHNwcmluZzoKQEAgLTE4NiwxMyArMTU1LDUgQEAKICAgICBzZXNzaW9uOgogICAgICAgdHJhY2tpbmctbW9kZXM6IGNvb2tpZQogCi1qd3Q6Ci0gIHRva2VuSGVhZGVyOiBBdXRob3JpemF0aW9uCi0gIHVzZVN0YXRpY0p3dDogZmFsc2UKLSAgc3RhdGljSnd0OiBleUpoYkdjaU9pSlNVekkxTmlJc0luUjVjQ0lnT2lBaVNsZFVJaXdpYTJsa0lpQTZJQ0pJWWxJM1oycG9ibUUyZVhKUlpuWkpUV2hVU1Y5dFkyZzNabXRUUVdWRlgzaExUakJoWlZsMGJqZGpJbjAuZXlKcWRHa2lPaUk1TUdJME5HRmtPQzFpWWpsbUxUUTFNemt0WVRRd1l5MHlZalF5WlROa05qTmlPR0VpTENKbGVIQWlPakUxTnpnMk5UVTNPVFVzSW01aVppSTZNQ3dpYVdGMElqb3hOVGM0TmpVMU5EazFMQ0pwYzNNaU9pSm9kSFJ3T2k4dmJHOWpZV3hvYjNOME9qZ3dPREF2WVhWMGFDOXlaV0ZzYlhNdlJXeHZaMkp2YjJzaUxDSmhkV1FpT2lKbGJHOW5ZbTl2YXkxaVlXTnJaVzVrSWl3aWMzVmlJam9pT0RZeU5qWTVObVl0WmpGaE1pMDBaR0kxTFRreVpXWXRaVGxoTWpRMk5qZzFZVFUwSWl3aWRIbHdJam9pUW1WaGNtVnlJaXdpWVhwd0lqb2laV3h2WjJKdmIyc3RZbUZqYTJWdVpDSXNJbUYxZEdoZmRHbHRaU0k2TUN3aWMyVnpjMmx2Ymw5emRHRjBaU0k2SWpKbU1XSXpPREU1TFdaak5qUXROREV6TkMxaU5XUXhMV1kzWldZNE56VTVOREJrTkNJc0ltRmpjaUk2SWpFaUxDSmhiR3h2ZDJWa0xXOXlhV2RwYm5NaU9sc2lLaUpkTENKeVpXRnNiVjloWTJObGMzTWlPbnNpY205c1pYTWlPbHNpYTI5dUxXRmtiV2x1SWl3aWEyOXVMWGR5YVhSbGNpSXNJbXR2YmkxaFkyTmxjM01pTENKcmIyNHRjbVZoWkdWeUlsMTlMQ0p5WlhOdmRYSmpaVjloWTJObGMzTWlPbnQ5TENKdVlXMWxJam9pVkdWemRHVnlSbWx5YzNSdVlXMWxYM0ozWVNCVVpYTjBaWEpNWVhOMGJtRnRaVjl5ZDJFaUxDSndjbVZtWlhKeVpXUmZkWE5sY201aGJXVWlPaUowWlhOMGRYTmxjbDl5ZDJFaUxDSm5hWFpsYmw5dVlXMWxJam9pVkdWemRHVnlSbWx5YzNSdVlXMWxYM0ozWVNJc0ltWmhiV2xzZVY5dVlXMWxJam9pVkdWemRHVnlUR0Z6ZEc1aGJXVmZjbmRoSW4wLkRBWVh1djR0S244UlhxTzFqeXR0bkQtdEY0blNoVUJReWZlNGJLYkFpUEF5WTJ4NVliQWYzTTRlWG5MckdxbzgtbG9HS2xkSUNDMjhiTDBMYU1BM0tLa1FFT2ZXNXNmcEdxb042MjEydnM4OW1Pa2x0MFRKWWM1UE1Yd0ZnSjVXQ19US2pkd3E3LWFhRGFmT0VXZWhWMFUxdXQzcy05NG92TllJRW4yOW56WG0yVzFsZG9YSkVxMDNGODgwamx5c1E1emxSdkdGN2VYRUVwRmZJMlVSeXlOUTJVV2gwU3NmcS1nT0F0MnBiRjF1NnByQTVSZnZVbVozdjFldTIxWUxHWnRncVBxeGIxbDZvZHlIM2lwMTVqX0hkZ25UZW81MnlteHVSVWo2NU1za21lM1Y1ZXYyRGl0SEk5dlpnbnBWOElkaGI0VFRXbGlCZUdDT01mREZDZwotCi1jb3JzOgotICBjb3JzRW5hYmxlZDogdHJ1ZQotCiBzd2FnZ2VyOgogICBiYXNlVXJsOiAvdGVzdC1zdG9lcnVuZ3NhdXNrdW5mdC1pbnRlcmZhY2UKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zdG9lcnVuZ3NhdXNrdW5mdEludGVyZmFjZS9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb25fbG9jYWxkZXYueW1sIGIvc3RvZXJ1bmdzYXVza3VuZnRJbnRlcmZhY2Uvc3JjL21haW4vcmVzb3VyY2VzL2FwcGxpY2F0aW9uX2xvY2FsZGV2LnltbAppbmRleCA4MGVhZmFlLi4yY2FjNmEzIDEwMDY0NAotLS0gYS9zdG9lcnVuZ3NhdXNrdW5mdEludGVyZmFjZS9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb25fbG9jYWxkZXYueW1sCisrKyBiL3N0b2VydW5nc2F1c2t1bmZ0SW50ZXJmYWNlL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbl9sb2NhbGRldi55bWwKQEAgLTUyLDE0ICs1Miw2IEBACiAgICAgc2Vzc2lvbjoKICAgICAgIHRyYWNraW5nLW1vZGVzOiBjb29raWUKIAotZ3JpZEZhaWx1cmVJbmZvcm1hdGlvbjoKLSAgbWF4TGlzdFNpemU6IDIwMDAKLQotand0OgotICB0b2tlbkhlYWRlcjogQXV0aG9yaXphdGlvbgotICB1c2VTdGF0aWNKd3Q6IGZhbHNlCi0gIHN0YXRpY0p3dDogZXlKaGJHY2lPaUpTVXpJMU5pSXNJblI1Y0NJZ09pQWlTbGRVSWl3aWEybGtJaUE2SUNKSVlsSTNaMnBvYm1FMmVYSlJablpKVFdoVVNWOXRZMmczWm10VFFXVkZYM2hMVGpCaFpWbDBiamRqSW4wLmV5SnFkR2tpT2lJNU1HSTBOR0ZrT0MxaVlqbG1MVFExTXprdFlUUXdZeTB5WWpReVpUTmtOak5pT0dFaUxDSmxlSEFpT2pFMU56ZzJOVFUzT1RVc0ltNWlaaUk2TUN3aWFXRjBJam94TlRjNE5qVTFORGsxTENKcGMzTWlPaUpvZEhSd09pOHZiRzlqWVd4b2IzTjBPamd3T0RBdllYVjBhQzl5WldGc2JYTXZSV3h2WjJKdmIyc2lMQ0poZFdRaU9pSmxiRzluWW05dmF5MWlZV05yWlc1a0lpd2ljM1ZpSWpvaU9EWXlOalk1Tm1ZdFpqRmhNaTAwWkdJMUxUa3laV1l0WlRsaE1qUTJOamcxWVRVMElpd2lkSGx3SWpvaVFtVmhjbVZ5SWl3aVlYcHdJam9pWld4dloySnZiMnN0WW1GamEyVnVaQ0lzSW1GMWRHaGZkR2x0WlNJNk1Dd2ljMlZ6YzJsdmJsOXpkR0YwWlNJNklqSm1NV0l6T0RFNUxXWmpOalF0TkRFek5DMWlOV1F4TFdZM1pXWTROelU1TkRCa05DSXNJbUZqY2lJNklqRWlMQ0poYkd4dmQyVmtMVzl5YVdkcGJuTWlPbHNpS2lKZExDSnlaV0ZzYlY5aFkyTmxjM01pT25zaWNtOXNaWE1pT2xzaWEyOXVMV0ZrYldsdUlpd2lhMjl1TFhkeWFYUmxjaUlzSW10dmJpMWhZMk5sYzNNaUxDSnJiMjR0Y21WaFpHVnlJbDE5TENKeVpYTnZkWEpqWlY5aFkyTmxjM01pT250OUxDSnVZVzFsSWpvaVZHVnpkR1Z5Um1seWMzUnVZVzFsWDNKM1lTQlVaWE4wWlhKTVlYTjBibUZ0WlY5eWQyRWlMQ0p3Y21WbVpYSnlaV1JmZFhObGNtNWhiV1VpT2lKMFpYTjBkWE5sY2w5eWQyRWlMQ0puYVhabGJsOXVZVzFsSWpvaVZHVnpkR1Z5Um1seWMzUnVZVzFsWDNKM1lTSXNJbVpoYldsc2VWOXVZVzFsSWpvaVZHVnpkR1Z5VEdGemRHNWhiV1ZmY25kaEluMC5EQVlYdXY0dEtuOFJYcU8xanl0dG5ELXRGNG5TaFVCUXlmZTRiS2JBaVBBeVkyeDVZYkFmM000ZVhuTHJHcW84LWxvR0tsZElDQzI4YkwwTGFNQTNLS2tRRU9mVzVzZnBHcW9ONjIxMnZzODltT2tsdDBUSlljNVBNWHdGZ0o1V0NfVEtqZHdxNy1hYURhZk9FV2VoVjBVMXV0M3MtOTRvdk5ZSUVuMjluelhtMlcxbGRvWEpFcTAzRjg4MGpseXNRNXpsUnZHRjdlWEVFcEZmSTJVUnl5TlEyVVdoMFNzZnEtZ09BdDJwYkYxdTZwckE1UmZ2VW1aM3YxZXUyMVlMR1p0Z3FQcXhiMWw2b2R5SDNpcDE1al9IZGduVGVvNTJ5bXh1UlVqNjVNc2ttZTNWNWV2MkRpdEhJOXZaZ25wVjhJZGhiNFRUV2xpQmVHQ09NZkRGQ2cKLQogZmVpZ246CiAgIGNsaWVudDoKICAgICBjb25maWc6CmRpZmYgLS1naXQgYS9zdG9lcnVuZ3NhdXNrdW5mdEludGVyZmFjZS9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nYmFjay1zcHJpbmcueG1sIGIvc3RvZXJ1bmdzYXVza3VuZnRJbnRlcmZhY2Uvc3JjL21haW4vcmVzb3VyY2VzL2xvZ2JhY2stc3ByaW5nLnhtbAppbmRleCAxMmM1YTcwLi4wMDYzNjI0IDEwMDY0NAotLS0gYS9zdG9lcnVuZ3NhdXNrdW5mdEludGVyZmFjZS9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nYmFjay1zcHJpbmcueG1sCisrKyBiL3N0b2VydW5nc2F1c2t1bmZ0SW50ZXJmYWNlL3NyYy9tYWluL3Jlc291cmNlcy9sb2diYWNrLXNwcmluZy54bWwKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICA8L3Jvb3Q+CiAKICAgICA8IS0tIExPRyAiY29tLmJhZWxkdW5nb3JnLmVjbGlwc2Uub3BlbmsuY29udGFjdGJhc2VkYXRhKiIgYXQgSU5GTyBsZXZlbCAtLT4KLSAgICA8bG9nZ2VyIG5hbWU9Im9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uam9icy5zdG9lcmF1c2t1bmZ0aW50ZXJmYWNlIiBsZXZlbD0iaW5mbyIgYWRkaXRpdml0eT0iZmFsc2UiPgorICAgIDxsb2dnZXIgbmFtZT0ib3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5qb2JzLnN0b2VyYXVza3VuZnRpbnRlcmZhY2UiIGFkZGl0aXZpdHk9ImZhbHNlIj4KICAgICAgICAgPGFwcGVuZGVyLXJlZiByZWY9IlJvbGxpbmdGaWxlU3RkIi8+CiAgICAgICAgIDxhcHBlbmRlci1yZWYgcmVmPSJDb25zb2xlIi8+CiAgICAgPC9sb2dnZXI+CmRpZmYgLS1naXQgYS9zdG9lcnVuZ3NhdXNrdW5mdEludGVyZmFjZS9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc3RvZXJhdXNrdW5mdGludGVyZmFjZS9jb25maWcvSW1wb3J0U2NoZWR1bGVyQ29uZmlnVGVzdC5qYXZhIGIvc3RvZXJ1bmdzYXVza3VuZnRJbnRlcmZhY2Uvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3N0b2VyYXVza3VuZnRpbnRlcmZhY2UvY29uZmlnL0ltcG9ydFNjaGVkdWxlckNvbmZpZ1Rlc3QuamF2YQppbmRleCBiZDZlYmQzLi45NzI4ZGU0IDEwMDY0NAotLS0gYS9zdG9lcnVuZ3NhdXNrdW5mdEludGVyZmFjZS9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc3RvZXJhdXNrdW5mdGludGVyZmFjZS9jb25maWcvSW1wb3J0U2NoZWR1bGVyQ29uZmlnVGVzdC5qYXZhCisrKyBiL3N0b2VydW5nc2F1c2t1bmZ0SW50ZXJmYWNlL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zdG9lcmF1c2t1bmZ0aW50ZXJmYWNlL2NvbmZpZy9JbXBvcnRTY2hlZHVsZXJDb25maWdUZXN0LmphdmEKQEAgLTE0LDE4ICsxNCwzMCBAQAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc3RvZXJhdXNrdW5mdGludGVyZmFjZS5jb25maWc7CiAKK2ltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uY29yZS50eXBlLlR5cGVSZWZlcmVuY2U7CitpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLk9iamVjdE1hcHBlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnN0b2VyYXVza3VuZnRpbnRlcmZhY2UuU3RvZXJ1bmdzYXVza3VuZnRJbnRlcmZhY2VBcHBsaWNhdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnN0b2VyYXVza3VuZnRpbnRlcmZhY2UuYXBpLlN0b2VydW5nc2F1c2t1bmZ0QXBpOworaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24uc3RvZXJhdXNrdW5mdGludGVyZmFjZS5kdG9zLlN0b2VydW5nc2F1c2t1bmZ0VXNlck5vdGlmaWNhdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLnN0b2VyYXVza3VuZnRpbnRlcmZhY2Uuc2VydmljZS5JbXBvcnRFeHBvcnRTZXJ2aWNlOwogaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJvb3QudGVzdC5jb250ZXh0LlNwcmluZ0Jvb3RUZXN0OwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdC50ZXN0Lm1vY2subW9ja2l0by5Nb2NrQmVhbjsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJvb3QudGVzdC5tb2NrLm1vY2tpdG8uU3B5QmVhbjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvcmUuaW8uQ2xhc3NQYXRoUmVzb3VyY2U7CiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay50ZXN0LmNvbnRleHQuQWN0aXZlUHJvZmlsZXM7CiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay50ZXN0LmNvbnRleHQuQ29udGV4dENvbmZpZ3VyYXRpb247CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uQXJndW1lbnRNYXRjaGVycy5hbnk7CitpbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLkFyZ3VtZW50TWF0Y2hlcnMuYW55TGlzdDsKIGltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by50aW1lczsKIGltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by52ZXJpZnk7CitpbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8ud2hlbjsKIAogQFNwcmluZ0Jvb3RUZXN0KGNsYXNzZXMgPSBTdG9lcnVuZ3NhdXNrdW5mdEludGVyZmFjZUFwcGxpY2F0aW9uLmNsYXNzKQogQENvbnRleHRDb25maWd1cmF0aW9uKGNsYXNzZXMgPSB7VGVzdENvbmZpZ3VyYXRpb24uY2xhc3N9KQpAQCAtNDEsOCArNTMsMTcgQEAKICAgICBAQXV0b3dpcmVkCiAgICAgcHJpdmF0ZSBJbXBvcnRTY2hlZHVsZXJDb25maWcgaW1wb3J0U2NoZWR1bGVyQ29uZmlnOwogCisgICAgQEF1dG93aXJlZAorICAgIE9iamVjdE1hcHBlciBvYmplY3RNYXBwZXI7CisKICAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHNob3VsSW1wb3J0VXNlck5vdGlmaWNhdGlvbigpIHsKKyAgICBwdWJsaWMgdm9pZCBzaG91bEltcG9ydFVzZXJOb3RpZmljYXRpb24oKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IG5ldyBDbGFzc1BhdGhSZXNvdXJjZSgiVXNlcm5vdGlmaWNhdGlvbkpzb25SZXNwb25zZS5qc29uIikuZ2V0SW5wdXRTdHJlYW0oKTsKKyAgICAgICAgTGlzdDxTdG9lcnVuZ3NhdXNrdW5mdFVzZXJOb3RpZmljYXRpb24+IHVzZXJOb3RpZmljYXRpb25MaXN0ID0KKyAgICAgICAgICAgICAgICBvYmplY3RNYXBwZXIucmVhZFZhbHVlKGlzLCBuZXcgVHlwZVJlZmVyZW5jZTxMaXN0PFN0b2VydW5nc2F1c2t1bmZ0VXNlck5vdGlmaWNhdGlvbj4+KCkgeworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB3aGVuKHN0b2VydW5nc2F1c2t1bmZ0QXBpLmdldFVzZXJOb3RpZmljYXRpb24oYW55KEludGVnZXIuY2xhc3MpKSkudGhlblJldHVybih1c2VyTm90aWZpY2F0aW9uTGlzdCk7CisKICAgICAgICAgaW1wb3J0U2NoZWR1bGVyQ29uZmlnLnNjaGVkdWxlVGFza0ltcG9ydFVzZXJOb3RpZmljYXRpb25zKCk7CiAgICAgICAgIHZlcmlmeShpbXBvcnRFeHBvcnRTZXJ2aWNlLCB0aW1lcygxKSkuaW1wb3J0VXNlck5vdGlmaWNhdGlvbnMoKTsKICAgICB9CmRpZmYgLS1naXQgYS90ZXN0SW1wb3J0R3JpZEZhaWx1cmVzL0RvY2tlcmZpbGVfRGV2U2VydmVyIGIvdGVzdEltcG9ydEdyaWRGYWlsdXJlcy9Eb2NrZXJmaWxlX0RldlNlcnZlcgppbmRleCBlZDdhZjIyLi5kMDBkZjU0IDEwMDY0NAotLS0gYS90ZXN0SW1wb3J0R3JpZEZhaWx1cmVzL0RvY2tlcmZpbGVfRGV2U2VydmVyCisrKyBiL3Rlc3RJbXBvcnRHcmlkRmFpbHVyZXMvRG9ja2VyZmlsZV9EZXZTZXJ2ZXIKQEAgLTEzLDggKzEzLDYgQEAKIAogRlJPTSBvcGVuamRrOjgtanJlLWFscGluZQogCi1FTlYgSFRUUF9QUk9YWSBodHRwOi8vd2VicHJveHkzLnB0YS5kZTo4MDgwCi1FTlYgSFRUUFNfUFJPWFkgaHR0cDovL3dlYnByb3h5My5wdGEuZGU6ODA4MAogRU5WIFRaIEV1cm9wZS9CZXJsaW4KIAogIyBpbnN0YWxsIHR6ZGF0YSB0byBzZXQgdGhlIHJpZ2h0IHRpbWV6b25lCmRpZmYgLS1naXQgYS90ZXN0SW1wb3J0R3JpZEZhaWx1cmVzL0RvY2tlcmZpbGVfRGV2U2VydmVyVW5zZWN1cmUgYi90ZXN0SW1wb3J0R3JpZEZhaWx1cmVzL0RvY2tlcmZpbGVfRGV2U2VydmVyVW5zZWN1cmUKaW5kZXggNDhlMWEwYy4uMGY4ODE5MiAxMDA2NDQKLS0tIGEvdGVzdEltcG9ydEdyaWRGYWlsdXJlcy9Eb2NrZXJmaWxlX0RldlNlcnZlclVuc2VjdXJlCisrKyBiL3Rlc3RJbXBvcnRHcmlkRmFpbHVyZXMvRG9ja2VyZmlsZV9EZXZTZXJ2ZXJVbnNlY3VyZQpAQCAtMTMsOCArMTMsNiBAQAogCiBGUk9NIG9wZW5qZGs6OC1qcmUtYWxwaW5lCiAKLUVOViBIVFRQX1BST1hZIGh0dHA6Ly93ZWJwcm94eTMucHRhLmRlOjgwODAKLUVOViBIVFRQU19QUk9YWSBodHRwOi8vd2VicHJveHkzLnB0YS5kZTo4MDgwCiBFTlYgVFogRXVyb3BlL0JlcmxpbgogCiAjIGluc3RhbGwgdHpkYXRhIHRvIHNldCB0aGUgcmlnaHQgdGltZXpvbmUKZGlmZiAtLWdpdCBhL3Rlc3RJbXBvcnRHcmlkRmFpbHVyZXMvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL2pvYnMvaW1wb3J0Z3JpZGZhaWx1cmVzL2NvbmZpZy9Td2FnZ2VyQ29uZmlnLmphdmEgYi90ZXN0SW1wb3J0R3JpZEZhaWx1cmVzL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9qb2JzL2ltcG9ydGdyaWRmYWlsdXJlcy9jb25maWcvU3dhZ2dlckNvbmZpZy5qYXZhCmluZGV4IGQwMTViYTIuLjliNjkyZTQgMTAwNjQ0Ci0tLSBhL3Rlc3RJbXBvcnRHcmlkRmFpbHVyZXMvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL2pvYnMvaW1wb3J0Z3JpZGZhaWx1cmVzL2NvbmZpZy9Td2FnZ2VyQ29uZmlnLmphdmEKKysrIGIvdGVzdEltcG9ydEdyaWRGYWlsdXJlcy9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vam9icy9pbXBvcnRncmlkZmFpbHVyZXMvY29uZmlnL1N3YWdnZXJDb25maWcuamF2YQpAQCAtMzIsOSArMzIsOSBAQAogQFByb2ZpbGUoeyIhdGVzdCIsIiFwcm9kIn0pCiBwdWJsaWMgY2xhc3MgU3dhZ2dlckNvbmZpZyB7CiAKLSAgICBAVmFsdWUoIiR7c3dhZ2dlci5iYXNlVXJsfSIpCisgICAgQFZhbHVlKCIke3N3YWdnZXIuYmFzZVVybDp9IikKICAgICBwdWJsaWMgU3RyaW5nIGJhc2VVcmw7Ci0gICAgQFZhbHVlKCIke3N3YWdnZXIucHJveHlVcmx9IikKKyAgICBAVmFsdWUoIiR7c3dhZ2dlci5wcm94eVVybDp9IikKICAgICBwdWJsaWMgU3RyaW5nIHByb3h5VXJsOwogCiAgICAgQEJlYW4KZGlmZiAtLWdpdCBhL3Rlc3RJbXBvcnRHcmlkRmFpbHVyZXMvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL2pvYnMvaW1wb3J0Z3JpZGZhaWx1cmVzL2R0b3MvRm9yZWlnbkZhaWx1cmVEYXRhRHRvLmphdmEgYi90ZXN0SW1wb3J0R3JpZEZhaWx1cmVzL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9qb2JzL2ltcG9ydGdyaWRmYWlsdXJlcy9kdG9zL0ZvcmVpZ25GYWlsdXJlRGF0YUR0by5qYXZhCmluZGV4IDhkYjQ2YjMuLjM4MmU0NjQgMTAwNjQ0Ci0tLSBhL3Rlc3RJbXBvcnRHcmlkRmFpbHVyZXMvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL2pvYnMvaW1wb3J0Z3JpZGZhaWx1cmVzL2R0b3MvRm9yZWlnbkZhaWx1cmVEYXRhRHRvLmphdmEKKysrIGIvdGVzdEltcG9ydEdyaWRGYWlsdXJlcy9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vam9icy9pbXBvcnRncmlkZmFpbHVyZXMvZHRvcy9Gb3JlaWduRmFpbHVyZURhdGFEdG8uamF2YQpAQCAtMjYsMTEgKzI2LDEzIEBACiBARGF0YQogcHVibGljIGNsYXNzIEZvcmVpZ25GYWlsdXJlRGF0YUR0byBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSB7CiAKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNBdXRvcHVibGlzaDsKKwogICAgIEBOb3ROdWxsCiAgICAgcHJpdmF0ZSBib29sZWFuIGlzUGxhbm5lZDsKIAogICAgIEBKc29uUHJvcGVydHkoImRlc2NyaXB0aW9uIikKLSAgICBwcml2YXRlIFN0cmluZyBpbnRlcm5hbFJlbWFyazsKKyAgICBwcml2YXRlIFN0cmluZyBkZXNjcmlwdGlvbjsKIAogICAgIEBOb3ROdWxsCiAgICAgQFBhdHRlcm4ocmVnZXhwID0gIl4kfChTfFd8RnxHfFRLfFNUfE9TKSIpCkBAIC01Myw3ICs1NSw3IEBACiAgICAgcHJpdmF0ZSBEYXRlIGZhaWx1cmVFbmRSZXN1cHBsaWVkOwogCiAgICAgQFNpemUobWF4PTEwKQotICAgIEBQYXR0ZXJuKHJlZ2V4cD0iXiR8W0EtWmEtejAtOcOEw6TDlsO2w5zDvMOfXy8tXSsiKQorICAgIEBQYXR0ZXJuKHJlZ2V4cD0iXiR8W0EtWmEtejAtOV8vLV0rIikKICAgICBwcml2YXRlIFN0cmluZyBwb3N0Y29kZTsKIAogICAgIEBTaXplKG1heD0yMDApCmRpZmYgLS1naXQgYS90ZXN0SW1wb3J0R3JpZEZhaWx1cmVzL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9qb2JzL2ltcG9ydGdyaWRmYWlsdXJlcy9zZXJ2aWNlL0ltcG9ydFNlcnZpY2UuamF2YSBiL3Rlc3RJbXBvcnRHcmlkRmFpbHVyZXMvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL2pvYnMvaW1wb3J0Z3JpZGZhaWx1cmVzL3NlcnZpY2UvSW1wb3J0U2VydmljZS5qYXZhCmluZGV4IDc3Y2JkNDIuLjYxNjRiYWQgMTAwNjQ0Ci0tLSBhL3Rlc3RJbXBvcnRHcmlkRmFpbHVyZXMvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL2pvYnMvaW1wb3J0Z3JpZGZhaWx1cmVzL3NlcnZpY2UvSW1wb3J0U2VydmljZS5qYXZhCisrKyBiL3Rlc3RJbXBvcnRHcmlkRmFpbHVyZXMvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL2pvYnMvaW1wb3J0Z3JpZGZhaWx1cmVzL3NlcnZpY2UvSW1wb3J0U2VydmljZS5qYXZhCkBAIC0xOSw2ICsxOSw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi5qb2JzLmltcG9ydGdyaWRmYWlsdXJlcy5kdG9zLkZvcmVpZ25GYWlsdXJlTWVzc2FnZUR0bzsKIGltcG9ydCBvcmcuZWNsaXBzZS5vcGVuay5ncmlkZmFpbHVyZWluZm9ybWF0aW9uLmpvYnMuaW1wb3J0Z3JpZGZhaWx1cmVzLmV4Y2VwdGlvbnMuSW50ZXJuYWxTZXJ2ZXJFcnJvckV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5BdXRvd2lyZWQ7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmFubm90YXRpb24uVmFsdWU7CiBpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5ib290LmNvbnRleHQucHJvcGVydGllcy5Db25maWd1cmF0aW9uUHJvcGVydGllczsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJvb3QuY29udGV4dC5wcm9wZXJ0aWVzLkVuYWJsZUNvbmZpZ3VyYXRpb25Qcm9wZXJ0aWVzOwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsubWVzc2FnaW5nLnN1cHBvcnQuTWVzc2FnZUJ1aWxkZXI7CmRpZmYgLS1naXQgYS90ZXN0SW1wb3J0R3JpZEZhaWx1cmVzL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi55bWwgYi90ZXN0SW1wb3J0R3JpZEZhaWx1cmVzL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbi55bWwKaW5kZXggNjdjYmRlZS4uNTM4NDU1MSAxMDA2NDQKLS0tIGEvdGVzdEltcG9ydEdyaWRGYWlsdXJlcy9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb24ueW1sCisrKyBiL3Rlc3RJbXBvcnRHcmlkRmFpbHVyZXMvc3JjL21haW4vcmVzb3VyY2VzL2FwcGxpY2F0aW9uLnltbApAQCAtMjksMzUgKzI5LDYgQEAKIHNlcnZlcjoKICAgbWF4LWh0dHAtaGVhZGVyLXNpemU6IDI2MjE0NAogCi1qd3Q6Ci0gIHRva2VuSGVhZGVyOiBBdXRob3JpemF0aW9uCi0gIHVzZVN0YXRpY0p3dDogZmFsc2UKLSAgc3RhdGljSnd0OiB4Ci0KLWdyaWRGYWlsdXJlSW5mb3JtYXRpb246Ci0gIG1heExpc3RTaXplOiAyMDAwCi0KLXNlcnZpY2VzOgotICBhdXRoTkF1dGg6Ci0gICAgbmFtZTogYXV0aE5BdXRoU2VydmljZQotCi1hdXRoTkF1dGhTZXJ2aWNlOgotICByaWJib246Ci0gICAgbGlzdE9mU2VydmVyczogaHR0cDovL2VudG9wa29uOjg4ODAKLQotZmVpZ246Ci0gIGNsaWVudDoKLSAgICBjb25maWc6Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBjb25uZWN0VGltZW91dDogNjAwMDAKLSAgICAgICAgcmVhZFRpbWVvdXQ6IDYwMDAwCi1jb3JzOgotICBjb3JzRW5hYmxlZDogZmFsc2UKLQotc3dhZ2dlcjoKLSAgYmFzZVVybDoKLSAgcHJveHlVcmw6Ci0KIC0tLQogCiBzcHJpbmc6CkBAIC03Miw0NCArNDMsMjIgQEAKIGZseXdheToKICAgZW5hYmxlZDogZmFsc2UKIAotand0OgotICB0b2tlbkhlYWRlcjogQXV0aG9yaXphdGlvbgotICB1c2VTdGF0aWNKd3Q6IHRydWUKLSAgc3RhdGljSnd0OiBleUpoYkdjaU9pSlNVekkxTmlJc0luUjVjQ0lnT2lBaVNsZFVJaXdpYTJsa0lpQTZJQ0pJWWxJM1oycG9ibUUyZVhKUlpuWkpUV2hVU1Y5dFkyZzNabXRUUVdWRlgzaExUakJoWlZsMGJqZGpJbjAuZXlKcWRHa2lPaUk1TUdJME5HRmtPQzFpWWpsbUxUUTFNemt0WVRRd1l5MHlZalF5WlROa05qTmlPR0VpTENKbGVIQWlPakUxTnpnMk5UVTNPVFVzSW01aVppSTZNQ3dpYVdGMElqb3hOVGM0TmpVMU5EazFMQ0pwYzNNaU9pSm9kSFJ3T2k4dmJHOWpZV3hvYjNOME9qZ3dPREF2WVhWMGFDOXlaV0ZzYlhNdlJXeHZaMkp2YjJzaUxDSmhkV1FpT2lKbGJHOW5ZbTl2YXkxaVlXTnJaVzVrSWl3aWMzVmlJam9pT0RZeU5qWTVObVl0WmpGaE1pMDBaR0kxTFRreVpXWXRaVGxoTWpRMk5qZzFZVFUwSWl3aWRIbHdJam9pUW1WaGNtVnlJaXdpWVhwd0lqb2laV3h2WjJKdmIyc3RZbUZqYTJWdVpDSXNJbUYxZEdoZmRHbHRaU0k2TUN3aWMyVnpjMmx2Ymw5emRHRjBaU0k2SWpKbU1XSXpPREU1TFdaak5qUXROREV6TkMxaU5XUXhMV1kzWldZNE56VTVOREJrTkNJc0ltRmpjaUk2SWpFaUxDSmhiR3h2ZDJWa0xXOXlhV2RwYm5NaU9sc2lLaUpkTENKeVpXRnNiVjloWTJObGMzTWlPbnNpY205c1pYTWlPbHNpYTI5dUxXRmtiV2x1SWl3aWEyOXVMWGR5YVhSbGNpSXNJbXR2YmkxaFkyTmxjM01pTENKcmIyNHRjbVZoWkdWeUlsMTlMQ0p5WlhOdmRYSmpaVjloWTJObGMzTWlPbnQ5TENKdVlXMWxJam9pVkdWemRHVnlSbWx5YzNSdVlXMWxYM0ozWVNCVVpYTjBaWEpNWVhOMGJtRnRaVjl5ZDJFaUxDSndjbVZtWlhKeVpXUmZkWE5sY201aGJXVWlPaUowWlhOMGRYTmxjbDl5ZDJFaUxDSm5hWFpsYmw5dVlXMWxJam9pVkdWemRHVnlSbWx5YzNSdVlXMWxYM0ozWVNJc0ltWmhiV2xzZVY5dVlXMWxJam9pVkdWemRHVnlUR0Z6ZEc1aGJXVmZjbmRoSW4wLkRBWVh1djR0S244UlhxTzFqeXR0bkQtdEY0blNoVUJReWZlNGJLYkFpUEF5WTJ4NVliQWYzTTRlWG5MckdxbzgtbG9HS2xkSUNDMjhiTDBMYU1BM0tLa1FFT2ZXNXNmcEdxb042MjEydnM4OW1Pa2x0MFRKWWM1UE1Yd0ZnSjVXQ19US2pkd3E3LWFhRGFmT0VXZWhWMFUxdXQzcy05NG92TllJRW4yOW56WG0yVzFsZG9YSkVxMDNGODgwamx5c1E1emxSdkdGN2VYRUVwRmZJMlVSeXlOUTJVV2gwU3NmcS1nT0F0MnBiRjF1NnByQTVSZnZVbVozdjFldTIxWUxHWnRncVBxeGIxbDZvZHlIM2lwMTVqX0hkZ25UZW81MnlteHVSVWo2NU1za21lM1Y1ZXYyRGl0SEk5dlpnbnBWOElkaGI0VFRXbGlCZUdDT01mREZDZwotCiAtLS0KIAogc3ByaW5nOgogICBwcm9maWxlczogZGV2c2VydmVyCiAKLWp3dDoKLSAgdG9rZW5IZWFkZXI6IEF1dGhvcml6YXRpb24KLSAgdXNlU3RhdGljSnd0OiBmYWxzZQotICBzdGF0aWNKd3Q6IGV5SmhiR2NpT2lKU1V6STFOaUlzSW5SNWNDSWdPaUFpU2xkVUlpd2lhMmxrSWlBNklDSklZbEkzWjJwb2JtRTJlWEpSWm5aSlRXaFVTVjl0WTJnM1ptdFRRV1ZGWDNoTFRqQmhaVmwwYmpkakluMC5leUpxZEdraU9pSTVNR0kwTkdGa09DMWlZamxtTFRRMU16a3RZVFF3WXkweVlqUXlaVE5rTmpOaU9HRWlMQ0psZUhBaU9qRTFOemcyTlRVM09UVXNJbTVpWmlJNk1Dd2lhV0YwSWpveE5UYzROalUxTkRrMUxDSnBjM01pT2lKb2RIUndPaTh2Ykc5allXeG9iM04wT2pnd09EQXZZWFYwYUM5eVpXRnNiWE12Uld4dloySnZiMnNpTENKaGRXUWlPaUpsYkc5blltOXZheTFpWVdOclpXNWtJaXdpYzNWaUlqb2lPRFl5TmpZNU5tWXRaakZoTWkwMFpHSTFMVGt5WldZdFpUbGhNalEyTmpnMVlUVTBJaXdpZEhsd0lqb2lRbVZoY21WeUlpd2lZWHB3SWpvaVpXeHZaMkp2YjJzdFltRmphMlZ1WkNJc0ltRjFkR2hmZEdsdFpTSTZNQ3dpYzJWemMybHZibDl6ZEdGMFpTSTZJakptTVdJek9ERTVMV1pqTmpRdE5ERXpOQzFpTldReExXWTNaV1k0TnpVNU5EQmtOQ0lzSW1GamNpSTZJakVpTENKaGJHeHZkMlZrTFc5eWFXZHBibk1pT2xzaUtpSmRMQ0p5WldGc2JWOWhZMk5sYzNNaU9uc2ljbTlzWlhNaU9sc2lhMjl1TFdGa2JXbHVJaXdpYTI5dUxYZHlhWFJsY2lJc0ltdHZiaTFoWTJObGMzTWlMQ0pyYjI0dGNtVmhaR1Z5SWwxOUxDSnlaWE52ZFhKalpWOWhZMk5sYzNNaU9udDlMQ0p1WVcxbElqb2lWR1Z6ZEdWeVJtbHljM1J1WVcxbFgzSjNZU0JVWlhOMFpYSk1ZWE4wYm1GdFpWOXlkMkVpTENKd2NtVm1aWEp5WldSZmRYTmxjbTVoYldVaU9pSjBaWE4wZFhObGNsOXlkMkVpTENKbmFYWmxibDl1WVcxbElqb2lWR1Z6ZEdWeVJtbHljM1J1WVcxbFgzSjNZU0lzSW1aaGJXbHNlVjl1WVcxbElqb2lWR1Z6ZEdWeVRHRnpkRzVoYldWZmNuZGhJbjAuREFZWHV2NHRLbjhSWHFPMWp5dHRuRC10RjRuU2hVQlF5ZmU0YktiQWlQQXlZMng1WWJBZjNNNGVYbkxyR3FvOC1sb0dLbGRJQ0MyOGJMMExhTUEzS0trUUVPZlc1c2ZwR3FvTjYyMTJ2czg5bU9rbHQwVEpZYzVQTVh3RmdKNVdDX1RLamR3cTctYWFEYWZPRVdlaFYwVTF1dDNzLTk0b3ZOWUlFbjI5bnpYbTJXMWxkb1hKRXEwM0Y4ODBqbHlzUTV6bFJ2R0Y3ZVhFRXBGZkkyVVJ5eU5RMlVXaDBTc2ZxLWdPQXQycGJGMXU2cHJBNVJmdlVtWjN2MWV1MjFZTEdadGdxUHF4YjFsNm9keUgzaXAxNWpfSGRnblRlbzUyeW14dVJVajY1TXNrbWUzVjVldjJEaXRISTl2WmducFY4SWRoYjRUVFdsaUJlR0NPTWZERkNnCi0KIHNlcnZlcjoKICAgcG9ydDogOTE3NQogCi1jb3JzOgotICBjb3JzRW5hYmxlZDogdHJ1ZQotCi0KIC0tLQogCiBzcHJpbmc6CiAgIHByb2ZpbGVzOiBkZXZzZXJ2ZXItdW5zZWN1cmUKIAotand0OgotICB0b2tlbkhlYWRlcjogQXV0aG9yaXphdGlvbgotICB1c2VTdGF0aWNKd3Q6IHRydWUKLSAgc3RhdGljSnd0OiBleUpoYkdjaU9pSlNVekkxTmlJc0luUjVjQ0lnT2lBaVNsZFVJaXdpYTJsa0lpQTZJQ0pJWWxJM1oycG9ibUUyZVhKUlpuWkpUV2hVU1Y5dFkyZzNabXRUUVdWRlgzaExUakJoWlZsMGJqZGpJbjAuZXlKcWRHa2lPaUk1TUdJME5HRmtPQzFpWWpsbUxUUTFNemt0WVRRd1l5MHlZalF5WlROa05qTmlPR0VpTENKbGVIQWlPakUxTnpnMk5UVTNPVFVzSW01aVppSTZNQ3dpYVdGMElqb3hOVGM0TmpVMU5EazFMQ0pwYzNNaU9pSm9kSFJ3T2k4dmJHOWpZV3hvYjNOME9qZ3dPREF2WVhWMGFDOXlaV0ZzYlhNdlJXeHZaMkp2YjJzaUxDSmhkV1FpT2lKbGJHOW5ZbTl2YXkxaVlXTnJaVzVrSWl3aWMzVmlJam9pT0RZeU5qWTVObVl0WmpGaE1pMDBaR0kxTFRreVpXWXRaVGxoTWpRMk5qZzFZVFUwSWl3aWRIbHdJam9pUW1WaGNtVnlJaXdpWVhwd0lqb2laV3h2WjJKdmIyc3RZbUZqYTJWdVpDSXNJbUYxZEdoZmRHbHRaU0k2TUN3aWMyVnpjMmx2Ymw5emRHRjBaU0k2SWpKbU1XSXpPREU1TFdaak5qUXROREV6TkMxaU5XUXhMV1kzWldZNE56VTVOREJrTkNJc0ltRmpjaUk2SWpFaUxDSmhiR3h2ZDJWa0xXOXlhV2RwYm5NaU9sc2lLaUpkTENKeVpXRnNiVjloWTJObGMzTWlPbnNpY205c1pYTWlPbHNpYTI5dUxXRmtiV2x1SWl3aWEyOXVMWGR5YVhSbGNpSXNJbXR2YmkxaFkyTmxjM01pTENKcmIyNHRjbVZoWkdWeUlsMTlMQ0p5WlhOdmRYSmpaVjloWTJObGMzTWlPbnQ5TENKdVlXMWxJam9pVkdWemRHVnlSbWx5YzNSdVlXMWxYM0ozWVNCVVpYTjBaWEpNWVhOMGJtRnRaVjl5ZDJFaUxDSndjbVZtWlhKeVpXUmZkWE5sY201aGJXVWlPaUowWlhOMGRYTmxjbDl5ZDJFaUxDSm5hWFpsYmw5dVlXMWxJam9pVkdWemRHVnlSbWx5YzNSdVlXMWxYM0ozWVNJc0ltWmhiV2xzZVY5dVlXMWxJam9pVkdWemRHVnlUR0Z6ZEc1aGJXVmZjbmRoSW4wLkRBWVh1djR0S244UlhxTzFqeXR0bkQtdEY0blNoVUJReWZlNGJLYkFpUEF5WTJ4NVliQWYzTTRlWG5MckdxbzgtbG9HS2xkSUNDMjhiTDBMYU1BM0tLa1FFT2ZXNXNmcEdxb042MjEydnM4OW1Pa2x0MFRKWWM1UE1Yd0ZnSjVXQ19US2pkd3E3LWFhRGFmT0VXZWhWMFUxdXQzcy05NG92TllJRW4yOW56WG0yVzFsZG9YSkVxMDNGODgwamx5c1E1emxSdkdGN2VYRUVwRmZJMlVSeXlOUTJVV2gwU3NmcS1nT0F0MnBiRjF1NnByQTVSZnZVbVozdjFldTIxWUxHWnRncVBxeGIxbDZvZHlIM2lwMTVqX0hkZ25UZW81MnlteHVSVWo2NU1za21lM1Y1ZXYyRGl0SEk5dlpnbnBWOElkaGI0VFRXbGlCZUdDT01mREZDZwotCiBzZXJ2ZXI6CiAgIHBvcnQ6IDkxNzYKIAotY29yczoKLSAgY29yc0VuYWJsZWQ6IHRydWUKLQogLS0tCiAKIHNwcmluZzoKQEAgLTEzNiwyMiArODUsNSBAQAogICAgIHNlc3Npb246CiAgICAgICB0cmFja2luZy1tb2RlczogY29va2llCiAKLWp3dDoKLSAgdG9rZW5IZWFkZXI6IEF1dGhvcml6YXRpb24KLSAgdXNlU3RhdGljSnd0OiBmYWxzZQotICBzdGF0aWNKd3Q6IGV5SmhiR2NpT2lKU1V6STFOaUlzSW5SNWNDSWdPaUFpU2xkVUlpd2lhMmxrSWlBNklDSklZbEkzWjJwb2JtRTJlWEpSWm5aSlRXaFVTVjl0WTJnM1ptdFRRV1ZGWDNoTFRqQmhaVmwwYmpkakluMC5leUpxZEdraU9pSTVNR0kwTkdGa09DMWlZamxtTFRRMU16a3RZVFF3WXkweVlqUXlaVE5rTmpOaU9HRWlMQ0psZUhBaU9qRTFOemcyTlRVM09UVXNJbTVpWmlJNk1Dd2lhV0YwSWpveE5UYzROalUxTkRrMUxDSnBjM01pT2lKb2RIUndPaTh2Ykc5allXeG9iM04wT2pnd09EQXZZWFYwYUM5eVpXRnNiWE12Uld4dloySnZiMnNpTENKaGRXUWlPaUpsYkc5blltOXZheTFpWVdOclpXNWtJaXdpYzNWaUlqb2lPRFl5TmpZNU5tWXRaakZoTWkwMFpHSTFMVGt5WldZdFpUbGhNalEyTmpnMVlUVTBJaXdpZEhsd0lqb2lRbVZoY21WeUlpd2lZWHB3SWpvaVpXeHZaMkp2YjJzdFltRmphMlZ1WkNJc0ltRjFkR2hmZEdsdFpTSTZNQ3dpYzJWemMybHZibDl6ZEdGMFpTSTZJakptTVdJek9ERTVMV1pqTmpRdE5ERXpOQzFpTldReExXWTNaV1k0TnpVNU5EQmtOQ0lzSW1GamNpSTZJakVpTENKaGJHeHZkMlZrTFc5eWFXZHBibk1pT2xzaUtpSmRMQ0p5WldGc2JWOWhZMk5sYzNNaU9uc2ljbTlzWlhNaU9sc2lhMjl1TFdGa2JXbHVJaXdpYTI5dUxYZHlhWFJsY2lJc0ltdHZiaTFoWTJObGMzTWlMQ0pyYjI0dGNtVmhaR1Z5SWwxOUxDSnlaWE52ZFhKalpWOWhZMk5sYzNNaU9udDlMQ0p1WVcxbElqb2lWR1Z6ZEdWeVJtbHljM1J1WVcxbFgzSjNZU0JVWlhOMFpYSk1ZWE4wYm1GdFpWOXlkMkVpTENKd2NtVm1aWEp5WldSZmRYTmxjbTVoYldVaU9pSjBaWE4wZFhObGNsOXlkMkVpTENKbmFYWmxibDl1WVcxbElqb2lWR1Z6ZEdWeVJtbHljM1J1WVcxbFgzSjNZU0lzSW1aaGJXbHNlVjl1WVcxbElqb2lWR1Z6ZEdWeVRHRnpkRzVoYldWZmNuZGhJbjAuREFZWHV2NHRLbjhSWHFPMWp5dHRuRC10RjRuU2hVQlF5ZmU0YktiQWlQQXlZMng1WWJBZjNNNGVYbkxyR3FvOC1sb0dLbGRJQ0MyOGJMMExhTUEzS0trUUVPZlc1c2ZwR3FvTjYyMTJ2czg5bU9rbHQwVEpZYzVQTVh3RmdKNVdDX1RLamR3cTctYWFEYWZPRVdlaFYwVTF1dDNzLTk0b3ZOWUlFbjI5bnpYbTJXMWxkb1hKRXEwM0Y4ODBqbHlzUTV6bFJ2R0Y3ZVhFRXBGZkkyVVJ5eU5RMlVXaDBTc2ZxLWdPQXQycGJGMXU2cHJBNVJmdlVtWjN2MWV1MjFZTEdadGdxUHF4YjFsNm9keUgzaXAxNWpfSGRnblRlbzUyeW14dVJVajY1TXNrbWUzVjVldjJEaXRISTl2WmducFY4SWRoYjRUVFdsaUJlR0NPTWZERkNnCi0KLXNlcnZpY2VzOgotICBhdXRoTkF1dGg6Ci0gICAgbmFtZTogYXV0aE5BdXRoU2VydmljZQotCi1hdXRoTkF1dGhTZXJ2aWNlOgotICByaWJib246Ci0gICAgbGlzdE9mU2VydmVyczogaHR0cDovL2xvY2FsaG9zdDo4MDgwCi0KLWNvcnM6Ci0gIGNvcnNFbmFibGVkOiB0cnVlCi0KIHN3YWdnZXI6Ci0gIGJhc2VVcmw6IC90ZXN0SW1wb3J0ZXIKLSAgcHJveHlVcmw6ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorICBiYXNlVXJsOiAvdGVzdEltcG9ydGVyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdEltcG9ydEdyaWRGYWlsdXJlcy9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb25fbG9jYWxkZXYueW1sIGIvdGVzdEltcG9ydEdyaWRGYWlsdXJlcy9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb25fbG9jYWxkZXYueW1sCmluZGV4IDJlZDUwMTEuLmMxMzk0ZmQgMTAwNjQ0Ci0tLSBhL3Rlc3RJbXBvcnRHcmlkRmFpbHVyZXMvc3JjL21haW4vcmVzb3VyY2VzL2FwcGxpY2F0aW9uX2xvY2FsZGV2LnltbAorKysgYi90ZXN0SW1wb3J0R3JpZEZhaWx1cmVzL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbl9sb2NhbGRldi55bWwKQEAgLTI2LDEzICsyNiw2IEBACiAgICAgZmFpbHVyZV9pbXBvcnRfcXVldWU6IHNpdEltcG9ydFF1ZXVlX2xvY2FsZGV2CiAgICAgZmFpbHVyZV9pbXBvcnRfcm91dGluZ2tleTogc2l0SW1wb3J0RXhjaGFuZ2UuZmFpbHVyZUltcG9ydEtleV9sb2NhbGRldgogCi1ldXJla2E6Ci0gIGNsaWVudDoKLSAgICBzZXJ2aWNlLXVybDoKLSAgICAgIGRlZmF1bFpvbmU6IGh0dHA6Ly9sb2NhbGhvc3Q6ODc2MS8KLSAgaW5zdGFuY2U6Ci0gICAgcHJlZmVyLWlwLWFkZHJlc3M6IHRydWUKLQogaW5kZXgtY2hhbm5lbDoKICAgZW5hYmxlZDogdHJ1ZQogCkBAIC00MywyOSArMzYsNiBAQAogICAgIHNlc3Npb246CiAgICAgICB0cmFja2luZy1tb2RlczogY29va2llCiAKLWdyaWRGYWlsdXJlSW5mb3JtYXRpb246Ci0gIG1heExpc3RTaXplOiAyMDAwCi0KLWp3dDoKLSAgdG9rZW5IZWFkZXI6IEF1dGhvcml6YXRpb24KLSAgdXNlU3RhdGljSnd0OiBmYWxzZQotICBzdGF0aWNKd3Q6IGV5SmhiR2NpT2lKU1V6STFOaUlzSW5SNWNDSWdPaUFpU2xkVUlpd2lhMmxrSWlBNklDSklZbEkzWjJwb2JtRTJlWEpSWm5aSlRXaFVTVjl0WTJnM1ptdFRRV1ZGWDNoTFRqQmhaVmwwYmpkakluMC5leUpxZEdraU9pSTVNR0kwTkdGa09DMWlZamxtTFRRMU16a3RZVFF3WXkweVlqUXlaVE5rTmpOaU9HRWlMQ0psZUhBaU9qRTFOemcyTlRVM09UVXNJbTVpWmlJNk1Dd2lhV0YwSWpveE5UYzROalUxTkRrMUxDSnBjM01pT2lKb2RIUndPaTh2Ykc5allXeG9iM04wT2pnd09EQXZZWFYwYUM5eVpXRnNiWE12Uld4dloySnZiMnNpTENKaGRXUWlPaUpsYkc5blltOXZheTFpWVdOclpXNWtJaXdpYzNWaUlqb2lPRFl5TmpZNU5tWXRaakZoTWkwMFpHSTFMVGt5WldZdFpUbGhNalEyTmpnMVlUVTBJaXdpZEhsd0lqb2lRbVZoY21WeUlpd2lZWHB3SWpvaVpXeHZaMkp2YjJzdFltRmphMlZ1WkNJc0ltRjFkR2hmZEdsdFpTSTZNQ3dpYzJWemMybHZibDl6ZEdGMFpTSTZJakptTVdJek9ERTVMV1pqTmpRdE5ERXpOQzFpTldReExXWTNaV1k0TnpVNU5EQmtOQ0lzSW1GamNpSTZJakVpTENKaGJHeHZkMlZrTFc5eWFXZHBibk1pT2xzaUtpSmRMQ0p5WldGc2JWOWhZMk5sYzNNaU9uc2ljbTlzWlhNaU9sc2lhMjl1TFdGa2JXbHVJaXdpYTI5dUxYZHlhWFJsY2lJc0ltdHZiaTFoWTJObGMzTWlMQ0pyYjI0dGNtVmhaR1Z5SWwxOUxDSnlaWE52ZFhKalpWOWhZMk5sYzNNaU9udDlMQ0p1WVcxbElqb2lWR1Z6ZEdWeVJtbHljM1J1WVcxbFgzSjNZU0JVWlhOMFpYSk1ZWE4wYm1GdFpWOXlkMkVpTENKd2NtVm1aWEp5WldSZmRYTmxjbTVoYldVaU9pSjBaWE4wZFhObGNsOXlkMkVpTENKbmFYWmxibDl1WVcxbElqb2lWR1Z6ZEdWeVJtbHljM1J1WVcxbFgzSjNZU0lzSW1aaGJXbHNlVjl1WVcxbElqb2lWR1Z6ZEdWeVRHRnpkRzVoYldWZmNuZGhJbjAuREFZWHV2NHRLbjhSWHFPMWp5dHRuRC10RjRuU2hVQlF5ZmU0YktiQWlQQXlZMng1WWJBZjNNNGVYbkxyR3FvOC1sb0dLbGRJQ0MyOGJMMExhTUEzS0trUUVPZlc1c2ZwR3FvTjYyMTJ2czg5bU9rbHQwVEpZYzVQTVh3RmdKNVdDX1RLamR3cTctYWFEYWZPRVdlaFYwVTF1dDNzLTk0b3ZOWUlFbjI5bnpYbTJXMWxkb1hKRXEwM0Y4ODBqbHlzUTV6bFJ2R0Y3ZVhFRXBGZkkyVVJ5eU5RMlVXaDBTc2ZxLWdPQXQycGJGMXU2cHJBNVJmdlVtWjN2MWV1MjFZTEdadGdxUHF4YjFsNm9keUgzaXAxNWpfSGRnblRlbzUyeW14dVJVajY1TXNrbWUzVjVldjJEaXRISTl2WmducFY4SWRoYjRUVFdsaUJlR0NPTWZERkNnCi0KLXNlcnZpY2VzOgotICBhdXRoTkF1dGg6Ci0gICAgbmFtZTogYXV0aE5BdXRoU2VydmljZQotCi1hdXRoTkF1dGhTZXJ2aWNlOgotICByaWJib246Ci0gICAgbGlzdE9mU2VydmVyczogaHR0cDovL2VudG9wa29uOjg4ODAKLQotY29yczoKLSAgY29yc0VuYWJsZWQ6IHRydWUKLQotc3dhZ2dlcjoKLSAgYmFzZVVybDoKLSAgcHJveHlVcmw6Ci0KIC0tLQogCiBzcHJpbmc6Cg==