<=
img src=3D"http://www.africanews.com/usericons/1895/Walter-Wilson-Nana.j=
pg" width=3D"126" height=3D"126" alt=3D"Image of Walter" class=3D"useric=
on" />
Wa=
lter Wilson Nana, VoicesofAfrica mobile reporter in Buea, Cameroon
=
Local population should be encouraged=
in their efforts to prop eco-tourism and nature-based tourism industrie=
s in the country, US-born eco-tourism expert Jon Kohl advises the gover=
nment of Cameroon.
=
------------z0sG6lbwfRAjvoOOPUGyZF
Content-Disposition: inline; filename=logo-en_US.jpg
Content-Type: image/jpeg; name=logo-en_US.jpg
Content-Location: http://www.africanews.com/templates/africa/img/logo-en_US.jpg
Content-Transfer-Encoding: Base64
R0lGODlh7gFZAOYAALcmF7gnGBkZGb+/v+3JxX9/f0BAQLgnF7gmF8lcURAQEJSU
lMpdUt/f38/PzyAgIO/v79uSi2BgYEdHR5+fnzAwMNHR0a+vr3BwcFBQUISEhNuT
i2ZmZrKysvbk4jg4OFZWVo+Pj/Dw8MLCwrw0JigoKMpdUeStqODg4NJ4bsVPQ/HW
0/rx8JlKKrw1JtN4b8pcUdeFfXV1dUI2Lvvx8cBBNKOjo6k+IcFCNVxENeSuqJhJ
Kc5qYJhJKt+gmfLW1NeGfRAPDuCgmsVQQ3NMNREPD7E2HXRMNnNMNui7tvvx8NN4
bodOMoZNMkM3L/LW085rYGdINjMsJ+m7tyIeGzQsJyIfHOCgmYdNMn5NNbE1HREQ
D6FEJU8+MmhJN7I2HTQsKCIeHF1ENZBML6FFJX5ONTQtKCMfHMd4ZJlJKqg+IZGG
f2hJNk8+M31NNJFNL6JFJYxaQZFML6k/IVA+M+m7trI2HsFCNFJOS5BMLgAAAP//
/wAAAAAAAAAAAAAAACH5BAAAAAAALAAAAADuAVkAAAf/gHuCg4SFhoeIiYqLjI2O
j5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+
v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4HsDAxQF5ucD4err7NIQ
5ekQBQ969fb2Ge36+/zCGPb07gmsZ6CfwYMIYw1QMLChPQUOEkqcSPFTCIcYAWag
UMiBBAoQKoocSVJQA4YZU+qpkG7PyXoKJBQIEbJBy5I4c4YboLKnHgMODDgMWFCn
0aPYLvhcqrIB0qdQm3lkShXjzahYswKTULVrw3xaw4rFpdSr2Xscx6pd6yrg2bdO
/9nKnTvq4tu7GOjq3atp4d27CkLyHUzYEYW/iMEWXsyYUAbEiPM2nly4AWTEygZE
VOZggGDKqDwEeNGtwkAwM2Y4mWHlbJkAM5ZeVWRznO3b4w69kyAUoIECmyldwGD6
noIMNAl1xs0cd/A9EJpLNyT99vMLElDaM5Dc5XPQnWIEAMCiUYwEDNKnN5EARgL2
6NujZ/Cevv0T9unXh5Gef4L/MQixQiL4MWACe/zpVx8DQBzS2xY55BFAC1kgccQY
N2jBRA5B1ONFDj7ZccAbSxXgSAEqFSIPQxkUcMEABRRH0GyNUBAQcrZR0JseEsS1
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
gQAAOw==
------------z0sG6lbwfRAjvoOOPUGyZF
Content-Disposition: inline; filename=menu-item-shadow.jpg
Content-Type: image/jpeg; name=menu-item-shadow.jpg
Content-Location: http://www.africanews.com/templates/africa/img/menu-item-shadow.jpg
Content-Transfer-Encoding: Base64
/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAPAAA/+4ADkFkb2Jl
AGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoKDBAMDAwMDAwQ
DA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AA
EQgAFwAJAwERAAIRAQMRAf/EAFwAAQEBAAAAAAAAAAAAAAAAAAYHBAEBAAAAAAAA
AAAAAAAAAAAAABAAAQMDAwUBAAAAAAAAAAAAAQACAyEEBRFRFTGRklMUBxEBAQAA
AAAAAAAAAAAAAAAAABH/2gAMAwEAAhEDEQA/ALf+h4109lIdSQWmiUoJxU257lKV
Y8/aNucfICKhpQGOGbsEDaUNMbg7QNIqT0QY/ng9jPIIP//Z
------------z0sG6lbwfRAjvoOOPUGyZF
Content-Disposition: inline; filename=menu-item-mask.gif
Content-Type: image/gif; name=menu-item-mask.gif
Content-Location: http://www.africanews.com/templates/africa/img/menu-item-mask.gif
Content-Transfer-Encoding: Base64
R0lGODlhLAEUAIABAP///////yH5BAEAAAEALAAAAAAsARQAAAJfjA2py+0Po5y0
2ouz3rx7fSDfSJbmiabqCoUBC8fyTNexa+f6zvcs7gsKh8Si8YhMKpfMpvMJjUqn
1Kr1is1qt9yu9wsOi8fksvmMTqvX7Lb7DY/L5/S6/Y7P6/d8eQEAOw==
------------z0sG6lbwfRAjvoOOPUGyZF
Content-Disposition: inline; filename=title-background-white.gif
Content-Type: image/gif; name=title-background-white.gif
Content-Location: http://www.africanews.com/templates/africa/img/title-background-white.gif
Content-Transfer-Encoding: Base64
R0lGODlhAQBkAIAAAP///wAAACH5BAAAAAAALAAAAAABAGQAAAIIhI+py+0PYysA
Ow==
------------z0sG6lbwfRAjvoOOPUGyZF
Content-Disposition: inline; filename=rss_20px.gif
Content-Type: image/gif; name=rss_20px.gif
Content-Location: http://www.africanews.com/templates/africa/img/icons/rss_20px.gif
Content-Transfer-Encoding: Base64
R0lGODlhFAAUAOYAAP718fV9IuVaJOahjN5kPP3q2/rbyfitfPjq6vm1hfeZU+Fq
PPGdePV2IdlBHfFtIuNVG+J0S+NVJfWKSP7s4faUSdlGJuWagu5mHephJPGmh+1Z
CfR6HORxO91MJd50TPaVU/JmCO2XedU8JPNxFfNwIfWCLNxIHPrEnPjt7O5jFepd
HP7x6t9QJPrHo/JqFfNxDeVvOuJsPOxlJO1lIv/8+vFyHuptN/aKPPezjfendt9o
PN5uRuWdifSBO+NuO/R3HfR5Jvfn5fZ5IPRxGe5oI9Q2Gv748vWAJfBpHfeEJuN4
SfR7IfBxG+JOGPWCJ/eBJPR4IfVzIfd7IfWBJ+R3R/R4F/ivePfo6Pm7juVeLOde
JfKQXvrf1Pzl2vN1J+qZh/W8o+RvO/aneut+U/ejauePfvV/JdhMMddBJtZELOV8
YupkJ/R5KuVUF/R1F91ADvrQtOhnMe92OvWAMfPAsvXJu/N3K/CMWuZmOe9oHPFl
EPeeWPnHq/vIoP///yH5BAAAAAAALAAAAAAUABQAAAf/gH8pAxE7CwsyMj8/Yh2O
HUs9CIIfEBICWxlFDyVSDUNTAVBQNh9YA5ZacmwrKkmdDVFMAWdUSk0XEQJODCxe
cWM+L0SyAUhPTwFDVTtbbhp/0X9HLjgkTMfJDVIxCxkreH0GLNIAVxzHAQ0lDz8L
MzMqG3ttZQbSfgFMUexFPzJFMEzQASJIiDdXjkRDQYIdjQyJHqhIEI1CFhMwFJD7
o0NFkQxbEJV4cUDanwIKYIBQCGDOii0CdoiRYoOOggQFoh2pEKLknzBuJEiQ2aAB
EBIwqPiJVuCLni5/AORp0WJHhyFRgJioEMCKi2g5NjCIJuKEBwIdpgDBUaBGHA5B
fyj8oZDhBoA/dRxYQBvgDcVoE0LkiEbGyb0uFtKghcKBT42Td1RwIQvHTlQ0Iwgs
gZJMwQEfemjc0KAhwok1YMyoGcGjhw0lAYi80DMjwy6zHhwYMTLixAUEH5oMkfLg
I0wJLTwkTpPmBA8hf7BcqBJDzL8FO7IT2E6AxwXogQAAOw==
------------z0sG6lbwfRAjvoOOPUGyZF
Content-Disposition: inline; filename=topic_open.png
Content-Type: image/png; name=topic_open.png
Content-Location: http://www.africanews.com/templates/africa/img/icons/topic_icons_18_png/topic_open.png
Content-Transfer-Encoding: Base64
iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAAsTAAAL
EwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj33
3vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEs
DIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIe
EeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH
/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAn
f+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJ
V2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4
mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHg
g/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl
7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/A
V/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5
WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQ
WHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAA
RKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv
1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4
IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGy
UT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPE
bDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhM
WE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPE
NyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD
5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2h
tlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0
dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHK
CpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2ep
O6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN
2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIp
G6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3n
U9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36
p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYP
jGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLn
m+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cR
p7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0H
DYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dn
F2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofc
n8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh
7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJ
gUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5p
DoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85
ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7
F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/R
NtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9
MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo
1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5
sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWF
fevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTP
ZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJ
zs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ
+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3v
dy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtb
Ylu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ7
52PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7
nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9
zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9D
BY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfy
l5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT
0Kf7kxmTk/8EA5jz/GMzLdsAAAAEZ0FNQQAAsY58+1GTAAAAIGNIUk0AAHolAACA
gwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAK/SURBVHjarJQ7jxxVEEZP
3e557K6HxRh5BbtGIAIeQoIAcIaRiAAJESNHJMSIH2DxA/gJhMQOScjWAiRANhkG
YZAFZtnH9PT0THffVxXBLF6GABG48nt0qm7VJ2bGg6gSYP+dNyCl8zIev1qem+yW
k+2nU30y7G7tX3OTh9vi4lOYKWKAGQrY9Desa3j95sEZyIIvJi+9cv3S1fevFBsb
uNGIOG/45ZOPn1/c/PKqS7EwcXsyHD7rBsPHi82t3Tg//EJz/nzNSEbjyztvv3tl
a+8SqV2iIVKOhux98OFb9a3XfsIVYynLLcsKzoEITcGb/t7dO8Dt+6BiPHpmdHGH
tFyQvUdjRFOGrGzsPnHBDUo0BAQoJhPKzS0uvHz5ud8/+/Q94Np9EEivXUcqSvz0
hOx7ctcSpydsv/AibjjEVLGU0BjJIRCrKbGu7q21ZsYyLhrau79CUTCYPES5ucXo
kUfJ3hOaBksRjQnNCcuZ3HWkxeJ4HdRUbX98xPDchNHOY6SuxWIgNHM0RixGNGc0
RXLbEquKcPiH5eViugZiOG5jVYEZJo7se/S0jRUkod4TDg+I9Wxl1MzVUqz/1Zq1
sa5ABE2ZHPwKECOWM9p1hJMjNHhEHFIUiEjW6s9mHdTWXWrmUA7JIaAxnNn0Pbld
gmbEudO/ESzFaIuqX9+jjW2f5nWkHA7AsJjQGLCUQBVk9fh+iYOcMqZxfUbRB10u
fR6MBoaB/n1/dgYRh4is1iB4tKkXmK0bWei8+j4UImAGzp0KyGpGfY8uap9nxz9r
ffK9NtN98/0NnMzWQG7rvDfNgnMQM9ov0Xnl8+z4B62n3+pi9rX59hsz/VGQDrcy
XOn+A5RnB61puJGroyd1drRv7fwrC/13pvmOOOcRWVni/jtGbDHV3M0/IqeJ5XRb
RJY4h5SD/51H8qCC7a8BAPAn2ozIMCrKAAAAAElFTkSuQmCC
------------z0sG6lbwfRAjvoOOPUGyZF
Content-Disposition: inline; filename=retrieve_multiple.css
Content-Type: text/css; charset=ISO-8859-15; name=retrieve_multiple.css
Content-Location: http://www.africanews.com/templates/africa/retrieve_multiple.php?css=screen-africa
Content-Transfer-Encoding: 8bit
body.list_documents.small{}div.document form{display:none;}div.document{float:left;position:relative;width:9em;height:9em;text-align:center;padding:0.5em;margin:0.1em;margin-left:0;border:1px solid black;}div.document input,div.document label{display:none;}div.document img{cursor:pointer;}div.document ul{position:absolute;bottom:0.3em;left:0.3em;width:9.4em;margin-top:8em;text-align:right;}div.document ul li{float:left;}div.document ul li.file-name{width:9.4em;text-align:center;overflow:hidden;white-space:nowrap;}div.document ul li a{background-image:url(img/icons/tiles.png);display:block;width:24px;padding-top:18px;height:0;overflow:hidden;background-repeat:no-repeat;background-position:-1px -126px;}div.document img{}div.document ul li.select{float:right;}div.document ul li.select input{display:inline;}div.document.selected{border:1px solid red;}div.document ul li a:hover{background-position:-1px -108px;}div.document ul li a.download{background-position:-1px -162px;}div.document ul li a.download:hover{background-position:-1px -144px;}div.document_admin{clear:left;}#image_preview{position:absolute;top:28px;right:0;border:20px white solid;border-top-width:5px;border-bottom-width:5px;}select#keywordselector{height:18px;margin-left:5px;width:20%;}#imagewizard{position:fixed;top:300px;right:10px;z-index:99;border:1px solid black;height:400px;width:300px;overflow:hidden;}* body #imagewizard{position:absolute;}body.imagewizard{background:white;margin:0;padding:0;font:normal 12px Verdana;overflow:hidden;border:none;}body.imagewizard dl dt{float:left;width:100px;height:12px;}body.imagewizard fieldset{border:none;}body.imagewizard #src-element{display:block;}body.imagewizard #adjustment_layer{background-color:yellow;opacity:0.5;position:absolute;left:100px;}body.imagewizard dl.debug{display:none;}body.imagewizard div#adjustment_layer.over_scaled{background-color:red;}ul.single-item{margin:0;}.rml-list{padding-left:20px;}.rml-list li{}ul.list-disc li,.rml-list li{list-style-type:disc;}ul.list-square li{list-style-type:square;}ul.list-circle li{list-style-type:circle;}ol.list-decimal li{list-style-type:decimal;}ol.list-lower-alpha li{list-style-type:lower-alpha;}ol.list-upper-alpha li{list-style-type:upper-alpha;}ol.list-lower-roman li{list-style-type:lower-roman;}ol.list-upper-roman li{list-style-type:upper-roman;}div.rml-align-center{text-align:center;}div.rml-align-center div.youtube{margin:0 auto;}div.rml-align-left{text-align:left;}div.rml-align-right{text-align:right;}img.rml-align-right{float:right;}img.rml-align-left{float:left;}div.rmltoolbar{position:absolute;width:84ex;padding:0.2em;display:block;}div.rmltoolbar img.button{background:url(img/icons/toolbar/toolbar-sprite.gif) no-repeat;cursor:pointer;border:1px solid black;margin:1px;width:18px;height:0;overflow:hidden;padding-top:18px;float:left;}div.rmltoolbar #rmltoolbar_undo{background-position:0 -10px;}div.rmltoolbar #rmltoolbar_align_center{background-position:0 -38px;}div.rmltoolbar #rmltoolbar_align_left{background-position:0 -66px;}div.rmltoolbar #rmltoolbar_align_right{background-position:0 -94px;}div.rmltoolbar #rmltoolbar_bold{background-position:0 -122px;}div.rmltoolbar #rmltoolbar_color_bg{background-position:0 -150px;}div.rmltoolbar #rmltoolbar_color_fg{background-position:0 -178px;}div.rmltoolbar #rmltoolbar_documentlibrary{background-position:0 -206px;}div.rmltoolbar img.hline{background-position:center -234px;width:12px;}div.rmltoolbar #rmltoolbar_hr{background-position:0 -266px;}div.rmltoolbar #rmltoolbar_image{background-position:0 -294px;}div.rmltoolbar #rmltoolbar_italic{background-position:0 -322px;}div.rmltoolbar #rmltoolbar_link{background-position:0 -350px;}div.rmltoolbar #rmltoolbar_list_bullet{background-position:0 -378px;}div.rmltoolbar #rmltoolbar_list_num{background-position:0 -406px;}div.rmltoolbar #rmltoolbar_maximize{background-position:0 -434px;}div.rmltoolbar #rmltoolbar_minimize{background-position:0 -462px;}div.rmltoolbar #rmltoolbar_redo{background-position:0 -490px;}div.rmltoolbar #rmltoolbar_smileys{background-position:0 -518px;}div.rmltoolbar #rmltoolbar_strike{background-position:0 -546px;}div.rmltoolbar #rmltoolbar_sub{background-position:0 -574px;}div.rmltoolbar #rmltoolbar_sup{background-position:0 -602px;}div.rmltoolbar #rmltoolbar_table{background-position:0 -630px;}div.rmltoolbar #rmltoolbar_underline{background-position:0 -658px;}div.rmltoolbar img.hline,div.rmltoolbar img.hline:hover{border:none !important;background-color:transparent !important;cursor:default;}div.rmltoolbar img.button:hover{border-top:1px solid black;background-color:#FFF;}div.rmltoolbar img.button:active{border-top:1px solid buttonshadow;border-left:1px solid buttonshadow;border-bottom:1px solid buttonhighlight;border-right:1px solid buttonhighlight;background-color:#ccc;}div.rmltoolbar div#smileys{display:none;}div.rmltoolbar div#smileys.show{display:block;position:absolute;top:25px;right:5px;width:35em;overflow:auto;border:1px solid #ccc;background:#F2F2F2;}div#smileys img{border:none !important;margin:0;}div#smileys div{float:left;text-align:center;padding:4px;padding-right:4px;}div#smileys div span{display:block;}div.rmltoolbar div#smileys div span{color:black;}img.rml{clear:both;}img.enlargeable{cursor:-moz-zoom-in;cursor:-webkit-zoom-in;}ol.messages table.rml-table{width:100%;}table.rml-table tbody td{border:1px solid black;vertical-align:top;background-color:white;}table.phphighlight td{border:1px solid black;background-color:white;color:black;vertical-align:top;clear:none;}table.phphighlight td.phphighlightline{width:2em;background-color:lightgrey;text-align:right;}table.phphighlight td pre{font-family:monospace;font-size:1.2em;clear:none;}table.phphighlight td.phphighlightcode pre{overflow-x:auto;clear:none;width:50em;}ol.messages div.message-content blockquote{padding-left:2em;}ol.messages div.message-content img.smiley{border:none;}ol.messages div.message-content div.message-content-content a.secure-link{background:url(img/icons/lock.gif) no-repeat top right;padding-right:15px;}ol.messages div.message-content-content ul,ol.messages div.message-content-content ol,ol.messages div.message-content-content blockquote{margin-top:1em;margin-bottom:1em;}ol.messages div.message-content-content span.mono{font-family:monospace;}ol.messages div.message-content-content span.serif{font-family:serif;}ol.messages div.message-content-content span.sansserif{font-family:sans-serif;}table.rml-table{caption-side:top;width:100%;border-color:black;border-style:solid;border-width:1px;}table.rml-table caption{display:block;background-color:transparent;font-style:italic;}table.rml-table td{background-color:#f7f7f7;}table.rml-table th{background-color:#eee;border:none;}table.phphighlight td.phphighlightcode pre *{font-family:monospace;white-space:nowrap;}div.modbreak{border:2px solid red;width:60%;background:#D9D9D9;margin:1em auto;}div.modbreak strong{position:relative;top:-0.75em;left:0.75em;background:red;padding:0 0.3em;}div.modbreak div{padding:0.5em;}div.youtube{background:url(img/icons/youtube.png) no-repeat center;text-align:center;border:1px solid #999;}div.youtube span{padding-top:250px;display:block;width:80%;margin:0 auto;}.tb-buttons{border:1px solid #999 !important;background-color:#F0F0F0;float:left;margin:1px;}.tb-line{float:left;margin:1px;border:none !important;}.tb-raise{border-top:1px solid #999 !important;background-color:#FFF;border:1px solid #000 !important;float:left;margin:1px;}.tb-press{border-top:1px solid buttonshadow !important;border-left:1px solid buttonshadow !important;border-bottom:1px solid buttonhighlight !important;border-right:1px solid buttonhighlight !important;background:#ccc;margin:1px;float:left;}#toolbar{margin:0px;width:auto;padding:1px;padding-bottom:2px;height:22px;text-align:left;}textarea#rml_textarea{margin-top:2.5em;}div.colorpicker-lightbox{position:absolute;}div.colorpicker-lightbox .color-selector{border:1px solid black;padding:15px;position:absolute;left:0;top:0;height:263px;width:250px;background:white;}div.colorpicker-lightbox .saturation{position:relative;width:200px;height:200px;}div.colorpicker-lightbox .hue{position:absolute;left:230px;top:15px;width:35px;height:200px;}div.colorpicker-lightbox .preview{height:50px;width:198px;position:absolute;top:225px;left:15px;border:1px solid black;}div.colorpicker-lightbox input{position:absolute;top:225px;left:230px;height:50px;width:35px;min-width:35px;font-weight:bold;border:1px outset black;}div.rmltoolbar div.colorpicker-lightbox img,div.rmltoolbar div.colorpicker-lightbox img:hover{background:transparent;border:0;}ul,li,h1,h2,h3,h4,p{margin:0;padding:0;}body{position:relative;font-family:arial,sans-serif;font-size:11px;margin:0 auto;width:1000px;}img{border:none;}h1,hr{display:none;}h2{font-size:16px;}h3{font-size:14px;}a{color:black;}a:hover{text-decoration:none;}dl{overflow:hidden;}dt,dd{padding:1px 0;}div#header{position:relative;height:150px;margin-top:30px;border:1px solid black;border-right:0;border-top:none;}div#logo{position:relative;border:1px solid black;border-left:none;width:758px;height:89px;margin:0;}body.site-locale-nl_NL div#logo.has-no-custom-image{background:url(img/logo.jpg) no-repeat 130px 0;}body.site-locale-en_US div#logo.has-no-custom-image{background:url(img/logo-en_US.jpg) no-repeat 130px 0;}div#logo.header-dimensions-replace_login{width:auto;}div#logo img{width:131px;height:89px;position:absolute;top:0;left:0;background:white;border-right:1px solid black;}div#logo.header-dimensions-replace_login img,div#logo.header-dimensions-extra_large img{border-right:none;}div#logo img#header-logo{left:132px;width:auto;height:89px;}div#logo.header-dimensions-replace_login img#header-logo,div#logo.header-dimensions-extra_large img#header-logo{left:0;}div#logo img#random-image-2{left:auto;right:0;border-right:0;border-left:1px solid black;}div#login{position:absolute;top:0;right:0;width:224px;height:81px;border:1px solid black;border-right:1px solid black;padding:4px 4px;line-height:150%;}div#login h4,div#login h4 a,div#login li a{color:#bf3e17;font-size:12px;font-weight:bold;text-decoration:none;}div#login p{width:70%;}div#login fieldset,div#quick-search fieldset{padding:0;}div#quick-search form{overflow:auto;}div#login dl{width:100%;margin:0;}div#login dt{float:left;clear:left;width:90px;}div#login img.usericon{display:none;}div#login ul li{list-style-type:none;}div#login ul#extra-navigation li{float:left;}div#login ul#extra-navigation li:before{content:' | ';margin:0 1px 0 3px;}div#login ul#extra-navigation li:first-child:before{content:'';}div#login ul#extra-navigation li a{background:none;}div#login ul#extra-navigation li a:hover{text-decoration:underline;}div#login ul li.myreact-link a{background:url(img/icons/action_icons_18_png/myreact.png) no-repeat top left;}div#login ul li.edituser-link a{background:url(img/icons/action_icons_18_png/edit_user.png) no-repeat top left;}div#login ul li.bookmarks-link a{background:url(img/icons/action_icons_18_png/list_bookmarks.png) no-repeat top left;}div#login ul li.preferences-link a{background:url(img/icons/action_icons_18_png/preferences.png) no-repeat top left;}div#login ul li.logout-link a{background:url(img/icons/action_icons_18_png/logout.png) no-repeat top left;}div#content{position:relative;width:692px;padding:0 6px;border:1px solid black;border-top:0;background-color:#fff;float:left;overflow:hidden;padding-bottom:32px;}div#menus{background-color:#bf2e1b;border-top:1px solid black;border-left:1px solid black;border-right:1px solid black;margin-top:-1px;padding-top:12px;margin-left:131px;height:47px;}ul#menu,ul#submenu{overflow:auto;border-top:1px solid black;background-color:white;}ul#submenu{font-size:90%;}ul#menu a,ul#submenu a,ul#langmenu a,div#newsletter a{text-decoration:none;}ul#menu li,ul#submenu li{float:left;padding:4px 14px 3px 4px;font-size:14px;font-weight:bold;background:url(img/menu-item-shadow.jpg) no-repeat top right;}ul#menu li{padding-left:2px;}ul#menu li a{background:url(img/menu-item-mask.gif) no-repeat 0 0;padding-left:12px;padding-top:2px;}ul#menu li.nav-business a{background-image:url(img/menu-item-business.gif);}ul#menu li.nav-society a{background-image:url(img/menu-item-society.gif);}ul#menu li.nav-travel a{background-image:url(img/menu-item-travel.gif);}ul#menu li.nav-nature a{background-image:url(img/menu-item-nature.gif);}ul#menu li.nav-culture a{background-image:url(img/menu-item-culture.gif);}ul#menu li.nav-sport a{background-image:url(img/menu-item-sport.gif);}ul#submenu li{font-size:12px;}ul#submenu li a{background-color:white !important;}div#core{position:relative;float:left;clear:left;margin:0 0;line-height:150%;min-height:400px;font-size:12px;}div#core dt{float:left;width:150px;clear:left;}div#core dt,div#core dd{padding-bottom:6px;}div#core dd{float:left;padding-right:8px;}div#core dd.dd-sequence.explanation{padding-left:150px;font-style:italic;}div#core dd.dd-sequence.publicationdate{padding-left:0;}div#core dd.keywordselector{width:230px;clear:none;}div#core dd.dd-sequence{float:left;}div#core form{padding-top:8px;}div#core form h3,div#topic-admin h2{position:relative;clear:both;margin-bottom:6px;}div#core form h4{font-size:12px;}div#core dl.page-navigation{height:18px;margin-top:8px;border-top:1px solid #d8d8d8;}div#core dl.faq dt{font-weight:bold;float:none;}div#core dl.faq dt,div#core dl.faq dd{width:auto;}ul#footer{position:absolute;bottom:8px;right:8px;font-size:10px;clear:both;}ul#footer a,ul#footer li{color:white;}ul#footer li{display:inline;}ul#footer li:before{content:' | ';margin:0 1px;}ul#footer li:first-child:before{content:'';}body:after{content:'.';visibility:hidden;height:0;overflow:hidden;display:block;clear:both;}div#sidebar{margin-top:2px;float:right;}div#sidebar ol{list-style:none;}div#sidebar p.body{}div#sidebar h2,div#sidebar h3{width:100%;}div#content-sub,div#features{position:relative;float:left;width:143px;padding:0 2px;overflow:hidden;}div#content h2,div#content h3,div#sidebar h2,div#sidebar h3{background:url(img/title-background-white.gif) repeat-x 0px 4px;border-top:1px solid black;padding:8px 6px 2px 6px;margin:6px 0 2px 0;}ul#lang-menu,div#core ul,ul#menu,ul#submenu{list-style:none;}div#error-bar{float:left;width:678px;margin:4px 8px 0 8px;}.required:after{content:' *';color:red;font-size:12px;}div#banner-zone-1{height:60px;width:468px;margin:26px 0 6px 0;}.display-none,.display-no-childs * *{display:none !important;}dl.minilog{clear:both !important;color:white;}p.body{background-color:white;}tr.alternate{background-color:#d8d8d8;}div#content div#navigation ul li{padding-right:15px;}div.discussion-folders li li{cursor:pointer;}div.discussion-folders li li li{margin-left:15px;}body.user_profile dl.property-list{float:left;}body.user_profile div#core dt{font-weight:bold;width:130px;}body.user_profile div#core dd{margin-left:0;width:175px;}body.user_profile div#core dt.biography+dd,body.user_profile div#core dt.africa-connection+dd{width:550px;}body.user_profile dt.weblog+dd a{font-weight:bold;}body.user_profile dl.property-list#user-profile-block1{width:316px;}body.user_profile dl.property-list#user-profile-block2{width:370px;margin-left:6px;}body.user_profile dl.property-list#user-profile-block3{margin-top:5px;width:100%;}a.rss-link{position:absolute;bottom:1px;right:0;background:transparent url(img/icons/rss_20px.gif) no-repeat scroll left top;height:0;margin:0;overflow:hidden;padding-top:20px;width:20px;}ul#admin-links{position:fixed;margin:0.5em;right:0;top:0;}ul#admin-links li{float:left;margin-left:0.2em;}ul#admin-links li a{padding-top:16px;height:0;width:16px;overflow:hidden;display:block;}ul#admin-links li.edit-page a{background:url(img/icons/page_white_edit.png) no-repeat left top;}ul#admin-links li.edit-blocks a{background:url(img/icons/page_edit.png) no-repeat left top;}ul#admin-links li.edit-blocks a.active{background:url(img/icons/page.png) no-repeat left top;}ul#admin-links li.add-page a{background:url(img/icons/page_white_add.png) no-repeat left top;}ul#admin-links li.add-blocks a{background:url(img/icons/page_add.png) no-repeat left top;}dl.minilog{color:black;}body.small iframe#top-calendar,body.small div#logo,body.small div#header,body.small div#sidebar,body.small div#content div#navigation,body.small div#content div#welcome-text,body.small div.document_admin,body.small div.action-header ul.document-links li.document-manage-folders,body.small div#footer{display:none !important;}div.block{background-color:white;float:left;width:332px;min-height:80px;position:relative;}div.block.no-background{background-color:transparent;border:0;padding:0;}div.block.no-title{border-top:1px solid black;}div.block.no-background.no-title{border:0;}div.block img[border]{border:1px solid black;}div.block a[rel="more"]{display:block;font-weight:bold;color:#bd301a;text-align:right;}div.block.no-title h2,div.block.no-title h3{display:none;}div.block ul{margin:0;padding:0.3em 0 0.5em 0;list-style-type:none;}div.block p{margin:0;padding:0.3em 0 0.5em 0;}div.block.two-columns{width:676px;}div.block.two-columns h2{background-image:url(img/title-background.gif);}div.block.clear{clear:both;}div.block div#action-header.error_general{height:auto;background:none;}div.block div#action-header.error_general ol,div.block div#action-header.error_general p{display:none;}div.block a[rel=edit]{position:absolute;top:0.1em;right:0.5em;padding-top:16px;height:0;width:16px;overflow:hidden;display:block;background:url(img/icons/page_white_edit.png) no-repeat left top;}div#content div.block{margin:0 6px 4px 6px;}div#content div.block-type-react-action{margin:0;}div#content-sub div.block{font-size:11px;}div#content-sub div.block dl{overflow:hidden;}div#content-sub div.block dd,div#content-sub div.block dt{padding:0;}div#content-sub div.block dd{padding-bottom:2px;}div#content-sub div.block dl strong{}div#content-sub .show-after-firstmessage{display:none;}div#features div.block{height:auto;min-height:0;font-size:10px;}div#features div.block.no-title h2{display:none;}div#features div.block.no-background{background:transparent;border-color:white;}.block-type-forum-tracker li,.block-type-category-tracker li{margin-bottom:12px;clear:both;}.block-type-forum-tracker img.topic-image,.block-type-category-tracker img.topic-image{width:50px;height:45px;float:left;margin:0 5px 0 0;border:1px solid black;background:url(img/icons/topic_icons_28_png/topic_open.png) no-repeat center;}.block-type-forum-tracker span.time,.block-type-category-tracker span.time{display:block;float:left;color:#bd301a;font-weight:bold;margin-right:3px;}.block-type-forum-tracker a.topic-title,.block-type-category-tracker a.topic-title{display:block;font-weight:bold;}div#content-sub .block-type-forum-tracker img,div#content-sub .block-type-category-tracker img{display:none;}div#content-sub .block-type-forum-tracker span.time,div#content-sub .block-type-category-tracker span.time{color:black;font-weight:normal;}div#content-sub .block-type-forum-tracker span.time:after,div#content-sub .block-type-category-tracker span.time:after{content:" |";}div#sidebar .block-type-forum-tracker a.topic-title,div#sidebar .block-type-category-tracker a.topic-title{font-weight:normal;color:#BD301A;}.topictracker li{padding:3px 0;}.topictracker .time{padding-right:6px;color:#787878;}.block-type-forum-list div.forum{float:left;width:326px;margin:0 1em 1em 0;min-height:13em;}.block-type-forum-list div.forum img{float:left;border:1px solid black;margin:1.5em 0.5em 0 0;}.block-type-forum-list div.forum h3{margin:0 0 0 0em;font-size:1.2em;}.block-type-forum-list div.forum h3:first-child{margin-left:0;}div.block-type-react-action{height:auto;width:692px;}div.block-type-react-action ul,div.block-type-react-action p{margin:0;padding:0;}body div.block-type-react-action p.body{margin-top:4px;padding:4px;border:1px solid black;}body div.block-type-react-action fieldset p.body{border:0;}div.block-type-show-topic div.topic-document{float:right;margin:4px 0 5px 5px;}div#content-sub div.block-type-show-topic h2,div#features div.block-type-show-topic h2,div.block-type-show-topic.limit-1 h2{display:none;}div#content-sub div.block-type-show-topic div.topic-document,div#features div.block-type-show-topic div.topic-document{float:none;margin:5px 0 0 0;text-align:center;}div.block-type-show-document{text-align:center;}div.block-type-show-document h2{text-align:left;}div.block-type-show-document img{margin:5px 0;}div#content-sub div.block-type-user-data h3{float:left;background:none;border:0;padding:5px 5px 5px 10px;}div.block-type-user-data img.usericon{float:right;}div.block-type-user-data ul.user-links{margin:0.5em 0;}div.block-type-user-data ul.user-links li.view-weblog a{font-size:1.2em;font-weight:bold;}div.block-type-google-ads{text-align:center;}div.block-type-google-ads h2{text-align:left;}div.block-type-archive ul.navigation li{float:left;width:50%;clear:none;text-align:left;}div.block-type-archive ul.navigation li:first-child a{text-align:left;}div.block-type-archive a.topic-title{float:left;}div.block-type-archive ul.star-rating{height:1.2em;margin-left:0.7em;padding-top:0;}div.block-type-archive ul.star-rating li{padding:0;}div#sidebar .block{min-height:0px;width:132px;padding:0 6px 4px 4px;}div#sidebar h2,div#sidebar h3{font-size:14px;width:100%;margin-left:-4px;}div#sidebar div.block.layout-2,div#sidebar div.block.layout-3{border:1px solid black;}div#sidebar div.block.layout-2{padding:0 2px 4px 2px;width:139px;background:white url(img/background-tree.gif) repeat -60px 0;border-top:none;overflow:hidden;}div#sidebar div.block.layout-3{padding:0 8px 0 6px;width:129px;}div#sidebar div.block.layout-2 h2,div#sidebar div.block.layout-2 h3{background:#424242;color:white;font-size:11px;margin:0;padding:2px;text-align:center;margin-left:-2px;}div#sidebar div.block.layout-3 h2,div#sidebar div.block.layout-3 h3{background:none;font-size:10px;border-bottom:1px solid #be2e1a;margin:0;width:139px;padding:1px 2px;margin-left:-6px;}div#sidebar div.block.no-padding{padding:0;width:143px;}div#sidebar div.block.no-padding h2,div#sidebar div.block.no-padding h3{margin-left:0px;padding:0 0 0 4px;}.block-type-rating ul{margin:0 auto;}.star-rating,.star-rating a:hover,.star-rating a:active,.star-rating a:focus,.star-rating .current-rating{background:url(img/bg-rating.png) left -1000px repeat-x;}.star-rating{position:relative;width:125px;height:1.5em;overflow:hidden;padding:0;background-position:left top;}.star-rating li{height:25px;}.star-rating a,.star-rating .current-rating{position:absolute;top:0;left:0;text-indent:-1000em;height:25px;line-height:25px;outline:none;overflow:hidden;border:none;}.star-rating a:hover,.star-rating a:active,.star-rating a:focus{background-position:left bottom;}.star-rating a.one-star{width:20%;z-index:6;}.star-rating a.two-stars{width:40%;z-index:5;}.star-rating a.three-stars{width:60%;z-index:4;}.star-rating a.four-stars{width:80%;z-index:3;}.star-rating a.five-stars{width:100%;z-index:2;}.star-rating .current-rating{z-index:1;background-position:left center;}div#block-container div.block{margin:0;}div#block-container .two-columns{width:692px;}div.block-type-topbanner{position:absolute;top:-75px;left:0px;border:0;margin:0;padding:0;min-height:0;background:transparent;}.force-left{clear:left;}body.page div#core{width:704px;margin-left:0;}body.list_topics div#action-header p,body.list_messages div#action-header p,body.list_message div#action-header p,div.section hr{display:none;}body.new_password div#core form p{color:black;}body.login dl.property-list{margin-top:16px;}body.logout div#page-content p.body{margin-bottom:4px;}body.find table,div#core dl.topic-navigation.after,body.delete_usernote dl{margin-top:4px;}body.error_general p.body,div#error-bar{border:1px solid #f0543a;padding:4px;overflow:hidden;}body.list_forum_stats div#core dd{font-weight:bold;}body.list_users #submit-btn,body.rml_preview #submit-btn,body.create_user #submit-btn{margin-left:0;}body.create_user form#primary-input h3:first-child{display:none;}body.create_user div.block p.body,body.activate_user div.block p.body{border:0;}div#smileys{display:block;width:70%;overflow:auto;}div#smileys div{float:left;text-align:center;padding:4px;padding-right:4px;}div#smileys div img{cursor:pointer;}div#smileys div span{display:block;}table#smileys td{border:none;}table#smileys td img{cursor:pointer;}.toggle-icon{cursor:pointer;background-position:10.9em 50%;background-repeat:no-repeat;background-image:url(img/icons/explode_min.gif);}dd.dd-sequence.uploadfile{padding:0 0 8px 150px;margin-bottom:8px;border-bottom:1px solid #484848;}table.users img.usericon,div.section img.usericon{display:block;width:60px;height:60px;}div#core table.users dt{width:100px;}div#core table.users dd,div#core td.forum-name dd,div#core td dl.topic-navigation dd,div#core div.section dl dd{width:auto;}col.name,col.subject{width:50%;}div.section{margin-bottom:4px;padding-bottom:0;}div.section.first-section h2,div.section.user-data h2{width:auto;}div.section h2 a{margin-left:4px;}div.section.user-data{position:relative;overflow:auto;padding-bottom:4px;float:left;width:30%;}div.section.user-data .user-links{position:absolute;top:48px;left:80px;}div.section.user-data dl{float:right;}div.section.user-data address{border-bottom:1px solid #484848;padding-bottom:4px;margin-bottom:4px;}div.section.activetopics{width:65.5%;margin-left:33%;}div.discussion-content{width:74%;float:right;overflow-x:hidden;border-left:1px solid black;border-bottom:1px solid black;border-top:1px solid black;padding:1px 5px 5px 5px;background:white;}div.discussion-content{width:73%;margin-right:1px;}div.discussion-content dd{width:66%;}div.discussion-content h3{clear:both;padding-left:0.2em;}div.discussion-content h3 span{display:block;}div.discussion-folders{width:24%;float:left;border-right:none;border:1px solid black;border-left:none;padding:1px;padding-left:0;background:white;}div.discussion-folders h3{padding-left:0.5em;}div.discussion-folders a.return-link{white-space:nowrap;}div.discussion-folders ul.folders{border:0;width:20px;}div.discussion-folders li{border-top:1px solid white;padding:0 0.2em 0.2em 0;padding-left:0em;list-style:none;background-image:url(img/icons/topic_icons_18_png/topic_open.png);background-position:1px 1px;background-repeat:no-repeat;vertical-align:middle;line-height:1.6em;width:118px;}div.discussion-folders li.contains-child{background-image:url(img/icons/topic_icons_18_png/topic_open_plus.png);}div.discussion-folders li ul{margin-left:-32px;}div.discussion-folders li li{border-top:none;width:120px;padding-left:19px;}div.discussion-folders li.active,div.discussion-folders li.contains-active{background-image:url(img/icons/topic_icons_18_png/topic_open_new.png);}div.discussion-folders li.active.contains-child{background-image:url(img/icons/topic_icons_18_png/topic_open_new_min.png);}div.discussion-folders li.list_bookmarks{background-image:url(img/icons/action_icons_28_png/list_bookmarks.png);padding-left:2.5em;line-height:2.6em;}div.discussion-folders li.list_documents{background-image:url(img/icons/action_icons_28_png/list_documents.png);padding-left:2.5em;line-height:2.6em;}div.discussion-folders li.list_discussions{background-image:url(img/icons/action_icons_28_png/list_discussions.png);padding-left:2.5em;line-height:2.6em;}div.discussion-folders li span.unread{font-weight:bold;}div.discussion-content td em{font-weight:bold;font-style:normal;color:red;}div.discussion-folders li.user-made{font-style:italic;}div.discussion-folders ul li ul.not_current_action{display:none;}div.discussion-folders li ul{padding-top:0.5em;}body.list_documents_small{background:red;margin:0 auto;padding:0;width:880px;}body.list_documents_small div#content,body.list_documents_small div#core{width:880px;}body.list_documents_small div#action-footer{visibility:hidden;height:0;overflow:hidden;}body.list_documents_small ul{margin:0;padding:0.3em 0 0.5em 0;list-style-type:none;}body.list_documents_small div.document{width:10em;}body.list_documents_small div#action-header{border:0;}body.list_documents_small div#action-header h2{background:url(img/title-background-doclib.gif) no-repeat;width:858px;}body.list_discussions div.discussion-folders{margin-left:10px;}body.list_discussions div.discussion-content{width:70%;margin-right:13px;}div.document{width:11.1em;height:10em;padding:0.5em;margin:0 7px 7px 0;border:1px solid #484848;background:#f7f7f7;}div.document:hover{background:#fff4f2;}div#action-footer{display:none;}body.delete_usernote p.body{margin:-8px 0 4px 0;}body.user_profile h3{display:none;}div.discussion-folders ul.folders{margin-left:0;padding-left:0;}div.discussion-folders ul{padding-left:12px;}div.discussion-folders li.active a{color:#bf311a;}body.pm_new_message div#core dd{width:76%;}body.pm_new_message div#core dd.dd-sequence{}body.list_category table,body.list_categories table{margin-top:0.5em;}ul#category-search-selector{position:absolute;right:10px;top:39px;}ul#category-search-selector li{display:inline;margin:0 5px 0 0;padding:0;width:auto;}div#action-header ul#category-search-selector li a{padding:3px;}div#action-header ul#category-search-selector li a.active{color:#bf311a;font-weight:bold;}iframe#imagewizard{position:fixed;bottom:1em;top:auto;right:50px;}.toggle-icon{cursor:pointer;}.display-none{display:none;}dd.dd-sequence.required-empty{color:red;}body #channel-title{position:absolute;top:91px;left:0;background:url(img/africa-home.gif) no-repeat top left;height:57px;width:131px;}div.rmltoolbar{width:auto;}div.rmltoolbar div#smileys.show{width:12em;height:7.8em;}div.autocomplete{background:white;width:22.3em;height:10em;overflow-y:scroll;margin-left:1.75em;border:1px solid black;border-top:0;position:absolute;}body.insert_topic div.autocomplete{margin-left:0;}div.autocomplete ul{border:0;}div.autocomplete ul li{float:none !important;display:block !important;cursor:pointer;}div.autocomplete ul li:hover{background-color:#D4D0C8;}div.autocomplete ul li.picked{background:green;color:white;}textarea#weblog-description{width:22em;height:10em;}body.create_user form#primary-input select,body.edit_user form#primary-input select{max-width:none;}fieldset{border:none;}legend{display:none;}option{padding-right:4px;}optgroup option{padding-left:12px;}textarea{font-family:arial;font-size:12px;}div#topic-admin textarea{width:394px;}select{border:1px solid black;background:#F9F9F9;max-width:490px;}input[readonly]{color:#333;font-style:italic;}textarea#teasertext,textarea#introduction,textarea#rml_textarea{width:465px;height:200px;}textarea#rml_textarea.extra-large{width:465px;height:200px;}textarea#notepad{height:500px;}input[type='text'],input[type='password'],textarea{border:1px solid black;padding:2px;background:#F9F9F9;}input[type='submit'],input[type='reset'],input[type='button']{font-size:11px;}input:focus,textarea:focus,select:focus{background:#EFEFEF;}input#quick-login-form-user,input#quick-login-form-password{width:124px;}a#quick-login-forgot-pass{position:absolute;right:4px;top:4px;}input#age_start,input#age_end,input#limit{width:60px;}input#submit-btn{margin-left:8px;}input#topicnote{position:relative;bottom:82px;}select#forum{min-height:200px;min-width:270px;}select#keywordselector{width:230px;height:20px;}div#core form#more-topic fieldset{margin:-8px 0 0 0;background-color:white;padding:8px 4px 4px 4px;}form#quick-search{border-bottom:1px solid black;margin:0 0 2px 2px;padding:2px;}#quick-search{position:absolute;padding:1px 60px 2px 2px;bottom:23px;right:0;}#quick-search-for{border:1px inset gray;width:165px;padding:1px 2px;}#quick-search-submit{position:absolute;}dd.field-alert{background-color:#BF2E1B;border:1px solid black;color:white;font-weight:bold;padding:10px;}div#action-header,div#core table{background-color:white;}div#core table{border:1px solid black;width:100%;margin-bottom:4px;padding:0;border-spacing:0;}div#core table thead,div#core table tfoot{white-space:nowrap;text-align:left;}div#core table td,div#core table th{padding:2px 6px;border:none;}div#core caption{display:none;}div#core table th{background-color:black;color:white;font-weight:normal;font-size:110%;}div#core tr.category-name td{font-size:150%;padding:8px;text-align:left !important;padding-top:12px;border-top:1px solid black;}tr.category-name td a{font-size:1.30em;padding-left:40px;}tr.topic-has-new-0,tr.topic-has-new-0 a{color:#555;}tr.topic-is-alias-1,tr.topic-is-alias-1 a{color:#6a4646;}li.forum-find,li.topic-find{display:none;}ol#messages,ol#firstmessage{background-color:white;clear:both;list-style:none;padding-left:0;}ol#firstmessage.messages img.topic-image{float:left;margin:0 5px 0 0;border:1px solid black;}ol#firstmessage{margin-bottom:4px;}ol#messages div.message-data{background-color:#be2e1a;padding:4px;border-top:1px solid black;}ol#messages div.message-data,ol#messages div.message-data a{color:white;}div#topic-admin{clear:both;margin-top:4px;}div#topic-admin h2{display:none;}div#block-container+h2{clear:both;}div#topic-admin input[type="checkbox"]{margin-right:4px;}div#topic-admin dd.dd-sequence{padding-left:150px;}input#change_xy_coordinate,input#xy_coordinate{float:left;}span#xy_coordinate_pick{background:url(img/world-icon.png) no-repeat left top;overflow:hidden;height:0;padding-top:16px;margin:2px 0 0 5px;cursor:pointer;display:block;}span#xy_coordinate_pick.collapse{background:url(img/world-collapse-icon.png) no-repeat left top;}div#google-map-container{padding-top:10px;}div#google-map-container.hide{display:none;}div#google-map{clear:both;width:500px;height:400px;border:1px solid #484848;margin-top:10px;}li.message{position:relative;padding:4px;min-height:100px;clear:both;overflow:hidden;}li.message.selected{background-color:silver;}li.message hr{display:none;}li.message div.author-data{padding:0 0 0 4px;float:left;width:80px;}li.message div.author-nickname a{position:absolute;top:7px;color:white;}li.message div.author-data img{display:block;border:1px solid black;}li.message ul.author-links{display:none;}li.message ul.author-links li{margin:0;}li.message div.message-data{position:relative;color:#606060;text-align:right;padding:2px;height:16px;}li.message div.message-data a{color:#606060;}li.message div.message-data li{display:inline;margin-left:5px;}li.message div.message-data address{position:absolute;right:250px;top:4px;}li.message div.message-content{padding:4px 4px 0 110px;}li.message div.message-content h2,li.message div.message-content h3{position:static;background:none;border:none;margin:0;}li.message div.message-content h2,li.message div.message-content h3,li.message div.message-content h4,li.message div.message-content h5,li.message div.message-content h6{padding:6px 0 0 0;}li.message blockquote{margin:4px;}li.message div.message-quote-div,li.message .updated-by{margin-left:4px;padding:4px;border-top:1px solid #aaa;border-bottom:1px solid #aaa;background-color:#ddd;}li.message address.signature{border-top:1px solid #bf311a;color:#777;font-size:10px;margin-top:2px;}li.message address.updated-by{margin:2px 0 0 0;padding:0 2px;opacity:.6;}ol.messages ul.message-links li.message-bookmark,ol.messages ul.message-links li.message-topicreport,ol#firstmessage ul.message-links li.message-quote{display:none;}ol#firstmessage li.message div.author-data{display:none;}ol#firstmessage li.message div.message-content{padding:4px;}ol#firstmessage li.message div.message-data address{left:2px;right:auto;}ol#firstmessage li.message div.message-topic-authors{color:#999;padding-bottom:3px;}ol#firstmessage li.message div.topic-intro{margin:0 0 5px 0;}ol#firstmessage li.message div.topic-document{float:left;margin:5px 5px 5px 0;}ol.messages li div.author-data address.author-title{font-style:italic;font-weight:normal;}ol.messages ul.author-links{clear:left;margin-left:0.2em;margin-top:0.9em;}ol.messages ul.author-links li{margin-right:0.4em;margin-bottom:0.2em;}body.javascript ol.messages ul.author-links li{float:left;width:1.54em;}ol.messages ul.author-links li a{display:block;overflow:hidden;background-repeat:no-repeat;background-image:url(img/icons/user_icons_18_tiled.png);}body.javascript ol.messages ul.author-links li a{height:0;width:1.54em;margin:0;padding:18px 0 0 0;}div#action-header.weblog+ol.messages div.author-data{display:none;}div#action-header.weblog+ol.messages div.message-content{padding-left:0;}div#action-header.weblog+ol.messages div.message-data address{left:0;}ol.messages ul.author-links li.author-admin a{background-position:0 -18px;}ol.messages ul.author-links li.author-admin a:hover{background-position:0 0;}ol.messages ul.author-links li.author-pushmessage a{background-position:0 -306px;}ol.messages ul.author-links li.author-pushmessage a:hover{background-position:0 -288px;}ol.messages ul.author-links li.author-privatemessage a{background-position:0 -486px;}ol.messages ul.author-links li.author-privatemessage a:hover{background-position:0 -468px;}ol.messages ul.author-links li.author-profile a{background-position:0 -342px;}ol.messages ul.author-links li.author-profile a:hover{background-position:0 -324px;}ol.messages ul.author-links li.author-add-contact a{background-position:0 -270px;}ol.messages ul.author-links li.author-add-contact a:hover{background-position:0 -252px;}ol.messages ul.author-links li.author-homepage a{background-position:0 -54px;}ol.messages ul.author-links li.author-homepage a:hover{background-position:0 -36px;}ol.messages ul.author-links li.author-find a{background-position:0 -450px;}ol.messages ul.author-links li.author-find a:hover{background-position:0 -432px;}ol.messages ul.author-links li.author-usernotes a{background-position:0 -90px;}ol.messages ul.author-links li.author-usernotes a:hover{background-position:0 -72px;}ol.messages ul.author-links li.author-usernotes.usernote-count-1 a{background-position:0 -126px;}ol.messages ul.author-links li.author-usernotes.usernote-count-1 a:hover{background-position:0 -108px;}ol.messages ul.author-links li.author-usernotes.usernote-count-2 a{background-position:0 -162px;}ol.messages ul.author-links li.author-usernotes.usernote-count-2 a:hover{background-position:0 -144px;}ol.messages ul.author-links li.author-usernotes.usernote-count-3 a{background-position:0 -198px;}ol.messages ul.author-links li.author-usernotes.usernote-count-3 a:hover{background-position:0 -180px;}ol.messages ul.author-links li.author-usernotes.usernote-count-4 a{background-position:0 -234px;}ol.messages ul.author-links li.author-usernotes.usernote-count-4 a:hover{background-position:0 -216px;}body.javascript ol.messages ul.author-links.author-links-expanded,ol.messages ul.author-links{width:auto;}body.javascript ol.messages ul.author-links.author-links-expanded li,ol.messages ul.author-links li{float:none;width:12em;}body.javascript ol.messages ul.author-links.author-links-expanded li a,ol.messages ul.author-links li a{width:auto;max-width:13em;height:18px;padding-top:0;padding-left:20px;margin-top:2px;}body.list_message ol+p,body.list_messages ol+p{border-top:1px solid black;margin-top:5px;padding:7px;}body.list_message p.body,body.list_messages p.body{display:none;}div#core dl.topic-navigation dt{width:auto;padding-right:4px;}dl.topic-navigation.before{background-color:white;border:1px solid black;padding:4px;}dl.topic-navigation dd{font-weight:bold;}div#core dl.topic-navigation.after dd,div#core dl.topic-navigation.after dt{padding-bottom:0;}td.topic-forum{border-left:none;}td.topic-status,td.forum-status,td.bookmark-status{background-position:center center;background-repeat:no-repeat;width:2.6em;height:3em;border-left:none;background-color:white;}td.topic-name a.current-page{text-decoration:underline;font-weight:normal;}td.topic-status ul,td.forum-status ul,td.bookmark-status ul{width:18px;height:0;padding:25px 5px 3px 5px;border:1px solid #999;overflow:hidden;margin-left:1px;position:relative;}td.topic-status li,td.forum-status li,td.bookmark-status li{position:absolute;top:2.6em;}img.usericon{border:1px solid black;margin:1px 0 0 0;}tr.topic-statusid-1 td.topic-status{background-image:url(img/icons/topic_icons_28_png/topic_sticky.png);}tr.topic-statusid-1.topic-has-new-1 td.topic-status{background-image:url(img/icons/topic_icons_28_png/topic_sticky_new.png);}tr.topic-statusid-1.topic-has-new-0.topic-has-note-1 td.topic-status{background-image:url(img/icons/topic_icons_28_png/topic_sticky_report.png);}tr.topic-statusid-1.topic-has-new-1.topic-has-note-1 td.topic-status{background-image:url(img/icons/topic_icons_28_png/topic_sticky_new_report.png);}tr.topic-statusid-1.topic-has-new-0.topic-has-reports-1 td.topic-status{background-image:url(img/icons/topic_icons_28_png/topic_sticky_report.png);}tr.topic-statusid-1.topic-has-new-1.topic-has-reports-1 td.topic-status{background-image:url(img/icons/topic_icons_28_png/topic_sticky_new_report.png);}tr.topic-statusid-2 td.topic-status{background-image:url(img/icons/topic_icons_28_png/topic_open.png);}tr.topic-statusid-2.topic-has-new-1 td.topic-status{background-image:url(img/icons/topic_icons_28_png/topic_open_new.png);}tr.topic-statusid-2.topic-has-new-0.topic-has-note-1 td.topic-status{background-image:url(img/icons/topic_icons_28_png/topic_open_report.png);}tr.topic-statusid-2.topic-has-new-1.topic-has-note-1 td.topic-status{background-image:url(img/icons/topic_icons_28_png/topic_open_new_report.png);}tr.topic-statusid-2.topic-has-new-0.topic-has-reports-1 td.topic-status{background-image:url(img/icons/topic_icons_28_png/topic_open_report.png);}tr.topic-statusid-2.topic-has-new-1.topic-has-reports-1 td.topic-status{background-image:url(img/icons/topic_icons_28_png/topic_open_new_report.png);}tr.topic-statusid-4 td.topic-status{background-image:url(img/icons/topic_icons_28_png/topic_closed.png);}tr.topic-statusid-4.topic-has-new-1 td.topic-status{background-image:url(img/icons/topic_icons_28_png/topic_closed_new.png);}tr.topic-statusid-4.topic-has-new-0.topic-has-note-1 td.topic-status{background-image:url(img/icons/topic_icons_28_png/topic_closed_report.png);}tr.topic-statusid-4.topic-has-new-1.topic-has-note-1 td.topic-status{background-image:url(img/icons/topic_icons_28_png/topic_closed_new_report.png);}tr.topic-statusid-4.topic-has-new-0.topic-has-reports-1 td.topic-status{background-image:url(img/icons/topic_icons_28_png/topic_closed_report.png);}tr.topic-statusid-4.topic-has-new-1.topic-has-reports-1 td.topic-status{background-image:url(img/icons/topic_icons_28_png/topic_closed_new_report.png);}tr.forum-has-new-0 td.forum-status,tr.bookmark-has-new-0 td.bookmark-status{background-image:url(img/icons/topic_icons_28_png/topic_open.png);}tr.forum-has-new-1 td.forum-status,tr.bookmark-has-new-1 td.bookmark-status{background-image:url(img/icons/topic_icons_28_png/topic_open_new.png);}td.topic-name ul li{float:left;line-height:1.2em;margin-right:0.5em;}div#topic-admin h3.toggle-alternate-icon{margin-bottom:0px;}div.colorpicker-lightbox{position:absolute;left:50px;top:-10px;}body.list_categories div#action-header ol,body.list_category div#action-header ol,body.list_categories div#action-header h2,body.list_category div#action-header h2,body.create_forum div#action-header,body.edit_forum div#action-header,body.delete_forum div#action-header,body.activate_user div#action-header ol,body.activate_user div#action-header ul,body.activate_user div#action-header p,body.find div#action-header p,body.find div#action-header ul,body.find div#action-header ol,body.login div#action-header ol,body.login div#action-header p,body.login div#action-header ul,body.newsletter div#action-header ol,body.newsletter div#action-header p,body.user_profile div#action-header ol,body.user_profile div#action-header ul,body.user_profile div#action-header p,body.edit_user div#action-header ol,body.edit_user div#action-header ul,body.edit_user div#action-header p,body.insert_topic div#action-header ol,body.insert_topic div#action-header ul,body.insert_topic div#action-header p,body.create_user div#action-header ol,body.create_user div#action-header p,body.new_password div#action-header ol,body.new_password div#action-header p,body.new_password div.block p.body,body.insert_document div#action-header ol,body.insert_documentgallery div#action-header ol,body.send_activationkey div#action-header ol,body.send_activationkey div#action-header p,body.send_activationkey div.block p.body,div#action-header.weblog ol,div#action-header.weblog ul,div#action-header.weblog p{display:none;}body.list_categories div#action-header p,body.list_category div#action-header p{margin-top:0.5em;}div#action-header,div.block div#action-header{background-repeat:no-repeat;background-position:0 0.3em;}div.block div#action-header.action-header-frontpage{margin-bottom:0;padding-bottom:0;border-bottom-width:0;}div.block div#action-header.action-header-frontpage h2{margin-bottom:0px;}div#action-header ol{display:block;overflow:hidden;white-space:nowrap;padding:4px 0 0 23px;font-size:11px;margin-top:0;}div#action-header ol a{white-space:nowrap;}div#action-header ol li{display:inline;}div#action-header ol li:first-child{display:none;}div#action-header ol li:before{content:' > ';}div#action-header ol li:first-child+li:before{content:'';}div#action-header ul{overflow:hidden;position:absolute;top:4px;right:0;}div#action-header ul li{text-align:right;font-size:11px;margin:0 0 3px 0;}div#action-header ul li a{display:block;padding:0 22px 0 0;background-repeat:no-repeat;background-position:right center;}body.newsletter div#action-header ul{margin-top:0.7em;}body.newsletter div#action-header ul li a{font-size:1.1em;font-weight:bold;}div#core div#action-header dl{border-top:0;margin:1.5em 0 0 0;}dl.topic-navigation{text-align:right;}dl.topic-navigation.before{border:none;border-top:1px solid #d8d8d8;margin-top:8px;padding:4px 0 0 0;}div#action-header ul.user-links{font-weight:bold;border-top:1px solid #d8d8d8;margin-top:8px;padding-top:4px;}div#action-header ul.links li a{padding:2px 0 0 24px;margin-left:8px;}div#action-header li.forum-new-topic a,div#action-header li.topic-new-topic a{background-image:url(img/icons/action_icons_18_png/insert_topic.png);}div#action-header li.discussion-new-discussion a{background-image:url(img/icons/action_icons_18_png/pm_discussion.png);}div#action-header li.calendar-new-event a{background-image:url(img/icons/action_icons_18_png/insert_calendarevent.png);}div#action-header li.calendar-own-events a{background-image:url(img/icons/action_icons_18_png/list_calendar.png);}div#action-header li.folder-new-folder a{background-image:url(img/icons/action_icons_18_png/manage_folders.png);}div#action-header li.calendar-edit-event a{background-image:url(img/icons/action_icons_18_png/update_calendarevent.png);}div#action-header li.calendar-delete-event a{background-image:url(img/icons/action_icons_18_png/delete_calendarevent.png);}div#action-header li.forum-notification a{background-image:url(img/icons/action_icons_18_png/insert_notification.png);}div#action-header li.topic-new-message a{background-image:url(img/icons/action_icons_18_png/insert_message.png);}div#action-header li.discussion-reply a{background-image:url(img/icons/action_icons_18_png/pm_new_message.png);}div#action-header li.document-new-document a{background-image:url(img/icons/action_icons_18_png/insert_document.png);}div#action-header li.listactiveusers-edituser a{background-image:url(img/icons/action_icons_18_png/list_contacts.png);}div#action-header li.myreact-add-contact a{background-image:url(img/icons/action_icons_18_png/add_contact.png);}div#action-header li.myreact-new-profilemessage a{background-image:url(img/icons/action_icons_18_png/insert_profilemessage.png);}div#action-header li.userprofile-edituser a,div#action-header li.preferences-edit-user a{background-image:url(img/icons/action_icons_18_png/edit_user.png);}div#action-header li.edituser-preferences a{background-image:url(img/icons/action_icons_18_png/preferences.png);}div#action-header li.edituser-profile a{background-image:url(img/icons/action_icons_18_png/user_profile.png);}div#action-header li.userprofile-add-contact a{background-image:url(img/icons/action_icons_18_png/add_contact.png);}div#action-header li.listcontacts-currentcontacts a{background-image:url(img/icons/action_icons_18_png/list_contacts.png);}div#action-header li.listusers a,div#action-header li.activeusers a,div#action-header li.listcontacts-activeusers a{background-image:url(img/icons/action_icons_18_png/list_activeusers.png);}div#action-header li.listactivetopics-userfind a{background-image:url(img/icons/action_icons_18_png/find.png);}div#action-header li.login-createuser a{background-image:url(img/icons/action_icons_18_png/create_user.png);}div#action-header li.myreact-profile a{background-image:url(img/icons/action_icons_18_png/user_profile.png);}div#action-header li.find-userfind a{background-image:url(img/icons/action_icons_18_png/find.png);}div#action-header li.document-manage-folders a{background-image:url(img/icons/action_icons_18_png/manage_folders.png);}div#action-header li.custom-faq a,div#action-header li.faq-sitemap a{background-image:url(img/icons/action_icons_18_png/faq.png);}div#action-header div.extra-actions ul li.topic-bookmark a{background-image:url(img/icons/action_icons_18_png/insert_bookmark.png);}div#action-header li.topic-report a{background-image:url(img/icons/action_icons_18_png/insert_topicreport.png);}div#action-header div.extra-actions ul li.topic-notification a{background-image:url(img/icons/action_icons_18_png/insert_notification.png);}div#action-header div.extra-actions ul li.topic-find form dl{background-image:url(img/icons/action_icons_18_png/find.png);}div#action-header div.extra-actions ul li.forum-find form dl{background-image:url(img/icons/action_icons_18_png/find.png);}body.activate_password div#action-header {background-image:url(img/icons/action_icons_18_png/activate_password.png);}body.activate_user div#action-header {background-image:url(img/icons/action_icons_18_png/activate_user.png);}body.add_contact div#action-header {background-image:url(img/icons/action_icons_18_png/add_contact.png);}body.admin div#action-header {background-image:url(img/icons/action_icons_18_png/admin.png);}body.cast_vote div#action-header {background-image:url(img/icons/action_icons_18_png/cast_vote.png);}body.change_email div#action-header {background-image:url(img/icons/action_icons_18_png/change_email.png);}body.copy_profile div#action-header {background-image:url(img/icons/action_icons_18_png/copy_profile.png);}body.create_user div#action-header {background-image:url(img/icons/action_icons_18_png/create_user.png);}body.custom div#action-header {background-image:url(img/icons/action_icons_18_png/custom.png);}body.delete_bookmark div#action-header {background-image:url(img/icons/action_icons_18_png/delete_bookmark.png);}body.delete_calendarevent div#action-header {background-image:url(img/icons/action_icons_18_png/delete_calendarevent.png);}body.delete_contact div#action-header {background-image:url(img/icons/action_icons_18_png/delete_contact.png);}body.delete_files div#action-header {background-image:url(img/icons/action_icons_18_png/delete_files.png);}body.delete_message div#action-header {background-image:url(img/icons/action_icons_18_png/delete_message.png);}body.delete_usernote div#action-header {background-image:url(img/icons/action_icons_18_png/delete_usernote.png);}body.delete_topicreport div#action-header {background-image:url(img/icons/action_icons_18_png/delete_topicreport.png);}body.edit_document div#action-header {background-image:url(img/icons/action_icons_18_png/edit_document.png);}body.edit_user div#action-header {background-image:url(img/icons/action_icons_18_png/edit_user.png);}body.error_connect div#action-header {background-image:url(img/icons/action_icons_18_png/error_connect.png);}body.error_general div#action-header,div.error_general {background-image:url(img/icons/action_icons_18_png/error_general.png);}body.error_method_missing div#action-header {background-image:url(img/icons/action_icons_18_png/error_method_missing.png);}body.error_selectdb div#action-header {background-image:url(img/icons/action_icons_18_png/error_selectdb.png);}body.faq div#action-header {background-image:url(img/icons/action_icons_18_png/faq.png);}body.find div#action-header {background-image:url(img/icons/action_icons_18_png/find.png);}body.find_messages div#action-header {background-image:url(img/icons/action_icons_18_png/find_messages.png);}body.frontend_admin div#action-header {background-image:url(img/icons/action_icons_18_png/frontend_admin.png);}body.get_messageversion div#action-header {background-image:url(img/icons/action_icons_18_png/get_messageversion.png);}body.http_status_code div#action-header {background-image:url(img/icons/action_icons_18_png/http_status_code.png);}body.impersonate div#action-header {background-image:url(img/icons/action_icons_18_png/impersonate.png);}body.insert_bookmark div#action-header {background-image:url(img/icons/action_icons_18_png/insert_bookmark.png);}body.insert_calendarevent div#action-header {background-image:url(img/icons/action_icons_18_png/insert_calendarevent.png);}body.insert_document div#action-header {background-image:url(img/icons/action_icons_18_png/insert_document.png);}body.insert_message div#action-header {background-image:url(img/icons/action_icons_18_png/insert_message.png);}body.insert_notification div#action-header {background-image:url(img/icons/action_icons_18_png/insert_notification.png);}body.insert_profilemessage div#action-header {background-image:url(img/icons/action_icons_18_png/insert_profilemessage.png);}body.insert_shoutbox_message div#action-header {background-image:url(img/icons/action_icons_18_png/insert_shoutbox_message.png);}body.insert_topic div#action-header {background-image:url(img/icons/action_icons_18_png/insert_topic.png);}body.insert_topicreport div#action-header {background-image:url(img/icons/action_icons_18_png/insert_topicreport.png);}body.list_activetopics div#action-header {background-image:url(img/icons/action_icons_18_png/list_activetopics.png);}body.list_activeusers div#action-header {background-image:url(img/icons/action_icons_18_png/list_activeusers.png);}body.list_bookmarks div#action-header {background-image:url(img/icons/action_icons_18_png/list_bookmarks.png);}body.list_calendar div#action-header {background-image:url(img/icons/action_icons_18_png/list_calendar.png);}body.list_category_topics div#action-header {background-image:url(img/icons/action_icons_18_png/list_category_topics.png);}body.list_contacts div#action-header {background-image:url(img/icons/action_icons_18_png/list_contacts.png);}body.list_discussions div#action-header {background-image:url(img/icons/action_icons_18_png/list_discussions.png);}body.list_sentpushmessages div#action-header {background-image:url(img/icons/action_icons_18_png/list_discussions.png);}body.list_pushmessages div#action-header {background-image:url(img/icons/action_icons_18_png/list_discussions.png);}body.list_documents div#action-header {background-image:url(img/icons/action_icons_18_png/list_documents.png);}body.list_documents_small div#action-header {background-image:url(img/icons/action_icons_18_png/list_documents_small.png);}body.list_messagehistory div#action-header {background-image:url(img/icons/action_icons_18_png/list_messagehistory.png);}body.list_messages_find div#action-header {background-image:url(img/icons/action_icons_18_png/list_messages_find.png);}body.list_notifications div#action-header {background-image:url(img/icons/action_icons_18_png/list_notifications.png);}body.list_profilemessages div#action-header {background-image:url(img/icons/action_icons_18_png/list_profilemessages.png);}body.list_publicusergroups div#action-header {background-image:url(img/icons/action_icons_18_png/list_publicusergroups.png);}body.list_setusernotes div#action-header {background-image:url(img/icons/action_icons_18_png/list_setusernotes.png);}body.list_topics div#action-header {background-image:url(img/icons/action_icons_18_png/list_topics.png);}body.list_usernotes div#action-header {background-image:url(img/icons/action_icons_18_png/list_usernotes.png);}body.list_users div#action-header {background-image:url(img/icons/action_icons_18_png/list_users.png);}body.login div#action-header {background-image:url(img/icons/action_icons_18_png/login.png);}body.logout div#action-header {background-image:url(img/icons/action_icons_18_png/logout.png);}body.manage_folders div#action-header {background-image:url(img/icons/action_icons_18_png/manage_folders.png);}body.mark_pushmessages div#action-header {background-image:url(img/icons/action_icons_18_png/mark_pushmessages.png);}body.myreact div#action-header {background-image:url(img/icons/action_icons_18_png/myreact.png);}body.new_password div#action-header {background-image:url(img/icons/action_icons_18_png/new_password.png);}body.notepad div#action-header {background-image:url(img/icons/action_icons_18_png/notepad.png);}body.pm_discussion div#action-header {background-image:url(img/icons/action_icons_18_png/pm_discussion.png);}body.pm_discussion_push div#action-header {background-image:url(img/icons/action_icons_18_png/pm_discussion_push.png);}body.pm_mark_subscription_result div#action-header {background-image:url(img/icons/action_icons_18_png/pm_mark_subscription_result.png);}body.pm_new_message div#action-header {background-image:url(img/icons/action_icons_18_png/pm_new_message.png);}body.preferences div#action-header {background-image:url(img/icons/action_icons_18_png/preferences.png);}body.quote_message div#action-header {background-image:url(img/icons/action_icons_18_png/quote_message.png);}body.reset div#action-header {background-image:url(img/icons/action_icons_18_png/reset.png);}body.rml_preview div#action-header {background-image:url(img/icons/action_icons_18_png/rml_preview.png);}body.send_activationkey div#action-header {background-image:url(img/icons/action_icons_18_png/send_activationkey.png);}body.send_passwordkey div#action-header {background-image:url(img/icons/action_icons_18_png/send_passwordkey.png);}body.send_pushmessage div#action-header {background-image:url(img/icons/action_icons_18_png/send_pushmessage.png);}body.spell_check div#action-header {background-image:url(img/icons/action_icons_18_png/spell_check.png);}body.update_bookmark div#action-header {background-image:url(img/icons/action_icons_18_png/update_bookmark.png);}body.update_calendarevent div#action-header {background-image:url(img/icons/action_icons_18_png/update_calendarevent.png);}body.update_message div#action-header {background-image:url(img/icons/action_icons_18_png/update_message.png);}body.update_notification div#action-header {background-image:url(img/icons/action_icons_18_png/update_notification.png);}body.update_publicusergroups div#action-header {background-image:url(img/icons/action_icons_18_png/update_publicusergroups.png);}body.update_shoutbox_message div#action-header {background-image:url(img/icons/action_icons_18_png/update_shoutbox_message.png);}body.user_profile div#action-header {background-image:url(img/icons/action_icons_18_png/user_profile.png);}body.view_calendarevent div#action-header {background-image:url(img/icons/action_icons_18_png/view_calendarevent.png);}body.view_message div#action-header {background-image:url(img/icons/action_icons_18_png/view_message.png);}body div#action-header.topic-statusid-1{background-image:url(img/icons/topic_icons_18_png/topic_sticky.png);}body div#action-header.topic-statusid-1.topic-has-new-1{background-image:url(img/icons/topic_icons_18_png/topic_sticky_new.png);}body div#action-header.topic-statusid-1.topic-has-new-0.topic-has-note-1{background-image:url(img/icons/topic_icons_18_png/topic_sticky_report.png);}body div#action-header.topic-statusid-1.topic-has-new-1.topic-has-note-1{background-image:url(img/icons/topic_icons_18_png/topic_sticky_new_report.png);}body div#action-header.topic-statusid-2{background-image:url(img/icons/topic_icons_18_png/topic_open.png);}body div#action-header.topic-statusid-2.topic-has-new-1{background-image:url(img/icons/topic_icons_18_png/topic_open_new.png);}body div#action-header.topic-statusid-2.topic-has-new-0.topic-has-note-1{background-image:url(img/icons/topic_icons_18_png/topic_open_report.png);}body div#action-header.topic-statusid-2.topic-has-new-1.topic-has-note-1{background-image:url(img/icons/topic_icons_18_png/topic_open_new_report.png);}body div#action-header.topic-statusid-4{background-image:url(img/icons/topic_icons_18_png/topic_closed.png);}body div#action-header.topic-statusid-4.topic-has-new-1{background-image:url(img/icons/topic_icons_18_png/topic_closed_new.png);}body div#action-header.topic-statusid-4.topic-has-new-0.topic-has-note-1{background-image:url(img/icons/topic_icons_18_png/topic_closed_report.png);}body div#action-header.topic-statusid-4.topic-has-new-1.topic-has-note-1{background-image:url(img/icons/topic_icons_18_png/topic_closed_new_report.png);}#lightbox{position:absolute;top:40px;left:0;width:100%;z-index:100;text-align:center;line-height:0;}#lightbox a img{border:none;}#outerImageContainer{position:relative;background-color:#fff;width:250px;height:250px;margin:0 auto;}#imageContainer{padding:10px;}#loading{position:absolute;top:40%;left:0%;height:25%;width:100%;text-align:center;line-height:0;}#hoverNav{position:absolute;top:0;left:0;height:100%;width:100%;z-index:10;}#imageContainer>#hoverNav{left:0;}#hoverNav a{outline:none;}#prevLink,#nextLink{width:49%;height:100%;background:transparent url(img/lightbox/blank.gif) no-repeat;display:block;}#prevLink{left:0;float:left;}#nextLink{right:0;float:right;}#prevLink:hover,#prevLink:visited:hover{background:url(img/lightbox/prevlabel.gif) left 15% no-repeat;}#nextLink:hover,#nextLink:visited:hover{background:url(img/lightbox/nextlabel.gif) right 15% no-repeat;}#imageDataContainer{font:10px Verdana,Helvetica,sans-serif;background-color:#fff;margin:0 auto;line-height:1.4em;}#imageData{padding:0 10px;}#imageData #imageDetails{width:70%;float:left;text-align:left;}#imageData #caption{font-weight:bold;}#imageData #numberDisplay{display:block;clear:left;padding-bottom:1.0em;}#imageData #bottomNavClose{width:66px;float:right;padding-bottom:0.7em;}#overlay{position:absolute;top:0;left:0;z-index:90;width:100%;height:500px;background-color:#000;filter:alpha(opacity=60);-moz-opacity:0.6;opacity:0.6;}.clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden;}* html>body .clearfix{display:inline-block;width:100%;}* html .clearfix{height:1%;}
------------z0sG6lbwfRAjvoOOPUGyZF
Content-Disposition: inline; filename=retrieve_multiple.js
Content-Type: application/x-javascript; charset=ISO-8859-15; name=retrieve_multiple.js
Content-Location: http://www.africanews.com/templates/africa/retrieve_multiple.php?js=xmlhttp,functions,extra,normal,forms,colorpicker,toolbar,doclib,doclib-site,doclib-africa,cssQuery-p,text-en_US,normal-africa,prototype,ufo,lightbox,effects,events
Content-Transfer-Encoding: Base64
ZnVuY3Rpb24gZXh0cmFBY3Rpb25zVGhydVhtbEh0dHAodGFyZ2V0cykKewoJYWRk
RXZlbnRUb1RhcmdldHModGFyZ2V0cywgJ2NsaWNrJywgX2V4dHJhQWN0aW9uc1Ro
cnVYbWxIdHRwLCAnZGl2LmV4dHJhLWFjdGlvbnMgdWwubGlua3MgbGlbY2xhc3Nd
IGEnKTsKfTsKCmZ1bmN0aW9uIF9leHRyYUFjdGlvbnNUaHJ1WG1sSHR0cChlKQp7
CgkvKnZhciBlID0gZSB8fCBmaXhFdmVudChlKTsqLwoKCXZhciBjb250YWluZXIg
PSBuZXcgRE9NUXVlcnkoImRpdi5leHRyYS1hY3Rpb25zIikuZ2V0KDApOwoKCXZh
ciBpdGVtID0gdGhpczsKCgl2YXIgbGkgPSBnZXRTaWJsaW5nTm9kZShpdGVtLCAn
dXAnLCAnbGknKTsKCWlmKCFsaSkKCQlyZXR1cm47CgoJdmFyIHRvcGljaWQgPSBp
dGVtLmhyZWYucmVwbGFjZSgvLisoaW5zZXJ0X3RvcGljcmVwb3J0fGluc2VydF9i
b29rbWFya3xhZGRfa2V5d29yZHN8ZGVsZXRlX2tleXdvcmRzfGluc2VydF9ub3Rp
ZmljYXRpb258cmF0ZXxzZXRfdG9waWNfcG9zdGhpc3Rvcnl8cmF0ZSkoXC9cRCsp
P1wvKFxkKykoLispPy8sICckMycpOwoJaWYoIXRvcGljaWQpCgkJcmV0dXJuOwoK
CXZhciBjbGFzc05hbWVzID0ganNjc3MoJ2dldCcsIGxpKSwgcmVxdWVzdCwgZm9y
bU5hbWU7Cglmb3IodmFyIGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5sZW5ndGg7aSsr
KQoJewoJCXN3aXRjaChjbGFzc05hbWVzW2ldKQoJCXsKCQkJY2FzZSAndG9waWMt
YWRkLWtleXdvcmQnOgoJCQkJcmVxdWVzdCA9ICdhY3Rpb249YWRkX2tleXdvcmRz
JmRhdGElNUJ0eXBlJTVEPXRvcGljJmRhdGElNUJpZCU1RD0nK3RvcGljaWQ7CgkJ
CQlmb3JtTmFtZSA9ICdmb3JtLWFkZC1rZXl3b3Jkcyc7CgkJCQl2YXIgb25zdWJt
aXRjYWxsYmFjayA9IGZ1bmN0aW9uICgpCgkJCQl7CgkJCQkJdmFyIGtleXdvcmRz
ID0gbmV3IERPTVF1ZXJ5KCdkbC50b3BpYy1rZXl3b3JkcyBkZCcpLmdldCgwKTsK
CgkJCQkJaWYoIWtleXdvcmRzKQoJCQkJCQlyZXR1cm47CgoJCQkJCXZhciBuZXdL
ZXl3b3JkcyA9IG5ldyBET01RdWVyeSgnZm9ybSNmb3JtLWFkZC1rZXl3b3JkcyBp
bnB1dCNrZXl3b3JkcycpLmdldCgwKS52YWx1ZTsKCQkJCQl2YXIgbGlzdFRvcGlj
c1VybCA9IG5ldyBET01RdWVyeSgnYScsIGtleXdvcmRzKS5nZXQoMCkuaHJlZjsK
CgkJCQkJbmV3S2V5d29yZHMgPSBuZXdLZXl3b3Jkcy5zcGxpdCgnICcpOwoKCQkJ
CQlmb3IodmFyIGogPSAwOyBqIDwgbmV3S2V5d29yZHMubGVuZ3RoOyBqKyspCgkJ
CQkJCWtleXdvcmRzLmFwcGVuZENoaWxkKGNyZWF0ZURPTU5vZGUoJ2EnLCB7ICdo
cmVmJyA6IGxpc3RUb3BpY3NVcmwucmVwbGFjZSgvPS4rL2ksICc9JyArIG5ld0tl
eXdvcmRzW2pdKSB9LCBbICcgJyArIG5ld0tleXdvcmRzW2pdIF0pKTsKCQkJCX07
CgkJCWJyZWFrOwoJCQljYXNlICd0b3BpYy1kZWxldGUta2V5d29yZCc6CgkJCQly
ZXF1ZXN0ID0gJ2FjdGlvbj1kZWxldGVfa2V5d29yZHMmZGF0YSU1QnR5cGUlNUQ9
dG9waWMmZGF0YSU1QmlkJTVEPScrdG9waWNpZDsKCQkJCWZvcm1OYW1lID0gJ2Zv
cm0tZGVsZXRlLWtleXdvcmRzJzsKCQkJCXZhciBvbnN1Ym1pdGNhbGxiYWNrID0g
ZnVuY3Rpb24gKCkKCQkJCXsKCQkJCQl2YXIga2V5d29yZHMgPSBuZXcgRE9NUXVl
cnkoJ2RsLnRvcGljLWtleXdvcmRzIGRkJykuZ2V0KDApOwoKCQkJCQlpZigha2V5
d29yZHMpCgkJCQkJCXJldHVybjsKCgkJCQkJdmFyIG5ld0tleXdvcmRzID0gbmV3
IERPTVF1ZXJ5KCdmb3JtI2Zvcm0tZGVsZXRlLWtleXdvcmRzIGlucHV0I2tleXdv
cmRzJykuZ2V0KDApLnZhbHVlOwoJCQkJCXZhciBsaXN0VG9waWNzVXJsID0gbmV3
IERPTVF1ZXJ5KCdhJywga2V5d29yZHMpLmdldCgwKS5ocmVmOwoKCQkJCQluZXdL
ZXl3b3JkcyA9IG5ld0tleXdvcmRzLnNwbGl0KCcgJyk7CgoJCQkJCWZvcih2YXIg
aiA9IDA7IGogPCBuZXdLZXl3b3Jkcy5sZW5ndGg7IGorKykKCQkJCQkJa2V5d29y
ZHMuYXBwZW5kQ2hpbGQoY3JlYXRlRE9NTm9kZSgnYScsIHsgJ2hyZWYnIDogbGlz
dFRvcGljc1VybC5yZXBsYWNlKC89LisvaSwgJz0nICsgbmV3S2V5d29yZHNbal0p
IH0sIFsgJyAnICsgbmV3S2V5d29yZHNbal0gXSkpOwoJCQkJfTsKCQkJYnJlYWs7
CgkJCWNhc2UgJ3RvcGljLXJlcG9ydCc6CgkJCQlyZXF1ZXN0ID0gJ2FjdGlvbj1p
bnNlcnRfdG9waWNyZXBvcnQmZGF0YSU1QnRvcGljaWQlNUQ9Jyt0b3BpY2lkOwoJ
CQkJZm9ybU5hbWUgPSAnZm9ybS1pbnNlcnQtdG9waWNyZXBvcnQnOwoJCQlicmVh
azsKCQkJY2FzZSAndG9waWMtYm9va21hcmsnOgoJCQkJcmVxdWVzdCA9ICdhY3Rp
b249aW5zZXJ0X2Jvb2ttYXJrJmRhdGElNUJ0b3BpY2lkJTVEPScrdG9waWNpZDsK
CQkJCWZvcm1OYW1lID0gJ2Zvcm0taW5zZXJ0LWJvb2ttYXJrJzsKCQkJYnJlYWs7
CgkJCWNhc2UgJ3RvcGljLW5vdGlmaWNhdGlvbic6CgkJCQlyZXF1ZXN0ID0gJ2Fj
dGlvbj1pbnNlcnRfbm90aWZpY2F0aW9uJmRhdGElNUJ0eXBlJTVEPXRvcGljJmRh
dGElNUJpZCU1RD0nK3RvcGljaWQ7CgkJCQlmb3JtTmFtZSA9ICdmb3JtLWluc2Vy
dC1ub3RpZmljYXRpb24nOwoJCQlicmVhazsKCQkJY2FzZSAndG9waWMtcG9zdGhp
c3RvcnknOgoJCQkJcmVxdWVzdCA9ICdhY3Rpb249c2V0X3RvcGljX3Bvc3RoaXN0
b3J5JmRhdGElNUJ0b3BpY2lkJTVEPScrdG9waWNpZDsKCQkJCWZvcm1OYW1lID0g
J2Zvcm0tcG9zdGhpc3Rvcnktc2V0JzsKCQkJYnJlYWs7CgkJCWNhc2UgJ3RvcGlj
LXJhdGUnOgoJCQkJcmVxdWVzdCA9ICdhY3Rpb249cmF0ZSZkYXRhJTVCdHlwZSU1
RD10b3BpYyZkYXRhJTVCaWQlNUQ9Jyt0b3BpY2lkOwoJCQkJZm9ybU5hbWUgPSAn
Zm9ybS1yYXRlJzsKCQkJYnJlYWs7CgkJfQoKCQlpZihyZXF1ZXN0KQoJCQlicmVh
azsKCX0KCglpZighcmVxdWVzdCkKCQlyZXR1cm47CgoJdmFyIHJlc3VsdCA9IHht
bEh0dHBGb3JtKCB0aGlzLCByZXF1ZXN0LCBjb250YWluZXIsIGZvcm1OYW1lLCBv
bnN1Ym1pdGNhbGxiYWNrICk7CgoJaWYocmVzdWx0KQoJCWUucHJldmVudERlZmF1
bHQoKTsKfTsKCmZ1bmN0aW9uIHVwZGF0ZU1lc3NhZ2VzVGhydVhtbEh0dHAodGFy
Z2V0cykKewoJdmFyIGl0ZW1zID0gZ2V0VGFyZ2V0cyh0YXJnZXRzLCAib2wubWVz
c2FnZXMgbGkubWVzc2FnZSB1bC5tZXNzYWdlLWxpbmtzIGxpLm1lc3NhZ2UtZWRp
dCBhIik7Cglmb3IodmFyIGkgPSAwLCBpdGVtOyhpdGVtPWl0ZW1zLmdldChpKSk7
aSsrKQoJewoJCWFkZEV2ZW50KGl0ZW0sICdjbGljaycsCgkJCWZ1bmN0aW9uKGUp
CgkJCXsKCQkJCXZhciBtZXNzYWdlaWQgPSB0aGlzLmhyZWYucmVwbGFjZSgvLit1
cGRhdGVfbWVzc2FnZVwvKFxkKykoLispPy8sICckMScpOwoJCQkJaWYoIW1lc3Nh
Z2VpZCkKCQkJCQlyZXR1cm4gdHJ1ZTsKCgkJCQl2YXIgY29udGFpbmVyID0gbmV3
IERPTVF1ZXJ5KCJvbC5tZXNzYWdlcyBsaSNtZXNzYWdlLSIgKyBtZXNzYWdlaWQg
KyIgZGl2Lm1lc3NhZ2UtY29udGVudCIpLmdldCgwKTsKCgkJCQl2YXIgcmVzdWx0
ID0geG1sSHR0cEZvcm0oCgkJCQkJCXRoaXMsCgkJCQkJCSdhY3Rpb249dXBkYXRl
X21lc3NhZ2UmZGF0YSU1Qm1lc3NhZ2VpZCU1RD0nK21lc3NhZ2VpZCwKCQkJCQkJ
Y29udGFpbmVyLAoJCQkJCQknZm9ybS11cGRhdGUtbWVzc2FnZScsCgkJCQkJCWZ1
bmN0aW9uKCkKCQkJCQkJewoJCQkJCQkJdmFyIHJlcXVlc3QgPSAnYWN0aW9uPXZp
ZXdfbWVzc2FnZSZkYXRhJTVCbWVzc2FnZWlkJTVEPScrbWVzc2FnZWlkOwoJCQkJ
CQkJdmFyIHJlc3VsdHJlcSA9IGh0dHByZXFfc3RyaW5nKHJlcXVlc3QsIG51bGws
IG51bGwsIGZhbHNlKTsKCgkJCQkJCQl2YXIgdGFyZ2V0ID0gbmV3IERPTVF1ZXJ5
KCdkaXYubWVzc2FnZS1jb250ZW50LWNvbnRlbnQnLCBjb250YWluZXIpLmdldCgw
KTsKCQkJCQkJCXdoaWxlKHRhcmdldC5jaGlsZE5vZGVzLmxlbmd0aCA+IDApCgkJ
CQkJCQl7CgkJCQkJCQkJdGFyZ2V0LnJlbW92ZUNoaWxkKHRhcmdldC5maXJzdENo
aWxkKTsKCQkJCQkJCX0KCgkJCQkJCQl2YXIgc291cmNlID0gbmV3IERPTVF1ZXJ5
KCdkaXYjY29yZSBmb3JtLnByaW1hcnktaW5wdXQgZGwucHJvcGVydHktbGlzdCBk
dDpmaXJzdC1jaGlsZCArIGRkJywgcmVzdWx0cmVxLnJlc3BvbnNlWE1MKS5nZXQo
MCk7CgkJCQkJCQl3aGlsZShzb3VyY2UuY2hpbGROb2Rlcy5sZW5ndGggPiAwKQoJ
CQkJCQkJewoJCQkJCQkJCXRhcmdldC5hcHBlbmRDaGlsZCggc291cmNlLnJlbW92
ZUNoaWxkKHNvdXJjZS5maXJzdENoaWxkKSApOwoJCQkJCQkJfQoJCQkJCQl9CgkJ
CQkpOwoKCQkJCWlmKHJlc3VsdCkKCQkJCQllLnByZXZlbnREZWZhdWx0KCk7CgkJ
CX0KCQkpOwoJfQp9OwoKCgpmdW5jdGlvbiB4bWxIdHRwRm9ybShpbnZva2VyLCBy
ZXF1ZXN0LCBjb250YWluZXIsIGZvcm1JZGVudGlmaWVyLCBvbnN1Ym1pdGNhbGxi
YWNrKQp7CglpZihmb3JtSWRlbnRpZmllcikKCXsKCQl2YXIgb2xkRm9ybSA9IG5l
dyBET01RdWVyeSgnZm9ybSMnK2Zvcm1JZGVudGlmaWVyLCBjb250YWluZXIpLmdl
dCgwKTsKCQlpZihvbGRGb3JtKQoJCXsKCQkJb2xkRm9ybS5wYXJlbnROb2RlLnJl
bW92ZUNoaWxkKG9sZEZvcm0pOwoJCQlqc2NzcygncmVtb3ZlJywgaW52b2tlciwg
J3JlcXVlc3QtYWN0aXZlJyk7CgkJCXJldHVybiB0cnVlOwoJCX0KCX0KCglpZigh
Y29udGFpbmVyKQoJCXJldHVybiBmYWxzZTsKCgl2YXIgaXRlbXMgPSBuZXcgRE9N
UXVlcnkoJ2Zvcm0ucHJpbWFyeS1pbnB1dCwgYVtjbGFzc149InJlcXVlc3QiXScs
IGNvbnRhaW5lcik7Cglmb3IodmFyIGkgPSAwLCBpdGVtOyhpdGVtID0gaXRlbXMu
Z2V0KGkpKTtpKyspCgl7CgkJc3dpdGNoKGl0ZW0udGFnTmFtZS50b0xvd2VyQ2Fz
ZSgpKQoJCXsKCQkJY2FzZSAnZm9ybSc6CgkJCQlpdGVtLnBhcmVudE5vZGUucmVt
b3ZlQ2hpbGQoaXRlbSk7CgkJCWJyZWFrOwoJCQljYXNlICdhJzoKCQkJCWpzY3Nz
KCdyZW1vdmUnLCBpdGVtLCAncmVxdWVzdC1hY3RpdmUnKTsKCQkJYnJlYWs7CgkJ
fQoJfQoKCWpzY3NzKCdhZGQnLCBpbnZva2VyLCAncmVxdWVzdC1hY3RpdmUnKTsK
Cgl2YXIgb25zdWJtaXQgPSBmdW5jdGlvbihlKQoJewoJCWlmKGUuZGVmYXVsdFBy
ZXZlbnRlZCkKCQkJcmV0dXJuIGZhbHNlOwoKCQlqc2NzcygnYWRkJywgaW52b2tl
ciwgJ3JlcXVlc3QtcnVubmluZycpOwoKCQkvKiBmaW5kIG91dCB3ZXRoZXIgcHJl
dmlldyBvciBzdWJtaXQgaGFzIGJlZW4gaGl0ICovCgkJaWYoZSAmJiBlLnR5cGUg
PT0gInN1Ym1pdCIgJiYgdHlwZW9mIGUuZXhwbGljaXRPcmlnaW5hbFRhcmdldCAh
PSAndW5kZWZpbmVkJyAmJiBlLmV4cGxpY2l0T3JpZ2luYWxUYXJnZXQubmFtZSA9
PSAiZGF0YVtwcmV2aWV3XSIpCgkJCXJldHVybiB0cnVlOwoKCQl2YXIgcmVxdWVz
dCA9IGdhdGhlckh0dHBGb3JtKHRoaXMpOwoJCXVwZGF0ZXJlcSA9IGh0dHByZXFf
c3RyaW5nKHJlcXVlc3QsIG51bGwsIG51bGwsIGZhbHNlKTsKCQlpZih1cGRhdGVy
ZXEuZ2V0UmVzcG9uc2VIZWFkZXIoJ1gtRXJyb3JtZXNzYWdlJykpCgkJewoJCQlh
bGVydCggdXBkYXRlcmVxLmdldFJlc3BvbnNlSGVhZGVyKCdYLUVycm9ybWVzc2Fn
ZScpICk7CgkJCWpzY3NzKCdyZW1vdmUnLCBpbnZva2VyLCAncmVxdWVzdC1ydW5u
aW5nJyk7CgkJfQoJCWVsc2UKCQl7CgkJCWlmKG9uc3VibWl0Y2FsbGJhY2spCgkJ
CXsKCQkJCW9uc3VibWl0Y2FsbGJhY2soKTsKCQkJfQoKCQkJdGhpcy5wYXJlbnRO
b2RlLnJlbW92ZUNoaWxkKHRoaXMpOwoKCQkJanNjc3MoJ3JlbW92ZScsIGludm9r
ZXIsICdyZXF1ZXN0LXJ1bm5pbmcnKTsKCQkJanNjc3MoJ2FkZCcsIGludm9rZXIs
ICdyZXF1ZXN0LWNvbXBsZXRlZCcpOwoJCQlzZXRUaW1lb3V0KGZ1bmN0aW9uKCkg
eyBqc2NzcygncmVtb3ZlJywgaW52b2tlciwgJ3JlcXVlc3QtY29tcGxldGVkJyk7
IGpzY3NzKCdyZW1vdmUnLCBpbnZva2VyLCAncmVxdWVzdC1hY3RpdmUnKTsgfSwg
NTAwMCk7CgkJfQoKCQllLnByZXZlbnREZWZhdWx0KCk7Cgl9OwoKCXJldHVybiBy
ZXF1ZXN0Rm9ybShyZXF1ZXN0LCBjb250YWluZXIsIG9uc3VibWl0LCBpbnZva2Vy
KTsKfTsKCmZ1bmN0aW9uIHJlcXVlc3RGb3JtKHJlcXVlc3RVUkwsIGNvbnRhaW5l
ciwgb25zdWJtaXQsIGludm9rZXIpCnsKCWpzY3NzKCdhZGQnLCBpbnZva2VyLCAn
cmVxdWVzdC1ydW5uaW5nJyk7Cgl2YXIgZm9ybXJlcSA9IGh0dHByZXFfc3RyaW5n
KHJlcXVlc3RVUkwsIG51bGwsIG51bGwsIGZhbHNlLCAnR0VUJyk7CgoJaWYoIGZv
cm1yZXEucmVhZHlTdGF0ZSA9PSA0ICkKCXsKCQlpZihmb3JtcmVxLmdldFJlc3Bv
bnNlSGVhZGVyKCdYLUVycm9ybWVzc2FnZScpKQoJCXsKCQkJYWxlcnQoIGZvcm1y
ZXEuZ2V0UmVzcG9uc2VIZWFkZXIoJ1gtRXJyb3JtZXNzYWdlJykgKTsKCQkJanNj
c3MoJ3JlbW92ZScsIGludm9rZXIsICdyZXF1ZXN0LXJ1bm5pbmcnKTsKCQkJcmV0
dXJuIHRydWU7CgkJfQoJCWVsc2UKCQl7CgkJCXZhciBmb3JtID0gZ2V0RWxlbWVu
dEZyb21YSFIoZm9ybXJlcSwgJ2Zvcm0ucHJpbWFyeS1pbnB1dCcsIGNvbnRhaW5l
cik7CgoJCQlpZighZm9ybSkKCQkJewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgoJ
CQlqc2NzcygnYWRkJywgZm9ybSwgJ2V4dHJlcXVlc3QnKTsKCgkJCWNvbnRhaW5l
ci5hcHBlbmRDaGlsZCggZm9ybSApOwoKCQkJLyoKCQkJCVRvIHByZXZlbnQgdGhl
IG9uc3VibWl0KCkgZnVuY3Rpb24gdG8gc3VibWl0IHRoZSBmb3JtIHVzaW5nIGEg
WEhSLAoJCQkJd2UgaGF2ZSB0byBzdG9yZSB3ZXRoZXIgYW55IHByZXZpb3VzIGFj
dGlvbiBoYXMgc3RvcHBlZCB0aGUgZGVmYXVsdCBhY3Rpb24KCQkJCShzdWJtaXR0
aW5nIG9mIHRoZSBmb3JtKS4KCQkJCVNvLCB3ZSBhdHRhY2ggYSBzcGVjaWFsIGV2
ZW50IGF0IHRoZSBwcm9wYWdhdGlvbi1waGFzZSAoYmVmb3JlIGFsbCBldmVudHNb
XQoJCQkJZG8gdGhlaXIgd29yaykgYXQgdGhlIHBhcmVudE5vZGUsIGFuZCBtb2Rp
ZnkgdGhlIGV2ZW50LW9iamVjdCB0byBzdG9yZQoJCQkJd2V0aGVyIHByZXZlbnRE
ZWZhdWx0KCkgaGFzIGJlZW4gY2FsbGVkLgoJCQkJVGhlbiwgdGhlIHNlY29uZCBl
dmVudC1saXN0ZW5lciBpcyBjYWxsZWQgZHVyaW5nIHRoZSBidWJibGUtcGhhc2Ug
LSBhbmQgaXQKCQkJCWNoZWNrcyB3ZXRoZXIgdGhlIGV2ZW50IGhhcyBkZXRlcm1p
bmVkIHByZXZlbnREZWZhdWx0KCkgaGFzIGJlZW4gY2FsbGVkLgoKCQkJCUhvd2V2
ZXIuLi4gSUUgbXVzdCBkaWUhCgkJCQlJdCBkb2Vzbid0IHN1cHBvcnQgcHJvcGFn
YXRpb24gZm9yIHN1Ym1pdC1ldmVudHMsIHNvIHdlIHVzZSB0aGUgYWRkRXZlbnQn
cyBiZWhhdmlvdXIKCQkJCW9mIGNhbGxpbmcgdGhlIGZ1bmN0aW9ucyBpbiBzZXF1
ZW5jZSBvZiBhc3NpZ25tZW50IHRvIGVtdWxhdGUgdGhlIGJlaGF2aW91ci4KCQkJ
Ki8KCgkJCXZhciBldmVudFRhcmdldCA9IGZvcm07CgkJCWlmKGZvcm0uYWRkRXZl
bnRMaXN0ZW5lcikKCQkJewoJCQkJdmFyIGV2ZW50VGFyZ2V0ID0gZXZlbnRUYXJn
ZXQucGFyZW50Tm9kZTsKCQkJfQoKCQkJLyogb25seSBhdHRhY2ggdGhlIGhhbmRs
ZXIgb24gdGhlIGNvbnRhaW5lciBvbmNlICovCgkJCWlmKGV2ZW50VGFyZ2V0LnRh
Z05hbWUgPT0gJ2Zvcm0nIHx8IHR5cGVvZiBldmVudFRhcmdldC5fX3ByZXZlbnRE
ZWZhdWx0SGFuZGxlciA9PSAndW5kZWZpbmVkJykKCQkJewoJCQkJYWRkRXZlbnQu
ZXZlbnRMaXN0ZW5lclVzZUNhcHR1cmUgPSB0cnVlOwoJCQkJYWRkRXZlbnQoZXZl
bnRUYXJnZXQsICdzdWJtaXQnLCBmdW5jdGlvbihlKQoJCQkJewoJCQkJCWUuX19w
cmV2ZW50RGVmYXVsdCA9IGUucHJldmVudERlZmF1bHQ7CgkJCQkJZS5wcmV2ZW50
RGVmYXVsdCA9IGZ1bmN0aW9uKCkKCQkJCQl7CgkJCQkJCWUuZGVmYXVsdFByZXZl
bnRlZCA9IHRydWU7CgkJCQkJCWUuX19wcmV2ZW50RGVmYXVsdCgpOwoJCQkJCX07
CgkJCQl9KTsKCQkJCWFkZEV2ZW50LmV2ZW50TGlzdGVuZXJVc2VDYXB0dXJlID0g
ZmFsc2U7CgkJCQlldmVudFRhcmdldC5fX3ByZXZlbnREZWZhdWx0SGFuZGxlciA9
IHRydWU7CgkJCX0KCgkJCV9pbml0KGV2ZW50cywgZm9ybS5wYXJlbnROb2RlKTsK
CgkJCWFkZEV2ZW50KGZvcm0sICdzdWJtaXQnLCBvbnN1Ym1pdCk7CgoJCQlqc2Nz
cygncmVtb3ZlJywgaW52b2tlciwgJ3JlcXVlc3QtcnVubmluZycpOwoKCQkJcmV0
dXJuIHRydWU7CgkJfQoJfQp9OwoKZnVuY3Rpb24gZ2F0aGVySHR0cEZvcm0oZm9y
bSkKewoJdmFyIGl0ZW1zID0gZm9ybS5lbGVtZW50czsKCXZhciBzdHIgPSBbIF07
CgoJZm9yKHZhciBpID0gMCwgaXRlbTsoaXRlbT1pdGVtc1tpXSk7aSsrKQoJewoJ
CXN3aXRjaCggaXRlbS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgKQoJCXsKCQkJY2Fz
ZSAnaW5wdXQnOgoJCQkJc3dpdGNoKGl0ZW0udHlwZSkKCQkJCXsKCQkJCQljYXNl
ICd0ZXh0JzoKCQkJCQljYXNlICdoaWRkZW4nOgoJCQkJCWNhc2UgJ3Bhc3N3b3Jk
JzoKCQkJCQkJc3RyLnB1c2goaXRlbS5uYW1lKyc9JysgZXNjYXBlKCBpdGVtLnZh
bHVlICkgKTsKCQkJCQlicmVhazsKCQkJCQljYXNlICdyYWRpbyc6CgkJCQkJY2Fz
ZSAnY2hlY2tib3gnOgoJCQkJCQlpZihpdGVtLmNoZWNrZWQpCgkJCQkJCXsKCQkJ
CQkJCXN0ci5wdXNoKGl0ZW0ubmFtZSsnPScrIGVuY29kZVVSSSggaXRlbS52YWx1
ZSApICk7CgkJCQkJCX0KCQkJCQlicmVhazsKCQkJCQljYXNlICdmaWxlJzoKCQkJ
CQkJaWYoaXRlbS52YWx1ZSkKCQkJCQkJewoJCQkJCQkJdGhyb3cgbmV3IEVycm9y
KCJJIGNhbid0IGhhbmRsZSBmaWxlLXVwbG9hZHM7IEknbGwgc3VibWl0IHRoZSBm
b3JtIHVzaW5nIGEgbm9ybWFsIHJlcXVlc3QuIik7CgkJCQkJCX0KCQkJCQlicmVh
azsKCQkJCX0KCQkJYnJlYWs7CgkJCWNhc2UgJ3NlbGVjdCc6CgkJCQlzdHIucHVz
aChpdGVtLm5hbWUrJz0nKyBlbmNvZGVVUkkoIGl0ZW0ub3B0aW9uc1tpdGVtLnNl
bGVjdGVkSW5kZXhdLnZhbHVlICkgKTsKCQkJYnJlYWs7CgkJCWNhc2UgJ3RleHRh
cmVhJzoKCQkJCXN0ci5wdXNoKGl0ZW0ubmFtZSsnPScrIGVuY29kZVVSSSggaXRl
bS52YWx1ZSApICk7CgkJCWJyZWFrOwoJCX0KCX0KCglyZXR1cm4gc3RyLmpvaW4o
JyYnKTsKfTsKCmZ1bmN0aW9uIGh0dHByZXFfeG1sKHJlcXVlc3QsIGNhbGxiYWNr
LCB1cmwsIGFzeW5jKQp7Cgl2YXIgeG1sdXJsID0gdXJsIHx8IGJvYXJkX3Njcmlw
dF91cmwgKyAnLy4uL3htbF9pbnB1dC5waHAnOwogIAl2YXIgeG1sUGFyc2VyLCB4
bWxEb2N1bWVudCwgcmVxOwoKCWlmKHdpbmRvdy5YTUxIdHRwUmVxdWVzdCkKCXsK
CQkvKiBzYWZhcmkgMS4zLzIuMCBkb2Vzbid0IHN1cHBvcnQgRE9NUGFyc2VyICov
CgkJaWYodHlwZW9mIERPTVBhcnNlciA9PSAidW5kZWZpbmVkIikKCQkJcmV0dXJu
IGZhbHNlOwoKCQlyZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKCQl4bWxQYXJz
ZXIgPSBuZXcgRE9NUGFyc2VyKCk7CgkJeG1sRG9jdW1lbnQgPSB4bWxQYXJzZXIu
cGFyc2VGcm9tU3RyaW5nKHJlcXVlc3QsICd0ZXh0L3htbCcpOwoJfQoJZWxzZSBp
Zih3aW5kb3cuQWN0aXZlWE9iamVjdCkKCXsKCQlyZXEgPSBuZXcgQWN0aXZlWE9i
amVjdCgiTVNYTUwyLlhNTEhUVFAuMy4wIik7CgoJCXhtbERvY3VtZW50ID0gbmV3
IEFjdGl2ZVhPYmplY3QoJ01zeG1sMi5ET01Eb2N1bWVudC4zLjAnKTsKCQl4bWxE
b2N1bWVudC5hc3luYyA9IGZhbHNlOwoJCXhtbERvY3VtZW50LmxvYWRYTUwocmVx
dWVzdCk7Cgl9CgoJeG1sRG9jdW1lbnQuaW5zZXJ0QmVmb3JlKHhtbERvY3VtZW50
LmNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbigieG1sIiwgInZlcnNpb249JzEu
MCciKSwgeG1sRG9jdW1lbnQuZmlyc3RDaGlsZCk7CgoJaWYoY2FsbGJhY2spCgkJ
cmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGNhbGxiYWNrOwoKCXJlcS5vcGVuKCJQ
T1NUIiwgeG1sdXJsLCAodHlwZW9mIGFzeW5jID09ICJib29sZWFuIiA/IGFzeW5j
IDogdHJ1ZSkgKTsKCglpZih3aW5kb3cuWE1MSHR0cFJlcXVlc3QpCgl7CgkJcmVx
LnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3htbDsgdXRm
LTgnKTsKCX0KCglyZXEuc2VuZChyZXF1ZXN0KTsKCglyZXR1cm4gcmVxOwp9OwoK
ZnVuY3Rpb24gaHR0cHJlcV9zdHJpbmcocmVxdWVzdCwgY2FsbGJhY2ssIHVybCwg
YXN5bmMsIG1ldGhvZCkKewogIAl2YXIgcmVxOwoJdmFyIHhtbHVybCA9IHVybCB8
fCBib2FyZF9zY3JpcHRfdXJsOwoJbWV0aG9kID0gbWV0aG9kIHx8ICJQT1NUIjsK
ICAJYXN5bmMgPSAodHlwZW9mIGFzeW5jID09ICJib29sZWFuIiA/IGFzeW5jIDog
dHJ1ZSk7CgoJaWYod2luZG93LlhNTEh0dHBSZXF1ZXN0KQoJewoJCXJlcSA9IG5l
dyBYTUxIdHRwUmVxdWVzdCgpOwoJfQoJZWxzZSBpZih3aW5kb3cuQWN0aXZlWE9i
amVjdCkKCXsKCQlyZXEgPSBuZXcgQWN0aXZlWE9iamVjdCgiTVNYTUwyLlhNTEhU
VFAuMy4wIik7Cgl9CgoJaWYoY2FsbGJhY2spCgkJcmVxLm9ucmVhZHlzdGF0ZWNo
YW5nZSA9IGNhbGxiYWNrOwoKCWlmKHJlcS5vdmVycmlkZU1pbWVUeXBlKQoJCXJl
cS5vdmVycmlkZU1pbWVUeXBlKCd0ZXh0L3htbCcpOwoKCXJlcXVlc3QgKz0gJyZk
b250X21ldGFfcmVmcmVzaD0xJzsKCglpZihtZXRob2QgPT0gIkdFVCIpCgl7CgkJ
cmVxLm9wZW4obWV0aG9kLCB4bWx1cmwgKyAnPycgKyByZXF1ZXN0LCBhc3luYyAp
OwoJCXJlcS5zZXRSZXF1ZXN0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAnYXBwbGlj
YXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7CgkJcmVxLnNlbmQobnVsbCk7
Cgl9CgllbHNlCgl7CgkJcmVxLm9wZW4obWV0aG9kLCB4bWx1cmwsIGFzeW5jICk7
CgkJcmVxLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICdhcHBsaWNh
dGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTsKCQlyZXEuc2VuZChyZXF1ZXN0
KTsKCX0KCglyZXR1cm4gcmVxOwp9OwoKLyogdGhlIGNvbnRhaW5lciBzcGVjaWZp
ZXMgdGhlIGRlc2lyZWQgZW5kcG9pbnQgZm9yIHRoZSBub2RlICovCmZ1bmN0aW9u
IGdldEVsZW1lbnRGcm9tWEhSKHRyYW5zcG9ydCwgc2VsZWN0b3IsIGNvbnRhaW5l
cikKewoJdmFyIHJvb3Q7CglpZihpc1dlYktpdCB8fCAhdHJhbnNwb3J0SGFzVmFs
aWRSZXNwb25zZVhNTCh0cmFuc3BvcnQpKQoJewoJCXJvb3QgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTsKCQlyb290LmlubmVySFRNTCA9IHRyYW5zcG9y
dC5yZXNwb25zZVRleHQ7Cgl9CgllbHNlCgl7CgkJcm9vdCA9IHRyYW5zcG9ydC5y
ZXNwb25zZVhNTDsKCX0KCgl2YXIgZWxlbWVudCA9IG5ldyBET01RdWVyeShzZWxl
Y3Rvciwgcm9vdCkuZ2V0KDApOwoJaWYoIWVsZW1lbnQpCgkJcmV0dXJuOwoKCWlm
KGlzV2ViS2l0IHx8ICF0cmFuc3BvcnRIYXNWYWxpZFJlc3BvbnNlWE1MKHRyYW5z
cG9ydCkpCgl7CgkJcmV0dXJuIGVsZW1lbnQ7Cgl9CgoJdmFyIF9lbGVtZW50OwoK
CWlmKCFjb250YWluZXIpCgkJY29udGFpbmVyID0gZG9jdW1lbnQuYm9keTsKCgl0
cnkKCXsKCQlfZWxlbWVudCA9IGNvbnRhaW5lci5vd25lckRvY3VtZW50LmFkb3B0
Tm9kZSggZWxlbWVudCwgdHJ1ZSApOwoJfQoJY2F0Y2goZSkKCXsKCQlfZWxlbWVu
dCA9IGNvbnRhaW5lci5vd25lckRvY3VtZW50LmltcG9ydE5vZGUoIGVsZW1lbnQs
IHRydWUgKTsKCX0KCglyZXR1cm4gY29udGFpbmVyLm5hbWVzcGFjZVVSSSA9PSBf
ZWxlbWVudC5uYW1lc3BhY2VVUkkgPyBfZWxlbWVudCA6IGltcG9ydE5vZGVDdXJy
ZW50TlMoIF9lbGVtZW50ICk7Cn07CgpmdW5jdGlvbiB0cmFuc3BvcnRIYXNWYWxp
ZFJlc3BvbnNlWE1MKHRyYW5zcG9ydCkKewoJaWYgKCB0eXBlb2YgdHJhbnNwb3J0
LnJlc3BvbnNlWE1MICE9ICd1bmRlZmluZWQnIHx8IHRyYW5zcG9ydC5yZXNwb25z
ZVhNTC5maXJzdENoaWxkLnRhZ05hbWUgPT0gJ3BhcnNlcmVycm9yJyB8fCB0cmFu
c3BvcnQucmVzcG9uc2VYTUwuZG9jdW1lbnRFbGVtZW50ID09IG51bGwgfHwgdHJh
bnNwb3J0LnJlc3BvbnNlWE1MLmRvY3VtZW50RWxlbWVudCA9PSAndW5kZWZpbmVk
JykKCQlyZXR1cm4gZmFsc2U7CgoJcmV0dXJuIHRydWU7Cn07CgpmdW5jdGlvbiBp
bXBvcnROb2RlQ3VycmVudE5TKG5vZGUpCnsKCXZhciBjbG9uZTsKCglzd2l0Y2go
bm9kZS5ub2RlVHlwZSkKCXsKCQlkZWZhdWx0OgoJCWNhc2UgODogLyogY29tbWVu
dCAqLwoJCQlyZXR1cm47CgkJY2FzZSAzOiAvKiB0ZXh0ICovCgkJCXJldHVybiBk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSggbm9kZS5ub2RlVmFsdWUgKTsKCQljYXNl
IDE6IC8qIG5vZGUgKi8KCQkJY2xvbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCBub2RlLnRhZ05hbWUgKTsKCX0KCglmb3IodmFyIGk9MCwgYXR0cmlidXRlOyAo
YXR0cmlidXRlPW5vZGUuYXR0cmlidXRlc1tpXSk7IGkrKykKCXsKCQljbG9uZS5z
ZXRBdHRyaWJ1dGUoYXR0cmlidXRlLm5hbWUsIGF0dHJpYnV0ZS52YWx1ZSk7Cgl9
CgoJZm9yKHZhciBqPTAsIHN1Yk5vZGUsIGltcG9ydGVkU3ViTm9kZTsgKHN1Yk5v
ZGU9bm9kZS5jaGlsZE5vZGVzW2pdKTsgaisrKQoJewoJCWltcG9ydGVkU3ViTm9k
ZSA9IGFyZ3VtZW50cy5jYWxsZWUoIG5vZGUuY2hpbGROb2Rlc1tqXSApOwoJCWlm
KGltcG9ydGVkU3ViTm9kZSkKCQkJY2xvbmUuYXBwZW5kQ2hpbGQoIGltcG9ydGVk
U3ViTm9kZSApOwoJfQoKCXJldHVybiBjbG9uZTsKfTsKLyogcmlwcGVkIGZyb20g
aHR0cDovL3d3dy5vbmxpbmV0b29scy5vcmcvYXJ0aWNsZXMvdW5vYnRydXNpdmVq
YXZhc2NyaXB0L2Nzc2pzc2VwYXJhdGlvbi5odG1sICovCi8qIDMxLTEwLTIwMDUg
MTM6NTkgcmVwbGFjZWQgd2l0aCB0aW5vJ3MgY29kZSwgc2VlIGJlbG93ICovCi8q
CglhCgkJZGVmaW5lcyB0aGUgYWN0aW9uIHlvdSB3YW50IHRoZSBmdW5jdGlvbiB0
byBwZXJmb3JtLgoJbwoJCXRoZSBvYmplY3QgaW4gcXVlc3Rpb24uCgljMQoJCXRo
ZSBuYW1lIG9mIHRoZSBmaXJzdCBjbGFzcwoJYzIKCQl0aGUgbmFtZSBvZiB0aGUg
c2Vjb25kIGNsYXNzCgoJUG9zc2libGUgYWN0aW9ucyBhcmU6CgoJc3dhcAoJCXJl
cGxhY2VzIGNsYXNzIGMxIHdpdGggY2xhc3MgYzIgaW4gb2JqZWN0IG8uCglhZGQK
CQlhZGRzIGNsYXNzIGMxIHRvIHRoZSBvYmplY3Qgby4KCXJlbW92ZQoJCXJlbW92
ZXMgY2xhc3MgYzEgZnJvbSB0aGUgb2JqZWN0IG8uCgljaGVjawoJCXRlc3QgaWYg
Y2xhc3MgYzEgaXMgYWxyZWFkeSBhcHBsaWVkIHRvIG9iamVjdCBvIGFuZCByZXR1
cm5zIHRydWUgb3IgZmFsc2UKCXRvZ2dsZQoJCXRlc3QgaWYgY2xhc3MgYzEgaXMg
YWxyZWFkeSBhcHBsaWVkIHRvIG9iamVjdCBvIGFuZCByZW1vdmUgaWYgc28sIG90
aGVyd2lzZSBhZGQgY2xhc3MgYzEKKi8KZnVuY3Rpb24ganNjc3MoYSxvLGMxLGMy
KQp7Cglzd2l0Y2ggKGEpCgl7CgkJY2FzZSAnYWRkJzoKCQkJanNjc3MuYWRkQ2xh
c3MobywgYzEpOwoJCQlicmVhazsKCQljYXNlICdyZW1vdmUnOgoJCQlqc2Nzcy5y
ZW1vdmVDbGFzcyhvLCBjMSwgYzIpOwoJCQlicmVhazsKCQljYXNlICdjaGVjayc6
CgkJCXJldHVybiBqc2Nzcy5oYXNDbGFzcyhvLCBjMSk7CgkJCWJyZWFrOwoJCWNh
c2UgJ2NoZWNrUGFyZW50cyc6CgkJCWRvCgkJCXsKCQkJCWlmIChqc2Nzcy5oYXND
bGFzcyhvLCBjMSkpCgkJCQkJcmV0dXJuIHRydWU7CgoJCQkJaWYoby50YWdOYW1l
LnRvTG93ZXJDYXNlKCkgPT0gJ2JvZHknKQoJCQkJCXJldHVybiBmYWxzZTsKCQkJ
fQoJCQl3aGlsZShvID0gby5wYXJlbnROb2RlKTsKCQkJcmV0dXJuIGZhbHNlOwoJ
CQlicmVhazsKCQljYXNlICd0b2dnbGUnOgoJCQl2YXIgb3BlcmF0aW9uID0gJ2Fk
ZCc7CgoJCQlpZihqc2NzcygnY2hlY2snLCBvLCBjMSkpCgkJCQlvcGVyYXRpb24g
PSAncmVtb3ZlJzsKCgkJCWpzY3NzKG9wZXJhdGlvbiwgbywgYzEsIGMyKTsKCQkJ
YnJlYWs7CgkJY2FzZSAnc3dhcCc6CgkJCWpzY3NzLnJlcGxhY2VDbGFzcyhvLCBj
MiwgYzEpOwoJCQlicmVhazsKCQljYXNlICdnZXQnOgoJCQlyZXR1cm4ganNjc3Mu
Z2V0Q2xhc3NMaXN0KG8pOwoJCQlicmVhazsKCX0KCXJldHVybiBudWxsOwp9OwoK
LyogdGFrZW4gZnJvbSBodHRwOi8vdGhlcmVhbGNyaXNwLnhzNGFsbC5ubC9tZXVr
L2NsYXNzZGVhbGVyLmpzICovCi8qIGF1dGhvcjogVGlubyBaaWpkZWwsIDIwMDUg
Ki8KanNjc3MuYWRkQ2xhc3MgPSBmdW5jdGlvbiAoZWxlbWVudCwgY2xhc3NuYW1l
KQp7Cgl2YXIgY2xhc3NlcyA9IGpzY3NzLmdldENsYXNzTGlzdChlbGVtZW50KTsK
CWlmIChjbGFzc2VzLmluZGV4T2YoY2xhc3NuYW1lKSA9PSAtMSkKCXsKCQljbGFz
c2VzW2NsYXNzZXMubGVuZ3RoXSA9IGNsYXNzbmFtZTsKCX0KCglqc2Nzcy5zZXRD
bGFzc0xpc3QoZWxlbWVudCwgY2xhc3Nlcyk7Cn07Cgpqc2Nzcy5yZW1vdmVDbGFz
cyA9IGZ1bmN0aW9uIChlbGVtZW50LCBjbGFzc25hbWUpCnsKCXZhciBjbGFzc2Vz
ID0ganNjc3MuZ2V0Q2xhc3NMaXN0KGVsZW1lbnQpLCBpbmRleDsKCWlmICgoaW5k
ZXggPSBjbGFzc2VzLmluZGV4T2YoY2xhc3NuYW1lKSkgPiAtMSkKCXsKCQlkZWxl
dGUgY2xhc3Nlc1tpbmRleF07Cgl9CgoJanNjc3Muc2V0Q2xhc3NMaXN0KGVsZW1l
bnQsIGNsYXNzZXMpOwp9OwoKanNjc3MucmVwbGFjZUNsYXNzID0gZnVuY3Rpb24g
KGVsZW1lbnQsIG9sZGNsYXNzLCBuZXdjbGFzcykKewoJdmFyIGNsYXNzZXMgPSBq
c2Nzcy5nZXRDbGFzc0xpc3QoZWxlbWVudCksIGluZGV4OwoJaWYgKChpbmRleCA9
IGNsYXNzZXMuaW5kZXhPZihvbGRjbGFzcykpID4gLTEgJiYgY2xhc3Nlcy5pbmRl
eE9mKG5ld2NsYXNzKSA9PSAtMSkKCXsKCQljbGFzc2VzW2luZGV4XSA9IG5ld2Ns
YXNzOwoJfQoKCWpzY3NzLnNldENsYXNzTGlzdChlbGVtZW50LCBjbGFzc2VzKTsK
fTsKCmpzY3NzLmdldENsYXNzTGlzdCA9IGZ1bmN0aW9uIChlbGVtZW50KQp7Cglp
ZiAoZWxlbWVudC5jbGFzc05hbWUpCgkJcmV0dXJuIGVsZW1lbnQuY2xhc3NOYW1l
LnNwbGl0KC9ccysvKTsKCXJldHVybiBbXTsKfTsKCmpzY3NzLnNldENsYXNzTGlz
dCA9IGZ1bmN0aW9uIChlbGVtZW50LCBjbGFzc2VzKQp7CgllbGVtZW50LmNsYXNz
TmFtZSA9IGNsYXNzZXMuam9pbignICcpOwp9OwoKanNjc3MuaGFzQ2xhc3MgPSBm
dW5jdGlvbiAoZWxlbWVudCwgY2xhc3NuYW1lKQp7Cgl2YXIgd2FudGVkQ2xhc3Nl
cyA9IG5ldyBBcnJheSgpOwoJaWYgKGNsYXNzbmFtZS5pbmRleE9mKCcgJykgPiAt
MSkKCXsKCQl3YW50ZWRDbGFzc2VzID0gY2xhc3NuYW1lLnNwbGl0KC9ccysvKTsK
CX0gZWxzZSB7CgkJd2FudGVkQ2xhc3Nlc1swXSA9IGNsYXNzbmFtZTsKCX0KCgl2
YXIgY2xhc3NlcyA9IGpzY3NzLmdldENsYXNzTGlzdChlbGVtZW50KTsKCglmb3Ig
KHZhciBpID0gMDsgaSA8IHdhbnRlZENsYXNzZXMubGVuZ3RoOyBpKyspCgl7CgkJ
aWYgKGNsYXNzZXMuaW5kZXhPZih3YW50ZWRDbGFzc2VzW2ldKSA9PSAtMSkKCQl7
CgkJCXJldHVybiBmYWxzZTsKCQl9Cgl9CgoJcmV0dXJuIHRydWU7Cn07CgppZiAo
IUFycmF5LnByb3RvdHlwZS5pbmRleE9mKQp7CglBcnJheS5wcm90b3R5cGUuaW5k
ZXhPZiA9IGZ1bmN0aW9uKHNlYXJjaEVsZW1lbnQsIGZyb21JbmRleCkKCXsKCQl2
YXIgbCA9IHRoaXMubGVuZ3RoLCBpID0gMDsKCQlpZiAoZnJvbUluZGV4KQoJCXsK
CQkJaSA9IGZyb21JbmRleDsKCQkJaWYgKGkgPCAwKQoJCQl7CgkJCQlpICs9IGw7
CgkJCQlpZiAoaSA8IDApCgkJCQkJaSA9IDA7CgkJCX0KCQl9CgoJCXdoaWxlIChp
IDwgbCkKCQl7CgkJCWlmICh0aGlzW2ldID09PSBzZWFyY2hFbGVtZW50KQoJCQkJ
cmV0dXJuIGk7CgkJCWkrKzsKCQl9CgoJCXJldHVybiAtMTsKCX07Cn0KCmlmICgh
QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKQp7CglBcnJheS5wcm90b3R5cGUu
bGFzdEluZGV4T2YgPSBmdW5jdGlvbihzZWFyY2hFbGVtZW50LCBmcm9tSW5kZXgp
Cgl7CgkJdmFyIGkgPSB0aGlzLmxlbmd0aDsKCQlpZiAoIWZyb21JbmRleCkgZnJv
bUluZGV4ID0gMDsKCQllbHNlIGlmIChmcm9tSW5kZXggPCAxKQoJCXsKCQkJZnJv
bUluZGV4ICs9IGk7CgkJCWlmIChmcm9tSW5kZXggPCAwKSBmcm9tSW5kZXggPSAw
OwoJCX0KCgkJd2hpbGUgKGktLSA+IGZyb21JbmRleCkKCQl7CgkJCWlmICh0aGlz
W2ldID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4gaTsKCQl9CgoJCXJldHVybiAt
MTsKCX07Cn07CgppZiAoIUFycmF5LmdldFVuaXF1ZSkKewoJQXJyYXkucHJvdG90
eXBlLmdldFVuaXF1ZSA9IGZ1bmN0aW9uKCkKCXsKCQl2YXIgbmV3X2FycmF5ID0g
W107CgoJCWZvciAodmFyIGk9MDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspCgkJCWlm
IChuZXdfYXJyYXkuaW5kZXhPZih0aGlzW2ldKSA9PSAtMSkKCQkJCW5ld19hcnJh
eS5wdXNoKHRoaXNbaV0pOwoKCQlyZXR1cm4gbmV3X2FycmF5OwoJfQp9OwoKLyog
d2UncmUgYXNzdW1pbmcgY3NzUXVlcnkgd2lsbCBhbHdheXMgYmUgYXZhaWxhYmxl
ICovCnZhciBjc3NRdWVyeSA9IHt9Owp2YXIgRE9NUXVlcnkgPSBmdW5jdGlvbigp
CnsKCXZhciBET01RdWVyeTsKCglpZihkb2N1bWVudC5oYXNRdWVyeVNlbGVjdG9y
KSAvKiB3M2M6IGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy1hcGkvICov
Cgl7CgkJRE9NUXVlcnkgPSBmdW5jdGlvbihzZWxlY3RvciwgY29udGV4dE5vZGUs
IG5zKQoJCXsKCQkJaWYodHlwZW9mIGNvbnRleHROb2RlID09ICJ1bmRlZmluZWQi
KQoJCQl7CgkJCQljb250ZXh0Tm9kZSA9IERPTVF1ZXJ5LnByb3RvdHlwZS5zY29w
ZTsKCQkJfQoKCQkJdGhpcy5yZXN1bHQgPSBjb250ZXh0Tm9kZS5xdWVyeVNlbGVj
dG9yQWxsKHNlbGVjdG9yKTsKCQkJdGhpcy5sZW5ndGggPSB0aGlzLnJlc3VsdC5s
ZW5ndGg7CgkJfQoKCQlET01RdWVyeS5wcm90b3R5cGUucmVzdWx0VHlwZSA9ICdx
dWVyeVNlbGVjdG9yJzsKCQlET01RdWVyeS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rp
b24oaW5kZXgpIHsgcmV0dXJuIHRoaXMucmVzdWx0W2luZGV4XTsgfTsKCX0KCWVs
c2UgaWYoZG9jdW1lbnQuZXZhbHVhdGUgJiYgZG9jdW1lbnQuaW1wbGVtZW50YXRp
b24uaGFzRmVhdHVyZSgneHBhdGgnLCczLjAnKSkgLyogb3VyIG93biB4cGF0aCBp
bXBsZW1lbnRhdGlvbiAqLwoJewoJCURPTVF1ZXJ5ID0gZnVuY3Rpb24oc2VsZWN0
b3IsIGNvbnRleHROb2RlLCBucykKCQl7CgkJCWlmKHR5cGVvZiBjb250ZXh0Tm9k
ZSA9PSAidW5kZWZpbmVkIikKCQkJCWNvbnRleHROb2RlID0gRE9NUXVlcnkucHJv
dG90eXBlLnNjb3BlOwoKCQkJdHJ5CgkJCXsKCQkJCXZhciBvd25lciA9ICcnOwoJ
CQkJaWYodHlwZW9mIGNvbnRleHROb2RlLmNvbnRlbnRUeXBlICE9ICd1bmRlZmlu
ZWQnKQoJCQkJCW93bmVyID0gY29udGV4dE5vZGUuY29udGVudFR5cGU7CgkJCQll
bHNlIGlmIChjb250ZXh0Tm9kZS5vd25lckRvY3VtZW50ICE9IG51bGwgJiYgdHlw
ZW9mIGNvbnRleHROb2RlLm93bmVyRG9jdW1lbnQuY29udGVudFR5cGUgIT0gJ3Vu
ZGVmaW5lZCcpCgkJCQkJb3duZXIgPSBjb250ZXh0Tm9kZS5vd25lckRvY3VtZW50
LmNvbnRlbnRUeXBlOwoJCQkJZWxzZQoJCQkJCW93bmVyID0gJ3RleHQvaHRtbCc7
CgoJCQkJdmFyIG5hbWVzcGFjZSA9IG5zID8gbnMgOiAoWydhcHBsaWNhdGlvbi94
bWwnLCAnYXBwbGljYXRpb24veGh0bWwreG1sJywgJ3RleHQveG1sJ10uaW5kZXhP
Zihvd25lcikgPiAtMSkgPyAnaHRtbDonIDogJyc7CgoJCQkJLyogbmFtZXNwYWNl
ID0gJ2h0bWw6JzsgKi8KCgkJCQl2YXIgeHBhdGggPSB0aGlzLmNzc1RvWFBhdGgo
c2VsZWN0b3IsIGNvbnRleHROb2RlLCBuYW1lc3BhY2UpOwoKCQkJCXRoaXMucmVz
dWx0ID0gZG9jdW1lbnQuZXZhbHVhdGUoeHBhdGgsIGNvbnRleHROb2RlLCB0aGlz
Lk5TUmVzb2x2ZXIsIFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9U
WVBFLCBudWxsKTsKCQkJCXRoaXMubGVuZ3RoID0gdGhpcy5yZXN1bHQuc25hcHNo
b3RMZW5ndGg7CgkJCX0KCQkJY2F0Y2goZSkKCQkJewoJCQkJaWYgKHNob3dBbGVy
dE9uWHBhdGhFcnJvcikKCQkJCQlhbGVydCgnWFBhdGggZXJyb3I6JytzZWxlY3Rv
cisnXG4nK3hwYXRoKydcbicrZSk7CgkJCX0KCQl9CgoJCURPTVF1ZXJ5LnByb3Rv
dHlwZS5yZXN1bHRUeXBlID0gJ1hQYXRoJzsKCQlET01RdWVyeS5wcm90b3R5cGUu
Z2V0ID0gZnVuY3Rpb24oaW5kZXgpIHsgcmV0dXJuIHRoaXMucmVzdWx0LnNuYXBz
aG90SXRlbShpbmRleCk7IH07CgoJCURPTVF1ZXJ5LnByb3RvdHlwZS5OU1Jlc29s
dmVyID0gZnVuY3Rpb24gKHByZWZpeCkKCQl7CgkJCWlmKHByZWZpeCA9PSAnaHRt
bCcpCgkJCXsKCQkJCXJldHVybiAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRt
bCc7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkgLy90aGlzIHNob3VsZG4ndCBldmVy
IGhhcHBlbgoJCQkJcmV0dXJuIG51bGw7CgkJCX0KCQl9OwoKCQlET01RdWVyeS5j
YWNoZWRYUGF0aHMgPSBbIHt9LCB7fSBdOwoKCQkvKiB0bnggdG8gaHR0cDovL3d3
dy5qb2VoZXdpdHQuY29tLyAqLwoJCURPTVF1ZXJ5LnByb3RvdHlwZS5jc3NUb1hQ
YXRoID0gZnVuY3Rpb24gKHJ1bGUsIGNvbnRleHROb2RlLCBuYW1lc3BhY2UpCgkJ
ewoJCQl2YXIgbmFtZXNwYWNlU3BlY2lmaWVkID0gZmFsc2U7CgkJCWlmKG5hbWVz
cGFjZSA9PSAndW5kZWZpbmVkJykKCQkJCW5hbWVzcGFjZSA9ICcnOwoJCQlpZihu
YW1lc3BhY2UgIT0gIiIpCgkJCQluYW1lc3BhY2VTcGVjaWZpZWQgPSB0cnVlOwoK
CQkJdmFyIHhwYXRoID0gRE9NUXVlcnkuY2FjaGVkWFBhdGhzWyBuYW1lc3BhY2VT
cGVjaWZpZWQgPyAwIDogMSBdW3J1bGVdOwoKCQkJaWYodHlwZW9mIHhwYXRoID09
ICdzdHJpbmcnKQoJCQl7CgkJCQlyZXR1cm4geHBhdGg7CgkJCX0KCgkJCXZhciBf
cnVsZSA9IHJ1bGU7CgoJCQl2YXIgcmVnRWxlbWVudCA9IC9eKFsjLl0/KShbYS16
MC05XFwqXy1dKikoKFx8KShbYS16MC05XFwqXy1dKikpPy9pOwoJCQl2YXIgcmVn
QXR0cjEgPSAvXlxbKFteXF1dKilcXS9pOwoJCQl2YXIgcmVnQXR0cjIgPSAvXlxb
XHMqKFteXF5cJH4qPVxzXSspXHMqKFtcXlwkfipdPz0pXHMqKFsiXT8pKFteIl0r
KVwzXHMqXF0vaTsKCQkJdmFyIHJlZ1BzZXVkbyA9IC9eOihbYS16LV0rKShcKChb
Il0/KShbXildKylcM1wpKT8vaTsKCQkJdmFyIHJlZ0NvbWJpbmF0b3IgPSAvXihc
cypbPitcc10pPy9pOwoJCQl2YXIgcmVnQ29tbWEgPSAvXlxzKiwvaTsKCgkJCXZh
ciBpbmRleCA9IDE7CgkJCXZhciBwYXJ0cyA9IFsiLi8vIiwgIioiXSwgc3VicGFy
dHMgPSBbXSwgY29sbGVjdGlvbiA9IFtdOwoJCQl2YXIgbGFzdFJ1bGUgPSBudWxs
OwoJCQl2YXIgbGltaXQgPSBmYWxzZTsKCgkJCXdoaWxlIChydWxlLmxlbmd0aCAm
JiBydWxlICE9IGxhc3RSdWxlKQoJCQl7CgkJCQlsYXN0UnVsZSA9IHJ1bGU7CgoJ
CQkJLy8gVHJpbSBsZWFkaW5nIHdoaXRlc3BhY2UKCQkJCXJ1bGUgPSBydWxlLnJl
cGxhY2UoL15ccyp8XHMqJC9nLCIiKTsKCQkJCWlmICghcnVsZS5sZW5ndGgpCgkJ
CQkJYnJlYWs7CgoJCQkJc3VicGFydHMgPSBbXTsKCgkJCQkvLyBNYXRjaCB0aGUg
ZWxlbWVudCBpZGVudGlmaWVyCgkJCQl2YXIgbSA9IHJlZ0VsZW1lbnQuZXhlYyhy
dWxlKTsKCQkJCWlmIChtKQoJCQkJewoJCQkJCWlmICghbVsxXSkKCQkJCQl7CgkJ
CQkJCWlmIChtWzVdKQoJCQkJCQkJcGFydHNbaW5kZXhdID0gbmFtZXNwYWNlICsg
bVs1XTsKCQkJCQkJZWxzZQoJCQkJCQkJcGFydHNbaW5kZXhdID0gbmFtZXNwYWNl
ICsgbVsyXTsKCQkJCQl9CgkJCQkJZWxzZSBpZiAobVsxXSA9PSAnIycpCgkJCQkJ
ewoJCQkJCQlzdWJwYXJ0cy5wdXNoKCJAaWQ9JyIgKyBtWzJdICsgIiciKTsKCQkJ
CQl9CgkJCQkJZWxzZSBpZiAobVsxXSA9PSAnLicpCgkJCQkJCXN1YnBhcnRzLnB1
c2goImNvbnRhaW5zKGNvbmNhdCgnICcsIEBjbGFzcywgJyAnKSwnICIgKyBtWzJd
ICsgIiAnKSIpOwoKCQkJCQlydWxlID0gcnVsZS5zdWJzdHIobVswXS5sZW5ndGgp
OwoJCQkJfQoKCQkJCS8vIE1hdGNoIGF0dHJpYnV0ZSBzZWxlY3RvcnMKCQkJCW0g
PSByZWdBdHRyMi5leGVjKHJ1bGUpOwoJCQkJaWYgKG0pCgkJCQl7CgkJCQkJc3dp
dGNoKG1bMl0pCgkJCQkJewoJCQkJCQljYXNlICcqPSc6IC8qIGNvbnRhaW5zICov
CgkJCQkJCQlzdWJwYXJ0cy5wdXNoKCJjb250YWlucyhAIiArIG1bMV0gKyAiLCBc
IiIgKyBtWzRdICsgIlwiKSIpOwoJCQkJCQlicmVhazsKCQkJCQkJY2FzZSAnfj0n
OiAvKiBjb250YWlucyBpbiBzcGFjZS1zZXBhcmF0ZWQgdmFsdWUgKi8KCQkJCQkJ
CXN1YnBhcnRzLnB1c2goImNvbnRhaW5zKGNvbmNhdCgnICcsIEAiICsgbVsxXSAr
ICIsICcgJyksIFwiICIgKyBtWzRdICsgIiBcIikiKTsKCQkJCQkJYnJlYWs7CgkJ
CQkJCWNhc2UgJ3w9JzogLyogaXRzIHZhbHVlIGVpdGhlciBiZWluZyBleGFjdGx5
ICJ2YWwiIG9yIGJlZ2lubmluZyB3aXRoICJ2YWwiIGltbWVkaWF0ZWx5IGZvbGxv
d2VkIGJ5ICItIiAgKi8KCQkJCQkJCXN1YnBhcnRzLnB1c2goIkAiICsgbVsxXSAr
ICIgPSBcIiIgKyBtWzRdICsgIlwiKSBvciBzdGFydHMtd2l0aChjb25jYXQoQCIg
KyBtWzFdICsgIiwgJy0nKSwgXCIiICsgbVs0XSArICJcIikpIik7CgkJCQkJCWJy
ZWFrOwoJCQkJCQljYXNlICckPSc6IC8qIGVuZHMgd2l0aCAqLwoJCQkJCQkJLyog
bm90IHN1cHBvcnRlZDogaHR0cDovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9k
b2NzL1hQYXRoOkZ1bmN0aW9ucyovCgkJCQkJCQkvKnN1YnBhcnRzLnB1c2goImVu
ZHMtd2l0aChcIiIrbVs0XSsiXCIsIEAiK21bMV0rIikiKTsqLwoJCQkJCQkJc3Vi
cGFydHMucHVzaCgic3Vic3RyaW5nKEAiICsgbVsxXSArICIsIHN0cmluZy1sZW5n
dGgoQCIgKyBtWzFdICsgIikgLSAiICsgKG1bNF0ubGVuZ3RoIC0gMSkgKyAiKSA9
IFwiIiArIG1bNF0gKyAiXCIiKTsKCQkJCQkJYnJlYWs7CgkJCQkJCWNhc2UgJ149
JzogLyogc3RhcnRzIHdpdGggKi8KCQkJCQkJCXN1YnBhcnRzLnB1c2goInN0YXJ0
cy13aXRoKEAiK21bMV0rIiwgXCIiK21bNF0rIlwiKSIpOwoJCQkJCQlicmVhazsK
CQkJCQkJZGVmYXVsdDoKCQkJCQkJCXN1YnBhcnRzLnB1c2goIkAiICsgbVsxXSAr
ICI9XCIiICsgbVs0XSArICJcIiIpOwoJCQkJCQlicmVhazsKCQkJCQl9CgoJCQkJ
CXJ1bGUgPSBydWxlLnN1YnN0cihtWzBdLmxlbmd0aCk7CgkJCQl9CgkJCQllbHNl
CgkJCQl7CgkJCQkJbSA9IHJlZ0F0dHIxLmV4ZWMocnVsZSk7CgkJCQkJaWYgKG0p
CgkJCQkJewoJCQkJCQlzdWJwYXJ0cy5wdXNoKCJAIiArIG1bMV0gKyAiIik7CgkJ
CQkJCXJ1bGUgPSBydWxlLnN1YnN0cihtWzBdLmxlbmd0aCk7CgkJCQkJfQoJCQkJ
fQoKCQkJCW0gPSByZWdQc2V1ZG8uZXhlYyhydWxlKTsKCQkJCXdoaWxlIChtKQoJ
CQkJewoJCQkJCXJ1bGUgPSBydWxlLnN1YnN0cihtWzBdLmxlbmd0aCk7CgkJCQkJ
LyogcG9zaXRpb24oKSA9PSA1IG9mIHBvc1s1XSA/ICovCgkJCQkJLyogY2hlY2sg
bXNkbiEgKi8KCQkJCQlzd2l0Y2gobVsxXSkKCQkJCQl7CgkJCQkJCWNhc2UgJ2Zp
cnN0LWNoaWxkJzoKCQkJCQkJCXN1YnBhcnRzLnB1c2goInBvc2l0aW9uKCkgPSAx
Iik7CgkJCQkJCWJyZWFrOwoJCQkJCQljYXNlICdsYXN0LWNoaWxkJzoKCQkJCQkJ
CXN1YnBhcnRzLnB1c2goImxhc3QoKSIpOwoJCQkJCQlicmVhazsKCQkJCQkJY2Fz
ZSAnb25seS1jaGlsZCc6CgkJCQkJCQlzdWJwYXJ0cy5wdXNoKCJwb3NpdGlvbigp
ID0gMSIpOwoJCQkJCQkJc3VicGFydHMucHVzaCgibGFzdCgpIik7CgkJCQkJCWJy
ZWFrOwoJCQkJCQljYXNlICdlbmFibGVkJzoKCQkJCQkJY2FzZSAnZGlzYWJsZWQn
OgoJCQkJCQljYXNlICdjaGVja2VkJzoKCQkJCQkJCXN1YnBhcnRzLnB1c2goIkAi
ICsgbVsxXSArICIgIT0gXCJcIiIpOwoJCQkJCQlicmVhazsKCQkJCQkJY2FzZSAn
ZW1wdHknOgoJCQkJCQkJc3VicGFydHMucHVzaCgiY291bnQoLikgPSAwIik7CgkJ
CQkJCWJyZWFrOwoJCQkJCQljYXNlICdsYW5nJzoKCQkJCQkJCXN1YnBhcnRzLnB1
c2goIkBsYW5nPVwiIittWzRdKyJcIiIpOwoJCQkJCQlicmVhazsKCQkJCQkJY2Fz
ZSAnY29udGFpbnMnOgoJCQkJCQkJc3VicGFydHMucHVzaCgiY29udGFpbnModGV4
dCgpLCBcIiIrbVs0XSsiXCIpIik7CgkJCQkJCWJyZWFrOwoJCQkJCQkvKiBodHRw
Oi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9ycy8jbnRoLWNoaWxkLXBzZXVk
byAqLwoJCQkJCQljYXNlICdudGgtY2hpbGQnOgoKCQkJCQkJCS8qIGxldCBvcDog
dGFnbmFtZSBrYW4gb29rIGlldHMgemlqbiBhbHMgJ2h0bWwgZGl2IGJsYTpudGgt
Y2hpbGQoMm4rMSknLCBkdXMgJ3BhcmVudCcga2xvcHQgbmlldCEhISEgKi8KCQkJ
CQkJCS8qcG9zaXRpb24gaXMgZGFuIG9vayB0b3YgZGl2LCBuaWV0IGJsYSdzIHBh
cmVudCAqLwoKCQkJCQkJCXN3aXRjaChtWzRdKQoJCQkJCQkJewoJCQkJCQkJCS8q
IHNwZWNpYWwgLyBmcmVxdWVudGx5IHVzZWQgY2FzZXMgKi8KCQkJCQkJCQljYXNl
ICdvZGQnOgoJCQkJCQkJCWNhc2UgJzJuKzEnOgoJCQkJCQkJCQlzdWJwYXJ0cy5w
dXNoKCJwb3NpdGlvbigpIG1vZCAyID4gMCIpOwoJCQkJCQkJCQlicmVhazsKCQkJ
CQkJCQljYXNlICdldmVuJzoKCQkJCQkJCQljYXNlICcybic6CgkJCQkJCQkJY2Fz
ZSAnMm4rMCc6CgkJCQkJCQkJCXN1YnBhcnRzLnB1c2goInBvc2l0aW9uKCkgbW9k
IDIgPSAwIik7CgkJCQkJCQkJCWJyZWFrOwoJCQkJCQkJCS8qIElmIGJvdGggYSBh
bmQgYiBhcmUgZXF1YWwgdG8gemVybywgdGhlIHBzZXVkby1jbGFzcyByZXByZXNl
bnRzIG5vIGVsZW1lbnQgaW4gdGhlIGRvY3VtZW50IHRyZWUuIC4qLwoJCQkJCQkJ
CWNhc2UgJzBuKzAnOgoJCQkJCQkJCQlzdWJwYXJ0cy5wdXNoKCJmYWxzZSgpIik7
CgkJCQkJCQkJCWJyZWFrOwoJCQkJCQkJCWRlZmF1bHQ6CgkJCQkJCQkJCXZhciBm
b3VuZDsKCQkJCQkJCQkJLyogV2hlbiBhPTAsIG5vIHJlcGVhdGluZyBpcyB1c2Vk
LCBzbyBmb3IgZXhhbXBsZSA6bnRoLWNoaWxkKDBuKzUpIG1hdGNoZXMgb25seSB0
aGUgZmlmdGggY2hpbGQuICovCgkJCQkJCQkJCWlmKGZvdW5kID0gbVs0XS5tYXRj
aCgvXigwblwrKT8oWzAtOV0rKSQvKSkKCQkJCQkJCQkJewoJCQkJCQkJCQkJc3Vi
cGFydHMucHVzaCgicG9zaXRpb24oKSA9ICIgKyBmb3VuZFsyXSk7CgkJCQkJCQkJ
CX0KCQkJCQkJCQkJLyogV2hlbiBhPTEsIHRoZSBudW1iZXIgbWF5IGJlIG9taXR0
ZWQgZnJvbSB0aGUgcnVsZS4gKi8KCQkJCQkJCQkJZWxzZSBpZihmb3VuZCA9IG1b
NF0ubWF0Y2goL14oXnwxKW4kLykpCgkJCQkJCQkJCXsKCQkJCQkJCQkJCTsKCQkJ
CQkJCQkJfQoJCQkJCQkJCQkvKiBJZiBiPTAsIHRoZW4gZXZlcnkgYXRoIGVsZW1l
bnQgaXMgcGlja2VkLiBJbiBzdWNoIGEgY2FzZSwgdGhlIGIgcGFydCBtYXkgYmUg
b21pdHRlZC4gKi8KCQkJCQkJCQkJZWxzZSBpZihmb3VuZCA9IG1bNF0ubWF0Y2go
L14oWzAtOV0rKW4oXCswfCQpJC8pKQoJCQkJCQkJCQl7CgkJCQkJCQkJCQlzdWJw
YXJ0cy5wdXNoKCJwb3NpdGlvbigpIG1vZCAiICsgZm91bmRbMV0gKyAiID0gMCIp
OwoJCQkJCQkJCQl9CgkJCQkJCQkJCS8qIFRoZSB2YWx1ZSBhIGNhbiBiZSBuZWdh
dGl2ZSAgKi8KCQkJCQkJCQkJZWxzZSBpZihmb3VuZCA9IG1bNF0ubWF0Y2goL14t
blwrKFswLTldKykkLykpCgkJCQkJCQkJCXsKCQkJCQkJCQkJCXN1YnBhcnRzLnB1
c2goInBvc2l0aW9uKCkgPD0gIiArIGZvdW5kWzFdKTsKCQkJCQkJCQkJfQoJCQkJ
CQkJCQkvKiB0aGlzIG1hdGNoZXMgdGhlIGJ0aCBjaGlsZCBvZiBhbiBlbGVtZW50
IGFmdGVyIGFsbCB0aGUgY2hpbGRyZW4gaGF2ZSBiZWVuIHNwbGl0IGludG8gZ3Jv
dXBzIG9mIGEgZWxlbWVudHMgZWFjaC4gKi8KCQkJCQkJCQkJZWxzZSBpZihmb3Vu
ZCA9IG1bNF0ubWF0Y2goL14oWzAtOV0rKW4oWystXSkoWzAtOV0rKSQvKSkKCQkJ
CQkJCQkJewoJCQkJCQkJCQkJc3VicGFydHMucHVzaCgicG9zaXRpb24oKSA9IGZs
b29yKGxlbmd0aCguLi9UQUdOQU1FKS8iICsgZm91bmRbMV0gKyAiKSAqICIgKyBm
b3VuZFsxXSArICIgIiArIGZvdW5kWzJdICsgIiAiICsgZm91bmRbM10gKTsKCQkJ
CQkJCQkJfQoJCQkJCQkJCQllbHNlCgkJCQkJCQkJCXsKCQkJCQkJCQkJCS8qdGhy
b3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBudGgtY2hpbGQgc2VsZWN0b3I6ICIr
IG1bNF07KSovCgkJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJYnJlYWs7CgoJCQkJ
CQljYXNlICd0YXJnZXQnOgoJCQkJCQkJLyogc2hvdWxkIHJlYWQgY3VycmVudCBh
bmNob3IgYW5kIGZpbmQgbWF0Y2hpbmcgZWxlbWVudCAqLwoJCQkJCQljYXNlICdo
b3Zlcic6CgkJCQkJCWNhc2UgJ3Jvb3QnOgoJCQkJCQkJLyogdW5zdXBwb3J0ZWQg
YXRtIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvY3NzL3Jvb3QuaHRtbCAqLwoJ
CQkJCQlkZWZhdWx0OgoJCQkJCQkJdGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRl
ZCBwc2V1ZG8gY2xhc3M6ICIrIG1bMV0pOwoJCQkJCQlicmVhazsKCQkJCQl9CgoJ
CQkJCW0gPSByZWdQc2V1ZG8uZXhlYyhydWxlKTsKCQkJCX0KCgkJCQlpZihzdWJw
YXJ0cy5sZW5ndGggPiAwKQoJCQkJewoJCQkJCXBhcnRzLnB1c2goJ1snICsgc3Vi
cGFydHMuam9pbigiIGFuZCAiKSArICddJyk7CgkJCQl9CgoJCQkJLy8gTWF0Y2gg
Y29tYmluYXRvcnMKCQkJCW0gPSByZWdDb21iaW5hdG9yLmV4ZWMocnVsZSk7CgkJ
CQlpZiAobSAmJiBtWzBdLmxlbmd0aCkKCQkJCXsKCQkgICAgICAgICAgICBpZihs
aW1pdCkKCQkgICAgICAgICB7CgkJICAgICAgICAgICAgIHBhcnRzLnB1c2gobGlt
aXQpOwoJCSAgICAgICAgICAgICBsaW1pdCA9IGZhbHNlOwoJCSAgICAgICAgICAg
IH0KCgkJCQkJaWYgKG1bMF0uaW5kZXhPZigiPiIpICE9IC0xKQoJCQkJCXsKCQkJ
CQkJcGFydHMucHVzaCgiLyIpOwoJCQkJCX0KCQkJCQllbHNlIGlmIChtWzBdLmlu
ZGV4T2YoIisiKSAhPSAtMSkKCQkJCQl7CgkJCQkJCXBhcnRzLnB1c2goIi9mb2xs
b3dpbmctc2libGluZzo6Iik7CgkJCQkJCS8vIGZvbGxvd2luZy1zaWJsaW5nIHNl
bGVjdHMgYWxsIGZvbGxvd2luZyBzaWJsaW5ncywgd2UgbmVlZCBvbmx5IHRoZSBm
aXJzdCBuZXh0IHNpYmxpbmcKCQkJCQkJbGltaXQgPSAnWzFdJzsKCQkJCQl9CgkJ
CQkJZWxzZQoJCQkJCXsKCQkJCQkJcGFydHMucHVzaCgiLy8iKTsKCQkJCQl9CgoJ
CQkJCWluZGV4ID0gcGFydHMubGVuZ3RoOwoJCQkJCXBhcnRzLnB1c2goIioiKTsK
CQkJCQlydWxlID0gcnVsZS5zdWJzdHIobVswXS5sZW5ndGgpOwoJCQkJfQoKCQkJ
CW0gPSByZWdDb21tYS5leGVjKHJ1bGUpOwoJCQkJaWYgKG0pCgkJCQl7CgkJCQkJ
aWYobGltaXQpCgkJCQkJewoJCQkJCQlwYXJ0cy5wdXNoKGxpbWl0KTsKCQkJCQkJ
bGltaXQgPSBmYWxzZTsKCQkJCQl9CgoJCQkJCWNvbGxlY3Rpb24ucHVzaCggcGFy
dHMuam9pbigiIikgKTsKCgkJCQkJcGFydHMgPSBbIi4vLyIsICIqIl07CgoJCQkJ
CWluZGV4ID0gcGFydHMubGVuZ3RoLTE7CgkJCQkJcnVsZSA9IHJ1bGUuc3Vic3Ry
KG1bMF0ubGVuZ3RoKTsKCQkJCX0KCQkJfQoKCQkgICAgaWYobGltaXQpCgkJCQlw
YXJ0cy5wdXNoKGxpbWl0KTsKCgkJCWNvbGxlY3Rpb24ucHVzaCggcGFydHMuam9p
bigiIikgKTsKCgkJCXhwYXRoID0gY29sbGVjdGlvbi5qb2luKCIgfCAiKTsKCgkJ
CURPTVF1ZXJ5LmNhY2hlZFhQYXRoc1sgbmFtZXNwYWNlU3BlY2lmaWVkID8gMCA6
IDEgXVtfcnVsZV0gPSB4cGF0aDsKCgkJCS8qRE9NUXVlcnkuc3RvcmVDYWNoZWRY
UGF0aHMoKTsqLwoKCQkJcmV0dXJuIHhwYXRoOwoJCX07CgoJCURPTVF1ZXJ5Lmhh
c1hQYXRoID0gdHJ1ZTsKCX0KCWVsc2UgaWYodHlwZW9mIEVsZW1lbnQgIT0gJ3Vu
ZGVmaW5lZCcgJiYgRWxlbWVudCAmJiB0eXBlb2YgRWxlbWVudC5nZXRFbGVtZW50
c0J5U2VsZWN0b3IgIT0gJ3VuZGVmaW5lZCcgJiYgRWxlbWVudC5nZXRFbGVtZW50
c0J5U2VsZWN0b3IpIC8qIHByb3RvdHlwZSAqLwoJewoJCURPTVF1ZXJ5ID0gZnVu
Y3Rpb24oc2VsZWN0b3IsIGNvbnRleHROb2RlLCBucykKCQl7CgkJCWlmKHR5cGVv
ZiBjb250ZXh0Tm9kZSA9PSAidW5kZWZpbmVkIikKCQkJCWNvbnRleHROb2RlID0g
RE9NUXVlcnkucHJvdG90eXBlLnNjb3BlOwoKCQkJLyogcHJvdG90eXBlJ3MgaGln
aGVzdCBwb2ludCB3aGVyZSBnZXRFbGVtZW50c0J5U2VsZWN0b3IgaXMgdG8gYmUg
Zm91bmQgaXMuLi4gKi8KCQkJaWYoY29udGV4dE5vZGUgPT0gZG9jdW1lbnQpCgkJ
CQljb250ZXh0Tm9kZSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKCgkJCXRy
eQoJCQl7CgkJCQl0aGlzLnJlc3VsdCA9ICQoY29udGV4dE5vZGUpLmdldEVsZW1l
bnRzQnlTZWxlY3Rvci5hcHBseSgkKGNvbnRleHROb2RlKSwgc2VsZWN0b3Iuc3Bs
aXQoJywnKSApOwoJCQl9CgkJCWNhdGNoKGUpCgkJCXsKCQkJCXRoaXMucmVzdWx0
ID0gW107CgkJCQl0aGlzLmxlbmd0aCA9IDA7CgkJCQl0aHJvdyBlOwoJCQl9CgkJ
CXRoaXMubGVuZ3RoID0gdGhpcy5yZXN1bHQubGVuZ3RoOwoJCX0KCgkJRE9NUXVl
cnkucHJvdG90eXBlLnJlc3VsdFR5cGUgPSAnZ2V0RWxlbWVudHNCeVNlbGVjdG9y
JzsKCQlET01RdWVyeS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24oaW5kZXgpIHsg
cmV0dXJuIHRoaXMucmVzdWx0W2luZGV4XTsgfTsKCX0KCWVsc2UgaWYodHlwZW9m
IGpRdWVyeSAhPSAndW5kZWZpbmVkJykgLyoganF1ZXJ5ICovCgl7CgkJRE9NUXVl
cnkgPSBmdW5jdGlvbihzZWxlY3RvciwgY29udGV4dE5vZGUsIG5zKQoJCXsKCQkJ
aWYodHlwZW9mIGNvbnRleHROb2RlID09ICJ1bmRlZmluZWQiKQoJCQkJY29udGV4
dE5vZGUgPSBET01RdWVyeS5wcm90b3R5cGUuc2NvcGU7CgoJCQl0aGlzLnJlc3Vs
dCA9IGpRdWVyeShzZWxlY3RvciwgY29udGV4dE5vZGUpOwoJCQl0aGlzLmxlbmd0
aCA9IHRoaXMucmVzdWx0LnNpemUoKTsKCQl9CgoJCURPTVF1ZXJ5LnByb3RvdHlw
ZS5yZXN1bHRUeXBlID0gJ2pRdWVyeSc7CgkJRE9NUXVlcnkucHJvdG90eXBlLmdl
dCA9IGZ1bmN0aW9uKGluZGV4KSB7IHJldHVybiB0aGlzLnJlc3VsdFtpbmRleF07
IH07Cgl9CgllbHNlIGlmKHR5cGVvZiBjc3NRdWVyeSAhPSAndW5kZWZpbmVkJykg
LyogZGVhbiBlZHdhcmQncyBjc3NxdWVyeSAqLwoJewoJCURPTVF1ZXJ5ID0gZnVu
Y3Rpb24oc2VsZWN0b3IsIGNvbnRleHROb2RlLCBucykKCQl7CgkJCWlmKHR5cGVv
ZiBjb250ZXh0Tm9kZSA9PSAidW5kZWZpbmVkIikKCQkJCWNvbnRleHROb2RlID0g
RE9NUXVlcnkucHJvdG90eXBlLnNjb3BlOwoKCQkJdGhpcy5yZXN1bHQgPSBjc3NR
dWVyeShzZWxlY3RvciwgY29udGV4dE5vZGUpOwoJCQl0aGlzLmxlbmd0aCA9IHRo
aXMucmVzdWx0Lmxlbmd0aDsKCQl9CgoJCURPTVF1ZXJ5LnByb3RvdHlwZS5yZXN1
bHRUeXBlID0gJ2Nzc1F1ZXJ5JzsKCQlET01RdWVyeS5wcm90b3R5cGUuZ2V0ID0g
ZnVuY3Rpb24oaW5kZXgpIHsgcmV0dXJuIHRoaXMucmVzdWx0W2luZGV4XTsgfTsK
CX0KCglpZih0eXBlb2YgRE9NUXVlcnkgPT0gJ3VuZGVmaW5lZCcpCgkJdGhyb3cg
Ik5vIERPTVF1ZXJ5IGhhbmRsZXIgZm91bmQuIjsKCglET01RdWVyeS5wcm90b3R5
cGUuc2NvcGUgPSBkb2N1bWVudDsKCglyZXR1cm4gRE9NUXVlcnk7Cn0oKTsKCmZ1
bmN0aW9uIGdldFRhcmdldHModGFyZ2V0cywgZGVmYXVsdERPTVF1ZXJ5KQp7Cglp
Zih0YXJnZXRzKQoJewoJCWlmKHR5cGVvZiB0YXJnZXRzID09ICdzdHJpbmcnKQoJ
CQlyZXR1cm4gbmV3IERPTVF1ZXJ5KHRhcmdldHMpOwoJCWVsc2UKCQkJcmV0dXJu
IHRhcmdldHM7Cgl9CgllbHNlCgl7CgkJaWYodHlwZW9mIGRlZmF1bHRET01RdWVy
eSA9PSAnc3RyaW5nJykKCQkJcmV0dXJuIG5ldyBET01RdWVyeShkZWZhdWx0RE9N
UXVlcnkpOwoJCWVsc2UKCQkJcmV0dXJuIGRlZmF1bHRET01RdWVyeTsKCX0KCgly
ZXR1cm4gbmV3IERPTVF1ZXJ5KCcnKTsKfTsKCmZ1bmN0aW9uIGFkZENsYXNzVG9U
YXJnZXRzKHF1ZXJ5LCBjbGFzc25hbWUsIGNvbnRleHROb2RlKQp7Cgl2YXIgaXRl
bXMgPSBuZXcgRE9NUXVlcnkocXVlcnksIGNvbnRleHROb2RlKTsKCglmb3IodmFy
IGk9MCwgaXRlbTsgKGl0ZW09aXRlbXMuZ2V0KGkpKTsgaSsrKQoJewoJCWpzY3Nz
KCdhZGQnLCBpdGVtLCBjbGFzc25hbWUsICcnKTsKCX0KfTsKCmZ1bmN0aW9uIGFk
ZEV2ZW50VG9UYXJnZXRzKHRhcmdldHMsIHR5cGUsIGhhbmRsZXIsIGRlZmF1bHRE
T01RdWVyeSkKewoJdmFyIGVsZW1lbnRzID0gZ2V0VGFyZ2V0cyh0YXJnZXRzLCBk
ZWZhdWx0RE9NUXVlcnkpLCBlbDsKCglmb3IodmFyIGk9MDsoZWw9ZWxlbWVudHMu
Z2V0KGkpKTtpKyspCgl7CgkJYWRkRXZlbnQoZWwsIHR5cGUsIGhhbmRsZXIpOwoJ
fQoKCXJldHVybiBlbGVtZW50czsKfTsKCi8vIHdyaXR0ZW4gYnkgRGVhbiBFZHdh
cmRzLCAyMDA1Ci8vIHdpdGggaW5wdXQgZnJvbSBUaW5vIFppamRlbCAtIGNyaXNw
QHhzNGFsbC5ubAovLyBodHRwOi8vZGVhbi5lZHdhcmRzLm5hbWUvd2VibG9nLzIw
MDUvMTAvYWRkLWV2ZW50LwpmdW5jdGlvbiBhZGRFdmVudChlbGVtZW50LCB0eXBl
LCBoYW5kbGVyKQp7CglpZiAoZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKSB7CgkJ
ZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGFyZ3VtZW50
cy5jYWxsZWUuZXZlbnRMaXN0ZW5lclVzZUNhcHR1cmUpOwoJfQoJZWxzZQoJewoJ
CWlmICghaGFuZGxlci4kJGd1aWQpIGhhbmRsZXIuJCRndWlkID0gYWRkRXZlbnQu
Z3VpZCsrOwoJCWlmICghZWxlbWVudC5ldmVudHMpIGVsZW1lbnQuZXZlbnRzID0g
e307CgkJdmFyIGhhbmRsZXJzID0gZWxlbWVudC5ldmVudHNbdHlwZV07CgkJaWYg
KCFoYW5kbGVycykKCQl7CgkJCWhhbmRsZXJzID0gZWxlbWVudC5ldmVudHNbdHlw
ZV0gPSB7fTsKCQkJaWYgKGVsZW1lbnRbJ29uJyArIHR5cGVdKSBoYW5kbGVyc1sw
XSA9IGVsZW1lbnRbJ29uJyArIHR5cGVdOwoJCQllbGVtZW50WydvbicgKyB0eXBl
XSA9IGhhbmRsZUV2ZW50OwoJCX0KCgkJaGFuZGxlcnNbaGFuZGxlci4kJGd1aWRd
ID0gaGFuZGxlcjsKCX0KfQphZGRFdmVudC5ndWlkID0gMTsKYWRkRXZlbnQuZXZl
bnRMaXN0ZW5lclVzZUNhcHR1cmUgPSBmYWxzZTsKCmZ1bmN0aW9uIHJlbW92ZUV2
ZW50KGVsZW1lbnQsIHR5cGUsIGhhbmRsZXIpCnsKCWlmIChlbGVtZW50LnJlbW92
ZUV2ZW50TGlzdGVuZXIpCgkJZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5
cGUsIGhhbmRsZXIsIGZhbHNlKTsKCWVsc2UgaWYgKGVsZW1lbnQuZXZlbnRzICYm
IGVsZW1lbnQuZXZlbnRzW3R5cGVdICYmIGhhbmRsZXIuJCRndWlkKQoJCWRlbGV0
ZSBlbGVtZW50LmV2ZW50c1t0eXBlXVtoYW5kbGVyLiQkZ3VpZF07Cn07CgpmdW5j
dGlvbiByZW1vdmVFdmVudEZyb21UYXJnZXRzKHRhcmdldHMsIHR5cGUsIGhhbmRs
ZXIsIGRlZmF1bHRET01RdWVyeSkKewoJdmFyIGVsZW1lbnRzID0gZ2V0VGFyZ2V0
cyh0YXJnZXRzLCBkZWZhdWx0RE9NUXVlcnkpLCBlbDsKCglmb3IodmFyIGk9MDso
ZWw9ZWxlbWVudHMuZ2V0KGkpKTtpKyspCgkJcmVtb3ZlRXZlbnQoZWwsIHR5cGUs
IGhhbmRsZXIpOwp9OwoKZnVuY3Rpb24gaGFuZGxlRXZlbnQoZXZlbnQpCnsKCWV2
ZW50ID0gZXZlbnQgfHwgZml4RXZlbnQod2luZG93LmV2ZW50KTsKCXZhciByZXR1
cm5WYWx1ZSA9IHRydWU7Cgl2YXIgaGFuZGxlcnMgPSB0aGlzLmV2ZW50c1tldmVu
dC50eXBlXTsKCglmb3IgKHZhciBpIGluIGhhbmRsZXJzKQoJewoJCWlmICghT2Jq
ZWN0LnByb3RvdHlwZVtpXSkKCQl7CgkJCXRoaXMuJCRoYW5kbGVyID0gaGFuZGxl
cnNbaV07CgkJCWlmICh0aGlzLiQkaGFuZGxlcihldmVudCkgPT09IGZhbHNlKSBy
ZXR1cm5WYWx1ZSA9IGZhbHNlOwoJCX0KCX0KCglpZiAodGhpcy4kJGhhbmRsZXIp
IHRoaXMuJCRoYW5kbGVyID0gbnVsbDsKCglyZXR1cm4gcmV0dXJuVmFsdWU7Cn07
CgpmdW5jdGlvbiBmaXhFdmVudChldmVudCkKewoJZXZlbnQucHJldmVudERlZmF1
bHQgPSBmaXhFdmVudC5wcmV2ZW50RGVmYXVsdDsKCWV2ZW50LnN0b3BQcm9wYWdh
dGlvbiA9IGZpeEV2ZW50LnN0b3BQcm9wYWdhdGlvbjsKCXJldHVybiBldmVudDsK
fQoKZml4RXZlbnQucHJldmVudERlZmF1bHQgPSBmdW5jdGlvbigpCnsKCXRoaXMu
cmV0dXJuVmFsdWUgPSBmYWxzZTsKfTsKCmZpeEV2ZW50LnN0b3BQcm9wYWdhdGlv
biA9IGZ1bmN0aW9uKCkKewoJdGhpcy5jYW5jZWxCdWJibGUgPSB0cnVlOwp9OwoK
Ly8gVGhpcyBsaXR0bGUgc25pcHBldCBmaXhlcyB0aGUgcHJvYmxlbSB0aGF0IHRo
ZSBvbmxvYWQgYXR0cmlidXRlIG9uIHRoZSBib2R5LWVsZW1lbnQgd2lsbCBvdmVy
d3JpdGUKLy8gcHJldmlvdXMgYXR0YWNoZWQgZXZlbnRzIG9uIHRoZSB3aW5kb3cg
b2JqZWN0IGZvciB0aGUgb25sb2FkIGV2ZW50CmlmICghd2luZG93LmFkZEV2ZW50
TGlzdGVuZXIpCnsKCWRvY3VtZW50Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0
aW9uKCkKCXsKCQlpZiAod2luZG93Lm9ubG9hZCAmJiB3aW5kb3cub25sb2FkICE9
IGhhbmRsZUV2ZW50KQoJCXsKCQkJYWRkRXZlbnQod2luZG93LCAnbG9hZCcsIHdp
bmRvdy5vbmxvYWQpOwoJCQl3aW5kb3cub25sb2FkID0gaGFuZGxlRXZlbnQ7CgkJ
fQoJfTsKfTsKCmZ1bmN0aW9uIGdldE9iaihldiwgb2IpCnsKCWlmKCFvYikKCXsK
CQl2YXIgdGFyZzsKCQlpZiAoIWV2KSBldiA9IHdpbmRvdy5ldmVudDsKCgkJaWYg
KGV2LnRhcmdldCkgdGFyZyA9IGV2LnRhcmdldDsKCQllbHNlIGlmIChldi5zcmNF
bGVtZW50KSB0YXJnID0gZXYuc3JjRWxlbWVudDsKCgkJaWYgKHRhcmcgJiYgdGFy
Zy5ub2RlVHlwZSA9PSAzKSAvLyBkZWZlYXQgU2FmYXJpIGJ1ZwoJCQl0YXJnID0g
dGFyZy5wYXJlbnROb2RlOwoKCQlyZXR1cm4gdGFyZzsKCX0KCWVsc2UKCXsKCQly
ZXR1cm4gb2I7Cgl9Cn07CgpmdW5jdGlvbiBsb2FkU2NyaXB0KHVybCwgcHJlcGVu
ZEJvYXJkVXJsKQp7CglpZihwcmVwZW5kQm9hcmRVcmwpCgkJdXJsID0gYm9hcmRf
dGVtcGxhdGVfdXJsICsgdXJsOwoKCXZhciBlID0gY3JlYXRlRE9NTm9kZSgnc2Ny
aXB0JywgeyJ0eXBlIiA6ICd0ZXh0L2phdmFzY3JpcHQnLCAic3JjIiA6IHVybH0s
IFtdKTsKCglkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBd
LmFwcGVuZENoaWxkKGUpOwp9OwoKZnVuY3Rpb24gY3VycmVudFN0eWxlKGVsZW1l
bnQsIHByb3BlcnR5KQp7CglyZXR1cm4gcGFyc2VJbnQod2luZG93LmdldENvbXB1
dGVkU3R5bGUgPyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50LCcnKS5n
ZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KSA6IGVsZW1lbnQuY3VycmVudFN0eWxl
LmdldEF0dHJpYnV0ZShwcm9wZXJ0eSkpOwp9OwoKZnVuY3Rpb24gZW1wdHkoKQp7
CglpZih0aGlzICYmIHRoaXMudmFsdWUgPT0gdGhpcy5kZWZhdWx0VmFsdWUgKQoJ
ewoJCXRoaXMudmFsdWUgPSAnJzsKCX0KfTsKCmZ1bmN0aW9uIHVuaHRtbHNwZWNp
YWxjaGFycyhzdHIpCnsKCXN0ciA9IHN0ci5yZXBsYWNlKC8mYW1wOy9naSwgJyYn
KTsKCXN0ciA9IHN0ci5yZXBsYWNlKC8mbHQ7L2dpLCAnPCcpOwoJc3RyID0gc3Ry
LnJlcGxhY2UoLyZndDsvZ2ksICc+Jyk7CglyZXR1cm4gc3RyOwp9OwoKLyogdG54
IGNyaXNwICovCmZ1bmN0aW9uIGh0bWxzcGVjaWFsY2hhcnMoaW5wdXQpCnsKCWlu
cHV0ID0gaW5wdXQucmVwbGFjZSgvJi9nLCcmYW1wOycpOwoJaW5wdXQgPSBpbnB1
dC5yZXBsYWNlKC8+L2csJyZndDsnKTsKCWlucHV0ID0gaW5wdXQucmVwbGFjZSgv
PC9nLCcmbHQ7Jyk7CglpbnB1dCA9IGlucHV0LnJlcGxhY2UoLyIvZywnJnF1b3Q7
Jyk7CgoJLyogIiA8IGZpeCBzeW50YXggaGlnaGxpZ2h0aW5nICovCgoJcmV0dXJu
IGlucHV0Owp9OwoKZnVuY3Rpb24gZ2V0Q29va2llKHNOYW1lKQp7Cgl2YXIgYUNv
b2tpZSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOyAnKSwgaSA9IGFDb29raWUu
bGVuZ3RoLCBhQ3J1bWI7Cgl3aGlsZSAoaS0tKQoJewoJCWFDcnVtYiA9IGFDb29r
aWVbaV0uc3BsaXQoJz0nKTsKCQlpZiAoc05hbWUgPT0gYUNydW1iWzBdKQoJCQly
ZXR1cm4gdHlwZW9mIGFDcnVtYlsxXSAhPSAndW5kZWZpbmVkJz8gdW5lc2NhcGUo
YUNydW1iWzFdKSA6IG51bGw7Cgl9CgoJcmV0dXJuIG51bGw7Cn0KCi8qCiAqIEZp
bmQgdGhlIG5leHQgc2libGluZyBub2RlIChza2lwcGluZyB0ZXh0IG5vZGVzKSBv
ciBhIHNpYmxpbmcgd2l0aCBhIHNwZWNpZmljIHRhZyBuYW1lCiAqLwpmdW5jdGlv
biBnZXRTaWJsaW5nTm9kZShzdGFydHBvaW50LCBkaXJlY3Rpb24sIHRhZ05hbWUp
CnsKCXZhciBvID0gc3RhcnRwb2ludCwgdGFnRW1wdHkgPSAodGFnTmFtZSA9PSB1
bmRlZmluZWQgfHwgdGFnTmFtZS5sZW5ndGggPT0gMCk7CgoJaWYgKHRhZ05hbWUg
IT0gdW5kZWZpbmVkKQoJCXRhZ05hbWUgPSB0YWdOYW1lLnRvTG93ZXJDYXNlKCk7
CgoJZG8KCXsKCQlpZiAoZGlyZWN0aW9uID09ICdwcmV2aW91cycpCgkJewoJCQlv
ID0gby5wcmV2aW91c1NpYmxpbmc7CgkJfQoJCWVsc2UgaWYgKCBkaXJlY3Rpb24g
PT0gIm5leHQiICkKCQl7CgkJCW8gPSBvLm5leHRTaWJsaW5nOwoJCX0KCQllbHNl
IGlmICggZGlyZWN0aW9uID09ICJ1cCIgKQoJCXsKCQkJbyA9IG8ucGFyZW50Tm9k
ZTsKCQl9CgoJCWlmICggbyAmJiBvLm5vZGVUeXBlID09IDEpCgkJewoJCQlpZiAo
dGFnRW1wdHkgfHwgby50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gdGFnTmFtZSAp
CgkJCQlyZXR1cm4gbzsKCQl9CgoJfSB3aGlsZSAobyk7CgoJcmV0dXJuIG51bGw7
Cn0KCi8qCmV4YW1wbGUgc3ludGF4OgoKdmFyIHRlc3QgPSBjcmVhdGVET01Ob2Rl
KCAnZGl2JywgeyJjbGFzcyIgOiAnd2FhJywgImV2ZW50IiA6IFsnY2xpY2snLCBf
ZnVuY10gfSwKCQkJWwoJCQkJY3JlYXRlRE9NTm9kZSggJ3NwYW4nLCB7ImNsYXNz
IiA6ICd3b2VpJ30sCgkJCQlbCgkJCQkJJ3Nub3RiZXVrZW4nCgkJCQldKSwKCQkJ
CSd3YWEnLAoJCQkJMTIzCgkJCV0pOwpjcmVhdGVzOgp0ZXh0ID0gPGRpdiBjbGFz
cz0id2FhIj48c3BhbiBjbGFzcz0id29laSI+c25vdGJldWtlbj53YWExMjM8L2Rp
dj4KKi8KZnVuY3Rpb24gY3JlYXRlRE9NTm9kZSh0YWduYW1lLCBvcHRpb25zLCBj
aGlsZHJlbikKewoJdmFyIG9wdGlvbiwgY2hpbGQsIG1lOwoKCWlmKGlzSUUgJiYg
dHlwZW9mIG9wdGlvbnNbJ3R5cGUnXSA9PSAnc3RyaW5nJyAmJiAob3B0aW9uc1sn
dHlwZSddID09ICdyYWRpbycgfHwgb3B0aW9uc1sndHlwZSddID09ICdzdWJtaXQn
KSkKCXsKCQkvKiBJRSBkb2Vzbid0IGxpa2UgZHluYW1pY2FsbHkgZ2VuZXJhdGVk
IFtzXXJhZGlvYnV0dG9uc1svXSBhbnl0aGluZywgc28gd2UgaGF2ZSB0byBzZXQg
J25hbWUnIG1hbnVhbGx5ICovCgkJbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KAoJCQkJJzxpbnB1dCcgKwoJCQkJJyB0eXBlPSInK29wdGlvbnNbJ3R5cGUnXSAr
ICciJyArCgkJCQknIG5hbWU9IicgKyBvcHRpb25zWyduYW1lJ10gKyAnIicgKwoJ
CQkJICh0eXBlb2Ygb3B0aW9uc1snY2hlY2tlZCddICE9ICd1bmRlZmluZWQnID8g
JyBjaGVja2VkJyA6ICcnKSArCgkJCQknPicKCQkJKTsKCX0KCWVsc2UgaWYodGFn
bmFtZSAhPSBudWxsKQoJewoJCW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0
YWduYW1lKTsKCX0KCWVsc2UKCXsKCQltZSA9IGRvY3VtZW50LmNyZWF0ZURvY3Vt
ZW50RnJhZ21lbnQoKTsKCX0KCglmb3Iob3B0aW9uIGluIG9wdGlvbnMpCgl7CgkJ
aWYoIW9wdGlvbnMuaGFzT3duUHJvcGVydHkob3B0aW9uKSkKCQkJY29udGludWU7
CgoJCWlmKG9wdGlvbiA9PSAnZXZlbnQnKQoJCXsKCQkJYWRkRXZlbnQobWUsIG9w
dGlvbnNbb3B0aW9uXVswXSwgb3B0aW9uc1tvcHRpb25dWzFdKTsKCQl9CgkJZWxz
ZQoJCXsKCQkJaWYgKG9wdGlvbiA9PSAnY2xhc3MnKQoJCQl7CgkJCQltZS5zZXRB
dHRyaWJ1dGUoJ2NsYXNzTmFtZScsIG9wdGlvbnNbb3B0aW9uXSk7CgkJCX0KCQkJ
ZWxzZSBpZiAob3B0aW9uID09ICdzdHlsZScgJiYgbWUuc3R5bGUuc2V0QXR0cmli
dXRlKQoJCQl7CgkJCQltZS5zdHlsZS5zZXRBdHRyaWJ1dGUoJ2Nzc1RleHQnLCBv
cHRpb25zW29wdGlvbl0pOwoJCQkJY29udGludWU7CgkJCX0KCgkJCW1lLnNldEF0
dHJpYnV0ZShvcHRpb24sIG9wdGlvbnNbb3B0aW9uXSk7CgkJfQoJfQoKCWZvcih2
YXIgaSA9IDA7IChjaGlsZD1jaGlsZHJlbltpXSk7IGkrKykKCXsKCQlpZiggWyJz
dHJpbmciLCAibnVtYmVyIl0uaW5kZXhPZih0eXBlb2YgY2hpbGQpID4gLTEgKQoJ
CXsKCQkJY2hpbGQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjaGlsZCk7CgkJ
fQoJCW1lLmFwcGVuZENoaWxkKGNoaWxkKTsKCX0KCglyZXR1cm4gbWU7Cn07Cgpm
dW5jdGlvbiBzZXRDb29raWUoc05hbWUsIHNWYWx1ZSkKewoJZG9jdW1lbnQuY29v
a2llID0gc05hbWUgKyAnPScgKyBlc2NhcGUoc1ZhbHVlKSArICc7IGV4cGlyZXM9
RnJpLCAzMSBEZWMgMjA5OSAyMzo1OTo1OSBHTVQ7IHBhdGg9Lyc7Cn0KCi8vIHRy
YW5zcGFyYW50UE5HIC0gQmFzZWQgb24gaHR0cDovL3d3dy5zY2hpbGxtYW5pYS5j
b20vcHJvamVjdHMvcG5nLyBidXQgdmVyeSBtdWNoIGNvbXBsZXRlbHkgcmV3cml0
dGVuCi8vIEFwcGx5IGEgZmlsdGVyIGluIElFIHRvIG1ha2UgcG5nJ3MgKGJvdGgg
aW1hZ2VzIGFuZCBiYWNrZ3JvdW5kLWltYWdlcykgdHJhbnNwYXJhbnQKZnVuY3Rp
b24gdHJhbnNwYXJhbnRQTkcodGFyZ2V0cywgc2NhbGluZ01ldGhvZCkKewoJaWYg
KCFpc0lFIHx8ICFpc1dpbiB8fCAhaXNOb3RJRTcpCgkJcmV0dXJuOwoKCWlmKCFz
Y2FsaW5nTWV0aG9kKQoJCXZhciBzY2FsaW5nTWV0aG9kID0gJ2ltYWdlJzsKCgkv
LyBIZXJlIHlvdSBjYW4gZGVjaWRlIHdoaWNoIGVsZW1lbnRzIHRvIHNlYXJjaCBm
b3IgcG5nJ3MgKHlvdSBjYW4gdXNlICogYnV0IHRoYXQgd2lsbCBiZSB2ZXJ5IHNs
b3cpCgl2YXIgZWxlbWVudHMgPSBnZXRUYXJnZXRzKHRhcmdldHMsICcudHJhbnNw
YXJhbnRQTkcnKTsKCXZhciBpbWFnZXNvdXJjZTsKCglmb3IgKHZhciBpPTAsIG9i
amVjdDsgKG9iamVjdD1lbGVtZW50cy5nZXQoaSkpOyBpKyspCgl7CgkJaWYgKG9i
amVjdC5nZXRBdHRyaWJ1dGUoJ3NyYycpKQoJCXsKCQkJaW1hZ2Vzb3VyY2UgPSBv
YmplY3QuZ2V0QXR0cmlidXRlKCdzcmMnKTsKCQkJb2JqZWN0LnNyYyA9IGJvYXJk
X3RlbXBsYXRlX3VybCArICdpbWcvbGF5b3V0L2llZml4L3RyYW5zcGFyYW50UE5H
LmdpZic7CgkJfQoJCWVsc2UgaWYgKG9iamVjdC5jdXJyZW50U3R5bGUuYmFja2dy
b3VuZEltYWdlLnRvU3RyaW5nKCkgJiYgb2JqZWN0LmN1cnJlbnRTdHlsZS5iYWNr
Z3JvdW5kSW1hZ2UudG9TdHJpbmcoKSAhPSAibm9uZSIpCgkJewoJCQl2YXIgY3Nz
QmFja2dyb3VuZCA9IG9iamVjdC5jdXJyZW50U3R5bGUuYmFja2dyb3VuZEltYWdl
LnRvU3RyaW5nKCk7CgkJCXZhciBqID0gY3NzQmFja2dyb3VuZC5pbmRleE9mKCd1
cmwoIicpKzU7CgkJCWltYWdlc291cmNlID0gY3NzQmFja2dyb3VuZC5zdWJzdHIo
aixjc3NCYWNrZ3JvdW5kLmxlbmd0aC1qLTIpOwoJCQlvYmplY3Quc3R5bGUuYmFj
a2dyb3VuZEltYWdlID0gJ25vbmUnOwoJCX0KCQllbHNlCgkJCWNvbnRpbnVlOwoK
CQlvYmplY3Quc3R5bGUud3JpdGluZ01vZGUgPSAnbHItdGInOwoJCW9iamVjdC5z
dHlsZS5maWx0ZXIgPSAicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0
LkFscGhhSW1hZ2VMb2FkZXIoc3JjPSciK2ltYWdlc291cmNlKyInLHNpemluZ01l
dGhvZD0nIiArIHNjYWxpbmdNZXRob2QgKyAiJykiOwoKCQlvYmplY3Quc3R5bGUu
Ym9yZGVyID0gJzAnOwoJfQp9Cgp2YXIgdGV4dHMgPSBuZXcgQXJyYXkoKTsKZnVu
Y3Rpb24gZ2V0VGV4dChhLCBiLCBjKQp7CglpZih0eXBlb2YgdGV4dHNbYV0gPT0g
J3VuZGVmaW5lZCcgfHwgdHlwZW9mIHRleHRzW2FdW2JdID09ICd1bmRlZmluZWQn
IHx8ICF0ZXh0c1thXVtiXSApCgkJcmV0dXJuICdbdGV4dCBub3QgZm91bmQ6ICcr
YSsnOjonK2IrJ10nOwoKCWlmICggYyApCgkJcmV0dXJuIHRleHRzW2FdW2JdLnJl
cGxhY2UoJyVzJyxjKTsKCWVsc2UKCQlyZXR1cm4gdGV4dHNbYV1bYl07Cn0KCi8v
IERlYW4gRWR3YXJkcy9NYXR0aGlhcyBNaWxsZXIvSm9obiBSZXNpZwovKiBodHRw
Oi8vZGVhbi5lZHdhcmRzLm5hbWUvd2VibG9nLzIwMDYvMDYvYWdhaW4vICovCmZ1
bmN0aW9uIGluaXQoKQp7CgkvLyBxdWl0IGlmIHRoaXMgZnVuY3Rpb24gaGFzIGFs
cmVhZHkgYmVlbiBjYWxsZWQKCWlmIChhcmd1bWVudHMuY2FsbGVlLmRvbmUpCgkJ
cmV0dXJuOwoKCS8vIGZsYWcgdGhpcyBmdW5jdGlvbiBzbyB3ZSBkb24ndCBkbyB0
aGUgc2FtZSB0aGluZyB0d2ljZQoJYXJndW1lbnRzLmNhbGxlZS5kb25lID0gdHJ1
ZTsKCgkvLyBraWxsIHRoZSB0aW1lcgoJaWYgKF90aW1lcikKCQljbGVhckludGVy
dmFsKF90aW1lcik7CgoJX2luaXQoZXZlbnRzKTsKfTsKCmZ1bmN0aW9uIHJhbmQg
KCBuICkKewoJcmV0dXJuICggTWF0aC5mbG9vciAoIE1hdGgucmFuZG9tICggKSAq
IG4gKyAxICkgKTsKfQoKdmFyIHRpbWluZ3MgPSBbXTsKdmFyIGV2ZW50VGltaW5n
ID0gZmFsc2U7CgppZiAodHlwZW9mIHNob3dBbGVydE9uWHBhdGhFcnJvciA9PSAi
dW5kZWZpbmVkIikKCXZhciBzaG93QWxlcnRPblhwYXRoRXJyb3IgPSBmYWxzZTsK
CnZhciBpc0lFLCBpc05vdElFNywgaXNHZWNrbywgaXNXZWJLaXQsIGlzV2luOwoK
ZnVuY3Rpb24gX2luaXQoZXZlbnRzLCBzY29wZSkKewoJaWYoIWRvY3VtZW50LmJv
ZHkpCgkJcmV0dXJuOwoKCXZhciB0aW1lMSwgdGltZTIsIGZ1bmNuYW1lOwoJdmFy
IGZ1bmNQYXR0ZXJuID0gL2Z1bmN0aW9uIChbYS16QS1aXSspLywgdG90YWwgPSAw
LCBkdXJhdGlvbiA9IDA7CgoJaWYoIWFyZ3VtZW50cy5jYWxsZWUuaW5pdGFsSW5p
dCkKCXsKCQlpc0lFID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdNU0lF
JykgIT0gLTEgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdPcGVyYScp
ID09IC0xOwoJCWlzTm90SUU3ID0gaXNJRSAmJiBuYXZpZ2F0b3IudXNlckFnZW50
LmluZGV4T2YoJ01TSUUgNy4wJykgPT0gLTE7CgkJaXNHZWNrbyA9IG5hdmlnYXRv
ci51c2VyQWdlbnQuaW5kZXhPZignR2Vja28nKSAhPSAtMTsKCQlpc1dlYktpdCA9
IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignV2ViS2l0JykgIT0gLTE7CgkJ
aXNXaW4gPSBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ1dpbmRvd3MnKSAh
PSAtMTsKCQlqc2NzcygnYWRkJywgZG9jdW1lbnQuYm9keSwgJ2phdmFzY3JpcHQn
LCAnJyk7CgoJCWFyZ3VtZW50cy5jYWxsZWUuaW5pdGFsSW5pdCA9IHRydWU7Cgl9
CgoJaWYoc2NvcGUpCgl7CgkJdmFyIHByZXZpb3VzU2NvcGUgPSBET01RdWVyeS5w
cm90b3R5cGUuc2NvcGU7CgkJRE9NUXVlcnkucHJvdG90eXBlLnNjb3BlID0gc2Nv
cGU7Cgl9CgoJZm9yKHZhciBpPTA7IGk8ZXZlbnRzLmxlbmd0aDsgaSsrKQoJewoJ
CXRyeQoJCXsKCQkJaWYoZXZlbnRUaW1pbmcpCgkJCXsKCQkJCWZ1bmNuYW1lID0g
ZXZlbnRzW2ldLnRvU3RyaW5nKCkubWF0Y2goZnVuY1BhdHRlcm4pWzFdOwoJCQkJ
dGltaW5nc1tpXSA9IGZ1bmNuYW1lICsgJyA/Pz8nOwoJCQkJdGltZTEgPSBuZXcg
RGF0ZSgpLmdldFRpbWUoKTsKCQkJfQoKCQkJaWYodHlwZW9mIGV2ZW50c1tpXSA9
PSAnZnVuY3Rpb24nKQoJCQkJZXZlbnRzW2ldKCk7CgkJCWVsc2UgaWYodHlwZW9m
IGV2ZW50c1tpXSA9PSAnb2JqZWN0JykKCQkJCWV2ZW50c1tpXVswXS5hcHBseSh3
aW5kb3csIGV2ZW50c1tpXVsxXSk7CgoJCQlpZihldmVudFRpbWluZykKCQkJewoJ
CQkJdGltZTIgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKCQkJCWR1cmF0aW9uID0g
KHRpbWUyIC0gdGltZTEpOwoJCQkJdG90YWwgKz0gZHVyYXRpb247CgoJCQkJZm9y
KGo9KGZ1bmNuYW1lLmxlbmd0aCArIGR1cmF0aW9uLnRvU3RyaW5nKCkubGVuZ3Ro
KTsgajw1MDsgaisrKQoJCQkJCWZ1bmNuYW1lICs9ICcgJzsKCgkJCQl0aW1pbmdz
W2ldID0gZnVuY25hbWUgKyBkdXJhdGlvbiArICcgbXNcbic7CgkJCX0KCQl9CgkJ
Y2F0Y2ggKGUpCgkJewoJCQkvKiB3ZSBkb24ndCBuZWVkIHRvIHBhc3MgdGhlIHNj
b3BlIGFnYWluICovCgkJCWFyZ3VtZW50cy5jYWxsZWUoIGV2ZW50cy5zbGljZShp
ICsgMSkgKTsKCQkJaWYoc2NvcGUpCgkJCXsKCQkJCURPTVF1ZXJ5LnByb3RvdHlw
ZS5zY29wZSA9IHByZXZpb3VzU2NvcGU7CgkJCX0KCQkJdGhyb3cgZTsKCQl9Cgl9
CgoJaWYoc2NvcGUpCgl7CgkJRE9NUXVlcnkucHJvdG90eXBlLnNjb3BlID0gcHJl
dmlvdXNTY29wZTsKCX0KCglpZihldmVudFRpbWluZykKCQlkb2N1bWVudC5ib2R5
LmFwcGVuZENoaWxkKGNyZWF0ZURPTU5vZGUoJ3ByZScsIHt9LCB0aW1pbmdzKSk7
CgovKgl3aW5kb3cuc3RhdHVzID0gJ3hwYXRoOiAnICsgRE9NUXVlcnkuaGFzWFBh
dGggKyAnIC0gdG90YWwgSlMgZXZlbnRzOiAnK3RvdGFsKydtcycgOyAqLwoKfQoK
LyogZm9yIE1vemlsbGEvT3BlcmE5ICovCmlmIChkb2N1bWVudC5hZGRFdmVudExp
c3RlbmVyKQp7Cglkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50
TG9hZGVkIiwgaW5pdCwgZmFsc2UpOwp9CgovKiBmb3IgSW50ZXJuZXQgRXhwbG9y
ZXIgKi8KLypAY2Nfb24gQCovCi8qQGlmIChAX3dpbjMyKQoJZG9jdW1lbnQud3Jp
dGUoIjxzY3JpcHQgaWQ9X19pZV9vbmxvYWQgZGVmZXIgc3JjPS8vOj48XC9zY3Jp
cHQ+Iik7Cgl2YXIgc2NyaXB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIl9f
aWVfb25sb2FkIik7CglzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rp
b24oKQoJewoJCWlmICh0aGlzLnJlYWR5U3RhdGUgIT0gImNvbXBsZXRlIikKCQkJ
cmV0dXJuOwoKCQlpZih0eXBlb2YgaW5pdFJlYWR5U3RhdGVEZXRlY3Rpb25DYWxs
YmFjayAhPSAnZnVuY3Rpb24nIHx8IGluaXRSZWFkeVN0YXRlRGV0ZWN0aW9uQ2Fs
bGJhY2soKSkKCQl7CgkJCWluaXQoKTsKCQkJcmV0dXJuOwoJCX0KCgkJdmFyIF90
aW1lciA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkKCQl7CgkJCWlmKGluaXRSZWFk
eVN0YXRlRGV0ZWN0aW9uQ2FsbGJhY2soKSkKCQkJewoJCQkJaW5pdCgpOyAvLyBj
YWxsIHRoZSBvbmxvYWQgaGFuZGxlcgoJCQl9CgkJfSwgMTApOwoJfTsKLypAZW5k
IEAqLwoKLyogZm9yIFNhZmFyaSAqLwppZiAoL1dlYktpdC9pLnRlc3QobmF2aWdh
dG9yLnVzZXJBZ2VudCkpCnsgLy8gc25pZmYKCXZhciBfdGltZXIgPSBzZXRJbnRl
cnZhbChmdW5jdGlvbigpCgl7CgkJaWYgKC9sb2FkZWR8Y29tcGxldGUvLnRlc3Qo
ZG9jdW1lbnQucmVhZHlTdGF0ZSkpCgkJewoJCQlpbml0KCk7IC8vIGNhbGwgdGhl
IG9ubG9hZCBoYW5kbGVyCgkJfQoJfSwgMTApOwp9OwoKLyogZm9yIG90aGVyIGJy
b3dzZXJzICovCndpbmRvdy5vbmxvYWQgPSBpbml0OwpmdW5jdGlvbiBsaW5rVGl0
bGVJblN0YXR1c2Jhcih0YXJnZXRzKQp7CglhZGRFdmVudFRvVGFyZ2V0cyh0YXJn
ZXRzLCAnbW91c2VvdmVyJywgc2hvd1RpdGxlSW5TdGF0dXNiYXIsICdhJyk7Cglh
ZGRFdmVudFRvVGFyZ2V0cyh0YXJnZXRzLCAnbW91c2VvdXQnLCBjbGVhclN0YXR1
c2JhciwgJ2EnKTsKfTsKCmZ1bmN0aW9uIHNob3dUaXRsZUluU3RhdHVzYmFyKCkK
ewoJaWYodGhpcy50aXRsZS5sZW5ndGggPT0gMCkKCQlyZXR1cm47CgoJaWYodGhp
cy5hY2Nlc3NLZXkubGVuZ3RoID09IDEpCgl7CgkJd2luZG93LnN0YXR1cyA9IHRo
aXMudGl0bGUgKyAnIC0gc25lbHRvZXRzOiBBbHQgKyAnK3RoaXMuYWNjZXNzS2V5
OwoJfQoJZWxzZQoJewoJCXdpbmRvdy5zdGF0dXMgPSB0aGlzLnRpdGxlICsgJyAt
ICcgKyB0aGlzLmhyZWY7Cgl9Cn07CgpmdW5jdGlvbiBjbGVhclN0YXR1c2Jhcigp
CnsKCXdpbmRvdy5zdGF0dXMgPSAnJzsKCXJldHVybiB0cnVlOwp9OwoKdmFyIG1h
eEltYWdlV2lkdGggPSA1OTU7CnZhciBtYXhJbWFnZUhlaWdodCA9IDIwMDA7CnZh
ciBpbWFnZXNUb1NjYWxlID0gW107CmZ1bmN0aW9uIHNjYWxlSW1hZ2VzKHRhcmdl
dHMpCnsKCWltYWdlc1RvU2NhbGUgPSBnZXRUYXJnZXRzKHRhcmdldHMsICdvbCBk
aXYubWVzc2FnZS1jb250ZW50IGltZycpOwoKCWZvcih2YXIgaT0wLCBpbWFnZTso
aW1hZ2U9aW1hZ2VzVG9TY2FsZS5nZXQoaSkpO2krKykKCXsKCQlpbWFnZS5zZXRB
dHRyaWJ1dGUoJ21heHdpZHRoJywgbWF4SW1hZ2VXaWR0aCk7CgkJaW1hZ2Uuc2V0
QXR0cmlidXRlKCdtYXhoZWlnaHQnLCBtYXhJbWFnZUhlaWdodCk7CgoJCWFkZEV2
ZW50KGltYWdlLCAnbG9hZCcsIHNjYWxlSW1hZ2UpOwoJfQoJaW1hZ2VzVG9TY2Fs
ZSA9IFtdOwp9OwoKZnVuY3Rpb24gc2NhbGVJbWFnZSgpCnsKCXZhciBtYXhXaWR0
aCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdtYXh3aWR0aCcpOwoJdmFyIG1heEhlaWdo
dCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdtYXhoZWlnaHQnKTsKCglpZih0aGlzLndp
ZHRoIDw9IG1heFdpZHRoICYmIHRoaXMuaGVpZ2h0IDw9IG1heEhlaWdodCkKCQly
ZXR1cm4ganNjc3MoJ3JlbW92ZScsIHRoaXMsICdkaXNwbGF5LW5vbmUnKTsKCgl2
YXIgc2NhbGVSYXRpbyA9IG1heFdpZHRoIC8gbWF4SGVpZ2h0OwoKCWlmICh0aGlz
LndpZHRoID4gbWF4V2lkdGggfHwgdGhpcy5oZWlnaHQgPiBtYXhIZWlnaHQpCgl7
CgkJdmFyIHJhdGlvID0gdGhpcy53aWR0aCAvIHRoaXMuaGVpZ2h0OwoJCXRoaXMu
b3JpZ2luYWxXaWR0aCA9IHRoaXMud2lkdGg7CgkJdGhpcy5vcmlnaW5hbEhlaWdo
dCA9IHRoaXMuaGVpZ2h0OwoKCQlpZiAocmF0aW8gPiBzY2FsZVJhdGlvKQoJCXsK
CQkJdGhpcy53aWR0aCA9IG1heFdpZHRoOwoJCQl0aGlzLmhlaWdodCA9IG1heFdp
ZHRoIC8gcmF0aW87CgkJfQoJCWVsc2UKCQl7CgkJCXRoaXMuaGVpZ2h0ID0gbWF4
SGVpZ2h0OwoJCQl0aGlzLndpZHRoID0gbWF4SGVpZ2h0ICogcmF0aW87CgkJfQoK
CQlpZiAodGhpcy5wYXJlbnROb2RlLm5vZGVOYW1lICE9ICdBJykKCQl7CgkJCWFk
ZEV2ZW50KHRoaXMsICdjbGljaycsIHBvcHVwSW1hZ2UpOwoJCQlqc2NzcygnYWRk
JywgdGhpcywgJ2VubGFyZ2VhYmxlJyk7CgkJCXRoaXMudGl0bGUgKz0gZ2V0VGV4
dCgnZXh0cmEnLCAnY2xpY2tfdG9fZW5sYXJnZScpOwoJCX0KCX0KCglqc2Nzcygn
cmVtb3ZlJywgdGhpcywgJ2Rpc3BsYXktbm9uZScpOwp9OwoKZnVuY3Rpb24gcG9w
dXBJbWFnZSgpCnsKCXdpbmRvdy5vcGVuKHRoaXMuc3JjLCAnaW1nJywgJ3dpZHRo
PScrKHRoaXMub3JpZ2luYWxXaWR0aCsxNikrJyxoZWlnaHQ9JysodGhpcy5vcmln
aW5hbEhlaWdodCsxNikrJyxsZWZ0PTAsdG9wPTAnKTsKfTsKCmZ1bmN0aW9uIG1h
a2VTbWlsZXlzQ2xpY2thYmxlKHRhcmdldHMpCnsKCWFkZEV2ZW50VG9UYXJnZXRz
KHRhcmdldHMsICdjbGljaycsIF9pbnNlcnRTbWlsZXksICdkaXYjc21pbGV5cyBp
bWcnKTsKfTsKCmZ1bmN0aW9uIF9pbnNlcnRTbWlsZXkoKQp7CglwdXRTdHIoJyAn
ICsgIHRoaXMuYWx0ICsgJyAnKTsKCWhpZGVTbWlsZXlzKCk7Cn07CgpmdW5jdGlv
biBsb2NhbEFuY2hvcnMoKQp7CgkvKiBzdHJpY3QgY2hlY2tpbmcgZm9yIHRoZSBt
b21lbnQsIHNob3VsZCBiZSBldmFsdWF0ZWQgYXQgYSBsYXRlciBwb2ludCAqLwoJ
aWYoIWpzY3NzKCdjaGVjaycsIGRvY3VtZW50LmJvZHksICdsaXN0X21lc3NhZ2Un
KSAmJiAhanNjc3MoJ2NoZWNrJywgZG9jdW1lbnQuYm9keSwgJ2xpc3RfbWVzc2Fn
ZXMnKSkKCQlyZXR1cm47CgoJdmFyIGNvbnRhaW5lciA9IG5ldyBET01RdWVyeSgn
b2wjbWVzc2FnZXMnKS5nZXQoMCk7CglpZighY29udGFpbmVyKQoJCXJldHVybjsK
Cgl2YXIgaXRlbXMgPSBuZXcgRE9NUXVlcnkoJ2FkZHJlc3MucG9zdGVkLWF0IGEs
IGJsb2NrcXVvdGUucXVvdGUtYmxvY2txdW90ZSBhLm1lc3NhZ2VsaW5rJywgY29u
dGFpbmVyKTsKCXZhciBwYXR0ZXJuID0gL2xpc3RfbWVzc2FnZVwvLzsKCWZvcih2
YXIgaSA9IDAsIGl0ZW07IChpdGVtPWl0ZW1zLmdldChpKSk7IGkrKykKCXsKCQlp
ZihwYXR0ZXJuLnRlc3QoaXRlbS5wYXRobmFtZSkpCgkJewoJCQlhZGRFdmVudChp
dGVtLCAnY2xpY2snLCBmdW5jdGlvbihlKSB7IGlmKCFfbG9jYWxBbmNob3JzKHRo
aXMpKSB7IGUucHJldmVudERlZmF1bHQoKTsgfSB9ICk7CgkJfQoJfQp9OwoKZnVu
Y3Rpb24gX2xvY2FsQW5jaG9ycyh4KQp7Cgl2YXIgaWQgPSB4Lmhhc2guc3Vic3Ry
aW5nKDEpLCBhbmNob3JzID0gZG9jdW1lbnQuYW5jaG9yczsKCglmb3IodmFyIGk9
MCwgYW5jaG9yOyAoYW5jaG9yPWFuY2hvcnNbaV0pOyBpKyspCgl7CgkJaWYoYW5j
aG9yLm5hbWUgPT0gaWQpCgkJewoJCQl3aW5kb3cubG9jYXRpb24uaGFzaCA9IGlk
OwoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJfQp9OwoKZnVuY3Rpb24gc2xhc2hkb3RM
aW5rcyh0YXJnZXRzKQp7Cgl2YXIgaXRlbXMgPSBnZXRUYXJnZXRzKHRhcmdldHMs
ICdvbC5tZXNzYWdlcyBhLmxpbmsnKSwgYSA9IGNyZWF0ZURPTU5vZGUoJ2EnLCB7
ImhyZWYiIDogYm9hcmRfc2NyaXB0X3VybH0sIFtdKSwgc3BhbiwgY2xvbmUsIHNo
b3J0bmFtZTsKCWZvcih2YXIgaT0wLCBpdGVtOyAoaXRlbSA9IGl0ZW1zLmdldChp
KSk7IGkrKykKCXsKCQlpZihhLmhvc3RuYW1lICE9IGl0ZW0uaG9zdG5hbWUpCgkJ
ewoJCQlpZihpdGVtLmhyZWYgPT0gaXRlbS50ZXh0IHx8IGl0ZW0uaG9zdG5hbWUg
PT0gaXRlbS50ZXh0KQoJCQkJY29udGludWU7CgoJCQlzaG9ydG5hbWUgPSBob3N0
bmFtZVRvU2hvcnRuYW1lKGl0ZW0uaG9zdG5hbWUpOwoJCQlzcGFuID0gY3JlYXRl
RE9NTm9kZSgnc3BhbicsIHt9LCBbaXRlbS5jbG9uZU5vZGUodHJ1ZSksICcgWycg
KyBzaG9ydG5hbWUgKyAnXSddKTsKCQkJaXRlbS5wYXJlbnROb2RlLnJlcGxhY2VD
aGlsZChzcGFuLCBpdGVtKTsKCQl9Cgl9Cn07Ci8qIHRoZXNlIHJlZ2V4cCdzIGhh
dmUgYmVlbiBjb3BpZWQgZnJvbSBzbGFzaGNvZGUgd2hpY2ggaXMgR1BMICovCi8q
IGZpbGU6IHV0aWxzL2RvbWFpblRhZ2lmeUNvbW1lbnRzICovCmZ1bmN0aW9uIGhv
c3RuYW1lVG9TaG9ydG5hbWUoaG9zdG5hbWUpCnsKCWlmKC9eKFxkezEsM31cLil7
M31cZHsxLDN9JC8udGVzdChob3N0bmFtZSkpCgkJcmV0dXJuIGhvc3RuYW1lOwoK
CXZhciByZXN1bHQ7CgoJZm9yKHZhciBpPTE7IGk8PTM7IGkrKykKCXsKCQlzd2l0
Y2goaSkKCQl7CgkJCWNhc2UgMToKCQkJCXJlc3VsdCA9IGhvc3RuYW1lLm1hdGNo
KC8oW1x3LV0rXC5bYS16XXszLDR9KSQvaSk7CgkJCWJyZWFrOwoJCQljYXNlIDI6
CgkJCQlyZXN1bHQgPSBob3N0bmFtZS5tYXRjaCgvKFtcdy1dK1wuW2Etel17Miw0
fVwuW2Etel17Mn0pJC9pKTsKCQkJYnJlYWs7CgkJCWNhc2UgMzoKCQkJCXJlc3Vs
dCA9IGhvc3RuYW1lLm1hdGNoKC8oW2Etel0rXC5bYS16XXsyfSkkL2kpOwoJCQli
cmVhazsKCQl9CgkJaWYocmVzdWx0KQoJCQlyZXR1cm4gcmVzdWx0WzFdOwoJfQoK
CXZhciBpdGVtcyA9IGhvc3RuYW1lLnNwbGl0KCcuJyk7CglpZihpdGVtcy5sZW5n
dGggPj0gMykKCQlyZXR1cm4gaXRlbXMucmV2ZXJzZSgpLnNsaWNlKDAsMykucmV2
ZXJzZSgpLmpvaW4oJy4nKTsKCglyZXR1cm4gaG9zdG5hbWU7Cn07CgpmdW5jdGlv
biBleHRlcm5hbExpbmtzSW5Qb3B1cCh0YXJnZXRzKQp7Cgl2YXIgaXRlbXMgPSBn
ZXRUYXJnZXRzKHRhcmdldHMsICdvbC5tZXNzYWdlcyBhLmxpbmsnKSwgYSA9IGNy
ZWF0ZURPTU5vZGUoJ2EnLCB7ImhyZWYiIDogYm9hcmRfc2NyaXB0X3VybH0sIFtd
KTsKCglmb3IodmFyIGk9MCwgaXRlbTsgKGl0ZW0gPSBpdGVtcy5nZXQoaSkpOyBp
KyspCgl7CgkJaWYoaXRlbS5ocmVmICYmIGEuaG9zdG5hbWUgIT0gaXRlbS5ob3N0
bmFtZSkKCQl7CgkJCWFkZEV2ZW50KGl0ZW0sICdjbGljaycsIGZ1bmN0aW9uKGUp
IHsgaWYoIV9sb2NhbEFuY2hvcnModGhpcykpIHsgd2luZG93Lm9wZW4odGhpcy5o
cmVmLCAncG9wdXBleHRlcm5hbCcpOyBlLnByZXZlbnREZWZhdWx0KCk7IH0gfSAp
OwoJCX0KCX0KfTsKCmZ1bmN0aW9uIGluZGljYXRlU2VjdXJlTGluayh0YXJnZXRz
KQp7Cgl2YXIgaXRlbXMgPSBnZXRUYXJnZXRzKHRhcmdldHMsICdvbC5tZXNzYWdl
cyBhLmxpbmsnKSwgYSA9IGNyZWF0ZURPTU5vZGUoJ2EnLCB7ImhyZWYiIDogYm9h
cmRfc2NyaXB0X3VybH0sIFtdKTsKCglmb3IodmFyIGk9MCwgaXRlbTsgKGl0ZW0g
PSBpdGVtcy5nZXQoaSkpOyBpKyspCgl7CgkJaWYoYS5ob3N0bmFtZSAhPSBpdGVt
Lmhvc3RuYW1lICYmIGl0ZW0ucHJvdG9jb2wgPT0gJ2h0dHBzOicpCgkJewoJCQlq
c2NzcygnYWRkJywgaXRlbSwgJ3NlY3VyZS1saW5rJyk7CgkJfQoJfQoKfTsKCmZ1
bmN0aW9uIHNlYXJjaFBvcHVwKHRhcmdldHMpCnsKCWFkZEV2ZW50VG9UYXJnZXRz
KHRhcmdldHMsICdjbGljaycsIGZ1bmN0aW9uKCkgeyB0cnkge19zZWFyY2hQb3B1
cCh0aGlzKTt9IGNhdGNoIChlKSB7fSByZXR1cm4gZmFsc2U7fSwgJ2RpdiNuYXZp
Z2F0aW9uIGxpI3NlYXJjaC1saW5rIGEnKTsKCWFkZEV2ZW50VG9UYXJnZXRzKHRh
cmdldHMsICdkYmxjbGljaycsIGZ1bmN0aW9uKCkgeyBkb2N1bWVudC5sb2NhdGlv
bi5ocmVmID0gaXRlbXNbMF0uaHJlZjsgfSAsICdkaXYjbmF2aWdhdGlvbiBsaSNz
ZWFyY2gtbGluayBhJyk7Cn07CgpmdW5jdGlvbiBfc2VhcmNoUG9wdXAoeCkKewoJ
dmFyIGhpZGRlbkVsZW1lbnRzID0gWyBbJ2FjdGlvbicsICdmaW5kJ10sIFsnZGF0
YVtzZWFyY2h0eXBlXScsICdzZWFyY2gnXSBdLCBpbnB1dCwgZmllbGRzZXROb2Rl
cyA9IFtdOwoJZm9yKHZhciBpID0wLCBpdGVtOyAoaXRlbSA9IGhpZGRlbkVsZW1l
bnRzW2ldKTtpKyspCgl7CgkJZmllbGRzZXROb2Rlc1tmaWVsZHNldE5vZGVzLmxl
bmd0aF0gPSBjcmVhdGVET01Ob2RlKCdpbnB1dCcsIHsidHlwZSIgOiAnaGlkZGVu
JywgIm5hbWUiIDogaXRlbVswXSwgInZhbHVlIiA6IGl0ZW1bMV19LCBbXSk7Cgl9
CgoJdmFyIGZvcm0gPSBjcmVhdGVET01Ob2RlKCdmb3JtJywgeyJhY3Rpb24iIDog
Ym9hcmRfc2NyaXB0X3VybH0sCgkJCQlbCgkJCQkJY3JlYXRlRE9NTm9kZSgnZmll
bGRzZXQnLCB7fSwKCQkJCQlbCgkJCQkJCS8qZmllbGRzZXROb2RlcywqLwoJCQkJ
CQljcmVhdGVET01Ob2RlKCdpbnB1dCcsIHsidHlwZSIgOiAndGV4dCcsICJuYW1l
IiA6ICdkYXRhW3FdJywic2l6ZSIgOiA0MCwgImlkIiA6ICdzZWFyY2gtbGluay1p
bnB1dCcsICJkZWZhdWx0VmFsdWUiIDogZ2V0VGV4dCgnZXh0cmEnLCAnc2VhcmNo
UG9wdXAnKSwgImV2ZW50IiA6IFsnZm9jdXMnLCBlbXB0eV19LCBbXSkKCQkJCQld
KSwKCgkJCQldKTsKCgl4LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoZm9ybSk7CgoJ
bmV3IERPTVF1ZXJ5KCdpbnB1dCNzZWFyY2gtbGluay1pbnB1dCcpLmdldCgwKS5m
b2N1cygpOwoKCXJldHVybiBmYWxzZTsKfTsKCmZ1bmN0aW9uIGNsb3NlQW5kU3Vi
bWl0KHRhcmdldHMpCnsKCXZhciBpdGVtcyA9IGdldFRhcmdldHModGFyZ2V0cywg
J2RpdiN0b3BpYy1hZG1pbiBpbnB1dCNzdGF0dXMnKTsKCWlmKGl0ZW1zLmxlbmd0
aCA9PSAwKQoJCXJldHVybjsKCglpZihpdGVtcy5nZXQoMCkubmV4dFNpYmxpbmcu
b3B0aW9uc1tpdGVtcy5nZXQoMCkubmV4dFNpYmxpbmcuc2VsZWN0ZWRJbmRleF0u
dmFsdWUgIT0gJ0Nsb3NlZCcpCgl7CgkJdmFyIGlucHV0ID0gY3JlYXRlRE9NTm9k
ZSgnaW5wdXQnLCB7InR5cGUiIDonc3VibWl0JywgImFjY2Vzc0tleSIgOidjJywg
InZhbHVlIiA6Z2V0VGV4dCgnZXh0cmEnLCdjbG9zZV9hbmRfc3VibWl0JyksICJl
dmVudCIgOlsnY2xpY2snLCBmdW5jdGlvbigpIHsgX2Nsb3NlQW5kU3VibWl0KHRo
aXMuZm9ybSk7IH1dIH0sIFtdKTsKCQlpdGVtcy5nZXQoMCkucGFyZW50Tm9kZS5h
cHBlbmRDaGlsZChpbnB1dCk7Cgl9Cn07CgpmdW5jdGlvbiBfY2xvc2VBbmRTdWJt
aXQoZm9ybSkKewoJdmFyIGl0ZW1zID0gbmV3IERPTVF1ZXJ5KCdpbnB1dCNzdGF0
dXMgKyBzZWxlY3QnLCBmb3JtKTsKCWlmKGl0ZW1zLmxlbmd0aCA9PSAwKQoJCXJl
dHVybjsKCgl2YXIgc2VsZWN0ID0gaXRlbXMuZ2V0KDApLCBvcHRzID0gc2VsZWN0
Lm9wdGlvbnM7Cglmb3IodmFyIGk9MCwgb3B0aW9uOyAob3B0aW9uPW9wdHNbaV0p
OyBpKyspCgl7CgkJaWYoCW9wdGlvbi52YWx1ZSA9PSAnQ2xvc2VkJykKCQl7CgkJ
CXNlbGVjdC5zZWxlY3RlZEluZGV4ID0gaTsKCQkJc2VsZWN0LnByZXZpb3VzU2li
bGluZy5jaGVja2VkID0gdHJ1ZTsKCQkJYnJlYWs7CgkJfQoJfQp9OwoKZnVuY3Rp
b24gaW5kaWNhdGVBY2Nlc3NrZXkodGFyZ2V0cykKewoJdmFyIGl0ZW1zID0gZ2V0
VGFyZ2V0cyh0YXJnZXRzLCAnaW5wdXRbYWNjZXNza2V5XScpOwoKCXZhciByZXBs
YWNlbWVudCwgaW5kaWNhdG9yQ2hhclBvcywgdGV4dE9uQnV0dG9uOwoJZm9yKHZh
ciBpPTAsIGl0ZW07IChpdGVtPWl0ZW1zLmdldChpKSk7IGkrKykKCXsKCQlzd2l0
Y2goaXRlbS50eXBlKQoJCXsKCQkJY2FzZSAnc3VibWl0JzoKCQkJY2FzZSAncmVz
ZXQnOgoJCQkJdGV4dE9uQnV0dG9uID0gaXRlbS52YWx1ZTsKCQkJCWluZGljYXRv
ckNoYXJQb3MgPSB0ZXh0T25CdXR0b24udG9Mb3dlckNhc2UoKS5pbmRleE9mKGl0
ZW0uYWNjZXNzS2V5KTsKCgkJCQlpZihpbmRpY2F0b3JDaGFyUG9zID49IDAgKQoJ
CQkJewoJCQkJCXJlcGxhY2VtZW50ID0JY3JlYXRlRE9NTm9kZSgnYnV0dG9uJywg
eyJhY2Nlc3NLZXkiIDogaXRlbS5hY2Nlc3NLZXksICJuYW1lIiA6IGl0ZW0ubmFt
ZSwgImlkIiA6IGl0ZW0uaWQsICJ0eXBlIiA6IGl0ZW0udHlwZSwgImNsYXNzIiA6
IGl0ZW0uY2xhc3NOYW1lfSwKCQkJCQkJCQkJWwoJCQkJCQkJCQkJdGV4dE9uQnV0
dG9uLnN1YnN0cmluZygwLCBpbmRpY2F0b3JDaGFyUG9zKSwKCQkJCQkJCQkJCWNy
ZWF0ZURPTU5vZGUoJ3NwYW4nLCB7ImNsYXNzIiA6ICdhY2Nlc3NrZXknfSwgW3Rl
eHRPbkJ1dHRvbi5jaGFyQXQoaW5kaWNhdG9yQ2hhclBvcyldKSwKCQkJCQkJCQkJ
CXRleHRPbkJ1dHRvbi5zdWJzdHJpbmcoaW5kaWNhdG9yQ2hhclBvcysxKQoJCQkJ
CQkJCQldKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlyZXBsYWNlbWVudCA9
CWNyZWF0ZURPTU5vZGUoJ2J1dHRvbicsIHsiYWNjZXNzS2V5IiA6IGl0ZW0uYWNj
ZXNzS2V5LCAibmFtZSIgOiBpdGVtLm5hbWUsICJpZCIgOiBpdGVtLmlkLCAidHlw
ZSIgOiBpdGVtLnR5cGUsICJjbGFzcyIgOiBpdGVtLmNsYXNzTmFtZX0sCgkJCQkJ
CQkJCVsKCQkJCQkJCQkJCXRleHRPbkJ1dHRvbiwKCQkJCQkJCQkJCScgJywKCQkJ
CQkJCQkJCWNyZWF0ZURPTU5vZGUoJ3NwYW4nLCB7ImNsYXNzIiA6ICdhY2Nlc3Nr
ZXknfSwgW2dldFRleHQoJ2V4dHJhJywgJ2FjY2Vzc2tleV9pbmRpY2F0b3InLCBp
dGVtLmFjY2Vzc0tleSldKQoJCQkJCQkJCQldKTsKCQkJCX0KCgkJCQkvKiBpZSBt
b2V0IGVjaHQgZG9vZCBvZnpvICovCgkJCQkvKiBpZSBwYWt0IGRlICd0eXBlJyBh
dHRyaWJ1dGUgbmlldCBtZWUgKi8KCQkJCWlmKGlzSUUpCgkJCQl7CgkJCQkJaWYo
aXRlbS50eXBlID09ICdzdWJtaXQnKQoJCQkJCQlhZGRFdmVudChyZXBsYWNlbWVu
dCwgJ2NsaWNrJywgZnVuY3Rpb24oKSB7IHRoaXMuZm9ybS5zdWJtaXQoKTsgfSAp
OwoJCQkJCWVsc2UgaWYoaXRlbS50eXBlID09ICdyZXNldCcpCgkJCQkJCWFkZEV2
ZW50KHJlcGxhY2VtZW50LCAnY2xpY2snLCBmdW5jdGlvbigpIHsgdGhpcy5mb3Jt
LnJlc2V0KCk7IH0gKTsKCQkJCX0KCgkJCQlpdGVtLnBhcmVudE5vZGUucmVwbGFj
ZUNoaWxkKHJlcGxhY2VtZW50LCBpdGVtKTsKCQkJCWJyZWFrOwoJCX0KCX0KCgly
ZXR1cm4gdHJ1ZTsKfTsKCmZ1bmN0aW9uIGFsbFBhZ2VzTmF2aWdhdGlvbih0YXJn
ZXRzKQp7CglhZGRFdmVudFRvVGFyZ2V0cyh0YXJnZXRzLCAnY2xpY2snLCBfYWxs
UGFnZXNOYXZpZ2F0aW9uLCAnZGwudG9waWMtbmF2aWdhdGlvbiBzcGFuLmN1dG9m
ZicpOwp9OwoKZnVuY3Rpb24gX2FsbFBhZ2VzTmF2aWdhdGlvbigpCnsKCXZhciBk
bCA9IGdldFNpYmxpbmdOb2RlKHRoaXMsICd1cCcsICdkbCcpOwoKCXZhciBsaW5r
ID0gbmV3IERPTVF1ZXJ5KCdkZCBhJywgZGwpOwoKCWlmKGxpbmsubGVuZ3RoID09
IDApCgkJcmV0dXJuOwoJZWxzZQoJCWxpbmsgPSBsaW5rLmdldCgwKTsKCgkvKiBu
dW1iZXIgaXMgc3RvcmVkIGluIGRsJ3MgcGFnZXMtLi4uICovCgl2YXIgbWF4UGFn
ZSA9IGRsLmNsYXNzTmFtZS5tYXRjaCgvcGFnZXNcLShbMC05XSspLylbMV07CgoJ
dmFyIHBhZ2VOdW1iZXIgPSBwcm9tcHQoZ2V0VGV4dCgnZXh0cmEnLCdlbnRlcl9w
YWdlX251bWJlcicsIG1heFBhZ2UpLCAnMScpOwoJaWYoIXBhZ2VOdW1iZXIpCgkJ
cmV0dXJuOwoKCXBhZ2VOdW1iZXIgPSBwYXJzZUludChwYWdlTnVtYmVyKTsKCglp
Zihpc05hTihwYWdlTnVtYmVyKSB8fCBwYWdlTnVtYmVyIDwgMSB8fCBwYWdlTnVt
YmVyID4gbWF4UGFnZSkKCXsKCQlhbGVydChnZXRUZXh0KCdleHRyYScsICdwYWdl
X251bWJlcl9pbmNvcnJlY3QnKSk7CgkJcmV0dXJuOwoJfQoKCXZhciBtYXRjaGVz
ID0gbGluay5ocmVmLm1hdGNoKC9eKFteMC05XStcL1swLTldKykoXC9bMC05XSsp
PyguKikkLyk7Cgl2YXIgX2xpbmsgPSBtYXRjaGVzWzFdICsgJy8nICsgcGFnZU51
bWJlciArIG1hdGNoZXNbM107CgoJZG9jdW1lbnQubG9jYXRpb24uaHJlZiA9IF9s
aW5rOwp9OwoKZnVuY3Rpb24gaGlnaGxpZ2h0UmVmZXJyZXJRdWVyeSgpCnsKCXZh
ciBxID0gJycsIGl0ZW0gPSBudWxsLCBlbCA9IFtdOwoJdmFyIHJlZiA9IGRvY3Vt
ZW50LnJlZmVycmVyOwoJaWYocmVmICE9ICcnKQoJewoJCXJlZiA9IGNyZWF0ZURP
TU5vZGUoJ2EnLCB7J2hyZWYnIDogcmVmfSwgW10pLnNlYXJjaC5zdWJzdHIoMSku
c3BsaXQoJyYnKTsKCQkvKiByZWYgbm93IGNvbnRhaW5zIGEgbGlzdCBvZiBhPWIs
IHg9eSwgLi4uIHNldHMgKi8KCQlmb3IodmFyIGk9MDsgKGl0ZW0gPSByZWZbaV0p
OyBpKyspCgkJewoJCQllbCA9IGl0ZW0uc3BsaXQoJz0nKTsKCQkJaWYoWydxJywg
J3AnLCAncXVlcnknXS5pbmRleE9mKGVsWzBdKSA+IC0xKQoJCQl7CgkJCQlxID0g
ZWxbMV07CgkJCQlicmVhazsKCQkJfQoJCX0KCgkJaWYocSA9PSAnJykKCQkJcmV0
dXJuOwoKCQkvKiB0bnggdG8gaHR0cDovL3N2bi5mdWNvZGVyLmNvbS9mdWNvZGVy
L3NlLWhpbGl0ZS9zZV9oaWxpdGVfc3JjLmpzICovCgkJcSA9IGRlY29kZVVSSUNv
bXBvbmVudChxKTsKCQlxID0gcS5yZXBsYWNlKC9cJ3wiL2csICcnKTsKCQlxID0g
cS5zcGxpdCgvW1xzLFwrXC5dKy8pOwoKCQloaWdobGlnaHRTdHJpbmdzKGRvY3Vt
ZW50LmJvZHksIHEgKTsKCX0KfTsKCmZ1bmN0aW9uIGhpZ2hsaWdodFN0cmluZ3Mo
ZWwsIHN0cnMpCnsKCXZhciByZWdleHAsIG1ldGNoLCB3b3JkcywgcmVwbGFjZW1l
bnQ7Cglmb3IodmFyIGk9MCwgaXRlbTsgKGl0ZW0gPSBlbC5jaGlsZE5vZGVzW2ld
KTsgaSsrKQoJewoJCWlmKGl0ZW0ubm9kZVR5cGUgPT0gMykKCQl7CgkJCXJlZ2V4
cCA9IG5ldyBSZWdFeHAoJ1xcYignK3N0cnMuam9pbignfCcpKycpXFxiJywgJ2ln
Jyk7CgkJCWlmKHdvcmRzID0gaXRlbS5ub2RlVmFsdWUuc3BsaXQoIHJlZ2V4cCAp
KQoJCQl7CgkJCQkvKiBub3cgaGlnaGxpZ2h0IHRoZSBpbmRpdmlkdWFsIHdvcmRz
ICovCgkJCQlyZXBsYWNlbWVudCA9IFtdOwoJCQkJZm9yKHZhciBqPTAsIHdvcmQ7
ICh3b3JkID0gd29yZHNbal0pOyBqKyspCgkJCQl7CgkJCQkJcmVwbGFjZW1lbnQu
cHVzaCggc3Rycy5pbmRleE9mKHdvcmQpID4gLTEgPyBjcmVhdGVET01Ob2RlKCdz
cGFuJywgeydjbGFzcycgOiAnaGlnaGxpZ2h0MSd9LCBbd29yZF0pIDogd29yZCAp
OwoJCQkJfQoKCQkJCWl0ZW0ucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoY3JlYXRl
RE9NTm9kZSgnc3BhbicsIHsnY2xhc3MnIDogJ2hpZ2hsaWdodGluZyd9LCByZXBs
YWNlbWVudCksIGl0ZW0pOwoJCQl9CgkJfQoJCWVsc2UgaWYoaXRlbS5ub2RlVHlw
ZSA9PSAxKQoJCXsKCQkJaGlnaGxpZ2h0U3RyaW5ncyhpdGVtLCBzdHJzKTsKCQl9
Cgl9Cn07CgpmdW5jdGlvbiByZXNvbHZlSVAySG9zdG5hbWUoKQp7Cgl2YXIgaXRl
bXMgPSBuZXcgRE9NUXVlcnkoJ2xpLm1lc3NhZ2UtaXAgYScpOwoKCWZvcih2YXIg
aT0wLCBpdGVtOyAoaXRlbT1pdGVtcy5nZXQoaSkpOyBpKyspCgl7CgkJYWRkRXZl
bnQoaXRlbSwgJ21vdXNlb3ZlcicsIF9yZXNvbHZlSVAySG9zdG5hbWUpOwoJCWFk
ZEV2ZW50KGl0ZW0sICdtb3VzZW91dCcsIF9yZXNvbHZlSVAySG9zdG5hbWUpOwoJ
fQp9OwoKdmFyIF9yZXNvbHZlSVAySG9zdG5hbWVYSFI7CmZ1bmN0aW9uIF9yZXNv
bHZlSVAySG9zdG5hbWUoZXYpCnsKCXZhciB0YXJnZXQgPSB0aGlzOwoKCXN3aXRj
aChldi50eXBlKQoJewoJCWNhc2UgJ21vdXNlb3Zlcic6CgkJCV9yZXNvbHZlSVAy
SG9zdG5hbWVYSFIgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbigpCgkJCQl7CgkJCQkJ
dmFyIGNhbGxiYWNrID0gZnVuY3Rpb24oKQoJCQkJCXsKCQkJCQkJaWYgKHR5cGVv
ZiByZXEgIT0gJ3VuZGVmaW5lZCcgJiYgcmVxICE9IG51bGwgJiYgcmVxLnJlYWR5
U3RhdGUgPT0gNCkKCQkJCQkJewoJCQkJCQkJdmFyIHJlc3VsdCA9IHJlcS5yZXNw
b25zZVRleHQubWF0Y2goLzxkZCBjbGFzcz0ibG9va3VwX3VzZXIiPiguKyk8XC9k
ZD4vKTsKCQkJCQkJCWFsZXJ0KHJlc3VsdFsxXSk7CgkJCQkJCX0KCQkJCQl9OwoJ
CQkJCXZhciByZXEgPSBodHRwcmVxX3N0cmluZygnJywgY2FsbGJhY2ssIHRhcmdl
dC5ocmVmLCBmYWxzZSk7CgkJCQl9LCAyNTApOwoJCWJyZWFrOwoJCWNhc2UgJ21v
dXNlb3V0JzoKCQkJY2xlYXJUaW1lb3V0KF9yZXNvbHZlSVAySG9zdG5hbWVYSFIp
OwoJCWJyZWFrOwoJfQp9OwoKZnVuY3Rpb24gYXV0b2NvbXBsZXRlKHRhcmdldHMp
CnsKCXZhciBpdGVtcyA9IGdldFRhcmdldHModGFyZ2V0cywgJ2lucHV0W3N1Z2dl
c3Rpb25zXScpOwoKCWZvcih2YXIgaT0wLCBpdGVtOyAoaXRlbT1pdGVtcy5nZXQo
aSkpO2krKykKCXsKCQlpZihpdGVtLmdldEF0dHJpYnV0ZSgncmVhZG9ubHknKSkK
CQkJYWRkRXZlbnQoaXRlbSwgJ2ZvY3VzJywgYXV0b2NvbXBsZXRlU3VnZ2VzdCk7
CgkJZWxzZQoJCQlhZGRFdmVudChpdGVtLCAna2V5dXAnLCBhdXRvY29tcGxldGVT
dWdnZXN0KTsKCgkJYWRkRXZlbnQoaXRlbSwgJ2tleWRvd24nLCBkb250U3VibWl0
KTsKCQlhZGRFdmVudChpdGVtLCAnYmx1cicsIGhpZGVBdXRvY29tcGxldGVTdWdn
ZXN0KTsKCQlpdGVtLnNldEF0dHJpYnV0ZSgnYXV0b2NvbXBsZXRlJywgJ29mZicp
OwoJfQp9OwoKZnVuY3Rpb24gZG9udFN1Ym1pdChlKQp7Cgl2YXIgZSA9IGUgfHwg
Zml4RXZlbnQod2luZG93LmV2ZW50KTsKCWlmKGUua2V5Q29kZSA9PSAxMyAmJiB0
aGlzLnN1Z2dlc3RpbmcpCgl7CgkJZS5wcmV2ZW50RGVmYXVsdCgpOwoJfQp9OwoK
ZnVuY3Rpb24gaGlkZUF1dG9jb21wbGV0ZVN1Z2dlc3QoKQp7Cgl2YXIgbGlzdCA9
IG5ldyBET01RdWVyeSgnZGl2LmF1dG9jb21wbGV0ZScsIGRvY3VtZW50LmJvZHkp
LmdldCgwKTsKCWlmIChsaXN0KQoJewoJCWxpc3Qubm9Gb2N1cyA9IHRydWU7CgkJ
aWYgKGxpc3Qubm9Nb3VzZSkKCQkJbGlzdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxk
KGxpc3QpOwoJfQp9OwoKZnVuY3Rpb24gYXV0b2NvbXBsZXRlU3VnZ2VzdChlKQp7
Cgl2YXIgZSA9IGUgfHwgZml4RXZlbnQod2luZG93LmV2ZW50KSwgbGlfaXRlbSwg
bGlzdCA9IG5ldyBET01RdWVyeSgnZGl2LmF1dG9jb21wbGV0ZScsIGRvY3VtZW50
LmJvZHkpLmdldCgwKTsKCglzd2l0Y2goZS5rZXlDb2RlKQoJewoJCWNhc2UgMjc6
IC8qIGVzY2FwZSAqLwoJCWNhc2UgODogIC8qIGJhY2tzcGFjZSAqLwoJCWNhc2Ug
NDY6IC8qIGRlbGV0ZSAqLwoJCWNhc2UgMTY6IC8qIHNoaWZ0ICovCgkJY2FzZSAz
NjogLyogaG9tZSAqLwoJCWNhc2UgMzU6IC8qIGVuZCAqLwoJCQlpZiAoIWxpc3Qp
CgkJCQlyZXR1cm47CgoJCQlsaXN0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobGlz
dCk7CgkJCXRoaXMuc3VnZ2VzdGluZyA9IGZhbHNlOwoJCQlyZXR1cm47CgkJYnJl
YWs7CgoJCWNhc2UgNDA6IC8qIGRvd24gKi8KCQljYXNlIDM4OiAvKiB1cCAqLwoJ
CQlpZiAoIWxpc3QpCgkJCQlyZXR1cm47CgoJCQl2YXIgaXRlbXMgPSBuZXcgRE9N
UXVlcnkoJ2xpJywgbGlzdCk7CgkJCWZvciAodmFyIGk9MCwgaXRlbTsgKGl0ZW09
aXRlbXMuZ2V0KGkpKTtpKyspCgkJCXsKCQkJCWlmKCFqc2NzcygnY2hlY2snLCBp
dGVtLCAnc2VsZWN0ZWQnKSkKCQkJCQljb250aW51ZTsKCgkJCQl2YXIgaiA9IGk7
CgkJCQlpZihlLmtleUNvZGUgPT0gMzgpIC8qIHByZXZpb3VzICovCgkJCQkJai0t
OwoJCQkJZWxzZQkJCQkvKiBuZXh0ICovCgkJCQkJaisrOwoKCQkJCXZhciBuZXdT
ZWxlY3Rpb24gPSBpdGVtcy5nZXQoaik7CgkJCQlpZihuZXdTZWxlY3Rpb24pCgkJ
CQl7CgkJCQkJanNjc3MoJ3JlbW92ZScsIGl0ZW0sICdzZWxlY3RlZCcsICcnKTsK
CQkJCQlqc2NzcygnYWRkJywgbmV3U2VsZWN0aW9uLCAnc2VsZWN0ZWQnKTsKCiAJ
CQkJCXZhciBjb3JyID0gbmV3U2VsZWN0aW9uLm9mZnNldFRvcCArIG5ld1NlbGVj
dGlvbi5vZmZzZXRIZWlnaHQgLSBsaXN0LnNjcm9sbFRvcCAtIGxpc3Qub2Zmc2V0
SGVpZ2h0OwoJCQkJCWlmIChjb3JyPjApCgkJCQkJCWxpc3Quc2Nyb2xsVG9wICs9
IGNvcnI7CgkJCQkJY29yciA9IGxpc3Quc2Nyb2xsVG9wIC0gbmV3U2VsZWN0aW9u
Lm9mZnNldFRvcDsKIAkJCQkJaWYgKGNvcnI+MCkKIAkJCQkJCWxpc3Quc2Nyb2xs
VG9wIC09IGNvcnI7CgkJCQl9CgkJCQlicmVhazsKCQkJfQoJCQlyZXR1cm47CgkJ
YnJlYWs7CgoJCWNhc2UgMTM6IC8qIGVudGVyICovCgkJCWlmICghbGlzdCkKCQkJ
CXJldHVybjsKCgkJCXZhciBjdXJyZW50U2VsZWN0aW9uID0gbmV3IERPTVF1ZXJ5
KCdsaS5zZWxlY3RlZCcsIGxpc3QpLmdldCgwKTsKCgkJCWlmKCFjdXJyZW50U2Vs
ZWN0aW9uKQoJCQkJcmV0dXJuOwoKCQkJaWYgKGRvY3VtZW50LmNyZWF0ZUV2ZW50
KQoJCQl7CgkJCQl2YXIgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ01vdXNl
RXZlbnRzJyk7CgkJCQlldnQuaW5pdEV2ZW50KCdjbGljaycsIHRydWUsIHRydWUp
OwoJCQkJY3VycmVudFNlbGVjdGlvbi5kaXNwYXRjaEV2ZW50KGV2dCk7CgkJCX0K
CQkJZWxzZSBpZihkb2N1bWVudC5jcmVhdGVFdmVudE9iamVjdCkKCQkJewoJCQkJ
dmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50T2JqZWN0KCk7CgkJCQljdXJy
ZW50U2VsZWN0aW9uLmZpcmVFdmVudCgnb25jbGljaycsIGV2dCk7CgkJCX0KCgkJ
CXJldHVybjsKCQlicmVhazsKCX0KCgl2YXIgY2hvaWNlcyA9IHRoaXMuZ2V0QXR0
cmlidXRlKCdzdWdnZXN0aW9ucycpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJyku
dG9Mb3dlckNhc2UoKS5zcGxpdCgvXHMrLyk7CgoJaWYgKHRoaXMuZ2V0QXR0cmli
dXRlKCdyZWFkb25seScpIHx8ICF0aGlzLnZhbHVlLnNwbGl0KC9ccysvKS5wb3Ao
KSkKCQlzdWdnZXN0aW9ucyA9IGNob2ljZXM7CgllbHNlCgl7CgkJdmFyIHN1Z2dl
c3Rpb25zID0gW107CgkJdmFyIGxhc3RfdmFsdWUgPSB0aGlzLnZhbHVlLnNwbGl0
KC9ccysvKS5wb3AoKTsKCgkJZm9yKHZhciBpPTA7IGk8Y2hvaWNlcy5sZW5ndGg7
aSsrKQoJCQlpZiAoY2hvaWNlc1tpXS50b0xvd2VyQ2FzZSgpLmluZGV4T2YobGFz
dF92YWx1ZS50b0xvd2VyQ2FzZSgpKSA9PSAwKQoJCQkJc3VnZ2VzdGlvbnMucHVz
aChjaG9pY2VzW2ldKTsKCX0KCglhdXRvY29tcGxldGVTaG93TGlzdChzdWdnZXN0
aW9ucywgdGhpcyk7Cn0KCmZ1bmN0aW9uIGF1dG9jb21wbGV0ZVNob3dMaXN0KGNo
b2ljZXMsIGlucHV0KQp7Cgl2YXIgbGlzdCA9IG5ldyBET01RdWVyeSgnZGl2LmF1
dG9jb21wbGV0ZScsIGRvY3VtZW50LmJvZHkpLmdldCgwKSwgc3VnZ2VzdGlvbnMg
PSBbXSwgY29tcGxldGVkX2lubGluZSA9IGZhbHNlOwoJdmFyIHZhbHVlcyA9IGlu
cHV0LnZhbHVlLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJykuc3BsaXQoL1xzKy8p
OwoJdmFyIGxhc3RfdmFsdWUgPSBpbnB1dC52YWx1ZS5zcGxpdCgvXHMrLykucG9w
KCk7IC8qIHdoZW4gdGhlIHVzZXIgaXNuJ3QgdHlwaW5nOyB3ZSBkb24ndCB3YW50
IHRvIGNvbXBsZXRlIHRoZSBsYXN0IGtleXdvcmQgKi8KCgkvLyBQdXQgc2VsZWN0
ZWQgdmFsdWVzIG9uIHRvcAoJaWYgKGlucHV0LmdldEF0dHJpYnV0ZSgncmVhZG9u
bHknKSB8fCAhbGFzdF92YWx1ZSkKCQljaG9pY2VzID0gdmFsdWVzLmNvbmNhdChj
aG9pY2VzKS5nZXRVbmlxdWUoKTsKCglmb3IodmFyIGk9MDsgaTxjaG9pY2VzLmxl
bmd0aDtpKyspCgl7CgkJaWYgKCFjb21wbGV0ZWRfaW5saW5lICYmIGxhc3RfdmFs
dWUgJiYgIWlucHV0LmdldEF0dHJpYnV0ZSgncmVhZG9ubHknKSAmJiAhaXNJRSkK
CQl7CgkJCXZhciBpbnB1dF92YWx1ZV9sZW5ndGggPSBpbnB1dC52YWx1ZS5sZW5n
dGg7CgkJCWlucHV0LnZhbHVlICs9IGNob2ljZXNbaV0uc3Vic3RyaW5nKGxhc3Rf
dmFsdWUubGVuZ3RoKTsKCQkJaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UoaW5wdXRf
dmFsdWVfbGVuZ3RoLCBpbnB1dC52YWx1ZS5sZW5ndGgpOwoJCQljb21wbGV0ZWRf
aW5saW5lID0gdHJ1ZTsKCQl9CgoJCWxpX2l0ZW0gPQoJCQljcmVhdGVET01Ob2Rl
KAoJCQkJJ2xpJywKCQkJCXsKCQkJCQknY2xhc3MnIDogKHN1Z2dlc3Rpb25zLmxl
bmd0aCA9PSAwID8gJ3NlbGVjdGVkJyA6ICcnKSArICh2YWx1ZXMuaW5kZXhPZihj
aG9pY2VzW2ldKSA+PSAwID8gJyBwaWNrZWQnIDogJycpLAoJCQkJCSdrZXl3b3Jk
Jwk6IGNob2ljZXNbaV0sCgkJCQkJJ2V2ZW50JyA6IFsnY2xpY2snLCBmdW5jdGlv
bigpCgkJCQkJewoJCQkJCQlmb3IodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0
aDsgaSsrKQoJCQkJCQl7CgkJCQkJCQlpZih2YWx1ZXNbaV0udG9Mb3dlckNhc2Uo
KSA9PSB0aGlzLmdldEF0dHJpYnV0ZSgna2V5d29yZCcpLnRvTG93ZXJDYXNlKCkp
CgkJCQkJCQl7CgkJCQkJCQkJdmFsdWVzLnNwbGljZShpLDEpOwoJCQkJCQkJCXZh
ciByZW1vdmVkID0gdHJ1ZTsKCQkJCQkJCQlicmVhazsKCQkJCQkJCX0KCQkJCQkJ
fQoKCQkJCQkJaWYgKGNvbXBsZXRlZF9pbmxpbmUpCgkJCQkJCQl2YWx1ZXMucG9w
KCk7CgoJCQkJCQlrZXl3b3JkID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2tleXdvcmQn
KS50b0xvd2VyQ2FzZSgpCgkJCQkJCWlmKCFyZW1vdmVkKQoJCQkJCQkJdmFsdWVz
LnB1c2goIGtleXdvcmQgKTsKCgkJCQkJCWlmICghaW5wdXQudmFsdWUubWF0Y2go
L2tleXdvcmQkLykpCgkJCQkJCQlpbnB1dC52YWx1ZSA9IHZhbHVlcy5qb2luKCcg
JykucmVwbGFjZSgvXlxzK3xccyskL2csICcnKSArICcgJzsKCQkJCQl9XQoJCQkJ
fSwKCQkJCVtjaG9pY2VzW2ldXQoJCQkpOwoKCQlhZGRFdmVudCgKCQkJbGlfaXRl
bSwKCQkJJ21vdXNlb3ZlcicsCgkJCWZ1bmN0aW9uICgpCgkJCXsKCQkJCWpzY3Nz
KCdyZW1vdmUnLCBuZXcgRE9NUXVlcnkoJ2xpLnNlbGVjdGVkJywgdGhpcy5wYXJl
bnROb2RlKS5nZXQoMCksICdzZWxlY3RlZCcsICcnKTsKCQkJCWpzY3NzKCdhZGQn
LCB0aGlzLCAnc2VsZWN0ZWQnKTsKCQkJfQoJCSk7CgoJCXN1Z2dlc3Rpb25zLnB1
c2gobGlfaXRlbSk7Cgl9CgoJaWYobGlzdCkKCQlsaXN0LnBhcmVudE5vZGUucmVt
b3ZlQ2hpbGQobGlzdCk7CglpbnB1dC5zdWdnZXN0aW5nID0gZmFsc2U7CgoJaWYo
c3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkKCXsKCQl2YXIgYXV0b2NvbXBsZXRlTGlz
dCA9IGNyZWF0ZURPTU5vZGUoJ2RpdicsIHsnY2xhc3MnIDogJ2F1dG9jb21wbGV0
ZSd9LCBbY3JlYXRlRE9NTm9kZSgndWwnLCB7fSwgc3VnZ2VzdGlvbnMpXSApOwoJ
CWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYXV0b2NvbXBsZXRlTGlzdCk7CgkJ
dmFyIHBvcyA9IGZpbmRQb3MoaW5wdXQpOwoJCWlmIChpc0lFKQoJCQlhdXRvY29t
cGxldGVMaXN0LnN0eWxlLmxlZnQgPSAocG9zLnggLSBkb2N1bWVudC5ib2R5Lm9m
ZnNldExlZnQpICsncHgnOwoJCWVsc2UKCQkJYXV0b2NvbXBsZXRlTGlzdC5zdHls
ZS5sZWZ0ID0gKHBvcy54ICsgNikgKydweCc7CgoJCWF1dG9jb21wbGV0ZUxpc3Qu
c3R5bGUudG9wID0gKHBvcy55ICsgaW5wdXQub2Zmc2V0SGVpZ2h0ICsgNCkgKydw
eCc7CgoJCWFkZEV2ZW50KGF1dG9jb21wbGV0ZUxpc3QsICdtb3VzZW92ZXInLCBh
dXRvY29tcGxldGVMaXN0TW91c2VPdmVyKTsKCQlhZGRFdmVudChhdXRvY29tcGxl
dGVMaXN0LCAnbW91c2VvdXQnLCBhdXRvY29tcGxldGVMaXN0TW91c2VPdXQpOwoK
CQlhdXRvY29tcGxldGVMaXN0Lm5vTW91c2UgPSB0cnVlOwoKCQlpbnB1dC5zdWdn
ZXN0aW5nID0gdHJ1ZTsKCX0KfTsKCmZ1bmN0aW9uIGF1dG9jb21wbGV0ZUxpc3RN
b3VzZU92ZXIoKQp7Cgl0aGlzLm5vTW91c2UgPSBmYWxzZTsKfTsKCmZ1bmN0aW9u
IGF1dG9jb21wbGV0ZUxpc3RNb3VzZU91dCgpCnsKCXRoaXMubm9Nb3VzZSA9IHRy
dWU7CglpZiAodGhpcy5ub0ZvY3VzKQoJCXRoaXMucGFyZW50Tm9kZS5yZW1vdmVD
aGlsZCh0aGlzKTsKfTsKCmZ1bmN0aW9uIGZpbmRQb3Mob2JqKQp7Cgl2YXIgY3Vy
bGVmdCA9IGN1cnRvcCA9IDA7CglpZiAob2JqLm9mZnNldFBhcmVudCkKCXsKCQlj
dXJsZWZ0ID0gb2JqLm9mZnNldExlZnQ7CgkJY3VydG9wID0gb2JqLm9mZnNldFRv
cDsKCQl3aGlsZSAob2JqID0gb2JqLm9mZnNldFBhcmVudCkKCQl7CgkJCWN1cmxl
ZnQgKz0gb2JqLm9mZnNldExlZnQ7CgkJCWN1cnRvcCArPSBvYmoub2Zmc2V0VG9w
OwoJCX0KCX0KCXJldHVybiB7eDogY3VybGVmdCwgeTogY3VydG9wfTsKfTsKCmZ1
bmN0aW9uIHN0cmV0Y2hUZXh0YXJlYXModGFyZ2V0cykKewoJYWRkRXZlbnRUb1Rh
cmdldHModGFyZ2V0cywgJ2tleXVwJywgc3RyZXRjaFRleHRhcmVhLCAndGV4dGFy
ZWEnKTsKCWFkZEV2ZW50VG9UYXJnZXRzKHRhcmdldHMsICdjaGFuZ2UnLCBzdHJl
dGNoVGV4dGFyZWEsICd0ZXh0YXJlYScpOwp9OwoKZnVuY3Rpb24gc3RyZXRjaFRl
eHRhcmVhKCkKewoJdmFyIGxpbmVzID0gdGhpcy52YWx1ZS5tYXRjaCgvKFtcclxu
XSkvZyk7CglpZihsaW5lcyA9PSBudWxsKQoJCXJldHVybjsKCgl0aGlzLnN0eWxl
LmhlaWdodCA9IE1hdGgubWF4KDUwLCBsaW5lcy5sZW5ndGggKyA4KSArICdlbSc7
Cn07CgpmdW5jdGlvbiBpbWFnZUdhbGxlcnkoKQp7CglpZihbJ2xpc3RfbWVzc2Fn
ZScsICdsaXN0X21lc3NhZ2VzJ10uaW5kZXhPZihib2FyZF9hY3Rpb24pID09IC0x
KQoJCXJldHVybjsKCgl2YXIgY29udGFpbmVyID0gbmV3IERPTVF1ZXJ5KCdkaXYu
ZXh0cmEtYWN0aW9ucyB1bC5saW5rcycpLmdldCgwKTsKCglpZighY29udGFpbmVy
KQoJCXJldHVybjsKCgl2YXIgdG9waWNJZCA9IG5ldyBET01RdWVyeSgnZGl2I2Fj
dGlvbi1oZWFkZXInKS5nZXQoMCkuY2xhc3NOYW1lLm1hdGNoKC90b3BpY1wtdG9w
aWNpZFwtKFswLTldKykvaSlbMV07CgoJdmFyIGxpbmsgPSBjcmVhdGVET01Ob2Rl
KCdsaScsIHsnY2xhc3MnIDogJ3RvcGljLWdhbGxlcnknfSwKCQkJCVsKCQkJCQlj
cmVhdGVET01Ob2RlKCdzcGFuJywgeydjbGFzcycgOiAnY2xpY2thYmxlJywgJ3Rp
dGxlJyA6IGdldFRleHQoJ2V4dHJhJywgJ3Nob3dfZ2FsbGVyeScpLCAnZXZlbnQn
IDogWydjbGljaycsIF9pbWFnZUdhbGxlcnldLCAncmVxdWVzdCcgOiAnYWN0aW9u
PWxpc3RfbWVzc2FnZXMmZGF0YSU1QnRvcGljaWQlNUQ9JyArIHRvcGljSWQgKyAn
JmxpbWl0PTk5OSZkYXRhJTVCZmlsdGVyX2tleXdvcmRzJTVEPWltZyZkYXRhJTVC
Ym9vbGVhbiU1RD1BTkQnfSwgWyBnZXRUZXh0KCdleHRyYScsICdzaG93X2dhbGxl
cnknKSBdKQoJCQkJXSk7CgoJY29udGFpbmVyLmluc2VydEJlZm9yZShsaW5rLCBj
b250YWluZXIuZmlyc3RDaGlsZCk7Cn07CgpmdW5jdGlvbiBfaW1hZ2VHYWxsZXJ5
KCkKewoJdmFyIGdhbGxlcnlDb250YWluZXIgPSBuZXcgRE9NUXVlcnkoJ2Rpdi5p
bWFnZS1nYWxsZXJ5JykuZ2V0KDApOwoJaWYoZ2FsbGVyeUNvbnRhaW5lcikKCQly
ZXR1cm4ganNjc3MoJ3RvZ2dsZScsIGdhbGxlcnlDb250YWluZXIsICdkaXNwbGF5
LW5vbmUnKTsKCgl2YXIgZ2FsbGVyeVJlcXVlc3QgPSBodHRwcmVxX3N0cmluZyh0
aGlzLmdldEF0dHJpYnV0ZSgncmVxdWVzdCcpLCBudWxsLCBudWxsLCBmYWxzZSk7
Cgl2YXIgc2l6ZSA9IDE4MDsKCglpZihnYWxsZXJ5UmVxdWVzdC5nZXRSZXNwb25z
ZUhlYWRlcignWC1FcnJvcm1lc3NhZ2UnKSkKCXsKCQlhbGVydCggZ2FsbGVyeVJl
cXVlc3QuZ2V0UmVzcG9uc2VIZWFkZXIoJ1gtRXJyb3JtZXNzYWdlJykgKTsKCQly
ZXR1cm4gdHJ1ZTsKCX0KCgl2YXIgY29udGFpbmVyID0gZ2V0RWxlbWVudEZyb21Y
SFIoZ2FsbGVyeVJlcXVlc3QsICdkaXYjY29yZScpOwoJdmFyIGl0ZW1zID0gbmV3
IERPTVF1ZXJ5KCdkaXYubWVzc2FnZS1jb250ZW50LWNvbnRlbnQgaW1nLnJtbCcs
IGNvbnRhaW5lcik7CgoJaWYoaXRlbXMubGVuZ3RoID09IDApCgkJcmV0dXJuOwoK
CXZhciBjb2xsZWN0aW9uID0gW107Cglmb3IodmFyIGkgPSAwLCBpdGVtLCByYXRp
bywgcHJlbG9hZGVkSW1hZ2U7KGl0ZW0gPSBpdGVtcy5nZXQoaSkpOyBpKyspCgl7
CgkJanNjc3MoJ2FkZCcsIGl0ZW0sICdkaXNwbGF5LW5vbmUnKTsKCgkJaXRlbS5z
ZXRBdHRyaWJ1dGUoJ21heHdpZHRoJywgc2l6ZSk7CgkJaXRlbS5zZXRBdHRyaWJ1
dGUoJ21heGhlaWdodCcsIHNpemUpOwoKCQlhZGRFdmVudChpdGVtLCAnbG9hZCcs
IHNjYWxlSW1hZ2UpOwoKCQljb2xsZWN0aW9uLnB1c2goIGNyZWF0ZURPTU5vZGUo
J2xpJywge30sIFsgaXRlbSBdKSApOwoJfQoKCWlmKGNvbGxlY3Rpb24ubGVuZ3Ro
ID09IDApCgkJcmV0dXJuOwoKCXZhciBnYWxsZXJ5Q29udGFpbmVyID0gY3JlYXRl
RE9NTm9kZSgnZGl2JywgeydjbGFzcycgOiAnaW1hZ2UtZ2FsbGVyeSd9LAoJWwoJ
CWNyZWF0ZURPTU5vZGUoJ2gzJywge30sIFsgZ2V0VGV4dCgnZXh0cmEnLCAnc2hv
d19nYWxsZXJ5X2hlYWRlcicpIF0pLAoJCWNyZWF0ZURPTU5vZGUoJ29sJywge30s
IGNvbGxlY3Rpb24pCgldKTsKCXZhciBjb250YWluZXIgPSBnZXRTaWJsaW5nTm9k
ZSh0aGlzLCAndXAnLCAnZGl2Jyk7Cgljb250YWluZXIucGFyZW50Tm9kZS5hcHBl
bmRDaGlsZChnYWxsZXJ5Q29udGFpbmVyKTsKfTsKCmZ1bmN0aW9uIHhoclBhZ2lu
YXRpb24odGFyZ2V0cykKewoJaWYoWydsaXN0X21lc3NhZ2UnLCAnbGlzdF9tZXNz
YWdlcyddLmluZGV4T2YoYm9hcmRfYWN0aW9uKSA9PSAtMSkKCQlyZXR1cm47CgoJ
YWRkRXZlbnRUb1RhcmdldHModGFyZ2V0cywgJ2NsaWNrJywgX3hoclBhZ2luYXRp
b24sICdkbC50b3BpYy1uYXZpZ2F0aW9uIGRkIGEnKTsKfTsKCmZ1bmN0aW9uIF94
aHJQYWdpbmF0aW9uKGUpCnsKCWlmKFsnbGFzdCddLmluZGV4T2YodGhpcy5nZXRB
dHRyaWJ1dGUoJ3JlbCcpKSA+IC0xIHx8IGRvY3VtZW50LmxvY2F0aW9uLnBhdGhu
YW1lLm1hdGNoKC9saXN0X21lc3NhZ2VzXC9bMC05XStcL2xhc3QvKSApIC8qIHdl
IGRvbid0IGhhbmRsZSAnbGFzdCcgY2F1c2UgaXQncyAic3BlY2lhbCIgKi8KCQly
ZXR1cm47CgoJaWYoIWFyZ3VtZW50cy5jYWxsZWUuaW5pdGlhbFBhZ2UpCgl7CgkJ
LyogZGV0ZXJtaW5lIHRoZSBwYWdlIGN1cnJlbnRseSBzaG93biAqLwoJCWFyZ3Vt
ZW50cy5jYWxsZWUuaW5pdGlhbFBhZ2UgPSBwYXJzZUludChuZXcgRE9NUXVlcnko
J2RsLnRvcGljLW5hdmlnYXRpb24gZGQgYS5jdXJyZW50LXBhZ2UnKS5nZXQoMCku
aHJlZi5tYXRjaCgvbGlzdF9tZXNzYWdlc1wvWzAtOV0rXC8oWzAtOV0rKS8pWzFd
KSArIDE7CgkJYXJndW1lbnRzLmNhbGxlZS50b3RhbFBhZ2VzID0gcGFyc2VJbnQo
bmV3IERPTVF1ZXJ5KCdkbC50b3BpYy1uYXZpZ2F0aW9uJykuZ2V0KDApLmNsYXNz
TmFtZS5tYXRjaCgvcGFnZXMtKFswLTldKykvKVsxXSk7CgkJbmV3IERPTVF1ZXJ5
KCdvbC5tZXNzYWdlcycpLmdldCgwKS5zZXRBdHRyaWJ1dGUoJ3BhZ2UnLCBhcmd1
bWVudHMuY2FsbGVlLmluaXRpYWxQYWdlKTsKCX0KCglpZihqc2NzcygnY2hlY2sn
LCB0aGlzLCAncGxhY2Vob2xkZXInKSkKCXsKCQl2YXIgdGhpc1BhZ2UgPSB0aGlz
LmdldEF0dHJpYnV0ZSgncGFnZScpOwoJfQoJZWxzZQoJewoJCXZhciB0aGlzUGFn
ZSA9IHBhcnNlSW50KHRoaXMuZ2V0QXR0cmlidXRlKCdocmVmJykubWF0Y2goL2xp
c3RfbWVzc2FnZXNcL1swLTldK1wvKFswLTldKykvKVsxXSkgKyAxOwoJfQoKCWlm
KHRoaXNQYWdlIC0gMSA+PSBhcmd1bWVudHMuY2FsbGVlLnRvdGFsUGFnZXMgfHwg
bmV3IERPTVF1ZXJ5KCdvbC5tZXNzYWdlc1twYWdlPSInK3RoaXNQYWdlKyciXScp
LmdldCgwKSkgLy8gZHVwbGljYXRlIHJlcXVlc3QgLyBvdXQtb2YtYm91bmRzCgl7
CgkJZSAmJiBlLnByZXZlbnREZWZhdWx0KCk7CgkJcmV0dXJuOwoJfQoKCXZhciBy
ZXF1ZXN0ID0gaHR0cHJlcV9zdHJpbmcoJycsIG51bGwsIHRoaXMuZ2V0QXR0cmli
dXRlKCdocmVmJyksIGZhbHNlLCAiR0VUIik7Cgl2YXIgbWVzc2FnZXMgPSBnZXRF
bGVtZW50RnJvbVhIUihyZXF1ZXN0LCAnb2wubWVzc2FnZXMnKTsKCXZhciB0aGlz
UGFnZSA9IHBhcnNlSW50KGdldEVsZW1lbnRGcm9tWEhSKHJlcXVlc3QsICdkbC50
b3BpYy1uYXZpZ2F0aW9uIGRkIGEuY3VycmVudC1wYWdlJykuaHJlZi5tYXRjaCgv
bGlzdF9tZXNzYWdlc1wvWzAtOV0rXC8oWzAtOV0rKS8pWzFdKSArIDE7CglpZigh
bWVzc2FnZXMpIC8vIHNob3VsZCB3ZSBzaG93IHgtZXJyb3JtZXNzYWdlPwoJCXJl
dHVybjsKCgkvLyBmaWxsIGJsYW5rcwoJdmFyIGNvbnRhaW5lcnMgPSBuZXcgRE9N
UXVlcnkoJ29sLm1lc3NhZ2VzJyk7Cgl2YXIgcGxhY2Vob2xkZXJzID0gW107Cglp
Zih0aGlzUGFnZSA+IGFyZ3VtZW50cy5jYWxsZWUuaW5pdGlhbFBhZ2UpIC8qIHdl
J3JlIHBhZ2luZyBhaGVhZCAqLwoJewoJCXZhciBsYXN0Q29udGFpbmVyID0gY29u
dGFpbmVycy5nZXQoY29udGFpbmVycy5sZW5ndGggLSAxKTsKCQkvKiB3ZSdyZSBz
a2lwcGluZyB0aGUgY3VycmVudCBsYXN0UGFnZUF2YWlsYWJsZSBhbmQgZG8gY3Jl
YXRlIG9uZSBmb3IgdGhlIHRoaXNQYWdlIGFzIHdlJ2xsIG5lZWQgdGhlIHJlZmVy
ZW5jZSBsYXRlciAqLwoJCWZvcih2YXIgaSA9IHBhcnNlSW50KGxhc3RDb250YWlu
ZXIuZ2V0QXR0cmlidXRlKCdwYWdlJykpICsgMTsgaSA8PSB0aGlzUGFnZTsgaSsr
KQoJCXsKCQkJcGxhY2Vob2xkZXJzLnB1c2goIGNyZWF0ZURPTU5vZGUoJ3AnLCB7
J2NsYXNzJyA6ICdwbGFjZWhvbGRlciBjbGlja2FibGUnLCAncGFnZScgOiBpLCAn
ZXZlbnQnIDogWydjbGljaycsIGFyZ3VtZW50cy5jYWxsZWVdLCAnaHJlZicgOiB0
aGlzLmhyZWYucmVwbGFjZSgvKGxpc3RfbWVzc2FnZXNcL1swLTldK1wvKShbMC05
XSspLywgJyQxJyArIChpLTEpICkgfSwgWydTa2lwcGVkIHBhZ2U6ICcgKyBpXSkg
KTsKCQl9CgoJCS8vIGFwcGVuZCB0aGUgcGxhY2Vob2xkZXJzCgkJaWYocGxhY2Vo
b2xkZXJzLmxlbmd0aCkKCQl7CgkJCWxhc3RDb250YWluZXIucGFyZW50Tm9kZS5p
bnNlcnRCZWZvcmUoIGNyZWF0ZURPTU5vZGUobnVsbCwge30sIHBsYWNlaG9sZGVy
cyksIGxhc3RDb250YWluZXIubmV4dFNpYmxpbmcgKTsKCQl9Cgl9CgllbHNlIC8q
IHdlJ3JlIHBhZ2luZyBiYWNrd2FyZHMgKi8KCXsKCQl2YXIgZmlyc3RDb250YWlu
ZXIgPSBjb250YWluZXJzLmdldCgwKTsKCQkvKiB3ZSdyZSBza2lwcGluZyB0aGUg
Y3VycmVudCBsYXN0UGFnZUF2YWlsYWJsZSBhbmQgZG8gY3JlYXRlIG9uZSBmb3Ig
dGhlIHRoaXNQYWdlIGFzIHdlJ2xsIG5lZWQgdGhlIHJlZmVyZW5jZSBsYXRlciAq
LwoJCWZvcih2YXIgaSA9IHBhcnNlSW50KGZpcnN0Q29udGFpbmVyLmdldEF0dHJp
YnV0ZSgncGFnZScpKSAtIDE7IGkgPj0gdGhpc1BhZ2U7IGktLSkKCQl7CgkJCXBs
YWNlaG9sZGVycy51bnNoaWZ0KCBjcmVhdGVET01Ob2RlKCdwJywgeydjbGFzcycg
OiAncGxhY2Vob2xkZXIgY2xpY2thYmxlJywgJ3BhZ2UnIDogaSwgJ2V2ZW50JyA6
IFsnY2xpY2snLCBhcmd1bWVudHMuY2FsbGVlXSwgJ2hyZWYnIDogdGhpcy5ocmVm
LnJlcGxhY2UoLyhsaXN0X21lc3NhZ2VzXC9bMC05XStcLykoWzAtOV0rKS8sICck
MScgKyAoaS0xKSApIH0sIFsnU2tpcHBlZCBwYWdlOiAnICsgaV0pICk7CgkJfQoK
CQkvLyBwcmVwZW5kIHRoZSBwbGFjZWhvbGRlcnMKCQlpZihwbGFjZWhvbGRlcnMu
bGVuZ3RoKQoJCXsKCQkJZmlyc3RDb250YWluZXIucGFyZW50Tm9kZS5pbnNlcnRC
ZWZvcmUoIGNyZWF0ZURPTU5vZGUobnVsbCwge30sIHBsYWNlaG9sZGVycyksIGZp
cnN0Q29udGFpbmVyLnByZXZpb3VzU2libGluZyApOwoJCX0KCX0KCgl2YXIgcGxh
Y2Vob2xkZXIgPSBuZXcgRE9NUXVlcnkoJ3AucGxhY2Vob2xkZXJbcGFnZT0iJyt0
aGlzUGFnZSsnIl0nKS5nZXQoMCk7CglpZighcGxhY2Vob2xkZXIpIC8qIHNvbWV0
aGluZyB3ZW50IHBlYXJzaGFwZWQgKi8KCQlyZXR1cm47CgoJbWVzc2FnZXMuc2V0
QXR0cmlidXRlKCdwYWdlJywgdGhpc1BhZ2UpOwoJcGxhY2Vob2xkZXIucGFyZW50
Tm9kZS5pbnNlcnRCZWZvcmUobWVzc2FnZXMsIHBsYWNlaG9sZGVyKTsKCXBsYWNl
aG9sZGVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocGxhY2Vob2xkZXIpOwoKCXZh
ciBuZXh0TGlua3MgPSBuZXcgRE9NUXVlcnkoJ2RsLnRvcGljLW5hdmlnYXRpb24g
ZGQgYVtyZWw9Im5leHQiXScpOwoJZm9yKHZhciBpID0gMCwgbmV4dExpbms7IChu
ZXh0TGluayA9IG5leHRMaW5rcy5nZXQoaSkpOyBpKyspCgl7CgkJbmV4dExpbmsu
aHJlZiA9IG5leHRMaW5rLmhyZWYucmVwbGFjZSgvKGxpc3RfbWVzc2FnZXNcL1sw
LTldK1wvKShbMC05XSspLywgJyQxJyArIHRoaXNQYWdlICkKCX0KCgl2YXIgY3Vy
cmVudFBhZ2VzID0gbmV3IERPTVF1ZXJ5KCdkbC50b3BpYy1uYXZpZ2F0aW9uIGRk
IGFbaHJlZio9Imxpc3RfbWVzc2FnZXMvJyt0aGlzLmdldEF0dHJpYnV0ZSgnaHJl
ZicpLm1hdGNoKC9saXN0X21lc3NhZ2VzXC8oWzAtOV0rKS8pWzFdKycvJysodGhp
c1BhZ2UtMSkrJyJdJyk7Cglmb3IodmFyIGkgPSAwLCBjdXJyZW50UGFnZTsgKGN1
cnJlbnRQYWdlID0gY3VycmVudFBhZ2VzLmdldChpKSk7IGkrKykKCXsKCQlqc2Nz
cygnYWRkJywgY3VycmVudFBhZ2UsICdjdXJyZW50LXBhZ2UnKTsKCX0KCglpZiht
ZXNzYWdlcy5zY3JvbGxJbnRvVmlldykKCQltZXNzYWdlcy5zY3JvbGxJbnRvVmll
dygpOwoKCV9pbml0KGV2ZW50cywgbWVzc2FnZXMpOwoJZSAmJiBlLnByZXZlbnRE
ZWZhdWx0KCk7CgkvKmlmKGV2ZW50cy5pbmRleE9mKHBhZ2VJbmRpY2F0b3IpID4g
LTEpCgl7CgkJdXBkYXRlUGFnZUluZGljYXRvcigpOwoJfSovCn07CgoKLyogdGhp
cyBpcyBVTkZJTklTSEVEICovCmZ1bmN0aW9uIHBhZ2VJbmRpY2F0b3IoKQp7Cglp
Zihhcmd1bWVudHMuY2FsbGVlLmluaXRpYWxSdW4pCgkJcmV0dXJuOwoKCWRvY3Vt
ZW50LmJvZHkuYXBwZW5kQ2hpbGQoCgkJY3JlYXRlRE9NTm9kZSgnZGl2Jywgeydp
ZCcgOiAnY29udGFpbmVyJywgJ3N0eWxlJyA6ICd3aWR0aDogNTBweDsgaGVpZ2h0
OiAyMDBweDsgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7IHBvc2l0aW9uOiBhYnNv
bHV0ZTsgdG9wOiAwOyBsZWZ0OiAyNzVweDsnfSwgWwoJCV0pCgkpOwoKCXVwZGF0
ZVBhZ2VJbmRpY2F0b3IoKTsKCWFyZ3VtZW50cy5jYWxsZWUuaW5pdGlhbFJ1biA9
IHRydWU7Cn0KCmZ1bmN0aW9uIHVwZGF0ZVBhZ2VJbmRpY2F0b3IoKQp7Cgl2YXIg
Y29udGFpbmVyID0gbmV3IERPTVF1ZXJ5KCdkaXYjY29udGFpbmVyJykuZ2V0KDAp
OwoJd2hpbGUoY29udGFpbmVyLmZpcnN0Q2hpbGQpCgkJY29udGFpbmVyLnJlbW92
ZUNoaWxkKGNvbnRhaW5lci5maXJzdENoaWxkKTsKCgl2YXIgbWVzc2FnZUNvdW50
ID0gMTM7IC8vIHNob3VsZCBiZSBkeW5hbWljCgl2YXIgcGVyUGFnZSA9IDU7IC8v
IHNob3VsZCBiZSBkeW5hbWljCgoJdmFyIGNvbnRhaW5lckhlaWdodCA9IGN1cnJl
bnRTdHlsZShjb250YWluZXIsICdoZWlnaHQnKTsKCXZhciBwZXJQaXhlbCA9IGNv
bnRhaW5lckhlaWdodCAvIG1lc3NhZ2VDb3VudDsKCgl2YXIgYXZhaWxhYmxlUGFn
ZSA9IGNyZWF0ZURPTU5vZGUoJ2RpdicsIHsnY2xhc3MnIDogJ3ZpZXdwb3J0Jywg
J3N0eWxlJyA6ICd3aWR0aDogNDhweDsgaGVpZ2h0OiAwOyBib3JkZXI6IDFweCBz
b2xpZCByZWQ7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBsZWZ0OiAwOyBi
YWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7IG9wYWNpdHk6IC42J30sIFtdKTsKCXZh
ciBpdGVtcyA9IG5ldyBET01RdWVyeSgnb2wubWVzc2FnZXMnKTsKCWZvcih2YXIg
aSA9IDAsIGl0ZW07IChpdGVtID0gaXRlbXMuZ2V0KGkpKTsgaSsrKQoJewoJCXZh
ciBtZXNzYWdlc1Zpc2libGUgPSBuZXcgRE9NUXVlcnkoJ2xpLm1lc3NhZ2UnLCBp
dGVtKS5sZW5ndGg7CgkJdmFyIGN1cnJlbnRQYWdlID0gcGFyc2VJbnQoaXRlbS5n
ZXRBdHRyaWJ1dGUoJ3BhZ2UnKSk7CgkJaWYoIWN1cnJlbnRQYWdlKSAvLyB0aGlz
IG9ubHkgaGFwcGVucyB3aGVuIHNvbWVvbmUgaGFzIG5vdCBleGVjdXRlZCBfeGhy
UGFnaW5hdGlvbgoJCXsKCQkJY3VycmVudFBhZ2UgPSBwYXJzZUludChuZXcgRE9N
UXVlcnkoJ2RsLnRvcGljLW5hdmlnYXRpb24gZGQgYS5jdXJyZW50LXBhZ2UnKS5n
ZXQoMCkuaHJlZi5tYXRjaCgvbGlzdF9tZXNzYWdlc1wvWzAtOV0rXC8oWzAtOV0r
KS8pWzFdKSArIDE7CgkJfQoKCQl2YXIgY2xvbmUgPSBhdmFpbGFibGVQYWdlLmNs
b25lTm9kZSh0cnVlKTsKCQljbG9uZS5zdHlsZS5oZWlnaHQgPSBNYXRoLmZsb29y
KG1lc3NhZ2VzVmlzaWJsZSAqIHBlclBpeGVsKSArICdweCc7CgkJY2xvbmUuc3R5
bGUudG9wID0gTWF0aC5mbG9vcigoY3VycmVudFBhZ2UgLSAxKSAqIHBlclBhZ2Ug
KiBwZXJQaXhlbCkgKyAncHgnOwoKCQljb250YWluZXIuYXBwZW5kQ2hpbGQoY2xv
bmUpOwoJfQoKCXZhciB2aWV3cG9ydCA9IGNyZWF0ZURPTU5vZGUoJ2RpdicsIHsn
Y2xhc3MnIDogJ3ZpZXdwb3J0JywgJ3N0eWxlJyA6ICd3aWR0aDogNDhweDsgaGVp
Z2h0OiAwOyBib3JkZXI6IDFweCBzb2xpZCByZWQ7IHBvc2l0aW9uOiBhYnNvbHV0
ZTsgdG9wOiAwOyBsZWZ0OiAwOyBiYWNrZ3JvdW5kLWNvbG9yOiBibHVlOyBvcGFj
aXR5OiAuNyd9LCBbXSk7Cgl2aWV3cG9ydC5zdHlsZS5oZWlnaHQgPSAzMCArICdw
eCc7Cgljb250YWluZXIuYXBwZW5kQ2hpbGQodmlld3BvcnQpOwp9CgpmdW5jdGlv
biBzaXRlc3RhdChuc19sKQp7Cgluc19sKz0nJmFtcDtuc19fdD0nKyhuZXcgRGF0
ZSgpKS5nZXRUaW1lKCk7Cgluc19waXhlbFVybD1uc19sOwoJbnNfMD1kb2N1bWVu
dC5yZWZlcnJlcjsKCW5zXzA9KG5zXzAubGFzdEluZGV4T2YoJy8nKSA9PSBuc18w
Lmxlbmd0aC0xICkgPyBuc18wLnN1YnN0cmluZyhuc18wLmxhc3RJbmRleE9mKCcv
JyksMCkgOiBuc18wOwoJaWYobnNfMC5sZW5ndGg+MCkKCQluc19sKz0nJmFtcDtu
c19yZWZlcnJlcj0nK2VzY2FwZShuc18wKTsKCWlmKGRvY3VtZW50LmltYWdlcykK
CXsKCQluc18xPW5ldyBJbWFnZSgpO25zXzEuc3JjPW5zX2w7Cgl9CgllbHNlCgkJ
ZG9jdW1lbnQud3JpdGUoJzxpbWcgc3JjPSInK25zX2wrJyIgd2lkdGg9IjEiIGhl
aWdodD0iMSIgYWx0PSIiPicpOwp9CnZhciBkb2N1bWVudHNfZGF0YSA9IEFycmF5
KCk7CgpmdW5jdGlvbiBzY3JvbGxUb0FuY2hvcigpCnsKCWlmICghbG9jYXRpb24u
aGFzaCkKCQlyZXR1cm47CgoJdmFyIGxpbmsgICAgICAgICAgPSBsb2NhdGlvbi5o
YXNoLnN1YnN0cigxKTsKCglpZiAoIWxpbmsubWF0Y2goL15bMC05YS16XSskLykp
Cgl7CgkJcmV0dXJuOwoJfQoKCXZhciBlbGVtZW50ICAgICAgID0gbmV3IERPTVF1
ZXJ5KCJhIyIgK2xpbmsgKTsKCXZhciBzY3JvbGxFbGVtZW50ID0gZWxlbWVudC5n
ZXQoMCk7CgoJaWYgKCFzY3JvbGxFbGVtZW50KQoJCXJldHVybjsKCglhZGRFdmVu
dCgKCQl3aW5kb3csCgkJJ2xvYWQnLAoJCWZ1bmN0aW9uKCkgeyBzY3JvbGxFbGVt
ZW50LnNjcm9sbEludG9WaWV3KCk7IH0KCSk7Cn0KCmZ1bmN0aW9uIGxvZ2luRm9y
bSgpCnsKCS8qIGNoZWNrcyBpZiBmaWVsZCBpc24ndCBmaWxsZWQgYnkgYnJvd3Nl
cidzIGF1dG9jb21wbGV0ZSBmZWF0dXJlICovCgl2YXIgZiA9IG5ldyBET01RdWVy
eSgnaW5wdXQjcXVpY2stbG9naW4tZm9ybS11c2VyJykuZ2V0KDApOwoKCWlmKGYg
JiYgZi52YWx1ZSA9PSAnJykKCXsKCQlmLnZhbHVlID0gZ2V0VGV4dCgnZm9ybXMn
LCAndXNlcm5hbWUnKTsKCQlhZGRFdmVudChmLCAnZm9jdXMnLCBfY2xlYXJGaWVs
ZFNldFR5cGVQYXNzd29yZCk7Cgl9CgoJZiA9IG5ldyBET01RdWVyeSgnaW5wdXQj
cXVpY2stbG9naW4tZm9ybS1wYXNzd29yZCcpLmdldCgwKTsKCglpZihmICYmIGYu
dmFsdWUgPT0gJycpCgl7CgkJdHJ5CgkJewoJCQlmLnR5cGUgPSAndGV4dCc7CgkJ
fQoJCWNhdGNoKGUpCgkJewoJCQk7CgkJfQoJCWYuZGVmYXVsdFZhbHVlID0gZ2V0
VGV4dCgnZm9ybXMnLCAncGFzc3dvcmQnKTsKCgkJYWRkRXZlbnQoIGYsICdjbGlj
aycsIF9jbGVhckZpZWxkU2V0VHlwZVBhc3N3b3JkKTsKCQlhZGRFdmVudCggZiwg
J2ZvY3VzJywgX2NsZWFyRmllbGRTZXRUeXBlUGFzc3dvcmQpOwoJfQp9OwoKZnVu
Y3Rpb24gX2NsZWFyRmllbGRTZXRUeXBlUGFzc3dvcmQoKQp7Cgl2YXIgcGFzc3dv
cmRfaW5wdXQgPSBuZXcgRE9NUXVlcnkoJ2lucHV0I3F1aWNrLWxvZ2luLWZvcm0t
cGFzc3dvcmQnKS5nZXQoMCk7Cgl2YXIgdXNlcm5hbWVfaW5wdXQgPSBuZXcgRE9N
UXVlcnkoJ2lucHV0I3F1aWNrLWxvZ2luLWZvcm0tdXNlcicpLmdldCgwKTsKCglp
ZiAoIHVzZXJuYW1lX2lucHV0LnZhbHVlICE9IGdldFRleHQoJ2Zvcm1zJywgJ3Vz
ZXJuYW1lJykgKQoJCXJldHVybjsKCgl0cnkKCXsKCQkgcGFzc3dvcmRfaW5wdXQu
dmFsdWUgPSAnJzsgcGFzc3dvcmRfaW5wdXQudHlwZSA9ICdwYXNzd29yZCc7Cgl9
CgljYXRjaChlKQoJewoJCTsKCX0KCXVzZXJuYW1lX2lucHV0LnZhbHVlID0gJyc7
Cn07CgpmdW5jdGlvbiBib2FyZEZvcnVtUHVsbGRvd24oKQp7CglpZih0aGlzLnRh
Z05hbWUudG9Mb3dlckNhc2UoKSAhPSAnc2VsZWN0JykKCQlyZXR1cm47CgoJaWYo
TnVtYmVyKHRoaXMudmFsdWUpID4gMCkKCXsKCQlkb2N1bWVudC5sb2NhdGlvbi5o
cmVmID0gIGJvYXJkX3NjcmlwdF91cmwgKycvbGlzdF90b3BpY3MvJyArIHRoaXMu
dmFsdWU7Cgl9CgllbHNlIGlmKHRoaXMudmFsdWUgIT0gJycpCgl7CgkJZG9jdW1l
bnQubG9jYXRpb24uaHJlZiA9IHRoaXMudmFsdWU7Cgl9Cn07CgpmdW5jdGlvbiBj
cmVhdGVGb290ZXIoKQp7Cgl2YXIgZm9vdGVyID0gbmV3IERPTVF1ZXJ5KCdkaXYj
Zm9vdGVyJykuZ2V0KDApOwoKCWlmICghZm9vdGVyKQoJCXJldHVybjsKCgkvKiBB
ZGQgUlNTIGxpbmsgKi8KCXZhciBpdGVtID0gbmV3IERPTVF1ZXJ5KCdoZWFkIGxp
bmtbdHlwZT0iYXBwbGljYXRpb24vcnNzK3htbCJdJyk7CgoJaWYoaXRlbS5sZW5n
dGggPiAwKQoJewoJCXZhciByc3MgPSBpdGVtLmdldCgwKTsKCgkJdmFyIGEgPSBj
cmVhdGVET01Ob2RlKCdhJywgeyJocmVmIiA6IHJzcy5ocmVmLCAidHlwZSIgOiBy
c3MudHlwZSwgInRpdGxlIiA6IHJzcy50aXRsZSwgImNsYXNzIiA6ICdyc3MtbGlu
ayd9LCBbJ1JTUyddKTsKCgkJZm9vdGVyLmluc2VydEJlZm9yZShhLCBmb290ZXIu
Zmlyc3RDaGlsZCk7Cgl9CgoJdmFyIGZvcm0gPSBuZXcgRE9NUXVlcnkoJ2RpdiNu
YXZpZ2F0aW9uIGZvcm0nKTsKCWlmKGZvcm0ubGVuZ3RoID4gMCkKCXsKCQlmb290
ZXIuaW5zZXJ0QmVmb3JlKGZvcm0uZ2V0KDApLmNsb25lTm9kZSh0cnVlKSwgZm9v
dGVyLmZpcnN0Q2hpbGQpOwoJfQp9OwoKZnVuY3Rpb24gdG9waWNOYXZpZ2F0aW9u
UHVsbGRvd24odGFyZ2V0cykKewoJYWRkRXZlbnRUb1RhcmdldHModGFyZ2V0cywg
J3N1Ym1pdCcsIGZ1bmN0aW9uKCl7IHJldHVybiBfaGFuZGxlVG9waWNOYXZpZ2F0
aW9uUHVsbGRvd24odGhpcyk7fSwgJ2Zvcm0udG9waWMtbmF2aWdhdGlvbicpOwoJ
YWRkRXZlbnRUb1RhcmdldHModGFyZ2V0cywgJ2NoYW5nZScsIGZ1bmN0aW9uKCl7
IHJldHVybiBfaGFuZGxlVG9waWNOYXZpZ2F0aW9uUHVsbGRvd24odGhpcy5mb3Jt
KTt9LCAnZm9ybS50b3BpYy1uYXZpZ2F0aW9uIHNlbGVjdCcpOwp9OwoKZnVuY3Rp
b24gX2hhbmRsZVRvcGljTmF2aWdhdGlvblB1bGxkb3duKGZvcm0pCnsKCWRvY3Vt
ZW50LmxvY2F0aW9uLmhyZWYgPSBmb3JtLmF0dHJpYnV0ZXNbJ2FjdGlvbiddLnZh
bHVlICsgZm9ybS5lbGVtZW50c1snYWN0aW9uJ10udmFsdWUgKycvJysgZm9ybS5l
bGVtZW50c1snZGF0YVt0b3BpY2lkXSddLnZhbHVlICsnLycrIGZvcm0uZWxlbWVu
dHNbJ2RhdGFbb2Zmc2V0XSddLnZhbHVlOwoJcmV0dXJuIGZhbHNlOwp9OwoKZnVu
Y3Rpb24gcHVsbGRvd25BdXRvU3VibWl0cyh0YXJnZXRzKQp7CglhZGRFdmVudFRv
VGFyZ2V0cyh0YXJnZXRzLCAnY2hhbmdlJywgX2hhbmRsZVB1bGxEb3ducywgJ3Nl
bGVjdC5mYXEtbGlzdCwgZm9ybS50b3BpYy1uYXZpZ2F0aW9uIHNlbGVjdCwgZm9y
bSNtb3JlLXRvcGljIHNlbGVjdCwgc2VsZWN0I2NhbGVuZGFyLXNlbGVjdC1kYXRl
LCBzZWxlY3QucGFnZS1kcm9wZG93bicpOwoJYWRkRXZlbnRUb1RhcmdldHMobnVs
bCwgJ2NoYW5nZScsIGJvYXJkRm9ydW1QdWxsZG93biwgJ3NlbGVjdC5qdW1wLXRv
LWFjdGlvbicpOwp9OwoKZnVuY3Rpb24gX2hhbmRsZVB1bGxEb3ducygpCnsKCWlm
KHRoaXMudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICdzZWxlY3QnKQoJCXRoaXMu
Zm9ybS5zdWJtaXQoKTsKfTsKCmZ1bmN0aW9uIHRvZ2dsZUF1dGhvckxpbmtzKHRh
cmdldHMpCnsKCXZhciBpdGVtcyA9IGdldFRhcmdldHModGFyZ2V0cywgJ29sLm1l
c3NhZ2VzIGRpdi5hdXRob3Itbmlja25hbWUnKTsKCglpZihpdGVtcy5sZW5ndGgg
PT0gMCkKCQlyZXR1cm47CgoJZm9yKHZhciBpID0gMCwgaXRlbTsgKGl0ZW09aXRl
bXMuZ2V0KGkpKTsgaSsrKQoJewoJCWFkZEV2ZW50KGl0ZW0sICdjbGljaycsIF90
b2dnbGVBdXRob3JMaW5rcyk7CgkJanNjc3MoJ2FkZCcsIGl0ZW0sICdhdXRob3It
bGlua3MtdG9nZ2xlJywgJycpOwoJfQp9OwoKZnVuY3Rpb24gX3RvZ2dsZUF1dGhv
ckxpbmtzKCkKewoJdmFyIGl0ZW0gPSBuZXcgRE9NUXVlcnkoJ3VsLmF1dGhvci1s
aW5rcycsIGdldFNpYmxpbmdOb2RlKHRoaXMsICd1cCcsICdsaScpKS5nZXQoMCk7
CgoJaWYgKGl0ZW0pCgl7CgkJanNjc3MoJ3RvZ2dsZScsIGl0ZW0sICdhdXRob3It
bGlua3MtZXhwYW5kZWQnKTsKCX0KCWpzY3NzKCd0b2dnbGUnLCB0aGlzLCAnYXV0
aG9yLWxpbmtzLXRvZ2dsZS1vcGVuJyk7Cn07CgpmdW5jdGlvbiBmb2xsb3dUb3Bp
Y0xpbmtzKCkKewoJdmFyIHN1Yml0ZW1zID0gbmV3IERPTVF1ZXJ5KCdhJywgdGhp
cyk7CglpZihzdWJpdGVtcy5sZW5ndGggPT0gMSkKCXsKCQl3aW5kb3cubG9jYXRp
b24uaHJlZiA9IHN1Yml0ZW1zLmdldCgwKS5ocmVmOwoJfQp9Cgp2YXIgdG9nZ2xl
VmlzaWJpbGl0eUNvb2tpZTsKZnVuY3Rpb24gdG9nZ2xlVmlzaWJpbGl0eSh0YXJn
ZXRzKQp7Cgl2YXIgaXRlbXMgPSBnZXRUYXJnZXRzKAoJCXRhcmdldHMsCgkJJ2gz
W2lkXSArIGZpZWxkc2V0LCBoM1tpZF0gKyBkbC5wcm9wZXJ0eS1saXN0LCB0cltp
ZF0uY2F0ZWdvcnktbmFtZSB0ZCwgZGl2LmV4dHJhLWFjdGlvbnMgdWwgbGkjZm9y
dW0tdGFnY2xvdWQsIGRpdi5kaXNjdXNzaW9uLWZvbGRlcnMgdWwuZm9sZGVycyBs
aVtpZF0nCgkpOwoKCWlmKGl0ZW1zLmxlbmd0aCA9PSAwKQoJCXJldHVybjsKCgln
ZXRUb2dnbGVWaXNpYmlsaXR5Q29va2llKCk7CgoJZm9yKHZhciBpID0gMCwgaXRl
bTsoaXRlbT1pdGVtcy5nZXQoaSkpO2krKykKCXsKCQlzd2l0Y2goaXRlbS50YWdO
YW1lLnRvTG93ZXJDYXNlKCkpCgkJewoJCQljYXNlICdsaSc6CgkJCWNhc2UgJ3Rk
JzoKCQkJCWFkZEV2ZW50KGl0ZW0sICdjbGljaycsIF90b2dnbGVWaXNpYmlsaXR5
KTsKCQkJCWpzY3NzKCdhZGQnLGl0ZW0sJ3RvZ2dsZS1pY29uJywnJyk7CgoJCQkJ
aWYodG9nZ2xlVmlzaWJpbGl0eUNvb2tpZS5pbmRleE9mKGl0ZW0udGFnTmFtZS50
b0xvd2VyQ2FzZSgpID09ICdsaScgPyBpdGVtLmlkIDogaXRlbS5wYXJlbnROb2Rl
LmlkKSA+IC0xKQoJCQkJCV90b2dnbGVWaXNpYmlsaXR5KHRydWUsIGl0ZW0pOwoJ
CQlicmVhazsKCQkJZGVmYXVsdDoKCQkJCWFkZEV2ZW50KGl0ZW0ucHJldmlvdXNT
aWJsaW5nLCAnY2xpY2snLCBfdG9nZ2xlVmlzaWJpbGl0eSk7CgkJCQlqc2Nzcygn
YWRkJyxpdGVtLnByZXZpb3VzU2libGluZywndG9nZ2xlLWljb24nLCcnKTsKCgkJ
CQlpZih0b2dnbGVWaXNpYmlsaXR5Q29va2llLmluZGV4T2YoaXRlbS5wcmV2aW91
c1NpYmxpbmcuaWQpID4gLTEpCgkJCQkJX3RvZ2dsZVZpc2liaWxpdHkodHJ1ZSwg
aXRlbS5wcmV2aW91c1NpYmxpbmcpOwoJCQlicmVhazsKCQl9Cgl9Cn07CgpmdW5j
dGlvbiBfdG9nZ2xlVmlzaWJpbGl0eShpbml0LCB4KQp7CglpZih0eXBlb2YgeCA9
PSAndW5kZWZpbmVkJykKCQl4ID0gdGhpczsKCgkvKiBkb24ndCB0b2dnbGUgd2hl
biB0aGUgdXNlciBjbGlja3MgYSBsaW5rICovCglpZih0eXBlb2YgaW5pdCA9PSAn
b2JqZWN0JykKCXsKCQl2YXIgdGFyZ2V0ID0gaW5pdC5zcmNFbGVtZW50IHx8IGlu
aXQudGFyZ2V0OwoJCWlmKHRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0g
J2EnKQoJCQlyZXR1cm47Cgl9CgoJdmFyIHRhZ25hbWUgPSB4LnRhZ05hbWUudG9M
b3dlckNhc2UoKTsKCglpZih0YWduYW1lID09ICd0ZCcpCgl7CgkJaWYoaW5pdCAh
PSB0cnVlKQoJCQlzdG9yZVRvZ2dsZVZpc2liaWxpdHkoeC5wYXJlbnROb2RlLmlk
LCBqc2NzcygnY2hlY2snLCB4LCAndG9nZ2xlLWFsdGVybmF0ZS1pY29uJykpOwoK
CQl2YXIgbm9kZSA9IHgucGFyZW50Tm9kZTsKCgkJd2hpbGUoIG5vZGUubmV4dFNp
YmxpbmcgJiYgKG5vZGUgPSBub2RlLm5leHRTaWJsaW5nKSAmJiAhanNjc3MoJ2No
ZWNrJywgbm9kZSwgJ2NhdGVnb3J5LW5hbWUnKSApCgkJewoJCQlqc2NzcygndG9n
Z2xlJywgbm9kZSwgJ2Rpc3BsYXktbm9uZScsJycpOwoJCX0KCX0KCWVsc2UKCXsK
CQlpZihpbml0ICE9IHRydWUpCgkJewoJCQlzdG9yZVRvZ2dsZVZpc2liaWxpdHko
eC5pZCwganNjc3MoJ2NoZWNrJywgeCwgJ3RvZ2dsZS1hbHRlcm5hdGUtaWNvbicp
KTsKCQl9CgoJCWlmKHRhZ25hbWUgPT0gJ2xpJykKCQl7CgkJCWpzY3NzKCd0b2dn
bGUnLCB4LCAnZGlzcGxheS1uby1jaGlsZHMnKTsKCQl9CgkJZWxzZQoJCXsKCQkJ
anNjc3MoJ3RvZ2dsZScsIHgubmV4dFNpYmxpbmcsICdkaXNwbGF5LW5vbmUnLCcn
KTsKCQl9Cgl9CgoJaWYodHlwZW9mIGluaXQgPT0gJ29iamVjdCcpCgl7CgkJaW5p
dC5zdG9wUHJvcGFnYXRpb24oKTsKCX0KCglqc2NzcygndG9nZ2xlJywgeCwgJ3Rv
Z2dsZS1hbHRlcm5hdGUtaWNvbicsJycpOwoKCXJldHVybjsKfTsKCmZ1bmN0aW9u
IHN0b3JlVG9nZ2xlVmlzaWJpbGl0eSh4LCBkZWwpCnsKCXRvZ2dsZVZpc2liaWxp
dHlDb29raWUgPSB0b2dnbGVWaXNpYmlsaXR5Q29va2llLmdldFVuaXF1ZSgpOwoK
CWlmKHRvZ2dsZVZpc2liaWxpdHlDb29raWUuaW5kZXhPZih4KSA+IC0xICYmIGRl
bCkKCXsKCQl2YXIgbmV3Q29va2llID0gW107CgkJZm9yKHZhciBpPTAsIGl0ZW07
KGl0ZW09dG9nZ2xlVmlzaWJpbGl0eUNvb2tpZVtpXSk7aSsrKQoJCXsKCQkJaWYo
IGl0ZW0gIT0geCApCgkJCQluZXdDb29raWUucHVzaChpdGVtKTsKCQl9CgoJCXRv
Z2dsZVZpc2liaWxpdHlDb29raWUgPSBuZXdDb29raWU7Cgl9CgllbHNlCgl7CgkJ
aWYgKHRvZ2dsZVZpc2liaWxpdHlDb29raWUuaW5kZXhPZih4KSA9PSAtMSkKCQkJ
dG9nZ2xlVmlzaWJpbGl0eUNvb2tpZS5wdXNoKHgpOwoJfQoKCXNldENvb2tpZSgn
dG9nZ2xlJywgdG9nZ2xlVmlzaWJpbGl0eUNvb2tpZS5qb2luKCc6JykpOwp9OwoK
ZnVuY3Rpb24gZ2V0VG9nZ2xlVmlzaWJpbGl0eUNvb2tpZSgpCnsKCXZhciBjID0g
Z2V0Q29va2llKCd0b2dnbGUnKTsKCXRvZ2dsZVZpc2liaWxpdHlDb29raWUgPSBb
XTsKCglpZihjKQoJCXRvZ2dsZVZpc2liaWxpdHlDb29raWUgPSBjLnNwbGl0KCc6
Jyk7Cn07CgpmdW5jdGlvbiBkaXNhYmxlZE9wdGlvbigpCnsKCWlmKGpzY3NzKCdj
aGVjaycsIHRoaXMub3B0aW9uc1t0aGlzLnNlbGVjdGVkSW5kZXhdLCAnZGlzYWJs
ZWQnLCAnJykpCgl7CgkJdGhpcy5zZWxlY3RlZEluZGV4ID0gLTE7CgkJYWxlcnQo
Z2V0VGV4dCgnbm9ybWFsJywgJ2Rpc2FibGVkX29wdGlvbicpKTsKCX0KfTsKCmZ1
bmN0aW9uIGZpeEJyb3dzZXJJc3N1ZXMoY29udGV4dE5vZGUpCnsKCXZhciBpID0g
MCwgaXRlbXMsIGl0ZW07CgoJaWYoYm9hcmRfYWN0aW9uID09ICdlcnJvcl9nZW5l
cmFsJykKCXsKCQl2YXIgcmVmZXJlbmNlID0gbmV3IERPTVF1ZXJ5KCd1bC5lcnJv
ci1saW5rcyBsaS5ob21lJykuZ2V0KDApOwoJCWlmKHJlZmVyZW5jZSkKCQl7CgkJ
CXJlZmVyZW5jZS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKAoJCQkJY3JlYXRlRE9N
Tm9kZSgnbGknLCB7ImNsYXNzIiA6ICJiYWNrIn0sIFsKCQkJCQljcmVhdGVET01O
b2RlKCdzcGFuJywgeyJjbGFzcyIgOiAiY2xpY2thYmxlIiwgImV2ZW50IiA6IFsn
Y2xpY2snLCBmdW5jdGlvbigpIHsgaGlzdG9yeS5nbygtMSk7fV0gfSwgWyBnZXRU
ZXh0KCdub3JtYWwnLCAnYmFjaycpIF0pCgkJCQldKQoJCQkpOwoJCX0KCX0KCglp
Zihpc0lFKQoJewoJCWl0ZW1zID0gbmV3IERPTVF1ZXJ5KCdkdC5yZXF1aXJlZCcs
IGNvbnRleHROb2RlKTsKCQl2YXIgcmVxID0gbnVsbDsKCQlmb3IoaSA9IDA7KGl0
ZW09aXRlbXMuZ2V0KGkpKTtpKyspCgkJewoJCQlyZXEgPSBjcmVhdGVET01Ob2Rl
KCdzcGFuJywgeyJjbGFzcyIgOiAncmVxdWlyZWQnfSwgWycgKiddKTsKCQkJaXRl
bS5hcHBlbmRDaGlsZChyZXEpOwoJCX0KCgkJaXRlbXMgPSBuZXcgRE9NUXVlcnko
J2J1dHRvbicsIGNvbnRleHROb2RlKTsKCQlmb3IoaSA9IDAgOyAoaXRlbT1pdGVt
cy5nZXQoaSkpO2krKykKCQl7CgkJCWFkZEV2ZW50KGl0ZW0sICdjbGljaycsIGZ1
bmN0aW9uKCkKCQkJewoJCQkJdGhpcy52YWx1ZSA9IHRoaXMuYXR0cmlidXRlc1sn
dmFsdWUnXS52YWx1ZTsKCQkJCWlmKGlzTm90SUU3ICYmIHRoaXMudHlwZSA9PSAn
c3VibWl0JykKCQkJCS8qCgkJCQkJaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQw
MS9pbnRlcmFjdC9mb3Jtcy5odG1sI2gtMTcuMTMuMgoJCQkJCSJJZiBhIGZvcm0g
Y29udGFpbnMgbW9yZSB0aGFuIG9uZSBzdWJtaXQgYnV0dG9uLCBvbmx5IHRoZSBh
Y3RpdmF0ZWQgc3VibWl0IGJ1dHRvbiBpcyBzdWNjZXNzZnVsLiIKCQkJCQlJRTYg
ZG9lc24ndCBjYXJlIGFuZCBzZW5kcyBvdGhlciBzdWJtaXQgYnV0dG9ucyBhcyB3
ZWxsIDp8CgkJCQkgKi8KCQkJCXsKCQkJCQl2YXIgZm9ybSA9IGdldFNpYmxpbmdO
b2RlKHRoaXMsICd1cCcsICdmb3JtJyk7CgkJCQkJaWYoZm9ybSkKCQkJCQl7CgkJ
CQkJCXZhciBpdGVtcyA9IG5ldyBET01RdWVyeSgnYnV0dG9uW3R5cGU9c3VibWl0
XScsIGZvcm0pOwoJCQkJCQlmb3IodmFyIGkgPSAwLCBpdGVtIDsgKGl0ZW09aXRl
bXMuZ2V0KGkpKTtpKyspCgkJCQkJCXsKCQkJCQkJCWlmKGl0ZW0gIT0gdGhpcykK
CQkJCQkJCQlpdGVtLmRpc2FibGVkID0gdHJ1ZTsKCQkJCQkJfQoJCQkJCX0KCQkJ
CX0KCQkJfSk7CgkJfQoKCQkvKiBJRSBoYXMgcHJvYmxlbXMgd2l0aCB1bmljb2Rl
IGNoYXJhY3RlcnMgaW4gZm9ybXMgd2l0aCAnbXVsdGlwYXJ0JyBlbmNvZGluZwoJ
CSAgIEl0ICdpZ25vcmVzJyB0aGUgZmlyc3QgaW5wdXQgZmllbGQsIHNvIHdlIGFk
ZCBhIGJvZ3VzIG9uZSBmb3IgSUUgdG8gZm9yZ2V0ICovCgkJaXRlbXMgPSBuZXcg
RE9NUXVlcnkoJ2Zvcm0nLCBjb250ZXh0Tm9kZSk7CgkJZm9yKGkgPSAwIDsgKGl0
ZW09aXRlbXMuZ2V0KGkpKTtpKyspCgkJewoJCQlpZih0eXBlb2YgaXRlbSA9PSAn
dW5kZWZpbmVkJykKCQkJCWNvbnRpbnVlOwoKCQkJaWYgKCB0eXBlb2YgaXRlbS5l
bmN0eXBlICE9ICd1bmRlZmluZWQnICYmIGl0ZW0uZW5jdHlwZSA9PSAnbXVsdGlw
YXJ0L2Zvcm0tZGF0YScgKQoJCQl7CgkJCQl2YXIgaW5wdXQgPSBjcmVhdGVET01O
b2RlKCdpbnB1dCcsIHsidHlwZSIgOiAnaGlkZGVuJywgIm5hbWUiIDogJ2llLWR1
bW15J30sIFtdKTsKCgkJCQlpZiAoIGl0ZW0uZWxlbWVudHNbMF0gKQoJCQkJCWl0
ZW0uaW5zZXJ0QmVmb3JlKGlucHV0LCBpdGVtLmVsZW1lbnRzWzBdKTsKCQkJCWVs
c2UKCQkJCQlpdGVtLmluc2VydEJlZm9yZShpbnB1dCk7CgkJCX0KCQl9CgoJCXZh
ciBkaXNhYmxlZCA9IG5ldyBET01RdWVyeSgib3B0aW9uW2Rpc2FibGVkXSIsIGNv
bnRleHROb2RlKSwgaiwgcGFyZW50LCBwYXJlbnRzID0gW107CgkJZm9yKGkgPSAw
OyhpdGVtPWRpc2FibGVkLmdldChpKSk7aSsrKQoJCXsKCQkJanNjc3MoJ2FkZCcs
IGl0ZW0sICdkaXNhYmxlZCcsICcnKTsKCQkJcGFyZW50ID0gZ2V0U2libGluZ05v
ZGUoaXRlbSwgJ3VwJywgJ3NlbGVjdCcpOwoKCQkJaWYocGFyZW50cy5pbmRleE9m
KHBhcmVudCkgPCAwKQoJCQl7CgkJCQlhZGRFdmVudChwYXJlbnQsICdjaGFuZ2Un
LCBkaXNhYmxlZE9wdGlvbik7CgoJCQkJaWYoanNjc3MoJ2NoZWNrJywgcGFyZW50
Lm9wdGlvbnNbcGFyZW50LnNlbGVjdGVkSW5kZXhdLCAnZGlzYWJsZWQnKSkKCQkJ
CQlwYXJlbnQuc2VsZWN0ZWRJbmRleCA9IC0xOwoKCQkJCXBhcmVudHMucHVzaChw
YXJlbnQpOwoJCQl9CgkJfQoJCXBhcmVudHMgPSBudWxsOwoJfQoKCWlmKGlzSUUg
JiYgaXNOb3RJRTcpCgl7CgkJLy8gTVNJRSBjYW4ndCBoYW5kbGUgZmlyc3QtY2hp
bGQvbGFzdC1jaGlsZCwgc28gbGV0J3MgZml4IGl0IG91cnNlbGZzLAoJCS8vIGlu
Y2x1ZGluZyBzb21lIG90aGVyIHNlbGVjdG9ycyBhbmRlciA6YWZ0ZXIgZml4ZXMK
CQlhZGRDbGFzc1RvVGFyZ2V0cygnZGl2LmFjdGlvbi1oZWFkZXIgb2wgbGk6Zmly
c3QtY2hpbGQsIGRpdiNuYXZpZ2F0aW9uIGxpOmZpcnN0LWNoaWxkLCBkaXYjd2Vs
Y29tZS10ZXh0IGxpOmZpcnN0LWNoaWxkLCB1bC5jYWxlbmRhci1uYXZpZ2F0aW9u
LXVwIGxpOmZpcnN0LWNoaWxkJywgJ2ZpcnN0LWNoaWxkJywgY29udGV4dE5vZGUp
OwoJCWFkZENsYXNzVG9UYXJnZXRzKCdmb3JtIC5hZHZhbmNlZC1vcHRpb24gKyAq
LCBmb3JtIGR0LmFkdmFuY2VkLW9wdGlvbiArICogKyBkZC5kZC1zZXF1ZW5jZSwg
Zm9ybSBkdC5hZHZhbmNlZC1vcHRpb24gKyAqICsgZGQuZGQtc2VxdWVuY2UgKyBk
ZC5kZC1zZXF1ZW5jZScsICdhZHZhbmNlZC1vcHRpb24tYWRqYWNlbnQnLCBjb250
ZXh0Tm9kZSk7CgkJYWRkQ2xhc3NUb1RhcmdldHMoJ2Rpdi5ybWx0b29sYmFyICsg
dGV4dGFyZWEjcm1sX3RleHRhcmVhJywgJ2FkamFjZW50JywgY29udGV4dE5vZGUp
OwoKCQlpdGVtcyA9IG5ldyBET01RdWVyeSgnaW5wdXQnLCBjb250ZXh0Tm9kZSk7
CgkJZm9yKGk9MDsgKGl0ZW09aXRlbXMuZ2V0KGkpKTtpKyspCgkJewoJCQlqc2Nz
cygnYWRkJywgaXRlbSwgaXRlbS50eXBlKTsKCQl9CgoJCWFkZENsYXNzVG9UYXJn
ZXRzKCdkZC5wb2xsLXJlc3VsdCBzcGFuID4gc3BhbicsICdzdWInLCBjb250ZXh0
Tm9kZSk7CgkJYWRkQ2xhc3NUb1RhcmdldHMoJ2R0OmZpcnN0LWNoaWxkICsgZGQg
KyBkZC5wb2xsLXJlc3VsdCBzcGFuJywgJ2ZpcnN0JywgY29udGV4dE5vZGUpOwoK
CQl2YXIgX3RvZ2dsZUFkdmFuY2VkT3B0aW9ucyA9IHRvZ2dsZUFkdmFuY2VkT3B0
aW9uczsKCQkvKiBwcmV2ZW50IHJlcGFpbnQgcHJvYmxlbXMgaW4gSUU2ICovCgkJ
dG9nZ2xlQWR2YW5jZWRPcHRpb25zID0gZnVuY3Rpb24oKQoJCXsKCQkJZG9jdW1l
bnQuYm9keS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwoJCQkgX3RvZ2dsZUFkdmFu
Y2VkT3B0aW9ucygpOwoJCQlkb2N1bWVudC5ib2R5LnN0eWxlLmRpc3BsYXkgPSAn
YmxvY2snOwoJCX0KCX0KCWVsc2UgaWYoaXNXZWJLaXQpCgl7CgkJLy8gZmFuY3lm
eSB0aGUgc2VhcmNoZmllbGRzOyBtYWtlICdtIHByZXR0eQoJCWl0ZW1zID0gbmV3
IERPTVF1ZXJ5KCdpbnB1dC5zZWFyY2hmaWVsZCcsIGNvbnRleHROb2RlKTsKCQl2
YXIgYSA9IGNyZWF0ZURPTU5vZGUoJ2EnLCB7ImhyZWYiIDogYm9hcmRfc2NyaXB0
X3VybH0sIFtdKTsKCQlmb3IoaSA9IDA7IChpdGVtPWl0ZW1zLmdldChpKSk7aSsr
KQoJCXsKCQkJaXRlbS5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnc2VhcmNoJyk7CgoJ
CQkvLyBhcHBsZSBwcmVmZXJzIGEgbmwucmVhY3Qud3d3LnNlYXJjaCBzeW50YXgK
CQkJaXRlbS5zZXRBdHRyaWJ1dGUoJ2F1dG9zYXZlJywgYS5ob3N0LnNwbGl0KCcu
JykucmV2ZXJzZSgpLmpvaW4oJy4nKSsnLnNlYXJjaCcpOwoJCQlpdGVtLnNldEF0
dHJpYnV0ZSgncmVzdWx0cycsIDUpOwoJCQlpdGVtLnNldEF0dHJpYnV0ZSgncGxh
Y2Vob2xkZXInLCBnZXRUZXh0KCdub3JtYWwnLCAnc2VhcmNoX3dlYmtpdCcpICk7
CgkJfQoKCQkvLyBGaXggYSBmbG93LXJlbmRlciBwcm9ibGVtCgkJaXRlbXMgPSBu
ZXcgRE9NUXVlcnkoJ2RpdiNjb250ZW50LCBkaXYjZm9vdGVyJywgY29udGV4dE5v
ZGUpOwoJCWZvcihpID0gMDsgKGl0ZW09aXRlbXMuZ2V0KGkpKTtpKyspCgkJCWl0
ZW0uc3R5bGUub3ZlcmZsb3cgPSAndmlzaWJsZSc7Cgl9Cn07CgpmdW5jdGlvbiBh
dHRhY2hSTUxUb29sYmFyKHRhcmdldHMpCnsKCXZhciBybWx0ZXh0YXJlYXMgPSBn
ZXRUYXJnZXRzKHRhcmdldHMsICd0ZXh0YXJlYSNybWxfdGV4dGFyZWEnKTsKCglp
ZihybWx0ZXh0YXJlYXMubGVuZ3RoID09IDApCgkJcmV0dXJuOwoKCWZvcih2YXIg
aSA9IDAsIGl0ZW07IChpdGVtPXJtbHRleHRhcmVhcy5nZXQoaSkpO2krKykKCXsK
CQlpdGVtLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGdldFRvb2xiYXIoYm9hcmRf
ZG9jdW1lbnRsaWJyYXJ5X2FsbG93ZWQpLCBpdGVtKTsKCQlpZihpc0lFKQoJCXsK
CQkJYWRkRXZlbnQoaXRlbSwgJ2NsaWNrJywgc3RvcmVDdXJzb3IpOwoJCQlhZGRF
dmVudChpdGVtLCAna2V5dXAnLCBzdG9yZUN1cnNvcik7CgkJCWFkZEV2ZW50KGl0
ZW0sICdzZWxlY3QnLCBzdG9yZUN1cnNvcik7CgkJfQoJfQoKCS8qIGRpcnR5IElF
IGhhY2sgdG8gZm9yY2UgcmVmbG93ICovCglpZihybWx0ZXh0YXJlYXMubGVuZ3Ro
ID4gMCAmJiBpc0lFKQoJewoJCWRvY3VtZW50LmJvZHkuc3R5bGUuZGlzcGxheSA9
ICdub25lJzsKCQlkb2N1bWVudC5ib2R5LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2sn
OwoJfQp9OwoKZnVuY3Rpb24gbG9nb3V0U2Vzc2lvbnModGFyZ2V0cykKewoJaWYo
Ym9hcmRfYWN0aW9uICE9ICdsb2dvdXQnKQoJCXJldHVybjsKCgl2YXIgc2Vzc2lv
bnMgPSBnZXRUYXJnZXRzKHRhcmdldHMsICdpbnB1dFt0eXBlPSJjaGVja2JveCJd
Jyk7CgoJZm9yKHZhciBpPTAsIGl0ZW07IChpdGVtPXNlc3Npb25zLmdldChpKSk7
IGkrKykKCXsKCQlhZGRFdmVudChpdGVtLCAnY2hhbmdlJywgX2xvZ291dFNlc3Np
b25zKTsKCQlhZGRFdmVudChpdGVtLCAnY2xpY2snLCBfbG9nb3V0U2Vzc2lvbnMp
OwoJfQp9OwoKZnVuY3Rpb24gX2xvZ291dFNlc3Npb25zKCkKewoJdmFyIGxvZ291
dE9wdGlvbnMgPSBuZXcgRE9NUXVlcnkoJ2Zvcm0jZm9ybS1sb2dvdXQgaW5wdXRb
dHlwZT0icmFkaW8iXScpLCBsb2dvdXRCeVNlc3Npb24gPSBuZXcgRE9NUXVlcnko
J2lucHV0I2xvZ291dF9ieV9zZXNzaW9uJyk7CgoJZm9yKHZhciBpPTAsIGl0ZW07
IChpdGVtPWxvZ291dE9wdGlvbnMuZ2V0KGkpKTtpKyspCgl7CgkJaXRlbS5jaGVj
a2VkID0gZmFsc2U7Cgl9CgoJbG9nb3V0QnlTZXNzaW9uLmdldCgwKS5jaGVja2Vk
ID0gdHJ1ZTsKfTsKCmZ1bmN0aW9uIHNldHVwVG9nZ2xlRm9sZGVycygpCnsKCXZh
ciBtZW51ID0gbmV3IERPTVF1ZXJ5KCdkaXYuZGlzY3Vzc2lvbi1mb2xkZXJzIGxp
Jyk7CgoJaWYobWVudS5sZW5ndGggPT0gMSkKCXsKCQlhZGRFdmVudChtZW51Lmdl
dCgwKSwgJ2NsaWNrJywgdG9nZ2xlRm9sZGVycyk7Cgl9Cn07CgpmdW5jdGlvbiB0
b2dnbGVGb2xkZXJzKGUpCnsKCWUuc3RvcFByb3BhZ2F0aW9uKCk7CgoJdmFyIGNo
aWxkcyA9IG5ldyBET01RdWVyeSgndWwnLCB0aGlzKTsKCglpZihjaGlsZHMubGVu
Z3RoID4gMCkKCXsKCQlqc2NzcygndG9nZ2xlJywgdGhpcywgJ2FjdGl2ZScpOwoJ
fQp9OwoKZnVuY3Rpb24gdG9nZ2xlVGFnY2xvdWRPdmVyZmxvdyhlKQp7Cgl2YXIg
dGFnY2xvdWQgPSBuZXcgRE9NUXVlcnkoJ2xpLmZvcnVtLXRhZ2Nsb3VkIGRpdicp
LmdldCgwKTsKCWlmKCF0YWdjbG91ZCkKCQlyZXR1cm47CgoJaWYgKG5ldyBET01R
dWVyeSgnYScsIHRhZ2Nsb3VkKS5sZW5ndGggPCAxMCkKCQlyZXR1cm47CgoJdmFy
IG1vcmUgPSBjcmVhdGVET01Ob2RlKCdzcGFuJywgeydldmVudCcgOiBbJ2NsaWNr
JywgZnVuY3Rpb24oZSkgeyBqc2NzcygndG9nZ2xlJywgdGFnY2xvdWQsICdzaG93
LWFsbCcpOyBlLnN0b3BQcm9wYWdhdGlvbigpOyB9XSB9LCBbICcgJyArIGdldFRl
eHQoJ25vcm1hbCcsICdtb3JlJykgXSk7CgoJdGFnY2xvdWQuYXBwZW5kQ2hpbGQo
bW9yZSk7Cn07CgovKiB1c2VkIGZvciBxdW90ZWluZyBtZXNzYWdlcyB0byB0ZXh0
YXJlYSAqLwp2YXIgcmF3X21lc3NhZ2VzID0gW107CnZhciBmb3JtUmVxdWlyZWRG
aWVsZHNET01RdWVyeSA9ICdkdC5yZXF1aXJlZCArIGRkIGlucHV0LCBkdC5yZXF1
aXJlZCArIGRkIHRleHRhcmVhLCBkdC5yZXF1aXJlZCArIGRkIHNlbGVjdCwgZHRb
Y2xhc3NePSJyZXF1aXJlcy1pZC0iXSArIGRkIGlucHV0LCBkdFtjbGFzc149InJl
cXVpcmVzLWlkLSJdICsgZGQgdGV4dGFyZWEsIGR0W2NsYXNzXj0icmVxdWlyZXMt
aWQtIl0gKyBkZCBzZWxlY3QnOwp2YXIgZm9ybVZhbGlkYXRlRmllbGRzRE9NUXVl
cnkgPSBmb3JtUmVxdWlyZWRGaWVsZHNET01RdWVyeSArICcsIGlucHV0W2NsYXNz
Xj0idmFsaWRhdGUtIl0sIGlucHV0I3B3ZDIsIGlucHV0I2tleXdvcmRzJzsKdmFy
IGZvY3VzYWJsZUVsZW1lbnRzOwoKZnVuY3Rpb24gZm9jdXNGaXJzdEZvcm1GaWVs
ZCh0YXJnZXRzKQp7Cglmb2N1c2FibGVFbGVtZW50cyA9IGdldFRhcmdldHModGFy
Z2V0cywgJ2lucHV0LmZvY3VzYWJsZSwgdGV4dGFyZWEuZm9jdXNhYmxlJyk7CgoJ
aWYoZm9jdXNhYmxlRWxlbWVudHMubGVuZ3RoID4gMCkKCXsKCQlzZXRUaW1lb3V0
KCJmb2N1c2FibGVFbGVtZW50cy5nZXQoMCkuZm9jdXMoKTsiLCAxMDApOwoJfQp9
OwoKZnVuY3Rpb24gdmFsaWRhdGVGb3Jtcyh0YXJnZXRzKQp7Cgl2YXIgaXRlbXMg
PSBnZXRUYXJnZXRzKHRhcmdldHMsICdmb3JtJyk7CgoJaWYoaXRlbXMubGVuZ3Ro
ID09IDApCgkJcmV0dXJuOwoKCWZvcih2YXIgaSA9IDAsIGl0ZW07IChpdGVtPWl0
ZW1zLmdldChpKSk7aSsrKQoJewoJCWFkZEV2ZW50KGl0ZW0sICdzdWJtaXQnLCBm
dW5jdGlvbihlKSB7IGlmKCF2YWxpZGF0ZUZvcm0odGhpcykpIHsgZS5wcmV2ZW50
RGVmYXVsdCgpOyB9IH0gKTsKCX0KCglpdGVtcyA9IG5ldyBET01RdWVyeShmb3Jt
UmVxdWlyZWRGaWVsZHNET01RdWVyeSk7CglpZihpdGVtcy5sZW5ndGggPiAwKQoJ
ewoJCXZhciB0ZXh0ID0gbmV3IERPTVF1ZXJ5KCdkaXYjYWN0aW9uLWhlYWRlciBw
JyksIHA7CgoJCWlmKHRleHQubGVuZ3RoID4gMCkKCQl7CgkJCXAgPSB0ZXh0Lmdl
dCgwKTsKCQkJcC5hcHBlbmRDaGlsZCgKCQkJCWNyZWF0ZURPTU5vZGUobnVsbCwg
e30sCgkJCQlbCgkJCQkJY3JlYXRlRE9NTm9kZSgnYnInLCB7fSwgWyBdKSwKCQkJ
CQljcmVhdGVET01Ob2RlKCdzcGFuJywge30sIFsgZ2V0VGV4dCgnZm9ybXMnLCAn
bWFya2VkX2ZpZWxkcycpIF0pLAoJCQkJCWNyZWF0ZURPTU5vZGUoJ3NwYW4nLCB7
ImNsYXNzIiA6J3JlcXVpcmVkJ30sIFsnKiddKSwKCQkJCQljcmVhdGVET01Ob2Rl
KCdzcGFuJywge30sIFsgZ2V0VGV4dCgnZm9ybXMnLCAncmVxdWlyZWQnKSBdKQoJ
CQkJXSkKCQkJKTsKCQl9CgkJZWxzZQoJCXsKCQkJcCA9IGNyZWF0ZURPTU5vZGUo
J3AnLCB7fSwKCQkJCVsKCQkJCQljcmVhdGVET01Ob2RlKCdzcGFuJywge30sIFsg
Z2V0VGV4dCgnZm9ybXMnLCAnbWFya2VkX2ZpZWxkcycpIF0pLAoJCQkJCWNyZWF0
ZURPTU5vZGUoJ3NwYW4nLCB7ImNsYXNzIiA6J3JlcXVpcmVkJ30sIFsnKiddKSwK
CQkJCQljcmVhdGVET01Ob2RlKCdzcGFuJywge30sIFsgZ2V0VGV4dCgnZm9ybXMn
LCAncmVxdWlyZWQnKSBdKQoJCQkJXQoJCQkpOwoKCQkJdmFyIGgyID0gbmV3IERP
TVF1ZXJ5KCdkaXYjYWN0aW9uLWhlYWRlciBoMicpLmdldCgwKTsKCQkJaWYoaDIp
CgkJCQloMi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShwLCBoMik7CgkJfQoJfQoK
CWl0ZW1zID0gbmV3IERPTVF1ZXJ5KGZvcm1WYWxpZGF0ZUZpZWxkc0RPTVF1ZXJ5
KTsKCWZvcih2YXIgaiA9IDA7IChpdGVtPWl0ZW1zLmdldChqKSk7aisrKQoJewoJ
CWFkZEV2ZW50KGl0ZW0sICdjaGFuZ2UnLCBmdW5jdGlvbigpIHsgdmFsaWRhdGVG
aWVsZCh0aGlzKTsgfSAgKTsKCX0KfTsKCmZ1bmN0aW9uIGhpZGVBZHZhbmNlZE9w
dGlvbnModGFyZ2V0cykKewoJdmFyIGFkdmFuY2VkT3B0aW9ucyA9IGdldFRhcmdl
dHModGFyZ2V0cywgJ2R0LmFkdmFuY2VkLW9wdGlvbicpOwoKCWlmKGZvcm1zX3No
b3dfYWR2YW5jZWRfb3B0aW9ucykKCXsKCQlqc2NzcygnYWRkJywgZG9jdW1lbnQu
Ym9keSwgJ3Nob3ctYWR2YW5jZWQtb3B0aW9ucycsICcnKTsKCX0KCWVsc2UgaWYo
YWR2YW5jZWRPcHRpb25zLmxlbmd0aCA+IDApCgl7CgkJaWYoKG5ldyBET01RdWVy
eSgnc3BhbiN0b2dnbGUtYWR2YW5jZWQtb3B0aW9ucycsIGRvY3VtZW50KSkubGVu
Z3RoID09IDApCgkJewoJCQl2YXIgcCA9IG5ldyBET01RdWVyeSgnZGl2I2FjdGlv
bi1oZWFkZXIgcCcsIGRvY3VtZW50KS5nZXQoMCk7CgkJCWlmKCFwKQoJCQl7CgkJ
CQlwID0gY3JlYXRlRE9NTm9kZSgncCcsIHt9LCBbXSk7CgkJCQl2YXIgaDIgPSBu
ZXcgRE9NUXVlcnkoJ2RpdiNhY3Rpb24taGVhZGVyIGgyJywgZG9jdW1lbnQpLmdl
dCgwKTsKCQkJCWlmKCFoMikKCQkJCQlyZXR1cm47CgoJCQkJaDIucGFyZW50Tm9k
ZS5pbnNlcnRCZWZvcmUocCwgaDIpOwoJCQl9CgoJCQlwLmFwcGVuZENoaWxkKAoJ
CQkJY3JlYXRlRE9NTm9kZShudWxsLCB7fSwKCQkJCVsKCQkJCQljcmVhdGVET01O
b2RlKCdicicsIHt9LCBbIF0pLAoJCQkJCWNyZWF0ZURPTU5vZGUoJ3NwYW4nLAoJ
CQkJCQkJewoJCQkJCQkJCSdldmVudCcgOiBbJ2NsaWNrJywgdG9nZ2xlQWR2YW5j
ZWRPcHRpb25zXSwKCQkJCQkJCQknaWQnIAk6ICd0b2dnbGUtYWR2YW5jZWQtb3B0
aW9ucycsCgkJCQkJCQkJJ2NsYXNzJyA6ICdjbGlja2FibGUnLAoJCQkJCQkJCSdu
YW1lJwk6ICdzaG93QWR2YW5jZWRPcHRpb25zJwoJCQkJCQkJfSwKCQkJCQkJCVsg
Z2V0VGV4dCgnZm9ybXMnLCAnc2hvd19hZHZhbmNlZF9vcHRpb25zJykgXQoJCQkJ
CSkKCQkJCV0pCgkJCSk7CgkJfQoKCQlpZihkb2N1bWVudC5sb2NhdGlvbi5oYXNo
ID09ICcjc2hvd0FkdmFuY2VkT3B0aW9ucycpCgkJewoJCQl0b2dnbGVBZHZhbmNl
ZE9wdGlvbnMoKTsKCQl9Cgl9Cn0KCmZ1bmN0aW9uIHRvZ2dsZUFkdmFuY2VkT3B0
aW9ucygpCnsKCXZhciBpdGVtcyA9IG5ldyBET01RdWVyeSgnZm9ybScpOwoKCWlm
KGl0ZW1zLmxlbmd0aCA9PSAwKQoJCXJldHVybjsKCgl2YXIgaW5kaWNhdG9yID0g
bmV3IERPTVF1ZXJ5KCdzcGFuI3RvZ2dsZS1hZHZhbmNlZC1vcHRpb25zJykuZ2V0
KDApOwoKCWlmICghaW5kaWNhdG9yKQoJCXJldHVybjsKCglmb3IodmFyIGk9MCwg
aXRlbTsgKGl0ZW09aXRlbXMuZ2V0KGkpKTsgaSsrKQoJewoJCWpzY3NzKCd0b2dn
bGUnLCBpdGVtLCAnc2hvdy1hZHZhbmNlZC1vcHRpb25zJyk7CgkJaWYoanNjc3Mo
J2NoZWNrJywgaXRlbSwgJ3Nob3ctYWR2YW5jZWQtb3B0aW9ucycpKQoJCXsKCQkJ
aWYoaXNJRSkKCQkJewoJCQkJaXRlbS5hdHRyaWJ1dGVzWydhY3Rpb24nXS52YWx1
ZSA9IGl0ZW0uYXR0cmlidXRlc1snYWN0aW9uJ10udmFsdWUucmVwbGFjZSgvIygu
KykkLywgJycpICsgJyNzaG93QWR2YW5jZWRPcHRpb25zJzsKCQkJfQoJCQllbHNl
CgkJCXsKCQkJCWl0ZW0uc2V0QXR0cmlidXRlKCdhY3Rpb24nLCBpdGVtLmdldEF0
dHJpYnV0ZSgnYWN0aW9uJykucmVwbGFjZSgvIyguKykkLywgJycpICsgJyNzaG93
QWR2YW5jZWRPcHRpb25zJyk7CgkJCX0KCgkJCWlmKGkgPiAwKQoJCQkJY29udGlu
dWU7CgoJCQlpZighaXNJRSkKCQkJCXdpbmRvdy5sb2NhdGlvbi5oYXNoID0gJyNz
aG93QWR2YW5jZWRPcHRpb25zJzsKCgkJCWluZGljYXRvci5maXJzdENoaWxkLm5v
ZGVWYWx1ZSA9IGdldFRleHQoJ2Zvcm1zJywgJ2hpZGVfYWR2YW5jZWRfb3B0aW9u
cycpOwoJCX0KCQllbHNlCgkJewoJCQlpZihpc0lFKQoJCQl7CgkJCQlpdGVtLmF0
dHJpYnV0ZXNbJ2FjdGlvbiddLnZhbHVlID0gaXRlbS5hdHRyaWJ1dGVzWydhY3Rp
b24nXS52YWx1ZS5yZXBsYWNlKC8jKC4rKSQvLCAnJyk7CgkJCX0KCQkJZWxzZQoJ
CQl7CgkJCQlpdGVtLnNldEF0dHJpYnV0ZSgnYWN0aW9uJywgaXRlbS5nZXRBdHRy
aWJ1dGUoJ2FjdGlvbicpLnJlcGxhY2UoLyMoLispJC8sICcnKSApOwoJCQl9CgoJ
CQlpZihpID4gMCkKCQkJCWNvbnRpbnVlOwoKCQkJaWYoIWlzSUUpCgkJCXsKCQkJ
CWlmIChpbmRpY2F0b3IuaWQgPT0gJ3Nob3dBZHZhbmNlZE9wdGlvbnMnKQoJCQkJ
CWRvY3VtZW50LmxvY2F0aW9uLmhhc2ggPSBpbmRpY2F0b3IuaWQ7CgkJCQllbHNl
CgkJCQkJZG9jdW1lbnQubG9jYXRpb24uaGFzaCA9ICdoaWRlQWR2YW5jZWRPcHRp
b25zJzsgLy9Eb2VzIG5vdCBleGlzdCwgYnV0IHNldHRpbmcgdG8gJycgZG9lcyBm
dW5reSB0aGluZ3MKCQkJfQoJCQlpbmRpY2F0b3IuZmlyc3RDaGlsZC5ub2RlVmFs
dWUgPSBnZXRUZXh0KCdmb3JtcycsICdzaG93X2FkdmFuY2VkX29wdGlvbnMnKTsK
CQl9Cgl9Cn07CgoKZnVuY3Rpb24gdmFsaWRhdGVNYXhMZW5ndGgoKQp7CgkvLyBT
am9uOiB1aXRnZXNjaGFrZWx0IG5hIG92ZXJsZWcgbWV0IE1pY2hpZWw7IGRpdCB2
b2xkb2V0IG5pZXQgdm9sZG9lbmRlCglyZXR1cm4gZmFsc2U7CgoJaWYodGhpcy50
YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ2lucHV0JyAmJiB0eXBlb2YgdGhpcy5t
YXhMZW5ndGggIT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5tYXhMZW5ndGggPiAwKQoJ
ewoJCWlmKHRoaXMudmFsdWUubGVuZ3RoID09IHRoaXMubWF4TGVuZ3RoKQoJCXsK
CQkJYWxlcnRVc2VyKHRoaXMsIGdldFRleHQoJ2Zvcm1zJywgJ21heF9jaGFycycs
IHRoaXMubWF4TGVuZ3RoKSk7CgkJfQoJCWVsc2UKCQl7CgkJCXVuQWxlcnRVc2Vy
KHRoaXMpOwoJCX0KCX0KfTsKCmZ1bmN0aW9uIHZhbGlkYXRlRm9ybShmb3JtKQp7
Cgl2YXIgaXRlbXMgPSBuZXcgRE9NUXVlcnkoZm9ybVZhbGlkYXRlRmllbGRzRE9N
UXVlcnksIGZvcm0pOwoJdmFyIGVycm9ycyA9IGZhbHNlOwoKCWZvciAodmFyIGkg
PSAwLCBpdGVtOyAoaXRlbT1pdGVtcy5nZXQoaSkpO2krKykKCXsKCQllcnJvcnMg
PSB2YWxpZGF0ZUZpZWxkKGl0ZW0sIHRydWUpIHx8IGVycm9yczsKCX0KCglpZiAo
ZXJyb3JzKQoJewoJCXZhciBmaWVsZHMgPSBuZXcgRE9NUXVlcnkoJ2R0LmZpZWxk
LWFsZXJ0ICsgZGQgaW5wdXQnKTsKCgkJaWYgKGZpZWxkcy5sZW5ndGggPiAwKQoJ
CXsKCQkJaWYgKCFqc2NzcygnY2hlY2snLCBmaWVsZHMuZ2V0KDApLmZvcm0sICdz
aG93LWFkdmFuY2VkLW9wdGlvbnMnKSkKCQkJewoJCQkJdmFyIGhpZGRlbkZpZWxk
cyA9IG5ldyBET01RdWVyeSgnaDMuYWR2YW5jZWQtb3B0aW9uIGR0LmZpZWxkLWFs
ZXJ0ICsgZGQgaW5wdXQsIGR0LmZpZWxkLWFsZXJ0LmFkdmFuY2VkLW9wdGlvbiAr
IGRkIGlucHV0Jyk7CgoJCQkJaWYgKGhpZGRlbkZpZWxkcy5sZW5ndGggPiAwKQoJ
CQkJCXRvZ2dsZUFkdmFuY2VkT3B0aW9ucygpOwoJCQl9CgoJCQlmaWVsZHMuZ2V0
KDApLmZvY3VzKCk7CgkJfQoJfQoKCXJldHVybiAhZXJyb3JzOwp9OwoKLyoKCXJl
dHVybiBmYWxzZSBpcyBmaWVsZCBpcyB2YWxpZAoJcmV0dXJuIHRydWUgaXMgZmll
bGQgaXMgbm90IHZhbGlkCiovCmZ1bmN0aW9uIHZhbGlkYXRlRmllbGQob2IsIHJl
dCkKewoJdmFyIGZpZWxkID0gdGhpcy50YWdOYW1lID8gIHRoaXMgOiBvYiwgZW1w
dHkgPSBmYWxzZTsKCgl1bkFsZXJ0VXNlcihmaWVsZCk7CgoJaWYgKCBqc2Nzcygn
Y2hlY2snLCBmaWVsZCwgJ25vdC1yZXF1aXJlZCcpICkKCQlyZXR1cm4gZmFsc2U7
CgoJc3dpdGNoKGZpZWxkLnR5cGUpCgl7CgkJY2FzZSAnc2VsZWN0LW9uZSc6CgkJ
Y2FzZSAnc2VsZWN0LW11bHRpcGxlJzoKCQkJZW1wdHkgPSAoZmllbGQuc2VsZWN0
ZWRJbmRleCA9PSAtMSkgfHwgKGZpZWxkLnZhbHVlID09ICcnKSA7CgkJCWJyZWFr
OwoJCWNhc2UgJ2NoZWNrYm94JzoKCQkJZW1wdHkgPSAhZmllbGQuY2hlY2tlZDsK
CQkJYnJlYWs7CgkJZGVmYXVsdDoKCQkJZW1wdHkgPSAoZmllbGQudmFsdWUgPT0g
JycgPyB0cnVlIDogZmFsc2UpOwoJCQlicmVhazsKCX0KCglpZighZW1wdHkpCgl7
CgkJc3dpdGNoKGJvYXJkX2FjdGlvbikKCQl7CgkJCWNhc2UgJ2NyZWF0ZV91c2Vy
JzoKCQkJY2FzZSAnZWRpdF91c2VyJzoKCQkJCXN3aXRjaChmaWVsZC5pZCkKCQkJ
CXsKCQkJCQljYXNlICdwd2QyJzoKCQkJCQkJdmFsaWRhdGVQYXNzd29yZChmaWVs
ZCk7CgkJCQkJYnJlYWs7CgkJCQkJY2FzZSAnbmlja25hbWUnOgoJCQkJCQlpZihm
aWVsZC52YWx1ZS5sZW5ndGggPCAzKQoJCQkJCQl7CgkJCQkJCQlhbGVydFVzZXIo
ZmllbGQsIGdldFRleHQoJ2Zvcm1zJywgJ25hbWVfdG9vX3Nob3J0JykpOwoJCQkJ
CQl9CgkJCQkJCWVsc2UgaWYoIXJldCkKCQkJCQkJewoJCQkJCQkJdmFsaWRhdGVO
aWNrbmFtZShmaWVsZCk7CgkJCQkJCX0KCQkJCQlicmVhazsKCQkJCQljYXNlICdl
bWFpbCc6CgkJCQkJCWlmKCFyZXQpCgkJCQkJCXsKCQkJCQkJCXZhbGlkYXRlRW1h
aWwoZmllbGQpOwoJCQkJCQkJdmFsaWRhdGVFbWFpbERvbWFpbihmaWVsZCk7CgkJ
CQkJCX0KCQkJCQlicmVhazsKCQkJCX0KCQkJZGVmYXVsdCA6CgkJCQl2YXIgcmVn
LCByZXMsIHZhbHVlID0gZmllbGQudmFsdWU7CgoJCQkJaWYoanNjc3MoJ2NoZWNr
JywgZmllbGQsICd2YWxpZGF0ZS1lbWFpbCcsICcnKSkKCQkJCXsKCQkJCQlyZWcg
PSAvXltcdy1dKyhbXC5cK11bXHctXSspKkAoW1x3LV0rXC4pK1thLXpBLVpdezIs
N30kLzsKCQkJCQlyZXMgPSByZWcudGVzdCh2YWx1ZSk7CgkJCQkJaWYoIXJlcykK
CQkJCQl7CgkJCQkJCWFsZXJ0VXNlcihmaWVsZCwgZ2V0VGV4dCgnZm9ybXMnLCAn
ZW1haWxfaW5jb3JyZWN0JykpOwoJCQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCQl9CgkJ
CQl9CgkJCQlpZihqc2NzcygnY2hlY2snLCBmaWVsZCwgJ3ZhbGlkYXRlLXVybCcs
ICcnKSkKCQkJCXsKCQkJCQlpZiAoanNjc3MoJ2NoZWNrJywgZmllbGQsICduby1o
dHRwJywgJycpKQoJCQkJCQlyZWcgPSAvXigoWzAtOV17MSwzfVwuKXszfVswLTld
ezEsM318XFsoW2EtZjAtOTpdKylcXXwoWzAtOWEtel8hfionXChcKS1dK1wuKSoo
WzAtOWEtel1bMC05YS16LV17MCw2MX0pP1swLTlhLXpdXC5bYS16XXsyLDZ9KShc
Lz98KFwvWzAtOWEtel8hfionXChcKVwuOz86QCY9KyQsJSMtXSspK1wvPykkL2k7
CgkJCQkJZWxzZQoJCQkJCQlyZWcgPSAvXihodHRwcz86XC9cLykoKFswLTldezEs
M31cLil7M31bMC05XXsxLDN9fFxbKFthLWYwLTk6XSspXF18KFswLTlhLXpfIX4q
J1woXCktXStcLikqKFswLTlhLXpdWzAtOWEtei1dezAsNjF9KT9bMC05YS16XVwu
W2Etel17Miw2fSkoKFwvPyl8KFwvWzAtOWEtel8hfionXChcKVwuOz86QCY9KyQs
JSMtXSspK1wvPykkL2k7CgoJCQkJCXJlcyA9IHJlZy50ZXN0KHZhbHVlKTsKCQkJ
CQlpZighcmVzKQoJCQkJCXsKCQkJCQkJYWxlcnRVc2VyKGZpZWxkLCBnZXRUZXh0
KCdmb3JtcycsICd1cmxfaW5jb3JyZWN0JykpOwoJCQkJCQlyZXR1cm4gdHJ1ZTsK
CQkJCQl9CgkJCQl9CgkJCQlpZihqc2NzcygnY2hlY2snLCBmaWVsZCwgJ3ZhbGlk
YXRlLWludGVnZXInLCAnJykgfHwganNjc3MoJ2NoZWNrJywgZmllbGQsICd2YWxp
ZGF0ZS1zb2ZpbnVtbWVyJywgJycpKQoJCQkJewoJCQkJCXJlZyA9IC9eWzAtOV0q
JC87CgkJCQkJcmVzID0gcmVnLnRlc3QodmFsdWUpOwoJCQkJCWlmKCFyZXMpCgkJ
CQkJewoJCQkJCQlhbGVydFVzZXIoZmllbGQsIGdldFRleHQoJ2Zvcm1zJywgJ251
bWVyaWNfb25seScpKTsKCQkJCQkJcmV0dXJuIHRydWU7CgkJCQkJfQoJCQkJfQoJ
CQkJaWYoanNjc3MoJ2NoZWNrJywgZmllbGQsICd2YWxpZGF0ZS1zb2ZpbnVtbWVy
JywgJycpKQoJCQkJewoJCQkJCWlmKHZhbHVlLmxlbmd0aCAhPSA5KQoJCQkJCXsK
CQkJCQkJYWxlcnRVc2VyKGZpZWxkLCBnZXRUZXh0KCdmb3JtcycsICdsZW5ndGhf
bm90XzknKSk7CgkJCQkJCXJldHVybiB0cnVlOwoJCQkJCX0KCQkJCQkvKiBzb3Vy
Y2U6IGh0dHA6Ly9jZ2kuZGl0Lm5sL3NvZmkuY2dpICovCgkJCQkJdmFyIHRvdGFs
ID0gMDsKCQkJCQlmb3IgKGk9MTsgaTw9ODsgaSsrKQoJCQkJCXsKCQkJCQkJdG90
YWwgKz0gKDEwLWkpICogdmFsdWVbaS0xXTsKCQkJCQl9CgkJCQkJdG90YWwgKz0g
KC0xKSAqIHZhbHVlWzhdOwoKCQkJCQlpZiAoKHRvdGFsICUgMTEpID4gMCkKCQkJ
CQl7CgkJCQkJCWFsZXJ0VXNlcihmaWVsZCwgZ2V0VGV4dCgnZm9ybXMnLCAnc29m
aW51bW1lcl9taXNtYXRjaCcpKTsKCQkJCQkJcmV0dXJuIHRydWU7CgkJCQkJfQoJ
CQkJfQoKCQkJCXN3aXRjaChmaWVsZC5pZCkKCQkJCXsKCQkJCQljYXNlICdrZXl3
b3Jkcyc6CgkJCQkJCS8qcmVnID0gL1teXHcwLTlfXC0uXS87Ki8KCQkJCQkJdmFy
IHZhbHVlcyA9IHZhbHVlLnNwbGl0KCcgJyk7CgkJCQkJCWZvcihpPTA7KHZhbHVl
PXZhbHVlc1tpXSk7aSsrKQoJCQkJCQl7CgkJCQkJCQlpZih2YWx1ZS5sZW5ndGgg
PiA1MCkKCQkJCQkJCXsKCQkJCQkJCQlhbGVydFVzZXIoZmllbGQsIGdldFRleHQo
J2Zvcm1zJywgJ2tleXdvcmRfdG9vX2xvbmcnLCB2YWx1ZSkpOwoJCQkJCQkJCXJl
dHVybiB0cnVlOwoJCQkJCQkJfQoKCQkJCQkJCS8qcmVzID0gcmVnLnRlc3QodmFs
dWUpOwoJCQkJCQkJaWYocmVzKQoJCQkJCQkJewoJCQkJCQkJCWFsZXJ0VXNlcihm
aWVsZCwgZ2V0VGV4dCgnZm9ybXMnLCAna2V5d29yZHNfaWxsZWdhbF9jaGFyYWN0
ZXInLCB2YWx1ZSkpOwoJCQkJCQkJCXJldHVybiB0cnVlOwoJCQkJCQkJfSovCgkJ
CQkJCX0KCQkJCQlicmVhazsKCQkJCX0KCgkJCQkvLyBJZiB5b3Ugd2FudCBjdXN0
b20tZmllbGQgdmFsaWRhdGlvbiwgY3JlYXRlIGZ1bmN0aW9ucyBhbmQgYWRkIGZ1
bmN0aW9ubmFtZXMgdG8gYXJyYXkgJ2V4dHJhVmFsaWRhdGVGaWVsZHMnCgkJCQlp
Zih0eXBlb2YgZXh0cmFWYWxpZGF0ZUZpZWxkcyA9PSAnb2JqZWN0JykKCQkJCXsK
CQkJCQlmb3IoaT0wOyBpPGV4dHJhVmFsaWRhdGVGaWVsZHMubGVuZ3RoOyBpKysp
CgkJCQkJewoJCQkJCQlleHRyYVZhbGlkYXRlRmllbGRzW2ldKGZpZWxkKTsKCQkJ
CQl9CgkJCQl9CgkJCWJyZWFrOwoJCX0KCX0KCgl2YXIgZHRGaWVsZE5hbWUgPSBn
ZXRTaWJsaW5nTm9kZShmaWVsZC5wYXJlbnROb2RlLCAncHJldmlvdXMnLCAnZHQn
KTsKCWlmKGR0RmllbGROYW1lKQoJewoJCXZhciBpc1JlcXVpcmVkICAgPSBqc2Nz
cygnY2hlY2snLCBkdEZpZWxkTmFtZSwgJ3JlcXVpcmVkJyk7CgoJCS8qIE1hcmsg
b3RoZXIgZmllbGRzIGFzIHJlcXVpcmVkIHdoZW4gdGhpcyBmaWVsZCBpcyBub3Qg
ZW1wdHkgKi8KCQl2YXIgcmVzID0gL3JlcXVpcmVzXC1pZFwtKFthLXowLTlfXSsp
L2kuZXhlYyhkdEZpZWxkTmFtZS5jbGFzc05hbWUpOwoJCWlmKHJlcyAmJiByZXNb
MF0pCgkJewoJCQl2YXIgaW5wdXRGaWVsZCA9IG5ldyBET01RdWVyeSgnIycgKyBy
ZXNbMV0pLmdldCgwKTsKCQkJaWYoaW5wdXRGaWVsZCkKCQkJewoJCQkJaWYoIWVt
cHR5KQoJCQkJCWpzY3NzKCdhZGQnLCBnZXRTaWJsaW5nTm9kZShpbnB1dEZpZWxk
LnBhcmVudE5vZGUsICdwcmV2aW91cycsICdkdCcpLCAncmVxdWlyZWQnKTsKCQkJ
CWVsc2UKCQkJCQlqc2NzcygncmVtb3ZlJywgZ2V0U2libGluZ05vZGUoaW5wdXRG
aWVsZC5wYXJlbnROb2RlLCAncHJldmlvdXMnLCAnZHQnKSwgJ3JlcXVpcmVkJyk7
CgoJCQkJcmV0dXJuIHZhbGlkYXRlRmllbGQoaW5wdXRGaWVsZCwgdHJ1ZSk7CgkJ
CX0KCQl9Cgl9CgoJaWYgKGVtcHR5ICYmIGlzUmVxdWlyZWQpCgl7CgkJYWxlcnRV
c2VyKGZpZWxkLCBnZXRUZXh0KCdmb3JtcycsICdyZXF1aXJlZF9maWVsZCcpKTsK
CX0KCWVsc2UgaWYgKGVtcHR5ICYmICFpc1JlcXVpcmVkKQoJewoJCXJldHVybiBm
YWxzZTsKCX0KCglpZiAocmV0KQoJCXJldHVybiBlbXB0eTsKfTsKCmZ1bmN0aW9u
IGFsZXJ0VXNlcihpbnB1dGZpZWxkLCBzdHIpCnsKCXZhciBkZElucHV0RmllbGQg
PSBpbnB1dGZpZWxkLnBhcmVudE5vZGU7Cgl2YXIgZGRFcnJvck1zZyAgID0gZ2V0
U2libGluZ05vZGUoaW5wdXRmaWVsZC5wYXJlbnROb2RlLCAnbmV4dCcsICdkZCcp
OwoJdmFyIGR0RmllbGROYW1lICA9IGdldFNpYmxpbmdOb2RlKGlucHV0ZmllbGQu
cGFyZW50Tm9kZSwgJ3ByZXZpb3VzJywgJ2R0Jyk7CgoJaWYoIWRkRXJyb3JNc2cg
fHwgIWpzY3NzKCdjaGVjaycsZGRFcnJvck1zZywnZGQtc2VxdWVuY2UgZmllbGQt
YWxlcnQnLCcnKSkKCXsKCQlqc2NzcyggJ2FkZCcsIGR0RmllbGROYW1lLCAnZmll
bGQtYWxlcnQnLCAnJyk7CgoJCXZhciB4ID0gY3JlYXRlRE9NTm9kZSgnZGQnLCB7
ImNsYXNzIiA6J2RkLXNlcXVlbmNlIGZpZWxkLWFsZXJ0J30sIFtzdHJdKTsKCgkJ
LyogQWRkIHNwZWNpYWwgY2xhc3MgZm9yIElFNiBpZiBpdCBpcyBhbiBhZHZhbmNl
ZCBvcHRpb24gKi8KCQlpZihpc0lFICYmIGlzTm90SUU3ICYmIChqc2NzcygnY2hl
Y2snLCBkdEZpZWxkTmFtZSwgJ2FkdmFuY2VkLW9wdGlvbicpIHx8IGpzY3NzKCdj
aGVja1BhcmVudHMnLCBkdEZpZWxkTmFtZSwgJ2FkdmFuY2VkLW9wdGlvbicpKSkK
CQkJanNjc3MoICdhZGQnLCB4LCAnYWR2YW5jZWQtb3B0aW9uLWFkamFjZW50Jywg
JycpOwoKCQlkZElucHV0RmllbGQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoeCwg
ZGRJbnB1dEZpZWxkLm5leHRTaWJsaW5nKTsKCX0KfTsKCmZ1bmN0aW9uIHVuQWxl
cnRVc2VyKGlucHV0ZmllbGQpCnsKCXZhciBkZElucHV0RmllbGQgPSBpbnB1dGZp
ZWxkLnBhcmVudE5vZGU7Cgl2YXIgZGRFcnJvck1zZyAgID0gZ2V0U2libGluZ05v
ZGUoaW5wdXRmaWVsZC5wYXJlbnROb2RlLCAnbmV4dCcsICdkZCcpOwoJdmFyIGR0
RmllbGROYW1lICA9IGdldFNpYmxpbmdOb2RlKGlucHV0ZmllbGQucGFyZW50Tm9k
ZSwgJ3ByZXZpb3VzJywgJ2R0Jyk7CgoJaWYoZGRFcnJvck1zZyAmJiBqc2Nzcygn
Y2hlY2snLGRkRXJyb3JNc2csJ2RkLXNlcXVlbmNlIGZpZWxkLWFsZXJ0JykpCgl7
CgkJZGRJbnB1dEZpZWxkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZGRFcnJvck1z
Zyk7CgkJanNjc3MoJ3JlbW92ZScsIGR0RmllbGROYW1lLCAnZmllbGQtYWxlcnQn
LCAnJyk7Cgl9Cn07CgpmdW5jdGlvbiBfdmFsaWRhdGlvblJlc3VsdChyZXF1ZXN0
KQp7CglpZiAodHlwZW9mIHJlcXVlc3QgIT0gJ3VuZGVmaW5lZCcgJiYgcmVxdWVz
dCAhPSBudWxsICYmIHJlcXVlc3QucmVhZHlTdGF0ZSA9PSA0KQoJewoJCXZhciBy
ZXNwb25zZSA9IGdldEVsZW1lbnRGcm9tWEhSKHJlcXVlc3QsICdkaXYjY29yZScp
OwoKCQlyZXR1cm4gcmVzcG9uc2UuZmlyc3RDaGlsZC5ub2RlVmFsdWU7Cgl9CgoJ
cmV0dXJuICIwIjsKfTsKCmZ1bmN0aW9uIF94bWxyZXF1ZXN0Q29tcGxldGUocmVx
dWVzdCkKewoJcmV0dXJuIHR5cGVvZiByZXF1ZXN0ICE9ICd1bmRlZmluZWQnICYm
IHJlcXVlc3QgIT0gbnVsbCAmJiByZXF1ZXN0LnJlYWR5U3RhdGUgPT0gNDsKfTsK
CgpmdW5jdGlvbiB2YWxpZGF0ZVBhc3N3b3JkKHgpCnsKCXZhciBwd2QxID0gbmV3
IERPTVF1ZXJ5KCdpbnB1dCNwd2QxJykuZ2V0KDApOwoKCWlmKHB3ZDEudmFsdWUg
IT0geC52YWx1ZSkKCXsKCQlhbGVydFVzZXIoeCwgZ2V0VGV4dCgnZm9ybXMnLCAn
cGFzc3dvcmRfbm9fbWF0Y2gnKSk7CgkJLy8geC52YWx1ZSA9ICcnOwoJfQp9OwoK
CmZ1bmN0aW9uIHZhbGlkYXRlTmlja25hbWUoZmllbGQpCnsKCW5pY2tuYW1lcmVx
ID0gbnVsbDsKCXZhciByZXF1ZXN0ID0gJ2FjdGlvbj1jdXN0b20mZGF0YSU1QnRl
bXBsYXRlJTVEPXZhbGlkYXRlX25pY2tuYW1lJmRhdGElNUJuaWNrbmFtZSU1RD0n
K2VuY29kZVVSSShmaWVsZC52YWx1ZSk7CgluaWNrbmFtZXJlcSA9IGh0dHByZXFf
c3RyaW5nKHJlcXVlc3QsIF92YWxpZGF0ZU5pY2tuYW1lLCBudWxsLCB0cnVlLCAi
R0VUIik7Cgp9OwoKZnVuY3Rpb24gX3ZhbGlkYXRlTmlja25hbWUoKQp7CglpZiAo
X3htbHJlcXVlc3RDb21wbGV0ZShuaWNrbmFtZXJlcSkgJiYgX3ZhbGlkYXRpb25S
ZXN1bHQobmlja25hbWVyZXEpID09ICcxJykKCXsKCQlhbGVydFVzZXIobmV3IERP
TVF1ZXJ5KCcjbmlja25hbWUnKS5nZXQoMCksIGdldFRleHQoJ2Zvcm1zJywgJ3Vz
ZXJuYW1lX3Rha2VuJykpOwoJfQp9OwoKCmZ1bmN0aW9uIHZhbGlkYXRlRW1haWxE
b21haW4oZmllbGQpCnsKCWVtYWlsZG9tYWlucmVxID0gbnVsbDsKCXZhciByZXF1
ZXN0ID0gJ2FjdGlvbj1jdXN0b20mZGF0YSU1QnRlbXBsYXRlJTVEPXZhbGlkYXRl
X2VtYWlsZG9tYWluJmRhdGElNUJlbWFpbCU1RD0nK2VuY29kZVVSSShmaWVsZC52
YWx1ZSk7CgllbWFpbGRvbWFpbnJlcSA9IGh0dHByZXFfc3RyaW5nKHJlcXVlc3Qs
IF92YWxpZGF0ZUVtYWlsRG9tYWluLCBmYWxzZSwgdHJ1ZSwgIkdFVCIpOwp9OwoK
CmZ1bmN0aW9uIF92YWxpZGF0ZUVtYWlsRG9tYWluKCkKewoJaWYgKF92YWxpZGF0
aW9uUmVzdWx0KGVtYWlsZG9tYWlucmVxKSA9PSAnMScpCgl7CgkJYWxlcnRVc2Vy
KG5ldyBET01RdWVyeSgnI2VtYWlsJykuZ2V0KDApLCBnZXRUZXh0KCdmb3Jtcycs
ICdpbnZhbGlkX2RvbWFpbicpKTsKCX0KfTsKCgpmdW5jdGlvbiB2YWxpZGF0ZUVt
YWlsKGZpZWxkKQp7CgllbWFpbHJlcSA9IG51bGw7Cgl2YXIgcmVxdWVzdCA9ICdh
Y3Rpb249Y3VzdG9tJmRhdGElNUJ0ZW1wbGF0ZSU1RD12YWxpZGF0ZV9lbWFpbCZk
YXRhJTVCZW1haWwlNUQ9JytlbmNvZGVVUkkoZmllbGQudmFsdWUpOwoJZW1haWxy
ZXEgPSBodHRwcmVxX3N0cmluZyhyZXF1ZXN0LCBfdmFsaWRhdGVFbWFpbCwgZmFs
c2UsIHRydWUsICJHRVQiKTsKfTsKCgpmdW5jdGlvbiBfdmFsaWRhdGVFbWFpbCgp
CnsKCWlmIChlbWFpbHJlcSAmJiBfdmFsaWRhdGlvblJlc3VsdChlbWFpbHJlcSkg
PT0gJzEnKQoJewoJCWFsZXJ0VXNlcihuZXcgRE9NUXVlcnkoJyNlbWFpbCcpLmdl
dCgwKSwgZ2V0VGV4dCgnZm9ybXMnLCAnZW1haWxfdGFrZW4nKSk7Cgl9Cn07Cgpm
dW5jdGlvbiBhdHRhY2hDYWxlbmRhclNlbGVjdG9yKHRhcmdldHMpCnsKCXZhciBj
YWxlbmRhclNlbGVjdG9ycyA9IGdldFRhcmdldHModGFyZ2V0cywgJ2lucHV0LmRh
dGUnKSwgaXRlbTsKCglmb3IodmFyIGkgPSAwLCBpdGVtOyAoaXRlbT1jYWxlbmRh
clNlbGVjdG9ycy5nZXQoaSkpO2krKykKCXsKCQlpZihpdGVtLmlkICE9ICcnKQoJ
CXsKCQkJQ2FsZW5kYXIuc2V0dXAoewoJCQkJaW5wdXRGaWVsZAkJCToJCWl0ZW0u
aWQsCgkJCQlpZkZvcm1hdAkJCToJCSIlZC0lbS0lWSIgKyAoanNjc3MoJ2NoZWNr
JywgaXRlbSwgJ3RpbWUnKSA/ICIgJUg6JU0iIDogIiIpLAoJCQkJc2hvd3NUaW1l
CQkJOgkJanNjc3MoJ2NoZWNrJywgaXRlbSwgJ3RpbWUnKSwKCQkJCWFsaWduCQkJ
CToJCSJUbCIsCgkJCQlzdGVwCQkJCToJCTEsCgkJCQllbGVjdHJpYwkJCToJCWZh
bHNlLAoJCQkJZmlyc3REYXkJCQk6CQkxLAoJCQkJb25DbG9zZQkJCQk6CQlmdW5j
dGlvbihjYWwpCgkJCQkJCQkJCQkJewoJCQkJCQkJCQkJCQljYWwuaGlkZSgpOwoJ
CQkJCQkJCQkJCQlpZihkb2N1bWVudC5jcmVhdGVFdmVudCkKCQkJCQkJCQkJCQkJ
ewoJCQkJCQkJCQkJCQkJdmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJI
VE1MRXZlbnRzIik7CgkJCQkJCQkJCQkJCQlldnQuaW5pdEV2ZW50KCJjaGFuZ2Ui
LCB0cnVlLCB0cnVlKTsKCQkJCQkJCQkJCQkJCWNhbC5wYXJhbXNbJ2lucHV0Rmll
bGQnXS5kaXNwYXRjaEV2ZW50KGV2dCk7CgkJCQkJCQkJCQkJCX0KCQkJCQkJCQkJ
CQkJZWxzZSBpZihkb2N1bWVudC5jcmVhdGVFdmVudE9iamVjdCkKCQkJCQkJCQkJ
CQkJewoJCQkJCQkJCQkJCQkJdmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50
T2JqZWN0KCk7CgkJCQkJCQkJCQkJCQljYWwucGFyYW1zWydpbnB1dEZpZWxkJ10u
ZmlyZUV2ZW50KCJvbmNoYW5nZSIsIGV2dCk7CgkJCQkJCQkJCQkJCX0KCQkJCQkJ
CQkJCQl9CgkJCX0pOwoJCX0KCX0KfTsKCmZ1bmN0aW9uIHNlbGVjdEFsbFJvd3Mo
dGFyZ2V0cykKewoJdmFyIHRhYmxlcyA9IGdldFRhcmdldHModGFyZ2V0cywgJ2Rp
diNjb250ZW50IGZvcm0gdGFibGUnKTsKCglpZih0YWJsZXMubGVuZ3RoID09IDAp
CgkJcmV0dXJuOwoKCWZvcih2YXIgaSA9IDA7IGkgPCB0YWJsZXMubGVuZ3RoOyBp
KyspCgl7CgkJdmFyIGNoZWNrYm94ZXMgPSAgbmV3IERPTVF1ZXJ5KCdpbnB1dFtU
WVBFPSJjaGVja2JveCJdJywgdGFibGVzLmdldChpKSk7CgkJaWYoY2hlY2tib3hl
cy5sZW5ndGggPT0gMCkKCQkJY29udGludWU7CgoJCXZhciB0YWJsZWZvb3RlciA9
IG5ldyBET01RdWVyeSgidGZvb3QiLCB0YWJsZXMuZ2V0KGkpKS5nZXQoMCk7CgkJ
aWYoIXRhYmxlZm9vdGVyKQoJCQljb250aW51ZTsKCgkJdmFyIHRyID0gY3JlYXRl
RE9NTm9kZSgndHInLCB7ImNsYXNzIiA6J2Zvb3Rlci1mb3JtJ30sCgkJWwoJCQlj
cmVhdGVET01Ob2RlKCd0ZCcsIHsiY2xhc3MiIDonc2VsZWN0J30sCgkJCVsKCQkJ
CWNyZWF0ZURPTU5vZGUoJ2lucHV0JywgeyJ0eXBlIiA6J2NoZWNrYm94JywgImlk
IiA6J3NlbGVjdEFsbFJvd3MtJytpLCAibmFtZSIgOidzZWxlY3RBbGxSb3dzLScr
aSwgImV2ZW50IiA6IChpc0lFID8gWydjbGljaycsIF9zZWxlY3RBbGxSb3dzXSA6
IFsnY2hhbmdlJywgX3NlbGVjdEFsbFJvd3NdKSB9LCBbXSkKCQkJXSksCgkJCWNy
ZWF0ZURPTU5vZGUoJ3RkJywgeyJjb2xTcGFuIiA6NX0sCgkJCVsKCQkJCWlzSUUg
PwoJCQkJY3JlYXRlRE9NTm9kZSgnbGFiZWwnLCB7ICdodG1sRm9yJyA6ICdzZWxl
Y3RBbGxSb3dzLScraX0sIFtnZXRUZXh0KCdmb3JtcycsICdzZWxlY3RfYWxsX3Jv
d3MnKV0pIDoKCQkJCWNyZWF0ZURPTU5vZGUoJ2xhYmVsJywgeyAnZm9yJyA6ICdz
ZWxlY3RBbGxSb3dzLScraX0sIFtnZXRUZXh0KCdmb3JtcycsICdzZWxlY3RfYWxs
X3Jvd3MnKV0pCgkJCV0pCgkJXSk7CgoJCXRhYmxlZm9vdGVyLmFwcGVuZENoaWxk
KHRyKTsKCX0KCglpZihpc0dlY2tvICYmICFpc1dlYktpdCkKCXsKCQlqc2Nzcygn
YWRkJyxkb2N1bWVudC5ib2R5LCdkaXNwbGF5LW5vbmUnLCcnKTsKCQlqc2Nzcygn
cmVtb3ZlJyxkb2N1bWVudC5ib2R5LCdkaXNwbGF5LW5vbmUnLCcnKTsKCX0KfTsK
CmZ1bmN0aW9uIF9zZWxlY3RBbGxSb3dzKCkKewoJdmFyIGNoZWNrZWQgPSB0aGlz
LmNoZWNrZWQ7Cgl2YXIgaXRlbXMgPSBuZXcgRE9NUXVlcnkoJ3Rib2R5IGlucHV0
W1RZUEU9ImNoZWNrYm94Il0nLCBnZXRTaWJsaW5nTm9kZSh0aGlzLCAndXAnLCAn
dGFibGUnKSk7Cglmb3IodmFyIGkgPSAwLCBpdGVtOyAoaXRlbT1pdGVtcy5nZXQo
aSkpO2krKykKCXsKCQlpdGVtLmNoZWNrZWQgPSBjaGVja2VkOwoJfQp9OwoKZnVu
Y3Rpb24gcmV3cml0ZVF1b3RlTGlua3MoKQp7CglpZihyYXdfbWVzc2FnZXMubGVu
Z3RoID09IDApCgkJcmV0dXJuOwoKCWZvcih2YXIgaSA9IDAsIGl0ZW07IChpdGVt
PXJhd19tZXNzYWdlc1tpXSk7IGkrKykKCXsKCQkvKiB1c2luZyBhIHJlZmVyZW5j
ZSB0byBtZXNzYWdlLT8gdG8gc2xpZ2h0bHkgc3BlZWQgdXAgbG9va3VwICovCgkJ
dmFyIGxpbmtzID0gbmV3IERPTVF1ZXJ5KCJsaS5tZXNzYWdlLXF1b3RlIGEiLCBu
ZXcgRE9NUXVlcnkoImxpI21lc3NhZ2UtIitpdGVtWzBdKS5nZXQoMCkgKTsKCgkJ
aWYobGlua3MubGVuZ3RoID4gMCkKCQl7CgkJCWFkZEV2ZW50KGxpbmtzLmdldCgw
KSwgJ2NsaWNrJywgZnVuY3Rpb24oZSkgeyBpZighY29weVF1b3RlVG9STUwodGhp
cykpIHsgZS5wcmV2ZW50RGVmYXVsdCgpOyB9IH0gKTsKCQl9Cgl9Cn07CgpmdW5j
dGlvbiBjb3B5UXVvdGVUb1JNTCh4KQp7Cgl2YXIgcGF0aCA9IGJvYXJkX3Njcmlw
dF91cmwgKyAnL3F1b3RlX21lc3NhZ2UvJzsKCXZhciB0ZW1wID0geC5ocmVmLnN1
YnN0cmluZyggcGF0aC5sZW5ndGggKTsKCXZhciByZWcgPSAvXihbMC05XSspLzsK
CXZhciByZXMgPSB0ZW1wLm1hdGNoKHJlZyk7Cgl2YXIgbWVzc2FnZWlkID0gcmVz
WzFdOwoKCWZvcih2YXIgaSA9IDAsIGl0ZW07IChpdGVtPXJhd19tZXNzYWdlc1tp
XSk7aSsrKQoJewoJCWlmKGl0ZW1bMF0gPT0gbWVzc2FnZWlkKQoJCXsKCQkJcHV0
U3RyKGl0ZW1bMV0pOwoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJfQoKCXJldHVybiB0
cnVlOwp9OwoKLyogaGVscGVyIGZ1bmN0aW9uIGZvciByYXcgbWVzc2FnZXMgKi8K
ZnVuY3Rpb24gcSgpCnsKCXJldHVybiAnIic7Cn07CgpmdW5jdGlvbiBwcml2YXRl
TWVzc2FnaW5nQ29weUNvbnRhY3QodGFyZ2V0cykKewoJaWYoYm9hcmRfYWN0aW9u
ID09ICdwbV9uZXdfbWVzc2FnZScpCgkJYWRkRXZlbnRUb1RhcmdldHModGFyZ2V0
cywgJ2NoYW5nZScsIF9wcml2YXRlTWVzc2FnaW5nQ29weUNvbnRhY3QsICdpbnB1
dCNyZWNpcGllbnRzICsgc2VsZWN0Jyk7Cn07CgpmdW5jdGlvbiBfcHJpdmF0ZU1l
c3NhZ2luZ0NvcHlDb250YWN0KCkKewoJaWYodGhpcy5vcHRpb25zW3RoaXMuc2Vs
ZWN0ZWRJbmRleF0udmFsdWUgPT0gJycpCgkJcmV0dXJuOwoKCXZhciBpbnB1dCA9
IG5ldyBET01RdWVyeSgiaW5wdXQjcmVjaXBpZW50cyIpLmdldCgwKTsKCgl2YXIg
dXNlcm5hbWUgPSB0aGlzLm9wdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4XS52YWx1
ZTsKCglpZiAoIHVzZXJuYW1lLm1hdGNoKCInIikgKQoJCXVzZXJuYW1lID0gJyIn
KyB1c2VybmFtZSArICciJzsKCWVsc2UgaWYgKCB1c2VybmFtZS5tYXRjaCgvXlsw
LTldKyQvKSB8fCB1c2VybmFtZS5tYXRjaCgnIicpICkKCQl1c2VybmFtZSA9ICIn
IisgdXNlcm5hbWUgKyAiJyI7CgoJaW5wdXQudmFsdWUgKz0gKGlucHV0LnZhbHVl
ICE9ICcnID8gJywgJyA6ICcnKSArIHVzZXJuYW1lOwp9OwoKZnVuY3Rpb24gc2Vs
ZWN0U2VsZWN0ZWRUb3BpY0FkbWluKCkKewoJdmFyIHRvcGljQWRtaW4gPSBuZXcg
RE9NUXVlcnkoImRpdiN0b3BpYy1hZG1pbiIpLmdldCgwKTsKCglpZighdG9waWNB
ZG1pbikKCQlyZXR1cm47CgoJdmFyIHNlbGVjdHMgPSBuZXcgRE9NUXVlcnkoJ3Nl
bGVjdFtzZWxlY3RlZF0nLCB0b3BpY0FkbWluKTsKCglmb3IgKHZhciBpID0gMCwg
c2VsZWN0OyAoc2VsZWN0PXNlbGVjdHMuZ2V0KGkpKTtpKyspCgl7CgkJZm9yICh2
YXIgaiA9IDA7IGo8c2VsZWN0Lm9wdGlvbnMubGVuZ3RoOyBqKyspCgkJewoJCQlp
ZiAoc2VsZWN0Lm9wdGlvbnNbal0udmFsdWUgPT0gc2VsZWN0LmdldEF0dHJpYnV0
ZSgic2VsZWN0ZWQiKSkKCQkJCXNlbGVjdC5vcHRpb25zW2pdLnNlbGVjdGVkID0g
dHJ1ZTsKCQl9Cgl9Cn07CgpmdW5jdGlvbiB0b2dnbGVDaGFuZ2VDaGVja2JveFRv
cGljQWRtaW4oKQp7Cgl2YXIgdG9waWNBZG1pbiA9IG5ldyBET01RdWVyeSgiZGl2
I3RvcGljLWFkbWluIikuZ2V0KDApOwoKCWlmKCF0b3BpY0FkbWluKQoJCXJldHVy
bjsKCgl2YXIgaXRlbXMgPSBuZXcgRE9NUXVlcnkoJ2lucHV0W3R5cGU9InRleHQi
XSwgdGV4dGFyZWEsIHNlbGVjdCcsIHRvcGljQWRtaW4pOwoKCWZvcih2YXIgaSA9
IDAsIGl0ZW07IChpdGVtPWl0ZW1zLmdldChpKSk7aSsrKQoJewoJCWFkZEV2ZW50
KGl0ZW0sICdjaGFuZ2UnLCBfdG9nZ2xlQ2hhbmdlQ2hlY2tib3hUb3BpY0FkbWlu
KTsKCX0KCgl2YXIgaW5wdXQgPSBuZXcgRE9NUXVlcnkoImlucHV0I2RlbG1lc3Nh
Z2VzIikuZ2V0KDApOwoJaWYoaW5wdXQpCgl7CgkJYWRkRXZlbnQoaW5wdXQsICdj
aGFuZ2UnLCBzZWxlY3RNZXNzYWdlc0ZvckRlbGV0aW9uKTsKCX0KCglpbnB1dCA9
IG5ldyBET01RdWVyeSgiaW5wdXQjc3BsaXRtZXNzYWdlcyIpLmdldCgwKTsKCWlm
KGlucHV0KQoJewoJCWFkZEV2ZW50KGlucHV0LCAnY2hhbmdlJywgc2VsZWN0TWVz
c2FnZXNGb3JTcGxpdCk7Cgl9Cn07CgpmdW5jdGlvbiBfdG9nZ2xlQ2hhbmdlQ2hl
Y2tib3hUb3BpY0FkbWluKCkKewoJdmFyIHNlYXJjaCA9IGpzY3NzKCdjaGVjaycs
IHRoaXMucGFyZW50Tm9kZSwgJ2RkLXNlcXVlbmNlJykgPyB0aGlzLnBhcmVudE5v
ZGUucHJldmlvdXNTaWJsaW5nIDogIHRoaXMucGFyZW50Tm9kZTsKCXZhciBpdGVt
cyA9IG5ldyBET01RdWVyeSgnaW5wdXRbdHlwZT0iY2hlY2tib3giXScsIHNlYXJj
aCk7CgoJaWYoaXRlbXMubGVuZ3RoID4gMCkKCXsKCQlpdGVtcy5nZXQoMCkuY2hl
Y2tlZD10cnVlOwoJfQp9OwoKdmFyIGNhbGxiYWNrT25NZXNzYWdlVG9nZ2xlZFNl
bGVjdGVkID0gbnVsbDsKZnVuY3Rpb24gX3NlbGVjdE1lc3NhZ2VzKHVuc2V0Q3Vy
cmVudE1lc3NhZ2VzKQp7Cgl2YXIgaXRlbXMgPSBuZXcgRE9NUXVlcnkoJ2xpLm1l
c3NhZ2UnKTsKCglmb3IodmFyIGk9MCwgaXRlbTsgKGl0ZW09aXRlbXMuZ2V0KGkp
KTtpKyspCgl7CgkJYWRkRXZlbnQoaXRlbSwgJ2NsaWNrJywgX3NlbGVjdE1lc3Nh
Z2UpOwoJCWlmKHVuc2V0Q3VycmVudE1lc3NhZ2VzKQoJCXsKCQkJanNjc3MoJ3Jl
bW92ZScsIGl0ZW0sICdzZWxlY3RlZCcsICcnKTsKCQl9Cgl9Cn07CgpmdW5jdGlv
biBfc2VsZWN0TWVzc2FnZSgpCnsKCWlmKCFjYWxsYmFja09uTWVzc2FnZVRvZ2ds
ZWRTZWxlY3RlZCkKCQlyZXR1cm47CgoJanNjc3MoJ3RvZ2dsZScsIHRoaXMsICdz
ZWxlY3RlZCcsICcnKTsKCWNhbGxiYWNrT25NZXNzYWdlVG9nZ2xlZFNlbGVjdGVk
KHRoaXMsIGpzY3NzKCdjaGVjaycsIHRoaXMsICdzZWxlY3RlZCcsICcnKSk7Cn07
CgpmdW5jdGlvbiBfbWVzc2FnZVRvZ2dsZWRGb3JEZWxldGlvbihsaXN0aXRlbSwg
c2VsZWN0ZWQpCnsKCXZhciBkZWxfbWVzc2FnZWlkcyA9IG5ldyBET01RdWVyeSgi
aW5wdXQjZGVsX21lc3NhZ2VpZHMiKS5nZXQoMCk7CglpZighZGVsX21lc3NhZ2Vp
ZHMpCgkJcmV0dXJuOwoKCXZhciByZWcgPSAvXm1lc3NhZ2VcLShbMC05XSspJC87
Cgl2YXIgcmVzID0gbGlzdGl0ZW0uaWQubWF0Y2gocmVnKTsKCXZhciBtZXNzYWdl
aWQgPSByZXNbMV07CgoJdmFyIGlkcyA9IGRlbF9tZXNzYWdlaWRzLnZhbHVlLnNw
bGl0KCcsJyk7CgoJaWYoc2VsZWN0ZWQpCgl7CgkJaWRzW2lkcy5sZW5ndGhdID0g
bWVzc2FnZWlkOwoJfQoJZWxzZQoJewoJCWZvcih2YXIgaSA9IDA7IGkgPCBpZHMu
bGVuZ3RoOyBpKyspCgkJewoJCQlpZihpZHNbaV0gPT0gbWVzc2FnZWlkKQoJCQl7
CgkJCQlkZWxldGUgaWRzW2ldOwoJCQl9CgkJfQoJfQoKCWRlbF9tZXNzYWdlaWRz
LnZhbHVlID0gaWRzLmpvaW4oJywnKTsKfTsKCmZ1bmN0aW9uIHNlbGVjdE1lc3Nh
Z2VzRm9yRGVsZXRpb24oKQp7Cgl2YXIgZGVsX21lc3NhZ2VpZHMgPSBuZXcgRE9N
UXVlcnkoImlucHV0I2RlbF9tZXNzYWdlaWRzIikuZ2V0KDApOwoJaWYoIWRlbF9t
ZXNzYWdlaWRzKQoJCXJldHVybjsKCglkZWxfbWVzc2FnZWlkcy52YWx1ZSA9ICcn
OwoKCV9zZWxlY3RNZXNzYWdlcyghdGhpcy5jaGVja2VkKTsKCglpZighdGhpcy5j
aGVja2VkKQoJCWNhbGxiYWNrT25NZXNzYWdlVG9nZ2xlZFNlbGVjdGVkID0gbnVs
bDsKCWVsc2UKCQljYWxsYmFja09uTWVzc2FnZVRvZ2dsZWRTZWxlY3RlZCA9IF9t
ZXNzYWdlVG9nZ2xlZEZvckRlbGV0aW9uOwoKCWlmKHRoaXMuY2hlY2tlZCkKCQlh
bGVydChnZXRUZXh0KCdmb3JtcycsICdzZWxlY3RfbWVzc2FnZXMnKSk7Cn07Cgpm
dW5jdGlvbiBfbWVzc2FnZVRvZ2dsZWRGb3JTcGxpdChsaXN0aXRlbSwgc2VsZWN0
ZWQpCnsKCXZhciBzcGxpdF9tZXNzYWdlaWRzID0gbmV3IERPTVF1ZXJ5KCJpbnB1
dCNzcGxpdF9tZXNzYWdlaWRzIikuZ2V0KDApOwoJaWYoIXNwbGl0X21lc3NhZ2Vp
ZHMpCgkJcmV0dXJuOwoKCXZhciByZWcgPSAvXm1lc3NhZ2VcLShbMC05XSspJC87
Cgl2YXIgcmVzID0gbGlzdGl0ZW0uaWQubWF0Y2gocmVnKTsKCXZhciBtZXNzYWdl
aWQgPSByZXNbMV07CgoJdmFyIGlkcyA9IHNwbGl0X21lc3NhZ2VpZHMudmFsdWUu
c3BsaXQoJywnKTsKCglpZihzZWxlY3RlZCkKCXsKCQlpZHNbaWRzLmxlbmd0aF0g
PSBtZXNzYWdlaWQ7Cgl9CgllbHNlCgl7CgkJZm9yKHZhciBpPTAsIGl0ZW07IChp
dGVtPWlkc1tpXSk7aSsrKQoJCXsKCQkJaWYoaXRlbSA9PSBtZXNzYWdlaWQpCgkJ
CQlkZWxldGUgaXRlbTsKCQl9Cgl9CgoJc3BsaXRfbWVzc2FnZWlkcy52YWx1ZSA9
IGlkcy5qb2luKCcsJyk7Cn07CgpmdW5jdGlvbiBzZWxlY3RNZXNzYWdlc0ZvclNw
bGl0KCkKewoJdmFyIHNwbGl0X21lc3NhZ2VpZHMgPSBuZXcgRE9NUXVlcnkoImlu
cHV0I3NwbGl0X21lc3NhZ2VpZHMiKS5nZXQoMCk7CglpZighc3BsaXRfbWVzc2Fn
ZWlkcykKCQlyZXR1cm47CgoJc3BsaXRfbWVzc2FnZWlkcy52YWx1ZSA9ICcnOwoK
CV9zZWxlY3RNZXNzYWdlcyghdGhpcy5jaGVja2VkKTsKCWlmKCF0aGlzLmNoZWNr
ZWQpCgkJY2FsbGJhY2tPbk1lc3NhZ2VUb2dnbGVkU2VsZWN0ZWQgPSBudWxsOwoJ
ZWxzZQoJCWNhbGxiYWNrT25NZXNzYWdlVG9nZ2xlZFNlbGVjdGVkID0gX21lc3Nh
Z2VUb2dnbGVkRm9yU3BsaXQ7CgoJaWYodGhpcy5jaGVja2VkKQoJCWFsZXJ0KGdl
dFRleHQoJ2Zvcm1zJywgJ3NlbGVjdF9tZXNzYWdlcycpKTsKfTsKCi8qCglDb2xv
cnBpY2tlciBmcm9tIGh0dHA6Ly93d3cuY29sb3VybG92ZXJzLmNvbS9ibG9nLzIw
MDgvMDEvMTYvZnJlZS1hZHZhbmNlZC1kaHRtbC1jb2xvci1waWNrZXIvIC4KCU1v
ZGlmaWVkIGZvciBpbXBsZW1lbnRhdGlvbiBpbiBSZWFjdC4KKi8KCi8qIEdsb2Jh
bCB2YXJpYWJsZXMgKi8KdmFyIF9zdG9wID0gMSwgX2RyYWdIYW5kbGUgPSAiIiwg
X2RyYWdIYW5kbGVTdHlsZSwgdFgsIHRZLCBIU1YgPSB7MDogMzYwLDE6IDAsMjog
MTAwfSwgaFNWID0gMTQ5LCB3U1YgPSAxNDAsIF9DTENQT2Zmc2V0ID0ge3g6IDAs
IHk6IDB9LCBfY2FuRHJhZ1BpY2tlciA9IGZhbHNlLCBfQ0xDUGRpc3BsYXkgPSAi
bm9uZSIsIF9DTENQaXNEcmFnZ2FibGUgPSB0cnVlLCBfQ0xDUHBvc2l0aW9uID0g
ImFic29sdXRlIjsKdmFyIF9odWVUcmFja0hlaWdodCA9IDE0NywgX2NsaWNrTW91
c2VMb2NhbGUgPSAiIiwgX2NsaWNrTW91c2VMb2NhbGVDTENQSWlubmVyU2hlbGwg
PSBmYWxzZSwgX3JlZnJlc2hUaW1lb3V0ID0gMCwgX0NMQ1Bpbml0SGV4ID0gIiIs
IF9DTENQYWJzUG9zID0gIiI7CnZhciBfQ0xDUGJhc2ljTGltaXRzID0geyJDTENQ
YmFzaWNIZXgiOiBbMCwxNjc3NzIxNV0sIkNMQ1BiYXNpY1IiOiBbMCwyNTVdLCJD
TENQYmFzaWNHIjogWzAsMjU1XSwiQ0xDUGJhc2ljQiI6IFswLDI1NV0sIkNMQ1Bi
YXNpY0giOiBbMCwzNTldLCJDTENQYmFzaWNTIjogWzAsMTAwXSwiQ0xDUGJhc2lj
ViI6IFswLDEwMF0sIkNMQ1BiYXNpY0MiOiBbMCwxMDBdLCJDTENQYmFzaWNNIjog
WzAsMTAwXSwiQ0xDUGJhc2ljWSI6IFswLDEwMF0sIkNMQ1BiYXNpY0siOiBbMCwx
MDBdfTsKdmFyIENMQ1BGaWVsZElEID0gJyc7CnZhciBfQ0xDUGRpc3BsYXkgPSAn
bm9uZSc7CnZhciBfQ0xDUGlzRHJhZ2dhYmxlID0gdHJ1ZTsKdmFyIF9DTENQcG9z
aXRpb24gPSAnYWJzb2x1dGUnOwp2YXIgX0NMQ1Bpbml0SGV4ID0gJzAwMzlCMyc7
CgpBcnJheS5wcm90b3R5cGUuQ0xDUGluX2FycmF5ID0gZnVuY3Rpb24oX25lZWRs
ZSkgewoJdmFyIF9pOwoJZm9yIChfaT0wO19pPD10aGlzLmxlbmd0aDtfaSsrICkg
ewoJCWlmICh0aGlzW19pXSA9PSBfbmVlZGxlKSB7CgkJCXJldHVybiB0cnVlOwoJ
CX0KCX0KCXJldHVybiBmYWxzZTsKfTsKClN0cmluZy5wcm90b3R5cGUuQ0xDUHBh
ZEhleCA9IGZ1bmN0aW9uKCkgewoJdmFyIF9zdHIgPSAoIjAwMDAwMCIudG9TdHJp
bmcoKSArIHRoaXMudG9TdHJpbmcoKSk7CglyZXR1cm4gX3N0ci5zdWJzdHJpbmco
KF9zdHIubGVuZ3RoIC0gNiksX3N0ci5sZW5ndGgpOyAvLyBUSEFOS1MgSUUhISEh
Cn07CgpDTENQSGFuZGxlciA9IGZ1bmN0aW9uKF9oZXgpCnsKCXZhciBDTENQRmll
bGQgPSBuZXcgRE9NUXVlcnkoJyMnICsgQ0xDUEZpZWxkSUQpLmdldCgwKTsKCglp
ZihDTENQRmllbGQpCgl7CgkJQ0xDUEZpZWxkLnZhbHVlID0gX2hleDsKCQlDTENQ
RmllbGQuc3R5bGUuYmFja2dyb3VuZCA9ICgiIyIgKyBfaGV4KTsKCX0KfTsKCkNM
Q1BkZWMyaGV4ID0gZnVuY3Rpb24oX2RlYykgewoJdmFyIF9oZXhDaGFycyA9ICIw
MTIzNDU2Nzg5QUJDREVGIiwgX2hleCA9ICIiOwoJd2hpbGUgKF9kZWMgPiAxNSkg
ewoJCV9oZXggPSAoX2hleENoYXJzLmNoYXJBdCgoX2RlYyAtIChNYXRoLmZsb29y
KF9kZWMgLyAxNikpICogMTYpKSArIF9oZXgpOwoJCV9kZWMgPSBNYXRoLmZsb29y
KF9kZWMgLyAxNik7Cgl9CglyZXR1cm4gKF9oZXhDaGFycy5jaGFyQXQoX2RlYykg
KyBfaGV4KTsKfTsKCkNMQ1BoZXgyZGVjID0gZnVuY3Rpb24oX2hleCkgewoJcmV0
dXJuIHBhcnNlSW50KF9oZXgsMTYpOwp9OwoKaWYgKHR5cGVvZiAkICE9ICJmdW5j
dGlvbiIpIHsKCSQgPSBmdW5jdGlvbihfZWxlbWVudElEKSB7CgkJcmV0dXJuIG5l
dyBET01RdWVyeSgnIycgKyBfZWxlbWVudElEKS5nZXQoMCk7Cgl9Cn07CgppZiAo
dHlwZW9mICRTICE9ICJmdW5jdGlvbiIpIHsKCSRTID0gZnVuY3Rpb24oX2VsZW1l
bnRJRCkgewoJCXJldHVybiAkKF9lbGVtZW50SUQpLnN0eWxlOwoJfQp9OwoKQ0xD
UGlzSGV4ID0gZnVuY3Rpb24oX2hleCkgewoJcmV0dXJuIC9eW2EtZkEtRjAtOV17
Nn0kLy50ZXN0KF9oZXgpOwp9OwoKQ0xDUGRvbUV2ZW50ID0gZnVuY3Rpb24oX2V2
ZW50KSB7CglfZXZlbnQgPSAoX2V2ZW50KSA/IF9ldmVudCA6IHdpbmRvdy5ldmVu
dDsKCWlmIChfZXZlbnQuc3JjRWxlbWVudCkgewoJCV9ldmVudC50YXJnZXQgPSBf
ZXZlbnQuc3JjRWxlbWVudDsKCX0KCV9ldmVudC5jb2RlID0gKF9ldmVudC5rZXlD
b2RlKSA/IF9ldmVudC5rZXlDb2RlIDogX2V2ZW50LmNoYXJDb2RlOwoJcmV0dXJu
IF9ldmVudDsKfTsKCkNMQ1BhYnNQb3MgPSBmdW5jdGlvbihfb2JqZWN0KSB7Cgl2
YXIgciA9IHsKCQl4IDogX29iamVjdC5vZmZzZXRMZWZ0LAoJCXkgOiBfb2JqZWN0
Lm9mZnNldFRvcAoJfTsKCWlmIChfb2JqZWN0Lm9mZnNldFBhcmVudCkgewoJCXZh
ciB2ID0gQ0xDUGFic1Bvcyhfb2JqZWN0Lm9mZnNldFBhcmVudCk7CgkJci54ICs9
IHYueDsKCQlyLnkgKz0gdi55OwoJfQoJcmV0dXJuIHI7Cn07CgpDTENQaW5pdFBp
Y2tlciA9IGZ1bmN0aW9uKCkgewoJZG9jdW1lbnQub25tb3VzZW1vdmUgPSBDTENQ
TW91c2VIYW5kbGVyT25Nb3VzZU1vdmU7Cglkb2N1bWVudC5vbm1vdXNldXAgPSBD
TENQTW91c2VIYW5kbGVyT25Nb3VzZVVwOwoJZG9jdW1lbnQub25tb3VzZWRvd24g
PSBDTENQTW91c2VIYW5kbGVyT25Nb3VzZURvd247CgoJJFMoIkNMQ1AiKS5sZWZ0
ID0gMDsKCSRTKCJDTENQIikudG9wID0gMDsKCSRTKCJDTENQIikud2lkdGggPSAi
MjYycHgiOwoJJFMoIkNMQ1AiKS5oZWlnaHQgPSAiMjY4cHgiOwoJJCgiQ0xDUCIp
LmlubmVySFRNTCA9ICI8ZGl2IGlkPVwiQ0xDUERyYWdEaXZcIj48ZGl2IGlkPVwi
Q0xDUElpbm5lclNoZWxsXCI+PGRpdiBpZD1cIkNMQ1BQaWNrZXJcIj48ZGl2IGlk
PVwiQ0xDUFNhdFZhbFwiIG9ubW91c2Vkb3duPVwiQ0xDUHNsaWRlKCdDTENQU2F0
VmFsU2xpZGUnLCdDTENQUGlja2VyJyxldmVudCk7XCI+PGRpdiBpZD1cIkNMQ1BT
YXRWYWxTbGlkZVwiPjwvZGl2PjwvZGl2PjxkaXYgaWQ9XCJDTENQSHVlQ29udGFp
bmVyXCIgb25tb3VzZWRvd249XCJDTENQc2xpZGUoJ0NMQ1BIdWVTbGlkZScsJ0NM
Q1BQaWNrZXInLGV2ZW50KTtcIj48ZGl2IGlkPVwiQ0xDUEh1ZVNsaWRlXCIgc3R5
bGU9XCJ0b3A6IC00cHg7IGxlZnQ6IC03cHg7XCI+PC9kaXY+PGRpdiBpZD1cIkNM
Q1BIdWVcIj48L2Rpdj48L2Rpdj48ZGl2IGlkPVwiQ0xDUFNhdENvbnRhaW5lclwi
IG9ubW91c2Vkb3duPVwiQ0xDUHNsaWRlKCdDTENQU2F0U2xpZGUnLCdDTENQUGlj
a2VyJyxldmVudCk7XCI+PGRpdiBpZD1cIkNMQ1BTYXRTbGlkZVwiIHN0eWxlPVwi
dG9wOiAtNHB4OyBsZWZ0OiAtN3B4O1wiPjwvZGl2PjxkaXYgaWQ9XCJDTENQU2F0
XCI+PC9kaXY+PC9kaXY+PGRpdiBpZD1cIkNMQ1BWYWxDb250YWluZXJcIiBvbm1v
dXNlZG93bj1cIkNMQ1BzbGlkZSgnQ0xDUFZhbFNsaWRlJywnQ0xDUFBpY2tlcics
ZXZlbnQpO1wiPjxkaXYgaWQ9XCJDTENQVmFsU2xpZGVcIiBzdHlsZT1cInRvcDog
LTRweDsgbGVmdDogLTdweDtcIj48L2Rpdj48ZGl2IGlkPVwiQ0xDUFZhbFwiPjwv
ZGl2PjwvZGl2PjwvZGl2PjxkaXYgaWQ9XCJDTENQYlBFXCI+PGRpdiBzdHlsZT1c
IndpZHRoOiA0OHB4OyBtYXJnaW4tcmlnaHQ6IDEwcHg7IGJhY2tncm91bmQ6IHVy
bCgiICsgYm9hcmRfdGVtcGxhdGVfdXJsICsgImltZy9pY29ucy90b29sYmFyL2Nv
bG9ycGlja2VyL2hleC5wbmcpIGNlbnRlciB0b3Agbm8tcmVwZWF0O1wiPjwvZGl2
PjxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiB1cmwoIiArIGJvYXJkX3RlbXBsYXRl
X3VybCArICJpbWcvaWNvbnMvdG9vbGJhci9jb2xvcnBpY2tlci9yLnBuZykgY2Vu
dGVyIHRvcCBuby1yZXBlYXQ7XCI+PC9kaXY+PGRpdiBzdHlsZT1cImJhY2tncm91
bmQ6IHVybCgiICsgYm9hcmRfdGVtcGxhdGVfdXJsICsgImltZy9pY29ucy90b29s
YmFyL2NvbG9ycGlja2VyL2cucG5nKSBjZW50ZXIgdG9wIG5vLXJlcGVhdDtcIj48
L2Rpdj48ZGl2IHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAxMXB4OyBiYWNrZ3JvdW5k
OiB1cmwoIiArIGJvYXJkX3RlbXBsYXRlX3VybCArICJpbWcvaWNvbnMvdG9vbGJh
ci9jb2xvcnBpY2tlci9iLnBuZykgY2VudGVyIHRvcCBuby1yZXBlYXQ7XCI+PC9k
aXY+PGRpdiBzdHlsZT1cImJhY2tncm91bmQ6IHVybCgiICsgYm9hcmRfdGVtcGxh
dGVfdXJsICsgImltZy9pY29ucy90b29sYmFyL2NvbG9ycGlja2VyL2gucG5nKSBj
ZW50ZXIgdG9wIG5vLXJlcGVhdDtcIj48L2Rpdj48ZGl2IHN0eWxlPVwiYmFja2dy
b3VuZDogdXJsKCIgKyBib2FyZF90ZW1wbGF0ZV91cmwgKyAiaW1nL2ljb25zL3Rv
b2xiYXIvY29sb3JwaWNrZXIvcy5wbmcpIGNlbnRlciB0b3Agbm8tcmVwZWF0O1wi
PjwvZGl2PjxkaXYgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDA7IGJhY2tncm91bmQ6
IHVybCgiICsgYm9hcmRfdGVtcGxhdGVfdXJsICsgImltZy9pY29ucy90b29sYmFy
L2NvbG9ycGlja2VyL3YucG5nKSBjZW50ZXIgdG9wIG5vLXJlcGVhdDtcIj48L2Rp
dj48ZGl2IGNsYXNzPVwiQ0xDUENsZWFyIENMQ1BOb0RpbVwiPjwvZGl2PjxpbnB1
dCB0eXBlPVwidGV4dFwiIGlkPVwiQ0xDUGJhc2ljSGV4XCIgbWF4bGVuZ3RoPVwi
NlwiIHZhbHVlPVwiXCIgc3R5bGU9XCJ3aWR0aDogNDhweDsgbWFyZ2luLXJpZ2h0
OiAxMnB4OyBiYWNrZ3JvdW5kOiB1cmwoIiArIGJvYXJkX3RlbXBsYXRlX3VybCAr
ICJpbWcvaWNvbnMvdG9vbGJhci9jb2xvcnBpY2tlci9mb3JtRmllbGRMYXJnZUJH
LnBuZykgbm8tcmVwZWF0O1wiIC8+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJD
TENQYmFzaWNSXCIgbWF4bGVuZ3RoPVwiM1wiIC8+PGlucHV0IHR5cGU9XCJ0ZXh0
XCIgaWQ9XCJDTENQYmFzaWNHXCIgbWF4bGVuZ3RoPVwiM1wiIC8+PGlucHV0IHR5
cGU9XCJ0ZXh0XCIgaWQ9XCJDTENQYmFzaWNCXCIgbWF4bGVuZ3RoPVwiM1wiIHN0
eWxlPVwibWFyZ2luLXJpZ2h0OiAxM3B4O1wiIC8+PGlucHV0IHR5cGU9XCJ0ZXh0
XCIgaWQ9XCJDTENQYmFzaWNIXCIgbWF4bGVuZ3RoPVwiM1wiIC8+PGlucHV0IHR5
cGU9XCJ0ZXh0XCIgaWQ9XCJDTENQYmFzaWNTXCIgbWF4bGVuZ3RoPVwiM1wiIC8+
PGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJDTENQYmFzaWNWXCIgbWF4bGVuZ3Ro
PVwiM1wiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAwO1wiIC8+PGRpdiBjbGFzcz1c
IkNMQ1BDbGVhclwiIHN0eWxlPVwid2lkdGg6IDI0MnB4OyBoZWlnaHQ6IDE1cHg7
IG1hcmdpbjogMDsgZm9udC1zaXplOiAwO1wiPjwvZGl2PjxkaXYgc3R5bGU9XCJi
YWNrZ3JvdW5kOiB1cmwoIiArIGJvYXJkX3RlbXBsYXRlX3VybCArICJpbWcvaWNv
bnMvdG9vbGJhci9jb2xvcnBpY2tlci9jLnBuZykgY2VudGVyIHRvcCBuby1yZXBl
YXQ7XCI+PC9kaXY+PGRpdiBzdHlsZT1cImJhY2tncm91bmQ6IHVybCgiICsgYm9h
cmRfdGVtcGxhdGVfdXJsICsgImltZy9pY29ucy90b29sYmFyL2NvbG9ycGlja2Vy
L20ucG5nKSBjZW50ZXIgdG9wIG5vLXJlcGVhdDtcIj48L2Rpdj48ZGl2IHN0eWxl
PVwiYmFja2dyb3VuZDogdXJsKCIgKyBib2FyZF90ZW1wbGF0ZV91cmwgKyAiaW1n
L2ljb25zL3Rvb2xiYXIvY29sb3JwaWNrZXIveS5wbmcpIGNlbnRlciB0b3Agbm8t
cmVwZWF0O1wiPjwvZGl2PjxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kOiB1cmwoIiAr
IGJvYXJkX3RlbXBsYXRlX3VybCArICJpbWcvaWNvbnMvdG9vbGJhci9jb2xvcnBp
Y2tlci9rLnBuZykgY2VudGVyIHRvcCBuby1yZXBlYXQ7XCI+PC9kaXY+PGRpdiBj
bGFzcz1cIkNMQ1BDbGVhciBDTENQTm9EaW1cIj48L2Rpdj48ZGl2PjxpbnB1dCB0
eXBlPVwidGV4dFwiIGlkPVwiQ0xDUGJhc2ljQ1wiIG1heGxlbmd0aD1cIjNcIiAv
PjwvZGl2PjxkaXY+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJDTENQYmFzaWNN
XCIgbWF4bGVuZ3RoPVwiM1wiIC8+PC9kaXY+PGRpdj48aW5wdXQgdHlwZT1cInRl
eHRcIiBpZD1cIkNMQ1BiYXNpY1lcIiBtYXhsZW5ndGg9XCIzXCIgLz48L2Rpdj48
ZGl2PjxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwiQ0xDUGJhc2ljS1wiIG1heGxl
bmd0aD1cIjNcIiAvPjwvZGl2PjxpbWcgc3JjPVwiIiArIGJvYXJkX3RlbXBsYXRl
X3VybCArICJpbWcvaWNvbnMvdG9vbGJhci9jb2xvcnBpY2tlci9jbG9zZUJ0bi5w
bmdcIiBzdHlsZT1cImZsb2F0OiBsZWZ0OyB3aWR0aDogMTNweDsgaGVpZ2h0OiAx
M3B4OyBtYXJnaW46IDRweCAwIDAgMTA5cHg7IGN1cnNvcjogcG9pbnRlcjtcIiBv
bmNsaWNrPVwiQ0xDUGhpZGVQaWNrZXIoY2FsbGJhY2spO1wiIGFsdD1cIkNsb3Nl
XCIgLz48L2Rpdj48L2Rpdj48L2Rpdj4iOwoKCSQoIkNMQ1BJaW5uZXJTaGVsbCIp
Lm9ubW91c2Vkb3duID0gZnVuY3Rpb24oX2V2ZW50KSB7CgkJX2NsaWNrTW91c2VM
b2NhbGVDTENQSWlubmVyU2hlbGwgPSB0cnVlOwoJCV9jYW5EcmFnUGlja2VyID0g
ZmFsc2U7Cgl9CgkkKCJDTENQRHJhZ0RpdiIpLm9ubW91c2Vkb3duID0gZnVuY3Rp
b24oKSB7CgkJaWYgKF9jbGlja01vdXNlTG9jYWxlQ0xDUElpbm5lclNoZWxsID09
IGZhbHNlKSB7CgkJCV9jYW5EcmFnUGlja2VyID0gdHJ1ZTsKCQkJX0NMQ1BPZmZz
ZXQueCA9IChfbW91c2VDb29yZHNbMF0gLSBwYXJzZUludCgkUygiQ0xDUCIpLmxl
ZnQpKTsKCQkJX0NMQ1BPZmZzZXQueSA9IChfbW91c2VDb29yZHNbMV0gLSBwYXJz
ZUludCgkUygiQ0xDUCIpLnRvcCkpOwoJCX0KCX0KCglpZiAoKF9DTENQZGlzcGxh
eSA9PSAiYmxvY2siKSB8fCAoX0NMQ1BkaXNwbGF5ID09ICJub25lIikpIHsKCQkk
UygiQ0xDUCIpLmRpc3BsYXkgPSBfQ0xDUGRpc3BsYXk7Cgl9CglpZiAoX0NMQ1Bw
b3NpdGlvbiAhPSAiYWJzb2x1dGUiKSB7CgkJJFMoIkNMQ1AiKS5wb3NpdGlvbiA9
ICJyZWxhdGl2ZSI7Cgl9CglfQ0xDUGluaXRIZXggPSAoQ0xDUGlzSGV4KF9DTENQ
aW5pdEhleCkpID8gX0NMQ1Bpbml0SGV4IDogImZmZmZmZiI7CglfQ0xDUGFic1Bv
cyA9IENMQ1BhYnNQb3MoJCgiQ0xDUCIpKTsKCSQoIkNMQ1BiYXNpY0hleCIpLnZh
bHVlID0gX0NMQ1Bpbml0SGV4OwoJQ0xDUHVwZGF0ZUJhc2ljRnJvbUZvcm0obnVs
bCwiQ0xDUGJhc2ljSGV4Iik7CgoJdmFyIF9idG5zID0gWyJDTENQYmFzaWNIZXgi
LCJDTENQYmFzaWNSIiwiQ0xDUGJhc2ljRyIsIkNMQ1BiYXNpY0IiLCJDTENQYmFz
aWNIIiwiQ0xDUGJhc2ljUyIsIkNMQ1BiYXNpY1YiLCJDTENQYmFzaWNDIiwiQ0xD
UGJhc2ljTSIsIkNMQ1BiYXNpY1kiLCJDTENQYmFzaWNLIl07Cglmb3IgKF9pPTA7
X2k8X2J0bnMubGVuZ3RoO19pKyspIHsKCQlpZiAoWyJDTENQYmFzaWNDIiwiQ0xD
UGJhc2ljTSIsIkNMQ1BiYXNpY1kiLCJDTENQYmFzaWNLIl0uQ0xDUGluX2FycmF5
KF9idG5zW19pXSkgPT0gZmFsc2UpIHsKCQkJJChfYnRuc1tfaV0pLm9uYmx1ciA9
ICQoX2J0bnNbX2ldKS5vbmtleXVwID0gZnVuY3Rpb24oX2V2ZW50KSB7CgkJCQlf
ZXZlbnQgPSAoX2V2ZW50KSA/IENMQ1Bkb21FdmVudChfZXZlbnQpIDogQ0xDUGRv
bUV2ZW50KHdpbmRvdy5ldmVudCk7CgkJCQlDTENQdXBkYXRlQmFzaWNGcm9tRm9y
bShfZXZlbnQsX2V2ZW50LnRhcmdldC5pZCx0cnVlKTsKCQkJfQoJCX0KCgkJJChf
YnRuc1tfaV0pLm9ua2V5ZG93biA9IGZ1bmN0aW9uKF9ldmVudCkgewoJCQlfZXZl
bnQgPSAoX2V2ZW50KSA/IENMQ1Bkb21FdmVudChfZXZlbnQpIDogQ0xDUGRvbUV2
ZW50KHdpbmRvdy5ldmVudCk7CgkJCXZhciBfdmFsID0gJChfZXZlbnQudGFyZ2V0
LmlkKS52YWx1ZTsKCQkJaWYgKFs0MCwzOF0uQ0xDUGluX2FycmF5KF9ldmVudC5j
b2RlKSkgewoJCQkJX3ZhbCA9IChfZXZlbnQudGFyZ2V0LmlkID09ICJDTENQYmFz
aWNIZXgiKSA/IENMQ1BoZXgyZGVjKF92YWwpIDogcGFyc2VJbnQoX3ZhbCk7CgkJ
CQkoX2V2ZW50LmNvZGUgPT0gNDApID8gKChDTENQd2l0aGluKC0tX3ZhbCxfQ0xD
UGJhc2ljTGltaXRzW19ldmVudC50YXJnZXQuaWRdWzBdLF9DTENQYmFzaWNMaW1p
dHNbX2V2ZW50LnRhcmdldC5pZF1bMV0pKSA/ICIiIDogX3ZhbCsrKSA6ICgoQ0xD
UHdpdGhpbigrK192YWwsX0NMQ1BiYXNpY0xpbWl0c1tfZXZlbnQudGFyZ2V0Lmlk
XVswXSxfQ0xDUGJhc2ljTGltaXRzW19ldmVudC50YXJnZXQuaWRdWzFdKSkgPyAi
IiA6IF92YWwtLSk7CgkJCQlfdmFsID0gKF9ldmVudC50YXJnZXQuaWQgPT0gIkNM
Q1BiYXNpY0hleCIpID8gQ0xDUGRlYzJoZXgoX3ZhbCkudG9TdHJpbmcoKS5DTENQ
cGFkSGV4KCkgOiBfdmFsOwoJCQkJJChfZXZlbnQudGFyZ2V0LmlkKS52YWx1ZSA9
IF92YWw7CgkJCX0KCQkJaWYgKFsxMyw0MCwzOF0uQ0xDUGluX2FycmF5KF9ldmVu
dC5jb2RlKSkgewoJCQkJQ0xDUHVwZGF0ZUJhc2ljRnJvbUZvcm0oX2V2ZW50LF9l
dmVudC50YXJnZXQuaWQpOwoJCQl9CgkJfQoJfQp9OwoKQ0xDUERyYWdQaWNrZXIg
PSBmdW5jdGlvbihfZXZlbnQpIHsKCWlmIChfQ0xDUGlzRHJhZ2dhYmxlID09IHRy
dWUpIHsKCQl2YXIgX3hPZmZzZXQgPSAoX21vdXNlQ29vcmRzWzBdIC0gX0NMQ1BP
ZmZzZXQueCk7CgkJaWYgKCRTKCJDTENQIikucG9zaXRpb24gPT0gImFic29sdXRl
IikgewoJCQlfeE9mZnNldCA9IChfeE9mZnNldCA8IDApID8gMCA6IF94T2Zmc2V0
OwoJCX0KCQl2YXIgX3lPZmZzZXQgPSAoX21vdXNlQ29vcmRzWzFdIC0gX0NMQ1BP
ZmZzZXQueSk7CgkJaWYgKCRTKCJDTENQIikucG9zaXRpb24gPT0gImFic29sdXRl
IikgewoJCQlfeU9mZnNldCA9IChfeU9mZnNldCA8IDApID8gMCA6IF95T2Zmc2V0
OwoJCX0KCQkkUygiQ0xDUCIpLmxlZnQgPSAoX3hPZmZzZXQgKyAicHgiKTsKCQkk
UygiQ0xDUCIpLnRvcCA9IChfeU9mZnNldCArICJweCIpOwoJfQp9OwoKQ0xDUE1v
dXNlSGFuZGxlck9uTW91c2VNb3ZlID0gZnVuY3Rpb24oX2V2ZW50KSB7Cgl2YXIg
X3Njcm9sbFRvcCA9IChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9w
KSA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgOiBkb2N1bWVu
dC5ib2R5LnNjcm9sbFRvcDsKCXZhciBfc2Nyb2xsTGVmdCA9IChkb2N1bWVudC5k
b2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCkgPyBkb2N1bWVudC5kb2N1bWVudEVs
ZW1lbnQuc2Nyb2xsTGVmdCA6IGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdDsKCglf
ZXZlbnQgPSAoX2V2ZW50KSA/IF9ldmVudCA6IGV2ZW50OwoJX21vdXNlQ29vcmRz
ID0gKGRvY3VtZW50LmFsbCkgPyBbZXZlbnQuY2xpZW50WCArIF9zY3JvbGxMZWZ0
LGV2ZW50LmNsaWVudFkgKyBfc2Nyb2xsVG9wXSA6IFtfZXZlbnQucGFnZVgsX2V2
ZW50LnBhZ2VZXTsKCglpZiAoX2NsaWNrTW91c2VMb2NhbGUgPT0gIkNMQ1BQaWNr
ZXIiKSB7CgkJQ0xDUGRyYWcoX2V2ZW50KTsKCX0gZWxzZSBpZiAoX2NhbkRyYWdQ
aWNrZXIpIHsKCQlDTENQRHJhZ1BpY2tlcihfZXZlbnQpOwoJfQp9OwoKQ0xDUE1v
dXNlSGFuZGxlck9uTW91c2VVcCA9IGZ1bmN0aW9uKF9ldmVudCkgewoJZG9jdW1l
bnQub25zZWxlY3RzdGFydCA9IGZ1bmN0aW9uKCkgewoJCXJldHVybiB0cnVlOwoJ
fQoKCWlmIChfY2xpY2tNb3VzZUxvY2FsZSA9PSAiQ0xDUFBpY2tlciIpIHsKCQlf
c3RvcCA9IDE7Cgl9CglfY2xpY2tNb3VzZUxvY2FsZSA9ICIiOwoJX2NhbkRyYWdQ
aWNrZXIgPSBmYWxzZTsKCV9jbGlja01vdXNlTG9jYWxlQ0xDUElpbm5lclNoZWxs
ID0gZmFsc2U7Cn07CgpDTENQTW91c2VIYW5kbGVyT25Nb3VzZURvd24gPSBmdW5j
dGlvbigpIHsKCWRvY3VtZW50Lm9uc2VsZWN0c3RhcnQgPSBmdW5jdGlvbigpIHsK
CQlyZXR1cm4gZmFsc2U7Cgl9Cn07CgpDTENQc2hvd1BpY2tlciA9IGZ1bmN0aW9u
KF9vYmopIHsKCXZhciBfeCA9IChfb2JqICYmIF9vYmouX3gpID8gX29iai5feCA6
IF9tb3VzZUNvb3Jkc1swXTsKCXZhciBfeSA9IChfb2JqICYmIF9vYmouX3kpID8g
X29iai5feSA6IF9tb3VzZUNvb3Jkc1sxXTsKCgljYWxsYmFjayA9IF9vYmouY2Fs
bGJhY2s7CgoJaWYgKCRTKCJDTENQIikucG9zaXRpb24gPT0gInJlbGF0aXZlIikg
ewoJCV94IC09IF9DTENQYWJzUG9zLng7CgkJX3kgLT0gX0NMQ1BhYnNQb3MueTsK
CX0KCglpZiAoX29iaiAmJiBDTENQaXNIZXgoX29iai5faGV4KSkgewoJCSQoIkNM
Q1BiYXNpY0hleCIpLnZhbHVlID0gX29iai5faGV4OwoJCUNMQ1B1cGRhdGVCYXNp
Y0Zyb21Gb3JtKG51bGwsIkNMQ1BiYXNpY0hleCIpOwoJfQoKCSRTKCJDTENQIiku
bGVmdCA9IChfeCArICJweCIpOwoJJFMoIkNMQ1AiKS50b3AgPSAoX3kgKyAicHgi
KTsKCSRTKCJDTENQIikuZGlzcGxheSA9ICJibG9jayI7Cn07CgpDTENQaGlkZVBp
Y2tlciA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CgkkUygiQ0xDUCIpLmRpc3BsYXkg
PSAibm9uZSI7CgoJaWYodHlwZW9mIGNhbGxiYWNrID09ICdmdW5jdGlvbicpCgkJ
Y2FsbGJhY2soKTsKfTsKCkNMQ1BhZ2VudCA9IGZ1bmN0aW9uKF9hZ2VudCkgewoJ
cmV0dXJuIE1hdGgubWF4KG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2Uo
KS5pbmRleE9mKF9hZ2VudCksMCk7Cn07CgpDTENQc2xpZGUgPSBmdW5jdGlvbihf
ZEgsX29iamVjdCxfZXZlbnQpIHsKCV9jbGlja01vdXNlTG9jYWxlID0gIkNMQ1BQ
aWNrZXIiOwoJaWYgKF9zdG9wKSB7CgkJX3N0b3AgPSAwOwoKCQlfZHJhZ0hhbmRs
ZVN0eWxlID0gJFMoX2RIKTsKCQlfZHJhZ0hhbmRsZSA9IF9kSDsKCQlfYWJzb2x1
dGVQb3NpdGlvbiA9IENMQ1BhYnNQb3MoJChfb2JqZWN0KSksIHRYLCB0WTsKCQlf
YWJzb2x1dGVQb3NpdGlvbi54ICs9IDc7CgkJX2Fic29sdXRlUG9zaXRpb24ueSAr
PSA3OwoKCQlDTENQZHJhZyhfZXZlbnQpOwoJfQp9OwoKQ0xDUFhZID0gZnVuY3Rp
b24oX2V2ZW50KSB7Cgl2YXIgX3Njcm9sbFRvcCA9IChkb2N1bWVudC5kb2N1bWVu
dEVsZW1lbnQuc2Nyb2xsVG9wKSA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5z
Y3JvbGxUb3AgOiBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcDsKCXZhciBfc2Nyb2xs
TGVmdCA9IChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCkgPyBk
b2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCA6IGRvY3VtZW50LmJv
ZHkuc2Nyb2xsTGVmdDsKCXJldHVybiBDTENQYWdlbnQoIm1zaWUiKSA/IFtldmVu
dC5jbGllbnRYICsgX3Njcm9sbExlZnQsZXZlbnQuY2xpZW50WSArIF9zY3JvbGxU
b3BdIDogW19ldmVudC5wYWdlWCxfZXZlbnQucGFnZVldOwp9OwoKQ0xDUHRYWSA9
IGZ1bmN0aW9uKF9ldmVudCkgewoJdFkgPSBDTENQWFkoX2V2ZW50KVsxXSAtIF9h
YnNvbHV0ZVBvc2l0aW9uLnk7Cgl0WCA9IENMQ1BYWShfZXZlbnQpWzBdIC0gX2Fi
c29sdXRlUG9zaXRpb24ueDsKfTsKCkNMQ1Bja0hTViA9IGZ1bmN0aW9uKGEsYixf
ZHJhZ0hhbmRsZSkgewoJaWYgKENMQ1B3aXRoaW4oYSwwLGIpKSB7CgkJcmV0dXJu
IGE7Cgl9IGVsc2UgaWYgKGEgPiBiKSB7CgkJcmV0dXJuIGI7Cgl9IGVsc2UgaWYg
KGEgPCAwKSB7CgkJaWYgKF9kcmFnSGFuZGxlID09ICJDTENQYmFzaWNTYXRWYWxT
bGlkZSIpIHsKCQkJcmV0dXJuIC0zOwoJCX0gZWxzZSB7CgkJCXJldHVybiAtNDsK
CQl9Cgl9Cn07CgpDTENQd2l0aGluID0gZnVuY3Rpb24oX3ZhbCxfbG93LF9oaWdo
KSB7CglyZXR1cm4gKChfdmFsID49IF9sb3cpICYmIChfdmFsIDw9IF9oaWdoKSk7
Cn07CgpDTENQbWtIU1YgPSBmdW5jdGlvbihhLGIsYykgewoJcmV0dXJuIE1hdGgu
bWluKGEsTWF0aC5tYXgoMCxNYXRoLmNlaWwoKHBhcnNlSW50KGMpIC8gYikgKiBh
KSkpOwp9OwoKQ0xDUGRyYWcgPSBmdW5jdGlvbihfZXZlbnQpIHsKCV9ldmVudCA9
ICghX2V2ZW50KSA/IHdpbmRvdy5ldmVudCA6IF9ldmVudDsKCWlmICghX3N0b3Ap
IHsKCQlDTENQdFhZKF9ldmVudCk7CgoJCWNsZWFyVGltZW91dChfcmVmcmVzaFRp
bWVvdXQpOwoJCWlmIChfZHJhZ0hhbmRsZSA9PSAiQ0xDUFNhdFZhbFNsaWRlIikg
ewoJCQlfZHJhZ0hhbmRsZVN0eWxlLmxlZnQgPSBDTENQY2tIU1YodFgsd1NWLF9k
cmFnSGFuZGxlKSArICJweCI7CgkJCV9kcmFnSGFuZGxlU3R5bGUudG9wID0gQ0xD
UGNrSFNWKHRZLHdTVixfZHJhZ0hhbmRsZSkgKyAicHgiOwoKCQkJJFMoIkNMQ1BT
YXRTbGlkZSIpLnRvcCA9IE1hdGguZmxvb3IoKENMQ1Bja0hTVih0WCx3U1YsIkNM
Q1BTYXRWYWxTbGlkZSIpIC8gd1NWKSAqIF9odWVUcmFja0hlaWdodCkgKyAicHgi
OwoJCQkkUygiQ0xDUFZhbFNsaWRlIikudG9wID0gTWF0aC5mbG9vcigoQ0xDUGNr
SFNWKHRZLHdTViwiQ0xDUFNhdFZhbFNsaWRlIikgLyB3U1YpICogX2h1ZVRyYWNr
SGVpZ2h0KSArICJweCI7CgkJCUhTVlsxXSA9IENMQ1Bta0hTVigxMDAsd1NWLF9k
cmFnSGFuZGxlU3R5bGUubGVmdCk7CgkJCUhTVlsyXSA9IDEwMCAtIENMQ1Bta0hT
VigxMDAsd1NWLF9kcmFnSGFuZGxlU3R5bGUudG9wKTsKCQl9IGVsc2UgaWYgKF9k
cmFnSGFuZGxlID09ICJDTENQSHVlU2xpZGUiKSB7CgkJCXZhciBjayA9IENMQ1Bj
a0hTVih0WSxfaHVlVHJhY2tIZWlnaHQsX2RyYWdIYW5kbGUpOwoJCQlfZHJhZ0hh
bmRsZVN0eWxlLnRvcCA9IChjayArICJweCIpOwoJCQlIU1ZbMF0gPSBDTENQbWtI
U1YoMzYwLF9odWVUcmFja0hlaWdodCxjayk7CgkJfSBlbHNlIGlmIChfZHJhZ0hh
bmRsZSA9PSAiQ0xDUFNhdFNsaWRlIikgewoJCQl2YXIgY2sgPSBDTENQY2tIU1Yo
dFksX2h1ZVRyYWNrSGVpZ2h0LF9kcmFnSGFuZGxlKTsKCQkJX2RyYWdIYW5kbGVT
dHlsZS50b3AgPSAoY2sgKyAicHgiKTsKCQkJJFMoIkNMQ1BTYXRWYWxTbGlkZSIp
LmxlZnQgPSBNYXRoLmZsb29yKChDTENQY2tIU1YodFksX2h1ZVRyYWNrSGVpZ2h0
LCJDTENQU2F0VmFsU2xpZGUiKSAvIF9odWVUcmFja0hlaWdodCkgKiB3U1YpICsg
InB4IjsKCQkJSFNWWzFdID0gQ0xDUG1rSFNWKDEwMCxfaHVlVHJhY2tIZWlnaHQs
Y2spOwoJCX0gZWxzZSBpZiAoX2RyYWdIYW5kbGUgPT0gIkNMQ1BWYWxTbGlkZSIp
IHsKCQkJdmFyIGNrID0gQ0xDUGNrSFNWKHRZLF9odWVUcmFja0hlaWdodCxfZHJh
Z0hhbmRsZSk7CgkJCV9kcmFnSGFuZGxlU3R5bGUudG9wID0gKGNrICsgInB4Iik7
CgkJCSRTKCJDTENQU2F0VmFsU2xpZGUiKS50b3AgPSBNYXRoLmZsb29yKChDTENQ
Y2tIU1YodFksX2h1ZVRyYWNrSGVpZ2h0LCJDTENQU2F0VmFsU2xpZGUiKSAvIF9o
dWVUcmFja0hlaWdodCkgKiB3U1YpICsgInB4IjsKCQkJSFNWWzJdID0gKDEwMCAt
IENMQ1Bta0hTVigxMDAsX2h1ZVRyYWNrSGVpZ2h0LGNrKSk7CgkJfQoKCQkkUygi
Q0xDUFNhdFZhbCIpLmJhY2tncm91bmRDb2xvciA9ICRTKCJDTENQU2F0IikuYmFj
a2dyb3VuZENvbG9yID0gJFMoIkNMQ1BWYWwiKS5iYWNrZ3JvdW5kQ29sb3IgPSAo
IiMiICsgQ0xDUGhzdjJoZXgoW0hTVlswXSwxMDAsMTAwXSkpOwoJCWlmIChDTENQ
SGFuZGxlcikgewoJCQlDTENQSGFuZGxlcihDTENQaHN2MmhleChIU1YpKTsKCQl9
CgkJQ0xDUHVwZGF0ZUJhc2ljRm9ybUVsZW1lbnRzKCk7Cgl9Cn07CgpDTENQdXBk
YXRlQmFzaWNGb3JtRWxlbWVudHMgPSBmdW5jdGlvbihfZXhjZXB0KSB7CglpZiAo
X2V4Y2VwdCAhPSAiQ0xDUGJhc2ljSGV4IikgewoJCSQoIkNMQ1BiYXNpY0hleCIp
LnZhbHVlID0gQ0xDUGhzdjJoZXgoSFNWKTsKCX0KCgl2YXIgX3JnYiA9IENMQ1Bo
c3YycmdiKEhTVik7CglpZiAoX2V4Y2VwdCAhPSAiQ0xDUGJhc2ljUiIpIHsKCQkk
KCJDTENQYmFzaWNSIikudmFsdWUgPSBwYXJzZUludChfcmdiWzBdKTsKCX0KCWlm
IChfZXhjZXB0ICE9ICJDTENQYmFzaWNHIikgewoJCSQoIkNMQ1BiYXNpY0ciKS52
YWx1ZSA9IHBhcnNlSW50KF9yZ2JbMV0pOwoJfQoJaWYgKF9leGNlcHQgIT0gIkNM
Q1BiYXNpY0IiKSB7CgkJJCgiQ0xDUGJhc2ljQiIpLnZhbHVlID0gcGFyc2VJbnQo
X3JnYlsyXSk7Cgl9CgoJaWYgKF9leGNlcHQgIT0gIkNMQ1BiYXNpY0giKSB7CgkJ
JCgiQ0xDUGJhc2ljSCIpLnZhbHVlID0gcGFyc2VJbnQoSFNWWzBdKTsKCX0KCWlm
IChfZXhjZXB0ICE9ICJDTENQYmFzaWNTIikgewoJCSQoIkNMQ1BiYXNpY1MiKS52
YWx1ZSA9IHBhcnNlSW50KEhTVlsxXSk7Cgl9CglpZiAoX2V4Y2VwdCAhPSAiQ0xD
UGJhc2ljViIpIHsKCQkkKCJDTENQYmFzaWNWIikudmFsdWUgPSBwYXJzZUludChI
U1ZbMl0pOwoJfQoKCXZhciBfY215ayA9IENMQ1ByZ2IyY215ayhDTENQaHN2MnJn
YihIU1YpKTsKCWlmIChfZXhjZXB0ICE9ICJDTENQYmFzaWNDIikgewoJCSQoIkNM
Q1BiYXNpY0MiKS52YWx1ZSA9IHBhcnNlSW50KF9jbXlrWzBdKTsKCX0KCWlmIChf
ZXhjZXB0ICE9ICJDTENQYmFzaWNNIikgewoJCSQoIkNMQ1BiYXNpY00iKS52YWx1
ZSA9IHBhcnNlSW50KF9jbXlrWzFdKTsKCX0KCWlmIChfZXhjZXB0ICE9ICJDTENQ
YmFzaWNZIikgewoJCSQoIkNMQ1BiYXNpY1kiKS52YWx1ZSA9IHBhcnNlSW50KF9j
bXlrWzJdKTsKCX0KCWlmIChfZXhjZXB0ICE9ICJDTENQYmFzaWNLIikgewoJCSQo
IkNMQ1BiYXNpY0siKS52YWx1ZSA9IHBhcnNlSW50KF9jbXlrWzNdKTsKCX0KfTsK
CkNMQ1B1cGRhdGVCYXNpY0Zyb21Gb3JtID0gZnVuY3Rpb24oX2V2ZW50LF9lbGVt
ZW50SUQpIHsKCWlmIChfZWxlbWVudElEID09ICIiKSB7CgkJX2V2ZW50ID0gKF9l
dmVudCkgPyBfZXZlbnQgOiB3aW5kb3cuZXZlbnQ7CgkJaWYgKF9ldmVudC5zcmNF
bGVtZW50KSB7CgkJCV9ldmVudC50YXJnZXQgPSBfZXZlbnQuc3JjRWxlbWVudDsK
CQl9CgkJdmFyIF9pZCA9IF9ldmVudC50YXJnZXQuaWQ7Cgl9IGVsc2UgewoJCXZh
ciBfaWQgPSBfZWxlbWVudElEOwoJfQoJdmFyIF92YWwgPSAkKF9pZCkudmFsdWUs
IF9jYW5VcGRhdGUgPSBmYWxzZSwgX3NraXBIU1YgPSBmYWxzZTsKCglpZiAoX2lk
ID09ICJDTENQYmFzaWNIZXgiKSB7CgkJaWYgKENMQ1Bpc0hleChfdmFsKSkgewoJ
CQlIU1YgPSBDTENQcmdiMmhzdihDTENQaGV4MnJnYihfdmFsKSk7CgkJCV9jYW5V
cGRhdGUgPSB0cnVlLCBfc2tpcEhTViA9IHRydWU7CgkJfQoJfSBlbHNlIGlmIChf
aWQgPT0gIkNMQ1BiYXNpY1IiKSB7CgkJX3ZhbCA9IHBhcnNlSW50KF92YWwpOwoJ
CWlmIChDTENQd2l0aGluKF92YWwsMCwyNTUpKSB7CgkJCXZhciBfcmdiID0gQ0xD
UGhzdjJyZ2IoSFNWKTsKCQkJSFNWID0gQ0xDUHJnYjJoc3YoW192YWwsX3JnYlsx
XSxfcmdiWzJdXSk7CgkJCV9jYW5VcGRhdGUgPSB0cnVlOwoJCX0KCX0gZWxzZSBp
ZiAoX2lkID09ICJDTENQYmFzaWNHIikgewoJCV92YWwgPSBwYXJzZUludChfdmFs
KTsKCQlpZiAoQ0xDUHdpdGhpbihfdmFsLDAsMjU1KSkgewoJCQl2YXIgX3JnYiA9
IENMQ1Boc3YycmdiKEhTVik7CgkJCUhTViA9IENMQ1ByZ2IyaHN2KFtfcmdiWzBd
LF92YWwsX3JnYlsyXV0pOwoJCQlfY2FuVXBkYXRlID0gdHJ1ZTsKCQl9Cgl9IGVs
c2UgaWYgKF9pZCA9PSAiQ0xDUGJhc2ljQiIpIHsKCQlfdmFsID0gcGFyc2VJbnQo
X3ZhbCk7CgkJaWYgKENMQ1B3aXRoaW4oX3ZhbCwwLDI1NSkpIHsKCQkJdmFyIF9y
Z2IgPSBDTENQaHN2MnJnYihIU1YpOwoJCQlIU1YgPSBDTENQcmdiMmhzdihbX3Jn
YlswXSxfcmdiWzFdLF92YWxdKTsKCQkJX2NhblVwZGF0ZSA9IHRydWU7CgkJfQoJ
fSBlbHNlIGlmIChfaWQgPT0gIkNMQ1BiYXNpY0giKSB7CgkJX3ZhbCA9IHBhcnNl
SW50KF92YWwpOwoJCWlmIChDTENQd2l0aGluKF92YWwsMCwzNjApKSB7CgkJCUhT
ViA9IFtfdmFsLEhTVlsxXSxIU1ZbMl1dCgkJCV9jYW5VcGRhdGUgPSB0cnVlOwoJ
CX0KCX0gZWxzZSBpZiAoX2lkID09ICJDTENQYmFzaWNTIikgewoJCV92YWwgPSBw
YXJzZUludChfdmFsKTsKCQlpZiAoQ0xDUHdpdGhpbihfdmFsLDAsMzYwKSkgewoJ
CQlIU1YgPSBbSFNWWzBdLF92YWwsSFNWWzJdXQoJCQlfY2FuVXBkYXRlID0gdHJ1
ZTsKCQl9Cgl9IGVsc2UgaWYgKF9pZCA9PSAiQ0xDUGJhc2ljViIpIHsKCQlfdmFs
ID0gcGFyc2VJbnQoX3ZhbCk7CgkJaWYgKENMQ1B3aXRoaW4oX3ZhbCwwLDM2MCkp
IHsKCQkJSFNWID0gW0hTVlswXSxIU1ZbMV0sX3ZhbF0KCQkJX2NhblVwZGF0ZSA9
IHRydWU7CgkJfQoJfSBlbHNlIGlmICgoX2lkID09ICJDTENQYmFzaWNDIikgfHwg
KF9pZCA9PSAiQ0xDUGJhc2ljTSIpIHx8IChfaWQgPT0gIkNMQ1BiYXNpY1kiKSB8
fCAoX2lkID09ICJDTENQYmFzaWNLIikpIHsKCQlfYyA9IHBhcnNlSW50KCQoIkNM
Q1BiYXNpY0MiKS52YWx1ZSk7CgkJX20gPSBwYXJzZUludCgkKCJDTENQYmFzaWNN
IikudmFsdWUpOwoJCV95ID0gcGFyc2VJbnQoJCgiQ0xDUGJhc2ljWSIpLnZhbHVl
KTsKCQlfayA9IHBhcnNlSW50KCQoIkNMQ1BiYXNpY0siKS52YWx1ZSk7CgoJCWlm
IChfaWQgPT0gIkNMQ1BiYXNpY0MiKSB7CgkJCV9jID0gKENMQ1B3aXRoaW4oX2Ms
MCwxMDApKSA/IF9jIDogMDsKCQl9IGVsc2UgaWYgKF9pZCA9PSAiQ0xDUGJhc2lj
TSIpIHsKCQkJX20gPSAoQ0xDUHdpdGhpbihfbSwwLDEwMCkpID8gX20gOiAwOwoJ
CX0gZWxzZSBpZiAoX2lkID09ICJDTENQYmFzaWNZIikgewoJCQlfeSA9IChDTENQ
d2l0aGluKF95LDAsMTAwKSkgPyBfeSA6IDA7CgkJfSBlbHNlIGlmIChfaWQgPT0g
IkNMQ1BiYXNpY0siKSB7CgkJCV9rID0gKENMQ1B3aXRoaW4oX2ssMCwxMDApKSA/
IF9rIDogMDsKCQl9CgkJSFNWID0gQ0xDUHJnYjJoc3YoQ0xDUGNteWsycmdiKFtf
YyxfbSxfeSxfa10pKTsKCQlfY2FuVXBkYXRlID0gdHJ1ZTsKCX0KCglpZiAoX2Nh
blVwZGF0ZSkgewoJCXZhciBfaHVlU2xpZGVyWSA9IENMQ1BoMnkoSFNWWzBdKTsK
CQl2YXIgX3NhdFNsaWRlclkgPSBDTENQczJ5KEhTVlsxXSk7CgkJdmFyIF92YWxT
bGlkZXJZID0gQ0xDUHYyeShIU1ZbMl0pOwoKCQkkUygiQ0xDUEh1ZVNsaWRlIiku
dG9wID0gTWF0aC5mbG9vcihDTENQY2tIU1YoKF9odWVTbGlkZXJZIC0gMyksX2h1
ZVRyYWNrSGVpZ2h0ICsgMywiQ0xDUEh1ZVNsaWRlIikpICsgInB4IjsKCQkkUygi
Q0xDUFNhdFNsaWRlIikudG9wID0gTWF0aC5mbG9vcihDTENQY2tIU1YoKF9zYXRT
bGlkZXJZIC0gMyksX2h1ZVRyYWNrSGVpZ2h0ICsgMywiQ0xDUFNhdFNsaWRlIikp
ICsgInB4IjsKCQkkUygiQ0xDUFZhbFNsaWRlIikudG9wID0gTWF0aC5mbG9vcihD
TENQY2tIU1YoKF92YWxTbGlkZXJZIC0gMyksX2h1ZVRyYWNrSGVpZ2h0ICsgMywi
Q0xDUFZhbFNsaWRlIikpICsgInB4IjsKCgkJJFMoIkNMQ1BTYXRWYWxTbGlkZSIp
LmxlZnQgPSBNYXRoLmNlaWwoQ0xDUGNrSFNWKChfc2F0U2xpZGVyWSAtIDcpLHdT
ViwiQ0xDUFNhdFZhbFNsaWRlIikpICsgInB4IjsKCQkkUygiQ0xDUFNhdFZhbFNs
aWRlIikudG9wID0gTWF0aC5jZWlsKENMQ1Bja0hTVigoX3ZhbFNsaWRlclkgLSA3
KSx3U1YsIkNMQ1BTYXRWYWxTbGlkZSIpKSArICJweCI7CgkJJFMoIkNMQ1BTYXRW
YWwiKS5iYWNrZ3JvdW5kQ29sb3IgPSAkUygiQ0xDUFNhdCIpLmJhY2tncm91bmRD
b2xvciA9ICRTKCJDTENQVmFsIikuYmFja2dyb3VuZENvbG9yID0gKCIjIiArIENM
Q1Boc3YyaGV4KFtIU1ZbMF0sMTAwLDEwMF0pKTsKCQl2YXIgX3RtcCA9IChfc2tp
cEhTViA9PSBmYWxzZSkgPyBDTENQaHN2MmhleChIU1YpIDogX3ZhbDsKCgkJaWYg
KENMQ1BIYW5kbGVyKSB7CgkJCUNMQ1BIYW5kbGVyKF90bXApOwoJCX0KCQlDTENQ
dXBkYXRlQmFzaWNGb3JtRWxlbWVudHMoX2lkKTsKCX0KfTsKCgovKiBDT05WRVJT
SU9OUyAqLwpDTENQaDJ5ID0gZnVuY3Rpb24oX2h1ZSkgewoJcmV0dXJuICgoX2h1
ZSAvIDM2MCkgKiBfaHVlVHJhY2tIZWlnaHQpOwp9OwpDTENQczJ5ID0gZnVuY3Rp
b24oX3NhdFZhbCkgewoJcmV0dXJuICgoX3NhdFZhbCAvIDEwMCkgKiBfaHVlVHJh
Y2tIZWlnaHQpOwp9OwpDTENQdjJ5ID0gZnVuY3Rpb24oX3ZhbFZhbCkgewoJcmV0
dXJuIChNYXRoLmFicygoKF92YWxWYWwgLyAxMDApICogKF9odWVUcmFja0hlaWdo
dCArIDMpKSAtIF9odWVUcmFja0hlaWdodCAtIDMpKTsKfTsKQ0xDUGhzdjJoZXgg
PSBmdW5jdGlvbihoKSB7CglyZXR1cm4gQ0xDUHJnYjJoZXgoQ0xDUGhzdjJyZ2Io
aCkpOwp9OwpDTENQdG9IZXggPSBmdW5jdGlvbih2KSB7Cgl2PU1hdGgucm91bmQo
TWF0aC5taW4oTWF0aC5tYXgoMCx2KSwyNTUpKTsgcmV0dXJuKCIwMTIzNDU2Nzg5
QUJDREVGIi5jaGFyQXQoKHYtdiUxNikvMTYpKyIwMTIzNDU2Nzg5QUJDREVGIi5j
aGFyQXQodiUxNikpOwp9OwpDTENQaGV4MnJnYiA9IGZ1bmN0aW9uKHIpIHsKCXJl
dHVybih7MDpwYXJzZUludChyLnN1YnN0cigwLDIpLDE2KSwxOnBhcnNlSW50KHIu
c3Vic3RyKDIsMiksMTYpLDI6cGFyc2VJbnQoci5zdWJzdHIoNCwyKSwxNil9KTsK
fTsKQ0xDUHJnYjJoZXggPSBmdW5jdGlvbihyKSB7CglyZXR1cm4oQ0xDUHRvSGV4
KHJbMF0pK0NMQ1B0b0hleChyWzFdKStDTENQdG9IZXgoclsyXSkpOwp9OwpDTENQ
cmdiMmhzdiA9IGZ1bmN0aW9uKHIpIHsKCXZhciBtYXg9TWF0aC5tYXgoclswXSxy
WzFdLHJbMl0pLCBkZWx0YT1tYXgtTWF0aC5taW4oclswXSxyWzFdLHJbMl0pLCBI
LCBTLCBWOwoJaWYobWF4IT0wKSB7CgkJUz1NYXRoLnJvdW5kKGRlbHRhL21heCox
MDApOwoJCWlmKHJbMF09PW1heCkgSD0oclsxXS1yWzJdKS9kZWx0YTsgZWxzZSBp
ZihyWzFdPT1tYXgpIEg9MisoclsyXS1yWzBdKS9kZWx0YTsgZWxzZSBpZihyWzJd
PT1tYXgpIEg9NCsoclswXS1yWzFdKS9kZWx0YTsgdmFyIEg9TWF0aC5taW4oTWF0
aC5yb3VuZChIKjYwKSwzNjApOyBpZihIPDApIEgrPTM2MDsKCX0KCXJldHVybih7
MDpIP0g6MCwxOlM/UzowLDI6TWF0aC5yb3VuZCgobWF4LzI1NSkqMTAwKX0pOwp9
OwpDTENQaHN2MnJnYiA9IGZ1bmN0aW9uKHIpIHsKCXZhciBGLCBSLCBCLCBHLCBI
PXJbMF0vMzYwLCBTPXJbMV0vMTAwLCBWPXJbMl0vMTAwOwoJaWYoUz4wKSB7CgkJ
aWYoSD49MSkgSD0wOwoJCUg9NipIOyBGPUgtTWF0aC5mbG9vcihIKTsgQT1NYXRo
LnJvdW5kKDI1NSpWKigxLVMpKTsgQj1NYXRoLnJvdW5kKDI1NSpWKigxLShTKkYp
KSk7IEM9TWF0aC5yb3VuZCgyNTUqViooMS0oUyooMS1GKSkpKTsgVj1NYXRoLnJv
dW5kKDI1NSpWKTsKCQlzd2l0Y2goTWF0aC5mbG9vcihIKSkgewoJCQljYXNlIDA6
IFI9VjsgRz1DOyBCPUE7IGJyZWFrOwoJCQljYXNlIDE6IFI9QjsgRz1WOyBCPUE7
IGJyZWFrOwoJCQljYXNlIDI6IFI9QTsgRz1WOyBCPUM7IGJyZWFrOwoJCQljYXNl
IDM6IFI9QTsgRz1COyBCPVY7IGJyZWFrOwoJCQljYXNlIDQ6IFI9QzsgRz1BOyBC
PVY7IGJyZWFrOwoJCQljYXNlIDU6IFI9VjsgRz1BOyBCPUI7IGJyZWFrOwoJCX0K
CQlyZXR1cm4oW1I/UjowLEc/RzowLEI/QjowXSk7Cgl9CgllbHNlIHJldHVybihb
KFY9TWF0aC5yb3VuZChWKjI1NSkpLFYsVl0pOwp9OwpDTENQcmdiMmNteWsgPSBm
dW5jdGlvbihyKSB7Cgl2YXIgQz0xLShyWzBdLzI1NSksIE09MS0oclsxXS8yNTUp
LCBZPTEtKHJbMl0vMjU1KSwgSz1NYXRoLm1pbihZLE1hdGgubWluKE0sTWF0aC5t
aW4oQywxKSkpOwoJQz1NYXRoLnJvdW5kKChDLUspLygxLUspKjEwMCk7CglDID0g
KGlzTmFOKEMpKSA/IDAgOiBDOwoJTT1NYXRoLnJvdW5kKChNLUspLygxLUspKjEw
MCk7CglNID0gKGlzTmFOKE0pKSA/IDAgOiBNOwoJWT1NYXRoLnJvdW5kKChZLUsp
LygxLUspKjEwMCk7CglZID0gKGlzTmFOKFkpKSA/IDAgOiBZOwoJSz1NYXRoLnJv
dW5kKEsqMTAwKTsKCXJldHVybihbQz9DOjAsTT9NOjAsWT9ZOjAsS10pOwp9OwpD
TENQY215azJyZ2IgPSBmdW5jdGlvbihyKSB7CglyWzNdPXJbM10vMTAwOyB2YXIg
Uj0oMS0oclswXS8xMDAqKDEtclszXSkrclszXSkpKjI1NSwgRz0oMS0oclsxXS8x
MDAqKDEtclszXSkrclszXSkpKjI1NSwgQj0oMS0oclsyXS8xMDAqKDEtclszXSkr
clszXSkpKjI1NTsKCXJldHVybihbUixHLEJdKTsKfTsKdmFyIGRvY2xpYnNPcGVu
ZWQgPSBBcnJheSgpOwp2YXIgY3VycmVudFRleHRhcmVhOwoKdmFyIHJtbF9idXR0
b25zID0gWwoJJ2JvbGQnLCAnaXRhbGljJywgJ3VuZGVybGluZScsICdzdHJpa2Un
LCdobGluZScsCgkvKidzdXAnLCAnc3ViJywnaGxpbmUnLCovCgknYWxpZ25fbGVm
dCcsICdhbGlnbl9jZW50ZXInLCAnYWxpZ25fcmlnaHQnLCdobGluZScsCgknbGlz
dF9idWxsZXQnLCAnbGlzdF9udW0nLCdobGluZScsCgkvKidjb2xvcl9iZycsICov
J2NvbG9yX2ZnJywnaGxpbmUnLAoJJ2xpbmsnLCAnaW1hZ2UnLCdobGluZScsCgkn
dGFibGUnLCAnaHInLCdobGluZScsCgknbWF4aW1pemUnLCAnZG9jdW1lbnRsaWJy
YXJ5JywgJ3NtaWxleXMnCl07CgpmdW5jdGlvbiBzZXRDdXJyZW50VGV4dGFyZWEo
d2luZG93KQp7CgljdXJyZW50VGV4dGFyZWEgPSBkb2NsaWJzT3BlbmVkW3dpbmRv
d107Cn07CgpmdW5jdGlvbiBnZXRUb29sYmFyKCBzaG93RG9jdW1lbnRMaWJyYXJ5
ICkKewoJdmFyIHggPSBjcmVhdGVET01Ob2RlKCdkaXYnLCB7ImNsYXNzIjogInJt
bHRvb2xiYXIifSwgW10pOwoKCXZhciBpbWc7Cglmb3IodmFyIGkgPSAwOyBpIDwg
cm1sX2J1dHRvbnMubGVuZ3RoO2krKykKCXsKCQlpZihybWxfYnV0dG9uc1tpXSA9
PSAnZG9jdW1lbnRsaWJyYXJ5JyAmJiAhc2hvd0RvY3VtZW50TGlicmFyeSkKCQkJ
Y29udGludWU7CgoJCWlmKHJtbF9idXR0b25zW2ldID09ICdtYXhpbWl6ZScgJiYg
ZXZlbnRzLmluZGV4T2Yoc3RyZXRjaFRleHRhcmVhcykgPiAtMSkKCQkJY29udGlu
dWU7CgoJCWlmKHJtbF9idXR0b25zW2ldID09ICdzbWlsZXlzJykKCQl7CgkJCXZh
ciBzbWlsZXlzID0gKG5ldyBET01RdWVyeSgnZGl2I3NtaWxleXMnKSkuZ2V0KDAp
OwoKCQkJaWYoIXNtaWxleXMpCgkJCQljb250aW51ZTsKCgkJCXZhciBzbWlsZXlz
Q2xvbmUgPSBzbWlsZXlzLmNsb25lTm9kZSh0cnVlKTsKCQkJdmFyIHNtaWxleXND
b250YWluZXIgPSBnZXRTaWJsaW5nTm9kZShzbWlsZXlzLCAndXAnLCAnZGQnKTsK
CQkJdmFyIHNtaWxleXNDb250YWluZXJMYWJlbCA9IGdldFNpYmxpbmdOb2RlKHNt
aWxleXNDb250YWluZXIsICdwcmV2aW91cycsICdkdCcpOwoKCQkJc21pbGV5c0Nv
bnRhaW5lckxhYmVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc21pbGV5c0NvbnRh
aW5lckxhYmVsKTsKCQkJc21pbGV5c0NvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92
ZUNoaWxkKHNtaWxleXNDb250YWluZXIpOwoKCQkJeC5hcHBlbmRDaGlsZChzbWls
ZXlzQ2xvbmUpOwoJCX0KCgkJaWYocm1sX2J1dHRvbnNbaV0gPT0gJ2NvbG9yX2Zn
JyB8fCBybWxfYnV0dG9uc1tpXSA9PSAnY29sb3JfYmcnKQoJCXsKCQkJY29sb3Jw
aWNrZXIgPSBuZXcgRE9NUXVlcnkoJ2RpdiNDTENQJykuZ2V0KDApOwoKCQkJaWYo
IWNvbG9ycGlja2VyKQoJCQl7CgkJCQljb2xvcnBpY2tlciA9IGNyZWF0ZURPTU5v
ZGUoJ2RpdicsIHsgJ2lkJyA6ICdDTENQJywgJ2NsYXNzJyA6ICdDTENQJyB9LCBb
XSk7CgkJCQlkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbG9ycGlja2VyKTsK
CQkJCUNMQ1Bpbml0UGlja2VyKCk7CgkJCX0KCQl9CgoJCWltZyA9IGNyZWF0ZURP
TU5vZGUoJ2ltZycsIHsKCQkJJ3NyYycJOiBib2FyZF90ZW1wbGF0ZV91cmwrJ2lt
Zy9pY29ucy90b29sYmFyL3Rvb2xiYXItc3ByaXRlLmdpZicsCgkJCSdjbGFzcycg
OiAnYnV0dG9uJywKCQkJJ3RpdGxlJyA6IGdldFRleHQoJ3Rvb2xiYXInLCBybWxf
YnV0dG9uc1tpXSksCgkJCSdhbHQnIDogZ2V0VGV4dCgndG9vbGJhcicsIHJtbF9i
dXR0b25zW2ldKQoJCX0sIFtdKTsKCgkJaWYocm1sX2J1dHRvbnNbaV0gIT0gJ2hs
aW5lJykKCQl7CgkJCWFkZEV2ZW50KGltZywgJ2NsaWNrJywgaGFuZGxlUk1MVG9v
bGJhckNsaWNrKTsKCQkJaW1nLmlkICA9ICdybWx0b29sYmFyXycrcm1sX2J1dHRv
bnNbaV07CgkJfQoJCWVsc2UKCQkJanNjc3MoJ2FkZCcsaW1nLCdobGluZScsJycp
OwoKCQl4LmFwcGVuZENoaWxkKGltZyk7Cgl9CgoJcmV0dXJuIHg7Cn07CgpmdW5j
dGlvbiBoYW5kbGVSTUxUb29sYmFyQ2xpY2soKQp7CglpZih0aGlzLnBhcmVudE5v
ZGUgJiYgdGhpcy5wYXJlbnROb2RlLm5leHRTaWJsaW5nICYmIHRoaXMucGFyZW50
Tm9kZS5uZXh0U2libGluZy50YWdOYW1lID09ICdURVhUQVJFQScpCgl7CgkJY3Vy
cmVudFRleHRhcmVhID0gdGhpcy5wYXJlbnROb2RlLm5leHRTaWJsaW5nOwoJfQoK
CXZhciBsaXN0dHlwZSwgbXlfbGluaywgbXlfdGl0bGUsIHNlbCwgcm93cywgdHlw
ZSwgb3V0OwoKCXN3aXRjaCh0aGlzLmlkKQoJewoJCWNhc2UgJ3JtbHRvb2xiYXJf
Ym9sZCc6CgkJCXdyYXBTZWxlY3Rpb24oJ1tiXScsJ1svYl0nKTsKCQkJcmV0dXJu
OwoJCQlicmVhazsKCQljYXNlICdybWx0b29sYmFyX2l0YWxpYyc6CgkJCXdyYXBT
ZWxlY3Rpb24oJ1tpXScsJ1svaV0nKTsKCQkJcmV0dXJuOwoJCQlicmVhazsKCQlj
YXNlICdybWx0b29sYmFyX3VuZGVybGluZSc6CgkJCXdyYXBTZWxlY3Rpb24oJ1t1
XScsJ1svdV0nKTsKCQkJcmV0dXJuOwoJCQlicmVhazsKCQljYXNlICdybWx0b29s
YmFyX3N0cmlrZSc6CgkJCXdyYXBTZWxlY3Rpb24oJ1tzXScsJ1svc10nKTsKCQkJ
cmV0dXJuOwoJCQlicmVhazsKCQljYXNlICdybWx0b29sYmFyX3N1cCc6CgkJCXdy
YXBTZWxlY3Rpb24oJ1tzdXBdJywnWy9zdXBdJyk7CgkJCXJldHVybjsKCQkJYnJl
YWs7CgkJY2FzZSAncm1sdG9vbGJhcl9zdWInOgoJCQl3cmFwU2VsZWN0aW9uKCdb
c3ViXScsJ1svc3ViXScpOwoJCQlyZXR1cm47CgkJCWJyZWFrOwoJCWNhc2UgJ3Jt
bHRvb2xiYXJfYWxpZ25fbGVmdCc6CgkJCXdyYXBTZWxlY3Rpb24oJ1tsZWZ0XScs
J1svbGVmdF0nKTsKCQkJcmV0dXJuOwoJCQlicmVhazsKCQljYXNlICdybWx0b29s
YmFyX2FsaWduX2NlbnRlcic6CgkJCXdyYXBTZWxlY3Rpb24oJ1tjZW50ZXJdJywn
Wy9jZW50ZXJdJyk7CgkJCXJldHVybjsKCQkJYnJlYWs7CgkJY2FzZSAncm1sdG9v
bGJhcl9hbGlnbl9yaWdodCc6CgkJCXdyYXBTZWxlY3Rpb24oJ1tyaWdodF0nLCdb
L3JpZ2h0XScpOwoJCQlyZXR1cm47CgkJCWJyZWFrOwoJCWNhc2UgJ3JtbHRvb2xi
YXJfbGlzdF9idWxsZXQnOgoJCQlsaXN0dHlwZSA9ICcqJzsKCQljYXNlICdybWx0
b29sYmFyX2xpc3RfbnVtJzoKCQkJaWYodHlwZW9mIGxpc3R0eXBlID09ICd1bmRl
ZmluZWQnKQoJCQkJbGlzdHR5cGUgPSAnMSc7CgkJCXZhciB0eXBlID0gJyonOwoJ
CQl2YXIgc2VsID0gZ2V0Q3VycmVudFNlbGVjdGlvbigpOwoJCQl2YXIgcm93cyA9
IHNlbC5zcGxpdCgnXG4nKTsKCQkJdmFyIG91dCA9ICdbbGlzdD0nK2xpc3R0eXBl
KyddJzsKCQkJZm9yKHZhciBpID0gMCwgcm93Oyhyb3c9cm93c1tpXSk7aSsrKQoJ
CQl7CgkJCQlpZihyb3cgIT0gJycpCgkJCQkJb3V0ICs9ICdcblx0W2xpXScrcm93
KydbL2xpXSc7CgkJCX0KCgkJCWlmKGk9PTApCgkJCXsKCQkJCW91dCArPSAnXG5c
dFtsaV0nK3JvdysnWy9saV0nOwoJCQl9CgoJCQlvdXQgKz0gJ1xuWy9saXN0XSc7
CgkJCXNldFNlbGVjdGlvbihvdXQpOwoJCQlyZXR1cm47CgkJCWJyZWFrOwoJCWNh
c2UgJ3JtbHRvb2xiYXJfY29sb3JfZmcnOgoJCQlDTENQc2hvd1BpY2tlciggeyAn
Y2FsbGJhY2snIDogZnVuY3Rpb24oKSB7IHdyYXBTZWxlY3Rpb24oIltmZ2NvbG9y
PSIgKyBDTENQaHN2MmhleChIU1YpICsgIl0iLCAiWy9mZ2NvbG9yXSIpIH0gfSAp
OwoJCQlicmVhazsKCQljYXNlICdybWx0b29sYmFyX2NvbG9yX2JnJzoKCQkJQ0xD
UHNob3dQaWNrZXIoIHsgJ2NhbGxiYWNrJyA6IGZ1bmN0aW9uKCkgeyB3cmFwU2Vs
ZWN0aW9uKCJbYmdjb2xvcj0iICsgQ0xDUGhzdjJoZXgoSFNWKSArICJdIiwgIlsv
Ymdjb2xvcl0iKSB9IH0gKTsKCQkJYnJlYWs7CgkJY2FzZSAncm1sdG9vbGJhcl90
YWJsZSc6CgkJCXNlbCA9IGdldEN1cnJlbnRTZWxlY3Rpb24oKTsKCQkJcm93cyA9
IHNlbC5zcGxpdCgnXG4nKTsKCQkJb3V0ID0gJ1t0YWJsZV0nOwoJCQl2YXIgajsK
CQkJZm9yKHZhciBpID0gMCwgcm93Oyhyb3c9cm93c1tpXSk7aSsrKQoJCQl7CgkJ
CQlvdXQgKz0gJ1xuW3RyXSc7CgkJCQl2YXIgY2VsbHMgPSByb3cuc3BsaXQoJ1x0
Jyk7CgkJCQlmb3IodmFyIGo9MCwgY2VsbDsoY2VsbD1jZWxsc1tqXSk7aisrKQoJ
CQkJewoJCQkJCW91dCArPSAnXG5cdFt0ZF0nK2NlbGwrJ1svdGRdJzsKCQkJCX0K
CQkJCW91dCArPSAnXG5bL3RyXSc7CgkJCX0KCQkJb3V0ICs9ICdcblsvdGFibGVd
JzsKCgkJCXNldFNlbGVjdGlvbihvdXQpOwoJCQlyZXR1cm47CgkJCWJyZWFrOwoJ
CWNhc2UgJ3JtbHRvb2xiYXJfaW1hZ2UnOgoJCQlpZihnZXRDdXJyZW50U2VsZWN0
aW9uKCkgIT0gJycpCgkJCXsKCQkJCXdyYXBTZWxlY3Rpb24oJ1tpbWddJywgJ1sv
aW1nXScpOwoJCQkJcmV0dXJuOwoJCQl9CgkJCW15X2xpbmsgPSBwcm9tcHQoZ2V0
VGV4dCgndG9vbGJhcicsICdlbnRlcl9pbWdfdXJsJyksImh0dHA6Ly8iKTsKCgkJ
CWlmIChteV9saW5rICE9IG51bGwgJiYgbXlfbGluayAhPSdodHRwOi8vJykKCQkJ
ewoJCQkJbGZ0PSJbaW1nXSIgKyBteV9saW5rOwoJCQkJcmd0PSJbL2ltZ10iOwoJ
CQkJd3JhcFNlbGVjdGlvbihsZnQsIHJndCk7CgkJCX0KCQkJcmV0dXJuOwoJCQli
cmVhazsKCQljYXNlICdybWx0b29sYmFyX2xpbmsnOgoJCQlteV9saW5rID0gcHJv
bXB0KGdldFRleHQoJ3Rvb2xiYXInLCAnZW50ZXJfdXJsJyksImh0dHA6Ly8iKTsK
CQkJaWYgKG15X2xpbmsgPT0gbnVsbCkKCQkJCXJldHVybjsKCgkJCXZhciBzZWxl
Y3Rpb24gPSBnZXRDdXJyZW50U2VsZWN0aW9uKCk7CgkJCW15X3RpdGxlID0gcHJv
bXB0KGdldFRleHQoJ3Rvb2xiYXInLCAnZW50ZXJfdGl0bGUnKSwiIik7CgoJCQlp
ZiAoIHNlbGVjdGlvbiA9PSAnJyApCgkJCXsKCQkJCWlmKG15X3RpdGxlICE9ICcn
ICkKCQkJCQlsZnQ9Ilt1cmw9IiArIG15X2xpbmsgKyAiXSIrbXlfdGl0bGU7CgkJ
CQllbHNlCgkJCQkJbGZ0PSJbdXJsPSIgKyBteV9saW5rICsgIl0iK215X2xpbms7
CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlpZihteV90aXRsZSAhPSAnJyApCgkJCQkJ
bGZ0PSJbdXJsPSIgKyBteV9saW5rICsgIiwiK215X3RpdGxlKyJdIjsKCQkJCWVs
c2UKCQkJCQlsZnQ9Ilt1cmw9IiArIG15X2xpbmsgKyAiXSI7CgkJCX0KCgkJCXJn
dD0iWy91cmxdIjsKCQkJd3JhcFNlbGVjdGlvbihsZnQsIHJndCk7CgkJCXJldHVy
bjsKCQkJYnJlYWs7CgkJY2FzZSAncm1sdG9vbGJhcl9kb2N1bWVudGxpYnJhcnkn
OgoJCQl2YXIgcmVmID0gd2luZG93Lm9wZW4oYm9hcmRfc2NyaXB0X3VybCsnL2xp
c3RfZG9jdW1lbnRzP2RhdGFbc21hbGxdPTEnLCdEb2N1bWVudExpYnJhcnknLCd3
aWR0aD03ODUsaGVpZ2h0PTY1MCxyZXNpemFibGU9eWVzLHNjcm9sbGJhcnM9eWVz
Jyk7CgkJCWRvY2xpYnNPcGVuZWRbcmVmXSA9IHRoaXMucGFyZW50Tm9kZS5uZXh0
U2libGluZzsKCQkJYnJlYWs7CgkJY2FzZSAncm1sdG9vbGJhcl9zbWlsZXlzJzoK
CQkJdG9nZ2xlU21pbGV5cygpOwoJCQlhZGRFdmVudChnZXRfcm1sdGV4dGFyZWEo
KSwgJ2ZvY3VzJywgaGlkZVNtaWxleXMpOwoJCQlhZGRFdmVudChnZXRfcm1sdGV4
dGFyZWEoKSwgJ2JsdXInLCBoaWRlU21pbGV5cyk7CgkJCWJyZWFrOwoJCWNhc2Ug
J3JtbHRvb2xiYXJfbWF4aW1pemUnOgoJCQl2YXIgdHh0YXJlYSA9IGdldF9ybWx0
ZXh0YXJlYSgpOwoJCQlpZihqc2NzcygnY2hlY2snLHR4dGFyZWEsJ2V4dHJhLWxh
cmdlJywnJykpCgkJCXsKCQkJCWpzY3NzKCdyZW1vdmUnLHR4dGFyZWEsJ2V4dHJh
LWxhcmdlJywnJyk7CgkJCQlqc2NzcygncmVtb3ZlJyx0eHRhcmVhLCdsYXJnZScs
JycpOwoJCQl9CgkJCWVsc2UgaWYoIGpzY3NzKCdjaGVjaycsdHh0YXJlYSwnbGFy
Z2UnKSApCgkJCXsKCQkJCWpzY3NzKCdhZGQnLHR4dGFyZWEsJ2V4dHJhLWxhcmdl
JywnJyk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlqc2NzcygnYWRkJyx0eHRhcmVh
LCdsYXJnZScsJycpOwoJCQl9CgkJCWJyZWFrOwoJCWNhc2UgJ3JtbHRvb2xiYXJf
aHInOgoJCQlzZXRTZWxlY3Rpb24oJ1tocl0nKTsKCQkJYnJlYWs7Cgl9Cn07Cgpm
dW5jdGlvbiB0b2dnbGVTbWlsZXlzKCkKewoJanNjc3MoJ3RvZ2dsZScsIG5ldyBE
T01RdWVyeSgnZGl2I3NtaWxleXMnKS5nZXQoMCksICdzaG93Jyk7Cn07CmZ1bmN0
aW9uIGhpZGVTbWlsZXlzKCkKewoJanNjc3MoJ3JlbW92ZScsIG5ldyBET01RdWVy
eSgnZGl2I3NtaWxleXMnKS5nZXQoMCksICdzaG93Jyk7Cn07CgpmdW5jdGlvbiBn
ZXRfcm1sdGV4dGFyZWEoKQp7CglpZih0eXBlb2YgY3VycmVudFRleHRhcmVhID09
ICd1bmRlZmluZWQnKQoJCWN1cnJlbnRUZXh0YXJlYSA9IG5ldyBET01RdWVyeSgn
dGV4dGFyZWEjcm1sX3RleHRhcmVhJykuZ2V0KDApOwoJcmV0dXJuIGN1cnJlbnRU
ZXh0YXJlYTsKfTsKCmZ1bmN0aW9uIGdldENvbnRlbnRGcm9tT3JpZ2luYWwoKQp7
CglnZXRfcm1sdGV4dGFyZWEoKS52YWx1ZT13aW5kb3cub3BlbmVyLmdldF9ybWx0
ZXh0YXJlYSgpLnZhbHVlOwp9OwoKZnVuY3Rpb24gc2V0Q29udGVudFRvT3JpZ2lu
YWwoKQp7Cgl3aW5kb3cub3BlbmVyLmdldF9ybWx0ZXh0YXJlYSgpLnZhbHVlPWdl
dF9ybWx0ZXh0YXJlYSgpLnZhbHVlO3dpbmRvdy5jbG9zZSgpOwp9OwoKZnVuY3Rp
b24gcmVzY2FsZVRleHRhcmVhKHR4dGFyZWEpCnsKCWlmICh0eXBlb2YgZG9jdW1l
bnQuYWxsICE9ICd1bmRlZmluZWQnKQoJewoJCXR4dGFyZWEuc3R5bGUuaGVpZ2h0
PShkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodC04MCkrJ3B4JzsKCQl0eHRhcmVh
LnN0eWxlLndpZHRoPShkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoLTE1KSsncHgn
OwoJfQoJZWxzZQoJewoJCXR4dGFyZWEuc3R5bGUuaGVpZ2h0PSh3aW5kb3cuaW5u
ZXJIZWlnaHQtODApKydweCc7CgkJdHh0YXJlYS5zdHlsZS53aWR0aD0od2luZG93
LmlubmVyV2lkdGgtMTUpKydweCc7Cgl9Cn07CgpmdW5jdGlvbiB3cmFwU2VsZWN0
aW9uKGxmdCwgcmd0KQp7Cgl2YXIgdHh0YXJlYSA9IGdldF9ybWx0ZXh0YXJlYSgp
OwoKCWlmICh0eXBlb2YgdHh0YXJlYS5zZWxlY3Rpb25TdGFydCA9PSAndW5kZWZp
bmVkJykKCXsKCQlJRVdyYXAodHh0YXJlYSwgbGZ0LCByZ3QpOwoJfQoJZWxzZSBp
ZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQpCgl7CgkJbW96V3JhcCh0eHRhcmVh
LCBsZnQsIHJndCk7Cgl9Cn07CgpmdW5jdGlvbiBtb3pXcmFwKHR4dGFyZWEsIGxm
dCwgcmd0KQp7Cgl2YXIgc2VsTGVuZ3RoID0gdHh0YXJlYS50ZXh0TGVuZ3RoOwoJ
dmFyIHNlbFN0YXJ0ID0gdHh0YXJlYS5zZWxlY3Rpb25TdGFydDsKCXZhciBzZWxF
bmQgPSB0eHRhcmVhLnNlbGVjdGlvbkVuZDsKCWlmIChzZWxFbmQ9PTEgfHwgc2Vs
RW5kPT0yKQoJewoJCXNlbEVuZCA9IHNlbExlbmd0aDsKCX0KCXZhciBzMSA9IHR4
dGFyZWEudmFsdWUuc3Vic3RyaW5nKDAsc2VsU3RhcnQpOwoJdmFyIHMyID0gdHh0
YXJlYS52YWx1ZS5zdWJzdHJpbmcoc2VsU3RhcnQsIHNlbEVuZCk7Cgl2YXIgczMg
PSB0eHRhcmVhLnZhbHVlLnN1YnN0cmluZyhzZWxFbmQsIHNlbExlbmd0aCk7Cgl0
eHRhcmVhLnZhbHVlID0gczEgKyBsZnQgKyBzMiArIHJndCArIHMzOwp9OwoKZnVu
Y3Rpb24gSUVXcmFwKHR4dGFyZWEsIGxmdCwgcmd0KQp7CglzdHJTZWxlY3Rpb24g
PSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKS50ZXh0OwoJaWYgKHN0
clNlbGVjdGlvbiAhPSAiIikKCXsKCQlkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRl
UmFuZ2UoKS50ZXh0ID0gbGZ0ICsgc3RyU2VsZWN0aW9uICsgcmd0OwoJfQoJZWxz
ZQoJewoJCXR4dGFyZWEudmFsdWUgKz0gbGZ0ICsgcmd0OwoJfQp9OwoKZnVuY3Rp
b24gZ2V0Q3VycmVudFNlbGVjdGlvbigpCnsKCWlmICh0eXBlb2YgZG9jdW1lbnQu
c2VsZWN0aW9uICE9ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LnNlbGVjdGlvbi5j
cmVhdGVSYW5nZSkKCXsKCQlyZXR1cm4gSUVHZXQoKTsKCX0KCWVsc2UgaWYgKGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKQoJewoJCXZhciB0eHRhcmVhID0gZ2V0X3Jt
bHRleHRhcmVhKCk7CgkJcmV0dXJuIG1vekdldCh0eHRhcmVhKTsKCX0KCXJldHVy
biAnJzsKfTsKCmZ1bmN0aW9uIG1vekdldCh0eHRhcmVhKQp7Cgl2YXIgc2VsTGVu
Z3RoID0gdHh0YXJlYS50ZXh0TGVuZ3RoOwoJdmFyIHNlbFN0YXJ0ID0gdHh0YXJl
YS5zZWxlY3Rpb25TdGFydDsKCXZhciBzZWxFbmQgPSB0eHRhcmVhLnNlbGVjdGlv
bkVuZDsKCWlmIChzZWxFbmQ9PTEgfHwgc2VsRW5kPT0yKQoJCXNlbEVuZD1zZWxM
ZW5ndGg7CglyZXR1cm4gKHR4dGFyZWEudmFsdWUpLnN1YnN0cmluZyhzZWxTdGFy
dCwgc2VsRW5kKTsKfTsKCmZ1bmN0aW9uIElFR2V0KCkKewoJcmV0dXJuIGRvY3Vt
ZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpLnRleHQ7Cn07CgpmdW5jdGlvbiBz
ZXRTZWxlY3Rpb24oc3RyKQp7Cgl2YXIgdHh0YXJlYSA9IGdldF9ybWx0ZXh0YXJl
YSgpOwoJaWYgKHR5cGVvZiBkb2N1bWVudC5hbGwgIT0gJ3VuZGVmaW5lZCcpCgl7
CgkJSUVTZXQodHh0YXJlYSwgc3RyKTsKCX0KCWVsc2UgaWYgKGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKQoJewoJCW1velNldCh0eHRhcmVhLCBzdHIpOwoJfQp9OwoK
ZnVuY3Rpb24gbW96U2V0KHR4dGFyZWEsIHN0cikKewoJdmFyIHNlbExlbmd0aCA9
IHR4dGFyZWEudGV4dExlbmd0aDsKCXZhciBzZWxTdGFydCA9IHR4dGFyZWEuc2Vs
ZWN0aW9uU3RhcnQ7Cgl2YXIgc2VsRW5kID0gdHh0YXJlYS5zZWxlY3Rpb25FbmQ7
CglpZiAoc2VsRW5kPT0xIHx8IHNlbEVuZD09MikKCQlzZWxFbmQ9c2VsTGVuZ3Ro
OwoJdmFyIHMxID0gdHh0YXJlYS52YWx1ZS5zdWJzdHJpbmcoMCxzZWxTdGFydCk7
Cgl2YXIgczIgPSB0eHRhcmVhLnZhbHVlLnN1YnN0cmluZyhzZWxTdGFydCwgc2Vs
RW5kKTsKCXZhciBzMyA9IHR4dGFyZWEudmFsdWUuc3Vic3RyaW5nKHNlbEVuZCwg
c2VsTGVuZ3RoKTsKCXR4dGFyZWEudmFsdWUgPSBzMSArIHN0ciArIHMzOwp9OwoK
ZnVuY3Rpb24gSUVTZXQodHh0YXJlYSwgc3RyKQp7CglzdHJTZWxlY3Rpb24gPSBk
b2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKS50ZXh0OwoKCWlmIChzdHJT
ZWxlY3Rpb24hPSIiKQoJewoJCWRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5n
ZSgpLnRleHQgPSBzdHI7Cgl9CgllbHNlCgl7CgkJdHh0YXJlYS52YWx1ZSArPSBz
dHI7Cgl9Cn07CgpmdW5jdGlvbiBzdG9yZUN1cnNvcigpCnsKCXRoaXMuY3Vyc29y
UG9zID0gZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCkuZHVwbGljYXRl
KCk7Cn07CgpmdW5jdGlvbiBwdXRTdHIoIHRleHQgKQp7Cgl2YXIgdGFyZ2V0ID0g
Z2V0X3JtbHRleHRhcmVhKCk7CgoJaWYgKCB0YXJnZXQgKQoJewoJCWlmICh0eXBl
b2YgZG9jdW1lbnQuYWxsICE9ICd1bmRlZmluZWQnICYmIHRhcmdldC5jdXJzb3JQ
b3MpCgkJewoJCQl2YXIgY3Vyc29yUG9zID0gdGFyZ2V0LmN1cnNvclBvczsKCQkJ
Y3Vyc29yUG9zLnRleHQgPSBjdXJzb3JQb3MudGV4dC5jaGFyQXQoY3Vyc29yUG9z
LnRleHQubGVuZ3RoIC0gMSkgPT0gJyAnID8gdGV4dCArICcgJyA6IHRleHQ7CgkJ
fQoJCWVsc2UKCQl7CgkJCXRyeQoJCQl7CgkJCQl3cmFwU2VsZWN0aW9uKCcnLCB0
ZXh0KTsKCQkJfQoJCQljYXRjaChlKQoJCQl7CgkJCQl0YXJnZXQudmFsdWUgKz0g
dGV4dDsKCQkJfQoJCX0KCgkJdGFyZ2V0LmZvY3VzKCk7Cgl9Cn07CmZ1bmN0aW9u
IGdldERvY3VtZW50U2VsZWN0b3IoZG9jdW1lbnRpZCkKewoJdmFyIGRhdGEgPSBy
YXdfZG9jdW1lbnRzW2RvY3VtZW50aWRdOwoJdmFyIGZvcm1hdF9saXN0ID0gWyBj
cmVhdGVET01Ob2RlKCdvcHRpb24nLCB7InZhbHVlIiA6ICcnfSwgW2dldFRleHQo
J2RvY2xpYicsICdvcmlnaW5hbCcpXSkgXTsKCglpZih0eXBlb2YgZm9ybWF0cyAh
PSAidW5kZWZpbmVkIikKCXsKCQlmb3IodmFyIGk9MDsgaSA8IGZvcm1hdHMubGVu
Z3RoO2krKykKCQl7CgkJCWZvcm1hdF9saXN0W2krMV0gPSBjcmVhdGVET01Ob2Rl
KCdvcHRpb24nLCB7InZhbHVlIiA6IGZvcm1hdHNbaV1bMF19LCBbZm9ybWF0c1tp
XVswXSsgJyAoJyArIGZvcm1hdHNbaV1bMV1bMF0gKyAneCcgKyBmb3JtYXRzW2ld
WzFdWzFdICsgJyknXSk7CgkJfQoJfQoKCXZhciBpbnNlcnRfYXMgPSBbCgkJY3Jl
YXRlRE9NTm9kZSgnZHQnLCB7fSwgW2dldFRleHQoJ2RvY2xpYicsICdpbnNlcnRf
YXMnKV0pLAoJCWNyZWF0ZURPTU5vZGUoJ2RkJywge30sIFsKCQkJY3JlYXRlRE9N
Tm9kZSgnaW5wdXQnLCB7InZhbHVlIiA6ICdpbWFnZScsICJuYW1lIiA6ICdhcycs
ICJ0eXBlIiA6ICdyYWRpbycsICJpZCIgOiAnYXNfaW1hZ2VfJytkb2N1bWVudGlk
KydfaW1hZ2UnLCAnY2hlY2tlZCcgOiAnY2hlY2tlZCcsICdjbGFzcycgOiAncmFk
aW8nfSwgW10pLAoJCQljcmVhdGVET01Ob2RlKCdsYWJlbCcsIHsnZm9yJyA6ICdh
c19pbWFnZV8nK2RvY3VtZW50aWQrJ19pbWFnZSd9LCBbZ2V0VGV4dCgnZG9jbGli
JywgJ2luc2VydF9hc19pbWFnZScpXSksCgkJCWNyZWF0ZURPTU5vZGUoJ2lucHV0
JywgeyJ2YWx1ZSIgOiAndGV4dCcsICJuYW1lIiA6ICdhcycsICJ0eXBlIiA6ICdy
YWRpbycsICJpZCIgOiAnYXNfdGV4dF8nK2RvY3VtZW50aWQrJ19pbWFnZScsICdj
bGFzcycgOiAncmFkaW8nfSwgW10pLAoJCQljcmVhdGVET01Ob2RlKCdsYWJlbCcs
IHsnZm9yJyA6ICdhc190ZXh0XycrZG9jdW1lbnRpZCsnX3RleHQnfSwgW2dldFRl
eHQoJ2RvY2xpYicsICdpbnNlcnRfYXNfdGV4dCcpXSkKCQldICkKCV07CgoJdmFy
IGluc2VydF9hc19saW5rID0gWwoJCWNyZWF0ZURPTU5vZGUoJ2R0Jywge30sIFtn
ZXRUZXh0KCdkb2NsaWInLCAnaW5zZXJ0X2FzX2xpbmsnKV0pLAoJCWNyZWF0ZURP
TU5vZGUoJ2RkJywge30sCgkJCVsKCQkJCWNyZWF0ZURPTU5vZGUoJ2lucHV0Jywg
eyJ2YWx1ZSIgOiAnbGluaycsICJuYW1lIiA6ICdsaW5rJywgInR5cGUiIDogJ2No
ZWNrYm94JywgImlkIiA6ICdsaW5rXycrZG9jdW1lbnRpZCwgJ2NsYXNzJyA6ICdj
aGVja2JveCd9LCBbXSksCgkJCQljcmVhdGVET01Ob2RlKCdsYWJlbCcsIHsnZm9y
JyA6ICdsaW5rXycrZG9jdW1lbnRpZH0sIFtnZXRUZXh0KCdkb2NsaWInLCAnaW5z
ZXJ0X2FzX3RodW1iJyldKQoJCQldCgkJKQoJXTsKCgl2YXIgZm9ybWF0ID0gWwoJ
CWNyZWF0ZURPTU5vZGUoJ2R0Jywge30sIFtnZXRUZXh0KCdkb2NsaWInLCAnZm9y
bWF0JyldKSwKCQljcmVhdGVET01Ob2RlKCdkZCcsIHt9LAoJCQlbCgkJCQljcmVh
dGVET01Ob2RlKCdzZWxlY3QnLCB7Im5hbWUiIDogJ2Zvcm1hdCcsICJpZCIgOiAn
Zm9ybWF0XycrZG9jdW1lbnRpZH0sIGZvcm1hdF9saXN0KQoJCQldKQoJXTsKCgl2
YXIgYWxpZ24gPSBbCgkJY3JlYXRlRE9NTm9kZSgnZHQnLCB7fSwgW2dldFRleHQo
J2RvY2xpYicsICdvdXRsaW5lJyldKSwKCQljcmVhdGVET01Ob2RlKCdkZCcsIHt9
LAoJCVsKCQkJY3JlYXRlRE9NTm9kZSgnc2VsZWN0JywgeyJuYW1lIiA6ICdmbG9h
dCcsICJpZCIgOiAnZmxvYXRfJytkb2N1bWVudGlkfSwKCQkJWwoJCQkJY3JlYXRl
RE9NTm9kZSgnb3B0aW9uJywgeyJ2YWx1ZSIgOiAnJ30sIFtnZXRUZXh0KCdkb2Ns
aWInLCAnbm9uZScpXSksCgkJCQljcmVhdGVET01Ob2RlKCdvcHRpb24nLCB7InZh
bHVlIiA6ICdsZWZ0J30sIFtnZXRUZXh0KCdkb2NsaWInLCAnbGVmdCcpXSksCgkJ
CQljcmVhdGVET01Ob2RlKCdvcHRpb24nLCB7InZhbHVlIiA6ICdyaWdodCd9LCBb
Z2V0VGV4dCgnZG9jbGliJywgJ3JpZ2h0JyldKQoJCQldKSwKCQldKQoJXTsKCgl2
YXIgaW5zZXJ0ID0gWwoJCWNyZWF0ZURPTU5vZGUoJ2R0Jywge30sIFtnZXRUZXh0
KCdkb2NsaWInLCAnaW5zZXJ0JyldKSwKCQljcmVhdGVET01Ob2RlKCdkZCcsIHt9
LAoJCVsKCQkJY3JlYXRlRE9NTm9kZSgnaW5wdXQnLCB7InZhbHVlIiA6IGdldFRl
eHQoJ2RvY2xpYicsICdpbnNlcnRfaW1hZ2UnKSwgInR5cGUiIDogJ3N1Ym1pdCd9
LCBbXSksCgkJXSkKCV07CgoJdmFyIHByZXZpZXdfaW1nID0gY3JlYXRlRE9NTm9k
ZSgnaW1nJywgeyJpZCIgOiAnaW1hZ2VfcHJldmlldycsICJzcmMiIDogZGF0YVsw
XSArICdzcXVhcmUnfSwgW10pOwoKCWlmIChkYXRhWzVdID09ICcxJykKCXsKCQkv
KiBJZiB0aGUgZG9jdW1lbnQgaXMgcmVtb3RlIGFuZCBkb2Vzbid0IGhhdmUgYW4g
YWx0ZXJuYXRpdmUgaWNvbi4gRG9uJ3Qgc2hvdyB0aGUgaW1hZ2UKCSAJICogcmVs
YXRlZCBmb3JtIGVsZW1lbnRzICovCgkJaWYgKGRhdGFbNl0gIT0gJzEnKQoJCXsK
CQkJZm9ybWF0ID0gW107CgkJCWFsaWduID0gW107CgkJCXByZXZpZXdfaW1nID0g
ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpOwoJCX0KCQllbHNlCgkJewoJCQlp
bnNlcnRfYXNfbGlua1sxXS5jaGlsZE5vZGVzWzBdLmRpc2FibGVkID0gdHJ1ZTsK
CQkJaW5zZXJ0X2FzX2xpbmtbMV0uY2hpbGROb2Rlc1swXS5jaGVja2VkID0gdHJ1
ZTsKCQkJaW5zZXJ0X2FzX2xpbmtbMV0uY2hpbGROb2Rlc1swXS5kZWZhdWx0Q2hl
Y2tlZCA9IHRydWU7CgkJfQoJfQoKCXZhciBmb3JtX2NvbWJpbmVkID0gaW5zZXJ0
X2FzLmNvbmNhdChpbnNlcnRfYXNfbGluaywgZm9ybWF0LCBhbGlnbiwgaW5zZXJ0
KTsKCglmb3JtX2NvbWJpbmVkID0gZm9ybV9jb21iaW5lZC5jb25jYXQoaW5zZXJ0
X2FzX2xpbmspOwoJZm9ybV9jb21iaW5lZCA9IGZvcm1fY29tYmluZWQuY29uY2F0
KGZvcm1hdCk7Cglmb3JtX2NvbWJpbmVkID0gZm9ybV9jb21iaW5lZC5jb25jYXQo
YWxpZ24pOwoJZm9ybV9jb21iaW5lZCA9IGZvcm1fY29tYmluZWQuY29uY2F0KGlu
c2VydCk7CgoJdmFyIGZvcm0gPQoJCWNyZWF0ZURPTU5vZGUoJ2RpdicsIHsiaWQi
IDogImRvY3VtZW50LXNlbGVjdG9yIn0sCgkJWwoJCQljcmVhdGVET01Ob2RlKCdo
MycsIHsiaWQiIDogJ2luc2VydF9pbWFnZSd9LCBbZ2V0VGV4dCgnZG9jbGliJywg
J2luc2VydF9pbWFnZScpXSksCgkJCXByZXZpZXdfaW1nLAoJCQljcmVhdGVET01O
b2RlKCdmb3JtJywgeyJtZXRob2QiIDogJ1BPU1QnLCAiYWN0aW9uIiA6IGJvYXJk
X3NjcmlwdF91cmwsICJldmVudCIgOiBbJ3N1Ym1pdCcsIGNvcHkycm1sXX0sCgkJ
CVsKCQkJCWNyZWF0ZURPTU5vZGUoJ2ZpZWxkc2V0Jywge30sCgkJCQlbCgkJCQkJ
Y3JlYXRlRE9NTm9kZSgnaW5wdXQnLCB7InZhbHVlIiA6IGRvY3VtZW50aWQsICJu
YW1lIiA6ICdkb2N1bWVudGlkJywgInR5cGUiIDogJ2hpZGRlbid9LCBbXSksCgkJ
CQkJY3JlYXRlRE9NTm9kZSgnaW5wdXQnLCB7InZhbHVlIiA6IGRhdGFbMF0sICJu
YW1lIiA6ICd1cmwnLCAidHlwZSIgOiAnaGlkZGVuJ30sIFtdKSwKCQkJCQljcmVh
dGVET01Ob2RlKCdpbnB1dCcsIHsidmFsdWUiIDogZGF0YVsxXSwgIm5hbWUiIDog
J2tleScsICJ0eXBlIiA6ICdoaWRkZW4nfSwgW10pLAoJCQkJCWNyZWF0ZURPTU5v
ZGUoJ2lucHV0JywgeyJ2YWx1ZSIgOiBkYXRhWzJdLCAibmFtZSIgOiAnbGlicmFy
eWlkJywgInR5cGUiIDogJ2hpZGRlbid9LCBbXSksCgkJCQkJY3JlYXRlRE9NTm9k
ZSgnaW5wdXQnLCB7InZhbHVlIiA6ICcnLCAibmFtZSIgOiAnYWx0JywgInR5cGUi
IDogJ2hpZGRlbid9LCBbXSksCgkJCQkJY3JlYXRlRE9NTm9kZSgnaW5wdXQnLCB7
InZhbHVlIiA6IGRhdGFbNF0sICJuYW1lIiA6ICdmaWxlbmFtZScsICJ0eXBlIiA6
ICdoaWRkZW4nfSwgW10pLAoKCQkJCQljcmVhdGVET01Ob2RlKCdkbCcsIHt9LCBm
b3JtX2NvbWJpbmVkKQoJCQkJXSkKCQkJXSkKCQldKTsKCglyZXR1cm4gZm9ybTsK
fTsKCmZ1bmN0aW9uIGRvY2xpYkludGVyYWN0aW9uKCkKewoJc3dpdGNoKGJvYXJk
X2FjdGlvbikKCXsKCQljYXNlICdlZGl0X2RvY3VtZW50JzoKCQkJYWRkRXZlbnRU
b1RhcmdldHMobnVsbCwgJ2NsaWNrJywgbW9kaWZ5VGh1bWJuYWlsLCAnaW1nW2xv
bmdkZXNjXScpOwoJCWJyZWFrOwoKCQljYXNlICdsaXN0X2RvY3VtZW50cyc6CgkJ
CWlmIChqc2NzcygnY2hlY2snLCBkb2N1bWVudC5ib2R5LCAnc21hbGwnKSkKCQkJ
ewoJCQkJdmFyIGxpbmtzID0gbmV3IERPTVF1ZXJ5KCdhW2hyZWYqPSJsaXN0X2Rv
Y3VtZW50cyJdLCBhW2hyZWYqPSJlZGl0X2RvY3VtZW50Il0sIGFbaHJlZio9Imlu
c2VydF9kb2N1bWVudCJdJyk7CgoJCQkJZm9yKHZhciBpID0gMCwgbGluazsgKGxp
bmsgPSBsaW5rcy5nZXQoaSkpO2krKykKCQkJCXsKCQkJCQlpZihpc0lFKQoJCQkJ
CXsKCQkJCQkJLyoKCQkJCQkJCUlFIGNoZWNrcyBpZiB0aGUgbGluaydzIGZpcnN0
Q2hpbGQubm9kZVZhbHVlIGVxdWFscyBhICJ2YWxpZCIgdXJsLAoJCQkJCQkJaWYg
c28gaXQgd2lsbCBzd2FwIGl0J3MgdmFsdWUgd2l0aCB0aGUgbmV3bHkgc2V0IGhy
ZWYuCgoJCQkJCQkJSUUgY29uc2lkZXJzIGh0dHA6Ly8sIGh0dHBzOi8vLCBmdHA6
Ly8gYW5kIF53d3cuIGFzICJ2YWxpZCIKCgkJCQkJCQlJRSBzaG91bGQgcmVhbGx5
IGRpZS4KCQkJCQkJKi8KCQkJCQkJaWYoIGxpbmsuZmlyc3RDaGlsZC5ub2RlVmFs
dWUubWF0Y2goL14oKChmdHB8aHR0cHM/KTpcL1wvKXwod3d3XC4pKS8pICkKCQkJ
CQkJewoJCQkJCQkJbGluay5hcHBlbmRDaGlsZChjcmVhdGVET01Ob2RlKCdzcGFu
JywgeydjbGFzcycgOiAnZHVtbXknfSwgW10pKTsKCQkJCQkJfQoKCQkJCQkJLyoK
CQkJCQkJCUlFIGFwcGVuZHMgc2VhcmNoIHBhcnQgYWZ0ZXIgaGFzaCwgc28gd2Ug
c3RyaXAgdGhlIGhhc2gsCgkJCQkJCQlhcHBlbmQgc2VhcmNoIHBhcnQsIGFuZCBh
cHBlbmQgaGFzaCBhZ2FpbgoKCQkJCQkJCUlFIHNob3VsZCByZWFsbHkgZGllLiBT
ZWUgY29tbWVudCBhYm92ZS4KCQkJCQkJKi8KCQkJCQkJcGFydHMgPSBsaW5rLmhy
ZWYuc3BsaXQoJyMnKTsKCgkJCQkJCWxpbmsuaHJlZiA9IHBhcnRzWzBdOwoJCQkJ
CQlsaW5rLnNlYXJjaCArPSAobGluay5zZWFyY2gubGVuZ3RoID8gJyYnIDogJz8n
KSArJ2RhdGFbc21hbGxdPTEnOwoKCQkJCQkJaWYocGFydHNbMV0pCgkJCQkJCQls
aW5rLmhhc2ggPSBwYXJ0c1sxXTsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJ
CQkJbGluay5zZWFyY2ggKz0gKGxpbmsuc2VhcmNoLmxlbmd0aCA/ICcmJyA6ICc/
JykgKydkYXRhW3NtYWxsXT0xJzsKCQkJCQl9CgkJCQl9CgoJCQkJYWRkRXZlbnRU
b1RhcmdldHMobnVsbCwgJ2NsaWNrJywgZG9jbGliSW1hZ2VDbGljaywgJ2JvZHku
bGlzdF9kb2N1bWVudHMgZGl2LmRvY3VtZW50Jyk7CgkJCX0KCQkJZWxzZQoJCQl7
CgkJCQlhZGRFdmVudFRvVGFyZ2V0cyhudWxsLCAnY2xpY2snLCBzZWxlY3RBbGxE
b2N1bWVudHMsICdpbnB1dCNzZWxlY3RfYWxsX2RvY3VtZW50cycpOwoJCQkJYWRk
RXZlbnRUb1RhcmdldHMobnVsbCwgJ2NsaWNrJywgc2VsZWN0RG9jdW1lbnQsICdi
b2R5Lmxpc3RfZG9jdW1lbnRzIGRpdi5kb2N1bWVudCBpbWcsIGJvZHkubGlzdF9k
b2N1bWVudHMgZGl2LmRvY3VtZW50IGxpLnNlbGVjdCBpbnB1dCcpOwoJCQl9CgkJ
YnJlYWs7Cgl9CgoJLyogeWVzLCBpdCdzIGRvdWJ0ZnVsbCB3ZXRoZXIgdGhpcyBp
cyB0aGUgYmVzdCBwbGFjZS4uLiAqLwoJdmFyIGl0ZW1zID0gbmV3IERPTVF1ZXJ5
KCdvbC5tZXNzYWdlcyBhLmRvY2xpYicpOwoJZm9yKHZhciBpID0gMCwgaXRlbTsg
KGl0ZW0gPSBpdGVtcy5nZXQoaSkpOyBpKyspCgl7CgkJYWRkRXZlbnQoaXRlbSwg
J2NsaWNrJywgZnVuY3Rpb24oZSkgeyB3aW5kb3cub3Blbih0aGlzLmhyZWYsICdw
b3B1cGRvY2xpYicpOyBlLnByZXZlbnREZWZhdWx0KCk7IH0gKTsKCX0KfTsKCgov
KgoJdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGluIDMgd2F5czoKCS0gYnkg
dGhlIGNoZWNrYm94IGl0c2VsZgoJLSBieSBhIGNsaWNrIG9uIHRoZSBpbWFnZQoJ
LSBieSBzZWxlY3RBbGxEb2N1bWVudHMoKQoqLwpmdW5jdGlvbiBzZWxlY3REb2N1
bWVudChvYmopCnsKCXZhciBjYWxsaW5nRWxlbWVudCA9IHRoaXMudGFnTmFtZSA/
ICB0aGlzIDogb2JqLCBjaGVja2JveDsKCXZhciBjb250YWluZXIgPSBnZXRTaWJs
aW5nTm9kZShjYWxsaW5nRWxlbWVudCwgJ3VwJywgJ2RpdicpOwoKCS8qIGlmIGl0
J3Mgbm90IHRoZSBjaGVja2JveCBpdHNlbGYgd2hvJ3MgY2FsbGluZyB1cywgdG9n
Z2xlIGl0ICovCglpZiAoIGNhbGxpbmdFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNh
c2UoKSAhPSAnaW5wdXQnICkKCXsKCQljaGVja2JveCA9IG5ldyBET01RdWVyeSgn
aW5wdXRbdHlwZT1jaGVja2JveF0nLCBjb250YWluZXIpLmdldCgwKTsKCQljaGVj
a2JveC5jaGVja2VkID0gIWNoZWNrYm94LmNoZWNrZWQ7Cgl9CgllbHNlCgl7CgkJ
Y2hlY2tib3ggPSBjYWxsaW5nRWxlbWVudDsKCX0KCglpZiAoIGNoZWNrYm94LmNo
ZWNrZWQgKQoJewoJCWpzY3NzKCdhZGQnLCBjb250YWluZXIsICdzZWxlY3RlZCcs
ICcnKTsKCgkJaWYoIChuZXcgRE9NUXVlcnkoJ2Rpdi5kb2N1bWVudCBpbnB1dCcp
KS5sZW5ndGggPT0gKG5ldyBET01RdWVyeSgnZGl2LmRvY3VtZW50LnNlbGVjdGVk
IGlucHV0JykpLmxlbmd0aCkKCQkJKG5ldyBET01RdWVyeSgnaW5wdXQjc2VsZWN0
X2FsbF9kb2N1bWVudHMnKS5nZXQoMCkpLmNoZWNrZWQgPSB0cnVlOwoJfQoJZWxz
ZQoJewoJCWpzY3NzKCdyZW1vdmUnLCBjb250YWluZXIsICdzZWxlY3RlZCcsICcn
KTsKCgkJKG5ldyBET01RdWVyeSgnaW5wdXQjc2VsZWN0X2FsbF9kb2N1bWVudHMn
KS5nZXQoMCkpLmNoZWNrZWQgPSBmYWxzZTsKCX0KfTsKCmZ1bmN0aW9uIHNlbGVj
dEFsbERvY3VtZW50cygpCnsKCS8qIHVuY2hlY2sgc2VsZWN0ZWQgaW1hZ2VzICov
CglpZihib2FyZF9hY3Rpb24gPT0gJ2xpc3RfZG9jdW1lbnRzJykKCXsKCQl2YXIg
aW1nID0gbmV3IERPTVF1ZXJ5KCdkaXYuZG9jdW1lbnQuc2VsZWN0ZWQgaW1nJyk7
CgkJZm9yKHZhciBpID0gMDsgaSA8IGltZy5sZW5ndGg7aSsrKQoJCXsKCQkJc2Vs
ZWN0RG9jdW1lbnQoaW1nLmdldChpKSk7CgkJfQoJfQoKCWlmKCF0aGlzLmNoZWNr
ZWQpCgkJcmV0dXJuOwoKCWlmKGJvYXJkX2FjdGlvbiA9PSAnbGlzdF9kb2N1bWVu
dHMnKQoJewoJCWltZyA9IG5ldyBET01RdWVyeSgnZGl2LmRvY3VtZW50IGltZycp
OwoKCQlmb3IoaT0wOyBpIDwgaW1nLmxlbmd0aDtpKyspCgkJewoJCQlzZWxlY3RE
b2N1bWVudChpbWcuZ2V0KGkpKTsKCQl9Cgl9Cn07CgpmdW5jdGlvbiBkZXNlbGVj
dEFsbERvY3VtZW50cygpCnsKCXZhciBzZWxlY3RlZERvY3VtZW50cyA9IG5ldyBE
T01RdWVyeSgnZGl2LmRvY3VtZW50LnNlbGVjdGVkJyk7Cglmb3IodmFyIGkgPSAw
LCBzZWxlY3RlZERvY3VtZW50OyAoc2VsZWN0ZWREb2N1bWVudD1zZWxlY3RlZERv
Y3VtZW50cy5nZXQoaSkpOyBpKyspCgl7CgkJanNjc3MoJ3JlbW92ZScsIHNlbGVj
dGVkRG9jdW1lbnQsICdzZWxlY3RlZCcsICcnKTsKCX0KfQoKZnVuY3Rpb24gZG9j
bGliSW1hZ2VDbGljayhlKQp7Cgl2YXIgeCA9IHRoaXM7CglpZih4LnRhZ05hbWUu
dG9Mb3dlckNhc2UoKSAhPSAnaW1nJykKCQl4ID0gbmV3IERPTVF1ZXJ5KCdpbWcn
LCB0aGlzICkuZ2V0KDApOwoKCWlmICh0eXBlb2YgeCA9PSAndW5kZWZpbmVkJykK
CQlyZXR1cm47CgoJdmFyIGNvbnRhaW5lciA9IGdldFNpYmxpbmdOb2RlKHgsICd1
cCcsICdkaXYnKTsKCXZhciBkb2N1bWVudGlkID0gY29udGFpbmVyLmlkLnJlcGxh
Y2UoL15kb2N1bWVudF8vLCAnJyk7CgoJLyogc3RvcmUgZm9yIGxhdGVyIHVzZSAq
LwoJdmFyIGN1cnJlbnRseVNlbGVjdGVkID0ganNjc3MoJ2NoZWNrJywgY29udGFp
bmVyLCAnc2VsZWN0ZWQnKTsKCWRlc2VsZWN0QWxsRG9jdW1lbnRzKCk7CgoJLyog
ZGVzdHJveSBleGlzdGluZyAqLwoJdmFyIGN1cnJlbnRGb3JtID0gbmV3IERPTVF1
ZXJ5KCJkaXYuZGlzY3Vzc2lvbi1jb250ZW50IGRpdiNkb2N1bWVudC1zZWxlY3Rv
ciIpLmdldCgwKTsKCWlmKGN1cnJlbnRGb3JtKQoJCWN1cnJlbnRGb3JtLnBhcmVu
dE5vZGUucmVtb3ZlQ2hpbGQoY3VycmVudEZvcm0pOwoKCS8qIHNob3cganVzdCBv
bmUgZm9ybSBhdCBhIHRpbWUgKi8KCXZhciBzZWFyY2hGb3JtID0gbmV3IERPTVF1
ZXJ5KCdkaXYjc2VhcmNoLWRvY3VtZW50cycpLmdldCgwKTsKCWlmKGN1cnJlbnRs
eVNlbGVjdGVkKQoJewoJCWpzY3NzKCdyZW1vdmUnLCBzZWFyY2hGb3JtLCAnZGlz
cGxheS1ub25lJyk7CgkJZGVzZWxlY3RBbGxEb2N1bWVudHMoKTsKCQkvKiB3ZSdy
ZSBkZS1zZWxlY3RpbmcsIHNvIG5vIGluZm8gdG8gcGFyZW50IHdpbmRvdyAqLwoJ
CXJldHVybjsKCX0KCWVsc2UKCXsKCQlqc2NzcygnYWRkJywgY29udGFpbmVyLCAn
c2VsZWN0ZWQnLCAnJyk7CgoJCWlmKHNlYXJjaEZvcm0pCgkJCWpzY3NzKCdhZGQn
LCBzZWFyY2hGb3JtLCAnZGlzcGxheS1ub25lJyk7Cgl9CgoJdmFyIGZvcm0gPSBn
ZXREb2N1bWVudFNlbGVjdG9yKCBkb2N1bWVudGlkICk7CglpZighZm9ybSkKCQly
ZXR1cm47CgoJdmFyIHAgPSBuZXcgRE9NUXVlcnkoImRpdi5kaXNjdXNzaW9uLWNv
bnRlbnQiKS5nZXQoMCk7CglpZighcCkKCQlyZXR1cm47CgoJcC5pbnNlcnRCZWZv
cmUoZm9ybSwgcC5jaGlsZE5vZGVzWzBdKTsKCgkvLyBkbyB3ZSBoYXZlIHRvIG5v
dGlmeSB0aGUgZG9jdW1lbnQgc2VsZWN0b3Igb3BlbmVyPwoJaWYod2luZG93Lm9w
ZW5lciAhPSBudWxsICYmIHR5cGVvZiB3aW5kb3cub3BlbmVyLnNlbGVjdGVkRG9j
dW1lbnQgIT0gJ3VuZGVmaW5lZCcpCgl7CgkJdHJ5CgkJewoJCQl2YXIgZGF0YSA9
IHJhd19kb2N1bWVudHNbZG9jdW1lbnRpZF07CgkJCXdpbmRvdy5vcGVuZXIuc2Vs
ZWN0ZWREb2N1bWVudChkb2N1bWVudGlkLCB3aW5kb3cpOwoJCQkJCQkJCQkJCQkJ
Lyoga2V5ICAgICxkb2NsaWJpZCAqLwoJCQkvKiB3aW5kb3cuY2xvc2UoKTsqLwoJ
CQlyZXR1cm47CgkJfQoJCWNhdGNoKGUpCgkJewoJCQk7CgkJfQoJfQp9OwoKZnVu
Y3Rpb24gY29weTJybWwoZSkKewoJZS5wcmV2ZW50RGVmYXVsdCgpOwoKCWlmICh0
eXBlb2Ygd2luZG93Lm9wZW5lciA9PSAndW5kZWZpbmVkJyB8fCAhd2luZG93Lm9w
ZW5lci5kb2N1bWVudCkKCQlyZXR1cm4gZmFsc2U7CgoJLy8gQXJlIHdlIGNhbGxl
ZCBmcm9tIGEgRkNLRWRpdG9yIGltYWdlLXNlbGVjdG9yPwoJaWYodHlwZW9mIHdp
bmRvdy5vcGVuZXIuU2V0VXJsICE9ICd1bmRlZmluZWQnKQoJewoJCXdpbmRvdy5v
cGVuZXIuU2V0VXJsKGJvYXJkX3NjcmlwdF91cmwgKwoJCQkJJy8uLi9kb3dubG9h
ZC5waHAvZG93bmxvYWRfZG9jdW1lbnQvJyArCgkJCQluZXcgRE9NUXVlcnkoJ2lu
cHV0W25hbWU9ImRvY3VtZW50aWQiXScsIHRoaXMpLmdldCgwKS52YWx1ZSArCgkJ
CQknLycgKyBuZXcgRE9NUXVlcnkoJ2lucHV0W25hbWU9ImtleSJdJywgdGhpcyku
Z2V0KDApLnZhbHVlICsKCQkJCScvJyArCgkJCQluZXcgRE9NUXVlcnkoJ3NlbGVj
dFtuYW1lPSJmb3JtYXQiXScsIHRoaXMpLmdldCgwKS52YWx1ZQoJCSk7CgkJd2lu
ZG93LmNsb3NlKCk7CgkJcmV0dXJuIGZhbHNlOwoJfQoKCS8qIGZpbmQgb3V0IHdo
aWNoIHJhZGlvIGJ1dHRvbiB3YXMgc2VsZWN0ZWQgKi8KCXZhciBpdGVtcyA9IG5l
dyBET01RdWVyeSgnaW5wdXRbbmFtZT0iYXMiXScsIHRoaXMpLCBkYXRhX2FzOwoJ
Zm9yKHZhciBpID0gMCwgaXRlbTsgKGl0ZW0gPSBpdGVtcy5nZXQoaSkpOyBpKysp
Cgl7CgkJaWYoaXRlbS50eXBlID09ICdoaWRkZW4nIHx8IGl0ZW0uY2hlY2tlZCkK
CQl7CgkJCWRhdGFfYXMgPSBpdGVtOwoJCQlicmVhazsKCQl9Cgl9CgoJaWYoIWRh
dGFfYXMpCgkJcmV0dXJuIGZhbHNlOwoKCXZhciBybWwgPSAnJzsKCXN3aXRjaCgg
ZGF0YV9hcy52YWx1ZSApCgl7CgkJY2FzZSAnaW1hZ2UnOgoJCQl2YXIgZmxvYXRf
c2VsZWN0ID0gbmV3IERPTVF1ZXJ5KCdzZWxlY3RbbmFtZT0iZmxvYXQiXScsIHRo
aXMpOwoJCQl2YXIgZm9ybWF0X3NlbGVjdCA9IG5ldyBET01RdWVyeSgnc2VsZWN0
W25hbWU9ImZvcm1hdCJdJywgdGhpcyk7CgkJCXZhciBsaW5rX2lucHV0ID0gbmV3
IERPTVF1ZXJ5KCdpbnB1dFtuYW1lPSJsaW5rIl0nLCB0aGlzKTsKCgkJCXZhciBs
aW5rID0gJzAnOwoKCQkJdmFyIGZsb2F0ID0gJycsIGZvcm1hdD0nJzsKCgkJCWlm
IChmbG9hdF9zZWxlY3QubGVuZ3RoID4gMCkKCQkJCWZsb2F0ID0gZmxvYXRfc2Vs
ZWN0LmdldCgwKS5vcHRpb25zWyBmbG9hdF9zZWxlY3QuZ2V0KDApLnNlbGVjdGVk
SW5kZXggXS52YWx1ZTsKCgkJCWlmIChmb3JtYXRfc2VsZWN0Lmxlbmd0aCA+IDAp
CgkJCQlmb3JtYXQgPSBmb3JtYXRfc2VsZWN0LmdldCgwKS5vcHRpb25zWyBmb3Jt
YXRfc2VsZWN0LmdldCgwKS5zZWxlY3RlZEluZGV4IF0udmFsdWU7CgoJCQlpZiAo
IGxpbmtfaW5wdXQubGVuZ3RoID4gMCkKCQkJewoJCQkJbGluayA9IGxpbmtfaW5w
dXQuZ2V0KDApLmNoZWNrZWQgPyAnMScgOiAnMCc7CgkJCX0KCgkJCXJtbCA9ICdb
ZG9jbGliPScgKwoJCQkJCW5ldyBET01RdWVyeSgnaW5wdXRbbmFtZT0iZG9jdW1l
bnRpZCJdJywgdGhpcykuZ2V0KDApLnZhbHVlICsKCQkJCQknLCcgKwoJCQkJCW5l
dyBET01RdWVyeSgnaW5wdXRbbmFtZT0ia2V5Il0nLCB0aGlzKS5nZXQoMCkudmFs
dWUgKwoJCQkJCScsJyArCgkJCQkJbmV3IERPTVF1ZXJ5KCdpbnB1dFtuYW1lPSJs
aWJyYXJ5aWQiXScsIHRoaXMpLmdldCgwKS52YWx1ZSArCgkJCQkJJywnICsKCQkJ
CQlmb3JtYXQgKwoJCQkJCScsJyArCgkJCQkJbGluayArCgkJCQkJKGZsb2F0ICE9
ICIiID8gKCIsIiArIGZsb2F0KSA6ICIiICkgKwoJCQkJCSddXG4nOwoJCWJyZWFr
OwoJCWNhc2UgJ3RleHQnOgoJCQlybWwgPSAnW2RvY2xpYj0nICsKCQkJCQluZXcg
RE9NUXVlcnkoJ2lucHV0W25hbWU9ImRvY3VtZW50aWQiXScsIHRoaXMpLmdldCgw
KS52YWx1ZSArCgkJCQkJJywnICsKCQkJCQluZXcgRE9NUXVlcnkoJ2lucHV0W25h
bWU9ImtleSJdJywgdGhpcykuZ2V0KDApLnZhbHVlICsKCQkJCQknLCcgKwoJCQkJ
CW5ldyBET01RdWVyeSgnaW5wdXRbbmFtZT0ibGlicmFyeWlkIl0nLCB0aGlzKS5n
ZXQoMCkudmFsdWUgKwoJCQkJCScsLDBdJyArCgkJCQkJbmV3IERPTVF1ZXJ5KCdp
bnB1dFtuYW1lPSJmaWxlbmFtZSJdJywgdGhpcykuZ2V0KDApLnZhbHVlICsKCQkJ
CQknWy9dXG4nOwoJCWJyZWFrOwoJCWRlZmF1bHQ6CgkJCXJldHVybjsKCX0KCXdp
bmRvdy5vcGVuZXIuc2V0Q3VycmVudFRleHRhcmVhKHdpbmRvdyk7Cgl3aW5kb3cu
b3BlbmVyLnB1dFN0cihybWwpOwoJd2luZG93Lm9wZW5lci5mb2N1cygpOwoJd2lu
ZG93LmNsb3NlKCk7CgoJcmV0dXJuIGZhbHNlOwp9OwpmdW5jdGlvbiB0b3BpY0Rv
Y3VtZW50U2VsZWN0b3IoKQp7Cgl2YXIgdG9waWNEb2N1bWVudCA9IG5ldyBET01R
dWVyeSgnaW5wdXQjdG9waWMtZG9jdW1lbnQnKS5nZXQoMCk7CgoJaWYodG9waWNE
b2N1bWVudCkKCXsKCQl2YXIgZG9jbGliSW1nID0gbmV3IERPTVF1ZXJ5KCdpbWcj
dG9waWMtZG9jdW1lbnQtaW1nJykuZ2V0KDApOwoKCQlpZihkb2NsaWJJbWcuc3Jj
ICE9IGJvYXJkX3NjcmlwdF91cmwgKyAnLycpCgkJCXRvcGljRG9jdW1lbnRTZWxl
Y3RvckZpZWxkcygpOwoJCWVsc2UKCQkJZG9jbGliSW1nLnBhcmVudE5vZGUucmVt
b3ZlQ2hpbGQoZG9jbGliSW1nKTsKCgkJYWRkRXZlbnRUb1RhcmdldHMobnVsbCwg
J21vdXNldXAnLCBfdG9waWNEb2N1bWVudFNlbGVjdG9yLCAnbGkuc2VsZWN0LWRv
Y3VtZW50IGEnKTsKCQlhZGRFdmVudFRvVGFyZ2V0cyhudWxsLCAnY2xpY2snLCBf
dG9waWNEb2N1bWVudFNlbGVjdG9yLCAnbGkuc2VsZWN0LWRvY3VtZW50IGEnKTsK
CX0KfQoKZnVuY3Rpb24gX3RvcGljRG9jdW1lbnRTZWxlY3RvcihlKQp7Cgl2YXIg
bGkgPSBnZXRTaWJsaW5nTm9kZSh0aGlzLCAndXAnLCAnbGknKQoKCXN3aXRjaChs
aS5jbGFzc05hbWUpCgl7CgkJY2FzZSAnc2VsZWN0LWRvY3VtZW50JzoKCQkJZG9j
dW1lbnRXaW5kb3cgPSB3aW5kb3cub3BlbigKCQkJCWJvYXJkX3NjcmlwdF91cmwg
KyAnL2xpc3RfZG9jdW1lbnRzP2RhdGFbc21hbGxdPTEnLAoJCQkJJ0RvY3VtZW50
TGlicmFyeScsCgkJCQknd2lkdGg9OTAwLCBoZWlnaHQ9NTAwLCByZXNpemFibGU9
eWVzLCBzY3JvbGxiYXJzPXllcycKCQkJKTsKCgkJCWUucHJldmVudERlZmF1bHQo
KTsKCQlicmVhazsKCQljYXNlICdkZWxldGUtZG9jdW1lbnQnOgoJCQl2YXIgdG9w
aWNEb2N1bWVudCA9IG5ldyBET01RdWVyeSgnaW5wdXQjdG9waWMtZG9jdW1lbnQn
KS5nZXQoMCk7CgkJCXZhciBjaGVja2JveCA9IG5ldyBET01RdWVyeSgnaW5wdXQj
dG9waWMtZG9jdW1lbnQtY2hhbmdlJykuZ2V0KDApOwoJCQl2YXIgaXRlbXMgPSBu
ZXcgRE9NUXVlcnkoJ2ltZyN0b3BpYy1kb2N1bWVudC1pbWcsIGxpLmVkaXQtZG9j
dW1lbnQsIGxpLmRlbGV0ZS1kb2N1bWVudCcpOwoKCQkJdG9waWNEb2N1bWVudC52
YWx1ZSA9ICcnOwoKCQkJaWYoY2hlY2tib3gpCgkJCQljaGVja2JveC5jaGVja2Vk
ID0gdHJ1ZTsKCgkJCWZvcih2YXIgaT0wLCBpdGVtOyAoaXRlbSA9IGl0ZW1zLmdl
dChpKSk7IGkrKykKCQkJCWl0ZW0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpdGVt
KTsKCgkJCWUucHJldmVudERlZmF1bHQoKTsKCQlicmVhazsKCX0KfQoKZnVuY3Rp
b24gdG9waWNEb2N1bWVudFNlbGVjdG9yRmllbGRzKHRvcGljRG9jdW1lbnRJZCkK
ewoJdmFyIHVsID0gbmV3IERPTVF1ZXJ5KCd1bC50b3BpYy1kb2N1bWVudC1hY3Rp
b25saXN0JykuZ2V0KDApOwoKCWlmKCF1bCkKCQlyZXR1cm47CgoJd2hpbGUodWwu
Zmlyc3RDaGlsZCkKCQl1bC5yZW1vdmVDaGlsZCh1bC5maXJzdENoaWxkKTsKCgl2
YXIgZG9jbGliSW1nID0gbmV3IERPTVF1ZXJ5KCdpbWcjdG9waWMtZG9jdW1lbnQt
aW1nJykuZ2V0KDApOwoKCWlmKGRvY2xpYkltZyAmJiBkb2NsaWJJbWcuZ2V0QXR0
cmlidXRlKCdzcmMnLCAyKSAhPSAnJykKCXsKCQl2YXIgZWRpdExpbmsgPSBjcmVh
dGVET01Ob2RlKAoJCQknbGknLAoJCQl7ICdjbGFzcycgOiAnZWRpdC1kb2N1bWVu
dCcgfSwKCQkJWwoJCQkJY3JlYXRlRE9NTm9kZSgKCQkJCQknYScsCgkJCQkJewoJ
CQkJCQknaHJlZicgOiBib2FyZF9zY3JpcHRfdXJsICsgJy9lZGl0X2RvY3VtZW50
LycgKyB0b3BpY0RvY3VtZW50SWQsCgkJCQkJCSd0YXJnZXQnIDogJ19ibGFuaycs
CgkJCQkJCSdldmVudCcgOiBbICdtb3VzZXVwJywgX3RvcGljRG9jdW1lbnRTZWxl
Y3RvciBdCgkJCQkJfSwKCQkJCQlbICdXaWp6aWcgYmVzdGFuZCcgXQoJCQkJKQoJ
CQldCgkJKTsKCQl2YXIgZGVsZXRlTGluayA9IGNyZWF0ZURPTU5vZGUoCgkJCSds
aScsCgkJCXsgJ2NsYXNzJyA6ICdkZWxldGUtZG9jdW1lbnQnIH0sCgkJCVsKCQkJ
CWNyZWF0ZURPTU5vZGUoCgkJCQkJJ2EnLAoJCQkJCXsKCQkJCQkJJ2hyZWYnIDog
JyMnLAoJCQkJCQknZXZlbnQnIDogWyAnbW91c2V1cCcsIF90b3BpY0RvY3VtZW50
U2VsZWN0b3IgXQoJCQkJCX0sCgkJCQkJWyAnR2VlbiBiZXN0YW5kJyBdCgkJCQkp
CgkJCV0KCQkpOwoKCQl1bC5hcHBlbmRDaGlsZChlZGl0TGluayk7CgkJdWwuYXBw
ZW5kQ2hpbGQoZGVsZXRlTGluayk7Cgl9CgllbHNlCgl7CgkJdmFyIGFkZExpbmsg
PSBjcmVhdGVET01Ob2RlKAoJCQknbGknLAoJCQl7ICdjbGFzcycgOiAnYWRkLWRv
Y3VtZW50JyB9LAoJCQlbCgkJCQljcmVhdGVET01Ob2RlKAoJCQkJCSdhJywKCQkJ
CQl7CgkJCQkJCSdocmVmJyA6IGJvYXJkX3NjcmlwdF91cmwgKyAnL2luc2VydF9k
b2N1bWVudCcsCgkJCQkJCSdyZWwnIDogJ2xheWVyW2FkZC1kb2N1bWVudF0nCgkJ
CQkJfSwKCQkJCQlbICdVcGxvYWQgYmVzdGFuZCcgXQoJCQkJKQoJCQldCgkJKTsK
CQl2YXIgc2VsZWN0TGluayA9IGNyZWF0ZURPTU5vZGUoCgkJCSdsaScsCgkJCXsg
J2NsYXNzJyA6ICdzZWxlY3QtZG9jdW1lbnQnIH0sCgkJCVsKCQkJCWNyZWF0ZURP
TU5vZGUoCgkJCQkJJ2EnLAoJCQkJCXsKCQkJCQkJJ2hyZWYnIDogYm9hcmRfc2Ny
aXB0X3VybCArICcvbGlzdF9kb2N1bWVudHMnLAoJCQkJCQkndGFyZ2V0JyA6ICdf
YmxhbmsnLAoJCQkJCQknZXZlbnQnIDogWyAnbW91c2V1cCcsIF90b3BpY0RvY3Vt
ZW50U2VsZWN0b3IgXQoJCQkJCX0sCgkJCQkJWyAnS2llcyBiZXN0YW5kJyBdCgkJ
CQkpCgkJCV0KCQkpOwoKCQl1bC5hcHBlbmRDaGlsZChhZGRMaW5rKTsKCQl1bC5h
cHBlbmRDaGlsZChzZWxlY3RMaW5rKTsKCX0KfQoKZnVuY3Rpb24gc2VsZWN0ZWRE
b2N1bWVudChkb2N1bWVudF9pZCwgcG9wdXBfd2luKQp7Cgl2YXIgZG9jdW1lbnRf
aGFzaCA9IHBvcHVwX3dpbi5yYXdfZG9jdW1lbnRzW2RvY3VtZW50X2lkXVswXS5z
cGxpdCgnLycpOwoJZG9jdW1lbnRfaGFzaC5wb3AoKTsKCWRvY3VtZW50X2hhc2gg
PSBkb2N1bWVudF9oYXNoLnBvcCgpOwoKCXZhciB0b3BpY0RvY3VtZW50ID0gbmV3
IERPTVF1ZXJ5KCdpbnB1dCN0b3BpYy1kb2N1bWVudCcpLmdldCgwKTsKCXZhciBj
aGVja2JveCA9IG5ldyBET01RdWVyeSgnaW5wdXQjdG9waWMtZG9jdW1lbnQtY2hh
bmdlJykuZ2V0KDApOwoJdmFyIGRvY2xpYkltZyA9IG5ldyBET01RdWVyeSgnaW1n
I3RvcGljLWRvY3VtZW50LWltZycpLmdldCgwKTsKCglpZighZG9jbGliSW1nKQoJ
ewoJCXZhciB1bCA9IG5ldyBET01RdWVyeSgndWwudG9waWMtZG9jdW1lbnQtYWN0
aW9ubGlzdCcpLmdldCgwKTsKCQlkb2NsaWJJbWcgPSBjcmVhdGVET01Ob2RlKAoJ
CQknaW1nJywKCQkJewoJCQkJJ3NyYycgOiBib2FyZF9zY3JpcHRfdXJsICsgJy9k
b3dubG9hZF9kb2N1bWVudC8nICsgZG9jdW1lbnRfaWQgKycvJysgZG9jdW1lbnRf
aGFzaCArJy9kb2N1bWVudCcsCgkJCQknaWQnIDogJ3RvcGljLWRvY3VtZW50LWlt
ZycKCQkJfSwKCQkJWyBdCgkJKTsKCQl1bC5wYXJlbnROb2RlLmluc2VydEJlZm9y
ZShkb2NsaWJJbWcsIHVsKTsKCX0KCWVsc2UKCQlkb2NsaWJJbWcuc3JjID0gYm9h
cmRfc2NyaXB0X3VybCArICcvZG93bmxvYWRfZG9jdW1lbnQvJyArIGRvY3VtZW50
X2lkICsnLycrIGRvY3VtZW50X2hhc2ggKycvZG9jdW1lbnQnOwoKCXRvcGljRG9j
dW1lbnRTZWxlY3RvckZpZWxkcyhkb2N1bWVudF9pZCk7CgoJaWYoY2hlY2tib3gp
CgkJY2hlY2tib3guY2hlY2tlZCA9IHRydWU7CgoJdG9waWNEb2N1bWVudC52YWx1
ZSA9IGRvY3VtZW50X2lkICsnLycrIGRvY3VtZW50X2hhc2g7Cgl0cnkKCXsKCQlk
b2N1bWVudFdpbmRvdy5jbG9zZSgpOwoJfQoJY2F0Y2goZSkKCXsKCQk7Cgl9Cn0K
dmFyIHRvcGljRG9jdW1lbnRJZDsKdmFyIGNvbnRhaW5lcjsKCmZ1bmN0aW9uIHRv
cGljRG9jdW1lbnRTZWxlY3RvcihpZCkKewoJdmFyIHRvcGljRG9jdW1lbnQgPSBu
ZXcgRE9NUXVlcnkoJ2lucHV0IycgKyBpZCkuZ2V0KDApOwoJdG9waWNEb2N1bWVu
dElkID0gaWQ7CgoJaWYodG9waWNEb2N1bWVudCkKCXsKCQl2YXIgZG9jbGliSW1n
ID0gbmV3IERPTVF1ZXJ5KCdpbWcjJyArIGlkICsgJy1pbWcnKS5nZXQoMCk7CgoJ
CWNvbnRhaW5lciA9IGdldFNpYmxpbmdOb2RlKHRvcGljRG9jdW1lbnQsICduZXh0
JywgJ2RpdicpOwoKCQl0b3BpY0RvY3VtZW50U2VsZWN0b3JGaWVsZHModG9waWNE
b2N1bWVudC52YWx1ZS5zcGxpdCgnLycpLnNoaWZ0KCkpOwoKCQlhZGRFdmVudFRv
VGFyZ2V0cyhudWxsLCAnbW91c2V1cCcsIF90b3BpY0RvY3VtZW50U2VsZWN0b3Is
ICcjJyArIGNvbnRhaW5lci5pZCArICcgbGkuc2VsZWN0LWRvY3VtZW50IGEnKTsK
CQlhZGRFdmVudFRvVGFyZ2V0cyhudWxsLCAnY2xpY2snLCBfdG9waWNEb2N1bWVu
dFNlbGVjdG9yLCAnIycgKyBjb250YWluZXIuaWQgKyAnIGxpLnNlbGVjdC1kb2N1
bWVudCBhJyk7Cgl9Cn0KCmZ1bmN0aW9uIF90b3BpY0RvY3VtZW50U2VsZWN0b3Io
ZSkKewoJdmFyIGxpID0gZ2V0U2libGluZ05vZGUodGhpcywgJ3VwJywgJ2xpJykK
CWNvbnRhaW5lciA9IGdldFNpYmxpbmdOb2RlKHRoaXMsICd1cCcsICdkaXYnKTsK
Cglzd2l0Y2gobGkuY2xhc3NOYW1lKQoJewoJCWNhc2UgJ3NlbGVjdC1kb2N1bWVu
dCc6CgkJCWRvY3VtZW50V2luZG93ID0gd2luZG93Lm9wZW4oCgkJCQlib2FyZF9z
Y3JpcHRfdXJsICsgJy9saXN0X2RvY3VtZW50cz9kYXRhW3NtYWxsXT0xJywKCQkJ
CSdEb2N1bWVudExpYnJhcnknLAoJCQkJJ3dpZHRoPTkwMCwgaGVpZ2h0PTUwMCwg
cmVzaXphYmxlPXllcywgc2Nyb2xsYmFycz15ZXMnCgkJCSk7CgoJCQllLnByZXZl
bnREZWZhdWx0KCk7CgkJYnJlYWs7CgkJY2FzZSAnZGVsZXRlLWRvY3VtZW50JzoK
CQkJdmFyIHRvcGljRG9jdW1lbnQgPSBnZXRTaWJsaW5nTm9kZShjb250YWluZXIs
ICdwcmV2aW91cycsICdpbnB1dCcpOwoJCQl2YXIgaXRlbXMgPSBuZXcgRE9NUXVl
cnkoJ2ltZyN0b3BpYy1kb2N1bWVudC1pbWcnLCBjb250YWluZXIpOwoKCQkJdG9w
aWNEb2N1bWVudC52YWx1ZSA9ICcnOwoKCQkJZm9yKHZhciBpPTAsIGl0ZW07IChp
dGVtID0gaXRlbXMuZ2V0KGkpKTsgaSsrKQoJCQkJaXRlbS5wYXJlbnROb2RlLnJl
bW92ZUNoaWxkKGl0ZW0pOwoKCQkJdG9waWNEb2N1bWVudFNlbGVjdG9yRmllbGRz
KCk7CgoJCQllLnByZXZlbnREZWZhdWx0KCk7CgkJYnJlYWs7Cgl9Cn0KCnZhciBv
cmlnaW5hbFNlbGVjdGVkRG9jdW1lbnQgPSBzZWxlY3RlZERvY3VtZW50Owp2YXIg
c2VsZWN0ZWREb2N1bWVudCA9IGZ1bmN0aW9uKCkKewoJdmFyIHJldCA9IG9yaWdp
bmFsU2VsZWN0ZWREb2N1bWVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwoJaWYo
aXNJRSkKCXsKCQlqc2NzcygnYWRkJywgZG9jdW1lbnQuYm9keSwgJ2Rpc3BsYXkt
bm9uZScpOwoJCWpzY3NzKCdyZW1vdmUnLCBkb2N1bWVudC5ib2R5LCAnZGlzcGxh
eS1ub25lJyk7Cgl9CglyZXR1cm4gcmV0Owp9OwovKg0KCWNzc1F1ZXJ5LCB2ZXJz
aW9uIDIuMCAoMjAwNS8wNS8yMykNCglDb3B5cmlnaHQ6IDIwMDQtMjAwNSwgRGVh
biBFZHdhcmRzIChodHRwOi8vZGVhbi5lZHdhcmRzLm5hbWUvKQ0KCUxpY2Vuc2U6
IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL0xHUEwvMi4xLw0K
Ki8NCmlmKCBET01RdWVyeS5wcm90b3R5cGUucmVzdWx0VHlwZSA9PSAnY3NzUXVl
cnknICkNCnsNCglldmFsKGZ1bmN0aW9uKHAsYSxjLGssZSxkKXtlPWZ1bmN0aW9u
KGMpe3JldHVybihjPGE/IiI6ZShwYXJzZUludChjL2EpKSkrKChjPWMlYSk+MzU/
U3RyaW5nLmZyb21DaGFyQ29kZShjKzI5KTpjLnRvU3RyaW5nKDM2KSl9O2lmKCEn
Jy5yZXBsYWNlKC9eLyxTdHJpbmcpKXt3aGlsZShjLS0pZFtlKGMpXT1rW2NdfHxl
KGMpO2s9W2Z1bmN0aW9uKGUpe3JldHVybiBkW2VdfV07ZT1mdW5jdGlvbigpe3Jl
dHVybidcXHcrJ307Yz0xO307d2hpbGUoYy0tKWlmKGtbY10pcD1wLnJlcGxhY2Uo
bmV3IFJlZ0V4cCgnXFxiJytlKGMpKydcXGInLCdnJyksa1tjXSk7cmV0dXJuIHA7
fSgnOCBDPTYoKXs4IDFIPSIyLjAgKDJTKSI7OCAkMkI9L1xccyosXFxzKi87OCBD
PTYoJGQsJCRiKXsyVHs4ICRtPVtdOzggJDFTPWMuMlEuMkEmJiEkJGI7OCAkMUs9
KCQkYik/KCQkYi4yUj09MkUpPyQkYjpbJCRiXTpbWF07OCAkJEU9MW8oJGQpLjIy
KCQyQiksaTt4KGk9MDtpPCQkRS55O2krKyl7JGQ9MUMoJCRFW2ldKTs5KDE2JiYk
ZC5TKDAsMykuMncoIiIpPT0iICojIil7JGQ9JGQuUygyKTskJGI9MjYoW10sJDFL
LCRkWzFdKX0xSSAkJGI9JDFLOzggaj0wLCRVLCRGLCRjLCQxYT0iIjtJKGo8JGQu
eSl7JFU9JGRbaisrXTskRj0kZFtqKytdOyQxYSs9JFUrJEY7JGM9IiI7OSgkZFtq
XT09IigiKXtJKCRkW2orK10hPSIpIikkYys9JGRbal07JGM9JGMuUygwLC0xKTsk
MWErPSIoIiskYysiKSJ9JCRiPSgkMVMmJjE5WyQxYV0pPzE5WyQxYV06MnUoJCRi
LCRVLCRGLCRjKTs5KCQxUykxOVskMWFdPSQkYn0kbT0kbS4yTigkJGIpfTFZIEMu
MW07NyAkbX0yUCgkMW0pe0MuMW09JDFtOzdbXX19O0MuMmk9NigpezciNiBDKCkg
e1xcbiAgWzFIICIrMUgrIl1cXG59In07OCAxOT17fTtDLjJBPVA7Qy4zMz02KCRk
KXs5KCRkKXskZD0xQygkZCkuMncoIiIpOzFZIDE5WyRkXX0xSSAxOT17fX07OCAx
UD17fTs4IDFYPVA7Qy4xcz02KCQxYiwkMXEpezkoMVgpMW4oIiQxcT0iKzFpKCQx
cSkpOzFQWyQxYl09MTIgJDFxKCl9O0MuMzA9NigkWSl7NyAkWT8xbigkWSk6en07
OCBFPXt9Ozggdj17fTs4IFo9W107RVsiICJdPTYoJGwsJGIsJHEsJHApezggJDUs
aSxqO3goaT0wO2k8JGIueTtpKyspezggJDFyPTFmKCRiW2ldLCRxLCRwKTt4KGo9
MDsoJDU9JDFyW2pdKTtqKyspezkoTygkNSkmJjFwKCQ1LCRwKSkkbC5EKCQ1KX19
fTtFWyIjIl09NigkbCwkYiwkSCl7OCAkNSxqO3goaj0wOygkNT0kYltqXSk7aisr
KTkoJDUuSD09JEgpJGwuRCgkNSl9O0VbIi4iXT02KCRsLCRiLCQxNyl7JDE3PTEy
IDFSKCIoXnxcXFxccykiKyQxNysiKFxcXFxzfCQpIik7OCAkNSxpO3goaT0wOygk
NT0kYltpXSk7aSsrKTkoJDE3LmgoJDUuMTcpKSRsLkQoJDUpfTtFWyI6Il09Nigk
bCwkYiwkMnksJGMpezggJGg9dlskMnldLCQ1LGk7OSgkaCl4KGk9MDsoJDU9JGJb
aV0pO2krKyk5KCRoKCQ1LCRjKSkkbC5EKCQ1KX07dlsiMlgiXT02KCQ1KXs4ICRY
PVYoJDUpOzkoJFguMUcpeCg4IGk9MDtpPCRYLjFHLnk7aSsrKXs5KCRYLjFHW2ld
PT0kNSk3IFJ9fTt2WyIzNSJdPTYoJDUpe307OCBPPTYoJDUpezcoJDUmJiQ1LjFa
PT0xJiYkNS5xIT0iISIpPyQ1OjJxfTs4IDFsPTYoJDUpe0koJDUmJigkNT0kNS4z
MikmJiFPKCQ1KSkyRzs3ICQ1fTs4IEs9NigkNSl7SSgkNSYmKCQ1PSQ1LjJVKSYm
IU8oJDUpKTJHOzcgJDV9OzggMUw9NigkNSl7NyBPKCQ1LjJiKXx8SygkNS4yYil9
OzggMkw9NigkNSl7NyBPKCQ1LjI5KXx8MWwoJDUuMjkpfTs4IDE1PTYoJDUpezgg
JDE1PVtdOyQ1PTFMKCQ1KTtJKCQ1KXskMTUuRCgkNSk7JDU9SygkNSl9NyAkMTV9
OzggMTY9Ujs4IDJ6PTYoJDUpezcgVigkNSkuMzE9PSIyViAyWSJ9OzggVj02KCQ1
KXs3ICQ1LjJafHwkNS5YfTs4IDFmPTYoJDUsJHEpezcoJHE9PSIqIiYmJDUuMUop
PyQ1LjFKOiQ1LjFmKCRxKX07OCAxdD02KCQ1LCRxLCRwKXs5KCRxPT0iKiIpNyBP
KCQ1KTs5KCExcCgkNSwkcCkpNyBQOzcgJDUucS4yOCgpPT0kcS4yOCgpfTs4IDFw
PTYoJDUsJHApezchJHB8fCgkcD09IioiKXx8KCQ1LjJXPT0kcCl9OzggMVY9Nigk
NSl7NyAkNS4yS307NiAyNigkbCwkYixIKXs4ICRtLGksajt4KGk9MDtpPCRiLnk7
aSsrKXs5KCRtPSRiW2ldLjFKLjM0KEgpKXs5KCRtLnk9PTJxKSRsLkQoJG0pOzFJ
IHgoaj0wO2o8JG0ueTtqKyspJGwuRCgkbVtqXSl9fTcgJGx9OzggJDFGPS9cXHwv
OzYgMnUoJCRiLCRVLCRGLCRjKXs5KCQxRi5oKCRGKSl7JEY9JEYuMjIoJDFGKTsk
Yz0kRlswXTskRj0kRlsxXX04ICRsPVtdOzkoRVskVV0pe0VbJFVdKCRsLCQkYiwk
RiwkYyl9NyAkbH07OCAkMm09L15bXlxccz4rfl0vOzggJCQyaD0vW1xccyMuOj4r
figpQF18W15cXHMjLjo+K34oKUBdKy9nOzYgMUMoJGQpezkoJDJtLmgoJGQpKSRk
PSIgIiskZDs3ICRkLm0oJCQyaCl8fFtdfTs4ICQyZz0vXFxzKihbXFxzPit+KCks
XXxefCQpXFxzKi9nOzggJDJmPS8oW1xccz4rfixdfFteKF1cXCt8XikoWyMuOkBd
KS9nOzggMW89NigkZCl7NyAkZC5HKCQyZywiJDEiKS5HKCQyZiwiJDEqJDIiKX07
OCAxUT17Mmk6NigpezciXCcifSxtOi9eKFwnW15cJ10qXCcpfCgiW14iXSoiKSQv
LGg6NigkdSl7NyB6Lm0uaCgkdSl9LDI1OjYoJHUpezcgei5oKCR1KT8kdTp6KyR1
K3p9LDJrOjYoJHUpezcgei5oKCR1KT8kdS5TKDEsLTEpOiR1fX07OCAxTz02KCQx
NCl7NyAxUS4yaygkMTQpfTs4ICQyaj0vKFtcXC8oKVtcXF0/e318KistXSkvZzs2
IDEwKCR1KXs3ICR1LkcoJDJqLCJcXFxcJDEiKX07Qy4xcygiMXgtMmEiLDYoKXtF
WyI+Il09NigkbCwkYiwkcSwkcCl7OCAkNSxpLGo7eChpPTA7aTwkYi55O2krKyl7
OCAkMXI9MTUoJGJbaV0pO3goaj0wOygkNT0kMXJbal0pO2orKyk5KDF0KCQ1LCRx
LCRwKSkkbC5EKCQ1KX19O0VbIisiXT02KCRsLCRiLCRxLCRwKXt4KDggaT0wO2k8
JGIueTtpKyspezggJDU9SygkYltpXSk7OSgkNSYmMXQoJDUsJHEsJHApKSRsLkQo
JDUpfX07RVsiQCJdPTYoJGwsJGIsJDJsKXs4ICRoPVpbJDJsXS5oOzggJDUsaTt4
KGk9MDsoJDU9JGJbaV0pO2krKyk5KCRoKCQ1KSkkbC5EKCQ1KX07dlsiM3MtMWUi
XT02KCQ1KXs3ITFsKCQ1KX07dlsiMUIiXT02KCQ1LCRZKXskWT0xMiAxUigiXiIr
JFksImkiKTtJKCQ1JiYhJDUuMWooIjFCIikpJDU9JDUuMjQ7NyAkNSYmJFkuaCgk
NS4xaigiMUIiKSl9Ozggaz17fTtrLjFFPSJAIjtrLk49e307ay5tPS9cXFsoW1xc
dy1dKylcXHMqKFxcVz89KT9cXHMqKFteXFxdXSopXFxdL2c7ay5HPTYoJG0sJHQs
JDJzLCRBKXs4ICQxeT1rLjFFKyRtOzkoIVpbJDF5XSl7JHQ9ay4ydCgkdCwkMnN8
fCIiLCRBfHwiIik7WlskMXldPSR0O1ouRCgkdCl9NyBaWyQxeV0uSH07ay4yZT02
KCRkKXs3ICRkLkcoei5tLHouRyl9O2suMnQ9NigkMUQsJGgsJEEpezggJDFnPXt9
OyQxZy5IPWsuMUUrWi55OyQxZy4xYj0kMUQ7JGg9ei5OWyRoXTskaD0kaD8kaChr
LjFqKCQxRCksMU8oJEEpKTpQOyQxZy5oPTEyIDJyKCJlIiwiNyAiKyRoKTs3ICQx
Z307ay4xaj02KCQxYil7MXcoJDFiLjN5KCkpe0IiSCI6NyJlLkgiO0IiM3YiOjci
ZS4xNyI7QiJ4Ijo3ImUuM3giO0IiMjciOjkoMTYpezciMWkoKGUuM24ubSgvMjc9
XFwiPyhbXlxcXFxzXFwiXSopXFwiPy8pfHxbXSlbMV18fFwnXCcpIn19NyJlLjFq
KFwnIiskMWIrIlwnKSJ9O3ouaz1rO2suTlsiIl09NigkdCl7NyAkdH07ay5OWyI9
Il09NigkdCwkQSl7NyAkdCsiPT0iKzFRLjI1KCRBKX07ay5OWyJ+PSJdPTYoJHQs
JEEpezciLyhefFxcXFxzKSIrMTAoJEEpKyIoXFxcXHN8JCkvLmgoIiskdCsiKSJ9
O2suTlsifD0iXT02KCR0LCRBKXs3Ii9eIisxMCgkQSkrIigtfCQpLy5oKCIrJHQr
IikifTs4IDJkPTFvOzFvPTYoJGQpezcgMmQoay4yZSgkZCkpfX0pO0MuMXMoIjF4
LTM3Iiw2KCl7OCAxQT0xUFsiMXgtMmEiXTs5KCExQSk3O0VbIn4iXT02KCRsLCRi
LCRxLCRwKXs4ICQ1LGk7eChpPTA7KCQ1PSRiW2ldKTtpKyspe0koJDU9SygkNSkp
ezkoMXQoJDUsJHEsJHApKSRsLkQoJDUpfX19O3ZbIjM4Il09NigkNSwkMTQpeyQx
ND0xMiAxUigxMCgxTygkMTQpKSk7NyAkMTQuaCgxVigkNSkpfTt2WyIzayJdPTYo
JDUpezcgJDU9PVYoJDUpLjJKfTt2WyIzaiJdPTYoJDUpezggJE0saTt4KGk9MDso
JE09JDUuMkhbaV0pO2krKyl7OShPKCRNKXx8JE0uMVo9PTMpNyBQfTcgUn07dlsi
MnYtMWUiXT02KCQ1KXs3IUsoJDUpfTt2WyIzbS0xZSJdPTYoJDUpeyQ1PSQ1LjI0
OzcgMUwoJDUpPT0yTCgkNSl9O3ZbIjNsIl09NigkNSwkZCl7OCAkMU49QygkZCxW
KCQ1KSk7eCg4IGk9MDtpPCQxTi55O2krKyl7OSgkMU5baV09PSQ1KTcgUH03IFJ9
O3ZbIjJ4LTFlIl09NigkNSwkYyl7NyAxeigkNSwkYywxbCl9O3ZbIjJ4LTJ2LTFl
Il09NigkNSwkYyl7NyAxeigkNSwkYyxLKX07dlsiM2kiXT02KCQ1KXs3ICQ1Lkg9
PTNjLjNiLlMoMSl9O3ZbIjJGIl09NigkNSl7NyAkNS4yRn07dlsiM0EiXT02KCQ1
KXs3ICQ1LjFNPT09UH07dlsiMU0iXT02KCQ1KXs3ICQ1LjFNfTt2WyIyRCJdPTYo
JDUpezcgJDUuMkR9Ozggaz0xQS5rO2suTlsiXj0iXT02KCR0LCRBKXs3Ii9eIisx
MCgkQSkrIi8uaCgiKyR0KyIpIn07ay5OWyIkPSJdPTYoJHQsJEEpezciLyIrMTAo
JEEpKyIkLy5oKCIrJHQrIikifTtrLk5bIio9Il09NigkdCwkQSl7NyIvIisxMCgk
QSkrIi8uaCgiKyR0KyIpIn07NiAxeigkNSwkYywkMXUpezF3KCRjKXtCIm4iOjcg
UjtCIjNyIjokYz0iMm4iO1E7QiIzcCI6JGM9IjJuKzEifTggJCQyMz0xNSgkNS4y
NCk7NiAxVCgkMTMpezggJDEzPSgkMXU9PUspPyQkMjMueS0kMTM6JDEzLTE7NyAk
JDIzWyQxM109PSQ1fTs5KCExZCgkYykpNyAxVCgkYyk7JGM9JGMuMjIoIm4iKTs4
ICRUPTJDKCRjWzBdKTs4ICRMPTJDKCRjWzFdKTs5KCgxZCgkVCl8fCRUPT0xKSYm
JEw9PTApNyBSOzkoJFQ9PTAmJiExZCgkTCkpNyAxVCgkTCk7OSgxZCgkTCkpJEw9
MDs4ICQxaD0xO0koJDU9JDF1KCQ1KSkkMWgrKzs5KDFkKCRUKXx8JFQ9PTEpNygk
MXU9PUspPygkMWg8PSRMKTooJEw+PSQxaCk7NygkMWglJFQpPT0kTH19KTtDLjFz
KCIxeC0zdCIsNigpezE2PTFuKCJQOy8qQDNvQDkoQFxcM3EpMTY9UkAzOUAqLyIp
OzkoITE2KXsxZj02KCQ1LCRxLCRwKXs3ICRwPyQ1LjNoKCIqIiwkcSk6JDUuMWYo
JHEpfTsxcD02KCQ1LCRwKXs3ISRwfHwoJHA9PSIqIil8fCgkNS4zZj09JHApfTsy
ej1YLjJJPzYoJDUpezcvM2cvaS5oKFYoJDUpLjJJKX06NigkNSl7NyBWKCQ1KS4y
Si5xIT0iM2UifTsxVj02KCQ1KXs3ICQ1LjFrfHwkNS4yS3x8MjAoJDUpfTs2IDIw
KCQ1KXs4ICQxaz0iIiwkTSxpO3goaT0wOygkTT0kNS4ySFtpXSk7aSsrKXsxdygk
TS4xWil7QiAxMTpCIDE6JDFrKz0yMCgkTSk7UTtCIDM6JDFrKz0kTS4zNjtRfX03
ICQxa319fSk7MTIgNigpezggJCQxOD02KCQ2LCQyYywkYyl7JDYuMTgoJDJjLCRj
KX07OShcJ1wnLkcoL14vLDFpKSl7OCAybz0xaS4xVS5HOzggMnA9NigkMXYsJDFj
KXs4ICRtLCQxVz0iIiwkdT16O0koJHUmJigkbT0kMXYuM2QoJHUpKSl7JDFXKz0k
dS5TKDAsJG0uMTMpKyQkMTgoJDFjLHosJG0pOyR1PSR1LlMoJG0uM2EpfTcgJDFX
KyR1fTsxaS4xVS5HPTYoJDF2LCQxYyl7ei5HPSgzdyAkMWM9PSI2Iik/MnA6Mm87
NyB6LkcoJDF2LCQxYyl9fTkoITJyLjE4KXs4IEo9IjE4LSIrM3ooMTIgM3UpOyQk
MTg9NihmLG8sYSl7OCByO29bSl09ZjsxdyhhLnkpe0IgMDpyPW9bSl0oKTtRO0Ig
MTpyPW9bSl0oYVswXSk7UTtCIDI6cj1vW0pdKGFbMF0sYVsxXSk7UTtCIDM6cj1v
W0pdKGFbMF0sYVsxXSxhWzJdKTtRO0IgNDpyPW9bSl0oYVswXSxhWzFdLGFbMl0s
YVszXSk7UTsyTTo4IDIxPVtdLGk9YS55LTE7Mk8gMjFbaV09ImFbIitpKyJdIjtJ
KGktLSk7MW4oInI9b1tKXSgiKzIxKyIpIil9MVkgb1tKXTs3IHJ9fTkoIVtdLkQp
MkUuMVUuRD02KCl7eCg4IGk9MDtpPGMueTtpKyspe3pbei55XT1jW2ldfTcgei55
fX07MVg9Ujs3IEN9KCk7Jyw2MiwyMjMsJ3x8fHx8ZWxlbWVudHxmdW5jdGlvbnxy
ZXR1cm58dmFyfGlmfHxmcm9tfGFyZ3VtZW50c3xzZWxlY3Rvcnx8fHx0ZXN0fHx8
QXR0cmlidXRlU2VsZWN0b3J8cmVzdWx0c3xtYXRjaHx8fG5hbWVzcGFjZXx0YWdO
YW1lfHx8YXR0cmlidXRlfHN0cmluZ3xwc2V1ZG9DbGFzc2VzfHxmb3J8bGVuZ3Ro
fHRoaXN8dmFsdWV8Y2FzZXxjc3NRdWVyeXxwdXNofHNlbGVjdG9yc3xmaWx0ZXJ8
cmVwbGFjZXxpZHx3aGlsZXxBUFBMWXxuZXh0RWxlbWVudFNpYmxpbmd8c3RlcHxu
b2RlfHRlc3RzfHRoaXNFbGVtZW50fGZhbHNlfGJyZWFrfHRydWV8c2xpY2V8bXVs
dGlwbGllcnx0b2tlbnxnZXREb2N1bWVudHx8ZG9jdW1lbnR8Y29kZXxhdHRyaWJ1
dGVTZWxlY3RvcnN8cmVnRXNjYXBlfHxuZXd8aW5kZXh8dGV4dHxjaGlsZEVsZW1l
bnRzfGlzTVNJRXxjbGFzc05hbWV8YXBwbHl8Y2FjaGV8Y2FjaGVTZWxlY3Rvcnxu
YW1lfHJlcGxhY2VtZW50fGlzTmFOfGNoaWxkfGdldEVsZW1lbnRzQnlUYWdOYW1l
fGF0dHJpYnV0ZVNlbGVjdG9yfGNvdW50fFN0cmluZ3xnZXRBdHRyaWJ1dGV8dGV4
dENvbnRlbnR8cHJldmlvdXNFbGVtZW50U2libGluZ3xlcnJvcnxldmFsfHBhcnNl
U2VsZWN0b3J8Y29tcGFyZU5hbWVzcGFjZXxzY3JpcHR8c3Vic2V0fGFkZE1vZHVs
ZXxjb21wYXJlVGFnTmFtZXx0cmF2ZXJzZXxleHByZXNzaW9ufHN3aXRjaHxjc3N8
a2V5fG50aENoaWxkfGNzczJ8bGFuZ3xfdG9TdHJlYW18cHJvcGVydHlOYW1lfFBS
RUZJWHxOQU1FU1BBQ0V8bGlua3N8dmVyc2lvbnxlbHNlfGFsbHxiYXNlfGZpcnN0
RWxlbWVudENoaWxkfGRpc2FibGVkfG5lZ2F0ZWR8Z2V0VGV4dHxtb2R1bGVzfFF1
b3RlfFJlZ0V4cHx1c2VDYWNoZXxfY2hlY2tJbmRleHxwcm90b3R5cGV8Z2V0VGV4
dENvbnRlbnR8bmV3U3RyaW5nfGxvYWRlZHxkZWxldGV8bm9kZVR5cGV8X2dldFRl
eHRDb250ZW50fGFhfHNwbGl0fGNoaWxkcmVufHBhcmVudE5vZGV8YWRkfF9tc2ll
X3NlbGVjdEJ5SWR8aHJlZnx0b1VwcGVyQ2FzZXxsYXN0Q2hpbGR8bGV2ZWwyfGZp
cnN0Q2hpbGR8b2JqZWN0fF9wYXJzZVNlbGVjdG9yfHBhcnNlfElNUExJRURfQUxM
fFdISVRFU1BBQ0V8U1RSRUFNfHRvU3RyaW5nfEVTQ0FQRXxyZW1vdmV8YXR0cmli
dXRlU2VsZWN0b3JJRHxTVEFOREFSRF9TRUxFQ1R8fF9zdHJpbmdSZXBsYWNlfF9m
dW5jdGlvblJlcGxhY2V8bnVsbHxGdW5jdGlvbnxjb21wYXJlfGNyZWF0ZXxzZWxl
Y3R8bGFzdHxqb2lufG50aHxwc2V1ZG9DbGFzc3xpc1hNTHxjYWNoaW5nfENPTU1B
fHBhcnNlSW50fGluZGV0ZXJtaW5hdGV8QXJyYXl8Y2hlY2tlZHxjb250aW51ZXxj
aGlsZE5vZGVzfGNvbnRlbnRUeXBlfGRvY3VtZW50RWxlbWVudHxpbm5lclRleHR8
bGFzdEVsZW1lbnRDaGlsZHxkZWZhdWx0fGNvbmNhdHxkb3xjYXRjaHxjYWxsZWV8
Y29uc3RydWN0b3J8YmV0YXx0cnl8bmV4dFNpYmxpbmd8WE1MfHNjb3BlTmFtZXxs
aW5rfERvY3VtZW50fG93bmVyRG9jdW1lbnR8dmFsdWVPZnxtaW1lVHlwZXxwcmV2
aW91c1NpYmxpbmd8Y2xlYXJDYWNoZXxpdGVtfHZpc2l0ZWR8bm9kZVZhbHVlfGxl
dmVsM3xjb250YWluc3xlbmR8bGFzdEluZGV4fGhhc2h8bG9jYXRpb258ZXhlY3xI
VE1MfHByZWZpeHx4bWx8Z2V0RWxlbWVudHNCeVRhZ05hbWVOU3x0YXJnZXR8ZW1w
dHl8cm9vdHxub3R8b25seXxvdXRlckhUTUx8Y2Nfb258b2RkfHg1ZndpbjMyfGV2
ZW58Zmlyc3R8c3RhbmRhcmR8RGF0ZXxjbGFzc3x0eXBlb2Z8aHRtbEZvcnx0b0xv
d2VyQ2FzZXxOdW1iZXJ8ZW5hYmxlZCcuc3BsaXQoJ3wnKSwwLHt9KSk7DQp9CnRl
eHRzID0gbmV3IEFycmF5KCk7DQoNCnRleHRzWydkb2NsaWInXSA9IG5ldyBBcnJh
eSgpOw0KdGV4dHNbJ2RvY2xpYiddWydpbnNlcnRfYXMnXQkJCT0gJ0luc2VydCBh
cyc7DQp0ZXh0c1snZG9jbGliJ11bJ2luc2VydF9hc19pbWFnZSddCQk9ICdpbWFn
ZSc7DQp0ZXh0c1snZG9jbGliJ11bJ2luc2VydF9hc190ZXh0J10JCT0gJ3Rla3N0
JzsNCnRleHRzWydkb2NsaWInXVsnaW5zZXJ0X2FzX2xpbmsnXQkJPSAnTGluayc7
DQp0ZXh0c1snZG9jbGliJ11bJ2luc2VydF9hc190aHVtYiddCQk9ICdMaW5rIHRo
dW1ibmFpbCB0byBvcmlnaW5hbCc7DQp0ZXh0c1snZG9jbGliJ11bJ2Zvcm1hdCdd
CQkJCT0gJ0Zvcm1hdCc7DQp0ZXh0c1snZG9jbGliJ11bJ29yaWdpbmFsJ10JCQkJ
PSAnT3JpZ2luYWwnOw0KdGV4dHNbJ2RvY2xpYiddWydvdXRsaW5lJ10JCQkJPSAn
UG9zaXRpb24nOw0KdGV4dHNbJ2RvY2xpYiddWydub25lJ10JCQkJCT0gJ05vbmUn
Ow0KdGV4dHNbJ2RvY2xpYiddWydsZWZ0J10JCQkJCT0gJ0xlZnQnOw0KdGV4dHNb
J2RvY2xpYiddWydyaWdodCddCQkJCT0gJ1JpZ2h0JzsNCnRleHRzWydkb2NsaWIn
XVsnaW5zZXJ0J10JCQkJPSAnSW5zZXJ0JzsNCnRleHRzWydkb2NsaWInXVsnaW5z
ZXJ0X2ltYWdlJ10JCQk9ICdJbnNlcnQgaW1hZ2VzJzsNCnRleHRzWydkb2NsaWIn
XVsnbm90X2ltcGxlbWVudGVkJ10JCT0gJ05vdCBpbXBsZW1lbnRlZCB5ZXQnOw0K
DQp0ZXh0c1snZm9ybXMnXSA9IG5ldyBBcnJheSgpOw0KdGV4dHNbJ2Zvcm1zJ11b
J21hcmtlZF9maWVsZHMnXQkJCT0gJ0ZpZWxkcyBtYXJrZWQgd2l0aCBhICc7DQp0
ZXh0c1snZm9ybXMnXVsncmVxdWlyZWQnXQkJCQk9ICcgYXJlIHJlcXVpcmVkJzsN
CnRleHRzWydmb3JtcyddWydoaWRlX2FkdmFuY2VkJ10JCQk9ICdIaWRlIGV4dHJh
IG9wdGlvbnMnOw0KdGV4dHNbJ2Zvcm1zJ11bJ3Nob3dfYWR2YW5jZWQnXQkJCT0g
J1Nob3cgZXh0cmEgb3B0aW9ucyc7DQp0ZXh0c1snZm9ybXMnXVsnbWF4X2NoYXJz
J10JCQkJPSAnWW91IG1heSB1c2UgdXAgdG8gJXMgY2hhcmFjdGVycyBoZXJlJzsN
CnRleHRzWydmb3JtcyddWyduYW1lX3Rvb19zaG9ydCddCQk9ICdUaGlzIHVzZXJu
YW1lIGlzIHRvbyBzaG9ydCc7DQp0ZXh0c1snZm9ybXMnXVsnZW1haWxfaW5jb3Jy
ZWN0J10JCT0gJ1RoaXMgZW1haWxhZHJlc3MgaXMgaW5jb3JyZWN0JzsNCnRleHRz
Wydmb3JtcyddWyd1cmxfaW5jb3JyZWN0J10JCQk9ICdUaGlzIFVSTCBpcyBpbmNv
cnJlY3QnOw0KdGV4dHNbJ2Zvcm1zJ11bJ251bWVyaWNfb25seSddCQkJPSAnVGhp
cyBmaWVsZCBjYW4gb25seSBjb250YWluIG51bWJlcnMnOw0KdGV4dHNbJ2Zvcm1z
J11bJ3JlcXVpcmVkX2ZpZWxkJ10JCT0gJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQn
Ow0KdGV4dHNbJ2Zvcm1zJ11bJ3Bhc3N3b3JkX25vX21hdGNoJ10JCT0gJ1RoZSB0
d28gcGFzc3dvcmRzIGRvIG5vdCBtYXRjaC4nOw0KdGV4dHNbJ2Zvcm1zJ11bJ3Vz
ZXJuYW1lX3Rha2VuJ10JCT0gJ1RoaXMgdXNlcm5hbWUgaXMgYWxyZWFkeSBpbiB1
c2UuJzsNCnRleHRzWydmb3JtcyddWydpbnZhbGlkX2RvbWFpbiddCQk9ICdFbWFp
bCBhZGRyZXNzZW4gZnJvbSB0aGlzIGRvbWFpbiBhcmUgbm90IGFsbG93ZWQuIFBs
ZWFzZSB1c2UgYW5vdGhlciBlbWFpbGFkZHJlc3MuJzsNCnRleHRzWydmb3Jtcydd
WydlbWFpbF90YWtlbiddCQkJPSAnVGhpcyBlbWFpbC1hZGRyZXNzIGlzIGFscmVh
ZHkgaW4gdXNlLic7DQp0ZXh0c1snZm9ybXMnXVsnc2VsZWN0X2FsbF9yb3dzJ10J
CT0gJ1NlbGVjdCBhbGwgcm93cyc7DQp0ZXh0c1snZm9ybXMnXVsnc2VsZWN0X21l
c3NhZ2VzJ10JCT0gJ0NsaWNrIG9uIG9uZSBvciBtb3JlIG1lc3NhZ2VzIHRvIHNl
bGVjdCB0aGVtJzsNCnRleHRzWydmb3JtcyddWyd1c2VybmFtZSddCQkJCT0gJ1Vz
ZXJuYW1lJzsNCnRleHRzWydmb3JtcyddWydwYXNzd29yZCddCQkJCT0gJ1Bhc3N3
b3JkJzsNCnRleHRzWydmb3JtcyddWydzb2ZpbnVtbWVyX21pc21hdGNoJ10JPSAn
VGhpcyBudW1iZXIgZG9lcyBub3QgcGFzcyB0aGUgIjExLXRlc3QiLCBpbnZhbGlk
IHNvZmludW1iZXIuJzsNCnRleHRzWydmb3JtcyddWydsZW5ndGhfbm90XzknXQkJ
CT0gJ1RoaXMgZmllbGQgbXVzdCBjb250YWluIGV4YWN0bHkgOSBkaWdpdHMuJzsN
CnRleHRzWydmb3JtcyddWydzaG93X2FkdmFuY2VkX29wdGlvbnMnXQk9ICdTaG93
IGFkdmFuY2VkIG9wdGlvbnMnOw0KdGV4dHNbJ2Zvcm1zJ11bJ2hpZGVfYWR2YW5j
ZWRfb3B0aW9ucyddCT0gJ0hpZGUgYWR2YW5jZWQgb3B0aW9ucyc7DQp0ZXh0c1sn
Zm9ybXMnXVsna2V5d29yZF90b29fbG9uZyddCQk9ICdLZXl3b3JkIGAlc2AgZXhj
ZWVkcyB0aGUgNTAgY2hhcmFjdGVyIGxpbWl0JzsNCnRleHRzWydmb3JtcyddWydr
ZXl3b3Jkc19pbGxlZ2FsX2NoYXJhY3RlciddCT0gJ0tleXdvcmQgYCVzYCBjb250
YWlucyBpbGxlZ2FsIGNoYXJhY3RlcnMsIG91dHNpZGUgb2YgdGhlIGFsbG93ZWQg
YS16LCAwLTkgYW5kIC1fIGNoYXJhY3RlcnMnOw0KDQp0ZXh0c1snaW1hZ2V3aXph
cmQnXSA9IG5ldyBBcnJheSgpOw0KdGV4dHNbJ2ltYWdld2l6YXJkJ11bJ3NpemVz
X2Vycm9yJ10JCT0gJ2Vycm9yIDo6IG9yaWdpbmFsIHNpemVzIG9mIHNvdXJjZWZp
bGUgbm90IGZvdW5kJzsNCg0KdGV4dHNbJ25vcm1hbCddID0gbmV3IEFycmF5KCk7
DQp0ZXh0c1snbm9ybWFsJ11bJ2Rpc2FibGVkX29wdGlvbiddCQk9ICdZb3UgbWF5
IG5vdCBzZWxlY3QgdGhpcyBvcHRpb24uJzsNCnRleHRzWydub3JtYWwnXVsnbW9y
ZSddCQkJCQk9ICdNb3JlLi4uJzsNCnRleHRzWydub3JtYWwnXVsnc2VhcmNoX3dl
YmtpdCddCQk9ICdTZWFyY2ggd2l0aGluIHRoaXMgZm9ydW0uLi4nOw0KdGV4dHNb
J25vcm1hbCddWydiYWNrJ10JCQkJCT0gJ0JhY2snOw0KDQp0ZXh0c1sneG1saHR0
cCddID0gbmV3IEFycmF5KCk7DQp0ZXh0c1sneG1saHR0cCddWydjbG9zZSddCQkJ
CT0gJ0Nsb3NlJzsNCg0KdGV4dHNbJ2V4dHJhJ10gPSBuZXcgQXJyYXkoKTsNCnRl
eHRzWydleHRyYSddWydzZWFyY2hQb3B1cCddCQkJPSAnU2VhcmNoLi4uJzsNCnRl
eHRzWydleHRyYSddWydjbG9zZV9hbmRfc3VibWl0J10JCT0gJ0Nsb3NlICYgc3Vi
bWl0JzsNCnRleHRzWydleHRyYSddWydhY2Nlc3NrZXlfaW5kaWNhdG9yJ10JPSAn
KCVzKSc7DQp0ZXh0c1snZXh0cmEnXVsnY2xpY2tfdG9fZW5sYXJnZSddCQk9ICcg
LSBjbGljayB0byBlbmxhcmdlJzsNCnRleHRzWydleHRyYSddWydlbnRlcl9wYWdl
X251bWJlciddCQk9ICdQbGVhc2Ugc3BlY2lmeSBhIHBhZ2UgbnVtYmVyIGJldHdl
ZW4gMSBhbmQgJXMnOw0KdGV4dHNbJ2V4dHJhJ11bJ3BhZ2VfbnVtYmVyX2luY29y
cmVjdCddCT0gJ1lvdSBkaWRuXCd0IGVudGVyIGEgdmFsaWQgbnVtYmVyLic7DQp0
ZXh0c1snZXh0cmEnXVsnc2hvd19nYWxsZXJ5J10JCQk9ICdTaG93IGFsbCBpbWFn
ZXMgZnJvbSB0aGlzIHRvcGljJzsNCnRleHRzWydleHRyYSddWydzaG93X2dhbGxl
cnlfaGVhZGVyJ10JPSAnQWxsIGltYWdlcyBmcm9tIHRoaXMgdG9waWMnOw0KDQp0
ZXh0c1sndG9vbGJhciddID0gbmV3IEFycmF5KCk7DQp0ZXh0c1sndG9vbGJhcidd
WydlbnRlcl9pbWdfdXJsJ10JCT0gJ0VudGVyIGltYWdlIFVSTDonOw0KdGV4dHNb
J3Rvb2xiYXInXVsnZW50ZXJfdXJsJ10JCQk9ICdFbnRlciBVUkw6JzsNCnRleHRz
Wyd0b29sYmFyJ11bJ2VudGVyX3RpdGxlJ10JCT0gJ0VudGVyIG9wdGlvbmFsIHRp
dGxlOic7DQoNCnRleHRzWyd0b29sYmFyJ11bJ2hsaW5lJ10gPSAnJzsNCnRleHRz
Wyd0b29sYmFyJ11bJ2JvbGQnXSA9ICdCb2xkJzsNCnRleHRzWyd0b29sYmFyJ11b
J2l0YWxpYyddID0gJ0l0YWxpYyc7DQp0ZXh0c1sndG9vbGJhciddWyd1bmRlcmxp
bmUnXSA9ICdVbmRlcmxpbmUnOw0KdGV4dHNbJ3Rvb2xiYXInXVsnc3RyaWtlJ10g
PSAnU3RyaWtlIHRocnUnOw0KdGV4dHNbJ3Rvb2xiYXInXVsnc3VwJ10gPSAnU3Vw
ZXJzY3JpcHQnOw0KdGV4dHNbJ3Rvb2xiYXInXVsnc3ViJ10gPSAnU3Vic2NyaXB0
JzsNCnRleHRzWyd0b29sYmFyJ11bJ2FsaWduX2xlZnQnXSA9ICdBbGlnbiB0ZXh0
IHRvIHRoZSBsZWZ0JzsNCnRleHRzWyd0b29sYmFyJ11bJ2FsaWduX2NlbnRlcidd
ID0gJ0FsaWduIHRleHQgaW4gdGhlIGNlbnRlcic7DQp0ZXh0c1sndG9vbGJhcidd
WydhbGlnbl9yaWdodCddID0gJ0FsaWduIHRleHQgdG8gdGhlIHJpZ2h0JzsNCnRl
eHRzWyd0b29sYmFyJ11bJ2xpc3RfYnVsbGV0J10gPSAnQ3JlYXRlIGEgbGlzdCc7
DQp0ZXh0c1sndG9vbGJhciddWydsaXN0X251bSddID0gJ0NyZWF0ZSBhIG51bWJl
cmVkIGxpc3QnOw0KdGV4dHNbJ3Rvb2xiYXInXVsnY29sb3JfYmcnXSA9ICdDaGFu
Z2UgdGhlIGJhY2tncm91bmQtY29sb3InOw0KdGV4dHNbJ3Rvb2xiYXInXVsnY29s
b3JfZmcnXSA9ICdDaGFuZ2UgdGhlIHRleHQtY29sb3InOw0KdGV4dHNbJ3Rvb2xi
YXInXVsnbGluayddID0gJ0FkZCBhIGxpbmsnOw0KdGV4dHNbJ3Rvb2xiYXInXVsn
aW1hZ2UnXSA9ICdBZGQgYW4gaW1hZ2UnOw0KdGV4dHNbJ3Rvb2xiYXInXVsndGFi
bGUnXSA9ICdBZGQgYSB0YWJsZSc7DQp0ZXh0c1sndG9vbGJhciddWydociddID0g
J0FkZCBhIGhvcml6b250YWwgbGluZSc7DQp0ZXh0c1sndG9vbGJhciddWydtYXhp
bWl6ZSddID0gJ0luY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBpbnB1dGZpZWxkJzsN
CnRleHRzWyd0b29sYmFyJ11bJ2RvY3VtZW50bGlicmFyeSddID0gJ09wZW4gdGhl
IGRvY3VtZW50bGlicmFyeSc7DQoNCnRleHRzWydjYWxlbmRhciddID0gbmV3IEFy
cmF5KCk7DQp0ZXh0c1snY2FsZW5kYXInXVsnY2FsZW5kYXJldmVudCddID0gJ0Fw
cG9pbnRtZW50cyc7DQp0ZXh0c1snY2FsZW5kYXInXVsnY2FsZW5kYXJldmVudGFs
bGRheSddID0gJ0Z1bGwgZGF5IGV2ZW50cyc7DQp0ZXh0c1snY2FsZW5kYXInXVsn
dG9waWNzdGFydCddID0gJ1RvcGljc3RhcnRzJzsNCnRleHRzWydjYWxlbmRhcidd
Wyd0b3BpY2V2ZW50J10gPSAnVG9waWNzJzsNCnRleHRzWydjYWxlbmRhciddWydi
aXJ0aGRheSddID0gJ0JpcnRoZGF5cyc7DQoKLyogRGVmYXVsdCBnb29nbGUgYWQg
c2V0dGluZ3MgKi8KZ29vZ2xlX2FkX2NsaWVudCA9ICJwdWItMjIwMzMyNjcyMTM2
NjE5MiI7Cmdvb2dsZV9hZF93aWR0aCA9IDEyMDsKZ29vZ2xlX2FkX2hlaWdodCA9
IDYwMDsKZ29vZ2xlX2FkX2Zvcm1hdCA9ICIxMjB4NjAwX2FzIjsKZ29vZ2xlX2Fk
X3R5cGUgPSAidGV4dCI7Cmdvb2dsZV9hZF9jaGFubmVsID0iIjsKZ29vZ2xlX2Fk
X2ZvbnQgPSAnVGltZXMnOwpnb29nbGVfY29sb3JfYm9yZGVyID0gImNjY2NjYyI7
Cmdvb2dsZV9jb2xvcl9iZyA9ICJmZmZmZmYiOwpnb29nbGVfY29sb3JfbGluayA9
ICIwMDAwMDAiOwpnb29nbGVfY29sb3JfdXJsID0gIjY2NjY2NiI7Cmdvb2dsZV9j
b2xvcl90ZXh0ID0gIjMzMzMzMyI7Cgp2YXIgbWFwID0gbnVsbDsKdmFyIGdlb2Nv
ZGVyID0gbnVsbDsKdmFyIG1hcmtlciA9IG51bGw7CnZhciB4eUlucHV0ID0gbnVs
bDsKCnN3aXRjaChkb2N1bWVudC5kb21haW4pCnsKCWNhc2UgJ2Rldi5hZnJpY2Et
aW50ZXJhY3RpdmUubmV0JzoKCQl2YXIgZ29vZ2xlX21hcHNfYXBpX2tleSA9ICdB
QlFJQUFBQXByTkh6WHVXTFpGOEFDM2FyRjk0bUJTWExTUUwyWkNmZUh3NkRjWFRz
TzBsQjR2elBSU09hdEhScHFVOFdCNTcxOUQwb014NkpBUWdXUSc7CgkJYnJlYWs7
CgljYXNlICd3d3cub2ZmaWNlLnBhcnNlLm5sJzoKCWRlZmF1bHQ6CgkJdmFyIGdv
b2dsZV9tYXBzX2FwaV9rZXkgPSAnQUJRSUFBQUFwck5Ielh1V0xaRjhBQzNhckY5
NG1CUW9OTXJBX2ZmZjU4YzlOYkd2THc0QUZOQnlWUlMwbGVIUTBEODhLelFkUkMy
UFBydk1tdVRjTFEnOwp9CgovLyBhbHRlcm5hdGUgdGFibGUgcm93IGNvbG9yCmZ1
bmN0aW9uIGFsdGVybmF0ZVJvd1N0eWxlKCkKewoJdmFyIHJvd3MgPSBkb2N1bWVu
dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndHInKTsKCWZvciggdmFyIGkgPSAwOyBp
IDwgcm93cy5sZW5ndGg7IGkrKyApCgl7CgkJaWYoIGkgJSAyID09IDAgKQoJCQly
b3dzW2ldLmNsYXNzTmFtZSA9ICcgYWx0ZXJuYXRlJzsKCQllbHNlCgkJCXJvd3Nb
aV0uY2xhc3NOYW1lID0gJyc7Cgl9Cn0KCmZ1bmN0aW9uIHRvZ2dsZUdvb2dsZU1h
cHMoKQp7Cgl2YXIgcGlja2VyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3h5
X2Nvb3JkaW5hdGVfcGljaycpOwoKCWlmKHBpY2tlcikKCQlhZGRFdmVudChwaWNr
ZXIsICdjbGljaycsIF90b2dnbGVHb29nbGVNYXBzKTsKfQoKZnVuY3Rpb24gX3Rv
Z2dsZUdvb2dsZU1hcHMoKQp7Cgl2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2dvb2dsZS1tYXAtY29udGFpbmVyJyk7Cgl4eUlucHV0ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ3h5X2Nvb3JkaW5hdGUnKTsKCglqc2NzcygndG9n
Z2xlJywgZGl2LCAnaGlkZScpOwoJanNjc3MoJ3RvZ2dsZScsIHRoaXMsICdjb2xs
YXBzZScpOwoKCWlmKEdCcm93c2VySXNDb21wYXRpYmxlKCkgJiYgIWpzY3NzKCdj
aGVjaycsIGRpdiwgJ2hpZGUnKSkKCXsKCQlpZih4eUlucHV0LnZhbHVlID09ICcn
KQoJCQl2YXIgY2VudGVyID0gbmV3IEdMYXRMbmcoMC4yMTM2NzEsIDE2Ljk4NDg1
KTsKCQllbHNlCgkJewoJCQl2YXIgY29vcmRpbmF0ZXMgPSB4eUlucHV0LnZhbHVl
LnNwbGl0KCcsICcpOwoJCQl2YXIgY2VudGVyID0gbmV3IEdMYXRMbmcoY29vcmRp
bmF0ZXNbMF0sIGNvb3JkaW5hdGVzWzFdKTsKCQl9CgoJCW1hcCA9IG5ldyBHTWFw
Mihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ29vZ2xlLW1hcCcpKTsKCQltYXAu
YWRkQ29udHJvbChuZXcgR0xhcmdlTWFwQ29udHJvbCgpKTsKCQltYXAuYWRkQ29u
dHJvbChuZXcgR01hcFR5cGVDb250cm9sKCkpOwoJCW1hcC5zZXRDZW50ZXIoY2Vu
dGVyLCAzKTsKCQltYXJrZXIgPSBuZXcgR01hcmtlcihjZW50ZXIsIHtkcmFnZ2Fi
bGU6IHRydWV9KTsKCQltYXAuYWRkT3ZlcmxheShtYXJrZXIpOwoJCXh5SW5wdXQu
dmFsdWUgPSBjZW50ZXIubGF0KCkgKyAnLCAnICsgY2VudGVyLmxuZygpOwoJCWdl
b2NvZGVyID0gbmV3IEdDbGllbnRHZW9jb2RlcigpOwoKCQlHRXZlbnQuYWRkTGlz
dGVuZXIobWFya2VyLCAnZHJhZ2VuZCcsIGZ1bmN0aW9uKCkgewoJCQl2YXIgcG9p
bnQgPSBtYXJrZXIuZ2V0UG9pbnQoKTsKCQkJbWFwLnBhblRvKHBvaW50KTsKCQkJ
eHlJbnB1dC52YWx1ZSA9IHBvaW50LmxhdCgpICsgJywgJyArIHBvaW50LmxuZygp
OwoJCX0pOwoKCQlHRXZlbnQuYWRkTGlzdGVuZXIobWFwLCAnbW92ZWVuZCcsIGZ1
bmN0aW9uKCkgewoJCQljZW50ZXIgPSBtYXAuZ2V0Q2VudGVyKCk7CgkJCW1hcmtl
ci5zZXRQb2ludChjZW50ZXIpOwoJCQl4eUlucHV0LnZhbHVlID0gY2VudGVyLmxh
dCgpICsgJywgJyArIGNlbnRlci5sbmcoKTsKCQl9KTsKCX0KfTsKCmZ1bmN0aW9u
IHNob3dBZGRyZXNzKCkKewoJdmFyIGFkZHJlc3MgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgneHlfY29vcmRpbmF0ZV9hZGRyZXNzJykudmFsdWU7CgoJaWYgKGdl
b2NvZGVyKSB7CgkJZ2VvY29kZXIuZ2V0TGF0TG5nKAoJCQlhZGRyZXNzLAoJCQlm
dW5jdGlvbihwb2ludCkgewoJCQkJaWYgKCFwb2ludCkKCQkJCQlhbGVydChhZGRy
ZXNzICsgIiBuaWV0IGdldm9uZGVuIVxuXG5Qcm9iZWVyIHNwZWNpZmlla2VyIHRl
IHppam4gKGFkcmVzLCBodWlzbnVtbWVyLCBwbGFhdHMsIGxhbmQpLiIpOwoJCQkJ
ZWxzZQoJCQkJewoJCQkJCW1hcC5zZXRDZW50ZXIocG9pbnQsIDEzKTsKCQkJCQlt
YXJrZXIuc2V0UG9pbnQoY2VudGVyKTsKCQkJCQl4eUlucHV0LnZhbHVlID0gcG9p
bnQubGF0KCkgKyAnLCAnICsgcG9pbnQubG5nKCk7CgkJCQl9CgkJCX0KCQkpOwoJ
fQp9OwoKZnVuY3Rpb24gZG9jbGliSW50ZXJhY3Rpb25BZnJpY2EoKQp7CglpZiAo
Ym9hcmRfYWN0aW9uID09ICdlZGl0X2RvY3VtZW50JykKCQlhZGRFdmVudFRvVGFy
Z2V0cyhudWxsLCAnY2xpY2snLCB0b2dnbGVGbGFzaEJhbm5lcnMsICdpbWdbbG9u
Z2Rlc2NdJyk7Cn0KCmZ1bmN0aW9uIHRvZ2dsZUZsYXNoQmFubmVycygpCnsKCXZh
ciBiYW5uZXJzID0gbmV3IERPTVF1ZXJ5KCdkaXYjc2lkZWJhciAuQlNGbGFzaEFk
Jyk7CgoJaWYoYmFubmVycy5sZW5ndGggPT0gMCkKCQlyZXR1cm47CgoJZm9yKHZh
ciBpID0gMCwgYmFubmVyOyhiYW5uZXI9YmFubmVycy5nZXQoaSkpO2krKykKCQlp
ZihiYW5uZXIuc3R5bGUudmlzaWJpbGl0eSAhPSAnaGlkZGVuJykKCQkJYmFubmVy
LnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJzsKCQllbHNlCgkJCWJhbm5lci5z
dHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnOwp9CgpmdW5jdGlvbiBhdHRhY2hL
ZXl3b3JkU2VsZWN0b3IoKQp7CglpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
a2V5d29yZHNlbGVjdG9yJykpCgkJYWRkRXZlbnRUb1RhcmdldHMobnVsbCwgJ2No
YW5nZScsIGFkZEtleXdvcmQsICcja2V5d29yZHNlbGVjdG9yJyk7CgoJdmFyIGtl
eXdvcmRpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrZXl3b3Jkcycp
OwoKCWlmIChrZXl3b3JkaW5wdXQgJiYga2V5d29yZGlucHV0LnRhZ05hbWUgIT0g
J01FVEEnKQoJewogCQlpZiAodHlwZW9mIGJvYXJkX3VzZXJfaXNfcmVkYWN0aWUg
PT0gJ3VuZGVmaW5lZCcgfHwgIWJvYXJkX3VzZXJfaXNfcmVkYWN0aWUpCgkJCWtl
eXdvcmRpbnB1dC5yZWFkT25seSA9IHRydWU7CgoJCWtleXdvcmRpbnB1dC5wYXJl
bnROb2RlLm5leHRTaWJsaW5nLm5leHRTaWJsaW5nLmNsYXNzTmFtZSA9ICdrZXl3
b3Jkc2VsZWN0b3InOwoJfQp9CgpmdW5jdGlvbiBtYWtlQmxvY2tzRWRpdGFibGUo
dGFyZ2V0cykKewoJdmFyIGVkaXRMaW5rID0gJ3VsI2FkbWluLWxpbmtzIGxpLmVk
aXQtYmxvY2tzIGEnOwoJYWRkRXZlbnRUb1RhcmdldHModGFyZ2V0cywgJ2NsaWNr
JywgX21ha2VCbG9ja3NFZGl0YWJsZSwgZWRpdExpbmspOwoKCWlmKGdldENvb2tp
ZSgnZWRpdF9ibG9ja3MnKSA9PSAnMScgJiYgbmV3IERPTVF1ZXJ5KGVkaXRMaW5r
KS5nZXQoMCkpCgkJX21ha2VCbG9ja3NFZGl0YWJsZSgpOwp9CgpmdW5jdGlvbiBf
bWFrZUJsb2Nrc0VkaXRhYmxlKGUpCnsKCWlmKGUpCgkJRXZlbnQuc3RvcChlKTsK
Cgl2YXIgYmxvY2tzID0gbmV3IERPTVF1ZXJ5KCdkaXYuYmxvY2tbaWRdJyk7Cgl2
YXIgYmxvY2ssIGJsb2NrSWQsIGVkaXRMaW5rOwoJdmFyIGVkaXRhYmxlID0gdHJ1
ZTsKCglqc2NzcygndG9nZ2xlJywgbmV3IERPTVF1ZXJ5KCd1bCNhZG1pbi1saW5r
cyBsaS5lZGl0LWJsb2NrcyBhJykuZ2V0KDApLCAnYWN0aXZlJyk7CgoJZm9yKHZh
ciBpID0gMCwgYmxvY2s7IChibG9jaz1ibG9ja3MuZ2V0KGkpKTsgaSsrKQoJewoJ
CWlmKGVkaXRMaW5rID0gbmV3IERPTVF1ZXJ5KCdhW3JlbD1lZGl0XScsIGJsb2Nr
KS5nZXQoMCkpCgkJewoJCQllZGl0TGluay5wYXJlbnROb2RlLnJlbW92ZUNoaWxk
KGVkaXRMaW5rKTsKCQkJZWRpdGFibGUgPSBmYWxzZTsKCQl9CgkJZWxzZQoJCXsK
CQkJYmxvY2tJZCA9IGJsb2NrLmlkLm1hdGNoKC9ibG9ja1wtKFswLTldKykvaSlb
MV07CgkJCWVkaXRMaW5rID0gY3JlYXRlRE9NTm9kZSgnYScsIHsnaHJlZicgOiBi
b2FyZF9zY3JpcHRfdXJsICsgJy8uLi9hZG1pbi9hZG1pbi5waHA/YWN0aW9uPXVw
ZGF0ZV9ibG9jayZkYXRhW2Jsb2NrX2lkXT0nICsgYmxvY2tJZCwgJ3JlbCcgOiAn
ZWRpdCcsICd0aXRsZScgOiAnQmxvayBhYW5wYXNzZW4nfSwgWydCbG9rIGFhbnBh
c3NlbiddKTsKCQkJYmxvY2suYXBwZW5kQ2hpbGQoZWRpdExpbmspOwoJCX0KCX0K
CglpZihlZGl0YWJsZSkKCQlzZXRDb29raWUoJ2VkaXRfYmxvY2tzJywgJzEnKQoJ
ZWxzZQoJCXNldENvb2tpZSgnZWRpdF9ibG9ja3MnLCAnMCcpCn0KCmZ1bmN0aW9u
IHJhdGVJdGVtKCkKewoJaWYgKGJvYXJkX2FjdGlvbiA9PSAnY3JlYXRlX3VzZXIn
IHx8IGJvYXJkX2FjdGlvbiA9PSAnZWRpdF91c2VyJykKCQlhZGRFdmVudFRvVGFy
Z2V0cyhudWxsLCAnY2xpY2snLCBfc3RvcmVDbGljaywgJ29sLnN0YXItcmF0aW5n
IGEnKTsKCglhZGRFdmVudFRvVGFyZ2V0cyhudWxsLCAnY2xpY2snLCBfcmF0ZUl0
ZW0sICd1bC5zdGFyLXJhdGluZyBhJyk7Cn0KCmZ1bmN0aW9uIF9zdG9yZUNsaWNr
KGUpCnsKCXZhciBpbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMu
cGFyZW50Tm9kZS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZSgnZm9yJykpOwoJdmFy
IGN1cnJlbnRSYXRpbmcgPSB0aGlzLnBhcmVudE5vZGUucGFyZW50Tm9kZS5maXJz
dENoaWxkOwoKCWlucHV0LnZhbHVlID0gdGhpcy5pbm5lckhUTUw7CgljdXJyZW50
UmF0aW5nLnN0eWxlLndpZHRoPSAyMCAqIHBhcnNlSW50KHRoaXMuaW5uZXJIVE1M
KSArICIlIjsKfQoKZnVuY3Rpb24gX3JhdGVJdGVtKGUpCnsKCXZhciByYXRpbmcg
PSB0aGlzLmhyZWY7Cgl2YXIgYmxvY2sgPSB0aGlzOwoKCXJhdGluZyA9IHJhdGlu
Zy5zcGxpdCgnLycpLnJldmVyc2UoKTsKCglpZihyYXRpbmdbMl0pCgl7CgkJdmFy
IHJlcXVlc3QgPSAnZGF0YVtyZWFjdGlkXT0nICsgZ2V0Q29va2llKCdSZWFjdElE
JykgKyAnJmRhdGFbcmF0ZV09JyArIHJhdGluZ1swXSArICcmZGF0YVtpZF09JyAr
IHJhdGluZ1sxXSArICcmZGF0YVt0eXBlXT0nICsgcmF0aW5nWzJdOwoJCWh0dHBy
ZXFfc3RyaW5nKHJlcXVlc3QsIG51bGwsIGJvYXJkX3NjcmlwdF91cmwgKyAnL3Jh
dGUnLCBmYWxzZSk7CgoJCXdoaWxlKCFibG9jay5pZCAmJiBibG9jay50YWdOYW1l
ICE9ICdkaXYnICYmIGJsb2NrLnRhZ05hbWUgIT0gJ2h0bWwnKQoJCQlibG9jayA9
IGJsb2NrLnBhcmVudE5vZGU7CgoJCW5ldyBBamF4LlJlcXVlc3QoYm9hcmRfc2Ny
aXB0X3VybCArICcvZ2V0X2Jsb2NrLycrYmxvY2suaWQuc3BsaXQoJy0nKVsxXSwg
ewoJCQlwb3N0Qm9keSA6ICdkYXRhW3JhdGluZ190eXBlXT0nICsgcmF0aW5nWzJd
ICsgJyZkYXRhW3JhdGluZ19pZF09JyArIHJhdGluZ1sxXSwKCQkJb25Db21wbGV0
ZSA6IGZ1bmN0aW9uKHRyYW5zcG9ydCkKCQkJewoJCQkJYmxvY2suaW5uZXJIVE1M
ID0gdHJhbnNwb3J0LnJlc3BvbnNlVGV4dDsKCQkJCV9pbml0KGV2ZW50cywgYmxv
Y2spOwoJCQl9CgkJfSk7CgoJCWUucHJldmVudERlZmF1bHQoKTsKCX0KfQoKZnVu
Y3Rpb24gcmVsb2NhdGVCbG9ja3MoKQp7Cgl2YXIgY29udGFpbmVyID0gbmV3IERP
TVF1ZXJ5KCdkaXYjYmxvY2stY29udGFpbmVyJykuZ2V0KDApOwoJdmFyIGJsb2Nr
cyA9IG5ldyBET01RdWVyeSgnLnNob3ctYWZ0ZXItZmlyc3RtZXNzYWdlJyk7Cgl2
YXIgY2xvbmU7CgoJaWYoY29udGFpbmVyICYmIGJsb2Nrcy5sZW5ndGggPiAwKQoJ
ewoJCWZvcih2YXIgaT0wLCBibG9jazsgKGJsb2NrID0gYmxvY2tzLmdldChpKSk7
IGkrKykKCQl7CgkJCWNsb25lID0gYmxvY2suY2xvbmVOb2RlKHRydWUpOwoJCQlj
b250YWluZXIuYXBwZW5kQ2hpbGQoY2xvbmUpOwoJCQlibG9jay5wYXJlbnROb2Rl
LnJlbW92ZUNoaWxkKGJsb2NrKTsKCQl9Cgl9Cn0KCmZ1bmN0aW9uIGZpeEJyb3dz
ZXJJc3N1ZXNBZnJpY2EoKQp7CglhZGRDbGFzc1RvVGFyZ2V0cygndWwjZXh0cmEt
bmF2aWdhdGlvbiBsaTpsYXN0LWNoaWxkJywgJ2xhc3QtY2hpbGQnKTsKCWFkZENs
YXNzVG9UYXJnZXRzKCdkaXYuYmxvY2sgYVtyZWw9Im1vcmUiXScsICdtb3JlJyk7
CglhZGRDbGFzc1RvVGFyZ2V0cygnZGl2I2FjdGlvbi1oZWFkZXIgb2wgbGk6Zmly
c3QtY2hpbGQgKyBsaScsICdhZGplY2VudCcpOwoJYWRkQ2xhc3NUb1RhcmdldHMo
J2Rpdi5ibG9jay10eXBlLWFyY2hpdmUgbGk6Zmlyc3QtY2hpbGQnLCAnZmlyc3Qt
Y2hpbGQnKTsKCWFkZENsYXNzVG9UYXJnZXRzKCdkaXYuYmxvY2sudHdvLWNvbHVt
bnMubm8tcGFkZGluZycsICdibG9jay10d28tY29sdW1ucy1uby1wYWRkaW5nJyk7
CglhZGRDbGFzc1RvVGFyZ2V0cygnZGl2LmJsb2NrLm5vLXBhZGRpbmcnLCAnYmxv
Y2stbm8tcGFkZGluZycpOwp9CgpmdW5jdGlvbiBhbGxFeHRlcm5hbExpbmtzSW5Q
b3B1cCh0YXJnZXRzKQp7Cgl2YXIgaXRlbXMgPSBnZXRUYXJnZXRzKHRhcmdldHMs
ICdhW2hyZWZdJyksIGEgPSBjcmVhdGVET01Ob2RlKCdhJywgeyJocmVmIiA6IGJv
YXJkX3NjcmlwdF91cmx9LCBbXSk7CgoJZm9yKHZhciBpPTAsIGl0ZW07IChpdGVt
ID0gaXRlbXMuZ2V0KGkpKTsgaSsrKQoJCWlmIChpdGVtLmhvc3RuYW1lICE9ICcn
ICYmIGEuaG9zdG5hbWUgIT0gaXRlbS5ob3N0bmFtZSkKCQkJaXRlbS5vbmNsaWNr
ID0gZnVuY3Rpb24oKSB7IHdpbmRvdy5vcGVuKHRoaXMuaHJlZiwgJ3BvcHVwZXh0
ZXJuYWwnKTsgcmV0dXJuIGZhbHNlOyB9Owp9OwoKLyoKCVJlbW92ZSByZXBvcnRl
ciBmaWVsZHMgaWYgdXNlciAhPSByZXBvcnRlcgoqLwp2YXIgYWN0dWFsdmFsaWRh
dGVGb3JtID0gdmFsaWRhdGVGb3JtOwp2YXIgdmFsaWRhdGVGb3JtID0gZnVuY3Rp
b24gKGZvcm0pCnsKCXZhciBpc19yZXBvcnRlciwgYWRkaXRpb25hbF9maWVsZHM7
CgoJaWYgKGJvYXJkX2FjdGlvbiA9PSAnY3JlYXRlX3VzZXInIHx8IGJvYXJkX2Fj
dGlvbiA9PSAnZWRpdF91c2VyJykKCXsKCQlpc19yZXBvcnRlciA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdpc19yZXBvcnRlcicpOwoKCQlpZiAoaXNfcmVwb3J0
ZXIgJiYgIWlzX3JlcG9ydGVyLmNoZWNrZWQpCgkJewoJCQlhZGRpdGlvbmFsX2Zp
ZWxkcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXBvcnRlci1maWVsZHMn
KTsKCQkJYWRkaXRpb25hbF9maWVsZHMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChh
ZGRpdGlvbmFsX2ZpZWxkcyk7CgkJCWlzX3JlcG9ydGVyLnBhcmVudE5vZGUucmVt
b3ZlQ2hpbGQoaXNfcmVwb3J0ZXIpOwoJCX0KCX0KCglyZXR1cm4gYWN0dWFsdmFs
aWRhdGVGb3JtKGZvcm0pOwp9CgpmdW5jdGlvbiByZXBvcnRlclJlZ2lzdHJhdGlv
bigpCnsKCXZhciBpc19yZXBvcnRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdpc19yZXBvcnRlcicpOwoKCWlmIChib2FyZF9hY3Rpb24gIT0gJ2NyZWF0ZV91
c2VyJyB8fCAhaXNfcmVwb3J0ZXIgfHwgIWlzX3JlcG9ydGVyLmNoZWNrZWQpCgkJ
cmV0dXJuIGZhbHNlOwoKCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXBvcnRl
ci1maWVsZHMnKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKCgl2YXIgcmF0aW5n
cyA9IG5ldyBET01RdWVyeSgnZmllbGRzZXQjcmVwb3J0ZXItZmllbGRzIG9sLnN0
YXItcmF0aW5nJyk7CgoJZm9yICh2YXIgaT0wLCBpdGVtOyAoaXRlbT1yYXRpbmdz
LmdldChpKSk7IGkrKykKCQlpZiAodHlwZW9mIGl0ZW0ubmV4dFNpYmxpbmcudmFs
dWUgIT0gJ3VuZGVmaW5lZCcpCgkJCWl0ZW0uZmlyc3RDaGlsZC5zdHlsZS53aWR0
aCA9IDIwICogaXRlbS5uZXh0U2libGluZy52YWx1ZSArJyUnOwp9Ci8qICBQcm90
b3R5cGUgSmF2YVNjcmlwdCBmcmFtZXdvcmssIHZlcnNpb24gMS40LjAKICogIChj
KSAyMDA1IFNhbSBTdGVwaGVuc29uIDxzYW1AY29uaW8ubmV0PgogKgogKiAgVEhJ
UyBGSUxFIElTIEFVVE9NQVRJQ0FMTFkgR0VORVJBVEVELiBXaGVuIHNlbmRpbmcg
cGF0Y2hlcywgcGxlYXNlIGRpZmYKICogIGFnYWluc3QgdGhlIHNvdXJjZSB0cmVl
LCBhdmFpbGFibGUgZnJvbSB0aGUgUHJvdG90eXBlIGRhcmNzIHJlcG9zaXRvcnku
CiAqCiAqICBQcm90b3R5cGUgaXMgZnJlZWx5IGRpc3RyaWJ1dGFibGUgdW5kZXIg
dGhlIHRlcm1zIG9mIGFuIE1JVC1zdHlsZSBsaWNlbnNlLgogKgogKiAgRm9yIGRl
dGFpbHMsIHNlZSB0aGUgUHJvdG90eXBlIHdlYiBzaXRlOiBodHRwOi8vcHJvdG90
eXBlLmNvbmlvLm5ldC8KICoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
Cgp2YXIgUHJvdG90eXBlID0gewogIFZlcnNpb246ICcxLjQuMCcsCiAgU2NyaXB0
RnJhZ21lbnQ6ICcoPzo8c2NyaXB0Lio/PikoKFxufFxyfC4pKj8pKD86PFwvc2Ny
aXB0PiknLAoKICBlbXB0eUZ1bmN0aW9uOiBmdW5jdGlvbigpIHt9LAogIEs6IGZ1
bmN0aW9uKHgpIHtyZXR1cm4geH0KfQoKdmFyIENsYXNzID0gewogIGNyZWF0ZTog
ZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIHRoaXMu
aW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgfQogIH0KfQoK
dmFyIEFic3RyYWN0ID0gbmV3IE9iamVjdCgpOwoKT2JqZWN0LmV4dGVuZCA9IGZ1
bmN0aW9uKGRlc3RpbmF0aW9uLCBzb3VyY2UpIHsKICBmb3IgKHByb3BlcnR5IGlu
IHNvdXJjZSkgewogICAgZGVzdGluYXRpb25bcHJvcGVydHldID0gc291cmNlW3By
b3BlcnR5XTsKICB9CiAgcmV0dXJuIGRlc3RpbmF0aW9uOwp9CgpPYmplY3QuaW5z
cGVjdCA9IGZ1bmN0aW9uKG9iamVjdCkgewogIHRyeSB7CiAgICBpZiAob2JqZWN0
ID09IHVuZGVmaW5lZCkgcmV0dXJuICd1bmRlZmluZWQnOwogICAgaWYgKG9iamVj
dCA9PSBudWxsKSByZXR1cm4gJ251bGwnOwogICAgcmV0dXJuIG9iamVjdC5pbnNw
ZWN0ID8gb2JqZWN0Lmluc3BlY3QoKSA6IG9iamVjdC50b1N0cmluZygpOwogIH0g
Y2F0Y2ggKGUpIHsKICAgIGlmIChlIGluc3RhbmNlb2YgUmFuZ2VFcnJvcikgcmV0
dXJuICcuLi4nOwogICAgdGhyb3cgZTsKICB9Cn0KCkZ1bmN0aW9uLnByb3RvdHlw
ZS5iaW5kID0gZnVuY3Rpb24oKSB7CiAgdmFyIF9fbWV0aG9kID0gdGhpcywgYXJn
cyA9ICRBKGFyZ3VtZW50cyksIG9iamVjdCA9IGFyZ3Muc2hpZnQoKTsKICByZXR1
cm4gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gX19tZXRob2QuYXBwbHkob2JqZWN0
LCBhcmdzLmNvbmNhdCgkQShhcmd1bWVudHMpKSk7CiAgfQp9CgpGdW5jdGlvbi5w
cm90b3R5cGUuYmluZEFzRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uKG9iamVjdCkg
ewogIHZhciBfX21ldGhvZCA9IHRoaXM7CiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50
KSB7CiAgICByZXR1cm4gX19tZXRob2QuY2FsbChvYmplY3QsIGV2ZW50IHx8IHdp
bmRvdy5ldmVudCk7CiAgfQp9CgpPYmplY3QuZXh0ZW5kKE51bWJlci5wcm90b3R5
cGUsIHsKICB0b0NvbG9yUGFydDogZnVuY3Rpb24oKSB7CiAgICB2YXIgZGlnaXRz
ID0gdGhpcy50b1N0cmluZygxNik7CiAgICBpZiAodGhpcyA8IDE2KSByZXR1cm4g
JzAnICsgZGlnaXRzOwogICAgcmV0dXJuIGRpZ2l0czsKICB9LAoKICBzdWNjOiBm
dW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzICsgMTsKICB9LAoKICB0aW1lczog
ZnVuY3Rpb24oaXRlcmF0b3IpIHsKICAgICRSKDAsIHRoaXMsIHRydWUpLmVhY2go
aXRlcmF0b3IpOwogICAgcmV0dXJuIHRoaXM7CiAgfQp9KTsKCnZhciBUcnkgPSB7
CiAgdGhlc2U6IGZ1bmN0aW9uKCkgewogICAgdmFyIHJldHVyblZhbHVlOwoKICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAg
ICAgIHZhciBsYW1iZGEgPSBhcmd1bWVudHNbaV07CiAgICAgIHRyeSB7CiAgICAg
ICAgcmV0dXJuVmFsdWUgPSBsYW1iZGEoKTsKICAgICAgICBicmVhazsKICAgICAg
fSBjYXRjaCAoZSkge30KICAgIH0KCiAgICByZXR1cm4gcmV0dXJuVmFsdWU7CiAg
fQp9CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCnZhciBQZXJpb2Rp
Y2FsRXhlY3V0ZXIgPSBDbGFzcy5jcmVhdGUoKTsKUGVyaW9kaWNhbEV4ZWN1dGVy
LnByb3RvdHlwZSA9IHsKICBpbml0aWFsaXplOiBmdW5jdGlvbihjYWxsYmFjaywg
ZnJlcXVlbmN5KSB7CiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7CiAgICB0
aGlzLmZyZXF1ZW5jeSA9IGZyZXF1ZW5jeTsKICAgIHRoaXMuY3VycmVudGx5RXhl
Y3V0aW5nID0gZmFsc2U7CgogICAgdGhpcy5yZWdpc3RlckNhbGxiYWNrKCk7CiAg
fSwKCiAgcmVnaXN0ZXJDYWxsYmFjazogZnVuY3Rpb24oKSB7CiAgICBzZXRJbnRl
cnZhbCh0aGlzLm9uVGltZXJFdmVudC5iaW5kKHRoaXMpLCB0aGlzLmZyZXF1ZW5j
eSAqIDEwMDApOwogIH0sCgogIG9uVGltZXJFdmVudDogZnVuY3Rpb24oKSB7CiAg
ICBpZiAoIXRoaXMuY3VycmVudGx5RXhlY3V0aW5nKSB7CiAgICAgIHRyeSB7CiAg
ICAgICAgdGhpcy5jdXJyZW50bHlFeGVjdXRpbmcgPSB0cnVlOwogICAgICAgIHRo
aXMuY2FsbGJhY2soKTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICB0aGlzLmN1
cnJlbnRseUV4ZWN1dGluZyA9IGZhbHNlOwogICAgICB9CiAgICB9CiAgfQp9Cgov
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCmZ1bmN0aW9uICQoKSB7CiAg
dmFyIGVsZW1lbnRzID0gbmV3IEFycmF5KCk7CgogIGZvciAodmFyIGkgPSAwOyBp
IDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICB2YXIgZWxlbWVudCA9IGFy
Z3VtZW50c1tpXTsKICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnc3RyaW5nJykK
ICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnQp
OwoKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpCiAgICAgIHJldHVybiBl
bGVtZW50OwoKICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7CiAgfQoKICByZXR1
cm4gZWxlbWVudHM7Cn0KT2JqZWN0LmV4dGVuZChTdHJpbmcucHJvdG90eXBlLCB7
CiAgc3RyaXBUYWdzOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLnJlcGxh
Y2UoLzxcLz9bXj5dKz4vZ2ksICcnKTsKICB9LAoKICBzdHJpcFNjcmlwdHM6IGZ1
bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXMucmVwbGFjZShuZXcgUmVnRXhwKFBy
b3RvdHlwZS5TY3JpcHRGcmFnbWVudCwgJ2ltZycpLCAnJyk7CiAgfSwKCiAgZXh0
cmFjdFNjcmlwdHM6IGZ1bmN0aW9uKCkgewogICAgdmFyIG1hdGNoQWxsID0gbmV3
IFJlZ0V4cChQcm90b3R5cGUuU2NyaXB0RnJhZ21lbnQsICdpbWcnKTsKICAgIHZh
ciBtYXRjaE9uZSA9IG5ldyBSZWdFeHAoUHJvdG90eXBlLlNjcmlwdEZyYWdtZW50
LCAnaW0nKTsKICAgIHJldHVybiAodGhpcy5tYXRjaChtYXRjaEFsbCkgfHwgW10p
Lm1hcChmdW5jdGlvbihzY3JpcHRUYWcpIHsKICAgICAgcmV0dXJuIChzY3JpcHRU
YWcubWF0Y2gobWF0Y2hPbmUpIHx8IFsnJywgJyddKVsxXTsKICAgIH0pOwogIH0s
CgogIGV2YWxTY3JpcHRzOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzLmV4
dHJhY3RTY3JpcHRzKCkubWFwKGV2YWwpOwogIH0sCgogIGVzY2FwZUhUTUw6IGZ1
bmN0aW9uKCkgewogICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2RpdicpOwogICAgdmFyIHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0
aGlzKTsKICAgIGRpdi5hcHBlbmRDaGlsZCh0ZXh0KTsKICAgIHJldHVybiBkaXYu
aW5uZXJIVE1MOwogIH0sCgogIHVuZXNjYXBlSFRNTDogZnVuY3Rpb24oKSB7CiAg
ICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICBk
aXYuaW5uZXJIVE1MID0gdGhpcy5zdHJpcFRhZ3MoKTsKICAgIHJldHVybiBkaXYu
Y2hpbGROb2Rlc1swXSA/IGRpdi5jaGlsZE5vZGVzWzBdLm5vZGVWYWx1ZSA6ICcn
OwogIH0sCgogIHRvUXVlcnlQYXJhbXM6IGZ1bmN0aW9uKCkgewogICAgdmFyIHBh
aXJzID0gdGhpcy5tYXRjaCgvXlw/PyguKikkLylbMV0uc3BsaXQoJyYnKTsKICAg
IHJldHVybiBwYWlycy5pbmplY3Qoe30sIGZ1bmN0aW9uKHBhcmFtcywgcGFpclN0
cmluZykgewogICAgICB2YXIgcGFpciA9IHBhaXJTdHJpbmcuc3BsaXQoJz0nKTsK
ICAgICAgcGFyYW1zW3BhaXJbMF1dID0gcGFpclsxXTsKICAgICAgcmV0dXJuIHBh
cmFtczsKICAgIH0pOwogIH0sCgogIHRvQXJyYXk6IGZ1bmN0aW9uKCkgewogICAg
cmV0dXJuIHRoaXMuc3BsaXQoJycpOwogIH0sCgogIGNhbWVsaXplOiBmdW5jdGlv
bigpIHsKICAgIHZhciBvU3RyaW5nTGlzdCA9IHRoaXMuc3BsaXQoJy0nKTsKICAg
IGlmIChvU3RyaW5nTGlzdC5sZW5ndGggPT0gMSkgcmV0dXJuIG9TdHJpbmdMaXN0
WzBdOwoKICAgIHZhciBjYW1lbGl6ZWRTdHJpbmcgPSB0aGlzLmluZGV4T2YoJy0n
KSA9PSAwCiAgICAgID8gb1N0cmluZ0xpc3RbMF0uY2hhckF0KDApLnRvVXBwZXJD
YXNlKCkgKyBvU3RyaW5nTGlzdFswXS5zdWJzdHJpbmcoMSkKICAgICAgOiBvU3Ry
aW5nTGlzdFswXTsKCiAgICBmb3IgKHZhciBpID0gMSwgbGVuID0gb1N0cmluZ0xp
c3QubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgdmFyIHMgPSBvU3RyaW5n
TGlzdFtpXTsKICAgICAgY2FtZWxpemVkU3RyaW5nICs9IHMuY2hhckF0KDApLnRv
VXBwZXJDYXNlKCkgKyBzLnN1YnN0cmluZygxKTsKICAgIH0KCiAgICByZXR1cm4g
Y2FtZWxpemVkU3RyaW5nOwogIH0sCgogIGluc3BlY3Q6IGZ1bmN0aW9uKCkgewog
ICAgcmV0dXJuICInIiArIHRoaXMucmVwbGFjZSgnXFwnLCAnXFxcXCcpLnJlcGxh
Y2UoIiciLCAnXFxcJycpICsgIiciOwogIH0KfSk7CgpTdHJpbmcucHJvdG90eXBl
LnBhcnNlUXVlcnkgPSBTdHJpbmcucHJvdG90eXBlLnRvUXVlcnlQYXJhbXM7Cgp2
YXIgJGJyZWFrICAgID0gbmV3IE9iamVjdCgpOwp2YXIgJGNvbnRpbnVlID0gbmV3
IE9iamVjdCgpOwoKdmFyIEVudW1lcmFibGUgPSB7CiAgZWFjaDogZnVuY3Rpb24o
aXRlcmF0b3IpIHsKICAgIHZhciBpbmRleCA9IDA7CiAgICB0cnkgewogICAgICB0
aGlzLl9lYWNoKGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgdHJ5IHsKICAgICAg
ICAgIGl0ZXJhdG9yKHZhbHVlLCBpbmRleCsrKTsKICAgICAgICB9IGNhdGNoIChl
KSB7CiAgICAgICAgICBpZiAoZSAhPSAkY29udGludWUpIHRocm93IGU7CiAgICAg
ICAgfQogICAgICB9KTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgaWYgKGUgIT0g
JGJyZWFrKSB0aHJvdyBlOwogICAgfQogIH0sCgogIGFsbDogZnVuY3Rpb24oaXRl
cmF0b3IpIHsKICAgIHZhciByZXN1bHQgPSB0cnVlOwogICAgdGhpcy5lYWNoKGZ1
bmN0aW9uKHZhbHVlLCBpbmRleCkgewogICAgICByZXN1bHQgPSByZXN1bHQgJiYg
ISEoaXRlcmF0b3IgfHwgUHJvdG90eXBlLkspKHZhbHVlLCBpbmRleCk7CiAgICAg
IGlmICghcmVzdWx0KSB0aHJvdyAkYnJlYWs7CiAgICB9KTsKICAgIHJldHVybiBy
ZXN1bHQ7CiAgfSwKCiAgYW55OiBmdW5jdGlvbihpdGVyYXRvcikgewogICAgdmFy
IHJlc3VsdCA9IHRydWU7CiAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUsIGlu
ZGV4KSB7CiAgICAgIGlmIChyZXN1bHQgPSAhIShpdGVyYXRvciB8fCBQcm90b3R5
cGUuSykodmFsdWUsIGluZGV4KSkKICAgICAgICB0aHJvdyAkYnJlYWs7CiAgICB9
KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfSwKCiAgY29sbGVjdDogZnVuY3Rpb24o
aXRlcmF0b3IpIHsKICAgIHZhciByZXN1bHRzID0gW107CiAgICB0aGlzLmVhY2go
ZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CiAgICAgIHJlc3VsdHMucHVzaChpdGVy
YXRvcih2YWx1ZSwgaW5kZXgpKTsKICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdHM7
CiAgfSwKCiAgZGV0ZWN0OiBmdW5jdGlvbiAoaXRlcmF0b3IpIHsKICAgIHZhciBy
ZXN1bHQ7CiAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CiAg
ICAgIGlmIChpdGVyYXRvcih2YWx1ZSwgaW5kZXgpKSB7CiAgICAgICAgcmVzdWx0
ID0gdmFsdWU7CiAgICAgICAgdGhyb3cgJGJyZWFrOwogICAgICB9CiAgICB9KTsK
ICAgIHJldHVybiByZXN1bHQ7CiAgfSwKCiAgZmluZEFsbDogZnVuY3Rpb24oaXRl
cmF0b3IpIHsKICAgIHZhciByZXN1bHRzID0gW107CiAgICB0aGlzLmVhY2goZnVu
Y3Rpb24odmFsdWUsIGluZGV4KSB7CiAgICAgIGlmIChpdGVyYXRvcih2YWx1ZSwg
aW5kZXgpKQogICAgICAgIHJlc3VsdHMucHVzaCh2YWx1ZSk7CiAgICB9KTsKICAg
IHJldHVybiByZXN1bHRzOwogIH0sCgogIGdyZXA6IGZ1bmN0aW9uKHBhdHRlcm4s
IGl0ZXJhdG9yKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdGhpcy5lYWNo
KGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewogICAgICB2YXIgc3RyaW5nVmFsdWUg
PSB2YWx1ZS50b1N0cmluZygpOwogICAgICBpZiAoc3RyaW5nVmFsdWUubWF0Y2go
cGF0dGVybikpCiAgICAgICAgcmVzdWx0cy5wdXNoKChpdGVyYXRvciB8fCBQcm90
b3R5cGUuSykodmFsdWUsIGluZGV4KSk7CiAgICB9KQogICAgcmV0dXJuIHJlc3Vs
dHM7CiAgfSwKCiAgaW5jbHVkZTogZnVuY3Rpb24ob2JqZWN0KSB7CiAgICB2YXIg
Zm91bmQgPSBmYWxzZTsKICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSkgewog
ICAgICBpZiAodmFsdWUgPT0gb2JqZWN0KSB7CiAgICAgICAgZm91bmQgPSB0cnVl
OwogICAgICAgIHRocm93ICRicmVhazsKICAgICAgfQogICAgfSk7CiAgICByZXR1
cm4gZm91bmQ7CiAgfSwKCiAgaW5qZWN0OiBmdW5jdGlvbihtZW1vLCBpdGVyYXRv
cikgewogICAgdGhpcy5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewogICAg
ICBtZW1vID0gaXRlcmF0b3IobWVtbywgdmFsdWUsIGluZGV4KTsKICAgIH0pOwog
ICAgcmV0dXJuIG1lbW87CiAgfSwKCiAgaW52b2tlOiBmdW5jdGlvbihtZXRob2Qp
IHsKICAgIHZhciBhcmdzID0gJEEoYXJndW1lbnRzKS5zbGljZSgxKTsKICAgIHJl
dHVybiB0aGlzLmNvbGxlY3QoZnVuY3Rpb24odmFsdWUpIHsKICAgICAgcmV0dXJu
IHZhbHVlW21ldGhvZF0uYXBwbHkodmFsdWUsIGFyZ3MpOwogICAgfSk7CiAgfSwK
CiAgbWF4OiBmdW5jdGlvbihpdGVyYXRvcikgewogICAgdmFyIHJlc3VsdDsKICAg
IHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKICAgICAgdmFsdWUg
PSAoaXRlcmF0b3IgfHwgUHJvdG90eXBlLkspKHZhbHVlLCBpbmRleCk7CiAgICAg
IGlmICh2YWx1ZSA+PSAocmVzdWx0IHx8IHZhbHVlKSkKICAgICAgICByZXN1bHQg
PSB2YWx1ZTsKICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9LAoKICBtaW46
IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICB2YXIgcmVzdWx0OwogICAgdGhpcy5l
YWNoKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewogICAgICB2YWx1ZSA9IChpdGVy
YXRvciB8fCBQcm90b3R5cGUuSykodmFsdWUsIGluZGV4KTsKICAgICAgaWYgKHZh
bHVlIDw9IChyZXN1bHQgfHwgdmFsdWUpKQogICAgICAgIHJlc3VsdCA9IHZhbHVl
OwogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0sCgogIHBhcnRpdGlvbjog
ZnVuY3Rpb24oaXRlcmF0b3IpIHsKICAgIHZhciB0cnVlcyA9IFtdLCBmYWxzZXMg
PSBbXTsKICAgIHRoaXMuZWFjaChmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKICAg
ICAgKChpdGVyYXRvciB8fCBQcm90b3R5cGUuSykodmFsdWUsIGluZGV4KSA/CiAg
ICAgICAgdHJ1ZXMgOiBmYWxzZXMpLnB1c2godmFsdWUpOwogICAgfSk7CiAgICBy
ZXR1cm4gW3RydWVzLCBmYWxzZXNdOwogIH0sCgogIHBsdWNrOiBmdW5jdGlvbihw
cm9wZXJ0eSkgewogICAgdmFyIHJlc3VsdHMgPSBbXTsKICAgIHRoaXMuZWFjaChm
dW5jdGlvbih2YWx1ZSwgaW5kZXgpIHsKICAgICAgcmVzdWx0cy5wdXNoKHZhbHVl
W3Byb3BlcnR5XSk7CiAgICB9KTsKICAgIHJldHVybiByZXN1bHRzOwogIH0sCgog
IHJlamVjdDogZnVuY3Rpb24oaXRlcmF0b3IpIHsKICAgIHZhciByZXN1bHRzID0g
W107CiAgICB0aGlzLmVhY2goZnVuY3Rpb24odmFsdWUsIGluZGV4KSB7CiAgICAg
IGlmICghaXRlcmF0b3IodmFsdWUsIGluZGV4KSkKICAgICAgICByZXN1bHRzLnB1
c2godmFsdWUpOwogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0czsKICB9LAoKICBz
b3J0Qnk6IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICByZXR1cm4gdGhpcy5jb2xs
ZWN0KGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewogICAgICByZXR1cm4ge3ZhbHVl
OiB2YWx1ZSwgY3JpdGVyaWE6IGl0ZXJhdG9yKHZhbHVlLCBpbmRleCl9OwogICAg
fSkuc29ydChmdW5jdGlvbihsZWZ0LCByaWdodCkgewogICAgICB2YXIgYSA9IGxl
ZnQuY3JpdGVyaWEsIGIgPSByaWdodC5jcml0ZXJpYTsKICAgICAgcmV0dXJuIGEg
PCBiID8gLTEgOiBhID4gYiA/IDEgOiAwOwogICAgfSkucGx1Y2soJ3ZhbHVlJyk7
CiAgfSwKCiAgdG9BcnJheTogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpcy5j
b2xsZWN0KFByb3RvdHlwZS5LKTsKICB9LAoKICB6aXA6IGZ1bmN0aW9uKCkgewog
ICAgdmFyIGl0ZXJhdG9yID0gUHJvdG90eXBlLkssIGFyZ3MgPSAkQShhcmd1bWVu
dHMpOwogICAgaWYgKHR5cGVvZiBhcmdzLmxhc3QoKSA9PSAnZnVuY3Rpb24nKQog
ICAgICBpdGVyYXRvciA9IGFyZ3MucG9wKCk7CgogICAgdmFyIGNvbGxlY3Rpb25z
ID0gW3RoaXNdLmNvbmNhdChhcmdzKS5tYXAoJEEpOwogICAgcmV0dXJuIHRoaXMu
bWFwKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCkgewogICAgICBpdGVyYXRvcih2YWx1
ZSA9IGNvbGxlY3Rpb25zLnBsdWNrKGluZGV4KSk7CiAgICAgIHJldHVybiB2YWx1
ZTsKICAgIH0pOwogIH0sCgogIGluc3BlY3Q6IGZ1bmN0aW9uKCkgewogICAgcmV0
dXJuICcjPEVudW1lcmFibGU6JyArIHRoaXMudG9BcnJheSgpLmluc3BlY3QoKSAr
ICc+JzsKICB9Cn0KCk9iamVjdC5leHRlbmQoRW51bWVyYWJsZSwgewogIG1hcDog
ICAgIEVudW1lcmFibGUuY29sbGVjdCwKICBmaW5kOiAgICBFbnVtZXJhYmxlLmRl
dGVjdCwKICBzZWxlY3Q6ICBFbnVtZXJhYmxlLmZpbmRBbGwsCiAgbWVtYmVyOiAg
RW51bWVyYWJsZS5pbmNsdWRlLAogIGVudHJpZXM6IEVudW1lcmFibGUudG9BcnJh
eQp9KTsKdmFyICRBID0gQXJyYXkuZnJvbSA9IGZ1bmN0aW9uKGl0ZXJhYmxlKSB7
CiAgaWYgKCFpdGVyYWJsZSkgcmV0dXJuIFtdOwogIGlmIChpdGVyYWJsZS50b0Fy
cmF5KSB7CiAgICByZXR1cm4gaXRlcmFibGUudG9BcnJheSgpOwogIH0gZWxzZSB7
CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBp
dGVyYWJsZS5sZW5ndGg7IGkrKykKICAgICAgcmVzdWx0cy5wdXNoKGl0ZXJhYmxl
W2ldKTsKICAgIHJldHVybiByZXN1bHRzOwogIH0KfQoKT2JqZWN0LmV4dGVuZChB
cnJheS5wcm90b3R5cGUsIEVudW1lcmFibGUpOwoKQXJyYXkucHJvdG90eXBlLl9y
ZXZlcnNlID0gQXJyYXkucHJvdG90eXBlLnJldmVyc2U7CgpPYmplY3QuZXh0ZW5k
KEFycmF5LnByb3RvdHlwZSwgewogIF9lYWNoOiBmdW5jdGlvbihpdGVyYXRvcikg
ewogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKQogICAg
ICBpdGVyYXRvcih0aGlzW2ldKTsKICB9LAoKICBjbGVhcjogZnVuY3Rpb24oKSB7
CiAgICB0aGlzLmxlbmd0aCA9IDA7CiAgICByZXR1cm4gdGhpczsKICB9LAoKICBm
aXJzdDogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpc1swXTsKICB9LAoKICBs
YXN0OiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlzW3RoaXMubGVuZ3RoIC0g
MV07CiAgfSwKCiAgY29tcGFjdDogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhp
cy5zZWxlY3QoZnVuY3Rpb24odmFsdWUpIHsKICAgICAgcmV0dXJuIHZhbHVlICE9
IHVuZGVmaW5lZCB8fCB2YWx1ZSAhPSBudWxsOwogICAgfSk7CiAgfSwKCiAgZmxh
dHRlbjogZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpcy5pbmplY3QoW10sIGZ1
bmN0aW9uKGFycmF5LCB2YWx1ZSkgewogICAgICByZXR1cm4gYXJyYXkuY29uY2F0
KHZhbHVlLmNvbnN0cnVjdG9yID09IEFycmF5ID8KICAgICAgICB2YWx1ZS5mbGF0
dGVuKCkgOiBbdmFsdWVdKTsKICAgIH0pOwogIH0sCgogIHdpdGhvdXQ6IGZ1bmN0
aW9uKCkgewogICAgdmFyIHZhbHVlcyA9ICRBKGFyZ3VtZW50cyk7CiAgICByZXR1
cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24odmFsdWUpIHsKICAgICAgcmV0dXJuICF2
YWx1ZXMuaW5jbHVkZSh2YWx1ZSk7CiAgICB9KTsKICB9LAoKICBpbmRleE9mOiBm
dW5jdGlvbihvYmplY3QpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5s
ZW5ndGg7IGkrKykKICAgICAgaWYgKHRoaXNbaV0gPT0gb2JqZWN0KSByZXR1cm4g
aTsKICAgIHJldHVybiAtMTsKICB9LAoKICByZXZlcnNlOiBmdW5jdGlvbihpbmxp
bmUpIHsKICAgIHJldHVybiAoaW5saW5lICE9PSBmYWxzZSA/IHRoaXMgOiB0aGlz
LnRvQXJyYXkoKSkuX3JldmVyc2UoKTsKICB9LAoKICBzaGlmdDogZnVuY3Rpb24o
KSB7CiAgICB2YXIgcmVzdWx0ID0gdGhpc1swXTsKICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgdGhpcy5sZW5ndGggLSAxOyBpKyspCiAgICAgIHRoaXNbaV0gPSB0aGlz
W2kgKyAxXTsKICAgIHRoaXMubGVuZ3RoLS07CiAgICByZXR1cm4gcmVzdWx0Owog
IH0sCgogIGluc3BlY3Q6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuICdbJyArIHRo
aXMubWFwKE9iamVjdC5pbnNwZWN0KS5qb2luKCcsICcpICsgJ10nOwogIH0KfSk7
CnZhciBIYXNoID0gewogIF9lYWNoOiBmdW5jdGlvbihpdGVyYXRvcikgewogICAg
Zm9yIChrZXkgaW4gdGhpcykgewogICAgICB2YXIgdmFsdWUgPSB0aGlzW2tleV07
CiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykgY29udGludWU7
CgogICAgICB2YXIgcGFpciA9IFtrZXksIHZhbHVlXTsKICAgICAgcGFpci5rZXkg
PSBrZXk7CiAgICAgIHBhaXIudmFsdWUgPSB2YWx1ZTsKICAgICAgaXRlcmF0b3Io
cGFpcik7CiAgICB9CiAgfSwKCiAga2V5czogZnVuY3Rpb24oKSB7CiAgICByZXR1
cm4gdGhpcy5wbHVjaygna2V5Jyk7CiAgfSwKCiAgdmFsdWVzOiBmdW5jdGlvbigp
IHsKICAgIHJldHVybiB0aGlzLnBsdWNrKCd2YWx1ZScpOwogIH0sCgogIG1lcmdl
OiBmdW5jdGlvbihoYXNoKSB7CiAgICByZXR1cm4gJEgoaGFzaCkuaW5qZWN0KCRI
KHRoaXMpLCBmdW5jdGlvbihtZXJnZWRIYXNoLCBwYWlyKSB7CiAgICAgIG1lcmdl
ZEhhc2hbcGFpci5rZXldID0gcGFpci52YWx1ZTsKICAgICAgcmV0dXJuIG1lcmdl
ZEhhc2g7CiAgICB9KTsKICB9LAoKICB0b1F1ZXJ5U3RyaW5nOiBmdW5jdGlvbigp
IHsKICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbihwYWlyKSB7CiAgICAgIHJl
dHVybiBwYWlyLm1hcChlbmNvZGVVUklDb21wb25lbnQpLmpvaW4oJz0nKTsKICAg
IH0pLmpvaW4oJyYnKTsKICB9LAoKICBpbnNwZWN0OiBmdW5jdGlvbigpIHsKICAg
IHJldHVybiAnIzxIYXNoOnsnICsgdGhpcy5tYXAoZnVuY3Rpb24ocGFpcikgewog
ICAgICByZXR1cm4gcGFpci5tYXAoT2JqZWN0Lmluc3BlY3QpLmpvaW4oJzogJyk7
CiAgICB9KS5qb2luKCcsICcpICsgJ30+JzsKICB9Cn0KCmZ1bmN0aW9uICRIKG9i
amVjdCkgewogIHZhciBoYXNoID0gT2JqZWN0LmV4dGVuZCh7fSwgb2JqZWN0IHx8
IHt9KTsKICBPYmplY3QuZXh0ZW5kKGhhc2gsIEVudW1lcmFibGUpOwogIE9iamVj
dC5leHRlbmQoaGFzaCwgSGFzaCk7CiAgcmV0dXJuIGhhc2g7Cn0KT2JqZWN0UmFu
Z2UgPSBDbGFzcy5jcmVhdGUoKTsKT2JqZWN0LmV4dGVuZChPYmplY3RSYW5nZS5w
cm90b3R5cGUsIEVudW1lcmFibGUpOwpPYmplY3QuZXh0ZW5kKE9iamVjdFJhbmdl
LnByb3RvdHlwZSwgewogIGluaXRpYWxpemU6IGZ1bmN0aW9uKHN0YXJ0LCBlbmQs
IGV4Y2x1c2l2ZSkgewogICAgdGhpcy5zdGFydCA9IHN0YXJ0OwogICAgdGhpcy5l
bmQgPSBlbmQ7CiAgICB0aGlzLmV4Y2x1c2l2ZSA9IGV4Y2x1c2l2ZTsKICB9LAoK
ICBfZWFjaDogZnVuY3Rpb24oaXRlcmF0b3IpIHsKICAgIHZhciB2YWx1ZSA9IHRo
aXMuc3RhcnQ7CiAgICBkbyB7CiAgICAgIGl0ZXJhdG9yKHZhbHVlKTsKICAgICAg
dmFsdWUgPSB2YWx1ZS5zdWNjKCk7CiAgICB9IHdoaWxlICh0aGlzLmluY2x1ZGUo
dmFsdWUpKTsKICB9LAoKICBpbmNsdWRlOiBmdW5jdGlvbih2YWx1ZSkgewogICAg
aWYgKHZhbHVlIDwgdGhpcy5zdGFydCkKICAgICAgcmV0dXJuIGZhbHNlOwogICAg
aWYgKHRoaXMuZXhjbHVzaXZlKQogICAgICByZXR1cm4gdmFsdWUgPCB0aGlzLmVu
ZDsKICAgIHJldHVybiB2YWx1ZSA8PSB0aGlzLmVuZDsKICB9Cn0pOwoKdmFyICRS
ID0gZnVuY3Rpb24oc3RhcnQsIGVuZCwgZXhjbHVzaXZlKSB7CiAgcmV0dXJuIG5l
dyBPYmplY3RSYW5nZShzdGFydCwgZW5kLCBleGNsdXNpdmUpOwp9Cgp2YXIgQWph
eCA9IHsKICBnZXRUcmFuc3BvcnQ6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIFRy
eS50aGVzZSgKICAgICAgZnVuY3Rpb24oKSB7cmV0dXJuIG5ldyBBY3RpdmVYT2Jq
ZWN0KCdNc3htbDIuWE1MSFRUUCcpfSwKICAgICAgZnVuY3Rpb24oKSB7cmV0dXJu
IG5ldyBBY3RpdmVYT2JqZWN0KCdNaWNyb3NvZnQuWE1MSFRUUCcpfSwKICAgICAg
ZnVuY3Rpb24oKSB7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdCgpfQogICAgKSB8
fCBmYWxzZTsKICB9LAoKICBhY3RpdmVSZXF1ZXN0Q291bnQ6IDAKfQoKQWpheC5S
ZXNwb25kZXJzID0gewogIHJlc3BvbmRlcnM6IFtdLAoKICBfZWFjaDogZnVuY3Rp
b24oaXRlcmF0b3IpIHsKICAgIHRoaXMucmVzcG9uZGVycy5fZWFjaChpdGVyYXRv
cik7CiAgfSwKCiAgcmVnaXN0ZXI6IGZ1bmN0aW9uKHJlc3BvbmRlclRvQWRkKSB7
CiAgICBpZiAoIXRoaXMuaW5jbHVkZShyZXNwb25kZXJUb0FkZCkpCiAgICAgIHRo
aXMucmVzcG9uZGVycy5wdXNoKHJlc3BvbmRlclRvQWRkKTsKICB9LAoKICB1bnJl
Z2lzdGVyOiBmdW5jdGlvbihyZXNwb25kZXJUb1JlbW92ZSkgewogICAgdGhpcy5y
ZXNwb25kZXJzID0gdGhpcy5yZXNwb25kZXJzLndpdGhvdXQocmVzcG9uZGVyVG9S
ZW1vdmUpOwogIH0sCgogIGRpc3BhdGNoOiBmdW5jdGlvbihjYWxsYmFjaywgcmVx
dWVzdCwgdHJhbnNwb3J0LCBqc29uKSB7CiAgICB0aGlzLmVhY2goZnVuY3Rpb24o
cmVzcG9uZGVyKSB7CiAgICAgIGlmIChyZXNwb25kZXJbY2FsbGJhY2tdICYmIHR5
cGVvZiByZXNwb25kZXJbY2FsbGJhY2tdID09ICdmdW5jdGlvbicpIHsKICAgICAg
ICB0cnkgewogICAgICAgICAgcmVzcG9uZGVyW2NhbGxiYWNrXS5hcHBseShyZXNw
b25kZXIsIFtyZXF1ZXN0LCB0cmFuc3BvcnQsIGpzb25dKTsKICAgICAgICB9IGNh
dGNoIChlKSB7fQogICAgICB9CiAgICB9KTsKICB9Cn07CgpPYmplY3QuZXh0ZW5k
KEFqYXguUmVzcG9uZGVycywgRW51bWVyYWJsZSk7CgpBamF4LlJlc3BvbmRlcnMu
cmVnaXN0ZXIoewogIG9uQ3JlYXRlOiBmdW5jdGlvbigpIHsKICAgIEFqYXguYWN0
aXZlUmVxdWVzdENvdW50Kys7CiAgfSwKCiAgb25Db21wbGV0ZTogZnVuY3Rpb24o
KSB7CiAgICBBamF4LmFjdGl2ZVJlcXVlc3RDb3VudC0tOwogIH0KfSk7CgpBamF4
LkJhc2UgPSBmdW5jdGlvbigpIHt9OwpBamF4LkJhc2UucHJvdG90eXBlID0gewog
IHNldE9wdGlvbnM6IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgIHRoaXMub3B0aW9u
cyA9IHsKICAgICAgbWV0aG9kOiAgICAgICAncG9zdCcsCiAgICAgIGFzeW5jaHJv
bm91czogdHJ1ZSwKICAgICAgcGFyYW1ldGVyczogICAnJwogICAgfQogICAgT2Jq
ZWN0LmV4dGVuZCh0aGlzLm9wdGlvbnMsIG9wdGlvbnMgfHwge30pOwogIH0sCgog
IHJlc3BvbnNlSXNTdWNjZXNzOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiB0aGlz
LnRyYW5zcG9ydC5zdGF0dXMgPT0gdW5kZWZpbmVkCiAgICAgICAgfHwgdGhpcy50
cmFuc3BvcnQuc3RhdHVzID09IDAKICAgICAgICB8fCAodGhpcy50cmFuc3BvcnQu
c3RhdHVzID49IDIwMCAmJiB0aGlzLnRyYW5zcG9ydC5zdGF0dXMgPCAzMDApOwog
IH0sCgogIHJlc3BvbnNlSXNGYWlsdXJlOiBmdW5jdGlvbigpIHsKICAgIHJldHVy
biAhdGhpcy5yZXNwb25zZUlzU3VjY2VzcygpOwogIH0KfQoKQWpheC5SZXF1ZXN0
ID0gQ2xhc3MuY3JlYXRlKCk7CkFqYXguUmVxdWVzdC5FdmVudHMgPQogIFsnVW5p
bml0aWFsaXplZCcsICdMb2FkaW5nJywgJ0xvYWRlZCcsICdJbnRlcmFjdGl2ZScs
ICdDb21wbGV0ZSddOwoKQWpheC5SZXF1ZXN0LnByb3RvdHlwZSA9IE9iamVjdC5l
eHRlbmQobmV3IEFqYXguQmFzZSgpLCB7CiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24o
dXJsLCBvcHRpb25zKSB7CiAgICB0aGlzLnRyYW5zcG9ydCA9IEFqYXguZ2V0VHJh
bnNwb3J0KCk7CiAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7CiAgICB0aGlz
LnJlcXVlc3QodXJsKTsKICB9LAoKICByZXF1ZXN0OiBmdW5jdGlvbih1cmwpIHsK
ICAgIHZhciBwYXJhbWV0ZXJzID0gdGhpcy5vcHRpb25zLnBhcmFtZXRlcnMgfHwg
Jyc7CiAgICBpZiAocGFyYW1ldGVycy5sZW5ndGggPiAwKSBwYXJhbWV0ZXJzICs9
ICcmXz0nOwoKICAgIHRyeSB7CiAgICAgIHRoaXMudXJsID0gdXJsOwogICAgICBp
ZiAodGhpcy5vcHRpb25zLm1ldGhvZCA9PSAnZ2V0JyAmJiBwYXJhbWV0ZXJzLmxl
bmd0aCA+IDApCiAgICAgICAgdGhpcy51cmwgKz0gKHRoaXMudXJsLm1hdGNoKC9c
Py8pID8gJyYnIDogJz8nKSArIHBhcmFtZXRlcnM7CgogICAgICBBamF4LlJlc3Bv
bmRlcnMuZGlzcGF0Y2goJ29uQ3JlYXRlJywgdGhpcywgdGhpcy50cmFuc3BvcnQp
OwoKICAgICAgdGhpcy50cmFuc3BvcnQub3Blbih0aGlzLm9wdGlvbnMubWV0aG9k
LCB0aGlzLnVybCwKICAgICAgICB0aGlzLm9wdGlvbnMuYXN5bmNocm9ub3VzKTsK
CiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXN5bmNocm9ub3VzKSB7CiAgICAgICAg
dGhpcy50cmFuc3BvcnQub25yZWFkeXN0YXRlY2hhbmdlID0gdGhpcy5vblN0YXRl
Q2hhbmdlLmJpbmQodGhpcyk7CiAgICAgICAgc2V0VGltZW91dCgoZnVuY3Rpb24o
KSB7dGhpcy5yZXNwb25kVG9SZWFkeVN0YXRlKDEpfSkuYmluZCh0aGlzKSwgMTAp
OwogICAgICB9CgogICAgICB0aGlzLnNldFJlcXVlc3RIZWFkZXJzKCk7CgogICAg
ICB2YXIgYm9keSA9IHRoaXMub3B0aW9ucy5wb3N0Qm9keSA/IHRoaXMub3B0aW9u
cy5wb3N0Qm9keSA6IHBhcmFtZXRlcnM7CiAgICAgIHRoaXMudHJhbnNwb3J0LnNl
bmQodGhpcy5vcHRpb25zLm1ldGhvZCA9PSAncG9zdCcgPyBib2R5IDogbnVsbCk7
CgogICAgfSBjYXRjaCAoZSkgewogICAgICB0aGlzLmRpc3BhdGNoRXhjZXB0aW9u
KGUpOwogICAgfQogIH0sCgogIHNldFJlcXVlc3RIZWFkZXJzOiBmdW5jdGlvbigp
IHsKICAgIHZhciByZXF1ZXN0SGVhZGVycyA9CiAgICAgIFsnWC1SZXF1ZXN0ZWQt
V2l0aCcsICdYTUxIdHRwUmVxdWVzdCcsCiAgICAgICAnWC1Qcm90b3R5cGUtVmVy
c2lvbicsIFByb3RvdHlwZS5WZXJzaW9uXTsKCiAgICBpZiAodGhpcy5vcHRpb25z
Lm1ldGhvZCA9PSAncG9zdCcpIHsKICAgICAgcmVxdWVzdEhlYWRlcnMucHVzaCgn
Q29udGVudC10eXBlJywKICAgICAgICAnYXBwbGljYXRpb24veC13d3ctZm9ybS11
cmxlbmNvZGVkJyk7CgogICAgICAvKiBGb3JjZSAiQ29ubmVjdGlvbjogY2xvc2Ui
IGZvciBNb3ppbGxhIGJyb3dzZXJzIHRvIHdvcmsgYXJvdW5kCiAgICAgICAqIGEg
YnVnIHdoZXJlIFhNTEh0dHBSZXFldWVzdCBzZW5kcyBhbiBpbmNvcnJlY3QgQ29u
dGVudC1sZW5ndGgKICAgICAgICogaGVhZGVyLiBTZWUgTW96aWxsYSBCdWd6aWxs
YSAjMjQ2NjUxLgogICAgICAgKi8KICAgICAgaWYgKHRoaXMudHJhbnNwb3J0Lm92
ZXJyaWRlTWltZVR5cGUpCiAgICAgICAgcmVxdWVzdEhlYWRlcnMucHVzaCgnQ29u
bmVjdGlvbicsICdjbG9zZScpOwogICAgfQoKICAgIGlmICh0aGlzLm9wdGlvbnMu
cmVxdWVzdEhlYWRlcnMpCiAgICAgIHJlcXVlc3RIZWFkZXJzLnB1c2guYXBwbHko
cmVxdWVzdEhlYWRlcnMsIHRoaXMub3B0aW9ucy5yZXF1ZXN0SGVhZGVycyk7Cgog
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXF1ZXN0SGVhZGVycy5sZW5ndGg7IGkg
Kz0gMikKICAgICAgdGhpcy50cmFuc3BvcnQuc2V0UmVxdWVzdEhlYWRlcihyZXF1
ZXN0SGVhZGVyc1tpXSwgcmVxdWVzdEhlYWRlcnNbaSsxXSk7CiAgfSwKCiAgb25T
dGF0ZUNoYW5nZTogZnVuY3Rpb24oKSB7CiAgICB2YXIgcmVhZHlTdGF0ZSA9IHRo
aXMudHJhbnNwb3J0LnJlYWR5U3RhdGU7CiAgICBpZiAocmVhZHlTdGF0ZSAhPSAx
KQogICAgICB0aGlzLnJlc3BvbmRUb1JlYWR5U3RhdGUodGhpcy50cmFuc3BvcnQu
cmVhZHlTdGF0ZSk7CiAgfSwKCiAgaGVhZGVyOiBmdW5jdGlvbihuYW1lKSB7CiAg
ICB0cnkgewogICAgICByZXR1cm4gdGhpcy50cmFuc3BvcnQuZ2V0UmVzcG9uc2VI
ZWFkZXIobmFtZSk7CiAgICB9IGNhdGNoIChlKSB7fQogIH0sCgogIGV2YWxKU09O
OiBmdW5jdGlvbigpIHsKICAgIHRyeSB7CiAgICAgIHJldHVybiBldmFsKHRoaXMu
aGVhZGVyKCdYLUpTT04nKSk7CiAgICB9IGNhdGNoIChlKSB7fQogIH0sCgogIGV2
YWxSZXNwb25zZTogZnVuY3Rpb24oKSB7CiAgICB0cnkgewogICAgICByZXR1cm4g
ZXZhbCh0aGlzLnRyYW5zcG9ydC5yZXNwb25zZVRleHQpOwogICAgfSBjYXRjaCAo
ZSkgewogICAgICB0aGlzLmRpc3BhdGNoRXhjZXB0aW9uKGUpOwogICAgfQogIH0s
CgogIHJlc3BvbmRUb1JlYWR5U3RhdGU6IGZ1bmN0aW9uKHJlYWR5U3RhdGUpIHsK
ICAgIHZhciBldmVudCA9IEFqYXguUmVxdWVzdC5FdmVudHNbcmVhZHlTdGF0ZV07
CiAgICB2YXIgdHJhbnNwb3J0ID0gdGhpcy50cmFuc3BvcnQsIGpzb24gPSB0aGlz
LmV2YWxKU09OKCk7CgogICAgaWYgKGV2ZW50ID09ICdDb21wbGV0ZScpIHsKICAg
ICAgdHJ5IHsKICAgICAgICAodGhpcy5vcHRpb25zWydvbicgKyB0aGlzLnRyYW5z
cG9ydC5zdGF0dXNdCiAgICAgICAgIHx8IHRoaXMub3B0aW9uc1snb24nICsgKHRo
aXMucmVzcG9uc2VJc1N1Y2Nlc3MoKSA/ICdTdWNjZXNzJyA6ICdGYWlsdXJlJyld
CiAgICAgICAgIHx8IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uKSh0cmFuc3BvcnQs
IGpzb24pOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgdGhpcy5kaXNwYXRj
aEV4Y2VwdGlvbihlKTsKICAgICAgfQoKICAgICAgaWYgKCh0aGlzLmhlYWRlcign
Q29udGVudC10eXBlJykgfHwgJycpLm1hdGNoKC9edGV4dFwvamF2YXNjcmlwdC9p
KSkKICAgICAgICB0aGlzLmV2YWxSZXNwb25zZSgpOwogICAgfQoKICAgIHRyeSB7
CiAgICAgICh0aGlzLm9wdGlvbnNbJ29uJyArIGV2ZW50XSB8fCBQcm90b3R5cGUu
ZW1wdHlGdW5jdGlvbikodHJhbnNwb3J0LCBqc29uKTsKICAgICAgQWpheC5SZXNw
b25kZXJzLmRpc3BhdGNoKCdvbicgKyBldmVudCwgdGhpcywgdHJhbnNwb3J0LCBq
c29uKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgdGhpcy5kaXNwYXRjaEV4Y2Vw
dGlvbihlKTsKICAgIH0KCiAgICAvKiBBdm9pZCBtZW1vcnkgbGVhayBpbiBNU0lF
OiBjbGVhbiB1cCB0aGUgb25jb21wbGV0ZSBldmVudCBoYW5kbGVyICovCiAgICBp
ZiAoZXZlbnQgPT0gJ0NvbXBsZXRlJykKICAgICAgdGhpcy50cmFuc3BvcnQub25y
ZWFkeXN0YXRlY2hhbmdlID0gUHJvdG90eXBlLmVtcHR5RnVuY3Rpb247CiAgfSwK
CiAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikgewogICAg
KHRoaXMub3B0aW9ucy5vbkV4Y2VwdGlvbiB8fCBQcm90b3R5cGUuZW1wdHlGdW5j
dGlvbikodGhpcywgZXhjZXB0aW9uKTsKICAgIEFqYXguUmVzcG9uZGVycy5kaXNw
YXRjaCgnb25FeGNlcHRpb24nLCB0aGlzLCBleGNlcHRpb24pOwogIH0KfSk7CgpB
amF4LlVwZGF0ZXIgPSBDbGFzcy5jcmVhdGUoKTsKCk9iamVjdC5leHRlbmQoT2Jq
ZWN0LmV4dGVuZChBamF4LlVwZGF0ZXIucHJvdG90eXBlLCBBamF4LlJlcXVlc3Qu
cHJvdG90eXBlKSwgewogIGluaXRpYWxpemU6IGZ1bmN0aW9uKGNvbnRhaW5lciwg
dXJsLCBvcHRpb25zKSB7CiAgICB0aGlzLmNvbnRhaW5lcnMgPSB7CiAgICAgIHN1
Y2Nlc3M6IGNvbnRhaW5lci5zdWNjZXNzID8gJChjb250YWluZXIuc3VjY2Vzcykg
OiAkKGNvbnRhaW5lciksCiAgICAgIGZhaWx1cmU6IGNvbnRhaW5lci5mYWlsdXJl
ID8gJChjb250YWluZXIuZmFpbHVyZSkgOgogICAgICAgIChjb250YWluZXIuc3Vj
Y2VzcyA/IG51bGwgOiAkKGNvbnRhaW5lcikpCiAgICB9CgogICAgdGhpcy50cmFu
c3BvcnQgPSBBamF4LmdldFRyYW5zcG9ydCgpOwogICAgdGhpcy5zZXRPcHRpb25z
KG9wdGlvbnMpOwoKICAgIHZhciBvbkNvbXBsZXRlID0gdGhpcy5vcHRpb25zLm9u
Q29tcGxldGUgfHwgUHJvdG90eXBlLmVtcHR5RnVuY3Rpb247CiAgICB0aGlzLm9w
dGlvbnMub25Db21wbGV0ZSA9IChmdW5jdGlvbih0cmFuc3BvcnQsIG9iamVjdCkg
ewogICAgICB0aGlzLnVwZGF0ZUNvbnRlbnQoKTsKICAgICAgb25Db21wbGV0ZSh0
cmFuc3BvcnQsIG9iamVjdCk7CiAgICB9KS5iaW5kKHRoaXMpOwoKICAgIHRoaXMu
cmVxdWVzdCh1cmwpOwogIH0sCgogIHVwZGF0ZUNvbnRlbnQ6IGZ1bmN0aW9uKCkg
ewogICAgdmFyIHJlY2VpdmVyID0gdGhpcy5yZXNwb25zZUlzU3VjY2VzcygpID8K
ICAgICAgdGhpcy5jb250YWluZXJzLnN1Y2Nlc3MgOiB0aGlzLmNvbnRhaW5lcnMu
ZmFpbHVyZTsKICAgIHZhciByZXNwb25zZSA9IHRoaXMudHJhbnNwb3J0LnJlc3Bv
bnNlVGV4dDsKCiAgICBpZiAoIXRoaXMub3B0aW9ucy5ldmFsU2NyaXB0cykKICAg
ICAgcmVzcG9uc2UgPSByZXNwb25zZS5zdHJpcFNjcmlwdHMoKTsKCiAgICBpZiAo
cmVjZWl2ZXIpIHsKICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbnNlcnRpb24pIHsK
ICAgICAgICBuZXcgdGhpcy5vcHRpb25zLmluc2VydGlvbihyZWNlaXZlciwgcmVz
cG9uc2UpOwogICAgICB9IGVsc2UgewogICAgICAgIEVsZW1lbnQudXBkYXRlKHJl
Y2VpdmVyLCByZXNwb25zZSk7CiAgICAgIH0KICAgIH0KCiAgICBpZiAodGhpcy5y
ZXNwb25zZUlzU3VjY2VzcygpKSB7CiAgICAgIGlmICh0aGlzLm9uQ29tcGxldGUp
CiAgICAgICAgc2V0VGltZW91dCh0aGlzLm9uQ29tcGxldGUuYmluZCh0aGlzKSwg
MTApOwogICAgfQogIH0KfSk7CgpBamF4LlBlcmlvZGljYWxVcGRhdGVyID0gQ2xh
c3MuY3JlYXRlKCk7CkFqYXguUGVyaW9kaWNhbFVwZGF0ZXIucHJvdG90eXBlID0g
T2JqZWN0LmV4dGVuZChuZXcgQWpheC5CYXNlKCksIHsKICBpbml0aWFsaXplOiBm
dW5jdGlvbihjb250YWluZXIsIHVybCwgb3B0aW9ucykgewogICAgdGhpcy5zZXRP
cHRpb25zKG9wdGlvbnMpOwogICAgdGhpcy5vbkNvbXBsZXRlID0gdGhpcy5vcHRp
b25zLm9uQ29tcGxldGU7CgogICAgdGhpcy5mcmVxdWVuY3kgPSAodGhpcy5vcHRp
b25zLmZyZXF1ZW5jeSB8fCAyKTsKICAgIHRoaXMuZGVjYXkgPSAodGhpcy5vcHRp
b25zLmRlY2F5IHx8IDEpOwoKICAgIHRoaXMudXBkYXRlciA9IHt9OwogICAgdGhp
cy5jb250YWluZXIgPSBjb250YWluZXI7CiAgICB0aGlzLnVybCA9IHVybDsKCiAg
ICB0aGlzLnN0YXJ0KCk7CiAgfSwKCiAgc3RhcnQ6IGZ1bmN0aW9uKCkgewogICAg
dGhpcy5vcHRpb25zLm9uQ29tcGxldGUgPSB0aGlzLnVwZGF0ZUNvbXBsZXRlLmJp
bmQodGhpcyk7CiAgICB0aGlzLm9uVGltZXJFdmVudCgpOwogIH0sCgogIHN0b3A6
IGZ1bmN0aW9uKCkgewogICAgdGhpcy51cGRhdGVyLm9uQ29tcGxldGUgPSB1bmRl
ZmluZWQ7CiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcik7CiAgICAodGhpcy5v
bkNvbXBsZXRlIHx8IFByb3RvdHlwZS5lbXB0eUZ1bmN0aW9uKS5hcHBseSh0aGlz
LCBhcmd1bWVudHMpOwogIH0sCgogIHVwZGF0ZUNvbXBsZXRlOiBmdW5jdGlvbihy
ZXF1ZXN0KSB7CiAgICBpZiAodGhpcy5vcHRpb25zLmRlY2F5KSB7CiAgICAgIHRo
aXMuZGVjYXkgPSAocmVxdWVzdC5yZXNwb25zZVRleHQgPT0gdGhpcy5sYXN0VGV4
dCA/CiAgICAgICAgdGhpcy5kZWNheSAqIHRoaXMub3B0aW9ucy5kZWNheSA6IDEp
OwoKICAgICAgdGhpcy5sYXN0VGV4dCA9IHJlcXVlc3QucmVzcG9uc2VUZXh0Owog
ICAgfQogICAgdGhpcy50aW1lciA9IHNldFRpbWVvdXQodGhpcy5vblRpbWVyRXZl
bnQuYmluZCh0aGlzKSwKICAgICAgdGhpcy5kZWNheSAqIHRoaXMuZnJlcXVlbmN5
ICogMTAwMCk7CiAgfSwKCiAgb25UaW1lckV2ZW50OiBmdW5jdGlvbigpIHsKICAg
IHRoaXMudXBkYXRlciA9IG5ldyBBamF4LlVwZGF0ZXIodGhpcy5jb250YWluZXIs
IHRoaXMudXJsLCB0aGlzLm9wdGlvbnMpOwogIH0KfSk7CmRvY3VtZW50LmdldEVs
ZW1lbnRzQnlDbGFzc05hbWUgPSBmdW5jdGlvbihjbGFzc05hbWUsIHBhcmVudEVs
ZW1lbnQpIHsKICB2YXIgY2hpbGRyZW4gPSAoJChwYXJlbnRFbGVtZW50KSB8fCBk
b2N1bWVudC5ib2R5KS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpOwogIHJldHVy
biAkQShjaGlsZHJlbikuaW5qZWN0KFtdLCBmdW5jdGlvbihlbGVtZW50cywgY2hp
bGQpIHsKICAgIGlmIChjaGlsZC5jbGFzc05hbWUubWF0Y2gobmV3IFJlZ0V4cCgi
KF58XFxzKSIgKyBjbGFzc05hbWUgKyAiKFxcc3wkKSIpKSkKICAgICAgZWxlbWVu
dHMucHVzaChjaGlsZCk7CiAgICByZXR1cm4gZWxlbWVudHM7CiAgfSk7Cn0KCi8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKaWYgKCF3aW5kb3cuRWxlbWVu
dCkgewogIHZhciBFbGVtZW50ID0gbmV3IE9iamVjdCgpOwp9CgpPYmplY3QuZXh0
ZW5kKEVsZW1lbnQsIHsKICB2aXNpYmxlOiBmdW5jdGlvbihlbGVtZW50KSB7CiAg
ICByZXR1cm4gJChlbGVtZW50KS5zdHlsZS5kaXNwbGF5ICE9ICdub25lJzsKICB9
LAoKICB0b2dnbGU6IGZ1bmN0aW9uKCkgewogICAgZm9yICh2YXIgaSA9IDA7IGkg
PCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGVsZW1lbnQgPSAk
KGFyZ3VtZW50c1tpXSk7CiAgICAgIEVsZW1lbnRbRWxlbWVudC52aXNpYmxlKGVs
ZW1lbnQpID8gJ2hpZGUnIDogJ3Nob3cnXShlbGVtZW50KTsKICAgIH0KICB9LAoK
ICBoaWRlOiBmdW5jdGlvbigpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJn
dW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBlbGVtZW50ID0gJChhcmd1
bWVudHNbaV0pOwogICAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7
CiAgICB9CiAgfSwKCiAgc2hvdzogZnVuY3Rpb24oKSB7CiAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgZWxl
bWVudCA9ICQoYXJndW1lbnRzW2ldKTsKICAgICAgZWxlbWVudC5zdHlsZS5kaXNw
bGF5ID0gJyc7CiAgICB9CiAgfSwKCiAgcmVtb3ZlOiBmdW5jdGlvbihlbGVtZW50
KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIGVsZW1lbnQucGFyZW50
Tm9kZS5yZW1vdmVDaGlsZChlbGVtZW50KTsKICB9LAoKICB1cGRhdGU6IGZ1bmN0
aW9uKGVsZW1lbnQsIGh0bWwpIHsKICAgICQoZWxlbWVudCkuaW5uZXJIVE1MID0g
aHRtbC5zdHJpcFNjcmlwdHMoKTsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7
aHRtbC5ldmFsU2NyaXB0cygpfSwgMTApOwogIH0sCgogIGdldEhlaWdodDogZnVu
Y3Rpb24oZWxlbWVudCkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICBy
ZXR1cm4gZWxlbWVudC5vZmZzZXRIZWlnaHQ7CiAgfSwKCiAgY2xhc3NOYW1lczog
ZnVuY3Rpb24oZWxlbWVudCkgewogICAgcmV0dXJuIG5ldyBFbGVtZW50LkNsYXNz
TmFtZXMoZWxlbWVudCk7CiAgfSwKCiAgaGFzQ2xhc3NOYW1lOiBmdW5jdGlvbihl
bGVtZW50LCBjbGFzc05hbWUpIHsKICAgIGlmICghKGVsZW1lbnQgPSAkKGVsZW1l
bnQpKSkgcmV0dXJuOwogICAgcmV0dXJuIEVsZW1lbnQuY2xhc3NOYW1lcyhlbGVt
ZW50KS5pbmNsdWRlKGNsYXNzTmFtZSk7CiAgfSwKCiAgYWRkQ2xhc3NOYW1lOiBm
dW5jdGlvbihlbGVtZW50LCBjbGFzc05hbWUpIHsKICAgIGlmICghKGVsZW1lbnQg
PSAkKGVsZW1lbnQpKSkgcmV0dXJuOwogICAgcmV0dXJuIEVsZW1lbnQuY2xhc3NO
YW1lcyhlbGVtZW50KS5hZGQoY2xhc3NOYW1lKTsKICB9LAoKICByZW1vdmVDbGFz
c05hbWU6IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFtZSkgewogICAgaWYgKCEo
ZWxlbWVudCA9ICQoZWxlbWVudCkpKSByZXR1cm47CiAgICByZXR1cm4gRWxlbWVu
dC5jbGFzc05hbWVzKGVsZW1lbnQpLnJlbW92ZShjbGFzc05hbWUpOwogIH0sCgog
IC8vIHJlbW92ZXMgd2hpdGVzcGFjZS1vbmx5IHRleHQgbm9kZSBjaGlsZHJlbgog
IGNsZWFuV2hpdGVzcGFjZTogZnVuY3Rpb24oZWxlbWVudCkgewogICAgZWxlbWVu
dCA9ICQoZWxlbWVudCk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnQu
Y2hpbGROb2Rlcy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgbm9kZSA9IGVsZW1l
bnQuY2hpbGROb2Rlc1tpXTsKICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT0gMyAm
JiAhL1xTLy50ZXN0KG5vZGUubm9kZVZhbHVlKSkKICAgICAgICBFbGVtZW50LnJl
bW92ZShub2RlKTsKICAgIH0KICB9LAoKICBlbXB0eTogZnVuY3Rpb24oZWxlbWVu
dCkgewogICAgcmV0dXJuICQoZWxlbWVudCkuaW5uZXJIVE1MLm1hdGNoKC9eXHMq
JC8pOwogIH0sCgogIHNjcm9sbFRvOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICBl
bGVtZW50ID0gJChlbGVtZW50KTsKICAgIHZhciB4ID0gZWxlbWVudC54ID8gZWxl
bWVudC54IDogZWxlbWVudC5vZmZzZXRMZWZ0LAogICAgICAgIHkgPSBlbGVtZW50
LnkgPyBlbGVtZW50LnkgOiBlbGVtZW50Lm9mZnNldFRvcDsKICAgIHdpbmRvdy5z
Y3JvbGxUbyh4LCB5KTsKICB9LAoKICBnZXRTdHlsZTogZnVuY3Rpb24oZWxlbWVu
dCwgc3R5bGUpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgdmFyIHZh
bHVlID0gZWxlbWVudC5zdHlsZVtzdHlsZS5jYW1lbGl6ZSgpXTsKICAgIGlmICgh
dmFsdWUpIHsKICAgICAgaWYgKGRvY3VtZW50LmRlZmF1bHRWaWV3ICYmIGRvY3Vt
ZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUpIHsKICAgICAgICB2YXIg
Y3NzID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVt
ZW50LCBudWxsKTsKICAgICAgICB2YWx1ZSA9IGNzcyA/IGNzcy5nZXRQcm9wZXJ0
eVZhbHVlKHN0eWxlKSA6IG51bGw7CiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5j
dXJyZW50U3R5bGUpIHsKICAgICAgICB2YWx1ZSA9IGVsZW1lbnQuY3VycmVudFN0
eWxlW3N0eWxlLmNhbWVsaXplKCldOwogICAgICB9CiAgICB9CgogICAgaWYgKHdp
bmRvdy5vcGVyYSAmJiBbJ2xlZnQnLCAndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbSdd
LmluY2x1ZGUoc3R5bGUpKQogICAgICBpZiAoRWxlbWVudC5nZXRTdHlsZShlbGVt
ZW50LCAncG9zaXRpb24nKSA9PSAnc3RhdGljJykgdmFsdWUgPSAnYXV0byc7Cgog
ICAgcmV0dXJuIHZhbHVlID09ICdhdXRvJyA/IG51bGwgOiB2YWx1ZTsKICB9LAoK
ICBzZXRTdHlsZTogZnVuY3Rpb24oZWxlbWVudCwgc3R5bGUpIHsKICAgIGVsZW1l
bnQgPSAkKGVsZW1lbnQpOwogICAgZm9yIChuYW1lIGluIHN0eWxlKQogICAgICBl
bGVtZW50LnN0eWxlW25hbWUuY2FtZWxpemUoKV0gPSBzdHlsZVtuYW1lXTsKICB9
LAoKICBnZXREaW1lbnNpb25zOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICBlbGVt
ZW50ID0gJChlbGVtZW50KTsKICAgIGlmIChFbGVtZW50LmdldFN0eWxlKGVsZW1l
bnQsICdkaXNwbGF5JykgIT0gJ25vbmUnKQogICAgICByZXR1cm4ge3dpZHRoOiBl
bGVtZW50Lm9mZnNldFdpZHRoLCBoZWlnaHQ6IGVsZW1lbnQub2Zmc2V0SGVpZ2h0
fTsKCiAgICAvLyBBbGwgKldpZHRoIGFuZCAqSGVpZ2h0IHByb3BlcnRpZXMgZ2l2
ZSAwIG9uIGVsZW1lbnRzIHdpdGggZGlzcGxheSBub25lLAogICAgLy8gc28gZW5h
YmxlIHRoZSBlbGVtZW50IHRlbXBvcmFyaWx5CiAgICB2YXIgZWxzID0gZWxlbWVu
dC5zdHlsZTsKICAgIHZhciBvcmlnaW5hbFZpc2liaWxpdHkgPSBlbHMudmlzaWJp
bGl0eTsKICAgIHZhciBvcmlnaW5hbFBvc2l0aW9uID0gZWxzLnBvc2l0aW9uOwog
ICAgZWxzLnZpc2liaWxpdHkgPSAnaGlkZGVuJzsKICAgIGVscy5wb3NpdGlvbiA9
ICdhYnNvbHV0ZSc7CiAgICBlbHMuZGlzcGxheSA9ICcnOwogICAgdmFyIG9yaWdp
bmFsV2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoOwogICAgdmFyIG9yaWdpbmFs
SGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQ7CiAgICBlbHMuZGlzcGxheSA9
ICdub25lJzsKICAgIGVscy5wb3NpdGlvbiA9IG9yaWdpbmFsUG9zaXRpb247CiAg
ICBlbHMudmlzaWJpbGl0eSA9IG9yaWdpbmFsVmlzaWJpbGl0eTsKICAgIHJldHVy
biB7d2lkdGg6IG9yaWdpbmFsV2lkdGgsIGhlaWdodDogb3JpZ2luYWxIZWlnaHR9
OwogIH0sCgogIG1ha2VQb3NpdGlvbmVkOiBmdW5jdGlvbihlbGVtZW50KSB7CiAg
ICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIHZhciBwb3MgPSBFbGVtZW50Lmdl
dFN0eWxlKGVsZW1lbnQsICdwb3NpdGlvbicpOwogICAgaWYgKHBvcyA9PSAnc3Rh
dGljJyB8fCAhcG9zKSB7CiAgICAgIGVsZW1lbnQuX21hZGVQb3NpdGlvbmVkID0g
dHJ1ZTsKICAgICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7
CiAgICAgIC8vIE9wZXJhIHJldHVybnMgdGhlIG9mZnNldCByZWxhdGl2ZSB0byB0
aGUgcG9zaXRpb25pbmcgY29udGV4dCwgd2hlbiBhbgogICAgICAvLyBlbGVtZW50
IGlzIHBvc2l0aW9uIHJlbGF0aXZlIGJ1dCB0b3AgYW5kIGxlZnQgaGF2ZSBub3Qg
YmVlbiBkZWZpbmVkCiAgICAgIGlmICh3aW5kb3cub3BlcmEpIHsKICAgICAgICBl
bGVtZW50LnN0eWxlLnRvcCA9IDA7CiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0
ID0gMDsKICAgICAgfQogICAgfQogIH0sCgogIHVuZG9Qb3NpdGlvbmVkOiBmdW5j
dGlvbihlbGVtZW50KSB7CiAgICBlbGVtZW50ID0gJChlbGVtZW50KTsKICAgIGlm
IChlbGVtZW50Ll9tYWRlUG9zaXRpb25lZCkgewogICAgICBlbGVtZW50Ll9tYWRl
UG9zaXRpb25lZCA9IHVuZGVmaW5lZDsKICAgICAgZWxlbWVudC5zdHlsZS5wb3Np
dGlvbiA9CiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPQogICAgICAgIGVsZW1l
bnQuc3R5bGUubGVmdCA9CiAgICAgICAgZWxlbWVudC5zdHlsZS5ib3R0b20gPQog
ICAgICAgIGVsZW1lbnQuc3R5bGUucmlnaHQgPSAnJzsKICAgIH0KICB9LAoKICBt
YWtlQ2xpcHBpbmc6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGVsZW1lbnQgPSAk
KGVsZW1lbnQpOwogICAgaWYgKGVsZW1lbnQuX292ZXJmbG93KSByZXR1cm47CiAg
ICBlbGVtZW50Ll9vdmVyZmxvdyA9IGVsZW1lbnQuc3R5bGUub3ZlcmZsb3c7CiAg
ICBpZiAoKEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwgJ292ZXJmbG93JykgfHwg
J3Zpc2libGUnKSAhPSAnaGlkZGVuJykKICAgICAgZWxlbWVudC5zdHlsZS5vdmVy
ZmxvdyA9ICdoaWRkZW4nOwogIH0sCgogIHVuZG9DbGlwcGluZzogZnVuY3Rpb24o
ZWxlbWVudCkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICBpZiAoZWxl
bWVudC5fb3ZlcmZsb3cpIHJldHVybjsKICAgIGVsZW1lbnQuc3R5bGUub3ZlcmZs
b3cgPSBlbGVtZW50Ll9vdmVyZmxvdzsKICAgIGVsZW1lbnQuX292ZXJmbG93ID0g
dW5kZWZpbmVkOwogIH0KfSk7Cgp2YXIgVG9nZ2xlID0gbmV3IE9iamVjdCgpOwpU
b2dnbGUuZGlzcGxheSA9IEVsZW1lbnQudG9nZ2xlOwoKLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCgpBYnN0cmFjdC5JbnNlcnRpb24gPSBmdW5jdGlvbihh
ZGphY2VuY3kpIHsKICB0aGlzLmFkamFjZW5jeSA9IGFkamFjZW5jeTsKfQoKQWJz
dHJhY3QuSW5zZXJ0aW9uLnByb3RvdHlwZSA9IHsKICBpbml0aWFsaXplOiBmdW5j
dGlvbihlbGVtZW50LCBjb250ZW50KSB7CiAgICB0aGlzLmVsZW1lbnQgPSAkKGVs
ZW1lbnQpOwogICAgdGhpcy5jb250ZW50ID0gY29udGVudC5zdHJpcFNjcmlwdHMo
KTsKCiAgICBpZiAodGhpcy5hZGphY2VuY3kgJiYgdGhpcy5lbGVtZW50Lmluc2Vy
dEFkamFjZW50SFRNTCkgewogICAgICB0cnkgewogICAgICAgIHRoaXMuZWxlbWVu
dC5pbnNlcnRBZGphY2VudEhUTUwodGhpcy5hZGphY2VuY3ksIHRoaXMuY29udGVu
dCk7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICBpZiAodGhpcy5lbGVtZW50
LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAndGJvZHknKSB7CiAgICAgICAgICB0
aGlzLmluc2VydENvbnRlbnQodGhpcy5jb250ZW50RnJvbUFub255bW91c1RhYmxl
KCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBlOwogICAgICAg
IH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdGhpcy5yYW5nZSA9IHRoaXMu
ZWxlbWVudC5vd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgIGlmICh0
aGlzLmluaXRpYWxpemVSYW5nZSkgdGhpcy5pbml0aWFsaXplUmFuZ2UoKTsKICAg
ICAgdGhpcy5pbnNlcnRDb250ZW50KFt0aGlzLnJhbmdlLmNyZWF0ZUNvbnRleHR1
YWxGcmFnbWVudCh0aGlzLmNvbnRlbnQpXSk7CiAgICB9CgogICAgc2V0VGltZW91
dChmdW5jdGlvbigpIHtjb250ZW50LmV2YWxTY3JpcHRzKCl9LCAxMCk7CiAgfSwK
CiAgY29udGVudEZyb21Bbm9ueW1vdXNUYWJsZTogZnVuY3Rpb24oKSB7CiAgICB2
YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICBkaXYu
aW5uZXJIVE1MID0gJzx0YWJsZT48dGJvZHk+JyArIHRoaXMuY29udGVudCArICc8
L3Rib2R5PjwvdGFibGU+JzsKICAgIHJldHVybiAkQShkaXYuY2hpbGROb2Rlc1sw
XS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMpOwogIH0KfQoKdmFyIEluc2VydGlv
biA9IG5ldyBPYmplY3QoKTsKCkluc2VydGlvbi5CZWZvcmUgPSBDbGFzcy5jcmVh
dGUoKTsKSW5zZXJ0aW9uLkJlZm9yZS5wcm90b3R5cGUgPSBPYmplY3QuZXh0ZW5k
KG5ldyBBYnN0cmFjdC5JbnNlcnRpb24oJ2JlZm9yZUJlZ2luJyksIHsKICBpbml0
aWFsaXplUmFuZ2U6IGZ1bmN0aW9uKCkgewogICAgdGhpcy5yYW5nZS5zZXRTdGFy
dEJlZm9yZSh0aGlzLmVsZW1lbnQpOwogIH0sCgogIGluc2VydENvbnRlbnQ6IGZ1
bmN0aW9uKGZyYWdtZW50cykgewogICAgZnJhZ21lbnRzLmVhY2goKGZ1bmN0aW9u
KGZyYWdtZW50KSB7CiAgICAgIHRoaXMuZWxlbWVudC5wYXJlbnROb2RlLmluc2Vy
dEJlZm9yZShmcmFnbWVudCwgdGhpcy5lbGVtZW50KTsKICAgIH0pLmJpbmQodGhp
cykpOwogIH0KfSk7CgpJbnNlcnRpb24uVG9wID0gQ2xhc3MuY3JlYXRlKCk7Cklu
c2VydGlvbi5Ub3AucHJvdG90eXBlID0gT2JqZWN0LmV4dGVuZChuZXcgQWJzdHJh
Y3QuSW5zZXJ0aW9uKCdhZnRlckJlZ2luJyksIHsKICBpbml0aWFsaXplUmFuZ2U6
IGZ1bmN0aW9uKCkgewogICAgdGhpcy5yYW5nZS5zZWxlY3ROb2RlQ29udGVudHMo
dGhpcy5lbGVtZW50KTsKICAgIHRoaXMucmFuZ2UuY29sbGFwc2UodHJ1ZSk7CiAg
fSwKCiAgaW5zZXJ0Q29udGVudDogZnVuY3Rpb24oZnJhZ21lbnRzKSB7CiAgICBm
cmFnbWVudHMucmV2ZXJzZShmYWxzZSkuZWFjaCgoZnVuY3Rpb24oZnJhZ21lbnQp
IHsKICAgICAgdGhpcy5lbGVtZW50Lmluc2VydEJlZm9yZShmcmFnbWVudCwgdGhp
cy5lbGVtZW50LmZpcnN0Q2hpbGQpOwogICAgfSkuYmluZCh0aGlzKSk7CiAgfQp9
KTsKCkluc2VydGlvbi5Cb3R0b20gPSBDbGFzcy5jcmVhdGUoKTsKSW5zZXJ0aW9u
LkJvdHRvbS5wcm90b3R5cGUgPSBPYmplY3QuZXh0ZW5kKG5ldyBBYnN0cmFjdC5J
bnNlcnRpb24oJ2JlZm9yZUVuZCcpLCB7CiAgaW5pdGlhbGl6ZVJhbmdlOiBmdW5j
dGlvbigpIHsKICAgIHRoaXMucmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKHRoaXMu
ZWxlbWVudCk7CiAgICB0aGlzLnJhbmdlLmNvbGxhcHNlKHRoaXMuZWxlbWVudCk7
CiAgfSwKCiAgaW5zZXJ0Q29udGVudDogZnVuY3Rpb24oZnJhZ21lbnRzKSB7CiAg
ICBmcmFnbWVudHMuZWFjaCgoZnVuY3Rpb24oZnJhZ21lbnQpIHsKICAgICAgdGhp
cy5lbGVtZW50LmFwcGVuZENoaWxkKGZyYWdtZW50KTsKICAgIH0pLmJpbmQodGhp
cykpOwogIH0KfSk7CgpJbnNlcnRpb24uQWZ0ZXIgPSBDbGFzcy5jcmVhdGUoKTsK
SW5zZXJ0aW9uLkFmdGVyLnByb3RvdHlwZSA9IE9iamVjdC5leHRlbmQobmV3IEFi
c3RyYWN0Lkluc2VydGlvbignYWZ0ZXJFbmQnKSwgewogIGluaXRpYWxpemVSYW5n
ZTogZnVuY3Rpb24oKSB7CiAgICB0aGlzLnJhbmdlLnNldFN0YXJ0QWZ0ZXIodGhp
cy5lbGVtZW50KTsKICB9LAoKICBpbnNlcnRDb250ZW50OiBmdW5jdGlvbihmcmFn
bWVudHMpIHsKICAgIGZyYWdtZW50cy5lYWNoKChmdW5jdGlvbihmcmFnbWVudCkg
ewogICAgICB0aGlzLmVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZnJh
Z21lbnQsCiAgICAgICAgdGhpcy5lbGVtZW50Lm5leHRTaWJsaW5nKTsKICAgIH0p
LmJpbmQodGhpcykpOwogIH0KfSk7CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KCkVsZW1lbnQuQ2xhc3NOYW1lcyA9IENsYXNzLmNyZWF0ZSgpOwpFbGVt
ZW50LkNsYXNzTmFtZXMucHJvdG90eXBlID0gewogIGluaXRpYWxpemU6IGZ1bmN0
aW9uKGVsZW1lbnQpIHsKICAgIHRoaXMuZWxlbWVudCA9ICQoZWxlbWVudCk7CiAg
fSwKCiAgX2VhY2g6IGZ1bmN0aW9uKGl0ZXJhdG9yKSB7CiAgICB0aGlzLmVsZW1l
bnQuY2xhc3NOYW1lLnNwbGl0KC9ccysvKS5zZWxlY3QoZnVuY3Rpb24obmFtZSkg
ewogICAgICByZXR1cm4gbmFtZS5sZW5ndGggPiAwOwogICAgfSkuX2VhY2goaXRl
cmF0b3IpOwogIH0sCgogIHNldDogZnVuY3Rpb24oY2xhc3NOYW1lKSB7CiAgICB0
aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gY2xhc3NOYW1lOwogIH0sCgogIGFkZDog
ZnVuY3Rpb24oY2xhc3NOYW1lVG9BZGQpIHsKICAgIGlmICh0aGlzLmluY2x1ZGUo
Y2xhc3NOYW1lVG9BZGQpKSByZXR1cm47CiAgICB0aGlzLnNldCh0aGlzLnRvQXJy
YXkoKS5jb25jYXQoY2xhc3NOYW1lVG9BZGQpLmpvaW4oJyAnKSk7CiAgfSwKCiAg
cmVtb3ZlOiBmdW5jdGlvbihjbGFzc05hbWVUb1JlbW92ZSkgewogICAgaWYgKCF0
aGlzLmluY2x1ZGUoY2xhc3NOYW1lVG9SZW1vdmUpKSByZXR1cm47CiAgICB0aGlz
LnNldCh0aGlzLnNlbGVjdChmdW5jdGlvbihjbGFzc05hbWUpIHsKICAgICAgcmV0
dXJuIGNsYXNzTmFtZSAhPSBjbGFzc05hbWVUb1JlbW92ZTsKICAgIH0pLmpvaW4o
JyAnKSk7CiAgfSwKCiAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJu
IHRoaXMudG9BcnJheSgpLmpvaW4oJyAnKTsKICB9Cn0KCk9iamVjdC5leHRlbmQo
RWxlbWVudC5DbGFzc05hbWVzLnByb3RvdHlwZSwgRW51bWVyYWJsZSk7CnZhciBG
aWVsZCA9IHsKICBjbGVhcjogZnVuY3Rpb24oKSB7CiAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykKICAgICAgJChhcmd1bWVudHNb
aV0pLnZhbHVlID0gJyc7CiAgfSwKCiAgZm9jdXM6IGZ1bmN0aW9uKGVsZW1lbnQp
IHsKICAgICQoZWxlbWVudCkuZm9jdXMoKTsKICB9LAoKICBwcmVzZW50OiBmdW5j
dGlvbigpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0
aDsgaSsrKQogICAgICBpZiAoJChhcmd1bWVudHNbaV0pLnZhbHVlID09ICcnKSBy
ZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdHJ1ZTsKICB9LAoKICBzZWxlY3Q6IGZ1
bmN0aW9uKGVsZW1lbnQpIHsKICAgICQoZWxlbWVudCkuc2VsZWN0KCk7CiAgfSwK
CiAgYWN0aXZhdGU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIGVsZW1lbnQgPSAk
KGVsZW1lbnQpOwogICAgZWxlbWVudC5mb2N1cygpOwogICAgaWYgKGVsZW1lbnQu
c2VsZWN0KQogICAgICBlbGVtZW50LnNlbGVjdCgpOwogIH0KfQoKLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCgp2YXIgRm9ybSA9IHsKICBzZXJpYWxpemU6
IGZ1bmN0aW9uKGZvcm0pIHsKICAgIHZhciBlbGVtZW50cyA9IEZvcm0uZ2V0RWxl
bWVudHMoJChmb3JtKSk7CiAgICB2YXIgcXVlcnlDb21wb25lbnRzID0gbmV3IEFy
cmF5KCk7CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7
IGkrKykgewogICAgICB2YXIgcXVlcnlDb21wb25lbnQgPSBGb3JtLkVsZW1lbnQu
c2VyaWFsaXplKGVsZW1lbnRzW2ldKTsKICAgICAgaWYgKHF1ZXJ5Q29tcG9uZW50
KQogICAgICAgIHF1ZXJ5Q29tcG9uZW50cy5wdXNoKHF1ZXJ5Q29tcG9uZW50KTsK
ICAgIH0KCiAgICByZXR1cm4gcXVlcnlDb21wb25lbnRzLmpvaW4oJyYnKTsKICB9
LAoKICBnZXRFbGVtZW50czogZnVuY3Rpb24oZm9ybSkgewogICAgZm9ybSA9ICQo
Zm9ybSk7CiAgICB2YXIgZWxlbWVudHMgPSBuZXcgQXJyYXkoKTsKCiAgICBmb3Ig
KHRhZ05hbWUgaW4gRm9ybS5FbGVtZW50LlNlcmlhbGl6ZXJzKSB7CiAgICAgIHZh
ciB0YWdFbGVtZW50cyA9IGZvcm0uZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnTmFt
ZSk7CiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGFnRWxlbWVudHMubGVuZ3Ro
OyBqKyspCiAgICAgICAgZWxlbWVudHMucHVzaCh0YWdFbGVtZW50c1tqXSk7CiAg
ICB9CiAgICByZXR1cm4gZWxlbWVudHM7CiAgfSwKCiAgZ2V0SW5wdXRzOiBmdW5j
dGlvbihmb3JtLCB0eXBlTmFtZSwgbmFtZSkgewogICAgZm9ybSA9ICQoZm9ybSk7
CiAgICB2YXIgaW5wdXRzID0gZm9ybS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5w
dXQnKTsKCiAgICBpZiAoIXR5cGVOYW1lICYmICFuYW1lKQogICAgICByZXR1cm4g
aW5wdXRzOwoKICAgIHZhciBtYXRjaGluZ0lucHV0cyA9IG5ldyBBcnJheSgpOwog
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKICAg
ICAgdmFyIGlucHV0ID0gaW5wdXRzW2ldOwogICAgICBpZiAoKHR5cGVOYW1lICYm
IGlucHV0LnR5cGUgIT0gdHlwZU5hbWUpIHx8CiAgICAgICAgICAobmFtZSAmJiBp
bnB1dC5uYW1lICE9IG5hbWUpKQogICAgICAgIGNvbnRpbnVlOwogICAgICBtYXRj
aGluZ0lucHV0cy5wdXNoKGlucHV0KTsKICAgIH0KCiAgICByZXR1cm4gbWF0Y2hp
bmdJbnB1dHM7CiAgfSwKCiAgZGlzYWJsZTogZnVuY3Rpb24oZm9ybSkgewogICAg
dmFyIGVsZW1lbnRzID0gRm9ybS5nZXRFbGVtZW50cyhmb3JtKTsKICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFy
IGVsZW1lbnQgPSBlbGVtZW50c1tpXTsKICAgICAgZWxlbWVudC5ibHVyKCk7CiAg
ICAgIGVsZW1lbnQuZGlzYWJsZWQgPSAndHJ1ZSc7CiAgICB9CiAgfSwKCiAgZW5h
YmxlOiBmdW5jdGlvbihmb3JtKSB7CiAgICB2YXIgZWxlbWVudHMgPSBGb3JtLmdl
dEVsZW1lbnRzKGZvcm0pOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50
cy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgZWxlbWVudCA9IGVsZW1lbnRzW2ld
OwogICAgICBlbGVtZW50LmRpc2FibGVkID0gJyc7CiAgICB9CiAgfSwKCiAgZmlu
ZEZpcnN0RWxlbWVudDogZnVuY3Rpb24oZm9ybSkgewogICAgcmV0dXJuIEZvcm0u
Z2V0RWxlbWVudHMoZm9ybSkuZmluZChmdW5jdGlvbihlbGVtZW50KSB7CiAgICAg
IHJldHVybiBlbGVtZW50LnR5cGUgIT0gJ2hpZGRlbicgJiYgIWVsZW1lbnQuZGlz
YWJsZWQgJiYKICAgICAgICBbJ2lucHV0JywgJ3NlbGVjdCcsICd0ZXh0YXJlYSdd
LmluY2x1ZGUoZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpOwogICAgfSk7
CiAgfSwKCiAgZm9jdXNGaXJzdEVsZW1lbnQ6IGZ1bmN0aW9uKGZvcm0pIHsKICAg
IEZpZWxkLmFjdGl2YXRlKEZvcm0uZmluZEZpcnN0RWxlbWVudChmb3JtKSk7CiAg
fSwKCiAgcmVzZXQ6IGZ1bmN0aW9uKGZvcm0pIHsKICAgICQoZm9ybSkucmVzZXQo
KTsKICB9Cn0KCkZvcm0uRWxlbWVudCA9IHsKICBzZXJpYWxpemU6IGZ1bmN0aW9u
KGVsZW1lbnQpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgdmFyIG1l
dGhvZCA9IGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpOwogICAgdmFyIHBh
cmFtZXRlciA9IEZvcm0uRWxlbWVudC5TZXJpYWxpemVyc1ttZXRob2RdKGVsZW1l
bnQpOwoKICAgIGlmIChwYXJhbWV0ZXIpIHsKICAgICAgdmFyIGtleSA9IGVuY29k
ZVVSSUNvbXBvbmVudChwYXJhbWV0ZXJbMF0pOwogICAgICBpZiAoa2V5Lmxlbmd0
aCA9PSAwKSByZXR1cm47CgogICAgICBpZiAocGFyYW1ldGVyWzFdLmNvbnN0cnVj
dG9yICE9IEFycmF5KQogICAgICAgIHBhcmFtZXRlclsxXSA9IFtwYXJhbWV0ZXJb
MV1dOwoKICAgICAgcmV0dXJuIHBhcmFtZXRlclsxXS5tYXAoZnVuY3Rpb24odmFs
dWUpIHsKICAgICAgICByZXR1cm4ga2V5ICsgJz0nICsgZW5jb2RlVVJJQ29tcG9u
ZW50KHZhbHVlKTsKICAgICAgfSkuam9pbignJicpOwogICAgfQogIH0sCgogIGdl
dFZhbHVlOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICBlbGVtZW50ID0gJChlbGVt
ZW50KTsKICAgIHZhciBtZXRob2QgPSBlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNh
c2UoKTsKICAgIHZhciBwYXJhbWV0ZXIgPSBGb3JtLkVsZW1lbnQuU2VyaWFsaXpl
cnNbbWV0aG9kXShlbGVtZW50KTsKCiAgICBpZiAocGFyYW1ldGVyKQogICAgICBy
ZXR1cm4gcGFyYW1ldGVyWzFdOwogIH0KfQoKRm9ybS5FbGVtZW50LlNlcmlhbGl6
ZXJzID0gewogIGlucHV0OiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICBzd2l0Y2gg
KGVsZW1lbnQudHlwZS50b0xvd2VyQ2FzZSgpKSB7CiAgICAgIGNhc2UgJ3N1Ym1p
dCc6CiAgICAgIGNhc2UgJ2hpZGRlbic6CiAgICAgIGNhc2UgJ3Bhc3N3b3JkJzoK
ICAgICAgY2FzZSAndGV4dCc6CiAgICAgICAgcmV0dXJuIEZvcm0uRWxlbWVudC5T
ZXJpYWxpemVycy50ZXh0YXJlYShlbGVtZW50KTsKICAgICAgY2FzZSAnY2hlY2ti
b3gnOgogICAgICBjYXNlICdyYWRpbyc6CiAgICAgICAgcmV0dXJuIEZvcm0uRWxl
bWVudC5TZXJpYWxpemVycy5pbnB1dFNlbGVjdG9yKGVsZW1lbnQpOwogICAgfQog
ICAgcmV0dXJuIGZhbHNlOwogIH0sCgogIGlucHV0U2VsZWN0b3I6IGZ1bmN0aW9u
KGVsZW1lbnQpIHsKICAgIGlmIChlbGVtZW50LmNoZWNrZWQpCiAgICAgIHJldHVy
biBbZWxlbWVudC5uYW1lLCBlbGVtZW50LnZhbHVlXTsKICB9LAoKICB0ZXh0YXJl
YTogZnVuY3Rpb24oZWxlbWVudCkgewogICAgcmV0dXJuIFtlbGVtZW50Lm5hbWUs
IGVsZW1lbnQudmFsdWVdOwogIH0sCgogIHNlbGVjdDogZnVuY3Rpb24oZWxlbWVu
dCkgewogICAgcmV0dXJuIEZvcm0uRWxlbWVudC5TZXJpYWxpemVyc1tlbGVtZW50
LnR5cGUgPT0gJ3NlbGVjdC1vbmUnID8KICAgICAgJ3NlbGVjdE9uZScgOiAnc2Vs
ZWN0TWFueSddKGVsZW1lbnQpOwogIH0sCgogIHNlbGVjdE9uZTogZnVuY3Rpb24o
ZWxlbWVudCkgewogICAgdmFyIHZhbHVlID0gJycsIG9wdCwgaW5kZXggPSBlbGVt
ZW50LnNlbGVjdGVkSW5kZXg7CiAgICBpZiAoaW5kZXggPj0gMCkgewogICAgICBv
cHQgPSBlbGVtZW50Lm9wdGlvbnNbaW5kZXhdOwogICAgICB2YWx1ZSA9IG9wdC52
YWx1ZTsKICAgICAgaWYgKCF2YWx1ZSAmJiAhKCd2YWx1ZScgaW4gb3B0KSkKICAg
ICAgICB2YWx1ZSA9IG9wdC50ZXh0OwogICAgfQogICAgcmV0dXJuIFtlbGVtZW50
Lm5hbWUsIHZhbHVlXTsKICB9LAoKICBzZWxlY3RNYW55OiBmdW5jdGlvbihlbGVt
ZW50KSB7CiAgICB2YXIgdmFsdWUgPSBuZXcgQXJyYXkoKTsKICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgZWxlbWVudC5sZW5ndGg7IGkrKykgewogICAgICB2YXIgb3B0
ID0gZWxlbWVudC5vcHRpb25zW2ldOwogICAgICBpZiAob3B0LnNlbGVjdGVkKSB7
CiAgICAgICAgdmFyIG9wdFZhbHVlID0gb3B0LnZhbHVlOwogICAgICAgIGlmICgh
b3B0VmFsdWUgJiYgISgndmFsdWUnIGluIG9wdCkpCiAgICAgICAgICBvcHRWYWx1
ZSA9IG9wdC50ZXh0OwogICAgICAgIHZhbHVlLnB1c2gob3B0VmFsdWUpOwogICAg
ICB9CiAgICB9CiAgICByZXR1cm4gW2VsZW1lbnQubmFtZSwgdmFsdWVdOwogIH0K
fQoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgp2YXIgJEYgPSBGb3Jt
LkVsZW1lbnQuZ2V0VmFsdWU7CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8KCkFic3RyYWN0LlRpbWVkT2JzZXJ2ZXIgPSBmdW5jdGlvbigpIHt9CkFic3Ry
YWN0LlRpbWVkT2JzZXJ2ZXIucHJvdG90eXBlID0gewogIGluaXRpYWxpemU6IGZ1
bmN0aW9uKGVsZW1lbnQsIGZyZXF1ZW5jeSwgY2FsbGJhY2spIHsKICAgIHRoaXMu
ZnJlcXVlbmN5ID0gZnJlcXVlbmN5OwogICAgdGhpcy5lbGVtZW50ICAgPSAkKGVs
ZW1lbnQpOwogICAgdGhpcy5jYWxsYmFjayAgPSBjYWxsYmFjazsKCiAgICB0aGlz
Lmxhc3RWYWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTsKICAgIHRoaXMucmVnaXN0ZXJD
YWxsYmFjaygpOwogIH0sCgogIHJlZ2lzdGVyQ2FsbGJhY2s6IGZ1bmN0aW9uKCkg
ewogICAgc2V0SW50ZXJ2YWwodGhpcy5vblRpbWVyRXZlbnQuYmluZCh0aGlzKSwg
dGhpcy5mcmVxdWVuY3kgKiAxMDAwKTsKICB9LAoKICBvblRpbWVyRXZlbnQ6IGZ1
bmN0aW9uKCkgewogICAgdmFyIHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpOwogICAg
aWYgKHRoaXMubGFzdFZhbHVlICE9IHZhbHVlKSB7CiAgICAgIHRoaXMuY2FsbGJh
Y2sodGhpcy5lbGVtZW50LCB2YWx1ZSk7CiAgICAgIHRoaXMubGFzdFZhbHVlID0g
dmFsdWU7CiAgICB9CiAgfQp9CgpGb3JtLkVsZW1lbnQuT2JzZXJ2ZXIgPSBDbGFz
cy5jcmVhdGUoKTsKRm9ybS5FbGVtZW50Lk9ic2VydmVyLnByb3RvdHlwZSA9IE9i
amVjdC5leHRlbmQobmV3IEFic3RyYWN0LlRpbWVkT2JzZXJ2ZXIoKSwgewogIGdl
dFZhbHVlOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiBGb3JtLkVsZW1lbnQuZ2V0
VmFsdWUodGhpcy5lbGVtZW50KTsKICB9Cn0pOwoKRm9ybS5PYnNlcnZlciA9IENs
YXNzLmNyZWF0ZSgpOwpGb3JtLk9ic2VydmVyLnByb3RvdHlwZSA9IE9iamVjdC5l
eHRlbmQobmV3IEFic3RyYWN0LlRpbWVkT2JzZXJ2ZXIoKSwgewogIGdldFZhbHVl
OiBmdW5jdGlvbigpIHsKICAgIHJldHVybiBGb3JtLnNlcmlhbGl6ZSh0aGlzLmVs
ZW1lbnQpOwogIH0KfSk7CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
CkFic3RyYWN0LkV2ZW50T2JzZXJ2ZXIgPSBmdW5jdGlvbigpIHt9CkFic3RyYWN0
LkV2ZW50T2JzZXJ2ZXIucHJvdG90eXBlID0gewogIGluaXRpYWxpemU6IGZ1bmN0
aW9uKGVsZW1lbnQsIGNhbGxiYWNrKSB7CiAgICB0aGlzLmVsZW1lbnQgID0gJChl
bGVtZW50KTsKICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjazsKCiAgICB0aGlz
Lmxhc3RWYWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTsKICAgIGlmICh0aGlzLmVsZW1l
bnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICdmb3JtJykKICAgICAgdGhpcy5y
ZWdpc3RlckZvcm1DYWxsYmFja3MoKTsKICAgIGVsc2UKICAgICAgdGhpcy5yZWdp
c3RlckNhbGxiYWNrKHRoaXMuZWxlbWVudCk7CiAgfSwKCiAgb25FbGVtZW50RXZl
bnQ6IGZ1bmN0aW9uKCkgewogICAgdmFyIHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgp
OwogICAgaWYgKHRoaXMubGFzdFZhbHVlICE9IHZhbHVlKSB7CiAgICAgIHRoaXMu
Y2FsbGJhY2sodGhpcy5lbGVtZW50LCB2YWx1ZSk7CiAgICAgIHRoaXMubGFzdFZh
bHVlID0gdmFsdWU7CiAgICB9CiAgfSwKCiAgcmVnaXN0ZXJGb3JtQ2FsbGJhY2tz
OiBmdW5jdGlvbigpIHsKICAgIHZhciBlbGVtZW50cyA9IEZvcm0uZ2V0RWxlbWVu
dHModGhpcy5lbGVtZW50KTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbWVu
dHMubGVuZ3RoOyBpKyspCiAgICAgIHRoaXMucmVnaXN0ZXJDYWxsYmFjayhlbGVt
ZW50c1tpXSk7CiAgfSwKCiAgcmVnaXN0ZXJDYWxsYmFjazogZnVuY3Rpb24oZWxl
bWVudCkgewogICAgaWYgKGVsZW1lbnQudHlwZSkgewogICAgICBzd2l0Y2ggKGVs
ZW1lbnQudHlwZS50b0xvd2VyQ2FzZSgpKSB7CiAgICAgICAgY2FzZSAnY2hlY2ti
b3gnOgogICAgICAgIGNhc2UgJ3JhZGlvJzoKICAgICAgICAgIEV2ZW50Lm9ic2Vy
dmUoZWxlbWVudCwgJ2NsaWNrJywgdGhpcy5vbkVsZW1lbnRFdmVudC5iaW5kKHRo
aXMpKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ3Bhc3N3b3JkJzoK
ICAgICAgICBjYXNlICd0ZXh0JzoKICAgICAgICBjYXNlICd0ZXh0YXJlYSc6CiAg
ICAgICAgY2FzZSAnc2VsZWN0LW9uZSc6CiAgICAgICAgY2FzZSAnc2VsZWN0LW11
bHRpcGxlJzoKICAgICAgICAgIEV2ZW50Lm9ic2VydmUoZWxlbWVudCwgJ2NoYW5n
ZScsIHRoaXMub25FbGVtZW50RXZlbnQuYmluZCh0aGlzKSk7CiAgICAgICAgICBi
cmVhazsKICAgICAgfQogICAgfQogIH0KfQoKRm9ybS5FbGVtZW50LkV2ZW50T2Jz
ZXJ2ZXIgPSBDbGFzcy5jcmVhdGUoKTsKRm9ybS5FbGVtZW50LkV2ZW50T2JzZXJ2
ZXIucHJvdG90eXBlID0gT2JqZWN0LmV4dGVuZChuZXcgQWJzdHJhY3QuRXZlbnRP
YnNlcnZlcigpLCB7CiAgZ2V0VmFsdWU6IGZ1bmN0aW9uKCkgewogICAgcmV0dXJu
IEZvcm0uRWxlbWVudC5nZXRWYWx1ZSh0aGlzLmVsZW1lbnQpOwogIH0KfSk7CgpG
b3JtLkV2ZW50T2JzZXJ2ZXIgPSBDbGFzcy5jcmVhdGUoKTsKRm9ybS5FdmVudE9i
c2VydmVyLnByb3RvdHlwZSA9IE9iamVjdC5leHRlbmQobmV3IEFic3RyYWN0LkV2
ZW50T2JzZXJ2ZXIoKSwgewogIGdldFZhbHVlOiBmdW5jdGlvbigpIHsKICAgIHJl
dHVybiBGb3JtLnNlcmlhbGl6ZSh0aGlzLmVsZW1lbnQpOwogIH0KfSk7CmlmICgh
d2luZG93LkV2ZW50KSB7CiAgdmFyIEV2ZW50ID0gbmV3IE9iamVjdCgpOwp9CgpP
YmplY3QuZXh0ZW5kKEV2ZW50LCB7CiAgS0VZX0JBQ0tTUEFDRTogOCwKICBLRVlf
VEFCOiAgICAgICA5LAogIEtFWV9SRVRVUk46ICAgMTMsCiAgS0VZX0VTQzogICAg
ICAyNywKICBLRVlfTEVGVDogICAgIDM3LAogIEtFWV9VUDogICAgICAgMzgsCiAg
S0VZX1JJR0hUOiAgICAzOSwKICBLRVlfRE9XTjogICAgIDQwLAogIEtFWV9ERUxF
VEU6ICAgNDYsCgogIGVsZW1lbnQ6IGZ1bmN0aW9uKGV2ZW50KSB7CiAgICByZXR1
cm4gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7CiAgfSwKCiAgaXNM
ZWZ0Q2xpY2s6IGZ1bmN0aW9uKGV2ZW50KSB7CiAgICByZXR1cm4gKCgoZXZlbnQu
d2hpY2gpICYmIChldmVudC53aGljaCA9PSAxKSkgfHwKICAgICAgICAgICAgKChl
dmVudC5idXR0b24pICYmIChldmVudC5idXR0b24gPT0gMSkpKTsKICB9LAoKICBw
b2ludGVyWDogZnVuY3Rpb24oZXZlbnQpIHsKICAgIHJldHVybiBldmVudC5wYWdl
WCB8fCAoZXZlbnQuY2xpZW50WCArCiAgICAgIChkb2N1bWVudC5kb2N1bWVudEVs
ZW1lbnQuc2Nyb2xsTGVmdCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQpKTsK
ICB9LAoKICBwb2ludGVyWTogZnVuY3Rpb24oZXZlbnQpIHsKICAgIHJldHVybiBl
dmVudC5wYWdlWSB8fCAoZXZlbnQuY2xpZW50WSArCiAgICAgIChkb2N1bWVudC5k
b2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xs
VG9wKSk7CiAgfSwKCiAgc3RvcDogZnVuY3Rpb24oZXZlbnQpIHsKICAgIGlmIChl
dmVudC5wcmV2ZW50RGVmYXVsdCkgewogICAgICBldmVudC5wcmV2ZW50RGVmYXVs
dCgpOwogICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgIH0gZWxzZSB7
CiAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7CiAgICAgIGV2ZW50LmNh
bmNlbEJ1YmJsZSA9IHRydWU7CiAgICB9CiAgfSwKCiAgLy8gZmluZCB0aGUgZmly
c3Qgbm9kZSB3aXRoIHRoZSBnaXZlbiB0YWdOYW1lLCBzdGFydGluZyBmcm9tIHRo
ZQogIC8vIG5vZGUgdGhlIGV2ZW50IHdhcyB0cmlnZ2VyZWQgb247IHRyYXZlcnNl
cyB0aGUgRE9NIHVwd2FyZHMKICBmaW5kRWxlbWVudDogZnVuY3Rpb24oZXZlbnQs
IHRhZ05hbWUpIHsKICAgIHZhciBlbGVtZW50ID0gRXZlbnQuZWxlbWVudChldmVu
dCk7CiAgICB3aGlsZSAoZWxlbWVudC5wYXJlbnROb2RlICYmICghZWxlbWVudC50
YWdOYW1lIHx8CiAgICAgICAgKGVsZW1lbnQudGFnTmFtZS50b1VwcGVyQ2FzZSgp
ICE9IHRhZ05hbWUudG9VcHBlckNhc2UoKSkpKQogICAgICBlbGVtZW50ID0gZWxl
bWVudC5wYXJlbnROb2RlOwogICAgcmV0dXJuIGVsZW1lbnQ7CiAgfSwKCiAgb2Jz
ZXJ2ZXJzOiBmYWxzZSwKCiAgX29ic2VydmVBbmRDYWNoZTogZnVuY3Rpb24oZWxl
bWVudCwgbmFtZSwgb2JzZXJ2ZXIsIHVzZUNhcHR1cmUpIHsKICAgIGlmICghdGhp
cy5vYnNlcnZlcnMpIHRoaXMub2JzZXJ2ZXJzID0gW107CiAgICBpZiAoZWxlbWVu
dC5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgIHRoaXMub2JzZXJ2ZXJzLnB1c2go
W2VsZW1lbnQsIG5hbWUsIG9ic2VydmVyLCB1c2VDYXB0dXJlXSk7CiAgICAgIGVs
ZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBvYnNlcnZlciwgdXNlQ2FwdHVy
ZSk7CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQuYXR0YWNoRXZlbnQpIHsKICAgICAg
dGhpcy5vYnNlcnZlcnMucHVzaChbZWxlbWVudCwgbmFtZSwgb2JzZXJ2ZXIsIHVz
ZUNhcHR1cmVdKTsKICAgICAgZWxlbWVudC5hdHRhY2hFdmVudCgnb24nICsgbmFt
ZSwgb2JzZXJ2ZXIpOwogICAgfQogIH0sCgogIHVubG9hZENhY2hlOiBmdW5jdGlv
bigpIHsKICAgIGlmICghRXZlbnQub2JzZXJ2ZXJzKSByZXR1cm47CiAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IEV2ZW50Lm9ic2VydmVycy5sZW5ndGg7IGkrKykgewog
ICAgICBFdmVudC5zdG9wT2JzZXJ2aW5nLmFwcGx5KHRoaXMsIEV2ZW50Lm9ic2Vy
dmVyc1tpXSk7CiAgICAgIEV2ZW50Lm9ic2VydmVyc1tpXVswXSA9IG51bGw7CiAg
ICB9CiAgICBFdmVudC5vYnNlcnZlcnMgPSBmYWxzZTsKICB9LAoKICBvYnNlcnZl
OiBmdW5jdGlvbihlbGVtZW50LCBuYW1lLCBvYnNlcnZlciwgdXNlQ2FwdHVyZSkg
ewogICAgdmFyIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgdXNlQ2FwdHVyZSA9
IHVzZUNhcHR1cmUgfHwgZmFsc2U7CgogICAgaWYgKG5hbWUgPT0gJ2tleXByZXNz
JyAmJgogICAgICAgIChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5tYXRjaCgvS29ucXVl
cm9yfFNhZmFyaXxLSFRNTC8pCiAgICAgICAgfHwgZWxlbWVudC5hdHRhY2hFdmVu
dCkpCiAgICAgIG5hbWUgPSAna2V5ZG93bic7CgogICAgdGhpcy5fb2JzZXJ2ZUFu
ZENhY2hlKGVsZW1lbnQsIG5hbWUsIG9ic2VydmVyLCB1c2VDYXB0dXJlKTsKICB9
LAoKICBzdG9wT2JzZXJ2aW5nOiBmdW5jdGlvbihlbGVtZW50LCBuYW1lLCBvYnNl
cnZlciwgdXNlQ2FwdHVyZSkgewogICAgdmFyIGVsZW1lbnQgPSAkKGVsZW1lbnQp
OwogICAgdXNlQ2FwdHVyZSA9IHVzZUNhcHR1cmUgfHwgZmFsc2U7CgogICAgaWYg
KG5hbWUgPT0gJ2tleXByZXNzJyAmJgogICAgICAgIChuYXZpZ2F0b3IuYXBwVmVy
c2lvbi5tYXRjaCgvS29ucXVlcm9yfFNhZmFyaXxLSFRNTC8pCiAgICAgICAgfHwg
ZWxlbWVudC5kZXRhY2hFdmVudCkpCiAgICAgIG5hbWUgPSAna2V5ZG93bic7Cgog
ICAgaWYgKGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcikgewogICAgICBlbGVt
ZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgb2JzZXJ2ZXIsIHVzZUNhcHR1
cmUpOwogICAgfSBlbHNlIGlmIChlbGVtZW50LmRldGFjaEV2ZW50KSB7CiAgICAg
IGVsZW1lbnQuZGV0YWNoRXZlbnQoJ29uJyArIG5hbWUsIG9ic2VydmVyKTsKICAg
IH0KICB9Cn0pOwoKLyogcHJldmVudCBtZW1vcnkgbGVha3MgaW4gSUUgKi8KRXZl
bnQub2JzZXJ2ZSh3aW5kb3csICd1bmxvYWQnLCBFdmVudC51bmxvYWRDYWNoZSwg
ZmFsc2UpOwp2YXIgUG9zaXRpb24gPSB7CiAgLy8gc2V0IHRvIHRydWUgaWYgbmVl
ZGVkLCB3YXJuaW5nOiBmaXJlZm94IHBlcmZvcm1hbmNlIHByb2JsZW1zCiAgLy8g
Tk9UIG5lZWVkZWQgZm9yIHBhZ2Ugc2Nyb2xsaW5nLCBvbmx5IGlmIGRyYWdnYWJs
ZSBjb250YWluZWQgaW4KICAvLyBzY3JvbGxhYmxlIGVsZW1lbnRzCiAgaW5jbHVk
ZVNjcm9sbE9mZnNldHM6IGZhbHNlLAoKICAvLyBtdXN0IGJlIGNhbGxlZCBiZWZv
cmUgY2FsbGluZyB3aXRoaW5JbmNsdWRpbmdTY3JvbGxvZmZzZXQsIGV2ZXJ5IHRp
bWUgdGhlCiAgLy8gcGFnZSBpcyBzY3JvbGxlZAogIHByZXBhcmU6IGZ1bmN0aW9u
KCkgewogICAgdGhpcy5kZWx0YVggPSAgd2luZG93LnBhZ2VYT2Zmc2V0CiAgICAg
ICAgICAgICAgICB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVm
dAogICAgICAgICAgICAgICAgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0CiAg
ICAgICAgICAgICAgICB8fCAwOwogICAgdGhpcy5kZWx0YVkgPSAgd2luZG93LnBh
Z2VZT2Zmc2V0CiAgICAgICAgICAgICAgICB8fCBkb2N1bWVudC5kb2N1bWVudEVs
ZW1lbnQuc2Nyb2xsVG9wCiAgICAgICAgICAgICAgICB8fCBkb2N1bWVudC5ib2R5
LnNjcm9sbFRvcAogICAgICAgICAgICAgICAgfHwgMDsKICB9LAoKICByZWFsT2Zm
c2V0OiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICB2YXIgdmFsdWVUID0gMCwgdmFs
dWVMID0gMDsKICAgIGRvIHsKICAgICAgdmFsdWVUICs9IGVsZW1lbnQuc2Nyb2xs
VG9wICB8fCAwOwogICAgICB2YWx1ZUwgKz0gZWxlbWVudC5zY3JvbGxMZWZ0IHx8
IDA7CiAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7CiAgICB9IHdo
aWxlIChlbGVtZW50KTsKICAgIHJldHVybiBbdmFsdWVMLCB2YWx1ZVRdOwogIH0s
CgogIGN1bXVsYXRpdmVPZmZzZXQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIHZh
ciB2YWx1ZVQgPSAwLCB2YWx1ZUwgPSAwOwogICAgZG8gewogICAgICB2YWx1ZVQg
Kz0gZWxlbWVudC5vZmZzZXRUb3AgIHx8IDA7CiAgICAgIHZhbHVlTCArPSBlbGVt
ZW50Lm9mZnNldExlZnQgfHwgMDsKICAgICAgZWxlbWVudCA9IGVsZW1lbnQub2Zm
c2V0UGFyZW50OwogICAgfSB3aGlsZSAoZWxlbWVudCk7CiAgICByZXR1cm4gW3Zh
bHVlTCwgdmFsdWVUXTsKICB9LAoKICBwb3NpdGlvbmVkT2Zmc2V0OiBmdW5jdGlv
bihlbGVtZW50KSB7CiAgICB2YXIgdmFsdWVUID0gMCwgdmFsdWVMID0gMDsKICAg
IGRvIHsKICAgICAgdmFsdWVUICs9IGVsZW1lbnQub2Zmc2V0VG9wICB8fCAwOwog
ICAgICB2YWx1ZUwgKz0gZWxlbWVudC5vZmZzZXRMZWZ0IHx8IDA7CiAgICAgIGVs
ZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudDsKICAgICAgaWYgKGVsZW1lbnQp
IHsKICAgICAgICBwID0gRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCAncG9zaXRp
b24nKTsKICAgICAgICBpZiAocCA9PSAncmVsYXRpdmUnIHx8IHAgPT0gJ2Fic29s
dXRlJykgYnJlYWs7CiAgICAgIH0KICAgIH0gd2hpbGUgKGVsZW1lbnQpOwogICAg
cmV0dXJuIFt2YWx1ZUwsIHZhbHVlVF07CiAgfSwKCiAgb2Zmc2V0UGFyZW50OiBm
dW5jdGlvbihlbGVtZW50KSB7CiAgICBpZiAoZWxlbWVudC5vZmZzZXRQYXJlbnQp
IHJldHVybiBlbGVtZW50Lm9mZnNldFBhcmVudDsKICAgIGlmIChlbGVtZW50ID09
IGRvY3VtZW50LmJvZHkpIHJldHVybiBlbGVtZW50OwoKICAgIHdoaWxlICgoZWxl
bWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZSkgJiYgZWxlbWVudCAhPSBkb2N1bWVu
dC5ib2R5KQogICAgICBpZiAoRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCAncG9z
aXRpb24nKSAhPSAnc3RhdGljJykKICAgICAgICByZXR1cm4gZWxlbWVudDsKCiAg
ICByZXR1cm4gZG9jdW1lbnQuYm9keTsKICB9LAoKICAvLyBjYWNoZXMgeC95IGNv
b3JkaW5hdGUgcGFpciB0byB1c2Ugd2l0aCBvdmVybGFwCiAgd2l0aGluOiBmdW5j
dGlvbihlbGVtZW50LCB4LCB5KSB7CiAgICBpZiAodGhpcy5pbmNsdWRlU2Nyb2xs
T2Zmc2V0cykKICAgICAgcmV0dXJuIHRoaXMud2l0aGluSW5jbHVkaW5nU2Nyb2xs
b2Zmc2V0cyhlbGVtZW50LCB4LCB5KTsKICAgIHRoaXMueGNvbXAgPSB4OwogICAg
dGhpcy55Y29tcCA9IHk7CiAgICB0aGlzLm9mZnNldCA9IHRoaXMuY3VtdWxhdGl2
ZU9mZnNldChlbGVtZW50KTsKCiAgICByZXR1cm4gKHkgPj0gdGhpcy5vZmZzZXRb
MV0gJiYKICAgICAgICAgICAgeSA8ICB0aGlzLm9mZnNldFsxXSArIGVsZW1lbnQu
b2Zmc2V0SGVpZ2h0ICYmCiAgICAgICAgICAgIHggPj0gdGhpcy5vZmZzZXRbMF0g
JiYKICAgICAgICAgICAgeCA8ICB0aGlzLm9mZnNldFswXSArIGVsZW1lbnQub2Zm
c2V0V2lkdGgpOwogIH0sCgogIHdpdGhpbkluY2x1ZGluZ1Njcm9sbG9mZnNldHM6
IGZ1bmN0aW9uKGVsZW1lbnQsIHgsIHkpIHsKICAgIHZhciBvZmZzZXRjYWNoZSA9
IHRoaXMucmVhbE9mZnNldChlbGVtZW50KTsKCiAgICB0aGlzLnhjb21wID0geCAr
IG9mZnNldGNhY2hlWzBdIC0gdGhpcy5kZWx0YVg7CiAgICB0aGlzLnljb21wID0g
eSArIG9mZnNldGNhY2hlWzFdIC0gdGhpcy5kZWx0YVk7CiAgICB0aGlzLm9mZnNl
dCA9IHRoaXMuY3VtdWxhdGl2ZU9mZnNldChlbGVtZW50KTsKCiAgICByZXR1cm4g
KHRoaXMueWNvbXAgPj0gdGhpcy5vZmZzZXRbMV0gJiYKICAgICAgICAgICAgdGhp
cy55Y29tcCA8ICB0aGlzLm9mZnNldFsxXSArIGVsZW1lbnQub2Zmc2V0SGVpZ2h0
ICYmCiAgICAgICAgICAgIHRoaXMueGNvbXAgPj0gdGhpcy5vZmZzZXRbMF0gJiYK
ICAgICAgICAgICAgdGhpcy54Y29tcCA8ICB0aGlzLm9mZnNldFswXSArIGVsZW1l
bnQub2Zmc2V0V2lkdGgpOwogIH0sCgogIC8vIHdpdGhpbiBtdXN0IGJlIGNhbGxl
ZCBkaXJlY3RseSBiZWZvcmUKICBvdmVybGFwOiBmdW5jdGlvbihtb2RlLCBlbGVt
ZW50KSB7CiAgICBpZiAoIW1vZGUpIHJldHVybiAwOwogICAgaWYgKG1vZGUgPT0g
J3ZlcnRpY2FsJykKICAgICAgcmV0dXJuICgodGhpcy5vZmZzZXRbMV0gKyBlbGVt
ZW50Lm9mZnNldEhlaWdodCkgLSB0aGlzLnljb21wKSAvCiAgICAgICAgZWxlbWVu
dC5vZmZzZXRIZWlnaHQ7CiAgICBpZiAobW9kZSA9PSAnaG9yaXpvbnRhbCcpCiAg
ICAgIHJldHVybiAoKHRoaXMub2Zmc2V0WzBdICsgZWxlbWVudC5vZmZzZXRXaWR0
aCkgLSB0aGlzLnhjb21wKSAvCiAgICAgICAgZWxlbWVudC5vZmZzZXRXaWR0aDsK
ICB9LAoKICBjbG9uZTogZnVuY3Rpb24oc291cmNlLCB0YXJnZXQpIHsKICAgIHNv
dXJjZSA9ICQoc291cmNlKTsKICAgIHRhcmdldCA9ICQodGFyZ2V0KTsKICAgIHRh
cmdldC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7CiAgICB2YXIgb2Zmc2V0
cyA9IHRoaXMuY3VtdWxhdGl2ZU9mZnNldChzb3VyY2UpOwogICAgdGFyZ2V0LnN0
eWxlLnRvcCAgICA9IG9mZnNldHNbMV0gKyAncHgnOwogICAgdGFyZ2V0LnN0eWxl
LmxlZnQgICA9IG9mZnNldHNbMF0gKyAncHgnOwogICAgdGFyZ2V0LnN0eWxlLndp
ZHRoICA9IHNvdXJjZS5vZmZzZXRXaWR0aCArICdweCc7CiAgICB0YXJnZXQuc3R5
bGUuaGVpZ2h0ID0gc291cmNlLm9mZnNldEhlaWdodCArICdweCc7CiAgfSwKCiAg
cGFnZTogZnVuY3Rpb24oZm9yRWxlbWVudCkgewogICAgdmFyIHZhbHVlVCA9IDAs
IHZhbHVlTCA9IDA7CgogICAgdmFyIGVsZW1lbnQgPSBmb3JFbGVtZW50OwogICAg
ZG8gewogICAgICB2YWx1ZVQgKz0gZWxlbWVudC5vZmZzZXRUb3AgIHx8IDA7CiAg
ICAgIHZhbHVlTCArPSBlbGVtZW50Lm9mZnNldExlZnQgfHwgMDsKCiAgICAgIC8v
IFNhZmFyaSBmaXgKICAgICAgaWYgKGVsZW1lbnQub2Zmc2V0UGFyZW50PT1kb2N1
bWVudC5ib2R5KQogICAgICAgIGlmIChFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQs
J3Bvc2l0aW9uJyk9PSdhYnNvbHV0ZScpIGJyZWFrOwoKICAgIH0gd2hpbGUgKGVs
ZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudCk7CgogICAgZWxlbWVudCA9IGZv
ckVsZW1lbnQ7CiAgICBkbyB7CiAgICAgIHZhbHVlVCAtPSBlbGVtZW50LnNjcm9s
bFRvcCAgfHwgMDsKICAgICAgdmFsdWVMIC09IGVsZW1lbnQuc2Nyb2xsTGVmdCB8
fCAwOwogICAgfSB3aGlsZSAoZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZSk7
CgogICAgcmV0dXJuIFt2YWx1ZUwsIHZhbHVlVF07CiAgfSwKCiAgY2xvbmU6IGZ1
bmN0aW9uKHNvdXJjZSwgdGFyZ2V0KSB7CiAgICB2YXIgb3B0aW9ucyA9IE9iamVj
dC5leHRlbmQoewogICAgICBzZXRMZWZ0OiAgICB0cnVlLAogICAgICBzZXRUb3A6
ICAgICB0cnVlLAogICAgICBzZXRXaWR0aDogICB0cnVlLAogICAgICBzZXRIZWln
aHQ6ICB0cnVlLAogICAgICBvZmZzZXRUb3A6ICAwLAogICAgICBvZmZzZXRMZWZ0
OiAwCiAgICB9LCBhcmd1bWVudHNbMl0gfHwge30pCgogICAgLy8gZmluZCBwYWdl
IHBvc2l0aW9uIG9mIHNvdXJjZQogICAgc291cmNlID0gJChzb3VyY2UpOwogICAg
dmFyIHAgPSBQb3NpdGlvbi5wYWdlKHNvdXJjZSk7CgogICAgLy8gZmluZCBjb29y
ZGluYXRlIHN5c3RlbSB0byB1c2UKICAgIHRhcmdldCA9ICQodGFyZ2V0KTsKICAg
IHZhciBkZWx0YSA9IFswLCAwXTsKICAgIHZhciBwYXJlbnQgPSBudWxsOwogICAg
Ly8gZGVsdGEgWzAsMF0gd2lsbCBkbyBmaW5lIHdpdGggcG9zaXRpb246IGZpeGVk
IGVsZW1lbnRzLAogICAgLy8gcG9zaXRpb246YWJzb2x1dGUgbmVlZHMgb2Zmc2V0
UGFyZW50IGRlbHRhcwogICAgaWYgKEVsZW1lbnQuZ2V0U3R5bGUodGFyZ2V0LCdw
b3NpdGlvbicpID09ICdhYnNvbHV0ZScpIHsKICAgICAgcGFyZW50ID0gUG9zaXRp
b24ub2Zmc2V0UGFyZW50KHRhcmdldCk7CiAgICAgIGRlbHRhID0gUG9zaXRpb24u
cGFnZShwYXJlbnQpOwogICAgfQoKICAgIC8vIGNvcnJlY3QgYnkgYm9keSBvZmZz
ZXRzIChmaXhlcyBTYWZhcmkpCiAgICBpZiAocGFyZW50ID09IGRvY3VtZW50LmJv
ZHkpIHsKICAgICAgZGVsdGFbMF0gLT0gZG9jdW1lbnQuYm9keS5vZmZzZXRMZWZ0
OwogICAgICBkZWx0YVsxXSAtPSBkb2N1bWVudC5ib2R5Lm9mZnNldFRvcDsKICAg
IH0KCiAgICAvLyBzZXQgcG9zaXRpb24KICAgIGlmKG9wdGlvbnMuc2V0TGVmdCkg
ICB0YXJnZXQuc3R5bGUubGVmdCAgPSAocFswXSAtIGRlbHRhWzBdICsgb3B0aW9u
cy5vZmZzZXRMZWZ0KSArICdweCc7CiAgICBpZihvcHRpb25zLnNldFRvcCkgICAg
dGFyZ2V0LnN0eWxlLnRvcCAgID0gKHBbMV0gLSBkZWx0YVsxXSArIG9wdGlvbnMu
b2Zmc2V0VG9wKSArICdweCc7CiAgICBpZihvcHRpb25zLnNldFdpZHRoKSAgdGFy
Z2V0LnN0eWxlLndpZHRoID0gc291cmNlLm9mZnNldFdpZHRoICsgJ3B4JzsKICAg
IGlmKG9wdGlvbnMuc2V0SGVpZ2h0KSB0YXJnZXQuc3R5bGUuaGVpZ2h0ID0gc291
cmNlLm9mZnNldEhlaWdodCArICdweCc7CiAgfSwKCiAgYWJzb2x1dGl6ZTogZnVu
Y3Rpb24oZWxlbWVudCkgewogICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICBp
ZiAoZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9PSAnYWJzb2x1dGUnKSByZXR1cm47
CiAgICBQb3NpdGlvbi5wcmVwYXJlKCk7CgogICAgdmFyIG9mZnNldHMgPSBQb3Np
dGlvbi5wb3NpdGlvbmVkT2Zmc2V0KGVsZW1lbnQpOwogICAgdmFyIHRvcCAgICAg
PSBvZmZzZXRzWzFdOwogICAgdmFyIGxlZnQgICAgPSBvZmZzZXRzWzBdOwogICAg
dmFyIHdpZHRoICAgPSBlbGVtZW50LmNsaWVudFdpZHRoOwogICAgdmFyIGhlaWdo
dCAgPSBlbGVtZW50LmNsaWVudEhlaWdodDsKCiAgICBlbGVtZW50Ll9vcmlnaW5h
bExlZnQgICA9IGxlZnQgLSBwYXJzZUZsb2F0KGVsZW1lbnQuc3R5bGUubGVmdCAg
fHwgMCk7CiAgICBlbGVtZW50Ll9vcmlnaW5hbFRvcCAgICA9IHRvcCAgLSBwYXJz
ZUZsb2F0KGVsZW1lbnQuc3R5bGUudG9wIHx8IDApOwogICAgZWxlbWVudC5fb3Jp
Z2luYWxXaWR0aCAgPSBlbGVtZW50LnN0eWxlLndpZHRoOwogICAgZWxlbWVudC5f
b3JpZ2luYWxIZWlnaHQgPSBlbGVtZW50LnN0eWxlLmhlaWdodDsKCiAgICBlbGVt
ZW50LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKICAgIGVsZW1lbnQuc3R5
bGUudG9wICAgID0gdG9wICsgJ3B4Jzs7CiAgICBlbGVtZW50LnN0eWxlLmxlZnQg
ICA9IGxlZnQgKyAncHgnOzsKICAgIGVsZW1lbnQuc3R5bGUud2lkdGggID0gd2lk
dGggKyAncHgnOzsKICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsg
J3B4Jzs7CiAgfSwKCiAgcmVsYXRpdml6ZTogZnVuY3Rpb24oZWxlbWVudCkgewog
ICAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICBpZiAoZWxlbWVudC5zdHlsZS5w
b3NpdGlvbiA9PSAncmVsYXRpdmUnKSByZXR1cm47CiAgICBQb3NpdGlvbi5wcmVw
YXJlKCk7CgogICAgZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7
CiAgICB2YXIgdG9wICA9IHBhcnNlRmxvYXQoZWxlbWVudC5zdHlsZS50b3AgIHx8
IDApIC0gKGVsZW1lbnQuX29yaWdpbmFsVG9wIHx8IDApOwogICAgdmFyIGxlZnQg
PSBwYXJzZUZsb2F0KGVsZW1lbnQuc3R5bGUubGVmdCB8fCAwKSAtIChlbGVtZW50
Ll9vcmlnaW5hbExlZnQgfHwgMCk7CgogICAgZWxlbWVudC5zdHlsZS50b3AgICAg
PSB0b3AgKyAncHgnOwogICAgZWxlbWVudC5zdHlsZS5sZWZ0ICAgPSBsZWZ0ICsg
J3B4JzsKICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gZWxlbWVudC5fb3JpZ2lu
YWxIZWlnaHQ7CiAgICBlbGVtZW50LnN0eWxlLndpZHRoICA9IGVsZW1lbnQuX29y
aWdpbmFsV2lkdGg7CiAgfQp9CgovLyBTYWZhcmkgcmV0dXJucyBtYXJnaW5zIG9u
IGJvZHkgd2hpY2ggaXMgaW5jb3JyZWN0IGlmIHRoZSBjaGlsZCBpcyBhYnNvbHV0
ZWx5Ci8vIHBvc2l0aW9uZWQuICBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgcmVk
ZWZpbmUgUG9zaXRpb24uY3VtdWxhdGl2ZU9mZnNldCBmb3IKLy8gS0hUTUwvV2Vi
S2l0IG9ubHkuCmlmICgvS29ucXVlcm9yfFNhZmFyaXxLSFRNTC8udGVzdChuYXZp
Z2F0b3IudXNlckFnZW50KSkgewogIFBvc2l0aW9uLmN1bXVsYXRpdmVPZmZzZXQg
PSBmdW5jdGlvbihlbGVtZW50KSB7CiAgICB2YXIgdmFsdWVUID0gMCwgdmFsdWVM
ID0gMDsKICAgIGRvIHsKICAgICAgdmFsdWVUICs9IGVsZW1lbnQub2Zmc2V0VG9w
ICB8fCAwOwogICAgICB2YWx1ZUwgKz0gZWxlbWVudC5vZmZzZXRMZWZ0IHx8IDA7
CiAgICAgIGlmIChlbGVtZW50Lm9mZnNldFBhcmVudCA9PSBkb2N1bWVudC5ib2R5
KQogICAgICAgIGlmIChFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQsICdwb3NpdGlv
bicpID09ICdhYnNvbHV0ZScpIGJyZWFrOwoKICAgICAgZWxlbWVudCA9IGVsZW1l
bnQub2Zmc2V0UGFyZW50OwogICAgfSB3aGlsZSAoZWxlbWVudCk7CgogICAgcmV0
dXJuIFt2YWx1ZUwsIHZhbHVlVF07CiAgfQp9Ci8qCVVub2J0cnVzaXZlIEZsYXNo
IE9iamVjdHMgKFVGTykgdjMuMjAgPGh0dHA6Ly93d3cuYm9iYnl2YW5kZXJzbHVp
cy5jb20vdWZvLz4KCUNvcHlyaWdodCAyMDA1LCAyMDA2IEJvYmJ5IHZhbiBkZXIg
U2x1aXMKCVRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDLUdO
VSBMR1BMIDxodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9MR1BM
LzIuMS8+CiovCgp2YXIgVUZPID0gewoJcmVxOiBbIm1vdmllIiwgIndpZHRoIiwg
ImhlaWdodCIsICJtYWpvcnZlcnNpb24iLCAiYnVpbGQiXSwKCW9wdDogWyJwbGF5
IiwgImxvb3AiLCAibWVudSIsICJxdWFsaXR5IiwgInNjYWxlIiwgInNhbGlnbiIs
ICJ3bW9kZSIsICJiZ2NvbG9yIiwgImJhc2UiLCAiZmxhc2h2YXJzIiwgImRldmlj
ZWZvbnQiLCAiYWxsb3dzY3JpcHRhY2Nlc3MiLCAic2VhbWxlc3N0YWJiaW5nIiwg
ImFsbG93ZnVsbHNjcmVlbiJdLAoJb3B0QXR0OiBbImlkIiwgIm5hbWUiLCAiYWxp
Z24iXSwKCW9wdEV4YzogWyJzd2xpdmVjb25uZWN0Il0sCgl4aW1vdmllOiAidWZv
LnN3ZiIsCgl4aXdpZHRoOiAiMjE1IiwKCXhpaGVpZ2h0OiAiMTM4IiwKCXVhOiBu
YXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCksCglwbHVnaW5UeXBlOiAi
IiwKCWZ2OiBbMCwwXSwKCWZvTGlzdDogW10sCgoJY3JlYXRlOiBmdW5jdGlvbihG
TywgaWQpIHsKCQlpZiAoIVVGTy51YUhhcygidzNjZG9tIikgfHwgVUZPLnVhSGFz
KCJpZU1hYyIpKSByZXR1cm47CgkJVUZPLmdldEZsYXNoVmVyc2lvbigpOwoJCVVG
Ty5mb0xpc3RbaWRdID0gVUZPLnVwZGF0ZUZPKEZPKTsKCQlVRk8uY3JlYXRlQ1NT
KCIjIiArIGlkLCAidmlzaWJpbGl0eTpoaWRkZW47Iik7CgkJVUZPLmRvbUxvYWQo
aWQpOwoJfSwKCgl1cGRhdGVGTzogZnVuY3Rpb24oRk8pIHsKCQlpZiAodHlwZW9m
IEZPLnhpICE9ICJ1bmRlZmluZWQiICYmIEZPLnhpID09ICJ0cnVlIikgewoJCQlp
ZiAodHlwZW9mIEZPLnhpbW92aWUgPT0gInVuZGVmaW5lZCIpIEZPLnhpbW92aWUg
PSBVRk8ueGltb3ZpZTsKCQkJaWYgKHR5cGVvZiBGTy54aXdpZHRoID09ICJ1bmRl
ZmluZWQiKSBGTy54aXdpZHRoID0gVUZPLnhpd2lkdGg7CgkJCWlmICh0eXBlb2Yg
Rk8ueGloZWlnaHQgPT0gInVuZGVmaW5lZCIpIEZPLnhpaGVpZ2h0ID0gVUZPLnhp
aGVpZ2h0OwoJCX0KCQlGTy5tYWluQ2FsbGVkID0gZmFsc2U7CgkJcmV0dXJuIEZP
OwoJfSwKCglkb21Mb2FkOiBmdW5jdGlvbihpZCkgewoJCXZhciBfdCA9IHNldElu
dGVydmFsKGZ1bmN0aW9uKCkgewoJCQlpZiAoKGRvY3VtZW50LmdldEVsZW1lbnRz
QnlUYWdOYW1lKCJib2R5IilbMF0gIT0gbnVsbCB8fCBkb2N1bWVudC5ib2R5ICE9
IG51bGwpICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSAhPSBudWxsKSB7
CgkJCQlVRk8ubWFpbihpZCk7CgkJCQljbGVhckludGVydmFsKF90KTsKCQkJfQoJ
CX0sIDI1MCk7CgkJaWYgKHR5cGVvZiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVy
ICE9ICJ1bmRlZmluZWQiKSB7CgkJCWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIo
IkRPTUNvbnRlbnRMb2FkZWQiLCBmdW5jdGlvbigpIHsgVUZPLm1haW4oaWQpOyBj
bGVhckludGVydmFsKF90KTsgfSAsIG51bGwpOyAvLyBHZWNrbywgT3BlcmEgOSsK
CQl9Cgl9LAoKCW1haW46IGZ1bmN0aW9uKGlkKSB7CgkJdmFyIF9mbyA9IFVGTy5m
b0xpc3RbaWRdOwoJCWlmIChfZm8ubWFpbkNhbGxlZCkgcmV0dXJuOwoJCVVGTy5m
b0xpc3RbaWRdLm1haW5DYWxsZWQgPSB0cnVlOwoJCWRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKGlkKS5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CgkJaWYgKFVG
Ty5oYXNSZXF1aXJlZChpZCkpIHsKCQkJaWYgKFVGTy5oYXNGbGFzaFZlcnNpb24o
cGFyc2VJbnQoX2ZvLm1ham9ydmVyc2lvbiwgMTApLCBwYXJzZUludChfZm8uYnVp
bGQsIDEwKSkpIHsKCQkJCWlmICh0eXBlb2YgX2ZvLnNldGNvbnRhaW5lcmNzcyAh
PSAidW5kZWZpbmVkIiAmJiBfZm8uc2V0Y29udGFpbmVyY3NzID09ICJ0cnVlIikg
VUZPLnNldENvbnRhaW5lckNTUyhpZCk7CgkJCQlVRk8ud3JpdGVTV0YoaWQpOwoJ
CQl9CgkJCWVsc2UgaWYgKF9mby54aSA9PSAidHJ1ZSIgJiYgVUZPLmhhc0ZsYXNo
VmVyc2lvbig2LCA2NSkpIHsKCQkJCVVGTy5jcmVhdGVEaWFsb2coaWQpOwoJCQl9
CgkJfQoJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS52aXNpYmls
aXR5ID0gInZpc2libGUiOwoJfSwKCgljcmVhdGVDU1M6IGZ1bmN0aW9uKHNlbGVj
dG9yLCBkZWNsYXJhdGlvbikgewoJCXZhciBfaCA9IGRvY3VtZW50LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCJoZWFkIilbMF07CgkJdmFyIF9zID0gVUZPLmNyZWF0ZUVs
ZW1lbnQoInN0eWxlIik7CgkJaWYgKCFVRk8udWFIYXMoImllV2luIikpIF9zLmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHNlbGVjdG9yICsgIiB7
IiArIGRlY2xhcmF0aW9uICsgIn0iKSk7IC8vIGJ1Z3MgaW4gSUUvV2luCgkJX3Mu
c2V0QXR0cmlidXRlKCJ0eXBlIiwgInRleHQvY3NzIik7CgkJX3Muc2V0QXR0cmli
dXRlKCJtZWRpYSIsICJzY3JlZW4iKTsKCQlfaC5hcHBlbmRDaGlsZChfcyk7CgkJ
aWYgKFVGTy51YUhhcygiaWVXaW4iKSAmJiBkb2N1bWVudC5zdHlsZVNoZWV0cyAm
JiBkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGggPiAwKSB7CgkJCXZhciBfbHMg
PSBkb2N1bWVudC5zdHlsZVNoZWV0c1tkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5n
dGggLSAxXTsKCQkJaWYgKHR5cGVvZiBfbHMuYWRkUnVsZSA9PSAib2JqZWN0Iikg
X2xzLmFkZFJ1bGUoc2VsZWN0b3IsIGRlY2xhcmF0aW9uKTsKCQl9Cgl9LAoKCXNl
dENvbnRhaW5lckNTUzogZnVuY3Rpb24oaWQpIHsKCQl2YXIgX2ZvID0gVUZPLmZv
TGlzdFtpZF07CgkJdmFyIF93ID0gLyUvLnRlc3QoX2ZvLndpZHRoKSA/ICIiIDog
InB4IjsKCQl2YXIgX2ggPSAvJS8udGVzdChfZm8uaGVpZ2h0KSA/ICIiIDogInB4
IjsKCQlVRk8uY3JlYXRlQ1NTKCIjIiArIGlkLCAid2lkdGg6IiArIF9mby53aWR0
aCArIF93ICsiOyBoZWlnaHQ6IiArIF9mby5oZWlnaHQgKyBfaCArIjsiKTsKCQlp
ZiAoX2ZvLndpZHRoID09ICIxMDAlIikgewoJCQlVRk8uY3JlYXRlQ1NTKCJib2R5
IiwgIm1hcmdpbi1sZWZ0OjA7IG1hcmdpbi1yaWdodDowOyBwYWRkaW5nLWxlZnQ6
MDsgcGFkZGluZy1yaWdodDowOyIpOwoJCX0KCQlpZiAoX2ZvLmhlaWdodCA9PSAi
MTAwJSIpIHsKCQkJVUZPLmNyZWF0ZUNTUygiaHRtbCIsICJoZWlnaHQ6MTAwJTsg
b3ZlcmZsb3c6aGlkZGVuOyIpOwoJCQlVRk8uY3JlYXRlQ1NTKCJib2R5IiwgIm1h
cmdpbi10b3A6MDsgbWFyZ2luLWJvdHRvbTowOyBwYWRkaW5nLXRvcDowOyBwYWRk
aW5nLWJvdHRvbTowOyBoZWlnaHQ6MTAwJTsiKTsKCQl9Cgl9LAoKCWNyZWF0ZUVs
ZW1lbnQ6IGZ1bmN0aW9uKGVsKSB7CgkJcmV0dXJuIChVRk8udWFIYXMoInhtbCIp
ICYmIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMgIT0gInVuZGVmaW5l
ZCIpID8gIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5v
cmcvMTk5OS94aHRtbCIsIGVsKSA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWwp
OwoJfSwKCgljcmVhdGVPYmpQYXJhbTogZnVuY3Rpb24oZWwsIGFOYW1lLCBhVmFs
dWUpIHsKCQl2YXIgX3AgPSBVRk8uY3JlYXRlRWxlbWVudCgicGFyYW0iKTsKCQlf
cC5zZXRBdHRyaWJ1dGUoIm5hbWUiLCBhTmFtZSk7CgkJX3Auc2V0QXR0cmlidXRl
KCJ2YWx1ZSIsIGFWYWx1ZSk7CgkJZWwuYXBwZW5kQ2hpbGQoX3ApOwoJfSwKCgl1
YUhhczogZnVuY3Rpb24oZnQpIHsKCQl2YXIgX3UgPSBVRk8udWE7CgkJc3dpdGNo
KGZ0KSB7CgkJCWNhc2UgInczY2RvbSI6CgkJCQlyZXR1cm4gKHR5cGVvZiBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCAhPSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgZG9j
dW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT0gInVuZGVmaW5lZCIgJiYgKHR5
cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50ICE9ICJ1bmRlZmluZWQiIHx8IHR5
cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMgIT0gInVuZGVmaW5lZCIpKTsK
CQkJY2FzZSAieG1sIjoKCQkJCXZhciBfbSA9IGRvY3VtZW50LmdldEVsZW1lbnRz
QnlUYWdOYW1lKCJtZXRhIik7CgkJCQl2YXIgX2wgPSBfbS5sZW5ndGg7CgkJCQlm
b3IgKHZhciBpID0gMDsgaSA8IF9sOyBpKyspIHsKCQkJCQlpZiAoL2NvbnRlbnQt
dHlwZS9pLnRlc3QoX21baV0uZ2V0QXR0cmlidXRlKCJodHRwLWVxdWl2IikpICYm
IC94bWwvaS50ZXN0KF9tW2ldLmdldEF0dHJpYnV0ZSgiY29udGVudCIpKSkgcmV0
dXJuIHRydWU7CgkJCQl9CgkJCQlyZXR1cm4gZmFsc2U7CgkJCWNhc2UgImllTWFj
IjoKCQkJCXJldHVybiAvbXNpZS8udGVzdChfdSkgJiYgIS9vcGVyYS8udGVzdChf
dSkgJiYgL21hYy8udGVzdChfdSk7CgkJCWNhc2UgImllV2luIjoKCQkJCXJldHVy
biAvbXNpZS8udGVzdChfdSkgJiYgIS9vcGVyYS8udGVzdChfdSkgJiYgL3dpbi8u
dGVzdChfdSk7CgkJCWNhc2UgImdlY2tvIjoKCQkJCXJldHVybiAvZ2Vja28vLnRl
c3QoX3UpICYmICEvYXBwbGV3ZWJraXQvLnRlc3QoX3UpOwoJCQljYXNlICJvcGVy
YSI6CgkJCQlyZXR1cm4gL29wZXJhLy50ZXN0KF91KTsKCQkJY2FzZSAic2FmYXJp
IjoKCQkJCXJldHVybiAvYXBwbGV3ZWJraXQvLnRlc3QoX3UpOwoJCQlkZWZhdWx0
OgoJCQkJcmV0dXJuIGZhbHNlOwoJCX0KCX0sCgoJZ2V0Rmxhc2hWZXJzaW9uOiBm
dW5jdGlvbigpIHsKCQlpZiAoVUZPLmZ2WzBdICE9IDApIHJldHVybjsKCQlpZiAo
bmF2aWdhdG9yLnBsdWdpbnMgJiYgdHlwZW9mIG5hdmlnYXRvci5wbHVnaW5zWyJT
aG9ja3dhdmUgRmxhc2giXSA9PSAib2JqZWN0IikgewoJCQlVRk8ucGx1Z2luVHlw
ZSA9ICJucGFwaSI7CgkJCXZhciBfZCA9IG5hdmlnYXRvci5wbHVnaW5zWyJTaG9j
a3dhdmUgRmxhc2giXS5kZXNjcmlwdGlvbjsKCQkJaWYgKHR5cGVvZiBfZCAhPSAi
dW5kZWZpbmVkIikgewoJCQkJX2QgPSBfZC5yZXBsYWNlKC9eLipccysoXFMrXHMr
XFMrJCkvLCAiJDEiKTsKCQkJCXZhciBfbSA9IHBhcnNlSW50KF9kLnJlcGxhY2Uo
L14oLiopXC4uKiQvLCAiJDEiKSwgMTApOwoJCQkJdmFyIF9yID0gL3IvLnRlc3Qo
X2QpID8gcGFyc2VJbnQoX2QucmVwbGFjZSgvXi4qciguKikkLywgIiQxIiksIDEw
KSA6IDA7CgkJCQlVRk8uZnYgPSBbX20sIF9yXTsKCQkJfQoJCX0KCQllbHNlIGlm
ICh3aW5kb3cuQWN0aXZlWE9iamVjdCkgewoJCQlVRk8ucGx1Z2luVHlwZSA9ICJh
eCI7CgkJCXRyeSB7IC8vIGF2b2lkIGZwIDYgY3Jhc2hlcwoJCQkJdmFyIF9hID0g
bmV3IEFjdGl2ZVhPYmplY3QoIlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNo
LjciKTsKCQkJfQoJCQljYXRjaChlKSB7CgkJCQl0cnkgewoJCQkJCXZhciBfYSA9
IG5ldyBBY3RpdmVYT2JqZWN0KCJTaG9ja3dhdmVGbGFzaC5TaG9ja3dhdmVGbGFz
aC42Iik7CgkJCQkJVUZPLmZ2ID0gWzYsIDBdOwoJCQkJCV9hLkFsbG93U2NyaXB0
QWNjZXNzID0gImFsd2F5cyI7IC8vIHRocm93cyBpZiBmcCA8IDYuNDcKCQkJCX0K
CQkJCWNhdGNoKGUpIHsKCQkJCQlpZiAoVUZPLmZ2WzBdID09IDYpIHJldHVybjsK
CQkJCX0KCQkJCXRyeSB7CgkJCQkJdmFyIF9hID0gbmV3IEFjdGl2ZVhPYmplY3Qo
IlNob2Nrd2F2ZUZsYXNoLlNob2Nrd2F2ZUZsYXNoIik7CgkJCQl9CgkJCQljYXRj
aChlKSB7fQoJCQl9CgkJCWlmICh0eXBlb2YgX2EgPT0gIm9iamVjdCIpIHsKCQkJ
CXZhciBfZCA9IF9hLkdldFZhcmlhYmxlKCIkdmVyc2lvbiIpOyAvLyBidWdzIGlu
IGZwIDYuMjEvNi4yMwoJCQkJaWYgKHR5cGVvZiBfZCAhPSAidW5kZWZpbmVkIikg
ewoJCQkJCV9kID0gX2QucmVwbGFjZSgvXlxTK1xzKyguKikkLywgIiQxIikuc3Bs
aXQoIiwiKTsKCQkJCQlVRk8uZnYgPSBbcGFyc2VJbnQoX2RbMF0sIDEwKSwgcGFy
c2VJbnQoX2RbMl0sIDEwKV07CgkJCQl9CgkJCX0KCQl9Cgl9LAoKCWhhc1JlcXVp
cmVkOiBmdW5jdGlvbihpZCkgewoJCXZhciBfbCA9IFVGTy5yZXEubGVuZ3RoOwoJ
CWZvciAodmFyIGkgPSAwOyBpIDwgX2w7IGkrKykgewoJCQlpZiAodHlwZW9mIFVG
Ty5mb0xpc3RbaWRdW1VGTy5yZXFbaV1dID09ICJ1bmRlZmluZWQiKSByZXR1cm4g
ZmFsc2U7CgkJfQoJCXJldHVybiB0cnVlOwoJfSwKCgloYXNGbGFzaFZlcnNpb246
IGZ1bmN0aW9uKG1ham9yLCByZWxlYXNlKSB7CgkJcmV0dXJuIChVRk8uZnZbMF0g
PiBtYWpvciB8fCAoVUZPLmZ2WzBdID09IG1ham9yICYmIFVGTy5mdlsxXSA+PSBy
ZWxlYXNlKSkgPyB0cnVlIDogZmFsc2U7Cgl9LAoKCXdyaXRlU1dGOiBmdW5jdGlv
bihpZCkgewoJCXZhciBfZm8gPSBVRk8uZm9MaXN0W2lkXTsKCQl2YXIgX2UgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CgkJaWYgKFVGTy5wbHVnaW5UeXBl
ID09ICJucGFwaSIpIHsKCQkJaWYgKFVGTy51YUhhcygiZ2Vja28iKSB8fCBVRk8u
dWFIYXMoInhtbCIpKSB7CgkJCQl3aGlsZShfZS5oYXNDaGlsZE5vZGVzKCkpIHsK
CQkJCQlfZS5yZW1vdmVDaGlsZChfZS5maXJzdENoaWxkKTsKCQkJCX0KCQkJCXZh
ciBfb2JqID0gVUZPLmNyZWF0ZUVsZW1lbnQoIm9iamVjdCIpOwoJCQkJX29iai5z
ZXRBdHRyaWJ1dGUoInR5cGUiLCAiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxh
c2giKTsKCQkJCV9vYmouc2V0QXR0cmlidXRlKCJkYXRhIiwgX2ZvLm1vdmllKTsK
CQkJCV9vYmouc2V0QXR0cmlidXRlKCJ3aWR0aCIsIF9mby53aWR0aCk7CgkJCQlf
b2JqLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IiwgX2ZvLmhlaWdodCk7CgkJCQl2YXIg
X2wgPSBVRk8ub3B0QXR0Lmxlbmd0aDsKCQkJCWZvciAodmFyIGkgPSAwOyBpIDwg
X2w7IGkrKykgewoJCQkJCWlmICh0eXBlb2YgX2ZvW1VGTy5vcHRBdHRbaV1dICE9
ICJ1bmRlZmluZWQiKSBfb2JqLnNldEF0dHJpYnV0ZShVRk8ub3B0QXR0W2ldLCBf
Zm9bVUZPLm9wdEF0dFtpXV0pOwoJCQkJfQoJCQkJdmFyIF9vID0gVUZPLm9wdC5j
b25jYXQoVUZPLm9wdEV4Yyk7CgkJCQl2YXIgX2wgPSBfby5sZW5ndGg7CgkJCQlm
b3IgKHZhciBpID0gMDsgaSA8IF9sOyBpKyspIHsKCQkJCQlpZiAodHlwZW9mIF9m
b1tfb1tpXV0gIT0gInVuZGVmaW5lZCIpIFVGTy5jcmVhdGVPYmpQYXJhbShfb2Jq
LCBfb1tpXSwgX2ZvW19vW2ldXSk7CgkJCQl9CgkJCQlfZS5hcHBlbmRDaGlsZChf
b2JqKTsKCQkJfQoJCQllbHNlIHsKCQkJCXZhciBfZW1iID0gIiI7CgkJCQl2YXIg
X28gPSBVRk8ub3B0LmNvbmNhdChVRk8ub3B0QXR0KS5jb25jYXQoVUZPLm9wdEV4
Yyk7CgkJCQl2YXIgX2wgPSBfby5sZW5ndGg7CgkJCQlmb3IgKHZhciBpID0gMDsg
aSA8IF9sOyBpKyspIHsKCQkJCQlpZiAodHlwZW9mIF9mb1tfb1tpXV0gIT0gInVu
ZGVmaW5lZCIpIF9lbWIgKz0gJyAnICsgX29baV0gKyAnPSInICsgX2ZvW19vW2ld
XSArICciJzsKCQkJCX0KCQkJCV9lLmlubmVySFRNTCA9ICc8ZW1iZWQgdHlwZT0i
YXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giIHNyYz0iJyArIF9mby5tb3Zp
ZSArICciIHdpZHRoPSInICsgX2ZvLndpZHRoICsgJyIgaGVpZ2h0PSInICsgX2Zv
LmhlaWdodCArICciIHBsdWdpbnNwYWdlPSJodHRwOi8vd3d3Lm1hY3JvbWVkaWEu
Y29tL2dvL2dldGZsYXNocGxheWVyIicgKyBfZW1iICsgJz48L2VtYmVkPic7CgkJ
CX0KCQl9CgkJZWxzZSBpZiAoVUZPLnBsdWdpblR5cGUgPT0gImF4IikgewoJCQl2
YXIgX29iakF0dCA9ICIiOwoJCQl2YXIgX2wgPSBVRk8ub3B0QXR0Lmxlbmd0aDsK
CQkJZm9yICh2YXIgaSA9IDA7IGkgPCBfbDsgaSsrKSB7CgkJCQlpZiAodHlwZW9m
IF9mb1tVRk8ub3B0QXR0W2ldXSAhPSAidW5kZWZpbmVkIikgX29iakF0dCArPSAn
ICcgKyBVRk8ub3B0QXR0W2ldICsgJz0iJyArIF9mb1tVRk8ub3B0QXR0W2ldXSAr
ICciJzsKCQkJfQoJCQl2YXIgX29ialBhciA9ICIiOwoJCQl2YXIgX2wgPSBVRk8u
b3B0Lmxlbmd0aDsKCQkJZm9yICh2YXIgaSA9IDA7IGkgPCBfbDsgaSsrKSB7CgkJ
CQlpZiAodHlwZW9mIF9mb1tVRk8ub3B0W2ldXSAhPSAidW5kZWZpbmVkIikgX29i
alBhciArPSAnPHBhcmFtIG5hbWU9IicgKyBVRk8ub3B0W2ldICsgJyIgdmFsdWU9
IicgKyBfZm9bVUZPLm9wdFtpXV0gKyAnIiAvPic7CgkJCX0KCQkJdmFyIF9wID0g
d2luZG93LmxvY2F0aW9uLnByb3RvY29sID09ICJodHRwczoiID8gImh0dHBzOiIg
OiAiaHR0cDoiOwoJCQlfZS5pbm5lckhUTUwgPSAnPG9iamVjdCBjbGFzc2lkPSJj
bHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiJyArIF9v
YmpBdHQgKyAnIHdpZHRoPSInICsgX2ZvLndpZHRoICsgJyIgaGVpZ2h0PSInICsg
X2ZvLmhlaWdodCArICciIGNvZGViYXNlPSInICsgX3AgKyAnLy9kb3dubG9hZC5t
YWNyb21lZGlhLmNvbS9wdWIvc2hvY2t3YXZlL2NhYnMvZmxhc2gvc3dmbGFzaC5j
YWIjdmVyc2lvbj0nICsgX2ZvLm1ham9ydmVyc2lvbiArICcsMCwnICsgX2ZvLmJ1
aWxkICsgJywwIj48cGFyYW0gbmFtZT0ibW92aWUiIHZhbHVlPSInICsgX2ZvLm1v
dmllICsgJyIgLz4nICsgX29ialBhciArICc8L29iamVjdD4nOwoJCX0KCX0sCgoJ
Y3JlYXRlRGlhbG9nOiBmdW5jdGlvbihpZCkgewoJCXZhciBfZm8gPSBVRk8uZm9M
aXN0W2lkXTsKCQlVRk8uY3JlYXRlQ1NTKCJodG1sIiwgImhlaWdodDoxMDAlOyBv
dmVyZmxvdzpoaWRkZW47Iik7CgkJVUZPLmNyZWF0ZUNTUygiYm9keSIsICJoZWln
aHQ6MTAwJTsgb3ZlcmZsb3c6aGlkZGVuOyIpOwoJCVVGTy5jcmVhdGVDU1MoIiN4
aS1jb24iLCAicG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MDsgdG9wOjA7IHotaW5k
ZXg6MTAwMDsgd2lkdGg6MTAwJTsgaGVpZ2h0OjEwMCU7IGJhY2tncm91bmQtY29s
b3I6I2ZmZjsgZmlsdGVyOmFscGhhKG9wYWNpdHk6NzUpOyBvcGFjaXR5OjAuNzU7
Iik7CgkJVUZPLmNyZWF0ZUNTUygiI3hpLWRpYSIsICJwb3NpdGlvbjphYnNvbHV0
ZTsgbGVmdDo1MCU7IHRvcDo1MCU7IG1hcmdpbi1sZWZ0OiAtIiArIE1hdGgucm91
bmQocGFyc2VJbnQoX2ZvLnhpd2lkdGgsIDEwKSAvIDIpICsgInB4OyBtYXJnaW4t
dG9wOiAtIiArIE1hdGgucm91bmQocGFyc2VJbnQoX2ZvLnhpaGVpZ2h0LCAxMCkg
LyAyKSArICJweDsgd2lkdGg6IiArIF9mby54aXdpZHRoICsgInB4OyBoZWlnaHQ6
IiArIF9mby54aWhlaWdodCArICJweDsiKTsKCQl2YXIgX2IgPSBkb2N1bWVudC5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdOwoJCXZhciBfYyA9IFVGTy5j
cmVhdGVFbGVtZW50KCJkaXYiKTsKCQlfYy5zZXRBdHRyaWJ1dGUoImlkIiwgInhp
LWNvbiIpOwoJCXZhciBfZCA9IFVGTy5jcmVhdGVFbGVtZW50KCJkaXYiKTsKCQlf
ZC5zZXRBdHRyaWJ1dGUoImlkIiwgInhpLWRpYSIpOwoJCV9jLmFwcGVuZENoaWxk
KF9kKTsKCQlfYi5hcHBlbmRDaGlsZChfYyk7CgkJdmFyIF9tbXUgPSB3aW5kb3cu
bG9jYXRpb247CgkJaWYgKFVGTy51YUhhcygieG1sIikgJiYgVUZPLnVhSGFzKCJz
YWZhcmkiKSkgewoJCQl2YXIgX21tZCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlU
YWdOYW1lKCJ0aXRsZSIpWzBdLmZpcnN0Q2hpbGQubm9kZVZhbHVlID0gZG9jdW1l
bnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRpdGxlIilbMF0uZmlyc3RDaGlsZC5u
b2RlVmFsdWUuc2xpY2UoMCwgNDcpICsgIiAtIEZsYXNoIFBsYXllciBJbnN0YWxs
YXRpb24iOwoJCX0KCQllbHNlIHsKCQkJdmFyIF9tbWQgPSBkb2N1bWVudC50aXRs
ZSA9IGRvY3VtZW50LnRpdGxlLnNsaWNlKDAsIDQ3KSArICIgLSBGbGFzaCBQbGF5
ZXIgSW5zdGFsbGF0aW9uIjsKCQl9CgkJdmFyIF9tbXAgPSBVRk8ucGx1Z2luVHlw
ZSA9PSAiYXgiID8gIkFjdGl2ZVgiIDogIlBsdWdJbiI7CgkJdmFyIF91YyA9IHR5
cGVvZiBfZm8ueGl1cmxjYW5jZWwgIT0gInVuZGVmaW5lZCIgPyAiJnhpVXJsQ2Fu
Y2VsPSIgKyBfZm8ueGl1cmxjYW5jZWwgOiAiIjsKCQl2YXIgX3VmID0gdHlwZW9m
IF9mby54aXVybGZhaWxlZCAhPSAidW5kZWZpbmVkIiA/ICImeGlVcmxGYWlsZWQ9
IiArIF9mby54aXVybGZhaWxlZCA6ICIiOwoJCVVGTy5mb0xpc3RbInhpLWRpYSJd
ID0geyBtb3ZpZTpfZm8ueGltb3ZpZSwgd2lkdGg6X2ZvLnhpd2lkdGgsIGhlaWdo
dDpfZm8ueGloZWlnaHQsIG1ham9ydmVyc2lvbjoiNiIsIGJ1aWxkOiI2NSIsIGZs
YXNodmFyczoiTU1yZWRpcmVjdFVSTD0iICsgX21tdSArICImTU1wbGF5ZXJUeXBl
PSIgKyBfbW1wICsgIiZNTWRvY3RpdGxlPSIgKyBfbW1kICsgX3VjICsgX3VmIH07
CgkJVUZPLndyaXRlU1dGKCJ4aS1kaWEiKTsKCX0sCgoJZXhwcmVzc0luc3RhbGxD
YWxsYmFjazogZnVuY3Rpb24oKSB7CgkJdmFyIF9iID0gZG9jdW1lbnQuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTsKCQl2YXIgX2MgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgieGktY29uIik7CgkJX2IucmVtb3ZlQ2hpbGQoX2MpOwoJ
CVVGTy5jcmVhdGVDU1MoImJvZHkiLCAiaGVpZ2h0OmF1dG87IG92ZXJmbG93OmF1
dG87Iik7CgkJVUZPLmNyZWF0ZUNTUygiaHRtbCIsICJoZWlnaHQ6YXV0bzsgb3Zl
cmZsb3c6YXV0bzsiKTsKCX0sCgoJY2xlYW51cElFTGVha3M6IGZ1bmN0aW9uKCkg
ewoJCXZhciBfbyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJvYmpl
Y3QiKTsKCQl2YXIgX2wgPSBfby5sZW5ndGgKCQlmb3IgKHZhciBpID0gMDsgaSA8
IF9sOyBpKyspIHsKCQkJX29baV0uc3R5bGUuZGlzcGxheSA9ICJub25lIjsKCQkJ
Zm9yICh2YXIgeCBpbiBfb1tpXSkgewoJCQkJaWYgKHR5cGVvZiBfb1tpXVt4XSA9
PSAiZnVuY3Rpb24iKSB7CgkJCQkJX29baV1beF0gPSBudWxsOwoJCQkJfQoJCQl9
CgkJfQoJfQoKfTsKCmlmICh0eXBlb2Ygd2luZG93LmF0dGFjaEV2ZW50ICE9ICJ1
bmRlZmluZWQiICYmIFVGTy51YUhhcygiaWVXaW4iKSkgewoJd2luZG93LmF0dGFj
aEV2ZW50KCJvbnVubG9hZCIsIFVGTy5jbGVhbnVwSUVMZWFrcyk7Cn0KCi8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vCi8vCUxpZ2h0Ym94
IHYyLjAyCi8vCWJ5IExva2VzaCBEaGFrYXIgLSBodHRwOi8vd3d3Lmh1ZGRsZXRv
Z2V0aGVyLmNvbQovLwkzLzMxLzA2Ci8vCi8vCUZvciBtb3JlIGluZm9ybWF0aW9u
IG9uIHRoaXMgc2NyaXB0LCB2aXNpdDoKLy8JaHR0cDovL2h1ZGRsZXRvZ2V0aGVy
LmNvbS9wcm9qZWN0cy9saWdodGJveDIvCi8vCi8vCUxpY2Vuc2VkIHVuZGVyIHRo
ZSBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uIDIuNSBMaWNlbnNlIC0gaHR0
cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMi41LwovLwovLwlD
cmVkaXQgYWxzbyBkdWUgdG8gdGhvc2Ugd2hvIGhhdmUgaGVscGVkLCBpbnNwaXJl
ZCwgYW5kIG1hZGUgdGhlaXIgY29kZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYy4K
Ly8JSW5jbHVkaW5nOiBTY290dCBVcHRvbih1cHRvbmljLmNvbSksIFBldGVyLVBh
dWwgS29jaChxdWlya3Ntb2RlLm9yZyksIFRob21hcyBGdWNocyhtaXIuYWN1bG8u
dXMpLCBhbmQgb3RoZXJzLgovLwovLwovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQovKgoKCVRhYmxlIG9mIENvbnRlbnRzCgktLS0tLS0tLS0t
LS0tLS0tLQoJQ29uZmlndXJhdGlvbgoJR2xvYmFsIFZhcmlhYmxlcwoKCUV4dGVu
ZGluZyBCdWlsdC1pbiBPYmplY3RzCgktIE9iamVjdC5leHRlbmQoRWxlbWVudCkK
CS0gQXJyYXkucHJvdG90eXBlLnJlbW92ZUR1cGxpY2F0ZXMoKQoJLSBBcnJheS5w
cm90b3R5cGUuZW1wdHkoKQoKCUxpZ2h0Ym94IENsYXNzIERlY2xhcmF0aW9uCgkt
IGluaXRpYWxpemUoKQoJLSBzdGFydCgpCgktIGNoYW5nZUltYWdlKCkKCS0gcmVz
aXplSW1hZ2VDb250YWluZXIoKQoJLSBzaG93SW1hZ2UoKQoJLSB1cGRhdGVEZXRh
aWxzKCkKCS0gdXBkYXRlTmF2KCkKCS0gZW5hYmxlS2V5Ym9hcmROYXYoKQoJLSBk
aXNhYmxlS2V5Ym9hcmROYXYoKQoJLSBrZXlib2FyZEFjdGlvbigpCgktIHByZWxv
YWROZWlnaGJvckltYWdlcygpCgktIGVuZCgpCgoJTWlzY2VsbGFuZW91cyBGdW5j
dGlvbnMKCS0gZ2V0UGFnZVNjcm9sbCgpCgktIGdldFBhZ2VTaXplKCkKCS0gZ2V0
S2V5KCkKCS0gbGlzdGVuS2V5KCkKCS0gc2hvd1NlbGVjdEJveGVzKCkKCS0gaGlk
ZVNlbGVjdEJveGVzKCkKCS0gcGF1c2UoKQoJLSBpbml0TGlnaHRib3goKQoKCUZ1
bmN0aW9uIENhbGxzCgktIGFkZExvYWRFdmVudChpbml0TGlnaHRib3gpCgoqLwov
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8KLy8JQ29u
ZmlndXJhdGlvbgovLwp2YXIgZmlsZUxvYWRpbmdJbWFnZSA9IGJvYXJkX3RlbXBs
YXRlX3VybCArICdpbWcvbGlnaHRib3gvbG9hZGluZy5naWYnOwp2YXIgZmlsZUJv
dHRvbU5hdkNsb3NlSW1hZ2UgPSBib2FyZF90ZW1wbGF0ZV91cmwgKyAnaW1nL2xp
Z2h0Ym94L2Nsb3NlbGFiZWwuZ2lmJzsKCnZhciByZXNpemVTcGVlZCA9IDc7CS8v
IGNvbnRyb2xzIHRoZSBzcGVlZCBvZiB0aGUgaW1hZ2UgcmVzaXppbmcgKDE9c2xv
d2VzdCBhbmQgMTA9ZmFzdGVzdCkKCnZhciBib3JkZXJTaXplID0gMTA7CS8vaWYg
eW91IGFkanVzdCB0aGUgcGFkZGluZyBpbiB0aGUgQ1NTLCB5b3Ugd2lsbCBuZWVk
IHRvIHVwZGF0ZSB0aGlzIHZhcmlhYmxlCgovLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQoKLy8KLy8JR2xvYmFsIFZhcmlhYmxlcwovLwp2YXIg
aW1hZ2VBcnJheSA9IG5ldyBBcnJheTsKdmFyIGFjdGl2ZUltYWdlOwoKaWYocmVz
aXplU3BlZWQgPiAxMCl7IHJlc2l6ZVNwZWVkID0gMTA7fQppZihyZXNpemVTcGVl
ZCA8IDEpeyByZXNpemVTcGVlZCA9IDE7fQpyZXNpemVEdXJhdGlvbiA9ICgxMSAt
IHJlc2l6ZVNwZWVkKSAqIDAuMTU7CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQoKLy8KLy8JQWRkaXRpb25hbCBtZXRob2RzIGZvciBFbGVt
ZW50IGFkZGVkIGJ5IFNVLCBDb3Vsb2lyCi8vCS0gZnVydGhlciBhZGRpdGlvbnMg
YnkgTG9rZXNoIERoYWthciAoaHVkZGxldG9nZXRoZXIuY29tKQovLwpPYmplY3Qu
ZXh0ZW5kKEVsZW1lbnQsIHsKCWdldFdpZHRoOiBmdW5jdGlvbihlbGVtZW50KSB7
CgkgICAJZWxlbWVudCA9ICQoZWxlbWVudCk7CgkgICAJcmV0dXJuIGVsZW1lbnQu
b2Zmc2V0V2lkdGg7Cgl9LAoJc2V0V2lkdGg6IGZ1bmN0aW9uKGVsZW1lbnQsdykg
ewoJICAgCWVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgCWVsZW1lbnQuc3R5bGUu
d2lkdGggPSB3ICsicHgiOwoJfSwKCXNldEhlaWdodDogZnVuY3Rpb24oZWxlbWVu
dCxoKSB7CiAgIAkJZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICAJZWxlbWVudC5z
dHlsZS5oZWlnaHQgPSBoICsicHgiOwoJfSwKCXNldFRvcDogZnVuY3Rpb24oZWxl
bWVudCx0KSB7CgkgICAJZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICAJZWxlbWVu
dC5zdHlsZS50b3AgPSB0ICsicHgiOwoJfSwKCXNldFNyYzogZnVuY3Rpb24oZWxl
bWVudCxzcmMpIHsKICAgIAllbGVtZW50ID0gJChlbGVtZW50KTsKICAgIAllbGVt
ZW50LnNyYyA9IHNyYzsKCX0sCglzZXRIcmVmOiBmdW5jdGlvbihlbGVtZW50LGhy
ZWYpIHsKICAgIAllbGVtZW50ID0gJChlbGVtZW50KTsKICAgIAllbGVtZW50Lmhy
ZWYgPSBocmVmOwoJfSwKCXNldElubmVySFRNTDogZnVuY3Rpb24oZWxlbWVudCxj
b250ZW50KSB7CgkJZWxlbWVudCA9ICQoZWxlbWVudCk7CgkJZWxlbWVudC5pbm5l
ckhUTUwgPSBjb250ZW50OwoJfQp9KTsKCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCgovLwovLwlFeHRlbmRpbmcgYnVpbHQtaW4gQXJyYXkg
b2JqZWN0Ci8vCS0gYXJyYXkucmVtb3ZlRHVwbGljYXRlcygpCi8vCS0gYXJyYXku
ZW1wdHkoKQovLwpBcnJheS5wcm90b3R5cGUucmVtb3ZlRHVwbGljYXRlcyA9IGZ1
bmN0aW9uICgpIHsKCWZvcihpID0gMTsgaSA8IHRoaXMubGVuZ3RoOyBpKyspewoJ
CWlmKHRoaXNbaV1bMF0gPT0gdGhpc1tpLTFdWzBdKXsKCQkJdGhpcy5zcGxpY2Uo
aSwxKTsKCQl9Cgl9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCgpBcnJheS5wcm90b3R5cGUuZW1wdHkgPSBmdW5jdGlvbiAoKSB7Cglm
b3IoaSA9IDA7IGkgPD0gdGhpcy5sZW5ndGg7IGkrKyl7CgkJdGhpcy5zaGlmdCgp
OwoJfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoK
Ly8KLy8JTGlnaHRib3ggQ2xhc3MgRGVjbGFyYXRpb24KLy8JLSBpbml0aWFsaXpl
KCkKLy8JLSBzdGFydCgpCi8vCS0gY2hhbmdlSW1hZ2UoKQovLwktIHJlc2l6ZUlt
YWdlQ29udGFpbmVyKCkKLy8JLSBzaG93SW1hZ2UoKQovLwktIHVwZGF0ZURldGFp
bHMoKQovLwktIHVwZGF0ZU5hdigpCi8vCS0gZW5hYmxlS2V5Ym9hcmROYXYoKQov
LwktIGRpc2FibGVLZXlib2FyZE5hdigpCi8vCS0ga2V5Ym9hcmROYXZBY3Rpb24o
KQovLwktIHByZWxvYWROZWlnaGJvckltYWdlcygpCi8vCS0gZW5kKCkKLy8KLy8J
U3RydWN0dXJpbmcgb2YgY29kZSBpbnNwaXJlZCBieSBTY290dCBVcHRvbiAoaHR0
cDovL3d3dy51cHRvbmljLmNvbS8pCi8vCnZhciBMaWdodGJveCA9IENsYXNzLmNy
ZWF0ZSgpOwoKTGlnaHRib3gucHJvdG90eXBlID0gewoKCS8vIGluaXRpYWxpemUo
KQoJLy8gQ29uc3RydWN0b3IgcnVucyBvbiBjb21wbGV0aW9uIG9mIHRoZSBET00g
bG9hZGluZy4gTG9vcHMgdGhyb3VnaCBhbmNob3IgdGFncyBsb29raW5nIGZvcgoJ
Ly8gJ2xpZ2h0Ym94JyByZWZlcmVuY2VzIGFuZCBhcHBsaWVzIG9uY2xpY2sgZXZl
bnRzIHRvIGFwcHJvcHJpYXRlIGxpbmtzLiBUaGUgMm5kIHNlY3Rpb24gb2YKCS8v
IHRoZSBmdW5jdGlvbiBpbnNlcnRzIGh0bWwgYXQgdGhlIGJvdHRvbSBvZiB0aGUg
cGFnZSB3aGljaCBpcyB1c2VkIHRvIGRpc3BsYXkgdGhlIHNoYWRvdwoJLy8gb3Zl
cmxheSBhbmQgdGhlIGltYWdlIGNvbnRhaW5lci4KCS8vCglpbml0aWFsaXplOiBm
dW5jdGlvbigpIHsKCQlpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1l
KXsgcmV0dXJuOyB9CgkJdmFyIGFuY2hvcnMgPSBkb2N1bWVudC5nZXRFbGVtZW50
c0J5VGFnTmFtZSgnYScpOwoKCQkvLyBsb29wIHRocm91Z2ggYWxsIGFuY2hvciB0
YWdzCgkJZm9yICh2YXIgaT0wOyBpPGFuY2hvcnMubGVuZ3RoOyBpKyspewoJCQl2
YXIgYW5jaG9yID0gYW5jaG9yc1tpXTsKCgkJCXZhciByZWxBdHRyaWJ1dGUgPSBT
dHJpbmcoYW5jaG9yLmdldEF0dHJpYnV0ZSgncmVsJykpOwoKCQkJLy8gdXNlIHRo
ZSBzdHJpbmcubWF0Y2goKSBtZXRob2QgdG8gY2F0Y2ggJ2xpZ2h0Ym94JyByZWZl
cmVuY2VzIGluIHRoZSByZWwgYXR0cmlidXRlCgkJCWlmIChhbmNob3IuZ2V0QXR0
cmlidXRlKCdocmVmJykgJiYgKHJlbEF0dHJpYnV0ZS50b0xvd2VyQ2FzZSgpLm1h
dGNoKCdsaWdodGJveCcpKSl7CgkJCQlhbmNob3Iub25jbGljayA9IGZ1bmN0aW9u
ICgpIHtteUxpZ2h0Ym94LnN0YXJ0KHRoaXMpOyByZXR1cm4gZmFsc2U7fQoJCQl9
CgkJfQoKCQkvLyBUaGUgcmVzdCBvZiB0aGlzIGNvZGUgaW5zZXJ0cyBodG1sIGF0
IHRoZSBib3R0b20gb2YgdGhlIHBhZ2UgdGhhdCBsb29rcyBzaW1pbGFyIHRvIHRo
aXM6CgkJLy8KCQkvLwk8ZGl2IGlkPSJvdmVybGF5Ij48L2Rpdj4KCQkvLwk8ZGl2
IGlkPSJsaWdodGJveCI+CgkJLy8JCTxkaXYgaWQ9Im91dGVySW1hZ2VDb250YWlu
ZXIiPgoJCS8vCQkJPGRpdiBpZD0iaW1hZ2VDb250YWluZXIiPgoJCS8vCQkJCTxp
bWcgaWQ9ImxpZ2h0Ym94SW1hZ2UiPgoJCS8vCQkJCTxkaXYgc3R5bGU9IiIgaWQ9
ImhvdmVyTmF2Ij4KCQkvLwkJCQkJPGEgaHJlZj0iIyIgaWQ9InByZXZMaW5rIj48
L2E+CgkJLy8JCQkJCTxhIGhyZWY9IiMiIGlkPSJuZXh0TGluayI+PC9hPgoJCS8v
CQkJCTwvZGl2PgoJCS8vCQkJCTxkaXYgaWQ9ImxvYWRpbmciPgoJCS8vCQkJCQk8
YSBocmVmPSIjIiBpZD0ibG9hZGluZ0xpbmsiPgoJCS8vCQkJCQkJPGltZyBzcmM9
ImltYWdlcy9sb2FkaW5nLmdpZiI+CgkJLy8JCQkJCTwvYT4KCQkvLwkJCQk8L2Rp
dj4KCQkvLwkJCTwvZGl2PgoJCS8vCQk8L2Rpdj4KCQkvLwkJPGRpdiBpZD0iaW1h
Z2VEYXRhQ29udGFpbmVyIj4KCQkvLwkJCTxkaXYgaWQ9ImltYWdlRGF0YSI+CgkJ
Ly8JCQkJPGRpdiBpZD0iaW1hZ2VEZXRhaWxzIj4KCQkvLwkJCQkJPHNwYW4gaWQ9
ImNhcHRpb24iPjwvc3Bhbj4KCQkvLwkJCQkJPHNwYW4gaWQ9Im51bWJlckRpc3Bs
YXkiPjwvc3Bhbj4KCQkvLwkJCQk8L2Rpdj4KCQkvLwkJCQk8ZGl2IGlkPSJib3R0
b21OYXYiPgoJCS8vCQkJCQk8YSBocmVmPSIjIiBpZD0iYm90dG9tTmF2Q2xvc2Ui
PgoJCS8vCQkJCQkJPGltZyBzcmM9ImltYWdlcy9jbG9zZS5naWYiPgoJCS8vCQkJ
CQk8L2E+CgkJLy8JCQkJPC9kaXY+CgkJLy8JCQk8L2Rpdj4KCQkvLwkJPC9kaXY+
CgkJLy8JPC9kaXY+CgoKCQl2YXIgb2JqQm9keSA9IGRvY3VtZW50LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCJib2R5IikuaXRlbSgwKTsKCgkJdmFyIG9iak92ZXJsYXkg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKCQlvYmpPdmVybGF5LnNl
dEF0dHJpYnV0ZSgnaWQnLCdvdmVybGF5Jyk7CgkJb2JqT3ZlcmxheS5zdHlsZS5k
aXNwbGF5ID0gJ25vbmUnOwoJCW9iak92ZXJsYXkub25jbGljayA9IGZ1bmN0aW9u
KCkgeyBteUxpZ2h0Ym94LmVuZCgpOyByZXR1cm4gZmFsc2U7IH0KCQlvYmpCb2R5
LmFwcGVuZENoaWxkKG9iak92ZXJsYXkpOwoKCQl2YXIgb2JqTGlnaHRib3ggPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKCQlvYmpMaWdodGJveC5zZXRB
dHRyaWJ1dGUoJ2lkJywnbGlnaHRib3gnKTsKCQlvYmpMaWdodGJveC5zdHlsZS5k
aXNwbGF5ID0gJ25vbmUnOwoJCW9iakJvZHkuYXBwZW5kQ2hpbGQob2JqTGlnaHRi
b3gpOwoKCQl2YXIgb2JqT3V0ZXJJbWFnZUNvbnRhaW5lciA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOwoJCW9iak91dGVySW1hZ2VDb250YWluZXIuc2V0
QXR0cmlidXRlKCdpZCcsJ291dGVySW1hZ2VDb250YWluZXInKTsKCQlvYmpMaWdo
dGJveC5hcHBlbmRDaGlsZChvYmpPdXRlckltYWdlQ29udGFpbmVyKTsKCgkJdmFy
IG9iakltYWdlQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2
Iik7CgkJb2JqSW1hZ2VDb250YWluZXIuc2V0QXR0cmlidXRlKCdpZCcsJ2ltYWdl
Q29udGFpbmVyJyk7CgkJb2JqT3V0ZXJJbWFnZUNvbnRhaW5lci5hcHBlbmRDaGls
ZChvYmpJbWFnZUNvbnRhaW5lcik7CgoJCXZhciBvYmpMaWdodGJveEltYWdlID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7CgkJb2JqTGlnaHRib3hJbWFn
ZS5zZXRBdHRyaWJ1dGUoJ2lkJywnbGlnaHRib3hJbWFnZScpOwoJCW9iakltYWdl
Q29udGFpbmVyLmFwcGVuZENoaWxkKG9iakxpZ2h0Ym94SW1hZ2UpOwoKCQl2YXIg
b2JqSG92ZXJOYXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKCQlv
YmpIb3Zlck5hdi5zZXRBdHRyaWJ1dGUoJ2lkJywnaG92ZXJOYXYnKTsKCQlvYmpJ
bWFnZUNvbnRhaW5lci5hcHBlbmRDaGlsZChvYmpIb3Zlck5hdik7CgoJCXZhciBv
YmpQcmV2TGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKCQlvYmpQ
cmV2TGluay5zZXRBdHRyaWJ1dGUoJ2lkJywncHJldkxpbmsnKTsKCQlvYmpQcmV2
TGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCcjJyk7CgkJb2JqSG92ZXJOYXYuYXBw
ZW5kQ2hpbGQob2JqUHJldkxpbmspOwoKCQl2YXIgb2JqTmV4dExpbmsgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CgkJb2JqTmV4dExpbmsuc2V0QXR0cmli
dXRlKCdpZCcsJ25leHRMaW5rJyk7CgkJb2JqTmV4dExpbmsuc2V0QXR0cmlidXRl
KCdocmVmJywnIycpOwoJCW9iakhvdmVyTmF2LmFwcGVuZENoaWxkKG9iak5leHRM
aW5rKTsKCgkJdmFyIG9iakxvYWRpbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKCQlvYmpMb2FkaW5nLnNldEF0dHJpYnV0ZSgnaWQnLCdsb2FkaW5n
Jyk7CgkJb2JqSW1hZ2VDb250YWluZXIuYXBwZW5kQ2hpbGQob2JqTG9hZGluZyk7
CgoJCXZhciBvYmpMb2FkaW5nTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImEiKTsKCQlvYmpMb2FkaW5nTGluay5zZXRBdHRyaWJ1dGUoJ2lkJywnbG9hZGlu
Z0xpbmsnKTsKCQlvYmpMb2FkaW5nTGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCcj
Jyk7CgkJb2JqTG9hZGluZ0xpbmsub25jbGljayA9IGZ1bmN0aW9uKCkgeyBteUxp
Z2h0Ym94LmVuZCgpOyByZXR1cm4gZmFsc2U7IH0KCQlvYmpMb2FkaW5nLmFwcGVu
ZENoaWxkKG9iakxvYWRpbmdMaW5rKTsKCgkJdmFyIG9iakxvYWRpbmdJbWFnZSA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpOwoJCW9iakxvYWRpbmdJbWFn
ZS5zZXRBdHRyaWJ1dGUoJ3NyYycsIGZpbGVMb2FkaW5nSW1hZ2UpOwoJCW9iakxv
YWRpbmdMaW5rLmFwcGVuZENoaWxkKG9iakxvYWRpbmdJbWFnZSk7CgoJCXZhciBv
YmpJbWFnZURhdGFDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKCQlvYmpJbWFnZURhdGFDb250YWluZXIuc2V0QXR0cmlidXRlKCdpZCcs
J2ltYWdlRGF0YUNvbnRhaW5lcicpOwoJCW9iakltYWdlRGF0YUNvbnRhaW5lci5j
bGFzc05hbWUgPSAnY2xlYXJmaXgnOwoJCW9iakxpZ2h0Ym94LmFwcGVuZENoaWxk
KG9iakltYWdlRGF0YUNvbnRhaW5lcik7CgoJCXZhciBvYmpJbWFnZURhdGEgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKCQlvYmpJbWFnZURhdGEuc2V0
QXR0cmlidXRlKCdpZCcsJ2ltYWdlRGF0YScpOwoJCW9iakltYWdlRGF0YUNvbnRh
aW5lci5hcHBlbmRDaGlsZChvYmpJbWFnZURhdGEpOwoKCQl2YXIgb2JqSW1hZ2VE
ZXRhaWxzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CgkJb2JqSW1h
Z2VEZXRhaWxzLnNldEF0dHJpYnV0ZSgnaWQnLCdpbWFnZURldGFpbHMnKTsKCQlv
YmpJbWFnZURhdGEuYXBwZW5kQ2hpbGQob2JqSW1hZ2VEZXRhaWxzKTsKCgkJdmFy
IG9iakNhcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CgkJ
b2JqQ2FwdGlvbi5zZXRBdHRyaWJ1dGUoJ2lkJywnY2FwdGlvbicpOwoJCW9iaklt
YWdlRGV0YWlscy5hcHBlbmRDaGlsZChvYmpDYXB0aW9uKTsKCgkJdmFyIG9iak51
bWJlckRpc3BsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CgkJ
b2JqTnVtYmVyRGlzcGxheS5zZXRBdHRyaWJ1dGUoJ2lkJywnbnVtYmVyRGlzcGxh
eScpOwoJCW9iakltYWdlRGV0YWlscy5hcHBlbmRDaGlsZChvYmpOdW1iZXJEaXNw
bGF5KTsKCgkJdmFyIG9iakJvdHRvbU5hdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOwoJCW9iakJvdHRvbU5hdi5zZXRBdHRyaWJ1dGUoJ2lkJywnYm90
dG9tTmF2Jyk7CgkJb2JqSW1hZ2VEYXRhLmFwcGVuZENoaWxkKG9iakJvdHRvbU5h
dik7CgoJCXZhciBvYmpCb3R0b21OYXZDbG9zZUxpbmsgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJhIik7CgkJb2JqQm90dG9tTmF2Q2xvc2VMaW5rLnNldEF0dHJp
YnV0ZSgnaWQnLCdib3R0b21OYXZDbG9zZScpOwoJCW9iakJvdHRvbU5hdkNsb3Nl
TGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCcjJyk7CgkJb2JqQm90dG9tTmF2Q2xv
c2VMaW5rLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsgbXlMaWdodGJveC5lbmQoKTsg
cmV0dXJuIGZhbHNlOyB9CgkJb2JqQm90dG9tTmF2LmFwcGVuZENoaWxkKG9iakJv
dHRvbU5hdkNsb3NlTGluayk7CgoJCXZhciBvYmpCb3R0b21OYXZDbG9zZUltYWdl
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7CgkJb2JqQm90dG9tTmF2
Q2xvc2VJbWFnZS5zZXRBdHRyaWJ1dGUoJ3NyYycsIGZpbGVCb3R0b21OYXZDbG9z
ZUltYWdlKTsKCQlvYmpCb3R0b21OYXZDbG9zZUxpbmsuYXBwZW5kQ2hpbGQob2Jq
Qm90dG9tTmF2Q2xvc2VJbWFnZSk7Cgl9LAoKCS8vCgkvLwlzdGFydCgpCgkvLwlE
aXNwbGF5IG92ZXJsYXkgYW5kIGxpZ2h0Ym94LiBJZiBpbWFnZSBpcyBwYXJ0IG9m
IGEgc2V0LCBhZGQgc2libGluZ3MgdG8gaW1hZ2VBcnJheS4KCS8vCglzdGFydDog
ZnVuY3Rpb24oaW1hZ2VMaW5rKSB7CgoJCWhpZGVTZWxlY3RCb3hlcygpOwoKCQkv
LyBzdHJldGNoIG92ZXJsYXkgdG8gZmlsbCBwYWdlIGFuZCBmYWRlIGluCgkJdmFy
IGFycmF5UGFnZVNpemUgPSBnZXRQYWdlU2l6ZSgpOwoJCUVsZW1lbnQuc2V0SGVp
Z2h0KCdvdmVybGF5JywgYXJyYXlQYWdlU2l6ZVsxXSk7CgkJbmV3IEVmZmVjdC5B
cHBlYXIoJ292ZXJsYXknLCB7IGR1cmF0aW9uOiAwLjIsIGZyb206IDAuMCwgdG86
IDAuOCB9KTsKCgkJaW1hZ2VBcnJheSA9IFtdOwoJCWltYWdlTnVtID0gMDsKCgkJ
aWYgKCFkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSl7IHJldHVybjsgfQoJ
CXZhciBhbmNob3JzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2En
KTsKCgkJLy8gaWYgaW1hZ2UgaXMgTk9UIHBhcnQgb2YgYSBzZXQuLgoJCWlmKChp
bWFnZUxpbmsuZ2V0QXR0cmlidXRlKCdyZWwnKSA9PSAnbGlnaHRib3gnKSl7CgkJ
CS8vIGFkZCBzaW5nbGUgaW1hZ2UgdG8gaW1hZ2VBcnJheQoJCQlpbWFnZUFycmF5
LnB1c2gobmV3IEFycmF5KGltYWdlTGluay5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSwg
aW1hZ2VMaW5rLmdldEF0dHJpYnV0ZSgndGl0bGUnKSkpOwoJCX0gZWxzZSB7CgkJ
Ly8gaWYgaW1hZ2UgaXMgcGFydCBvZiBhIHNldC4uCgoJCQkvLyBsb29wIHRocm91
Z2ggYW5jaG9ycywgZmluZCBvdGhlciBpbWFnZXMgaW4gc2V0LCBhbmQgYWRkIHRo
ZW0gdG8gaW1hZ2VBcnJheQoJCQlmb3IgKHZhciBpPTA7IGk8YW5jaG9ycy5sZW5n
dGg7IGkrKyl7CgkJCQl2YXIgYW5jaG9yID0gYW5jaG9yc1tpXTsKCQkJCWlmIChh
bmNob3IuZ2V0QXR0cmlidXRlKCdocmVmJykgJiYgKGFuY2hvci5nZXRBdHRyaWJ1
dGUoJ3JlbCcpID09IGltYWdlTGluay5nZXRBdHRyaWJ1dGUoJ3JlbCcpKSl7CgkJ
CQkJaW1hZ2VBcnJheS5wdXNoKG5ldyBBcnJheShhbmNob3IuZ2V0QXR0cmlidXRl
KCdocmVmJyksIGFuY2hvci5nZXRBdHRyaWJ1dGUoJ3RpdGxlJykpKTsKCQkJCX0K
CQkJfQoJCQlpbWFnZUFycmF5LnJlbW92ZUR1cGxpY2F0ZXMoKTsKCQkJd2hpbGUo
aW1hZ2VBcnJheVtpbWFnZU51bV1bMF0gIT0gaW1hZ2VMaW5rLmdldEF0dHJpYnV0
ZSgnaHJlZicpKSB7IGltYWdlTnVtKys7fQoJCX0KCgkJLy8gY2FsY3VsYXRlIHRv
cCBvZmZzZXQgZm9yIHRoZSBsaWdodGJveCBhbmQgZGlzcGxheQoJCXZhciBhcnJh
eVBhZ2VTaXplID0gZ2V0UGFnZVNpemUoKTsKCQl2YXIgYXJyYXlQYWdlU2Nyb2xs
ID0gZ2V0UGFnZVNjcm9sbCgpOwoJCXZhciBsaWdodGJveFRvcCA9IGFycmF5UGFn
ZVNjcm9sbFsxXSArIChhcnJheVBhZ2VTaXplWzNdIC8gMTUpOwoKCQlFbGVtZW50
LnNldFRvcCgnbGlnaHRib3gnLCBsaWdodGJveFRvcCk7CgkJRWxlbWVudC5zaG93
KCdsaWdodGJveCcpOwoKCQl0aGlzLmNoYW5nZUltYWdlKGltYWdlTnVtKTsKCX0s
CgoJLy8KCS8vCWNoYW5nZUltYWdlKCkKCS8vCUhpZGUgbW9zdCBlbGVtZW50cyBh
bmQgcHJlbG9hZCBpbWFnZSBpbiBwcmVwYXJhdGlvbiBmb3IgcmVzaXppbmcgaW1h
Z2UgY29udGFpbmVyLgoJLy8KCWNoYW5nZUltYWdlOiBmdW5jdGlvbihpbWFnZU51
bSkgewoKCQlhY3RpdmVJbWFnZSA9IGltYWdlTnVtOwkvLyB1cGRhdGUgZ2xvYmFs
IHZhcgoKCQkvLyBoaWRlIGVsZW1lbnRzIGR1cmluZyB0cmFuc2l0aW9uCgkJRWxl
bWVudC5zaG93KCdsb2FkaW5nJyk7CgkJRWxlbWVudC5oaWRlKCdsaWdodGJveElt
YWdlJyk7CgkJRWxlbWVudC5oaWRlKCdob3Zlck5hdicpOwoJCUVsZW1lbnQuaGlk
ZSgncHJldkxpbmsnKTsKCQlFbGVtZW50LmhpZGUoJ25leHRMaW5rJyk7CgkJRWxl
bWVudC5oaWRlKCdpbWFnZURhdGFDb250YWluZXInKTsKCQlFbGVtZW50LmhpZGUo
J251bWJlckRpc3BsYXknKTsKCgkJaW1nUHJlbG9hZGVyID0gbmV3IEltYWdlKCk7
CgoJCS8vIG9uY2UgaW1hZ2UgaXMgcHJlbG9hZGVkLCByZXNpemUgaW1hZ2UgY29u
dGFpbmVyCgkJaW1nUHJlbG9hZGVyLm9ubG9hZD1mdW5jdGlvbigpewoJCQlFbGVt
ZW50LnNldFNyYygnbGlnaHRib3hJbWFnZScsIGltYWdlQXJyYXlbYWN0aXZlSW1h
Z2VdWzBdKTsKCQkJbXlMaWdodGJveC5yZXNpemVJbWFnZUNvbnRhaW5lcihpbWdQ
cmVsb2FkZXIud2lkdGgsIGltZ1ByZWxvYWRlci5oZWlnaHQpOwoJCX0KCQlpbWdQ
cmVsb2FkZXIuc3JjID0gaW1hZ2VBcnJheVthY3RpdmVJbWFnZV1bMF07Cgl9LAoK
CS8vCgkvLwlyZXNpemVJbWFnZUNvbnRhaW5lcigpCgkvLwoJcmVzaXplSW1hZ2VD
b250YWluZXI6IGZ1bmN0aW9uKCBpbWdXaWR0aCwgaW1nSGVpZ2h0KSB7CgoJCS8v
IGdldCBjdXJyZW50IGhlaWdodCBhbmQgd2lkdGgKCQl0aGlzLndDdXIgPSBFbGVt
ZW50LmdldFdpZHRoKCdvdXRlckltYWdlQ29udGFpbmVyJyk7CgkJdGhpcy5oQ3Vy
ID0gRWxlbWVudC5nZXRIZWlnaHQoJ291dGVySW1hZ2VDb250YWluZXInKTsKCgkJ
Ly8gc2NhbGFycyBiYXNlZCBvbiBjaGFuZ2UgZnJvbSBvbGQgdG8gbmV3CgkJdGhp
cy54U2NhbGUgPSAoKGltZ1dpZHRoICArIChib3JkZXJTaXplICogMikpIC8gdGhp
cy53Q3VyKSAqIDEwMDsKCQl0aGlzLnlTY2FsZSA9ICgoaW1nSGVpZ2h0ICArIChi
b3JkZXJTaXplICogMikpIC8gdGhpcy5oQ3VyKSAqIDEwMDsKCgkJLy8gY2FsY3Vs
YXRlIHNpemUgZGlmZmVyZW5jZSBiZXR3ZWVuIG5ldyBhbmQgb2xkIGltYWdlLCBh
bmQgcmVzaXplIGlmIG5lY2Vzc2FyeQoJCXdEaWZmID0gKHRoaXMud0N1ciAtIGJv
cmRlclNpemUgKiAyKSAtIGltZ1dpZHRoOwoJCWhEaWZmID0gKHRoaXMuaEN1ciAt
IGJvcmRlclNpemUgKiAyKSAtIGltZ0hlaWdodDsKCgkJaWYoISggaERpZmYgPT0g
MCkpeyBuZXcgRWZmZWN0LlNjYWxlKCdvdXRlckltYWdlQ29udGFpbmVyJywgdGhp
cy55U2NhbGUsIHtzY2FsZVg6IGZhbHNlLCBkdXJhdGlvbjogcmVzaXplRHVyYXRp
b24sIHF1ZXVlOiAnZnJvbnQnfSk7IH0KCQlpZighKCB3RGlmZiA9PSAwKSl7IG5l
dyBFZmZlY3QuU2NhbGUoJ291dGVySW1hZ2VDb250YWluZXInLCB0aGlzLnhTY2Fs
ZSwge3NjYWxlWTogZmFsc2UsIGRlbGF5OiByZXNpemVEdXJhdGlvbiwgZHVyYXRp
b246IHJlc2l6ZUR1cmF0aW9ufSk7IH0KCgkJLy8gaWYgbmV3IGFuZCBvbGQgaW1h
Z2UgYXJlIHNhbWUgc2l6ZSBhbmQgbm8gc2NhbGluZyB0cmFuc2l0aW9uIGlzIG5l
Y2Vzc2FyeSwKCQkvLyBkbyBhIHF1aWNrIHBhdXNlIHRvIHByZXZlbnQgaW1hZ2Ug
ZmxpY2tlci4KCQlpZigoaERpZmYgPT0gMCkgJiYgKHdEaWZmID09IDApKXsKCQkJ
aWYgKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluZGV4T2YoIk1TSUUiKSE9LTEpeyBw
YXVzZSgyNTApOyB9IGVsc2UgeyBwYXVzZSgxMDApO30KCQl9CgoJCUVsZW1lbnQu
c2V0SGVpZ2h0KCdwcmV2TGluaycsIGltZ0hlaWdodCk7CgkJRWxlbWVudC5zZXRI
ZWlnaHQoJ25leHRMaW5rJywgaW1nSGVpZ2h0KTsKCQlFbGVtZW50LnNldFdpZHRo
KCAnaW1hZ2VEYXRhQ29udGFpbmVyJywgaW1nV2lkdGggKyAoYm9yZGVyU2l6ZSAq
IDIpKTsKCgkJdGhpcy5zaG93SW1hZ2UoKTsKCX0sCgoJLy8KCS8vCXNob3dJbWFn
ZSgpCgkvLwlEaXNwbGF5IGltYWdlIGFuZCBiZWdpbiBwcmVsb2FkaW5nIG5laWdo
Ym9ycy4KCS8vCglzaG93SW1hZ2U6IGZ1bmN0aW9uKCl7CgkJRWxlbWVudC5oaWRl
KCdsb2FkaW5nJyk7CgkJbmV3IEVmZmVjdC5BcHBlYXIoJ2xpZ2h0Ym94SW1hZ2Un
LCB7IGR1cmF0aW9uOiAwLjUsIHF1ZXVlOiAnZW5kJywgYWZ0ZXJGaW5pc2g6IGZ1
bmN0aW9uKCl7CW15TGlnaHRib3gudXBkYXRlRGV0YWlscygpOyB9IH0pOwoJCXRo
aXMucHJlbG9hZE5laWdoYm9ySW1hZ2VzKCk7Cgl9LAoKCS8vCgkvLwl1cGRhdGVE
ZXRhaWxzKCkKCS8vCURpc3BsYXkgY2FwdGlvbiwgaW1hZ2UgbnVtYmVyLCBhbmQg
Ym90dG9tIG5hdi4KCS8vCgl1cGRhdGVEZXRhaWxzOiBmdW5jdGlvbigpIHsKCgkJ
RWxlbWVudC5zaG93KCdjYXB0aW9uJyk7CgkJRWxlbWVudC5zZXRJbm5lckhUTUwo
ICdjYXB0aW9uJywgaW1hZ2VBcnJheVthY3RpdmVJbWFnZV1bMV0pOwoKCQkvLyBp
ZiBpbWFnZSBpcyBwYXJ0IG9mIHNldCBkaXNwbGF5ICdJbWFnZSB4IG9mIHgnCgkJ
aWYoaW1hZ2VBcnJheS5sZW5ndGggPiAxKXsKCQkJRWxlbWVudC5zaG93KCdudW1i
ZXJEaXNwbGF5Jyk7CgkJCWlmIChkb2N1bWVudC5ib2R5LmNsYXNzTmFtZS5pbmRl
eE9mKCdzaXRlLWxvY2FsZS1lbl9VUycpICE9PSAwKQoJCQkJRWxlbWVudC5zZXRJ
bm5lckhUTUwoICdudW1iZXJEaXNwbGF5JywgIkltYWdlICIgKyBldmFsKGFjdGl2
ZUltYWdlICsgMSkgKyAiIG9mICIgKyBpbWFnZUFycmF5Lmxlbmd0aCk7CgkJCWVs
c2UKCQkJCUVsZW1lbnQuc2V0SW5uZXJIVE1MKCAnbnVtYmVyRGlzcGxheScsICJB
ZmJlZWxkaW5nICIgKyBldmFsKGFjdGl2ZUltYWdlICsgMSkgKyAiIHZhbiAiICsg
aW1hZ2VBcnJheS5sZW5ndGgpOwoKCQl9CgoJCW5ldyBFZmZlY3QuUGFyYWxsZWwo
CgkJCVsgbmV3IEVmZmVjdC5TbGlkZURvd24oICdpbWFnZURhdGFDb250YWluZXIn
LCB7IHN5bmM6IHRydWUsIGR1cmF0aW9uOiByZXNpemVEdXJhdGlvbiArIDAuMjUs
IGZyb206IDAuMCwgdG86IDEuMCB9KSwKCQkJICBuZXcgRWZmZWN0LkFwcGVhcign
aW1hZ2VEYXRhQ29udGFpbmVyJywgeyBzeW5jOiB0cnVlLCBkdXJhdGlvbjogMS4w
IH0pIF0sCgkJCXsgZHVyYXRpb246IDAuNjUsIGFmdGVyRmluaXNoOiBmdW5jdGlv
bigpIHsgbXlMaWdodGJveC51cGRhdGVOYXYoKTt9IH0KCQkpOwoJfSwKCgkvLwoJ
Ly8JdXBkYXRlTmF2KCkKCS8vCURpc3BsYXkgYXBwcm9wcmlhdGUgcHJldmlvdXMg
YW5kIG5leHQgaG92ZXIgbmF2aWdhdGlvbi4KCS8vCgl1cGRhdGVOYXY6IGZ1bmN0
aW9uKCkgewoKCQlFbGVtZW50LnNob3coJ2hvdmVyTmF2Jyk7CgoJCS8vIGlmIG5v
dCBmaXJzdCBpbWFnZSBpbiBzZXQsIGRpc3BsYXkgcHJldiBpbWFnZSBidXR0b24K
CQlpZihhY3RpdmVJbWFnZSAhPSAwKXsKCQkJRWxlbWVudC5zaG93KCdwcmV2TGlu
aycpOwoJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJldkxpbmsnKS5vbmNs
aWNrID0gZnVuY3Rpb24oKSB7CgkJCQlteUxpZ2h0Ym94LmNoYW5nZUltYWdlKGFj
dGl2ZUltYWdlIC0gMSk7IHJldHVybiBmYWxzZTsKCQkJfQoJCX0KCgkJLy8gaWYg
bm90IGxhc3QgaW1hZ2UgaW4gc2V0LCBkaXNwbGF5IG5leHQgaW1hZ2UgYnV0dG9u
CgkJaWYoYWN0aXZlSW1hZ2UgIT0gKGltYWdlQXJyYXkubGVuZ3RoIC0gMSkpewoJ
CQlFbGVtZW50LnNob3coJ25leHRMaW5rJyk7CgkJCWRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCduZXh0TGluaycpLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsKCQkJCW15
TGlnaHRib3guY2hhbmdlSW1hZ2UoYWN0aXZlSW1hZ2UgKyAxKTsgcmV0dXJuIGZh
bHNlOwoJCQl9CgkJfQoKCQl0aGlzLmVuYWJsZUtleWJvYXJkTmF2KCk7Cgl9LAoK
CS8vCgkvLwllbmFibGVLZXlib2FyZE5hdigpCgkvLwoJZW5hYmxlS2V5Ym9hcmRO
YXY6IGZ1bmN0aW9uKCkgewoJCWRvY3VtZW50Lm9ua2V5ZG93biA9IHRoaXMua2V5
Ym9hcmRBY3Rpb247Cgl9LAoKCS8vCgkvLwlkaXNhYmxlS2V5Ym9hcmROYXYoKQoJ
Ly8KCWRpc2FibGVLZXlib2FyZE5hdjogZnVuY3Rpb24oKSB7CgkJZG9jdW1lbnQu
b25rZXlkb3duID0gJyc7Cgl9LAoKCS8vCgkvLwlrZXlib2FyZEFjdGlvbigpCgkv
LwoJa2V5Ym9hcmRBY3Rpb246IGZ1bmN0aW9uKGUpIHsKCQlpZiAoZSA9PSBudWxs
KSB7IC8vIGllCgkJCWtleWNvZGUgPSBldmVudC5rZXlDb2RlOwoJCX0gZWxzZSB7
IC8vIG1vemlsbGEKCQkJa2V5Y29kZSA9IGUud2hpY2g7CgkJfQoKCQlrZXkgPSBT
dHJpbmcuZnJvbUNoYXJDb2RlKGtleWNvZGUpLnRvTG93ZXJDYXNlKCk7CgoJCWlm
KChrZXkgPT0gJ3gnKSB8fCAoa2V5ID09ICdvJykgfHwgKGtleSA9PSAnYycpKXsJ
Ly8gY2xvc2UgbGlnaHRib3gKCQkJbXlMaWdodGJveC5lbmQoKTsKCQl9IGVsc2Ug
aWYoa2V5ID09ICdwJyl7CS8vIGRpc3BsYXkgcHJldmlvdXMgaW1hZ2UKCQkJaWYo
YWN0aXZlSW1hZ2UgIT0gMCl7CgkJCQlteUxpZ2h0Ym94LmRpc2FibGVLZXlib2Fy
ZE5hdigpOwoJCQkJbXlMaWdodGJveC5jaGFuZ2VJbWFnZShhY3RpdmVJbWFnZSAt
IDEpOwoJCQl9CgkJfSBlbHNlIGlmKGtleSA9PSAnbicpewkvLyBkaXNwbGF5IG5l
eHQgaW1hZ2UKCQkJaWYoYWN0aXZlSW1hZ2UgIT0gKGltYWdlQXJyYXkubGVuZ3Ro
IC0gMSkpewoJCQkJbXlMaWdodGJveC5kaXNhYmxlS2V5Ym9hcmROYXYoKTsKCQkJ
CW15TGlnaHRib3guY2hhbmdlSW1hZ2UoYWN0aXZlSW1hZ2UgKyAxKTsKCQkJfQoJ
CX0KCgoJfSwKCgkvLwoJLy8JcHJlbG9hZE5laWdoYm9ySW1hZ2VzKCkKCS8vCVBy
ZWxvYWQgcHJldmlvdXMgYW5kIG5leHQgaW1hZ2VzLgoJLy8KCXByZWxvYWROZWln
aGJvckltYWdlczogZnVuY3Rpb24oKXsKCgkJaWYoKGltYWdlQXJyYXkubGVuZ3Ro
IC0gMSkgPiBhY3RpdmVJbWFnZSl7CgkJCXByZWxvYWROZXh0SW1hZ2UgPSBuZXcg
SW1hZ2UoKTsKCQkJcHJlbG9hZE5leHRJbWFnZS5zcmMgPSBpbWFnZUFycmF5W2Fj
dGl2ZUltYWdlICsgMV1bMF07CgkJfQoJCWlmKGFjdGl2ZUltYWdlID4gMCl7CgkJ
CXByZWxvYWRQcmV2SW1hZ2UgPSBuZXcgSW1hZ2UoKTsKCQkJcHJlbG9hZFByZXZJ
bWFnZS5zcmMgPSBpbWFnZUFycmF5W2FjdGl2ZUltYWdlIC0gMV1bMF07CgkJfQoK
CX0sCgoJLy8KCS8vCWVuZCgpCgkvLwoJZW5kOiBmdW5jdGlvbigpIHsKCQl0aGlz
LmRpc2FibGVLZXlib2FyZE5hdigpOwoJCUVsZW1lbnQuaGlkZSgnbGlnaHRib3gn
KTsKCQluZXcgRWZmZWN0LkZhZGUoJ292ZXJsYXknLCB7IGR1cmF0aW9uOiAwLjJ9
KTsKCQlzaG93U2VsZWN0Qm94ZXMoKTsKCX0KfQoKLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vCi8vIGdldFBhZ2VTY3JvbGwoKQovLyBS
ZXR1cm5zIGFycmF5IHdpdGggeCx5IHBhZ2Ugc2Nyb2xsIHZhbHVlcy4KLy8gQ29y
ZSBjb2RlIGZyb20gLSBxdWlya3Ntb2RlLm9yZwovLwpmdW5jdGlvbiBnZXRQYWdl
U2Nyb2xsKCl7CgoJdmFyIHlTY3JvbGw7CgoJaWYgKHNlbGYucGFnZVlPZmZzZXQp
IHsKCQl5U2Nyb2xsID0gc2VsZi5wYWdlWU9mZnNldDsKCX0gZWxzZSBpZiAoZG9j
dW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVu
dC5zY3JvbGxUb3ApewkgLy8gRXhwbG9yZXIgNiBTdHJpY3QKCQl5U2Nyb2xsID0g
ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDsKCX0gZWxzZSBpZiAo
ZG9jdW1lbnQuYm9keSkgey8vIGFsbCBvdGhlciBFeHBsb3JlcnMKCQl5U2Nyb2xs
ID0gZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7Cgl9CgoJYXJyYXlQYWdlU2Nyb2xs
ID0gbmV3IEFycmF5KCcnLHlTY3JvbGwpCglyZXR1cm4gYXJyYXlQYWdlU2Nyb2xs
Owp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8K
Ly8gZ2V0UGFnZVNpemUoKQovLyBSZXR1cm5zIGFycmF5IHdpdGggcGFnZSB3aWR0
aCwgaGVpZ2h0IGFuZCB3aW5kb3cgd2lkdGgsIGhlaWdodAovLyBDb3JlIGNvZGUg
ZnJvbSAtIHF1aXJrc21vZGUub3JnCi8vIEVkaXQgZm9yIEZpcmVmb3ggYnkgcEhh
ZXoKLy8KZnVuY3Rpb24gZ2V0UGFnZVNpemUoKXsKCgl2YXIgeFNjcm9sbCwgeVNj
cm9sbDsKCglpZiAod2luZG93LmlubmVySGVpZ2h0ICYmIHdpbmRvdy5zY3JvbGxN
YXhZKSB7CgkJeFNjcm9sbCA9IGRvY3VtZW50LmJvZHkuc2Nyb2xsV2lkdGg7CgkJ
eVNjcm9sbCA9IHdpbmRvdy5pbm5lckhlaWdodCArIHdpbmRvdy5zY3JvbGxNYXhZ
OwoJfSBlbHNlIGlmIChkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCA+IGRvY3Vt
ZW50LmJvZHkub2Zmc2V0SGVpZ2h0KXsgLy8gYWxsIGJ1dCBFeHBsb3JlciBNYWMK
CQl4U2Nyb2xsID0gZG9jdW1lbnQuYm9keS5zY3JvbGxXaWR0aDsKCQl5U2Nyb2xs
ID0gZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQ7Cgl9IGVsc2UgeyAvLyBFeHBs
b3JlciBNYWMuLi53b3VsZCBhbHNvIHdvcmsgaW4gRXhwbG9yZXIgNiBTdHJpY3Qs
IE1vemlsbGEgYW5kIFNhZmFyaQoJCXhTY3JvbGwgPSBkb2N1bWVudC5ib2R5Lm9m
ZnNldFdpZHRoOwoJCXlTY3JvbGwgPSBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdo
dDsKCX0KCgl2YXIgd2luZG93V2lkdGgsIHdpbmRvd0hlaWdodDsKCWlmIChzZWxm
LmlubmVySGVpZ2h0KSB7CS8vIGFsbCBleGNlcHQgRXhwbG9yZXIKCQl3aW5kb3dX
aWR0aCA9IHNlbGYuaW5uZXJXaWR0aDsKCQl3aW5kb3dIZWlnaHQgPSBzZWxmLmlu
bmVySGVpZ2h0OwoJfSBlbHNlIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQg
JiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkgeyAvLyBF
eHBsb3JlciA2IFN0cmljdCBNb2RlCgkJd2luZG93V2lkdGggPSBkb2N1bWVudC5k
b2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7CgkJd2luZG93SGVpZ2h0ID0gZG9j
dW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDsKCX0gZWxzZSBpZiAo
ZG9jdW1lbnQuYm9keSkgeyAvLyBvdGhlciBFeHBsb3JlcnMKCQl3aW5kb3dXaWR0
aCA9IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg7CgkJd2luZG93SGVpZ2h0ID0g
ZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQ7Cgl9CgoJLy8gZm9yIHNtYWxsIHBh
Z2VzIHdpdGggdG90YWwgaGVpZ2h0IGxlc3MgdGhlbiBoZWlnaHQgb2YgdGhlIHZp
ZXdwb3J0CglpZih5U2Nyb2xsIDwgd2luZG93SGVpZ2h0KXsKCQlwYWdlSGVpZ2h0
ID0gd2luZG93SGVpZ2h0OwoJfSBlbHNlIHsKCQlwYWdlSGVpZ2h0ID0geVNjcm9s
bDsKCX0KCgkvLyBmb3Igc21hbGwgcGFnZXMgd2l0aCB0b3RhbCB3aWR0aCBsZXNz
IHRoZW4gd2lkdGggb2YgdGhlIHZpZXdwb3J0CglpZih4U2Nyb2xsIDwgd2luZG93
V2lkdGgpewoJCXBhZ2VXaWR0aCA9IHdpbmRvd1dpZHRoOwoJfSBlbHNlIHsKCQlw
YWdlV2lkdGggPSB4U2Nyb2xsOwoJfQoKCglhcnJheVBhZ2VTaXplID0gbmV3IEFy
cmF5KHBhZ2VXaWR0aCxwYWdlSGVpZ2h0LHdpbmRvd1dpZHRoLHdpbmRvd0hlaWdo
dCkKCXJldHVybiBhcnJheVBhZ2VTaXplOwp9CgovLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8KLy8gZ2V0S2V5KGtleSkKLy8gR2V0cyBr
ZXljb2RlLiBJZiAneCcgaXMgcHJlc3NlZCB0aGVuIGl0IGhpZGVzIHRoZSBsaWdo
dGJveC4KLy8KZnVuY3Rpb24gZ2V0S2V5KGUpewoJaWYgKGUgPT0gbnVsbCkgeyAv
LyBpZQoJCWtleWNvZGUgPSBldmVudC5rZXlDb2RlOwoJfSBlbHNlIHsgLy8gbW96
aWxsYQoJCWtleWNvZGUgPSBlLndoaWNoOwoJfQoJa2V5ID0gU3RyaW5nLmZyb21D
aGFyQ29kZShrZXljb2RlKS50b0xvd2VyQ2FzZSgpOwoKCWlmKGtleSA9PSAneCcp
ewoJfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoK
Ly8KLy8gbGlzdGVuS2V5KCkKLy8KZnVuY3Rpb24gbGlzdGVuS2V5ICgpIHsJZG9j
dW1lbnQub25rZXlwcmVzcyA9IGdldEtleTsgfQoKLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpmdW5jdGlvbiBz
aG93U2VsZWN0Qm94ZXMoKXsKCXNlbGVjdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50
c0J5VGFnTmFtZSgic2VsZWN0Iik7Cglmb3IgKGkgPSAwOyBpICE9IHNlbGVjdHMu
bGVuZ3RoOyBpKyspIHsKCQlzZWxlY3RzW2ldLnN0eWxlLnZpc2liaWxpdHkgPSAi
dmlzaWJsZSI7Cgl9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKZnVuY3Rpb24gaGlkZVNlbGVjdEJveGVz
KCl7CglzZWxlY3RzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNl
bGVjdCIpOwoJZm9yIChpID0gMDsgaSAhPSBzZWxlY3RzLmxlbmd0aDsgaSsrKSB7
CgkJc2VsZWN0c1tpXS5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7Cgl9Cn0K
Ci8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQoKLy8KLy8gcGF1c2UobnVtYmVyTWlsbGlzKQovLyBQYXVzZXMgY29k
ZSBleGVjdXRpb24gZm9yIHNwZWNpZmllZCB0aW1lLiBVc2VzIGJ1c3kgY29kZSwg
bm90IGdvb2QuCi8vIENvZGUgZnJvbSBodHRwOi8vd3d3LmZhcXRzLmNvbS9rbm93
bGVkZ2VfYmFzZS92aWV3LnBodG1sL2FpZC8xNjAyCi8vCmZ1bmN0aW9uIHBhdXNl
KG51bWJlck1pbGxpcykgewoJdmFyIG5vdyA9IG5ldyBEYXRlKCk7Cgl2YXIgZXhp
dFRpbWUgPSBub3cuZ2V0VGltZSgpICsgbnVtYmVyTWlsbGlzOwoJd2hpbGUgKHRy
dWUpIHsKCQlub3cgPSBuZXcgRGF0ZSgpOwoJCWlmIChub3cuZ2V0VGltZSgpID4g
ZXhpdFRpbWUpCgkJCXJldHVybjsKCX0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKCmZ1bmN0aW9uIGlu
aXRMaWdodGJveCgpIHsgbXlMaWdodGJveCA9IG5ldyBMaWdodGJveCgpOyB9CkV2
ZW50Lm9ic2VydmUod2luZG93LCAnbG9hZCcsIGluaXRMaWdodGJveCwgZmFsc2Up
OwovLyBDb3B5cmlnaHQgKGMpIDIwMDUgVGhvbWFzIEZ1Y2hzIChodHRwOi8vc2Ny
aXB0LmFjdWxvLnVzLCBodHRwOi8vbWlyLmFjdWxvLnVzKQovLyBDb250cmlidXRv
cnM6Ci8vICBKdXN0aW4gUGFsbWVyIChodHRwOi8vZW5jeXRlbWVkaWEuY29tLykK
Ly8gIE1hcmsgUGlsZ3JpbSAoaHR0cDovL2RpdmVpbnRvbWFyay5vcmcvKQovLyAg
TWFydGluIEJpYWxhc2lua2kKLy8gCi8vIFNlZSBzY3JpcHRhY3Vsb3VzLmpzIGZv
ciBmdWxsIGxpY2Vuc2UuICAKCi8qIC0tLS0tLS0tLS0tLS0gZWxlbWVudCBleHQg
LS0tLS0tLS0tLS0tLS0gKi8gIAogCi8vIGNvbnZlcnRzIHJnYigpIGFuZCAjeHh4
IHRvICN4eHh4eHggZm9ybWF0LCAgCi8vIHJldHVybnMgc2VsZiAob3IgZmlyc3Qg
YXJndW1lbnQpIGlmIG5vdCBjb252ZXJ0YWJsZSAgClN0cmluZy5wcm90b3R5cGUu
cGFyc2VDb2xvciA9IGZ1bmN0aW9uKCkgeyAgCiAgdmFyIGNvbG9yID0gJyMnOyAg
CiAgaWYodGhpcy5zbGljZSgwLDQpID09ICdyZ2IoJykgeyAgCiAgICB2YXIgY29s
cyA9IHRoaXMuc2xpY2UoNCx0aGlzLmxlbmd0aC0xKS5zcGxpdCgnLCcpOyAgCiAg
ICB2YXIgaT0wOyBkbyB7IGNvbG9yICs9IHBhcnNlSW50KGNvbHNbaV0pLnRvQ29s
b3JQYXJ0KCkgfSB3aGlsZSAoKytpPDMpOyAgCiAgfSBlbHNlIHsgIAogICAgaWYo
dGhpcy5zbGljZSgwLDEpID09ICcjJykgeyAgCiAgICAgIGlmKHRoaXMubGVuZ3Ro
PT00KSBmb3IodmFyIGk9MTtpPDQ7aSsrKSBjb2xvciArPSAodGhpcy5jaGFyQXQo
aSkgKyB0aGlzLmNoYXJBdChpKSkudG9Mb3dlckNhc2UoKTsgIAogICAgICBpZih0
aGlzLmxlbmd0aD09NykgY29sb3IgPSB0aGlzLnRvTG93ZXJDYXNlKCk7ICAKICAg
IH0gIAogIH0gIAogIHJldHVybihjb2xvci5sZW5ndGg9PTcgPyBjb2xvciA6IChh
cmd1bWVudHNbMF0gfHwgdGhpcykpOyAgCn0KCkVsZW1lbnQuY29sbGVjdFRleHRO
b2RlcyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsgIAogIHJldHVybiAkQSgkKGVsZW1l
bnQpLmNoaWxkTm9kZXMpLmNvbGxlY3QoIGZ1bmN0aW9uKG5vZGUpIHsKICAgIHJl
dHVybiAobm9kZS5ub2RlVHlwZT09MyA/IG5vZGUubm9kZVZhbHVlIDogCiAgICAg
IChub2RlLmhhc0NoaWxkTm9kZXMoKSA/IEVsZW1lbnQuY29sbGVjdFRleHROb2Rl
cyhub2RlKSA6ICcnKSk7CiAgfSkuZmxhdHRlbigpLmpvaW4oJycpOwp9CgpFbGVt
ZW50LmNvbGxlY3RUZXh0Tm9kZXNJZ25vcmVDbGFzcyA9IGZ1bmN0aW9uKGVsZW1l
bnQsIGNsYXNzTmFtZSkgeyAgCiAgcmV0dXJuICRBKCQoZWxlbWVudCkuY2hpbGRO
b2RlcykuY29sbGVjdCggZnVuY3Rpb24obm9kZSkgewogICAgcmV0dXJuIChub2Rl
Lm5vZGVUeXBlPT0zID8gbm9kZS5ub2RlVmFsdWUgOiAKICAgICAgKChub2RlLmhh
c0NoaWxkTm9kZXMoKSAmJiAhRWxlbWVudC5oYXNDbGFzc05hbWUobm9kZSxjbGFz
c05hbWUpKSA/IAogICAgICAgIEVsZW1lbnQuY29sbGVjdFRleHROb2Rlcyhub2Rl
KSA6ICcnKSk7CiAgfSkuZmxhdHRlbigpLmpvaW4oJycpOwp9CgpFbGVtZW50LnNl
dFN0eWxlID0gZnVuY3Rpb24oZWxlbWVudCwgc3R5bGUpIHsKICBlbGVtZW50ID0g
JChlbGVtZW50KTsKICBmb3IoayBpbiBzdHlsZSkgZWxlbWVudC5zdHlsZVtrLmNh
bWVsaXplKCldID0gc3R5bGVba107Cn0KCkVsZW1lbnQuc2V0Q29udGVudFpvb20g
PSBmdW5jdGlvbihlbGVtZW50LCBwZXJjZW50KSB7ICAKICBFbGVtZW50LnNldFN0
eWxlKGVsZW1lbnQsIHtmb250U2l6ZTogKHBlcmNlbnQvMTAwKSArICdlbSd9KTsg
ICAKICBpZihuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmRleE9mKCdBcHBsZVdlYktp
dCcpPjApIHdpbmRvdy5zY3JvbGxCeSgwLDApOyAgCn0KCkVsZW1lbnQuZ2V0T3Bh
Y2l0eSA9IGZ1bmN0aW9uKGVsZW1lbnQpeyAgCiAgdmFyIG9wYWNpdHk7CiAgaWYg
KG9wYWNpdHkgPSBFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQsICdvcGFjaXR5Jykp
ICAKICAgIHJldHVybiBwYXJzZUZsb2F0KG9wYWNpdHkpOyAgCiAgaWYgKG9wYWNp
dHkgPSAoRWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCAnZmlsdGVyJykgfHwgJycp
Lm1hdGNoKC9hbHBoYVwob3BhY2l0eT0oLiopXCkvKSkgIAogICAgaWYob3BhY2l0
eVsxXSkgcmV0dXJuIHBhcnNlRmxvYXQob3BhY2l0eVsxXSkgLyAxMDA7ICAKICBy
ZXR1cm4gMS4wOyAgCn0KCkVsZW1lbnQuc2V0T3BhY2l0eSA9IGZ1bmN0aW9uKGVs
ZW1lbnQsIHZhbHVlKXsgIAogIGVsZW1lbnQ9ICQoZWxlbWVudCk7ICAKICBpZiAo
dmFsdWUgPT0gMSl7CiAgICBFbGVtZW50LnNldFN0eWxlKGVsZW1lbnQsIHsgb3Bh
Y2l0eTogCiAgICAgICgvR2Vja28vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkg
JiYgIS9Lb25xdWVyb3J8U2FmYXJpfEtIVE1MLy50ZXN0KG5hdmlnYXRvci51c2Vy
QWdlbnQpKSA/IAogICAgICAwLjk5OTk5OSA6IG51bGwgfSk7CiAgICBpZigvTVNJ
RS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkgIAogICAgICBFbGVtZW50LnNl
dFN0eWxlKGVsZW1lbnQsIHtmaWx0ZXI6IEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVu
dCwnZmlsdGVyJykucmVwbGFjZSgvYWxwaGFcKFteXCldKlwpL2dpLCcnKX0pOyAg
CiAgfSBlbHNlIHsgIAogICAgaWYodmFsdWUgPCAwLjAwMDAxKSB2YWx1ZSA9IDA7
ICAKICAgIEVsZW1lbnQuc2V0U3R5bGUoZWxlbWVudCwge29wYWNpdHk6IHZhbHVl
fSk7CiAgICBpZigvTVNJRS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkgIAog
ICAgIEVsZW1lbnQuc2V0U3R5bGUoZWxlbWVudCwgCiAgICAgICB7IGZpbHRlcjog
RWxlbWVudC5nZXRTdHlsZShlbGVtZW50LCdmaWx0ZXInKS5yZXBsYWNlKC9hbHBo
YVwoW15cKV0qXCkvZ2ksJycpICsKICAgICAgICAgICAgICAgICAnYWxwaGEob3Bh
Y2l0eT0nK3ZhbHVlKjEwMCsnKScgfSk7ICAKICB9ICAgCn0gIAogCkVsZW1lbnQu
Z2V0SW5saW5lT3BhY2l0eSA9IGZ1bmN0aW9uKGVsZW1lbnQpeyAgCiAgcmV0dXJu
ICQoZWxlbWVudCkuc3R5bGUub3BhY2l0eSB8fCAnJzsKfSAgCgpFbGVtZW50LmNo
aWxkcmVuV2l0aENsYXNzTmFtZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIGNsYXNzTmFt
ZSkgeyAgCiAgcmV0dXJuICRBKCQoZWxlbWVudCkuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoJyonKSkuc2VsZWN0KAogICAgZnVuY3Rpb24oYykgeyByZXR1cm4gRWxlbWVu
dC5oYXNDbGFzc05hbWUoYywgY2xhc3NOYW1lKSB9KTsKfQoKQXJyYXkucHJvdG90
eXBlLmNhbGwgPSBmdW5jdGlvbigpIHsKICB2YXIgYXJncyA9IGFyZ3VtZW50czsK
ICB0aGlzLmVhY2goZnVuY3Rpb24oZil7IGYuYXBwbHkodGhpcywgYXJncykgfSk7
Cn0KCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKdmFyIEVmZmVjdCA9
IHsKICB0YWdpZnlUZXh0OiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICB2YXIgdGFn
aWZ5U3R5bGUgPSAncG9zaXRpb246cmVsYXRpdmUnOwogICAgaWYoL01TSUUvLnRl
c3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpIHRhZ2lmeVN0eWxlICs9ICc7em9vbTox
JzsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogICAgJEEoZWxlbWVudC5jaGls
ZE5vZGVzKS5lYWNoKCBmdW5jdGlvbihjaGlsZCkgewogICAgICBpZihjaGlsZC5u
b2RlVHlwZT09MykgewogICAgICAgIGNoaWxkLm5vZGVWYWx1ZS50b0FycmF5KCku
ZWFjaCggZnVuY3Rpb24oY2hhcmFjdGVyKSB7CiAgICAgICAgICBlbGVtZW50Lmlu
c2VydEJlZm9yZSgKICAgICAgICAgICAgQnVpbGRlci5ub2RlKCdzcGFuJyx7c3R5
bGU6IHRhZ2lmeVN0eWxlfSwKICAgICAgICAgICAgICBjaGFyYWN0ZXIgPT0gJyAn
ID8gU3RyaW5nLmZyb21DaGFyQ29kZSgxNjApIDogY2hhcmFjdGVyKSwgCiAgICAg
ICAgICAgICAgY2hpbGQpOwogICAgICAgIH0pOwogICAgICAgIEVsZW1lbnQucmVt
b3ZlKGNoaWxkKTsKICAgICAgfQogICAgfSk7CiAgfSwKICBtdWx0aXBsZTogZnVu
Y3Rpb24oZWxlbWVudCwgZWZmZWN0KSB7CiAgICB2YXIgZWxlbWVudHM7CiAgICBp
ZigoKHR5cGVvZiBlbGVtZW50ID09ICdvYmplY3QnKSB8fCAKICAgICAgICAodHlw
ZW9mIGVsZW1lbnQgPT0gJ2Z1bmN0aW9uJykpICYmIAogICAgICAgKGVsZW1lbnQu
bGVuZ3RoKSkKICAgICAgZWxlbWVudHMgPSBlbGVtZW50OwogICAgZWxzZQogICAg
ICBlbGVtZW50cyA9ICQoZWxlbWVudCkuY2hpbGROb2RlczsKICAgICAgCiAgICB2
YXIgb3B0aW9ucyA9IE9iamVjdC5leHRlbmQoewogICAgICBzcGVlZDogMC4xLAog
ICAgICBkZWxheTogMC4wCiAgICB9LCBhcmd1bWVudHNbMl0gfHwge30pOwogICAg
dmFyIG1hc3RlckRlbGF5ID0gb3B0aW9ucy5kZWxheTsKCiAgICAkQShlbGVtZW50
cykuZWFjaCggZnVuY3Rpb24oZWxlbWVudCwgaW5kZXgpIHsKICAgICAgbmV3IGVm
ZmVjdChlbGVtZW50LCBPYmplY3QuZXh0ZW5kKG9wdGlvbnMsIHsgZGVsYXk6IGlu
ZGV4ICogb3B0aW9ucy5zcGVlZCArIG1hc3RlckRlbGF5IH0pKTsKICAgIH0pOwog
IH0sCiAgUEFJUlM6IHsKICAgICdzbGlkZSc6ICBbJ1NsaWRlRG93bicsJ1NsaWRl
VXAnXSwKICAgICdibGluZCc6ICBbJ0JsaW5kRG93bicsJ0JsaW5kVXAnXSwKICAg
ICdhcHBlYXInOiBbJ0FwcGVhcicsJ0ZhZGUnXQogIH0sCiAgdG9nZ2xlOiBmdW5j
dGlvbihlbGVtZW50LCBlZmZlY3QpIHsKICAgIGVsZW1lbnQgPSAkKGVsZW1lbnQp
OwogICAgZWZmZWN0ID0gKGVmZmVjdCB8fCAnYXBwZWFyJykudG9Mb3dlckNhc2Uo
KTsKICAgIHZhciBvcHRpb25zID0gT2JqZWN0LmV4dGVuZCh7CiAgICAgIHF1ZXVl
OiB7IHBvc2l0aW9uOidlbmQnLCBzY29wZTooZWxlbWVudC5pZCB8fCAnZ2xvYmFs
JykgfQogICAgfSwgYXJndW1lbnRzWzJdIHx8IHt9KTsKICAgIEVmZmVjdFtFbGVt
ZW50LnZpc2libGUoZWxlbWVudCkgPyAKICAgICAgRWZmZWN0LlBBSVJTW2VmZmVj
dF1bMV0gOiBFZmZlY3QuUEFJUlNbZWZmZWN0XVswXV0oZWxlbWVudCwgb3B0aW9u
cyk7CiAgfQp9OwoKdmFyIEVmZmVjdDIgPSBFZmZlY3Q7IC8vIGRlcHJlY2F0ZWQK
Ci8qIC0tLS0tLS0tLS0tLS0gdHJhbnNpdGlvbnMgLS0tLS0tLS0tLS0tLSAqLwoK
RWZmZWN0LlRyYW5zaXRpb25zID0ge30KCkVmZmVjdC5UcmFuc2l0aW9ucy5saW5l
YXIgPSBmdW5jdGlvbihwb3MpIHsKICByZXR1cm4gcG9zOwp9CkVmZmVjdC5UcmFu
c2l0aW9ucy5zaW5vaWRhbCA9IGZ1bmN0aW9uKHBvcykgewogIHJldHVybiAoLU1h
dGguY29zKHBvcypNYXRoLlBJKS8yKSArIDAuNTsKfQpFZmZlY3QuVHJhbnNpdGlv
bnMucmV2ZXJzZSAgPSBmdW5jdGlvbihwb3MpIHsKICByZXR1cm4gMS1wb3M7Cn0K
RWZmZWN0LlRyYW5zaXRpb25zLmZsaWNrZXIgPSBmdW5jdGlvbihwb3MpIHsKICBy
ZXR1cm4gKCgtTWF0aC5jb3MocG9zKk1hdGguUEkpLzQpICsgMC43NSkgKyBNYXRo
LnJhbmRvbSgpLzQ7Cn0KRWZmZWN0LlRyYW5zaXRpb25zLndvYmJsZSA9IGZ1bmN0
aW9uKHBvcykgewogIHJldHVybiAoLU1hdGguY29zKHBvcypNYXRoLlBJKig5KnBv
cykpLzIpICsgMC41Owp9CkVmZmVjdC5UcmFuc2l0aW9ucy5wdWxzZSA9IGZ1bmN0
aW9uKHBvcykgewogIHJldHVybiAoTWF0aC5mbG9vcihwb3MqMTApICUgMiA9PSAw
ID8gCiAgICAocG9zKjEwLU1hdGguZmxvb3IocG9zKjEwKSkgOiAxLShwb3MqMTAt
TWF0aC5mbG9vcihwb3MqMTApKSk7Cn0KRWZmZWN0LlRyYW5zaXRpb25zLm5vbmUg
PSBmdW5jdGlvbihwb3MpIHsKICByZXR1cm4gMDsKfQpFZmZlY3QuVHJhbnNpdGlv
bnMuZnVsbCA9IGZ1bmN0aW9uKHBvcykgewogIHJldHVybiAxOwp9CgovKiAtLS0t
LS0tLS0tLS0tIGNvcmUgZWZmZWN0cyAtLS0tLS0tLS0tLS0tICovCgpFZmZlY3Qu
U2NvcGVkUXVldWUgPSBDbGFzcy5jcmVhdGUoKTsKT2JqZWN0LmV4dGVuZChPYmpl
Y3QuZXh0ZW5kKEVmZmVjdC5TY29wZWRRdWV1ZS5wcm90b3R5cGUsIEVudW1lcmFi
bGUpLCB7CiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7CiAgICB0aGlzLmVmZmVj
dHMgID0gW107CiAgICB0aGlzLmludGVydmFsID0gbnVsbDsKICB9LAogIF9lYWNo
OiBmdW5jdGlvbihpdGVyYXRvcikgewogICAgdGhpcy5lZmZlY3RzLl9lYWNoKGl0
ZXJhdG9yKTsKICB9LAogIGFkZDogZnVuY3Rpb24oZWZmZWN0KSB7CiAgICB2YXIg
dGltZXN0YW1wID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7CiAgICAKICAgIHZhciBw
b3NpdGlvbiA9ICh0eXBlb2YgZWZmZWN0Lm9wdGlvbnMucXVldWUgPT0gJ3N0cmlu
ZycpID8gCiAgICAgIGVmZmVjdC5vcHRpb25zLnF1ZXVlIDogZWZmZWN0Lm9wdGlv
bnMucXVldWUucG9zaXRpb247CiAgICAKICAgIHN3aXRjaChwb3NpdGlvbikgewog
ICAgICBjYXNlICdmcm9udCc6CiAgICAgICAgLy8gbW92ZSB1bnN0YXJ0ZWQgZWZm
ZWN0cyBhZnRlciB0aGlzIGVmZmVjdCAgCiAgICAgICAgdGhpcy5lZmZlY3RzLmZp
bmRBbGwoZnVuY3Rpb24oZSl7IHJldHVybiBlLnN0YXRlPT0naWRsZScgfSkuZWFj
aCggZnVuY3Rpb24oZSkgewogICAgICAgICAgICBlLnN0YXJ0T24gICs9IGVmZmVj
dC5maW5pc2hPbjsKICAgICAgICAgICAgZS5maW5pc2hPbiArPSBlZmZlY3QuZmlu
aXNoT247CiAgICAgICAgICB9KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAn
ZW5kJzoKICAgICAgICAvLyBzdGFydCBlZmZlY3QgYWZ0ZXIgbGFzdCBxdWV1ZWQg
ZWZmZWN0IGhhcyBmaW5pc2hlZAogICAgICAgIHRpbWVzdGFtcCA9IHRoaXMuZWZm
ZWN0cy5wbHVjaygnZmluaXNoT24nKS5tYXgoKSB8fCB0aW1lc3RhbXA7CiAgICAg
ICAgYnJlYWs7CiAgICB9CiAgICAKICAgIGVmZmVjdC5zdGFydE9uICArPSB0aW1l
c3RhbXA7CiAgICBlZmZlY3QuZmluaXNoT24gKz0gdGltZXN0YW1wOwogICAgdGhp
cy5lZmZlY3RzLnB1c2goZWZmZWN0KTsKICAgIGlmKCF0aGlzLmludGVydmFsKSAK
ICAgICAgdGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKHRoaXMubG9vcC5iaW5k
KHRoaXMpLCA0MCk7CiAgfSwKICByZW1vdmU6IGZ1bmN0aW9uKGVmZmVjdCkgewog
ICAgdGhpcy5lZmZlY3RzID0gdGhpcy5lZmZlY3RzLnJlamVjdChmdW5jdGlvbihl
KSB7IHJldHVybiBlPT1lZmZlY3QgfSk7CiAgICBpZih0aGlzLmVmZmVjdHMubGVu
Z3RoID09IDApIHsKICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTsK
ICAgICAgdGhpcy5pbnRlcnZhbCA9IG51bGw7CiAgICB9CiAgfSwKICBsb29wOiBm
dW5jdGlvbigpIHsKICAgIHZhciB0aW1lUG9zID0gbmV3IERhdGUoKS5nZXRUaW1l
KCk7CiAgICB0aGlzLmVmZmVjdHMuaW52b2tlKCdsb29wJywgdGltZVBvcyk7CiAg
fQp9KTsKCkVmZmVjdC5RdWV1ZXMgPSB7CiAgaW5zdGFuY2VzOiAkSCgpLAogIGdl
dDogZnVuY3Rpb24ocXVldWVOYW1lKSB7CiAgICBpZih0eXBlb2YgcXVldWVOYW1l
ICE9ICdzdHJpbmcnKSByZXR1cm4gcXVldWVOYW1lOwogICAgCiAgICBpZighdGhp
cy5pbnN0YW5jZXNbcXVldWVOYW1lXSkKICAgICAgdGhpcy5pbnN0YW5jZXNbcXVl
dWVOYW1lXSA9IG5ldyBFZmZlY3QuU2NvcGVkUXVldWUoKTsKICAgICAgCiAgICBy
ZXR1cm4gdGhpcy5pbnN0YW5jZXNbcXVldWVOYW1lXTsKICB9Cn0KRWZmZWN0LlF1
ZXVlID0gRWZmZWN0LlF1ZXVlcy5nZXQoJ2dsb2JhbCcpOwoKRWZmZWN0LkRlZmF1
bHRPcHRpb25zID0gewogIHRyYW5zaXRpb246IEVmZmVjdC5UcmFuc2l0aW9ucy5z
aW5vaWRhbCwKICBkdXJhdGlvbjogICAxLjAsICAgLy8gc2Vjb25kcwogIGZwczog
ICAgICAgIDI1LjAsICAvLyBtYXguIDI1ZnBzIGR1ZSB0byBFZmZlY3QuUXVldWUg
aW1wbGVtZW50YXRpb24KICBzeW5jOiAgICAgICBmYWxzZSwgLy8gdHJ1ZSBmb3Ig
Y29tYmluaW5nCiAgZnJvbTogICAgICAgMC4wLAogIHRvOiAgICAgICAgIDEuMCwK
ICBkZWxheTogICAgICAwLjAsCiAgcXVldWU6ICAgICAgJ3BhcmFsbGVsJwp9CgpF
ZmZlY3QuQmFzZSA9IGZ1bmN0aW9uKCkge307CkVmZmVjdC5CYXNlLnByb3RvdHlw
ZSA9IHsKICBwb3NpdGlvbjogbnVsbCwKICBzdGFydDogZnVuY3Rpb24ob3B0aW9u
cykgewogICAgdGhpcy5vcHRpb25zICAgICAgPSBPYmplY3QuZXh0ZW5kKE9iamVj
dC5leHRlbmQoe30sRWZmZWN0LkRlZmF1bHRPcHRpb25zKSwgb3B0aW9ucyB8fCB7
fSk7CiAgICB0aGlzLmN1cnJlbnRGcmFtZSA9IDA7CiAgICB0aGlzLnN0YXRlICAg
ICAgICA9ICdpZGxlJzsKICAgIHRoaXMuc3RhcnRPbiAgICAgID0gdGhpcy5vcHRp
b25zLmRlbGF5KjEwMDA7CiAgICB0aGlzLmZpbmlzaE9uICAgICA9IHRoaXMuc3Rh
cnRPbiArICh0aGlzLm9wdGlvbnMuZHVyYXRpb24qMTAwMCk7CiAgICB0aGlzLmV2
ZW50KCdiZWZvcmVTdGFydCcpOwogICAgaWYoIXRoaXMub3B0aW9ucy5zeW5jKQog
ICAgICBFZmZlY3QuUXVldWVzLmdldCh0eXBlb2YgdGhpcy5vcHRpb25zLnF1ZXVl
ID09ICdzdHJpbmcnID8gCiAgICAgICAgJ2dsb2JhbCcgOiB0aGlzLm9wdGlvbnMu
cXVldWUuc2NvcGUpLmFkZCh0aGlzKTsKICB9LAogIGxvb3A6IGZ1bmN0aW9uKHRp
bWVQb3MpIHsKICAgIGlmKHRpbWVQb3MgPj0gdGhpcy5zdGFydE9uKSB7CiAgICAg
IGlmKHRpbWVQb3MgPj0gdGhpcy5maW5pc2hPbikgewogICAgICAgIHRoaXMucmVu
ZGVyKDEuMCk7CiAgICAgICAgdGhpcy5jYW5jZWwoKTsKICAgICAgICB0aGlzLmV2
ZW50KCdiZWZvcmVGaW5pc2gnKTsKICAgICAgICBpZih0aGlzLmZpbmlzaCkgdGhp
cy5maW5pc2goKTsgCiAgICAgICAgdGhpcy5ldmVudCgnYWZ0ZXJGaW5pc2gnKTsK
ICAgICAgICByZXR1cm47ICAKICAgICAgfQogICAgICB2YXIgcG9zICAgPSAodGlt
ZVBvcyAtIHRoaXMuc3RhcnRPbikgLyAodGhpcy5maW5pc2hPbiAtIHRoaXMuc3Rh
cnRPbik7CiAgICAgIHZhciBmcmFtZSA9IE1hdGgucm91bmQocG9zICogdGhpcy5v
cHRpb25zLmZwcyAqIHRoaXMub3B0aW9ucy5kdXJhdGlvbik7CiAgICAgIGlmKGZy
YW1lID4gdGhpcy5jdXJyZW50RnJhbWUpIHsKICAgICAgICB0aGlzLnJlbmRlcihw
b3MpOwogICAgICAgIHRoaXMuY3VycmVudEZyYW1lID0gZnJhbWU7CiAgICAgIH0K
ICAgIH0KICB9LAogIHJlbmRlcjogZnVuY3Rpb24ocG9zKSB7CiAgICBpZih0aGlz
LnN0YXRlID09ICdpZGxlJykgewogICAgICB0aGlzLnN0YXRlID0gJ3J1bm5pbmcn
OwogICAgICB0aGlzLmV2ZW50KCdiZWZvcmVTZXR1cCcpOwogICAgICBpZih0aGlz
LnNldHVwKSB0aGlzLnNldHVwKCk7CiAgICAgIHRoaXMuZXZlbnQoJ2FmdGVyU2V0
dXAnKTsKICAgIH0KICAgIGlmKHRoaXMuc3RhdGUgPT0gJ3J1bm5pbmcnKSB7CiAg
ICAgIGlmKHRoaXMub3B0aW9ucy50cmFuc2l0aW9uKSBwb3MgPSB0aGlzLm9wdGlv
bnMudHJhbnNpdGlvbihwb3MpOwogICAgICBwb3MgKj0gKHRoaXMub3B0aW9ucy50
by10aGlzLm9wdGlvbnMuZnJvbSk7CiAgICAgIHBvcyArPSB0aGlzLm9wdGlvbnMu
ZnJvbTsKICAgICAgdGhpcy5wb3NpdGlvbiA9IHBvczsKICAgICAgdGhpcy5ldmVu
dCgnYmVmb3JlVXBkYXRlJyk7CiAgICAgIGlmKHRoaXMudXBkYXRlKSB0aGlzLnVw
ZGF0ZShwb3MpOwogICAgICB0aGlzLmV2ZW50KCdhZnRlclVwZGF0ZScpOwogICAg
fQogIH0sCiAgY2FuY2VsOiBmdW5jdGlvbigpIHsKICAgIGlmKCF0aGlzLm9wdGlv
bnMuc3luYykKICAgICAgRWZmZWN0LlF1ZXVlcy5nZXQodHlwZW9mIHRoaXMub3B0
aW9ucy5xdWV1ZSA9PSAnc3RyaW5nJyA/IAogICAgICAgICdnbG9iYWwnIDogdGhp
cy5vcHRpb25zLnF1ZXVlLnNjb3BlKS5yZW1vdmUodGhpcyk7CiAgICB0aGlzLnN0
YXRlID0gJ2ZpbmlzaGVkJzsKICB9LAogIGV2ZW50OiBmdW5jdGlvbihldmVudE5h
bWUpIHsKICAgIGlmKHRoaXMub3B0aW9uc1tldmVudE5hbWUgKyAnSW50ZXJuYWwn
XSkgdGhpcy5vcHRpb25zW2V2ZW50TmFtZSArICdJbnRlcm5hbCddKHRoaXMpOwog
ICAgaWYodGhpcy5vcHRpb25zW2V2ZW50TmFtZV0pIHRoaXMub3B0aW9uc1tldmVu
dE5hbWVdKHRoaXMpOwogIH0sCiAgaW5zcGVjdDogZnVuY3Rpb24oKSB7CiAgICBy
ZXR1cm4gJyM8RWZmZWN0OicgKyAkSCh0aGlzKS5pbnNwZWN0KCkgKyAnLG9wdGlv
bnM6JyArICRIKHRoaXMub3B0aW9ucykuaW5zcGVjdCgpICsgJz4nOwogIH0KfQoK
RWZmZWN0LlBhcmFsbGVsID0gQ2xhc3MuY3JlYXRlKCk7Ck9iamVjdC5leHRlbmQo
T2JqZWN0LmV4dGVuZChFZmZlY3QuUGFyYWxsZWwucHJvdG90eXBlLCBFZmZlY3Qu
QmFzZS5wcm90b3R5cGUpLCB7CiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWZmZWN0
cykgewogICAgdGhpcy5lZmZlY3RzID0gZWZmZWN0cyB8fCBbXTsKICAgIHRoaXMu
c3RhcnQoYXJndW1lbnRzWzFdKTsKICB9LAogIHVwZGF0ZTogZnVuY3Rpb24ocG9z
aXRpb24pIHsKICAgIHRoaXMuZWZmZWN0cy5pbnZva2UoJ3JlbmRlcicsIHBvc2l0
aW9uKTsKICB9LAogIGZpbmlzaDogZnVuY3Rpb24ocG9zaXRpb24pIHsKICAgIHRo
aXMuZWZmZWN0cy5lYWNoKCBmdW5jdGlvbihlZmZlY3QpIHsKICAgICAgZWZmZWN0
LnJlbmRlcigxLjApOwogICAgICBlZmZlY3QuY2FuY2VsKCk7CiAgICAgIGVmZmVj
dC5ldmVudCgnYmVmb3JlRmluaXNoJyk7CiAgICAgIGlmKGVmZmVjdC5maW5pc2gp
IGVmZmVjdC5maW5pc2gocG9zaXRpb24pOwogICAgICBlZmZlY3QuZXZlbnQoJ2Fm
dGVyRmluaXNoJyk7CiAgICB9KTsKICB9Cn0pOwoKRWZmZWN0Lk9wYWNpdHkgPSBD
bGFzcy5jcmVhdGUoKTsKT2JqZWN0LmV4dGVuZChPYmplY3QuZXh0ZW5kKEVmZmVj
dC5PcGFjaXR5LnByb3RvdHlwZSwgRWZmZWN0LkJhc2UucHJvdG90eXBlKSwgewog
IGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIHRoaXMuZWxlbWVu
dCA9ICQoZWxlbWVudCk7CiAgICAvLyBtYWtlIHRoaXMgd29yayBvbiBJRSBvbiBl
bGVtZW50cyB3aXRob3V0ICdsYXlvdXQnCiAgICBpZigvTVNJRS8udGVzdChuYXZp
Z2F0b3IudXNlckFnZW50KSAmJiAoIXRoaXMuZWxlbWVudC5oYXNMYXlvdXQpKQog
ICAgICBFbGVtZW50LnNldFN0eWxlKHRoaXMuZWxlbWVudCwge3pvb206IDF9KTsK
ICAgIHZhciBvcHRpb25zID0gT2JqZWN0LmV4dGVuZCh7CiAgICAgIGZyb206IEVs
ZW1lbnQuZ2V0T3BhY2l0eSh0aGlzLmVsZW1lbnQpIHx8IDAuMCwKICAgICAgdG86
ICAgMS4wCiAgICB9LCBhcmd1bWVudHNbMV0gfHwge30pOwogICAgdGhpcy5zdGFy
dChvcHRpb25zKTsKICB9LAogIHVwZGF0ZTogZnVuY3Rpb24ocG9zaXRpb24pIHsK
ICAgIEVsZW1lbnQuc2V0T3BhY2l0eSh0aGlzLmVsZW1lbnQsIHBvc2l0aW9uKTsK
ICB9Cn0pOwoKRWZmZWN0Lk1vdmUgPSBDbGFzcy5jcmVhdGUoKTsKT2JqZWN0LmV4
dGVuZChPYmplY3QuZXh0ZW5kKEVmZmVjdC5Nb3ZlLnByb3RvdHlwZSwgRWZmZWN0
LkJhc2UucHJvdG90eXBlKSwgewogIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsZW1l
bnQpIHsKICAgIHRoaXMuZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgICB2YXIgb3B0
aW9ucyA9IE9iamVjdC5leHRlbmQoewogICAgICB4OiAgICAwLAogICAgICB5OiAg
ICAwLAogICAgICBtb2RlOiAncmVsYXRpdmUnCiAgICB9LCBhcmd1bWVudHNbMV0g
fHwge30pOwogICAgdGhpcy5zdGFydChvcHRpb25zKTsKICB9LAogIHNldHVwOiBm
dW5jdGlvbigpIHsKICAgIC8vIEJ1ZyBpbiBPcGVyYTogT3BlcmEgcmV0dXJucyB0
aGUgInJlYWwiIHBvc2l0aW9uIG9mIGEgc3RhdGljIGVsZW1lbnQgb3IKICAgIC8v
IHJlbGF0aXZlIGVsZW1lbnQgdGhhdCBkb2VzIG5vdCBoYXZlIHRvcC9sZWZ0IGV4
cGxpY2l0bHkgc2V0LgogICAgLy8gPT0+IEFsd2F5cyBzZXQgdG9wIGFuZCBsZWZ0
IGZvciBwb3NpdGlvbiByZWxhdGl2ZSBlbGVtZW50cyBpbiB5b3VyIHN0eWxlc2hl
ZXRzIAogICAgLy8gKHRvIDAgaWYgeW91IGRvIG5vdCBuZWVkIHRoZW0pIAogICAg
RWxlbWVudC5tYWtlUG9zaXRpb25lZCh0aGlzLmVsZW1lbnQpOwogICAgdGhpcy5v
cmlnaW5hbExlZnQgPSBwYXJzZUZsb2F0KEVsZW1lbnQuZ2V0U3R5bGUodGhpcy5l
bGVtZW50LCdsZWZ0JykgfHwgJzAnKTsKICAgIHRoaXMub3JpZ2luYWxUb3AgID0g
cGFyc2VGbG9hdChFbGVtZW50LmdldFN0eWxlKHRoaXMuZWxlbWVudCwndG9wJykg
IHx8ICcwJyk7CiAgICBpZih0aGlzLm9wdGlvbnMubW9kZSA9PSAnYWJzb2x1dGUn
KSB7CiAgICAgIC8vIGFic29sdXRlIG1vdmVtZW50LCBzbyB3ZSBuZWVkIHRvIGNh
bGMgZGVsdGFYIGFuZCBkZWx0YVkKICAgICAgdGhpcy5vcHRpb25zLnggPSB0aGlz
Lm9wdGlvbnMueCAtIHRoaXMub3JpZ2luYWxMZWZ0OwogICAgICB0aGlzLm9wdGlv
bnMueSA9IHRoaXMub3B0aW9ucy55IC0gdGhpcy5vcmlnaW5hbFRvcDsKICAgIH0K
ICB9LAogIHVwZGF0ZTogZnVuY3Rpb24ocG9zaXRpb24pIHsKICAgIEVsZW1lbnQu
c2V0U3R5bGUodGhpcy5lbGVtZW50LCB7CiAgICAgIGxlZnQ6IHRoaXMub3B0aW9u
cy54ICAqIHBvc2l0aW9uICsgdGhpcy5vcmlnaW5hbExlZnQgKyAncHgnLAogICAg
ICB0b3A6ICB0aGlzLm9wdGlvbnMueSAgKiBwb3NpdGlvbiArIHRoaXMub3JpZ2lu
YWxUb3AgICsgJ3B4JwogICAgfSk7CiAgfQp9KTsKCi8vIGZvciBiYWNrd2FyZHMg
Y29tcGF0aWJpbGl0eQpFZmZlY3QuTW92ZUJ5ID0gZnVuY3Rpb24oZWxlbWVudCwg
dG9Ub3AsIHRvTGVmdCkgewogIHJldHVybiBuZXcgRWZmZWN0Lk1vdmUoZWxlbWVu
dCwgCiAgICBPYmplY3QuZXh0ZW5kKHsgeDogdG9MZWZ0LCB5OiB0b1RvcCB9LCBh
cmd1bWVudHNbM10gfHwge30pKTsKfTsKCkVmZmVjdC5TY2FsZSA9IENsYXNzLmNy
ZWF0ZSgpOwpPYmplY3QuZXh0ZW5kKE9iamVjdC5leHRlbmQoRWZmZWN0LlNjYWxl
LnByb3RvdHlwZSwgRWZmZWN0LkJhc2UucHJvdG90eXBlKSwgewogIGluaXRpYWxp
emU6IGZ1bmN0aW9uKGVsZW1lbnQsIHBlcmNlbnQpIHsKICAgIHRoaXMuZWxlbWVu
dCA9ICQoZWxlbWVudCkKICAgIHZhciBvcHRpb25zID0gT2JqZWN0LmV4dGVuZCh7
CiAgICAgIHNjYWxlWDogdHJ1ZSwKICAgICAgc2NhbGVZOiB0cnVlLAogICAgICBz
Y2FsZUNvbnRlbnQ6IHRydWUsCiAgICAgIHNjYWxlRnJvbUNlbnRlcjogZmFsc2Us
CiAgICAgIHNjYWxlTW9kZTogJ2JveCcsICAgICAgICAvLyAnYm94JyBvciAnY29u
dGVudHMnIG9yIHt9IHdpdGggcHJvdmlkZWQgdmFsdWVzCiAgICAgIHNjYWxlRnJv
bTogMTAwLjAsCiAgICAgIHNjYWxlVG86ICAgcGVyY2VudAogICAgfSwgYXJndW1l
bnRzWzJdIHx8IHt9KTsKICAgIHRoaXMuc3RhcnQob3B0aW9ucyk7CiAgfSwKICBz
ZXR1cDogZnVuY3Rpb24oKSB7CiAgICB0aGlzLnJlc3RvcmVBZnRlckZpbmlzaCA9
IHRoaXMub3B0aW9ucy5yZXN0b3JlQWZ0ZXJGaW5pc2ggfHwgZmFsc2U7CiAgICB0
aGlzLmVsZW1lbnRQb3NpdGlvbmluZyA9IEVsZW1lbnQuZ2V0U3R5bGUodGhpcy5l
bGVtZW50LCdwb3NpdGlvbicpOwogICAgCiAgICB0aGlzLm9yaWdpbmFsU3R5bGUg
PSB7fTsKICAgIFsndG9wJywnbGVmdCcsJ3dpZHRoJywnaGVpZ2h0JywnZm9udFNp
emUnXS5lYWNoKCBmdW5jdGlvbihrKSB7CiAgICAgIHRoaXMub3JpZ2luYWxTdHls
ZVtrXSA9IHRoaXMuZWxlbWVudC5zdHlsZVtrXTsKICAgIH0uYmluZCh0aGlzKSk7
CiAgICAgIAogICAgdGhpcy5vcmlnaW5hbFRvcCAgPSB0aGlzLmVsZW1lbnQub2Zm
c2V0VG9wOwogICAgdGhpcy5vcmlnaW5hbExlZnQgPSB0aGlzLmVsZW1lbnQub2Zm
c2V0TGVmdDsKICAgIAogICAgdmFyIGZvbnRTaXplID0gRWxlbWVudC5nZXRTdHls
ZSh0aGlzLmVsZW1lbnQsJ2ZvbnQtc2l6ZScpIHx8ICcxMDAlJzsKICAgIFsnZW0n
LCdweCcsJyUnXS5lYWNoKCBmdW5jdGlvbihmb250U2l6ZVR5cGUpIHsKICAgICAg
aWYoZm9udFNpemUuaW5kZXhPZihmb250U2l6ZVR5cGUpPjApIHsKICAgICAgICB0
aGlzLmZvbnRTaXplICAgICA9IHBhcnNlRmxvYXQoZm9udFNpemUpOwogICAgICAg
IHRoaXMuZm9udFNpemVUeXBlID0gZm9udFNpemVUeXBlOwogICAgICB9CiAgICB9
LmJpbmQodGhpcykpOwogICAgCiAgICB0aGlzLmZhY3RvciA9ICh0aGlzLm9wdGlv
bnMuc2NhbGVUbyAtIHRoaXMub3B0aW9ucy5zY2FsZUZyb20pLzEwMDsKICAgIAog
ICAgdGhpcy5kaW1zID0gbnVsbDsKICAgIGlmKHRoaXMub3B0aW9ucy5zY2FsZU1v
ZGU9PSdib3gnKQogICAgICB0aGlzLmRpbXMgPSBbdGhpcy5lbGVtZW50Lm9mZnNl
dEhlaWdodCwgdGhpcy5lbGVtZW50Lm9mZnNldFdpZHRoXTsKICAgIGlmKC9eY29u
dGVudC8udGVzdCh0aGlzLm9wdGlvbnMuc2NhbGVNb2RlKSkKICAgICAgdGhpcy5k
aW1zID0gW3RoaXMuZWxlbWVudC5zY3JvbGxIZWlnaHQsIHRoaXMuZWxlbWVudC5z
Y3JvbGxXaWR0aF07CiAgICBpZighdGhpcy5kaW1zKQogICAgICB0aGlzLmRpbXMg
PSBbdGhpcy5vcHRpb25zLnNjYWxlTW9kZS5vcmlnaW5hbEhlaWdodCwKICAgICAg
ICAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zY2FsZU1vZGUub3JpZ2luYWxXaWR0
aF07CiAgfSwKICB1cGRhdGU6IGZ1bmN0aW9uKHBvc2l0aW9uKSB7CiAgICB2YXIg
Y3VycmVudFNjYWxlID0gKHRoaXMub3B0aW9ucy5zY2FsZUZyb20vMTAwLjApICsg
KHRoaXMuZmFjdG9yICogcG9zaXRpb24pOwogICAgaWYodGhpcy5vcHRpb25zLnNj
YWxlQ29udGVudCAmJiB0aGlzLmZvbnRTaXplKQogICAgICBFbGVtZW50LnNldFN0
eWxlKHRoaXMuZWxlbWVudCwge2ZvbnRTaXplOiB0aGlzLmZvbnRTaXplICogY3Vy
cmVudFNjYWxlICsgdGhpcy5mb250U2l6ZVR5cGUgfSk7CiAgICB0aGlzLnNldERp
bWVuc2lvbnModGhpcy5kaW1zWzBdICogY3VycmVudFNjYWxlLCB0aGlzLmRpbXNb
MV0gKiBjdXJyZW50U2NhbGUpOwogIH0sCiAgZmluaXNoOiBmdW5jdGlvbihwb3Np
dGlvbikgewogICAgaWYgKHRoaXMucmVzdG9yZUFmdGVyRmluaXNoKSBFbGVtZW50
LnNldFN0eWxlKHRoaXMuZWxlbWVudCwgdGhpcy5vcmlnaW5hbFN0eWxlKTsKICB9
LAogIHNldERpbWVuc2lvbnM6IGZ1bmN0aW9uKGhlaWdodCwgd2lkdGgpIHsKICAg
IHZhciBkID0ge307CiAgICBpZih0aGlzLm9wdGlvbnMuc2NhbGVYKSBkLndpZHRo
ID0gd2lkdGggKyAncHgnOwogICAgaWYodGhpcy5vcHRpb25zLnNjYWxlWSkgZC5o
ZWlnaHQgPSBoZWlnaHQgKyAncHgnOwogICAgaWYodGhpcy5vcHRpb25zLnNjYWxl
RnJvbUNlbnRlcikgewogICAgICB2YXIgdG9wZCAgPSAoaGVpZ2h0IC0gdGhpcy5k
aW1zWzBdKS8yOwogICAgICB2YXIgbGVmdGQgPSAod2lkdGggIC0gdGhpcy5kaW1z
WzFdKS8yOwogICAgICBpZih0aGlzLmVsZW1lbnRQb3NpdGlvbmluZyA9PSAnYWJz
b2x1dGUnKSB7CiAgICAgICAgaWYodGhpcy5vcHRpb25zLnNjYWxlWSkgZC50b3Ag
PSB0aGlzLm9yaWdpbmFsVG9wLXRvcGQgKyAncHgnOwogICAgICAgIGlmKHRoaXMu
b3B0aW9ucy5zY2FsZVgpIGQubGVmdCA9IHRoaXMub3JpZ2luYWxMZWZ0LWxlZnRk
ICsgJ3B4JzsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZih0aGlzLm9wdGlvbnMu
c2NhbGVZKSBkLnRvcCA9IC10b3BkICsgJ3B4JzsKICAgICAgICBpZih0aGlzLm9w
dGlvbnMuc2NhbGVYKSBkLmxlZnQgPSAtbGVmdGQgKyAncHgnOwogICAgICB9CiAg
ICB9CiAgICBFbGVtZW50LnNldFN0eWxlKHRoaXMuZWxlbWVudCwgZCk7CiAgfQp9
KTsKCkVmZmVjdC5IaWdobGlnaHQgPSBDbGFzcy5jcmVhdGUoKTsKT2JqZWN0LmV4
dGVuZChPYmplY3QuZXh0ZW5kKEVmZmVjdC5IaWdobGlnaHQucHJvdG90eXBlLCBF
ZmZlY3QuQmFzZS5wcm90b3R5cGUpLCB7CiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24o
ZWxlbWVudCkgewogICAgdGhpcy5lbGVtZW50ID0gJChlbGVtZW50KTsKICAgIHZh
ciBvcHRpb25zID0gT2JqZWN0LmV4dGVuZCh7IHN0YXJ0Y29sb3I6ICcjZmZmZjk5
JyB9LCBhcmd1bWVudHNbMV0gfHwge30pOwogICAgdGhpcy5zdGFydChvcHRpb25z
KTsKICB9LAogIHNldHVwOiBmdW5jdGlvbigpIHsKICAgIC8vIFByZXZlbnQgZXhl
Y3V0aW5nIG9uIGVsZW1lbnRzIG5vdCBpbiB0aGUgbGF5b3V0IGZsb3cKICAgIGlm
KEVsZW1lbnQuZ2V0U3R5bGUodGhpcy5lbGVtZW50LCAnZGlzcGxheScpPT0nbm9u
ZScpIHsgdGhpcy5jYW5jZWwoKTsgcmV0dXJuOyB9CiAgICAvLyBEaXNhYmxlIGJh
Y2tncm91bmQgaW1hZ2UgZHVyaW5nIHRoZSBlZmZlY3QKICAgIHRoaXMub2xkU3R5
bGUgPSB7CiAgICAgIGJhY2tncm91bmRJbWFnZTogRWxlbWVudC5nZXRTdHlsZSh0
aGlzLmVsZW1lbnQsICdiYWNrZ3JvdW5kLWltYWdlJykgfTsKICAgIEVsZW1lbnQu
c2V0U3R5bGUodGhpcy5lbGVtZW50LCB7YmFja2dyb3VuZEltYWdlOiAnbm9uZSd9
KTsKICAgIGlmKCF0aGlzLm9wdGlvbnMuZW5kY29sb3IpCiAgICAgIHRoaXMub3B0
aW9ucy5lbmRjb2xvciA9IEVsZW1lbnQuZ2V0U3R5bGUodGhpcy5lbGVtZW50LCAn
YmFja2dyb3VuZC1jb2xvcicpLnBhcnNlQ29sb3IoJyNmZmZmZmYnKTsKICAgIGlm
KCF0aGlzLm9wdGlvbnMucmVzdG9yZWNvbG9yKQogICAgICB0aGlzLm9wdGlvbnMu
cmVzdG9yZWNvbG9yID0gRWxlbWVudC5nZXRTdHlsZSh0aGlzLmVsZW1lbnQsICdi
YWNrZ3JvdW5kLWNvbG9yJyk7CiAgICAvLyBpbml0IGNvbG9yIGNhbGN1bGF0aW9u
cwogICAgdGhpcy5fYmFzZSAgPSAkUigwLDIpLm1hcChmdW5jdGlvbihpKXsgcmV0
dXJuIHBhcnNlSW50KHRoaXMub3B0aW9ucy5zdGFydGNvbG9yLnNsaWNlKGkqMisx
LGkqMiszKSwxNikgfS5iaW5kKHRoaXMpKTsKICAgIHRoaXMuX2RlbHRhID0gJFIo
MCwyKS5tYXAoZnVuY3Rpb24oaSl7IHJldHVybiBwYXJzZUludCh0aGlzLm9wdGlv
bnMuZW5kY29sb3Iuc2xpY2UoaSoyKzEsaSoyKzMpLDE2KS10aGlzLl9iYXNlW2ld
IH0uYmluZCh0aGlzKSk7CiAgfSwKICB1cGRhdGU6IGZ1bmN0aW9uKHBvc2l0aW9u
KSB7CiAgICBFbGVtZW50LnNldFN0eWxlKHRoaXMuZWxlbWVudCx7YmFja2dyb3Vu
ZENvbG9yOiAkUigwLDIpLmluamVjdCgnIycsZnVuY3Rpb24obSx2LGkpewogICAg
ICByZXR1cm4gbSsoTWF0aC5yb3VuZCh0aGlzLl9iYXNlW2ldKyh0aGlzLl9kZWx0
YVtpXSpwb3NpdGlvbikpLnRvQ29sb3JQYXJ0KCkpOyB9LmJpbmQodGhpcykpIH0p
OwogIH0sCiAgZmluaXNoOiBmdW5jdGlvbigpIHsKICAgIEVsZW1lbnQuc2V0U3R5
bGUodGhpcy5lbGVtZW50LCBPYmplY3QuZXh0ZW5kKHRoaXMub2xkU3R5bGUsIHsK
ICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLm9wdGlvbnMucmVzdG9yZWNvbG9y
CiAgICB9KSk7CiAgfQp9KTsKCkVmZmVjdC5TY3JvbGxUbyA9IENsYXNzLmNyZWF0
ZSgpOwpPYmplY3QuZXh0ZW5kKE9iamVjdC5leHRlbmQoRWZmZWN0LlNjcm9sbFRv
LnByb3RvdHlwZSwgRWZmZWN0LkJhc2UucHJvdG90eXBlKSwgewogIGluaXRpYWxp
emU6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgIHRoaXMuZWxlbWVudCA9ICQoZWxl
bWVudCk7CiAgICB0aGlzLnN0YXJ0KGFyZ3VtZW50c1sxXSB8fCB7fSk7CiAgfSwK
ICBzZXR1cDogZnVuY3Rpb24oKSB7CiAgICBQb3NpdGlvbi5wcmVwYXJlKCk7CiAg
ICB2YXIgb2Zmc2V0cyA9IFBvc2l0aW9uLmN1bXVsYXRpdmVPZmZzZXQodGhpcy5l
bGVtZW50KTsKICAgIGlmKHRoaXMub3B0aW9ucy5vZmZzZXQpIG9mZnNldHNbMV0g
Kz0gdGhpcy5vcHRpb25zLm9mZnNldDsKICAgIHZhciBtYXggPSB3aW5kb3cuaW5u
ZXJIZWlnaHQgPyAKICAgICAgd2luZG93LmhlaWdodCAtIHdpbmRvdy5pbm5lckhl
aWdodCA6CiAgICAgIGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0IC0gCiAgICAg
ICAgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgPyAKICAg
ICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgOiBk
b2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCk7CiAgICB0aGlzLnNjcm9sbFN0YXJ0
ID0gUG9zaXRpb24uZGVsdGFZOwogICAgdGhpcy5kZWx0YSA9IChvZmZzZXRzWzFd
ID4gbWF4ID8gbWF4IDogb2Zmc2V0c1sxXSkgLSB0aGlzLnNjcm9sbFN0YXJ0Owog
IH0sCiAgdXBkYXRlOiBmdW5jdGlvbihwb3NpdGlvbikgewogICAgUG9zaXRpb24u
cHJlcGFyZSgpOwogICAgd2luZG93LnNjcm9sbFRvKFBvc2l0aW9uLmRlbHRhWCwg
CiAgICAgIHRoaXMuc2Nyb2xsU3RhcnQgKyAocG9zaXRpb24qdGhpcy5kZWx0YSkp
OwogIH0KfSk7CgovKiAtLS0tLS0tLS0tLS0tIGNvbWJpbmF0aW9uIGVmZmVjdHMg
LS0tLS0tLS0tLS0tLSAqLwoKRWZmZWN0LkZhZGUgPSBmdW5jdGlvbihlbGVtZW50
KSB7CiAgdmFyIG9sZE9wYWNpdHkgPSBFbGVtZW50LmdldElubGluZU9wYWNpdHko
ZWxlbWVudCk7CiAgdmFyIG9wdGlvbnMgPSBPYmplY3QuZXh0ZW5kKHsKICBmcm9t
OiBFbGVtZW50LmdldE9wYWNpdHkoZWxlbWVudCkgfHwgMS4wLAogIHRvOiAgIDAu
MCwKICBhZnRlckZpbmlzaEludGVybmFsOiBmdW5jdGlvbihlZmZlY3QpIHsgd2l0
aChFbGVtZW50KSB7IAogICAgaWYoZWZmZWN0Lm9wdGlvbnMudG8hPTApIHJldHVy
bjsKICAgIGhpZGUoZWZmZWN0LmVsZW1lbnQpOwogICAgc2V0U3R5bGUoZWZmZWN0
LmVsZW1lbnQsIHtvcGFjaXR5OiBvbGRPcGFjaXR5fSk7IH19CiAgfSwgYXJndW1l
bnRzWzFdIHx8IHt9KTsKICByZXR1cm4gbmV3IEVmZmVjdC5PcGFjaXR5KGVsZW1l
bnQsb3B0aW9ucyk7Cn0KCkVmZmVjdC5BcHBlYXIgPSBmdW5jdGlvbihlbGVtZW50
KSB7CiAgdmFyIG9wdGlvbnMgPSBPYmplY3QuZXh0ZW5kKHsKICBmcm9tOiAoRWxl
bWVudC5nZXRTdHlsZShlbGVtZW50LCAnZGlzcGxheScpID09ICdub25lJyA/IDAu
MCA6IEVsZW1lbnQuZ2V0T3BhY2l0eShlbGVtZW50KSB8fCAwLjApLAogIHRvOiAg
IDEuMCwKICBiZWZvcmVTZXR1cDogZnVuY3Rpb24oZWZmZWN0KSB7IHdpdGgoRWxl
bWVudCkgewogICAgc2V0T3BhY2l0eShlZmZlY3QuZWxlbWVudCwgZWZmZWN0Lm9w
dGlvbnMuZnJvbSk7CiAgICBzaG93KGVmZmVjdC5lbGVtZW50KTsgfX0KICB9LCBh
cmd1bWVudHNbMV0gfHwge30pOwogIHJldHVybiBuZXcgRWZmZWN0Lk9wYWNpdHko
ZWxlbWVudCxvcHRpb25zKTsKfQoKRWZmZWN0LlB1ZmYgPSBmdW5jdGlvbihlbGVt
ZW50KSB7CiAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgdmFyIG9sZFN0eWxlID0g
eyBvcGFjaXR5OiBFbGVtZW50LmdldElubGluZU9wYWNpdHkoZWxlbWVudCksIHBv
c2l0aW9uOiBFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQsICdwb3NpdGlvbicpIH07
CiAgcmV0dXJuIG5ldyBFZmZlY3QuUGFyYWxsZWwoCiAgIFsgbmV3IEVmZmVjdC5T
Y2FsZShlbGVtZW50LCAyMDAsIAogICAgICB7IHN5bmM6IHRydWUsIHNjYWxlRnJv
bUNlbnRlcjogdHJ1ZSwgc2NhbGVDb250ZW50OiB0cnVlLCByZXN0b3JlQWZ0ZXJG
aW5pc2g6IHRydWUgfSksIAogICAgIG5ldyBFZmZlY3QuT3BhY2l0eShlbGVtZW50
LCB7IHN5bmM6IHRydWUsIHRvOiAwLjAgfSApIF0sIAogICAgIE9iamVjdC5leHRl
bmQoeyBkdXJhdGlvbjogMS4wLCAKICAgICAgYmVmb3JlU2V0dXBJbnRlcm5hbDog
ZnVuY3Rpb24oZWZmZWN0KSB7IHdpdGgoRWxlbWVudCkgewogICAgICAgIHNldFN0
eWxlKGVmZmVjdC5lZmZlY3RzWzBdLmVsZW1lbnQsIHtwb3NpdGlvbjogJ2Fic29s
dXRlJ30pOyB9fSwKICAgICAgYWZ0ZXJGaW5pc2hJbnRlcm5hbDogZnVuY3Rpb24o
ZWZmZWN0KSB7IHdpdGgoRWxlbWVudCkgewogICAgICAgICBoaWRlKGVmZmVjdC5l
ZmZlY3RzWzBdLmVsZW1lbnQpOwogICAgICAgICBzZXRTdHlsZShlZmZlY3QuZWZm
ZWN0c1swXS5lbGVtZW50LCBvbGRTdHlsZSk7IH19CiAgICAgfSwgYXJndW1lbnRz
WzFdIHx8IHt9KQogICApOwp9CgpFZmZlY3QuQmxpbmRVcCA9IGZ1bmN0aW9uKGVs
ZW1lbnQpIHsKICBlbGVtZW50ID0gJChlbGVtZW50KTsKICBFbGVtZW50Lm1ha2VD
bGlwcGluZyhlbGVtZW50KTsKICByZXR1cm4gbmV3IEVmZmVjdC5TY2FsZShlbGVt
ZW50LCAwLCAKICAgIE9iamVjdC5leHRlbmQoeyBzY2FsZUNvbnRlbnQ6IGZhbHNl
LCAKICAgICAgc2NhbGVYOiBmYWxzZSwgCiAgICAgIHJlc3RvcmVBZnRlckZpbmlz
aDogdHJ1ZSwKICAgICAgYWZ0ZXJGaW5pc2hJbnRlcm5hbDogZnVuY3Rpb24oZWZm
ZWN0KSB7IHdpdGgoRWxlbWVudCkgewogICAgICAgIFtoaWRlLCB1bmRvQ2xpcHBp
bmddLmNhbGwoZWZmZWN0LmVsZW1lbnQpOyB9fSAKICAgIH0sIGFyZ3VtZW50c1sx
XSB8fCB7fSkKICApOwp9CgpFZmZlY3QuQmxpbmREb3duID0gZnVuY3Rpb24oZWxl
bWVudCkgewogIGVsZW1lbnQgPSAkKGVsZW1lbnQpOwogIHZhciBvbGRIZWlnaHQg
PSBFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQsICdoZWlnaHQnKTsKICB2YXIgZWxl
bWVudERpbWVuc2lvbnMgPSBFbGVtZW50LmdldERpbWVuc2lvbnMoZWxlbWVudCk7
CiAgcmV0dXJuIG5ldyBFZmZlY3QuU2NhbGUoZWxlbWVudCwgMTAwLCAKICAgIE9i
amVjdC5leHRlbmQoeyBzY2FsZUNvbnRlbnQ6IGZhbHNlLCAKICAgICAgc2NhbGVY
OiBmYWxzZSwKICAgICAgc2NhbGVGcm9tOiAwLAogICAgICBzY2FsZU1vZGU6IHtv
cmlnaW5hbEhlaWdodDogZWxlbWVudERpbWVuc2lvbnMuaGVpZ2h0LCBvcmlnaW5h
bFdpZHRoOiBlbGVtZW50RGltZW5zaW9ucy53aWR0aH0sCiAgICAgIHJlc3RvcmVB
ZnRlckZpbmlzaDogdHJ1ZSwKICAgICAgYWZ0ZXJTZXR1cDogZnVuY3Rpb24oZWZm
ZWN0KSB7IHdpdGgoRWxlbWVudCkgewogICAgICAgIG1ha2VDbGlwcGluZyhlZmZl
Y3QuZWxlbWVudCk7CiAgICAgICAgc2V0U3R5bGUoZWZmZWN0LmVsZW1lbnQsIHto
ZWlnaHQ6ICcwcHgnfSk7CiAgICAgICAgc2hvdyhlZmZlY3QuZWxlbWVudCk7IAog
ICAgICB9fSwgIAogICAgICBhZnRlckZpbmlzaEludGVybmFsOiBmdW5jdGlvbihl
ZmZlY3QpIHsgd2l0aChFbGVtZW50KSB7CiAgICAgICAgdW5kb0NsaXBwaW5nKGVm
ZmVjdC5lbGVtZW50KTsKICAgICAgICBzZXRTdHlsZShlZmZlY3QuZWxlbWVudCwg
e2hlaWdodDogb2xkSGVpZ2h0fSk7CiAgICAgIH19CiAgICB9LCBhcmd1bWVudHNb
MV0gfHwge30pCiAgKTsKfQoKRWZmZWN0LlN3aXRjaE9mZiA9IGZ1bmN0aW9uKGVs
ZW1lbnQpIHsKICBlbGVtZW50ID0gJChlbGVtZW50KTsKICB2YXIgb2xkT3BhY2l0
eSA9IEVsZW1lbnQuZ2V0SW5saW5lT3BhY2l0eShlbGVtZW50KTsKICByZXR1cm4g
bmV3IEVmZmVjdC5BcHBlYXIoZWxlbWVudCwgeyAKICAgIGR1cmF0aW9uOiAwLjQs
CiAgICBmcm9tOiAwLAogICAgdHJhbnNpdGlvbjogRWZmZWN0LlRyYW5zaXRpb25z
LmZsaWNrZXIsCiAgICBhZnRlckZpbmlzaEludGVybmFsOiBmdW5jdGlvbihlZmZl
Y3QpIHsKICAgICAgbmV3IEVmZmVjdC5TY2FsZShlZmZlY3QuZWxlbWVudCwgMSwg
eyAKICAgICAgICBkdXJhdGlvbjogMC4zLCBzY2FsZUZyb21DZW50ZXI6IHRydWUs
CiAgICAgICAgc2NhbGVYOiBmYWxzZSwgc2NhbGVDb250ZW50OiBmYWxzZSwgcmVz
dG9yZUFmdGVyRmluaXNoOiB0cnVlLAogICAgICAgIGJlZm9yZVNldHVwOiBmdW5j
dGlvbihlZmZlY3QpIHsgd2l0aChFbGVtZW50KSB7CiAgICAgICAgICBbbWFrZVBv
c2l0aW9uZWQsbWFrZUNsaXBwaW5nXS5jYWxsKGVmZmVjdC5lbGVtZW50KTsKICAg
ICAgICB9fSwKICAgICAgICBhZnRlckZpbmlzaEludGVybmFsOiBmdW5jdGlvbihl
ZmZlY3QpIHsgd2l0aChFbGVtZW50KSB7CiAgICAgICAgICBbaGlkZSx1bmRvQ2xp
cHBpbmcsdW5kb1Bvc2l0aW9uZWRdLmNhbGwoZWZmZWN0LmVsZW1lbnQpOwogICAg
ICAgICAgc2V0U3R5bGUoZWZmZWN0LmVsZW1lbnQsIHtvcGFjaXR5OiBvbGRPcGFj
aXR5fSk7CiAgICAgICAgfX0KICAgICAgfSkKICAgIH0KICB9KTsKfQoKRWZmZWN0
LkRyb3BPdXQgPSBmdW5jdGlvbihlbGVtZW50KSB7CiAgZWxlbWVudCA9ICQoZWxl
bWVudCk7CiAgdmFyIG9sZFN0eWxlID0gewogICAgdG9wOiBFbGVtZW50LmdldFN0
eWxlKGVsZW1lbnQsICd0b3AnKSwKICAgIGxlZnQ6IEVsZW1lbnQuZ2V0U3R5bGUo
ZWxlbWVudCwgJ2xlZnQnKSwKICAgIG9wYWNpdHk6IEVsZW1lbnQuZ2V0SW5saW5l
T3BhY2l0eShlbGVtZW50KSB9OwogIHJldHVybiBuZXcgRWZmZWN0LlBhcmFsbGVs
KAogICAgWyBuZXcgRWZmZWN0Lk1vdmUoZWxlbWVudCwge3g6IDAsIHk6IDEwMCwg
c3luYzogdHJ1ZSB9KSwgCiAgICAgIG5ldyBFZmZlY3QuT3BhY2l0eShlbGVtZW50
LCB7IHN5bmM6IHRydWUsIHRvOiAwLjAgfSkgXSwKICAgIE9iamVjdC5leHRlbmQo
CiAgICAgIHsgZHVyYXRpb246IDAuNSwKICAgICAgICBiZWZvcmVTZXR1cDogZnVu
Y3Rpb24oZWZmZWN0KSB7IHdpdGgoRWxlbWVudCkgewogICAgICAgICAgbWFrZVBv
c2l0aW9uZWQoZWZmZWN0LmVmZmVjdHNbMF0uZWxlbWVudCk7IH19LAogICAgICAg
IGFmdGVyRmluaXNoSW50ZXJuYWw6IGZ1bmN0aW9uKGVmZmVjdCkgeyB3aXRoKEVs
ZW1lbnQpIHsKICAgICAgICAgIFtoaWRlLCB1bmRvUG9zaXRpb25lZF0uY2FsbChl
ZmZlY3QuZWZmZWN0c1swXS5lbGVtZW50KTsKICAgICAgICAgIHNldFN0eWxlKGVm
ZmVjdC5lZmZlY3RzWzBdLmVsZW1lbnQsIG9sZFN0eWxlKTsgfX0gCiAgICAgIH0s
IGFyZ3VtZW50c1sxXSB8fCB7fSkpOwp9CgpFZmZlY3QuU2hha2UgPSBmdW5jdGlv
bihlbGVtZW50KSB7CiAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgdmFyIG9sZFN0
eWxlID0gewogICAgdG9wOiBFbGVtZW50LmdldFN0eWxlKGVsZW1lbnQsICd0b3An
KSwKICAgIGxlZnQ6IEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVudCwgJ2xlZnQnKSB9
OwoJICByZXR1cm4gbmV3IEVmZmVjdC5Nb3ZlKGVsZW1lbnQsIAoJICAgIHsgeDog
IDIwLCB5OiAwLCBkdXJhdGlvbjogMC4wNSwgYWZ0ZXJGaW5pc2hJbnRlcm5hbDog
ZnVuY3Rpb24oZWZmZWN0KSB7CgkgIG5ldyBFZmZlY3QuTW92ZShlZmZlY3QuZWxl
bWVudCwKCSAgICB7IHg6IC00MCwgeTogMCwgZHVyYXRpb246IDAuMSwgIGFmdGVy
RmluaXNoSW50ZXJuYWw6IGZ1bmN0aW9uKGVmZmVjdCkgewoJICBuZXcgRWZmZWN0
Lk1vdmUoZWZmZWN0LmVsZW1lbnQsCgkgICAgeyB4OiAgNDAsIHk6IDAsIGR1cmF0
aW9uOiAwLjEsICBhZnRlckZpbmlzaEludGVybmFsOiBmdW5jdGlvbihlZmZlY3Qp
IHsKCSAgbmV3IEVmZmVjdC5Nb3ZlKGVmZmVjdC5lbGVtZW50LAoJICAgIHsgeDog
LTQwLCB5OiAwLCBkdXJhdGlvbjogMC4xLCAgYWZ0ZXJGaW5pc2hJbnRlcm5hbDog
ZnVuY3Rpb24oZWZmZWN0KSB7CgkgIG5ldyBFZmZlY3QuTW92ZShlZmZlY3QuZWxl
bWVudCwKCSAgICB7IHg6ICA0MCwgeTogMCwgZHVyYXRpb246IDAuMSwgIGFmdGVy
RmluaXNoSW50ZXJuYWw6IGZ1bmN0aW9uKGVmZmVjdCkgewoJICBuZXcgRWZmZWN0
Lk1vdmUoZWZmZWN0LmVsZW1lbnQsCgkgICAgeyB4OiAtMjAsIHk6IDAsIGR1cmF0
aW9uOiAwLjA1LCBhZnRlckZpbmlzaEludGVybmFsOiBmdW5jdGlvbihlZmZlY3Qp
IHsgd2l0aChFbGVtZW50KSB7CiAgICAgICAgdW5kb1Bvc2l0aW9uZWQoZWZmZWN0
LmVsZW1lbnQpOwogICAgICAgIHNldFN0eWxlKGVmZmVjdC5lbGVtZW50LCBvbGRT
dHlsZSk7CiAgfX19KSB9fSkgfX0pIH19KSB9fSkgfX0pOwp9CgpFZmZlY3QuU2xp
ZGVEb3duID0gZnVuY3Rpb24oZWxlbWVudCkgewogIGVsZW1lbnQgPSAkKGVsZW1l
bnQpOwogIEVsZW1lbnQuY2xlYW5XaGl0ZXNwYWNlKGVsZW1lbnQpOwogIC8vIFNs
aWRlRG93biBuZWVkIHRvIGhhdmUgdGhlIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnQg
d3JhcHBlZCBpbiBhIGNvbnRhaW5lciBlbGVtZW50IHdpdGggZml4ZWQgaGVpZ2h0
IQogIHZhciBvbGRJbm5lckJvdHRvbSA9IEVsZW1lbnQuZ2V0U3R5bGUoZWxlbWVu
dC5maXJzdENoaWxkLCAnYm90dG9tJyk7CiAgdmFyIGVsZW1lbnREaW1lbnNpb25z
ID0gRWxlbWVudC5nZXREaW1lbnNpb25zKGVsZW1lbnQpOwogIHJldHVybiBuZXcg
RWZmZWN0LlNjYWxlKGVsZW1lbnQsIDEwMCwgT2JqZWN0LmV4dGVuZCh7IAogICAg
c2NhbGVDb250ZW50OiBmYWxzZSwgCiAgICBzY2FsZVg6IGZhbHNlLCAKICAgIHNj
YWxlRnJvbTogMCwKICAgIHNjYWxlTW9kZToge29yaWdpbmFsSGVpZ2h0OiBlbGVt
ZW50RGltZW5zaW9ucy5oZWlnaHQsIG9yaWdpbmFsV2lkdGg6IGVsZW1lbnREaW1l
bnNpb25zLndpZHRofSwKICAgIHJlc3RvcmVBZnRlckZpbmlzaDogdHJ1ZSwKICAg
IGFmdGVyU2V0dXA6IGZ1bmN0aW9uKGVmZmVjdCkgeyB3aXRoKEVsZW1lbnQpIHsK
ICAgICAgbWFrZVBvc2l0aW9uZWQoZWZmZWN0LmVsZW1lbnQpOwogICAgICBtYWtl
UG9zaXRpb25lZChlZmZlY3QuZWxlbWVudC5maXJzdENoaWxkKTsKICAgICAgaWYo
d2luZG93Lm9wZXJhKSBzZXRTdHlsZShlZmZlY3QuZWxlbWVudCwge3RvcDogJyd9
KTsKICAgICAgbWFrZUNsaXBwaW5nKGVmZmVjdC5lbGVtZW50KTsKICAgICAgc2V0
U3R5bGUoZWZmZWN0LmVsZW1lbnQsIHtoZWlnaHQ6ICcwcHgnfSk7CiAgICAgIHNo
b3coZWxlbWVudCk7IH19LAogICAgYWZ0ZXJVcGRhdGVJbnRlcm5hbDogZnVuY3Rp
b24oZWZmZWN0KSB7IHdpdGgoRWxlbWVudCkgewogICAgICBzZXRTdHlsZShlZmZl
Y3QuZWxlbWVudC5maXJzdENoaWxkLCB7Ym90dG9tOgogICAgICAgIChlZmZlY3Qu
ZGltc1swXSAtIGVmZmVjdC5lbGVtZW50LmNsaWVudEhlaWdodCkgKyAncHgnIH0p
OyB9fSwKICAgIGFmdGVyRmluaXNoSW50ZXJuYWw6IGZ1bmN0aW9uKGVmZmVjdCkg
eyB3aXRoKEVsZW1lbnQpIHsKICAgICAgdW5kb0NsaXBwaW5nKGVmZmVjdC5lbGVt
ZW50KTsgCiAgICAgIHVuZG9Qb3NpdGlvbmVkKGVmZmVjdC5lbGVtZW50LmZpcnN0
Q2hpbGQpOwogICAgICB1bmRvUG9zaXRpb25lZChlZmZlY3QuZWxlbWVudCk7CiAg
ICAgIHNldFN0eWxlKGVmZmVjdC5lbGVtZW50LmZpcnN0Q2hpbGQsIHtib3R0b206
IG9sZElubmVyQm90dG9tfSk7IH19CiAgICB9LCBhcmd1bWVudHNbMV0gfHwge30p
CiAgKTsKfQogIApFZmZlY3QuU2xpZGVVcCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsK
ICBlbGVtZW50ID0gJChlbGVtZW50KTsKICBFbGVtZW50LmNsZWFuV2hpdGVzcGFj
ZShlbGVtZW50KTsKICB2YXIgb2xkSW5uZXJCb3R0b20gPSBFbGVtZW50LmdldFN0
eWxlKGVsZW1lbnQuZmlyc3RDaGlsZCwgJ2JvdHRvbScpOwogIHJldHVybiBuZXcg
RWZmZWN0LlNjYWxlKGVsZW1lbnQsIDAsIAogICBPYmplY3QuZXh0ZW5kKHsgc2Nh
bGVDb250ZW50OiBmYWxzZSwgCiAgICBzY2FsZVg6IGZhbHNlLCAKICAgIHNjYWxl
TW9kZTogJ2JveCcsCiAgICBzY2FsZUZyb206IDEwMCwKICAgIHJlc3RvcmVBZnRl
ckZpbmlzaDogdHJ1ZSwKICAgIGJlZm9yZVN0YXJ0SW50ZXJuYWw6IGZ1bmN0aW9u
KGVmZmVjdCkgeyB3aXRoKEVsZW1lbnQpIHsKICAgICAgbWFrZVBvc2l0aW9uZWQo
ZWZmZWN0LmVsZW1lbnQpOwogICAgICBtYWtlUG9zaXRpb25lZChlZmZlY3QuZWxl
bWVudC5maXJzdENoaWxkKTsKICAgICAgaWYod2luZG93Lm9wZXJhKSBzZXRTdHls
ZShlZmZlY3QuZWxlbWVudCwge3RvcDogJyd9KTsKICAgICAgbWFrZUNsaXBwaW5n
KGVmZmVjdC5lbGVtZW50KTsKICAgICAgc2hvdyhlbGVtZW50KTsgfX0sICAKICAg
IGFmdGVyVXBkYXRlSW50ZXJuYWw6IGZ1bmN0aW9uKGVmZmVjdCkgeyB3aXRoKEVs
ZW1lbnQpIHsKICAgICAgc2V0U3R5bGUoZWZmZWN0LmVsZW1lbnQuZmlyc3RDaGls
ZCwge2JvdHRvbToKICAgICAgICAoZWZmZWN0LmRpbXNbMF0gLSBlZmZlY3QuZWxl
bWVudC5jbGllbnRIZWlnaHQpICsgJ3B4JyB9KTsgfX0sCiAgICBhZnRlckZpbmlz
aEludGVybmFsOiBmdW5jdGlvbihlZmZlY3QpIHsgd2l0aChFbGVtZW50KSB7CiAg
ICAgICAgW2hpZGUsIHVuZG9DbGlwcGluZ10uY2FsbChlZmZlY3QuZWxlbWVudCk7
IAogICAgICAgIHVuZG9Qb3NpdGlvbmVkKGVmZmVjdC5lbGVtZW50LmZpcnN0Q2hp
bGQpOwogICAgICAgIHVuZG9Qb3NpdGlvbmVkKGVmZmVjdC5lbGVtZW50KTsKICAg
ICAgICBzZXRTdHlsZShlZmZlY3QuZWxlbWVudC5maXJzdENoaWxkLCB7Ym90dG9t
OiBvbGRJbm5lckJvdHRvbX0pOyB9fQogICB9LCBhcmd1bWVudHNbMV0gfHwge30p
CiAgKTsKfQoKLy8gQnVnIGluIG9wZXJhIG1ha2VzIHRoZSBURCBjb250YWluaW5n
IHRoaXMgZWxlbWVudCBleHBhbmQgZm9yIGEgaW5zdGFuY2UgYWZ0ZXIgZmluaXNo
IApFZmZlY3QuU3F1aXNoID0gZnVuY3Rpb24oZWxlbWVudCkgewogIHJldHVybiBu
ZXcgRWZmZWN0LlNjYWxlKGVsZW1lbnQsIHdpbmRvdy5vcGVyYSA/IDEgOiAwLCAK
ICAgIHsgcmVzdG9yZUFmdGVyRmluaXNoOiB0cnVlLAogICAgICBiZWZvcmVTZXR1
cDogZnVuY3Rpb24oZWZmZWN0KSB7IHdpdGgoRWxlbWVudCkgewogICAgICAgIG1h
a2VDbGlwcGluZyhlZmZlY3QuZWxlbWVudCk7IH19LCAgCiAgICAgIGFmdGVyRmlu
aXNoSW50ZXJuYWw6IGZ1bmN0aW9uKGVmZmVjdCkgeyB3aXRoKEVsZW1lbnQpIHsK
ICAgICAgICBoaWRlKGVmZmVjdC5lbGVtZW50KTsgCiAgICAgICAgdW5kb0NsaXBw
aW5nKGVmZmVjdC5lbGVtZW50KTsgfX0KICB9KTsKfQoKRWZmZWN0Lkdyb3cgPSBm
dW5jdGlvbihlbGVtZW50KSB7CiAgZWxlbWVudCA9ICQoZWxlbWVudCk7CiAgdmFy
IG9wdGlvbnMgPSBPYmplY3QuZXh0ZW5kKHsKICAgIGRpcmVjdGlvbjogJ2NlbnRl
cicsCiAgICBtb3ZlVHJhbnNpc3Rpb246IEVmZmVjdC5UcmFuc2l0aW9ucy5zaW5v
aWRhbCwKICAgIHNjYWxlVHJhbnNpdGlvbjogRWZmZWN0LlRyYW5zaXRpb25zLnNp
bm9pZGFsLAogICAgb3BhY2l0eVRyYW5zaXRpb246IEVmZmVjdC5UcmFuc2l0aW9u
cy5mdWxsCiAgfSwgYXJndW1lbnRzWzFdIHx8IHt9KTsKICB2YXIgb2xkU3R5bGUg
PSB7CiAgICB0b3A6IGVsZW1lbnQuc3R5bGUudG9wLAogICAgbGVmdDogZWxlbWVu
dC5zdHlsZS5sZWZ0LAogICAgaGVpZ2h0OiBlbGVtZW50LnN0eWxlLmhlaWdodCwK
ICAgIHdpZHRoOiBlbGVtZW50LnN0eWxlLndpZHRoLAogICAgb3BhY2l0eTogRWxl
bWVudC5nZXRJbmxpbmVPcGFjaXR5KGVsZW1lbnQpIH07CgogIHZhciBkaW1zID0g
RWxlbWVudC5nZXREaW1lbnNpb25zKGVsZW1lbnQpOyAgICAKICB2YXIgaW5pdGlh
bE1vdmVYLCBpbml0aWFsTW92ZVk7CiAgdmFyIG1vdmVYLCBtb3ZlWTsKICAKICBz
d2l0Y2ggKG9wdGlvbnMuZGlyZWN0aW9uKSB7CiAgICBjYXNlICd0b3AtbGVmdCc6
CiAgICAgIGluaXRpYWxNb3ZlWCA9IGluaXRpYWxNb3ZlWSA9IG1vdmVYID0gbW92
ZVkgPSAwOyAKICAgICAgYnJlYWs7CiAgICBjYXNlICd0b3AtcmlnaHQnOgogICAg
ICBpbml0aWFsTW92ZVggPSBkaW1zLndpZHRoOwogICAgICBpbml0aWFsTW92ZVkg
PSBtb3ZlWSA9IDA7CiAgICAgIG1vdmVYID0gLWRpbXMud2lkdGg7CiAgICAgIGJy
ZWFrOwogICAgY2FzZSAnYm90dG9tLWxlZnQnOgogICAgICBpbml0aWFsTW92ZVgg
PSBtb3ZlWCA9IDA7CiAgICAgIGluaXRpYWxNb3ZlWSA9IGRpbXMuaGVpZ2h0Owog
ICAgICBtb3ZlWSA9IC1kaW1zLmhlaWdodDsKICAgICAgYnJlYWs7CiAgICBjYXNl
ICdib3R0b20tcmlnaHQnOgogICAgICBpbml0aWFsTW92ZVggPSBkaW1zLndpZHRo
OwogICAgICBpbml0aWFsTW92ZVkgPSBkaW1zLmhlaWdodDsKICAgICAgbW92ZVgg
PSAtZGltcy53aWR0aDsKICAgICAgbW92ZVkgPSAtZGltcy5oZWlnaHQ7CiAgICAg
IGJyZWFrOwogICAgY2FzZSAnY2VudGVyJzoKICAgICAgaW5pdGlhbE1vdmVYID0g
ZGltcy53aWR0aCAvIDI7CiAgICAgIGluaXRpYWxNb3ZlWSA9IGRpbXMuaGVpZ2h0
IC8gMjsKICAgICAgbW92ZVggPSAtZGltcy53aWR0aCAvIDI7CiAgICAgIG1vdmVZ
ID0gLWRpbXMuaGVpZ2h0IC8gMjsKICAgICAgYnJlYWs7CiAgfQogIAogIHJldHVy
biBuZXcgRWZmZWN0Lk1vdmUoZWxlbWVudCwgewogICAgeDogaW5pdGlhbE1vdmVY
LAogICAgeTogaW5pdGlhbE1vdmVZLAogICAgZHVyYXRpb246IDAuMDEsIAogICAg
YmVmb3JlU2V0dXA6IGZ1bmN0aW9uKGVmZmVjdCkgeyB3aXRoKEVsZW1lbnQpIHsK
ICAgICAgaGlkZShlZmZlY3QuZWxlbWVudCk7CiAgICAgIG1ha2VDbGlwcGluZyhl
ZmZlY3QuZWxlbWVudCk7CiAgICAgIG1ha2VQb3NpdGlvbmVkKGVmZmVjdC5lbGVt
ZW50KTsKICAgIH19LAogICAgYWZ0ZXJGaW5pc2hJbnRlcm5hbDogZnVuY3Rpb24o
ZWZmZWN0KSB7CiAgICAgIG5ldyBFZmZlY3QuUGFyYWxsZWwoCiAgICAgICAgWyBu
ZXcgRWZmZWN0Lk9wYWNpdHkoZWZmZWN0LmVsZW1lbnQsIHsgc3luYzogdHJ1ZSwg
dG86IDEuMCwgZnJvbTogMC4wLCB0cmFuc2l0aW9uOiBvcHRpb25zLm9wYWNpdHlU
cmFuc2l0aW9uIH0pLAogICAgICAgICAgbmV3IEVmZmVjdC5Nb3ZlKGVmZmVjdC5l
bGVtZW50LCB7IHg6IG1vdmVYLCB5OiBtb3ZlWSwgc3luYzogdHJ1ZSwgdHJhbnNp
dGlvbjogb3B0aW9ucy5tb3ZlVHJhbnNpdGlvbiB9KSwKICAgICAgICAgIG5ldyBF
ZmZlY3QuU2NhbGUoZWZmZWN0LmVsZW1lbnQsIDEwMCwgewogICAgICAgICAgICBz
Y2FsZU1vZGU6IHsgb3JpZ2luYWxIZWlnaHQ6IGRpbXMuaGVpZ2h0LCBvcmlnaW5h
bFdpZHRoOiBkaW1zLndpZHRoIH0sIAogICAgICAgICAgICBzeW5jOiB0cnVlLCBz
Y2FsZUZyb206IHdpbmRvdy5vcGVyYSA/IDEgOiAwLCB0cmFuc2l0aW9uOiBvcHRp
b25zLnNjYWxlVHJhbnNpdGlvbiwgcmVzdG9yZUFmdGVyRmluaXNoOiB0cnVlfSkK
ICAgICAgICBdLCBPYmplY3QuZXh0ZW5kKHsKICAgICAgICAgICAgIGJlZm9yZVNl
dHVwOiBmdW5jdGlvbihlZmZlY3QpIHsgd2l0aChFbGVtZW50KSB7CiAgICAgICAg
ICAgICAgIHNldFN0eWxlKGVmZmVjdC5lZmZlY3RzWzBdLmVsZW1lbnQsIHtoZWln
aHQ6ICcwcHgnfSk7CiAgICAgICAgICAgICAgIHNob3coZWZmZWN0LmVmZmVjdHNb
MF0uZWxlbWVudCk7IH19LAogICAgICAgICAgICAgYWZ0ZXJGaW5pc2hJbnRlcm5h
bDogZnVuY3Rpb24oZWZmZWN0KSB7IHdpdGgoRWxlbWVudCkgewogICAgICAgICAg
ICAgICBbdW5kb0NsaXBwaW5nLCB1bmRvUG9zaXRpb25lZF0uY2FsbChlZmZlY3Qu
ZWZmZWN0c1swXS5lbGVtZW50KTsgCiAgICAgICAgICAgICAgIHNldFN0eWxlKGVm
ZmVjdC5lZmZlY3RzWzBdLmVsZW1lbnQsIG9sZFN0eWxlKTsgfX0KICAgICAgICAg
ICB9LCBvcHRpb25zKQogICAgICApCiAgICB9CiAgfSk7Cn0KCkVmZmVjdC5TaHJp
bmsgPSBmdW5jdGlvbihlbGVtZW50KSB7CiAgZWxlbWVudCA9ICQoZWxlbWVudCk7
CiAgdmFyIG9wdGlvbnMgPSBPYmplY3QuZXh0ZW5kKHsKICAgIGRpcmVjdGlvbjog
J2NlbnRlcicsCiAgICBtb3ZlVHJhbnNpc3Rpb246IEVmZmVjdC5UcmFuc2l0aW9u
cy5zaW5vaWRhbCwKICAgIHNjYWxlVHJhbnNpdGlvbjogRWZmZWN0LlRyYW5zaXRp
b25zLnNpbm9pZGFsLAogICAgb3BhY2l0eVRyYW5zaXRpb246IEVmZmVjdC5UcmFu
c2l0aW9ucy5ub25lCiAgfSwgYXJndW1lbnRzWzFdIHx8IHt9KTsKICB2YXIgb2xk
U3R5bGUgPSB7CiAgICB0b3A6IGVsZW1lbnQuc3R5bGUudG9wLAogICAgbGVmdDog
ZWxlbWVudC5zdHlsZS5sZWZ0LAogICAgaGVpZ2h0OiBlbGVtZW50LnN0eWxlLmhl
aWdodCwKICAgIHdpZHRoOiBlbGVtZW50LnN0eWxlLndpZHRoLAogICAgb3BhY2l0
eTogRWxlbWVudC5nZXRJbmxpbmVPcGFjaXR5KGVsZW1lbnQpIH07CgogIHZhciBk
aW1zID0gRWxlbWVudC5nZXREaW1lbnNpb25zKGVsZW1lbnQpOwogIHZhciBtb3Zl
WCwgbW92ZVk7CiAgCiAgc3dpdGNoIChvcHRpb25zLmRpcmVjdGlvbikgewogICAg
Y2FzZSAndG9wLWxlZnQnOgogICAgICBtb3ZlWCA9IG1vdmVZID0gMDsKICAgICAg
YnJlYWs7CiAgICBjYXNlICd0b3AtcmlnaHQnOgogICAgICBtb3ZlWCA9IGRpbXMu
d2lkdGg7CiAgICAgIG1vdmVZID0gMDsKICAgICAgYnJlYWs7CiAgICBjYXNlICdi
b3R0b20tbGVmdCc6CiAgICAgIG1vdmVYID0gMDsKICAgICAgbW92ZVkgPSBkaW1z
LmhlaWdodDsKICAgICAgYnJlYWs7CiAgICBjYXNlICdib3R0b20tcmlnaHQnOgog
ICAgICBtb3ZlWCA9IGRpbXMud2lkdGg7CiAgICAgIG1vdmVZID0gZGltcy5oZWln
aHQ7CiAgICAgIGJyZWFrOwogICAgY2FzZSAnY2VudGVyJzogIAogICAgICBtb3Zl
WCA9IGRpbXMud2lkdGggLyAyOwogICAgICBtb3ZlWSA9IGRpbXMuaGVpZ2h0IC8g
MjsKICAgICAgYnJlYWs7CiAgfQogIAogIHJldHVybiBuZXcgRWZmZWN0LlBhcmFs
bGVsKAogICAgWyBuZXcgRWZmZWN0Lk9wYWNpdHkoZWxlbWVudCwgeyBzeW5jOiB0
cnVlLCB0bzogMC4wLCBmcm9tOiAxLjAsIHRyYW5zaXRpb246IG9wdGlvbnMub3Bh
Y2l0eVRyYW5zaXRpb24gfSksCiAgICAgIG5ldyBFZmZlY3QuU2NhbGUoZWxlbWVu
dCwgd2luZG93Lm9wZXJhID8gMSA6IDAsIHsgc3luYzogdHJ1ZSwgdHJhbnNpdGlv
bjogb3B0aW9ucy5zY2FsZVRyYW5zaXRpb24sIHJlc3RvcmVBZnRlckZpbmlzaDog
dHJ1ZX0pLAogICAgICBuZXcgRWZmZWN0Lk1vdmUoZWxlbWVudCwgeyB4OiBtb3Zl
WCwgeTogbW92ZVksIHN5bmM6IHRydWUsIHRyYW5zaXRpb246IG9wdGlvbnMubW92
ZVRyYW5zaXRpb24gfSkKICAgIF0sIE9iamVjdC5leHRlbmQoeyAgICAgICAgICAg
IAogICAgICAgICBiZWZvcmVTdGFydEludGVybmFsOiBmdW5jdGlvbihlZmZlY3Qp
IHsgd2l0aChFbGVtZW50KSB7CiAgICAgICAgICAgW21ha2VQb3NpdGlvbmVkLCBt
YWtlQ2xpcHBpbmddLmNhbGwoZWZmZWN0LmVmZmVjdHNbMF0uZWxlbWVudCkgfX0s
CiAgICAgICAgIGFmdGVyRmluaXNoSW50ZXJuYWw6IGZ1bmN0aW9uKGVmZmVjdCkg
eyB3aXRoKEVsZW1lbnQpIHsKICAgICAgICAgICBbaGlkZSwgdW5kb0NsaXBwaW5n
LCB1bmRvUG9zaXRpb25lZF0uY2FsbChlZmZlY3QuZWZmZWN0c1swXS5lbGVtZW50
KTsKICAgICAgICAgICBzZXRTdHlsZShlZmZlY3QuZWZmZWN0c1swXS5lbGVtZW50
LCBvbGRTdHlsZSk7IH19CiAgICAgICB9LCBvcHRpb25zKQogICk7Cn0KCkVmZmVj
dC5QdWxzYXRlID0gZnVuY3Rpb24oZWxlbWVudCkgewogIGVsZW1lbnQgPSAkKGVs
ZW1lbnQpOwogIHZhciBvcHRpb25zICAgID0gYXJndW1lbnRzWzFdIHx8IHt9Owog
IHZhciBvbGRPcGFjaXR5ID0gRWxlbWVudC5nZXRJbmxpbmVPcGFjaXR5KGVsZW1l
bnQpOwogIHZhciB0cmFuc2l0aW9uID0gb3B0aW9ucy50cmFuc2l0aW9uIHx8IEVm
ZmVjdC5UcmFuc2l0aW9ucy5zaW5vaWRhbDsKICB2YXIgcmV2ZXJzZXIgICA9IGZ1
bmN0aW9uKHBvcyl7IHJldHVybiB0cmFuc2l0aW9uKDEtRWZmZWN0LlRyYW5zaXRp
b25zLnB1bHNlKHBvcykpIH07CiAgcmV2ZXJzZXIuYmluZCh0cmFuc2l0aW9uKTsK
ICByZXR1cm4gbmV3IEVmZmVjdC5PcGFjaXR5KGVsZW1lbnQsIAogICAgT2JqZWN0
LmV4dGVuZChPYmplY3QuZXh0ZW5kKHsgIGR1cmF0aW9uOiAzLjAsIGZyb206IDAs
CiAgICAgIGFmdGVyRmluaXNoSW50ZXJuYWw6IGZ1bmN0aW9uKGVmZmVjdCkgeyBF
bGVtZW50LnNldFN0eWxlKGVmZmVjdC5lbGVtZW50LCB7b3BhY2l0eTogb2xkT3Bh
Y2l0eX0pOyB9CiAgICB9LCBvcHRpb25zKSwge3RyYW5zaXRpb246IHJldmVyc2Vy
fSkpOwp9CgpFZmZlY3QuRm9sZCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICBlbGVt
ZW50ID0gJChlbGVtZW50KTsKICB2YXIgb2xkU3R5bGUgPSB7CiAgICB0b3A6IGVs
ZW1lbnQuc3R5bGUudG9wLAogICAgbGVmdDogZWxlbWVudC5zdHlsZS5sZWZ0LAog
ICAgd2lkdGg6IGVsZW1lbnQuc3R5bGUud2lkdGgsCiAgICBoZWlnaHQ6IGVsZW1l
bnQuc3R5bGUuaGVpZ2h0IH07CiAgRWxlbWVudC5tYWtlQ2xpcHBpbmcoZWxlbWVu
dCk7CiAgcmV0dXJuIG5ldyBFZmZlY3QuU2NhbGUoZWxlbWVudCwgNSwgT2JqZWN0
LmV4dGVuZCh7ICAgCiAgICBzY2FsZUNvbnRlbnQ6IGZhbHNlLAogICAgc2NhbGVY
OiBmYWxzZSwKICAgIGFmdGVyRmluaXNoSW50ZXJuYWw6IGZ1bmN0aW9uKGVmZmVj
dCkgewogICAgbmV3IEVmZmVjdC5TY2FsZShlbGVtZW50LCAxLCB7IAogICAgICBz
Y2FsZUNvbnRlbnQ6IGZhbHNlLCAKICAgICAgc2NhbGVZOiBmYWxzZSwKICAgICAg
YWZ0ZXJGaW5pc2hJbnRlcm5hbDogZnVuY3Rpb24oZWZmZWN0KSB7IHdpdGgoRWxl
bWVudCkgewogICAgICAgIFtoaWRlLCB1bmRvQ2xpcHBpbmddLmNhbGwoZWZmZWN0
LmVsZW1lbnQpOyAKICAgICAgICBzZXRTdHlsZShlZmZlY3QuZWxlbWVudCwgb2xk
U3R5bGUpOwogICAgICB9fSB9KTsKICB9fSwgYXJndW1lbnRzWzFdIHx8IHt9KSk7
Cn0KCnZhciBldmVudHMgPSBbIF07CgppZihzaG93aW5nX21pbmlfY2FsZW5kYXIp
CnsKCWV2ZW50cy5wdXNoKAoJCQltaW5pY2FsZW5kYXJTZXR1cAoJCSk7Cn0KZWxz
ZQp7CglldmVudHMucHVzaCgKCS8qCgkJdG9waWNOYXZpZ2F0aW9uUHVsbGRvd24s
CgkJZWFzeVRpbWVJbnB1dENvbnZlcnRlcgoJCWFkZFNoYWRvd3MsCgkJbWluaWNh
bGVuZGFyQ3JlYXRlLAoJCXB1bGxkb3duQXV0b1N1Ym1pdHMsCgkJbWVzc2FnZWxp
c3RBdXRob3JMaW5rc0NyZWF0ZVRvZ2dsZSwKCQltZXNzYWdlbGlzdFRvcGljTGlu
a3NDcmVhdGVUb2dnbGUsKi8KCQlmb2N1c0ZpcnN0Rm9ybUZpZWxkLAoJCXZhbGlk
YXRlRm9ybXMsCgkJcmVsb2NhdGVCbG9ja3MsLyoKCQl0b3BpY05hdmlnYXRpb25Q
dWxsZG93biwKCQlhdHRhY2hDYWxlbmRhclNlbGVjdG9yLAoJCXJld3JpdGVRdW90
ZUxpbmtzLAoJCXByaXZhdGVNZXNzYWdpbmdDb3B5Q29udGFjdCwKCQlkb2N1bWVu
dFB1bGxkb3duLAoJCWxvZ2luRm9ybSwqLwoJCXRvZ2dsZVZpc2liaWxpdHksCgkJ
ZG9jbGliSW50ZXJhY3Rpb24sCgkJZG9jbGliSW50ZXJhY3Rpb25BZnJpY2EsCgkJ
dG9waWNEb2N1bWVudFNlbGVjdG9yLAoJCXRvZ2dsZUNoYW5nZUNoZWNrYm94VG9w
aWNBZG1pbiwKCQlzZWxlY3RTZWxlY3RlZFRvcGljQWRtaW4sLyoKCQllYXN5VGlt
ZUlucHV0Q29udmVydGVyLAoJCXRvZ2dsZVJlcGVhdERldGFpbHMsCgkJc2NhbGVJ
bWFnZXMsCgkJY3JlYXRlRm9vdGVyLCovCgkJYXR0YWNoUk1MVG9vbGJhciwKCQlt
YWtlU21pbGV5c0NsaWNrYWJsZSwvKgoJCWVuYWJsZVByZWZlcmVuY2VDU1MgKi8K
CQl0b2dnbGVHb29nbGVNYXBzLAoJCWxvZ291dFNlc3Npb25zLAoJCWV4dGVybmFs
TGlua3NJblBvcHVwLAoJCWF1dG9jb21wbGV0ZSwKCQlhbHRlcm5hdGVSb3dTdHls
ZSwKCQltYWtlQmxvY2tzRWRpdGFibGUsCgkJcmF0ZUl0ZW0sCgkJZml4QnJvd3Nl
cklzc3VlcywKCQlmaXhCcm93c2VySXNzdWVzQWZyaWNhLAoJCWluaXRMaWdodGJv
eCwKCQlhbGxFeHRlcm5hbExpbmtzSW5Qb3B1cCwKCQlyZXBvcnRlclJlZ2lzdHJh
dGlvbgoJKTsKCgkvKiBleHRyYSBleHRyYS4uLiByZWFkIGFsbCBhYm91dCBpdCAq
LwoKCS8qCgkJdXBkYXRlTWVzc2FnZXNUaHJ1WG1sSHR0cCwKCQlpbmRpY2F0ZUFj
Y2Vzc2tleSwKCQlzZWFyY2hQb3B1cCwKCQlsb2NhbEFuY2hvcnMsCgkJc2xhc2hk
b3RMaW5rcywKCQlzZWxlY3RBbGxSb3dzLAoJCWxvY2FsQW5jaG9ycywKCQljbG9z
ZUFuZFN1Ym1pdCwKCgkJYWxsUGFnZXNOYXZpZ2F0aW9uLAoJCWhpZ2hsaWdodFJl
ZmVycmVyUXVlcnksCgoJCWluZGljYXRlU2VjdXJlTGluaywKCQl3ZWIyMF91c2Vy
aWNvbnMsCgkJcmVzb2x2ZUlQMkhvc3RuYW1lCgkqLwp9Cgo=
------------z0sG6lbwfRAjvoOOPUGyZF
Content-Disposition: inline; filename=print.css
Content-Type: text/css; charset=ISO-8859-15; name=print.css
Content-Location: http://www.africanews.com/templates/africa/css/print.css
Content-Transfer-Encoding: 8bit
#logo,
#navigation,
#welcome-text,
.action-header ul,
ul.message-links,
ul.author-links,
li hr,
#content > hr,
#topic-admin,
#footer,
iframe,
#more-topic,
h3.more-topic,
#action-footer,
div#sidebar,
div#login,
div#quick-search,
div.block-type-topbanner,
ul#menu,
ul#submenu {
display: none;
}
* {
color: black;
}
/*
a:after {
content: " [" attr(href) "]";
color: #aaa;
font-size: 0.7em;
}*/
.action-header ol {
overflow: auto;
}
.action-header ol li {
list-style-type: none;
float: left;
margin-right: 0.1cm;
}
.action-header ol li:after {
content: " >>";
}
.action-header ol li:last-child:after {
content: "";
}
li.message {
list-style-type: none;
border: 1px dotted black;
margin: 1cm 0;
}
div.message-content {
margin-left: 1cm;
min-height: 3cm;
margin-right: 5cm;
}
div.message-data {
margin-bottom: 0.5cm;
}
blockquote {
border-top: 1px solid black;
border-bottom: 1px solid black;
background-color: #eee;
}
div.author-data {
float: right;
}
td, th {
border: 1px dotted black;
}
table {
width: 100%;
border-collapse: collapse;
}
*.topic-status, th.status {
display: none;
}
td.topic-lastmessage br {
display: none;
}
td.topic-lastmessage a:first-child:after {
content: " ";
}
address.updated-by, address.signature {
font-size: 0.7em;
border-top: 1px solid black;
margin-top: 0.4cm;
}
dt, dd {
padding: 0.3em;
border-top: 0.1em solid white;
min-height: 1.8em;
}
dt {
float: left;
clear: left;
display: inline;
width: 13.2em;
border-top: 0.1em solid white;
border-right: 0.4em solid white;
padding-left: 0.5em;
}
dd {
float: left;
clear: right;
border-left: 0.4em solid white;
overflow: hidden;
/* Fixes for clear 'issue' in FF/Opera */
margin-left: -0.4em;
width: 77.5%;
}
dd + dd {
padding-top: 0;
font-style: italic;
border-top: none;
min-height: 0;
clear: both;
margin-left: 14em;
}
h3 {
clear: both;
}
------------z0sG6lbwfRAjvoOOPUGyZF
Content-Disposition: inline; filename=b720194e219c896e05d68ac01e4ef76a.header_image.jpg
Content-Type: image/jpeg; name=b720194e219c896e05d68ac01e4ef76a.header_image.jpg
Content-Location: http://www.africanews.com/documents/b7/20/b720194e219c896e05d68ac01e4ef76a.header_image.jpg
Content-Transfer-Encoding: Base64
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
Fz3/AMcEkT+x/HH5PL4nH//Z
------------z0sG6lbwfRAjvoOOPUGyZF
Content-Disposition: inline; filename=f36f0db2213a32c694b02af2711f6136.header_image.jpg
Content-Type: image/jpeg; name=f36f0db2213a32c694b02af2711f6136.header_image.jpg
Content-Location: http://www.africanews.com/documents/f3/6f/f36f0db2213a32c694b02af2711f6136.header_image.jpg
Content-Transfer-Encoding: Base64
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
3RH+45igac/lFL/9v8JxnLMH57m/tTj/2Q==
------------z0sG6lbwfRAjvoOOPUGyZF
Content-Disposition: inline; filename=bb407e9553a2b13a839dcc4963f78124.page_identifier.jpg
Content-Type: text/html; name=bb407e9553a2b13a839dcc4963f78124.page_identifier.jpg
Content-Location: http://www.africanews.com/download/download_document/8272/bb407e9553a2b13a839dcc4963f78124/page_identifier
Content-Transfer-Encoding: Base64
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
AQBAEAQBAEAQBAEAQBAEAQBAEAQBAf/Z
------------z0sG6lbwfRAjvoOOPUGyZF
Content-Disposition: inline; filename=Walter-Wilson-Nana.jpg
Content-Type: image/jpeg; name=Walter-Wilson-Nana.jpg
Content-Location: http://www.africanews.com/usericons/1895/Walter-Wilson-Nana.jpg
Content-Transfer-Encoding: Base64
/9j/4AAQSkZJRgABAQAAAQABAAD//gA+Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1
c2luZyBJSkcgSlBFRyB2NjIpLCBkZWZhdWx0IHF1YWxpdHkK/9sAQwAIBgYHBgUI
BwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8n
OT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIy
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAfgB+AwEiAAIRAQMR
Af/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF
BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYX
GBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6
g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV
1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAAB
AgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXET
IjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJ
SlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWm
p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5
+v/aAAwDAQACEQMRAD8A96oopKBC0UmaTNAC5oB9+nam5rM1nWotIt97YeZ/9XH6
0AW9Q1O00q3M95MsSAd+pPtXnWufEy4Zmj0qHy06CSQAsffFYGs39xqtwZ724aQ5
yqA/Kv0ArIMQJyEH4VnOoomipSlsXX8eeJA277fIP5flmtvR/ihfwOq6lCtzF3de
GH+frXLNbqedoP1qN7dR1Tg1n7fXUHQmj3bSNdsNcthPZTBxj5kPDL9RWlkV4Bp1
zc6bdLc2EzxSoQTg8H2PqK9c8MeJ49bhMUwWK9QZZB0YeoraMk1dEuLW50eaKQUt
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
RsLcdTjH+NMsW+1XDMw4KAqD2HGBVLuUtrn/2Q==
------------z0sG6lbwfRAjvoOOPUGyZF
Content-Disposition: inline; filename=show_ads.js
Content-Type: text/javascript; charset=UTF-8; name=show_ads.js
Content-Location: http://pagead2.googlesyndication.com/pagead/show_ads.js
Content-Transfer-Encoding: Quoted-Printable
(function(){
var g=3Ddocument,l=3Dnavigator,m=3Dwindow;function aa(){var a=3Dg.cookie=
,c=3DMath.round((new Date).getTime()/1000),b=3Dm.google_analytics_domain=
_name,d=3Dtypeof b=3D=3D"undefined"?ba("auto"):ba(b),e=3Da.indexOf("__ut=
ma=3D"+d+".")>-1,f=3Da.indexOf("__utmb=3D"+d)>-1,i=3Da.indexOf("__utmc=3D=
"+d)>-1,k,j=3D{};if(e){k=3Da.split("__utma=3D"+d+".")[1].split(";")[0].s=
plit(".");j.sid=3Df&&i?k[3]+"":m&&m.gaGlobal&&m.gaGlobal.sid?m.gaGlobal.=
sid:c+"";j.vid=3Dk[0]+"."+k[1];j.from_cookie=3Dtrue;j.dh=3Dd}else{j.sid=3D=
m&&m.gaGlobal&&m.gaGlobal.sid?m.gaGlobal.sid:
c+"";j.vid=3Dm&&m.gaGlobal&&m.gaGlobal.vid?m.gaGlobal.vid:(ca()^ha())*21=
47483647+"."+c;j.from_cookie=3Dfalse}j.hid=3Dm&&m.gaGlobal&&m.gaGlobal.h=
id?m.gaGlobal.hid:ca();m.gaGlobal=3Dj;return j}function ca(){return Math=
.round(Math.random()*2147483647)}function ha(){var a=3Dg.cookie?g.cookie=
:"",c=3Dm.history.length,b,d,e=3D[l.appName,l.version,l.language?l.langu=
age:l.browserLanguage,l.platform,l.userAgent,l.javaEnabled()?1:0].join("=
");if(m.screen)e+=3Dm.screen.width+"x"+m.screen.height+m.screen.colorDep=
th;else if(m.java){d=3D
java.awt.Toolkit.getDefaultToolkit().getScreenSize();e+=3Dd.screen.width=
+"x"+d.screen.height}e+=3Da;e+=3Dg.referrer?g.referrer:"";b=3De.length;w=
hile(c>0)e+=3Dc--^b++;return ia(e)}function ia(a){var c=3D1,b=3D0,d,e;if=
(!(a=3D=3Dundefined||a=3D=3D"")){c=3D0;for(d=3Da.length-1;d>=3D0;d--){e=3D=
a.charCodeAt(d);c=3D(c<<6&268435455)+e+(e<<14);b=3Dc&266338304;c=3Db!=3D=
0?c^b>>21:c}}return c}function ba(a){if(!a||a=3D=3D""||a=3D=3D"none")ret=
urn 1;if("auto"=3D=3Da){a=3Dg.domain;if("www."=3D=3Da.substring(0,4))a=3D=
a.substring(4,a.length)}return ia(a)};var s=3D{google_ad_channel:"channe=
l",google_ad_host:"host",google_ad_host_channel:"h_ch",google_ad_host_ti=
er_id:"ht_id",google_ad_region:"region",google_ad_section:"region",googl=
e_ad_type:"ad_type",google_adtest:"adtest",google_alternate_ad_url:"alte=
rnate_ad_url",google_alternate_color:"alt_color",google_bid:"bid",google=
_city:"gcs",google_color_bg:"color_bg",google_color_border:"color_border=
",google_color_line:"color_line",google_color_link:"color_link",google_c=
olor_text:"color_text",google_color_url:"color_url",
google_contents:"contents",google_country:"gl",google_cust_age:"cust_age=
",google_cust_ch:"cust_ch",google_cust_gender:"cust_gender",google_cust_=
id:"cust_id",google_cust_interests:"cust_interests",google_cust_job:"cus=
t_job",google_cust_l:"cust_l",google_cust_lh:"cust_lh",google_cust_u_url=
:"cust_u_url",google_disable_video_autoplay:"disable_video_autoplay",goo=
gle_ed:"ed",google_encoding:"oe",google_feedback:"feedback_link",google_=
flash_version:"flash",google_gl:"gl",google_hints:"hints",google_kw:"kw"=
,
google_kw_type:"kw_type",google_language:"hl",google_referrer_url:"ref",=
google_region:"gr",google_reuse_colors:"reuse_colors",google_safe:"adsaf=
e",google_targeting:"targeting",google_ui_features:"ui",google_video_doc=
_id:"video_doc_id",google_video_product_type:"video_product_type",google=
_page_url:"url"},y=3D{google_ad_format:"format",google_ad_output:"output=
",google_ad_callback:"callback",google_ad_override:"google_ad_override",=
google_ad_slot:"slotname",google_analytics_uacct:"ga_wpids",google_corre=
lator:"correlator",
google_cpa_choice:"cpa_choice",google_ctr_threshold:"ctr_t",google_image=
_size:"image_size",google_last_modified_time:"lmt",google_max_num_ads:"n=
um_ads",google_max_radlink_len:"max_radlink_len",google_num_radlinks:"nu=
m_radlinks",google_num_radlinks_per_unit:"num_radlinks_per_unit",google_=
only_ads_with_video:"only_ads_with_video",google_page_location:"loc",goo=
gle_rl_dest_url:"rl_dest_url",google_rl_filtering:"rl_filtering",google_=
rl_mode:"rl_mode",google_rt:"rt",google_skip:"skip"};function z(){}z.pro=
totype.n=3Dfunction(){};z.prototype.o=3Dfunction(){};z.prototype.m=3Dfun=
ction(){};var D=3Dnull;function E(a){D&&D.n(a)}function H(a){D&&D.o(a)}f=
unction ja(a){D&&D.m(a)}function I(){this.b=3Dthis.k();this.e=3Dfalse;if=
(!this.b){this.e=3Dthis.g();this.e||H("Browser does not allow cookies")}=
}I.prototype.d=3D"__gads=3D";I.prototype.c=3D"GoogleAdServingTest=3D";I.=
prototype.j=3Dfunction(){return this.b};I.prototype.setCookieInfo=3Dfunc=
tion(a){this.a=3Da._cookies_[0];if(this.a!=3Dnull){this.b=3Dthis.a._valu=
e_;this.l()}};
I.prototype.i=3Dfunction(a){var c=3D(new Date).valueOf(),b=3Dnew Date;b.=
setTime(c+a);return b};I.prototype.h=3Dfunction(a){if(this.b!=3Dnull||!t=
his.e){E("Skipping fetch cookie call");return}var c=3D"script",b=3Ddocum=
ent.domain,d=3D"http://partner.googleadservices.com/gampad/cookie.js?cal=
lback=3D_GA_googleCookieHelper.setCookieInfo&client=3D"+J(a)+"&domain=3D=
"+J(b);E("Issuing a fetch cookie call with
"+d+"")=
;document.write("<"+c+' src=3D"'+d+'">'+c+">")};I.prototype.g=3Dfuncti=
on(){document.cookie=3Dthis.c+
"Good";var a=3Dthis.f(this.c),c=3Da=3D=3D"Good";if(c){var b=3Dthis.i(-1)=
;document.cookie=3Dthis.c+"; expires=3D"+b.toGMTString()}return c};I.pro=
totype.k=3Dfunction(){var a=3Dthis.f(this.d);a!=3Dnull?E("Read first par=
ty cookie: "+a):H("No first party cookie found");return a};I.prototype.f=
=3Dfunction(a){var c=3Ddocument.cookie,b=3Dc.indexOf(a),d=3Dnull;if(b!=3D=
-1){var e=3Db+a.length,f=3Dc.indexOf(";",e);if(f=3D=3D-1)f=3Dc.length;d=3D=
c.substring(e,f)}return d};I.prototype.l=3Dfunction(){if(this.a=3D=3Dnul=
l)H("Skipping cookie creation: no cookie info");
else if(this.b=3D=3Dnull)ja("Skipping cookie creation: no cookie value")=
;else{var a=3Dnew Date;a.setTime(1000*this.a._expires_);var c=3Dthis.a._=
domain_,b=3Dthis.d+this.b+"; expires=3D"+a.toGMTString()+"; path=3D"+thi=
s.a._path_+"; domain=3D."+c;document.cookie=3Db;E("Written cookie: "+b)}=
};function ka(){if(navigator.plugins&&navigator.mimeTypes.length){var a=3D=
navigator.plugins["Shockwave Flash"];if(a&&a.description)return a.descri=
ption.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s)+r/,".")}else if(navigat=
or.userAgent&&navigator.userAgent.indexOf("Windows CE")>=3D
0){var c=3D3,b=3D1;while(b)try{b=3Dnew ActiveXObject("ShockwaveFlash.Sho=
ckwaveFlash."+(c+1));c++}catch(d){b=3Dnull}return c.toString()}else if(l=
a("msie")&&!window.opera){var b=3Dnull;try{b=3Dnew ActiveXObject("Shockw=
aveFlash.ShockwaveFlash.7")}catch(d){var c=3D0;try{b=3Dnew ActiveXObject=
("ShockwaveFlash.ShockwaveFlash.6");c=3D6;b.AllowScriptAccess=3D"always"=
}catch(d){if(c=3D=3D6)return c.toString()}try{b=3Dnew ActiveXObject("Sho=
ckwaveFlash.ShockwaveFlash")}catch(d){}}if(b!=3Dnull){var c=3Db.GetVaria=
ble("$version").split(" ")[1];
return c.replace(/,/g,".")}}return"0"};window.IDICommon=3Dwindow.IDIComm=
on||(function(){return{getHash:function(a){var c=3Da.indexOf("#")+1;retu=
rn c?a.substr(c):""},htmlEscape:function(a){return/[&<>\"]/.test(a)?a.re=
place(/&/g,"&").replace(//g,">").replace(/\=
"/g,"""):a},makeIframeTag:function(a){var c=3D"
"},getIframe:function(a,c){try{return a.frames[c]}catch(b){return null}=
},makeIframeNode:function(a){var c=3Ddocument.createElement("iframe");
for(var b in a)c.setAttribute(b,a[b]);return c},appendHiddenIframe:funct=
ion(a,c){setTimeout(function(){document.body.appendChild(IDICommon.makeI=
frameNode({id:a,name:a,src:c,width:0,height:0,frameBorder:0}))},0)},writ=
eHiddenIframe:function(a,c){document.write(IDICommon.makeIframeTag({id:a=
,name:a,src:c,width:0,height:0,frameBorder:0}))},splitURIComponent:funct=
ion(a,c){var b=3D[],d=3Da.length,e=3D0;while(e
0){e[h]=3Dv[B];for(var C=3D0;CIDICommon.MAX_URL_LENGTH){K+=3D"$";var da=3Dq(=
h),ua=3DIDICommon.MAX_URL_LENGTH-1-da.length,ea=3DIDICommon.splitURIComp=
onent(K,ua),fa=3Dea.length;for(var G=3D0;G1)b=3De[0];retur=
n na(b,"\"'")};var Ha=3D{google:1,googlegroups:1,gmail:1,googlemail:1,or=
kut:1,googleimages:1,googleprint:1};function Ia(a){var c=3Da.google_page=
_location||a.google_page_url;if(!c)return false;c=3Dc.toString();if(c.in=
dexOf("http://")=3D=3D0)c=3Dc.substring(7,c.length);else if(c.indexOf("h=
ttps://")=3D=3D0)c=3Dc.substring(8,c.length);var b=3Dc.indexOf("/");if(b=
=3D=3D-1)b=3Dc.length;var d=3Dc.substring(0,b),e=3Dd.split("."),f=3Dfals=
e;if(e.length>=3D3)f=3De[e.length-3]in Ha;if(e.length>=3D2)f=3Df||e[e.le=
ngth-2]in Ha;return f}function Ja(a,c){var b=3D"http://googleads.g.doubl=
eclick.net",
d=3D"http://pagead2.googlesyndication.com";if(!Ia(a)&&Math.random()"+e+">");else if(a.google_=
ad_output=3D=3D"html"){if(a.name!=3D"google_ads_frame"){d!=3Dnull&&c.wri=
te('');if(Qa(a.google_ad_output,a.google_ad_client)){I=
DIHost.setModuleRelayUrl("http://pagead2.googlesyndication.com/pagead/id=
i_relay.html");var f=3D0;if(a.google_num_0ad_slots)f+=3Da.google_num_0ad=
_slots;if(a.google_num_ad_slots)f+=3D
a.google_num_ad_slots;if(a.google_num_sdo_slots)f+=3Da.google_num_sdo_sl=
ots;var i=3D"google_inline_div"+f,k=3D"
';c.write(k);var j=3D"google_frame"+f,q=3Da.setTimeout=
(function(){IDIHost.unregisterListener(j)},5000);IDIHost.createModule(b,=
j,a.google_ad_width,a.google_ad_height,{callback:function(o,r){Oa(o,r,q)=
},pollingInterval:500,
iframeAttrs:{style:"position: absolute;left:0px",marginWidth:"0",marginH=
eight:"0",vspace:"0",hspace:"0",allowTransparency:"true"},parentDivId:i}=
)}else{c.write('
")}d!=3Dnull&&c.write("
")}}else a.google_ad_outp=
ut=3D=3D"textlink"&&c.write("<"+
e+' language=3D"JavaScript1.1" src=3D'+M(b)+">"+e+">")}function Ra(a){=
for(var c in s)a[c]=3Dnull;for(var c in y){if(c=3D=3D"google_correlator"=
)continue;a[c]=3Dnull}}function Sa(a){if(a.google_ad_format)return a.goo=
gle_ad_format.indexOf("_0ads")>0;return a.google_ad_output!=3D"html"&&a.=
google_num_radlinks>0}function Z(a){return a&&a.indexOf("_sdo")!=3D-1}fu=
nction Ta(a){var c=3Dnull,b=3Dwindow,d=3Ddocument,e=3Dnew Date,f=3De.get=
Time(),i=3Db.google_ad_format,k=3DJa(b,0.0010);if(b.google_cpa_choice!=3D=
c){b.google_ad_url=3Dk+"/cpa/ads?";
b.google_ad_url+=3D"client=3D"+escape(W(b.google_ad_client));b.google_ad=
_region=3D"_google_cpa_region_";O("google_cpa_choice");if(typeof d.chara=
cterSet!=3D"undefined")P("oe",d.characterSet);else typeof d.charset!=3D"=
undefined"&&P("oe",d.charset)}else if(Z(i)){b.google_ad_url=3Dk+"/pagead=
/sdo?";b.google_ad_url+=3D"client=3D"+escape(Ma(b.google_ad_client))}els=
e{b.google_ad_url=3Dk+"/pagead/ads?";b.google_ad_url+=3D"client=3D"+esca=
pe(W(b.google_ad_client))}O("google_ad_host");O("google_ad_host_tier_id"=
);var j=3Db.google_num_slots_by_client,
q=3Db.google_num_slots_by_channel,o=3Db.google_prev_ad_formats_by_region=
,r=3Db.google_prev_ad_slotnames_by_region;if(b.google_ad_region=3D=3Dc&&=
b.google_ad_section!=3Dc)b.google_ad_region=3Db.google_ad_section;var p=3D=
b.google_ad_region=3D=3Dc?"":b.google_ad_region;if(Z(i)){b.google_num_sd=
o_slots=3Db.google_num_sdo_slots?b.google_num_sdo_slots+1:1;if(b.google_=
num_sdo_slots>4)return false}else if(Sa(b)){b.google_num_0ad_slots=3D