cGFja2FnZSBjb20ubXMubWluaUNPT0wuYXV0aHNydjsNCg0KaW1wb3J0IGNv
bS5zdW4ueG1sLnRyZWUuKjsNCmltcG9ydCBvcmcudzNjLmRvbS4qOw0KDQpp
bXBvcnQgamF2YS5zcWwuQ29ubmVjdGlvbjsNCmltcG9ydCBqYXZhLnNxbC5S
ZXN1bHRTZXQ7DQppbXBvcnQgamF2YS5zcWwuU1FMRXhjZXB0aW9uOw0KaW1w
b3J0IGphdmEuc3FsLlN0YXRlbWVudDsNCg0KaW1wb3J0IGphdmEudXRpbC5F
bnVtZXJhdGlvbjsNCmltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOw0KDQpwdWJs
aWMgY2xhc3MgR2V0UHJpdnNCeUFzc2V0Q2FsbCBleHRlbmRzIFhtbENhbGwg
ew0KDQogICAgU3RyaW5nIHVzZXJJZCA9IG51bGw7DQogICAgU3RyaW5nIGFz
c2V0SWQgPSBudWxsOw0KICAgIFZlY3RvciBwcml2cyA9IG51bGw7DQoNCiAg
ICBwcml2YXRlIHZvaWQgZnJvbVhNTChFbGVtZW50Tm9kZSBib2R5KSB0aHJv
d3MgWG1sRnVuY0V4Y2VwdGlvbiB7DQoNCglpZiAoKGJvZHkuZ2V0Tm9kZVR5
cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkgJiYNCgkgICAgKGJvZHkuZ2V0
Tm9kZU5hbWUoKS5lcXVhbHMoIk1DQm9keSIpKSkgew0KCSAgICBmb3IgKE5v
ZGUgbiA9IGJvZHkuZ2V0Rmlyc3RDaGlsZCAoKTsNCgkJIG4gIT0gbnVsbDsN
CgkJIG4gPSBuLmdldE5leHRTaWJsaW5nICgpKSB7DQoJCWlmIChuLmdldE5v
ZGVOYW1lKCkuZXF1YWxzKCJ1c2VySWQiKSkgew0KCQkgICAgdXNlcklkID0g
IG4uZ2V0Rmlyc3RDaGlsZCgpLmdldE5vZGVWYWx1ZSgpOw0KCQl9IGVsc2Ug
aWYgKG4uZ2V0Tm9kZU5hbWUoKS5lcXVhbHMoImFzc2V0SWQiKSkgew0KCQkg
ICAgYXNzZXRJZCA9IG4uZ2V0Rmlyc3RDaGlsZCgpLmdldE5vZGVWYWx1ZSgp
Ow0KCQl9IGVsc2Ugew0KCQkgICAgLy8gREVCVUcNCgkJfQ0KCSAgICB9DQoJ
fSBlbHNlIHsNCgkgICAgdGhyb3cgbmV3IFhtbEZ1bmNFeGNlcHRpb24oIk1D
Qm9keSBFbGVtZW50IG5vdCBmb3VuZCEiKTsNCgl9DQoNCglpZiAoKHVzZXJJ
ZCA9PSBudWxsKSB8fCAoYXNzZXRJZCA9PSBudWxsKSApIHsNCgkgICAgdGhy
b3cgbmV3IFhtbEZ1bmNFeGNlcHRpb24oIk1DQm9keSBFbGVtZW50IGluY29t
cGxldGUhIik7DQoJfQ0KCS8vIGFyZSB0aGUgdmFsdWVzIGluIHRoZSBjb3Jy
ZWN0IHJhbmdlPyBhcmUgdGhlIGlkcyBpZHM/DQogICAgfQ0KDQogICAgcHVi
bGljIE5vZGUgdG9YTUwoKSB7DQoJRWxlbWVudE5vZGUgYm9keSA9IG51bGw7
DQoJRWxlbWVudE5vZGUgc2VxID0gbnVsbDsNCg0KCWJvZHkgPSAoRWxlbWVu
dE5vZGUpcmVwbHlEb2MuY3JlYXRlRWxlbWVudCgiTUNCb2R5Iik7DQoJc2Vx
ICA9IChFbGVtZW50Tm9kZSlyZXBseURvYy5jcmVhdGVFbGVtZW50KCJzZXEi
KTsNCglib2R5LmFwcGVuZENoaWxkKCBzZXEgKTsNCgkNCglFbnVtZXJhdGlv
biBlbnVtZXJhdG9yID0gcHJpdnMuZWxlbWVudHMoKTsNCgl3aGlsZSggZW51
bWVyYXRvci5oYXNNb3JlRWxlbWVudHMoKSApew0KCSAgICBzZXEuYXBwZW5k
Q2hpbGQoY3JlYXRlU2ltcGxlS1ZQKCJwcml2aWxlZ2VJZCIsDQoJCQkJCSAg
ICAoU3RyaW5nKWVudW1lcmF0b3IubmV4dEVsZW1lbnQoKSkpOw0KCX0NCg0K
CXJldHVybiBib2R5Ow0KICAgIH0NCg0KICAgIHB1YmxpYyBYbWxEb2N1bWVu
dCBjYWxsKFhtbERvY3VtZW50IGRvYykgew0KCXJlcXVlc3REb2MgPSBkb2M7
DQoNCglDb25uZWN0aW9uIGNvbiA9IG51bGw7DQoJU3RhdGVtZW50IHN0bXQg
PSBudWxsOw0KCVJlc3VsdFNldCBycyA9IG51bGw7DQoNCgl0cnkgew0KCSAg
ICBmcm9tWE1MKHN1cGVyLmZyb21YTUwoKSk7DQoJICAgIGNvbiA9IFhtbFJw
Y1NlcnZlci5nZXRDb25uZWN0aW9uTWFuYWdlcigpLmdldENvbm5lY3Rpb24o
Im1pbmlDT09MIiwxMDAwKTsNCgkgICAgaWYgKGNvbiA9PSBudWxsKXsNCgkJ
U3lzdGVtLmVyci5wcmludGxuKCJHZXRQcml2c0J5QXNzZXRDYWxsIGNvdWxk
IG5vdCBnZXQgYSBjb25uZWN0aW9uIik7DQoJCXJldHVybiBudWxsOw0KCSAg
ICB9DQoJCQkNCgkgICAgdHJ5IHsNCgkJc3RtdCA9IGNvbi5jcmVhdGVTdGF0
ZW1lbnQoKTsNCgkgICAgfSBjYXRjaCAoU1FMRXhjZXB0aW9uIGUpIHsNCgkJ
U3lzdGVtLmVyci5wcmludGxuKCJHZXRQcml2c0J5QXNzZXRDYWxsIGNvdWxk
IG5vdCBjcmVhdGUgc3RhdGVtZW50Iik7DQoJCXJldHVybiBudWxsOw0KCSAg
ICB9DQoNCgkgICAgdHJ5IHsNCgkJcnMgPSBzdG10LmV4ZWN1dGVRdWVyeSgN
CgkJICAgICAgICJzZWxlY3QgZGlzdGluY3QgUm9sZXMucHJpdmlsZWdlSWQg
ZnJvbSBDaGFubmVscywgUGVybWlzc2lvbnMsIFJvbGVzLCBHcm91cHMiICsN
CgkJICAgICAgICIgd2hlcmUiICsNCgkJICAgICAgICIgIFBlcm1pc3Npb25z
LmNoYW5uZWxJZCA9IENoYW5uZWxzLmNoYW5uZWxJZCBhbmQiICsNCgkJICAg
ICAgICIgIFBlcm1pc3Npb25zLnJvbGVJZCA9IFJvbGVzLnJvbGVJZCBhbmQi
ICsNCgkJICAgICAgICIgIFBlcm1pc3Npb25zLmdyb3VwSWQgPSBHcm91cHMu
Z3JvdXBJZCBhbmQiICsNCgkJICAgICAgICIgIEdyb3Vwcy51c2VySWQgPSAi
ICsgdXNlcklkICsgIiAgYW5kIiArDQoJCSAgICAgICAiICBDaGFubmVscy5h
c3NldElkID0gIiArIGFzc2V0SWQNCgkJICAgICAgICk7DQoJICAgIH0gY2F0
Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7DQoJCVN5c3RlbS5lcnIucHJpbnRsbigi
R2V0UHJpdnNCeUFzc2V0Q2FsbCBjb3VsZCBub3QgZXhlY3V0ZSBxdWVyeSIp
Ow0KCQlyZXR1cm4gbnVsbDsNCgkgICAgfQ0KDQoJICAgIHRyeSB7DQoJCXBy
aXZzID0gbmV3IFZlY3RvcigpOw0KCQl3aGlsZSAocnMubmV4dCgpKXsNCgkJ
ICAgIHByaXZzLmFkZEVsZW1lbnQoIHJzLmdldFN0cmluZygxKSApOw0KCQl9
DQoJICAgIH0gY2F0Y2ggKFNRTEV4Y2VwdGlvbiBlKSB7DQoJCVN5c3RlbS5l
cnIucHJpbnRsbigiR2V0UHJpdnNCeUFzc2V0Q2FsbCBjb3VsZCBub3QgY3Jl
YXRlIGFzc2V0cyB2ZWN0b3IiKTsNCgkJcmV0dXJuIG51bGw7DQoJICAgIH0N
CgkgICAgdHJ5IHsNCgkJc3RtdC5jbG9zZSgpOw0KCQlycy5jbG9zZSgpOw0K
CSAgICB9IGNhdGNoIChTUUxFeGNlcHRpb24gZSkgew0KCQlTeXN0ZW0uZXJy
LnByaW50bG4oIkdldFByaXZzQnlBc3NldENhbGwgY291bGQgbm90IGNsb3Nl
IHJlc291cmNlcyIpOw0KCSAgICB9DQoNCgkgICAgcmVwbHlEb2MgPSBuZXcg
WG1sRG9jdW1lbnQoKTsNCgkgICAgcmV0dXJuICBzdXBlci50b1hNTCh0b1hN
TCgpKTsNCg0KCX0gY2F0Y2ggKFhtbEZ1bmNFeGNlcHRpb24gZSkgew0KCSAg
ICBTeXN0ZW0uZXJyLnByaW50bG4oIlhtbEZ1bmNFeGNlcHRpb246ICIgKyBl
LmdldE1lc3NhZ2UoKSk7DQoJICAgIHJldHVybiBudWxsOw0KCX0gZmluYWxs
eSB7DQoJICAgIGlmIChjb24gIT0gbnVsbCl7DQoJCVhtbFJwY1NlcnZlci5n
ZXRDb25uZWN0aW9uTWFuYWdlcigpLmZyZWVDb25uZWN0aW9uKCJtaW5pQ09P
TCIsIGNvbik7DQoJICAgIH0NCgl9DQogICAgfQ0KfQ0K
