DynamicFieldJsonAPI
6.0.1
6.0.x
JSON::Path
MIME::Base64
Perl-Services.de
http://www.perl-services.de
Verwende eine JSON-API als Backend für Dynamische Felder
Use a JSON API as a DynamicField backend
GNU AFFERO GENERAL PUBLIC LICENSE Version 3, November 2007
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FkbWluRHluYW1pY0ZpZWxkSnNvbkFQSS5wbSAtIHByb3Zp
ZGVzIGEgZHluYW1pYyBmaWVsZHMgdGV4dCBjb25maWcgdmlldyBmb3IgYWRtaW5zCiMgQ29weXJp
Z2h0IChDKSAyMDE1IC0gMjAxNyBQZXJsLVNlcnZpY2VzLmRlLCBodHRwOi8vcGVybC1zZXJ2aWNl
cy5kZQojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFO
VFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNl
bnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmls
ZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2Fn
ZSBLZXJuZWw6Ok1vZHVsZXM6OkFkbWluRHluYW1pY0ZpZWxkSnNvbkFQSTsKCnVzZSBzdHJpY3Q7
CnVzZSB3YXJuaW5nczsKCm91ciAkT2JqZWN0TWFuYWdlckRpc2FibGVkID0gMTsKCnVzZSBLZXJu
ZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKdXNlIEtlcm5lbDo6TGFuZ3VhZ2Ug
cXcoVHJhbnNsYXRhYmxlKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBA
XzsKCiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoK
ICAgICMgc2V0IHBvc3NpYmxlIHZhbHVlcyBoYW5kbGluZyBzdHJpbmdzCiAgICAkU2VsZi0+e0Vt
cHR5U3RyaW5nfSAgICAgPSAnX0R5bmFtaWNGaWVsZHNfRW1wdHlTdHJpbmdfRG9udF9Vc2VfSXRf
U3RyaW5nX1BsZWFzZSc7CiAgICAkU2VsZi0+e0R1cGxpY2F0ZVN0cmluZ30gPSAnX0R5bmFtaWNG
aWVsZHNfRHVwbGljYXRlZFN0cmluZ19Eb250X1VzZV9JdF9TdHJpbmdfUGxlYXNlJzsKICAgICRT
ZWxmLT57RGVsZXRlZFN0cmluZ30gICA9ICdfRHluYW1pY0ZpZWxkc19EZWxldGVkU3RyaW5nX0Rv
bnRfVXNlX0l0X1N0cmluZ19QbGVhc2UnOwoKICAgICRTZWxmLT57Q29uZmlnUGFyYW1zfSA9IFtx
dygKICAgICAgICBPYmplY3RUeXBlIE9iamVjdFR5cGVOYW1lIEZpZWxkVHlwZSBGaWVsZFR5cGVO
YW1lIFZhbGlkSUQgTGluawogICAgICAgIEpTT05QYXRoS2V5IEpTT05QYXRoVmFsdWUgSFRUUE1l
dGhvZCBQYXNzd29yZFRva2VuIFVzZXIgVVJMIFRUTENhY2hlIFJlcXVlc3Rib2R5CiAgICAgICAg
UG9zc2libGVOb25lIFNlYXJjaEZpZWxkU2l6ZSBHZW5lcmljQWdlbnRSZXR1cm5VbmRlZk9uRW1w
dHkKICAgICldOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxm
LCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0
KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CgogICAgaWYgKCAkU2VsZi0+e1N1YmFj
dGlvbn0gZXEgJ0FkZCcgKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5fQWRkKAogICAgICAgICAg
ICAlUGFyYW0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259
IGVxICdBZGRBY3Rpb24nICkgewoKICAgICAgICAjIGNoYWxsZW5nZSB0b2tlbiBjaGVjayBmb3Ig
d3JpdGUgYWN0aW9uCiAgICAgICAgJExheW91dE9iamVjdC0+Q2hhbGxlbmdlVG9rZW5DaGVjaygp
OwoKICAgICAgICByZXR1cm4gJFNlbGYtPl9BZGRBY3Rpb24oCiAgICAgICAgICAgICVQYXJhbSwK
ICAgICAgICApOwogICAgfQogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0NoYW5nZScg
KSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT5fQ2hhbmdlKAogICAgICAgICAgICAlUGFyYW0sCiAg
ICAgICAgKTsKICAgIH0KICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdDaGFuZ2VB
Y3Rpb24nICkgewoKICAgICAgICAjIGNoYWxsZW5nZSB0b2tlbiBjaGVjayBmb3Igd3JpdGUgYWN0
aW9uCiAgICAgICAgJExheW91dE9iamVjdC0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwoKICAgICAg
ICByZXR1cm4gJFNlbGYtPl9DaGFuZ2VBY3Rpb24oCiAgICAgICAgICAgICVQYXJhbSwKICAgICAg
ICApOwogICAgfQogICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAg
IE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdVbmRlZmluZWQgc3ViYWN0aW9uLicpLAogICAgKTsK
fQoKc3ViIF9BZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkTGF5
b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91
dCcpOwogICAgbXkgJFBhcmFtT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lz
dGVtOjpXZWI6OlJlcXVlc3QnKTsKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+
R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgIG15ICVHZXRQYXJhbTsKICAgIGZvciBteSAkTmVl
ZGVkIChxdyhPYmplY3RUeXBlIEZpZWxkVHlwZSBGaWVsZE9yZGVyKSkgewogICAgICAgICRHZXRQ
YXJhbXskTmVlZGVkfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICROZWVkZWQg
KTsKICAgICAgICBpZiAoICEkR2V0UGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgIHJldHVy
biAkTGF5b3V0T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4g
JExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnTmVlZCAlcycsICRO
ZWVkZWQgKSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgdGhlIG9i
amVjdCB0eXBlIGFuZCBmaWVsZCB0eXBlIGRpc3BsYXkgbmFtZQogICAgbXkgJE9iamVjdFR5cGVO
YW1lCiAgICAgICAgPSAkQ29uZmlnT2JqZWN0LT5HZXQoJ0R5bmFtaWNGaWVsZHM6Ok9iamVjdFR5
cGUnKS0+eyAkR2V0UGFyYW17T2JqZWN0VHlwZX0gfS0+e0Rpc3BsYXlOYW1lfSB8fCAnJzsKICAg
IG15ICRGaWVsZFR5cGVOYW1lID0gJENvbmZpZ09iamVjdC0+R2V0KCdEeW5hbWljRmllbGRzOjpE
cml2ZXInKS0+eyAkR2V0UGFyYW17RmllbGRUeXBlfSB9LT57RGlzcGxheU5hbWV9IHx8ICcnOwoK
ICAgIHJldHVybiAkU2VsZi0+X1Nob3dTY3JlZW4oCiAgICAgICAgJVBhcmFtLAogICAgICAgICVH
ZXRQYXJhbSwKICAgICAgICBNb2RlICAgICAgICAgICA9PiAnQWRkJywKICAgICAgICBPYmplY3RU
eXBlTmFtZSA9PiAkT2JqZWN0VHlwZU5hbWUsCiAgICAgICAgRmllbGRUeXBlTmFtZSAgPT4gJEZp
ZWxkVHlwZU5hbWUsCiAgICApOwp9CgpzdWIgX0FkZEFjdGlvbiB7CiAgICBteSAoICRTZWxmLCAl
UGFyYW0gKSA9IEBfOwoKICAgIG15ICRMYXlvdXRPYmplY3QgICAgICAgPSAkS2VybmVsOjpPTS0+
R2V0KCdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0Jyk7CiAgICBteSAkUGFyYW1PYmplY3Qg
ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcp
OwogICAgbXkgJENvbmZpZ09iamVjdCAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6
Q29uZmlnJyk7CiAgICBteSAkRHluYW1pY0ZpZWxkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgn
S2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpOwoKICAgIG15ICVFcnJvcnM7CiAgICBteSAl
R2V0UGFyYW07CgogICAgZm9yIG15ICROZWVkZWQgKHF3KE5hbWUgTGFiZWwgRmllbGRPcmRlciBV
UkwgSlNPTlBhdGhLZXkgSFRUUE1ldGhvZCkpIHsKICAgICAgICAkR2V0UGFyYW17JE5lZWRlZH0g
PSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkTmVlZGVkICk7CiAgICAgICAgaWYg
KCAhJEdldFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkRXJyb3JzeyAkTmVlZGVkIC4g
J1NlcnZlckVycm9yJyB9ICAgICAgICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICRFcnJv
cnN7ICROZWVkZWQgLiAnU2VydmVyRXJyb3JNZXNzYWdlJyB9ID0gVHJhbnNsYXRhYmxlKCdUaGlz
IGZpZWxkIGlzIHJlcXVpcmVkLicpOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICRHZXRQYXJh
bXtOYW1lfSApIHsKCiAgICAgICAgIyBjaGVjayBpZiBuYW1lIGlzIGFscGhhbnVtZXJpYwogICAg
ICAgIGlmICggJEdldFBhcmFte05hbWV9ICF+IG17XEEgKD86IFthLXpBLVpdIHwgXGQgKSsgXHp9
eG1zICkgewoKICAgICAgICAgICAgIyBhZGQgc2VydmVyIGVycm9yIGVycm9yIGNsYXNzCiAgICAg
ICAgICAgICRFcnJvcnN7TmFtZVNlcnZlckVycm9yfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAg
ICAgICRFcnJvcnN7TmFtZVNlcnZlckVycm9yTWVzc2FnZX0gPQogICAgICAgICAgICAgICAgVHJh
bnNsYXRhYmxlKCdUaGUgZmllbGQgZG9lcyBub3QgY29udGFpbiBvbmx5IEFTQ0lJIGxldHRlcnMg
YW5kIG51bWJlcnMuJyk7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGlmIG5hbWUgaXMgZHVw
bGljYXRlZAogICAgICAgIG15ICVEeW5hbWljRmllbGRzTGlzdCA9ICV7CiAgICAgICAgICAgICRE
eW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNGaWVsZExpc3QoCiAgICAgICAgICAgICAgICBWYWxp
ZCAgICAgID0+IDAsCiAgICAgICAgICAgICAgICBSZXN1bHRUeXBlID0+ICdIQVNIJywKICAgICAg
ICAgICAgICAgICkKICAgICAgICB9OwoKICAgICAgICAlRHluYW1pY0ZpZWxkc0xpc3QgPSByZXZl
cnNlICVEeW5hbWljRmllbGRzTGlzdDsKCiAgICAgICAgaWYgKCAkRHluYW1pY0ZpZWxkc0xpc3R7
ICRHZXRQYXJhbXtOYW1lfSB9ICkgewoKICAgICAgICAgICAgIyBhZGQgc2VydmVyIGVycm9yIGVy
cm9yIGNsYXNzCiAgICAgICAgICAgICRFcnJvcnN7TmFtZVNlcnZlckVycm9yfSAgICAgICAgPSAn
U2VydmVyRXJyb3InOwogICAgICAgICAgICAkRXJyb3Jze05hbWVTZXJ2ZXJFcnJvck1lc3NhZ2V9
ID0gVHJhbnNsYXRhYmxlKCdUaGVyZSBpcyBhbm90aGVyIGZpZWxkIHdpdGggdGhlIHNhbWUgbmFt
ZS4nKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAkR2V0UGFyYW17RmllbGRPcmRlcn0gKSB7
CgogICAgICAgICMgY2hlY2sgaWYgZmllbGQgb3JkZXIgaXMgbnVtZXJpYyBhbmQgcG9zaXRpdmUK
ICAgICAgICBpZiAoICRHZXRQYXJhbXtGaWVsZE9yZGVyfSAhfiBte1xBICg/OiBcZCApKyBcen14
bXMgKSB7CgogICAgICAgICAgICAjIGFkZCBzZXJ2ZXIgZXJyb3IgZXJyb3IgY2xhc3MKICAgICAg
ICAgICAgJEVycm9yc3tGaWVsZE9yZGVyU2VydmVyRXJyb3J9ICAgICAgICA9ICdTZXJ2ZXJFcnJv
cic7CiAgICAgICAgICAgICRFcnJvcnN7RmllbGRPcmRlclNlcnZlckVycm9yTWVzc2FnZX0gPSBU
cmFuc2xhdGFibGUoJ1RoZSBmaWVsZCBtdXN0IGJlIG51bWVyaWMuJyk7CiAgICAgICAgfQogICAg
fQoKICAgIGZvciBteSAkQ29uZmlnUGFyYW0gKCBAeyAkU2VsZi0+e0NvbmZpZ1BhcmFtc30gfHwg
W10gfSApIHsKICAgICAgICAkR2V0UGFyYW17JENvbmZpZ1BhcmFtfSA9ICRQYXJhbU9iamVjdC0+
R2V0UGFyYW0oIFBhcmFtID0+ICRDb25maWdQYXJhbSApOwogICAgfQoKICAgICMgdW5jb3JyZWN0
YWJsZSBlcnJvcnMKICAgIGlmICggISRHZXRQYXJhbXtWYWxpZElEfSApIHsKICAgICAgICByZXR1
cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gVHJh
bnNsYXRhYmxlKCdOZWVkIFZhbGlkSUQnKSwKICAgICAgICApOwogICAgfQoKICAgIG15ICRSZXF1
ZXN0UGFyYW1zID0gJFNlbGYtPl9HZXRSZXF1ZXN0UGFyYW1zKCk7CgogICAgIyBzZXQgZXJyb3Jz
IGZvciBwb3NzaWJsZSB2YWx1ZXMgZW50cmllcwogICAgS0VZOgogICAgZm9yIG15ICRLZXkgKCBz
b3J0IGtleXMgJXskUmVxdWVzdFBhcmFtc30gKSB7CgogICAgICAgICMgY2hlY2sgZm9yIGVtcHR5
IG9yaWdpbmFsIHZhbHVlcwogICAgICAgIGlmICggJEtleSA9fiBte1xBICRTZWxmLT57RW1wdHlT
dHJpbmd9ICg/OiBcZCspfXNteCApIHsKCiAgICAgICAgICAgICMgc2V0IGEgdHJ1ZSBlbnRyeSBp
biBLZXlFbXB0eUVycm9yCiAgICAgICAgICAgICRFcnJvcnN7J1JlcXVlc3RQYXJhbUVycm9ycyd9
LT57J0tleUVtcHR5RXJyb3InfS0+eyRLZXl9ID0gMTsKICAgICAgICB9CgogICAgICAgICMgb3Ro
ZXJ3aXNlIGNoZWNrIGZvciBkdXBsaWNhdGUgb3JpZ2luYWwgdmFsdWVzCiAgICAgICAgZWxzaWYg
KCAkS2V5ID1+IG17XEEgKC4rKSAtICRTZWxmLT57RHVwbGljYXRlU3RyaW5nfSAoPzogXGQrKX1z
bXggKSB7CgogICAgICAgICAgICAjIHNldCBhbiBlbnRyeSBpbiBPcmlnUGFyYW1EdXBsaWNhdGVF
cnJvciB3aXRoIHRoZSBkdXBsaWNhdGUga2V5IGFzIHZhbHVlCiAgICAgICAgICAgICRFcnJvcnN7
J1JlcXVlc3RQYXJhbUVycm9ycyd9LT57J0tleUR1cGxpY2F0ZUVycm9yJ30tPnskS2V5fSA9ICQx
OwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBmb3IgZW1wdHkgbmV3IHZhbHVlcwogICAgICAg
IGlmICggIWRlZmluZWQgJFJlcXVlc3RQYXJhbXMtPnskS2V5fSApIHsKCiAgICAgICAgICAgICMg
c2V0IGEgdHJ1ZSBlbnRyeSBpbiBOZXdQYXJhbUVtcHR5RXJyb3IKICAgICAgICAgICAgJEVycm9y
c3snUmVxdWVzdFBhcmFtRXJyb3JzJ30tPnsnUGFyYW1FbXB0eUVycm9yJ30tPnskS2V5fSA9IDE7
CiAgICAgICAgfQogICAgfQoKICAgICMgcmV0dXJuIHRvIGFkZCBzY3JlZW4gaWYgZXJyb3JzCiAg
ICBpZiAoJUVycm9ycykgewogICAgICAgIHJldHVybiAkU2VsZi0+X1Nob3dTY3JlZW4oCiAgICAg
ICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJUVycm9ycywKICAgICAgICAgICAgJUdldFBhcmFt
LAogICAgICAgICAgICBNb2RlICAgICAgICAgICA9PiAnQWRkJywKICAgICAgICAgICAgUmVxdWVz
dFBhcmFtcyAgPT4gJFJlcXVlc3RQYXJhbXMsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNldCBz
cGVjaWZpYyBjb25maWcKICAgIG15IEBLZXlzID0gQHsgJFNlbGYtPntDb25maWdQYXJhbXN9IHx8
IFtdIH07CiAgICBteSAlRmllbGRDb25maWc7CiAgICBARmllbGRDb25maWd7QEtleXN9ICAgICAg
ICAgPSBAR2V0UGFyYW17QEtleXN9OwogICAgJEZpZWxkQ29uZmlne1JlcXVlc3RQYXJhbXN9ID0g
JFJlcXVlc3RQYXJhbXM7CgogICAgIyBjcmVhdGUgYSBuZXcgZmllbGQKICAgIG15ICRGaWVsZElE
ID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkQWRkKAogICAgICAgIE5hbWUgICAg
ICAgPT4gJEdldFBhcmFte05hbWV9LAogICAgICAgIExhYmVsICAgICAgPT4gJEdldFBhcmFte0xh
YmVsfSwKICAgICAgICBGaWVsZE9yZGVyID0+ICRHZXRQYXJhbXtGaWVsZE9yZGVyfSwKICAgICAg
ICBGaWVsZFR5cGUgID0+ICRHZXRQYXJhbXtGaWVsZFR5cGV9LAogICAgICAgIE9iamVjdFR5cGUg
PT4gJEdldFBhcmFte09iamVjdFR5cGV9LAogICAgICAgIENvbmZpZyAgICAgPT4gXCVGaWVsZENv
bmZpZywKICAgICAgICBWYWxpZElEICAgID0+ICRHZXRQYXJhbXtWYWxpZElEfSwKICAgICAgICBV
c2VySUQgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgaWYgKCAhJEZpZWxkSUQg
KSB7CiAgICAgICAgcmV0dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAg
ICBNZXNzYWdlID0+IFRyYW5zbGF0YWJsZSgnQ291bGQgbm90IGNyZWF0ZSB0aGUgbmV3IGZpZWxk
JyksCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gJExheW91dE9iamVjdC0+UmVkaXJlY3Qo
CiAgICAgICAgT1AgPT4gIkFjdGlvbj1BZG1pbkR5bmFtaWNGaWVsZCIsCiAgICApOwp9CgpzdWIg
X0NoYW5nZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRQYXJhbU9i
amVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0Jyk7
CiAgICBteSAkTGF5b3V0T2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpPdXRwdXQ6
OkhUTUw6OkxheW91dCcpOwoKICAgIG15ICVHZXRQYXJhbTsKICAgIGZvciBteSAkTmVlZGVkIChx
dyhPYmplY3RUeXBlIEZpZWxkVHlwZSkpIHsKICAgICAgICAkR2V0UGFyYW17JE5lZWRlZH0gPSAk
UGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJhbSA9PiAkTmVlZGVkICk7CiAgICAgICAgaWYgKCAh
JEdldFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+
RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICRMYXlvdXRPYmplY3QtPntM
YW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSggJ05lZWQgJXMnLCAkTmVlZGVkICksCiAgICAgICAg
ICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IHRoZSBvYmplY3QgdHlwZSBhbmQgZmll
bGQgdHlwZSBkaXNwbGF5IG5hbWUKICAgIG15ICRDb25maWdPYmplY3QgPSAkS2VybmVsOjpPTS0+
R2V0KCdLZXJuZWw6OkNvbmZpZycpOwoKICAgIG15ICRPYmplY3RUeXBlTmFtZQogICAgICAgID0g
JENvbmZpZ09iamVjdC0+R2V0KCdEeW5hbWljRmllbGRzOjpPYmplY3RUeXBlJyktPnsgJEdldFBh
cmFte09iamVjdFR5cGV9IH0tPntEaXNwbGF5TmFtZX0gfHwgJyc7CiAgICBteSAkRmllbGRUeXBl
TmFtZSA9ICRDb25maWdPYmplY3QtPkdldCgnRHluYW1pY0ZpZWxkczo6RHJpdmVyJyktPnsgJEdl
dFBhcmFte0ZpZWxkVHlwZX0gfS0+e0Rpc3BsYXlOYW1lfSB8fCAnJzsKCiAgICBteSAkRmllbGRJ
RCA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICdJRCcgKTsKCiAgICBpZiAoICEk
RmllbGRJRCApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAg
ICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdOZWVkIElEJyksCiAgICAgICAgKTsK
ICAgIH0KCiAgICAjIGdldCBkeW5hbWljIGZpZWxkIGRhdGEKICAgIG15ICREeW5hbWljRmllbGRE
YXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5E
eW5hbWljRmllbGRHZXQoCiAgICAgICAgSUQgPT4gJEZpZWxkSUQsCiAgICApOwoKICAgICMgY2hl
Y2sgZm9yIHZhbGlkIGR5bmFtaWMgZmllbGQgY29uZmlndXJhdGlvbgogICAgaWYgKCAhSXNIYXNo
UmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZERhdGEpICkgewogICAgICAgIHJldHVybiAkTGF5b3V0
T2JqZWN0LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAg
ICAgJExheW91dE9iamVjdC0+e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnQ291bGQgbm90
IGdldCBkYXRhIGZvciBkeW5hbWljIGZpZWxkICVzJywgJEZpZWxkSUQgKSwKICAgICAgICApOwog
ICAgfQoKICAgIG15ICVDb25maWc7CgogICAgIyBleHRyYWN0IGNvbmZpZ3VyYXRpb24KICAgIGlm
ICggSXNIYXNoUmVmV2l0aERhdGEoICREeW5hbWljRmllbGREYXRhLT57Q29uZmlnfSApICkgewog
ICAgICAgIG15IEBLZXlzID0gQHsgJFNlbGYtPntDb25maWdQYXJhbXN9IHx8IFtdIH07CiAgICAg
ICAgcHVzaCBAS2V5cywgIlJlcXVlc3RQYXJhbXMiOwogICAgICAgIEBDb25maWd7QEtleXN9ID0g
QHsgJER5bmFtaWNGaWVsZERhdGEtPntDb25maWd9IH17QEtleXN9OwogICAgfQoKICAgIHJldHVy
biAkU2VsZi0+X1Nob3dTY3JlZW4oCiAgICAgICAgJVBhcmFtLAogICAgICAgICVHZXRQYXJhbSwK
ICAgICAgICAlJHtEeW5hbWljRmllbGREYXRhfSwKICAgICAgICAlQ29uZmlnLAogICAgICAgIElE
ICAgICAgICAgICAgID0+ICRGaWVsZElELAogICAgICAgIE1vZGUgICAgICAgICAgID0+ICdDaGFu
Z2UnLAogICAgICAgIE9iamVjdFR5cGVOYW1lID0+ICRPYmplY3RUeXBlTmFtZSwKICAgICAgICBG
aWVsZFR5cGVOYW1lICA9PiAkRmllbGRUeXBlTmFtZSwKICAgICk7Cn0KCnN1YiBfQ2hhbmdlQWN0
aW9uIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJUVycm9yczsKICAg
IG15ICVHZXRQYXJhbTsKCiAgICBteSAkUGFyYW1PYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgn
S2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAgbXkgJExheW91dE9iamVjdCA9ICRL
ZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICBmb3Ig
bXkgJE5lZWRlZCAocXcoTmFtZSBMYWJlbCBGaWVsZE9yZGVyIEpTT05QYXRoS2V5IFVSTCBIVFRQ
TWV0aG9kKSkgewogICAgICAgICRHZXRQYXJhbXskTmVlZGVkfSA9ICRQYXJhbU9iamVjdC0+R2V0
UGFyYW0oIFBhcmFtID0+ICROZWVkZWQgKTsKICAgICAgICBpZiAoICEkR2V0UGFyYW17JE5lZWRl
ZH0gKSB7CiAgICAgICAgICAgICRFcnJvcnN7ICROZWVkZWQgLiAnU2VydmVyRXJyb3InIH0gICAg
ICAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgJEVycm9yc3sgJE5lZWRlZCAuICdTZXJ2
ZXJFcnJvck1lc3NhZ2UnIH0gPSBUcmFuc2xhdGFibGUoJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQu
Jyk7CiAgICAgICAgfQogICAgfQoKICAgIG15ICRGaWVsZElEID0gJFBhcmFtT2JqZWN0LT5HZXRQ
YXJhbSggUGFyYW0gPT4gJ0lEJyApOwogICAgaWYgKCAhJEZpZWxkSUQgKSB7CiAgICAgICAgcmV0
dXJuICRMYXlvdXRPYmplY3QtPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+IFRy
YW5zbGF0YWJsZSgnTmVlZCBJRCcpLAogICAgICAgICk7CiAgICB9CgogICAgbXkgJER5bmFtaWNG
aWVsZE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmll
bGQnKTsKCiAgICAjIGdldCBkeW5hbWljIGZpZWxkIGRhdGEKICAgIG15ICREeW5hbWljRmllbGRE
YXRhID0gJER5bmFtaWNGaWVsZE9iamVjdC0+RHluYW1pY0ZpZWxkR2V0KAogICAgICAgIElEID0+
ICRGaWVsZElELAogICAgKTsKCiAgICAjIGNoZWNrIGZvciB2YWxpZCBkeW5hbWljIGZpZWxkIGNv
bmZpZ3VyYXRpb24KICAgIGlmICggIUlzSGFzaFJlZldpdGhEYXRhKCREeW5hbWljRmllbGREYXRh
KSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAg
ICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgICAgICRMYXlvdXRPYmplY3QtPntMYW5ndWFnZU9i
amVjdH0tPlRyYW5zbGF0ZSggJ0NvdWxkIG5vdCBnZXQgZGF0YSBmb3IgZHluYW1pYyBmaWVsZCAl
cycsICRGaWVsZElEICksCiAgICAgICAgKTsKICAgIH0KCiAgICBpZiAoICRHZXRQYXJhbXtOYW1l
fSApIHsKCiAgICAgICAgIyBjaGVjayBpZiBuYW1lIGlzIGxvd2VyY2FzZQogICAgICAgIGlmICgg
JEdldFBhcmFte05hbWV9ICF+IG17XEEgKD86IFthLXpBLVpdIHwgXGQgKSsgXHp9eG1zICkgewoK
ICAgICAgICAgICAgIyBhZGQgc2VydmVyIGVycm9yIGVycm9yIGNsYXNzCiAgICAgICAgICAgICRF
cnJvcnN7TmFtZVNlcnZlckVycm9yfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICRFcnJv
cnN7TmFtZVNlcnZlckVycm9yTWVzc2FnZX0gPQogICAgICAgICAgICAgICAgVHJhbnNsYXRhYmxl
KCdUaGUgZmllbGQgZG9lcyBub3QgY29udGFpbiBvbmx5IEFTQ0lJIGxldHRlcnMgYW5kIG51bWJl
cnMuJyk7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGlmIG5hbWUgaXMgZHVwbGljYXRlZAog
ICAgICAgIG15ICVEeW5hbWljRmllbGRzTGlzdCA9ICV7CiAgICAgICAgICAgICREeW5hbWljRmll
bGRPYmplY3QtPkR5bmFtaWNGaWVsZExpc3QoCiAgICAgICAgICAgICAgICBWYWxpZCAgICAgID0+
IDAsCiAgICAgICAgICAgICAgICBSZXN1bHRUeXBlID0+ICdIQVNIJywKICAgICAgICAgICAgICAg
ICkKICAgICAgICB9OwoKICAgICAgICAlRHluYW1pY0ZpZWxkc0xpc3QgPSByZXZlcnNlICVEeW5h
bWljRmllbGRzTGlzdDsKCiAgICAgICAgaWYgKAogICAgICAgICAgICAkRHluYW1pY0ZpZWxkc0xp
c3R7ICRHZXRQYXJhbXtOYW1lfSB9ICYmCiAgICAgICAgICAgICREeW5hbWljRmllbGRzTGlzdHsg
JEdldFBhcmFte05hbWV9IH0gbmUgJEZpZWxkSUQKICAgICAgICAgICAgKQogICAgICAgIHsKCiAg
ICAgICAgICAgICMgYWRkIHNlcnZlciBlcnJvciBjbGFzcwogICAgICAgICAgICAkRXJyb3Jze05h
bWVTZXJ2ZXJFcnJvcn0gICAgICAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgJEVycm9y
c3tOYW1lU2VydmVyRXJyb3JNZXNzYWdlfSA9IFRyYW5zbGF0YWJsZSgnVGhlcmUgaXMgYW5vdGhl
ciBmaWVsZCB3aXRoIHRoZSBzYW1lIG5hbWUuJyk7CiAgICAgICAgfQoKICAgICAgICAjIGlmIGl0
J3MgYW4gaW50ZXJuYWwgZmllbGQsIGl0J3MgbmFtZSBzaG91bGQgbm90IGNoYW5nZQogICAgICAg
IGlmICgKICAgICAgICAgICAgJER5bmFtaWNGaWVsZERhdGEtPntJbnRlcm5hbEZpZWxkfSAmJgog
ICAgICAgICAgICAkRHluYW1pY0ZpZWxkc0xpc3R7ICRHZXRQYXJhbXtOYW1lfSB9IG5lICRGaWVs
ZElECiAgICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICAjIGFkZCBzZXJ2ZXIgZXJy
b3IgY2xhc3MKICAgICAgICAgICAgJEVycm9yc3tOYW1lU2VydmVyRXJyb3J9ICAgICAgICA9ICdT
ZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICRFcnJvcnN7TmFtZVNlcnZlckVycm9yTWVzc2FnZX0g
PSBUcmFuc2xhdGFibGUoJ1RoZSBuYW1lIGZvciB0aGlzIGZpZWxkIHNob3VsZCBub3QgY2hhbmdl
LicpOwogICAgICAgICAgICAkUGFyYW17SW50ZXJuYWxGaWVsZH0gICAgICAgICAgID0gJER5bmFt
aWNGaWVsZERhdGEtPntJbnRlcm5hbEZpZWxkfTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAk
R2V0UGFyYW17RmllbGRPcmRlcn0gKSB7CgogICAgICAgICMgY2hlY2sgaWYgZmllbGQgb3JkZXIg
aXMgbnVtZXJpYyBhbmQgcG9zaXRpdmUKICAgICAgICBpZiAoICRHZXRQYXJhbXtGaWVsZE9yZGVy
fSAhfiBte1xBICg/OiBcZCApKyBcen14bXMgKSB7CgogICAgICAgICAgICAjIGFkZCBzZXJ2ZXIg
ZXJyb3IgZXJyb3IgY2xhc3MKICAgICAgICAgICAgJEVycm9yc3tGaWVsZE9yZGVyU2VydmVyRXJy
b3J9ICAgICAgICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICRFcnJvcnN7RmllbGRPcmRl
clNlcnZlckVycm9yTWVzc2FnZX0gPSBUcmFuc2xhdGFibGUoJ1RoZSBmaWVsZCBtdXN0IGJlIG51
bWVyaWMuJyk7CiAgICAgICAgfQogICAgfQoKICAgIGZvciBteSAkQ29uZmlnUGFyYW0gKCBAeyAk
U2VsZi0+e0NvbmZpZ1BhcmFtc30gfHwgW10gfSApIHsKICAgICAgICAkR2V0UGFyYW17JENvbmZp
Z1BhcmFtfSA9ICRQYXJhbU9iamVjdC0+R2V0UGFyYW0oIFBhcmFtID0+ICRDb25maWdQYXJhbSAp
OwogICAgfQoKICAgICMgdW5jb3JyZWN0YWJsZSBlcnJvcnMKICAgIGlmICggISRHZXRQYXJhbXtW
YWxpZElEfSApIHsKICAgICAgICByZXR1cm4gJExheW91dE9iamVjdC0+RXJyb3JTY3JlZW4oCiAg
ICAgICAgICAgIE1lc3NhZ2UgPT4gVHJhbnNsYXRhYmxlKCdOZWVkIFZhbGlkSUQnKSwKICAgICAg
ICApOwogICAgfQoKICAgIG15ICRSZXF1ZXN0UGFyYW1zID0gJFNlbGYtPl9HZXRSZXF1ZXN0UGFy
YW1zKCk7CgogICAgIyBzZXQgZXJyb3JzIGZvciBwb3NzaWJsZSB2YWx1ZXMgZW50cmllcwogICAg
S0VZOgogICAgZm9yIG15ICRLZXkgKCBzb3J0IGtleXMgJXskUmVxdWVzdFBhcmFtc30gKSB7Cgog
ICAgICAgICMgY2hlY2sgZm9yIGVtcHR5IG9yaWdpbmFsIHZhbHVlcwogICAgICAgIGlmICggJEtl
eSA9fiBte1xBICRTZWxmLT57RW1wdHlTdHJpbmd9ICg/OiBcZCspfXNteCApIHsKCiAgICAgICAg
ICAgICMgc2V0IGEgdHJ1ZSBlbnRyeSBpbiBLZXlFbXB0eUVycm9yCiAgICAgICAgICAgICRFcnJv
cnN7J1JlcXVlc3RQYXJhbUVycm9ycyd9LT57J0tleUVtcHR5RXJyb3InfS0+eyRLZXl9ID0gMTsK
ICAgICAgICB9CgogICAgICAgICMgb3RoZXJ3aXNlIGNoZWNrIGZvciBkdXBsaWNhdGUgb3JpZ2lu
YWwgdmFsdWVzCiAgICAgICAgZWxzaWYgKCAkS2V5ID1+IG17XEEgKC4rKSAtICRTZWxmLT57RHVw
bGljYXRlU3RyaW5nfSAoPzogXGQrKX1zbXggKSB7CgogICAgICAgICAgICAjIHNldCBhbiBlbnRy
eSBpbiBPcmlnUGFyYW1EdXBsaWNhdGVFcnJvciB3aXRoIHRoZSBkdXBsaWNhdGUga2V5IGFzIHZh
bHVlCiAgICAgICAgICAgICRFcnJvcnN7J1JlcXVlc3RQYXJhbUVycm9ycyd9LT57J0tleUR1cGxp
Y2F0ZUVycm9yJ30tPnskS2V5fSA9ICQxOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBmb3Ig
ZW1wdHkgbmV3IHZhbHVlcwogICAgICAgIGlmICggIWRlZmluZWQgJFJlcXVlc3RQYXJhbXMtPnsk
S2V5fSApIHsKCiAgICAgICAgICAgICMgc2V0IGEgdHJ1ZSBlbnRyeSBpbiBOZXdQYXJhbUVtcHR5
RXJyb3IKICAgICAgICAgICAgJEVycm9yc3snUmVxdWVzdFBhcmFtRXJyb3JzJ30tPnsnUGFyYW1F
bXB0eUVycm9yJ30tPnskS2V5fSA9IDE7CiAgICAgICAgfQogICAgfQoKICAgICMgcmV0dXJuIHRv
IGNoYW5nZSBzY3JlZW4gaWYgZXJyb3JzCiAgICBpZiAoJUVycm9ycykgewogICAgICAgIHJldHVy
biAkU2VsZi0+X1Nob3dTY3JlZW4oCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJUVy
cm9ycywKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICBJRCAgICAgICAgICAgICA9
PiAkRmllbGRJRCwKICAgICAgICAgICAgTW9kZSAgICAgICAgICAgPT4gJ0NoYW5nZScsCiAgICAg
ICAgICAgIFJlcXVlc3RQYXJhbXMgID0+ICRSZXF1ZXN0UGFyYW1zLAogICAgICAgICk7CiAgICB9
CgogICAgIyBzZXQgc3BlY2lmaWMgY29uZmlnCiAgICBteSBAS2V5cyA9IEB7ICRTZWxmLT57Q29u
ZmlnUGFyYW1zfSB8fCBbXSB9OwogICAgbXkgJUZpZWxkQ29uZmlnOwogICAgQEZpZWxkQ29uZmln
e0BLZXlzfSAgICAgICAgID0gQEdldFBhcmFte0BLZXlzfTsKICAgICRGaWVsZENvbmZpZ3tSZXF1
ZXN0UGFyYW1zfSA9ICRSZXF1ZXN0UGFyYW1zOwoKICAgICMgdXBkYXRlIGR5bmFtaWMgZmllbGQg
KEZpZWxkVHlwZSBhbmQgT2JqZWN0VHlwZSBjYW5ub3QgYmUgY2hhbmdlZDsgdXNlIG9sZCB2YWx1
ZXMpCiAgICBteSAkVXBkYXRlU3VjY2VzcyA9ICREeW5hbWljRmllbGRPYmplY3QtPkR5bmFtaWNG
aWVsZFVwZGF0ZSgKICAgICAgICBJRCAgICAgICAgID0+ICRGaWVsZElELAogICAgICAgIE5hbWUg
ICAgICAgPT4gJEdldFBhcmFte05hbWV9LAogICAgICAgIExhYmVsICAgICAgPT4gJEdldFBhcmFt
e0xhYmVsfSwKICAgICAgICBGaWVsZE9yZGVyID0+ICRHZXRQYXJhbXtGaWVsZE9yZGVyfSwKICAg
ICAgICBGaWVsZFR5cGUgID0+ICREeW5hbWljRmllbGREYXRhLT57RmllbGRUeXBlfSwKICAgICAg
ICBPYmplY3RUeXBlID0+ICREeW5hbWljRmllbGREYXRhLT57T2JqZWN0VHlwZX0sCiAgICAgICAg
Q29uZmlnICAgICA9PiBcJUZpZWxkQ29uZmlnLAogICAgICAgIFZhbGlkSUQgICAgPT4gJEdldFBh
cmFte1ZhbGlkSUR9LAogICAgICAgIFVzZXJJRCAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAg
KTsKCiAgICBpZiAoICEkVXBkYXRlU3VjY2VzcyApIHsKICAgICAgICByZXR1cm4gJExheW91dE9i
amVjdC0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gJExheW91dE9iamVjdC0+
e0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCAnQ291bGQgbm90IHVwZGF0ZSB0aGUgZmllbGQg
JXMnLCAkR2V0UGFyYW17TmFtZX0gKSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAkTGF5
b3V0T2JqZWN0LT5SZWRpcmVjdCgKICAgICAgICBPUCA9PiAiQWN0aW9uPUFkbWluRHluYW1pY0Zp
ZWxkIiwKICAgICk7Cn0KCnN1YiBfU2hvd1NjcmVlbiB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0g
KSA9IEBfOwoKICAgICRQYXJhbXtEaXNwbGF5RmllbGROYW1lfSA9ICdOZXcnOwoKICAgIGlmICgg
JFBhcmFte01vZGV9IGVxICdDaGFuZ2UnICkgewogICAgICAgICRQYXJhbXtTaG93V2FybmluZ30g
ICAgICA9ICdTaG93V2FybmluZyc7CiAgICAgICAgJFBhcmFte0Rpc3BsYXlGaWVsZE5hbWV9ID0g
JFBhcmFte05hbWV9OwogICAgfQoKICAgICRQYXJhbXtEZWxldGVkU3RyaW5nfSA9ICRTZWxmLT57
RGVsZXRlZFN0cmluZ307CgogICAgbXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQo
J0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQnKTsKCiAgICAjIGhlYWRlcgogICAgbXkgJE91
dHB1dCA9ICRMYXlvdXRPYmplY3QtPkhlYWRlcigpOwogICAgJE91dHB1dCAuPSAkTGF5b3V0T2Jq
ZWN0LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgIyBnZXQgYWxsIGZpZWxkcwogICAgbXkgJER5bmFt
aWNGaWVsZExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0Zp
ZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgVmFsaWQgPT4gMCwKICAgICk7Cgog
ICAgIyBnZXQgdGhlIGxpc3Qgb2Ygb3JkZXIgbnVtYmVycyAoaXMgYWxyZWFkeSBzb3J0ZWQpLgog
ICAgbXkgQER5bmFtaWNmaWVsZE9yZGVyTGlzdDsKICAgIG15ICVEeW5hbWljZmllbGROYW1lc0xp
c3Q7CiAgICBmb3IgbXkgJER5bmFtaWNmaWVsZCAoIEB7JER5bmFtaWNGaWVsZExpc3R9ICkgewog
ICAgICAgIHB1c2ggQER5bmFtaWNmaWVsZE9yZGVyTGlzdCwgJER5bmFtaWNmaWVsZC0+e0ZpZWxk
T3JkZXJ9OwogICAgICAgICREeW5hbWljZmllbGROYW1lc0xpc3R7ICREeW5hbWljZmllbGQtPntG
aWVsZE9yZGVyfSB9ID0gJER5bmFtaWNmaWVsZC0+e0xhYmVsfTsKICAgIH0KCiAgICAjIHdoZW4g
YWRkaW5nIHdlIG5lZWQgdG8gY3JlYXRlIGFuIGV4dHJhIG9yZGVyIG51bWJlciBmb3IgdGhlIG5l
dyBmaWVsZAogICAgaWYgKCAkUGFyYW17TW9kZX0gZXEgJ0FkZCcgKSB7CgogICAgICAgICMgZ2V0
IHRoZSBsYXN0IGVsZW1lbnQgZm9ybSB0aGUgb3JkZXIgbGlzdCBhbmQgYWRkIDEKICAgICAgICBt
eSAkTGFzdE9yZGVyTnVtYmVyID0gJER5bmFtaWNmaWVsZE9yZGVyTGlzdFstMV07CiAgICAgICAg
JExhc3RPcmRlck51bWJlcisrOwoKICAgICAgICAjIGFkZCB0aGlzIG5ldyBvcmRlciBudW1iZXIg
dG8gdGhlIGVuZCBvZiB0aGUgbGlzdAogICAgICAgIHB1c2ggQER5bmFtaWNmaWVsZE9yZGVyTGlz
dCwgJExhc3RPcmRlck51bWJlcjsKICAgIH0KCiAgICAjIHNob3cgdGhlIG5hbWVzIG9mIHRoZSBv
dGhlciBmaWVsZHMgdG8gZWFzZSBvcmRlcmluZwogICAgbXkgJU9yZGVyTmFtZXNMaXN0OwogICAg
bXkgJEN1cnJlbnRseVRleHQgPSAkTGF5b3V0T2JqZWN0LT57TGFuZ3VhZ2VPYmplY3R9LT5UcmFu
c2xhdGUoJ0N1cnJlbnRseScpIC4gJzogJzsKICAgIGZvciBteSAkT3JkZXJOdW1iZXIgKCBzb3J0
IEBEeW5hbWljZmllbGRPcmRlckxpc3QgKSB7CiAgICAgICAgJE9yZGVyTmFtZXNMaXN0eyRPcmRl
ck51bWJlcn0gPSAkT3JkZXJOdW1iZXI7CiAgICAgICAgaWYgKCAkRHluYW1pY2ZpZWxkTmFtZXNM
aXN0eyRPcmRlck51bWJlcn0gJiYgJE9yZGVyTnVtYmVyIG5lICRQYXJhbXtGaWVsZE9yZGVyfSAp
IHsKICAgICAgICAgICAgJE9yZGVyTmFtZXNMaXN0eyRPcmRlck51bWJlcn0gPSAkT3JkZXJOdW1i
ZXIgLiAnIC0gJwogICAgICAgICAgICAgICAgLiAkQ3VycmVudGx5VGV4dAogICAgICAgICAgICAg
ICAgLiAkRHluYW1pY2ZpZWxkTmFtZXNMaXN0eyRPcmRlck51bWJlcn0KICAgICAgICB9CiAgICB9
CgogICAgbXkgJER5bmFtaWNGaWVsZE9yZGVyU3RyZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxkU2Vs
ZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICAgPT4gXCVPcmRlck5hbWVzTGlzdCwKICAgICAg
ICBOYW1lICAgICAgICAgID0+ICdGaWVsZE9yZGVyJywKICAgICAgICBTZWxlY3RlZFZhbHVlID0+
ICRQYXJhbXtGaWVsZE9yZGVyfSB8fCAxLAogICAgICAgIFBvc3NpYmxlTm9uZSAgPT4gMCwKICAg
ICAgICBUcmFuc2xhdGlvbiAgID0+IDAsCiAgICAgICAgU29ydCAgICAgICAgICA9PiAnTnVtZXJp
Y0tleScsCiAgICAgICAgQ2xhc3MgICAgICAgICA9PiAnTW9kZXJuaXplIFc3NXBjIFZhbGlkYXRl
X051bWJlcicsCiAgICApOwoKICAgIG15ICVWYWxpZExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdL
ZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRMaXN0KCk7CgogICAgIyBjcmVhdGUgdGhlIFZh
bGlkaXR5IHNlbGVjdAogICAgbXkgJFZhbGlkaXR5U3RyZyA9ICRMYXlvdXRPYmplY3QtPkJ1aWxk
U2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICA9PiBcJVZhbGlkTGlzdCwKICAgICAgICBO
YW1lICAgICAgICAgPT4gJ1ZhbGlkSUQnLAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17
VmFsaWRJRH0gfHwgMSwKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMCwKICAgICAgICBUcmFuc2xh
dGlvbiAgPT4gMSwKICAgICAgICBDbGFzcyAgICAgICAgPT4gJ01vZGVybml6ZSBXNTBwYycsCiAg
ICApOwoKICAgICMgZGVmaW5lIGFzIDAgdG8gZ2V0IHRoZSByZWFsIHZhbHVlIGluIHRoZSBIVE1M
CiAgICBteSAkVmFsdWVDb3VudGVyID0gMDsKCiAgICAjIGNyZWF0ZSB0cmVldmlldyBvcHRpb24g
bGlzdAogICAgJFBhcmFte0hUVFBNZXRob2RTZWxlY3R9ID0gJExheW91dE9iamVjdC0+QnVpbGRT
ZWxlY3Rpb24oCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIEdFVCAgPT4gJ0dFVCcsCiAg
ICAgICAgICAgIFBPU1QgPT4gJ1BPU1QnLAogICAgICAgIH0sCiAgICAgICAgTmFtZSAgICAgICA9
PiAnSFRUUE1ldGhvZCcsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17SFRUUE1ldGhvZH0g
fHwgJ0dFVCcsCiAgICAgICAgQ2xhc3MgICAgICA9PiAnVzUwcGMnLAogICAgKTsKCiAgICAjIGRl
ZmluZSBhcyAwIHRvIGdldCB0aGUgcmVhbCB2YWx1ZSBpbiB0aGUgSFRNTAogICAgbXkgJFBhcmFt
Q291bnRlciA9IDA7CgogICAgIyBzZXQgUmVxdWVzdFBhcmFtcwogICAgbXkgJVJlcXVlc3RQYXJh
bXM7CiAgICBpZiAoIElzSGFzaFJlZldpdGhEYXRhKCAkUGFyYW17UmVxdWVzdFBhcmFtc30gKSAp
IHsKICAgICAgICAlUmVxdWVzdFBhcmFtcyA9ICV7ICRQYXJhbXtSZXF1ZXN0UGFyYW1zfSB9Owog
ICAgfQoKICAgICMgb3V0cHV0IHRoZSBwb3NzaWJsZSB2YWx1ZXMgYW5kIGVycm9ycyB3aXRoaW4g
KGlmIGFueSkKICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICVSZXF1ZXN0UGFyYW1zICkgewoK
ICAgICAgICAkUGFyYW1Db3VudGVyKys7CgogICAgICAgICMgbmVlZGVkIGZvciBzZXJ2ZXIgc2lk
ZSB2YWxpZGF0aW9uCiAgICAgICAgbXkgJEtleUVycm9yOwogICAgICAgIG15ICRLZXlFcnJvclN0
cmc7CiAgICAgICAgbXkgJFBhcmFtRXJyb3I7CgogICAgICAgICMgdG8gc2V0IHRoZSBjb3JyZWN0
IG9yaWdpbmFsIHZhbHVlCiAgICAgICAgbXkgJEtleUNsb25lID0gJEtleTsKCiAgICAgICAgIyBj
aGVjayBmb3IgZXJyb3JzCiAgICAgICAgaWYgKCAkUGFyYW17J1JlcXVlc3RQYXJhbUVycm9ycyd9
ICkgewoKICAgICAgICAgICAgIyBjaGVjayBmb3IgZXJyb3JzIG9uIG9yaWdpbmFsIHZhbHVlIChl
bXB0eSkKICAgICAgICAgICAgaWYgKCAkUGFyYW17J1JlcXVlc3RQYXJhbUVycm9ycyd9LT57J0tl
eUVtcHR5RXJyb3InfS0+eyRLZXl9ICkgewoKICAgICAgICAgICAgICAgICMgaWYgdGhlIG9yaWdp
bmFsIHZhbHVlIHdhcyBlbXB0eSBpdCBoYXMgYmVlbiBjaGFuZ2VkIGluIF9HZXRQYXJhbXMgdG8g
YSBwcmVkZWZpbmVkCiAgICAgICAgICAgICAgICAjIHN0cmluZyBhbmQgbmVlZCB0byBiZSBzZXQg
dG8gZW1wdHkgYWdhaW4KICAgICAgICAgICAgICAgICRLZXlDbG9uZSA9ICcnOwoKICAgICAgICAg
ICAgICAgICMgc2V0IHRoZSBlcnJvciBjbGFzcwogICAgICAgICAgICAgICAgJEtleUVycm9yICAg
ICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICAkS2V5RXJyb3JTdHJnID0gVHJhbnNs
YXRhYmxlKCdUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLicpOwogICAgICAgICAgICB9CgogICAgICAg
ICAgICAjIGNoZWNrIGZvciBlcnJvcnMgb24gb3JpZ2luYWwgdmFsdWUgKGR1cGxpY2F0ZSkKICAg
ICAgICAgICAgZWxzaWYgKCAkUGFyYW17J1JlcXVlc3RQYXJhbUVycm9ycyd9LT57J0tleUR1cGxp
Y2F0ZUVycm9yJ30tPnskS2V5fSApIHsKCiAgICAgICAgICAgICAgICAjIGlmIHRoZSBvcmlnaW5h
bCB2YWx1ZSB3YXMgZW1wdHkgaXQgaGFzIGJlZW4gY2hhbmdlZCBpbiBfR2V0UGFyYW1zIHRvIGEg
cHJlZGVmaW5lZAogICAgICAgICAgICAgICAgIyBzdHJpbmcgYW5kIG5lZWQgdG8gYmUgc2V0IHRv
IHRoZSBvcmlnaW5hbCB2YWx1ZSBhZ2FpbgogICAgICAgICAgICAgICAgJEtleUNsb25lID0gJFBh
cmFteydSZXF1ZXN0UGFyYW1FcnJvcnMnfS0+eydLZXlEdXBsaWNhdGVFcnJvcid9LT57JEtleX07
CgogICAgICAgICAgICAgICAgIyBzZXQgdGhlIGVycm9yIGNsYXNzCiAgICAgICAgICAgICAgICAk
S2V5RXJyb3IgICAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICRLZXlFcnJvclN0
cmcgPSBUcmFuc2xhdGFibGUoJ1RoaXMgZmllbGQgdmFsdWUgaXMgZHVwbGljYXRlZC4nKTsKICAg
ICAgICAgICAgfQoKICAgICAgICAgICAgIyBjaGVjayBmb3IgZXJyb3Igb24gdmFsdWUKICAgICAg
ICAgICAgaWYgKCAkUGFyYW17J1JlcXVlc3RQYXJhbUVycm9ycyd9LT57J1BhcmFtRW1wdHlFcnJv
cid9LT57JEtleX0gKSB7CgogICAgICAgICAgICAgICAgIyBzZXQgdGhlIGVycm9yIGNsYXNzCiAg
ICAgICAgICAgICAgICAkUGFyYW1FcnJvciA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CgogICAgICAgICMgY3JlYXRlIGEgdmFsdWUgbWFwIHJvdwogICAgICAgICRMYXlv
dXRPYmplY3QtPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdQYXJhbVJvdycsCiAgICAgICAg
ICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgS2V5RXJyb3IgICAgID0+ICRLZXlFcnJvciwK
ICAgICAgICAgICAgICAgIEtleUVycm9yU3RyZyA9PiAkS2V5RXJyb3JTdHJnIHx8IFRyYW5zbGF0
YWJsZSgnVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4nKSwKICAgICAgICAgICAgICAgIEtleSAgICAg
ICAgICA9PiAkS2V5Q2xvbmUsCiAgICAgICAgICAgICAgICBQYXJhbUNvdW50ZXIgPT4gJFBhcmFt
Q291bnRlciwKICAgICAgICAgICAgICAgIFBhcmFtICAgICAgICA9PiAkUmVxdWVzdFBhcmFtc3sk
S2V5fSwKICAgICAgICAgICAgICAgIFBhcmFtRXJyb3IgICA9PiAkUGFyYW1FcnJvciwKICAgICAg
ICAgICAgfSwKICAgICAgICApOwogICAgfQoKICAgICMgY3JlYXRlIHRoZSByZXF1ZXN0IHBhcmFt
IHRlbXBsYXRlCiAgICAkTGF5b3V0T2JqZWN0LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdQYXJh
bVRlbXBsYXRlJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAg
IH0sCiAgICApOwoKICAgIG15ICRQb3NzaWJsZU5vbmUgPSAkUGFyYW17UG9zc2libGVOb25lfSB8
fCAnMCc7CgogICAgIyBjcmVhdGUgdHJhbnNsYXRhYmxlIHZhbHVlcyBvcHRpb24gbGlzdAogICAg
bXkgJFBvc3NpYmxlTm9uZVN0cmcgPSAkTGF5b3V0T2JqZWN0LT5CdWlsZFNlbGVjdGlvbigKICAg
ICAgICBEYXRhID0+IHsKICAgICAgICAgICAgMCA9PiBUcmFuc2xhdGFibGUoJ05vJyksCiAgICAg
ICAgICAgIDEgPT4gVHJhbnNsYXRhYmxlKCdZZXMnKSwKICAgICAgICB9LAogICAgICAgIE5hbWUg
ICAgICAgPT4gJ1Bvc3NpYmxlTm9uZScsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUG9zc2libGVO
b25lLAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZSBXNTBwYycsCiAgICApOwoKICAg
ICRQYXJhbXtHZW5lcmljQWdlbnRSZXR1cm5VbmRlZk9uRW1wdHlTZWxlY3R9ID0gJExheW91dE9i
amVjdC0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIDAgPT4g
VHJhbnNsYXRhYmxlKCdObycpLAogICAgICAgICAgICAxID0+IFRyYW5zbGF0YWJsZSgnWWVzJyks
CiAgICAgICAgfSwKICAgICAgICBOYW1lICAgICAgID0+ICdHZW5lcmljQWdlbnRSZXR1cm5VbmRl
Zk9uRW1wdHknLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte0dlbmVyaWNBZ2VudFJldHVy
blVuZGVmT25FbXB0eX0gfHwgJzAnLAogICAgICAgIENsYXNzICAgICAgPT4gJ01vZGVybml6ZSBX
NTBwYycsCiAgICApOwoKICAgIG15ICRMaW5rID0gJFBhcmFte0xpbmt9IHx8ICcnOwoKICAgICMg
Z2VuZXJhdGUgb3V0cHV0CiAgICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPk91dHB1dCgKICAg
ICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluRHluYW1pY0ZpZWxkSnNvbkFQSScsCiAgICAgICAg
RGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBWYWxpZGl0
eVN0cmcgICAgICAgICAgID0+ICRWYWxpZGl0eVN0cmcsCiAgICAgICAgICAgIER5bmFtaWNGaWVs
ZE9yZGVyU3RyZyAgPT4gJER5bmFtaWNGaWVsZE9yZGVyU3RyZywKICAgICAgICAgICAgUG9zc2li
bGVOb25lU2VsZWN0ICAgICAgID0+ICRQb3NzaWJsZU5vbmVTdHJnLAogICAgICAgICAgICBQYXJh
bUNvdW50ZXIgICAgICAgICAgID0+ICRQYXJhbUNvdW50ZXIsCiAgICAgICAgfQogICAgKTsKCiAg
ICAkT3V0cHV0IC49ICRMYXlvdXRPYmplY3QtPkZvb3RlcigpOwoKICAgIHJldHVybiAkT3V0cHV0
Owp9CgpzdWIgX0dldFJlcXVlc3RQYXJhbXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBA
XzsKCiAgICBteSAkUGFyYW1PYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3Rl
bTo6V2ViOjpSZXF1ZXN0Jyk7CgogICAgbXkgJFJlcXVlc3RQYXJhbUNvbmZpZzsKCiAgICAjIGdl
dCBwYXJhbWV0ZXJzIGZyb20gd2ViIGJyb3dzZXIKICAgICMgZ2V0IFBhcmFtQ291bnRlcnMKICAg
IG15ICRQYXJhbUNvdW50ZXIgICAgICAgICAgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJh
bSA9PiAnUGFyYW1Db3VudGVyJyApIHx8IDA7CiAgICBteSAkRW1wdHlQYXJhbUNvdW50ZXIgICAg
ID0gMDsKICAgIG15ICREdXBsaWNhdGVQYXJhbUNvdW50ZXIgPSAwOwoKICAgIHJldHVybiB7fSBp
ZiAhJFBhcmFtQ291bnRlcjsKCiAgICAjIGdldCBwb3NzaWJsZSB2YWx1ZXMKICAgIG15ICRQYXJh
bXM7CiAgICBWQUxVRUlOREVYOgogICAgZm9yIG15ICRQYXJhbUluZGV4ICggMSAuLiAkUGFyYW1D
b3VudGVyICkgewogICAgICAgIG15ICRLZXkgPSAkUGFyYW1PYmplY3QtPkdldFBhcmFtKCBQYXJh
bSA9PiAnS2V5JyAuICdfJyAuICRQYXJhbUluZGV4ICk7CiAgICAgICAgJEtleSA9ICggZGVmaW5l
ZCAkS2V5ID8gJEtleSA6ICcnICk7CgogICAgICAgICMgY2hlY2sgaWYga2V5IHdhcyBkZWxldGVk
IGJ5IHRoZSB1c2VyIGFuZCBza2lwIGl0CiAgICAgICAgbmV4dCBWQUxVRUlOREVYIGlmICRLZXkg
ZXEgJFNlbGYtPntEZWxldGVkU3RyaW5nfTsKCiAgICAgICAgIyBjaGVjayBpZiB0aGUgb3JpZ2lu
YWwgdmFsdWUgaXMgZW1wdHkKICAgICAgICBpZiAoICRLZXkgZXEgJycgKSB7CgogICAgICAgICAg
ICAjIGNoYW5nZSB0aGUgZW1wdHkgdmFsdWUgdG8gYSBwcmVkZWZpbmVkIHN0cmluZwogICAgICAg
ICAgICAkS2V5ID0gJFNlbGYtPntFbXB0eVN0cmluZ30gLiBpbnQgJEVtcHR5UGFyYW1Db3VudGVy
OwogICAgICAgICAgICAkRW1wdHlQYXJhbUNvdW50ZXIrKzsKICAgICAgICB9CgogICAgICAgICMg
b3RoZXJ3aXNlIGNoZWNrIGZvciBkdXBsaWNhdGUKICAgICAgICBlbHNpZiAoIGV4aXN0cyAkUmVx
dWVzdFBhcmFtQ29uZmlnLT57JEtleX0gKSB7CgogICAgICAgICAgICAjIGFwcGVuZCBhIHByZWRl
ZmluZWQgdW5pcXVlIHN0cmluZyB0byBtYWtlIHRoaXMgdmFsdWUgdW5pcXVlCiAgICAgICAgICAg
ICRLZXkgLj0gJy0nIC4gJFNlbGYtPntEdXBsaWNhdGVTdHJpbmd9IC4gJER1cGxpY2F0ZVBhcmFt
Q291bnRlcjsKICAgICAgICAgICAgJER1cGxpY2F0ZVBhcmFtQ291bnRlcisrOwogICAgICAgIH0K
CiAgICAgICAgbXkgJFBhcmFtID0gJFBhcmFtT2JqZWN0LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1Bh
cmFtJyAuICdfJyAuICRQYXJhbUluZGV4ICk7CiAgICAgICAgJFBhcmFtICAgID0gKCBkZWZpbmVk
ICRQYXJhbSA/ICRQYXJhbSA6ICcnICk7CiAgICAgICAgJFJlcXVlc3RQYXJhbUNvbmZpZy0+eyRL
ZXl9ID0gJFBhcmFtOwogICAgfQoKICAgIHJldHVybiAkUmVxdWVzdFBhcmFtQ29uZmlnOwp9Cgox
Owo=
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL1B1YmxpY0RlbGV0ZURGQ2FjaGUucG0gLSBkZWxldGUgY2Fj
aGUgZm9yIER5bmFtaWNGaWVsZFZhbHVlcwojIENvcHlyaWdodCAoQykgMjAxNSBQZXJsLVNlcnZp
Y2VzLmRlLCBodHRwOi8vcGVybC1zZXJ2aWNlcy5kZQojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21l
cyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5j
bG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91
CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl
bnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OlB1YmxpY0RlbGV0
ZURGQ2FjaGU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpvdXIgQE9iamVjdERlcGVuZGVu
Y2llcyA9IHF3KAogICAgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxheW91dAogICAgS2VybmVsOjpT
eXN0ZW06OldlYjo6UmVxdWVzdAogICAgS2VybmVsOjpTeXN0ZW06OkNhY2hlCik7CgpvdXIgJFZF
UlNJT04gPSAwLjAxOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoK
ICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFt
fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBS
dW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkUGFyYW1PYmplY3Qg
ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpOwogICAg
bXkgJExheW91dE9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6T3V0cHV0OjpIVE1M
OjpMYXlvdXQnKTsKICAgIG15ICRDYWNoZU9iamVjdCAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJu
ZWw6OlN5c3RlbTo6Q2FjaGUnKTsKCiAgICBteSAkRmllbGQgPSAkUGFyYW1PYmplY3QtPkdldFBh
cmFtKCBQYXJhbSA9PiAnTmFtZScgKSB8fCAnJzsKICAgICRGaWVsZCA9fiBze1teQS1aYS16MC05
XX17fWc7CgogICAgJENhY2hlT2JqZWN0LT5EZWxldGUoCiAgICAgICAgVHlwZSA9PiAnRHluYW1p
Y0ZpZWxkVmFsdWVzJywKICAgICAgICBLZXkgID0+ICdEeW5hbWljRmllbGQ6OicgLiAkRmllbGQs
CiAgICApOwoKICAgIHJldHVybiAkTGF5b3V0T2JqZWN0LT5BdHRhY2htZW50KAogICAgICAgIENv
bnRlbnRUeXBlID0+ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PScgLiAkTGF5b3V0T2JqZWN0
LT57Q2hhcnNldH0sCiAgICAgICAgQ29udGVudCAgICAgPT4gJ3sic3VjY2VzcyI6MX0nLAogICAg
ICAgIFR5cGUgICAgICAgID0+ICdpbmxpbmUnLAogICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAg
ICApOwp9CgoxOwo=
IyAtLQojIEFkbWluRHluYW1pY0ZpZWxkSnNvbkFQSS50dCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBm
b3IgQWRtaW5EeW5hbWljRmllbGRzSnNvbkFQSQojIENvcHlyaWdodCAoQykgMjAxNSBQZXJsLVNl
cnZpY2VzLmRlLCBodHRwOi8vcGVybC1zZXJ2aWNlcy5kZQojIC0tCiMgVGhpcyBzb2Z0d2FyZSBj
b21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUg
ZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYg
eW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9s
aWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKPGRpdiBjbGFzcz0iTWFpbkJveCBBUklBUm9sZU1haW4g
TGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJGaXJzdCI+CiAgICA8aDE+WyUgVHJhbnNsYXRlKCJE
eW5hbWljIEZpZWxkcyIpIHwgaHRtbCAlXSAtIFslIFRyYW5zbGF0ZShEYXRhLk9iamVjdFR5cGVO
YW1lKSB8IGh0bWwgJV06IFslIFRyYW5zbGF0ZShEYXRhLk1vZGUpIHwgaHRtbCAlXSBbJSBUcmFu
c2xhdGUoRGF0YS5GaWVsZFR5cGVOYW1lKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKCJGaWVsZCIp
IHwgaHRtbCAlXTwvaDE+CgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgIDxkaXYg
Y2xhc3M9IlNpZGViYXJDb2x1bW4iPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+
CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUg
VHJhbnNsYXRlKCJBY3Rpb25zIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAg
ICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHVsIGNsYXNz
PSJBY3Rpb25MaXN0Ij4KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAg
ICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1BZG1pbkR5bmFtaWNG
aWVsZCIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gRnVsbHNpemUgQ2VudGVyIj48c3Bhbj48aSBjbGFz
cz0iZmEgZmEtY2FyZXQtbGVmdCI+PC9pPlslIFRyYW5zbGF0ZSgiR28gYmFjayB0byBvdmVydmll
dyIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAg
ICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9k
aXY+CgogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgPGZvcm0gYWN0aW9u
PSJbJSBFbnYoIkNHSUhhbmRsZSIpICVdIiBtZXRob2Q9InBvc3QiIGNsYXNzPSJWYWxpZGF0ZSBQ
cmV2ZW50TXVsdGlwbGVTdWJtaXRzIj4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIg
bmFtZT0iQWN0aW9uIiB2YWx1ZT0iQWRtaW5EeW5hbWljRmllbGRKc29uQVBJIiAvPgogICAgICAg
ICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJbJSBEYXRh
Lk1vZGUgfCBodG1sICVdQWN0aW9uIiAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVu
IiBuYW1lPSJPYmplY3RUeXBlIiB2YWx1ZT0iWyUgRGF0YS5PYmplY3RUeXBlIHwgaHRtbCAlXSIg
Lz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iRmllbGRUeXBlIiB2YWx1
ZT0iWyUgRGF0YS5GaWVsZFR5cGUgfCBodG1sICVdIiAvPgogICAgICAgICAgICA8aW5wdXQgdHlw
ZT0iaGlkZGVuIiBuYW1lPSJJRCIgdmFsdWU9IlslIERhdGEuSUQgfCBodG1sICVdIiAvPgoKICAg
ICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgIDxkaXYg
Y2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiR2Vu
ZXJhbCIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAg
ICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9
IkxheW91dEdyaWQgQ29sdW1uc1dpdGhTcGFjaW5nIj4KICAgICAgICAgICAgICAgICAgICAgICAg
PGRpdiBjbGFzcz0iU2l6ZTFvZjIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpZWxk
c2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxs
YWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9Ik5hbWUiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8
L3NwYW4+IFslIFRyYW5zbGF0ZSgiTmFtZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJOYW1lIiBjbGFzcz0iVzUwcGMgWyUgRGF0
YS5OYW1lU2VydmVyRXJyb3IgfCBodG1sICVdIFslIERhdGEuU2hvd1dhcm5pbmcgfCBodG1sICVd
ICBWYWxpZGF0ZV9BbHBoYW51bWVyaWMiIHR5cGU9InRleHQiIG1heGxlbmd0aD0iMjAwIiB2YWx1
ZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgbmFtZT0iTmFtZSIgWyUgRGF0YS5SZWFkb25seUlu
dGVybmFsRmllbGQgfCBodG1sICVdIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDxkaXYgaWQ9Ik5hbWVFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlsl
IFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZCwgYW5kIHRoZSB2YWx1ZSBzaG91bGQg
YmUgYWxwaGFiZXRpYyBhbmQgbnVtZXJpYyBjaGFyYWN0ZXJzIG9ubHkuIikgfCBodG1sICVdPC9w
PjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1l
U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUo
RGF0YS5OYW1lU2VydmVyRXJyb3JNZXNzYWdlKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj5b
JSBUcmFuc2xhdGUoIk11c3QgYmUgdW5pcXVlIGFuZCBvbmx5IGFjY2VwdCBhbHBoYWJldGljIGFu
ZCBudW1lcmljIGNoYXJhY3RlcnMuIikgfCBodG1sICVdPC9wPgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iV2FybmluZyBIaWRkZW4iPlslIFRyYW5zbGF0ZSgi
Q2hhbmdpbmcgdGhpcyB2YWx1ZSB3aWxsIHJlcXVpcmUgbWFudWFsIGNoYW5nZXMgaW4gdGhlIHN5
c3RlbS4iKSB8IGh0bWwgJV08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9k
aXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwv
ZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9Ik1hbmRh
dG9yeSIgZm9yPSJMYWJlbCI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gWyUgVHJhbnNs
YXRlKCJMYWJlbCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPGlucHV0IGlkPSJMYWJlbCIgY2xhc3M9Ilc1MHBjIFslIERhdGEuTGFiZWxTZXJ2ZXJF
cnJvciB8IGh0bWwgJV0gVmFsaWRhdGVfUmVxdWlyZWQiIHR5cGU9InRleHQiIG1heGxlbmd0aD0i
MjAwIiB2YWx1ZT0iWyUgRGF0YS5MYWJlbCB8IGh0bWwgJV0iIG5hbWU9IkxhYmVsIi8+CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkxhYmVsRXJyb3IiIGNsYXNz
PSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVx
dWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA8ZGl2IGlkPSJMYWJlbFNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVz
c2FnZSI+PHA+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWxTZXJ2ZXJFcnJvck1lc3NhZ2UpIHwgaHRt
bCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xh
c3M9IkZpZWxkRXhwbGFuYXRpb24iPlslIFRyYW5zbGF0ZSgiVGhpcyBpcyB0aGUgbmFtZSB0byBi
ZSBzaG93biBvbiB0aGUgc2NyZWVucyB3aGVyZSB0aGUgZmllbGQgaXMgYWN0aXZlLiIpIHwgaHRt
bCAlXTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBmb3I9IkZp
ZWxkT3JkZXIiPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+IFslIFRyYW5zbGF0ZSgiRmll
bGQgb3JkZXIiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFslIERhdGEuRHluYW1pY0ZpZWxkT3JkZXJTdHJnICVdCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkZpZWxkT3JkZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBF
cnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZCBhbmQg
bXVzdCBiZSBudW1lcmljLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iRmllbGRPcmRlclNlcnZlckVycm9yIiBjbGFzcz0i
VG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKERhdGEuRmllbGRPcmRlclNlcnZl
ckVycm9yTWVzc2FnZSkgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+WyUgVHJhbnNsYXRlKCJU
aGlzIGlzIHRoZSBvcmRlciBpbiB3aGljaCB0aGlzIGZpZWxkIHdpbGwgYmUgc2hvd24gb24gdGhl
IHNjcmVlbnMgd2hlcmUgaXMgYWN0aXZlLiIpIHwgaHRtbCAlXTwvcD4KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Zp
ZWxkc2V0PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAg
ICAgICAgPGRpdiBjbGFzcz0iU2l6ZTFvZjIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
PGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDxsYWJlbCBmb3I9IlZhbGlkSUQiPlslIFRyYW5zbGF0ZSgiVmFsaWRpdHkiKSB8IGh0bWwg
JV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJG
aWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVmFsaWRp
dHlTdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTcGFjaW5nVG9wIj48L2Rpdj4K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJGaWVsZFR5cGVOYW1l
Ij5bJSBUcmFuc2xhdGUoIkZpZWxkIHR5cGUiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iRmllbGRUeXBlTmFtZSIgcmVhZG9ubHkg
Y2xhc3M9Ilc1MHBjIiB0eXBlPSJ0ZXh0IiBtYXhsZW5ndGg9IjIwMCIgdmFsdWU9IlslIFRyYW5z
bGF0ZShEYXRhLkZpZWxkVHlwZU5hbWUpIHwgaHRtbCAlXSIgbmFtZT0iRmllbGRUeXBlTmFtZSIv
PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+
PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNwYWNpbmdUb3AiPjwvZGl2PgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Ik9iamVjdFR5cGVOYW1lIj5b
JSBUcmFuc2xhdGUoIk9iamVjdCB0eXBlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9Ik9iamVjdFR5cGVOYW1lIiByZWFkb25seSBj
bGFzcz0iVzUwcGMiIHR5cGU9InRleHQiIG1heGxlbmd0aD0iMjAwIiB2YWx1ZT0iWyUgVHJhbnNs
YXRlKERhdGEuT2JqZWN0VHlwZU5hbWUpIHwgaHRtbCAlXSIgbmFtZT0iT2JqZWN0VHlwZU5hbWUi
Lz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIi
PjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKWyUgUmVuZGVy
QmxvY2tTdGFydCgiSW50ZXJuYWxGaWVsZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPGRpdiBjbGFzcz0iU3BhY2luZ1RvcCI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPGxhYmVsIGZvcj0iSW50ZXJuYWxGaWVsZCI+WyUgVHJhbnNsYXRlKCJJbnRl
cm5hbCBmaWVsZCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPGlucHV0IGlkPSJJbnRlcm5hbEZpZWxkIiByZWFkb25seSBjbGFzcz0iVzUwcGMiIHR5
cGU9InRleHQiIG1heGxlbmd0aD0iMSIgdmFsdWU9IlslIERhdGEuSW50ZXJuYWxGaWVsZCB8IGh0
bWwgJV0iIG5hbWU9IkludGVybmFsRmllbGQiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHByb3RlY3Rl
ZCBhbmQgY2FuJ3QgYmUgZGVsZXRlZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJJbnRlcm5hbEZpZWxkIikgJV0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2
PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAg
ICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAg
ICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDI+
WyUgVHJhbnNsYXRlKERhdGEuRmllbGRUeXBlTmFtZSkgfCBodG1sICVdIFslIFRyYW5zbGF0ZSgi
RmllbGQgU2V0dGluZ3MiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAg
ICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8
ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJl
bCBmb3I9IlVSTCIgY2xhc3M9Ik1hbmRhdG9yeSI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bh
bj5bJSBUcmFuc2xhdGUoIlVSTCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAg
ICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
aW5wdXQgaWQ9IlVSTCIgY2xhc3M9Ilc1MHBjIFZhbGlkYXRlX1JlcXVpcmVkIiB0eXBlPSJ0ZXh0
IiBtYXhsZW5ndGg9IjUwMCIgdmFsdWU9IlslIERhdGEuVVJMIHwgaHRtbCAlXSIgbmFtZT0iVVJM
Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJVUkxFcnJvciIgY2xhc3M9
IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1
aXJlZCIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxk
aXYgaWQ9IlVSTFNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUg
VHJhbnNsYXRlKERhdGEuVVJMU2VydmVyRXJyb3JNZXNzYWdlKSB8IGh0bWwgJV08L3A+PC9kaXY+
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJUaGlzIGlzIHRo
ZSBBUEkgZW5kcG9pbnQgVVJMLiIpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDxici8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRl
KCJFeGFtcGxlIikgfCBodG1sICVdOiBodHRwOi8vc29tZS5leGFtcGxlLmNvbS9hcGkvdjAvdGlj
a2V0czwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAg
ICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNs
ZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlVzZXIiPlsl
IFRyYW5zbGF0ZSgiVXNlciIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAg
ICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5w
dXQgaWQ9IlVzZXIiIGNsYXNzPSJXNTBwYyIgdHlwZT0idGV4dCIgbWF4bGVuZ3RoPSI1MDAiIHZh
bHVlPSJbJSBEYXRhLlVzZXIgfCBodG1sICVdIiBuYW1lPSJVc2VyIi8+CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJUaGlzIGlzIHRoZSBBUEkgdXNlci4gTmVl
ZGVkIHdoZW4gdGhlIEFQSSBpcyBhdmFpbGFibGUgb25seSBmb3IgYXV0aGVudGljYXRlZCB1c2Vy
cy4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAg
ICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9
IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlBhc3N3
b3JkL1Rva2VuIj5bJSBUcmFuc2xhdGUoIlBhc3N3b3JkL1Rva2VuIikgfCBodG1sICVdOjwvbGFi
ZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iUGFzc3dvcmRUb2tlbiIgY2xhc3M9Ilc1MHBj
IiB0eXBlPSJ0ZXh0IiBtYXhsZW5ndGg9IjUwMCIgdmFsdWU9IlslIERhdGEuUGFzc3dvcmRUb2tl
biB8IGh0bWwgJV0iIG5hbWU9IlBhc3N3b3JkVG9rZW4iLz4KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlRoaXMgaXMgdGhlIHBhc3N3b3JkIGZvciB0aGUgQVBJ
IHVzZXIuIE5lZWRlZCB3aGVuIHRoZSBBUEkgaXMgYXZhaWxhYmxlIG9ubHkgZm9yIGF1dGhlbnRp
Y2F0ZWQgdXNlcnMuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+
CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8
ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwg
Zm9yPSJKU09OUGF0aEtleSIgY2xhc3M9Ik1hbmRhdG9yeSI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+
Kjwvc3Bhbj5bJSBUcmFuc2xhdGUoIkpTT05QYXRoIChLZXkpIikgfCBodG1sICVdOjwvbGFiZWw+
CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iSlNPTlBhdGhLZXkiIGNsYXNzPSJXNTBwYyBWYWxp
ZGF0ZV9SZXF1aXJlZCIgdHlwZT0idGV4dCIgbWF4bGVuZ3RoPSI1MDAiIHZhbHVlPSJbJSBEYXRh
LkpTT05QYXRoS2V5IHwgaHRtbCAlXSIgbmFtZT0iSlNPTlBhdGhLZXkiLz4KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkpTT05QYXRoS2V5RXJyb3IiIGNsYXNzPSJUb29sdGlw
RXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQiKSB8
IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJK
U09OUGF0aEtleVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUg
VHJhbnNsYXRlKERhdGEuSlNPTlBhdGhLZXlTZXJ2ZXJFcnJvck1lc3NhZ2UpIHwgaHRtbCAlXTwv
cD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxh
bmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlRo
aXMgaXMgdGhlIEpTT05QYXRoIGZvciB0aGUga2V5LiIpIHwgaHRtbCAlXQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDxici8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WyUgVHJhbnNsYXRlKCJFeGFtcGxlIikgfCBodG1sICVdOiAvaGl0cy90aWNrZXRzLyovdGlja2V0
X2lkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAg
ICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9k
aXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJKU09OUGF0aFZhbHVlIj5b
JSBUcmFuc2xhdGUoIkpTT05QYXRoIChWYWx1ZSkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAg
ICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPGlucHV0IGlkPSJKU09OUGF0aFZhbHVlIiBjbGFzcz0iVzUwcGMiIHR5cGU9InRl
eHQiIG1heGxlbmd0aD0iNTAwIiB2YWx1ZT0iWyUgRGF0YS5KU09OUGF0aFZhbHVlIHwgaHRtbCAl
XSIgbmFtZT0iSlNPTlBhdGhWYWx1ZSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAg
Y2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFslIFRyYW5zbGF0ZSgiVGhpcyBpcyB0aGUgSlNPTlBhdGggZm9yIHRoZSB2YWx1ZS4gT25seSBu
ZWVkZWQgaWYga2V5IGFuZCB2YWx1ZSBhcmUgZGlzdGluY3QuIikgfCBodG1sICVdCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPGJyLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBbJSBUcmFuc2xhdGUoIkV4YW1wbGUiKSB8IGh0bWwgJV06IC9oaXRzL3RpY2tldHMvKi90
aWNrZXRfbnVtYmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAg
ICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJD
bGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJSZXF1ZXN0
Ym9keSI+WyUgVHJhbnNsYXRlKCJSZXF1ZXN0Ym9keSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAg
ICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8dGV4dGFyZWEgaWQ9IlJlcXVlc3Rib2R5IiBjbGFzcz0iVzUwcGMiIG5hbWU9
IlJlcXVlc3Rib2R5IiByb3dzPSIzIiBjb2xzPSI4MCI+WyUgRGF0YS5SZXF1ZXN0Ym9keSB8IGh0
bWwgJV08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZp
ZWxkRXhwbGFuYXRpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5z
bGF0ZSgiU29tZXRpbWVzIHlvdSBuZWVkIGEgcGF5bG9hZCB0byBzZW5kIHdpdGggdGhlIHJlcXVl
c3QiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIvPgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiRXhhbXBsZSIpIHwgaHRt
bCAlXTogeyJxdWVyeSI6eyJkaXN0IjoidGVzdCJ9fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAg
ICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAg
ICAgICAgIDxsYWJlbCBmb3I9IkhUVFBNZXRob2QiPlslIFRyYW5zbGF0ZSgiSFRUUCBNZXRob2Qi
KSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0i
RmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5IVFRQTWV0aG9kU2Vs
ZWN0ICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAg
ICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8
bGFiZWw+WyUgVHJhbnNsYXRlKCJSZXF1ZXN0IFBhcmFtZXRlcnMiKSB8IGh0bWwgJV06PC9sYWJl
bD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQgUGFyYW1JbnNlcnQi
PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0i
UGFyYW1Db3VudGVyIiB2YWx1ZT0iWyUgRGF0YS5QYXJhbUNvdW50ZXIgfCBodG1sICVdIiBpZD0i
UGFyYW1Db3VudGVyIiBjbGFzcz0iUGFyYW1Db3VudGVyIiAvPgpbJSBSZW5kZXJCbG9ja1N0YXJ0
KCJQYXJhbVJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJQ
YXJhbVJvdyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJN
YW5kYXRvcnkiIGZvcj0iS2V5X1slIERhdGEuUGFyYW1Db3VudGVyIHwgaHRtbCAlXSI+PHNwYW4g
Y2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj5bJSBUcmFuc2xhdGUoIktleSIpIHwgaHRtbCAlXTo8L2xh
YmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJLZXlfWyUg
RGF0YS5QYXJhbUNvdW50ZXIgfCBodG1sICVdIiBpZD0iS2V5X1slIERhdGEuUGFyYW1Db3VudGVy
IHwgaHRtbCAlXSIgY2xhc3M9IkRlZmF1bHRQYXJhbUtleUl0ZW0gVmFsaWRhdGVfUmVxdWlyZWQg
VzIwcGMgWyUgRGF0YS5LZXlFcnJvciB8IGh0bWwgJV0iIHR5cGU9InRleHQiIG1heGxlbmd0aD0i
MTAwIiB2YWx1ZT0iWyUgRGF0YS5LZXkgfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPGRpdiBpZD0iS2V5X1slIERhdGEuUGFyYW1Db3VudGVyIHwgaHRtbCAlXUVy
cm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZp
ZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA8ZGl2IGlkPSJLZXlfWyUgRGF0YS5QYXJhbUNvdW50ZXIgfCBodG1sICVd
U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUo
RGF0YS5LZXlFcnJvclN0cmcpIHwgaHRtbCAlXTwvcD48L2Rpdj4KCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iUGFyYW1fWyUgRGF0
YS5QYXJhbUNvdW50ZXIgfCBodG1sICVdIj48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPlsl
IFRyYW5zbGF0ZSgiUGFyYW0iKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0iUGFyYW1fWyUgRGF0YS5QYXJhbUNvdW50ZXIgfCBo
dG1sICVdIiBpZD0iUGFyYW1fWyUgRGF0YS5QYXJhbUNvdW50ZXIgfCBodG1sICVdIiBjbGFzcz0i
RGVmYXVsdFBhcmFtSXRlbSBWYWxpZGF0ZV9SZXF1aXJlZCBXMjBwYyBbJSBEYXRhLlBhcmFtRXJy
b3IgfCBodG1sICVdIiB0eXBlPSJ0ZXh0IiBtYXhsZW5ndGg9IjEwMCIgdmFsdWU9IlslIERhdGEu
UGFyYW0gfCBodG1sICVdIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBp
ZD0iUGFyYW1fWyUgRGF0YS5QYXJhbUNvdW50ZXIgfCBodG1sICVdRXJyb3IiIGNsYXNzPSJUb29s
dGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQu
IikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxk
aXYgaWQ9IlBhcmFtX1slIERhdGEuUGFyYW1Db3VudGVyIHwgaHRtbCAlXVNlcnZlckVycm9yIiBj
bGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlz
IHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPGEgaHJlZj0iIyIgaWQ9IlJlbW92ZVBhcmFtX1slIERhdGEuUGFyYW1Db3VudGVy
IHwgaHRtbCAlXSIgY2xhc3M9IlJlbW92ZUJ1dHRvbiBQYXJhbVJlbW92ZSI+PGkgY2xhc3M9ImZh
IGZhLW1pbnVzLXNxdWFyZS1vIj48L2k+PHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRy
YW5zbGF0ZSgiUmVtb3ZlIHBhcmFtIikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTcGFjaW5nVG9wTWluaSIgPjwvZGl2Pgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJQYXJh
bVJvdyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlBhcmFtVGVtcGxhdGUiKSAlXQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUGFyYW1UZW1wbGF0ZSBIaWRkZW4iPgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iTWFuZGF0b3J5IiBm
b3I9IktleSI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj5bJSBUcmFuc2xhdGUoIktleSIp
IHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1
dCBuYW1lPSJLZXlfWyUgRGF0YS5QYXJhbUNvdW50ZXIgfCBodG1sICVdIiBpZD0iS2V5IiBjbGFz
cz0iRGVmYXVsdFBhcmFtS2V5SXRlbSBXMjBwYyIgdHlwZT0idGV4dCIgbWF4bGVuZ3RoPSIxMDAi
IHZhbHVlPSJbJSBEYXRhLktleSB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA8ZGl2IGlkPSJLZXlFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxw
PlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9k
aXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iS2V5U2VydmVyRXJy
b3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoRGF0YS5LZXlF
cnJvclN0cmcpIHwgaHRtbCAlXTwvcD48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iUGFyYW0iPjxzcGFuIGNsYXNzPSJN
YXJrZXIiPio8L3NwYW4+WyUgVHJhbnNsYXRlKCJQYXJhbSIpIHwgaHRtbCAlXTo8L2xhYmVsPgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJQYXJhbV9bJSBEYXRh
LlBhcmFtQ291bnRlciB8IGh0bWwgJV0iIGlkPSJQYXJhbSIgY2xhc3M9IkRlZmF1bHRQYXJhbUl0
ZW0gVzIwcGMiIHR5cGU9InRleHQiIG1heGxlbmd0aD0iMTAwIiB2YWx1ZT0iWyUgRGF0YS5QYXJh
bSB8IGh0bWwgJV0iLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJQ
YXJhbUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJU
aGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJQYXJhbVNlcnZlckVycm9yIiBjbGFzcz0iVG9v
bHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVk
LiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PGEgaHJlZj0iIyIgaWQ9IlJlbW92ZVBhcmFtX1slIERhdGEuUGFyYW1Db3VudGVyIHwgaHRtbCAl
XSIgY2xhc3M9IlJlbW92ZUJ1dHRvbiBQYXJhbVJlbW92ZSI+PGkgY2xhc3M9ImZhIGZhLW1pbnVz
LXNxdWFyZS1vIj48L2k+PHNwYW4gY2xhc3M9IkludmlzaWJsZVRleHQiPlslIFRyYW5zbGF0ZSgi
UmVtb3ZlIHBhcmFtIikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8ZGl2IGNsYXNzPSJTcGFjaW5nVG9wTWluaSIgPjwvZGl2PgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJQYXJhbVRlbXBsYXRl
IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5h
bWU9IkRlbGV0ZWRQYXJhbSIgdmFsdWU9IlslIERhdGEuRGVsZXRlZFN0cmluZyB8IGh0bWwgJV0i
IGlkPSJEZWxldGVkUGFyYW0iIGNsYXNzPSJEZWxldGVkUGFyYW0iIC8+CiAgICAgICAgICAgICAg
ICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVh
ciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJBZGRQYXJhbSI+
WyUgVHJhbnNsYXRlKCJBZGQgcGFyYW0iKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAg
ICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPGEgaHJlZj0iIyIgaWQ9IkFkZFBhcmFtIiBjbGFzcz0iQWRkQnV0dG9uIj48aSBjbGFzcz0i
ZmEgZmEtcGx1cy1zcXVhcmUtbyI+PC9pPjxzcGFuIGNsYXNzPSJJbnZpc2libGVUZXh0Ij5bJSBU
cmFuc2xhdGUoIkFkZCBQYXJhbSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAg
ICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVh
ciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJQb3NzaWJsZU5v
bmUiPlslIFRyYW5zbGF0ZSgiUG9zc2libGVOb25lIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAg
ICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFslIERhdGEuUG9zc2libGVOb25lU2VsZWN0ICVdCiAgICAgICAgICAgICAgICAg
ICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+
PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJUVExDYWNoZSI+WyUg
VHJhbnNsYXRlKCJUVEwgKENhY2hlKSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAg
ICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8aW5wdXQgaWQ9IlRUTENhY2hlIiBjbGFzcz0iVzUwcGMiIHR5cGU9InRleHQiIG1heGxlbmd0
aD0iNTAwIiB2YWx1ZT0iWyUgRGF0YS5UVExDYWNoZSB8IGh0bWwgJV0iIG5hbWU9IlRUTENhY2hl
Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlv
biI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJNaW51dGVz
IHRoZSBmb3VuZCBkYXRhIHNob3VsZCBiZSBjYWNoZWQiKSB8IGh0bWwgJV0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAg
ICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAg
ICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkxpbmsiPlslIFRyYW5zbGF0ZSgiU2hvdyBsaW5rIikg
fCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZp
ZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iTGluayIgY2xhc3M9
Ilc1MHBjIiB0eXBlPSJ0ZXh0IiBtYXhsZW5ndGg9IjUwMCIgdmFsdWU9IlslIERhdGEuTGluayB8
IGh0bWwgJV0iIG5hbWU9IkxpbmsiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNs
YXNzPSJGaWVsZEV4cGxhbmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBb
JSBUcmFuc2xhdGUoIkhlcmUgeW91IGNhbiBzcGVjaWZ5IGFuIG9wdGlvbmFsIEhUVFAgbGluayBm
b3IgdGhlIGZpZWxkIHZhbHVlIGluIE92ZXJ2aWV3cyBhbmQgWm9vbSBzY3JlZW5zLiIpIHwgaHRt
bCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxici8+CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJFeGFtcGxlIikgfCBodG1sICVdOiBodHRw
Oi8vc29tZS5leGFtcGxlLmNvbS9oYW5kbGU/cXVlcnk9PHNwYW4+Wzwvc3Bhbj4lIERhdGEuRmll
bGQxIHwgdXJpICU8c3Bhbj5dPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9w
PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAg
PGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVs
IGZvcj0iU2VhcmNoRmllbGRTaXplIj5bJSBUcmFuc2xhdGUoIlNlYXJjaGZpZWxkIHNpemUiKSB8
IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmll
bGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJTZWFyY2hGaWVsZFNp
emUiIGNsYXNzPSJXNTBwYyIgdHlwZT0idGV4dCIgbWF4bGVuZ3RoPSI1MDAiIHZhbHVlPSJbJSBE
YXRhLlNlYXJjaEZpZWxkU2l6ZSB8IGh0bWwgJV0iIG5hbWU9IlNlYXJjaEZpZWxkU2l6ZSIvPgog
ICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRp
diBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZv
cj0iR2VuZXJpY0FnZW50UmV0dXJuVW5kZWZPbkVtcHR5Ij5bJSBUcmFuc2xhdGUoIkdlbmVyaWNB
Z2VudCByZXR1cm4gdW5kZWYgb24gZW1wdHkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAg
ICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWyUgRGF0YS5HZW5lcmljQWdlbnRSZXR1cm5VbmRlZk9uRW1wdHlTZWxlY3QgJV0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj4KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIlRvIGF2b2lkIHJlc2V0
dGluZyB0aGUgdGlja2V0IGR5bmFtaWMgZmllbGQgdmlhIGEgR2VuZXJpY0FnZW50IHRoZSBmaWVs
ZCBzaG91bGQgcmV0dXJuIHVuZGVmIGluc3RlYWQgb2YgZW1wdHkgc3RyaW5nIikgfCBodG1sICVd
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAg
IDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+
CgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4K
ICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtl
Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAg
ICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9y
QWN0aW9uIiB2YWx1ZT0iWyUgVHJhbnNsYXRlKCJTdWJtaXQiKSB8IGh0bWwgJV0iPjxzcGFuPlsl
IFRyYW5zbGF0ZSgiU3VibWl0IikgfCBodG1sICVdPC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAg
ICAgICAgICAgIFslIFRyYW5zbGF0ZSgib3IiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAg
ICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWRtaW5EeW5hbWljRmllbGQi
PlslIFRyYW5zbGF0ZSgiQ2FuY2VsIikgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgPC9k
aXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAg
IDwvZmllbGRzZXQ+CiAgICAgICAgPC9mb3JtPgogICAgPC9kaXY+CjwvZGl2PgpbJSBXUkFQUEVS
IEpTT25Eb2N1bWVudENvbXBsZXRlICVdCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4v
LzwhW0NEQVRBWwokKCcuU2hvd1dhcm5pbmcnKS5iaW5kKCdjaGFuZ2Uga2V5dXAnLCBmdW5jdGlv
biAoRXZlbnQpIHsKICAgICQoJ3AuV2FybmluZycpLnJlbW92ZUNsYXNzKCdIaWRkZW4nKTsKfSk7
CgovL2JpbmQgY2xpY2sgZnVuY3Rpb24gdG8gYWRkIGJ1dHRvbgokKCcjQWRkUGFyYW0nKS5iaW5k
KCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgIENvcmUuQWdlbnQuQWRtaW4uRHluYW1pY0ZpZWxk
SnNvbkFQSS5BZGRQYXJhbSgKICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ2ZpZWxkc2V0JykuZmlu
ZCgnLlBhcmFtSW5zZXJ0JykKICAgICk7CiAgICByZXR1cm4gZmFsc2U7Cn0pOwoKLy9iaW5kIGNs
aWNrIGZ1bmN0aW9uIHRvIHJlbW92ZSBidXR0b24KJCgnLlBhcmFtUmVtb3ZlJykuYmluZCgnY2xp
Y2snLCBmdW5jdGlvbiAoKSB7CiAgICBDb3JlLkFnZW50LkFkbWluLkR5bmFtaWNGaWVsZEpzb25B
UEkuUmVtb3ZlUGFyYW0oJCh0aGlzKS5hdHRyKCdpZCcpKTsKICAgIHJldHVybiBmYWxzZTsKfSk7
CgpDb3JlLkFnZW50LkFkbWluLkR5bmFtaWNGaWVsZC5WYWxpZGF0aW9uSW5pdCgpOwovL11dPjwv
c2NyaXB0PgpbJSBFTkQgJV0K
IyAtLQojIEtlcm5lbC9TeXN0ZW0vRHluYW1pY0ZpZWxkL0RyaXZlci9CYXNlSnNvbkFQSS5wbSAt
IER5bmFtaWMgZmllbGQgRHJpdmVyIGZ1bmN0aW9ucwojIENvcHlyaWdodCAoQykgMjAxNSBQZXJs
LVNlcnZpY2VzLmRlLCBodHRwOi8vcGVybC1zZXJ2aWNlcy5kZQojIC0tCiMgVGhpcyBzb2Z0d2Fy
ZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0
aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4g
SWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9y
Zy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6RHluYW1p
Y0ZpZWxkOjpEcml2ZXI6OkJhc2VKc29uQVBJOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoK
dXNlIExpc3Q6OlV0aWwgcXcoZmlyc3QpOwp1c2UgTUlNRTo6QmFzZTY0IHF3KGVuY29kZV9iYXNl
NjQpOwp1c2UgSlNPTjo6UGF0aDsKdXNlIFVSSTo6RXNjYXBlOwoKdXNlIEtlcm5lbDo6U3lzdGVt
OjpWYXJpYWJsZUNoZWNrIHF3KDphbGwpOwoKdXNlIGJhc2UgcXcoS2VybmVsOjpTeXN0ZW06OkR5
bmFtaWNGaWVsZDo6RHJpdmVyOjpCYXNlKTsKCm91ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gcXco
CiAgICBLZXJuZWw6OkNvbmZpZwogICAgS2VybmVsOjpTeXN0ZW06OkRCCiAgICBLZXJuZWw6OlN5
c3RlbTo6RHluYW1pY0ZpZWxkVmFsdWUKICAgIEtlcm5lbDo6U3lzdGVtOjpUaWNrZXQ6OkNvbHVt
bkZpbHRlcgogICAgS2VybmVsOjpTeXN0ZW06OkxvZwogICAgS2VybmVsOjpTeXN0ZW06OldlYlVz
ZXJBZ2VudAogICAgS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdAopOwoKPWhlYWQxIE5BTUUK
Cktlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQ6OkRyaXZlcjo6QmFzZUpzb25BUEkKCgo9aGVh
ZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKc3ViIFZhbHVlR2V0IHsKICAgIG15
ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJERGVmFsdWUgPSAkS2VybmVsOjpPTS0+
R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkVmFsdWUnKS0+VmFsdWVHZXQoCiAgICAg
ICAgRmllbGRJRCAgPT4gJFBhcmFte0R5bmFtaWNGaWVsZENvbmZpZ30tPntJRH0sCiAgICAgICAg
T2JqZWN0SUQgPT4gJFBhcmFte09iamVjdElEfSwKICAgICk7CgogICAgcmV0dXJuIGlmICEkREZW
YWx1ZTsKICAgIHJldHVybiBpZiAhSXNBcnJheVJlZldpdGhEYXRhKCRERlZhbHVlKTsKICAgIHJl
dHVybiBpZiAhSXNIYXNoUmVmV2l0aERhdGEoICRERlZhbHVlLT5bMF0gKTsKCiAgICByZXR1cm4g
JERGVmFsdWUtPlswXS0+e1ZhbHVlVGV4dH07Cn0KCnN1YiBWYWx1ZVNldCB7CiAgICBteSAoICRT
ZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRQb3NzaWJsZVZhbHVlcyA9ICRTZWxmLT5Qb3Nz
aWJsZVZhbHVlc0dldCglUGFyYW0pOwoKICAgICMgY2hlY2sgZm9yIHZhbGlkIHBvc3NpYmxlIHZh
bHVlcyBsaXN0CiAgICBpZiAoICEkUG9zc2libGVWYWx1ZXMtPnsgJFBhcmFte1ZhbHVlfSB9ICkg
ewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAog
ICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAi
TmVlZCBQb3NzaWJsZVZhbHVlcyBpbiBEeW5hbWljRmllbGRDb25maWchIiwKICAgICAgICApOwog
ICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAkU3VjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQo
J0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGRWYWx1ZScpLT5WYWx1ZVNldCgKICAgICAgICBG
aWVsZElEICA9PiAkUGFyYW17RHluYW1pY0ZpZWxkQ29uZmlnfS0+e0lEfSwKICAgICAgICBPYmpl
Y3RJRCA9PiAkUGFyYW17T2JqZWN0SUR9LAogICAgICAgIFZhbHVlICAgID0+IFsKICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgVmFsdWVUZXh0ID0+ICRQYXJhbXtWYWx1ZX0sCiAgICAgICAg
ICAgIH0sCiAgICAgICAgXSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAp
OwoKICAgIHJldHVybiAkU3VjY2VzczsKfQoKc3ViIFZhbHVlVmFsaWRhdGUgewogICAgbXkgKCAk
U2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkU3VjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQo
J0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGRWYWx1ZScpLT5WYWx1ZVZhbGlkYXRlKAogICAg
ICAgIFZhbHVlID0+IHsKICAgICAgICAgICAgVmFsdWVUZXh0ID0+ICRQYXJhbXtWYWx1ZX0sCiAg
ICAgICAgfSwKICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0KICAgICk7CgogICAgcmV0
dXJuICRTdWNjZXNzOwp9CgpzdWIgU2VhcmNoU1FMR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJh
bSApID0gQF87CgogICAgbXkgJU9wZXJhdG9ycyA9ICgKICAgICAgICBFcXVhbHMgICAgICAgICAg
ICA9PiAnPScsCiAgICAgICAgR3JlYXRlclRoYW4gICAgICAgPT4gJz4nLAogICAgICAgIEdyZWF0
ZXJUaGFuRXF1YWxzID0+ICc+PScsCiAgICAgICAgU21hbGxlclRoYW4gICAgICAgPT4gJzwnLAog
ICAgICAgIFNtYWxsZXJUaGFuRXF1YWxzID0+ICc8PScsCiAgICApOwoKICAgICMgZ2V0IGRhdGFi
YXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpT
eXN0ZW06OkRCJyk7CgogICAgaWYgKCAkT3BlcmF0b3JzeyAkUGFyYW17T3BlcmF0b3J9IH0gKSB7
CiAgICAgICAgbXkgJFNRTCA9ICIgJFBhcmFte1RhYmxlQWxpYXN9LnZhbHVlX3RleHQgJE9wZXJh
dG9yc3skUGFyYW17T3BlcmF0b3J9fSAnIjsKICAgICAgICAkU1FMIC49ICREQk9iamVjdC0+UXVv
dGUoICRQYXJhbXtTZWFyY2hUZXJtfSApIC4gIicgIjsKICAgICAgICByZXR1cm4gJFNRTDsKICAg
IH0KCiAgICBpZiAoICRQYXJhbXtPcGVyYXRvcn0gZXEgJ0xpa2UnICkgewoKICAgICAgICBteSAk
U1FMID0gJERCT2JqZWN0LT5RdWVyeUNvbmRpdGlvbigKICAgICAgICAgICAgS2V5ICAgPT4gIiRQ
YXJhbXtUYWJsZUFsaWFzfS52YWx1ZV90ZXh0IiwKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFt
e1NlYXJjaFRlcm19LAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkU1FMOwogICAgfQoKICAg
ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICdQ
cmlvcml0eScgPT4gJ2Vycm9yJywKICAgICAgICAnTWVzc2FnZScgID0+ICJVbnN1cHBvcnRlZCBP
cGVyYXRvciAkUGFyYW17T3BlcmF0b3J9IiwKICAgICk7CgogICAgcmV0dXJuOwp9CgpzdWIgU2Vh
cmNoU1FMT3JkZXJGaWVsZEdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAg
IHJldHVybiAiJFBhcmFte1RhYmxlQWxpYXN9LnZhbHVlX3RleHQiOwp9CgpzdWIgRWRpdEZpZWxk
UmVuZGVyIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyB0YWtlIGNvbmZp
ZyBmcm9tIGZpZWxkIGNvbmZpZwogICAgbXkgJEZpZWxkQ29uZmlnID0gJFBhcmFte0R5bmFtaWNG
aWVsZENvbmZpZ30tPntDb25maWd9OwogICAgbXkgJEZpZWxkTmFtZSAgID0gJ0R5bmFtaWNGaWVs
ZF8nIC4gJFBhcmFte0R5bmFtaWNGaWVsZENvbmZpZ30tPntOYW1lfTsKICAgIG15ICRGaWVsZExh
YmVsICA9ICRQYXJhbXtEeW5hbWljRmllbGRDb25maWd9LT57TGFiZWx9OwoKICAgIG15ICRWYWx1
ZSA9ICRQYXJhbXtWYWx1ZX0gLy8gJyc7CgogICAgIyBjaGVjayBpZiBhIHZhbHVlIGluIGEgdGVt
cGxhdGUgKEdlbmVyaWNBZ2VudCBldGMuKQogICAgIyBpcyBjb25maWd1cmVkIGZvciB0aGlzIGR5
bmFtaWMgZmllbGQKICAgIGlmICgKICAgICAgICBJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte1Rl
bXBsYXRlfSApCiAgICAgICAgJiYgZGVmaW5lZCAkUGFyYW17VGVtcGxhdGV9LT57JEZpZWxkTmFt
ZX0KICAgICAgICApCiAgICB7CiAgICAgICAgJFZhbHVlID0gJFBhcmFte1RlbXBsYXRlfS0+eyRG
aWVsZE5hbWV9OwogICAgfQoKICAgICMgZXh0cmFjdCB0aGUgZHluYW1pYyBmaWVsZCB2YWx1ZSBm
cm9tIHRoZSB3ZWIgcmVxdWVzdAogICAgbXkgJEZpZWxkVmFsdWUgPSAkU2VsZi0+RWRpdEZpZWxk
VmFsdWVHZXQoCiAgICAgICAgJVBhcmFtLAogICAgKTsKCiAgICAjIHNldCB2YWx1ZXMgZnJvbSBQ
YXJhbU9iamVjdCBpZiBwcmVzZW50CiAgICBpZiAoIGRlZmluZWQgJEZpZWxkVmFsdWUgKSB7CiAg
ICAgICAgJFZhbHVlID0gJEZpZWxkVmFsdWU7CiAgICB9CgogICAgIyBjaGVjayBhbmQgc2V0IGNs
YXNzIGlmIG5lY2Vzc2FyeQogICAgbXkgJEZpZWxkQ2xhc3MgPSAnRHluYW1pY0ZpZWxkVGV4dCc7
CiAgICBpZiAoIGRlZmluZWQgJFBhcmFte0NsYXNzfSAmJiAkUGFyYW17Q2xhc3N9IG5lICcnICkg
ewogICAgICAgICRGaWVsZENsYXNzIC49ICcgJyAuICRQYXJhbXtDbGFzc307CiAgICB9CgogICAg
IyBzZXQgZmllbGQgYXMgbWFuZGF0b3J5CiAgICBpZiAoICRQYXJhbXtNYW5kYXRvcnl9ICkgewog
ICAgICAgICRGaWVsZENsYXNzIC49ICcgVmFsaWRhdGVfUmVxdWlyZWQnOwogICAgfQoKICAgICMg
c2V0IGVycm9yIGNzcyBjbGFzcwogICAgaWYgKCAkUGFyYW17U2VydmVyRXJyb3J9ICkgewogICAg
ICAgICRGaWVsZENsYXNzIC49ICcgU2VydmVyRXJyb3InOwogICAgfQoKICAgICMgc2V0IFBvc3Np
YmxlVmFsdWVzLCB1c2UgUG9zc2libGVWYWx1ZXNGaWx0ZXIgaWYgZGVmaW5lZAogICAgbXkgJFBv
c3NpYmxlVmFsdWVzID0gJFNlbGYtPlBvc3NpYmxlVmFsdWVzR2V0KCVQYXJhbSk7ICMkUGFyYW17
UG9zc2libGVWYWx1ZXNGaWx0ZXJ9IC8vICRTZWxmLT5Qb3NzaWJsZVZhbHVlc0dldCglUGFyYW0p
OwoKICAgIG15ICRTaXplID0gMTsKCiAgICAjIFRPRE8gY2hhbmdlIENvbmZpcm1hdGlvbk5lZWRl
ZCBwYXJhbWV0ZXIgbmFtZSB0byBzb21ldGhpbmcgbW9yZSBnZW5lcmljCgogICAgIyB3aGVuIENv
bmZpbWF0aW9uTmVlZGVkIHBhcmFtZXRlciBpcyBwcmVzZW50IChBZG1pbkdlbmVyaWNBZ2VudCkg
dGhlIGZpbGVkIHNob3VsZCBiZSBkaXNwbGF5ZWQKICAgICMgYXMgYW4gb3BlbiBsaXN0LCBiZWNh
dXNlIHlvdSBtaWdodCBub3Qgd2FudCB0byBjaGFuZ2UgdGhlIHZhbHVlLCBvdGhlcndpc2UgYSB2
YWx1ZSB3aWxsIGJlCiAgICAjIHNlbGVjdGVkCiAgICBpZiAoICRQYXJhbXtDb25maXJtYXRpb25O
ZWVkZWR9ICkgewogICAgICAgICRTaXplID0gNTsKICAgIH0KCiAgICBteSAkUG9zc2libGVOb25l
OwogICAgaWYgKCAkRmllbGRDb25maWctPntQb3NzaWJsZU5vbmV9ICkgewogICAgICAgICRQb3Nz
aWJsZU5vbmUgPSAxOwogICAgfQoKICAgIG15ICREYXRhVmFsdWVzID0gJFNlbGYtPkJ1aWxkU2Vs
ZWN0aW9uRGF0YUdldCgKICAgICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJFBhcmFte0R5bmFt
aWNGaWVsZENvbmZpZ30sCiAgICAgICAgUG9zc2libGVWYWx1ZXMgICAgID0+ICRQb3NzaWJsZVZh
bHVlcywKICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgPT4gJFZhbHVlLAogICAgKTsKCiAgICBt
eSAkSFRNTFN0cmluZyA9ICRQYXJhbXtMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAg
ICAgICBEYXRhICAgICAgICAgPT4gJERhdGFWYWx1ZXMgfHwge30sCiAgICAgICAgTmFtZSAgICAg
ICAgID0+ICRGaWVsZE5hbWUsCiAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRWYWx1ZSwKICAgICAg
ICBUcmFuc2xhdGlvbiAgPT4gJEZpZWxkQ29uZmlnLT57VHJhbnNsYXRhYmxlVmFsdWVzfSB8fCAw
LAogICAgICAgIENsYXNzICAgICAgICA9PiAiTW9kZXJuaXplICRGaWVsZENsYXNzIiwKICAgICAg
ICBTaXplICAgICAgICAgPT4gJFNpemUsCiAgICAgICAgSFRNTFF1b3RlICAgID0+IDEsCiAgICAg
ICAgUG9zc2libGVOb25lID0+ICRQb3NzaWJsZU5vbmUsCiAgICAgICAgQXV0b0NvbXBsZXRlID0+
ICdvZmYnLAogICAgKTsKCiAgICBpZiAoICRQYXJhbXtNYW5kYXRvcnl9ICkgewogICAgICAgIG15
ICREaXZJRCA9ICRGaWVsZE5hbWUgLiAnRXJyb3InOwoKICAgICAgICBteSAkRmllbGRSZXF1aXJl
ZE1lc3NhZ2UKICAgICAgICAgICAgPSAkUGFyYW17TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2Jq
ZWN0fS0+VHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpOwoKICAgICAgICAjIGZv
ciBjbGllbnQgc2lkZSB2YWxpZGF0aW9uCiAgICAgICAgJEhUTUxTdHJpbmcgLj0gPDwiRU9GIjsK
CjxkaXYgaWQ9IiREaXZJRCIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgPHA+CiAg
ICAgICAgJEZpZWxkUmVxdWlyZWRNZXNzYWdlCiAgICA8L3A+CjwvZGl2PgpFT0YKICAgIH0KCiAg
ICBpZiAoICRQYXJhbXtTZXJ2ZXJFcnJvcn0gKSB7CgogICAgICAgIG15ICRFcnJvck1lc3NhZ2Ug
PSAkUGFyYW17RXJyb3JNZXNzYWdlfSB8fCAnVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4nOwogICAg
ICAgICRFcnJvck1lc3NhZ2UgPSAkUGFyYW17TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0
fS0+VHJhbnNsYXRlKCRFcnJvck1lc3NhZ2UpOwogICAgICAgIG15ICREaXZJRCA9ICRGaWVsZE5h
bWUgLiAnU2VydmVyRXJyb3InOwoKICAgICAgICAjIGZvciBzZXJ2ZXIgc2lkZSB2YWxpZGF0aW9u
CiAgICAgICAgJEhUTUxTdHJpbmcgLj0gPDwiRU9GIjsKCjxkaXYgaWQ9IiREaXZJRCIgY2xhc3M9
IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgPHA+CiAgICAgICAgJEVycm9yTWVzc2FnZQogICAg
PC9wPgo8L2Rpdj4KRU9GCiAgICB9CgogICAgaWYgKCAkUGFyYW17QUpBWFVwZGF0ZX0gKSB7Cgog
ICAgICAgIG15ICRGaWVsZFNlbGVjdG9yID0gJyMnIC4gJEZpZWxkTmFtZTsKCiAgICAgICAgbXkg
JEZpZWxkc1RvVXBkYXRlID0gJyc7CiAgICAgICAgaWYgKCBJc0FycmF5UmVmV2l0aERhdGEoICRQ
YXJhbXtVcGRhdGFibGVGaWVsZHN9ICkgKSB7CgogICAgICAgICAgICAjIFJlbW92ZSBjdXJyZW50
IGZpZWxkIGZyb20gdXBkYXRhYmxlIGZpZWxkcyBsaXN0CiAgICAgICAgICAgIG15IEBGaWVsZHNU
b1VwZGF0ZSA9IGdyZXAgeyAkXyBuZSAkRmllbGROYW1lIH0gQHsgJFBhcmFte1VwZGF0YWJsZUZp
ZWxkc30gfTsKCiAgICAgICAgICAgICMgcXVvdGUgYWxsIGZpZWxkcywgcHV0IGNvbW1hcyBpbiBi
ZXR3ZWVuIHRoZW0KICAgICAgICAgICAgJEZpZWxkc1RvVXBkYXRlID0gam9pbiggJywgJywgbWFw
IHsiJyRfJyJ9IEBGaWVsZHNUb1VwZGF0ZSApOwogICAgICAgIH0KCiAgICAgICAgIyBhZGQganMg
dG8gY2FsbCBGb3JtVXBkYXRlKCkKICAgICAgICAkUGFyYW17TGF5b3V0T2JqZWN0fS0+QWRkSlNP
bkRvY3VtZW50Q29tcGxldGUoIENvZGUgPT4gPDwiRU9GIik7ClwkKCckRmllbGRTZWxlY3Rvcicp
LmJpbmQoJ2NoYW5nZScsIGZ1bmN0aW9uIChFdmVudCkgewogICAgQ29yZS5BSkFYLkZvcm1VcGRh
dGUoXCQodGhpcykucGFyZW50cygnZm9ybScpLCAnQUpBWFVwZGF0ZScsICckRmllbGROYW1lJywg
WyAkRmllbGRzVG9VcGRhdGUgXSk7Cn0pOwpFT0YKICAgIH0KCiAgICAjIGNhbGwgRWRpdExhYmVs
UmVuZGVyIG9uIHRoZSBjb21tb24gRHJpdmVyCiAgICBteSAkTGFiZWxTdHJpbmcgPSAkU2VsZi0+
RWRpdExhYmVsUmVuZGVyKAogICAgICAgICVQYXJhbSwKICAgICAgICBNYW5kYXRvcnkgPT4gJFBh
cmFte01hbmRhdG9yeX0gfHwgJzAnLAogICAgICAgIEZpZWxkTmFtZSA9PiAkRmllbGROYW1lLAog
ICAgKTsKCiAgICBteSAkRGF0YSA9IHsKICAgICAgICBGaWVsZCA9PiAkSFRNTFN0cmluZywKICAg
ICAgICBMYWJlbCA9PiAkTGFiZWxTdHJpbmcsCiAgICB9OwoKICAgIHJldHVybiAkRGF0YTsKfQoK
c3ViIEVkaXRGaWVsZFZhbHVlR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87Cgog
ICAgbXkgJEZpZWxkTmFtZSA9ICdEeW5hbWljRmllbGRfJyAuICRQYXJhbXtEeW5hbWljRmllbGRD
b25maWd9LT57TmFtZX07CgogICAgbXkgJFZhbHVlOwoKICAgICMgY2hlY2sgaWYgdGhlcmUgaXMg
YSBUZW1wbGF0ZSBhbmQgcmV0cmlldmUgdGhlIGR5bmFtaWMgZmllbGQgdmFsdWUgZnJvbSB0aGVy
ZQogICAgaWYgKCBJc0hhc2hSZWZXaXRoRGF0YSggJFBhcmFte1RlbXBsYXRlfSApICkgewogICAg
ICAgICRWYWx1ZSA9ICRQYXJhbXtUZW1wbGF0ZX0tPnskRmllbGROYW1lfTsKICAgIH0KCiAgICAj
IG90aGVyd2lzZSBnZXQgZHluYW1pYyBmaWVsZCB2YWx1ZSBmcm9tIHRoZSB3ZWIgcmVxdWVzdAog
ICAgZWxzaWYgKAogICAgICAgIGRlZmluZWQgJFBhcmFte1BhcmFtT2JqZWN0fQogICAgICAgICYm
IHJlZiAkUGFyYW17UGFyYW1PYmplY3R9IGVxICdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0
JwogICAgICAgICkKICAgIHsKICAgICAgICAkVmFsdWUgPSAkUGFyYW17UGFyYW1PYmplY3R9LT5H
ZXRQYXJhbSggUGFyYW0gPT4gJEZpZWxkTmFtZSApOwogICAgfQoKICAgIGlmICggZGVmaW5lZCAk
UGFyYW17UmV0dXJuVGVtcGxhdGVTdHJ1Y3R1cmV9ICYmICRQYXJhbXtSZXR1cm5UZW1wbGF0ZVN0
cnVjdHVyZX0gZXEgMSApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICAkRmllbGROYW1l
ID0+ICRWYWx1ZSwKICAgICAgICB9OwogICAgfQoKICAgIG15ICgkUGFja2FnZSk7CgogICAgZm9y
IG15ICRDYWxsZXJJbmRleCAoIDAgLi4gMiApIHsKICAgICAgICAoJFBhY2thZ2UpID0gY2FsbGVy
KCRDYWxsZXJJbmRleCk7CiAgICAgICAgbGFzdCBpZiAhJFBhY2thZ2U7CiAgICAgICAgbGFzdCBp
ZiAkUGFja2FnZSA9fiBte0dlbmVyaWNBZ2VudH07CiAgICB9CgogICAgaWYgKAogICAgICAgICRQ
YXJhbXtEeW5hbWljRmllbGRDb25maWd9LT57Q29uZmlnfS0+e0dlbmVyaWNBZ2VudFJldHVyblVu
ZGVmT25FbXB0eX0KICAgICAgICAmJiAkUGFja2FnZQogICAgICAgICYmICRQYWNrYWdlIGVxICdL
ZXJuZWw6OlN5c3RlbTo6R2VuZXJpY0FnZW50JwogICAgICAgICYmICFsZW5ndGggJFZhbHVlCiAg
ICApIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBmb3IgdGhpcyBmaWVsZCB0aGUgbm9y
bWFsIHJldHVybiBhbiB0aGUgUmV0dXJuVmFsdWVTdHJ1Y3R1cmUgYXJlIHRoZSBzYW1lCiAgICBy
ZXR1cm4gJFZhbHVlOwp9CgpzdWIgRWRpdEZpZWxkVmFsdWVWYWxpZGF0ZSB7CiAgICBteSAoICRT
ZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHRoZSBmaWVsZCB2YWx1ZSBmcm9tIHRoZSBo
dHRwIHJlcXVlc3QKICAgIG15ICRWYWx1ZSA9ICRTZWxmLT5FZGl0RmllbGRWYWx1ZUdldCgKICAg
ICAgICBEeW5hbWljRmllbGRDb25maWcgPT4gJFBhcmFte0R5bmFtaWNGaWVsZENvbmZpZ30sCiAg
ICAgICAgUGFyYW1PYmplY3QgICAgICAgID0+ICRQYXJhbXtQYXJhbU9iamVjdH0sCgogICAgICAg
ICMgbm90IG5lY2Vzc2FyeSBmb3IgdGhpcyBEcml2ZXIgYnV0IHBsYWNlIGl0IGZvciBjb25zaXN0
ZW5jeSByZWFzb25zCiAgICAgICAgUmV0dXJuVmFsdWVTdHJ1Y3R1cmUgPT4gMSwKICAgICk7Cgog
ICAgbXkgJFNlcnZlckVycm9yOwogICAgbXkgJEVycm9yTWVzc2FnZTsKCiAgICAjIHBlcmZvcm0g
bmVjZXNzYXJ5IHZhbGlkYXRpb25zCiAgICBpZiAoICRQYXJhbXtNYW5kYXRvcnl9ICYmICEkVmFs
dWUgKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgU2VydmVyRXJyb3IgPT4gMSwKICAg
ICAgICB9OwogICAgfQogICAgZWxzZSB7CgogICAgICAgICMgZ2V0IHBvc3NpYmxlIHZhbHVlcyBs
aXN0CiAgICAgICAgbXkgJFBvc3NpYmxlVmFsdWVzID0gJFBhcmFte1Bvc3NpYmxlVmFsdWVzRmls
dGVyfSAvLyAkU2VsZi0+UG9zc2libGVWYWx1ZXNHZXQoJVBhcmFtKTsKCiAgICAgICAgIyB2YWxp
ZGF0ZSBpZiB2YWx1ZSBpcyBpbiBwb3NzaWJsZSB2YWx1ZXMgbGlzdCAoYnV0IGxldCBwYXNzIGVt
cHR5IHZhbHVlcykKICAgICAgICBpZiAoICRWYWx1ZSAmJiAhJFBvc3NpYmxlVmFsdWVzLT57JFZh
bHVlfSApIHsKICAgICAgICAgICAgJFNlcnZlckVycm9yICA9IDE7CiAgICAgICAgICAgICRFcnJv
ck1lc3NhZ2UgPSAnVGhlIGZpZWxkIGNvbnRlbnQgaXMgaW52YWxpZCc7CiAgICAgICAgfQogICAg
fQoKICAgICMgY3JlYXRlIHJlc3VsdGluZyBzdHJ1Y3R1cmUKICAgIG15ICRSZXN1bHQgPSB7CiAg
ICAgICAgU2VydmVyRXJyb3IgID0+ICRTZXJ2ZXJFcnJvciwKICAgICAgICBFcnJvck1lc3NhZ2Ug
PT4gJEVycm9yTWVzc2FnZSwKICAgIH07CgogICAgcmV0dXJuICRSZXN1bHQ7Cn0KCnN1YiBEaXNw
bGF5VmFsdWVSZW5kZXIgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHNl
dCBIVE1MT3VwdXQgYXMgZGVmYXVsdCBpZiBub3Qgc3BlY2lmaWVkCiAgICBpZiAoICFkZWZpbmVk
ICRQYXJhbXtIVE1MT3V0cHV0fSApIHsKICAgICAgICAkUGFyYW17SFRNTE91dHB1dH0gPSAxOwog
ICAgfQoKICAgICMgZ2V0IHJhdyBWYWx1ZSBzdHJpbmdzIGZyb20gZmllbGQgdmFsdWUKICAgIG15
ICRWYWx1ZSA9IGRlZmluZWQgJFBhcmFte1ZhbHVlfSA/ICRQYXJhbXtWYWx1ZX0gOiAnJzsKCiAg
ICAjIGdldCByZWFsIHZhbHVlCiAgICBteSAkUG9zc2libGVWYWx1ZXMgPSAkU2VsZi0+UG9zc2li
bGVWYWx1ZXNHZXQoJVBhcmFtKTsKICAgIGlmICggJFBvc3NpYmxlVmFsdWVzLT57JFZhbHVlfSAp
IHsKCiAgICAgICAgIyBnZXQgcmVhZGVhYmxlIHZhbHVlCiAgICAgICAgJFZhbHVlID0gJFBvc3Np
YmxlVmFsdWVzLT57JFZhbHVlfTsKICAgIH0KCiAgICAjIGNoZWNrIGlzIG5lZWRlZCB0byB0cmFu
c2xhdGUgdmFsdWVzCiAgICBpZiAoICRQYXJhbXtEeW5hbWljRmllbGRDb25maWd9LT57Q29uZmln
fS0+e1RyYW5zbGF0YWJsZVZhbHVlc30gKSB7CgogICAgICAgICMgdHJhbnNsYXRlIHZhbHVlCiAg
ICAgICAgJFZhbHVlID0gJFBhcmFte0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPlRy
YW5zbGF0ZSgkVmFsdWUpOwogICAgfQoKICAgICMgc2V0IHRpdGxlIGFzIHZhbHVlIGFmdGVyIHVw
ZGF0ZSBhbmQgYmVmb3JlIGxpbWl0CiAgICBteSAkVGl0bGUgPSAkVmFsdWU7CgogICAgIyBIVE1M
T3VwdXQgdHJhbnNmb3JtYXRpb25zCiAgICBpZiAoICRQYXJhbXtIVE1MT3V0cHV0fSApIHsKICAg
ICAgICAkVmFsdWUgPSAkUGFyYW17TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCgKICAgICAgICAg
ICAgVGV4dCA9PiAkVmFsdWUsCiAgICAgICAgICAgIE1heCA9PiAkUGFyYW17VmFsdWVNYXhDaGFy
c30gfHwgJycsCiAgICAgICAgKTsKCiAgICAgICAgJFRpdGxlID0gJFBhcmFte0xheW91dE9iamVj
dH0tPkFzY2lpMkh0bWwoCiAgICAgICAgICAgIFRleHQgPT4gJFRpdGxlLAogICAgICAgICAgICBN
YXggPT4gJFBhcmFte1RpdGxlTWF4Q2hhcnN9IHx8ICcnLAogICAgICAgICk7CiAgICB9CiAgICBl
bHNlIHsKICAgICAgICBpZiAoICRQYXJhbXtWYWx1ZU1heENoYXJzfSAmJiBsZW5ndGgoJFZhbHVl
KSA+ICRQYXJhbXtWYWx1ZU1heENoYXJzfSApIHsKICAgICAgICAgICAgJFZhbHVlID0gc3Vic3Ry
KCAkVmFsdWUsIDAsICRQYXJhbXtWYWx1ZU1heENoYXJzfSApIC4gJy4uLic7CiAgICAgICAgfQog
ICAgICAgIGlmICggJFBhcmFte1RpdGxlTWF4Q2hhcnN9ICYmIGxlbmd0aCgkVGl0bGUpID4gJFBh
cmFte1RpdGxlTWF4Q2hhcnN9ICkgewogICAgICAgICAgICAkVGl0bGUgPSBzdWJzdHIoICRUaXRs
ZSwgMCwgJFBhcmFte1RpdGxlTWF4Q2hhcnN9ICkgLiAnLi4uJzsKICAgICAgICB9CiAgICB9Cgog
ICAgIyBzZXQgZmllbGQgbGluayBmb3JtIGNvbmZpZwogICAgbXkgJExpbmsgPSAkUGFyYW17RHlu
YW1pY0ZpZWxkQ29uZmlnfS0+e0NvbmZpZ30tPntMaW5rfSB8fCAnJzsKCiAgICBteSAkRGF0YSA9
IHsKICAgICAgICBWYWx1ZSA9PiAkVmFsdWUsCiAgICAgICAgVGl0bGUgPT4gJFRpdGxlLAogICAg
ICAgIExpbmsgID0+ICRMaW5rLAogICAgfTsKCiAgICByZXR1cm4gJERhdGE7Cn0KCnN1YiBTZWFy
Y2hGaWVsZFJlbmRlciB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgdGFr
ZSBjb25maWcgZnJvbSBmaWVsZCBjb25maWcKICAgIG15ICRGaWVsZENvbmZpZyA9ICRQYXJhbXtE
eW5hbWljRmllbGRDb25maWd9LT57Q29uZmlnfTsKICAgIG15ICRGaWVsZE5hbWUgICA9ICdTZWFy
Y2hfRHluYW1pY0ZpZWxkXycgLiAkUGFyYW17RHluYW1pY0ZpZWxkQ29uZmlnfS0+e05hbWV9Owog
ICAgbXkgJEZpZWxkTGFiZWwgID0gJFBhcmFte0R5bmFtaWNGaWVsZENvbmZpZ30tPntMYWJlbH07
CgogICAgbXkgJFZhbHVlOwoKICAgIG15IEBEZWZhdWx0VmFsdWU7CgogICAgaWYgKCBkZWZpbmVk
ICRQYXJhbXtEZWZhdWx0VmFsdWV9ICkgewogICAgICAgIEBEZWZhdWx0VmFsdWUgPSBzcGxpdCAv
Oy8sICRQYXJhbXtEZWZhdWx0VmFsdWV9OwogICAgfQoKICAgICMgc2V0IHRoZSBmaWVsZCB2YWx1
ZQogICAgaWYgKEBEZWZhdWx0VmFsdWUpIHsKICAgICAgICAkVmFsdWUgPSBcQERlZmF1bHRWYWx1
ZTsKICAgIH0KCiAgICAjIGdldCB0aGUgZmllbGQgdmFsdWUsIHRoaXMgZnVuY3Rpb24gaXMgYWx3
YXlzIGNhbGxlZCBhZnRlciB0aGUgcHJvZmlsZSBpcyBsb2FkZWQKICAgIG15ICRGaWVsZFZhbHVl
cyA9ICRTZWxmLT5TZWFyY2hGaWVsZFZhbHVlR2V0KAogICAgICAgICVQYXJhbSwKICAgICk7Cgog
ICAgaWYgKCBkZWZpbmVkICRGaWVsZFZhbHVlcyApIHsKICAgICAgICAkVmFsdWUgPSAkRmllbGRW
YWx1ZXM7CiAgICB9CgogICAgIyBjaGVjayBhbmQgc2V0IGNsYXNzIGlmIG5lY2Vzc2FyeQogICAg
bXkgJEZpZWxkQ2xhc3MgPSAnRHluYW1pY0ZpZWxkTXVsdGlTZWxlY3QnOwoKICAgICMgc2V0IFBv
c3NpYmxlVmFsdWVzCiAgICBteSAkU2VsZWN0aW9uRGF0YSA9ICRTZWxmLT5Qb3NzaWJsZVZhbHVl
c0dldCglUGFyYW0pOwoKICAgICMgZ2V0IGhpc3RvcmljYWwgdmFsdWVzIGZyb20gZGF0YWJhc2UK
ICAgIG15ICRIaXN0b3JpY2FsVmFsdWVzID0gJFNlbGYtPkhpc3RvcmljYWxWYWx1ZXNHZXQoJVBh
cmFtKTsKCiAgICAjIGFkZCBoaXN0b3JpYyB2YWx1ZXMgdG8gY3VycmVudCB2YWx1ZXMgKGlmIHRo
ZXkgZG9uJ3QgZXhpc3QgYW55bW9yZSkKICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoJEhpc3Rv
cmljYWxWYWx1ZXMpICkgewogICAgICAgIGZvciBteSAkS2V5ICggc29ydCBrZXlzICV7JEhpc3Rv
cmljYWxWYWx1ZXN9ICkgewogICAgICAgICAgICBpZiAoICEkU2VsZWN0aW9uRGF0YS0+eyRLZXl9
ICkgewogICAgICAgICAgICAgICAgJFNlbGVjdGlvbkRhdGEtPnskS2V5fSA9ICRIaXN0b3JpY2Fs
VmFsdWVzLT57JEtleX0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIHVzZSBQ
b3NzaWJsZVZhbHVlc0ZpbHRlciBpZiBkZWZpbmVkCiAgICAkU2VsZWN0aW9uRGF0YSA9ICRQYXJh
bXtQb3NzaWJsZVZhbHVlc0ZpbHRlcn0gLy8gJFNlbGVjdGlvbkRhdGE7CgogICAgbXkgJEhUTUxT
dHJpbmcgPSAkUGFyYW17TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0
YSAgICAgICAgID0+ICRTZWxlY3Rpb25EYXRhLAogICAgICAgIE5hbWUgICAgICAgICA9PiAkRmll
bGROYW1lLAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkVmFsdWUsCiAgICAgICAgVHJhbnNsYXRp
b24gID0+ICRGaWVsZENvbmZpZy0+e1RyYW5zbGF0YWJsZVZhbHVlc30gfHwgMCwKICAgICAgICBD
bGFzcyAgICAgICAgPT4gJEZpZWxkQ2xhc3MsCiAgICAgICAgTXVsdGlwbGUgICAgID0+IDEsCiAg
ICAgICAgSFRNTFF1b3RlICAgID0+IDEsCiAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAg
ICAgU2l6ZSAgICAgICAgID0+ICRGaWVsZENvbmZpZy0+e1NlYXJjaEZpZWxkU2l6ZX0gfHwgNSwK
ICAgICk7CgogICAgIyBjYWxsIEVkaXRMYWJlbFJlbmRlciBvbiB0aGUgY29tbW9uIERyaXZlcgog
ICAgbXkgJExhYmVsU3RyaW5nID0gJFNlbGYtPkVkaXRMYWJlbFJlbmRlcigKICAgICAgICAlUGFy
YW0sCiAgICAgICAgRmllbGROYW1lID0+ICRGaWVsZE5hbWUsCiAgICApOwoKICAgIG15ICREYXRh
ID0gewogICAgICAgIEZpZWxkID0+ICRIVE1MU3RyaW5nLAogICAgICAgIExhYmVsID0+ICRMYWJl
bFN0cmluZywKICAgIH07CgogICAgcmV0dXJuICREYXRhOwp9CgpzdWIgU2VhcmNoRmllbGRWYWx1
ZUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRWYWx1ZTsKCiAg
ICAjIGdldCBkeW5hbWljIGZpZWxkIHZhbHVlIGZyb20gcGFyYW0gb2JqZWN0CiAgICBpZiAoIGRl
ZmluZWQgJFBhcmFte1BhcmFtT2JqZWN0fSApIHsKICAgICAgICBteSBARmllbGRWYWx1ZXMgPSAk
UGFyYW17UGFyYW1PYmplY3R9LT5HZXRBcnJheSgKICAgICAgICAgICAgUGFyYW0gPT4gJ1NlYXJj
aF9EeW5hbWljRmllbGRfJyAuICRQYXJhbXtEeW5hbWljRmllbGRDb25maWd9LT57TmFtZX0KICAg
ICAgICApOwoKICAgICAgICAkVmFsdWUgPSBcQEZpZWxkVmFsdWVzOwogICAgfQoKICAgICMgb3Ro
ZXJ3aXNlIGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgcHJvZmlsZQogICAgZWxzaWYgKCBkZWZpbmVk
ICRQYXJhbXtQcm9maWxlfSApIHsKICAgICAgICAkVmFsdWUgPSAkUGFyYW17UHJvZmlsZX0tPnsg
J1NlYXJjaF9EeW5hbWljRmllbGRfJyAuICRQYXJhbXtEeW5hbWljRmllbGRDb25maWd9LT57TmFt
ZX0gfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIGRl
ZmluZWQgJFBhcmFte1JldHVyblByb2ZpbGVTdHJ1Y3R1cmV9ICYmICRQYXJhbXtSZXR1cm5Qcm9m
aWxlU3RydWN0dXJlfSBlcSAxICkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICdTZWFy
Y2hfRHluYW1pY0ZpZWxkXycgLiAkUGFyYW17RHluYW1pY0ZpZWxkQ29uZmlnfS0+e05hbWV9ID0+
ICRWYWx1ZSwKICAgICAgICB9OwogICAgfQoKICAgIHJldHVybiAkVmFsdWU7Cn0KCnN1YiBTZWFy
Y2hGaWVsZFBhcmFtZXRlckJ1aWxkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87Cgog
ICAgIyBnZXQgZmllbGQgdmFsdWUKICAgIG15ICRWYWx1ZSA9ICRTZWxmLT5TZWFyY2hGaWVsZFZh
bHVlR2V0KCVQYXJhbSk7CgogICAgbXkgJERpc3BsYXlWYWx1ZTsKCiAgICBpZiAoIGRlZmluZWQg
JFZhbHVlICYmICEkVmFsdWUgKSB7CiAgICAgICAgJERpc3BsYXlWYWx1ZSA9ICcnOwogICAgfQoK
ICAgIG15ICRQb3NzaWJsZVZhbHVlcyA9ICRTZWxmLT5Qb3NzaWJsZVZhbHVlc0dldCglUGFyYW0p
OwoKICAgIGlmICgkVmFsdWUpIHsKICAgICAgICBpZiAoIHJlZiAkVmFsdWUgZXEgJ0FSUkFZJyAp
IHsKCiAgICAgICAgICAgIG15IEBEaXNwbGF5SXRlbUxpc3Q7CiAgICAgICAgICAgIGZvciBteSAk
SXRlbSAoIEB7JFZhbHVlfSApIHsKCiAgICAgICAgICAgICAgICAjIHNldCB0aGUgZGlzcGxheSB2
YWx1ZQogICAgICAgICAgICAgICAgbXkgJERpc3BsYXlJdGVtID0gJFBvc3NpYmxlVmFsdWVzLT57
JEl0ZW19CiAgICAgICAgICAgICAgICAgICAgfHwgJEl0ZW07CgogICAgICAgICAgICAgICAgIyB0
cmFuc2xhdGUgdGhlIHZhbHVlCiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAg
ICAgJFBhcmFte0R5bmFtaWNGaWVsZENvbmZpZ30tPntDb25maWd9LT57VHJhbnNsYXRhYmxlVmFs
dWVzfQogICAgICAgICAgICAgICAgICAgICYmIGRlZmluZWQgJFBhcmFte0xheW91dE9iamVjdH0K
ICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgJERpc3BsYXlJdGVtID0gJFBhcmFte0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0t
PlRyYW5zbGF0ZSgkRGlzcGxheUl0ZW0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICAgIHB1c2ggQERpc3BsYXlJdGVtTGlzdCwgJERpc3BsYXlJdGVtOwogICAgICAgICAgICB9Cgog
ICAgICAgICAgICAjIGNvbWJpbmUgZGlmZmVyZW50IHZhbHVlcyBpbnRvIG9uZSBzdHJpbmcKICAg
ICAgICAgICAgJERpc3BsYXlWYWx1ZSA9IGpvaW4gJyArICcsIEBEaXNwbGF5SXRlbUxpc3Q7CiAg
ICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBzZXQgdGhlIGRpc3BsYXkgdmFs
dWUKICAgICAgICAgICAgJERpc3BsYXlWYWx1ZSA9ICRQb3NzaWJsZVZhbHVlcy0+eyRWYWx1ZX07
CgogICAgICAgICAgICAjIHRyYW5zbGF0ZSB0aGUgdmFsdWUKICAgICAgICAgICAgaWYgKAogICAg
ICAgICAgICAgICAgJFBhcmFte0R5bmFtaWNGaWVsZENvbmZpZ30tPntDb25maWd9LT57VHJhbnNs
YXRhYmxlVmFsdWVzfQogICAgICAgICAgICAgICAgJiYgZGVmaW5lZCAkUGFyYW17TGF5b3V0T2Jq
ZWN0fQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkRGlz
cGxheVZhbHVlID0gJFBhcmFte0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPlRyYW5z
bGF0ZSgkRGlzcGxheVZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAj
IHJldHVybiBzZWFyY2ggcGFyYW1ldGVyIHN0cnVjdHVyZQogICAgcmV0dXJuIHsKICAgICAgICBQ
YXJhbWV0ZXIgPT4gewogICAgICAgICAgICBFcXVhbHMgPT4gJFZhbHVlLAogICAgICAgIH0sCiAg
ICAgICAgRGlzcGxheSA9PiAkRGlzcGxheVZhbHVlLAogICAgfTsKfQoKc3ViIFN0YXRzRmllbGRQ
YXJhbWV0ZXJCdWlsZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgc2V0
IFBvc3NpYmxlVmFsdWVzCiAgICBteSAkVmFsdWVzID0gJFNlbGYtPlBvc3NpYmxlVmFsdWVzR2V0
KCVQYXJhbSk7CgogICAgIyBnZXQgaGlzdG9yaWNhbCB2YWx1ZXMgZnJvbSBkYXRhYmFzZQogICAg
bXkgJEhpc3RvcmljYWxWYWx1ZXMKICAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6
U3lzdGVtOjpEeW5hbWljRmllbGRWYWx1ZScpLT5IaXN0b3JpY2FsVmFsdWVHZXQoCiAgICAgICAg
RmllbGRJRCAgID0+ICRQYXJhbXtEeW5hbWljRmllbGRDb25maWd9LT57SUR9LAogICAgICAgIFZh
bHVlVHlwZSA9PiAnVGV4dCwnLAogICAgICAgICk7CgogICAgIyBhZGQgaGlzdG9yaWMgdmFsdWVz
IHRvIGN1cnJlbnQgdmFsdWVzIChpZiB0aGV5IGRvbid0IGV4aXN0IGFueW1vcmUpCiAgICBmb3Ig
bXkgJEtleSAoIHNvcnQga2V5cyAleyRIaXN0b3JpY2FsVmFsdWVzfSApIHsKICAgICAgICBpZiAo
ICEkVmFsdWVzLT57JEtleX0gKSB7CiAgICAgICAgICAgICRWYWx1ZXMtPnskS2V5fSA9ICRIaXN0
b3JpY2FsVmFsdWVzLT57JEtleX0KICAgICAgICB9CiAgICB9CgogICAgIyB1c2UgUG9zc2libGVW
YWx1ZXNGaWx0ZXIgaWYgZGVmaW5lZAogICAgJFZhbHVlcyA9ICRQYXJhbXtQb3NzaWJsZVZhbHVl
c0ZpbHRlcn0gLy8gJFZhbHVlczsKCiAgICByZXR1cm4gewogICAgICAgIFZhbHVlcyAgICAgICAg
ICAgICA9PiAkVmFsdWVzLAogICAgICAgIE5hbWUgICAgICAgICAgICAgICA9PiAkUGFyYW17RHlu
YW1pY0ZpZWxkQ29uZmlnfS0+e0xhYmVsfSwKICAgICAgICBFbGVtZW50ICAgICAgICAgICAgPT4g
J0R5bmFtaWNGaWVsZF8nIC4gJFBhcmFte0R5bmFtaWNGaWVsZENvbmZpZ30tPntOYW1lfSwKICAg
ICAgICBUcmFuc2xhdGFibGVWYWx1ZXMgPT4gJFBhcmFte0R5bmFtaWNGaWVsZGNvbmZpZ30tPntD
b25maWd9LT57VHJhbnNsYXRhYmxlVmFsdWVzfSwKICAgICAgICBCbG9jayAgICAgICAgICAgICAg
PT4gJ011bHRpU2VsZWN0RmllbGQnLAogICAgfTsKfQoKc3ViIFN0YXRzU2VhcmNoRmllbGRQYXJh
bWV0ZXJCdWlsZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRPcGVy
YXRvciA9ICdFcXVhbHMnOwogICAgbXkgJFZhbHVlICAgID0gJFBhcmFte1ZhbHVlfTsKCiAgICBy
ZXR1cm4gewogICAgICAgICRPcGVyYXRvciA9PiAkVmFsdWUsCiAgICB9Owp9CgpzdWIgUmVhZGFi
bGVWYWx1ZVJlbmRlciB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICRW
YWx1ZSA9IGRlZmluZWQgJFBhcmFte1ZhbHVlfSA/ICRQYXJhbXtWYWx1ZX0gOiAnJzsKCiAgICAj
IHNldCB0aXRsZSBhcyB2YWx1ZSBhZnRlciB1cGRhdGUgYW5kIGJlZm9yZSBsaW1pdAogICAgbXkg
JFRpdGxlID0gJFZhbHVlOwoKICAgICMgY3V0IHN0cmluZ3MgaWYgbmVlZGVkCiAgICBpZiAoICRQ
YXJhbXtWYWx1ZU1heENoYXJzfSAmJiBsZW5ndGgoJFZhbHVlKSA+ICRQYXJhbXtWYWx1ZU1heENo
YXJzfSApIHsKICAgICAgICAkVmFsdWUgPSBzdWJzdHIoICRWYWx1ZSwgMCwgJFBhcmFte1ZhbHVl
TWF4Q2hhcnN9ICkgLiAnLi4uJzsKICAgIH0KICAgIGlmICggJFBhcmFte1RpdGxlTWF4Q2hhcnN9
ICYmIGxlbmd0aCgkVGl0bGUpID4gJFBhcmFte1RpdGxlTWF4Q2hhcnN9ICkgewogICAgICAgICRU
aXRsZSA9IHN1YnN0ciggJFRpdGxlLCAwLCAkUGFyYW17VGl0bGVNYXhDaGFyc30gKSAuICcuLi4n
OwogICAgfQoKICAgIG15ICREYXRhID0gewogICAgICAgIFZhbHVlID0+ICRWYWx1ZSwKICAgICAg
ICBUaXRsZSA9PiAkVGl0bGUsCiAgICB9OwoKICAgIHJldHVybiAkRGF0YTsKfQoKc3ViIFRlbXBs
YXRlVmFsdWVUeXBlR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkg
JEZpZWxkTmFtZSA9ICdEeW5hbWljRmllbGRfJyAuICRQYXJhbXtEeW5hbWljRmllbGRDb25maWd9
LT57TmFtZX07CgogICAgIyBzZXQgdGhlIGZpZWxkIHR5cGVzCiAgICBteSAkRWRpdFZhbHVlVHlw
ZSAgID0gJ1NDQUxBUic7CiAgICBteSAkU2VhcmNoVmFsdWVUeXBlID0gJ0FSUkFZJzsKCiAgICAj
IHJldHVybiB0aGUgY29ycmVjdCBzdHJ1Y3R1cmUKICAgIGlmICggJFBhcmFte0ZpZWxkVHlwZX0g
ZXEgJ0VkaXQnICkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICRGaWVsZE5hbWUgPT4g
JEVkaXRWYWx1ZVR5cGUsCiAgICAgICAgICAgIH0KICAgIH0KICAgIGVsc2lmICggJFBhcmFte0Zp
ZWxkVHlwZX0gZXEgJ1NlYXJjaCcgKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgJ1Nl
YXJjaF8nIC4gJEZpZWxkTmFtZSA9PiAkU2VhcmNoVmFsdWVUeXBlLAogICAgICAgICAgICB9CiAg
ICB9CiAgICBlbHNlIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICAkRmllbGROYW1lICAg
ICAgICAgICAgID0+ICRFZGl0VmFsdWVUeXBlLAogICAgICAgICAgICAnU2VhcmNoXycgLiAkRmll
bGROYW1lID0+ICRTZWFyY2hWYWx1ZVR5cGUsCiAgICAgICAgICAgIH0KICAgIH0KfQoKc3ViIFJh
bmRvbVZhbHVlU2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFZh
bHVlID0gaW50KCByYW5kKDUwMCkgKTsKCiAgICBteSAkU3VjY2VzcyA9ICRTZWxmLT5WYWx1ZVNl
dCgKICAgICAgICAlUGFyYW0sCiAgICAgICAgVmFsdWUgPT4gJFZhbHVlLAogICAgKTsKCiAgICBp
ZiAoICEkU3VjY2VzcyApIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBTdWNjZXNzID0+
IDAsCiAgICAgICAgfTsKICAgIH0KICAgIHJldHVybiB7CiAgICAgICAgU3VjY2VzcyA9PiAxLAog
ICAgICAgIFZhbHVlICAgPT4gJFZhbHVlLAogICAgfTsKfQoKc3ViIE9iamVjdE1hdGNoIHsKICAg
IG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJEZpZWxkTmFtZSA9ICdEeW5hbWlj
RmllbGRfJyAuICRQYXJhbXtEeW5hbWljRmllbGRDb25maWd9LT57TmFtZX07CgogICAgIyByZXR1
cm4gZmFsc2UgaWYgZmllbGQgaXMgbm90IGRlZmluZWQKICAgIHJldHVybiAwIGlmICggIWRlZmlu
ZWQgJFBhcmFte09iamVjdEF0dHJpYnV0ZXN9LT57JEZpZWxkTmFtZX0gKTsKCiAgICAjIHJldHVy
biBmYWxzZSBpZiBub3QgbWF0Y2gKICAgIGlmICggJFBhcmFte09iamVjdEF0dHJpYnV0ZXN9LT57
JEZpZWxkTmFtZX0gbmUgJFBhcmFte1ZhbHVlfSApIHsKICAgICAgICByZXR1cm4gMDsKICAgIH0K
CiAgICByZXR1cm4gMTsKfQoKc3ViIEhpc3RvcmljYWxWYWx1ZXNHZXQgewogICAgbXkgKCAkU2Vs
ZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBoaXN0b3JpY2FsIHZhbHVlcyBmcm9tIGRhdGFi
YXNlCiAgICBteSAkSGlzdG9yaWNhbFZhbHVlcwogICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgn
S2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZFZhbHVlJyktPkhpc3RvcmljYWxWYWx1ZUdldCgK
ICAgICAgICBGaWVsZElEICAgPT4gJFBhcmFte0R5bmFtaWNGaWVsZENvbmZpZ30tPntJRH0sCiAg
ICAgICAgVmFsdWVUeXBlID0+ICdUZXh0JywKICAgICAgICApOwoKICAgICMgcmV0dXJuIHRoZSBo
aXN0b3JpY2FsIHZhbHVlcyBmcm9tIGRhdGFiYXNlCiAgICByZXR1cm4gJEhpc3RvcmljYWxWYWx1
ZXM7Cn0KCnN1YiBWYWx1ZUxvb2t1cCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoK
ICAgIG15ICRWYWx1ZSA9IGRlZmluZWQgJFBhcmFte0tleX0gPyAkUGFyYW17S2V5fSA6ICcnOwoK
ICAgICMgZ2V0IHJlYWwgdmFsdWVzCiAgICBteSAkUG9zc2libGVWYWx1ZXMgPSAkU2VsZi0+UG9z
c2libGVWYWx1ZXNHZXQoJVBhcmFtKTsKCiAgICBpZiAoJFZhbHVlKSB7CgogICAgICAgICMgY2hl
Y2sgaWYgdGhlcmUgaXMgYSByZWFsIHZhbHVlIGZvciB0aGlzIGtleSAob3RoZXJ3aXNlIGtlZXAg
dGhlIGtleSkKICAgICAgICBpZiAoICRQb3NzaWJsZVZhbHVlcy0+eyRWYWx1ZX0gKSB7CgogICAg
ICAgICAgICAjIGdldCByZWFkZWFibGUgdmFsdWUKICAgICAgICAgICAgJFZhbHVlID0gJFBvc3Np
YmxlVmFsdWVzLT57JFZhbHVlfTsKCiAgICAgICAgICAgICMgY2hlY2sgaWYgdHJhbnNsYXRpb24g
aXMgcG9zc2libGUKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgZGVmaW5lZCAkUGFy
YW17TGFuZ3VhZ2VPYmplY3R9CiAgICAgICAgICAgICAgICAmJiAkUGFyYW17RHluYW1pY0ZpZWxk
Q29uZmlnfS0+e0NvbmZpZ30tPntUcmFuc2xhdGFibGVWYWx1ZXN9CiAgICAgICAgICAgICAgICAp
CiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIHRyYW5zbGF0ZSB2YWx1ZQogICAgICAg
ICAgICAgICAgJFZhbHVlID0gJFBhcmFte0xhbmd1YWdlT2JqZWN0fS0+VHJhbnNsYXRlKCRWYWx1
ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRWYWx1ZTsKfQoK
c3ViIEJ1aWxkU2VsZWN0aW9uRGF0YUdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBf
OwoKICAgIG15ICRDb25maWdQb3NzaWJsZVZhbHVlcyA9ICRTZWxmLT5Qb3NzaWJsZVZhbHVlc0dl
dCglUGFyYW0pOwoKICAgIHJldHVybiAkQ29uZmlnUG9zc2libGVWYWx1ZXM7Cn0KCnN1YiBQb3Nz
aWJsZVZhbHVlc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgdG8g
c3RvcmUgdGhlIHBvc3NpYmxlIHZhbHVlcwogICAgbXkgJVBvc3NpYmxlVmFsdWVzOwoKICAgIG15
ICRDb25maWcgICAgICA9ICRQYXJhbXtEeW5hbWljRmllbGRDb25maWd9LT57Q29uZmlnfSB8fCB7
fTsKICAgIG15ICRGaWVsZE5hbWUgICA9ICRQYXJhbXtEeW5hbWljRmllbGRDb25maWd9LT57TmFt
ZX07CiAgICBteSAkQ2FjaGVLZXkgICAgPSAnRHluYW1pY0ZpZWxkOjonIC4gJEZpZWxkTmFtZTsK
ICAgIG15ICRDYWNoZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpD
YWNoZScpOwogICAgbXkgJExvZ09iamVjdCAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpT
eXN0ZW06OkxvZycpOwoKICAgICMgY2hlY2sgaWYgaXQgY2FuIGZpbmQgYW55dGhpbmcgaW4gdGhl
IGNhY2hlCiAgICBteSAkQ2FjaGUgPSAkQ2FjaGVPYmplY3QtPkdldCgKICAgICAgICBUeXBlID0+
ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICk7Cgog
ICAgcmV0dXJuICRDYWNoZSBpZiAkQ2FjaGUgJiYgJXskQ2FjaGV9OwoKICAgICMgc2V0IFBvc3Np
YmxlTm9uZSBhdHRyaWJ1dGUKICAgIG15ICRGaWVsZFBvc3NpYmxlTm9uZTsKICAgIGlmICggZGVm
aW5lZCAkUGFyYW17T3ZlcnJpZGVQb3NzaWJsZU5vbmV9ICkgewogICAgICAgICRGaWVsZFBvc3Np
YmxlTm9uZSA9ICRQYXJhbXtPdmVycmlkZVBvc3NpYmxlTm9uZX07CiAgICB9CiAgICBlbHNlIHsK
ICAgICAgICAkRmllbGRQb3NzaWJsZU5vbmUgPSAkQ29uZmlnLT57UG9zc2libGVOb25lfSB8fCAw
OwogICAgfQoKICAgICMgc2V0IG5vbmUgdmFsdWUgaWYgZGVmaW5lZCBvbiBmaWVsZCBjb25maWcK
ICAgIGlmICgkRmllbGRQb3NzaWJsZU5vbmUpIHsKICAgICAgICAlUG9zc2libGVWYWx1ZXMgPSAo
ICcnID0+ICctJyApOwogICAgfQoKICAgICMgYnVpbGQgaGVhZGVycwogICAgbXkgJEhlYWRlcnMg
PSB7fTsKCiAgICAjIHVzZXIvcGFzc3dvcmQgY29tYmkKICAgIGlmICggJENvbmZpZy0+e1VzZXJ9
ICYmICRDb25maWctPntQYXNzd29yZFRva2VufSApIHsKICAgICAgICAkSGVhZGVycy0+e0F1dGhv
cml6YXRpb259ID0gIkJhc2ljICVzIiwgZW5jb2RlX2Jhc2U2NCAkQ29uZmlnLT57VXNlcn0gLiAn
OicgLiAkQ29uZmlnLT57UGFzc3dvcmRUb2tlbn0sCiAgICB9CgogICAgIyBhdXRoIHRva2VuCiAg
ICBlbHNpZiAoICRDb25maWctPntQYXNzd29yZFRva2VufSApIHsKICAgICAgICAkSGVhZGVycy0+
e0F1dGhvcml6YXRpb259ID0gIkJlYXJlciAiIC4gJENvbmZpZy0+e1Bhc3N3b3JkVG9rZW59Owog
ICAgfQoKICAgICMgc2VuZCBkYXRhCiAgICBteSAlT3B0czsKICAgIGlmICggJENvbmZpZy0+e1Jl
cXVlc3Rib2R5fSApIHsKICAgICAgICAkT3B0c3tEYXRhfSA9IHsgQ29udGVudCA9PiAkQ29uZmln
LT57UmVxdWVzdGJvZHl9IH07CiAgICB9CgogICAgbXkgJFVSTCA9ICRDb25maWctPntVUkx9OwoK
ICAgIGlmICggJENvbmZpZy0+e0hUVFBNZXRob2R9IG5lICdHRVQnICYmICRDb25maWctPntSZXF1
ZXN0UGFyYW1zfSAmJiBrZXlzICV7ICRDb25maWctPntSZXF1ZXN0UGFyYW1zfSB9ICkgewogICAg
ICAgIGZvciBteSAkQXR0ciAoIGtleXMgJXsgJENvbmZpZy0+e1JlcXVlc3RQYXJhbXN9IH0gKSB7
CiAgICAgICAgICAgIG15ICRLZXkgICA9ICRBdHRyOwogICAgICAgICAgICBteSAkVmFsdWUgPSAk
Q29uZmlnLT57UmVxdWVzdFBhcmFtc30tPnskQXR0cn07CiAgICAgICAgICAgICRPcHRze0RhdGF9
LT57JEtleX0gPSAkVmFsdWU7CiAgICAgICAgfQogICAgfQogICAgZWxzaWYgKCAkQ29uZmlnLT57
SFRUUE1ldGhvZH0gZXEgJ0dFVCcgJiYgJENvbmZpZy0+e1JlcXVlc3RQYXJhbXN9ICYmIGtleXMg
JXsgJENvbmZpZy0+e1JlcXVlc3RQYXJhbXN9IH0gKSB7CiAgICAgICAgbXkgQFVSTFBhcmFtczsK
CiAgICAgICAgZm9yIG15ICRBdHRyICgga2V5cyAleyAkQ29uZmlnLT57UmVxdWVzdFBhcmFtc30g
fSApIHsKICAgICAgICAgICAgbXkgJEtleSAgID0gdXJpX2VzY2FwZSAkQXR0cjsKICAgICAgICAg
ICAgbXkgJFZhbHVlID0gdXJpX2VzY2FwZSAkQ29uZmlnLT57UmVxdWVzdFBhcmFtc30tPnskQXR0
cn07CiAgICAgICAgICAgIHB1c2ggQFVSTFBhcmFtcywgIiRLZXk9JFZhbHVlIjsKICAgICAgICB9
CgogICAgICAgICRVUkwgLj0gJz8nIC4gam9pbiAnJicsIEBVUkxQYXJhbXM7CiAgICB9CgogICAg
IyByZXF1ZXN0IHRoZSBBUEkKICAgIG15ICRVQSAgICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgn
S2VybmVsOjpTeXN0ZW06OldlYlVzZXJBZ2VudCcpOwogICAgbXkgJEpTT05PYmplY3QgPSAkS2Vy
bmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6SlNPTicpOwogICAgbXkgJVJlc3BvbnNlICAg
PSAkVUEtPlJlcXVlc3QoCiAgICAgICAgJU9wdHMsCiAgICAgICAgVVJMICAgICA9PiAkVVJMLAog
ICAgICAgIFR5cGUgICAgPT4gJENvbmZpZy0+e0hUVFBNZXRob2R9LAogICAgICAgIEhlYWRlcnMg
PT4gJEhlYWRlcnMsCiAgICApOwoKICAgIGlmICggJFJlc3BvbnNle0NvbnRlbnR9ICYmICR7JFJl
c3BvbnNle0NvbnRlbnR9fSApIHsKICAgICAgICBteSAkS2V5UGF0aCAgID0gSlNPTjo6UGF0aC0+
bmV3KCAkQ29uZmlnLT57SlNPTlBhdGhLZXl9ICk7CiAgICAgICAgbXkgJFZhbHVlUGF0aCA9IEpT
T046OlBhdGgtPm5ldyggJENvbmZpZy0+e0pTT05QYXRoVmFsdWV9IC8vICRDb25maWctPntKU09O
UGF0aEtleX0gKTsKCiAgICAgICAgbXkgJERhdGEgICAgICA9ICRKU09OT2JqZWN0LT5EZWNvZGUo
IERhdGEgPT4gJHskUmVzcG9uc2V7Q29udGVudH19ICk7CgogICAgICAgIG15IEBLZXlzICAgICAg
PSAkS2V5UGF0aC0+dmFsdWVzKCAkRGF0YSApOwogICAgICAgIG15IEBWYWx1ZXM7CgogICAgICAg
ICMgaWYgdmFsdWUgaGFzIG1vcmUgdGhhbiBvbmUgcGF0aAogICAgICAgIGlmICggJFZhbHVlUGF0
aCA9fiBte1wkIC4qPyBcJH14bXMgKSB7CiAgICAgICAgICAgIG15IEBQYXRocyA9ICRWYWx1ZVBh
dGggPX4gbXsoXCRbXlxzXSspfXhtc2c7CiAgICAgICAgICAgIGZvciBteSAkUGF0aCAoIEBQYXRo
cyApIHsKICAgICAgICAgICAgICAgIG15ICRQYXRoT2JqICAgID0gSlNPTjo6UGF0aC0+bmV3KCAk
UGF0aCApOwogICAgICAgICAgICAgICAgbXkgQFZhbHVlUGFydHMgPSAkUGF0aE9iai0+dmFsdWVz
KCAkRGF0YSApOwoKICAgICAgICAgICAgICAgIGZvciBteSAkSW5kZXggKCAwIC4uICQjVmFsdWVQ
YXJ0cyApIHsKICAgICAgICAgICAgICAgICAgICAkVmFsdWVzWyRJbmRleF0gPSBzcHJpbnRmICIl
cyAlcyAlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICRWYWx1ZXNbJEluZGV4XSB8fCAnJywK
ICAgICAgICAgICAgICAgICAgICAgICAgKCAkVmFsdWVzWyRJbmRleF0gPyAnLScgOiAnJyApLAog
ICAgICAgICAgICAgICAgICAgICAgICAkVmFsdWVQYXJ0c1skSW5kZXhdOwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBA
VmFsdWVzID0gJFZhbHVlUGF0aC0+dmFsdWVzKCAkRGF0YSApOwogICAgICAgIH0KCiAgICAgICAg
aWYgKCBAS2V5cyAmJiBAVmFsdWVzICkgewogICAgICAgICAgICBAUG9zc2libGVWYWx1ZXN7QEtl
eXN9ID0gQFZhbHVlczsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCRGaWVsZFBvc3NpYmxlTm9u
ZSkgewogICAgICAgICRQb3NzaWJsZVZhbHVlc3snJ30gPSAnLSc7CiAgICB9CgogICAgIyBzYXZl
IGluIGNhY2hlCiAgICAkQ2FjaGVPYmplY3QtPlNldCgKICAgICAgICBUeXBlICA9PiAkU2VsZi0+
e0NhY2hlVHlwZX0sCiAgICAgICAgVFRMICAgPT4gJENvbmZpZy0+e1RUTENhY2hlfSB8fCA2MCwK
ICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXCVQb3NzaWJsZVZh
bHVlcywKICAgICk7CgogICAgIyByZXR1cm4gdGhlIHBvc3NpYmxlIHZhbHVlcyBoYXNoIGFzIGEg
cmVmZXJlbmNlCiAgICByZXR1cm4gXCVQb3NzaWJsZVZhbHVlczsKfQoKc3ViIENvbHVtbkZpbHRl
clZhbHVlc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgdGFrZSBj
b25maWcgZnJvbSBmaWVsZCBjb25maWcKICAgIG15ICRGaWVsZENvbmZpZyA9ICRQYXJhbXtEeW5h
bWljRmllbGRDb25maWd9LT57Q29uZmlnfTsKCiAgICAjIHNldCBQb3NzaWJsZVZhbHVlcwogICAg
bXkgJFNlbGVjdGlvbkRhdGEgPSAkU2VsZi0+UG9zc2libGVWYWx1ZXNHZXQoJVBhcmFtKTsKCiAg
ICAjIGdldCBjb2x1bW4gZmlsdGVyIHZhbHVlcyBmcm9tIGRhdGFiYXNlCiAgICBteSAkQ29sdW1u
RmlsdGVyVmFsdWVzCiAgICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6
VGlja2V0OjpDb2x1bW5GaWx0ZXInKS0+RHluYW1pY0ZpZWxkRmlsdGVyVmFsdWVzR2V0KAogICAg
ICAgIFRpY2tldElEcyA9PiAkUGFyYW17VGlja2V0SURzfSwKICAgICAgICBGaWVsZElEICAgPT4g
JFBhcmFte0R5bmFtaWNGaWVsZENvbmZpZ30tPntJRH0sCiAgICAgICAgVmFsdWVUeXBlID0+ICdU
ZXh0JywKICAgICAgICApOwoKICAgICMgZ2V0IHRoZSBkaXNwbGF5IHZhbHVlIGlmIHN0aWxsIGV4
aXN0IGluIGR5bmFtaWMgZmllbGQgY29uZmlndXJhdGlvbgogICAgZm9yIG15ICRLZXkgKCBzb3J0
IGtleXMgJXskQ29sdW1uRmlsdGVyVmFsdWVzfSApIHsKICAgICAgICBpZiAoICRTZWxlY3Rpb25E
YXRhLT57JEtleX0gKSB7CiAgICAgICAgICAgICRDb2x1bW5GaWx0ZXJWYWx1ZXMtPnskS2V5fSA9
ICRTZWxlY3Rpb25EYXRhLT57JEtleX0KICAgICAgICB9CiAgICB9CgogICAgaWYgKCAkRmllbGRD
b25maWctPntUcmFuc2xhdGFibGVWYWx1ZXN9ICkgewoKICAgICAgICAjIHRyYW5zbGF0ZSB0aGUg
dmFsdWUKICAgICAgICBmb3IgbXkgJFZhbHVlS2V5ICggc29ydCBrZXlzICV7JENvbHVtbkZpbHRl
clZhbHVlc30gKSB7CgogICAgICAgICAgICBteSAkT3JpZ2luYWxWYWx1ZU5hbWUgPSAkQ29sdW1u
RmlsdGVyVmFsdWVzLT57JFZhbHVlS2V5fTsKICAgICAgICAgICAgJENvbHVtbkZpbHRlclZhbHVl
cy0+eyRWYWx1ZUtleX0KICAgICAgICAgICAgICAgID0gJFBhcmFte0xheW91dE9iamVjdH0tPntM
YW5ndWFnZU9iamVjdH0tPlRyYW5zbGF0ZSgkT3JpZ2luYWxWYWx1ZU5hbWUpOwogICAgICAgIH0K
ICAgIH0KCiAgICByZXR1cm4gJENvbHVtbkZpbHRlclZhbHVlczsKfQoKMTsKCj1iYWNrCgo9aGVh
ZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVU
RUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJ
TkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZl
IHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4K
Cj1jdXQK
IyAtLQojIEtlcm5lbC9TeXN0ZW0vRHluYW1pY0ZpZWxkL0RyaXZlci9Kc29uQVBJLnBtIC0gRGVs
ZWdhdGUgZm9yIER5bmFtaWNGaWVsZCBKc29uQVBJIERyaXZlcgojIENvcHlyaWdodCAoQykgMjAx
NSBQZXJsLVNlcnZpY2VzLmRlLCBodHRwOi8vcGVybC1zZXJ2aWNlcy5kZQojIC0tCiMgVGhpcyBz
b2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBz
ZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChB
R1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cu
Z251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6
RHluYW1pY0ZpZWxkOjpEcml2ZXI6Okpzb25BUEk7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7
Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7Cgp1c2UgYmFzZSBx
dyhLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpEcml2ZXI6OkJhc2VKc29uQVBJKTsKCm91
ciBAT2JqZWN0RGVwZW5kZW5jaWVzID0gKAogICAgJ0tlcm5lbDo6Q29uZmlnJywKICAgICdLZXJu
ZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkVmFsdWUnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpNYWlu
JywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpEcml2ZXI6
Okpzb25BUEkKCj1oZWFkMSBTWU5PUFNJUwoKRHluYW1pY0ZpZWxkcyBKc29uQVBJIERyaXZlciBk
ZWxlZ2F0ZQoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKClRoaXMgbW9kdWxlIGltcGxlbWVudHMg
dGhlIHB1YmxpYyBpbnRlcmZhY2Ugb2YgTDxLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpC
YWNrZW5kPi4KUGxlYXNlIGxvb2sgdGhlcmUgZm9yIGEgZGV0YWlsZWQgcmVmZXJlbmNlIG9mIHRo
ZSBmdW5jdGlvbnMuCgo9b3ZlciA0Cgo9aXRlbSBuZXcoKQoKdXN1YWxseSwgeW91IHdhbnQgdG8g
Y3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMKYnkgdXNpbmcgS2VybmVsOjpTeXN0ZW06OkR5bmFt
aWNGaWVsZDo6QmFja2VuZC0+bmV3KCk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUs
ICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBt
eSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgc2V0IGZpZWxk
IGJlaGF2aW9ycwogICAgJFNlbGYtPntCZWhhdmlvcnN9ID0gewogICAgICAgICdJc0FDTFJlZHVj
aWJsZScgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICdJc05vdGlmaWNhdGlvbkV2ZW50Q29u
ZGl0aW9uJyA9PiAxLAogICAgICAgICdJc1NvcnRhYmxlJyAgICAgICAgICAgICAgICAgICA9PiAx
LAogICAgICAgICdJc0ZpbHRyYWJsZScgICAgICAgICAgICAgICAgICA9PiAxLAogICAgICAgICdJ
c1N0YXRzQ29uZGl0aW9uJyAgICAgICAgICAgICA9PiAxLAogICAgICAgICdJc0N1c3RvbWVySW50
ZXJmYWNlQ2FwYWJsZScgICA9PiAxLAogICAgfTsKCiAgICAjIGdldCB0aGUgRHluYW1pYyBGaWVs
ZCBCYWNrZW5kIGN1c3RvbSBleHRlbnNpb25zCiAgICBteSAkRHluYW1pY0ZpZWxkRHJpdmVyRXh0
ZW5zaW9ucwogICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0
KCdEeW5hbWljRmllbGRzOjpFeHRlbnNpb246OkRyaXZlcjo6SnNvbkFQSScpOwoKICAgIEVYVEVO
U0lPTjoKICAgIGZvciBteSAkRXh0ZW5zaW9uS2V5ICggc29ydCBrZXlzICV7JER5bmFtaWNGaWVs
ZERyaXZlckV4dGVuc2lvbnN9ICkgewoKICAgICAgICAjIHNraXAgaW52YWxpZCBleHRlbnNpb25z
CiAgICAgICAgbmV4dCBFWFRFTlNJT04gaWYgIUlzSGFzaFJlZldpdGhEYXRhKCAkRHluYW1pY0Zp
ZWxkRHJpdmVyRXh0ZW5zaW9ucy0+eyRFeHRlbnNpb25LZXl9ICk7CgogICAgICAgICMgY3JlYXRl
IGEgZXh0ZW5zaW9uIGNvbmZpZyBzaG9ydGN1dAogICAgICAgIG15ICRFeHRlbnNpb24gPSAkRHlu
YW1pY0ZpZWxkRHJpdmVyRXh0ZW5zaW9ucy0+eyRFeHRlbnNpb25LZXl9OwoKICAgICAgICAjIGNo
ZWNrIGlmIGV4dGVuc2lvbiBoYXMgYSBuZXcgbW9kdWxlCiAgICAgICAgaWYgKCAkRXh0ZW5zaW9u
LT57TW9kdWxlfSApIHsKCiAgICAgICAgICAgICMgY2hlY2sgaWYgbW9kdWxlIGNhbiBiZSBsb2Fk
ZWQKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgISRLZXJuZWw6Ok9NLT5HZXQoJ0tl
cm5lbDo6U3lzdGVtOjpNYWluJyktPlJlcXVpcmVCYXNlQ2xhc3MoICRFeHRlbnNpb24tPntNb2R1
bGV9ICkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZGll
ICJDYW4ndCBsb2FkIGR5bmFtaWMgZmllbGRzIGJhY2tlbmQgbW9kdWxlIgogICAgICAgICAgICAg
ICAgICAgIC4gIiAkRXh0ZW5zaW9uLT57TW9kdWxlfSEgJEAiOwogICAgICAgICAgICB9CiAgICAg
ICAgfQoKICAgICAgICAjIGNoZWNrIGlmIGV4dGVuc2lvbiBjb250YWlucyBtb3JlIGJlaGFiaW9y
cwogICAgICAgIGlmICggSXNIYXNoUmVmV2l0aERhdGEoICRFeHRlbnNpb24tPntCZWhhdmlvcnN9
ICkgKSB7CgogICAgICAgICAgICAleyAkU2VsZi0+e0JlaGF2aW9yc30gfSA9ICgKICAgICAgICAg
ICAgICAgICV7ICRTZWxmLT57QmVoYXZpb3JzfSB9LAogICAgICAgICAgICAgICAgJXsgJEV4dGVu
c2lvbi0+e0JlaGF2aW9yc30gfQogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAk
U2VsZi0+e0NhY2hlVHlwZX0gPSAnRHluYW1pY0ZpZWxkVmFsdWVzJzsKCiAgICByZXR1cm4gJFNl
bGY7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3
YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0
aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4g
SWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9y
Zy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJz
aW9uPSIyLjAiIGluaXQ9IkFwcGxpY2F0aW9uIj4KICAgIDxTZXR0aW5nIE5hbWU9IkZyb250ZW5k
OjpNb2R1bGUjIyNBZG1pbkR5bmFtaWNGaWVsZEpzb25BUEkiIFJlcXVpcmVkPSIwIiBWYWxpZD0i
MSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxl
IHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAg
ICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZG1pbjo6TW9kdWxlUmVnaXN0cmF0aW9uPC9OYXZp
Z2F0aW9uPgogICAgICAgIDxWYWx1ZT4KICAgICAgICAgICAgPEl0ZW0gVmFsdWVUeXBlPSJGcm9u
dGVuZFJlZ2lzdHJhdGlvbiI+CiAgICAgICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAg
ICAgICA8SXRlbSBLZXk9Ikdyb3VwUm8iPgogICAgICAgICAgICAgICAgICAgIDwvSXRlbT4KICAg
ICAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikdyb3VwIj4KICAgICAgICAgICAgICAgICAgICAg
ICAgPEFycmF5PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0+YWRtaW48L0l0ZW0+
CiAgICAgICAgICAgICAgICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgICAgICAgICAgICAgPC9J
dGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iPkFkbWluPC9J
dGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGl0bGUiIFRyYW5zbGF0YWJsZT0i
MSI+RHluYW1pYyBGaWVsZHMgRHJvcC1kb3duIEJhY2tlbmQgR1VJPC9JdGVtPgogICAgICAgICAg
ICAgICAgICAgIDxJdGVtIEtleT0iTmF2QmFyTmFtZSI+PC9JdGVtPgogICAgICAgICAgICAgICAg
PC9IYXNoPgogICAgICAgICAgICA8L0l0ZW0+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGlu
Zz4KICAgIDxTZXR0aW5nIE5hbWU9IkxvYWRlcjo6TW9kdWxlOjpBZG1pbkR5bmFtaWNGaWVsZEpz
b25BUEkjIyMwMDItRHluYW1pY0ZpZWxkSnNvbkFQSSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4K
ICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Mb2FkZXIgbW9kdWxlIHJlZ2lz
dHJhdGlvbiBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxO
YXZpZ2F0aW9uPkZyb250ZW5kOjpBZG1pbjo6TW9kdWxlUmVnaXN0cmF0aW9uOjpMb2FkZXI8L05h
dmlnYXRpb24+CiAgICAgICAgPFZhbHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAg
ICAgIDxJdGVtIEtleT0iQ1NTIj4KICAgICAgICAgICAgICAgICAgICA8QXJyYXk+CiAgICAgICAg
ICAgICAgICAgICAgICAgIDxJdGVtPkNvcmUuQWdlbnQuQWRtaW4uRHluYW1pY0ZpZWxkLmNzczwv
SXRlbT4KICAgICAgICAgICAgICAgICAgICA8L0FycmF5PgogICAgICAgICAgICAgICAgPC9JdGVt
PgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJKYXZhU2NyaXB0Ij4KICAgICAgICAgICAgICAg
ICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtPkNvcmUuQWdlbnQuQWRt
aW4uRHluYW1pY0ZpZWxkLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgICAgICAgICA8SXRlbT5D
b3JlLkFnZW50LkFkbWluLkR5bmFtaWNGaWVsZEpzb25BUEkuanM8L0l0ZW0+CiAgICAgICAgICAg
ICAgICAgICAgPC9BcnJheT4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgPC9I
YXNoPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+CiAgICA8U2V0dGluZyBOYW1lPSJG
cm9udGVuZDo6TmF2aWdhdGlvbiMjI0FkbWluRHluYW1pY0ZpZWxkSnNvbkFQSSMjIzAwMi1EeW5h
bWljRmllbGRKc29uQVBJIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgogICAgICAgIDxEZXNjcmlw
dGlvbiBUcmFuc2xhdGFibGU9IjEiPk1haW4gbWVudSBpdGVtIHJlZ2lzdHJhdGlvbi48L0Rlc2Ny
aXB0aW9uPgogICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpBZG1pbjo6TW9kdWxlUmVnaXN0
cmF0aW9uOjpNYWluTWVudTwvTmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAg
IDxBcnJheT4KICAgICAgICAgICAgICAgIDxEZWZhdWx0SXRlbSBWYWx1ZVR5cGU9IkZyb250ZW5k
TmF2aWdhdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAg
ICAgPC9IYXNoPgogICAgICAgICAgICAgICAgPC9EZWZhdWx0SXRlbT4KICAgICAgICAgICAgPC9B
cnJheT4KICAgICAgICA8L1ZhbHVlPgogICAgPC9TZXR0aW5nPgogICAgPFNldHRpbmcgTmFtZT0i
RHluYW1pY0ZpZWxkczo6RHJpdmVyIyMjSnNvbkFQSSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4K
ICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EeW5hbWljRmllbGQgYmFja2Vu
ZCByZWdpc3RyYXRpb24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Db3JlOjpE
eW5hbWljRmllbGRzOjpEcml2ZXJSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZh
bHVlPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGlzcGxh
eU5hbWUiIFRyYW5zbGF0YWJsZT0iMSI+SnNvbkFQSTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJ
dGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOjpEcml2ZXI6Okpz
b25BUEk8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbmZpZ0RpYWxvZyI+QWRt
aW5EeW5hbWljRmllbGRKc29uQVBJPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAg
PC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KICAgIDxTZXR0aW5nIE5hbWU9IlB1YmxpY0Zyb250ZW5k
OjpNb2R1bGUjIyNQdWJsaWNEZWxldGVERkNhY2hlIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjAiPgog
ICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdp
c3RyYXRpb24gdG8gZGVsZXRlIGEgZHluYW1pYyBmaWVsZCBjYWNoZS48L0Rlc2NyaXB0aW9uPgog
ICAgICAgIDxOYXZpZ2F0aW9uPkZyb250ZW5kOjpQdWJsaWM6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwv
TmF2aWdhdGlvbj4KICAgICAgICA8VmFsdWU+CiAgICAgICAgICAgIDxJdGVtIFZhbHVlVHlwZT0i
RnJvbnRlbmRSZWdpc3RyYXRpb24iPgogICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAg
ICAgICAgICAgPEl0ZW0gS2V5PSJHcm91cCI+CiAgICAgICAgICAgICAgICAgICAgPC9JdGVtPgog
ICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iR3JvdXBSbyI+CiAgICAgICAgICAgICAgICAg
ICAgPC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGVzY3JpcHRpb24iPkRl
bGV0ZSBEeW5hbWljRmllbGQgQ2FjaGU8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0g
S2V5PSJOYXZCYXJOYW1lIj48L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJU
aXRsZSI+RGVsZXRlIER5bmFtaWNGaWVsZCBDYWNoZTwvSXRlbT4KICAgICAgICAgICAgICAgIDwv
SGFzaD4KICAgICAgICAgICAgPC9JdGVtPgogICAgICAgIDwvVmFsdWU+CiAgICA8L1NldHRpbmc+
CiAgICA8U2V0dGluZyBOYW1lPSJQdWJsaWNGcm9udGVuZDo6TmF2aWdhdGlvbiMjI1B1YmxpY0Rl
bGV0ZURGQ2FjaGUjIyMwMDItRHluYW1pY0ZpZWxkSnNvbkFQSSIgUmVxdWlyZWQ9IjAiIFZhbGlk
PSIwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5NYWluIG1lbnUgaXRl
bSByZWdpc3RyYXRpb24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8TmF2aWdhdGlvbj5Gcm9udGVu
ZDo6UHVibGljOjpNb2R1bGVSZWdpc3RyYXRpb248L05hdmlnYXRpb24+CiAgICAgICAgPFZhbHVl
PgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8RGVmYXVsdEl0ZW0gVmFsdWVU
eXBlPSJGcm9udGVuZE5hdmlnYXRpb24iPgogICAgICAgICAgICAgICAgICAgIDxIYXNoPgogICAg
ICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvRGVmYXVsdEl0ZW0+CiAg
ICAgICAgICAgIDwvQXJyYXk+CiAgICAgICAgPC9WYWx1ZT4KICAgIDwvU2V0dGluZz4KCjwvb3Ry
c19jb25maWc+Cg==
IyEvdXNyL2Jpbi9wZXJsCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgTW9qb2xpY2lv
dXM6OkxpdGU7CnVzZSBNb2pvOjpKU09OIHF3KGRlY29kZV9qc29uKTsKCmdldCAnLycgPT4gc3Vi
IHsKICAgIG15ICgkYykgPSBzaGlmdDsKCiAgICAkYy0+cmVkaXJlY3RfdG8oICRjLT51cmxfZm9y
KCcvYXBpL3YwL3Byb2plY3QnKSApOwp9OwoKYW55ICcvYXBpL3YwL3Byb2plY3QnID0+IHN1YiB7
CiAgICBteSAoJGMpID0gc2hpZnQ7CgogICAgbXkgJGRhdGEgICAgID0gX2dldF9yZXNwb25zZSgp
OwogICAgbXkgJHJlc3BvbnNlID0gZGVjb2RlX2pzb24oICRkYXRhICk7CgogICAgcmV0dXJuICRj
LT5yZW5kZXIoIGpzb24gPT4gJHJlc3BvbnNlICk7Cn07CgphcHAtPnN0YXJ0OwoKc3ViIF9nZXRf
cmVzcG9uc2UgewoKcmV0dXJuIHF+CnsicHJvamVjdCI6W3sid29ya3BoYXNlX2lkIjoxLCJhYmJy
ZXZpYXRpb24iOiJXSEgiLCJlbmRfZGF0ZSI6IjIwMTctMDMtMjYgMDA6MDA6MDAiLCJwcm9qZWN0
bnVtYmVyIjoiMDEiLCJzdGF0dXNfaWQiOjEsImNvc3Rncm91cF9zeXN0ZW1faWQiOjEsInNob3J0
bmFtZSI6IldvaG5nZWJcdTAwZTR1ZGUgSG9jaGhhdXNlbiIsImRlc2NyaXB0aW9uIjoiRGFzIGlz
dCBlaW4gVGVzdCIsInN0YXJ0X2RhdGUiOiIyMDE3LTAzLTEwIDAwOjAwOjAwIiwidHlwZSI6InBy
b2plY3QiLCJocmVmIjoiL3Byb2plY3QvMSIsImlkIjoxfSx7InByb2plY3RudW1iZXIiOiIwMiIs
InN0YXR1c19pZCI6MSwid29ya3BoYXNlX2lkIjoxLCJhYmJyZXZpYXRpb24iOiJUMiIsImVuZF9k
YXRlIjoiMjAxNy0wMy0yNCAwMDowMDowMCIsImlkIjoyLCJ0eXBlIjoicHJvamVjdCIsImhyZWYi
OiIvcHJvamVjdC8yIiwiY29zdGdyb3VwX3N5c3RlbV9pZCI6MSwiZGVzY3JpcHRpb24iOiJsYXNk
amZcdTAwZjZ2alx1MDBmNmFsc2RqZmEiLCJzaG9ydG5hbWUiOiJUZXN0MiIsInN0YXJ0X2RhdGUi
OiIyMDE3LTAzLTE3IDAwOjAwOjAwIn0seyJhYmJyZXZpYXRpb24iOiJURVAiLCJlbmRfZGF0ZSI6
IjIwMTctMDYtMTAgMDA6MDA6MDAiLCJ3b3JrcGhhc2VfaWQiOjEsInN0YXR1c19pZCI6MSwicHJv
amVjdG51bWJlciI6IjAzIiwic3RhcnRfZGF0ZSI6IjIwMTctMDMtMjQgMDA6MDA6MDAiLCJkZXNj
cmlwdGlvbiI6IlRlc3QiLCJjb3N0Z3JvdXBfc3lzdGVtX2lkIjoxLCJzaG9ydG5hbWUiOiJUZXN0
UHJvamVrdCIsImhyZWYiOiIvcHJvamVjdC8zIiwidHlwZSI6InByb2plY3QiLCJpZCI6M31dfX47
Cn0K
ewogICAgIm5hbWUiOiAiRHluYW1pY0ZpZWxkSnNvbkFQSSIsCiAgICAidmVyc2lvbiI6ICI2LjAu
MSIsCiAgICAiZnJhbWV3b3JrIjogWwogICAgICAgICI2LjAueCIKICAgIF0sCiAgICAidmVuZG9y
IjogewogICAgICAgICJuYW1lIjogICJQZXJsLVNlcnZpY2VzLmRlIiwKICAgICAgICAidXJsIjog
Imh0dHA6Ly93d3cucGVybC1zZXJ2aWNlcy5kZSIKICAgIH0sCiAgICAibGljZW5zZSI6ICJHTlUg
QUZGRVJPIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UgVmVyc2lvbiAzLCBOb3ZlbWJlciAyMDA3IiwK
ICAgICJkZXNjcmlwdGlvbiIgOiB7CiAgICAgICAgImVuIjogIlVzZSBhIEpTT04gQVBJIGFzIGEg
RHluYW1pY0ZpZWxkIGJhY2tlbmQiLAogICAgICAgICJkZSI6ICJWZXJ3ZW5kZSBlaW5lIEpTT04t
QVBJIGFscyBCYWNrZW5kIGbDvHIgRHluYW1pc2NoZSBGZWxkZXIiCiAgICB9LAogICAgInJlcXVp
cmVzIiA6IHsKICAgICAgICAibW9kdWxlIiA6IHsKICAgICAgICAgICAgIk1JTUU6OkJhc2U2NCIg
OiAiMy4xMyIsCiAgICAgICAgICAgICJKU09OOjpQYXRoIiA6ICIwLjIwNSIKICAgICAgICB9CiAg
ICB9Cn0K
PWhlYWQxIE5BTUUKCkR5bmFtaWNGaWVsZEpzb25BUEkKCj1oZWFkMSBERVNDUklQVElPTgoKVGhp
cyBhZGRvbiBhbGxvd3MgeW91IHRvIGRlZmluZSBEeW5hbWljRmllbGRzIHRoYXQgZ2V0cyB0aGUg
InBvc3NpYmxlIHZhbHVlcyIgZnJvbSBhIEpTT04gQVBJLgpDdXJyZW50bHkgdGhpcyBhZGRvbiBz
dXBwb3J0cyBvbmx5IHNpbmdsZSBzZWxlY3RzLgoKV2hlbiBjcmVhdGluZyB0aGUgZHluYW1pYyBm
aWVsZCwgeW91IGNhbiBkZWZpbmUgdGhlIFVSTCwgYSB1c2VybmFtZS9wYXNzd29yZCBjb21iaW5h
dGlvbiBvciBhbgphY2Nlc3MgdG9rZW4sIGFuZCBKU09OUGF0aHMgKHNlZSBMPGh0dHBzOi8vbWV0
YWNwYW4ub3JnL3BvZC9KU09OOjpQYXRoPikuCgpXaXRoIHRob3NlIEpTT05QYXRocyB5b3UgY2Fu
IGRlZmluZSB3aGF0IGVsZW1lbnRzIHNob3VsZCBiZSB0aGUga2V5cyBhbmQgd2hhdCBlbGVtZW50
cyBhcmUgdGhlCnZhbHVlcyBmb3IgdGhlIGRyb3Bkb3duLgoKPWhlYWQxIFJFUE9TSVRPUlkgQU5E
IEJVR1RSQUNLRVIKClRoZSBjb2RlIHJlcG9zaXRvcnkgYW5kIGEgYnVndHJhY2tlciBjYW4gYmUg
Zm91bmQgYXQgTDxodHRwOi8vZ2l0aHViLmNvbS9yZW5lZWIvb3Rycy1EeW5hbWljRmllbGRKc29u
QVBJPi4KCj1oZWFkMSBST0FETUFQCgpUaG9zZSBmZWF0dXJlcyBuZWVkIHRvIGJlIGltcGxlbWVu
dGVkIChzcG9uc29ycyB3ZWxjb21lKToKCj1vdmVyIDQKCj1pdGVtICogcmV0cmlldmUgYWNjZXNz
IHRva2VuIChlLmcuIE9BdXRoMikgYmVmb3JlIHRoZSByZXF1ZXN0IGlzIGRvbmUuCgo9aXRlbSAq
IFN1cHBvcnQgbXVsdGlzZWxlY3QgZmllbGRzCgo9YmFjawoKPWhlYWQxIFNVUFBPUlQKCklmIHlv
dSBuZWVkIGZ1cnRoZXIgc3VwcG9ydCwgd2FudCB0byBwYXkgZm9yIGEgZmVhdHVyZSBvciBhbnkg
T1RSUyBzZXJ2aWNlcywgcGxlYXNlIGRyb3AgbWUgYSBsaW5lIGF0Ckw8b3BhckBwZXJsLXNlcnZp
Y2VzLmRlPi4KCj1oZWFkMSBBVVRIT1IKCihjKSAyMDE1IFJlbmVlIEJhZWNrZXIsIEM8aW5mb0Bw
ZXJsLXNlcnZpY2VzLmRlPgoK
Ly8gLS0KLy8gQ29yZS5BZ2VudC5BZG1pbi5EeW5hbWljRmllbGRKc29uQVBJLmpzIC0gcHJvdmlk
ZXMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyBmb3IgdGhlIE11bHRpc2VsZWN0IER5bmFt
aWMgRmllbGRzLgovLyBDb3B5cmlnaHQgKEMpIDIwMTUgUGVybC1TZXJ2aWNlcy5kZSwgaHR0cDov
L3Blcmwtc2VydmljZXMuZGUKLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09M
VVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUg
Q09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQovLyBkaWQgbm90
IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwu
dHh0LgovLyAtLQoKInVzZSBzdHJpY3QiOwoKdmFyIENvcmUgPSBDb3JlIHx8IHt9OwpDb3JlLkFn
ZW50ID0gQ29yZS5BZ2VudCB8fCB7fTsKQ29yZS5BZ2VudC5BZG1pbiA9IENvcmUuQWdlbnQuQWRt
aW4gfHwge307CgovKioKICogQG5hbWVzcGFjZQogKiBAZXhwb3J0cyBUYXJnZXROUyBhcyBDb3Jl
LkFnZW50LkFkbWluLkR5bmFtaWNGaWVsZE11bHRpc2VsZWN0CiAqIEBkZXNjcmlwdGlvbgogKiAg
ICAgIFRoaXMgbmFtZXNwYWNlIGNvbnRhaW5zIHRoZSBzcGVjaWFsIG1vZHVsZSBmdW5jdGlvbnMg
Zm9yIHRoZSBEeW5hbWljRmllbGRNdWx0aXNlbGVjdCBtb2R1bGUuCiAqLwpDb3JlLkFnZW50LkFk
bWluLkR5bmFtaWNGaWVsZEpzb25BUEkgPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgLyoq
CiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7c3RyaW5nfSBJRFNlbGVjdG9yLCBpZCBv
ZiB0aGUgcHJlc3NlZCByZW1vdmUgdmFsdWUgYnV0dG9uLgogICAgICogQHJldHVybiBub3RoaW5n
CiAgICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyBhIHZhbHVlIGZyb20gcG9zc2libGUg
dmFsdWVzIGxpc3QgYW5kIGNyZWF0ZXMgYSBzdHViIGlucHV0IHNvCiAgICAgKiAgICAgIHRoZSBz
ZXJ2ZXIgY2FuIGlkZW50aWZ5IGlmIGEgdmFsdWUgaXMgZW1wdHkgb3IgZGVsZXRlZCAodXNlZnVs
IGZvciBzZXJ2ZXIgdmFsaWRhdGlvbikKICAgICAqICAgICAgSXQgYWxzbyBkZWxldGVzIHRoZSBQ
YXJhbSBmcm9tIHRoZSBEZWZhdWx0UGFyYW1zIGxpc3QKICAgICAqLwogICAgVGFyZ2V0TlMuUmVt
b3ZlUGFyYW0gPSBmdW5jdGlvbiAoSURTZWxlY3Rvcil7CgogICAgICAgIC8vIGNvcHkgSFRNTCBj
b2RlIGZvciBhbiBpbnB1dCByZXBsYWNlbWVudCBmb3IgdGhlIGRlbGV0ZWQgdmFsdWUKICAgICAg
ICB2YXIgJENsb25lID0gJCgnLkRlbGV0ZWRQYXJhbScpLmNsb25lKCksCgogICAgICAgIC8vIGdl
dCB0aGUgaW5kZXggb2YgdGhlIHZhbHVlIHRvIGRlbGV0ZSAoaXRzIGFsd2F5cyB0aGUgc2Vjb25k
IGVsZW1lbnQgKDEpIGluIHRoaXMgUmVnRXgKICAgICAgICAkT2JqZWN0SW5kZXggPSBJRFNlbGVj
dG9yLm1hdGNoKC8uK18oXGQrKS8pWzFdLAoKICAgICAgICAvLyBnZXQgdGhlIGtleSBuYW1lIHRv
IHJlbW92ZSBpdCBmcm9tIHRoZSBkZWZhdWx0cyBzZWxlY3QKICAgICAgICAkS2V5ID0gJCgnI0tl
eV8nICsgJE9iamVjdEluZGV4KS52YWwoKTsKCiAgICAgICAgLy8gc2V0IHRoZSBpbnB1dCByZXBs
YWNlbWVudCBhdHRyaWJ1dGVzIHRvIG1hdGNoIHRoZSBkZWxldGVkIG9yaWdpbmFsIHZhbHVlCiAg
ICAgICAgLy8gbmV3IHZhbHVlIGFuZCBvdGhlciBjb250cm9scyBhcmUgbm90IG5lZWRlZCBhbnlt
b3JlCiAgICAgICAgJENsb25lLmF0dHIoJ2lkJywgJ0tleScgKyAnXycgKyAkT2JqZWN0SW5kZXgp
OwogICAgICAgICRDbG9uZS5hdHRyKCduYW1lJywgJ0tleScgKyAnXycgKyAkT2JqZWN0SW5kZXgp
OwogICAgICAgICRDbG9uZS5yZW1vdmVDbGFzcygnRGVsZXRlZFBhcmFtJyk7CgogICAgICAgIC8v
IGFkZCB0aGUgaW5wdXQgcmVwbGFjZW1lbnQgdG8gdGhlIG1hcHBpbmcgdHlwZSBzbyBpdCBjYW4g
YmUgcGFyc2VkIGFuZCBkaXN0aW5ndWlzaCBmcm9tCiAgICAgICAgLy8gZW1wdHkgdmFsdWVzIGJ5
IHRoZSBzZXJ2ZXIKICAgICAgICAkKCcjJysgSURTZWxlY3RvcikuY2xvc2VzdCgnZmllbGRzZXQn
KS5hcHBlbmQoJENsb25lKTsKCiAgICAgICAgLy8gcmVtb3ZlIHRoZSB2YWx1ZSBmcm9tIGRlZmF1
bHQgbGlzdAogICAgICAgIGlmICgkS2V5ICE9PSAnJyl7CiAgICAgICAgICAgICQoJyNEZWZhdWx0
UGFyYW0nKS5maW5kKCJvcHRpb25bdmFsdWU9JyIrICRLZXkgKyInXSIpLnJlbW92ZSgpOwogICAg
ICAgIH0KCiAgICAgICAgLy8gcmVtb3ZlIHBvc3NpYmxlIHZhbHVlCiAgICAgICAgJCgnIycrIElE
U2VsZWN0b3IpLnBhcmVudCgpLnJlbW92ZSgpOwoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9
OwoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge09iamVjdH0gUGFyYW1J
bnNlcnQsIEhUTUwgY29udGFpbmVyIG9mIHRoZSB2YWx1ZSBtYXBwaW5nIHJvdwogICAgICogQHJl
dHVybiBub3RoaW5nCiAgICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gYWRkIGEgbmV3IHZhbHVlIHRv
IHRoZSBwb3NzaWJsZSB2YWx1ZXMgbGlzdAogICAgICovCiAgICBUYXJnZXROUy5BZGRQYXJhbSA9
IGZ1bmN0aW9uIChQYXJhbUluc2VydCkgewoKICAgICAgICAvLyBjbG9uZSBrZXkgZGlhbG9nCiAg
ICAgICAgdmFyICRDbG9uZSA9ICQoJy5QYXJhbVRlbXBsYXRlJykuY2xvbmUoKSwKICAgICAgICAg
ICAgUGFyYW1Db3VudGVyID0gJCgnI1BhcmFtQ291bnRlcicpLnZhbCgpOwoKICAgICAgICAvLyBp
bmNyZW1lbnQga2V5IGNvdW50ZXIKICAgICAgICBQYXJhbUNvdW50ZXIgKys7CgogICAgICAgIC8v
IHJlbW92ZSB1bm5lY2Vzc2FyeSBjbGFzc2VzCiAgICAgICAgJENsb25lLnJlbW92ZUNsYXNzKCdI
aWRkZW4gUGFyYW1UZW1wbGF0ZScpOwoKICAgICAgICAvLyBhZGQgbmVlZGVkIGNsYXNzCiAgICAg
ICAgJENsb25lLmFkZENsYXNzKCdQYXJhbVJvdycpOwoKICAgICAgICAvLyBjb3B5IHZhbHVlcyBh
bmQgY2hhbmdlIGlkcyBhbmQgbmFtZXMKICAgICAgICAkQ2xvbmUuZmluZCgnOmlucHV0LCBhLlJl
bW92ZUJ1dHRvbicpLmVhY2goZnVuY3Rpb24oKXsKICAgICAgICAgICAgdmFyIElEID0gJCh0aGlz
KS5hdHRyKCdpZCcpOwogICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2lkJywgSUQgKyAnXycgKyBQ
YXJhbUNvdW50ZXIpOwogICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ25hbWUnLCBJRCArICdfJyAr
IFBhcmFtQ291bnRlcik7CgogICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdWYWxpZGF0ZV9S
ZXF1aXJlZCcpOwoKICAgICAgICAgICAgLy8gc2V0IGVycm9yIGNvbnRyb2xzCiAgICAgICAgICAg
ICQodGhpcykucGFyZW50KCkuZmluZCgnIycgKyBJRCArICdFcnJvcicpLmF0dHIoJ2lkJywgSUQg
KyAnXycgKyBQYXJhbUNvdW50ZXIgKyAnRXJyb3InKTsKICAgICAgICAgICAgJCh0aGlzKS5wYXJl
bnQoKS5maW5kKCcjJyArIElEICsgJ0Vycm9yJykuYXR0cignbmFtZScsIElEICsgJ18nICsgUGFy
YW1Db3VudGVyICsgJ0Vycm9yJyk7CgogICAgICAgICAgICAkKHRoaXMpLnBhcmVudCgpLmZpbmQo
JyMnICsgSUQgKyAnU2VydmVyRXJyb3InKS5hdHRyKCdpZCcsIElEICsgJ18nICsgUGFyYW1Db3Vu
dGVyICsgJ1NlcnZlckVycm9yJyk7CiAgICAgICAgICAgICQodGhpcykucGFyZW50KCkuZmluZCgn
IycgKyBJRCArICdTZXJ2ZXJFcnJvcicpLmF0dHIoJ25hbWUnLCBJRCArICdfJyArIFBhcmFtQ291
bnRlciArICdTZXJ2ZXJFcnJvcicpOwoKICAgICAgICAgICAgLy8gYWRkIGV2ZW50IGhhbmRsZXIg
dG8gcmVtb3ZlIGJ1dHRvbgogICAgICAgICAgICBpZiggJCh0aGlzKS5oYXNDbGFzcygnUmVtb3Zl
QnV0dG9uJykgKSB7CgogICAgICAgICAgICAgICAgLy8gYmluZCBjbGljayBmdW5jdGlvbiB0byBy
ZW1vdmUgYnV0dG9uCiAgICAgICAgICAgICAgICAkKHRoaXMpLmJpbmQoJ2NsaWNrJywgZnVuY3Rp
b24gKCkgewogICAgICAgICAgICAgICAgICAgIFRhcmdldE5TLlJlbW92ZVBhcmFtKCQodGhpcyku
YXR0cignaWQnKSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgJENsb25lLmZpbmQo
J2xhYmVsJykuZWFjaChmdW5jdGlvbigpewogICAgICAgICAgICB2YXIgRk9SID0gJCh0aGlzKS5h
dHRyKCdmb3InKTsKICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdmb3InLCBGT1IgKyAnXycgKyBQ
YXJhbUNvdW50ZXIpOwogICAgICAgIH0pOwoKICAgICAgICAvLyBhcHBlbmQgdG8gY29udGFpbmVy
CiAgICAgICAgUGFyYW1JbnNlcnQuYXBwZW5kKCRDbG9uZSk7CgogICAgICAgIC8vIHNldCBuZXcg
dmFsdWUgZm9yIEtleU5hbWUKICAgICAgICAkKCcjUGFyYW1Db3VudGVyJykudmFsKFBhcmFtQ291
bnRlcik7CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CgogICAgcmV0dXJuIFRhcmdldE5T
Owp9KENvcmUuQWdlbnQuQWRtaW4uRHluYW1pY0ZpZWxkSnNvbkFQSSB8fCB7fSkpOwo=
2018-03-23 20:37:59otrsvm-Standard-PC-i440FX-PIIX-1996