[mb-commits] r13715 - in search_server/trunk: index/src/main/java/org/musicbrainz/search/index index/src/test/java/org/musicbrainz/search/index servlet/src/main/java/org/musicbrainz/search/servlet/mmd2 servlet/src/test/java/org/musicbrainz/search/servlet
[email protected] Wed, 02 Oct 2013 13:01:59 +0000
| Newsgroups | gmane.comp.audio.musicbrainz.cvs |
|---|---|
| Message-ID | <E1VRM3z-0003bG-Ef@wiley> |
QXV0aG9yOiBpamFiegpEYXRlOiAyMDEzLTEwLTAyIDEzOjAxOjU5ICswMDAwIChXZWQsIDAyIE9j dCAyMDEzKQpOZXcgUmV2aXNpb246IDEzNzE1CgpNb2RpZmllZDoKICAgc2VhcmNoX3NlcnZlci90 cnVuay9pbmRleC9zcmMvbWFpbi9qYXZhL29yZy9tdXNpY2JyYWluei9zZWFyY2gvaW5kZXgvQXJ0 aXN0SW5kZXguamF2YQogICBzZWFyY2hfc2VydmVyL3RydW5rL2luZGV4L3NyYy9tYWluL2phdmEv b3JnL211c2ljYnJhaW56L3NlYXJjaC9pbmRleC9MYWJlbEluZGV4LmphdmEKICAgc2VhcmNoX3Nl cnZlci90cnVuay9pbmRleC9zcmMvbWFpbi9qYXZhL29yZy9tdXNpY2JyYWluei9zZWFyY2gvaW5k ZXgvV29ya0luZGV4LmphdmEKICAgc2VhcmNoX3NlcnZlci90cnVuay9pbmRleC9zcmMvbWFpbi9q YXZhL29yZy9tdXNpY2JyYWluei9zZWFyY2gvaW5kZXgvV29ya0luZGV4RmllbGQuamF2YQogICBz ZWFyY2hfc2VydmVyL3RydW5rL2luZGV4L3NyYy90ZXN0L2phdmEvb3JnL211c2ljYnJhaW56L3Nl YXJjaC9pbmRleC9BYnN0cmFjdEluZGV4VGVzdC5qYXZhCiAgIHNlYXJjaF9zZXJ2ZXIvdHJ1bmsv aW5kZXgvc3JjL3Rlc3QvamF2YS9vcmcvbXVzaWNicmFpbnovc2VhcmNoL2luZGV4L1dvcmtJbmRl eFRlc3QuamF2YQogICBzZWFyY2hfc2VydmVyL3RydW5rL3NlcnZsZXQvc3JjL21haW4vamF2YS9v cmcvbXVzaWNicmFpbnovc2VhcmNoL3NlcnZsZXQvbW1kMi9Xb3JrV3JpdGVyLmphdmEKICAgc2Vh cmNoX3NlcnZlci90cnVuay9zZXJ2bGV0L3NyYy90ZXN0L2phdmEvb3JnL211c2ljYnJhaW56L3Nl YXJjaC9zZXJ2bGV0L0ZpbmRXb3JrVGVzdC5qYXZhCkxvZzoKU0VBUkNILTI4ODogSW5jbHVkZSBh bGlhcyBzb3J0bmFtZXMgd2hlbiBzZWFyY2hpbmcgd29ya3MKCk1vZGlmaWVkOiBzZWFyY2hfc2Vy dmVyL3RydW5rL2luZGV4L3NyYy9tYWluL2phdmEvb3JnL211c2ljYnJhaW56L3NlYXJjaC9pbmRl eC9BcnRpc3RJbmRleC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlYXJjaF9zZXJ2ZXIvdHJ1bmsvaW5k ZXgvc3JjL21haW4vamF2YS9vcmcvbXVzaWNicmFpbnovc2VhcmNoL2luZGV4L0FydGlzdEluZGV4 LmphdmEJMjAxMy0xMC0wMiAxMTo0MjoxNSBVVEMgKHJldiAxMzcxNCkKKysrIHNlYXJjaF9zZXJ2 ZXIvdHJ1bmsvaW5kZXgvc3JjL21haW4vamF2YS9vcmcvbXVzaWNicmFpbnovc2VhcmNoL2luZGV4 L0FydGlzdEluZGV4LmphdmEJMjAxMy0xMC0wMiAxMzowMTo1OSBVVEMgKHJldiAxMzcxNSkKQEAg LTM4Nyw4ICszODcsMTAgQEAKICAgICAgICAgICAgIEFsaWFzTGlzdCBhbGlhc0xpc3QgPSBvZi5j cmVhdGVBbGlhc0xpc3QoKTsKICAgICAgICAgICAgIGZvciAoQWxpYXMgbmV4dEFsaWFzIDogYWxp YXNlcy5nZXQoYXJ0aXN0SWQpKSB7CiAgICAgICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlz dEluZGV4RmllbGQuQUxJQVMsIG5leHRBbGlhcy5nZXRDb250ZW50KCkpOwotICAgICAgICAgICAg ICAgIGlmKCFuZXh0QWxpYXMuZ2V0U29ydE5hbWUoKS5lcXVhbHMobmV4dEFsaWFzLmdldENvbnRl bnQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgZG9jLmFkZEZpZWxkKEFydGlzdEluZGV4Rmll bGQuQUxJQVMsIG5leHRBbGlhcy5nZXRTb3J0TmFtZSgpKTsKKyAgICAgICAgICAgICAgICBpZigh U3RyaW5ncy5pc051bGxPckVtcHR5KG5leHRBbGlhcy5nZXRTb3J0TmFtZSgpKSkgeworICAgICAg ICAgICAgICAgICAgICBpZighbmV4dEFsaWFzLmdldFNvcnROYW1lKCkuZXF1YWxzKG5leHRBbGlh cy5nZXRDb250ZW50KCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkb2MuYWRkRmllbGQo QXJ0aXN0SW5kZXhGaWVsZC5BTElBUywgbmV4dEFsaWFzLmdldFNvcnROYW1lKCkpOworICAgICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGFsaWFz TGlzdC5nZXRBbGlhcygpLmFkZChuZXh0QWxpYXMpOwogICAgICAgICAgICAgfQoKTW9kaWZpZWQ6 IHNlYXJjaF9zZXJ2ZXIvdHJ1bmsvaW5kZXgvc3JjL21haW4vamF2YS9vcmcvbXVzaWNicmFpbnov c2VhcmNoL2luZGV4L0xhYmVsSW5kZXguamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzZWFyY2hfc2VydmVy L3RydW5rL2luZGV4L3NyYy9tYWluL2phdmEvb3JnL211c2ljYnJhaW56L3NlYXJjaC9pbmRleC9M YWJlbEluZGV4LmphdmEJMjAxMy0xMC0wMiAxMTo0MjoxNSBVVEMgKHJldiAxMzcxNCkKKysrIHNl YXJjaF9zZXJ2ZXIvdHJ1bmsvaW5kZXgvc3JjL21haW4vamF2YS9vcmcvbXVzaWNicmFpbnovc2Vh cmNoL2luZGV4L0xhYmVsSW5kZXguamF2YQkyMDEzLTEwLTAyIDEzOjAxOjU5IFVUQyAocmV2IDEz NzE1KQpAQCAtMzE2LDggKzMxNiwxMCBAQAogICAgICAgICAgICAgQWxpYXNMaXN0IGFsaWFzTGlz dCA9IG9mLmNyZWF0ZUFsaWFzTGlzdCgpOwogICAgICAgICAgICAgZm9yIChBbGlhcyBuZXh0QWxp YXMgOiBhbGlhc2VzLmdldChsYWJlbElkKSkgewogICAgICAgICAgICAgICAgIGRvYy5hZGRGaWVs ZChMYWJlbEluZGV4RmllbGQuQUxJQVMsIG5leHRBbGlhcy5nZXRDb250ZW50KCkpOwotICAgICAg ICAgICAgICAgIGlmKCFuZXh0QWxpYXMuZ2V0U29ydE5hbWUoKS5lcXVhbHMobmV4dEFsaWFzLmdl dENvbnRlbnQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgZG9jLmFkZEZpZWxkKExhYmVsSW5k ZXhGaWVsZC5BTElBUywgbmV4dEFsaWFzLmdldFNvcnROYW1lKCkpOworICAgICAgICAgICAgICAg IGlmKCFTdHJpbmdzLmlzTnVsbE9yRW1wdHkobmV4dEFsaWFzLmdldFNvcnROYW1lKCkpKSB7Cisg ICAgICAgICAgICAgICAgICAgIGlmKCFuZXh0QWxpYXMuZ2V0U29ydE5hbWUoKS5lcXVhbHMobmV4 dEFsaWFzLmdldENvbnRlbnQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvYy5hZGRG aWVsZChMYWJlbEluZGV4RmllbGQuQUxJQVMsIG5leHRBbGlhcy5nZXRTb3J0TmFtZSgpKTsKKyAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBh bGlhc0xpc3QuZ2V0QWxpYXMoKS5hZGQobmV4dEFsaWFzKTsKICAgICAgICAgICAgIH0KCk1vZGlm aWVkOiBzZWFyY2hfc2VydmVyL3RydW5rL2luZGV4L3NyYy9tYWluL2phdmEvb3JnL211c2ljYnJh aW56L3NlYXJjaC9pbmRleC9Xb3JrSW5kZXguamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzZWFyY2hfc2Vy dmVyL3RydW5rL2luZGV4L3NyYy9tYWluL2phdmEvb3JnL211c2ljYnJhaW56L3NlYXJjaC9pbmRl eC9Xb3JrSW5kZXguamF2YQkyMDEzLTEwLTAyIDExOjQyOjE1IFVUQyAocmV2IDEzNzE0KQorKysg c2VhcmNoX3NlcnZlci90cnVuay9pbmRleC9zcmMvbWFpbi9qYXZhL29yZy9tdXNpY2JyYWluei9z ZWFyY2gvaW5kZXgvV29ya0luZGV4LmphdmEJMjAxMy0xMC0wMiAxMzowMTo1OSBVVEMgKHJldiAx MzcxNSkKQEAgLTE5LDYgKzE5LDcgQEAKIAogcGFja2FnZSBvcmcubXVzaWNicmFpbnouc2VhcmNo LmluZGV4OwogCitpbXBvcnQgY29tLmdvb2dsZS5jb21tb24uYmFzZS5TdHJpbmdzOwogaW1wb3J0 IG9yZy5hcGFjaGUubHVjZW5lLmFuYWx5c2lzLkFuYWx5emVyOwogaW1wb3J0IG9yZy5hcGFjaGUu bHVjZW5lLmRvY3VtZW50LkRvY3VtZW50OwogaW1wb3J0IG9yZy5hcGFjaGUubHVjZW5lLmluZGV4 LkluZGV4V3JpdGVyOwpAQCAtMjYsMTEgKzI3LDkgQEAKIGltcG9ydCBvcmcubXVzaWNicmFpbnou c2VhcmNoLk1iRG9jdW1lbnQ7CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0 IGphdmEubWF0aC5CaWdJbnRlZ2VyOwogaW1wb3J0IGphdmEuc3FsLio7Ci1pbXBvcnQgamF2YS51 dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51 dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuKjsKIAog CiBwdWJsaWMgY2xhc3MgV29ya0luZGV4IGV4dGVuZHMgRGF0YWJhc2VJbmRleCB7CkBAIC05NSw5 ICs5NCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIiBPUkRFUiBCWSBhdy5pZCIpOwog CiAgICAgICAgIGFkZFByZXBhcmVkU3RhdGVtZW50KCJBTElBU0VTIiwKLSAgICAgICAgICAgICAg ICAiU0VMRUNUIHdvcmtfYWxpYXMud29yayBhcyB3b3JrLCB3b3JrX2FsaWFzLm5hbWUgYXMgYWxp YXMgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAiIEZST00gd29ya19hbGlhcyAiICsKLSAg ICAgICAgICAgICAgICAgICAgICAgICIgV0hFUkUgd29yayBCRVRXRUVOID8gQU5EID8iKTsKKyAg ICAgICAgICAgICAgICAiU0VMRUNUIGEud29yayBhcyB3b3JrLCBhLm5hbWUgYXMgYWxpYXMsIGEu c29ydF9uYW1lIGFzIGFsaWFzX3NvcnRuYW1lLCBhLnByaW1hcnlfZm9yX2xvY2FsZSwgYS5sb2Nh bGUsIGF0dC5uYW1lIGFzIHR5cGUsIiArCisgICAgICAgICAgICAgICAgICAgICAgICAiYS5iZWdp bl9kYXRlX3llYXIsIGEuYmVnaW5fZGF0ZV9tb250aCwgYS5iZWdpbl9kYXRlX2RheSwgYS5lbmRf ZGF0ZV95ZWFyLCBhLmVuZF9kYXRlX21vbnRoLCBhLmVuZF9kYXRlX2RheSIgKworICAgICAgICAg ICAgICAgICAgICAgICAgIiBGUk9NIHdvcmtfYWxpYXMgYSIgKworICAgICAgICAgICAgICAgICAg ICAgICAgIiAgTEVGVCBKT0lOIHdvcmtfYWxpYXNfdHlwZSBhdHQgb24gKGEudHlwZT1hdHQuaWQp IiArCisgICAgICAgICAgICAgICAgICAgICAgICAiIFdIRVJFIHdvcmsgQkVUV0VFTiA/IEFORCA/ IiArCisgICAgICAgICAgICAgICAgICAgICAgICAiIE9SREVSIEJZIHdvcmssIGFsaWFzLCBhbGlh c19zb3J0bmFtZSIpOwogCiAgICAgICAgIGFkZFByZXBhcmVkU3RhdGVtZW50KCJJU1dDUyIsCiAg ICAgICAgICAgICAgICAgIlNFTEVDVCB3b3JrLCBpc3djIiArCkBAIC0yMTIsMjMgKzIxNCw1MiBA QAogICAgICAqIEB0aHJvd3MgU1FMRXhjZXB0aW9uCiAgICAgICogQHRocm93cyBJT0V4Y2VwdGlv bgogICAgICAqLwotICAgIHByaXZhdGUgTWFwPEludGVnZXIsIExpc3Q8U3RyaW5nPj4gbG9hZEFs aWFzZXMoaW50IG1pbiwgaW50IG1heCkgdGhyb3dzIFNRTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24g ewotICAgICAgICBNYXA8SW50ZWdlciwgTGlzdDxTdHJpbmc+PiBhbGlhc2VzID0gbmV3IEhhc2hN YXA8SW50ZWdlciwgTGlzdDxTdHJpbmc+PigpOworICAgIHByaXZhdGUgIE1hcDxJbnRlZ2VyLCBT ZXQ8QWxpYXM+PiBsb2FkQWxpYXNlcyhpbnQgbWluLCBpbnQgbWF4KSB0aHJvd3MgU1FMRXhjZXB0 aW9uLCBJT0V4Y2VwdGlvbiB7CisKKyAgICAgICAgT2JqZWN0RmFjdG9yeSBvZiA9IG5ldyBPYmpl Y3RGYWN0b3J5KCk7CisKKyAgICAgICAgLy8gR2V0IGxhYmVscyBhbGlhc2VzCisgICAgICAgIC8v QWxpYXNlcworICAgICAgICBNYXA8SW50ZWdlciwgU2V0PEFsaWFzPj4gYWxpYXNlcyA9IG5ldyBI YXNoTWFwPEludGVnZXIsIFNldDxBbGlhcz4+KCk7CiAgICAgICAgIFByZXBhcmVkU3RhdGVtZW50 IHN0ID0gZ2V0UHJlcGFyZWRTdGF0ZW1lbnQoIkFMSUFTRVMiKTsKICAgICAgICAgc3Quc2V0SW50 KDEsIG1pbik7CiAgICAgICAgIHN0LnNldEludCgyLCBtYXgpOwogICAgICAgICBSZXN1bHRTZXQg cnMgPSBzdC5leGVjdXRlUXVlcnkoKTsKICAgICAgICAgd2hpbGUgKHJzLm5leHQoKSkgewotICAg ICAgICAgICAgaW50IHdvcmtJZCA9IHJzLmdldEludCgid29yayIpOwotCi0gICAgICAgICAgICBM aXN0PFN0cmluZz4gbGlzdDsKLSAgICAgICAgICAgIGlmICghYWxpYXNlcy5jb250YWluc0tleSh3 b3JrSWQpKSB7Ci0gICAgICAgICAgICAgICAgbGlzdCA9IG5ldyBMaW5rZWRMaXN0PFN0cmluZz4o KTsKLSAgICAgICAgICAgICAgICBhbGlhc2VzLnB1dCh3b3JrSWQsIGxpc3QpOworICAgICAgICAg ICAgaW50IGFydGlzdElkID0gcnMuZ2V0SW50KCJ3b3JrIik7CisgICAgICAgICAgICBTZXQ8QWxp YXM+IGxpc3Q7CisgICAgICAgICAgICBpZiAoIWFsaWFzZXMuY29udGFpbnNLZXkoYXJ0aXN0SWQp KSB7CisgICAgICAgICAgICAgICAgbGlzdCA9IG5ldyBMaW5rZWRIYXNoU2V0PEFsaWFzPigpOwor ICAgICAgICAgICAgICAgIGFsaWFzZXMucHV0KGFydGlzdElkLCBsaXN0KTsKICAgICAgICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbGlzdCA9IGFsaWFzZXMuZ2V0KHdvcmtJZCk7Cisg ICAgICAgICAgICAgICAgbGlzdCA9IGFsaWFzZXMuZ2V0KGFydGlzdElkKTsKICAgICAgICAgICAg IH0KLSAgICAgICAgICAgIGxpc3QuYWRkKHJzLmdldFN0cmluZygiYWxpYXMiKSk7CisgICAgICAg ICAgICBBbGlhcyBhbGlhcyA9IG9mLmNyZWF0ZUFsaWFzKCk7CisgICAgICAgICAgICBhbGlhcy5z ZXRDb250ZW50KHJzLmdldFN0cmluZygiYWxpYXMiKSk7CisgICAgICAgICAgICBhbGlhcy5zZXRT b3J0TmFtZShycy5nZXRTdHJpbmcoImFsaWFzX3NvcnRuYW1lIikpOworICAgICAgICAgICAgYm9v bGVhbiBpc1ByaW1hcnkgPSBycy5nZXRCb29sZWFuKCJwcmltYXJ5X2Zvcl9sb2NhbGUiKTsKKyAg ICAgICAgICAgIGlmKGlzUHJpbWFyeSkgeworICAgICAgICAgICAgICAgIGFsaWFzLnNldFByaW1h cnkoInByaW1hcnkiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFN0cmluZyBsb2NhbGUg PSBycy5nZXRTdHJpbmcoImxvY2FsZSIpOworICAgICAgICAgICAgaWYobG9jYWxlIT1udWxsKSB7 CisgICAgICAgICAgICAgICAgYWxpYXMuc2V0TG9jYWxlKGxvY2FsZSk7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBTdHJpbmcgdHlwZSA9IHJzLmdldFN0cmluZygidHlwZSIpOworICAgICAg ICAgICAgaWYodHlwZSE9bnVsbCkgeworICAgICAgICAgICAgICAgIGFsaWFzLnNldFR5cGUodHlw ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFN0cmluZyBiZWdpbiA9IFV0aWxzLmZv cm1hdERhdGUocnMuZ2V0SW50KCJiZWdpbl9kYXRlX3llYXIiKSwgcnMuZ2V0SW50KCJiZWdpbl9k YXRlX21vbnRoIiksIHJzLmdldEludCgiYmVnaW5fZGF0ZV9kYXkiKSk7CisgICAgICAgICAgICBp ZighU3RyaW5ncy5pc051bGxPckVtcHR5KGJlZ2luKSkgIHsKKyAgICAgICAgICAgICAgICBhbGlh cy5zZXRCZWdpbkRhdGUoYmVnaW4pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTdHJp bmcgZW5kID0gVXRpbHMuZm9ybWF0RGF0ZShycy5nZXRJbnQoImVuZF9kYXRlX3llYXIiKSwgcnMu Z2V0SW50KCJlbmRfZGF0ZV9tb250aCIpLCBycy5nZXRJbnQoImVuZF9kYXRlX2RheSIpKTsKKyAg ICAgICAgICAgIGlmKCFTdHJpbmdzLmlzTnVsbE9yRW1wdHkoZW5kKSkgIHsKKyAgICAgICAgICAg ICAgICBhbGlhcy5zZXRFbmREYXRlKGVuZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBs aXN0LmFkZChhbGlhcyk7CiAgICAgICAgIH0KICAgICAgICAgcnMuY2xvc2UoKTsKICAgICAgICAg cmV0dXJuIGFsaWFzZXM7CkBAIC0yNzcsNyArMzA4LDcgQEAKIAogICAgICAgICBNYXA8SW50ZWdl ciwgTGlzdDxUYWc+PiAgICB0YWdzICAgICAgICAgICAgID0gbG9hZFRhZ3MobWluLCBtYXgpOwog ICAgICAgICBNYXA8SW50ZWdlciwgUmVsYXRpb25MaXN0PiBhcnRpc3RSZWxhdGlvbnMgID0gbG9h ZEFydGlzdFJlbGF0aW9ucyhtaW4sIG1heCk7Ci0gICAgICAgIE1hcDxJbnRlZ2VyLCBMaXN0PFN0 cmluZz4+IGFsaWFzZXMgICAgICAgICAgPSBsb2FkQWxpYXNlcyhtaW4sIG1heCk7CisgICAgICAg IE1hcDxJbnRlZ2VyLCBTZXQ8QWxpYXM+PiBhbGlhc2VzICAgICAgICAgICAgPSBsb2FkQWxpYXNl cyhtaW4sIG1heCk7CiAgICAgICAgIE1hcDxJbnRlZ2VyLCBMaXN0PFN0cmluZz4+IGlzd2NzICAg ICAgICAgICAgPSBsb2FkSVNXQ3MobWluLG1heCk7CiAKICAgICAgICAgLy9Xb3JrcwpAQCAtMjk1 LDI0ICszMjYsNDcgQEAKICAgICBwdWJsaWMgRG9jdW1lbnQgZG9jdW1lbnRGcm9tUmVzdWx0U2V0 KFJlc3VsdFNldCBycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE1hcDxJbnRlZ2VyLCBMaXN0PFRhZz4+IHRhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBNYXA8SW50ZWdlciwgUmVsYXRpb25MaXN0PiBhcnRpc3RzLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFwPEludGVnZXIsIExpc3Q8 U3RyaW5nPj4gYWxpYXNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE1hcDxJbnRlZ2VyLCBTZXQ8QWxpYXM+PiAgIGFsaWFzZXMsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBNYXA8SW50ZWdlciwgTGlzdDxTdHJpbmc+PiBpc3dj cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB0aHJvd3MgU1FM RXhjZXB0aW9uIHsKICAgICAgICAgTWJEb2N1bWVudCBkb2MgPSBuZXcgTWJEb2N1bWVudCgpOwor CisgICAgICAgIE9iamVjdEZhY3Rvcnkgb2YgPSBuZXcgT2JqZWN0RmFjdG9yeSgpOworICAgICAg ICBXb3JrIHdvcmsgPSBvZi5jcmVhdGVXb3JrKCk7CisKICAgICAgICAgaW50IGlkID0gcnMuZ2V0 SW50KCJ3aWQiKTsKKyAgICAgICAgU3RyaW5nIGd1aWQgPSBycy5nZXRTdHJpbmcoImdpZCIpOwog ICAgICAgICBkb2MuYWRkRmllbGQoV29ya0luZGV4RmllbGQuSUQsIGlkKTsKLSAgICAgICAgZG9j LmFkZEZpZWxkKFdvcmtJbmRleEZpZWxkLldPUktfSUQsIHJzLmdldFN0cmluZygiZ2lkIikpOwor ICAgICAgICBkb2MuYWRkRmllbGQoV29ya0luZGV4RmllbGQuV09SS19JRCwgZ3VpZCk7CisgICAg ICAgIHdvcmsuc2V0SWQoZ3VpZCk7CisKICAgICAgICAgU3RyaW5nIG5hbWUgPSBycy5nZXRTdHJp bmcoIm5hbWUiKTsKICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZpZWxkLldPUkssIG5h bWUpOwogICAgICAgICBkb2MuYWRkRmllbGQoV29ya0luZGV4RmllbGQuV09SS19BQ0NFTlQsIG5h bWUpOwotICAgICAgICBkb2MuYWRkRmllbGRPck5vVmFsdWUoV29ya0luZGV4RmllbGQuTFlSSUNT X0xBTkcscnMuZ2V0U3RyaW5nKCJsYW5ndWFnZSIpKTsKLSAgICAgICAgZG9jLmFkZEZpZWxkT3JO b1ZhbHVlKFdvcmtJbmRleEZpZWxkLlRZUEUsIHJzLmdldFN0cmluZygidHlwZSIpKTsKLSAgICAg ICAgZG9jLmFkZEZpZWxkT3JOb1ZhbHVlKFdvcmtJbmRleEZpZWxkLkNPTU1FTlQsIHJzLmdldFN0 cmluZygiY29tbWVudCIpKTsKKyAgICAgICAgd29yay5zZXRUaXRsZShuYW1lKTsKIAorICAgICAg ICBTdHJpbmcgbGFuZ3VhZ2UgPSBycy5nZXRTdHJpbmcoImxhbmd1YWdlIik7CisgICAgICAgIGRv Yy5hZGRGaWVsZE9yTm9WYWx1ZShXb3JrSW5kZXhGaWVsZC5MWVJJQ1NfTEFORyxsYW5ndWFnZSk7 CisgICAgICAgIGlmICghU3RyaW5ncy5pc051bGxPckVtcHR5KGxhbmd1YWdlKSkgeworICAgICAg ICAgICAgd29yay5zZXRMYW5ndWFnZShsYW5ndWFnZSk7CisgICAgICAgIH0KKworICAgICAgICBT dHJpbmcgdHlwZSA9IHJzLmdldFN0cmluZygidHlwZSIpOworICAgICAgICBkb2MuYWRkRmllbGRP ck5vVmFsdWUoV29ya0luZGV4RmllbGQuVFlQRSwgdHlwZSk7CisgICAgICAgIGlmICghU3RyaW5n cy5pc051bGxPckVtcHR5KHR5cGUpKSB7CisgICAgICAgICAgICB3b3JrLnNldFR5cGUodHlwZSk7 CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgY29tbWVudCA9IHJzLmdldFN0cmluZygiY29t bWVudCIpOworICAgICAgICBkb2MuYWRkRmllbGRPck5vVmFsdWUoV29ya0luZGV4RmllbGQuQ09N TUVOVCwgY29tbWVudCk7CisgICAgICAgIGlmICghU3RyaW5ncy5pc051bGxPckVtcHR5KGNvbW1l bnQpKSB7CisgICAgICAgICAgICB3b3JrLnNldERpc2FtYmlndWF0aW9uKGNvbW1lbnQpOworICAg ICAgICB9CisKICAgICAgICAgaWYgKGFydGlzdHMuY29udGFpbnNLZXkoaWQpKSB7CiAgICAgICAg ICAgICBSZWxhdGlvbkxpc3QgcmwgPSBhcnRpc3RzLmdldChpZCk7CisgICAgICAgICAgICB3b3Jr LmdldFJlbGF0aW9uTGlzdCgpLmFkZChybCk7CiAgICAgICAgICAgICBpZiAocmwuZ2V0UmVsYXRp b24oKS5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRl eEZpZWxkLkFSVElTVF9SRUxBVElPTiwgTU1EU2VyaWFsaXplci5zZXJpYWxpemUocmwpKTsKICAg ICAgICAgICAgICAgICBmb3IgKFJlbGF0aW9uIHIgOiBhcnRpc3RzLmdldChpZCkuZ2V0UmVsYXRp b24oKSkgewogICAgICAgICAgICAgICAgICAgICBkb2MuYWRkRmllbGQoV29ya0luZGV4RmllbGQu QVJUSVNUX0lELCByLmdldEFydGlzdCgpLmdldElkKCkpOwogICAgICAgICAgICAgICAgICAgICBk b2MuYWRkRmllbGQoV29ya0luZGV4RmllbGQuQVJUSVNULCByLmdldEFydGlzdCgpLmdldE5hbWUo KSk7CkBAIC0zMjEsMjYgKzM3NSw0NyBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKGFsaWFz ZXMuY29udGFpbnNLZXkoaWQpKSB7Ci0gICAgICAgICAgICBmb3IgKFN0cmluZyBhbGlhcyA6IGFs aWFzZXMuZ2V0KGlkKSkgewotICAgICAgICAgICAgICAgIGRvYy5hZGRGaWVsZChXb3JrSW5kZXhG aWVsZC5BTElBUywgYWxpYXMpOworICAgICAgICAgICAgQWxpYXNMaXN0IGFsaWFzTGlzdCA9IG9m LmNyZWF0ZUFsaWFzTGlzdCgpOworICAgICAgICAgICAgZm9yIChBbGlhcyBuZXh0QWxpYXMgOiBh bGlhc2VzLmdldChpZCkpIHsKKyAgICAgICAgICAgICAgICBkb2MuYWRkRmllbGQoV29ya0luZGV4 RmllbGQuQUxJQVMsIG5leHRBbGlhcy5nZXRDb250ZW50KCkpOworICAgICAgICAgICAgICAgIGlm KCFTdHJpbmdzLmlzTnVsbE9yRW1wdHkobmV4dEFsaWFzLmdldFNvcnROYW1lKCkpKSB7CisgICAg ICAgICAgICAgICAgICAgIGlmKCFuZXh0QWxpYXMuZ2V0U29ydE5hbWUoKS5lcXVhbHMobmV4dEFs aWFzLmdldENvbnRlbnQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvYy5hZGRGaWVs ZChXb3JrSW5kZXhGaWVsZC5BTElBUywgbmV4dEFsaWFzLmdldFNvcnROYW1lKCkpOworICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFsaWFz TGlzdC5nZXRBbGlhcygpLmFkZChuZXh0QWxpYXMpOwogICAgICAgICAgICAgfQorICAgICAgICAg ICAgd29yay5zZXRBbGlhc0xpc3QoYWxpYXNMaXN0KTsKICAgICAgICAgfQogCiAgICAgICAgIGlm IChpc3djcy5jb250YWluc0tleShpZCkpIHsKLSAgICAgICAgICAgIGZvciAoU3RyaW5nIGlzd2Mg OiBpc3djcy5nZXQoaWQpKSB7Ci0gICAgICAgICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRl eEZpZWxkLklTV0MsIGlzd2MpOworICAgICAgICAgICAgSXN3Y0xpc3QgaXN3Y0xpc3QgPSBvZi5j cmVhdGVJc3djTGlzdCgpOworICAgICAgICAgICAgZm9yIChTdHJpbmcgaXN3Y0NvZGUgOiBpc3dj cy5nZXQoaWQpKSB7CisgICAgICAgICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZpZWxk LklTV0MsIGlzd2NDb2RlKTsKKyAgICAgICAgICAgICAgICBpc3djTGlzdC5nZXRJc3djKCkuYWRk KGlzd2NDb2RlKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdvcmsuc2V0SXN3Y0xpc3Qo aXN3Y0xpc3QpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgeworICAgICAgICBlbHNlCisgICAg ICAgIHsKICAgICAgICAgICAgIGRvYy5hZGRGaWVsZE9yTm9WYWx1ZShXb3JrSW5kZXhGaWVsZC5J U1dDLCBudWxsKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICh0YWdzLmNvbnRhaW5zS2V5KGlk KSkgewotICAgICAgICAgICAgZm9yIChUYWcgdGFnIDogdGFncy5nZXQoaWQpKSB7Ci0gICAgICAg ICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZpZWxkLlRBRywgdGFnLmdldE5hbWUoKSk7 Ci0gICAgICAgICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZpZWxkLlRBR0NPVU5ULCB0 YWcuZ2V0Q291bnQoKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIFRhZ0xpc3QgdGFnTGlzdCA9 IG9mLmNyZWF0ZVRhZ0xpc3QoKTsKKyAgICAgICAgICAgIGZvciAoVGFnIG5leHRUYWcgOiB0YWdz LmdldChpZCkpIHsKKyAgICAgICAgICAgICAgICBUYWcgdGFnID0gb2YuY3JlYXRlVGFnKCk7Cisg ICAgICAgICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZpZWxkLlRBRywgbmV4dFRhZy5n ZXROYW1lKCkpOworICAgICAgICAgICAgICAgIHRhZy5zZXROYW1lKG5leHRUYWcuZ2V0TmFtZSgp KTsKKyAgICAgICAgICAgICAgICB0YWcuc2V0Q291bnQobmV3IEJpZ0ludGVnZXIobmV4dFRhZy5n ZXRDb3VudCgpLnRvU3RyaW5nKCkpKTsKKyAgICAgICAgICAgICAgICB0YWdMaXN0LmdldFRhZygp LmFkZCh0YWcpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgd29yay5zZXRUYWdMaXN0KHRh Z0xpc3QpOwogICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHN0b3JlID0gTU1EU2VyaWFsaXpl ci5zZXJpYWxpemUod29yayk7CisgICAgICAgIGRvYy5hZGRGaWVsZChXb3JrSW5kZXhGaWVsZC5X T1JLX1NUT1JFLCBzdG9yZSk7CisKICAgICAgICAgcmV0dXJuIGRvYy5nZXRMdWNlbmVEb2N1bWVu dCgpOwogICAgIH0KIAoKTW9kaWZpZWQ6IHNlYXJjaF9zZXJ2ZXIvdHJ1bmsvaW5kZXgvc3JjL21h aW4vamF2YS9vcmcvbXVzaWNicmFpbnovc2VhcmNoL2luZGV4L1dvcmtJbmRleEZpZWxkLmphdmEK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gc2VhcmNoX3NlcnZlci90cnVuay9pbmRleC9zcmMvbWFpbi9qYXZhL29y Zy9tdXNpY2JyYWluei9zZWFyY2gvaW5kZXgvV29ya0luZGV4RmllbGQuamF2YQkyMDEzLTEwLTAy IDExOjQyOjE1IFVUQyAocmV2IDEzNzE0KQorKysgc2VhcmNoX3NlcnZlci90cnVuay9pbmRleC9z cmMvbWFpbi9qYXZhL29yZy9tdXNpY2JyYWluei9zZWFyY2gvaW5kZXgvV29ya0luZGV4RmllbGQu amF2YQkyMDEzLTEwLTAyIDEzOjAxOjU5IFVUQyAocmV2IDEzNzE1KQpAQCAtMTgsMTYgKzE4LDE1 IEBACiAgICAgQUxJQVMJCSAgICAgICAgKCJhbGlhcyIsCQkgICAgTXVzaWNCcmFpbnpGaWVsZFR5 cGVzLlRFWFRfU1RPUkVEX0FOQUxZWkVELCBuZXcgTXVzaWNicmFpbnpXaXRoUG9zR2FwQW5hbHl6 ZXIoKSksCiAgICAgQVJUSVNUX0lECQkgICAgKCJhcmlkIiwJCQlNdXNpY0JyYWluekZpZWxkVHlw ZXMuVEVYVF9OT1RfU1RPUkVEX05PVF9BTkFMWVpFRF9OT19OT1JNUywgbmV3IEtleXdvcmRBbmFs eXplcigpKSwKICAgICBBUlRJU1QgICAgICAgICAgICAgICgiYXJ0aXN0IiwgICAgICAgICAgTXVz aWNCcmFpbnpGaWVsZFR5cGVzLlRFWFRfTk9UX1NUT1JFRF9BTkFMWVpFRCwgbmV3IE11c2ljYnJh aW56V2l0aFBvc0dhcEFuYWx5emVyKCkpLAotICAgIEFSVElTVF9SRUxBVElPTiAgICAgKCJhcnRp c3RyZWxhdGlvbiIsICBNdXNpY0JyYWluekZpZWxkVHlwZXMuVEVYVF9TVE9SRURfTk9UX0lOREVY RUQpLAogICAgIENPTU1FTlQJCSAgICAgICAgKCJjb21tZW50IiwJCSAgICBNdXNpY0JyYWluekZp ZWxkVHlwZXMuVEVYVF9TVE9SRURfQU5BTFlaRUQpLAogICAgIElTV0MJCSAgICAgICAgKCJpc3dj IiwJCSAgICBNdXNpY0JyYWluekZpZWxkVHlwZXMuVEVYVF9TVE9SRURfQU5BTFlaRURfTk9fTk9S TVMsIG5ldyBDYXNlSW5zZW5zaXRpdmVLZXl3b3JkQW5hbHl6ZXIoKSksCiAgICAgTFlSSUNTX0xB TkcJCSAgICAoImxhbmciLAkgICAgICAgIE11c2ljQnJhaW56RmllbGRUeXBlcy5URVhUX1NUT1JF RF9OT1RfQU5BTFlaRURfTk9fTk9STVMsIG5ldyBDYXNlSW5zZW5zaXRpdmVLZXl3b3JkQW5hbHl6 ZXIoKSksCiAgICAgVFlQRQkJICAgICAgICAoInR5cGUiLAkJICAgIE11c2ljQnJhaW56RmllbGRU eXBlcy5URVhUX1NUT1JFRF9BTkFMWVpFRF9OT19OT1JNUywgbmV3IENhc2VJbnNlbnNpdGl2ZUtl eXdvcmRBbmFseXplcigpKSwKICAgICBUQUcJCSAgICAgICAgICAgICgidGFnIiwJCSAgICAgICAg TXVzaWNCcmFpbnpGaWVsZFR5cGVzLlRFWFRfU1RPUkVEX0FOQUxZWkVELCBuZXcgTXVzaWNicmFp bnpXaXRoUG9zR2FwQW5hbHl6ZXIoKSksCi0gICAgVEFHQ09VTlQgICAgICAgICAgICAoInRhZ2Nv dW50IiwJICAgIE11c2ljQnJhaW56RmllbGRUeXBlcy5URVhUX1NUT1JFRF9OT1RfSU5ERVhFRCks CiAgICAgV09SSwkJCSAgICAoIndvcmsiLAkJICAgIE11c2ljQnJhaW56RmllbGRUeXBlcy5URVhU X1NUT1JFRF9BTkFMWVpFRCwgbmV3IFRpdGxlQW5hbHl6ZXIoKSksCiAgICAgV09SS19BQ0NFTlQg ICAgICAgICAoIndvcmthY2NlbnQiLCAgICAgIE11c2ljQnJhaW56RmllbGRUeXBlcy5URVhUX05P VF9TVE9SRURfQU5BTFlaRUQsIG5ldyBNdXNpY2JyYWluektlZXBBY2NlbnRzQW5hbHl6ZXIoKSks CiAgICAgV09SS19JRAkJICAgICAgICAoIndpZCIsCQkgICAgICAgIE11c2ljQnJhaW56RmllbGRU eXBlcy5URVhUX1NUT1JFRF9OT1RfQU5BTFlaRURfTk9fTk9STVMsIG5ldyBLZXl3b3JkQW5hbHl6 ZXIoKSksCisgICAgV09SS19TVE9SRQkJICAgICgid29ya3N0b3JlIiwgICAgICAgTXVzaWNCcmFp bnpGaWVsZFR5cGVzLlRFWFRfU1RPUkVEX05PVF9JTkRFWEVEKSwKICAgICA7CiAKICAgICBwcml2 YXRlIFN0cmluZyBuYW1lOwoKTW9kaWZpZWQ6IHNlYXJjaF9zZXJ2ZXIvdHJ1bmsvaW5kZXgvc3Jj L3Rlc3QvamF2YS9vcmcvbXVzaWNicmFpbnovc2VhcmNoL2luZGV4L0Fic3RyYWN0SW5kZXhUZXN0 LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gc2VhcmNoX3NlcnZlci90cnVuay9pbmRleC9zcmMvdGVzdC9q YXZhL29yZy9tdXNpY2JyYWluei9zZWFyY2gvaW5kZXgvQWJzdHJhY3RJbmRleFRlc3QuamF2YQky MDEzLTEwLTAyIDExOjQyOjE1IFVUQyAocmV2IDEzNzE0KQorKysgc2VhcmNoX3NlcnZlci90cnVu ay9pbmRleC9zcmMvdGVzdC9qYXZhL29yZy9tdXNpY2JyYWluei9zZWFyY2gvaW5kZXgvQWJzdHJh Y3RJbmRleFRlc3QuamF2YQkyMDEzLTEwLTAyIDEzOjAxOjU5IFVUQyAocmV2IDEzNzE1KQpAQCAt Nzk5LDYgKzc5OSw3IEBACiAgICAgICAgICAgICAgICAgIiAgaWQgc2VyaWFsIE5PVCBOVUxMLCIg KwogICAgICAgICAgICAgICAgICIgIHdvcmsgaW50ZWdlciBOT1QgTlVMTCwiICsKICAgICAgICAg ICAgICAgICAiICBuYW1lIGNoYXJhY3RlciB2YXJ5aW5nKDI1NSksIiArCisgICAgICAgICAgICAg ICAgIiAgbG9jYWxlIHRleHQsIiArCiAgICAgICAgICAgICAgICAgIiAgc29ydF9uYW1lIGNoYXJh Y3RlciB2YXJ5aW5nKDI1NSksIiArCiAgICAgICAgICAgICAgICAgIiAgdHlwZSAgICAgICAgICAg ICAgICBJTlRFR0VSLCIgKwogICAgICAgICAgICAgICAgICIgIGJlZ2luX2RhdGVfeWVhciAgICAg U01BTExJTlQsIiArCkBAIC04MDcsNiArODA4LDcgQEAKICAgICAgICAgICAgICAgICAiICBlbmRf ZGF0ZV95ZWFyICAgICAgIFNNQUxMSU5ULCIgKwogICAgICAgICAgICAgICAgICIgIGVuZF9kYXRl X21vbnRoICAgICAgU01BTExJTlQsIiArCiAgICAgICAgICAgICAgICAgIiAgZW5kX2RhdGVfZGF5 ICAgICAgICBTTUFMTElOVCwiICsKKyAgICAgICAgICAgICAgICAiICBwcmltYXJ5X2Zvcl9sb2Nh bGUgIEJPT0xFQU4sIiAgKwogICAgICAgICAgICAgICAgICIgIGxhc3RfdXBkYXRlZCB0aW1lc3Rh bXAsIiArCiAgICAgICAgICAgICAgICAgIiAgZWRpdHNfcGVuZGluZyBpbnRlZ2VyIE5PVCBOVUxM IERFRkFVTFQgMCIgKwogICAgICAgICAgICAgICAgICIpIik7CgpNb2RpZmllZDogc2VhcmNoX3Nl cnZlci90cnVuay9pbmRleC9zcmMvdGVzdC9qYXZhL29yZy9tdXNpY2JyYWluei9zZWFyY2gvaW5k ZXgvV29ya0luZGV4VGVzdC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHNlYXJjaF9zZXJ2ZXIvdHJ1bmsv aW5kZXgvc3JjL3Rlc3QvamF2YS9vcmcvbXVzaWNicmFpbnovc2VhcmNoL2luZGV4L1dvcmtJbmRl eFRlc3QuamF2YQkyMDEzLTEwLTAyIDExOjQyOjE1IFVUQyAocmV2IDEzNzE0KQorKysgc2VhcmNo X3NlcnZlci90cnVuay9pbmRleC9zcmMvdGVzdC9qYXZhL29yZy9tdXNpY2JyYWluei9zZWFyY2gv aW5kZXgvV29ya0luZGV4VGVzdC5qYXZhCTIwMTMtMTAtMDIgMTM6MDE6NTkgVVRDIChyZXYgMTM3 MTUpCkBAIC02LDcgKzYsOSBAQAogaW1wb3J0IG9yZy5hcGFjaGUubHVjZW5lLmluZGV4LkluZGV4 V3JpdGVyOwogaW1wb3J0IG9yZy5hcGFjaGUubHVjZW5lLnN0b3JlLlJBTURpcmVjdG9yeTsKIGlt cG9ydCBvcmcuanVuaXQuVGVzdDsKK2ltcG9ydCBvcmcubXVzaWNicmFpbnoubW1kMi5MYWJlbDsK IGltcG9ydCBvcmcubXVzaWNicmFpbnoubW1kMi5SZWxhdGlvbkxpc3Q7CitpbXBvcnQgb3JnLm11 c2ljYnJhaW56Lm1tZDIuV29yazsKIAogaW1wb3J0IGphdmEuc3FsLlN0YXRlbWVudDsKIApAQCAt NDcsNyArNDksNyBAQAogICAgICAgICAgICAgICAgICIgVkFMVUVTICgxLCAnYTUzOWJiMWUtZjJl MS00YjQ1LTlkYjgtODA1Mzg0MWU3NTAzJywgJ1dvcmsnLCAxLCAgJ2RlbW8nLCAxKSIpOwogICAg ICAgICBzdG10LmFkZEJhdGNoKCJJTlNFUlQgSU5UTyBsYW5ndWFnZSAoaWQsIGlzb19jb2RlXzMs IGlzb19jb2RlXzJ0LCBpc29fY29kZV8yYiwgaXNvX2NvZGVfMiwgbmFtZSwgZnJlcXVlbmN5KSAi ICsKICAgICAgICAgICAgICAgICAiIFZBTFVFUyAoMSwgJ2VuZycsICdlbmcnLCAnZW5nJywgJ2Vu JywgJ0VuZ2xpc2gnLCAxKSIpOwotICAgICAgICBzdG10LmFkZEJhdGNoKCJJTlNFUlQgSU5UTyB3 b3JrX2FsaWFzICh3b3JrLCBuYW1lKSBWQUxVRVMgKDEsICdQbGF5JykiKTsKKyAgICAgICAgc3Rt dC5hZGRCYXRjaCgiSU5TRVJUIElOVE8gd29ya19hbGlhcyAod29yaywgbmFtZSwgc29ydF9uYW1l KSBWQUxVRVMgKDEsICdQbGF5JywgJycpIik7CiAKICAgICAgICAgc3RtdC5hZGRCYXRjaCgiSU5T RVJUIElOVE8gdGFnIChpZCwgbmFtZSwgcmVmX2NvdW50KSBWQUxVRVMgKDEsICdDbGFzc2ljYWwn LCAyKTsiKTsKICAgICAgICAgc3RtdC5hZGRCYXRjaCgiSU5TRVJUIElOVE8gd29ya190YWcgKHdv cmssIHRhZywgY291bnQpIFZBTFVFUyAoMSwgMSwgMTApIik7CkBAIC0xMDUsNyArMTA3LDYgQEAK ICAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBkb2MuZ2V0RmllbGRzKFdvcmtJbmRleEZpZWxk LklTV0MuZ2V0TmFtZSgpKS5sZW5ndGgpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGRv Yy5nZXRGaWVsZHMoV29ya0luZGV4RmllbGQuVFlQRS5nZXROYW1lKCkpLmxlbmd0aCk7CiAgICAg ICAgICAgICBhc3NlcnRFcXVhbHMoIi0iLCBkb2MuZ2V0RmllbGQoV29ya0luZGV4RmllbGQuVFlQ RS5nZXROYW1lKCkpLnN0cmluZ1ZhbHVlKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEs IGRvYy5nZXRGaWVsZHMoV29ya0luZGV4RmllbGQuQVJUSVNUX1JFTEFUSU9OLmdldE5hbWUoKSku bGVuZ3RoKTsKICAgICAgICAgICAgIGlyLmNsb3NlKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0y MTcsMTIgKzIxOCwxMSBAQAogICAgICAgICBhc3NlcnRFcXVhbHMoMiwgaXIubnVtRG9jcygpKTsK ICAgICAgICAgewogICAgICAgICAgICAgRG9jdW1lbnQgZG9jID0gaXIuZG9jdW1lbnQoMSk7Ci0g ICAgICAgICAgICBSZWxhdGlvbkxpc3QgcmMgPSAoUmVsYXRpb25MaXN0KSBNTURTZXJpYWxpemVy Ci0gICAgICAgICAgICAgICAgICAgIC51bnNlcmlhbGl6ZShkb2MuZ2V0KFdvcmtJbmRleEZpZWxk LkFSVElTVF9SRUxBVElPTi5nZXROYW1lKCkpLCBSZWxhdGlvbkxpc3QuY2xhc3MpOwotICAgICAg ICAgICAgYXNzZXJ0Tm90TnVsbChyYyk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImNjZDQ4 NzljLTVlODgtNDM4NS1iMTMxLWJmNjUyOTZiZjI0NSIscmMuZ2V0UmVsYXRpb24oKS5nZXQoMCku Z2V0QXJ0aXN0KCkuZ2V0SWQoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkVjaG8gJiBU aGUgQnVubnltZW4iLHJjLmdldFJlbGF0aW9uKCkuZ2V0KDApLmdldEFydGlzdCgpLmdldE5hbWUo KSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImNvbXBvc2VyIixyYy5nZXRSZWxhdGlvbigp LmdldCgwKS5nZXRUeXBlKCkpOworICAgICAgICAgICAgV29yayB3b3JrID0gKFdvcmspIE1NRFNl cmlhbGl6ZXIKKyAgICAgICAgICAgICAgICAgICAgLnVuc2VyaWFsaXplKGRvYy5nZXQoV29ya0lu ZGV4RmllbGQuV09SS19TVE9SRS5nZXROYW1lKCkpLCBXb3JrLmNsYXNzKTsKKyAgICAgICAgICAg IGFzc2VydEVxdWFscygiY2NkNDg3OWMtNWU4OC00Mzg1LWIxMzEtYmY2NTI5NmJmMjQ1Iiwgd29y ay5nZXRSZWxhdGlvbkxpc3QoKS5nZXQoMCkuZ2V0UmVsYXRpb24oKS5nZXQoMCkuZ2V0QXJ0aXN0 KCkuZ2V0SWQoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkVjaG8gJiBUaGUgQnVubnlt ZW4iLCB3b3JrLmdldFJlbGF0aW9uTGlzdCgpLmdldCgwKS5nZXRSZWxhdGlvbigpLmdldCgwKS5n ZXRBcnRpc3QoKS5nZXROYW1lKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJjb21wb3Nl ciIsIHdvcmsuZ2V0UmVsYXRpb25MaXN0KCkuZ2V0KDApLmdldFJlbGF0aW9uKCkuZ2V0KDApLmdl dFR5cGUoKSk7CiAKICAgICAgICAgICAgIGlyLmNsb3NlKCk7CiAgICAgICAgIH0KQEAgLTIzOCwx MyArMjM4LDEzIEBACiAgICAgICAgIGFzc2VydEVxdWFscygyLCBpci5udW1Eb2NzKCkpOwogICAg ICAgICB7CiAgICAgICAgICAgICBEb2N1bWVudCBkb2MgPSBpci5kb2N1bWVudCgxKTsKLSAgICAg ICAgICAgIFJlbGF0aW9uTGlzdCByYyA9IChSZWxhdGlvbkxpc3QpIE1NRFNlcmlhbGl6ZXIKLSAg ICAgICAgICAgICAgICAgICAgLnVuc2VyaWFsaXplKGRvYy5nZXQoV29ya0luZGV4RmllbGQuQVJU SVNUX1JFTEFUSU9OLmdldE5hbWUoKSksIFJlbGF0aW9uTGlzdC5jbGFzcyk7Ci0gICAgICAgICAg ICBhc3NlcnROb3ROdWxsKHJjKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiY2NkNDg3OWMt NWU4OC00Mzg1LWIxMzEtYmY2NTI5NmJmMjQ1IixyYy5nZXRSZWxhdGlvbigpLmdldCgwKS5nZXRB cnRpc3QoKS5nZXRJZCgpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiRWNobyAmIFRoZSBC dW5ueW1lbiIscmMuZ2V0UmVsYXRpb24oKS5nZXQoMCkuZ2V0QXJ0aXN0KCkuZ2V0TmFtZSgpKTsK LSAgICAgICAgICAgIGFzc2VydEVxdWFscygiY29tcG9zZXIiLHJjLmdldFJlbGF0aW9uKCkuZ2V0 KDApLmdldFR5cGUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImFkZGl0aW9uYWwiLHJj LmdldFJlbGF0aW9uKCkuZ2V0KDApLmdldEF0dHJpYnV0ZUxpc3QoKS5nZXRBdHRyaWJ1dGUoKS5n ZXQoMCkpOworICAgICAgICAgICAgV29yayB3b3JrID0gKFdvcmspIE1NRFNlcmlhbGl6ZXIKKyAg ICAgICAgICAgICAgICAgICAgLnVuc2VyaWFsaXplKGRvYy5nZXQoV29ya0luZGV4RmllbGQuV09S S19TVE9SRS5nZXROYW1lKCkpLCBXb3JrLmNsYXNzKTsKKyAgICAgICAgICAgIGFzc2VydE5vdE51 bGwod29yayk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoImNjZDQ4NzljLTVlODgtNDM4NS1i MTMxLWJmNjUyOTZiZjI0NSIsIHdvcmsuZ2V0UmVsYXRpb25MaXN0KCkuZ2V0KDApLmdldFJlbGF0 aW9uKCkuZ2V0KDApLmdldEFydGlzdCgpLmdldElkKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1 YWxzKCJFY2hvICYgVGhlIEJ1bm55bWVuIix3b3JrLmdldFJlbGF0aW9uTGlzdCgpLmdldCgwKS5n ZXRSZWxhdGlvbigpLmdldCgwKS5nZXRBcnRpc3QoKS5nZXROYW1lKCkpOworICAgICAgICAgICAg YXNzZXJ0RXF1YWxzKCJjb21wb3NlciIsd29yay5nZXRSZWxhdGlvbkxpc3QoKS5nZXQoMCkuZ2V0 UmVsYXRpb24oKS5nZXQoMCkuZ2V0VHlwZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygi YWRkaXRpb25hbCIsd29yay5nZXRSZWxhdGlvbkxpc3QoKS5nZXQoMCkuZ2V0UmVsYXRpb24oKS5n ZXQoMCkuZ2V0QXR0cmlidXRlTGlzdCgpLmdldEF0dHJpYnV0ZSgpLmdldCgwKSk7CiAgICAgICAg ICAgICBpci5jbG9zZSgpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzAwLDggKzMwMCwxMCBAQAog ICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGRvYy5nZXRGaWVsZHMoV29ya0luZGV4RmllbGQu V09SSy5nZXROYW1lKCkpLmxlbmd0aCk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZG9j LmdldEZpZWxkcyhXb3JrSW5kZXhGaWVsZC5UQUcuZ2V0TmFtZSgpKS5sZW5ndGgpOwogICAgICAg ICAgICAgYXNzZXJ0RXF1YWxzKCJDbGFzc2ljYWwiLCBkb2MuZ2V0RmllbGQoV29ya0luZGV4Rmll bGQuVEFHLmdldE5hbWUoKSkuc3RyaW5nVmFsdWUoKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVh bHMoMSwgZG9jLmdldEZpZWxkcyhXb3JrSW5kZXhGaWVsZC5UQUdDT1VOVC5nZXROYW1lKCkpLmxl bmd0aCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIjEwIiwgZG9jLmdldEZpZWxkKFdvcmtJ bmRleEZpZWxkLlRBR0NPVU5ULmdldE5hbWUoKSkuc3RyaW5nVmFsdWUoKSk7CisKKyAgICAgICAg ICAgIFdvcmsgd29yayA9IChXb3JrKSBNTURTZXJpYWxpemVyLnVuc2VyaWFsaXplKGRvYy5nZXQo V29ya0luZGV4RmllbGQuV09SS19TVE9SRS5nZXROYW1lKCkpLCBXb3JrLmNsYXNzKTsKKyAgICAg ICAgICAgIGFzc2VydE5vdE51bGwod29yayk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMTAs IHdvcmsuZ2V0VGFnTGlzdCgpLmdldFRhZygpLmdldCgwKS5nZXRDb3VudCgpLmludFZhbHVlKCkp OwogICAgICAgICB9CiAgICAgICAgIGlyLmNsb3NlKCk7CiAgICAgfQoKTW9kaWZpZWQ6IHNlYXJj aF9zZXJ2ZXIvdHJ1bmsvc2VydmxldC9zcmMvbWFpbi9qYXZhL29yZy9tdXNpY2JyYWluei9zZWFy Y2gvc2VydmxldC9tbWQyL1dvcmtXcml0ZXIuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzZWFyY2hfc2Vy dmVyL3RydW5rL3NlcnZsZXQvc3JjL21haW4vamF2YS9vcmcvbXVzaWNicmFpbnovc2VhcmNoL3Nl cnZsZXQvbW1kMi9Xb3JrV3JpdGVyLmphdmEJMjAxMy0xMC0wMiAxMTo0MjoxNSBVVEMgKHJldiAx MzcxNCkKKysrIHNlYXJjaF9zZXJ2ZXIvdHJ1bmsvc2VydmxldC9zcmMvbWFpbi9qYXZhL29yZy9t dXNpY2JyYWluei9zZWFyY2gvc2VydmxldC9tbWQyL1dvcmtXcml0ZXIuamF2YQkyMDEzLTEwLTAy IDEzOjAxOjU5IFVUQyAocmV2IDEzNzE1KQpAQCAtMzAsNiArMzAsNyBAQAogCiBpbXBvcnQgb3Jn Lm11c2ljYnJhaW56Lm1tZDIuKjsKIGltcG9ydCBvcmcubXVzaWNicmFpbnouc2VhcmNoLk1iRG9j dW1lbnQ7CitpbXBvcnQgb3JnLm11c2ljYnJhaW56LnNlYXJjaC5pbmRleC5MYWJlbEluZGV4Rmll bGQ7CiBpbXBvcnQgb3JnLm11c2ljYnJhaW56LnNlYXJjaC5pbmRleC5NTURTZXJpYWxpemVyOwog aW1wb3J0IG9yZy5tdXNpY2JyYWluei5zZWFyY2guaW5kZXguUmVjb3JkaW5nSW5kZXhGaWVsZDsK IGltcG9ydCBvcmcubXVzaWNicmFpbnouc2VhcmNoLmluZGV4LldvcmtJbmRleEZpZWxkOwpAQCAt ODYsODkgKzg3LDExIEBACiAgICAgICogQHBhcmFtIHJlc3VsdAogICAgICAqIEB0aHJvd3MgSU9F eGNlcHRpb24KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB3cml0ZShMaXN0IGxpc3QsIFJlc3Vs dCByZXN1bHQpIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLQotICAgICAgICBPYmplY3RGYWN0 b3J5IG9mID0gbmV3IE9iamVjdEZhY3RvcnkoKTsKLQorICAgIHB1YmxpYyB2b2lkIHdyaXRlKExp c3QgbGlzdCwgUmVzdWx0IHJlc3VsdCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICAgTWJE b2N1bWVudCBkb2MgPSByZXN1bHQuZ2V0RG9jKCk7Ci0gICAgICAgIFdvcmsgd29yayA9IG9mLmNy ZWF0ZVdvcmsoKTsKLSAgICAgICAgd29yay5zZXRJZChkb2MuZ2V0KFdvcmtJbmRleEZpZWxkLldP UktfSUQpKTsKKyAgICAgICAgV29yayB3b3JrID0gKFdvcmspIE1NRFNlcmlhbGl6ZXIudW5zZXJp YWxpemUoZG9jLmdldChXb3JrSW5kZXhGaWVsZC5XT1JLX1NUT1JFKSwgV29yay5jbGFzcyk7CiAg ICAgICAgIHdvcmsuc2V0U2NvcmUoU3RyaW5nLnZhbHVlT2YocmVzdWx0LmdldE5vcm1hbGl6ZWRT Y29yZSgpKSk7Ci0KLSAgICAgICAgU3RyaW5nIG5hbWUgPSBkb2MuZ2V0KFdvcmtJbmRleEZpZWxk LldPUkspOwotICAgICAgICBpZiAobmFtZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAg ICB3b3JrLnNldFRpdGxlKG5hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIGNvbW1l bnQgPSBkb2MuZ2V0KFdvcmtJbmRleEZpZWxkLkNPTU1FTlQpOwotICAgICAgICBpZiAoaXNOb3RO b1ZhbHVlKGNvbW1lbnQpKQotICAgICAgICB7Ci0gICAgICAgICAgICB3b3JrLnNldERpc2FtYmln dWF0aW9uKGNvbW1lbnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIHR5cGUgPSBkb2Mu Z2V0KFdvcmtJbmRleEZpZWxkLlRZUEUpOwotICAgICAgICBpZiAoaXNOb3ROb1ZhbHVlKHR5cGUp KQotICAgICAgICB7Ci0gICAgICAgICAgICB3b3JrLnNldFR5cGUodHlwZSk7Ci0gICAgICAgIH0K LQotICAgICAgICBTdHJpbmcgbHlyaWNzTGFuZ3VhZ2UgPSBkb2MuZ2V0KFdvcmtJbmRleEZpZWxk LkxZUklDU19MQU5HKTsKLSAgICAgICAgaWYgKGlzTm90Tm9WYWx1ZShseXJpY3NMYW5ndWFnZSkp Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHdvcmsuc2V0TGFuZ3VhZ2UobHlyaWNzTGFuZ3VhZ2Up OwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nW10gaXN3Y3MgPSBkb2MuZ2V0VmFsdWVzKFdv cmtJbmRleEZpZWxkLklTV0MpOwotICAgICAgICBpZiAoaXN3Y3MubGVuZ3RoID4gMCkKLSAgICAg ICAgewotICAgICAgICAgICAgSXN3Y0xpc3QgaXN3Y0xpc3QgPSBvZi5jcmVhdGVJc3djTGlzdCgp OwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpc3djcy5sZW5ndGg7IGkrKykKLSAg ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNOb3ROb1ZhbHVlKGlzd2NzW2ldKSkg ewotICAgICAgICAgICAgICAgICAgICBpc3djTGlzdC5nZXRJc3djKCkuYWRkKGlzd2NzW2ldKTsK LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZihpc3djTGlz dC5nZXRJc3djKCkuc2l6ZSgpPjApIHsKLSAgICAgICAgICAgICAgICB3b3JrLnNldElzd2NMaXN0 KGlzd2NMaXN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBh cnRpc3RSZWxhdGlvbiA9IGRvYy5nZXQoV29ya0luZGV4RmllbGQuQVJUSVNUX1JFTEFUSU9OKTsK LSAgICAgICAgaWYgKGFydGlzdFJlbGF0aW9uICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAg ICAgIFJlbGF0aW9uTGlzdCByYyA9IChSZWxhdGlvbkxpc3QpIE1NRFNlcmlhbGl6ZXIudW5zZXJp YWxpemUoYXJ0aXN0UmVsYXRpb24sIFJlbGF0aW9uTGlzdC5jbGFzcyk7Ci0gICAgICAgICAgICB3 b3JrLmdldFJlbGF0aW9uTGlzdCgpLmFkZChyYyk7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJp bmdbXSBhbGlhc2VzID0gZG9jLmdldFZhbHVlcyhXb3JrSW5kZXhGaWVsZC5BTElBUyk7Ci0gICAg ICAgIGlmIChhbGlhc2VzLmxlbmd0aCA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFsaWFz TGlzdCBhbGlhc0xpc3QgPSBvZi5jcmVhdGVBbGlhc0xpc3QoKTsKLSAgICAgICAgICAgIGZvciAo aW50IGkgPSAwOyBpIDwgYWxpYXNlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAg ICAgICAgICAgICBBbGlhcyBhbGlhcyA9IG9mLmNyZWF0ZUFsaWFzKCk7Ci0gICAgICAgICAgICAg ICAgYWxpYXMuc2V0Q29udGVudChhbGlhc2VzW2ldKTsKLSAgICAgICAgICAgICAgICBhbGlhc0xp c3QuZ2V0QWxpYXMoKS5hZGQoYWxpYXMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgd29y ay5zZXRBbGlhc0xpc3QoYWxpYXNMaXN0KTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZ1td IHRhZ3MgPSBkb2MuZ2V0VmFsdWVzKFdvcmtJbmRleEZpZWxkLlRBRyk7Ci0gICAgICAgIFN0cmlu Z1tdIHRhZ0NvdW50cyA9IGRvYy5nZXRWYWx1ZXMoV29ya0luZGV4RmllbGQuVEFHQ09VTlQpOwot ICAgICAgICBpZiAodGFncy5sZW5ndGggPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBUYWdM aXN0IHRhZ0xpc3QgPSBvZi5jcmVhdGVUYWdMaXN0KCk7Ci0gICAgICAgICAgICBmb3IgKGludCBp ID0gMDsgaSA8IHRhZ3MubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg ICAgVGFnIHRhZyA9IG9mLmNyZWF0ZVRhZygpOwotICAgICAgICAgICAgICAgIHRhZy5zZXROYW1l KHRhZ3NbaV0pOwotICAgICAgICAgICAgICAgIHRhZy5zZXRDb3VudChuZXcgQmlnSW50ZWdlcih0 YWdDb3VudHNbaV0pKTsKLSAgICAgICAgICAgICAgICB0YWdMaXN0LmdldFRhZygpLmFkZCh0YWcp OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgd29yay5zZXRUYWdMaXN0KHRhZ0xpc3QpOwot ICAgICAgICB9CiAgICAgICAgIGxpc3QuYWRkKHdvcmspOwogICAgIH0KKwogfQpcIE5vIG5ld2xp bmUgYXQgZW5kIG9mIGZpbGUKCk1vZGlmaWVkOiBzZWFyY2hfc2VydmVyL3RydW5rL3NlcnZsZXQv c3JjL3Rlc3QvamF2YS9vcmcvbXVzaWNicmFpbnovc2VhcmNoL3NlcnZsZXQvRmluZFdvcmtUZXN0 LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gc2VhcmNoX3NlcnZlci90cnVuay9zZXJ2bGV0L3NyYy90ZXN0 L2phdmEvb3JnL211c2ljYnJhaW56L3NlYXJjaC9zZXJ2bGV0L0ZpbmRXb3JrVGVzdC5qYXZhCTIw MTMtMTAtMDIgMTE6NDI6MTUgVVRDIChyZXYgMTM3MTQpCisrKyBzZWFyY2hfc2VydmVyL3RydW5r L3NlcnZsZXQvc3JjL3Rlc3QvamF2YS9vcmcvbXVzaWNicmFpbnovc2VhcmNoL3NlcnZsZXQvRmlu ZFdvcmtUZXN0LmphdmEJMjAxMy0xMC0wMiAxMzowMTo1OSBVVEMgKHJldiAxMzcxNSkKQEAgLTUs OCArNSwxMCBAQAogCiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKIGltcG9ydCBqYXZhLmlv LlN0cmluZ1dyaXRlcjsKK2ltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKIGltcG9ydCBqYXZh LnV0aWwuRGF0ZTsKIAoraW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmJhc2UuU3RyaW5nczsKIGlt cG9ydCBvcmcuYXBhY2hlLmx1Y2VuZS5hbmFseXNpcy5BbmFseXplcjsKIGltcG9ydCBvcmcuYXBh Y2hlLmx1Y2VuZS5pbmRleC5JbmRleFdyaXRlcjsKIGltcG9ydCBvcmcuYXBhY2hlLmx1Y2VuZS5p bmRleC5JbmRleFdyaXRlckNvbmZpZzsKQEAgLTE0LDEyICsxNiw3IEBACiBpbXBvcnQgb3JnLmFw YWNoZS5sdWNlbmUuc3RvcmUuUkFNRGlyZWN0b3J5OwogaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7 CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLm11c2ljYnJhaW56Lm1tZDIuQXJ0 aXN0OwotaW1wb3J0IG9yZy5tdXNpY2JyYWluei5tbWQyLkF0dHJpYnV0ZUxpc3Q7Ci1pbXBvcnQg b3JnLm11c2ljYnJhaW56Lm1tZDIuRGVmRGlyZWN0aW9uOwotaW1wb3J0IG9yZy5tdXNpY2JyYWlu ei5tbWQyLk9iamVjdEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLm11c2ljYnJhaW56Lm1tZDIuUmVsYXRp b247Ci1pbXBvcnQgb3JnLm11c2ljYnJhaW56Lm1tZDIuUmVsYXRpb25MaXN0OworaW1wb3J0IG9y Zy5tdXNpY2JyYWluei5tbWQyLio7CiBpbXBvcnQgb3JnLm11c2ljYnJhaW56LnNlYXJjaC5MdWNl bmVWZXJzaW9uOwogaW1wb3J0IG9yZy5tdXNpY2JyYWluei5zZWFyY2guTWJEb2N1bWVudDsKIGlt cG9ydCBvcmcubXVzaWNicmFpbnouc2VhcmNoLmluZGV4LkRhdGFiYXNlSW5kZXg7CkBAIC0zMywy NDIgKzMwLDI5NiBAQAogICovCiBwdWJsaWMgY2xhc3MgRmluZFdvcmtUZXN0IHsKIAotICBwcml2 YXRlIEFic3RyYWN0U2VhcmNoU2VydmVyIHNzOwotICBwcml2YXRlIEFic3RyYWN0RGlzbWF4U2Vh cmNoU2VydmVyIHNkOworICAgIHByaXZhdGUgQWJzdHJhY3RTZWFyY2hTZXJ2ZXIgc3M7CisgICAg cHJpdmF0ZSBBYnN0cmFjdERpc21heFNlYXJjaFNlcnZlciBzZDsKIAotICBAQmVmb3JlCi0gIHB1 YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgUkFNRGlyZWN0b3J5IHJh bURpciA9IG5ldyBSQU1EaXJlY3RvcnkoKTsKLSAgICBPYmplY3RGYWN0b3J5IG9mID0gbmV3IE9i amVjdEZhY3RvcnkoKTsKKyAgICBAQmVmb3JlCisgICAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJv d3MgRXhjZXB0aW9uIHsKKyAgICAgICAgUkFNRGlyZWN0b3J5IHJhbURpciA9IG5ldyBSQU1EaXJl Y3RvcnkoKTsKKyAgICAgICAgT2JqZWN0RmFjdG9yeSBvZiA9IG5ldyBPYmplY3RGYWN0b3J5KCk7 CiAKLSAgICBBbmFseXplciBhbmFseXplciA9IERhdGFiYXNlSW5kZXguZ2V0QW5hbHl6ZXIoV29y a0luZGV4RmllbGQuY2xhc3MpOwotICAgIEluZGV4V3JpdGVyQ29uZmlnICB3cml0ZXJDb25maWcg PSBuZXcgSW5kZXhXcml0ZXJDb25maWcoTHVjZW5lVmVyc2lvbi5MVUNFTkVfVkVSU0lPTixhbmFs eXplcik7Ci0gICAgSW5kZXhXcml0ZXIgd3JpdGVyID0gbmV3IEluZGV4V3JpdGVyKHJhbURpciwg d3JpdGVyQ29uZmlnKTsKLSAgICB7Ci0gICAgICBNYkRvY3VtZW50IGRvYyA9IG5ldyBNYkRvY3Vt ZW50KCk7Ci0gICAgICBkb2MuYWRkRmllbGQoV29ya0luZGV4RmllbGQuV09SS19JRCwgIjRmZjg5 Y2YwLTg2YWYtMTFkZS05MGVkLTAwMWZjNmYxNzZmZiIpOwotICAgICAgZG9jLmFkZEZpZWxkKFdv cmtJbmRleEZpZWxkLldPUkssICJTeW1waG9ueSBOby4gNSIpOwotICAgICAgZG9jLmFkZEZpZWxk KFdvcmtJbmRleEZpZWxkLklTV0MsICJULTEwMTc3OTMwNC0xIik7Ci0gICAgICBkb2MuYWRkRmll bGQoV29ya0luZGV4RmllbGQuSVNXQywgIkItMTAxNzc5MzA0LTEiKTsKLSAgICAgIGRvYy5hZGRG aWVsZChXb3JrSW5kZXhGaWVsZC5BUlRJU1RfSUQsICIxZjlkZjE5Mi1hNjIxLTRmNTQtODg1MC0y YzUzNzNiN2VhYzkiKTsKLSAgICAgIGRvYy5hZGRGaWVsZChXb3JrSW5kZXhGaWVsZC5BUlRJU1Qs ICLQn9GR0YLRgCDQmNC70YzQuNGHINCn0LDQudC60L7QstGB0LrQuNC5Iik7Ci0gICAgICBkb2Mu YWRkRmllbGQoV29ya0luZGV4RmllbGQuQ09NTUVOVCwgImRlbW8iKTsKLSAgICAgIGRvYy5hZGRG aWVsZChXb3JrSW5kZXhGaWVsZC5MWVJJQ1NfTEFORywgImVuZyIpOwotICAgICAgZG9jLmFkZEZp ZWxkKFdvcmtJbmRleEZpZWxkLlRZUEUsICJPcGVyYSIpOwotICAgICAgZG9jLmFkZEZpZWxkKFdv cmtJbmRleEZpZWxkLkFMSUFTLCAiU3ltcDUiKTsKLSAgICAgIGRvYy5hZGRGaWVsZChXb3JrSW5k ZXhGaWVsZC5UQUcsICJjbGFzc2ljYWwiKTsKLSAgICAgIGRvYy5hZGRGaWVsZChXb3JrSW5kZXhG aWVsZC5UQUdDT1VOVCwgIjEwIik7CisgICAgICAgIEFuYWx5emVyIGFuYWx5emVyID0gRGF0YWJh c2VJbmRleC5nZXRBbmFseXplcihXb3JrSW5kZXhGaWVsZC5jbGFzcyk7CisgICAgICAgIEluZGV4 V3JpdGVyQ29uZmlnIHdyaXRlckNvbmZpZyA9IG5ldyBJbmRleFdyaXRlckNvbmZpZyhMdWNlbmVW ZXJzaW9uLkxVQ0VORV9WRVJTSU9OLCBhbmFseXplcik7CisgICAgICAgIEluZGV4V3JpdGVyIHdy aXRlciA9IG5ldyBJbmRleFdyaXRlcihyYW1EaXIsIHdyaXRlckNvbmZpZyk7CisgICAgICAgIHsK KyAgICAgICAgICAgIE1iRG9jdW1lbnQgZG9jID0gbmV3IE1iRG9jdW1lbnQoKTsKIAorICAgICAg ICAgICAgV29yayB3b3JrID0gb2YuY3JlYXRlV29yaygpOworICAgICAgICAgICAgZG9jLmFkZEZp ZWxkKFdvcmtJbmRleEZpZWxkLldPUktfSUQsICI0ZmY4OWNmMC04NmFmLTExZGUtOTBlZC0wMDFm YzZmMTc2ZmYiKTsKKyAgICAgICAgICAgIHdvcmsuc2V0SWQoIjRmZjg5Y2YwLTg2YWYtMTFkZS05 MGVkLTAwMWZjNmYxNzZmZiIpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZp ZWxkLldPUkssICJTeW1waG9ueSBOby4gNSIpOworICAgICAgICAgICAgd29yay5zZXRUaXRsZSgi U3ltcGhvbnkgTm8uIDUiKTsKIAotICAgICAgUmVsYXRpb25MaXN0IHJsID0gb2YuY3JlYXRlUmVs YXRpb25MaXN0KCk7Ci0gICAgICBybC5zZXRUYXJnZXRUeXBlKCJhcnRpc3QiKTsKLSAgICAgIHsK LSAgICAgICAgUmVsYXRpb24gcmVsYXRpb24gPSBvZi5jcmVhdGVSZWxhdGlvbigpOwotICAgICAg ICBBdHRyaWJ1dGVMaXN0IGFsICA9IG9mLmNyZWF0ZUF0dHJpYnV0ZUxpc3QoKTsKLSAgICAgICAg QXJ0aXN0IGFydGlzdCA9IG9mLmNyZWF0ZUFydGlzdCgpOwotICAgICAgICBhcnRpc3Quc2V0SWQo IjFmOWRmMTkyLWE2MjEtNGY1NC04ODUwLTJjNTM3M2I3ZWFjOSIpOwotICAgICAgICBhcnRpc3Qu c2V0TmFtZSgi0J/RkdGC0YAg0JjQu9GM0LjRhyDQp9Cw0LnQutC+0LLRgdC60LjQuSIpOwotICAg ICAgICBhcnRpc3Quc2V0U29ydE5hbWUoItCf0ZHRgtGAINCY0LvRjNC40Ycg0KfQsNC50LrQvtCy 0YHQutC40LkiKTsKLSAgICAgICAgcmVsYXRpb24uc2V0QXJ0aXN0KGFydGlzdCk7Ci0gICAgICAg IHJlbGF0aW9uLnNldFR5cGUoImNvbXBvc2VyIik7Ci0gICAgICAgIHJlbGF0aW9uLnNldERpcmVj dGlvbihEZWZEaXJlY3Rpb24uQkFDS1dBUkQpOwotICAgICAgICBhbC5nZXRBdHRyaWJ1dGUoKS5h ZGQoImFkZGl0aW9uYWwiKTsKLSAgICAgICAgcmVsYXRpb24uc2V0QXR0cmlidXRlTGlzdChhbCk7 Ci0gICAgICAgIHJsLmdldFJlbGF0aW9uKCkuYWRkKHJlbGF0aW9uKTsKLSAgICAgIH0KLSAgICAg IHsKLSAgICAgICAgUmVsYXRpb24gcmVsYXRpb24gPSBvZi5jcmVhdGVSZWxhdGlvbigpOwotICAg ICAgICBBdHRyaWJ1dGVMaXN0IGFsICA9IG9mLmNyZWF0ZUF0dHJpYnV0ZUxpc3QoKTsKLSAgICAg ICAgQXJ0aXN0IGFydGlzdCA9IG9mLmNyZWF0ZUFydGlzdCgpOwotICAgICAgICBhcnRpc3Quc2V0 SWQoImFiY2RlZmdoLWE2MjEtNGY1NC04ODUwLTJjNTM3M2I3ZWFjOSIpOwotICAgICAgICBhcnRp c3Quc2V0TmFtZSgiZnJhbmsiKTsKLSAgICAgICAgYXJ0aXN0LnNldFNvcnROYW1lKCJ0dXJuZXIi KTsKLSAgICAgICAgcmVsYXRpb24uc2V0QXJ0aXN0KGFydGlzdCk7Ci0gICAgICAgIHJlbGF0aW9u LnNldFR5cGUoIndyaXRlciIpOwotICAgICAgICByZWxhdGlvbi5zZXREaXJlY3Rpb24oRGVmRGly ZWN0aW9uLkJBQ0tXQVJEKTsKLSAgICAgICAgcmwuZ2V0UmVsYXRpb24oKS5hZGQocmVsYXRpb24p OwotICAgICAgfQotICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZpZWxkLkFSVElTVF9SRUxB VElPTiwgTU1EU2VyaWFsaXplci5zZXJpYWxpemUocmwpKTsKLSAgICAgIHdyaXRlci5hZGREb2N1 bWVudChkb2MuZ2V0THVjZW5lRG9jdW1lbnQoKSk7Ci0gICAgfQorICAgICAgICAgICAgSXN3Y0xp c3QgaXN3Y0xpc3QgPSBvZi5jcmVhdGVJc3djTGlzdCgpOworICAgICAgICAgICAgaXN3Y0xpc3Qu Z2V0SXN3YygpLmFkZCgiVC0xMDE3NzkzMDQtMSIpOworICAgICAgICAgICAgaXN3Y0xpc3QuZ2V0 SXN3YygpLmFkZCgiQi0xMDE3NzkzMDQtMSIpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKFdv cmtJbmRleEZpZWxkLklTV0MsICJULTEwMTc3OTMwNC0xIik7CisgICAgICAgICAgICBkb2MuYWRk RmllbGQoV29ya0luZGV4RmllbGQuSVNXQywgIkItMTAxNzc5MzA0LTEiKTsKKyAgICAgICAgICAg IHdvcmsuc2V0SXN3Y0xpc3QoaXN3Y0xpc3QpOwogCi0gICAgICB7Ci0gICAgICAgICAgTWJEb2N1 bWVudCBkb2MgPSBuZXcgTWJEb2N1bWVudCgpOwotICAgICAgICAgIGRvYy5hZGRGaWVsZChXb3Jr SW5kZXhGaWVsZC5XT1JLX0lELCAiYmJhMWRhMTYtNmEwZC0zMjk5LWFhY2YtMDQyZjhlMTNiMGI3 Iik7Ci0gICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZpZWxkLldPUkssICJEZWJhc2Vy Iik7Ci0gICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZpZWxkLkFSVElTVF9JRCwgIjc4 OWY2NzY4LTU4MzAtNGIwOC04YjRmLWYzODU2NmIyZWIxZCIpOwotICAgICAgICAgIGRvYy5hZGRG aWVsZChXb3JrSW5kZXhGaWVsZC5BUlRJU1QsICJCYWNrIEZyYW5jaXMiKTsKLSAgICAgICAgICBk b2MuYWRkRmllbGQoV29ya0luZGV4RmllbGQuTFlSSUNTX0xBTkcsICJlc3AiKTsKLSAgICAgICAg ICBkb2MuYWRkRmllbGQoV29ya0luZGV4RmllbGQuVFlQRSwgIlNvbmciKTsKLSAgICAgICAgICBk b2MuYWRkRmllbGQoV29ya0luZGV4RmllbGQuQUxJQVMsICJEZWJhc2VyIChDbGlmIE5vcnJlbGwg bWl4KSIpOwotICAgICAgICAgIGRvYy5hZGRGaWVsZChXb3JrSW5kZXhGaWVsZC5JU1dDLCAiLSIp OworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZpZWxkLkFSVElTVF9JRCwgIjFm OWRmMTkyLWE2MjEtNGY1NC04ODUwLTJjNTM3M2I3ZWFjOSIpOworICAgICAgICAgICAgZG9jLmFk ZEZpZWxkKFdvcmtJbmRleEZpZWxkLkFSVElTVCwgItCf0ZHRgtGAINCY0LvRjNC40Ycg0KfQsNC5 0LrQvtCy0YHQutC40LkiKTsKIAorICAgICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZp ZWxkLkNPTU1FTlQsICJkZW1vIik7CisgICAgICAgICAgICB3b3JrLnNldERpc2FtYmlndWF0aW9u KCJkZW1vIik7CiAKLSAgICAgICAgICBSZWxhdGlvbkxpc3QgcmwgPSBvZi5jcmVhdGVSZWxhdGlv bkxpc3QoKTsKLSAgICAgICAgICBybC5zZXRUYXJnZXRUeXBlKCJhcnRpc3QiKTsKLSAgICAgICAg ICB7Ci0gICAgICAgICAgICAgIFJlbGF0aW9uIHJlbGF0aW9uID0gb2YuY3JlYXRlUmVsYXRpb24o KTsKLSAgICAgICAgICAgICAgQXR0cmlidXRlTGlzdCBhbCAgPSBvZi5jcmVhdGVBdHRyaWJ1dGVM aXN0KCk7Ci0gICAgICAgICAgICAgIEFydGlzdCBhcnRpc3QgPSBvZi5jcmVhdGVBcnRpc3QoKTsK LSAgICAgICAgICAgICAgYXJ0aXN0LnNldElkKCI3ODlmNjc2OC01ODMwLTRiMDgtOGI0Zi1mMzg1 NjZiMmViMWQiKTsKLSAgICAgICAgICAgICAgYXJ0aXN0LnNldE5hbWUoIkJsYWNrIEZyYW5jaXMi KTsKLSAgICAgICAgICAgICAgYXJ0aXN0LnNldFNvcnROYW1lKCJGcmFuY2lzLCBCbGFjayIpOwot ICAgICAgICAgICAgICByZWxhdGlvbi5zZXRBcnRpc3QoYXJ0aXN0KTsKLSAgICAgICAgICAgICAg cmVsYXRpb24uc2V0VHlwZSgiY29tcG9zZXIiKTsKLSAgICAgICAgICAgICAgcmVsYXRpb24uc2V0 RGlyZWN0aW9uKERlZkRpcmVjdGlvbi5CQUNLV0FSRCk7Ci0gICAgICAgICAgICAgIGFsLmdldEF0 dHJpYnV0ZSgpLmFkZCgiYWRkaXRpb25hbCIpOwotICAgICAgICAgICAgICByZWxhdGlvbi5zZXRB dHRyaWJ1dGVMaXN0KGFsKTsKLSAgICAgICAgICAgICAgcmwuZ2V0UmVsYXRpb24oKS5hZGQocmVs YXRpb24pOwotICAgICAgICAgIH0KLSAgICAgICAgICBkb2MuYWRkRmllbGQoV29ya0luZGV4Rmll bGQuQVJUSVNUX1JFTEFUSU9OLCBNTURTZXJpYWxpemVyLnNlcmlhbGl6ZShybCkpOwotICAgICAg ICAgIHdyaXRlci5hZGREb2N1bWVudChkb2MuZ2V0THVjZW5lRG9jdW1lbnQoKSk7Ci0gICAgICB9 CisgICAgICAgICAgICBkb2MuYWRkRmllbGQoV29ya0luZGV4RmllbGQuTFlSSUNTX0xBTkcsICJl bmciKTsKKyAgICAgICAgICAgIHdvcmsuc2V0TGFuZ3VhZ2UoImVuZyIpOwogCi0gICAgewotICAg ICAgTWJEb2N1bWVudCBkb2MgPSBuZXcgTWJEb2N1bWVudCgpOwotICAgICAgZG9jLmFkZEZpZWxk KE1ldGFJbmRleEZpZWxkLk1FVEEsIE1ldGFJbmRleEZpZWxkLk1FVEFfVkFMVUUpOwotICAgICAg ZG9jLmFkZE51bWVyaWNGaWVsZChNZXRhSW5kZXhGaWVsZC5MQVNUX1VQREFURUQsIG5ldyBEYXRl KCkuZ2V0VGltZSgpKTsKLSAgICAgIHdyaXRlci5hZGREb2N1bWVudChkb2MuZ2V0THVjZW5lRG9j dW1lbnQoKSk7Ci0gICAgfQorICAgICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZpZWxk LlRZUEUsICJPcGVyYSIpOworICAgICAgICAgICAgd29yay5zZXRUeXBlKCJPcGVyYSIpOwogCi0g ICAgd3JpdGVyLmNsb3NlKCk7Ci0gICAgU2VhcmNoZXJNYW5hZ2VyIHNlYXJjaGVyTWFuYWdlciA9 IG5ldyBTZWFyY2hlck1hbmFnZXIocmFtRGlyLCBuZXcgTXVzaWNCcmFpbnpTZWFyY2hlckZhY3Rv cnkoUmVzb3VyY2VUeXBlLldPUkspKTsKLSAgICBzcyA9IG5ldyBXb3JrU2VhcmNoKHNlYXJjaGVy TWFuYWdlcik7Ci0gICAgc2QgPSBuZXcgV29ya0Rpc21heFNlYXJjaChzcyk7Ci0gIH0KKyAgICAg ICAgICAgIEFsaWFzTGlzdCBhbGlhc0xpc3QgPSBvZi5jcmVhdGVBbGlhc0xpc3QoKTsKKyAgICAg ICAgICAgIGRvYy5hZGRGaWVsZChXb3JrSW5kZXhGaWVsZC5BTElBUywgIlN5bXA1Iik7CisgICAg ICAgICAgICBBbGlhcyBhbGlhcyA9IG9mLmNyZWF0ZUFsaWFzKCk7CisgICAgICAgICAgICBhbGlh cy5zZXRDb250ZW50KCJTeW1wNSIpOworICAgICAgICAgICAgYWxpYXNMaXN0LmdldEFsaWFzKCku YWRkKGFsaWFzKTsKKyAgICAgICAgICAgIHdvcmsuc2V0QWxpYXNMaXN0KGFsaWFzTGlzdCk7CiAK LSAgQFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdEZpbmRXb3JrQnlJZCgpIHRocm93cyBFeGNlcHRp b24gewotICAgIFJlc3VsdHMgcmVzID0gc3Muc2VhcmNoKCJ3aWQ6XCI0ZmY4OWNmMC04NmFmLTEx ZGUtOTBlZC0wMDFmYzZmMTc2ZmZcIiIsIDAsIDEwKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgcmVz LmdldFRvdGFsSGl0cygpKTsKLSAgICBSZXN1bHQgcmVzdWx0ID0gcmVzLnJlc3VsdHMuZ2V0KDAp OwotICAgIE1iRG9jdW1lbnQgZG9jID0gcmVzdWx0LmdldERvYygpOwotICAgIGFzc2VydEVxdWFs cygiNGZmODljZjAtODZhZi0xMWRlLTkwZWQtMDAxZmM2ZjE3NmZmIiwgZG9jLmdldChXb3JrSW5k ZXhGaWVsZC5XT1JLX0lEKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJTeW1waG9ueSBOby4gNSIsIGRv Yy5nZXQoV29ya0luZGV4RmllbGQuV09SSykpOwotICB9CisgICAgICAgICAgICBkb2MuYWRkRmll bGQoV29ya0luZGV4RmllbGQuVEFHLCAiY2xhc3NpY2FsIik7CisgICAgICAgICAgICBUYWdMaXN0 IHRhZ0xpc3QgPSBvZi5jcmVhdGVUYWdMaXN0KCk7CisgICAgICAgICAgICBUYWcgdGFnID0gb2Yu Y3JlYXRlVGFnKCk7CisgICAgICAgICAgICB0YWcuc2V0TmFtZSgiY2xhc3NpY2FsIik7CisgICAg ICAgICAgICB0YWcuc2V0Q291bnQoQmlnSW50ZWdlci52YWx1ZU9mKDEwKSk7CisgICAgICAgICAg ICB0YWdMaXN0LmdldFRhZygpLmFkZCh0YWcpOworICAgICAgICAgICAgd29yay5zZXRUYWdMaXN0 KHRhZ0xpc3QpOwogCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RGaW5kV29ya0J5TmFtZSgp IHRocm93cyBFeGNlcHRpb24gewotICAgIFJlc3VsdHMgcmVzID0gc3Muc2VhcmNoKCJ3b3JrOlwi U3ltcGhvbnkgTm8uIDVcIiIsIDAsIDEwKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgcmVzLmdldFRv dGFsSGl0cygpKTsKLSAgICBSZXN1bHQgcmVzdWx0ID0gcmVzLnJlc3VsdHMuZ2V0KDApOwotICAg IE1iRG9jdW1lbnQgZG9jID0gcmVzdWx0LmdldERvYygpOwotICAgIGFzc2VydEVxdWFscygiNGZm ODljZjAtODZhZi0xMWRlLTkwZWQtMDAxZmM2ZjE3NmZmIiwgZG9jLmdldChXb3JrSW5kZXhGaWVs ZC5XT1JLX0lEKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJTeW1waG9ueSBOby4gNSIsIGRvYy5nZXQo V29ya0luZGV4RmllbGQuV09SSykpOwotICB9CiAKLSAgQFRlc3QKLSAgcHVibGljIHZvaWQgdGVz dEZpbmRXb3JrQnlMeXJpY3NMYW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgUmVzdWx0cyBy ZXMgPSBzcy5zZWFyY2goImxhbmc6ZW5nIiwgMCwgMTApOwotICAgIGFzc2VydEVxdWFscygxLCBy ZXMuZ2V0VG90YWxIaXRzKCkpOwotICAgIFJlc3VsdCByZXN1bHQgPSByZXMucmVzdWx0cy5nZXQo MCk7Ci0gICAgTWJEb2N1bWVudCBkb2MgPSByZXN1bHQuZ2V0RG9jKCk7Ci0gICAgYXNzZXJ0RXF1 YWxzKCI0ZmY4OWNmMC04NmFmLTExZGUtOTBlZC0wMDFmYzZmMTc2ZmYiLCBkb2MuZ2V0KFdvcmtJ bmRleEZpZWxkLldPUktfSUQpKTsKLSAgICBhc3NlcnRFcXVhbHMoIlN5bXBob255IE5vLiA1Iiwg ZG9jLmdldChXb3JrSW5kZXhGaWVsZC5XT1JLKSk7Ci0gIH0KKyAgICAgICAgICAgIFJlbGF0aW9u TGlzdCBybCA9IG9mLmNyZWF0ZVJlbGF0aW9uTGlzdCgpOworICAgICAgICAgICAgcmwuc2V0VGFy Z2V0VHlwZSgiYXJ0aXN0Iik7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUmVsYXRp b24gcmVsYXRpb24gPSBvZi5jcmVhdGVSZWxhdGlvbigpOworICAgICAgICAgICAgICAgIEF0dHJp YnV0ZUxpc3QgYWwgPSBvZi5jcmVhdGVBdHRyaWJ1dGVMaXN0KCk7CisgICAgICAgICAgICAgICAg QXJ0aXN0IGFydGlzdDEgPSBvZi5jcmVhdGVBcnRpc3QoKTsKKyAgICAgICAgICAgICAgICBhcnRp c3QxLnNldElkKCIxZjlkZjE5Mi1hNjIxLTRmNTQtODg1MC0yYzUzNzNiN2VhYzkiKTsKKyAgICAg ICAgICAgICAgICBhcnRpc3QxLnNldE5hbWUoItCf0ZHRgtGAINCY0LvRjNC40Ycg0KfQsNC50LrQ vtCy0YHQutC40LkiKTsKKyAgICAgICAgICAgICAgICBhcnRpc3QxLnNldFNvcnROYW1lKCLQn9GR 0YLRgCDQmNC70YzQuNGHINCn0LDQudC60L7QstGB0LrQuNC5Iik7CisgICAgICAgICAgICAgICAg cmVsYXRpb24uc2V0QXJ0aXN0KGFydGlzdDEpOworICAgICAgICAgICAgICAgIHJlbGF0aW9uLnNl dFR5cGUoImNvbXBvc2VyIik7CisgICAgICAgICAgICAgICAgcmVsYXRpb24uc2V0RGlyZWN0aW9u KERlZkRpcmVjdGlvbi5CQUNLV0FSRCk7CisgICAgICAgICAgICAgICAgYWwuZ2V0QXR0cmlidXRl KCkuYWRkKCJhZGRpdGlvbmFsIik7CisgICAgICAgICAgICAgICAgcmVsYXRpb24uc2V0QXR0cmli dXRlTGlzdChhbCk7CisgICAgICAgICAgICAgICAgcmwuZ2V0UmVsYXRpb24oKS5hZGQocmVsYXRp b24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFJlbGF0 aW9uIHJlbGF0aW9uID0gb2YuY3JlYXRlUmVsYXRpb24oKTsKKyAgICAgICAgICAgICAgICBBdHRy aWJ1dGVMaXN0IGFsID0gb2YuY3JlYXRlQXR0cmlidXRlTGlzdCgpOworICAgICAgICAgICAgICAg IEFydGlzdCBhcnRpc3QxID0gb2YuY3JlYXRlQXJ0aXN0KCk7CisgICAgICAgICAgICAgICAgYXJ0 aXN0MS5zZXRJZCgiYWJjZGVmZ2gtYTYyMS00ZjU0LTg4NTAtMmM1MzczYjdlYWM5Iik7CisgICAg ICAgICAgICAgICAgYXJ0aXN0MS5zZXROYW1lKCJmcmFuayIpOworICAgICAgICAgICAgICAgIGFy dGlzdDEuc2V0U29ydE5hbWUoInR1cm5lciIpOworICAgICAgICAgICAgICAgIHJlbGF0aW9uLnNl dEFydGlzdChhcnRpc3QxKTsKKyAgICAgICAgICAgICAgICByZWxhdGlvbi5zZXRUeXBlKCJ3cml0 ZXIiKTsKKyAgICAgICAgICAgICAgICByZWxhdGlvbi5zZXREaXJlY3Rpb24oRGVmRGlyZWN0aW9u LkJBQ0tXQVJEKTsKKyAgICAgICAgICAgICAgICBybC5nZXRSZWxhdGlvbigpLmFkZChyZWxhdGlv bik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3b3JrLmdldFJlbGF0aW9uTGlzdCgpLmFk ZChybCk7CisgICAgICAgICAgICBTdHJpbmcgc3RvcmUgPSBNTURTZXJpYWxpemVyLnNlcmlhbGl6 ZSh3b3JrKTsKKyAgICAgICAgICAgIGRvYy5hZGRGaWVsZChXb3JrSW5kZXhGaWVsZC5XT1JLX1NU T1JFLCBzdG9yZSk7CisgICAgICAgICAgICB3cml0ZXIuYWRkRG9jdW1lbnQoZG9jLmdldEx1Y2Vu ZURvY3VtZW50KCkpOworICAgICAgICB9CiAKLSAgQFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdEZp bmRXb3JrQnlEaXNtYXgxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgUmVzdWx0cyByZXMgPSBz ZC5zZWFyY2goIlN5bXBob255IE5vLiA1IiwgMCwgMTApOwotICAgIGFzc2VydEVxdWFscygxLCBy ZXMuZ2V0VG90YWxIaXRzKCkpOwotICAgIFJlc3VsdCByZXN1bHQgPSByZXMucmVzdWx0cy5nZXQo MCk7Ci0gICAgTWJEb2N1bWVudCBkb2MgPSByZXN1bHQuZ2V0RG9jKCk7Ci0gICAgYXNzZXJ0RXF1 YWxzKCI0ZmY4OWNmMC04NmFmLTExZGUtOTBlZC0wMDFmYzZmMTc2ZmYiLCBkb2MuZ2V0KFdvcmtJ bmRleEZpZWxkLldPUktfSUQpKTsKLSAgICBhc3NlcnRFcXVhbHMoIlN5bXBob255IE5vLiA1Iiwg ZG9jLmdldChXb3JrSW5kZXhGaWVsZC5XT1JLKSk7Ci0gIH0KKyAgICAgICAgeworICAgICAgICAg ICAgV29yayB3b3JrID0gb2YuY3JlYXRlV29yaygpOworICAgICAgICAgICAgTWJEb2N1bWVudCBk b2MgPSBuZXcgTWJEb2N1bWVudCgpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRl eEZpZWxkLldPUktfSUQsICJiYmExZGExNi02YTBkLTMyOTktYWFjZi0wNDJmOGUxM2IwYjciKTsK KyAgICAgICAgICAgIHdvcmsuc2V0SWQoImJiYTFkYTE2LTZhMGQtMzI5OS1hYWNmLTA0MmY4ZTEz YjBiNyIpOwogCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RGaW5kV29ya0J5RGlzbWF4Migp IHRocm93cyBFeGNlcHRpb24gewotICAgIFJlc3VsdHMgcmVzID0gc2Quc2VhcmNoKCJTeW1waG9u eSIsIDAsIDEwKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgcmVzLmdldFRvdGFsSGl0cygpKTsKLSAg ICBSZXN1bHQgcmVzdWx0ID0gcmVzLnJlc3VsdHMuZ2V0KDApOwotICAgIE1iRG9jdW1lbnQgZG9j ID0gcmVzdWx0LmdldERvYygpOwotICAgIGFzc2VydEVxdWFscygiNGZmODljZjAtODZhZi0xMWRl LTkwZWQtMDAxZmM2ZjE3NmZmIiwgZG9jLmdldChXb3JrSW5kZXhGaWVsZC5XT1JLX0lEKSk7Ci0g ICAgYXNzZXJ0RXF1YWxzKCJTeW1waG9ueSBOby4gNSIsIGRvYy5nZXQoV29ya0luZGV4RmllbGQu V09SSykpOwotICB9CisgICAgICAgICAgICBkb2MuYWRkRmllbGQoV29ya0luZGV4RmllbGQuV09S SywgIkRlYmFzZXIiKTsKKyAgICAgICAgICAgIHdvcmsuc2V0VGl0bGUoIkRlYmFzZXIiKTsKIAot ICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0RmluZFdvcmtCeUNvbW1lbnQoKSB0aHJvd3MgRXhj ZXB0aW9uIHsKLSAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgiY29tbWVudDpkZW1vIiwgMCwg MTApOwotICAgIGFzc2VydEVxdWFscygxLCByZXMuZ2V0VG90YWxIaXRzKCkpOwotICAgIFJlc3Vs dCByZXN1bHQgPSByZXMucmVzdWx0cy5nZXQoMCk7Ci0gICAgTWJEb2N1bWVudCBkb2MgPSByZXN1 bHQuZ2V0RG9jKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKCI0ZmY4OWNmMC04NmFmLTExZGUtOTBlZC0w MDFmYzZmMTc2ZmYiLCBkb2MuZ2V0KFdvcmtJbmRleEZpZWxkLldPUktfSUQpKTsKLSAgICBhc3Nl cnRFcXVhbHMoImRlbW8iLCBkb2MuZ2V0KFdvcmtJbmRleEZpZWxkLkNPTU1FTlQpKTsKLSAgfQor ICAgICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZpZWxkLkxZUklDU19MQU5HLCAiZXNw Iik7CisgICAgICAgICAgICB3b3JrLnNldExhbmd1YWdlKCJlc3AiKTsKIAotICBAVGVzdAotICBw dWJsaWMgdm9pZCB0ZXN0RmluZFdvcmtCeUFydGlzdCgpIHRocm93cyBFeGNlcHRpb24gewotICAg IFJlc3VsdHMgcmVzID0gc3Muc2VhcmNoKCJhcnRpc3Q6XCLQn9GR0YLRgCDQmNC70YzQuNGHINCn 0LDQudC60L7QstGB0LrQuNC5XCIiLCAwLCAxMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIHJlcy5n ZXRUb3RhbEhpdHMoKSk7Ci0gICAgUmVzdWx0IHJlc3VsdCA9IHJlcy5yZXN1bHRzLmdldCgwKTsK LSAgICBNYkRvY3VtZW50IGRvYyA9IHJlc3VsdC5nZXREb2MoKTsKLSAgICBhc3NlcnRFcXVhbHMo IjRmZjg5Y2YwLTg2YWYtMTFkZS05MGVkLTAwMWZjNmYxNzZmZiIsIGRvYy5nZXQoV29ya0luZGV4 RmllbGQuV09SS19JRCkpOwotICAgIGFzc2VydEVxdWFscygiU3ltcGhvbnkgTm8uIDUiLCBkb2Mu Z2V0KFdvcmtJbmRleEZpZWxkLldPUkspKTsKLSAgfQorICAgICAgICAgICAgZG9jLmFkZEZpZWxk KFdvcmtJbmRleEZpZWxkLlRZUEUsICJTb25nIik7CisgICAgICAgICAgICB3b3JrLnNldFR5cGUo IlNvbmciKTsKIAorICAgICAgICAgICAgQWxpYXNMaXN0IGFsaWFzTGlzdCA9IG9mLmNyZWF0ZUFs aWFzTGlzdCgpOworICAgICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZpZWxkLkFMSUFT LCAiRGViYXNlciAoQ2xpZiBOb3JyZWxsIG1peCkiKTsKKyAgICAgICAgICAgIEFsaWFzIGFsaWFz ID0gb2YuY3JlYXRlQWxpYXMoKTsKKyAgICAgICAgICAgIGFsaWFzLnNldENvbnRlbnQoIkRlYmFz ZXIgKENsaWYgTm9ycmVsbCBtaXgpIik7CisgICAgICAgICAgICBhbGlhc0xpc3QuZ2V0QWxpYXMo KS5hZGQoYWxpYXMpOworICAgICAgICAgICAgd29yay5zZXRBbGlhc0xpc3QoYWxpYXNMaXN0KTsK IAotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0RmluZFdvcmtCeUlTV0MoKSB0aHJvd3MgRXhj ZXB0aW9uIHsKLSAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgiaXN3YzpcIlQtMTAxNzc5MzA0 LTFcIiIsIDAsIDEwKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwgcmVzLmdldFRvdGFsSGl0cygpKTsK LSAgICBSZXN1bHQgcmVzdWx0ID0gcmVzLnJlc3VsdHMuZ2V0KDApOwotICAgIE1iRG9jdW1lbnQg ZG9jID0gcmVzdWx0LmdldERvYygpOwotICAgIGFzc2VydEVxdWFscygiNGZmODljZjAtODZhZi0x MWRlLTkwZWQtMDAxZmM2ZjE3NmZmIiwgZG9jLmdldChXb3JrSW5kZXhGaWVsZC5XT1JLX0lEKSk7 Ci0gICAgYXNzZXJ0RXF1YWxzKCJTeW1waG9ueSBOby4gNSIsIGRvYy5nZXQoV29ya0luZGV4Rmll bGQuV09SSykpOwotICB9CisgICAgICAgICAgICBkb2MuYWRkRmllbGQoV29ya0luZGV4RmllbGQu SVNXQywgIi0iKTsKIAotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0RmluZFdvcmtCeVR5cGUo KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgidHlwZTpc Im9wZXJhXCIiLCAwLCAxMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIHJlcy5nZXRUb3RhbEhpdHMo KSk7Ci0gICAgUmVzdWx0IHJlc3VsdCA9IHJlcy5yZXN1bHRzLmdldCgwKTsKLSAgICBNYkRvY3Vt ZW50IGRvYyA9IHJlc3VsdC5nZXREb2MoKTsKLSAgICBhc3NlcnRFcXVhbHMoIjRmZjg5Y2YwLTg2 YWYtMTFkZS05MGVkLTAwMWZjNmYxNzZmZiIsIGRvYy5nZXQoV29ya0luZGV4RmllbGQuV09SS19J RCkpOwotICAgIGFzc2VydEVxdWFscygiU3ltcGhvbnkgTm8uIDUiLCBkb2MuZ2V0KFdvcmtJbmRl eEZpZWxkLldPUkspKTsKLSAgfQogCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RGaW5kV29y a0J5QWxpYXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJj aCgiYWxpYXM6c3ltcDUiLCAwLCAxMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIHJlcy5nZXRUb3Rh bEhpdHMoKSk7Ci0gICAgUmVzdWx0IHJlc3VsdCA9IHJlcy5yZXN1bHRzLmdldCgwKTsKLSAgICBN YkRvY3VtZW50IGRvYyA9IHJlc3VsdC5nZXREb2MoKTsKLSAgICBhc3NlcnRFcXVhbHMoIjRmZjg5 Y2YwLTg2YWYtMTFkZS05MGVkLTAwMWZjNmYxNzZmZiIsIGRvYy5nZXQoV29ya0luZGV4RmllbGQu V09SS19JRCkpOwotICAgIGFzc2VydEVxdWFscygiU3ltcGhvbnkgTm8uIDUiLCBkb2MuZ2V0KFdv cmtJbmRleEZpZWxkLldPUkspKTsKLSAgfQorICAgICAgICAgICAgUmVsYXRpb25MaXN0IHJsID0g b2YuY3JlYXRlUmVsYXRpb25MaXN0KCk7CisgICAgICAgICAgICBybC5zZXRUYXJnZXRUeXBlKCJh cnRpc3QiKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBSZWxhdGlvbiByZWxhdGlv biA9IG9mLmNyZWF0ZVJlbGF0aW9uKCk7CisgICAgICAgICAgICAgICAgQXR0cmlidXRlTGlzdCBh bCA9IG9mLmNyZWF0ZUF0dHJpYnV0ZUxpc3QoKTsKKyAgICAgICAgICAgICAgICBBcnRpc3QgYXJ0 aXN0ID0gb2YuY3JlYXRlQXJ0aXN0KCk7CisgICAgICAgICAgICAgICAgYXJ0aXN0LnNldElkKCI3 ODlmNjc2OC01ODMwLTRiMDgtOGI0Zi1mMzg1NjZiMmViMWQiKTsKKyAgICAgICAgICAgICAgICBh cnRpc3Quc2V0TmFtZSgiQmxhY2sgRnJhbmNpcyIpOworICAgICAgICAgICAgICAgIGFydGlzdC5z ZXRTb3J0TmFtZSgiRnJhbmNpcywgQmxhY2siKTsKKyAgICAgICAgICAgICAgICBkb2MuYWRkRmll bGQoV29ya0luZGV4RmllbGQuQVJUSVNUX0lELCAiNzg5ZjY3NjgtNTgzMC00YjA4LThiNGYtZjM4 NTY2YjJlYjFkIik7CisgICAgICAgICAgICAgICAgZG9jLmFkZEZpZWxkKFdvcmtJbmRleEZpZWxk LkFSVElTVCwgIkJhY2sgRnJhbmNpcyIpOworICAgICAgICAgICAgICAgIHJlbGF0aW9uLnNldEFy dGlzdChhcnRpc3QpOworICAgICAgICAgICAgICAgIHJlbGF0aW9uLnNldFR5cGUoImNvbXBvc2Vy Iik7CisgICAgICAgICAgICAgICAgcmVsYXRpb24uc2V0RGlyZWN0aW9uKERlZkRpcmVjdGlvbi5C QUNLV0FSRCk7CisgICAgICAgICAgICAgICAgYWwuZ2V0QXR0cmlidXRlKCkuYWRkKCJhZGRpdGlv bmFsIik7CisgICAgICAgICAgICAgICAgcmVsYXRpb24uc2V0QXR0cmlidXRlTGlzdChhbCk7Cisg ICAgICAgICAgICAgICAgcmwuZ2V0UmVsYXRpb24oKS5hZGQocmVsYXRpb24pOworICAgICAgICAg ICAgfQorICAgICAgICAgICAgd29yay5nZXRSZWxhdGlvbkxpc3QoKS5hZGQocmwpOworICAgICAg ICAgICAgU3RyaW5nIHN0b3JlID0gTU1EU2VyaWFsaXplci5zZXJpYWxpemUod29yayk7CisgICAg ICAgICAgICBkb2MuYWRkRmllbGQoV29ya0luZGV4RmllbGQuV09SS19TVE9SRSwgc3RvcmUpOwog Ci0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RGaW5kV29ya0J5VGFnKCkgdGhyb3dzIEV4Y2Vw dGlvbiB7Ci0gICAgUmVzdWx0cyByZXMgPSBzcy5zZWFyY2goInRhZzpjbGFzc2ljYWwiLCAwLCAx MCk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIHJlcy5nZXRUb3RhbEhpdHMoKSk7Ci0gICAgUmVzdWx0 IHJlc3VsdCA9IHJlcy5yZXN1bHRzLmdldCgwKTsKLSAgICBNYkRvY3VtZW50IGRvYyA9IHJlc3Vs dC5nZXREb2MoKTsKLSAgICBhc3NlcnRFcXVhbHMoIjRmZjg5Y2YwLTg2YWYtMTFkZS05MGVkLTAw MWZjNmYxNzZmZiIsIGRvYy5nZXQoV29ya0luZGV4RmllbGQuV09SS19JRCkpOwotICAgIGFzc2Vy dEVxdWFscygiU3ltcGhvbnkgTm8uIDUiLCBkb2MuZ2V0KFdvcmtJbmRleEZpZWxkLldPUkspKTsK LSAgfQorICAgICAgICAgICAgd3JpdGVyLmFkZERvY3VtZW50KGRvYy5nZXRMdWNlbmVEb2N1bWVu dCgpKTsKKyAgICAgICAgfQogCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RGaW5kV29ya0J5 RGVmYXVsdFVzaW5nTmFtZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFJlc3VsdHMgcmVzID0g c3Muc2VhcmNoKCJcIlN5bXBob255IE5vLiA1XCIiLCAwLCAxMCk7Ci0gICAgYXNzZXJ0RXF1YWxz KDEsIHJlcy5nZXRUb3RhbEhpdHMoKSk7Ci0gICAgUmVzdWx0IHJlc3VsdCA9IHJlcy5yZXN1bHRz LmdldCgwKTsKLSAgICBNYkRvY3VtZW50IGRvYyA9IHJlc3VsdC5nZXREb2MoKTsKLSAgICBhc3Nl cnRFcXVhbHMoIjRmZjg5Y2YwLTg2YWYtMTFkZS05MGVkLTAwMWZjNmYxNzZmZiIsIGRvYy5nZXQo V29ya0luZGV4RmllbGQuV09SS19JRCkpOwotICAgIGFzc2VydEVxdWFscygiU3ltcGhvbnkgTm8u IDUiLCBkb2MuZ2V0KFdvcmtJbmRleEZpZWxkLldPUkspKTsKLSAgfQorICAgICAgICB7CisgICAg ICAgICAgICBNYkRvY3VtZW50IGRvYyA9IG5ldyBNYkRvY3VtZW50KCk7CisgICAgICAgICAgICBk b2MuYWRkRmllbGQoTWV0YUluZGV4RmllbGQuTUVUQSwgTWV0YUluZGV4RmllbGQuTUVUQV9WQUxV RSk7CisgICAgICAgICAgICBkb2MuYWRkTnVtZXJpY0ZpZWxkKE1ldGFJbmRleEZpZWxkLkxBU1Rf VVBEQVRFRCwgbmV3IERhdGUoKS5nZXRUaW1lKCkpOworICAgICAgICAgICAgd3JpdGVyLmFkZERv Y3VtZW50KGRvYy5nZXRMdWNlbmVEb2N1bWVudCgpKTsKKyAgICAgICAgfQogCi0gIEBUZXN0Ci0g IHB1YmxpYyB2b2lkIHRlc3RGaW5kV29ya0J5RGVmYXVsdFVzaW5nQWxpYXMoKSB0aHJvd3MgRXhj ZXB0aW9uIHsKLSAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgic3ltcDUiLCAwLCAxMCk7Ci0g ICAgYXNzZXJ0RXF1YWxzKDEsIHJlcy5nZXRUb3RhbEhpdHMoKSk7Ci0gICAgUmVzdWx0IHJlc3Vs dCA9IHJlcy5yZXN1bHRzLmdldCgwKTsKLSAgICBNYkRvY3VtZW50IGRvYyA9IHJlc3VsdC5nZXRE b2MoKTsKLSAgICBhc3NlcnRFcXVhbHMoIjRmZjg5Y2YwLTg2YWYtMTFkZS05MGVkLTAwMWZjNmYx NzZmZiIsIGRvYy5nZXQoV29ya0luZGV4RmllbGQuV09SS19JRCkpOwotICAgIGFzc2VydEVxdWFs cygiU3ltcGhvbnkgTm8uIDUiLCBkb2MuZ2V0KFdvcmtJbmRleEZpZWxkLldPUkspKTsKLSAgfQor ICAgICAgICB3cml0ZXIuY2xvc2UoKTsKKyAgICAgICAgU2VhcmNoZXJNYW5hZ2VyIHNlYXJjaGVy TWFuYWdlciA9IG5ldyBTZWFyY2hlck1hbmFnZXIocmFtRGlyLCBuZXcgTXVzaWNCcmFpbnpTZWFy Y2hlckZhY3RvcnkoUmVzb3VyY2VUeXBlLldPUkspKTsKKyAgICAgICAgc3MgPSBuZXcKIAorICAg ICAgICAgICAgICAgIFdvcmtTZWFyY2goc2VhcmNoZXJNYW5hZ2VyKTsKKworICAgICAgICBzZCA9 IG5ldworCisgICAgICAgICAgICAgICAgV29ya0Rpc21heFNlYXJjaChzcyk7CisKKyAgICB9CisK ICAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RGaW5kV29ya0J5SWQoKSB0aHJvd3MgRXhj ZXB0aW9uIHsKKyAgICAgICAgUmVzdWx0cyByZXMgPSBzcy5zZWFyY2goIndpZDpcIjRmZjg5Y2Yw LTg2YWYtMTFkZS05MGVkLTAwMWZjNmYxNzZmZlwiIiwgMCwgMTApOworICAgICAgICBhc3NlcnRF cXVhbHMoMSwgcmVzLmdldFRvdGFsSGl0cygpKTsKKyAgICAgICAgUmVzdWx0IHJlc3VsdCA9IHJl cy5yZXN1bHRzLmdldCgwKTsKKyAgICAgICAgTWJEb2N1bWVudCBkb2MgPSByZXN1bHQuZ2V0RG9j KCk7CisgICAgICAgIGFzc2VydEVxdWFscygiNGZmODljZjAtODZhZi0xMWRlLTkwZWQtMDAxZmM2 ZjE3NmZmIiwgZG9jLmdldChXb3JrSW5kZXhGaWVsZC5XT1JLX0lEKSk7CisgICAgICAgIGFzc2Vy dEVxdWFscygiU3ltcGhvbnkgTm8uIDUiLCBkb2MuZ2V0KFdvcmtJbmRleEZpZWxkLldPUkspKTsK KyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RGaW5kV29ya0J5TmFtZSgp IHRocm93cyBFeGNlcHRpb24geworICAgICAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgid29y azpcIlN5bXBob255IE5vLiA1XCIiLCAwLCAxMCk7CisgICAgICAgIGFzc2VydEVxdWFscygxLCBy ZXMuZ2V0VG90YWxIaXRzKCkpOworICAgICAgICBSZXN1bHQgcmVzdWx0ID0gcmVzLnJlc3VsdHMu Z2V0KDApOworICAgICAgICBNYkRvY3VtZW50IGRvYyA9IHJlc3VsdC5nZXREb2MoKTsKKyAgICAg ICAgYXNzZXJ0RXF1YWxzKCI0ZmY4OWNmMC04NmFmLTExZGUtOTBlZC0wMDFmYzZmMTc2ZmYiLCBk b2MuZ2V0KFdvcmtJbmRleEZpZWxkLldPUktfSUQpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJT eW1waG9ueSBOby4gNSIsIGRvYy5nZXQoV29ya0luZGV4RmllbGQuV09SSykpOworICAgIH0KKwor ICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEZpbmRXb3JrQnlMeXJpY3NMYW5nKCkgdGhy b3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFJlc3VsdHMgcmVzID0gc3Muc2VhcmNoKCJsYW5nOmVu ZyIsIDAsIDEwKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIHJlcy5nZXRUb3RhbEhpdHMoKSk7 CisgICAgICAgIFJlc3VsdCByZXN1bHQgPSByZXMucmVzdWx0cy5nZXQoMCk7CisgICAgICAgIE1i RG9jdW1lbnQgZG9jID0gcmVzdWx0LmdldERvYygpOworICAgICAgICBhc3NlcnRFcXVhbHMoIjRm Zjg5Y2YwLTg2YWYtMTFkZS05MGVkLTAwMWZjNmYxNzZmZiIsIGRvYy5nZXQoV29ya0luZGV4Rmll bGQuV09SS19JRCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoIlN5bXBob255IE5vLiA1IiwgZG9j LmdldChXb3JrSW5kZXhGaWVsZC5XT1JLKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJs aWMgdm9pZCB0ZXN0RmluZFdvcmtCeURpc21heDEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAg ICAgUmVzdWx0cyByZXMgPSBzZC5zZWFyY2goIlN5bXBob255IE5vLiA1IiwgMCwgMTApOworICAg ICAgICBhc3NlcnRFcXVhbHMoMSwgcmVzLmdldFRvdGFsSGl0cygpKTsKKyAgICAgICAgUmVzdWx0 IHJlc3VsdCA9IHJlcy5yZXN1bHRzLmdldCgwKTsKKyAgICAgICAgTWJEb2N1bWVudCBkb2MgPSBy ZXN1bHQuZ2V0RG9jKCk7CisgICAgICAgIGFzc2VydEVxdWFscygiNGZmODljZjAtODZhZi0xMWRl LTkwZWQtMDAxZmM2ZjE3NmZmIiwgZG9jLmdldChXb3JrSW5kZXhGaWVsZC5XT1JLX0lEKSk7Cisg ICAgICAgIGFzc2VydEVxdWFscygiU3ltcGhvbnkgTm8uIDUiLCBkb2MuZ2V0KFdvcmtJbmRleEZp ZWxkLldPUkspKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RGaW5k V29ya0J5RGlzbWF4MigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBSZXN1bHRzIHJlcyA9 IHNkLnNlYXJjaCgiU3ltcGhvbnkiLCAwLCAxMCk7CisgICAgICAgIGFzc2VydEVxdWFscygxLCBy ZXMuZ2V0VG90YWxIaXRzKCkpOworICAgICAgICBSZXN1bHQgcmVzdWx0ID0gcmVzLnJlc3VsdHMu Z2V0KDApOworICAgICAgICBNYkRvY3VtZW50IGRvYyA9IHJlc3VsdC5nZXREb2MoKTsKKyAgICAg ICAgYXNzZXJ0RXF1YWxzKCI0ZmY4OWNmMC04NmFmLTExZGUtOTBlZC0wMDFmYzZmMTc2ZmYiLCBk b2MuZ2V0KFdvcmtJbmRleEZpZWxkLldPUktfSUQpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJT eW1waG9ueSBOby4gNSIsIGRvYy5nZXQoV29ya0luZGV4RmllbGQuV09SSykpOworICAgIH0KKwor ICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEZpbmRXb3JrQnlDb21tZW50KCkgdGhyb3dz IEV4Y2VwdGlvbiB7CisgICAgICAgIFJlc3VsdHMgcmVzID0gc3Muc2VhcmNoKCJjb21tZW50OmRl bW8iLCAwLCAxMCk7CisgICAgICAgIGFzc2VydEVxdWFscygxLCByZXMuZ2V0VG90YWxIaXRzKCkp OworICAgICAgICBSZXN1bHQgcmVzdWx0ID0gcmVzLnJlc3VsdHMuZ2V0KDApOworICAgICAgICBN YkRvY3VtZW50IGRvYyA9IHJlc3VsdC5nZXREb2MoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCI0 ZmY4OWNmMC04NmFmLTExZGUtOTBlZC0wMDFmYzZmMTc2ZmYiLCBkb2MuZ2V0KFdvcmtJbmRleEZp ZWxkLldPUktfSUQpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJkZW1vIiwgZG9jLmdldChXb3Jr SW5kZXhGaWVsZC5DT01NRU5UKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9p ZCB0ZXN0RmluZFdvcmtCeUFydGlzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBSZXN1 bHRzIHJlcyA9IHNzLnNlYXJjaCgiYXJ0aXN0Olwi0J/RkdGC0YAg0JjQu9GM0LjRhyDQp9Cw0LnQ utC+0LLRgdC60LjQuVwiIiwgMCwgMTApOworICAgICAgICBhc3NlcnRFcXVhbHMoMSwgcmVzLmdl dFRvdGFsSGl0cygpKTsKKyAgICAgICAgUmVzdWx0IHJlc3VsdCA9IHJlcy5yZXN1bHRzLmdldCgw KTsKKyAgICAgICAgTWJEb2N1bWVudCBkb2MgPSByZXN1bHQuZ2V0RG9jKCk7CisgICAgICAgIGFz c2VydEVxdWFscygiNGZmODljZjAtODZhZi0xMWRlLTkwZWQtMDAxZmM2ZjE3NmZmIiwgZG9jLmdl dChXb3JrSW5kZXhGaWVsZC5XT1JLX0lEKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiU3ltcGhv bnkgTm8uIDUiLCBkb2MuZ2V0KFdvcmtJbmRleEZpZWxkLldPUkspKTsKKyAgICB9CisKKworICAg IEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEZpbmRXb3JrQnlJU1dDKCkgdGhyb3dzIEV4Y2Vw dGlvbiB7CisgICAgICAgIFJlc3VsdHMgcmVzID0gc3Muc2VhcmNoKCJpc3djOlwiVC0xMDE3Nzkz MDQtMVwiIiwgMCwgMTApOworICAgICAgICBhc3NlcnRFcXVhbHMoMSwgcmVzLmdldFRvdGFsSGl0 cygpKTsKKyAgICAgICAgUmVzdWx0IHJlc3VsdCA9IHJlcy5yZXN1bHRzLmdldCgwKTsKKyAgICAg ICAgTWJEb2N1bWVudCBkb2MgPSByZXN1bHQuZ2V0RG9jKCk7CisgICAgICAgIGFzc2VydEVxdWFs cygiNGZmODljZjAtODZhZi0xMWRlLTkwZWQtMDAxZmM2ZjE3NmZmIiwgZG9jLmdldChXb3JrSW5k ZXhGaWVsZC5XT1JLX0lEKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiU3ltcGhvbnkgTm8uIDUi LCBkb2MuZ2V0KFdvcmtJbmRleEZpZWxkLldPUkspKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAg IHB1YmxpYyB2b2lkIHRlc3RGaW5kV29ya0J5VHlwZSgpIHRocm93cyBFeGNlcHRpb24geworICAg ICAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgidHlwZTpcIm9wZXJhXCIiLCAwLCAxMCk7Cisg ICAgICAgIGFzc2VydEVxdWFscygxLCByZXMuZ2V0VG90YWxIaXRzKCkpOworICAgICAgICBSZXN1 bHQgcmVzdWx0ID0gcmVzLnJlc3VsdHMuZ2V0KDApOworICAgICAgICBNYkRvY3VtZW50IGRvYyA9 IHJlc3VsdC5nZXREb2MoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCI0ZmY4OWNmMC04NmFmLTEx ZGUtOTBlZC0wMDFmYzZmMTc2ZmYiLCBkb2MuZ2V0KFdvcmtJbmRleEZpZWxkLldPUktfSUQpKTsK KyAgICAgICAgYXNzZXJ0RXF1YWxzKCJTeW1waG9ueSBOby4gNSIsIGRvYy5nZXQoV29ya0luZGV4 RmllbGQuV09SSykpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEZp bmRXb3JrQnlBbGlhcygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBSZXN1bHRzIHJlcyA9 IHNzLnNlYXJjaCgiYWxpYXM6c3ltcDUiLCAwLCAxMCk7CisgICAgICAgIGFzc2VydEVxdWFscygx LCByZXMuZ2V0VG90YWxIaXRzKCkpOworICAgICAgICBSZXN1bHQgcmVzdWx0ID0gcmVzLnJlc3Vs dHMuZ2V0KDApOworICAgICAgICBNYkRvY3VtZW50IGRvYyA9IHJlc3VsdC5nZXREb2MoKTsKKyAg ICAgICAgYXNzZXJ0RXF1YWxzKCI0ZmY4OWNmMC04NmFmLTExZGUtOTBlZC0wMDFmYzZmMTc2ZmYi LCBkb2MuZ2V0KFdvcmtJbmRleEZpZWxkLldPUktfSUQpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxz KCJTeW1waG9ueSBOby4gNSIsIGRvYy5nZXQoV29ya0luZGV4RmllbGQuV09SSykpOworICAgIH0K KworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEZpbmRXb3JrQnlUYWcoKSB0aHJvd3Mg RXhjZXB0aW9uIHsKKyAgICAgICAgUmVzdWx0cyByZXMgPSBzcy5zZWFyY2goInRhZzpjbGFzc2lj YWwiLCAwLCAxMCk7CisgICAgICAgIGFzc2VydEVxdWFscygxLCByZXMuZ2V0VG90YWxIaXRzKCkp OworICAgICAgICBSZXN1bHQgcmVzdWx0ID0gcmVzLnJlc3VsdHMuZ2V0KDApOworICAgICAgICBN YkRvY3VtZW50IGRvYyA9IHJlc3VsdC5nZXREb2MoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCI0 ZmY4OWNmMC04NmFmLTExZGUtOTBlZC0wMDFmYzZmMTc2ZmYiLCBkb2MuZ2V0KFdvcmtJbmRleEZp ZWxkLldPUktfSUQpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJTeW1waG9ueSBOby4gNSIsIGRv Yy5nZXQoV29ya0luZGV4RmllbGQuV09SSykpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVi bGljIHZvaWQgdGVzdEZpbmRXb3JrQnlEZWZhdWx0VXNpbmdOYW1lKCkgdGhyb3dzIEV4Y2VwdGlv biB7CisgICAgICAgIFJlc3VsdHMgcmVzID0gc3Muc2VhcmNoKCJcIlN5bXBob255IE5vLiA1XCIi LCAwLCAxMCk7CisgICAgICAgIGFzc2VydEVxdWFscygxLCByZXMuZ2V0VG90YWxIaXRzKCkpOwor ICAgICAgICBSZXN1bHQgcmVzdWx0ID0gcmVzLnJlc3VsdHMuZ2V0KDApOworICAgICAgICBNYkRv Y3VtZW50IGRvYyA9IHJlc3VsdC5nZXREb2MoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCI0ZmY4 OWNmMC04NmFmLTExZGUtOTBlZC0wMDFmYzZmMTc2ZmYiLCBkb2MuZ2V0KFdvcmtJbmRleEZpZWxk LldPUktfSUQpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJTeW1waG9ueSBOby4gNSIsIGRvYy5n ZXQoV29ya0luZGV4RmllbGQuV09SSykpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGlj IHZvaWQgdGVzdEZpbmRXb3JrQnlEZWZhdWx0VXNpbmdBbGlhcygpIHRocm93cyBFeGNlcHRpb24g eworICAgICAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgic3ltcDUiLCAwLCAxMCk7CisgICAg ICAgIGFzc2VydEVxdWFscygxLCByZXMuZ2V0VG90YWxIaXRzKCkpOworICAgICAgICBSZXN1bHQg cmVzdWx0ID0gcmVzLnJlc3VsdHMuZ2V0KDApOworICAgICAgICBNYkRvY3VtZW50IGRvYyA9IHJl c3VsdC5nZXREb2MoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCI0ZmY4OWNmMC04NmFmLTExZGUt OTBlZC0wMDFmYzZmMTc2ZmYiLCBkb2MuZ2V0KFdvcmtJbmRleEZpZWxkLldPUktfSUQpKTsKKyAg ICAgICAgYXNzZXJ0RXF1YWxzKCJTeW1waG9ueSBOby4gNSIsIGRvYy5nZXQoV29ya0luZGV4Rmll bGQuV09SSykpOworICAgIH0KKworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEZpbmRX b3JrQnlOb0lTV0MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgUmVzdWx0cyByZXMgPSBz cy5zZWFyY2goImlzd2M6XFwtIiwgMCwgMTApOwogICAgICAgICBhc3NlcnRFcXVhbHMoMSwgcmVz LmdldFRvdGFsSGl0cygpKTsKQEAgLTI4NCwxNTAgKzMzNSwxNTEgQEAKICAgICAgICAgUmVzdWx0 c1dyaXRlciB3cml0ZXIgPSBzcy5nZXRNbWQyV3JpdGVyKCk7CiAgICAgICAgIFN0cmluZ1dyaXRl ciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKICAgICAgICAgUHJpbnRXcml0ZXIgcHIgPSBuZXcg UHJpbnRXcml0ZXIoc3cpOwotICAgICAgICB3cml0ZXIud3JpdGUocHIsIHJlcyxTZWFyY2hTZXJ2 ZXJTZXJ2bGV0LlJFU1BPTlNFX1hNTCwgdHJ1ZSk7CisgICAgICAgIHdyaXRlci53cml0ZShwciwg cmVzLCBTZWFyY2hTZXJ2ZXJTZXJ2bGV0LlJFU1BPTlNFX1hNTCwgdHJ1ZSk7CiAgICAgICAgIHBy LmNsb3NlKCk7CiAgICAgICAgIFN0cmluZyBvdXRwdXQgPSBzdy50b1N0cmluZygpOwogICAgICAg ICBTeXN0ZW0ub3V0LnByaW50bG4oIlhtbCBpcyIgKyBvdXRwdXQpOwogICAgICAgICBhc3NlcnRU cnVlKCFvdXRwdXQuY29udGFpbnMoIjxpc3djPiIpKTsKICAgICB9Ci0gIC8qKgotICAgKiBUZXN0 cwotICAgKgotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8KLSAgQFRlc3QKLSAgcHVibGlj IHZvaWQgdGVzdE91dHB1dEFzWG1sKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLSAgICBSZXN1bHRz IHJlcyA9IHNzLnNlYXJjaCgid29yazpcIlN5bXBob255IE5vLiA1XCIiLCAwLCAxKTsKLSAgICBS ZXN1bHRzV3JpdGVyIHdyaXRlciA9IHNzLmdldE1tZDJXcml0ZXIoKTsKLSAgICBTdHJpbmdXcml0 ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHIgPSBuZXcgUHJp bnRXcml0ZXIoc3cpOwotICAgIHdyaXRlci53cml0ZShwciwgcmVzLFNlYXJjaFNlcnZlclNlcnZs ZXQuUkVTUE9OU0VfWE1MLCB0cnVlKTsKLSAgICBwci5jbG9zZSgpOwotICAgIFN0cmluZyBvdXRw dXQgPSBzdy50b1N0cmluZygpOwotICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWG1sIGlzIiArIG91 dHB1dCk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoImNvdW50PVwiMVwiIikpOwot ICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJvZmZzZXQ9XCIwXCIiKSk7Ci0gICAgYXNz ZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoImlkPVwiNGZmODljZjAtODZhZi0xMWRlLTkwZWQtMDAx ZmM2ZjE3NmZmXCIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIjx0aXRsZT5T eW1waG9ueSBOby4gNTwvdGl0bGU+IikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5z KCI8bmFtZT7Qn9GR0YLRgCDQmNC70YzQuNGHINCn0LDQudC60L7QstGB0LrQuNC5PC9uYW1lPiIp KTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiPGRpc2FtYmlndWF0aW9uPmRlbW88 L2Rpc2FtYmlndWF0aW9uPiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiPHNv cnQtbmFtZT7Qn9GR0YLRgCDQmNC70YzQuNGHINCn0LDQudC60L7QstGB0LrQuNC5PC9zb3J0LW5h bWU+IikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCI8cmVsYXRpb24gdHlwZT1c ImNvbXBvc2VyXCIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIjxpc3djPlQt MTAxNzc5MzA0LTE8L2lzd2M+IikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCI8 aXN3Yz5CLTEwMTc3OTMwNC0xPC9pc3djPiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250 YWlucygiPGxhbmd1YWdlPmVuZzwvbGFuZ3VhZ2U+IikpOwotICAgIGFzc2VydFRydWUob3V0cHV0 LmNvbnRhaW5zKCI8cmVsYXRpb24tbGlzdCB0YXJnZXQtdHlwZT1cImFydGlzdFwiPiIpKTsKLSAg ICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiPGRpcmVjdGlvbj5iYWNrd2FyZDwvZGlyZWN0 aW9uPiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiPGF0dHJpYnV0ZS1saXN0 PiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiPGF0dHJpYnV0ZT5hZGRpdGlv bmFsPC9hdHRyaWJ1dGU+IikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJ0eXBl PVwiT3BlcmFcIiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiPGFsaWFzPlN5 bXA1PC9hbGlhcz4iKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIjx0YWctbGlz dD4iKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIjx0YWcgY291bnQ9XCIxMFwi PiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiPG5hbWU+Y2xhc3NpY2FsPC9u YW1lPiIpKTsKKyAgICAvKioKKyAgICAgKiBUZXN0cworICAgICAqCisgICAgICogQHRocm93cyBF eGNlcHRpb24KKyAgICAgKi8KKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RPdXRwdXRB c1htbCgpIHRocm93cyBFeGNlcHRpb24gewogCi0gIH0KKyAgICAgICAgUmVzdWx0cyByZXMgPSBz cy5zZWFyY2goIndvcms6XCJTeW1waG9ueSBOby4gNVwiIiwgMCwgMSk7CisgICAgICAgIFJlc3Vs dHNXcml0ZXIgd3JpdGVyID0gc3MuZ2V0TW1kMldyaXRlcigpOworICAgICAgICBTdHJpbmdXcml0 ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7CisgICAgICAgIFByaW50V3JpdGVyIHByID0gbmV3 IFByaW50V3JpdGVyKHN3KTsKKyAgICAgICAgd3JpdGVyLndyaXRlKHByLCByZXMsIFNlYXJjaFNl cnZlclNlcnZsZXQuUkVTUE9OU0VfWE1MLCB0cnVlKTsKKyAgICAgICAgcHIuY2xvc2UoKTsKKyAg ICAgICAgU3RyaW5nIG91dHB1dCA9IHN3LnRvU3RyaW5nKCk7CisgICAgICAgIFN5c3RlbS5vdXQu cHJpbnRsbigiWG1sIGlzIiArIG91dHB1dCk7CisgICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNv bnRhaW5zKCJjb3VudD1cIjFcIiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFp bnMoIm9mZnNldD1cIjBcIiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMo ImlkPVwiNGZmODljZjAtODZhZi0xMWRlLTkwZWQtMDAxZmM2ZjE3NmZmXCIiKSk7CisgICAgICAg IGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCI8dGl0bGU+U3ltcGhvbnkgTm8uIDU8L3RpdGxl PiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIjxuYW1lPtCf0ZHRgtGA INCY0LvRjNC40Ycg0KfQsNC50LrQvtCy0YHQutC40Lk8L25hbWU+IikpOworICAgICAgICBhc3Nl cnRUcnVlKG91dHB1dC5jb250YWlucygiPGRpc2FtYmlndWF0aW9uPmRlbW88L2Rpc2FtYmlndWF0 aW9uPiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIjxzb3J0LW5hbWU+ 0J/RkdGC0YAg0JjQu9GM0LjRhyDQp9Cw0LnQutC+0LLRgdC60LjQuTwvc29ydC1uYW1lPiIpKTsK KyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIjxyZWxhdGlvbiB0eXBlPVwiY29t cG9zZXJcIiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIjxpc3djPlQt MTAxNzc5MzA0LTE8L2lzd2M+IikpOworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlu cygiPGlzd2M+Qi0xMDE3NzkzMDQtMTwvaXN3Yz4iKSk7CisgICAgICAgIGFzc2VydFRydWUob3V0 cHV0LmNvbnRhaW5zKCI8bGFuZ3VhZ2U+ZW5nPC9sYW5ndWFnZT4iKSk7CisgICAgICAgIGFzc2Vy dFRydWUob3V0cHV0LmNvbnRhaW5zKCI8cmVsYXRpb24tbGlzdCB0YXJnZXQtdHlwZT1cImFydGlz dFwiPiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIjxkaXJlY3Rpb24+ YmFja3dhcmQ8L2RpcmVjdGlvbj4iKSk7CisgICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRh aW5zKCI8YXR0cmlidXRlLWxpc3Q+IikpOworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250 YWlucygiPGF0dHJpYnV0ZT5hZGRpdGlvbmFsPC9hdHRyaWJ1dGU+IikpOworICAgICAgICBhc3Nl cnRUcnVlKG91dHB1dC5jb250YWlucygidHlwZT1cIk9wZXJhXCIiKSk7CisgICAgICAgIGFzc2Vy dFRydWUob3V0cHV0LmNvbnRhaW5zKCI8YWxpYXM+U3ltcDU8L2FsaWFzPiIpKTsKKyAgICAgICAg YXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIjx0YWctbGlzdD4iKSk7CisgICAgICAgIGFzc2Vy dFRydWUob3V0cHV0LmNvbnRhaW5zKCI8dGFnIGNvdW50PVwiMTBcIj4iKSk7CisgICAgICAgIGFz c2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCI8bmFtZT5jbGFzc2ljYWw8L25hbWU+IikpOwogCi0g IC8qKgotICAgKiBUZXN0cwotICAgKgotICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgKi8KLSAg QFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdE91dHB1dEFzSnNvbigpIHRocm93cyBFeGNlcHRpb24g eworICAgIH0KIAotICAgIFJlc3VsdHMgcmVzID0gc3Muc2VhcmNoKCJ3b3JrOlwiU3ltcGhvbnkg Tm8uIDVcIiIsIDAsIDEpOwotICAgIFJlc3VsdHNXcml0ZXIgd3JpdGVyID0gc3MuZ2V0TW1kMldy aXRlcigpOwotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQ cmludFdyaXRlciBwciA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0gICAgd3JpdGVyLndyaXRlKHBy LCByZXMsIFNlYXJjaFNlcnZlclNlcnZsZXQuUkVTUE9OU0VfSlNPTik7Ci0gICAgcHIuY2xvc2Uo KTsKKyAgICAvKioKKyAgICAgKiBUZXN0cworICAgICAqCisgICAgICogQHRocm93cyBFeGNlcHRp b24KKyAgICAgKi8KKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RPdXRwdXRBc0pzb24o KSB0aHJvd3MgRXhjZXB0aW9uIHsKIAotICAgIFN0cmluZyBvdXRwdXQgPSBzdy50b1N0cmluZygp OwotICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSnNvbiBpcyIgKyBvdXRwdXQpOworICAgICAgICBS ZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgid29yazpcIlN5bXBob255IE5vLiA1XCIiLCAwLCAxKTsK KyAgICAgICAgUmVzdWx0c1dyaXRlciB3cml0ZXIgPSBzcy5nZXRNbWQyV3JpdGVyKCk7CisgICAg ICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKKyAgICAgICAgUHJpbnRX cml0ZXIgcHIgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOworICAgICAgICB3cml0ZXIud3JpdGUocHIs IHJlcywgU2VhcmNoU2VydmVyU2VydmxldC5SRVNQT05TRV9KU09OKTsKKyAgICAgICAgcHIuY2xv c2UoKTsKIAotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcImNvdW50XCI6MSIpKTsK LSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJvZmZzZXRcIjowIikpOwotICAgIGFz c2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcIndvcmtcIjpbe1wiaWRcIjpcIjRmZjg5Y2YwLTg2 YWYtMTFkZS05MGVkLTAwMWZjNmYxNzZmZlwiIikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNv bnRhaW5zKCJcInR5cGVcIjpcIk9wZXJhXCIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29u dGFpbnMoIlwic2NvcmVcIjpcIjEwMFwiIikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRh aW5zKCJcInRpdGxlXCI6XCJTeW1waG9ueSBOby4gNVwiIikpOwotICAgIGFzc2VydFRydWUob3V0 cHV0LmNvbnRhaW5zKCJcImxhbmd1YWdlXCI6XCJlbmdcIiIpKTsKLSAgICBhc3NlcnRUcnVlKG91 dHB1dC5jb250YWlucygiXCJpc3djLWxpc3RcIjp7XCJpc3djXCI6W1wiVC0xMDE3NzkzMDQtMVwi LFwiQi0xMDE3NzkzMDQtMVwiXX0iKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMo IlwiZGlzYW1iaWd1YXRpb25cIjpcImRlbW9cIiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5j b250YWlucygiXCJhbGlhcy1saXN0XCI6e1wiYWxpYXNcIjpbXCJTeW1wNVwiXX0iKSk7Ci0gICAg YXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwicmVsYXRpb24tbGlzdFwiOlt7XCJ0YXJnZXQt dHlwZVwiOlwiYXJ0aXN0XCIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwi cmVsYXRpb25cIjpbe1widHlwZVwiOlwiY29tcG9zZXJcIixcImRpcmVjdGlvblwiOlwiYmFja3dh cmRcIixcImF0dHJpYnV0ZS1saXN0XCI6e1wiYXR0cmlidXRlXCI6W1wiYWRkaXRpb25hbFwiXX0i KSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwiYXJ0aXN0XCI6e1wiaWRcIjpc IjFmOWRmMTkyLWE2MjEtNGY1NC04ODUwLTJjNTM3M2I3ZWFjOVwiIikpOwotICAgIGFzc2VydFRy dWUob3V0cHV0LmNvbnRhaW5zKCJcIm5hbWVcIjpcItCf0ZHRgtGAINCY0LvRjNC40Ycg0KfQsNC5 0LrQvtCy0YHQutC40LlcIiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJz b3J0LW5hbWVcIjpcItCf0ZHRgtGAINCY0LvRjNC40Ycg0KfQsNC50LrQvtCy0YHQutC40LlcIiIp KTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJ0YWctbGlzdFwiOntcInRhZ1wi IikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcIm5hbWVcIjpcImNsYXNzaWNh bFwiIikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcImNvdW50XCI6MTAiKSk7 Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIiIpKTsKLSAgfQorICAgICAgICBTdHJp bmcgb3V0cHV0ID0gc3cudG9TdHJpbmcoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJK c29uIGlzIiArIG91dHB1dCk7CiAKLSAgLyoqCi0gICAqIFRlc3RzCi0gICAqCi0gICAqIEB0aHJv d3MgRXhjZXB0aW9uCi0gICAqLwotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0T3V0cHV0QXNK c29uTmV3KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNv bnRhaW5zKCJcImNvdW50XCI6MSIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFp bnMoIlwib2Zmc2V0XCI6MCIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMo Ilwid29ya1wiOlt7XCJpZFwiOlwiNGZmODljZjAtODZhZi0xMWRlLTkwZWQtMDAxZmM2ZjE3NmZm XCIiKSk7CisgICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcInR5cGVcIjpcIk9w ZXJhXCIiKSk7CisgICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcInNjb3JlXCI6 XCIxMDBcIiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwidGl0bGVc IjpcIlN5bXBob255IE5vLiA1XCIiKSk7CisgICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRh aW5zKCJcImxhbmd1YWdlXCI6XCJlbmdcIiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQu Y29udGFpbnMoIlwiaXN3Yy1saXN0XCI6e1wiaXN3Y1wiOltcIlQtMTAxNzc5MzA0LTFcIixcIkIt MTAxNzc5MzA0LTFcIl19IikpOworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygi XCJkaXNhbWJpZ3VhdGlvblwiOlwiZGVtb1wiIikpOworICAgICAgICBhc3NlcnRUcnVlKG91dHB1 dC5jb250YWlucygiXCJhbGlhcy1saXN0XCI6e1wiYWxpYXNcIjpbXCJTeW1wNVwiXX0iKSk7Cisg ICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcInJlbGF0aW9uLWxpc3RcIjpbe1wi dGFyZ2V0LXR5cGVcIjpcImFydGlzdFwiIikpOworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5j b250YWlucygiXCJyZWxhdGlvblwiOlt7XCJ0eXBlXCI6XCJjb21wb3NlclwiLFwiZGlyZWN0aW9u XCI6XCJiYWNrd2FyZFwiLFwiYXR0cmlidXRlLWxpc3RcIjp7XCJhdHRyaWJ1dGVcIjpbXCJhZGRp dGlvbmFsXCJdfSIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwiYXJ0 aXN0XCI6e1wiaWRcIjpcIjFmOWRmMTkyLWE2MjEtNGY1NC04ODUwLTJjNTM3M2I3ZWFjOVwiIikp OworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJuYW1lXCI6XCLQn9GR0YLR gCDQmNC70YzQuNGHINCn0LDQudC60L7QstGB0LrQuNC5XCIiKSk7CisgICAgICAgIGFzc2VydFRy dWUob3V0cHV0LmNvbnRhaW5zKCJcInNvcnQtbmFtZVwiOlwi0J/RkdGC0YAg0JjQu9GM0LjRhyDQ p9Cw0LnQutC+0LLRgdC60LjQuVwiIikpOworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250 YWlucygiXCJ0YWctbGlzdFwiOntcInRhZ1wiIikpOworICAgICAgICBhc3NlcnRUcnVlKG91dHB1 dC5jb250YWlucygiXCJuYW1lXCI6XCJjbGFzc2ljYWxcIiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1 ZShvdXRwdXQuY29udGFpbnMoIlwiY291bnRcIjoxMCIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShv dXRwdXQuY29udGFpbnMoIiIpKTsKKyAgICB9CiAKLSAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJj aCgid29yazpcIlN5bXBob255IE5vLiA1XCIiLCAwLCAxKTsKLSAgICBSZXN1bHRzV3JpdGVyIHdy aXRlciA9IHNzLmdldE1tZDJXcml0ZXIoKTsKLSAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3Ry aW5nV3JpdGVyKCk7Ci0gICAgUHJpbnRXcml0ZXIgcHIgPSBuZXcgUHJpbnRXcml0ZXIoc3cpOwot ICAgIHdyaXRlci53cml0ZShwciwgcmVzLCBTZWFyY2hTZXJ2ZXJTZXJ2bGV0LlJFU1BPTlNFX0pT T05fTkVXKTsKLSAgICBwci5jbG9zZSgpOworICAgIC8qKgorICAgICAqIFRlc3RzCisgICAgICoK KyAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgorICAgICAqLworICAgIEBUZXN0CisgICAgcHVibGlj IHZvaWQgdGVzdE91dHB1dEFzSnNvbk5ldygpIHRocm93cyBFeGNlcHRpb24gewogCi0gICAgU3Ry aW5nIG91dHB1dCA9IHN3LnRvU3RyaW5nKCk7Ci0gICAgU3lzdGVtLm91dC5wcmludGxuKCJKc29u IE5ldyBpcyIgKyBvdXRwdXQpOworICAgICAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgid29y azpcIlN5bXBob255IE5vLiA1XCIiLCAwLCAxKTsKKyAgICAgICAgUmVzdWx0c1dyaXRlciB3cml0 ZXIgPSBzcy5nZXRNbWQyV3JpdGVyKCk7CisgICAgICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBT dHJpbmdXcml0ZXIoKTsKKyAgICAgICAgUHJpbnRXcml0ZXIgcHIgPSBuZXcgUHJpbnRXcml0ZXIo c3cpOworICAgICAgICB3cml0ZXIud3JpdGUocHIsIHJlcywgU2VhcmNoU2VydmVyU2VydmxldC5S RVNQT05TRV9KU09OX05FVyk7CisgICAgICAgIHByLmNsb3NlKCk7CiAKLSAgICBhc3NlcnRUcnVl KG91dHB1dC5jb250YWlucygiXCJjb3VudFwiOjEiKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQu Y29udGFpbnMoIlwib2Zmc2V0XCI6MCIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlu cygiXCJ3b3JrXCI6W3tcImlkXCI6XCI0ZmY4OWNmMC04NmFmLTExZGUtOTBlZC0wMDFmYzZmMTc2 ZmZcIiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJ0eXBlXCI6XCJPcGVy YVwiIikpOwotICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcInNjb3JlXCI6XCIxMDBc IiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJ0aXRsZVwiOlwiU3ltcGhv bnkgTm8uIDVcIiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJsYW5ndWFn ZVwiOlwiZW5nXCIiKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoImlzd2NzXCI6 W1wiVC0xMDE3NzkzMDQtMVwiLFwiQi0xMDE3NzkzMDQtMVwiXSIpKTsKLSAgICBhc3NlcnRUcnVl KG91dHB1dC5jb250YWlucygiXCJkaXNhbWJpZ3VhdGlvblwiOlwiZGVtb1wiIikpOwotICAgIGFz c2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcImFsaWFzZXNcIjpbe1wibmFtZVwiOlwiU3ltcDVc IixcImxvY2FsZVwiOm51bGwsXCJ0eXBlXCI6bnVsbCxcImJlZ2luLWRhdGVcIjpudWxsLFwiZW5k LWRhdGVcIjpudWxsfV0iKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwicmVs YXRpb25zXCI6W3siKSk7Ci0gICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwiYXJ0aXN0 XCI6e1wiaWRcIjpcIjFmOWRmMTkyLWE2MjEtNGY1NC04ODUwLTJjNTM3M2I3ZWFjOVwiIikpOwot ICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcIm5hbWVcIjpcItCf0ZHRgtGAINCY0LvR jNC40Ycg0KfQsNC50LrQvtCy0YHQutC40LlcIiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5j b250YWlucygiXCJzb3J0LW5hbWVcIjpcItCf0ZHRgtGAINCY0LvRjNC40Ycg0KfQsNC50LrQvtCy 0YHQutC40LlcIiIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJ0YWdzXCI6 W3tcImNvdW50XCI6MTAsXCJuYW1lXCI6XCJjbGFzc2ljYWxcIn0iKSk7Ci0gICAgYXNzZXJ0VHJ1 ZShvdXRwdXQuY29udGFpbnMoIlwiY291bnRcIjoxMCIpKTsKLSAgICBhc3NlcnRUcnVlKG91dHB1 dC5jb250YWlucygiIikpOwotICB9CisgICAgICAgIFN0cmluZyBvdXRwdXQgPSBzdy50b1N0cmlu ZygpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpzb24gTmV3IGlzIiArIG91dHB1dCk7 CiAKLSAgLyoqCi0gICAqIFRlc3RzCi0gICAqCi0gICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAq LwotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0T3V0cHV0QXNKc29uTmV3UHJldHR5KCkgdGhy b3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcImNv dW50XCI6MSIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwib2Zmc2V0 XCI6MCIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwid29ya1wiOlt7 XCJpZFwiOlwiNGZmODljZjAtODZhZi0xMWRlLTkwZWQtMDAxZmM2ZjE3NmZmXCIiKSk7CisgICAg ICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcInR5cGVcIjpcIk9wZXJhXCIiKSk7Cisg ICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcInNjb3JlXCI6XCIxMDBcIiIpKTsK KyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwidGl0bGVcIjpcIlN5bXBob255 IE5vLiA1XCIiKSk7CisgICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcImxhbmd1 YWdlXCI6XCJlbmdcIiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoImlz d2NzXCI6W1wiVC0xMDE3NzkzMDQtMVwiLFwiQi0xMDE3NzkzMDQtMVwiXSIpKTsKKyAgICAgICAg YXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwiZGlzYW1iaWd1YXRpb25cIjpcImRlbW9cIiIp KTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwiYWxpYXNlc1wiOlt7XCJu YW1lXCI6XCJTeW1wNVwiLFwibG9jYWxlXCI6bnVsbCxcInR5cGVcIjpudWxsLFwiYmVnaW4tZGF0 ZVwiOm51bGwsXCJlbmQtZGF0ZVwiOm51bGx9XSIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRw dXQuY29udGFpbnMoIlwicmVsYXRpb25zXCI6W3siKSk7CisgICAgICAgIGFzc2VydFRydWUob3V0 cHV0LmNvbnRhaW5zKCJcImFydGlzdFwiOntcImlkXCI6XCIxZjlkZjE5Mi1hNjIxLTRmNTQtODg1 MC0yYzUzNzNiN2VhYzlcIiIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMo IlwibmFtZVwiOlwi0J/RkdGC0YAg0JjQu9GM0LjRhyDQp9Cw0LnQutC+0LLRgdC60LjQuVwiIikp OworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiXCJzb3J0LW5hbWVcIjpcItCf 0ZHRgtGAINCY0LvRjNC40Ycg0KfQsNC50LrQvtCy0YHQutC40LlcIiIpKTsKKyAgICAgICAgYXNz ZXJ0VHJ1ZShvdXRwdXQuY29udGFpbnMoIlwidGFnc1wiOlt7XCJjb3VudFwiOjEwLFwibmFtZVwi OlwiY2xhc3NpY2FsXCJ9IikpOworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygi XCJjb3VudFwiOjEwIikpOworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiIikp OworICAgIH0KIAotICAgIFJlc3VsdHMgcmVzID0gc3Muc2VhcmNoKCJ3b3JrOlwiU3ltcGhvbnkg Tm8uIDVcIiIsIDAsIDEpOwotICAgIFJlc3VsdHNXcml0ZXIgd3JpdGVyID0gc3MuZ2V0TW1kMldy aXRlcigpOwotICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBQ cmludFdyaXRlciBwciA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0gICAgd3JpdGVyLndyaXRlKHBy LCByZXMsIFNlYXJjaFNlcnZlclNlcnZsZXQuUkVTUE9OU0VfSlNPTl9ORVcsIHRydWUpOwotICAg IHByLmNsb3NlKCk7CisgICAgLyoqCisgICAgICogVGVzdHMKKyAgICAgKgorICAgICAqIEB0aHJv d3MgRXhjZXB0aW9uCisgICAgICovCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0T3V0 cHV0QXNKc29uTmV3UHJldHR5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKLSAgICBTdHJpbmcgb3V0 cHV0ID0gc3cudG9TdHJpbmcoKTsKLSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpzb24gTmV3IFBy ZXR0eSBpcyIgKyBvdXRwdXQpOworICAgICAgICBSZXN1bHRzIHJlcyA9IHNzLnNlYXJjaCgid29y azpcIlN5bXBob255IE5vLiA1XCIiLCAwLCAxKTsKKyAgICAgICAgUmVzdWx0c1dyaXRlciB3cml0 ZXIgPSBzcy5nZXRNbWQyV3JpdGVyKCk7CisgICAgICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBT dHJpbmdXcml0ZXIoKTsKKyAgICAgICAgUHJpbnRXcml0ZXIgcHIgPSBuZXcgUHJpbnRXcml0ZXIo c3cpOworICAgICAgICB3cml0ZXIud3JpdGUocHIsIHJlcywgU2VhcmNoU2VydmVyU2VydmxldC5S RVNQT05TRV9KU09OX05FVywgdHJ1ZSk7CisgICAgICAgIHByLmNsb3NlKCk7CiAKLSAgICBhc3Nl cnRUcnVlKG91dHB1dC5jb250YWlucygiXCJjb3VudFwiIDogMSIpKTsKLSAgICBhc3NlcnRUcnVl KG91dHB1dC5jb250YWlucygiIikpOwotICB9CisgICAgICAgIFN0cmluZyBvdXRwdXQgPSBzdy50 b1N0cmluZygpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkpzb24gTmV3IFByZXR0eSBp cyIgKyBvdXRwdXQpOwogCisgICAgICAgIGFzc2VydFRydWUob3V0cHV0LmNvbnRhaW5zKCJcImNv dW50XCIgOiAxIikpOworICAgICAgICBhc3NlcnRUcnVlKG91dHB1dC5jb250YWlucygiIikpOwor ICAgIH0KIAorCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0T3V0cHV0QXNYbWxJc1By ZXR0eSgpIHRocm93cyBFeGNlcHRpb24gewogCkBAIC00MzUsMTEgKzQ4NywxMSBAQAogICAgICAg ICBSZXN1bHRzV3JpdGVyIHdyaXRlciA9IHNzLmdldE1tZDJXcml0ZXIoKTsKICAgICAgICAgU3Ry aW5nV3JpdGVyIHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwogICAgICAgICBQcmludFdyaXRlciBw ciA9IG5ldyBQcmludFdyaXRlcihzdyk7Ci0gICAgICAgIHdyaXRlci53cml0ZShwciwgcmVzLFNl YXJjaFNlcnZlclNlcnZsZXQuUkVTUE9OU0VfWE1MLCB0cnVlKTsKKyAgICAgICAgd3JpdGVyLndy aXRlKHByLCByZXMsIFNlYXJjaFNlcnZlclNlcnZsZXQuUkVTUE9OU0VfWE1MLCB0cnVlKTsKICAg ICAgICAgcHIuY2xvc2UoKTsKICAgICAgICAgU3RyaW5nIG91dHB1dCA9IHN3LnRvU3RyaW5nKCk7 CiAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiWG1sIGlzIiArIG91dHB1dCk7Ci0gICAgICAg IGFzc2VydFRydWUob3V0cHV0LnNwbGl0KCJcbiIpLmxlbmd0aD4yMCk7CisgICAgICAgIGFzc2Vy dFRydWUob3V0cHV0LnNwbGl0KCJcbiIpLmxlbmd0aCA+IDIwKTsKIAogICAgIH0KIH0KXCBObyBu ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KTXVzaWNCcmFpbnotY29tbWl0cyBtYWlsaW5nIGxpc3QKTXVzaWNCcmFp bnotY29tbWl0c0BsaXN0cy5tdXNpY2JyYWluei5vcmcKaHR0cDovL2xpc3RzLm11c2ljYnJhaW56 Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL211c2ljYnJhaW56LWNvbW1pdHM=