Re: xml-parse: file position of elements
Joseph Donaldson <[email protected]> Mon, 31 Jan 2022 23:57:33 +0000 (UTC)
| Newsgroups | gmane.lisp.scheme.bigloo |
|---|---|
| Message-ID | <[email protected]> |
------=_Part_4593879_850168265.1643673453012
Content-Type: multipart/alternative;
boundary="----=_Part_4593878_1651195530.1643673453009"
------=_Part_4593878_1651195530.1643673453009
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Hello, Sven,
Please find attached a modified version of the xml module found in the bigl=
oo web library. I believe it accomplishes what you requested. By default, t=
he xml-parse procedure returns the same output as the original. However, if=
you provide your own element constructing procedure taking the start-pos o=
f the element, the tag of the element, a list of attributes, and the body, =
you can obtain the starting position of each element and use it as you plea=
se. A simple of way of doing this (shown below) is to use the list procedur=
e as the element constructor.
(xml-parse input-port :procedure list)
Note the start-pos is the character position before the <=C2=A0 character o=
f the element. If you want it to be the position of the < character, the co=
de can be updated.
Let me know if it works for you.
If it is generally useful, we can request Manuel to merge the changes.
Best Regards,Joe Donaldson
On Sunday, January 30, 2022, 12:27:24 AM PST, Sven Hartrumpf <hartrumpf=
@gmx.net> wrote: =20
=20
Hello Joe.
Joseph Donaldson wrote 2022-01-30 02:37:
> The current implementation of xml-parse does not track the file offset of
> the xml elements it parses. It may be possible to modify it do so. Can yo=
u
> elaborate a bit further on your exact use case?
I need to propose patches for quite complex xml files.
At the beginning of the process, I need to record the position of
some xml elements in an "offset file".
Next is a long process of tools that leads to a patch; this tool chain
should not care about offsets and does treat only some parts ot the xml.
At the end, I would like to use the offset file in order to patch the
original file or to show the change to a human supervisor.
Ciao
Sven
=20
------=_Part_4593878_1651195530.1643673453009
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<html><head></head><body><div class=3D"ydp22a06cf0yahoo-style-wrap" style=
=3D"font-family:Helvetica Neue, Helvetica, Arial, sans-serif;font-size:13px=
;"><div></div>
<div dir=3D"ltr" data-setdir=3D"false">Hello, Sven,</div><div dir=
=3D"ltr" data-setdir=3D"false"><br></div><div dir=3D"ltr" data-setdir=3D"fa=
lse">Please find attached a modified version of the xml module found in the=
bigloo web library. I believe it accomplishes what you requested. By defau=
lt, the xml-parse procedure returns the same output as the original. Howeve=
r, if you provide your own element constructing procedure taking the start-=
pos of the element, the tag of the element, a list of attributes, and the b=
ody, you can obtain the starting position of each element and use it as you=
please. A simple of way of doing this (shown below) is to use the list pro=
cedure as the element constructor.</div><div dir=3D"ltr" data-setdir=3D"fal=
se"><br></div><div dir=3D"ltr" data-setdir=3D"false">(xml-parse input-port =
:procedure list)</div><div dir=3D"ltr" data-setdir=3D"false"><br></div><div=
dir=3D"ltr" data-setdir=3D"false">Note the start-pos is the character posi=
tion before the < character of the element. If you want it to be t=
he position of the < character, the code can be updated.</div><div dir=
=3D"ltr" data-setdir=3D"false"><br></div><div dir=3D"ltr" data-setdir=3D"fa=
lse">Let me know if it works for you.</div><div dir=3D"ltr" data-setdir=3D"=
false"><br></div><div dir=3D"ltr" data-setdir=3D"false">If it is generally =
useful, we can request Manuel to merge the changes.<br></div><div dir=3D"lt=
r" data-setdir=3D"false"><br></div><div dir=3D"ltr" data-setdir=3D"false">B=
est Regards,</div><div dir=3D"ltr" data-setdir=3D"false">Joe Donaldson</div=
><div dir=3D"ltr" data-setdir=3D"false"><br></div><div dir=3D"ltr" data-set=
dir=3D"false"><br></div><div><br></div>
=20
</div><div id=3D"ydpe9b18956yahoo_quoted_4655331903" class=3D"ydpe9=
b18956yahoo_quoted">
<div style=3D"font-family:'Helvetica Neue', Helvetica, Arial, s=
ans-serif;font-size:13px;color:#26282a;">
=20
<div>
On Sunday, January 30, 2022, 12:27:24 AM PST, Sven Hart=
rumpf <[email protected]> wrote:
</div>
<div><br></div>
<div><br></div>
<div><div dir=3D"ltr">Hello Joe.<br clear=3D"none"><br clea=
r=3D"none">Joseph Donaldson wrote 2022-01-30 02:37:<br clear=3D"none">> =
The current implementation of xml-parse does not track the file offset of<b=
r clear=3D"none">> the xml elements it parses. It may be possible to mod=
ify it do so. Can you<br clear=3D"none">> elaborate a bit further on you=
r exact use case?<br clear=3D"none"><br clear=3D"none">I need to propose pa=
tches for quite complex xml files.<br clear=3D"none">At the beginning of th=
e process, I need to record the position of<br clear=3D"none">some xml elem=
ents in an "offset file".<br clear=3D"none">Next is a long process of tools=
that leads to a patch; this tool chain<br clear=3D"none">should not care a=
bout offsets and does treat only some parts ot the xml.<br clear=3D"none">A=
t the end, I would like to use the offset file in order to patch the<br cle=
ar=3D"none">original file or to show the change to a human supervisor.<br c=
lear=3D"none"><br clear=3D"none">Ciao<div class=3D"ydpe9b18956yqt7806491209=
" id=3D"ydpe9b18956yqtfd83890"><br clear=3D"none">Sven<br clear=3D"none"></=
div></div></div>
</div>
</div></body></html>
------=_Part_4593878_1651195530.1643673453009--
------=_Part_4593879_850168265.1643673453012
Content-Type: text/x-scheme
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="=?UTF-8?b?eG1sLnNjbQ==?="
Content-ID: <[email protected]>
Oyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0qLwo7KiAgICBzZXJyYW5vL3ByZ20vcHJvamVjdC9iaWdsb28vYmlnbG9v
L2FwaS93ZWIvc3JjL0xsaWIveG1sLnNjbSAgICAgICovCjsqICAgIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgKi8KOyogICAg
QXV0aG9yICAgICAgOiAgTWFudWVsIFNlcnJhbm8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqLwo7KiAgICBDcmVhdGlvbiAgICA6ICBGcmkgTWFyIDExIDE2OjIzOjUzIDIwMDUg
ICAgICAgICAgICAgICAgICAgICAgICAgICovCjsqICAgIExhc3QgY2hhbmdlIDogIFN1biBPY3Qg
IDcgMDg6NDY6MDMgMjAxOCAoc2VycmFubykgICAgICAgICAgICAgICAgKi8KOyogICAgQ29weXJp
Z2h0ICAgOiAgMjAwNS0xOCBNYW51ZWwgU2VycmFubyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqLwo7KiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tICAgICovCjsqICAgIFhNTCBwYXJzaW5nICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KOyo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwoK
OyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLwo7KiAgICBUaGUgbW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCjsqLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKG1vZHVs
ZSBfX3dlYl94bWwKCiAgIChvcHRpb24gKHNldCEgKmRsb3Blbi1pbml0LWdjKiAjdCkpCiAgIAog
ICAoZXhwb3J0ICh4bWwtcGFyc2U6OnBhaXItbmlsIHBvcnQ6OmlucHV0LXBvcnQKCQkJCSMha2V5
CgkJCQkoY29udGVudC1sZW5ndGggMCkKCQkJCShwcm9jZWR1cmUgKGxhbWJkYSAoc3RhcnQtcG9z
IHRhZyBhdHRyaWJzIGJvZHkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAobGlzdCB0YWcgYXR0cmlicyBib2R5KSkpCgkJCQkoc3BlY2lhbHMgJygpKQoJCQkJ
KHN0cmljdCAjdCkKCQkJCShlbmNvZGluZyAnVVRGLTgpCgkJCQkoZW9pICNmKSkKCSAgICh4bWwt
c3RyaW5nLWRlY29kZTo6YnN0cmluZyA6OmJzdHJpbmcpCgkgICAoeG1sLXN0cmluZy1kZWNvZGUh
Ojpic3RyaW5nIDo6YnN0cmluZykKCSAgICh4bWwtc3RyaW5nLWVuY29kZTo6YnN0cmluZyA6OmJz
dHJpbmcpCgkgICAocmVhZC14bWwgIyFvcHRpb25hbCAocG9ydDo6aW5wdXQtcG9ydCAoY3VycmVu
dC1pbnB1dC1wb3J0KSkpCgkgICAoeG1sLW1ldGFkYXRhIHhtbC10cmVlOjpwYWlyLW5pbCkpKQoK
OyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLwo7KiAgICB4bWwtcGFyc2UgLi4uICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCjsqLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKGRlZmlu
ZSAoeG1sLXBhcnNlOjpwYWlyLW5pbCBwb3J0OjppbnB1dC1wb3J0CgkJCSAgICAgIyFrZXkKCQkJ
ICAgICAoY29udGVudC1sZW5ndGggMCkKCQkJICAgICAocHJvY2VkdXJlIChsYW1iZGEgKHN0YXJ0
LXBvcyB0YWcgYXR0cmlicyBib2R5KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGxpc3QgdGFnIGF0dHJpYnMgYm9keSkpKQoJCQkgICAgIChzcGVjaWFscyAn
KCkpCgkJCSAgICAgKHN0cmljdCAjdCkKCQkJICAgICAoZW5jb2RpbmcgJ1VURi04KQoJCQkgICAg
IChlb2kgI2YpKQogICAod2hlbiAoZWxvbmc/IGNvbnRlbnQtbGVuZ3RoKQogICAgICAoc2V0ISBj
b250ZW50LWxlbmd0aCAoZWxvbmctPmZpeG51bSBjb250ZW50LWxlbmd0aCkpKQogICAod2hlbiAo
YW5kIChmaXhudW0/IGNvbnRlbnQtbGVuZ3RoKSAoPmZ4IGNvbnRlbnQtbGVuZ3RoIDApKQogICAg
ICAoaW5wdXQtcG9ydC1maWxsLWJhcnJpZXItc2V0ISBwb3J0IGNvbnRlbnQtbGVuZ3RoKSkKICAg
KHdoZW4gKD5meCBjb250ZW50LWxlbmd0aCAwKQogICAgICAoc2V0ISBjb250ZW50LWxlbmd0aCAo
K2Z4IGNvbnRlbnQtbGVuZ3RoIChpbnB1dC1wb3J0LXBvc2l0aW9uIHBvcnQpKSkpCiAgIChsZXQg
bG9vcCAoKGRlY29kZXIgKGxhbWJkYSAoeCkgeCkpKQogICAgICAobGV0ICgob2JqIChyZWFkL3Jw
IHhtbC1ncmFtbWFyIHBvcnQgcHJvY2VkdXJlIHByb2NlZHVyZSBzcGVjaWFscyBzdHJpY3QgZGVj
b2RlciBlbmNvZGluZyAoaW5wdXQtcG9ydC1wb3NpdGlvbiBwb3J0KSkpKQoJICh3aGVuIChhbmQg
KGZpeG51bT8gY29udGVudC1sZW5ndGgpICg+ZnggY29udGVudC1sZW5ndGggMCkpCgkgICAgKGlu
cHV0LXBvcnQtZmlsbC1iYXJyaWVyLXNldCEgcG9ydCAtMSkpCgkgKGNvbmQKCSAgICAoKGVvZi1v
YmplY3Q/IG9iaikKCSAgICAgJygpKQoJICAgICgob3IgKGFuZCAocHJvY2VkdXJlPyBlb2kpIChl
b2kgb2JqKSkKCQkgKGFuZCAoPmZ4IGNvbnRlbnQtbGVuZ3RoIDApCgkJICAgICAgKD49ZnggKGlu
cHV0LXBvcnQtcG9zaXRpb24gcG9ydCkgY29udGVudC1sZW5ndGgpKSkKCSAgICAgKGxpc3Qgb2Jq
KSkKCSAgICAoKGFuZCAocGFpcj8gb2JqKSAoZXE/ICd4bWwtZGVjbCAoY2FyIG9iaikpKQoJICAg
ICAobGV0ICgoZW5jIChhc3NxICdlbmNvZGluZyAoY2RyIG9iaikpKSkKCQkoaWYgZW5jCgkJICAg
IChjb25zIG9iaiAobG9vcCAoZ2V0LWRlY29kZXIgKGNkciBlbmMpIGVuY29kaW5nKSkpCgkJICAg
IChjb25zIG9iaiAobG9vcCBkZWNvZGVyKSkpKSkKCSAgICAoZWxzZQoJICAgICAoY29ucyBvYmog
KGxvb3AgZGVjb2RlcikpKSkpKSkKCjsqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KOyogICAgeG1sLXBhcnNlLWVy
cm9yIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwo7
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCihkZWZpbmUgKHhtbC1wYXJzZS1lcnJvciBtc2cgb2JqIG5hbWUgcG9z
KQogICAocmFpc2UKICAgIChpbnN0YW50aWF0ZTo6JmlvLXBhcnNlLWVycm9yCiAgICAgICAocHJv
YyAneG1sLXBhcnNlKQogICAgICAgKG1zZyBtc2cpCiAgICAgICAob2JqIG9iaikKICAgICAgIChm
bmFtZSBuYW1lKQogICAgICAgKGxvY2F0aW9uIHBvcykpKSkKCjsqLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KOyog
ICAgZXJyb3ItbGluZSAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqLwo7Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCihkZWZpbmUgKGVycm9yLWxpbmUgYyBwb3J0
KQogICAobGV0ICgobGluZSAocmVhZC1saW5lIHBvcnQpKSkKICAgICAgKHN0cmluZy1hcHBlbmQg
InsiIChzdHJpbmcgYykgIn0iIChpZiAoc3RyaW5nPyBsaW5lKSBsaW5lICIiKSkpKQoKOyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLwo7KiAgICBzcGVjaWFsIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICovCjsqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKGRlZmluZS1zdHJ1
Y3Qgc3BlY2lhbCB0YWcgYXR0cmlidXRlcyBib2R5IG93bmVyKQoKOyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwo7
KiAgICBjb2xsZWN0LXVwLXRvIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICovCjsqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKGRlZmluZSAoY29sbGVjdC11cC10byBz
dGFydC1wb3MgaWdub3JlIHRhZyBhdHRyaWJ1dGVzIHBvcnQgbWFrZSBzcGVjaWFscyBzdHJpY3Qg
ZGVjb2RlciBlbmNvZGluZykKICAgCiAgIChkZWZpbmUgKGNvbGxlY3QgaWdub3JlIHRhZ3MpCiAg
ICAgIChsZXQgKChuYW1lIChpbnB1dC1wb3J0LW5hbWUgcG9ydCkpCgkgICAgKHBvIChpbnB1dC1w
b3J0LXBvc2l0aW9uIHBvcnQpKSkKCSAobGV0IGxvb3AgKChhY2MgJygpKQoJCSAgICAoaXRlbSAo
aWdub3JlKSkpCgkgICAgKGNvbmQKCSAgICAgICAoKHN5bWJvbD8gaXRlbSkKCQkoY29uZAoJCSAg
ICgoZXE/IGl0ZW0gdGFnKQoJCSAgICAobWFrZSBzdGFydC1wb3MgdGFnIGF0dHJpYnV0ZXMgKHJl
dmVyc2UhIGFjYykpKQoJCSAgIChzdHJpY3QKCQkgICAgKHhtbC1wYXJzZS1lcnJvciAiSWxsZWdh
bCBjbG9zaW5nIHRhZyIKCQkgICAgICAgKGZvcm1hdCAiYH5hJyBleHBlY3RlZCwgYH5hJyBwcm92
aWRlZCIKCQkJICB0YWcgaXRlbSkKCQkgICAgICAgbmFtZSBwbykpCgkJICAgKGVsc2UKCQkgICAg
KG1ha2Ugc3RhcnQtcG9zIHRhZyBhdHRyaWJ1dGVzIChyZXZlcnNlISBhY2MpKSkpKQoJICAgICAg
ICgoc3BlY2lhbD8gaXRlbSkKCQkobGV0ICgobml0ZW0gKG1ha2Ugc3RhcnQtcG9zIChzcGVjaWFs
LXRhZyBpdGVtKQoJCQkJKHNwZWNpYWwtYXR0cmlidXRlcyBpdGVtKQoJCQkJKHNwZWNpYWwtYm9k
eSBpdGVtKSkpKQoJCSAgIChpZiAobWVtcSAoc3BlY2lhbC10YWcgaXRlbSkgdGFncykKCQkgICAg
ICAgKGxvb3AgYWNjIG5pdGVtKQoJCSAgICAgICAoYmVnaW4KCQkJICAobGlzdCAobWFrZSBzdGFy
dC1wb3MgdGFnIGF0dHJpYnV0ZXMgKHJldmVyc2UhIGFjYykpIG5pdGVtKSkpKSkKCSAgICAgICAo
KGVvZi1vYmplY3Q/IGl0ZW0pCgkJKGlmIHN0cmljdAoJCSAgICAoeG1sLXBhcnNlLWVycm9yCgkJ
ICAgICAgIChmb3JtYXQgIlByZW1hdHVyZSBlbmQgb2YgbGluZSwgZXhwZWN0aW5nIHRhZyBgfmEn
IgoJCQkgIHRhZykKCQkgICAgICAgaXRlbSBuYW1lIHBvKQoJCSAgICAobWFrZSBzdGFydC1wb3Mg
dGFnIGF0dHJpYnV0ZXMgKHJldmVyc2UhIGFjYykpKSkKCSAgICAgICAoZWxzZQoJCShsZXQgKChw
byAoaW5wdXQtcG9ydC1sYXN0LXRva2VuLXBvc2l0aW9uIHBvcnQpKSkKCQkgICAobG9vcCAoZWNv
bnMgaXRlbSBhY2MgKGxpc3QgJ2F0IG5hbWUgcG8pKSAoaWdub3JlKSkpKSkpKSkKCiAgIChsZXQg
KChzcGVjIChhc3NxIHRhZyBzcGVjaWFscykpKQogICAgICAoY29uZAoJICgobm90IHNwZWMpCgkg
IChjb2xsZWN0IGlnbm9yZSAnKCkpKQoJICgobnVsbD8gKGNkciBzcGVjKSkKCSAgKG1ha2Ugc3Rh
cnQtcG9zIHRhZyBhdHRyaWJ1dGVzICcoKSkpCgkgKChwcm9jZWR1cmU/IChjZHIgc3BlYykpCgkg
IChtYWtlIHN0YXJ0LXBvcyB0YWcgYXR0cmlidXRlcyAoKGNkciBzcGVjKSBwb3J0KSkpCgkgKChw
YWlyPyAoY2RyIHNwZWMpKQoJICAobGV0ICgoaWdub3JlIChsYW1iZGEgKCkKCQkJICAgKHJlYWQv
cnAgeG1sLWdyYW1tYXIgcG9ydAoJCQkJICAgIChsYW1iZGEgKHQgYSBiKSAoc3BlY2lhbCB0IGEg
YiB0YWcpKQoJCQkJICAgIG1ha2UKCQkJCSAgICBzcGVjaWFscyBzdHJpY3QgZGVjb2RlciBlbmNv
ZGluZyAoaW5wdXQtcG9ydC1wb3NpdGlvbiBwb3J0KSkpKSkgCgkgICAgIChjb2xsZWN0IGlnbm9y
ZSAoY2RyIHNwZWMpKSkpCgkgKGVsc2UKCSAgKGVycm9yICJ4bWwtcGFyc2UiICJJbGxlZ2FsIHNw
ZWNpYWwgaGFuZGxlciIgc3BlYykpKSkpCgo7Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCjsqICAgIGF0dHJpYnV0
ZS12YWx1ZS1ncmFtbWFyIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ki8KOyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLwooZGVmaW5lIGF0dHJpYnV0ZS12YWx1ZS1ncmFtbWFyCiAgIChy
ZWd1bGFyLWdyYW1tYXIgKHN0cmljdCB0YWcpCiAgICAgICgoKyAoaW4gIiBcdFxuXHIiKSkKICAg
ICAgIChpZ25vcmUpKQogICAgICAoKDogI1wiICgqIChvciAob3V0ICNcXCAjXCIpICg6ICNcXCBh
bGwpKSkgI1wiKQogICAgICAgKHRoZS1zdWJzdHJpbmcgMSAoLWZ4ICh0aGUtbGVuZ3RoKSAxKSkp
CiAgICAgICgoOiAjXCcgKCogKG9yIChvdXQgI1xcICNcJykgKDogI1xcIGFsbCkpKSAjXCcpCiAg
ICAgICAodGhlLXN1YnN0cmluZyAxICgtZnggKHRoZS1sZW5ndGgpIDEpKSkKICAgICAgKCg6ICgr
IGRpZ2l0KSAoPyAob3IgIiUiICJweCIgImNtIiAiZW0iICJtbSIgImluY2giKSkpCiAgICAgICAo
aWYgc3RyaWN0CgkgICAoeG1sLXBhcnNlLWVycm9yIChmb3JtYXQgIklsbGVnYWwgYH5hJyBhdHRy
aWJ1dGUgdmFsdWUiIHRhZykKCQkJICAgICh0aGUtc3RyaW5nKQoJCQkgICAgKGlucHV0LXBvcnQt
bmFtZSAodGhlLXBvcnQpKQoJCQkgICAgKGlucHV0LXBvcnQtcG9zaXRpb24gKHRoZS1wb3J0KSkp
CgkgICAodGhlLXN0cmluZykpKQogICAgICAoKCsgKG91dCAiIFx0XG5ccjw+KCl7fVtdQCFcIicv
IikpCiAgICAgICAoaWYgc3RyaWN0CgkgICAoeG1sLXBhcnNlLWVycm9yIChmb3JtYXQgIklsbGVn
YWwgYH5hJyBhdHRyaWJ1dGUgY2hhcmFjdGVyIiB0YWcpCgkJCSAgICAodGhlLXN0cmluZykKCQkJ
ICAgIChpbnB1dC1wb3J0LW5hbWUgKHRoZS1wb3J0KSkKCQkJICAgIChpbnB1dC1wb3J0LXBvc2l0
aW9uICh0aGUtcG9ydCkpKQoJICAgKHRoZS1zdHJpbmcpKSkKICAgICAgKGVsc2UKICAgICAgIChs
ZXQgKChjICh0aGUtZmFpbHVyZSkpKQoJICAoaWYgKG5vdCAoZW9mLW9iamVjdD8gYykpCgkgICAg
ICAoaWYgKG9yIHN0cmljdAoJCSAgICAgIChub3QgKG9yIChjaGFyPT8gYyAjXHNwYWNlKQoJCQkg
ICAgICAgKGNoYXI9PyBjICNcTmV3bGluZSkKCQkJICAgICAgIChjaGFyPT8gYyAjXD4pKSkpCgkJ
ICAoeG1sLXBhcnNlLWVycm9yCgkJICAgKGZvcm1hdCAiSWxsZWdhbCBgfmEnIGF0dHJpYnV0ZSBj
aGFyYWN0ZXIiIHRhZykKCQkgICAoZXJyb3ItbGluZSBjICh0aGUtcG9ydCkpCgkJICAgKGlucHV0
LXBvcnQtbmFtZSAodGhlLXBvcnQpKQoJCSAgIChpbnB1dC1wb3J0LXBvc2l0aW9uICh0aGUtcG9y
dCkpKQoJCSAgIiAiKQoJICAgICAgKHhtbC1wYXJzZS1lcnJvcgoJICAgICAgIChmb3JtYXQgIlBy
ZW1hdHVyZSBlbmQgb2YgbGluZSBmb3IgdGFnIGB+YScgYXR0cmlidXRlIiB0YWcpCgkgICAgICAg
YwoJICAgICAgIChpbnB1dC1wb3J0LW5hbWUgKHRoZS1wb3J0KSkKCSAgICAgICAoLWZ4IChpbnB1
dC1wb3J0LXBvc2l0aW9uICh0aGUtcG9ydCkpIDEpKSkpKSkpCiAgICAgIAo7Ki0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSovCjsqICAgIGF0dHJpYnV0ZS1ncmFtbWFyIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKi8KOyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwooZGVmaW5lIGF0dHJpYnV0ZS1n
cmFtbWFyCiAgIChyZWd1bGFyLWdyYW1tYXIgKChpZCAoOiAoaW4gKCJhekFaIikgIl8iKSAoKiAo
aW4gKCJhekFaMDkiKSAiOl8tIikpKSkKCQkgICAgIHRhZwoJCSAgICAgc3RyaWN0CgkJICAgICBk
ZWNvZGVyKQogICAgICAoKCsgKGluICIgXHRcblxyIikpCiAgICAgICAoaWdub3JlKSkKICAgICAg
KCg6IGlkICI9IikKICAgICAgIChsZXQqICgoa2V5ICh0aGUtc3Vic3RyaW5nIDAgKC1meCAodGhl
LWxlbmd0aCkgMSkpKQoJICAgICAgKHZhbCAocmVhZC9ycCBhdHRyaWJ1dGUtdmFsdWUtZ3JhbW1h
ciAodGhlLXBvcnQpIHN0cmljdCB0YWcpKSkKCSAgKGNvbnMgKHN0cmluZy0+c3ltYm9sIChkZWNv
ZGVyIGtleSkpIChkZWNvZGVyIHZhbCkpKSkKICAgICAgKCg6IGlkICgrIGJsYW5rKSAiPSIpCiAg
ICAgICAobGV0KiAoKGtleSAodGhlLXN1YnN0cmluZyAwICgtZnggKHRoZS1sZW5ndGgpIDIpKSkK
CSAgICAgICh2YWwgKHJlYWQvcnAgYXR0cmlidXRlLXZhbHVlLWdyYW1tYXIgKHRoZS1wb3J0KSBz
dHJpY3QgdGFnKSkpCgkgIChsZXQgbG9vcCAoKGkgKC1meCAoc3RyaW5nLWxlbmd0aCBrZXkpIDEp
KSkKCSAgICAgKGNhc2UgKHN0cmluZy1yZWYga2V5IGkpCgkJKCgjXHNwYWNlICNcdGFiICNcTmV3
bGluZSkKCQkgKGxvb3AgKC1meCBpIDEpKSkKCQkoZWxzZQoJCSAoc2V0ISBrZXkgKHN1YnN0cmlu
ZyBrZXkgMCAoKyBpIDEpKSkpKSkKCSAgKGNvbnMgKHN0cmluZy0+c3ltYm9sIChkZWNvZGVyIGtl
eSkpIChkZWNvZGVyIHZhbCkpKSkKICAgICAgKCg6IGlkKQogICAgICAgKGxldCogKChrZXkgKGRl
Y29kZXIgKHRoZS1zdHJpbmcpKSkpCgkgIChjb25zIChzdHJpbmctPnN5bWJvbCBrZXkpIGtleSkp
KQogICAgICAoKG9yICIvPiIgIj4iKQogICAgICAgKHRoZS1zeW1ib2wpKQogICAgICAoZWxzZQog
ICAgICAgKGxldCAoKGMgKHRoZS1mYWlsdXJlKSkpCgkgIChpZiAobm90IChlb2Ytb2JqZWN0PyBj
KSkKCSAgICAgICh4bWwtcGFyc2UtZXJyb3IgIklsbGVnYWwgYXR0cmlidXRlIGNoYXJhY3RlciIK
CQkJICAgICAgIChlcnJvci1saW5lIGMgKHRoZS1wb3J0KSkKCQkJICAgICAgIChpbnB1dC1wb3J0
LW5hbWUgKHRoZS1wb3J0KSkKCQkJICAgICAgIChpbnB1dC1wb3J0LXBvc2l0aW9uICh0aGUtcG9y
dCkpKQoJICAgICAgKHhtbC1wYXJzZS1lcnJvcgoJICAgICAgIChmb3JtYXQgIlByZW1hdHVyZSBl
bmQgb2YgbGluZSwgZXhwZWN0aW5nIHRhZyBgfmEnIiB0YWcpCgkgICAgICAgYwoJICAgICAgIChp
bnB1dC1wb3J0LW5hbWUgKHRoZS1wb3J0KSkKCSAgICAgICAoLWZ4IChpbnB1dC1wb3J0LXBvc2l0
aW9uICh0aGUtcG9ydCkpIDEpKSkpKSkpCgo7Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCjsqICAgIGNkYXRhLWdy
YW1tYXIgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ki8KOyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLwooZGVmaW5lIGNkYXRhLWdyYW1tYXIKICAgKHJlZ3VsYXItZ3Jh
bW1hciAoZGVjb2RlcikKICAgICAgKCgqIChvdXQgIl0iKSkKICAgICAgIChsZXQqICgocmVzIChk
ZWNvZGVyICh0aGUtc3RyaW5nKSkpCgkgICAgICAocmVzdCAoaWdub3JlKSkpCgkgIChzdHJpbmct
YXBwZW5kIHJlcyByZXN0KSkpCiAgICAgICgiXSIKICAgICAgIChzdHJpbmctYXBwZW5kICJdIiAo
aWdub3JlKSkpCiAgICAgICgoOiAiXV0+IiAoPyAiXG4iKSkKICAgICAgICIiKQogICAgICAoZWxz
ZQogICAgICAgKGxldCogKChjICh0aGUtZmFpbHVyZSkpCgkgICAgICAobXNnIChpZiAobm90IChl
b2Ytb2JqZWN0PyBjKSkKCQkgICAgICAgIklsbGVnYWwgPCFbQ0RBVEFbIGNoYXJhY3RlciIKCQkg
ICAgICAgIlByZW1hdHVyZSBlbmQgb2YgbGluZSwgZXhwZWN0aW5nIHRhZyBgXV0+JyIpKSkKCSAg
KHhtbC1wYXJzZS1lcnJvciBtc2cKCQkJICAgYwoJCQkgICAoaW5wdXQtcG9ydC1uYW1lICh0aGUt
cG9ydCkpCgkJCSAgIChpbnB1dC1wb3J0LXBvc2l0aW9uICh0aGUtcG9ydCkpKSkpKSkKCjsqLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKi8KOyogICAgZ2V0LWRlY29kZXIgLi4uICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqLwo7Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCihkZWZpbmUgKGdl
dC1kZWNvZGVyOjpwcm9jZWR1cmUgZW5jOjpic3RyaW5nIGRzdC1lbmMpCiAgIChsZXQgKChzcmMt
ZW5jIChzdHJpbmctPnN5bWJvbCAoc3RyaW5nLXVwY2FzZSBlbmMpKSkpCiAgICAgIChjb25kCgkg
KChvciAobm90IHNyYy1lbmMpIChlcT8gc3JjLWVuYyBkc3QtZW5jKSkKCSAgKGxhbWJkYSAoeCkg
eCkpCgkgKChlcT8gc3JjLWVuYyAnVVRGLTgpCgkgIChjb25kCgkgICAgICgobWVtcSBkc3QtZW5j
ICcoSVNPLTg4NTktMSBJU08tODg1OS0yIElTTy04ODU5LTE1KSkKCSAgICAgIHV0ZjgtPmlzby1s
YXRpbikKCSAgICAgKChlcT8gZHN0LWVuYyAnVUNTLTIpCgkgICAgICB1dGY4LXN0cmluZy0+dWNz
Mi1zdHJpbmcpCgkgICAgIChlbHNlCgkgICAgICAobGFtYmRhICh4KSB4KSkpKQoJICgobWVtcSBz
cmMtZW5jICcoSVNPLTg4NTktMSBJU08tODg1OS0yIElTTy04ODU5LTE1KSkKCSAgKGNvbmQKCSAg
ICAgKChlcT8gZHN0LWVuYyAnVVRGLTgpCgkgICAgICBpc28tbGF0aW4tPnV0ZjgpCgkgICAgICgo
ZXE/IGRzdC1lbmMgJ1VDUy0yKQoJICAgICAgKGxhbWJkYSAoeCkKCQkgKHV0Zjgtc3RyaW5nLT51
Y3MyLXN0cmluZyAoaXNvLWxhdGluLT51dGY4IHgpKSkpCgkgICAgIChlbHNlCgkgICAgICAobGFt
YmRhICh4KSB4KSkpKQoJIChlbHNlCgkgIChsYW1iZGEgKHgpIHgpKSkpKQogICAgICAKOyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLwo7KiAgICB4bWwtZ3JhbW1hciAuLi4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICovCjsqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKGRlZmluZSB4bWwt
Z3JhbW1hcgogICAocmVndWxhci1ncmFtbWFyICgoaWQgKDogKGluICgiYXpBWiIpICIhPyIpICgq
IChpbiAoImF6QVowOSIpICI6Xy0iKSkpKQoJCSAgICAgbmV4dAoJCSAgICAgbWFrZQoJCSAgICAg
c3BlY2lhbHMKCQkgICAgIHN0cmljdAoJCSAgICAgZGVjb2RlcgoJCSAgICAgZW5jb2RpbmcKICAg
ICAgICAgICAgICAgICAgICAgcG9zKQogICAgICAKICAgICAgKCgrIChpbiAiIFx0XG5cciIpKQog
ICAgICAgKHByaW50ICJwYXJzZWQgc3BhY2UgbGVuZ3RoIiAoc3RyaW5nLWxlbmd0aCAodGhlLXN0
cmluZykpKQogICAgICAgKHNldCEgcG9zIChpbnB1dC1wb3J0LXBvc2l0aW9uICh0aGUtcG9ydCkp
KQogICAgICAgKHRoZS1zdHJpbmcpKQogICAgICAoKDogIjwhLS0iCgkgICgqIChvciAob3V0ICIt
IikgKDogIi0iIChvdXQgIi0iKSkgKDogIi0tIiAob3V0ICI+IikpKSkKCSAgIi0tPiIpCiAgICAg
ICAoc2V0ISBwb3MgKGlucHV0LXBvcnQtcG9zaXRpb24gKHRoZS1wb3J0KSkpCiAgICAgICAoY29u
cyAnY29tbWVudCAodGhlLXN0cmluZykpKQogICAgICAoKDogIjwhIiAoOiAob3IgKG91dCAiWy0i
KSAoOiAiLSIgKG91dCAiLSIpKSkKCQkgICgqIChvdXQgIj5dIikpCgkJICAoPyAoOiAiWyIgKCog
KG91dCAiXSIpKSAiXSIpKQoJCSAgKCogKG91dCAiPiIpKSkgIj4iKQogICAgICAgKHNldCEgcG9z
IChpbnB1dC1wb3J0LXBvc2l0aW9uICh0aGUtcG9ydCkpKQogICAgICAgKGNvbnMgJ2RlY2xhcmF0
aW9uICh0aGUtc3RyaW5nKSkpCiAgICAgICgiPCFbQ0RBVEFbIgogICAgICAgKGxldCAoKGNkYXRh
IChyZWFkL3JwIGNkYXRhLWdyYW1tYXIgKHRoZS1wb3J0KSBkZWNvZGVyKSkpCiAgICAgICAgICAo
c2V0ISBwb3MgKGlucHV0LXBvcnQtcG9zaXRpb24gKHRoZS1wb3J0KSkpCiAgICAgICAgICAoY29u
cyAnY2RhdGEgY2RhdGEpKSkKICAgICAgKCg6ICI8P3htbCAiICgqIChvdXQgIj8+IikpICI/PiIp
CiAgICAgICAobGV0ICgocyAodGhlLXN1YnN0cmluZyA2ICh0aGUtbGVuZ3RoKSkpKQoJICAoc3Ry
aW5nLXNldCEgcyAoLWZ4IChzdHJpbmctbGVuZ3RoIHMpIDIpICNcc3BhY2UpCgkgIChsZXQgKChw
IChvcGVuLWlucHV0LXN0cmluZyBzKSkpCgkgICAgIChsZXQgbG9vcCAoKGF0dHIgJygpKSkKCQko
bGV0ICgob2JqIChyZWFkL3JwIGF0dHJpYnV0ZS1ncmFtbWFyIHAgJ3htbCAjdCBkZWNvZGVyKSkp
CgkJICAgKGNvbmQKCQkgICAgICAoKHBhaXI/IG9iaikKCQkgICAgICAgKGxvb3AgKGNvbnMgb2Jq
IGF0dHIpKSkKCQkgICAgICAoKGVxPyBvYmogJz4pCiAgICAgICAgICAgICAgICAgICAgICAgKHBy
aW50ICJwYXJzZWQgeG1sLWRlY2wiKQogICAgICAgICAgICAgICAgICAgICAgIChzZXQhIHBvcyAo
aW5wdXQtcG9ydC1wb3NpdGlvbiAodGhlLXBvcnQpKSkKCQkgICAgICAgKGNvbnMgJ3htbC1kZWNs
IGF0dHIpKSkpKSkpKQogICAgICAoKDogIjw/IiAoKiAob3V0ICI+IikpICI+IikKICAgICAgIChz
ZXQhIHBvcyAoaW5wdXQtcG9ydC1wb3NpdGlvbiAodGhlLXBvcnQpKSkKICAgICAgIChjb25zICdp
bnN0cnVjdGlvbiAodGhlLXN0cmluZykpKQogICAgICAoKDogIjwiIGlkICI+IikKICAgICAgIChs
ZXQqICgodCAodGhlLXN1YnN0cmluZyAxICgtZnggKHRoZS1sZW5ndGgpIDEpKSkKCSAgICAgICh0
cyAoc3RyaW5nLT5zeW1ib2wgdCkpCgkgICAgICAocCAodGhlLXBvcnQpKSkKCSAgKGxldCAoKGVs
ZW1lbnQgKGNvbGxlY3QtdXAtdG8gcG9zIGlnbm9yZSB0cyAnKCkgcCBtYWtlIHNwZWNpYWxzIHN0
cmljdCBkZWNvZGVyIGVuY29kaW5nKSkpCiAgICAgICAgICAgICAoc2V0ISBwb3MgKGlucHV0LXBv
cnQtcG9zaXRpb24gKHRoZS1wb3J0KSkpCiAgICAgICAgICAgICBlbGVtZW50KSkpCiAgICAgICgo
OiAiPCIgaWQgIi8+IikKICAgICAgIChsZXQgKCh0ICh0aGUtc3Vic3RyaW5nIDEgKC1meCAodGhl
LWxlbmd0aCkgMikpKSkKICAgICAgICAgIChsZXQgKChwIHBvcykpCiAgICAgICAgICAgICAoc2V0
ISBwb3MgKGlucHV0LXBvcnQtcG9zaXRpb24gKHRoZS1wb3J0KSkpCiAgICAgICAgICAgICAobWFr
ZSBwIChzdHJpbmctPnN5bWJvbCB0KSAnKCkgJygpKSkpKQogICAgICAoKDogIjwiIGlkIChpbiAi
IFxuXHRcciIpKQogICAgICAgKGxldCogKCh0ICh0aGUtc3Vic3RyaW5nIDEgKC1meCAodGhlLWxl
bmd0aCkgMSkpKQoJICAgICAgKHRzIChzdHJpbmctPnN5bWJvbCB0KSkKCSAgICAgIChwICh0aGUt
cG9ydCkpKQoJICAobGV0IGxvb3AgKChhdHRyICcoKSkpCgkgICAgIChsZXQgKChvYmogKHJlYWQv
cnAgYXR0cmlidXRlLWdyYW1tYXIgcCB0IHN0cmljdCBkZWNvZGVyKSkpCgkJKGNvbmQKCQkgICAo
KHBhaXI/IG9iaikKCQkgICAgKGxvb3AgKGNvbnMgb2JqIGF0dHIpKSkKCQkgICAoKGVxPyBvYmog
Jz4pCgkJICAgIChsZXQgKChlbGVtZW50IChjb2xsZWN0LXVwLXRvIHBvcyBpZ25vcmUgdHMgKHJl
dmVyc2UhIGF0dHIpIHAgbWFrZSBzcGVjaWFscyBzdHJpY3QgZGVjb2RlciBlbmNvZGluZykpKQog
ICAgICAgICAgICAgICAgICAgICAgIChzZXQhIHBvcyAoaW5wdXQtcG9ydC1wb3NpdGlvbiAodGhl
LXBvcnQpKSkKICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50KSkKCQkgICAoKGVxPyBvYmog
Jy8+KQogICAgICAgICAgICAgICAgICAgIChsZXQgKChwIHBvcykpCiAgICAgICAgICAgICAgICAg
ICAgICAgKHNldCEgcG9zIChpbnB1dC1wb3J0LXBvc2l0aW9uICh0aGUtcG9ydCkpKQogICAgICAg
ICAgICAgICAgICAgICAgIChtYWtlIHAgdHMgKHJldmVyc2UhIGF0dHIpICcoKSkpKSkpKSkpCiAg
ICAgICgoOiAiPC8iIGlkICI+IikKICAgICAgIChzZXQhIHBvcyAoaW5wdXQtcG9ydC1wb3NpdGlv
biAodGhlLXBvcnQpKSkKICAgICAgIChzdHJpbmctPnN5bWJvbCAodGhlLXN1YnN0cmluZyAyICgt
ZnggKHRoZS1sZW5ndGgpIDEpKSkpCiAgICAgICgoKyAob3V0ICI8IikpCiAgICAgICAoc2V0ISBw
b3MgKGlucHV0LXBvcnQtcG9zaXRpb24gKHRoZS1wb3J0KSkpCiAgICAgICAoZGVjb2RlciAodGhl
LXN0cmluZykpKQogICAgICAoZWxzZQogICAgICAgKGxldCAoKGMgKHRoZS1mYWlsdXJlKSkpCgkg
IChjb25kCgkgICAgICgobm90IChlb2Ytb2JqZWN0PyBjKSkKCSAgICAgICh4bWwtcGFyc2UtZXJy
b3IgIklsbGVnYWwgY2hhcmFjdGVyIgoJCQkgICAgICAgKGVycm9yLWxpbmUgYyAodGhlLXBvcnQp
KQoJCQkgICAgICAgKGlucHV0LXBvcnQtbmFtZSAodGhlLXBvcnQpKQoJCQkgICAgICAgKGlucHV0
LXBvcnQtcG9zaXRpb24gKHRoZS1wb3J0KSkpKQoJICAgICAoZWxzZQoJICAgICAgYykpKSkpKQoK
OyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLwo7KiAgICBjaGFyLWhleG51bWVyaWM/IC4uLiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCjsqLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKGRlZmlu
ZSAoY2hhci1oZXhudW1lcmljPyBjKQogICAob3IgKGNoYXItbnVtZXJpYz8gYykKICAgICAgIChh
bmQgKGNoYXI+PT8gYyAjXEEpIChjaGFyPD0/IGMgI1xGKSkKICAgICAgIChhbmQgKGNoYXI+PT8g
YyAjXGEpIChjaGFyPD0/IGMgI1xmKSkpKQoKOyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwo7KiAgICB4bWwtc3Ry
aW5nLWRlY29kZS1pbm5lciEgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICovCjsqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KKGRlZmluZSAoeG1sLXN0cmluZy1kZWNvZGUtaW5uZXIhIHN0
ciBvbCBubCByZXMpCiAgIChkZWZpbmUgKGNoYXItdmFsdWUgYykKICAgICAgKGNvbmQKCSAoKGNo
YXItbnVtZXJpYz8gYykKCSAgKC1meCAoY2hhci0+aW50ZWdlciBjKSAoY2hhci0+aW50ZWdlciAj
XDApKSkKCSAoKGNoYXI8PT8gYyAjXEYpCgkgICgrZnggMTAgKC1meCAoY2hhci0+aW50ZWdlciBj
KSAoY2hhci0+aW50ZWdlciAjXEEpKSkpCgkgKGVsc2UKCSAgKCtmeCAxMCAoLWZ4IChjaGFyLT5p
bnRlZ2VyIGMpIChjaGFyLT5pbnRlZ2VyICNcYSkpKSkpKQogICAobGV0ICgob2wtMiAoLWZ4IG9s
IDIpKSkKICAgICAgKGxldCBsb29wICgoaSAwKQoJCSAoaiAwKSkKCSAoaWYgKD1meCBqIG5sKQoJ
ICAgICByZXMKCSAgICAgKGxldCAoKGMgKHN0cmluZy1yZWYgc3RyIGkpKSkKCQkoaWYgKGFuZCAo
Y2hhcj0/IGMgI1wlKSAoPGZ4IGkgb2wtMikpCgkJICAgIChsZXQgKChjMSAoc3RyaW5nLXJlZiBz
dHIgKCtmeCBpIDEpKSkKCQkJICAoYzIgKHN0cmluZy1yZWYgc3RyICgrZnggaSAyKSkpKQoJCSAg
ICAgICAoaWYgKGFuZCAoY2hhci1oZXhudW1lcmljPyBjMSkgKGNoYXItaGV4bnVtZXJpYz8gYzIp
KQoJCQkgICAobGV0KiAoKHYxIChjaGFyLXZhbHVlIGMxKSkKCQkJCSAgKHYyIChjaGFyLXZhbHVl
IGMyKSkKCQkJCSAgKGQgKGludGVnZXItPmNoYXIgKCtmeCAoKmZ4IHYxIDE2KSB2MikpKSkKCQkJ
ICAgICAgKHN0cmluZy1zZXQhIHJlcyBqIGQpCgkJCSAgICAgIChsb29wICgrZnggaSAzKSAoK2Z4
IGogMSkpKQoJCQkgICAoYmVnaW4KCQkJICAgICAgKHN0cmluZy1zZXQhIHJlcyBqIGMpCgkJCSAg
ICAgIChsb29wICgrZnggaSAxKSAoK2Z4IGogMSkpKSkpCgkJICAgIChiZWdpbgoJCSAgICAgICAo
c3RyaW5nLXNldCEgcmVzIGogYykKCQkgICAgICAgKGxvb3AgKCtmeCBpIDEpICgrZnggaiAxKSkp
KSkpKSkpCgo7Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCjsqICAgIHhtbC1jb3VudCAuLi4gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KOyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LwooZGVmaW5lICh4bWwtY291bnQgc3RyIG9sKQogICAobGV0IGxvb3AgKChpIDApCgkgICAgICAo
YyAwKSkKICAgICAgKGNvbmQKCSAoKD1meCBpIG9sKQoJICBjKQoJICgoY2hhcj0/IChzdHJpbmct
cmVmIHN0ciBpKSAjXCYpCgkgIChjb25kCgkgICAgICgoc3Vic3RyaW5nLWF0PyBzdHIgIiZsdDsi
IGkpCgkgICAgICAobG9vcCAoK2Z4IGkgNCkgKCtmeCBjIDEpKSkKCSAgICAgKChzdWJzdHJpbmct
YXQ/IHN0ciAiJmd0OyIgaSkKCSAgICAgIChsb29wICgrZnggaSA0KSAoK2Z4IGMgMSkpKQoJICAg
ICAoKHN1YnN0cmluZy1hdD8gc3RyICImYW1wOyIgaSkKCSAgICAgIChsb29wICgrZnggaSA1KSAo
K2Z4IGMgMSkpKQoJICAgICAoKHN1YnN0cmluZy1hdD8gc3RyICImcXVvdDsiIGkpCgkgICAgICAo
bG9vcCAoK2Z4IGkgNikgKCtmeCBjIDEpKSkKCSAgICAgKChzdWJzdHJpbmctYXQ/IHN0ciAiJm5i
c3A7IiBpKQoJICAgICAgKGxvb3AgKCtmeCBpIDYpICgrZnggYyAxKSkpCgkgICAgICgoc3Vic3Ry
aW5nLWF0PyBzdHIgIiYjIiBpKQoJICAgICAgKGxldCBsaWlwICgoaSAoK2Z4IGkgMikpKQoJCSAo
Y29uZAoJCSAgICAoKD1meCBpIG9sKQoJCSAgICAgYykKCQkgICAgKChjaGFyLW51bWVyaWM/IChz
dHJpbmctcmVmIHN0ciBpKSkKCQkgICAgIChsaWlwICgrZnggaSAxKSkpCgkJICAgIChlbHNlCgkJ
ICAgICAobG9vcCAoK2Z4IGkgMSkgKCtmeCBjIDEpKSkpKSkKCSAgICAgKGVsc2UKCSAgICAgIChs
b29wICgrZnggaSAxKSAoK2Z4IGMgMSkpKSkpCgkgKGVsc2UKCSAgKGxvb3AgKCtmeCBpIDEpICgr
ZnggYyAxKSkpKSkpCgo7Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCjsqICAgIHhtbC1kZWNvZGUgLi4uICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KOyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLwooZGVmaW5lICh4bWwtZGVjb2RlISBzdHIgcmVzIG9sIG5sKQogICAobGV0IGxvb3Ag
KChpIDApCgkgICAgICAoaiAwKSkKICAgICAgKGNvbmQKCSAoKD1meCBpIG9sKQoJICByZXMpCgkg
KChjaGFyPT8gKHN0cmluZy1yZWYgc3RyIGkpICNcJikKCSAgKGNvbmQKCSAgICAgKChzdWJzdHJp
bmctYXQ/IHN0ciAiJmx0OyIgaSkKCSAgICAgIChzdHJpbmctc2V0ISByZXMgaiAjXDwpCgkgICAg
ICAobG9vcCAoK2Z4IGkgNCkgKCtmeCBqIDEpKSkKCSAgICAgKChzdWJzdHJpbmctYXQ/IHN0ciAi
Jmd0OyIgaSkKCSAgICAgIChzdHJpbmctc2V0ISByZXMgaiAjXD4pCgkgICAgICAobG9vcCAoK2Z4
IGkgNCkgKCtmeCBqIDEpKSkKCSAgICAgKChzdWJzdHJpbmctYXQ/IHN0ciAiJmFtcDsiIGkpCgkg
ICAgICAoc3RyaW5nLXNldCEgcmVzIGogI1wmKQoJICAgICAgKGxvb3AgKCtmeCBpIDUpICgrZngg
aiAxKSkpCgkgICAgICgoc3Vic3RyaW5nLWF0PyBzdHIgIiZxdW90OyIgaSkKCSAgICAgIChzdHJp
bmctc2V0ISByZXMgaiAjXCIpCgkgICAgICAobG9vcCAoK2Z4IGkgNikgKCtmeCBqIDEpKSkKCSAg
ICAgKChzdWJzdHJpbmctYXQ/IHN0ciAiJm5ic3A7IiBpKQoJICAgICAgKHN0cmluZy1zZXQhIHJl
cyBqICNcc3BhY2UpCgkgICAgICAobG9vcCAoK2Z4IGkgNikgKCtmeCBqIDEpKSkKCSAgICAgKChz
dWJzdHJpbmctYXQ/IHN0ciAiJiMiIGkpCgkgICAgICAobGV0IGxpaXAgKChpICgrZnggaSAyKSkK
CQkJIChuIDApKQoJCSAoaWYgKD1meCBpIG9sKQoJCSAgICAgcmVzCgkJICAgICAobGV0ICgoYyAo
c3RyaW5nLXJlZiBzdHIgaSkpKQoJCQkoaWYgKGNoYXItbnVtZXJpYz8gYykKCQkJICAgIChsaWlw
ICgrZnggaSAxKQoJCQkgICAgICAgKCtmeCAoKmZ4IG4gMTApCgkJCQkgICgtZnggKGNoYXItPmlu
dGVnZXIgYykKCQkJCSAgICAgKGNoYXItPmludGVnZXIgI1wwKSkpKQoJCQkgICAgKGJlZ2luCgkJ
CSAgICAgICAoc3RyaW5nLXNldCEgcmVzIGogKGludGVnZXItPmNoYXIgbikpCgkJCSAgICAgICAo
bG9vcCAoK2Z4IGkgMSkgKCtmeCBqIDEpKSkpKSkpKQoJICAgICAoZWxzZQoJICAgICAgKHN0cmlu
Zy1zZXQhIHJlcyBqIChzdHJpbmctcmVmIHN0ciBpKSkKCSAgICAgIChsb29wICgrZnggaSAxKSAo
K2Z4IGogMSkpKSkpCgkgKGVsc2UKCSAgKHN0cmluZy1zZXQhIHJlcyBqIChzdHJpbmctcmVmIHN0
ciBpKSkKCSAgKGxvb3AgKCtmeCBpIDEpICgrZnggaiAxKSkpKSkpCgo7Ki0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
CjsqICAgIHhtbC1zdHJpbmctZGVjb2RlIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKi8KOyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwooZGVmaW5lICh4bWwtc3RyaW5nLWRl
Y29kZSBzdHIpCiAgIChsZXQgKChvbCAoc3RyaW5nLWxlbmd0aCBzdHIpKSkKICAgICAgKGlmICg+
PWZ4IG9sIDMpCgkgIChsZXQgKChubCAoeG1sLWNvdW50IHN0ciBvbCkpKQoJICAgICAoaWYgKD1m
eCBubCBvbCkKCQkgKHN0cmluZy1jb3B5IHN0cikKCQkgKGxldCAoKHJlcyAobWFrZS1zdHJpbmcg
bmwpKSkKCQkgICAgKHhtbC1kZWNvZGUhIHN0ciByZXMgb2wgbmwpCgkJICAgIHJlcykpKQoJICAo
c3RyaW5nLWNvcHkgc3RyKSkpKQogICAKOyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwo7KiAgICB4bWwtc3RyaW5n
LWRlY29kZSEgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICov
CjsqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KKGRlZmluZSAoeG1sLXN0cmluZy1kZWNvZGUhIHN0cikKICAgKGxl
dCAoKG9sIChzdHJpbmctbGVuZ3RoIHN0cikpKQogICAgICAoaWYgKD49Znggb2wgMykKCSAgKGxl
dCAoKG5sICh4bWwtY291bnQgc3RyIG9sKSkpCgkgICAgIChpZiAoPWZ4IG5sIG9sKQoJCSBzdHIK
CQkgKGJlZ2luCgkJICAgICh4bWwtZGVjb2RlISBzdHIgc3RyIG9sIG5sKQoJCSAgICAoc3RyaW5n
LXNocmluayEgc3RyIG5sKSkpKQoJICBzdHIpKSkKCjsqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KOyogICAgeG1s
LXN0cmluZy1lbmNvZGUgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAqLwo7Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCihkZWZpbmUgKHhtbC1zdHJpbmctZW5jb2RlIHN0cikK
ICAgKGRlZmluZSAoY291bnQgc3RyIG9sKQogICAgICAobGV0IGxvb3AgKChpIDApCgkJIChuIDAp
KQoJIChpZiAoPWZ4IGkgb2wpCgkgICAgIG4KCSAgICAgKGxldCAoKGMgKHN0cmluZy1yZWYgc3Ry
IGkpKSkKCQkoY2FzZSBjCgkJICAgKCgjXCIpCgkJICAgIChsb29wICgrZnggaSAxKSAoK2Z4IG4g
NikpKQoJCSAgICgoI1wmKQoJCSAgICAobG9vcCAoK2Z4IGkgMSkgKCtmeCBuIDUpKSkKCQkgICAo
KCNcPCAjXD4pCgkJICAgIChsb29wICgrZnggaSAxKSAoK2Z4IG4gNCkpKQoJCSAgIChlbHNlCgkJ
ICAgIChsb29wICgrZnggaSAxKSAoK2Z4IG4gMSkpKSkpKSkpCiAgIChkZWZpbmUgKGVuY29kZSBz
dHIgb2wgbmwpCiAgICAgIChpZiAoPWZ4IG5sIG9sKQoJICBzdHIKCSAgKGxldCAoKHJlcyAobWFr
ZS1zdHJpbmcgbmwpKSkKCSAgICAgKGxldCBsb29wICgoaSAwKQoJCQkoaiAwKSkKCQkoaWYgKD1m
eCBqIG5sKQoJCSAgICByZXMKCQkgICAgKGxldCAoKGMgKHN0cmluZy1yZWYgc3RyIGkpKSkKCQkg
ICAgICAgKGNhc2UgYwoJCQkgICgoI1w8KQoJCQkgICAoYmxpdC1zdHJpbmchICImbHQ7IiAwIHJl
cyBqIDQpCgkJCSAgIChsb29wICgrZnggaSAxKSAoK2Z4IGogNCkpKQoJCQkgICgoI1w+KQoJCQkg
ICAoYmxpdC1zdHJpbmchICImZ3Q7IiAwIHJlcyBqIDQpCgkJCSAgIChsb29wICgrZnggaSAxKSAo
K2Z4IGogNCkpKQoJCQkgICgoI1wmKQoJCQkgICAoYmxpdC1zdHJpbmchICImYW1wOyIgMCByZXMg
aiA1KQoJCQkgICAobG9vcCAoK2Z4IGkgMSkgKCtmeCBqIDUpKSkKCQkJICAoKCNcIikKCQkJICAg
KGJsaXQtc3RyaW5nISAiJnF1b3Q7IiAwIHJlcyBqIDYpCgkJCSAgIChsb29wICgrZnggaSAxKSAo
K2Z4IGogNikpKQoJCQkgIChlbHNlCgkJCSAgIChzdHJpbmctc2V0ISByZXMgaiBjKQoJCQkgICAo
bG9vcCAoK2Z4IGkgMSkgKCtmeCBqIDEpKSkpKSkpKSkpCiAgIChsZXQgKChvbCAoc3RyaW5nLWxl
bmd0aCBzdHIpKSkKICAgICAgKGVuY29kZSBzdHIgb2wgKGNvdW50IHN0ciBvbCkpKSkKCSAKOyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLwo7KiAgICByZWFkLXhtbCAuLi4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCjsqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKGRlZmluZSAo
cmVhZC14bWwgIyFvcHRpb25hbCAocG9ydDo6aW5wdXQtcG9ydCAoY3VycmVudC1pbnB1dC1wb3J0
KSkpCiAgICh4bWwtcGFyc2UgcG9ydCkpCgo7Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCjsqICAgIHhtbC1tZXRh
ZGF0YSAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ki8KOyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLwooZGVmaW5lICh4bWwtbWV0YWRhdGEgeG1sKQogICAobGV0ICgo
eG1sLXZlciAjZikKCSAoeG1sLWVuYyAjZikKCSAoeG1sLWxhbmcgI2YpCgkgKHJvb3QtdmVyIDAu
MCkKCSAoeG1sLXJvb3QgI2YpCgkgKHhtbC1ucyAnKCkpKQogICAgICAobGV0IGxvb3AxICgobCB4
bWwpKQoJICh3aGVuIChwYWlyPyBsKQoJICAgIChtYXRjaC1jYXNlIChjYXIgbCkKCSAgICAgICAo
KHhtbC1kZWNsIC4gKGFuZCA/YXR0ciAoPy0gLiA/LSkpKQoJCShmb3ItZWFjaCAobGFtYmRhIChh
dCkKCQkJICAgICAoY2FzZSAoY2FyIGF0KQoJCQkJKCh2ZXJzaW9uKSAoc2V0ISB4bWwtdmVyIChj
ZHIgYXR0cikpKQoJCQkJKChlbmNvZGluZykgKHNldCEgeG1sLWVuYyAoY2RyIGF0dHIpKSkpKQoJ
CQkgIGF0dHIpKQoJICAgICAgICgoP21hcmsgP2xhdHRyIC4gPy0pCgkJKGxldCBsb29wMyAoKGxh
dHRyIGxhdHRyKSkKCQkgICAodW5sZXNzIHhtbC1yb290IChzZXQhIHhtbC1yb290IG1hcmspKQoJ
CSAgICh3aGVuIChwYWlyPyBsYXR0cikKCQkgICAgICAobGV0ICgoYXR0ciAoY2FyIGxhdHRyKSkp
CgkJCSAoY2FzZSAoY2FyIGF0dHIpCgkJCSAgICAoKHhtbDpsYW5nKQoJCQkgICAgIChzZXQhIHht
bC1sYW5nIChjZHIgYXR0cikpKQoJCQkgICAgKCh4bWxucykKCQkJICAgICAoc2V0ISB4bWwtcm9v
dCAoY29ucyAoY2RyIGF0dHIpIHhtbC1yb290KSkpCgkJCSAgICAoKHZlcnNpb24pCgkJCSAgICAg
KHNldCEgcm9vdC12ZXIgKHN0cmluZy0+bnVtYmVyIChjZHIgYXR0cikpKSkKCQkJICAgIChlbHNl
CgkJCSAgICAgKGxldCAoKHN0ciAoc3ltYm9sLT5zdHJpbmcgKGNhciBhdHRyKSkpKQoJCQkJKHdo
ZW4gKHN1YnN0cmluZz0/IHN0ciAieG1sbnM6IiA2KQoJCQkJICAgKGxldCogKChsIChzdHJpbmct
bGVuZ3RoIHN0cikpCgkJCQkJICAocyAoc3Vic3RyaW5nIHN0ciA2IGwpKQoJCQkJCSAgKHNpIChz
dHJpbmctPnN5bWJvbCBzKSkpCgkJCQkgICAgICAoc2V0ISB4bWwtbnMKCQkJCQkgICAgKGNvbnMg
KGNvbnMgKGNkciBhdHRyKSBzaSkKCQkJCQkJICB4bWwtbnMpKSkpKSkpCgkJCSAobG9vcDMgKGNk
ciBsYXR0cikpKSkpKSkKCSAgICAobG9vcDEgKGNkciBsKSkpKQogICAgICAodW5sZXNzIHhtbC1y
b290CgkgKGVycm9yICJ4bWwtbWV0YWRhdGEiICJFbXB0eSBYTUwgZG9jdW1lbnQgISIgeG1sKSkK
ICAgICAgOzsgVmFsdWVzIGFyZSA6CiAgICAgIDs7IC0gWE1MIFZlcnNpb24gKDEuMCBvciAxLjEp
IG9yICNmCiAgICAgIDs7IC0gWE1MIEVuY29kaW5nICgjZiBpZiB1bmtub3duKQogICAgICA7OyAt
IHhtbDpsYW5nIHZhbHVlCiAgICAgIDs7IC0gUGFpciwgd2hpY2ggY2FyIGlzIHRoZSBmaXJzdCBk
YXRhIG1hcmt1cCwgYW5kCiAgICAgIDs7ICAgY2RyIHRoZSBkZWZhdWx0IG5hbWVzcGFjZQogICAg
ICA7OyAtIHhtbCBmaXJzdCBkYXRhIG1hcmt1cCB2ZXJzaW9uIGF0dHJpYnV0ZSAoMCBpZiB1bnNw
ZWNpZmllZCkKICAgICAgOzsgLSBsaXN0IG9mIHByZWZpeGVkIG5hbWVzcGFjZXMgKHByZWZpeCAu
IHBhdGgpCiAgICAgICh2YWx1ZXMgeG1sLXZlciB4bWwtZW5jIHhtbC1sYW5nIHhtbC1yb290IHJv
b3QtdmVyIHhtbC1ucykpKQo=
------=_Part_4593879_850168265.1643673453012--