public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* preprocessor/8468: Segmentation Fault during compilation immediatly after preprocessing
@ 2002-11-05 13:06 ben
  0 siblings, 0 replies; only message in thread
From: ben @ 2002-11-05 13:06 UTC (permalink / raw)
  To: gcc-gnats


>Number:         8468
>Category:       preprocessor
>Synopsis:       Segmentation Fault during compilation immediatly after preprocessing
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Nov 05 13:06:01 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     ben@demonstratives.com
>Release:        GCC 3.2 Release
>Organization:
>Environment:
Redhat Linux 8.0
GCC 3.2
GNU Make
SGI Open Inventor Source Code
>Description:
The problem occurs while compiling certain files.  Compilation fails consistantly on valid C++ source code.  However, compilation is successful when first compiling with --save-temps, and then compiling the .ii file to object dode.  Since there is, for the most part, no preprocessing of of the ii source file, the compilation is successful.

/usr/bin/g++ -I/usr/X11R6/include -I. -I../../../../../lib/database/include -I../../../../../lib/interaction/include -I../../../../../lib/nodekits/include -I../../../../../libSoXt/include -fPIC -DIVPREFIX=\"/usr\"       -O -DNDEBUG --save-temps -c SoEngines.c++
In file included from SoEngines.c++:57:
SoTriggerAny.c++: In constructor `SoTriggerAny::SoTriggerAny()':
SoTriggerAny.c++:84: internal error: Segmentation fault

g++ -c SoEngines.ii
<no errors>

Maybe this issue has to do with the large source files being included into a single file?
>How-To-Repeat:
Download Open Inventor Source code from ftp://oss.sgi.com/projects/inventor/download

Extract files
cd inventor/lib/database/src/so/engines
gmake SoEngines.o
>Fix:
Workaround:
Modify build rules to include --save-temps option during compilation of .c++ files.  Any file which fails with a segmentation fault, compile using /usr/bin/g++ -c <basename>.ii
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="SoEngines.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="SoEngines.ii"

IyAxICJTb0VuZ2luZXMuYysrIgojIDEgIjxidWlsdC1pbj4iCiMgMSAiPGNvbW1hbmQgbGluZT4i
CiMgMSAiU29FbmdpbmVzLmMrKyIKIyA0MSAiU29FbmdpbmVzLmMrKyIKIyAxICJTb0Jvb2xPcGVy
YXRpb24uYysrIiAxCiMgNTQgIlNvQm9vbE9wZXJhdGlvbi5jKysiCiMgMSAiLi4vLi4vLi4vLi4v
Li4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZW5naW5lcy9Tb0Jvb2xPcGVyYXRpb24u
aCIgMQojIDYyICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9l
bmdpbmVzL1NvQm9vbE9wZXJhdGlvbi5oIgojIDEgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFz
ZS9pbmNsdWRlL0ludmVudG9yL2VuZ2luZXMvU29TdWJFbmdpbmUuaCIgMQojIDk3ICIuLi8uLi8u
Li8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9lbmdpbmVzL1NvU3ViRW5naW5l
LmgiCiMgMSAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZW5n
aW5lcy9Tb0VuZ2luZS5oIiAxCiMgNjAgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNs
dWRlL0ludmVudG9yL2VuZ2luZXMvU29FbmdpbmUuaCIKIyAxICIuLi8uLi8uLi8uLi8uLi9saWIv
ZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9maWVsZHMvU29GaWVsZENvbnRhaW5lci5oIiAxCiMg
NjMgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2ZpZWxkcy9T
b0ZpZWxkQ29udGFpbmVyLmgiCiMgMSAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1
ZGUvSW52ZW50b3IvbWlzYy9Tb0Jhc2UuaCIgMQojIDYyICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0
YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9taXNjL1NvQmFzZS5oIgojIDEgIi4uLy4uLy4uLy4uLy4u
L2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL21pc2MvU29CYXNpYy5oIiAxCiMgNTkgIi4u
Ly4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL21pc2MvU29CYXNpYy5o
IgojIDEgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL1NiQmFz
aWMuaCIgMQojIDY4ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRv
ci9TYkJhc2ljLmgiCiMgMSAiL3Vzci9pbmNsdWRlL2ludHR5cGVzLmgiIDEgMwojIDI2ICIvdXNy
L2luY2x1ZGUvaW50dHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMK
IyAyOTEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9j
ZGVmcy5oIiAxIDMKIyAyOTIgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAzMjAgIi91
c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAx
IDMKIyAzMjEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAyNyAiL3Vzci9pbmNsdWRl
L2ludHR5cGVzLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDEgMwojIDI3ICIv
dXNyL2luY2x1ZGUvc3RkaW50LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAx
IDMKIyAyOCAiL3Vzci9pbmNsdWRlL3N0ZGludC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy93b3Jkc2l6ZS5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3N0ZGludC5oIiAyIDMKIyAzNyAi
L3Vzci9pbmNsdWRlL3N0ZGludC5oIiAzCnR5cGVkZWYgc2lnbmVkIGNoYXIgaW50OF90Owp0eXBl
ZGVmIHNob3J0IGludCBpbnQxNl90Owp0eXBlZGVmIGludCBpbnQzMl90OwoKCgpfX2V4dGVuc2lv
bl9fCnR5cGVkZWYgbG9uZyBsb25nIGludCBpbnQ2NF90OwoKCgoKdHlwZWRlZiB1bnNpZ25lZCBj
aGFyIHVpbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVpbnQxNl90OwoKdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgdWludDMyX3Q7CgoKCgoKX19leHRlbnNpb25fXwp0eXBlZGVmIHVuc2ln
bmVkIGxvbmcgbG9uZyBpbnQgdWludDY0X3Q7CgoKCgoKCnR5cGVkZWYgc2lnbmVkIGNoYXIgaW50
X2xlYXN0OF90Owp0eXBlZGVmIHNob3J0IGludCBpbnRfbGVhc3QxNl90Owp0eXBlZGVmIGludCBp
bnRfbGVhc3QzMl90OwoKCgpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgbG9uZyBsb25nIGludCBpbnRf
bGVhc3Q2NF90OwoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludF9sZWFzdDhfdDsKdHlwZWRl
ZiB1bnNpZ25lZCBzaG9ydCBpbnQgdWludF9sZWFzdDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50
IHVpbnRfbGVhc3QzMl90OwoKCgpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBs
b25nIGludCB1aW50X2xlYXN0NjRfdDsKCgoKCgoKdHlwZWRlZiBzaWduZWQgY2hhciBpbnRfZmFz
dDhfdDsKCgoKCgp0eXBlZGVmIGludCBpbnRfZmFzdDE2X3Q7CnR5cGVkZWYgaW50IGludF9mYXN0
MzJfdDsKX19leHRlbnNpb25fXwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgaW50X2Zhc3Q2NF90OwoK
Cgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludF9mYXN0OF90OwoKCgoKCnR5cGVkZWYgdW5zaWdu
ZWQgaW50IHVpbnRfZmFzdDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRfZmFzdDMyX3Q7
Cl9fZXh0ZW5zaW9uX18KdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnRfZmFzdDY0
X3Q7CiMgMTI2ICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDMKdHlwZWRlZiBpbnQgaW50cHRyX3Q7
CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludHB0cl90OwojIDEzOCAiL3Vzci9pbmNsdWRlL3N0
ZGludC5oIiAzCl9fZXh0ZW5zaW9uX18KdHlwZWRlZiBsb25nIGxvbmcgaW50IGludG1heF90Owpf
X2V4dGVuc2lvbl9fCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1aW50bWF4X3Q7CiMg
MjkgIi91c3IvaW5jbHVkZS9pbnR0eXBlcy5oIiAyIDMKIyAyNzQgIi91c3IvaW5jbHVkZS9pbnR0
eXBlcy5oIiAzCmV4dGVybiAiQyIgewojIDI4OCAiL3Vzci9pbmNsdWRlL2ludHR5cGVzLmgiIDMK
dHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGxvbmcg
aW50IHJlbTsKICB9IGltYXhkaXZfdDsKCgoKCgpleHRlcm4gaW50bWF4X3QgaW1heGFicyAoaW50
bWF4X3QgX19uKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJu
IGltYXhkaXZfdCBpbWF4ZGl2IChpbnRtYXhfdCBfX251bWVyLCBpbnRtYXhfdCBfX2Rlbm9tKQog
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludG1h
eF90IHN0cnRvaW1heCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2Up
IHRocm93ICgpOwoKCmV4dGVybiB1aW50bWF4X3Qgc3RydG91bWF4IChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKiBfX3Jl
c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50bWF4X3Qg
d2NzdG9pbWF4IChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFz
ZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gdWludG1heF90IHdjc3RvdW1heCAoX19jb25zdCB3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdj
aGFyX3QgKiogX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsK
IyAzOTAgIi91c3IvaW5jbHVkZS9pbnR0eXBlcy5oIiAzCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxv
bmcgbG9uZyBpbnQgX19zdHJ0b2xsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgpleHRlcm4gX19pbmxpbmUg
aW50bWF4X3QKc3RydG9pbWF4IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgbnB0ciwgY2hhciAq
Kl9fcmVzdHJpY3QgZW5kcHRyLAogICAgICAgICAgIGludCBiYXNlKSB0aHJvdyAoKQp7CiAgcmV0
dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAobnB0ciwgZW5kcHRyLCBiYXNlLCAwKTsKfQoKCgpfX2V4
dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50ZXJu
YWwgKF9fY29uc3QgY2hhciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dy
b3VwKSB0aHJvdyAoKTsKCgpleHRlcm4gX19pbmxpbmUgdWludG1heF90CnN0cnRvdW1heCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IG5wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IGVuZHB0ciwKICAg
ICAgICAgICBpbnQgYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFs
IChucHRyLCBlbmRwdHIsIGJhc2UsIDApOwp9CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcg
bG9uZyBpbnQgX193Y3N0b2xsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jh
c2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgpleHRlcm4gX19pbmxpbmUgaW50bWF4X3QKd2Nz
dG9pbWF4IChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgbnB0ciwgd2NoYXJfdCAqKl9fcmVz
dHJpY3QgZW5kcHRyLAogICAgICAgICAgIGludCBiYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9f
d2NzdG9sbF9pbnRlcm5hbCAobnB0ciwgZW5kcHRyLCBiYXNlLCAwKTsKfQoKCgoKX19leHRlbnNp
b25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3djc3RvdWxsX2ludGVybmFsIChf
X2NvbnN0IHdjaGFyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19n
cm91cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9faW5saW5lIHVpbnRtYXhfdAp3Y3N0b3VtYXggKF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBucHRyLCB3Y2hhcl90ICoqX19yZXN0cmljdCBlbmRw
dHIsCiAgICAgICAgICAgaW50IGJhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX193Y3N0b3VsbF9p
bnRlcm5hbCAobnB0ciwgZW5kcHRyLCBiYXNlLCAwKTsKfQoKCgoKfQojIDY5ICIuLi8uLi8uLi8u
Li8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9TYkJhc2ljLmgiIDIKIyAxICIvdXNy
L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgi
IDMKZXh0ZXJuICJDIiB7CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI5
ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2
LXJlZGhhdC1saW51eC8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjAxICIvdXNyL2xpYi9n
Y2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYg
dW5zaWduZWQgaW50IHNpemVfdDsKIyAzMCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAz
CgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0
IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25l
ZCBsb25nIF9fdV9sb25nOwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgX191X3F1YWRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19x
dWFkX3Q7CiMgNDkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKdHlwZWRlZiBzaWduZWQg
Y2hhciBfX2ludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdWludDhfdDsKdHlwZWRlZiBz
aWduZWQgc2hvcnQgaW50IF9faW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191
aW50MTZfdDsKdHlwZWRlZiBzaWduZWQgaW50IF9faW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgX191aW50MzJfdDsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGlu
dCBfX2ludDY0X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50
IF9fdWludDY0X3Q7Cgp0eXBlZGVmIF9fcXVhZF90ICpfX3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdV9x
dWFkX3QgX19kZXZfdDsKdHlwZWRlZiBfX3VfaW50IF9fdWlkX3Q7CnR5cGVkZWYgX191X2ludCBf
X2dpZF90Owp0eXBlZGVmIF9fdV9sb25nIF9faW5vX3Q7CnR5cGVkZWYgX191X2ludCBfX21vZGVf
dDsKdHlwZWRlZiBfX3VfaW50IF9fbmxpbmtfdDsKdHlwZWRlZiBsb25nIGludCBfX29mZl90Owp0
eXBlZGVmIF9fcXVhZF90IF9fbG9mZl90Owp0eXBlZGVmIGludCBfX3BpZF90Owp0eXBlZGVmIGlu
dCBfX3NzaXplX3Q7CnR5cGVkZWYgX191X2xvbmcgX19ybGltX3Q7CnR5cGVkZWYgX191X3F1YWRf
dCBfX3JsaW02NF90Owp0eXBlZGVmIF9fdV9pbnQgX19pZF90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7
CiAgICBpbnQgX192YWxbMl07CiAgfSBfX2ZzaWRfdDsKCgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7
CnR5cGVkZWYgY2hhciAqX19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBl
ZGVmIHVuc2lnbmVkIGludCBfX3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNlY29u
ZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fY2xv
Y2tfdDsKCgp0eXBlZGVmIGludCBfX2Nsb2NraWRfdDsKCgp0eXBlZGVmIGludCBfX3RpbWVyX3Q7
CgoKCgoKCnR5cGVkZWYgaW50IF9fa2V5X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQg
X19pcGNfcGlkX3Q7CgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtzaXplX3Q7CgoKCgp0eXBlZGVm
IGxvbmcgaW50IF9fYmxrY250X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19ibGtjbnQ2NF90OwoKCnR5
cGVkZWYgX191X2xvbmcgX19mc2Jsa2NudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Jsa2Nu
dDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzZmlsY250X3Q7CnR5cGVkZWYgX191X3F1YWRf
dCBfX2ZzZmlsY250NjRfdDsKCgp0eXBlZGVmIF9fdV9xdWFkX3QgX19pbm82NF90OwoKCnR5cGVk
ZWYgX19sb2ZmX3QgX19vZmY2NF90OwoKCnR5cGVkZWYgbG9uZyBpbnQgX190X3NjYWxhcl90Owp0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fdF91c2NhbGFyX3Q7CgoKdHlwZWRlZiBpbnQgX19p
bnRwdHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3NvY2tsZW5fdDsKCgoKCiMgMSAiL3Vz
ci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0
cy9wdGhyZWFkdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwoj
IDY4ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAzCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAg
ewogICAgaW50IF9fc2NoZWRfcHJpb3JpdHk7CiAgfTsKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMv
cHRocmVhZHR5cGVzLmgiIDIgMwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBp
bnQgX19zdGF0dXM7CiAgaW50IF9fc3BpbmxvY2s7Cgp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRo
cmVhZF9kZXNjcl9zdHJ1Y3QgKl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0IF9f
cHRocmVhZF9hdHRyX3MKewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5
OwogIHN0cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2No
ZWQ7CiAgaW50IF9fc2NvcGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRk
cl9zZXQ7CiAgdm9pZCAqX19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJl
YWRfYXR0cl90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2Nr
IF9fY19sb2NrOwogIF9wdGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOwp9IHB0aHJlYWRfY29uZF90
OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fZHVtbXk7Cn0gcHRocmVhZF9jb25kYXR0cl90
OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1
Y3QKewogIGludCBfX21fcmVzZXJ2ZWQ7CiAgaW50IF9fbV9jb3VudDsKICBfcHRocmVhZF9kZXNj
ciBfX21fb3duZXI7CiAgaW50IF9fbV9raW5kOwogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBf
X21fbG9jazsKfSBwdGhyZWFkX211dGV4X3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19t
dXRleGtpbmQ7Cn0gcHRocmVhZF9tdXRleGF0dHJfdDsKCgoKdHlwZWRlZiBpbnQgcHRocmVhZF9v
bmNlX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9yd2xvY2tfdAp7CiAgc3RydWN0IF9w
dGhyZWFkX2Zhc3Rsb2NrIF9fcndfbG9jazsKICBpbnQgX19yd19yZWFkZXJzOwogIF9wdGhyZWFk
X2Rlc2NyIF9fcndfd3JpdGVyOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfcmVhZF93YWl0aW5nOwog
IF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVfd2FpdGluZzsKICBpbnQgX19yd19raW5kOwogIGlu
dCBfX3J3X3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2tfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewog
IGludCBfX2xvY2traW5kOwogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7
CgoKCgp0eXBlZGVmIHZvbGF0aWxlIGludCBwdGhyZWFkX3NwaW5sb2NrX3Q7CgoKdHlwZWRlZiBz
dHJ1Y3QgewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2JhX2xvY2s7CiAgaW50IF9fYmFf
cmVxdWlyZWQ7CiAgaW50IF9fYmFfcHJlc2VudDsKICBfcHRocmVhZF9kZXNjciBfX2JhX3dhaXRp
bmc7Cn0gcHRocmVhZF9iYXJyaWVyX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIGludCBfX3BzaGFy
ZWQ7Cn0gcHRocmVhZF9iYXJyaWVyYXR0cl90OwoKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBp
bnQgcHRocmVhZF90OwojIDE0NCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCiMgMzEg
Ii91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFy
Owp0eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVk
ZWYgX191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3Vf
cXVhZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgoKCnR5cGVkZWYgX19s
b2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoKCgoKCnR5cGVkZWYgX19p
bm82NF90IGlubzY0X3Q7CgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVmIF9f
Z2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYgX19u
bGlua190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKdHlwZWRlZiBf
X29mZl90IG9mZl90OwoKCgoKCgp0eXBlZGVmIF9fb2ZmNjRfdCBvZmY2NF90OwoKCgoKdHlwZWRl
ZiBfX3BpZF90IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKCnR5cGVkZWYgX19z
c2l6ZV90IHNzaXplX3Q7CgoKCgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBf
X2NhZGRyX3QgY2FkZHJfdDsKCgoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTMyICIvdXNy
L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyA1
OCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCnR5cGVkZWYgX19jbG9ja190IGNsb2NrX3Q7CgoK
CiMgNzQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgp0eXBlZGVmIF9fdGltZV90IHRpbWVfdDsK
CgoKIyA5MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fY2xvY2tpZF90IGNsb2Nr
aWRfdDsKIyAxMDQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKdHlwZWRlZiBfX3RpbWVyX3QgdGlt
ZXJfdDsKIyAxMzMgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYgX191
c2Vjb25kc190IHVzZWNvbmRzX3Q7CgoKCnR5cGVkZWYgX19zdXNlY29uZHNfdCBzdXNlY29uZHNf
dDsKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMy4yL2luY2x1
ZGUvc3RkZGVmLmgiIDEgMwojIDE0NyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoK
dHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1bG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBp
bnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50OwojIDE5NiAiL3Vzci9pbmNsdWRl
L3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRl
X18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDE2X3Qg
X19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50
IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkp
OwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fd29y
ZF9fKSkpOwojIDIxMiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2VuZGlhbi5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2JpdHMvZW5kaWFuLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgi
IDIgMwojIDIxMyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvaW5j
bHVkZS9zeXMvc2VsZWN0LmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUv
c3lzL3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMK
IyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKdHlwZWRlZiBpbnQgX19zaWdfYXRv
bWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFs
WygxMDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2lnc2V0
X3Q7CiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCgp0eXBlZGVmIF9fc2ln
c2V0X3Qgc2lnc2V0X3Q7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyAxMTYg
Ii91c3IvaW5jbHVkZS90aW1lLmgiIDMKc3RydWN0IHRpbWVzcGVjCiAgewogICAgX190aW1lX3Qg
dHZfc2VjOwogICAgbG9uZyBpbnQgdHZfbnNlYzsKICB9OwojIDQ1ICIvdXNyL2luY2x1ZGUvc3lz
L3NlbGVjdC5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIyA2NyAi
L3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAzCnN0cnVjdCB0aW1ldmFsCiAgewogICAgX190aW1l
X3QgdHZfc2VjOwogICAgX19zdXNlY29uZHNfdCB0dl91c2VjOwogIH07CiMgNDcgIi91c3IvaW5j
bHVkZS9zeXMvc2VsZWN0LmgiIDIgMwojIDU1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAz
CnR5cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNrOwojIDY3ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVj
dC5oIiAzCnR5cGVkZWYgc3RydWN0CiAgewoKCgogICAgX19mZF9tYXNrIGZkc19iaXRzWzEwMjQg
LyAoOCAqIHNpemVvZiAoX19mZF9tYXNrKSldOwoKCgoKCiAgfSBmZF9zZXQ7CgoKCgoKCnR5cGVk
ZWYgX19mZF9tYXNrIGZkX21hc2s7CiMgOTkgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMK
ZXh0ZXJuICJDIiB7CgoKCgoKCmV4dGVybiBpbnQgc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQg
Kl9fcmVzdHJpY3QgX19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3Ry
aWN0IF9fd3JpdGVmZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX19l
eGNlcHRmZHMsCiAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCBf
X3RpbWVvdXQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9fbmZkcywg
ZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQg
Kl9fcmVzdHJpY3QgX193cml0ZWZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVz
dHJpY3QgX19leGNlcHRmZHMsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRpbWVz
cGVjICpfX3Jlc3RyaWN0IF9fdGltZW91dCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBfX3Np
Z3NldF90ICpfX3Jlc3RyaWN0IF9fc2lnbWFzaykgdGhyb3cgKCk7CgoKfQojIDIxNiAiL3Vzci9p
bmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9z
LmgiIDEgMwojIDIxOSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKCnR5cGVkZWYg
X19ibGtzaXplX3QgYmxrc2l6ZV90OwoKCgoKCgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7
CgoKCnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2ZpbGNu
dF90IGZzZmlsY250X3Q7CiMgMjU3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRl
ZiBfX2Jsa2NudDY0X3QgYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzYmxrY250NjRfdCBmc2Jsa2Nu
dDY0X3Q7CnR5cGVkZWYgX19mc2ZpbGNudDY0X3QgZnNmaWxjbnQ2NF90OwoKCn0KIyA3MCAiLi4v
Li4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvU2JCYXNpYy5oIiAyCgoK
CgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvc3Rk
aW8uaCIgMwpleHRlcm4gIkMiIHsKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0
LWxpbnV4LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL3N0ZGlv
LmgiIDIgMwojIDQ0ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoKCnR5cGVkZWYgc3RydWN0IF9J
T19GSUxFIEZJTEU7CgoKCgoKIyA2MiAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBz
dHJ1Y3QgX0lPX0ZJTEUgX19GSUxFOwojIDcyICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS9saWJpby5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMwojIDE0ICIvdXNyL2luY2x1ZGUvX0df
Y29uZmlnLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzMuMi9p
bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMjEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQt
bGludXgvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90
OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwojIDI0ICIvdXNyL2luY2x1ZGUv
X0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3Iv
aW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51
eC8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAy
IDMKIyA2MyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdAp7
CiAgaW50IF9fY291bnQ7CiAgdW5pb24KICB7CiAgICB3aW50X3QgX193Y2g7CiAgICBjaGFyIF9f
d2NoYls0XTsKICB9IF9fdmFsdWU7Cn0gX19tYnN0YXRlX3Q7CiMgMjUgIi91c3IvaW5jbHVkZS9f
R19jb25maWcuaCIgMiAzCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmZfdCBfX3BvczsKICBfX21i
c3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3NfdDsKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmNjRf
dCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3M2NF90OwojIDQ0ICIvdXNy
L2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMSAzCiMg
MjggIi91c3IvaW5jbHVkZS9nY29udi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEg
MwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTM4
Ni1yZWRoYXQtbGludXgvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1
ZGUvd2NoYXIuaCIgMiAzCiMgNjMgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCgojIDI5ICIvdXNy
L2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0
LWxpbnV4LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2djb252
LmgiIDIgMwoKCgoKCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZfTk9DT05WLAog
IF9fR0NPTlZfTk9EQiwKICBfX0dDT05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZX0lOUFVULAog
IF9fR0NPTlZfRlVMTF9PVVRQVVQsCiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAogIF9fR0NPTlZf
SU5DT01QTEVURV9JTlBVVCwKCiAgX19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1IsCiAgX19HQ09O
Vl9JTlRFUk5BTF9FUlJPUgp9OwoKCgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1QgPSAweDAwMDEs
CiAgX19HQ09OVl9JR05PUkVfRVJST1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBfX2djb252X3N0
ZXA7CnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVj
dDsKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2Zj
dCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosIF9fY29u
c3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
Y2hhciAqKiwgc2l6ZV90ICosIGludCwgaW50KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5p
dF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2Vu
ZF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZf
dHJhbnNfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVu
c2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
Kik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBf
X2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0
eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICosIF9f
Y29uc3QgY2hhciAqKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAq
KiwgY29uc3QgY2hhciAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAo
dm9pZCAqKTsKCnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2Zj
dCBfX3RyYW5zX2ZjdDsKICBfX2djb252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4
dF9mY3Q7CiAgX19nY29udl90cmFuc19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpf
X2RhdGE7CiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3Qg
X19nY29udl9zdGVwCnsKICBzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hh
bmRsZTsKICBfX2NvbnN0IGNoYXIgKl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hh
ciAqX19mcm9tX25hbWU7CiAgY2hhciAqX190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsK
ICBfX2djb252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2Zj
dDsKCgoKICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwog
IGludCBfX21pbl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCgogIGludCBfX3N0
YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7
CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWY7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7
CgoKCiAgaW50IF9fZmxhZ3M7CgoKCiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVyOwoKCgogIGlu
dCBfX2ludGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJzdGF0ZV90
IF9fc3RhdGU7CgoKCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgoK
dHlwZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3RlcHM7CiAgc3RydWN0
IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBfX2djb252X3N0
ZXBfZGF0YSBfX2RhdGEgW107Cn0gKl9fZ2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2Nv
bmZpZy5oIiAyIDMKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwog
IHN0cnVjdAogIHsKICAgIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAgIHN0cnVjdCBfX2dj
b252X3N0ZXBfZGF0YSBfX2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0eXBl
ZGVmIGludCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0
eXBlZGVmIGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkp
Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2Rl
X18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1
dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CiMgMzMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAy
IDMKIyA1MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kz
ODYtcmVkaGF0LWxpbnV4LzMuMi9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MyAiL3Vzci9saWIv
Z2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8zLjIvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVm
IF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OwojIDU0ICIvdXNyL2luY2x1ZGUvbGli
aW8uaCIgMiAzCiMgMTYyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lPX2p1bXBf
dDsgc3RydWN0IF9JT19GSUxFOwojIDE3MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRl
ZiB2b2lkIF9JT19sb2NrX3Q7CgoKCgoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9f
bWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9zOwoj
IDE5NSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKfTsKCgplbnVtIF9fY29kZWN2dF9yZXN1bHQK
ewogIF9fY29kZWN2dF9vaywKICBfX2NvZGVjdnRfcGFydGlhbCwKICBfX2NvZGVjdnRfZXJyb3Is
CiAgX19jb2RlY3Z0X25vY29udgp9OwojIDI2MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3Ry
dWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwoKCgoKICBjaGFyKiBfSU9fcmVhZF9wdHI7CiAg
Y2hhciogX0lPX3JlYWRfZW5kOwogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CiAgY2hhciogX0lPX3dy
aXRlX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX3B0cjsKICBjaGFyKiBfSU9fd3JpdGVfZW5kOwog
IGNoYXIqIF9JT19idWZfYmFzZTsKICBjaGFyKiBfSU9fYnVmX2VuZDsKCiAgY2hhciAqX0lPX3Nh
dmVfYmFzZTsKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7CiAgY2hhciAqX0lPX3NhdmVfZW5kOwoK
ICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklMRSAqX2NoYWlu
OwoKICBpbnQgX2ZpbGVubzsKCgoKICBpbnQgX2ZsYWdzMjsKCiAgX19vZmZfdCBfb2xkX29mZnNl
dDsKCgoKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBzaWduZWQgY2hhciBfdnRhYmxl
X29mZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCgoKICBfSU9fbG9ja190ICpfbG9jazsKIyAz
MTEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiAgX19vZmY2NF90IF9vZmZzZXQ7CgoKCgoKICB2
b2lkICpfX3BhZDE7CiAgdm9pZCAqX19wYWQyOwoKICBpbnQgX21vZGU7CgogIGNoYXIgX3VudXNl
ZDJbMTUgKiBzaXplb2YgKGludCkgLSAyICogc2l6ZW9mICh2b2lkICopXTsKCn07CgoKCgoKc3Ry
dWN0IF9JT19GSUxFX3BsdXM7CgpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9z
dGRpbl87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZG91dF87CmV4dGVy
biBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87CiMgMzUwICIvdXNyL2luY2x1
ZGUvbGliaW8uaCIgMwp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gKHZvaWQgKl9fY29v
a2llLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCgoKCgoKCnR5cGVkZWYgX19zc2l6
ZV90IF9faW9fd3JpdGVfZm4gKHZvaWQgKl9fY29va2llLCBfX2NvbnN0IGNoYXIgKl9fYnVmLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKTsKCgoKCgoKCnR5cGVk
ZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqX19jb29raWUsIF9fb2ZmNjRfdCAqX19wb3MsIGlu
dCBfX3cpOwoKCnR5cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZvaWQgKl9fY29va2llKTsKCgoK
CnR5cGVkZWYgX19pb19yZWFkX2ZuIGNvb2tpZV9yZWFkX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19p
b193cml0ZV9mbiBjb29raWVfd3JpdGVfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3NlZWtfZm4g
Y29va2llX3NlZWtfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX2Nsb3NlX2ZuIGNvb2tpZV9jbG9z
ZV9mdW5jdGlvbl90OwoKCnR5cGVkZWYgc3RydWN0CnsKICBfX2lvX3JlYWRfZm4gKnJlYWQ7CiAg
X19pb193cml0ZV9mbiAqd3JpdGU7CiAgX19pb19zZWVrX2ZuICpzZWVrOwogIF9faW9fY2xvc2Vf
Zm4gKmNsb3NlOwp9IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3Q7CnR5cGVkZWYgX0lPX2Nvb2tp
ZV9pb19mdW5jdGlvbnNfdCBjb29raWVfaW9fZnVuY3Rpb25zX3Q7CgpzdHJ1Y3QgX0lPX2Nvb2tp
ZV9maWxlOwoKCmV4dGVybiB2b2lkIF9JT19jb29raWVfaW5pdCAoc3RydWN0IF9JT19jb29raWVf
ZmlsZSAqX19jZmlsZSwgaW50IF9fcmVhZF93cml0ZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2b2lkICpfX2Nvb2tpZSwgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2Zucyk7CgoK
CgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGlu
dCBfX292ZXJmbG93IChfSU9fRklMRSAqLCBpbnQpIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9f
d3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193dWZsb3cg
KF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd292ZXJmbG93IChfSU9fRklM
RSAqLCB3aW50X3QpIHRocm93ICgpOwojIDQzMiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0
ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9J
T19wdXRjIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lP
X2Zlb2YgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChf
SU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9J
T19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChf
SU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklM
RSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSB0
aHJvdyAoKTsKIyA0NjIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zm
c2NhbmYgKF9JT19GSUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRo
cm93ICgpOwpleHRlcm4gaW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNv
bnN0IGNoYXIgKl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFf
bGlzdCkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3QgX0lPX3BhZG4gKF9JT19GSUxFICosIGlu
dCwgX19zc2l6ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBfSU9fc2dldG4gKF9JT19GSUxF
ICosIHZvaWQgKiwgc2l6ZV90KSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtv
ZmYgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50LCBpbnQpIHRocm93ICgpOwpleHRlcm4gX19v
ZmY2NF90IF9JT19zZWVrcG9zIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCkgdGhyb3cgKCk7
CgpleHRlcm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7
CiMgNTIwICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp9CiMgNzMgIi91c3IvaW5jbHVkZS9zdGRp
by5oIiAyIDMKCgoKCnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKIyA4NiAiL3Vzci9p
bmNsdWRlL3N0ZGlvLmgiIDMKCgp0eXBlZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7CgoKCgoKdHlwZWRl
ZiBfR19mcG9zNjRfdCBmcG9zNjRfdDsKIyAxMzggIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDEzOSAiL3Vzci9pbmNsdWRl
L3N0ZGlvLmgiIDIgMwoKCgpleHRlcm4gc3RydWN0IF9JT19GSUxFICpzdGRpbjsKZXh0ZXJuIHN0
cnVjdCBfSU9fRklMRSAqc3Rkb3V0OwpleHRlcm4gc3RydWN0IF9JT19GSUxFICpzdGRlcnI7CgoK
CgoKCgoKCmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93
ICgpOwoKZXh0ZXJuIGludCByZW5hbWUgKF9fY29uc3QgY2hhciAqX19vbGQsIF9fY29uc3QgY2hh
ciAqX19uZXcpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqdG1wZmlsZSAodm9pZCkgdGhy
b3cgKCk7CiMgMTczICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdG1wbmFt
IChjaGFyICpfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2b2lkKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqdG1wbmFtX3IgKGNoYXIgKl9fcykgdGhyb3cgKCk7
CiMgMTk1ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdGVtcG5hbSAoX19j
b25zdCBjaGFyICpfX2RpciwgX19jb25zdCBjaGFyICpfX3BmeCkKICAgICB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCmV4dGVybiBpbnQgZmNsb3NlIChGSUxFICpf
X3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZmbHVzaCAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmNsb3NlYWxsICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoK
ZXh0ZXJuIEZJTEUgKmZvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwK
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhy
b3cgKCk7CgpleHRlcm4gRklMRSAqZnJlb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
ZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0p
IHRocm93ICgpOwojIDI0MSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgpleHRlcm4gRklMRSAq
Zm9wZW42NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CmV4
dGVybiBGSUxFICpmcmVvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1l
LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2Rl
cywKICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gRklMRSAqZmRvcGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpf
X21vZGVzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKl9f
cmVzdHJpY3QgX19tYWdpY19jb29raWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lP
X2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2lvX2Z1bmNzKSB0aHJvdyAoKTsKCgpleHRlcm4gRklM
RSAqZm1lbW9wZW4gKHZvaWQgKl9fcywgc2l6ZV90IF9fbGVuLCBfX2NvbnN0IGNoYXIgKl9fbW9k
ZXMpIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKm9wZW5fbWVtc3RyZWFtIChjaGFyICoqX19y
ZXN0cmljdCBfX2J1ZmxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9f
cmVzdHJpY3QgX19zaXplbG9jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChG
SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCBzZXR2YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFy
ICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgIGludCBfX21vZGVzLCBzaXpl
X3QgX19uKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJTEUgKl9fcmVz
dHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1ZiAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZnByaW50ZiAoRklMRSAq
X19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHByaW50ZiAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGlu
dCBzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRo
cm93ICgpOwoKZXh0ZXJuIGludCB2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
b3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCB2
c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93
ICgpOwoKCgoKCmV4dGVybiBpbnQgc25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXpl
X3QgX19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9f
IChfX3ByaW50Zl9fLCAzLCA0KSkpOwoKZXh0ZXJuIGludCB2c25wcmludGYgKGNoYXIgKl9fcmVz
dHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpOwoK
CgoKCgpleHRlcm4gaW50IHZhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2YsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFf
bGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19w
cmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBfX2FzcHJpbnRmIChjaGFyICoqX19yZXN0cmlj
dCBfX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19w
cmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3Qg
X19wdHIsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zt
dCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50
Zl9fLCAyLCAzKSkpOwoKCmV4dGVybiBpbnQgdmRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mbXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0
IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50
Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IGRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19m
b3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgoKCgpleHRlcm4gaW50IGZzY2FuZiAoRklM
RSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2NhbmYgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgc3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAg
ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCgoK
CmV4dGVybiBpbnQgdmZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBf
X2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9f
LCAyLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDEsIDApKSk7CgoKZXh0ZXJuIGludCB2c3NjYW5m
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsK
CgoKCgoKZXh0ZXJuIGludCBmZ2V0YyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4g
aW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldGNoYXIg
KHZvaWQpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBpbnQgZ2V0Y191bmxvY2tlZCAoRklMRSAq
X19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGludCBmZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZnB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBwdXRjaGFyIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgoKCgpleHRl
cm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7
CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHB1dHcgKGludCBfX3csIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
Y2hhciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLCBGSUxFICpfX3Jlc3Ry
aWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqZ2V0cyAoY2hhciAq
X19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpmZ2V0c191bmxvY2tlZCAoY2hhciAqX19y
ZXN0cmljdCBfX3MsIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAq
X19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CiMgNDYzICIvdXNyL2luY2x1ZGUvc3RkaW8u
aCIgMwpleHRlcm4gX19zc2l6ZV90IF9fZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGlu
ZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBf
X24sIGludCBfX2RlbGltaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUg
Kl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IGdldGRlbGlt
IChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCmV4
dGVybiBfX3NzaXplX3QgZ2V0bGluZSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoK
CgoKCmV4dGVybiBpbnQgZnB1dHMgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIEZJTEUg
Kl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdXRzIChf
X2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5nZXRjIChpbnQgX19j
LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgZnJlYWQgKHZvaWQg
Kl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHNp
emVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6
ZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19z
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnB1dHNfdW5sb2NrZWQgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJp
Y3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZF91bmxvY2tlZCAo
dm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cg
KCk7CmV4dGVybiBzaXplX3QgZndyaXRlX3VubG9ja2VkIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJp
Y3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gaW50IGZzZWVrIChGSUxFICpfX3N0cmVhbSwgbG9uZyBpbnQgX19vZmYsIGludCBfX3doZW5j
ZSkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgZnRlbGwgKEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKCmV4dGVybiB2b2lkIHJld2luZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKIyA1
MzAgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNlZWtvIChGSUxFICpfX3N0
cmVhbSwgX19vZmZfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4dGVybiBfX29m
Zl90IGZ0ZWxsbyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwojIDU0NiAiL3Vzci9pbmNsdWRl
L3N0ZGlvLmgiIDMKCgoKZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry
ZWFtLCBmcG9zX3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gaW50
IGZzZXRwb3MgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3NfdCAqX19wb3MpIHRocm93ICgp
OwojIDU2NSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKZXh0ZXJuIGludCBmc2Vla282NCAo
RklMRSAqX19zdHJlYW0sIF9fb2ZmNjRfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsK
ZXh0ZXJuIF9fb2ZmNjRfdCBmdGVsbG82NCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRl
cm4gaW50IGZnZXRwb3M2NCAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvczY0X3QgKl9f
cmVzdHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCk7CmV4dGVybiBpbnQgZnNldHBvczY0IChGSUxF
ICpfX3N0cmVhbSwgX19jb25zdCBmcG9zNjRfdCAqX19wb3MpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVv
ZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyX3VubG9ja2VkIChGSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAoRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJl
YW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIHBlcnJvciAoX19jb25zdCBjaGFyICpfX3Mp
IHRocm93ICgpOwoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N5c19lcnJsaXN0LmgiIDEg
MwojIDI3ICIvdXNyL2luY2x1ZGUvYml0cy9zeXNfZXJybGlzdC5oIiAzCmV4dGVybiBpbnQgc3lz
X25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKCgpleHRl
cm4gaW50IF9zeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lzX2Vycmxp
c3RbXTsKIyA2MDIgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKCmV4dGVybiBpbnQgZmls
ZW5vIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZpbGVub191bmxv
Y2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqcG9wZW4g
KF9fY29uc3QgY2hhciAqX19jb21tYW5kLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgcGNsb3NlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIGNoYXIgKmN0ZXJtaWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIg
KmN1c2VyaWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpzdHJ1Y3Qgb2JzdGFjazsKCgpleHRl
cm4gaW50IG9ic3RhY2tfcHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3Rh
Y2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChf
X3ByaW50Zl9fLCAyLCAzKSkpOwpleHRlcm4gaW50IG9ic3RhY2tfdnByaW50ZiAoc3RydWN0IG9i
c3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmdzKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwoKCgoKCgoKZXh0ZXJuIHZvaWQgZmxv
Y2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZnRyeWxvY2tm
aWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZnVubG9ja2ZpbGUg
KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA2NzYgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIgMSAzCiMgMzMgIi91c3IvaW5jbHVkZS9i
aXRzL3N0ZGlvLmgiIDMKaW5saW5lIGludAp2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mbXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKQp7CiAgcmV0dXJuIHZmcHJp
bnRmIChzdGRvdXQsIF9fZm10LCBfX2FyZyk7Cn0KCgppbmxpbmUgaW50CmdldGNoYXIgKHZvaWQp
IHRocm93ICgpCnsKICByZXR1cm4gX0lPX2dldGMgKHN0ZGluKTsKfQoKCgoKaW5saW5lIGludApn
ZXRjX3VubG9ja2VkIChGSUxFICpfX2ZwKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoX19mcCktPl9J
T19yZWFkX3B0ciA+PSAoX19mcCktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKF9fZnApIDogKih1
bnNpZ25lZCBjaGFyICopIChfX2ZwKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoKaW5saW5lIGludApn
ZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoc3RkaW4pLT5fSU9f
cmVhZF9wdHIgPj0gKHN0ZGluKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAoc3RkaW4pIDogKih1
bnNpZ25lZCBjaGFyICopIChzdGRpbiktPl9JT19yZWFkX3B0cisrKTsKfQoKCgoKaW5saW5lIGlu
dApwdXRjaGFyIChpbnQgX19jKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9JT19wdXRjIChfX2MsIHN0
ZG91dCk7Cn0KCgoKCmlubGluZSBpbnQKZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0ciA+
PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3RyZWFtLCAodW5z
aWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFtKS0+X0lPX3dy
aXRlX3B0cisrID0gKF9fYykpKTsKfQoKCgoKCmlubGluZSBpbnQKcHV0Y191bmxvY2tlZCAoaW50
IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5f
SU9fd3JpdGVfcHRyID49IChfX3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAo
X19zdHJlYW0sICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCooX19z
dHJlYW0pLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKaW5saW5lIGludApwdXRjaGFy
X3VubG9ja2VkIChpbnQgX19jKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKHN0ZG91dCktPl9JT193
cml0ZV9wdHIgPj0gKHN0ZG91dCktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoc3Rkb3V0
LCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKHN0ZG91dCktPl9J
T193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgoKCgppbmxpbmUgX19zc2l6ZV90CmdldGxpbmUg
KGNoYXIgKipfX2xpbmVwdHIsIHNpemVfdCAqX19uLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkK
ewogIHJldHVybiBfX2dldGRlbGltIChfX2xpbmVwdHIsIF9fbiwgJ1xuJywgX19zdHJlYW0pOwp9
CgoKCgoKaW5saW5lIGludApmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkK
ewogIHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAmIDB4MTApICE9IDApOwp9CgoKaW5saW5l
IGludApmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJu
ICgoKF9fc3RyZWFtKS0+X2ZsYWdzICYgMHgyMCkgIT0gMCk7Cn0KIyA2NzcgIi91c3IvaW5jbHVk
ZS9zdGRpby5oIiAyIDMKCgp9CiMgNzcgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNs
dWRlL0ludmVudG9yL1NiQmFzaWMuaCIgMgoKCgoKCgp0eXBlZGVmIGludCBTYkJvb2w7CiMgNjAg
Ii4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL21pc2MvU29CYXNp
Yy5oIiAyCiMgNjMgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9y
L21pc2MvU29CYXNlLmgiIDIKIyAxICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVk
ZS9JbnZlbnRvci9taXNjL1NvQXVkaXRvckxpc3QuaCIgMQojIDYwICIuLi8uLi8uLi8uLi8uLi9s
aWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9taXNjL1NvQXVkaXRvckxpc3QuaCIKIyAxICIu
Li8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9TYlBMaXN0LmgiIDEK
IyA2NCAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvU2JQTGlz
dC5oIgojIDEgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL1Ni
TGluZWFyLmgiIDEKIyA3NCAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52
ZW50b3IvU2JMaW5lYXIuaCIKIyAxICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAxIDMKIyAyOSAiL3Vz
ci9pbmNsdWRlL21hdGguaCIgMwpleHRlcm4gIkMiIHsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy9odWdlX3ZhbC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoKCiMgMSAi
L3Vzci9pbmNsdWRlL2JpdHMvbmFuLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAy
IDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMSAzCiMgMjkgIi91c3IvaW5j
bHVkZS9iaXRzL21hdGhkZWYuaCIgMwp0eXBlZGVmIGxvbmcgZG91YmxlIGZsb2F0X3Q7Cgp0eXBl
ZGVmIGxvbmcgZG91YmxlIGRvdWJsZV90OwojIDQxICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMK
IyA2NSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhj
YWxscy5oIiAxIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKCgpleHRl
cm4gZG91YmxlIGFjb3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYWNv
cyAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGFzaW4gKGRvdWJsZSBfX3gp
IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXNpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7Cgpl
eHRlcm4gZG91YmxlIGF0YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f
YXRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGF0YW4yIChkb3VibGUg
X195LCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4yIChkb3VibGUg
X195LCBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGNvcyAoZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19jb3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
ZXh0ZXJuIGRvdWJsZSBzaW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f
c2luIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgdGFuIChkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3RhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gZG91YmxlIGNvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fY29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHNpbmggKGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2luaCAoZG91YmxlIF9feCkgdGhyb3cg
KCk7CgpleHRlcm4gZG91YmxlIHRhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91
YmxlIF9fdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBzaW5jb3Mg
KGRvdWJsZSBfX3gsIGRvdWJsZSAqX19zaW54LCBkb3VibGUgKl9fY29zeCkgdGhyb3cgKCk7IGV4
dGVybiB2b2lkIF9fc2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpf
X2Nvc3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIGFjb3NoIChkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Fjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4
dGVybiBkb3VibGUgYXNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f
YXNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhdGFuaCAoZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFuaCAoZG91YmxlIF9feCkgdGhyb3cg
KCk7CgoKCgoKCgpleHRlcm4gZG91YmxlIGV4cCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX19leHAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZnJl
eHAgKGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg
X19mcmV4cCAoZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4g
ZG91YmxlIGxkZXhwIChkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX19sZGV4cCAoZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOwoK
CmV4dGVybiBkb3VibGUgbG9nIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X2xvZyAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxMCAoZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cxMCAoZG91YmxlIF9feCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGRvdWJsZSBtb2RmIChkb3VibGUgX194LCBkb3VibGUgKl9faXB0cikgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX19tb2RmIChkb3VibGUgX194LCBkb3VibGUgKl9faXB0cikg
dGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGV4cDEwIChkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGRvdWJsZSBfX2V4cDEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3Vi
bGUgcG93MTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcG93MTAgKGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgZXhwbTEgKGRvdWJsZSBfX3gp
IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXhwbTEgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
CmV4dGVybiBkb3VibGUgbG9nMXAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fbG9nMXAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nYiAoZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2diIChkb3VibGUgX194KSB0aHJv
dyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBleHAyIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX2V4cDIgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUg
bG9nMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cyIChkb3VibGUg
X194KSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gZG91YmxlIHBvdyAoZG91YmxlIF9feCwgZG91
YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19wb3cgKGRvdWJsZSBfX3gsIGRvdWJs
ZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgc3FydCAoZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX19zcXJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gZG91YmxlIGh5cG90IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX2h5cG90IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKCgoK
ZXh0ZXJuIGRvdWJsZSBjYnJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X2NicnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBkb3VibGUgY2VpbCAo
ZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4g
ZG91YmxlIF9fY2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKCmV4dGVybiBkb3VibGUgZmFicyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fZmFicyAoZG91YmxlIF9feCkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZmxv
b3IgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0
ZXJuIGRvdWJsZSBfX2Zsb29yIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBmbW9kIChkb3VibGUgX194LCBkb3VibGUgX195
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Ztb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mIChkb3VibGUgX192YWx1ZSkgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGUgKGRv
dWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoK
ZXh0ZXJuIGludCBpc2luZiAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZSAoZG91YmxlIF9fdmFsdWUpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGRyZW0gKGRv
dWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZHJlbSAoZG91
YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgc2lnbmlmaWNh
bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2lnbmlmaWNhbmQgKGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgY29weXNpZ24gKGRvdWJsZSBf
X3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0
ZXJuIGRvdWJsZSBfX2NvcHlzaWduIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCmV4dGVybiBkb3VibGUgbmFuIChfX2Nv
bnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBl
eHRlcm4gZG91YmxlIF9fbmFuIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVybiBpbnQgX19pc25hbiAoZG91YmxlIF9f
dmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGlu
dCBpc25hbiAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgpleHRlcm4gZG91YmxlIGowIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fajAgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgajEgKGRvdWJsZSkgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX19qMSAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBq
biAoaW50LCBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fam4gKGludCwgZG91Ymxl
KSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5MCAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX3kwIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIHkxIChkb3VibGUpIHRo
cm93ICgpOyBleHRlcm4gZG91YmxlIF9feTEgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3Vi
bGUgeW4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3luIChpbnQsIGRv
dWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgZXJmIChkb3VibGUpIHRocm93ICgp
OyBleHRlcm4gZG91YmxlIF9fZXJmIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGVy
ZmMgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19lcmZjIChkb3VibGUpIHRocm93
ICgpOwpleHRlcm4gZG91YmxlIGxnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs
ZSBfX2xnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSB0Z2FtbWEg
KGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX190Z2FtbWEgKGRvdWJsZSkgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX2dhbW1hIChkb3VibGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIGxnYW1t
YV9yIChkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19s
Z2FtbWFfciAoZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu
IGRvdWJsZSByaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JpbnQg
KGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbmV4dGFmdGVyIChkb3VibGUg
X194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4
dGVybiBkb3VibGUgX19uZXh0YWZ0ZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBkb3VibGUgbmV4dHRvd2FyZCAo
ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uZXh0dG93YXJkIChkb3VibGUgX194LCBsb25nIGRv
dWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJu
IGRvdWJsZSByZW1haW5kZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRl
cm4gZG91YmxlIF9fcmVtYWluZGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGRvdWJsZSBzY2FsYm4gKGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOyBl
eHRlcm4gZG91YmxlIF9fc2NhbGJuIChkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGludCBpbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9n
YiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxibG4gKGRvdWJs
ZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zY2FsYmxuIChk
b3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIG5lYXJi
eWludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19uZWFyYnlpbnQgKGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHJvdW5kIChkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGRvdWJsZSB0cnVuYyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fdHJ1bmMgKGRvdWJsZSBfX3gpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBkb3VibGUgcmVtcXVvIChk
b3VibGUgX194LCBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs
ZSBfX3JlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGludCBfX2xyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9u
ZyBpbnQgbGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQg
X19sbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQgbHJvdW5k
IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kIChkb3VibGUg
X194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZCAoZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZCAoZG91YmxlIF9feCkgdGhy
b3cgKCk7CgoKCmV4dGVybiBkb3VibGUgZmRpbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX19mZGltIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJv
dyAoKTsKCgpleHRlcm4gZG91YmxlIGZtYXggKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93
ICgpOyBleHRlcm4gZG91YmxlIF9fZm1heCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGRvdWJsZSBmbWluIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX2ZtaW4gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeSAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAg
ICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0IChk
b3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKCmV4dGVybiBkb3VibGUgZm1hIChkb3VibGUgX194LCBkb3VibGUgX195LCBkb3VibGUgX196
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtYSAoZG91YmxlIF9feCwgZG91YmxlIF9feSwg
ZG91YmxlIF9feikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxiIChkb3VibGUgX194
LCBkb3VibGUgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxiIChkb3VibGUgX194
LCBkb3VibGUgX19uKSB0aHJvdyAoKTsKIyA2NiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMg
ODggIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2Fs
bHMuaCIgMSAzCiMgNTMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCgoKZXh0ZXJu
IGZsb2F0IGFjb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hY29zZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhc2luZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXNpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4g
ZmxvYXQgYXRhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0YW5mIChm
bG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGF0YW4yZiAoZmxvYXQgX195LCBmbG9h
dCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQg
X194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgY29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGZsb2F0IF9fY29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBz
aW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zaW5mIChmbG9hdCBfX3gp
IHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHRhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVy
biBmbG9hdCBfX3RhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgY29z
aGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Nvc2hmIChmbG9hdCBfX3gp
IHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX19zaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCB0YW5o
ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGFuaGYgKGZsb2F0IF9feCkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBzaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0ICpfX3Np
bngsIGZsb2F0ICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvc2YgKGZsb2F0
IF9feCwgZmxvYXQgKl9fc2lueCwgZmxvYXQgKl9fY29zeCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBmbG9hdCBhY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Fjb3No
ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhc2luaGYgKGZsb2F0IF9feCkg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2FzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4
dGVybiBmbG9hdCBhdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0
YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBmbG9hdCBleHBmIChmbG9h
dCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHBmIChmbG9hdCBfX3gpIHRocm93ICgp
OwoKCmV4dGVybiBmbG9hdCBmcmV4cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fZnJleHBmIChmbG9hdCBfX3gsIGludCAqX19leHBvbmVudCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxkZXhwZiAoZmxvYXQgX194LCBpbnQgX19leHBvbmVu
dCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xkZXhwZiAoZmxvYXQgX194LCBpbnQgX19leHBv
bmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZ2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7
IGV4dGVybiBmbG9hdCBfX2xvZ2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0
IGxvZzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMTBmIChmbG9h
dCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBtb2RmZiAoZmxvYXQgX194LCBmbG9hdCAq
X19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbW9kZmYgKGZsb2F0IF9feCwgZmxvYXQg
Kl9faXB0cikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgZXhwMTBmIChmbG9hdCBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19leHAxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRl
cm4gZmxvYXQgcG93MTBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19wb3cx
MGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGV4cG0xZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwbTFmIChmbG9hdCBfX3gpIHRocm93ICgp
OwoKCmV4dGVybiBmbG9hdCBsb2cxcGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX2xvZzFwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9nYmYgKGZs
b2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZ2JmIChmbG9hdCBfX3gpIHRocm93
ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgZXhwMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVy
biBmbG9hdCBfX2V4cDJmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cy
ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMmYgKGZsb2F0IF9feCkg
dGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGZsb2F0IHBvd2YgKGZsb2F0IF9feCwgZmxvYXQgX195
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcG93ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRo
cm93ICgpOwoKCmV4dGVybiBmbG9hdCBzcXJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGZsb2F0IF9fc3FydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGh5
cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19oeXBv
dGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGNi
cnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jYnJ0ZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gZmxvYXQgY2VpbGYgKGZsb2F0IF9feCkgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19jZWlsZiAoZmxv
YXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZs
b2F0IGZhYnNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsgZXh0ZXJuIGZsb2F0IF9fZmFic2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBmbG9vcmYgKGZsb2F0IF9feCkgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19mbG9vcmYgKGZs
b2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBm
bG9hdCBmbW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19mbW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBf
X2lzaW5mZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKCmV4dGVybiBpbnQgX19maW5pdGVmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBpc2luZmYgKGZsb2F0IF9f
dmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50
IGZpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgpleHRlcm4gZmxvYXQgZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAo
KTsgZXh0ZXJuIGZsb2F0IF9fZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGZsb2F0IHNpZ25pZmljYW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGZsb2F0IF9fc2lnbmlmaWNhbmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBm
bG9hdCBjb3B5c2lnbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2NvcHlzaWduZiAoZmxvYXQgX194LCBm
bG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKZXh0
ZXJuIGZsb2F0IG5hbmYgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25hbmYgKF9fY29uc3QgY2hhciAqX190
YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGlu
dCBfX2lzbmFuZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKCgpleHRlcm4gaW50IGlzbmFuZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBqMGYgKGZsb2F0KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fajBmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBq
MWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fajFmIChmbG9hdCkgdGhyb3cgKCk7
CmV4dGVybiBmbG9hdCBqbmYgKGludCwgZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19q
bmYgKGludCwgZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgeTBmIChmbG9hdCkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX3kwZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgeTFm
IChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3kxZiAoZmxvYXQpIHRocm93ICgpOwpl
eHRlcm4gZmxvYXQgeW5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9feW5m
IChpbnQsIGZsb2F0KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGVyZmYgKGZsb2F0KSB0
aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXJmZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxv
YXQgZXJmY2YgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXJmY2YgKGZsb2F0KSB0
aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGxnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fbGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgdGdhbW1h
ZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX190Z2FtbWFmIChmbG9hdCkgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxv
YXQgX19nYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGxnYW1tYWZf
ciAoZmxvYXQsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xnYW1t
YWZfciAoZmxvYXQsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gZmxv
YXQgcmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JpbnRmIChmbG9h
dCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBuZXh0YWZ0ZXJmIChmbG9hdCBfX3gsIGZs
b2F0IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxv
YXQgX19uZXh0YWZ0ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGZsb2F0IG5leHR0b3dhcmRmIChmbG9hdCBfX3gs
IGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBl
eHRlcm4gZmxvYXQgX19uZXh0dG93YXJkZiAoZmxvYXQgX194LCBsb25nIGRvdWJsZSBfX3kpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGZsb2F0IHJlbWFp
bmRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcmVt
YWluZGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQg
c2NhbGJuZiAoZmxvYXQgX194LCBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2Nh
bGJuZiAoZmxvYXQgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpbG9nYmYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9nYmYgKGZsb2F0IF9feCkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19u
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQg
X19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IG5lYXJieWludGYgKGZsb2F0IF9feCkgdGhy
b3cgKCk7IGV4dGVybiBmbG9hdCBfX25lYXJieWludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoK
CmV4dGVybiBmbG9hdCByb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf
X3JvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHRydW5jZiAoZmxv
YXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9h
dCBfX3RydW5jZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKCgpleHRlcm4gZmxvYXQgcmVtcXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAq
X19xdW8pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0
IF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludGYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyaW50ZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50ZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgp
OwoKCgpleHRlcm4gbG9uZyBpbnQgbHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgaW50IF9fbHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9u
ZyBpbnQgbGxyb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50
IF9fbGxyb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBmZGltZiAo
ZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mZGltZiAoZmxv
YXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBmbWF4ZiAoZmxvYXQg
X194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbWF4ZiAoZmxvYXQgX194
LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBmbWluZiAoZmxvYXQgX194LCBm
bG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbWluZiAoZmxvYXQgX194LCBmbG9h
dCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeWYgKGZsb2F0IF9fdmFs
dWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBp
bnQgX19zaWduYml0ZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBmbG9hdCBmbWFmIChmbG9hdCBfX3gsIGZsb2F0IF9f
eSwgZmxvYXQgX196KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZm1hZiAoZmxvYXQgX194LCBm
bG9hdCBfX3ksIGZsb2F0IF9feikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc2NhbGJmIChm
bG9hdCBfX3gsIGZsb2F0IF9fbikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NjYWxiZiAoZmxv
YXQgX194LCBmbG9hdCBfX24pIHRocm93ICgpOwojIDg5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAy
IDMKIyAxMDkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9t
YXRoY2FsbHMuaCIgMSAzCiMgNTMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19hY29zbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVy
biBsb25nIGRvdWJsZSBhc2lubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fYXNpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9u
ZyBkb3VibGUgYXRhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX2F0YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91
YmxlIGF0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19hdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgY29zbCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zbCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBzaW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zaW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX3RhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gbG9uZyBkb3VibGUgY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2Nvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJu
IGxvbmcgZG91YmxlIHNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19zaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25n
IGRvdWJsZSB0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBz
aW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX3NpbngsIGxvbmcgZG91Ymxl
ICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvc2wgKGxvbmcgZG91YmxlIF9f
eCwgbG9uZyBkb3VibGUgKl9fc2lueCwgbG9uZyBkb3VibGUgKl9fY29zeCkgdGhyb3cgKCk7CgoK
CgoKCmV4dGVybiBsb25nIGRvdWJsZSBhY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK
CmV4dGVybiBsb25nIGRvdWJsZSBhc2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX2FzaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4
dGVybiBsb25nIGRvdWJsZSBhdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2F0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoK
CmV4dGVybiBsb25nIGRvdWJsZSBleHBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19leHBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVy
biBsb25nIGRvdWJsZSBmcmV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZnJleHBsIChsb25nIGRvdWJsZSBfX3gsIGlu
dCAqX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxkZXhwbCAobG9u
ZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2xkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2xvZ2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGxvbmcgZG91YmxlIGxvZzEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fbG9nMTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBs
b25nIGRvdWJsZSBtb2RmbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19pcHRyKSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbW9kZmwgKGxvbmcgZG91YmxlIF9feCwgbG9u
ZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwMTBs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHAxMGwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgcG93MTBsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19wb3cxMGwgKGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cG0xbCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwbTFsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cxcGwgKGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzFwbCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nYmwgKGxvbmcg
ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2JsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwMmwgKGxvbmcg
ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cDJsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cybCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMmwgKGxvbmcgZG91Ymxl
IF9feCkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHBvd2wgKGxvbmcgZG91
YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
cG93bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVy
biBsb25nIGRvdWJsZSBzcXJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fc3FydGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu
IGxvbmcgZG91YmxlIGh5cG90bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRo
cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19oeXBvdGwgKGxvbmcgZG91YmxlIF9feCwgbG9u
ZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNicnRsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jYnJ0bCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY2VpbGwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19jZWlsbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZhYnNsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fZmFic2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbG9vcmwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19mbG9vcmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbW9kbCAobG9uZyBkb3VibGUg
X194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbW9k
bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGludCBfX2lzaW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGVsIChsb25nIGRvdWJsZSBfX3Zh
bHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGlu
dCBpc2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZWwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUg
ZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpZ25pZmljYW5kbCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2lnbmlmaWNhbmRsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3B5c2lnbmwgKGxv
bmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NvcHlzaWdubCAobG9uZyBkb3VibGUg
X194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5hbmwgKF9fY29uc3QgY2hhciAqX190YWdiKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X25hbmwgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBfX2lzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gaW50IGlzbmFu
bCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBqMGwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fajBsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25n
IGRvdWJsZSBqMWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
ajFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBqbmwgKGludCwg
bG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qbmwgKGludCwgbG9u
ZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeTBsIChsb25nIGRvdWJsZSkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kwbCAobG9uZyBkb3VibGUpIHRocm93ICgp
OwpleHRlcm4gbG9uZyBkb3VibGUgeTFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX3kxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3Vi
bGUgeW5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
eW5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91Ymxl
IGVyZmwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXJmbCAo
bG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgZXJmY2wgKGxvbmcgZG91
YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXJmY2wgKGxvbmcgZG91YmxlKSB0
aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGxnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAo
KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgdGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX190Z2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4g
bG9uZyBkb3VibGUgX19nYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IGxvbmcgZG91YmxlIGxnYW1tYWxfciAobG9uZyBkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhy
b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWxfciAobG9uZyBkb3VibGUsIGludCAq
X19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmludGwgKGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JpbnRsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0YWZ0ZXJsIChs
b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0YWZ0ZXJsIChsb25nIGRvdWJs
ZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIG5leHR0b3dhcmRsIChsb25nIGRvdWJsZSBfX3gsIGxv
bmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19uZXh0dG93YXJkbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs
ZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGxv
bmcgZG91YmxlIHJlbWFpbmRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtYWluZGVybCAobG9uZyBkb3VibGUgX194
LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJu
bCAobG9uZyBkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fc2NhbGJubCAobG9uZyBkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGludCBpbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9n
YmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2Nh
bGJsbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fc2NhbGJsbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5lYXJieWludGwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX25lYXJieWludGwgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSByb3VuZGwgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JvdW5kbCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHRydW5jbCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX3RydW5jbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmVtcXVvbCAobG9uZyBkb3VibGUgX194
LCBsb25nIGRvdWJsZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19yZW1xdW9sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgaW50ICpfX3F1
bykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludGwgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyaW50bCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQgbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBmZGltbCAobG9uZyBkb3VibGUgX194LCBs
b25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mZGltbCAobG9u
ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRv
dWJsZSBmbWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19mbWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf
X3kpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbWlubCAobG9uZyBkb3VibGUgX194
LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbWlubCAo
bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IF9fZnBjbGFzc2lmeWwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0bCAobG9uZyBkb3Vi
bGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK
CmV4dGVybiBsb25nIGRvdWJsZSBmbWFsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f
eSwgbG9uZyBkb3VibGUgX196KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1hbCAo
bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feikgdGhyb3cg
KCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg
ZG91YmxlIF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibCAobG9uZyBk
b3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIHRocm93ICgpOwojIDExMCAiL3Vzci9pbmNsdWRl
L21hdGguaCIgMiAzCiMgMTI1ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCmV4dGVybiBpbnQgc2ln
bmdhbTsKIyAxNjYgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZW51bQogIHsKICAgIEZQX05BTiwK
CiAgICBGUF9JTkZJTklURSwKCiAgICBGUF9aRVJPLAoKICAgIEZQX1NVQk5PUk1BTCwKCiAgICBG
UF9OT1JNQUwKCiAgfTsKIyAyNTIgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKdHlwZWRlZiBlbnVt
CnsKICBfSUVFRV8gPSAtMSwKICBfU1ZJRF8sCiAgX1hPUEVOXywKICBfUE9TSVhfLAogIF9JU09D
Xwp9IF9MSUJfVkVSU0lPTl9UWVBFOwoKCgoKZXh0ZXJuIF9MSUJfVkVSU0lPTl9UWVBFIF9MSUJf
VkVSU0lPTjsKIyAyNzUgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKc3RydWN0IF9fZXhjZXB0aW9u
CgoKCiAgewogICAgaW50IHR5cGU7CiAgICBjaGFyICpuYW1lOwogICAgZG91YmxlIGFyZzE7CiAg
ICBkb3VibGUgYXJnMjsKICAgIGRvdWJsZSByZXR2YWw7CiAgfTsKCgpleHRlcm4gaW50IG1hdGhl
cnIgKHN0cnVjdCBfX2V4Y2VwdGlvbiAqX19leGMpIHRocm93ICgpOwojIDM2MiAiL3Vzci9pbmNs
dWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMSAzCiMg
MTI3ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgaW50Cl9fc2ln
bmJpdGYgKGZsb2F0IF9feCkgdGhyb3cgKCkKewogIF9fZXh0ZW5zaW9uX18gdW5pb24geyBmbG9h
dCBfX2Y7IGludCBfX2k7IH0gX191ID0geyBfX2Y6IF9feCB9OwogIHJldHVybiBfX3UuX19pIDwg
MDsKfQpfX2lubGluZSBpbnQKX19zaWduYml0IChkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgX19l
eHRlbnNpb25fXyB1bmlvbiB7IGRvdWJsZSBfX2Q7IGludCBfX2lbMl07IH0gX191ID0geyBfX2Q6
IF9feCB9OwogIHJldHVybiBfX3UuX19pWzFdIDwgMDsKfQpfX2lubGluZSBpbnQKX19zaWduYml0
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgX19leHRlbnNpb25fXyB1bmlvbiB7IGxv
bmcgZG91YmxlIF9fbDsgaW50IF9faVszXTsgfSBfX3UgPSB7IF9fbDogX194IH07CiAgcmV0dXJu
IChfX3UuX19pWzJdICYgMHg4MDAwKSAhPSAwOwp9CiMgMjkxICIvdXNyL2luY2x1ZGUvYml0cy9t
YXRoaW5saW5lLmgiIDMKX19pbmxpbmUgZG91YmxlIF9fc2duIChkb3VibGUpIHRocm93ICgpOyBf
X2lubGluZSBkb3VibGUgX19zZ24gKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9feCA9
PSAwLjAgPyAwLjAgOiAoX194ID4gMC4wID8gMS4wIDogLTEuMCk7IH0gX19pbmxpbmUgZmxvYXQg
X19zZ25mIChmbG9hdCkgdGhyb3cgKCk7IF9faW5saW5lIGZsb2F0IF9fc2duZiAoZmxvYXQgX194
KSB0aHJvdyAoKSB7IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9feCA+IDAuMCA/IDEuMCA6
IC0xLjApOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2dubCAobG9uZyBkb3VibGUpIHRocm93
ICgpOyBfX2lubGluZSBsb25nIGRvdWJsZSBfX3NnbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCkgeyByZXR1cm4gX194ID09IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKTsg
fQojIDQyNiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGRvdWJs
ZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25n
IGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192
YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsg
fSBfX2lubGluZSBmbG9hdCBhdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KSB0aHJvdyAoKSB7
IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwYXRh
biIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7IHJl
dHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGF0YW4ybCAobG9uZyBkb3VibGUg
X195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192
YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAi
IChfX3gpLCAidSIgKF9feSkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KX19pbmxpbmUg
bG9uZyBkb3VibGUgX19hdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVf
XyAoImZwYXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0
KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9CgoKX19pbmxpbmUgZG91YmxlIGZtb2QgKGRvdWJsZSBf
X3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsg
X19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW1cblx0IiAiZm5zdHN3CSUlYXhcblx0IiAic2Fo
ZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDog
ImF4IiwgImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGZtb2RmIChmbG9h
dCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVl
OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJz
YWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkg
OiAiYXgiLCAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgZm1v
ZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJlZ2lzdGVy
IGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtXG5cdCIg
ImZuc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSkgOiAi
MCIgKF9feCksICJ1IiAoX195KSA6ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfQojIDQ0
MSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGRvdWJsZSBzcXJ0
IChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20g
X192b2xhdGlsZV9fICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0
dXJuIF9fcmVzdWx0OyB9IF9faW5saW5lIGZsb2F0IHNxcnRmIChmbG9hdCBfX3gpIHRocm93ICgp
IHsgcmVnaXN0ZXIgZmxvYXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6
ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGlu
ZSBsb25nIGRvdWJsZSBzcXJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVy
IGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQi
IChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KX19pbmxpbmUgbG9u
ZyBkb3VibGUgX19zcXJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxv
bmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChf
X3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KCgpfX2lubGluZSBkb3Vi
bGUgZmFicyAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnMgKF9f
eCk7IH0KX19pbmxpbmUgZmxvYXQgZmFic2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZXR1cm4g
X19idWlsdGluX2ZhYnNmIChfX3gpOyB9Cl9faW5saW5lIGxvbmcgZG91YmxlIGZhYnNsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbCAoX194KTsgfQpf
X2lubGluZSBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsg
cmV0dXJuIF9fYnVpbHRpbl9mYWJzbCAoX194KTsgfQojIDQ2NyAiL3Vzci9pbmNsdWRlL2JpdHMv
bWF0aGlubGluZS5oIiAzCl9faW5saW5lIGRvdWJsZSBhdGFuIChkb3VibGUgX194KSB0aHJvdyAo
KSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsg
ZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4g
X19yZXN1bHQ7IH0gX19pbmxpbmUgZmxvYXQgYXRhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyBy
ZWdpc3RlciBmbG9hdCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsgZnBhdGFu
IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1
bHQ7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgYXRhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgi
ZmxkMTsgZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyBy
ZXR1cm4gX19yZXN1bHQ7IH0KCl9faW5saW5lIGxvbmcgZG91YmxlIF9fc2duMWwgKGxvbmcgZG91
YmxlKSB0aHJvdyAoKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ24xbCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKSB7IF9fZXh0ZW5zaW9uX18gdW5pb24geyBsb25nIGRvdWJsZSBfX3hsZDsg
dW5zaWduZWQgaW50IF9feGlbM107IH0gX19uID0geyBfX3hsZDogX194IH07IF9fbi5fX3hpWzJd
ID0gKF9fbi5fX3hpWzJdICYgMHg4MDAwKSB8IDB4M2ZmZjsgX19uLl9feGlbMV0gPSAweDgwMDAw
MDAwOyBfX24uX194aVswXSA9IDA7IHJldHVybiBfX24uX194bGQ7IH0KIyA0OTMgIi91c3IvaW5j
bHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgZmxvb3IgKGRvdWJsZSBf
X3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1
bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19j
d3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0
bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA0MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAl
MCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQi
IChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6
ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBmbG9vcmYgKGZs
b2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0
aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGlu
dCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsg
X19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDQwMDsgX19hc20gX192b2xhdGlsZSAoImZs
ZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6
ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUw
IiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91Ymxl
IGZsb29ybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl
IF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUg
dW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAi
IDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2Fz
bSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xh
dGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3Zv
bGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1
MDQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgY2Vp
bCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBf
X3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNo
b3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9f
Y3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDgwMDsgX19hc20gX192b2xhdGls
ZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5k
aW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZs
ZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0
IGNlaWxmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1
ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25l
ZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0i
IChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA4MDA7IF9fYXNtIF9fdm9s
YXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgi
ZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUg
KCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBs
b25nIGRvdWJsZSBjZWlsbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxv
bmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9f
dm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJm
bnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgw
ODAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19h
c20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBf
X2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFs
dWU7IH0KIyA1MjIgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBk
b3VibGUKbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX3kpIHRocm93ICgpCnsKICByZWdpc3RlciBs
b25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAo
X192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9f
dmFsdWU7Cn0KIyA1NDAgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGlu
ZSBkb3VibGUgbG9nMXAgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi
bGUgX192YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIz
NzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9s
YXRpbGVfXyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1
ZSkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxv
YXQgbG9nMXBmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192
YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUw
NDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVf
XyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAi
MCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3Vi
bGUgbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi
bGUgX192YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIz
NzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9s
YXRpbGVfXyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1
ZSkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1NTQgIi91c3Iv
aW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgYXNpbmggKGRvdWJs
ZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194
KTsgcmV0dXJuIChsb2cxcGwgKF9feSAqIF9feSAvIChfX3NxcnRsIChfX3kgKiBfX3kgKyAxLjAp
ICsgMS4wKSArIF9feSkgKiBfX3NnbjFsIChfX3gpKTsgfSBfX2lubGluZSBmbG9hdCBhc2luaGYg
KGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNs
IChfX3gpOyByZXR1cm4gKGxvZzFwbCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSAr
IDEuMCkgKyAxLjApICsgX195KSAqIF9fc2duMWwgKF9feCkpOyB9IF9faW5saW5lIGxvbmcgZG91
YmxlIGFzaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91
YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAobG9nMXBsIChfX3kgKiBfX3kgLyAoX19z
cXJ0bCAoX195ICogX195ICsgMS4wKSArIDEuMCkgKyBfX3kpICogX19zZ24xbCAoX194KSk7IH0K
CgoKCl9faW5saW5lIGRvdWJsZSBhY29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1cm4g
bG9nbCAoX194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEuMCkpOyB9
IF9faW5saW5lIGZsb2F0IGFjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJldHVybiBsb2ds
IChfX3ggKyBfX3NxcnRsIChfX3ggLSAxLjApICogX19zcXJ0bCAoX194ICsgMS4wKSk7IH0gX19p
bmxpbmUgbG9uZyBkb3VibGUgYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0
dXJuIGxvZ2wgKF9feCArIF9fc3FydGwgKF9feCAtIDEuMCkgKiBfX3NxcnRsIChfX3ggKyAxLjAp
KTsgfQoKCl9faW5saW5lIGRvdWJsZSBhdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdp
c3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAqIGxvZzFw
bCAoLShfX3kgKyBfX3kpIC8gKDEuMCArIF9feSkpICogX19zZ24xbCAoX194KTsgfSBfX2lubGlu
ZSBmbG9hdCBhdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJs
ZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAqIGxvZzFwbCAoLShfX3kgKyBfX3kp
IC8gKDEuMCArIF9feSkpICogX19zZ24xbCAoX194KTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBh
dGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBf
X3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAqIGxvZzFwbCAoLShfX3kgKyBfX3kpIC8g
KDEuMCArIF9feSkpICogX19zZ24xbCAoX194KTsgfQoKCgoKX19pbmxpbmUgZG91YmxlIGh5cG90
IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJldHVybiBfX3NxcnRsIChfX3gg
KiBfX3ggKyBfX3kgKiBfX3kpOyB9IF9faW5saW5lIGZsb2F0IGh5cG90ZiAoZmxvYXQgX194LCBm
bG9hdCBfX3kpIHRocm93ICgpIHsgcmV0dXJuIF9fc3FydGwgKF9feCAqIF9feCArIF9feSAqIF9f
eSk7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgaHlwb3RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg
ZG91YmxlIF9feSkgdGhyb3cgKCkgeyByZXR1cm4gX19zcXJ0bCAoX194ICogX194ICsgX195ICog
X195KTsgfQoKX19pbmxpbmUgZG91YmxlIGxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVn
aXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBf
X2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1bmspLCAiPXUiIChf
X3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGxv
Z2JmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsg
cmVnaXN0ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0
XG5cdCIgOiAiPXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVy
biBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGxvZ2JsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBk
b3VibGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAiPXQiIChf
X2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9CiMg
NTg0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgZmxvYXQKbGRl
eHBmIChmbG9hdCBfX3gsIGludCBfX3kpIHRocm93ICgpCnsKICByZWdpc3RlciBsb25nIGRvdWJs
ZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkg
OiAiMCIgKF9feCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFsdWU7Cn0K
Cl9faW5saW5lIGxvbmcgZG91YmxlCmxkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX195KSB0
aHJvdyAoKQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGls
ZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKChsb25nIGRv
dWJsZSkgX195KSk7IHJldHVybiBfX3ZhbHVlOwp9CiMgNjA4ICIvdXNyL2luY2x1ZGUvYml0cy9t
YXRoaW5saW5lLmgiIDMKX19pbmxpbmUgbG9uZyBpbnQKbHJpbnRmIChmbG9hdCBfX3gpIHRocm93
ICgpCnsKICBsb25nIGludCBfX2xyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZpc3Rw
bCAlMCIgOiAiPW0iIChfX2xyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19s
cmludHJlczsKfQpfX2lubGluZSBsb25nIGludApscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCkK
ewogIGxvbmcgaW50IF9fbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBsICUw
IiA6ICI9bSIgKF9fbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7IHJldHVybiBfX2xyaW50
cmVzOwp9Cl9faW5saW5lIGxvbmcgaW50CmxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KQp7CiAgbG9uZyBpbnQgX19scmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGwg
JTAiIDogIj1tIiAoX19scmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbHJp
bnRyZXM7Cn0KIyA2MzEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGlu
ZSBsb25nIGxvbmcgaW50CmxscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCkKewogIGxvbmcgbG9u
ZyBpbnQgX19sbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBsbCAlMCIgOiAi
PW0iIChfX2xscmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbGxyaW50cmVz
Owp9Cl9faW5saW5lIGxvbmcgbG9uZyBpbnQKbGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKQp7
CiAgbG9uZyBsb25nIGludCBfX2xscmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0
cGxsICUwIiA6ICI9bSIgKF9fbGxyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4g
X19sbHJpbnRyZXM7Cn0KX19pbmxpbmUgbG9uZyBsb25nIGludApsbHJpbnRsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpCnsKICBsb25nIGxvbmcgaW50IF9fbGxyaW50cmVzOyBfX2FzbV9fIF9f
dm9sYXRpbGVfXyAoImZpc3RwbGwgJTAiIDogIj1tIiAoX19sbHJpbnRyZXMpIDogInQiIChfX3gp
IDogInN0Iik7IHJldHVybiBfX2xscmludHJlczsKfQoKCgoKCgoKX19pbmxpbmUgZG91YmxlIGRy
ZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9f
dmFsdWU7IHJlZ2lzdGVyIGludCBfX2Nsb2JiZXJlZDsgX19hc20gX192b2xhdGlsZV9fICgiMToJ
ZnByZW0xXG5cdCIgImZzdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChf
X3ZhbHVlKSwgIj0mYSIgKF9fY2xvYmJlcmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNj
Iik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGRyZW1mIChmbG9hdCBfX3gsIGZs
b2F0IF9feSkgdGhyb3cgKCkgeyByZWdpc3RlciBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgaW50
IF9fY2xvYmJlcmVkOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbTFcblx0IiAiZnN0c3cJ
JSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpLCAiPSZhIiAoX19j
bG9iYmVyZWQpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7
IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3Vi
bGUgX195KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBpbnQg
X19jbG9iYmVyZWQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtMVxuXHQiICJmc3Rzdwkl
JWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSksICI9JmEiIChfX2Ns
b2JiZXJlZCkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJjYyIpOyByZXR1cm4gX192YWx1ZTsg
fQojIDY2NiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGludApf
X2Zpbml0ZSAoZG91YmxlIF9feCkgdGhyb3cgKCkKewogIHJldHVybiAoX19leHRlbnNpb25fXwog
ICAgICAgICAgKCgoKCh1bmlvbiB7IGRvdWJsZSBfX2Q7IGludCBfX2lbMl07IH0pIHtfX2Q6IF9f
eH0pLl9faVsxXQogICAgICAgICAgICAgfCAweDgwMGZmZmZmdSkgKyAxKSA+PiAzMSkpOwp9CiMg
MzYzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA0MjMgIi91c3IvaW5jbHVkZS9tYXRoLmgi
IDMKfQojIDc1ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9T
YkxpbmVhci5oIiAyCiMgODQgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0lu
dmVudG9yL1NiTGluZWFyLmgiCnR5cGVkZWYgZmxvYXQgU2JNYXRbNF1bNF07CgoKCmNsYXNzIFNi
VmVjM2Y7CmNsYXNzIFNiVmVjMmY7CmNsYXNzIFNiVmVjMnM7CmNsYXNzIFNiVmVjNGY7CmNsYXNz
IFNiUm90YXRpb247CmNsYXNzIFNiTWF0cml4OwoKY2xhc3MgU2JMaW5lOwpjbGFzcyBTYlBsYW5l
OwpjbGFzcyBTYkN5bGluZGVyOwpjbGFzcyBTYlNwaGVyZTsKCgpjbGFzcyBTYkJveDNmOwojIDEy
MyAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvU2JMaW5lYXIu
aCIKY2xhc3MgU2JWZWMzZiB7CiAgcHVibGljOgoKICAgIFNiVmVjM2YoKSB7IH0KCgogICAgU2JW
ZWMzZihjb25zdCBmbG9hdCB2WzNdKQogICAgICAgICB7IHZlY1swXSA9IHZbMF07IHZlY1sxXSA9
IHZbMV07IHZlY1syXSA9IHZbMl07IH0KCgogICAgU2JWZWMzZihmbG9hdCB4LCBmbG9hdCB5LCBm
bG9hdCB6KQogICAgICAgICB7IHZlY1swXSA9IHg7IHZlY1sxXSA9IHk7IHZlY1syXSA9IHo7IH0K
CgogICAgU2JWZWMzZihTYlBsYW5lICZwMCwgU2JQbGFuZSAmcDEsIFNiUGxhbmUgJnAyKTsKCgoK
ICAgIFNiVmVjM2YgY3Jvc3MoY29uc3QgU2JWZWMzZiAmdikgY29uc3Q7CgoKCiAgICBmbG9hdCBk
b3QoY29uc3QgU2JWZWMzZiAmdikgY29uc3Q7CgoKCgoKICAgIGNvbnN0IGZsb2F0ICpnZXRWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIHZlYzsgfQoKCgoKCiAgICB2b2lkIGdldFZhbHVlKGZsb2F0ICZ4
LCBmbG9hdCAmeSwgZmxvYXQgJnopIGNvbnN0OwoKCgoKICAgIGZsb2F0IGxlbmd0aCgpIGNvbnN0
OwoKCgoKCgogICAgZmxvYXQgbm9ybWFsaXplKCk7CgoKCiAgICB2b2lkIG5lZ2F0ZSgpOwoKCgoK
ICAgIFNiVmVjM2YgJiBzZXRWYWx1ZShjb25zdCBmbG9hdCB2WzNdKQogICAgICAgICB7IHZlY1sw
XSA9IHZbMF07IHZlY1sxXSA9IHZbMV07IHZlY1syXSA9IHZbMl07IHJldHVybiAqdGhpczsgfQoK
CgoKCiAgICBTYlZlYzNmICYgc2V0VmFsdWUoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikKICAg
ICAgICAgeyB2ZWNbMF0gPSB4OyB2ZWNbMV0gPSB5OyB2ZWNbMl0gPSB6OyByZXR1cm4gKnRoaXM7
IH0KCgoKCgoKICAgIFNiVmVjM2YgJiBzZXRWYWx1ZShjb25zdCBTYlZlYzNmICZiYXJ5Y2VudGlj
LAogICAgICAgICAgICAgICAgY29uc3QgU2JWZWMzZiAmdjAsIGNvbnN0IFNiVmVjM2YgJnYxLCBj
b25zdCBTYlZlYzNmICZ2Mik7CgoKICAgIGZsb2F0ICYgb3BlcmF0b3IgW10oaW50IGkpIHsgcmV0
dXJuICh2ZWNbaV0pOyB9CiAgICBjb25zdCBmbG9hdCAmIG9wZXJhdG9yIFtdKGludCBpKSBjb25z
dCB7IHJldHVybiAodmVjW2ldKTsgfQoKCiAgICBTYlZlYzNmICYgb3BlcmF0b3IgKj0oZmxvYXQg
ZCk7CgoKCiAgICBTYlZlYzNmICYgb3BlcmF0b3IgLz0oZmxvYXQgZCkKICAgICAgICB7IHJldHVy
biAqdGhpcyAqPSAoMS4wIC8gZCk7IH0KCgoKCiAgICBTYlZlYzNmICYgb3BlcmF0b3IgKz0oU2JW
ZWMzZiB2KTsKICAgIFNiVmVjM2YgJiBvcGVyYXRvciAtPShTYlZlYzNmIHYpOwoKCiAgICBTYlZl
YzNmIG9wZXJhdG9yIC0oKSBjb25zdDsKCgogICAgZnJpZW5kIFNiVmVjM2Ygb3BlcmF0b3IgKihj
b25zdCBTYlZlYzNmICZ2LCBmbG9hdCBkKTsKICAgIGZyaWVuZCBTYlZlYzNmIG9wZXJhdG9yICoo
ZmxvYXQgZCwgY29uc3QgU2JWZWMzZiAmdikKICAgICAgICB7IHJldHVybiB2ICogZDsgfQogICAg
ZnJpZW5kIFNiVmVjM2Ygb3BlcmF0b3IgLyhjb25zdCBTYlZlYzNmICZ2LCBmbG9hdCBkKQogICAg
ICAgIHsgcmV0dXJuIHYgKiAoMS4wIC8gZCk7IH0KCgogICAgZnJpZW5kIFNiVmVjM2Ygb3BlcmF0
b3IgKyhjb25zdCBTYlZlYzNmICZ2MSwgY29uc3QgU2JWZWMzZiAmdjIpOwoKCgoKCiAgICBmcmll
bmQgU2JWZWMzZiBvcGVyYXRvciAtKGNvbnN0IFNiVmVjM2YgJnYxLCBjb25zdCBTYlZlYzNmICZ2
Mik7CgoKCgoKCgogICAgZnJpZW5kIGludCBvcGVyYXRvciA9PShjb25zdCBTYlZlYzNmICZ2MSwg
Y29uc3QgU2JWZWMzZiAmdjIpOwogICAgZnJpZW5kIGludCBvcGVyYXRvciAhPShjb25zdCBTYlZl
YzNmICZ2MSwgY29uc3QgU2JWZWMzZiAmdjIpCiAgICAgICAgeyByZXR1cm4gISh2MSA9PSB2Mik7
IH0KCgoKICAgIFNiQm9vbCBlcXVhbHMoY29uc3QgU2JWZWMzZiB2LCBmbG9hdCB0b2xlcmFuY2Up
IGNvbnN0OwoKCgogICAgU2JWZWMzZiBnZXRDbG9zZXN0QXhpcygpIGNvbnN0OwoKICBwcm90ZWN0
ZWQ6CiAgICBmbG9hdCB2ZWNbM107Cn07CiMgMjcxICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJh
c2UvaW5jbHVkZS9JbnZlbnRvci9TYkxpbmVhci5oIgpjbGFzcyBTYlZlYzJmIHsKICBwdWJsaWM6
CgoKICAgIFNiVmVjMmYoKSB7IH0KCgogICAgU2JWZWMyZihjb25zdCBmbG9hdCB2WzJdKSB7IHNl
dFZhbHVlKHYpOyB9CgoKICAgIFNiVmVjMmYoZmxvYXQgeCwgZmxvYXQgeSkgeyBzZXRWYWx1ZSh4
LCB5KTsgfQoKCiAgICBmbG9hdCBkb3QoY29uc3QgU2JWZWMyZiAmdikgY29uc3Q7CgoKCgogICAg
Y29uc3QgZmxvYXQgKmdldFZhbHVlKCkgY29uc3QgeyByZXR1cm4gdmVjOyB9CgoKCgogICAgdm9p
ZCBnZXRWYWx1ZShmbG9hdCAmeCwgZmxvYXQgJnkpIGNvbnN0OwoKCgoKICAgIGZsb2F0IGxlbmd0
aCgpIGNvbnN0OwoKCgoKICAgIHZvaWQgbmVnYXRlKCk7CgoKCgoKCiAgICBmbG9hdCBub3JtYWxp
emUoKTsKCgoKICAgIFNiVmVjMmYgJiBzZXRWYWx1ZShjb25zdCBmbG9hdCB2WzJdKTsKCgoKCiAg
ICBTYlZlYzJmICYgc2V0VmFsdWUoZmxvYXQgeCwgZmxvYXQgeSk7CgoKCgogICAgZmxvYXQgJiBv
cGVyYXRvciBbXShpbnQgaSkgeyByZXR1cm4gKHZlY1tpXSk7IH0KICAgIGNvbnN0IGZsb2F0ICYg
b3BlcmF0b3IgW10oaW50IGkpIGNvbnN0IHsgcmV0dXJuICh2ZWNbaV0pOyB9CgoKICAgIFNiVmVj
MmYgJiBvcGVyYXRvciAqPShmbG9hdCBkKTsKCgoKICAgIFNiVmVjMmYgJiBvcGVyYXRvciAvPShm
bG9hdCBkKQogICAgICAgIHsgcmV0dXJuICp0aGlzICo9ICgxLjAgLyBkKTsgfQoKCgoKICAgIFNi
VmVjMmYgJiBvcGVyYXRvciArPShjb25zdCBTYlZlYzJmICZ1KTsKICAgIFNiVmVjMmYgJiBvcGVy
YXRvciAtPShjb25zdCBTYlZlYzJmICZ1KTsKCgogICAgU2JWZWMyZiBvcGVyYXRvciAtKCkgY29u
c3Q7CgoKICAgIGZyaWVuZCBTYlZlYzJmIG9wZXJhdG9yICooY29uc3QgU2JWZWMyZiAmdiwgZmxv
YXQgZCk7CiAgICBmcmllbmQgU2JWZWMyZiBvcGVyYXRvciAqKGZsb2F0IGQsIGNvbnN0IFNiVmVj
MmYgJnYpCiAgICAgICAgeyByZXR1cm4gdiAqIGQ7IH0KICAgIGZyaWVuZCBTYlZlYzJmIG9wZXJh
dG9yIC8oY29uc3QgU2JWZWMyZiAmdiwgZmxvYXQgZCkKICAgICAgICB7IHJldHVybiB2ICogKDEu
MCAvIGQpOyB9CgoKICAgIGZyaWVuZCBTYlZlYzJmIG9wZXJhdG9yICsoY29uc3QgU2JWZWMyZiAm
djEsIGNvbnN0IFNiVmVjMmYgJnYyKTsKCgoKCiAgICBmcmllbmQgU2JWZWMyZiBvcGVyYXRvciAt
KGNvbnN0IFNiVmVjMmYgJnYxLCBjb25zdCBTYlZlYzJmICZ2Mik7CgoKCgoKCiAgICBmcmllbmQg
aW50IG9wZXJhdG9yID09KGNvbnN0IFNiVmVjMmYgJnYxLCBjb25zdCBTYlZlYzJmICZ2Mik7CiAg
ICBmcmllbmQgaW50IG9wZXJhdG9yICE9KGNvbnN0IFNiVmVjMmYgJnYxLCBjb25zdCBTYlZlYzJm
ICZ2MikKICAgICAgICB7IHJldHVybiAhKHYxID09IHYyKTsgfQoKCgogICAgU2JCb29sIGVxdWFs
cyhjb25zdCBTYlZlYzJmIHYsIGZsb2F0IHRvbGVyYW5jZSkgY29uc3Q7CgogIHByb3RlY3RlZDoK
ICAgIGZsb2F0IHZlY1syXTsKfTsKIyAzOTMgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9p
bmNsdWRlL0ludmVudG9yL1NiTGluZWFyLmgiCmNsYXNzIFNiVmVjMnMgewogIHB1YmxpYzoKCgog
ICAgU2JWZWMycygpIHsgfQoKCiAgICBTYlZlYzJzKGNvbnN0IHNob3J0IHZbMl0pIHsgc2V0VmFs
dWUodik7IH0KCgogICAgU2JWZWMycyhzaG9ydCB4LCBzaG9ydCB5KSB7IHNldFZhbHVlKHgsIHkp
OyB9CgoKICAgIGludDMyX3QgZG90KGNvbnN0IFNiVmVjMnMgJnYpIGNvbnN0OwoKCgoKICAgIGNv
bnN0IHNob3J0ICpnZXRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHZlYzsgfQoKCgoKICAgIHZvaWQg
Z2V0VmFsdWUoc2hvcnQgJngsIHNob3J0ICZ5KSBjb25zdDsKCgoKCiAgICB2b2lkIG5lZ2F0ZSgp
OwoKCgoKICAgIFNiVmVjMnMgJiBzZXRWYWx1ZShjb25zdCBzaG9ydCB2WzJdKTsKCgoKCiAgICBT
YlZlYzJzICYgc2V0VmFsdWUoc2hvcnQgeCwgc2hvcnQgeSk7CgoKCgogICAgc2hvcnQgJiBvcGVy
YXRvciBbXShpbnQgaSkgeyByZXR1cm4gKHZlY1tpXSk7IH0KICAgIGNvbnN0IHNob3J0ICYgb3Bl
cmF0b3IgW10oaW50IGkpIGNvbnN0IHsgcmV0dXJuICh2ZWNbaV0pOyB9CgoKICAgIFNiVmVjMnMg
JiBvcGVyYXRvciAqPShpbnQgZCk7CiAgICBTYlZlYzJzICYgb3BlcmF0b3IgKj0oZG91YmxlIGQp
OwoKCgogICAgU2JWZWMycyAmIG9wZXJhdG9yIC89KGludCBkKTsKICAgIFNiVmVjMnMgJiBvcGVy
YXRvciAvPShkb3VibGUgZCkKICAgICAgICB7IHJldHVybiAqdGhpcyAqPSAoMS4wIC8gZCk7IH0K
CgoKCiAgICBTYlZlYzJzICYgb3BlcmF0b3IgKz0oY29uc3QgU2JWZWMycyAmdSk7CiAgICBTYlZl
YzJzICYgb3BlcmF0b3IgLT0oY29uc3QgU2JWZWMycyAmdSk7CgoKICAgIFNiVmVjMnMgb3BlcmF0
b3IgLSgpIGNvbnN0OwoKCiAgICBmcmllbmQgU2JWZWMycyBvcGVyYXRvciAqKGNvbnN0IFNiVmVj
MnMgJnYsIGludCBkKTsKICAgIGZyaWVuZCBTYlZlYzJzIG9wZXJhdG9yICooY29uc3QgU2JWZWMy
cyAmdiwgZG91YmxlIGQpOwogICAgZnJpZW5kIFNiVmVjMnMgb3BlcmF0b3IgKihpbnQgZCwgY29u
c3QgU2JWZWMycyAmdikKICAgICAgICB7IHJldHVybiB2ICogZDsgfQogICAgZnJpZW5kIFNiVmVj
MnMgb3BlcmF0b3IgKihkb3VibGUgZCwgY29uc3QgU2JWZWMycyAmdikKICAgICAgICB7IHJldHVy
biB2ICogZDsgfQogICAgZnJpZW5kIFNiVmVjMnMgb3BlcmF0b3IgLyhjb25zdCBTYlZlYzJzICZ2
LCBpbnQgZCk7CiAgICBmcmllbmQgU2JWZWMycyBvcGVyYXRvciAvKGNvbnN0IFNiVmVjMnMgJnYs
IGRvdWJsZSBkKQogICAgICAgIHsgcmV0dXJuIHYgKiAoMS4wIC8gZCk7IH0KCgogICAgZnJpZW5k
IFNiVmVjMnMgb3BlcmF0b3IgKyhjb25zdCBTYlZlYzJzICZ2MSwgY29uc3QgU2JWZWMycyAmdjIp
OwoKCgoKICAgIGZyaWVuZCBTYlZlYzJzIG9wZXJhdG9yIC0oY29uc3QgU2JWZWMycyAmdjEsIGNv
bnN0IFNiVmVjMnMgJnYyKTsKCgoKCgoKICAgIGZyaWVuZCBpbnQgb3BlcmF0b3IgPT0oY29uc3Qg
U2JWZWMycyAmdjEsIGNvbnN0IFNiVmVjMnMgJnYyKTsKICAgIGZyaWVuZCBpbnQgb3BlcmF0b3Ig
IT0oY29uc3QgU2JWZWMycyAmdjEsIGNvbnN0IFNiVmVjMnMgJnYyKQogICAgICAgIHsgcmV0dXJu
ICEodjEgPT0gdjIpOyB9CgogIHByb3RlY3RlZDoKICAgIHNob3J0IHZlY1syXTsKfTsKIyA1MDYg
Ii4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL1NiTGluZWFyLmgi
CmNsYXNzIFNiVmVjNGYgewogIHB1YmxpYzoKCgogICAgU2JWZWM0ZigpIHsgfQoKCiAgICBTYlZl
YzRmKGNvbnN0IGZsb2F0IHZbNF0pIHsgc2V0VmFsdWUodik7IH0KCgogICAgU2JWZWM0ZihmbG9h
dCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3KSB7IHNldFZhbHVlKHgsIHksIHosIHcpOyB9
CgoKICAgIGZsb2F0IGRvdChjb25zdCBTYlZlYzRmICZ2KSBjb25zdDsKCgoKCgoKICAgIHZvaWQg
Z2V0UmVhbChTYlZlYzNmICZ2KSBjb25zdDsKCgoKICAgIGNvbnN0IGZsb2F0ICpnZXRWYWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIHZlYzsgfQoKCgoKCiAgICB2b2lkIGdldFZhbHVlKGZsb2F0ICZ4LCBm
bG9hdCAmeSwgZmxvYXQgJnosIGZsb2F0ICZ3KSBjb25zdDsKCgoKCgogICAgZmxvYXQgbGVuZ3Ro
KCkgY29uc3Q7CgoKCgogICAgdm9pZCBuZWdhdGUoKTsKCgoKCgoKICAgIGZsb2F0IG5vcm1hbGl6
ZSgpOwoKCgogICAgU2JWZWM0ZiAmIHNldFZhbHVlKGNvbnN0IGZsb2F0IHZbNF0pOwoKCgoKCiAg
ICBTYlZlYzRmICYgc2V0VmFsdWUoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgdyk7
CgoKCgoKICAgIGZsb2F0ICYgb3BlcmF0b3IgW10oaW50IGkpIHsgcmV0dXJuICh2ZWNbaV0pOyB9
CiAgICBjb25zdCBmbG9hdCAmIG9wZXJhdG9yIFtdKGludCBpKSBjb25zdCB7IHJldHVybiAodmVj
W2ldKTsgfQoKCiAgICBTYlZlYzRmICYgb3BlcmF0b3IgKj0oZmxvYXQgZCk7CgoKCgogICAgU2JW
ZWM0ZiAmIG9wZXJhdG9yIC89KGZsb2F0IGQpCiAgICAgICAgeyByZXR1cm4gKnRoaXMgKj0gKDEu
MCAvIGQpOyB9CgoKCgoKICAgIFNiVmVjNGYgJiBvcGVyYXRvciArPShjb25zdCBTYlZlYzRmICZ1
KTsKICAgIFNiVmVjNGYgJiBvcGVyYXRvciAtPShjb25zdCBTYlZlYzRmICZ1KTsKCgogICAgU2JW
ZWM0ZiBvcGVyYXRvciAtKCkgY29uc3Q7CgoKICAgIGZyaWVuZCBTYlZlYzRmIG9wZXJhdG9yICoo
Y29uc3QgU2JWZWM0ZiAmdiwgZmxvYXQgZCk7CiAgICBmcmllbmQgU2JWZWM0ZiBvcGVyYXRvciAq
KGZsb2F0IGQsIGNvbnN0IFNiVmVjNGYgJnYpCiAgICAgICAgeyByZXR1cm4gdiAqIGQ7IH0KICAg
IGZyaWVuZCBTYlZlYzRmIG9wZXJhdG9yIC8oY29uc3QgU2JWZWM0ZiAmdiwgZmxvYXQgZCkKICAg
ICAgICB7IHJldHVybiB2ICogKDEuMCAvIGQpOyB9CgoKICAgIGZyaWVuZCBTYlZlYzRmIG9wZXJh
dG9yICsoY29uc3QgU2JWZWM0ZiAmdjEsIGNvbnN0IFNiVmVjNGYgJnYyKTsKCgoKCgoKICAgIGZy
aWVuZCBTYlZlYzRmIG9wZXJhdG9yIC0oY29uc3QgU2JWZWM0ZiAmdjEsIGNvbnN0IFNiVmVjNGYg
JnYyKTsKIyA2MTYgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9y
L1NiTGluZWFyLmgiCiAgICBmcmllbmQgaW50IG9wZXJhdG9yID09KGNvbnN0IFNiVmVjNGYgJnYx
LCBjb25zdCBTYlZlYzRmICZ2Mik7CiAgICBmcmllbmQgaW50IG9wZXJhdG9yICE9KGNvbnN0IFNi
VmVjNGYgJnYxLCBjb25zdCBTYlZlYzRmICZ2MikKICAgICAgICB7IHJldHVybiAhKHYxID09IHYy
KTsgfQoKCgogICAgU2JCb29sIGVxdWFscyhjb25zdCBTYlZlYzRmIHYsIGZsb2F0IHRvbGVyYW5j
ZSkgY29uc3Q7CgogIHByb3RlY3RlZDoKICAgIGZsb2F0IHZlY1s0XTsKfTsKIyA2NDQgIi4uLy4u
Ly4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL1NiTGluZWFyLmgiCmNsYXNz
IFNiUm90YXRpb24gewogIHB1YmxpYzoKCgogICAgU2JSb3RhdGlvbigpCiAgICAgICAge30KCgog
ICAgU2JSb3RhdGlvbihjb25zdCBmbG9hdCB2WzRdKQogICAgICAgIHsgc2V0VmFsdWUodik7IH0K
CgogICAgU2JSb3RhdGlvbihmbG9hdCBxMCwgZmxvYXQgcTEsIGZsb2F0IHEyLCBmbG9hdCBxMykK
ICAgICAgICB7IHNldFZhbHVlKHEwLCBxMSwgcTIsIHEzKTsgfQoKCiAgICBTYlJvdGF0aW9uKGNv
bnN0IFNiTWF0cml4ICZtKQogICAgICAgIHsgc2V0VmFsdWUobSk7IH0KCgogICAgU2JSb3RhdGlv
bihjb25zdCBTYlZlYzNmICZheGlzLCBmbG9hdCByYWRpYW5zKQogICAgICAgIHsgc2V0VmFsdWUo
YXhpcywgcmFkaWFucyk7IH0KCgogICAgU2JSb3RhdGlvbihjb25zdCBTYlZlYzNmICZyb3RhdGVG
cm9tLCBjb25zdCBTYlZlYzNmICZyb3RhdGVUbykKICAgICAgICB7IHNldFZhbHVlKHJvdGF0ZUZy
b20sIHJvdGF0ZVRvKTsgfQoKCiAgICBjb25zdCBmbG9hdCAqIGdldFZhbHVlKCkgY29uc3QKICAg
ICAgICB7IHJldHVybiAocXVhdCk7IH0KCgoKCgogICAgdm9pZCBnZXRWYWx1ZShmbG9hdCAmcTAs
IGZsb2F0ICZxMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgJnEyLCBm
bG9hdCAmcTMpIGNvbnN0OwoKCgoKCgoKICAgIHZvaWQgZ2V0VmFsdWUoU2JWZWMzZiAmYXhpcywg
ZmxvYXQgJnJhZGlhbnMpIGNvbnN0OwoKCgogICAgdm9pZCBnZXRWYWx1ZShTYk1hdHJpeCAmbWF0
cml4KSBjb25zdDsKCgogICAgU2JSb3RhdGlvbiAmIGludmVydCgpOwoKCiAgICBTYlJvdGF0aW9u
IGludmVyc2UoKSBjb25zdAogICAgICAgIHsgU2JSb3RhdGlvbiBxID0gKnRoaXM7IHJldHVybiBx
LmludmVydCgpOyB9CgoKCiAgICBTYlJvdGF0aW9uICYgc2V0VmFsdWUoY29uc3QgZmxvYXQgcVs0
XSk7CgoKCgoKICAgIFNiUm90YXRpb24gJiBzZXRWYWx1ZShmbG9hdCBxMCwgZmxvYXQgcTEsIGZs
b2F0IHEyLCBmbG9hdCBxMyk7CiMgNzE5ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5j
bHVkZS9JbnZlbnRvci9TYkxpbmVhci5oIgogICAgU2JSb3RhdGlvbiAmIHNldFZhbHVlKGNvbnN0
IFNiTWF0cml4ICZtKTsKCgoKICAgIFNiUm90YXRpb24gJiBzZXRWYWx1ZShjb25zdCBTYlZlYzNm
ICZheGlzLCBmbG9hdCByYWRpYW5zKTsKCgoKICAgIFNiUm90YXRpb24gJiBzZXRWYWx1ZShjb25z
dCBTYlZlYzNmICZyb3RhdGVGcm9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTYlZlYzNmICZyb3RhdGVUbyk7CgoKCiAgICBTYlJvdGF0aW9uICYgb3BlcmF0b3IgKj0o
Y29uc3QgU2JSb3RhdGlvbiAmcSk7CgoKCiAgICBmcmllbmQgaW50IG9wZXJhdG9yID09KGNvbnN0
IFNiUm90YXRpb24gJnExLCBjb25zdCBTYlJvdGF0aW9uICZxMik7CiAgICBmcmllbmQgaW50IG9w
ZXJhdG9yICE9KGNvbnN0IFNiUm90YXRpb24gJnExLCBjb25zdCBTYlJvdGF0aW9uICZxMikKICAg
ICAgICB7IHJldHVybiAhKHExID09IHEyKTsgfQoKCgogICAgU2JCb29sIGVxdWFscyhjb25zdCBT
YlJvdGF0aW9uICZyLCBmbG9hdCB0b2xlcmFuY2UpIGNvbnN0OwoKCiAgICBmcmllbmQgU2JSb3Rh
dGlvbiBvcGVyYXRvciAqKGNvbnN0IFNiUm90YXRpb24gJnExLCBjb25zdCBTYlJvdGF0aW9uICZx
Mik7CgoKCiAgICB2b2lkIG11bHRWZWMoY29uc3QgU2JWZWMzZiAmc3JjLCBTYlZlYzNmICZkc3Qp
IGNvbnN0OwoKCgogICAgdm9pZCBzY2FsZUFuZ2xlKCBmbG9hdCBzY2FsZUZhY3RvciApOwoKCgog
ICAgc3RhdGljIFNiUm90YXRpb24gc2xlcnAoY29uc3QgU2JSb3RhdGlvbiAmcm90MCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2JSb3RhdGlvbiAmcm90MSwgZmxvYXQgdCk7
CgoKCiAgICBzdGF0aWMgU2JSb3RhdGlvbiBpZGVudGl0eSgpCiAgICAgICAgeyByZXR1cm4gU2JS
b3RhdGlvbigwLjAsIDAuMCwgMC4wLCAxLjApOyB9CgogIHByaXZhdGU6CiAgICBmbG9hdCBxdWF0
WzRdOwoKCiAgICBmbG9hdCBub3JtKCkgY29uc3Q7CgoKICAgIHZvaWQgbm9ybWFsaXplKCk7Cn07
CiMgNzkwICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9TYkxp
bmVhci5oIgpjbGFzcyBTYk1hdHJpeCB7CiAgcHVibGljOgoKCiAgICBTYk1hdHJpeCgpIHsgfQoK
CiAgICBTYk1hdHJpeChmbG9hdCBhMTEsIGZsb2F0IGExMiwgZmxvYXQgYTEzLCBmbG9hdCBhMTQs
CiAgICAgICAgICAgICBmbG9hdCBhMjEsIGZsb2F0IGEyMiwgZmxvYXQgYTIzLCBmbG9hdCBhMjQs
CiAgICAgICAgICAgICBmbG9hdCBhMzEsIGZsb2F0IGEzMiwgZmxvYXQgYTMzLCBmbG9hdCBhMzQs
CiAgICAgICAgICAgICBmbG9hdCBhNDEsIGZsb2F0IGE0MiwgZmxvYXQgYTQzLCBmbG9hdCBhNDQp
OwoKCiAgICBTYk1hdHJpeChjb25zdCBTYk1hdCAmbSk7CgoKICAgIHZvaWQgc2V0VmFsdWUoY29u
c3QgU2JNYXQgJm0pOwoKICAgIHB1YmxpYzoKCgoKCiAgICB2b2lkIG1ha2VJZGVudGl0eSgpOwoK
CgogICAgc3RhdGljIFNiTWF0cml4IGlkZW50aXR5KCk7CgoKCiAgICB2b2lkIHNldFJvdGF0ZShj
b25zdCBTYlJvdGF0aW9uICZxKTsKCgogICAgdm9pZCBzZXRTY2FsZShmbG9hdCBzKTsKCgoKICAg
IHZvaWQgc2V0U2NhbGUoY29uc3QgU2JWZWMzZiAmcyk7CgoKCiAgICB2b2lkIHNldFRyYW5zbGF0
ZShjb25zdCBTYlZlYzNmICZ0KTsKCgoKCgoKICAgIHZvaWQgc2V0VHJhbnNmb3JtKAogICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTYlZlYzNmICZ0cmFuc2xhdGlvbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgU2JSb3RhdGlvbiAmcm90YXRpb24sCiAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFNiVmVjM2YgJnNjYWxlRmFjdG9yLAogICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTYlJvdGF0aW9uICZzY2FsZU9yaWVudGF0aW9uLAogICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBTYlZlYzNmICZjZW50ZXIpOwoKCgogICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29u
c3QgU2JWZWMzZiAmdCwgY29uc3QgU2JSb3RhdGlvbiAmciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBTYlZlYzNmICZzKQogICAgICAgICAgICAgICAgeyBzZXRUcmFuc2Zvcm0o
dCwgciwgcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiUm90YXRpb24oMCwwLDAs
MSksIFNiVmVjM2YoMCwwLDApKTsgfQogICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29uc3QgU2JWZWMz
ZiAmdCwgY29uc3QgU2JSb3RhdGlvbiAmciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTYlZlYzNmICZzLCBjb25zdCBTYlJvdGF0aW9uICZzbykKICAgICAgICAgICAgICAgIHsg
c2V0VHJhbnNmb3JtKHQsIHIsIHMsIHNvLCBTYlZlYzNmKDAsMCwwKSk7IH0KIyA4NjUgIi4uLy4u
Ly4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL1NiTGluZWFyLmgiCiAgICB2
b2lkIGdldFRyYW5zZm9ybShTYlZlYzNmICZ0cmFuc2xhdGlvbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBTYlJvdGF0aW9uICZyb3RhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBT
YlZlYzNmICZzY2FsZUZhY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICBTYlJvdGF0aW9u
ICZzY2FsZU9yaWVudGF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNiVmVj
M2YgJmNlbnRlcikgY29uc3Q7CgogICAgdm9pZCBnZXRUcmFuc2Zvcm0oU2JWZWMzZiAmdCwgU2JS
b3RhdGlvbiAmciwKICAgICAgICAgICAgICAgICAgICAgICAgICBTYlZlYzNmICZzLCBTYlJvdGF0
aW9uICZzbykgY29uc3QKICAgICAgICAgICAgICAgIHsgZ2V0VHJhbnNmb3JtKHQsIHIsIHMsIHNv
LCBTYlZlYzNmKDAsMCwwKSk7IH0KCgoKCgogICAgdm9pZCBnZXRWYWx1ZShTYk1hdCAmbSkgY29u
c3Q7CiAgICBjb25zdCBTYk1hdCAmIGdldFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbWF0cml4OyB9
CgoKCgoKICAgIGZsb2F0IGRldDMoaW50IHIxLCBpbnQgcjIsIGludCByMywgaW50IGMxLCBpbnQg
YzIsIGludCBjMykgY29uc3Q7CgoKICAgIGZsb2F0IGRldDMoKSBjb25zdCB7IHJldHVybiBkZXQz
KDAsIDEsIDIsIDAsIDEsIDIpOyB9CgoKICAgIGZsb2F0IGRldDQoKSBjb25zdDsKCgoKCgogICAg
U2JCb29sIGZhY3RvcihTYk1hdHJpeCAmciwgU2JWZWMzZiAmcywgU2JNYXRyaXggJnUsCiAgICAg
ICAgICAgICAgICAgICAgICAgU2JWZWMzZiAmdCwgU2JNYXRyaXggJnByb2opIGNvbnN0OwoKCgog
ICAgU2JNYXRyaXggaW52ZXJzZSgpIGNvbnN0OwoKCgoKICAgIFNiQm9vbCBMVURlY29tcG9zaXRp
b24oaW50IGluZGV4WzRdLCBmbG9hdCAmZCk7CgoKCgogICAgdm9pZCBMVUJhY2tTdWJzdGl0dXRp
b24oaW50IGluZGV4WzRdLCBmbG9hdCBiWzRdKSBjb25zdDsKCgogICAgU2JNYXRyaXggdHJhbnNw
b3NlKCkgY29uc3Q7CgoKCgoKICAgIFNiTWF0cml4ICYgbXVsdFJpZ2h0KGNvbnN0IFNiTWF0cml4
ICZtKTsKICAgIFNiTWF0cml4ICYgbXVsdExlZnQoY29uc3QgU2JNYXRyaXggJm0pOwoKCgogICAg
dm9pZCBtdWx0TWF0cml4VmVjKGNvbnN0IFNiVmVjM2YgJnNyYywgU2JWZWMzZiAmZHN0KSBjb25z
dDsKCgoKICAgIHZvaWQgbXVsdFZlY01hdHJpeChjb25zdCBTYlZlYzNmICZzcmMsIFNiVmVjM2Yg
JmRzdCkgY29uc3Q7CgoKCgoKICAgIHZvaWQgbXVsdERpck1hdHJpeChjb25zdCBTYlZlYzNmICZz
cmMsIFNiVmVjM2YgJmRzdCkgY29uc3Q7CgoKCgogICAgdm9pZCBtdWx0TGluZU1hdHJpeChjb25z
dCBTYkxpbmUgJnNyYywgU2JMaW5lICZkc3QpIGNvbnN0OwoKCgoKCiAgICB2b2lkIHByaW50KEZJ
TEUgKmZwKSBjb25zdDsKCgoKCiAgICBvcGVyYXRvciBmbG9hdCAqKCkgeyByZXR1cm4gJm1hdHJp
eFswXVswXTsgfQoKCiAgICBvcGVyYXRvciBTYk1hdCAmKCkgeyByZXR1cm4gbWF0cml4OyB9CgoK
ICAgIGZsb2F0ICogb3BlcmF0b3IgW10oaW50IGkpIHsgcmV0dXJuICZtYXRyaXhbaV1bMF07IH0K
ICAgIGNvbnN0IGZsb2F0ICogb3BlcmF0b3IgW10oaW50IGkpIGNvbnN0IHsgcmV0dXJuICZtYXRy
aXhbaV1bMF07IH0KCgogICAgU2JNYXRyaXggJiBvcGVyYXRvciA9KGNvbnN0IFNiTWF0ICZtKTsK
CgogICAgU2JNYXRyaXggJiBvcGVyYXRvciA9KGNvbnN0IFNiTWF0cml4ICZtKTsKIyA5NzUgIi4u
Ly4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL1NiTGluZWFyLmgiCiAg
ICBTYk1hdHJpeCAmIG9wZXJhdG9yID0oY29uc3QgU2JSb3RhdGlvbiAmcSkgeyBzZXRSb3RhdGUo
cSk7IHJldHVybiAqdGhpczsgfQoKCgogICAgU2JNYXRyaXggJiBvcGVyYXRvciAqPShjb25zdCBT
Yk1hdHJpeCAmbSkgeyByZXR1cm4gbXVsdFJpZ2h0KG0pOyB9CgoKICAgIGZyaWVuZCBTYk1hdHJp
eCBvcGVyYXRvciAqKGNvbnN0IFNiTWF0cml4ICZtMSwgY29uc3QgU2JNYXRyaXggJm0yKTsKCgog
ICAgZnJpZW5kIGludCBvcGVyYXRvciA9PShjb25zdCBTYk1hdHJpeCAmbTEsIGNvbnN0IFNiTWF0
cml4ICZtMik7CiAgICBmcmllbmQgaW50IG9wZXJhdG9yICE9KGNvbnN0IFNiTWF0cml4ICZtMSwg
Y29uc3QgU2JNYXRyaXggJm0yKQogICAgICAgIHsgcmV0dXJuICEobTEgPT0gbTIpOyB9CgoKICAg
IFNiQm9vbCBlcXVhbHMoY29uc3QgU2JNYXRyaXggJm0sIGZsb2F0IHRvbGVyYW5jZSkgY29uc3Q7
CgogIHByaXZhdGU6CiAgICBTYk1hdCBtYXRyaXg7CgoKICAgIHZvaWQgamFjb2JpMyhmbG9hdCBl
dmFsdWVzWzNdLCBTYlZlYzNmIGV2ZWN0b3JzWzNdLCBpbnQgJnJvdHMpIGNvbnN0OwoKICAgIFNi
Qm9vbCBhZmZpbmVfaW52ZXJzZShjb25zdCBTYk1hdHJpeCAmaW4sIFNiTWF0cml4ICZvdXQpIGNv
bnN0Owp9OwojIDEwMTMgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVu
dG9yL1NiTGluZWFyLmgiCmNsYXNzIFNiVmlld1ZvbHVtZSB7CiAgcHVibGljOgoKCiAgICBTYlZp
ZXdWb2x1bWUoKTsKICAgIH5TYlZpZXdWb2x1bWUoKSB7fQoKCgoKCgogICAgdm9pZCBnZXRNYXRy
aWNlcyhTYk1hdHJpeCAmYWZmaW5lLCBTYk1hdHJpeCAmcHJvaikgY29uc3Q7CgoKCgogICAgU2JN
YXRyaXggZ2V0TWF0cml4KCkgY29uc3Q7CgoKCgoKCiAgICBTYk1hdHJpeCBnZXRDYW1lcmFTcGFj
ZU1hdHJpeCgpIGNvbnN0OwoKCgogICAgdm9pZCBwcm9qZWN0UG9pbnRUb0xpbmUoY29uc3QgU2JW
ZWMyZiAmcHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYkxpbmUg
JmxpbmUpIGNvbnN0OwoKICAgIHZvaWQgcHJvamVjdFBvaW50VG9MaW5lKGNvbnN0IFNiVmVjMmYg
JnB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYlZlYzNmICZsaW5l
MCwgU2JWZWMzZiAmbGluZTEpIGNvbnN0OwoKCgoKCgoKICAgIHZvaWQgcHJvamVjdFRvU2NyZWVu
KGNvbnN0IFNiVmVjM2YgJnNyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNiVmVjM2YgJmRzdCkgY29uc3Q7CgoKCgogICAgU2JQbGFuZSBnZXRQbGFuZShmbG9hdCBk
aXN0RnJvbUV5ZSkgY29uc3Q7CgoKCgogICAgU2JWZWMzZiBnZXRTaWdodFBvaW50KGZsb2F0IGRp
c3RGcm9tRXllKSBjb25zdDsKCgoKCgogICAgU2JWZWMzZiBnZXRQbGFuZVBvaW50KGZsb2F0IGRp
c3RGcm9tRXllLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNi
VmVjMmYgJm5vcm1Qb2ludCkgY29uc3Q7CgoKCgoKCgogICAgU2JSb3RhdGlvbiBnZXRBbGlnblJv
dGF0aW9uKFNiQm9vbCByaWdodEFuZ2xlT25seSA9IDApIGNvbnN0OwoKCgoKICAgIGZsb2F0IGdl
dFdvcmxkVG9TY3JlZW5TY2FsZShjb25zdCBTYlZlYzNmICZ3b3JsZENlbnRlciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IG5vcm1SYWRpdXMpIGNv
bnN0OwoKCgoKCiAgICBTYlZlYzJmIHByb2plY3RCb3goY29uc3QgU2JCb3gzZiAmYm94KSBjb25z
dDsKCgoKCgoKICAgIFNiVmlld1ZvbHVtZSBuYXJyb3coZmxvYXQgbGVmdCwgZmxvYXQgYm90dG9t
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgcmlnaHQsIGZsb2F0IHRvcCkg
Y29uc3Q7CgoKCgoKICAgIFNiVmlld1ZvbHVtZSBuYXJyb3coY29uc3QgU2JCb3gzZiAmYm94KSBj
b25zdDsKCgoKICAgIHZvaWQgb3J0aG8oZmxvYXQgbGVmdCwgZmxvYXQgcmlnaHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGJvdHRvbSwgZmxvYXQgdG9wLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmbG9hdCBuZWFyLCBmbG9hdCBmYXIpOwoKCgoKCgogICAgdm9p
ZCBwZXJzcGVjdGl2ZShmbG9hdCBmb3Z5LCBmbG9hdCBhc3BlY3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0IG5lYXIsIGZsb2F0IGZhcik7CgoKCgoKICAgIHZvaWQg
cm90YXRlQ2FtZXJhKGNvbnN0IFNiUm90YXRpb24gJnEpOwoKCgoKCiAgICB2b2lkIHRyYW5zbGF0
ZUNhbWVyYShjb25zdCBTYlZlYzNmICZ2KTsKCgoKCgogICAgU2JWZWMzZiB6VmVjdG9yKCkgY29u
c3Q7CgoKCgoKCiAgICBTYlZpZXdWb2x1bWUgek5hcnJvdyhmbG9hdCBuZWFyLCBmbG9hdCBmYXIp
IGNvbnN0OwoKCiAgICB2b2lkIHNjYWxlKGZsb2F0IGZhY3Rvcik7CgoKCgogICAgdm9pZCBzY2Fs
ZVdpZHRoKGZsb2F0IHJhdGlvKTsKICAgIHZvaWQgc2NhbGVIZWlnaHQoZmxvYXQgcmF0aW8pOwoK
CiAgICBlbnVtIFByb2plY3Rpb25UeXBlIHsKICAgICAgICBPUlRIT0dSQVBISUMsCiAgICAgICAg
UEVSU1BFQ1RJVkUKICAgIH07CgoKICAgIFByb2plY3Rpb25UeXBlIGdldFByb2plY3Rpb25UeXBl
KCkgY29uc3QgeyByZXR1cm4gdHlwZTsgfQoKCiAgICBjb25zdCBTYlZlYzNmICYgZ2V0UHJvamVj
dGlvblBvaW50KCkgY29uc3QgeyByZXR1cm4gcHJvalBvaW50OyB9CgoKICAgIGNvbnN0IFNiVmVj
M2YgJiBnZXRQcm9qZWN0aW9uRGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gcHJvakRpcjsgfQoK
CiAgICBmbG9hdCBnZXROZWFyRGlzdCgpIGNvbnN0IHsgcmV0dXJuIG5lYXJEaXN0OyB9CgoKICAg
IGZsb2F0IGdldFdpZHRoKCkgY29uc3QgeyByZXR1cm4gKGxyZk8tbGxmTykubGVuZ3RoKCk7IH0K
ICAgIGZsb2F0IGdldEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuICh1bGZPLWxsZk8pLmxlbmd0aCgp
OyB9CiAgICBmbG9hdCBnZXREZXB0aCgpIGNvbnN0IHsgcmV0dXJuIG5lYXJUb0ZhcjsgfQoKICBw
dWJsaWM6CiAgICBQcm9qZWN0aW9uVHlwZSB0eXBlOwoKCgogICAgU2JWZWMzZiBwcm9qUG9pbnQ7
CiAgICBTYlZlYzNmIHByb2pEaXI7CiAgICBmbG9hdCBuZWFyRGlzdDsKICAgIGZsb2F0IG5lYXJU
b0ZhcjsKICAgIFNiVmVjM2YgbGxmOwogICAgU2JWZWMzZiBscmY7CiAgICBTYlZlYzNmIHVsZjsK
CgoKCgogICAgdm9pZCB0cmFuc2Zvcm0oY29uc3QgU2JNYXRyaXggJm1hdHJpeCk7CgoKICAgIFNi
Qm9vbCBpbnRlcnNlY3QoY29uc3QgU2JWZWMzZiAmcG9pbnQpIGNvbnN0OwoKCgoKICAgIFNiQm9v
bCBpbnRlcnNlY3QoY29uc3QgU2JWZWMzZiAmcDAsIGNvbnN0IFNiVmVjM2YgJnAxLAogICAgICAg
ICAgICAgICAgICAgICAgICAgIFNiVmVjM2YgJmNsb3Nlc3RQb2ludCkgY29uc3Q7CgoKICAgIFNi
Qm9vbCBpbnRlcnNlY3QoY29uc3QgU2JCb3gzZiAmYm94KSBjb25zdDsKCgoKICAgIFNiQm9vbCBv
dXRzaWRlVGVzdChjb25zdCBTYlBsYW5lICZwLAogICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTYlZlYzNmICZtaW4sIGNvbnN0IFNiVmVjM2YgJm1heCkgY29uc3Q7CgogIHByaXZhdGU6CgoK
ICAgIFNiVmVjM2YgbGxmTzsKICAgIFNiVmVjM2YgbHJmTzsKICAgIFNiVmVjM2YgdWxmTzsKfTsK
IyAxMjMyICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9TYkxp
bmVhci5oIgpjbGFzcyBTYkxpbmUgewogIHB1YmxpYzoKCiAgICBTYkxpbmUoKSB7fQoKCgoKCiAg
ICBTYkxpbmUoY29uc3QgU2JWZWMzZiAmcDAsIGNvbnN0IFNiVmVjM2YgJnAxKTsKCgogICAgdm9p
ZCBzZXRWYWx1ZShjb25zdCBTYlZlYzNmICZwMCwgY29uc3QgU2JWZWMzZiAmcDEpOwoKCgoKCiAg
ICBTYkJvb2wgZ2V0Q2xvc2VzdFBvaW50cyhjb25zdCBTYkxpbmUgJmxpbmUyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiVmVjM2YgJnB0T25UaGlzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNiVmVjM2YgJnB0T25MaW5lMiApIGNv
bnN0OwoKCgogICAgU2JWZWMzZiBnZXRDbG9zZXN0UG9pbnQoY29uc3QgU2JWZWMzZiAmcG9pbnQp
IGNvbnN0OwoKCgoKICAgIGNvbnN0IFNiVmVjM2YgJiBnZXRQb3NpdGlvbigpIGNvbnN0IHsgcmV0
dXJuIHBvczsgfQogICAgY29uc3QgU2JWZWMzZiAmIGdldERpcmVjdGlvbigpIGNvbnN0IHsgcmV0
dXJuIGRpcjsgfQoKCgogIHB1YmxpYzoKCiAgICBTYkJvb2wgaW50ZXJzZWN0KCBjb25zdCBTYkJv
eDNmICZib3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JWZWMzZiAmZW50
ZXIsIFNiVmVjM2YgJmV4aXQgKSBjb25zdDsKICAgIFNiQm9vbCBpbnRlcnNlY3QoIGZsb2F0IGFu
Z2xlLCBjb25zdCBTYkJveDNmICZib3ggKSBjb25zdDsKICAgIFNiQm9vbCBpbnRlcnNlY3QoIGZs
b2F0IGFuZ2xlLCBjb25zdCBTYlZlYzNmICZwb2ludCApIGNvbnN0OwogICAgU2JCb29sIGludGVy
c2VjdCggZmxvYXQgYW5nbGUsIGNvbnN0IFNiVmVjM2YgJnYwLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFNiVmVjM2YgJnYxLCBTYlZlYzNmICZwdCApIGNvbnN0Owog
ICAgU2JCb29sIGludGVyc2VjdCggY29uc3QgU2JWZWMzZiAmdjAsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTYlZlYzNmICZ2MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFNiVmVjM2YgJnYyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU2JWZWMzZiAmcHQsIFNiVmVjM2YgJmJhcnljZW50cmljLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU2JCb29sICZmcm9udCApIGNvbnN0OwoKICBwcml2YXRlOgoK
CiAgICBTYlZlYzNmIHBvczsKICAgIFNiVmVjM2YgZGlyOwp9OwojIDEzMDcgIi4uLy4uLy4uLy4u
Ly4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL1NiTGluZWFyLmgiCmNsYXNzIFNiUGxh
bmUgewogIHB1YmxpYzoKCiAgICBTYlBsYW5lKCkge30KCgoKCiAgICBTYlBsYW5lKGNvbnN0IFNi
VmVjM2YgJnAwLCBjb25zdCBTYlZlYzNmICZwMSwgY29uc3QgU2JWZWMzZiAmcDIpOwoKCgogICAg
U2JQbGFuZShjb25zdCBTYlZlYzNmICZuLCBmbG9hdCBkKTsKCgoKICAgIFNiUGxhbmUoY29uc3Qg
U2JWZWMzZiAmbiwgY29uc3QgU2JWZWMzZiAmcCk7CgoKCiAgICB2b2lkIG9mZnNldChmbG9hdCBk
KTsKCgoKICAgIFNiQm9vbCBpbnRlcnNlY3QoY29uc3QgU2JMaW5lICZsLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU2JWZWMzZiAmaW50ZXJzZWN0aW9uKSBjb25zdDsKCgogICAg
dm9pZCB0cmFuc2Zvcm0oY29uc3QgU2JNYXRyaXggJm1hdHJpeCk7CgoKCiAgICBTYkJvb2wgaXNJ
bkhhbGZTcGFjZShjb25zdCBTYlZlYzNmICZwb2ludCkgY29uc3Q7CgoKCgogICAgY29uc3QgU2JW
ZWMzZiAmIGdldE5vcm1hbCgpIGNvbnN0IHsgcmV0dXJuIG5vcm1hbFZlYzsgfQogICAgZmxvYXQg
Z2V0RGlzdGFuY2VGcm9tT3JpZ2luKCkgY29uc3QgeyByZXR1cm4gZGlzdGFuY2U7IH0KCgoKICAg
IGZyaWVuZCBpbnQgb3BlcmF0b3IgPT0oY29uc3QgU2JQbGFuZSAmcDEsIGNvbnN0IFNiUGxhbmUg
JnAyKTsKICAgIGZyaWVuZCBpbnQgb3BlcmF0b3IgIT0oY29uc3QgU2JQbGFuZSAmcDEsIGNvbnN0
IFNiUGxhbmUgJnAyKQogICAgICAgIHsgcmV0dXJuICEocDEgPT0gcDIpOyB9CgogIHByaXZhdGU6
CgoKCiAgICBTYlZlYzNmIG5vcm1hbFZlYzsKCgogICAgZmxvYXQgZGlzdGFuY2U7Cn07CiMgMTM3
NSAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvU2JMaW5lYXIu
aCIKY2xhc3MgU2JDeWxpbmRlciB7CiAgcHVibGljOgoKCiAgICBTYkN5bGluZGVyKCk7CgoKICAg
IFNiQ3lsaW5kZXIoY29uc3QgU2JMaW5lICZhLCBmbG9hdCByKTsKCgogICAgdm9pZCBzZXRWYWx1
ZShjb25zdCBTYkxpbmUgJmEsIGZsb2F0IHIpOwoKCiAgICB2b2lkIHNldEF4aXMoY29uc3QgU2JM
aW5lICZhKTsKICAgIHZvaWQgc2V0UmFkaXVzKGZsb2F0IHIpOwoKCiAgICBjb25zdCBTYkxpbmUg
JiBnZXRBeGlzKCkgY29uc3QgeyByZXR1cm4gYXhpczsgfQogICAgZmxvYXQgZ2V0UmFkaXVzKCkg
Y29uc3QgeyByZXR1cm4gcmFkaXVzOyB9CgoKCiAgICBTYkJvb2wgaW50ZXJzZWN0KGNvbnN0IFNi
TGluZSAmbCwgU2JWZWMzZiAmaW50ZXJzZWN0aW9uKSBjb25zdDsKCiAgICBTYkJvb2wgaW50ZXJz
ZWN0KGNvbnN0IFNiTGluZSAmbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBTYlZlYzNmICZl
bnRlciwgU2JWZWMzZiAmZXhpdCkgY29uc3Q7CgogIHByaXZhdGU6CiAgICBTYkxpbmUgYXhpczsK
ICAgIGZsb2F0IHJhZGl1czsKCiAgICBzdGF0aWMgU2JCb29sIHVuaXRDeWxpbmRlckludGVyc2Vj
dChjb25zdCBTYkxpbmUgJmwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTYlZlYzNmICZpbiwgU2JWZWMzZiAmb3V0KTsKfTsKIyAxNDIyICIuLi8uLi8uLi8u
Li8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9TYkxpbmVhci5oIgpjbGFzcyBTYlNw
aGVyZSB7CiAgcHVibGljOgoKCgogICAgU2JTcGhlcmUoKSB7fQoKCiAgICBTYlNwaGVyZShjb25z
dCBTYlZlYzNmICZjLCBmbG9hdCByKTsKCgogICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTYlZlYzNm
ICZjLCBmbG9hdCByKTsKCgogICAgdm9pZCBzZXRDZW50ZXIoY29uc3QgU2JWZWMzZiAmYyk7CiAg
ICB2b2lkIHNldFJhZGl1cyhmbG9hdCByKTsKCgogICAgY29uc3QgU2JWZWMzZiAmIGdldENlbnRl
cigpIGNvbnN0IHsgcmV0dXJuIGNlbnRlcjsgfQogICAgZmxvYXQgZ2V0UmFkaXVzKCkgY29uc3Qg
eyByZXR1cm4gcmFkaXVzOyB9CgoKCiAgICB2b2lkIGNpcmN1bXNjcmliZShjb25zdCBTYkJveDNm
ICZib3gpOwoKCiAgICBTYkJvb2wgaW50ZXJzZWN0KGNvbnN0IFNiTGluZSAmbCwgU2JWZWMzZiAm
aW50ZXJzZWN0aW9uKSBjb25zdDsKCiAgICBTYkJvb2wgaW50ZXJzZWN0KGNvbnN0IFNiTGluZSAm
bCwgU2JWZWMzZiAmZW50ZXIsIFNiVmVjM2YgJmV4aXQpIGNvbnN0OwoKICBwcml2YXRlOgogICAg
U2JWZWMzZiBjZW50ZXI7CiAgICBmbG9hdCByYWRpdXM7Cn07CiMgNjUgIi4uLy4uLy4uLy4uLy4u
L2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL1NiUExpc3QuaCIgMgojIDc5ICIuLi8uLi8u
Li8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9TYlBMaXN0LmgiCmNsYXNzIFNi
UExpc3QgewogIHB1YmxpYzoKCgogICAgU2JQTGlzdCgpOwoKCgogICAgU2JQTGlzdChpbnQgaW5p
dFNpemUpOwoKCgogICAgU2JQTGlzdChjb25zdCBTYlBMaXN0ICZwbCk7CgoKCiAgICB+U2JQTGlz
dCgpOwoKCiAgICB2b2lkIGFwcGVuZCh2b2lkICogcHRyKQogICAgICAgIHsgaWYgKG5QdHJzICsg
MSA+IHB0cnNTaXplKSBleHBhbmQoblB0cnMgKyAxKTsKICAgICAgICAgIHB0cnNbblB0cnMrK10g
PSBwdHI7IH0KCgogICAgaW50IGZpbmQoY29uc3Qgdm9pZCAqcHRyKSBjb25zdDsKCgogICAgdm9p
ZCBpbnNlcnQodm9pZCAqcHRyLCBpbnQgYWRkQmVmb3JlKTsKCgogICAgdm9pZCByZW1vdmUoaW50
IHdoaWNoKTsKCgoKICAgIGludCBnZXRMZW5ndGgoKSBjb25zdCB7IHJldHVybiAoaW50KSBuUHRy
czsgfQoKCgogICAgdm9pZCB0cnVuY2F0ZShpbnQgc3RhcnQpCiAgICAgICAgeyBuUHRycyA9IHN0
YXJ0OyB9CgoKICAgIHZvaWQgY29weShjb25zdCBTYlBMaXN0ICZwbCk7CgoKICAgIFNiUExpc3Qg
JiBvcGVyYXRvciA9KGNvbnN0IFNiUExpc3QgJnBsKSB7IGNvcHkocGwpOyByZXR1cm4gKnRoaXM7
IH0KCgoKICAgIHZvaWQgKiYgb3BlcmF0b3IgW10oaW50IGkpIGNvbnN0CiAgICAgICAgeyBpZiAo
aSA+PSBuUHRycykgZ3JvdyhpKTsgcmV0dXJuIHB0cnNbaV07IH0KCgogICAgaW50IG9wZXJhdG9y
ID09KGNvbnN0IFNiUExpc3QgJnBsKSBjb25zdAogICAgICAgIHsgcmV0dXJuIHBsLm5QdHJzID09
IG5QdHJzID8gY29tcGFyZShwbCkgOiAwOyB9CiAgICBpbnQgb3BlcmF0b3IgIT0oY29uc3QgU2JQ
TGlzdCAmcGwpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gcGwublB0cnMgPT0gblB0cnMgPyAhIGNv
bXBhcmUocGwpIDogMTsgfQoKCiAgcHVibGljOgogICAgdm9pZCAqIGdldChpbnQgaSkgY29uc3Qg
eyByZXR1cm4gcHRyc1tpXTsgfQogICAgdm9pZCBzZXQoaW50IGksIHZvaWQgKmopIHsgcHRyc1tp
XSA9IGo7IH0KCiAgcHJpdmF0ZToKCgoKICAgIGludCBjb21wYXJlKGNvbnN0IFNiUExpc3QgJnBs
KSBjb25zdDsKCiAgICB2b2lkICoqIHB0cnM7CiAgICBpbnQgblB0cnM7CiAgICBpbnQgcHRyc1Np
emU7CgoKCgogICAgdm9pZCBncm93KGludCBtYXgpIGNvbnN0OwoKCgogICAgdm9pZCBzZXRTaXpl
KGludCBzaXplKQogICAgICAgIHsgaWYgKHNpemUgPiBwdHJzU2l6ZSkgZXhwYW5kKHNpemUpOyBu
UHRycyA9IHNpemU7IH0KCgoKICAgIHZvaWQgZXhwYW5kKGludCBzaXplKTsKfTsKIyAxNzggIi4u
Ly4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL1NiUExpc3QuaCIKIGNs
YXNzIFNiSW50TGlzdCA6IHB1YmxpYyBTYlBMaXN0IHsKCiAgcHVibGljOgoKICAgIFNiSW50TGlz
dCgpIHt9CgogICAgU2JJbnRMaXN0KGludCBpbml0U2l6ZSkgOiBTYlBMaXN0KGluaXRTaXplKSB7
fQoKICAgIHZvaWQgYXBwZW5kKGludCBpbnRlZ2VyKQogICAgICAgIHsgKChTYlBMaXN0ICopIHRo
aXMpLT5hcHBlbmQoKHZvaWQgKikgKHVuc2lnbmVkIGxvbmcpIGludGVnZXIpOyB9CgoKICAgIGlu
dCBmaW5kKGludCBpbnRlZ2VyKQogICAgICAgIHsgcmV0dXJuICgoU2JQTGlzdCAqKSB0aGlzKS0+
ZmluZCgodm9pZCAqKSAodW5zaWduZWQgbG9uZykgaW50ZWdlcik7IH0KCgogICAgdm9pZCBpbnNl
cnQoaW50IGludGVnZXIsIGludCBhZGRCZWZvcmUpCiAgICAgICAgeyAoKFNiUExpc3QgKikgdGhp
cyktPmluc2VydCgodm9pZCAqKSAodW5zaWduZWQgbG9uZykgaW50ZWdlciwgYWRkQmVmb3JlKTsg
fQoKICAgIGludCAmIG9wZXJhdG9yIFtdKGludCBpKSBjb25zdAoKCgoKCgoKICAgICAgICB7IHJl
dHVybiAoIChpbnQgJikgKCAoKihjb25zdCBTYlBMaXN0ICopIHRoaXMpIFtpXSApICk7IH0KCgoK
fTsKIyAyMTkgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL1Ni
UExpc3QuaCIKIGNsYXNzIFNiVmVjM2ZMaXN0IDogcHVibGljIFNiUExpc3QgewoKICBwdWJsaWM6
CiAgICAgU2JWZWMzZkxpc3QoKSB7fQogICAgflNiVmVjM2ZMaXN0KCk7CgogICAgdm9pZCBhcHBl
bmQoU2JWZWMzZiAqdmVjKQogICAgICAgIHsgKChTYlBMaXN0ICopIHRoaXMpLT5hcHBlbmQoKHZv
aWQgKikgbmV3IFNiVmVjM2YodmVjLT5nZXRWYWx1ZSgpKSk7IH0KCgogICAgdm9pZCBpbnNlcnQo
U2JWZWMzZiAqdmVjLCBpbnQgYWRkQmVmb3JlKQogICAgICAgIHsgKChTYlBMaXN0ICopIHRoaXMp
LT5pbnNlcnQoKHZvaWQgKikgbmV3IFNiVmVjM2YodmVjLT5nZXRWYWx1ZSgpKSwKICAgICAgICAg
ICAgICAgIGFkZEJlZm9yZSk7IH0KCiAgICBTYlZlYzNmICogb3BlcmF0b3IgW10oaW50IGkpIGNv
bnN0CiAgICAgICAgeyByZXR1cm4gKCAoU2JWZWMzZiAqKSAoICgqKGNvbnN0IFNiUExpc3QgKikg
dGhpcykgW2ldICkgKTsgfQp9OwojIDI0NiAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2lu
Y2x1ZGUvSW52ZW50b3IvU2JQTGlzdC5oIgpjbGFzcyBTYlN0cmluZzsKCiBjbGFzcyBTYlN0cmlu
Z0xpc3QgOiBwdWJsaWMgU2JQTGlzdCB7CiAgcHVibGljOgogICAgdm9pZCBhcHBlbmQoU2JTdHJp
bmcgKnN0cmluZykKICAgICAgICB7ICgoU2JQTGlzdCAqKSB0aGlzKS0+YXBwZW5kKCh2b2lkICop
IHN0cmluZyk7IH0KCiAgICBpbnQgZmluZChTYlN0cmluZyAqc3RyaW5nKQogICAgICAgIHsgcmV0
dXJuICgoU2JQTGlzdCAqKSB0aGlzKS0+ZmluZCgodm9pZCAqKSBzdHJpbmcpOyB9CgogICAgdm9p
ZCBpbnNlcnQoU2JTdHJpbmcgKnN0cmluZywgaW50IGFkZEJlZm9yZSkKICAgICAgICB7ICgoU2JQ
TGlzdCAqKSB0aGlzKS0+aW5zZXJ0KCh2b2lkICopIHN0cmluZywgYWRkQmVmb3JlKTsgfQoKICAg
IFNiU3RyaW5nIComIG9wZXJhdG9yIFtdKGludCBpKSBjb25zdAogICAgICAgIHsgcmV0dXJuICgg
KFNiU3RyaW5nIComKSAoICgqKGNvbnN0IFNiUExpc3QgKikgdGhpcykgW2ldICkgKTsgfQp9Owoj
IDYxICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9taXNjL1Nv
QXVkaXRvckxpc3QuaCIgMgojIDEgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRl
L0ludmVudG9yL21pc2MvU29Ob3RpZmljYXRpb24uaCIgMQojIDYzICIuLi8uLi8uLi8uLi8uLi9s
aWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9taXNjL1NvTm90aWZpY2F0aW9uLmgiCmNsYXNz
IFNvQmFzZTsKY2xhc3MgU29GaWVsZDsKIyA5OCAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNl
L2luY2x1ZGUvSW52ZW50b3IvbWlzYy9Tb05vdGlmaWNhdGlvbi5oIgogY2xhc3MgU29Ob3RSZWMg
ewoKICBwdWJsaWM6CgoKCgoKCiAgICBlbnVtIFR5cGUgewogICAgICAgIENPTlRBSU5FUiwKICAg
ICAgICBQQVJFTlQsCiAgICAgICAgU0VOU09SLAogICAgICAgIEZJRUxELAogICAgICAgIEVOR0lO
RQogICAgfTsKCgogICAgU29Ob3RSZWMoU29CYXNlICpiKSB7IGJhc2UgPSBiOyB9CgoKICAgIHZv
aWQgc2V0VHlwZShTb05vdFJlYzo6VHlwZSB0KSB7IHR5cGUgPSB0OyB9CgoKICAgIFNvQmFzZSAq
IGdldEJhc2UoKSBjb25zdCB7IHJldHVybiBiYXNlOyB9CiAgICBTb05vdFJlYzo6VHlwZSBnZXRU
eXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZTsgfQogICAgY29uc3QgU29Ob3RSZWMgKiBnZXRQcmV2
aW91cygpIGNvbnN0IHsgcmV0dXJuIHByZXZpb3VzOyB9CgoKICAgIHZvaWQgc2V0UHJldmlvdXMo
U29Ob3RSZWMgKnByZXYpIHsgcHJldmlvdXMgPSBwcmV2OyB9CgoKICAgIHZvaWQgcHJpbnQoRklM
RSAqZnApIGNvbnN0OwoKICBwcml2YXRlOgoKICAgIFNvQmFzZSAqYmFzZTsKICAgIFR5cGUgdHlw
ZTsKICAgIGNvbnN0IFNvTm90UmVjICpwcmV2aW91czsKfTsKIyAxNTQgIi4uLy4uLy4uLy4uLy4u
L2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL21pc2MvU29Ob3RpZmljYXRpb24uaCIKIGNs
YXNzIFNvTm90TGlzdCB7CgogIHB1YmxpYzoKCiAgICBTb05vdExpc3QoKTsKCgogICAgU29Ob3RM
aXN0KGNvbnN0IFNvTm90TGlzdCAqY29weUZyb20pIHsgKnRoaXMgPSAqY29weUZyb207IH0KCgog
ICAgdm9pZCBhcHBlbmQoU29Ob3RSZWMgKnJlYyk7CgoKCiAgICB2b2lkIGFwcGVuZChTb05vdFJl
YyAqcmVjLCBTb0ZpZWxkICpmaWVsZCk7CgoKICAgIHZvaWQgc2V0TGFzdFR5cGUoU29Ob3RSZWM6
OlR5cGUgdCkKICAgICAgICB7CiAgICAgICAgICAgIGxhc3QtPnNldFR5cGUodCk7CgoKICAgICAg
ICAgICAgaWYgKHQgPT0gU29Ob3RSZWM6OkZJRUxEIHx8IHQgPT0gU29Ob3RSZWM6OkVOR0lORSkK
ICAgICAgICAgICAgICAgIGZpcnN0QXROb2RlID0gX19udWxsOwogICAgICAgIH0KCgogICAgU29O
b3RSZWMgKiBnZXRGaXJzdFJlYygpIGNvbnN0IHsgcmV0dXJuIGZpcnN0OyB9CiAgICBTb05vdFJl
YyAqIGdldExhc3RSZWMoKSBjb25zdCB7IHJldHVybiBsYXN0OyB9CgoKCgoKICAgIFNvTm90UmVj
ICogZ2V0Rmlyc3RSZWNBdE5vZGUoKSBjb25zdCB7IHJldHVybiBmaXJzdEF0Tm9kZTsgfQoKCgog
ICAgU29GaWVsZCAqIGdldExhc3RGaWVsZCgpIGNvbnN0IHsgcmV0dXJuIGxhc3RGaWVsZDsgfQoK
CgogICAgdWludDMyX3QgZ2V0VGltZVN0YW1wKCkgY29uc3QgeyByZXR1cm4gdGltZVN0YW1wOyB9
CgoKICAgIHZvaWQgcHJpbnQoRklMRSAqZnApIGNvbnN0OwoKICBwcml2YXRlOgogICAgU29Ob3RS
ZWMgKmZpcnN0LCAqbGFzdDsKICAgIFNvTm90UmVjICpmaXJzdEF0Tm9kZTsKICAgIFNvRmllbGQg
Kmxhc3RGaWVsZDsKICAgIHVpbnQzMl90IHRpbWVTdGFtcDsKfTsKIyA2MiAiLi4vLi4vLi4vLi4v
Li4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvbWlzYy9Tb0F1ZGl0b3JMaXN0LmgiIDIK
IyA5MiAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvbWlzYy9T
b0F1ZGl0b3JMaXN0LmgiCiBjbGFzcyBTb0F1ZGl0b3JMaXN0IDogcHJpdmF0ZSBTYlBMaXN0IHsK
ICBwdWJsaWM6CgoKICAgIFNvQXVkaXRvckxpc3QoKTsKICAgIH5Tb0F1ZGl0b3JMaXN0KCk7CgoK
ICAgIHZvaWQgYXBwZW5kKHZvaWQgKmF1ZGl0b3IsIFNvTm90UmVjOjpUeXBlIHR5cGUpOwoKCiAg
ICB2b2lkIHNldChpbnQgaW5kZXgsIHZvaWQgKmF1ZGl0b3IsIFNvTm90UmVjOjpUeXBlIHR5cGUp
OwoKCiAgICBpbnQgZmluZCh2b2lkICphdWRpdG9yLCBTb05vdFJlYzo6VHlwZSB0eXBlKSBjb25z
dDsKCgogICAgdm9pZCAqIGdldE9iamVjdChpbnQgaW5kZXgpIGNvbnN0OwogICAgU29Ob3RSZWM6
OlR5cGUgZ2V0VHlwZShpbnQgaW5kZXgpIGNvbnN0OwoKCiAgICB2b2lkIHJlbW92ZShpbnQgaW5k
ZXgpOwogICAgdm9pZCByZW1vdmUodm9pZCAqYXVkaXRvciwgU29Ob3RSZWM6OlR5cGUgdHlwZSkK
ICAgICAgICB7IHJlbW92ZShmaW5kKGF1ZGl0b3IsIHR5cGUpKTsgfQoKCiAgICBpbnQgZ2V0TGVu
Z3RoKCkgY29uc3Q7CgoKICAgIHZvaWQgbm90aWZ5KFNvTm90TGlzdCAqbGlzdCk7CgogIHByaXZh
dGU6CgogICAgdm9pZCBub3RpZnkxKFNvTm90TGlzdCAqbGlzdCwgaW50IGluZGV4KTsKfTsKIyA2
NCAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvbWlzYy9Tb0Jh
c2UuaCIgMgojIDEgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9y
L1NiU3RyaW5nLmgiIDEKIyA2MyAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUv
SW52ZW50b3IvU2JTdHJpbmcuaCIKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDI4
ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuICJDIiB7CgoKCgojIDEgIi91c3IvbGli
L2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0
ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9p
ZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAq
X19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1l
bW1vdmUgKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKICAg
ICB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgKm1lbWNjcHkgKHZvaWQgKl9fcmVzdHJpY3Qg
X19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAg
ICAgICBpbnQgX19jLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lk
ICptZW1zZXQgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBtZW1jbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBz
aXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4
dGVybiB2b2lkICptZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19u
KQogICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4g
dm9pZCAqcmF3bWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbXJjaHIgKF9fY29uc3Qg
dm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gY2hhciAqc3RyY3B5IChjaGFyICpfX3Jlc3Ry
aWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgp
OwoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19u
KSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVz
dCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJu
IGNoYXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHN0cmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIg
Kl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4g
aW50IHN0cm5jbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXpl
X3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVy
biBpbnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0
cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoK
CiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS94bG9j
YWxlLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX19sb2NhbGVfc3RydWN0CnsKCiAgc3RydWN0IGxvY2Fs
ZV9kYXRhICpfX2xvY2FsZXNbMTNdOwoKCiAgY29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICpfX2N0
eXBlX2I7CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvbG93ZXI7CiAgY29uc3QgaW50ICpfX2N0eXBl
X3RvdXBwZXI7CgoKICBjb25zdCBjaGFyICpfX25hbWVzWzEzXTsKfSAqX19sb2NhbGVfdDsKIyAx
MTUgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKZXh0ZXJuIGludCBzdHJjb2xsX2wgKF9f
Y29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBfX2xvY2FsZV90IF9fbCkKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3Ry
eGZybV9sIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24sCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoKCgpleHRl
cm4gY2hhciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fbWFsbG9jX18pKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cm5kdXAgKF9fY29uc3QgY2hh
ciAqX19zdHJpbmcsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
bWFsbG9jX18pKTsKIyAxNjAgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCmV4dGVybiBjaGFy
ICpzdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9f
cywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0
ZXJuIGNoYXIgKnN0cmNocm51bCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAo
X19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19yZWplY3QpCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29u
c3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hh
ciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnN0ciAoX19jb25zdCBjaGFyICpfX2hh
eXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gY2hhciAqc3RydG9rIChjaGFyICpfX3Jlc3RyaWN0
IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pCiAgICAgdGhyb3cgKCk7CgoK
CgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgp
OwoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RyY2FzZXN0
ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCgpleHRlcm4gdm9pZCAq
bWVtbWVtIChfX2NvbnN0IHZvaWQgKl9faGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrbGVuLAog
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fbmVlZGxlLCBzaXplX3QgX19uZWVk
bGVsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVy
biB2b2lkICpfX21lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRo
cm93ICgpOwpleHRlcm4gdm9pZCAqbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVf
dCBfX24pIHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RybGVuIChfX2NvbnN0IGNoYXIg
Kl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIHNp
emVfdCBzdHJubGVuIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGNoYXIg
KnN0cmVycm9yIChpbnQgX19lcnJudW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmVy
cm9yX3IgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cg
KCk7CgoKCgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93
ICgpOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lkICpfX3NyYywgdm9pZCAqX19k
ZXN0LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBiemVybyAodm9pZCAqX19z
LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAq
X19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFy
ICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4
dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgZmZzbCAo
bG9uZyBpbnQgX19sKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4
dGVuc2lvbl9fIGV4dGVybiBpbnQgZmZzbGwgKGxvbmcgbG9uZyBpbnQgX19sbCkKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IHN0cmNhc2Vj
bXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RybmNhc2VjbXAgKF9f
Y29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBpbnQgc3RyY2Fz
ZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9f
czEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
X19uLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0IF9fc3Ry
aW5ncCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVs
aW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzdHJ2ZXJzY21wIChfX2NvbnN0IGNoYXIgKl9f
czEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFsIChpbnQgX19zaWcpIHRocm93ICgpOwoK
CmV4dGVybiBjaGFyICpfX3N0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0cGNw
eSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Ny
YykKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RwbmNweSAoY2hhciAqX19yZXN0
cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpzdHBuY3B5IChj
aGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIg
KnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICptZW1mcm9i
ICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqYmFz
ZW5hbWUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7CiMgMzc5ICIvdXNyL2lu
Y2x1ZGUvc3RyaW5nLmgiIDMKfQojIDY0ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5j
bHVkZS9JbnZlbnRvci9TYlN0cmluZy5oIiAyCiMgNzUgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRh
YmFzZS9pbmNsdWRlL0ludmVudG9yL1NiU3RyaW5nLmgiCmNsYXNzIFNiU3RyaW5nIHsKICBwdWJs
aWM6CgoKICAgIFNiU3RyaW5nKCkgeyBzdHJpbmcgPSBzdGF0aWNTdG9yYWdlOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdbMF0gPSAnXDAnOyB9CgoKCiAg
ICBTYlN0cmluZyhjb25zdCBjaGFyICpzdHIpIHsgc3RyaW5nID0gc3RhdGljU3RvcmFnZTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRoaXMgPSBzdHI7IH0KCgoK
ICAgIFNiU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHN0YXJ0LCBpbnQgZW5kKTsKCgoKICAg
IFNiU3RyaW5nKGNvbnN0IFNiU3RyaW5nICZzdHIpIHsgc3RyaW5nID0gc3RhdGljU3RvcmFnZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRoaXMgPSBzdHIuc3Ry
aW5nOyB9CgoKCgogICAgU2JTdHJpbmcoaW50IGRpZ2l0U3RyaW5nKTsKCgogICAgflNiU3RyaW5n
KCk7CgoKICAgIHVpbnQzMl90IGhhc2goKSB7IHJldHVybiBTYlN0cmluZzo6aGFzaChzdHJpbmcp
OyB9CgoKCiAgICBpbnQgZ2V0TGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gc3RybGVuKHN0cmluZyk7
IH0KCgoKCiAgICB2b2lkIG1ha2VFbXB0eShTYkJvb2wgZnJlZU9sZCA9IDEpOwoKCgogICAgY29u
c3QgY2hhciAqIGdldFN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHN0cmluZzsgfQoKCgoKCiAgICBT
YlN0cmluZyBnZXRTdWJTdHJpbmcoaW50IHN0YXJ0Q2hhciwgaW50IGVuZENoYXIgPSAtMSkgY29u
c3Q7CgoKCgoKICAgIHZvaWQgZGVsZXRlU3ViU3RyaW5nKGludCBzdGFydENoYXIsIGludCBlbmRD
aGFyID0gLTEpOwoKCgogICAgU2JTdHJpbmcgJiBvcGVyYXRvciA9KGNvbnN0IGNoYXIgKnN0cik7
CiAgICBTYlN0cmluZyAmIG9wZXJhdG9yID0oY29uc3QgU2JTdHJpbmcgJnN0cikKICAgICAgICB7
IHJldHVybiAoKnRoaXMgPSBzdHIuc3RyaW5nKTsgfQoKCgogICAgU2JTdHJpbmcgJiBvcGVyYXRv
ciArPShjb25zdCBjaGFyICpzdHIpOwoKCiAgICBTYlN0cmluZyAmIG9wZXJhdG9yICs9KGNvbnN0
IFNiU3RyaW5nICZzdHIpOwoKCiAgICBpbnQgb3BlcmF0b3IgISgpIGNvbnN0IHsgcmV0dXJuIChz
dHJpbmdbMF0gPT0gJ1wwJyk7IH0KCgoKICAgIGZyaWVuZCBpbnQgb3BlcmF0b3IgPT0oY29uc3Qg
U2JTdHJpbmcgJnN0ciwgY29uc3QgY2hhciAqcyk7CgoKICAgIGZyaWVuZCBpbnQgb3BlcmF0b3Ig
PT0oY29uc3QgY2hhciAqcywgY29uc3QgU2JTdHJpbmcgJnN0cikKICAgICAgICB7IHJldHVybiAo
c3RyID09IHMpOyB9CgoKCiAgICBmcmllbmQgaW50IG9wZXJhdG9yID09KGNvbnN0IFNiU3RyaW5n
ICZzdHIxLCBjb25zdCBTYlN0cmluZyAmc3RyMikKICAgICAgICB7IHJldHVybiAoc3RyMSA9PSBz
dHIyLnN0cmluZyk7IH0KCgoKICAgIGZyaWVuZCBpbnQgb3BlcmF0b3IgIT0oY29uc3QgU2JTdHJp
bmcgJnN0ciwgY29uc3QgY2hhciAqcyk7CgoKICAgIGZyaWVuZCBpbnQgb3BlcmF0b3IgIT0oY29u
c3QgY2hhciAqcywgY29uc3QgU2JTdHJpbmcgJnN0cikKICAgICAgICB7IHJldHVybiAoc3RyICE9
IHMpOyB9CgoKICAgIGZyaWVuZCBpbnQgb3BlcmF0b3IgIT0oY29uc3QgU2JTdHJpbmcgJnN0cjEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNiU3RyaW5nICZzdHIy
KQogICAgICAgIHsgcmV0dXJuIChzdHIxICE9IHN0cjIuc3RyaW5nKTsgfQoKICBwdWJsaWM6Cgog
ICAgc3RhdGljIHVpbnQzMl90IGhhc2goY29uc3QgY2hhciAqcyk7CgogIHByaXZhdGU6CiAgICBj
aGFyICpzdHJpbmc7CiAgICBpbnQgc3RvcmFnZVNpemU7CgoKCiAgICBjaGFyIHN0YXRpY1N0b3Jh
Z2VbMzJdOwoKICAgIHZvaWQgZXhwYW5kKGludCBieVNpemUpOwp9OwojIDE5OSAiLi4vLi4vLi4v
Li4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvU2JTdHJpbmcuaCIKIGNsYXNzIFNi
TmFtZUVudHJ5IHsKCiAgcHVibGljOgoKICAgIFNiQm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gKHN0cmluZ1swXSA9PSAnXDAnKTsgfQoKCiAgICBTYkJvb2wgaXNFcXVhbChjb25zdCBjaGFy
ICpzKSBjb25zdAogICAgICAgIHsgcmV0dXJuIChzdHJpbmdbMF0gPT0gc1swXSAmJiAhIHN0cmNt
cChzdHJpbmcsIHMpKTsgfQoKICBwcml2YXRlOgogICAgc3RhdGljIGludCBuYW1lVGFibGVTaXpl
OwogICAgc3RhdGljIFNiTmFtZUVudHJ5ICoqbmFtZVRhYmxlOwogICAgc3RhdGljIHN0cnVjdCBT
Yk5hbWVDaHVuayAqY2h1bms7CgogICAgY29uc3QgY2hhciAqc3RyaW5nOwogICAgdWludDMyX3Qg
aGFzaFZhbHVlOwogICAgU2JOYW1lRW50cnkgKm5leHQ7CgoKICAgIHN0YXRpYyB2b2lkIGluaXRD
bGFzcygpOwoKCiAgICBTYk5hbWVFbnRyeShjb25zdCBjaGFyICpzLCB1aW50MzJfdCBoLCBTYk5h
bWVFbnRyeSAqbikKICAgICAgICB7IHN0cmluZyA9IHM7IGhhc2hWYWx1ZSA9IGg7IG5leHQgPSBu
OyB9CgoKICAgIHN0YXRpYyBjb25zdCBTYk5hbWVFbnRyeSAqIGluc2VydChjb25zdCBjaGFyICpz
KTsKCmZyaWVuZCBjbGFzcyBTYk5hbWU7Cn07CiMgMjQ1ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0
YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9TYlN0cmluZy5oIgpjbGFzcyBTYk5hbWUgewogIHB1Ymxp
YzoKCiAgICBTYk5hbWUoKTsKCgoKICAgIFNiTmFtZShjb25zdCBjaGFyICpzKSB7IGVudHJ5ID0g
U2JOYW1lRW50cnk6Omluc2VydChzKTsgfQoKCgogICAgU2JOYW1lKGNvbnN0IFNiU3RyaW5nICZz
KSB7IGVudHJ5ID0gU2JOYW1lRW50cnk6Omluc2VydChzLmdldFN0cmluZygpKTsgfQoKCgoKCiAg
ICBTYk5hbWUoY29uc3QgU2JOYW1lICZuKSB7IGVudHJ5ID0gbi5lbnRyeTsgfQoKICAgIH5TYk5h
bWUoKSB7fQoKCgogICAgY29uc3QgY2hhciAqZ2V0U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gZW50
cnktPnN0cmluZzsgfQoKCgogICAgaW50IGdldExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHN0cmxl
bihlbnRyeS0+c3RyaW5nKTsgfQoKCgogICAgc3RhdGljIFNiQm9vbCBpc0lkZW50U3RhcnRDaGFy
KGNoYXIgYyk7CgoKCiAgICBzdGF0aWMgU2JCb29sIGlzSWRlbnRDaGFyKGNoYXIgYyk7CgoKCiAg
ICBzdGF0aWMgU2JCb29sIGlzQmFzZU5hbWVTdGFydENoYXIoY2hhciBjKTsKCgoKICAgIHN0YXRp
YyBTYkJvb2wgaXNCYXNlTmFtZUNoYXIoY2hhciBjKTsKCgogICAgaW50IG9wZXJhdG9yICEoKSBj
b25zdCB7IHJldHVybiBlbnRyeS0+aXNFbXB0eSgpOyB9CgoKCgogICAgZnJpZW5kIGludCBvcGVy
YXRvciA9PShjb25zdCBTYk5hbWUgJm4sIGNvbnN0IGNoYXIgKnMpCiAgICAgICAgeyByZXR1cm4g
bi5lbnRyeS0+aXNFcXVhbChzKTsgfQoKCiAgICBmcmllbmQgaW50IG9wZXJhdG9yID09KGNvbnN0
IGNoYXIgKnMsIGNvbnN0IFNiTmFtZSAmbikKICAgICAgICB7IHJldHVybiBuLmVudHJ5LT5pc0Vx
dWFsKHMpOyB9CgoKCiAgICBmcmllbmQgaW50IG9wZXJhdG9yID09KGNvbnN0IFNiTmFtZSAmbjEs
IGNvbnN0IFNiTmFtZSAmbjIpCiAgICAgICAgeyByZXR1cm4gbjEuZW50cnkgPT0gbjIuZW50cnk7
IH0KCgoKCiAgICBmcmllbmQgaW50IG9wZXJhdG9yICE9KGNvbnN0IFNiTmFtZSAmbiwgY29uc3Qg
Y2hhciAqcykKICAgICAgICB7IHJldHVybiAhIG4uZW50cnktPmlzRXF1YWwocyk7IH0KCgogICAg
ZnJpZW5kIGludCBvcGVyYXRvciAhPShjb25zdCBjaGFyICpzLCBjb25zdCBTYk5hbWUgJm4pCiAg
ICAgICAgeyByZXR1cm4gISBuLmVudHJ5LT5pc0VxdWFsKHMpOyB9CgoKCiAgICBmcmllbmQgaW50
IG9wZXJhdG9yICE9KGNvbnN0IFNiTmFtZSAmbjEsIGNvbnN0IFNiTmFtZSAmbjIpCiAgICAgICAg
eyByZXR1cm4gbjEuZW50cnkgIT0gbjIuZW50cnk7IH0KCiAgcHJpdmF0ZToKICAgIGNvbnN0IFNi
TmFtZUVudHJ5ICplbnRyeTsKfTsKIyA2NSAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2lu
Y2x1ZGUvSW52ZW50b3IvbWlzYy9Tb0Jhc2UuaCIgMgojIDEgIi4uLy4uLy4uLy4uLy4uL2xpYi9k
YXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL1NvVHlwZS5oIiAxCiMgNzAgIi4uLy4uLy4uLy4uLy4u
L2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL1NvVHlwZS5oIgojIDEgIi4uLy4uLy4uLy4u
Ly4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL1NiRGljdC5oIiAxCiMgNzkgIi4uLy4u
Ly4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL1NiRGljdC5oIgogY2xhc3Mg
U2JEaWN0RW50cnkgewogIHByaXZhdGU6CiAgICB1bnNpZ25lZCBsb25nIGtleTsKICAgIHZvaWQg
KiB2YWx1ZTsKCiAgICBTYkRpY3RFbnRyeSAqIG5leHQ7CgoKICAgIFNiRGljdEVudHJ5KHVuc2ln
bmVkIGxvbmcgaywgdm9pZCAqdikgeyBrZXkgPSBrOyB2YWx1ZSA9IHY7IH07CgpmcmllbmQgY2xh
c3MgU2JEaWN0Owp9OwojIDEwMSAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUv
SW52ZW50b3IvU2JEaWN0LmgiCiBjbGFzcyBTYkRpY3QgewogIHB1YmxpYzoKCgogICAgU2JEaWN0
KCBpbnQgZW50cmllcyA9IDI1MSApOwoKCiAgICB+U2JEaWN0KCk7CgoKCiAgICB2b2lkIGFwcGx5
VG9BbGwodm9pZCAoKnJ0bikodW5zaWduZWQgbG9uZyBrZXksIHZvaWQgKnZhbHVlKSApOwoKCgoK
ICAgIHZvaWQgYXBwbHlUb0FsbCh2b2lkICgqcnRuKSh1bnNpZ25lZCBsb25nIGtleSwgdm9pZCAq
dmFsdWUsIHZvaWQgKmRhdGEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRh
ICk7CgoKICAgIHZvaWQgY2xlYXIoKTsKCgoKICAgIFNiQm9vbCBlbnRlcih1bnNpZ25lZCBsb25n
IGtleSwgdm9pZCAqdmFsdWUpOwoKCgogICAgU2JCb29sIGZpbmQodW5zaWduZWQgbG9uZyBrZXks
IHZvaWQgKiZ2YWx1ZSkgY29uc3Q7CgoKCiAgICB2b2lkIG1ha2VQTGlzdChTYlBMaXN0ICZrZXlz
LCBTYlBMaXN0ICZ2YWx1ZXMpOwoKCiAgICBTYkJvb2wgcmVtb3ZlKHVuc2lnbmVkIGxvbmcga2V5
KTsKCiAgcHJpdmF0ZToKCiAgICBpbnQgdGFibGVTaXplOwogICAgU2JEaWN0RW50cnkgKiAqYnVj
a2V0czsKCiAgICBTYkRpY3RFbnRyeSAqJiBmaW5kRW50cnkodW5zaWduZWQgbG9uZyBrZXkpIGNv
bnN0OwogICAgc3RhdGljIHZvaWQgYWRkRW50cnlUb1BMaXN0cyh1bnNpZ25lZCBsb25nIGtleSwg
dm9pZCAqdmFsdWUsIHZvaWQgKmRhdGEpOwp9OwojIDcxICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0
YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9Tb1R5cGUuaCIgMgoKY2xhc3MgU29UeXBlTGlzdDsKc3Ry
dWN0IFNvVHlwZURhdGE7CgoKCgpjbGFzcyBTb1R5cGUgewoKCgogIHB1YmxpYzoKCiAgICBzdGF0
aWMgU29UeXBlIGZyb21OYW1lKFNiTmFtZSBuYW1lKTsKCgogICAgU2JOYW1lIGdldE5hbWUoKSBj
b25zdDsKCgogICAgU29UeXBlIGdldFBhcmVudCgpIGNvbnN0OwoKCiAgICBzdGF0aWMgU29UeXBl
IGJhZFR5cGUoKTsKCgogICAgU2JCb29sIGlzQmFkKCkgY29uc3QKICAgICAgICB7IHJldHVybiAo
c3RvcmFnZS5pbmRleCA9PSAwKTsgfQoKCiAgICBTYkJvb2wgaXNEZXJpdmVkRnJvbShTb1R5cGUg
dCkgY29uc3Q7CgoKCiAgICBzdGF0aWMgaW50IGdldEFsbERlcml2ZWRGcm9tKFNvVHlwZSB0eXBl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb1R5cGVMaXN0ICZs
aXN0KTsKCgogICAgU2JCb29sIGNhbkNyZWF0ZUluc3RhbmNlKCkgY29uc3Q7CgoKCiAgICB2b2lk
ICogY3JlYXRlSW5zdGFuY2UoKSBjb25zdDsKCgogICAgaW50IG9wZXJhdG9yID09KGNvbnN0IFNv
VHlwZSB0KSBjb25zdAogICAgICAgIHsgcmV0dXJuIChzdG9yYWdlLmluZGV4ID09IHQuc3RvcmFn
ZS5pbmRleCk7fQogICAgaW50IG9wZXJhdG9yICE9KGNvbnN0IFNvVHlwZSB0KSBjb25zdAogICAg
ICAgIHsgcmV0dXJuIChzdG9yYWdlLmluZGV4ICE9IHQuc3RvcmFnZS5pbmRleCk7fQoKCgogICAg
aW50IG9wZXJhdG9yIDwoY29uc3QgU29UeXBlIHQpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gKHN0
b3JhZ2UuaW5kZXggPCB0LnN0b3JhZ2UuaW5kZXgpOyB9CgogIHB1YmxpYzoKCgogICAgc3RhdGlj
IFNvVHlwZSBjcmVhdGVUeXBlKFNvVHlwZSBwYXJlbnQsIFNiTmFtZSBuYW1lLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiAoKmNyZWF0ZU1ldGhvZCkoKSA9IF9fbnVs
bCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBkYXRhID0gMCk7CgoK
CgoKCiAgICBzdGF0aWMgU29UeXBlIG92ZXJyaWRlVHlwZShTb1R5cGUgZXhpc3RpbmdUeXBlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqICgqY3JlYXRlTWV0aG9k
KSgpID0gX19udWxsKTsKCiAgcHVibGljOgoKICAgIHN0YXRpYyB2b2lkIGluaXQoKTsKCgogICAg
c2hvcnQgZ2V0RGF0YSgpIGNvbnN0IHsgcmV0dXJuIHN0b3JhZ2UuZGF0YTsgfQoKCiAgICBzaG9y
dCBnZXRLZXkoKSBjb25zdCB7IHJldHVybiBzdG9yYWdlLmluZGV4OyB9CgoKCiAgICB2b2lkIG1h
a2VJbnRlcm5hbCgpOwoKCgogICAgc3RhdGljIGludCBnZXROdW1UeXBlcygpIHsgcmV0dXJuIG5l
eHRJbmRleDsgfQoKICBwcml2YXRlOgoKCiAgICBzdHJ1Y3QgewogICAgICAgIHVuc2lnbmVkIGlu
dCBkYXRhIDogMTY7CiAgICAgICAgdW5zaWduZWQgaW50IGluZGV4IDogMTU7CgogICAgICAgIHVu
c2lnbmVkIGludCBpc1B1YmxpYyA6MTsKICAgIH0gc3RvcmFnZTsKCgogICAgc3RhdGljIFNiRGlj
dCAqbmFtZURpY3Q7CgoKICAgIHN0YXRpYyBpbnQgbmV4dEluZGV4OwogICAgc3RhdGljIGludCBh
cnJheVNpemU7CiAgICBzdGF0aWMgU29UeXBlRGF0YSAqdHlwZURhdGE7CgogICAgc3RhdGljIHZv
aWQgZXhwYW5kVHlwZURhdGEoKTsKfTsKIyA2NiAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNl
L2luY2x1ZGUvSW52ZW50b3IvbWlzYy9Tb0Jhc2UuaCIgMgoKY2xhc3MgU29CYXNlTGlzdDsKY2xh
c3MgU29JbnB1dDsKY2xhc3MgU29Ob2RlOwpjbGFzcyBTb05vdExpc3Q7CmNsYXNzIFNvT3V0cHV0
OwpjbGFzcyBTb1BhdGg7CiMgODggIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRl
L0ludmVudG9yL21pc2MvU29CYXNlLmgiCmNsYXNzIFNvQmFzZSB7CiAgcHVibGljOgoKCgogICAg
dm9pZCByZWYoKSBjb25zdDsKCgogICAgdm9pZCB1bnJlZigpIGNvbnN0OwoKCiAgICB2b2lkIHVu
cmVmTm9EZWxldGUoKSBjb25zdDsKCgoKICAgIHZvaWQgdG91Y2goKSB7IHN0YXJ0Tm90aWZ5KCk7
IH0KCgoKICAgIHN0YXRpYyBTb1R5cGUgZ2V0Q2xhc3NUeXBlSWQoKSB7IHJldHVybiBjbGFzc1R5
cGVJZDsgfQoKCgogICAgdmlydHVhbCBTb1R5cGUgZ2V0VHlwZUlkKCkgY29uc3QgPSAwOwoKCiAg
ICBTYkJvb2wgaXNPZlR5cGUoU29UeXBlIHR5cGUpIGNvbnN0OwoKCgoKICAgIHZpcnR1YWwgU2JO
YW1lIGdldE5hbWUoKSBjb25zdDsKCgoKICAgIHZpcnR1YWwgdm9pZCBzZXROYW1lKGNvbnN0IFNi
TmFtZSAmbmFtZSk7CgogIHByb3RlY3RlZDoKCiAgICBTb0Jhc2UoKTsKCgogICAgdmlydHVhbCB+
U29CYXNlKCk7CgoKCiAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwoKCiAgICBzdGF0aWMgdWlu
dDMyX3QgZ2V0Q3VycmVudFdyaXRlQ291bnRlcigpCiAgICAgICAgeyByZXR1cm4gY3VycmVudFdy
aXRlQ291bnRlcjsgfQoKCiAgICBTYkJvb2wgaGFzTXVsdGlwbGVXcml0ZVJlZnMoKSBjb25zdAog
ICAgICAgIHsgcmV0dXJuIHdyaXRlU3R1ZmYubXVsdFdyaXRlUmVmOyB9CgoKCgoKCgogICAgU2JC
b29sIHdyaXRlSGVhZGVyKFNvT3V0cHV0ICpvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTYkJvb2wgaXNHcm91cCwgU2JCb29sIGlzRW5naW5lKSBjb25zdDsKICAgIHZvaWQgd3JpdGVG
b290ZXIoU29PdXRwdXQgKm91dCkgY29uc3Q7CgoKCgogICAgdmlydHVhbCBjb25zdCBjaGFyICpn
ZXRGaWxlRm9ybWF0TmFtZSgpIGNvbnN0OwoKCgoKICAgIGVudW0gQmFzZUZsYWdzIHsKICAgICAg
ICBJU19FTkdJTkUgPSAxLAogICAgICAgIElTX0dST1VQID0gMgogICAgfTsKCgoKCgogICAgdmly
dHVhbCBTYkJvb2wgcmVhZEluc3RhbmNlKFNvSW5wdXQgKmluLCB1bnNpZ25lZCBzaG9ydCBmbGFn
cykgPSAwOwoKICBwdWJsaWM6CgoKICAgIHN0YXRpYyB2b2lkIGluaXRDbGFzcygpOwoKCiAgICBz
dGF0aWMgdm9pZCBpbmNyZW1lbnRDdXJyZW50V3JpdGVDb3VudGVyKCkKICAgICAgICB7IGN1cnJl
bnRXcml0ZUNvdW50ZXIrKzsgfQoKCgogICAgc3RhdGljIHZvaWQgZGVjcmVtZW50Q3VycmVudFdy
aXRlQ291bnRlcigpCiAgICAgICAgeyBjdXJyZW50V3JpdGVDb3VudGVyLS07IH0KCgoKCiAgICB2
aXJ0dWFsIHZvaWQgc3RhcnROb3RpZnkoKTsKCgoKCgoKICAgIHZpcnR1YWwgdm9pZCBub3RpZnko
U29Ob3RMaXN0ICpsaXN0KTsKCgogICAgdm9pZCBhZGRBdWRpdG9yKHZvaWQgKmF1ZGl0b3IsIFNv
Tm90UmVjOjpUeXBlIHR5cGUpOwogICAgdm9pZCByZW1vdmVBdWRpdG9yKHZvaWQgKmF1ZGl0b3Is
IFNvTm90UmVjOjpUeXBlIHR5cGUpOwoKCgogICAgY29uc3QgU29BdWRpdG9yTGlzdCAmZ2V0QXVk
aXRvcnMoKSB7IHJldHVybiBhdWRpdG9yczsgfQoKCiAgICBzdGF0aWMgU2JCb29sIHRyYWNlUmVm
czsKCgogICAgc3RhdGljIHZvaWQgYWRkTmFtZShTb0Jhc2UgKiwgY29uc3QgY2hhciAqKTsKICAg
IHN0YXRpYyB2b2lkIHJlbW92ZU5hbWUoU29CYXNlICosIGNvbnN0IGNoYXIgKik7CgoKICAgIHN0
YXRpYyBTb0Jhc2UgKmdldE5hbWVkQmFzZShjb25zdCBTYk5hbWUgJiwgU29UeXBlKTsKICAgIHN0
YXRpYyBpbnQgZ2V0TmFtZWRCYXNlcyhjb25zdCBTYk5hbWUgJiwgU29CYXNlTGlzdCAmLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvVHlwZSk7CgoKICAgIGludCBnZXRS
ZWZDb3VudCgpIGNvbnN0IHsgcmV0dXJuIHJlZkNvdW50OyB9CgoKCgoKCiAgICBzdGF0aWMgU2JC
b29sIHJlYWQoU29JbnB1dCAqaW4sIFNvQmFzZSAqJmJhc2UsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU29UeXBlIGV4cGVjdGVkVHlwZSk7CgoKCgogICAgdmlydHVhbCB2b2lkIGFkZFdy
aXRlUmVmZXJlbmNlKFNvT3V0cHV0ICpvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNiQm9vbCBpc0Zyb21GaWVsZCA9IDApOwoKCgogICAgU2JCb29sIHNob3Vs
ZFdyaXRlKCk7CgoKCgogICAgc3RhdGljIHZvaWQgc2V0SW5zdGFuY2VQcmVmaXgoY29uc3QgU2JT
dHJpbmcgJmMpIHsgaW5zdGFuY2VQcmVmaXggPSBjOyB9CgogIHByaXZhdGU6CgogICAgc3RhdGlj
IFNvVHlwZSBjbGFzc1R5cGVJZDsKCiAgICBzdGF0aWMgU2JTdHJpbmcgaW5zdGFuY2VQcmVmaXg7
CgoKCiAgICBzdGF0aWMgdWludDMyX3QgY3VycmVudFdyaXRlQ291bnRlcjsKCgogICAgaW50IHJl
ZkNvdW50OwoKCiAgICBTb0F1ZGl0b3JMaXN0IGF1ZGl0b3JzOwoKCiAgICBzdHJ1Y3QgewoKCgog
ICAgICAgIHVuc2lnbmVkIGludCB3cml0ZUNvdW50ZXIgOiAyOTsKCgogICAgICAgIHVuc2lnbmVk
IGludCBoYXNOYW1lIDogMTsKCgoKICAgICAgICB1bnNpZ25lZCBpbnQgbXVsdFdyaXRlUmVmIDog
MTsKCgoKICAgICAgICB1bnNpZ25lZCBpbnQgd3JpdGVSZWZGcm9tRmllbGQgOiAxOwoKICAgIH0g
d3JpdGVTdHVmZjsKCgogICAgdm9pZCB3cml0ZURlZihTb091dHB1dCAqLCBpbnQpIGNvbnN0Owog
ICAgdm9pZCB3cml0ZVJlZihTb091dHB1dCAqLCBpbnQpIGNvbnN0OwogICAgdm9pZCB3cml0ZUFu
bm90YXRpb24oU29PdXRwdXQgKikgY29uc3Q7CgoKICAgIHN0YXRpYyBTYkJvb2wgcmVhZFJlZmVy
ZW5jZShTb0lucHV0ICppbiwgU29CYXNlIComYmFzZSk7CiAgICBzdGF0aWMgU2JCb29sIHJlYWRC
YXNlKFNvSW5wdXQgKmluLCBTYk5hbWUgJmNsYXNzTmFtZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU29CYXNlIComYmFzZSk7CiAgICBzdGF0aWMgU2JCb29sIHJlYWRCYXNlSW5z
dGFuY2UoU29JbnB1dCAqaW4sIGNvbnN0IFNiTmFtZSAmY2xhc3NOYW1lLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNiTmFtZSAmcmVmTmFtZSwgU29CYXNl
IComYmFzZSk7CiAgICBzdGF0aWMgU29CYXNlICpjcmVhdGVJbnN0YW5jZShTb0lucHV0ICppbiwg
U2JOYW1lIGNsYXNzTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHNob3J0IGlvRmxhZ3MpOwogICAgc3RhdGljIHZvaWQgZmx1c2hJbnB1dChTb0lu
cHV0ICppbik7CgoKCgoKICAgIHN0YXRpYyBTYkRpY3QgKm5hbWVPYmpEaWN0OwoKCgogICAgc3Rh
dGljIFNiRGljdCAqb2JqTmFtZURpY3Q7Cn07CiMgNjQgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRh
YmFzZS9pbmNsdWRlL0ludmVudG9yL2ZpZWxkcy9Tb0ZpZWxkQ29udGFpbmVyLmgiIDIKIyA3NSAi
Li4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZmllbGRzL1NvRmll
bGRDb250YWluZXIuaCIKY2xhc3MgU2JEaWN0OwpjbGFzcyBTb0ZpZWxkRGF0YTsKY2xhc3MgU29G
aWVsZExpc3Q7CgoKY2xhc3MgU29GaWVsZENvbnRhaW5lciA6IHB1YmxpYyBTb0Jhc2UgewoKICBw
dWJsaWM6CgoKICAgIHN0YXRpYyBTb1R5cGUgZ2V0Q2xhc3NUeXBlSWQoKSB7IHJldHVybiBjbGFz
c1R5cGVJZDsgfQoKCgogICAgdm9pZCBzZXRUb0RlZmF1bHRzKCk7CgoKCgogICAgU2JCb29sIGhh
c0RlZmF1bHRWYWx1ZXMoKSBjb25zdDsKCgoKCiAgICBTYkJvb2wgZmllbGRzQXJlRXF1YWwoY29u
c3QgU29GaWVsZENvbnRhaW5lciAqZmMpIGNvbnN0OwoKCgoKCgogICAgdm9pZCBjb3B5RmllbGRW
YWx1ZXMoY29uc3QgU29GaWVsZENvbnRhaW5lciAqZmMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTYkJvb2wgY29weUNvbm5lY3Rpb25zID0gMCk7CgoKCgogICAgU2JC
b29sIHNldChjb25zdCBjaGFyICpmaWVsZERhdGFTdHJpbmcpCiAgICAgICAgeyByZXR1cm4gc2V0
KGZpZWxkRGF0YVN0cmluZywgX19udWxsKTsgfQoKCgogICAgdm9pZCBnZXQoU2JTdHJpbmcgJmZp
ZWxkRGF0YVN0cmluZykKICAgICAgICB7IGdldChmaWVsZERhdGFTdHJpbmcsIF9fbnVsbCk7IH0K
CgoKCgoKCiAgICB2aXJ0dWFsIGludCBnZXRGaWVsZHMoU29GaWVsZExpc3QgJmxpc3QpIGNvbnN0
OwoKCgoKICAgIHZpcnR1YWwgU29GaWVsZCAqIGdldEZpZWxkKGNvbnN0IFNiTmFtZSAmZmllbGRO
YW1lKSBjb25zdDsKCgoKCiAgICBTYkJvb2wgZ2V0RmllbGROYW1lKGNvbnN0IFNvRmllbGQgKmZp
ZWxkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JOYW1lICZmaWVsZE5h
bWUpIGNvbnN0OwoKCgoKCiAgICBTYkJvb2wgZW5hYmxlTm90aWZ5KFNiQm9vbCBmbGFnKQogICAg
ICAgIHsgU2JCb29sIGUgPSBub3RpZnlFbmFibGVkOyBub3RpZnlFbmFibGVkID0gZmxhZzsgcmV0
dXJuIGU7IH0KICAgIFNiQm9vbCBpc05vdGlmeUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBub3Rp
ZnlFbmFibGVkOyB9CgogIHB1YmxpYzoKCiAgICBzdGF0aWMgdm9pZCBpbml0Q2xhc3MoKTsKCgoK
ICAgIFNiQm9vbCBzZXQoY29uc3QgY2hhciAqZmllbGREYXRhU3RyaW5nLCBTb0lucHV0ICpkaWN0
SW4pOwogICAgdm9pZCBnZXQoU2JTdHJpbmcgJmZpZWxkRGF0YVN0cmluZywgU29PdXRwdXQgKmRp
Y3RPdXQpOwoKCiAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5KFNvTm90TGlzdCAqKTsKCgoKCiAgICB2
aXJ0dWFsIHZvaWQgYWRkV3JpdGVSZWZlcmVuY2UoU29PdXRwdXQgKm91dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JCb29sIGlzRnJvbUZpZWxkID0gMCk7CgoK
ICAgIHZpcnR1YWwgdm9pZCB3cml0ZUluc3RhbmNlKFNvT3V0cHV0ICpvdXQpOwoKCgogICAgU2JC
b29sIGdldElzQnVpbHRJbigpIGNvbnN0IHsgcmV0dXJuIGlzQnVpbHRJbjsgfQoKCgogICAgdmly
dHVhbCBjb25zdCBTb0ZpZWxkRGF0YSAqIGdldEZpZWxkRGF0YSgpIGNvbnN0OwojIDE4NCAiLi4v
Li4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZmllbGRzL1NvRmllbGRD
b250YWluZXIuaCIKICAgIHN0YXRpYyB2b2lkIGluaXRDb3B5RGljdCgpOwoKCiAgICBzdGF0aWMg
dm9pZCBhZGRDb3B5KGNvbnN0IFNvRmllbGRDb250YWluZXIgKm9yaWcsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTb0ZpZWxkQ29udGFpbmVyICpjb3B5KTsK
CgoKCiAgICBzdGF0aWMgU29GaWVsZENvbnRhaW5lciAqIGNoZWNrQ29weShjb25zdCBTb0ZpZWxk
Q29udGFpbmVyICpvcmlnKTsKCgoKCgogICAgc3RhdGljIFNvRmllbGRDb250YWluZXIgKiBmaW5k
Q29weShjb25zdCBTb0ZpZWxkQ29udGFpbmVyICpvcmlnLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNiQm9vbCBjb3B5Q29ubmVjdGlvbnMpOwoKCiAgICBzdGF0aWMg
dm9pZCBjb3B5RG9uZSgpOwoKCgoKCgogICAgdmlydHVhbCB2b2lkIGNvcHlDb250ZW50cyhjb25z
dCBTb0ZpZWxkQ29udGFpbmVyICpmcm9tRkMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNiQm9vbCBjb3B5Q29ubmVjdGlvbnMpOwoKCgoKCgogICAgdmlydHVh
bCBTb0ZpZWxkQ29udGFpbmVyICogY29weVRocm91Z2hDb25uZWN0aW9uKCkgY29uc3Q7CgogIHBy
b3RlY3RlZDoKCgoKICAgIFNiQm9vbCBpc0J1aWx0SW47CgogICAgU29GaWVsZENvbnRhaW5lcigp
OwogICAgflNvRmllbGRDb250YWluZXIoKTsKCgogICAgdmlydHVhbCBTYkJvb2wgcmVhZEluc3Rh
bmNlKFNvSW5wdXQgKmluLCB1bnNpZ25lZCBzaG9ydCBmbGFncyk7CgogIHByaXZhdGU6CiAgICBz
dGF0aWMgU29UeXBlIGNsYXNzVHlwZUlkOwogICAgU2JCb29sIG5vdGlmeUVuYWJsZWQ7CgoKCiAg
ICBzdGF0aWMgU2JQTGlzdCAqY29weURpY3RMaXN0OwoKCgogICAgc3RhdGljIHZvaWQgdW5yZWZD
b3B5KHVuc2lnbmVkIGxvbmcga2V5LCB2b2lkICppbnN0UHRyKTsKCgoKICAgIHN0YXRpYyBjaGFy
ICpmaWVsZEJ1ZjsKICAgIHN0YXRpYyBpbnQgZmllbGRCdWZTaXplOwoKCgogICAgc3RhdGljIHZv
aWQgKiByZWFsbG9jRmllbGRCdWYodm9pZCAqcHRyLCBzaXplX3QgbmV3U2l6ZSk7Cn07CiMgNjEg
Ii4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2VuZ2luZXMvU29F
bmdpbmUuaCIgMgojIDEgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVu
dG9yL1NvTGlzdHMuaCIgMQojIDc3ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVk
ZS9JbnZlbnRvci9Tb0xpc3RzLmgiCmNsYXNzIFNvQmFzZTsKY2xhc3MgU29EZXRhaWw7CmNsYXNz
IFNvRW5naW5lOwpjbGFzcyBTb0VuZ2luZU91dHB1dDsKY2xhc3MgU29GaWVsZDsKY2xhc3MgU29O
b2RlOwpjbGFzcyBTb1BhdGg7CmNsYXNzIFNvUGlja2VkUG9pbnQ7CiMgMTAzICIuLi8uLi8uLi8u
Li8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9Tb0xpc3RzLmgiCmNsYXNzIFNvQmFz
ZUxpc3QgOiBwdWJsaWMgU2JQTGlzdCB7CiAgcHVibGljOgogICAgU29CYXNlTGlzdCgpOwoKICAg
IFNvQmFzZUxpc3QoaW50IHNpemUpOwoKICAgIFNvQmFzZUxpc3QoY29uc3QgU29CYXNlTGlzdCAm
bCk7CgogICAgflNvQmFzZUxpc3QoKSB7IHRydW5jYXRlKDApOyB9CgoKICAgIHZvaWQgYXBwZW5k
KFNvQmFzZSAqIHB0cik7CgoKICAgIHZvaWQgaW5zZXJ0KFNvQmFzZSAqcHRyLCBpbnQgYWRkQmVm
b3JlKTsKCgogICAgdm9pZCByZW1vdmUoaW50IHdoaWNoKTsKCgogICAgdm9pZCB0cnVuY2F0ZShp
bnQgc3RhcnQpOwoKCiAgICB2b2lkIGNvcHkoY29uc3QgU29CYXNlTGlzdCAmbCk7CgogICAgU29C
YXNlTGlzdCAmIG9wZXJhdG9yID0oY29uc3QgU29CYXNlTGlzdCAmbCkKICAgICAgICB7IGNvcHko
bCkgOyByZXR1cm4gKnRoaXM7IH0KCgoKICAgIFNvQmFzZSAqIG9wZXJhdG9yIFtdKGludCBpKSBj
b25zdAogICAgICAgIHsgcmV0dXJuICggKFNvQmFzZSAqKSAoICgqKGNvbnN0IFNiUExpc3QgKikg
dGhpcykgW2ldICkgKTsgfQoKCiAgICB2b2lkIHNldChpbnQgaSwgU29CYXNlICpwdHIpOwoKCgog
ICAgdm9pZCBhZGRSZWZlcmVuY2VzKFNiQm9vbCBmbGFnKSB7IGFkZFJlZnMgPSBmbGFnOyB9Cgog
IHByaXZhdGU6CgogICAgU2JCb29sIGFkZFJlZnM7Cn07CgpjbGFzcyBTb05vZGVMaXN0IDogcHVi
bGljIFNvQmFzZUxpc3QgewogIHB1YmxpYzoKICAgIFNvTm9kZUxpc3QoKSA6IFNvQmFzZUxpc3Qo
KSB7fQoKICAgIFNvTm9kZUxpc3QoaW50IHNpemUpIDogU29CYXNlTGlzdChzaXplKSB7fQoKICAg
IFNvTm9kZUxpc3QoY29uc3QgU29Ob2RlTGlzdCAmbCkgOiBTb0Jhc2VMaXN0KGwpIHt9CgogICAg
flNvTm9kZUxpc3QoKSB7IH0KCiAgICB2b2lkIGFwcGVuZChTb05vZGUgKiBwdHIpCiAgICAgICAg
eyAoKFNvQmFzZUxpc3QgKikgdGhpcyktPmFwcGVuZCgoU29CYXNlICopIHB0cik7IH0KCiAgICBT
b05vZGVMaXN0ICYgb3BlcmF0b3IgPShjb25zdCBTb05vZGVMaXN0ICZsKQogICAgICAgIHsgU29C
YXNlTGlzdDo6Y29weShsKSA7IHJldHVybiAqdGhpczsgfQoKICAgIFNvTm9kZSAqIG9wZXJhdG9y
IFtdKGludCBpKSBjb25zdAogICAgICAgIHsgcmV0dXJuICggKFNvTm9kZSAqKSAoICgqKGNvbnN0
IFNvQmFzZUxpc3QgKikgdGhpcykgW2ldICkgKTsgfQp9OwoKY2xhc3MgU29QYXRoTGlzdCA6IHB1
YmxpYyBTb0Jhc2VMaXN0IHsKICBwdWJsaWM6CiAgICBTb1BhdGhMaXN0KCkgOiBTb0Jhc2VMaXN0
KCkge30KCiAgICBTb1BhdGhMaXN0KGludCBzaXplKSA6IFNvQmFzZUxpc3Qoc2l6ZSkge30KCiAg
ICBTb1BhdGhMaXN0KGNvbnN0IFNvUGF0aExpc3QgJmwpIDogU29CYXNlTGlzdChsKSB7fQoKICAg
IH5Tb1BhdGhMaXN0KCkgeyB9CgogICAgdm9pZCBhcHBlbmQoU29QYXRoICogcHRyKQogICAgICAg
IHsgKChTb0Jhc2VMaXN0ICopIHRoaXMpLT5hcHBlbmQoKFNvQmFzZSAqKSBwdHIpOyB9CgogICAg
U29QYXRoTGlzdCAmIG9wZXJhdG9yID0oY29uc3QgU29QYXRoTGlzdCAmbCkKICAgICAgICB7IFNv
QmFzZUxpc3Q6OmNvcHkobCkgOyByZXR1cm4gKnRoaXM7IH0KCiAgICBTb1BhdGggKiBvcGVyYXRv
ciBbXShpbnQgaSkgY29uc3QKICAgICAgICB7IHJldHVybiAoIChTb1BhdGggKikgKCAoKihjb25z
dCBTb0Jhc2VMaXN0ICopIHRoaXMpIFtpXSApICk7IH0KCgogICAgaW50IGZpbmRQYXRoKGNvbnN0
IFNvUGF0aCAmcGF0aCk7CgoKCiAgICB2b2lkIHNvcnQoKTsKCgoKICAgIHZvaWQgdW5pcXVpZnko
KTsKCiAgcHJpdmF0ZToKCiAgICBzdGF0aWMgaW50IGNvbXBhcmVQYXRocyhjb25zdCB2b2lkICpw
MVB0ciwgY29uc3Qgdm9pZCAqcDJQdHIpOwp9OwoKY2xhc3MgU29FbmdpbmVMaXN0IDogcHVibGlj
IFNvQmFzZUxpc3QgewogIHB1YmxpYzoKICAgIFNvRW5naW5lTGlzdCgpIDogU29CYXNlTGlzdCgp
IHt9CgogICAgU29FbmdpbmVMaXN0KGludCBzaXplKSA6IFNvQmFzZUxpc3Qoc2l6ZSkge30KCiAg
ICBTb0VuZ2luZUxpc3QoY29uc3QgU29FbmdpbmVMaXN0ICZsKSA6IFNvQmFzZUxpc3QobCkge30K
CiAgICB+U29FbmdpbmVMaXN0KCkgeyB9CgogICAgdm9pZCBhcHBlbmQoU29FbmdpbmUgKiBwdHIp
CiAgICAgICAgeyAoKFNvQmFzZUxpc3QgKikgdGhpcyktPmFwcGVuZCgoU29CYXNlICopIHB0cik7
IH0KCiAgICBTb0VuZ2luZUxpc3QgJiBvcGVyYXRvciA9KGNvbnN0IFNvRW5naW5lTGlzdCAmbCkK
ICAgICAgICB7IFNvQmFzZUxpc3Q6OmNvcHkobCkgOyByZXR1cm4gKnRoaXM7IH0KCiAgICBTb0Vu
Z2luZSAqIG9wZXJhdG9yIFtdKGludCBpKSBjb25zdAogICAgICAgIHsgcmV0dXJuICggKFNvRW5n
aW5lICopICggKCooY29uc3QgU29CYXNlTGlzdCAqKSB0aGlzKSBbaV0gKSApOyB9Cn07CgpjbGFz
cyBTb1R5cGVMaXN0IDogcHVibGljIFNiUExpc3QgewogIHB1YmxpYzoKICAgIFNvVHlwZUxpc3Qo
KSA6IFNiUExpc3QoKSB7fQoKICAgIFNvVHlwZUxpc3QoaW50IHNpemUpIDogU2JQTGlzdChzaXpl
KSB7fQoKICAgIFNvVHlwZUxpc3QoY29uc3QgU29UeXBlTGlzdCAmbCkgOiBTYlBMaXN0KGwpIHt9
CgogICAgflNvVHlwZUxpc3QoKSB7IHRydW5jYXRlKDApOyB9CgoKICAgIHZvaWQgYXBwZW5kKFNv
VHlwZSB0eXBlSWQpOwoKCiAgICBpbnQgZmluZChTb1R5cGUgdHlwZUlkKSBjb25zdDsKCgogICAg
dm9pZCBpbnNlcnQoU29UeXBlIHR5cGVJZCwgaW50IGFkZEJlZm9yZSk7CgoKICAgIFNvVHlwZSBv
cGVyYXRvciBbXShpbnQgaSkgY29uc3Q7CgoKICAgIHZvaWQgc2V0KGludCBpLCBTb1R5cGUgdHlw
ZUlkKTsKfTsKCgpjbGFzcyBTb0RldGFpbExpc3QgOiBwdWJsaWMgU2JQTGlzdCB7CiAgcHVibGlj
OgogICAgU29EZXRhaWxMaXN0KCkgOiBTYlBMaXN0KCkge30KCiAgICBTb0RldGFpbExpc3QoaW50
IHNpemUpIDogU2JQTGlzdChzaXplKSB7fQoKICAgIFNvRGV0YWlsTGlzdChjb25zdCBTb0RldGFp
bExpc3QgJmwpOwoKICAgIH5Tb0RldGFpbExpc3QoKSB7IHRydW5jYXRlKDApOyB9CgoKICAgIHZv
aWQgYXBwZW5kKFNvRGV0YWlsICpkZXRhaWwpCiAgICAgICAgeyBTYlBMaXN0OjphcHBlbmQoKHZv
aWQgKikgZGV0YWlsKTsgfQoKCiAgICB2b2lkIGluc2VydChTb0RldGFpbCAqZGV0YWlsLCBpbnQg
YWRkQmVmb3JlKQogICAgICAgIHsgU2JQTGlzdDo6aW5zZXJ0KCh2b2lkICopIGRldGFpbCwgYWRk
QmVmb3JlKTsgfQoKCgogICAgdm9pZCB0cnVuY2F0ZShpbnQgc3RhcnQpOwoKCiAgICB2b2lkIGNv
cHkoY29uc3QgU29EZXRhaWxMaXN0ICZsKTsKCiAgICBTb0RldGFpbExpc3QgJiBvcGVyYXRvciA9
KGNvbnN0IFNvRGV0YWlsTGlzdCAmbCkKICAgICAgICB7IGNvcHkobCkgOyByZXR1cm4gKnRoaXM7
IH0KCgoKICAgIFNvRGV0YWlsICogb3BlcmF0b3IgW10oaW50IGkpIGNvbnN0CiAgICAgICAgeyBy
ZXR1cm4gKCAoU29EZXRhaWwgKikgKCAoKiAoY29uc3QgU2JQTGlzdCAqKSB0aGlzKSBbaV0gKSAp
OyB9CgoKICAgIHZvaWQgc2V0KGludCBpLCBTb0RldGFpbCAqZGV0YWlsKTsKfTsKCgpjbGFzcyBT
b1BpY2tlZFBvaW50TGlzdCA6IHB1YmxpYyBTYlBMaXN0IHsKICBwdWJsaWM6CiAgICBTb1BpY2tl
ZFBvaW50TGlzdCgpIDogU2JQTGlzdCgpIHt9CgogICAgU29QaWNrZWRQb2ludExpc3QoaW50IHNp
emUpIDogU2JQTGlzdChzaXplKSB7fQoKICAgIFNvUGlja2VkUG9pbnRMaXN0KGNvbnN0IFNvUGlj
a2VkUG9pbnRMaXN0ICZsKTsKCiAgICB+U29QaWNrZWRQb2ludExpc3QoKSB7IHRydW5jYXRlKDAp
OyB9CgoKICAgIHZvaWQgYXBwZW5kKFNvUGlja2VkUG9pbnQgKnBpY2tlZFBvaW50KQogICAgICAg
IHsgU2JQTGlzdDo6YXBwZW5kKCh2b2lkICopIHBpY2tlZFBvaW50KTsgfQoKCiAgICB2b2lkIGlu
c2VydChTb1BpY2tlZFBvaW50ICpwaWNrZWRQb2ludCwgaW50IGFkZEJlZm9yZSkKICAgICAgICB7
IFNiUExpc3Q6Omluc2VydCgodm9pZCAqKSBwaWNrZWRQb2ludCwgYWRkQmVmb3JlKTsgfQoKCgog
ICAgdm9pZCB0cnVuY2F0ZShpbnQgc3RhcnQpOwoKCiAgICBTb1BpY2tlZFBvaW50ICogb3BlcmF0
b3IgW10oaW50IGkpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gKCAoU29QaWNrZWRQb2ludCAqKSAo
ICgqIChjb25zdCBTYlBMaXN0ICopIHRoaXMpIFtpXSApICk7IH0KCgogICAgdm9pZCBzZXQoaW50
IGksIFNvUGlja2VkUG9pbnQgKnBpY2tlZFBvaW50KTsKfTsKCmNsYXNzIFNvRmllbGRMaXN0IDog
cHVibGljIFNiUExpc3QgewogIHB1YmxpYzoKICAgIFNvRmllbGRMaXN0KCkgOiBTYlBMaXN0KCkg
e30KCiAgICBTb0ZpZWxkTGlzdChpbnQgc2l6ZSkgOiBTYlBMaXN0KHNpemUpIHt9CgogICAgU29G
aWVsZExpc3QoY29uc3QgU29GaWVsZExpc3QgJmwpIDogU2JQTGlzdChsKSB7fQoKICAgIH5Tb0Zp
ZWxkTGlzdCgpIHsgdHJ1bmNhdGUoMCk7IH0KCgogICAgdm9pZCBhcHBlbmQoU29GaWVsZCAqZmll
bGQpCiAgICAgICAgeyBTYlBMaXN0OjphcHBlbmQoKHZvaWQgKikgZmllbGQpOyB9CgoKICAgIHZv
aWQgaW5zZXJ0KFNvRmllbGQgKmZpZWxkLCBpbnQgYWRkQmVmb3JlKQogICAgICAgIHsgU2JQTGlz
dDo6aW5zZXJ0KCh2b2lkICopIGZpZWxkLCBhZGRCZWZvcmUpOyB9CgoKICAgIFNvRmllbGQgKiBv
cGVyYXRvciBbXShpbnQgaSkgY29uc3QKICAgICAgICB7IHJldHVybiAoIChTb0ZpZWxkICopICgg
KCogKGNvbnN0IFNiUExpc3QgKikgdGhpcykgW2ldICkgKTsgfQoKCiAgICB2b2lkIHNldChpbnQg
aSwgU29GaWVsZCAqRmllbGQpCiAgICAgICAgeyAoKiAoY29uc3QgU2JQTGlzdCAqKSB0aGlzKSBb
aV0gPSAodm9pZCAqKSBGaWVsZDsgfQoKCiAgcHVibGljOgogICAgU29GaWVsZCAqIGdldChpbnQg
aSkgY29uc3QKICAgICAgICB7IHJldHVybiAoU29GaWVsZCAqKVNiUExpc3Q6OmdldChpKTsgfQp9
OwoKY2xhc3MgU29FbmdpbmVPdXRwdXRMaXN0IDogcHVibGljIFNiUExpc3QgewogIHB1YmxpYzoK
ICAgIFNvRW5naW5lT3V0cHV0TGlzdCgpIDogU2JQTGlzdCgpIHt9CgogICAgU29FbmdpbmVPdXRw
dXRMaXN0KGludCBzaXplKSA6IFNiUExpc3Qoc2l6ZSkge30KCiAgICBTb0VuZ2luZU91dHB1dExp
c3QoY29uc3QgU29FbmdpbmVPdXRwdXRMaXN0ICZsKSA6IFNiUExpc3QobCkge30KCiAgICB+U29F
bmdpbmVPdXRwdXRMaXN0KCkgeyB0cnVuY2F0ZSgwKTsgfQoKCiAgICB2b2lkIGFwcGVuZChTb0Vu
Z2luZU91dHB1dCAqZW5naW5lT3V0cHV0KQogICAgICAgIHsgU2JQTGlzdDo6YXBwZW5kKCh2b2lk
ICopIGVuZ2luZU91dHB1dCk7IH0KCgogICAgdm9pZCBpbnNlcnQoU29FbmdpbmVPdXRwdXQgKmVu
Z2luZU91dHB1dCwgaW50IGFkZEJlZm9yZSkKICAgICAgICB7IFNiUExpc3Q6Omluc2VydCgodm9p
ZCAqKSBlbmdpbmVPdXRwdXQsIGFkZEJlZm9yZSk7IH0KCgogICAgU29FbmdpbmVPdXRwdXQgKiBv
cGVyYXRvciBbXShpbnQgaSkgY29uc3QKICAgICAgICB7IHJldHVybiAoIChTb0VuZ2luZU91dHB1
dCAqKSAoICgqIChjb25zdCBTYlBMaXN0ICopIHRoaXMpIFtpXSApICk7IH0KCgogICAgdm9pZCBz
ZXQoaW50IGksIFNvRW5naW5lT3V0cHV0ICplbmdpbmVPdXRwdXQpCiAgICAgICAgeyAoKiAoY29u
c3QgU2JQTGlzdCAqKSB0aGlzKSBbaV0gPSAodm9pZCAqKSBlbmdpbmVPdXRwdXQ7IH0KfTsKIyA2
MiAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZW5naW5lcy9T
b0VuZ2luZS5oIiAyCiMgNzUgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0lu
dmVudG9yL2VuZ2luZXMvU29FbmdpbmUuaCIKY2xhc3MgU29GaWVsZERhdGE7CmNsYXNzIFNvRW5n
aW5lTGlzdDsKY2xhc3MgU29FbmdpbmVPdXRwdXQ7CmNsYXNzIFNvRW5naW5lT3V0cHV0TGlzdDsK
Y2xhc3MgU29FbmdpbmVPdXRwdXREYXRhOwpjbGFzcyBTb0ZpZWxkOwpjbGFzcyBTb091dHB1dDsK
Y2xhc3MgU29JbnB1dDsKCmNsYXNzIFNvRW5naW5lIDogcHVibGljIFNvRmllbGRDb250YWluZXIg
ewoKICBwdWJsaWM6CgoKCiAgICBzdGF0aWMgU29UeXBlIGdldENsYXNzVHlwZUlkKCkgeyByZXR1
cm4gY2xhc3NUeXBlSWQ7IH0KCgoKCgoKCiAgICB2aXJ0dWFsIGludCBnZXRPdXRwdXRzKFNvRW5n
aW5lT3V0cHV0TGlzdCAmbGlzdCkgY29uc3Q7CgoKCgogICAgU29FbmdpbmVPdXRwdXQgKiBnZXRP
dXRwdXQoY29uc3QgU2JOYW1lICZvdXRwdXROYW1lKSBjb25zdDsKCgoKCgogICAgU2JCb29sIGdl
dE91dHB1dE5hbWUoY29uc3QgU29FbmdpbmVPdXRwdXQgKm91dHB1dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNiTmFtZSAmb3V0cHV0TmFtZSkgY29uc3Q7CgoKCgogICAg
U29FbmdpbmUgKiBjb3B5KCkgY29uc3Q7CgoKCgogICAgc3RhdGljIFNvRW5naW5lICogZ2V0QnlO
YW1lKGNvbnN0IFNiTmFtZSAmbmFtZSk7CgogICAgc3RhdGljIGludCBnZXRCeU5hbWUoY29uc3Qg
U2JOYW1lICZuYW1lLCBTb0VuZ2luZUxpc3QgJmxpc3QpOwoKICBwcm90ZWN0ZWQ6CgoKICAgIHZp
cnR1YWwgdm9pZCBldmFsdWF0ZSgpID0gMDsKCiAgcHVibGljOgoKCiAgICB2b2lkIGV2YWx1YXRl
V3JhcHBlcigpOwoKCiAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5KFNvTm90TGlzdCAqbGlzdCk7CgoK
ICAgIHN0YXRpYyB2b2lkIGluaXRDbGFzcygpOwoKCiAgICB2aXJ0dWFsIGNvbnN0IFNvRW5naW5l
T3V0cHV0RGF0YSAqZ2V0T3V0cHV0RGF0YSgpIGNvbnN0ID0gMDsKCgogICAgc3RhdGljIHZvaWQg
aW5pdENsYXNzZXMoKTsKCgogICAgdmlydHVhbCB2b2lkIHdyaXRlSW5zdGFuY2UoU29PdXRwdXQg
Km91dCk7CgoKICAgIHZpcnR1YWwgU29GaWVsZENvbnRhaW5lciAqIGNvcHlUaHJvdWdoQ29ubmVj
dGlvbigpIGNvbnN0OwoKCgogICAgU2JCb29sIHNob3VsZENvcHkoKSBjb25zdDsKCgoKCiAgICBT
YkJvb2wgaXNOb3RpZnlpbmcoKSBjb25zdCB7IHJldHVybiBub3RpZnlpbmc7IH0KCiAgcHJvdGVj
dGVkOgoKCiAgICBTb0VuZ2luZSgpOwogICAgflNvRW5naW5lKCk7CgoKICAgIHZpcnR1YWwgU2JC
b29sIHJlYWRJbnN0YW5jZShTb0lucHV0ICppbiwgdW5zaWduZWQgc2hvcnQgZmxhZ3MpOwoKCgoK
ICAgIHZpcnR1YWwgdm9pZCBpbnB1dENoYW5nZWQoU29GaWVsZCAqd2hpY2hGaWVsZCk7CgoKCiAg
ICBzdGF0aWMgY29uc3QgU29GaWVsZERhdGEgKipnZXRJbnB1dERhdGFQdHIoKSB7IHJldHVybiBf
X251bGw7IH0KICAgIHN0YXRpYyBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKipnZXRPdXRwdXRE
YXRhUHRyKCkgeyByZXR1cm4gX19udWxsOyB9CgoKICAgIHZvaWQgd3JpdGVPdXRwdXRUeXBlcyhT
b091dHB1dCAqb3V0KTsKCiAgcHJpdmF0ZToKICAgIHN0YXRpYyBTb1R5cGUgY2xhc3NUeXBlSWQ7
CgogICAgU2JCb29sIG5lZWRzRXZhbHVhdGlvbjsKICAgIFNiQm9vbCBub3RpZnlpbmc7CmZyaWVu
ZCBjbGFzcyBTb0VuZ2luZU91dHB1dDsKfTsKIyAyMDAgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRh
YmFzZS9pbmNsdWRlL0ludmVudG9yL2VuZ2luZXMvU29FbmdpbmUuaCIKY2xhc3MgU29FbmdpbmVP
dXRwdXQgewoKICBwdWJsaWM6CgoKICAgIFNvVHlwZSBnZXRDb25uZWN0aW9uVHlwZSgpIGNvbnN0
OwoKCgoKICAgIGludCBnZXRGb3J3YXJkQ29ubmVjdGlvbnMoU29GaWVsZExpc3QgJmxpc3QpIGNv
bnN0OwoKCgoKCiAgICB2b2lkIGVuYWJsZShTYkJvb2wgZmxhZyk7CiAgICBTYkJvb2wgaXNFbmFi
bGVkKCkgY29uc3QgeyByZXR1cm4gZW5hYmxlZDsgfQoKCiAgICBTb0VuZ2luZSAqIGdldENvbnRh
aW5lcigpIGNvbnN0IHsgcmV0dXJuIGNvbnRhaW5lcjsgfQoKICBwdWJsaWM6CiAgICBTb0VuZ2lu
ZU91dHB1dCgpOwoKICAgIHZpcnR1YWwgflNvRW5naW5lT3V0cHV0KCk7CgogICAgdm9pZCBzZXRD
b250YWluZXIoU29FbmdpbmUgKmVuZykgeyBjb250YWluZXIgPSBlbmc7IH0KCgogICAgdm9pZCBh
ZGRDb25uZWN0aW9uKFNvRmllbGQgKik7CiAgICB2b2lkIHJlbW92ZUNvbm5lY3Rpb24oU29GaWVs
ZCAqKTsKCgogICAgaW50IGdldE51bUNvbm5lY3Rpb25zKCkgY29uc3QKICAgICAgICB7IHJldHVy
biBjb25uZWN0aW9ucy5nZXRMZW5ndGgoKTsgfQoKCiAgICBTb0ZpZWxkICogb3BlcmF0b3JbXShp
bnQgaSkgY29uc3QKICAgICAgICB7IHJldHVybiBjb25uZWN0aW9ucy5nZXQoaSk7IH0KCgoKCiAg
ICB2b2lkIHByZXBhcmVUb1dyaXRlKCkgY29uc3Q7CiAgICB2b2lkIGRvbmVXcml0aW5nKCkgY29u
c3Q7CgogIHByaXZhdGU6CiAgICBTYkJvb2wgZW5hYmxlZDsKICAgIFNvRmllbGRMaXN0IGNvbm5l
Y3Rpb25zOwogICAgU29FbmdpbmUgKmNvbnRhaW5lcjsKfTsKIyA5OCAiLi4vLi4vLi4vLi4vLi4v
bGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZW5naW5lcy9Tb1N1YkVuZ2luZS5oIiAyCiMg
MSAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZW5naW5lcy9T
b091dHB1dERhdGEuaCIgMQojIDY4ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVk
ZS9JbnZlbnRvci9lbmdpbmVzL1NvT3V0cHV0RGF0YS5oIgpjbGFzcyBTb0VuZ2luZTsKY2xhc3Mg
U29GaWVsZENvbnRhaW5lcjsKY2xhc3MgU29JbnB1dDsKY2xhc3MgU29PdXRwdXQ7CmNsYXNzIFNv
RW5naW5lT3V0cHV0OwojIDg4ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9J
bnZlbnRvci9lbmdpbmVzL1NvT3V0cHV0RGF0YS5oIgogY2xhc3MgU29FbmdpbmVPdXRwdXREYXRh
IHsKICBwdWJsaWM6CgogICAgU29FbmdpbmVPdXRwdXREYXRhKCkgeyB9CgogICAgU29FbmdpbmVP
dXRwdXREYXRhKGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqKTsKCgogICAgU29FbmdpbmVPdXRw
dXREYXRhKGludCBudW1PdXRwdXRzKSA6IG91dHB1dHMobnVtT3V0cHV0cykKICAgICAgICB7IH0K
CgogICAgflNvRW5naW5lT3V0cHV0RGF0YSgpOwoKCgogICAgdm9pZCBhZGRPdXRwdXQoY29uc3Qg
U29FbmdpbmUgKmRlZkVuZ2luZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIgKm91dHB1dE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTb0VuZ2luZU91dHB1dCAqb3V0cHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU29UeXBlIHR5cGUpOwoKCiAgICBpbnQgZ2V0TnVtT3V0cHV0cygpIGNvbnN0IHsgcmV0
dXJuIG91dHB1dHMuZ2V0TGVuZ3RoKCk7IH0KCgogICAgY29uc3QgU2JOYW1lICYgZ2V0T3V0cHV0
TmFtZShpbnQgaW5kZXgpIGNvbnN0OwoKCiAgICBTb0VuZ2luZU91dHB1dCAqIGdldE91dHB1dChj
b25zdCBTb0VuZ2luZSAqZW5naW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGluZGV4KSBjb25zdDsKCgoKICAgIGludCBnZXRJbmRleChjb25zdCBTb0VuZ2luZSAqZW5n
aW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTb0VuZ2luZU91dHB1
dCAqb3V0cHV0KSBjb25zdDsKCgogICAgY29uc3QgU29UeXBlICYgZ2V0VHlwZShpbnQgaW5kZXgp
IGNvbnN0OwoKCiAgICBTYkJvb2wgcmVhZERlc2NyaXB0aW9ucyhTb0lucHV0ICppbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb0VuZ2luZSAqZW5naW5lKSBjb25z
dDsKICAgIHZvaWQgd3JpdGVEZXNjcmlwdGlvbnMoU29PdXRwdXQgKm91dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb0VuZ2luZSAqZW5naW5lKSBjb25zdDsKICBw
cml2YXRlOgogICAgU2JQTGlzdCBvdXRwdXRzOwp9OwojIDk5ICIuLi8uLi8uLi8uLi8uLi9saWIv
ZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9lbmdpbmVzL1NvU3ViRW5naW5lLmgiIDIKIyAxICIu
Li8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9lcnJvcnMvU29EZWJ1
Z0Vycm9yLmgiIDEKIyA2MiAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52
ZW50b3IvZXJyb3JzL1NvRGVidWdFcnJvci5oIgojIDEgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRh
YmFzZS9pbmNsdWRlL0ludmVudG9yL2Vycm9ycy9Tb0Vycm9yLmgiIDEKIyAxMDEgIi4uLy4uLy4u
Ly4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2Vycm9ycy9Tb0Vycm9yLmgiCmNs
YXNzIFNvRXJyb3I7CgpjbGFzcyBTb0Jhc2U7CmNsYXNzIFNvRW5naW5lOwpjbGFzcyBTb05vZGU7
CmNsYXNzIFNvUGF0aDsKCgp0eXBlZGVmIHZvaWQgU29FcnJvckNCKGNvbnN0IFNvRXJyb3IgKmVy
cm9yLCB2b2lkICpkYXRhKTsKCgpjbGFzcyBTb0Vycm9yIHsKCiAgcHVibGljOgoKCiAgICBzdGF0
aWMgdm9pZCBzZXRIYW5kbGVyQ2FsbGJhY2soU29FcnJvckNCICpjYiwgdm9pZCAqZGF0YSkKICAg
ICAgICB7IGhhbmRsZXJDQiA9IGNiOyBjYkRhdGEgPSBkYXRhOyB9CgogICAgc3RhdGljIFNvRXJy
b3JDQiAqIGdldEhhbmRsZXJDYWxsYmFjaygpIHsgcmV0dXJuIGhhbmRsZXJDQjsgfQoKICAgIHN0
YXRpYyB2b2lkICogZ2V0SGFuZGxlckRhdGEoKSB7IHJldHVybiBjYkRhdGE7IH0KCgoKICAgIGNv
bnN0IFNiU3RyaW5nICYgZ2V0RGVidWdTdHJpbmcoKSBjb25zdCB7IHJldHVybiBkZWJ1Z1N0cmlu
ZzsgfQoKCiAgICBzdGF0aWMgU29UeXBlIGdldENsYXNzVHlwZUlkKCkgeyByZXR1cm4gY2xhc3NU
eXBlSWQ7IH0KCgoKICAgIHZpcnR1YWwgU29UeXBlIGdldFR5cGVJZCgpIGNvbnN0OwoKCiAgICBT
YkJvb2wgaXNPZlR5cGUoU29UeXBlIHR5cGUpIGNvbnN0OwoKICBwdWJsaWM6CgoKICAgIHN0YXRp
YyB2b2lkIHBvc3QoY29uc3QgY2hhciAqZm9ybWF0U3RyaW5nIC4uLik7CgoKCgoKCiAgICBzdGF0
aWMgU2JTdHJpbmcgZ2V0U3RyaW5nKGNvbnN0IFNvTm9kZSAqbm9kZSk7CiAgICBzdGF0aWMgU2JT
dHJpbmcgZ2V0U3RyaW5nKGNvbnN0IFNvUGF0aCAqcGF0aCk7CiAgICBzdGF0aWMgU2JTdHJpbmcg
Z2V0U3RyaW5nKGNvbnN0IFNvRW5naW5lICplbmdpbmUpOwoKICBwdWJsaWM6CgogICAgc3RhdGlj
IHZvaWQgaW5pdENsYXNzKCk7CgoKICAgIHN0YXRpYyB2b2lkIGluaXRDbGFzc2VzKCk7CgogIHBy
b3RlY3RlZDoKCiAgICBzdGF0aWMgdm9pZCBkZWZhdWx0SGFuZGxlckNCKGNvbnN0IFNvRXJyb3Ig
KmVycm9yLCB2b2lkICpkYXRhKTsKCgogICAgdmlydHVhbCBTb0Vycm9yQ0IgKiBnZXRIYW5kbGVy
KHZvaWQgKiZkYXRhKSBjb25zdDsKCgogICAgdm9pZCBzZXREZWJ1Z1N0cmluZyhjb25zdCBjaGFy
ICpzdHJpbmcpCiAgICAgICAgeyBkZWJ1Z1N0cmluZyA9IHN0cmluZzsgfQogICAgdm9pZCBhcHBl
bmRUb0RlYnVnU3RyaW5nKGNvbnN0IGNoYXIgKnN0cmluZykKICAgICAgICB7IGRlYnVnU3RyaW5n
ICs9IHN0cmluZzsgfQoKCgogICAgdm9pZCBoYW5kbGVFcnJvcigpOwoKICAgIHZpcnR1YWwgflNv
RXJyb3IoKSB7fQoKICBwcml2YXRlOgogICAgc3RhdGljIFNvVHlwZSBjbGFzc1R5cGVJZDsKICAg
IHN0YXRpYyBTb0Vycm9yQ0IgKmhhbmRsZXJDQjsKICAgIHN0YXRpYyB2b2lkICpjYkRhdGE7CiAg
ICBzdGF0aWMgU2JCb29sIHdhc0luaXR0ZWQ7CiAgICBTYlN0cmluZyBkZWJ1Z1N0cmluZzsKCgog
ICAgc3RhdGljIFNiU3RyaW5nIGdldEJhc2VTdHJpbmcoY29uc3QgU29CYXNlICpiYXNlLCBjb25z
dCBjaGFyICp3aGF0KTsKfTsKIyA2MyAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1
ZGUvSW52ZW50b3IvZXJyb3JzL1NvRGVidWdFcnJvci5oIiAyCiMgODMgIi4uLy4uLy4uLy4uLy4u
L2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2Vycm9ycy9Tb0RlYnVnRXJyb3IuaCIKY2xh
c3MgU29EZWJ1Z0Vycm9yIDogcHVibGljIFNvRXJyb3IgewoKICBwdWJsaWM6CiAgICBlbnVtIFNl
dmVyaXR5IHsKICAgICAgICBFUlJPUiwKICAgICAgICBXQVJOSU5HLAogICAgICAgIElORk8KICAg
IH07CgoKCiAgICBzdGF0aWMgdm9pZCBzZXRIYW5kbGVyQ2FsbGJhY2soU29FcnJvckNCICpjYiwg
dm9pZCAqZGF0YSkKICAgICAgICB7IGhhbmRsZXJDQiA9IGNiOyBjYkRhdGEgPSBkYXRhOyB9Cgog
ICAgc3RhdGljIFNvRXJyb3JDQiAqIGdldEhhbmRsZXJDYWxsYmFjaygpIHsgcmV0dXJuIGhhbmRs
ZXJDQjsgfQoKICAgIHN0YXRpYyB2b2lkICogZ2V0SGFuZGxlckRhdGEoKSB7IHJldHVybiBjYkRh
dGE7IH0KCgogICAgc3RhdGljIFNvVHlwZSBnZXRDbGFzc1R5cGVJZCgpIHsgcmV0dXJuIGNsYXNz
VHlwZUlkOyB9CgoKICAgIHZpcnR1YWwgU29UeXBlIGdldFR5cGVJZCgpIGNvbnN0OwoKCiAgICBT
b0RlYnVnRXJyb3I6OlNldmVyaXR5IGdldFNldmVyaXR5KCkgY29uc3QgeyByZXR1cm4gc2V2ZXJp
dHk7IH0KCiAgcHVibGljOgoKICAgIHN0YXRpYyB2b2lkIHBvc3QoY29uc3QgY2hhciAqbWV0aG9k
TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXRTdHJp
bmcgLi4uKTsKCgogICAgc3RhdGljIHZvaWQgcG9zdFdhcm5pbmcoY29uc3QgY2hhciAqbWV0aG9k
TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9y
bWF0U3RyaW5nIC4uLik7CgoKICAgIHN0YXRpYyB2b2lkIHBvc3RJbmZvKGNvbnN0IGNoYXIgKm1l
dGhvZE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZv
cm1hdFN0cmluZyAuLi4pOwoKICBwdWJsaWM6CgogICAgc3RhdGljIHZvaWQgaW5pdENsYXNzKCk7
CgogIHByb3RlY3RlZDoKCiAgICB2aXJ0dWFsIFNvRXJyb3JDQiAqIGdldEhhbmRsZXIodm9pZCAq
JmRhdGEpIGNvbnN0OwoKICAgIHZpcnR1YWwgflNvRGVidWdFcnJvcigpIHt9CgogIHByaXZhdGU6
CiAgICBzdGF0aWMgU29UeXBlIGNsYXNzVHlwZUlkOwogICAgc3RhdGljIFNvRXJyb3JDQiAqaGFu
ZGxlckNCOwogICAgc3RhdGljIHZvaWQgKmNiRGF0YTsKCiAgICBTZXZlcml0eSBzZXZlcml0eTsK
fTsKIyAxMDAgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2Vu
Z2luZXMvU29TdWJFbmdpbmUuaCIgMgojIDEgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9p
bmNsdWRlL0ludmVudG9yL2ZpZWxkcy9Tb0ZpZWxkRGF0YS5oIiAxCiMgNjYgIi4uLy4uLy4uLy4u
Ly4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2ZpZWxkcy9Tb0ZpZWxkRGF0YS5oIgpj
bGFzcyBTb0ZpZWxkOwpjbGFzcyBTb0lucHV0OwpjbGFzcyBTb0ZpZWxkQ29udGFpbmVyOwpjbGFz
cyBTb091dHB1dDsKIyA4OCAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52
ZW50b3IvZmllbGRzL1NvRmllbGREYXRhLmgiCiBjbGFzcyBTb0ZpZWxkRGF0YSB7CiAgcHVibGlj
OgoKICAgIFNvRmllbGREYXRhKCkge30KCgogICAgU29GaWVsZERhdGEoY29uc3QgU29GaWVsZERh
dGEgJik7CiAgICBTb0ZpZWxkRGF0YShjb25zdCBTb0ZpZWxkRGF0YSAqKTsKCgogICAgU29GaWVs
ZERhdGEoaW50IG51bUZpZWxkcykgOiBmaWVsZHMobnVtRmllbGRzKSB7fQoKCiAgICB+U29GaWVs
ZERhdGEoKTsKCgoKCiAgICB2b2lkIGFkZEZpZWxkKFNvRmllbGRDb250YWluZXIgKmRlZk9iamVj
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmllbGROYW1l
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTb0ZpZWxkICpmaWVsZCk7
CgoKCgogICAgdm9pZCBvdmVybGF5KFNvRmllbGRDb250YWluZXIgKnRvLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFNvRmllbGRDb250YWluZXIgKmZyb20sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU2JCb29sIGNvcHlDb25uZWN0aW9ucykgY29uc3Q7CgoK
ICAgIGludCBnZXROdW1GaWVsZHMoKSBjb25zdCB7IHJldHVybiBmaWVsZHMuZ2V0TGVuZ3RoKCk7
IH0KCgogICAgY29uc3QgU2JOYW1lICYgZ2V0RmllbGROYW1lKGludCBpbmRleCkgY29uc3Q7CgoK
ICAgIFNvRmllbGQgKiBnZXRGaWVsZChjb25zdCBTb0ZpZWxkQ29udGFpbmVyICpvYmplY3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCkgY29uc3Q7CgoKICAgIGlu
dCBnZXRJbmRleChjb25zdCBTb0ZpZWxkQ29udGFpbmVyICpmYywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgU29GaWVsZCAqZmllbGQpIGNvbnN0OwoKCiAgICB2b2lkIGFk
ZEVudW1WYWx1ZShjb25zdCBjaGFyICp0eXBlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnZhbE5hbWUsIGludCB2YWwpOwogICAgdm9pZCBnZXRF
bnVtRGF0YShjaGFyICp0eXBlTmFtZSwgaW50ICZudW0sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCAqJnZhbHMsIFNiTmFtZSAqJm5hbWVzKTsKCiAgcHVibGljOgoKCgoK
CgogICAgU2JCb29sIHJlYWQoU29JbnB1dCAqaW4sIFNvRmllbGRDb250YWluZXIgKm9iamVjdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYkJvb2wgZXJyb3JPblVua25vd25GaWVsZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYkJvb2wgJm5vdEJ1aWx0SW4pIGNvbnN0OwoK
CgoKCgoKICAgIFNiQm9vbCByZWFkKFNvSW5wdXQgKmluLCBTb0ZpZWxkQ29udGFpbmVyICpvYmpl
Y3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2JOYW1lICZmaWVsZE5hbWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JCb29sICZmb3VuZE5hbWUpIGNvbnN0OwoK
CiAgICB2b2lkIHdyaXRlKFNvT3V0cHV0ICpvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFNvRmllbGRDb250YWluZXIgKm9iamVjdCkgY29uc3Q7CgoKCiAgICB2b2lkIGNv
cHkoY29uc3QgU29GaWVsZERhdGEgKmZyb20pOwoKCgogICAgU2JCb29sIGlzU2FtZShjb25zdCBT
b0ZpZWxkQ29udGFpbmVyICpjMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFNvRmllbGRDb250YWluZXIgKmMyKSBjb25zdDsKCgogICAgU2JCb29sIHJlYWRGaWVsZERlc2Ny
aXB0aW9ucygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb0lucHV0ICppbiwgU29G
aWVsZENvbnRhaW5lciAqb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBudW1EZXNjcmlwdGlvbnNFeHBlY3RlZCkgY29uc3Q7CgoKICAgIHZvaWQgd3JpdGVGaWVsZERl
c2NyaXB0aW9ucygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb091dHB1dCAqb3V0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNvRmllbGRDb250YWluZXIg
Km9iamVjdCkgY29uc3Q7CgogIHByaXZhdGU6CgogICAgU2JCb29sIHJlYWRGaWVsZHMoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU29JbnB1dCAqaW4sIFNvRmllbGRDb250YWluZXIg
Km9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtRmllbGRzV3Jp
dHRlbikgY29uc3Q7CgogICAgU2JQTGlzdCBmaWVsZHM7CiAgICBTYlBMaXN0IGVudW1zOwp9Owoj
IDEwMSAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZW5naW5l
cy9Tb1N1YkVuZ2luZS5oIiAyCiMgNjMgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNs
dWRlL0ludmVudG9yL2VuZ2luZXMvU29Cb29sT3BlcmF0aW9uLmgiIDIKIyAxICIuLi8uLi8uLi8u
Li8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9maWVsZHMvU29NRkVudW0uaCIgMQoj
IDY3ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9maWVsZHMv
U29NRkVudW0uaCIKIyAxICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZl
bnRvci9maWVsZHMvU29TdWJGaWVsZC5oIiAxCiMgMTI5ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0
YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9maWVsZHMvU29TdWJGaWVsZC5oIgojIDEgIi4uLy4uLy4u
Ly4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2ZpZWxkcy9Tb0ZpZWxkLmgiIDEK
IyA2MyAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZmllbGRz
L1NvRmllbGQuaCIKY2xhc3MgU29FbmdpbmVPdXRwdXQ7CmNsYXNzIFNvRmllbGRDb250YWluZXI7
CmNsYXNzIFNvRmllbGRBdWRpdG9ySW5mbzsKY2xhc3MgU29GaWVsZENvbnZlcnRlcjsKY2xhc3Mg
U29GaWVsZExpc3Q7CmNsYXNzIFNvSW5wdXQ7CmNsYXNzIFNvTm90TGlzdDsKY2xhc3MgU29PdXRw
dXQ7CiMgODIgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2Zp
ZWxkcy9Tb0ZpZWxkLmgiCmNsYXNzIFNvRmllbGQgewogIHB1YmxpYzoKCgogICAgdmlydHVhbCB+
U29GaWVsZCgpOwoKCiAgICB2b2lkIHNldElnbm9yZWQoU2JCb29sIGlnKTsKICAgIFNiQm9vbCBp
c0lnbm9yZWQoKSBjb25zdCB7IHJldHVybiBmbGFncy5pZ25vcmVkOyB9CgoKCiAgICBTYkJvb2wg
aXNEZWZhdWx0KCkgY29uc3QgeyByZXR1cm4gZmxhZ3MuaGFzRGVmYXVsdDsgfQoKCgogICAgc3Rh
dGljIFNvVHlwZSBnZXRDbGFzc1R5cGVJZCgpIHsgcmV0dXJuIGNsYXNzVHlwZUlkOyB9CgoKCiAg
ICB2aXJ0dWFsIFNvVHlwZSBnZXRUeXBlSWQoKSBjb25zdCA9IDA7CgoKICAgIFNiQm9vbCBpc09m
VHlwZShTb1R5cGUgdHlwZSkgY29uc3Q7CgoKCgoKCiAgICB2b2lkIGVuYWJsZUNvbm5lY3Rpb24o
U2JCb29sIGZsYWcpOwoKICAgIFNiQm9vbCBpc0Nvbm5lY3Rpb25FbmFibGVkKCkgY29uc3QKICAg
ICAgICB7IHJldHVybiBmbGFncy5jb25uZWN0aW9uRW5hYmxlZDsgfQoKCgoKICAgIFNiQm9vbCBj
b25uZWN0RnJvbShTb0VuZ2luZU91dHB1dCAqZW5naW5lT3V0cHV0KTsKCiAgICBTYkJvb2wgY29u
bmVjdEZyb20oU29GaWVsZCAqZmllbGQpOwoKCgoKICAgIHZvaWQgZGlzY29ubmVjdCgpOwoKCgoK
CiAgICBTYkJvb2wgaXNDb25uZWN0ZWQoKSBjb25zdCB7IHJldHVybiBmbGFncy5jb25uZWN0ZWQ7
IH0KCiAgICBTYkJvb2wgaXNDb25uZWN0ZWRGcm9tRW5naW5lKCkgY29uc3QKICAgICAgICB7IHJl
dHVybiAoZmxhZ3MuY29ubmVjdGVkICYmIGZsYWdzLmZyb21FbmdpbmUpOyB9CgogICAgU2JCb29s
IGlzQ29ubmVjdGVkRnJvbUZpZWxkKCkgY29uc3QKICAgICAgICB7IHJldHVybiAoZmxhZ3MuY29u
bmVjdGVkICYmICEgZmxhZ3MuZnJvbUVuZ2luZSk7IH0KCgoKCiAgICBTYkJvb2wgZ2V0Q29ubmVj
dGVkRW5naW5lKFNvRW5naW5lT3V0cHV0IComZW5naW5lT3V0cHV0KSBjb25zdDsKCiAgICBTYkJv
b2wgZ2V0Q29ubmVjdGVkRmllbGQoU29GaWVsZCAqJmZpZWxkKSBjb25zdDsKCgoKCgogICAgaW50
IGdldEZvcndhcmRDb25uZWN0aW9ucyhTb0ZpZWxkTGlzdCAmbGlzdCkgY29uc3Q7CgoKICAgIFNv
RmllbGRDb250YWluZXIgKiBnZXRDb250YWluZXIoKSBjb25zdDsKCgoKCgogICAgU2JCb29sIHNl
dChjb25zdCBjaGFyICp2YWx1ZVN0cmluZyk7CgoKCgogICAgdm9pZCBnZXQoU2JTdHJpbmcgJnZh
bHVlU3RyaW5nKTsKCgoKCgogICAgdmlydHVhbCB2b2lkIHRvdWNoKCk7CgoKCiAgICBpbnQgb3Bl
cmF0b3IgPT0oY29uc3QgU29GaWVsZCAmZikgY29uc3QKICAgICAgICB7IHJldHVybiBpc1NhbWUo
Zik7IH0KICAgIGludCBvcGVyYXRvciAhPShjb25zdCBTb0ZpZWxkICZmKSBjb25zdAogICAgICAg
IHsgcmV0dXJuICEgaXNTYW1lKGYpOyB9CgogIHByb3RlY3RlZDoKCiAgICBTb0ZpZWxkKCk7Cgog
IHB1YmxpYzoKICAgIHN0YXRpYyB2b2lkIGluaXRDbGFzcygpOwoKCiAgICBzdGF0aWMgdm9pZCBp
bml0Q2xhc3NlcygpOwoKCiAgICB2b2lkIHNldERlZmF1bHQoU2JCb29sIGRlZikgeyBmbGFncy5o
YXNEZWZhdWx0ID0gZGVmOyB9CgoKICAgIHZpcnR1YWwgdm9pZCBzdGFydE5vdGlmeSgpOwogICAg
dmlydHVhbCB2b2lkIG5vdGlmeShTb05vdExpc3QgKmxpc3QpOwoKCgogICAgdm9pZCBzZXRDb250
YWluZXIoU29GaWVsZENvbnRhaW5lciAqY29udCk7CgoKCgogICAgU2JCb29sIHNob3VsZFdyaXRl
KCkgY29uc3Q7CgoKICAgIHZvaWQgYWRkQXVkaXRvcih2b2lkICphdWRpdG9yLCBTb05vdFJlYzo6
VHlwZSB0eXBlKTsKICAgIHZvaWQgcmVtb3ZlQXVkaXRvcih2b2lkICphdWRpdG9yLCBTb05vdFJl
Yzo6VHlwZSB0eXBlKTsKCgoKCiAgICBTYkJvb2wgZW5hYmxlTm90aWZ5KFNiQm9vbCBmbGFnKTsK
ICAgIFNiQm9vbCBpc05vdGlmeUVuYWJsZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIGZsYWdz
Lm5vdGlmeUVuYWJsZWQ7IH0KCgoKCgoKICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0aW9uU3RhdHVz
Q2hhbmdlZChpbnQgbnVtQ29ubmVjdGlvbnMpOwoKCgoKICAgIFNiQm9vbCBpc1JlYWRPbmx5KCkg
Y29uc3QgeyByZXR1cm4gZmxhZ3MucmVhZE9ubHk7IH0KCgoKCiAgICB2aXJ0dWFsIFNiQm9vbCBp
c1NhbWUoY29uc3QgU29GaWVsZCAmZikgY29uc3QgPSAwOwoKCiAgICB2aXJ0dWFsIHZvaWQgY29w
eUZyb20oY29uc3QgU29GaWVsZCAmZikgPSAwOwoKCgoKCiAgICB2aXJ0dWFsIHZvaWQgZml4Q29w
eShTYkJvb2wgY29weUNvbm5lY3Rpb25zKTsKCgoKCgoKCiAgICB2aXJ0dWFsIFNiQm9vbCByZWZl
cmVuY2VzQ29weSgpIGNvbnN0OwoKCgogICAgdm9pZCBjb3B5Q29ubmVjdGlvbihjb25zdCBTb0Zp
ZWxkICpmcm9tRmllbGQpOwoKCgoKICAgIHZpcnR1YWwgU2JCb29sIHJlYWQoU29JbnB1dCAqaW4s
IGNvbnN0IFNiTmFtZSAmbmFtZSk7CgoKICAgIHZpcnR1YWwgdm9pZCB3cml0ZShTb091dHB1dCAq
b3V0LCBjb25zdCBTYk5hbWUgJm5hbWUpIGNvbnN0OwoKCiAgICB2aXJ0dWFsIHZvaWQgY291bnRX
cml0ZVJlZnMoU29PdXRwdXQgKm91dCkgY29uc3Q7CgoKCgoKICAgIHZvaWQgZXZhbHVhdGUoKSBj
b25zdAogICAgICAgIHsgaWYgKGZsYWdzLmRpcnR5KSBldmFsdWF0ZUNvbm5lY3Rpb24oKTsgfQoK
ICBwcm90ZWN0ZWQ6CgoKCiAgICB2b2lkIHZhbHVlQ2hhbmdlZChTYkJvb2wgcmVzZXREZWZhdWx0
ID0gMSk7CgoKCgogICAgdmlydHVhbCB2b2lkIGV2YWx1YXRlQ29ubmVjdGlvbigpIGNvbnN0OwoK
CiAgICB2aXJ0dWFsIFNiQm9vbCByZWFkVmFsdWUoU29JbnB1dCAqaW4pID0gMDsKCgogICAgdmly
dHVhbCBTYkJvb2wgcmVhZENvbm5lY3Rpb24oU29JbnB1dCAqaW4pOwoKCiAgICB2aXJ0dWFsIHZv
aWQgd3JpdGVWYWx1ZShTb091dHB1dCAqb3V0KSBjb25zdCA9IDA7CgoKICAgIHZpcnR1YWwgdm9p
ZCB3cml0ZUNvbm5lY3Rpb24oU29PdXRwdXQgKm91dCkgY29uc3Q7CgogIHByaXZhdGU6CiAgICBz
dGF0aWMgU29UeXBlIGNsYXNzVHlwZUlkOwoKCiAgICBzdGF0aWMgY2hhciAqZmllbGRCdWY7CiAg
ICBzdGF0aWMgaW50IGZpZWxkQnVmU2l6ZTsKCgogICAgc3RydWN0IHsKICAgICAgICB1bnNpZ25l
ZCBpbnQgaGFzRGVmYXVsdCA6IDE7CiAgICAgICAgdW5zaWduZWQgaW50IGlnbm9yZWQgOiAxOwog
ICAgICAgIHVuc2lnbmVkIGludCBjb25uZWN0ZWQgOiAxOwogICAgICAgIHVuc2lnbmVkIGludCBj
b252ZXJ0ZWQgOiAxOwogICAgICAgIHVuc2lnbmVkIGludCBmcm9tRW5naW5lIDogMTsKICAgICAg
ICB1bnNpZ25lZCBpbnQgY29ubmVjdGlvbkVuYWJsZWQgOiAxOwogICAgICAgIHVuc2lnbmVkIGlu
dCBub3RpZnlFbmFibGVkIDogMTsKICAgICAgICB1bnNpZ25lZCBpbnQgaGFzQXVkaXRvcnMgOiAx
OwogICAgICAgIHVuc2lnbmVkIGludCBpc0VuZ2luZU1vZGlmeWluZyA6IDE7CiAgICAgICAgdW5z
aWduZWQgaW50IHJlYWRPbmx5IDogMTsKCiAgICAgICAgdW5zaWduZWQgaW50IGRpcnR5IDogMTsK
CiAgICB9IGZsYWdzOwoKCgoKCgogICAgdW5pb24gewogICAgICAgIFNvRmllbGRDb250YWluZXIg
KmNvbnRhaW5lcjsKICAgICAgICBTb0ZpZWxkQXVkaXRvckluZm8gKmF1ZGl0b3JJbmZvOwogICAg
fTsKCgogICAgdm9pZCBjcmVhdGVBdWRpdG9ySW5mbygpOwoKCgogICAgU29GaWVsZENvbnZlcnRl
ciAqY3JlYXRlQ29udmVydGVyKGNvbnN0IFNvVHlwZSAmZnJvbUZpZWxkVHlwZSkgY29uc3Q7CgoK
ICAgIHZvaWQgcmVhbGx5RGlzY29ubmVjdCgpOwoKCgogICAgU29GaWVsZENvbnZlcnRlciAqIGdl
dENvbnZlcnRlcigpIGNvbnN0OwoKCiAgICB2b2lkIGdldENvbm5lY3Rpb25JbmZvKFNvRmllbGRD
b250YWluZXIgKiYsIFNiTmFtZSYpIGNvbnN0OwoKCgogICAgc3RhdGljIHZvaWQgKiByZWFsbG9j
RmllbGRCdWYodm9pZCAqcHRyLCBzaXplX3QgbmV3U2l6ZSk7CgpmcmllbmQgY2xhc3MgU29Fbmdp
bmVPdXRwdXQ7Cn07CiMgMzY0ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9J
bnZlbnRvci9maWVsZHMvU29GaWVsZC5oIgpjbGFzcyBTb1NGaWVsZCA6IHB1YmxpYyBTb0ZpZWxk
IHsKICBwdWJsaWM6CgogICAgdmlydHVhbCB+U29TRmllbGQoKTsKCgogICAgc3RhdGljIFNvVHlw
ZSBnZXRDbGFzc1R5cGVJZCgpIHsgcmV0dXJuIGNsYXNzVHlwZUlkOyB9CgogIHByb3RlY3RlZDoK
CiAgICBTb1NGaWVsZCgpOwoKICBwdWJsaWM6CiAgICBzdGF0aWMgdm9pZCBpbml0Q2xhc3MoKTsK
CiAgICBzdGF0aWMgdm9pZCAqIGNyZWF0ZUluc3RhbmNlKCk7CgogIHByaXZhdGU6CiAgICBzdGF0
aWMgU29UeXBlIGNsYXNzVHlwZUlkOwoKCiAgICB2aXJ0dWFsIFNiQm9vbCByZWFkVmFsdWUoU29J
bnB1dCAqaW4pID0gMDsKCgogICAgdmlydHVhbCB2b2lkIHdyaXRlVmFsdWUoU29PdXRwdXQgKm91
dCkgY29uc3QgPSAwOwp9OwojIDQwMCAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1
ZGUvSW52ZW50b3IvZmllbGRzL1NvRmllbGQuaCIKY2xhc3MgU29NRmllbGQgOiBwdWJsaWMgU29G
aWVsZCB7CgogIHB1YmxpYzoKCiAgICB2aXJ0dWFsIH5Tb01GaWVsZCgpOwoKCiAgICBpbnQgZ2V0
TnVtKCkgY29uc3QgeyBldmFsdWF0ZSgpOyByZXR1cm4gbnVtOyB9CgoKCgogICAgdm9pZCBzZXRO
dW0oaW50IG51bSk7CgoKCgoKICAgIHZpcnR1YWwgdm9pZCBkZWxldGVWYWx1ZXMoaW50IHN0YXJ0
LCBpbnQgbnVtID0gLTEpOwoKCgoKICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRTcGFjZShpbnQgc3Rh
cnQsIGludCBudW0pOwoKCgogICAgU2JCb29sIHNldDEoaW50IGluZGV4LCBjb25zdCBjaGFyICp2
YWx1ZVN0cmluZyk7CiAgICB2b2lkIGdldDEoaW50IGluZGV4LCBTYlN0cmluZyAmdmFsdWVTdHJp
bmcpOwoKCiAgICBzdGF0aWMgU29UeXBlIGdldENsYXNzVHlwZUlkKCkgeyByZXR1cm4gY2xhc3NU
eXBlSWQ7IH0KCiAgcHVibGljOgogICAgc3RhdGljIHZvaWQgaW5pdENsYXNzKCk7CgogICAgc3Rh
dGljIHZvaWQgKiBjcmVhdGVJbnN0YW5jZSgpOwoKICBwcm90ZWN0ZWQ6CiAgICBpbnQgbnVtOwog
ICAgaW50IG1heE51bTsKCgogICAgU29NRmllbGQoKTsKCgogICAgdmlydHVhbCB2b2lkIG1ha2VS
b29tKGludCBuZXdOdW0pOwoKICBwcml2YXRlOgogICAgc3RhdGljIFNvVHlwZSBjbGFzc1R5cGVJ
ZDsKCgogICAgc3RhdGljIGNoYXIgKmZpZWxkQnVmOwogICAgc3RhdGljIGludCBmaWVsZEJ1ZlNp
emU7CgoKCiAgICB2aXJ0dWFsIHZvaWQgYWxsb2NWYWx1ZXMoaW50IG51bSkgPSAwOwoKCiAgICB2
aXJ0dWFsIHZvaWQgZGVsZXRlQWxsVmFsdWVzKCkgPSAwOwoKCiAgICB2aXJ0dWFsIHZvaWQgY29w
eVZhbHVlKGludCB0bywgaW50IGZyb20pID0gMDsKCgogICAgdmlydHVhbCBTYkJvb2wgcmVhZFZh
bHVlKFNvSW5wdXQgKmluKTsKCgogICAgdmlydHVhbCBTYkJvb2wgcmVhZDFWYWx1ZShTb0lucHV0
ICppbiwgaW50IGluZGV4KSA9IDA7CgoKICAgIHZpcnR1YWwgdm9pZCB3cml0ZVZhbHVlKFNvT3V0
cHV0ICpvdXQpIGNvbnN0OwoKCiAgICB2aXJ0dWFsIHZvaWQgd3JpdGUxVmFsdWUoU29PdXRwdXQg
Km91dCwgaW50IGluZGV4KSBjb25zdCA9IDA7CgoKICAgIHZpcnR1YWwgU2JCb29sIHJlYWRCaW5h
cnlWYWx1ZXMoU29JbnB1dCAqaW4sIGludCBudW1Ub1JlYWQpOwoKCiAgICB2aXJ0dWFsIHZvaWQg
d3JpdGVCaW5hcnlWYWx1ZXMoU29PdXRwdXQgKm91dCkgY29uc3Q7CgoKICAgIHZpcnR1YWwgaW50
IGdldE51bVZhbHVlc1BlckxpbmUoKSBjb25zdDsKCgoKICAgIHN0YXRpYyB2b2lkICogcmVhbGxv
Y0ZpZWxkQnVmKHZvaWQgKnB0ciwgc2l6ZV90IG5ld1NpemUpOwp9OwojIDEzMCAiLi4vLi4vLi4v
Li4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZmllbGRzL1NvU3ViRmllbGQuaCIg
MgojIDEgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL1NvSW5w
dXQuaCIgMQojIDY2ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRv
ci9Tb0lucHV0LmgiCiMgMSAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52
ZW50b3IvU29EQi5oIiAxCiMgNTkgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRl
L0ludmVudG9yL1NvREIuaCIKIyAxICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVk
ZS9JbnZlbnRvci9zZW5zb3JzL1NvU2Vuc29yTWFuYWdlci5oIiAxCiMgNjUgIi4uLy4uLy4uLy4u
Ly4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL3NlbnNvcnMvU29TZW5zb3JNYW5hZ2Vy
LmgiCiMgMSAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvU2JU
aW1lLmgiIDEKIyA2MiAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50
b3IvU2JUaW1lLmgiCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDEgMwojIDI3ICIvdXNy
L2luY2x1ZGUvc3lzL3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDI4
ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Rp
bWUuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMKIyAzOSAiL3Vzci9p
bmNsdWRlL3N5cy90aW1lLmgiIDMKZXh0ZXJuICJDIiB7CiMgNTcgIi91c3IvaW5jbHVkZS9zeXMv
dGltZS5oIiAzCnN0cnVjdCB0aW1lem9uZQogIHsKICAgIGludCB0el9taW51dGVzd2VzdDsKICAg
IGludCB0el9kc3R0aW1lOwogIH07Cgp0eXBlZGVmIHN0cnVjdCB0aW1lem9uZSAqX19yZXN0cmlj
dCBfX3RpbWV6b25lX3B0cl90OwojIDczICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMwpleHRl
cm4gaW50IGdldHRpbWVvZmRheSAoc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190diwKICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fdGltZXpvbmVfcHRyX3QgX190eikgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IHNldHRpbWVvZmRheSAoX19jb25zdCBzdHJ1Y3QgdGltZXZhbCAqX190diwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWV6b25lICpfX3R6KSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGFkanRpbWUgKF9fY29uc3Qgc3RydWN0IHRpbWV2YWwg
Kl9fZGVsdGEsCiAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKl9fb2xkZGVsdGEp
IHRocm93ICgpOwoKCgoKZW51bSBfX2l0aW1lcl93aGljaAogIHsKCiAgICBJVElNRVJfUkVBTCA9
IDAsCgoKICAgIElUSU1FUl9WSVJUVUFMID0gMSwKCgoKICAgIElUSU1FUl9QUk9GID0gMgoKICB9
OwoKCgpzdHJ1Y3QgaXRpbWVydmFsCiAgewoKICAgIHN0cnVjdCB0aW1ldmFsIGl0X2ludGVydmFs
OwoKICAgIHN0cnVjdCB0aW1ldmFsIGl0X3ZhbHVlOwogIH07CgoKCgoKCnR5cGVkZWYgaW50IF9f
aXRpbWVyX3doaWNoX3Q7CgoKCgpleHRlcm4gaW50IGdldGl0aW1lciAoX19pdGltZXJfd2hpY2hf
dCBfX3doaWNoLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl0aW1lcnZhbCAqX192YWx1
ZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNldGl0aW1lciAoX19pdGltZXJfd2hpY2hfdCBf
X3doaWNoLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgaXRpbWVydmFsICpf
X3Jlc3RyaWN0IF9fbmV3LAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl0aW1lcnZhbCAq
X19yZXN0cmljdCBfX29sZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHV0aW1lcyAoX19jb25z
dCBjaGFyICpfX2ZpbGUsIF9fY29uc3Qgc3RydWN0IHRpbWV2YWwgX190dnBbMl0pCiAgICAgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgbHV0aW1lcyAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fY29u
c3Qgc3RydWN0IHRpbWV2YWwgX190dnBbMl0pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBm
dXRpbWVzIChpbnQgZmQsIF9fY29uc3Qgc3RydWN0IHRpbWV2YWwgX190dnBbMl0pIHRocm93ICgp
OwojIDE4MiAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMKfQojIDYzICIuLi8uLi8uLi8uLi8u
Li9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9TYlRpbWUuaCIgMgoKIyAxICIvdXNyL2xp
Yi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzMuMi9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAx
MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8zLjIvaW5jbHVkZS9saW1pdHMu
aCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMy4yL2luY2x1ZGUv
c3lzbGltaXRzLmgiIDEgMwoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQt
bGludXgvMy4yL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDEzMiAiL3Vzci9saWIvZ2NjLWxpYi9p
Mzg2LXJlZGhhdC1saW51eC8zLjIvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91c3IvaW5jbHVk
ZS9saW1pdHMuaCIgMSAzCiMgMTQ0ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDEgMwojIDEyNiAiL3Vzci9pbmNsdWRlL2JpdHMv
cG9zaXgxX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDEgMwoj
IDM2ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9s
aW51eC9saW1pdHMuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAy
IDMKIyAxMjcgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMiAzCiMgMTQ1ICIvdXNy
L2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4Ml9s
aW0uaCIgMSAzCiMgMTQ5ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2JpdHMveG9w
ZW5fbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpb19saW0uaCIgMSAzCiMgMzUg
Ii91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAyIDMKIyAxMzYgIi91c3IvaW5jbHVkZS9i
aXRzL3hvcGVuX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd29yZHNpemUuaCIgMSAz
CiMgMTM3ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMiAzCiMgMTUzICIvdXNyL2lu
Y2x1ZGUvbGltaXRzLmgiIDIgMwojIDEzMyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1s
aW51eC8zLjIvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgOCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2
LXJlZGhhdC1saW51eC8zLjIvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzCiMgMTIgIi91c3IvbGli
L2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMy4yL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDY1
ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9TYlRpbWUuaCIg
MgojIDg1ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9TYlRp
bWUuaCIKY2xhc3MgU2JUaW1lIHsKICBwdWJsaWM6CgoKICAgIFNiVGltZSgpIHt9CgoKCiAgICBT
YlRpbWUoZG91YmxlIHNlYyk7CgoKCiAgICBTYlRpbWUodGltZV90IHNlYywgbG9uZyB1c2VjKQog
ICAgICAgIHsgdC50dl9zZWMgPSBzZWM7IHQudHZfdXNlYyA9IHVzZWM7IH0KCiAgcHJpdmF0ZToK
IyAxMTYgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL1NiVGlt
ZS5oIgogICAgU2JUaW1lKHVpbnQzMl90IG1zZWMpOwogIHB1YmxpYzoKCgoKICAgIFNiVGltZShj
b25zdCBzdHJ1Y3QgdGltZXZhbCAqdHYpCiAgICAgICAgeyB0LnR2X3NlYyA9IHR2LT50dl9zZWM7
IHQudHZfdXNlYyA9IHR2LT50dl91c2VjOyB9CgoKCgoKCgogICAgc3RhdGljIFNiVGltZSBnZXRU
aW1lT2ZEYXkoKTsKCgogICAgdm9pZCBzZXRUb1RpbWVPZkRheSgpOwoKCiAgICBzdGF0aWMgU2JU
aW1lIHplcm8oKQogICAgICAgIHsgcmV0dXJuIFNiVGltZSgwLCAwKTsgfQoKCgoKCgogICAgc3Rh
dGljIFNiVGltZSBtYXgoKQogICAgICAgIHsgcmV0dXJuIFNiVGltZSgyMTQ3NDgzNjQ3LCA5OTk5
OTkpOyB9CgoKCiAgICB2b2lkIHNldFZhbHVlKGRvdWJsZSBzZWMpCgoKCiAgICAgICAgeyB0LnR2
X3NlYyA9IHRpbWVfdChpbnQoc2VjKSk7CgogICAgICAgICAgdC50dl91c2VjID0gbG9uZygoc2Vj
IC0gdC50dl9zZWMpICogMTAwMDAwMC4wKTsgfQoKCgogICAgdm9pZCBzZXRWYWx1ZSh0aW1lX3Qg
c2VjLCBsb25nIHVzZWMpCiAgICAgICAgeyB0LnR2X3NlYyA9IHNlYzsgdC50dl91c2VjID0gdXNl
YzsgfQoKCgogICAgdm9pZCBzZXRWYWx1ZShjb25zdCBzdHJ1Y3QgdGltZXZhbCAqdHYpCiAgICAg
ICAgeyB0LnR2X3NlYyA9IHR2LT50dl9zZWM7IHQudHZfdXNlYyA9IHR2LT50dl91c2VjOyB9CgoK
CiAgICB2b2lkIHNldE1zZWNWYWx1ZSh1bnNpZ25lZCBsb25nIG1zZWMpCiAgICAgICAgeyB0LnR2
X3NlYyA9IHRpbWVfdChtc2VjLzEwMDApOwogICAgICAgICAgdC50dl91c2VjID0gbG9uZygxMDAw
ICogKG1zZWMgJSAxMDAwKSk7IH0KCgoKICAgIGRvdWJsZSBnZXRWYWx1ZSgpIGNvbnN0CiAgICAg
ICAgeyByZXR1cm4gKGRvdWJsZSkgdC50dl9zZWMgKyAoZG91YmxlKSB0LnR2X3VzZWMgLyAxMDAw
MDAwLjA7IH0KCgoKICAgIHZvaWQgZ2V0VmFsdWUodGltZV90ICZzZWMsIGxvbmcgJnVzZWMpIGNv
bnN0CiAgICAgICAgeyBzZWMgPSB0LnR2X3NlYzsgdXNlYyA9IHQudHZfdXNlYzsgfQoKCgogICAg
dm9pZCBnZXRWYWx1ZShzdHJ1Y3QgdGltZXZhbCAqdHYpIGNvbnN0CiAgICAgICAgeyB0di0+dHZf
c2VjID0gdC50dl9zZWM7IHR2LT50dl91c2VjID0gdC50dl91c2VjOyB9CgoKCiAgICB1bnNpZ25l
ZCBsb25nIGdldE1zZWNWYWx1ZSgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gdC50dl9zZWMgKiAx
MDAwICsgdC50dl91c2VjIC8gMTAwMDsgfQoKCgoKICAgIFNiU3RyaW5nIGZvcm1hdChjb25zdCBj
aGFyICpmbXQgPSAiJVMuJWkiKSBjb25zdDsKCgoKCiAgICBTYlN0cmluZyBmb3JtYXREYXRlKGNv
bnN0IGNoYXIgKmZtdCA9ICIlQSwgJUQgJXIiKSBjb25zdDsKCgogICAgZnJpZW5kIFNiVGltZSBv
cGVyYXRvciArKGNvbnN0IFNiVGltZSAmdDAsIGNvbnN0IFNiVGltZSAmdDEpOwoKCiAgICBmcmll
bmQgU2JUaW1lIG9wZXJhdG9yIC0oY29uc3QgU2JUaW1lICZ0MCwgY29uc3QgU2JUaW1lICZ0MSk7
CgoKICAgIFNiVGltZSAmIG9wZXJhdG9yICs9KGNvbnN0IFNiVGltZSAmdG0pCiAgICAgICAgeyBy
ZXR1cm4gKCp0aGlzID0gKnRoaXMgKyB0bSk7IH0KCgogICAgU2JUaW1lICYgb3BlcmF0b3IgLT0o
Y29uc3QgU2JUaW1lICZ0bSkKICAgICAgICB7IHJldHVybiAoKnRoaXMgPSAqdGhpcyAtIHRtKTsg
fQoKCgogICAgU2JUaW1lIG9wZXJhdG9yIC0oKSBjb25zdAogICAgICAgIHsgcmV0dXJuICh0LnR2
X3VzZWMgPT0gMCkgPyBTYlRpbWUoLSB0LnR2X3NlYywgMCkKICAgICAgICAgICAgICA6IFNiVGlt
ZSgtIHQudHZfc2VjIC0gMSwgMTAwMDAwMCAtIHQudHZfdXNlYyk7IH0KCgogICAgZnJpZW5kIFNi
VGltZSBvcGVyYXRvciAqKGNvbnN0IFNiVGltZSAmdG0sIGRvdWJsZSBzKTsKCgogICAgZnJpZW5k
IFNiVGltZSBvcGVyYXRvciAqKGRvdWJsZSBzLCBjb25zdCBTYlRpbWUgJnRtKQogICAgICAgIHsg
cmV0dXJuIHRtICogczsgfQoKCgogICAgU2JUaW1lICYgb3BlcmF0b3IgKj0oZG91YmxlIHMpCiAg
ICAgICAgeyAqdGhpcyA9ICp0aGlzICogczsgcmV0dXJuICp0aGlzOyB9CgoKICAgIGZyaWVuZCBT
YlRpbWUgb3BlcmF0b3IgLyhjb25zdCBTYlRpbWUgJnRtLCBkb3VibGUgcyk7CgoKICAgIFNiVGlt
ZSAmIG9wZXJhdG9yIC89KGRvdWJsZSBzKQogICAgICAgIHsgcmV0dXJuICgqdGhpcyA9ICp0aGlz
IC8gcyk7IH0KCgoKICAgIGRvdWJsZSBvcGVyYXRvciAvKGNvbnN0IFNiVGltZSAmdG0pIGNvbnN0
CiAgICAgICAgeyByZXR1cm4gZ2V0VmFsdWUoKSAvIHRtLmdldFZhbHVlKCk7IH0KCgogICAgU2JU
aW1lIG9wZXJhdG9yICUoY29uc3QgU2JUaW1lICZ0bSkgY29uc3QKICAgICAgICB7IHJldHVybiAq
dGhpcyAtIHRtICogZmxvb3IoKnRoaXMgLyB0bSk7IH0KCgogICAgaW50IG9wZXJhdG9yID09KGNv
bnN0IFNiVGltZSAmdG0pIGNvbnN0CiAgICAgICAgeyByZXR1cm4gKHQudHZfc2VjID09IHRtLnQu
dHZfc2VjKSAmJiAodC50dl91c2VjID09IHRtLnQudHZfdXNlYyk7IH0KCiAgICBpbnQgb3BlcmF0
b3IgIT0oY29uc3QgU2JUaW1lICZ0bSkgY29uc3QKICAgICAgICB7IHJldHVybiAhICgqdGhpcyA9
PSB0bSk7IH0KCgogICAgaW5saW5lIFNiQm9vbCBvcGVyYXRvciA8KGNvbnN0IFNiVGltZSAmdG0p
IGNvbnN0OwogICAgaW5saW5lIFNiQm9vbCBvcGVyYXRvciA+KGNvbnN0IFNiVGltZSAmdG0pIGNv
bnN0OwogICAgaW5saW5lIFNiQm9vbCBvcGVyYXRvciA8PShjb25zdCBTYlRpbWUgJnRtKSBjb25z
dDsKICAgIGlubGluZSBTYkJvb2wgb3BlcmF0b3IgPj0oY29uc3QgU2JUaW1lICZ0bSkgY29uc3Q7
CgogIHByaXZhdGU6CiAgICBzdHJ1Y3QgdGltZXZhbCB0Owp9OwoKCgoKaW5saW5lIFNiQm9vbApT
YlRpbWU6Om9wZXJhdG9yIDwoY29uc3QgU2JUaW1lICZ0bSkgY29uc3QKewogICAgaWYgKCh0LnR2
X3NlYyA8IHRtLnQudHZfc2VjKSB8fAogICAgICAgICh0LnR2X3NlYyA9PSB0bS50LnR2X3NlYyAm
JiB0LnR2X3VzZWMgPCB0bS50LnR2X3VzZWMpKQogICAgICAgIHJldHVybiAxOwogICAgZWxzZQog
ICAgICAgIHJldHVybiAwOwp9CgppbmxpbmUgU2JCb29sClNiVGltZTo6b3BlcmF0b3IgPihjb25z
dCBTYlRpbWUgJnRtKSBjb25zdAp7CiAgICBpZiAoKHQudHZfc2VjID4gdG0udC50dl9zZWMpIHx8
CiAgICAgICAgKHQudHZfc2VjID09IHRtLnQudHZfc2VjICYmIHQudHZfdXNlYyA+IHRtLnQudHZf
dXNlYykpCiAgICAgICAgcmV0dXJuIDE7CiAgICBlbHNlCiAgICAgICAgcmV0dXJuIDA7Cn0KCmlu
bGluZSBTYkJvb2wKU2JUaW1lOjpvcGVyYXRvciA8PShjb25zdCBTYlRpbWUgJnRtKSBjb25zdAp7
CiAgICBpZiAoKHQudHZfc2VjIDwgdG0udC50dl9zZWMpIHx8CiAgICAgICAgKHQudHZfc2VjID09
IHRtLnQudHZfc2VjICYmIHQudHZfdXNlYyA8PSB0bS50LnR2X3VzZWMpKQogICAgICAgIHJldHVy
biAxOwogICAgZWxzZQogICAgICAgIHJldHVybiAwOwp9CgppbmxpbmUgU2JCb29sClNiVGltZTo6
b3BlcmF0b3IgPj0oY29uc3QgU2JUaW1lICZ0bSkgY29uc3QKewogICAgaWYgKCh0LnR2X3NlYyA+
IHRtLnQudHZfc2VjKSB8fAogICAgICAgICh0LnR2X3NlYyA9PSB0bS50LnR2X3NlYyAmJiB0LnR2
X3VzZWMgPj0gdG0udC50dl91c2VjKSkKICAgICAgICByZXR1cm4gMTsKICAgIGVsc2UKICAgICAg
ICByZXR1cm4gMDsKfQojIDY2ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9J
bnZlbnRvci9zZW5zb3JzL1NvU2Vuc29yTWFuYWdlci5oIiAyCgpjbGFzcyBTb1NlbnNvcjsKY2xh
c3MgU29EZWxheVF1ZXVlU2Vuc29yOwpjbGFzcyBTb1RpbWVyUXVldWVTZW5zb3I7CmNsYXNzIFNv
VGltZXJTZW5zb3I7CmNsYXNzIFNvQWxhcm1TZW5zb3I7CgogY2xhc3MgU29TZW5zb3JNYW5hZ2Vy
IHsKICBwdWJsaWM6CgoKICAgIFNvU2Vuc29yTWFuYWdlcigpOwogICAgflNvU2Vuc29yTWFuYWdl
cigpOwoKCgogICAgdm9pZCBzZXRDaGFuZ2VkQ2FsbGJhY2sodm9pZCAoKmZ1bmMpKHZvaWQgKiks
IHZvaWQgKmRhdGEpCiAgICAgICAgeyBjaGFuZ2VkRnVuYyA9IGZ1bmM7IGNoYW5nZWRGdW5jRGF0
YSA9IGRhdGE7IH0KCgogICAgdm9pZCBpbnNlcnREZWxheVNlbnNvcihTb0RlbGF5UXVldWVTZW5z
b3IgKnMpOwogICAgdm9pZCBpbnNlcnRUaW1lclNlbnNvcihTb1RpbWVyUXVldWVTZW5zb3IgKnMp
OwogICAgdm9pZCByZW1vdmVEZWxheVNlbnNvcihTb0RlbGF5UXVldWVTZW5zb3IgKnMpOwogICAg
dm9pZCByZW1vdmVUaW1lclNlbnNvcihTb1RpbWVyUXVldWVTZW5zb3IgKnMpOwoKCgogICAgdm9p
ZCByZXNjaGVkdWxlVGltZXIoU29UaW1lclNlbnNvciAqcyk7CiAgICB2b2lkIHJlbW92ZVJlc2No
ZWR1bGVkVGltZXIoU29UaW1lclF1ZXVlU2Vuc29yICpzKTsKCgoKCiAgICB2b2lkIHNldERlbGF5
U2Vuc29yVGltZW91dChjb25zdCBTYlRpbWUgJnQpOwogICAgY29uc3QgU2JUaW1lICZnZXREZWxh
eVNlbnNvclRpbWVvdXQoKTsKCgoKCgogICAgdm9pZCBwcm9jZXNzRGVsYXlRdWV1ZShTYkJvb2wg
aXNJZGxlKTsKCgogICAgdm9pZCBwcm9jZXNzSW1tZWRpYXRlUXVldWUoKTsKCgogICAgdm9pZCBw
cm9jZXNzVGltZXJRdWV1ZSgpOwoKCiAgICBTYkJvb2wgaXNEZWxheVNlbnNvclBlbmRpbmcoKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIChkZWxheVF1ZXVlICE9IF9f
bnVsbCk7IH0KCgoKCiAgICBTYkJvb2wgaXNUaW1lclNlbnNvclBlbmRpbmcoU2JUaW1lICZ0bSk7
CgoKCiAgICBpbnQgZG9TZWxlY3QoaW50IG5mZHMsIGZkX3NldCAqcmVhZGZkcywgZmRfc2V0ICp3
cml0ZWZkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpleGNlcHRm
ZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICp1c2Vy
VGltZU91dCk7CiAgcHJpdmF0ZToKICAgIFNvU2Vuc29yICpkZWxheVF1ZXVlOwogICAgU29TZW5z
b3IgKnRpbWVyUXVldWU7CiAgICBTb1NlbnNvciAqcmVzY2hlZHVsZVF1ZXVlOwoKCgogICAgU2JU
aW1lIGRlbGF5UVRpbWVvdXQ7CiAgICBTb0FsYXJtU2Vuc29yICpkZWxheVFUaW1lb3V0U2Vuc29y
OwogICAgc3RhdGljIHZvaWQgZGVsYXlRVGltZW91dENCKHZvaWQgKiwgU29TZW5zb3IgKik7CgoK
CgoKCiAgICBpbnQgcHJvY2Vzc2luZ1F1ZXVlOwoKICAgIHVpbnQzMl90IGRlbGF5UUNvdW50OwoK
CiAgICB2b2lkIGluc2VydChTb1NlbnNvciAqcywgU29TZW5zb3IgKiZoZWFkKTsKICAgIHZvaWQg
cmVtb3ZlKFNvU2Vuc29yICpzLCBTb1NlbnNvciAqJmhlYWQpOwoKCiAgICB2b2lkICgqY2hhbmdl
ZEZ1bmMpKHZvaWQgKik7CiAgICB2b2lkICpjaGFuZ2VkRnVuY0RhdGE7CgoKICAgIHZvaWQgbm90
aWZ5Q2hhbmdlZCgpOwp9OwojIDYwICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVk
ZS9JbnZlbnRvci9Tb0RCLmgiIDIKCgoKY2xhc3MgU29CYXNlOwpjbGFzcyBTb1NGUmVhbFRpbWU7
CmNsYXNzIFNvU2VwYXJhdG9yOwpjbGFzcyBTb0lucHV0OwpjbGFzcyBTb1BhdGg7CmNsYXNzIFNv
Tm9kZTsKY2xhc3MgU29GaWVsZDsKCnR5cGVkZWYgdm9pZCBTb0RCSGVhZGVyQ0Iodm9pZCAqdXNl
ckRhdGEsIFNvSW5wdXQgKmluKTsKIyA4NSAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2lu
Y2x1ZGUvSW52ZW50b3IvU29EQi5oIgpjbGFzcyBTb0RCIHsKCiAgcHVibGljOgoKICAgIHN0YXRp
YyB2b2lkIGluaXQoKTsKCgoKICAgIHN0YXRpYyBjb25zdCBjaGFyICpnZXRWZXJzaW9uKCk7CgoK
CgogICAgc3RhdGljIFNiQm9vbCByZWFkKFNvSW5wdXQgKmluLCBTb05vZGUgKiZyb290Tm9kZSk7
CgoKCgoKICAgIHN0YXRpYyBTYkJvb2wgcmVhZChTb0lucHV0ICppbiwgU29QYXRoIComcGF0aCk7
CgoKCgoKCgogICAgc3RhdGljIFNvU2VwYXJhdG9yICpyZWFkQWxsKFNvSW5wdXQgKmluKTsKCgoK
CgoKCiAgICBzdGF0aWMgU2JCb29sIHJlZ2lzdGVySGVhZGVyKGNvbnN0IFNiU3RyaW5nICZoZWFk
ZXJTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYkJvb2wg
aXNCaW5hcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBp
dlZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb0RCSGVh
ZGVyQ0IgKnByZUNCLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29E
QkhlYWRlckNCICpwb3N0Q0IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2b2lkICp1c2VyRGF0YSA9IF9fbnVsbCk7CgoKCiAgICBzdGF0aWMgU2JCb29sIGdldEhlYWRl
ckRhdGEoY29uc3QgU2JTdHJpbmcgJnN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNiQm9vbCAmaXNCaW5hcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmbG9hdCAmaXZWZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU29EQkhlYWRlckNCIComcHJlQ0IsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTb0RCSGVhZGVyQ0IgKiZwb3N0Q0IsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIComdXNlckRhdGEsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTYkJvb2wgc3Vic3RyaW5nT0sgPSAwKTsKICAgIHN0
YXRpYyBpbnQgZ2V0TnVtSGVhZGVycygpOwogICAgc3RhdGljIFNiU3RyaW5nIGdldEhlYWRlclN0
cmluZyhpbnQgaSk7CgoKCgoKCiAgICBzdGF0aWMgU2JCb29sIGlzVmFsaWRIZWFkZXIoY29uc3Qg
Y2hhciAqdGVzdFN0cmluZyk7CgoKCgoKICAgIHN0YXRpYyBTb0ZpZWxkICogY3JlYXRlR2xvYmFs
RmllbGQoY29uc3QgU2JOYW1lICZuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTb1R5cGUgdHlwZSk7CgoKCiAgICBzdGF0aWMgU29GaWVsZCAqIGdldEdsb2Jh
bEZpZWxkKGNvbnN0IFNiTmFtZSAmbmFtZSk7CgoKCgogICAgc3RhdGljIHZvaWQgcmVuYW1lR2xv
YmFsRmllbGQoY29uc3QgU2JOYW1lICZvbGROYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTYk5hbWUgJm5ld05hbWUpOwoKCgoKICAgIHN0YXRpYyB2
b2lkIHNldFJlYWxUaW1lSW50ZXJ2YWwoY29uc3QgU2JUaW1lICZkZWx0YVQpOwogICAgc3RhdGlj
IGNvbnN0IFNiVGltZSAmZ2V0UmVhbFRpbWVJbnRlcnZhbCgpOwoKCgoKICAgIHN0YXRpYyB2b2lk
IHNldERlbGF5U2Vuc29yVGltZW91dChjb25zdCBTYlRpbWUgJnQpOwogICAgc3RhdGljIGNvbnN0
IFNiVGltZSAmZ2V0RGVsYXlTZW5zb3JUaW1lb3V0KCk7CgoKCiAgICBzdGF0aWMgaW50IGRvU2Vs
ZWN0KGludCBuZmRzLCBmZF9zZXQgKnJlYWRmZHMsIGZkX3NldCAqd3JpdGVmZHMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZkX3NldCAqZXhjZXB0ZmRzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqdXNlclRpbWVPdXQpOwoKICBwdWJs
aWM6CgoKCgogICAgc3RhdGljIHZvaWQgYWRkQ29udmVydGVyKFNvVHlwZSBmcm9tRmllbGQsIFNv
VHlwZSB0b0ZpZWxkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29UeXBl
IGNvbnZlcnRlckVuZ2luZSk7CgoKCgogICAgc3RhdGljIFNvVHlwZSBnZXRDb252ZXJ0ZXIoU29U
eXBlIGZyb21GaWVsZCwgU29UeXBlIHRvRmllbGQpOwoKICBwdWJsaWM6CgogICAgc3RhdGljIFNv
U2Vuc29yTWFuYWdlciAqIGdldFNlbnNvck1hbmFnZXIoKTsKCgogICAgc3RhdGljIFNiQm9vbCBp
c0luaXRpYWxpemVkKCkgeyByZXR1cm4gKGdsb2JhbERCICE9IF9fbnVsbCk7IH0KCgoKCgoKCiAg
ICBzdGF0aWMgdm9pZCBzdGFydE5vdGlmeSgpIHsgbm90aWZ5Q291bnQrKzsgfQogICAgc3RhdGlj
IFNiQm9vbCBpc05vdGlmeWluZygpIHsgcmV0dXJuIChub3RpZnlDb3VudCA+IDApOyB9CiAgICBz
dGF0aWMgdm9pZCBlbmROb3RpZnkoKQogICAgICAgIHsgaWYgKC0tbm90aWZ5Q291bnQgPT0gMCkK
ICAgICAgICAgICAgICBnbG9iYWxEQi0+c2Vuc29yTWFuYWdlci5wcm9jZXNzSW1tZWRpYXRlUXVl
dWUoKTsgfQoKCiAgICBzdGF0aWMgdm9pZCBlbmFibGVSZWFsVGltZVNlbnNvcihTYkJvb2wgZW5h
YmxlKTsKCgoKICAgIHN0YXRpYyBTYkJvb2wgcmVhZChTb0lucHV0ICppbiwgU29CYXNlIComYmFz
ZSk7CgogIHByaXZhdGU6CiAgICBzdGF0aWMgY29uc3QgY2hhciAqdmVyc2lvblN0cmluZzsKICAg
IHN0YXRpYyBTb0RCICpnbG9iYWxEQjsKICAgIFNvU2Vuc29yTWFuYWdlciBzZW5zb3JNYW5hZ2Vy
OwoKICAgIHN0YXRpYyBpbnQgbm90aWZ5Q291bnQ7CgogICAgc3RhdGljIFNvVGltZXJTZW5zb3Ig
KnJlYWxUaW1lU2Vuc29yOwogICAgc3RhdGljIHZvaWQgcmVhbFRpbWVTZW5zb3JDYWxsYmFjaygp
OwogICAgc3RhdGljIFNvU0ZSZWFsVGltZSAqcmVhbFRpbWU7CgoKICAgIHN0YXRpYyBTYlBMaXN0
ICpoZWFkZXJMaXN0OwoKCgoKCiAgICBzdGF0aWMgU2JEaWN0ICpjb252ZXJzaW9uRGljdDsKCgog
ICAgc3RhdGljIHVpbnQzMl90IGdldENvbnZlcnNpb25LZXkoU29UeXBlIGZyb21GaWVsZCwgU29U
eXBlIHRvRmllbGQpCiAgICAgICAgeyByZXR1cm4gKGZyb21GaWVsZC5nZXRLZXkoKSA8PCAxNikg
fCB0b0ZpZWxkLmdldEtleSgpOyB9CgogICAgc3RhdGljIHZvaWQgaXYyXzFQcmVDYWxsYmFjayh2
b2lkICp1c2VyRGF0YSwgU29JbnB1dCAqaW4pOwogICAgc3RhdGljIHZvaWQgaXYyXzBQcmVDYWxs
YmFjayh2b2lkICp1c2VyRGF0YSwgU29JbnB1dCAqaW4pOwogICAgc3RhdGljIHZvaWQgaXYxXzBQ
cmVDYWxsYmFjayh2b2lkICp1c2VyRGF0YSwgU29JbnB1dCAqaW4pOwogICAgc3RhdGljIHZvaWQg
aXYyXzBQb3N0Q2FsbGJhY2sodm9pZCAqdXNlckRhdGEsIFNvSW5wdXQgKmluKTsKICAgIHN0YXRp
YyB2b2lkIGl2MV8wUG9zdENhbGxiYWNrKHZvaWQgKnVzZXJEYXRhLCBTb0lucHV0ICppbik7Cgp9
OwojIDY3ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9Tb0lu
cHV0LmgiIDIKCmNsYXNzIFNvTm9kZTsKY2xhc3MgU29QYXRoOwpjbGFzcyBTb0Jhc2U7CmNsYXNz
IFNvREI7CmNsYXNzIFNiU3RyaW5nTGlzdDsKIyA4NiAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFi
YXNlL2luY2x1ZGUvSW52ZW50b3IvU29JbnB1dC5oIgogc3RydWN0IFNvSW5wdXRGaWxlIHsKICAg
IFNiU3RyaW5nIG5hbWU7CiAgICBTYlN0cmluZyBmdWxsTmFtZTsKICAgIEZJTEUgKmZwOwogICAg
dm9pZCAqYnVmZmVyOwogICAgY2hhciAqY3VyQnVmOwogICAgc2l6ZV90IGJ1ZlNpemU7CiAgICBp
bnQgbGluZU51bTsKICAgIFNiQm9vbCBvcGVuZWRIZXJlOwogICAgU2JCb29sIGJpbmFyeTsKICAg
IFNiQm9vbCByZWFkSGVhZGVyOwogICAgU2JCb29sIGhlYWRlck9rOwogICAgU2JEaWN0ICpyZWZE
aWN0OwogICAgU2JCb29sIGJvcnJvd2VkRGljdDsKICAgIGZsb2F0IGl2VmVyc2lvbjsKICAgIFNi
U3RyaW5nIGhlYWRlclN0cmluZzsKICAgIFNvREJIZWFkZXJDQiAqcG9zdFJlYWRDQjsKICAgIHZv
aWQgKkNCRGF0YTsKCiAgICBTb0lucHV0RmlsZSgpOwp9OwojIDEzMiAiLi4vLi4vLi4vLi4vLi4v
bGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvU29JbnB1dC5oIgpjbGFzcyBTb0lucHV0IHsK
IHB1YmxpYzoKCgogICAgU29JbnB1dCgpOwoKCiAgICB+U29JbnB1dCgpOwoKCgoKCiAgICBzdGF0
aWMgdm9pZCBhZGREaXJlY3RvcnlGaXJzdChjb25zdCBjaGFyICpkaXJOYW1lKTsKCiAgICBzdGF0
aWMgdm9pZCBhZGREaXJlY3RvcnlMYXN0KGNvbnN0IGNoYXIgKmRpck5hbWUpOwoKCgoKCiAgICBz
dGF0aWMgdm9pZCBhZGRFbnZEaXJlY3Rvcmllc0ZpcnN0KGNvbnN0IGNoYXIgKmVudlZhck5hbWUp
OwoKICAgIHN0YXRpYyB2b2lkIGFkZEVudkRpcmVjdG9yaWVzTGFzdChjb25zdCBjaGFyICplbnZW
YXJOYW1lKTsKCgoKICAgIHN0YXRpYyB2b2lkIHJlbW92ZURpcmVjdG9yeShjb25zdCBjaGFyICpk
aXJOYW1lKTsKCgoKICAgIHN0YXRpYyB2b2lkIGNsZWFyRGlyZWN0b3JpZXMoKTsKCgoKICAgIHN0
YXRpYyBjb25zdCBTYlN0cmluZ0xpc3QgJmdldERpcmVjdG9yaWVzKCk7CgoKCiAgICB2b2lkIHNl
dEZpbGVQb2ludGVyKEZJTEUgKm5ld0ZQKTsKCgoKCgogICAgU2JCb29sIG9wZW5GaWxlKGNvbnN0
IGNoYXIgKmZpbGVOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYkJvb2wg
b2tJZk5vdEZvdW5kID0gMCk7CgoKCiAgICBTYkJvb2wgcHVzaEZpbGUoY29uc3QgY2hhciAqZmls
ZU5hbWUpOwoKCiAgICB2b2lkIGNsb3NlRmlsZSgpOwoKCgoKICAgIFNiQm9vbCBpc1ZhbGlkRmls
ZSgpOwoKCiAgICBGSUxFICogZ2V0Q3VyRmlsZSgpIGNvbnN0OwoKCiAgICBjb25zdCBjaGFyICog
Z2V0Q3VyRmlsZU5hbWUoKSBjb25zdDsKCgoKICAgIHZvaWQgc2V0QnVmZmVyKHZvaWQgKmJ1ZlBv
aW50ZXIsIHNpemVfdCBidWZTaXplKTsKCgoKICAgIHNpemVfdCBnZXROdW1CeXRlc1JlYWQoKSBj
b25zdDsKCgogICAgU2JTdHJpbmcgZ2V0SGVhZGVyKCk7CgoKICAgIGZsb2F0IGdldElWVmVyc2lv
bigpCiAgICAgICAgeyByZXR1cm4gY3VyRmlsZS0+aXZWZXJzaW9uOyB9CgoKICBwdWJsaWM6Cgog
ICAgU2JCb29sIGlzQmluYXJ5KCk7CgoKCiAgICBTYkJvb2wgZ2V0KGNoYXIgJmMpOwoKCgogICAg
U2JCb29sIGdldEFTQ0lJQnVmZmVyKGNoYXIgJmMpOwoKCgogICAgU2JCb29sIGdldEFTQ0lJRmls
ZShjaGFyICZjKTsKCgoKICAgIFNiQm9vbCByZWFkSGV4KHVpbnQzMl90ICZsKTsKCgoKCiAgICBT
YkJvb2wgcmVhZChjaGFyICZjKTsKCiAgICBTYkJvb2wgcmVhZChTYlN0cmluZyAmcyk7CgogICAg
U2JCb29sIHJlYWQoU2JOYW1lICZuLCBTYkJvb2wgdmFsaWRJZGVudCA9IDApOwoKICAgIFNiQm9v
bCByZWFkKGludCAmaSk7CgogICAgU2JCb29sIHJlYWQodW5zaWduZWQgaW50ICZpKTsKCiAgICBT
YkJvb2wgcmVhZChzaG9ydCAmcyk7CgogICAgU2JCb29sIHJlYWQodW5zaWduZWQgc2hvcnQgJnMp
OwoKCgoKCgoKICAgIFNiQm9vbCByZWFkKGZsb2F0ICZmKTsKCiAgICBTYkJvb2wgcmVhZChkb3Vi
bGUgJmQpOwoKICAgIFNiQm9vbCByZWFkQmluYXJ5QXJyYXkodW5zaWduZWQgY2hhciAqYywgaW50
IGxlbmd0aCk7CgogICAgU2JCb29sIHJlYWRCaW5hcnlBcnJheShpbnQzMl90ICpsLCBpbnQgbGVu
Z3RoKTsKCiAgICBTYkJvb2wgcmVhZEJpbmFyeUFycmF5KGZsb2F0ICpmLCBpbnQgbGVuZ3RoKTsK
CiAgICBTYkJvb2wgcmVhZEJpbmFyeUFycmF5KGRvdWJsZSAqZCwgaW50IGxlbmd0aCk7CgoKICAg
IFNiQm9vbCBlb2YoKSBjb25zdDsKCiAgcHVibGljOgoKICAgIHN0YXRpYyB2b2lkIGluaXQoKTsK
CgogICAgU29JbnB1dChTb0lucHV0ICpkaWN0SW4pOwoKCgogICAgdm9pZCBnZXRMb2NhdGlvblN0
cmluZyhTYlN0cmluZyAmc3RyaW5nKSBjb25zdDsKCgogICAgdm9pZCBwdXRCYWNrKGNoYXIgYyk7
CiAgICB2b2lkIHB1dEJhY2soY29uc3QgY2hhciAqc3RyaW5nKTsKCgoKCiAgICB2b2lkIGFkZFJl
ZmVyZW5jZShjb25zdCBTYk5hbWUgJm5hbWUsIFNvQmFzZSAqYmFzZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNiQm9vbCBhZGRUb0dsb2JhbERpY3QgPSAxKTsKCgoKICAg
IHZvaWQgcmVtb3ZlUmVmZXJlbmNlKGNvbnN0IFNiTmFtZSAmbmFtZSk7CgoKICAgIFNvQmFzZSAq
IGZpbmRSZWZlcmVuY2UoY29uc3QgU2JOYW1lICZuYW1lKSBjb25zdDsKCiAgcHJpdmF0ZToKICAg
IHN0YXRpYyBTYlN0cmluZ0xpc3QgKmRpcmVjdG9yaWVzOwogICAgU2JQTGlzdCBmaWxlczsKICAg
IHN0cnVjdCBTb0lucHV0RmlsZSAqY3VyRmlsZTsKICAgIFNiU3RyaW5nIGJhY2tCdWY7CiAgICBp
bnQgYmFja0J1ZkluZGV4OwoKICAgIHZvaWQgKnRtcEJ1ZmZlcjsKICAgIGNoYXIgKmN1clRtcEJ1
ZjsKICAgIHNpemVfdCB0bXBCdWZTaXplOwoKICAgIGNoYXIgYmFja3VwQnVmWzhdOwoKICAgIFNi
Qm9vbCBiYWNrdXBCdWZVc2VkOwoKCiAgICB2b2lkIHNldElWVmVyc2lvbihmbG9hdCB2ZXJzaW9u
KQogICAgICAgIHsgY3VyRmlsZS0+aXZWZXJzaW9uID0gdmVyc2lvbjsgfQoKCiAgICBGSUxFICog
ZmluZEZpbGUoY29uc3QgY2hhciAqZmlsZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNiU3RyaW5nICZmdWxsTmFtZSkgY29uc3Q7CgoKICAgIHZvaWQgaW5pdEZpbGUoRklM
RSAqbmV3RlAsIGNvbnN0IGNoYXIgKmZpbGVOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTYlN0cmluZyAqZnVsbE5hbWUsIFNiQm9vbCBvcGVuZWRIZXJlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTYkRpY3QgKnJlZkRpY3QgPSBfX251bGwpOwoKCgogICAg
U2JCb29sIGNoZWNrSGVhZGVyKCk7CgoKICAgIFNiQm9vbCBmcm9tQnVmZmVyKCkgY29uc3QKICAg
ICAgICB7IHJldHVybiAoY3VyRmlsZS0+YnVmZmVyICE9IF9fbnVsbCk7IH0KCgoKICAgIFNiQm9v
bCBza2lwV2hpdGVTcGFjZSgpOwoKCiAgICBTYkJvb2wgcG9wRmlsZSgpOwoKCiAgICBzaXplX3Qg
ZnJlZUJ5dGVzSW5CdWYoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIChjdXJGaWxlLT5idWZTaXpl
IC0KICAgICAgICAgICAgICAgICAgKGN1ckZpbGUtPmN1ckJ1ZiAtIChjaGFyICopIGN1ckZpbGUt
PmJ1ZmZlcikpOyB9CgoKCiAgICBTYkJvb2wgcmVhZEludGVnZXIoaW50MzJfdCAmbCk7CiAgICBT
YkJvb2wgcmVhZFVuc2lnbmVkSW50ZWdlcih1aW50MzJfdCAmbCk7CiAgICBTYkJvb2wgcmVhZFJl
YWwoZG91YmxlICZkKTsKCgoKICAgIFNiQm9vbCByZWFkVW5zaWduZWRJbnRlZ2VyU3RyaW5nKGNo
YXIgKnN0cik7CgoKCiAgICBpbnQgcmVhZERpZ2l0cyhjaGFyICpzdHJpbmcpOwogICAgaW50IHJl
YWRIZXhEaWdpdHMoY2hhciAqc3RyaW5nKTsKCgogICAgaW50IHJlYWRDaGFyKGNoYXIgKnN0cmlu
ZywgY2hhciBjaGFyVG9SZWFkKTsKCgogICAgU2JCb29sIG1ha2VSb29tSW5CdWYoc2l6ZV90IG5C
eXRlcyk7CgoKICAgIHZvaWQgY29udmVydFNob3J0KGNoYXIgKmZyb20sIHNob3J0ICpzKTsKICAg
IHZvaWQgY29udmVydEludDMyKGNoYXIgKmZyb20sIGludDMyX3QgKmwpOwogICAgdm9pZCBjb252
ZXJ0RmxvYXQoY2hhciAqZnJvbSwgZmxvYXQgKmYpOwogICAgdm9pZCBjb252ZXJ0RG91YmxlKGNo
YXIgKmZyb20sIGRvdWJsZSAqZCk7CiAgICB2b2lkIGNvbnZlcnRTaG9ydEFycmF5KCBjaGFyICpm
cm9tLCByZWdpc3RlciBzaG9ydCAqdG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVn
aXN0ZXIgaW50IGxlbik7CiAgICB2b2lkIGNvbnZlcnRJbnQzMkFycmF5KCBjaGFyICpmcm9tLCBy
ZWdpc3RlciBpbnQzMl90ICp0bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3Rl
ciBpbnQgbGVuKTsKICAgIHZvaWQgY29udmVydEZsb2F0QXJyYXkoIGNoYXIgKmZyb20sIHJlZ2lz
dGVyIGZsb2F0ICp0bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBpbnQg
bGVuKTsKICAgIHZvaWQgY29udmVydERvdWJsZUFycmF5KCBjaGFyICpmcm9tLCByZWdpc3RlciBk
b3VibGUgKnRvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCBsZW4p
OwpmcmllbmQgY2xhc3MgU29CYXNlOwpmcmllbmQgY2xhc3MgU29EQjsKfTsKIyAxMzEgIi4uLy4u
Ly4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2ZpZWxkcy9Tb1N1YkZpZWxk
LmgiIDIKIyAxICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9T
b091dHB1dC5oIiAxCiMgNjYgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0lu
dmVudG9yL1NvT3V0cHV0LmgiCmNsYXNzIFNvQmFzZTsKCnR5cGVkZWYgdm9pZCAqU29PdXRwdXRS
ZWFsbG9jQ0Iodm9pZCAqcHRyLCBzaXplX3QgbmV3U2l6ZSk7CiMgOTYgIi4uLy4uLy4uLy4uLy4u
L2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL1NvT3V0cHV0LmgiCmNsYXNzIFNvT3V0cHV0
IHsKIHB1YmxpYzoKCgogICAgU29PdXRwdXQoKTsKCgogICAgflNvT3V0cHV0KCk7CgoKCiAgICB2
b2lkIHNldEZpbGVQb2ludGVyKEZJTEUgKm5ld0ZQKTsKCgoKICAgIEZJTEUgKiBnZXRGaWxlUG9p
bnRlcigpIGNvbnN0OwoKCiAgICBTYkJvb2wgb3BlbkZpbGUoY29uc3QgY2hhciAqZmlsZU5hbWUp
OwoKCiAgICB2b2lkIGNsb3NlRmlsZSgpOwoKCgoKICAgIHZvaWQgc2V0QnVmZmVyKHZvaWQgKmJ1
ZlBvaW50ZXIsIHNpemVfdCBpbml0U2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNvT3V0cHV0UmVhbGxvY0NCICpyZWFsbG9jRnVuYywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludDMyX3Qgb2Zmc2V0ID0gMCk7CgoKCgoKICAgIFNiQm9vbCBnZXRCdWZm
ZXIodm9pZCAqJmJ1ZlBvaW50ZXIsIHNpemVfdCAmbkJ5dGVzKSBjb25zdDsKCgoKICAgIHNpemVf
dCBnZXRCdWZmZXJTaXplKCkgY29uc3QgeyByZXR1cm4gYnVmU2l6ZTsgfQoKCgogICAgdm9pZCBy
ZXNldEJ1ZmZlcigpOwoKCgogICAgdm9pZCBzZXRCaW5hcnkoU2JCb29sIGZsYWcpOwoKCgogICAg
U2JCb29sIGlzQmluYXJ5KCkgY29uc3QgeyByZXR1cm4gYmluYXJ5OyB9CgoKCiAgICB2b2lkIHNl
dEhlYWRlclN0cmluZyhjb25zdCBTYlN0cmluZyAmc3RyKTsKCgogICAgdm9pZCByZXNldEhlYWRl
clN0cmluZygpOwoKCiAgICBzdGF0aWMgU2JTdHJpbmcgZ2V0RGVmYXVsdEFTQ0lJSGVhZGVyKCk7
CgogICAgc3RhdGljIFNiU3RyaW5nIGdldERlZmF1bHRCaW5hcnlIZWFkZXIoKTsKCgoKICAgIHZv
aWQgc2V0RmxvYXRQcmVjaXNpb24oaW50IHByZWNpc2lvbik7CgogIHB1YmxpYzoKCgogICAgZW51
bSBTdGFnZSB7CiAgICAgICAgQ09VTlRfUkVGUywKICAgICAgICBXUklURQogICAgfTsKCgogICAg
dm9pZCBzZXRTdGFnZShTdGFnZSBzdGFnZSkgeyBjdXJTdGFnZSA9IHN0YWdlOyB9CiAgICBTdGFn
ZSBnZXRTdGFnZSgpIGNvbnN0IHsgcmV0dXJuIGN1clN0YWdlOyB9CgoKCiAgICB2b2lkIGluY3Jl
bWVudEluZGVudChpbnQgYW1vdW50ID0gMSkKICAgICAgICB7IGluZGVudExldmVsICs9IGFtb3Vu
dDsgfQogICAgdm9pZCBkZWNyZW1lbnRJbmRlbnQoaW50IGFtb3VudCA9IDEpCiAgICAgICAgeyBp
bmRlbnRMZXZlbCAtPSBhbW91bnQ7IH0KCgoKICAgIHZvaWQgd3JpdGUoY2hhciBjKTsKCiAgICB2
b2lkIHdyaXRlKGNvbnN0IGNoYXIgKnMpOwoKICAgIHZvaWQgd3JpdGUoY29uc3QgU2JTdHJpbmcg
JnMpOwoKICAgIHZvaWQgd3JpdGUoY29uc3QgU2JOYW1lICZuKTsKCiAgICB2b2lkIHdyaXRlKGlu
dCBpKTsKCiAgICB2b2lkIHdyaXRlKHVuc2lnbmVkIGludCBpKTsKCiAgICB2b2lkIHdyaXRlKHNo
b3J0IHMpOwoKICAgIHZvaWQgd3JpdGUodW5zaWduZWQgc2hvcnQgcyk7CgoKCgoKCgogICAgdm9p
ZCB3cml0ZShmbG9hdCBmKTsKCiAgICB2b2lkIHdyaXRlKGRvdWJsZSBkKTsKCiAgICB2b2lkIHdy
aXRlQmluYXJ5QXJyYXkodW5zaWduZWQgY2hhciAqYywgaW50IGxlbmd0aCk7CgogICAgdm9pZCB3
cml0ZUJpbmFyeUFycmF5KGludDMyX3QgKmwsIGludCBsZW5ndGgpOwoKICAgIHZvaWQgd3JpdGVC
aW5hcnlBcnJheShmbG9hdCAqZiwgaW50IGxlbmd0aCk7CgogICAgdm9pZCB3cml0ZUJpbmFyeUFy
cmF5KGRvdWJsZSAqZCwgaW50IGxlbmd0aCk7CgoKICAgIHZvaWQgaW5kZW50KCk7CgogIHB1Ymxp
YzoKCiAgICBTb091dHB1dChTb091dHB1dCAqZGljdE91dCk7CgoKICAgIHZvaWQgcmVzZXQoKTsK
CgoKICAgIHZvaWQgc2V0Q29tcGFjdChTYkJvb2wgZmxhZykgeyBjb21wYWN0ID0gZmxhZzsgfQog
ICAgU2JCb29sIGlzQ29tcGFjdCgpIGNvbnN0IHsgcmV0dXJuIGNvbXBhY3Q7IH0KCgoKICAgIGVu
dW0gQW5ub3RhdGlvbnMgewogICAgICAgIEFERFJFU1NFUyA9ICgxPDwwKSwKICAgICAgICBSRUZf
Q09VTlRTID0gKDE8PDEpCiAgICB9OwogICAgdm9pZCBzZXRBbm5vdGF0aW9uKHVpbnQzMl90IGJp
dHMpCiAgICAgICAgeyBhbm5vdGF0aW9uID0gYml0czsgfQogICAgdWludDMyX3QgZ2V0QW5ub3Rh
dGlvbigpCiAgICAgICAgeyByZXR1cm4gKGlzQ29tcGFjdCgpIHx8IGlzQmluYXJ5KCkpID8gMCA6
IGFubm90YXRpb247IH0KCiAgcHJpdmF0ZToKICAgIEZJTEUgKmZwOwogICAgU2JCb29sIHRvQnVm
ZmVyOwogICAgY2hhciAqdG1wQnVmZmVyOwogICAgdm9pZCAqYnVmZmVyOwogICAgY2hhciAqY3Vy
QnVmOwogICAgc2l6ZV90IGJ1ZlNpemU7CiAgICBzaXplX3QgdG1wQnVmU2l6ZTsKICAgIFNvT3V0
cHV0UmVhbGxvY0NCICpyZWFsbG9jRnVuYzsKICAgIFNiQm9vbCBvcGVuZWRIZXJlOwogICAgU2JC
b29sIGJpbmFyeTsKICAgIFNiQm9vbCBjb21wYWN0OwogICAgU2JCb29sIHdyb3RlSGVhZGVyOwog
ICAgaW50IGluZGVudExldmVsOwogICAgU2JEaWN0ICpyZWZEaWN0OwogICAgU2JCb29sIGJvcnJv
d2VkRGljdDsKICAgIGludCByZWZJZENvdW50OwogICAgU2JCb29sIGFueVJlZjsKICAgIHVpbnQz
Ml90IGFubm90YXRpb247CiAgICBTdGFnZSBjdXJTdGFnZTsKICAgIFNiU3RyaW5nIGhlYWRlclN0
cmluZzsKICAgIFNiU3RyaW5nIGZtdFN0cmluZzsKCgogICAgdm9pZCB3cml0ZUhlYWRlcigpOwoK
CgogICAgc3RhdGljIFNiU3RyaW5nIHBhZEhlYWRlcihjb25zdCBTYlN0cmluZyAmaW5TdHJpbmcp
OwoKCiAgICBTYkJvb2wgaXNUb0J1ZmZlcigpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gdG9CdWZm
ZXI7IH0KCgogICAgc2l6ZV90IGJ5dGVzSW5CdWYoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIChj
dXJCdWYgLSAoY2hhciAqKSBidWZmZXIpOyB9CgoKICAgIFNiQm9vbCBtYWtlUm9vbUluQnVmKHNp
emVfdCBuQnl0ZXMpOwoKCiAgICBTYkJvb2wgbWFrZVJvb21JblRtcEJ1ZihzaXplX3QgbkJ5dGVz
KTsKCgoKICAgIGludCBhZGRSZWZlcmVuY2UoY29uc3QgU29CYXNlICpiYXNlKTsKCgoKICAgIGlu
dCBmaW5kUmVmZXJlbmNlKGNvbnN0IFNvQmFzZSAqYmFzZSkgY29uc3Q7CgoKICAgIHZvaWQgY29u
dmVydFNob3J0KHNob3J0IHMsIGNoYXIgKnRvKTsKICAgIHZvaWQgY29udmVydEludDMyKGludDMy
X3QgbCwgY2hhciAqdG8pOwogICAgdm9pZCBjb252ZXJ0RmxvYXQoZmxvYXQgZiwgY2hhciAqdG8p
OwogICAgdm9pZCBjb252ZXJ0RG91YmxlKGRvdWJsZSBkLCBjaGFyICp0byk7CiAgICB2b2lkIGNv
bnZlcnRTaG9ydEFycmF5KCBzaG9ydCAqZnJvbSwgY2hhciAqdG8sIGludCBsZW4pOwogICAgdm9p
ZCBjb252ZXJ0SW50MzJBcnJheSggaW50MzJfdCAqZnJvbSwgY2hhciAqdG8sIGludCBsZW4pOwog
ICAgdm9pZCBjb252ZXJ0RmxvYXRBcnJheSggZmxvYXQgKmZyb20sIGNoYXIgKnRvLCBpbnQgbGVu
KTsKICAgIHZvaWQgY29udmVydERvdWJsZUFycmF5KCBkb3VibGUgKmZyb20sIGNoYXIgKnRvLCBp
bnQgbGVuKTsKCmZyaWVuZCBjbGFzcyBTb0Jhc2U7CmZyaWVuZCBjbGFzcyBTb0RCOwp9OwojIDEz
MiAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZmllbGRzL1Nv
U3ViRmllbGQuaCIgMgojIDY4ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9J
bnZlbnRvci9maWVsZHMvU29NRkVudW0uaCIgMgojIDc5ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0
YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9maWVsZHMvU29NRkVudW0uaCIKY2xhc3MgU29NRkVudW0g
OiBwdWJsaWMgU29NRmllbGQgewoKCiAgICBwdWJsaWM6IHZpcnR1YWwgU29UeXBlIGdldFR5cGVJ
ZCgpIGNvbnN0OyBzdGF0aWMgU29UeXBlIGdldENsYXNzVHlwZUlkKCkgeyByZXR1cm4gY2xhc3NU
eXBlSWQ7IH0gY29uc3QgU29NRkVudW0gJiBvcGVyYXRvciA9KGNvbnN0IFNvTUZFbnVtICZmKTsg
cHVibGljOiB2aXJ0dWFsIHZvaWQgY29weUZyb20oY29uc3QgU29GaWVsZCAmZik7IHN0YXRpYyB2
b2lkICogY3JlYXRlSW5zdGFuY2UoKTsgdmlydHVhbCBTYkJvb2wgaXNTYW1lKGNvbnN0IFNvRmll
bGQgJmYpIGNvbnN0OyBwcml2YXRlOiBzdGF0aWMgU29UeXBlIGNsYXNzVHlwZUlkOyBwdWJsaWM6
IFNvTUZFbnVtKCk7IHZpcnR1YWwgflNvTUZFbnVtKCk7IHByaXZhdGU6IHZpcnR1YWwgU2JCb29s
IHJlYWQxVmFsdWUoU29JbnB1dCAqaW4sIGludCBpbmRleCk7IHZpcnR1YWwgdm9pZCB3cml0ZTFW
YWx1ZShTb091dHB1dCAqb3V0LCBpbnQgaW5kZXgpIGNvbnN0OyBwdWJsaWM6IGludCBvcGVyYXRv
ciBbXShpbnQgaSkgY29uc3QgeyBldmFsdWF0ZSgpOyByZXR1cm4gdmFsdWVzW2ldOyB9IGNvbnN0
IGludCAqIGdldFZhbHVlcyhpbnQgc3RhcnQpIGNvbnN0IHsgZXZhbHVhdGUoKTsgcmV0dXJuIChj
b25zdCBpbnQgKikodmFsdWVzICsgc3RhcnQpOyB9IGludCBmaW5kKGludCB0YXJnZXRWYWx1ZSwg
U2JCb29sIGFkZElmTm90Rm91bmQgPSAwKTsgdm9pZCBzZXRWYWx1ZXMoaW50IHN0YXJ0LCBpbnQg
bnVtLCBjb25zdCBpbnQgKm5ld1ZhbHVlcyk7IHZvaWQgc2V0MVZhbHVlKGludCBpbmRleCwgaW50
IG5ld1ZhbHVlKTsgdm9pZCBzZXRWYWx1ZShpbnQgbmV3VmFsdWUpOyBpbnQgb3BlcmF0b3IgPShp
bnQgbmV3VmFsdWUpIHsgc2V0VmFsdWUobmV3VmFsdWUpOyByZXR1cm4gbmV3VmFsdWU7IH0gaW50
IG9wZXJhdG9yID09KGNvbnN0IFNvTUZFbnVtICZmKSBjb25zdDsgaW50IG9wZXJhdG9yICE9KGNv
bnN0IFNvTUZFbnVtICZmKSBjb25zdCB7IHJldHVybiAhICgoKnRoaXMpID09IGYpOyB9IGludCAq
IHN0YXJ0RWRpdGluZygpIHsgZXZhbHVhdGUoKTsgcmV0dXJuIHZhbHVlczsgfSB2b2lkIGZpbmlz
aEVkaXRpbmcoKSB7IHZhbHVlQ2hhbmdlZCgpOyB9IHByb3RlY3RlZDogdmlydHVhbCB2b2lkIGFs
bG9jVmFsdWVzKGludCBuZXdOdW0pOyB2aXJ0dWFsIHZvaWQgZGVsZXRlQWxsVmFsdWVzKCk7IHZp
cnR1YWwgdm9pZCBjb3B5VmFsdWUoaW50IHRvLCBpbnQgZnJvbSk7IGludCAqdmFsdWVzOwoKICBw
dWJsaWM6CgoKCgoKCiAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFNiTmFtZSAmbmFtZSk7CgoKCiAg
ICB2b2lkIHNldDFWYWx1ZShpbnQgaW5kZXgsIGNvbnN0IFNiTmFtZSAmbmFtZSk7CgogIHB1Ymxp
YzoKCiAgICB2b2lkIHNldEVudW1zKGludCBudW0sIGludCAqdmFscywgU2JOYW1lICpuYW1lcyk7
CgogIHB1YmxpYzoKICAgIHN0YXRpYyB2b2lkIGluaXRDbGFzcygpOwoKICBwcm90ZWN0ZWQ6CiAg
ICBTYkJvb2wgbGVnYWxWYWx1ZXNTZXQ7CiAgICBpbnQgbnVtRW51bXM7CiAgICBpbnQgKmVudW1W
YWx1ZXM7CiAgICBTYk5hbWUgKmVudW1OYW1lczsKCgogICAgdmlydHVhbCBTYkJvb2wgZmluZEVu
dW1WYWx1ZShjb25zdCBTYk5hbWUgJm5hbWUsIGludCAmdmFsKTsKCgogICAgdmlydHVhbCBTYkJv
b2wgZmluZEVudW1OYW1lKGludCB2YWwsIGNvbnN0IFNiTmFtZSAqJm5hbWUpIGNvbnN0Owp9Owoj
IDY0ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9lbmdpbmVz
L1NvQm9vbE9wZXJhdGlvbi5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2lu
Y2x1ZGUvSW52ZW50b3IvZmllbGRzL1NvTUZCb29sLmgiIDEKIyA2OCAiLi4vLi4vLi4vLi4vLi4v
bGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZmllbGRzL1NvTUZCb29sLmgiCmNsYXNzIFNv
TUZCb29sIDogcHVibGljIFNvTUZpZWxkIHsKCiAgICBwdWJsaWM6IHZpcnR1YWwgU29UeXBlIGdl
dFR5cGVJZCgpIGNvbnN0OyBzdGF0aWMgU29UeXBlIGdldENsYXNzVHlwZUlkKCkgeyByZXR1cm4g
Y2xhc3NUeXBlSWQ7IH0gY29uc3QgU29NRkJvb2wgJiBvcGVyYXRvciA9KGNvbnN0IFNvTUZCb29s
ICZmKTsgcHVibGljOiB2aXJ0dWFsIHZvaWQgY29weUZyb20oY29uc3QgU29GaWVsZCAmZik7IHN0
YXRpYyB2b2lkICogY3JlYXRlSW5zdGFuY2UoKTsgdmlydHVhbCBTYkJvb2wgaXNTYW1lKGNvbnN0
IFNvRmllbGQgJmYpIGNvbnN0OyBwcml2YXRlOiBzdGF0aWMgU29UeXBlIGNsYXNzVHlwZUlkOyBw
dWJsaWM6IFNvTUZCb29sKCk7IHZpcnR1YWwgflNvTUZCb29sKCk7IHByaXZhdGU6IHZpcnR1YWwg
U2JCb29sIHJlYWQxVmFsdWUoU29JbnB1dCAqaW4sIGludCBpbmRleCk7IHZpcnR1YWwgdm9pZCB3
cml0ZTFWYWx1ZShTb091dHB1dCAqb3V0LCBpbnQgaW5kZXgpIGNvbnN0OyBwdWJsaWM6IFNiQm9v
bCBvcGVyYXRvciBbXShpbnQgaSkgY29uc3QgeyBldmFsdWF0ZSgpOyByZXR1cm4gdmFsdWVzW2ld
OyB9IGNvbnN0IFNiQm9vbCAqIGdldFZhbHVlcyhpbnQgc3RhcnQpIGNvbnN0IHsgZXZhbHVhdGUo
KTsgcmV0dXJuIChjb25zdCBTYkJvb2wgKikodmFsdWVzICsgc3RhcnQpOyB9IGludCBmaW5kKFNi
Qm9vbCB0YXJnZXRWYWx1ZSwgU2JCb29sIGFkZElmTm90Rm91bmQgPSAwKTsgdm9pZCBzZXRWYWx1
ZXMoaW50IHN0YXJ0LCBpbnQgbnVtLCBjb25zdCBTYkJvb2wgKm5ld1ZhbHVlcyk7IHZvaWQgc2V0
MVZhbHVlKGludCBpbmRleCwgU2JCb29sIG5ld1ZhbHVlKTsgdm9pZCBzZXRWYWx1ZShTYkJvb2wg
bmV3VmFsdWUpOyBTYkJvb2wgb3BlcmF0b3IgPShTYkJvb2wgbmV3VmFsdWUpIHsgc2V0VmFsdWUo
bmV3VmFsdWUpOyByZXR1cm4gbmV3VmFsdWU7IH0gaW50IG9wZXJhdG9yID09KGNvbnN0IFNvTUZC
b29sICZmKSBjb25zdDsgaW50IG9wZXJhdG9yICE9KGNvbnN0IFNvTUZCb29sICZmKSBjb25zdCB7
IHJldHVybiAhICgoKnRoaXMpID09IGYpOyB9IFNiQm9vbCAqIHN0YXJ0RWRpdGluZygpIHsgZXZh
bHVhdGUoKTsgcmV0dXJuIHZhbHVlczsgfSB2b2lkIGZpbmlzaEVkaXRpbmcoKSB7IHZhbHVlQ2hh
bmdlZCgpOyB9IHByb3RlY3RlZDogdmlydHVhbCB2b2lkIGFsbG9jVmFsdWVzKGludCBuZXdOdW0p
OyB2aXJ0dWFsIHZvaWQgZGVsZXRlQWxsVmFsdWVzKCk7IHZpcnR1YWwgdm9pZCBjb3B5VmFsdWUo
aW50IHRvLCBpbnQgZnJvbSk7IFNiQm9vbCAqdmFsdWVzOwoKICBwdWJsaWM6CiAgICBzdGF0aWMg
dm9pZCBpbml0Q2xhc3MoKTsKCiAgcHJpdmF0ZToKCiAgICB2aXJ0dWFsIGludCBnZXROdW1WYWx1
ZXNQZXJMaW5lKCkgY29uc3Q7Cn07CiMgNjUgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9p
bmNsdWRlL0ludmVudG9yL2VuZ2luZXMvU29Cb29sT3BlcmF0aW9uLmgiIDIKCgoKCmNsYXNzIFNv
Qm9vbE9wZXJhdGlvbiA6IHB1YmxpYyBTb0VuZ2luZSB7CgogICAgcHVibGljOiBzdGF0aWMgU29U
eXBlIGdldENsYXNzVHlwZUlkKCkgeyByZXR1cm4gY2xhc3NUeXBlSWQ7IH0gdmlydHVhbCBTb1R5
cGUgZ2V0VHlwZUlkKCkgY29uc3Q7IHB1YmxpYzogdmlydHVhbCBjb25zdCBTb0ZpZWxkRGF0YSAq
IGdldEZpZWxkRGF0YSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAq
IGdldE91dHB1dERhdGEoKSBjb25zdDsgcHJvdGVjdGVkOiBzdGF0aWMgY29uc3QgU29GaWVsZERh
dGEgKiogZ2V0SW5wdXREYXRhUHRyKCkgeyByZXR1cm4gKGNvbnN0IFNvRmllbGREYXRhICoqKSZp
bnB1dERhdGE7IH0gc3RhdGljIGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqKiBnZXRPdXRwdXRE
YXRhUHRyKCkgeyByZXR1cm4gKGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqKikmb3V0cHV0RGF0
YTsgfSBwcml2YXRlOiBzdGF0aWMgU29UeXBlIGNsYXNzVHlwZUlkOyBzdGF0aWMgU2JCb29sIGZp
cnN0SW5zdGFuY2U7IHN0YXRpYyBTb0ZpZWxkRGF0YSAqaW5wdXREYXRhOyBzdGF0aWMgU29Fbmdp
bmVPdXRwdXREYXRhICpvdXRwdXREYXRhOyBzdGF0aWMgY29uc3QgU29GaWVsZERhdGEgKipwYXJl
bnRJbnB1dERhdGE7IHN0YXRpYyBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKipwYXJlbnRPdXRw
dXREYXRhOyBwcml2YXRlOiBzdGF0aWMgdm9pZCAqY3JlYXRlSW5zdGFuY2UoKTsKCiAgcHVibGlj
OgoKICAgIGVudW0gT3BlcmF0aW9uIHsKICAgICAgICAgICAgQ0xFQVIsCiAgICAgICAgICAgICBT
RVQsCiAgICAgICAgICAgIEEsCiAgICAgICAgTk9UX0EsCiAgICAgICAgICAgICAgICAgQiwKICAg
ICAgICAgICAgICAgICBOT1RfQiwKICAgICAgICAgICAgQV9PUl9CLAogICAgICAgIE5PVF9BX09S
X0IsCiAgICAgICAgICAgIEFfT1JfTk9UX0IsCiAgICAgICAgTk9UX0FfT1JfTk9UX0IsCiAgICAg
ICAgICAgIEFfQU5EX0IsCiAgICAgICAgTk9UX0FfQU5EX0IsCiAgICAgICAgICAgIEFfQU5EX05P
VF9CLAogICAgICAgIE5PVF9BX0FORF9OT1RfQiwKICAgICAgICAgICAgQV9FUVVBTFNfQiwKICAg
ICAgICAgICAgQV9OT1RfRVFVQUxTX0IKICAgIH07CgoKICAgIFNvTUZCb29sIGE7CiAgICBTb01G
Qm9vbCBiOwogICAgU29NRkVudW0gb3BlcmF0aW9uOwoKCiAgICBTb0VuZ2luZU91dHB1dCBvdXRw
dXQ7CiAgICBTb0VuZ2luZU91dHB1dCBpbnZlcnNlOwoKCiAgICBTb0Jvb2xPcGVyYXRpb24oKTsK
CiAgcHVibGljOgoKICAgIHN0YXRpYyB2b2lkIGluaXRDbGFzcygpOwoKICBwcml2YXRlOgoKCiAg
ICB+U29Cb29sT3BlcmF0aW9uKCk7CgoKICAgIHZpcnR1YWwgdm9pZCBldmFsdWF0ZSgpOwp9Owoj
IDU1ICJTb0Jvb2xPcGVyYXRpb24uYysrIiAyCiMgMSAiU29FbmdpbmVVdGlsLmgiIDEKIyA1OSAi
U29FbmdpbmVVdGlsLmgiCnN0YXRpYyBpbmxpbmUgaW50IG1heChpbnQgYSwgaW50IGIpCnsgcmV0
dXJuIChhID4gYikgPyBhIDogYjsgfQoKc3RhdGljIGlubGluZSBpbnQgbWF4KGludCBhLCBpbnQg
YiwgaW50IGMpCnsgcmV0dXJuIChtYXgoYSxiKSA+IGMpID8gbWF4KGEsYikgOiBjOyB9CgpzdGF0
aWMgaW5saW5lIGludCBtYXgoaW50IGEsIGludCBiLCBpbnQgYywgaW50IGQpCnsgcmV0dXJuIG1h
eChtYXgoYSxiLGMpLCBkKTsgfQoKc3RhdGljIGlubGluZSBpbnQgbWF4KGludCBhLCBpbnQgYiwg
aW50IGMsIGludCBkLCBpbnQgZSkKeyByZXR1cm4gbWF4KG1heChhLGIsYyxkKSwgZSk7IH0KCnN0
YXRpYyBpbmxpbmUgaW50IGNsYW1wKGludCBpLCBpbnQgbikKeyByZXR1cm4gKGkgPCBuKSA/IGkg
OiBuLTE7IH0KIyA1NiAiU29Cb29sT3BlcmF0aW9uLmMrKyIgMgoKU29UeXBlIFNvQm9vbE9wZXJh
dGlvbjo6Y2xhc3NUeXBlSWQ7IFNiQm9vbCBTb0Jvb2xPcGVyYXRpb246OmZpcnN0SW5zdGFuY2U9
MTsgU29FbmdpbmVPdXRwdXREYXRhICpTb0Jvb2xPcGVyYXRpb246Om91dHB1dERhdGE7IFNvRmll
bGREYXRhICogU29Cb29sT3BlcmF0aW9uOjppbnB1dERhdGE7IGNvbnN0IFNvRW5naW5lT3V0cHV0
RGF0YSAqKlNvQm9vbE9wZXJhdGlvbjo6cGFyZW50T3V0cHV0RGF0YTsgY29uc3QgU29GaWVsZERh
dGEgKiogU29Cb29sT3BlcmF0aW9uOjpwYXJlbnRJbnB1dERhdGE7IFNvVHlwZSBTb0Jvb2xPcGVy
YXRpb246OmdldFR5cGVJZCgpIGNvbnN0IHsgcmV0dXJuIGNsYXNzVHlwZUlkOyB9IGNvbnN0IFNv
RmllbGREYXRhICogU29Cb29sT3BlcmF0aW9uOjpnZXRGaWVsZERhdGEoKSBjb25zdCB7IHJldHVy
biBpbnB1dERhdGE7IH0gY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICogU29Cb29sT3BlcmF0aW9u
OjpnZXRPdXRwdXREYXRhKCkgY29uc3QgeyByZXR1cm4gb3V0cHV0RGF0YTsgfSB2b2lkICogU29C
b29sT3BlcmF0aW9uOjpjcmVhdGVJbnN0YW5jZSgpIHsgcmV0dXJuICh2b2lkICopKG5ldyBTb0Jv
b2xPcGVyYXRpb24pOyB9OwojIDY2ICJTb0Jvb2xPcGVyYXRpb24uYysrIgpTb0Jvb2xPcGVyYXRp
b246OlNvQm9vbE9wZXJhdGlvbigpCgoKewogICAgZG8geyB3aGlsZSgwKTsgaWYgKGlucHV0RGF0
YSA9PSBfX251bGwpIHsgaW5wdXREYXRhID0gbmV3IFNvRmllbGREYXRhKHBhcmVudElucHV0RGF0
YSA/ICpwYXJlbnRJbnB1dERhdGEgOiBfX251bGwpOyBvdXRwdXREYXRhID0gbmV3IFNvRW5naW5l
T3V0cHV0RGF0YShwYXJlbnRPdXRwdXREYXRhID8gKnBhcmVudE91dHB1dERhdGEgOiBfX251bGwp
OyB9IGVsc2UgZmlyc3RJbnN0YW5jZSA9IDA7IGlzQnVpbHRJbiA9IDA7IH0gd2hpbGUoMCk7CiAg
ICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgaW5wdXREYXRhLT5hZGRGaWVsZCh0
aGlzLCAiYSIsICZ0aGlzLT5hKTsgdGhpcy0+YS5zZXRWYWx1ZSAoMCk7IHRoaXMtPmEuc2V0Q29u
dGFpbmVyKHRoaXMpOyB9IHdoaWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYgKGZpcnN0SW5z
dGFuY2UpIGlucHV0RGF0YS0+YWRkRmllbGQodGhpcywgImIiLCAmdGhpcy0+Yik7IHRoaXMtPmIu
c2V0VmFsdWUgKDApOyB0aGlzLT5iLnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsKICAg
IGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFkZEZpZWxkKHRo
aXMsICJvcGVyYXRpb24iLCAmdGhpcy0+b3BlcmF0aW9uKTsgdGhpcy0+b3BlcmF0aW9uLnNldFZh
bHVlIChBKTsgdGhpcy0+b3BlcmF0aW9uLnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsK
ICAgIGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBvdXRwdXREYXRhLT5hZGRPdXRw
dXQodGhpcywgIm91dHB1dCIsICZ0aGlzLT5vdXRwdXQsIFNvTUZCb29sOjpnZXRDbGFzc1R5cGVJ
ZCgpKTsgdGhpcy0+b3V0cHV0LnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsKICAgIGRv
IHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBvdXRwdXREYXRhLT5hZGRPdXRwdXQodGhp
cywgImludmVyc2UiLCAmdGhpcy0+aW52ZXJzZSwgU29NRkJvb2w6OmdldENsYXNzVHlwZUlkKCkp
OyB0aGlzLT5pbnZlcnNlLnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsKCiAgICBkbyB7
IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgaW5wdXREYXRhLT5hZGRFbnVtVmFsdWUoIk9w
ZXJhdGlvbiIsICJDTEVBUiIsIENMRUFSKTsgfSB3aGlsZSAoMCk7CiAgICBkbyB7IHdoaWxlKDAp
OyBpZiAoZmlyc3RJbnN0YW5jZSkgaW5wdXREYXRhLT5hZGRFbnVtVmFsdWUoIk9wZXJhdGlvbiIs
ICJTRVQiLCBTRVQpOyB9IHdoaWxlICgwKTsKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdElu
c3RhbmNlKSBpbnB1dERhdGEtPmFkZEVudW1WYWx1ZSgiT3BlcmF0aW9uIiwgIkEiLCBBKTsgfSB3
aGlsZSAoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgaW5wdXREYXRh
LT5hZGRFbnVtVmFsdWUoIk9wZXJhdGlvbiIsICJOT1RfQSIsIE5PVF9BKTsgfSB3aGlsZSAoMCk7
CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgaW5wdXREYXRhLT5hZGRFbnVt
VmFsdWUoIk9wZXJhdGlvbiIsICJCIiwgQik7IH0gd2hpbGUgKDApOwogICAgZG8geyB3aGlsZSgw
KTsgaWYgKGZpcnN0SW5zdGFuY2UpIGlucHV0RGF0YS0+YWRkRW51bVZhbHVlKCJPcGVyYXRpb24i
LCAiTk9UX0IiLCBOT1RfQik7IH0gd2hpbGUgKDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYgKGZp
cnN0SW5zdGFuY2UpIGlucHV0RGF0YS0+YWRkRW51bVZhbHVlKCJPcGVyYXRpb24iLCAiQV9PUl9C
IiwgQV9PUl9CKTsgfSB3aGlsZSAoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0
YW5jZSkgaW5wdXREYXRhLT5hZGRFbnVtVmFsdWUoIk9wZXJhdGlvbiIsICJOT1RfQV9PUl9CIiwg
Tk9UX0FfT1JfQik7IH0gd2hpbGUgKDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYgKGZpcnN0SW5z
dGFuY2UpIGlucHV0RGF0YS0+YWRkRW51bVZhbHVlKCJPcGVyYXRpb24iLCAiQV9PUl9OT1RfQiIs
IEFfT1JfTk9UX0IpOyB9IHdoaWxlICgwKTsKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdElu
c3RhbmNlKSBpbnB1dERhdGEtPmFkZEVudW1WYWx1ZSgiT3BlcmF0aW9uIiwgIk5PVF9BX09SX05P
VF9CIiwgTk9UX0FfT1JfTk9UX0IpOyB9IHdoaWxlICgwKTsKICAgIGRvIHsgd2hpbGUoMCk7IGlm
IChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFkZEVudW1WYWx1ZSgiT3BlcmF0aW9uIiwgIkFf
QU5EX0IiLCBBX0FORF9CKTsgfSB3aGlsZSAoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoZmly
c3RJbnN0YW5jZSkgaW5wdXREYXRhLT5hZGRFbnVtVmFsdWUoIk9wZXJhdGlvbiIsICJOT1RfQV9B
TkRfQiIsIE5PVF9BX0FORF9CKTsgfSB3aGlsZSAoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAo
Zmlyc3RJbnN0YW5jZSkgaW5wdXREYXRhLT5hZGRFbnVtVmFsdWUoIk9wZXJhdGlvbiIsICJBX0FO
RF9OT1RfQiIsIEFfQU5EX05PVF9CKTsgfSB3aGlsZSAoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBp
ZiAoZmlyc3RJbnN0YW5jZSkgaW5wdXREYXRhLT5hZGRFbnVtVmFsdWUoIk9wZXJhdGlvbiIsICJO
T1RfQV9BTkRfTk9UX0IiLCBOT1RfQV9BTkRfTk9UX0IpOyB9IHdoaWxlICgwKTsKICAgIGRvIHsg
d2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFkZEVudW1WYWx1ZSgiT3Bl
cmF0aW9uIiwgIkFfRVFVQUxTX0IiLCBBX0VRVUFMU19CKTsgfSB3aGlsZSAoMCk7CiAgICBkbyB7
IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgaW5wdXREYXRhLT5hZGRFbnVtVmFsdWUoIk9w
ZXJhdGlvbiIsICJBX05PVF9FUVVBTFNfQiIsIEFfTk9UX0VRVUFMU19CKTsgfSB3aGlsZSAoMCk7
CgogICAgZG8geyBpbnQgX3NvX21mX2VudW1fbnVtOyBpbnQgKl9zb19tZl9lbnVtX3ZhbHM7IFNi
TmFtZSAqX3NvX21mX2VudW1fbmFtZXM7IGlucHV0RGF0YS0+Z2V0RW51bURhdGEoIk9wZXJhdGlv
biIsIF9zb19tZl9lbnVtX251bSwgX3NvX21mX2VudW1fdmFscywgX3NvX21mX2VudW1fbmFtZXMp
OyB3aGlsZSgwKTsgb3BlcmF0aW9uLnNldEVudW1zKF9zb19tZl9lbnVtX251bSwgX3NvX21mX2Vu
dW1fdmFscywgX3NvX21mX2VudW1fbmFtZXMpOyB9IHdoaWxlICgwKTsKICAgIGlzQnVpbHRJbiA9
IDE7Cn0KIyAxMDYgIlNvQm9vbE9wZXJhdGlvbi5jKysiClNvQm9vbE9wZXJhdGlvbjo6flNvQm9v
bE9wZXJhdGlvbigpCgoKewp9CiMgMTE5ICJTb0Jvb2xPcGVyYXRpb24uYysrIgp2b2lkClNvQm9v
bE9wZXJhdGlvbjo6ZXZhbHVhdGUoKQoKCnsKICAgIGludCBuYSA9IGEuZ2V0TnVtKCk7CiAgICBp
bnQgbmIgPSBiLmdldE51bSgpOwogICAgaW50IG5vcGVyYXRpb24gPSBvcGVyYXRpb24uZ2V0TnVt
KCk7CiAgICBpbnQgbm91dCA9IG1heChuYSxuYixub3BlcmF0aW9uKTsKICAgIGRvIHsgaWYgKG91
dHB1dC5pc0VuYWJsZWQoKSkgeyBmb3IgKGludCBfZW5nX291dF9pID0gMDsgX2VuZ19vdXRfaSA8
IG91dHB1dC5nZXROdW1Db25uZWN0aW9ucygpOyBfZW5nX291dF9pKyspIHsgU29NRkJvb2wgKl9l
bmdfb3V0X3RlbXAgPSAoU29NRkJvb2wgKikgb3V0cHV0W19lbmdfb3V0X2ldOyBpZiAoIV9lbmdf
b3V0X3RlbXAtPmlzUmVhZE9ubHkoKSkgeyBfZW5nX291dF90ZW1wLT5zZXROdW0obm91dCk7IH0g
fSB9IH0gd2hpbGUoMCk7CiAgICBkbyB7IGlmIChpbnZlcnNlLmlzRW5hYmxlZCgpKSB7IGZvciAo
aW50IF9lbmdfb3V0X2kgPSAwOyBfZW5nX291dF9pIDwgaW52ZXJzZS5nZXROdW1Db25uZWN0aW9u
cygpOyBfZW5nX291dF9pKyspIHsgU29NRkJvb2wgKl9lbmdfb3V0X3RlbXAgPSAoU29NRkJvb2wg
KikgaW52ZXJzZVtfZW5nX291dF9pXTsgaWYgKCFfZW5nX291dF90ZW1wLT5pc1JlYWRPbmx5KCkp
IHsgX2VuZ19vdXRfdGVtcC0+c2V0TnVtKG5vdXQpOyB9IH0gfSB9IHdoaWxlKDApOwoKICAgIGZv
ciAoaW50IGk9MDsgaTxub3V0OyBpKyspIHsKICAgICAgICBTYkJvb2wgdmEgPSBhW2NsYW1wKGks
bmEpXTsKICAgICAgICBTYkJvb2wgdmIgPSBiW2NsYW1wKGksbmIpXTsKICAgICAgICBTYkJvb2wg
cmVzdWx0OwogICAgICAgIHN3aXRjaCAob3BlcmF0aW9uW2NsYW1wKGksbm9wZXJhdGlvbildKSB7
CiAgICAgICAgY2FzZSBDTEVBUjogcmVzdWx0ID0gMDsgYnJlYWs7CiAgICAgICAgY2FzZSBTRVQ6
IHJlc3VsdCA9IDE7IGJyZWFrOwogICAgICAgIGNhc2UgQTogcmVzdWx0ID0gdmE7IGJyZWFrOwog
ICAgICAgIGNhc2UgTk9UX0E6IHJlc3VsdCA9ICF2YTsgYnJlYWs7CiAgICAgICAgY2FzZSBCOiBy
ZXN1bHQgPSB2YjsgYnJlYWs7CiAgICAgICAgY2FzZSBOT1RfQjogcmVzdWx0ID0gIXZiOyBicmVh
azsKICAgICAgICBjYXNlIEFfT1JfQjogcmVzdWx0ID0gdmEgfHwgdmI7IGJyZWFrOwogICAgICAg
IGNhc2UgTk9UX0FfT1JfQjogcmVzdWx0ID0gKCF2YSkgfHwgdmI7IGJyZWFrOwogICAgICAgIGNh
c2UgQV9PUl9OT1RfQjogcmVzdWx0ID0gdmEgfHwgKCF2Yik7IGJyZWFrOwogICAgICAgIGNhc2Ug
Tk9UX0FfT1JfTk9UX0I6IHJlc3VsdCA9ICghdmEpIHx8ICghdmIpOyBicmVhazsKICAgICAgICBj
YXNlIEFfQU5EX0I6IHJlc3VsdCA9IHZhICYmIHZiOyBicmVhazsKICAgICAgICBjYXNlIE5PVF9B
X0FORF9COiByZXN1bHQgPSAoIXZhKSAmJiAodmIpOyBicmVhazsKICAgICAgICBjYXNlIEFfQU5E
X05PVF9COiByZXN1bHQgPSB2YSAmJiAoIXZiKTsgYnJlYWs7CiAgICAgICAgY2FzZSBOT1RfQV9B
TkRfTk9UX0I6IHJlc3VsdCA9ICghdmEpICYmICghdmIpOyBicmVhazsKICAgICAgICBjYXNlIEFf
RVFVQUxTX0I6IHJlc3VsdCA9ICh2YSA9PSB2Yik7IGJyZWFrOwogICAgICAgIGNhc2UgQV9OT1Rf
RVFVQUxTX0I6IHJlc3VsdCA9ICh2YSAhPSB2Yik7IGJyZWFrOwogICAgICAgIH0KCiAgICAgICAg
ZG8geyBpZiAob3V0cHV0LmlzRW5hYmxlZCgpKSB7IGZvciAoaW50IF9lbmdfb3V0X2kgPSAwOyBf
ZW5nX291dF9pIDwgb3V0cHV0LmdldE51bUNvbm5lY3Rpb25zKCk7IF9lbmdfb3V0X2krKykgeyBT
b01GQm9vbCAqX2VuZ19vdXRfdGVtcCA9IChTb01GQm9vbCAqKSBvdXRwdXRbX2VuZ19vdXRfaV07
IGlmICghX2VuZ19vdXRfdGVtcC0+aXNSZWFkT25seSgpKSB7IF9lbmdfb3V0X3RlbXAtPnNldDFW
YWx1ZShpLCByZXN1bHQpOyB9IH0gfSB9IHdoaWxlKDApOwogICAgICAgIGRvIHsgaWYgKGludmVy
c2UuaXNFbmFibGVkKCkpIHsgZm9yIChpbnQgX2VuZ19vdXRfaSA9IDA7IF9lbmdfb3V0X2kgPCBp
bnZlcnNlLmdldE51bUNvbm5lY3Rpb25zKCk7IF9lbmdfb3V0X2krKykgeyBTb01GQm9vbCAqX2Vu
Z19vdXRfdGVtcCA9IChTb01GQm9vbCAqKSBpbnZlcnNlW19lbmdfb3V0X2ldOyBpZiAoIV9lbmdf
b3V0X3RlbXAtPmlzUmVhZE9ubHkoKSkgeyBfZW5nX291dF90ZW1wLT5zZXQxVmFsdWUoaSwgIXJl
c3VsdCk7IH0gfSB9IH0gd2hpbGUoMCk7CiAgICB9Cn0KIyA0MiAiU29FbmdpbmVzLmMrKyIgMgoj
IDEgIlNvQ2FsY0V4cHIuYysrIiAxCiMgNTQgIlNvQ2FsY0V4cHIuYysrIgojIDEgIi91c3IvbGli
L2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMy4yL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDU1
ICJTb0NhbGNFeHByLmMrKyIgMgojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzCiMgMzMg
Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRo
YXQtbGludXgvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3Rk
bGliLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2Fp
dGZsYWdzLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL3dhaXRzdGF0dXMuaCIgMSAzCiMgNjUgIi91c3IvaW5jbHVkZS9iaXRzL3dh
aXRzdGF0dXMuaCIgMwp1bmlvbiB3YWl0CiAgewogICAgaW50IHdfc3RhdHVzOwogICAgc3RydWN0
CiAgICAgIHsKCiAgICAgICAgdW5zaWduZWQgaW50IF9fd190ZXJtc2lnOjc7CiAgICAgICAgdW5z
aWduZWQgaW50IF9fd19jb3JlZHVtcDoxOwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfcmV0Y29k
ZTo4OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsKCgoKCgoKCiAgICAgIH0gX193YWl0X3Rlcm1p
bmF0ZWQ7CiAgICBzdHJ1Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3B2
YWw6ODsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3BzaWc6ODsKICAgICAgICB1bnNpZ25l
ZCBpbnQ6MTY7CgoKCgoKCiAgICAgIH0gX193YWl0X3N0b3BwZWQ7CiAgfTsKIyA0NCAiL3Vzci9p
bmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyA5MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCgoKdHlw
ZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07CiAgfSBkaXZfdDsKCgoK
dHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9uZyBpbnQgcmVtOwog
IH0gbGRpdl90OwoKCgoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxv
bmcgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgbG9uZyBpbnQgcmVtOwogIH0gbGxkaXZfdDsKCgoj
IDEzNyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBzaXplX3QgX19jdHlwZV9nZXRf
bWJfY3VyX21heCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGF0b2YgKF9fY29u
c3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4
dGVybiBpbnQgYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGxvbmcgaW50IGF0b2wgKF9fY29uc3QgY2hhciAqX19u
cHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpfX2V4dGVuc2lv
bl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gZG91Ymxl
IHN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
ZmxvYXQgc3RydG9mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgpleHRlcm4g
bG9uZyBkb3VibGUgc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJv
dyAoKTsKCgoKCgpleHRlcm4gbG9uZyBpbnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3Ry
dG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQog
ICAgIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0
b3EgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgp
OwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VxIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAg
ICB0aHJvdyAoKTsKCgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRv
bGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAo
KTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkK
ICAgICB0aHJvdyAoKTsKCiMgMjI5ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGxv
bmcgaW50IHN0cnRvbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNl
LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK
ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRl
cm4gbG9uZyBsb25nIGludCBzdHJ0b2xsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2Nh
bGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25n
IGxvbmcgaW50IHN0cnRvdWxsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
X19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBz
dHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAg
ICAgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgc3RydG9mX2wgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHN0
cnRvbGRfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4g
ZG91YmxlIF9fc3RydG9kX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBfX3N0cnRvZl9p
bnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXAp
CiAgICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRfaW50ZXJuYWwgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgpleHRlcm4gbG9u
ZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50
IF9fZ3JvdXApIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3Vs
X2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFz
ZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwojIDMwNyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAz
CgpleHRlcm4gX19pbmxpbmUgZG91YmxlCnN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4g
X19zdHJ0b2RfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGlu
ZSBsb25nIGludApzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICBy
ZXR1cm4gX19zdHJ0b2xfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0K
ZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgaW50CnN0cnRvdWwgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBp
bnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG91bF9pbnRlcm5hbCAoX19ucHRy
LCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCgoKZXh0ZXJuIF9faW5saW5lIGZsb2F0CnN0cnRv
ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2ZfaW50ZXJuYWwgKF9fbnB0ciwgX19l
bmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZQpzdHJ0b2xkIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhy
b3cgKCkKewogIHJldHVybiBfX3N0cnRvbGRfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDAp
Owp9CgoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRv
cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvbGxf
aW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBl
eHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGludApzdHJ0b3VxIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg
ICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChf
X25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBf
X2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvbGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKSB0
aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwg
X19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25n
IGxvbmcgaW50CnN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IF9fbnB0ciwgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7
CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwg
MCk7Cn0KCgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUKYXRvZiAoX19jb25zdCBjaGFyICpfX25w
dHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9kIChfX25wdHIsIChjaGFyICoqKSBfX251bGwp
Owp9CmV4dGVybiBfX2lubGluZSBpbnQKYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93
ICgpCnsKICByZXR1cm4gKGludCkgc3RydG9sIChfX25wdHIsIChjaGFyICoqKSBfX251bGwsIDEw
KTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIp
IHRocm93ICgpCnsKICByZXR1cm4gc3RydG9sIChfX25wdHIsIChjaGFyICoqKSBfX251bGwsIDEw
KTsKfQoKCgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludAphdG9s
bCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9sbCAoX19u
cHRyLCAoY2hhciAqKikgX19udWxsLCAxMCk7Cn0KCiMgNDA4ICIvdXNyL2luY2x1ZGUvc3RkbGli
LmgiIDMKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJu
IGxvbmcgaW50IGE2NGwgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19wdXJlX18pKTsKIyA0MjEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gbG9u
ZyBpbnQgcmFuZG9tICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZG9tICh1bnNp
Z25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqaW5pdHN0YXRlICh1
bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgX19zdGF0ZWxlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpzZXRzdGF0
ZSAoY2hhciAqX19zdGF0ZWJ1ZikgdGhyb3cgKCk7CgoKCgoKCgpzdHJ1Y3QgcmFuZG9tX2RhdGEK
ICB7CiAgICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAqcnB0cjsKICAgIGludDMyX3QgKnN0
YXRlOwogICAgaW50IHJhbmRfdHlwZTsKICAgIGludCByYW5kX2RlZzsKICAgIGludCByYW5kX3Nl
cDsKICAgIGludDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVybiBpbnQgcmFuZG9tX3IgKHN0cnVj
dCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgaW50
MzJfdCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNyYW5kb21f
ciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgdGhyb3cg
KCk7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpf
X3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0
YXRlbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVz
dHJpY3QgX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzZXRzdGF0ZV9yIChjaGFyICpfX3Jl
c3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9k
YXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCByYW5kICh2
b2lkKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHNyYW5kICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcmFuZF9yICh1bnNpZ25lZCBpbnQgKl9fc2VlZCkgdGhy
b3cgKCk7CgoKCgoKCgpleHRlcm4gZG91YmxlIGRyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRl
cm4gZG91YmxlIGVyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAo
KTsKCgpleHRlcm4gbG9uZyBpbnQgbHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25n
IGludCBucmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGxvbmcgaW50IG1yYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gbG9uZyBpbnQg
anJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVy
biB2b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2VlZHZhbCkgdGhyb3cgKCk7CmV4dGVybiB1bnNp
Z25lZCBzaG9ydCBpbnQgKnNlZWQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkg
dGhyb3cgKCk7CmV4dGVybiB2b2lkIGxjb25nNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFt
WzddKSB0aHJvdyAoKTsKCgoKCgpzdHJ1Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQg
c2hvcnQgaW50IF9feFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX29sZF94WzNdOwogICAg
dW5zaWduZWQgc2hvcnQgaW50IF9fYzsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2luaXQ7CiAg
ICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fYTsKICB9OwoKCmV4dGVybiBpbnQgZHJhbmQ0OF9y
IChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAg
ICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGlu
dCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAg
ICAgICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBscmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19i
dWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3Vs
dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194
c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVz
dHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmlj
dCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFu
ZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25n
IGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQganJhbmQ0OF9y
ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAg
ICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBzcmFuZDQ4X3IgKGxvbmcgaW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19i
dWZmZXIpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9y
dCBpbnQgX19zZWVkMTZ2WzNdLAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9k
YXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7CgpleHRlcm4gaW50IGxjb25nNDhfciAodW5zaWduZWQg
c2hvcnQgaW50IF9fcGFyYW1bN10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0
OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7CgoKCgoKCgoKCmV4dGVybiB2b2lkICptYWxsb2Mg
KHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7Cgpl
eHRlcm4gdm9pZCAqY2FsbG9jIChzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSkKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCgoKZXh0ZXJuIHZvaWQg
KnJlYWxsb2MgKHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqX19wdHIpIHRocm93
ICgpOwoKCgoKZXh0ZXJuIHZvaWQgY2ZyZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoKIyAx
ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgi
IDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzMuMi9pbmNsdWRlL3N0
ZGRlZi5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMKCmV4dGVybiAiQyIg
ewoKCgoKCmV4dGVybiB2b2lkICphbGxvY2EgKHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCgoK
Cn0KIyA1NzcgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCAqdmFs
bG9jIChzaXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykp
OwoKCgoKZXh0ZXJuIGludCBwb3NpeF9tZW1hbGlnbiAodm9pZCAqKl9fbWVtcHRyLCBzaXplX3Qg
X19hbGlnbm1lbnQsIHNpemVfdCBfX3NpemUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgq
X19mdW5jKSAodm9pZCkpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgb25fZXhpdCAodm9pZCAo
Kl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqX19hcmcpLCB2b2lkICpfX2FyZykKICAgICB0
aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgoKCmV4dGVybiB2b2lkIF9FeGl0IChp
bnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoK
CgoKZXh0ZXJuIGNoYXIgKmdldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGNoYXIgKl9fc2VjdXJlX2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRo
cm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHV0ZW52IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIGludCBzZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lLCBfX2NvbnN0IGNo
YXIgKl9fdmFsdWUsIGludCBfX3JlcGxhY2UpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB1
bnNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50
IGNsZWFyZW52ICh2b2lkKSB0aHJvdyAoKTsKIyA2NjEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg
MwpleHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCgoK
CmV4dGVybiBpbnQgbWtzdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjc4ICIv
dXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBta3N0ZW1wNjQgKGNoYXIgKl9fdGVt
cGxhdGUpIHRocm93ICgpOwojIDY4OCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBj
aGFyICpta2R0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50
IHN5c3RlbSAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu
IGNoYXIgKmNhbm9uaWNhbGl6ZV9maWxlX25hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJv
dyAoKTsKIyA3MTIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqcmVhbHBh
dGggKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqX19yZXN0cmljdCBfX3Jlc29sdmVkKSB0aHJvdyAoKTsKCgoKCgoKdHlwZWRlZiBp
bnQgKCpfX2NvbXBhcl9mbl90KSAoX19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKTsKCgp0
eXBlZGVmIF9fY29tcGFyX2ZuX3QgY29tcGFyaXNvbl9mbl90OwoKCgoKCgpleHRlcm4gdm9pZCAq
YnNlYXJjaCAoX19jb25zdCB2b2lkICpfX2tleSwgX19jb25zdCB2b2lkICpfX2Jhc2UsCiAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21wYXJf
Zm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2UsIHNpemVf
dCBfX25tZW1iLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgX19jb21wYXJfZm5f
dCBfX2NvbXBhcik7CgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzIChsb25nIGludCBfX3gp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKX19leHRlbnNpb25fXyBl
eHRlcm4gbG9uZyBsb25nIGludCBsbGFicyAobG9uZyBsb25nIGludCBfX3gpCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgoKZXh0ZXJuIGRpdl90IGRpdiAo
aW50IF9fbnVtZXIsIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZfdCBsZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGlu
dCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK
Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxsZGl2X3QgbGxkaXYgKGxvbmcgbG9uZyBpbnQgX19udW1l
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBsb25nIGludCBfX2Rl
bm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCiMgNzc2ICIv
dXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJsZSBfX3ZhbHVl
LCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAg
ICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmN2
dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQs
CiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBjaGFyICpnY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpf
X2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqcWVjdnQgKGxvbmcgZG91YmxlIF9fdmFs
dWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19k
ZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpxZmN2
dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAg
IGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAo
KTsKZXh0ZXJuIGNoYXIgKnFnY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQs
IGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZWN2dF9yIChkb3VibGUgX192
YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAg
ICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAg
ICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IGZjdnRf
ciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQs
CiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3Ry
aWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCmV4
dGVybiBpbnQgcWVjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAg
ICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3Qg
X19zaWduLAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVf
dCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQgcWZjdnRfciAobG9uZyBkb3VibGUgX192YWx1
ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2Rl
Y3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9f
cmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50
IG1ibGVuIChfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBtYnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsCiAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHdjdG9tYiAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpIHRocm93ICgpOwoK
CgpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90
IF9fbikgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IHdjc3RvbWJzIChjaGFyICpfX3Jlc3RyaWN0
IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fcHdjcywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gaW50IHJw
bWF0Y2ggKF9fY29uc3QgY2hhciAqX19yZXNwb25zZSkgdGhyb3cgKCk7CiMgODU4ICIvdXNyL2lu
Y2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBnZXRzdWJvcHQgKGNoYXIgKipfX3Jlc3RyaWN0
IF9fb3B0aW9ucCwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fY29uc3QgKl9fcmVzdHJp
Y3QgX190b2tlbnMsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3Zh
bHVlcCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0a2V5IChfX2NvbnN0IGNoYXIgKl9f
a2V5KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcG9zaXhfb3BlbnB0IChpbnQgX19vZmxh
ZykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGdyYW50cHQgKGludCBfX2ZkKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCB1bmxvY2twdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGNoYXIgKnB0c25hbWUgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdHNu
YW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IGdldHB0ICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBnZXRs
b2FkYXZnIChkb3VibGUgX19sb2FkYXZnW10sIGludCBfX25lbGVtKSB0aHJvdyAoKTsKCgoKCgp9
CiMgNTYgIlNvQ2FsY0V4cHIuYysrIiAyCgoKIyAxICJTb0NhbGNFeHByLmgiIDEKIyA4MSAiU29D
YWxjRXhwci5oIgpjbGFzcyBTb0NhbGNFeHByIHsKICBwdWJsaWM6CiAgICBlbnVtIFR5cGUgewog
ICAgICAgIEZMT0FULAogICAgICAgIFZFQzNGCiAgICB9OwogICAgVHlwZSB0eXBlOwoKICAgIFNv
Q2FsY0V4cHIoKSB7fQogICAgU29DYWxjRXhwcihUeXBlIHQpIDogdHlwZSh0KSB7fQogICAgdmly
dHVhbCB+U29DYWxjRXhwcigpOwoKICAgIHZpcnR1YWwgdm9pZCBwcmludChpbnQgbGV2ZWwpOwog
ICAgdmlydHVhbCBmbG9hdCBnZXRGbG9hdCgpOwogICAgdmlydHVhbCBTYlZlYzNmIGdldFZlYzNm
KCk7CiAgICB2aXJ0dWFsIGZsb2F0IHNldEZsb2F0KGZsb2F0IHYpOwogICAgdmlydHVhbCBTYlZl
YzNmIHNldFZlYzNmKGNvbnN0IFNiVmVjM2YgJik7CiAgICB2aXJ0dWFsIHZvaWQgZXZhbCgpOwoK
ICAgIGNvbnN0IGNoYXIgKnR5cGVOYW1lKCkKICAgIHsKICAgICAgICByZXR1cm4gdHlwZT09RkxP
QVQgPyAiZmxvYXQiIDogIlZlYzNmIjsKICAgIH0KCiAgcHJvdGVjdGVkOgogICAgZnJpZW5kIGNs
YXNzIFNvQ2FsY1BhcnNlcjsKCiAgICBzdGF0aWMgU2JCb29sIGVycm9yOwoKCgogICAgc3RhdGlj
IGZsb2F0ICooKmxvb2t1cEZsb2F0RmllbGQpKHZvaWQgKmRhdGEsIGNvbnN0IGNoYXIgKm5hbWUp
OwogICAgc3RhdGljIFNiVmVjM2YgKigqbG9va3VwVmVjM2ZGaWVsZCkodm9pZCAqZGF0YSwgY29u
c3QgY2hhciAqbmFtZSk7CiAgICBzdGF0aWMgdm9pZCAqZGF0YTsKCiAgICB2b2lkIHByaW50U3Bh
Y2UoaW50IGxldmVsKTsKCiAgcHJvdGVjdGVkOgoKICAgIHZvaWQgZXJyKGNvbnN0IGNoYXIgKmZv
cm1hdFN0cmluZyAuLi4pOwp9OwoKCgoKY2xhc3MgU29DYWxjRXhwckxpc3QgOiBwdWJsaWMgU2JQ
TGlzdCB7CiAgcHVibGljOgogICAgU29DYWxjRXhwckxpc3QoKSB7fQogICAgU29DYWxjRXhwckxp
c3QoY29uc3QgU29DYWxjRXhwckxpc3QgJmwpIHsgY29weShsKTsgfQogICAgflNvQ2FsY0V4cHJM
aXN0KCkgeyB0cnVuY2F0ZSgwKTsgfQoKICAgIHZvaWQgdHJ1bmNhdGUoaW50IG4pOwogICAgdm9p
ZCBhcHBlbmQoU29DYWxjRXhwciAqZSkgeyBTYlBMaXN0OjphcHBlbmQoKHZvaWQqKSBlKTsgfQog
ICAgU29DYWxjRXhwciAqb3BlcmF0b3JbXShpbnQgaSkgY29uc3QKICAgICAgICB7IHJldHVybiAo
U29DYWxjRXhwciopICgqKGNvbnN0IFNiUExpc3QqKXRoaXMpW2ldOyB9CgoKICAgIHZvaWQgZXZh
bCgpOwoKICAgIHZvaWQgcHJpbnQoKTsKfTsKCgoKCgpjbGFzcyBTb0NhbGNDb25zdCA6IHB1Ymxp
YyBTb0NhbGNFeHByIHsKICBwdWJsaWM6CiAgICBjb25zdCBmbG9hdCB2YWw7CiAgICBTb0NhbGND
b25zdChmbG9hdCB2KSA6IFNvQ2FsY0V4cHIoRkxPQVQpLCB2YWwodikge30KICAgIH5Tb0NhbGND
b25zdCgpOwogICAgdmlydHVhbCB2b2lkIHByaW50KGludCBsZXZlbCk7CiAgICB2aXJ0dWFsIGZs
b2F0IGdldEZsb2F0KCk7Cn07CgpjbGFzcyBTb0NhbGNWYXIgOiBwdWJsaWMgU29DYWxjRXhwciB7
CiAgcHVibGljOgogICAgY29uc3QgY2hhciAqY29uc3QgbmFtZTsKICAgIFNvQ2FsY1Zhcihjb25z
dCBjaGFyICpubSwgVHlwZSB0eXBlKTsKICAgIH5Tb0NhbGNWYXIoKTsKICAgIHZpcnR1YWwgdm9p
ZCBwcmludChpbnQgbGV2ZWwpOwogICAgdmlydHVhbCBmbG9hdCBnZXRGbG9hdCgpOwogICAgdmly
dHVhbCBTYlZlYzNmIGdldFZlYzNmKCk7CiAgICB2aXJ0dWFsIGZsb2F0IHNldEZsb2F0KGZsb2F0
IHYpOwogICAgdmlydHVhbCBTYlZlYzNmIHNldFZlYzNmKGNvbnN0IFNiVmVjM2YgJnYpOwogIHBy
aXZhdGU6CiAgICB1bmlvbiB7CiAgICAgICAgZmxvYXQgKnBmbG9hdDsKICAgICAgICBTYlZlYzNm
ICpwdmVjM2Y7CiAgICB9Owp9OwoKCgoKY2xhc3MgU29DYWxjRnVuYyA6IHB1YmxpYyBTb0NhbGNF
eHByCnsKICBwdWJsaWM6CiAgICBjb25zdCBjaGFyICpjb25zdCBuYW1lOwogICAgdmlydHVhbCBT
b0NhbGNGdW5jICpkdXAoKSBjb25zdCA9IDA7CiAgICB+U29DYWxjRnVuYygpOwogICAgdmlydHVh
bCB2b2lkIHNldEFyZ3MoU29DYWxjRXhwckxpc3QgKmFyZ3MpID0gMDsKICAgIHZpcnR1YWwgdm9p
ZCBwcmludChpbnQgbGV2ZWwpOwogIHByb3RlY3RlZDoKICAgIFNvQ2FsY0Z1bmMoY29uc3QgY2hh
ciAqbm0sIFR5cGUgdHlwZSk7CiAgICBTb0NhbGNFeHByTGlzdCAqYXJnczsKfTsKCmNsYXNzIFNv
Q2FsY0Z1bmNfZCA6IHB1YmxpYyBTb0NhbGNGdW5jCnsKICBwdWJsaWM6CiAgICBTb0NhbGNGdW5j
X2QoY29uc3QgY2hhciAqbmFtZSwgZG91YmxlICgqZikoZG91YmxlKSk7CiAgICB+U29DYWxjRnVu
Y19kKCk7CiAgICB2aXJ0dWFsIFNvQ2FsY0Z1bmMgKmR1cCgpIGNvbnN0OwogICAgdmlydHVhbCBm
bG9hdCBnZXRGbG9hdCgpOwogICAgdmlydHVhbCB2b2lkIHNldEFyZ3MoU29DYWxjRXhwckxpc3Qg
KmFyZ3MpOwogIHByaXZhdGU6CiAgICBkb3VibGUgKCpjb25zdCBmdW5jKShkb3VibGUpOwp9OwoK
Y2xhc3MgU29DYWxjRnVuY19kZCA6IHB1YmxpYyBTb0NhbGNGdW5jCnsKICBwdWJsaWM6CiAgICBT
b0NhbGNGdW5jX2RkKGNvbnN0IGNoYXIgKm5hbWUsIGRvdWJsZSAoKmYpKGRvdWJsZSwgZG91Ymxl
KSkgOiBTb0NhbGNGdW5jKG5hbWUsIEZMT0FUKSwgZnVuYyhmKSB7fQogICAgflNvQ2FsY0Z1bmNf
ZGQoKTsKICAgIHZpcnR1YWwgU29DYWxjRnVuYyAqZHVwKCkgY29uc3Q7CiAgICB2aXJ0dWFsIGZs
b2F0IGdldEZsb2F0KCk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0QXJncyhTb0NhbGNFeHByTGlzdCAq
YXJncyk7CiAgcHJpdmF0ZToKICAgIGRvdWJsZSAoKmNvbnN0IGZ1bmMpKGRvdWJsZSwgZG91Ymxl
KTsKfTsKCmNsYXNzIFNvQ2FsY0Z1bmNfaWQgOiBwdWJsaWMgU29DYWxjRnVuYwp7CiAgcHVibGlj
OgogICAgU29DYWxjRnVuY19pZChjb25zdCBjaGFyICpuYW1lLCBkb3VibGUgKCpmKShpbnQsIGRv
dWJsZSkpIDogU29DYWxjRnVuYyhuYW1lLCBGTE9BVCksIGZ1bmMoZikge30KICAgIH5Tb0NhbGNG
dW5jX2lkKCk7CiAgICB2aXJ0dWFsIFNvQ2FsY0Z1bmMgKmR1cCgpIGNvbnN0OwogICAgdmlydHVh
bCBmbG9hdCBnZXRGbG9hdCgpOwogICAgdmlydHVhbCB2b2lkIHNldEFyZ3MoU29DYWxjRXhwckxp
c3QgKmFyZ3MpOwogIHByaXZhdGU6CiAgICBkb3VibGUgKCpjb25zdCBmdW5jKShpbnQsIGRvdWJs
ZSk7Cn07CgpjbGFzcyBTb0NhbGNGdW5jX3YgOiBwdWJsaWMgU29DYWxjRnVuYwp7CiAgcHVibGlj
OgogICAgU29DYWxjRnVuY192KGNvbnN0IGNoYXIgKm5hbWUsIGRvdWJsZSAoKmYpKGNvbnN0IFNi
VmVjM2YgJikpIDogU29DYWxjRnVuYyhuYW1lLCBGTE9BVCksIGZ1bmMoZikge30KICAgIH5Tb0Nh
bGNGdW5jX3YoKTsKICAgIHZpcnR1YWwgU29DYWxjRnVuYyAqZHVwKCkgY29uc3Q7CiAgICB2aXJ0
dWFsIGZsb2F0IGdldEZsb2F0KCk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0QXJncyhTb0NhbGNFeHBy
TGlzdCAqYXJncyk7CiAgcHJpdmF0ZToKICAgIGRvdWJsZSAoKmNvbnN0IGZ1bmMpKGNvbnN0IFNi
VmVjM2YgJik7Cn07CgpjbGFzcyBTb0NhbGNGdW5jdl92IDogcHVibGljIFNvQ2FsY0Z1bmMKewog
IHB1YmxpYzoKICAgIFNvQ2FsY0Z1bmN2X3YoY29uc3QgY2hhciAqbmFtZSwgU2JWZWMzZiAoKmYp
KGNvbnN0IFNiVmVjM2YgJikpIDogU29DYWxjRnVuYyhuYW1lLCBWRUMzRiksIGZ1bmMoZikge30K
ICAgIH5Tb0NhbGNGdW5jdl92KCk7CiAgICB2aXJ0dWFsIFNvQ2FsY0Z1bmMgKmR1cCgpIGNvbnN0
OwogICAgdmlydHVhbCBTYlZlYzNmIGdldFZlYzNmKCk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0QXJn
cyhTb0NhbGNFeHByTGlzdCAqYXJncyk7CiAgcHJpdmF0ZToKICAgIFNiVmVjM2YgKCpjb25zdCBm
dW5jKShjb25zdCBTYlZlYzNmICYpOwp9OwoKY2xhc3MgU29DYWxjRnVuY192diA6IHB1YmxpYyBT
b0NhbGNGdW5jCnsKICBwdWJsaWM6CiAgICBTb0NhbGNGdW5jX3Z2KGNvbnN0IGNoYXIgKm5hbWUs
IGRvdWJsZSAoKmYpKGNvbnN0IFNiVmVjM2YgJiwgY29uc3QgU2JWZWMzZiAmKSkgOiBTb0NhbGNG
dW5jKG5hbWUsIEZMT0FUKSwgZnVuYyhmKSB7fQogICAgflNvQ2FsY0Z1bmNfdnYoKTsKICAgIHZp
cnR1YWwgU29DYWxjRnVuYyAqZHVwKCkgY29uc3Q7CiAgICB2aXJ0dWFsIGZsb2F0IGdldEZsb2F0
KCk7CiAgICB2aXJ0dWFsIHZvaWQgc2V0QXJncyhTb0NhbGNFeHByTGlzdCAqYXJncyk7CiAgcHJp
dmF0ZToKICAgIGRvdWJsZSAoKmNvbnN0IGZ1bmMpKGNvbnN0IFNiVmVjM2YgJiwgY29uc3QgU2JW
ZWMzZiAmKTsKfTsKCmNsYXNzIFNvQ2FsY0Z1bmN2X3Z2IDogcHVibGljIFNvQ2FsY0Z1bmMKewog
IHB1YmxpYzoKICAgIFNvQ2FsY0Z1bmN2X3Z2KGNvbnN0IGNoYXIgKm5hbWUsIFNiVmVjM2YgKCpm
KShjb25zdCBTYlZlYzNmICYsIGNvbnN0IFNiVmVjM2YgJikpIDogU29DYWxjRnVuYyhuYW1lLCBW
RUMzRiksIGZ1bmMoZikge30KICAgIH5Tb0NhbGNGdW5jdl92digpOwogICAgdmlydHVhbCBTb0Nh
bGNGdW5jICpkdXAoKSBjb25zdDsKICAgIHZpcnR1YWwgU2JWZWMzZiBnZXRWZWMzZigpOwogICAg
dmlydHVhbCB2b2lkIHNldEFyZ3MoU29DYWxjRXhwckxpc3QgKmFyZ3MpOwogIHByaXZhdGU6CiAg
ICBTYlZlYzNmICgqY29uc3QgZnVuYykoY29uc3QgU2JWZWMzZiAmLCBjb25zdCBTYlZlYzNmICYp
Owp9OwoKY2xhc3MgU29DYWxjRnVuY3ZfZGRkIDogcHVibGljIFNvQ2FsY0Z1bmMKewogIHB1Ymxp
YzoKICAgIFNvQ2FsY0Z1bmN2X2RkZChjb25zdCBjaGFyICpuYW1lLCBTYlZlYzNmICgqZikoZG91
YmxlLCBkb3VibGUsIGRvdWJsZSkpIDogU29DYWxjRnVuYyhuYW1lLCBWRUMzRiksIGZ1bmMoZikg
e30KICAgIH5Tb0NhbGNGdW5jdl9kZGQoKTsKICAgIHZpcnR1YWwgU29DYWxjRnVuYyAqZHVwKCkg
Y29uc3Q7CiAgICB2aXJ0dWFsIFNiVmVjM2YgZ2V0VmVjM2YoKTsKICAgIHZpcnR1YWwgdm9pZCBz
ZXRBcmdzKFNvQ2FsY0V4cHJMaXN0ICphcmdzKTsKICBwcml2YXRlOgogICAgU2JWZWMzZiAoKmNv
bnN0IGZ1bmMpKGRvdWJsZSwgZG91YmxlLCBkb3VibGUpOwp9OwoKCgoKY2xhc3MgU29DYWxjQmlu
YXJ5T3AgOiBwdWJsaWMgU29DYWxjRXhwcgp7CiAgcHVibGljOgogICAgdmlydHVhbCB2b2lkIHBy
aW50KGludCBsZXZlbCk7CiAgcHJvdGVjdGVkOgoKICAgIGVudW0gVHlwZXMgeyBGRj0oMTw8MCks
IEZWPSgxPDwxKSwgVkY9KDE8PDIpLCBWVj0oMTw8MykgfTsKICAgIFNvQ2FsY0JpbmFyeU9wKFNv
Q2FsY0V4cHIgKmVhLCBTb0NhbGNFeHByICplYiwgaW50IFR5cGVCaXRzKTsKICAgIH5Tb0NhbGNC
aW5hcnlPcCgpOwogICAgU29DYWxjRXhwciAqYSwgKmI7Cn07CgpjbGFzcyBTb0NhbGNBc3NpZ24g
OiBwdWJsaWMgU29DYWxjQmluYXJ5T3AKewogIHB1YmxpYzoKICAgIFNvQ2FsY0Fzc2lnbihTb0Nh
bGNFeHByICphLCBTb0NhbGNFeHByICpiKSA6IFNvQ2FsY0JpbmFyeU9wKGEsYixGRnxWVikgeyB0
eXBlPWEtPnR5cGU7IH0KICAgIH5Tb0NhbGNBc3NpZ24oKTsKICAgIHZpcnR1YWwgZmxvYXQgZ2V0
RmxvYXQoKTsKICAgIHZpcnR1YWwgU2JWZWMzZiBnZXRWZWMzZigpOwp9OwoKY2xhc3MgU29DYWxj
QXNzaWduSW5kZXggOiBwdWJsaWMgU29DYWxjRXhwcgp7CiAgcHVibGljOgoKICAgIFNvQ2FsY0Fz
c2lnbkluZGV4KFNvQ2FsY0V4cHIgKmEsIFNvQ2FsY0V4cHIgKmIsIFNvQ2FsY0V4cHIgKmMpOwog
ICAgflNvQ2FsY0Fzc2lnbkluZGV4KCk7CiAgICB2aXJ0dWFsIGZsb2F0IGdldEZsb2F0KCk7CiAg
cHJpdmF0ZToKICAgIFNvQ2FsY0V4cHIgKmEsICpiLCAqYzsKfTsKCmNsYXNzIFNvQ2FsY1BsdXMg
OiBwdWJsaWMgU29DYWxjQmluYXJ5T3AKewogIHB1YmxpYzoKICAgIFNvQ2FsY1BsdXMoU29DYWxj
RXhwciAqYSwgU29DYWxjRXhwciAqYikgOiBTb0NhbGNCaW5hcnlPcChhLGIsRkZ8VlYpIHsgdHlw
ZT1hLT50eXBlOyB9CiAgICB+U29DYWxjUGx1cygpOwogICAgdmlydHVhbCBmbG9hdCBnZXRGbG9h
dCgpOwogICAgdmlydHVhbCBTYlZlYzNmIGdldFZlYzNmKCk7Cn07CgpjbGFzcyBTb0NhbGNNaW51
cyA6IHB1YmxpYyBTb0NhbGNCaW5hcnlPcAp7CiAgcHVibGljOgogICAgU29DYWxjTWludXMoU29D
YWxjRXhwciAqYSwgU29DYWxjRXhwciAqYikgOiBTb0NhbGNCaW5hcnlPcChhLGIsRkZ8VlYpIHsg
dHlwZT1hLT50eXBlOyB9CiAgICB+U29DYWxjTWludXMoKTsKICAgIHZpcnR1YWwgZmxvYXQgZ2V0
RmxvYXQoKTsKICAgIHZpcnR1YWwgU2JWZWMzZiBnZXRWZWMzZigpOwp9OwoKY2xhc3MgU29DYWxj
TXVsdCA6IHB1YmxpYyBTb0NhbGNCaW5hcnlPcAp7CiAgcHVibGljOgogICAgU29DYWxjTXVsdChT
b0NhbGNFeHByICphLCBTb0NhbGNFeHByICpiKSA6IFNvQ2FsY0JpbmFyeU9wKGEsYixGRnxGVnxW
RikgeyB0eXBlPWEtPnR5cGU9PWItPnR5cGU/YS0+dHlwZTpWRUMzRjsgfQogICAgflNvQ2FsY011
bHQoKTsKICAgIHZpcnR1YWwgZmxvYXQgZ2V0RmxvYXQoKTsKICAgIHZpcnR1YWwgU2JWZWMzZiBn
ZXRWZWMzZigpOwp9OwoKY2xhc3MgU29DYWxjRGl2aWRlIDogcHVibGljIFNvQ2FsY0JpbmFyeU9w
CnsKICBwdWJsaWM6CiAgICBTb0NhbGNEaXZpZGUoU29DYWxjRXhwciAqYSwgU29DYWxjRXhwciAq
YikgOiBTb0NhbGNCaW5hcnlPcChhLGIsRkZ8VkYpIHsgdHlwZT1hLT50eXBlOyB9CiAgICB+U29D
YWxjRGl2aWRlKCk7CiAgICB2aXJ0dWFsIGZsb2F0IGdldEZsb2F0KCk7CiAgICB2aXJ0dWFsIFNi
VmVjM2YgZ2V0VmVjM2YoKTsKfTsKCmNsYXNzIFNvQ2FsY01vZCA6IHB1YmxpYyBTb0NhbGNCaW5h
cnlPcAp7CiAgcHVibGljOgogICAgU29DYWxjTW9kKFNvQ2FsY0V4cHIgKmEsIFNvQ2FsY0V4cHIg
KmIpIDogU29DYWxjQmluYXJ5T3AoYSxiLEZGKSB7IHR5cGU9RkxPQVQ7IH0KICAgIH5Tb0NhbGNN
b2QoKTsKICAgIHZpcnR1YWwgZmxvYXQgZ2V0RmxvYXQoKTsKfTsKCmNsYXNzIFNvQ2FsY0luZGV4
IDogcHVibGljIFNvQ2FsY0JpbmFyeU9wCnsKICBwdWJsaWM6CiAgICBTb0NhbGNJbmRleChTb0Nh
bGNFeHByICphLCBTb0NhbGNFeHByICpiKSA6IFNvQ2FsY0JpbmFyeU9wKGEsYixWRikgeyB0eXBl
PUZMT0FUOyB9CiAgICB+U29DYWxjSW5kZXgoKTsKICAgIHZpcnR1YWwgZmxvYXQgZ2V0RmxvYXQo
KTsKfTsKCmNsYXNzIFNvQ2FsY0xlc3NUaGFuIDogcHVibGljIFNvQ2FsY0JpbmFyeU9wCnsKICBw
dWJsaWM6CiAgICBTb0NhbGNMZXNzVGhhbihTb0NhbGNFeHByICphLCBTb0NhbGNFeHByICpiKSA6
IFNvQ2FsY0JpbmFyeU9wKGEsYixGRikgeyB0eXBlPUZMT0FUOyB9CiAgICB+U29DYWxjTGVzc1Ro
YW4oKTsKICAgIHZpcnR1YWwgZmxvYXQgZ2V0RmxvYXQoKTsKfTsKCmNsYXNzIFNvQ2FsY0dyZWF0
ZXJUaGFuIDogcHVibGljIFNvQ2FsY0JpbmFyeU9wCnsKICBwdWJsaWM6CiAgICBTb0NhbGNHcmVh
dGVyVGhhbihTb0NhbGNFeHByICphLCBTb0NhbGNFeHByICpiKSA6IFNvQ2FsY0JpbmFyeU9wKGEs
YixGRikgeyB0eXBlPUZMT0FUOyB9CiAgICB+U29DYWxjR3JlYXRlclRoYW4oKTsKICAgIHZpcnR1
YWwgZmxvYXQgZ2V0RmxvYXQoKTsKfTsKCmNsYXNzIFNvQ2FsY0xlc3NFUSA6IHB1YmxpYyBTb0Nh
bGNCaW5hcnlPcAp7CiAgcHVibGljOgogICAgU29DYWxjTGVzc0VRKFNvQ2FsY0V4cHIgKmEsIFNv
Q2FsY0V4cHIgKmIpIDogU29DYWxjQmluYXJ5T3AoYSxiLEZGKSB7IHR5cGU9RkxPQVQ7IH0KICAg
IH5Tb0NhbGNMZXNzRVEoKTsKICAgIHZpcnR1YWwgZmxvYXQgZ2V0RmxvYXQoKTsKfTsKCmNsYXNz
IFNvQ2FsY0dyZWF0ZXJFUSA6IHB1YmxpYyBTb0NhbGNCaW5hcnlPcAp7CiAgcHVibGljOgogICAg
U29DYWxjR3JlYXRlckVRKFNvQ2FsY0V4cHIgKmEsIFNvQ2FsY0V4cHIgKmIpIDogU29DYWxjQmlu
YXJ5T3AoYSxiLEZGKSB7IHR5cGU9RkxPQVQ7IH0KICAgIH5Tb0NhbGNHcmVhdGVyRVEoKTsKICAg
IHZpcnR1YWwgZmxvYXQgZ2V0RmxvYXQoKTsKfTsKCmNsYXNzIFNvQ2FsY0VxdWFscyA6IHB1Ymxp
YyBTb0NhbGNCaW5hcnlPcAp7CiAgcHVibGljOgogICAgU29DYWxjRXF1YWxzKFNvQ2FsY0V4cHIg
KmEsIFNvQ2FsY0V4cHIgKmIpIDogU29DYWxjQmluYXJ5T3AoYSxiLEZGKSB7IHR5cGU9RkxPQVQ7
IH0KICAgIH5Tb0NhbGNFcXVhbHMoKTsKICAgIHZpcnR1YWwgZmxvYXQgZ2V0RmxvYXQoKTsKfTsK
CmNsYXNzIFNvQ2FsY05vdEVxdWFscyA6IHB1YmxpYyBTb0NhbGNCaW5hcnlPcAp7CiAgcHVibGlj
OgogICAgU29DYWxjTm90RXF1YWxzKFNvQ2FsY0V4cHIgKmEsIFNvQ2FsY0V4cHIgKmIpIDogU29D
YWxjQmluYXJ5T3AoYSxiLEZGKSB7IHR5cGU9RkxPQVQ7IH0KICAgIH5Tb0NhbGNOb3RFcXVhbHMo
KTsKICAgIHZpcnR1YWwgZmxvYXQgZ2V0RmxvYXQoKTsKfTsKCmNsYXNzIFNvQ2FsY0FuZCA6IHB1
YmxpYyBTb0NhbGNCaW5hcnlPcAp7CiAgcHVibGljOgogICAgU29DYWxjQW5kKFNvQ2FsY0V4cHIg
KmEsIFNvQ2FsY0V4cHIgKmIpIDogU29DYWxjQmluYXJ5T3AoYSxiLEZGKSB7IHR5cGU9RkxPQVQ7
IH0KICAgIH5Tb0NhbGNBbmQoKTsKICAgIHZpcnR1YWwgZmxvYXQgZ2V0RmxvYXQoKTsKfTsKCmNs
YXNzIFNvQ2FsY09yIDogcHVibGljIFNvQ2FsY0JpbmFyeU9wCnsKICBwdWJsaWM6CiAgICBTb0Nh
bGNPcihTb0NhbGNFeHByICphLCBTb0NhbGNFeHByICpiKSA6IFNvQ2FsY0JpbmFyeU9wKGEsYixG
RikgeyB0eXBlPUZMT0FUOyB9CiAgICB+U29DYWxjT3IoKTsKICAgIHZpcnR1YWwgZmxvYXQgZ2V0
RmxvYXQoKTsKfTsKCmNsYXNzIFNvQ2FsY05vdCA6IHB1YmxpYyBTb0NhbGNFeHByCnsKICBwdWJs
aWM6CiAgICBTb0NhbGNOb3QoU29DYWxjRXhwciAqZXhwKSA6IGUoZXhwKSB7IHR5cGU9RkxPQVQ7
fQogICAgflNvQ2FsY05vdCgpOwogICAgdmlydHVhbCBmbG9hdCBnZXRGbG9hdCgpOwogICAgdmly
dHVhbCB2b2lkIHByaW50KGludCBsZXZlbCk7CiAgcHJpdmF0ZToKICAgIFNvQ2FsY0V4cHIgKmU7
Cn07CgpjbGFzcyBTb0NhbGNOZWdhdGUgOiBwdWJsaWMgU29DYWxjRXhwcgp7CiAgcHVibGljOgog
ICAgU29DYWxjTmVnYXRlKFNvQ2FsY0V4cHIgKmV4cCkgOiBlKGV4cCkgeyB0eXBlPWUtPnR5cGU7
IH0KICAgIH5Tb0NhbGNOZWdhdGUoKTsKICAgIHZpcnR1YWwgZmxvYXQgZ2V0RmxvYXQoKTsKICAg
IHZpcnR1YWwgU2JWZWMzZiBnZXRWZWMzZigpOwogICAgdmlydHVhbCB2b2lkIHByaW50KGludCBs
ZXZlbCk7CiAgcHJpdmF0ZToKICAgIFNvQ2FsY0V4cHIgKmU7Cn07CgpjbGFzcyBTb0NhbGNUZXJu
YXJ5IDogcHVibGljIFNvQ2FsY0V4cHIKewogIHB1YmxpYzoKICAgIFNvQ2FsY1Rlcm5hcnkoU29D
YWxjRXhwciAqYSwgU29DYWxjRXhwciAqYiwgU29DYWxjRXhwciAqYyk7CiAgICB+U29DYWxjVGVy
bmFyeSgpOwogICAgdmlydHVhbCBmbG9hdCBnZXRGbG9hdCgpOwogICAgdmlydHVhbCBTYlZlYzNm
IGdldFZlYzNmKCk7CiAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoaW50IGxldmVsKTsKICBwcml2YXRl
OgogICAgU29DYWxjRXhwciAqZXRlc3Q7CiAgICBTb0NhbGNFeHByICpldHJ1ZTsKICAgIFNvQ2Fs
Y0V4cHIgKmVmYWxzZTsKfTsKCgoKCmNsYXNzIFNvQ2FsY1BhcnNlciB7CiAgcHVibGljOgogICAg
U29DYWxjUGFyc2VyKGZsb2F0ICooKmxvb2t1cEZsb2F0RmllbGQpKHZvaWQgKmRhdGEsIGNvbnN0
IGNoYXIgKm5hbWUpLAogICAgICAgICBTYlZlYzNmICooKmxvb2t1cFZlYzNmRmllbGQpKHZvaWQg
KmRhdGEsIGNvbnN0IGNoYXIgKm5hbWUpLAogICAgICAgIHZvaWQgKmRhdGEpOwogICAgflNvQ2Fs
Y1BhcnNlcigpOwoKCiAgICBTYkJvb2wgcGFyc2UoY29uc3QgY2hhciAqYnVmKTsKCgogICAgdm9p
ZCBldmFsKCkgeyBlbGlzdC0+ZXZhbCgpOyB9CgoKICAgIHZvaWQgY2xlYXIoKSB7IGVsaXN0LT50
cnVuY2F0ZSgwKTsgfQoKICBwcml2YXRlOgogICAgZmxvYXQgKigqbG9va3VwRmxvYXRGaWVsZCko
dm9pZCAqZGF0YSwgY29uc3QgY2hhciAqbmFtZSk7CiAgICBTYlZlYzNmICooKmxvb2t1cFZlYzNm
RmllbGQpKHZvaWQgKmRhdGEsIGNvbnN0IGNoYXIgKm5hbWUpOwogICAgdm9pZCAqZGF0YTsKCiAg
ICBTb0NhbGNFeHByTGlzdCAqZWxpc3Q7Cn07CiMgNTkgIlNvQ2FsY0V4cHIuYysrIiAyCgoKCgpz
dGF0aWMgZmxvYXQgKmxvb2t1cGZsb2F0KHZvaWQgKiwgY29uc3QgY2hhciAqbm0pCnsKICAgIHN0
YXRpYyBmbG9hdCBzdG9yZVsyMF07CiAgICBpZiAoc3RyY21wKG5tLCAiYSIpID09MCkgcmV0dXJu
ICZzdG9yZVswXTsKICAgIGlmIChzdHJjbXAobm0sICJiIikgPT0wKSByZXR1cm4gJnN0b3JlWzFd
OwogICAgaWYgKHN0cmNtcChubSwgImMiKSA9PTApIHJldHVybiAmc3RvcmVbMl07CiAgICBpZiAo
c3RyY21wKG5tLCAiZCIpID09MCkgcmV0dXJuICZzdG9yZVszXTsKICAgIGlmIChzdHJjbXAobm0s
ICJlIikgPT0wKSByZXR1cm4gJnN0b3JlWzRdOwogICAgaWYgKHN0cmNtcChubSwgImYiKSA9PTAp
IHJldHVybiAmc3RvcmVbNV07CiAgICBpZiAoc3RyY21wKG5tLCAiZyIpID09MCkgcmV0dXJuICZz
dG9yZVs2XTsKICAgIGlmIChzdHJjbXAobm0sICJoIikgPT0wKSByZXR1cm4gJnN0b3JlWzddOwog
ICAgaWYgKHN0cmNtcChubSwgInRhIikgPT0wKSByZXR1cm4gJnN0b3JlWzhdOwogICAgaWYgKHN0
cmNtcChubSwgInRiIikgPT0wKSByZXR1cm4gJnN0b3JlWzldOwogICAgaWYgKHN0cmNtcChubSwg
InRjIikgPT0wKSByZXR1cm4gJnN0b3JlWzEwXTsKICAgIGlmIChzdHJjbXAobm0sICJ0ZCIpID09
MCkgcmV0dXJuICZzdG9yZVsxMV07CiAgICBpZiAoc3RyY21wKG5tLCAidGUiKSA9PTApIHJldHVy
biAmc3RvcmVbMTJdOwogICAgaWYgKHN0cmNtcChubSwgInRmIikgPT0wKSByZXR1cm4gJnN0b3Jl
WzEzXTsKICAgIGlmIChzdHJjbXAobm0sICJ0ZyIpID09MCkgcmV0dXJuICZzdG9yZVsxNF07CiAg
ICBpZiAoc3RyY21wKG5tLCAidGgiKSA9PTApIHJldHVybiAmc3RvcmVbMTVdOwogICAgaWYgKHN0
cmNtcChubSwgIm9hIikgPT0wKSByZXR1cm4gJnN0b3JlWzE2XTsKICAgIGlmIChzdHJjbXAobm0s
ICJvYiIpID09MCkgcmV0dXJuICZzdG9yZVsxN107CiAgICBpZiAoc3RyY21wKG5tLCAib2MiKSA9
PTApIHJldHVybiAmc3RvcmVbMThdOwogICAgaWYgKHN0cmNtcChubSwgIm9kIikgPT0wKSByZXR1
cm4gJnN0b3JlWzE5XTsKICAgIHJldHVybiBfX251bGw7Cn0Kc3RhdGljIFNiVmVjM2YgKmxvb2t1
cHZlYzNmKHZvaWQgKiwgY29uc3QgY2hhciAqbm0pCnsKICAgIHN0YXRpYyBTYlZlYzNmIHN0b3Jl
WzIwXTsKICAgIGlmIChzdHJjbXAobm0sICJBIikgPT0wKSByZXR1cm4gJnN0b3JlWzBdOwogICAg
aWYgKHN0cmNtcChubSwgIkIiKSA9PTApIHJldHVybiAmc3RvcmVbMV07CiAgICBpZiAoc3RyY21w
KG5tLCAiQyIpID09MCkgcmV0dXJuICZzdG9yZVsyXTsKICAgIGlmIChzdHJjbXAobm0sICJEIikg
PT0wKSByZXR1cm4gJnN0b3JlWzNdOwogICAgaWYgKHN0cmNtcChubSwgIkUiKSA9PTApIHJldHVy
biAmc3RvcmVbNF07CiAgICBpZiAoc3RyY21wKG5tLCAiRiIpID09MCkgcmV0dXJuICZzdG9yZVs1
XTsKICAgIGlmIChzdHJjbXAobm0sICJHIikgPT0wKSByZXR1cm4gJnN0b3JlWzZdOwogICAgaWYg
KHN0cmNtcChubSwgIkgiKSA9PTApIHJldHVybiAmc3RvcmVbN107CiAgICBpZiAoc3RyY21wKG5t
LCAidEEiKSA9PTApIHJldHVybiAmc3RvcmVbOF07CiAgICBpZiAoc3RyY21wKG5tLCAidEIiKSA9
PTApIHJldHVybiAmc3RvcmVbOV07CiAgICBpZiAoc3RyY21wKG5tLCAidEMiKSA9PTApIHJldHVy
biAmc3RvcmVbMTBdOwogICAgaWYgKHN0cmNtcChubSwgInREIikgPT0wKSByZXR1cm4gJnN0b3Jl
WzExXTsKICAgIGlmIChzdHJjbXAobm0sICJ0RSIpID09MCkgcmV0dXJuICZzdG9yZVsxMl07CiAg
ICBpZiAoc3RyY21wKG5tLCAidEYiKSA9PTApIHJldHVybiAmc3RvcmVbMTNdOwogICAgaWYgKHN0
cmNtcChubSwgInRHIikgPT0wKSByZXR1cm4gJnN0b3JlWzE0XTsKICAgIGlmIChzdHJjbXAobm0s
ICJ0SCIpID09MCkgcmV0dXJuICZzdG9yZVsxNV07CiAgICBpZiAoc3RyY21wKG5tLCAib0EiKSA9
PTApIHJldHVybiAmc3RvcmVbMTZdOwogICAgaWYgKHN0cmNtcChubSwgIm9CIikgPT0wKSByZXR1
cm4gJnN0b3JlWzE3XTsKICAgIGlmIChzdHJjbXAobm0sICJvQyIpID09MCkgcmV0dXJuICZzdG9y
ZVsxOF07CiAgICBpZiAoc3RyY21wKG5tLCAib0QiKSA9PTApIHJldHVybiAmc3RvcmVbMTldOwog
ICAgcmV0dXJuIF9fbnVsbDsKfQoKCgoKClNiQm9vbCBTb0NhbGNFeHByOjplcnJvcjsKZmxvYXQg
KigqU29DYWxjRXhwcjo6bG9va3VwRmxvYXRGaWVsZCkodm9pZCAqLCBjb25zdCBjaGFyICopID0g
bG9va3VwZmxvYXQ7ClNiVmVjM2YgKigqU29DYWxjRXhwcjo6bG9va3VwVmVjM2ZGaWVsZCkodm9p
ZCAqLCBjb25zdCBjaGFyICopID0gbG9va3VwdmVjM2Y7CnZvaWQgKlNvQ2FsY0V4cHI6OmRhdGE7
CgoKClNvQ2FsY0V4cHI6On5Tb0NhbGNFeHByKCkge30KCnZvaWQKU29DYWxjRXhwcjo6cHJpbnQo
aW50IGxldmVsKQp7CgoKCgp9Cgp2b2lkClNvQ2FsY0V4cHI6OnByaW50U3BhY2UoaW50IGxldmVs
KQp7CiMgMTUwICJTb0NhbGNFeHByLmMrKyIKfQoKZmxvYXQKU29DYWxjRXhwcjo6Z2V0RmxvYXQo
KSB7CiAgICBlcnIoIkV4cHI6IGludGVybmFsIGVycm9yOiBjYW4ndCBnZXQgZmxvYXQgdmFsIik7
CiAgICByZXR1cm4gMDsKfQoKU2JWZWMzZgpTb0NhbGNFeHByOjpnZXRWZWMzZigpIHsKICAgIGVy
cigiRXhwcjogaW50ZXJuYWwgZXJyb3I6IGNhbid0IGdldCB2ZWN0b3IgdmFsIik7CiAgICByZXR1
cm4gU2JWZWMzZigwLDAsMCk7Cn0KCgpmbG9hdApTb0NhbGNFeHByOjpzZXRGbG9hdChmbG9hdCkg
ewogICAgZXJyKCJFeHByOiBpbnRlcm5hbCBlcnJvcjogY2FuJ3Qgc2V0IGZsb2F0IHZhbCIpOwog
ICAgcmV0dXJuIDA7Cn0KClNiVmVjM2YKU29DYWxjRXhwcjo6c2V0VmVjM2YoY29uc3QgU2JWZWMz
ZiAmKSB7CiAgICBlcnIoIkV4cHI6IGludGVybmFsIGVycm9yOiBjYW4ndCBzZXQgdmVjdG9yIHZh
bCIpOwogICAgcmV0dXJuIFNiVmVjM2YoMCwwLDApOwp9Cgp2b2lkClNvQ2FsY0V4cHI6OmV2YWwo
KSB7CiAgICBpZiAodHlwZSA9PSBGTE9BVCkKICAgICAgICBnZXRGbG9hdCgpOwogICAgZWxzZQog
ICAgICAgIGdldFZlYzNmKCk7Cn0KCnZvaWQKU29DYWxjRXhwcjo6ZXJyKGNvbnN0IGNoYXIgKmZv
cm1hdFN0cmluZyAuLi4pCnsKICAgIGNoYXIgYnVmWzEwMDBdOwogICAgdmFfbGlzdCBhcDsKCiAg
ICBfX2J1aWx0aW5fc3RkYXJnX3N0YXJ0KChhcCksZm9ybWF0U3RyaW5nKTsKICAgIHZzcHJpbnRm
KGJ1ZiwgZm9ybWF0U3RyaW5nLCBhcCk7CiAgICBfX2J1aWx0aW5fdmFfZW5kKGFwKTsKCgoKCiAg
ICBlcnJvciA9IDE7Cn0KCgoKCgp2b2lkClNvQ2FsY0V4cHJMaXN0Ojp0cnVuY2F0ZShpbnQgbikK
ewogICAgZm9yIChpbnQgaT1uOyBpPGdldExlbmd0aCgpOyBpKyspCiAgICB7CiAgICAgICAgZGVs
ZXRlICgqdGhpcylbaV07CiAgICB9CgogICAgU2JQTGlzdDo6dHJ1bmNhdGUoMCk7Cn0KCnZvaWQK
U29DYWxjRXhwckxpc3Q6OmV2YWwoKQp7CiAgICBmb3IgKGludCBpPTA7IGk8Z2V0TGVuZ3RoKCk7
IGkrKykKICAgICAgICAoKnRoaXMpW2ldLT5ldmFsKCk7Cn0KCnZvaWQKU29DYWxjRXhwckxpc3Q6
OnByaW50KCkKewoKCgoKCgoKfQoKCgoKU29DYWxjQ29uc3Q6On5Tb0NhbGNDb25zdCgpIHt9Cgp2
b2lkClNvQ2FsY0NvbnN0OjpwcmludChpbnQgbGV2ZWwpCnsKCgoKCn0KCmZsb2F0ClNvQ2FsY0Nv
bnN0OjpnZXRGbG9hdCgpCnsKICAgIHJldHVybiB2YWw7Cn0KCgpTb0NhbGNWYXI6OlNvQ2FsY1Zh
cihjb25zdCBjaGFyICpubSwgVHlwZSB0eXBlKQogICAgOiBTb0NhbGNFeHByKHR5cGUpLCBuYW1l
KHN0cmR1cChubSkpCnsKICAgIGlmICh0eXBlID09IEZMT0FUKQogICAgICAgIHBmbG9hdCA9IGxv
b2t1cEZsb2F0RmllbGQoZGF0YSwgbmFtZSk7CiAgICBlbHNlCiAgICAgICAgcHZlYzNmID0gbG9v
a3VwVmVjM2ZGaWVsZChkYXRhLCBuYW1lKTsKfQoKU29DYWxjVmFyOjp+U29DYWxjVmFyKCkgeyBm
cmVlKCh2b2lkICopIG5hbWUpOyB9Cgp2b2lkIFNvQ2FsY1Zhcjo6cHJpbnQoaW50IGxldmVsKQp7
CiMgMjc4ICJTb0NhbGNFeHByLmMrKyIKfQoKZmxvYXQgU29DYWxjVmFyOjpnZXRGbG9hdCgpCnsK
ICAgIHJldHVybiAqcGZsb2F0Owp9CgpTYlZlYzNmIFNvQ2FsY1Zhcjo6Z2V0VmVjM2YoKQp7CiAg
ICByZXR1cm4gKnB2ZWMzZjsKfQoKZmxvYXQgU29DYWxjVmFyOjpzZXRGbG9hdChmbG9hdCB2KQp7
CiAgICByZXR1cm4gKnBmbG9hdCA9IHY7Cn0KClNiVmVjM2YgU29DYWxjVmFyOjpzZXRWZWMzZihj
b25zdCBTYlZlYzNmICZ2KQp7CiAgICByZXR1cm4gKnB2ZWMzZiA9IHY7Cn0KCgoKClNvQ2FsY0Z1
bmM6OlNvQ2FsY0Z1bmMoY29uc3QgY2hhciAqbm0sIFR5cGUgdHlwZSkgOiBTb0NhbGNFeHByKHR5
cGUpLCBuYW1lKG5tKSB7fQpTb0NhbGNGdW5jOjp+U29DYWxjRnVuYygpIHsgZGVsZXRlIGFyZ3M7
IH0KCnZvaWQKU29DYWxjRnVuYzo6cHJpbnQoaW50IGxldmVsKQp7CgoKCgoKCn0KClNvQ2FsY0Z1
bmNfZDo6U29DYWxjRnVuY19kKGNvbnN0IGNoYXIgKm5hbWUsIGRvdWJsZSAoKmYpKGRvdWJsZSkp
IDoKICAgICAgICAgICAgICAgIFNvQ2FsY0Z1bmMobmFtZSwgRkxPQVQpLCBmdW5jKGYpIHt9ClNv
Q2FsY0Z1bmNfZDo6flNvQ2FsY0Z1bmNfZCgpIHt9ClNvQ2FsY0Z1bmMgKlNvQ2FsY0Z1bmNfZDo6
ZHVwKCkgY29uc3QgeyByZXR1cm4gbmV3IFNvQ2FsY0Z1bmNfZChuYW1lLCBmdW5jKTsgfQpmbG9h
dCBTb0NhbGNGdW5jX2Q6OmdldEZsb2F0KCkgeyByZXR1cm4gKCpmdW5jKSgoKmFyZ3MpWzBdLT5n
ZXRGbG9hdCgpKTsgfQp2b2lkIFNvQ2FsY0Z1bmNfZDo6c2V0QXJncyhTb0NhbGNFeHByTGlzdCAq
YSkKewogICAgYXJncyA9IGE7CiAgICBpZiAoYXJncy0+Z2V0TGVuZ3RoKCkgIT0gMSkKICAgICAg
ICBlcnIoIkZ1bmN0aW9uICVzOiB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzICglZCBzaG91bGQg
YmUgMSkiLCBuYW1lLCBhcmdzLT5nZXRMZW5ndGgoKSk7CiAgICBpZiAoKCphcmdzKVswXS0+dHlw
ZSAhPSBGTE9BVCkKICAgICAgICBlcnIoIkZ1bmN0aW9uICVzOiBhcmd1bWVudCBtdXN0IGJlIHNj
YWxhciIsIG5hbWUpOwp9OwoKU29DYWxjRnVuY19kZDo6flNvQ2FsY0Z1bmNfZGQoKSB7fQpTb0Nh
bGNGdW5jICpTb0NhbGNGdW5jX2RkOjpkdXAoKSBjb25zdCB7IHJldHVybiBuZXcgU29DYWxjRnVu
Y19kZChuYW1lLCBmdW5jKTsgfQpmbG9hdCBTb0NhbGNGdW5jX2RkOjpnZXRGbG9hdCgpIHsKICAg
IFNvQ2FsY0V4cHIgKmUwID0gKCphcmdzKVswXSwgKmUxID0gKCphcmdzKVsxXTsKICAgIHJldHVy
biAoKmZ1bmMpKGUwLT5nZXRGbG9hdCgpLCBlMS0+Z2V0RmxvYXQoKSk7Cn0Kdm9pZCBTb0NhbGNG
dW5jX2RkOjpzZXRBcmdzKFNvQ2FsY0V4cHJMaXN0ICphKQp7CiAgICBhcmdzID0gYTsKICAgIGlm
IChhcmdzLT5nZXRMZW5ndGgoKSAhPSAyKQogICAgICAgIGVycigiRnVuY3Rpb24gJXM6IHdyb25n
IG51bWJlciBvZiBhcmd1bWVudHMgKCVkIHNob3VsZCBiZSAyKSIsIG5hbWUsIGFyZ3MtPmdldExl
bmd0aCgpKTsKICAgIGlmICgoKmFyZ3MpWzBdLT50eXBlICE9IEZMT0FUKQogICAgICAgIGVycigi
RnVuY3Rpb24gJXM6IGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgc2NhbGFyIiwgbmFtZSk7CiAgICBp
ZiAoKCphcmdzKVsxXS0+dHlwZSAhPSBGTE9BVCkKICAgICAgICBlcnIoIkZ1bmN0aW9uICVzOiBz
ZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBzY2FsYXIiLCBuYW1lKTsKfTsKClNvQ2FsY0Z1bmNfaWQ6
On5Tb0NhbGNGdW5jX2lkKCkge30KU29DYWxjRnVuYyAqU29DYWxjRnVuY19pZDo6ZHVwKCkgY29u
c3QgeyByZXR1cm4gbmV3IFNvQ2FsY0Z1bmNfaWQobmFtZSwgZnVuYyk7IH0KZmxvYXQgU29DYWxj
RnVuY19pZDo6Z2V0RmxvYXQoKSB7CiAgICBTb0NhbGNFeHByICplMCA9ICgqYXJncylbMF0sICpl
MSA9ICgqYXJncylbMV07CiAgICByZXR1cm4gKCpmdW5jKSgoaW50KSBlMC0+Z2V0RmxvYXQoKSwg
ZTEtPmdldEZsb2F0KCkpOwp9CnZvaWQgU29DYWxjRnVuY19pZDo6c2V0QXJncyhTb0NhbGNFeHBy
TGlzdCAqYSkKewogICAgYXJncyA9IGE7CiAgICBpZiAoYXJncy0+Z2V0TGVuZ3RoKCkgIT0gMikK
ICAgICAgICBlcnIoIkZ1bmN0aW9uICVzOiB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzICglZCBz
aG91bGQgYmUgMikiLCBuYW1lLCBhcmdzLT5nZXRMZW5ndGgoKSk7CiAgICBpZiAoKCphcmdzKVsw
XS0+dHlwZSAhPSBGTE9BVCkKICAgICAgICBlcnIoIkZ1bmN0aW9uICVzOiBmaXJzdCBhcmd1bWVu
dCBtdXN0IGJlIHNjYWxhciIsIG5hbWUpOwogICAgaWYgKCgqYXJncylbMV0tPnR5cGUgIT0gRkxP
QVQpCiAgICAgICAgZXJyKCJGdW5jdGlvbiAlczogc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgc2Nh
bGFyIiwgbmFtZSk7Cn07CgpTb0NhbGNGdW5jX3Y6On5Tb0NhbGNGdW5jX3YoKSB7fQpTb0NhbGNG
dW5jICpTb0NhbGNGdW5jX3Y6OmR1cCgpIGNvbnN0IHsgcmV0dXJuIG5ldyBTb0NhbGNGdW5jX3Yo
bmFtZSwgZnVuYyk7IH0KZmxvYXQgU29DYWxjRnVuY192OjpnZXRGbG9hdCgpIHsgcmV0dXJuICgq
ZnVuYykoKCphcmdzKVswXS0+Z2V0VmVjM2YoKSk7IH0Kdm9pZCBTb0NhbGNGdW5jX3Y6OnNldEFy
Z3MoU29DYWxjRXhwckxpc3QgKmEpCnsKICAgIGFyZ3MgPSBhOwogICAgaWYgKGFyZ3MtPmdldExl
bmd0aCgpICE9IDEpCiAgICAgICAgZXJyKCJGdW5jdGlvbiAlczogd3JvbmcgbnVtYmVyIG9mIGFy
Z3VtZW50cyAoJWQgc2hvdWxkIGJlIDEpIiwgbmFtZSwgYXJncy0+Z2V0TGVuZ3RoKCkpOwogICAg
aWYgKCgqYXJncylbMF0tPnR5cGUgIT0gVkVDM0YpCiAgICAgICAgZXJyKCJGdW5jdGlvbiAlczog
Zmlyc3QgYXJndW1lbnQgbXVzdCBiZSB2ZWN0b3IiLCBuYW1lKTsKfTsKClNvQ2FsY0Z1bmN2X3Y6
On5Tb0NhbGNGdW5jdl92KCkge30KU29DYWxjRnVuYyAqU29DYWxjRnVuY3Zfdjo6ZHVwKCkgY29u
c3QgeyByZXR1cm4gbmV3IFNvQ2FsY0Z1bmN2X3YobmFtZSwgZnVuYyk7IH0KU2JWZWMzZiBTb0Nh
bGNGdW5jdl92OjpnZXRWZWMzZigpIHsgcmV0dXJuICgqZnVuYykoKCphcmdzKVswXS0+Z2V0VmVj
M2YoKSk7IH0Kdm9pZCBTb0NhbGNGdW5jdl92OjpzZXRBcmdzKFNvQ2FsY0V4cHJMaXN0ICphKQp7
CiAgICBhcmdzID0gYTsKICAgIGlmIChhcmdzLT5nZXRMZW5ndGgoKSAhPSAxKQogICAgICAgIGVy
cigiRnVuY3Rpb24gJXM6IHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMgKCVkIHNob3VsZCBiZSAx
KSIsIG5hbWUsIGFyZ3MtPmdldExlbmd0aCgpKTsKICAgIGlmICgoKmFyZ3MpWzBdLT50eXBlICE9
IFZFQzNGKQogICAgICAgIGVycigiRnVuY3Rpb24gJXM6IGZpcnN0IGFyZ3VtZW50IG11c3QgYmUg
dmVjdG9yIiwgbmFtZSk7Cn07CgpTb0NhbGNGdW5jX3Z2Ojp+U29DYWxjRnVuY192digpIHt9ClNv
Q2FsY0Z1bmMgKlNvQ2FsY0Z1bmNfdnY6OmR1cCgpIGNvbnN0IHsgcmV0dXJuIG5ldyBTb0NhbGNG
dW5jX3Z2KG5hbWUsIGZ1bmMpOyB9CmZsb2F0IFNvQ2FsY0Z1bmNfdnY6OmdldEZsb2F0KCkgewog
ICAgU29DYWxjRXhwciAqZTAgPSAoKmFyZ3MpWzBdLCAqZTEgPSAoKmFyZ3MpWzFdOwogICAgcmV0
dXJuICgqZnVuYykoZTAtPmdldFZlYzNmKCksIGUxLT5nZXRWZWMzZigpKTsKfQp2b2lkIFNvQ2Fs
Y0Z1bmNfdnY6OnNldEFyZ3MoU29DYWxjRXhwckxpc3QgKmEpCnsKICAgIGFyZ3MgPSBhOwogICAg
aWYgKGFyZ3MtPmdldExlbmd0aCgpICE9IDIpCiAgICAgICAgZXJyKCJGdW5jdGlvbiAlczogd3Jv
bmcgbnVtYmVyIG9mIGFyZ3VtZW50cyAoJWQgc2hvdWxkIGJlIDIpIiwgbmFtZSwgYXJncy0+Z2V0
TGVuZ3RoKCkpOwogICAgaWYgKCgqYXJncylbMF0tPnR5cGUgIT0gVkVDM0YpCiAgICAgICAgZXJy
KCJGdW5jdGlvbiAlczogZmlyc3QgYXJndW1lbnQgbXVzdCBiZSB2ZWN0b3IiLCBuYW1lKTsKICAg
IGlmICgoKmFyZ3MpWzFdLT50eXBlICE9IFZFQzNGKQogICAgICAgIGVycigiRnVuY3Rpb24gJXM6
IHNlY29uZCBhcmd1bWVudCBtdXN0IGJlIHZlY3RvciIsIG5hbWUpOwp9OwoKU29DYWxjRnVuY3Zf
dnY6On5Tb0NhbGNGdW5jdl92digpIHt9ClNvQ2FsY0Z1bmMgKlNvQ2FsY0Z1bmN2X3Z2OjpkdXAo
KSBjb25zdCB7IHJldHVybiBuZXcgU29DYWxjRnVuY3ZfdnYobmFtZSwgZnVuYyk7IH0KU2JWZWMz
ZiBTb0NhbGNGdW5jdl92djo6Z2V0VmVjM2YoKSB7CiAgICBTb0NhbGNFeHByICplMCA9ICgqYXJn
cylbMF0sICplMSA9ICgqYXJncylbMV07CiAgICByZXR1cm4gKCpmdW5jKShlMC0+Z2V0VmVjM2Yo
KSwgZTEtPmdldFZlYzNmKCkpOwp9CnZvaWQgU29DYWxjRnVuY3ZfdnY6OnNldEFyZ3MoU29DYWxj
RXhwckxpc3QgKmEpCnsKICAgIGFyZ3MgPSBhOwogICAgaWYgKGFyZ3MtPmdldExlbmd0aCgpICE9
IDIpCiAgICAgICAgZXJyKCJGdW5jdGlvbiAlczogd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyAo
JWQgc2hvdWxkIGJlIDIpIiwgbmFtZSwgYXJncy0+Z2V0TGVuZ3RoKCkpOwogICAgaWYgKCgqYXJn
cylbMF0tPnR5cGUgIT0gVkVDM0YpCiAgICAgICAgZXJyKCJGdW5jdGlvbiAlczogZmlyc3QgYXJn
dW1lbnQgbXVzdCBiZSB2ZWN0b3IiLCBuYW1lKTsKICAgIGlmICgoKmFyZ3MpWzFdLT50eXBlICE9
IFZFQzNGKQogICAgICAgIGVycigiRnVuY3Rpb24gJXM6IHNlY29uZCBhcmd1bWVudCBtdXN0IGJl
IHZlY3RvciIsIG5hbWUpOwp9OwoKU29DYWxjRnVuY3ZfZGRkOjp+U29DYWxjRnVuY3ZfZGRkKCkg
e30KU29DYWxjRnVuYyAqU29DYWxjRnVuY3ZfZGRkOjpkdXAoKSBjb25zdCB7IHJldHVybiBuZXcg
U29DYWxjRnVuY3ZfZGRkKG5hbWUsIGZ1bmMpOyB9ClNiVmVjM2YgU29DYWxjRnVuY3ZfZGRkOjpn
ZXRWZWMzZigpIHsKICAgIFNvQ2FsY0V4cHIgKmUwID0gKCphcmdzKVswXSwgKmUxID0gKCphcmdz
KVsxXSwgKmUyID0gKCphcmdzKVsyXTsKICAgIHJldHVybiAoKmZ1bmMpKGUwLT5nZXRGbG9hdCgp
LCBlMS0+Z2V0RmxvYXQoKSwgZTItPmdldEZsb2F0KCkpOwp9CnZvaWQgU29DYWxjRnVuY3ZfZGRk
OjpzZXRBcmdzKFNvQ2FsY0V4cHJMaXN0ICphKQp7CiAgICBhcmdzID0gYTsKICAgIGlmIChhcmdz
LT5nZXRMZW5ndGgoKSAhPSAzKQogICAgICAgIGVycigiRnVuY3Rpb24gJXM6IHdyb25nIG51bWJl
ciBvZiBhcmd1bWVudHMgKCVkIHNob3VsZCBiZSAzKSIsIG5hbWUsIGFyZ3MtPmdldExlbmd0aCgp
KTsKICAgIGlmICgoKmFyZ3MpWzBdLT50eXBlICE9IEZMT0FUKQogICAgICAgIGVycigiRnVuY3Rp
b24gJXM6IGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgc2NhbGFyIiwgbmFtZSk7CiAgICBpZiAoKCph
cmdzKVsxXS0+dHlwZSAhPSBGTE9BVCkKICAgICAgICBlcnIoIkZ1bmN0aW9uICVzOiBzZWNvbmQg
YXJndW1lbnQgbXVzdCBiZSBzY2FsYXIiLCBuYW1lKTsKICAgIGlmICgoKmFyZ3MpWzJdLT50eXBl
ICE9IEZMT0FUKQogICAgICAgIGVycigiRnVuY3Rpb24gJXM6IHRoaXJkIGFyZ3VtZW50IG11c3Qg
YmUgc2NhbGFyIiwgbmFtZSk7Cn07CgoKCgpTb0NhbGNCaW5hcnlPcDo6flNvQ2FsY0JpbmFyeU9w
KCkgeyBkZWxldGUgYTsgZGVsZXRlIGI7IH0KU29DYWxjQmluYXJ5T3A6OlNvQ2FsY0JpbmFyeU9w
KFNvQ2FsY0V4cHIgKmVhLCBTb0NhbGNFeHByICplYiwgaW50IFR5cGVCaXRzKSA6IGEoZWEpLCBi
KGViKQp7CiAgICBTYkJvb2wgT0sgPSAwOwoKICAgIGlmIChhLT50eXBlID09IEZMT0FUICYmIGIt
PnR5cGUgPT0gRkxPQVQpCiAgICAgICAgT0sgPSBUeXBlQml0cyAmIEZGOwoKICAgIGVsc2UgaWYg
KGEtPnR5cGUgPT0gRkxPQVQgJiYgYi0+dHlwZSA9PSBWRUMzRikKICAgICAgICBPSyA9IFR5cGVC
aXRzICYgRlY7CgogICAgZWxzZSBpZiAoYS0+dHlwZSA9PSBWRUMzRiAmJiBiLT50eXBlID09IEZM
T0FUKQogICAgICAgIE9LID0gVHlwZUJpdHMgJiBWRjsKCiAgICBlbHNlIGlmIChhLT50eXBlID09
IFZFQzNGICYmIGItPnR5cGUgPT0gVkVDM0YpCiAgICAgICAgT0sgPSBUeXBlQml0cyAmIFZWOwoK
ICAgIGlmICghT0spCiAgICAgICAgZXJyKCJCaW5hcnlPcDogIGluY29tcGF0aWJsZSB0eXBlcyAo
JXMgYW5kICVzKSIsCiAgICAgICAgICAgIGEtPnR5cGVOYW1lKCksIGItPnR5cGVOYW1lKCkpOwp9
CgpTb0NhbGNBc3NpZ25JbmRleDo6U29DYWxjQXNzaWduSW5kZXgoU29DYWxjRXhwciAqX2EsIFNv
Q2FsY0V4cHIgKl9iLCBTb0NhbGNFeHByICpfYykKICAgICAgICA6IFNvQ2FsY0V4cHIoU29DYWxj
RXhwcjo6RkxPQVQpCnsKICAgIGEgPSBfYTsKICAgIGIgPSBfYjsKICAgIGMgPSBfYzsKCiAgICBp
ZiAoYS0+dHlwZSAhPSBTb0NhbGNFeHByOjpWRUMzRikKICAgICAgICBlcnIoIkluIGV4cHJlc3Np
b25zIG9mIHRoZSBmb3JtICdBW2JdID0gYycsIEEgbXVzdCBiZSBhIHZlY3RvciIpOwogICAgaWYg
KGItPnR5cGUgIT0gU29DYWxjRXhwcjo6RkxPQVQpCiAgICAgICAgZXJyKCJJbiBleHByZXNzaW9u
cyBvZiB0aGUgZm9ybSAnQVtiXSA9IGMnLCBiIG11c3QgYmUgYSBmbG9hdCIpOwogICAgaWYgKGMt
PnR5cGUgIT0gU29DYWxjRXhwcjo6RkxPQVQpCiAgICAgICAgZXJyKCJJbiBleHByZXNzaW9ucyBv
ZiB0aGUgZm9ybSAnQVtiXSA9IGMnLCBjIG11c3QgYmUgYSBmbG9hdCIpOwp9CgpTb0NhbGNBc3Np
Z25JbmRleDo6flNvQ2FsY0Fzc2lnbkluZGV4KCkge30KCmZsb2F0ClNvQ2FsY0Fzc2lnbkluZGV4
OjpnZXRGbG9hdCgpCnsKICAgIGZsb2F0IHJlc3VsdCA9IGMtPmdldEZsb2F0KCk7CiAgICBTYlZl
YzNmIHZhbCA9IGEtPmdldFZlYzNmKCk7CiAgICBpbnQgaW5kZXggPSBpbnQoYi0+Z2V0RmxvYXQo
KSk7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gMikKICAgICAgICBlcnIoIlZlY3RvciBp
bmRleCBvdXQgb2YgcmFuZ2UgKG11c3QgYmUgMC0yLCBpcyAlZCkiLCBpbmRleCk7CiAgICBlbHNl
IHsKICAgICAgICB2YWxbaW5kZXhdID0gcmVzdWx0OwogICAgICAgIGEtPnNldFZlYzNmKHZhbCk7
CiAgICB9CiAgICByZXR1cm4gcmVzdWx0Owp9Cgp2b2lkIFNvQ2FsY0JpbmFyeU9wOjpwcmludChp
bnQgbGV2ZWwpCnsKCgoKCgoKfQoKU29DYWxjQXNzaWduOjp+U29DYWxjQXNzaWduKCkge30KU29D
YWxjUGx1czo6flNvQ2FsY1BsdXMoKSB7fQpTb0NhbGNNaW51czo6flNvQ2FsY01pbnVzKCkge30K
U29DYWxjTXVsdDo6flNvQ2FsY011bHQoKSB7fQpTb0NhbGNEaXZpZGU6On5Tb0NhbGNEaXZpZGUo
KSB7fQpTb0NhbGNNb2Q6On5Tb0NhbGNNb2QoKSB7fQpTb0NhbGNJbmRleDo6flNvQ2FsY0luZGV4
KCkge30KCmZsb2F0IFNvQ2FsY0Fzc2lnbjo6Z2V0RmxvYXQoKSB7IHJldHVybiBhLT5zZXRGbG9h
dChiLT5nZXRGbG9hdCgpKTsgfQpTYlZlYzNmIFNvQ2FsY0Fzc2lnbjo6Z2V0VmVjM2YoKSB7IHJl
dHVybiBhLT5zZXRWZWMzZihiLT5nZXRWZWMzZigpKTsgfQoKZmxvYXQgU29DYWxjUGx1czo6Z2V0
RmxvYXQoKSB7IHJldHVybiBhLT5nZXRGbG9hdCgpICsgYi0+Z2V0RmxvYXQoKTsgfQpTYlZlYzNm
IFNvQ2FsY1BsdXM6OmdldFZlYzNmKCkgeyByZXR1cm4gYS0+Z2V0VmVjM2YoKSArIGItPmdldFZl
YzNmKCk7IH0KCmZsb2F0IFNvQ2FsY01pbnVzOjpnZXRGbG9hdCgpeyByZXR1cm4gYS0+Z2V0Rmxv
YXQoKSAtIGItPmdldEZsb2F0KCk7IH0KU2JWZWMzZiBTb0NhbGNNaW51czo6Z2V0VmVjM2YoKSB7
IHJldHVybiBhLT5nZXRWZWMzZigpIC0gYi0+Z2V0VmVjM2YoKTsgfQoKZmxvYXQgU29DYWxjTXVs
dDo6Z2V0RmxvYXQoKSB7IHJldHVybiBhLT5nZXRGbG9hdCgpICogYi0+Z2V0RmxvYXQoKTsgfQpT
YlZlYzNmIFNvQ2FsY011bHQ6OmdldFZlYzNmKCkKewogICAgcmV0dXJuIChhLT50eXBlID09IEZM
T0FUKSA/CiAgICAgICAgYS0+Z2V0RmxvYXQoKSAqIGItPmdldFZlYzNmKCkgOgogICAgICAgIGEt
PmdldFZlYzNmKCkgKiBiLT5nZXRGbG9hdCgpOwp9CgpmbG9hdCBTb0NhbGNEaXZpZGU6OmdldEZs
b2F0KCkgeyByZXR1cm4gYS0+Z2V0RmxvYXQoKSAvIGItPmdldEZsb2F0KCk7IH0KU2JWZWMzZiBT
b0NhbGNEaXZpZGU6OmdldFZlYzNmKCkgeyByZXR1cm4gYS0+Z2V0VmVjM2YoKSAvIGItPmdldEZs
b2F0KCk7IH0KCmZsb2F0IFNvQ2FsY01vZDo6Z2V0RmxvYXQoKSB7IHJldHVybiAoaW50KSBhLT5n
ZXRGbG9hdCgpICUgKGludCkgYi0+Z2V0RmxvYXQoKTsgfQoKZmxvYXQgU29DYWxjSW5kZXg6Omdl
dEZsb2F0KCkgeyByZXR1cm4gYS0+Z2V0VmVjM2YoKVsoaW50KSBiLT5nZXRGbG9hdCgpXTsgfQoK
U29DYWxjTGVzc1RoYW46On5Tb0NhbGNMZXNzVGhhbigpIHt9ClNvQ2FsY0dyZWF0ZXJUaGFuOjp+
U29DYWxjR3JlYXRlclRoYW4oKSB7fQpTb0NhbGNMZXNzRVE6On5Tb0NhbGNMZXNzRVEoKSB7fQpT
b0NhbGNHcmVhdGVyRVE6On5Tb0NhbGNHcmVhdGVyRVEoKSB7fQpTb0NhbGNFcXVhbHM6On5Tb0Nh
bGNFcXVhbHMoKSB7fQpTb0NhbGNOb3RFcXVhbHM6On5Tb0NhbGNOb3RFcXVhbHMoKSB7fQpTb0Nh
bGNBbmQ6On5Tb0NhbGNBbmQoKSB7fQpTb0NhbGNPcjo6flNvQ2FsY09yKCkge30KCmZsb2F0IFNv
Q2FsY0xlc3NUaGFuOjpnZXRGbG9hdCgpIHsgcmV0dXJuIGEtPmdldEZsb2F0KCkgPCBiLT5nZXRG
bG9hdCgpOyB9CmZsb2F0IFNvQ2FsY0dyZWF0ZXJUaGFuOjpnZXRGbG9hdCgpIHsgcmV0dXJuIGEt
PmdldEZsb2F0KCkgPiBiLT5nZXRGbG9hdCgpOyB9CmZsb2F0IFNvQ2FsY0xlc3NFUTo6Z2V0Rmxv
YXQoKSB7IHJldHVybiBhLT5nZXRGbG9hdCgpIDw9IGItPmdldEZsb2F0KCk7IH0KZmxvYXQgU29D
YWxjR3JlYXRlckVROjpnZXRGbG9hdCgpIHsgcmV0dXJuIGEtPmdldEZsb2F0KCkgPj0gYi0+Z2V0
RmxvYXQoKTsgfQpmbG9hdCBTb0NhbGNFcXVhbHM6OmdldEZsb2F0KCkgeyByZXR1cm4gYS0+Z2V0
RmxvYXQoKSA9PSBiLT5nZXRGbG9hdCgpOyB9CmZsb2F0IFNvQ2FsY05vdEVxdWFsczo6Z2V0Rmxv
YXQoKSB7IHJldHVybiBhLT5nZXRGbG9hdCgpICE9IGItPmdldEZsb2F0KCk7IH0KZmxvYXQgU29D
YWxjQW5kOjpnZXRGbG9hdCgpIHsgcmV0dXJuIGEtPmdldEZsb2F0KCkgJiYgYi0+Z2V0RmxvYXQo
KTsgfQpmbG9hdCBTb0NhbGNPcjo6Z2V0RmxvYXQoKSB7IHJldHVybiBhLT5nZXRGbG9hdCgpIHx8
IGItPmdldEZsb2F0KCk7IH0KClNvQ2FsY05vdDo6flNvQ2FsY05vdCgpIHsgZGVsZXRlIGU7IH0K
ZmxvYXQgU29DYWxjTm90OjpnZXRGbG9hdCgpIHsgcmV0dXJuICEgZS0+Z2V0RmxvYXQoKTsgfQoK
dm9pZCBTb0NhbGNOb3Q6OnByaW50KGludCBsZXZlbCkKewoKCgoKCn0KClNvQ2FsY05lZ2F0ZTo6
flNvQ2FsY05lZ2F0ZSgpIHsgZGVsZXRlIGU7IH0KZmxvYXQgU29DYWxjTmVnYXRlOjpnZXRGbG9h
dCgpIHsgcmV0dXJuIC0gZS0+Z2V0RmxvYXQoKTsgfQpTYlZlYzNmIFNvQ2FsY05lZ2F0ZTo6Z2V0
VmVjM2YoKSB7IHJldHVybiAtIGUtPmdldFZlYzNmKCk7IH0KCnZvaWQgU29DYWxjTmVnYXRlOjpw
cmludChpbnQgbGV2ZWwpCnsKCgoKCgp9CgpTb0NhbGNUZXJuYXJ5Ojp+U29DYWxjVGVybmFyeSgp
IHsgZGVsZXRlIGV0ZXN0OyBkZWxldGUgZXRydWU7IGRlbGV0ZSBlZmFsc2U7IH0KU29DYWxjVGVy
bmFyeTo6U29DYWxjVGVybmFyeShTb0NhbGNFeHByICphLCBTb0NhbGNFeHByICpiLCBTb0NhbGNF
eHByICpjKQogICAgOiBldGVzdChhKSwgZXRydWUoYiksIGVmYWxzZShjKQp7CiAgICBpZiAoZXRl
c3QtPnR5cGUgIT0gRkxPQVQpCiAgICAgICAgZXJyKCJUZXJuYXJ5OjogY29uZGl0aW9uYWwgZXhw
cmVzc2lvbiBpbiA/OiBvcGVyYXRvciBtdXN0IGJlIHNjYWxhciIpOwoKICAgIGlmIChldHJ1ZS0+
dHlwZSAhPSBlZmFsc2UtPnR5cGUpCiAgICAgICAgZXJyKCJUZXJuYXJ5OjogZGlmZmVyZW50IHR5
cGVzIGFjcm9zcyA/OiBvcGVyYXRvciAoJXMgYW5kICVzKSIsCiAgICAgICAgICAgICAgICBldHJ1
ZS0+dHlwZU5hbWUoKSwgZWZhbHNlLT50eXBlTmFtZSgpKTsKCiAgICB0eXBlID0gZXRydWUtPnR5
cGU7Cn07CgpmbG9hdCBTb0NhbGNUZXJuYXJ5OjpnZXRGbG9hdCgpIHsgcmV0dXJuIGV0ZXN0LT5n
ZXRGbG9hdCgpID8gZXRydWUtPmdldEZsb2F0KCkgOiBlZmFsc2UtPmdldEZsb2F0KCk7IH0KU2JW
ZWMzZiBTb0NhbGNUZXJuYXJ5OjpnZXRWZWMzZigpIHsgcmV0dXJuIGV0ZXN0LT5nZXRGbG9hdCgp
ID8gZXRydWUtPmdldFZlYzNmKCkgOiBlZmFsc2UtPmdldFZlYzNmKCk7IH0KCnZvaWQgU29DYWxj
VGVybmFyeTo6cHJpbnQoaW50IGxldmVsKQp7CgoKCgoKCgp9CgoKCgoKCgpTb0NhbGNQYXJzZXI6
OlNvQ2FsY1BhcnNlcihmbG9hdCAqKCpsZikodm9pZCAqZGF0YSwgY29uc3QgY2hhciAqbmFtZSks
CiAgICAgICAgICAgICAgIFNiVmVjM2YgKigqbHYpKHZvaWQgKmRhdGEsIGNvbnN0IGNoYXIgKm5h
bWUpLAogICAgICAgICAgICAgICB2b2lkICpkKQp7CiAgICBsb29rdXBGbG9hdEZpZWxkID0gbGY7
CiAgICBsb29rdXBWZWMzZkZpZWxkID0gbHY7CiAgICBkYXRhID0gZDsKCiAgICBlbGlzdCA9IG5l
dyBTb0NhbGNFeHByTGlzdDsKfQoKU29DYWxjUGFyc2VyOjp+U29DYWxjUGFyc2VyKCkKewogICAg
ZGVsZXRlIGVsaXN0Owp9CgpTYkJvb2wKU29DYWxjUGFyc2VyOjpwYXJzZShjb25zdCBjaGFyICpi
dWYpCnsKICAgIFNvQ2FsY0V4cHI6Omxvb2t1cEZsb2F0RmllbGQgPSBsb29rdXBGbG9hdEZpZWxk
OwogICAgU29DYWxjRXhwcjo6bG9va3VwVmVjM2ZGaWVsZCA9IGxvb2t1cFZlYzNmRmllbGQ7CiAg
ICBTb0NhbGNFeHByOjpkYXRhID0gZGF0YTsKCiAgICBTb0NhbGNFeHByOjplcnJvciA9IDA7Cgog
ICAgZXh0ZXJuIFNiQm9vbCBTb0NhbGNQYXJzZShTb0NhbGNFeHByTGlzdCAqLCBjb25zdCBjaGFy
ICopOwoKICAgIGlmIChTb0NhbGNQYXJzZShlbGlzdCwgYnVmKSkKICAgICAgICByZXR1cm4gMDsK
CgoKCgoKICAgIHJldHVybiAhU29DYWxjRXhwcjo6ZXJyb3I7Cn0KIyA0MyAiU29FbmdpbmVzLmMr
KyIgMgojIDEgIlNvQ2FsY1BhcnNlLmMrKyIgMQoKc3RhdGljIGNoYXIgY29uc3QKU29DYWxjX3l5
cmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL3Vzci5iaW4veWFjYy9za2VsZXRvbi5jLHYgMS4yOCAy
MDAwLzAxLzE3IDAyOjA0OjA2IGJkZSBFeHAgJCI7CiMgMTQgIlNvQ2FsY1BhcnNlLmMrKyIKc3Rh
dGljIGludCBTb0NhbGNfeXlncm93c3RhY2soKTsKIyAxOSAiU29DYWxjUGFyc2UueSIKCgoKCiMg
MSAiL3Vzci9pbmNsdWRlL3ZhbHVlcy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3ZhbHVlcy5o
IiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8zLjIvaW5jbHVkZS9s
aW1pdHMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS92YWx1ZXMuaCIgMiAzCiMgNTIgIi91c3Iv
aW5jbHVkZS92YWx1ZXMuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGlu
dXgvMy4yL2luY2x1ZGUvZmxvYXQuaCIgMSAzCiMgNTMgIi91c3IvaW5jbHVkZS92YWx1ZXMuaCIg
MiAzCiMgMjQgIlNvQ2FsY1BhcnNlLnkiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDEg
MwojIDMwICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gIkMiIHsKIyA0OCAiL3Vzci9p
bmNsdWRlL2N0eXBlLmgiIDMKZW51bQp7CiAgX0lTdXBwZXIgPSAoKDApIDwgOCA/ICgoMSA8PCAo
MCkpIDw8IDgpIDogKCgxIDw8ICgwKSkgPj4gOCkpLAogIF9JU2xvd2VyID0gKCgxKSA8IDggPyAo
KDEgPDwgKDEpKSA8PCA4KSA6ICgoMSA8PCAoMSkpID4+IDgpKSwKICBfSVNhbHBoYSA9ICgoMikg
PCA4ID8gKCgxIDw8ICgyKSkgPDwgOCkgOiAoKDEgPDwgKDIpKSA+PiA4KSksCiAgX0lTZGlnaXQg
PSAoKDMpIDwgOCA/ICgoMSA8PCAoMykpIDw8IDgpIDogKCgxIDw8ICgzKSkgPj4gOCkpLAogIF9J
U3hkaWdpdCA9ICgoNCkgPCA4ID8gKCgxIDw8ICg0KSkgPDwgOCkgOiAoKDEgPDwgKDQpKSA+PiA4
KSksCiAgX0lTc3BhY2UgPSAoKDUpIDwgOCA/ICgoMSA8PCAoNSkpIDw8IDgpIDogKCgxIDw8ICg1
KSkgPj4gOCkpLAogIF9JU3ByaW50ID0gKCg2KSA8IDggPyAoKDEgPDwgKDYpKSA8PCA4KSA6ICgo
MSA8PCAoNikpID4+IDgpKSwKICBfSVNncmFwaCA9ICgoNykgPCA4ID8gKCgxIDw8ICg3KSkgPDwg
OCkgOiAoKDEgPDwgKDcpKSA+PiA4KSksCiAgX0lTYmxhbmsgPSAoKDgpIDwgOCA/ICgoMSA8PCAo
OCkpIDw8IDgpIDogKCgxIDw8ICg4KSkgPj4gOCkpLAogIF9JU2NudHJsID0gKCg5KSA8IDggPyAo
KDEgPDwgKDkpKSA8PCA4KSA6ICgoMSA8PCAoOSkpID4+IDgpKSwKICBfSVNwdW5jdCA9ICgoMTAp
IDwgOCA/ICgoMSA8PCAoMTApKSA8PCA4KSA6ICgoMSA8PCAoMTApKSA+PiA4KSksCiAgX0lTYWxu
dW0gPSAoKDExKSA8IDggPyAoKDEgPDwgKDExKSkgPDwgOCkgOiAoKDEgPDwgKDExKSkgPj4gOCkp
Cn07CiMgODEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBfX2NvbnN0IHVuc2lnbmVk
IHNob3J0IGludCAqKl9fY3R5cGVfYl9sb2MgKHZvaWQpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3QpKTsKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90ICoqX19jdHlwZV90b2xvd2VyX2xvYyAo
dm9pZCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdCkpOwpleHRlcm4gX19jb25zdCBfX2lu
dDMyX3QgKipfX2N0eXBlX3RvdXBwZXJfbG9jICh2b2lkKQogICAgIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0KSk7CiMgOTYgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCgoKCgoKCmV4dGVybiBpbnQg
aXNhbG51bSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2FscGhhIChpbnQpIHRocm93ICgp
OwpleHRlcm4gaW50IGlzY250cmwgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNkaWdpdCAo
aW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQpIHRocm93ICgpOwpleHRlcm4g
aW50IGlzZ3JhcGggKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwcmludCAoaW50KSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBpc3B1bmN0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzc3Bh
Y2UgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN1cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBpc3hkaWdpdCAoaW50KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB0b2xvd2VyIChp
bnQgX19jKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRvdXBwZXIgKGludCBfX2MpIHRocm93ICgp
OwoKCgoKCgoKCmV4dGVybiBpbnQgaXNibGFuayAoaW50KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IGludCBpc2N0eXBlIChpbnQgX19jLCBpbnQgX19tYXNrKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IGludCBpc2FzY2lpIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB0b2FzY2lpIChp
bnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfdG91cHBlciAoaW50KSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBfdG9sb3dlciAoaW50KSB0aHJvdyAoKTsKIyAyNDcgIi91c3IvaW5jbHVkZS9j
dHlwZS5oIiAzCmV4dGVybiBpbnQgaXNhbG51bV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgp
OwpleHRlcm4gaW50IGlzYWxwaGFfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBpc2NudHJsX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNk
aWdpdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IGlzbG93ZXJfbCAo
aW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2dyYXBoX2wgKGludCwgX19s
b2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwcmludF9sIChpbnQsIF9fbG9jYWxlX3Qp
IHRocm93ICgpOwpleHRlcm4gaW50IGlzcHVuY3RfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBpc3NwYWNlX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgaXN1cHBlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IGlz
eGRpZ2l0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGlzYmxhbmtf
bCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX3RvbG93ZXJfbCAo
aW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwpleHRlcm4gaW50IHRvbG93ZXJfbCAo
aW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX190b3VwcGVy
X2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKZXh0ZXJuIGludCB0b3VwcGVy
X2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKIyAzMjMgIi91c3IvaW5jbHVk
ZS9jdHlwZS5oIiAzCn0KIyAyNiAiU29DYWxjUGFyc2UueSIgMgojIDEgIi91c3IvaW5jbHVkZS9z
dHJpbmdzLmgiIDEgMwojIDI3ICJTb0NhbGNQYXJzZS55IiAyCgoKdm9pZCBTb0NhbGNfeXllcnJv
cihjb25zdCBjaGFyICopOwpleHRlcm4gIkMiIGludCBTb0NhbGNfeXlsZXgoKTsKaW50IFNvQ2Fs
Y195eXBhcnNlKCk7CgpzdGF0aWMgY29uc3QgY2hhciAqSW47CnN0YXRpYyBTb0NhbGNFeHByTGlz
dCAqRUxpc3Q7CgpzdGF0aWMgY29uc3Qgc3RydWN0IHsKICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAg
ICBmbG9hdCB2YWw7Cn0gQ29uc3RhbnRzW10gPSB7CiAgICB7ICJNQVhGTE9BVCIsIDMuNDAyODIz
NDdlKzM4RiB9LAogICAgeyAiTUlORkxPQVQiLCAxLjE3NTQ5NDM1ZS0zOEYgfSwKICAgIHsgIk1f
RSIsIDIuNzE4MjgxODI4NDU5MDQ1MjM1NCB9LAogICAgeyAiTV9MT0cyRSIsIDEuNDQyNjk1MDQw
ODg4OTYzNDA3NCB9LAogICAgeyAiTV9MT0cxMEUiLCAwLjQzNDI5NDQ4MTkwMzI1MTgyNzY1IH0s
CiAgICB7ICJNX0xOMiIsIDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDIgfSwKICAgIHsgIk1fTE4xMCIs
IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDIgfSwKICAgIHsgIk1fUEkiLCAzLjE0MTU5MjY1MzU4OTc5
MzIzODQ2IH0sCiAgICB7ICJNX1NRUlQyIiwgMS40MTQyMTM1NjIzNzMwOTUwNDg4MCB9LAogICAg
eyAiTV9TUVJUMV8yIiwgMC43MDcxMDY3ODExODY1NDc1MjQ0MCB9LAp9OwoKCnN0YXRpYyBjb25z
dCBzdHJ1Y3QgewogICAgY29uc3QgY2hhciAqbmFtZTsKICAgIFNvQ2FsY0V4cHI6OlR5cGUgdHlw
ZTsKfSBJbnB1dHNbXSA9IHsKICAgIHsgImEiLCBTb0NhbGNFeHByOjpGTE9BVH0sIHsgImIiLCBT
b0NhbGNFeHByOjpGTE9BVH0sCiAgICB7ICJjIiwgU29DYWxjRXhwcjo6RkxPQVR9LCB7ICJkIiwg
U29DYWxjRXhwcjo6RkxPQVR9LAogICAgeyAiZSIsIFNvQ2FsY0V4cHI6OkZMT0FUfSwgeyAiZiIs
IFNvQ2FsY0V4cHI6OkZMT0FUfSwKICAgIHsgImciLCBTb0NhbGNFeHByOjpGTE9BVH0sIHsgImgi
LCBTb0NhbGNFeHByOjpGTE9BVH0sCiAgICB7ICJBIiwgU29DYWxjRXhwcjo6VkVDM0Z9LCB7ICJC
IiwgU29DYWxjRXhwcjo6VkVDM0Z9LAogICAgeyAiQyIsIFNvQ2FsY0V4cHI6OlZFQzNGfSwgeyAi
RCIsIFNvQ2FsY0V4cHI6OlZFQzNGfSwKICAgIHsgIkUiLCBTb0NhbGNFeHByOjpWRUMzRn0sIHsg
IkYiLCBTb0NhbGNFeHByOjpWRUMzRn0sCiAgICB7ICJHIiwgU29DYWxjRXhwcjo6VkVDM0Z9LCB7
ICJIIiwgU29DYWxjRXhwcjo6VkVDM0Z9LAp9LCBPdXRwdXRzW10gPSB7CiAgICB7ICJvYSIsIFNv
Q2FsY0V4cHI6OkZMT0FUfSwgeyAib2IiLCBTb0NhbGNFeHByOjpGTE9BVH0sCiAgICB7ICJvYyIs
IFNvQ2FsY0V4cHI6OkZMT0FUfSwgeyAib2QiLCBTb0NhbGNFeHByOjpGTE9BVH0sCiAgICB7ICJv
QSIsIFNvQ2FsY0V4cHI6OlZFQzNGfSwgeyAib0IiLCBTb0NhbGNFeHByOjpWRUMzRn0sCiAgICB7
ICJvQyIsIFNvQ2FsY0V4cHI6OlZFQzNGfSwgeyAib0QiLCBTb0NhbGNFeHByOjpWRUMzRn0sCn0s
IFZhcnNbXSA9IHsKICAgIHsgInRhIiwgU29DYWxjRXhwcjo6RkxPQVR9LCB7ICJ0YiIsIFNvQ2Fs
Y0V4cHI6OkZMT0FUfSwKICAgIHsgInRjIiwgU29DYWxjRXhwcjo6RkxPQVR9LCB7ICJ0ZCIsIFNv
Q2FsY0V4cHI6OkZMT0FUfSwKICAgIHsgInRlIiwgU29DYWxjRXhwcjo6RkxPQVR9LCB7ICJ0ZiIs
IFNvQ2FsY0V4cHI6OkZMT0FUfSwKICAgIHsgInRnIiwgU29DYWxjRXhwcjo6RkxPQVR9LCB7ICJ0
aCIsIFNvQ2FsY0V4cHI6OkZMT0FUfSwKICAgIHsgInRBIiwgU29DYWxjRXhwcjo6VkVDM0Z9LCB7
ICJ0QiIsIFNvQ2FsY0V4cHI6OlZFQzNGfSwKICAgIHsgInRDIiwgU29DYWxjRXhwcjo6VkVDM0Z9
LCB7ICJ0RCIsIFNvQ2FsY0V4cHI6OlZFQzNGfSwKICAgIHsgInRFIiwgU29DYWxjRXhwcjo6VkVD
M0Z9LCB7ICJ0RiIsIFNvQ2FsY0V4cHI6OlZFQzNGfSwKICAgIHsgInRHIiwgU29DYWxjRXhwcjo6
VkVDM0Z9LCB7ICJ0SCIsIFNvQ2FsY0V4cHI6OlZFQzNGfSwKfTsKCgoKCnN0YXRpYyBkb3VibGUg
cmFuZChkb3VibGUgbWF4KSB7IHJldHVybiBtYXggKiBkcmFuZDQ4KCk7IH0Kc3RhdGljIFNiVmVj
M2YgY3Jvc3MoY29uc3QgU2JWZWMzZiAmYSwgY29uc3QgU2JWZWMzZiAmYikgeyByZXR1cm4gYS5j
cm9zcyhiKTsgfQpzdGF0aWMgZG91YmxlIGRvdChjb25zdCBTYlZlYzNmICZhLCBjb25zdCBTYlZl
YzNmICZiKSB7IHJldHVybiBhLmRvdChiKTsgfQpzdGF0aWMgZG91YmxlIGxlbmd0aChjb25zdCBT
YlZlYzNmICZhKSB7IHJldHVybiBhLmxlbmd0aCgpOyB9CnN0YXRpYyBTYlZlYzNmIG5vcm1hbGl6
ZShjb25zdCBTYlZlYzNmICZ2KSB7IFNiVmVjM2YgdD12OyB0Lm5vcm1hbGl6ZSgpOyByZXR1cm4g
dDsgfQpzdGF0aWMgU2JWZWMzZiB2ZWMzZihkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjKSB7
IHJldHVybiBTYlZlYzNmKGEsYixjKTsgfQoKCgoKc3RhdGljIHN0cnVjdCB7CiAgICBjb25zdCBT
b0NhbGNGdW5jICpmdW5jOwp9IEZ1bmNzWzI1XTsKIyAxMDQgIlNvQ2FsY1BhcnNlLnkiCnR5cGVk
ZWYgdW5pb24KewogICAgU29DYWxjRXhwciAqZXhwcjsKICAgIFNvQ2FsY0V4cHJMaXN0ICpsaXN0
Owp9IFlZU1RZUEU7CiMgMTAzICJ5LnRhYi5jIgojIDExNiAieS50YWIuYyIKY29uc3Qgc2hvcnQg
U29DYWxjX3l5bGhzW10gPSB7IC0xLAogICAgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMiwgMiwgMiwK
ICAgIDIsIDIsIDMsIDMsIDMsIDEyLCAxMiwgNCwgNCwgNCwKICAgIDUsIDUsIDUsIDUsIDYsIDYs
IDYsIDcsIDcsIDcsCiAgICA3LCA3LCA4LCA4LCA4LCA5LCA5LCAxMCwgMTAsIDExLAogICAxMSwK
fTsKY29uc3Qgc2hvcnQgU29DYWxjX3l5bGVuW10gPSB7IDIsCiAgICAxLCAzLCAyLCAzLCA2LCAz
LCA2LCAxLCAxLCAxLAogICAgMSwgMywgMSwgNCwgNCwgMSwgMywgMSwgMiwgMiwKICAgIDEsIDMs
IDMsIDMsIDEsIDMsIDMsIDEsIDMsIDMsCiAgICAzLCAzLCAxLCAzLCAzLCAxLCAzLCAxLCAzLCAx
LAogICAgNSwKfTsKY29uc3Qgc2hvcnQgU29DYWxjX3l5ZGVmcmVkW10gPSB7IDAsCiAgICAwLCAw
LCAwLCAxLCAwLCAwLCAwLCAwLCAwLCA4LAogICAgMCwgOSwgMTAsIDExLCAwLCAwLCAwLCAxMywg
MCwgMjEsCiAgICAwLCAwLCAwLCAwLCAwLCAwLCA0LCAwLCA2LCAwLAogICAgMiwgMCwgMCwgMTks
IDIwLCAwLCAwLCAwLCAwLCAwLAogICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKICAg
IDAsIDAsIDE2LCAwLCAxMiwgMCwgMjIsIDIzLCAyNCwgMCwKICAgIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsCiAgICAwLCAwLCAxNSwgMCwgMTQsIDAsIDUsIDcsIDE3LCA0MSwKfTsKY29u
c3Qgc2hvcnQgU29DYWxjX3l5ZGdvdG9bXSA9IHsgMywKICAgIDQsIDE4LCAxOSwgMjAsIDIxLCAy
MiwgMjMsIDI0LCAyNSwgMjYsCiAgIDI3LCA1NCwKfTsKY29uc3Qgc2hvcnQgU29DYWxjX3l5c2lu
ZGV4W10gPSB7IC0yNDUsCiAgLTYxLCAtNTYsIC00NiwgMCwgLTIxLCAtMjEsIC0yMSwgLTIxLCAt
MjQ1LCAwLAogIC0yMiwgMCwgMCwgMCwgLTIxLCAtMjEsIC0yMSwgMCwgLTY4LCAwLAogIC0yNywg
LTM2LCAtNTgsIC0yNDYsIC0yMzUsIC01NywgMCwgLTU5LCAwLCAtNTQsCiAgICAwLCAtMjEsIDYs
IDAsIDAsIC0yMSwgLTIxLCAtMjEsIC0yMSwgLTIxLAogIC0yMSwgLTIxLCAtMjEsIC0yMSwgLTIx
LCAtMjEsIC0yMSwgLTIxLCAtMjEsIC0yMSwKICAtMjAsIC0xMSwgMCwgLTMwLCAwLCAtMzksIDAs
IDAsIDAsIC0yNywKICAtMjcsIC0zNiwgLTM2LCAtMzYsIC0zNiwgLTU4LCAtNTgsIC0yNDYsIC0y
MzUsIC0zLAogIC0yMSwgLTIxLCAwLCAtMjEsIDAsIC0yMSwgMCwgMCwgMCwgMCwKfTsKY29uc3Qg
c2hvcnQgU29DYWxjX3l5cmluZGV4W10gPSB7IDAsCiAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAzLCAwLAogICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwKICAgIDgsIDY1LCAxMzYs
IDE4NCwgMzQ5LCAzNDMsIDAsIDAsIDAsIDAsCiAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLAogICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKICAgIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDMzLAogICA0MCwgNzIsIDk3LCAxMDQsIDExMCwgMTQyLCAxNTIsIDE5Miwg
MzgwLCAwLAogICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKfTsKY29uc3Qgc2hvcnQg
U29DYWxjX3l5Z2luZGV4W10gPSB7IDAsCiAgIDQ3LCAwLCAwLCAyMTUsIC05LCAtMTcsIC0xMCwg
OSwgMjAsIDAsCiAgMjEyLCAwLAp9OwoKY29uc3Qgc2hvcnQgU29DYWxjX3l5dGFibGVbXSA9IHsg
NSwKICAgMTgsIDQ0LCAzLCA0NSwgNywgNTAsIDQxLCAyNSwgNDAsIDM5LAogICA3MywgMTcsIDks
IDc0LCAzNywgMSwgMiwgMzIsIDE1LCAzOCwKICAgNDYsIDQ3LCAzNiwgMTYsIDYyLCA2MywgNjQs
IDY1LCA0OCwgNiwKICAgNjAsIDYxLCAyNywgNTEsIDgsIDY2LCA2NywgMTgsIDUyLCAyNiwKICAg
NzEsIDE4LCAxOCwgMTgsIDE4LCAxOCwgNTUsIDE4LCAyNSwgNzIsCiAgIDI1LCAyNSwgMjUsIDc1
LCA3NiwgMzEsIDY4LCAwLCAxOCwgMTgsCiAgIDE4LCAzLCAxOCwgMTgsIDI4LCAyNSwgMjUsIDI1
LCA2OSwgMjUsCiAgIDI1LCAzMiwgMCwgMjcsIDAsIDI3LCAyNywgMjcsIDAsIDAsCiAgIDI2LCAw
LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLAogICAyNywgMjcsIDI3LCAxOCwgMjcsIDI3LCAz
MSwgMjYsIDI2LCAyNiwKICAgMjUsIDI2LCAyNiwgMjksIDAsIDI4LCAwLCAwLCAyOCwgMzAsCiAg
ICAwLCAwLCAzMiwgMCwgMCwgMzIsIDAsIDAsIDAsIDAsCiAgICAwLCAwLCAyOCwgMjgsIDI4LCAy
NywgMjgsIDI4LCAwLCAzMiwKICAgMzIsIDMyLCAyNiwgMzIsIDMyLCAzMywgMCwgMzEsIDAsIDAs
CiAgIDMxLCAzNCwgMCwgMCwgMjksIDAsIDAsIDI5LCAwLCAwLAogICAzMCwgMzUsIDAsIDMwLCAz
MSwgMzEsIDMxLCAyOCwgMzEsIDMxLAogICAgMCwgMjksIDI5LCAyOSwgMzIsIDI5LCAyOSwgMzAs
IDMwLCAzMCwKICAgIDAsIDMwLCAzMCwgMCwgMCwgMCwgMzMsIDAsIDAsIDMzLAogICAgMCwgMCwg
MzQsIDM2LCAwLCAzNCwgMCwgMCwgMCwgMzEsCiAgICAwLCAzNywgMzUsIDMzLCAzMywgMzUsIDI5
LCAwLCAzMywgMzQsCiAgIDM0LCAwLCAzMCwgMCwgMzQsIDQ5LCA0MiwgNDMsIDAsIDM1LAogICAz
NSwgMCwgMCwgMCwgMzUsIDAsIDAsIDI4LCAyOSwgMzAsCiAgICAwLCAwLCAwLCAwLCAzNiwgMCwg
MzMsIDM2LCAzMywgMCwKICAgMzQsIDM1LCAzNywgMCwgMzQsIDM3LCAxMCwgMTEsIDEyLCAxMywK
ICAgMTQsIDM2LCAzNiwgNTMsIDM1LCAwLCAzNiwgNTYsIDAsIDM3LAogICAzNywgNTcsIDU4LCA1
OSwgMzcsIDAsIDAsIDAsIDAsIDAsCiAgICAwLCA3MCwgMCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAx
OCwgMCwKICAgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMzYsIDAsIDAsIDAsCiAgICAwLCAwLCA3
NywgNzgsIDM3LCA3OSwgMCwgODAsIDAsIDAsCiAgICAwLCAwLCAwLCAwLCAwLCAyNywgMjcsIDI3
LCAyNywgMjcsCiAgIDI3LCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLAogICAgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4LCAy
OCwgMjgsCiAgIDI4LCAyOCwgMjgsIDAsIDMyLCAzMiwgMzIsIDMyLCAzMiwgMzIsCiAgICAwLCAw
LCA0MCwgMCwgMCwgMCwgMCwgMCwgMzgsIDAsCiAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAzMSwKICAgMzEsIDMxLCAzMSwgMzEsIDMxLCAwLCAyOSwgMjksIDI5LCAyOSwKICAgMjksIDI5
LCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAwLCAzOSwKICAgIDAsIDAsIDAsIDQwLCAwLCAwLCA0
MCwgMCwgMCwgMzgsCiAgICAwLCAwLCAzOCwgMCwgMCwgMCwgMCwgMCwgMzMsIDMzLAogICA0MCwg
NDAsIDMzLCAzMywgMzQsIDM0LCAzOCwgMzgsIDM0LCAzNCwKICAgIDAsIDM4LCAwLCAwLCAzNSwg
MzUsIDAsIDAsIDM1LCAzNSwKICAgMzksIDAsIDAsIDM5LCAwLCAwLCAwLCAwLCAwLCAwLAogICAg
MCwgMCwgMCwgMCwgMCwgNDAsIDAsIDM5LCAzOSwgMCwKICAgIDAsIDM4LCAzOSwgMCwgMCwgMCwg
MzYsIDM2LCAwLCAwLAogICAgMCwgMCwgMCwgMCwgMzcsIDM3LCAwLCAwLCAwLCAwLAogICAgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKICAgIDAsIDAsIDM5LCAwLCAwLCAwLCAwLCAwLCAw
LCAwLAogICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKICAgIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsCiAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAogICAgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsCiAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAogICAgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwKICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCiAgICAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAogICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwKICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCiAgICAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLAogICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKICAgIDAsIDM4
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAogICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwKICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCiAgICAwLCAwLCAzOSwKfTsKY29u
c3Qgc2hvcnQgU29DYWxjX3l5Y2hlY2tbXSA9IHsgNjEsCiAgICAwLCA2MCwgMCwgNjIsIDYxLCA2
MywgNDMsIDAsIDQ1LCAzNywKICAgNDEsIDMzLCA1OSwgNDQsIDQyLCAyNjEsIDI2MiwgNDAsIDQw
LCA0NywKICAyNjcsIDI2OCwgOTEsIDQ1LCA0MiwgNDMsIDQ0LCA0NSwgMjY0LCA5MSwKICAgNDAs
IDQxLCAwLCA5MywgOTEsIDQ2LCA0NywgMzcsIDkzLCAwLAogICA2MSwgNDEsIDQyLCA0MywgNDQs
IDQ1LCA0MSwgNDcsIDQxLCA2MSwKICAgNDMsIDQ0LCA0NSwgOTMsIDU4LCA5LCA0OCwgLTEsIDU4
LCA1OSwKICAgNjAsIDU5LCA2MiwgNjMsIDAsIDU4LCA1OSwgNjAsIDQ5LCA2MiwKICAgNjMsIDAs
IC0xLCA0MSwgLTEsIDQzLCA0NCwgNDUsIC0xLCAtMSwKICAgNDEsIC0xLCA0MywgNDQsIDQ1LCAt
MSwgLTEsIC0xLCAtMSwgLTEsCiAgIDU4LCA1OSwgNjAsIDkzLCA2MiwgNjMsIDAsIDU4LCA1OSwg
NjAsCiAgIDkzLCA2MiwgNjMsIDAsIC0xLCA0MSwgLTEsIC0xLCA0NCwgMCwKICAgLTEsIC0xLCA0
MSwgLTEsIC0xLCA0NCwgLTEsIC0xLCAtMSwgLTEsCiAgIC0xLCAtMSwgNTgsIDU5LCA2MCwgOTMs
IDYyLCA2MywgLTEsIDU4LAogICA1OSwgNjAsIDkzLCA2MiwgNjMsIDAsIC0xLCA0MSwgLTEsIC0x
LAogICA0NCwgMCwgLTEsIC0xLCA0MSwgLTEsIC0xLCA0NCwgLTEsIC0xLAogICA0MSwgMCwgLTEs
IDQ0LCA1OCwgNTksIDYwLCA5MywgNjIsIDYzLAogICAtMSwgNTgsIDU5LCA2MCwgOTMsIDYyLCA2
MywgNTgsIDU5LCA2MCwKICAgLTEsIDYyLCA2MywgLTEsIC0xLCAtMSwgNDEsIC0xLCAtMSwgNDQs
CiAgIC0xLCAtMSwgNDEsIDAsIC0xLCA0NCwgLTEsIC0xLCAtMSwgOTMsCiAgIC0xLCAwLCA0MSwg
NTgsIDU5LCA0NCwgOTMsIC0xLCA2MywgNTgsCiAgIDU5LCAtMSwgOTMsIC0xLCA2MywgMjYzLCAy
NjUsIDI2NiwgLTEsIDU4LAogICA1OSwgLTEsIC0xLCAtMSwgNjMsIC0xLCAtMSwgNiwgNywgOCwK
ICAgLTEsIC0xLCAtMSwgLTEsIDQxLCAtMSwgMTUsIDQ0LCA5MywgLTEsCiAgIDE2LCAxNywgNDEs
IC0xLCA5MywgNDQsIDI1OCwgMjU5LCAyNjAsIDI2MSwKICAyNjIsIDU4LCA1OSwgMzIsIDkzLCAt
MSwgNjMsIDM2LCAtMSwgNTgsCiAgIDU5LCAzNywgMzgsIDM5LCA2MywgLTEsIC0xLCAtMSwgLTEs
IC0xLAogICAtMSwgNTAsIC0xLCAyNjMsIDI2NCwgMjY1LCAyNjYsIDI2NywgMjY4LCAtMSwKICAy
NjMsIDI2NCwgMjY1LCAyNjYsIDI2NywgMjY4LCA5MywgLTEsIC0xLCAtMSwKICAgLTEsIC0xLCA3
MSwgNzIsIDkzLCA3NCwgLTEsIDc2LCAtMSwgLTEsCiAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgMjYz
LCAyNjQsIDI2NSwgMjY2LCAyNjcsCiAgMjY4LCAtMSwgMjYzLCAyNjQsIDI2NSwgMjY2LCAyNjcs
IDI2OCwgLTEsIC0xLAogICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwK
ICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDI2MywgMjY0LCAyNjUsCiAgMjY2LCAyNjcs
IDI2OCwgLTEsIDI2MywgMjY0LCAyNjUsIDI2NiwgMjY3LCAyNjgsCiAgIC0xLCAtMSwgMCwgLTEs
IC0xLCAtMSwgLTEsIC0xLCAwLCAtMSwKICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0x
LCAtMSwgMjYzLAogIDI2NCwgMjY1LCAyNjYsIDI2NywgMjY4LCAtMSwgMjYzLCAyNjQsIDI2NSwg
MjY2LAogIDI2NywgMjY4LCAyNjMsIDI2NCwgMjY1LCAyNjYsIDI2NywgMjY4LCAtMSwgMCwKICAg
LTEsIC0xLCAtMSwgNDEsIC0xLCAtMSwgNDQsIC0xLCAtMSwgNDEsCiAgIC0xLCAtMSwgNDQsIC0x
LCAtMSwgLTEsIC0xLCAtMSwgMjYzLCAyNjQsCiAgIDU4LCA1OSwgMjY3LCAyNjgsIDI2MywgMjY0
LCA1OCwgNTksIDI2NywgMjY4LAogICAtMSwgNjMsIC0xLCAtMSwgMjYzLCAyNjQsIC0xLCAtMSwg
MjY3LCAyNjgsCiAgIDQxLCAtMSwgLTEsIDQ0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAogICAt
MSwgLTEsIC0xLCAtMSwgLTEsIDkzLCAtMSwgNTgsIDU5LCAtMSwKICAgLTEsIDkzLCA2MywgLTEs
IC0xLCAtMSwgMjYzLCAyNjQsIC0xLCAtMSwKICAgLTEsIC0xLCAtMSwgLTEsIDI2MywgMjY0LCAt
MSwgLTEsIC0xLCAtMSwKICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs
CiAgIC0xLCAtMSwgOTMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAogICAtMSwgLTEsIC0x
LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg
LTEsIC0xLCAtMSwgLTEsCiAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0x
LAogICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKICAgLTEsIC0xLCAt
MSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCiAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs
IC0xLCAtMSwgLTEsIC0xLAogICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAt
MSwKICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCiAgIC0xLCAtMSwg
LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAogICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0x
LCAtMSwgLTEsIC0xLCAtMSwKICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg
LTEsCiAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAogICAtMSwgLTEs
IC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKICAgLTEsIDI2MywgLTEsIC0xLCAtMSwg
LTEsIC0xLCAtMSwgLTEsIC0xLAogICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0x
LCAtMSwKICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCiAgIC0xLCAt
MSwgMjYzLAp9OwojIDM4MCAieS50YWIuYyIKaW50IFNvQ2FsY195eWRlYnVnOwppbnQgU29DYWxj
X3l5bmVycnM7CmludCBTb0NhbGNfeXllcnJmbGFnOwppbnQgU29DYWxjX3l5Y2hhcjsKc2hvcnQg
KlNvQ2FsY195eXNzcDsKWVlTVFlQRSAqU29DYWxjX3l5dnNwOwpZWVNUWVBFIFNvQ2FsY195eXZh
bDsKWVlTVFlQRSBTb0NhbGNfeXlsdmFsOwpzaG9ydCAqU29DYWxjX3l5c3M7CnNob3J0ICpTb0Nh
bGNfeXlzc2xpbTsKWVlTVFlQRSAqU29DYWxjX3l5dnM7CmludCBTb0NhbGNfeXlzdGFja3NpemU7
CiMgMjIxICJTb0NhbGNQYXJzZS55IgoKCgoKCgoKc3RhdGljIHZvaWQKaW5pdEZ1bmNzKCkKewog
ICAgaW50IGkgPSAwOwoKCgoKICAgIEZ1bmNzW2krK10uZnVuYyA9IG5ldyBTb0NhbGNGdW5jX2Qo
ImFjb3MiLGFjb3MpOwogICAgRnVuY3NbaSsrXS5mdW5jID0gbmV3IFNvQ2FsY0Z1bmNfZCgiYXNp
biIsYXNpbik7CiAgICBGdW5jc1tpKytdLmZ1bmMgPSBuZXcgU29DYWxjRnVuY19kKCJhdGFuIixh
dGFuKTsKICAgIEZ1bmNzW2krK10uZnVuYyA9IG5ldyBTb0NhbGNGdW5jX2RkKCJhdGFuMiIsYXRh
bjIpOwogICAgRnVuY3NbaSsrXS5mdW5jID0gbmV3IFNvQ2FsY0Z1bmNfZCgiY2VpbCIsY2VpbCk7
CiAgICBGdW5jc1tpKytdLmZ1bmMgPSBuZXcgU29DYWxjRnVuY19kKCJjb3MiLGNvcyk7CiAgICBG
dW5jc1tpKytdLmZ1bmMgPSBuZXcgU29DYWxjRnVuY19kKCJjb3NoIixjb3NoKTsKICAgIEZ1bmNz
W2krK10uZnVuYyA9IG5ldyBTb0NhbGNGdW5jdl92digiY3Jvc3MiLGNyb3NzKTsKICAgIEZ1bmNz
W2krK10uZnVuYyA9IG5ldyBTb0NhbGNGdW5jX3Z2KCJkb3QiLGRvdCk7CiAgICBGdW5jc1tpKytd
LmZ1bmMgPSBuZXcgU29DYWxjRnVuY19kKCJleHAiLGV4cCk7CiAgICBGdW5jc1tpKytdLmZ1bmMg
PSBuZXcgU29DYWxjRnVuY19kKCJmYWJzIixmYWJzKTsKICAgIEZ1bmNzW2krK10uZnVuYyA9IG5l
dyBTb0NhbGNGdW5jX2QoImZsb29yIixmbG9vcik7CiAgICBGdW5jc1tpKytdLmZ1bmMgPSBuZXcg
U29DYWxjRnVuY19kZCgiZm1vZCIsZm1vZCk7CiAgICBGdW5jc1tpKytdLmZ1bmMgPSBuZXcgU29D
YWxjRnVuY192KCJsZW5ndGgiLGxlbmd0aCk7CiAgICBGdW5jc1tpKytdLmZ1bmMgPSBuZXcgU29D
YWxjRnVuY19kKCJsb2ciLGxvZyk7CiAgICBGdW5jc1tpKytdLmZ1bmMgPSBuZXcgU29DYWxjRnVu
Y19kKCJsb2cxMCIsbG9nMTApOwogICAgRnVuY3NbaSsrXS5mdW5jID0gbmV3IFNvQ2FsY0Z1bmN2
X3YoIm5vcm1hbGl6ZSIsbm9ybWFsaXplKTsKICAgIEZ1bmNzW2krK10uZnVuYyA9IG5ldyBTb0Nh
bGNGdW5jX2RkKCJwb3ciLHBvdyk7CiAgICBGdW5jc1tpKytdLmZ1bmMgPSBuZXcgU29DYWxjRnVu
Y19kKCJyYW5kIixyYW5kKTsKICAgIEZ1bmNzW2krK10uZnVuYyA9IG5ldyBTb0NhbGNGdW5jX2Qo
InNpbiIsc2luKTsKICAgIEZ1bmNzW2krK10uZnVuYyA9IG5ldyBTb0NhbGNGdW5jX2QoInNpbmgi
LHNpbmgpOwogICAgRnVuY3NbaSsrXS5mdW5jID0gbmV3IFNvQ2FsY0Z1bmNfZCgic3FydCIsc3Fy
dCk7CiAgICBGdW5jc1tpKytdLmZ1bmMgPSBuZXcgU29DYWxjRnVuY19kKCJ0YW4iLHRhbik7CiAg
ICBGdW5jc1tpKytdLmZ1bmMgPSBuZXcgU29DYWxjRnVuY19kKCJ0YW5oIix0YW5oKTsKICAgIEZ1
bmNzW2krK10uZnVuYyA9IG5ldyBTb0NhbGNGdW5jdl9kZGQoInZlYzNmIix2ZWMzZik7CgoKCgoK
Cgp9CgpzdGF0aWMgU29DYWxjQ29uc3QgKgppc0NvbnN0KGNvbnN0IGNoYXIgKm5tKQp7CiAgICBm
b3IgKGludCBpPTA7IGk8KHNpemVvZihDb25zdGFudHMpL3NpemVvZihDb25zdGFudHNbMF0pKTsg
aSsrKQogICAgICAgIGlmIChzdHJjbXAobm0sIENvbnN0YW50c1tpXS5uYW1lKT09MCkKICAgICAg
ICAgICAgcmV0dXJuIG5ldyBTb0NhbGNDb25zdChDb25zdGFudHNbaV0udmFsKTsKICAgIHJldHVy
biBfX251bGw7Cn0KCnN0YXRpYyBTb0NhbGNGdW5jICoKaXNGdW5jKGNvbnN0IGNoYXIgKm5tKQp7
CiAgICBmb3IgKGludCBpPTA7IGk8MjU7IGkrKykgewogICAgICAgIGNvbnN0IFNvQ2FsY0Z1bmMg
KmYgPSBGdW5jc1tpXS5mdW5jOwogICAgICAgIGlmIChzdHJjbXAobm0sIGYtPm5hbWUpPT0wKQog
ICAgICAgICAgICByZXR1cm4gZi0+ZHVwKCk7CiAgICB9CiAgICByZXR1cm4gX19udWxsOwp9Cgpz
dGF0aWMgU29DYWxjVmFyICoKaXNJbnB1dChjb25zdCBjaGFyICpubSkKewogICAgZm9yIChpbnQg
aT0wOyBpPChzaXplb2YoSW5wdXRzKS9zaXplb2YoSW5wdXRzWzBdKSk7IGkrKykgaWYgKHN0cmNt
cChubSwgSW5wdXRzW2ldLm5hbWUpPT0wKQogICAgICAgIHJldHVybiBuZXcgU29DYWxjVmFyKG5t
LCBJbnB1dHNbaV0udHlwZSk7CiAgICByZXR1cm4gX19udWxsOwp9CgpzdGF0aWMgU29DYWxjVmFy
ICoKaXNPdXRwdXQoY29uc3QgY2hhciAqbm0pCnsKICAgIGZvciAoaW50IGk9MDsgaTwoc2l6ZW9m
KE91dHB1dHMpL3NpemVvZihPdXRwdXRzWzBdKSk7IGkrKykgaWYgKHN0cmNtcChubSwgT3V0cHV0
c1tpXS5uYW1lKT09MCkKICAgICAgICByZXR1cm4gbmV3IFNvQ2FsY1ZhcihubSwgT3V0cHV0c1tp
XS50eXBlKTsKICAgIHJldHVybiBfX251bGw7Cn0KCnN0YXRpYyBTb0NhbGNWYXIgKgppc1Zhcihj
b25zdCBjaGFyICpubSkKewogICAgZm9yIChpbnQgaT0wOyBpPChzaXplb2YoVmFycykvc2l6ZW9m
KFZhcnNbMF0pKTsgaSsrKSBpZiAoc3RyY21wKG5tLCBWYXJzW2ldLm5hbWUpPT0wKQogICAgICAg
IHJldHVybiBuZXcgU29DYWxjVmFyKG5tLCBWYXJzW2ldLnR5cGUpOwogICAgcmV0dXJuIF9fbnVs
bDsKfQoKaW50IFNvQ2FsY195eWxleCgpCnsKCiAgICBjaGFyIGMsIGJ1ZlsxMDAgKzFdLCAqY3Ag
PSBidWY7CgoKICAgIHdoaWxlIChpc3NwYWNlKCpJbikpCiAgICAgICAgSW4rKzsKCiAgICBpZiAo
IUluWzBdKQogICAgICAgIHJldHVybiAoLTEpOwoKICAgIGlmIChpc2RpZ2l0KEluWzBdKSB8fCBJ
blswXSA9PSAnLicpIHsKCgoKCiAgICAgICAgU2JCb29sIGRvdCA9IDA7CiAgICAgICAgU2JCb29s
IGV4cCA9IDA7CiAgICAgICAgZm9yICg7OykgewogICAgICAgICAgICBjID0gKkluKys7CiAgICAg
ICAgICAgIGlmIChjcCAtIGJ1ZiA8IDEwMCkKICAgICAgICAgICAgICAgICpjcCsrID0gYzsKICAg
ICAgICAgICAgKmNwID0gYzsKICAgICAgICAgICAgaWYgKGlzZGlnaXQoYykpCiAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGM9PSAnLicpIHsKICAgICAgICAgICAgICAg
IGlmIChkb3QgfHwgZXhwKQogICAgICAgICAgICAgICAgICAgIHJldHVybiAyNTc7CiAgICAgICAg
ICAgICAgICBkb3QgPSAxOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0K
ICAgICAgICAgICAgaWYgKGMgPT0gJ2UnIHx8IGMgPT0gJ0UnKSB7CiAgICAgICAgICAgICAgICBp
ZiAoZXhwKQogICAgICAgICAgICAgICAgICAgIHJldHVybiAyNTc7CiAgICAgICAgICAgICAgICBl
eHAgPSAxOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgIGlmIChjID09ICctJyAmJiBleHAgJiYgKEluWy0yXSA9PSAnZScgfHwgSW5bLTJdID09ICdF
JykpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAg
IGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAoSW5bLTFdID09ICdlJykKICAgICAgICAgICAg
cmV0dXJuIDI1NzsKCiAgICAgICAgKmNwID0gMDsKICAgICAgICBJbi0tOwoKICAgICAgICBTb0Nh
bGNfeXlsdmFsLmV4cHIgPSBuZXcgU29DYWxjQ29uc3QoYXRvZihidWYpKTsKICAgICAgICByZXR1
cm4gMjU4OwogICAgfQoKICAgIGlmIChpc2FscGhhKEluWzBdKSkgewogICAgICAgIHdoaWxlIChp
c2FsbnVtKEluWzBdKSB8fCBJblswXSA9PSAnXycpIHsKICAgICAgICAgICAgaWYgKGNwIC0gYnVm
IDwgMTAwKQogICAgICAgICAgICAgICAgKmNwKysgPSAqSW4rKzsKICAgICAgICB9CiAgICAgICAg
KmNwID0gMDsKCiAgICAgICAgaWYgKFNvQ2FsY195eWx2YWwuZXhwciA9IGlzQ29uc3QoYnVmKSkK
ICAgICAgICAgICAgcmV0dXJuIDI1ODsKCiAgICAgICAgaWYgKFNvQ2FsY195eWx2YWwuZXhwciA9
IGlzRnVuYyhidWYpKQogICAgICAgICAgICByZXR1cm4gMjU5OwoKICAgICAgICBpZiAoU29DYWxj
X3l5bHZhbC5leHByID0gaXNJbnB1dChidWYpKQogICAgICAgICAgICByZXR1cm4gMjYwOwoKICAg
ICAgICBpZiAoU29DYWxjX3l5bHZhbC5leHByID0gaXNPdXRwdXQoYnVmKSkKICAgICAgICAgICAg
cmV0dXJuIDI2MTsKCiAgICAgICAgaWYgKFNvQ2FsY195eWx2YWwuZXhwciA9IGlzVmFyKGJ1Zikp
CiAgICAgICAgICAgIHJldHVybiAyNjI7CgogICAgfQoKCiAgICBpZiAoKEluWzBdPT0iPT0iWzBd
ICYmIEluWzFdPT0iPT0iWzFdKSkgeyBJbiArPSAyOyByZXR1cm4gMjY3OyB9CiAgICBpZiAoKElu
WzBdPT0iIT0iWzBdICYmIEluWzFdPT0iIT0iWzFdKSkgeyBJbiArPSAyOyByZXR1cm4gMjY4OyB9
CiAgICBpZiAoKEluWzBdPT0iPj0iWzBdICYmIEluWzFdPT0iPj0iWzFdKSkgeyBJbiArPSAyOyBy
ZXR1cm4gMjY1OyB9CiAgICBpZiAoKEluWzBdPT0iPD0iWzBdICYmIEluWzFdPT0iPD0iWzFdKSkg
eyBJbiArPSAyOyByZXR1cm4gMjY2OyB9CiAgICBpZiAoKEluWzBdPT0iJiYiWzBdICYmIEluWzFd
PT0iJiYiWzFdKSkgeyBJbiArPSAyOyByZXR1cm4gMjY0OyB9CiAgICBpZiAoKEluWzBdPT0ifHwi
WzBdICYmIEluWzFdPT0ifHwiWzFdKSkgeyBJbiArPSAyOyByZXR1cm4gMjYzOyB9CgogICAgcmV0
dXJuICpJbisrOwp9Cgp2b2lkClNvQ2FsY195eWVycm9yKGNvbnN0IGNoYXIgKikKewoKfQoKU2JC
b29sClNvQ2FsY1BhcnNlKFNvQ2FsY0V4cHJMaXN0ICplbGlzdCwgY29uc3QgY2hhciAqYnVmKQp7
CiAgICBzdGF0aWMgU2JCb29sIGluaXR0ZWQgPSAwOwoKICAgIGlmICghIGluaXR0ZWQpIHsKICAg
ICAgICBpbml0RnVuY3MoKTsKICAgICAgICBpbml0dGVkID0gMTsKICAgIH0KCiAgICBJbiA9IGJ1
ZjsKICAgIEVMaXN0ID0gZWxpc3Q7CiAgICByZXR1cm4oU29DYWxjX3l5cGFyc2UoKSk7Cn0KIyA2
MjQgInkudGFiLmMiCgpzdGF0aWMgaW50IFNvQ2FsY195eWdyb3dzdGFjaygpCnsKICAgIGludCBu
ZXdzaXplLCBpOwogICAgc2hvcnQgKm5ld3NzOwogICAgWVlTVFlQRSAqbmV3dnM7CgogICAgaWYg
KChuZXdzaXplID0gU29DYWxjX3l5c3RhY2tzaXplKSA9PSAwKQogICAgICAgIG5ld3NpemUgPSAy
MDA7CiAgICBlbHNlIGlmIChuZXdzaXplID49IDEwMDAwKQogICAgICAgIHJldHVybiAtMTsKICAg
IGVsc2UgaWYgKChuZXdzaXplICo9IDIpID4gMTAwMDApCiAgICAgICAgbmV3c2l6ZSA9IDEwMDAw
OwogICAgaSA9IFNvQ2FsY195eXNzcCAtIFNvQ2FsY195eXNzOwogICAgbmV3c3MgPSBTb0NhbGNf
eXlzcyA/IChzaG9ydCAqKXJlYWxsb2MoU29DYWxjX3l5c3MsIG5ld3NpemUgKiBzaXplb2YgKm5l
d3NzKSA6CiAgICAgIChzaG9ydCAqKW1hbGxvYyhuZXdzaXplICogc2l6ZW9mICpuZXdzcyk7CiAg
ICBpZiAobmV3c3MgPT0gX19udWxsKQogICAgICAgIHJldHVybiAtMTsKICAgIFNvQ2FsY195eXNz
ID0gbmV3c3M7CiAgICBTb0NhbGNfeXlzc3AgPSBuZXdzcyArIGk7CiAgICBuZXd2cyA9IFNvQ2Fs
Y195eXZzID8gKFlZU1RZUEUgKilyZWFsbG9jKFNvQ2FsY195eXZzLCBuZXdzaXplICogc2l6ZW9m
ICpuZXd2cykgOgogICAgICAoWVlTVFlQRSAqKW1hbGxvYyhuZXdzaXplICogc2l6ZW9mICpuZXd2
cyk7CiAgICBpZiAobmV3dnMgPT0gX19udWxsKQogICAgICAgIHJldHVybiAtMTsKICAgIFNvQ2Fs
Y195eXZzID0gbmV3dnM7CiAgICBTb0NhbGNfeXl2c3AgPSBuZXd2cyArIGk7CiAgICBTb0NhbGNf
eXlzdGFja3NpemUgPSBuZXdzaXplOwogICAgU29DYWxjX3l5c3NsaW0gPSBTb0NhbGNfeXlzcyAr
IG5ld3NpemUgLSAxOwogICAgcmV0dXJuIDA7Cn0KIyA2ODEgInkudGFiLmMiCmludApTb0NhbGNf
eXlwYXJzZSAodm9pZCkKICAgCnsKICAgIHJlZ2lzdGVyIGludCBTb0NhbGNfeXltLCBTb0NhbGNf
eXluLCBTb0NhbGNfeXlzdGF0ZTsKIyA2OTcgInkudGFiLmMiCiAgICBTb0NhbGNfeXluZXJycyA9
IDA7CiAgICBTb0NhbGNfeXllcnJmbGFnID0gMDsKICAgIFNvQ2FsY195eWNoYXIgPSAoLTEpOwoK
ICAgIGlmIChTb0NhbGNfeXlzcyA9PSBfX251bGwgJiYgU29DYWxjX3l5Z3Jvd3N0YWNrKCkpIGdv
dG8gU29DYWxjX3l5b3ZlcmZsb3c7CiAgICBTb0NhbGNfeXlzc3AgPSBTb0NhbGNfeXlzczsKICAg
IFNvQ2FsY195eXZzcCA9IFNvQ2FsY195eXZzOwogICAgKlNvQ2FsY195eXNzcCA9IFNvQ2FsY195
eXN0YXRlID0gMDsKClNvQ2FsY195eWxvb3A6CiAgICBpZiAoKFNvQ2FsY195eW4gPSBTb0NhbGNf
eXlkZWZyZWRbU29DYWxjX3l5c3RhdGVdKSkgZ290byBTb0NhbGNfeXlyZWR1Y2U7CiAgICBpZiAo
U29DYWxjX3l5Y2hhciA8IDApCiAgICB7CiAgICAgICAgaWYgKChTb0NhbGNfeXljaGFyID0gU29D
YWxjX3l5bGV4KCkpIDwgMCkgU29DYWxjX3l5Y2hhciA9IDA7CiMgNzIxICJ5LnRhYi5jIgogICAg
fQogICAgaWYgKChTb0NhbGNfeXluID0gU29DYWxjX3l5c2luZGV4W1NvQ2FsY195eXN0YXRlXSkg
JiYgKFNvQ2FsY195eW4gKz0gU29DYWxjX3l5Y2hhcikgPj0gMCAmJgogICAgICAgICAgICBTb0Nh
bGNfeXluIDw9IDY0MyAmJiBTb0NhbGNfeXljaGVja1tTb0NhbGNfeXluXSA9PSBTb0NhbGNfeXlj
aGFyKQogICAgewoKCgoKCiAgICAgICAgaWYgKFNvQ2FsY195eXNzcCA+PSBTb0NhbGNfeXlzc2xp
bSAmJiBTb0NhbGNfeXlncm93c3RhY2soKSkKICAgICAgICB7CiAgICAgICAgICAgIGdvdG8gU29D
YWxjX3l5b3ZlcmZsb3c7CiAgICAgICAgfQogICAgICAgICorK1NvQ2FsY195eXNzcCA9IFNvQ2Fs
Y195eXN0YXRlID0gU29DYWxjX3l5dGFibGVbU29DYWxjX3l5bl07CiAgICAgICAgKisrU29DYWxj
X3l5dnNwID0gU29DYWxjX3l5bHZhbDsKICAgICAgICBTb0NhbGNfeXljaGFyID0gKC0xKTsKICAg
ICAgICBpZiAoU29DYWxjX3l5ZXJyZmxhZyA+IDApIC0tU29DYWxjX3l5ZXJyZmxhZzsKICAgICAg
ICBnb3RvIFNvQ2FsY195eWxvb3A7CiAgICB9CiAgICBpZiAoKFNvQ2FsY195eW4gPSBTb0NhbGNf
eXlyaW5kZXhbU29DYWxjX3l5c3RhdGVdKSAmJiAoU29DYWxjX3l5biArPSBTb0NhbGNfeXljaGFy
KSA+PSAwICYmCiAgICAgICAgICAgIFNvQ2FsY195eW4gPD0gNjQzICYmIFNvQ2FsY195eWNoZWNr
W1NvQ2FsY195eW5dID09IFNvQ2FsY195eWNoYXIpCiAgICB7CiAgICAgICAgU29DYWxjX3l5biA9
IFNvQ2FsY195eXRhYmxlW1NvQ2FsY195eW5dOwogICAgICAgIGdvdG8gU29DYWxjX3l5cmVkdWNl
OwogICAgfQogICAgaWYgKFNvQ2FsY195eWVycmZsYWcpIGdvdG8gU29DYWxjX3l5aW5yZWNvdmVy
eTsKCiAgICBnb3RvIFNvQ2FsY195eW5ld2Vycm9yOwoKU29DYWxjX3l5bmV3ZXJyb3I6CiAgICBT
b0NhbGNfeXllcnJvcigic3ludGF4IGVycm9yIik7CgogICAgZ290byBTb0NhbGNfeXllcnJsYWI7
CgpTb0NhbGNfeXllcnJsYWI6CiAgICArK1NvQ2FsY195eW5lcnJzOwpTb0NhbGNfeXlpbnJlY292
ZXJ5OgogICAgaWYgKFNvQ2FsY195eWVycmZsYWcgPCAzKQogICAgewogICAgICAgIFNvQ2FsY195
eWVycmZsYWcgPSAzOwogICAgICAgIGZvciAoOzspCiAgICAgICAgewogICAgICAgICAgICBpZiAo
KFNvQ2FsY195eW4gPSBTb0NhbGNfeXlzaW5kZXhbKlNvQ2FsY195eXNzcF0pICYmIChTb0NhbGNf
eXluICs9IDI1NikgPj0gMCAmJgogICAgICAgICAgICAgICAgICAgIFNvQ2FsY195eW4gPD0gNjQz
ICYmIFNvQ2FsY195eWNoZWNrW1NvQ2FsY195eW5dID09IDI1NikKICAgICAgICAgICAgewoKCgoK
CiAgICAgICAgICAgICAgICBpZiAoU29DYWxjX3l5c3NwID49IFNvQ2FsY195eXNzbGltICYmIFNv
Q2FsY195eWdyb3dzdGFjaygpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
IGdvdG8gU29DYWxjX3l5b3ZlcmZsb3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAqKytTb0NhbGNfeXlzc3AgPSBTb0NhbGNfeXlzdGF0ZSA9IFNvQ2FsY195eXRhYmxlW1NvQ2Fs
Y195eW5dOwogICAgICAgICAgICAgICAgKisrU29DYWxjX3l5dnNwID0gU29DYWxjX3l5bHZhbDsK
ICAgICAgICAgICAgICAgIGdvdG8gU29DYWxjX3l5bG9vcDsKICAgICAgICAgICAgfQogICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgIHsKCgoKCgogICAgICAgICAgICAgICAgaWYgKFNvQ2FsY195
eXNzcCA8PSBTb0NhbGNfeXlzcykgZ290byBTb0NhbGNfeXlhYm9ydDsKICAgICAgICAgICAgICAg
IC0tU29DYWxjX3l5c3NwOwogICAgICAgICAgICAgICAgLS1Tb0NhbGNfeXl2c3A7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgaWYgKFNvQ2FsY195
eWNoYXIgPT0gMCkgZ290byBTb0NhbGNfeXlhYm9ydDsKIyA4MDUgInkudGFiLmMiCiAgICAgICAg
U29DYWxjX3l5Y2hhciA9ICgtMSk7CiAgICAgICAgZ290byBTb0NhbGNfeXlsb29wOwogICAgfQpT
b0NhbGNfeXlyZWR1Y2U6CgoKCgoKICAgIFNvQ2FsY195eW0gPSBTb0NhbGNfeXlsZW5bU29DYWxj
X3l5bl07CiAgICBTb0NhbGNfeXl2YWwgPSBTb0NhbGNfeXl2c3BbMS1Tb0NhbGNfeXltXTsKICAg
IHN3aXRjaCAoU29DYWxjX3l5bikKICAgIHsKY2FzZSAxOgojIDEyMSAiU29DYWxjUGFyc2UueSIK
eyBFTGlzdC0+YXBwZW5kKFNvQ2FsY195eXZzcFswXS5leHByKTsgfQpicmVhazsKY2FzZSAyOgoj
IDEyMiAiU29DYWxjUGFyc2UueSIKeyBFTGlzdC0+YXBwZW5kKFNvQ2FsY195eXZzcFswXS5leHBy
KTsgfQpicmVhazsKY2FzZSA0OgojIDEyOCAiU29DYWxjUGFyc2UueSIKeyBTb0NhbGNfeXl2YWwu
ZXhwciA9IG5ldyBTb0NhbGNBc3NpZ24oU29DYWxjX3l5dnNwWy0yXS5leHByLCBTb0NhbGNfeXl2
c3BbMF0uZXhwcik7IH0KYnJlYWs7CmNhc2UgNToKIyAxMzAgIlNvQ2FsY1BhcnNlLnkiCnsgU29D
YWxjX3l5dmFsLmV4cHIgPSBuZXcgU29DYWxjQXNzaWduSW5kZXgoU29DYWxjX3l5dnNwWy01XS5l
eHByLCBTb0NhbGNfeXl2c3BbLTNdLmV4cHIsIFNvQ2FsY195eXZzcFswXS5leHByKTsgfQpicmVh
azsKY2FzZSA2OgojIDEzMiAiU29DYWxjUGFyc2UueSIKeyBTb0NhbGNfeXl2YWwuZXhwciA9IG5l
dyBTb0NhbGNBc3NpZ24oU29DYWxjX3l5dnNwWy0yXS5leHByLCBTb0NhbGNfeXl2c3BbMF0uZXhw
cik7IH0KYnJlYWs7CmNhc2UgNzoKIyAxMzQgIlNvQ2FsY1BhcnNlLnkiCnsgU29DYWxjX3l5dmFs
LmV4cHIgPSBuZXcgU29DYWxjQXNzaWduSW5kZXgoU29DYWxjX3l5dnNwWy01XS5leHByLCBTb0Nh
bGNfeXl2c3BbLTNdLmV4cHIsIFNvQ2FsY195eXZzcFswXS5leHByKTsgfQpicmVhazsKY2FzZSA4
OgojIDEzOCAiU29DYWxjUGFyc2UueSIKeyBTb0NhbGNfeXl2YWwuZXhwciA9IFNvQ2FsY195eXZz
cFswXS5leHByOyB9CmJyZWFrOwpjYXNlIDk6CiMgMTM5ICJTb0NhbGNQYXJzZS55Igp7IFNvQ2Fs
Y195eXZhbC5leHByID0gU29DYWxjX3l5dnNwWzBdLmV4cHI7IH0KYnJlYWs7CmNhc2UgMTA6CiMg
MTQwICJTb0NhbGNQYXJzZS55Igp7IFNvQ2FsY195eXZhbC5leHByID0gU29DYWxjX3l5dnNwWzBd
LmV4cHI7IH0KYnJlYWs7CmNhc2UgMTE6CiMgMTQxICJTb0NhbGNQYXJzZS55Igp7IFNvQ2FsY195
eXZhbC5leHByID0gU29DYWxjX3l5dnNwWzBdLmV4cHI7IH0KYnJlYWs7CmNhc2UgMTI6CiMgMTQy
ICJTb0NhbGNQYXJzZS55Igp7IFNvQ2FsY195eXZhbC5leHByID0gU29DYWxjX3l5dnNwWy0xXS5l
eHByOyB9CmJyZWFrOwpjYXNlIDEzOgojIDE0NiAiU29DYWxjUGFyc2UueSIKeyBTb0NhbGNfeXl2
YWwuZXhwciA9IFNvQ2FsY195eXZzcFswXS5leHByOyB9CmJyZWFrOwpjYXNlIDE0OgojIDE0OCAi
U29DYWxjUGFyc2UueSIKeyBTb0NhbGNfeXl2YWwuZXhwciA9IG5ldyBTb0NhbGNJbmRleChTb0Nh
bGNfeXl2c3BbLTNdLmV4cHIsIFNvQ2FsY195eXZzcFstMV0uZXhwcik7IH0KYnJlYWs7CmNhc2Ug
MTU6CiMgMTQ5ICJTb0NhbGNQYXJzZS55Igp7ICgoU29DYWxjRnVuYyAqKVNvQ2FsY195eXZzcFst
M10uZXhwciktPnNldEFyZ3MoU29DYWxjX3l5dnNwWy0xXS5saXN0KTsgU29DYWxjX3l5dmFsLmV4
cHIgPSBTb0NhbGNfeXl2c3BbLTNdLmV4cHI7IH0KYnJlYWs7CmNhc2UgMTY6CiMgMTUzICJTb0Nh
bGNQYXJzZS55Igp7IChTb0NhbGNfeXl2YWwubGlzdCA9IG5ldyBTb0NhbGNFeHByTGlzdCktPmFw
cGVuZChTb0NhbGNfeXl2c3BbMF0uZXhwcik7IH0KYnJlYWs7CmNhc2UgMTc6CiMgMTU0ICJTb0Nh
bGNQYXJzZS55Igp7IFNvQ2FsY195eXZzcFstMl0ubGlzdC0+YXBwZW5kKFNvQ2FsY195eXZzcFsw
XS5leHByKTsgU29DYWxjX3l5dmFsLmxpc3QgPSBTb0NhbGNfeXl2c3BbLTJdLmxpc3Q7IH0KYnJl
YWs7CmNhc2UgMTk6CiMgMTU5ICJTb0NhbGNQYXJzZS55Igp7IFNvQ2FsY195eXZhbC5leHByID0g
bmV3IFNvQ2FsY05lZ2F0ZShTb0NhbGNfeXl2c3BbMF0uZXhwcik7IH0KYnJlYWs7CmNhc2UgMjA6
CiMgMTYwICJTb0NhbGNQYXJzZS55Igp7IFNvQ2FsY195eXZhbC5leHByID0gbmV3IFNvQ2FsY05v
dChTb0NhbGNfeXl2c3BbMF0uZXhwcik7IH0KYnJlYWs7CmNhc2UgMjI6CiMgMTY2ICJTb0NhbGNQ
YXJzZS55Igp7IFNvQ2FsY195eXZhbC5leHByID0gbmV3IFNvQ2FsY011bHQoU29DYWxjX3l5dnNw
Wy0yXS5leHByLCBTb0NhbGNfeXl2c3BbMF0uZXhwcik7IH0KYnJlYWs7CmNhc2UgMjM6CiMgMTY4
ICJTb0NhbGNQYXJzZS55Igp7IFNvQ2FsY195eXZhbC5leHByID0gbmV3IFNvQ2FsY0RpdmlkZShT
b0NhbGNfeXl2c3BbLTJdLmV4cHIsIFNvQ2FsY195eXZzcFswXS5leHByKTsgfQpicmVhazsKY2Fz
ZSAyNDoKIyAxNzAgIlNvQ2FsY1BhcnNlLnkiCnsgU29DYWxjX3l5dmFsLmV4cHIgPSBuZXcgU29D
YWxjTW9kKFNvQ2FsY195eXZzcFstMl0uZXhwciwgU29DYWxjX3l5dnNwWzBdLmV4cHIpOyB9CmJy
ZWFrOwpjYXNlIDI2OgojIDE3NiAiU29DYWxjUGFyc2UueSIKeyBTb0NhbGNfeXl2YWwuZXhwciA9
IG5ldyBTb0NhbGNQbHVzKFNvQ2FsY195eXZzcFstMl0uZXhwciwgU29DYWxjX3l5dnNwWzBdLmV4
cHIpOyB9CmJyZWFrOwpjYXNlIDI3OgojIDE3OCAiU29DYWxjUGFyc2UueSIKeyBTb0NhbGNfeXl2
YWwuZXhwciA9IG5ldyBTb0NhbGNNaW51cyhTb0NhbGNfeXl2c3BbLTJdLmV4cHIsIFNvQ2FsY195
eXZzcFswXS5leHByKTsgfQpicmVhazsKY2FzZSAyOToKIyAxODQgIlNvQ2FsY1BhcnNlLnkiCnsg
U29DYWxjX3l5dmFsLmV4cHIgPSBuZXcgU29DYWxjTGVzc1RoYW4oU29DYWxjX3l5dnNwWy0yXS5l
eHByLCBTb0NhbGNfeXl2c3BbMF0uZXhwcik7IH0KYnJlYWs7CmNhc2UgMzA6CiMgMTg2ICJTb0Nh
bGNQYXJzZS55Igp7IFNvQ2FsY195eXZhbC5leHByID0gbmV3IFNvQ2FsY0dyZWF0ZXJUaGFuKFNv
Q2FsY195eXZzcFstMl0uZXhwciwgU29DYWxjX3l5dnNwWzBdLmV4cHIpOyB9CmJyZWFrOwpjYXNl
IDMxOgojIDE4OCAiU29DYWxjUGFyc2UueSIKeyBTb0NhbGNfeXl2YWwuZXhwciA9IG5ldyBTb0Nh
bGNMZXNzRVEoU29DYWxjX3l5dnNwWy0yXS5leHByLCBTb0NhbGNfeXl2c3BbMF0uZXhwcik7IH0K
YnJlYWs7CmNhc2UgMzI6CiMgMTkwICJTb0NhbGNQYXJzZS55Igp7IFNvQ2FsY195eXZhbC5leHBy
ID0gbmV3IFNvQ2FsY0dyZWF0ZXJFUShTb0NhbGNfeXl2c3BbLTJdLmV4cHIsIFNvQ2FsY195eXZz
cFswXS5leHByKTsgfQpicmVhazsKY2FzZSAzNDoKIyAxOTYgIlNvQ2FsY1BhcnNlLnkiCnsgU29D
YWxjX3l5dmFsLmV4cHIgPSBuZXcgU29DYWxjRXF1YWxzKFNvQ2FsY195eXZzcFstMl0uZXhwciwg
U29DYWxjX3l5dnNwWzBdLmV4cHIpOyB9CmJyZWFrOwpjYXNlIDM1OgojIDE5OCAiU29DYWxjUGFy
c2UueSIKeyBTb0NhbGNfeXl2YWwuZXhwciA9IG5ldyBTb0NhbGNOb3RFcXVhbHMoU29DYWxjX3l5
dnNwWy0yXS5leHByLCBTb0NhbGNfeXl2c3BbMF0uZXhwcik7IH0KYnJlYWs7CmNhc2UgMzc6CiMg
MjA0ICJTb0NhbGNQYXJzZS55Igp7IFNvQ2FsY195eXZhbC5leHByID0gbmV3IFNvQ2FsY0FuZChT
b0NhbGNfeXl2c3BbLTJdLmV4cHIsIFNvQ2FsY195eXZzcFswXS5leHByKTsgfQpicmVhazsKY2Fz
ZSAzOToKIyAyMTAgIlNvQ2FsY1BhcnNlLnkiCnsgU29DYWxjX3l5dmFsLmV4cHIgPSBuZXcgU29D
YWxjT3IoU29DYWxjX3l5dnNwWy0yXS5leHByLCBTb0NhbGNfeXl2c3BbMF0uZXhwcik7IH0KYnJl
YWs7CmNhc2UgNDE6CiMgMjE3ICJTb0NhbGNQYXJzZS55Igp7IFNvQ2FsY195eXZhbC5leHByID0g
bmV3IFNvQ2FsY1Rlcm5hcnkoU29DYWxjX3l5dnNwWy00XS5leHByLCBTb0NhbGNfeXl2c3BbLTJd
LmV4cHIsIFNvQ2FsY195eXZzcFswXS5leHByKTsgfQpicmVhazsKIyA5NDcgInkudGFiLmMiCiAg
ICB9CiAgICBTb0NhbGNfeXlzc3AgLT0gU29DYWxjX3l5bTsKICAgIFNvQ2FsY195eXN0YXRlID0g
KlNvQ2FsY195eXNzcDsKICAgIFNvQ2FsY195eXZzcCAtPSBTb0NhbGNfeXltOwogICAgU29DYWxj
X3l5bSA9IFNvQ2FsY195eWxoc1tTb0NhbGNfeXluXTsKICAgIGlmIChTb0NhbGNfeXlzdGF0ZSA9
PSAwICYmIFNvQ2FsY195eW0gPT0gMCkKICAgIHsKCgoKCgogICAgICAgIFNvQ2FsY195eXN0YXRl
ID0gMzsKICAgICAgICAqKytTb0NhbGNfeXlzc3AgPSAzOwogICAgICAgICorK1NvQ2FsY195eXZz
cCA9IFNvQ2FsY195eXZhbDsKICAgICAgICBpZiAoU29DYWxjX3l5Y2hhciA8IDApCiAgICAgICAg
ewogICAgICAgICAgICBpZiAoKFNvQ2FsY195eWNoYXIgPSBTb0NhbGNfeXlsZXgoKSkgPCAwKSBT
b0NhbGNfeXljaGFyID0gMDsKIyA5NzUgInkudGFiLmMiCiAgICAgICAgfQogICAgICAgIGlmIChT
b0NhbGNfeXljaGFyID09IDApIGdvdG8gU29DYWxjX3l5YWNjZXB0OwogICAgICAgIGdvdG8gU29D
YWxjX3l5bG9vcDsKICAgIH0KICAgIGlmICgoU29DYWxjX3l5biA9IFNvQ2FsY195eWdpbmRleFtT
b0NhbGNfeXltXSkgJiYgKFNvQ2FsY195eW4gKz0gU29DYWxjX3l5c3RhdGUpID49IDAgJiYKICAg
ICAgICAgICAgU29DYWxjX3l5biA8PSA2NDMgJiYgU29DYWxjX3l5Y2hlY2tbU29DYWxjX3l5bl0g
PT0gU29DYWxjX3l5c3RhdGUpCiAgICAgICAgU29DYWxjX3l5c3RhdGUgPSBTb0NhbGNfeXl0YWJs
ZVtTb0NhbGNfeXluXTsKICAgIGVsc2UKICAgICAgICBTb0NhbGNfeXlzdGF0ZSA9IFNvQ2FsY195
eWRnb3RvW1NvQ2FsY195eW1dOwoKCgoKCiAgICBpZiAoU29DYWxjX3l5c3NwID49IFNvQ2FsY195
eXNzbGltICYmIFNvQ2FsY195eWdyb3dzdGFjaygpKQogICAgewogICAgICAgIGdvdG8gU29DYWxj
X3l5b3ZlcmZsb3c7CiAgICB9CiAgICAqKytTb0NhbGNfeXlzc3AgPSBTb0NhbGNfeXlzdGF0ZTsK
ICAgICorK1NvQ2FsY195eXZzcCA9IFNvQ2FsY195eXZhbDsKICAgIGdvdG8gU29DYWxjX3l5bG9v
cDsKU29DYWxjX3l5b3ZlcmZsb3c6CiAgICBTb0NhbGNfeXllcnJvcigieWFjYyBzdGFjayBvdmVy
ZmxvdyIpOwpTb0NhbGNfeXlhYm9ydDoKICAgIHJldHVybiAoMSk7ClNvQ2FsY195eWFjY2VwdDoK
ICAgIHJldHVybiAoMCk7Cn0KIyA0NCAiU29FbmdpbmVzLmMrKyIgMgojIDEgIlNvQ2FsY3VsYXRv
ci5jKysiIDEKIyA1OCAiU29DYWxjdWxhdG9yLmMrKyIKIyAxICIvdXNyL2luY2x1ZGUvYXNzZXJ0
LmgiIDEgMwojIDU5ICJTb0NhbGN1bGF0b3IuYysrIiAyCiMgMSAiLi4vLi4vLi4vLi4vLi4vbGli
L2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZW5naW5lcy9Tb0NhbGN1bGF0b3IuaCIgMQojIDYz
ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9lbmdpbmVzL1Nv
Q2FsY3VsYXRvci5oIgojIDEgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0lu
dmVudG9yL2ZpZWxkcy9Tb01GRmxvYXQuaCIgMQojIDY4ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0
YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9maWVsZHMvU29NRkZsb2F0LmgiCmNsYXNzIFNvTUZGbG9h
dCA6IHB1YmxpYyBTb01GaWVsZCB7CgoKICAgIHB1YmxpYzogdmlydHVhbCBTb1R5cGUgZ2V0VHlw
ZUlkKCkgY29uc3Q7IHN0YXRpYyBTb1R5cGUgZ2V0Q2xhc3NUeXBlSWQoKSB7IHJldHVybiBjbGFz
c1R5cGVJZDsgfSBjb25zdCBTb01GRmxvYXQgJiBvcGVyYXRvciA9KGNvbnN0IFNvTUZGbG9hdCAm
Zik7IHB1YmxpYzogdmlydHVhbCB2b2lkIGNvcHlGcm9tKGNvbnN0IFNvRmllbGQgJmYpOyBzdGF0
aWMgdm9pZCAqIGNyZWF0ZUluc3RhbmNlKCk7IHZpcnR1YWwgU2JCb29sIGlzU2FtZShjb25zdCBT
b0ZpZWxkICZmKSBjb25zdDsgcHJpdmF0ZTogc3RhdGljIFNvVHlwZSBjbGFzc1R5cGVJZDsgcHVi
bGljOiBTb01GRmxvYXQoKTsgdmlydHVhbCB+U29NRkZsb2F0KCk7IHByaXZhdGU6IHZpcnR1YWwg
U2JCb29sIHJlYWQxVmFsdWUoU29JbnB1dCAqaW4sIGludCBpbmRleCk7IHZpcnR1YWwgdm9pZCB3
cml0ZTFWYWx1ZShTb091dHB1dCAqb3V0LCBpbnQgaW5kZXgpIGNvbnN0OyBwdWJsaWM6IGZsb2F0
IG9wZXJhdG9yIFtdKGludCBpKSBjb25zdCB7IGV2YWx1YXRlKCk7IHJldHVybiB2YWx1ZXNbaV07
IH0gY29uc3QgZmxvYXQgKiBnZXRWYWx1ZXMoaW50IHN0YXJ0KSBjb25zdCB7IGV2YWx1YXRlKCk7
IHJldHVybiAoY29uc3QgZmxvYXQgKikodmFsdWVzICsgc3RhcnQpOyB9IGludCBmaW5kKGZsb2F0
IHRhcmdldFZhbHVlLCBTYkJvb2wgYWRkSWZOb3RGb3VuZCA9IDApOyB2b2lkIHNldFZhbHVlcyhp
bnQgc3RhcnQsIGludCBudW0sIGNvbnN0IGZsb2F0ICpuZXdWYWx1ZXMpOyB2b2lkIHNldDFWYWx1
ZShpbnQgaW5kZXgsIGZsb2F0IG5ld1ZhbHVlKTsgdm9pZCBzZXRWYWx1ZShmbG9hdCBuZXdWYWx1
ZSk7IGZsb2F0IG9wZXJhdG9yID0oZmxvYXQgbmV3VmFsdWUpIHsgc2V0VmFsdWUobmV3VmFsdWUp
OyByZXR1cm4gbmV3VmFsdWU7IH0gaW50IG9wZXJhdG9yID09KGNvbnN0IFNvTUZGbG9hdCAmZikg
Y29uc3Q7IGludCBvcGVyYXRvciAhPShjb25zdCBTb01GRmxvYXQgJmYpIGNvbnN0IHsgcmV0dXJu
ICEgKCgqdGhpcykgPT0gZik7IH0gZmxvYXQgKiBzdGFydEVkaXRpbmcoKSB7IGV2YWx1YXRlKCk7
IHJldHVybiB2YWx1ZXM7IH0gdm9pZCBmaW5pc2hFZGl0aW5nKCkgeyB2YWx1ZUNoYW5nZWQoKTsg
fSBwcm90ZWN0ZWQ6IHZpcnR1YWwgdm9pZCBhbGxvY1ZhbHVlcyhpbnQgbmV3TnVtKTsgdmlydHVh
bCB2b2lkIGRlbGV0ZUFsbFZhbHVlcygpOyB2aXJ0dWFsIHZvaWQgY29weVZhbHVlKGludCB0bywg
aW50IGZyb20pOyBmbG9hdCAqdmFsdWVzOwoKICBwdWJsaWM6CiAgICBzdGF0aWMgdm9pZCBpbml0
Q2xhc3MoKTsKCiAgcHJpdmF0ZToKCiAgICB2aXJ0dWFsIGludCBnZXROdW1WYWx1ZXNQZXJMaW5l
KCkgY29uc3Q7CgoKICAgIHZpcnR1YWwgdm9pZCB3cml0ZUJpbmFyeVZhbHVlcyhTb091dHB1dCAq
b3V0KSBjb25zdDsKICAgIHZpcnR1YWwgU2JCb29sIHJlYWRCaW5hcnlWYWx1ZXMoU29JbnB1dCAq
aW4sIGludCBudW1Ub1JlYWQpOwp9OwojIDY0ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2Uv
aW5jbHVkZS9JbnZlbnRvci9lbmdpbmVzL1NvQ2FsY3VsYXRvci5oIiAyCiMgMSAiLi4vLi4vLi4v
Li4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZmllbGRzL1NvTUZTdHJpbmcuaCIg
MQojIDY4ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9maWVs
ZHMvU29NRlN0cmluZy5oIgpjbGFzcyBTb01GU3RyaW5nIDogcHVibGljIFNvTUZpZWxkIHsKCiAg
ICBwdWJsaWM6IHZpcnR1YWwgU29UeXBlIGdldFR5cGVJZCgpIGNvbnN0OyBzdGF0aWMgU29UeXBl
IGdldENsYXNzVHlwZUlkKCkgeyByZXR1cm4gY2xhc3NUeXBlSWQ7IH0gY29uc3QgU29NRlN0cmlu
ZyAmIG9wZXJhdG9yID0oY29uc3QgU29NRlN0cmluZyAmZik7IHB1YmxpYzogdmlydHVhbCB2b2lk
IGNvcHlGcm9tKGNvbnN0IFNvRmllbGQgJmYpOyBzdGF0aWMgdm9pZCAqIGNyZWF0ZUluc3RhbmNl
KCk7IHZpcnR1YWwgU2JCb29sIGlzU2FtZShjb25zdCBTb0ZpZWxkICZmKSBjb25zdDsgcHJpdmF0
ZTogc3RhdGljIFNvVHlwZSBjbGFzc1R5cGVJZDsgcHVibGljOiBTb01GU3RyaW5nKCk7IHZpcnR1
YWwgflNvTUZTdHJpbmcoKTsgcHJpdmF0ZTogdmlydHVhbCBTYkJvb2wgcmVhZDFWYWx1ZShTb0lu
cHV0ICppbiwgaW50IGluZGV4KTsgdmlydHVhbCB2b2lkIHdyaXRlMVZhbHVlKFNvT3V0cHV0ICpv
dXQsIGludCBpbmRleCkgY29uc3Q7IHB1YmxpYzogY29uc3QgU2JTdHJpbmcgJiBvcGVyYXRvciBb
XShpbnQgaSkgY29uc3QgeyBldmFsdWF0ZSgpOyByZXR1cm4gdmFsdWVzW2ldOyB9IGNvbnN0IFNi
U3RyaW5nICogZ2V0VmFsdWVzKGludCBzdGFydCkgY29uc3QgeyBldmFsdWF0ZSgpOyByZXR1cm4g
KGNvbnN0IFNiU3RyaW5nICopKHZhbHVlcyArIHN0YXJ0KTsgfSBpbnQgZmluZChjb25zdCBTYlN0
cmluZyAmIHRhcmdldFZhbHVlLCBTYkJvb2wgYWRkSWZOb3RGb3VuZCA9IDApOyB2b2lkIHNldFZh
bHVlcyhpbnQgc3RhcnQsIGludCBudW0sIGNvbnN0IFNiU3RyaW5nICpuZXdWYWx1ZXMpOyB2b2lk
IHNldDFWYWx1ZShpbnQgaW5kZXgsIGNvbnN0IFNiU3RyaW5nICYgbmV3VmFsdWUpOyB2b2lkIHNl
dFZhbHVlKGNvbnN0IFNiU3RyaW5nICYgbmV3VmFsdWUpOyBjb25zdCBTYlN0cmluZyAmIG9wZXJh
dG9yID0oY29uc3QgU2JTdHJpbmcgJiBuZXdWYWx1ZSkgeyBzZXRWYWx1ZShuZXdWYWx1ZSk7IHJl
dHVybiBuZXdWYWx1ZTsgfSBpbnQgb3BlcmF0b3IgPT0oY29uc3QgU29NRlN0cmluZyAmZikgY29u
c3Q7IGludCBvcGVyYXRvciAhPShjb25zdCBTb01GU3RyaW5nICZmKSBjb25zdCB7IHJldHVybiAh
ICgoKnRoaXMpID09IGYpOyB9IFNiU3RyaW5nICogc3RhcnRFZGl0aW5nKCkgeyBldmFsdWF0ZSgp
OyByZXR1cm4gdmFsdWVzOyB9IHZvaWQgZmluaXNoRWRpdGluZygpIHsgdmFsdWVDaGFuZ2VkKCk7
IH0gcHJvdGVjdGVkOiB2aXJ0dWFsIHZvaWQgYWxsb2NWYWx1ZXMoaW50IG5ld051bSk7IHZpcnR1
YWwgdm9pZCBkZWxldGVBbGxWYWx1ZXMoKTsgdmlydHVhbCB2b2lkIGNvcHlWYWx1ZShpbnQgdG8s
IGludCBmcm9tKTsgU2JTdHJpbmcgKnZhbHVlczsKCiAgcHVibGljOgoKCgoKCgogICAgdm9pZCBz
ZXRWYWx1ZXMoaW50IHN0YXJ0LCBpbnQgbnVtLCBjb25zdCBjaGFyICpzdHJpbmdzW10pOwoKCgog
ICAgdm9pZCBzZXRWYWx1ZShjb25zdCBjaGFyICpzdHJpbmcpOwoKCgoKCgogICAgdm9pZCBkZWxl
dGVUZXh0KGludCBmcm9tTGluZSwgaW50IGZyb21DaGFyLCBpbnQgdG9MaW5lLCBpbnQgdG9DaGFy
KTsKCgogIHB1YmxpYzoKICAgIHN0YXRpYyB2b2lkIGluaXRDbGFzcygpOwp9OwojIDY1ICIuLi8u
Li8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9lbmdpbmVzL1NvQ2FsY3Vs
YXRvci5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50
b3IvZmllbGRzL1NvTUZWZWMzZi5oIiAxCiMgNjkgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFz
ZS9pbmNsdWRlL0ludmVudG9yL2ZpZWxkcy9Tb01GVmVjM2YuaCIKY2xhc3MgU29NRlZlYzNmIDog
cHVibGljIFNvTUZpZWxkIHsKCiAgICBwdWJsaWM6IHZpcnR1YWwgU29UeXBlIGdldFR5cGVJZCgp
IGNvbnN0OyBzdGF0aWMgU29UeXBlIGdldENsYXNzVHlwZUlkKCkgeyByZXR1cm4gY2xhc3NUeXBl
SWQ7IH0gY29uc3QgU29NRlZlYzNmICYgb3BlcmF0b3IgPShjb25zdCBTb01GVmVjM2YgJmYpOyBw
dWJsaWM6IHZpcnR1YWwgdm9pZCBjb3B5RnJvbShjb25zdCBTb0ZpZWxkICZmKTsgc3RhdGljIHZv
aWQgKiBjcmVhdGVJbnN0YW5jZSgpOyB2aXJ0dWFsIFNiQm9vbCBpc1NhbWUoY29uc3QgU29GaWVs
ZCAmZikgY29uc3Q7IHByaXZhdGU6IHN0YXRpYyBTb1R5cGUgY2xhc3NUeXBlSWQ7IHB1YmxpYzog
U29NRlZlYzNmKCk7IHZpcnR1YWwgflNvTUZWZWMzZigpOyBwcml2YXRlOiB2aXJ0dWFsIFNiQm9v
bCByZWFkMVZhbHVlKFNvSW5wdXQgKmluLCBpbnQgaW5kZXgpOyB2aXJ0dWFsIHZvaWQgd3JpdGUx
VmFsdWUoU29PdXRwdXQgKm91dCwgaW50IGluZGV4KSBjb25zdDsgcHVibGljOiBjb25zdCBTYlZl
YzNmICYgb3BlcmF0b3IgW10oaW50IGkpIGNvbnN0IHsgZXZhbHVhdGUoKTsgcmV0dXJuIHZhbHVl
c1tpXTsgfSBjb25zdCBTYlZlYzNmICogZ2V0VmFsdWVzKGludCBzdGFydCkgY29uc3QgeyBldmFs
dWF0ZSgpOyByZXR1cm4gKGNvbnN0IFNiVmVjM2YgKikodmFsdWVzICsgc3RhcnQpOyB9IGludCBm
aW5kKGNvbnN0IFNiVmVjM2YgJiB0YXJnZXRWYWx1ZSwgU2JCb29sIGFkZElmTm90Rm91bmQgPSAw
KTsgdm9pZCBzZXRWYWx1ZXMoaW50IHN0YXJ0LCBpbnQgbnVtLCBjb25zdCBTYlZlYzNmICpuZXdW
YWx1ZXMpOyB2b2lkIHNldDFWYWx1ZShpbnQgaW5kZXgsIGNvbnN0IFNiVmVjM2YgJiBuZXdWYWx1
ZSk7IHZvaWQgc2V0VmFsdWUoY29uc3QgU2JWZWMzZiAmIG5ld1ZhbHVlKTsgY29uc3QgU2JWZWMz
ZiAmIG9wZXJhdG9yID0oY29uc3QgU2JWZWMzZiAmIG5ld1ZhbHVlKSB7IHNldFZhbHVlKG5ld1Zh
bHVlKTsgcmV0dXJuIG5ld1ZhbHVlOyB9IGludCBvcGVyYXRvciA9PShjb25zdCBTb01GVmVjM2Yg
JmYpIGNvbnN0OyBpbnQgb3BlcmF0b3IgIT0oY29uc3QgU29NRlZlYzNmICZmKSBjb25zdCB7IHJl
dHVybiAhICgoKnRoaXMpID09IGYpOyB9IFNiVmVjM2YgKiBzdGFydEVkaXRpbmcoKSB7IGV2YWx1
YXRlKCk7IHJldHVybiB2YWx1ZXM7IH0gdm9pZCBmaW5pc2hFZGl0aW5nKCkgeyB2YWx1ZUNoYW5n
ZWQoKTsgfSBwcm90ZWN0ZWQ6IHZpcnR1YWwgdm9pZCBhbGxvY1ZhbHVlcyhpbnQgbmV3TnVtKTsg
dmlydHVhbCB2b2lkIGRlbGV0ZUFsbFZhbHVlcygpOyB2aXJ0dWFsIHZvaWQgY29weVZhbHVlKGlu
dCB0bywgaW50IGZyb20pOyBTYlZlYzNmICp2YWx1ZXM7CgogIHB1YmxpYzoKCgoKCgoKCiAgICB2
b2lkIHNldFZhbHVlcyhpbnQgc3RhcnQsIGludCBudW0sIGNvbnN0IGZsb2F0IHh5eltdWzNdKTsK
CgoKICAgIHZvaWQgc2V0MVZhbHVlKGludCBpbmRleCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQg
eik7CgoKCiAgICB2b2lkIHNldDFWYWx1ZShpbnQgaW5kZXgsIGNvbnN0IGZsb2F0IHh5elszXSk7
CgoKCiAgICB2b2lkIHNldFZhbHVlKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopOwoKCgogICAg
dm9pZCBzZXRWYWx1ZShjb25zdCBmbG9hdCB4eXpbM10pOwoKICBwdWJsaWM6CiAgICBzdGF0aWMg
dm9pZCBpbml0Q2xhc3MoKTsKCiAgcHJpdmF0ZToKCgogICAgdmlydHVhbCB2b2lkIHdyaXRlQmlu
YXJ5VmFsdWVzKFNvT3V0cHV0ICpvdXQpIGNvbnN0OwogICAgdmlydHVhbCBTYkJvb2wgcmVhZEJp
bmFyeVZhbHVlcyhTb0lucHV0ICppbiwgaW50IG51bVRvUmVhZCk7Cn07CiMgNjYgIi4uLy4uLy4u
Ly4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2VuZ2luZXMvU29DYWxjdWxhdG9y
LmgiIDIKCmNsYXNzIFNvQ2FsY1BhcnNlcjsKCgoKCmNsYXNzIFNvQ2FsY3VsYXRvciA6IHB1Ymxp
YyBTb0VuZ2luZSB7CgogICAgcHVibGljOiBzdGF0aWMgU29UeXBlIGdldENsYXNzVHlwZUlkKCkg
eyByZXR1cm4gY2xhc3NUeXBlSWQ7IH0gdmlydHVhbCBTb1R5cGUgZ2V0VHlwZUlkKCkgY29uc3Q7
IHB1YmxpYzogdmlydHVhbCBjb25zdCBTb0ZpZWxkRGF0YSAqIGdldEZpZWxkRGF0YSgpIGNvbnN0
OyB2aXJ0dWFsIGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqIGdldE91dHB1dERhdGEoKSBjb25z
dDsgcHJvdGVjdGVkOiBzdGF0aWMgY29uc3QgU29GaWVsZERhdGEgKiogZ2V0SW5wdXREYXRhUHRy
KCkgeyByZXR1cm4gKGNvbnN0IFNvRmllbGREYXRhICoqKSZpbnB1dERhdGE7IH0gc3RhdGljIGNv
bnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqKiBnZXRPdXRwdXREYXRhUHRyKCkgeyByZXR1cm4gKGNv
bnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqKikmb3V0cHV0RGF0YTsgfSBwcml2YXRlOiBzdGF0aWMg
U29UeXBlIGNsYXNzVHlwZUlkOyBzdGF0aWMgU2JCb29sIGZpcnN0SW5zdGFuY2U7IHN0YXRpYyBT
b0ZpZWxkRGF0YSAqaW5wdXREYXRhOyBzdGF0aWMgU29FbmdpbmVPdXRwdXREYXRhICpvdXRwdXRE
YXRhOyBzdGF0aWMgY29uc3QgU29GaWVsZERhdGEgKipwYXJlbnRJbnB1dERhdGE7IHN0YXRpYyBj
b25zdCBTb0VuZ2luZU91dHB1dERhdGEgKipwYXJlbnRPdXRwdXREYXRhOyBwcml2YXRlOiBzdGF0
aWMgdm9pZCAqY3JlYXRlSW5zdGFuY2UoKTsKCiAgcHVibGljOgoKCiAgICBTb01GRmxvYXQgYSxi
LGMsZCxlLGYsZyxoOwogICAgU29NRlZlYzNmIEEsQixDLEQsRSxGLEcsSDsKICAgIFNvTUZTdHJp
bmcgZXhwcmVzc2lvbjsKCgogICAgU29FbmdpbmVPdXRwdXQgb2Esb2Isb2Msb2Q7CiAgICBTb0Vu
Z2luZU91dHB1dCBvQSxvQixvQyxvRDsKCgogICAgU29DYWxjdWxhdG9yKCk7CgogIHB1YmxpYzoK
CiAgICBzdGF0aWMgdm9pZCBpbml0Q2xhc3MoKTsKCiAgcHJvdGVjdGVkOgogICAgdmlydHVhbCB2
b2lkIGlucHV0Q2hhbmdlZChTb0ZpZWxkICp3aGljaElucHV0KTsKCiAgcHJpdmF0ZToKCiAgICB+
U29DYWxjdWxhdG9yKCk7CgoKICAgIHZpcnR1YWwgdm9pZCBldmFsdWF0ZSgpOwoKICAgIFNvQ2Fs
Y1BhcnNlciAqcGFyc2VyOwogICAgU2JCb29sIHJlcGFyc2U7CgoKICAgIGZsb2F0IHZhLCB2Yiwg
dmMsIHZkLCB2ZSwgdmYsIHZnLCB2aCwgb3ZhLCBvdmIsIG92Yywgb3ZkOwogICAgZmxvYXQgdGEs
IHRiLCB0YywgdGQsIHRlLCB0ZiwgdGcsIHRoOwogICAgU2JWZWMzZiB2QSwgdkIsIHZDLCB2RCwg
dkUsIHZGLCB2RywgdkgsIG92QSwgb3ZCLCBvdkMsIG92RDsKICAgIFNiVmVjM2YgdEEsIHRCLCB0
QywgdEQsIHRFLCB0RiwgdEcsIHRIOwogICAgc3RhdGljIGZsb2F0ICpsb29rdXBGbG9hdCh2b2lk
ICosIGNvbnN0IGNoYXIgKik7CiAgICBzdGF0aWMgU2JWZWMzZiAqbG9va3VwVmVjM2Yodm9pZCAq
LCBjb25zdCBjaGFyICopOwp9OwojIDYwICJTb0NhbGN1bGF0b3IuYysrIiAyCgoKCgpTb1R5cGUg
U29DYWxjdWxhdG9yOjpjbGFzc1R5cGVJZDsgU2JCb29sIFNvQ2FsY3VsYXRvcjo6Zmlyc3RJbnN0
YW5jZT0xOyBTb0VuZ2luZU91dHB1dERhdGEgKlNvQ2FsY3VsYXRvcjo6b3V0cHV0RGF0YTsgU29G
aWVsZERhdGEgKiBTb0NhbGN1bGF0b3I6OmlucHV0RGF0YTsgY29uc3QgU29FbmdpbmVPdXRwdXRE
YXRhICoqU29DYWxjdWxhdG9yOjpwYXJlbnRPdXRwdXREYXRhOyBjb25zdCBTb0ZpZWxkRGF0YSAq
KiBTb0NhbGN1bGF0b3I6OnBhcmVudElucHV0RGF0YTsgU29UeXBlIFNvQ2FsY3VsYXRvcjo6Z2V0
VHlwZUlkKCkgY29uc3QgeyByZXR1cm4gY2xhc3NUeXBlSWQ7IH0gY29uc3QgU29GaWVsZERhdGEg
KiBTb0NhbGN1bGF0b3I6OmdldEZpZWxkRGF0YSgpIGNvbnN0IHsgcmV0dXJuIGlucHV0RGF0YTsg
fSBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKiBTb0NhbGN1bGF0b3I6OmdldE91dHB1dERhdGEo
KSBjb25zdCB7IHJldHVybiBvdXRwdXREYXRhOyB9IHZvaWQgKiBTb0NhbGN1bGF0b3I6OmNyZWF0
ZUluc3RhbmNlKCkgeyByZXR1cm4gKHZvaWQgKikobmV3IFNvQ2FsY3VsYXRvcik7IH07CiMgNzMg
IlNvQ2FsY3VsYXRvci5jKysiClNvQ2FsY3VsYXRvcjo6U29DYWxjdWxhdG9yKCkKCgp7CiAgICBk
byB7IHdoaWxlKDApOyBpZiAoaW5wdXREYXRhID09IF9fbnVsbCkgeyBpbnB1dERhdGEgPSBuZXcg
U29GaWVsZERhdGEocGFyZW50SW5wdXREYXRhID8gKnBhcmVudElucHV0RGF0YSA6IF9fbnVsbCk7
IG91dHB1dERhdGEgPSBuZXcgU29FbmdpbmVPdXRwdXREYXRhKHBhcmVudE91dHB1dERhdGEgPyAq
cGFyZW50T3V0cHV0RGF0YSA6IF9fbnVsbCk7IH0gZWxzZSBmaXJzdEluc3RhbmNlID0gMDsgaXNC
dWlsdEluID0gMDsgfSB3aGlsZSgwKTsKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3Rh
bmNlKSBpbnB1dERhdGEtPmFkZEZpZWxkKHRoaXMsICJhIiwgJnRoaXMtPmEpOyB0aGlzLT5hLnNl
dFZhbHVlICgwKTsgdGhpcy0+YS5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBk
byB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgaW5wdXREYXRhLT5hZGRGaWVsZCh0aGlz
LCAiYiIsICZ0aGlzLT5iKTsgdGhpcy0+Yi5zZXRWYWx1ZSAoMCk7IHRoaXMtPmIuc2V0Q29udGFp
bmVyKHRoaXMpOyB9IHdoaWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYgKGZpcnN0SW5zdGFu
Y2UpIGlucHV0RGF0YS0+YWRkRmllbGQodGhpcywgImMiLCAmdGhpcy0+Yyk7IHRoaXMtPmMuc2V0
VmFsdWUgKDApOyB0aGlzLT5jLnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsKICAgIGRv
IHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFkZEZpZWxkKHRoaXMs
ICJkIiwgJnRoaXMtPmQpOyB0aGlzLT5kLnNldFZhbHVlICgwKTsgdGhpcy0+ZC5zZXRDb250YWlu
ZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5j
ZSkgaW5wdXREYXRhLT5hZGRGaWVsZCh0aGlzLCAiZSIsICZ0aGlzLT5lKTsgdGhpcy0+ZS5zZXRW
YWx1ZSAoMCk7IHRoaXMtPmUuc2V0Q29udGFpbmVyKHRoaXMpOyB9IHdoaWxlKDApOwogICAgZG8g
eyB3aGlsZSgwKTsgaWYgKGZpcnN0SW5zdGFuY2UpIGlucHV0RGF0YS0+YWRkRmllbGQodGhpcywg
ImYiLCAmdGhpcy0+Zik7IHRoaXMtPmYuc2V0VmFsdWUgKDApOyB0aGlzLT5mLnNldENvbnRhaW5l
cih0aGlzKTsgfSB3aGlsZSgwKTsKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNl
KSBpbnB1dERhdGEtPmFkZEZpZWxkKHRoaXMsICJnIiwgJnRoaXMtPmcpOyB0aGlzLT5nLnNldFZh
bHVlICgwKTsgdGhpcy0+Zy5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBkbyB7
IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgaW5wdXREYXRhLT5hZGRGaWVsZCh0aGlzLCAi
aCIsICZ0aGlzLT5oKTsgdGhpcy0+aC5zZXRWYWx1ZSAoMCk7IHRoaXMtPmguc2V0Q29udGFpbmVy
KHRoaXMpOyB9IHdoaWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYgKGZpcnN0SW5zdGFuY2Up
IGlucHV0RGF0YS0+YWRkRmllbGQodGhpcywgIkEiLCAmdGhpcy0+QSk7IHRoaXMtPkEuc2V0VmFs
dWUgKFNiVmVjM2YoMCwwLDApKTsgdGhpcy0+QS5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUo
MCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgaW5wdXREYXRhLT5hZGRG
aWVsZCh0aGlzLCAiQiIsICZ0aGlzLT5CKTsgdGhpcy0+Qi5zZXRWYWx1ZSAoU2JWZWMzZigwLDAs
MCkpOyB0aGlzLT5CLnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsKICAgIGRvIHsgd2hp
bGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFkZEZpZWxkKHRoaXMsICJDIiwg
JnRoaXMtPkMpOyB0aGlzLT5DLnNldFZhbHVlIChTYlZlYzNmKDAsMCwwKSk7IHRoaXMtPkMuc2V0
Q29udGFpbmVyKHRoaXMpOyB9IHdoaWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYgKGZpcnN0
SW5zdGFuY2UpIGlucHV0RGF0YS0+YWRkRmllbGQodGhpcywgIkQiLCAmdGhpcy0+RCk7IHRoaXMt
PkQuc2V0VmFsdWUgKFNiVmVjM2YoMCwwLDApKTsgdGhpcy0+RC5zZXRDb250YWluZXIodGhpcyk7
IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgaW5wdXRE
YXRhLT5hZGRGaWVsZCh0aGlzLCAiRSIsICZ0aGlzLT5FKTsgdGhpcy0+RS5zZXRWYWx1ZSAoU2JW
ZWMzZigwLDAsMCkpOyB0aGlzLT5FLnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsKICAg
IGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFkZEZpZWxkKHRo
aXMsICJGIiwgJnRoaXMtPkYpOyB0aGlzLT5GLnNldFZhbHVlIChTYlZlYzNmKDAsMCwwKSk7IHRo
aXMtPkYuc2V0Q29udGFpbmVyKHRoaXMpOyB9IHdoaWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsg
aWYgKGZpcnN0SW5zdGFuY2UpIGlucHV0RGF0YS0+YWRkRmllbGQodGhpcywgIkciLCAmdGhpcy0+
Ryk7IHRoaXMtPkcuc2V0VmFsdWUgKFNiVmVjM2YoMCwwLDApKTsgdGhpcy0+Ry5zZXRDb250YWlu
ZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5j
ZSkgaW5wdXREYXRhLT5hZGRGaWVsZCh0aGlzLCAiSCIsICZ0aGlzLT5IKTsgdGhpcy0+SC5zZXRW
YWx1ZSAoU2JWZWMzZigwLDAsMCkpOyB0aGlzLT5ILnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGls
ZSgwKTsKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFk
ZEZpZWxkKHRoaXMsICJleHByZXNzaW9uIiwgJnRoaXMtPmV4cHJlc3Npb24pOyB0aGlzLT5leHBy
ZXNzaW9uLnNldFZhbHVlICgiIik7IHRoaXMtPmV4cHJlc3Npb24uc2V0Q29udGFpbmVyKHRoaXMp
OyB9IHdoaWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYgKGZpcnN0SW5zdGFuY2UpIG91dHB1
dERhdGEtPmFkZE91dHB1dCh0aGlzLCAib2EiLCAmdGhpcy0+b2EsIFNvTUZGbG9hdDo6Z2V0Q2xh
c3NUeXBlSWQoKSk7IHRoaXMtPm9hLnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsKICAg
IGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBvdXRwdXREYXRhLT5hZGRPdXRwdXQo
dGhpcywgIm9iIiwgJnRoaXMtPm9iLCBTb01GRmxvYXQ6OmdldENsYXNzVHlwZUlkKCkpOyB0aGlz
LT5vYi5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBp
ZiAoZmlyc3RJbnN0YW5jZSkgb3V0cHV0RGF0YS0+YWRkT3V0cHV0KHRoaXMsICJvYyIsICZ0aGlz
LT5vYywgU29NRkZsb2F0OjpnZXRDbGFzc1R5cGVJZCgpKTsgdGhpcy0+b2Muc2V0Q29udGFpbmVy
KHRoaXMpOyB9IHdoaWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYgKGZpcnN0SW5zdGFuY2Up
IG91dHB1dERhdGEtPmFkZE91dHB1dCh0aGlzLCAib2QiLCAmdGhpcy0+b2QsIFNvTUZGbG9hdDo6
Z2V0Q2xhc3NUeXBlSWQoKSk7IHRoaXMtPm9kLnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgw
KTsKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBvdXRwdXREYXRhLT5hZGRP
dXRwdXQodGhpcywgIm9BIiwgJnRoaXMtPm9BLCBTb01GVmVjM2Y6OmdldENsYXNzVHlwZUlkKCkp
OyB0aGlzLT5vQS5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxl
KDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgb3V0cHV0RGF0YS0+YWRkT3V0cHV0KHRoaXMsICJvQiIs
ICZ0aGlzLT5vQiwgU29NRlZlYzNmOjpnZXRDbGFzc1R5cGVJZCgpKTsgdGhpcy0+b0Iuc2V0Q29u
dGFpbmVyKHRoaXMpOyB9IHdoaWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYgKGZpcnN0SW5z
dGFuY2UpIG91dHB1dERhdGEtPmFkZE91dHB1dCh0aGlzLCAib0MiLCAmdGhpcy0+b0MsIFNvTUZW
ZWMzZjo6Z2V0Q2xhc3NUeXBlSWQoKSk7IHRoaXMtPm9DLnNldENvbnRhaW5lcih0aGlzKTsgfSB3
aGlsZSgwKTsKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBvdXRwdXREYXRh
LT5hZGRPdXRwdXQodGhpcywgIm9EIiwgJnRoaXMtPm9ELCBTb01GVmVjM2Y6OmdldENsYXNzVHlw
ZUlkKCkpOyB0aGlzLT5vRC5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CgogICAgcGFy
c2VyID0gbmV3IFNvQ2FsY1BhcnNlcihsb29rdXBGbG9hdCwgbG9va3VwVmVjM2YsIHRoaXMpOwog
ICAgcmVwYXJzZSA9IDA7CiAgICBpc0J1aWx0SW4gPSAxOwp9CiMgMTE2ICJTb0NhbGN1bGF0b3Iu
YysrIgpTb0NhbGN1bGF0b3I6On5Tb0NhbGN1bGF0b3IoKQoKCnsKICAgIGRlbGV0ZSBwYXJzZXI7
Cn0KIyAxMzAgIlNvQ2FsY3VsYXRvci5jKysiCnZvaWQKU29DYWxjdWxhdG9yOjppbnB1dENoYW5n
ZWQoU29GaWVsZCAqd2hpY2gpCnsKICAgIGlmICh3aGljaCA9PSAmZXhwcmVzc2lvbikKICAgICAg
ICByZXBhcnNlID0gMTsKfQojIDE0NCAiU29DYWxjdWxhdG9yLmMrKyIKdm9pZApTb0NhbGN1bGF0
b3I6OmV2YWx1YXRlKCkKCgp7CiAgICBpZiAocmVwYXJzZSkgewogICAgICAgIHBhcnNlci0+Y2xl
YXIoKTsKICAgICAgICBTYkJvb2wgT0sgPSAxOwogICAgICAgIGludCBpOwogICAgICAgIGZvciAo
aT0wOyBpPGV4cHJlc3Npb24uZ2V0TnVtKCk7IGkrKykgewogICAgICAgICAgICBpZiAoIXBhcnNl
ci0+cGFyc2UoZXhwcmVzc2lvbltpXS5nZXRTdHJpbmcoKSkpIHsKICAgICAgICAgICAgICAgIE9L
ID0gMDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICAgIGlmICghIE9LKSB7CgoKCgoKCiAgICAgICAgICAgIGV4cHJlc3Npb24uc2V0VmFsdWUoIiIp
OwogICAgICAgICAgICBwYXJzZXItPmNsZWFyKCk7CiAgICAgICAgfQogICAgICAgIHJlcGFyc2Ug
PSAwOwogICAgfQoKICAgIGludCBtYXggPSAwOwogICAgaW50IG5hID0gYS5nZXROdW0oKTsgaWYg
KG5hID4gbWF4KSBtYXggPSBuYTsKICAgIGludCBuYiA9IGIuZ2V0TnVtKCk7IGlmIChuYiA+IG1h
eCkgbWF4ID0gbmI7CiAgICBpbnQgbmMgPSBjLmdldE51bSgpOyBpZiAobmMgPiBtYXgpIG1heCA9
IG5jOwogICAgaW50IG5kID0gZC5nZXROdW0oKTsgaWYgKG5kID4gbWF4KSBtYXggPSBuZDsKICAg
IGludCBuZSA9IGUuZ2V0TnVtKCk7IGlmIChuZSA+IG1heCkgbWF4ID0gbmU7CiAgICBpbnQgbmYg
PSBmLmdldE51bSgpOyBpZiAobmYgPiBtYXgpIG1heCA9IG5mOwogICAgaW50IG5nID0gZy5nZXRO
dW0oKTsgaWYgKG5nID4gbWF4KSBtYXggPSBuZzsKICAgIGludCBuaCA9IGguZ2V0TnVtKCk7IGlm
IChuaCA+IG1heCkgbWF4ID0gbmg7CgogICAgaW50IG5BID0gQS5nZXROdW0oKTsgaWYgKG5BID4g
bWF4KSBtYXggPSBuQTsKICAgIGludCBuQiA9IEIuZ2V0TnVtKCk7IGlmIChuQiA+IG1heCkgbWF4
ID0gbkI7CiAgICBpbnQgbkMgPSBDLmdldE51bSgpOyBpZiAobkMgPiBtYXgpIG1heCA9IG5DOwog
ICAgaW50IG5EID0gRC5nZXROdW0oKTsgaWYgKG5EID4gbWF4KSBtYXggPSBuRDsKICAgIGludCBu
RSA9IEUuZ2V0TnVtKCk7IGlmIChuRSA+IG1heCkgbWF4ID0gbkU7CiAgICBpbnQgbkYgPSBGLmdl
dE51bSgpOyBpZiAobkYgPiBtYXgpIG1heCA9IG5GOwogICAgaW50IG5HID0gRy5nZXROdW0oKTsg
aWYgKG5HID4gbWF4KSBtYXggPSBuRzsKICAgIGludCBuSCA9IEguZ2V0TnVtKCk7IGlmIChuRyA+
IG1heCkgbWF4ID0gbkg7CgogICAgaW50IG5vdXQgPSBtYXg7CiAgICBkbyB7IGlmIChvYS5pc0Vu
YWJsZWQoKSkgeyBmb3IgKGludCBfZW5nX291dF9pID0gMDsgX2VuZ19vdXRfaSA8IG9hLmdldE51
bUNvbm5lY3Rpb25zKCk7IF9lbmdfb3V0X2krKykgeyBTb01GRmxvYXQgKl9lbmdfb3V0X3RlbXAg
PSAoU29NRkZsb2F0ICopIG9hW19lbmdfb3V0X2ldOyBpZiAoIV9lbmdfb3V0X3RlbXAtPmlzUmVh
ZE9ubHkoKSkgeyBfZW5nX291dF90ZW1wLT5zZXROdW0obm91dCk7IH0gfSB9IH0gd2hpbGUoMCk7
CiAgICBkbyB7IGlmIChvYi5pc0VuYWJsZWQoKSkgeyBmb3IgKGludCBfZW5nX291dF9pID0gMDsg
X2VuZ19vdXRfaSA8IG9iLmdldE51bUNvbm5lY3Rpb25zKCk7IF9lbmdfb3V0X2krKykgeyBTb01G
RmxvYXQgKl9lbmdfb3V0X3RlbXAgPSAoU29NRkZsb2F0ICopIG9iW19lbmdfb3V0X2ldOyBpZiAo
IV9lbmdfb3V0X3RlbXAtPmlzUmVhZE9ubHkoKSkgeyBfZW5nX291dF90ZW1wLT5zZXROdW0obm91
dCk7IH0gfSB9IH0gd2hpbGUoMCk7CiAgICBkbyB7IGlmIChvYy5pc0VuYWJsZWQoKSkgeyBmb3Ig
KGludCBfZW5nX291dF9pID0gMDsgX2VuZ19vdXRfaSA8IG9jLmdldE51bUNvbm5lY3Rpb25zKCk7
IF9lbmdfb3V0X2krKykgeyBTb01GRmxvYXQgKl9lbmdfb3V0X3RlbXAgPSAoU29NRkZsb2F0ICop
IG9jW19lbmdfb3V0X2ldOyBpZiAoIV9lbmdfb3V0X3RlbXAtPmlzUmVhZE9ubHkoKSkgeyBfZW5n
X291dF90ZW1wLT5zZXROdW0obm91dCk7IH0gfSB9IH0gd2hpbGUoMCk7CiAgICBkbyB7IGlmIChv
ZC5pc0VuYWJsZWQoKSkgeyBmb3IgKGludCBfZW5nX291dF9pID0gMDsgX2VuZ19vdXRfaSA8IG9k
LmdldE51bUNvbm5lY3Rpb25zKCk7IF9lbmdfb3V0X2krKykgeyBTb01GRmxvYXQgKl9lbmdfb3V0
X3RlbXAgPSAoU29NRkZsb2F0ICopIG9kW19lbmdfb3V0X2ldOyBpZiAoIV9lbmdfb3V0X3RlbXAt
PmlzUmVhZE9ubHkoKSkgeyBfZW5nX291dF90ZW1wLT5zZXROdW0obm91dCk7IH0gfSB9IH0gd2hp
bGUoMCk7CiAgICBkbyB7IGlmIChvQS5pc0VuYWJsZWQoKSkgeyBmb3IgKGludCBfZW5nX291dF9p
ID0gMDsgX2VuZ19vdXRfaSA8IG9BLmdldE51bUNvbm5lY3Rpb25zKCk7IF9lbmdfb3V0X2krKykg
eyBTb01GRmxvYXQgKl9lbmdfb3V0X3RlbXAgPSAoU29NRkZsb2F0ICopIG9BW19lbmdfb3V0X2ld
OyBpZiAoIV9lbmdfb3V0X3RlbXAtPmlzUmVhZE9ubHkoKSkgeyBfZW5nX291dF90ZW1wLT5zZXRO
dW0obm91dCk7IH0gfSB9IH0gd2hpbGUoMCk7CiAgICBkbyB7IGlmIChvQi5pc0VuYWJsZWQoKSkg
eyBmb3IgKGludCBfZW5nX291dF9pID0gMDsgX2VuZ19vdXRfaSA8IG9CLmdldE51bUNvbm5lY3Rp
b25zKCk7IF9lbmdfb3V0X2krKykgeyBTb01GRmxvYXQgKl9lbmdfb3V0X3RlbXAgPSAoU29NRkZs
b2F0ICopIG9CW19lbmdfb3V0X2ldOyBpZiAoIV9lbmdfb3V0X3RlbXAtPmlzUmVhZE9ubHkoKSkg
eyBfZW5nX291dF90ZW1wLT5zZXROdW0obm91dCk7IH0gfSB9IH0gd2hpbGUoMCk7CiAgICBkbyB7
IGlmIChvQy5pc0VuYWJsZWQoKSkgeyBmb3IgKGludCBfZW5nX291dF9pID0gMDsgX2VuZ19vdXRf
aSA8IG9DLmdldE51bUNvbm5lY3Rpb25zKCk7IF9lbmdfb3V0X2krKykgeyBTb01GRmxvYXQgKl9l
bmdfb3V0X3RlbXAgPSAoU29NRkZsb2F0ICopIG9DW19lbmdfb3V0X2ldOyBpZiAoIV9lbmdfb3V0
X3RlbXAtPmlzUmVhZE9ubHkoKSkgeyBfZW5nX291dF90ZW1wLT5zZXROdW0obm91dCk7IH0gfSB9
IH0gd2hpbGUoMCk7CiAgICBkbyB7IGlmIChvRC5pc0VuYWJsZWQoKSkgeyBmb3IgKGludCBfZW5n
X291dF9pID0gMDsgX2VuZ19vdXRfaSA8IG9ELmdldE51bUNvbm5lY3Rpb25zKCk7IF9lbmdfb3V0
X2krKykgeyBTb01GRmxvYXQgKl9lbmdfb3V0X3RlbXAgPSAoU29NRkZsb2F0ICopIG9EW19lbmdf
b3V0X2ldOyBpZiAoIV9lbmdfb3V0X3RlbXAtPmlzUmVhZE9ubHkoKSkgeyBfZW5nX291dF90ZW1w
LT5zZXROdW0obm91dCk7IH0gfSB9IH0gd2hpbGUoMCk7CgogICAgZm9yIChpbnQgaT0wOyBpPG5v
dXQ7IGkrKykgewogICAgICAgIHZhID0gYVtjbGFtcChpLG5hKV07CiAgICAgICAgdmIgPSBiW2Ns
YW1wKGksbmIpXTsKICAgICAgICB2YyA9IGNbY2xhbXAoaSxuYyldOwogICAgICAgIHZkID0gZFtj
bGFtcChpLG5kKV07CiAgICAgICAgdmUgPSBlW2NsYW1wKGksbmUpXTsKICAgICAgICB2ZiA9IGZb
Y2xhbXAoaSxuZildOwogICAgICAgIHZnID0gZ1tjbGFtcChpLG5nKV07CiAgICAgICAgdmggPSBo
W2NsYW1wKGksbmgpXTsKICAgICAgICB2QSA9IEFbY2xhbXAoaSxuQSldOwogICAgICAgIHZCID0g
QltjbGFtcChpLG5CKV07CiAgICAgICAgdkMgPSBDW2NsYW1wKGksbkMpXTsKICAgICAgICB2RCA9
IERbY2xhbXAoaSxuRCldOwogICAgICAgIHZFID0gRVtjbGFtcChpLG5FKV07CiAgICAgICAgdkYg
PSBGW2NsYW1wKGksbkYpXTsKICAgICAgICB2RyA9IEdbY2xhbXAoaSxuRyldOwogICAgICAgIHZI
ID0gSFtjbGFtcChpLG5IKV07CiAgICAgICAgb3ZhID0gMDsKICAgICAgICBvdmIgPSAwOwogICAg
ICAgIG92YyA9IDA7CiAgICAgICAgb3ZkID0gMDsKICAgICAgICBvdkEgPSBTYlZlYzNmKDAsMCww
KTsKICAgICAgICBvdkIgPSBTYlZlYzNmKDAsMCwwKTsKICAgICAgICBvdkMgPSBTYlZlYzNmKDAs
MCwwKTsKICAgICAgICBvdkQgPSBTYlZlYzNmKDAsMCwwKTsKCiAgICAgICAgcGFyc2VyLT5ldmFs
KCk7CgogICAgICAgIGRvIHsgaWYgKG9hLmlzRW5hYmxlZCgpKSB7IGZvciAoaW50IF9lbmdfb3V0
X2kgPSAwOyBfZW5nX291dF9pIDwgb2EuZ2V0TnVtQ29ubmVjdGlvbnMoKTsgX2VuZ19vdXRfaSsr
KSB7IFNvTUZGbG9hdCAqX2VuZ19vdXRfdGVtcCA9IChTb01GRmxvYXQgKikgb2FbX2VuZ19vdXRf
aV07IGlmICghX2VuZ19vdXRfdGVtcC0+aXNSZWFkT25seSgpKSB7IF9lbmdfb3V0X3RlbXAtPnNl
dDFWYWx1ZShpLCBvdmEpOyB9IH0gfSB9IHdoaWxlKDApOwogICAgICAgIGRvIHsgaWYgKG9iLmlz
RW5hYmxlZCgpKSB7IGZvciAoaW50IF9lbmdfb3V0X2kgPSAwOyBfZW5nX291dF9pIDwgb2IuZ2V0
TnVtQ29ubmVjdGlvbnMoKTsgX2VuZ19vdXRfaSsrKSB7IFNvTUZGbG9hdCAqX2VuZ19vdXRfdGVt
cCA9IChTb01GRmxvYXQgKikgb2JbX2VuZ19vdXRfaV07IGlmICghX2VuZ19vdXRfdGVtcC0+aXNS
ZWFkT25seSgpKSB7IF9lbmdfb3V0X3RlbXAtPnNldDFWYWx1ZShpLCBvdmIpOyB9IH0gfSB9IHdo
aWxlKDApOwogICAgICAgIGRvIHsgaWYgKG9jLmlzRW5hYmxlZCgpKSB7IGZvciAoaW50IF9lbmdf
b3V0X2kgPSAwOyBfZW5nX291dF9pIDwgb2MuZ2V0TnVtQ29ubmVjdGlvbnMoKTsgX2VuZ19vdXRf
aSsrKSB7IFNvTUZGbG9hdCAqX2VuZ19vdXRfdGVtcCA9IChTb01GRmxvYXQgKikgb2NbX2VuZ19v
dXRfaV07IGlmICghX2VuZ19vdXRfdGVtcC0+aXNSZWFkT25seSgpKSB7IF9lbmdfb3V0X3RlbXAt
PnNldDFWYWx1ZShpLCBvdmMpOyB9IH0gfSB9IHdoaWxlKDApOwogICAgICAgIGRvIHsgaWYgKG9k
LmlzRW5hYmxlZCgpKSB7IGZvciAoaW50IF9lbmdfb3V0X2kgPSAwOyBfZW5nX291dF9pIDwgb2Qu
Z2V0TnVtQ29ubmVjdGlvbnMoKTsgX2VuZ19vdXRfaSsrKSB7IFNvTUZGbG9hdCAqX2VuZ19vdXRf
dGVtcCA9IChTb01GRmxvYXQgKikgb2RbX2VuZ19vdXRfaV07IGlmICghX2VuZ19vdXRfdGVtcC0+
aXNSZWFkT25seSgpKSB7IF9lbmdfb3V0X3RlbXAtPnNldDFWYWx1ZShpLCBvdmQpOyB9IH0gfSB9
IHdoaWxlKDApOwogICAgICAgIGRvIHsgaWYgKG9BLmlzRW5hYmxlZCgpKSB7IGZvciAoaW50IF9l
bmdfb3V0X2kgPSAwOyBfZW5nX291dF9pIDwgb0EuZ2V0TnVtQ29ubmVjdGlvbnMoKTsgX2VuZ19v
dXRfaSsrKSB7IFNvTUZWZWMzZiAqX2VuZ19vdXRfdGVtcCA9IChTb01GVmVjM2YgKikgb0FbX2Vu
Z19vdXRfaV07IGlmICghX2VuZ19vdXRfdGVtcC0+aXNSZWFkT25seSgpKSB7IF9lbmdfb3V0X3Rl
bXAtPnNldDFWYWx1ZShpLCBvdkEpOyB9IH0gfSB9IHdoaWxlKDApOwogICAgICAgIGRvIHsgaWYg
KG9CLmlzRW5hYmxlZCgpKSB7IGZvciAoaW50IF9lbmdfb3V0X2kgPSAwOyBfZW5nX291dF9pIDwg
b0IuZ2V0TnVtQ29ubmVjdGlvbnMoKTsgX2VuZ19vdXRfaSsrKSB7IFNvTUZWZWMzZiAqX2VuZ19v
dXRfdGVtcCA9IChTb01GVmVjM2YgKikgb0JbX2VuZ19vdXRfaV07IGlmICghX2VuZ19vdXRfdGVt
cC0+aXNSZWFkT25seSgpKSB7IF9lbmdfb3V0X3RlbXAtPnNldDFWYWx1ZShpLCBvdkIpOyB9IH0g
fSB9IHdoaWxlKDApOwogICAgICAgIGRvIHsgaWYgKG9DLmlzRW5hYmxlZCgpKSB7IGZvciAoaW50
IF9lbmdfb3V0X2kgPSAwOyBfZW5nX291dF9pIDwgb0MuZ2V0TnVtQ29ubmVjdGlvbnMoKTsgX2Vu
Z19vdXRfaSsrKSB7IFNvTUZWZWMzZiAqX2VuZ19vdXRfdGVtcCA9IChTb01GVmVjM2YgKikgb0Nb
X2VuZ19vdXRfaV07IGlmICghX2VuZ19vdXRfdGVtcC0+aXNSZWFkT25seSgpKSB7IF9lbmdfb3V0
X3RlbXAtPnNldDFWYWx1ZShpLCBvdkMpOyB9IH0gfSB9IHdoaWxlKDApOwogICAgICAgIGRvIHsg
aWYgKG9ELmlzRW5hYmxlZCgpKSB7IGZvciAoaW50IF9lbmdfb3V0X2kgPSAwOyBfZW5nX291dF9p
IDwgb0QuZ2V0TnVtQ29ubmVjdGlvbnMoKTsgX2VuZ19vdXRfaSsrKSB7IFNvTUZWZWMzZiAqX2Vu
Z19vdXRfdGVtcCA9IChTb01GVmVjM2YgKikgb0RbX2VuZ19vdXRfaV07IGlmICghX2VuZ19vdXRf
dGVtcC0+aXNSZWFkT25seSgpKSB7IF9lbmdfb3V0X3RlbXAtPnNldDFWYWx1ZShpLCBvdkQpOyB9
IH0gfSB9IHdoaWxlKDApOwogICAgfQp9CiMgMjQ4ICJTb0NhbGN1bGF0b3IuYysrIgpmbG9hdCAq
U29DYWxjdWxhdG9yOjpsb29rdXBGbG9hdCh2b2lkICpkYXRhLCBjb25zdCBjaGFyICpubSkKewog
ICAgU29DYWxjdWxhdG9yICplID0gKFNvQ2FsY3VsYXRvciAqKSBkYXRhOwogICAgKHN0YXRpY19j
YXN0PHZvaWQ+ICgwKSk7CiAgICBpZiAoc3RyY21wKG5tLCAiYSIpID09MCkgcmV0dXJuICZlLT52
YTsKICAgIGlmIChzdHJjbXAobm0sICJiIikgPT0wKSByZXR1cm4gJmUtPnZiOwogICAgaWYgKHN0
cmNtcChubSwgImMiKSA9PTApIHJldHVybiAmZS0+dmM7CiAgICBpZiAoc3RyY21wKG5tLCAiZCIp
ID09MCkgcmV0dXJuICZlLT52ZDsKICAgIGlmIChzdHJjbXAobm0sICJlIikgPT0wKSByZXR1cm4g
JmUtPnZlOwogICAgaWYgKHN0cmNtcChubSwgImYiKSA9PTApIHJldHVybiAmZS0+dmY7CiAgICBp
ZiAoc3RyY21wKG5tLCAiZyIpID09MCkgcmV0dXJuICZlLT52ZzsKICAgIGlmIChzdHJjbXAobm0s
ICJoIikgPT0wKSByZXR1cm4gJmUtPnZoOwogICAgaWYgKHN0cmNtcChubSwgIm9hIikgPT0wKSBy
ZXR1cm4gJmUtPm92YTsKICAgIGlmIChzdHJjbXAobm0sICJvYiIpID09MCkgcmV0dXJuICZlLT5v
dmI7CiAgICBpZiAoc3RyY21wKG5tLCAib2MiKSA9PTApIHJldHVybiAmZS0+b3ZjOwogICAgaWYg
KHN0cmNtcChubSwgIm9kIikgPT0wKSByZXR1cm4gJmUtPm92ZDsKICAgIGlmIChzdHJjbXAobm0s
ICJ0YSIpID09MCkgcmV0dXJuICZlLT50YTsKICAgIGlmIChzdHJjbXAobm0sICJ0YiIpID09MCkg
cmV0dXJuICZlLT50YjsKICAgIGlmIChzdHJjbXAobm0sICJ0YyIpID09MCkgcmV0dXJuICZlLT50
YzsKICAgIGlmIChzdHJjbXAobm0sICJ0ZCIpID09MCkgcmV0dXJuICZlLT50ZDsKICAgIGlmIChz
dHJjbXAobm0sICJ0ZSIpID09MCkgcmV0dXJuICZlLT50ZTsKICAgIGlmIChzdHJjbXAobm0sICJ0
ZiIpID09MCkgcmV0dXJuICZlLT50ZjsKICAgIGlmIChzdHJjbXAobm0sICJ0ZyIpID09MCkgcmV0
dXJuICZlLT50ZzsKICAgIGlmIChzdHJjbXAobm0sICJ0aCIpID09MCkgcmV0dXJuICZlLT50aDsK
ICAgIHJldHVybiBfX251bGw7Cn0KClNiVmVjM2YgKlNvQ2FsY3VsYXRvcjo6bG9va3VwVmVjM2Yo
dm9pZCAqZGF0YSwgY29uc3QgY2hhciAqbm0pCnsKICAgIFNvQ2FsY3VsYXRvciAqZSA9IChTb0Nh
bGN1bGF0b3IgKikgZGF0YTsKICAgIChzdGF0aWNfY2FzdDx2b2lkPiAoMCkpOwogICAgaWYgKHN0
cmNtcChubSwgIkEiKSA9PTApIHJldHVybiAmZS0+dkE7CiAgICBpZiAoc3RyY21wKG5tLCAiQiIp
ID09MCkgcmV0dXJuICZlLT52QjsKICAgIGlmIChzdHJjbXAobm0sICJDIikgPT0wKSByZXR1cm4g
JmUtPnZDOwogICAgaWYgKHN0cmNtcChubSwgIkQiKSA9PTApIHJldHVybiAmZS0+dkQ7CiAgICBp
ZiAoc3RyY21wKG5tLCAiRSIpID09MCkgcmV0dXJuICZlLT52RTsKICAgIGlmIChzdHJjbXAobm0s
ICJGIikgPT0wKSByZXR1cm4gJmUtPnZGOwogICAgaWYgKHN0cmNtcChubSwgIkciKSA9PTApIHJl
dHVybiAmZS0+dkc7CiAgICBpZiAoc3RyY21wKG5tLCAiSCIpID09MCkgcmV0dXJuICZlLT52SDsK
ICAgIGlmIChzdHJjbXAobm0sICJvQSIpID09MCkgcmV0dXJuICZlLT5vdkE7CiAgICBpZiAoc3Ry
Y21wKG5tLCAib0IiKSA9PTApIHJldHVybiAmZS0+b3ZCOwogICAgaWYgKHN0cmNtcChubSwgIm9D
IikgPT0wKSByZXR1cm4gJmUtPm92QzsKICAgIGlmIChzdHJjbXAobm0sICJvRCIpID09MCkgcmV0
dXJuICZlLT5vdkQ7CiAgICBpZiAoc3RyY21wKG5tLCAidEEiKSA9PTApIHJldHVybiAmZS0+dEE7
CiAgICBpZiAoc3RyY21wKG5tLCAidEIiKSA9PTApIHJldHVybiAmZS0+dEI7CiAgICBpZiAoc3Ry
Y21wKG5tLCAidEMiKSA9PTApIHJldHVybiAmZS0+dEM7CiAgICBpZiAoc3RyY21wKG5tLCAidEQi
KSA9PTApIHJldHVybiAmZS0+dEQ7CiAgICBpZiAoc3RyY21wKG5tLCAidEUiKSA9PTApIHJldHVy
biAmZS0+dEU7CiAgICBpZiAoc3RyY21wKG5tLCAidEYiKSA9PTApIHJldHVybiAmZS0+dEY7CiAg
ICBpZiAoc3RyY21wKG5tLCAidEciKSA9PTApIHJldHVybiAmZS0+dEc7CiAgICBpZiAoc3RyY21w
KG5tLCAidEgiKSA9PTApIHJldHVybiAmZS0+dEg7CiAgICByZXR1cm4gX19udWxsOwp9CiMgNDUg
IlNvRW5naW5lcy5jKysiIDIKIyAxICJTb0NvbXBvc2UuYysrIiAxCiMgNTQgIlNvQ29tcG9zZS5j
KysiCiMgMSAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZW5n
aW5lcy9Tb0NvbXBvc2UuaCIgMQojIDczICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5j
bHVkZS9JbnZlbnRvci9lbmdpbmVzL1NvQ29tcG9zZS5oIgojIDEgIi4uLy4uLy4uLy4uLy4uL2xp
Yi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2ZpZWxkcy9Tb01GTWF0cml4LmgiIDEKIyA2OSAi
Li4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZmllbGRzL1NvTUZN
YXRyaXguaCIKY2xhc3MgU29NRk1hdHJpeCA6IHB1YmxpYyBTb01GaWVsZCB7CgoKICAgIHB1Ymxp
YzogdmlydHVhbCBTb1R5cGUgZ2V0VHlwZUlkKCkgY29uc3Q7IHN0YXRpYyBTb1R5cGUgZ2V0Q2xh
c3NUeXBlSWQoKSB7IHJldHVybiBjbGFzc1R5cGVJZDsgfSBjb25zdCBTb01GTWF0cml4ICYgb3Bl
cmF0b3IgPShjb25zdCBTb01GTWF0cml4ICZmKTsgcHVibGljOiB2aXJ0dWFsIHZvaWQgY29weUZy
b20oY29uc3QgU29GaWVsZCAmZik7IHN0YXRpYyB2b2lkICogY3JlYXRlSW5zdGFuY2UoKTsgdmly
dHVhbCBTYkJvb2wgaXNTYW1lKGNvbnN0IFNvRmllbGQgJmYpIGNvbnN0OyBwcml2YXRlOiBzdGF0
aWMgU29UeXBlIGNsYXNzVHlwZUlkOyBwdWJsaWM6IFNvTUZNYXRyaXgoKTsgdmlydHVhbCB+U29N
Rk1hdHJpeCgpOyBwcml2YXRlOiB2aXJ0dWFsIFNiQm9vbCByZWFkMVZhbHVlKFNvSW5wdXQgKmlu
LCBpbnQgaW5kZXgpOyB2aXJ0dWFsIHZvaWQgd3JpdGUxVmFsdWUoU29PdXRwdXQgKm91dCwgaW50
IGluZGV4KSBjb25zdDsgcHVibGljOiBjb25zdCBTYk1hdHJpeCAmIG9wZXJhdG9yIFtdKGludCBp
KSBjb25zdCB7IGV2YWx1YXRlKCk7IHJldHVybiB2YWx1ZXNbaV07IH0gY29uc3QgU2JNYXRyaXgg
KiBnZXRWYWx1ZXMoaW50IHN0YXJ0KSBjb25zdCB7IGV2YWx1YXRlKCk7IHJldHVybiAoY29uc3Qg
U2JNYXRyaXggKikodmFsdWVzICsgc3RhcnQpOyB9IGludCBmaW5kKGNvbnN0IFNiTWF0cml4ICYg
dGFyZ2V0VmFsdWUsIFNiQm9vbCBhZGRJZk5vdEZvdW5kID0gMCk7IHZvaWQgc2V0VmFsdWVzKGlu
dCBzdGFydCwgaW50IG51bSwgY29uc3QgU2JNYXRyaXggKm5ld1ZhbHVlcyk7IHZvaWQgc2V0MVZh
bHVlKGludCBpbmRleCwgY29uc3QgU2JNYXRyaXggJiBuZXdWYWx1ZSk7IHZvaWQgc2V0VmFsdWUo
Y29uc3QgU2JNYXRyaXggJiBuZXdWYWx1ZSk7IGNvbnN0IFNiTWF0cml4ICYgb3BlcmF0b3IgPShj
b25zdCBTYk1hdHJpeCAmIG5ld1ZhbHVlKSB7IHNldFZhbHVlKG5ld1ZhbHVlKTsgcmV0dXJuIG5l
d1ZhbHVlOyB9IGludCBvcGVyYXRvciA9PShjb25zdCBTb01GTWF0cml4ICZmKSBjb25zdDsgaW50
IG9wZXJhdG9yICE9KGNvbnN0IFNvTUZNYXRyaXggJmYpIGNvbnN0IHsgcmV0dXJuICEgKCgqdGhp
cykgPT0gZik7IH0gU2JNYXRyaXggKiBzdGFydEVkaXRpbmcoKSB7IGV2YWx1YXRlKCk7IHJldHVy
biB2YWx1ZXM7IH0gdm9pZCBmaW5pc2hFZGl0aW5nKCkgeyB2YWx1ZUNoYW5nZWQoKTsgfSBwcm90
ZWN0ZWQ6IHZpcnR1YWwgdm9pZCBhbGxvY1ZhbHVlcyhpbnQgbmV3TnVtKTsgdmlydHVhbCB2b2lk
IGRlbGV0ZUFsbFZhbHVlcygpOyB2aXJ0dWFsIHZvaWQgY29weVZhbHVlKGludCB0bywgaW50IGZy
b20pOyBTYk1hdHJpeCAqdmFsdWVzOwoKICBwdWJsaWM6CgoKICAgIHZvaWQgc2V0VmFsdWUoZmxv
YXQgYTExLCBmbG9hdCBhMTIsIGZsb2F0IGExMywgZmxvYXQgYTE0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmbG9hdCBhMjEsIGZsb2F0IGEyMiwgZmxvYXQgYTIzLCBmbG9hdCBh
MjQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGEzMSwgZmxvYXQgYTMy
LCBmbG9hdCBhMzMsIGZsb2F0IGEzNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmxvYXQgYTQxLCBmbG9hdCBhNDIsIGZsb2F0IGE0MywgZmxvYXQgYTQ0KTsKCiAgcHVibGljOgog
ICAgc3RhdGljIHZvaWQgaW5pdENsYXNzKCk7Cn07CiMgNzQgIi4uLy4uLy4uLy4uLy4uL2xpYi9k
YXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2VuZ2luZXMvU29Db21wb3NlLmgiIDIKIyAxICIuLi8u
Li8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9maWVsZHMvU29NRlJvdGF0
aW9uLmgiIDEKIyA2OSAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50
b3IvZmllbGRzL1NvTUZSb3RhdGlvbi5oIgpjbGFzcyBTb01GUm90YXRpb24gOiBwdWJsaWMgU29N
RmllbGQgewoKICAgIHB1YmxpYzogdmlydHVhbCBTb1R5cGUgZ2V0VHlwZUlkKCkgY29uc3Q7IHN0
YXRpYyBTb1R5cGUgZ2V0Q2xhc3NUeXBlSWQoKSB7IHJldHVybiBjbGFzc1R5cGVJZDsgfSBjb25z
dCBTb01GUm90YXRpb24gJiBvcGVyYXRvciA9KGNvbnN0IFNvTUZSb3RhdGlvbiAmZik7IHB1Ymxp
YzogdmlydHVhbCB2b2lkIGNvcHlGcm9tKGNvbnN0IFNvRmllbGQgJmYpOyBzdGF0aWMgdm9pZCAq
IGNyZWF0ZUluc3RhbmNlKCk7IHZpcnR1YWwgU2JCb29sIGlzU2FtZShjb25zdCBTb0ZpZWxkICZm
KSBjb25zdDsgcHJpdmF0ZTogc3RhdGljIFNvVHlwZSBjbGFzc1R5cGVJZDsgcHVibGljOiBTb01G
Um90YXRpb24oKTsgdmlydHVhbCB+U29NRlJvdGF0aW9uKCk7IHByaXZhdGU6IHZpcnR1YWwgU2JC
b29sIHJlYWQxVmFsdWUoU29JbnB1dCAqaW4sIGludCBpbmRleCk7IHZpcnR1YWwgdm9pZCB3cml0
ZTFWYWx1ZShTb091dHB1dCAqb3V0LCBpbnQgaW5kZXgpIGNvbnN0OyBwdWJsaWM6IGNvbnN0IFNi
Um90YXRpb24gJiBvcGVyYXRvciBbXShpbnQgaSkgY29uc3QgeyBldmFsdWF0ZSgpOyByZXR1cm4g
dmFsdWVzW2ldOyB9IGNvbnN0IFNiUm90YXRpb24gKiBnZXRWYWx1ZXMoaW50IHN0YXJ0KSBjb25z
dCB7IGV2YWx1YXRlKCk7IHJldHVybiAoY29uc3QgU2JSb3RhdGlvbiAqKSh2YWx1ZXMgKyBzdGFy
dCk7IH0gaW50IGZpbmQoY29uc3QgU2JSb3RhdGlvbiAmIHRhcmdldFZhbHVlLCBTYkJvb2wgYWRk
SWZOb3RGb3VuZCA9IDApOyB2b2lkIHNldFZhbHVlcyhpbnQgc3RhcnQsIGludCBudW0sIGNvbnN0
IFNiUm90YXRpb24gKm5ld1ZhbHVlcyk7IHZvaWQgc2V0MVZhbHVlKGludCBpbmRleCwgY29uc3Qg
U2JSb3RhdGlvbiAmIG5ld1ZhbHVlKTsgdm9pZCBzZXRWYWx1ZShjb25zdCBTYlJvdGF0aW9uICYg
bmV3VmFsdWUpOyBjb25zdCBTYlJvdGF0aW9uICYgb3BlcmF0b3IgPShjb25zdCBTYlJvdGF0aW9u
ICYgbmV3VmFsdWUpIHsgc2V0VmFsdWUobmV3VmFsdWUpOyByZXR1cm4gbmV3VmFsdWU7IH0gaW50
IG9wZXJhdG9yID09KGNvbnN0IFNvTUZSb3RhdGlvbiAmZikgY29uc3Q7IGludCBvcGVyYXRvciAh
PShjb25zdCBTb01GUm90YXRpb24gJmYpIGNvbnN0IHsgcmV0dXJuICEgKCgqdGhpcykgPT0gZik7
IH0gU2JSb3RhdGlvbiAqIHN0YXJ0RWRpdGluZygpIHsgZXZhbHVhdGUoKTsgcmV0dXJuIHZhbHVl
czsgfSB2b2lkIGZpbmlzaEVkaXRpbmcoKSB7IHZhbHVlQ2hhbmdlZCgpOyB9IHByb3RlY3RlZDog
dmlydHVhbCB2b2lkIGFsbG9jVmFsdWVzKGludCBuZXdOdW0pOyB2aXJ0dWFsIHZvaWQgZGVsZXRl
QWxsVmFsdWVzKCk7IHZpcnR1YWwgdm9pZCBjb3B5VmFsdWUoaW50IHRvLCBpbnQgZnJvbSk7IFNi
Um90YXRpb24gKnZhbHVlczsKCiAgcHVibGljOgoKCgoKCgoKICAgIHZvaWQgc2V0VmFsdWVzKGlu
dCBzdGFydCwgaW50IG51bSwgY29uc3QgZmxvYXQgcVtdWzRdKTsKCgoKICAgIHZvaWQgc2V0MVZh
bHVlKGludCBpbmRleCwgZmxvYXQgcTAsIGZsb2F0IHExLCBmbG9hdCBxMiwgZmxvYXQgcTMpOwoK
CgogICAgdm9pZCBzZXQxVmFsdWUoaW50IGluZGV4LCBjb25zdCBmbG9hdCBxWzRdKTsKCgoKICAg
IHZvaWQgc2V0MVZhbHVlKGludCBpbmRleCwgY29uc3QgU2JWZWMzZiAmYXhpcywgZmxvYXQgYW5n
bGUpOwoKCgogICAgdm9pZCBzZXRWYWx1ZShmbG9hdCBxMCwgZmxvYXQgcTEsIGZsb2F0IHEyLCBm
bG9hdCBxMyk7CgoKCiAgICB2b2lkIHNldFZhbHVlKGNvbnN0IGZsb2F0IHFbNF0pOwoKCgogICAg
dm9pZCBzZXRWYWx1ZShjb25zdCBTYlZlYzNmICZheGlzLCBmbG9hdCBhbmdsZSk7CgogIHB1Ymxp
YzoKICAgIHN0YXRpYyB2b2lkIGluaXRDbGFzcygpOwp9OwojIDc1ICIuLi8uLi8uLi8uLi8uLi9s
aWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9lbmdpbmVzL1NvQ29tcG9zZS5oIiAyCiMgMSAi
Li4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZmllbGRzL1NvTUZW
ZWMyZi5oIiAxCiMgNjkgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVu
dG9yL2ZpZWxkcy9Tb01GVmVjMmYuaCIKY2xhc3MgU29NRlZlYzJmIDogcHVibGljIFNvTUZpZWxk
IHsKCiAgICBwdWJsaWM6IHZpcnR1YWwgU29UeXBlIGdldFR5cGVJZCgpIGNvbnN0OyBzdGF0aWMg
U29UeXBlIGdldENsYXNzVHlwZUlkKCkgeyByZXR1cm4gY2xhc3NUeXBlSWQ7IH0gY29uc3QgU29N
RlZlYzJmICYgb3BlcmF0b3IgPShjb25zdCBTb01GVmVjMmYgJmYpOyBwdWJsaWM6IHZpcnR1YWwg
dm9pZCBjb3B5RnJvbShjb25zdCBTb0ZpZWxkICZmKTsgc3RhdGljIHZvaWQgKiBjcmVhdGVJbnN0
YW5jZSgpOyB2aXJ0dWFsIFNiQm9vbCBpc1NhbWUoY29uc3QgU29GaWVsZCAmZikgY29uc3Q7IHBy
aXZhdGU6IHN0YXRpYyBTb1R5cGUgY2xhc3NUeXBlSWQ7IHB1YmxpYzogU29NRlZlYzJmKCk7IHZp
cnR1YWwgflNvTUZWZWMyZigpOyBwcml2YXRlOiB2aXJ0dWFsIFNiQm9vbCByZWFkMVZhbHVlKFNv
SW5wdXQgKmluLCBpbnQgaW5kZXgpOyB2aXJ0dWFsIHZvaWQgd3JpdGUxVmFsdWUoU29PdXRwdXQg
Km91dCwgaW50IGluZGV4KSBjb25zdDsgcHVibGljOiBjb25zdCBTYlZlYzJmICYgb3BlcmF0b3Ig
W10oaW50IGkpIGNvbnN0IHsgZXZhbHVhdGUoKTsgcmV0dXJuIHZhbHVlc1tpXTsgfSBjb25zdCBT
YlZlYzJmICogZ2V0VmFsdWVzKGludCBzdGFydCkgY29uc3QgeyBldmFsdWF0ZSgpOyByZXR1cm4g
KGNvbnN0IFNiVmVjMmYgKikodmFsdWVzICsgc3RhcnQpOyB9IGludCBmaW5kKGNvbnN0IFNiVmVj
MmYgJiB0YXJnZXRWYWx1ZSwgU2JCb29sIGFkZElmTm90Rm91bmQgPSAwKTsgdm9pZCBzZXRWYWx1
ZXMoaW50IHN0YXJ0LCBpbnQgbnVtLCBjb25zdCBTYlZlYzJmICpuZXdWYWx1ZXMpOyB2b2lkIHNl
dDFWYWx1ZShpbnQgaW5kZXgsIGNvbnN0IFNiVmVjMmYgJiBuZXdWYWx1ZSk7IHZvaWQgc2V0VmFs
dWUoY29uc3QgU2JWZWMyZiAmIG5ld1ZhbHVlKTsgY29uc3QgU2JWZWMyZiAmIG9wZXJhdG9yID0o
Y29uc3QgU2JWZWMyZiAmIG5ld1ZhbHVlKSB7IHNldFZhbHVlKG5ld1ZhbHVlKTsgcmV0dXJuIG5l
d1ZhbHVlOyB9IGludCBvcGVyYXRvciA9PShjb25zdCBTb01GVmVjMmYgJmYpIGNvbnN0OyBpbnQg
b3BlcmF0b3IgIT0oY29uc3QgU29NRlZlYzJmICZmKSBjb25zdCB7IHJldHVybiAhICgoKnRoaXMp
ID09IGYpOyB9IFNiVmVjMmYgKiBzdGFydEVkaXRpbmcoKSB7IGV2YWx1YXRlKCk7IHJldHVybiB2
YWx1ZXM7IH0gdm9pZCBmaW5pc2hFZGl0aW5nKCkgeyB2YWx1ZUNoYW5nZWQoKTsgfSBwcm90ZWN0
ZWQ6IHZpcnR1YWwgdm9pZCBhbGxvY1ZhbHVlcyhpbnQgbmV3TnVtKTsgdmlydHVhbCB2b2lkIGRl
bGV0ZUFsbFZhbHVlcygpOyB2aXJ0dWFsIHZvaWQgY29weVZhbHVlKGludCB0bywgaW50IGZyb20p
OyBTYlZlYzJmICp2YWx1ZXM7CgogIHB1YmxpYzoKCgoKCgoKICAgIHZvaWQgc2V0VmFsdWVzKGlu
dCBzdGFydCwgaW50IG51bSwgY29uc3QgZmxvYXQgeHlbXVsyXSk7CgoKCiAgICB2b2lkIHNldDFW
YWx1ZShpbnQgaW5kZXgsIGZsb2F0IHgsIGZsb2F0IHkpOwoKCgogICAgdm9pZCBzZXQxVmFsdWUo
aW50IGluZGV4LCBjb25zdCBmbG9hdCB4eVsyXSk7CgoKCiAgICB2b2lkIHNldFZhbHVlKGZsb2F0
IHgsIGZsb2F0IHkpOwoKCgogICAgdm9pZCBzZXRWYWx1ZShjb25zdCBmbG9hdCB4eVsyXSk7Cgog
IHB1YmxpYzoKICAgIHN0YXRpYyB2b2lkIGluaXRDbGFzcygpOwoKICBwcml2YXRlOgogICAgdmly
dHVhbCB2b2lkIHdyaXRlQmluYXJ5VmFsdWVzKFNvT3V0cHV0ICpvdXQpIGNvbnN0OwogICAgdmly
dHVhbCBTYkJvb2wgcmVhZEJpbmFyeVZhbHVlcyhTb0lucHV0ICppbiwgaW50IG51bVRvUmVhZCk7
Cn07CiMgNzYgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2Vu
Z2luZXMvU29Db21wb3NlLmgiIDIKCiMgMSAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2lu
Y2x1ZGUvSW52ZW50b3IvZmllbGRzL1NvTUZWZWM0Zi5oIiAxCiMgNjkgIi4uLy4uLy4uLy4uLy4u
L2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2ZpZWxkcy9Tb01GVmVjNGYuaCIKY2xhc3Mg
U29NRlZlYzRmIDogcHVibGljIFNvTUZpZWxkIHsKCiAgICBwdWJsaWM6IHZpcnR1YWwgU29UeXBl
IGdldFR5cGVJZCgpIGNvbnN0OyBzdGF0aWMgU29UeXBlIGdldENsYXNzVHlwZUlkKCkgeyByZXR1
cm4gY2xhc3NUeXBlSWQ7IH0gY29uc3QgU29NRlZlYzRmICYgb3BlcmF0b3IgPShjb25zdCBTb01G
VmVjNGYgJmYpOyBwdWJsaWM6IHZpcnR1YWwgdm9pZCBjb3B5RnJvbShjb25zdCBTb0ZpZWxkICZm
KTsgc3RhdGljIHZvaWQgKiBjcmVhdGVJbnN0YW5jZSgpOyB2aXJ0dWFsIFNiQm9vbCBpc1NhbWUo
Y29uc3QgU29GaWVsZCAmZikgY29uc3Q7IHByaXZhdGU6IHN0YXRpYyBTb1R5cGUgY2xhc3NUeXBl
SWQ7IHB1YmxpYzogU29NRlZlYzRmKCk7IHZpcnR1YWwgflNvTUZWZWM0ZigpOyBwcml2YXRlOiB2
aXJ0dWFsIFNiQm9vbCByZWFkMVZhbHVlKFNvSW5wdXQgKmluLCBpbnQgaW5kZXgpOyB2aXJ0dWFs
IHZvaWQgd3JpdGUxVmFsdWUoU29PdXRwdXQgKm91dCwgaW50IGluZGV4KSBjb25zdDsgcHVibGlj
OiBjb25zdCBTYlZlYzRmICYgb3BlcmF0b3IgW10oaW50IGkpIGNvbnN0IHsgZXZhbHVhdGUoKTsg
cmV0dXJuIHZhbHVlc1tpXTsgfSBjb25zdCBTYlZlYzRmICogZ2V0VmFsdWVzKGludCBzdGFydCkg
Y29uc3QgeyBldmFsdWF0ZSgpOyByZXR1cm4gKGNvbnN0IFNiVmVjNGYgKikodmFsdWVzICsgc3Rh
cnQpOyB9IGludCBmaW5kKGNvbnN0IFNiVmVjNGYgJiB0YXJnZXRWYWx1ZSwgU2JCb29sIGFkZElm
Tm90Rm91bmQgPSAwKTsgdm9pZCBzZXRWYWx1ZXMoaW50IHN0YXJ0LCBpbnQgbnVtLCBjb25zdCBT
YlZlYzRmICpuZXdWYWx1ZXMpOyB2b2lkIHNldDFWYWx1ZShpbnQgaW5kZXgsIGNvbnN0IFNiVmVj
NGYgJiBuZXdWYWx1ZSk7IHZvaWQgc2V0VmFsdWUoY29uc3QgU2JWZWM0ZiAmIG5ld1ZhbHVlKTsg
Y29uc3QgU2JWZWM0ZiAmIG9wZXJhdG9yID0oY29uc3QgU2JWZWM0ZiAmIG5ld1ZhbHVlKSB7IHNl
dFZhbHVlKG5ld1ZhbHVlKTsgcmV0dXJuIG5ld1ZhbHVlOyB9IGludCBvcGVyYXRvciA9PShjb25z
dCBTb01GVmVjNGYgJmYpIGNvbnN0OyBpbnQgb3BlcmF0b3IgIT0oY29uc3QgU29NRlZlYzRmICZm
KSBjb25zdCB7IHJldHVybiAhICgoKnRoaXMpID09IGYpOyB9IFNiVmVjNGYgKiBzdGFydEVkaXRp
bmcoKSB7IGV2YWx1YXRlKCk7IHJldHVybiB2YWx1ZXM7IH0gdm9pZCBmaW5pc2hFZGl0aW5nKCkg
eyB2YWx1ZUNoYW5nZWQoKTsgfSBwcm90ZWN0ZWQ6IHZpcnR1YWwgdm9pZCBhbGxvY1ZhbHVlcyhp
bnQgbmV3TnVtKTsgdmlydHVhbCB2b2lkIGRlbGV0ZUFsbFZhbHVlcygpOyB2aXJ0dWFsIHZvaWQg
Y29weVZhbHVlKGludCB0bywgaW50IGZyb20pOyBTYlZlYzRmICp2YWx1ZXM7CgogIHB1YmxpYzoK
CgoKCgoKICAgIHZvaWQgc2V0VmFsdWVzKGludCBzdGFydCwgaW50IG51bSwgY29uc3QgZmxvYXQg
eHl6d1tdWzRdKTsKCgoKICAgIHZvaWQgc2V0MVZhbHVlKGludCBpbmRleCwgZmxvYXQgeCwgZmxv
YXQgeSwgZmxvYXQgeiwgZmxvYXQgdyk7CgoKCiAgICB2b2lkIHNldDFWYWx1ZShpbnQgaW5kZXgs
IGNvbnN0IGZsb2F0IHh5endbNF0pOwoKCgogICAgdm9pZCBzZXRWYWx1ZShmbG9hdCB4LCBmbG9h
dCB5LCBmbG9hdCB6LCBmbG9hdCB3KTsKCgoKICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgZmxvYXQg
eHl6d1s0XSk7CgogIHB1YmxpYzoKICAgIHN0YXRpYyB2b2lkIGluaXRDbGFzcygpOwoKICBwcml2
YXRlOgogICAgdmlydHVhbCB2b2lkIHdyaXRlQmluYXJ5VmFsdWVzKFNvT3V0cHV0ICpvdXQpIGNv
bnN0OwogICAgdmlydHVhbCBTYkJvb2wgcmVhZEJpbmFyeVZhbHVlcyhTb0lucHV0ICppbiwgaW50
IG51bVRvUmVhZCk7Cn07CiMgNzggIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRl
L0ludmVudG9yL2VuZ2luZXMvU29Db21wb3NlLmgiIDIKIyAxMDAgIi4uLy4uLy4uLy4uLy4uL2xp
Yi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2VuZ2luZXMvU29Db21wb3NlLmgiCmNsYXNzIFNv
Q29tcG9zZVZlYzJmIDogcHVibGljIFNvRW5naW5lIHsKICAgIHB1YmxpYzogc3RhdGljIFNvVHlw
ZSBnZXRDbGFzc1R5cGVJZCgpIHsgcmV0dXJuIGNsYXNzVHlwZUlkOyB9IHZpcnR1YWwgU29UeXBl
IGdldFR5cGVJZCgpIGNvbnN0OyBwdWJsaWM6IHZpcnR1YWwgY29uc3QgU29GaWVsZERhdGEgKiBn
ZXRGaWVsZERhdGEoKSBjb25zdDsgdmlydHVhbCBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKiBn
ZXRPdXRwdXREYXRhKCkgY29uc3Q7IHByb3RlY3RlZDogc3RhdGljIGNvbnN0IFNvRmllbGREYXRh
ICoqIGdldElucHV0RGF0YVB0cigpIHsgcmV0dXJuIChjb25zdCBTb0ZpZWxkRGF0YSAqKikmaW5w
dXREYXRhOyB9IHN0YXRpYyBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKiogZ2V0T3V0cHV0RGF0
YVB0cigpIHsgcmV0dXJuIChjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKiopJm91dHB1dERhdGE7
IH0gcHJpdmF0ZTogc3RhdGljIFNvVHlwZSBjbGFzc1R5cGVJZDsgc3RhdGljIFNiQm9vbCBmaXJz
dEluc3RhbmNlOyBzdGF0aWMgU29GaWVsZERhdGEgKmlucHV0RGF0YTsgc3RhdGljIFNvRW5naW5l
T3V0cHV0RGF0YSAqb3V0cHV0RGF0YTsgc3RhdGljIGNvbnN0IFNvRmllbGREYXRhICoqcGFyZW50
SW5wdXREYXRhOyBzdGF0aWMgY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICoqcGFyZW50T3V0cHV0
RGF0YTsgcHJpdmF0ZTogc3RhdGljIHZvaWQgKmNyZWF0ZUluc3RhbmNlKCk7IHByaXZhdGU6IH5T
b0NvbXBvc2VWZWMyZigpOyB2aXJ0dWFsIHZvaWQgZXZhbHVhdGUoKTsgcHVibGljOiBTb0NvbXBv
c2VWZWMyZigpOyBzdGF0aWMgdm9pZCBpbml0Q2xhc3MoKTsKICAgIFNvTUZGbG9hdCB4OwogICAg
U29NRkZsb2F0IHk7CiAgICBTb0VuZ2luZU91dHB1dCB2ZWN0b3I7Cn07CgoKY2xhc3MgU29Db21w
b3NlVmVjM2YgOiBwdWJsaWMgU29FbmdpbmUgewogICAgcHVibGljOiBzdGF0aWMgU29UeXBlIGdl
dENsYXNzVHlwZUlkKCkgeyByZXR1cm4gY2xhc3NUeXBlSWQ7IH0gdmlydHVhbCBTb1R5cGUgZ2V0
VHlwZUlkKCkgY29uc3Q7IHB1YmxpYzogdmlydHVhbCBjb25zdCBTb0ZpZWxkRGF0YSAqIGdldEZp
ZWxkRGF0YSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqIGdldE91
dHB1dERhdGEoKSBjb25zdDsgcHJvdGVjdGVkOiBzdGF0aWMgY29uc3QgU29GaWVsZERhdGEgKiog
Z2V0SW5wdXREYXRhUHRyKCkgeyByZXR1cm4gKGNvbnN0IFNvRmllbGREYXRhICoqKSZpbnB1dERh
dGE7IH0gc3RhdGljIGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqKiBnZXRPdXRwdXREYXRhUHRy
KCkgeyByZXR1cm4gKGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqKikmb3V0cHV0RGF0YTsgfSBw
cml2YXRlOiBzdGF0aWMgU29UeXBlIGNsYXNzVHlwZUlkOyBzdGF0aWMgU2JCb29sIGZpcnN0SW5z
dGFuY2U7IHN0YXRpYyBTb0ZpZWxkRGF0YSAqaW5wdXREYXRhOyBzdGF0aWMgU29FbmdpbmVPdXRw
dXREYXRhICpvdXRwdXREYXRhOyBzdGF0aWMgY29uc3QgU29GaWVsZERhdGEgKipwYXJlbnRJbnB1
dERhdGE7IHN0YXRpYyBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKipwYXJlbnRPdXRwdXREYXRh
OyBwcml2YXRlOiBzdGF0aWMgdm9pZCAqY3JlYXRlSW5zdGFuY2UoKTsgcHJpdmF0ZTogflNvQ29t
cG9zZVZlYzNmKCk7IHZpcnR1YWwgdm9pZCBldmFsdWF0ZSgpOyBwdWJsaWM6IFNvQ29tcG9zZVZl
YzNmKCk7IHN0YXRpYyB2b2lkIGluaXRDbGFzcygpOwogICAgU29NRkZsb2F0IHg7CiAgICBTb01G
RmxvYXQgeTsKICAgIFNvTUZGbG9hdCB6OwogICAgU29FbmdpbmVPdXRwdXQgdmVjdG9yOwp9OwoK
CmNsYXNzIFNvQ29tcG9zZVZlYzRmIDogcHVibGljIFNvRW5naW5lIHsKICAgIHB1YmxpYzogc3Rh
dGljIFNvVHlwZSBnZXRDbGFzc1R5cGVJZCgpIHsgcmV0dXJuIGNsYXNzVHlwZUlkOyB9IHZpcnR1
YWwgU29UeXBlIGdldFR5cGVJZCgpIGNvbnN0OyBwdWJsaWM6IHZpcnR1YWwgY29uc3QgU29GaWVs
ZERhdGEgKiBnZXRGaWVsZERhdGEoKSBjb25zdDsgdmlydHVhbCBjb25zdCBTb0VuZ2luZU91dHB1
dERhdGEgKiBnZXRPdXRwdXREYXRhKCkgY29uc3Q7IHByb3RlY3RlZDogc3RhdGljIGNvbnN0IFNv
RmllbGREYXRhICoqIGdldElucHV0RGF0YVB0cigpIHsgcmV0dXJuIChjb25zdCBTb0ZpZWxkRGF0
YSAqKikmaW5wdXREYXRhOyB9IHN0YXRpYyBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKiogZ2V0
T3V0cHV0RGF0YVB0cigpIHsgcmV0dXJuIChjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKiopJm91
dHB1dERhdGE7IH0gcHJpdmF0ZTogc3RhdGljIFNvVHlwZSBjbGFzc1R5cGVJZDsgc3RhdGljIFNi
Qm9vbCBmaXJzdEluc3RhbmNlOyBzdGF0aWMgU29GaWVsZERhdGEgKmlucHV0RGF0YTsgc3RhdGlj
IFNvRW5naW5lT3V0cHV0RGF0YSAqb3V0cHV0RGF0YTsgc3RhdGljIGNvbnN0IFNvRmllbGREYXRh
ICoqcGFyZW50SW5wdXREYXRhOyBzdGF0aWMgY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICoqcGFy
ZW50T3V0cHV0RGF0YTsgcHJpdmF0ZTogc3RhdGljIHZvaWQgKmNyZWF0ZUluc3RhbmNlKCk7IHBy
aXZhdGU6IH5Tb0NvbXBvc2VWZWM0ZigpOyB2aXJ0dWFsIHZvaWQgZXZhbHVhdGUoKTsgcHVibGlj
OiBTb0NvbXBvc2VWZWM0ZigpOyBzdGF0aWMgdm9pZCBpbml0Q2xhc3MoKTsKICAgIFNvTUZGbG9h
dCB4OwogICAgU29NRkZsb2F0IHk7CiAgICBTb01GRmxvYXQgejsKICAgIFNvTUZGbG9hdCB3Owog
ICAgU29FbmdpbmVPdXRwdXQgdmVjdG9yOwp9OwoKCgoKCgoKY2xhc3MgU29EZWNvbXBvc2VWZWMy
ZiA6IHB1YmxpYyBTb0VuZ2luZSB7CiAgICBwdWJsaWM6IHN0YXRpYyBTb1R5cGUgZ2V0Q2xhc3NU
eXBlSWQoKSB7IHJldHVybiBjbGFzc1R5cGVJZDsgfSB2aXJ0dWFsIFNvVHlwZSBnZXRUeXBlSWQo
KSBjb25zdDsgcHVibGljOiB2aXJ0dWFsIGNvbnN0IFNvRmllbGREYXRhICogZ2V0RmllbGREYXRh
KCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICogZ2V0T3V0cHV0RGF0
YSgpIGNvbnN0OyBwcm90ZWN0ZWQ6IHN0YXRpYyBjb25zdCBTb0ZpZWxkRGF0YSAqKiBnZXRJbnB1
dERhdGFQdHIoKSB7IHJldHVybiAoY29uc3QgU29GaWVsZERhdGEgKiopJmlucHV0RGF0YTsgfSBz
dGF0aWMgY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICoqIGdldE91dHB1dERhdGFQdHIoKSB7IHJl
dHVybiAoY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICoqKSZvdXRwdXREYXRhOyB9IHByaXZhdGU6
IHN0YXRpYyBTb1R5cGUgY2xhc3NUeXBlSWQ7IHN0YXRpYyBTYkJvb2wgZmlyc3RJbnN0YW5jZTsg
c3RhdGljIFNvRmllbGREYXRhICppbnB1dERhdGE7IHN0YXRpYyBTb0VuZ2luZU91dHB1dERhdGEg
Km91dHB1dERhdGE7IHN0YXRpYyBjb25zdCBTb0ZpZWxkRGF0YSAqKnBhcmVudElucHV0RGF0YTsg
c3RhdGljIGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqKnBhcmVudE91dHB1dERhdGE7IHByaXZh
dGU6IHN0YXRpYyB2b2lkICpjcmVhdGVJbnN0YW5jZSgpOyBwcml2YXRlOiB+U29EZWNvbXBvc2VW
ZWMyZigpOyB2aXJ0dWFsIHZvaWQgZXZhbHVhdGUoKTsgcHVibGljOiBTb0RlY29tcG9zZVZlYzJm
KCk7IHN0YXRpYyB2b2lkIGluaXRDbGFzcygpOwogICAgU29NRlZlYzJmIHZlY3RvcjsKICAgIFNv
RW5naW5lT3V0cHV0IHg7CiAgICBTb0VuZ2luZU91dHB1dCB5Owp9OwoKCmNsYXNzIFNvRGVjb21w
b3NlVmVjM2YgOiBwdWJsaWMgU29FbmdpbmUgewogICAgcHVibGljOiBzdGF0aWMgU29UeXBlIGdl
dENsYXNzVHlwZUlkKCkgeyByZXR1cm4gY2xhc3NUeXBlSWQ7IH0gdmlydHVhbCBTb1R5cGUgZ2V0
VHlwZUlkKCkgY29uc3Q7IHB1YmxpYzogdmlydHVhbCBjb25zdCBTb0ZpZWxkRGF0YSAqIGdldEZp
ZWxkRGF0YSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqIGdldE91
dHB1dERhdGEoKSBjb25zdDsgcHJvdGVjdGVkOiBzdGF0aWMgY29uc3QgU29GaWVsZERhdGEgKiog
Z2V0SW5wdXREYXRhUHRyKCkgeyByZXR1cm4gKGNvbnN0IFNvRmllbGREYXRhICoqKSZpbnB1dERh
dGE7IH0gc3RhdGljIGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqKiBnZXRPdXRwdXREYXRhUHRy
KCkgeyByZXR1cm4gKGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqKikmb3V0cHV0RGF0YTsgfSBw
cml2YXRlOiBzdGF0aWMgU29UeXBlIGNsYXNzVHlwZUlkOyBzdGF0aWMgU2JCb29sIGZpcnN0SW5z
dGFuY2U7IHN0YXRpYyBTb0ZpZWxkRGF0YSAqaW5wdXREYXRhOyBzdGF0aWMgU29FbmdpbmVPdXRw
dXREYXRhICpvdXRwdXREYXRhOyBzdGF0aWMgY29uc3QgU29GaWVsZERhdGEgKipwYXJlbnRJbnB1
dERhdGE7IHN0YXRpYyBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKipwYXJlbnRPdXRwdXREYXRh
OyBwcml2YXRlOiBzdGF0aWMgdm9pZCAqY3JlYXRlSW5zdGFuY2UoKTsgcHJpdmF0ZTogflNvRGVj
b21wb3NlVmVjM2YoKTsgdmlydHVhbCB2b2lkIGV2YWx1YXRlKCk7IHB1YmxpYzogU29EZWNvbXBv
c2VWZWMzZigpOyBzdGF0aWMgdm9pZCBpbml0Q2xhc3MoKTsKICAgIFNvTUZWZWMzZiB2ZWN0b3I7
CiAgICBTb0VuZ2luZU91dHB1dCB4OwogICAgU29FbmdpbmVPdXRwdXQgeTsKICAgIFNvRW5naW5l
T3V0cHV0IHo7Cn07CgoKY2xhc3MgU29EZWNvbXBvc2VWZWM0ZiA6IHB1YmxpYyBTb0VuZ2luZSB7
CiAgICBwdWJsaWM6IHN0YXRpYyBTb1R5cGUgZ2V0Q2xhc3NUeXBlSWQoKSB7IHJldHVybiBjbGFz
c1R5cGVJZDsgfSB2aXJ0dWFsIFNvVHlwZSBnZXRUeXBlSWQoKSBjb25zdDsgcHVibGljOiB2aXJ0
dWFsIGNvbnN0IFNvRmllbGREYXRhICogZ2V0RmllbGREYXRhKCkgY29uc3Q7IHZpcnR1YWwgY29u
c3QgU29FbmdpbmVPdXRwdXREYXRhICogZ2V0T3V0cHV0RGF0YSgpIGNvbnN0OyBwcm90ZWN0ZWQ6
IHN0YXRpYyBjb25zdCBTb0ZpZWxkRGF0YSAqKiBnZXRJbnB1dERhdGFQdHIoKSB7IHJldHVybiAo
Y29uc3QgU29GaWVsZERhdGEgKiopJmlucHV0RGF0YTsgfSBzdGF0aWMgY29uc3QgU29FbmdpbmVP
dXRwdXREYXRhICoqIGdldE91dHB1dERhdGFQdHIoKSB7IHJldHVybiAoY29uc3QgU29FbmdpbmVP
dXRwdXREYXRhICoqKSZvdXRwdXREYXRhOyB9IHByaXZhdGU6IHN0YXRpYyBTb1R5cGUgY2xhc3NU
eXBlSWQ7IHN0YXRpYyBTYkJvb2wgZmlyc3RJbnN0YW5jZTsgc3RhdGljIFNvRmllbGREYXRhICpp
bnB1dERhdGE7IHN0YXRpYyBTb0VuZ2luZU91dHB1dERhdGEgKm91dHB1dERhdGE7IHN0YXRpYyBj
b25zdCBTb0ZpZWxkRGF0YSAqKnBhcmVudElucHV0RGF0YTsgc3RhdGljIGNvbnN0IFNvRW5naW5l
T3V0cHV0RGF0YSAqKnBhcmVudE91dHB1dERhdGE7IHByaXZhdGU6IHN0YXRpYyB2b2lkICpjcmVh
dGVJbnN0YW5jZSgpOyBwcml2YXRlOiB+U29EZWNvbXBvc2VWZWM0ZigpOyB2aXJ0dWFsIHZvaWQg
ZXZhbHVhdGUoKTsgcHVibGljOiBTb0RlY29tcG9zZVZlYzRmKCk7IHN0YXRpYyB2b2lkIGluaXRD
bGFzcygpOwogICAgU29NRlZlYzRmIHZlY3RvcjsKICAgIFNvRW5naW5lT3V0cHV0IHg7CiAgICBT
b0VuZ2luZU91dHB1dCB5OwogICAgU29FbmdpbmVPdXRwdXQgejsKICAgIFNvRW5naW5lT3V0cHV0
IHc7Cn07CgoKCgoKCgpjbGFzcyBTb0NvbXBvc2VSb3RhdGlvbiA6IHB1YmxpYyBTb0VuZ2luZSB7
CiAgICBwdWJsaWM6IHN0YXRpYyBTb1R5cGUgZ2V0Q2xhc3NUeXBlSWQoKSB7IHJldHVybiBjbGFz
c1R5cGVJZDsgfSB2aXJ0dWFsIFNvVHlwZSBnZXRUeXBlSWQoKSBjb25zdDsgcHVibGljOiB2aXJ0
dWFsIGNvbnN0IFNvRmllbGREYXRhICogZ2V0RmllbGREYXRhKCkgY29uc3Q7IHZpcnR1YWwgY29u
c3QgU29FbmdpbmVPdXRwdXREYXRhICogZ2V0T3V0cHV0RGF0YSgpIGNvbnN0OyBwcm90ZWN0ZWQ6
IHN0YXRpYyBjb25zdCBTb0ZpZWxkRGF0YSAqKiBnZXRJbnB1dERhdGFQdHIoKSB7IHJldHVybiAo
Y29uc3QgU29GaWVsZERhdGEgKiopJmlucHV0RGF0YTsgfSBzdGF0aWMgY29uc3QgU29FbmdpbmVP
dXRwdXREYXRhICoqIGdldE91dHB1dERhdGFQdHIoKSB7IHJldHVybiAoY29uc3QgU29FbmdpbmVP
dXRwdXREYXRhICoqKSZvdXRwdXREYXRhOyB9IHByaXZhdGU6IHN0YXRpYyBTb1R5cGUgY2xhc3NU
eXBlSWQ7IHN0YXRpYyBTYkJvb2wgZmlyc3RJbnN0YW5jZTsgc3RhdGljIFNvRmllbGREYXRhICpp
bnB1dERhdGE7IHN0YXRpYyBTb0VuZ2luZU91dHB1dERhdGEgKm91dHB1dERhdGE7IHN0YXRpYyBj
b25zdCBTb0ZpZWxkRGF0YSAqKnBhcmVudElucHV0RGF0YTsgc3RhdGljIGNvbnN0IFNvRW5naW5l
T3V0cHV0RGF0YSAqKnBhcmVudE91dHB1dERhdGE7IHByaXZhdGU6IHN0YXRpYyB2b2lkICpjcmVh
dGVJbnN0YW5jZSgpOyBwcml2YXRlOiB+U29Db21wb3NlUm90YXRpb24oKTsgdmlydHVhbCB2b2lk
IGV2YWx1YXRlKCk7IHB1YmxpYzogU29Db21wb3NlUm90YXRpb24oKTsgc3RhdGljIHZvaWQgaW5p
dENsYXNzKCk7CiAgICBTb01GVmVjM2YgYXhpczsKICAgIFNvTUZGbG9hdCBhbmdsZTsKICAgIFNv
RW5naW5lT3V0cHV0IHJvdGF0aW9uOwp9OwoKCmNsYXNzIFNvQ29tcG9zZVJvdGF0aW9uRnJvbVRv
IDogcHVibGljIFNvRW5naW5lIHsKICAgIHB1YmxpYzogc3RhdGljIFNvVHlwZSBnZXRDbGFzc1R5
cGVJZCgpIHsgcmV0dXJuIGNsYXNzVHlwZUlkOyB9IHZpcnR1YWwgU29UeXBlIGdldFR5cGVJZCgp
IGNvbnN0OyBwdWJsaWM6IHZpcnR1YWwgY29uc3QgU29GaWVsZERhdGEgKiBnZXRGaWVsZERhdGEo
KSBjb25zdDsgdmlydHVhbCBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKiBnZXRPdXRwdXREYXRh
KCkgY29uc3Q7IHByb3RlY3RlZDogc3RhdGljIGNvbnN0IFNvRmllbGREYXRhICoqIGdldElucHV0
RGF0YVB0cigpIHsgcmV0dXJuIChjb25zdCBTb0ZpZWxkRGF0YSAqKikmaW5wdXREYXRhOyB9IHN0
YXRpYyBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKiogZ2V0T3V0cHV0RGF0YVB0cigpIHsgcmV0
dXJuIChjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKiopJm91dHB1dERhdGE7IH0gcHJpdmF0ZTog
c3RhdGljIFNvVHlwZSBjbGFzc1R5cGVJZDsgc3RhdGljIFNiQm9vbCBmaXJzdEluc3RhbmNlOyBz
dGF0aWMgU29GaWVsZERhdGEgKmlucHV0RGF0YTsgc3RhdGljIFNvRW5naW5lT3V0cHV0RGF0YSAq
b3V0cHV0RGF0YTsgc3RhdGljIGNvbnN0IFNvRmllbGREYXRhICoqcGFyZW50SW5wdXREYXRhOyBz
dGF0aWMgY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICoqcGFyZW50T3V0cHV0RGF0YTsgcHJpdmF0
ZTogc3RhdGljIHZvaWQgKmNyZWF0ZUluc3RhbmNlKCk7IHByaXZhdGU6IH5Tb0NvbXBvc2VSb3Rh
dGlvbkZyb21UbygpOyB2aXJ0dWFsIHZvaWQgZXZhbHVhdGUoKTsgcHVibGljOiBTb0NvbXBvc2VS
b3RhdGlvbkZyb21UbygpOyBzdGF0aWMgdm9pZCBpbml0Q2xhc3MoKTsKICAgIFNvTUZWZWMzZiBm
cm9tOwogICAgU29NRlZlYzNmIHRvOwogICAgU29FbmdpbmVPdXRwdXQgcm90YXRpb247Cn07CiMg
MTg2ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9lbmdpbmVz
L1NvQ29tcG9zZS5oIgpjbGFzcyBTb0RlY29tcG9zZVJvdGF0aW9uIDogcHVibGljIFNvRW5naW5l
IHsKICAgIHB1YmxpYzogc3RhdGljIFNvVHlwZSBnZXRDbGFzc1R5cGVJZCgpIHsgcmV0dXJuIGNs
YXNzVHlwZUlkOyB9IHZpcnR1YWwgU29UeXBlIGdldFR5cGVJZCgpIGNvbnN0OyBwdWJsaWM6IHZp
cnR1YWwgY29uc3QgU29GaWVsZERhdGEgKiBnZXRGaWVsZERhdGEoKSBjb25zdDsgdmlydHVhbCBj
b25zdCBTb0VuZ2luZU91dHB1dERhdGEgKiBnZXRPdXRwdXREYXRhKCkgY29uc3Q7IHByb3RlY3Rl
ZDogc3RhdGljIGNvbnN0IFNvRmllbGREYXRhICoqIGdldElucHV0RGF0YVB0cigpIHsgcmV0dXJu
IChjb25zdCBTb0ZpZWxkRGF0YSAqKikmaW5wdXREYXRhOyB9IHN0YXRpYyBjb25zdCBTb0VuZ2lu
ZU91dHB1dERhdGEgKiogZ2V0T3V0cHV0RGF0YVB0cigpIHsgcmV0dXJuIChjb25zdCBTb0VuZ2lu
ZU91dHB1dERhdGEgKiopJm91dHB1dERhdGE7IH0gcHJpdmF0ZTogc3RhdGljIFNvVHlwZSBjbGFz
c1R5cGVJZDsgc3RhdGljIFNiQm9vbCBmaXJzdEluc3RhbmNlOyBzdGF0aWMgU29GaWVsZERhdGEg
KmlucHV0RGF0YTsgc3RhdGljIFNvRW5naW5lT3V0cHV0RGF0YSAqb3V0cHV0RGF0YTsgc3RhdGlj
IGNvbnN0IFNvRmllbGREYXRhICoqcGFyZW50SW5wdXREYXRhOyBzdGF0aWMgY29uc3QgU29Fbmdp
bmVPdXRwdXREYXRhICoqcGFyZW50T3V0cHV0RGF0YTsgcHJpdmF0ZTogc3RhdGljIHZvaWQgKmNy
ZWF0ZUluc3RhbmNlKCk7IHByaXZhdGU6IH5Tb0RlY29tcG9zZVJvdGF0aW9uKCk7IHZpcnR1YWwg
dm9pZCBldmFsdWF0ZSgpOyBwdWJsaWM6IFNvRGVjb21wb3NlUm90YXRpb24oKTsgc3RhdGljIHZv
aWQgaW5pdENsYXNzKCk7CiAgICBTb01GUm90YXRpb24gcm90YXRpb247CiAgICBTb0VuZ2luZU91
dHB1dCBheGlzOwogICAgU29FbmdpbmVPdXRwdXQgYW5nbGU7Cn07CiMgMjAxICIuLi8uLi8uLi8u
Li8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9lbmdpbmVzL1NvQ29tcG9zZS5oIgpj
bGFzcyBTb0NvbXBvc2VNYXRyaXggOiBwdWJsaWMgU29FbmdpbmUgewogICAgcHVibGljOiBzdGF0
aWMgU29UeXBlIGdldENsYXNzVHlwZUlkKCkgeyByZXR1cm4gY2xhc3NUeXBlSWQ7IH0gdmlydHVh
bCBTb1R5cGUgZ2V0VHlwZUlkKCkgY29uc3Q7IHB1YmxpYzogdmlydHVhbCBjb25zdCBTb0ZpZWxk
RGF0YSAqIGdldEZpZWxkRGF0YSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IFNvRW5naW5lT3V0cHV0
RGF0YSAqIGdldE91dHB1dERhdGEoKSBjb25zdDsgcHJvdGVjdGVkOiBzdGF0aWMgY29uc3QgU29G
aWVsZERhdGEgKiogZ2V0SW5wdXREYXRhUHRyKCkgeyByZXR1cm4gKGNvbnN0IFNvRmllbGREYXRh
ICoqKSZpbnB1dERhdGE7IH0gc3RhdGljIGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqKiBnZXRP
dXRwdXREYXRhUHRyKCkgeyByZXR1cm4gKGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqKikmb3V0
cHV0RGF0YTsgfSBwcml2YXRlOiBzdGF0aWMgU29UeXBlIGNsYXNzVHlwZUlkOyBzdGF0aWMgU2JC
b29sIGZpcnN0SW5zdGFuY2U7IHN0YXRpYyBTb0ZpZWxkRGF0YSAqaW5wdXREYXRhOyBzdGF0aWMg
U29FbmdpbmVPdXRwdXREYXRhICpvdXRwdXREYXRhOyBzdGF0aWMgY29uc3QgU29GaWVsZERhdGEg
KipwYXJlbnRJbnB1dERhdGE7IHN0YXRpYyBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKipwYXJl
bnRPdXRwdXREYXRhOyBwcml2YXRlOiBzdGF0aWMgdm9pZCAqY3JlYXRlSW5zdGFuY2UoKTsgcHJp
dmF0ZTogflNvQ29tcG9zZU1hdHJpeCgpOyB2aXJ0dWFsIHZvaWQgZXZhbHVhdGUoKTsgcHVibGlj
OiBTb0NvbXBvc2VNYXRyaXgoKTsgc3RhdGljIHZvaWQgaW5pdENsYXNzKCk7CiAgICBTb01GVmVj
M2YgdHJhbnNsYXRpb247CiAgICBTb01GUm90YXRpb24gcm90YXRpb247CiAgICBTb01GVmVjM2Yg
c2NhbGVGYWN0b3I7CiAgICBTb01GUm90YXRpb24gc2NhbGVPcmllbnRhdGlvbjsKICAgIFNvTUZW
ZWMzZiBjZW50ZXI7CiAgICBTb0VuZ2luZU91dHB1dCBtYXRyaXg7Cn07CiMgMjIzICIuLi8uLi8u
Li8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9lbmdpbmVzL1NvQ29tcG9zZS5o
IgpjbGFzcyBTb0RlY29tcG9zZU1hdHJpeCA6IHB1YmxpYyBTb0VuZ2luZSB7CiAgICBwdWJsaWM6
IHN0YXRpYyBTb1R5cGUgZ2V0Q2xhc3NUeXBlSWQoKSB7IHJldHVybiBjbGFzc1R5cGVJZDsgfSB2
aXJ0dWFsIFNvVHlwZSBnZXRUeXBlSWQoKSBjb25zdDsgcHVibGljOiB2aXJ0dWFsIGNvbnN0IFNv
RmllbGREYXRhICogZ2V0RmllbGREYXRhKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgU29FbmdpbmVP
dXRwdXREYXRhICogZ2V0T3V0cHV0RGF0YSgpIGNvbnN0OyBwcm90ZWN0ZWQ6IHN0YXRpYyBjb25z
dCBTb0ZpZWxkRGF0YSAqKiBnZXRJbnB1dERhdGFQdHIoKSB7IHJldHVybiAoY29uc3QgU29GaWVs
ZERhdGEgKiopJmlucHV0RGF0YTsgfSBzdGF0aWMgY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICoq
IGdldE91dHB1dERhdGFQdHIoKSB7IHJldHVybiAoY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICoq
KSZvdXRwdXREYXRhOyB9IHByaXZhdGU6IHN0YXRpYyBTb1R5cGUgY2xhc3NUeXBlSWQ7IHN0YXRp
YyBTYkJvb2wgZmlyc3RJbnN0YW5jZTsgc3RhdGljIFNvRmllbGREYXRhICppbnB1dERhdGE7IHN0
YXRpYyBTb0VuZ2luZU91dHB1dERhdGEgKm91dHB1dERhdGE7IHN0YXRpYyBjb25zdCBTb0ZpZWxk
RGF0YSAqKnBhcmVudElucHV0RGF0YTsgc3RhdGljIGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAq
KnBhcmVudE91dHB1dERhdGE7IHByaXZhdGU6IHN0YXRpYyB2b2lkICpjcmVhdGVJbnN0YW5jZSgp
OyBwcml2YXRlOiB+U29EZWNvbXBvc2VNYXRyaXgoKTsgdmlydHVhbCB2b2lkIGV2YWx1YXRlKCk7
IHB1YmxpYzogU29EZWNvbXBvc2VNYXRyaXgoKTsgc3RhdGljIHZvaWQgaW5pdENsYXNzKCk7CiAg
ICBTb01GTWF0cml4IG1hdHJpeDsKICAgIFNvTUZWZWMzZiBjZW50ZXI7CiAgICBTb0VuZ2luZU91
dHB1dCB0cmFuc2xhdGlvbjsKICAgIFNvRW5naW5lT3V0cHV0IHJvdGF0aW9uOwogICAgU29Fbmdp
bmVPdXRwdXQgc2NhbGVGYWN0b3I7CiAgICBTb0VuZ2luZU91dHB1dCBzY2FsZU9yaWVudGF0aW9u
Owp9OwojIDU1ICJTb0NvbXBvc2UuYysrIiAyCiMgNzEgIlNvQ29tcG9zZS5jKysiClNvVHlwZSBT
b0NvbXBvc2VWZWMyZjo6Y2xhc3NUeXBlSWQ7IFNiQm9vbCBTb0NvbXBvc2VWZWMyZjo6Zmlyc3RJ
bnN0YW5jZT0xOyBTb0VuZ2luZU91dHB1dERhdGEgKlNvQ29tcG9zZVZlYzJmOjpvdXRwdXREYXRh
OyBTb0ZpZWxkRGF0YSAqIFNvQ29tcG9zZVZlYzJmOjppbnB1dERhdGE7IGNvbnN0IFNvRW5naW5l
T3V0cHV0RGF0YSAqKlNvQ29tcG9zZVZlYzJmOjpwYXJlbnRPdXRwdXREYXRhOyBjb25zdCBTb0Zp
ZWxkRGF0YSAqKiBTb0NvbXBvc2VWZWMyZjo6cGFyZW50SW5wdXREYXRhOyBTb1R5cGUgU29Db21w
b3NlVmVjMmY6OmdldFR5cGVJZCgpIGNvbnN0IHsgcmV0dXJuIGNsYXNzVHlwZUlkOyB9IGNvbnN0
IFNvRmllbGREYXRhICogU29Db21wb3NlVmVjMmY6OmdldEZpZWxkRGF0YSgpIGNvbnN0IHsgcmV0
dXJuIGlucHV0RGF0YTsgfSBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKiBTb0NvbXBvc2VWZWMy
Zjo6Z2V0T3V0cHV0RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG91dHB1dERhdGE7IH0gdm9pZCAqIFNv
Q29tcG9zZVZlYzJmOjpjcmVhdGVJbnN0YW5jZSgpIHsgcmV0dXJuICh2b2lkICopKG5ldyBTb0Nv
bXBvc2VWZWMyZik7IH07IFNvQ29tcG9zZVZlYzJmOjp+U29Db21wb3NlVmVjMmYoKSB7IH07CgpT
b0NvbXBvc2VWZWMyZjo6U29Db21wb3NlVmVjMmYoKQp7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAo
aW5wdXREYXRhID09IF9fbnVsbCkgeyBpbnB1dERhdGEgPSBuZXcgU29GaWVsZERhdGEocGFyZW50
SW5wdXREYXRhID8gKnBhcmVudElucHV0RGF0YSA6IF9fbnVsbCk7IG91dHB1dERhdGEgPSBuZXcg
U29FbmdpbmVPdXRwdXREYXRhKHBhcmVudE91dHB1dERhdGEgPyAqcGFyZW50T3V0cHV0RGF0YSA6
IF9fbnVsbCk7IH0gZWxzZSBmaXJzdEluc3RhbmNlID0gMDsgaXNCdWlsdEluID0gMDsgfSB3aGls
ZSgwKTsKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFk
ZEZpZWxkKHRoaXMsICJ4IiwgJnRoaXMtPngpOyB0aGlzLT54LnNldFZhbHVlICgwLjApOyB0aGlz
LT54LnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsKICAgIGRvIHsgd2hpbGUoMCk7IGlm
IChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFkZEZpZWxkKHRoaXMsICJ5IiwgJnRoaXMtPnkp
OyB0aGlzLT55LnNldFZhbHVlICgwLjApOyB0aGlzLT55LnNldENvbnRhaW5lcih0aGlzKTsgfSB3
aGlsZSgwKTsKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBvdXRwdXREYXRh
LT5hZGRPdXRwdXQodGhpcywgInZlY3RvciIsICZ0aGlzLT52ZWN0b3IsIFNvTUZWZWMyZjo6Z2V0
Q2xhc3NUeXBlSWQoKSk7IHRoaXMtPnZlY3Rvci5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUo
MCk7CiAgICBpc0J1aWx0SW4gPSAxOwp9Cgp2b2lkClNvQ29tcG9zZVZlYzJmOjpldmFsdWF0ZSgp
CnsKICAgIGludCBueCA9IHguZ2V0TnVtKCk7CiAgICBpbnQgbnkgPSB5LmdldE51bSgpOwogICAg
aW50IG5vdXQgPSBtYXgobngsbnkpOwogICAgZG8geyBpZiAodmVjdG9yLmlzRW5hYmxlZCgpKSB7
IGZvciAoaW50IF9lbmdfb3V0X2kgPSAwOyBfZW5nX291dF9pIDwgdmVjdG9yLmdldE51bUNvbm5l
Y3Rpb25zKCk7IF9lbmdfb3V0X2krKykgeyBTb01GVmVjMmYgKl9lbmdfb3V0X3RlbXAgPSAoU29N
RlZlYzJmICopIHZlY3RvcltfZW5nX291dF9pXTsgaWYgKCFfZW5nX291dF90ZW1wLT5pc1JlYWRP
bmx5KCkpIHsgX2VuZ19vdXRfdGVtcC0+c2V0TnVtKG5vdXQpOyB9IH0gfSB9IHdoaWxlKDApOwog
ICAgZm9yIChpbnQgaT0wOyBpPG5vdXQ7IGkrKykgewogICAgICAgIGZsb2F0IHZ4ID0geFtjbGFt
cChpLG54KV07CiAgICAgICAgZmxvYXQgdnkgPSB5W2NsYW1wKGksbnkpXTsKICAgICAgICBkbyB7
IGlmICh2ZWN0b3IuaXNFbmFibGVkKCkpIHsgZm9yIChpbnQgX2VuZ19vdXRfaSA9IDA7IF9lbmdf
b3V0X2kgPCB2ZWN0b3IuZ2V0TnVtQ29ubmVjdGlvbnMoKTsgX2VuZ19vdXRfaSsrKSB7IFNvTUZW
ZWMyZiAqX2VuZ19vdXRfdGVtcCA9IChTb01GVmVjMmYgKikgdmVjdG9yW19lbmdfb3V0X2ldOyBp
ZiAoIV9lbmdfb3V0X3RlbXAtPmlzUmVhZE9ubHkoKSkgeyBfZW5nX291dF90ZW1wLT5zZXQxVmFs
dWUoaSwgdngsIHZ5KTsgfSB9IH0gfSB3aGlsZSgwKTsKICAgIH0KfQoKCgoKCgpTb1R5cGUgU29D
b21wb3NlVmVjM2Y6OmNsYXNzVHlwZUlkOyBTYkJvb2wgU29Db21wb3NlVmVjM2Y6OmZpcnN0SW5z
dGFuY2U9MTsgU29FbmdpbmVPdXRwdXREYXRhICpTb0NvbXBvc2VWZWMzZjo6b3V0cHV0RGF0YTsg
U29GaWVsZERhdGEgKiBTb0NvbXBvc2VWZWMzZjo6aW5wdXREYXRhOyBjb25zdCBTb0VuZ2luZU91
dHB1dERhdGEgKipTb0NvbXBvc2VWZWMzZjo6cGFyZW50T3V0cHV0RGF0YTsgY29uc3QgU29GaWVs
ZERhdGEgKiogU29Db21wb3NlVmVjM2Y6OnBhcmVudElucHV0RGF0YTsgU29UeXBlIFNvQ29tcG9z
ZVZlYzNmOjpnZXRUeXBlSWQoKSBjb25zdCB7IHJldHVybiBjbGFzc1R5cGVJZDsgfSBjb25zdCBT
b0ZpZWxkRGF0YSAqIFNvQ29tcG9zZVZlYzNmOjpnZXRGaWVsZERhdGEoKSBjb25zdCB7IHJldHVy
biBpbnB1dERhdGE7IH0gY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICogU29Db21wb3NlVmVjM2Y6
OmdldE91dHB1dERhdGEoKSBjb25zdCB7IHJldHVybiBvdXRwdXREYXRhOyB9IHZvaWQgKiBTb0Nv
bXBvc2VWZWMzZjo6Y3JlYXRlSW5zdGFuY2UoKSB7IHJldHVybiAodm9pZCAqKShuZXcgU29Db21w
b3NlVmVjM2YpOyB9OyBTb0NvbXBvc2VWZWMzZjo6flNvQ29tcG9zZVZlYzNmKCkgeyB9OwoKU29D
b21wb3NlVmVjM2Y6OlNvQ29tcG9zZVZlYzNmKCkKewogICAgZG8geyB3aGlsZSgwKTsgaWYgKGlu
cHV0RGF0YSA9PSBfX251bGwpIHsgaW5wdXREYXRhID0gbmV3IFNvRmllbGREYXRhKHBhcmVudElu
cHV0RGF0YSA/ICpwYXJlbnRJbnB1dERhdGEgOiBfX251bGwpOyBvdXRwdXREYXRhID0gbmV3IFNv
RW5naW5lT3V0cHV0RGF0YShwYXJlbnRPdXRwdXREYXRhID8gKnBhcmVudE91dHB1dERhdGEgOiBf
X251bGwpOyB9IGVsc2UgZmlyc3RJbnN0YW5jZSA9IDA7IGlzQnVpbHRJbiA9IDA7IH0gd2hpbGUo
MCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgaW5wdXREYXRhLT5hZGRG
aWVsZCh0aGlzLCAieCIsICZ0aGlzLT54KTsgdGhpcy0+eC5zZXRWYWx1ZSAoMC4wKTsgdGhpcy0+
eC5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAo
Zmlyc3RJbnN0YW5jZSkgaW5wdXREYXRhLT5hZGRGaWVsZCh0aGlzLCAieSIsICZ0aGlzLT55KTsg
dGhpcy0+eS5zZXRWYWx1ZSAoMC4wKTsgdGhpcy0+eS5zZXRDb250YWluZXIodGhpcyk7IH0gd2hp
bGUoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgaW5wdXREYXRhLT5h
ZGRGaWVsZCh0aGlzLCAieiIsICZ0aGlzLT56KTsgdGhpcy0+ei5zZXRWYWx1ZSAoMC4wKTsgdGhp
cy0+ei5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBp
ZiAoZmlyc3RJbnN0YW5jZSkgb3V0cHV0RGF0YS0+YWRkT3V0cHV0KHRoaXMsICJ2ZWN0b3IiLCAm
dGhpcy0+dmVjdG9yLCBTb01GVmVjM2Y6OmdldENsYXNzVHlwZUlkKCkpOyB0aGlzLT52ZWN0b3Iu
c2V0Q29udGFpbmVyKHRoaXMpOyB9IHdoaWxlKDApOwogICAgaXNCdWlsdEluID0gMTsKfQoKdm9p
ZApTb0NvbXBvc2VWZWMzZjo6ZXZhbHVhdGUoKQp7CiAgICBpbnQgbnggPSB4LmdldE51bSgpOwog
ICAgaW50IG55ID0geS5nZXROdW0oKTsKICAgIGludCBueiA9IHouZ2V0TnVtKCk7CiAgICBpbnQg
bm91dD1tYXgobngsbnksbnopOwogICAgZG8geyBpZiAodmVjdG9yLmlzRW5hYmxlZCgpKSB7IGZv
ciAoaW50IF9lbmdfb3V0X2kgPSAwOyBfZW5nX291dF9pIDwgdmVjdG9yLmdldE51bUNvbm5lY3Rp
b25zKCk7IF9lbmdfb3V0X2krKykgeyBTb01GVmVjM2YgKl9lbmdfb3V0X3RlbXAgPSAoU29NRlZl
YzNmICopIHZlY3RvcltfZW5nX291dF9pXTsgaWYgKCFfZW5nX291dF90ZW1wLT5pc1JlYWRPbmx5
KCkpIHsgX2VuZ19vdXRfdGVtcC0+c2V0TnVtKG5vdXQpOyB9IH0gfSB9IHdoaWxlKDApOwogICAg
Zm9yIChpbnQgaT0wOyBpPG5vdXQ7IGkrKykgewogICAgICAgIGZsb2F0IHZ4ID0geFtjbGFtcChp
LG54KV07CiAgICAgICAgZmxvYXQgdnkgPSB5W2NsYW1wKGksbnkpXTsKICAgICAgICBmbG9hdCB2
eiA9IHpbY2xhbXAoaSxueildOwogICAgICAgIGRvIHsgaWYgKHZlY3Rvci5pc0VuYWJsZWQoKSkg
eyBmb3IgKGludCBfZW5nX291dF9pID0gMDsgX2VuZ19vdXRfaSA8IHZlY3Rvci5nZXROdW1Db25u
ZWN0aW9ucygpOyBfZW5nX291dF9pKyspIHsgU29NRlZlYzNmICpfZW5nX291dF90ZW1wID0gKFNv
TUZWZWMzZiAqKSB2ZWN0b3JbX2VuZ19vdXRfaV07IGlmICghX2VuZ19vdXRfdGVtcC0+aXNSZWFk
T25seSgpKSB7IF9lbmdfb3V0X3RlbXAtPnNldDFWYWx1ZShpLCB2eCwgdnksIHZ6KTsgfSB9IH0g
fSB3aGlsZSgwKTsKICAgIH0KfQoKCgoKCgpTb1R5cGUgU29Db21wb3NlVmVjNGY6OmNsYXNzVHlw
ZUlkOyBTYkJvb2wgU29Db21wb3NlVmVjNGY6OmZpcnN0SW5zdGFuY2U9MTsgU29FbmdpbmVPdXRw
dXREYXRhICpTb0NvbXBvc2VWZWM0Zjo6b3V0cHV0RGF0YTsgU29GaWVsZERhdGEgKiBTb0NvbXBv
c2VWZWM0Zjo6aW5wdXREYXRhOyBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKipTb0NvbXBvc2VW
ZWM0Zjo6cGFyZW50T3V0cHV0RGF0YTsgY29uc3QgU29GaWVsZERhdGEgKiogU29Db21wb3NlVmVj
NGY6OnBhcmVudElucHV0RGF0YTsgU29UeXBlIFNvQ29tcG9zZVZlYzRmOjpnZXRUeXBlSWQoKSBj
b25zdCB7IHJldHVybiBjbGFzc1R5cGVJZDsgfSBjb25zdCBTb0ZpZWxkRGF0YSAqIFNvQ29tcG9z
ZVZlYzRmOjpnZXRGaWVsZERhdGEoKSBjb25zdCB7IHJldHVybiBpbnB1dERhdGE7IH0gY29uc3Qg
U29FbmdpbmVPdXRwdXREYXRhICogU29Db21wb3NlVmVjNGY6OmdldE91dHB1dERhdGEoKSBjb25z
dCB7IHJldHVybiBvdXRwdXREYXRhOyB9IHZvaWQgKiBTb0NvbXBvc2VWZWM0Zjo6Y3JlYXRlSW5z
dGFuY2UoKSB7IHJldHVybiAodm9pZCAqKShuZXcgU29Db21wb3NlVmVjNGYpOyB9OyBTb0NvbXBv
c2VWZWM0Zjo6flNvQ29tcG9zZVZlYzRmKCkgeyB9OwoKU29Db21wb3NlVmVjNGY6OlNvQ29tcG9z
ZVZlYzRmKCkKewogICAgZG8geyB3aGlsZSgwKTsgaWYgKGlucHV0RGF0YSA9PSBfX251bGwpIHsg
aW5wdXREYXRhID0gbmV3IFNvRmllbGREYXRhKHBhcmVudElucHV0RGF0YSA/ICpwYXJlbnRJbnB1
dERhdGEgOiBfX251bGwpOyBvdXRwdXREYXRhID0gbmV3IFNvRW5naW5lT3V0cHV0RGF0YShwYXJl
bnRPdXRwdXREYXRhID8gKnBhcmVudE91dHB1dERhdGEgOiBfX251bGwpOyB9IGVsc2UgZmlyc3RJ
bnN0YW5jZSA9IDA7IGlzQnVpbHRJbiA9IDA7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxlKDAp
OyBpZiAoZmlyc3RJbnN0YW5jZSkgaW5wdXREYXRhLT5hZGRGaWVsZCh0aGlzLCAieCIsICZ0aGlz
LT54KTsgdGhpcy0+eC5zZXRWYWx1ZSAoMC4wKTsgdGhpcy0+eC5zZXRDb250YWluZXIodGhpcyk7
IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgaW5wdXRE
YXRhLT5hZGRGaWVsZCh0aGlzLCAieSIsICZ0aGlzLT55KTsgdGhpcy0+eS5zZXRWYWx1ZSAoMC4w
KTsgdGhpcy0+eS5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxl
KDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgaW5wdXREYXRhLT5hZGRGaWVsZCh0aGlzLCAieiIsICZ0
aGlzLT56KTsgdGhpcy0+ei5zZXRWYWx1ZSAoMC4wKTsgdGhpcy0+ei5zZXRDb250YWluZXIodGhp
cyk7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgaW5w
dXREYXRhLT5hZGRGaWVsZCh0aGlzLCAidyIsICZ0aGlzLT53KTsgdGhpcy0+dy5zZXRWYWx1ZSAo
MC4wKTsgdGhpcy0+dy5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdo
aWxlKDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgb3V0cHV0RGF0YS0+YWRkT3V0cHV0KHRoaXMsICJ2
ZWN0b3IiLCAmdGhpcy0+dmVjdG9yLCBTb01GVmVjNGY6OmdldENsYXNzVHlwZUlkKCkpOyB0aGlz
LT52ZWN0b3Iuc2V0Q29udGFpbmVyKHRoaXMpOyB9IHdoaWxlKDApOwogICAgaXNCdWlsdEluID0g
MTsKfQoKdm9pZApTb0NvbXBvc2VWZWM0Zjo6ZXZhbHVhdGUoKQp7CiAgICBpbnQgbnggPSB4Lmdl
dE51bSgpOwogICAgaW50IG55ID0geS5nZXROdW0oKTsKICAgIGludCBueiA9IHouZ2V0TnVtKCk7
CiAgICBpbnQgbncgPSB3LmdldE51bSgpOwogICAgaW50IG5vdXQ9bWF4KG54LG55LG56LG53KTsK
ICAgIGRvIHsgaWYgKHZlY3Rvci5pc0VuYWJsZWQoKSkgeyBmb3IgKGludCBfZW5nX291dF9pID0g
MDsgX2VuZ19vdXRfaSA8IHZlY3Rvci5nZXROdW1Db25uZWN0aW9ucygpOyBfZW5nX291dF9pKysp
IHsgU29NRlZlYzRmICpfZW5nX291dF90ZW1wID0gKFNvTUZWZWM0ZiAqKSB2ZWN0b3JbX2VuZ19v
dXRfaV07IGlmICghX2VuZ19vdXRfdGVtcC0+aXNSZWFkT25seSgpKSB7IF9lbmdfb3V0X3RlbXAt
PnNldE51bShub3V0KTsgfSB9IH0gfSB3aGlsZSgwKTsKICAgIGZvciAoaW50IGk9MDsgaTxub3V0
OyBpKyspIHsKICAgICAgICBmbG9hdCB2eCA9IHhbY2xhbXAoaSxueCldOwogICAgICAgIGZsb2F0
IHZ5ID0geVtjbGFtcChpLG55KV07CiAgICAgICAgZmxvYXQgdnogPSB6W2NsYW1wKGksbnopXTsK
ICAgICAgICBmbG9hdCB2dyA9IHdbY2xhbXAoaSxudyldOwogICAgICAgIGRvIHsgaWYgKHZlY3Rv
ci5pc0VuYWJsZWQoKSkgeyBmb3IgKGludCBfZW5nX291dF9pID0gMDsgX2VuZ19vdXRfaSA8IHZl
Y3Rvci5nZXROdW1Db25uZWN0aW9ucygpOyBfZW5nX291dF9pKyspIHsgU29NRlZlYzRmICpfZW5n
X291dF90ZW1wID0gKFNvTUZWZWM0ZiAqKSB2ZWN0b3JbX2VuZ19vdXRfaV07IGlmICghX2VuZ19v
dXRfdGVtcC0+aXNSZWFkT25seSgpKSB7IF9lbmdfb3V0X3RlbXAtPnNldDFWYWx1ZShpLCB2eCwg
dnksIHZ6LCB2dyk7IH0gfSB9IH0gd2hpbGUoMCk7CiAgICB9Cn0KCgoKCgoKU29UeXBlIFNvRGVj
b21wb3NlVmVjMmY6OmNsYXNzVHlwZUlkOyBTYkJvb2wgU29EZWNvbXBvc2VWZWMyZjo6Zmlyc3RJ
bnN0YW5jZT0xOyBTb0VuZ2luZU91dHB1dERhdGEgKlNvRGVjb21wb3NlVmVjMmY6Om91dHB1dERh
dGE7IFNvRmllbGREYXRhICogU29EZWNvbXBvc2VWZWMyZjo6aW5wdXREYXRhOyBjb25zdCBTb0Vu
Z2luZU91dHB1dERhdGEgKipTb0RlY29tcG9zZVZlYzJmOjpwYXJlbnRPdXRwdXREYXRhOyBjb25z
dCBTb0ZpZWxkRGF0YSAqKiBTb0RlY29tcG9zZVZlYzJmOjpwYXJlbnRJbnB1dERhdGE7IFNvVHlw
ZSBTb0RlY29tcG9zZVZlYzJmOjpnZXRUeXBlSWQoKSBjb25zdCB7IHJldHVybiBjbGFzc1R5cGVJ
ZDsgfSBjb25zdCBTb0ZpZWxkRGF0YSAqIFNvRGVjb21wb3NlVmVjMmY6OmdldEZpZWxkRGF0YSgp
IGNvbnN0IHsgcmV0dXJuIGlucHV0RGF0YTsgfSBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKiBT
b0RlY29tcG9zZVZlYzJmOjpnZXRPdXRwdXREYXRhKCkgY29uc3QgeyByZXR1cm4gb3V0cHV0RGF0
YTsgfSB2b2lkICogU29EZWNvbXBvc2VWZWMyZjo6Y3JlYXRlSW5zdGFuY2UoKSB7IHJldHVybiAo
dm9pZCAqKShuZXcgU29EZWNvbXBvc2VWZWMyZik7IH07IFNvRGVjb21wb3NlVmVjMmY6On5Tb0Rl
Y29tcG9zZVZlYzJmKCkgeyB9OwoKU29EZWNvbXBvc2VWZWMyZjo6U29EZWNvbXBvc2VWZWMyZigp
CnsKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChpbnB1dERhdGEgPT0gX19udWxsKSB7IGlucHV0RGF0
YSA9IG5ldyBTb0ZpZWxkRGF0YShwYXJlbnRJbnB1dERhdGEgPyAqcGFyZW50SW5wdXREYXRhIDog
X19udWxsKTsgb3V0cHV0RGF0YSA9IG5ldyBTb0VuZ2luZU91dHB1dERhdGEocGFyZW50T3V0cHV0
RGF0YSA/ICpwYXJlbnRPdXRwdXREYXRhIDogX19udWxsKTsgfSBlbHNlIGZpcnN0SW5zdGFuY2Ug
PSAwOyBpc0J1aWx0SW4gPSAwOyB9IHdoaWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYgKGZp
cnN0SW5zdGFuY2UpIGlucHV0RGF0YS0+YWRkRmllbGQodGhpcywgInZlY3RvciIsICZ0aGlzLT52
ZWN0b3IpOyB0aGlzLT52ZWN0b3Iuc2V0VmFsdWUgKFNiVmVjMmYoMCwwKSk7IHRoaXMtPnZlY3Rv
ci5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAo
Zmlyc3RJbnN0YW5jZSkgb3V0cHV0RGF0YS0+YWRkT3V0cHV0KHRoaXMsICJ4IiwgJnRoaXMtPngs
IFNvTUZGbG9hdDo6Z2V0Q2xhc3NUeXBlSWQoKSk7IHRoaXMtPnguc2V0Q29udGFpbmVyKHRoaXMp
OyB9IHdoaWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYgKGZpcnN0SW5zdGFuY2UpIG91dHB1
dERhdGEtPmFkZE91dHB1dCh0aGlzLCAieSIsICZ0aGlzLT55LCBTb01GRmxvYXQ6OmdldENsYXNz
VHlwZUlkKCkpOyB0aGlzLT55LnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsKICAgIGlz
QnVpbHRJbiA9IDE7Cn0KCnZvaWQKU29EZWNvbXBvc2VWZWMyZjo6ZXZhbHVhdGUoKQp7CiAgICBp
bnQgbm91dD12ZWN0b3IuZ2V0TnVtKCk7CiAgICBkbyB7IGlmICh4LmlzRW5hYmxlZCgpKSB7IGZv
ciAoaW50IF9lbmdfb3V0X2kgPSAwOyBfZW5nX291dF9pIDwgeC5nZXROdW1Db25uZWN0aW9ucygp
OyBfZW5nX291dF9pKyspIHsgU29NRkZsb2F0ICpfZW5nX291dF90ZW1wID0gKFNvTUZGbG9hdCAq
KSB4W19lbmdfb3V0X2ldOyBpZiAoIV9lbmdfb3V0X3RlbXAtPmlzUmVhZE9ubHkoKSkgeyBfZW5n
X291dF90ZW1wLT5zZXROdW0obm91dCk7IH0gfSB9IH0gd2hpbGUoMCk7CiAgICBkbyB7IGlmICh5
LmlzRW5hYmxlZCgpKSB7IGZvciAoaW50IF9lbmdfb3V0X2kgPSAwOyBfZW5nX291dF9pIDwgeS5n
ZXROdW1Db25uZWN0aW9ucygpOyBfZW5nX291dF9pKyspIHsgU29NRkZsb2F0ICpfZW5nX291dF90
ZW1wID0gKFNvTUZGbG9hdCAqKSB5W19lbmdfb3V0X2ldOyBpZiAoIV9lbmdfb3V0X3RlbXAtPmlz
UmVhZE9ubHkoKSkgeyBfZW5nX291dF90ZW1wLT5zZXROdW0obm91dCk7IH0gfSB9IH0gd2hpbGUo
MCk7CiAgICBmb3IgKGludCBpPTA7IGk8bm91dDsgaSsrKSB7CiAgICAgICAgZG8geyBpZiAoeC5p
c0VuYWJsZWQoKSkgeyBmb3IgKGludCBfZW5nX291dF9pID0gMDsgX2VuZ19vdXRfaSA8IHguZ2V0
TnVtQ29ubmVjdGlvbnMoKTsgX2VuZ19vdXRfaSsrKSB7IFNvTUZGbG9hdCAqX2VuZ19vdXRfdGVt
cCA9IChTb01GRmxvYXQgKikgeFtfZW5nX291dF9pXTsgaWYgKCFfZW5nX291dF90ZW1wLT5pc1Jl
YWRPbmx5KCkpIHsgX2VuZ19vdXRfdGVtcC0+c2V0MVZhbHVlKGksdmVjdG9yW2ldWzBdKTsgfSB9
IH0gfSB3aGlsZSgwKTsKICAgICAgICBkbyB7IGlmICh5LmlzRW5hYmxlZCgpKSB7IGZvciAoaW50
IF9lbmdfb3V0X2kgPSAwOyBfZW5nX291dF9pIDwgeS5nZXROdW1Db25uZWN0aW9ucygpOyBfZW5n
X291dF9pKyspIHsgU29NRkZsb2F0ICpfZW5nX291dF90ZW1wID0gKFNvTUZGbG9hdCAqKSB5W19l
bmdfb3V0X2ldOyBpZiAoIV9lbmdfb3V0X3RlbXAtPmlzUmVhZE9ubHkoKSkgeyBfZW5nX291dF90
ZW1wLT5zZXQxVmFsdWUoaSx2ZWN0b3JbaV1bMV0pOyB9IH0gfSB9IHdoaWxlKDApOwogICAgfQp9
CgoKCgoKClNvVHlwZSBTb0RlY29tcG9zZVZlYzNmOjpjbGFzc1R5cGVJZDsgU2JCb29sIFNvRGVj
b21wb3NlVmVjM2Y6OmZpcnN0SW5zdGFuY2U9MTsgU29FbmdpbmVPdXRwdXREYXRhICpTb0RlY29t
cG9zZVZlYzNmOjpvdXRwdXREYXRhOyBTb0ZpZWxkRGF0YSAqIFNvRGVjb21wb3NlVmVjM2Y6Omlu
cHV0RGF0YTsgY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICoqU29EZWNvbXBvc2VWZWMzZjo6cGFy
ZW50T3V0cHV0RGF0YTsgY29uc3QgU29GaWVsZERhdGEgKiogU29EZWNvbXBvc2VWZWMzZjo6cGFy
ZW50SW5wdXREYXRhOyBTb1R5cGUgU29EZWNvbXBvc2VWZWMzZjo6Z2V0VHlwZUlkKCkgY29uc3Qg
eyByZXR1cm4gY2xhc3NUeXBlSWQ7IH0gY29uc3QgU29GaWVsZERhdGEgKiBTb0RlY29tcG9zZVZl
YzNmOjpnZXRGaWVsZERhdGEoKSBjb25zdCB7IHJldHVybiBpbnB1dERhdGE7IH0gY29uc3QgU29F
bmdpbmVPdXRwdXREYXRhICogU29EZWNvbXBvc2VWZWMzZjo6Z2V0T3V0cHV0RGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG91dHB1dERhdGE7IH0gdm9pZCAqIFNvRGVjb21wb3NlVmVjM2Y6OmNyZWF0ZUlu
c3RhbmNlKCkgeyByZXR1cm4gKHZvaWQgKikobmV3IFNvRGVjb21wb3NlVmVjM2YpOyB9OyBTb0Rl
Y29tcG9zZVZlYzNmOjp+U29EZWNvbXBvc2VWZWMzZigpIHsgfTsKClNvRGVjb21wb3NlVmVjM2Y6
OlNvRGVjb21wb3NlVmVjM2YoKQp7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoaW5wdXREYXRhID09
IF9fbnVsbCkgeyBpbnB1dERhdGEgPSBuZXcgU29GaWVsZERhdGEocGFyZW50SW5wdXREYXRhID8g
KnBhcmVudElucHV0RGF0YSA6IF9fbnVsbCk7IG91dHB1dERhdGEgPSBuZXcgU29FbmdpbmVPdXRw
dXREYXRhKHBhcmVudE91dHB1dERhdGEgPyAqcGFyZW50T3V0cHV0RGF0YSA6IF9fbnVsbCk7IH0g
ZWxzZSBmaXJzdEluc3RhbmNlID0gMDsgaXNCdWlsdEluID0gMDsgfSB3aGlsZSgwKTsKICAgIGRv
IHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFkZEZpZWxkKHRoaXMs
ICJ2ZWN0b3IiLCAmdGhpcy0+dmVjdG9yKTsgdGhpcy0+dmVjdG9yLnNldFZhbHVlIChTYlZlYzNm
KDAsMCwwKSk7IHRoaXMtPnZlY3Rvci5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAg
ICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgb3V0cHV0RGF0YS0+YWRkT3V0cHV0
KHRoaXMsICJ4IiwgJnRoaXMtPngsIFNvTUZGbG9hdDo6Z2V0Q2xhc3NUeXBlSWQoKSk7IHRoaXMt
Pnguc2V0Q29udGFpbmVyKHRoaXMpOyB9IHdoaWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYg
KGZpcnN0SW5zdGFuY2UpIG91dHB1dERhdGEtPmFkZE91dHB1dCh0aGlzLCAieSIsICZ0aGlzLT55
LCBTb01GRmxvYXQ6OmdldENsYXNzVHlwZUlkKCkpOyB0aGlzLT55LnNldENvbnRhaW5lcih0aGlz
KTsgfSB3aGlsZSgwKTsKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBvdXRw
dXREYXRhLT5hZGRPdXRwdXQodGhpcywgInoiLCAmdGhpcy0+eiwgU29NRkZsb2F0OjpnZXRDbGFz
c1R5cGVJZCgpKTsgdGhpcy0+ei5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBp
c0J1aWx0SW4gPSAxOwp9Cgp2b2lkClNvRGVjb21wb3NlVmVjM2Y6OmV2YWx1YXRlKCkKewogICAg
aW50IG5vdXQ9dmVjdG9yLmdldE51bSgpOwogICAgZG8geyBpZiAoeC5pc0VuYWJsZWQoKSkgeyBm
b3IgKGludCBfZW5nX291dF9pID0gMDsgX2VuZ19vdXRfaSA8IHguZ2V0TnVtQ29ubmVjdGlvbnMo
KTsgX2VuZ19vdXRfaSsrKSB7IFNvTUZGbG9hdCAqX2VuZ19vdXRfdGVtcCA9IChTb01GRmxvYXQg
KikgeFtfZW5nX291dF9pXTsgaWYgKCFfZW5nX291dF90ZW1wLT5pc1JlYWRPbmx5KCkpIHsgX2Vu
Z19vdXRfdGVtcC0+c2V0TnVtKG5vdXQpOyB9IH0gfSB9IHdoaWxlKDApOwogICAgZG8geyBpZiAo
eS5pc0VuYWJsZWQoKSkgeyBmb3IgKGludCBfZW5nX291dF9pID0gMDsgX2VuZ19vdXRfaSA8IHku
Z2V0TnVtQ29ubmVjdGlvbnMoKTsgX2VuZ19vdXRfaSsrKSB7IFNvTUZGbG9hdCAqX2VuZ19vdXRf
dGVtcCA9IChTb01GRmxvYXQgKikgeVtfZW5nX291dF9pXTsgaWYgKCFfZW5nX291dF90ZW1wLT5p
c1JlYWRPbmx5KCkpIHsgX2VuZ19vdXRfdGVtcC0+c2V0TnVtKG5vdXQpOyB9IH0gfSB9IHdoaWxl
KDApOwogICAgZG8geyBpZiAoei5pc0VuYWJsZWQoKSkgeyBmb3IgKGludCBfZW5nX291dF9pID0g
MDsgX2VuZ19vdXRfaSA8IHouZ2V0TnVtQ29ubmVjdGlvbnMoKTsgX2VuZ19vdXRfaSsrKSB7IFNv
TUZGbG9hdCAqX2VuZ19vdXRfdGVtcCA9IChTb01GRmxvYXQgKikgeltfZW5nX291dF9pXTsgaWYg
KCFfZW5nX291dF90ZW1wLT5pc1JlYWRPbmx5KCkpIHsgX2VuZ19vdXRfdGVtcC0+c2V0TnVtKG5v
dXQpOyB9IH0gfSB9IHdoaWxlKDApOwogICAgZm9yIChpbnQgaT0wOyBpPG5vdXQ7IGkrKykgewog
ICAgICAgIGRvIHsgaWYgKHguaXNFbmFibGVkKCkpIHsgZm9yIChpbnQgX2VuZ19vdXRfaSA9IDA7
IF9lbmdfb3V0X2kgPCB4LmdldE51bUNvbm5lY3Rpb25zKCk7IF9lbmdfb3V0X2krKykgeyBTb01G
RmxvYXQgKl9lbmdfb3V0X3RlbXAgPSAoU29NRkZsb2F0ICopIHhbX2VuZ19vdXRfaV07IGlmICgh
X2VuZ19vdXRfdGVtcC0+aXNSZWFkT25seSgpKSB7IF9lbmdfb3V0X3RlbXAtPnNldDFWYWx1ZShp
LHZlY3RvcltpXVswXSk7IH0gfSB9IH0gd2hpbGUoMCk7CiAgICAgICAgZG8geyBpZiAoeS5pc0Vu
YWJsZWQoKSkgeyBmb3IgKGludCBfZW5nX291dF9pID0gMDsgX2VuZ19vdXRfaSA8IHkuZ2V0TnVt
Q29ubmVjdGlvbnMoKTsgX2VuZ19vdXRfaSsrKSB7IFNvTUZGbG9hdCAqX2VuZ19vdXRfdGVtcCA9
IChTb01GRmxvYXQgKikgeVtfZW5nX291dF9pXTsgaWYgKCFfZW5nX291dF90ZW1wLT5pc1JlYWRP
bmx5KCkpIHsgX2VuZ19vdXRfdGVtcC0+c2V0MVZhbHVlKGksdmVjdG9yW2ldWzFdKTsgfSB9IH0g
fSB3aGlsZSgwKTsKICAgICAgICBkbyB7IGlmICh6LmlzRW5hYmxlZCgpKSB7IGZvciAoaW50IF9l
bmdfb3V0X2kgPSAwOyBfZW5nX291dF9pIDwgei5nZXROdW1Db25uZWN0aW9ucygpOyBfZW5nX291
dF9pKyspIHsgU29NRkZsb2F0ICpfZW5nX291dF90ZW1wID0gKFNvTUZGbG9hdCAqKSB6W19lbmdf
b3V0X2ldOyBpZiAoIV9lbmdfb3V0X3RlbXAtPmlzUmVhZE9ubHkoKSkgeyBfZW5nX291dF90ZW1w
LT5zZXQxVmFsdWUoaSx2ZWN0b3JbaV1bMl0pOyB9IH0gfSB9IHdoaWxlKDApOwogICAgfQp9CgoK
CgoKClNvVHlwZSBTb0RlY29tcG9zZVZlYzRmOjpjbGFzc1R5cGVJZDsgU2JCb29sIFNvRGVjb21w
b3NlVmVjNGY6OmZpcnN0SW5zdGFuY2U9MTsgU29FbmdpbmVPdXRwdXREYXRhICpTb0RlY29tcG9z
ZVZlYzRmOjpvdXRwdXREYXRhOyBTb0ZpZWxkRGF0YSAqIFNvRGVjb21wb3NlVmVjNGY6OmlucHV0
RGF0YTsgY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICoqU29EZWNvbXBvc2VWZWM0Zjo6cGFyZW50
T3V0cHV0RGF0YTsgY29uc3QgU29GaWVsZERhdGEgKiogU29EZWNvbXBvc2VWZWM0Zjo6cGFyZW50
SW5wdXREYXRhOyBTb1R5cGUgU29EZWNvbXBvc2VWZWM0Zjo6Z2V0VHlwZUlkKCkgY29uc3QgeyBy
ZXR1cm4gY2xhc3NUeXBlSWQ7IH0gY29uc3QgU29GaWVsZERhdGEgKiBTb0RlY29tcG9zZVZlYzRm
OjpnZXRGaWVsZERhdGEoKSBjb25zdCB7IHJldHVybiBpbnB1dERhdGE7IH0gY29uc3QgU29Fbmdp
bmVPdXRwdXREYXRhICogU29EZWNvbXBvc2VWZWM0Zjo6Z2V0T3V0cHV0RGF0YSgpIGNvbnN0IHsg
cmV0dXJuIG91dHB1dERhdGE7IH0gdm9pZCAqIFNvRGVjb21wb3NlVmVjNGY6OmNyZWF0ZUluc3Rh
bmNlKCkgeyByZXR1cm4gKHZvaWQgKikobmV3IFNvRGVjb21wb3NlVmVjNGYpOyB9OyBTb0RlY29t
cG9zZVZlYzRmOjp+U29EZWNvbXBvc2VWZWM0ZigpIHsgfTsKClNvRGVjb21wb3NlVmVjNGY6OlNv
RGVjb21wb3NlVmVjNGYoKQp7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoaW5wdXREYXRhID09IF9f
bnVsbCkgeyBpbnB1dERhdGEgPSBuZXcgU29GaWVsZERhdGEocGFyZW50SW5wdXREYXRhID8gKnBh
cmVudElucHV0RGF0YSA6IF9fbnVsbCk7IG91dHB1dERhdGEgPSBuZXcgU29FbmdpbmVPdXRwdXRE
YXRhKHBhcmVudE91dHB1dERhdGEgPyAqcGFyZW50T3V0cHV0RGF0YSA6IF9fbnVsbCk7IH0gZWxz
ZSBmaXJzdEluc3RhbmNlID0gMDsgaXNCdWlsdEluID0gMDsgfSB3aGlsZSgwKTsKICAgIGRvIHsg
d2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFkZEZpZWxkKHRoaXMsICJ2
ZWN0b3IiLCAmdGhpcy0+dmVjdG9yKTsgdGhpcy0+dmVjdG9yLnNldFZhbHVlIChTYlZlYzRmKDAs
MCwwLDApKTsgdGhpcy0+dmVjdG9yLnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsKICAg
IGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBvdXRwdXREYXRhLT5hZGRPdXRwdXQo
dGhpcywgIngiLCAmdGhpcy0+eCwgU29NRkZsb2F0OjpnZXRDbGFzc1R5cGVJZCgpKTsgdGhpcy0+
eC5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAo
Zmlyc3RJbnN0YW5jZSkgb3V0cHV0RGF0YS0+YWRkT3V0cHV0KHRoaXMsICJ5IiwgJnRoaXMtPnks
IFNvTUZGbG9hdDo6Z2V0Q2xhc3NUeXBlSWQoKSk7IHRoaXMtPnkuc2V0Q29udGFpbmVyKHRoaXMp
OyB9IHdoaWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYgKGZpcnN0SW5zdGFuY2UpIG91dHB1
dERhdGEtPmFkZE91dHB1dCh0aGlzLCAieiIsICZ0aGlzLT56LCBTb01GRmxvYXQ6OmdldENsYXNz
VHlwZUlkKCkpOyB0aGlzLT56LnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsKICAgIGRv
IHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBvdXRwdXREYXRhLT5hZGRPdXRwdXQodGhp
cywgInciLCAmdGhpcy0+dywgU29NRkZsb2F0OjpnZXRDbGFzc1R5cGVJZCgpKTsgdGhpcy0+dy5z
ZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBpc0J1aWx0SW4gPSAxOwp9Cgp2b2lk
ClNvRGVjb21wb3NlVmVjNGY6OmV2YWx1YXRlKCkKewogICAgaW50IG5vdXQ9dmVjdG9yLmdldE51
bSgpOwogICAgZG8geyBpZiAoeC5pc0VuYWJsZWQoKSkgeyBmb3IgKGludCBfZW5nX291dF9pID0g
MDsgX2VuZ19vdXRfaSA8IHguZ2V0TnVtQ29ubmVjdGlvbnMoKTsgX2VuZ19vdXRfaSsrKSB7IFNv
TUZGbG9hdCAqX2VuZ19vdXRfdGVtcCA9IChTb01GRmxvYXQgKikgeFtfZW5nX291dF9pXTsgaWYg
KCFfZW5nX291dF90ZW1wLT5pc1JlYWRPbmx5KCkpIHsgX2VuZ19vdXRfdGVtcC0+c2V0TnVtKG5v
dXQpOyB9IH0gfSB9IHdoaWxlKDApOwogICAgZG8geyBpZiAoeS5pc0VuYWJsZWQoKSkgeyBmb3Ig
KGludCBfZW5nX291dF9pID0gMDsgX2VuZ19vdXRfaSA8IHkuZ2V0TnVtQ29ubmVjdGlvbnMoKTsg
X2VuZ19vdXRfaSsrKSB7IFNvTUZGbG9hdCAqX2VuZ19vdXRfdGVtcCA9IChTb01GRmxvYXQgKikg
eVtfZW5nX291dF9pXTsgaWYgKCFfZW5nX291dF90ZW1wLT5pc1JlYWRPbmx5KCkpIHsgX2VuZ19v
dXRfdGVtcC0+c2V0TnVtKG5vdXQpOyB9IH0gfSB9IHdoaWxlKDApOwogICAgZG8geyBpZiAoei5p
c0VuYWJsZWQoKSkgeyBmb3IgKGludCBfZW5nX291dF9pID0gMDsgX2VuZ19vdXRfaSA8IHouZ2V0
TnVtQ29ubmVjdGlvbnMoKTsgX2VuZ19vdXRfaSsrKSB7IFNvTUZGbG9hdCAqX2VuZ19vdXRfdGVt
cCA9IChTb01GRmxvYXQgKikgeltfZW5nX291dF9pXTsgaWYgKCFfZW5nX291dF90ZW1wLT5pc1Jl
YWRPbmx5KCkpIHsgX2VuZ19vdXRfdGVtcC0+c2V0TnVtKG5vdXQpOyB9IH0gfSB9IHdoaWxlKDAp
OwogICAgZG8geyBpZiAody5pc0VuYWJsZWQoKSkgeyBmb3IgKGludCBfZW5nX291dF9pID0gMDsg
X2VuZ19vdXRfaSA8IHcuZ2V0TnVtQ29ubmVjdGlvbnMoKTsgX2VuZ19vdXRfaSsrKSB7IFNvTUZG
bG9hdCAqX2VuZ19vdXRfdGVtcCA9IChTb01GRmxvYXQgKikgd1tfZW5nX291dF9pXTsgaWYgKCFf
ZW5nX291dF90ZW1wLT5pc1JlYWRPbmx5KCkpIHsgX2VuZ19vdXRfdGVtcC0+c2V0TnVtKG5vdXQp
OyB9IH0gfSB9IHdoaWxlKDApOwogICAgZm9yIChpbnQgaT0wOyBpPG5vdXQ7IGkrKykgewogICAg
ICAgIGRvIHsgaWYgKHguaXNFbmFibGVkKCkpIHsgZm9yIChpbnQgX2VuZ19vdXRfaSA9IDA7IF9l
bmdfb3V0X2kgPCB4LmdldE51bUNvbm5lY3Rpb25zKCk7IF9lbmdfb3V0X2krKykgeyBTb01GRmxv
YXQgKl9lbmdfb3V0X3RlbXAgPSAoU29NRkZsb2F0ICopIHhbX2VuZ19vdXRfaV07IGlmICghX2Vu
Z19vdXRfdGVtcC0+aXNSZWFkT25seSgpKSB7IF9lbmdfb3V0X3RlbXAtPnNldDFWYWx1ZShpLHZl
Y3RvcltpXVswXSk7IH0gfSB9IH0gd2hpbGUoMCk7CiAgICAgICAgZG8geyBpZiAoeS5pc0VuYWJs
ZWQoKSkgeyBmb3IgKGludCBfZW5nX291dF9pID0gMDsgX2VuZ19vdXRfaSA8IHkuZ2V0TnVtQ29u
bmVjdGlvbnMoKTsgX2VuZ19vdXRfaSsrKSB7IFNvTUZGbG9hdCAqX2VuZ19vdXRfdGVtcCA9IChT
b01GRmxvYXQgKikgeVtfZW5nX291dF9pXTsgaWYgKCFfZW5nX291dF90ZW1wLT5pc1JlYWRPbmx5
KCkpIHsgX2VuZ19vdXRfdGVtcC0+c2V0MVZhbHVlKGksdmVjdG9yW2ldWzFdKTsgfSB9IH0gfSB3
aGlsZSgwKTsKICAgICAgICBkbyB7IGlmICh6LmlzRW5hYmxlZCgpKSB7IGZvciAoaW50IF9lbmdf
b3V0X2kgPSAwOyBfZW5nX291dF9pIDwgei5nZXROdW1Db25uZWN0aW9ucygpOyBfZW5nX291dF9p
KyspIHsgU29NRkZsb2F0ICpfZW5nX291dF90ZW1wID0gKFNvTUZGbG9hdCAqKSB6W19lbmdfb3V0
X2ldOyBpZiAoIV9lbmdfb3V0X3RlbXAtPmlzUmVhZE9ubHkoKSkgeyBfZW5nX291dF90ZW1wLT5z
ZXQxVmFsdWUoaSx2ZWN0b3JbaV1bMl0pOyB9IH0gfSB9IHdoaWxlKDApOwogICAgICAgIGRvIHsg
aWYgKHcuaXNFbmFibGVkKCkpIHsgZm9yIChpbnQgX2VuZ19vdXRfaSA9IDA7IF9lbmdfb3V0X2kg
PCB3LmdldE51bUNvbm5lY3Rpb25zKCk7IF9lbmdfb3V0X2krKykgeyBTb01GRmxvYXQgKl9lbmdf
b3V0X3RlbXAgPSAoU29NRkZsb2F0ICopIHdbX2VuZ19vdXRfaV07IGlmICghX2VuZ19vdXRfdGVt
cC0+aXNSZWFkT25seSgpKSB7IF9lbmdfb3V0X3RlbXAtPnNldDFWYWx1ZShpLHZlY3RvcltpXVsz
XSk7IH0gfSB9IH0gd2hpbGUoMCk7CiAgICB9Cn0KCgoKCgoKU29UeXBlIFNvQ29tcG9zZVJvdGF0
aW9uOjpjbGFzc1R5cGVJZDsgU2JCb29sIFNvQ29tcG9zZVJvdGF0aW9uOjpmaXJzdEluc3RhbmNl
PTE7IFNvRW5naW5lT3V0cHV0RGF0YSAqU29Db21wb3NlUm90YXRpb246Om91dHB1dERhdGE7IFNv
RmllbGREYXRhICogU29Db21wb3NlUm90YXRpb246OmlucHV0RGF0YTsgY29uc3QgU29FbmdpbmVP
dXRwdXREYXRhICoqU29Db21wb3NlUm90YXRpb246OnBhcmVudE91dHB1dERhdGE7IGNvbnN0IFNv
RmllbGREYXRhICoqIFNvQ29tcG9zZVJvdGF0aW9uOjpwYXJlbnRJbnB1dERhdGE7IFNvVHlwZSBT
b0NvbXBvc2VSb3RhdGlvbjo6Z2V0VHlwZUlkKCkgY29uc3QgeyByZXR1cm4gY2xhc3NUeXBlSWQ7
IH0gY29uc3QgU29GaWVsZERhdGEgKiBTb0NvbXBvc2VSb3RhdGlvbjo6Z2V0RmllbGREYXRhKCkg
Y29uc3QgeyByZXR1cm4gaW5wdXREYXRhOyB9IGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqIFNv
Q29tcG9zZVJvdGF0aW9uOjpnZXRPdXRwdXREYXRhKCkgY29uc3QgeyByZXR1cm4gb3V0cHV0RGF0
YTsgfSB2b2lkICogU29Db21wb3NlUm90YXRpb246OmNyZWF0ZUluc3RhbmNlKCkgeyByZXR1cm4g
KHZvaWQgKikobmV3IFNvQ29tcG9zZVJvdGF0aW9uKTsgfTsgU29Db21wb3NlUm90YXRpb246On5T
b0NvbXBvc2VSb3RhdGlvbigpIHsgfTsKClNvQ29tcG9zZVJvdGF0aW9uOjpTb0NvbXBvc2VSb3Rh
dGlvbigpCnsKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChpbnB1dERhdGEgPT0gX19udWxsKSB7IGlu
cHV0RGF0YSA9IG5ldyBTb0ZpZWxkRGF0YShwYXJlbnRJbnB1dERhdGEgPyAqcGFyZW50SW5wdXRE
YXRhIDogX19udWxsKTsgb3V0cHV0RGF0YSA9IG5ldyBTb0VuZ2luZU91dHB1dERhdGEocGFyZW50
T3V0cHV0RGF0YSA/ICpwYXJlbnRPdXRwdXREYXRhIDogX19udWxsKTsgfSBlbHNlIGZpcnN0SW5z
dGFuY2UgPSAwOyBpc0J1aWx0SW4gPSAwOyB9IHdoaWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsg
aWYgKGZpcnN0SW5zdGFuY2UpIGlucHV0RGF0YS0+YWRkRmllbGQodGhpcywgImF4aXMiLCAmdGhp
cy0+YXhpcyk7IHRoaXMtPmF4aXMuc2V0VmFsdWUgKFNiVmVjM2YoMCwwLDEpKTsgdGhpcy0+YXhp
cy5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAo
Zmlyc3RJbnN0YW5jZSkgaW5wdXREYXRhLT5hZGRGaWVsZCh0aGlzLCAiYW5nbGUiLCAmdGhpcy0+
YW5nbGUpOyB0aGlzLT5hbmdsZS5zZXRWYWx1ZSAoMC4wKTsgdGhpcy0+YW5nbGUuc2V0Q29udGFp
bmVyKHRoaXMpOyB9IHdoaWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYgKGZpcnN0SW5zdGFu
Y2UpIG91dHB1dERhdGEtPmFkZE91dHB1dCh0aGlzLCAicm90YXRpb24iLCAmdGhpcy0+cm90YXRp
b24sIFNvTUZSb3RhdGlvbjo6Z2V0Q2xhc3NUeXBlSWQoKSk7IHRoaXMtPnJvdGF0aW9uLnNldENv
bnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsKICAgIGlzQnVpbHRJbiA9IDE7Cn0KCnZvaWQKU29D
b21wb3NlUm90YXRpb246OmV2YWx1YXRlKCkKewogICAgaW50IG5heGlzID0gYXhpcy5nZXROdW0o
KTsKICAgIGludCBuYW5nbGUgPSBhbmdsZS5nZXROdW0oKTsKICAgIGludCBub3V0PW1heChuYXhp
cyxuYW5nbGUpOwogICAgZG8geyBpZiAocm90YXRpb24uaXNFbmFibGVkKCkpIHsgZm9yIChpbnQg
X2VuZ19vdXRfaSA9IDA7IF9lbmdfb3V0X2kgPCByb3RhdGlvbi5nZXROdW1Db25uZWN0aW9ucygp
OyBfZW5nX291dF9pKyspIHsgU29NRlJvdGF0aW9uICpfZW5nX291dF90ZW1wID0gKFNvTUZSb3Rh
dGlvbiAqKSByb3RhdGlvbltfZW5nX291dF9pXTsgaWYgKCFfZW5nX291dF90ZW1wLT5pc1JlYWRP
bmx5KCkpIHsgX2VuZ19vdXRfdGVtcC0+c2V0TnVtKG5vdXQpOyB9IH0gfSB9IHdoaWxlKDApOwog
ICAgZm9yIChpbnQgaT0wOyBpPG5vdXQ7IGkrKykgewogICAgICAgIFNiVmVjM2YgdmF4aXMgPSBh
eGlzW2NsYW1wKGksbmF4aXMpXTsKICAgICAgICBmbG9hdCB2YW5nbGUgPSBhbmdsZVtjbGFtcChp
LG5hbmdsZSldOwogICAgICAgIGRvIHsgaWYgKHJvdGF0aW9uLmlzRW5hYmxlZCgpKSB7IGZvciAo
aW50IF9lbmdfb3V0X2kgPSAwOyBfZW5nX291dF9pIDwgcm90YXRpb24uZ2V0TnVtQ29ubmVjdGlv
bnMoKTsgX2VuZ19vdXRfaSsrKSB7IFNvTUZSb3RhdGlvbiAqX2VuZ19vdXRfdGVtcCA9IChTb01G
Um90YXRpb24gKikgcm90YXRpb25bX2VuZ19vdXRfaV07IGlmICghX2VuZ19vdXRfdGVtcC0+aXNS
ZWFkT25seSgpKSB7IF9lbmdfb3V0X3RlbXAtPnNldDFWYWx1ZShpLCB2YXhpcywgdmFuZ2xlKTsg
fSB9IH0gfSB3aGlsZSgwKTsKICAgIH0KfQoKCgoKCgpTb1R5cGUgU29Db21wb3NlUm90YXRpb25G
cm9tVG86OmNsYXNzVHlwZUlkOyBTYkJvb2wgU29Db21wb3NlUm90YXRpb25Gcm9tVG86OmZpcnN0
SW5zdGFuY2U9MTsgU29FbmdpbmVPdXRwdXREYXRhICpTb0NvbXBvc2VSb3RhdGlvbkZyb21Ubzo6
b3V0cHV0RGF0YTsgU29GaWVsZERhdGEgKiBTb0NvbXBvc2VSb3RhdGlvbkZyb21Ubzo6aW5wdXRE
YXRhOyBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKipTb0NvbXBvc2VSb3RhdGlvbkZyb21Ubzo6
cGFyZW50T3V0cHV0RGF0YTsgY29uc3QgU29GaWVsZERhdGEgKiogU29Db21wb3NlUm90YXRpb25G
cm9tVG86OnBhcmVudElucHV0RGF0YTsgU29UeXBlIFNvQ29tcG9zZVJvdGF0aW9uRnJvbVRvOjpn
ZXRUeXBlSWQoKSBjb25zdCB7IHJldHVybiBjbGFzc1R5cGVJZDsgfSBjb25zdCBTb0ZpZWxkRGF0
YSAqIFNvQ29tcG9zZVJvdGF0aW9uRnJvbVRvOjpnZXRGaWVsZERhdGEoKSBjb25zdCB7IHJldHVy
biBpbnB1dERhdGE7IH0gY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICogU29Db21wb3NlUm90YXRp
b25Gcm9tVG86OmdldE91dHB1dERhdGEoKSBjb25zdCB7IHJldHVybiBvdXRwdXREYXRhOyB9IHZv
aWQgKiBTb0NvbXBvc2VSb3RhdGlvbkZyb21Ubzo6Y3JlYXRlSW5zdGFuY2UoKSB7IHJldHVybiAo
dm9pZCAqKShuZXcgU29Db21wb3NlUm90YXRpb25Gcm9tVG8pOyB9OyBTb0NvbXBvc2VSb3RhdGlv
bkZyb21Ubzo6flNvQ29tcG9zZVJvdGF0aW9uRnJvbVRvKCkgeyB9OwoKU29Db21wb3NlUm90YXRp
b25Gcm9tVG86OlNvQ29tcG9zZVJvdGF0aW9uRnJvbVRvKCkKewogICAgZG8geyB3aGlsZSgwKTsg
aWYgKGlucHV0RGF0YSA9PSBfX251bGwpIHsgaW5wdXREYXRhID0gbmV3IFNvRmllbGREYXRhKHBh
cmVudElucHV0RGF0YSA/ICpwYXJlbnRJbnB1dERhdGEgOiBfX251bGwpOyBvdXRwdXREYXRhID0g
bmV3IFNvRW5naW5lT3V0cHV0RGF0YShwYXJlbnRPdXRwdXREYXRhID8gKnBhcmVudE91dHB1dERh
dGEgOiBfX251bGwpOyB9IGVsc2UgZmlyc3RJbnN0YW5jZSA9IDA7IGlzQnVpbHRJbiA9IDA7IH0g
d2hpbGUoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgaW5wdXREYXRh
LT5hZGRGaWVsZCh0aGlzLCAiZnJvbSIsICZ0aGlzLT5mcm9tKTsgdGhpcy0+ZnJvbS5zZXRWYWx1
ZSAoU2JWZWMzZigwLDAsMSkpOyB0aGlzLT5mcm9tLnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGls
ZSgwKTsKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFk
ZEZpZWxkKHRoaXMsICJ0byIsICZ0aGlzLT50byk7IHRoaXMtPnRvLnNldFZhbHVlIChTYlZlYzNm
KDAsMCwxKSk7IHRoaXMtPnRvLnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsKICAgIGRv
IHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBvdXRwdXREYXRhLT5hZGRPdXRwdXQodGhp
cywgInJvdGF0aW9uIiwgJnRoaXMtPnJvdGF0aW9uLCBTb01GUm90YXRpb246OmdldENsYXNzVHlw
ZUlkKCkpOyB0aGlzLT5yb3RhdGlvbi5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAg
ICBpc0J1aWx0SW4gPSAxOwp9Cgp2b2lkClNvQ29tcG9zZVJvdGF0aW9uRnJvbVRvOjpldmFsdWF0
ZSgpCnsKICAgIGludCBuZnJvbSA9IGZyb20uZ2V0TnVtKCk7CiAgICBpbnQgbnRvID0gdG8uZ2V0
TnVtKCk7CiAgICBpbnQgbm91dD1tYXgobmZyb20sbnRvKTsKICAgIGRvIHsgaWYgKHJvdGF0aW9u
LmlzRW5hYmxlZCgpKSB7IGZvciAoaW50IF9lbmdfb3V0X2kgPSAwOyBfZW5nX291dF9pIDwgcm90
YXRpb24uZ2V0TnVtQ29ubmVjdGlvbnMoKTsgX2VuZ19vdXRfaSsrKSB7IFNvTUZSb3RhdGlvbiAq
X2VuZ19vdXRfdGVtcCA9IChTb01GUm90YXRpb24gKikgcm90YXRpb25bX2VuZ19vdXRfaV07IGlm
ICghX2VuZ19vdXRfdGVtcC0+aXNSZWFkT25seSgpKSB7IF9lbmdfb3V0X3RlbXAtPnNldE51bShu
b3V0KTsgfSB9IH0gfSB3aGlsZSgwKTsKICAgIGZvciAoaW50IGk9MDsgaTxub3V0OyBpKyspIHsK
ICAgICAgICBTYlZlYzNmIHZmcm9tID0gZnJvbVtjbGFtcChpLG5mcm9tKV07CiAgICAgICAgU2JW
ZWMzZiB2dG8gPSB0b1tjbGFtcChpLG50byldOwogICAgICAgIGRvIHsgaWYgKHJvdGF0aW9uLmlz
RW5hYmxlZCgpKSB7IGZvciAoaW50IF9lbmdfb3V0X2kgPSAwOyBfZW5nX291dF9pIDwgcm90YXRp
b24uZ2V0TnVtQ29ubmVjdGlvbnMoKTsgX2VuZ19vdXRfaSsrKSB7IFNvTUZSb3RhdGlvbiAqX2Vu
Z19vdXRfdGVtcCA9IChTb01GUm90YXRpb24gKikgcm90YXRpb25bX2VuZ19vdXRfaV07IGlmICgh
X2VuZ19vdXRfdGVtcC0+aXNSZWFkT25seSgpKSB7IF9lbmdfb3V0X3RlbXAtPnNldDFWYWx1ZShp
LCBTYlJvdGF0aW9uKHZmcm9tLCB2dG8pKTsgfSB9IH0gfSB3aGlsZSgwKTsKICAgIH0KfQoKCgoK
CgpTb1R5cGUgU29EZWNvbXBvc2VSb3RhdGlvbjo6Y2xhc3NUeXBlSWQ7IFNiQm9vbCBTb0RlY29t
cG9zZVJvdGF0aW9uOjpmaXJzdEluc3RhbmNlPTE7IFNvRW5naW5lT3V0cHV0RGF0YSAqU29EZWNv
bXBvc2VSb3RhdGlvbjo6b3V0cHV0RGF0YTsgU29GaWVsZERhdGEgKiBTb0RlY29tcG9zZVJvdGF0
aW9uOjppbnB1dERhdGE7IGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqKlNvRGVjb21wb3NlUm90
YXRpb246OnBhcmVudE91dHB1dERhdGE7IGNvbnN0IFNvRmllbGREYXRhICoqIFNvRGVjb21wb3Nl
Um90YXRpb246OnBhcmVudElucHV0RGF0YTsgU29UeXBlIFNvRGVjb21wb3NlUm90YXRpb246Omdl
dFR5cGVJZCgpIGNvbnN0IHsgcmV0dXJuIGNsYXNzVHlwZUlkOyB9IGNvbnN0IFNvRmllbGREYXRh
ICogU29EZWNvbXBvc2VSb3RhdGlvbjo6Z2V0RmllbGREYXRhKCkgY29uc3QgeyByZXR1cm4gaW5w
dXREYXRhOyB9IGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqIFNvRGVjb21wb3NlUm90YXRpb246
OmdldE91dHB1dERhdGEoKSBjb25zdCB7IHJldHVybiBvdXRwdXREYXRhOyB9IHZvaWQgKiBTb0Rl
Y29tcG9zZVJvdGF0aW9uOjpjcmVhdGVJbnN0YW5jZSgpIHsgcmV0dXJuICh2b2lkICopKG5ldyBT
b0RlY29tcG9zZVJvdGF0aW9uKTsgfTsgU29EZWNvbXBvc2VSb3RhdGlvbjo6flNvRGVjb21wb3Nl
Um90YXRpb24oKSB7IH07CgpTb0RlY29tcG9zZVJvdGF0aW9uOjpTb0RlY29tcG9zZVJvdGF0aW9u
KCkKewogICAgZG8geyB3aGlsZSgwKTsgaWYgKGlucHV0RGF0YSA9PSBfX251bGwpIHsgaW5wdXRE
YXRhID0gbmV3IFNvRmllbGREYXRhKHBhcmVudElucHV0RGF0YSA/ICpwYXJlbnRJbnB1dERhdGEg
OiBfX251bGwpOyBvdXRwdXREYXRhID0gbmV3IFNvRW5naW5lT3V0cHV0RGF0YShwYXJlbnRPdXRw
dXREYXRhID8gKnBhcmVudE91dHB1dERhdGEgOiBfX251bGwpOyB9IGVsc2UgZmlyc3RJbnN0YW5j
ZSA9IDA7IGlzQnVpbHRJbiA9IDA7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAo
Zmlyc3RJbnN0YW5jZSkgaW5wdXREYXRhLT5hZGRGaWVsZCh0aGlzLCAicm90YXRpb24iLCAmdGhp
cy0+cm90YXRpb24pOyB0aGlzLT5yb3RhdGlvbi5zZXRWYWx1ZSAoU2JSb3RhdGlvbjo6aWRlbnRp
dHkoKSk7IHRoaXMtPnJvdGF0aW9uLnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsKICAg
IGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBvdXRwdXREYXRhLT5hZGRPdXRwdXQo
dGhpcywgImF4aXMiLCAmdGhpcy0+YXhpcywgU29NRlZlYzNmOjpnZXRDbGFzc1R5cGVJZCgpKTsg
dGhpcy0+YXhpcy5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxl
KDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgb3V0cHV0RGF0YS0+YWRkT3V0cHV0KHRoaXMsICJhbmds
ZSIsICZ0aGlzLT5hbmdsZSwgU29NRkZsb2F0OjpnZXRDbGFzc1R5cGVJZCgpKTsgdGhpcy0+YW5n
bGUuc2V0Q29udGFpbmVyKHRoaXMpOyB9IHdoaWxlKDApOwogICAgaXNCdWlsdEluID0gMTsKfQoK
dm9pZApTb0RlY29tcG9zZVJvdGF0aW9uOjpldmFsdWF0ZSgpCnsKICAgIGludCBub3V0PXJvdGF0
aW9uLmdldE51bSgpOwogICAgZG8geyBpZiAoYXhpcy5pc0VuYWJsZWQoKSkgeyBmb3IgKGludCBf
ZW5nX291dF9pID0gMDsgX2VuZ19vdXRfaSA8IGF4aXMuZ2V0TnVtQ29ubmVjdGlvbnMoKTsgX2Vu
Z19vdXRfaSsrKSB7IFNvTUZWZWMzZiAqX2VuZ19vdXRfdGVtcCA9IChTb01GVmVjM2YgKikgYXhp
c1tfZW5nX291dF9pXTsgaWYgKCFfZW5nX291dF90ZW1wLT5pc1JlYWRPbmx5KCkpIHsgX2VuZ19v
dXRfdGVtcC0+c2V0TnVtKG5vdXQpOyB9IH0gfSB9IHdoaWxlKDApOwogICAgZG8geyBpZiAoYW5n
bGUuaXNFbmFibGVkKCkpIHsgZm9yIChpbnQgX2VuZ19vdXRfaSA9IDA7IF9lbmdfb3V0X2kgPCBh
bmdsZS5nZXROdW1Db25uZWN0aW9ucygpOyBfZW5nX291dF9pKyspIHsgU29NRkZsb2F0ICpfZW5n
X291dF90ZW1wID0gKFNvTUZGbG9hdCAqKSBhbmdsZVtfZW5nX291dF9pXTsgaWYgKCFfZW5nX291
dF90ZW1wLT5pc1JlYWRPbmx5KCkpIHsgX2VuZ19vdXRfdGVtcC0+c2V0TnVtKG5vdXQpOyB9IH0g
fSB9IHdoaWxlKDApOwogICAgZm9yIChpbnQgaT0wOyBpPG5vdXQ7IGkrKykgewogICAgICAgIFNi
VmVjM2YgdmF4aXM7CiAgICAgICAgZmxvYXQgdmFuZ2xlOwogICAgICAgIHJvdGF0aW9uW2ldLmdl
dFZhbHVlKHZheGlzLCB2YW5nbGUpOwogICAgICAgIGRvIHsgaWYgKGF4aXMuaXNFbmFibGVkKCkp
IHsgZm9yIChpbnQgX2VuZ19vdXRfaSA9IDA7IF9lbmdfb3V0X2kgPCBheGlzLmdldE51bUNvbm5l
Y3Rpb25zKCk7IF9lbmdfb3V0X2krKykgeyBTb01GVmVjM2YgKl9lbmdfb3V0X3RlbXAgPSAoU29N
RlZlYzNmICopIGF4aXNbX2VuZ19vdXRfaV07IGlmICghX2VuZ19vdXRfdGVtcC0+aXNSZWFkT25s
eSgpKSB7IF9lbmdfb3V0X3RlbXAtPnNldDFWYWx1ZShpLHZheGlzKTsgfSB9IH0gfSB3aGlsZSgw
KTsKICAgICAgICBkbyB7IGlmIChhbmdsZS5pc0VuYWJsZWQoKSkgeyBmb3IgKGludCBfZW5nX291
dF9pID0gMDsgX2VuZ19vdXRfaSA8IGFuZ2xlLmdldE51bUNvbm5lY3Rpb25zKCk7IF9lbmdfb3V0
X2krKykgeyBTb01GRmxvYXQgKl9lbmdfb3V0X3RlbXAgPSAoU29NRkZsb2F0ICopIGFuZ2xlW19l
bmdfb3V0X2ldOyBpZiAoIV9lbmdfb3V0X3RlbXAtPmlzUmVhZE9ubHkoKSkgeyBfZW5nX291dF90
ZW1wLT5zZXQxVmFsdWUoaSx2YW5nbGUpOyB9IH0gfSB9IHdoaWxlKDApOwogICAgfQp9CgoKCgoK
ClNvVHlwZSBTb0NvbXBvc2VNYXRyaXg6OmNsYXNzVHlwZUlkOyBTYkJvb2wgU29Db21wb3NlTWF0
cml4OjpmaXJzdEluc3RhbmNlPTE7IFNvRW5naW5lT3V0cHV0RGF0YSAqU29Db21wb3NlTWF0cml4
OjpvdXRwdXREYXRhOyBTb0ZpZWxkRGF0YSAqIFNvQ29tcG9zZU1hdHJpeDo6aW5wdXREYXRhOyBj
b25zdCBTb0VuZ2luZU91dHB1dERhdGEgKipTb0NvbXBvc2VNYXRyaXg6OnBhcmVudE91dHB1dERh
dGE7IGNvbnN0IFNvRmllbGREYXRhICoqIFNvQ29tcG9zZU1hdHJpeDo6cGFyZW50SW5wdXREYXRh
OyBTb1R5cGUgU29Db21wb3NlTWF0cml4OjpnZXRUeXBlSWQoKSBjb25zdCB7IHJldHVybiBjbGFz
c1R5cGVJZDsgfSBjb25zdCBTb0ZpZWxkRGF0YSAqIFNvQ29tcG9zZU1hdHJpeDo6Z2V0RmllbGRE
YXRhKCkgY29uc3QgeyByZXR1cm4gaW5wdXREYXRhOyB9IGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0
YSAqIFNvQ29tcG9zZU1hdHJpeDo6Z2V0T3V0cHV0RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG91dHB1
dERhdGE7IH0gdm9pZCAqIFNvQ29tcG9zZU1hdHJpeDo6Y3JlYXRlSW5zdGFuY2UoKSB7IHJldHVy
biAodm9pZCAqKShuZXcgU29Db21wb3NlTWF0cml4KTsgfTsgU29Db21wb3NlTWF0cml4Ojp+U29D
b21wb3NlTWF0cml4KCkgeyB9OwoKU29Db21wb3NlTWF0cml4OjpTb0NvbXBvc2VNYXRyaXgoKQp7
CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoaW5wdXREYXRhID09IF9fbnVsbCkgeyBpbnB1dERhdGEg
PSBuZXcgU29GaWVsZERhdGEocGFyZW50SW5wdXREYXRhID8gKnBhcmVudElucHV0RGF0YSA6IF9f
bnVsbCk7IG91dHB1dERhdGEgPSBuZXcgU29FbmdpbmVPdXRwdXREYXRhKHBhcmVudE91dHB1dERh
dGEgPyAqcGFyZW50T3V0cHV0RGF0YSA6IF9fbnVsbCk7IH0gZWxzZSBmaXJzdEluc3RhbmNlID0g
MDsgaXNCdWlsdEluID0gMDsgfSB3aGlsZSgwKTsKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChmaXJz
dEluc3RhbmNlKSBpbnB1dERhdGEtPmFkZEZpZWxkKHRoaXMsICJ0cmFuc2xhdGlvbiIsICZ0aGlz
LT50cmFuc2xhdGlvbik7IHRoaXMtPnRyYW5zbGF0aW9uLnNldFZhbHVlIChTYlZlYzNmKDAsMCww
KSk7IHRoaXMtPnRyYW5zbGF0aW9uLnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsKICAg
IGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFkZEZpZWxkKHRo
aXMsICJyb3RhdGlvbiIsICZ0aGlzLT5yb3RhdGlvbik7IHRoaXMtPnJvdGF0aW9uLnNldFZhbHVl
IChTYlJvdGF0aW9uOjppZGVudGl0eSgpKTsgdGhpcy0+cm90YXRpb24uc2V0Q29udGFpbmVyKHRo
aXMpOyB9IHdoaWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYgKGZpcnN0SW5zdGFuY2UpIGlu
cHV0RGF0YS0+YWRkRmllbGQodGhpcywgInNjYWxlRmFjdG9yIiwgJnRoaXMtPnNjYWxlRmFjdG9y
KTsgdGhpcy0+c2NhbGVGYWN0b3Iuc2V0VmFsdWUgKFNiVmVjM2YoMSwxLDEpKTsgdGhpcy0+c2Nh
bGVGYWN0b3Iuc2V0Q29udGFpbmVyKHRoaXMpOyB9IHdoaWxlKDApOwogICAgZG8geyB3aGlsZSgw
KTsgaWYgKGZpcnN0SW5zdGFuY2UpIGlucHV0RGF0YS0+YWRkRmllbGQodGhpcywgInNjYWxlT3Jp
ZW50YXRpb24iLCAmdGhpcy0+c2NhbGVPcmllbnRhdGlvbik7IHRoaXMtPnNjYWxlT3JpZW50YXRp
b24uc2V0VmFsdWUgKFNiUm90YXRpb246OmlkZW50aXR5KCkpOyB0aGlzLT5zY2FsZU9yaWVudGF0
aW9uLnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsKICAgIGRvIHsgd2hpbGUoMCk7IGlm
IChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFkZEZpZWxkKHRoaXMsICJjZW50ZXIiLCAmdGhp
cy0+Y2VudGVyKTsgdGhpcy0+Y2VudGVyLnNldFZhbHVlIChTYlZlYzNmKDAsMCwwKSk7IHRoaXMt
PmNlbnRlci5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxlKDAp
OyBpZiAoZmlyc3RJbnN0YW5jZSkgb3V0cHV0RGF0YS0+YWRkT3V0cHV0KHRoaXMsICJtYXRyaXgi
LCAmdGhpcy0+bWF0cml4LCBTb01GTWF0cml4OjpnZXRDbGFzc1R5cGVJZCgpKTsgdGhpcy0+bWF0
cml4LnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsKICAgIGlzQnVpbHRJbiA9IDE7Cn0K
CnZvaWQKU29Db21wb3NlTWF0cml4OjpldmFsdWF0ZSgpCnsKICAgIGludCBudHJhbnNsYXRpb24g
PSB0cmFuc2xhdGlvbi5nZXROdW0oKTsKICAgIGludCBucm90YXRpb24gPSByb3RhdGlvbi5nZXRO
dW0oKTsKICAgIGludCBuc2NhbGVGYWN0b3IgPSBzY2FsZUZhY3Rvci5nZXROdW0oKTsKICAgIGlu
dCBuc2NhbGVPcmllbnRhdGlvbiA9IHNjYWxlT3JpZW50YXRpb24uZ2V0TnVtKCk7CiAgICBpbnQg
bmNlbnRlciA9IGNlbnRlci5nZXROdW0oKTsKICAgIGludCBub3V0PW1heChudHJhbnNsYXRpb24s
bnJvdGF0aW9uLG5zY2FsZUZhY3Rvcixuc2NhbGVPcmllbnRhdGlvbixuY2VudGVyKTsKICAgIGRv
IHsgaWYgKG1hdHJpeC5pc0VuYWJsZWQoKSkgeyBmb3IgKGludCBfZW5nX291dF9pID0gMDsgX2Vu
Z19vdXRfaSA8IG1hdHJpeC5nZXROdW1Db25uZWN0aW9ucygpOyBfZW5nX291dF9pKyspIHsgU29N
Rk1hdHJpeCAqX2VuZ19vdXRfdGVtcCA9IChTb01GTWF0cml4ICopIG1hdHJpeFtfZW5nX291dF9p
XTsgaWYgKCFfZW5nX291dF90ZW1wLT5pc1JlYWRPbmx5KCkpIHsgX2VuZ19vdXRfdGVtcC0+c2V0
TnVtKG5vdXQpOyB9IH0gfSB9IHdoaWxlKDApOwogICAgZm9yIChpbnQgaT0wOyBpPG5vdXQ7IGkr
KykgewogICAgICAgIFNiVmVjM2YgdnRyYW5zID0gdHJhbnNsYXRpb25bY2xhbXAoaSxudHJhbnNs
YXRpb24pXTsKICAgICAgICBTYlJvdGF0aW9uIHZyb3QgPSByb3RhdGlvbltjbGFtcChpLG5yb3Rh
dGlvbildOwogICAgICAgIFNiVmVjM2YgdnNjYWxlID0gc2NhbGVGYWN0b3JbY2xhbXAoaSxuc2Nh
bGVGYWN0b3IpXTsKICAgICAgICBTYlJvdGF0aW9uIHZzY2FsZU8gPSBzY2FsZU9yaWVudGF0aW9u
W2NsYW1wKGksbnNjYWxlT3JpZW50YXRpb24pXTsKICAgICAgICBTYlZlYzNmIHZjZW50ZXIgPSBj
ZW50ZXJbY2xhbXAoaSxuY2VudGVyKV07CiAgICAgICAgU2JNYXRyaXggbTsKICAgICAgICBtLnNl
dFRyYW5zZm9ybSh2dHJhbnMsIHZyb3QsIHZzY2FsZSwgdnNjYWxlTywgdmNlbnRlcik7CiAgICAg
ICAgZG8geyBpZiAobWF0cml4LmlzRW5hYmxlZCgpKSB7IGZvciAoaW50IF9lbmdfb3V0X2kgPSAw
OyBfZW5nX291dF9pIDwgbWF0cml4LmdldE51bUNvbm5lY3Rpb25zKCk7IF9lbmdfb3V0X2krKykg
eyBTb01GTWF0cml4ICpfZW5nX291dF90ZW1wID0gKFNvTUZNYXRyaXggKikgbWF0cml4W19lbmdf
b3V0X2ldOyBpZiAoIV9lbmdfb3V0X3RlbXAtPmlzUmVhZE9ubHkoKSkgeyBfZW5nX291dF90ZW1w
LT5zZXQxVmFsdWUoaSwgbSk7IH0gfSB9IH0gd2hpbGUoMCk7CiAgICB9Cn0KCgoKCgoKU29UeXBl
IFNvRGVjb21wb3NlTWF0cml4OjpjbGFzc1R5cGVJZDsgU2JCb29sIFNvRGVjb21wb3NlTWF0cml4
OjpmaXJzdEluc3RhbmNlPTE7IFNvRW5naW5lT3V0cHV0RGF0YSAqU29EZWNvbXBvc2VNYXRyaXg6
Om91dHB1dERhdGE7IFNvRmllbGREYXRhICogU29EZWNvbXBvc2VNYXRyaXg6OmlucHV0RGF0YTsg
Y29uc3QgU29FbmdpbmVPdXRwdXREYXRhICoqU29EZWNvbXBvc2VNYXRyaXg6OnBhcmVudE91dHB1
dERhdGE7IGNvbnN0IFNvRmllbGREYXRhICoqIFNvRGVjb21wb3NlTWF0cml4OjpwYXJlbnRJbnB1
dERhdGE7IFNvVHlwZSBTb0RlY29tcG9zZU1hdHJpeDo6Z2V0VHlwZUlkKCkgY29uc3QgeyByZXR1
cm4gY2xhc3NUeXBlSWQ7IH0gY29uc3QgU29GaWVsZERhdGEgKiBTb0RlY29tcG9zZU1hdHJpeDo6
Z2V0RmllbGREYXRhKCkgY29uc3QgeyByZXR1cm4gaW5wdXREYXRhOyB9IGNvbnN0IFNvRW5naW5l
T3V0cHV0RGF0YSAqIFNvRGVjb21wb3NlTWF0cml4OjpnZXRPdXRwdXREYXRhKCkgY29uc3QgeyBy
ZXR1cm4gb3V0cHV0RGF0YTsgfSB2b2lkICogU29EZWNvbXBvc2VNYXRyaXg6OmNyZWF0ZUluc3Rh
bmNlKCkgeyByZXR1cm4gKHZvaWQgKikobmV3IFNvRGVjb21wb3NlTWF0cml4KTsgfTsgU29EZWNv
bXBvc2VNYXRyaXg6On5Tb0RlY29tcG9zZU1hdHJpeCgpIHsgfTsKClNvRGVjb21wb3NlTWF0cml4
OjpTb0RlY29tcG9zZU1hdHJpeCgpCnsKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChpbnB1dERhdGEg
PT0gX19udWxsKSB7IGlucHV0RGF0YSA9IG5ldyBTb0ZpZWxkRGF0YShwYXJlbnRJbnB1dERhdGEg
PyAqcGFyZW50SW5wdXREYXRhIDogX19udWxsKTsgb3V0cHV0RGF0YSA9IG5ldyBTb0VuZ2luZU91
dHB1dERhdGEocGFyZW50T3V0cHV0RGF0YSA/ICpwYXJlbnRPdXRwdXREYXRhIDogX19udWxsKTsg
fSBlbHNlIGZpcnN0SW5zdGFuY2UgPSAwOyBpc0J1aWx0SW4gPSAwOyB9IHdoaWxlKDApOwogICAg
ZG8geyB3aGlsZSgwKTsgaWYgKGZpcnN0SW5zdGFuY2UpIGlucHV0RGF0YS0+YWRkRmllbGQodGhp
cywgIm1hdHJpeCIsICZ0aGlzLT5tYXRyaXgpOyB0aGlzLT5tYXRyaXguc2V0VmFsdWUgKFNiTWF0
cml4OjppZGVudGl0eSgpKTsgdGhpcy0+bWF0cml4LnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGls
ZSgwKTsKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFk
ZEZpZWxkKHRoaXMsICJjZW50ZXIiLCAmdGhpcy0+Y2VudGVyKTsgdGhpcy0+Y2VudGVyLnNldFZh
bHVlIChTYlZlYzNmKDAsMCwwKSk7IHRoaXMtPmNlbnRlci5zZXRDb250YWluZXIodGhpcyk7IH0g
d2hpbGUoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgb3V0cHV0RGF0
YS0+YWRkT3V0cHV0KHRoaXMsICJ0cmFuc2xhdGlvbiIsICZ0aGlzLT50cmFuc2xhdGlvbiwgU29N
RlZlYzNmOjpnZXRDbGFzc1R5cGVJZCgpKTsgdGhpcy0+dHJhbnNsYXRpb24uc2V0Q29udGFpbmVy
KHRoaXMpOyB9IHdoaWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYgKGZpcnN0SW5zdGFuY2Up
IG91dHB1dERhdGEtPmFkZE91dHB1dCh0aGlzLCAicm90YXRpb24iLCAmdGhpcy0+cm90YXRpb24s
IFNvTUZSb3RhdGlvbjo6Z2V0Q2xhc3NUeXBlSWQoKSk7IHRoaXMtPnJvdGF0aW9uLnNldENvbnRh
aW5lcih0aGlzKTsgfSB3aGlsZSgwKTsKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3Rh
bmNlKSBvdXRwdXREYXRhLT5hZGRPdXRwdXQodGhpcywgInNjYWxlRmFjdG9yIiwgJnRoaXMtPnNj
YWxlRmFjdG9yLCBTb01GVmVjM2Y6OmdldENsYXNzVHlwZUlkKCkpOyB0aGlzLT5zY2FsZUZhY3Rv
ci5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAo
Zmlyc3RJbnN0YW5jZSkgb3V0cHV0RGF0YS0+YWRkT3V0cHV0KHRoaXMsICJzY2FsZU9yaWVudGF0
aW9uIiwgJnRoaXMtPnNjYWxlT3JpZW50YXRpb24sIFNvTUZSb3RhdGlvbjo6Z2V0Q2xhc3NUeXBl
SWQoKSk7IHRoaXMtPnNjYWxlT3JpZW50YXRpb24uc2V0Q29udGFpbmVyKHRoaXMpOyB9IHdoaWxl
KDApOwogICAgaXNCdWlsdEluID0gMTsKfQoKdm9pZApTb0RlY29tcG9zZU1hdHJpeDo6ZXZhbHVh
dGUoKQp7CiAgICBpbnQgbm1hdHJpeCA9IG1hdHJpeC5nZXROdW0oKTsKICAgIGludCBuY2VudGVy
ID0gY2VudGVyLmdldE51bSgpOwogICAgaW50IG5vdXQ9bWF4KG5tYXRyaXgsbmNlbnRlcik7CiAg
ICBkbyB7IGlmICh0cmFuc2xhdGlvbi5pc0VuYWJsZWQoKSkgeyBmb3IgKGludCBfZW5nX291dF9p
ID0gMDsgX2VuZ19vdXRfaSA8IHRyYW5zbGF0aW9uLmdldE51bUNvbm5lY3Rpb25zKCk7IF9lbmdf
b3V0X2krKykgeyBTb01GVmVjM2YgKl9lbmdfb3V0X3RlbXAgPSAoU29NRlZlYzNmICopIHRyYW5z
bGF0aW9uW19lbmdfb3V0X2ldOyBpZiAoIV9lbmdfb3V0X3RlbXAtPmlzUmVhZE9ubHkoKSkgeyBf
ZW5nX291dF90ZW1wLT5zZXROdW0obm91dCk7IH0gfSB9IH0gd2hpbGUoMCk7CiAgICBkbyB7IGlm
IChyb3RhdGlvbi5pc0VuYWJsZWQoKSkgeyBmb3IgKGludCBfZW5nX291dF9pID0gMDsgX2VuZ19v
dXRfaSA8IHJvdGF0aW9uLmdldE51bUNvbm5lY3Rpb25zKCk7IF9lbmdfb3V0X2krKykgeyBTb01G
Um90YXRpb24gKl9lbmdfb3V0X3RlbXAgPSAoU29NRlJvdGF0aW9uICopIHJvdGF0aW9uW19lbmdf
b3V0X2ldOyBpZiAoIV9lbmdfb3V0X3RlbXAtPmlzUmVhZE9ubHkoKSkgeyBfZW5nX291dF90ZW1w
LT5zZXROdW0obm91dCk7IH0gfSB9IH0gd2hpbGUoMCk7CiAgICBkbyB7IGlmIChzY2FsZUZhY3Rv
ci5pc0VuYWJsZWQoKSkgeyBmb3IgKGludCBfZW5nX291dF9pID0gMDsgX2VuZ19vdXRfaSA8IHNj
YWxlRmFjdG9yLmdldE51bUNvbm5lY3Rpb25zKCk7IF9lbmdfb3V0X2krKykgeyBTb01GVmVjM2Yg
Kl9lbmdfb3V0X3RlbXAgPSAoU29NRlZlYzNmICopIHNjYWxlRmFjdG9yW19lbmdfb3V0X2ldOyBp
ZiAoIV9lbmdfb3V0X3RlbXAtPmlzUmVhZE9ubHkoKSkgeyBfZW5nX291dF90ZW1wLT5zZXROdW0o
bm91dCk7IH0gfSB9IH0gd2hpbGUoMCk7CiAgICBkbyB7IGlmIChzY2FsZU9yaWVudGF0aW9uLmlz
RW5hYmxlZCgpKSB7IGZvciAoaW50IF9lbmdfb3V0X2kgPSAwOyBfZW5nX291dF9pIDwgc2NhbGVP
cmllbnRhdGlvbi5nZXROdW1Db25uZWN0aW9ucygpOyBfZW5nX291dF9pKyspIHsgU29NRlJvdGF0
aW9uICpfZW5nX291dF90ZW1wID0gKFNvTUZSb3RhdGlvbiAqKSBzY2FsZU9yaWVudGF0aW9uW19l
bmdfb3V0X2ldOyBpZiAoIV9lbmdfb3V0X3RlbXAtPmlzUmVhZE9ubHkoKSkgeyBfZW5nX291dF90
ZW1wLT5zZXROdW0obm91dCk7IH0gfSB9IH0gd2hpbGUoMCk7CiAgICBmb3IgKGludCBpPTA7IGk8
bm91dDsgaSsrKSB7CiAgICAgICAgU2JWZWMzZiB0cmFuczsKICAgICAgICBTYlJvdGF0aW9uIHJv
dDsKICAgICAgICBTYlZlYzNmIHNjYWxlOwogICAgICAgIFNiUm90YXRpb24gc2NhbGVPOwogICAg
ICAgIFNiVmVjM2YgdmNlbnRlciA9IGNlbnRlcltjbGFtcChpLG5jZW50ZXIpXTsKICAgICAgICBT
Yk1hdHJpeCB2bWF0cml4ID0gbWF0cml4W2NsYW1wKGksbm1hdHJpeCldOwogICAgICAgIHZtYXRy
aXguZ2V0VHJhbnNmb3JtKHRyYW5zLCByb3QsIHNjYWxlLCBzY2FsZU8sIHZjZW50ZXIpOwogICAg
ICAgIGRvIHsgaWYgKHRyYW5zbGF0aW9uLmlzRW5hYmxlZCgpKSB7IGZvciAoaW50IF9lbmdfb3V0
X2kgPSAwOyBfZW5nX291dF9pIDwgdHJhbnNsYXRpb24uZ2V0TnVtQ29ubmVjdGlvbnMoKTsgX2Vu
Z19vdXRfaSsrKSB7IFNvTUZWZWMzZiAqX2VuZ19vdXRfdGVtcCA9IChTb01GVmVjM2YgKikgdHJh
bnNsYXRpb25bX2VuZ19vdXRfaV07IGlmICghX2VuZ19vdXRfdGVtcC0+aXNSZWFkT25seSgpKSB7
IF9lbmdfb3V0X3RlbXAtPnNldDFWYWx1ZShpLCB0cmFucyk7IH0gfSB9IH0gd2hpbGUoMCk7CiAg
ICAgICAgZG8geyBpZiAocm90YXRpb24uaXNFbmFibGVkKCkpIHsgZm9yIChpbnQgX2VuZ19vdXRf
aSA9IDA7IF9lbmdfb3V0X2kgPCByb3RhdGlvbi5nZXROdW1Db25uZWN0aW9ucygpOyBfZW5nX291
dF9pKyspIHsgU29NRlJvdGF0aW9uICpfZW5nX291dF90ZW1wID0gKFNvTUZSb3RhdGlvbiAqKSBy
b3RhdGlvbltfZW5nX291dF9pXTsgaWYgKCFfZW5nX291dF90ZW1wLT5pc1JlYWRPbmx5KCkpIHsg
X2VuZ19vdXRfdGVtcC0+c2V0MVZhbHVlKGksIHJvdCk7IH0gfSB9IH0gd2hpbGUoMCk7CiAgICAg
ICAgZG8geyBpZiAoc2NhbGVGYWN0b3IuaXNFbmFibGVkKCkpIHsgZm9yIChpbnQgX2VuZ19vdXRf
aSA9IDA7IF9lbmdfb3V0X2kgPCBzY2FsZUZhY3Rvci5nZXROdW1Db25uZWN0aW9ucygpOyBfZW5n
X291dF9pKyspIHsgU29NRlZlYzNmICpfZW5nX291dF90ZW1wID0gKFNvTUZWZWMzZiAqKSBzY2Fs
ZUZhY3RvcltfZW5nX291dF9pXTsgaWYgKCFfZW5nX291dF90ZW1wLT5pc1JlYWRPbmx5KCkpIHsg
X2VuZ19vdXRfdGVtcC0+c2V0MVZhbHVlKGksIHNjYWxlKTsgfSB9IH0gfSB3aGlsZSgwKTsKICAg
ICAgICBkbyB7IGlmIChzY2FsZU9yaWVudGF0aW9uLmlzRW5hYmxlZCgpKSB7IGZvciAoaW50IF9l
bmdfb3V0X2kgPSAwOyBfZW5nX291dF9pIDwgc2NhbGVPcmllbnRhdGlvbi5nZXROdW1Db25uZWN0
aW9ucygpOyBfZW5nX291dF9pKyspIHsgU29NRlJvdGF0aW9uICpfZW5nX291dF90ZW1wID0gKFNv
TUZSb3RhdGlvbiAqKSBzY2FsZU9yaWVudGF0aW9uW19lbmdfb3V0X2ldOyBpZiAoIV9lbmdfb3V0
X3RlbXAtPmlzUmVhZE9ubHkoKSkgeyBfZW5nX291dF90ZW1wLT5zZXQxVmFsdWUoaSwgc2NhbGVP
KTsgfSB9IH0gfSB3aGlsZSgwKTsKICAgIH0KfQojIDQ2ICJTb0VuZ2luZXMuYysrIiAyCiMgMSAi
U29Db21wdXRlQm91bmRpbmdCb3guYysrIiAxCiMgNTQgIlNvQ29tcHV0ZUJvdW5kaW5nQm94LmMr
KyIKIyAxICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9hY3Rp
b25zL1NvR2V0Qm91bmRpbmdCb3hBY3Rpb24uaCIgMQojIDU5ICIuLi8uLi8uLi8uLi8uLi9saWIv
ZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9hY3Rpb25zL1NvR2V0Qm91bmRpbmdCb3hBY3Rpb24u
aCIKIyAxICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9TYkJv
eC5oIiAxCiMgNjUgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9y
L1NiQm94LmgiCmNsYXNzIFNiQm94M2YgewogIHB1YmxpYzoKCiAgICBTYkJveDNmKCkgeyBtYWtl
RW1wdHkoKTsgfQoKCgogICAgU2JCb3gzZihmbG9hdCB4bWluLCBmbG9hdCB5bWluLCBmbG9hdCB6
bWluLAogICAgICAgICAgICBmbG9hdCB4bWF4LCBmbG9hdCB5bWF4LCBmbG9hdCB6bWF4KQogICAg
ICAgIHsgbWluLnNldFZhbHVlKHhtaW4sIHltaW4sIHptaW4pOyBtYXguc2V0VmFsdWUoeG1heCwg
eW1heCwgem1heCk7IH0KCgoKICAgIFNiQm94M2YoY29uc3QgU2JWZWMzZiAmX21pbiwgY29uc3Qg
U2JWZWMzZiAmX21heCkKICAgICAgICB7IG1pbiA9IF9taW47IG1heCA9IF9tYXg7IH0KCiAgICB+
U2JCb3gzZigpIHsgfQoKCgogICAgY29uc3QgU2JWZWMzZiAmIGdldE1pbigpIGNvbnN0IHsgcmV0
dXJuIG1pbjsgfQoKICAgIGNvbnN0IFNiVmVjM2YgJiBnZXRNYXgoKSBjb25zdCB7IHJldHVybiBt
YXg7IH0KICAgIFNiVmVjM2YgJiBnZXRNaW4oKSB7IHJldHVybiBtaW47IH0KICAgIFNiVmVjM2Yg
JiBnZXRNYXgoKSB7IHJldHVybiBtYXg7IH0KCgogICAgU2JWZWMzZiBnZXRDZW50ZXIoKSBjb25z
dDsKCgoKICAgIHZvaWQgZXh0ZW5kQnkoY29uc3QgU2JWZWMzZiAmcHQpOwoKCgogICAgdm9pZCBl
eHRlbmRCeShjb25zdCBTYkJveDNmICZiYik7CgoKCiAgICBTYkJvb2wgaW50ZXJzZWN0KGNvbnN0
IFNiVmVjM2YgJnB0KSBjb25zdDsKCgoKICAgIFNiQm9vbCBpbnRlcnNlY3QoY29uc3QgU2JCb3gz
ZiAmYmIpIGNvbnN0OwojIDEyMSAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUv
SW52ZW50b3IvU2JCb3guaCIKICAgIFNiQm9vbCBvdXRzaWRlKGNvbnN0IFNiTWF0cml4ICZNVlAs
IGludCAmY3VsbEJpdHMpIGNvbnN0OwoKCiAgICB2b2lkIHNldEJvdW5kcyhmbG9hdCB4bWluLCBm
bG9hdCB5bWluLCBmbG9hdCB6bWluLAogICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHht
YXgsIGZsb2F0IHltYXgsIGZsb2F0IHptYXgpCiAgICAgICAgeyBtaW4uc2V0VmFsdWUoeG1pbiwg
eW1pbiwgem1pbik7IG1heC5zZXRWYWx1ZSh4bWF4LCB5bWF4LCB6bWF4KTsgfQoKCiAgICB2b2lk
IHNldEJvdW5kcyhjb25zdCBTYlZlYzNmICZfbWluLCBjb25zdCBTYlZlYzNmICZfbWF4KQogICAg
ICAgIHsgbWluID0gX21pbjsgbWF4ID0gX21heDsgfQoKICAgIHZvaWQgZ2V0Qm91bmRzKGZsb2F0
ICZ4bWluLCBmbG9hdCAmeW1pbiwgZmxvYXQgJnptaW4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmxvYXQgJnhtYXgsIGZsb2F0ICZ5bWF4LCBmbG9hdCAmem1heCkgY29uc3QKICAgICAgICB7
IG1pbi5nZXRWYWx1ZSh4bWluLCB5bWluLCB6bWluKTsgbWF4LmdldFZhbHVlKHhtYXgsIHltYXgs
IHptYXgpOyB9CgoKICAgIHZvaWQgZ2V0Qm91bmRzKFNiVmVjM2YgJl9taW4sIFNiVmVjM2YgJl9t
YXgpIGNvbnN0CiAgICAgICAgeyBfbWluID0gbWluOyBfbWF4ID0gbWF4OyB9CgoKCgogICAgU2JW
ZWMzZiBnZXRDbG9zZXN0UG9pbnQoY29uc3QgU2JWZWMzZiAmcG9pbnQpOwoKCiAgICB2b2lkIGdl
dE9yaWdpbihmbG9hdCAmb3JpZ2luWCwKICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCAm
b3JpZ2luWSwKICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCAmb3JpZ2luWikgY29uc3QK
ICAgICAgICB7IG9yaWdpblggPSBtaW5bMF07IG9yaWdpblkgPSBtaW5bMV07IG9yaWdpblogPSBt
aW5bMl07IH0KCgogICAgdm9pZCBnZXRTaXplKGZsb2F0ICZzaXplWCwgZmxvYXQgJnNpemVZLCBm
bG9hdCAmc2l6ZVopIGNvbnN0CiAgICAgICAgeyBzaXplWCA9IG1heFswXSAtIG1pblswXTsKICAg
ICAgICAgIHNpemVZID0gbWF4WzFdIC0gbWluWzFdOwogICAgICAgICAgc2l6ZVogPSBtYXhbMl0g
LSBtaW5bMl07IH0KCgogICAgdm9pZCBtYWtlRW1wdHkoKTsKCgoKCgogICAgU2JCb29sIGlzRW1w
dHkoKSBjb25zdCB7IHJldHVybiBtYXhbMF0gPCBtaW5bMF07IH0KCgoKCiAgICBTYkJvb2wgaGFz
Vm9sdW1lKCkgY29uc3QKICAgICAgICB7IHJldHVybiAobWF4WzBdID4gbWluWzBdICYmIG1heFsx
XSA+IG1pblsxXSAmJiBtYXhbMl0gPiBtaW5bMl0gKTsgfQoKCiAgICB2b2lkIGdldFNwYW4oY29u
c3QgU2JWZWMzZiAmZGlyZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCAmZE1p
biwgZmxvYXQgJmRNYXgpIGNvbnN0OwoKCgogICAgdm9pZCB0cmFuc2Zvcm0oY29uc3QgU2JNYXRy
aXggJm0pOwoKCgogICAgZmxvYXQgZ2V0Vm9sdW1lKCkgY29uc3Q7CgoKICAgIGZyaWVuZCBpbnQg
b3BlcmF0b3IgPT0oY29uc3QgU2JCb3gzZiAmYjEsIGNvbnN0IFNiQm94M2YgJmIyKTsKICAgIGZy
aWVuZCBpbnQgb3BlcmF0b3IgIT0oY29uc3QgU2JCb3gzZiAmYjEsIGNvbnN0IFNiQm94M2YgJmIy
KQogICAgICAgIHsgcmV0dXJuICEoYjEgPT0gYjIpOyB9CgogIHByaXZhdGU6CgogICAgU2JWZWMz
ZiBtaW4sIG1heDsKfTsKCmNsYXNzIFNiWGZCb3gzZiA6IHByaXZhdGUgU2JCb3gzZiB7CiAgcHVi
bGljOgoKICAgIFNiWGZCb3gzZigpOwoKCgogICAgU2JYZkJveDNmKGNvbnN0IFNiVmVjM2YgJl9t
aW4sIGNvbnN0IFNiVmVjM2YgJl9tYXgpOwoKCgogICAgU2JYZkJveDNmKGNvbnN0IFNiQm94M2Yg
JmJveCk7CgogICAgflNiWGZCb3gzZigpIHsgfQoKCgogICAgdm9pZCBzZXRUcmFuc2Zvcm0oY29u
c3QgU2JNYXRyaXggJm0pOwoKCgogICAgY29uc3QgU2JNYXRyaXggJiBnZXRUcmFuc2Zvcm0oKSBj
b25zdCB7IHJldHVybiB4Zm9ybTsgfQogICAgY29uc3QgU2JNYXRyaXggJiBnZXRJbnZlcnNlKCkg
Y29uc3QgeyByZXR1cm4geGZvcm1JbnY7IH0KCgogICAgU2JWZWMzZiBnZXRDZW50ZXIoKSBjb25z
dDsKCgoKICAgIHZvaWQgZXh0ZW5kQnkoY29uc3QgU2JWZWMzZiAmcHQpOwoKCgogICAgdm9pZCBl
eHRlbmRCeShjb25zdCBTYkJveDNmICZiYikKICAgICAgICB7IGV4dGVuZEJ5KFNiWGZCb3gzZihi
YikpOyB9CgoKCiAgICB2b2lkIGV4dGVuZEJ5KGNvbnN0IFNiWGZCb3gzZiAmYmIpOwoKCgogICAg
U2JCb29sIGludGVyc2VjdChjb25zdCBTYlZlYzNmICZwdCkgY29uc3Q7CgoKCiAgICBTYkJvb2wg
aW50ZXJzZWN0KGNvbnN0IFNiQm94M2YgJmJiKSBjb25zdAogICAgICAgIHsgcmV0dXJuIHByb2pl
Y3QoKS5pbnRlcnNlY3QoYmIpOyB9CgoKICAgIHZvaWQgc2V0Qm91bmRzKGZsb2F0IHhtaW4sIGZs
b2F0IHltaW4sIGZsb2F0IHptaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeG1h
eCwgZmxvYXQgeW1heCwgZmxvYXQgem1heCkKICAgICAgICB7IFNiQm94M2Y6OnNldEJvdW5kcyh4
bWluLCB5bWluLCB6bWluLCB4bWF4LCB5bWF4LCB6bWF4KTsgfQoKCiAgICB2b2lkIHNldEJvdW5k
cyhjb25zdCBTYlZlYzNmICZfbWluLCBjb25zdCBTYlZlYzNmICZfbWF4KQogICAgICAgIHsgU2JC
b3gzZjo6c2V0Qm91bmRzKF9taW4sIF9tYXgpOyB9CgogICAgdm9pZCBnZXRCb3VuZHMoZmxvYXQg
JnhtaW4sIGZsb2F0ICZ5bWluLCBmbG9hdCAmem1pbiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdCAmeG1heCwgZmxvYXQgJnltYXgsIGZsb2F0ICZ6bWF4KSBjb25zdAogICAgICAgIHsg
U2JCb3gzZjo6Z2V0Qm91bmRzKHhtaW4sIHltaW4sIHptaW4sIHhtYXgsIHltYXgsIHptYXgpOyB9
CgoKICAgIHZvaWQgZ2V0Qm91bmRzKFNiVmVjM2YgJl9taW4sIFNiVmVjM2YgJl9tYXgpIGNvbnN0
CiAgICAgICAgeyBTYkJveDNmOjpnZXRCb3VuZHMoX21pbiwgX21heCk7IH0KCgogICAgdm9pZCBn
ZXRPcmlnaW4oZmxvYXQgJm9yaWdpblgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQg
Jm9yaWdpblksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgJm9yaWdpblopCiAgICAg
ICAgeyBTYkJveDNmOjpnZXRPcmlnaW4ob3JpZ2luWCwgb3JpZ2luWSwgb3JpZ2luWik7IH0KCgog
ICAgdm9pZCBnZXRTaXplKGZsb2F0ICZzaXplWCwgZmxvYXQgJnNpemVZLCBmbG9hdCAmc2l6ZVop
CiAgICAgICAgeyBTYkJveDNmOjpnZXRTaXplKHNpemVYLCBzaXplWSwgc2l6ZVopOyB9CgoKCiAg
ICBmbG9hdCBnZXRWb2x1bWUoKSBjb25zdDsKCgogICAgdm9pZCBtYWtlRW1wdHkoKSB7IFNiQm94
M2Y6Om1ha2VFbXB0eSgpOyB9CgoKCgoKICAgIFNiQm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gU2JCb3gzZjo6aXNFbXB0eSgpOyB9CgoKCgogICAgU2JCb29sIGhhc1ZvbHVtZSgpIGNvbnN0
IHsgcmV0dXJuIFNiQm94M2Y6Omhhc1ZvbHVtZSgpOyB9CgoKICAgIHZvaWQgZ2V0U3Bhbihjb25z
dCBTYlZlYzNmICZkaXJlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxv
YXQgJmRNaW4sIGZsb2F0ICZkTWF4KSBjb25zdAogICAgICAgIHsgcHJvamVjdCgpLmdldFNwYW4o
ZGlyZWN0aW9uLCBkTWluLCBkTWF4KTsgfQoKCgogICAgdm9pZCB0cmFuc2Zvcm0oY29uc3QgU2JN
YXRyaXggJm0pOwoKCiAgICBTYkJveDNmIHByb2plY3QoKSBjb25zdDsKCgogICAgZnJpZW5kIGlu
dCBvcGVyYXRvciA9PShjb25zdCBTYlhmQm94M2YgJmIxLCBjb25zdCBTYlhmQm94M2YgJmIyKTsK
ICAgIGZyaWVuZCBpbnQgb3BlcmF0b3IgIT0oY29uc3QgU2JYZkJveDNmICZiMSwgY29uc3QgU2JY
ZkJveDNmICZiMikKICAgICAgICB7IHJldHVybiAhKGIxID09IGIyKTsgfQoKICBwcml2YXRlOgoK
ICAgIGNvbnN0IFNiVmVjM2YgJiBnZXRNaW4oKSBjb25zdCB7IHJldHVybiBTYkJveDNmOjpnZXRN
aW4oKTsgfQogICAgY29uc3QgU2JWZWMzZiAmIGdldE1heCgpIGNvbnN0IHsgcmV0dXJuIFNiQm94
M2Y6OmdldE1heCgpOyB9CgoKICAgIFNiTWF0cml4IHhmb3JtOwogICAgU2JNYXRyaXggeGZvcm1J
bnY7Cn07CgpjbGFzcyBTYkJveDJmIHsKICBwdWJsaWM6CgogICAgU2JCb3gyZigpIHsgbWFrZUVt
cHR5KCk7IH07CgoKCiAgICBTYkJveDJmKGZsb2F0IHhtaW4sIGZsb2F0IHltaW4sIGZsb2F0IHht
YXgsIGZsb2F0IHltYXgpCiAgICAgICAgeyBtaW4uc2V0VmFsdWUoeG1pbiwgeW1pbik7IG1heC5z
ZXRWYWx1ZSh4bWF4LCB5bWF4KTsgfQoKCgogICAgU2JCb3gyZihjb25zdCBTYlZlYzJmICZfbWlu
LCBjb25zdCBTYlZlYzJmICZfbWF4KQogICAgICAgIHsgbWluID0gX21pbjsgbWF4ID0gX21heDsg
fQoKICAgIH5TYkJveDJmKCkgeyB9CgoKICAgIGNvbnN0IFNiVmVjMmYgJiBnZXRNaW4oKSBjb25z
dCB7IHJldHVybiBtaW47IH0KICAgIGNvbnN0IFNiVmVjMmYgJiBnZXRNYXgoKSBjb25zdCB7IHJl
dHVybiBtYXg7IH0KCgogICAgU2JWZWMyZiBnZXRDZW50ZXIoKSBjb25zdDsKCgoKICAgIHZvaWQg
ZXh0ZW5kQnkoY29uc3QgU2JWZWMyZiAmcHQpOwoKCgogICAgdm9pZCBleHRlbmRCeShjb25zdCBT
YkJveDJmICZyKTsKCgoKICAgIFNiQm9vbCBpbnRlcnNlY3QoY29uc3QgU2JWZWMyZiAmcHQpIGNv
bnN0OwoKCgogICAgU2JCb29sIGludGVyc2VjdChjb25zdCBTYkJveDJmICZiYikgY29uc3Q7CgoK
ICAgIHZvaWQgc2V0Qm91bmRzKGZsb2F0IHhtaW4sIGZsb2F0IHltaW4sIGZsb2F0IHhtYXgsIGZs
b2F0IHltYXgpCiAgICAgICAgeyBtaW4uc2V0VmFsdWUoeG1pbiwgeW1pbik7IG1heC5zZXRWYWx1
ZSh4bWF4LCB5bWF4KTsgfQoKCiAgICB2b2lkIHNldEJvdW5kcyhjb25zdCBTYlZlYzJmICZfbWlu
LCBjb25zdCBTYlZlYzJmICZfbWF4KQogICAgICAgIHsgbWluID0gX21pbjsgbWF4ID0gX21heDsg
fQoKICAgIHZvaWQgZ2V0Qm91bmRzKGZsb2F0ICZ4bWluLCBmbG9hdCAmeW1pbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBmbG9hdCAmeG1heCwgZmxvYXQgJnltYXgpIGNvbnN0CiAgICAgICAg
eyBtaW4uZ2V0VmFsdWUoeG1pbiwgeW1pbik7IG1heC5nZXRWYWx1ZSh4bWF4LCB5bWF4KTsgfQoK
CiAgICB2b2lkIGdldEJvdW5kcyhTYlZlYzJmICZfbWluLCBTYlZlYzJmICZfbWF4KSBjb25zdAog
ICAgICAgIHsgX21pbiA9IG1pbjsgX21heCA9IG1heDsgfQoKCgoKICAgIFNiVmVjMmYgZ2V0Q2xv
c2VzdFBvaW50KGNvbnN0IFNiVmVjMmYgJnBvaW50KTsKCgogICAgdm9pZCBnZXRPcmlnaW4oZmxv
YXQgJm9yaWdpblgsIGZsb2F0ICZvcmlnaW5ZKSBjb25zdAogICAgICAgIHsgb3JpZ2luWCA9IG1p
blswXTsgb3JpZ2luWSA9IG1pblsxXTsgfQoKCiAgICB2b2lkIGdldFNpemUoZmxvYXQgJnNpemVY
LCBmbG9hdCAmc2l6ZVkpIGNvbnN0CiAgICAgICAgeyBzaXplWCA9IG1heFswXSAtIG1pblswXTsg
c2l6ZVkgPSBtYXhbMV0gLSBtaW5bMV07IH0KCgogICAgZmxvYXQgZ2V0QXNwZWN0UmF0aW8oKSBj
b25zdAogICAgICAgIHsgcmV0dXJuIChtYXhbMF0gLSBtaW5bMF0pIC8gKG1heFsxXSAtIG1pblsx
XSk7IH0KCgogICAgdm9pZCBtYWtlRW1wdHkoKTsKCgoKCgogICAgU2JCb29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiBtYXhbMF0gPCBtaW5bMF07IH0KCgogICAgU2JCb29sIGhhc0FyZWEoKSBj
b25zdAogICAgICAgIHsgcmV0dXJuIChtYXhbMF0gPiBtaW5bMF0gJiYgbWF4WzFdID4gbWluWzFd
KTsgfQoKCiAgICBmcmllbmQgaW50IG9wZXJhdG9yID09KGNvbnN0IFNiQm94MmYgJmIxLCBjb25z
dCBTYkJveDJmICZiMik7CiAgICBmcmllbmQgaW50IG9wZXJhdG9yICE9KGNvbnN0IFNiQm94MmYg
JmIxLCBjb25zdCBTYkJveDJmICZiMikKICAgICAgICB7IHJldHVybiAhKGIxID09IGIyKTsgfQoK
ICBwcml2YXRlOgoKICAgIFNiVmVjMmYgbWluLCBtYXg7Cn07CgpjbGFzcyBTYkJveDJzIHsKICBw
dWJsaWM6CgogICAgU2JCb3gycygpIHsgbWFrZUVtcHR5KCk7IH07CgoKCiAgICBTYkJveDJzKHNo
b3J0IHhtaW4sIHNob3J0IHltaW4sIHNob3J0IHhtYXgsIHNob3J0IHltYXgpCiAgICAgICAgeyBt
aW4uc2V0VmFsdWUoeG1pbiwgeW1pbik7IG1heC5zZXRWYWx1ZSh4bWF4LCB5bWF4KTsgfQoKCgog
ICAgU2JCb3gycyhjb25zdCBTYlZlYzJzICZfbWluLCBjb25zdCBTYlZlYzJzICZfbWF4KQogICAg
ICAgIHsgbWluID0gX21pbjsgbWF4ID0gX21heDsgfQoKICAgIH5TYkJveDJzKCkgeyB9CgoKICAg
IGNvbnN0IFNiVmVjMnMgJiBnZXRNaW4oKSBjb25zdCB7IHJldHVybiBtaW47IH0KICAgIGNvbnN0
IFNiVmVjMnMgJiBnZXRNYXgoKSBjb25zdCB7IHJldHVybiBtYXg7IH0KCgoKICAgIHZvaWQgZXh0
ZW5kQnkoY29uc3QgU2JWZWMycyAmcHQpOwoKCgogICAgdm9pZCBleHRlbmRCeShjb25zdCBTYkJv
eDJzICZyKTsKCgoKICAgIFNiQm9vbCBpbnRlcnNlY3QoY29uc3QgU2JWZWMycyAmcHQpIGNvbnN0
OwoKCgogICAgU2JCb29sIGludGVyc2VjdChjb25zdCBTYkJveDJzICZiYikgY29uc3Q7CgoKICAg
IHZvaWQgc2V0Qm91bmRzKHNob3J0IHhtaW4sIHNob3J0IHltaW4sIHNob3J0IHhtYXgsIHNob3J0
IHltYXgpCiAgICAgICAgeyBtaW4uc2V0VmFsdWUoeG1pbiwgeW1pbik7IG1heC5zZXRWYWx1ZSh4
bWF4LCB5bWF4KTsgfQoKCiAgICB2b2lkIHNldEJvdW5kcyhjb25zdCBTYlZlYzJzICZfbWluLCBj
b25zdCBTYlZlYzJzICZfbWF4KQogICAgICAgIHsgbWluID0gX21pbjsgbWF4ID0gX21heDsgfQoK
ICAgIHZvaWQgZ2V0Qm91bmRzKHNob3J0ICZ4bWluLCBzaG9ydCAmeW1pbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaG9ydCAmeG1heCwgc2hvcnQgJnltYXgpIGNvbnN0CiAgICAgICAgeyBt
aW4uZ2V0VmFsdWUoeG1pbiwgeW1pbik7IG1heC5nZXRWYWx1ZSh4bWF4LCB5bWF4KTsgfQoKCiAg
ICB2b2lkIGdldEJvdW5kcyhTYlZlYzJzICZfbWluLCBTYlZlYzJzICZfbWF4KSBjb25zdAogICAg
ICAgIHsgX21pbiA9IG1pbjsgX21heCA9IG1heDsgfQoKCiAgICB2b2lkIGdldE9yaWdpbihzaG9y
dCAmb3JpZ2luWCwgc2hvcnQgJm9yaWdpblkpIGNvbnN0CiAgICAgICAgeyBvcmlnaW5YID0gbWlu
WzBdOyBvcmlnaW5ZID0gbWluWzFdOyB9CgoKICAgIHZvaWQgZ2V0U2l6ZShzaG9ydCAmc2l6ZVgs
IHNob3J0ICZzaXplWSkgY29uc3QKICAgICAgICB7IHNpemVYID0gbWF4WzBdIC0gbWluWzBdOyBz
aXplWSA9IG1heFsxXSAtIG1pblsxXTsgfQoKCiAgICBmbG9hdCBnZXRBc3BlY3RSYXRpbygpIGNv
bnN0CiAgICAgICAgeyByZXR1cm4gZmxvYXQobWF4WzBdIC0gbWluWzBdKSAvIGZsb2F0KG1heFsx
XSAtIG1pblsxXSk7IH0KCgogICAgdm9pZCBtYWtlRW1wdHkoKTsKCgogICAgZnJpZW5kIGludCBv
cGVyYXRvciA9PShjb25zdCBTYkJveDJzICZiMSwgY29uc3QgU2JCb3gycyAmYjIpOwogICAgZnJp
ZW5kIGludCBvcGVyYXRvciAhPShjb25zdCBTYkJveDJzICZiMSwgY29uc3QgU2JCb3gycyAmYjIp
CiAgICAgICAgeyByZXR1cm4gIShiMSA9PSBiMik7IH0KCiAgcHJpdmF0ZToKCiAgICBTYlZlYzJz
IG1pbiwgbWF4Owp9OwojIDYwICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9J
bnZlbnRvci9hY3Rpb25zL1NvR2V0Qm91bmRpbmdCb3hBY3Rpb24uaCIgMgojIDEgIi4uLy4uLy4u
Ly4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL1NiVmlld3BvcnRSZWdpb24uaCIg
MQojIDc2ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9TYlZp
ZXdwb3J0UmVnaW9uLmgiCmNsYXNzIFNiVmlld3BvcnRSZWdpb24gewogIHB1YmxpYzoKCiAgICBT
YlZpZXdwb3J0UmVnaW9uKCk7CgoKCiAgICBTYlZpZXdwb3J0UmVnaW9uKHNob3J0IHdpZHRoLCBz
aG9ydCBoZWlnaHQpOwoKCgoKICAgIFNiVmlld3BvcnRSZWdpb24oU2JWZWMycyB3aW5TaXplKTsK
CgoKICAgIFNiVmlld3BvcnRSZWdpb24oY29uc3QgU2JWaWV3cG9ydFJlZ2lvbiAmdnBSZWcpOwoK
CgogICAgdm9pZCBzZXRXaW5kb3dTaXplKHNob3J0IHdpZHRoLCBzaG9ydCBoZWlnaHQpCiAgICAg
ICAgeyBzZXRXaW5kb3dTaXplKFNiVmVjMnMod2lkdGgsIGhlaWdodCkpOyB9CgoKCgogICAgdm9p
ZCBzZXRXaW5kb3dTaXplKFNiVmVjMnMgd2luU2l6ZSk7CgoKCgogICAgdm9pZCBzZXRWaWV3cG9y
dChmbG9hdCBsZWZ0LCBmbG9hdCBib3R0b20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpCiAgICAgICAgeyBzZXRWaWV3cG9ydChT
YlZlYzJmKGxlZnQsIGJvdHRvbSksIFNiVmVjMmYod2lkdGgsIGhlaWdodCkpOyB9CgoKCgogICAg
dm9pZCBzZXRWaWV3cG9ydChTYlZlYzJmIG9yaWdpbiwgU2JWZWMyZiBzaXplKTsKCgoKCiAgICB2
b2lkIHNldFZpZXdwb3J0UGl4ZWxzKHNob3J0IGxlZnQsIHNob3J0IGJvdHRvbSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgd2lkdGgsIHNob3J0IGhlaWdo
dCkKICAgICAgICB7IHNldFZpZXdwb3J0UGl4ZWxzKFNiVmVjMnMobGVmdCwgYm90dG9tKSwgU2JW
ZWMycyh3aWR0aCwgaGVpZ2h0KSk7IH0KCgoKCiAgICB2b2lkIHNldFZpZXdwb3J0UGl4ZWxzKFNi
VmVjMnMgb3JpZ2luLCBTYlZlYzJzIHNpemUpOwoKCgogICAgY29uc3QgU2JWZWMycyAmIGdldFdp
bmRvd1NpemUoKSBjb25zdCB7IHJldHVybiB3aW5kb3dTaXplOyB9CgoKCiAgICBjb25zdCBTYlZl
YzJmICYgZ2V0Vmlld3BvcnRPcmlnaW4oKSBjb25zdCB7IHJldHVybiB2cE9yaWdpbjsgfQoKCgog
ICAgY29uc3QgU2JWZWMycyAmIGdldFZpZXdwb3J0T3JpZ2luUGl4ZWxzKCkgY29uc3QgeyByZXR1
cm4gdnBPcmlnaW5QaXg7IH0KCgoKICAgIGNvbnN0IFNiVmVjMmYgJiBnZXRWaWV3cG9ydFNpemUo
KSBjb25zdCB7IHJldHVybiB2cFNpemU7IH0KCgoKICAgIGNvbnN0IFNiVmVjMnMgJiBnZXRWaWV3
cG9ydFNpemVQaXhlbHMoKSBjb25zdCB7IHJldHVybiB2cFNpemVQaXg7fQoKCgogICAgZmxvYXQg
Z2V0Vmlld3BvcnRBc3BlY3RSYXRpbygpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gKHZwU2l6ZVBp
eFsxXSA9PSAwID8gMS4wIDoKICAgICAgICAgICAgICAgICAgKGZsb2F0KSB2cFNpemVQaXhbMF0g
LyAoZmxvYXQpIHZwU2l6ZVBpeFsxXSk7IH0KCgoKCiAgICB2b2lkIHNjYWxlV2lkdGgoZmxvYXQg
cmF0aW8pOwogICAgdm9pZCBzY2FsZUhlaWdodChmbG9hdCByYXRpbyk7CgoKCgoKICAgIHZvaWQg
c2V0UGl4ZWxzUGVySW5jaChmbG9hdCBwcGkpIHsgcGl4ZWxzUGVySW5jaCA9IHBwaTsgfQoKICAg
IGZsb2F0IGdldFBpeGVsc1BlckluY2goKSBjb25zdCB7IHJldHVybiBwaXhlbHNQZXJJbmNoOyB9
CgoKCiAgICBmbG9hdCBnZXRQaXhlbHNQZXJQb2ludCgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4g
cGl4ZWxzUGVySW5jaCAvIDcyLjA7IH0KCgogICAgZnJpZW5kIGludCBvcGVyYXRvciA9PShjb25z
dCBTYlZpZXdwb3J0UmVnaW9uICZyZWcxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBTYlZpZXdwb3J0UmVnaW9uICZyZWcyKTsKCiAgcHJpdmF0ZToKICAgIFNiVmVj
MnMgd2luZG93U2l6ZTsKICAgIFNiVmVjMmYgdnBPcmlnaW47CiAgICBTYlZlYzJzIHZwT3JpZ2lu
UGl4OwogICAgU2JWZWMyZiB2cFNpemU7CiAgICBTYlZlYzJzIHZwU2l6ZVBpeDsKICAgIFNiQm9v
bCB2cFNldDsKICAgIGZsb2F0IHBpeGVsc1BlckluY2g7CgoKICAgIHZvaWQgc2V0RnVsbFZpZXdw
b3J0KCk7CgoKICAgIHZvaWQgYWRqdXN0Vmlld3BvcnQoKTsKfTsKIyA2MSAiLi4vLi4vLi4vLi4v
Li4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvYWN0aW9ucy9Tb0dldEJvdW5kaW5nQm94
QWN0aW9uLmgiIDIKIyAxICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZl
bnRvci9hY3Rpb25zL1NvU3ViQWN0aW9uLmgiIDEKIyA3MyAiLi4vLi4vLi4vLi4vLi4vbGliL2Rh
dGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvYWN0aW9ucy9Tb1N1YkFjdGlvbi5oIgojIDEgIi4uLy4u
Ly4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2FjdGlvbnMvU29BY3Rpb24u
aCIgMQojIDYwICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9h
Y3Rpb25zL1NvQWN0aW9uLmgiCiMgMSAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1
ZGUvSW52ZW50b3IvbWlzYy9Tb1RlbXBQYXRoLmgiIDEKIyA2MCAiLi4vLi4vLi4vLi4vLi4vbGli
L2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvbWlzYy9Tb1RlbXBQYXRoLmgiCiMgMSAiLi4vLi4v
Li4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvU29QYXRoLmgiIDEKIyA2MSAi
Li4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvU29QYXRoLmgiCiMg
MSAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3Ivbm9kZXMvU29O
b2RlLmgiIDEKIyA2NCAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50
b3Ivbm9kZXMvU29Ob2RlLmgiCmNsYXNzIFNvQWN0aW9uOwpjbGFzcyBTb0NhbGxiYWNrQWN0aW9u
OwpjbGFzcyBTb0NoaWxkTGlzdDsKY2xhc3MgU29GaWVsZERhdGE7CmNsYXNzIFNvR0xSZW5kZXJB
Y3Rpb247CmNsYXNzIFNvR2V0Qm91bmRpbmdCb3hBY3Rpb247CmNsYXNzIFNvR2V0TWF0cml4QWN0
aW9uOwpjbGFzcyBTb0hhbmRsZUV2ZW50QWN0aW9uOwpjbGFzcyBTb0lucHV0OwpjbGFzcyBTb091
dHB1dDsKY2xhc3MgU29QaWNrQWN0aW9uOwpjbGFzcyBTb1JheVBpY2tBY3Rpb247CmNsYXNzIFNv
U2VhcmNoQWN0aW9uOwpjbGFzcyBTb1dyaXRlQWN0aW9uOwojIDg5ICIuLi8uLi8uLi8uLi8uLi9s
aWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9ub2Rlcy9Tb05vZGUuaCIKY2xhc3MgU29Ob2Rl
IDogcHVibGljIFNvRmllbGRDb250YWluZXIgewoKICBwdWJsaWM6CgoKICAgIHZvaWQgc2V0T3Zl
cnJpZGUoU2JCb29sIHN0YXRlKTsKCgogICAgU2JCb29sIGlzT3ZlcnJpZGUoKSBjb25zdCB7IHJl
dHVybiBvdmVycmlkZTsgfQoKCgogICAgc3RhdGljIFNvVHlwZSBnZXRDbGFzc1R5cGVJZCgpIHsg
cmV0dXJuIGNsYXNzVHlwZUlkOyB9CgoKCgoKICAgIFNvTm9kZSAqIGNvcHkoU2JCb29sIGNvcHlD
b25uZWN0aW9ucyA9IDApIGNvbnN0OwoKCgoKCiAgICB2aXJ0dWFsIFNiQm9vbCBhZmZlY3RzU3Rh
dGUoKSBjb25zdDsKCgoKICAgIHN0YXRpYyBTb05vZGUgKiBnZXRCeU5hbWUoY29uc3QgU2JOYW1l
ICZuYW1lKTsKCiAgICBzdGF0aWMgaW50IGdldEJ5TmFtZShjb25zdCBTYk5hbWUgJm5hbWUsIFNv
Tm9kZUxpc3QgJmxpc3QpOwoKICBwdWJsaWM6CgoKCiAgICB2aXJ0dWFsIHZvaWQgZG9BY3Rpb24o
U29BY3Rpb24gKmFjdGlvbik7CgoKCiAgICB2aXJ0dWFsIHZvaWQgR0xSZW5kZXIoU29HTFJlbmRl
ckFjdGlvbiAqYWN0aW9uKTsKICAgIHZpcnR1YWwgdm9pZCBjYWxsYmFjayhTb0NhbGxiYWNrQWN0
aW9uICphY3Rpb24pOwogICAgdmlydHVhbCB2b2lkIGdldEJvdW5kaW5nQm94KFNvR2V0Qm91bmRp
bmdCb3hBY3Rpb24gKmFjdGlvbik7CiAgICB2aXJ0dWFsIHZvaWQgZ2V0TWF0cml4KFNvR2V0TWF0
cml4QWN0aW9uICphY3Rpb24pOwogICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFNvSGFuZGxl
RXZlbnRBY3Rpb24gKmFjdGlvbik7CiAgICB2aXJ0dWFsIHZvaWQgcGljayhTb1BpY2tBY3Rpb24g
KmFjdGlvbik7CiAgICB2aXJ0dWFsIHZvaWQgcmF5UGljayhTb1JheVBpY2tBY3Rpb24gKmFjdGlv
bik7CiAgICB2aXJ0dWFsIHZvaWQgc2VhcmNoKFNvU2VhcmNoQWN0aW9uICphY3Rpb24pOwogICAg
dmlydHVhbCB2b2lkIHdyaXRlKFNvV3JpdGVBY3Rpb24gKmFjdGlvbik7CgoKCgogICAgdmlydHVh
bCB2b2lkIEdMUmVuZGVyQmVsb3dQYXRoKFNvR0xSZW5kZXJBY3Rpb24gKmFjdGlvbik7CiAgICB2
aXJ0dWFsIHZvaWQgR0xSZW5kZXJJblBhdGgoU29HTFJlbmRlckFjdGlvbiAqYWN0aW9uKTsKICAg
IHZpcnR1YWwgdm9pZCBHTFJlbmRlck9mZlBhdGgoU29HTFJlbmRlckFjdGlvbiAqYWN0aW9uKTsK
CgoKCiAgICB2aXJ0dWFsIHZvaWQgZ3JhYkV2ZW50c1NldHVwKCk7CiAgICB2aXJ0dWFsIHZvaWQg
Z3JhYkV2ZW50c0NsZWFudXAoKTsKCiAgcHVibGljOgogICAgZW51bSBTdGFnZSB7CiAgICAgICAg
RklSU1RfSU5TVEFOQ0UsCiAgICAgICAgUFJPVE9fSU5TVEFOQ0UsCiAgICAgICAgT1RIRVJfSU5T
VEFOQ0UKICAgIH07CgoKICAgIHN0YXRpYyB2b2lkIGluaXRDbGFzcygpOwoKCiAgICBzdGF0aWMg
dm9pZCBpbml0Q2xhc3NlcygpOwoKCiAgICB2aXJ0dWFsIHZvaWQgc3RhcnROb3RpZnkoKTsKCgog
ICAgdmlydHVhbCB2b2lkIG5vdGlmeShTb05vdExpc3QgKmxpc3QpOwoKCiAgICB1aW50MzJfdCBn
ZXROb2RlSWQoKSBjb25zdCB7IHJldHVybiB1bmlxdWVJZDsgfQoKCiAgICBzdGF0aWMgdWludDMy
X3QgZ2V0TmV4dE5vZGVJZCgpIHsgcmV0dXJuIG5leHRVbmlxdWVJZDsgfQoKCiAgICB2aXJ0dWFs
IFNvQ2hpbGRMaXN0ICpnZXRDaGlsZHJlbigpIGNvbnN0OwoKCiAgICB2aXJ0dWFsIHZvaWQgd3Jp
dGVJbnN0YW5jZShTb091dHB1dCAqb3V0KTsKCgoKICAgIHN0YXRpYyBpbnQgZ2V0QWN0aW9uTWV0
aG9kSW5kZXgoU29UeXBlIHQpCiAgICAgICAgICAgIHsgcmV0dXJuIHQuZ2V0RGF0YSgpOyB9CgoK
CiAgICB2aXJ0dWFsIFNvTm9kZSAqIGFkZFRvQ29weURpY3QoKSBjb25zdDsKCgoKICAgIHZpcnR1
YWwgdm9pZCBjb3B5Q29udGVudHMoY29uc3QgU29GaWVsZENvbnRhaW5lciAqZnJvbUZDLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JCb29sIGNvcHlDb25uZWN0aW9ucyk7
CgoKICAgIHZpcnR1YWwgU29GaWVsZENvbnRhaW5lciAqIGNvcHlUaHJvdWdoQ29ubmVjdGlvbigp
IGNvbnN0OwoKICBwcm90ZWN0ZWQ6CgoKICAgIHN0YXRpYyBjb25zdCBTb0ZpZWxkRGF0YSAqKmdl
dEZpZWxkRGF0YVB0cigpIHsgcmV0dXJuIF9fbnVsbDsgfQoKCiAgICBTb05vZGUoKTsKICAgIHZp
cnR1YWwgflNvTm9kZSgpOwoKCiAgICB1aW50MzJfdCB1bmlxdWVJZDsKCgogICAgc3RhdGljIHVp
bnQzMl90IG5leHRVbmlxdWVJZDsKCgogICAgc3RhdGljIGludCBuZXh0QWN0aW9uTWV0aG9kSW5k
ZXg7CgogIHByaXZhdGU6CiAgICBzdGF0aWMgU29UeXBlIGNsYXNzVHlwZUlkOwoKICAgIFNiQm9v
bCBvdmVycmlkZTsKCgoKICAgIHN0YXRpYyB2b2lkIGNhbGxiYWNrUyhTb0FjdGlvbiAqLCBTb05v
ZGUgKik7CiAgICBzdGF0aWMgdm9pZCBHTFJlbmRlclMoU29BY3Rpb24gKiwgU29Ob2RlICopOwog
ICAgc3RhdGljIHZvaWQgZ2V0Qm91bmRpbmdCb3hTKFNvQWN0aW9uICosIFNvTm9kZSAqKTsKICAg
IHN0YXRpYyB2b2lkIGdldE1hdHJpeFMoU29BY3Rpb24gKiwgU29Ob2RlICopOwogICAgc3RhdGlj
IHZvaWQgaGFuZGxlRXZlbnRTKFNvQWN0aW9uICosIFNvTm9kZSAqKTsKICAgIHN0YXRpYyB2b2lk
IHBpY2tTKFNvQWN0aW9uICosIFNvTm9kZSAqKTsKICAgIHN0YXRpYyB2b2lkIHJheVBpY2tTKFNv
QWN0aW9uICosIFNvTm9kZSAqKTsKICAgIHN0YXRpYyB2b2lkIHNlYXJjaFMoU29BY3Rpb24gKiwg
U29Ob2RlICopOwogICAgc3RhdGljIHZvaWQgd3JpdGVTKFNvQWN0aW9uICosIFNvTm9kZSAqKTsK
fTsKIyA2MiAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvU29Q
YXRoLmgiIDIKIyA4MCAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50
b3IvU29QYXRoLmgiCmNsYXNzIFNvUGF0aExpc3Q7CmNsYXNzIFNvV3JpdGVBY3Rpb247CgpjbGFz
cyBTb1BhdGggOiBwdWJsaWMgU29CYXNlIHsKCiAgcHVibGljOgoKCiAgICBTb1BhdGgoKTsKCgoK
ICAgIFNvUGF0aChpbnQgYXBwcm94TGVuZ3RoKTsKCgoKICAgIFNvUGF0aChTb05vZGUgKm5vZGUp
OwoKCiAgICB2b2lkIHNldEhlYWQoU29Ob2RlICpub2RlKTsKCgoKICAgIHZvaWQgYXBwZW5kKGlu
dCBjaGlsZEluZGV4KTsKCgoKCgogICAgdm9pZCBhcHBlbmQoU29Ob2RlICpjaGlsZE5vZGUpOwoK
CgoKICAgIHZvaWQgYXBwZW5kKGNvbnN0IFNvUGF0aCAqZnJvbVBhdGgpOwoKCgogICAgdm9pZCBw
dXNoKGludCBjaGlsZEluZGV4KSB7IGFwcGVuZChjaGlsZEluZGV4KTsgfQogICAgdm9pZCBwb3Ao
KSB7IHRydW5jYXRlKGdldEZ1bGxMZW5ndGgoKSAtIDEpOyB9CgoKICAgIFNvTm9kZSAqIGdldEhl
YWQoKSBjb25zdCB7IHJldHVybiBub2Rlc1swXTsgfQogICAgU29Ob2RlICogZ2V0VGFpbCgpIGNv
bnN0IHsgcmV0dXJuIChub2Rlc1tnZXRMZW5ndGgoKSAtIDFdKTsgfQoKCiAgICBTb05vZGUgKiBn
ZXROb2RlKGludCBpKSBjb25zdCB7IHJldHVybiAobm9kZXNbaV0pOyB9CgoKCiAgICBTb05vZGUg
KiBnZXROb2RlRnJvbVRhaWwoaW50IGkpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gKG5vZGVzW2dl
dExlbmd0aCgpIC0gMSAtIGldKTsgfQoKCgogICAgaW50IGdldEluZGV4KGludCBpKSBjb25zdCB7
IHJldHVybiAoaW5kaWNlc1tpXSk7IH0KCgoKICAgIGludCBnZXRJbmRleEZyb21UYWlsKGludCBp
KSBjb25zdAogICAgICAgIHsgcmV0dXJuIChpbmRpY2VzW2dldExlbmd0aCgpIC0gMSAtIGldKTsg
fQoKCgogICAgaW50IGdldExlbmd0aCgpIGNvbnN0OwoKCiAgICB2b2lkIHRydW5jYXRlKGludCBz
dGFydCk7CgoKICAgIFNiQm9vbCBjb250YWluc05vZGUoY29uc3QgU29Ob2RlICpub2RlKSBjb25z
dDsKCgoKICAgIFNiQm9vbCBjb250YWluc1BhdGgoY29uc3QgU29QYXRoICpwYXRoKSBjb25zdDsK
CgoKCiAgICBpbnQgZmluZEZvcmsoY29uc3QgU29QYXRoICpwYXRoKSBjb25zdDsKCgoKCgoKICAg
IFNvUGF0aCAqIGNvcHkoaW50IHN0YXJ0RnJvbU5vZGVJbmRleCA9IDAsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IG51bU5vZGVzID0gMCkgY29uc3Q7CgoKICAgIGZyaWVuZCBpbnQg
b3BlcmF0b3IgPT0oY29uc3QgU29QYXRoICZwMSwgY29uc3QgU29QYXRoICZwMik7CgoKICAgIHZp
cnR1YWwgU29UeXBlIGdldFR5cGVJZCgpIGNvbnN0OwoKCiAgICBzdGF0aWMgU29UeXBlIGdldENs
YXNzVHlwZUlkKCkgeyByZXR1cm4gY2xhc3NUeXBlSWQ7IH0KCgoKICAgIHN0YXRpYyBTb1BhdGgg
KiBnZXRCeU5hbWUoY29uc3QgU2JOYW1lICZuYW1lKTsKCiAgICBzdGF0aWMgaW50IGdldEJ5TmFt
ZShjb25zdCBTYk5hbWUgJm5hbWUsIFNvUGF0aExpc3QgJmxpc3QpOwoKICBwdWJsaWM6CgogICAg
c3RhdGljIHZvaWQgaW5pdENsYXNzKCk7CgoKCiAgICB2b2lkIGluc2VydEluZGV4KFNvTm9kZSAq
cGFyZW50LCBpbnQgbmV3SW5kZXgpOwoKCgogICAgdm9pZCByZW1vdmVJbmRleChTb05vZGUgKnBh
cmVudCwgaW50IG9sZEluZGV4KTsKCgoKICAgIHZvaWQgcmVwbGFjZUluZGV4KFNvTm9kZSAqcGFy
ZW50LCBpbnQgaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb05v
ZGUgKm5ld0NoaWxkKTsKCgogICAgdmlydHVhbCB2b2lkIHdyaXRlKFNvV3JpdGVBY3Rpb24gKndy
aXRlQWN0aW9uKSBjb25zdDsKCgoKCiAgICBTYkJvb2wgaXNSZWxldmFudE5vdGlmaWNhdGlvbihT
b05vdExpc3QgKmxpc3QpIGNvbnN0OwoKICBwcm90ZWN0ZWQ6CgogICAgdm9pZCBhdWRpdFBhdGgo
U2JCb29sIGZsYWcpIHsgZG9BdWRpdG9ycyA9IGZsYWc7IH0KCiAgICB+U29QYXRoKCk7CgogIHBy
aXZhdGU6CiAgICBTb05vZGVMaXN0IG5vZGVzOwogICAgU2JJbnRMaXN0IGluZGljZXM7CiAgICBp
bnQgbnVtUHVibGljOwogICAgaW50IG1pbk51bVB1YmxpYzsKICAgIFNiQm9vbCBkb0F1ZGl0b3Jz
OwogICAgc3RhdGljIFNvVHlwZSBjbGFzc1R5cGVJZDsKCgogICAgaW50IGdldEZ1bGxMZW5ndGgo
KSBjb25zdCB7IHJldHVybiBub2Rlcy5nZXRMZW5ndGgoKTsgfQoKCgogICAgdm9pZCBhcHBlbmQo
U29Ob2RlICpub2RlLCBpbnQgaW5kZXgpOwoKCiAgICBzdGF0aWMgdm9pZCAqIGNyZWF0ZUluc3Rh
bmNlKCk7CgoKICAgIHZpcnR1YWwgU2JCb29sIHJlYWRJbnN0YW5jZShTb0lucHV0ICppbiwgdW5z
aWduZWQgc2hvcnQgZmxhZ3MpOwoKCiAgICB2b2lkIHRydW5jYXRlKGludCBzdGFydCwgU2JCb29s
IGRvTm90aWZ5KTsKCmZyaWVuZCBjbGFzcyBTb0Z1bGxQYXRoOwpmcmllbmQgY2xhc3MgU29UZW1w
UGF0aDsKZnJpZW5kIGNsYXNzIFNvQWN0aW9uOwp9OwojIDI1NyAiLi4vLi4vLi4vLi4vLi4vbGli
L2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvU29QYXRoLmgiCiBjbGFzcyBTb0Z1bGxQYXRoIDog
cHVibGljIFNvUGF0aCB7CgogIHB1YmxpYzoKCgoKCiAgICB2b2lkIHBvcCgpIHsgdHJ1bmNhdGUo
Z2V0RnVsbExlbmd0aCgpIC0gMSk7IH0KCiAgICBTb05vZGUgKiBnZXRUYWlsKCkgY29uc3QKICAg
ICAgICB7IHJldHVybiAobm9kZXNbZ2V0RnVsbExlbmd0aCgpIC0gMV0pOyB9CgogICAgU29Ob2Rl
ICogZ2V0Tm9kZUZyb21UYWlsKGludCBpKSBjb25zdAogICAgICAgIHsgcmV0dXJuIChub2Rlc1tn
ZXRGdWxsTGVuZ3RoKCkgLSAxIC0gaV0pOyB9CgogICAgaW50IGdldEluZGV4RnJvbVRhaWwoaW50
IGkpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gKGluZGljZXNbZ2V0RnVsbExlbmd0aCgpIC0gMSAt
IGldKTsgfQoKICAgIGludCBnZXRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBnZXRGdWxsTGVuZ3Ro
KCk7IH0KCiAgcHJpdmF0ZToKICAgIFNvRnVsbFBhdGgoaW50IGFwcHJveExlbmd0aCkgOiBTb1Bh
dGgoYXBwcm94TGVuZ3RoKSB7fQogICAgdmlydHVhbCB+U29GdWxsUGF0aCgpOwoKZnJpZW5kIGNs
YXNzIFNvVGVtcFBhdGg7Cn07CiMgMzAwICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5j
bHVkZS9JbnZlbnRvci9Tb1BhdGguaCIKY2xhc3MgU29MaWdodFBhdGggewoKICBwdWJsaWM6CgoK
ICAgIFNvTGlnaHRQYXRoKGludCBhcHByb3hMZW5ndGgpOwoKCgoKICAgIHZvaWQgc2V0SGVhZChT
b05vZGUgKm5vZGUpOwoKCiAgICB2b2lkIGFwcGVuZChpbnQgY2hpbGRJbmRleCkKICAgICAgICB7
IGluZGljZXMuYXBwZW5kKGNoaWxkSW5kZXgpO30KCgoKCiAgICB2b2lkIHB1c2goaW50IGNoaWxk
SW5kZXgpIHsgYXBwZW5kKGNoaWxkSW5kZXgpOyB9CiAgICB2b2lkIHB1c2goKSB7IGFwcGVuZCgt
MSk7fQogICAgdm9pZCBwb3AoKSB7IHRydW5jYXRlKGdldEZ1bGxMZW5ndGgoKSAtIDEpOyB9CiAg
ICB2b2lkIHNldFRhaWwoaW50IGNoaWxkSW5kZXgpCiAgICAgICAgICAgICAgICB7IGluZGljZXMu
c2V0KGdldEZ1bGxMZW5ndGgoKS0xLCh2b2lkICopKHVuc2lnbmVkIGxvbmcpY2hpbGRJbmRleCk7
fQogICAgU29Ob2RlICogZ2V0VGFpbCgpCiAgICAgICAgICAgICAgICB7IHJldHVybiBnZXROb2Rl
KGdldEZ1bGxMZW5ndGgoKS0xKTt9CgoKICAgIFNvTm9kZSAqIGdldEhlYWQoKSBjb25zdCB7IHJl
dHVybiBoZWFkTm9kZTsgfQoKCiAgICBTb05vZGUgKiBnZXROb2RlKGludCBpKSBjb25zdDsKCgoK
ICAgIGludCBnZXRGdWxsTGVuZ3RoKCkgY29uc3Qge3JldHVybiBpbmRpY2VzLmdldExlbmd0aCgp
O30KCgogICAgdm9pZCB0cnVuY2F0ZShpbnQgc3RhcnQpIHsgaW5kaWNlcy50cnVuY2F0ZShzdGFy
dCk7fQoKCgoKICAgIHZvaWQgbWFrZVRlbXBQYXRoKFNvVGVtcFBhdGggKikgY29uc3Q7CgogIHBy
aXZhdGU6CgogICAgflNvTGlnaHRQYXRoKCk7CiAgICBTb05vZGUgKiBoZWFkTm9kZTsKICAgIFNi
SW50TGlzdCBpbmRpY2VzOwoKCiAgZnJpZW5kIGNsYXNzIFNvQWN0aW9uOwp9OwojIDYxICIuLi8u
Li8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9taXNjL1NvVGVtcFBhdGgu
aCIgMgojIDc2ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9t
aXNjL1NvVGVtcFBhdGguaCIKIGNsYXNzIFNvVGVtcFBhdGggOiBwdWJsaWMgU29GdWxsUGF0aCB7
CiAgcHVibGljOgoKICAgIFNvVGVtcFBhdGgoaW50IGFwcHJveExlbmd0aCk7CiAgICB2aXJ0dWFs
IH5Tb1RlbXBQYXRoKCk7Cn07CiMgNjEgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNs
dWRlL0ludmVudG9yL2FjdGlvbnMvU29BY3Rpb24uaCIgMgoKCgpjbGFzcyBTb0FjdGlvbjsKY2xh
c3MgU29Db21wYWN0UGF0aExpc3Q7CmNsYXNzIFNvTm9kZTsKY2xhc3MgU29TdGF0ZTsKY2xhc3Mg
U29MaWdodFBhdGg7Cgp0eXBlZGVmIHZvaWQgKCpTb0FjdGlvbk1ldGhvZCkoU29BY3Rpb24gKiwg
U29Ob2RlICopOwojIDg1ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZl
bnRvci9hY3Rpb25zL1NvQWN0aW9uLmgiCiBjbGFzcyBTb0FjdGlvbk1ldGhvZExpc3QgOiBwdWJs
aWMgU2JQTGlzdCB7CgogIHB1YmxpYzoKCiAgICBTb0FjdGlvbk1ldGhvZExpc3QoU29BY3Rpb25N
ZXRob2RMaXN0ICpwYXJlbnRMaXN0KTsKCgoKCiAgICBTb0FjdGlvbk1ldGhvZCAmIG9wZXJhdG9y
IFtdKGludCBpKSBjb25zdAogICAgICAgIHsgcmV0dXJuICgoU29BY3Rpb25NZXRob2QgJikoKCoo
Y29uc3QgU2JQTGlzdCAqKXRoaXMpW2ldKSk7IH0KCgogICAgdm9pZCBhZGRNZXRob2QoU29UeXBl
IG5vZGVUeXBlLCBTb0FjdGlvbk1ldGhvZCBtZXRob2QpOwoKCgogICAgdm9pZCBzZXRVcCgpOwoK
ICBwcml2YXRlOgogICAgU29BY3Rpb25NZXRob2QgcGFyZW50TWV0aG9kKFNvVHlwZSk7CiAgICBT
b0FjdGlvbk1ldGhvZExpc3QgKnBhcmVudDsKICAgIGludCBudW1WYWxpZFR5cGVzOwoKCgogICAg
c3RhdGljIHZvaWQgZHVtbXlBY3Rpb24oU29BY3Rpb24gKiwgU29Ob2RlICopOwoKfTsKIyAxMjkg
Ii4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2FjdGlvbnMvU29B
Y3Rpb24uaCIKIGNsYXNzIFNvRW5hYmxlZEVsZW1lbnRzTGlzdCB7CgogIHB1YmxpYzoKCiAgICBT
b0VuYWJsZWRFbGVtZW50c0xpc3QoU29FbmFibGVkRWxlbWVudHNMaXN0ICpwYXJlbnRMaXN0KTsK
CgoKICAgIGNvbnN0IFNvVHlwZUxpc3QgJiBnZXRFbGVtZW50cygpIGNvbnN0OwoKCiAgICB2b2lk
IGVuYWJsZShTb1R5cGUgZWxlbWVudFR5cGUsIGludCBzdGFja0luZGV4KTsKCgoKICAgIHZvaWQg
bWVyZ2UoY29uc3QgU29FbmFibGVkRWxlbWVudHNMaXN0ICZsaXN0KTsKCgoKICAgIHN0YXRpYyBp
bnQgZ2V0Q291bnRlcigpIHsgcmV0dXJuIGNvdW50ZXI7IH0KCiAgcHJpdmF0ZToKCgoKICAgIHN0
YXRpYyBpbnQgY291bnRlcjsKCgoKICAgIGludCBzZXRVcENvdW50ZXI7CgoKCiAgICBTb1R5cGVM
aXN0IGVsZW1lbnRzOwoKCgogICAgU29FbmFibGVkRWxlbWVudHNMaXN0ICpwYXJlbnQ7Cn07CiMg
MTgxICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9hY3Rpb25z
L1NvQWN0aW9uLmgiCmNsYXNzIFNvQWN0aW9uIHsKCiAgcHVibGljOgoKCiAgICB2aXJ0dWFsIH5T
b0FjdGlvbigpOwoKCgogICAgc3RhdGljIFNvVHlwZSBnZXRDbGFzc1R5cGVJZCgpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBjbGFzc1R5cGVJZDsgfQoKCgogICAgdmlydHVh
bCBTb1R5cGUgZ2V0VHlwZUlkKCkgY29uc3QgPSAwOwoKCiAgICBTYkJvb2wgaXNPZlR5cGUoU29U
eXBlIHR5cGUpIGNvbnN0OwoKCgogICAgdmlydHVhbCB2b2lkIGFwcGx5KFNvTm9kZSAqbm9kZSk7
CgoKCgogICAgdmlydHVhbCB2b2lkIGFwcGx5KFNvUGF0aCAqcGF0aCk7CiMgMjIwICIuLi8uLi8u
Li8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9hY3Rpb25zL1NvQWN0aW9uLmgi
CiAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoY29uc3QgU29QYXRoTGlzdCAmcGF0aExpc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNiQm9vbCBvYmV5c1J1bGVzID0gMCk7CgoKCiAgICB2
aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVN0YXRlKCk7CgogIHB1YmxpYzoKCgogICAgc3RhdGljIHZv
aWQgbnVsbEFjdGlvbihTb0FjdGlvbiAqLCBTb05vZGUgKik7CgoKICAgIGVudW0gQXBwbGllZENv
ZGUgewogICAgICAgIE5PREUsCiAgICAgICAgUEFUSCwKICAgICAgICBQQVRIX0xJU1QKICAgIH07
CgoKCiAgICBlbnVtIFBhdGhDb2RlIHsKICAgICAgICBOT19QQVRILAogICAgICAgIElOX1BBVEgs
CiAgICAgICAgQkVMT1dfUEFUSCwKICAgICAgICBPRkZfUEFUSAogICAgfTsKCgogICAgQXBwbGll
ZENvZGUgZ2V0V2hhdEFwcGxpZWRUbygpIGNvbnN0IHsgcmV0dXJuIGFwcGxpZWRUby5jb2RlOyB9
CgoKCgogICAgU29Ob2RlICogZ2V0Tm9kZUFwcGxpZWRUbygpIGNvbnN0IHsgcmV0dXJuIGFwcGxp
ZWRUby5ub2RlOyB9CiAgICBTb1BhdGggKiBnZXRQYXRoQXBwbGllZFRvKCkgY29uc3QgeyByZXR1
cm4gYXBwbGllZFRvLnBhdGg7IH0KCgoKCiAgICBjb25zdCBTb1BhdGhMaXN0ICogZ2V0UGF0aExp
c3RBcHBsaWVkVG8oKSBjb25zdAogICAgICAgIHsgcmV0dXJuIGFwcGxpZWRUby5wYXRoTGlzdDsg
fQogICAgY29uc3QgU29QYXRoTGlzdCAqIGdldE9yaWdpbmFsUGF0aExpc3RBcHBsaWVkVG8oKSBj
b25zdAogICAgICAgIHsgcmV0dXJuIGFwcGxpZWRUby5vcmlnUGF0aExpc3Q7IH0KICAgIFNiQm9v
bCBpc0xhc3RQYXRoTGlzdEFwcGxpZWRUbygpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gYXBwbGll
ZFRvLmlzTGFzdFBhdGhMaXN0OyB9CgoKCgoKCgogICAgUGF0aENvZGUgZ2V0UGF0aENvZGUoaW50
ICZudW1JbmRpY2VzLCBjb25zdCBpbnQgKiZpbmRpY2VzKQogICAgICAgIHsgaWYgKGFwcGxpZWRU
by5jdXJQYXRoQ29kZSA9PSBJTl9QQVRIKSB7CiAgICAgICAgICAgICAgICB1c2VQYXRoQ29kZShu
dW1JbmRpY2VzLCBpbmRpY2VzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gYXBw
bGllZFRvLmN1clBhdGhDb2RlOwogICAgICAgIH0KCgoKICAgIHZvaWQgdHJhdmVyc2UoU29Ob2Rl
ICpub2RlKQogICAgICAgIHsgKCp0cmF2ZXJzYWxNZXRob2RzKVsKICAgICAgICAgICAgU29Ob2Rl
OjpnZXRBY3Rpb25NZXRob2RJbmRleChub2RlLT5nZXRUeXBlSWQoKSldKHRoaXMsIG5vZGUpOyB9
CgoKICAgIFNiQm9vbCBoYXNUZXJtaW5hdGVkKCkgY29uc3QgeyByZXR1cm4gdGVybWluYXRlZDsg
fQoKCgoKICAgIGNvbnN0IFNvUGF0aCAqIGdldEN1clBhdGgoKTsKCgogICAgU29TdGF0ZSAqIGdl
dFN0YXRlKCkgY29uc3QgeyByZXR1cm4gc3RhdGU7IH0KCiAgcHVibGljOgogICAgc3RhdGljIHZv
aWQgaW5pdENsYXNzKCk7CgoKICAgIHN0YXRpYyB2b2lkIGluaXRDbGFzc2VzKCk7CiMgMzEwICIu
Li8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9hY3Rpb25zL1NvQWN0
aW9uLmgiCiAgICBQYXRoQ29kZSBnZXRDdXJQYXRoQ29kZSgpIGNvbnN0IHsgcmV0dXJuIGFwcGxp
ZWRUby5jdXJQYXRoQ29kZTt9CiAgICB2b2lkIHB1c2hDdXJQYXRoKGludCBjaGlsZEluZGV4KTsK
ICAgIHZvaWQgcG9wQ3VyUGF0aChQYXRoQ29kZSBwcmV2UGF0aENvZGUpOwoKICAgIHZpcnR1YWwg
U29Ob2RlICogZ2V0Q3VyUGF0aFRhaWwoKTsKCgogICAgdm9pZCB1c2VQYXRoQ29kZShpbnQgJm51
bUluZGljZXMsIGNvbnN0IGludCAqJmluZGljZXMpOwoKCgoKCiAgICB2b2lkIHB1c2hDdXJQYXRo
KCkKICAgICAgICAgICAgICAgICAgICAgICAgeyBjdXJQYXRoLmFwcGVuZCgtMSk7IH0KICAgIHZv
aWQgcG9wUHVzaEN1clBhdGgoaW50IGNoaWxkSW5kZXgpCiAgICAgICAgICAgICAgICAgICAgICAg
IHsgY3VyUGF0aC5zZXRUYWlsKGNoaWxkSW5kZXgpO30KICAgIHZvaWQgcG9wQ3VyUGF0aCgpCiAg
ICAgICAgICAgICAgICAgICAgICAgIHsgY3VyUGF0aC5wb3AoKTsgfQoKICBwcm90ZWN0ZWQ6Cgog
ICAgU29BY3Rpb24oKTsKCgogICAgdmlydHVhbCBjb25zdCBTb0VuYWJsZWRFbGVtZW50c0xpc3Qg
JiBnZXRFbmFibGVkRWxlbWVudHMoKSBjb25zdDsKCgoKCiAgICB2aXJ0dWFsIHZvaWQgYmVnaW5U
cmF2ZXJzYWwoU29Ob2RlICpub2RlKTsKCgoKICAgIHZvaWQgc2V0VGVybWluYXRlZChTYkJvb2wg
ZmxhZykgeyB0ZXJtaW5hdGVkID0gZmxhZzsgfQojIDM1NCAiLi4vLi4vLi4vLi4vLi4vbGliL2Rh
dGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvYWN0aW9ucy9Tb0FjdGlvbi5oIgogICAgdmlydHVhbCBT
YkJvb2wgc2hvdWxkQ29tcGFjdFBhdGhMaXN0cygpIGNvbnN0OwoKICBwcm90ZWN0ZWQ6CiAgICBT
b1N0YXRlICpzdGF0ZTsKCgoKICAgIFNvQWN0aW9uTWV0aG9kTGlzdCAqdHJhdmVyc2FsTWV0aG9k
czsKCgogICAgc3RhdGljIFNvRW5hYmxlZEVsZW1lbnRzTGlzdCAqZW5hYmxlZEVsZW1lbnRzOwoK
CiAgICBzdGF0aWMgU29BY3Rpb25NZXRob2RMaXN0ICptZXRob2RzOwoKICBwcml2YXRlOgogICAg
c3RhdGljIFNvVHlwZSBjbGFzc1R5cGVJZDsKCgoKCiAgICBzdHJ1Y3QgQXBwbGllZFRvIHsKICAg
ICAgICBBcHBsaWVkQ29kZSBjb2RlOwogICAgICAgIFNvTm9kZSAqbm9kZTsKICAgICAgICBTb1Bh
dGggKnBhdGg7CiAgICAgICAgY29uc3QgU29QYXRoTGlzdCAqcGF0aExpc3Q7CiAgICAgICAgY29u
c3QgU29QYXRoTGlzdCAqb3JpZ1BhdGhMaXN0OwogICAgICAgIFNvQ29tcGFjdFBhdGhMaXN0ICpj
b21wYWN0UGF0aExpc3Q7CiAgICAgICAgaW50IGlzTGFzdFBhdGhMaXN0OwogICAgICAgIFBhdGhD
b2RlIGN1clBhdGhDb2RlOwogICAgfSBhcHBsaWVkVG87CgoKCiAgICBTYkJvb2wgaXNCZWluZ0Fw
cGxpZWQ7CgoKCiAgICBTb0xpZ2h0UGF0aCBjdXJQYXRoOwoKCgogICAgU29UZW1wUGF0aCAqIHRl
bXBQYXRoOwoKCgoKICAgIGludCBlbmFibGVkRWxlbWVudHNDb3VudGVyOwoKCiAgICBTYkJvb2wg
dGVybWluYXRlZDsKCgoKICAgIGludCBpbmRleDsKCgogICAgdm9pZCBzZXRVcFN0YXRlKCk7CgoK
ICAgIHZvaWQgY2xlYW5VcCgpOwoKCiAgICB2b2lkIHNwbGl0UGF0aExpc3QoY29uc3QgU29QYXRo
TGlzdCAmc29ydGVkTGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTb1BhdGhMaXN0ICZvcmlnUGF0aExpc3QpOwoKCiAgICB2b2lkIGFwcGx5KGNvbnN0IFNv
UGF0aExpc3QgJnNvcnRlZExpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFNvUGF0aExpc3QgJm9yaWdQYXRoTGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U2JCb29sIGlzTGFzdFBhdGhMaXN0KTsKCmZyaWVuZCBjbGFzcyBTb0RCOwp9OwojIDc0ICIuLi8u
Li8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9hY3Rpb25zL1NvU3ViQWN0
aW9uLmgiIDIKIyA2MiAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50
b3IvYWN0aW9ucy9Tb0dldEJvdW5kaW5nQm94QWN0aW9uLmgiIDIKIyA3NiAiLi4vLi4vLi4vLi4v
Li4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvYWN0aW9ucy9Tb0dldEJvdW5kaW5nQm94
QWN0aW9uLmgiCmNsYXNzIFNvR2V0Qm91bmRpbmdCb3hBY3Rpb24gOiBwdWJsaWMgU29BY3Rpb24g
ewoKICAgIHB1YmxpYzogdmlydHVhbCBTb1R5cGUgZ2V0VHlwZUlkKCkgY29uc3Q7IHN0YXRpYyBT
b1R5cGUgZ2V0Q2xhc3NUeXBlSWQoKSB7IHJldHVybiBjbGFzc1R5cGVJZDsgfSBwdWJsaWM6IHN0
YXRpYyB2b2lkIGFkZE1ldGhvZChTb1R5cGUgdCwgU29BY3Rpb25NZXRob2QgbWV0aG9kKSB7IG1l
dGhvZHMtPmFkZE1ldGhvZCh0LCBtZXRob2QpOyB9IHN0YXRpYyB2b2lkIGVuYWJsZUVsZW1lbnQo
U29UeXBlIHQsIGludCBzdGtJbmRleCkgeyBlbmFibGVkRWxlbWVudHMtPmVuYWJsZSh0LCBzdGtJ
bmRleCk7fSBwcm90ZWN0ZWQ6IHZpcnR1YWwgY29uc3QgU29FbmFibGVkRWxlbWVudHNMaXN0ICYg
Z2V0RW5hYmxlZEVsZW1lbnRzKCkgY29uc3Q7IHN0YXRpYyBTb0VuYWJsZWRFbGVtZW50c0xpc3Qg
KmVuYWJsZWRFbGVtZW50czsgc3RhdGljIFNvQWN0aW9uTWV0aG9kTGlzdCAqbWV0aG9kczsgcHJp
dmF0ZTogc3RhdGljIFNvVHlwZSBjbGFzc1R5cGVJZDsKCiAgcHVibGljOgoKCgoKICAgIFNvR2V0
Qm91bmRpbmdCb3hBY3Rpb24oY29uc3QgU2JWaWV3cG9ydFJlZ2lvbiAmdmlld3BvcnRSZWdpb24p
OwoKCiAgICB2aXJ0dWFsIH5Tb0dldEJvdW5kaW5nQm94QWN0aW9uKCk7CgoKCiAgICB2b2lkIHNl
dFZpZXdwb3J0UmVnaW9uKGNvbnN0IFNiVmlld3BvcnRSZWdpb24gJm5ld1JlZ2lvbik7CgoKCiAg
ICBjb25zdCBTYlZpZXdwb3J0UmVnaW9uICZnZXRWaWV3cG9ydFJlZ2lvbigpIGNvbnN0IHsgcmV0
dXJuIHZwUmVnaW9uOyB9CgoKCiAgICBTYkJveDNmIGdldEJvdW5kaW5nQm94KCkgY29uc3QgeyBy
ZXR1cm4gYm94LnByb2plY3QoKTsgfQoKCgogICAgU2JYZkJveDNmICYgZ2V0WGZCb3VuZGluZ0Jv
eCgpIHsgcmV0dXJuIGJveDsgfQoKCiAgICBjb25zdCBTYlZlYzNmICYgZ2V0Q2VudGVyKCkgY29u
c3Q7CgoKCgoKCgogICAgdm9pZCBzZXRJbkNhbWVyYVNwYWNlKFNiQm9vbCBmbGFnKSB7IGNhbWVy
YVNwYWNlID0gZmxhZzsgfQoKCgogICAgU2JCb29sIGlzSW5DYW1lcmFTcGFjZSgpIGNvbnN0IHsg
cmV0dXJuIGNhbWVyYVNwYWNlOyB9CgoKCiAgICBlbnVtIFJlc2V0VHlwZSB7CiAgICAgICAgVFJB
TlNGT1JNID0gMHgwMSwKICAgICAgICBCQk9YID0gMHgwMiwKICAgICAgICBBTEwgPSAweDAzCiAg
ICB9OwogICAgdm9pZCBzZXRSZXNldFBhdGgoY29uc3QgU29QYXRoICpwYXRoLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JCb29sIHJlc2V0QmVmb3JlID0gMSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2V0VHlwZSB3aGF0ID0gQUxMKTsKICAg
IGNvbnN0IFNvUGF0aCAqIGdldFJlc2V0UGF0aCgpIGNvbnN0IHsgcmV0dXJuIHJlc2V0UGF0aDsg
fQogICAgU2JCb29sIGlzUmVzZXRQYXRoKCkgY29uc3QgeyByZXR1cm4oIHJlc2V0UGF0aCAhPSBf
X251bGwpOyB9CiAgICBTYkJvb2wgaXNSZXNldEJlZm9yZSgpIGNvbnN0IHsgcmV0dXJuIHJlc2V0
QmVmb3JlOyB9CiAgICBTb0dldEJvdW5kaW5nQm94QWN0aW9uOjpSZXNldFR5cGUgZ2V0V2hhdFJl
c2V0KCkgY29uc3QgeyByZXR1cm4gcmVzZXRXaGF0O30KCiAgcHVibGljOgoKCgoKICAgIHZvaWQg
Y2hlY2tSZXNldEJlZm9yZSgpOwogICAgdm9pZCBjaGVja1Jlc2V0QWZ0ZXIoKTsKCgoKCiAgICB2
b2lkIGV4dGVuZEJ5KGNvbnN0IFNiQm94M2YgJmJveCk7CiAgICB2b2lkIGV4dGVuZEJ5KGNvbnN0
IFNiWGZCb3gzZiAmYm94KTsKIyAxNjAgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNs
dWRlL0ludmVudG9yL2FjdGlvbnMvU29HZXRCb3VuZGluZ0JveEFjdGlvbi5oIgogICAgdm9pZCBz
ZXRDZW50ZXIoY29uc3QgU2JWZWMzZiAmY2VudGVyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU2JCb29sIHRyYW5zZm9ybUNlbnRlcik7CiAgICBTYkJvb2wgaXNDZW50ZXJTZXQo
KSBjb25zdDsKICAgIHZvaWQgcmVzZXRDZW50ZXIoKTsKCiAgcHVibGljOgogICAgc3RhdGljIHZv
aWQgaW5pdENsYXNzKCk7CgogIHByb3RlY3RlZDoKCiAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UcmF2
ZXJzYWwoU29Ob2RlICpub2RlKTsKCiAgcHJpdmF0ZToKICAgIFNiWGZCb3gzZiBib3g7CiAgICBT
YlZlYzNmIGNlbnRlcjsKICAgIFNiQm9vbCBjYW1lcmFTcGFjZTsKICAgIGNvbnN0IFNvUGF0aCAq
cmVzZXRQYXRoOwogICAgU2JCb29sIHJlc2V0QmVmb3JlOwogICAgUmVzZXRUeXBlIHJlc2V0V2hh
dDsKICAgIFNiVmlld3BvcnRSZWdpb24gdnBSZWdpb247CiAgICBTYkJvb2wgY2VudGVyU2V0OwoK
CgogICAgdm9pZCBjaGVja1Jlc2V0KFNiQm9vbCByZXNldEJlZm9yZSk7Cn07CiMgNTUgIlNvQ29t
cHV0ZUJvdW5kaW5nQm94LmMrKyIgMgojIDEgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9p
bmNsdWRlL0ludmVudG9yL2VuZ2luZXMvU29Db21wdXRlQm91bmRpbmdCb3guaCIgMQojIDY1ICIu
Li8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9lbmdpbmVzL1NvQ29t
cHV0ZUJvdW5kaW5nQm94LmgiCiMgMSAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1
ZGUvSW52ZW50b3IvZmllbGRzL1NvU0ZQYXRoLmgiIDEKIyA1OSAiLi4vLi4vLi4vLi4vLi4vbGli
L2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZmllbGRzL1NvU0ZQYXRoLmgiCmNsYXNzIFNvUGF0
aDsKIyA3MiAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZmll
bGRzL1NvU0ZQYXRoLmgiCmNsYXNzIFNvU0ZQYXRoIDogcHVibGljIFNvU0ZpZWxkIHsKCgogICAg
cHVibGljOiB2aXJ0dWFsIFNvVHlwZSBnZXRUeXBlSWQoKSBjb25zdDsgc3RhdGljIFNvVHlwZSBn
ZXRDbGFzc1R5cGVJZCgpIHsgcmV0dXJuIGNsYXNzVHlwZUlkOyB9IGNvbnN0IFNvU0ZQYXRoICYg
b3BlcmF0b3IgPShjb25zdCBTb1NGUGF0aCAmZik7IHB1YmxpYzogdmlydHVhbCB2b2lkIGNvcHlG
cm9tKGNvbnN0IFNvRmllbGQgJmYpOyBzdGF0aWMgdm9pZCAqIGNyZWF0ZUluc3RhbmNlKCk7IHZp
cnR1YWwgU2JCb29sIGlzU2FtZShjb25zdCBTb0ZpZWxkICZmKSBjb25zdDsgcHJpdmF0ZTogc3Rh
dGljIFNvVHlwZSBjbGFzc1R5cGVJZDsgcHVibGljOiBTb1NGUGF0aCgpOyB2aXJ0dWFsIH5Tb1NG
UGF0aCgpOyBwcml2YXRlOiB2aXJ0dWFsIFNiQm9vbCByZWFkVmFsdWUoU29JbnB1dCAqaW4pOyB2
aXJ0dWFsIHZvaWQgd3JpdGVWYWx1ZShTb091dHB1dCAqb3V0KSBjb25zdDsgcHVibGljOiBTb1Bh
dGggKiBnZXRWYWx1ZSgpIGNvbnN0IHsgZXZhbHVhdGUoKTsgcmV0dXJuIHZhbHVlOyB9IHZvaWQg
c2V0VmFsdWUoU29QYXRoICogbmV3VmFsdWUpOyBTb1BhdGggKiBvcGVyYXRvciA9KFNvUGF0aCAq
IG5ld1ZhbHVlKSB7IHNldFZhbHVlKG5ld1ZhbHVlKTsgcmV0dXJuIHZhbHVlOyB9IGludCBvcGVy
YXRvciA9PShjb25zdCBTb1NGUGF0aCAmZikgY29uc3Q7IGludCBvcGVyYXRvciAhPShjb25zdCBT
b1NGUGF0aCAmZikgY29uc3QgeyByZXR1cm4gISAoKCp0aGlzKSA9PSBmKTsgfSBwcm90ZWN0ZWQ6
IFNvUGF0aCAqIHZhbHVlOwoKICBwdWJsaWM6CiAgICBzdGF0aWMgdm9pZCBpbml0Q2xhc3MoKTsK
CgogICAgdmlydHVhbCB2b2lkIG5vdGlmeShTb05vdExpc3QgKmxpc3QpOwoKCgogICAgdmlydHVh
bCB2b2lkIGZpeENvcHkoU2JCb29sIGNvcHlDb25uZWN0aW9ucyk7CgoKICAgIHZpcnR1YWwgU2JC
b29sIHJlZmVyZW5jZXNDb3B5KCkgY29uc3Q7CgogIHByaXZhdGU6CiAgICBTb05vZGUgKmhlYWQ7
CgoKCiAgICB2aXJ0dWFsIHZvaWQgY291bnRXcml0ZVJlZnMoU29PdXRwdXQgKm91dCkgY29uc3Q7
CgoKCiAgICB2b2lkIHNldFZhbChTb1BhdGggKm5ld1ZhbHVlKTsKfTsKIyA2NiAiLi4vLi4vLi4v
Li4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZW5naW5lcy9Tb0NvbXB1dGVCb3Vu
ZGluZ0JveC5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52
ZW50b3IvZmllbGRzL1NvU0ZOb2RlLmgiIDEKIyA1OSAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFi
YXNlL2luY2x1ZGUvSW52ZW50b3IvZmllbGRzL1NvU0ZOb2RlLmgiCmNsYXNzIFNvTm9kZTsKIyA3
MiAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZmllbGRzL1Nv
U0ZOb2RlLmgiCmNsYXNzIFNvU0ZOb2RlIDogcHVibGljIFNvU0ZpZWxkIHsKCgogICAgcHVibGlj
OiB2aXJ0dWFsIFNvVHlwZSBnZXRUeXBlSWQoKSBjb25zdDsgc3RhdGljIFNvVHlwZSBnZXRDbGFz
c1R5cGVJZCgpIHsgcmV0dXJuIGNsYXNzVHlwZUlkOyB9IGNvbnN0IFNvU0ZOb2RlICYgb3BlcmF0
b3IgPShjb25zdCBTb1NGTm9kZSAmZik7IHB1YmxpYzogdmlydHVhbCB2b2lkIGNvcHlGcm9tKGNv
bnN0IFNvRmllbGQgJmYpOyBzdGF0aWMgdm9pZCAqIGNyZWF0ZUluc3RhbmNlKCk7IHZpcnR1YWwg
U2JCb29sIGlzU2FtZShjb25zdCBTb0ZpZWxkICZmKSBjb25zdDsgcHJpdmF0ZTogc3RhdGljIFNv
VHlwZSBjbGFzc1R5cGVJZDsgcHVibGljOiBTb1NGTm9kZSgpOyB2aXJ0dWFsIH5Tb1NGTm9kZSgp
OyBwcml2YXRlOiB2aXJ0dWFsIFNiQm9vbCByZWFkVmFsdWUoU29JbnB1dCAqaW4pOyB2aXJ0dWFs
IHZvaWQgd3JpdGVWYWx1ZShTb091dHB1dCAqb3V0KSBjb25zdDsgcHVibGljOiBTb05vZGUgKiBn
ZXRWYWx1ZSgpIGNvbnN0IHsgZXZhbHVhdGUoKTsgcmV0dXJuIHZhbHVlOyB9IHZvaWQgc2V0VmFs
dWUoU29Ob2RlICogbmV3VmFsdWUpOyBTb05vZGUgKiBvcGVyYXRvciA9KFNvTm9kZSAqIG5ld1Zh
bHVlKSB7IHNldFZhbHVlKG5ld1ZhbHVlKTsgcmV0dXJuIHZhbHVlOyB9IGludCBvcGVyYXRvciA9
PShjb25zdCBTb1NGTm9kZSAmZikgY29uc3Q7IGludCBvcGVyYXRvciAhPShjb25zdCBTb1NGTm9k
ZSAmZikgY29uc3QgeyByZXR1cm4gISAoKCp0aGlzKSA9PSBmKTsgfSBwcm90ZWN0ZWQ6IFNvTm9k
ZSAqIHZhbHVlOwoKICBwdWJsaWM6CiAgICBzdGF0aWMgdm9pZCBpbml0Q2xhc3MoKTsKCgogICAg
dmlydHVhbCB2b2lkIGZpeENvcHkoU2JCb29sIGNvcHlDb25uZWN0aW9ucyk7CgoKICAgIHZpcnR1
YWwgU2JCb29sIHJlZmVyZW5jZXNDb3B5KCkgY29uc3Q7CgogIHByaXZhdGU6CgogICAgdmlydHVh
bCB2b2lkIGNvdW50V3JpdGVSZWZzKFNvT3V0cHV0ICpvdXQpIGNvbnN0OwoKCgogICAgdm9pZCBz
ZXRWYWwoU29Ob2RlICpuZXdWYWx1ZSk7Cn07CiMgNjcgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRh
YmFzZS9pbmNsdWRlL0ludmVudG9yL2VuZ2luZXMvU29Db21wdXRlQm91bmRpbmdCb3guaCIgMgoj
IDEgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2ZpZWxkcy9T
b1NGVmVjM2YuaCIgMQojIDY5ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9J
bnZlbnRvci9maWVsZHMvU29TRlZlYzNmLmgiCmNsYXNzIFNvU0ZWZWMzZiA6IHB1YmxpYyBTb1NG
aWVsZCB7CgogICAgcHVibGljOiB2aXJ0dWFsIFNvVHlwZSBnZXRUeXBlSWQoKSBjb25zdDsgc3Rh
dGljIFNvVHlwZSBnZXRDbGFzc1R5cGVJZCgpIHsgcmV0dXJuIGNsYXNzVHlwZUlkOyB9IGNvbnN0
IFNvU0ZWZWMzZiAmIG9wZXJhdG9yID0oY29uc3QgU29TRlZlYzNmICZmKTsgcHVibGljOiB2aXJ0
dWFsIHZvaWQgY29weUZyb20oY29uc3QgU29GaWVsZCAmZik7IHN0YXRpYyB2b2lkICogY3JlYXRl
SW5zdGFuY2UoKTsgdmlydHVhbCBTYkJvb2wgaXNTYW1lKGNvbnN0IFNvRmllbGQgJmYpIGNvbnN0
OyBwcml2YXRlOiBzdGF0aWMgU29UeXBlIGNsYXNzVHlwZUlkOyBwdWJsaWM6IFNvU0ZWZWMzZigp
OyB2aXJ0dWFsIH5Tb1NGVmVjM2YoKTsgcHJpdmF0ZTogdmlydHVhbCBTYkJvb2wgcmVhZFZhbHVl
KFNvSW5wdXQgKmluKTsgdmlydHVhbCB2b2lkIHdyaXRlVmFsdWUoU29PdXRwdXQgKm91dCkgY29u
c3Q7IHB1YmxpYzogY29uc3QgU2JWZWMzZiAmIGdldFZhbHVlKCkgY29uc3QgeyBldmFsdWF0ZSgp
OyByZXR1cm4gdmFsdWU7IH0gdm9pZCBzZXRWYWx1ZShjb25zdCBTYlZlYzNmICYgbmV3VmFsdWUp
OyBjb25zdCBTYlZlYzNmICYgb3BlcmF0b3IgPShjb25zdCBTYlZlYzNmICYgbmV3VmFsdWUpIHsg
c2V0VmFsdWUobmV3VmFsdWUpOyByZXR1cm4gdmFsdWU7IH0gaW50IG9wZXJhdG9yID09KGNvbnN0
IFNvU0ZWZWMzZiAmZikgY29uc3Q7IGludCBvcGVyYXRvciAhPShjb25zdCBTb1NGVmVjM2YgJmYp
IGNvbnN0IHsgcmV0dXJuICEgKCgqdGhpcykgPT0gZik7IH0gcHJvdGVjdGVkOiBTYlZlYzNmIHZh
bHVlOwoKICBwdWJsaWM6CgoKCgoKCiAgICB2b2lkIHNldFZhbHVlKGZsb2F0IHgsIGZsb2F0IHks
IGZsb2F0IHopOwoKCgogICAgdm9pZCBzZXRWYWx1ZShjb25zdCBmbG9hdCB4eXpbM10pOwoKCiAg
cHVibGljOgogICAgc3RhdGljIHZvaWQgaW5pdENsYXNzKCk7Cn07CiMgNjggIi4uLy4uLy4uLy4u
Ly4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2VuZ2luZXMvU29Db21wdXRlQm91bmRp
bmdCb3guaCIgMgoKY2xhc3MgU29HZXRCb3VuZGluZ0JveEFjdGlvbjsKIyA5OSAiLi4vLi4vLi4v
Li4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZW5naW5lcy9Tb0NvbXB1dGVCb3Vu
ZGluZ0JveC5oIgpjbGFzcyBTb0NvbXB1dGVCb3VuZGluZ0JveCA6IHB1YmxpYyBTb0VuZ2luZSB7
CgogICAgcHVibGljOiBzdGF0aWMgU29UeXBlIGdldENsYXNzVHlwZUlkKCkgeyByZXR1cm4gY2xh
c3NUeXBlSWQ7IH0gdmlydHVhbCBTb1R5cGUgZ2V0VHlwZUlkKCkgY29uc3Q7IHB1YmxpYzogdmly
dHVhbCBjb25zdCBTb0ZpZWxkRGF0YSAqIGdldEZpZWxkRGF0YSgpIGNvbnN0OyB2aXJ0dWFsIGNv
bnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqIGdldE91dHB1dERhdGEoKSBjb25zdDsgcHJvdGVjdGVk
OiBzdGF0aWMgY29uc3QgU29GaWVsZERhdGEgKiogZ2V0SW5wdXREYXRhUHRyKCkgeyByZXR1cm4g
KGNvbnN0IFNvRmllbGREYXRhICoqKSZpbnB1dERhdGE7IH0gc3RhdGljIGNvbnN0IFNvRW5naW5l
T3V0cHV0RGF0YSAqKiBnZXRPdXRwdXREYXRhUHRyKCkgeyByZXR1cm4gKGNvbnN0IFNvRW5naW5l
T3V0cHV0RGF0YSAqKikmb3V0cHV0RGF0YTsgfSBwcml2YXRlOiBzdGF0aWMgU29UeXBlIGNsYXNz
VHlwZUlkOyBzdGF0aWMgU2JCb29sIGZpcnN0SW5zdGFuY2U7IHN0YXRpYyBTb0ZpZWxkRGF0YSAq
aW5wdXREYXRhOyBzdGF0aWMgU29FbmdpbmVPdXRwdXREYXRhICpvdXRwdXREYXRhOyBzdGF0aWMg
Y29uc3QgU29GaWVsZERhdGEgKipwYXJlbnRJbnB1dERhdGE7IHN0YXRpYyBjb25zdCBTb0VuZ2lu
ZU91dHB1dERhdGEgKipwYXJlbnRPdXRwdXREYXRhOyBwcml2YXRlOiBzdGF0aWMgdm9pZCAqY3Jl
YXRlSW5zdGFuY2UoKTsKCiAgcHVibGljOgoKICAgIFNvU0ZOb2RlIG5vZGU7CiAgICBTb1NGUGF0
aCBwYXRoOwoKCiAgICBTb0VuZ2luZU91dHB1dCBtaW47CiAgICBTb0VuZ2luZU91dHB1dCBtYXg7
CiAgICBTb0VuZ2luZU91dHB1dCBib3hDZW50ZXI7CiAgICBTb0VuZ2luZU91dHB1dCBvYmplY3RD
ZW50ZXI7CgoKICAgIFNvQ29tcHV0ZUJvdW5kaW5nQm94KCk7CgoKCiAgICB2b2lkIHNldFZpZXdw
b3J0UmVnaW9uKGNvbnN0IFNiVmlld3BvcnRSZWdpb24gJnZwUmVnKTsKCiAgICBjb25zdCBTYlZp
ZXdwb3J0UmVnaW9uICZnZXRWaWV3cG9ydFJlZ2lvbigpIGNvbnN0OwoKICBwdWJsaWM6CiAgICBz
dGF0aWMgdm9pZCBpbml0Q2xhc3MoKTsKCiAgcHJvdGVjdGVkOgoKCiAgICB2aXJ0dWFsIHZvaWQg
aW5wdXRDaGFuZ2VkKFNvRmllbGQgKndoaWNoSW5wdXQpOwoKICBwcml2YXRlOgoKICAgIFNvR2V0
Qm91bmRpbmdCb3hBY3Rpb24gKmJiYTsKCgogICAgU2JCb29sIGdvdE5vZGU7CiAgICBTYkJvb2wg
Z290UGF0aDsKCgogICAgdmlydHVhbCB+U29Db21wdXRlQm91bmRpbmdCb3goKTsKCgogICAgdmly
dHVhbCB2b2lkIGV2YWx1YXRlKCk7Cn07CiMgNTYgIlNvQ29tcHV0ZUJvdW5kaW5nQm94LmMrKyIg
MgoKU29UeXBlIFNvQ29tcHV0ZUJvdW5kaW5nQm94OjpjbGFzc1R5cGVJZDsgU2JCb29sIFNvQ29t
cHV0ZUJvdW5kaW5nQm94OjpmaXJzdEluc3RhbmNlPTE7IFNvRW5naW5lT3V0cHV0RGF0YSAqU29D
b21wdXRlQm91bmRpbmdCb3g6Om91dHB1dERhdGE7IFNvRmllbGREYXRhICogU29Db21wdXRlQm91
bmRpbmdCb3g6OmlucHV0RGF0YTsgY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICoqU29Db21wdXRl
Qm91bmRpbmdCb3g6OnBhcmVudE91dHB1dERhdGE7IGNvbnN0IFNvRmllbGREYXRhICoqIFNvQ29t
cHV0ZUJvdW5kaW5nQm94OjpwYXJlbnRJbnB1dERhdGE7IFNvVHlwZSBTb0NvbXB1dGVCb3VuZGlu
Z0JveDo6Z2V0VHlwZUlkKCkgY29uc3QgeyByZXR1cm4gY2xhc3NUeXBlSWQ7IH0gY29uc3QgU29G
aWVsZERhdGEgKiBTb0NvbXB1dGVCb3VuZGluZ0JveDo6Z2V0RmllbGREYXRhKCkgY29uc3QgeyBy
ZXR1cm4gaW5wdXREYXRhOyB9IGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqIFNvQ29tcHV0ZUJv
dW5kaW5nQm94OjpnZXRPdXRwdXREYXRhKCkgY29uc3QgeyByZXR1cm4gb3V0cHV0RGF0YTsgfSB2
b2lkICogU29Db21wdXRlQm91bmRpbmdCb3g6OmNyZWF0ZUluc3RhbmNlKCkgeyByZXR1cm4gKHZv
aWQgKikobmV3IFNvQ29tcHV0ZUJvdW5kaW5nQm94KTsgfTsKIyA2NiAiU29Db21wdXRlQm91bmRp
bmdCb3guYysrIgpTb0NvbXB1dGVCb3VuZGluZ0JveDo6U29Db21wdXRlQm91bmRpbmdCb3goKQoK
CnsKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChpbnB1dERhdGEgPT0gX19udWxsKSB7IGlucHV0RGF0
YSA9IG5ldyBTb0ZpZWxkRGF0YShwYXJlbnRJbnB1dERhdGEgPyAqcGFyZW50SW5wdXREYXRhIDog
X19udWxsKTsgb3V0cHV0RGF0YSA9IG5ldyBTb0VuZ2luZU91dHB1dERhdGEocGFyZW50T3V0cHV0
RGF0YSA/ICpwYXJlbnRPdXRwdXREYXRhIDogX19udWxsKTsgfSBlbHNlIGZpcnN0SW5zdGFuY2Ug
PSAwOyBpc0J1aWx0SW4gPSAwOyB9IHdoaWxlKDApOwoKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChm
aXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFkZEZpZWxkKHRoaXMsICJub2RlIiwgJnRoaXMtPm5v
ZGUpOyB0aGlzLT5ub2RlLnNldFZhbHVlIChfX251bGwpOyB0aGlzLT5ub2RlLnNldENvbnRhaW5l
cih0aGlzKTsgfSB3aGlsZSgwKTsKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNl
KSBpbnB1dERhdGEtPmFkZEZpZWxkKHRoaXMsICJwYXRoIiwgJnRoaXMtPnBhdGgpOyB0aGlzLT5w
YXRoLnNldFZhbHVlIChfX251bGwpOyB0aGlzLT5wYXRoLnNldENvbnRhaW5lcih0aGlzKTsgfSB3
aGlsZSgwKTsKCiAgICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgb3V0cHV0RGF0
YS0+YWRkT3V0cHV0KHRoaXMsICJtaW4iLCAmdGhpcy0+bWluLCBTb1NGVmVjM2Y6OmdldENsYXNz
VHlwZUlkKCkpOyB0aGlzLT5taW4uc2V0Q29udGFpbmVyKHRoaXMpOyB9IHdoaWxlKDApOwogICAg
ZG8geyB3aGlsZSgwKTsgaWYgKGZpcnN0SW5zdGFuY2UpIG91dHB1dERhdGEtPmFkZE91dHB1dCh0
aGlzLCAibWF4IiwgJnRoaXMtPm1heCwgU29TRlZlYzNmOjpnZXRDbGFzc1R5cGVJZCgpKTsgdGhp
cy0+bWF4LnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsKICAgIGRvIHsgd2hpbGUoMCk7
IGlmIChmaXJzdEluc3RhbmNlKSBvdXRwdXREYXRhLT5hZGRPdXRwdXQodGhpcywgImJveENlbnRl
ciIsICZ0aGlzLT5ib3hDZW50ZXIsIFNvU0ZWZWMzZjo6Z2V0Q2xhc3NUeXBlSWQoKSk7IHRoaXMt
PmJveENlbnRlci5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxl
KDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgb3V0cHV0RGF0YS0+YWRkT3V0cHV0KHRoaXMsICJvYmpl
Y3RDZW50ZXIiLCAmdGhpcy0+b2JqZWN0Q2VudGVyLCBTb1NGVmVjM2Y6OmdldENsYXNzVHlwZUlk
KCkpOyB0aGlzLT5vYmplY3RDZW50ZXIuc2V0Q29udGFpbmVyKHRoaXMpOyB9IHdoaWxlKDApOwoK
ICAgIGlzQnVpbHRJbiA9IDE7CgoKICAgIGJiYSA9IF9fbnVsbDsKCgogICAgZ290Tm9kZSA9IGdv
dFBhdGggPSAwOwoKCiAgICBtaW4uZW5hYmxlKDApOwogICAgbWF4LmVuYWJsZSgwKTsKICAgIGJv
eENlbnRlci5lbmFibGUoMCk7CiAgICBvYmplY3RDZW50ZXIuZW5hYmxlKDApOwp9CiMgMTAyICJT
b0NvbXB1dGVCb3VuZGluZ0JveC5jKysiClNvQ29tcHV0ZUJvdW5kaW5nQm94Ojp+U29Db21wdXRl
Qm91bmRpbmdCb3goKQoKCnsKICAgIGlmIChiYmEgIT0gX19udWxsKQogICAgICAgIGRlbGV0ZSBi
YmE7Cn0KIyAxMTcgIlNvQ29tcHV0ZUJvdW5kaW5nQm94LmMrKyIKdm9pZApTb0NvbXB1dGVCb3Vu
ZGluZ0JveDo6c2V0Vmlld3BvcnRSZWdpb24oY29uc3QgU2JWaWV3cG9ydFJlZ2lvbiAmdnBSZWcp
CgoKewoKCiAgICBpZiAoYmJhID09IF9fbnVsbCkKICAgICAgICBiYmEgPSBuZXcgU29HZXRCb3Vu
ZGluZ0JveEFjdGlvbih2cFJlZyk7CiAgICBlbHNlCiAgICAgICAgYmJhLT5zZXRWaWV3cG9ydFJl
Z2lvbih2cFJlZyk7Cn0KIyAxMzcgIlNvQ29tcHV0ZUJvdW5kaW5nQm94LmMrKyIKY29uc3QgU2JW
aWV3cG9ydFJlZ2lvbiAmClNvQ29tcHV0ZUJvdW5kaW5nQm94OjpnZXRWaWV3cG9ydFJlZ2lvbigp
IGNvbnN0CgoKewoKCgogICAgaWYgKGJiYSA9PSBfX251bGwpIHsKICAgICAgICBTb0NvbXB1dGVC
b3VuZGluZ0JveCAqY2JiID0gKFNvQ29tcHV0ZUJvdW5kaW5nQm94ICopIHRoaXM7CiAgICAgICAg
Y2JiLT5iYmEgPSBuZXcgU29HZXRCb3VuZGluZ0JveEFjdGlvbihTYlZpZXdwb3J0UmVnaW9uKCkp
OwogICAgfQoKICAgIHJldHVybiBiYmEtPmdldFZpZXdwb3J0UmVnaW9uKCk7Cn0KIyAxNjEgIlNv
Q29tcHV0ZUJvdW5kaW5nQm94LmMrKyIKdm9pZApTb0NvbXB1dGVCb3VuZGluZ0JveDo6aW5wdXRD
aGFuZ2VkKFNvRmllbGQgKndoaWNoSW5wdXQpCgoKewoKICAgIGlmICh3aGljaElucHV0ID09ICZu
b2RlKQogICAgICAgIGdvdE5vZGUgPSAobm9kZS5nZXRWYWx1ZSgpICE9IF9fbnVsbCk7CiAgICBl
bHNlCiAgICAgICAgZ290UGF0aCA9IChwYXRoLmdldFZhbHVlKCkgIT0gX19udWxsKTsKCgogICAg
U2JCb29sIGVuYWJsZSA9IChnb3ROb2RlIHx8IGdvdFBhdGgpOwogICAgbWluLmVuYWJsZShlbmFi
bGUpOwogICAgbWF4LmVuYWJsZShlbmFibGUpOwogICAgYm94Q2VudGVyLmVuYWJsZShlbmFibGUp
OwogICAgb2JqZWN0Q2VudGVyLmVuYWJsZShlbmFibGUpOwp9CiMgMTg3ICJTb0NvbXB1dGVCb3Vu
ZGluZ0JveC5jKysiCnZvaWQKU29Db21wdXRlQm91bmRpbmdCb3g6OmV2YWx1YXRlKCkKCgp7Cgog
ICAgaWYgKGJiYSA9PSBfX251bGwpCiAgICAgICAgYmJhID0gbmV3IFNvR2V0Qm91bmRpbmdCb3hB
Y3Rpb24oU2JWaWV3cG9ydFJlZ2lvbigpKTsKCgoKICAgIGlmIChnb3RQYXRoKQogICAgICAgIGJi
YS0+YXBwbHkocGF0aC5nZXRWYWx1ZSgpKTsKICAgIGVsc2UKICAgICAgICBiYmEtPmFwcGx5KG5v
ZGUuZ2V0VmFsdWUoKSk7CgogICAgU2JCb3gzZiBib3ggPSBiYmEtPmdldEJvdW5kaW5nQm94KCk7
CiAgICBTYlZlYzNmIGJveENlbnQgPSBib3guZ2V0Q2VudGVyKCk7CiAgICBTYlZlYzNmIG9iakNl
bnQgPSBiYmEtPmdldENlbnRlcigpOwoKICAgIGRvIHsgaWYgKG1pbi5pc0VuYWJsZWQoKSkgeyBm
b3IgKGludCBfZW5nX291dF9pID0gMDsgX2VuZ19vdXRfaSA8IG1pbi5nZXROdW1Db25uZWN0aW9u
cygpOyBfZW5nX291dF9pKyspIHsgU29TRlZlYzNmICpfZW5nX291dF90ZW1wID0gKFNvU0ZWZWMz
ZiAqKSBtaW5bX2VuZ19vdXRfaV07IGlmICghX2VuZ19vdXRfdGVtcC0+aXNSZWFkT25seSgpKSB7
IF9lbmdfb3V0X3RlbXAtPnNldFZhbHVlKGJveC5nZXRNaW4oKSk7IH0gfSB9IH0gd2hpbGUoMCk7
CiAgICBkbyB7IGlmIChtYXguaXNFbmFibGVkKCkpIHsgZm9yIChpbnQgX2VuZ19vdXRfaSA9IDA7
IF9lbmdfb3V0X2kgPCBtYXguZ2V0TnVtQ29ubmVjdGlvbnMoKTsgX2VuZ19vdXRfaSsrKSB7IFNv
U0ZWZWMzZiAqX2VuZ19vdXRfdGVtcCA9IChTb1NGVmVjM2YgKikgbWF4W19lbmdfb3V0X2ldOyBp
ZiAoIV9lbmdfb3V0X3RlbXAtPmlzUmVhZE9ubHkoKSkgeyBfZW5nX291dF90ZW1wLT5zZXRWYWx1
ZShib3guZ2V0TWF4KCkpOyB9IH0gfSB9IHdoaWxlKDApOwogICAgZG8geyBpZiAoYm94Q2VudGVy
LmlzRW5hYmxlZCgpKSB7IGZvciAoaW50IF9lbmdfb3V0X2kgPSAwOyBfZW5nX291dF9pIDwgYm94
Q2VudGVyLmdldE51bUNvbm5lY3Rpb25zKCk7IF9lbmdfb3V0X2krKykgeyBTb1NGVmVjM2YgKl9l
bmdfb3V0X3RlbXAgPSAoU29TRlZlYzNmICopIGJveENlbnRlcltfZW5nX291dF9pXTsgaWYgKCFf
ZW5nX291dF90ZW1wLT5pc1JlYWRPbmx5KCkpIHsgX2VuZ19vdXRfdGVtcC0+c2V0VmFsdWUoYm94
Q2VudCk7IH0gfSB9IH0gd2hpbGUoMCk7CiAgICBkbyB7IGlmIChvYmplY3RDZW50ZXIuaXNFbmFi
bGVkKCkpIHsgZm9yIChpbnQgX2VuZ19vdXRfaSA9IDA7IF9lbmdfb3V0X2kgPCBvYmplY3RDZW50
ZXIuZ2V0TnVtQ29ubmVjdGlvbnMoKTsgX2VuZ19vdXRfaSsrKSB7IFNvU0ZWZWMzZiAqX2VuZ19v
dXRfdGVtcCA9IChTb1NGVmVjM2YgKikgb2JqZWN0Q2VudGVyW19lbmdfb3V0X2ldOyBpZiAoIV9l
bmdfb3V0X3RlbXAtPmlzUmVhZE9ubHkoKSkgeyBfZW5nX291dF90ZW1wLT5zZXRWYWx1ZShvYmpD
ZW50KTsgfSB9IH0gfSB3aGlsZSgwKTsKfQojIDQ3ICJTb0VuZ2luZXMuYysrIiAyCiMgMSAiU29D
b3VudGVyLmMrKyIgMQojIDU1ICJTb0NvdW50ZXIuYysrIgojIDEgIi4uLy4uLy4uLy4uLy4uL2xp
Yi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2VuZ2luZXMvU29Db3VudGVyLmgiIDEKIyA2MyAi
Li4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZW5naW5lcy9Tb0Nv
dW50ZXIuaCIKIyAxICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRv
ci9maWVsZHMvU29TRlNob3J0LmgiIDEKIyA2OCAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNl
L2luY2x1ZGUvSW52ZW50b3IvZmllbGRzL1NvU0ZTaG9ydC5oIgpjbGFzcyBTb1NGU2hvcnQgOiBw
dWJsaWMgU29TRmllbGQgewoKCiAgICBwdWJsaWM6IHZpcnR1YWwgU29UeXBlIGdldFR5cGVJZCgp
IGNvbnN0OyBzdGF0aWMgU29UeXBlIGdldENsYXNzVHlwZUlkKCkgeyByZXR1cm4gY2xhc3NUeXBl
SWQ7IH0gY29uc3QgU29TRlNob3J0ICYgb3BlcmF0b3IgPShjb25zdCBTb1NGU2hvcnQgJmYpOyBw
dWJsaWM6IHZpcnR1YWwgdm9pZCBjb3B5RnJvbShjb25zdCBTb0ZpZWxkICZmKTsgc3RhdGljIHZv
aWQgKiBjcmVhdGVJbnN0YW5jZSgpOyB2aXJ0dWFsIFNiQm9vbCBpc1NhbWUoY29uc3QgU29GaWVs
ZCAmZikgY29uc3Q7IHByaXZhdGU6IHN0YXRpYyBTb1R5cGUgY2xhc3NUeXBlSWQ7IHB1YmxpYzog
U29TRlNob3J0KCk7IHZpcnR1YWwgflNvU0ZTaG9ydCgpOyBwcml2YXRlOiB2aXJ0dWFsIFNiQm9v
bCByZWFkVmFsdWUoU29JbnB1dCAqaW4pOyB2aXJ0dWFsIHZvaWQgd3JpdGVWYWx1ZShTb091dHB1
dCAqb3V0KSBjb25zdDsgcHVibGljOiBzaG9ydCBnZXRWYWx1ZSgpIGNvbnN0IHsgZXZhbHVhdGUo
KTsgcmV0dXJuIHZhbHVlOyB9IHZvaWQgc2V0VmFsdWUoc2hvcnQgbmV3VmFsdWUpOyBzaG9ydCBv
cGVyYXRvciA9KHNob3J0IG5ld1ZhbHVlKSB7IHNldFZhbHVlKG5ld1ZhbHVlKTsgcmV0dXJuIHZh
bHVlOyB9IGludCBvcGVyYXRvciA9PShjb25zdCBTb1NGU2hvcnQgJmYpIGNvbnN0OyBpbnQgb3Bl
cmF0b3IgIT0oY29uc3QgU29TRlNob3J0ICZmKSBjb25zdCB7IHJldHVybiAhICgoKnRoaXMpID09
IGYpOyB9IHByb3RlY3RlZDogc2hvcnQgdmFsdWU7CgogIHB1YmxpYzoKICAgIHN0YXRpYyB2b2lk
IGluaXRDbGFzcygpOwp9OwojIDY0ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVk
ZS9JbnZlbnRvci9lbmdpbmVzL1NvQ291bnRlci5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vLi4vbGli
L2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZmllbGRzL1NvU0ZCb29sLmgiIDEKIyA2OCAiLi4v
Li4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZmllbGRzL1NvU0ZCb29s
LmgiCmNsYXNzIFNvU0ZCb29sIDogcHVibGljIFNvU0ZpZWxkIHsKCgogICAgcHVibGljOiB2aXJ0
dWFsIFNvVHlwZSBnZXRUeXBlSWQoKSBjb25zdDsgc3RhdGljIFNvVHlwZSBnZXRDbGFzc1R5cGVJ
ZCgpIHsgcmV0dXJuIGNsYXNzVHlwZUlkOyB9IGNvbnN0IFNvU0ZCb29sICYgb3BlcmF0b3IgPShj
b25zdCBTb1NGQm9vbCAmZik7IHB1YmxpYzogdmlydHVhbCB2b2lkIGNvcHlGcm9tKGNvbnN0IFNv
RmllbGQgJmYpOyBzdGF0aWMgdm9pZCAqIGNyZWF0ZUluc3RhbmNlKCk7IHZpcnR1YWwgU2JCb29s
IGlzU2FtZShjb25zdCBTb0ZpZWxkICZmKSBjb25zdDsgcHJpdmF0ZTogc3RhdGljIFNvVHlwZSBj
bGFzc1R5cGVJZDsgcHVibGljOiBTb1NGQm9vbCgpOyB2aXJ0dWFsIH5Tb1NGQm9vbCgpOyBwcml2
YXRlOiB2aXJ0dWFsIFNiQm9vbCByZWFkVmFsdWUoU29JbnB1dCAqaW4pOyB2aXJ0dWFsIHZvaWQg
d3JpdGVWYWx1ZShTb091dHB1dCAqb3V0KSBjb25zdDsgcHVibGljOiBTYkJvb2wgZ2V0VmFsdWUo
KSBjb25zdCB7IGV2YWx1YXRlKCk7IHJldHVybiB2YWx1ZTsgfSB2b2lkIHNldFZhbHVlKFNiQm9v
bCBuZXdWYWx1ZSk7IFNiQm9vbCBvcGVyYXRvciA9KFNiQm9vbCBuZXdWYWx1ZSkgeyBzZXRWYWx1
ZShuZXdWYWx1ZSk7IHJldHVybiB2YWx1ZTsgfSBpbnQgb3BlcmF0b3IgPT0oY29uc3QgU29TRkJv
b2wgJmYpIGNvbnN0OyBpbnQgb3BlcmF0b3IgIT0oY29uc3QgU29TRkJvb2wgJmYpIGNvbnN0IHsg
cmV0dXJuICEgKCgqdGhpcykgPT0gZik7IH0gcHJvdGVjdGVkOiBTYkJvb2wgdmFsdWU7CgogIHB1
YmxpYzoKICAgIHN0YXRpYyB2b2lkIGluaXRDbGFzcygpOwp9OwojIDY1ICIuLi8uLi8uLi8uLi8u
Li9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9lbmdpbmVzL1NvQ291bnRlci5oIiAyCiMg
MSAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZmllbGRzL1Nv
U0ZUcmlnZ2VyLmgiIDEKIyA2OCAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUv
SW52ZW50b3IvZmllbGRzL1NvU0ZUcmlnZ2VyLmgiCmNsYXNzIFNvU0ZUcmlnZ2VyIDogcHVibGlj
IFNvU0ZpZWxkIHsKCgogICAgcHVibGljOiB2aXJ0dWFsIFNvVHlwZSBnZXRUeXBlSWQoKSBjb25z
dDsgc3RhdGljIFNvVHlwZSBnZXRDbGFzc1R5cGVJZCgpIHsgcmV0dXJuIGNsYXNzVHlwZUlkOyB9
IGNvbnN0IFNvU0ZUcmlnZ2VyICYgb3BlcmF0b3IgPShjb25zdCBTb1NGVHJpZ2dlciAmZik7IHB1
YmxpYzogdmlydHVhbCB2b2lkIGNvcHlGcm9tKGNvbnN0IFNvRmllbGQgJmYpOyBzdGF0aWMgdm9p
ZCAqIGNyZWF0ZUluc3RhbmNlKCk7IHZpcnR1YWwgU2JCb29sIGlzU2FtZShjb25zdCBTb0ZpZWxk
ICZmKSBjb25zdDsgcHJpdmF0ZTogc3RhdGljIFNvVHlwZSBjbGFzc1R5cGVJZDsKICAgIHB1Ymxp
YzogU29TRlRyaWdnZXIoKTsgdmlydHVhbCB+U29TRlRyaWdnZXIoKTsKCiAgcHVibGljOgoKICAg
IHZvaWQgc2V0VmFsdWUoKSB7IHRvdWNoKCk7IH0KCgogICAgdm9pZCBnZXRWYWx1ZSgpIGNvbnN0
IHsgfQoKCiAgICB2aXJ0dWFsIHZvaWQgdG91Y2goKTsKCgoKICAgIGludCBvcGVyYXRvciA9PShj
b25zdCBTb1NGVHJpZ2dlciAmdCkgY29uc3Q7CiAgICBpbnQgb3BlcmF0b3IgIT0oY29uc3QgU29T
RlRyaWdnZXIgJnQpIGNvbnN0OwoKICBwdWJsaWM6CiAgICBzdGF0aWMgdm9pZCBpbml0Q2xhc3Mo
KTsKCgoKCiAgICB2aXJ0dWFsIHZvaWQgc3RhcnROb3RpZnkoKTsKCgoKICAgIHZpcnR1YWwgdm9p
ZCBub3RpZnkoU29Ob3RMaXN0ICpsaXN0KTsKCiAgcHJpdmF0ZToKCiAgICB2aXJ0dWFsIFNiQm9v
bCByZWFkVmFsdWUoU29JbnB1dCAqaW4pOwogICAgdmlydHVhbCB2b2lkIHdyaXRlVmFsdWUoU29P
dXRwdXQgKm91dCkgY29uc3Q7Cn07CiMgNjYgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9p
bmNsdWRlL0ludmVudG9yL2VuZ2luZXMvU29Db3VudGVyLmgiIDIKCgoKY2xhc3MgU29Db3VudGVy
IDogcHVibGljIFNvRW5naW5lIHsKCiAgICBwdWJsaWM6IHN0YXRpYyBTb1R5cGUgZ2V0Q2xhc3NU
eXBlSWQoKSB7IHJldHVybiBjbGFzc1R5cGVJZDsgfSB2aXJ0dWFsIFNvVHlwZSBnZXRUeXBlSWQo
KSBjb25zdDsgcHVibGljOiB2aXJ0dWFsIGNvbnN0IFNvRmllbGREYXRhICogZ2V0RmllbGREYXRh
KCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICogZ2V0T3V0cHV0RGF0
YSgpIGNvbnN0OyBwcm90ZWN0ZWQ6IHN0YXRpYyBjb25zdCBTb0ZpZWxkRGF0YSAqKiBnZXRJbnB1
dERhdGFQdHIoKSB7IHJldHVybiAoY29uc3QgU29GaWVsZERhdGEgKiopJmlucHV0RGF0YTsgfSBz
dGF0aWMgY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICoqIGdldE91dHB1dERhdGFQdHIoKSB7IHJl
dHVybiAoY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICoqKSZvdXRwdXREYXRhOyB9IHByaXZhdGU6
IHN0YXRpYyBTb1R5cGUgY2xhc3NUeXBlSWQ7IHN0YXRpYyBTYkJvb2wgZmlyc3RJbnN0YW5jZTsg
c3RhdGljIFNvRmllbGREYXRhICppbnB1dERhdGE7IHN0YXRpYyBTb0VuZ2luZU91dHB1dERhdGEg
Km91dHB1dERhdGE7IHN0YXRpYyBjb25zdCBTb0ZpZWxkRGF0YSAqKnBhcmVudElucHV0RGF0YTsg
c3RhdGljIGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqKnBhcmVudE91dHB1dERhdGE7IHByaXZh
dGU6IHN0YXRpYyB2b2lkICpjcmVhdGVJbnN0YW5jZSgpOwoKICBwdWJsaWM6CgogICAgU29TRlNo
b3J0IG1pbjsKICAgIFNvU0ZTaG9ydCBtYXg7CiAgICBTb1NGU2hvcnQgc3RlcDsKICAgIFNvU0ZU
cmlnZ2VyIHRyaWdnZXI7CiAgICBTb1NGU2hvcnQgcmVzZXQ7CgoKICAgIFNvRW5naW5lT3V0cHV0
IG91dHB1dDsKICAgIFNvRW5naW5lT3V0cHV0IHN5bmNPdXQ7CgoKICAgIFNvQ291bnRlcigpOwoK
ICBwdWJsaWM6CgogICAgc3RhdGljIHZvaWQgaW5pdENsYXNzKCk7CgogIHByb3RlY3RlZDoKICAg
IHZpcnR1YWwgdm9pZCBpbnB1dENoYW5nZWQoU29GaWVsZCAqd2hpY2hJbnB1dCk7CgogIHByaXZh
dGU6CiAgICBlbnVtIFRvZG8gewogICAgICAgIFJFQ0FMQyA9ICgxPDwwKSwKICAgICAgICBSRVNF
VCA9ICgxPDwxKSwKICAgICAgICBTVEVQID0gKDE8PDIpCiAgICB9OwogICAgdW5zaWduZWQgaW50
IHRvZG87CiAgICBpbnQgblN0YWdlczsKICAgIGludCBjdXJTdGFnZTsKICAgIHN0cnVjdCBTdGFn
ZSB7CiAgICAgICAgaW50IHZhbDsKICAgIH0gKnN0YWdlczsKCgogICAgflNvQ291bnRlcigpOwoK
CiAgICB2aXJ0dWFsIHZvaWQgZXZhbHVhdGUoKTsKfTsKIyA1NiAiU29Db3VudGVyLmMrKyIgMgoK
U29UeXBlIFNvQ291bnRlcjo6Y2xhc3NUeXBlSWQ7IFNiQm9vbCBTb0NvdW50ZXI6OmZpcnN0SW5z
dGFuY2U9MTsgU29FbmdpbmVPdXRwdXREYXRhICpTb0NvdW50ZXI6Om91dHB1dERhdGE7IFNvRmll
bGREYXRhICogU29Db3VudGVyOjppbnB1dERhdGE7IGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAq
KlNvQ291bnRlcjo6cGFyZW50T3V0cHV0RGF0YTsgY29uc3QgU29GaWVsZERhdGEgKiogU29Db3Vu
dGVyOjpwYXJlbnRJbnB1dERhdGE7IFNvVHlwZSBTb0NvdW50ZXI6OmdldFR5cGVJZCgpIGNvbnN0
IHsgcmV0dXJuIGNsYXNzVHlwZUlkOyB9IGNvbnN0IFNvRmllbGREYXRhICogU29Db3VudGVyOjpn
ZXRGaWVsZERhdGEoKSBjb25zdCB7IHJldHVybiBpbnB1dERhdGE7IH0gY29uc3QgU29FbmdpbmVP
dXRwdXREYXRhICogU29Db3VudGVyOjpnZXRPdXRwdXREYXRhKCkgY29uc3QgeyByZXR1cm4gb3V0
cHV0RGF0YTsgfSB2b2lkICogU29Db3VudGVyOjpjcmVhdGVJbnN0YW5jZSgpIHsgcmV0dXJuICh2
b2lkICopKG5ldyBTb0NvdW50ZXIpOyB9OwojIDY2ICJTb0NvdW50ZXIuYysrIgpTb0NvdW50ZXI6
OlNvQ291bnRlcigpCgoKewogICAgZG8geyB3aGlsZSgwKTsgaWYgKGlucHV0RGF0YSA9PSBfX251
bGwpIHsgaW5wdXREYXRhID0gbmV3IFNvRmllbGREYXRhKHBhcmVudElucHV0RGF0YSA/ICpwYXJl
bnRJbnB1dERhdGEgOiBfX251bGwpOyBvdXRwdXREYXRhID0gbmV3IFNvRW5naW5lT3V0cHV0RGF0
YShwYXJlbnRPdXRwdXREYXRhID8gKnBhcmVudE91dHB1dERhdGEgOiBfX251bGwpOyB9IGVsc2Ug
Zmlyc3RJbnN0YW5jZSA9IDA7IGlzQnVpbHRJbiA9IDA7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdo
aWxlKDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgaW5wdXREYXRhLT5hZGRGaWVsZCh0aGlzLCAibWlu
IiwgJnRoaXMtPm1pbik7IHRoaXMtPm1pbi5zZXRWYWx1ZSAoMCk7IHRoaXMtPm1pbi5zZXRDb250
YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0
YW5jZSkgaW5wdXREYXRhLT5hZGRGaWVsZCh0aGlzLCAibWF4IiwgJnRoaXMtPm1heCk7IHRoaXMt
Pm1heC5zZXRWYWx1ZSAoMSk7IHRoaXMtPm1heC5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUo
MCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgaW5wdXREYXRhLT5hZGRG
aWVsZCh0aGlzLCAic3RlcCIsICZ0aGlzLT5zdGVwKTsgdGhpcy0+c3RlcC5zZXRWYWx1ZSAoMSk7
IHRoaXMtPnN0ZXAuc2V0Q29udGFpbmVyKHRoaXMpOyB9IHdoaWxlKDApOwogICAgZG8geyB3aGls
ZSgwKTsgaWYgKGZpcnN0SW5zdGFuY2UpIGlucHV0RGF0YS0+YWRkRmllbGQodGhpcywgInRyaWdn
ZXIiLCAmdGhpcy0+dHJpZ2dlcik7IHRoaXMtPnRyaWdnZXIuc2V0VmFsdWUgKCk7IHRoaXMtPnRy
aWdnZXIuc2V0Q29udGFpbmVyKHRoaXMpOyB9IHdoaWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsg
aWYgKGZpcnN0SW5zdGFuY2UpIGlucHV0RGF0YS0+YWRkRmllbGQodGhpcywgInJlc2V0IiwgJnRo
aXMtPnJlc2V0KTsgdGhpcy0+cmVzZXQuc2V0VmFsdWUgKDApOyB0aGlzLT5yZXNldC5zZXRDb250
YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CgoKCiAgICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJ
bnN0YW5jZSkgb3V0cHV0RGF0YS0+YWRkT3V0cHV0KHRoaXMsICJvdXRwdXQiLCAmdGhpcy0+b3V0
cHV0LCBTb1NGU2hvcnQ6OmdldENsYXNzVHlwZUlkKCkpOyB0aGlzLT5vdXRwdXQuc2V0Q29udGFp
bmVyKHRoaXMpOyB9IHdoaWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYgKGZpcnN0SW5zdGFu
Y2UpIG91dHB1dERhdGEtPmFkZE91dHB1dCh0aGlzLCAic3luY091dCIsICZ0aGlzLT5zeW5jT3V0
LCBTb1NGVHJpZ2dlcjo6Z2V0Q2xhc3NUeXBlSWQoKSk7IHRoaXMtPnN5bmNPdXQuc2V0Q29udGFp
bmVyKHRoaXMpOyB9IHdoaWxlKDApOwoKICAgIHRvZG8gPSBSRUNBTEM7CiAgICBzdGFnZXMgPSBf
X251bGw7CiAgICBjdXJTdGFnZSA9IDA7CiAgICBpc0J1aWx0SW4gPSAxOwp9CiMgOTUgIlNvQ291
bnRlci5jKysiClNvQ291bnRlcjo6flNvQ291bnRlcigpCgoKewogICAgZGVsZXRlIFtdIHN0YWdl
czsKfQojIDExMSAiU29Db3VudGVyLmMrKyIKdm9pZApTb0NvdW50ZXI6OmlucHV0Q2hhbmdlZChT
b0ZpZWxkICp3aGljaElucHV0KQoKCnsKICAgIFNiQm9vbCBzeW5jRW5hYmxlID0gMDsKCiAgICBp
ZiAod2hpY2hJbnB1dCA9PSAmbWluIHx8CiAgICAgICAgd2hpY2hJbnB1dCA9PSAmbWF4IHx8CiAg
ICAgICAgd2hpY2hJbnB1dCA9PSAmc3RlcCkgewogICAgICAgIHRvZG8gfD0gUkVDQUxDOwogICAg
fQogICAgZWxzZSBpZiAod2hpY2hJbnB1dCA9PSAmcmVzZXQpIHsKICAgICAgICB0b2RvIHw9IFJF
U0VUOwogICAgfQogICAgZWxzZSBpZiAod2hpY2hJbnB1dCA9PSAmdHJpZ2dlciAmJiBzdGFnZXMg
IT0gX19udWxsKSB7CiAgICAgICAgdG9kbyB8PSBTVEVQOwogICAgICAgIGlmIChjdXJTdGFnZSA9
PSBuU3RhZ2VzLTEpCiAgICAgICAgICAgIHN5bmNFbmFibGUgPSAxOwogICAgfQoKICAgIHN5bmNP
dXQuZW5hYmxlKHN5bmNFbmFibGUpOwojIDE2MSAiU29Db3VudGVyLmMrKyIKICAgIGlmICh0b2Rv
JlJFQ0FMQykgewoKCiAgICAgICAgaW50IG1uID0gbWluLmdldFZhbHVlKCk7CiAgICAgICAgaW50
IG14ID0gbWF4LmdldFZhbHVlKCk7CiAgICAgICAgaW50IHN0cCA9IHN0ZXAuZ2V0VmFsdWUoKTsK
ICAgICAgICBpZiAoc3RwID09IDApIHN0cCA9IDE7CiAgICAgICAgaWYgKG1uID4gbXgpIHsgaW50
IHQgPSBtbjsgbW49bXg7IG14PXQ7IH0KCgogICAgICAgIGRlbGV0ZSBbXSBzdGFnZXM7CiAgICAg
ICAgblN0YWdlcyA9IDErYWJzKChteC1tbikvc3RwKTsKICAgICAgICBzdGFnZXMgPSBuZXcgc3Ry
dWN0IFN0YWdlW25TdGFnZXNdOwoKCiAgICAgICAgd2hpbGUgKGN1clN0YWdlID49IG5TdGFnZXMp
IGN1clN0YWdlIC09IG5TdGFnZXM7CgoKICAgICAgICBmb3IgKGludCBpPTAsIHZhbD1zdHA+MD9t
bjpteDsgaTxuU3RhZ2VzOyBpKyssIHZhbCs9c3RwKSB7CiAgICAgICAgICAgIHN0YWdlc1tpXS52
YWwgPSB2YWw7CiAgICAgICAgfQojIDE5MyAiU29Db3VudGVyLmMrKyIKICAgIH0KCgogICAgaWYg
KHRvZG8mUkVTRVQpIHsKCiAgICAgICAgY29uc3QgaW50IHIgPSByZXNldC5nZXRWYWx1ZSgpOwog
ICAgICAgIGludCBzdHAgPSBzdGVwLmdldFZhbHVlKCk7CiAgICAgICAgaWYgKHN0cD09MCkgc3Rw
ID0gMTsKCgogICAgICAgIGN1clN0YWdlID0gKHItc3RhZ2VzWzBdLnZhbCkvc3RwOwogICAgICAg
IGlmIChjdXJTdGFnZSA8IDApCiAgICAgICAgICAgIGN1clN0YWdlID0gMDsKICAgICAgICBlbHNl
IGlmIChjdXJTdGFnZSA+PSBuU3RhZ2VzKQogICAgICAgICAgICBjdXJTdGFnZSA9IG5TdGFnZXMt
MTsKCgoKCgoKCiAgICB9CgogICAgaWYgKHRvZG8gJiBTVEVQKSB7CiAgICAgICAgY3VyU3RhZ2Ur
KzsKICAgICAgICBpZiAoY3VyU3RhZ2UgPT0gblN0YWdlcykKICAgICAgICAgICAgY3VyU3RhZ2Ug
PSAwOwoKCgoKCgogICAgfQoKICAgIHRvZG8gPSAwOwoKCgoKfQojIDI0MyAiU29Db3VudGVyLmMr
KyIKdm9pZApTb0NvdW50ZXI6OmV2YWx1YXRlKCkKCgp7CgoKCgoKCiAgICBkbyB7IGlmIChvdXRw
dXQuaXNFbmFibGVkKCkpIHsgZm9yIChpbnQgX2VuZ19vdXRfaSA9IDA7IF9lbmdfb3V0X2kgPCBv
dXRwdXQuZ2V0TnVtQ29ubmVjdGlvbnMoKTsgX2VuZ19vdXRfaSsrKSB7IFNvU0ZTaG9ydCAqX2Vu
Z19vdXRfdGVtcCA9IChTb1NGU2hvcnQgKikgb3V0cHV0W19lbmdfb3V0X2ldOyBpZiAoIV9lbmdf
b3V0X3RlbXAtPmlzUmVhZE9ubHkoKSkgeyBfZW5nX291dF90ZW1wLT5zZXRWYWx1ZShzdGFnZXNb
Y3VyU3RhZ2VdLnZhbCk7IH0gfSB9IH0gd2hpbGUoMCk7Cn0KIyA0OCAiU29FbmdpbmVzLmMrKyIg
MgojIDEgIlNvRWxhcHNlZFRpbWUuYysrIiAxCiMgNTUgIlNvRWxhcHNlZFRpbWUuYysrIgojIDEg
Ii4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2VuZ2luZXMvU29F
bGFwc2VkVGltZS5oIiAxCiMgNjQgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRl
L0ludmVudG9yL2VuZ2luZXMvU29FbGFwc2VkVGltZS5oIgojIDEgIi4uLy4uLy4uLy4uLy4uL2xp
Yi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2ZpZWxkcy9Tb1NGRmxvYXQuaCIgMQojIDY4ICIu
Li8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9maWVsZHMvU29TRkZs
b2F0LmgiCmNsYXNzIFNvU0ZGbG9hdCA6IHB1YmxpYyBTb1NGaWVsZCB7CgoKICAgIHB1YmxpYzog
dmlydHVhbCBTb1R5cGUgZ2V0VHlwZUlkKCkgY29uc3Q7IHN0YXRpYyBTb1R5cGUgZ2V0Q2xhc3NU
eXBlSWQoKSB7IHJldHVybiBjbGFzc1R5cGVJZDsgfSBjb25zdCBTb1NGRmxvYXQgJiBvcGVyYXRv
ciA9KGNvbnN0IFNvU0ZGbG9hdCAmZik7IHB1YmxpYzogdmlydHVhbCB2b2lkIGNvcHlGcm9tKGNv
bnN0IFNvRmllbGQgJmYpOyBzdGF0aWMgdm9pZCAqIGNyZWF0ZUluc3RhbmNlKCk7IHZpcnR1YWwg
U2JCb29sIGlzU2FtZShjb25zdCBTb0ZpZWxkICZmKSBjb25zdDsgcHJpdmF0ZTogc3RhdGljIFNv
VHlwZSBjbGFzc1R5cGVJZDsgcHVibGljOiBTb1NGRmxvYXQoKTsgdmlydHVhbCB+U29TRkZsb2F0
KCk7IHByaXZhdGU6IHZpcnR1YWwgU2JCb29sIHJlYWRWYWx1ZShTb0lucHV0ICppbik7IHZpcnR1
YWwgdm9pZCB3cml0ZVZhbHVlKFNvT3V0cHV0ICpvdXQpIGNvbnN0OyBwdWJsaWM6IGZsb2F0IGdl
dFZhbHVlKCkgY29uc3QgeyBldmFsdWF0ZSgpOyByZXR1cm4gdmFsdWU7IH0gdm9pZCBzZXRWYWx1
ZShmbG9hdCBuZXdWYWx1ZSk7IGZsb2F0IG9wZXJhdG9yID0oZmxvYXQgbmV3VmFsdWUpIHsgc2V0
VmFsdWUobmV3VmFsdWUpOyByZXR1cm4gdmFsdWU7IH0gaW50IG9wZXJhdG9yID09KGNvbnN0IFNv
U0ZGbG9hdCAmZikgY29uc3Q7IGludCBvcGVyYXRvciAhPShjb25zdCBTb1NGRmxvYXQgJmYpIGNv
bnN0IHsgcmV0dXJuICEgKCgqdGhpcykgPT0gZik7IH0gcHJvdGVjdGVkOiBmbG9hdCB2YWx1ZTsK
CiAgcHVibGljOgogICAgc3RhdGljIHZvaWQgaW5pdENsYXNzKCk7Cn07CiMgNjUgIi4uLy4uLy4u
Ly4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2VuZ2luZXMvU29FbGFwc2VkVGlt
ZS5oIiAyCiMgMSAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3Iv
ZmllbGRzL1NvU0ZUaW1lLmgiIDEKIyA2OSAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2lu
Y2x1ZGUvSW52ZW50b3IvZmllbGRzL1NvU0ZUaW1lLmgiCmNsYXNzIFNvU0ZUaW1lIDogcHVibGlj
IFNvU0ZpZWxkIHsKCiAgICBwdWJsaWM6IHZpcnR1YWwgU29UeXBlIGdldFR5cGVJZCgpIGNvbnN0
OyBzdGF0aWMgU29UeXBlIGdldENsYXNzVHlwZUlkKCkgeyByZXR1cm4gY2xhc3NUeXBlSWQ7IH0g
Y29uc3QgU29TRlRpbWUgJiBvcGVyYXRvciA9KGNvbnN0IFNvU0ZUaW1lICZmKTsgcHVibGljOiB2
aXJ0dWFsIHZvaWQgY29weUZyb20oY29uc3QgU29GaWVsZCAmZik7IHN0YXRpYyB2b2lkICogY3Jl
YXRlSW5zdGFuY2UoKTsgdmlydHVhbCBTYkJvb2wgaXNTYW1lKGNvbnN0IFNvRmllbGQgJmYpIGNv
bnN0OyBwcml2YXRlOiBzdGF0aWMgU29UeXBlIGNsYXNzVHlwZUlkOyBwdWJsaWM6IFNvU0ZUaW1l
KCk7IHZpcnR1YWwgflNvU0ZUaW1lKCk7IHByaXZhdGU6IHZpcnR1YWwgU2JCb29sIHJlYWRWYWx1
ZShTb0lucHV0ICppbik7IHZpcnR1YWwgdm9pZCB3cml0ZVZhbHVlKFNvT3V0cHV0ICpvdXQpIGNv
bnN0OyBwdWJsaWM6IGNvbnN0IFNiVGltZSAmIGdldFZhbHVlKCkgY29uc3QgeyBldmFsdWF0ZSgp
OyByZXR1cm4gdmFsdWU7IH0gdm9pZCBzZXRWYWx1ZShjb25zdCBTYlRpbWUgJiBuZXdWYWx1ZSk7
IGNvbnN0IFNiVGltZSAmIG9wZXJhdG9yID0oY29uc3QgU2JUaW1lICYgbmV3VmFsdWUpIHsgc2V0
VmFsdWUobmV3VmFsdWUpOyByZXR1cm4gdmFsdWU7IH0gaW50IG9wZXJhdG9yID09KGNvbnN0IFNv
U0ZUaW1lICZmKSBjb25zdDsgaW50IG9wZXJhdG9yICE9KGNvbnN0IFNvU0ZUaW1lICZmKSBjb25z
dCB7IHJldHVybiAhICgoKnRoaXMpID09IGYpOyB9IHByb3RlY3RlZDogU2JUaW1lIHZhbHVlOwoK
ICBwdWJsaWM6CiAgICBzdGF0aWMgdm9pZCBpbml0Q2xhc3MoKTsKfTsKIyA2NiAiLi4vLi4vLi4v
Li4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZW5naW5lcy9Tb0VsYXBzZWRUaW1l
LmgiIDIKCgoKCmNsYXNzIFNvRWxhcHNlZFRpbWUgOiBwdWJsaWMgU29FbmdpbmUgewoKICAgIHB1
YmxpYzogc3RhdGljIFNvVHlwZSBnZXRDbGFzc1R5cGVJZCgpIHsgcmV0dXJuIGNsYXNzVHlwZUlk
OyB9IHZpcnR1YWwgU29UeXBlIGdldFR5cGVJZCgpIGNvbnN0OyBwdWJsaWM6IHZpcnR1YWwgY29u
c3QgU29GaWVsZERhdGEgKiBnZXRGaWVsZERhdGEoKSBjb25zdDsgdmlydHVhbCBjb25zdCBTb0Vu
Z2luZU91dHB1dERhdGEgKiBnZXRPdXRwdXREYXRhKCkgY29uc3Q7IHByb3RlY3RlZDogc3RhdGlj
IGNvbnN0IFNvRmllbGREYXRhICoqIGdldElucHV0RGF0YVB0cigpIHsgcmV0dXJuIChjb25zdCBT
b0ZpZWxkRGF0YSAqKikmaW5wdXREYXRhOyB9IHN0YXRpYyBjb25zdCBTb0VuZ2luZU91dHB1dERh
dGEgKiogZ2V0T3V0cHV0RGF0YVB0cigpIHsgcmV0dXJuIChjb25zdCBTb0VuZ2luZU91dHB1dERh
dGEgKiopJm91dHB1dERhdGE7IH0gcHJpdmF0ZTogc3RhdGljIFNvVHlwZSBjbGFzc1R5cGVJZDsg
c3RhdGljIFNiQm9vbCBmaXJzdEluc3RhbmNlOyBzdGF0aWMgU29GaWVsZERhdGEgKmlucHV0RGF0
YTsgc3RhdGljIFNvRW5naW5lT3V0cHV0RGF0YSAqb3V0cHV0RGF0YTsgc3RhdGljIGNvbnN0IFNv
RmllbGREYXRhICoqcGFyZW50SW5wdXREYXRhOyBzdGF0aWMgY29uc3QgU29FbmdpbmVPdXRwdXRE
YXRhICoqcGFyZW50T3V0cHV0RGF0YTsgcHJpdmF0ZTogc3RhdGljIHZvaWQgKmNyZWF0ZUluc3Rh
bmNlKCk7CgogIHB1YmxpYzoKCiAgICBTb1NGVGltZSB0aW1lSW47CiAgICBTb1NGRmxvYXQgc3Bl
ZWQ7CiAgICBTb1NGQm9vbCBvbjsKICAgIFNvU0ZCb29sIHBhdXNlOwogICAgU29TRlRyaWdnZXIg
cmVzZXQ7CiMgOTkgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9y
L2VuZ2luZXMvU29FbGFwc2VkVGltZS5oIgogICAgU29FbmdpbmVPdXRwdXQgdGltZU91dDsKCgog
ICAgU29FbGFwc2VkVGltZSgpOwoKICBwdWJsaWM6CgogICAgc3RhdGljIHZvaWQgaW5pdENsYXNz
KCk7CgogIHByb3RlY3RlZDoKCgogICAgdmlydHVhbCB2b2lkIGlucHV0Q2hhbmdlZChTb0ZpZWxk
ICp3aGljaElucHV0KTsKCgoKICAgIHZpcnR1YWwgdm9pZCB3cml0ZUluc3RhbmNlKFNvT3V0cHV0
ICpvdXQpOwoKCgoKICAgIHZpcnR1YWwgU2JCb29sIHJlYWRJbnN0YW5jZShTb0lucHV0ICppbiwg
dW5zaWduZWQgc2hvcnQgZmxhZ3MpOwoKICBwcml2YXRlOgogICAgZW51bSBUb2RvIHsKICAgICAg
ICBDSEVDS19PTiA9ICgxPDwwKSwKICAgICAgICBDSEVDS19QQVVTRSA9ICgxPDwxKSwKICAgICAg
ICBSRVNFVCA9ICgxPDwyKQogICAgfTsKICAgIGVudW0gU3RhdGUgewogICAgICAgIFNUT1BQRUQs
CiAgICAgICAgUlVOTklORywKICAgICAgICBQQVVTRUQKICAgIH07CgogICAgZW51bSBTdGF0ZSBz
dGF0ZTsKICAgIHVuc2lnbmVkIGludCB0b2RvOwogICAgU2JUaW1lIHByZXZUaW1lT2ZEYXk7Cgog
ICAgU2JUaW1lIHByZXZUaW1lT3V0OwoKICAgIGZsb2F0IHByZXZDbG9ja1RpbWU7CgoKCiAgICB+
U29FbGFwc2VkVGltZSgpOwoKCiAgICB2aXJ0dWFsIHZvaWQgZXZhbHVhdGUoKTsKfTsKIyA1NiAi
U29FbGFwc2VkVGltZS5jKysiIDIKClNvVHlwZSBTb0VsYXBzZWRUaW1lOjpjbGFzc1R5cGVJZDsg
U2JCb29sIFNvRWxhcHNlZFRpbWU6OmZpcnN0SW5zdGFuY2U9MTsgU29FbmdpbmVPdXRwdXREYXRh
ICpTb0VsYXBzZWRUaW1lOjpvdXRwdXREYXRhOyBTb0ZpZWxkRGF0YSAqIFNvRWxhcHNlZFRpbWU6
OmlucHV0RGF0YTsgY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICoqU29FbGFwc2VkVGltZTo6cGFy
ZW50T3V0cHV0RGF0YTsgY29uc3QgU29GaWVsZERhdGEgKiogU29FbGFwc2VkVGltZTo6cGFyZW50
SW5wdXREYXRhOyBTb1R5cGUgU29FbGFwc2VkVGltZTo6Z2V0VHlwZUlkKCkgY29uc3QgeyByZXR1
cm4gY2xhc3NUeXBlSWQ7IH0gY29uc3QgU29GaWVsZERhdGEgKiBTb0VsYXBzZWRUaW1lOjpnZXRG
aWVsZERhdGEoKSBjb25zdCB7IHJldHVybiBpbnB1dERhdGE7IH0gY29uc3QgU29FbmdpbmVPdXRw
dXREYXRhICogU29FbGFwc2VkVGltZTo6Z2V0T3V0cHV0RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG91
dHB1dERhdGE7IH0gdm9pZCAqIFNvRWxhcHNlZFRpbWU6OmNyZWF0ZUluc3RhbmNlKCkgeyByZXR1
cm4gKHZvaWQgKikobmV3IFNvRWxhcHNlZFRpbWUpOyB9OwojIDY2ICJTb0VsYXBzZWRUaW1lLmMr
KyIKU29FbGFwc2VkVGltZTo6U29FbGFwc2VkVGltZSgpCgoKewogICAgZG8geyB3aGlsZSgwKTsg
aWYgKGlucHV0RGF0YSA9PSBfX251bGwpIHsgaW5wdXREYXRhID0gbmV3IFNvRmllbGREYXRhKHBh
cmVudElucHV0RGF0YSA/ICpwYXJlbnRJbnB1dERhdGEgOiBfX251bGwpOyBvdXRwdXREYXRhID0g
bmV3IFNvRW5naW5lT3V0cHV0RGF0YShwYXJlbnRPdXRwdXREYXRhID8gKnBhcmVudE91dHB1dERh
dGEgOiBfX251bGwpOyB9IGVsc2UgZmlyc3RJbnN0YW5jZSA9IDA7IGlzQnVpbHRJbiA9IDA7IH0g
d2hpbGUoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgaW5wdXREYXRh
LT5hZGRGaWVsZCh0aGlzLCAidGltZUluIiwgJnRoaXMtPnRpbWVJbik7IHRoaXMtPnRpbWVJbi5z
ZXRWYWx1ZSAoU2JUaW1lOjp6ZXJvKCkpOyB0aGlzLT50aW1lSW4uc2V0Q29udGFpbmVyKHRoaXMp
OyB9IHdoaWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYgKGZpcnN0SW5zdGFuY2UpIGlucHV0
RGF0YS0+YWRkRmllbGQodGhpcywgInNwZWVkIiwgJnRoaXMtPnNwZWVkKTsgdGhpcy0+c3BlZWQu
c2V0VmFsdWUgKDEuMCk7IHRoaXMtPnNwZWVkLnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgw
KTsKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFkZEZp
ZWxkKHRoaXMsICJvbiIsICZ0aGlzLT5vbik7IHRoaXMtPm9uLnNldFZhbHVlICgxKTsgdGhpcy0+
b24uc2V0Q29udGFpbmVyKHRoaXMpOyB9IHdoaWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYg
KGZpcnN0SW5zdGFuY2UpIGlucHV0RGF0YS0+YWRkRmllbGQodGhpcywgInBhdXNlIiwgJnRoaXMt
PnBhdXNlKTsgdGhpcy0+cGF1c2Uuc2V0VmFsdWUgKDApOyB0aGlzLT5wYXVzZS5zZXRDb250YWlu
ZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5j
ZSkgaW5wdXREYXRhLT5hZGRGaWVsZCh0aGlzLCAicmVzZXQiLCAmdGhpcy0+cmVzZXQpOyB0aGlz
LT5yZXNldC5zZXRWYWx1ZSAoKTsgdGhpcy0+cmVzZXQuc2V0Q29udGFpbmVyKHRoaXMpOyB9IHdo
aWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYgKGZpcnN0SW5zdGFuY2UpIG91dHB1dERhdGEt
PmFkZE91dHB1dCh0aGlzLCAidGltZU91dCIsICZ0aGlzLT50aW1lT3V0LCBTb1NGVGltZTo6Z2V0
Q2xhc3NUeXBlSWQoKSk7IHRoaXMtPnRpbWVPdXQuc2V0Q29udGFpbmVyKHRoaXMpOyB9IHdoaWxl
KDApOwoKICAgIHN0YXRlID0gUlVOTklORzsKICAgIHRvZG8gPSBSRVNFVDsKICAgIGlzQnVpbHRJ
biA9IDE7CgoKICAgIHRpbWVJbi5jb25uZWN0RnJvbShTb0RCOjpnZXRHbG9iYWxGaWVsZCgicmVh
bFRpbWUiKSk7Cn0KIyA5MyAiU29FbGFwc2VkVGltZS5jKysiClNvRWxhcHNlZFRpbWU6On5Tb0Vs
YXBzZWRUaW1lKCkKCgp7Cn0KIyAxMDcgIlNvRWxhcHNlZFRpbWUuYysrIgp2b2lkClNvRWxhcHNl
ZFRpbWU6OndyaXRlSW5zdGFuY2UoU29PdXRwdXQgKm91dCkKCgp7CgoKCiAgICBTYkJvb2wgdGlt
ZUluV2FzRGVmYXVsdCA9IHRpbWVJbi5pc0RlZmF1bHQoKTsKICAgIFNiQm9vbCB0aW1lSW5Db25u
ZWN0aW9uRW5hYmxlZCA9IHRpbWVJbi5pc0Nvbm5lY3Rpb25FbmFibGVkKCk7CiAgICBTb0ZpZWxk
ICp0aW1lSW5Db25uZWN0aW9uID0gX19udWxsOwogICAgdGltZUluLmdldENvbm5lY3RlZEZpZWxk
KHRpbWVJbkNvbm5lY3Rpb24pOwogICAgaWYgKHRpbWVJbkNvbm5lY3Rpb24gPT0gU29EQjo6Z2V0
R2xvYmFsRmllbGQoInJlYWxUaW1lIikpIHsKICAgICAgICB0aW1lSW4uZW5hYmxlQ29ubmVjdGlv
bigwKTsKICAgICAgICB0aW1lSW4uc2V0RGVmYXVsdCgxKTsKICAgIH0KICAgIFNvRW5naW5lOjp3
cml0ZUluc3RhbmNlKG91dCk7CgogICAgdGltZUluLmVuYWJsZUNvbm5lY3Rpb24odGltZUluQ29u
bmVjdGlvbkVuYWJsZWQpOwogICAgdGltZUluLnNldERlZmF1bHQodGltZUluV2FzRGVmYXVsdCk7
Cn0KIyAxMzggIlNvRWxhcHNlZFRpbWUuYysrIgpTYkJvb2wKU29FbGFwc2VkVGltZTo6cmVhZElu
c3RhbmNlKFNvSW5wdXQgKmluLCB1bnNpZ25lZCBzaG9ydCBmbGFncykKCgp7CiAgICBTYkJvb2wg
cmVzdWx0ID0gU29FbmdpbmU6OnJlYWRJbnN0YW5jZShpbiwgZmxhZ3MpOwogICAgdG9kbyB8PSBS
RVNFVDsKICAgIFNvRmllbGQgKnRpbWVJbkNvbm5lY3Rpb24gPSBfX251bGw7CiAgICB0aW1lSW4u
Z2V0Q29ubmVjdGVkRmllbGQodGltZUluQ29ubmVjdGlvbik7CiAgICBpZiAodGltZUluQ29ubmVj
dGlvbiA9PSBTb0RCOjpnZXRHbG9iYWxGaWVsZCgicmVhbFRpbWUiKSkgewogICAgICAgIHRpbWVJ
bi5kaXNjb25uZWN0KCk7CiAgICAgICAgdGltZUluLmNvbm5lY3RGcm9tKHRpbWVJbkNvbm5lY3Rp
b24pOwogICAgfQoKICAgIHJldHVybiByZXN1bHQ7Cn0KIyAxNjIgIlNvRWxhcHNlZFRpbWUuYysr
Igp2b2lkClNvRWxhcHNlZFRpbWU6OmlucHV0Q2hhbmdlZChTb0ZpZWxkICp3aGljaElucHV0KQoK
CnsKICAgIGlmICh3aGljaElucHV0ID09ICZvbikgewogICAgICAgIHRvZG8gfD0gQ0hFQ0tfT047
CiAgICB9CiAgICBpZiAod2hpY2hJbnB1dCA9PSAmcGF1c2UpIHsKICAgICAgICB0b2RvIHw9IENI
RUNLX1BBVVNFOwogICAgfQogICAgaWYgKHdoaWNoSW5wdXQgPT0gJnJlc2V0KSB7CiAgICAgICAg
dG9kbyB8PSBSRVNFVDsKICAgIH0KCiAgICBTYkJvb2wgZW5hYmxlID0gdG9kbyB8fCAoc3RhdGUg
PT0gUlVOTklORyk7CiAgICB0aW1lT3V0LmVuYWJsZShlbmFibGUpOwp9CiMgMTg4ICJTb0VsYXBz
ZWRUaW1lLmMrKyIKdm9pZApTb0VsYXBzZWRUaW1lOjpldmFsdWF0ZSgpCgoKewogICAgU2JUaW1l
IG5vdyA9IHRpbWVJbi5nZXRWYWx1ZSgpOwogICAgU3RhdGUgb2xkU3RhdGUgPSBzdGF0ZTsKCgoK
CgoKCiAgICBpZiAodG9kbyZSRVNFVCkgewogICAgICAgIHJlc2V0LmdldFZhbHVlKCk7CiAgICAg
ICAgcHJldlRpbWVPZkRheSA9IG5vdzsKICAgICAgICBwcmV2VGltZU91dCA9IFNiVGltZTo6emVy
bygpOwogICAgICAgIHByZXZDbG9ja1RpbWUgPSBwcmV2VGltZU91dC5nZXRWYWx1ZSgpOwogICAg
fQoKCgogICAgaWYgKHRvZG8gJiBDSEVDS19PTiB8fCB0b2RvICYgQ0hFQ0tfUEFVU0UpIHsKICAg
ICAgICBpZiAob24uZ2V0VmFsdWUoKSkKICAgICAgICAgICAgaWYgKHBhdXNlLmdldFZhbHVlKCkp
CiAgICAgICAgICAgICAgICBzdGF0ZSA9IFBBVVNFRDsKICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgc3RhdGUgPSBSVU5OSU5HOwogICAgICAgIGVsc2UKICAgICAgICAgICAgc3RhdGUg
PSBTVE9QUEVEOwogICAgfQojIDI0MSAiU29FbGFwc2VkVGltZS5jKysiCiAgICBTYlRpbWUgZGVs
dGFDbG9ja1QgPSBzcGVlZC5nZXRWYWx1ZSgpICogKG5vdyAtIHByZXZUaW1lT2ZEYXkpOwoKCgoK
ICAgIFNiVGltZSBjbG9ja1RpbWU7CiAgICBTYlRpbWUgdE91dDsKCiAgICBzd2l0Y2ggKHN0YXRl
KSB7CiAgICAgIGNhc2UgUlVOTklORzoKCgogICAgICAgIGlmIChvbGRTdGF0ZSA9PSBTVE9QUEVE
KQogICAgICAgICAgICBjbG9ja1RpbWUgPSBwcmV2VGltZU91dDsKICAgICAgICBlbHNlCiAgICAg
ICAgICAgIGNsb2NrVGltZSA9IFNiVGltZShwcmV2Q2xvY2tUaW1lKSArIGRlbHRhQ2xvY2tUOwog
ICAgICAgIHRPdXQgPSBjbG9ja1RpbWU7CiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIFNUT1BQ
RUQ6CiAgICAgICAgY2xvY2tUaW1lID0gcHJldlRpbWVPdXQ7CiAgICAgICAgdE91dCA9IHByZXZU
aW1lT3V0OwogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBQQVVTRUQ6CiAgICAgICAgY2xvY2tU
aW1lID0gU2JUaW1lKHByZXZDbG9ja1RpbWUpICsgZGVsdGFDbG9ja1Q7CiAgICAgICAgdE91dCA9
IHByZXZUaW1lT3V0OwogICAgICAgIGJyZWFrOwogICAgfQoKCiAgICBwcmV2VGltZU9mRGF5ID0g
bm93OwogICAgcHJldlRpbWVPdXQgPSB0T3V0OwogICAgcHJldkNsb2NrVGltZSA9IGNsb2NrVGlt
ZS5nZXRWYWx1ZSgpOwoKCgoKICAgIGRvIHsgaWYgKHRpbWVPdXQuaXNFbmFibGVkKCkpIHsgZm9y
IChpbnQgX2VuZ19vdXRfaSA9IDA7IF9lbmdfb3V0X2kgPCB0aW1lT3V0LmdldE51bUNvbm5lY3Rp
b25zKCk7IF9lbmdfb3V0X2krKykgeyBTb1NGVGltZSAqX2VuZ19vdXRfdGVtcCA9IChTb1NGVGlt
ZSAqKSB0aW1lT3V0W19lbmdfb3V0X2ldOyBpZiAoIV9lbmdfb3V0X3RlbXAtPmlzUmVhZE9ubHko
KSkgeyBfZW5nX291dF90ZW1wLT5zZXRWYWx1ZSh0T3V0KTsgfSB9IH0gfSB3aGlsZSgwKTsKCiAg
ICB0b2RvID0gMDsKfQojIDQ5ICJTb0VuZ2luZXMuYysrIiAyCiMgMSAiU29FbmdpbmUuYysrIiAx
CiMgNTggIlNvRW5naW5lLmMrKyIKIyAxICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5j
bHVkZS9JbnZlbnRvci9lbmdpbmVzL1NvRmllbGRDb252ZXJ0ZXIuaCIgMQojIDgwICIuLi8uLi8u
Li8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9lbmdpbmVzL1NvRmllbGRDb252
ZXJ0ZXIuaCIKIGNsYXNzIFNvRmllbGRDb252ZXJ0ZXIgOiBwdWJsaWMgU29FbmdpbmUgewoKICAg
IHB1YmxpYzogc3RhdGljIFNvVHlwZSBnZXRDbGFzc1R5cGVJZCgpIHsgcmV0dXJuIGNsYXNzVHlw
ZUlkOyB9IHZpcnR1YWwgU29UeXBlIGdldFR5cGVJZCgpIGNvbnN0OyBwdWJsaWM6IHZpcnR1YWwg
Y29uc3QgU29GaWVsZERhdGEgKiBnZXRGaWVsZERhdGEoKSBjb25zdDsgdmlydHVhbCBjb25zdCBT
b0VuZ2luZU91dHB1dERhdGEgKiBnZXRPdXRwdXREYXRhKCkgY29uc3Q7IHByb3RlY3RlZDogc3Rh
dGljIGNvbnN0IFNvRmllbGREYXRhICoqIGdldElucHV0RGF0YVB0cigpIHsgcmV0dXJuIChjb25z
dCBTb0ZpZWxkRGF0YSAqKikmaW5wdXREYXRhOyB9IHN0YXRpYyBjb25zdCBTb0VuZ2luZU91dHB1
dERhdGEgKiogZ2V0T3V0cHV0RGF0YVB0cigpIHsgcmV0dXJuIChjb25zdCBTb0VuZ2luZU91dHB1
dERhdGEgKiopJm91dHB1dERhdGE7IH0gcHJpdmF0ZTogc3RhdGljIFNvVHlwZSBjbGFzc1R5cGVJ
ZDsgc3RhdGljIFNiQm9vbCBmaXJzdEluc3RhbmNlOyBzdGF0aWMgU29GaWVsZERhdGEgKmlucHV0
RGF0YTsgc3RhdGljIFNvRW5naW5lT3V0cHV0RGF0YSAqb3V0cHV0RGF0YTsgc3RhdGljIGNvbnN0
IFNvRmllbGREYXRhICoqcGFyZW50SW5wdXREYXRhOyBzdGF0aWMgY29uc3QgU29FbmdpbmVPdXRw
dXREYXRhICoqcGFyZW50T3V0cHV0RGF0YTsKCiAgcHVibGljOgoKCiAgICB2aXJ0dWFsIFNvRmll
bGQgKiBnZXRJbnB1dChTb1R5cGUgdHlwZSkgPSAwOwogICAgdmlydHVhbCBTb0VuZ2luZU91dHB1
dCAqIGdldE91dHB1dChTb1R5cGUgdHlwZSkgPSAwOwoKCgoKICAgIHZpcnR1YWwgU29GaWVsZCAq
IGdldENvbm5lY3RlZElucHV0KCk7CgogIHB1YmxpYzoKICAgIHN0YXRpYyB2b2lkIGluaXRDbGFz
cygpOwogICAgc3RhdGljIHZvaWQgaW5pdENsYXNzZXMoKTsKCgoKICAgIGludCBnZXRGb3J3YXJk
Q29ubmVjdGlvbnMoU29GaWVsZExpc3QgJmxpc3QpIGNvbnN0OwoKICBwcm90ZWN0ZWQ6CiAgICBT
b0ZpZWxkQ29udmVydGVyKCk7CgogICAgflNvRmllbGRDb252ZXJ0ZXIoKTsKfTsKIyA1OSAiU29F
bmdpbmUuYysrIiAyCgoKCgoKClNvVHlwZSBTb0VuZ2luZTo6Y2xhc3NUeXBlSWQ7CiMgODggIlNv
RW5naW5lLmMrKyIKU29FbmdpbmU6OlNvRW5naW5lKCkKCgp7CiAgICBuZWVkc0V2YWx1YXRpb24g
PSAxOwogICAgbm90aWZ5aW5nID0gMDsKCgoKCgoKfQojIDEwOSAiU29FbmdpbmUuYysrIgpTb0Vu
Z2luZTo6flNvRW5naW5lKCkKCgp7CiMgMTI2ICJTb0VuZ2luZS5jKysiCn0KIyAxMzUgIlNvRW5n
aW5lLmMrKyIKaW50ClNvRW5naW5lOjpnZXRPdXRwdXRzKFNvRW5naW5lT3V0cHV0TGlzdCAmbGlz
dCkgY29uc3QKCgp7CiAgICBpbnQgaTsKICAgIGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqb2Qg
PSBnZXRPdXRwdXREYXRhKCk7CgogICAgaWYgKG9kID09IF9fbnVsbCkKICAgICAgICByZXR1cm4g
MDsKCiAgICBmb3IgKGkgPSAwOyBpIDwgb2QtPmdldE51bU91dHB1dHMoKTsgaSsrKSB7CiAgICAg
ICAgbGlzdC5hcHBlbmQob2QtPmdldE91dHB1dCh0aGlzLCBpKSk7CiAgICB9CiAgICByZXR1cm4g
b2QtPmdldE51bU91dHB1dHMoKTsKfQojIDE2MCAiU29FbmdpbmUuYysrIgpTb0VuZ2luZU91dHB1
dCAqClNvRW5naW5lOjpnZXRPdXRwdXQoY29uc3QgU2JOYW1lICZvdXRwdXROYW1lKSBjb25zdAoK
CnsKICAgIGludCBpOwogICAgY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICpvZCA9IGdldE91dHB1
dERhdGEoKTsKCiAgICBpZiAob2QgPT0gX19udWxsKQogICAgICAgIHJldHVybiBfX251bGw7CgoK
ICAgIGZvciAoaSA9IDA7IGkgPCBvZC0+Z2V0TnVtT3V0cHV0cygpOyBpKyspCiAgICAgICAgaWYg
KG9kLT5nZXRPdXRwdXROYW1lKGkpID09IG91dHB1dE5hbWUpCiAgICAgICAgICAgIHJldHVybiBv
ZC0+Z2V0T3V0cHV0KHRoaXMsIGkpOwoKCiAgICByZXR1cm4gX19udWxsOwp9CiMgMTg5ICJTb0Vu
Z2luZS5jKysiClNiQm9vbApTb0VuZ2luZTo6Z2V0T3V0cHV0TmFtZShjb25zdCBTb0VuZ2luZU91
dHB1dCAqb3V0cHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgIFNiTmFtZSAmb3V0cHV0TmFt
ZSkgY29uc3QKCgp7CiAgICBpbnQgaTsKICAgIGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqb2Qg
PSBnZXRPdXRwdXREYXRhKCk7CgogICAgaWYgKG9kID09IF9fbnVsbCkKICAgICAgICByZXR1cm4g
MDsKCgogICAgZm9yIChpID0gMDsgaSA8IG9kLT5nZXROdW1PdXRwdXRzKCk7IGkrKykgewogICAg
ICAgIGlmIChvZC0+Z2V0T3V0cHV0KHRoaXMsIGkpID09IG91dHB1dCkgewogICAgICAgICAgICBv
dXRwdXROYW1lID0gb2QtPmdldE91dHB1dE5hbWUoaSk7CiAgICAgICAgICAgIHJldHVybiAxOwog
ICAgICAgIH0KICAgIH0KCgogICAgcmV0dXJuIDA7Cn0KIyAyMjEgIlNvRW5naW5lLmMrKyIKU29F
bmdpbmUgKgpTb0VuZ2luZTo6Y29weSgpIGNvbnN0CgoKewoKCgogICAgaW5pdENvcHlEaWN0KCk7
CgoKICAgIFNvRW5naW5lICpuZXdFbmdpbmUgPSAoU29FbmdpbmUgKikgZ2V0VHlwZUlkKCkuY3Jl
YXRlSW5zdGFuY2UoKTsKICAgIG5ld0VuZ2luZS0+cmVmKCk7CgoKICAgIG5ld0VuZ2luZS0+Y29w
eUNvbnRlbnRzKHRoaXMsIDEpOwoKCiAgICBjb3B5RG9uZSgpOwoKCiAgICBuZXdFbmdpbmUtPnVu
cmVmTm9EZWxldGUoKTsKICAgIHJldHVybiBuZXdFbmdpbmU7Cn0KIyAyNTQgIlNvRW5naW5lLmMr
KyIKU29FbmdpbmUgKgpTb0VuZ2luZTo6Z2V0QnlOYW1lKGNvbnN0IFNiTmFtZSAmbmFtZSkKCgp7
CiAgICByZXR1cm4gKFNvRW5naW5lICopZ2V0TmFtZWRCYXNlKG5hbWUsIFNvRW5naW5lOjpnZXRD
bGFzc1R5cGVJZCgpKTsKfQojIDI3MCAiU29FbmdpbmUuYysrIgppbnQKU29FbmdpbmU6OmdldEJ5
TmFtZShjb25zdCBTYk5hbWUgJm5hbWUsIFNvRW5naW5lTGlzdCAmbGlzdCkKCgp7CiAgICByZXR1
cm4gZ2V0TmFtZWRCYXNlcyhuYW1lLCBsaXN0LCBTb0VuZ2luZTo6Z2V0Q2xhc3NUeXBlSWQoKSk7
Cn0KIyAyODcgIlNvRW5naW5lLmMrKyIKdm9pZApTb0VuZ2luZTo6ZXZhbHVhdGVXcmFwcGVyKCkK
Cgp7CiAgICBpZiAoIW5lZWRzRXZhbHVhdGlvbikgcmV0dXJuOwoKCiAgICBuZWVkc0V2YWx1YXRp
b24gPSAwOwoKICAgIGludCBpOwogICAgY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICpvZCA9IGdl
dE91dHB1dERhdGEoKTsKICAgIGZvciAoaSA9IDA7IGkgPCBvZC0+Z2V0TnVtT3V0cHV0cygpOyBp
KyspIHsKICAgICAgICBTb0VuZ2luZU91dHB1dCAqb3V0ID0gb2QtPmdldE91dHB1dCh0aGlzLCBp
KTsKICAgICAgICBvdXQtPnByZXBhcmVUb1dyaXRlKCk7CiAgICB9CgoKCiAgICBjb25zdCBTb0Zp
ZWxkRGF0YSAqZmllbGREYXRhID0gZ2V0RmllbGREYXRhKCk7CiAgICBmb3IgKGkgPSAwOyBpIDwg
ZmllbGREYXRhLT5nZXROdW1GaWVsZHMoKTsgaSsrKSB7CiAgICAgICAgU29GaWVsZCAqaW5wdXRG
aWVsZCA9IGZpZWxkRGF0YS0+Z2V0RmllbGQodGhpcywgaSk7CiAgICAgICAgaW5wdXRGaWVsZC0+
ZXZhbHVhdGUoKTsKICAgIH0KCiAgICBldmFsdWF0ZSgpOwoKICAgIGZvciAoaSA9IDA7IGkgPCBv
ZC0+Z2V0TnVtT3V0cHV0cygpOyBpKyspIHsKICAgICAgICBTb0VuZ2luZU91dHB1dCAqb3V0ID0g
b2QtPmdldE91dHB1dCh0aGlzLCBpKTsKICAgICAgICBvdXQtPmRvbmVXcml0aW5nKCk7CiAgICB9
Cn0KIyAzMjcgIlNvRW5naW5lLmMrKyIKdm9pZApTb0VuZ2luZTo6bm90aWZ5KFNvTm90TGlzdCAq
bGlzdCkKCgp7CiAgICBpZiAobm90aWZ5aW5nKSByZXR1cm47CgoKCgogICAgbm90aWZ5aW5nID0g
MTsKCiAgICBuZWVkc0V2YWx1YXRpb24gPSAxOwoKICAgIFNvTm90UmVjICpsYXN0UmVjID0gbGlz
dC0+Z2V0TGFzdFJlYygpOwogICAgU2JCb29sIG5vdGlmaWVkRnJvbUNvbnRhaW5lciA9CiAgICAg
ICAgKGxhc3RSZWMgJiYgbGFzdFJlYy0+Z2V0VHlwZSgpID09IFNvTm90UmVjOjpDT05UQUlORVIp
OwoKCgoKICAgIGlmIChub3RpZmllZEZyb21Db250YWluZXIpIHsKICAgICAgICBpbnB1dENoYW5n
ZWQobGlzdC0+Z2V0TGFzdEZpZWxkKCkpOwogICAgfQoKCgogICAgU29GaWVsZENvbnRhaW5lcjo6
bm90aWZ5KGxpc3QpOwoKCiAgICBTb05vdFJlYyByZWModGhpcyk7CiAgICByZWMuc2V0VHlwZShT
b05vdFJlYzo6RU5HSU5FKTsKICAgIGxpc3QtPmFwcGVuZCgmcmVjKTsKCgogICAgU29Ob3RMaXN0
IHdvcmtpbmdMaXN0KGxpc3QpOwogICAgU2JCb29sIGZpcnN0Q29ubmVjdGlvbiA9IDE7CgogICAg
Y29uc3QgU29FbmdpbmVPdXRwdXREYXRhICpvZCA9IGdldE91dHB1dERhdGEoKTsKICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgb2QtPmdldE51bU91dHB1dHMoKTsgaSsrKSB7CiAgICAgICAgU29Fbmdp
bmVPdXRwdXQgKm91dCA9IG9kLT5nZXRPdXRwdXQodGhpcywgaSk7CiAgICAgICAgaWYgKG91dC0+
aXNFbmFibGVkKCkpIHsKICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBvdXQtPmdldE51
bUNvbm5lY3Rpb25zKCk7IGorKykgewoKCgogICAgICAgICAgICAgICAgaWYgKGZpcnN0Q29ubmVj
dGlvbikKICAgICAgICAgICAgICAgICAgICBmaXJzdENvbm5lY3Rpb24gPSAwOwogICAgICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHdvcmtpbmdMaXN0ID0gKmxpc3Q7CgogICAg
ICAgICAgICAgICAgKCpvdXQpW2pdLT5ub3RpZnkoJndvcmtpbmdMaXN0KTsKICAgICAgICAgICAg
fQogICAgICAgIH0KICAgIH0KICAgIG5vdGlmeWluZyA9IDA7Cn0KIyAzOTQgIlNvRW5naW5lLmMr
KyIKdm9pZApTb0VuZ2luZTo6aW5wdXRDaGFuZ2VkKFNvRmllbGQgKikKCgp7Cn0KIyA0MDggIlNv
RW5naW5lLmMrKyIKdm9pZApTb0VuZ2luZTo6d3JpdGVJbnN0YW5jZShTb091dHB1dCAqb3V0KQoK
CnsKICAgIGlmICghIHdyaXRlSGVhZGVyKG91dCwgMCwgMSkpIHsKCiAgICAgICAgY29uc3QgU29G
aWVsZERhdGEgKmZpZWxkRGF0YSA9IGdldEZpZWxkRGF0YSgpOwoKICAgICAgICBmaWVsZERhdGEt
PndyaXRlKG91dCwgdGhpcyk7CiAgICAgICAgaWYgKCEgaXNCdWlsdEluKSBnZXRPdXRwdXREYXRh
KCktPndyaXRlRGVzY3JpcHRpb25zKG91dCwgdGhpcyk7CgogICAgICAgIHdyaXRlRm9vdGVyKG91
dCk7CiAgICB9Cn0KIyA0MzIgIlNvRW5naW5lLmMrKyIKU2JCb29sClNvRW5naW5lOjpyZWFkSW5z
dGFuY2UoU29JbnB1dCAqaW4sIHVuc2lnbmVkIHNob3J0ICkKCgp7CiAgICBpZiAoaW4tPmlzQmlu
YXJ5KCkpIHsKICAgICAgICBTYkJvb2wgbm90QnVpbHRJbjsKICAgICAgICBTYkJvb2wgcmVhZE9L
ID0gZ2V0RmllbGREYXRhKCktPnJlYWQoaW4sIHRoaXMsIDEsIG5vdEJ1aWx0SW4pOwoKICAgICAg
ICBpZiAocmVhZE9LICYmIG5vdEJ1aWx0SW4pCiAgICAgICAgICAgIHJlYWRPSyA9IGdldE91dHB1
dERhdGEoKS0+cmVhZERlc2NyaXB0aW9ucyhpbiwgdGhpcyk7CgogICAgICAgIHJldHVybiByZWFk
T0s7CiAgICB9IGVsc2UgewogICAgICAgIFNiQm9vbCBub3RCdWlsdEluOwogICAgICAgIFNiQm9v
bCByZWFkT0sgPSBnZXRGaWVsZERhdGEoKS0+cmVhZChpbiwgdGhpcywgMCwgbm90QnVpbHRJbik7
CiAgICAgICAgaWYgKCFyZWFkT0spIHJldHVybiByZWFkT0s7CgoKICAgICAgICBTYk5hbWUgb3V0
cHV0czsKICAgICAgICBpZiAoIWluLT5yZWFkKG91dHB1dHMsIDEpIHx8IG91dHB1dHMgIT0gIm91
dHB1dHMiKSB7CiAgICAgICAgICAgIHJldHVybiByZWFkT0s7CiAgICAgICAgfQoKICAgICAgICBy
ZXR1cm4gZ2V0T3V0cHV0RGF0YSgpLT5yZWFkRGVzY3JpcHRpb25zKGluLCB0aGlzKTsKICAgIH0K
fQojIDQ2NyAiU29FbmdpbmUuYysrIgp2b2lkClNvRW5naW5lOjp3cml0ZU91dHB1dFR5cGVzKFNv
T3V0cHV0ICpvdXQpCgoKewogICAgU2JOYW1lIG91dE5hbWU7CiAgICBTb0VuZ2luZU91dHB1dExp
c3Qgb3V0TGlzdDsKCiAgICAodm9pZClnZXRPdXRwdXRzKCBvdXRMaXN0ICk7CgoKICAgIGlmICgh
b3V0LT5pc0JpbmFyeSgpKQogICAgICAgIG91dC0+aW5kZW50KCk7CiAgICBvdXQtPndyaXRlKCAi
b3V0cHV0cyIgKTsKCiAgICBpZiAob3V0LT5pc0JpbmFyeSgpKQogICAgICAgIG91dC0+d3JpdGUo
b3V0TGlzdC5nZXRMZW5ndGgoKSk7CiAgICBlbHNlIHsKICAgICAgICBvdXQtPndyaXRlKCAnICcg
KTsKICAgICAgICBvdXQtPndyaXRlKCAnWycgKTsKICAgICAgICBvdXQtPndyaXRlKCAnICcgKTsK
ICAgICAgICBvdXQtPmluY3JlbWVudEluZGVudCgyKTsKICAgIH0KCgogICAgZm9yKCBpbnQgaT0w
OyBpPG91dExpc3QuZ2V0TGVuZ3RoKCk7IGkrKyApIHsKCiAgICAgICAgY29uc3QgU29UeXBlIG91
dFR5cGUgPSBvdXRMaXN0W2ldLT5nZXRDb25uZWN0aW9uVHlwZSgpOwogICAgICAgIGdldE91dHB1
dE5hbWUoIG91dExpc3RbaV0sIG91dE5hbWUgKTsKCiAgICAgICAgb3V0LT53cml0ZSggb3V0VHlw
ZS5nZXROYW1lKCkuZ2V0U3RyaW5nKCkgKTsKICAgICAgICBpZiAoIW91dC0+aXNCaW5hcnkoKSkK
ICAgICAgICAgICAgb3V0LT53cml0ZSggJyAnICk7CiAgICAgICAgb3V0LT53cml0ZSggb3V0TmFt
ZS5nZXRTdHJpbmcoKSApOwoKICAgICAgICBpZiAoIW91dC0+aXNCaW5hcnkoKSkgewogICAgICAg
ICAgICBpZiggaSAhPSBvdXRMaXN0LmdldExlbmd0aCgpLTEgKSB7CiAgICAgICAgICAgICAgICBv
dXQtPndyaXRlKCAnLCcgKTsKICAgICAgICAgICAgICAgIG91dC0+d3JpdGUoICdcbicgKTsKICAg
ICAgICAgICAgICAgIG91dC0+aW5kZW50KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9
CiAgICBpZiAoIW91dC0+aXNCaW5hcnkoKSkgewogICAgICAgIG91dC0+d3JpdGUoICcgJyApOwog
ICAgICAgIG91dC0+d3JpdGUoICddJyApOwogICAgICAgIG91dC0+d3JpdGUoICdcbicgKTsKICAg
ICAgICBvdXQtPmRlY3JlbWVudEluZGVudCgyKTsKICAgIH0KfQojIDUyNiAiU29FbmdpbmUuYysr
IgpTb0ZpZWxkQ29udGFpbmVyICoKU29FbmdpbmU6OmNvcHlUaHJvdWdoQ29ubmVjdGlvbigpIGNv
bnN0CgoKewoKICAgIFNvRmllbGRDb250YWluZXIgKmNvcHkgPSBmaW5kQ29weSh0aGlzLCAxKTsK
ICAgIGlmIChjb3B5ICE9IF9fbnVsbCkKICAgICAgICByZXR1cm4gY29weTsKIyA1NDQgIlNvRW5n
aW5lLmMrKyIKICAgIGlmIChzaG91bGRDb3B5KCkpIHsKCgogICAgICAgIFNvRW5naW5lICpuZXdF
bmdpbmUgPSAoU29FbmdpbmUgKikgZ2V0VHlwZUlkKCkuY3JlYXRlSW5zdGFuY2UoKTsKICAgICAg
ICBuZXdFbmdpbmUtPnJlZigpOwogICAgICAgIGFkZENvcHkodGhpcywgbmV3RW5naW5lKTsKICAg
ICAgICBuZXdFbmdpbmUtPnVucmVmTm9EZWxldGUoKTsKCgoKCiAgICAgICAgcmV0dXJuIGZpbmRD
b3B5KHRoaXMsIDEpOwogICAgfQoKCiAgICByZXR1cm4gKFNvRmllbGRDb250YWluZXIgKikgdGhp
czsKfQojIDU3MCAiU29FbmdpbmUuYysrIgpTYkJvb2wKU29FbmdpbmU6OnNob3VsZENvcHkoKSBj
b25zdAoKCnsKCgoKICAgIGNvbnN0IFNvRmllbGREYXRhICpmaWVsZERhdGEgPSBnZXRGaWVsZERh
dGEoKTsKICAgIGlmIChmaWVsZERhdGEgIT0gX19udWxsKSB7CiAgICAgICAgaW50IG51bUZpZWxk
cyA9IGZpZWxkRGF0YS0+Z2V0TnVtRmllbGRzKCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBudW1GaWVsZHM7IGkrKykgewogICAgICAgICAgICBTb0ZpZWxkICppbnB1dEZpZWxkID0gZmll
bGREYXRhLT5nZXRGaWVsZCh0aGlzLCBpKTsKICAgICAgICAgICAgaWYgKGlucHV0RmllbGQtPnJl
ZmVyZW5jZXNDb3B5KCkpCiAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICB9
CgoKICAgIHJldHVybiAwOwp9CiMgNjA2ICJTb0VuZ2luZS5jKysiClNvRW5naW5lT3V0cHV0OjpT
b0VuZ2luZU91dHB1dCgpCgoKewogICAgZW5hYmxlZCA9IDE7CiAgICBjb250YWluZXIgPSBfX251
bGw7Cn0KIyA2MjIgIlNvRW5naW5lLmMrKyIKU29FbmdpbmVPdXRwdXQ6On5Tb0VuZ2luZU91dHB1
dCgpCgoKewojIDYzNSAiU29FbmdpbmUuYysrIgp9CiMgNjQ0ICJTb0VuZ2luZS5jKysiClNvVHlw
ZQpTb0VuZ2luZU91dHB1dDo6Z2V0Q29ubmVjdGlvblR5cGUoKSBjb25zdAoKCnsKIyA2NjAgIlNv
RW5naW5lLmMrKyIKICAgIGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqb2QgPSBjb250YWluZXIt
PmdldE91dHB1dERhdGEoKTsKIyA2NzAgIlNvRW5naW5lLmMrKyIKICAgIHJldHVybiBvZC0+Z2V0
VHlwZShvZC0+Z2V0SW5kZXgoY29udGFpbmVyLCB0aGlzKSk7Cn0KIyA2ODEgIlNvRW5naW5lLmMr
KyIKaW50ClNvRW5naW5lT3V0cHV0OjpnZXRGb3J3YXJkQ29ubmVjdGlvbnMoU29GaWVsZExpc3Qg
Jmxpc3QpIGNvbnN0CgoKewogICAgaW50IG51bUNvbm5lY3Rpb25zID0gMDsKCiAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvbm5lY3Rpb25zLmdldExlbmd0aCgpOyBpKyspIHsKICAgICAgICBTb0Zp
ZWxkICpmaWVsZCA9IGNvbm5lY3Rpb25zW2ldOwoKCiAgICAgICAgU29GaWVsZENvbnRhaW5lciAq
Y29udGFpbmVyID0gZmllbGQtPmdldENvbnRhaW5lcigpOwogICAgICAgIGlmIChjb250YWluZXIt
PmlzT2ZUeXBlKFNvRmllbGRDb252ZXJ0ZXI6OmdldENsYXNzVHlwZUlkKCkpKQogICAgICAgICAg
ICBudW1Db25uZWN0aW9ucyArPSAoKFNvRmllbGRDb252ZXJ0ZXIgKikgY29udGFpbmVyKS0+CiAg
ICAgICAgICAgICAgICBnZXRGb3J3YXJkQ29ubmVjdGlvbnMobGlzdCk7CgogICAgICAgIGVsc2Ug
ewogICAgICAgICAgICBsaXN0LmFwcGVuZChmaWVsZCk7CiAgICAgICAgICAgIG51bUNvbm5lY3Rp
b25zKys7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBudW1Db25uZWN0aW9uczsKfQojIDcx
NiAiU29FbmdpbmUuYysrIgp2b2lkClNvRW5naW5lT3V0cHV0OjplbmFibGUoU2JCb29sIGZsYWcp
CgoKewogICAgaWYgKGVuYWJsZWQgIT0gZmxhZykgewogICAgICAgIGVuYWJsZWQgPSBmbGFnOwoK
CiAgICAgICAgaWYgKGZsYWcpIHsKCgoKCgogICAgICAgICAgICBTb0VuZ2luZSAqZSA9IGdldENv
bnRhaW5lcigpOwogICAgICAgICAgICBpZiAoZSAmJiBlLT5pc05vdGlmeWluZygpKSByZXR1cm47
CgogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGdldE51bUNvbm5lY3Rpb25zKCk7IGor
KykgewogICAgICAgICAgICAgICAgU29GaWVsZCAqZiA9ICgqdGhpcylbal07CgogICAgICAgICAg
ICAgICAgaWYgKCFmLT5mbGFncy5pc0VuZ2luZU1vZGlmeWluZykgewogICAgICAgICAgICAgICAg
ICAgIGYtPnN0YXJ0Tm90aWZ5KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICB9Cn0KIyA3NTMgIlNvRW5naW5lLmMrKyIKdm9pZApTb0VuZ2luZU91dHB1dDo6
YWRkQ29ubmVjdGlvbihTb0ZpZWxkICpmaWVsZCkKCgp7CiAgICBpZiAoZmllbGQpIHsKCiAgICAg
ICAgY29ubmVjdGlvbnMuYXBwZW5kKGZpZWxkKTsKCgogICAgICAgIGNvbnRhaW5lci0+cmVmKCk7
CiAgICB9CgoKICAgIGNvbnRhaW5lci0+bmVlZHNFdmFsdWF0aW9uID0gMTsKfQojIDc3NyAiU29F
bmdpbmUuYysrIgp2b2lkClNvRW5naW5lT3V0cHV0OjpyZW1vdmVDb25uZWN0aW9uKFNvRmllbGQg
KmZpZWxkKQoKCnsKICAgIGludCBpbmRleCA9IGNvbm5lY3Rpb25zLmZpbmQoZmllbGQpOwoKCgoK
CgogICAgY29ubmVjdGlvbnMucmVtb3ZlKGluZGV4KTsKCgogICAgY29udGFpbmVyLT51bnJlZigp
Owp9CiMgODAyICJTb0VuZ2luZS5jKysiCnZvaWQKU29FbmdpbmVPdXRwdXQ6OnByZXBhcmVUb1dy
aXRlKCkgY29uc3QKCgp7CiAgICBmb3IgKGludCBpID0gY29ubmVjdGlvbnMuZ2V0TGVuZ3RoKCkt
MTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICBTb0ZpZWxkICpmID0gY29ubmVjdGlvbnMuZ2V0KGkp
OwojIDgxNyAiU29FbmdpbmUuYysrIgogICAgICAgIGYtPmZsYWdzLmlzRW5naW5lTW9kaWZ5aW5n
ID0gMTsKICAgIH0KfQojIDgyOCAiU29FbmdpbmUuYysrIgp2b2lkClNvRW5naW5lT3V0cHV0Ojpk
b25lV3JpdGluZygpIGNvbnN0CgoKewogICAgZm9yIChpbnQgaSA9IGNvbm5lY3Rpb25zLmdldExl
bmd0aCgpLTE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgU29GaWVsZCAqZiA9IGNvbm5lY3Rpb25z
LmdldChpKTsKICAgICAgICBmLT5mbGFncy5pc0VuZ2luZU1vZGlmeWluZyA9IDA7CiAgICB9Cn0K
IyA1MCAiU29FbmdpbmVzLmMrKyIgMgojIDEgIlNvRmllbGRDb252ZXJ0ZXIuYysrIiAxCiMgNjAg
IlNvRmllbGRDb252ZXJ0ZXIuYysrIgpTb1R5cGUgU29GaWVsZENvbnZlcnRlcjo6Y2xhc3NUeXBl
SWQ7IFNiQm9vbCBTb0ZpZWxkQ29udmVydGVyOjpmaXJzdEluc3RhbmNlPTE7IFNvRW5naW5lT3V0
cHV0RGF0YSAqU29GaWVsZENvbnZlcnRlcjo6b3V0cHV0RGF0YTsgU29GaWVsZERhdGEgKiBTb0Zp
ZWxkQ29udmVydGVyOjppbnB1dERhdGE7IGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqKlNvRmll
bGRDb252ZXJ0ZXI6OnBhcmVudE91dHB1dERhdGE7IGNvbnN0IFNvRmllbGREYXRhICoqIFNvRmll
bGRDb252ZXJ0ZXI6OnBhcmVudElucHV0RGF0YTsgU29UeXBlIFNvRmllbGRDb252ZXJ0ZXI6Omdl
dFR5cGVJZCgpIGNvbnN0IHsgcmV0dXJuIGNsYXNzVHlwZUlkOyB9IGNvbnN0IFNvRmllbGREYXRh
ICogU29GaWVsZENvbnZlcnRlcjo6Z2V0RmllbGREYXRhKCkgY29uc3QgeyByZXR1cm4gaW5wdXRE
YXRhOyB9IGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqIFNvRmllbGRDb252ZXJ0ZXI6OmdldE91
dHB1dERhdGEoKSBjb25zdCB7IHJldHVybiBvdXRwdXREYXRhOyB9OwojIDY5ICJTb0ZpZWxkQ29u
dmVydGVyLmMrKyIKU29GaWVsZENvbnZlcnRlcjo6U29GaWVsZENvbnZlcnRlcigpCgoKewogICAg
ZG8geyB3aGlsZSgwKTsgaWYgKGlucHV0RGF0YSA9PSBfX251bGwpIHsgaW5wdXREYXRhID0gbmV3
IFNvRmllbGREYXRhKHBhcmVudElucHV0RGF0YSA/ICpwYXJlbnRJbnB1dERhdGEgOiBfX251bGwp
OyBvdXRwdXREYXRhID0gbmV3IFNvRW5naW5lT3V0cHV0RGF0YShwYXJlbnRPdXRwdXREYXRhID8g
KnBhcmVudE91dHB1dERhdGEgOiBfX251bGwpOyB9IGVsc2UgZmlyc3RJbnN0YW5jZSA9IDA7IGlz
QnVpbHRJbiA9IDA7IH0gd2hpbGUoMCk7Cn0KIyA4MyAiU29GaWVsZENvbnZlcnRlci5jKysiClNv
RmllbGRDb252ZXJ0ZXI6On5Tb0ZpZWxkQ29udmVydGVyKCkKCgp7Cn0KIyA5NyAiU29GaWVsZENv
bnZlcnRlci5jKysiClNvRmllbGQgKgpTb0ZpZWxkQ29udmVydGVyOjpnZXRDb25uZWN0ZWRJbnB1
dCgpCgoKewogICAgY29uc3QgU29GaWVsZERhdGEgKmZkID0gZ2V0RmllbGREYXRhKCk7CiAgICBm
b3IgKGludCBpID0gMDsgaSA8IGZkLT5nZXROdW1GaWVsZHMoKTsgaSsrKSB7CiAgICAgICAgU29G
aWVsZCAqZiA9IGZkLT5nZXRGaWVsZCh0aGlzLCBpKTsKICAgICAgICBpZiAoZi0+aXNDb25uZWN0
ZWQoKSkKICAgICAgICAgICAgcmV0dXJuIGY7CiAgICB9CiAgICByZXR1cm4gMDsKfQojIDExOSAi
U29GaWVsZENvbnZlcnRlci5jKysiCmludApTb0ZpZWxkQ29udmVydGVyOjpnZXRGb3J3YXJkQ29u
bmVjdGlvbnMoU29GaWVsZExpc3QgJmxpc3QpIGNvbnN0CgoKewogICAgU29FbmdpbmVPdXRwdXRM
aXN0IG91dHB1dHM7CiAgICBpbnQgbnVtQ29ubmVjdGlvbnMgPSAwOwoKCiAgICBnZXRPdXRwdXRz
KG91dHB1dHMpOwoKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG91dHB1dHMuZ2V0TGVuZ3RoKCk7
IGkrKykKICAgICAgICBudW1Db25uZWN0aW9ucyArPSBvdXRwdXRzW2ldLT5nZXRGb3J3YXJkQ29u
bmVjdGlvbnMobGlzdCk7CgogICAgcmV0dXJuIG51bUNvbm5lY3Rpb25zOwp9CiMgNTEgIlNvRW5n
aW5lcy5jKysiIDIKIyAxICJTb0ludGVycG9sYXRlLmMrKyIgMQojIDU5ICJTb0ludGVycG9sYXRl
LmMrKyIKIyAxICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9l
bmdpbmVzL1NvSW50ZXJwb2xhdGUuaCIgMQojIDk3ICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJh
c2UvaW5jbHVkZS9JbnZlbnRvci9lbmdpbmVzL1NvSW50ZXJwb2xhdGUuaCIKY2xhc3MgU29JbnRl
cnBvbGF0ZSA6IHB1YmxpYyBTb0VuZ2luZSB7CgogICAgcHVibGljOiBzdGF0aWMgU29UeXBlIGdl
dENsYXNzVHlwZUlkKCkgeyByZXR1cm4gY2xhc3NUeXBlSWQ7IH0gdmlydHVhbCBTb1R5cGUgZ2V0
VHlwZUlkKCkgY29uc3Q7IHB1YmxpYzogdmlydHVhbCBjb25zdCBTb0ZpZWxkRGF0YSAqIGdldEZp
ZWxkRGF0YSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqIGdldE91
dHB1dERhdGEoKSBjb25zdDsgcHJvdGVjdGVkOiBzdGF0aWMgY29uc3QgU29GaWVsZERhdGEgKiog
Z2V0SW5wdXREYXRhUHRyKCkgeyByZXR1cm4gKGNvbnN0IFNvRmllbGREYXRhICoqKSZpbnB1dERh
dGE7IH0gc3RhdGljIGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqKiBnZXRPdXRwdXREYXRhUHRy
KCkgeyByZXR1cm4gKGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqKikmb3V0cHV0RGF0YTsgfSBw
cml2YXRlOiBzdGF0aWMgU29UeXBlIGNsYXNzVHlwZUlkOyBzdGF0aWMgU2JCb29sIGZpcnN0SW5z
dGFuY2U7IHN0YXRpYyBTb0ZpZWxkRGF0YSAqaW5wdXREYXRhOyBzdGF0aWMgU29FbmdpbmVPdXRw
dXREYXRhICpvdXRwdXREYXRhOyBzdGF0aWMgY29uc3QgU29GaWVsZERhdGEgKipwYXJlbnRJbnB1
dERhdGE7IHN0YXRpYyBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKipwYXJlbnRPdXRwdXREYXRh
OwoKICBwdWJsaWM6CgogICAgU29TRkZsb2F0IGFscGhhOwogICAgU29FbmdpbmVPdXRwdXQgb3V0
cHV0OwoKICBwdWJsaWM6CiAgICBzdGF0aWMgdm9pZCBpbml0Q2xhc3MoKTsKICAgIHN0YXRpYyB2
b2lkIGluaXRDbGFzc2VzKCk7CgogIHByb3RlY3RlZDoKICAgIFNvSW50ZXJwb2xhdGUoKTsKICAg
IHN0YXRpYyBpbnQgbWF4KGludCBhLCBpbnQgYikgeyByZXR1cm4gKGEgPiBiKSA/IGEgOiBiOyB9
CiAgICBzdGF0aWMgaW50IGNsYW1wKGludCBpLCBpbnQgbikgeyByZXR1cm4gKGkgPCBuKSA/IGkg
OiBuLTE7IH0KCiAgICB+U29JbnRlcnBvbGF0ZSgpOwp9OwojIDIxMSAiLi4vLi4vLi4vLi4vLi4v
bGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZW5naW5lcy9Tb0ludGVycG9sYXRlLmgiCmNs
YXNzIFNvSW50ZXJwb2xhdGVGbG9hdCA6IHB1YmxpYyBTb0ludGVycG9sYXRlIHsKICAgIHB1Ymxp
Yzogc3RhdGljIFNvVHlwZSBnZXRDbGFzc1R5cGVJZCgpIHsgcmV0dXJuIGNsYXNzVHlwZUlkOyB9
IHZpcnR1YWwgU29UeXBlIGdldFR5cGVJZCgpIGNvbnN0OyBwdWJsaWM6IHZpcnR1YWwgY29uc3Qg
U29GaWVsZERhdGEgKiBnZXRGaWVsZERhdGEoKSBjb25zdDsgdmlydHVhbCBjb25zdCBTb0VuZ2lu
ZU91dHB1dERhdGEgKiBnZXRPdXRwdXREYXRhKCkgY29uc3Q7IHByb3RlY3RlZDogc3RhdGljIGNv
bnN0IFNvRmllbGREYXRhICoqIGdldElucHV0RGF0YVB0cigpIHsgcmV0dXJuIChjb25zdCBTb0Zp
ZWxkRGF0YSAqKikmaW5wdXREYXRhOyB9IHN0YXRpYyBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEg
KiogZ2V0T3V0cHV0RGF0YVB0cigpIHsgcmV0dXJuIChjb25zdCBTb0VuZ2luZU91dHB1dERhdGEg
KiopJm91dHB1dERhdGE7IH0gcHJpdmF0ZTogc3RhdGljIFNvVHlwZSBjbGFzc1R5cGVJZDsgc3Rh
dGljIFNiQm9vbCBmaXJzdEluc3RhbmNlOyBzdGF0aWMgU29GaWVsZERhdGEgKmlucHV0RGF0YTsg
c3RhdGljIFNvRW5naW5lT3V0cHV0RGF0YSAqb3V0cHV0RGF0YTsgc3RhdGljIGNvbnN0IFNvRmll
bGREYXRhICoqcGFyZW50SW5wdXREYXRhOyBzdGF0aWMgY29uc3QgU29FbmdpbmVPdXRwdXREYXRh
ICoqcGFyZW50T3V0cHV0RGF0YTsgcHJpdmF0ZTogc3RhdGljIHZvaWQgKmNyZWF0ZUluc3RhbmNl
KCk7IHByaXZhdGU6IH5Tb0ludGVycG9sYXRlRmxvYXQoKTsgdmlydHVhbCB2b2lkIGV2YWx1YXRl
KCk7IHB1YmxpYzogc3RhdGljIHZvaWQgaW5pdENsYXNzKCk7IHB1YmxpYzogU29JbnRlcnBvbGF0
ZUZsb2F0KCk7CiAgICBTb01GRmxvYXQgaW5wdXQwOwogICAgU29NRkZsb2F0IGlucHV0MTsKfTsK
CgoKCmNsYXNzIFNvSW50ZXJwb2xhdGVSb3RhdGlvbiA6IHB1YmxpYyBTb0ludGVycG9sYXRlIHsK
ICAgIHB1YmxpYzogc3RhdGljIFNvVHlwZSBnZXRDbGFzc1R5cGVJZCgpIHsgcmV0dXJuIGNsYXNz
VHlwZUlkOyB9IHZpcnR1YWwgU29UeXBlIGdldFR5cGVJZCgpIGNvbnN0OyBwdWJsaWM6IHZpcnR1
YWwgY29uc3QgU29GaWVsZERhdGEgKiBnZXRGaWVsZERhdGEoKSBjb25zdDsgdmlydHVhbCBjb25z
dCBTb0VuZ2luZU91dHB1dERhdGEgKiBnZXRPdXRwdXREYXRhKCkgY29uc3Q7IHByb3RlY3RlZDog
c3RhdGljIGNvbnN0IFNvRmllbGREYXRhICoqIGdldElucHV0RGF0YVB0cigpIHsgcmV0dXJuIChj
b25zdCBTb0ZpZWxkRGF0YSAqKikmaW5wdXREYXRhOyB9IHN0YXRpYyBjb25zdCBTb0VuZ2luZU91
dHB1dERhdGEgKiogZ2V0T3V0cHV0RGF0YVB0cigpIHsgcmV0dXJuIChjb25zdCBTb0VuZ2luZU91
dHB1dERhdGEgKiopJm91dHB1dERhdGE7IH0gcHJpdmF0ZTogc3RhdGljIFNvVHlwZSBjbGFzc1R5
cGVJZDsgc3RhdGljIFNiQm9vbCBmaXJzdEluc3RhbmNlOyBzdGF0aWMgU29GaWVsZERhdGEgKmlu
cHV0RGF0YTsgc3RhdGljIFNvRW5naW5lT3V0cHV0RGF0YSAqb3V0cHV0RGF0YTsgc3RhdGljIGNv
bnN0IFNvRmllbGREYXRhICoqcGFyZW50SW5wdXREYXRhOyBzdGF0aWMgY29uc3QgU29FbmdpbmVP
dXRwdXREYXRhICoqcGFyZW50T3V0cHV0RGF0YTsgcHJpdmF0ZTogc3RhdGljIHZvaWQgKmNyZWF0
ZUluc3RhbmNlKCk7IHByaXZhdGU6IH5Tb0ludGVycG9sYXRlUm90YXRpb24oKTsgdmlydHVhbCB2
b2lkIGV2YWx1YXRlKCk7IHB1YmxpYzogc3RhdGljIHZvaWQgaW5pdENsYXNzKCk7IHB1YmxpYzog
U29JbnRlcnBvbGF0ZVJvdGF0aW9uKCk7CiAgICBTb01GUm90YXRpb24gaW5wdXQwOwogICAgU29N
RlJvdGF0aW9uIGlucHV0MTsKfTsKCgoKCmNsYXNzIFNvSW50ZXJwb2xhdGVWZWMyZiA6IHB1Ymxp
YyBTb0ludGVycG9sYXRlIHsKICAgIHB1YmxpYzogc3RhdGljIFNvVHlwZSBnZXRDbGFzc1R5cGVJ
ZCgpIHsgcmV0dXJuIGNsYXNzVHlwZUlkOyB9IHZpcnR1YWwgU29UeXBlIGdldFR5cGVJZCgpIGNv
bnN0OyBwdWJsaWM6IHZpcnR1YWwgY29uc3QgU29GaWVsZERhdGEgKiBnZXRGaWVsZERhdGEoKSBj
b25zdDsgdmlydHVhbCBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKiBnZXRPdXRwdXREYXRhKCkg
Y29uc3Q7IHByb3RlY3RlZDogc3RhdGljIGNvbnN0IFNvRmllbGREYXRhICoqIGdldElucHV0RGF0
YVB0cigpIHsgcmV0dXJuIChjb25zdCBTb0ZpZWxkRGF0YSAqKikmaW5wdXREYXRhOyB9IHN0YXRp
YyBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKiogZ2V0T3V0cHV0RGF0YVB0cigpIHsgcmV0dXJu
IChjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKiopJm91dHB1dERhdGE7IH0gcHJpdmF0ZTogc3Rh
dGljIFNvVHlwZSBjbGFzc1R5cGVJZDsgc3RhdGljIFNiQm9vbCBmaXJzdEluc3RhbmNlOyBzdGF0
aWMgU29GaWVsZERhdGEgKmlucHV0RGF0YTsgc3RhdGljIFNvRW5naW5lT3V0cHV0RGF0YSAqb3V0
cHV0RGF0YTsgc3RhdGljIGNvbnN0IFNvRmllbGREYXRhICoqcGFyZW50SW5wdXREYXRhOyBzdGF0
aWMgY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICoqcGFyZW50T3V0cHV0RGF0YTsgcHJpdmF0ZTog
c3RhdGljIHZvaWQgKmNyZWF0ZUluc3RhbmNlKCk7IHByaXZhdGU6IH5Tb0ludGVycG9sYXRlVmVj
MmYoKTsgdmlydHVhbCB2b2lkIGV2YWx1YXRlKCk7IHB1YmxpYzogc3RhdGljIHZvaWQgaW5pdENs
YXNzKCk7IHB1YmxpYzogU29JbnRlcnBvbGF0ZVZlYzJmKCk7CiAgICBTb01GVmVjMmYgaW5wdXQw
OwogICAgU29NRlZlYzJmIGlucHV0MTsKfTsKCgoKCmNsYXNzIFNvSW50ZXJwb2xhdGVWZWMzZiA6
IHB1YmxpYyBTb0ludGVycG9sYXRlIHsKICAgIHB1YmxpYzogc3RhdGljIFNvVHlwZSBnZXRDbGFz
c1R5cGVJZCgpIHsgcmV0dXJuIGNsYXNzVHlwZUlkOyB9IHZpcnR1YWwgU29UeXBlIGdldFR5cGVJ
ZCgpIGNvbnN0OyBwdWJsaWM6IHZpcnR1YWwgY29uc3QgU29GaWVsZERhdGEgKiBnZXRGaWVsZERh
dGEoKSBjb25zdDsgdmlydHVhbCBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKiBnZXRPdXRwdXRE
YXRhKCkgY29uc3Q7IHByb3RlY3RlZDogc3RhdGljIGNvbnN0IFNvRmllbGREYXRhICoqIGdldElu
cHV0RGF0YVB0cigpIHsgcmV0dXJuIChjb25zdCBTb0ZpZWxkRGF0YSAqKikmaW5wdXREYXRhOyB9
IHN0YXRpYyBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKiogZ2V0T3V0cHV0RGF0YVB0cigpIHsg
cmV0dXJuIChjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKiopJm91dHB1dERhdGE7IH0gcHJpdmF0
ZTogc3RhdGljIFNvVHlwZSBjbGFzc1R5cGVJZDsgc3RhdGljIFNiQm9vbCBmaXJzdEluc3RhbmNl
OyBzdGF0aWMgU29GaWVsZERhdGEgKmlucHV0RGF0YTsgc3RhdGljIFNvRW5naW5lT3V0cHV0RGF0
YSAqb3V0cHV0RGF0YTsgc3RhdGljIGNvbnN0IFNvRmllbGREYXRhICoqcGFyZW50SW5wdXREYXRh
OyBzdGF0aWMgY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICoqcGFyZW50T3V0cHV0RGF0YTsgcHJp
dmF0ZTogc3RhdGljIHZvaWQgKmNyZWF0ZUluc3RhbmNlKCk7IHByaXZhdGU6IH5Tb0ludGVycG9s
YXRlVmVjM2YoKTsgdmlydHVhbCB2b2lkIGV2YWx1YXRlKCk7IHB1YmxpYzogc3RhdGljIHZvaWQg
aW5pdENsYXNzKCk7IHB1YmxpYzogU29JbnRlcnBvbGF0ZVZlYzNmKCk7CiAgICBTb01GVmVjM2Yg
aW5wdXQwOwogICAgU29NRlZlYzNmIGlucHV0MTsKfTsKCgoKCmNsYXNzIFNvSW50ZXJwb2xhdGVW
ZWM0ZiA6IHB1YmxpYyBTb0ludGVycG9sYXRlIHsKICAgIHB1YmxpYzogc3RhdGljIFNvVHlwZSBn
ZXRDbGFzc1R5cGVJZCgpIHsgcmV0dXJuIGNsYXNzVHlwZUlkOyB9IHZpcnR1YWwgU29UeXBlIGdl
dFR5cGVJZCgpIGNvbnN0OyBwdWJsaWM6IHZpcnR1YWwgY29uc3QgU29GaWVsZERhdGEgKiBnZXRG
aWVsZERhdGEoKSBjb25zdDsgdmlydHVhbCBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKiBnZXRP
dXRwdXREYXRhKCkgY29uc3Q7IHByb3RlY3RlZDogc3RhdGljIGNvbnN0IFNvRmllbGREYXRhICoq
IGdldElucHV0RGF0YVB0cigpIHsgcmV0dXJuIChjb25zdCBTb0ZpZWxkRGF0YSAqKikmaW5wdXRE
YXRhOyB9IHN0YXRpYyBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKiogZ2V0T3V0cHV0RGF0YVB0
cigpIHsgcmV0dXJuIChjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKiopJm91dHB1dERhdGE7IH0g
cHJpdmF0ZTogc3RhdGljIFNvVHlwZSBjbGFzc1R5cGVJZDsgc3RhdGljIFNiQm9vbCBmaXJzdElu
c3RhbmNlOyBzdGF0aWMgU29GaWVsZERhdGEgKmlucHV0RGF0YTsgc3RhdGljIFNvRW5naW5lT3V0
cHV0RGF0YSAqb3V0cHV0RGF0YTsgc3RhdGljIGNvbnN0IFNvRmllbGREYXRhICoqcGFyZW50SW5w
dXREYXRhOyBzdGF0aWMgY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICoqcGFyZW50T3V0cHV0RGF0
YTsgcHJpdmF0ZTogc3RhdGljIHZvaWQgKmNyZWF0ZUluc3RhbmNlKCk7IHByaXZhdGU6IH5Tb0lu
dGVycG9sYXRlVmVjNGYoKTsgdmlydHVhbCB2b2lkIGV2YWx1YXRlKCk7IHB1YmxpYzogc3RhdGlj
IHZvaWQgaW5pdENsYXNzKCk7IHB1YmxpYzogU29JbnRlcnBvbGF0ZVZlYzRmKCk7CiAgICBTb01G
VmVjNGYgaW5wdXQwOwogICAgU29NRlZlYzRmIGlucHV0MTsKfTsKIyA2MCAiU29JbnRlcnBvbGF0
ZS5jKysiIDIKIyA3MCAiU29JbnRlcnBvbGF0ZS5jKysiClNvVHlwZSBTb0ludGVycG9sYXRlOjpj
bGFzc1R5cGVJZDsgU2JCb29sIFNvSW50ZXJwb2xhdGU6OmZpcnN0SW5zdGFuY2U9MTsgU29Fbmdp
bmVPdXRwdXREYXRhICpTb0ludGVycG9sYXRlOjpvdXRwdXREYXRhOyBTb0ZpZWxkRGF0YSAqIFNv
SW50ZXJwb2xhdGU6OmlucHV0RGF0YTsgY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICoqU29JbnRl
cnBvbGF0ZTo6cGFyZW50T3V0cHV0RGF0YTsgY29uc3QgU29GaWVsZERhdGEgKiogU29JbnRlcnBv
bGF0ZTo6cGFyZW50SW5wdXREYXRhOyBTb1R5cGUgU29JbnRlcnBvbGF0ZTo6Z2V0VHlwZUlkKCkg
Y29uc3QgeyByZXR1cm4gY2xhc3NUeXBlSWQ7IH0gY29uc3QgU29GaWVsZERhdGEgKiBTb0ludGVy
cG9sYXRlOjpnZXRGaWVsZERhdGEoKSBjb25zdCB7IHJldHVybiBpbnB1dERhdGE7IH0gY29uc3Qg
U29FbmdpbmVPdXRwdXREYXRhICogU29JbnRlcnBvbGF0ZTo6Z2V0T3V0cHV0RGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG91dHB1dERhdGE7IH07CiMgNzkgIlNvSW50ZXJwb2xhdGUuYysrIgpTb0ludGVy
cG9sYXRlOjpTb0ludGVycG9sYXRlKCkKCgp7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoaW5wdXRE
YXRhID09IF9fbnVsbCkgeyBpbnB1dERhdGEgPSBuZXcgU29GaWVsZERhdGEocGFyZW50SW5wdXRE
YXRhID8gKnBhcmVudElucHV0RGF0YSA6IF9fbnVsbCk7IG91dHB1dERhdGEgPSBuZXcgU29Fbmdp
bmVPdXRwdXREYXRhKHBhcmVudE91dHB1dERhdGEgPyAqcGFyZW50T3V0cHV0RGF0YSA6IF9fbnVs
bCk7IH0gZWxzZSBmaXJzdEluc3RhbmNlID0gMDsgaXNCdWlsdEluID0gMDsgfSB3aGlsZSgwKTsK
ICAgIGlzQnVpbHRJbiA9IDE7Cn0KIyA5NCAiU29JbnRlcnBvbGF0ZS5jKysiClNvSW50ZXJwb2xh
dGU6On5Tb0ludGVycG9sYXRlKCkKCgp7Cn0KCgoKCgpTb1R5cGUgU29JbnRlcnBvbGF0ZUZsb2F0
OjpjbGFzc1R5cGVJZDsgU2JCb29sIFNvSW50ZXJwb2xhdGVGbG9hdDo6Zmlyc3RJbnN0YW5jZT0x
OyBTb0VuZ2luZU91dHB1dERhdGEgKlNvSW50ZXJwb2xhdGVGbG9hdDo6b3V0cHV0RGF0YTsgU29G
aWVsZERhdGEgKiBTb0ludGVycG9sYXRlRmxvYXQ6OmlucHV0RGF0YTsgY29uc3QgU29FbmdpbmVP
dXRwdXREYXRhICoqU29JbnRlcnBvbGF0ZUZsb2F0OjpwYXJlbnRPdXRwdXREYXRhOyBjb25zdCBT
b0ZpZWxkRGF0YSAqKiBTb0ludGVycG9sYXRlRmxvYXQ6OnBhcmVudElucHV0RGF0YTsgU29UeXBl
IFNvSW50ZXJwb2xhdGVGbG9hdDo6Z2V0VHlwZUlkKCkgY29uc3QgeyByZXR1cm4gY2xhc3NUeXBl
SWQ7IH0gY29uc3QgU29GaWVsZERhdGEgKiBTb0ludGVycG9sYXRlRmxvYXQ6OmdldEZpZWxkRGF0
YSgpIGNvbnN0IHsgcmV0dXJuIGlucHV0RGF0YTsgfSBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEg
KiBTb0ludGVycG9sYXRlRmxvYXQ6OmdldE91dHB1dERhdGEoKSBjb25zdCB7IHJldHVybiBvdXRw
dXREYXRhOyB9IHZvaWQgKiBTb0ludGVycG9sYXRlRmxvYXQ6OmNyZWF0ZUluc3RhbmNlKCkgeyBy
ZXR1cm4gKHZvaWQgKikobmV3IFNvSW50ZXJwb2xhdGVGbG9hdCk7IH07IFNvSW50ZXJwb2xhdGVG
bG9hdDo6U29JbnRlcnBvbGF0ZUZsb2F0KCkgeyBkbyB7IHdoaWxlKDApOyBpZiAoaW5wdXREYXRh
ID09IF9fbnVsbCkgeyBpbnB1dERhdGEgPSBuZXcgU29GaWVsZERhdGEocGFyZW50SW5wdXREYXRh
ID8gKnBhcmVudElucHV0RGF0YSA6IF9fbnVsbCk7IG91dHB1dERhdGEgPSBuZXcgU29FbmdpbmVP
dXRwdXREYXRhKHBhcmVudE91dHB1dERhdGEgPyAqcGFyZW50T3V0cHV0RGF0YSA6IF9fbnVsbCk7
IH0gZWxzZSBmaXJzdEluc3RhbmNlID0gMDsgaXNCdWlsdEluID0gMDsgfSB3aGlsZSgwKTsgZG8g
eyB3aGlsZSgwKTsgaWYgKGZpcnN0SW5zdGFuY2UpIGlucHV0RGF0YS0+YWRkRmllbGQodGhpcywg
ImFscGhhIiwgJnRoaXMtPmFscGhhKTsgdGhpcy0+YWxwaGEuc2V0VmFsdWUgKDAuMCk7IHRoaXMt
PmFscGhhLnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsgZG8geyB3aGlsZSgwKTsgaWYg
KGZpcnN0SW5zdGFuY2UpIGlucHV0RGF0YS0+YWRkRmllbGQodGhpcywgImlucHV0MCIsICZ0aGlz
LT5pbnB1dDApOyB0aGlzLT5pbnB1dDAuc2V0VmFsdWUgKDApOyB0aGlzLT5pbnB1dDAuc2V0Q29u
dGFpbmVyKHRoaXMpOyB9IHdoaWxlKDApOyBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5j
ZSkgaW5wdXREYXRhLT5hZGRGaWVsZCh0aGlzLCAiaW5wdXQxIiwgJnRoaXMtPmlucHV0MSk7IHRo
aXMtPmlucHV0MS5zZXRWYWx1ZSAoMSk7IHRoaXMtPmlucHV0MS5zZXRDb250YWluZXIodGhpcyk7
IH0gd2hpbGUoMCk7IGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBvdXRwdXREYXRh
LT5hZGRPdXRwdXQodGhpcywgIm91dHB1dCIsICZ0aGlzLT5vdXRwdXQsIFNvTUZGbG9hdDo6Z2V0
Q2xhc3NUeXBlSWQoKSk7IHRoaXMtPm91dHB1dC5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUo
MCk7IGlzQnVpbHRJbiA9IDE7IH0gU29JbnRlcnBvbGF0ZUZsb2F0Ojp+U29JbnRlcnBvbGF0ZUZs
b2F0KCkgeyB9IHZvaWQgU29JbnRlcnBvbGF0ZUZsb2F0OjpldmFsdWF0ZSgpIHsgaW50IG4wID0g
aW5wdXQwLmdldE51bSgpOyBpbnQgbjEgPSBpbnB1dDEuZ2V0TnVtKCk7IGZsb2F0IGEgPSBhbHBo
YS5nZXRWYWx1ZSgpOyBmb3IgKGludCBpPW1heChuMCxuMSktMTsgaT49MDsgaS0tKSB7IGZsb2F0
IHYwID0gaW5wdXQwW2NsYW1wKGksbjApXTsgZmxvYXQgdjEgPSBpbnB1dDFbY2xhbXAoaSxuMSld
OyBkbyB7IGlmIChvdXRwdXQuaXNFbmFibGVkKCkpIHsgZm9yIChpbnQgX2VuZ19vdXRfaSA9IDA7
IF9lbmdfb3V0X2kgPCBvdXRwdXQuZ2V0TnVtQ29ubmVjdGlvbnMoKTsgX2VuZ19vdXRfaSsrKSB7
IFNvTUZGbG9hdCAqX2VuZ19vdXRfdGVtcCA9IChTb01GRmxvYXQgKikgb3V0cHV0W19lbmdfb3V0
X2ldOyBpZiAoIV9lbmdfb3V0X3RlbXAtPmlzUmVhZE9ubHkoKSkgeyBfZW5nX291dF90ZW1wLT5z
ZXQxVmFsdWUoaSwgKCgxLWEpKnYwKSsoYSp2MSkpOyB9IH0gfSB9IHdoaWxlKDApOyB9IH07CgoK
U29UeXBlIFNvSW50ZXJwb2xhdGVSb3RhdGlvbjo6Y2xhc3NUeXBlSWQ7IFNiQm9vbCBTb0ludGVy
cG9sYXRlUm90YXRpb246OmZpcnN0SW5zdGFuY2U9MTsgU29FbmdpbmVPdXRwdXREYXRhICpTb0lu
dGVycG9sYXRlUm90YXRpb246Om91dHB1dERhdGE7IFNvRmllbGREYXRhICogU29JbnRlcnBvbGF0
ZVJvdGF0aW9uOjppbnB1dERhdGE7IGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqKlNvSW50ZXJw
b2xhdGVSb3RhdGlvbjo6cGFyZW50T3V0cHV0RGF0YTsgY29uc3QgU29GaWVsZERhdGEgKiogU29J
bnRlcnBvbGF0ZVJvdGF0aW9uOjpwYXJlbnRJbnB1dERhdGE7IFNvVHlwZSBTb0ludGVycG9sYXRl
Um90YXRpb246OmdldFR5cGVJZCgpIGNvbnN0IHsgcmV0dXJuIGNsYXNzVHlwZUlkOyB9IGNvbnN0
IFNvRmllbGREYXRhICogU29JbnRlcnBvbGF0ZVJvdGF0aW9uOjpnZXRGaWVsZERhdGEoKSBjb25z
dCB7IHJldHVybiBpbnB1dERhdGE7IH0gY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICogU29JbnRl
cnBvbGF0ZVJvdGF0aW9uOjpnZXRPdXRwdXREYXRhKCkgY29uc3QgeyByZXR1cm4gb3V0cHV0RGF0
YTsgfSB2b2lkICogU29JbnRlcnBvbGF0ZVJvdGF0aW9uOjpjcmVhdGVJbnN0YW5jZSgpIHsgcmV0
dXJuICh2b2lkICopKG5ldyBTb0ludGVycG9sYXRlUm90YXRpb24pOyB9OyBTb0ludGVycG9sYXRl
Um90YXRpb246OlNvSW50ZXJwb2xhdGVSb3RhdGlvbigpIHsgZG8geyB3aGlsZSgwKTsgaWYgKGlu
cHV0RGF0YSA9PSBfX251bGwpIHsgaW5wdXREYXRhID0gbmV3IFNvRmllbGREYXRhKHBhcmVudElu
cHV0RGF0YSA/ICpwYXJlbnRJbnB1dERhdGEgOiBfX251bGwpOyBvdXRwdXREYXRhID0gbmV3IFNv
RW5naW5lT3V0cHV0RGF0YShwYXJlbnRPdXRwdXREYXRhID8gKnBhcmVudE91dHB1dERhdGEgOiBf
X251bGwpOyB9IGVsc2UgZmlyc3RJbnN0YW5jZSA9IDA7IGlzQnVpbHRJbiA9IDA7IH0gd2hpbGUo
MCk7IGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFkZEZpZWxk
KHRoaXMsICJhbHBoYSIsICZ0aGlzLT5hbHBoYSk7IHRoaXMtPmFscGhhLnNldFZhbHVlICgwLjAp
OyB0aGlzLT5hbHBoYS5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7IGRvIHsgd2hpbGUo
MCk7IGlmIChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFkZEZpZWxkKHRoaXMsICJpbnB1dDAi
LCAmdGhpcy0+aW5wdXQwKTsgdGhpcy0+aW5wdXQwLnNldFZhbHVlIChTYlJvdGF0aW9uOjppZGVu
dGl0eSgpKTsgdGhpcy0+aW5wdXQwLnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsgZG8g
eyB3aGlsZSgwKTsgaWYgKGZpcnN0SW5zdGFuY2UpIGlucHV0RGF0YS0+YWRkRmllbGQodGhpcywg
ImlucHV0MSIsICZ0aGlzLT5pbnB1dDEpOyB0aGlzLT5pbnB1dDEuc2V0VmFsdWUgKFNiUm90YXRp
b246OmlkZW50aXR5KCkpOyB0aGlzLT5pbnB1dDEuc2V0Q29udGFpbmVyKHRoaXMpOyB9IHdoaWxl
KDApOyBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgb3V0cHV0RGF0YS0+YWRkT3V0
cHV0KHRoaXMsICJvdXRwdXQiLCAmdGhpcy0+b3V0cHV0LCBTb01GUm90YXRpb246OmdldENsYXNz
VHlwZUlkKCkpOyB0aGlzLT5vdXRwdXQuc2V0Q29udGFpbmVyKHRoaXMpOyB9IHdoaWxlKDApOyBp
c0J1aWx0SW4gPSAxOyB9IFNvSW50ZXJwb2xhdGVSb3RhdGlvbjo6flNvSW50ZXJwb2xhdGVSb3Rh
dGlvbigpIHsgfSB2b2lkIFNvSW50ZXJwb2xhdGVSb3RhdGlvbjo6ZXZhbHVhdGUoKSB7IGludCBu
MCA9IGlucHV0MC5nZXROdW0oKTsgaW50IG4xID0gaW5wdXQxLmdldE51bSgpOyBmbG9hdCBhID0g
YWxwaGEuZ2V0VmFsdWUoKTsgZm9yIChpbnQgaT1tYXgobjAsbjEpLTE7IGk+PTA7IGktLSkgeyBT
YlJvdGF0aW9uIHYwID0gaW5wdXQwW2NsYW1wKGksbjApXTsgU2JSb3RhdGlvbiB2MSA9IGlucHV0
MVtjbGFtcChpLG4xKV07IGRvIHsgaWYgKG91dHB1dC5pc0VuYWJsZWQoKSkgeyBmb3IgKGludCBf
ZW5nX291dF9pID0gMDsgX2VuZ19vdXRfaSA8IG91dHB1dC5nZXROdW1Db25uZWN0aW9ucygpOyBf
ZW5nX291dF9pKyspIHsgU29NRlJvdGF0aW9uICpfZW5nX291dF90ZW1wID0gKFNvTUZSb3RhdGlv
biAqKSBvdXRwdXRbX2VuZ19vdXRfaV07IGlmICghX2VuZ19vdXRfdGVtcC0+aXNSZWFkT25seSgp
KSB7IF9lbmdfb3V0X3RlbXAtPnNldDFWYWx1ZShpLCBTYlJvdGF0aW9uOjpzbGVycCh2MCx2MSxh
KSk7IH0gfSB9IH0gd2hpbGUoMCk7IH0gfTsKCgoKClNvVHlwZSBTb0ludGVycG9sYXRlVmVjMmY6
OmNsYXNzVHlwZUlkOyBTYkJvb2wgU29JbnRlcnBvbGF0ZVZlYzJmOjpmaXJzdEluc3RhbmNlPTE7
IFNvRW5naW5lT3V0cHV0RGF0YSAqU29JbnRlcnBvbGF0ZVZlYzJmOjpvdXRwdXREYXRhOyBTb0Zp
ZWxkRGF0YSAqIFNvSW50ZXJwb2xhdGVWZWMyZjo6aW5wdXREYXRhOyBjb25zdCBTb0VuZ2luZU91
dHB1dERhdGEgKipTb0ludGVycG9sYXRlVmVjMmY6OnBhcmVudE91dHB1dERhdGE7IGNvbnN0IFNv
RmllbGREYXRhICoqIFNvSW50ZXJwb2xhdGVWZWMyZjo6cGFyZW50SW5wdXREYXRhOyBTb1R5cGUg
U29JbnRlcnBvbGF0ZVZlYzJmOjpnZXRUeXBlSWQoKSBjb25zdCB7IHJldHVybiBjbGFzc1R5cGVJ
ZDsgfSBjb25zdCBTb0ZpZWxkRGF0YSAqIFNvSW50ZXJwb2xhdGVWZWMyZjo6Z2V0RmllbGREYXRh
KCkgY29uc3QgeyByZXR1cm4gaW5wdXREYXRhOyB9IGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAq
IFNvSW50ZXJwb2xhdGVWZWMyZjo6Z2V0T3V0cHV0RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG91dHB1
dERhdGE7IH0gdm9pZCAqIFNvSW50ZXJwb2xhdGVWZWMyZjo6Y3JlYXRlSW5zdGFuY2UoKSB7IHJl
dHVybiAodm9pZCAqKShuZXcgU29JbnRlcnBvbGF0ZVZlYzJmKTsgfTsgU29JbnRlcnBvbGF0ZVZl
YzJmOjpTb0ludGVycG9sYXRlVmVjMmYoKSB7IGRvIHsgd2hpbGUoMCk7IGlmIChpbnB1dERhdGEg
PT0gX19udWxsKSB7IGlucHV0RGF0YSA9IG5ldyBTb0ZpZWxkRGF0YShwYXJlbnRJbnB1dERhdGEg
PyAqcGFyZW50SW5wdXREYXRhIDogX19udWxsKTsgb3V0cHV0RGF0YSA9IG5ldyBTb0VuZ2luZU91
dHB1dERhdGEocGFyZW50T3V0cHV0RGF0YSA/ICpwYXJlbnRPdXRwdXREYXRhIDogX19udWxsKTsg
fSBlbHNlIGZpcnN0SW5zdGFuY2UgPSAwOyBpc0J1aWx0SW4gPSAwOyB9IHdoaWxlKDApOyBkbyB7
IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgaW5wdXREYXRhLT5hZGRGaWVsZCh0aGlzLCAi
YWxwaGEiLCAmdGhpcy0+YWxwaGEpOyB0aGlzLT5hbHBoYS5zZXRWYWx1ZSAoMC4wKTsgdGhpcy0+
YWxwaGEuc2V0Q29udGFpbmVyKHRoaXMpOyB9IHdoaWxlKDApOyBkbyB7IHdoaWxlKDApOyBpZiAo
Zmlyc3RJbnN0YW5jZSkgaW5wdXREYXRhLT5hZGRGaWVsZCh0aGlzLCAiaW5wdXQwIiwgJnRoaXMt
PmlucHV0MCk7IHRoaXMtPmlucHV0MC5zZXRWYWx1ZSAoU2JWZWMyZigwLDApKTsgdGhpcy0+aW5w
dXQwLnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsgZG8geyB3aGlsZSgwKTsgaWYgKGZp
cnN0SW5zdGFuY2UpIGlucHV0RGF0YS0+YWRkRmllbGQodGhpcywgImlucHV0MSIsICZ0aGlzLT5p
bnB1dDEpOyB0aGlzLT5pbnB1dDEuc2V0VmFsdWUgKFNiVmVjMmYoMCwwKSk7IHRoaXMtPmlucHV0
MS5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7IGRvIHsgd2hpbGUoMCk7IGlmIChmaXJz
dEluc3RhbmNlKSBvdXRwdXREYXRhLT5hZGRPdXRwdXQodGhpcywgIm91dHB1dCIsICZ0aGlzLT5v
dXRwdXQsIFNvTUZWZWMyZjo6Z2V0Q2xhc3NUeXBlSWQoKSk7IHRoaXMtPm91dHB1dC5zZXRDb250
YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7IGlzQnVpbHRJbiA9IDE7IH0gU29JbnRlcnBvbGF0ZVZl
YzJmOjp+U29JbnRlcnBvbGF0ZVZlYzJmKCkgeyB9IHZvaWQgU29JbnRlcnBvbGF0ZVZlYzJmOjpl
dmFsdWF0ZSgpIHsgaW50IG4wID0gaW5wdXQwLmdldE51bSgpOyBpbnQgbjEgPSBpbnB1dDEuZ2V0
TnVtKCk7IGZsb2F0IGEgPSBhbHBoYS5nZXRWYWx1ZSgpOyBmb3IgKGludCBpPW1heChuMCxuMSkt
MTsgaT49MDsgaS0tKSB7IFNiVmVjMmYgdjAgPSBpbnB1dDBbY2xhbXAoaSxuMCldOyBTYlZlYzJm
IHYxID0gaW5wdXQxW2NsYW1wKGksbjEpXTsgZG8geyBpZiAob3V0cHV0LmlzRW5hYmxlZCgpKSB7
IGZvciAoaW50IF9lbmdfb3V0X2kgPSAwOyBfZW5nX291dF9pIDwgb3V0cHV0LmdldE51bUNvbm5l
Y3Rpb25zKCk7IF9lbmdfb3V0X2krKykgeyBTb01GVmVjMmYgKl9lbmdfb3V0X3RlbXAgPSAoU29N
RlZlYzJmICopIG91dHB1dFtfZW5nX291dF9pXTsgaWYgKCFfZW5nX291dF90ZW1wLT5pc1JlYWRP
bmx5KCkpIHsgX2VuZ19vdXRfdGVtcC0+c2V0MVZhbHVlKGksICgoMS1hKSp2MCkrKGEqdjEpKTsg
fSB9IH0gfSB3aGlsZSgwKTsgfSB9OwoKCgpTb1R5cGUgU29JbnRlcnBvbGF0ZVZlYzNmOjpjbGFz
c1R5cGVJZDsgU2JCb29sIFNvSW50ZXJwb2xhdGVWZWMzZjo6Zmlyc3RJbnN0YW5jZT0xOyBTb0Vu
Z2luZU91dHB1dERhdGEgKlNvSW50ZXJwb2xhdGVWZWMzZjo6b3V0cHV0RGF0YTsgU29GaWVsZERh
dGEgKiBTb0ludGVycG9sYXRlVmVjM2Y6OmlucHV0RGF0YTsgY29uc3QgU29FbmdpbmVPdXRwdXRE
YXRhICoqU29JbnRlcnBvbGF0ZVZlYzNmOjpwYXJlbnRPdXRwdXREYXRhOyBjb25zdCBTb0ZpZWxk
RGF0YSAqKiBTb0ludGVycG9sYXRlVmVjM2Y6OnBhcmVudElucHV0RGF0YTsgU29UeXBlIFNvSW50
ZXJwb2xhdGVWZWMzZjo6Z2V0VHlwZUlkKCkgY29uc3QgeyByZXR1cm4gY2xhc3NUeXBlSWQ7IH0g
Y29uc3QgU29GaWVsZERhdGEgKiBTb0ludGVycG9sYXRlVmVjM2Y6OmdldEZpZWxkRGF0YSgpIGNv
bnN0IHsgcmV0dXJuIGlucHV0RGF0YTsgfSBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKiBTb0lu
dGVycG9sYXRlVmVjM2Y6OmdldE91dHB1dERhdGEoKSBjb25zdCB7IHJldHVybiBvdXRwdXREYXRh
OyB9IHZvaWQgKiBTb0ludGVycG9sYXRlVmVjM2Y6OmNyZWF0ZUluc3RhbmNlKCkgeyByZXR1cm4g
KHZvaWQgKikobmV3IFNvSW50ZXJwb2xhdGVWZWMzZik7IH07IFNvSW50ZXJwb2xhdGVWZWMzZjo6
U29JbnRlcnBvbGF0ZVZlYzNmKCkgeyBkbyB7IHdoaWxlKDApOyBpZiAoaW5wdXREYXRhID09IF9f
bnVsbCkgeyBpbnB1dERhdGEgPSBuZXcgU29GaWVsZERhdGEocGFyZW50SW5wdXREYXRhID8gKnBh
cmVudElucHV0RGF0YSA6IF9fbnVsbCk7IG91dHB1dERhdGEgPSBuZXcgU29FbmdpbmVPdXRwdXRE
YXRhKHBhcmVudE91dHB1dERhdGEgPyAqcGFyZW50T3V0cHV0RGF0YSA6IF9fbnVsbCk7IH0gZWxz
ZSBmaXJzdEluc3RhbmNlID0gMDsgaXNCdWlsdEluID0gMDsgfSB3aGlsZSgwKTsgZG8geyB3aGls
ZSgwKTsgaWYgKGZpcnN0SW5zdGFuY2UpIGlucHV0RGF0YS0+YWRkRmllbGQodGhpcywgImFscGhh
IiwgJnRoaXMtPmFscGhhKTsgdGhpcy0+YWxwaGEuc2V0VmFsdWUgKDAuMCk7IHRoaXMtPmFscGhh
LnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsgZG8geyB3aGlsZSgwKTsgaWYgKGZpcnN0
SW5zdGFuY2UpIGlucHV0RGF0YS0+YWRkRmllbGQodGhpcywgImlucHV0MCIsICZ0aGlzLT5pbnB1
dDApOyB0aGlzLT5pbnB1dDAuc2V0VmFsdWUgKFNiVmVjM2YoMCwwLDApKTsgdGhpcy0+aW5wdXQw
LnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsgZG8geyB3aGlsZSgwKTsgaWYgKGZpcnN0
SW5zdGFuY2UpIGlucHV0RGF0YS0+YWRkRmllbGQodGhpcywgImlucHV0MSIsICZ0aGlzLT5pbnB1
dDEpOyB0aGlzLT5pbnB1dDEuc2V0VmFsdWUgKFNiVmVjM2YoMCwwLDApKTsgdGhpcy0+aW5wdXQx
LnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsgZG8geyB3aGlsZSgwKTsgaWYgKGZpcnN0
SW5zdGFuY2UpIG91dHB1dERhdGEtPmFkZE91dHB1dCh0aGlzLCAib3V0cHV0IiwgJnRoaXMtPm91
dHB1dCwgU29NRlZlYzNmOjpnZXRDbGFzc1R5cGVJZCgpKTsgdGhpcy0+b3V0cHV0LnNldENvbnRh
aW5lcih0aGlzKTsgfSB3aGlsZSgwKTsgaXNCdWlsdEluID0gMTsgfSBTb0ludGVycG9sYXRlVmVj
M2Y6On5Tb0ludGVycG9sYXRlVmVjM2YoKSB7IH0gdm9pZCBTb0ludGVycG9sYXRlVmVjM2Y6OmV2
YWx1YXRlKCkgeyBpbnQgbjAgPSBpbnB1dDAuZ2V0TnVtKCk7IGludCBuMSA9IGlucHV0MS5nZXRO
dW0oKTsgZmxvYXQgYSA9IGFscGhhLmdldFZhbHVlKCk7IGZvciAoaW50IGk9bWF4KG4wLG4xKS0x
OyBpPj0wOyBpLS0pIHsgU2JWZWMzZiB2MCA9IGlucHV0MFtjbGFtcChpLG4wKV07IFNiVmVjM2Yg
djEgPSBpbnB1dDFbY2xhbXAoaSxuMSldOyBkbyB7IGlmIChvdXRwdXQuaXNFbmFibGVkKCkpIHsg
Zm9yIChpbnQgX2VuZ19vdXRfaSA9IDA7IF9lbmdfb3V0X2kgPCBvdXRwdXQuZ2V0TnVtQ29ubmVj
dGlvbnMoKTsgX2VuZ19vdXRfaSsrKSB7IFNvTUZWZWMzZiAqX2VuZ19vdXRfdGVtcCA9IChTb01G
VmVjM2YgKikgb3V0cHV0W19lbmdfb3V0X2ldOyBpZiAoIV9lbmdfb3V0X3RlbXAtPmlzUmVhZE9u
bHkoKSkgeyBfZW5nX291dF90ZW1wLT5zZXQxVmFsdWUoaSwgKCgxLWEpKnYwKSsoYSp2MSkpOyB9
IH0gfSB9IHdoaWxlKDApOyB9IH07CgoKClNvVHlwZSBTb0ludGVycG9sYXRlVmVjNGY6OmNsYXNz
VHlwZUlkOyBTYkJvb2wgU29JbnRlcnBvbGF0ZVZlYzRmOjpmaXJzdEluc3RhbmNlPTE7IFNvRW5n
aW5lT3V0cHV0RGF0YSAqU29JbnRlcnBvbGF0ZVZlYzRmOjpvdXRwdXREYXRhOyBTb0ZpZWxkRGF0
YSAqIFNvSW50ZXJwb2xhdGVWZWM0Zjo6aW5wdXREYXRhOyBjb25zdCBTb0VuZ2luZU91dHB1dERh
dGEgKipTb0ludGVycG9sYXRlVmVjNGY6OnBhcmVudE91dHB1dERhdGE7IGNvbnN0IFNvRmllbGRE
YXRhICoqIFNvSW50ZXJwb2xhdGVWZWM0Zjo6cGFyZW50SW5wdXREYXRhOyBTb1R5cGUgU29JbnRl
cnBvbGF0ZVZlYzRmOjpnZXRUeXBlSWQoKSBjb25zdCB7IHJldHVybiBjbGFzc1R5cGVJZDsgfSBj
b25zdCBTb0ZpZWxkRGF0YSAqIFNvSW50ZXJwb2xhdGVWZWM0Zjo6Z2V0RmllbGREYXRhKCkgY29u
c3QgeyByZXR1cm4gaW5wdXREYXRhOyB9IGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqIFNvSW50
ZXJwb2xhdGVWZWM0Zjo6Z2V0T3V0cHV0RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG91dHB1dERhdGE7
IH0gdm9pZCAqIFNvSW50ZXJwb2xhdGVWZWM0Zjo6Y3JlYXRlSW5zdGFuY2UoKSB7IHJldHVybiAo
dm9pZCAqKShuZXcgU29JbnRlcnBvbGF0ZVZlYzRmKTsgfTsgU29JbnRlcnBvbGF0ZVZlYzRmOjpT
b0ludGVycG9sYXRlVmVjNGYoKSB7IGRvIHsgd2hpbGUoMCk7IGlmIChpbnB1dERhdGEgPT0gX19u
dWxsKSB7IGlucHV0RGF0YSA9IG5ldyBTb0ZpZWxkRGF0YShwYXJlbnRJbnB1dERhdGEgPyAqcGFy
ZW50SW5wdXREYXRhIDogX19udWxsKTsgb3V0cHV0RGF0YSA9IG5ldyBTb0VuZ2luZU91dHB1dERh
dGEocGFyZW50T3V0cHV0RGF0YSA/ICpwYXJlbnRPdXRwdXREYXRhIDogX19udWxsKTsgfSBlbHNl
IGZpcnN0SW5zdGFuY2UgPSAwOyBpc0J1aWx0SW4gPSAwOyB9IHdoaWxlKDApOyBkbyB7IHdoaWxl
KDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgaW5wdXREYXRhLT5hZGRGaWVsZCh0aGlzLCAiYWxwaGEi
LCAmdGhpcy0+YWxwaGEpOyB0aGlzLT5hbHBoYS5zZXRWYWx1ZSAoMC4wKTsgdGhpcy0+YWxwaGEu
c2V0Q29udGFpbmVyKHRoaXMpOyB9IHdoaWxlKDApOyBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJ
bnN0YW5jZSkgaW5wdXREYXRhLT5hZGRGaWVsZCh0aGlzLCAiaW5wdXQwIiwgJnRoaXMtPmlucHV0
MCk7IHRoaXMtPmlucHV0MC5zZXRWYWx1ZSAoU2JWZWM0ZigwLDAsMCwwKSk7IHRoaXMtPmlucHV0
MC5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7IGRvIHsgd2hpbGUoMCk7IGlmIChmaXJz
dEluc3RhbmNlKSBpbnB1dERhdGEtPmFkZEZpZWxkKHRoaXMsICJpbnB1dDEiLCAmdGhpcy0+aW5w
dXQxKTsgdGhpcy0+aW5wdXQxLnNldFZhbHVlIChTYlZlYzRmKDAsMCwwLDApKTsgdGhpcy0+aW5w
dXQxLnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsgZG8geyB3aGlsZSgwKTsgaWYgKGZp
cnN0SW5zdGFuY2UpIG91dHB1dERhdGEtPmFkZE91dHB1dCh0aGlzLCAib3V0cHV0IiwgJnRoaXMt
Pm91dHB1dCwgU29NRlZlYzRmOjpnZXRDbGFzc1R5cGVJZCgpKTsgdGhpcy0+b3V0cHV0LnNldENv
bnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsgaXNCdWlsdEluID0gMTsgfSBTb0ludGVycG9sYXRl
VmVjNGY6On5Tb0ludGVycG9sYXRlVmVjNGYoKSB7IH0gdm9pZCBTb0ludGVycG9sYXRlVmVjNGY6
OmV2YWx1YXRlKCkgeyBpbnQgbjAgPSBpbnB1dDAuZ2V0TnVtKCk7IGludCBuMSA9IGlucHV0MS5n
ZXROdW0oKTsgZmxvYXQgYSA9IGFscGhhLmdldFZhbHVlKCk7IGZvciAoaW50IGk9bWF4KG4wLG4x
KS0xOyBpPj0wOyBpLS0pIHsgU2JWZWM0ZiB2MCA9IGlucHV0MFtjbGFtcChpLG4wKV07IFNiVmVj
NGYgdjEgPSBpbnB1dDFbY2xhbXAoaSxuMSldOyBkbyB7IGlmIChvdXRwdXQuaXNFbmFibGVkKCkp
IHsgZm9yIChpbnQgX2VuZ19vdXRfaSA9IDA7IF9lbmdfb3V0X2kgPCBvdXRwdXQuZ2V0TnVtQ29u
bmVjdGlvbnMoKTsgX2VuZ19vdXRfaSsrKSB7IFNvTUZWZWM0ZiAqX2VuZ19vdXRfdGVtcCA9IChT
b01GVmVjNGYgKikgb3V0cHV0W19lbmdfb3V0X2ldOyBpZiAoIV9lbmdfb3V0X3RlbXAtPmlzUmVh
ZE9ubHkoKSkgeyBfZW5nX291dF90ZW1wLT5zZXQxVmFsdWUoaSwgKCgxLWEpKnYwKSsoYSp2MSkp
OyB9IH0gfSB9IHdoaWxlKDApOyB9IH07CiMgNTIgIlNvRW5naW5lcy5jKysiIDIKIyAxICJTb09u
T2ZmLmMrKyIgMQojIDU1ICJTb09uT2ZmLmMrKyIKIyAxICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0
YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9lbmdpbmVzL1NvT25PZmYuaCIgMQojIDY2ICIuLi8uLi8u
Li8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9lbmdpbmVzL1NvT25PZmYuaCIK
Y2xhc3MgU29Pbk9mZiA6IHB1YmxpYyBTb0VuZ2luZSB7CgogICAgcHVibGljOiBzdGF0aWMgU29U
eXBlIGdldENsYXNzVHlwZUlkKCkgeyByZXR1cm4gY2xhc3NUeXBlSWQ7IH0gdmlydHVhbCBTb1R5
cGUgZ2V0VHlwZUlkKCkgY29uc3Q7IHB1YmxpYzogdmlydHVhbCBjb25zdCBTb0ZpZWxkRGF0YSAq
IGdldEZpZWxkRGF0YSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAq
IGdldE91dHB1dERhdGEoKSBjb25zdDsgcHJvdGVjdGVkOiBzdGF0aWMgY29uc3QgU29GaWVsZERh
dGEgKiogZ2V0SW5wdXREYXRhUHRyKCkgeyByZXR1cm4gKGNvbnN0IFNvRmllbGREYXRhICoqKSZp
bnB1dERhdGE7IH0gc3RhdGljIGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqKiBnZXRPdXRwdXRE
YXRhUHRyKCkgeyByZXR1cm4gKGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqKikmb3V0cHV0RGF0
YTsgfSBwcml2YXRlOiBzdGF0aWMgU29UeXBlIGNsYXNzVHlwZUlkOyBzdGF0aWMgU2JCb29sIGZp
cnN0SW5zdGFuY2U7IHN0YXRpYyBTb0ZpZWxkRGF0YSAqaW5wdXREYXRhOyBzdGF0aWMgU29Fbmdp
bmVPdXRwdXREYXRhICpvdXRwdXREYXRhOyBzdGF0aWMgY29uc3QgU29GaWVsZERhdGEgKipwYXJl
bnRJbnB1dERhdGE7IHN0YXRpYyBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKipwYXJlbnRPdXRw
dXREYXRhOyBwcml2YXRlOiBzdGF0aWMgdm9pZCAqY3JlYXRlSW5zdGFuY2UoKTsKCiAgcHVibGlj
OgoKCiAgICBTb1NGVHJpZ2dlciBvbjsKICAgIFNvU0ZUcmlnZ2VyIG9mZjsKICAgIFNvU0ZUcmln
Z2VyIHRvZ2dsZTsKCiAgICBTb0VuZ2luZU91dHB1dCBpc09uOwogICAgU29FbmdpbmVPdXRwdXQg
aXNPZmY7CgoKICAgIFNvT25PZmYoKTsKCiAgcHVibGljOgoKICAgIHN0YXRpYyB2b2lkIGluaXRD
bGFzcygpOwoKICBwcm90ZWN0ZWQ6CiAgICB2aXJ0dWFsIHZvaWQgaW5wdXRDaGFuZ2VkKFNvRmll
bGQgKndoaWNoSW5wdXQpOwoKICBwcml2YXRlOgoKCiAgICB+U29Pbk9mZigpOwoKCiAgICB2aXJ0
dWFsIHZvaWQgZXZhbHVhdGUoKTsKCiAgICBTYkJvb2wgc3RhdGU7Cn07CiMgNTYgIlNvT25PZmYu
YysrIiAyCgpTb1R5cGUgU29Pbk9mZjo6Y2xhc3NUeXBlSWQ7IFNiQm9vbCBTb09uT2ZmOjpmaXJz
dEluc3RhbmNlPTE7IFNvRW5naW5lT3V0cHV0RGF0YSAqU29Pbk9mZjo6b3V0cHV0RGF0YTsgU29G
aWVsZERhdGEgKiBTb09uT2ZmOjppbnB1dERhdGE7IGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAq
KlNvT25PZmY6OnBhcmVudE91dHB1dERhdGE7IGNvbnN0IFNvRmllbGREYXRhICoqIFNvT25PZmY6
OnBhcmVudElucHV0RGF0YTsgU29UeXBlIFNvT25PZmY6OmdldFR5cGVJZCgpIGNvbnN0IHsgcmV0
dXJuIGNsYXNzVHlwZUlkOyB9IGNvbnN0IFNvRmllbGREYXRhICogU29Pbk9mZjo6Z2V0RmllbGRE
YXRhKCkgY29uc3QgeyByZXR1cm4gaW5wdXREYXRhOyB9IGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0
YSAqIFNvT25PZmY6OmdldE91dHB1dERhdGEoKSBjb25zdCB7IHJldHVybiBvdXRwdXREYXRhOyB9
IHZvaWQgKiBTb09uT2ZmOjpjcmVhdGVJbnN0YW5jZSgpIHsgcmV0dXJuICh2b2lkICopKG5ldyBT
b09uT2ZmKTsgfTsKIyA2NiAiU29Pbk9mZi5jKysiClNvT25PZmY6OlNvT25PZmYoKQoKCnsKICAg
IGRvIHsgd2hpbGUoMCk7IGlmIChpbnB1dERhdGEgPT0gX19udWxsKSB7IGlucHV0RGF0YSA9IG5l
dyBTb0ZpZWxkRGF0YShwYXJlbnRJbnB1dERhdGEgPyAqcGFyZW50SW5wdXREYXRhIDogX19udWxs
KTsgb3V0cHV0RGF0YSA9IG5ldyBTb0VuZ2luZU91dHB1dERhdGEocGFyZW50T3V0cHV0RGF0YSA/
ICpwYXJlbnRPdXRwdXREYXRhIDogX19udWxsKTsgfSBlbHNlIGZpcnN0SW5zdGFuY2UgPSAwOyBp
c0J1aWx0SW4gPSAwOyB9IHdoaWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYgKGZpcnN0SW5z
dGFuY2UpIGlucHV0RGF0YS0+YWRkRmllbGQodGhpcywgIm9uIiwgJnRoaXMtPm9uKTsgdGhpcy0+
b24uc2V0VmFsdWUgKCk7IHRoaXMtPm9uLnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsK
ICAgIGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFkZEZpZWxk
KHRoaXMsICJvZmYiLCAmdGhpcy0+b2ZmKTsgdGhpcy0+b2ZmLnNldFZhbHVlICgpOyB0aGlzLT5v
ZmYuc2V0Q29udGFpbmVyKHRoaXMpOyB9IHdoaWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYg
KGZpcnN0SW5zdGFuY2UpIGlucHV0RGF0YS0+YWRkRmllbGQodGhpcywgInRvZ2dsZSIsICZ0aGlz
LT50b2dnbGUpOyB0aGlzLT50b2dnbGUuc2V0VmFsdWUgKCk7IHRoaXMtPnRvZ2dsZS5zZXRDb250
YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0
YW5jZSkgb3V0cHV0RGF0YS0+YWRkT3V0cHV0KHRoaXMsICJpc09uIiwgJnRoaXMtPmlzT24sIFNv
U0ZCb29sOjpnZXRDbGFzc1R5cGVJZCgpKTsgdGhpcy0+aXNPbi5zZXRDb250YWluZXIodGhpcyk7
IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgb3V0cHV0
RGF0YS0+YWRkT3V0cHV0KHRoaXMsICJpc09mZiIsICZ0aGlzLT5pc09mZiwgU29TRkJvb2w6Omdl
dENsYXNzVHlwZUlkKCkpOyB0aGlzLT5pc09mZi5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUo
MCk7CiAgICBpc0J1aWx0SW4gPSAxOwoKICAgIHN0YXRlID0gMDsKfQojIDg4ICJTb09uT2ZmLmMr
KyIKU29Pbk9mZjo6flNvT25PZmYoKQoKCnsKfQojIDEwMSAiU29Pbk9mZi5jKysiCnZvaWQKU29P
bk9mZjo6aW5wdXRDaGFuZ2VkKFNvRmllbGQgKndoaWNoKQoKCnsKICAgIGlmICh3aGljaCA9PSAm
b24pCiAgICAgICAgc3RhdGUgPSAxOwoKICAgIGVsc2UgaWYgKHdoaWNoID09ICZvZmYpCiAgICAg
ICAgc3RhdGUgPSAwOwoKICAgIGVsc2UgaWYgKHdoaWNoID09ICZ0b2dnbGUpCiAgICAgICAgc3Rh
dGUgPSAhc3RhdGU7Cn0KIyAxMjMgIlNvT25PZmYuYysrIgp2b2lkClNvT25PZmY6OmV2YWx1YXRl
KCkKCgp7CgogICAgb24uZ2V0VmFsdWUoKTsKICAgIG9mZi5nZXRWYWx1ZSgpOwogICAgdG9nZ2xl
LmdldFZhbHVlKCk7CgogICAgZG8geyBpZiAoaXNPbi5pc0VuYWJsZWQoKSkgeyBmb3IgKGludCBf
ZW5nX291dF9pID0gMDsgX2VuZ19vdXRfaSA8IGlzT24uZ2V0TnVtQ29ubmVjdGlvbnMoKTsgX2Vu
Z19vdXRfaSsrKSB7IFNvU0ZCb29sICpfZW5nX291dF90ZW1wID0gKFNvU0ZCb29sICopIGlzT25b
X2VuZ19vdXRfaV07IGlmICghX2VuZ19vdXRfdGVtcC0+aXNSZWFkT25seSgpKSB7IF9lbmdfb3V0
X3RlbXAtPnNldFZhbHVlKHN0YXRlKTsgfSB9IH0gfSB3aGlsZSgwKTsKICAgIGRvIHsgaWYgKGlz
T2ZmLmlzRW5hYmxlZCgpKSB7IGZvciAoaW50IF9lbmdfb3V0X2kgPSAwOyBfZW5nX291dF9pIDwg
aXNPZmYuZ2V0TnVtQ29ubmVjdGlvbnMoKTsgX2VuZ19vdXRfaSsrKSB7IFNvU0ZCb29sICpfZW5n
X291dF90ZW1wID0gKFNvU0ZCb29sICopIGlzT2ZmW19lbmdfb3V0X2ldOyBpZiAoIV9lbmdfb3V0
X3RlbXAtPmlzUmVhZE9ubHkoKSkgeyBfZW5nX291dF90ZW1wLT5zZXRWYWx1ZSghc3RhdGUpOyB9
IH0gfSB9IHdoaWxlKDApOwp9CiMgNTMgIlNvRW5naW5lcy5jKysiIDIKIyAxICJTb09uZVNob3Qu
YysrIiAxCiMgNTcgIlNvT25lU2hvdC5jKysiCiMgMSAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFi
YXNlL2luY2x1ZGUvSW52ZW50b3IvZW5naW5lcy9Tb09uZVNob3QuaCIgMQojIDY2ICIuLi8uLi8u
Li8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9lbmdpbmVzL1NvT25lU2hvdC5o
IgojIDEgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2ZpZWxk
cy9Tb1NGQml0TWFzay5oIiAxCiMgNTkgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNs
dWRlL0ludmVudG9yL2ZpZWxkcy9Tb1NGQml0TWFzay5oIgojIDEgIi4uLy4uLy4uLy4uLy4uL2xp
Yi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2ZpZWxkcy9Tb1NGRW51bS5oIiAxCiMgNzkgIi4u
Ly4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2ZpZWxkcy9Tb1NGRW51
bS5oIgpjbGFzcyBTb1NGRW51bSA6IHB1YmxpYyBTb1NGaWVsZCB7CgogICAgcHVibGljOiB2aXJ0
dWFsIFNvVHlwZSBnZXRUeXBlSWQoKSBjb25zdDsgc3RhdGljIFNvVHlwZSBnZXRDbGFzc1R5cGVJ
ZCgpIHsgcmV0dXJuIGNsYXNzVHlwZUlkOyB9IGNvbnN0IFNvU0ZFbnVtICYgb3BlcmF0b3IgPShj
b25zdCBTb1NGRW51bSAmZik7IHB1YmxpYzogdmlydHVhbCB2b2lkIGNvcHlGcm9tKGNvbnN0IFNv
RmllbGQgJmYpOyBzdGF0aWMgdm9pZCAqIGNyZWF0ZUluc3RhbmNlKCk7IHZpcnR1YWwgU2JCb29s
IGlzU2FtZShjb25zdCBTb0ZpZWxkICZmKSBjb25zdDsgcHJpdmF0ZTogc3RhdGljIFNvVHlwZSBj
bGFzc1R5cGVJZDsgcHVibGljOiBTb1NGRW51bSgpOyB2aXJ0dWFsIH5Tb1NGRW51bSgpOyBwcml2
YXRlOiB2aXJ0dWFsIFNiQm9vbCByZWFkVmFsdWUoU29JbnB1dCAqaW4pOyB2aXJ0dWFsIHZvaWQg
d3JpdGVWYWx1ZShTb091dHB1dCAqb3V0KSBjb25zdDsgcHVibGljOiBpbnQgZ2V0VmFsdWUoKSBj
b25zdCB7IGV2YWx1YXRlKCk7IHJldHVybiB2YWx1ZTsgfSB2b2lkIHNldFZhbHVlKGludCBuZXdW
YWx1ZSk7IGludCBvcGVyYXRvciA9KGludCBuZXdWYWx1ZSkgeyBzZXRWYWx1ZShuZXdWYWx1ZSk7
IHJldHVybiB2YWx1ZTsgfSBpbnQgb3BlcmF0b3IgPT0oY29uc3QgU29TRkVudW0gJmYpIGNvbnN0
OyBpbnQgb3BlcmF0b3IgIT0oY29uc3QgU29TRkVudW0gJmYpIGNvbnN0IHsgcmV0dXJuICEgKCgq
dGhpcykgPT0gZik7IH0gcHJvdGVjdGVkOiBpbnQgdmFsdWU7CgogIHB1YmxpYzoKCgogICAgdm9p
ZCBzZXRWYWx1ZShjb25zdCBTYk5hbWUgJm5hbWUpOwoKICBwdWJsaWM6CgoKICAgIHZvaWQgc2V0
RW51bXMoaW50IG51bSwgaW50ICp2YWxzLCBTYk5hbWUgKm5hbWVzKTsKCiAgcHVibGljOgogICAg
c3RhdGljIHZvaWQgaW5pdENsYXNzKCk7CgogIHByb3RlY3RlZDoKICAgIFNiQm9vbCBsZWdhbFZh
bHVlc1NldDsKICAgIGludCBudW1FbnVtczsKICAgIGludCAqZW51bVZhbHVlczsKICAgIFNiTmFt
ZSAqZW51bU5hbWVzOwoKCiAgICB2aXJ0dWFsIFNiQm9vbCBmaW5kRW51bVZhbHVlKGNvbnN0IFNi
TmFtZSAmbmFtZSwgaW50ICZ2YWwpOwoKCiAgICB2aXJ0dWFsIFNiQm9vbCBmaW5kRW51bU5hbWUo
aW50IHZhbCwgY29uc3QgU2JOYW1lICombmFtZSkgY29uc3Q7Cn07CiMgNjAgIi4uLy4uLy4uLy4u
Ly4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2ZpZWxkcy9Tb1NGQml0TWFzay5oIiAy
CiMgNjggIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2ZpZWxk
cy9Tb1NGQml0TWFzay5oIgpjbGFzcyBTb1NGQml0TWFzayA6IHB1YmxpYyBTb1NGRW51bSB7CgoK
CiAgICBwdWJsaWM6IHZpcnR1YWwgU29UeXBlIGdldFR5cGVJZCgpIGNvbnN0OyBzdGF0aWMgU29U
eXBlIGdldENsYXNzVHlwZUlkKCkgeyByZXR1cm4gY2xhc3NUeXBlSWQ7IH0gY29uc3QgU29TRkJp
dE1hc2sgJiBvcGVyYXRvciA9KGNvbnN0IFNvU0ZCaXRNYXNrICZmKTsgcHVibGljOiB2aXJ0dWFs
IHZvaWQgY29weUZyb20oY29uc3QgU29GaWVsZCAmZik7IHN0YXRpYyB2b2lkICogY3JlYXRlSW5z
dGFuY2UoKTsgdmlydHVhbCBTYkJvb2wgaXNTYW1lKGNvbnN0IFNvRmllbGQgJmYpIGNvbnN0OyBw
cml2YXRlOiBzdGF0aWMgU29UeXBlIGNsYXNzVHlwZUlkOyBwdWJsaWM6IFNvU0ZCaXRNYXNrKCk7
IHZpcnR1YWwgflNvU0ZCaXRNYXNrKCk7IHByaXZhdGU6IHZpcnR1YWwgU2JCb29sIHJlYWRWYWx1
ZShTb0lucHV0ICppbik7IHZpcnR1YWwgdm9pZCB3cml0ZVZhbHVlKFNvT3V0cHV0ICpvdXQpIGNv
bnN0OyBwdWJsaWM6IGludCBvcGVyYXRvciA9KGludCBuZXdWYWx1ZSkgeyBzZXRWYWx1ZShuZXdW
YWx1ZSk7IHJldHVybiB2YWx1ZTsgfTsKCgoKICBwcm90ZWN0ZWQ6CgogICAgdmlydHVhbCBTYkJv
b2wgZmluZEVudW1WYWx1ZShjb25zdCBTYk5hbWUgJm5hbWUsIGludCAmdmFsKTsKCiAgcHVibGlj
OgogICAgc3RhdGljIHZvaWQgaW5pdENsYXNzKCk7Cn07CiMgNjcgIi4uLy4uLy4uLy4uLy4uL2xp
Yi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2VuZ2luZXMvU29PbmVTaG90LmgiIDIKCgoKY2xh
c3MgU29PbmVTaG90IDogcHVibGljIFNvRW5naW5lIHsKCiAgICBwdWJsaWM6IHN0YXRpYyBTb1R5
cGUgZ2V0Q2xhc3NUeXBlSWQoKSB7IHJldHVybiBjbGFzc1R5cGVJZDsgfSB2aXJ0dWFsIFNvVHlw
ZSBnZXRUeXBlSWQoKSBjb25zdDsgcHVibGljOiB2aXJ0dWFsIGNvbnN0IFNvRmllbGREYXRhICog
Z2V0RmllbGREYXRhKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICog
Z2V0T3V0cHV0RGF0YSgpIGNvbnN0OyBwcm90ZWN0ZWQ6IHN0YXRpYyBjb25zdCBTb0ZpZWxkRGF0
YSAqKiBnZXRJbnB1dERhdGFQdHIoKSB7IHJldHVybiAoY29uc3QgU29GaWVsZERhdGEgKiopJmlu
cHV0RGF0YTsgfSBzdGF0aWMgY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICoqIGdldE91dHB1dERh
dGFQdHIoKSB7IHJldHVybiAoY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICoqKSZvdXRwdXREYXRh
OyB9IHByaXZhdGU6IHN0YXRpYyBTb1R5cGUgY2xhc3NUeXBlSWQ7IHN0YXRpYyBTYkJvb2wgZmly
c3RJbnN0YW5jZTsgc3RhdGljIFNvRmllbGREYXRhICppbnB1dERhdGE7IHN0YXRpYyBTb0VuZ2lu
ZU91dHB1dERhdGEgKm91dHB1dERhdGE7IHN0YXRpYyBjb25zdCBTb0ZpZWxkRGF0YSAqKnBhcmVu
dElucHV0RGF0YTsgc3RhdGljIGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqKnBhcmVudE91dHB1
dERhdGE7IHByaXZhdGU6IHN0YXRpYyB2b2lkICpjcmVhdGVJbnN0YW5jZSgpOwoKICBwdWJsaWM6
CiAgICBlbnVtIEZsYWdzIHsKICAgICAgICBSRVRSSUdHRVJBQkxFID0gKDE8PDApLAogICAgICAg
IEhPTERfRklOQUwgPSAoMTw8MSkKICAgIH07CgoKICAgIFNvU0ZUaW1lIGR1cmF0aW9uOwogICAg
U29TRlRyaWdnZXIgdHJpZ2dlcjsKICAgIFNvU0ZCaXRNYXNrIGZsYWdzOwogICAgU29TRkJvb2wg
ZGlzYWJsZTsKICAgIFNvU0ZUaW1lIHRpbWVJbjsKCgogICAgU29FbmdpbmVPdXRwdXQgdGltZU91
dDsKICAgIFNvRW5naW5lT3V0cHV0IGlzQWN0aXZlOwogICAgU29FbmdpbmVPdXRwdXQgcmFtcDsK
CgogICAgU29PbmVTaG90KCk7CgogIHB1YmxpYzoKCiAgICBzdGF0aWMgdm9pZCBpbml0Q2xhc3Mo
KTsKCiAgcHJvdGVjdGVkOgogICAgdmlydHVhbCB2b2lkIGlucHV0Q2hhbmdlZChTb0ZpZWxkICp3
aGljaElucHV0KTsKCgoKICAgIHZpcnR1YWwgdm9pZCB3cml0ZUluc3RhbmNlKFNvT3V0cHV0ICpv
dXQpOwoKCgoKICAgIHZpcnR1YWwgU2JCb29sIHJlYWRJbnN0YW5jZShTb0lucHV0ICppbiwgdW5z
aWduZWQgc2hvcnQgZmxhZ3MpOwoKICBwcml2YXRlOgogICAgZW51bSBTdGF0ZSB7CiAgICAgICAg
RElTQUJMRUQsCiAgICAgICAgT0ZGLAogICAgICAgIFRSSUdHRVJFRCwKICAgICAgICBPTiwKICAg
ICAgICBQRUFLRUQKICAgIH0gc3RhdGU7CiAgICBTYlRpbWUgYmFzZVRpbWU7CiAgICBTYlRpbWUg
dGltZVZhbDsKICAgIGRvdWJsZSByYW1wVmFsOwogICAgU2JCb29sIG91dHB1dFBlbmRpbmc7CgoK
ICAgIH5Tb09uZVNob3QoKTsKCgogICAgdmlydHVhbCB2b2lkIGV2YWx1YXRlKCk7Cn07CiMgNTgg
IlNvT25lU2hvdC5jKysiIDIKClNvVHlwZSBTb09uZVNob3Q6OmNsYXNzVHlwZUlkOyBTYkJvb2wg
U29PbmVTaG90OjpmaXJzdEluc3RhbmNlPTE7IFNvRW5naW5lT3V0cHV0RGF0YSAqU29PbmVTaG90
OjpvdXRwdXREYXRhOyBTb0ZpZWxkRGF0YSAqIFNvT25lU2hvdDo6aW5wdXREYXRhOyBjb25zdCBT
b0VuZ2luZU91dHB1dERhdGEgKipTb09uZVNob3Q6OnBhcmVudE91dHB1dERhdGE7IGNvbnN0IFNv
RmllbGREYXRhICoqIFNvT25lU2hvdDo6cGFyZW50SW5wdXREYXRhOyBTb1R5cGUgU29PbmVTaG90
OjpnZXRUeXBlSWQoKSBjb25zdCB7IHJldHVybiBjbGFzc1R5cGVJZDsgfSBjb25zdCBTb0ZpZWxk
RGF0YSAqIFNvT25lU2hvdDo6Z2V0RmllbGREYXRhKCkgY29uc3QgeyByZXR1cm4gaW5wdXREYXRh
OyB9IGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqIFNvT25lU2hvdDo6Z2V0T3V0cHV0RGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG91dHB1dERhdGE7IH0gdm9pZCAqIFNvT25lU2hvdDo6Y3JlYXRlSW5z
dGFuY2UoKSB7IHJldHVybiAodm9pZCAqKShuZXcgU29PbmVTaG90KTsgfTsKIyA2OCAiU29PbmVT
aG90LmMrKyIKU29PbmVTaG90OjpTb09uZVNob3QoKQoKCnsKICAgIGRvIHsgd2hpbGUoMCk7IGlm
IChpbnB1dERhdGEgPT0gX19udWxsKSB7IGlucHV0RGF0YSA9IG5ldyBTb0ZpZWxkRGF0YShwYXJl
bnRJbnB1dERhdGEgPyAqcGFyZW50SW5wdXREYXRhIDogX19udWxsKTsgb3V0cHV0RGF0YSA9IG5l
dyBTb0VuZ2luZU91dHB1dERhdGEocGFyZW50T3V0cHV0RGF0YSA/ICpwYXJlbnRPdXRwdXREYXRh
IDogX19udWxsKTsgfSBlbHNlIGZpcnN0SW5zdGFuY2UgPSAwOyBpc0J1aWx0SW4gPSAwOyB9IHdo
aWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYgKGZpcnN0SW5zdGFuY2UpIGlucHV0RGF0YS0+
YWRkRmllbGQodGhpcywgImR1cmF0aW9uIiwgJnRoaXMtPmR1cmF0aW9uKTsgdGhpcy0+ZHVyYXRp
b24uc2V0VmFsdWUgKDEuMCk7IHRoaXMtPmR1cmF0aW9uLnNldENvbnRhaW5lcih0aGlzKTsgfSB3
aGlsZSgwKTsKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEt
PmFkZEZpZWxkKHRoaXMsICJ0cmlnZ2VyIiwgJnRoaXMtPnRyaWdnZXIpOyB0aGlzLT50cmlnZ2Vy
LnNldFZhbHVlICgpOyB0aGlzLT50cmlnZ2VyLnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgw
KTsKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFkZEZp
ZWxkKHRoaXMsICJmbGFncyIsICZ0aGlzLT5mbGFncyk7IHRoaXMtPmZsYWdzLnNldFZhbHVlICgw
KTsgdGhpcy0+ZmxhZ3Muc2V0Q29udGFpbmVyKHRoaXMpOyB9IHdoaWxlKDApOwogICAgZG8geyB3
aGlsZSgwKTsgaWYgKGZpcnN0SW5zdGFuY2UpIGlucHV0RGF0YS0+YWRkRmllbGQodGhpcywgImRp
c2FibGUiLCAmdGhpcy0+ZGlzYWJsZSk7IHRoaXMtPmRpc2FibGUuc2V0VmFsdWUgKDApOyB0aGlz
LT5kaXNhYmxlLnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsKICAgIGRvIHsgd2hpbGUo
MCk7IGlmIChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFkZEZpZWxkKHRoaXMsICJ0aW1lSW4i
LCAmdGhpcy0+dGltZUluKTsgdGhpcy0+dGltZUluLnNldFZhbHVlIChTYlRpbWU6Onplcm8oKSk7
IHRoaXMtPnRpbWVJbi5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdo
aWxlKDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgb3V0cHV0RGF0YS0+YWRkT3V0cHV0KHRoaXMsICJ0
aW1lT3V0IiwgJnRoaXMtPnRpbWVPdXQsIFNvU0ZUaW1lOjpnZXRDbGFzc1R5cGVJZCgpKTsgdGhp
cy0+dGltZU91dC5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxl
KDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgb3V0cHV0RGF0YS0+YWRkT3V0cHV0KHRoaXMsICJpc0Fj
dGl2ZSIsICZ0aGlzLT5pc0FjdGl2ZSwgU29TRkJvb2w6OmdldENsYXNzVHlwZUlkKCkpOyB0aGlz
LT5pc0FjdGl2ZS5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxl
KDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgb3V0cHV0RGF0YS0+YWRkT3V0cHV0KHRoaXMsICJyYW1w
IiwgJnRoaXMtPnJhbXAsIFNvU0ZGbG9hdDo6Z2V0Q2xhc3NUeXBlSWQoKSk7IHRoaXMtPnJhbXAu
c2V0Q29udGFpbmVyKHRoaXMpOyB9IHdoaWxlKDApOwoKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChm
aXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFkZEVudW1WYWx1ZSgiRmxhZ3MiLCAiUkVUUklHR0VS
QUJMRSIsIFJFVFJJR0dFUkFCTEUpOyB9IHdoaWxlICgwKTsKICAgIGRvIHsgd2hpbGUoMCk7IGlm
IChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFkZEVudW1WYWx1ZSgiRmxhZ3MiLCAiSE9MRF9G
SU5BTCIsIEhPTERfRklOQUwpOyB9IHdoaWxlICgwKTsKCiAgICBkbyB7IGludCBfc29fc2ZfZW51
bV9udW07IGludCAqX3NvX3NmX2VudW1fdmFsczsgU2JOYW1lICpfc29fc2ZfZW51bV9uYW1lczsg
aW5wdXREYXRhLT5nZXRFbnVtRGF0YSgiRmxhZ3MiLCBfc29fc2ZfZW51bV9udW0sIF9zb19zZl9l
bnVtX3ZhbHMsIF9zb19zZl9lbnVtX25hbWVzKTsgd2hpbGUoMCk7IGZsYWdzLnNldEVudW1zKF9z
b19zZl9lbnVtX251bSwgX3NvX3NmX2VudW1fdmFscywgX3NvX3NmX2VudW1fbmFtZXMpOyB9IHdo
aWxlICgwKTsKCiAgICBzdGF0ZSA9IE9GRjsKICAgIHJhbXBWYWwgPSAwLjA7CiAgICB0aW1lVmFs
ID0gMC4wOwogICAgb3V0cHV0UGVuZGluZyA9IDA7CiAgICBpc0J1aWx0SW4gPSAxOwoKCiAgICB0
aW1lSW4uY29ubmVjdEZyb20oU29EQjo6Z2V0R2xvYmFsRmllbGQoInJlYWxUaW1lIikpOwoKICAg
IHJhbXAuZW5hYmxlKDApOwogICAgaXNBY3RpdmUuZW5hYmxlKDApOwogICAgdGltZU91dC5lbmFi
bGUoMCk7Cn0KIyAxMDggIlNvT25lU2hvdC5jKysiClNvT25lU2hvdDo6flNvT25lU2hvdCgpCgoK
ewp9CiMgMTIyICJTb09uZVNob3QuYysrIgp2b2lkClNvT25lU2hvdDo6d3JpdGVJbnN0YW5jZShT
b091dHB1dCAqb3V0KQoKCnsKCgoKICAgIFNiQm9vbCB0aW1lSW5XYXNEZWZhdWx0ID0gdGltZUlu
LmlzRGVmYXVsdCgpOwogICAgU2JCb29sIHRpbWVJbkNvbm5lY3Rpb25FbmFibGVkID0gdGltZUlu
LmlzQ29ubmVjdGlvbkVuYWJsZWQoKTsKICAgIFNvRmllbGQgKnRpbWVJbkNvbm5lY3Rpb24gPSBf
X251bGw7CiAgICB0aW1lSW4uZ2V0Q29ubmVjdGVkRmllbGQodGltZUluQ29ubmVjdGlvbik7CiAg
ICBpZiAodGltZUluQ29ubmVjdGlvbiA9PSBTb0RCOjpnZXRHbG9iYWxGaWVsZCgicmVhbFRpbWUi
KSkgewogICAgICAgIHRpbWVJbi5lbmFibGVDb25uZWN0aW9uKDApOwogICAgICAgIHRpbWVJbi5z
ZXREZWZhdWx0KDEpOwogICAgfQogICAgU29FbmdpbmU6OndyaXRlSW5zdGFuY2Uob3V0KTsKCiAg
ICB0aW1lSW4uZW5hYmxlQ29ubmVjdGlvbih0aW1lSW5Db25uZWN0aW9uRW5hYmxlZCk7CiAgICB0
aW1lSW4uc2V0RGVmYXVsdCh0aW1lSW5XYXNEZWZhdWx0KTsKfQojIDE1MyAiU29PbmVTaG90LmMr
KyIKU2JCb29sClNvT25lU2hvdDo6cmVhZEluc3RhbmNlKFNvSW5wdXQgKmluLCB1bnNpZ25lZCBz
aG9ydCBmbGFncykKCgp7CiAgICBTYkJvb2wgcmVzdWx0ID0gU29FbmdpbmU6OnJlYWRJbnN0YW5j
ZShpbiwgZmxhZ3MpOwogICAgc3RhdGUgPSBPRkY7CiAgICBTb0ZpZWxkICp0aW1lSW5Db25uZWN0
aW9uID0gX19udWxsOwogICAgdGltZUluLmdldENvbm5lY3RlZEZpZWxkKHRpbWVJbkNvbm5lY3Rp
b24pOwogICAgaWYgKHRpbWVJbkNvbm5lY3Rpb24gPT0gU29EQjo6Z2V0R2xvYmFsRmllbGQoInJl
YWxUaW1lIikpIHsKICAgICAgICB0aW1lSW4uZGlzY29ubmVjdCgpOwogICAgICAgIHRpbWVJbi5j
b25uZWN0RnJvbSh0aW1lSW5Db25uZWN0aW9uKTsKICAgIH0KCiAgICByZXR1cm4gcmVzdWx0Owp9
CiMgMTc3ICJTb09uZVNob3QuYysrIgp2b2lkClNvT25lU2hvdDo6aW5wdXRDaGFuZ2VkKFNvRmll
bGQgKndoaWNoSW5wdXQpCgoKewogICAgY29uc3QgZW51bSBTdGF0ZSBvbGRzdGF0ZSA9IHN0YXRl
OwogICAgaWYgKHdoaWNoSW5wdXQgPT0gJmRpc2FibGUpIHsKICAgICAgICBpZiAoZGlzYWJsZS5n
ZXRWYWx1ZSgpKQogICAgICAgICAgICBzdGF0ZSA9IERJU0FCTEVEOwogICAgICAgIGVsc2UgaWYg
KHN0YXRlID09IERJU0FCTEVEKQogICAgICAgICAgICBzdGF0ZSA9IE9GRjsKICAgIH0KICAgIGVs
c2UgaWYgKHdoaWNoSW5wdXQgPT0gJnRyaWdnZXIpIHsKICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7
CiAgICAgICAgICAgIGNhc2UgRElTQUJMRUQ6CiAgICAgICAgICAgIGNhc2UgVFJJR0dFUkVEOgog
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgT0ZGOgogICAgICAgICAgICAg
ICAgc3RhdGUgPSBUUklHR0VSRUQ7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
Y2FzZSBPTjoKICAgICAgICAgICAgICAgIGlmIChmbGFncy5nZXRWYWx1ZSgpJlJFVFJJR0dFUkFC
TEUpCiAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBUUklHR0VSRUQ7CiAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgY2FzZSBQRUFLRUQ6CiAgICAgICAgICAgICAgICBzdGF0ZSA9
IFRSSUdHRVJFRDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIGlm
IChvbGRzdGF0ZSAhPSBzdGF0ZSkgb3V0cHV0UGVuZGluZyA9IDE7CiAgICBpbnQgZW5hYmxlID0g
b3V0cHV0UGVuZGluZyB8fAogICAgICAgIHN0YXRlPT1PTiB8fCBzdGF0ZT09VFJJR0dFUkVEIHx8
IHN0YXRlID09IFBFQUtFRDsKICAgIHRpbWVPdXQuZW5hYmxlKGVuYWJsZSk7CiAgICBpc0FjdGl2
ZS5lbmFibGUoZW5hYmxlKTsKICAgIHJhbXAuZW5hYmxlKGVuYWJsZSk7CiMgMjI1ICJTb09uZVNo
b3QuYysrIgp9CiMgMjM0ICJTb09uZVNob3QuYysrIgp2b2lkClNvT25lU2hvdDo6ZXZhbHVhdGUo
KQoKCnsKCgoKICAgIFNiQm9vbCBhY3RpdmVWYWw7CgogICAgc3dpdGNoIChzdGF0ZSkgewogICAg
ICAgIGNhc2UgRElTQUJMRUQ6CiAgICAgICAgICAgIGFjdGl2ZVZhbCA9IDA7CiAgICAgICAgICAg
IHJhbXBWYWwgPSAwLjA7CiAgICAgICAgICAgIHRpbWVWYWwgPSAwLjA7CiAgICAgICAgICAgIGJy
ZWFrOwoKICAgICAgICBjYXNlIE9GRjoKICAgICAgICAgICAgYWN0aXZlVmFsID0gMDsKICAgICAg
ICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgVFJJR0dFUkVEOgogICAgICAgICAgICB0cmlnZ2Vy
LmdldFZhbHVlKCk7CiAgICAgICAgICAgIGJhc2VUaW1lID0gdGltZUluLmdldFZhbHVlKCk7CiAg
ICAgICAgICAgIGFjdGl2ZVZhbCA9IDE7CiAgICAgICAgICAgIHJhbXBWYWwgPSAwLjA7CiAgICAg
ICAgICAgIHRpbWVWYWwgPSAwLjA7CiAgICAgICAgICAgIHN0YXRlID0gT047CiAgICAgICAgICAg
IGJyZWFrOwoKICAgICAgICBjYXNlIE9OOgogICAgICAgICAgICB0aW1lVmFsID0gdGltZUluLmdl
dFZhbHVlKCkgLSBiYXNlVGltZTsKICAgICAgICAgICAgcmFtcFZhbCA9IHRpbWVWYWwvZHVyYXRp
b24uZ2V0VmFsdWUoKTsKICAgICAgICAgICAgaWYgKHJhbXBWYWwgPj0gMS4wKSB7CiAgICAgICAg
ICAgICAgICByYW1wVmFsID0gMS4wOwogICAgICAgICAgICAgICAgdGltZVZhbCA9IGR1cmF0aW9u
LmdldFZhbHVlKCk7CiAgICAgICAgICAgICAgICBzdGF0ZSA9IFBFQUtFRDsKICAgICAgICAgICAg
fQogICAgICAgICAgICBhY3RpdmVWYWwgPSAxOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAg
Y2FzZSBQRUFLRUQ6CiAgICAgICAgICAgIGlmICghKGZsYWdzLmdldFZhbHVlKCkmSE9MRF9GSU5B
TCkpIHsKICAgICAgICAgICAgICAgIHJhbXBWYWwgPSAwLjA7CiAgICAgICAgICAgICAgICB0aW1l
VmFsID0gMC4wOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGFjdGl2ZVZhbCA9IDA7CiAgICAg
ICAgICAgIHN0YXRlID0gT0ZGOwogICAgICAgICAgICBicmVhazsKICAgIH0KCgoKCgoKCiAgICBk
byB7IGlmICh0aW1lT3V0LmlzRW5hYmxlZCgpKSB7IGZvciAoaW50IF9lbmdfb3V0X2kgPSAwOyBf
ZW5nX291dF9pIDwgdGltZU91dC5nZXROdW1Db25uZWN0aW9ucygpOyBfZW5nX291dF9pKyspIHsg
U29TRlRpbWUgKl9lbmdfb3V0X3RlbXAgPSAoU29TRlRpbWUgKikgdGltZU91dFtfZW5nX291dF9p
XTsgaWYgKCFfZW5nX291dF90ZW1wLT5pc1JlYWRPbmx5KCkpIHsgX2VuZ19vdXRfdGVtcC0+c2V0
VmFsdWUodGltZVZhbCk7IH0gfSB9IH0gd2hpbGUoMCk7CiAgICBkbyB7IGlmIChpc0FjdGl2ZS5p
c0VuYWJsZWQoKSkgeyBmb3IgKGludCBfZW5nX291dF9pID0gMDsgX2VuZ19vdXRfaSA8IGlzQWN0
aXZlLmdldE51bUNvbm5lY3Rpb25zKCk7IF9lbmdfb3V0X2krKykgeyBTb1NGQm9vbCAqX2VuZ19v
dXRfdGVtcCA9IChTb1NGQm9vbCAqKSBpc0FjdGl2ZVtfZW5nX291dF9pXTsgaWYgKCFfZW5nX291
dF90ZW1wLT5pc1JlYWRPbmx5KCkpIHsgX2VuZ19vdXRfdGVtcC0+c2V0VmFsdWUoYWN0aXZlVmFs
KTsgfSB9IH0gfSB3aGlsZSgwKTsKICAgIGRvIHsgaWYgKHJhbXAuaXNFbmFibGVkKCkpIHsgZm9y
IChpbnQgX2VuZ19vdXRfaSA9IDA7IF9lbmdfb3V0X2kgPCByYW1wLmdldE51bUNvbm5lY3Rpb25z
KCk7IF9lbmdfb3V0X2krKykgeyBTb1NGRmxvYXQgKl9lbmdfb3V0X3RlbXAgPSAoU29TRkZsb2F0
ICopIHJhbXBbX2VuZ19vdXRfaV07IGlmICghX2VuZ19vdXRfdGVtcC0+aXNSZWFkT25seSgpKSB7
IF9lbmdfb3V0X3RlbXAtPnNldFZhbHVlKHJhbXBWYWwpOyB9IH0gfSB9IHdoaWxlKDApOwogICAg
b3V0cHV0UGVuZGluZyA9IDA7Cn0KIyA1NCAiU29FbmdpbmVzLmMrKyIgMgojIDEgIlNvT3V0cHV0
RGF0YS5jKysiIDEKIyA3MyAiU29PdXRwdXREYXRhLmMrKyIKc3RydWN0IFNvT3V0cHV0RW50cnkg
ewogICAgU2JOYW1lIG5hbWU7CiAgICBpbnQzMl90IG9mZnNldDsKICAgIFNvVHlwZSB0eXBlOwp9
OwoKCgoKCgpTb0VuZ2luZU91dHB1dERhdGE6OlNvRW5naW5lT3V0cHV0RGF0YShjb25zdCBTb0Vu
Z2luZU91dHB1dERhdGEgKmZyb20pCgoKewogICAgaW50IGk7CiAgICBzdHJ1Y3QgU29PdXRwdXRF
bnRyeSAqZnJvbU91dHB1dCwgKnRvT3V0cHV0OwoKICAgIGlmIChmcm9tID09IF9fbnVsbCkKICAg
ICAgICByZXR1cm47CgogICAgZm9yIChpID0gMDsgaSA8IGZyb20tPm91dHB1dHMuZ2V0TGVuZ3Ro
KCk7IGkrKykgewoKICAgICAgICBmcm9tT3V0cHV0ID0gKHN0cnVjdCBTb091dHB1dEVudHJ5ICop
IGZyb20tPm91dHB1dHNbaV07CgogICAgICAgIHRvT3V0cHV0ID0gbmV3IHN0cnVjdCBTb091dHB1
dEVudHJ5OwogICAgICAgICp0b091dHB1dCA9ICpmcm9tT3V0cHV0OwoKICAgICAgICBvdXRwdXRz
LmFwcGVuZCgodm9pZCAqKSB0b091dHB1dCk7CiAgICB9Cn0KCgoKCgoKU29FbmdpbmVPdXRwdXRE
YXRhOjp+U29FbmdpbmVPdXRwdXREYXRhKCkKCgp7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG91
dHB1dHMuZ2V0TGVuZ3RoKCk7IGkrKykgewogICAgICAgIGRlbGV0ZSAoc3RydWN0IFNvT3V0cHV0
RW50cnkgKilvdXRwdXRzW2ldOwogICAgfQp9CiMgMTI3ICJTb091dHB1dERhdGEuYysrIgp2b2lk
ClNvRW5naW5lT3V0cHV0RGF0YTo6YWRkT3V0cHV0KAogIGNvbnN0IFNvRW5naW5lICpkZWZFbmdp
bmUsCiAgY29uc3QgY2hhciAqb3V0cHV0TmFtZSwKICBjb25zdCBTb0VuZ2luZU91dHB1dCAqb3V0
cHV0LAogIFNvVHlwZSB0eXBlKQoKCnsKICAgIHN0cnVjdCBTb091dHB1dEVudHJ5ICpuZXdPdXRw
dXQgPSBuZXcgc3RydWN0IFNvT3V0cHV0RW50cnk7CgogICAgbmV3T3V0cHV0LT5uYW1lID0gb3V0
cHV0TmFtZTsKICAgIG5ld091dHB1dC0+b2Zmc2V0ID0gKGNvbnN0IGNoYXIgKikgb3V0cHV0IC0g
KGNvbnN0IGNoYXIgKikgZGVmRW5naW5lOwogICAgbmV3T3V0cHV0LT50eXBlID0gdHlwZTsKCiAg
ICBvdXRwdXRzLmFwcGVuZCgodm9pZCAqKSBuZXdPdXRwdXQpOwp9CiMgMTUyICJTb091dHB1dERh
dGEuYysrIgpjb25zdCBTYk5hbWUgJgpTb0VuZ2luZU91dHB1dERhdGE6OmdldE91dHB1dE5hbWUo
aW50IGluZGV4KSBjb25zdAoKCnsKICAgIHJldHVybiAoKFNvT3V0cHV0RW50cnkgKikgb3V0cHV0
c1tpbmRleF0pLT5uYW1lOwp9CiMgMTY3ICJTb091dHB1dERhdGEuYysrIgpTb0VuZ2luZU91dHB1
dCAqClNvRW5naW5lT3V0cHV0RGF0YTo6Z2V0T3V0cHV0KGNvbnN0IFNvRW5naW5lICpmdW5jLCBp
bnQgaW5kZXgpIGNvbnN0CgoKewoKICAgIHJldHVybiAoU29FbmdpbmVPdXRwdXQgKikgKChjaGFy
ICopIGZ1bmMgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNvT3V0cHV0RW50
cnkgKikgb3V0cHV0c1tpbmRleF0pLT5vZmZzZXQpOwp9CiMgMTg0ICJTb091dHB1dERhdGEuYysr
IgppbnQKU29FbmdpbmVPdXRwdXREYXRhOjpnZXRJbmRleChjb25zdCBTb0VuZ2luZSAqZnVuYywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNvRW5naW5lT3V0cHV0ICpvdXRw
dXQpIGNvbnN0CgoKewogICAgaW50IG9mZnNldCA9IChjb25zdCBjaGFyICopIG91dHB1dCAtIChj
b25zdCBjaGFyICopIGZ1bmM7CgoKCgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvdXRwdXRzLmdl
dExlbmd0aCgpOyBpKyspIHsKICAgICAgICBTb091dHB1dEVudHJ5ICplbnRyeSA9IChTb091dHB1
dEVudHJ5ICopb3V0cHV0c1tpXTsKICAgICAgICBpZiAoZW50cnktPm9mZnNldCA9PSBvZmZzZXQp
IHJldHVybiBpOwogICAgfQoKCiAgICBTb0RlYnVnRXJyb3I6OnBvc3QoIihpbnRlcm5hbCkgU29F
bmdpbmVPdXRwdXREYXRhOjpnZXRJbmRleCIsCiAgICAgICAgICAgICAgICAgICAgICAgIkRpZCBu
b3QgZmluZCBlbmdpbmVPdXRwdXQiKTsKICAgIHJldHVybiAwOwp9CiMgMjEzICJTb091dHB1dERh
dGEuYysrIgpjb25zdCBTb1R5cGUgJgpTb0VuZ2luZU91dHB1dERhdGE6OmdldFR5cGUoaW50IGlu
ZGV4KSBjb25zdAoKCnsKCgoKCgoKICAgIHJldHVybiAoKFNvT3V0cHV0RW50cnkgKikob3V0cHV0
c1tpbmRleF0pKS0+dHlwZTsKfQojIDIzNCAiU29PdXRwdXREYXRhLmMrKyIKU2JCb29sClNvRW5n
aW5lT3V0cHV0RGF0YTo6cmVhZERlc2NyaXB0aW9ucyhTb0lucHV0ICppbiwgU29FbmdpbmUgKm9i
amVjdCkgY29uc3QKCgoKewogICAgU2JCb29sIGdvdENoYXI7CiAgICBTYk5hbWUgZmllbGRUeXBl
LCBmaWVsZE5hbWU7CiAgICBjaGFyIGM7CgoKICAgIFNiQm9vbCBvbGRGaWxlRm9ybWF0ID0gKGlu
LT5nZXRJVlZlcnNpb24oKSA8IDIuMWYpOwoKCiAgICBTYkJvb2wgaXNCaW5hcnkgPSBpbi0+aXNC
aW5hcnkoKTsKCiAgICB1bnNpZ25lZCBzaG9ydCBudW1EZXNjcmlwdGlvbnMgPSAxPDwxNTsKICAg
IGlmIChpc0JpbmFyeSkgewogICAgICAgIGlmIChvbGRGaWxlRm9ybWF0KSB7CgogICAgICAgICAg
ICBTYlN0cmluZyBqdW5rOwogICAgICAgICAgICBpZiAoIWluLT5yZWFkKGp1bmspIHx8IGp1bmsg
IT0gIm91dHB1dHMiKSByZXR1cm4gMDsKCiAgICAgICAgICAgIGludCBudW07CgogICAgICAgICAg
ICBpZiAoIWluLT5yZWFkKG51bSkpIHJldHVybiAwOwogICAgICAgICAgICBudW1EZXNjcmlwdGlv
bnMgPSAoc2hvcnQpIG51bTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIWluLT5y
ZWFkKG51bURlc2NyaXB0aW9ucykpCiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9
CiAgICB9CgogICAgU2JCb29sIGhhZE91dHB1dHNEZWZpbmVkID0gb3V0cHV0cy5nZXRMZW5ndGgo
KSA+IDA7CgogICAgaWYgKCFpc0JpbmFyeSkgewogICAgICAgIGlmICghICgoZ290Q2hhciA9IGlu
LT5yZWFkKGMpKSB8fCBjICE9ICdbJykpCiAgICAgICAgICAgIHJldHVybiAwOwogICAgfQoKICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbnVtRGVzY3JpcHRpb25zOyBpKyspIHsKCgogICAgICAgIGlm
ICghaXNCaW5hcnkpIHsKCiAgICAgICAgICAgIGlmIChpbi0+cmVhZChjKSAmJiBjID09ICddJykK
ICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICBlbHNlIGluLT5wdXRCYWNrKGMp
OwogICAgICAgIH0KCiAgICAgICAgU2JOYW1lIHR5cGUsIG91dHB1dE5hbWU7CiAgICAgICAgaWYg
KCFpbi0+cmVhZCh0eXBlLCAxKSkgcmV0dXJuIDA7CiAgICAgICAgaWYgKCFpbi0+cmVhZChvdXRw
dXROYW1lLCAxKSkgcmV0dXJuIDA7CgogICAgICAgIFNvVHlwZSBvdXRwdXRUeXBlID0gU29UeXBl
Ojpmcm9tTmFtZSh0eXBlKTsKCiAgICAgICAgaWYgKCFoYWRPdXRwdXRzRGVmaW5lZCkgewoKCiAg
ICAgICAgICAgIGlmIChvdXRwdXRUeXBlLmlzQmFkKCkpCiAgICAgICAgICAgICAgICByZXR1cm4g
MDsKCgoKICAgICAgICAgICAgU29FbmdpbmVPdXRwdXQgKm91dHB1dCA9IG5ldyBTb0VuZ2luZU91
dHB1dDsKICAgICAgICAgICAgb3V0cHV0LT5zZXRDb250YWluZXIob2JqZWN0KTsKCgogICAgICAg
ICAgICBTb0VuZ2luZU91dHB1dERhdGEgKlRoaXMgPSAoU29FbmdpbmVPdXRwdXREYXRhICopdGhp
czsKICAgICAgICAgICAgVGhpcy0+YWRkT3V0cHV0KG9iamVjdCwgb3V0cHV0TmFtZS5nZXRTdHJp
bmcoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCwgb3V0cHV0VHlwZSk7CiAg
ICAgICAgfQojIDMyNiAiU29PdXRwdXREYXRhLmMrKyIKICAgICAgICBpZiAoIWlzQmluYXJ5KSB7
CgogICAgICAgICAgICBpZiAoISBpbi0+cmVhZChjKSkKICAgICAgICAgICAgICAgIHJldHVybiAw
OwogICAgICAgICAgICBpZiAoYyAhPSAnLCcpIHsKICAgICAgICAgICAgICAgIGlmIChjID09ICdd
JykKICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICAgIGVsc2UgcmV0
dXJuIDA7CiAgICAgICAgICAgIH0KCiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxOwp9CiMg
MzQ5ICJTb091dHB1dERhdGEuYysrIgp2b2lkClNvRW5naW5lT3V0cHV0RGF0YTo6d3JpdGVEZXNj
cmlwdGlvbnMoU29PdXRwdXQgKm91dCwgU29FbmdpbmUgKm9iamVjdCkgY29uc3QKCgoKewogICAg
U2JCb29sIGlzQmluYXJ5ID0gb3V0LT5pc0JpbmFyeSgpOwoKICAgIGlmICghaXNCaW5hcnkpIHsK
ICAgICAgICBvdXQtPmluZGVudCgpOwogICAgICAgIG91dC0+d3JpdGUoIm91dHB1dHMiKTsKICAg
ICAgICBvdXQtPndyaXRlKCcgJyk7CiAgICAgICAgb3V0LT53cml0ZSgnWycpOwogICAgICAgIG91
dC0+d3JpdGUoJyAnKTsKICAgICAgICBvdXQtPmluY3JlbWVudEluZGVudCgyKTsKICAgIH0gZWxz
ZSB7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgbnVtRGVzY3JpcHRpb25zID0gZ2V0TnVtT3V0cHV0
cygpOwogICAgICAgIG91dC0+d3JpdGUobnVtRGVzY3JpcHRpb25zKTsKICAgIH0KCgogICAgaW50
IGkgPSAwOwogICAgaW50IG51bVdyaXR0ZW4gPSAwOwogICAgZm9yIChpID0gMDsgaSA8IGdldE51
bU91dHB1dHMoKTsgaSsrKSB7CgogICAgICAgIFNvRW5naW5lT3V0cHV0ICpvdXRwdXQgPSBnZXRP
dXRwdXQob2JqZWN0LCBpKTsKCiAgICAgICAgU29UeXBlIHR5cGUgPSBvdXRwdXQtPmdldENvbm5l
Y3Rpb25UeXBlKCk7CgogICAgICAgIG91dC0+d3JpdGUodHlwZS5nZXROYW1lKCkuZ2V0U3RyaW5n
KCkpOwogICAgICAgIGlmICghIGlzQmluYXJ5KQogICAgICAgICAgICBvdXQtPndyaXRlKCcgJyk7
CiAgICAgICAgb3V0LT53cml0ZShnZXRPdXRwdXROYW1lKGkpLmdldFN0cmluZygpKTsKCgogICAg
ICAgIGlmICghIGlzQmluYXJ5KSB7CiAgICAgICAgICAgIGlmIChpICE9IGdldE51bU91dHB1dHMo
KSAtIDEpIHsKICAgICAgICAgICAgICAgIG91dC0+d3JpdGUoJywnKTsKICAgICAgICAgICAgICAg
ICsrbnVtV3JpdHRlbjsKICAgICAgICAgICAgICAgIGlmICgobnVtV3JpdHRlbiU0KSA9PSAwKSB7
CiAgICAgICAgICAgICAgICAgICAgb3V0LT53cml0ZSgnXG4nKTsKICAgICAgICAgICAgICAgICAg
ICBvdXQtPmluZGVudCgpOwogICAgICAgICAgICAgICAgfSBlbHNlIG91dC0+d3JpdGUoJyAnKTsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCgogICAgaWYgKCEgb3V0LT5pc0JpbmFyeSgp
KSB7CiAgICAgICAgb3V0LT53cml0ZSgnICcpOwogICAgICAgIG91dC0+d3JpdGUoJ10nKTsKICAg
ICAgICBvdXQtPndyaXRlKCdcbicpOwogICAgICAgIG91dC0+ZGVjcmVtZW50SW5kZW50KDIpOwog
ICAgfQp9CiMgNTUgIlNvRW5naW5lcy5jKysiIDIKIyAxICJTb1RpbWVDb3VudGVyLmMrKyIgMQoj
IDU1ICJTb1RpbWVDb3VudGVyLmMrKyIKIyAxICIuLi8uLi8uLi8uLi8uLi9saWIvZGF0YWJhc2Uv
aW5jbHVkZS9JbnZlbnRvci9lbmdpbmVzL1NvVGltZUNvdW50ZXIuaCIgMQojIDcyICIuLi8uLi8u
Li8uLi8uLi9saWIvZGF0YWJhc2UvaW5jbHVkZS9JbnZlbnRvci9lbmdpbmVzL1NvVGltZUNvdW50
ZXIuaCIKY2xhc3MgU29UaW1lQ291bnRlciA6IHB1YmxpYyBTb0VuZ2luZSB7CgogICAgcHVibGlj
OiBzdGF0aWMgU29UeXBlIGdldENsYXNzVHlwZUlkKCkgeyByZXR1cm4gY2xhc3NUeXBlSWQ7IH0g
dmlydHVhbCBTb1R5cGUgZ2V0VHlwZUlkKCkgY29uc3Q7IHB1YmxpYzogdmlydHVhbCBjb25zdCBT
b0ZpZWxkRGF0YSAqIGdldEZpZWxkRGF0YSgpIGNvbnN0OyB2aXJ0dWFsIGNvbnN0IFNvRW5naW5l
T3V0cHV0RGF0YSAqIGdldE91dHB1dERhdGEoKSBjb25zdDsgcHJvdGVjdGVkOiBzdGF0aWMgY29u
c3QgU29GaWVsZERhdGEgKiogZ2V0SW5wdXREYXRhUHRyKCkgeyByZXR1cm4gKGNvbnN0IFNvRmll
bGREYXRhICoqKSZpbnB1dERhdGE7IH0gc3RhdGljIGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAq
KiBnZXRPdXRwdXREYXRhUHRyKCkgeyByZXR1cm4gKGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAq
Kikmb3V0cHV0RGF0YTsgfSBwcml2YXRlOiBzdGF0aWMgU29UeXBlIGNsYXNzVHlwZUlkOyBzdGF0
aWMgU2JCb29sIGZpcnN0SW5zdGFuY2U7IHN0YXRpYyBTb0ZpZWxkRGF0YSAqaW5wdXREYXRhOyBz
dGF0aWMgU29FbmdpbmVPdXRwdXREYXRhICpvdXRwdXREYXRhOyBzdGF0aWMgY29uc3QgU29GaWVs
ZERhdGEgKipwYXJlbnRJbnB1dERhdGE7IHN0YXRpYyBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEg
KipwYXJlbnRPdXRwdXREYXRhOyBwcml2YXRlOiBzdGF0aWMgdm9pZCAqY3JlYXRlSW5zdGFuY2Uo
KTsKCiAgcHVibGljOgoKICAgIFNvU0ZTaG9ydCBtaW47CiAgICBTb1NGU2hvcnQgbWF4OwogICAg
U29TRlNob3J0IHN0ZXA7CiAgICBTb1NGQm9vbCBvbjsKICAgIFNvU0ZGbG9hdCBmcmVxdWVuY3k7
CiAgICBTb01GRmxvYXQgZHV0eTsKICAgIFNvU0ZUaW1lIHRpbWVJbjsKICAgIFNvU0ZUcmlnZ2Vy
IHN5bmNJbjsKICAgIFNvU0ZTaG9ydCByZXNldDsKCgogICAgU29FbmdpbmVPdXRwdXQgb3V0cHV0
OwogICAgU29FbmdpbmVPdXRwdXQgc3luY091dDsKCgogICAgU29UaW1lQ291bnRlcigpOwoKICBw
dWJsaWM6CgogICAgc3RhdGljIHZvaWQgaW5pdENsYXNzKCk7CgogIHByb3RlY3RlZDoKICAgIHZp
cnR1YWwgdm9pZCBpbnB1dENoYW5nZWQoU29GaWVsZCAqd2hpY2hJbnB1dCk7CgoKCiAgICB2aXJ0
dWFsIHZvaWQgd3JpdGVJbnN0YW5jZShTb091dHB1dCAqb3V0KTsKCgoKCiAgICB2aXJ0dWFsIFNi
Qm9vbCByZWFkSW5zdGFuY2UoU29JbnB1dCAqaW4sIHVuc2lnbmVkIHNob3J0IGZsYWdzKTsKCiAg
cHJpdmF0ZToKICAgIGVudW0gU3RhdGUgewogICAgICAgIE9OLAogICAgICAgIFBBVVNFRAogICAg
fSBzdGF0ZTsKICAgIGVudW0gVG9kbyB7CiAgICAgICAgUkVDQUxDID0gKDE8PDApLAogICAgICAg
IFJFU0VUID0gKDE8PDEpLAogICAgICAgIFNZTkMgPSAoMTw8MiksCiAgICAgICAgUEFVU0UgPSAo
MTw8MyksCiAgICAgICAgVU5QQVVTRSA9ICgxPDw0KQogICAgfTsKICAgIHVuc2lnbmVkIGludCB0
b2RvOwogICAgU2JUaW1lIHBlcmlvZDsKICAgIGludCBuU3RhZ2VzOwogICAgaW50IGN1clN0YWdl
OwogICAgaW50IHByZXZTdGFnZTsKICAgIHN0cnVjdCBTdGFnZSB7CiAgICAgICAgaW50IHZhbDsK
ICAgICAgICBmbG9hdCBkdXR5OwogICAgICAgIFNiVGltZSBvZmZzZXQ7CiAgICB9ICpzdGFnZXM7
CiAgICBTYlRpbWUgYmFzZVRpbWU7CiAgICBTYlRpbWUgcGF1c2VPZmZzZXQ7CgoKICAgIH5Tb1Rp
bWVDb3VudGVyKCk7CgoKICAgIHZpcnR1YWwgdm9pZCBldmFsdWF0ZSgpOwp9OwojIDU2ICJTb1Rp
bWVDb3VudGVyLmMrKyIgMgoKU29UeXBlIFNvVGltZUNvdW50ZXI6OmNsYXNzVHlwZUlkOyBTYkJv
b2wgU29UaW1lQ291bnRlcjo6Zmlyc3RJbnN0YW5jZT0xOyBTb0VuZ2luZU91dHB1dERhdGEgKlNv
VGltZUNvdW50ZXI6Om91dHB1dERhdGE7IFNvRmllbGREYXRhICogU29UaW1lQ291bnRlcjo6aW5w
dXREYXRhOyBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKipTb1RpbWVDb3VudGVyOjpwYXJlbnRP
dXRwdXREYXRhOyBjb25zdCBTb0ZpZWxkRGF0YSAqKiBTb1RpbWVDb3VudGVyOjpwYXJlbnRJbnB1
dERhdGE7IFNvVHlwZSBTb1RpbWVDb3VudGVyOjpnZXRUeXBlSWQoKSBjb25zdCB7IHJldHVybiBj
bGFzc1R5cGVJZDsgfSBjb25zdCBTb0ZpZWxkRGF0YSAqIFNvVGltZUNvdW50ZXI6OmdldEZpZWxk
RGF0YSgpIGNvbnN0IHsgcmV0dXJuIGlucHV0RGF0YTsgfSBjb25zdCBTb0VuZ2luZU91dHB1dERh
dGEgKiBTb1RpbWVDb3VudGVyOjpnZXRPdXRwdXREYXRhKCkgY29uc3QgeyByZXR1cm4gb3V0cHV0
RGF0YTsgfSB2b2lkICogU29UaW1lQ291bnRlcjo6Y3JlYXRlSW5zdGFuY2UoKSB7IHJldHVybiAo
dm9pZCAqKShuZXcgU29UaW1lQ291bnRlcik7IH07CiMgNjYgIlNvVGltZUNvdW50ZXIuYysrIgpT
b1RpbWVDb3VudGVyOjpTb1RpbWVDb3VudGVyKCkKCgp7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAo
aW5wdXREYXRhID09IF9fbnVsbCkgeyBpbnB1dERhdGEgPSBuZXcgU29GaWVsZERhdGEocGFyZW50
SW5wdXREYXRhID8gKnBhcmVudElucHV0RGF0YSA6IF9fbnVsbCk7IG91dHB1dERhdGEgPSBuZXcg
U29FbmdpbmVPdXRwdXREYXRhKHBhcmVudE91dHB1dERhdGEgPyAqcGFyZW50T3V0cHV0RGF0YSA6
IF9fbnVsbCk7IH0gZWxzZSBmaXJzdEluc3RhbmNlID0gMDsgaXNCdWlsdEluID0gMDsgfSB3aGls
ZSgwKTsKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFk
ZEZpZWxkKHRoaXMsICJtaW4iLCAmdGhpcy0+bWluKTsgdGhpcy0+bWluLnNldFZhbHVlICgwKTsg
dGhpcy0+bWluLnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsKICAgIGRvIHsgd2hpbGUo
MCk7IGlmIChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFkZEZpZWxkKHRoaXMsICJtYXgiLCAm
dGhpcy0+bWF4KTsgdGhpcy0+bWF4LnNldFZhbHVlICgxKTsgdGhpcy0+bWF4LnNldENvbnRhaW5l
cih0aGlzKTsgfSB3aGlsZSgwKTsKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNl
KSBpbnB1dERhdGEtPmFkZEZpZWxkKHRoaXMsICJzdGVwIiwgJnRoaXMtPnN0ZXApOyB0aGlzLT5z
dGVwLnNldFZhbHVlICgxKTsgdGhpcy0+c3RlcC5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUo
MCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgaW5wdXREYXRhLT5hZGRG
aWVsZCh0aGlzLCAib24iLCAmdGhpcy0+b24pOyB0aGlzLT5vbi5zZXRWYWx1ZSAoMSk7IHRoaXMt
Pm9uLnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsKICAgIGRvIHsgd2hpbGUoMCk7IGlm
IChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFkZEZpZWxkKHRoaXMsICJmcmVxdWVuY3kiLCAm
dGhpcy0+ZnJlcXVlbmN5KTsgdGhpcy0+ZnJlcXVlbmN5LnNldFZhbHVlICgxKTsgdGhpcy0+ZnJl
cXVlbmN5LnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsKICAgIGRvIHsgd2hpbGUoMCk7
IGlmIChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFkZEZpZWxkKHRoaXMsICJkdXR5IiwgJnRo
aXMtPmR1dHkpOyB0aGlzLT5kdXR5LnNldFZhbHVlICgxLjApOyB0aGlzLT5kdXR5LnNldENvbnRh
aW5lcih0aGlzKTsgfSB3aGlsZSgwKTsKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3Rh
bmNlKSBpbnB1dERhdGEtPmFkZEZpZWxkKHRoaXMsICJ0aW1lSW4iLCAmdGhpcy0+dGltZUluKTsg
dGhpcy0+dGltZUluLnNldFZhbHVlIChTYlRpbWU6Onplcm8oKSk7IHRoaXMtPnRpbWVJbi5zZXRD
b250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJ
bnN0YW5jZSkgaW5wdXREYXRhLT5hZGRGaWVsZCh0aGlzLCAic3luY0luIiwgJnRoaXMtPnN5bmNJ
bik7IHRoaXMtPnN5bmNJbi5zZXRWYWx1ZSAoKTsgdGhpcy0+c3luY0luLnNldENvbnRhaW5lcih0
aGlzKTsgfSB3aGlsZSgwKTsKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBp
bnB1dERhdGEtPmFkZEZpZWxkKHRoaXMsICJyZXNldCIsICZ0aGlzLT5yZXNldCk7IHRoaXMtPnJl
c2V0LnNldFZhbHVlICgwKTsgdGhpcy0+cmVzZXQuc2V0Q29udGFpbmVyKHRoaXMpOyB9IHdoaWxl
KDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYgKGZpcnN0SW5zdGFuY2UpIG91dHB1dERhdGEtPmFk
ZE91dHB1dCh0aGlzLCAib3V0cHV0IiwgJnRoaXMtPm91dHB1dCwgU29TRlNob3J0OjpnZXRDbGFz
c1R5cGVJZCgpKTsgdGhpcy0+b3V0cHV0LnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsK
ICAgIGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBvdXRwdXREYXRhLT5hZGRPdXRw
dXQodGhpcywgInN5bmNPdXQiLCAmdGhpcy0+c3luY091dCwgU29TRlRyaWdnZXI6OmdldENsYXNz
VHlwZUlkKCkpOyB0aGlzLT5zeW5jT3V0LnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsK
CiAgICBzdGF0ZSA9IE9OOwogICAgdG9kbyA9IFJFQ0FMQ3xTWU5DOwogICAgc3RhZ2VzID0gX19u
dWxsOwogICAgY3VyU3RhZ2UgPSAtMTsKICAgIHByZXZTdGFnZSA9IC0xOwogICAgaXNCdWlsdElu
ID0gMTsKCgogICAgdGltZUluLmNvbm5lY3RGcm9tKFNvREI6OmdldEdsb2JhbEZpZWxkKCJyZWFs
VGltZSIpKTsKfQojIDEwMSAiU29UaW1lQ291bnRlci5jKysiClNvVGltZUNvdW50ZXI6On5Tb1Rp
bWVDb3VudGVyKCkKCgp7CiAgICBkZWxldGUgW10gc3RhZ2VzOwp9CiMgMTE2ICJTb1RpbWVDb3Vu
dGVyLmMrKyIKdm9pZApTb1RpbWVDb3VudGVyOjp3cml0ZUluc3RhbmNlKFNvT3V0cHV0ICpvdXQp
CgoKewoKCgogICAgU2JCb29sIHRpbWVJbldhc0RlZmF1bHQgPSB0aW1lSW4uaXNEZWZhdWx0KCk7
CiAgICBTYkJvb2wgdGltZUluQ29ubmVjdGlvbkVuYWJsZWQgPSB0aW1lSW4uaXNDb25uZWN0aW9u
RW5hYmxlZCgpOwogICAgU29GaWVsZCAqdGltZUluQ29ubmVjdGlvbiA9IF9fbnVsbDsKICAgIHRp
bWVJbi5nZXRDb25uZWN0ZWRGaWVsZCh0aW1lSW5Db25uZWN0aW9uKTsKICAgIGlmICh0aW1lSW5D
b25uZWN0aW9uID09IFNvREI6OmdldEdsb2JhbEZpZWxkKCJyZWFsVGltZSIpKSB7CiAgICAgICAg
dGltZUluLmVuYWJsZUNvbm5lY3Rpb24oMCk7CiAgICAgICAgdGltZUluLnNldERlZmF1bHQoMSk7
CiAgICB9CiAgICBTb0VuZ2luZTo6d3JpdGVJbnN0YW5jZShvdXQpOwoKICAgIHRpbWVJbi5lbmFi
bGVDb25uZWN0aW9uKHRpbWVJbkNvbm5lY3Rpb25FbmFibGVkKTsKICAgIHRpbWVJbi5zZXREZWZh
dWx0KHRpbWVJbldhc0RlZmF1bHQpOwp9CiMgMTQ3ICJTb1RpbWVDb3VudGVyLmMrKyIKU2JCb29s
ClNvVGltZUNvdW50ZXI6OnJlYWRJbnN0YW5jZShTb0lucHV0ICppbiwgdW5zaWduZWQgc2hvcnQg
ZmxhZ3MpCgoKewogICAgU2JCb29sIHJlc3VsdCA9IFNvRW5naW5lOjpyZWFkSW5zdGFuY2UoaW4s
IGZsYWdzKTsKICAgIHRvZG8gfD0gUkVTRVQ7CiAgICBTb0ZpZWxkICp0aW1lSW5Db25uZWN0aW9u
ID0gX19udWxsOwogICAgdGltZUluLmdldENvbm5lY3RlZEZpZWxkKHRpbWVJbkNvbm5lY3Rpb24p
OwogICAgaWYgKHRpbWVJbkNvbm5lY3Rpb24gPT0gU29EQjo6Z2V0R2xvYmFsRmllbGQoInJlYWxU
aW1lIikpIHsKICAgICAgICB0aW1lSW4uZGlzY29ubmVjdCgpOwogICAgICAgIHRpbWVJbi5jb25u
ZWN0RnJvbSh0aW1lSW5Db25uZWN0aW9uKTsKICAgIH0KCiAgICByZXR1cm4gcmVzdWx0Owp9CiMg
MTczICJTb1RpbWVDb3VudGVyLmMrKyIKdm9pZApTb1RpbWVDb3VudGVyOjppbnB1dENoYW5nZWQo
U29GaWVsZCAqd2hpY2hJbnB1dCkKCgp7CgogICAgU2JUaW1lIG5vdyA9IHRpbWVJbi5nZXRWYWx1
ZSgpOwoKICAgIFNiQm9vbCBlbmFibGUgPSAwOwogICAgU2JCb29sIHN5bmNFbmFibGUgPSAhISh0
b2RvJlNZTkMpOwogICAgaWYgKHdoaWNoSW5wdXQgPT0gJm1pbiB8fAogICAgICAgIHdoaWNoSW5w
dXQgPT0gJm1heCB8fAogICAgICAgIHdoaWNoSW5wdXQgPT0gJnN0ZXAgfHwKICAgICAgICB3aGlj
aElucHV0ID09ICZmcmVxdWVuY3kgfHwKICAgICAgICB3aGljaElucHV0ID09ICZkdXR5KSB7CiAg
ICAgICAgdG9kbyB8PSBSRUNBTEM7CiAgICB9CiAgICBlbHNlIGlmICh3aGljaElucHV0ID09ICZy
ZXNldCkgewogICAgICAgIHRvZG8gfD0gUkVTRVQ7CiAgICB9CiAgICBlbHNlIGlmICh3aGljaElu
cHV0ID09ICZzeW5jSW4pIHsKICAgICAgICB0b2RvIHw9IFNZTkM7CiAgICAgICAgc3luY0VuYWJs
ZSA9IDE7CiAgICB9CiAgICBlbHNlIGlmICh3aGljaElucHV0ID09ICZvbikgewogICAgICAgIGlm
ICghb24uZ2V0VmFsdWUoKSAmJiBzdGF0ZSAhPSBQQVVTRUQpIHsKICAgICAgICAgICAgdG9kbyB8
PSBQQVVTRTsKICAgICAgICAgICAgdG9kbyAmPSB+VU5QQVVTRTsKICAgICAgICB9CiAgICAgICAg
ZWxzZSBpZiAob24uZ2V0VmFsdWUoKSAmJiBzdGF0ZSA9PSBQQVVTRUQpIHsKICAgICAgICAgICAg
dG9kbyB8PSBVTlBBVVNFOwogICAgICAgICAgICB0b2RvICY9IH5QQVVTRTsKICAgICAgICB9CiAg
ICB9CiAgICBlbHNlIGlmICh3aGljaElucHV0ID09ICZ0aW1lSW4gJiYgb24uZ2V0VmFsdWUoKSAm
JiBzdGFnZXMgIT0gX19udWxsKSB7CiAgICAgICAgU2JUaW1lIG9mZiA9IG5vdy1iYXNlVGltZTsK
ICAgICAgICBpZiAob2ZmID49IHN0YWdlc1tjdXJTdGFnZSsxXS5vZmZzZXQgfHwgb2ZmIDwgc3Rh
Z2VzW2N1clN0YWdlXS5vZmZzZXQpIHsKICAgICAgICAgICAgZW5hYmxlID0gMTsKICAgICAgICAg
ICAgaWYgKG9mZiA+IHN0YWdlc1tuU3RhZ2VzXS5vZmZzZXQpCiAgICAgICAgICAgICAgICBzeW5j
RW5hYmxlID0gMTsKICAgICAgICB9CiAgICB9CiAgICBpZiAodG9kbykgZW5hYmxlID0gMTsKCiAg
ICBvdXRwdXQuZW5hYmxlKGVuYWJsZSk7CiAgICBzeW5jT3V0LmVuYWJsZShzeW5jRW5hYmxlKTsK
IyAyNTYgIlNvVGltZUNvdW50ZXIuYysrIgogICAgaWYgKHRvZG8mUkVDQUxDKSB7CgoKICAgICAg
ICBpbnQgbW4gPSBtaW4uZ2V0VmFsdWUoKTsKICAgICAgICBpbnQgbXggPSBtYXguZ2V0VmFsdWUo
KTsKICAgICAgICBpbnQgc3RwID0gc3RlcC5nZXRWYWx1ZSgpOwogICAgICAgIGlmIChzdHAgPT0g
MCkgc3RwID0gMTsKICAgICAgICBpZiAobW4gPiBteCkgeyBpbnQgdCA9IG1uOyBtbj1teDsgbXg9
dDsgfQoKICAgICAgICBpbnQgbkR1dHkgPSBkdXR5LmdldE51bSgpOwogICAgICAgIHBlcmlvZCA9
IDEvZnJlcXVlbmN5LmdldFZhbHVlKCk7CgoKICAgICAgICBkZWxldGUgW10gc3RhZ2VzOwogICAg
ICAgIG5TdGFnZXMgPSAxK2FicygobXgtbW4pL3N0cCk7CiAgICAgICAgc3RhZ2VzID0gbmV3IHN0
cnVjdCBTdGFnZVtuU3RhZ2VzICsgMV07CgoKICAgICAgICB3aGlsZSAoY3VyU3RhZ2UgPj0gblN0
YWdlcykgY3VyU3RhZ2UgLT0gblN0YWdlczsKCgogICAgICAgIGludCBpLCB2YWw7CiAgICAgICAg
Zm9yIChpPTAsIHZhbD1zdHA+MD9tbjpteDsgaTxuU3RhZ2VzOyBpKyssIHZhbCs9c3RwKSB7CiAg
ICAgICAgICAgIHN0YWdlc1tpXS52YWwgPSB2YWw7CiAgICAgICAgICAgIHN0YWdlc1tpXS5kdXR5
ID0gKGkgPCBuRHV0eSkgPyBkdXR5W2ldIDogMS4wOwogICAgICAgIH0KCgogICAgICAgIGRvdWJs
ZSB0b3RhbDsKICAgICAgICBmb3IgKHRvdGFsPTAsIGk9MDsgaTxuU3RhZ2VzOyBpKyspIHRvdGFs
ICs9IHN0YWdlc1tpXS5kdXR5OwogICAgICAgIGZvciAoaT0wOyBpPG5TdGFnZXM7IGkrKykgc3Rh
Z2VzW2ldLmR1dHkgLz0gdG90YWw7CgoKICAgICAgICBzdGFnZXNbMF0ub2Zmc2V0ID0gMC4wOwog
ICAgICAgIGZvciAoaT0xOyBpPG5TdGFnZXM7IGkrKykgewogICAgICAgICAgICBzdGFnZXNbaV0u
b2Zmc2V0ID0gc3RhZ2VzW2ktMV0ub2Zmc2V0ICsgKHN0YWdlc1tpLTFdLmR1dHkgKiBwZXJpb2Qp
OwogICAgICAgIH0KICAgICAgICBzdGFnZXNbblN0YWdlc10ub2Zmc2V0ID0gcGVyaW9kOwojIDMw
NSAiU29UaW1lQ291bnRlci5jKysiCiAgICB9CgoKICAgIGlmICh0b2RvJlNZTkMpIHsKCiAgICAg
ICAgY3VyU3RhZ2UgPSAwOwogICAgICAgIGJhc2VUaW1lID0gbm93OwogICAgICAgIHBhdXNlT2Zm
c2V0ID0gMC4wOwoKCgoKCgogICAgfQoKCiAgICBpZiAodG9kbyZSRVNFVCkgewoKICAgICAgICBj
b25zdCBpbnQgciA9IHJlc2V0LmdldFZhbHVlKCk7CiAgICAgICAgaW50IHN0cCA9IHN0ZXAuZ2V0
VmFsdWUoKTsKICAgICAgICBpZiAoc3RwPT0wKSBzdHAgPSAxOwoKCiAgICAgICAgY3VyU3RhZ2Ug
PSAoci1zdGFnZXNbMF0udmFsKS9zdHA7CiAgICAgICAgaWYgKGN1clN0YWdlIDwgMCkKICAgICAg
ICAgICAgY3VyU3RhZ2UgPSAwOwogICAgICAgIGVsc2UgaWYgKGN1clN0YWdlID49IG5TdGFnZXMp
CiAgICAgICAgICAgIGN1clN0YWdlID0gblN0YWdlcy0xOwoKCiAgICAgICAgYmFzZVRpbWUgPSBu
b3cgLSBzdGFnZXNbY3VyU3RhZ2VdLm9mZnNldDsKICAgICAgICBwYXVzZU9mZnNldCA9IHN0YWdl
c1tjdXJTdGFnZV0ub2Zmc2V0OwojIDM0NyAiU29UaW1lQ291bnRlci5jKysiCiAgICB9CgoKICAg
IGlmICh0b2RvJlBBVVNFKSB7CiAgICAgICAgcGF1c2VPZmZzZXQgPSBub3cgLSBiYXNlVGltZTsK
ICAgICAgICBzdGF0ZSA9IFBBVVNFRDsKCgoKCgoKICAgIH0KCgoKICAgIGlmICh0b2RvJlVOUEFV
U0UpIHsKICAgICAgICBiYXNlVGltZSA9IG5vdyAtIHBhdXNlT2Zmc2V0OwogICAgICAgIHN0YXRl
ID0gT047CgoKCgoKCgogICAgfQoKICAgIHRvZG8gPSAwOwoKCgoKfQojIDM4OSAiU29UaW1lQ291
bnRlci5jKysiCnZvaWQKU29UaW1lQ291bnRlcjo6ZXZhbHVhdGUoKQoKCnsKICAgIGludCBpOwoK
ICAgIFNiVGltZSBub3cgPSB0aW1lSW4uZ2V0VmFsdWUoKTsKCgogICAgaWYgKHN0YXRlPT1PTikg
ewoKCiAgICAgICAgd2hpbGUgKG5vdyAtIGJhc2VUaW1lID49IHBlcmlvZCkgYmFzZVRpbWUgKz0g
cGVyaW9kOwogICAgICAgIHdoaWxlIChiYXNlVGltZSAtIG5vdyA+IHBlcmlvZCkgYmFzZVRpbWUg
LT0gcGVyaW9kOwoKCiAgICAgICAgU2JUaW1lIG9mZnNldCA9IG5vdyAtIGJhc2VUaW1lOwogICAg
ICAgIGZvciAoaT1uU3RhZ2VzLTE7IGk7IGktLSkKICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBz
dGFnZXNbaV0ub2Zmc2V0KQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGN1clN0YWdl
ID0gaTsKICAgIH0KIyA0MjUgIlNvVGltZUNvdW50ZXIuYysrIgogICAgZG8geyBpZiAob3V0cHV0
LmlzRW5hYmxlZCgpKSB7IGZvciAoaW50IF9lbmdfb3V0X2kgPSAwOyBfZW5nX291dF9pIDwgb3V0
cHV0LmdldE51bUNvbm5lY3Rpb25zKCk7IF9lbmdfb3V0X2krKykgeyBTb1NGU2hvcnQgKl9lbmdf
b3V0X3RlbXAgPSAoU29TRlNob3J0ICopIG91dHB1dFtfZW5nX291dF9pXTsgaWYgKCFfZW5nX291
dF90ZW1wLT5pc1JlYWRPbmx5KCkpIHsgX2VuZ19vdXRfdGVtcC0+c2V0VmFsdWUoc3RhZ2VzW2N1
clN0YWdlXS52YWwpOyB9IH0gfSB9IHdoaWxlKDApOwogICAgcHJldlN0YWdlID0gY3VyU3RhZ2U7
Cn0KIyA1NiAiU29FbmdpbmVzLmMrKyIgMgojIDEgIlNvVHJhbnNmb3JtVmVjM2YuYysrIiAxCiMg
NTQgIlNvVHJhbnNmb3JtVmVjM2YuYysrIgojIDEgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRhYmFz
ZS9pbmNsdWRlL0ludmVudG9yL2VuZ2luZXMvU29UcmFuc2Zvcm1WZWMzZi5oIiAxCiMgNjggIi4u
Ly4uLy4uLy4uLy4uL2xpYi9kYXRhYmFzZS9pbmNsdWRlL0ludmVudG9yL2VuZ2luZXMvU29UcmFu
c2Zvcm1WZWMzZi5oIgpjbGFzcyBTb1RyYW5zZm9ybVZlYzNmIDogcHVibGljIFNvRW5naW5lIHsK
CiAgICBwdWJsaWM6IHN0YXRpYyBTb1R5cGUgZ2V0Q2xhc3NUeXBlSWQoKSB7IHJldHVybiBjbGFz
c1R5cGVJZDsgfSB2aXJ0dWFsIFNvVHlwZSBnZXRUeXBlSWQoKSBjb25zdDsgcHVibGljOiB2aXJ0
dWFsIGNvbnN0IFNvRmllbGREYXRhICogZ2V0RmllbGREYXRhKCkgY29uc3Q7IHZpcnR1YWwgY29u
c3QgU29FbmdpbmVPdXRwdXREYXRhICogZ2V0T3V0cHV0RGF0YSgpIGNvbnN0OyBwcm90ZWN0ZWQ6
IHN0YXRpYyBjb25zdCBTb0ZpZWxkRGF0YSAqKiBnZXRJbnB1dERhdGFQdHIoKSB7IHJldHVybiAo
Y29uc3QgU29GaWVsZERhdGEgKiopJmlucHV0RGF0YTsgfSBzdGF0aWMgY29uc3QgU29FbmdpbmVP
dXRwdXREYXRhICoqIGdldE91dHB1dERhdGFQdHIoKSB7IHJldHVybiAoY29uc3QgU29FbmdpbmVP
dXRwdXREYXRhICoqKSZvdXRwdXREYXRhOyB9IHByaXZhdGU6IHN0YXRpYyBTb1R5cGUgY2xhc3NU
eXBlSWQ7IHN0YXRpYyBTYkJvb2wgZmlyc3RJbnN0YW5jZTsgc3RhdGljIFNvRmllbGREYXRhICpp
bnB1dERhdGE7IHN0YXRpYyBTb0VuZ2luZU91dHB1dERhdGEgKm91dHB1dERhdGE7IHN0YXRpYyBj
b25zdCBTb0ZpZWxkRGF0YSAqKnBhcmVudElucHV0RGF0YTsgc3RhdGljIGNvbnN0IFNvRW5naW5l
T3V0cHV0RGF0YSAqKnBhcmVudE91dHB1dERhdGE7IHByaXZhdGU6IHN0YXRpYyB2b2lkICpjcmVh
dGVJbnN0YW5jZSgpOwoKICBwdWJsaWM6CgoKICAgIFNvTUZWZWMzZiB2ZWN0b3I7CiAgICBTb01G
TWF0cml4IG1hdHJpeDsKCgogICAgU29FbmdpbmVPdXRwdXQgcG9pbnQ7CiAgICBTb0VuZ2luZU91
dHB1dCBkaXJlY3Rpb247CiAgICBTb0VuZ2luZU91dHB1dCBub3JtYWxEaXJlY3Rpb247CgoKICAg
IFNvVHJhbnNmb3JtVmVjM2YoKTsKCiAgcHVibGljOgoKICAgIHN0YXRpYyB2b2lkIGluaXRDbGFz
cygpOwoKICBwcml2YXRlOgoKCiAgICB+U29UcmFuc2Zvcm1WZWMzZigpOwoKCiAgICB2aXJ0dWFs
IHZvaWQgZXZhbHVhdGUoKTsKfTsKIyA1NSAiU29UcmFuc2Zvcm1WZWMzZi5jKysiIDIKCgpTb1R5
cGUgU29UcmFuc2Zvcm1WZWMzZjo6Y2xhc3NUeXBlSWQ7IFNiQm9vbCBTb1RyYW5zZm9ybVZlYzNm
OjpmaXJzdEluc3RhbmNlPTE7IFNvRW5naW5lT3V0cHV0RGF0YSAqU29UcmFuc2Zvcm1WZWMzZjo6
b3V0cHV0RGF0YTsgU29GaWVsZERhdGEgKiBTb1RyYW5zZm9ybVZlYzNmOjppbnB1dERhdGE7IGNv
bnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqKlNvVHJhbnNmb3JtVmVjM2Y6OnBhcmVudE91dHB1dERh
dGE7IGNvbnN0IFNvRmllbGREYXRhICoqIFNvVHJhbnNmb3JtVmVjM2Y6OnBhcmVudElucHV0RGF0
YTsgU29UeXBlIFNvVHJhbnNmb3JtVmVjM2Y6OmdldFR5cGVJZCgpIGNvbnN0IHsgcmV0dXJuIGNs
YXNzVHlwZUlkOyB9IGNvbnN0IFNvRmllbGREYXRhICogU29UcmFuc2Zvcm1WZWMzZjo6Z2V0Rmll
bGREYXRhKCkgY29uc3QgeyByZXR1cm4gaW5wdXREYXRhOyB9IGNvbnN0IFNvRW5naW5lT3V0cHV0
RGF0YSAqIFNvVHJhbnNmb3JtVmVjM2Y6OmdldE91dHB1dERhdGEoKSBjb25zdCB7IHJldHVybiBv
dXRwdXREYXRhOyB9IHZvaWQgKiBTb1RyYW5zZm9ybVZlYzNmOjpjcmVhdGVJbnN0YW5jZSgpIHsg
cmV0dXJuICh2b2lkICopKG5ldyBTb1RyYW5zZm9ybVZlYzNmKTsgfTsKIyA2NiAiU29UcmFuc2Zv
cm1WZWMzZi5jKysiClNvVHJhbnNmb3JtVmVjM2Y6OlNvVHJhbnNmb3JtVmVjM2YoKQoKCnsKICAg
IGRvIHsgd2hpbGUoMCk7IGlmIChpbnB1dERhdGEgPT0gX19udWxsKSB7IGlucHV0RGF0YSA9IG5l
dyBTb0ZpZWxkRGF0YShwYXJlbnRJbnB1dERhdGEgPyAqcGFyZW50SW5wdXREYXRhIDogX19udWxs
KTsgb3V0cHV0RGF0YSA9IG5ldyBTb0VuZ2luZU91dHB1dERhdGEocGFyZW50T3V0cHV0RGF0YSA/
ICpwYXJlbnRPdXRwdXREYXRhIDogX19udWxsKTsgfSBlbHNlIGZpcnN0SW5zdGFuY2UgPSAwOyBp
c0J1aWx0SW4gPSAwOyB9IHdoaWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYgKGZpcnN0SW5z
dGFuY2UpIGlucHV0RGF0YS0+YWRkRmllbGQodGhpcywgInZlY3RvciIsICZ0aGlzLT52ZWN0b3Ip
OyB0aGlzLT52ZWN0b3Iuc2V0VmFsdWUgKFNiVmVjM2YoMCwwLDApKTsgdGhpcy0+dmVjdG9yLnNl
dENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChmaXJz
dEluc3RhbmNlKSBpbnB1dERhdGEtPmFkZEZpZWxkKHRoaXMsICJtYXRyaXgiLCAmdGhpcy0+bWF0
cml4KTsgdGhpcy0+bWF0cml4LnNldFZhbHVlIChTYk1hdHJpeDo6aWRlbnRpdHkoKSk7IHRoaXMt
Pm1hdHJpeC5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxlKDAp
OyBpZiAoZmlyc3RJbnN0YW5jZSkgb3V0cHV0RGF0YS0+YWRkT3V0cHV0KHRoaXMsICJwb2ludCIs
ICZ0aGlzLT5wb2ludCwgU29NRlZlYzNmOjpnZXRDbGFzc1R5cGVJZCgpKTsgdGhpcy0+cG9pbnQu
c2V0Q29udGFpbmVyKHRoaXMpOyB9IHdoaWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYgKGZp
cnN0SW5zdGFuY2UpIG91dHB1dERhdGEtPmFkZE91dHB1dCh0aGlzLCAiZGlyZWN0aW9uIiwgJnRo
aXMtPmRpcmVjdGlvbiwgU29NRlZlYzNmOjpnZXRDbGFzc1R5cGVJZCgpKTsgdGhpcy0+ZGlyZWN0
aW9uLnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsKICAgIGRvIHsgd2hpbGUoMCk7IGlm
IChmaXJzdEluc3RhbmNlKSBvdXRwdXREYXRhLT5hZGRPdXRwdXQodGhpcywgIm5vcm1hbERpcmVj
dGlvbiIsICZ0aGlzLT5ub3JtYWxEaXJlY3Rpb24sIFNvTUZWZWMzZjo6Z2V0Q2xhc3NUeXBlSWQo
KSk7IHRoaXMtPm5vcm1hbERpcmVjdGlvbi5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7
CiAgICBpc0J1aWx0SW4gPSAxOwp9CiMgODYgIlNvVHJhbnNmb3JtVmVjM2YuYysrIgpTb1RyYW5z
Zm9ybVZlYzNmOjp+U29UcmFuc2Zvcm1WZWMzZigpCgoKewp9CiMgOTkgIlNvVHJhbnNmb3JtVmVj
M2YuYysrIgp2b2lkClNvVHJhbnNmb3JtVmVjM2Y6OmV2YWx1YXRlKCkKCgp7CiAgICBpbnQgbnZl
Y3RvciA9IHZlY3Rvci5nZXROdW0oKTsKICAgIGludCBubWF0cml4ID0gbWF0cml4LmdldE51bSgp
OwogICAgaW50IG5vdXQgPSBtYXgobnZlY3RvcixubWF0cml4KTsKICAgIGRvIHsgaWYgKHBvaW50
LmlzRW5hYmxlZCgpKSB7IGZvciAoaW50IF9lbmdfb3V0X2kgPSAwOyBfZW5nX291dF9pIDwgcG9p
bnQuZ2V0TnVtQ29ubmVjdGlvbnMoKTsgX2VuZ19vdXRfaSsrKSB7IFNvTUZWZWMzZiAqX2VuZ19v
dXRfdGVtcCA9IChTb01GVmVjM2YgKikgcG9pbnRbX2VuZ19vdXRfaV07IGlmICghX2VuZ19vdXRf
dGVtcC0+aXNSZWFkT25seSgpKSB7IF9lbmdfb3V0X3RlbXAtPnNldE51bShub3V0KTsgfSB9IH0g
fSB3aGlsZSgwKTsKICAgIGRvIHsgaWYgKGRpcmVjdGlvbi5pc0VuYWJsZWQoKSkgeyBmb3IgKGlu
dCBfZW5nX291dF9pID0gMDsgX2VuZ19vdXRfaSA8IGRpcmVjdGlvbi5nZXROdW1Db25uZWN0aW9u
cygpOyBfZW5nX291dF9pKyspIHsgU29NRlZlYzNmICpfZW5nX291dF90ZW1wID0gKFNvTUZWZWMz
ZiAqKSBkaXJlY3Rpb25bX2VuZ19vdXRfaV07IGlmICghX2VuZ19vdXRfdGVtcC0+aXNSZWFkT25s
eSgpKSB7IF9lbmdfb3V0X3RlbXAtPnNldE51bShub3V0KTsgfSB9IH0gfSB3aGlsZSgwKTsKICAg
IGRvIHsgaWYgKG5vcm1hbERpcmVjdGlvbi5pc0VuYWJsZWQoKSkgeyBmb3IgKGludCBfZW5nX291
dF9pID0gMDsgX2VuZ19vdXRfaSA8IG5vcm1hbERpcmVjdGlvbi5nZXROdW1Db25uZWN0aW9ucygp
OyBfZW5nX291dF9pKyspIHsgU29NRlZlYzNmICpfZW5nX291dF90ZW1wID0gKFNvTUZWZWMzZiAq
KSBub3JtYWxEaXJlY3Rpb25bX2VuZ19vdXRfaV07IGlmICghX2VuZ19vdXRfdGVtcC0+aXNSZWFk
T25seSgpKSB7IF9lbmdfb3V0X3RlbXAtPnNldE51bShub3V0KTsgfSB9IH0gfSB3aGlsZSgwKTsK
CiAgICBmb3IgKGludCBpPTA7IGk8bm91dDsgaSsrKSB7CiAgICAgICAgY29uc3QgU2JWZWMzZiAm
diA9IHZlY3RvcltjbGFtcChpLG52ZWN0b3IpXTsKICAgICAgICBjb25zdCBTYk1hdHJpeCAmbSA9
IG1hdHJpeFtjbGFtcChpLG5tYXRyaXgpXTsKICAgICAgICBTYlZlYzNmIHAsIGQ7CgogICAgICAg
IGlmIChwb2ludC5nZXROdW1Db25uZWN0aW9ucygpKSB7CiAgICAgICAgICAgIG0ubXVsdFZlY01h
dHJpeCh2LCBwKTsKICAgICAgICAgICAgZG8geyBpZiAocG9pbnQuaXNFbmFibGVkKCkpIHsgZm9y
IChpbnQgX2VuZ19vdXRfaSA9IDA7IF9lbmdfb3V0X2kgPCBwb2ludC5nZXROdW1Db25uZWN0aW9u
cygpOyBfZW5nX291dF9pKyspIHsgU29NRlZlYzNmICpfZW5nX291dF90ZW1wID0gKFNvTUZWZWMz
ZiAqKSBwb2ludFtfZW5nX291dF9pXTsgaWYgKCFfZW5nX291dF90ZW1wLT5pc1JlYWRPbmx5KCkp
IHsgX2VuZ19vdXRfdGVtcC0+c2V0MVZhbHVlKGksIHApOyB9IH0gfSB9IHdoaWxlKDApOwogICAg
ICAgIH0KCiAgICAgICAgaWYgKGRpcmVjdGlvbi5nZXROdW1Db25uZWN0aW9ucygpIHx8CiAgICAg
ICAgICAgIG5vcm1hbERpcmVjdGlvbi5nZXROdW1Db25uZWN0aW9ucygpKSB7CiAgICAgICAgICAg
IG0ubXVsdERpck1hdHJpeCh2LCBkKTsKICAgICAgICB9CgogICAgICAgIGlmIChkaXJlY3Rpb24u
Z2V0TnVtQ29ubmVjdGlvbnMoKSkKICAgICAgICAgICAgZG8geyBpZiAoZGlyZWN0aW9uLmlzRW5h
YmxlZCgpKSB7IGZvciAoaW50IF9lbmdfb3V0X2kgPSAwOyBfZW5nX291dF9pIDwgZGlyZWN0aW9u
LmdldE51bUNvbm5lY3Rpb25zKCk7IF9lbmdfb3V0X2krKykgeyBTb01GVmVjM2YgKl9lbmdfb3V0
X3RlbXAgPSAoU29NRlZlYzNmICopIGRpcmVjdGlvbltfZW5nX291dF9pXTsgaWYgKCFfZW5nX291
dF90ZW1wLT5pc1JlYWRPbmx5KCkpIHsgX2VuZ19vdXRfdGVtcC0+c2V0MVZhbHVlKGksIGQpOyB9
IH0gfSB9IHdoaWxlKDApOwoKICAgICAgICBpZiAobm9ybWFsRGlyZWN0aW9uLmdldE51bUNvbm5l
Y3Rpb25zKCkpIHsKICAgICAgICAgICAgZC5ub3JtYWxpemUoKTsKICAgICAgICAgICAgZG8geyBp
ZiAobm9ybWFsRGlyZWN0aW9uLmlzRW5hYmxlZCgpKSB7IGZvciAoaW50IF9lbmdfb3V0X2kgPSAw
OyBfZW5nX291dF9pIDwgbm9ybWFsRGlyZWN0aW9uLmdldE51bUNvbm5lY3Rpb25zKCk7IF9lbmdf
b3V0X2krKykgeyBTb01GVmVjM2YgKl9lbmdfb3V0X3RlbXAgPSAoU29NRlZlYzNmICopIG5vcm1h
bERpcmVjdGlvbltfZW5nX291dF9pXTsgaWYgKCFfZW5nX291dF90ZW1wLT5pc1JlYWRPbmx5KCkp
IHsgX2VuZ19vdXRfdGVtcC0+c2V0MVZhbHVlKGksIGQpOyB9IH0gfSB9IHdoaWxlKDApOwogICAg
ICAgIH0KICAgIH0KfQojIDU3ICJTb0VuZ2luZXMuYysrIiAyCiMgMSAiU29UcmlnZ2VyQW55LmMr
KyIgMQojIDU1ICJTb1RyaWdnZXJBbnkuYysrIgojIDEgIi4uLy4uLy4uLy4uLy4uL2xpYi9kYXRh
YmFzZS9pbmNsdWRlL0ludmVudG9yL2VuZ2luZXMvU29UcmlnZ2VyQW55LmgiIDEKIyA2NyAiLi4v
Li4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUvSW52ZW50b3IvZW5naW5lcy9Tb1RyaWdn
ZXJBbnkuaCIKY2xhc3MgU29UcmlnZ2VyQW55IDogcHVibGljIFNvRW5naW5lIHsKCiAgICBwdWJs
aWM6IHN0YXRpYyBTb1R5cGUgZ2V0Q2xhc3NUeXBlSWQoKSB7IHJldHVybiBjbGFzc1R5cGVJZDsg
fSB2aXJ0dWFsIFNvVHlwZSBnZXRUeXBlSWQoKSBjb25zdDsgcHVibGljOiB2aXJ0dWFsIGNvbnN0
IFNvRmllbGREYXRhICogZ2V0RmllbGREYXRhKCkgY29uc3Q7IHZpcnR1YWwgY29uc3QgU29Fbmdp
bmVPdXRwdXREYXRhICogZ2V0T3V0cHV0RGF0YSgpIGNvbnN0OyBwcm90ZWN0ZWQ6IHN0YXRpYyBj
b25zdCBTb0ZpZWxkRGF0YSAqKiBnZXRJbnB1dERhdGFQdHIoKSB7IHJldHVybiAoY29uc3QgU29G
aWVsZERhdGEgKiopJmlucHV0RGF0YTsgfSBzdGF0aWMgY29uc3QgU29FbmdpbmVPdXRwdXREYXRh
ICoqIGdldE91dHB1dERhdGFQdHIoKSB7IHJldHVybiAoY29uc3QgU29FbmdpbmVPdXRwdXREYXRh
ICoqKSZvdXRwdXREYXRhOyB9IHByaXZhdGU6IHN0YXRpYyBTb1R5cGUgY2xhc3NUeXBlSWQ7IHN0
YXRpYyBTYkJvb2wgZmlyc3RJbnN0YW5jZTsgc3RhdGljIFNvRmllbGREYXRhICppbnB1dERhdGE7
IHN0YXRpYyBTb0VuZ2luZU91dHB1dERhdGEgKm91dHB1dERhdGE7IHN0YXRpYyBjb25zdCBTb0Zp
ZWxkRGF0YSAqKnBhcmVudElucHV0RGF0YTsgc3RhdGljIGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0
YSAqKnBhcmVudE91dHB1dERhdGE7IHByaXZhdGU6IHN0YXRpYyB2b2lkICpjcmVhdGVJbnN0YW5j
ZSgpOwoKICBwdWJsaWM6CiAgICBTb1NGVHJpZ2dlciBpbnB1dDA7CiAgICBTb1NGVHJpZ2dlciBp
bnB1dDE7CiAgICBTb1NGVHJpZ2dlciBpbnB1dDI7CiAgICBTb1NGVHJpZ2dlciBpbnB1dDM7CiAg
ICBTb1NGVHJpZ2dlciBpbnB1dDQ7CiAgICBTb1NGVHJpZ2dlciBpbnB1dDU7CiAgICBTb1NGVHJp
Z2dlciBpbnB1dDY7CiAgICBTb1NGVHJpZ2dlciBpbnB1dDc7CiAgICBTb1NGVHJpZ2dlciBpbnB1
dDg7CiAgICBTb1NGVHJpZ2dlciBpbnB1dDk7CiAgICBTb0VuZ2luZU91dHB1dCBvdXRwdXQ7Cgog
ICAgU29UcmlnZ2VyQW55KCk7CgogIHB1YmxpYzoKICAgIHN0YXRpYyB2b2lkIGluaXRDbGFzcygp
OwoKICBwcml2YXRlOgogICAgflNvVHJpZ2dlckFueSgpOwogICAgdmlydHVhbCB2b2lkIGV2YWx1
YXRlKCk7Cn07CiMgNTYgIlNvVHJpZ2dlckFueS5jKysiIDIKClNvVHlwZSBTb1RyaWdnZXJBbnk6
OmNsYXNzVHlwZUlkOyBTYkJvb2wgU29UcmlnZ2VyQW55OjpmaXJzdEluc3RhbmNlPTE7IFNvRW5n
aW5lT3V0cHV0RGF0YSAqU29UcmlnZ2VyQW55OjpvdXRwdXREYXRhOyBTb0ZpZWxkRGF0YSAqIFNv
VHJpZ2dlckFueTo6aW5wdXREYXRhOyBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKipTb1RyaWdn
ZXJBbnk6OnBhcmVudE91dHB1dERhdGE7IGNvbnN0IFNvRmllbGREYXRhICoqIFNvVHJpZ2dlckFu
eTo6cGFyZW50SW5wdXREYXRhOyBTb1R5cGUgU29UcmlnZ2VyQW55OjpnZXRUeXBlSWQoKSBjb25z
dCB7IHJldHVybiBjbGFzc1R5cGVJZDsgfSBjb25zdCBTb0ZpZWxkRGF0YSAqIFNvVHJpZ2dlckFu
eTo6Z2V0RmllbGREYXRhKCkgY29uc3QgeyByZXR1cm4gaW5wdXREYXRhOyB9IGNvbnN0IFNvRW5n
aW5lT3V0cHV0RGF0YSAqIFNvVHJpZ2dlckFueTo6Z2V0T3V0cHV0RGF0YSgpIGNvbnN0IHsgcmV0
dXJuIG91dHB1dERhdGE7IH0gdm9pZCAqIFNvVHJpZ2dlckFueTo6Y3JlYXRlSW5zdGFuY2UoKSB7
IHJldHVybiAodm9pZCAqKShuZXcgU29UcmlnZ2VyQW55KTsgfTsKIyA2NyAiU29UcmlnZ2VyQW55
LmMrKyIKU29UcmlnZ2VyQW55OjpTb1RyaWdnZXJBbnkoKQoKCnsKICAgIGRvIHsgd2hpbGUoMCk7
IGlmIChpbnB1dERhdGEgPT0gX19udWxsKSB7IGlucHV0RGF0YSA9IG5ldyBTb0ZpZWxkRGF0YShw
YXJlbnRJbnB1dERhdGEgPyAqcGFyZW50SW5wdXREYXRhIDogX19udWxsKTsgb3V0cHV0RGF0YSA9
IG5ldyBTb0VuZ2luZU91dHB1dERhdGEocGFyZW50T3V0cHV0RGF0YSA/ICpwYXJlbnRPdXRwdXRE
YXRhIDogX19udWxsKTsgfSBlbHNlIGZpcnN0SW5zdGFuY2UgPSAwOyBpc0J1aWx0SW4gPSAwOyB9
IHdoaWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYgKGZpcnN0SW5zdGFuY2UpIGlucHV0RGF0
YS0+YWRkRmllbGQodGhpcywgImlucHV0MCIsICZ0aGlzLT5pbnB1dDApOyB0aGlzLT5pbnB1dDAu
c2V0VmFsdWUgKCk7IHRoaXMtPmlucHV0MC5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7
CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgaW5wdXREYXRhLT5hZGRGaWVs
ZCh0aGlzLCAiaW5wdXQxIiwgJnRoaXMtPmlucHV0MSk7IHRoaXMtPmlucHV0MS5zZXRWYWx1ZSAo
KTsgdGhpcy0+aW5wdXQxLnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsKICAgIGRvIHsg
d2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFkZEZpZWxkKHRoaXMsICJp
bnB1dDIiLCAmdGhpcy0+aW5wdXQyKTsgdGhpcy0+aW5wdXQyLnNldFZhbHVlICgpOyB0aGlzLT5p
bnB1dDIuc2V0Q29udGFpbmVyKHRoaXMpOyB9IHdoaWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsg
aWYgKGZpcnN0SW5zdGFuY2UpIGlucHV0RGF0YS0+YWRkRmllbGQodGhpcywgImlucHV0MyIsICZ0
aGlzLT5pbnB1dDMpOyB0aGlzLT5pbnB1dDMuc2V0VmFsdWUgKCk7IHRoaXMtPmlucHV0My5zZXRD
b250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJ
bnN0YW5jZSkgaW5wdXREYXRhLT5hZGRGaWVsZCh0aGlzLCAiaW5wdXQ0IiwgJnRoaXMtPmlucHV0
NCk7IHRoaXMtPmlucHV0NC5zZXRWYWx1ZSAoKTsgdGhpcy0+aW5wdXQ0LnNldENvbnRhaW5lcih0
aGlzKTsgfSB3aGlsZSgwKTsKICAgIGRvIHsgd2hpbGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBp
bnB1dERhdGEtPmFkZEZpZWxkKHRoaXMsICJpbnB1dDUiLCAmdGhpcy0+aW5wdXQ1KTsgdGhpcy0+
aW5wdXQ1LnNldFZhbHVlICgpOyB0aGlzLT5pbnB1dDUuc2V0Q29udGFpbmVyKHRoaXMpOyB9IHdo
aWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYgKGZpcnN0SW5zdGFuY2UpIGlucHV0RGF0YS0+
YWRkRmllbGQodGhpcywgImlucHV0NiIsICZ0aGlzLT5pbnB1dDYpOyB0aGlzLT5pbnB1dDYuc2V0
VmFsdWUgKCk7IHRoaXMtPmlucHV0Ni5zZXRDb250YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAg
ICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0YW5jZSkgaW5wdXREYXRhLT5hZGRGaWVsZCh0
aGlzLCAiaW5wdXQ3IiwgJnRoaXMtPmlucHV0Nyk7IHRoaXMtPmlucHV0Ny5zZXRWYWx1ZSAoKTsg
dGhpcy0+aW5wdXQ3LnNldENvbnRhaW5lcih0aGlzKTsgfSB3aGlsZSgwKTsKICAgIGRvIHsgd2hp
bGUoMCk7IGlmIChmaXJzdEluc3RhbmNlKSBpbnB1dERhdGEtPmFkZEZpZWxkKHRoaXMsICJpbnB1
dDgiLCAmdGhpcy0+aW5wdXQ4KTsgdGhpcy0+aW5wdXQ4LnNldFZhbHVlICgpOyB0aGlzLT5pbnB1
dDguc2V0Q29udGFpbmVyKHRoaXMpOyB9IHdoaWxlKDApOwogICAgZG8geyB3aGlsZSgwKTsgaWYg
KGZpcnN0SW5zdGFuY2UpIGlucHV0RGF0YS0+YWRkRmllbGQodGhpcywgImlucHV0OSIsICZ0aGlz
LT5pbnB1dDkpOyB0aGlzLT5pbnB1dDkuc2V0VmFsdWUgKCk7IHRoaXMtPmlucHV0OS5zZXRDb250
YWluZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBkbyB7IHdoaWxlKDApOyBpZiAoZmlyc3RJbnN0
YW5jZSkgb3V0cHV0RGF0YS0+YWRkT3V0cHV0KHRoaXMsICJvdXRwdXQiLCAmdGhpcy0+b3V0cHV0
LCBTb1NGVHJpZ2dlcjo6Z2V0Q2xhc3NUeXBlSWQoKSk7IHRoaXMtPm91dHB1dC5zZXRDb250YWlu
ZXIodGhpcyk7IH0gd2hpbGUoMCk7CiAgICBpc0J1aWx0SW4gPSAxOwp9CiMgOTMgIlNvVHJpZ2dl
ckFueS5jKysiClNvVHJpZ2dlckFueTo6flNvVHJpZ2dlckFueSgpCgoKewp9CiMgMTA4ICJTb1Ry
aWdnZXJBbnkuYysrIgp2b2lkClNvVHJpZ2dlckFueTo6ZXZhbHVhdGUoKQoKCnsKICAgIGlucHV0
MC5nZXRWYWx1ZSgpOwogICAgaW5wdXQxLmdldFZhbHVlKCk7CiAgICBpbnB1dDIuZ2V0VmFsdWUo
KTsKICAgIGlucHV0My5nZXRWYWx1ZSgpOwogICAgaW5wdXQ0LmdldFZhbHVlKCk7CiAgICBpbnB1
dDUuZ2V0VmFsdWUoKTsKICAgIGlucHV0Ni5nZXRWYWx1ZSgpOwogICAgaW5wdXQ3LmdldFZhbHVl
KCk7CiAgICBpbnB1dDguZ2V0VmFsdWUoKTsKICAgIGlucHV0OS5nZXRWYWx1ZSgpOwp9CiMgNTgg
IlNvRW5naW5lcy5jKysiIDIKIyAxICJTb1Vua25vd25FbmdpbmUuYysrIiAxCiMgNTkgIlNvVW5r
bm93bkVuZ2luZS5jKysiCiMgMSAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2luY2x1ZGUv
U29Vbmtub3duRW5naW5lLmgiIDEKIyA2NCAiLi4vLi4vLi4vLi4vLi4vbGliL2RhdGFiYXNlL2lu
Y2x1ZGUvU29Vbmtub3duRW5naW5lLmgiCmNsYXNzIFNvVW5rbm93bkVuZ2luZSA6IHB1YmxpYyBT
b0VuZ2luZSB7CgogICAgcHVibGljOiBzdGF0aWMgU29UeXBlIGdldENsYXNzVHlwZUlkKCkgeyBy
ZXR1cm4gY2xhc3NUeXBlSWQ7IH0gdmlydHVhbCBTb1R5cGUgZ2V0VHlwZUlkKCkgY29uc3Q7IHB1
YmxpYzogdmlydHVhbCBjb25zdCBTb0ZpZWxkRGF0YSAqIGdldEZpZWxkRGF0YSgpIGNvbnN0OyB2
aXJ0dWFsIGNvbnN0IFNvRW5naW5lT3V0cHV0RGF0YSAqIGdldE91dHB1dERhdGEoKSBjb25zdDsg
cHJvdGVjdGVkOiBzdGF0aWMgY29uc3QgU29GaWVsZERhdGEgKiogZ2V0SW5wdXREYXRhUHRyKCkg
eyByZXR1cm4gKGNvbnN0IFNvRmllbGREYXRhICoqKSZpbnB1dERhdGE7IH0gc3RhdGljIGNvbnN0
IFNvRW5naW5lT3V0cHV0RGF0YSAqKiBnZXRPdXRwdXREYXRhUHRyKCkgeyByZXR1cm4gKGNvbnN0
IFNvRW5naW5lT3V0cHV0RGF0YSAqKikmb3V0cHV0RGF0YTsgfSBwcml2YXRlOiBzdGF0aWMgU29U
eXBlIGNsYXNzVHlwZUlkOyBzdGF0aWMgU2JCb29sIGZpcnN0SW5zdGFuY2U7IHN0YXRpYyBTb0Zp
ZWxkRGF0YSAqaW5wdXREYXRhOyBzdGF0aWMgU29FbmdpbmVPdXRwdXREYXRhICpvdXRwdXREYXRh
OyBzdGF0aWMgY29uc3QgU29GaWVsZERhdGEgKipwYXJlbnRJbnB1dERhdGE7IHN0YXRpYyBjb25z
dCBTb0VuZ2luZU91dHB1dERhdGEgKipwYXJlbnRPdXRwdXREYXRhOyBwcml2YXRlOiBzdGF0aWMg
dm9pZCAqY3JlYXRlSW5zdGFuY2UoKTsKCiAgcHVibGljOgoKCiAgICBTb1Vua25vd25FbmdpbmUo
KTsKCiAgcHJvdGVjdGVkOgoKICAgIHZpcnR1YWwgY29uc3QgY2hhciAqZ2V0RmlsZUZvcm1hdE5h
bWUoKSBjb25zdDsKCgogICAgdmlydHVhbCB2b2lkIGNvcHlDb250ZW50cyhjb25zdCBTb0ZpZWxk
Q29udGFpbmVyICpmcm9tRkMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
YkJvb2wgY29weUNvbm5lY3Rpb25zKTsKCiAgcHVibGljOgoKICAgIHN0YXRpYyB2b2lkIGluaXRD
bGFzcygpOwogICAgdm9pZCBzZXRDbGFzc05hbWUoY29uc3QgY2hhciAqbmFtZSk7CgogIHByaXZh
dGU6CgoKICAgIFNvRmllbGREYXRhICppbnN0YW5jZUlucHV0RGF0YTsKICAgIFNvRW5naW5lT3V0
cHV0RGF0YSAqaW5zdGFuY2VPdXRwdXREYXRhOwoKCgogICAgY2hhciAqY2xhc3NOYW1lOwoKCiAg
ICB+U29Vbmtub3duRW5naW5lKCk7CgoKICAgIHZpcnR1YWwgdm9pZCBldmFsdWF0ZSgpOwp9Owoj
IDYwICJTb1Vua25vd25FbmdpbmUuYysrIiAyCgoKClNvVHlwZSBTb1Vua25vd25FbmdpbmU6OmNs
YXNzVHlwZUlkOyBTYkJvb2wgU29Vbmtub3duRW5naW5lOjpmaXJzdEluc3RhbmNlPTE7IFNvRW5n
aW5lT3V0cHV0RGF0YSAqU29Vbmtub3duRW5naW5lOjpvdXRwdXREYXRhOyBTb0ZpZWxkRGF0YSAq
IFNvVW5rbm93bkVuZ2luZTo6aW5wdXREYXRhOyBjb25zdCBTb0VuZ2luZU91dHB1dERhdGEgKipT
b1Vua25vd25FbmdpbmU6OnBhcmVudE91dHB1dERhdGE7IGNvbnN0IFNvRmllbGREYXRhICoqIFNv
VW5rbm93bkVuZ2luZTo6cGFyZW50SW5wdXREYXRhOwoKU29UeXBlClNvVW5rbm93bkVuZ2luZTo6
Z2V0VHlwZUlkKCkgY29uc3QKewogICAgcmV0dXJuIGNsYXNzVHlwZUlkOwp9CmNvbnN0IFNvRmll
bGREYXRhICoKU29Vbmtub3duRW5naW5lOjpnZXRGaWVsZERhdGEoKSBjb25zdAp7CiAgICByZXR1
cm4gaW5zdGFuY2VJbnB1dERhdGE7Cn0KY29uc3QgU29FbmdpbmVPdXRwdXREYXRhICoKU29Vbmtu
b3duRW5naW5lOjpnZXRPdXRwdXREYXRhKCkgY29uc3QKewogICAgcmV0dXJuIGluc3RhbmNlT3V0
cHV0RGF0YTsKfQp2b2lkICoKU29Vbmtub3duRW5naW5lOjpjcmVhdGVJbnN0YW5jZSgpCnsKICAg
IHJldHVybiAodm9pZCAqKShuZXcgU29Vbmtub3duRW5naW5lKTsKfQojIDkzICJTb1Vua25vd25F
bmdpbmUuYysrIgpTb1Vua25vd25FbmdpbmU6OlNvVW5rbm93bkVuZ2luZSgpCgoKewogICAgZG8g
eyB3aGlsZSgwKTsgaWYgKGlucHV0RGF0YSA9PSBfX251bGwpIHsgaW5wdXREYXRhID0gbmV3IFNv
RmllbGREYXRhKHBhcmVudElucHV0RGF0YSA/ICpwYXJlbnRJbnB1dERhdGEgOiBfX251bGwpOyBv
dXRwdXREYXRhID0gbmV3IFNvRW5naW5lT3V0cHV0RGF0YShwYXJlbnRPdXRwdXREYXRhID8gKnBh
cmVudE91dHB1dERhdGEgOiBfX251bGwpOyB9IGVsc2UgZmlyc3RJbnN0YW5jZSA9IDA7IGlzQnVp
bHRJbiA9IDA7IH0gd2hpbGUoMCk7CgogICAgY2xhc3NOYW1lID0gX19udWxsOwogICAgaW5zdGFu
Y2VJbnB1dERhdGEgPSBuZXcgU29GaWVsZERhdGEoaW5wdXREYXRhKTsKICAgIGluc3RhbmNlT3V0
cHV0RGF0YSA9IG5ldyBTb0VuZ2luZU91dHB1dERhdGEob3V0cHV0RGF0YSk7Cn0KIyAxMTEgIlNv
VW5rbm93bkVuZ2luZS5jKysiClNvVW5rbm93bkVuZ2luZTo6flNvVW5rbm93bkVuZ2luZSgpCgoK
ewoKCgoKCgogICAgU29GaWVsZExpc3QgZmllbGRMaXN0OwogICAgaW50IG51bUZpZWxkcyA9IGdl
dEZpZWxkcyhmaWVsZExpc3QpOwoKICAgIGZvciAoaW50IGk9MDsgaTxudW1GaWVsZHM7IGkrKykK
ICAgICAgICBkZWxldGUgZmllbGRMaXN0W2ldOwoKCiAgICBTb0VuZ2luZU91dHB1dExpc3Qgb3V0
cHV0TGlzdDsKICAgIGludCBudW1PdXRwdXRzID0gZ2V0T3V0cHV0cyhvdXRwdXRMaXN0KTsKCiAg
ICBmb3IgKGludCBqPTA7IGo8bnVtT3V0cHV0czsgaisrKQogICAgICAgIGRlbGV0ZSBvdXRwdXRM
aXN0W2pdOwoKICAgIGlmIChjbGFzc05hbWUpIGZyZWUoKHZvaWQgKiljbGFzc05hbWUpOwp9CiMg
MTQ0ICJTb1Vua25vd25FbmdpbmUuYysrIgp2b2lkClNvVW5rbm93bkVuZ2luZTo6c2V0Q2xhc3NO
YW1lKCBjb25zdCBjaGFyICpuYW1lICkKCgoKewogICAgY2xhc3NOYW1lID0gc3RyZHVwKCBuYW1l
ICk7Cn0KIyAxNjAgIlNvVW5rbm93bkVuZ2luZS5jKysiCnZvaWQKU29Vbmtub3duRW5naW5lOjpl
dmFsdWF0ZSgpCgoKewp9CiMgMTc0ICJTb1Vua25vd25FbmdpbmUuYysrIgp2b2lkClNvVW5rbm93
bkVuZ2luZTo6Y29weUNvbnRlbnRzKGNvbnN0IFNvRmllbGRDb250YWluZXIgKmZyb21GQywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU2JCb29sIGNvcHlDb25uZWN0aW9ucykKCgp7Cgog
ICAgY29uc3QgU29Vbmtub3duRW5naW5lICpmcm9tVW5rID0gKGNvbnN0IFNvVW5rbm93bkVuZ2lu
ZSAqKSBmcm9tRkM7CiAgICBzZXRDbGFzc05hbWUoZnJvbVVuay0+Y2xhc3NOYW1lKTsKIyAxOTIg
IlNvVW5rbm93bkVuZ2luZS5jKysiCiAgICBjb25zdCBTb0ZpZWxkRGF0YSAqZnJvbURhdGEgPSBm
cm9tVW5rLT5nZXRGaWVsZERhdGEoKTsKICAgIFNvRmllbGREYXRhICp0b0RhdGEgPSAoU29GaWVs
ZERhdGEgKikgZ2V0RmllbGREYXRhKCk7CiAgICBpbnQgaTsKICAgIGZvciAoaSA9IDA7IGkgPCBm
cm9tRGF0YS0+Z2V0TnVtRmllbGRzKCk7IGkrKykgewoKICAgICAgICBTb0ZpZWxkICpmcm9tRmll
bGQgPSBmcm9tRGF0YS0+Z2V0RmllbGQoZnJvbVVuaywgaSk7CiAgICAgICAgY29uc3QgU2JOYW1l
IGZpZWxkTmFtZSA9IGZyb21EYXRhLT5nZXRGaWVsZE5hbWUoaSk7CiAgICAgICAgU29UeXBlIGZp
ZWxkVHlwZSA9IGZyb21GaWVsZC0+Z2V0VHlwZUlkKCk7CiAgICAgICAgU29GaWVsZCAqdG9GaWVs
ZCA9IChTb0ZpZWxkICopIChmaWVsZFR5cGUuY3JlYXRlSW5zdGFuY2UoKSk7CgogICAgICAgIHRv
RmllbGQtPmVuYWJsZU5vdGlmeSgwKTsKICAgICAgICB0b0ZpZWxkLT5zZXRDb250YWluZXIodGhp
cyk7CiAgICAgICAgdG9GaWVsZC0+c2V0RGVmYXVsdCgxKTsKICAgICAgICB0b0ZpZWxkLT5lbmFi
bGVOb3RpZnkoMSk7CgogICAgICAgIHRvRGF0YS0+YWRkRmllbGQodGhpcywgZmllbGROYW1lLmdl
dFN0cmluZygpLCB0b0ZpZWxkKTsKCiAgICAgICAgdG9GaWVsZC0+c2V0Q29udGFpbmVyKHRoaXMp
OwogICAgICAgIHRvRmllbGQtPmNvcHlGcm9tKCpmcm9tRmllbGQpOwogICAgICAgIHRvRmllbGQt
PnNldElnbm9yZWQoZnJvbUZpZWxkLT5pc0lnbm9yZWQoKSk7CiAgICAgICAgdG9GaWVsZC0+c2V0
RGVmYXVsdChmcm9tRmllbGQtPmlzRGVmYXVsdCgpKTsKICAgICAgICB0b0ZpZWxkLT5maXhDb3B5
KGNvcHlDb25uZWN0aW9ucyk7CiAgICAgICAgaWYgKGZyb21GaWVsZC0+aXNDb25uZWN0ZWQoKSAm
JiBjb3B5Q29ubmVjdGlvbnMpCiAgICAgICAgICAgIHRvRmllbGQtPmNvcHlDb25uZWN0aW9uKGZy
b21GaWVsZCk7CiAgICB9CgoKICAgIFNvRW5naW5lT3V0cHV0RGF0YSAqdG9PdXREYXRhID0gKFNv
RW5naW5lT3V0cHV0RGF0YSAqKSBnZXRPdXRwdXREYXRhKCk7CgogICAgU29FbmdpbmVPdXRwdXRM
aXN0IG91dExpc3Q7CiAgICBmcm9tVW5rLT5nZXRPdXRwdXRzKG91dExpc3QpOwoKICAgIGZvcihp
ID0gMDsgaSA8IG91dExpc3QuZ2V0TGVuZ3RoKCk7IGkrKykgewogICAgICAgIFNvRW5naW5lT3V0
cHV0ICpuZXdPdXQgPSBuZXcgU29FbmdpbmVPdXRwdXQ7CiAgICAgICAgY29uc3QgU29UeXBlIG91
dFR5cGUgPSBvdXRMaXN0W2ldLT5nZXRDb25uZWN0aW9uVHlwZSgpOwogICAgICAgIFNiTmFtZSBv
dXROYW1lOwogICAgICAgIGdldE91dHB1dE5hbWUoIG91dExpc3RbaV0sIG91dE5hbWUgKTsKICAg
ICAgICB0b091dERhdGEtPmFkZE91dHB1dCh0aGlzLCBvdXROYW1lLmdldFN0cmluZygpLCBuZXdP
dXQsIG91dFR5cGUpOwogICAgICAgIG5ld091dC0+c2V0Q29udGFpbmVyKHRoaXMpOwogICAgfQp9
CiMgMjQyICJTb1Vua25vd25FbmdpbmUuYysrIgpjb25zdCBjaGFyICoKU29Vbmtub3duRW5naW5l
OjpnZXRGaWxlRm9ybWF0TmFtZSgpIGNvbnN0CgoKewogICAgcmV0dXJuIGNsYXNzTmFtZTsKfQoj
IDU5ICJTb0VuZ2luZXMuYysrIiAyCg==


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2002-11-05 21:06 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-11-05 13:06 preprocessor/8468: Segmentation Fault during compilation immediatly after preprocessing ben

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).