a few minor fixes

Larry Tordsen <[email protected]> Mon, 22 Apr 2013 23:39:08 -0500
Newsgroups gmane.comp.statistics.dap.bugs
Message-ID <CAL_1DNo-UwB2mcZrQkMXYiLci7t7LkBc8G3zuc5g+yuEZU8_Nw@mail.gmail.com>
--089e015369141cc8d104daffc484
Content-Type: multipart/alternative; boundary=089e015369141cc8cc04daffc482

--089e015369141cc8cc04daffc482
Content-Type: text/plain; charset=ISO-8859-1

Hi,

I had a few problems compiling dap.
-->dap0.c: getline conflicts with the stdio.h getline, so I renamed it
dap_getline.
--> sbstrans3.c:  included string.h & stdlib.h to get rid of a bunch of
warnings.


Here are the fixes, incase anyone else has problems.  Sorry for the spam if
its just me.

--Larry

--089e015369141cc8cc04daffc482
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div><div><div>Hi,<br><br></div>I had a few problems compi=
ling dap.<br>--&gt;dap0.c: getline conflicts with the stdio.h getline, so I=
 renamed it dap_getline.<br></div>--&gt; sbstrans3.c:=A0 included string.h =
&amp; stdlib.h to get rid of a bunch of warnings.<br>
<br></div><br>Here are the fixes, incase anyone else has problems.=A0 Sorry=
 for the spam if its just me.<br><br>--Larry<br><div><div><br></div></div><=
/div>

--089e015369141cc8cc04daffc482--
--089e015369141cc8d104daffc484
Content-Type: text/x-csrc; charset=US-ASCII; name="dap0.c"
Content-Disposition: attachment; filename="dap0.c"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hfukvibg0

LyogQ29udGFpbnMgdGhlIGJhc2ljIEkvTyBhbmQgc2V0dXAgcm91dGluZXMuICAqLwoKLyogIENv
cHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4KICoKICogIERhcCBpcyBhIEdOVSBwcm9ncmFtLgogKgogKiAgVGhpcyBmaWxlIGlz
IHBhcnQgb2YgRGFwLgogKgogKiAgRGFwIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAg
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIERhcCBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCBEYXAuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n
bnUub3JnL2xpY2Vuc2VzLz4uCiAqLwoKI2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaW5jbHVkZSA8
dGltZS5oPgojaW5jbHVkZSA8c3lzL3N0YXQuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVk
ZSA8ZmNudGwuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSAiZGFwX21ha2UuaCIKI2lu
Y2x1ZGUgImV4dGVybnMuaCIKCi8qIGRhdGFvYnMgc3RydWN0dXJlcyBjb250YWluIHRoZSBuYW1l
cyBhbmQgdmFsdWVzIG9mIHRoZSB2YXJpYWJsZXMuICAKICogQWxzbyBjb250YWluIG51bWJlciBv
ZiB2YXJpYWJsZXMsIGV0Yy46IHNlZSBkYXBfbWFrZS5oLiAgCiAqLwoKLyogVGhlIHZhbHVlcyBy
ZWFkIGZyb20gdGhlIGN1cnJlbnQgaW5wdXQgbGluZS4gICovCmRhdGFvYnMgZGFwX29ic1szXTsJ
Lyogbm9ybWFsbHkgdXNlIDAgZm9yIGluIGFuZCBvdXQ7IHNlbGVjdCBieSBkYXBfb25vICovCgov
KiBUaGUgdmFsdWVzIHJlYWQgZnJvbSB0aGUgcHJldmlvdXMgaW5wdXQgbGluZS4gICovCmRhdGFv
YnMgZGFwX3ByZXZbMl07CS8qIG9ubHkgdXNlIDAgb3IgMSBmb3IgaW5wdXQgKi8KCi8qIEZvciBz
YXZpbmcgdmFsdWVzIHJlYWQgZnJvbSBjdXJyZW50IGlucHV0IGxpbmUuICAqLwpzdGF0aWMgZGF0
YW9icyBkb3NhdmU7CgpzdGF0aWMgUkZJTEUgKnJmaWxlOwkJLyogdGhlIGFycmF5IG9mIHJhbSBm
aWxlcyAoc2VlIGRhcF9tYWtlLmgpICovCgovKiBBIERGSUxFIGNhbiBiZSBlaXRoZXIgYSBkaXNr
IGZpbGUgb3IgYSByYW1maWxlOiAwLCAxLCAyIGFyZSB1c2VkIGZvciBkaXNrCiAqIGZpbGVzLCA+
IDIgZm9yIHJhbWZpbGVzLiAgCiAqLwoKI2RlZmluZSBOREZJTEVTIDQJLyogbnVtYmVyIG9mIGFj
dHVhbCBkaXNrIGZpbGVzICovCgpzdGF0aWMgREZJTEUgKmRmaWxlOwoKREZJTEUgKmRhcF9pblsz
XTsJLyogaW5wdXQgZmlsZXMgKi8KREZJTEUgKmRhcF9vdXRbM107CS8qIG91dHB1dCBmaWxlcyAq
LwpGSUxFICpkYXBfbHN0OwkJLyogLmxzdCBmaWxlICovCkZJTEUgKmRhcF9sb2c7CQkvKiAubG9n
IGZpbGUsIGZvciBsaW5lcyByZWFkLCB3cml0dGVuICovCkZJTEUgKmRhcF9lcnI7CQkvKiAuZXJy
IGZpbGUsIGZvciBlcnJvcnMgKi8KaW50IGRhcF9vbm87CQkvKiBzcGVjaWZpZXMgd2hpY2ggc2V0
IG9mIHZhcmlhYmxlIHZhbHVlcyAoZGF0YW9icykgdG8gdXNlICovCmludCBkYXBfZGVsaW07CQkv
KiBkZWxpbWl0ZXIgZm9yIHJlYWRpbmcgZGF0YSBmaWxlcyAobm90IGRhdGFzZXRzKSAqLwpzdGF0
aWMgaW50ICpmaWVsZHdkOwkvKiB3aWR0aCBvZiBmaXhlZCB3aWR0aCBpbnB1dCBkYXRhIGZpZWxk
cyAqLwpzdGF0aWMgaW50IG5maWVsZHM7CQkvKiBudW1iZXIgb2YgZml4ZWQgd2lkdGggaW5wdXQg
ZGF0YSBmaWVsZHMgKi8Kc3RhdGljIGludCBsaW5lbm9bMl07CQkvKiBsaW5lIG51bWJlciBmb3Ig
dXAgdG8gMiBpbnB1dCBkYXRhc2V0cyAqLwpzdGF0aWMgaW50IG91dGxpbmU7CQkvKiBudW1iZXIg
b2YgbGluZXMgd3JpdHRlbiAqLwpzdGF0aWMgaW50IHBhZ2VubzsJCS8qIG91dHB1dCBwYWdlIG51
bWJlciAqLwpzdGF0aWMgaW50IGVvZlsyXTsJCS8qIGZsYWdzOiBoYXMgRU9GIGJlZW4gcmVhY2hl
ZCBvbiBpbnB1dCBmaWxlKHMpPyAqLwpzdGF0aWMgbG9uZyBmaWxlcG9zWzJdOwkJLyogZmlsZSBw
b3NpdGlvbnMgb2YgaW5wdXQgZmlsZShzKSAqLwoKLyogVGhlc2UgYXJlIHRoZSB0eXBlcyBvZiBp
bnB1dCBkYXRhIGZpbGVzIChub3QgZGF0YXNldHMpIHJlY29nbml6ZWQuICAqLwojZGVmaW5lIFRF
WFQgMAkJLyogb3JkaW5hcnkgdGV4dCwgZmllbGRzIGVpdGhlciBmaXhlZCB3aWR0aCBvciBkZWxp
bWl0ZWQgKi8KI2RlZmluZSBEQkFTRSAxCQkvKiBkQmFzZSAqLwojZGVmaW5lIERTRVQgMgkJLyog
ZGFwIGRhdGFzZXQgKi8KCnN0YXRpYyBpbnQgaW50eXBlOwkvKiB0eXBlIG9mIGlucHV0IGZpbGUg
Ki8Kc3RhdGljIGludCBpbmxlbjsJLyogbGluZSBsZW5ndGggZm9yIGZpbGVzIHdpdGggZEJhc2Ug
ZmlsZXMgKi8Kc3RhdGljIGludCB0b29sb25nOwkvKiBjb3VudDogc3RyaW5nIGRhdGEgbG9uZ2Vy
IHRoYW4gc3BlY2lmaWVkIGVuY291bnRlcmVkPyAqLwoKY2hhciAqZGFwX3RpdGxlID0gTlVMTDsJ
LyogdGl0bGUgZm9yIC5sc3QgcGFnZXMsIGNhcHRpb24gZm9yIC5wcyBwYWdlcyAqLwoKY2hhciAq
ZGFwX2RhcG5hbWU7CS8qIG5hbWUgb2YgcHJvZ3JhbSBydW5uaW5nICovCmNoYXIgKmRhcF9wc25h
bWU7CS8qIG5hbWUgb2YgdGhlIC5wcyBmaWxlICovCgpleHRlcm4gaW50IGRhcF9kYmxoaWdoOwkv
KiBmb3IgY29kaW5nIGRvdWJsZXMgKi8KZXh0ZXJuIGludCBkYXBfZGJsbG93OwkvKiBmb3IgY29k
aW5nIGRvdWJsZXMgKi8KZXh0ZXJuIGRvdWJsZSBkYXBfZG91YmxlOwkvKiB0byBnZXQgYXJvdW5k
IHdlaXJkIHJldHVybnM7IHNlZSBtYWNoZGVwLmMgKi8KCnN0YXRpYyBpbnQgbm1hbGxvY3MgPSAw
OwpzdGF0aWMgaW50IG5mcmVlcyA9IDA7CgpjaGFyICpkYXBfbWFsbG9jKGludCBuYnl0ZXMsIGNo
YXIgKm1lc2cpCnsKICBjaGFyICptOwoKICBubWFsbG9jcysrOwogIGlmICghKG0gPSBtYWxsb2Mo
bmJ5dGVzKSkpCiAgICB7CiAgICAgIHBlcnJvcihkYXBfZGFwbmFtZSk7CiAgICAgIGV4aXQoMSk7
CiAgICB9CiAgaWYgKGRhcF9tZW10cmFjZSkKICAgIHsKICAgICAgZnByaW50ZihkYXBfbG9nLCAi
bWFsbG9jICV4ICVzXG4iLCAodW5zaWduZWQgaW50KSBtLCBtZXNnKTsKICAgICAgZmZsdXNoKGRh
cF9sb2cpOwogICAgICBpZiAoZGFwX21hYm9ydCAmJiBtID09IGRhcF9tZW10cmFjZSkKCWFib3J0
KCk7CiAgICB9CiAgcmV0dXJuIG07Cn0KCnZvaWQgZGFwX2ZyZWUodm9pZCAqcHRyLCBjaGFyICpt
ZXNnKQp7CiAgbmZyZWVzKys7CiAgaWYgKGRhcF9tZW10cmFjZSkKICAgIHsKICAgICAgZnByaW50
ZihkYXBfbG9nLCAiZnJlZSAleCAlc1xuIiwgKHVuc2lnbmVkIGludCkgcHRyLCBtZXNnKTsKICAg
ICAgZmZsdXNoKGRhcF9sb2cpOwogICAgICBpZiAoZGFwX2ZhYm9ydCAmJiBwdHIgPT0gZGFwX21l
bXRyYWNlKQoJYWJvcnQoKTsKICAgIH0KICBmcmVlKHB0cik7Cn0KCnN0YXRpYyB2b2lkIGluaXRk
byhkYXRhb2JzICpkYXRvKQp7CiAgaW50IGQ7CgogIGRhdG8tPmRvX2ludCA9IChpbnQgKikgZGFw
X21hbGxvYyhzaXplb2YoaW50KSAqIGRhcF9tYXh2YXIsICJpbml0ZG86IGRhdG8tPmRvX2ludCIp
OwogIGRhdG8tPmRvX2lsID0gKGludCAqKikgZGFwX21hbGxvYyhzaXplb2YoaW50ICopICogZGFw
X21heHZhciwgImluaXRkbzogZGF0by0+ZG9faWwiKTsKICBkYXRvLT5kb19kYmwgPSAoZG91Ymxl
ICopIGRhcF9tYWxsb2Moc2l6ZW9mKGRvdWJsZSkgKiBkYXBfbWF4dmFyLCAiaW5pdGRvOiBkYXRv
LT5kb19kYmwiKTsKICBkYXRvLT5kb19kbCA9IChkb3VibGUgKiopIGRhcF9tYWxsb2Moc2l6ZW9m
KGRvdWJsZSAqKSAqIGRhcF9tYXh2YXIsICJpbml0ZG86IGRhdG8tPmRvX2RsIik7CiAgZGF0by0+
ZG9fc3RyID0gKGNoYXIgKiopIGRhcF9tYWxsb2Moc2l6ZW9mKGNoYXIgKikgKiBkYXBfbWF4dmFy
LCAiaW5pdGRvOiBkYXRvLT5kb19zdHIiKTsKICBkYXRvLT5kb19zbCA9IChpbnQgKikgZGFwX21h
bGxvYyhzaXplb2YoaW50KSAqIGRhcF9tYXh2YXIsICJpbml0ZG86IGRhdG8tPmRvX3NsIik7CiAg
ZGF0by0+ZG9fbmFtID0gKGNoYXIgKiopIGRhcF9tYWxsb2Moc2l6ZW9mKGNoYXIgKikgKiBkYXBf
bWF4dmFyLCAiaW5pdGRvOiBkYXRvLT5kb19uYW0iKTsKICBkYXRvLT5kb19sZW4gPSAoaW50ICop
IGRhcF9tYWxsb2Moc2l6ZW9mKGludCkgKiBkYXBfbWF4dmFyLCAiaW5pdGRvOiBkYXRvLT5kb19s
ZW4iKTsKICBkYXRvLT5kb19pbiA9IChpbnQgKikgZGFwX21hbGxvYyhzaXplb2YoaW50KSAqIGRh
cF9tYXh2YXIsICJpbml0ZG86IGRhdG8tPmRvX2luIik7CiAgZGF0by0+ZG9fb3V0ID0gKGludCAq
KSBkYXBfbWFsbG9jKHNpemVvZihpbnQpICogZGFwX21heHZhciwgImluaXRkbzogZGF0by0+ZG9f
b3V0Iik7CiAgZm9yIChkID0gMDsgZCA8IGRhcF9tYXh2YXI7IGQrKykKICAgIHsKICAgICAgZGF0
by0+ZG9fc3RyW2RdID0gTlVMTDsKICAgICAgZGF0by0+ZG9fbmFtW2RdID0gTlVMTDsKICAgIH0K
fQoKLyogdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgYXJlIGZvciBkZXRlcm1pbmluZyBlbmRpYW5u
ZXNzICovCnN0YXRpYyBkb3VibGUgdGVzdGQ7IC8qIGEgZG91YmxlLCBoYWxmIG9mIHdob3NlIGNv
bnRlbnRzIHdpbGwgYmUgY29udmVydGVkIHRvIGFuLi4uICovCnN0YXRpYyB1bnNpZ25lZCBpbnQg
KnB0ZXN0aTsgLyogdW5zaWduZWQgaW50IHRvIHNlZSBpZiB0aGV5IGFyZQoJCQkgICAgICAvKiB6
ZXJvIChtYW50aXNzYSkgb3Igbm90IChleHBvbmVudCBhbmQgc2lnbgoJCQkgICAgICAgKi8KCmlu
dCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKewogIGNoYXIgKmxzdG5hbWU7CQkvKiBuYW1l
IG9mIC5sc3QgZmlsZSAqLwogIGNoYXIgKmxvZ25hbWU7CQkvKiBuYW1lIG9mIC5sb2cgZmlsZSAq
LwogIGNoYXIgKmVycm5hbWU7CQkvKiBuYW1lIG9mIC5lcnIgZmlsZSAqLwogIGludCBsZW47CQkv
KiBsZW5ndGggb2YgbHN0bmFtZSwgbG9nbmFtZSwgZXJybmFtZSAqLwogIGludCB2OwkJCS8qIGlu
ZGV4IHRvIHZhcmlhYmxlcyAqLwoKICBkYXBfZGFwbmFtZSA9IGFyZ3ZbMF07CiAgbGVuID0gc3Ry
bGVuKGFyZ3ZbMF0pOwogIGxzdG5hbWUgPSBtYWxsb2MobGVuICsgNSk7CS8qIHJvb20gZm9yIHN1
ZmZpeCAqLwogIHN0cmNweShsc3RuYW1lLCBhcmd2WzBdKTsKICBpZiAobGVuID49IDQgJiYgIXN0
cmNtcChsc3RuYW1lICsgbGVuIC0gNCwgIi5kYXAiKSkKICAgIHN0cmNweShsc3RuYW1lICsgbGVu
IC0gMywgImxzdCIpOwogIGVsc2UKICAgIHsKICAgICAgc3RyY2F0KGxzdG5hbWUsICIubHN0Iik7
CiAgICAgIGxlbiArPSA0OwogICAgfQogIGlmICghKGRhcF9sc3QgPSBmb3Blbihsc3RuYW1lLCAi
YSIpKSkKICAgIHsKICAgICAgcGVycm9yKGRhcF9kYXBuYW1lKTsKICAgICAgZXhpdCgxKTsKICAg
IH0KICBsb2duYW1lID0gbWFsbG9jKGxlbiArIDEpOwogIHN0cmNweShsb2duYW1lLCBsc3RuYW1l
KTsKICBzdHJjcHkobG9nbmFtZSArIGxlbiAtIDMsICJsb2ciKTsKICBpZiAoIShkYXBfbG9nID0g
Zm9wZW4obG9nbmFtZSwgInciKSkpCiAgICB7CiAgICAgIHBlcnJvcihkYXBfZGFwbmFtZSk7CiAg
ICAgIGV4aXQoMSk7CiAgICB9CiAgZXJybmFtZSA9IG1hbGxvYyhsZW4gKyAxKTsKICBzdHJjcHko
ZXJybmFtZSwgbHN0bmFtZSk7CiAgc3RyY3B5KGVycm5hbWUgKyBsZW4gLSAzLCAiZXJyIik7CiAg
aWYgKCEoZGFwX2VyciA9IGZvcGVuKGVycm5hbWUsICJ3IikpKQogICAgewogICAgICBwZXJyb3Io
ZGFwX2RhcG5hbWUpOwogICAgICBleGl0KDEpOwogICAgfQogIGluaXRkbyhkYXBfb2JzKTsKICBp
bml0ZG8oZGFwX29icyArIDEpOwogIGluaXRkbyhkYXBfb2JzICsgMik7CiAgaW5pdGRvKGRhcF9w
cmV2KTsKICBpbml0ZG8oZGFwX3ByZXYgKyAxKTsKICBpbml0ZG8oJmRvc2F2ZSk7CiAgcmZpbGUg
PSAoUkZJTEUgKikgZGFwX21hbGxvYyhzaXplb2YoUkZJTEUpICogZGFwX25yZmlsZXMsICJtYWlu
OiByZmlsZSIpOwogIGRmaWxlID0gKERGSUxFICopIGRhcF9tYWxsb2Moc2l6ZW9mKERGSUxFKSAq
IChkYXBfbnJmaWxlcyArIE5ERklMRVMpLCAibWFpbjogZGZpbGUiKTsKICBwYWdlbm8gPSAxOwog
IGRhcF9wc25hbWUgPSBkYXBfbWFsbG9jKGxlbiArIDEsICJtYWluOiBkYXBfcHNuYW1lIik7CiAg
c3RyY3B5KGRhcF9wc25hbWUsIGxzdG5hbWUpOwogIHN0cmNweShkYXBfcHNuYW1lICsgbGVuIC0g
MywgInBzIik7CiAgZGFwX2luaXRwaWN0KCk7CiAgZm9yICh2ID0gMDsgdiA8IGRhcF9tYXh2YXI7
IHYrKykKICAgIHsKICAgICAgZm9yIChkYXBfb25vID0gMDsgZGFwX29ubyA8IDM7IGRhcF9vbm8r
KykKCXsKCSAgZGFwX29ic1tkYXBfb25vXS5kb19uYW1bdl0gPSBOVUxMOwoJICBkYXBfb2JzW2Rh
cF9vbm9dLmRvX2RsW3ZdID0gTlVMTDsKCSAgZGFwX29ic1tkYXBfb25vXS5kb19pbFt2XSA9IE5V
TEw7CgkgIGRhcF9vYnNbZGFwX29ub10uZG9fc3RyW3ZdID0gTlVMTDsKCSAgZGFwX29ic1tkYXBf
b25vXS5kb19zbFt2XSA9IDA7CgkgIGlmIChkYXBfb25vIDwgMikKCSAgICBkYXBfcHJldltkYXBf
b25vXS5kb19zdHJbdl0gPSBOVUxMOwoJfQogICAgICBkb3NhdmUuZG9fc3RyW3ZdID0gTlVMTDsK
ICAgIH0KICBkYXBfb25vID0gMDsKICB0ZXN0ZCA9IC0yLjA7IC8qIHRoaXMgc2hvdWxkIGhhdmUg
dGhlIHNpZ24gYml0IHNldCBhbmQgbm9uLXplcm8gZXhwb25lbnQsIGJ1dAoJCSAgIC8qIHplcm8g
bWFudGlzc2EKCQkgICAgKi8KICBwdGVzdGkgPSAoaW50ICopICZ0ZXN0ZDsgLyogKnB0ZXN0aSBp
cyB0aGUgbG93IG9yZGVyIHdvcmQgb2YgdGVzdGQgKi8KICBpZiAoISgqcHRlc3RpKSkKICAgIHsg
LyogaWYgdGhhdCdzIHplcm8sIHRoZW4gdGhlIHNpZ24gYW5kIGV4cG9uZW50IGFyZSBpbiB0aGUg
aGlnaC1vcmRlciB3b3JkICovCiAgICAgIGRhcF9kYmxsb3cgPSAwOwogICAgICBkYXBfZGJsaGln
aCA9IDE7CiAgICB9CiAgZWxzZQogICAgeyAvKiBlbHNlIHRoZXkncmUgaW4gdGhlIGxvdy1vcmRl
ciB3b3JkICovCiAgICAgIGRhcF9kYmxsb3cgPSAxOwogICAgICBkYXBfZGJsaGlnaCA9IDA7CiAg
ICB9CiAgZm9yICh2ID0gMDsgdiA8IDM7IHYrKykKICAgIHsKICAgICAgZGFwX2luW3ZdID0gKERG
SUxFICopIE5VTEw7CiAgICAgIGRhcF9vdXRbdl0gPSAoREZJTEUgKikgTlVMTDsKICAgIH0KICBk
YXBfbWFpbihhcmdjLCBhcmd2KTsKICByZXR1cm4gMDsKfQoKLyogT3BlbiBhIGRpc2sgZmlsZSBk
YXRhc2V0ICovCnN0YXRpYyBGSUxFICpkb3BlbihjaGFyIGZuYW1lW10sIGNoYXIgbW9kZVtdKQp7
CiAgY2hhciAqZG5hbWU7CiAgRklMRSAqZjsKCiAgZG5hbWUgPSBkYXBfbWFsbG9jKHN0cmxlbihm
bmFtZSkgKyBzdHJsZW4oZGFwX3NldGRpcikgKyAyLCAiZG9wZW46IGRuYW1lIik7CiAgZGFwX25h
bWUoZG5hbWUsIGZuYW1lKTsKICBmID0gZm9wZW4oZG5hbWUsIG1vZGUpOwogIGRhcF9mcmVlKGRu
YW1lLCAiZG9wZW46IGRuYW1lIik7CiAgcmV0dXJuIGY7Cn0KCi8qIGlmIG1vZGVbMV0gPT0gJ2Yn
LCBpdCdzIGEgZmlsZSwgbm90IGEgZGF0YXNldCwgc28gZG9uJ3QgcHJlcGVuZCBkaXJlY3Rvcnkg
Ki8Kc3RhdGljIERGSUxFICpkZm9wZW4oY2hhciAqZm5hbWUsIGNoYXIgKm1vZGUpCnsKICBzdGF0
aWMgaW50IHJmaWxlaW5pdCA9IDA7CS8qIGZsYWc6IGhhcyB0aGUgcmFtZmlsZSBhcnJheSBiZWVu
IGluaXRpYWxpemVkPyAqLwogIGludCBmOwogIGNoYXIgdHJ1ZW1vZGVbMl07CgogIGlmICghcmZp
bGVpbml0KQogICAgewogICAgICByZmlsZWluaXQgPSAxOwogICAgICBmb3IgKGYgPSAwOyBmIDwg
ZGFwX25yZmlsZXM7IGYrKykKCXsKCSAgZGZpbGVbTkRGSUxFUyArIGZdLmRmaWxlX25hbWUgPSBO
VUxMOwoJICBkZmlsZVtOREZJTEVTICsgZl0uZGZpbGVfcmFtID0gcmZpbGUgKyBmOwoJICBkZmls
ZVtOREZJTEVTICsgZl0uZGZpbGVfZGlzayA9IE5VTEw7CgkgIHJmaWxlW2ZdLnJmaWxlX3N0ciA9
IE5VTEw7Cgl9CiAgICAgIGZvciAoZiA9IDA7IGYgPCBOREZJTEVTOyBmKyspCgl7CgkgIGRmaWxl
W2ZdLmRmaWxlX2Rpc2sgPSBOVUxMOwoJICBkZmlsZVtmXS5kZmlsZV9yYW0gPSBOVUxMOwoJfQog
ICAgfQogIGlmICghZm5hbWUpCiAgICB7CiAgICAgIGZwdXRzKCIoZGZvcGVuKSBubyBmaWxlIG5h
bWUgZ2l2ZW5cbiIsIGRhcF9lcnIpOwogICAgICBleGl0KDEpOwogICAgfQogIGlmIChmbmFtZVsw
XSA9PSAnPCcpCiAgICB7CiAgICAgIGlmICghc3RyY21wKG1vZGUsICJyIikpCgl7CgkgIGZvciAo
ZiA9IDA7IGYgPCBkYXBfbnJmaWxlczsgZisrKQoJICAgIHsKCSAgICAgIGlmIChkZmlsZVtOREZJ
TEVTICsgZl0uZGZpbGVfbmFtZSAmJgoJCSAgIXN0cmNtcChkZmlsZVtOREZJTEVTICsgZl0uZGZp
bGVfbmFtZSwgZm5hbWUgKyAxKSkKCQl7CgkJICByZmlsZVtmXS5yZmlsZV9wb3MgPSByZmlsZVtm
XS5yZmlsZV9zdHI7CgkJICByZXR1cm4gZGZpbGUgKyBOREZJTEVTICsgZjsKCQl9CgkgICAgfQoJ
ICByZXR1cm4gTlVMTDsKCX0KICAgICAgZWxzZSBpZiAoIXN0cmNtcChtb2RlLCAidyIpKQoJewoJ
ICBmb3IgKGYgPSAwOyBmIDwgZGFwX25yZmlsZXM7IGYrKykKCSAgICB7CgkgICAgICBpZiAoZGZp
bGVbTkRGSUxFUyArIGZdLmRmaWxlX25hbWUgJiYKCQkgICFzdHJjbXAoZGZpbGVbTkRGSUxFUyAr
IGZdLmRmaWxlX25hbWUsIGZuYW1lICsgMSkpCgkJewoJCSAgcmZpbGVbZl0ucmZpbGVfZW5kID0g
cmZpbGVbZl0ucmZpbGVfc3RyOwoJCSAgcmZpbGVbZl0ucmZpbGVfcG9zID0gcmZpbGVbZl0ucmZp
bGVfc3RyOwoJCSAgcmV0dXJuIGRmaWxlICsgTkRGSUxFUyArIGY7CgkJfQoJICAgIH0KCSAgZm9y
IChmID0gMDsgZiA8IGRhcF9ucmZpbGVzOyBmKyspCgkgICAgewoJICAgICAgaWYgKCFkZmlsZVtO
REZJTEVTICsgZl0uZGZpbGVfbmFtZSkKCQl7CgkJICByZmlsZVtmXS5yZmlsZV9zdHIgPSBkYXBf
bWFsbG9jKGRhcF9yZmlsZXNpemUsCgkJCQkJCSAgImRmb3BlbjogcmZpbGVbZl0ucmZpbGVfc3Ry
Iik7CgkJICBkZmlsZVtOREZJTEVTICsgZl0uZGZpbGVfbmFtZSA9CgkJICAgIGRhcF9tYWxsb2Mo
c3RybGVuKGZuYW1lKSwgImRmb3BlbjogZGZpbGVbTkRGSUxFUyArIGZdLmRmaWxlX25hbWUiKTsK
CQkgIHN0cmNweShkZmlsZVtOREZJTEVTICsgZl0uZGZpbGVfbmFtZSwgZm5hbWUgKyAxKTsKCQkg
IHJmaWxlW2ZdLnJmaWxlX2VuZCA9IHJmaWxlW2ZdLnJmaWxlX3N0cjsKCQkgIHJmaWxlW2ZdLnJm
aWxlX3BvcyA9IHJmaWxlW2ZdLnJmaWxlX3N0cjsKCQkgIHJldHVybiBkZmlsZSArIE5ERklMRVMg
KyBmOwoJCX0KCSAgICB9CgkgIHJldHVybiBOVUxMOwoJfQogICAgICBlbHNlIGlmICghc3RyY21w
KG1vZGUsICJhIikpCgl7CgkgIGZvciAoZiA9IDA7IGYgPCBkYXBfbnJmaWxlczsgZisrKQoJICAg
IHsKCSAgICAgIGlmICghc3RyY21wKGRmaWxlW05ERklMRVMgKyBmXS5kZmlsZV9uYW1lLCBmbmFt
ZSArIDEpKQoJCXsKCQkgIHJmaWxlW2ZdLnJmaWxlX3BvcyA9IHJmaWxlW2ZdLnJmaWxlX2VuZDsK
CQkgIHJldHVybiBkZmlsZSArIE5ERklMRVMgKyBmOwoJCX0KCSAgICB9CgkgIHJldHVybiBOVUxM
OwoJfQogICAgICBlbHNlCgl7CgkgIGZwcmludGYoZGFwX2VyciwgIihkZm9wZW4pIGJhZCBtb2Rl
OiAlc1xuIiwgbW9kZSk7CgkgIGV4aXQoMSk7Cgl9CiAgICB9CiAgZm9yIChmID0gMDsgZiA8IE5E
RklMRVM7IGYrKykKICAgIHsKICAgICAgaWYgKCFkZmlsZVtmXS5kZmlsZV9kaXNrKQoJewoJICBp
ZiAobW9kZVsxXSA9PSAnZicpCgkgICAgewoJICAgICAgdHJ1ZW1vZGVbMF0gPSBtb2RlWzBdOwoJ
ICAgICAgdHJ1ZW1vZGVbMV0gPSAnXDAnOwoJICAgICAgZGZpbGVbZl0uZGZpbGVfZGlzayA9IGZv
cGVuKGZuYW1lLCB0cnVlbW9kZSk7CgkgICAgfQoJICBlbHNlCgkgICAgZGZpbGVbZl0uZGZpbGVf
ZGlzayA9IGRvcGVuKGZuYW1lLCBtb2RlKTsKCSAgaWYgKGRmaWxlW2ZdLmRmaWxlX2Rpc2spCgkg
ICAgewoJICAgICAgZGZpbGVbZl0uZGZpbGVfbmFtZSA9CgkJZGFwX21hbGxvYyhzdHJsZW4oZm5h
bWUpICsgMSwgImRmb3BlbjogZGZpbGVbZl0uZGZpbGVfbmFtZSIpOwoJICAgICAgc3RyY3B5KGRm
aWxlW2ZdLmRmaWxlX25hbWUsIGZuYW1lKTsKCSAgICAgIHJldHVybiBkZmlsZSArIGY7CgkgICAg
fQoJICBlbHNlCgkgICAgcmV0dXJuIE5VTEw7Cgl9CiAgICB9CiAgcmV0dXJuIE5VTEw7Cn0KCnN0
YXRpYyB2b2lkIGRmY2xvc2UoREZJTEUgKmZwKQp7CiAgaWYgKGZwLT5kZmlsZV9kaXNrKQogICAg
ewogICAgICBmY2xvc2UoZnAtPmRmaWxlX2Rpc2spOwogICAgICBmcC0+ZGZpbGVfZGlzayA9IE5V
TEw7CiAgICB9CiAgZWxzZQogICAgZnAtPmRmaWxlX3JhbS0+cmZpbGVfcG9zID0gZnAtPmRmaWxl
X3JhbS0+cmZpbGVfc3RyOwp9CgpzdGF0aWMgaW50IGRnZXRjKERGSUxFICpmcCkKewogIGludCBj
OwoKICBpZiAoZnAtPmRmaWxlX2Rpc2spCiAgICBjID0gZ2V0YyhmcC0+ZGZpbGVfZGlzayk7CiAg
ZWxzZSBpZiAoZnAtPmRmaWxlX3JhbS0+cmZpbGVfcG9zIDwgZnAtPmRmaWxlX3JhbS0+cmZpbGVf
ZW5kKQogICAgYyA9ICpmcC0+ZGZpbGVfcmFtLT5yZmlsZV9wb3MrKzsKICBlbHNlCiAgICBjID0g
RU9GOwogIHJldHVybiBjOwp9CgpzdGF0aWMgdm9pZCB1bmRnZXRjKGludCBjLCBERklMRSAqZnAp
CnsKICBpZiAoZnAtPmRmaWxlX2Rpc2spCiAgICB1bmdldGMoYywgZnAtPmRmaWxlX2Rpc2spOwog
IGVsc2UgaWYgKGZwLT5kZmlsZV9yYW0tPnJmaWxlX3BvcyA+IGZwLT5kZmlsZV9yYW0tPnJmaWxl
X3N0cikKICAgIHsKICAgICAgLS1mcC0+ZGZpbGVfcmFtLT5yZmlsZV9wb3M7CiAgICAgICpmcC0+
ZGZpbGVfcmFtLT5yZmlsZV9wb3MgPSBjOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgZnByaW50
ZihkYXBfZXJyLCAiKHVuZGdldGMpIGNhbid0IHVuZ2V0IHBhc3QgYmVnaW5uaW5nIG9mIGZpbGUg
JXNcbiIsCgkgICAgICBmcC0+ZGZpbGVfbmFtZSk7CiAgICAgIGV4aXQoMSk7CiAgICB9Cn0KCnZv
aWQgZGFwX3B1dGMoaW50IGMsIERGSUxFICpmcCkKewogIGlmIChmcC0+ZGZpbGVfZGlzaykKICAg
IHB1dGMoYywgZnAtPmRmaWxlX2Rpc2spOwogIGVsc2UgaWYgKGZwLT5kZmlsZV9yYW0tPnJmaWxl
X3BvcyA8IGZwLT5kZmlsZV9yYW0tPnJmaWxlX3N0ciArIGRhcF9yZmlsZXNpemUpCiAgICB7CiAg
ICAgICpmcC0+ZGZpbGVfcmFtLT5yZmlsZV9wb3MrKyA9IGM7CiAgICAgIGZwLT5kZmlsZV9yYW0t
PnJmaWxlX2VuZCsrOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgZnByaW50ZihkYXBfZXJyLCAi
KGRhcF9wdXRjKSB0b28gbWFueSBjaGFyYWN0ZXJzOiAlc1xuIiwKCSAgICAgIGZwLT5kZmlsZV9u
YW1lKTsKICAgICAgZXhpdCgxKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgZHB1dHMoY2hhciAqcywg
Y2hhciAqc3VmZiwgREZJTEUgKmZwKQp7CiAgaWYgKGZwLT5kZmlsZV9kaXNrKQogICAgewogICAg
ICBmcHV0cyhzLCBmcC0+ZGZpbGVfZGlzayk7CiAgICAgIGZwdXRzKHN1ZmYsIGZwLT5kZmlsZV9k
aXNrKTsKICAgIH0KICBlbHNlCiAgICB7CiAgICAgIHdoaWxlICgqcykKCWRhcF9wdXRjKCpzKyss
IGZwKTsKICAgICAgd2hpbGUgKCpzdWZmKQoJZGFwX3B1dGMoKnN1ZmYrKywgZnApOwogICAgfQp9
CgpzdGF0aWMgdm9pZCBkcHV0aShpbnQgaSwgREZJTEUgKmZwKQp7CiAgc3RhdGljIGNoYXIgKmlz
dHIgPSBOVUxMOwogIGludCBzOwoKICBpZiAoIWlzdHIpCiAgICBpc3RyID0gZGFwX21hbGxvYyhk
YXBfaW50bGVuICsgMSwgImRwdXRpOiBpc3RyIik7CiAgaWYgKGZwLT5kZmlsZV9kaXNrKQogICAg
ZnByaW50ZihmcC0+ZGZpbGVfZGlzaywgIiVkIiwgaSk7CiAgZWxzZQogICAgewogICAgICBzcHJp
bnRmKGlzdHIsICIlZCIsIGkpOwogICAgICBmb3IgKHMgPSAwOyBzIDwgc3RybGVuKGlzdHIpOyBz
KyspCglkYXBfcHV0Yyhpc3RyW3NdLCBmcCk7CiAgICB9Cn0KCnN0YXRpYyB2b2lkIGRmbHVzaChE
RklMRSAqZnApCnsKICBmZmx1c2goZnAtPmRmaWxlX2Rpc2spOwp9CgovKiBBcHBlbmQgb3IgcmVw
bGFjZSBzdWZmaXguIElmIHN1ZmZbMF0gPT0gJzwnLCB0aGVuIHN1ZmYgcmVwbGFjZXMKICogY2hh
cmFjdGVycyBmb2xsb3dpbmcgbGFzdCAnLicsIG90aGVyd2lzZSBpcyBhcHBlbmRlZAogKi8Kdm9p
ZCBkYXBfc3VmZml4KGNoYXIgZHN0W10sIGNoYXIgc3JjW10sIGNoYXIgc3VmZltdKQp7CiAgaW50
IG4sIHM7CgogIGZvciAobiA9IDA7IHNyY1tuXTsgbisrKQogICAgZHN0W25dID0gc3JjW25dOwog
IGlmIChzdWZmWzBdID09ICc8JykKICAgIHsKICAgICAgd2hpbGUgKC0tbiA+PSAwKQoJewoJICBp
ZiAoZHN0W25dID09ICcuJykKCSAgICBicmVhazsKCX0KICAgICAgaWYgKG4gPCAwKQoJewoJICBm
cHJpbnRmKGRhcF9lcnIsICIoZGFwX3N1ZmZpeCkgc291cmNlIG5hbWUgaGFzIG5vICcuJzogJXNc
biIsIHNyYyk7CgkgIGV4aXQoMSk7Cgl9CiAgICAgIG4rKzsKICAgICAgcyA9IDE7CiAgICB9CiAg
ZWxzZQogICAgcyA9IDA7CiAgZm9yICggOyBzdWZmW3NdOyBzKyspCiAgICBkc3RbbisrXSA9IHN1
ZmZbc107CiAgZHN0W25dID0gJ1wwJzsKfQoKLyogZ2V0IHRoZSBpbmRleCBvZiBhIHZhcmlhYmxl
ICovCmludCBkYXBfdmFybnVtKGNoYXIgKnZuYW1lKQp7CiAgaW50IHY7CiAgaW50IG5vbmJsYW5r
OyAvKiBudW1iZXIgb2Ygbm9uLWJsYW5rIGNoYXJhY3RlcnMgaW4gdm5hbWUgKi8KCiAgd2hpbGUg
KCp2bmFtZSA9PSAnICcpCiAgICB2bmFtZSsrOwogIGZvciAobm9uYmxhbmsgPSAwOyB2bmFtZVtu
b25ibGFua10gJiYgdm5hbWVbbm9uYmxhbmtdICE9ICcgJzsgbm9uYmxhbmsrKykKICAgIDsKICBp
ZiAodm5hbWUpCiAgICB7CiAgICAgIGZvciAodiA9IDA7IHYgPCBkYXBfb2JzW2RhcF9vbm9dLmRv
X252YXI7IHYrKykKCXsKCSAgaWYgKCFzdHJuY21wKHZuYW1lLCBkYXBfb2JzW2RhcF9vbm9dLmRv
X25hbVt2XSwgbm9uYmxhbmspICYmCgkgICAgICAhZGFwX29ic1tkYXBfb25vXS5kb19uYW1bdl1b
bm9uYmxhbmtdKQoJICAgIHJldHVybiB2OwoJfQogICAgfQogIHJldHVybiAtMTsKfQoKaW50IGRh
cF9hcnJudW0oY2hhciB2bmFtZVtdLCBpbnQgKmRpbSkKewogIGludCB2OwogIGludCBuOwogIGlu
dCBkOwoKICBmb3IgKHYgPSAwOyB2IDwgZGFwX29ic1tkYXBfb25vXS5kb19udmFyOyB2KyspCiAg
ICB7CiAgICAgIGZvciAobiA9IDA7IHZuYW1lW25dICYmIHZuYW1lW25dID09IGRhcF9vYnNbZGFw
X29ub10uZG9fbmFtW3ZdW25dOyBuKyspCgk7CiAgICAgIGlmICghdm5hbWVbbl0gJiYgZGFwX29i
c1tkYXBfb25vXS5kb19uYW1bdl1bbl0gPT0gJ1snKQoJewoJICBmb3IgKGQgPSAxOyB2ICsgZCA8
IGRhcF9vYnNbZGFwX29ub10uZG9fbnZhcjsgZCsrKQoJICAgIHsKCSAgICAgIGZvciAobiA9IDA7
IHZuYW1lW25dICYmCgkJICAgICB2bmFtZVtuXSA9PSBkYXBfb2JzW2RhcF9vbm9dLmRvX25hbVt2
ICsgZF1bbl07IG4rKykKCQk7CgkgICAgICBpZiAodm5hbWVbbl0gfHwgZGFwX29ic1tkYXBfb25v
XS5kb19uYW1bdiArIGRdW25dICE9ICdbJykKCQlicmVhazsKCSAgICB9CgkgICpkaW0gPSBkOwoJ
ICByZXR1cm4gdjsKCX0KICAgIH0KICByZXR1cm4gLTE7Cn0KCnN0YXRpYyBpbnQgZGFwX2dldGxp
bmUoREZJTEUgKmZwLCBjaGFyICpsaW5lKQp7CiAgaW50IGw7CiAgaW50IGM7CiAgaW50IGNjOwoK
ICBjID0gRU9GOwogIHN3aXRjaCAoaW50eXBlKQogICAgewogICAgY2FzZSBURVhUOgogICAgY2Fz
ZSBEU0VUOgogICAgICBmb3IgKGwgPSAwOyAoYyA9IGRnZXRjKGZwKSkgIT0gRU9GOyApCgl7Cgkg
IGlmIChjID09ICdcbicpCgkgICAgYnJlYWs7CgkgIGVsc2UgaWYgKGMgPT0gJ1xyJykKCSAgICB7
CgkgICAgICBpZiAoKGNjID0gZGdldGMoZnApKSAhPSAnXG4nKQoJCXVuZGdldGMoY2MsIGZwKTsK
CSAgICAgIGJyZWFrOwoJICAgIH0KCSAgaWYgKGwgPCBkYXBfbGluZWxlbikKCSAgICBsaW5lW2wr
K10gPSBjOwoJICBlbHNlCgkgICAgewoJICAgICAgbGluZVtsXSA9ICdcMCc7CgkgICAgICBmcHJp
bnRmKGRhcF9lcnIsICIoZGFwX2dldGxpbmUpIGxpbmUgdG9vIGxvbmc6XG4lc1xuIiwgbGluZSk7
CgkgICAgICBleGl0KDEpOwoJICAgIH0KCX0KICAgICAgbGluZVtsXSA9ICdcMCc7CiAgICAgIGJy
ZWFrOwogICAgY2FzZSBEQkFTRToKICAgICAgZGdldGMoZnApOyAgICAgIC8qIGR1bXAgc3BhY2Ug
Ki8KICAgICAgZm9yIChsID0gMDsgbCA8IGlubGVuOyBsKyspCgl7CgkgIGlmICgoYyA9IGRnZXRj
KGZwKSkgPT0gRU9GKQoJICAgIGJyZWFrOwoJICBlbHNlCgkgICAgbGluZVtsXSA9IGM7Cgl9CiAg
ICAgIGlmIChsIDwgaW5sZW4pCglsID0gMDsKICAgICAgbGluZVtsXSA9ICdcMCc7CiAgICAgIGJy
ZWFrOwogICAgZGVmYXVsdDoKICAgICAgZnByaW50ZihkYXBfZXJyLCAiKGRhcF9nZXRsaW5lKSBi
YWQgaW5maWxlIHR5cGU6ICVkXG4iLCBpbnR5cGUpOwogICAgICBleGl0KDEpOwogICAgfQogIGlm
ICghbCAmJiBjID09IEVPRikKICAgIHJldHVybiAtMTsKICByZXR1cm4gbDsKfQp2b2lkIGRhcF9z
d2FwKCkKewogIGludCBpdjsJCS8qIGluZGV4IG9mIGlucHV0IHZhcmlhYmxlICovCiAgZG91Ymxl
IGRibHRtcDsJLyogdGVtcCBmb3Igc3dhcHBpbmcgZG91YmxlcyAqLwogIGludCBpbnR0bXA7CS8q
IHRlbXAgZm9yIHN3YXBwaW5nIGludCAqLwogIGNoYXIgc3RydG1wOwkvKiB0ZW1wIGNoYXIgZm9y
IHN3YXBwaW5nIHN0cmluZ3MgKi8KICBpbnQgczsJCS8qIGluZGV4IHRvIHN0cmluZ3MgKi8KICBj
aGFyICpzbywgKnNwOwkvKiBwb2ludGVycyB0byBzdHJpbmdzIGZvciBvYnMsIHByZXYgKi8KCiAg
Zm9yIChpdiA9IDA7IGl2IDwgZGFwX29ic1tkYXBfb25vXS5kb19pdmFyOyBpdisrKQogICAgewog
ICAgICBzd2l0Y2ggKGRhcF9vYnNbZGFwX29ub10uZG9fbGVuW2RhcF9vYnNbZGFwX29ub10uZG9f
aW5baXZdXSkKCXsKCWNhc2UgREJMOgoJICBkYmx0bXAgPSBkYXBfb2JzW2RhcF9vbm9dLmRvX2Ri
bFtkYXBfb2JzW2RhcF9vbm9dLmRvX2luW2l2XV07CgkgIGRhcF9vYnNbZGFwX29ub10uZG9fZGJs
W2RhcF9vYnNbZGFwX29ub10uZG9faW5baXZdXSA9CgkgICAgZGFwX3ByZXZbZGFwX29ub10uZG9f
ZGJsW2RhcF9vYnNbZGFwX29ub10uZG9faW5baXZdXTsKCSAgZGFwX3ByZXZbZGFwX29ub10uZG9f
ZGJsW2RhcF9vYnNbZGFwX29ub10uZG9faW5baXZdXSA9IGRibHRtcDsKCSAgaWYgKGRhcF9vYnNb
ZGFwX29ub10uZG9fZGxbZGFwX29ic1tkYXBfb25vXS5kb19pbltpdl1dKQoJICAgICpkYXBfb2Jz
W2RhcF9vbm9dLmRvX2RsW2RhcF9vYnNbZGFwX29ub10uZG9faW5baXZdXSA9CgkgICAgICBkYXBf
b2JzW2RhcF9vbm9dLmRvX2RibFtkYXBfb2JzW2RhcF9vbm9dLmRvX2luW2l2XV07CgkgIGJyZWFr
OwoJY2FzZSBJTlQ6CgkgIGludHRtcCA9IGRhcF9vYnNbZGFwX29ub10uZG9faW50W2RhcF9vYnNb
ZGFwX29ub10uZG9faW5baXZdXTsKCSAgZGFwX29ic1tkYXBfb25vXS5kb19pbnRbZGFwX29ic1tk
YXBfb25vXS5kb19pbltpdl1dID0KCSAgICBkYXBfcHJldltkYXBfb25vXS5kb19pbnRbZGFwX29i
c1tkYXBfb25vXS5kb19pbltpdl1dOwoJICBkYXBfcHJldltkYXBfb25vXS5kb19pbnRbZGFwX29i
c1tkYXBfb25vXS5kb19pbltpdl1dID0gaW50dG1wOwoJICBpZiAoZGFwX29ic1tkYXBfb25vXS5k
b19pbFtkYXBfb2JzW2RhcF9vbm9dLmRvX2luW2l2XV0pCgkgICAgKmRhcF9vYnNbZGFwX29ub10u
ZG9faWxbZGFwX29ic1tkYXBfb25vXS5kb19pbltpdl1dID0KCSAgICAgIGRhcF9vYnNbZGFwX29u
b10uZG9faW50W2RhcF9vYnNbZGFwX29ub10uZG9faW5baXZdXTsKCSAgYnJlYWs7CglkZWZhdWx0
OgoJICBzbyA9IGRhcF9vYnNbZGFwX29ub10uZG9fc3RyW2RhcF9vYnNbZGFwX29ub10uZG9faW5b
aXZdXTsKCSAgc3AgPSBkYXBfcHJldltkYXBfb25vXS5kb19zdHJbZGFwX29ic1tkYXBfb25vXS5k
b19pbltpdl1dOwoJICBmb3IgKHMgPSAwOyBzIDwgZGFwX29ic1tkYXBfb25vXS5kb19sZW5bZGFw
X29ic1tkYXBfb25vXS5kb19pbltpdl1dOyBzKyspCgkgICAgewoJICAgICAgc3RydG1wID0gc29b
c107CgkgICAgICBzb1tzXSA9IHNwW3NdOwoJICAgICAgc3Bbc10gPSBzdHJ0bXA7CgkgICAgfQoJ
ICBicmVhazsKCX0KICAgIH0KfQoKdm9pZCBkYXBfc2F2ZSgpCnsKICBpbnQgaXY7CgogIGZvciAo
aXYgPSAwOyBpdiA8IGRhcF9vYnNbZGFwX29ub10uZG9faXZhcjsgaXYrKykKICAgIHsKICAgICAg
c3dpdGNoIChkYXBfb2JzW2RhcF9vbm9dLmRvX2xlbltkYXBfb2JzW2RhcF9vbm9dLmRvX2luW2l2
XV0pCgl7CgljYXNlIERCTDoKCSAgZG9zYXZlLmRvX2RibFtkYXBfb2JzW2RhcF9vbm9dLmRvX2lu
W2l2XV0gPQoJICAgIGRhcF9vYnNbZGFwX29ub10uZG9fZGJsW2RhcF9vYnNbZGFwX29ub10uZG9f
aW5baXZdXTsKCSAgYnJlYWs7CgljYXNlIElOVDoKCSAgZG9zYXZlLmRvX2ludFtkYXBfb2JzW2Rh
cF9vbm9dLmRvX2luW2l2XV0gPQoJICAgIGRhcF9vYnNbZGFwX29ub10uZG9faW50W2RhcF9vYnNb
ZGFwX29ub10uZG9faW5baXZdXTsKCSAgYnJlYWs7CglkZWZhdWx0OgoJICBpZiAoZG9zYXZlLmRv
X3N0cltkYXBfb2JzW2RhcF9vbm9dLmRvX2luW2l2XV0pCgkgICAgZGFwX2ZyZWUoZG9zYXZlLmRv
X3N0cltkYXBfb2JzW2RhcF9vbm9dLmRvX2luW2l2XV0sCgkJICAgICAiZGFwX3NhdmU6IGRvc2F2
ZS5kb19zdHJbZGFwX29ic1tkYXBfb25vXS5kb19pbltpdl1dIik7CgkgIGRvc2F2ZS5kb19zdHJb
ZGFwX29ic1tkYXBfb25vXS5kb19pbltpdl1dID0KCSAgICBkYXBfbWFsbG9jKGRhcF9vYnNbZGFw
X29ub10uZG9fbGVuW2RhcF9vYnNbZGFwX29ub10uZG9faW5baXZdXSArIDEsCgkJICAgICAgICJk
YXBfc2F2ZTogZGFwX29ic1tkYXBfb25vXS5kb19uYW1bZGFwX29ic1tkYXBfb25vXS5kb19pbltp
dl1dIik7CgkgIHN0cm5jcHkoZG9zYXZlLmRvX3N0cltkYXBfb2JzW2RhcF9vbm9dLmRvX2luW2l2
XV0sCgkJICBkYXBfb2JzW2RhcF9vbm9dLmRvX3N0cltkYXBfb2JzW2RhcF9vbm9dLmRvX2luW2l2
XV0sCgkJICBkYXBfb2JzW2RhcF9vbm9dLmRvX2xlbltkYXBfb2JzW2RhcF9vbm9dLmRvX2luW2l2
XV0gKyAxKTsKCSAgYnJlYWs7Cgl9CiAgICB9Cn0KCnZvaWQgZGFwX3Jlc3QoKQp7CiAgaW50IGl2
OwoKICBmb3IgKGl2ID0gMDsgaXYgPCBkYXBfb2JzW2RhcF9vbm9dLmRvX2l2YXI7IGl2KyspCiAg
ICB7CiAgICAgIHN3aXRjaCAoZGFwX29ic1tkYXBfb25vXS5kb19sZW5bZGFwX29ic1tkYXBfb25v
XS5kb19pbltpdl1dKQoJewoJY2FzZSBEQkw6CgkgIGRhcF9vYnNbZGFwX29ub10uZG9fZGJsW2Rh
cF9vYnNbZGFwX29ub10uZG9faW5baXZdXSA9CgkgICAgZG9zYXZlLmRvX2RibFtkYXBfb2JzW2Rh
cF9vbm9dLmRvX2luW2l2XV07CgkgIGlmIChkYXBfb2JzW2RhcF9vbm9dLmRvX2RsW2RhcF9vYnNb
ZGFwX29ub10uZG9faW5baXZdXSkKCSAgICAqZGFwX29ic1tkYXBfb25vXS5kb19kbFtkYXBfb2Jz
W2RhcF9vbm9dLmRvX2luW2l2XV0gPQoJICAgICAgZGFwX29ic1tkYXBfb25vXS5kb19kYmxbZGFw
X29ic1tkYXBfb25vXS5kb19pbltpdl1dOwoJICBicmVhazsKCWNhc2UgSU5UOgoJICBkYXBfb2Jz
W2RhcF9vbm9dLmRvX2ludFtkYXBfb2JzW2RhcF9vbm9dLmRvX2luW2l2XV0gPQoJICAgIGRvc2F2
ZS5kb19pbnRbZGFwX29ic1tkYXBfb25vXS5kb19pbltpdl1dOwoJICBpZiAoZGFwX29ic1tkYXBf
b25vXS5kb19pbFtkYXBfb2JzW2RhcF9vbm9dLmRvX2luW2l2XV0pCgkgICAgKmRhcF9vYnNbZGFw
X29ub10uZG9faWxbZGFwX29ic1tkYXBfb25vXS5kb19pbltpdl1dID0KCSAgICAgIGRhcF9vYnNb
ZGFwX29ub10uZG9faW50W2RhcF9vYnNbZGFwX29ub10uZG9faW5baXZdXTsKCSAgYnJlYWs7Cglk
ZWZhdWx0OgoJICBzdHJuY3B5KGRhcF9vYnNbZGFwX29ub10uZG9fc3RyW2RhcF9vYnNbZGFwX29u
b10uZG9faW5baXZdXSwKCQkgIGRvc2F2ZS5kb19zdHJbZGFwX29ic1tkYXBfb25vXS5kb19pbltp
dl1dLAoJCSAgZGFwX29ic1tkYXBfb25vXS5kb19sZW5bZGFwX29ic1tkYXBfb25vXS5kb19pbltp
dl1dICsgMSk7CgkgIGJyZWFrOwoJfQogICAgfQp9Cgpsb25nIGRhcF9mdGVsbChERklMRSAqZnAp
CnsKICBpZiAoZnAtPmRmaWxlX2Rpc2spCiAgICByZXR1cm4gZnRlbGwoZnAtPmRmaWxlX2Rpc2sp
OwogIHJldHVybiBmcC0+ZGZpbGVfcmFtLT5yZmlsZV9wb3MgLSBmcC0+ZGZpbGVfcmFtLT5yZmls
ZV9zdHI7Cn0KCnZvaWQgZGFwX21hcmsoKQp7CiAgZmlsZXBvc1tkYXBfb25vXSA9IGRhcF9mdGVs
bChkYXBfaW5bZGFwX29ub10pOwp9CgpzdGF0aWMgdm9pZCBkZnNlZWsoREZJTEUgKmZwLCBsb25n
IHBvcywgaW50IG1vZGUpCnsKICBpZiAoZnAtPmRmaWxlX2Rpc2spCiAgICBmc2VlayhmcC0+ZGZp
bGVfZGlzaywgcG9zLCBtb2RlKTsKICBlbHNlCiAgICB7CiAgICAgIGlmIChmcC0+ZGZpbGVfcmFt
LT5yZmlsZV9zdHIgKyBwb3MgPCBmcC0+ZGZpbGVfcmFtLT5yZmlsZV9lbmQpCglmcC0+ZGZpbGVf
cmFtLT5yZmlsZV9wb3MgPSBmcC0+ZGZpbGVfcmFtLT5yZmlsZV9zdHIgKyBwb3M7CiAgICAgIGVs
c2UKCXsKCSAgZnByaW50ZihkYXBfZXJyLCAiKGRmc2Vlaykgc2VlayBwYXN0IGVuZCBvZiByYW1m
aWxlICVzXG4iLAoJCSAgZnAtPmRmaWxlX25hbWUpOwoJICBleGl0KDEpOwoJfQogICAgfQp9Cgp2
b2lkIGRhcF9yZXdpbmQoKQp7CiAgaWYgKGRhcF9pbltkYXBfb25vXSkKICAgIHsKICAgICAgaWYg
KGZpbGVwb3NbZGFwX29ub10gPCBkYXBfZnRlbGwoZGFwX2luW2RhcF9vbm9dKSkKCWVvZltkYXBf
b25vXSA9IDA7CiAgICAgIGRmc2VlayhkYXBfaW5bZGFwX29ub10sIGZpbGVwb3NbZGFwX29ub10s
IFNFRUtfU0VUKTsKICAgICAgZGFwX29ic1tkYXBfb25vXS5kb192YWxpZCA9IDA7CiAgICB9CiAg
ZWxzZQogICAgewogICAgICBmcHJpbnRmKGRhcF9lcnIsICIoZGFwX3Jld2luZCkgZmlsZSAoJWQp
IGlzIGNsb3NlZC5cbiIsIGRhcF9vbm8pOwogICAgICBleGl0KDEpOwogICAgfQp9CgppbnQgZGFw
X2JsYW5rKGNoYXIgc3RyW10pCnsKICBpbnQgYjsKCiAgZm9yIChiID0gMDsgc3RyW2JdID09ICcg
JzsgYisrKQogICAgOwogIGlmIChzdHJbYl0pCiAgICByZXR1cm4gMDsKICByZXR1cm4gMTsKfQoK
dm9pZCBza2lwKGludCBubGluZXMpCnsKICBjaGFyICpsaW5lOwoKICBsaW5lID0gZGFwX21hbGxv
YyhkYXBfbGluZWxlbiArIDEsICJza2lwOiBsaW5lIik7CiAgd2hpbGUgKC0tbmxpbmVzID49IDAp
CiAgICB7CiAgICAgIGlmICghZGFwX2luW2RhcF9vbm9dIHx8IGVvZltkYXBfb25vXSkKCXsKCSAg
ZnByaW50ZihkYXBfZXJyLCAiKHNraXApIHRyaWVkIHRvIHJlYWQgcGFzdCBlbmQgb2YgZmlsZSAo
JWQpLlxuIiwKCQkgIGRhcF9vbm8pOwoJICBleGl0KDEpOwoJfQogICAgICBpZiAoZGFwX2dldGxp
bmUoZGFwX2luW2RhcF9vbm9dLCBsaW5lKSA8IDApCgllb2ZbZGFwX29ub10gPSAxOwogICAgICBs
aW5lbm9bZGFwX29ub10rKzsKICAgIH0KICBkYXBfZnJlZShsaW5lLCAic2tpcDogbGluZSIpOwp9
CgppbnQgc3RlcCgpCnsKICBzdGF0aWMgaW50IHN0ZXBpbml0ID0gMDsgLyogbmVlZCB0byBpbml0
aWFsaXplICJsaW5lIiBhbmQgInZhbHVlIiAqLwogIHN0YXRpYyBjaGFyICpsaW5lID0gTlVMTDsg
LyogbGluZSByZWFkICovCiAgc3RhdGljIGNoYXIgKnZhbHVlID0gTlVMTDsKICBpbnQgdjsJCQkJ
LyogaW5kZXggdG8gdmFyaWFibGVzICovCiAgaW50IGw7CiAgaW50IGk7CiAgaW50IGl2OwogIGlu
dCBucmVhZDsJLyogbnVtYmVyIG9mIGNoYXJzIHJlYWQgYnkgZGFwX2dldGxpbmUgKi8KCiAgaWYg
KCFzdGVwaW5pdCkKICAgIHsKICAgICAgc3RlcGluaXQgPSAxOwogICAgICBsaW5lID0gZGFwX21h
bGxvYyhkYXBfbGluZWxlbiArIDEsICJzdGVwOiBsaW5lIik7CiAgICAgIHZhbHVlID0gZGFwX21h
bGxvYyhkYXBfbGluZWxlbiArIDEsICJzdGVwOiB2YWx1ZSIpOwogICAgfQogIGlmICghZGFwX2lu
W2RhcF9vbm9dIHx8IGVvZltkYXBfb25vXSkKICAgIHsKICAgICAgZnByaW50ZihkYXBfZXJyLCAi
KHN0ZXApIEVSUk9SOiB0cmllZCB0byByZWFkIHBhc3QgZW5kIG9mIGZpbGUgKCVzKS5cbiIsCgkg
ICAgICAoZGFwX2luW2RhcF9vbm9dID8gZGFwX2luW2RhcF9vbm9dLT5kZmlsZV9uYW1lIDogIj8i
KSk7CiAgICAgIGV4aXQoMSk7CiAgICB9CiAgLyogY29weSBtb3N0IHJlY2VudGx5IHJlYWQgbGlu
ZSB0byBwcmV2ICovCiAgZm9yIChpdiA9IDA7IGl2IDwgZGFwX29ic1tkYXBfb25vXS5kb19pdmFy
OyBpdisrKQogICAgewogICAgICBzd2l0Y2ggKGRhcF9vYnNbZGFwX29ub10uZG9fbGVuW2RhcF9v
YnNbZGFwX29ub10uZG9faW5baXZdXSkKCXsKCWNhc2UgREJMOgoJICBkYXBfcHJldltkYXBfb25v
XS5kb19kYmxbZGFwX29ic1tkYXBfb25vXS5kb19pbltpdl1dID0KCSAgICBkYXBfb2JzW2RhcF9v
bm9dLmRvX2RibFtkYXBfb2JzW2RhcF9vbm9dLmRvX2luW2l2XV07CgkgIGJyZWFrOwoJY2FzZSBJ
TlQ6CgkgIGRhcF9wcmV2W2RhcF9vbm9dLmRvX2ludFtkYXBfb2JzW2RhcF9vbm9dLmRvX2luW2l2
XV0gPQoJICAgIGRhcF9vYnNbZGFwX29ub10uZG9faW50W2RhcF9vYnNbZGFwX29ub10uZG9faW5b
aXZdXTsKCSAgYnJlYWs7CglkZWZhdWx0OgoJICBzdHJuY3B5KGRhcF9wcmV2W2RhcF9vbm9dLmRv
X3N0cltkYXBfb2JzW2RhcF9vbm9dLmRvX2luW2l2XV0sCgkJICBkYXBfb2JzW2RhcF9vbm9dLmRv
X3N0cltkYXBfb2JzW2RhcF9vbm9dLmRvX2luW2l2XV0sCgkJICBkYXBfb2JzW2RhcF9vbm9dLmRv
X2xlbltkYXBfb2JzW2RhcF9vbm9dLmRvX2luW2l2XV0gKyAxKTsKCX0KICAgIH0KICBkYXBfcHJl
dltkYXBfb25vXS5kb192YWxpZCA9IGRhcF9vYnNbZGFwX29ub10uZG9fdmFsaWQ7CiAgaWYgKChu
cmVhZCA9IGRhcF9nZXRsaW5lKGRhcF9pbltkYXBfb25vXSwgbGluZSkpIDw9IDApCiAgICB7CiAg
ICAgIGVvZltkYXBfb25vXSA9IDE7CiAgICAgIGRhcF9vYnNbZGFwX29ub10uZG9fdmFsaWQgPSAw
OwogICAgICBmcHJpbnRmKHN0ZGVyciwgIihzdGVwKSAlZCBsaW5lcyByZWFkIGZyb20gJXNcbiIs
CgkgICAgICBsaW5lbm9bZGFwX29ub10gLSAxLCBkYXBfaW5bZGFwX29ub10tPmRmaWxlX25hbWUp
OwogICAgICBpZiAoIW5yZWFkKQoJZnB1dHMoIihzdGVwKSBXQVJOSU5HOiB0ZXJtaW5hdGVkIG9u
IG51bGwgbGluZVxuIiwgc3RkZXJyKTsKICAgICAgZmZsdXNoKHN0ZGVycik7CiAgICAgIGZwcmlu
dGYoZGFwX2xvZywgIihzdGVwKSAlZCBsaW5lcyByZWFkIGZyb20gICVzXG4iLAoJICAgICAgbGlu
ZW5vW2RhcF9vbm9dIC0gMSwgZGFwX2luW2RhcF9vbm9dLT5kZmlsZV9uYW1lKTsKICAgICAgaWYg
KCFucmVhZCkKCWZwdXRzKCIoc3RlcCkgV0FSTklORzogdGVybWluYXRlZCBvbiBudWxsIGxpbmVc
biIsIGRhcF9sb2cpOwogICAgICByZXR1cm4gMDsKICAgIH0KICBpZiAobmZpZWxkcyAmJiBkYXBf
b2JzW2RhcF9vbm9dLmRvX2l2YXIgIT0gbmZpZWxkcykKICAgIHsKICAgICAgZnByaW50ZihkYXBf
ZXJyLAoJICAgICAgIihzdGVwKSBFUlJPUjogbnVtYmVyIG9mIGlucHV0IHZhcmlhYmxlcyAlZCBk
aWZmZXJlbnQgZnJvbSBudW1iZXIgb2YgZmllbGRzIHNwZWNpZmllZCAlZCBmb3IgJXMuXG4iLAoJ
ICAgICAgZGFwX29ic1tkYXBfb25vXS5kb19pdmFyLCBuZmllbGRzLCBkYXBfaW5bZGFwX29ub10t
PmRmaWxlX25hbWUpOwogICAgICBleGl0KDEpOwogICAgfQogIC8qIGNvbnZlcnQgaW5wdXQgdmFy
aWFibGVzICovCiAgZm9yICh2ID0gMCwgbCA9IDA7IHYgPCBkYXBfb2JzW2RhcF9vbm9dLmRvX2l2
YXI7IHYrKykKICAgIHsKICAgICAgaWYgKG5maWVsZHMpCgl7CgkgIGZvciAoaSA9IDA7IGxpbmVb
bCArIGldICYmIGkgPCBmaWVsZHdkW3ZdOyBpKyspCgkgICAgdmFsdWVbaV0gPSBsaW5lW2wgKyBp
XTsKCSAgdmFsdWVbaV0gPSAnXDAnOwoJICBpZiAoaSA8IGZpZWxkd2Rbdl0pCgkgICAgewoJICAg
ICAgZnByaW50ZihkYXBfbG9nLAoJCSAgICAgICIoc3RlcCAoJXM6JWQpKSBFUlJPUjogZ290ICVk
IG9mICVkIGNoYXJhY3RlcnMgZm9yIGZpeGVkIGxlbmd0aCBmaWVsZCBmb3IgJXM6ICVzXG4iLAoJ
CSAgICAgIGRhcF9pbltkYXBfb25vXS0+ZGZpbGVfbmFtZSwKCQkgICAgICBsaW5lbm9bZGFwX29u
b10sIGksIGZpZWxkd2Rbdl0sCgkJICAgICAgZGFwX29ic1tkYXBfb25vXS5kb19uYW1bZGFwX29i
c1tkYXBfb25vXS5kb19pblt2XV0sCgkJICAgICAgdmFsdWUpOwoJICAgICAgZnByaW50ZihkYXBf
ZXJyLAoJCSAgICAgICIoc3RlcCAoJXM6JWQpKSBFUlJPUjogZ290ICVkIG9mICVkIGNoYXJhY3Rl
cnMgZm9yIGZpeGVkIGxlbmd0aCBmaWVsZCBmb3IgJXM6ICVzXG4iLAoJCSAgICAgIGRhcF9pbltk
YXBfb25vXS0+ZGZpbGVfbmFtZSwKCQkgICAgICBsaW5lbm9bZGFwX29ub10sIGksIGZpZWxkd2Rb
dl0sCgkJICAgICAgZGFwX29ic1tkYXBfb25vXS5kb19uYW1bZGFwX29ic1tkYXBfb25vXS5kb19p
blt2XV0sCgkJICAgICAgdmFsdWUpOwoJICAgICAgZXhpdCgxKTsKCSAgICB9Cgl9CiAgICAgIGVs
c2UKCXsKCSAgZm9yIChpID0gMDsgbGluZVtsICsgaV0gJiYgbGluZVtsICsgaV0gIT0gZGFwX2Rl
bGltOyBpKyspCgkgICAgdmFsdWVbaV0gPSBsaW5lW2wgKyBpXTsKCSAgdmFsdWVbaV0gPSAnXDAn
OwoJfQogICAgICBpZiAoZGFwX29ic1tkYXBfb25vXS5kb19sZW5bZGFwX29ic1tkYXBfb25vXS5k
b19pblt2XV0gPT0gSU5UKQoJewoJICBpZiAoaW50eXBlID09IERTRVQpCgkgICAgZGFwX29ic1tk
YXBfb25vXS5kb19pbnRbZGFwX29ic1tkYXBfb25vXS5kb19pblt2XV0gPSBkYXBfZ2V0aW50KHZh
bHVlKTsKCSAgZWxzZSBpZiAoc3NjYW5mKHZhbHVlLCAiICVkIiwKCQkJICBkYXBfb2JzW2RhcF9v
bm9dLmRvX2ludCArIGRhcF9vYnNbZGFwX29ub10uZG9faW5bdl0pICE9IDEpCgkgICAgewoJICAg
ICAgaWYgKGRhcF9ibGFuayh2YWx1ZSkpCgkJZGFwX29ic1tkYXBfb25vXS5kb19pbnRbZGFwX29i
c1tkYXBfb25vXS5kb19pblt2XV0gPSAwOwoJICAgICAgZWxzZQoJCXsKCQkgIGZwcmludGYoZGFw
X2VyciwKCQkJICAiKHN0ZXAgKCVzOiVkKSkgRVJST1I6IGludmFsaWQgaW50ZWdlciBkYXRhIGZv
ciAlczogJXNcbiIsCgkJCSAgZGFwX2luW2RhcF9vbm9dLT5kZmlsZV9uYW1lLAoJCQkgIGxpbmVu
b1tkYXBfb25vXSwKCQkJICBkYXBfb2JzW2RhcF9vbm9dLmRvX25hbVtkYXBfb2JzW2RhcF9vbm9d
LmRvX2luW3ZdXSwKCQkJICB2YWx1ZSk7CgkJICBleGl0KDEpOwoJCX0KCSAgICB9CgkgIC8qIGlm
IHdlJ3JlIGluIGFuIGluZmlsZSBzdGF0ZW1lbnQsIG1heSBuZWVkIHRvIHVwZGF0ZSB0aGUgdmFs
dWUKCSAgICogZnJvbSB0aGUgdmFsdWUgaW4gdGhlIHVzZXIncyBwcm9ncmFtCgkgICAqLwoJICBp
ZiAoIWRhcF9vbm8gJiYgZGFwX29ic1tkYXBfb25vXS5kb19pbFtkYXBfb2JzWzBdLmRvX2luW3Zd
XSkKCSAgICAqZGFwX29ic1tkYXBfb25vXS5kb19pbFtkYXBfb2JzWzBdLmRvX2luW3ZdXSA9Cgkg
ICAgICBkYXBfb2JzWzBdLmRvX2ludFtkYXBfb2JzWzBdLmRvX2luW3ZdXTsKCX0KICAgICAgZWxz
ZSBpZiAoZGFwX29ic1tkYXBfb25vXS5kb19sZW5bZGFwX29ic1tkYXBfb25vXS5kb19pblt2XV0g
PT0gREJMKQoJewoJICBpZiAoaW50eXBlID09IERTRVQpCgkgICAgewoJICAgICAgZGFwX2dldGRv
dWJsZSh2YWx1ZSk7CgkgICAgICBkYXBfb2JzW2RhcF9vbm9dLmRvX2RibFtkYXBfb2JzW2RhcF9v
bm9dLmRvX2luW3ZdXSA9IGRhcF9kb3VibGU7CgkgICAgfQoJICBlbHNlCgkgICAgewoJICAgICAg
aWYgKCFpIHx8IChuZmllbGRzICYmIGRhcF9ibGFuayh2YWx1ZSkpIHx8ICFzdHJjbXAodmFsdWUs
ICIuIikpCgkJZGFwX29ic1tkYXBfb25vXS5kb19kYmxbZGFwX29ic1tkYXBfb25vXS5kb19pblt2
XV0gPSAwLjAgLyAwLjA7CgkgICAgICBlbHNlIGlmIChzc2NhbmYodmFsdWUsICIgJWxmIiwKCQkJ
ICAgICAgZGFwX29ic1tkYXBfb25vXS5kb19kYmwgKyBkYXBfb2JzW2RhcF9vbm9dLmRvX2luW3Zd
KSAhPSAxKQoJCXsKCQkgIGZwcmludGYoZGFwX2VyciwKCQkJICAiKHN0ZXAgKCVzOiVkKSkgRVJS
T1I6IGludmFsaWQgZG91YmxlIGRhdGEgZm9yICVzOiAlc1xuIiwKCQkJICBkYXBfaW5bZGFwX29u
b10tPmRmaWxlX25hbWUsCgkJCSAgbGluZW5vW2RhcF9vbm9dLAoJCQkgIGRhcF9vYnNbZGFwX29u
b10uZG9fbmFtW2RhcF9vYnNbZGFwX29ub10uZG9faW5bdl1dLAoJCQkgIHZhbHVlKTsKCQkgIGV4
aXQoMSk7CgkJfQoJICAgIH0KCSAgLyogaWYgd2UncmUgaW4gYW4gaW5maWxlIHN0YXRlbWVudCwg
bWF5IG5lZWQgdG8gdXBkYXRlIHRoZSB2YWx1ZQoJICAgKiBmcm9tIHRoZSB2YWx1ZSBpbiB0aGUg
dXNlcidzIHByb2dyYW0KCSAgICovCgkgIGlmICghZGFwX29ubyAmJiBkYXBfb2JzW2RhcF9vbm9d
LmRvX2RsW2RhcF9vYnNbMF0uZG9faW5bdl1dKQoJICAgICpkYXBfb2JzW2RhcF9vbm9dLmRvX2Rs
W2RhcF9vYnNbMF0uZG9faW5bdl1dID0KCSAgICAgIGRhcF9vYnNbMF0uZG9fZGJsW2RhcF9vYnNb
MF0uZG9faW5bdl1dOwoJfQogICAgICBlbHNlCgl7CgkgIGlmIChpIDw9IGRhcF9vYnNbZGFwX29u
b10uZG9fbGVuW2RhcF9vYnNbZGFwX29ub10uZG9faW5bdl1dKQoJICAgIHN0cmNweShkYXBfb2Jz
W2RhcF9vbm9dLmRvX3N0cltkYXBfb2JzW2RhcF9vbm9dLmRvX2luW3ZdXSwgdmFsdWUpOwoJICBl
bHNlCgkgICAgewoJICAgICAgc3RybmNweShkYXBfb2JzW2RhcF9vbm9dLmRvX3N0cltkYXBfb2Jz
W2RhcF9vbm9dLmRvX2luW3ZdXSwKCQkgICAgICB2YWx1ZSwgZGFwX29ic1tkYXBfb25vXS5kb19s
ZW5bZGFwX29ic1tkYXBfb25vXS5kb19pblt2XV0pOwoJICAgICAgZGFwX29ic1tkYXBfb25vXS5k
b19zdHJbZGFwX29ic1tkYXBfb25vXS5kb19pblt2XV0KCQlbZGFwX29ic1tkYXBfb25vXS5kb19s
ZW5bZGFwX29ic1tkYXBfb25vXS5kb19pblt2XV1dID0gJ1wwJzsKCSAgICAgIGlmICh0b29sb25n
IDwgZGFwX3Rvb2xvbmcpCgkJewoJCSAgZnByaW50ZihkYXBfbG9nLAoJCQkgICIoc3RlcCAoJXM6
JWQpKSBXQVJOSU5HOiBzdHJpbmcgZGF0YSB0b28gbG9uZyAoJWQpIGZvciAlcyAoJWQpOiAlc1xu
IiwKCQkJICBkYXBfaW5bZGFwX29ub10tPmRmaWxlX25hbWUsCgkJCSAgbGluZW5vW2RhcF9vbm9d
LCBpLAoJCQkgIGRhcF9vYnNbZGFwX29ub10uZG9fbmFtW2RhcF9vYnNbZGFwX29ub10uZG9faW5b
dl1dLAoJCQkgIGRhcF9vYnNbZGFwX29ub10uZG9fbGVuW2RhcF9vYnNbZGFwX29ub10uZG9faW5b
dl1dLAoJCQkgIHZhbHVlKTsKCQkgIHRvb2xvbmcrKzsKCQl9CgkgICAgfQoJfQogICAgICBsICs9
IGk7CiAgICAgIGlmICghbmZpZWxkcyAmJiBsaW5lW2xdID09IGRhcF9kZWxpbSkKCWwrKzsKICAg
IH0KICBkYXBfb2JzW2RhcF9vbm9dLmRvX3ZhbGlkID0gMTsKICBsaW5lbm9bZGFwX29ub10rKzsK
ICByZXR1cm4gMTsKfQoKLyogY3JlYXRlIG5ldyB2YXJpYWJsZSBpbiBkYXRhb2JzCiAqIHZhcnNw
ZWMgPSAibmFtZSBsZW5ndGgiIChtYXkgYmUgcmVwZWF0ZWQpLAogKgl3aGVyZSBsZW5ndGggPSAt
MSBmb3IgZG91YmxlLCAwIGZvciBpbnQsIG90aGVyd2lzZSBsZW5ndGggb2Ygc3RyaW5nCiAqIGlu
dmFyID0gaXMgdmFyaWFibGUgdG8gYmUgcmVhZCBmcm9tIGlucHV0IGRhdGFzZXQ/CiAqLwppbnQg
ZGFwX3ZkKGNoYXIgKnZhcnNwZWMsIGludCBpbnZhcikKewogIGludCBzOwkJLyogYmFzZSBpbmRl
eCB0byB2YXJzcGVjICovCiAgaW50IGk7CQkvKiBzdXBwbGVtZW50YWwgaW5kZXggdG8gdmFyc3Bl
YyAqLwogIGNoYXIgKnZhcm5hbTsJLyogbmFtZSBvZiB2YXJpYWJsZSwgZXh0cmFjdGVkIGZyb20g
dmFyc3BlYyAqLwogIGludCBzaWduOwkvKiBmb3IgZ2V0dGluZyBuZWdhdGl2ZSBudW1iZXIgKi8K
ICBpbnQgdjsJCS8qIGluZGV4IG9mIHZhcmlhYmxlICovCiAgaW50IHZsZW47CS8qIGxlbmd0aCBw
YXJhbWV0ZXIgZm9yIHZhcmlhYmxlICovCiAgaW50IHJlZGVjbGFyZTsJLyogaXMgdmFyaWFibGUg
YmVpbmcgcmVkZWNsYXJlZD8gKi8KCiAgdiA9IC0xOwkJLyogbm9uLWV4aXN0ZW50IHVudGlsIHBy
b3ZlbiBvdGhlcndpc2UgKi8KICB2YXJuYW0gPSBkYXBfbWFsbG9jKHN0cmxlbih2YXJzcGVjKSwg
ImRhcF92ZDogdmFybmFtIik7CS8qIGFsbG9jYXRlIHN0cmluZyBmb3IgbmFtZXMgKi8KICBmb3Ig
KHMgPSAwOyB2YXJzcGVjW3NdID09ICcgJzsgKQkvKiBza2lwIGxlYWRpbmcgc3BhY2VzICovCiAg
ICBzKys7CiAgd2hpbGUgKHZhcnNwZWNbc10pCS8qIHdoaWxlIG1vcmUgc3BlY3MgdG8gcHJvY2Vz
cyAqLwogICAgewogICAgICBpZiAoZGFwX29ic1tkYXBfb25vXS5kb19udmFyIDwgZGFwX21heHZh
cikKCXsJCS8qIGlzIHRoZXJlIHJvb20gZm9yIGFub3RoZXIgdmFyaWFibGU/ICovCgkgIC8qKioq
KiBzZWVtcyBhcyB0aG91Z2ggYSByZWRlY2xhcmUgc2hvdWxkbid0IGhhdmUgdG8gY2hlY2sgdGhp
cywgbm90IHJlYWxseQoJICAgKioqKiogYSBwcm9ibGVtLCBidXQgY291bGQgd2FzdGUgc29tZSBz
cGFjZQoJICAgKioqKiovCgkgIGZvciAoaSA9IDA7IHZhcnNwZWNbcyArIGldICYmIHZhcnNwZWNb
cyArIGldICE9ICcgJzsgaSsrKQoJICAgIHZhcm5hbVtpXSA9IHZhcnNwZWNbcyArIGldOwoJICB2
YXJuYW1baV0gPSAnXDAnOwkvKiBuYW1lIGNvcGllZCwgaSA9IGxlbmd0aCAqLwoJICBpZiAoKHYg
PSBkYXBfdmFybnVtKHZhcm5hbSkpIDwgMCkKCSAgICB7CS8qIGlmIGl0IGRvZXNuJ3QgYWxyZWFk
eSBleGlzdCAqLwoJICAgICAgcmVkZWNsYXJlID0gMDsJLyogbm90IGJlaW5nIHJlZGVjbGFyZWQg
Ki8KCSAgICAgIHYgPSBkYXBfb2JzW2RhcF9vbm9dLmRvX252YXI7CS8qIGl0cyBpbmRleCBpcyBj
dXJyZW50IG52YXIgKi8KCSAgICAgIC8qIHZhcmlhYmxlIHdpdGggdGhhdCBpbmRleCBpcyBub3Qg
YmVpbmcgdXNlZCwgYnV0IGVudHJ5IG1heQoJICAgICAgICogc3RpbGwgaGF2ZSBhIG5hbWUgZnJv
bSBiZWZvcmUsIHNvIGNsZWFyIGl0CgkgICAgICAgKi8KCSAgICAgIGlmIChkYXBfb2JzW2RhcF9v
bm9dLmRvX25hbVt2XSkKCQlkYXBfZnJlZShkYXBfb2JzW2RhcF9vbm9dLmRvX25hbVt2XSwKCQkJ
ICJkYXBfdmQ6IGRhcF9vYnNbZGFwX29ub10uZG9fbmFtW3ZdIik7CgkgICAgICAvKiBhbGxvY2F0
ZSBzcGFjZSBmb3IgbmV3IG5hbWUgKi8KCSAgICAgIGRhcF9vYnNbZGFwX29ub10uZG9fbmFtW3Zd
ID0KCQlkYXBfbWFsbG9jKGkgKyAxLAoJCQkgICAiZGFwX3ZkOiBkYXBfb2JzW2RhcF9vbm9dLmRv
X25hbVt2XSIpOwoJICAgICAgLyogYW5kIGVudGVyIHRoZSBuYW1lICovCgkgICAgICBzdHJjcHko
ZGFwX29ic1tkYXBfb25vXS5kb19uYW1bdl0sIHZhcm5hbSk7CgkgICAgICAvKiBpZiBpdCdzIGdv
aW5nIHRvIGJlIHJlYWQgZnJvbSBmaWxlLCBpbmRpY2F0ZSBpbiB0aGUKCSAgICAgICAqIGRvX2lu
IGFycmF5IGFuZCBjb3VudAoJICAgICAgICovCgkgICAgICBpZiAoaW52YXIpCgkJZGFwX29ic1tk
YXBfb25vXS5kb19pbltkYXBfb2JzW2RhcF9vbm9dLmRvX2l2YXIrK10gPSB2OwoJICAgIH0KCSAg
ZWxzZQoJICAgIHJlZGVjbGFyZSA9IDE7CS8qIHZhcmlhYmxlIGFscmVhZHkgZXhpc3RzICovCgkg
IC8qIG5vdyBnZXQgdGhlIGxlbmd0aCBzcGVjaWZpY2F0aW9uOyBmaXJzdCBza2lwIHNwYWNlcywg
aWYgYW55ICovCgkgIHdoaWxlICh2YXJzcGVjW3MgKyBpXSAmJiB2YXJzcGVjW3MgKyBpXSA9PSAn
ICcpCgkgICAgaSsrOwoJICBpZiAoIXZhcnNwZWNbcyArIGldKQoJICAgIHsJLyogb29vcHMsIG5v
dGhpbmcgdGhlcmUgKi8KCSAgICAgIGZwcmludGYoZGFwX2VyciwgIihkYXBfdmQpIG1pc3Npbmcg
dmFyaWFibGUgbGVuZ3RoOiAlc1xuIiwKCQkgICAgICB2YXJzcGVjICsgcyk7CgkgICAgICBleGl0
KDEpOwoJICAgIH0KCSAgcyArPSBpOwoJICBpZiAodmFyc3BlY1tzXSA9PSAnLScpCgkgICAgewkv
KiBuZWdhdGl2ZSB2YWx1ZSAqLwoJICAgICAgc2lnbiA9IC0xOwoJICAgICAgZm9yIChzKys7IHZh
cnNwZWNbc10gPT0gJyAnOyBzKyspCgkJOwkvKiBza2lwIHNwYWNlcywgaWYgYW55ICovCgkgICAg
fQoJICBlbHNlCgkgICAgc2lnbiA9IDE7CS8qIHBvc2l0aXZlIHZhbHVlICovCgkgIC8qIG5vdyBj
b252ZXJ0IGNoYXJhY3RlciBzdHJpbmcgdG8gaW50ZWdlciAqLwoJICBmb3IgKGkgPSAwLCB2bGVu
ID0gMDsgJzAnIDw9IHZhcnNwZWNbcyArIGldICYmIHZhcnNwZWNbcyArIGldIDw9ICc5JzsgaSsr
KQoJICAgIHZsZW4gPSAxMCAqIHZsZW4gKyB2YXJzcGVjW3MgKyBpXSAtICcwJzsKCSAgdmxlbiAq
PSBzaWduOwkvKiBhbmQgaW5jb3Jwb3JhdGUgc2lnbiAqLwoJICBpZiAocmVkZWNsYXJlKQoJICAg
IHsJLyogY2hlY2sgdGhhdCByZWRlY2xhcmF0aW9uIGRvZXNuJ3QgY2hhbmdlIGxlbmd0aCAqLwoJ
ICAgICAgaWYgKGRhcF9vYnNbZGFwX29ub10uZG9fbGVuW3ZdICE9IHZsZW4pCgkJewoJCSAgaWYg
KHZsZW4gPiAwICYmIGRhcF9vYnNbZGFwX29ub10uZG9fbGVuW3ZdID4gMCkKCQkgICAgZnByaW50
ZihkYXBfZXJyLAoJCQkgICAgIihkYXBfdmQpIHJlc3BlY2lmaWNhdGlvbiBvZiBsZW5ndGggb2Yg
JXMgZnJvbSAlZCB0byAlZFxuIiwKCQkJICAgIHZhcm5hbSwgZGFwX29ic1tkYXBfb25vXS5kb19s
ZW5bdl0gKyAxLCB2bGVuICsgMSk7CgkJICBlbHNlCgkJICAgIGZwcmludGYoZGFwX2VyciwKCQkJ
ICAgICIoZGFwX3ZkKSByZXNwZWNpZmljYXRpb24gb2YgdHlwZSBvZiAlc1xuIiwKCQkJICAgIHZh
cm5hbSk7CgkJICBleGl0KDEpOwoJCX0KCSAgICB9CgkgIGVsc2UJLyogZm9yIG5ldyBkZWNsYXJh
dGlvbiwgdXNlIHNwZWNpZmllZCBsZW5ndGggKi8KCSAgICBkYXBfb2JzW2RhcF9vbm9dLmRvX2xl
blt2XSA9IHZsZW47CgkgIGlmICh2YXJzcGVjW3MgKyBpXSAmJiB2YXJzcGVjW3MgKyBpXSAhPSAn
ICcpCgkgICAgewkvKiBub3RoaW5nIHNob3VsZCBmb2xsb3cgbGVuZ3RoIGJ1dCBhIHNwYWNlICov
CgkgICAgICBmcHJpbnRmKGRhcF9lcnIsCgkJICAgICAgIihkYXBfdmQpIGludmFsaWQgdmFyaWFi
bGUgbGVuZ3RoIGZvciAlczogJXNcbiIsCgkJICAgICAgdmFybmFtLCB2YXJzcGVjICsgcyk7Cgkg
ICAgICBleGl0KDEpOwoJICAgIH0KCSAgaWYgKCFyZWRlY2xhcmUgJiYgdmxlbiA+IDApCgkgICAg
ewkvKiBib29ra2VlcGluZyBmb3Igc2V0dGluZyB1cCBuZXcgc3RyaW5nIHZhcmlhYmxlICovCgkg
ICAgICAvKiBpZiBpdCdzIG5vdCBsaW5rZWQgdG8gInVzZXIiIHByb2dyYW0gbmFtZSBhbmQgdGhl
cmUncwoJICAgICAgICogYSBsZWZ0LW92ZXIgc3RyaW5nIGZyb20gcHJldmlvdXMgdXNlLCBmcmVl
IGl0CgkgICAgICAgKi8KCSAgICAgIGlmICghZGFwX29ic1tkYXBfb25vXS5kb19zbFt2XSAmJiBk
YXBfb2JzW2RhcF9vbm9dLmRvX3N0clt2XSkKCQlkYXBfZnJlZShkYXBfb2JzW2RhcF9vbm9dLmRv
X3N0clt2XSwKCQkJICJkYXBfdmQ6IGRhcF9vYnNbZGFwX29ub10uZG9fc3RyW3ZdIik7CgkgICAg
ICAvKiBpZiBuZWVkIHRvIGZyZWUgc3RyaW5nIGZyb20gcHJldmlvdXMgbGluZSBkYXRhb2JzLCBk
byBpdCAqLwoJICAgICAgaWYgKGRhcF9vbm8gPCAyICYmIGRhcF9wcmV2W2RhcF9vbm9dLmRvX3N0
clt2XSkKCQlkYXBfZnJlZShkYXBfcHJldltkYXBfb25vXS5kb19zdHJbdl0sCgkJCSAiZGFwX3Zk
OiBkYXBfcHJldltkYXBfb25vXS5kb19zdHJbdl0iKTsKCSAgICAgIC8qIGFsbG9jYXRlIHNwYWNl
IGZvciBuZXcgc3RyaW5nIHZhcmlhYmxlICovCgkgICAgICBkYXBfb2JzW2RhcF9vbm9dLmRvX3N0
clt2XSA9CgkJZGFwX21hbGxvYyh2bGVuICsgMSwKCQkJICAgImRhcF92ZDogZGFwX29ic1tkYXBf
b25vXS5kb19zdHJbdl0iKTsKCSAgICAgIC8qIGluZGljYXRlIG5vdCBsaW5rZWQgdG8gInVzZXIi
IHByb2dyYW0gdmFyaWFibGUgKi8KCSAgICAgIGRhcF9vYnNbZGFwX29ub10uZG9fc2xbdl0gPSAw
OwoJICAgICAgLyogYWxsb2NhdGUgc3BhY2UgaW4gcHJldmlvdXMgbGluZSBkYXRhb2JzICovCgkg
ICAgICBpZiAoZGFwX29ubyA8IDIpCgkJZGFwX3ByZXZbZGFwX29ub10uZG9fc3RyW3ZdID0KCQkg
IGRhcF9tYWxsb2ModmxlbiArIDEsCgkJCSAgICAgImRhcF92ZDogZGFwX3ByZXZbZGFwX29ub10u
ZG9fc3RyW3ZdIik7CgkgICAgfQoJICBpZiAodmxlbiA9PSBEQkwpCS8qIGluaXRpYWxpemUgZG91
YmxlcyB0byBOYU4gKi8KCSAgICBkYXBfb2JzW2RhcF9vbm9dLmRvX2RibFt2XSA9IDAuMCAvIDAu
MDsKCSAgZWxzZSBpZiAodmxlbiA9PSBJTlQpCS8qIGluaXRpYWxpemUgaW50cyB0byAwICovCgkg
ICAgZGFwX29ic1tkYXBfb25vXS5kb19pbnRbdl0gPSAwOwoJICBlbHNlCQkJLyogaW5pdGlhbGl6
ZSBzdHJpbmdzIHRvIG51bGwgKi8KCSAgICBkYXBfb2JzW2RhcF9vbm9dLmRvX3N0clt2XVswXSA9
ICdcMCc7CgkgIHMgKz0gaTsJCS8qIGFkdmFuY2UgdG8gbmV4dCBzcGVjLCBpZiBhbnkgKi8KCSAg
d2hpbGUgKHZhcnNwZWNbc10gPT0gJyAnKQkvKiBhbmQgc2tpcCBzcGFjZXMgKi8KCSAgICBzKys7
Cgl9CiAgICAgIGVsc2UJCS8qIG5vIHJvb20gZm9yIGFub3RoZXIgdmFyaWFibGUgKi8KCXsKCSAg
ZnByaW50ZihkYXBfZXJyLCAiKGRhcF92ZCkgdG9vIG1hbnkgdmFyaWFibGVzOiAlc1xuIiwgdmFy
c3BlYyArIHMpOwoJICBleGl0KDEpOwoJfQogICAgICBpZiAoIXJlZGVjbGFyZSkJCS8qIGlmIG5v
dCBqdXN0IHJlZGVjbGFyYXRpb24gb2Ygb25lIGFscmVhZHkgdGhlcmUgKi8KCWRhcF9vYnNbZGFw
X29ub10uZG9fbnZhcisrOwkvKiB1cGRhdGUgbnVtYmVyIG9mIHZhcmlhYmxlcyAqLwogICAgfQog
IGRhcF9mcmVlKHZhcm5hbSwgImRhcF92ZDogdmFybmFtIik7CS8qIGZyZWUgbWVtb3J5IGFsbG9j
YXRpb24gKi8KICByZXR1cm4gdjsJCS8qIGFuZCByZXR1cm4gaW5kZXggb2YgbGFzdCAob3Igb25s
eSkgdmFyaWFibGUgKi8KfQoKLyogbGluayBhIGRvdWJsZSBmcm9tIGEgZGF0YW9icyB0byAidXNl
ciIgdmFyaWFibGUgKi8Kdm9pZCBkYXBfZGwoY2hhciB2YXJuYW1lW10sIGRvdWJsZSAqZGJsKQp7
CiAgaW50IHY7CiAgaW50IGRpbTsKICBpbnQgZDsKCiAgaWYgKCh2ID0gZGFwX3Zhcm51bSh2YXJu
YW1lKSkgPj0gMCkKICAgIHsKICAgICAgZGFwX29ic1tkYXBfb25vXS5kb19kbFt2XSA9IGRibDsK
ICAgICAgKmRibCA9IDAuMCAvIDAuMDsKICAgIH0KICBlbHNlCiAgICB7CiAgICAgIGlmICgodiA9
IGRhcF9hcnJudW0odmFybmFtZSwgJmRpbSkpID4gMCkKCXsKCSAgZm9yIChkID0gMDsgZCA8IGRp
bTsgZCsrKQoJICAgIHsKCSAgICAgIGRhcF9vYnNbZGFwX29ub10uZG9fZGxbdiArIGRdID0gZGJs
ICsgZDsKCSAgICAgIGRibFtkXSA9IDAuMCAvIDAuMDsKCSAgICB9Cgl9CiAgICAgIGVsc2UKCXsK
CSAgZnByaW50ZihkYXBfZXJyLCAiKGRhcF9kbCkgdW5rbm93biB2YXJpYWJsZSAlc1xuIiwgdmFy
bmFtZSk7CgkgIGV4aXQoMSk7Cgl9CiAgICB9Cn0KCi8qIGxpbmsgYW4gaW50IGZyb20gYSBkYXRh
b2JzIHRvICJ1c2VyIiB2YXJpYWJsZSAqLwp2b2lkIGRhcF9pbChjaGFyIHZhcm5hbWVbXSwgaW50
ICppKQp7CiAgaW50IHY7CiAgaW50IGRpbTsKICBpbnQgZDsKCiAgaWYgKCh2ID0gZGFwX3Zhcm51
bSh2YXJuYW1lKSkgPiAwKQogICAgewogICAgICBkYXBfb2JzW2RhcF9vbm9dLmRvX2lsW3ZdID0g
aTsKICAgICAgKmkgPSAwOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgaWYgKCh2ID0gZGFwX2Fy
cm51bSh2YXJuYW1lLCAmZGltKSkgPiAwKQoJewoJICBmb3IgKGQgPSAwOyBkIDwgZGltOyBkKysp
CgkgICAgewoJICAgICAgZGFwX29ic1tkYXBfb25vXS5kb19pbFt2ICsgZF0gPSBpICsgZDsKCSAg
ICAgIGlbZF0gPSAwOwoJICAgIH0KCX0KICAgICAgZWxzZQoJewoJICBmcHJpbnRmKGRhcF9lcnIs
ICIoZGFwX2lsKSB1bmtub3duIHZhcmlhYmxlICVzXG4iLCB2YXJuYW1lKTsKCSAgZXhpdCgxKTsK
CX0KICAgIH0KfQoKLyogbGluayBhIHN0cmluZyBmcm9tIGEgZGF0YW9icyB0byAidXNlciIgdmFy
aWFibGUgKi8Kdm9pZCBkYXBfc2woY2hhciB2YXJuYW1lW10sIGNoYXIgKnMpCnsKICBpbnQgdjsK
CiAgaWYgKCh2ID0gZGFwX3Zhcm51bSh2YXJuYW1lKSkgPj0gMCkKICAgIHsKICAgICAgZGFwX2Zy
ZWUoZGFwX29ic1tkYXBfb25vXS5kb19zdHJbdl0sICJkYXBfc2w6IGRhcF9vYnNbZGFwX29ub10u
ZG9fc3RyW3ZdIik7CiAgICAgIGRhcF9vYnNbZGFwX29ub10uZG9fc3RyW3ZdID0gczsKICAgICAg
ZGFwX29ic1tkYXBfb25vXS5kb19zbFt2XSA9IDE7CiAgICAgIHNbMF0gPSAnXDAnOwogICAgfQog
IGVsc2UKICAgIHsKICAgICAgZnByaW50ZihkYXBfZXJyLCAiKGRhcF9zbCkgdW5rbm93biB2YXJp
YWJsZSAlc1xuIiwgdmFybmFtZSk7CiAgICAgIGV4aXQoMSk7CiAgICB9Cn0KCnZvaWQgZGFwX25h
bWUoY2hhciBkbmFtZVtdLCBjaGFyICpmbmFtZSkKewogIHN0cnVjdCBzdGF0IHN0YXRidWY7Cgog
IGlmICghZm5hbWUgfHwgIWZuYW1lWzBdKQogICAgewogICAgICBzdHJjcHkoZG5hbWUsICIvZGV2
L251bGwiKTsKICAgICAgcmV0dXJuOwogICAgfQogIHN0cmNweShkbmFtZSwgZGFwX3NldGRpcik7
CiAgaWYgKHN0YXQoZG5hbWUsICZzdGF0YnVmKSA8IDApCiAgICB7CiAgICAgIGlmIChta2Rpcihk
bmFtZSwgKG1vZGVfdCkgMDcwMCkgPCAwKQoJewoJICBwZXJyb3IoZGFwX2RhcG5hbWUpOwoJICBl
eGl0KDEpOwoJfQogICAgfQogIGVsc2UgaWYgKCEoc3RhdGJ1Zi5zdF9tb2RlICYgU19JRkRJUikp
CiAgICB7CiAgICAgIGZwcmludGYoZGFwX2VyciwgIiVzOiBub24tZGlyZWN0b3J5IGZpbGUgZXhp
c3RzOiAlc1xuIiwgZGFwX2RhcG5hbWUsIGRuYW1lKTsKICAgICAgZXhpdCgxKTsKICAgIH0KICBz
dHJjYXQoZG5hbWUsICIvIik7CiAgc3RyY2F0KGRuYW1lLCBmbmFtZSk7Cn0KCnN0YXRpYyBpbnQg
ZGJsY21wKGRvdWJsZSAqZDEsIGRvdWJsZSAqZDIpCnsKICBpZiAoKmQxIDwgKmQyKQogICAgcmV0
dXJuIC0xOwogIGVsc2UgaWYgKCpkMSA+ICpkMikKICAgIHJldHVybiAxOwogIHJldHVybiAwOwp9
CgpzdGF0aWMgaW50IGludGNtcChpbnQgKmkxLCBpbnQgKmkyKQp7CiAgaWYgKCppMSA8ICppMikK
ICAgIHJldHVybiAtMTsKICBlbHNlIGlmICgqaTEgPiAqaTIpCiAgICByZXR1cm4gMTsKICByZXR1
cm4gMDsKfQoKc3RhdGljIGludCBzdGNtcChjaGFyICoqczEsIGNoYXIgKipzMikKewogIHJldHVy
biBzdHJjbXAoKnMxLCAqczIpOwp9CgpzdGF0aWMgaW50IGZpbmRsZXYoaW50IGNsYXNzLCBkb3Vi
bGUgZGxldmVsW10sIGludCBpbGV2ZWxbXSwgY2hhciAqc2xldmVsW10sIGludCBubGV2ZWxzKQp7
CiAgaW50IHY7CgogIGlmIChkYXBfb2JzW2RhcF9vbm9dLmRvX2xlbltjbGFzc10gPT0gREJMKQog
ICAgewogICAgICBmb3IgKHYgPSAwOyB2IDwgbmxldmVsczsgdisrKQoJewkvKiBzZWFyY2ggZm9y
IGxldmVsICovCgkgIGlmIChkYXBfb2JzW2RhcF9vbm9dLmRvX2RibFtjbGFzc10gPT0KCSAgICAg
IGRsZXZlbFt2XSkKCSAgICBicmVhazsKCX0KICAgIH0KICBlbHNlIGlmIChkYXBfb2JzW2RhcF9v
bm9dLmRvX2xlbltjbGFzc10gPT0gSU5UKQogICAgewogICAgICBmb3IgKHYgPSAwOyB2IDwgbmxl
dmVsczsgdisrKQoJewkvKiBzZWFyY2ggZm9yIGxldmVsICovCgkgIGlmIChkYXBfb2JzW2RhcF9v
bm9dLmRvX2ludFtjbGFzc10gPT0KCSAgICAgIGlsZXZlbFt2XSkKCSAgICBicmVhazsKCX0KICAg
IH0KICBlbHNlCiAgICB7CiAgICAgIGZvciAodiA9IDA7IHYgPCBubGV2ZWxzOyB2KyspCgl7CS8q
IHNlYXJjaCBmb3IgbGV2ZWwgKi8KCSAgaWYgKCFzdHJjbXAoZGFwX29ic1tkYXBfb25vXS5kb19z
dHJbY2xhc3NdLAoJCSAgICAgIHNsZXZlbFt2XSkpCgkgICAgYnJlYWs7Cgl9CiAgICB9CiAgaWYg
KHYgPCBubGV2ZWxzKQogICAgcmV0dXJuIHY7CiAgcmV0dXJuIC0xOwp9CgppbnQgaW5jbGV2KGlu
dCBsZXZbXSwgaW50IG5sZXZlbHNbXSwgaW50IG5jbGFzcykKewogIGludCBjOwoKICBmb3IgKGMg
PSBuY2xhc3MgLSAxOyBjID49IDA7IC0tYykKICAgIHsKICAgICAgaWYgKGxldltjXSA8IG5sZXZl
bHNbY10gLSAxKQkvKiBub3QgbWF4ZWQgb3V0ICovCglicmVhazsKICAgIH0KICBpZiAoYyA8IDAp
CS8qIGFsbCBtYXhlZCBvdXQgKi8KICAgIHJldHVybiAwOwogIGxldltjXSsrOwogIHdoaWxlICgr
K2MgPCBuY2xhc3MpCiAgICBsZXZbY10gPSAwOwogIHJldHVybiAxOwp9CgovKiBUaGlzIGdyYWIt
YmFnIGZ1bmN0aW9uIGlzIHdheSB0b28gYmlnLCBzaG91bGQgYmUgYnJva2VuIHVwCiAqIGludG8g
ZnVuY3Rpb25zIHRoYXQgcGVyZm9ybSBlYWNoIGFjdGlvbgogKi8Kdm9pZCBkYXRhc2V0KGNoYXIg
b2xkbmFtZVtdLCBjaGFyIG5ld25hbWVbXSwgY2hhciBhY3Rpb25bXSkKewogIHN0YXRpYyBpbnQg
ZGF0c2V0aW5pdCA9IDA7CS8qIG5lZWQgdG8gaW5pdGlhbGl6ZSAnYmFzZW9icycgb24gZmlyc3Qg
Y2FsbCAqLwogIGNoYXIgKmRvbGQsICpkbmV3OwkJLyogb2xkbmFtZSwgbmV3bmFtZSB3aXRoIGRp
cmVjdG9yeSBwcmVwZW5kZWQgKi8KICBpbnQgZm9sZCwgZm5ldzsJCQkvKiBmaWxlIG51bWJlcnMg
Zm9yIG1lbW9yeSBmaWxlcyAqLwogIERGSUxFICpkb2xkZiwgKmRuZXdmOwogIGludCBjOwkJCQkv
KiBpbmRleCBmb3IgdmFyaW91cyBwdXJwb3NlcyAob3VjaCEpICovCiAgaW50IHY7CQkJCS8qIGlu
ZGV4IGZvciB2YXJpb3VzIHB1cnBvc2VzIChvdWNoISkgKi8KICBpbnQgb251bTsKICBpbnQgbWF4
bmFtbGVuOwkJCS8qIG1heCBsZW5ndGggb2YgdmFyaWFibGUgbmFtZSBpbiBkYXRhc2V0ICovCiAg
c3RhdGljIGRhdGFvYnMgYmFzZW9iczsJCS8qIGRhdGFvYnMgZm9yIGFwcGVuZCAqLwogIGNoYXIg
KnZhcnNwZWM7CiAgY2hhciAqb2xkdm1lbTsKICBjaGFyICpuZXd2bWVtOwogIGNoYXIgKipvbGR2
YXI7CiAgY2hhciAqKm5ld3ZhcjsKICBpbnQgbnZhcjsJCS8qIG51bWJlciBvZiB2YXJpYWJsZXMg
aW4gYWN0aW9uIGZvciBDT1BZICovCiAgaW50IG5jZWxsLCBuY2xhc3M7CS8qIG51bWJlciBvZiBj
ZWxsLCBjbGFzcyB2YXJpYWJsZXMgZm9yIEZJTEwgKi8KICBjaGFyICpjZWxsbGlzdDsJCS8qIGxp
c3Qgb2YgY2VsbCwgY2xhc3MgdmFyaWFibGVzIGZvciBGSUxMICovCiAgaW50ICpjZWxsdiwgKmNs
YXNzdjsJLyogaW5kaWNlcyBvZiB2YXJpYWJsZXMgZm9yIEZJTEwgKi8KICBjaGFyICoqc2xldmVs
bWVtOwkvKiBmb3Igc3RvcmluZyBwdHJzIHRvIG5hbWVzIG9mIHRoZSBsZXZlbHMgb2YgdGhlIHN0
cmluZyBjbGFzcyB2YXJzICovCiAgY2hhciAqKipzbGV2ZWw7CQkvKiBwb2ludGVycyB0byB0aGUg
bGV2ZWwgbmFtZXMgKi8KICBkb3VibGUgKmRsZXZlbG1lbTsJLyogZm9yIHN0b3JpbmcgdmFsdWVz
IG9mIHRoZSBsZXZlbHMgb2YgdGhlIGRvdWJsZSBjbGFzcyB2YXJzICovCiAgZG91YmxlICoqZGxl
dmVsOwkvKiBwb2ludGVycyB0byB0aGUgZG91YmxlIGxldmVsIHZhbHVlcyAqLwogIGludCAqaWxl
dmVsbWVtOwkJLyogZm9yIHN0b3JpbmcgdmFsdWVzIG9mIHRoZSBsZXZlbHMgb2YgdGhlIGludCBj
bGFzcyB2YXJzICovCiAgaW50ICoqaWxldmVsOwkJLyogcG9pbnRlcnMgdG8gdGhlIGludCBsZXZl
bCB2YWx1ZXMgKi8KICBpbnQgKmlubGV2OwkJLyogY3VycmVudCBsZXZlbCByZWFkIGluIGZvciBl
YWNoIGNsYXNzIHZhciAqLwogIGludCAqb3V0bGV2OwkJLyogY3VycmVudCBsZXZlbCB3cml0dGVu
IG91dCBmb3IgZWFjaCBjbGFzcyB2YXIgKi8KICBpbnQgKm5sZXZlbHM7CQkvKiBudW1iZXIgb2Yg
bGV2ZWxzIGZvciBlYWNoIGNsYXNzIHZhciAqLwogIGludCAoKmRjbXApKCkgPSAmZGJsY21wOwkv
KiB0byB0cmljayB0aGUgY29tcGlsZXI/ICovCiAgaW50ICgqaWNtcCkoKSA9ICZpbnRjbXA7CS8q
IHRvIHRyaWNrIHRoZSBjb21waWxlcj8gKi8KICBpbnQgKCpzY21wKSgpID0gJnN0Y21wOwkJLyog
dG8gdHJpY2sgdGhlIGNvbXBpbGVyPyAqLwogIGludCB2biwgbnY7CiAgaW50IGRpbSwgbmRpbTsK
ICBjaGFyICpvdXRsaXN0OwogIHN0YXRpYyBjaGFyIGRpbXN0cls3XTsJLyogZGVwZW5kcyBvbiBk
YXBfbWF4dmFyIDw9IDEwLDAwMCAqLwogIGludCAqY2xlYXJ2YXI7CQkvKiBpbmRpY2VzIG9mIHZh
cmlhYmxlcyB0byBjbGVhciBpbiBBUFBFTkQgKi8KICBpbnQgbmNsZWFyOwkJLyogbnVtYmVyIG9m
IHZhcmlhYmxlcyB0byBjbGVhciAqLwoKICBpZiAoIWRhdHNldGluaXQpCS8qIG5lZWQgdG8gYWxs
b2NhdGUgYW5kIGluaXRpYXRlIGJhc2VvYnM/ICovCiAgICB7CiAgICAgIGRhdHNldGluaXQgPSAx
OwogICAgICBpbml0ZG8oJmJhc2VvYnMpOwogICAgfQogIGlmIChkYXBfaW5bMF0pCQkvKiBpZiBp
bnB1dCBmaWxlIGxlZnQgaGFuZ2luZy4uLiAqLwogICAgewkJLyogLi4uIGZpbmlzaCBpdCB1cCAq
LwogICAgICBkZmNsb3NlKGRhcF9pblswXSk7CiAgICAgIGRhcF9pblswXSA9IChERklMRSAqKSBO
VUxMOwogICAgfQogIGlmIChkYXBfb3V0WzBdKQkJLyogaWYgb3V0cHV0IGZpbGUgbGVmdCBoYW5n
aW5nLi4uICovCiAgICB7CQkvKiAuLi4gZmluaXNoIGl0IHVwICovCiAgICAgIGRmY2xvc2UoZGFw
X291dFswXSk7CiAgICAgIGRhcF9vdXRbMF0gPSAoREZJTEUgKikgTlVMTDsKICAgIH0KICBjZWxs
bGlzdCA9IChjaGFyICopIE5VTEw7CS8qIHRvIHByZXZlbnQgZnJlZWluZyBpZiBub3QgYXNzaWdu
ZWQgKi8KICBzbGV2ZWxtZW0gPSAoY2hhciAqKikgTlVMTDsJLyogdG8gcHJldmVudCBmcmVlaW5n
IGlmIG5vdCBhc3NpZ25lZCAqLwogIGNlbGx2ID0gKGludCAqKSBOVUxMOwkJLyogdG8gcHJldmVu
dCBmcmVlaW5nIGlmIG5vdCBhc3NpZ25lZCAqLwogIGNsYXNzdiA9IChpbnQgKikgTlVMTDsJCS8q
IHRvIHByZXZlbnQgZnJlZWluZyBpZiBub3QgYXNzaWduZWQgKi8KICBvdXRsaXN0ID0gZGFwX21h
bGxvYyhkYXBfbGlzdGxlbiwgImRhdGFzZXQ6IG91dGxpc3QiKTsKICBvbGR2bWVtID0gZGFwX21h
bGxvYyhkYXBfbWF4dmFyICogKGRhcF9uYW1lbGVuICsgMSksICJkYXRhc2V0OiBvbGR2bWVtIik7
CiAgb2xkdmFyID0gKGNoYXIgKiopIGRhcF9tYWxsb2Moc2l6ZW9mKGNoYXIgKikgKiBkYXBfbWF4
dmFyLCAiZGF0YXNldDogb2xkdmFyIik7CiAgZm9yICh2ID0gMDsgdiA8IGRhcF9tYXh2YXI7IHYr
KykKICAgIG9sZHZhclt2XSA9IG9sZHZtZW0gKyB2ICogKGRhcF9uYW1lbGVuICsgMSk7CiAgbmV3
dm1lbSA9IGRhcF9tYWxsb2MoZGFwX21heHZhciAqIChkYXBfbmFtZWxlbiArIDEpLCAiZGF0YXNl
dDogbmV3dm1lbSIpOwogIG5ld3ZhciA9IChjaGFyICoqKSBkYXBfbWFsbG9jKHNpemVvZihjaGFy
ICopICogZGFwX21heHZhciwgImRhdGFzZXQ6IG5ld3ZhciIpOwogIGZvciAodiA9IDA7IHYgPCBk
YXBfbWF4dmFyOyB2KyspCiAgICBuZXd2YXJbdl0gPSBuZXd2bWVtICsgdiAqIChkYXBfbmFtZWxl
biArIDEpOwogIGRvbGQgPSBkYXBfbWFsbG9jKHN0cmxlbihvbGRuYW1lKSArIHN0cmxlbihkYXBf
c2V0ZGlyKSArIDIsICJkYXRhc2V0OiBkb2xkIik7CiAgZG5ldyA9IGRhcF9tYWxsb2Moc3RybGVu
KG5ld25hbWUpICsgc3RybGVuKGRhcF9zZXRkaXIpICsgMiwgImRhdGFzZXQ6IGRuZXciKTsKICBk
YXBfbmFtZShkb2xkLCBvbGRuYW1lKTsJLyogc2V0IHVwIGRhdGFzZXQgbmFtZXMgKi8KICBkYXBf
bmFtZShkbmV3LCBuZXduYW1lKTsKICBjbGVhcnZhciA9IE5VTEw7CiAgaWYgKCFzdHJjbXAoYWN0
aW9uLCAiUkVOQU1FIikpCiAgICB7CiAgICAgIGlmIChvbGRuYW1lWzBdID09ICc8JykKCXsKCSAg
aWYgKG5ld25hbWVbMF0gPT0gJzwnKQoJICAgIHsKCSAgICAgIGZvciAoZm9sZCA9IDA7IGZvbGQg
PCBkYXBfbnJmaWxlczsgZm9sZCsrKQoJCXsKCQkgIGlmICghc3RyY21wKGRmaWxlW05ERklMRVMg
KyBmb2xkXS5kZmlsZV9uYW1lLCBvbGRuYW1lICsgMSkpCgkJICAgIGJyZWFrOwoJCX0KCSAgICAg
IGlmIChmb2xkIDwgZGFwX25yZmlsZXMpCgkJewoJCSAgZm9yIChmbmV3ID0gMDsgZm5ldyA8IGRh
cF9ucmZpbGVzOyBmbmV3KyspCgkJICAgIHsKCQkgICAgICBpZiAoIXN0cmNtcChkZmlsZVtOREZJ
TEVTICsgZm5ld10uZGZpbGVfbmFtZSwKCQkJCSAgbmV3bmFtZSArIDEpKQoJCQlicmVhazsKCQkg
ICAgfQoJCSAgaWYgKGZuZXcgPCBkYXBfbnJmaWxlcykKCQkgICAgZGZpbGVbTkRGSUxFUyArIGZu
ZXddLmRmaWxlX25hbWVbMF0gPSAnXDAnOwoJCSAgc3RyY3B5KGRmaWxlW05ERklMRVMgKyBmb2xk
XS5kZmlsZV9uYW1lLCBuZXduYW1lICsgMSk7CgkJfQoJICAgICAgZWxzZQoJCXsKCQkgIGZwcmlu
dGYoZGFwX2VyciwKCQkJICAiKGRhdGFzZXQpIGNhbid0IGZpbmQgcmFtZmlsZSAlc1xuIiwgb2xk
bmFtZSk7CgkJICBleGl0KDEpOwoJCX0KCSAgICB9CgkgIGVsc2UKCSAgICB7CgkgICAgICBmcHJp
bnRmKGRhcF9lcnIsCgkJICAgICAgIihkYXRhc2V0KSBjYW4ndCByZW5hbWUgcmFtZmlsZSAlcyB0
byBkaXNrIGZpbGUgJXNcbiIsCgkJICAgICAgb2xkbmFtZSwgbmV3bmFtZSk7CgkgICAgICBleGl0
KDEpOwoJICAgIH0KCX0KICAgICAgZWxzZSBpZiAobmV3bmFtZVswXSA9PSAnPCcpCgl7CgkgIGZw
cmludGYoZGFwX2VyciwgIihkYXRhc2V0KSBjYW4ndCByZW5hbWUgZGlzayBmaWxlICVzIHRvIHJh
bWZpbGUgJXNcbiIsCgkJICBvbGRuYW1lLCBuZXduYW1lKTsKCSAgZXhpdCgxKTsKCX0KICAgICAg
ZWxzZQoJcmVuYW1lKGRvbGQsIGRuZXcpOwogICAgfQogIGVsc2UgaWYgKCFzdHJuY21wKGFjdGlv
biwgIkNPUFkiLCA0KSkKICAgIHsKICAgICAgZm9yICh2ID0gNDsgYWN0aW9uW3ZdID09ICcgJzsg
disrKQkvKiBnZXQgcGFzdCBDT1BZICovCgk7CiAgICAgIGZvciAobnZhciA9IDA7IGFjdGlvblt2
XTsgbnZhcisrKQoJewoJICBmb3IgKGMgPSAwOyBhY3Rpb25bdl0gJiYgYWN0aW9uW3ZdICE9ICcg
JyAmJiBhY3Rpb25bdl0gIT0gJz4nOyApCgkgICAgewoJICAgICAgaWYgKGMgPCBkYXBfbmFtZWxl
bikKCQlvbGR2YXJbbnZhcl1bYysrXSA9IGFjdGlvblt2KytdOwoJICAgICAgZWxzZQoJCXsKCQkg
IGZwcmludGYoZGFwX2VyciwgIihkYXRhc2V0KSB2YXJpYWJsZSBuYW1lIHRvbyBsb25nOiAlc1xu
IiwKCQkJICBhY3Rpb24pOwoJCSAgZXhpdCgxKTsKCQl9CgkgICAgfQoJICBvbGR2YXJbbnZhcl1b
Y10gPSAnXDAnOwkJLyogbm93IG9sZHZhcltudmFyXSBpcyBuYW1lZCB2YXJpYWJsZSAqLwoJICB3
aGlsZSAoYWN0aW9uW3ZdID09ICcgJykKCSAgICB2Kys7CgkgIGlmIChhY3Rpb25bdl0gPT0gJz4n
KQkJLyogaWYgY2hhbmdpbmcgbmFtZSAqLwoJICAgIHsKCSAgICAgIGZvciAodisrOyBhY3Rpb25b
dl0gPT0gJyAnOyB2KyspCgkJOwoJICAgICAgZm9yIChjID0gMDsgYWN0aW9uW3ZdICYmIGFjdGlv
blt2XSAhPSAnICc7ICkKCQl7CgkJICBpZiAoYyA8IGRhcF9uYW1lbGVuKQoJCSAgICBuZXd2YXJb
bnZhcl1bYysrXSA9IGFjdGlvblt2KytdOwoJCSAgZWxzZQoJCSAgICB7CgkJICAgICAgZnByaW50
ZihkYXBfZXJyLAoJCQkgICAgICAiKGRhdGFzZXQpIG5ldyB2YXJpYWJsZSBuYW1lIHRvbyBsb25n
OiAlc1xuIiwKCQkJICAgICAgYWN0aW9uKTsKCQkgICAgICBleGl0KDEpOwoJCSAgICB9CgkJfQoJ
ICAgICAgbmV3dmFyW252YXJdW2NdID0gJ1wwJzsJLyogbm93IG5ld3ZhcltudmFyXSBpcyBuZXcg
bmFtZSAqLwoJICAgICAgd2hpbGUgKGFjdGlvblt2XSA9PSAnICcpCgkJdisrOwoJICAgIH0KCSAg
ZWxzZQoJICAgIHN0cmNweShuZXd2YXJbbnZhcl0sIG9sZHZhcltudmFyXSk7Cgl9CiAgICAgIGlm
IChudmFyKQkJLyogaWYgdGhlcmUgYXJlIHZhcmlhYmxlcyB0byBjb3B5ICovCgl7CgkgIGluc2V0
KG9sZG5hbWUpOwoJICBmb3IgKHYgPSAwLCBvdXRsaXN0WzBdID0gJ1wwJzsgdiA8IG52YXI7IHYr
KykKCSAgICB7CgkgICAgICBpZiAodikKCQlzdHJjYXQob3V0bGlzdCwgIiAiKTsKCSAgICAgIHN0
cmNhdChvdXRsaXN0LCBuZXd2YXJbdl0pOwkvKiBvdXRwdXQgbGlzdCBoYXMgbmV3dmFycyAqLwoJ
ICAgICAgaWYgKHN0cmNtcChvbGR2YXJbdl0sIG5ld3Zhclt2XSkpCS8qIGlmIGNoYW5naW5nIG5h
bWUgKi8KCQl7CgkJICBpZiAoKHZuID0gZGFwX3Zhcm51bShvbGR2YXJbdl0pKSA+PSAwKQoJCSAg
ICB7CgkJCQkvKiBpZiBuZXd2YXIgZXhpc3RzIGluIG9sZG5hbWUsIHphcCBpdHMgZmlyc3QgY2hh
ciB0byAnMCcgKi8KCQkgICAgICBpZiAoKG52ID0gZGFwX3Zhcm51bShuZXd2YXJbdl0pKSA+PSAw
KQoJCQlkYXBfb2JzWzBdLmRvX25hbVtudl1bMF0gPSAnMCc7CgkJCQkvKiBhbmQgY2hhbmdlIHRo
ZSBuYW1lIG9mIG9sZHZhciB0byBuZXd2YXIgKi8KCQkgICAgICBkYXBfZnJlZShkYXBfb2JzWzBd
LmRvX25hbVt2bl0sCgkJCSAgICAgICAiZGF0YXNldDogZGFwX29ic1swXS5kb19uYW1bdm5dIik7
CgkJICAgICAgZGFwX29ic1swXS5kb19uYW1bdm5dID0KCQkJZGFwX21hbGxvYyhzdHJsZW4obmV3
dmFyW3ZdKSArIDEsCgkJCQkgICAiZGF0YXNldDogZGFwX29ic1swXS5kb19uYW1bdm5dIik7CgkJ
ICAgICAgc3RyY3B5KGRhcF9vYnNbMF0uZG9fbmFtW3ZuXSwgbmV3dmFyW3ZdKTsKCQkgICAgfQoJ
CSAgZWxzZSBpZiAoKHZuID0gZGFwX2Fycm51bShvbGR2YXJbdl0sICZkaW0pKSA+PSAwKQoJCSAg
ICB7CgkJCQkvKiBkbyB0aGUgc2FtZSBmb3IgYXJyYXlzICovCgkJICAgICAgaWYgKChudiA9IGRh
cF9hcnJudW0obmV3dmFyW3ZdLCAmbmRpbSkpID49IDApCgkJCXsKCQkJICBmb3IgKGMgPSAwOyBj
IDwgbmRpbTsgYysrKQoJCQkgICAgewoJCQkgICAgICBkYXBfb2JzWzBdLmRvX25hbVtudiArIGNd
WzBdID0gJzAnOwoJCQkgICAgICBzcHJpbnRmKGRpbXN0ciwgIlslZF0iLCBjKTsKCQkJICAgICAg
c3RyY2F0KGRhcF9vYnNbMF0uZG9fbmFtW3ZuICsgY10sIGRpbXN0cik7CgkJCSAgICB9CgkJCX0K
CQkgICAgICBmb3IgKGMgPSAwOyBjIDwgZGltOyBjKyspCgkJCXsKCQkJICBzcHJpbnRmKGRpbXN0
ciwgIlslZF0iLCBjKTsKCQkJICBkYXBfZnJlZShkYXBfb2JzWzBdLmRvX25hbVt2biArIGNdLAoJ
CQkJICAgImRhdGFzZXQ6IGRhcF9vYnNbMF0uZG9fbmFtW3ZuICsgY10iKTsKCQkJICBkYXBfb2Jz
WzBdLmRvX25hbVt2biArIGNdID0KCQkJICAgIGRhcF9tYWxsb2Moc3RybGVuKG5ld3Zhclt2XSkg
KwoJCQkJICAgICAgIHN0cmxlbihkaW1zdHIpICsgMSwKCQkJCSAgICAgICAiZGF0YXNldDogZGFw
X29ic1swXS5kb19uYW1bdm4gKyBjXSIpOwoJCQkgIHN0cmNweShkYXBfb2JzWzBdLmRvX25hbVt2
biArIGNdLCBuZXd2YXJbdl0pOwoJCQkgIHN0cmNhdChkYXBfb2JzWzBdLmRvX25hbVt2biArIGNd
LCBkaW1zdHIpOwoJCQl9CgkJICAgIH0KCQkgIGVsc2UKCQkgICAgewoJCSAgICAgIGZwcmludGYo
ZGFwX2VyciwgIihkYXRhc2V0KSB1bmtub3duIHZhcmlhYmxlICVzXG4iLAoJCQkgICAgICBvbGR2
YXJbdl0pOwoJCSAgICAgIGV4aXQoMSk7CgkJICAgIH0KCQl9CgkgICAgfQoJICBvdXRzZXQobmV3
bmFtZSwgb3V0bGlzdCk7CgkgIHdoaWxlIChzdGVwKCkpCgkgICAgb3V0cHV0KCk7Cgl9CiAgICAg
IGVsc2UKCXsKCSAgaWYgKCEoZG9sZGYgPSBkZm9wZW4ob2xkbmFtZSwgInIiKSkpCgkgICAgewoJ
ICAgICAgZnByaW50ZihkYXBfZXJyLCAiKGRhdGFzZXQpIGNhbid0IHJlYWQgJXMgZm9yIGNvcHku
XG4iLAoJCSAgICAgIG9sZG5hbWUpOwoJICAgICAgZXhpdCgxKTsKCSAgICB9CgkgIGlmICghKGRu
ZXdmID0gZGZvcGVuKG5ld25hbWUsICJ3IikpKQoJICAgIHsKCSAgICAgIGZwcmludGYoZGFwX2Vy
ciwgIihkYXRhc2V0KSBjYW4ndCB3cml0ZSAlcyBmb3IgY29weS5cbiIsCgkJICAgICAgbmV3bmFt
ZSk7CgkgICAgICBleGl0KDEpOwoJICAgIH0KCSAgd2hpbGUgKChjID0gZGdldGMoZG9sZGYpKSAh
PSBFT0YpCgkgICAgZGFwX3B1dGMoYywgZG5ld2YpOwoJICBkZmNsb3NlKGRuZXdmKTsKCSAgZGZj
bG9zZShkb2xkZik7Cgl9CiAgICB9CiAgZWxzZSBpZiAoIXN0cm5jbXAoYWN0aW9uLCAiRklMTCIs
IDQpKQogICAgewogICAgICBpbnNldChvbGRuYW1lKTsKICAgICAgLyogbWFrZSBjb3B5IG9mIGNl
bGwgdmFyaWFibGUgbmFtZXMgZm9yIGRhcF9saXN0ICovCiAgICAgIGNlbGxsaXN0ID0gZGFwX21h
bGxvYyhzdHJsZW4oYWN0aW9uKSwgImRhdGFzZXQ6IGNlbGxsaXN0Iik7CiAgICAgIGZvciAodiA9
IDQsIGMgPSAwOyBhY3Rpb25bdl0gJiYgYWN0aW9uW3ZdICE9ICc6JzsgKQkvKiBnZXQgdG8gOiAq
LwoJY2VsbGxpc3RbYysrXSA9IGFjdGlvblt2KytdOwogICAgICBjZWxsbGlzdFtjXSA9ICdcMCc7
CiAgICAgIGlmICghYWN0aW9uW3ZdKQoJewoJICBmcHJpbnRmKGRhcF9lcnIsCgkJICAiKGRhdGFz
ZXQpIG1pc3NpbmcgJzonIGJldHdlZW4gdmFyaWFibGUgbGlzdHMgaW4gJXNcbiIsIGFjdGlvbik7
CgkgIGV4aXQoMSk7Cgl9CiAgICAgIG5jZWxsID0gYyAvIDI7CS8qIHRlbnRhdGl2ZSwgb3ZlcmVz
dGltYXRlICovCiAgICAgIGNlbGx2ID0gKGludCAqKSBkYXBfbWFsbG9jKHNpemVvZihpbnQpICog
bmNlbGwsICJkYXRhc2V0OiBjZWxsdiIpOwogICAgICBuY2VsbCA9IGRhcF9saXN0KGNlbGxsaXN0
LCBjZWxsdiwgbmNlbGwpOwogICAgICBuY2xhc3MgPSAoc3RybGVuKGFjdGlvbikgLSB2KSAvIDI7
CS8qIHRlbnRhdGl2ZSwgb3ZlcmVzdGltYXRlICovCiAgICAgIGNsYXNzdiA9IChpbnQgKikgZGFw
X21hbGxvYyhzaXplb2YoaW50KSAqIG5jbGFzcywgImRhdGFzZXQ6IGNsYXNzdiIpOwogICAgICBu
Y2xhc3MgPSBkYXBfbGlzdChhY3Rpb24gKyB2ICsgMSwgY2xhc3N2LCBuY2xhc3MpOwogICAgICBp
bmxldiA9IChpbnQgKikgZGFwX21hbGxvYyhzaXplb2YoaW50KSAqIG5jbGFzcywgImRhdGFzZXQ6
IGlubGV2Iik7CiAgICAgIG91dGxldiA9IChpbnQgKikgZGFwX21hbGxvYyhzaXplb2YoaW50KSAq
IG5jbGFzcywgImRhdGFzZXQ6IG91dGxldiIpOwogICAgICBzbGV2ZWxtZW0gPSAoY2hhciAqKikg
ZGFwX21hbGxvYyhzaXplb2YoY2hhciAqKSAqIG5jbGFzcyAqIGRhcF9tYXhsZXYsCgkJCQkgICAg
ICAgImRhdGFzZXQ6IHNsZXZlbG1lbSIpOwogICAgICBzbGV2ZWwgPSAoY2hhciAqKiopIGRhcF9t
YWxsb2Moc2l6ZW9mKGNoYXIgKiopICogbmNsYXNzLCAiZGF0YXNldDogc2xldmVsIik7CiAgICAg
IGRsZXZlbG1lbSA9IChkb3VibGUgKikgZGFwX21hbGxvYyhzaXplb2YoZG91YmxlKSAqIG5jbGFz
cyAqIGRhcF9tYXhsZXYsCgkJCQkJImRhdGFzZXQ6IGRsZXZlbG1lbSIpOwogICAgICBkbGV2ZWwg
PSAoZG91YmxlICoqKSBkYXBfbWFsbG9jKHNpemVvZihkb3VibGUgKikgKiBuY2xhc3MsCgkJCQkg
ICAgICAiZGF0YXNldDogZGxldmVsIik7CiAgICAgIGlsZXZlbG1lbSA9IChpbnQgKikgZGFwX21h
bGxvYyhzaXplb2YoaW50KSAqIG5jbGFzcyAqIGRhcF9tYXhsZXYsCgkJCQkgICAgICJkYXRhc2V0
OiBpbGV2ZWxtZW0iKTsKICAgICAgaWxldmVsID0gKGludCAqKikgZGFwX21hbGxvYyhzaXplb2Yo
aW50ICopICogbmNsYXNzLCAiZGF0YXNldDogaWxldmVsIik7CiAgICAgIG5sZXZlbHMgPSAoaW50
ICopIGRhcF9tYWxsb2Moc2l6ZW9mKGludCkgKiBuY2xhc3MsICJkYXRhc2V0OiBubGV2ZWxzIik7
CiAgICAgIGZvciAoYyA9IDA7IGMgPCBuY2xhc3M7IGMrKykKCXsKCSAgc2xldmVsW2NdID0gc2xl
dmVsbWVtICsgYyAqIGRhcF9tYXhsZXY7CgkgIGRsZXZlbFtjXSA9IGRsZXZlbG1lbSArIGMgKiBk
YXBfbWF4bGV2OwoJICBpbGV2ZWxbY10gPSBpbGV2ZWxtZW0gKyBjICogZGFwX21heGxldjsKCX0K
ICAgICAgb3V0c2V0KG5ld25hbWUsICIiKTsKICAgICAgZm9yIChjID0gMDsgYyA8IG5jbGFzczsg
YysrKQkvKiBzdGFydCB3aXRoIGVtcHR5IGxldmVsIGxpc3RzICovCglubGV2ZWxzW2NdID0gMDsK
ICAgICAgZm9yIChkYXBfbWFyaygpOyBzdGVwKCk7ICkKCXsKCSAgZm9yIChjID0gMDsgYyA8IG5j
bGFzczsgYysrKQoJICAgIHsKCSAgICAgIGlmICgodiA9IGZpbmRsZXYoY2xhc3N2W2NdLAoJCQkg
ICAgICAgZGxldmVsW2NdLCBpbGV2ZWxbY10sIHNsZXZlbFtjXSwgbmxldmVsc1tjXSkpIDwgMCkK
CQl7CS8qIGlmIG5vdCBmb3VuZCAqLwoJCSAgaWYgKG5sZXZlbHNbY10gPCBkYXBfbWF4bGV2KQoJ
CSAgICB7CgkJICAgICAgaWYgKGRhcF9vYnNbZGFwX29ub10uZG9fbGVuW2NsYXNzdltjXV0gPT0g
REJMKQoJCQl7CgkJCSAgZGxldmVsW2NdW25sZXZlbHNbY10rK10gPQoJCQkgICAgZGFwX29ic1tk
YXBfb25vXS5kb19kYmxbY2xhc3N2W2NdXTsKCQkJfQoJCSAgICAgIGVsc2UgaWYgKGRhcF9vYnNb
ZGFwX29ub10uZG9fbGVuW2NsYXNzdltjXV0gPT0gSU5UKQoJCQl7CgkJCSAgaWxldmVsW2NdW25s
ZXZlbHNbY10rK10gPQoJCQkgICAgZGFwX29ic1tkYXBfb25vXS5kb19pbnRbY2xhc3N2W2NdXTsK
CQkJfQoJCSAgICAgIGVsc2UKCQkJewoJCQkgIHNsZXZlbFtjXVtubGV2ZWxzW2NdXSA9CgkJCSAg
ICBkYXBfbWFsbG9jKHN0cmxlbihkYXBfb2JzW2RhcF9vbm9dLmRvX3N0cltjbGFzc3ZbY11dKSAr
IDEsCgkJCQkgICAgICAgImRhdGFzZXQ6IHNsZXZlbFtjXVtubGV2ZWxzW2NdXSIpOwoJCQkgIHN0
cmNweShzbGV2ZWxbY11bbmxldmVsc1tjXSsrXSwKCQkJCSBkYXBfb2JzW2RhcF9vbm9dLmRvX3N0
cltjbGFzc3ZbY11dKTsKCQkJfQoJCSAgICB9CgkJICBlbHNlCgkJICAgIHsKCQkgICAgICBmcHJp
bnRmKGRhcF9lcnIsCgkJCSAgICAgICIoZGF0YXNldCkgdG9vIG1hbnkgbGV2ZWxzIGZvciBcJXNc
biIsCgkJCSAgICAgIGRhcF9vYnNbZGFwX29ub10uZG9fbmFtW2NsYXNzdltjXV0pOwoJCSAgICAg
IGV4aXQoMSk7CgkJICAgIH0KCQl9CgkgICAgfQoJfQogICAgICBmb3IgKGMgPSAwOyBjIDwgbmNs
YXNzOyBjKyspCgl7CgkgIGlmIChkYXBfb2JzW2RhcF9vbm9dLmRvX2xlbltjbGFzc3ZbY11dID09
IERCTCkKCSAgICBxc29ydChkbGV2ZWxbY10sIG5sZXZlbHNbY10sIHNpemVvZihkb3VibGUpLCBk
Y21wKTsKCSAgZWxzZSBpZiAoZGFwX29ic1tkYXBfb25vXS5kb19sZW5bY2xhc3N2W2NdXSA9PSBJ
TlQpCgkgICAgcXNvcnQoaWxldmVsW2NdLCBubGV2ZWxzW2NdLCBzaXplb2YoaW50KSwgaWNtcCk7
CgkgIGVsc2UKCSAgICBxc29ydChzbGV2ZWxbY10sIG5sZXZlbHNbY10sIHNpemVvZihjaGFyICop
LCBzY21wKTsKCSAgb3V0bGV2W2NdID0gMDsKCX0KICAgICAgZGFwX3Jld2luZCgpOwkvKiBnbyBi
YWNrIHRvIGJlZ2lubmluZyBvZiBwYXJ0ICovCiAgICAgIHdoaWxlIChzdGVwKCkpCgl7CgkgIGZv
ciAoYyA9IDA7IGMgPCBuY2xhc3M7IGMrKykKCSAgICB7CgkgICAgICBpbmxldltjXSA9IGZpbmRs
ZXYoY2xhc3N2W2NdLCBkbGV2ZWxbY10sIGlsZXZlbFtjXSwgc2xldmVsW2NdLAoJCQkJIG5sZXZl
bHNbY10pOwoJICAgIH0KCSAgZm9yIChjID0gMDsgYyA8IG5jbGFzczsgYysrKQoJICAgIHsKCSAg
ICAgIGlmIChvdXRsZXZbY10gPCBpbmxldltjXSkKCQlicmVhazsKCSAgICB9CgkgIGlmIChjIDwg
bmNsYXNzKQkvKiBza2lwcGVkIHZhbHVlcyBmb3IgY2xhc3MgYyAqLwoJICAgIHsKCSAgICAgIGRh
cF9zYXZlKCk7CgkgICAgICBmb3IgKHYgPSAwOyB2IDwgbmNlbGw7IHYrKykJLyogc2V0IGNlbGwg
dmFscyAqLwoJCXsJLyogc2V0IHZhbHVlcyB0byAwLjAsIDAsIG9yICIiICovCgkJICBpZiAoZGFw
X29ic1tkYXBfb25vXS5kb19sZW5bY2VsbHZbdl1dID09IERCTCkKCQkgICAgZGFwX29ic1tkYXBf
b25vXS5kb19kYmxbY2VsbHZbdl1dID0gMC4wOwoJCSAgZWxzZSBpZiAoZGFwX29ic1tkYXBfb25v
XS5kb19sZW5bY2VsbHZbdl1dID09IElOVCkKCQkgICAgZGFwX29ic1tkYXBfb25vXS5kb19pbnRb
Y2VsbHZbdl1dID0gMDsKCQkgIGVsc2UKCQkgICAgZGFwX29ic1tkYXBfb25vXS5kb19zdHJbY2Vs
bHZbdl1dWzBdID0gJ1wwJzsKCQl9CgkgICAgICBkbwl7CgkJZm9yIChjID0gMDsgYyA8IG5jbGFz
czsgYysrKQoJCSAgewoJCSAgICBpZiAob3V0bGV2W2NdIDwgaW5sZXZbY10pCgkJICAgICAgYnJl
YWs7CgkJICB9CgkJaWYgKGMgPT0gbmNsYXNzKQkvKiBjYXVnaHQgdXAgKi8KCQkgIGJyZWFrOwoJ
CWZvciAodiA9IGM7IHYgPCBuY2xhc3M7IHYrKykKCQkgIHsKCQkgICAgaWYgKGRhcF9vYnNbZGFw
X29ub10uZG9fbGVuW2NsYXNzdlt2XV0gPT0gREJMKQoJCSAgICAgIGRhcF9vYnNbZGFwX29ub10u
ZG9fZGJsW2NsYXNzdlt2XV0gPQoJCQlkbGV2ZWxbdl1bb3V0bGV2W3ZdXTsKCQkgICAgZWxzZSBp
ZiAoZGFwX29ic1tkYXBfb25vXS5kb19sZW5bY2xhc3N2W3ZdXSA9PSBJTlQpCgkJICAgICAgZGFw
X29ic1tkYXBfb25vXS5kb19pbnRbY2xhc3N2W3ZdXSA9CgkJCWlsZXZlbFt2XVtvdXRsZXZbdl1d
OwoJCSAgICBlbHNlCgkJICAgICAgc3RyY3B5KGRhcF9vYnNbZGFwX29ub10uZG9fc3RyW2NsYXNz
dlt2XV0sCgkJCSAgICAgc2xldmVsW3ZdW291dGxldlt2XV0pOwoJCSAgfQoJCW91dHB1dCgpOwoJ
ICAgICAgfSB3aGlsZSAoaW5jbGV2KG91dGxldiwgbmxldmVscywgbmNsYXNzKSk7CgkgICAgICBk
YXBfcmVzdCgpOwoJICAgIH0KCSAgb3V0cHV0KCk7CgkgIGluY2xldihvdXRsZXYsIG5sZXZlbHMs
IG5jbGFzcyk7Cgl9CiAgICAgIGZvciAoYyA9IDA7IGMgPCBuY2xhc3M7IGMrKykJLyogZW1wdHkg
dGhlIGxldmVsIGxpc3RzICovCgl7CgkgIGZvciAodiA9IDA7IHYgPCBubGV2ZWxzW2NdOyB2Kysp
CgkgICAgewoJICAgICAgaWYgKGRhcF9vYnNbZGFwX29ub10uZG9fbGVuW2NsYXNzdltjXV0gPiAw
KQoJCWRhcF9mcmVlKHNsZXZlbFtjXVt2XSwgImRhdGFzZXQ6IHNsZXZlbFtjXVt2XSIpOwoJICAg
IH0KCSAgbmxldmVsc1tjXSA9IDA7Cgl9CiAgICB9CiAgZWxzZSBpZiAoIXN0cmNtcChhY3Rpb24s
ICJSRU1PVkUiKSkKICAgIHsKICAgICAgaWYgKG9sZG5hbWVbMF0gPT0gJzwnKQoJewoJICBmb3Ig
KGZvbGQgPSAwOyBmb2xkIDwgZGFwX25yZmlsZXM7IGZvbGQrKykKCSAgICB7CgkgICAgICBpZiAo
IXN0cmNtcChkZmlsZVtOREZJTEVTICsgZm9sZF0uZGZpbGVfbmFtZSwgb2xkbmFtZSArIDEpKQoJ
CXsKCQkgIGRhcF9mcmVlKGRmaWxlW05ERklMRVMgKyBmb2xkXS5kZmlsZV9uYW1lLAoJCQkgICAi
ZGF0YXNldDogZGZpbGVbTkRGSUxFUyArIGZvbGRdLmRmaWxlX25hbWUiKTsKCQkgIGRmaWxlW05E
RklMRVMgKyBmb2xkXS5kZmlsZV9uYW1lID0gTlVMTDsKCQkgIGRhcF9mcmVlKHJmaWxlW2ZvbGRd
LnJmaWxlX3N0ciwKCQkJICAgImRhdGFzZXQ6IHJmaWxlW2ZvbGRdLnJmaWxlX3N0ciIpOwoJCSAg
YnJlYWs7CgkJfQoJICAgIH0KCX0KICAgICAgZWxzZQoJdW5saW5rKGRvbGQpOwogICAgfQogIGVs
c2UgaWYgKCFzdHJjbXAoYWN0aW9uLCAiQVBQRU5EIikpCiAgICB7CiAgICAgIGlmICghKGRhcF9v
dXRbMF0gPSBkZm9wZW4obmV3bmFtZSwgInIiKSkpCS8qIG5vIGRhdGFzZXQgdG8gYXBwZW5kIHRv
Li4uICovCgl7CQkJCS8qIC4uLnNvIGp1c3QgY29weS4gKi8KCSAgaWYgKCEoZGFwX291dFswXSA9
IGRmb3BlbihuZXduYW1lLCAidyIpKSkKCSAgICB7CgkgICAgICBmcHJpbnRmKGRhcF9lcnIsCgkJ
ICAgICAgIihkYXRhc2V0KSBDYW4ndCBjcmVhdGUgbmV3IGRhdGEgc2V0IGZvciBhcHBlbmQ6ICVz
XG4iLAoJCSAgICAgIG5ld25hbWUpOwoJICAgICAgZXhpdCgxKTsKCSAgICB9CgkgIGlmICghKGRh
cF9pblswXSA9IGRmb3BlbihvbGRuYW1lLCAiciIpKSkKCSAgICB7CgkgICAgICBmcHJpbnRmKGRh
cF9lcnIsCgkJICAgICAgIihkYXRhc2V0KSBjYW4ndCByZWFkIG9sZCBkYXRhIHNldCBmb3IgYXBw
ZW5kOiAlc1xuIiwKCQkgICAgICBvbGRuYW1lKTsKCSAgICAgIGV4aXQoMSk7CgkgICAgfQoJICB3
aGlsZSAoKGMgPSBkZ2V0YyhkYXBfaW5bMF0pKSAhPSBFT0YpCgkgICAgZGFwX3B1dGMoYywgZGFw
X291dFswXSk7CgkgIGRmY2xvc2UoZGFwX2luWzBdKTsKCSAgZGFwX2luWzBdID0gKERGSUxFICop
IE5VTEw7CgkgIGRmY2xvc2UoZGFwX291dFswXSk7CgkgIGRhcF9vdXRbMF0gPSAoREZJTEUgKikg
TlVMTDsKCSAgcmV0dXJuOwoJfQogICAgICBlbHNlCQkJCS8qIHJlYWxseSBhcHBlbmQgKi8KCXsK
CSAgaW5zZXQobmV3bmFtZSk7CQkJLyogdG8gZ2V0IHZhcmlhYmxlIGxpc3QgKi8KCSAgb3V0c2V0
KCJkYXBfbnVsbCIsICIiKTsJCS8qIHNvIGRvbid0IG91dHB1dCBhbnl3aGVyZSAqLwoJICBiYXNl
b2JzLmRvX252YXIgPSBkYXBfb2JzWzBdLmRvX252YXI7CS8qIHNhdmUgbmV3bmFtZSdzIG52YXIg
Ki8KCSAgZm9yICh2ID0gMDsgdiA8IGJhc2VvYnMuZG9fbnZhcjsgdisrKQoJICAgIHsJCQkvKiBj
b3B5IG5hbWVzLCBsZW5zIGZyb20gbmV3bmFtZSAqLwoJICAgICAgYmFzZW9icy5kb19sZW5bdl0g
PSBkYXBfb2JzWzBdLmRvX2xlblt2XTsKCSAgICAgIGJhc2VvYnMuZG9fbmFtW3ZdID0gZGFwX21h
bGxvYyhzdHJsZW4oZGFwX29ic1swXS5kb19uYW1bdl0pICsgMSwKCQkJCQkgICAgICJkYXRhc2V0
OiBiYXNlb2JzLmRvX25hbVt2XSIpOwoJICAgICAgc3RyY3B5KGJhc2VvYnMuZG9fbmFtW3ZdLCBk
YXBfb2JzWzBdLmRvX25hbVt2XSk7CgkgICAgfQoJICBkZmNsb3NlKGRhcF9vdXRbMF0pOwoJICBk
YXBfb3V0WzBdID0gKERGSUxFICopIE5VTEw7CgkgIGluc2V0KG9sZG5hbWUpOwkJLyogb3BlbiAi
b2xkIiBkYXRhc2V0IHRvIGFwcGVuZCB0byBuZXduYW1lICovCgkgIGRhcF9vYnNbMF0uZG9fb3Zh
ciA9IDA7CgkgIGZvciAodiA9IDAsIG1heG5hbWxlbiA9IDA7IHYgPCBiYXNlb2JzLmRvX252YXI7
IHYrKykKCSAgICB7CQkvKiBmaW5kIGxvbmdlc3QgbmFtZSBsZW5ndGggaW4gbmV3bmFtZSAqLwoJ
ICAgICAgaWYgKG1heG5hbWxlbiA8IHN0cmxlbihiYXNlb2JzLmRvX25hbVt2XSkpCgkJbWF4bmFt
bGVuID0gc3RybGVuKGJhc2VvYnMuZG9fbmFtW3ZdKTsKCSAgICB9CgkgIC8qIHNldCB1cCBmb3Ig
c3BlY2lmaWNhdGlvbiBmb3IgZGVjbGFyYXRpb24gb2YgdGhvc2UgdmFyaWFibGVzIGluCgkgICAq
IG5ld25hbWUgdGhhdCBhcmUgbm90IGluIG9sZG5hbWUKCSAgICovCgkgIHZhcnNwZWMgPSBkYXBf
bWFsbG9jKG1heG5hbWxlbiArIGRhcF9pbnRsZW4gKyAyLAoJCQkgICAgICAgImRhdGFzZXQ6IHZh
cnNwZWMiKTsKCSAgY2xlYXJ2YXIgPSAoaW50ICopIGRhcF9tYWxsb2Moc2l6ZW9mKGludCkgKiBi
YXNlb2JzLmRvX252YXIsCgkJCQkJImRhdGFzZXQ6IGNsZWFydmFyIik7CgkgIGZvciAodiA9IDAs
IG5jbGVhciA9IDA7IHYgPCBiYXNlb2JzLmRvX252YXI7IHYrKykKCSAgICB7CgkgICAgICBpZiAo
KG9udW0gPSBkYXBfdmFybnVtKGJhc2VvYnMuZG9fbmFtW3ZdKSkgPCAwKQoJCXsJLyogZ2V0IGlu
ZGV4IGluIG9sZG5hbWUgKi8KCQkJCS8qIGlmIG5vbmUgZ2l2ZSBpdCBuZXduYW1lJ3Mgc3BlY3Mg
Zm9yIGl0ICovCgkJICBzcHJpbnRmKHZhcnNwZWMsICIlcyAlZCIsIGJhc2VvYnMuZG9fbmFtW3Zd
LAoJCQkgIGJhc2VvYnMuZG9fbGVuW3ZdKTsKCQkgIG9udW0gPSBkYXBfdmQodmFyc3BlYywgMCk7
CgkJCQkvKiBtYXJrIGZvciBzZXR0aW5nIHRvICIiLCAwLCBhbmQgMC4wICovCgkJICBjbGVhcnZh
cltuY2xlYXIrK10gPSBvbnVtOwoJCX0KCSAgICAgIGVsc2UJCS8qIGlmIGl0J3MgdGhlcmUsIGNo
ZWNrIHR5cGUsIGxlbiAqLwoJCXsKCQkgIGlmIChkYXBfb2JzWzBdLmRvX2xlbltvbnVtXSAhPSBi
YXNlb2JzLmRvX2xlblt2XSkKCQkgICAgewoJCSAgICAgIGZwcmludGYoc3RkZXJyLAoJCQkgICAg
ICAiKGRhdGFzZXQpIHZhcmlhYmxlICVzIGhhcyBkaWZmZXJlbnQgbGVuZ3RocyAoJWQgYXBwZW5k
ZWQgdG8gJWQpIGluIGRhdGFzZXRzXG4iLAoJCQkgICAgICBiYXNlb2JzLmRvX25hbVt2XSwgZGFw
X29ic1swXS5kb19sZW5bb251bV0sCgkJCSAgICAgIGJhc2VvYnMuZG9fbGVuW3ZdKTsKCQkgICAg
ICBleGl0KDEpOwoJCSAgICB9CgkJfQoJICAgICAgZGFwX29ic1swXS5kb19vdXRbZGFwX29ic1sw
XS5kb19vdmFyKytdID0gb251bTsKCSAgICB9CgkgIGlmICghKGRhcF9vdXRbMF0gPSBkZm9wZW4o
bmV3bmFtZSwgImEiKSkpCgkgICAgewoJICAgICAgZnByaW50ZihkYXBfZXJyLCAiKGRhdGFzZXQp
IGNhbid0IGFwcGVuZCB0byBuZXcgZGF0YSBzZXQ6ICVzXG4iLAoJCSAgICAgIG5ld25hbWUpOwoJ
ICAgICAgZXhpdCgxKTsKCSAgICB9CgkgIHdoaWxlIChzdGVwKCkpCgkgICAgewoJICAgICAgLyog
YW5kIHNldCB0byAiIiwgMCwgYW5kIDAuMCAqLwoJICAgICAgZm9yICh2ID0gMDsgdiA8IG5jbGVh
cjsgdisrKQoJCXsKCQkgIGlmIChkYXBfb2JzWzBdLmRvX3N0cltjbGVhcnZhclt2XV0pCgkJICAg
IGRhcF9vYnNbMF0uZG9fc3RyW2NsZWFydmFyW3ZdXVswXSA9ICdcMCc7CgkJICBkYXBfb2JzWzBd
LmRvX3NsW2NsZWFydmFyW3ZdXSA9IDA7CgkJICBkYXBfb2JzWzBdLmRvX2ludFtjbGVhcnZhclt2
XV0gPSAwOwoJCSAgZGFwX29ic1swXS5kb19kYmxbY2xlYXJ2YXJbdl1dID0gMC4wOwoJCX0KCSAg
ICAgIG91dHB1dCgpOwoJICAgIH0KCSAgZm9yICh2ID0gMDsgdiA8IGJhc2VvYnMuZG9fbnZhcjsg
disrKQoJICAgIHsKCSAgICAgIGRhcF9mcmVlKGJhc2VvYnMuZG9fbmFtW3ZdLCAiZGF0YXNldDog
YmFzZW9icy5kb19uYW1bdl0iKTsKCSAgICAgIGJhc2VvYnMuZG9fbmFtW3ZdID0gTlVMTDsKCSAg
ICB9CgkgIGRhcF9mcmVlKHZhcnNwZWMsICJkYXRhc2V0OiB2YXJzcGVjIik7Cgl9CiAgICB9CiAg
ZWxzZQogICAgewogICAgICBmcHJpbnRmKGRhcF9lcnIsICIoZGF0YXNldCkgdW5rbm93biBhY3Rp
b246ICVzXG4iLCBhY3Rpb24pOwogICAgICBleGl0KDEpOwogICAgfQogIGRhcF9mcmVlKGRvbGQs
ICJkYXRhc2V0OiBkb2xkIik7CiAgZGFwX2ZyZWUoZG5ldywgImRhdGFzZXQ6IGRuZXciKTsKICBk
YXBfZnJlZShvbGR2bWVtLCAiZGF0YXNldDogb2xkdm1lbSIpOwogIGRhcF9mcmVlKG9sZHZhciwg
ImRhdGFzZXQ6IG9sZHZhciIpOwogIGRhcF9mcmVlKG5ld3ZtZW0sICJkYXRhc2V0OiBuZXd2bWVt
Iik7CiAgZGFwX2ZyZWUobmV3dmFyLCAiZGF0YXNldDogbmV3dmFyIik7CiAgZGFwX2ZyZWUob3V0
bGlzdCwgImRhdGFzZXQ6IG91dGxpc3QiKTsKICBpZiAoY2xlYXJ2YXIpCiAgICBkYXBfZnJlZShj
bGVhcnZhciwgImRhdGFzZXQ6IGNsZWFydmFyIik7CiAgaWYgKGNlbGxsaXN0KQogICAgZGFwX2Zy
ZWUoY2VsbGxpc3QsICJkYXRhc2V0OiBjZWxsbGlzdCIpOwogIGlmIChjZWxsdikKICAgIGRhcF9m
cmVlKGNlbGx2LCAiZGF0YXNldDogY2VsbHYiKTsKICBpZiAoY2xhc3N2KQogICAgZGFwX2ZyZWUo
Y2xhc3N2LCAiZGF0YXNldDogY2xhc3N2Iik7CiAgaWYgKHNsZXZlbG1lbSkJLyogYWxsIG9mIHRo
ZXNlIGFsbG9jYXRlZCBmb3IgRklMTCAqLwogICAgewogICAgICBkYXBfZnJlZShzbGV2ZWxtZW0s
ICJkYXRhc2V0OiBzbGV2ZWxtZW0iKTsKICAgICAgZGFwX2ZyZWUoc2xldmVsLCAiZGF0YXNldDog
c2xldmVsIik7CiAgICAgIGRhcF9mcmVlKGRsZXZlbG1lbSwgImRhdGFzZXQ6IGRsZXZlbG1lbSIp
OwogICAgICBkYXBfZnJlZShkbGV2ZWwsICJkYXRhc2V0OiBkbGV2ZWwiKTsKICAgICAgZGFwX2Zy
ZWUoaWxldmVsbWVtLCAiZGF0YXNldDogaWxldmVsbWVtIik7CiAgICAgIGRhcF9mcmVlKGlsZXZl
bCwgImRhdGFzZXQ6IGlsZXZlbCIpOwogICAgICBkYXBfZnJlZShpbmxldiwgImRhdGFzZXQ6IGlu
bGV2Iik7CiAgICAgIGRhcF9mcmVlKG91dGxldiwgImRhdGFzZXQ6IG91dGxldiIpOwogICAgICBk
YXBfZnJlZShubGV2ZWxzLCAiZGF0YXNldDogbmxldmVscyIpOwogICAgfQp9CgojZGVmaW5lIEJM
T0NLTEVOIDMyCgpzdGF0aWMgaW50IGdldGJsb2NrKERGSUxFICpmcCkKewogIGNoYXIgYmxvY2tb
QkxPQ0tMRU5dOwogIGludCBiOwoKICBpZiAoKGJsb2NrWzBdID0gZGdldGMoZnApKSA9PSAnXHIn
KQogICAgcmV0dXJuIDA7CiAgZm9yIChiID0gMTsgYiA8IEJMT0NLTEVOOyBiKyspCiAgICBibG9j
a1tiXSA9IGRnZXRjKGZwKTsKICByZXR1cm4gKGJsb2NrWzE2XSAmIDB4ZmYpOwp9CgppbnQgZGFw
X2NsZWFyb2JzKGNoYXIgKnZhcnNwZWMpCnsKICBpbnQgdjsKCiAgaWYgKGRhcF9vbm8gPCAyKQog
ICAgewogICAgICBkYXBfcHJldltkYXBfb25vXS5kb19pdmFyID0gMDsKICAgICAgZW9mW2RhcF9v
bm9dID0gMDsKICAgICAgZm9yICh2ID0gMDsgdiA8IGRhcF9tYXh2YXI7IHYrKykKCXsKCSAgaWYg
KGRhcF9wcmV2W2RhcF9vbm9dLmRvX3N0clt2XSkKCSAgICBkYXBfZnJlZShkYXBfcHJldltkYXBf
b25vXS5kb19zdHJbdl0sCgkJICAgICAiY2xlYXJvYnM6IGRhcF9wcmV2W2RhcF9vbm9dLmRvX3N0
clt2XSIpOwoJICBkYXBfcHJldltkYXBfb25vXS5kb19zdHJbdl0gPSBOVUxMOwoJfQogICAgfQog
IGRhcF9vYnNbZGFwX29ub10uZG9faXZhciA9IDA7CiAgZGFwX29ic1tkYXBfb25vXS5kb19vdmFy
ID0gMDsKICBkYXBfb2JzW2RhcF9vbm9dLmRvX252YXIgPSAwOwogIGRhcF9vYnNbZGFwX29ub10u
ZG9fdmFsaWQgPSAwOwogIGZvciAodiA9IDA7IHYgPCBkYXBfbWF4dmFyOyB2KyspCiAgICB7CiAg
ICAgIGlmIChkYXBfb2JzW2RhcF9vbm9dLmRvX25hbVt2XSkKCWRhcF9mcmVlKGRhcF9vYnNbZGFw
X29ub10uZG9fbmFtW3ZdLAoJCSAiY2xlYXJvYnM6IGRhcF9vYnNbZGFwX29ub10uZG9fbmFtW3Zd
Iik7CiAgICAgIGRhcF9vYnNbZGFwX29ub10uZG9fbmFtW3ZdID0gTlVMTDsKICAgICAgZGFwX29i
c1tkYXBfb25vXS5kb19kbFt2XSA9IE5VTEw7CiAgICAgIGRhcF9vYnNbZGFwX29ub10uZG9faWxb
dl0gPSBOVUxMOwogICAgICBpZiAoIWRhcF9vYnNbZGFwX29ub10uZG9fc2xbdl0gJiYgZGFwX29i
c1tkYXBfb25vXS5kb19zdHJbdl0pCglkYXBfZnJlZShkYXBfb2JzW2RhcF9vbm9dLmRvX3N0clt2
XSwKCQkgImNsZWFyb2JzOiBkYXBfb2JzW2RhcF9vbm9dLmRvX3N0clt2XSIpOwogICAgICBkYXBf
b2JzW2RhcF9vbm9dLmRvX3N0clt2XSA9IE5VTEw7CiAgICAgIGRhcF9vYnNbZGFwX29ub10uZG9f
c2xbdl0gPSAwOwogICAgfQogIGlmICh2YXJzcGVjKQogICAgZGFwX3ZkKHZhcnNwZWMsIDEpOwog
IGVsc2UKICAgIGRhcF92ZCgiX3R5cGVfIDgiLCAwKTsKICBpZiAoKHYgPSBkYXBfdmFybnVtKCJf
dHlwZV8iKSkgPCAwKQogICAgewogICAgICBmcHV0cygiKGNsZWFyb2JzKSBtaXNzaW5nIF90eXBl
XyB2YXJpYWJsZVxuIiwgZGFwX2Vycik7CiAgICAgIGV4aXQoMSk7CiAgICB9CiAgZGFwX29ic1tk
YXBfb25vXS5kb19vdXRbZGFwX29ic1tkYXBfb25vXS5kb19vdmFyKytdID0gdjsKICByZXR1cm4g
djsKfQoKdm9pZCBpbmZpbGUoY2hhciAqaWZuYW1lLCBjaGFyICppZGVsaW0pCnsKICBzdGF0aWMg
aW50IGluZmluaXQgPSAwOwogIGludCB2OwogIGludCBkOwogIGludCBpbmZsZGxlbjsKICBjaGFy
ICpmbmFtZTsKICBzdGF0aWMgY2hhciAqZGVsaW07CiAgc3RhdGljIGludCBkZWxpbWxlbjsKCiAg
aWYgKCFpbmZpbml0KQogICAgewogICAgICBpbmZpbml0ID0gMTsKICAgICAgZGVsaW1sZW4gPSAo
ZGFwX2xpbmVsZW4gKyAxKSAvIDggLSAxOwogICAgICBkZWxpbSA9IGRhcF9tYWxsb2MoZGVsaW1s
ZW4gKyAxLCAiaW5maWxlOiBkZWxpbSIpOwogICAgICBmaWVsZHdkID0gKGludCAqKSBkYXBfbWFs
bG9jKHNpemVvZihpbnQpICogZGFwX21heHZhciwgImluZmlsZTogZmllbGR3ZCIpOwogICAgfQog
IGlmIChkYXBfaW5bZGFwX29ub10pCiAgICB7CiAgICAgIGRmY2xvc2UoZGFwX2luW2RhcF9vbm9d
KTsKICAgICAgZGFwX2luW2RhcF9vbm9dID0gKERGSUxFICopIE5VTEw7CiAgICB9CiAgaWYgKGRh
cF9vdXRbZGFwX29ub10pCiAgICB7CiAgICAgIGRmY2xvc2UoZGFwX291dFtkYXBfb25vXSk7CiAg
ICAgIGRhcF9vdXRbZGFwX29ub10gPSAoREZJTEUgKikgTlVMTDsKICAgIH0KICBpZiAoIWlmbmFt
ZSB8fCAhaWZuYW1lWzBdKQogICAgewogICAgICBmbmFtZSA9ICIvZGV2L251bGwiOwogICAgICBz
dHJjcHkoZGVsaW0sICJ8Iik7CiAgICB9CiAgZWxzZQogICAgewogICAgICBmbmFtZSA9IGlmbmFt
ZTsKICAgICAgaWYgKCFpZGVsaW0gfHwgIWlkZWxpbVswXSkKCXsKCSAgZnByaW50ZihkYXBfZXJy
LAoJCSAgIihpbmZpbGUpIERlbGltaXRlciBzdHJpbmcgbXVzdCBiZSBhdCBsZWFzdCBvbmUgY2hh
cmFjdGVyOiAlc1xuIiwKCQkgIGRlbGltKTsKCSAgZXhpdCgxKTsKCX0KICAgICAgZWxzZSBpZiAo
c3RybGVuKGlkZWxpbSkgPD0gZGVsaW1sZW4pCglzdHJjcHkoZGVsaW0sIGlkZWxpbSk7CiAgICAg
IGVsc2UKCXsKCSAgZnByaW50ZihkYXBfZXJyLAoJCSAgIihpbmZpbGUpIERlbGltaXRlciBzdHJp
bmcgdG9vIGxvbmc6ICVzXG4iLCBpZGVsaW0pOwoJICBleGl0KDEpOwoJfQogICAgfQogIC8qIHRo
ZSAnZicgc2F5cyB0aGF0IGl0J3Mgbm90IGEgZGF0YXNldCwgc28gZG9uJ3QgbmVlZCB0byBwcmVw
ZW5kIGRpcmVjdG9yeSAqLwogIGlmICghKGRhcF9pbltkYXBfb25vXSA9IGRmb3BlbihmbmFtZSwg
InJmIikpKQogICAgewogICAgICBmcHJpbnRmKGRhcF9lcnIsICIoaW5maWxlKSBjYW4ndCByZWFk
IGRhdGEgZmlsZTogJXNcbiIsIGZuYW1lKTsKICAgICAgZXhpdCgxKTsKICAgIH0KICBpbnR5cGUg
PSBURVhUOwogIGlmICghc3RyY21wKGZuYW1lICsgc3RybGVuKGZuYW1lKSAtIDQsICIuZGJmIikp
CiAgICB7CiAgICAgIGludHlwZSA9IERCQVNFOwogICAgICBnZXRibG9jayhkYXBfaW5bZGFwX29u
b10pOyAgICAgLyogZHVtcCBoZWFkZXIgKi8KICAgICAgZm9yIChpbmxlbiA9IDA7IChpbmZsZGxl
biA9IGdldGJsb2NrKGRhcF9pbltkYXBfb25vXSkpOyBpbmxlbiArPSBpbmZsZGxlbikKCTsKICAg
IH0KICBkYXBfZGVsaW0gPSBkZWxpbVswXTsKICBmb3IgKG5maWVsZHMgPSAwLCBkID0gMTsgZGVs
aW1bZF07IG5maWVsZHMrKykKICAgIHsKICAgICAgaWYgKG5maWVsZHMgPCBkYXBfbWF4dmFyKQoJ
ewoJICBmb3IgKGZpZWxkd2RbbmZpZWxkc10gPSAwOyBkZWxpbVtkXSAmJiBkZWxpbVtkXSAhPSBk
YXBfZGVsaW07ICkKCSAgICBmaWVsZHdkW25maWVsZHNdID0gMTAgKiBmaWVsZHdkW25maWVsZHNd
ICsgZGVsaW1bZCsrXSAtICcwJzsKCSAgaWYgKGRlbGltW2RdKQoJICAgIGQrKzsKCX0KICAgICAg
ZWxzZQoJewoJICBmcHV0cygiKGluZmlsZSkgdG9vIG1hbnkgZmllbGQgd2lkdGggc3BlY2lmaWVy
cy5cbiIsIGRhcF9lcnIpOwoJICBleGl0KDEpOwoJfQogICAgfQogIHYgPSBkYXBfY2xlYXJvYnMo
KGNoYXIgKikgTlVMTCk7CiAgc3RyY3B5KGRhcF9vYnNbZGFwX29ub10uZG9fc3RyW3ZdLCAiT0JT
Iik7CiAgbGluZW5vW2RhcF9vbm9dID0gMTsKICB0b29sb25nID0gMDsKfQoKdm9pZCBpbnB1dChj
aGFyIHZhcmxpc3RbXSkKewogIGludCB2OwogIGludCBsOwogIGludCBpOwogIHN0YXRpYyBjaGFy
ICp2bmFtZSA9IE5VTEw7CiAgaW50IGRpbTsKICBpbnQgZDsKCiAgaWYgKCF2bmFtZSkKICAgIHZu
YW1lID0gZGFwX21hbGxvYyhkYXBfbmFtZWxlbiArIDEsICJpbnB1dDogdm5hbWUiKTsKICBmb3Ig
KGwgPSAwOyB2YXJsaXN0W2xdID09ICcgJzsgbCsrKQogICAgOwogIHdoaWxlICh2YXJsaXN0W2xd
KQogICAgewogICAgICBmb3IgKGkgPSAwOyB2YXJsaXN0W2wgKyBpXSAmJiB2YXJsaXN0W2wgKyBp
XSAhPSAnICc7IGkrKykKCXsKCSAgaWYgKGkgPCBkYXBfbmFtZWxlbikKCSAgICB2bmFtZVtpXSA9
IHZhcmxpc3RbbCArIGldOwoJICBlbHNlCgkgICAgewoJICAgICAgdm5hbWVbaV0gPSAnXDAnOwoJ
ICAgICAgZnByaW50ZihkYXBfZXJyLCAiKGlucHV0KSB2YXJpYWJsZSBuYW1lIHRvbyBsb25nOiAl
c1xuIiwgdm5hbWUpOwoJICAgICAgZXhpdCgxKTsKCSAgICB9Cgl9CiAgICAgIHZuYW1lW2ldID0g
J1wwJzsKICAgICAgaWYgKCh2ID0gZGFwX3Zhcm51bSh2bmFtZSkpID49IDApCglkYXBfb2JzW2Rh
cF9vbm9dLmRvX2luW2RhcF9vYnNbZGFwX29ub10uZG9faXZhcisrXSA9IHY7CiAgICAgIGVsc2Ug
aWYgKCh2ID0gZGFwX2Fycm51bSh2bmFtZSwgJmRpbSkpID49IDApCgl7CgkgIGZvciAoZCA9IDA7
IGQgPCBkaW07IGQrKykKCSAgICBkYXBfb2JzW2RhcF9vbm9dLmRvX2luW2RhcF9vYnNbZGFwX29u
b10uZG9faXZhcisrXSA9IHYgKyBkOwoJfQogICAgICBlbHNlCgl7CgkgIGZwcmludGYoZGFwX2Vy
ciwgIihpbnB1dCkgdW5rbm93biB2YXJpYWJsZTogJXNcbiIsIHZuYW1lKTsKCSAgZXhpdCgxKTsK
CX0KICAgICAgbCArPSBpOwogICAgICB3aGlsZSAodmFybGlzdFtsXSA9PSAnICcpCglsKys7CiAg
ICB9Cn0KCi8qIG9wZW4gYW4gaW5wdXQgZGF0YXNldCBuYW1lZCBmbmFtZTsgaWYgZm5hbWUgaXMg
TlVMTCwganVzdCBjbG9zZSB0aGUgb3BlbiBpbnB1dCBkYXRhc2V0ICovCnZvaWQgaW5zZXQoY2hh
ciAqZm5hbWUpCnsKICBpbnQgdjsKICBzdGF0aWMgY2hhciAqdmFyc3BlYyA9IE5VTEw7CiAgZG91
YmxlIHRlc3RkOwoKICBpZiAoIXZhcnNwZWMpCiAgICB2YXJzcGVjID0gZGFwX21hbGxvYyhkYXBf
bGluZWxlbiArIDEsICJpbnNldDogdmFyc3BlYyIpOwogIGlmIChkYXBfaW5bZGFwX29ub10pCiAg
ICB7CiAgICAgIGRmY2xvc2UoZGFwX2luW2RhcF9vbm9dKTsKICAgICAgZGFwX2luW2RhcF9vbm9d
ID0gKERGSUxFICopIE5VTEw7CiAgICB9CiAgaWYgKGRhcF9vdXRbZGFwX29ub10pCiAgICB7CiAg
ICAgIGRmY2xvc2UoZGFwX291dFtkYXBfb25vXSk7CiAgICAgIGRhcF9vdXRbZGFwX29ub10gPSAo
REZJTEUgKikgTlVMTDsKICAgIH0KICBpZiAoIWZuYW1lKQogICAgcmV0dXJuOwogIGlmICghKGRh
cF9pbltkYXBfb25vXSA9IGRmb3BlbihmbmFtZSwgInIiKSkpCiAgICB7CiAgICAgIGZwcmludGYo
ZGFwX2VyciwgIihpbnNldCkgY2FuJ3QgcmVhZCBkYXRhIHNldDogJXNcbiIsIGZuYW1lKTsKICAg
ICAgZXhpdCgxKTsKICAgIH0KICBpbnR5cGUgPSBEU0VUOwogIGRhcF9kZWxpbSA9ICdcMCc7CiAg
aWYgKGRhcF9nZXRsaW5lKGRhcF9pbltkYXBfb25vXSwgdmFyc3BlYykgPCAwKQogICAgewogICAg
ICBmcHJpbnRmKGRhcF9lcnIsICIoaW5zZXQpIGRhdGEgc2V0IGVtcHR5OiAlc1xuIiwgZm5hbWUp
OwogICAgICBleGl0KDEpOwogICAgfQogIG5maWVsZHMgPSAwOwogIGRhcF9jbGVhcm9icyh2YXJz
cGVjKTsKICBkYXBfZGVsaW0gPSBTRVRERUxJTTsKICBsaW5lbm9bZGFwX29ub10gPSAxOwp9Cgov
KiBSZW1vdmUgYnJhY2tldGVkIGluZGljZXMgZnJvbSBleHBsaWNpdCBlbnRyeSByZWZlcmVuY2Vz
CiAqIGJ1dCBkbyBub3QgY3JlYXRlIGR1cGxpY2F0aW9ucyBvZiB2YXJpYWJsZSBuYW1lcwogKi8K
c3RhdGljIHZvaWQgZml4bGlzdChjaGFyICp2YXJsLCBjaGFyICp2YXJsaXN0KQp7CiAgc3RhdGlj
IGludCBmaXhpbml0ID0gMDsKICBpbnQgbDsJCQkvKiBpbmRleCB0byB2YXIgbGlzdHMgKi8KICBp
bnQgZjsKICBpbnQgaW5icmFjazsKICBzdGF0aWMgY2hhciAqdm5hbWU7CiAgaW50IGRpbTsKICBz
dGF0aWMgaW50ICpvdXR2OwogIGludCBsMDsKICBpbnQgbDE7CiAgaW50IGYxOwogIGludCBudjsK
ICBpbnQgdjsKICBpbnQgdm47CgogIGlmICghZml4aW5pdCkKICAgIHsKICAgICAgZml4aW5pdCA9
IDE7CiAgICAgIHZuYW1lID0gZGFwX21hbGxvYyhkYXBfbmFtZWxlbiArIDEsICJmaXhsaXN0OiB2
bmFtZSIpOwogICAgICBvdXR2ID0gKGludCAqKSBkYXBfbWFsbG9jKHNpemVvZihpbnQpICogZGFw
X21heHZhciwgImZpeGxpc3Q6IG91dHYiKTsKICAgIH0KICBpZiAoIXZhcmwpCiAgICB7CiAgICAg
IGZwdXRzKCIoZml4bGlzdCkgbWlzc2luZyB2YXJpYWJsZSBsaXN0LlxuIiwgZGFwX2Vycik7CiAg
ICAgIGV4aXQoMSk7CiAgICB9CiAgaWYgKCF2YXJsaXN0KQogICAgewogICAgICBmcHV0cygiKGZp
eGxpc3QpIG1pc3Npbmcgc3RyaW5nIGZvciBmaXhlZCB2YXJpYWJsZSBsaXN0LlxuIiwgZGFwX2Vy
cik7CiAgICAgIGV4aXQoMSk7CiAgICB9CiAgLyogRmlyc3QgY29weSB2YXJsIHRvIHZhcmxpc3Qs
IGVsaW1pbmF0aW5nIGJyYWNrZXRlZCBpbmRpY2VzICovCiAgZm9yIChpbmJyYWNrID0gMCwgbCA9
IDAsIGYgPSAwOyB2YXJsW2xdOyBsKyspCiAgICB7CiAgICAgIGlmIChpbmJyYWNrKQoJewoJICBp
ZiAodmFybFtsXSA9PSAnXScpCgkgICAgaW5icmFjayA9IDA7Cgl9CiAgICAgIGVsc2UgaWYgKHZh
cmxbbF0gPT0gJ1snKQoJaW5icmFjayA9IDE7CiAgICAgIGVsc2UKCXZhcmxpc3RbZisrXSA9IHZh
cmxbbF07CiAgICB9CiAgdmFybGlzdFtmXSA9ICdcMCc7CiAgZm9yIChsID0gMDsgdmFybGlzdFts
XSA9PSAnICc7IGwrKykKICAgIDsKICBsMCA9IDA7CiAgaWYgKHZhcmxpc3RbbF0gPT0gJyEnKQog
ICAgewogICAgICBmb3IgKGwrKzsgdmFybGlzdFtsXSA9PSAnICc7IGwrKykKCTsKICAgICAgdmFy
bGlzdFtsMCsrXSA9ICchJzsKICAgIH0KICBmb3IgKG52ID0gMCwgbDEgPSBsMDsgdmFybGlzdFts
XTsgKQogICAgewogICAgICBmb3IgKGYgPSAwOyB2YXJsaXN0W2wgKyBmXSAmJiB2YXJsaXN0W2wg
KyBmXSAhPSAnICc7IGYrKykKCXsKCSAgaWYgKGYgPCBkYXBfbmFtZWxlbikKCSAgICB2bmFtZVtm
XSA9IHZhcmxpc3RbbCArIGZdOwoJICBlbHNlCgkgICAgewoJICAgICAgdm5hbWVbZl0gPSAnXDAn
OwoJICAgICAgZnByaW50ZihkYXBfZXJyLCAiKGZpeGxpc3QpIHZhcmlhYmxlIG5hbWUgdG9vIGxv
bmc6ICVzXG4iLCB2bmFtZSk7CgkgICAgICBleGl0KDEpOwoJICAgIH0KCX0KICAgICAgdm5hbWVb
Zl0gPSAnXDAnOwogICAgICBpZiAoKCh2ID0gZGFwX3Zhcm51bSh2bmFtZSkpIDwgMCkgJiYgKCh2
ID0gZGFwX2Fycm51bSh2bmFtZSwgJmRpbSkpIDwgMCkpCgl7CgkgIGZwcmludGYoZGFwX2Vyciwg
IihmaXhsaXN0KSB1bmtub3duIHZhcmlhYmxlOiAlc1xuIiwgdm5hbWUpOwoJICBleGl0KDEpOwoJ
fQogICAgICBmb3IgKHZuID0gMDsgdm4gPCBudjsgdm4rKykJLyogc2VlIGlmIHZhcmlhYmxlIGFs
cmVhZHkgYXBwZWFyZWQgKi8KCXsKCSAgaWYgKG91dHZbdm5dID09IHYpCgkgICAgYnJlYWs7Cgl9
CiAgICAgIGlmICh2biA9PSBudikJCQkJLyogaWYgbm90ICovCgl7CgkgIG91dHZbbnYrK10gPSB2
OwkJCS8qIGVudGVyIGl0IGluIGxpc3Qgb2YgaW5kaWNlcyAqLwoJICBpZiAobDEgPiBsMCkKCSAg
ICB2YXJsaXN0W2wxKytdID0gJyAnOwoJICBmb3IgKGYxID0gMDsgZjEgPCBmOyBmMSsrKQkvKiBj
b3B5IG5hbWUgZnJvbSB2YXJsaXN0IHRvIHZhcmxpc3QgKi8KCSAgICB2YXJsaXN0W2wxKytdID0g
dmFybGlzdFtsKytdOwoJfQogICAgICBlbHNlCglsICs9IGY7CiAgICAgIHdoaWxlICh2YXJsaXN0
W2xdID09ICcgJykKCWwrKzsKICAgIH0KICB2YXJsaXN0W2wxXSA9ICdcMCc7Cn0KCi8qIFNldCBu
YW1lIGFuZCB2YXJpYWJsZXMgb2Ygb3V0cHV0IGRhdGFzZXQKICogdmFybCA9IGxpc3Qgb2YgdmFy
aWFibGVzIHRvIGluY2x1ZGUgZXhjZXB0IHRoYXQgaWYgaXQgaGFzICchJyBiZWZvcmUKICoJdGhl
IHZhcmlhYmxlIG5hbWVzLCB0aGVuIHRoZSB2YXJpYWJsZXMgYXJlIHRvIGJlIGV4Y2x1ZGVkIGlu
c3RlYWQKICovCnZvaWQgb3V0c2V0KGNoYXIgKmZuYW1lLCBjaGFyICp2YXJsKQp7CiAgc3RhdGlj
IGludCBvdXRpbml0ID0gMDsJLyogaW5pdGlhbGl6ZWQgZGF0YSBmb3Igb3V0c2V0PyAqLwogIGlu
dCBsOwogIGludCBpOwogIHN0YXRpYyBjaGFyICp2YXJsaXN0OwogIHN0YXRpYyBjaGFyICp2bmFt
ZTsKICBpbnQgdjsKICBpbnQgdzsKICBpbnQgZmlyc3Q7CiAgaW50IGRpbTsKICBpbnQgZDsKICBk
b3VibGUgdGVzdGQ7CgogIGlmIChkYXBfb3V0W2RhcF9vbm9dKQogICAgewogICAgICBkZmNsb3Nl
KGRhcF9vdXRbZGFwX29ub10pOwogICAgICBkYXBfb3V0W2RhcF9vbm9dID0gKERGSUxFICopIE5V
TEw7CiAgICB9CiAgaWYgKCFmbmFtZSkKICAgIHsKICAgICAgZnB1dHMoIihvdXRzZXQpIG5vIGRh
dGFzZXQgbmFtZS5cbiIsIGRhcF9lcnIpOwogICAgICBleGl0KDEpOwogICAgfQogIGlmICghb3V0
aW5pdCkKICAgIHsKICAgICAgb3V0aW5pdCA9IDE7CiAgICAgIHZhcmxpc3QgPSBkYXBfbWFsbG9j
KGRhcF9saXN0bGVuLCAib3V0c2V0OiB2YXJsaXN0Iik7CiAgICAgIHZuYW1lID0gZGFwX21hbGxv
YyhkYXBfbGlzdGxlbiwgIm91dHNldDogdm5hbWUiKTsKICAgIH0KICBpZiAoIShkYXBfb3V0W2Rh
cF9vbm9dID0gZGZvcGVuKGZuYW1lLCAidyIpKSkKICAgIHsKICAgICAgZnByaW50ZihkYXBfZXJy
LCAiKG91dHNldCkgQ2FuJ3Qgd3JpdGUgZGF0YSBzZXQ6ICVzXG4iLCBmbmFtZSk7CiAgICAgIGV4
aXQoMSk7CiAgICB9CiAgaWYgKCF2YXJsKQogICAgewogICAgICBmcHJpbnRmKGRhcF9lcnIsICIo
b3V0c2V0ICglcykpIE1pc3NpbmcgdmFyaWFibGUgbGlzdC5cbiIsIGZuYW1lKTsKICAgICAgZXhp
dCgxKTsKICAgIH0KICBmaXhsaXN0KHZhcmwsIHZhcmxpc3QpOwogIGlmICh2YXJsaXN0WzBdKQog
ICAgewogICAgICBmb3IgKGwgPSAwOyB2YXJsaXN0W2xdID09ICcgJzsgbCsrKQoJOwogICAgICBp
ZiAodmFybGlzdFtsXSA9PSAnIScpCS8qIGxpc3RpbmcgdmFyaWFibGVzIE5PVCB0byBpbmNsdWRl
ICovCgl7CQkvKiBmaXJzdCBwdXQgdGhlbSBhbGwgaW4gKi8KCSAgZm9yIChsKys7IHZhcmxpc3Rb
bF0gPT0gJyAnOyBsKyspCgkgICAgOwoJICBkYXBfb2JzW2RhcF9vbm9dLmRvX292YXIgPSBkYXBf
b2JzW2RhcF9vbm9dLmRvX252YXI7CgkgIGZvciAodiA9IDA7IHYgPCBkYXBfb2JzW2RhcF9vbm9d
LmRvX252YXI7IHYrKykKCSAgICBkYXBfb2JzW2RhcF9vbm9dLmRvX291dFt2XSA9IHY7CgkgIHdo
aWxlICh2YXJsaXN0W2xdKQkvKiB0aGVuIHRha2UgdGhlbSBvdXQgKi8KCSAgICB7CgkgICAgICBm
b3IgKGkgPSAwOyB2YXJsaXN0W2wgKyBpXSAmJiB2YXJsaXN0W2wgKyBpXSAhPSAnICc7IGkrKykK
CQl2bmFtZVtpXSA9IHZhcmxpc3RbbCArIGldOwoJICAgICAgdm5hbWVbaV0gPSAnXDAnOwoJICAg
ICAgaWYgKCh3ID0gZGFwX3Zhcm51bSh2bmFtZSkpID49IDApCgkJewoJCSAgZm9yICh2ID0gMDsg
diA8IGRhcF9vYnNbZGFwX29ub10uZG9fb3ZhcjsgdisrKQoJCSAgICB7CgkJICAgICAgaWYgKGRh
cF9vYnNbZGFwX29ub10uZG9fb3V0W3ZdID09IHcpCgkJCWJyZWFrOwoJCSAgICB9CgkJICBpZiAo
diA9PSBkYXBfb2JzW2RhcF9vbm9dLmRvX292YXIpCgkJICAgIHsKCQkgICAgICBmcHJpbnRmKGRh
cF9lcnIsCgkJCSAgICAgICIob3V0c2V0ICglcykpIHZhcmlhYmxlIG5vdCBpbiBsaXN0IG9mIHZh
cmlhYmxlcyB0byBleGNsdWRlOiAlc1xuIiwKCQkJICAgICAgZm5hbWUsIHZuYW1lKTsKCQkgICAg
ICBleGl0KDEpOwoJCSAgICB9CgkJICB3aGlsZSAodiA8IGRhcF9vYnNbZGFwX29ub10uZG9fb3Zh
ciAtIDEpCgkJICAgIHsKCQkgICAgICBkYXBfb2JzW2RhcF9vbm9dLmRvX291dFt2XSA9CgkJCWRh
cF9vYnNbZGFwX29ub10uZG9fb3V0W3YgKyAxXTsKCQkgICAgICB2Kys7CgkJICAgIH0KCQkgIGRh
cF9vYnNbZGFwX29ub10uZG9fb3Zhci0tOwoJCX0KCSAgICAgIGVsc2UgaWYgKCh3ID0gZGFwX2Fy
cm51bSh2bmFtZSwgJmRpbSkpID49IDApCgkJewoJCSAgZm9yICh2ID0gMDsgdiA8IGRhcF9vYnNb
ZGFwX29ub10uZG9fb3ZhcjsgdisrKQoJCSAgICB7CgkJICAgICAgaWYgKGRhcF9vYnNbZGFwX29u
b10uZG9fb3V0W3ZdID09IHcpCgkJCWJyZWFrOwoJCSAgICB9CgkJICB3aGlsZSAodiA8IGRhcF9v
YnNbZGFwX29ub10uZG9fb3ZhciAtIGRpbSkKCQkgICAgewoJCSAgICAgIGRhcF9vYnNbZGFwX29u
b10uZG9fb3V0W3ZdID0KCQkJZGFwX29ic1tkYXBfb25vXS5kb19vdXRbdiArIGRpbV07CgkJICAg
ICAgdisrOwoJCSAgICB9CgkJICBkYXBfb2JzW2RhcF9vbm9dLmRvX292YXIgLT0gZGltOwoJCX0K
CSAgICAgIGVsc2UKCQl7CgkJICBmcHJpbnRmKGRhcF9lcnIsICIob3V0c2V0KCVzKSkgdW5rbm93
biB2YXJpYWJsZTogJXNcbiIsCgkJCSAgZm5hbWUsIHZuYW1lKTsKCQkgIGV4aXQoMSk7CgkJfQoJ
ICAgICAgbCArPSBpOwoJICAgICAgd2hpbGUgKHZhcmxpc3RbbF0gPT0gJyAnKQoJCWwrKzsKCSAg
ICB9Cgl9CiAgICAgIGVsc2UKCXsKCSAgd2hpbGUgKHZhcmxpc3RbbF0pCgkgICAgewoJICAgICAg
Zm9yIChpID0gMDsgdmFybGlzdFtsICsgaV0gJiYgdmFybGlzdFtsICsgaV0gIT0gJyAnOyBpKysp
CgkJdm5hbWVbaV0gPSB2YXJsaXN0W2wgKyBpXTsKCSAgICAgIHZuYW1lW2ldID0gJ1wwJzsKCSAg
ICAgIGlmICgodiA9IGRhcF92YXJudW0odm5hbWUpKSA+PSAwKQoJCWRhcF9vYnNbZGFwX29ub10u
ZG9fb3V0W2RhcF9vYnNbZGFwX29ub10uZG9fb3ZhcisrXSA9IHY7CgkgICAgICBlbHNlIGlmICgo
diA9IGRhcF9hcnJudW0odm5hbWUsICZkaW0pKSA+PSAwKQoJCXsKCQkgIGZvciAoZCA9IDA7IGQg
PCBkaW07IGQrKykKCQkgICAgZGFwX29ic1tkYXBfb25vXS5kb19vdXRbZGFwX29ic1tkYXBfb25v
XS5kb19vdmFyKytdID0gdiArIGQ7CgkJfQoJICAgICAgZWxzZQoJCXsKCQkgIGZwcmludGYoZGFw
X2VyciwgIihvdXRzZXQoJXMpKSB1bmtub3duIHZhcmlhYmxlOiAlc1xuIiwKCQkJICBmbmFtZSwg
dm5hbWUpOwoJCSAgZXhpdCgxKTsKCQl9CgkgICAgICBsICs9IGk7CgkgICAgICB3aGlsZSAodmFy
bGlzdFtsXSA9PSAnICcpCgkJbCsrOwoJICAgIH0KCX0KICAgIH0KICBlbHNlCiAgICB7CiAgICAg
IGRhcF9vYnNbZGFwX29ub10uZG9fb3ZhciA9IGRhcF9vYnNbZGFwX29ub10uZG9fbnZhcjsKICAg
ICAgZm9yICh2ID0gMDsgdiA8IGRhcF9vYnNbZGFwX29ub10uZG9fbnZhcjsgdisrKQoJZGFwX29i
c1tkYXBfb25vXS5kb19vdXRbdl0gPSB2OwogICAgfQogIGlmIChkYXBfdmFybnVtKCJfdHlwZV8i
KSA8IDApCiAgICB7CiAgICAgIGZwcmludGYoZGFwX2VyciwgIihvdXRzZXQgKCVzKSkgbWlzc2lu
ZyBfdHlwZV8gdmFyaWFibGVcbiIsIGZuYW1lKTsKICAgICAgZXhpdCgxKTsKICAgIH0KICBmb3Ig
KHYgPSAwOyB2IDwgZGFwX29ic1tkYXBfb25vXS5kb19vdmFyOyB2KyspCiAgICB7CiAgICAgIGZv
ciAodyA9IHYgKyAxOyB3IDwgZGFwX29ic1tkYXBfb25vXS5kb19vdmFyOyB3KyspCgl7CgkgIGlm
IChkYXBfb2JzW2RhcF9vbm9dLmRvX291dFt2XSA9PSBkYXBfb2JzW2RhcF9vbm9dLmRvX291dFt3
XSkKCSAgICB7CgkgICAgICBmcHJpbnRmKGRhcF9lcnIsCgkJICAgICAgIihvdXRzZXQgKCVzKSkg
ZHVwbGljYXRlIHZhcmlhYmxlIGluIG91dHB1dCBsaXN0OiAlc1xuIiwKCQkgICAgICBmbmFtZSwg
ZGFwX29ic1tkYXBfb25vXS5kb19uYW1bZGFwX29ic1tkYXBfb25vXS5kb19vdXRbd11dKTsKCSAg
ICAgIGV4aXQoMSk7CgkgICAgfQoJfQogICAgfQogIGZvciAodiA9IDAsIGZpcnN0ID0gMTsgdiA8
IGRhcF9vYnNbZGFwX29ub10uZG9fb3ZhcjsgdisrKQogICAgewogICAgICBpZiAoIWZpcnN0KQoJ
ZGFwX3B1dGMoJyAnLCBkYXBfb3V0W2RhcF9vbm9dKTsKICAgICAgZHB1dHMoZGFwX29ic1tkYXBf
b25vXS5kb19uYW1bZGFwX29ic1tkYXBfb25vXS5kb19vdXRbdl1dLCAiICIsIGRhcF9vdXRbZGFw
X29ub10pOwogICAgICBkcHV0aShkYXBfb2JzW2RhcF9vbm9dLmRvX2xlbltkYXBfb2JzW2RhcF9v
bm9dLmRvX291dFt2XV0sIGRhcF9vdXRbZGFwX29ub10pOwogICAgICBmaXJzdCA9IDA7CiAgICB9
CiAgZGFwX3B1dGMoJ1xuJywgZGFwX291dFtkYXBfb25vXSk7CiAgZGZsdXNoKGRhcF9vdXRbZGFw
X29ub10pOwogIG91dGxpbmUgPSAwOwp9CgovKiB3cml0ZSBhIGxpbmUgdG8gdGhlIG91dHB1dCBk
YXRhc2V0ICovCnZvaWQgb3V0cHV0KCkKewogIGludCB2OwogIGludCBmaXJzdDsKCiAgaWYgKCh2
ID0gZGFwX3Zhcm51bSgiX3R5cGVfIikpIDwgMCkKICAgIHsKICAgICAgZnByaW50ZihkYXBfZXJy
LCAiKG91dHB1dCkgbWlzc2luZyBfdHlwZV8gdmFyaWFibGVcbiIpOwogICAgICBleGl0KDEpOwog
ICAgfQogIGZvciAodiA9IDAsIGZpcnN0ID0gMTsgdiA8IGRhcF9vYnNbZGFwX29ub10uZG9fb3Zh
cjsgdisrKQogICAgewogICAgICBpZiAoIWZpcnN0KQoJZGFwX3B1dGMoU0VUREVMSU0sIGRhcF9v
dXRbZGFwX29ub10pOwogICAgICBpZiAoZGFwX29ic1tkYXBfb25vXS5kb19sZW5bZGFwX29ic1tk
YXBfb25vXS5kb19vdXRbdl1dID09IElOVCkKCXsKCSAgLyogaWYgd2UncmUgaW4gYW4gaW5maWxl
IHN0YXRlbWVudCwgbWF5IG5lZWQgdG8gdXBkYXRlIHRoZSB2YWx1ZQoJICAgKiBmcm9tIHRoZSB2
YWx1ZSBpbiB0aGUgdXNlcidzIHByb2dyYW0KCSAgICovCgkgIGlmICghZGFwX29ubyAmJiBkYXBf
b2JzW2RhcF9vbm9dLmRvX2lsW2RhcF9vYnNbMF0uZG9fb3V0W3ZdXSkKCSAgICBkYXBfb2JzWzBd
LmRvX2ludFtkYXBfb2JzWzBdLmRvX291dFt2XV0gPQoJICAgICAgKmRhcF9vYnNbZGFwX29ub10u
ZG9faWxbZGFwX29ic1swXS5kb19vdXRbdl1dOwoJICBkYXBfcHV0aW50KGRhcF9vYnNbZGFwX29u
b10uZG9faW50W2RhcF9vYnNbZGFwX29ub10uZG9fb3V0W3ZdXSwKCQkgICAgIGRhcF9vdXRbZGFw
X29ub10pOwoJfQogICAgICBlbHNlIGlmIChkYXBfb2JzW2RhcF9vbm9dLmRvX2xlbltkYXBfb2Jz
W2RhcF9vbm9dLmRvX291dFt2XV0gPT0gREJMKQoJewoJICAvKiBpZiB3ZSdyZSBpbiBhbiBpbmZp
bGUgc3RhdGVtZW50LCBtYXkgbmVlZCB0byB1cGRhdGUgdGhlIHZhbHVlCgkgICAqIGZyb20gdGhl
IHZhbHVlIGluIHRoZSB1c2VyJ3MgcHJvZ3JhbQoJICAgKi8KCSAgaWYgKCFkYXBfb25vICYmIGRh
cF9vYnNbZGFwX29ub10uZG9fZGxbZGFwX29ic1swXS5kb19vdXRbdl1dKQoJICAgIGRhcF9vYnNb
MF0uZG9fZGJsW2RhcF9vYnNbMF0uZG9fb3V0W3ZdXSA9CgkgICAgICAqZGFwX29ic1tkYXBfb25v
XS5kb19kbFtkYXBfb2JzWzBdLmRvX291dFt2XV07CgkgIGRhcF9kb3VibGUgPSBkYXBfb2JzW2Rh
cF9vbm9dLmRvX2RibFtkYXBfb2JzW2RhcF9vbm9dLmRvX291dFt2XV07CgkgIGRhcF9wdXRkb3Vi
bGUoZGFwX291dFtkYXBfb25vXSk7Cgl9CiAgICAgIGVsc2UKCXsKCSAgZHB1dHMoZGFwX29ic1tk
YXBfb25vXS5kb19zdHJbZGFwX29ic1tkYXBfb25vXS5kb19vdXRbdl1dLCAiIiwKCQlkYXBfb3V0
W2RhcF9vbm9dKTsKCX0KICAgICAgZmlyc3QgPSAwOwogICAgfQogIGRhcF9wdXRjKCdcbicsIGRh
cF9vdXRbZGFwX29ub10pOwogIGRmbHVzaChkYXBfb3V0W2RhcF9vbm9dKTsKICBpZiAoZGFwX291
dHJlcG9ydCAmJiAhKCsrb3V0bGluZSAlIGRhcF9vdXRyZXBvcnQpKQogICAgewogICAgICBmcHJp
bnRmKHN0ZGVyciwgIihvdXRwdXQpICVkIGxpbmVzIHdyaXR0ZW4gdG8gJXMuLi5cbiIsCgkgICAg
ICBvdXRsaW5lLCBkYXBfb3V0W2RhcF9vbm9dLT5kZmlsZV9uYW1lKTsKICAgICAgZmZsdXNoKHN0
ZGVycik7CiAgICB9Cn0KCi8qIEV4cGFuZHMgYXJyYXkgdmFyaWFibGVzIGluIHZhcmxpc3QgYW5k
IHJlY29yZHMgdGhlaXIgaW5kZXhlcyBpbiB2YXJ2CiAqIFJldHVybnMgbnVtYmVyIG9mIHZhcmlh
YmxlcyBmb3IgaW5jbHVzaW9uIG9yIG5lZ2F0aXZlIG51bWJlciBvZiB2YXJpYWJsZXMKICogZm9y
IGV4Y2x1c2lvbi4KICovCnN0YXRpYyBpbnQgZXhwYW5kKGNoYXIgKnZhcmxpc3QsIGludCAqdmFy
diwgaW50IG1heHZhcnMpCnsKICBpbnQgbnZhcnM7CiAgaW50IG07CiAgaW50IGk7CiAgY2hhciAq
bW5hbWU7CiAgY2hhciAqbmV3bmFtZTsKICBpbnQgYXJybjsJCS8qIHZhciBpbmRleCBvZiBhcnJh
eSdzIGZpcnN0IGVsZW1lbnQgKi8KICBpbnQgZGltOwkJLyogYXJyYXkgZGltZW5zaW9uICovCiAg
aW50IGQ7CQkJLyogaW5kZXggdG8gYXJyYXkgKi8KICBpbnQgaW5jbHVkZTsJCS8qIHZhcmlhYmxl
cyB0byBiZSBpbmNsdWRlZD8gKHJhdGhlciB0aGFuIGV4Y2x1ZGVkKSAqLwoKICBpZiAoIXZhcmxp
c3QpCiAgICByZXR1cm4gMDsKICBpZiAoIXZhcnYpCiAgICB7CiAgICAgIGZwdXRzKCIoZXhwYW5k
KSBNaXNzaW5nIHZhcmlhYmxlIGluZGV4IGxpc3QuXG4iLCBkYXBfZXJyKTsKICAgICAgZXhpdCgx
KTsKICAgIH0KICBtbmFtZSA9IGRhcF9tYWxsb2Moc3RybGVuKHZhcmxpc3QpICsgMSwgImV4cGFu
ZDogbW5hbWUiKTsKICBuZXduYW1lID0gZGFwX21hbGxvYyhzdHJsZW4odmFybGlzdCkgKyAxLCAi
ZXhwYW5kOiBuZXduYW1lIik7CiAgaW5jbHVkZSA9IDE7CiAgZm9yIChtID0gMDsgdmFybGlzdFtt
XSA9PSAnICc7IG0rKykKICAgIDsKICBpZiAodmFybGlzdFttXSA9PSAnIScpCS8qIGluZGljYXRl
cyB2YXJpYWJsZXMgdG8gZXhjbHVkZSwgbm90IGluY2x1ZGUgKi8KICAgIHsKICAgICAgZm9yICht
Kys7IHZhcmxpc3RbbV0gPT0gJyAnOyBtKyspCgk7CiAgICAgIGluY2x1ZGUgPSAtMTsKICAgIH0K
ICBmb3IgKG52YXJzID0gMDsgdmFybGlzdFttXTsgKQogICAgewogICAgICBmb3IgKGkgPSAwOyB2
YXJsaXN0W20gKyBpXSAmJiB2YXJsaXN0W20gKyBpXSAhPSAnICcgJiYgdmFybGlzdFttICsgaV0g
IT0gJz4nOyBpKyspCgltbmFtZVtpXSA9IHZhcmxpc3RbbSArIGldOwogICAgICBtbmFtZVtpXSA9
ICdcMCc7CiAgICAgIG0gKz0gaTsKICAgICAgd2hpbGUgKHZhcmxpc3RbbV0gPT0gJyAnKQoJbSsr
OwogICAgICBuZXduYW1lWzBdID0gJ1wwJzsKICAgICAgaWYgKHZhcmxpc3RbbV0gPT0gJz4nKQoJ
ewoJICBpZiAoaW5jbHVkZSA8IDApCgkgICAgewoJICAgICAgZnB1dHMoIihleHBhbmQpIENhbid0
IHJlbmFtZSB2YXJpYWJsZXMgYmVpbmcgZXhjbHVkZWRcbiIsIGRhcF9lcnIpOwoJICAgICAgZXhp
dCgxKTsKCSAgICB9CgkgIGZvciAobSsrOyB2YXJsaXN0W21dID09ICcgJzsgbSsrKQoJICAgIDsK
CSAgZm9yIChpID0gMDsgdmFybGlzdFttICsgaV0gJiYgdmFybGlzdFttICsgaV0gIT0gJyAnICYm
IHZhcmxpc3RbbSArIGldICE9ICc+JzsKCSAgICAgICBpKyspCgkgICAgbmV3bmFtZVtpXSA9IHZh
cmxpc3RbbSArIGldOwoJICBuZXduYW1lW2ldID0gJ1wwJzsKCSAgbSArPSBpOwoJICB3aGlsZSAo
dmFybGlzdFttXSA9PSAnICcpCgkgICAgbSsrOwoJfQogICAgICBpZiAobnZhcnMgPj0gbWF4dmFy
cykKCXsKCSAgZnByaW50ZihkYXBfZXJyLCAiKGV4cGFuZCkgTW9yZSB0aGFuICVkIHZhcmlhYmxl
czogJXNcbiIsIG1heHZhcnMsIHZhcmxpc3QpOwoJICBleGl0KDEpOwoJfQogICAgICBpZiAoKGFy
cm4gPSBkYXBfYXJybnVtKG1uYW1lLCAmZGltKSkgPj0gMCkKCXsKCSAgZm9yIChkID0gMDsgZCA8
IGRpbTsgZCsrKQoJICAgIHsKCSAgICAgIGlmIChuZXduYW1lWzBdKQoJCXsKCQkgIGRhcF9mcmVl
KGRhcF9vYnNbZGFwX29ub10uZG9fbmFtW2Fycm5dLAoJCQkgICAiZXhwYW5kOiBkYXBfb2JzW2Rh
cF9vbm9dLmRvX25hbVthcnJuXSIpOwoJCSAgZGFwX29ic1tkYXBfb25vXS5kb19uYW1bYXJybl0g
PQoJCSAgICBkYXBfbWFsbG9jKHN0cmxlbihuZXduYW1lKSArIDYsCgkJCSAgICAgICAiZXhwYW5k
OiBkYXBfb2JzW2RhcF9vbm9dLmRvX25hbVthcnJuXSIpOwoJCSAgc3ByaW50ZihkYXBfb2JzW2Rh
cF9vbm9dLmRvX25hbVthcnJuXSwKCQkJICAiJXNbJWRdIiwgbmV3bmFtZSwgZCk7CgkJfQoJICAg
ICAgdmFydltudmFycysrXSA9IGFycm4rKzsKCSAgICB9Cgl9CiAgICAgIGVsc2UgaWYgKCh2YXJ2
W252YXJzXSA9IGRhcF92YXJudW0obW5hbWUpKSA+IDApCgl7CgkgIGlmIChuZXduYW1lWzBdKQoJ
ICAgIHsKCSAgICAgIGRhcF9mcmVlKGRhcF9vYnNbZGFwX29ub10uZG9fbmFtW3ZhcnZbbnZhcnNd
XSwKCQkgICAgICAgImV4cGFuZDogZGFwX29ic1tkYXBfb25vXS5kb19uYW1bdmFydltudmFyc11d
Iik7CgkgICAgICBkYXBfb2JzW2RhcF9vbm9dLmRvX25hbVt2YXJ2W252YXJzXV0gPQoJCWRhcF9t
YWxsb2Moc3RybGVuKG5ld25hbWUpICsgMSwKCQkJICAgImV4cGFuZDogZGFwX29ic1tkYXBfb25v
XS5kb19uYW1bdmFydltudmFyc11dIik7CgkgICAgICBzdHJjcHkoZGFwX29ic1tkYXBfb25vXS5k
b19uYW1bdmFydltudmFyc11dLCBuZXduYW1lKTsKCSAgICB9CgkgIG52YXJzKys7Cgl9CiAgICAg
IGVsc2UKCXsKCSAgZnByaW50ZihkYXBfZXJyLCAiKGV4cGFuZCkgVmFyaWFibGUgdW5rbm93bjog
JXNcbiIsIG1uYW1lKTsKCSAgZXhpdCgxKTsKCX0KICAgIH0KICBkYXBfZnJlZShtbmFtZSwgImV4
cGFuZDogbW5hbWUiKTsKICBkYXBfZnJlZShuZXduYW1lLCAiZXhwYW5kOiBuZXduYW1lIik7CiAg
cmV0dXJuIGluY2x1ZGUgKiBudmFyczsKfQoKc3RhdGljIHZvaWQgdmFyY2F0KGNoYXIgKnRvLCBj
aGFyICpmcm9tKQp7CiAgaW50IHQsIGYsIGZmOwoKICBmb3IgKGYgPSAwOyBmcm9tW2ZdID09ICcg
JzsgZisrKQogICAgOwogIGZvciAodCA9IDA7IHRvW3RdOyB0KyspCiAgICA7CiAgd2hpbGUgKGZy
b21bZl0pCiAgICB7CiAgICAgIGZvciAoZmYgPSBmOyBmcm9tW2ZmXSAmJiBmcm9tW2ZmXSAhPSAn
ICcgJiYgZnJvbVtmZl0gIT0gJz4nOyBmZisrKQoJOwogICAgICB3aGlsZSAoZnJvbVtmZl0gPT0g
JyAnKQoJZmYrKzsKICAgICAgaWYgKGZyb21bZmZdID09ICc+JykKCXsKCSAgZm9yIChmID0gZmYg
KyAxOyBmcm9tW2ZdID09ICcgJzsgZisrKQoJICAgIDsKCX0KICAgICAgd2hpbGUgKGZyb21bZl0g
JiYgZnJvbVtmXSAhPSAnICcpCgl0b1t0KytdID0gZnJvbVtmKytdOwogICAgICB0b1t0KytdID0g
JyAnOwogICAgICB3aGlsZSAoZnJvbVtmXSA9PSAnICcpCglmKys7CiAgICB9CiAgdG9bdF0gPSAn
XDAnOwp9CgovKiBPbmUtdG8tb25lIG9yIG1hbnktdG8tb25lIG1lcmdlIG9mIGRhdGFzZXQgbGlu
ZXMKICogZm5hbWUxLCBmbmFtZTIgPSBkYXRhc2V0cyB0byBtZXJnZQogKiB2YXJzMSwgdmFyczIg
PSBsaXN0cyBvZiB2YXJpYWJsZXMgdG8gaW5jbHVkZSBmcm9tIGVhY2ggZGF0YXNldAogKiBtYXJr
cyA9IHBhcnRpdGlvbmluZyB2YXJpYWJsZXMgdG8gY29vcmRpbmF0ZSBtZXJnZQogKiBvdXRuYW1l
ID0gb3V0cHV0IGRhdGFzZXQKICovCnZvaWQgbWVyZ2UoY2hhciAqZm5hbWUxLCBjaGFyICp2YXJz
MSwgY2hhciAqZm5hbWUyLCBjaGFyICp2YXJzMiwKCSAgIGNoYXIgKm1hcmtzLCBjaGFyICpvdXRu
YW1lKQp7CiAgaW50ICp2YXJ2MSwgKnZhcnYyOwkvKiBpbmRleGVzIG9mIHZhcmlhYmxlcyBsaXN0
ZWQgaW4gdmFyczEsIHZhcnMyICovCiAgaW50ICpvdmFydjEsICpvdmFydjI7CS8qIGluZGV4ZXMg
b2YgdmFyaWFibGVzIHRvIHVzZSBmcm9tIGZuYW1lMSwgZm5hbWUyICovCiAgaW50IG52YXIxLCBu
dmFyMjsJLyogbnVtYmVyIG9mIHZhcnMgaW4gdmFyczEsIHZhcnMyIGV4Y2VwdCBpZiBleGNsdWRp
bmcsCgkJCSAqIGl0J3MgdGhlIG5lZ2F0aXZlCgkJCSAqLwogIGludCAqbWFya3YxOwkJLyogaW5k
ZXhlcyBvZiBwYXJ0aXRpb25pbmcgdmFyaWFibGVzIGluIGZuYW1lMSAqLwogIGludCAqbWFya3Yy
OwkJLyogaW5kZXhlcyBvZiBwYXJ0aXRpb25pbmcgdmFyaWFibGVzIGluIGZuYW1lMiAqLwogIGlu
dCBubWFyazsJCS8qIG51bWJlciBvZiBwYXJ0aXRpb25pbmcgdmFyaWFibGVzICovCiAgaW50IHYx
LCB2MjsJCS8qIGluZGV4ZXMgdG8gdmFyaWFibGUgaW5kZXggbGlzdHMgKi8KICBpbnQgdnYxLCB2
djI7CQkvKiBtb3JlIGluZGV4ZXMgdG8gdmFyaWFibGUgaW5kZXggbGlzdHMgKi8KICBjaGFyICpv
dXRsaXN0OwkJLyogbGlzdCBvZiB2YXJpYWJsZXMgdG8gYXBwZWFyIGluIGZpbmFsIG91dHB1dCAq
LwogIGNoYXIgKm91dGxpc3QxOwkJLyogbGlzdCBvZiB2YXJpYWJsZXMgdG8gdXNlIGZyb20gZm5h
bWUxICovCiAgY2hhciAqb3V0bGlzdDI7CQkvKiBsaXN0IG9mIHZhcmlhYmxlcyB0byB1c2UgZnJv
bSBmbmFtZTIgKi8KICBpbnQgZ29vbjE7CiAgZG91YmxlIGRkaWZmOwogIGludCBpc2RpZmY7CiAg
aW50IHZhcnMxbnVsbCwgdmFyczJudWxsOwkvKiB2YXJzMSwgdmFyczIgPSBOVUxMPyAqLwogIGNo
YXIgKnZhcnMxYSwgKnZhcnMyYTsJLyogT0ssIGF3ZnVsIHBhdGNoOiBpZiB2YXJzMSBhbmQvb3Ig
dmFyczIgYXJlIGV4Y2x1c2lvbnMKCQkJCSAqIHdpdGggJyEnLCB0aGVuIGhhdmUgdG8gY3JlYXRl
IGxpc3RzIGFydGlmaWNpYWxseSBvZgoJCQkJICogdmFyaWFibGVzIHRoYXQgYXJlIG5vdCB0byBi
ZSBleGNsdWRlZC4KCQkJCSAqLwogIGludCBleGNsdWRlMSwgZXhjbHVkZTI7CS8qIHZhcnMxLCB2
YXJzMiBleGNsdXNpb24gbGlzdHM/ICovCiAgaW50IG52YXIxYSwgbnZhcjJhOwkvKiB2YXJpYWJs
ZSBjb3VudHMgaW4gY2FzZSBvZiBleGNsdXNpb24gKi8KICBpbnQgKnZhcnYxYSwgKnZhcnYyYTsJ
LyogaW5kZXggbGlzdHMgZm9yIHZhcmlhYmxlcyB0byBpbmNsdWRlICovCgogIGlmICghZm5hbWUx
IHx8ICFmbmFtZTIgfHwgIW91dG5hbWUpCiAgICB7CiAgICAgIGZwdXRzKCIobWVyZ2UpIE1pc3Np
bmcgZGF0YXNldCBuYW1lLlxuIiwgZGFwX2Vycik7CiAgICAgIGV4aXQoMSk7CiAgICB9CiAgaWYg
KHZhcnMxICYmIGluZGV4KHZhcnMxLCAnWycpKQogICAgewogICAgICBmcHJpbnRmKGRhcF9lcnIs
CgkgICAgICAiKG1lcmdlKSBWYXJpYWJsZSBsaXN0cyBtYXkgbm90IGNvbnRhaW4gaW5kaXZpZHVh
bCBhcnJheSBlbGVtZW50czogJXNcbiIsCgkgICAgICB2YXJzMSk7CiAgICAgIGV4aXQoMSk7CiAg
ICB9CiAgaWYgKHZhcnMyICYmIGluZGV4KHZhcnMyLCAnWycpKQogICAgewogICAgICBmcHJpbnRm
KGRhcF9lcnIsCgkgICAgICAiKG1lcmdlKSBWYXJpYWJsZSBsaXN0cyBtYXkgbm90IGNvbnRhaW4g
aW5kaXZpZHVhbCBhcnJheSBlbGVtZW50czogJXNcbiIsCgkgICAgICB2YXJzMik7CiAgICAgIGV4
aXQoMSk7CiAgICB9CiAgdmFyczFudWxsID0gMDsJLyogbm9uLU5VTEwgdW50aWwgcHJvdmVuIE5V
TEwgKi8KICB2YXJzMm51bGwgPSAwOwogIG91dGxpc3QgPSBkYXBfbWFsbG9jKGRhcF9saXN0bGVu
LCAibWVyZ2U6IG91dGxpc3QiKTsKICBvdXRsaXN0MSA9IGRhcF9tYWxsb2MoZGFwX2xpc3RsZW4s
ICJtZXJnZTogb3V0bGlzdDEiKTsKICBvdXRsaXN0MiA9IGRhcF9tYWxsb2MoZGFwX2xpc3RsZW4s
ICJtZXJnZTpvdXRsaXN0MiIpOwogIHZhcnYxID0gKGludCAqKSBkYXBfbWFsbG9jKHNpemVvZihp
bnQpICogZGFwX21heHZhciwgIm1lcmdlOiB2YXJ2MSIpOwogIHZhcnYyID0gKGludCAqKSBkYXBf
bWFsbG9jKHNpemVvZihpbnQpICogZGFwX21heHZhciwgIm1lcmdlOiB2YXJ2MiIpOwogIG92YXJ2
MSA9IChpbnQgKikgZGFwX21hbGxvYyhzaXplb2YoaW50KSAqIGRhcF9tYXh2YXIsICJtZXJnZTog
b3ZhcnYxIik7CiAgb3ZhcnYyID0gKGludCAqKSBkYXBfbWFsbG9jKHNpemVvZihpbnQpICogZGFw
X21heHZhciwgIm1lcmdlOiBvdmFydjIiKTsKICBtYXJrdjEgPSAoaW50ICopIGRhcF9tYWxsb2Mo
c2l6ZW9mKGludCkgKiBkYXBfbWF4dmFyLCAibWVyZ2U6IG1hcmt2MSIpOwogIG1hcmt2MiA9IChp
bnQgKikgZGFwX21hbGxvYyhzaXplb2YoaW50KSAqIGRhcF9tYXh2YXIsICJtZXJnZTogbWFya3Yy
Iik7CiAgZGFwX29ubyA9IDA7CS8qIHRha2Ugbm8gY2hhbmNlcyEgKi8KICBpbnNldChmbmFtZTEp
OwkvKiBzZXQgdXAgaW5wdXQgZnJvbSBkYXRhc2V0IDEgKi8KICBpZiAodmFyczEgJiYgIXZhcnMx
WzBdKQkJLyogdmFyczEgbnVsbCBzdHJpbmc6IHVzZSBhbGwgdmFyaWFibGVzICovCiAgICB7CiAg
ICAgIHZhcnMxbnVsbCA9IDE7CiAgICAgIC8qIGluIHRoaXMgY2FzZSwgbmVlZCB0byBtYWtlIG91
ciBvd24gdmFyczEgbGlzdCAqLwogICAgICB2YXJzMSA9IGRhcF9tYWxsb2MoZGFwX2xpc3RsZW4s
ICJtZXJnZTogdmFyczEiKTsKICAgICAgdmFyczFbMF0gPSAnXDAnOwogICAgICBmb3IgKHYxID0g
MDsgdjEgPCBkYXBfb2JzW2RhcF9vbm9dLmRvX252YXI7IHYxKyspCgl7CQkvKiBjb3B5IGFsbCB2
YXJzIGV4Y2VwdCBfdHlwZV8gKi8KCSAgaWYgKHN0cmNtcChkYXBfb2JzW2RhcF9vbm9dLmRvX25h
bVt2MV0sICJfdHlwZV8iKSkKCSAgICB7CgkgICAgICBzdHJjYXQodmFyczEsICIgIik7CgkgICAg
ICBzdHJjYXQodmFyczEsIGRhcF9vYnNbZGFwX29ub10uZG9fbmFtW3YxXSk7CgkgICAgfQoJfQog
ICAgfQogIG52YXIxID0gZXhwYW5kKHZhcnMxLCB2YXJ2MSwgZGFwX21heHZhcik7CiAgZXhjbHVk
ZTEgPSAwOwogIGlmIChudmFyMSA8IDApCS8qIE9LLCBoZXJlIHdlIGdvOiB2YXJpYWJsZXMgbGlz
dGVkIGZvciBleGNsdXNpb24gKi8KICAgIHsKICAgICAgZXhjbHVkZTEgPSAxOwogICAgICBudmFy
MSA9IC1udmFyMTsKICAgICAgdmFyczFhID0gZGFwX21hbGxvYyhkYXBfbGlzdGxlbiwgIm1lcmdl
OiB2YXJzMWEiKTsKICAgICAgdmFyczFhWzBdID0gJ1wwJzsKICAgICAgdmFydjFhID0gKGludCAq
KSBkYXBfbWFsbG9jKGRhcF9tYXh2YXIsICJtZXJnZTogdmFydjFhIik7CiAgICAgIGZvciAodjEg
PSAwLCBudmFyMWEgPSAwOyB2MSA8IGRhcF9vYnNbZGFwX29ub10uZG9fbnZhcjsgdjErKykKCXsJ
LyogY29weSBhbGwgdmFycyBleGNlcHQgX3R5cGVfIGFuZCBleGNsdWRlZCB2YXJzICovCgkgIGlm
ICghc3RyY21wKGRhcF9vYnNbZGFwX29ub10uZG9fbmFtW3YxXSwgIl90eXBlXyIpKQoJICAgIGNv
bnRpbnVlOwoJICBmb3IgKHZ2MSA9IDA7IHZ2MSA8IG52YXIxOyB2djErKykKCSAgICB7CS8qIGxv
b2sgdG8gc2VlIGlmIGV4Y2x1ZGVkICovCgkgICAgICBpZiAodmFydjFbdnYxXSA9PSB2MSkKCQli
cmVhazsKCSAgICB9CgkgIGlmICh2djEgPT0gbnZhcjEpCS8qIG5vdCBmb3VuZCwgaW5jbHVkZSBp
dCAqLwoJICAgIHsKCSAgICAgIHN0cmNhdCh2YXJzMWEsICIgIik7CgkgICAgICBzdHJjYXQodmFy
czFhLCBkYXBfb2JzW2RhcF9vbm9dLmRvX25hbVt2MV0pOwoJICAgICAgdmFydjFhW252YXIxYSsr
XSA9IHYxOwoJICAgIH0KCX0KICAgICAgaWYgKHZhcnMxbnVsbCkKCWRhcF9mcmVlKHZhcnMxLCAi
bWVyZ2U6IHZhcnMxIik7CiAgICAgIHZhcnMxID0gdmFyczFhOwkvKiByZWFzc2lnbiBsaXN0OyB0
aGlzIHdvbid0IGhhcHBlbiBpZiB2YXJzMSB3YXMgTlVMTCAqLwogICAgICBudmFyMSA9IG52YXIx
YTsKICAgICAgZGFwX2ZyZWUodmFydjEsICJtZXJnZTogdmFydjEiKTsKICAgICAgdmFydjEgPSB2
YXJ2MWE7CiAgICB9CiAgaWYgKG1hcmtzKQogICAgbm1hcmsgPSBkYXBfbGlzdChtYXJrcywgbWFy
a3YxLCBkYXBfbWF4dmFyKTsKICBlbHNlCiAgICBubWFyayA9IDA7CiAgZGFwX29ubyA9IDE7CiAg
aW5zZXQoZm5hbWUyKTsJLyogc2V0IHVwIGlucHV0IGZyb20gZGF0YXNldCAyICovCiAgaWYgKHZh
cnMyICYmICF2YXJzMlswXSkJCS8qIHZhcnMyIG51bGwgc3RyaW5nOiB1c2UgYWxsIHZhcmlhYmxl
cyAqLwogICAgewogICAgICB2YXJzMm51bGwgPSAxOwogICAgICAvKiBpbiB0aGlzIGNhc2UsIG5l
ZWQgdG8gbWFrZSBvdXIgb3duIHZhcnMyIGxpc3QgKi8KICAgICAgdmFyczIgPSBkYXBfbWFsbG9j
KGRhcF9saXN0bGVuLCAibWVyZ2U6IHZhcnMyIik7CiAgICAgIHZhcnMyWzBdID0gJ1wwJzsKICAg
ICAgZm9yICh2MiA9IDA7IHYyIDwgZGFwX29ic1tkYXBfb25vXS5kb19udmFyOyB2MisrKQoJewoJ
ICBpZiAoc3RyY21wKGRhcF9vYnNbZGFwX29ub10uZG9fbmFtW3YyXSwgIl90eXBlXyIpKQoJICAg
IHsJLyogY29weSBhbGwgdmFycyBleGNlcHQgX3R5cGVfICovCgkgICAgICBzdHJjYXQodmFyczIs
ICIgIik7CgkgICAgICBzdHJjYXQodmFyczIsIGRhcF9vYnNbZGFwX29ub10uZG9fbmFtW3YyXSk7
CgkgICAgfQoJfQogICAgfQogIG52YXIyID0gZXhwYW5kKHZhcnMyLCB2YXJ2MiwgZGFwX21heHZh
cik7CiAgZXhjbHVkZTIgPSAwOwogIGlmIChudmFyMiA8IDApCS8qIE9LLCBoZXJlIHdlIGdvOiB2
YXJpYWJsZXMgbGlzdGVkIGZvciBleGNsdXNpb24gKi8KICAgIHsKICAgICAgZXhjbHVkZTIgPSAx
OwogICAgICBudmFyMiA9IC1udmFyMjsKICAgICAgdmFyczJhID0gZGFwX21hbGxvYyhkYXBfbGlz
dGxlbiwgIm1lcmdlOiB2YXJzMmEiKTsKICAgICAgdmFyczJhWzBdID0gJ1wwJzsKICAgICAgdmFy
djJhID0gKGludCAqKSBkYXBfbWFsbG9jKGRhcF9tYXh2YXIsICJtZXJnZTogdmFydjJhIik7CiAg
ICAgIGZvciAodjIgPSAwLCBudmFyMmEgPSAwOyB2MiA8IGRhcF9vYnNbZGFwX29ub10uZG9fbnZh
cjsgdjIrKykKCXsJLyogY29weSBhbGwgdmFycyBleGNlcHQgX3R5cGVfIGFuZCBleGNsdWRlZCB2
YXJzICovCgkgIGlmICghc3RyY21wKGRhcF9vYnNbZGFwX29ub10uZG9fbmFtW3YyXSwgIl90eXBl
XyIpKQoJICAgIGNvbnRpbnVlOwoJICBmb3IgKHZ2MiA9IDA7IHZ2MiA8IG52YXIyOyB2djIrKykK
CSAgICB7CS8qIGxvb2sgdG8gc2VlIGlmIGV4Y2x1ZGVkICovCgkgICAgICBpZiAodmFydjJbdnYy
XSA9PSB2MikKCQlicmVhazsKCSAgICB9CgkgIGlmICh2djIgPT0gbnZhcjIpCS8qIG5vdCBmb3Vu
ZCwgaW5jbHVkZSBpdCAqLwoJICAgIHsKCSAgICAgIHN0cmNhdCh2YXJzMmEsICIgIik7CgkgICAg
ICBzdHJjYXQodmFyczJhLCBkYXBfb2JzW2RhcF9vbm9dLmRvX25hbVt2Ml0pOwoJICAgICAgdmFy
djJhW252YXIyYSsrXSA9IHYyOwoJICAgIH0KCX0KICAgICAgaWYgKHZhcnMybnVsbCkKCWRhcF9m
cmVlKHZhcnMyLCAibWVyZ2U6IHZhcnMyIik7CiAgICAgIHZhcnMyID0gdmFyczJhOwkvKiByZWFz
c2lnbiBsaXN0OyB0aGlzIHdvbid0IGhhcHBlbiBpZiB2YXJzMiB3YXMgTlVMTCAqLwogICAgICBu
dmFyMiA9IG52YXIyYTsKICAgICAgZGFwX2ZyZWUodmFydjIsICJtZXJnZTogdmFydjIiKTsKICAg
ICAgdmFydjIgPSB2YXJ2MmE7CiAgICB9CiAgZGFwX2xpc3QobWFya3MsIG1hcmt2MiwgZGFwX21h
eHZhcik7CiAgZm9yICh2MSA9IDA7IHYxIDwgbm1hcms7IHYxKyspCS8qIGNoZWNrIHR5cGVzIG9m
IHBhcnQgdmFycyBhY3Jvc3MgZGF0YXNldHMgKi8KICAgIHsKICAgICAgaWYgKGRhcF9vYnNbMF0u
ZG9fbGVuW21hcmt2MVt2MV1dICE9IGRhcF9vYnNbMV0uZG9fbGVuW21hcmt2Mlt2MV1dKQoJewoJ
ICBmcHJpbnRmKGRhcF9lcnIsCgkJICAiKG1lcmdlKSBQYXJ0IHZhcmlhYmxlcyBvZiBkaWZmZXJl
bnQgdHlwZXM6ICVzICglZCkgYW5kICVzICglZClcbiIsCgkJICBkYXBfb2JzWzBdLmRvX25hbVtt
YXJrdjFbdjFdXSwgZGFwX29ic1swXS5kb19sZW5bbWFya3YxW3YxXV0sCgkJICBkYXBfb2JzWzFd
LmRvX25hbVttYXJrdjJbdjFdXSwgZGFwX29ic1sxXS5kb19sZW5bbWFya3YyW3YxXV0pOwoJICBl
eGl0KDEpOwoJfQogICAgfQogIC8qIFN0YXJ0IGFzc2VtYmxpbmcgbGlzdCBvZiBvdXRwdXQgdmFy
aWFibGVzLiAqLwogIG91dGxpc3RbMF0gPSAnXDAnOwogIGlmICh2YXJzMiAmJiBudmFyMiA+IDAp
CiAgICB2YXJjYXQob3V0bGlzdCwgdmFyczIpOwogIG91dGxpc3QyWzBdID0gJ1wwJzsKICBpZiAo
dmFyczIgJiYgbnZhcjIgPiAwKQogICAgdmFyY2F0KG91dGxpc3QyLCB2YXJzMik7CiAgZGFwX29u
byA9IDI7CQkvKiB0aGUgb3V0cHV0IGRhdGFzZXQgKi8KICBkYXBfb2JzWzJdLmRvX252YXIgPSAw
OwkvKiBzdGFydCB3aXRoIG5vdGhpbmcgKi8KICBkYXBfb2JzWzJdLmRvX292YXIgPSAwOwkvKiBl
eGNlcHQgX3R5cGVfICovCiAgZGFwX29ic1syXS5kb19vdXRbZGFwX29ic1syXS5kb19vdmFyKytd
ID0gZGFwX3ZkKCJfdHlwZV8gOCIsIDApOwogIGZvciAodjIgPSAwOyB2MiA8IG52YXIyOyB2Misr
KQogICAgewogICAgICBpZiAoZGFwX29ic1syXS5kb19uYW1bZGFwX29ic1syXS5kb19udmFyXSkK
CWRhcF9mcmVlKGRhcF9vYnNbMl0uZG9fbmFtW2RhcF9vYnNbMl0uZG9fbnZhcl0sCgkJICJtZXJn
ZTogZGFwX29ic1syXS5kb19uYW1bZGFwX29ic1syXS5kb19udmFyXSIpOwogICAgICBkYXBfb2Jz
WzJdLmRvX25hbVtkYXBfb2JzWzJdLmRvX252YXJdID0KCWRhcF9tYWxsb2Moc3RybGVuKGRhcF9v
YnNbMV0uZG9fbmFtW3ZhcnYyW3YyXV0pICsgMSwKCQkgICAibWVyZ2U6IGRhcF9vYnNbMV0uZG9f
bmFtW3ZhcnYyW3YyXV0iKTsKICAgICAgc3RyY3B5KGRhcF9vYnNbMl0uZG9fbmFtW2RhcF9vYnNb
Ml0uZG9fbnZhcl0sCgkgICAgIGRhcF9vYnNbMV0uZG9fbmFtW3ZhcnYyW3YyXV0pOwogICAgICBk
YXBfb2JzWzJdLmRvX2xlbltkYXBfb2JzWzJdLmRvX252YXJdID0gZGFwX29ic1sxXS5kb19sZW5b
dmFydjJbdjJdXTsKICAgICAgZGFwX29ic1syXS5kb19udmFyKys7CiAgICB9CiAgb3V0bGlzdDFb
MF0gPSAnXDAnOwogIGlmICh2YXJzMSAmJiBudmFyMSA+IDApCiAgICB7CiAgICAgIHN0cmNhdChv
dXRsaXN0LCAiICIpOwogICAgICB2YXJjYXQob3V0bGlzdCwgdmFyczEpOwogICAgICB2YXJjYXQo
b3V0bGlzdDEsIHZhcnMxKTsKICAgIH0KICBmb3IgKHYxID0gMDsgdjEgPCBudmFyMTsgdjErKykK
ICAgIHsKICAgICAgZm9yICh2MiA9IDA7IHYyIDwgbnZhcjI7IHYyKyspCgl7CgkgIGlmICghc3Ry
Y21wKGRhcF9vYnNbMF0uZG9fbmFtW3ZhcnYxW3YxXV0sIGRhcF9vYnNbMV0uZG9fbmFtW3ZhcnYy
W3YyXV0pKQoJICAgIGJyZWFrOwoJfQogICAgICBpZiAodjIgPCBudmFyMikKCXsKCSAgZnByaW50
ZihkYXBfZXJyLCAiKG1lcmdlKSB2YXJpYWJsZSBhcHBlYXJzIGluIGxpc3RzIGZvciBib3RoICVz
IGFuZCAlczogJXNcbiIsCgkJICBmbmFtZTEsIGZuYW1lMiwgZGFwX29ic1swXS5kb19uYW1bdmFy
djFbdjFdXSk7CgkgIGV4aXQoMSk7Cgl9CiAgICAgIGVsc2UKCXsKCSAgaWYgKGRhcF9vYnNbMl0u
ZG9fbmFtW2RhcF9vYnNbMl0uZG9fbnZhcl0pCgkgICAgZGFwX2ZyZWUoZGFwX29ic1syXS5kb19u
YW1bZGFwX29ic1syXS5kb19udmFyXSwKCQkgICAgICJtZXJnZTogZGFwX29ic1syXS5kb19uYW1b
ZGFwX29ic1syXS5kb19udmFyXSIpOwoJICBkYXBfb2JzWzJdLmRvX25hbVtkYXBfb2JzWzJdLmRv
X252YXJdID0KCSAgICBkYXBfbWFsbG9jKHN0cmxlbihkYXBfb2JzWzBdLmRvX25hbVt2YXJ2MVt2
MV1dKSArIDEsCgkJICAgICAgICJtZXJnZTogZGFwX29ic1swXS5kb19uYW1bdmFydjFbdjFdXSIp
OwoJICBzdHJjcHkoZGFwX29ic1syXS5kb19uYW1bZGFwX29ic1syXS5kb19udmFyXSwKCQkgZGFw
X29ic1swXS5kb19uYW1bdmFydjFbdjFdXSk7CgkgIGRhcF9vYnNbMl0uZG9fbGVuW2RhcF9vYnNb
Ml0uZG9fbnZhcl0gPSBkYXBfb2JzWzBdLmRvX2xlblt2YXJ2MVt2MV1dOwoJICBkYXBfb2JzWzJd
LmRvX252YXIrKzsKCX0KICAgIH0KICBvdXRzZXQob3V0bmFtZSwgb3V0bGlzdCk7CiAgc3RyY3B5
KGRhcF9vYnNbMl0uZG9fc3RyW2RhcF92YXJudW0oIl90eXBlXyIpXSwgIk9CUyIpOwogIGV4cGFu
ZChvdXRsaXN0MSwgb3ZhcnYxLCBkYXBfbWF4dmFyKTsKICBleHBhbmQob3V0bGlzdDIsIG92YXJ2
MiwgZGFwX21heHZhcik7CiAgZGFwX29ubyA9IDA7IC8qIGZvciByZWFkaW5nIGZpcnN0IGRhdGFz
ZXQgKi8KICBnb29uMSA9IHN0ZXAoKTsgLyogdHJ5IHRvIHJlYWQgb25lIGxpbmUgKi8KICBmb3Ig
KCA7IDsgKQogICAgewogICAgICBkYXBfb25vID0gMTsgLyogcHJlcGFyZSB0byByZWFkIHNlY29u
ZCBkYXRhc2V0ICovCiAgICAgIGlmIChzdGVwKCkpIC8qIGlmIHRoZXJlJ3MgYW55dGhpbmcgbGVm
dCBvZiBzZWNvbmQgZGF0YXNldCAqLwoJewoJICB3aGlsZSAoZ29vbjEpIC8qIHdoaWxlIHRoZXJl
J3MgYW55dGhpbmcgbGVmdCBvZiBmaXJzdCBkYXRhc2V0ICovCgkgICAgewoJICAgICAgLyogc2Vl
IGlmIG1hcmsgdmFsdWVzIHZhcmlhYmxlcyBjdXJyZW50bHkgbWF0Y2ggZm9yIGJvdGggZGF0YXNl
dHMgKi8KCSAgICAgIGlzZGlmZiA9IDA7CgkgICAgICBpZiAobm1hcmspIC8qIG9ubHkgY2hlY2sg
aWYgdGhlcmUgYXJlIG1hcmsgdmFyaWFibGVzICovCgkJewoJCSAgZm9yICh2MSA9IDA7IHYxIDwg
bm1hcms7IHYxKyspCgkJICAgIHsKCQkgICAgICBpZiAoZGFwX29ic1swXS5kb19sZW5bbWFya3Yx
W3YxXV0gPT0gREJMKQoJCQl7CgkJCSAgZGRpZmYgPSBkYXBfb2JzWzBdLmRvX2RibFttYXJrdjFb
djFdXSAtCgkJCSAgICBkYXBfb2JzWzFdLmRvX2RibFttYXJrdjJbdjFdXTsKCQkJICBpZiAoZGRp
ZmYgPCAwLjApCgkJCSAgICBpc2RpZmYgPSAtMTsKCQkJICBlbHNlIGlmIChkZGlmZiA+IDAuMCkK
CQkJICAgIGlzZGlmZiA9IDE7CgkJCSAgZWxzZQoJCQkgICAgaXNkaWZmID0gMDsKCQkJICBpZiAo
aXNkaWZmKQoJCQkgICAgYnJlYWs7CgkJCX0KCQkgICAgICBlbHNlIGlmIChkYXBfb2JzWzBdLmRv
X2xlblttYXJrdjFbdjFdXSA9PSBJTlQpCgkJCXsKCQkJICBpc2RpZmYgPSBkYXBfb2JzWzBdLmRv
X2ludFttYXJrdjFbdjFdXSAtCgkJCSAgICBkYXBfb2JzWzFdLmRvX2ludFttYXJrdjJbdjFdXTsK
CQkJICBpZiAoaXNkaWZmKQoJCQkgICAgYnJlYWs7CgkJCX0KCQkgICAgICBlbHNlIGlmICgoaXNk
aWZmID0gc3RyY21wKGRhcF9vYnNbMF0uZG9fc3RyW21hcmt2MVt2MV1dLAoJCQkJCQlkYXBfb2Jz
WzFdLmRvX3N0clttYXJrdjJbdjFdXSkpKQoJCQlicmVhazsKCQkgICAgfQoJCX0KCSAgICAgIGlm
IChpc2RpZmYgPCAwKSAvKiBkYXRhc2V0MSBub3QgdXAgdG8gd2hlcmUgZGF0YXNldDIgaXMgKi8K
CQl7CgkJICBkYXBfb25vID0gMDsgLyogcmVhZCBhbm90aGVyIGxpbmUgb2YgZGF0YXNldDEgKi8K
CQkgIGdvb24xID0gc3RlcCgpOwoJCX0KCSAgICAgIGVsc2UgaWYgKGlzZGlmZiA+IDApIC8qIGRh
dGFzZXQxIHBhc3NlZCB3aGVyZSBkYXRhc2V0MiBpcyAqLwoJCWJyZWFrOwoJICAgICAgZWxzZSAv
KiBvciBlbHNlIHdlJ3JlIG9uIHRoZSBzYW1lIHBhZ2U6IG1lcmdlICovCgkJewoJCSAgZm9yICh2
MSA9IDA7IHYxIDwgbnZhcjE7IHYxKyspCgkJICAgIHsKCQkgICAgICBpZiAoZGFwX29ic1swXS5k
b19sZW5bdmFydjFbdjFdXSA9PSBEQkwpCgkJCWRhcF9vYnNbMl0uZG9fZGJsW292YXJ2MVt2MV1d
ID0KCQkJICBkYXBfb2JzWzBdLmRvX2RibFt2YXJ2MVt2MV1dOwoJCSAgICAgIGVsc2UgaWYgKGRh
cF9vYnNbMF0uZG9fbGVuW3ZhcnYxW3YxXV0gPT0gSU5UKQoJCQlkYXBfb2JzWzJdLmRvX2ludFtv
dmFydjFbdjFdXSA9CgkJCSAgZGFwX29ic1swXS5kb19pbnRbdmFydjFbdjFdXTsKCQkgICAgICBl
bHNlCgkJCXsKCQkJICBpZiAoZGFwX29ic1syXS5kb19zdHJbb3ZhcnYxW3YxXV0pCgkJCSAgICBk
YXBfZnJlZShkYXBfb2JzWzJdLmRvX3N0cltvdmFydjFbdjFdXSwKCQkJCSAgICAgIm1lcmdlOiBk
YXBfb2JzWzJdLmRvX3N0cltvdmFydjFbdjFdXSIpOwoJCQkgIGRhcF9vYnNbMl0uZG9fc3RyW292
YXJ2MVt2MV1dID0KCQkJICAgIGRhcF9tYWxsb2Moc3RybGVuKGRhcF9vYnNbMF0uZG9fc3RyW3Zh
cnYxW3YxXV0pICsgMSwKCQkJCSAgICAgICAibWVyZ2U6IGRhcF9vYnNbMF0uZG9fc3RyW292YXJ2
MVt2MV1dIik7CgkJCSAgc3RyY3B5KGRhcF9vYnNbMl0uZG9fc3RyW292YXJ2MVt2MV1dLAoJCQkJ
IGRhcF9vYnNbMF0uZG9fc3RyW3ZhcnYxW3YxXV0pOwoJCQl9CgkJICAgIH0KCQkgIGZvciAodjIg
PSAwOyB2MiA8IG52YXIyOyB2MisrKQoJCSAgICB7CgkJICAgICAgaWYgKGRhcF9vYnNbMV0uZG9f
bGVuW3ZhcnYyW3YyXV0gPT0gREJMKQoJCQlkYXBfb2JzWzJdLmRvX2RibFtvdmFydjJbdjJdXSA9
CgkJCSAgZGFwX29ic1sxXS5kb19kYmxbdmFydjJbdjJdXTsKCQkgICAgICBlbHNlIGlmIChkYXBf
b2JzWzFdLmRvX2xlblt2YXJ2Mlt2Ml1dID09IElOVCkKCQkJZGFwX29ic1syXS5kb19pbnRbb3Zh
cnYyW3YyXV0gPQoJCQkgIGRhcF9vYnNbMV0uZG9faW50W3ZhcnYyW3YyXV07CgkJICAgICAgZWxz
ZQoJCQl7CgkJCSAgaWYgKGRhcF9vYnNbMl0uZG9fc3RyW292YXJ2Mlt2Ml1dKQoJCQkgICAgZGFw
X2ZyZWUoZGFwX29ic1syXS5kb19zdHJbb3ZhcnYyW3YyXV0sCgkJCQkgICAgICJtZXJnZTogZGFw
X29ic1syXS5kb19zdHJbb3ZhcnYyW3YyXV0iKTsKCQkJICBkYXBfb2JzWzJdLmRvX3N0cltvdmFy
djJbdjJdXSA9CgkJCSAgICBkYXBfbWFsbG9jKHN0cmxlbihkYXBfb2JzWzFdLmRvX3N0clt2YXJ2
Mlt2Ml1dKSArIDEsCgkJCQkgICAgICAgIm1lcmdlOiBkYXBfb2JzWzFdLmRvX3N0cltvdmFydjJb
djJdXSIpOwoJCQkgIHN0cmNweShkYXBfb2JzWzJdLmRvX3N0cltvdmFydjJbdjJdXSwKCQkJCSBk
YXBfb2JzWzFdLmRvX3N0clt2YXJ2Mlt2Ml1dKTsKCQkJfQoJCSAgICB9CgkJICBkYXBfb25vID0g
MjsgLyogcHJlcGFyZSB0byBvdXRwdXQgdG8gbWVyZ2VkIGZpbGUgKi8KCQkgIG91dHB1dCgpOwoJ
CSAgZGFwX29ubyA9IDA7CgkJICBnb29uMSA9IHN0ZXAoKTsKCQl9CgkgICAgICBpZiAoIW5tYXJr
KQoJCWJyZWFrOwoJICAgIH0KCX0KICAgICAgZWxzZQoJYnJlYWs7CiAgICB9CiAgZGFwX29ubyA9
IDA7CiAgaWYgKGRhcF9pblswXSkKICAgIHsKICAgICAgZGZjbG9zZShkYXBfaW5bMF0pOwogICAg
ICBkYXBfaW5bMF0gPSAoREZJTEUgKikgTlVMTDsKICAgIH0KICBpZiAoZGFwX2luWzFdKQogICAg
ewogICAgICBkZmNsb3NlKGRhcF9pblsxXSk7CiAgICAgIGRhcF9pblsxXSA9IChERklMRSAqKSBO
VUxMOwogICAgfQogIGlmIChkYXBfb3V0W2RhcF9vbm9dKQogICAgewogICAgICBkZmNsb3NlKGRh
cF9vdXRbZGFwX29ub10pOwogICAgICBkYXBfb3V0W2RhcF9vbm9dID0gKERGSUxFICopIE5VTEw7
CiAgICB9CiAgZGFwX2ZyZWUob3V0bGlzdCwgIm1lcmdlOiBvdXRsaXN0Iik7CiAgZGFwX2ZyZWUo
b3V0bGlzdDEsICJtZXJnZTogb3V0bGlzdDEiKTsKICBkYXBfZnJlZShvdXRsaXN0MiwgIm1lcmdl
OiBvdXRsaXN0MiIpOwogIGRhcF9mcmVlKG92YXJ2MSwgIm1lcmdlOiBvdmFydjEiKTsKICBkYXBf
ZnJlZShvdmFydjIsICJtZXJnZTogb3ZhcnYyIik7CiAgZGFwX2ZyZWUobWFya3YxLCAibWVyZ2U6
IG1hcmt2MSIpOwogIGRhcF9mcmVlKG1hcmt2MiwgIm1lcmdlOiBtYXJrdjIiKTsKICBpZiAodmFy
czFudWxsKQogICAgZGFwX2ZyZWUodmFyczEsICJtZXJnZTogdmFyczEiKTsKICBpZiAodmFyczJu
dWxsKQogICAgZGFwX2ZyZWUodmFyczIsICJtZXJnZTogdmFyczIiKTsKICBpZiAoZXhjbHVkZTEg
PCAwKQogICAgewogICAgICBkYXBfZnJlZSh2YXJzMWEsICJtZXJnZTogdmFyczFhIik7CiAgICAg
IGRhcF9mcmVlKHZhcnYxYSwgIm1lcmdlOiB2YXJ2MWEiKTsKICAgIH0KICBlbHNlCiAgICBkYXBf
ZnJlZSh2YXJ2MSwgIm1lcmdlOiB2YXJ2MSIpOwogIGlmIChleGNsdWRlMiA8IDApCiAgICB7CiAg
ICAgIGRhcF9mcmVlKHZhcnMyYSwgIm1lcmdlOiB2YXJzMmEiKTsKICAgICAgZGFwX2ZyZWUodmFy
djJhLCAibWVyZ2U6IHZhcnYyYSIpOwogICAgfQogIGVsc2UKICAgIGRhcF9mcmVlKHZhcnYyLCAi
bWVyZ2U6IHZhcnYyIik7Cn0KCnZvaWQgdGl0bGUoY2hhciAqdGV4dCkKewogIGRhcF90aXRsZSA9
IHRleHQ7Cn0KCnZvaWQgZGFwX2hlYWQoaW50IG1hcmt2W10sIGludCBubWFyaykKewogIHRpbWVf
dCB0OwogIGludCBtOwoKICBmcHV0cygiXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0iLCBkYXBfbHN0KTsKICBmcHJpbnRmKGRhcF9sc3QsICJcbkRhcCAlM2QuICIsIHBhZ2Vubysr
KTsKICB0aW1lKCZ0KTsKICBmcHV0cyhjdGltZSgmdCksIGRhcF9sc3QpOwogIHB1dGMoJ1xuJywg
ZGFwX2xzdCk7CiAgaWYgKGRhcF90aXRsZSkKICAgIHsKICAgICAgZnB1dHMoZGFwX3RpdGxlLCBk
YXBfbHN0KTsKICAgICAgcHV0YygnXG4nLCBkYXBfbHN0KTsKICAgIH0KICBpZiAobm1hcmspCiAg
ICB7CiAgICAgIGZwcmludGYoZGFwX2xzdCwgIlxuRm9yOiAiKTsKICAgICAgZm9yIChtID0gMDsg
bSA8IG5tYXJrOyBtKyspCgl7CgkgIHN3aXRjaChkYXBfb2JzW2RhcF9vbm9dLmRvX2xlblttYXJr
dlttXV0pCgkgICAgewoJICAgIGNhc2UgREJMOgoJICAgICAgZnByaW50ZihkYXBfbHN0LCAiJXMg
PSAlZyIsCgkJICAgICAgZGFwX29ic1tkYXBfb25vXS5kb19uYW1bbWFya3ZbbV1dLAoJCSAgICAg
IGRhcF9vYnNbZGFwX29ub10uZG9fZGJsW21hcmt2W21dXSk7CgkgICAgICBicmVhazsKCSAgICBj
YXNlIElOVDoKCSAgICAgIGZwcmludGYoZGFwX2xzdCwgIiVzID0gJWQiLAoJCSAgICAgIGRhcF9v
YnNbZGFwX29ub10uZG9fbmFtW21hcmt2W21dXSwKCQkgICAgICBkYXBfb2JzW2RhcF9vbm9dLmRv
X2ludFttYXJrdlttXV0pOwoJICAgICAgYnJlYWs7CgkgICAgZGVmYXVsdDoKCSAgICAgIGZwcmlu
dGYoZGFwX2xzdCwgIiVzID0gJXMiLAoJCSAgICAgIGRhcF9vYnNbZGFwX29ub10uZG9fbmFtW21h
cmt2W21dXSwKCQkgICAgICBkYXBfb2JzW2RhcF9vbm9dLmRvX3N0clttYXJrdlttXV0pOwoJICAg
ICAgYnJlYWs7CgkgICAgfQoJICBpZiAobSA8IG5tYXJrIC0gMSkKCSAgICBmcHV0cygiLCAiLCBk
YXBfbHN0KTsKCX0KICAgICAgcHV0YygnXG4nLCBkYXBfbHN0KTsKICAgIH0KICBwdXRjKCdcbics
IGRhcF9sc3QpOwp9Cg==
--089e015369141cc8d104daffc484
Content-Type: text/x-csrc; charset=US-ASCII; name="sbstrans3.c"
Content-Disposition: attachment; filename="sbstrans3.c"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hfukvw811

LyogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4KICoKICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIERhcC4KICoKICogIERhcCBpcyBmcmVlIHNv
ZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAqICBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieQogKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBv
ZiB0aGUgTGljZW5zZSwgb3IKICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CiAqCiAqICBEYXAgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCiAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgogKgogKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogIGFsb25nIHdpdGggRGFwLiAgSWYg
bm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogKi8KCiNpbmNsdWRlIDxz
dGRpby5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUg
InNicy5oIgoKZXh0ZXJuIGNoYXIgc2JzdG1wW1RPS0VOTEVOICsgMV07IC8qIG5hbWUgb2YgY3Vy
cmVudCB0ZW1wIGRhdGFzZXQgKi8KZXh0ZXJuIGludCBzYnNsaW5lbm87CgovKiBUcmFuc2xhdGUg
Y2FsbCB0byBHTE0uIHN0ZXAgc3RhcnRzIGFmdGVyICJwcm9jIGdsbSIgKi8Kdm9pZCBnbG10cmFu
cyhjaGFyICpzdGVwLCBGSUxFICpkYXBmaWxlKQp7CiAgaW50IHM7IC8qIGluZGV4IHRvIHN0ZXAg
Ki8KICBpbnQgc2luY3I7IC8qIGluY3JlbWVudCBmb3IgcyAqLwogIHN0YXRpYyBjaGFyIHNldG5h
bWVbVE9LRU5MRU4gKyAxXTsKICBpbnQgbW9kZWxzdGFydDsgLyogc3RhcnRpbmcgcG9zaXRpb24g
b2YgbW9kZWwgKi8KICBzdGF0aWMgY2hhciByZXNwb25zZVtUT0tFTkxFTiArIDFdOyAvKiBuYW1l
IG9mIHJlc3BvbnNlIHZhcmlhYmxlICovCiAgaW50IHJlc3BsZW47IC8qIGxlbmd0aCBvZiByZXNw
b25zZSB2YXJpYWJsZSBuYW1lICovCiAgaW50IGU7IC8qIGluZGV4IHRvIHN0ZXAsIGZvciBzdGVw
cGluZyB0aHJvdWdoIGVmZmVjdHMgb2YgdGhlIG1vZGVsICovCiAgaW50IGxzbWVhbnM7IC8qIDAg
PSBubyBsc21lYW5zIHN0YXRlbWVudCwgPiAwIGlzIHN0YXJ0IG9mIGxzbWVhbnMgc3RhdGVtZW50
LiAqLwogIHN0YXRpYyBjaGFyIHRlc3RbVE9LRU5MRU4gKyAxXTsgLyogZHVubmV0dCwgdHVrZXks
IG9yIGxzZCAqLwogIHN0YXRpYyBjaGFyIGxldmVsW1RPS0VOTEVOICsgMV07IC8qIGFscGhhIHJl
cXVlc3RlZCBmb3IgbHNtZWFucyAqLwogIGludCB0ZXJtOyAvKiBzdGFydGluZyBwb3NpdGlvbiBv
ZiB0ZXJtIGluIG51bWVyYXRvciBvZiBmdGVzdCAqLwogIGludCBub21hdGNoOyAvKiBsc21lYW5z
IHRlcm0gZG9lc24ndCBtYXRjaCBmdGVzdCB0ZXJtICovCiAgaW50IGNsYXNzc3RhcnQ7IC8qIHN0
YXJ0IG9mIGNsYXNzIHZhcmlhYmxlIGxpc3QgKi8KICBpbnQgbmJ5dmFyczsgLyogbnVtYmVyIG9m
IGJ5IHZhcnM6IG5lZWQgdG8ga25vdyB0aGlzIGZvciBjb250cmFzdHMgKi8KICBpbnQgY2xhc3N2
YXI7IC8qIGluZGV4IG9mIGNsYXNzIHZhciBpbiBjb250cmFzdCAqLwogIGludCBjOyAvKiBpbmRl
eCB0byBjbGFzcyB2YXJzICovCiAgc3RhdGljIGNoYXIgY2xhc3NuYW1lW1RPS0VOTEVOICsgMV07
IC8qIG5hbWUgb2YgY2xhc3MgdmFyIGluIGNvbnRyYXN0ICovCiAgdW5zaWduZWQgaW50IGNvbnRy
YXN0dGVybTsgLyogdmFsdWUgZm9yIF90ZXJtXyB2YXJpYWJsZSBmb3IgY29udHJhc3RzICovCiAg
aW50ICpjb2VmZjsgLyogY29lZmZpY2llbnRzIGZvciB0aGUgZWZmZWN0ICovCiAgaW50IG5jb2Vm
ZjsgLyogbnVtYmVyIG9mIGNvZWZmaWNpZW50cyBmb3IgY29udHJhc3QgKi8KICBpbnQgbWludXM7
IC8qIGNvZWZmIGhhcyBtaW51cyBzaWduPyAocmVhZCBhcyBzZXBhcmF0ZSB0b2tlbikgKi8KICBp
bnQgY29lZmZzdW07IC8qIHN1bSBvZiBjb2VmZmljaWVudHMgZm9yIGNvbnRyYXN0ICovCgogIGlm
ICghZ2V0b3B0aW9uKHN0ZXAsICJkYXRhIiwgc2V0bmFtZSwgMSkpCiAgICBzdHJjcHkoc2V0bmFt
ZSwgc2JzdG1wKTsKCiAgaWYgKChtb2RlbHN0YXJ0ID0gZmluZHN0YXRlbWVudChzdGVwLCAibW9k
ZWwiKSkpCiAgICByZXNwbGVuID0gbGluZWNweShyZXNwb25zZSwgc3RlcCArIG1vZGVsc3RhcnQp
OwogIGVsc2UKICAgIHsKICAgICAgZnByaW50ZihzdGRlcnIsCgkgICAgICAic2JzdHJhbnM6IGJl
Zm9yZSAlZDogbWlzc2luZyBtb2RlbCBzdGF0ZW1lbnQgaW4gcHJvYyBnbG1cbiIsCgkgICAgICBz
YnNsaW5lbm8pOwogICAgICBleGl0KDEpOwogICAgfQoKICBpZiAoIShjbGFzc3N0YXJ0ID0gZmlu
ZHN0YXRlbWVudChzdGVwLCAiY2xhc3MiKSkpCiAgICB7CiAgICAgIGZwcmludGYoc3RkZXJyLAoJ
ICAgICAgInNic3RyYW5zOiBiZWZvcmUgJWQ6IG1pc3NpbmcgY2xhc3Mgc3RhdGVtZW50IGluIHBy
b2MgZ2xtXG4iLAoJICAgICAgc2JzbGluZW5vKTsKICAgICAgZXhpdCgxKTsKICAgIH0KCiAgaWYg
KChzID0gZmluZHN0YXRlbWVudChzdGVwLCAiYnkiKSkpCiAgICB7CiAgICAgIGZvciAobmJ5dmFy
cyA9IDA7IHN0ZXBbc10gJiYgc3RlcFtzXSAhPSAnOyc7IG5ieXZhcnMrKykKCXMgKz0gbGluZWNw
eSgoY2hhciAqKSBOVUxMLCBzdGVwICsgcykgKyAxOwogICAgfQogIGVsc2UKICAgIG5ieXZhcnMg
PSAwOwoKICAvKiB3ZSBoYXZlIHRvIHNvcnQgYnkgdGhlIGNsYXNzIHZhcnMgYW5kIHRvIGdldCBt
ZWFucywgZXRjLiAqLwogIGZwcmludGYoZGFwZmlsZSwgInNvcnQoXCIlc1wiLCBcIiIsIHNldG5h
bWUpOwogIGNvcHlsaXN0KHN0ZXAsICJieSIsIGRhcGZpbGUpOwogIGNvcHlsaXN0KHN0ZXAsICJj
bGFzcyIsIGRhcGZpbGUpOwogIGZwdXRzKCJcIiwgXCJcIik7XG4iLCBkYXBmaWxlKTsKCiAgLyog
d2UgaGF2ZSB0byBnZXQgbWVhbnMgYW5kIHZhcnMgKi8KICBmcHJpbnRmKGRhcGZpbGUsICJtZWFu
cyhcIiVzLnNydFwiLCBcIiVzXCIsIFwiTiBNRUFOIFZBUlwiLCBcIiIsIHNldG5hbWUsIHJlc3Bv
bnNlKTsKICBjb3B5bGlzdChzdGVwLCAiYnkiLCBkYXBmaWxlKTsKICBjb3B5bGlzdChzdGVwLCAi
Y2xhc3MiLCBkYXBmaWxlKTsKICBmcHV0cygiXCIpO1xuIiwgZGFwZmlsZSk7CgogIC8qIG5vdyB3
ZSBjYW4gc3RhcnQgdGhlIEFOT1ZBIGFuZCB0ZXN0IHRoZSB3aG9sZSBtb2RlbCAqLwogIGZwcmlu
dGYoZGFwZmlsZSwgImVmZmVjdHMoXCIlcy5zcnQubW5zXCIsIFwiJXMgIiwgc2V0bmFtZSwgcmVz
cG9uc2UpOwogIGNvcHlsaXN0KHN0ZXAsICJjbGFzcyIsIGRhcGZpbGUpOwogIGZwdXRzKCJcIiwg
XCIiLCBkYXBmaWxlKTsKICBzID0gbW9kZWxzdGFydCArIHJlc3BsZW4gKyAxOwogIGlmIChzdGVw
W3NdICE9ICc9JykKICAgIHsKICAgICAgZnByaW50ZihzdGRlcnIsCgkgICAgICAic2JzdHJhbnM6
IGJlZm9yZSAlZDogbWlzc2luZyA9IGluIG1vZGVsIHN0YXRlbWVudCBpbiBwcm9jIGdsbVxuIiwK
CSAgICAgIHNic2xpbmVubyk7CiAgICAgIGV4aXQoMSk7CiAgICB9CiAgZm9yIChzICs9IDI7IHN0
ZXBbc10gJiYgc3RlcFtzXSAhPSAnLycgJiYgc3RlcFtzXSAhPSAnOyc7IHMrKykKICAgIHsKICAg
ICAgaWYgKHN0ZXBbc10gPT0gJ1xuJykKCXB1dGMoJyAnLCBkYXBmaWxlKTsKICAgICAgZWxzZQoJ
cHV0YyhzdGVwW3NdLCBkYXBmaWxlKTsKICAgIH0KICBmcHV0cygiXCIsIFwiIiwgZGFwZmlsZSk7
CiAgY29weWxpc3Qoc3RlcCwgImJ5IiwgZGFwZmlsZSk7CiAgZnB1dHMoIlwiKTtcbiIsIGRhcGZp
bGUpOwoKICAvKiBub3cgd2UndmUgcnVuIHRoZSBtb2RlbCwgaXQncyB0aW1lIHRvIHRlc3QgZWFj
aCBlZmZlY3QgaW4gaXQgKi8KICAvKiB3ZSBuZWVkIGEgc2VwYXJhdGUgY2FsbCB0byBmdGVzdCBm
b3IgZWFjaCBlZmZlY3QgYW5kIGNoZWNrIGZvciBsc21lYW5zIHN0YXRlbWVudHMKICAgKi8KCiAg
LyogZmlyc3QgZ2V0IHRoZSBmaXJzdCBsc21lYW5zIHN0YXRlbWVudCAqLwogIGlmICgobHNtZWFu
cyA9IGZpbmRzdGF0ZW1lbnQoc3RlcCwgImxzbWVhbnMiKSkpCiAgICB7IC8qIHNlZSBpZiBpdCBz
cGVjaWZpZXMgYW4gZXJyb3IgdGVybSAqLwogICAgICBpZiAoZ2V0b3B0aW9uKHN0ZXAgKyBsc21l
YW5zLCAiZSIsIChjaGFyICopIE5VTEwsIDEpKQoJbHNtZWFucyA9IDA7IC8qIG5vdCBnb2luZyB0
byB1c2UgaXQgKi8KICAgICAgZWxzZSAvKiBuZWVkIHRvIGdldCB0ZXN0IG5hbWUsIGFscGhhICov
Cgl7CgkgIGZvciAocyA9IGxzbWVhbnM7IHN0ZXBbc10gJiYgc3RlcFtzXSAhPSAnLycgJiYgc3Rl
cFtzXSAhPSAnOyc7IHMrKykKCSAgICA7IC8qIGdldCB0byBvcHRpb25zICovCgkgIHRlc3RbMF0g
PSAnXDAnOyAvKiBoYXZlbid0IGZvdW5kIG9uZSB5ZXQuLi4gKi8KCSAgaWYgKHN0ZXBbc10gPT0g
Jy8nKQoJICAgIHsKCSAgICAgIGZvciAocyArPSAyOyBzdGVwW3NdICYmIHN0ZXBbc10gIT0gJzsn
OyApCgkJewoJCSAgcyArPSBsaW5lY3B5KHRlc3QsIHN0ZXAgKyBzKSArIDE7CgkJICB1cHBlcih0
ZXN0KTsKCQkgIGlmIChzdHJjbXAodGVzdCwgIkRVTk5FVFQiKSAmJiBzdHJjbXAodGVzdCwgIlRV
S0VZIikgJiYgc3RyY21wKHRlc3QsICJMU0QiKSkKCQkgICAgdGVzdFswXSA9ICdcMCc7IC8qIHdh
c24ndCwgYWZ0ZXIgYWxsICovCgkJfQoJICAgIH0KCSAgaWYgKCF0ZXN0WzBdKQoJICAgIHsKCSAg
ICAgIGZwcmludGYoc3RkZXJyLAoJCSAgICAgICJzYnN0cmFuczogYmVmb3JlICVkOiBubyB0ZXN0
IHNwZWNpZmllZCBpbiBsc21lYW5zIHN0YXRlbWVudCBpbiBwcm9jIGdsbVxuIiwKCQkgICAgICBz
YnNsaW5lbm8pOwoJICAgICAgZXhpdCgxKTsKCSAgICB9CgkgIGlmICghZ2V0b3B0aW9uKHN0ZXAg
KyBsc21lYW5zLCAiYWxwaGEiLCBsZXZlbCwgMSkpCgkgICAgc3RyY3B5KGxldmVsLCAiMC4wNSIp
OwoJfQogICAgfQoKICAvKiBub3cgd2UncmUgcmVhZHkgdG8gdGVzdCB0aGUgdGVybXMgaW4gdGhl
IG1vZGVsLCBvbmUtYnktb25lICovCgogIGUgPSBtb2RlbHN0YXJ0ICsgcmVzcGxlbiArIDM7CiAg
d2hpbGUgKHN0ZXBbZV0gJiYgc3RlcFtlXSAhPSAnLycgJiYgc3RlcFtlXSAhPSAnOycpCiAgICB7
CiAgICAgIGZwcmludGYoZGFwZmlsZSwgImZ0ZXN0KFwiJXMuc3J0Lm1ucy5jb25cIiwgXCIlcyAi
LCBzZXRuYW1lLCByZXNwb25zZSk7CiAgICAgIGNvcHlsaXN0KHN0ZXAsICJjbGFzcyIsIGRhcGZp
bGUpOwogICAgICBmcHV0cygiXCIsIFwiIiwgZGFwZmlsZSk7CiAgICAgIC8qIGhlcmUgY29tZXMg
dGhlIG51bWVyYXRvciAqLwogICAgICB0ZXJtID0gZTsgLyogbWFyayB0aGlzIHBsYWNlIGZvciBs
c21lYW5zICovCiAgICAgIHdoaWxlIChzdGVwW2VdICYmIHN0ZXBbZV0gIT0gJ1xuJykKCXsKCSAg
cHV0YyhzdGVwW2VdLCBkYXBmaWxlKTsKCSAgZSsrOwoJICAvKiBub3cgc2VlIGlmIGl0J3MgYSBj
cm9zc2VkIG9yIG5lc3RlZCBlZmZlY3QgKi8KCSAgaWYgKHN0ZXBbZV0gPT0gJ1xuJyAmJiBzdGVw
W2UgKyAxXSA9PSAnKicpIC8qIHRoZW4gbmVlZCB0byBrZWVwIGNvcHlpbmcgKi8KCSAgICB7Cgkg
ICAgICBwdXRjKCcqJywgZGFwZmlsZSk7CgkgICAgICBlICs9IDM7IC8qIGdldCB0byBuZXh0IHZh
cmlhYmxlICovCgkgICAgICB0ZXJtID0gMDsgLyogbWFyayBhcyBjcm9zc2VkOiBsc21lYW5zIGNh
bid0IGhhbmRsZSB0aGVzZSB5ZXQgKi8KCSAgICB9Cgl9CiAgICAgIGZwdXRzKCJcIiwgXCJcIiwg
XCIiLCBkYXBmaWxlKTsgLyogbnVsbCBkZW5vbWluYXRvciAqLwogICAgICBjb3B5bGlzdChzdGVw
LCAiYnkiLCBkYXBmaWxlKTsKICAgICAgZnB1dHMoIlwiKTtcbiIsIGRhcGZpbGUpOwogICAgICBl
Kys7IC8qIHBvc2l0aW9uIGF0IG5leHQgdGVybSAqLwoKICAgICAgaWYgKGxzbWVhbnMgJiYgdGVy
bSkgLyogdGVybSBpcyBwb3NpdGlvbiBvZiBudW1lcmF0b3IgaW4gZnRlc3QganVzdCBydW4gKi8K
CXsKCSAgZm9yIChzID0gbHNtZWFuczsgc3RlcFtzXSAmJiBzdGVwW3NdICE9ICcvJyAmJiBzdGVw
W3NdICE9ICc7JyAmJgoJCSAobm9tYXRjaCA9IGxpbmVjbXAoc3RlcCArIHMsIHN0ZXAgKyB0ZXJt
KSk7CgkgICAgICAgcyArPSBsaW5lY3B5KChjaGFyICopIE5VTEwsIHN0ZXAgKyBzKSArIDEpCgkg
ICAgOyAvKiBzZWFyY2ggZm9yIGZ0ZXN0IGVmZmVjdCBpbiBsc21lYW5zIHN0YXRlbWVudCAqLwoJ
ICBpZiAoIW5vbWF0Y2gpCgkgICAgewoJICAgICAgZnByaW50ZihkYXBmaWxlLAoJCSAgICAgICJs
c21lYW5zKFwiJXMuc3J0Lm1ucy50c3RcIiwgXCIlc1wiLCAlcywgXCIlcyAiLAoJCSAgICAgIHNl
dG5hbWUsIHRlc3QsIGxldmVsLCByZXNwb25zZSk7CgkgICAgICBjb3B5bGlzdChzdGVwLCAiY2xh
c3MiLCBkYXBmaWxlKTsKCSAgICAgIGZwdXRzKCJcIiwgXCIiLCBkYXBmaWxlKTsKCSAgICAgIGZv
ciAocyA9IHRlcm07IHN0ZXBbc10gJiYgc3RlcFtzXSAhPSAnXG4nOyBzKyspCgkJcHV0YyhzdGVw
W3NdLCBkYXBmaWxlKTsKCSAgICAgIGZwdXRzKCJcIiwgXCIiLCBkYXBmaWxlKTsKCSAgICAgIGNv
cHlsaXN0KHN0ZXAsICJieSIsIGRhcGZpbGUpOwoJICAgICAgZnB1dHMoIlwiLCBcInMxMlwiKTtc
biIsIGRhcGZpbGUpOwoJICAgIH0KCX0KICAgIH0KCiAgLyogbm93IGRvIHNwZWNpZmljIHRlc3Qg
cmVxdWVzdCAqLwogIGZvciAocyA9IDA7IChzaW5jciA9IGZpbmRzdGF0ZW1lbnQoc3RlcCArIHMs
ICJ0ZXN0IikpOyApCiAgICB7CiAgICAgIHMgKz0gc2luY3I7CiAgICAgIGZwcmludGYoZGFwZmls
ZSwgImZ0ZXN0KFwiJXMuc3J0Lm1ucy5jb25cIiwgXCIlcyAiLCBzZXRuYW1lLCByZXNwb25zZSk7
CiAgICAgIGNvcHlsaXN0KHN0ZXAsICJjbGFzcyIsIGRhcGZpbGUpOwogICAgICBmcHV0cygiXCIs
IFwiIiwgZGFwZmlsZSk7CiAgICAgIGlmICghc3RlcFtzXSB8fCBsaW5lY21wKHN0ZXAgKyBzLCAi
aCIpIHx8IGxpbmVjbXAoc3RlcCArIHMgKyAyLCAiPSIpKQoJewoJICBmcHJpbnRmKHN0ZGVyciwK
CQkgICJzYnN0cmFuczogYmVmb3JlICVkOiBtaXNzaW5nIGg9IGluIHRlc3Qgc3RhdGVtZW50IGlu
IHByb2MgZ2xtXG4iLAoJCSAgc2JzbGluZW5vKTsKCSAgZXhpdCgxKTsKCX0KICAgICAgZm9yIChz
ICs9IDQ7IHN0ZXBbc10gJiYKCSAgICAgKGxpbmVjbXAoc3RlcCArIHMsICJlIikgfHwgKHN0ZXBb
cyArIDJdICYmIGxpbmVjbXAoc3RlcCArIHMgKyAyLCAiPSIpKSk7IHMrKykKCXMgKz0gcHV0bGlu
ZXMoc3RlcCArIHMsIGRhcGZpbGUsICdcbicpOyAvKiBwdXRsaW5lcyBwdXRzIGEgc3BhY2UgKi8K
ICAgICAgaWYgKCFzdGVwW3NdIHx8IGxpbmVjbXAoc3RlcCArIHMsICJlIikgfHwgbGluZWNtcChz
dGVwICsgcyArIDIsICI9IikpCgl7CgkgIGZwcmludGYoc3RkZXJyLAoJCSAgInNic3RyYW5zOiBi
ZWZvcmUgJWQ6IG1pc3NpbmcgZT0gaW4gdGVzdCBzdGF0ZW1lbnQgaW4gcHJvYyBnbG1cbiIsCgkJ
ICBzYnNsaW5lbm8pOwoJICBleGl0KDEpOwoJfQogICAgICBmcHV0cygiXCIsIFwiIiwgZGFwZmls
ZSk7CiAgICAgIHMgKz0gNDsKICAgICAgcyArPSBwdXRsaW5lcyhzdGVwICsgcywgZGFwZmlsZSwg
JzsnKTsKICAgICAgaWYgKHN0ZXBbc10gIT0gJzsnKQoJewoJICBmcHJpbnRmKHN0ZGVyciwKCQkg
ICJzYnN0cmFuczogYmVmb3JlICVkOiBleHRyYSBjaGFyYWN0ZXJzIGFmdGVyIGU9PGVmZmVjdD4g
aW4gdGVzdCBzdGF0ZW1lbnQgaW4gcHJvYyBnbG1cbiIsCgkJICBzYnNsaW5lbm8pOwoJICBleGl0
KDEpOwoJfQogICAgICBmcHV0cygiXCIsIFwiIiwgZGFwZmlsZSk7CiAgICAgIGNvcHlsaXN0KHN0
ZXAsICJieSIsIGRhcGZpbGUpOwogICAgICBmcHV0cygiXCIpO1xuIiwgZGFwZmlsZSk7CiAgICB9
CgogIC8qIE5vdyBkbyBjb250cmFzdHM6IGVhY2ggY29udHJhc3Qgc3RhdGVtZW50IHJ1bnMgYSBz
ZXBhcmF0ZSBmdGVzdCAqLwogIC8qIEZpcnN0IHNldCB1cCBhcnJheSBmb3IgY29lZmZpY2llbnQg
dmFsdWVzOiB0aGlzIGlzIGFuIG92ZXJlc3RpbWF0ZTsgc28/ICovCiAgLyogQW5kIGl0J3MgdW5u
Y2Vzc2FyeSBpZiB0aGVyZSdzIG5vIGNvbnRyYXN0IHN0YXRlbWVudCAqLwogIGNvZWZmID0gKGlu
dCAqKSBtYWxsb2Moc2l6ZW9mKGludCkgKiBzdHJsZW4oc3RlcCkgLyAyKTsKICAvKiBGaXJzdCBz
ZXQgdXAgYXJyYXkgZm9yIGNvZWZmaWNpZW50IHZhbHVlczogdGhpcyBpcyBhbiBvdmVyZXN0aW1h
dGU7IHNvPyAqLwogIGZvciAocyA9IDA7IChzaW5jciA9IGZpbmRzdGF0ZW1lbnQoc3RlcCArIHMs
ICJjb250cmFzdCIpKTsgKQogICAgewogICAgICBzICs9IHNpbmNyOwogICAgICBpZiAoc3RlcFtz
XSAhPSAnIicpCgl7CgkgIGZwcmludGYoc3RkZXJyLAoJCSAgInNic3RyYW5zOiBiZWZvcmUgJWQ6
IG1pc3NpbmcgXCJMQUJFTFwiIGluIGNvbnRyYXN0IHN0YXRlbWVudCBpbiBwcm9jIGdsbVxuIiwK
CQkgIHNic2xpbmVubyk7CgkgIGV4aXQoMSk7Cgl9CiAgICAgIGZwdXRzKCJ0aXRsZShcIiIsIGRh
cGZpbGUpOwogICAgICBmb3IgKHMrKzsgc3RlcFtzXSAmJiBzdGVwW3NdICE9ICciJzsgcysrKQoJ
LyogY2FuJ3QgdXNlIHB1dGxpbmVzIGJlY2F1c2Ugd2Ugd2FudCB0aGUgbmV3bGluZXMgKi8KCXB1
dGMoc3RlcFtzXSwgZGFwZmlsZSk7CiAgICAgIGlmIChzdGVwW3NdICE9ICciJykKCXsKCSAgZnBy
aW50ZihzdGRlcnIsCgkJICAic2JzdHJhbnM6IGJlZm9yZSAlZDogbm8gdGVybWluYXRpbmcgXCIg
aW4gY29udHJhc3Qgc3RhdGVtZW50IGxhYmVsIGluIHByb2MgZ2xtXG4iLAoJCSAgc2JzbGluZW5v
KTsKCSAgZXhpdCgxKTsKCX0KICAgICAgZnB1dHMoIlwiKTtcbiIsIGRhcGZpbGUpOwogICAgICBz
ICs9IDI7IC8qIG9uIHRvIGVmZmVjdCBhbmQgdmFsdWVzICovCiAgICAgIC8qIFdlIG5lZWQgdG8g
cmV2aXNlIHRoZSAuY29uIGZpbGUgImJ5IGhhbmQiIGZvciBmdGVzdCAqLwogICAgICAvKiBXZSBu
ZWVkIHRvIHNldCB1cCBfdGVybV8gZm9yIHRoZSBjbGFzcyB2YXJpYWJsZSBzcGVjaWZpZWQgaW4g
dGhlIGNvbnRyYXN0LiAqLwogICAgICAvKiBGaW5kIGNsYXNzIHZhcmlhYmxlIHJlZmVyZW5jZWQg
Ki8KICAgICAgZm9yIChjb250cmFzdHRlcm0gPSAweDEsIGUgPSBjbGFzc3N0YXJ0LCBjbGFzc3Zh
ciA9IDA7IHN0ZXBbZV0gJiYgc3RlcFtlXSAhPSAnOyc7CgkgICBjb250cmFzdHRlcm0gPSAoY29u
dHJhc3R0ZXJtIDw8IDEpLCBjbGFzc3ZhcisrKQoJewoJICBpZiAoIWxpbmVjbXAoc3RlcCArIHMs
IHN0ZXAgKyBlKSkKCSAgICBicmVhazsKCSAgZWxzZQoJICAgIGUgKz0gbGluZWNweSgoY2hhciAq
KSBOVUxMLCBzdGVwICsgZSkgKyAxOwoJfQogICAgICBjbGFzc3ZhcisrOyAvKiBub3cgaXMgMSwg
MiwgLi4uLCAzICovCiAgICAgIHMgKz0gbGluZWNweShjbGFzc25hbWUsIHN0ZXAgKyBzKSArIDE7
CiAgICAgIC8qIHNob3VsZCBoYXZlIGNvZWZmaWNpZW50cyBub3cgKi8KICAgICAgZm9yIChuY29l
ZmYgPSAwLCBjb2VmZnN1bSA9IDA7IG51bShzdGVwW3NdKSB8fCBzdGVwW3NdID09ICcrJyB8fCBz
dGVwW3NdID09ICctJzsKCSAgIG5jb2VmZisrKQoJewoJICBpZiAoc3RlcFtzXSA9PSAnKycgfHwg
c3RlcFtzXSA9PSAnLScpCgkgICAgewoJICAgICAgbWludXMgPSAoc3RlcFtzXSA9PSAnLScpOwoJ
ICAgICAgcyArPSAyOwoJICAgIH0KCSAgZWxzZQoJICAgIG1pbnVzID0gMDsKCSAgaWYgKHNzY2Fu
ZihzdGVwICsgcywgIiVkIiwgY29lZmYgKyBuY29lZmYpICE9IDEpCgkgICAgewoJICAgICAgZnBy
aW50ZihzdGRlcnIsCgkJICAgICAgInNic3RyYW5zOiBiZWZvcmUgJWQ6IGludmFsaWQgY29lZmZp
Y2llbnQgaW4gY29udHJhc3Qgc3RhdGVtZW50IGluIHByb2MgZ2xtXG4iLAoJCSAgICAgIHNic2xp
bmVubyk7CgkgICAgICBleGl0KDEpOwoJICAgIH0KCSAgaWYgKG1pbnVzKQoJICAgIGNvZWZmW25j
b2VmZl0gPSAtY29lZmZbbmNvZWZmXTsKCSAgY29lZmZzdW0gKz0gY29lZmZbbmNvZWZmXTsKCSAg
cyArPSBsaW5lY3B5KChjaGFyICopIE5VTEwsIHN0ZXAgKyBzKSArIDE7Cgl9CiAgICAgIGlmIChj
b2VmZnN1bSkKCXsKCSAgZnByaW50ZihzdGRlcnIsCgkJICAic2JzdHJhbnM6IGJlZm9yZSAlZDog
Y29lZmZpY2llbnRzIHN1bSB0byBub256ZXJvIGluIGNvbnRyYXN0IHN0YXRlbWVudCBpbiBwcm9j
IGdsbVxuIiwKCQkgIHNic2xpbmVubyk7CgkgIGV4aXQoMSk7Cgl9CiAgICAgIGlmIChzdGVwW3Nd
ID09ICcvJykgLyogb24gdG8gZT0sIGlmIGFueSAqLwoJcyArPSAyOwogICAgICAvKiBXZSdsbCBz
dGFydCB3aXRoIHRoZSBmaWxlIHRoYXQgZWZmZWN0cyBjcmVhdGVkICovCiAgICAgIGZwcmludGYo
ZGFwZmlsZSwgImluc2V0KFwiJXMuc3J0Lm1ucy5jb25cIilcbntcbiIsIHNldG5hbWUpOwogICAg
ICBmcHJpbnRmKGRhcGZpbGUsICJjaGFyIF90eXBlX1s5XTtcbmRvdWJsZSAlcztcbmludCBfbl8s
IF90ZXJtXztcbiIsIHJlc3BvbnNlKTsKICAgICAgZnByaW50ZihkYXBmaWxlLCAiaW50IF9wYXJ0
dl9bJWRdO1xuIiwgbmJ5dmFycyArIGNsYXNzdmFyKTsKICAgICAgZnByaW50ZihkYXBmaWxlLCAi
aW50IF9jXywgX21vcmVfLCBfY29udHIxXztcbmRvdWJsZSBfY29lZmZfWyVkXTtcbiIsIG5jb2Vm
Zik7CiAgICAgIGZwcmludGYoZGFwZmlsZSwgIm91dHNldChcIiVzLnNydC5tbnMuY29uLmNvblwi
LCBcIlwiKTtcbiIsIHNldG5hbWUpOwogICAgICBmcHV0cygiZGFwX2xpc3QoXCIiLCBkYXBmaWxl
KTsKICAgICAgY29weWxpc3Qoc3RlcCwgImJ5IiwgZGFwZmlsZSk7CiAgICAgIGZvciAoZSA9IGNs
YXNzc3RhcnQsIGMgPSAwOyBjIDwgY2xhc3N2YXI7IGMrKykKCWUgKz0gcHV0bGluZXMoc3RlcCAr
IGUsIGRhcGZpbGUsICdcbicpICsgMTsKICAgICAgZnByaW50ZihkYXBmaWxlLCAiXCIsIF9wYXJ0
dl8sICVkKTtcbiIsIG5ieXZhcnMgKyBjbGFzc3Zhcik7CiAgICAgIC8qIG5vdyB3ZSBuZWVkIHRv
IHNldCB0aGUgY29lZmZpY2llbnQgYXJyYXkgdmFsdWVzICovCiAgICAgIGZvciAoYyA9IDA7IGMg
PCBuY29lZmY7IGMrKykKCWZwcmludGYoZGFwZmlsZSwgIl9jb2VmZl9bJWRdID0gJWQuMDtcbiIs
IGMsIGNvZWZmW2NdKTsKICAgICAgLyogZmlyc3Qgd3JpdGUgb3V0IE4sIE1FQU4sIFZBUiAqLwog
ICAgICBmcHV0cygiZm9yIChfY18gPSAwLCBfY29udHIxXyA9IDEsIF9tb3JlXyA9IHN0ZXAoKTsg
X21vcmVfOyApXG57XG4iLCBkYXBmaWxlKTsKICAgICAgZnByaW50ZihkYXBmaWxlLCAiaWYgKGRh
cF9uZXdwYXJ0KF9wYXJ0dl8sICVkKSlcbl9jXyA9IDA7XG4iLCBuYnl2YXJzICsgY2xhc3N2YXIg
LSAxKTsKICAgICAgZnByaW50ZihkYXBmaWxlLCAiZWxzZSBpZiAoZGFwX25ld3BhcnQoX3BhcnR2
XywgJWQpKVxuX2NfKys7XG4iLCBuYnl2YXJzICsgY2xhc3N2YXIpOwogICAgICBmcHV0cygib3V0
cHV0KCk7XG5zdGVwKCk7XG5vdXRwdXQoKTtcbnN0ZXAoKTtcbm91dHB1dCgpO1xuIiwgZGFwZmls
ZSk7CiAgICAgIC8qIG5lZWQgdG8gaW5jbHVkZSBFUlJPUiBsaW5lcywgYnV0IHNraXAgQ09OVFIg
bGluZXMgZm9yIHNwZWNpZmllZCBlZmZlY3QgKi8KICAgICAgZnB1dHMoIndoaWxlICgoX21vcmVf
ID0gc3RlcCgpKSlcbntcbiIsIGRhcGZpbGUpOwogICAgICBmcHV0cygiaWYgKCFzdHJjbXAoX3R5
cGVfLCBcIkVSUk9SXCIpKVxub3V0cHV0KCk7XG4iLCBkYXBmaWxlKTsKICAgICAgZnB1dHMoImVs
c2UgaWYgKCFzdHJjbXAoX3R5cGVfLCBcIkNPTlRSXCIpKVxue1xuIiwgZGFwZmlsZSk7CiAgICAg
IGZwcmludGYoZGFwZmlsZSwgImlmIChfdGVybV8gPT0gJWQpXG57XG4iLCBjb250cmFzdHRlcm0p
OyAvKiBpZiAxc3QsIGNoYW5nZSB0byBjb250cmFzdCAqLwogICAgICBmcHJpbnRmKGRhcGZpbGUs
ICJpZiAoX2NvbnRyMV8pXG57XG5fY29udHIxXyA9IDA7XG5fdGVybV8gPSAlZDtcbiIsIGNvbnRy
YXN0dGVybSk7CiAgICAgIGZwcmludGYoZGFwZmlsZSwgImlmIChfY18gPCAlZClcbiIsIG5jb2Vm
Zik7CiAgICAgIGZwcmludGYoZGFwZmlsZSwgIiVzID0gX2NvZWZmX1tfY19dO1xuZWxzZVxuJXMg
PSAwLjA7XG4iLCByZXNwb25zZSwgcmVzcG9uc2UpOwogICAgICBmcHV0cygib3V0cHV0KCk7XG59
XG59XG4iLCBkYXBmaWxlKTsKICAgICAgZnB1dHMoImVsc2Vcbm91dHB1dCgpO1xufVxuIiwgZGFw
ZmlsZSk7CiAgICAgIGZwdXRzKCJlbHNlIGlmICghc3RyY21wKF90eXBlXywgXCJMU01FQU5cIikp
XG5vdXRwdXQoKTtcbiIsIGRhcGZpbGUpOwogICAgICBmcHV0cygiZWxzZVxuXHtcbl9jb250cjFf
ID0gMTtcbmJyZWFrO1xufVxufVxufVxufVxuIiwgZGFwZmlsZSk7IC8qIGF0IGFub3RoZXIgY2Vs
bCAqLwogICAgICBmcHJpbnRmKGRhcGZpbGUsICJmdGVzdChcIiVzLnNydC5tbnMuY29uLmNvblwi
LCBcIiVzICIsIHNldG5hbWUsIHJlc3BvbnNlKTsKICAgICAgY29weWxpc3Qoc3RlcCwgImNsYXNz
IiwgZGFwZmlsZSk7CiAgICAgIGZwcmludGYoZGFwZmlsZSwgIlwiLCBcIiVzXCIsIFwiIiwgY2xh
c3NuYW1lKTsKICAgICAgaWYgKChzaW5jciA9IGdldG9wdGlvbihzdGVwICsgcywgImUiLCAoY2hh
ciAqKSBOVUxMLCAxKSkpCgl7CgkgIHMgKz0gc2luY3I7CgkgIHMgKz0gcHV0bGluZXMoc3RlcCAr
IHMsIGRhcGZpbGUsICc7Jyk7Cgl9CiAgICAgIGlmICghbGluZWNtcChzdGVwICsgcywgIjsiKSkK
CXMgKz0gMjsKICAgICAgZWxzZQoJewoJICBmcHJpbnRmKHN0ZGVyciwKCQkgICJzYnN0cmFuczog
YmVmb3JlICVkOiBtaXNzaW5nIDsgYXQgZW5kIG9mIGNvbnRyYXN0IHN0YXRlbWVudCBpbiBwcm9j
IGdsbVxuIiwKCQkgIHNic2xpbmVubyk7CgkgIGV4aXQoMSk7Cgl9CiAgICAgIGZwdXRzKCJcIiwg
XCIiLCBkYXBmaWxlKTsKICAgICAgY29weWxpc3Qoc3RlcCwgImJ5IiwgZGFwZmlsZSk7CiAgICAg
IGZwdXRzKCJcIik7XG50aXRsZShOVUxMKTtcbiIsIGRhcGZpbGUpOwogICAgfQogIGZyZWUoY29l
ZmYpOwoKICAvKiBub3cgZG8gbHNtZWFucyBzdGF0ZW1lbnQocykgdGhhdCB3ZSBoYXZlbid0IGRv
bmUgeWV0LCBpZiBhbnkgKi8KCiAgd2hpbGUgKChzID0gZmluZHN0YXRlbWVudChzdGVwICsgbHNt
ZWFucywgImxzbWVhbnMiKSkpIC8qIGZpbmQgbmV4dCBsc21lYW5zIHN0YXRlbWVudCAqLwogICAg
ewogICAgICBsc21lYW5zICs9IHM7CiAgICAgIC8qIGZpcnN0IGdldCBwb3NpdGlvbiBvZiBkZW5v
bWluYXRvciwgaWYgYW55ICovCiAgICAgIGUgPSBsc21lYW5zICsgZ2V0b3B0aW9uKHN0ZXAgKyBs
c21lYW5zLCAiZSIsIChjaGFyICopIE5VTEwsIDEpOwogICAgICBpZiAoIWdldG9wdGlvbihzdGVw
ICsgbHNtZWFucywgImFscGhhIiwgbGV2ZWwsIDEpKQoJc3RyY3B5KGxldmVsLCAiMC4wNSIpOwog
ICAgICAvKiBnZXQgdGVzdCB0eXBlICovCiAgICAgIHRlc3RbMF0gPSAnXDAnOyAvKiBpbiBjYXNl
IHdlIG5ldmVyIGZpbmQgb25lICovCiAgICAgIGZvciAocyA9IGxzbWVhbnM7IHN0ZXBbc10gJiYg
c3RlcFtzXSAhPSAnLycgJiYgc3RlcFtzXSAhPSAnOyc7IHMrKykKCTsKICAgICAgaWYgKHN0ZXBb
c10gPT0gJy8nKQoJewoJICBmb3IgKHMgKz0gMjsgc3RlcFtzXSAmJiBzdGVwW3NdICE9ICc7Jzsg
KQoJICAgIHsKCSAgICAgIHMgKz0gbGluZWNweSh0ZXN0LCBzdGVwICsgcykgKyAxOwoJICAgICAg
dXBwZXIodGVzdCk7CgkgICAgICBpZiAoc3RyY21wKHRlc3QsICJEVU5ORVRUIikgJiYgc3RyY21w
KHRlc3QsICJUVUtFWSIpICYmIHN0cmNtcCh0ZXN0LCAiTFNEIikpCgkJdGVzdFswXSA9ICdcMCc7
IC8qIHdhc24ndCwgYWZ0ZXIgYWxsICovCgkgICAgfQoJfQogICAgICBpZiAoIXRlc3RbMF0pCgl7
CgkgIGZwcmludGYoc3RkZXJyLAoJCSAgInNic3RyYW5zOiBiZWZvcmUgJWQ6IG5vIHRlc3Qgc3Bl
Y2lmaWVkIGluIGxzbWVhbnMgc3RhdGVtZW50IGluIHByb2MgZ2xtXG4iLAoJCSAgc2JzbGluZW5v
KTsKCSAgZXhpdCgxKTsKCX0KICAgICAgdXBwZXIodGVzdCk7CiAgICAgIGZvciAocyA9IGxzbWVh
bnM7IHN0ZXBbc10gJiYgc3RlcFtzXSAhPSAnLycgJiYgc3RlcFtzXSAhPSAnOyc7IHMrKykKCXsg
Lyogb25lIHRlcm0gYXQgYSB0aW1lICovCgkgIGZwcmludGYoZGFwZmlsZSwgImZ0ZXN0KFwiJXMu
c3J0Lm1ucy5jb25cIiwgXCIlcyAiLCBzZXRuYW1lLCByZXNwb25zZSk7CgkgIGNvcHlsaXN0KHN0
ZXAsICJjbGFzcyIsIGRhcGZpbGUpOwoJICBmcHV0cygiXCIsIFwiIiwgZGFwZmlsZSk7CgkgIC8q
IGhlcmUgY29tZXMgdGhlIG51bWVyYXRvciAqLwoJICB0ZXJtID0gczsgLyogbWFyayB0aGlzIHBs
YWNlIGZvciBjYWxsIHRvIGxzbWVhbnMgKi8KCSAgcyArPSBwdXRsaW5lcyhzdGVwICsgcywgZGFw
ZmlsZSwgJ1xuJyk7CgkgIGZwdXRzKCJcIiwgXCIiLCBkYXBmaWxlKTsKCSAgaWYgKGUgPiBsc21l
YW5zKSAvKiBwdXQgZGVub21pbmF0b3IgKi8KCSAgICB7CgkgICAgICBmb3IgKHMgPSBlOyBzdGVw
W3NdICYmIHN0ZXBbc10gIT0gJzsnICYmIGxpbmVjbXAoc3RlcCArIHMsICJhbHBoYSIpICYmCgkJ
ICAgICBsaW5lY21wKHN0ZXAgKyBzLCAiZHVubmV0dCIpICYmIGxpbmVjbXAoc3RlcCArIHMsICJ0
dWtleSIpICYmCgkJICAgICBsaW5lY21wKHN0ZXAgKyBzLCAibHNkIik7IHMgKz0gcHV0bGluZXMo
c3RlcCArIHMsIGRhcGZpbGUsICdcbicpICsgMSkKCQk7CgkgICAgfQoJICBmcHV0cygiXCIsIFwi
IiwgZGFwZmlsZSk7CgkgIGNvcHlsaXN0KHN0ZXAsICJieSIsIGRhcGZpbGUpOwoJICBmcHV0cygi
XCIpO1xuIiwgZGFwZmlsZSk7CgoJICAvKiBub3cgdGhlIGxzbWVhbnMgc3RhdGVtZW50ICovCgoJ
ICBmcHJpbnRmKGRhcGZpbGUsICJsc21lYW5zKFwiJXMuc3J0Lm1ucy50c3RcIiwgXCIlc1wiLCAl
cywgXCIlcyAiLAoJCSAgc2V0bmFtZSwgdGVzdCwgbGV2ZWwsIHJlc3BvbnNlKTsKCSAgY29weWxp
c3Qoc3RlcCwgImNsYXNzIiwgZGFwZmlsZSk7CgkgIGZwdXRzKCJcIiwgXCIiLCBkYXBmaWxlKTsK
CSAgcyA9IHRlcm0gKyBwdXRsaW5lcyhzdGVwICsgdGVybSwgZGFwZmlsZSwgJ1xuJyk7CgkgIGZw
dXRzKCJcIiwgXCIiLCBkYXBmaWxlKTsKCSAgY29weWxpc3Qoc3RlcCwgImJ5IiwgZGFwZmlsZSk7
CgkgIGZwdXRzKCJcIiwgXCJzMTJcIik7XG4iLCBkYXBmaWxlKTsKCX0KICAgIH0KfQoKLyogVHJh
bnNsYXRlIGNhbGwgdG8gTE9HSVNUSUMuIHN0ZXAgc3RhcnRzIGFmdGVyICJwcm9jIGxvZ2lzdGlj
IiAqLwp2b2lkIGxvZ2lzdGljdHJhbnMoY2hhciAqc3RlcCwgRklMRSAqZGFwZmlsZSkKewogIGlu
dCBzOyAvKiBpbmRleCB0byBzdGVwICovCiAgY2hhciBzZXRuYW1lW1RPS0VOTEVOICsgMV07CiAg
Y2hhciBvdXRuYW1lW1RPS0VOTEVOICsgMV07CgogIGlmICghZ2V0b3B0aW9uKHN0ZXAsICJkYXRh
Iiwgc2V0bmFtZSwgMSkpCiAgICBzdHJjcHkoc2V0bmFtZSwgc2JzdG1wKTsKCiAgZnByaW50Zihk
YXBmaWxlLCAibG9ncmVnKFwiJXNcIiwgXCIiLCBzZXRuYW1lKTsKICBpZiAoKHMgPSBmaW5kc3Rh
dGVtZW50KHN0ZXAsICJtb2RlbCIpKSkKICAgIHsKICAgICAgLyogcmVzcG9uc2UgdmFyaWFibGUg
Ki8KICAgICAgcyArPSBwdXRsaW5lcyhzdGVwICsgcywgZGFwZmlsZSwgJ1xuJykgKyAxOyAvKiBv
bmx5IG9uZSByZXNwb25zZSB2YXJpYWJsZSBhbGxvd2VkICovCiAgICAgIHB1dGMoJy8nLCBkYXBm
aWxlKTsgLyogYm90aCBmb3JtcyB1c2UgLyBpbiBEYXAgKi8KICAgICAgaWYgKHN0ZXBbc10gPT0g
Jy8nKSAvKiB3ZSBoYXZlIHRoZSBldmVudHMgLyB0cmlhbHMgZm9ybSAqLwoJewoJICBzICs9IDI7
CgkgIHMgKz0gcHV0bGluZXMoc3RlcCArIHMsIGRhcGZpbGUsICdcbicpICsgMTsKCX0KICAgICAg
ZWxzZQoJcHV0YygnMScsIGRhcGZpbGUpOyAvKiBiaW5hcnkgcmVzcG9uc2UgKi8KICAgICAgaWYg
KHN0ZXBbc10gPT0gJz0nKQoJewoJICBmcHV0cygiXCIsIFwiXCIsIFwiIiwgZGFwZmlsZSk7IC8q
IHgwLXZhci1saXN0IGlzIGVtcHR5ICovCgkgIHMgKz0gMjsKCSAgcyArPSBwdXRsaW5lcyhzdGVw
ICsgcywgZGFwZmlsZSwgJzsnKTsKCSAgZnB1dHMoIlwiLCBcIiIsIGRhcGZpbGUpOyAvKiBjbG9z
ZXMgdGhlIHgxIHZhcmlhYmxlIGxpc3QgKi8KCSAgY29weWxpc3Qoc3RlcCwgImJ5IiwgZGFwZmls
ZSk7CgkgIGZwdXRzKCJcIiwgTlVMTCwgMC45NSk7XG4iLCBkYXBmaWxlKTsKCX0KICAgICAgZWxz
ZQoJewoJICBmcHJpbnRmKHN0ZGVyciwKCQkgICJzYnN0cmFuczogYmVmb3JlICVkOiBtaXNzaW5n
ID0gaW4gbW9kZWwgc3RhdGVtZW50IGluIHByb2MgbG9naXN0aWMuXG4iLAoJCSAgc2JzbGluZW5v
KTsKCSAgZXhpdCgxKTsKCX0KICAgIH0KICBlbHNlCiAgICB7CiAgICAgIGZwcmludGYoc3RkZXJy
LCAic2JzdHJhbnM6IGJlZm9yZSAlZDogbWlzc2luZyBtb2RlbCBzdGF0ZW1lbnQgaW4gcHJvYyBs
b2dpc3RpYy5cbiIsCgkgICAgICBzYnNsaW5lbm8pOwogICAgICBleGl0KDEpOwogICAgfQogIGlm
IChnZXRvcHRpb24oc3RlcCwgIm91dGVzdCIsIG91dG5hbWUsIDEpKQogICAgewogICAgICBmcHJp
bnRmKGRhcGZpbGUsICJkYXRhc2V0KFwiJXMuY292XCIsIFwiJXNcIiwgXCJSRU5BTUVcIik7XG4i
LCBzZXRuYW1lLCBvdXRuYW1lKTsKICAgICAgc3RyY3B5KHNic3RtcCwgb3V0bmFtZSk7CiAgICB9
Cn0KCi8qIFRyYW5zbGF0ZSBjYWxsIHRvIE5QQVIxV0FZLiBzdGVwIHN0YXJ0cyBhZnRlciAicHJv
YyBucGFyMXdheSIgKi8Kdm9pZCBucGFyMXdheXRyYW5zKGNoYXIgKnN0ZXAsIEZJTEUgKmRhcGZp
bGUpCnsKICBpbnQgczsgLyogaW5kZXggdG8gc3RlcCAqLwogIGNoYXIgc2V0bmFtZVtUT0tFTkxF
TiArIDFdOwogIGNoYXIgY2xhc3NuYW1lW1RPS0VOTEVOICsgMV07IC8qIG5hbWUgb2YgY2xhc3Mg
dmFyaWFibGUgKi8KCiAgaWYgKCFnZXRvcHRpb24oc3RlcCwgImRhdGEiLCBzZXRuYW1lLCAxKSkK
ICAgIHN0cmNweShzZXRuYW1lLCBzYnN0bXApOwoKICBpZiAoKHMgPSBmaW5kc3RhdGVtZW50KHN0
ZXAsICJjbGFzcyIpKSkKICAgIGxpbmVjcHkoY2xhc3NuYW1lLCBzdGVwICsgcyk7CiAgZWxzZQog
ICAgewogICAgICBmcHJpbnRmKHN0ZGVyciwgInNic3RyYW5zOiBiZWZvcmUgJWQ6IG1pc3Npbmcg
Y2xhc3Mgc3RhdGVtZW50IGluIHByb2MgbnBhcjF3YXkuXG4iLAoJICAgICAgc2JzbGluZW5vKTsK
ICAgICAgZXhpdCgxKTsKICAgIH0KCiAgaWYgKChzID0gZmluZHN0YXRlbWVudChzdGVwLCAidmFy
IikpKQogICAgewogICAgICB3aGlsZSAoc3RlcFtzXSAmJiBzdGVwW3NdICE9ICc7JykgLyogaWYg
dGhlcmUgYXJlIG11bHRpcGxlIHZhcmlhYmxlcywgdGhlbi4uLiAqLwoJeyAvKiBuZWVkIHRvIHJ1
biBub25wYXJhbSBmb3IgZWFjaCAqLwoJICBmcHJpbnRmKGRhcGZpbGUsICJub25wYXJhbShcIiVz
XCIsIFwiIiwgc2V0bmFtZSk7CgkgIHdoaWxlIChzdGVwW3NdICYmIHN0ZXBbc10gIT0gJ1xuJykK
CSAgICB7CgkgICAgICBwdXRjKHN0ZXBbc10sIGRhcGZpbGUpOwoJICAgICAgcysrOwoJICAgIH0K
CSAgZnByaW50ZihkYXBmaWxlLCAiICVzXCIsIFwiIiwgY2xhc3NuYW1lKTsKCSAgY29weWxpc3Qo
c3RlcCwgImJ5IiwgZGFwZmlsZSk7CgkgIGZwdXRzKCJcIik7XG4iLCBkYXBmaWxlKTsKCSAgcysr
OwoJfQogICAgICBpZiAoc3RlcFtzXSAhPSAnOycpCgl7CgkgIGZwcmludGYoc3RkZXJyLCAic2Jz
dHJhbnM6IGJlZm9yZSAlZDogbWlzc2luZyA7IGF0IGVuZCBvZiBwcm9jIG5wYXIxd2F5LlxuIiwK
CQkgIHNic2xpbmVubyk7CgkgIGV4aXQoMSk7Cgl9CiAgICB9CiAgZWxzZQogICAgewogICAgICBm
cHJpbnRmKHN0ZGVyciwgInNic3RyYW5zOiBiZWZvcmUgJWQ6IG1pc3NpbmcgdmFyIHN0YXRlbWVu
dCBpbiBwcm9jIG5wYXIxd2F5LlxuIiwKCSAgICAgIHNic2xpbmVubyk7CiAgICAgIGV4aXQoMSk7
CiAgICB9Cn0KCi8qIFRyYW5zbGF0ZSBjYWxsIHRvIFJFRy4gc3RlcCBzdGFydHMgYWZ0ZXIgInBy
b2MgcmVnIiAqLwp2b2lkIHJlZ3RyYW5zKGNoYXIgKnN0ZXAsIEZJTEUgKmRhcGZpbGUpCnsKICBp
bnQgczsgLyogaW5kZXggdG8gc3RlcCAqLwogIGNoYXIgc2V0bmFtZVtUT0tFTkxFTiArIDFdOwog
IGNoYXIgb3V0bmFtZVtUT0tFTkxFTiArIDFdOwogIGludCBpc2FkZDsgLyogaXMgdGhlcmUgYW4g
YWRkIHN0YXRlbWVudD8gKi8KCiAgaWYgKCFnZXRvcHRpb24oc3RlcCwgImRhdGEiLCBzZXRuYW1l
LCAxKSkKICAgIHN0cmNweShzZXRuYW1lLCBzYnN0bXApOwoKICBpZiAoZmluZHN0YXRlbWVudChz
dGVwLCAicGxvdCIpKSAvKiB3ZSdyZSBnb2luZyB0byBjYWxsIHBsb3RsaW5yZWcgKi8KICAgIHsK
ICAgICAgaWYgKGlzYnkoc3RlcCkgPj0gMCkKCWNvdW50cGFydHMoc3RlcCwgc2V0bmFtZSwgZGFw
ZmlsZSk7CiAgICAgIGVsc2UKCWZwdXRzKCJfc2JzcGljdGNudF9bX3Nic25waWN0c19dID0gMTtc
biIsIGRhcGZpbGUpOwogICAgICBmcHJpbnRmKGRhcGZpbGUsICJfc2JzcGljdF9bX3Nic25waWN0
c19dID0gcGxvdGxpbnJlZyhcIiVzXCIsIFwiIiwgc2V0bmFtZSk7CiAgICAgIGlmICgocyA9IGZp
bmRzdGF0ZW1lbnQoc3RlcCwgIm1vZGVsIikpKQoJewoJICAvKiByZXNwb25zZSB2YXJpYWJsZTog
bXVzdCBiZSBvbmx5IDEgKi8KCSAgd2hpbGUgKHN0ZXBbc10gJiYgc3RlcFtzXSAhPSAnXG4nKQoJ
ICAgIHsKCSAgICAgIHB1dGMoc3RlcFtzXSwgZGFwZmlsZSk7CgkgICAgICBzKys7CgkgICAgfQoJ
ICBzKys7CgkgIGlmIChzdGVwW3NdID09ICc9JykKCSAgICB7CgkgICAgICBmcHV0cygiXCIsIFwi
IiwgZGFwZmlsZSk7CgkgICAgICBmb3IgKHMgKz0gMjsgc3RlcFtzXSAmJiBzdGVwW3NdICE9ICdc
bic7IHMrKykKCQlwdXRjKHN0ZXBbc10sIGRhcGZpbGUpOwoJICAgICAgaWYgKHN0ZXBbcyArIDFd
ICE9ICc7JykKCQl7CgkJICBmcHJpbnRmKHN0ZGVyciwKCQkJICAic2JzdHJhbnM6IGJlZm9yZSAl
ZDogb25seSBvbmUgZXhwbGFuYXRvcnkgdmFyaWFibGUgYWxsb3dlZCBpbiBtb2RlbCBzdGF0ZW1l
bnQgaW4gcHJvYyByZWcgd2l0aCBwbG90dGluZ1xuIiwKCQkJICBzYnNsaW5lbm8pOwoJCSAgZXhp
dCgxKTsKCQl9CgkgICAgICBmcHV0cygiXCIsIFwiPT1cIiwgXCIiLCBkYXBmaWxlKTsKCSAgICAg
IGNvcHlsaXN0KHN0ZXAsICJieSIsIGRhcGZpbGUpOwoJICAgICAgZnB1dHMoIlwiLCBfc2JzcGlj
dGNudF9bX3Nic25waWN0c19dLCAwLjk1KTtcbiIsIGRhcGZpbGUpOwoJICAgICAgZnB1dHMoIl9z
YnNwaWN0cGFnZV9bX3Nic25waWN0c18rK10gPSA0O1xuIiwgZGFwZmlsZSk7CgkgICAgICBzYnNo
YXNwaWN0cyA9IDE7CgkgICAgfQoJICBlbHNlCgkgICAgewoJICAgICAgZnByaW50ZihzdGRlcnIs
CgkJICAgICAgInNic3RyYW5zOiBiZWZvcmUgJWQ6IG9ubHkgb25lIHJlc3BvbnNlIHZhcmlhYmxl
IGFsbG93ZWQgaW4gbW9kZWwgc3RhdGVtZW50IGluIHByb2MgcmVnIHdpdGggcGxvdHRpbmdcbiIs
CgkJICAgICAgc2JzbGluZW5vKTsKCSAgICAgIGV4aXQoMSk7CgkgICAgfQoJfQogICAgICBlbHNl
Cgl7CgkgIGZwcmludGYoc3RkZXJyLCAic2JzdHJhbnM6IGJlZm9yZSAlZDogbWlzc2luZyBtb2Rl
bCBzdGF0ZW1lbnQgaW4gcHJvYyByZWcuXG4iLAoJCSAgc2JzbGluZW5vKTsKCSAgZXhpdCgxKTsK
CX0KICAgIH0KICBlbHNlIC8qIGp1c3QgdXNlIGxpbnJlZyAqLwogICAgewogICAgICBmcHJpbnRm
KGRhcGZpbGUsICJsaW5yZWcoXCIlc1wiLCBcIiIsIHNldG5hbWUpOwogICAgICBpZiAoKHMgPSBm
aW5kc3RhdGVtZW50KHN0ZXAsICJtb2RlbCIpKSkKCXsKCSAgLyogcmVzcG9uc2UgdmFyaWFibGVz
ICovCgkgIHMgKz0gcHV0bGluZXMoc3RlcCArIHMsIGRhcGZpbGUsICc9Jyk7CgkgIGlmIChzdGVw
W3NdID09ICc9JykKCSAgICB7CgkgICAgICBmcHV0cygiXCIsIFwiIiwgZGFwZmlsZSk7CgkgICAg
ICBpZiAoIShpc2FkZCA9IGZpbmRzdGF0ZW1lbnQoc3RlcCwgImFkZCIpKSkgLyogcmVkdWNlZCBt
b2RlbCBpcyBpbnRlcmNlcHQgb25seSAqLwoJCWZwdXRzKCJcIiwgXCIiLCBkYXBmaWxlKTsgLyog
Y2xvc2UgeDAtdmFyaWFibGVzIGxpc3QgKi8KCSAgICAgIHMgKz0gMjsKCSAgICAgIHMgKz0gcHV0
bGluZXMoc3RlcCArIHMsIGRhcGZpbGUsICc7Jyk7CgkgICAgICBmcHV0cygiXCIsIFwiIiwgZGFw
ZmlsZSk7IC8qIGVpdGhlciBjbG9zZXMgdGhlIHgwIG9yIHgxIHZhcmlhYmxlIGxpc3QgKi8KCSAg
ICAgIGlmIChpc2FkZCkgLyogcHV0IGluIHRoZSB4MS12YXJpYWJsZXMgKi8KCQl7CgkJICBjb3B5
bGlzdChzdGVwLCAiYWRkIiwgZGFwZmlsZSk7CgkJICBmcHV0cygiXCIsIFwiIiwgZGFwZmlsZSk7
IC8qIGNsb3NlcyB0aGUgeDEgdmFyaWFibGUgbGlzdCAqLwoJCX0KCSAgICAgIGNvcHlsaXN0KHN0
ZXAsICJieSIsIGRhcGZpbGUpOwoJICAgICAgZnB1dHMoIlwiLCBOVUxMLCAwLjk1KTtcbiIsIGRh
cGZpbGUpOwoJICAgIH0KCSAgZWxzZQoJICAgIHsKCSAgICAgIGZwcmludGYoc3RkZXJyLAoJCSAg
ICAgICJzYnN0cmFuczogYmVmb3JlICVkOiBtaXNzaW5nID0gaW4gbW9kZWwgc3RhdGVtZW50IGlu
IHByb2MgcmVnLlxuIiwKCQkgICAgICBzYnNsaW5lbm8pOwoJICAgICAgZXhpdCgxKTsKCSAgICB9
Cgl9CiAgICAgIGVsc2UKCXsKCSAgZnByaW50ZihzdGRlcnIsICJzYnN0cmFuczogYmVmb3JlICVk
OiBtaXNzaW5nIG1vZGVsIHN0YXRlbWVudCBpbiBwcm9jIHJlZy5cbiIsCgkJICBzYnNsaW5lbm8p
OwoJICBleGl0KDEpOwoJfQogICAgfQogIGlmIChnZXRvcHRpb24oc3RlcCwgIm91dGVzdCIsIG91
dG5hbWUsIDEpKQogICAgewogICAgICBmcHJpbnRmKGRhcGZpbGUsICJkYXRhc2V0KFwiJXMuY292
XCIsIFwiJXNcIiwgXCJSRU5BTUVcIik7XG4iLCBzZXRuYW1lLCBvdXRuYW1lKTsKICAgICAgc3Ry
Y3B5KHNic3RtcCwgb3V0bmFtZSk7CiAgICB9Cn0KCi8qIFRyYW5zbGF0ZSBjYWxsIHRvIERBUC4g
c3RlcCBzdGFydHMgYWZ0ZXIgInByb2MgZGFwIiAqLwp2b2lkIGRhcHRyYW5zKGNoYXIgKnN0ZXAs
IEZJTEUgKmRhcGZpbGUpCnsKICBpbnQgczsgLyogaW5kZXggdG8gc3RlcCAqLwogIGludCBicmFj
ZTsgLyogbGV2ZWwgb2YgYnJhY2VzIG5lc3RpbmcgKi8KCiAgcyA9IDA7CiAgaWYgKHN0ZXBbc10g
IT0gJzsnKQogICAgewogICAgICBmcHJpbnRmKHN0ZGVyciwgInNic3RyYW5zOiBiZWZvcmUgJWQ6
IG5vIG9wdGlvbnMgYWxsb3dlZCBmb3IgcHJvYyBkYXBcbiIsIHNic2xpbmVubyk7CiAgICAgIGV4
aXQoMSk7CiAgICB9CiAgcyArPSAyOwogIGlmIChzdGVwW3NdID09ICd7JykKICAgIHsKICAgICAg
ZnB1dHMoIntcbiIsIGRhcGZpbGUpOwogICAgICBmb3IgKHMgKz0gMiwgYnJhY2UgPSAxOyBicmFj
ZSAmJiBzdGVwW3NdOyBzKyspCgl7CgkgIGlmIChzdGVwW3NdID09ICdcbicpCgkgICAgcHV0Yygn
ICcsIGRhcGZpbGUpOwoJICBlbHNlCgkgICAgcHV0YyhzdGVwW3NdLCBkYXBmaWxlKTsKCSAgaWYg
KHN0ZXBbc10gPT0gJzsnIHx8IHN0ZXBbc10gPT0gJ3snIHx8IHN0ZXBbc10gPT0gJ30nKQoJICAg
IHB1dGMoJ1xuJywgZGFwZmlsZSk7CgkgIGlmIChzdGVwW3NdID09ICd7JykKCSAgICBicmFjZSsr
OwoJICBlbHNlIGlmIChzdGVwW3NdID09ICd9JykKCSAgICAtLWJyYWNlOwoJfQogICAgICBpZiAo
YnJhY2UpCgl7CgkgIGZwcmludGYoc3RkZXJyLCAic2JzdHJhbnM6IGJlZm9yZSAlZDogbWlzc2lu
ZyB9IGluIHByb2MgZGFwXG4iLCBzYnNsaW5lbm8pOwoJICBleGl0KDEpOwoJfQogICAgICBwdXRj
KCdcbicsIGRhcGZpbGUpOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgcyArPSBwdXRsaW5lcyhz
dGVwICsgcywgZGFwZmlsZSwgJzsnKTsKICAgICAgaWYgKHN0ZXBbc10gIT0gJzsnKQoJewoJICBm
cHJpbnRmKHN0ZGVyciwgInNic3RyYW5zOiBiZWZvcmUgJWQ6IG1pc3NpbmcgOyBpbiBwcm9jIGRh
cFxuIiwgc2JzbGluZW5vKTsKCSAgZXhpdCgxKTsKCX0KICAgICAgZnB1dHMoIjtcbiIsIGRhcGZp
bGUpOwogICAgfQp9Cg==
--089e015369141cc8d104daffc484--