ZGlmZiAtLWdpdCBhL2dmc0JhY2tlbmRTZXJ2aWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zZXJ2aWNlL0ZhaWx1cmVJbmZvcm1hdGlvblNlcnZpY2UuamF2YSBiL2dmc0JhY2tlbmRTZXJ2aWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zZXJ2aWNlL0ZhaWx1cmVJbmZvcm1hdGlvblNlcnZpY2UuamF2YQppbmRleCBjY2EzNTYxLi4yMjljZTkxIDEwMDY0NAotLS0gYS9nZnNCYWNrZW5kU2VydmljZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2VydmljZS9GYWlsdXJlSW5mb3JtYXRpb25TZXJ2aWNlLmphdmEKKysrIGIvZ2ZzQmFja2VuZFNlcnZpY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NlcnZpY2UvRmFpbHVyZUluZm9ybWF0aW9uU2VydmljZS5qYXZhCkBAIC0yMTQsMTUgKzIxNCwyMSBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIHN0b3JlU3RhdGlvbnMoIFRibEZhaWx1cmVJbmZvcm1hdGlvbiB0YmxUb1N0b3JlLCBMaXN0PFVVSUQ+IHN0YXRpb25JZHMgKSB7CiAgICAgICAgIExpc3Q8VGJsU3RhdGlvbj4gc3RhdGlvbkxpc3QgPSByZXNvbHZlU3RhdGlvbklkcyhzdGF0aW9uSWRzKTsKKyAgICAgICAgU2V0PFRibFN0YXRpb24+IHN0YXRpb25TZXQgPSBuZXcgSGFzaFNldDw+KHN0YXRpb25MaXN0KTsKKyAgICAgICAgaWYoc3RhdGlvbkxpc3Quc2l6ZSgpID4gc3RhdGlvblNldC5zaXplKCkpeworICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkRlbmllZEV4Y2VwdGlvbihPcGVyYXRpb25UeXBlLklOU0VSVCwgImRvdWJsZS5hc3NpZ25tZW50Lm9mLnN0YXRpb25zIik7CisgICAgICAgIH0KICAgICAgICAgTGlzdDxUYmxGYWlsdXJlSW5mb3JtYXRpb25TdGF0aW9uPiB0YmxGYWlsdXJlU3RhdGlvbnMKICAgICAgICAgICAgICAgICA9IGZhaWx1cmVJbmZvcm1hdGlvblN0YXRpb25SZXBvc2l0b3J5LmZpbmRCeUZrVGJsRmFpbHVyZUluZm9ybWF0aW9uKHRibFRvU3RvcmUuZ2V0SWQoKSk7CiAgICAgICAgIGZhaWx1cmVJbmZvcm1hdGlvblN0YXRpb25SZXBvc2l0b3J5LmRlbGV0ZUFsbCh0YmxGYWlsdXJlU3RhdGlvbnMpOwotICAgICAgICBzdGF0aW9uTGlzdC5mb3JFYWNoKHgtPiB7CisKKyAgICAgICAgc3RhdGlvblNldC5mb3JFYWNoKHgtPiB7CiAgICAgICAgICAgICBUYmxGYWlsdXJlSW5mb3JtYXRpb25TdGF0aW9uIG5ld1JlY29yZCA9IG5ldyBUYmxGYWlsdXJlSW5mb3JtYXRpb25TdGF0aW9uKCk7CiAgICAgICAgICAgICBuZXdSZWNvcmQuc2V0U3RhdGlvblN0YXRpb25JZCh4LmdldFN0YXRpb25JZCgpKTsKICAgICAgICAgICAgIG5ld1JlY29yZC5zZXRGa1RibEZhaWx1cmVJbmZvcm1hdGlvbih0YmxUb1N0b3JlLmdldElkKCkpOwogICAgICAgICAgICAgZmFpbHVyZUluZm9ybWF0aW9uU3RhdGlvblJlcG9zaXRvcnkuc2F2ZShuZXdSZWNvcmQpOwogICAgICAgICB9KTsKKwogICAgIH0KIAogICAgIHByaXZhdGUgRmFpbHVyZUluZm9ybWF0aW9uRHRvIHByb2Nlc3NHcmlkKEZhaWx1cmVJbmZvcm1hdGlvbkR0byBmYWlsdXJlSW5mb0R0bywgR2ZpUHJvY2Vzc1N0YXRlIGZvcmNlZFN0YXRlKSB7CmRpZmYgLS1naXQgYS9nZnNCYWNrZW5kU2VydmljZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2VydmljZS9GYWlsdXJlSW5mb3JtYXRpb25TdGF0aW9uU2VydmljZS5qYXZhIGIvZ2ZzQmFja2VuZFNlcnZpY2Uvc3JjL21haW4vamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NlcnZpY2UvRmFpbHVyZUluZm9ybWF0aW9uU3RhdGlvblNlcnZpY2UuamF2YQppbmRleCA2NmIxOTU1Li4xOWJmZjRlIDEwMDY0NAotLS0gYS9nZnNCYWNrZW5kU2VydmljZS9zcmMvbWFpbi9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2VydmljZS9GYWlsdXJlSW5mb3JtYXRpb25TdGF0aW9uU2VydmljZS5qYXZhCisrKyBiL2dmc0JhY2tlbmRTZXJ2aWNlL3NyYy9tYWluL2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zZXJ2aWNlL0ZhaWx1cmVJbmZvcm1hdGlvblN0YXRpb25TZXJ2aWNlLmphdmEKQEAgLTkwLDcgKzkwLDcgQEAKICAgICAgICAgT3B0aW9uYWw8VGJsRmFpbHVyZUluZm9ybWF0aW9uU3RhdGlvbj4gZmlTdGF0aW9uID0gZmFpbHVyZUluZm9ybWF0aW9uU3RhdGlvblJlcG9zaXRvcnkuZmluZEJ5RmtUYmxGYWlsdXJlSW5mb3JtYXRpb25BbmRTdGF0aW9uU3RhdGlvbklkKGZhaWx1cmVJbmZvcm1hdGlvbi5nZXRJZCgpLCBzdGF0aW9uLmdldFN0YXRpb25JZCgpKTsKIAogICAgICAgICBpZiAoZmlTdGF0aW9uLmlzUHJlc2VudCgpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgT3BlcmF0aW9uRGVuaWVkRXhjZXB0aW9uKE9wZXJhdGlvblR5cGUuSU5TRVJULCAiYXNzaWdubWVudC5hbHJlYWR5LmV4aXN0aW5nIik7CisgICAgICAgICAgICB0aHJvdyBuZXcgT3BlcmF0aW9uRGVuaWVkRXhjZXB0aW9uKE9wZXJhdGlvblR5cGUuSU5TRVJULCAiZG91YmxlLmFzc2lnbm1lbnQub2Yuc3RhdGlvbnMiKTsKICAgICAgICAgfQogCiAgICAgICAgIFRibEZhaWx1cmVJbmZvcm1hdGlvblN0YXRpb24gYXNzaWdubWVudFRvU2F2ZSA9IG5ldyBUYmxGYWlsdXJlSW5mb3JtYXRpb25TdGF0aW9uKCk7CmRpZmYgLS1naXQgYS9nZnNCYWNrZW5kU2VydmljZS9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb25fbG9jYWxkZXYueW1sIGIvZ2ZzQmFja2VuZFNlcnZpY2Uvc3JjL21haW4vcmVzb3VyY2VzL2FwcGxpY2F0aW9uX2xvY2FsZGV2LnltbAppbmRleCA3NWEwZjY5Li42ZTA0OThkIDEwMDY0NAotLS0gYS9nZnNCYWNrZW5kU2VydmljZS9zcmMvbWFpbi9yZXNvdXJjZXMvYXBwbGljYXRpb25fbG9jYWxkZXYueW1sCisrKyBiL2dmc0JhY2tlbmRTZXJ2aWNlL3NyYy9tYWluL3Jlc291cmNlcy9hcHBsaWNhdGlvbl9sb2NhbGRldi55bWwKQEAgLTE0LDYgKzE0LDcgQEAKIHNwcmluZzoKICAgZGF0YXNvdXJjZToKICAgICB1cmw6IGpkYmM6cG9zdGdyZXNxbDovL2VudG9wdGljYWRpcng6NTQzMi9HcmlkRmFpbHVyZUluZm9EZXZlbG9wCisgICAgI3VybDogamRiYzpwb3N0Z3Jlc3FsOi8vZW50b3B0aWNhZGlyeDo1NDMyL0dyaWRGYWlsdXJlSW5mb0RldlNlcnZlcgogICAgIHVzZXJuYW1lOiAke0dGSV9EQl9VU0VSTkFNRX0KICAgICBwYXNzd29yZDogJHtHRklfREJfUEFTU1dPUkR9CiAgICAgbWF4LWFjdGl2ZTogNQpkaWZmIC0tZ2l0IGEvZ2ZzQmFja2VuZFNlcnZpY2Uvc3JjL21haW4vcmVzb3VyY2VzL21lc3NhZ2VzLnByb3BlcnRpZXMgYi9nZnNCYWNrZW5kU2VydmljZS9zcmMvbWFpbi9yZXNvdXJjZXMvbWVzc2FnZXMucHJvcGVydGllcwppbmRleCBhZDA1YzdiLi4yYzgyMTcxIDEwMDY0NAotLS0gYS9nZnNCYWNrZW5kU2VydmljZS9zcmMvbWFpbi9yZXNvdXJjZXMvbWVzc2FnZXMucHJvcGVydGllcworKysgYi9nZnNCYWNrZW5kU2VydmljZS9zcmMvbWFpbi9yZXNvdXJjZXMvbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMTYsNSArMTYsNyBAQAogY2hhbm5lbC5ub3QuZXhpc3Rpbmc9ZGVyIFx1MDBmY2JlcmdlYmVuZSBLYW5hbCBleGlzdGllcnQgbmljaHQuCiBjaGFubmVsLmFscmVhZHkuZXhpc3Rpbmc9ZGVyIFx1MDBmY2JlcmdlYmVuZSBLYW5hbCBleGlzdGllcnQgYmVyZWl0cyBm/HIgZGllc2UgU3T2cnVuZ3NpbmZvcm1hdGlvbi4KIGRlbGV0ZS5ub3QuYWxsb3dlZD1lcyBk/HJmZW4gbnVyIFN09nJ1bmdzbWVsZHVuZ2VuIGltIFN0YXR1cyAnbmV1JyBvZGVyICdnZXBsYW50JyBnZWz2c2NodCB3ZXJkZW4uCitkb3VibGUuYXNzaWdubWVudC5vZi5zdGF0aW9ucz1FaW5lIFN09nJtZWxkdW5nIGRhcmYgZWluZSBTdGF0aW9uIG51ciBlaW5tYWwgZW50aGFsdGVuLgorCiAKIApkaWZmIC0tZ2l0IGEvZ2ZzQmFja2VuZFNlcnZpY2Uvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NlcnZpY2UvRmFpbHVyZUluZm9ybWF0aW9uU2VydmljZVRlc3QuamF2YSBiL2dmc0JhY2tlbmRTZXJ2aWNlL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zZXJ2aWNlL0ZhaWx1cmVJbmZvcm1hdGlvblNlcnZpY2VUZXN0LmphdmEKaW5kZXggMjUxMmVkYi4uYTYzZDZlYiAxMDA2NDQKLS0tIGEvZ2ZzQmFja2VuZFNlcnZpY2Uvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3NlcnZpY2UvRmFpbHVyZUluZm9ybWF0aW9uU2VydmljZVRlc3QuamF2YQorKysgYi9nZnNCYWNrZW5kU2VydmljZS9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc2VydmljZS9GYWlsdXJlSW5mb3JtYXRpb25TZXJ2aWNlVGVzdC5qYXZhCkBAIC0yNyw2ICsyNyw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmsuZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi52aWV3bW9kZWwuRmFpbHVyZUluZm9ybWF0aW9uRHRvOwogaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5rLmdyaWRmYWlsdXJlaW5mb3JtYXRpb24udmlld21vZGVsLkZhaWx1cmVJbmZvcm1hdGlvblB1YmxpY2F0aW9uQ2hhbm5lbER0bzsKIGltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuVGVzdDsKK2ltcG9ydCBvcmcubW9ja2l0by5Nb2NrOwogaW1wb3J0IG9yZy5tb2NraXRvLk1vY2tpdG87CiBpbXBvcnQgb3JnLm1vY2tpdG8uc3R1YmJpbmcuQW5zd2VyOwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKQEAgLTQ1LDggKzQ2LDcgQEAKIAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy4qOwogaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Bcmd1bWVudE1hdGNoZXJzLio7Ci1pbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8udGltZXM7Ci1pbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8ud2hlbjsKK2ltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by4qOwogCiAvL2ltcG9ydCBqYXZhLnNxbC5EYXRlOwogQExvZzRqMgpAQCAtMTQ4LDYgKzE0OCwxMyBAQAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkU3RvcmVGYWlsdXJlSW5mb3JtYXRpb24oKSB7CiAgICAgICAgIEZhaWx1cmVJbmZvcm1hdGlvbkR0byBmaUR0byA9IE1vY2tEYXRhSGVscGVyLm1vY2tGYWlsdXJlSW5mb3JtYXRpb25EdG8oKTsKKyAgICAgICAgTGlzdDxVVUlEPiBzdGF0aW9uTGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBzdGF0aW9uTGlzdC5hZGQoVVVJRC5mcm9tU3RyaW5nKCI4YTVmYjVjYS1kMjZkLTExZWEtODdkMC0wMjQyYWMxMzAwMDMiKSk7CisgICAgICAgIHN0YXRpb25MaXN0LmFkZChVVUlELmZyb21TdHJpbmcoIjhhNWZiMmFhLWQyNmQtMTFlYS04N2QwLTAyNDJhYzEzMDAwMyIpKTsKKyAgICAgICAgc3RhdGlvbkxpc3QuYWRkKFVVSUQuZnJvbVN0cmluZygiYTEzNzVlYzgtZDI2ZS0xMWVhLTg3ZDAtMDI0MmFjMTMwMDAzIikpOworCisgICAgICAgIGZpRHRvLnNldFN0YXRpb25JZHMoc3RhdGlvbkxpc3QpOworCiAgICAgICAgIFRibEZhaWx1cmVJbmZvcm1hdGlvbiBmaVRibCA9IE1vY2tEYXRhSGVscGVyLm1vY2tUYmxGYWlsdXJlSW5mb3JtYXRpb24oKTsKICAgICAgICAgUmVmRmFpbHVyZUNsYXNzaWZpY2F0aW9uIHJlZkZhaWx1cmVDbGFzc2lmaWNhdGlvbiA9IE1vY2tEYXRhSGVscGVyLm1vY2tSZWZGYWlsdXJlQ2xhc3NpZmljYXRpb24oKTsKICAgICAgICAgUmVmU3RhdHVzIHJlZlN0YXR1cyA9IE1vY2tEYXRhSGVscGVyLm1vY2tSZWZTdGF0dXNDcmVhdGVkKCk7CkBAIC0xNTUsOCArMTYyLDEyIEBACiAgICAgICAgIFJlZlJhZGl1cyByZWZSYWRpdXMgPSBNb2NrRGF0YUhlbHBlci5tb2NrUmVmUmFkaXVzKCk7CiAgICAgICAgIFJlZkV4cGVjdGVkUmVhc29uIHJlZkV4cGVjdGVkUmVhc29uID0gTW9ja0RhdGFIZWxwZXIubW9ja1JlZkV4cGVjdGVkUmVhc29uKCk7CiAgICAgICAgIExpc3Q8SHRibEZhaWx1cmVJbmZvcm1hdGlvbj4gaEZhaWx1cmVMaXN0ID0gTW9ja0RhdGFIZWxwZXIubW9ja0hpc3RUYmxGYWlsdXJlSW5mb3JtYXRpb25MaXN0KCk7CisKICAgICAgICAgVGJsU3RhdGlvbiB0YmxTdGF0aW9uID0gTW9ja0RhdGFIZWxwZXIubW9ja1RibFN0YXRpb24oKTsKLSAgICAgICAgVGJsRGlzdHJpYnV0aW9uR3JvdXAgdGJsRGlzdHJpYnV0aW9uR3JvdXAgPSBNb2NrRGF0YUhlbHBlci5tb2NrVGJsRGlzdHJpYnV0aW9uR3JvdXAoKTsKKyAgICAgICAgVGJsU3RhdGlvbiB0YmxTdGF0aW9uMiA9IE1vY2tEYXRhSGVscGVyLm1vY2tUYmxTdGF0aW9uMigpOworICAgICAgICBUYmxTdGF0aW9uIHRibFN0YXRpb24zID0gTW9ja0RhdGFIZWxwZXIubW9ja1RibFN0YXRpb24zKCk7CisKKyAgICAgICAgLy9UYmxEaXN0cmlidXRpb25Hcm91cCB0YmxEaXN0cmlidXRpb25Hcm91cCA9IE1vY2subW9ja1RibEQKIAogICAgICAgICB3aGVuKGZhaWx1cmVJbmZvcm1hdGlvblJlcG9zaXRvcnkuZmluZEJ5VXVpZChhbnkoVVVJRC5jbGFzcykpKS50aGVuUmV0dXJuKE9wdGlvbmFsLm9mKGZpVGJsKSk7CiAgICAgICAgIHdoZW4oYnJhbmNoUmVwb3NpdG9yeS5maW5kQnlVdWlkKGFueShVVUlELmNsYXNzKSkpLnRoZW5SZXR1cm4oT3B0aW9uYWwub2YocmVmQnJhbmNoKSk7CkBAIC0xNjUsOCArMTc2LDkgQEAKICAgICAgICAgd2hlbihyYWRpdXNSZXBvc2l0b3J5LmZpbmRCeVV1aWQoYW55KFVVSUQuY2xhc3MpKSkudGhlblJldHVybihPcHRpb25hbC5vZihyZWZSYWRpdXMpKTsKICAgICAgICAgd2hlbihleHBlY3RlZFJlYXNvblJlcG9zaXRvcnkuZmluZEJ5VXVpZChhbnkoVVVJRC5jbGFzcykpKS50aGVuUmV0dXJuKE9wdGlvbmFsLm9mKHJlZkV4cGVjdGVkUmVhc29uKSk7CiAgICAgICAgIHdoZW4oaGlzdEZhaWx1cmVJbmZvcm1hdGlvblJlcG9zaXRvcnkuZmluZEJ5VXVpZChhbnkoVVVJRC5jbGFzcykpKS50aGVuUmV0dXJuKGhGYWlsdXJlTGlzdCk7Ci0gICAgICAgIHdoZW4oc3RhdGlvblJlcG9zaXRvcnkuZmluZEJ5VXVpZChhbnkoVVVJRC5jbGFzcykpKS50aGVuUmV0dXJuKE9wdGlvbmFsLm9mKHRibFN0YXRpb24pKTsKLSAgICAgICAgd2hlbihkaXN0cmlidXRpb25Hcm91cFJlcG9zaXRvcnkuZmluZEJ5VXVpZChhbnkoVVVJRC5jbGFzcykpKS50aGVuUmV0dXJuKE9wdGlvbmFsLm9mKHRibERpc3RyaWJ1dGlvbkdyb3VwKSk7CisgICAgICAgIHdoZW4oc3RhdGlvblJlcG9zaXRvcnkuZmluZEJ5VXVpZChlcShVVUlELmZyb21TdHJpbmcoIjhhNWZiMmFhLWQyNmQtMTFlYS04N2QwLTAyNDJhYzEzMDAwMyIpKSkpLnRoZW5SZXR1cm4oT3B0aW9uYWwub2YodGJsU3RhdGlvbikpOworICAgICAgICB3aGVuKHN0YXRpb25SZXBvc2l0b3J5LmZpbmRCeVV1aWQoZXEoVVVJRC5mcm9tU3RyaW5nKCI4YTVmYjVjYS1kMjZkLTExZWEtODdkMC0wMjQyYWMxMzAwMDMiKSkpKS50aGVuUmV0dXJuKE9wdGlvbmFsLm9mKHRibFN0YXRpb24yKSk7CisgICAgICAgIHdoZW4oc3RhdGlvblJlcG9zaXRvcnkuZmluZEJ5VXVpZChlcShVVUlELmZyb21TdHJpbmcoImExMzc1ZWM4LWQyNmUtMTFlYS04N2QwLTAyNDJhYzEzMDAwMyIpKSkpLnRoZW5SZXR1cm4oT3B0aW9uYWwub2YodGJsU3RhdGlvbjMpKTsKIAogICAgICAgICB3aGVuKGZhaWx1cmVJbmZvcm1hdGlvblJlcG9zaXRvcnkuc2F2ZShhbnkoVGJsRmFpbHVyZUluZm9ybWF0aW9uLmNsYXNzKSkpCiAgICAgICAgICAgICAgICAgLnRoZW4oKEFuc3dlcjxUYmxGYWlsdXJlSW5mb3JtYXRpb24+KSBpbnZvY2F0aW9uIC0+IHsKQEAgLTIxMSw2ICsyMjMsOSBAQAogICAgICAgICByZWZTdGF0dXMuc2V0SWQoR2ZpUHJvY2Vzc1N0YXRlLlBMQU5ORUQuZ2V0U3RhdHVzVmFsdWUoKSk7CiAKICAgICAgICAgVGJsU3RhdGlvbiB0YmxTdGF0aW9uID0gTW9ja0RhdGFIZWxwZXIubW9ja1RibFN0YXRpb24oKTsKKyAgICAgICAgVGJsU3RhdGlvbiB0YmxTdGF0aW9uMiA9IE1vY2tEYXRhSGVscGVyLm1vY2tUYmxTdGF0aW9uMigpOworICAgICAgICBUYmxTdGF0aW9uIHRibFN0YXRpb24zID0gTW9ja0RhdGFIZWxwZXIubW9ja1RibFN0YXRpb24zKCk7CisKICAgICAgICAgTGlzdDxUYmxBZGRyZXNzPiBhZGRyZXNzTGlzdCA9IE1vY2tEYXRhSGVscGVyLm1vY2tUYmxBZGRyZXNzTGlzdCgpOwogICAgICAgICBUYmxEaXN0cmlidXRpb25Hcm91cCB0YmxEaXN0cmlidXRpb25Hcm91cCA9IE1vY2tEYXRhSGVscGVyLm1vY2tUYmxEaXN0cmlidXRpb25Hcm91cCgpOwogCkBAIC0yMjQsNiArMjM5LDEzIEBACiAgICAgICAgIGZpRHRvLnNldFJhZGl1c0lkKG51bGwpOwogICAgICAgICBmaUR0by5zZXRFeHBlY3RlZFJlYXNvbklkKG51bGwpOwogCisgICAgICAgIExpc3Q8VVVJRD4gc3RhdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgc3RhdGlvbkxpc3QuYWRkKFVVSUQuZnJvbVN0cmluZygiOGE1ZmI1Y2EtZDI2ZC0xMWVhLTg3ZDAtMDI0MmFjMTMwMDAzIikpOworICAgICAgICBzdGF0aW9uTGlzdC5hZGQoVVVJRC5mcm9tU3RyaW5nKCI4YTVmYjJhYS1kMjZkLTExZWEtODdkMC0wMjQyYWMxMzAwMDMiKSk7CisgICAgICAgIHN0YXRpb25MaXN0LmFkZChVVUlELmZyb21TdHJpbmcoImExMzc1ZWM4LWQyNmUtMTFlYS04N2QwLTAyNDJhYzEzMDAwMyIpKTsKKworICAgICAgICBmaUR0by5zZXRTdGF0aW9uSWRzKHN0YXRpb25MaXN0KTsKKwogICAgICAgICBUYmxGYWlsdXJlSW5mb3JtYXRpb24gZmlUYmwgPSBNb2NrRGF0YUhlbHBlci5tb2NrVGJsRmFpbHVyZUluZm9ybWF0aW9uKCk7CiAgICAgICAgIGZpVGJsLnNldElkKDc3N0wpOwogICAgICAgICBmaVRibC5zZXRSZWZCcmFuY2gobnVsbCk7CkBAIC0yMzYsNyArMjU4LDkgQEAKICAgICAgICAgd2hlbihzdGF0dXNSZXBvc2l0b3J5LmZpbmRCeVV1aWQoYW55KCBVVUlELmNsYXNzICkpKS50aGVuUmV0dXJuKE9wdGlvbmFsLm9mKHJlZlN0YXR1cykpOwogICAgICAgICB3aGVuKGZhaWx1cmVJbmZvcm1hdGlvblJlcG9zaXRvcnkuZmluZEJ5VXVpZChhbnkoVVVJRC5jbGFzcykpKS50aGVuUmV0dXJuKE9wdGlvbmFsLm9mKGZpVGJsKSk7CiAgICAgICAgIHdoZW4oc3RhdGlvblJlcG9zaXRvcnkuZmluZEJ5U3RhdGlvbklkKGFueVN0cmluZygpKSkudGhlblJldHVybihPcHRpb25hbC5vZih0YmxTdGF0aW9uKSk7Ci0gICAgICAgIHdoZW4oc3RhdGlvblJlcG9zaXRvcnkuZmluZEJ5VXVpZChhbnkoVVVJRC5jbGFzcykpKS50aGVuUmV0dXJuKE9wdGlvbmFsLm9mKHRibFN0YXRpb24pKTsKKyAgICAgICAgd2hlbihzdGF0aW9uUmVwb3NpdG9yeS5maW5kQnlVdWlkKGVxKFVVSUQuZnJvbVN0cmluZygiOGE1ZmIyYWEtZDI2ZC0xMWVhLTg3ZDAtMDI0MmFjMTMwMDAzIikpKSkudGhlblJldHVybihPcHRpb25hbC5vZih0YmxTdGF0aW9uKSk7CisgICAgICAgIHdoZW4oc3RhdGlvblJlcG9zaXRvcnkuZmluZEJ5VXVpZChlcShVVUlELmZyb21TdHJpbmcoIjhhNWZiNWNhLWQyNmQtMTFlYS04N2QwLTAyNDJhYzEzMDAwMyIpKSkpLnRoZW5SZXR1cm4oT3B0aW9uYWwub2YodGJsU3RhdGlvbjIpKTsKKyAgICAgICAgd2hlbihzdGF0aW9uUmVwb3NpdG9yeS5maW5kQnlVdWlkKGVxKFVVSUQuZnJvbVN0cmluZygiYTEzNzVlYzgtZDI2ZS0xMWVhLTg3ZDAtMDI0MmFjMTMwMDAzIikpKSkudGhlblJldHVybihPcHRpb25hbC5vZih0YmxTdGF0aW9uMykpOwogICAgICAgICB3aGVuKGFkZHJlc3NSZXBvc2l0b3J5LmZpbmRCeVN0YXRpb25JZChhbnlTdHJpbmcoKSkpLnRoZW5SZXR1cm4oYWRkcmVzc0xpc3QpOwogCiAgICAgICAgIHdoZW4oZmFpbHVyZUluZm9ybWF0aW9uUmVwb3NpdG9yeS5zYXZlKGFueShUYmxGYWlsdXJlSW5mb3JtYXRpb24uY2xhc3MpKSkKQEAgLTQzOCw3ICs0NjIsOCBAQAogICAgICAgICB3aGVuKHN0YXR1c1JlcG9zaXRvcnkuZmluZEJ5SWQoYW55KExvbmcuY2xhc3MpKSkudGhlblJldHVybihPcHRpb25hbC5vZihyZWZTdGF0dXMpKTsKICAgICAgICAgd2hlbihyYWRpdXNSZXBvc2l0b3J5LmZpbmRCeVV1aWQoYW55KFVVSUQuY2xhc3MpKSkudGhlblJldHVybihPcHRpb25hbC5vZihyZWZSYWRpdXMpKTsKICAgICAgICAgd2hlbihzdGF0aW9uUmVwb3NpdG9yeS5maW5kQnlTdGF0aW9uSWQoYW55U3RyaW5nKCkpKS50aGVuUmV0dXJuKE9wdGlvbmFsLm9mKHRibFN0YXRpb24pKTsKLSAgICAgICAgd2hlbihzdGF0aW9uUmVwb3NpdG9yeS5maW5kQnlVdWlkKGFueShVVUlELmNsYXNzKSkpLnRoZW5SZXR1cm4oT3B0aW9uYWwub2YodGJsU3RhdGlvbikpOworICAgICAgICAvL3doZW4oc3RhdGlvblJlcG9zaXRvcnkuZmluZEJ5VXVpZChhbnkoVVVJRC5jbGFzcykpKS50aGVuUmV0dXJuKE9wdGlvbmFsLm9mKHRibFN0YXRpb24pKTsKKwogICAgICAgICB3aGVuKGFkZHJlc3NSZXBvc2l0b3J5LmZpbmRCeVN0YXRpb25JZChhbnlTdHJpbmcoKSkpLnRoZW5SZXR1cm4oYWRkcmVzc0xpc3QpOwogCiAgICAgICAgIC8vRXhwZWN0ZWRSZWFzb24gY2Fubm90IGJlIGZvdW5kCkBAIC00NTQsMTQgKzQ3OSwyMSBAQAogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCBzaG91bGRTdG9yZU5ld0ZhaWx1cmVJbmZvcm1hdGlvbigpIHsKLSAgICAgICAgRmFpbHVyZUluZm9ybWF0aW9uRHRvIGZpRHRvID0gTW9ja0RhdGFIZWxwZXIubW9ja0ZhaWx1cmVJbmZvcm1hdGlvbkR0bygpOwogICAgICAgICBUYmxGYWlsdXJlSW5mb3JtYXRpb24gZmlUYmwgPSBNb2NrRGF0YUhlbHBlci5tb2NrVGJsRmFpbHVyZUluZm9ybWF0aW9uKCk7CisgICAgICAgIEZhaWx1cmVJbmZvcm1hdGlvbkR0byBmaUR0byA9IE1vY2tEYXRhSGVscGVyLm1vY2tGYWlsdXJlSW5mb3JtYXRpb25EdG8oKTsKKyAgICAgICAgTGlzdDxVVUlEPiBzdGF0aW9uTGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBzdGF0aW9uTGlzdC5hZGQoVVVJRC5mcm9tU3RyaW5nKCI4YTVmYjVjYS1kMjZkLTExZWEtODdkMC0wMjQyYWMxMzAwMDMiKSk7CisgICAgICAgIHN0YXRpb25MaXN0LmFkZChVVUlELmZyb21TdHJpbmcoIjhhNWZiMmFhLWQyNmQtMTFlYS04N2QwLTAyNDJhYzEzMDAwMyIpKTsKKyAgICAgICAgc3RhdGlvbkxpc3QuYWRkKFVVSUQuZnJvbVN0cmluZygiYTEzNzVlYzgtZDI2ZS0xMWVhLTg3ZDAtMDI0MmFjMTMwMDAzIikpOworICAgICAgICBmaUR0by5zZXRTdGF0aW9uSWRzKHN0YXRpb25MaXN0KTsKICAgICAgICAgUmVmRmFpbHVyZUNsYXNzaWZpY2F0aW9uIHJlZkZhaWx1cmVDbGFzc2lmaWNhdGlvbiA9IE1vY2tEYXRhSGVscGVyLm1vY2tSZWZGYWlsdXJlQ2xhc3NpZmljYXRpb24oKTsKICAgICAgICAgUmVmU3RhdHVzIHJlZlN0YXR1cyA9IE1vY2tEYXRhSGVscGVyLm1vY2tSZWZTdGF0dXNDcmVhdGVkKCk7CiAgICAgICAgIFJlZkJyYW5jaCByZWZCcmFuY2ggPSBNb2NrRGF0YUhlbHBlci5tb2NrUmVmQnJhbmNoKCk7CiAgICAgICAgIFJlZlJhZGl1cyByZWZSYWRpdXMgPSBNb2NrRGF0YUhlbHBlci5tb2NrUmVmUmFkaXVzKCk7CiAgICAgICAgIFJlZkV4cGVjdGVkUmVhc29uIHJlZkV4cGVjdGVkUmVhc29uID0gTW9ja0RhdGFIZWxwZXIubW9ja1JlZkV4cGVjdGVkUmVhc29uKCk7CiAgICAgICAgIFRibFN0YXRpb24gdGJsU3RhdGlvbiA9IE1vY2tEYXRhSGVscGVyLm1vY2tUYmxTdGF0aW9uKCk7CisgICAgICAgIFRibFN0YXRpb24gdGJsU3RhdGlvbjIgPSBNb2NrRGF0YUhlbHBlci5tb2NrVGJsU3RhdGlvbjIoKTsKKyAgICAgICAgVGJsU3RhdGlvbiB0YmxTdGF0aW9uMyA9IE1vY2tEYXRhSGVscGVyLm1vY2tUYmxTdGF0aW9uMygpOwogICAgICAgICBUYmxEaXN0cmlidXRpb25Hcm91cCB0YmxEaXN0cmlidXRpb25Hcm91cCA9IE1vY2tEYXRhSGVscGVyLm1vY2tUYmxEaXN0cmlidXRpb25Hcm91cCgpOwogICAgICAgICBMaXN0PFRibEZhaWx1cmVJbmZvcm1hdGlvblB1YmxpY2F0aW9uQ2hhbm5lbD4gcHVibGljYXRpb25DaGFubmVsTGlzdCA9IE1vY2tEYXRhSGVscGVyLm1vY2tUYmxGYWlsdXJlSW5mb3JtYXRpb25QdWJsaWNhdGlvbkNoYW5uZWxMaXN0KCk7CiAKQEAgLTQ3Miw3ICs1MDQsOSBAQAogICAgICAgICB3aGVuKHN0YXR1c1JlcG9zaXRvcnkuZmluZEJ5VXVpZChhbnkoVVVJRC5jbGFzcykpKS50aGVuUmV0dXJuKE9wdGlvbmFsLm9mKHJlZlN0YXR1cykpOwogICAgICAgICB3aGVuKHJhZGl1c1JlcG9zaXRvcnkuZmluZEJ5VXVpZChhbnkoVVVJRC5jbGFzcykpKS50aGVuUmV0dXJuKE9wdGlvbmFsLm9mKHJlZlJhZGl1cykpOwogICAgICAgICB3aGVuKGV4cGVjdGVkUmVhc29uUmVwb3NpdG9yeS5maW5kQnlVdWlkKGFueShVVUlELmNsYXNzKSkpLnRoZW5SZXR1cm4oT3B0aW9uYWwub2YocmVmRXhwZWN0ZWRSZWFzb24pKTsKLSAgICAgICAgd2hlbihzdGF0aW9uUmVwb3NpdG9yeS5maW5kQnlVdWlkKGFueShVVUlELmNsYXNzKSkpLnRoZW5SZXR1cm4oT3B0aW9uYWwub2YodGJsU3RhdGlvbikpOworICAgICAgICB3aGVuKHN0YXRpb25SZXBvc2l0b3J5LmZpbmRCeVV1aWQoZXEoVVVJRC5mcm9tU3RyaW5nKCI4YTVmYjJhYS1kMjZkLTExZWEtODdkMC0wMjQyYWMxMzAwMDMiKSkpKS50aGVuUmV0dXJuKE9wdGlvbmFsLm9mKHRibFN0YXRpb24pKTsKKyAgICAgICAgd2hlbihzdGF0aW9uUmVwb3NpdG9yeS5maW5kQnlVdWlkKGVxKFVVSUQuZnJvbVN0cmluZygiOGE1ZmI1Y2EtZDI2ZC0xMWVhLTg3ZDAtMDI0MmFjMTMwMDAzIikpKSkudGhlblJldHVybihPcHRpb25hbC5vZih0YmxTdGF0aW9uMikpOworICAgICAgICB3aGVuKHN0YXRpb25SZXBvc2l0b3J5LmZpbmRCeVV1aWQoZXEoVVVJRC5mcm9tU3RyaW5nKCJhMTM3NWVjOC1kMjZlLTExZWEtODdkMC0wMjQyYWMxMzAwMDMiKSkpKS50aGVuUmV0dXJuKE9wdGlvbmFsLm9mKHRibFN0YXRpb24zKSk7CiAgICAgICAgIHdoZW4oZGlzdHJpYnV0aW9uR3JvdXBSZXBvc2l0b3J5LmZpbmRCeVV1aWQoYW55KFVVSUQuY2xhc3MpKSkudGhlblJldHVybihPcHRpb25hbC5vZih0YmxEaXN0cmlidXRpb25Hcm91cCkpOwogICAgICAgICB3aGVuKGZhaWx1cmVJbmZvcm1hdGlvblB1YmxpY2F0aW9uQ2hhbm5lbFJlcG9zaXRvcnkuZmluZEJ5VGJsRmFpbHVyZUluZm9ybWF0aW9uKGFueShUYmxGYWlsdXJlSW5mb3JtYXRpb24uY2xhc3MpKSkudGhlblJldHVybihwdWJsaWNhdGlvbkNoYW5uZWxMaXN0KTsKIApAQCAtNTIwLDYgKzU1NCwxMSBAQAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgc2hvdWxkSW5zZXJ0TmV3RmFpbHVyZUluZm9ybWF0aW9uKCkgewogICAgICAgICBGYWlsdXJlSW5mb3JtYXRpb25EdG8gZmlEdG8gPSBNb2NrRGF0YUhlbHBlci5tb2NrRmFpbHVyZUluZm9ybWF0aW9uRHRvKCk7CisgICAgICAgIExpc3Q8VVVJRD4gc3RhdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgc3RhdGlvbkxpc3QuYWRkKFVVSUQuZnJvbVN0cmluZygiOGE1ZmI1Y2EtZDI2ZC0xMWVhLTg3ZDAtMDI0MmFjMTMwMDAzIikpOworICAgICAgICBzdGF0aW9uTGlzdC5hZGQoVVVJRC5mcm9tU3RyaW5nKCI4YTVmYjJhYS1kMjZkLTExZWEtODdkMC0wMjQyYWMxMzAwMDMiKSk7CisgICAgICAgIHN0YXRpb25MaXN0LmFkZChVVUlELmZyb21TdHJpbmcoImExMzc1ZWM4LWQyNmUtMTFlYS04N2QwLTAyNDJhYzEzMDAwMyIpKTsKKyAgICAgICAgZmlEdG8uc2V0U3RhdGlvbklkcyhzdGF0aW9uTGlzdCk7CiAgICAgICAgIFRibEZhaWx1cmVJbmZvcm1hdGlvbiBmaVRibCA9IE1vY2tEYXRhSGVscGVyLm1vY2tUYmxGYWlsdXJlSW5mb3JtYXRpb24oKTsKICAgICAgICAgUmVmRmFpbHVyZUNsYXNzaWZpY2F0aW9uIHJlZkZhaWx1cmVDbGFzc2lmaWNhdGlvbiA9IE1vY2tEYXRhSGVscGVyLm1vY2tSZWZGYWlsdXJlQ2xhc3NpZmljYXRpb24oKTsKICAgICAgICAgUmVmU3RhdHVzIHJlZlN0YXR1cyA9IE1vY2tEYXRhSGVscGVyLm1vY2tSZWZTdGF0dXNDcmVhdGVkKCk7CkBAIC01MjcsNiArNTY2LDggQEAKICAgICAgICAgUmVmUmFkaXVzIHJlZlJhZGl1cyA9IE1vY2tEYXRhSGVscGVyLm1vY2tSZWZSYWRpdXMoKTsKICAgICAgICAgUmVmRXhwZWN0ZWRSZWFzb24gcmVmRXhwZWN0ZWRSZWFzb24gPSBNb2NrRGF0YUhlbHBlci5tb2NrUmVmRXhwZWN0ZWRSZWFzb24oKTsKICAgICAgICAgVGJsU3RhdGlvbiB0YmxTdGF0aW9uID0gTW9ja0RhdGFIZWxwZXIubW9ja1RibFN0YXRpb24oKTsKKyAgICAgICAgVGJsU3RhdGlvbiB0YmxTdGF0aW9uMiA9IE1vY2tEYXRhSGVscGVyLm1vY2tUYmxTdGF0aW9uMigpOworICAgICAgICBUYmxTdGF0aW9uIHRibFN0YXRpb24zID0gTW9ja0RhdGFIZWxwZXIubW9ja1RibFN0YXRpb24zKCk7CiAgICAgICAgIFRibERpc3RyaWJ1dGlvbkdyb3VwIHRibERpc3RyaWJ1dGlvbkdyb3VwID0gTW9ja0RhdGFIZWxwZXIubW9ja1RibERpc3RyaWJ1dGlvbkdyb3VwKCk7CiAgICAgICAgIExpc3Q8VGJsRmFpbHVyZUluZm9ybWF0aW9uUHVibGljYXRpb25DaGFubmVsPiBwdWJsaWNhdGlvbkNoYW5uZWxMaXN0ID0gTW9ja0RhdGFIZWxwZXIubW9ja1RibEZhaWx1cmVJbmZvcm1hdGlvblB1YmxpY2F0aW9uQ2hhbm5lbExpc3QoKTsKIApAQCAtNTM3LDcgKzU3OCw5IEBACiAgICAgICAgIHdoZW4oc3RhdHVzUmVwb3NpdG9yeS5maW5kQnlVdWlkKGFueShVVUlELmNsYXNzKSkpLnRoZW5SZXR1cm4oT3B0aW9uYWwub2YocmVmU3RhdHVzKSk7CiAgICAgICAgIHdoZW4ocmFkaXVzUmVwb3NpdG9yeS5maW5kQnlVdWlkKGFueShVVUlELmNsYXNzKSkpLnRoZW5SZXR1cm4oT3B0aW9uYWwub2YocmVmUmFkaXVzKSk7CiAgICAgICAgIHdoZW4oZXhwZWN0ZWRSZWFzb25SZXBvc2l0b3J5LmZpbmRCeVV1aWQoYW55KFVVSUQuY2xhc3MpKSkudGhlblJldHVybihPcHRpb25hbC5vZihyZWZFeHBlY3RlZFJlYXNvbikpOwotICAgICAgICB3aGVuKHN0YXRpb25SZXBvc2l0b3J5LmZpbmRCeVV1aWQoYW55KFVVSUQuY2xhc3MpKSkudGhlblJldHVybihPcHRpb25hbC5vZih0YmxTdGF0aW9uKSk7CisgICAgICAgIHdoZW4oc3RhdGlvblJlcG9zaXRvcnkuZmluZEJ5VXVpZChlcShVVUlELmZyb21TdHJpbmcoIjhhNWZiMmFhLWQyNmQtMTFlYS04N2QwLTAyNDJhYzEzMDAwMyIpKSkpLnRoZW5SZXR1cm4oT3B0aW9uYWwub2YodGJsU3RhdGlvbikpOworICAgICAgICB3aGVuKHN0YXRpb25SZXBvc2l0b3J5LmZpbmRCeVV1aWQoZXEoVVVJRC5mcm9tU3RyaW5nKCI4YTVmYjVjYS1kMjZkLTExZWEtODdkMC0wMjQyYWMxMzAwMDMiKSkpKS50aGVuUmV0dXJuKE9wdGlvbmFsLm9mKHRibFN0YXRpb24yKSk7CisgICAgICAgIHdoZW4oc3RhdGlvblJlcG9zaXRvcnkuZmluZEJ5VXVpZChlcShVVUlELmZyb21TdHJpbmcoImExMzc1ZWM4LWQyNmUtMTFlYS04N2QwLTAyNDJhYzEzMDAwMyIpKSkpLnRoZW5SZXR1cm4oT3B0aW9uYWwub2YodGJsU3RhdGlvbjMpKTsKICAgICAgICAgd2hlbihkaXN0cmlidXRpb25Hcm91cFJlcG9zaXRvcnkuZmluZEJ5VXVpZChhbnkoVVVJRC5jbGFzcykpKS50aGVuUmV0dXJuKE9wdGlvbmFsLm9mKHRibERpc3RyaWJ1dGlvbkdyb3VwKSk7CiAgICAgICAgIHdoZW4oZmFpbHVyZUluZm9ybWF0aW9uUHVibGljYXRpb25DaGFubmVsUmVwb3NpdG9yeS5maW5kQnlUYmxGYWlsdXJlSW5mb3JtYXRpb24oYW55KFRibEZhaWx1cmVJbmZvcm1hdGlvbi5jbGFzcykpKS50aGVuUmV0dXJuKHB1YmxpY2F0aW9uQ2hhbm5lbExpc3QpOwogCkBAIC04NzIsNiArOTE1LDExIEBACiAKICAgICAgICAgUmVmU3RhdHVzIHN0YXR1c1F1YWxpZmllZCA9ICBNb2NrRGF0YUhlbHBlci5tb2NrUmVmU3RhdHVzUVVBTElGSUVEKCk7CiAgICAgICAgIEZhaWx1cmVJbmZvcm1hdGlvbkR0byBkdG8gPSBNb2NrRGF0YUhlbHBlci5tb2NrRmFpbHVyZUluZm9ybWF0aW9uRHRvKCk7CisgICAgICAgIExpc3Q8VVVJRD4gc3RhdGlvbkxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgc3RhdGlvbkxpc3QuYWRkKFVVSUQuZnJvbVN0cmluZygiOGE1ZmI1Y2EtZDI2ZC0xMWVhLTg3ZDAtMDI0MmFjMTMwMDAzIikpOworICAgICAgICBzdGF0aW9uTGlzdC5hZGQoVVVJRC5mcm9tU3RyaW5nKCI4YTVmYjJhYS1kMjZkLTExZWEtODdkMC0wMjQyYWMxMzAwMDMiKSk7CisgICAgICAgIHN0YXRpb25MaXN0LmFkZChVVUlELmZyb21TdHJpbmcoImExMzc1ZWM4LWQyNmUtMTFlYS04N2QwLTAyNDJhYzEzMDAwMyIpKTsKKyAgICAgICAgZHRvLnNldFN0YXRpb25JZHMoc3RhdGlvbkxpc3QpOwogICAgICAgICBkdG8uc2V0Vm9sdGFnZUxldmVsKENvbnN0YW50cy5WT0xUQUdFX0xFVkVMX0hTKTsKICAgICAgICAgZHRvLnNldFN0YXR1c0V4dGVybihudWxsKTsKICAgICAgICAgVGJsRmFpbHVyZUluZm9ybWF0aW9uIHRibEZhaWx1cmVJbmZvcm1hdGlvbiA9IE1vY2tEYXRhSGVscGVyLm1vY2tUYmxGYWlsdXJlSW5mb3JtYXRpb24oKTsKQEAgLTg4Myw2ICs5MzEsOCBAQAogICAgICAgICBSZWZFeHBlY3RlZFJlYXNvbiByZWZFeHBlY3RlZFJlYXNvbiA9IE1vY2tEYXRhSGVscGVyLm1vY2tSZWZFeHBlY3RlZFJlYXNvbigpOwogICAgICAgICBUYmxEaXN0cmlidXRpb25Hcm91cCB0YmxEaXN0cmlidXRpb25Hcm91cCA9IE1vY2tEYXRhSGVscGVyLm1vY2tUYmxEaXN0cmlidXRpb25Hcm91cCgpOwogICAgICAgICBUYmxTdGF0aW9uIHRibFN0YXRpb24gPSBNb2NrRGF0YUhlbHBlci5tb2NrVGJsU3RhdGlvbigpOworICAgICAgICBUYmxTdGF0aW9uIHRibFN0YXRpb24yID0gTW9ja0RhdGFIZWxwZXIubW9ja1RibFN0YXRpb24yKCk7CisgICAgICAgIFRibFN0YXRpb24gdGJsU3RhdGlvbjMgPSBNb2NrRGF0YUhlbHBlci5tb2NrVGJsU3RhdGlvbjMoKTsKICAgICAgICAgTGlzdDxUYmxGYWlsdXJlSW5mb3JtYXRpb25QdWJsaWNhdGlvbkNoYW5uZWw+IHB1YkNoYW5uZWxMaXN0ID0gTW9ja0RhdGFIZWxwZXIubW9ja1RibEZhaWx1cmVJbmZvcm1hdGlvblB1YmxpY2F0aW9uQ2hhbm5lbExpc3QoKTsKIAogICAgICAgICBkdG8uc2V0U3RhdHVzSW50ZXJuSWQoc3RhdHVzUXVhbGlmaWVkLmdldFV1aWQoKSk7CkBAIC04OTcsNyArOTQ3LDkgQEAKICAgICAgICAgd2hlbihyYWRpdXNSZXBvc2l0b3J5LmZpbmRCeVV1aWQoYW55KFVVSUQuY2xhc3MpKSkudGhlblJldHVybihPcHRpb25hbC5vZihyZWZSYWRpdXMpKTsKICAgICAgICAgd2hlbihleHBlY3RlZFJlYXNvblJlcG9zaXRvcnkuZmluZEJ5VXVpZChhbnkoVVVJRC5jbGFzcykpKS50aGVuUmV0dXJuKE9wdGlvbmFsLm9mKHJlZkV4cGVjdGVkUmVhc29uKSk7CiAgICAgICAgIHdoZW4oZGlzdHJpYnV0aW9uR3JvdXBSZXBvc2l0b3J5LmZpbmRCeVV1aWQoYW55KFVVSUQuY2xhc3MpKSkudGhlblJldHVybihPcHRpb25hbC5vZih0YmxEaXN0cmlidXRpb25Hcm91cCkpOwotICAgICAgICB3aGVuKHN0YXRpb25SZXBvc2l0b3J5LmZpbmRCeVV1aWQoYW55KFVVSUQuY2xhc3MpKSkudGhlblJldHVybihPcHRpb25hbC5vZih0YmxTdGF0aW9uKSk7CisgICAgICAgIHdoZW4oc3RhdGlvblJlcG9zaXRvcnkuZmluZEJ5VXVpZChlcShVVUlELmZyb21TdHJpbmcoIjhhNWZiMmFhLWQyNmQtMTFlYS04N2QwLTAyNDJhYzEzMDAwMyIpKSkpLnRoZW5SZXR1cm4oT3B0aW9uYWwub2YodGJsU3RhdGlvbikpOworICAgICAgICB3aGVuKHN0YXRpb25SZXBvc2l0b3J5LmZpbmRCeVV1aWQoZXEoVVVJRC5mcm9tU3RyaW5nKCI4YTVmYjVjYS1kMjZkLTExZWEtODdkMC0wMjQyYWMxMzAwMDMiKSkpKS50aGVuUmV0dXJuKE9wdGlvbmFsLm9mKHRibFN0YXRpb24yKSk7CisgICAgICAgIHdoZW4oc3RhdGlvblJlcG9zaXRvcnkuZmluZEJ5VXVpZChlcShVVUlELmZyb21TdHJpbmcoImExMzc1ZWM4LWQyNmUtMTFlYS04N2QwLTAyNDJhYzEzMDAwMyIpKSkpLnRoZW5SZXR1cm4oT3B0aW9uYWwub2YodGJsU3RhdGlvbjMpKTsKICAgICAgICAgd2hlbihmYWlsdXJlSW5mb3JtYXRpb25QdWJsaWNhdGlvbkNoYW5uZWxSZXBvc2l0b3J5LmZpbmRCeVRibEZhaWx1cmVJbmZvcm1hdGlvbihhbnkoVGJsRmFpbHVyZUluZm9ybWF0aW9uLmNsYXNzKSkpLnRoZW5SZXR1cm4ocHViQ2hhbm5lbExpc3QpOwogICAgICAgICB3aGVuKGZhaWx1cmVJbmZvcm1hdGlvblJlcG9zaXRvcnkuc2F2ZShhbnkoVGJsRmFpbHVyZUluZm9ybWF0aW9uLmNsYXNzKSkpLnRoZW5SZXR1cm4odGJsRmFpbHVyZUluZm9ybWF0aW9uKTsKIApkaWZmIC0tZ2l0IGEvZ2ZzQmFja2VuZFNlcnZpY2Uvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3N1cHBvcnQvTW9ja0RhdGFIZWxwZXIuamF2YSBiL2dmc0JhY2tlbmRTZXJ2aWNlL3NyYy90ZXN0L2phdmEvb3JnL2VjbGlwc2Uvb3BlbmsvZ3JpZGZhaWx1cmVpbmZvcm1hdGlvbi9zdXBwb3J0L01vY2tEYXRhSGVscGVyLmphdmEKaW5kZXggNzFmZmU3NC4uN2MzNmFjMyAxMDA2NDQKLS0tIGEvZ2ZzQmFja2VuZFNlcnZpY2Uvc3JjL3Rlc3QvamF2YS9vcmcvZWNsaXBzZS9vcGVuay9ncmlkZmFpbHVyZWluZm9ybWF0aW9uL3N1cHBvcnQvTW9ja0RhdGFIZWxwZXIuamF2YQorKysgYi9nZnNCYWNrZW5kU2VydmljZS9zcmMvdGVzdC9qYXZhL29yZy9lY2xpcHNlL29wZW5rL2dyaWRmYWlsdXJlaW5mb3JtYXRpb24vc3VwcG9ydC9Nb2NrRGF0YUhlbHBlci5qYXZhCkBAIC05NTksNiArOTU5LDIyIEBACiAgICAgICAgIHJldHVybiB0YmxTdGF0aW9uOwogICAgIH0KIAorICAgIHB1YmxpYyBzdGF0aWMgVGJsU3RhdGlvbiBtb2NrVGJsU3RhdGlvbjMoKXsKKworICAgICAgICBUYmxTdGF0aW9uIHRibFN0YXRpb24gPSBuZXcgVGJsU3RhdGlvbigpOworICAgICAgICB0YmxTdGF0aW9uLnNldElkKDMyMzIzMkwpOworICAgICAgICB0YmxTdGF0aW9uLnNldFV1aWQoVVVJRC5yYW5kb21VVUlEKCkpOworICAgICAgICB0YmxTdGF0aW9uLnNldFNkb3gxKG5ldyBCaWdEZWNpbWFsKDQ0LjExMSkpOworICAgICAgICB0YmxTdGF0aW9uLnNldFNkb3kxKG5ldyBCaWdEZWNpbWFsKDkuNzc3KSk7CisgICAgICAgIHRibFN0YXRpb24uc2V0RzNlZmlkKDM0NTZMKTsKKyAgICAgICAgdGJsU3RhdGlvbi5zZXRTdGF0aW9uSWQoIjQ2NDY0NiIpOworICAgICAgICB0YmxTdGF0aW9uLnNldFN0YXRpb25OYW1lKCJNaXR0bGVyZSBTdHJhc3NlIDU4Iik7CisgICAgICAgIHRibFN0YXRpb24uc2V0TG9uZ2l0dWRlKG5ldyBCaWdEZWNpbWFsKDQ4Ljk4NzQ0NCkpOworICAgICAgICB0YmxTdGF0aW9uLnNldExhdGl0dWRlKG5ldyBCaWdEZWNpbWFsKDEyLjEyMTIxMikpOworCisgICAgICAgIHJldHVybiB0YmxTdGF0aW9uOworICAgIH0KKwogICAgIHB1YmxpYyBzdGF0aWMgTGlzdDxUYmxTdGF0aW9uPiBtb2NrVGJsU3RhdGlvbkxpc3QoKXsKIAogICAgICAgICBMaXN0PFRibFN0YXRpb24+IHN0YXRpb25MaXN0ID0gbmV3IExpbmtlZExpc3QoKTsK