public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
From: pajones57@hotmail.com
To: gcc-gnats@gcc.gnu.org
Subject: c++/10874: ICE: unrecognized symbol type ""
Date: Mon, 19 May 2003 21:40:00 -0000	[thread overview]
Message-ID: <20030519213045.18582.qmail@sources.redhat.com> (raw)


>Number:         10874
>Category:       c++
>Synopsis:       ICE: unrecognized symbol type ""
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Mon May 19 21:36:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Paul Jones
>Release:        gcc version 3.2.2
>Organization:
>Environment:
gentoo rc1.4
>Description:
Configured with: /var/tmp/portage/gcc-3.2.2/work/gcc-3.2.2/configure --prefix=/usr --bindir=/usr/i586-pc-linux-gnu/gcc-bin/3.2 --includedir=/usr/lib/gcc-lib/i586-pc-linux-gnu/3.2.2/include --datadir=/usr/share/gcc-data/i586-pc-linux-gnu/3.2 --mandir=/usr/share/gcc-data/i586-pc-linux-gnu/3.2/man --infodir=/usr/share/gcc-data/i586-pc-linux-gnu/3.2/info --enable-shared --host=i586-pc-linux-gnu --target=i586-pc-linux-gnu --with-system-zlib --enable-languages=c,c++,ada,f77,objc,java --enable-threads=posix --enable-long-long --disable-checking --enable-cstdio=stdio --enable-clocale=generic --enable-__cxa_atexit --enable-version-specific-runtime-libs --with-gxx-include-dir=/usr/lib/gcc-lib/i586-pc-linux-gnu/3.2.2/include/g++-v3 --with-local-prefix=/usr/local --enable-shared --enable-nls --without-included-gettext
Thread model: posix
gcc version 3.2.2

This command line triggers the bug:
g++ -o nsDOMClassInfo.o -c -DOSTYPE=\"Linux2.4\" -DOSARCH=\"Linux\" -DOJI  -I../../../dist/include/xpcom -I../../../dist/include/string -I../../../dist/include/webbrwsr -I../../../dist/include/js -I../../../dist/include/widget -I../../../dist/include/gfx -I../../../dist/include/layout -I../../../dist/include/content -I../../../dist/include/caps -I../../../dist/include/docshell -I../../../dist/include/xpconnect -I../../../dist/include/pref -I../../../dist/include/oji -I../../../dist/include/necko -I../../../dist/include/java -I../../../dist/include/locale -I../../../dist/include/uriloader -I../../../dist/include/sidebar -I../../../dist/include/xuldoc -I../../../dist/include/webshell -I../../../dist/include/view
-I../../../dist/include/uconv -I../../../dist/include/shistory -I../../../dist/include/plugin -I../../../dist/include/windowwatcher -I../../../dist/include/htmlparser -I../../../dist/include/chardet -I../../../dist/include/find -I../../../dist/include/appshell -I../../../dist/include/intl -I../../../dist/include/dom -I../../../dist/include -I/var/tmp/portage/mozilla-1.3-r1/work/mozilla/dist/include/nspr      -I/usr/X11R6/include   -fPIC  -I/usr/X11R6/include -fno-rtti -fno-exceptions -Wall -Wconversion -Wpointer-arith -Wcast-align -Woverloaded-virtual -Wsynth -Wno-ctor-dtor-privacy -Wno-long-long -march=pentium2 -pipe -Wno-deprecated -fshort-wchar -pthread -pipe  -DNDEBUG -DTRIMMED -ffunction-sections -O2 -I. -I./../build  -I/usr/X11R6/include -DMOZILLA_CLIENT -include ../../../mozilla-config.h -Wp,-MD,.deps/nsDOMClassInfo.pp nsDOMClassInfo.cpp

Error Output:
{standard input}: Assembler messages:
{standard input}:6542: Warning: end of file not at end of a line; newline inserted
{standard input}:7087: Error: unrecognized symbol type ""
g++: Internal error: Terminated (program cc1plus)
Please submit a full bug report.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
make[4]: *** [nsDOMClassInfo.o] Error 1
make[4]: *** Deleting file `nsDOMClassInfo.o'




>How-To-Repeat:
emerge mozilla-1.3 under gentoo
Does not crash when only the one file is compiled
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="nsDOMClassInfo.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="nsDOMClassInfo.ii"

IyAxICJuc0RPTUNsYXNzSW5mby5jcHAiCiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZCBs
aW5lPiIKIyAxICIuLi8uLi8uLi9tb3ppbGxhLWNvbmZpZy5oIiAxCiMgMiAiPGNvbW1hbmQgbGlu
ZT4iIDIKIyAxICJuc0RPTUNsYXNzSW5mby5jcHAiCiMgNDAgIm5zRE9NQ2xhc3NJbmZvLmNwcCIK
IyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNjb3JlLmgiIDEKIyA0MyAiLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL3hwY29tL25zY29yZS5oIgojIDEgIi92YXIvdG1wL3BvcnRhZ2UvbW96
aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIgMQoj
IDU1ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9wcnR5cGVzLmgiCiMgMSAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1y
MS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJjcHVjZmcuaCIgMQojIDU2ICIvdmFy
L3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw
ci9wcnR5cGVzLmgiIDIKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUv
My4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTUxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYt
cGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiBpbnQgcHRyZGlm
Zl90OwojIDIxMyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNs
dWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKIyA1OSAiL3Zhci90
bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv
cHJ0eXBlcy5oIiAyCiMgMjUyICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsv
bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCmV4dGVybiAiQyIgewojIDI2MiAi
L3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRl
L25zcHIvcHJ0eXBlcy5oIgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgUFJVaW50ODsKIyAyNzYgIi92
YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3BydHlwZXMuaCIKdHlwZWRlZiBzaWduZWQgY2hhciBQUkludDg7CiMgMzAxICIvdmFyL3Rt
cC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w
cnR5cGVzLmgiCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgUFJVaW50MTY7CnR5cGVkZWYgc2hvcnQg
UFJJbnQxNjsKIyAzMjYgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3pp
bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRlZiB1bnNpZ25lZCBpbnQgUFJV
aW50MzI7CnR5cGVkZWYgaW50IFBSSW50MzI7CiMgMzcyICIvdmFyL3RtcC9wb3J0YWdlL21vemls
bGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCnR5cGVk
ZWYgbG9uZyBsb25nIFBSSW50NjQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIFBSVWludDY0
OwojIDM5NiAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIgp0eXBlZGVmIGludCBQUkludG47CnR5cGVkZWYgdW5z
aWduZWQgaW50IFBSVWludG47CiMgNDA3ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIx
L3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCnR5cGVkZWYgZG91Ymxl
IFBSRmxvYXQ2NDsKCgoKCgoKdHlwZWRlZiBzaXplX3QgUFJTaXplOwoKCgoKCgoKdHlwZWRlZiBQ
UkludDMyIFBST2Zmc2V0MzI7CnR5cGVkZWYgUFJJbnQ2NCBQUk9mZnNldDY0OwoKCgoKCgoKdHlw
ZWRlZiBwdHJkaWZmX3QgUFJQdHJkaWZmOwoKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFBS
VXB0cmRpZmY7CiMgNDQ5ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96
aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCnR5cGVkZWYgUFJJbnRuIFBSQm9vbDsK
IyA0NTkgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3Qv
aW5jbHVkZS9uc3ByL3BydHlwZXMuaCIKdHlwZWRlZiBQUlVpbnQ4IFBSUGFja2VkQm9vbDsKCgoK
Cgp0eXBlZGVmIGVudW0geyBQUl9GQUlMVVJFID0gLTEsIFBSX1NVQ0NFU1MgPSAwIH0gUFJTdGF0
dXM7CiMgNDkyICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wcnR5cGVzLmgiCnR5cGVkZWYgbG9uZyBQUldvcmQ7CnR5cGVkZWYg
dW5zaWduZWQgbG9uZyBQUlV3b3JkOwojIDUzNCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEu
My1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0eXBlcy5oIgojIDEgIi92YXIv
dG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By
L29ic29sZXRlL3Byb3R5cGVzLmgiIDEKIyA0NSAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEu
My1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvb2Jzb2xldGUvcHJvdHlwZXMuaCIK
dHlwZWRlZiBQUlVpbnRuIHVpbnRuOwoKdHlwZWRlZiBQUkludG4gaW50bjsKIyA4MyAiL3Zhci90
bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv
b2Jzb2xldGUvcHJvdHlwZXMuaCIKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwoj
IDI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVy
ZXMuaCIgMSAzCiMgMjkxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9zeXMvY2RlZnMuaCIgMSAzCiMgMjkyICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAz
CiMgMzIwICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nbnUv
c3R1YnMuaCIgMSAzCiMgMzIxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMjcgIi91
c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNs
dWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMK
IyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3Rk
ZGVmLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVm
IHVuc2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0
Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191
X2xvbmc7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3Vf
cXVhZF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKIyA0
OSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50
OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9y
dCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0
eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQz
Ml90OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRf
dDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRf
dDsKCnR5cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rl
dl90Owp0eXBlZGVmIF9fdV9pbnQgX191aWRfdDsKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CnR5
cGVkZWYgX191X2xvbmcgX19pbm9fdDsKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90Owp0eXBlZGVm
IF9fdV9pbnQgX19ubGlua190Owp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgX19x
dWFkX3QgX19sb2ZmX3Q7CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgaW50IF9fc3NpemVf
dDsKdHlwZWRlZiBfX3VfbG9uZyBfX3JsaW1fdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fcmxpbTY0
X3Q7CnR5cGVkZWYgX191X2ludCBfX2lkX3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBf
X3ZhbFsyXTsKICB9IF9fZnNpZF90OwoKCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsKdHlwZWRlZiBj
aGFyICpfX2NhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgdW5zaWdu
ZWQgaW50IF9fdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N1c2Vjb25kc190Owp0eXBl
ZGVmIGxvbmcgaW50IF9fc3dibGtfdDsKCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKCnR5
cGVkZWYgaW50IF9fY2xvY2tpZF90OwoKCnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgoKCgoKdHlw
ZWRlZiBpbnQgX19rZXlfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19waWRf
dDsKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa3NpemVfdDsKCgoKCnR5cGVkZWYgbG9uZyBpbnQg
X19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3Vf
bG9uZyBfX2ZzYmxrY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsKCgp0
eXBlZGVmIF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNmaWxj
bnQ2NF90OwoKCnR5cGVkZWYgX191X3F1YWRfdCBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZf
dCBfX29mZjY0X3Q7CgoKdHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5z
aWduZWQgbG9uZyBpbnQgX190X3VzY2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90OwoK
CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fc29ja2xlbl90OwoKCgoKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0
eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCiMgNjggIi91c3Iv
aW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7CiAgICBpbnQg
X19zY2hlZF9wcmlvcml0eTsKICB9OwojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlw
ZXMuaCIgMiAzCgoKc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1
czsKICBpbnQgX19zcGlubG9jazsKCn07CgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2Rlc2Ny
X3N0cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2F0
dHJfcwp7CiAgaW50IF9fZGV0YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0
IF9fc2NoZWRfcGFyYW0gX19zY2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBpbnQg
X19zY29wZTsKICBzaXplX3QgX19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsKICB2
b2lkICpfX3N0YWNrYWRkcjsKICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7
CgoKCnR5cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7
CiAgX3B0aHJlYWRfZGVzY3IgX19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5cGVk
ZWYgc3RydWN0CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50
IF9fbV9yZXNlcnZlZDsKICBpbnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25l
cjsKICBpbnQgX19tX2tpbmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOwp9
IHB0aHJlYWRfbXV0ZXhfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsK
fSBwdGhyZWFkX211dGV4YXR0cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgoK
CnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX3J3bG9ja190CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFz
dGxvY2sgX19yd19sb2NrOwogIGludCBfX3J3X3JlYWRlcnM7CiAgX3B0aHJlYWRfZGVzY3IgX19y
d193cml0ZXI7CiAgX3B0aHJlYWRfZGVzY3IgX19yd19yZWFkX3dhaXRpbmc7CiAgX3B0aHJlYWRf
ZGVzY3IgX19yd193cml0ZV93YWl0aW5nOwogIGludCBfX3J3X2tpbmQ7CiAgaW50IF9fcndfcHNo
YXJlZDsKfSBwdGhyZWFkX3J3bG9ja190OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbG9j
a2tpbmQ7CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX3J3bG9ja2F0dHJfdDsKCgoKCnR5cGVk
ZWYgdm9sYXRpbGUgaW50IHB0aHJlYWRfc3BpbmxvY2tfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAg
c3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fYmFfbG9jazsKICBpbnQgX19iYV9yZXF1aXJlZDsK
ICBpbnQgX19iYV9wcmVzZW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fYmFfd2FpdGluZzsKfSBwdGhy
ZWFkX2JhcnJpZXJfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhy
ZWFkX2JhcnJpZXJhdHRyX3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFk
X3Q7CiMgMTQ0ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKIyAzMSAiL3Vzci9pbmNs
dWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKdHlwZWRlZiBfX3VfY2hhciB1X2NoYXI7CnR5cGVkZWYg
X191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1X2ludDsKdHlwZWRlZiBfX3VfbG9u
ZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgdV9x
dWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCgoKdHlwZWRlZiBfX2xvZmZfdCBsb2Zm
X3Q7CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKCgoKCgoKdHlwZWRlZiBfX2lubzY0X3QgaW5v
NjRfdDsKCgoKCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoKCnR5cGVkZWYgX19naWRfdCBnaWRf
dDsKCgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoKCgoKdHlwZWRlZiBfX25saW5rX3Qgbmxp
bmtfdDsKCgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsKCgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2Zm
X3Q7CgoKCgoKCnR5cGVkZWYgX19vZmY2NF90IG9mZjY0X3Q7CgoKCgp0eXBlZGVmIF9fcGlkX3Qg
cGlkX3Q7CgoKCgp0eXBlZGVmIF9faWRfdCBpZF90OwoKCgoKdHlwZWRlZiBfX3NzaXplX3Qgc3Np
emVfdDsKCgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBj
YWRkcl90OwoKCgoKCnR5cGVkZWYgX19rZXlfdCBrZXlfdDsKIyAxMzIgIi91c3IvaW5jbHVkZS9z
eXMvdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDU4ICIvdXNyL2lu
Y2x1ZGUvdGltZS5oIiAzCgoKdHlwZWRlZiBfX2Nsb2NrX3QgY2xvY2tfdDsKCgoKIyA3NCAiL3Vz
ci9pbmNsdWRlL3RpbWUuaCIgMwoKCnR5cGVkZWYgX190aW1lX3QgdGltZV90OwoKCgojIDkyICIv
dXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYgX19jbG9ja2lkX3QgY2xvY2tpZF90OwojIDEw
NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fdGltZXJfdCB0aW1lcl90OwojIDEz
MyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKdHlwZWRlZiBfX3VzZWNvbmRzX3Qg
dXNlY29uZHNfdDsKCgoKdHlwZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoKCgoKCiMg
MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRl
Zi5oIiAxIDMKIyAxNDcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYg
dW5zaWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9y
dDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKIyAxOTAgIi91c3IvaW5jbHVkZS9zeXMvdHlw
ZXMuaCIgMwp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJ
X18pKSk7CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJ
X18pKSk7CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJ
X18pKSk7CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJ
X18pKSk7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9f
bW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJp
YnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQz
Ml90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVk
IGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0eXBl
ZGVmIGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18pKSk7
CiMgMjEyICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZW5k
aWFuLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMg
MjEzICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5
cy9zZWxlY3QuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9zeXMvc2Vs
ZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMwojIDIzICIv
dXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMwp0eXBlZGVmIGludCBfX3NpZ19hdG9taWNfdDsK
CgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQgbG9uZyBpbnQgX192YWxbKDEwMjQg
LyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSldOwogIH0gX19zaWdzZXRfdDsKIyAz
NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKCnR5cGVkZWYgX19zaWdzZXRfdCBz
aWdzZXRfdDsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDExNiAiL3Vzci9p
bmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7
CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07CiMgNDUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0
LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDY3ICIvdXNyL2lu
Y2x1ZGUvYml0cy90aW1lLmgiIDMKc3RydWN0IHRpbWV2YWwKICB7CiAgICBfX3RpbWVfdCB0dl9z
ZWM7CiAgICBfX3N1c2Vjb25kc190IHR2X3VzZWM7CiAgfTsKIyA0NyAiL3Vzci9pbmNsdWRlL3N5
cy9zZWxlY3QuaCIgMiAzCiMgNTUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKdHlwZWRl
ZiBsb25nIGludCBfX2ZkX21hc2s7CiMgNjcgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMK
dHlwZWRlZiBzdHJ1Y3QKICB7CgoKCiAgICBfX2ZkX21hc2sgZmRzX2JpdHNbMTAyNCAvICg4ICog
c2l6ZW9mIChfX2ZkX21hc2spKV07CgoKCgoKICB9IGZkX3NldDsKCgoKCgoKdHlwZWRlZiBfX2Zk
X21hc2sgZmRfbWFzazsKIyA5OSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwpleHRlcm4g
IkMiIHsKCgoKCgoKZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0
cmljdCBfX3JlYWRmZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193
cml0ZWZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZk
cywKICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91
dCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQg
Kl9fcmVzdHJpY3QgX19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0
cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBf
X2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9f
cmVzdHJpY3QgX190aW1lb3V0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fc2lnc2V0X3Qg
Kl9fcmVzdHJpY3QgX19zaWdtYXNrKSB0aHJvdyAoKTsKCgp9CiMgMjE2ICIvdXNyL2luY2x1ZGUv
c3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMSAz
CiMgMjE5ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgoKdHlwZWRlZiBfX2Jsa3Np
emVfdCBibGtzaXplX3Q7CgoKCgoKCnR5cGVkZWYgX19ibGtjbnRfdCBibGtjbnRfdDsKCgoKdHlw
ZWRlZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNm
aWxjbnRfdDsKIyAyNTcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fYmxr
Y250NjRfdCBibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNibGtjbnQ2NF90IGZzYmxrY250NjRfdDsK
dHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNudDY0X3Q7CgoKfQojIDg0ICIvdmFyL3RtcC9w
b3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9vYnNv
bGV0ZS9wcm90eXBlcy5oIiAyCiMgMTA1ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIx
L3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9vYnNvbGV0ZS9wcm90eXBlcy5oIgp0eXBl
ZGVmIFBSVWludDY0IHVpbnQ2NDsKIyAxMTQgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMt
cjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL29ic29sZXRlL3Byb3R5cGVzLmgiCnR5
cGVkZWYgUFJVaW50MzIgdWludDMyOwojIDEyNSAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEu
My1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvb2Jzb2xldGUvcHJvdHlwZXMuaCIK
dHlwZWRlZiBQUlVpbnQxNiB1aW50MTY7CgoKCgoKCgp0eXBlZGVmIFBSVWludDggdWludDg7CiMg
MTQyICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9vYnNvbGV0ZS9wcm90eXBlcy5oIgp0eXBlZGVmIFBSSW50NjQgaW50NjQ7CiMg
MTU0ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9vYnNvbGV0ZS9wcm90eXBlcy5oIgp0eXBlZGVmIFBSSW50MzIgaW50MzI7CiMg
MTY4ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9vYnNvbGV0ZS9wcm90eXBlcy5oIgp0eXBlZGVmIFBSSW50MTYgaW50MTY7CiMg
MTc4ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2lu
Y2x1ZGUvbnNwci9vYnNvbGV0ZS9wcm90eXBlcy5oIgp0eXBlZGVmIFBSSW50OCBpbnQ4OwoKCnR5
cGVkZWYgUFJGbG9hdDY0IGZsb2F0NjQ7CnR5cGVkZWYgUFJVcHRyZGlmZiB1cHRyZGlmZl90Owp0
eXBlZGVmIFBSVXdvcmQgdXByd29yZF90Owp0eXBlZGVmIFBSV29yZCBwcndvcmRfdDsKIyA1MzUg
Ii92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVk
ZS9uc3ByL3BydHlwZXMuaCIgMgoKCgoKCn0KIyA0NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw
Y29tL25zY29yZS5oIiAyCiMgMTQ5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNjb3Jl
LmgiCnR5cGVkZWYgUFJVaW50MzIgbnNyZXN1bHQ7CgoKCgoKCiMgMSAiLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL3hwY29tL25zRXJyb3IuaCIgMQojIDI5NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw
Y29tL25zRXJyb3IuaCIKZXh0ZXJuIG5zcmVzdWx0Ck5TX0Vycm9yQWNjb3JkaW5nVG9OU1BSKCk7
CiMgMTU3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNjb3JlLmgiIDIKIyAyMjQgIi4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc2NvcmUuaCIKICAgIHR5cGVkZWYgUFJVaW50MTYg
UFJVbmljaGFyOwojIDQxICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICJuc0RPTUNsYXNzSW5m
by5oIiAxCiMgNDMgIm5zRE9NQ2xhc3NJbmZvLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L2RvbS9uc0lET01DbGFzc0luZm8uaCIgMQojIDQzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9t
L25zSURPTUNsYXNzSW5mby5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lD
bGFzc0luZm8uaCIgMQojIDEwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ2xhc3NJ
bmZvLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzLmgiIDEK
IyAxMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzLmgiCiMgMSAiLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zcm9vdGlkbC5oIiAxCiMgMTIgIi4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS94cGNvbS9uc3Jvb3RpZGwuaCIKIyAxICIvdmFyL3RtcC9wb3J0YWdlL21vemls
bGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIgMQojIDQ4
ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1
ZGUvbnNwci9wcnRpbWUuaCIKIyAxICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dv
cmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxvbmcuaCIgMQojIDQ4ICIvdmFyL3RtcC9w
b3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmxv
bmcuaCIKZXh0ZXJuICJDIiB7CiMgNjYgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEv
d29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9uZy5oIgpleHRlcm4gUFJJbnQ2NCBM
TF9NYXhJbnQodm9pZCk7CmV4dGVybiBQUkludDY0IExMX01pbkludCh2b2lkKTsKZXh0ZXJuIFBS
SW50NjQgTExfWmVybyh2b2lkKTsKIyA0MjMgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMt
cjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9uZy5oIgp9CiMgNDkgIi92YXIv
dG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By
L3BydGltZS5oIiAyCgpleHRlcm4gIkMiIHsKIyA3NyAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxh
LTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiCnR5cGVkZWYg
UFJJbnQ2NCBQUlRpbWU7CgoKCgoKCnR5cGVkZWYgc3RydWN0IFBSVGltZVBhcmFtZXRlcnMgewog
ICAgUFJJbnQzMiB0cF9nbXRfb2Zmc2V0OwogICAgUFJJbnQzMiB0cF9kc3Rfb2Zmc2V0Owp9IFBS
VGltZVBhcmFtZXRlcnM7CiMgMTEyICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dv
cmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIKdHlwZWRlZiBzdHJ1Y3QgUFJF
eHBsb2RlZFRpbWUgewogICAgUFJJbnQzMiB0bV91c2VjOwogICAgUFJJbnQzMiB0bV9zZWM7Cgog
ICAgUFJJbnQzMiB0bV9taW47CiAgICBQUkludDMyIHRtX2hvdXI7CiAgICBQUkludDMyIHRtX21k
YXk7CgogICAgUFJJbnQzMiB0bV9tb250aDsKICAgIFBSSW50MTYgdG1feWVhcjsKCgogICAgUFJJ
bnQ4IHRtX3dkYXk7CgogICAgUFJJbnQxNiB0bV95ZGF5OwoKCiAgICBQUlRpbWVQYXJhbWV0ZXJz
IHRtX3BhcmFtczsKfSBQUkV4cGxvZGVkVGltZTsKIyAxNTUgIi92YXIvdG1wL3BvcnRhZ2UvbW96
aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BydGltZS5oIgp0eXBl
ZGVmIFBSVGltZVBhcmFtZXRlcnMgKCAqUFJUaW1lUGFyYW1GbikoY29uc3QgUFJFeHBsb2RlZFRp
bWUgKmdtdCk7CiMgMTc3ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96
aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcnRpbWUuaCIKZXh0ZXJuIFBSVGltZQoKUFJfTm93KHZv
aWQpOwojIDE5MSAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEv
ZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiCmV4dGVybiB2b2lkIFBSX0V4cGxvZGVUaW1lKAog
ICAgUFJUaW1lIHVzZWNzLCBQUlRpbWVQYXJhbUZuIHBhcmFtcywgUFJFeHBsb2RlZFRpbWUgKmV4
cGxvZGVkKTsKCgoKCgpleHRlcm4gUFJUaW1lCgpQUl9JbXBsb2RlVGltZShjb25zdCBQUkV4cGxv
ZGVkVGltZSAqZXhwbG9kZWQpOwojIDIxNCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1y
MS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiCmV4dGVybiB2b2lkIFBS
X05vcm1hbGl6ZVRpbWUoCiAgICBQUkV4cGxvZGVkVGltZSAqZXhwbG9kZWQsIFBSVGltZVBhcmFt
Rm4gcGFyYW1zKTsKCgoKCgoKZXh0ZXJuIFBSVGltZVBhcmFtZXRlcnMgUFJfTG9jYWxUaW1lUGFy
YW1ldGVycyhjb25zdCBQUkV4cGxvZGVkVGltZSAqZ210KTsKCgpleHRlcm4gUFJUaW1lUGFyYW1l
dGVycyBQUl9HTVRQYXJhbWV0ZXJzKGNvbnN0IFBSRXhwbG9kZWRUaW1lICpnbXQpOwoKCgoKCmV4
dGVybiBQUlRpbWVQYXJhbWV0ZXJzIFBSX1VTUGFjaWZpY1RpbWVQYXJhbWV0ZXJzKGNvbnN0IFBS
RXhwbG9kZWRUaW1lICpnbXQpOwojIDI2NCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1y
MS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJ0aW1lLmgiCmV4dGVybiBQUlN0YXR1
cyBQUl9QYXJzZVRpbWVTdHJpbmcgKAogICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZywKICAgICAg
ICBQUkJvb2wgZGVmYXVsdF90b19nbXQsCiAgICAgICAgUFJUaW1lICpyZXN1bHQpOwojIDI4MSAi
L3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRl
L25zcHIvcHJ0aW1lLmgiCmV4dGVybiBQUlVpbnQzMiBQUl9Gb3JtYXRUaW1lKGNoYXIgKmJ1Ziwg
aW50IGJ1ZmxlbiwgY29uc3QgY2hhciAqZm10LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUFJFeHBsb2RlZFRpbWUgKnRtKTsKCgoKCmV4dGVybiBQUlVp
bnQzMgpQUl9Gb3JtYXRUaW1lVVNFbmdsaXNoKCBjaGFyKiBidWYsIFBSVWludDMyIGJ1ZlNpemUs
CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZvcm1hdCwgY29uc3QgUFJFeHBs
b2RlZFRpbWUqIHRtICk7CgoKCn0KIyAxMyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25z
cm9vdGlkbC5oIiAyCgoKCmNsYXNzIG5zQVN0cmluZzsKY2xhc3MgbnNBQ1N0cmluZzsKIyAxMSAi
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzLmgiIDIKIyAxMTYgIi4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0cy5oIgojIDEgIi4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c0Jhc2UuaCIgMQojIDQ0ICIuLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUveHBjb20vbnNJU3VwcG9ydHNCYXNlLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L3hwY29tL25zSUQuaCIgMQojIDQxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJRC5o
IgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9zdHJp
bmcuaCIgMwpleHRlcm4gIkMiIHsKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxp
bnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3N0
cmluZy5oIiAyIDMKCgoKCmV4dGVybiB2b2lkICptZW1jcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19k
ZXN0LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMs
IHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICptZW1tb3ZlICh2b2lkICpfX2Rl
c3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoK
CmV4dGVybiB2b2lkICptZW1jY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB2
b2lkICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgaW50IF9fYywgc2l6
ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqbWVtc2V0ICh2b2lkICpf
X3MsIGludCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWVtY21wIChf
X2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtY2hy
IChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIHZvaWQgKnJhd21lbWNociAo
X19jb25zdCB2b2lkICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1yY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9f
Yywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpz
dHJuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0
ZXJuIGNoYXIgKnN0cmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJuY2F0IChj
aGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLAog
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBz
dHJjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBzdHJuY21wIChfX2Nv
bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cmNvbGwgKF9f
Y29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtIChjaGFyICpfX3Jl
c3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgojIDEgIi91c3IvaW5jbHVk
ZS94bG9jYWxlLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAzCnR5cGVkZWYg
c3RydWN0IF9fbG9jYWxlX3N0cnVjdAp7CgogIHN0cnVjdCBsb2NhbGVfZGF0YSAqX19sb2NhbGVz
WzEzXTsKCgogIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwogIGNvbnN0IGlu
dCAqX19jdHlwZV90b2xvd2VyOwogIGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVyOwoKCiAgY29u
c3QgY2hhciAqX19uYW1lc1sxM107Cn0gKl9fbG9jYWxlX3Q7CiMgMTE1ICIvdXNyL2luY2x1ZGUv
c3RyaW5nLmgiIDIgMwoKCmV4dGVybiBpbnQgc3RyY29sbF9sIChfX2NvbnN0IGNoYXIgKl9fczEs
IF9fY29uc3QgY2hhciAqX19zMiwgX19sb2NhbGVfdCBfX2wpCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm1fbCAoY2hhciAqX19k
ZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3JjLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAg
ICAgICAgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmR1cCAo
X19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7
CgoKCgoKCmV4dGVybiBjaGFyICpzdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXpl
X3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CiMgMTYw
ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKCgpleHRlcm4gY2hhciAqc3RyY2hyIChfX2NvbnN0
IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CgpleHRlcm4gY2hhciAqc3RycmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJjaHJu
dWwgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9fY29uc3QgY2hhciAqX19z
LCBfX2NvbnN0IGNoYXIgKl9fcmVqZWN0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgc3Ryc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19j
b25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl
X18pKTsKCmV4dGVybiBjaGFyICpzdHJwYnJrIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBj
aGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CmV4dGVybiBjaGFyICpzdHJzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBj
aGFyICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CgoKZXh0ZXJuIGNoYXIgKnN0cnRvayAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX2RlbGltKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKl9f
c3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpz
dHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9w
dHIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNhc2VzdHIgKF9fY29uc3QgY2hhciAq
X19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgoKZXh0ZXJuIHZvaWQgKm1lbW1lbSAoX19jb25zdCB2
b2lkICpfX2hheXN0YWNrLCBzaXplX3QgX19oYXlzdGFja2xlbiwKICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCB2b2lkICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlbGVuKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gdm9pZCAqX19tZW1wY3B5
ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0ZXJuIHZv
aWQgKm1lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RybmxlbiAoX19j
b25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbWF4bGVuKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50IF9f
ZXJybnVtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJlcnJvcl9yIChpbnQgX19lcnJu
dW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZv
aWQgX19iemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZv
aWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAqX19zcmMsIHZvaWQgKl9fZGVzdCwgc2l6ZV90IF9fbikg
dGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBiY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9p
ZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl
X18pKTsKCgpleHRlcm4gY2hhciAqaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqcmluZGV4
IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
cHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgZmZzIChpbnQgX19pKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGZmc2wgKGxvbmcgaW50IF9fbCkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRlcm4g
aW50IGZmc2xsIChsb25nIGxvbmcgaW50IF9fbGwpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBzdHJjYXNlY21wIChfX2NvbnN0IGNoYXIg
Kl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEs
IF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gaW50IHN0cmNhc2VjbXBfbCAoX19jb25zdCBj
aGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICBf
X2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4
dGVybiBpbnQgc3RybmNhc2VjbXBfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIg
Kl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBf
X2xvYykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRl
cm4gY2hhciAqc3Ryc2VwIChjaGFyICoqX19yZXN0cmljdCBfX3N0cmluZ3AsCiAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBpbnQgc3RydmVyc2NtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIg
Kl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJu
IGNoYXIgKnN0cnNpZ25hbCAoaW50IF9fc2lnKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqX19z
dHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19zcmMpCiAgICAgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpzdHBjcHkgKGNoYXIgKl9fcmVzdHJp
Y3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7
CgoKCmV4dGVybiBjaGFyICpfX3N0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVf
dCBfX24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBf
X2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z
cmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJmcnkgKGNoYXIgKl9f
c3RyaW5nKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqbWVtZnJvYiAodm9pZCAqX19zLCBzaXpl
X3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmJhc2VuYW1lIChfX2NvbnN0IGNo
YXIgKl9fZmlsZW5hbWUpIHRocm93ICgpOwojIDM3OSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAz
Cn0KIyA0MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUQuaCIgMgojIDUyICIuLi8u
Li8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJRC5oIgpzdHJ1Y3QgbnNJRCB7CgoKCgoKICBQUlVp
bnQzMiBtMDsKICBQUlVpbnQxNiBtMTsKICBQUlVpbnQxNiBtMjsKICBQUlVpbnQ4IG0zWzhdOwoj
IDc0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJRC5oIgogIGlubGluZSBQUkJvb2wg
RXF1YWxzKGNvbnN0IG5zSUQmIG90aGVyKSBjb25zdCB7CgoKCgoKCgogICAgcmV0dXJuIChQUkJv
b2wpCiAgICAgICgoKChQUlVpbnQzMiopICZtMClbMF0gPT0gKChQUlVpbnQzMiopICZvdGhlci5t
MClbMF0pICYmCiAgICAgICAoKChQUlVpbnQzMiopICZtMClbMV0gPT0gKChQUlVpbnQzMiopICZv
dGhlci5tMClbMV0pICYmCiAgICAgICAoKChQUlVpbnQzMiopICZtMClbMl0gPT0gKChQUlVpbnQz
MiopICZvdGhlci5tMClbMl0pICYmCiAgICAgICAoKChQUlVpbnQzMiopICZtMClbM10gPT0gKChQ
UlVpbnQzMiopICZvdGhlci5tMClbM10pKTsKICB9CgoKCgoKICBQUkJvb2wgUGFyc2UoY29uc3Qg
Y2hhciAqYUlEU3RyKTsKCgoKCgogIGNoYXIqIFRvU3RyaW5nKCkgY29uc3Q7Cgp9OwoKCgoKCnR5
cGVkZWYgbnNJRCBuc0NJRDsKIyAxMjAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lE
LmgiCnR5cGVkZWYgbnNJRCBuc0lJRDsKIyA0NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29t
L25zSVN1cHBvcnRzQmFzZS5oIiAyCiMgNzEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9u
c0lTdXBwb3J0c0Jhc2UuaCIKdHlwZWRlZiBQUlVpbnQzMiBuc3JlZmNudDsKIyA4MCAiLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzQmFzZS5oIgpjbGFzcyBuc0lTdXBwb3J0
cyB7CnB1YmxpYzoKIyA5NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRz
QmFzZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUXVlcnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJ
SUQsIHZvaWQqKiBhSW5zdGFuY2VQdHIpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3JlZmNudCBB
ZGRSZWYodm9pZCkgPSAwOwojIDExNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1
cHBvcnRzQmFzZS5oIgogIHZpcnR1YWwgbnNyZWZjbnQgUmVsZWFzZSh2b2lkKSA9IDA7CgoKfTsK
IyAxMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0cy5oIiAyCgojIDEg
Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c1V0aWxzLmgiIDEKIyA1NyAi
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzVXRpbHMuaCIKIyAxICIuLi8u
Li8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNEZWJ1Zy5oIiAxCiMgNjIgIi4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS94cGNvbS9uc0RlYnVnLmgiCmNsYXNzIG5zRGVidWcgewpwdWJsaWM6CgoKCgoKCiAg
c3RhdGljIHZvaWQgQWJvcnRJZkZhbHNlKGNvbnN0IGNoYXIqIGFTdHIsIGNvbnN0IGNoYXIqIGFF
eHByLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZpbGUs
IFBSSW50biBhTGluZSk7CiMgODAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0RlYnVn
LmgiCiAgc3RhdGljIHZvaWQgV2FybklmRmFsc2UoY29uc3QgY2hhciogYVN0ciwgY29uc3QgY2hh
ciogYUV4cHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFG
aWxlLCBQUkludG4gYUxpbmUpOwojIDk4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNE
ZWJ1Zy5oIgogIHN0YXRpYyB2b2lkIFNldFdhcm5pbmdNZXNzYWdlQm94RW5hYmxlKFBSQm9vbCBh
T25PZmYpOwoKCgoKICBzdGF0aWMgUFJCb29sIEdldFdhcm5pbmdNZXNzYWdlQm94RW5hYmxlKHZv
aWQpOwojIDExNiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zRGVidWcuaCIKICBzdGF0
aWMgdm9pZCBBYm9ydChjb25zdCBjaGFyKiBhRmlsZSwgUFJJbnRuIGFMaW5lKTsKCgoKCiAgc3Rh
dGljIHZvaWQgQnJlYWsoY29uc3QgY2hhciogYUZpbGUsIFBSSW50biBhTGluZSk7CgoKCgogIHN0
YXRpYyB2b2lkIFByZUNvbmRpdGlvbihjb25zdCBjaGFyKiBhU3RyLCBjb25zdCBjaGFyKiBhRXhw
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxlLCBQ
UkludG4gYUxpbmUpOwoKCgoKICBzdGF0aWMgdm9pZCBQb3N0Q29uZGl0aW9uKGNvbnN0IGNoYXIq
IGFTdHIsIGNvbnN0IGNoYXIqIGFFeHByLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGFGaWxlLCBQUkludG4gYUxpbmUpOwoKCgoKICBzdGF0aWMgdm9pZCBB
c3NlcnRpb24oY29uc3QgY2hhciogYVN0ciwgY29uc3QgY2hhciogYUV4cHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhRmlsZSwgUFJJbnRuIGFMaW5lKTsKCgoK
CiAgc3RhdGljIHZvaWQgTm90WWV0SW1wbGVtZW50ZWQoY29uc3QgY2hhciogYU1lc3NhZ2UsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxlLCBQ
UkludG4gYUxpbmUpOwoKCgoKICBzdGF0aWMgdm9pZCBOb3RSZWFjaGVkKGNvbnN0IGNoYXIqIGFN
ZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxl
LCBQUkludG4gYUxpbmUpOwoKCgoKICBzdGF0aWMgdm9pZCBFcnJvcihjb25zdCBjaGFyKiBhTWVz
c2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZpbGUsIFBSSW50
biBhTGluZSk7CgoKCgogIHN0YXRpYyB2b2lkIFdhcm5pbmcoY29uc3QgY2hhciogYU1lc3NhZ2Us
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZpbGUsIFBSSW50biBh
TGluZSk7Cn07CiMgNTggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c1V0
aWxzLmgiIDIKCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU3VwcG9ydHNJ
bXBsLmgiIDEKIyA0OCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzSW1w
bC5oIgojIDEgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rp
c3QvaW5jbHVkZS9uc3ByL3ByYXRvbS5oIiAxCiMgNDQgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxs
YS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByYXRvbS5oIgojIDEgIi92
YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3BybG9jay5oIiAxCiMgNTAgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29y
ay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3BybG9jay5oIgpleHRlcm4gIkMiIHsKIyA2MyAi
L3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRl
L25zcHIvcHJsb2NrLmgiCnR5cGVkZWYgc3RydWN0IFBSTG9jayBQUkxvY2s7CiMgODAgIi92YXIv
dG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By
L3BybG9jay5oIgpleHRlcm4gUFJMb2NrKiBQUl9OZXdMb2NrKHZvaWQpOwojIDkxICIvdmFyL3Rt
cC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w
cmxvY2suaCIKZXh0ZXJuIHZvaWQgUFJfRGVzdHJveUxvY2soUFJMb2NrICpsb2NrKTsKIyAxMDIg
Ii92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVk
ZS9uc3ByL3BybG9jay5oIgpleHRlcm4gdm9pZCBQUl9Mb2NrKFBSTG9jayAqbG9jayk7CiMgMTE0
ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1
ZGUvbnNwci9wcmxvY2suaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1VubG9jayhQUkxvY2sgKmxvY2sp
OwoKfQojIDQ1ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wcmF0b20uaCIgMgoKZXh0ZXJuICJDIiB7CiMgNTcgIi92YXIvdG1w
L3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By
YXRvbS5oIgpleHRlcm4gUFJJbnQzMiBQUl9BdG9taWNJbmNyZW1lbnQoUFJJbnQzMiAqdmFsKTsK
IyA2OCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9p
bmNsdWRlL25zcHIvcHJhdG9tLmgiCmV4dGVybiBQUkludDMyIFBSX0F0b21pY0RlY3JlbWVudChQ
UkludDMyICp2YWwpOwojIDgwICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsv
bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmF0b20uaCIKZXh0ZXJuIFBSSW50MzIgUFJfQXRv
bWljU2V0KFBSSW50MzIgKnZhbCwgUFJJbnQzMiBuZXd2YWwpOwojIDkyICIvdmFyL3RtcC9wb3J0
YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmF0b20u
aCIKZXh0ZXJuIFBSSW50MzIgUFJfQXRvbWljQWRkKFBSSW50MzIgKnB0ciwgUFJJbnQzMiB2YWwp
OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgUFJTdGFja0VsZW1TdHIgUFJTdGFja0VsZW07CgpzdHJ1Y3Qg
UFJTdGFja0VsZW1TdHIgewogICAgUFJTdGFja0VsZW0gKnByc3RrX2VsZW1fbmV4dDsKCn07Cgp0
eXBlZGVmIHN0cnVjdCBQUlN0YWNrU3RyIFBSU3RhY2s7CiMgMTE1ICIvdmFyL3RtcC9wb3J0YWdl
L21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmF0b20uaCIK
ZXh0ZXJuIFBSU3RhY2sgKiBQUl9DcmVhdGVTdGFjayhjb25zdCBjaGFyICpzdGFja19uYW1lKTsK
IyAxMjcgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3Qv
aW5jbHVkZS9uc3ByL3ByYXRvbS5oIgpleHRlcm4gdm9pZCBQUl9TdGFja1B1c2goUFJTdGFjayAq
c3RhY2ssIFBSU3RhY2tFbGVtICpzdGFja19lbGVtKTsKIyAxNDAgIi92YXIvdG1wL3BvcnRhZ2Uv
bW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByYXRvbS5oIgpl
eHRlcm4gUFJTdGFja0VsZW0gKiBQUl9TdGFja1BvcChQUlN0YWNrICpzdGFjayk7CiMgMTU0ICIv
dmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUv
bnNwci9wcmF0b20uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0Rlc3Ryb3lTdGFjayhQUlN0YWNrICpz
dGFjayk7Cgp9CiMgNDkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c0lt
cGwuaCIgMgojIDYyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU3VwcG9ydHNJbXBs
LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zVHJhY2VSZWZjbnQuaCIgMQoj
IDQxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNUcmFjZVJlZmNudC5oIgojIDEgIi4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NvbS5oIiAxCiMgNDIgIi4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS94cGNvbS9uc1RyYWNlUmVmY250LmgiIDIKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9p
NTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDM5ICIvdXNyL2xp
Yi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRl
cm4gIkMiIHsKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4y
L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ0ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGlu
dXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMiAzCiMgNTMgIi91c3IvbGliL2djYy1saWIv
aTU4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAzCgoKdHlwZWRlZiBzdHJ1
Y3QgX0lPX0ZJTEUgRklMRTsKCgoKCgojIDcxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGlu
dXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBf
X0ZJTEU7CiMgODEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5j
bHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDEgMwojIDMyICIvdXNy
L2luY2x1ZGUvbGliaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMSAzCiMg
MTQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTU4
Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzU0ICIvdXNyL2xp
Yi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgi
IDIgMwojIDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv
d2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9saWIv
Z2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0
OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hh
ci5oIiAxIDMKIyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDYzICIvdXNyL2luY2x1
ZGUvd2NoYXIuaCIgMwoKCgoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19jb3VudDsKICB1
bmlvbgogIHsKICAgIHdpbnRfdCBfX3djaDsKICAgIGNoYXIgX193Y2hiWzRdOwogIH0gX192YWx1
ZTsKfSBfX21ic3RhdGVfdDsKIyAyNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKCnR5
cGVkZWYgc3RydWN0CnsKICBfX29mZl90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0g
X0dfZnBvc190Owp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmY2NF90IF9fcG9zOwogIF9fbWJzdGF0
ZV90IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7CiMgNDQgIi91c3IvaW5jbHVkZS9fR19jb25maWcu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL2dj
b252LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVk
ZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIu
Mi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoj
IDYzICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoKIyAyOSAiL3Vzci9pbmNsdWRlL2djb252Lmgi
IDIgMwoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNs
dWRlL3N0ZGRlZi5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKCgoKCmVu
dW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZfTk9DT05WLAogIF9fR0NPTlZfTk9EQiwK
ICBfX0dDT05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZX0lOUFVULAogIF9fR0NPTlZfRlVMTF9P
VVRQVVQsCiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAogIF9fR0NPTlZfSU5DT01QTEVURV9JTlBV
VCwKCiAgX19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1IsCiAgX19HQ09OVl9JTlRFUk5BTF9FUlJP
Ugp9OwoKCgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1QgPSAweDAwMDEsCiAgX19HQ09OVl9JR05P
UkVfRVJST1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXA7CnN0cnVjdCBfX2dj
b252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdDsKc3RydWN0IF9fZ2Nv
bnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2ZjdCkgKHN0cnVjdCBfX2dj
b252X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosIF9fY29uc3QgdW5zaWduZWQgY2hh
ciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKiwgc2l6ZV90
ICosIGludCwgaW50KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5pdF9mY3QpIChzdHJ1Y3Qg
X19nY29udl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2VuZF9mY3QpIChzdHJ1Y3Qg
X19nY29udl9zdGVwICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfZmN0KSAoc3Ry
dWN0IF9fZ2NvbnZfc3RlcCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKios
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBp
bnQgKCpfX2djb252X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBfX2NvbnN0IHVuc2lnbmVk
IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0eXBlZGVmIGludCAoKl9f
Z2NvbnZfdHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICosIF9fY29uc3QgY2hhciAqKios
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlw
ZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwgY29uc3QgY2hhciAq
KTsKdHlwZWRlZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAodm9pZCAqKTsKCnN0cnVj
dCBfX2djb252X3RyYW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2ZjdCBfX3RyYW5zX2ZjdDsK
ICBfX2djb252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4dF9mY3Q7CiAgX19nY29u
dl90cmFuc19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpfX2RhdGE7CiAgc3RydWN0
IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwCnsK
ICBzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRsZTsKICBfX2NvbnN0
IGNoYXIgKl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hhciAqX19mcm9tX25hbWU7
CiAgY2hhciAqX190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsKICBfX2djb252X2luaXRf
ZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2ZjdDsKCgoKICBpbnQgX19t
aW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwogIGludCBfX21pbl9uZWVk
ZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCgogIGludCBfX3N0YXRlZnVsOwoKICB2b2lk
ICpfX2RhdGE7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hh
ciAqX19vdXRidWY7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7CgoKCiAgaW50IF9fZmxh
Z3M7CgoKCiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVyOwoKCgogIGludCBfX2ludGVybmFsX3Vz
ZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7CgoKCiAg
c3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3Qg
X19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3RlcHM7CiAgc3RydWN0IF9fZ2NvbnZfc3RlcCAq
X19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGEg
W107Cn0gKl9fZ2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKdHlw
ZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogIHN0cnVjdAogIHsKICAg
IHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBf
X2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQx
Nl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19p
bnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2ln
bmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsK
dHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f
IChfX1NJX18pKSk7CiMgMzMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyA1MyAiL3Vzci9p
bmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251
LzMuMi4yL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQzICIvdXNyL2xpYi9nY2MtbGliL2k1ODYt
cGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1aWx0aW5f
dmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKIyA1NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwoj
IDE2MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBf
SU9fRklMRTsKIyAxNzIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgdm9pZCBfSU9f
bG9ja190OwoKCgoKCnN0cnVjdCBfSU9fbWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25l
eHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1ZjsKCgoKICBpbnQgX3BvczsKIyAxOTUgIi91c3Iv
aW5jbHVkZS9saWJpby5oIiAzCn07CgoKZW51bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVj
dnRfb2ssCiAgX19jb2RlY3Z0X3BhcnRpYWwsCiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2
dF9ub2NvbnYKfTsKIyAyNjMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fRklM
RSB7CiAgaW50IF9mbGFnczsKCgoKCiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19y
ZWFkX2VuZDsKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwog
IGNoYXIqIF9JT193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9f
YnVmX2Jhc2U7CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAg
Y2hhciAqX0lPX2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0IF9J
T19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9m
aWxlbm87CgoKCiAgaW50IF9mbGFnczI7CgogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAgdW5z
aWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAg
Y2hhciBfc2hvcnRidWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xvY2s7CiMgMzExICIvdXNyL2lu
Y2x1ZGUvbGliaW8uaCIgMwogIF9fb2ZmNjRfdCBfb2Zmc2V0OwoKCgoKCiAgdm9pZCAqX19wYWQx
OwogIHZvaWQgKl9fcGFkMjsKCiAgaW50IF9tb2RlOwoKICBjaGFyIF91bnVzZWQyWzE1ICogc2l6
ZW9mIChpbnQpIC0gMiAqIHNpemVvZiAodm9pZCAqKV07Cgp9OwoKCgoKCnN0cnVjdCBfSU9fRklM
RV9wbHVzOwoKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRl
cm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9J
T19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwojIDM1MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi
IDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAq
X19idWYsIHNpemVfdCBfX25ieXRlcyk7CgoKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dy
aXRlX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lv
X3NlZWtfZm4gKHZvaWQgKl9fY29va2llLCBfX29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0
eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVmIF9f
aW9fcmVhZF9mbiBjb29raWVfcmVhZF9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4g
Y29va2llX3dyaXRlX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVr
X2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19jbG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25f
dDsKCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19pb19yZWFkX2ZuICpyZWFkOwogIF9faW9fd3JpdGVf
Zm4gKndyaXRlOwogIF9faW9fc2Vla19mbiAqc2VlazsKICBfX2lvX2Nsb3NlX2ZuICpjbG9zZTsK
fSBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190Owp0eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rp
b25zX3QgY29va2llX2lvX2Z1bmN0aW9uc190OwoKc3RydWN0IF9JT19jb29raWVfZmlsZTsKCgpl
eHRlcm4gdm9pZCBfSU9fY29va2llX2luaXQgKHN0cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2Zp
bGUsIGludCBfX3JlYWRfd3JpdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAq
X19jb29raWUsIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19mbnMpOwoKCgoKZXh0ZXJuICJD
IiB7CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVy
biBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19vdmVyZmxv
dyAoX0lPX0ZJTEUgKiwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1bmRlcmZsb3cg
KF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAq
KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3dvdmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90
KSB0aHJvdyAoKTsKIyA0MzIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lP
X2dldGMgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50
IF9fYywgX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mZW9mIChfSU9f
RklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2ZlcnJvciAoX0lPX0ZJTEUgKl9f
ZnApIHRocm93ICgpOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19m
cCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgX0lPX2Zsb2NrZmlsZSAoX0lPX0ZJTEUgKikg
dGhyb3cgKCk7CmV4dGVybiB2b2lkIF9JT19mdW5sb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cg
KCk7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CiMg
NDYyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT192ZnNjYW5mIChfSU9f
RklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAg
ICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBfSU9fdmZwcmludGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpf
X3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIHRocm93
ICgpOwpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVf
dCkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICos
IHNpemVfdCkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrb2ZmIChfSU9fRklM
RSAqLCBfX29mZjY0X3QsIGludCwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9f
c2Vla3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQpIHRocm93ICgpOwoKZXh0ZXJuIHZv
aWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgpOwojIDUyMCAiL3Vz
ci9pbmNsdWRlL2xpYmlvLmgiIDMKfQojIDgyICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGlu
dXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgp0eXBlZGVmIF9fZ251Y192YV9s
aXN0IF9fbm90X3ZhX2xpc3RfXzsKIyA5NSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4
LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKCgp0eXBlZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7
CgoKCgoKdHlwZWRlZiBfR19mcG9zNjRfdCBmcG9zNjRfdDsKIyAxNDcgIi91c3IvbGliL2djYy1s
aWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDE0OCAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2
LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgpleHRlcm4gc3RydWN0
IF9JT19GSUxFICpzdGRpbjsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRSAqc3Rkb3V0OwpleHRlcm4g
c3RydWN0IF9JT19GSUxFICpzdGRlcnI7CgoKCgoKCgpleHRlcm4gaW50IHJlbW92ZSAoX19jb25z
dCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcmVuYW1lIChfX2NvbnN0
IGNoYXIgKl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9fbmV3KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IEZJTEUgKnRtcGZpbGUgKHZvaWQpIHRocm93ICgpOwojIDE4MCAiL3Vzci9saWIvZ2NjLWxpYi9p
NTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRt
cG5hbSAoY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIEZJTEUgKnRtcGZpbGU2NCAodm9p
ZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKnRtcG5hbV9yIChjaGFyICpfX3MpIHRocm93
ICgpOwojIDIwMiAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNs
dWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIs
IF9fY29uc3QgY2hhciAqX19wZngpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFs
bG9jX18pKTsKCgoKCgpleHRlcm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwoKZXh0ZXJuIGludCBmZmx1c2ggKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRl
cm4gaW50IGZjbG9zZWFsbCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBGSUxFICpmb3Bl
biAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwoKZXh0ZXJuIEZJ
TEUgKmZyZW9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAg
ICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKIyAyNDgg
Ii91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRpby5o
IiAzCgoKZXh0ZXJuIEZJTEUgKmZvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zp
bGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bW9kZXMpIHRocm93ICgpOwpleHRlcm4gRklMRSAqZnJlb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVz
dHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9f
ZmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZv
cGVuY29va2llICh2b2lkICpfX3Jlc3RyaWN0IF9fbWFnaWNfY29va2llLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19pb19mdW5jcykgdGhy
b3cgKCk7CgoKZXh0ZXJuIEZJTEUgKmZtZW1vcGVuICh2b2lkICpfX3MsIHNpemVfdCBfX2xlbiwg
X19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxFICpvcGVuX21l
bXN0cmVhbSAoY2hhciAqKl9fcmVzdHJpY3QgX19idWZsb2MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc2l6ZWxvYykgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiB2b2lkIHNldGJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0
cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAoRklMRSAqX19yZXN0
cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAg
ICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0
YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm
LAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCmV4dGVy
biB2b2lkIHNldGxpbmVidWYgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
aW50IGZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0
ZXJuIGludCBwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0
aHJvdyAoKTsKCmV4dGVybiBpbnQgc3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgdmZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251
Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgdnByaW50ZiAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJv
dyAoKTsKCmV4dGVybiBpbnQgdnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192
YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHNucHJpbnRmIChjaGFyICpf
X3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgdnNu
cHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFf
bGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19w
cmludGZfXywgMywgMCkpKTsKCgoKCgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipfX3Jl
c3RyaWN0IF9fcHRyLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mLAogICAgICAgICAgICAg
ICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgX19hc3ByaW50
ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CmV4dGVybiBpbnQgYXNwcmludGYg
KGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgpleHRlcm4gaW50IHZkcHJpbnRmIChp
bnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LAogICAgICAgICAgICAgICAg
ICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBkcHJpbnRmIChpbnQg
X19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKCgoKZXh0
ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7Cgpl
eHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikg
dGhyb3cgKCk7CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
cywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwg
Li4uKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHZmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3Qg
X19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg
ICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Zm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgpleHRlcm4gaW50IHZzY2FuZiAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAxLCAwKSkpOwoK
CmV4dGVybiBpbnQgdnNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192
YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChf
X3NjYW5mX18sIDIsIDApKSk7CgoKCgoKCmV4dGVybiBpbnQgZmdldGMgKEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBnZXRjaGFyICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gaW50IGdl
dGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjaGFy
X3VubG9ja2VkICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmdldGNfdW5sb2NrZWQg
KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGZwdXRjIChpbnQgX19j
LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9fYywgRklM
RSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgdGhy
b3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAq
X19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChpbnQgX19j
LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAo
aW50IF9fYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50
IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGNoYXIgKmdldHMgKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmdldHNf
dW5sb2NrZWQgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwojIDQ3MCAi
L3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgi
IDMKZXh0ZXJuIF9fc3NpemVfdCBfX2dldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVw
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19u
LCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpf
X3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBnZXRkZWxpbSAo
Y2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRl
cm4gX19zc2l6ZV90IGdldGxpbmUgKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBGSUxFICpf
X3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0cyAoX19j
b25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVuZ2V0YyAoaW50IF9fYywg
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkICh2b2lkICpf
X3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBzaXpl
X3QgZndyaXRlIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUs
CiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fcykg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRzX3VubG9ja2VkIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0
IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQgKHZv
aWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp
OwpleHRlcm4gc2l6ZV90IGZ3cml0ZV91bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0
IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu
IGludCBmc2VlayAoRklMRSAqX19zdHJlYW0sIGxvbmcgaW50IF9fb2ZmLCBpbnQgX193aGVuY2Up
IHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxsIChGSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCk7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCiMgNTM3
ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8u
aCIgMwpleHRlcm4gaW50IGZzZWVrbyAoRklMRSAqX19zdHJlYW0sIF9fb2ZmX3QgX19vZmYsIGlu
dCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmZfdCBmdGVsbG8gKEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKIyA1NTMgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUv
My4yLjIvaW5jbHVkZS9zdGRpby5oIiAzCgoKCmV4dGVybiBpbnQgZmdldHBvcyAoRklMRSAqX19y
ZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIHRocm93ICgp
OwoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9f
cG9zKSB0aHJvdyAoKTsKIyA1NzIgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUv
My4yLjIvaW5jbHVkZS9zdGRpby5oIiAzCgoKCmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUgKl9f
c3RyZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CmV4dGVybiBf
X29mZjY0X3QgZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBm
Z2V0cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3M2NF90ICpfX3Jlc3RyaWN0
IF9fcG9zKQogICAgIHRocm93ICgpOwpleHRlcm4gaW50IGZzZXRwb3M2NCAoRklMRSAqX19zdHJl
YW0sIF9fY29uc3QgZnBvczY0X3QgKl9fcG9zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIGNs
ZWFyZXJyIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZlb2YgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVycm9yIChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBjbGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJl
YW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKCgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAo
KTsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zeXNfZXJybGlzdC5oIiAxIDMKIyAyNyAi
L3Vzci9pbmNsdWRlL2JpdHMvc3lzX2Vycmxpc3QuaCIgMwpleHRlcm4gaW50IHN5c19uZXJyOwpl
eHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19lcnJsaXN0W107CgoKZXh0ZXJuIGludCBf
c3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3QgX3N5c19lcnJsaXN0W107CiMg
NjA5ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3Rk
aW8uaCIgMiAzCgoKCgpleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19j
b25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklMRSAq
X19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3Mp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdXNlcmlkIChjaGFyICpfX3MpIHRocm93ICgp
OwoKCgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0ZXJuIGludCBvYnN0YWNrX3ByaW50ZiAoc3RydWN0
IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGlu
dCBvYnN0YWNrX3ZwcmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv
cm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJncykK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwg
MCkpKTsKCgoKCgoKCmV4dGVybiB2b2lkIGZsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwoKCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CiMg
NjgzICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3Rk
aW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDEgMwojIDMzICIvdXNyL2lu
Y2x1ZGUvYml0cy9zdGRpby5oIiAzCmlubGluZSBpbnQKdnByaW50ZiAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fZm10LCBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCkKewogIHJldHVy
biB2ZnByaW50ZiAoc3Rkb3V0LCBfX2ZtdCwgX19hcmcpOwp9CgoKaW5saW5lIGludApnZXRjaGFy
ICh2b2lkKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9JT19nZXRjIChzdGRpbik7Cn0KCgoKCmlubGlu
ZSBpbnQKZ2V0Y191bmxvY2tlZCAoRklMRSAqX19mcCkgdGhyb3cgKCkKewogIHJldHVybiAoKF9f
ZnApLT5fSU9fcmVhZF9wdHIgPj0gKF9fZnApLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChfX2Zw
KSA6ICoodW5zaWduZWQgY2hhciAqKSAoX19mcCktPl9JT19yZWFkX3B0cisrKTsKfQoKCmlubGlu
ZSBpbnQKZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhyb3cgKCkKewogIHJldHVybiAoKHN0ZGlu
KS0+X0lPX3JlYWRfcHRyID49IChzdGRpbiktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKHN0ZGlu
KSA6ICoodW5zaWduZWQgY2hhciAqKSAoc3RkaW4pLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgoKCmlu
bGluZSBpbnQKcHV0Y2hhciAoaW50IF9fYykgdGhyb3cgKCkKewogIHJldHVybiBfSU9fcHV0YyAo
X19jLCBzdGRvdXQpOwp9CgoKCgppbmxpbmUgaW50CmZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9JT193cml0
ZV9wdHIgPj0gKF9fc3RyZWFtKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChfX3N0cmVh
bSwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVhbSkt
Pl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgoKCgppbmxpbmUgaW50CnB1dGNfdW5sb2Nr
ZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3Ry
ZWFtKS0+X0lPX3dyaXRlX3B0ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3Zl
cmZsb3cgKF9fc3RyZWFtLCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIp
ICgqKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCmlubGluZSBpbnQK
cHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhyb3cgKCkKewogIHJldHVybiAoKChzdGRvdXQp
LT5fSU9fd3JpdGVfcHRyID49IChzdGRvdXQpLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cg
KHN0ZG91dCwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzdGRv
dXQpLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKCgoKaW5saW5lIF9fc3NpemVfdApn
ZXRsaW5lIChjaGFyICoqX19saW5lcHRyLCBzaXplX3QgKl9fbiwgRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpCnsKICByZXR1cm4gX19nZXRkZWxpbSAoX19saW5lcHRyLCBfX24sICdcbicsIF9fc3Ry
ZWFtKTsKfQoKCgoKCmlubGluZSBpbnQKZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fZmxhZ3MgJiAweDEwKSAhPSAwKTsKfQoK
CmlubGluZSBpbnQKZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewog
IHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAmIDB4MjApICE9IDApOwp9CiMgNjg0ICIvdXNy
L2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMiAz
CgoKfQojIDQ0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNUcmFjZVJlZmNudC5oIiAy
CgpjbGFzcyBuc0lTdXBwb3J0czsKIyAxNTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9u
c1RyYWNlUmVmY250LmgiCnN0cnVjdCBuc1RyYWNlUmVmY250U3RhdHMgewogIG5zcmVmY250IG1B
ZGRSZWZzOwogIG5zcmVmY250IG1SZWxlYXNlczsKICBuc3JlZmNudCBtQ3JlYXRlczsKICBuc3Jl
ZmNudCBtRGVzdHJveXM7CiAgZG91YmxlIG1SZWZzT3V0c3RhbmRpbmdUb3RhbDsKICBkb3VibGUg
bVJlZnNPdXRzdGFuZGluZ1NxdWFyZWQ7CiAgZG91YmxlIG1PYmpzT3V0c3RhbmRpbmdUb3RhbDsK
ICBkb3VibGUgbU9ianNPdXRzdGFuZGluZ1NxdWFyZWQ7Cn07CiMgMTczICIuLi8uLi8uLi9kaXN0
L2luY2x1ZGUveHBjb20vbnNUcmFjZVJlZmNudC5oIgp0eXBlZGVmIFBSQm9vbCAoICpuc1RyYWNl
UmVmY250U3RhdEZ1bmMpCiAgKGNvbnN0IGNoYXIqIGFUeXBlTmFtZSwKICAgUFJVaW50MzIgYUlu
c3RhbmNlU2l6ZSwKICAgbnNUcmFjZVJlZmNudFN0YXRzKiBhQ3VycmVudFN0YXRzLAogICBuc1Ry
YWNlUmVmY250U3RhdHMqIGFQcmV2U3RhdHMsCiAgIHZvaWQgKmFDbG9zdXJlKTsKCgoKCgpjbGFz
cyBuc1RyYWNlUmVmY250IHsKcHVibGljOgogIHN0YXRpYyB2b2lkIFN0YXJ0dXAoKTsKCiAgc3Rh
dGljIHZvaWQgU2h1dGRvd24oKTsKCiAgc3RhdGljIHZvaWQgTG9nQWRkUmVmKHZvaWQqIGFQdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc3JlZmNudCBhTmV3UmVmQ250LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYVR5cGVOYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUluc3RhbmNlU2l6ZSk7CgogIHN0YXRp
YyB2b2lkIExvZ1JlbGVhc2Uodm9pZCogYVB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc3JlZmNudCBhTmV3UmVmQ250LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIqIGFUeXBlTmFtZSk7CgogIHN0YXRpYyB2b2lkIExvZ05ld1hQQ09NKHZvaWQq
IGFQdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFUeXBl
TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUluc3RhbmNl
U2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZpbGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhTGluZSk7CgogIHN0YXRpYyB2
b2lkIExvZ0RlbGV0ZVhQQ09NKHZvaWQqIGFQdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIGFGaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgYUxpbmUpOwoKICBzdGF0aWMgbnNyZWZjbnQgTG9nQWRkUmVmQ2FsbCh2b2lk
KiBhUHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc3JlZmNudCBh
TmV3UmVmY250LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiBhRmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFM
aW5lKTsKCiAgc3RhdGljIG5zcmVmY250IExvZ1JlbGVhc2VDYWxsKHZvaWQqIGFQdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc3JlZmNudCBhTmV3UmVmY250LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYUZpbGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYUxpbmUpOwoKICBz
dGF0aWMgdm9pZCBMb2dDdG9yKHZvaWQqIGFQdHIsIGNvbnN0IGNoYXIqIGFUeXBlTmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhSW5zdGFuY2VTaXplKTsKCiAgc3Rh
dGljIHZvaWQgTG9nRHRvcih2b2lkKiBhUHRyLCBjb25zdCBjaGFyKiBhVHlwZU5hbWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUluc3RhbmNlU2l6ZSk7CgogIHN0YXRp
YyB2b2lkIExvZ0FkZENPTVB0cih2b2lkICphQ09NUHRyLCBuc0lTdXBwb3J0cyAqYU9iamVjdCk7
CgogIHN0YXRpYyB2b2lkIExvZ1JlbGVhc2VDT01QdHIodm9pZCAqYUNPTVB0ciwgbnNJU3VwcG9y
dHMgKmFPYmplY3QpOwoKICBlbnVtIFN0YXRpc3RpY3NUeXBlIHsKICAgIEFMTF9TVEFUUywKICAg
IE5FV19TVEFUUwogIH07CgogIHN0YXRpYyBuc3Jlc3VsdCBEdW1wU3RhdGlzdGljcyhTdGF0aXN0
aWNzVHlwZSB0eXBlID0gQUxMX1NUQVRTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRklMRSogb3V0ID0gMCk7CgogIHN0YXRpYyB2b2lkIFJlc2V0U3RhdGlzdGljcyh2
b2lkKTsKCiAgc3RhdGljIHZvaWQgR2F0aGVyU3RhdGlzdGljcyhuc1RyYWNlUmVmY250U3RhdEZ1
bmMgYUZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYUNs
b3N1cmUpOwoKICBzdGF0aWMgdm9pZCBMb2FkTGlicmFyeVN5bWJvbHMoY29uc3QgY2hhciogYUxp
YnJhcnlOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCog
YUxpYnJheUhhbmRsZSk7CgogIHN0YXRpYyB2b2lkIERlbWFuZ2xlU3ltYm9sKGNvbnN0IGNoYXIg
KiBhU3ltYm9sLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogYUJ1
ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFCdWZMZW4pOwoK
ICBzdGF0aWMgdm9pZCBXYWxrVGhlU3RhY2soRklMRSogYVN0cmVhbSk7CgogIHN0YXRpYyB2b2lk
IFNldFByZWZTZXJ2aWNlQXZhaWxhYmlsaXR5KFBSQm9vbCBhdmFpbCk7CgoKCgoKCiAgc3RhdGlj
IHZvaWQgU2V0QWN0aXZpdHlJc0xlZ2FsKFBSQm9vbCBhTGVnYWwpOwp9OwoKCgoKZXh0ZXJuICJD
IiB2b2lkCk5TX01lYW5BbmRTdGREZXYoZG91YmxlIG4sIGRvdWJsZSBzdW1PZlZhbHVlcywgZG91
YmxlIHN1bU9mU3F1YXJlZFZhbHVlcywKICAgICAgICAgICAgICAgICBkb3VibGUgKm1lYW5SZXN1
bHQsIGRvdWJsZSAqc3RkRGV2UmVzdWx0KTsKIyA2MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw
Y29tL25zSVN1cHBvcnRzSW1wbC5oIiAyCiMgOTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNv
bS9uc0lTdXBwb3J0c0ltcGwuaCIKY2xhc3MgbnNBdXRvUmVmQ250IHsKCiBwdWJsaWM6CiAgICBu
c0F1dG9SZWZDbnQoKSA6IG1WYWx1ZSgwKSB7fQogICAgbnNBdXRvUmVmQ250KG5zcmVmY250IGFW
YWx1ZSkgOiBtVmFsdWUoYVZhbHVlKSB7fQoKCiAgICBuc3JlZmNudCBvcGVyYXRvcisrKCkgeyBy
ZXR1cm4gKyttVmFsdWU7IH0KICAgIG5zcmVmY250IG9wZXJhdG9yLS0oKSB7IHJldHVybiAtLW1W
YWx1ZTsgfQoKICAgIG5zcmVmY250IG9wZXJhdG9yPShuc3JlZmNudCBhVmFsdWUpIHsgcmV0dXJu
IChtVmFsdWUgPSBhVmFsdWUpOyB9CiAgICBvcGVyYXRvciBuc3JlZmNudCgpIGNvbnN0IHsgcmV0
dXJuIG1WYWx1ZTsgfQogICAgbnNyZWZjbnQgZ2V0KCkgY29uc3QgeyByZXR1cm4gbVZhbHVlOyB9
CiBwcml2YXRlOgoKICAgIG5zcmVmY250IG9wZXJhdG9yKysoaW50KTsKICAgIG5zcmVmY250IG9w
ZXJhdG9yLS0oaW50KTsKICAgIG5zcmVmY250IG1WYWx1ZTsKfTsKIyA4MjkgIi4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c0ltcGwuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUveHBjb20vbnNJQ2xhc3NJbmZvLmgiIDEKIyA4MzAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS94cGNvbS9uc0lTdXBwb3J0c0ltcGwuaCIgMgojIDYyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv
eHBjb20vbnNJU3VwcG9ydHNVdGlscy5oIiAyCiMgMTA2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv
eHBjb20vbnNJU3VwcG9ydHNVdGlscy5oIgpleHRlcm4gIkMrKyIgewoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgVD4KaW5saW5lCm5zcmVmY250Cm5zX2lmX2FkZHJlZiggVCBleHByICkKCgoKICB7CiAgICBy
ZXR1cm4gZXhwciA/IGV4cHItPkFkZFJlZigpIDogMDsKICB9Cgp9CiMgMjM0ICIuLi8uLi8uLi9k
aXN0L2luY2x1ZGUveHBjb20vbnNJU3VwcG9ydHNVdGlscy5oIgpleHRlcm4gIkMrKyIgewoKCgpj
bGFzcyBuc0lTdXBwb3J0czsKCnRlbXBsYXRlIDxjbGFzcyBUPgpzdHJ1Y3QgbnNDT01UeXBlSW5m
bwogIHsKICAgIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkgeyByZXR1cm4gVDo6R2V0SUlE
KCk7IH0KICB9OwoKdGVtcGxhdGUgPD4Kc3RydWN0IG5zQ09NVHlwZUluZm88bnNJU3VwcG9ydHM+
CiAgewogICAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7CiAgICAgICAgc3RhdGljIGNv
bnN0IG5zSUlEIGlpZF9OU19JU1VQUE9SVFNfSUlEID0geyAweDAwMDAwMDAwLCAweDAwMDAsIDB4
MDAwMCwgezB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDZ9IH07
IHJldHVybiBpaWRfTlNfSVNVUFBPUlRTX0lJRDsKICAgIH0KICB9OwoKCgoKdGVtcGxhdGUgPGNs
YXNzIFQsIGNsYXNzIERlc3RpbmF0aW9uVHlwZT4KaW5saW5lCm5zcmVzdWx0CkNhbGxRdWVyeUlu
dGVyZmFjZSggVCogYVNvdXJjZSwgRGVzdGluYXRpb25UeXBlKiogYURlc3RpbmF0aW9uICkKICB7
CiAgICA7CiAgICA7CgogICAgcmV0dXJuIGFTb3VyY2UtPlF1ZXJ5SW50ZXJmYWNlKG5zQ09NVHlw
ZUluZm88RGVzdGluYXRpb25UeXBlPjo6R2V0SUlEKCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDwgdm9pZCoqID4oYURlc3RpbmF0aW9uKSk7CiAg
fQoKfQojIDExOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzLmgiIDIK
IyAxMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNsYXNzSW5mby5oIiAyCgoKCiMg
MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVByb2dyYW1taW5nTGFuZ3VhZ2UuaCIg
MQojIDMyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJUHJvZ3JhbW1pbmdMYW5ndWFn
ZS5oIgpjbGFzcyBuc0lQcm9ncmFtbWluZ0xhbmd1YWdlIDogcHVibGljIG5zSVN1cHBvcnRzIHsK
IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z
SUlEIGlpZCA9IHsweGVhNjA0ZTkwLCAweDQwYmEsIDB4MTFkNSwgeyAweDkwLCAweGJiLCAweDAw
LCAweDEwLCAweGE0LCAweGU3LCAweDNkLCAweDlhIH19OyByZXR1cm4gaWlkO30KCgoKCiAgZW51
bSB7IFVOS05PV04gPSAwVSB9OwoKICBlbnVtIHsgQ1BMVVNQTFVTID0gMVUgfTsKCiAgZW51bSB7
IEpBVkFTQ1JJUFQgPSAyVSB9OwoKICBlbnVtIHsgUFlUSE9OID0gM1UgfTsKCiAgZW51bSB7IFBF
UkwgPSA0VSB9OwoKICBlbnVtIHsgSkFWQSA9IDVVIH07CgogIGVudW0geyBaWDgxX0JBU0lDID0g
NlUgfTsKCiAgZW51bSB7IEpBVkFTQ1JJUFQyID0gN1UgfTsKCn07CiMgMTUgIi4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS94cGNvbS9uc0lDbGFzc0luZm8uaCIgMgojIDMzICIuLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUveHBjb20vbnNJQ2xhc3NJbmZvLmgiCmNsYXNzIG5zSUNsYXNzSW5mbyA6IHB1YmxpYyBu
c0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0
YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg5ODZjMTFkMCwgMHhmMzQwLCAweDExZDQsIHsgMHg5
MCwgMHg3NSwgMHgwMCwgMHgxMCwgMHhhNCwgMHhlNywgMHgzZCwgMHg5YSB9fTsgcmV0dXJuIGlp
ZDt9CiMgNDcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDbGFzc0luZm8uaCIKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldEludGVyZmFjZXMoUFJVaW50MzIgKmNvdW50LCBuc0lJRCAqICoq
YXJyYXkpID0gMDsKIyA2MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNsYXNzSW5m
by5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SGVscGVyRm9yTGFuZ3VhZ2UoUFJVaW50MzIgbGFu
Z3VhZ2UsIG5zSVN1cHBvcnRzICoqX3JldHZhbCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0Q29udHJhY3RJRChjaGFyICogKmFDb250cmFjdElEKSA9IDA7CgoKCgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldENsYXNzRGVzY3JpcHRpb24oY2hhciAqICphQ2xhc3NEZXNjcmlwdGlvbikg
PSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xhc3NJRChuc0NJRCAqICphQ2xhc3NJ
RCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbXBsZW1lbnRhdGlvbkxhbmd1YWdl
KFBSVWludDMyICphSW1wbGVtZW50YXRpb25MYW5ndWFnZSkgPSAwOwoKCgoKICBlbnVtIHsgU0lO
R0xFVE9OID0gMVUgfTsKCiAgZW51bSB7IFRIUkVBRFNBRkUgPSAyVSB9OwoKICBlbnVtIHsgTUFJ
Tl9USFJFQURfT05MWSA9IDRVIH07CgogIGVudW0geyBET01fT0JKRUNUID0gOFUgfTsKCiAgZW51
bSB7IFBMVUdJTl9PQkpFQ1QgPSAxNlUgfTsKCiAgZW51bSB7IEVBR0VSX0NMQVNTSU5GTyA9IDMy
VSB9OwoKCgoKCiAgZW51bSB7IENPTlRFTlRfTk9ERSA9IDY0VSB9OwoKICBlbnVtIHsgUkVTRVJW
RUQgPSAyMTQ3NDgzNjQ4VSB9OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGbGFncyhQUlVpbnQz
MiAqYUZsYWdzKSA9IDA7CiMgMTI0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ2xh
c3NJbmZvLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDbGFzc0lETm9BbGxvYyhuc0NJRCAqYUNs
YXNzSUROb0FsbG9jKSA9IDA7Cgp9OwojIDQ0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25z
SURPTUNsYXNzSW5mby5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zVm9p
ZEFycmF5LmgiIDEKIyA0MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zVm9pZEFycmF5
LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0FTdHJpbmcuaCIgMQojIDI4
ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zQVN0cmluZy5oIgojIDEgIi4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmdGd2QuaCIgMQojIDMwICIuLi8uLi8uLi9kaXN0
L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nRndkLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L3N0cmluZy9uc1N0cmluZ0RlZmluZXMuaCIgMQojIDMxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv
c3RyaW5nL25zU3RyaW5nRndkLmgiIDIKCgoKCgoKCmNsYXNzIG5zQVN0cmluZzsKY2xhc3MgbnNB
Q1N0cmluZzsKCgoKCgoKY2xhc3MgbnNBRmxhdFN0cmluZzsKY2xhc3MgbnNBRmxhdENTdHJpbmc7
CgoKCgoKCmNsYXNzIG5zRGVwZW5kZW50U3RyaW5nOwpjbGFzcyBuc0RlcGVuZGVudENTdHJpbmc7
CiMgMjkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNBU3RyaW5nLmgiIDIKCgoKIyAx
ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zQnVmZmVySGFuZGxlLmgiIDEKIyA4OSAi
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0J1ZmZlckhhbmRsZS5oIgp0ZW1wbGF0ZSA8
Y2xhc3MgQ2hhclQ+CmNsYXNzIG5zQnVmZmVySGFuZGxlCiAgewogICAgcHVibGljOgogICAgICB0
eXBlZGVmIFBSVWludDMyIHNpemVfdHlwZTsKCiAgICAgIG5zQnVmZmVySGFuZGxlKCkgeyB9CiAg
ICAgIG5zQnVmZmVySGFuZGxlKCBDaGFyVCogYURhdGFTdGFydCwgQ2hhclQqIGFEYXRhRW5kICkg
OiBtRGF0YVN0YXJ0KGFEYXRhU3RhcnQpLCBtRGF0YUVuZChhRGF0YUVuZCkgeyB9CgogICAgICB2
b2lkIERhdGFTdGFydCggQ2hhclQqIGFOZXdEYXRhU3RhcnQgKSB7IG1EYXRhU3RhcnQgPSBhTmV3
RGF0YVN0YXJ0OyB9CiAgICAgIENoYXJUKiBEYXRhU3RhcnQoKSB7IHJldHVybiBtRGF0YVN0YXJ0
OyB9CiAgICAgIGNvbnN0IENoYXJUKiBEYXRhU3RhcnQoKSBjb25zdCB7IHJldHVybiBtRGF0YVN0
YXJ0OyB9CgogICAgICB2b2lkIERhdGFFbmQoIENoYXJUKiBhTmV3RGF0YUVuZCApIHsgbURhdGFF
bmQgPSBhTmV3RGF0YUVuZDsgfQogICAgICBDaGFyVCogRGF0YUVuZCgpIHsgcmV0dXJuIG1EYXRh
RW5kOyB9CiAgICAgIGNvbnN0IENoYXJUKiBEYXRhRW5kKCkgY29uc3QgeyByZXR1cm4gbURhdGFF
bmQ7IH0KCiAgICAgIHNpemVfdHlwZSBEYXRhTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbURhdGFF
bmQgLSBtRGF0YVN0YXJ0OyB9CgogICAgcHJvdGVjdGVkOgogICAgICBDaGFyVCogbURhdGFTdGFy
dDsKICAgICAgQ2hhclQqIG1EYXRhRW5kOwogIH07CgoKCgoKdGVtcGxhdGUgPGNsYXNzIENoYXJU
PgpjbGFzcyBuc0NvbnN0QnVmZmVySGFuZGxlCiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVm
IFBSVWludDMyIHNpemVfdHlwZTsKCiAgICAgIG5zQ29uc3RCdWZmZXJIYW5kbGUoKSB7IH0KICAg
ICAgbnNDb25zdEJ1ZmZlckhhbmRsZSggY29uc3QgQ2hhclQqIGFEYXRhU3RhcnQsIGNvbnN0IENo
YXJUKiBhRGF0YUVuZCApIDogbURhdGFTdGFydChhRGF0YVN0YXJ0KSwgbURhdGFFbmQoYURhdGFF
bmQpIHsgfQoKICAgICAgdm9pZCBEYXRhU3RhcnQoIGNvbnN0IENoYXJUKiBhTmV3RGF0YVN0YXJ0
ICkgeyBtRGF0YVN0YXJ0ID0gYU5ld0RhdGFTdGFydDsgfQogICAgICBjb25zdCBDaGFyVCogRGF0
YVN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbURhdGFTdGFydDsgfQoKICAgICAgdm9pZCBEYXRhRW5k
KCBjb25zdCBDaGFyVCogYU5ld0RhdGFFbmQgKSB7IG1EYXRhRW5kID0gYU5ld0RhdGFFbmQ7IH0K
ICAgICAgY29uc3QgQ2hhclQqIERhdGFFbmQoKSBjb25zdCB7IHJldHVybiBtRGF0YUVuZDsgfQoK
ICAgICAgc2l6ZV90eXBlIERhdGFMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtRGF0YUVuZCAtIG1E
YXRhU3RhcnQ7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGNvbnN0IENoYXJUKiBtRGF0YVN0YXJ0
OwogICAgICBjb25zdCBDaGFyVCogbURhdGFFbmQ7CiAgfTsKCgoKCgoKCnRlbXBsYXRlIDxjbGFz
cyBDaGFyVD4KY2xhc3MgbnNTdHJpbmdBbGxvY2F0b3IKICB7CiAgICBwdWJsaWM6CgogICAgICB2
aXJ0dWFsIHZvaWQgRGVhbGxvY2F0ZSggQ2hhclQqICkgY29uc3QgPSAwOwogIH07CgoKCgogbnNT
dHJpbmdBbGxvY2F0b3I8Y2hhcj4mIFN0cmluZ0FsbG9jYXRvcl9jaGFyKCk7CiBuc1N0cmluZ0Fs
bG9jYXRvcjxQUlVuaWNoYXI+JiBTdHJpbmdBbGxvY2F0b3Jfd2NoYXJfdCgpOwoKCgoKCnRlbXBs
YXRlIDxjbGFzcyBUPgpzdHJ1Y3QgbnNTdHJpbmdBbGxvY2F0b3JUcmFpdHMKICB7CiAgfTsKCnRl
bXBsYXRlIDw+CnN0cnVjdCBuc1N0cmluZ0FsbG9jYXRvclRyYWl0czxjaGFyPgogIHsKICAgIHN0
YXRpYyBuc1N0cmluZ0FsbG9jYXRvcjxjaGFyPiYgZ2xvYmFsX3N0cmluZ19hbGxvY2F0b3IoKSB7
IHJldHVybiBTdHJpbmdBbGxvY2F0b3JfY2hhcigpOyB9CiAgfTsKCnRlbXBsYXRlIDw+CnN0cnVj
dCBuc1N0cmluZ0FsbG9jYXRvclRyYWl0czxQUlVuaWNoYXI+CiAgewogICAgc3RhdGljIG5zU3Ry
aW5nQWxsb2NhdG9yPFBSVW5pY2hhcj4mIGdsb2JhbF9zdHJpbmdfYWxsb2NhdG9yKCkgeyByZXR1
cm4gU3RyaW5nQWxsb2NhdG9yX3djaGFyX3QoKTsgfQogIH07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
Q2hhclQ+CmNsYXNzIG5zU2hhcmVkQnVmZmVySGFuZGxlCiAgICA6IHB1YmxpYyBuc0J1ZmZlckhh
bmRsZTxDaGFyVD4KICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgUFJVaW50MzIgc2l6ZV90
eXBlOwoKICAgICAgZW51bQogICAgICAgIHsKICAgICAgICAgIGtJc0ltbXV0YWJsZSA9IDB4MDEw
MDAwMDAsCiAgICAgICAgICBrSXNTaW5nbGVBbGxvY2F0aW9uV2l0aEJ1ZmZlciA9IDB4MDIwMDAw
MDAsCiAgICAgICAgICBrSXNVc2VyQWxsb2NhdG9yID0gMHgwNDAwMDAwMCwKCgogICAgICAgICAg
a0lzTlVMTCA9IDB4ODAwMDAwMDAsCiAgICAgICAgICBrSW1wbGVtZW50YXRpb25GbGFnc01hc2sg
PSAweEYwMDAwMDAwLAoKICAgICAgICAgIGtGbGFnc01hc2sgPSAweEZGMDAwMDAwLAogICAgICAg
ICAga1JlZkNvdW50TWFzayA9IDB4MDBGRkZGRkYKICAgICAgICB9OwoKICAgIHB1YmxpYzoKICAg
ICAgbnNTaGFyZWRCdWZmZXJIYW5kbGUoIENoYXJUKiBhRGF0YVN0YXJ0LCBDaGFyVCogYURhdGFF
bmQsIHNpemVfdHlwZSBhU3RvcmFnZUxlbmd0aCwgUFJCb29sIGlzU2luZ2xlQWxsb2NhdGlvbiAp
CiAgICAgICAgICA6IG5zQnVmZmVySGFuZGxlPENoYXJUPihhRGF0YVN0YXJ0LCBhRGF0YUVuZCks
CiAgICAgICAgICAgIG1GbGFncygwKSwKICAgICAgICAgICAgbVN0b3JhZ2VMZW5ndGgoYVN0b3Jh
Z2VMZW5ndGgpCiAgICAgICAgewogICAgICAgICAgaWYgKCBpc1NpbmdsZUFsbG9jYXRpb24gKQog
ICAgICAgICAgICBtRmxhZ3MgfD0ga0lzU2luZ2xlQWxsb2NhdGlvbldpdGhCdWZmZXI7CiAgICAg
ICAgfQoKICAgICAgfm5zU2hhcmVkQnVmZmVySGFuZGxlKCk7CgogICAgICB2b2lkCiAgICAgIEFj
cXVpcmVSZWZlcmVuY2UoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIG5zU2hhcmVkQnVmZmVy
SGFuZGxlPENoYXJUPiogbXV0YWJsZV90aGlzID0gY29uc3RfY2FzdDwgbnNTaGFyZWRCdWZmZXJI
YW5kbGU8Q2hhclQ+KiA+KHRoaXMpOwogICAgICAgICAgbXV0YWJsZV90aGlzLT5zZXRfcmVmY291
bnQoIGdldF9yZWZjb3VudCgpKzEgKTsKICAgICAgICB9CgogICAgICB2b2lkIFJlbGVhc2VSZWZl
cmVuY2UoKSBjb25zdDsKCiAgICAgIFBSQm9vbAogICAgICBJc1JlZmVyZW5jZWQoKSBjb25zdAog
ICAgICAgIHsKICAgICAgICAgIHJldHVybiBnZXRfcmVmY291bnQoKSAhPSAwOwogICAgICAgIH0K
CiAgICAgIFBSQm9vbAogICAgICBJc011dGFibGUoKSBjb25zdAogICAgICAgIHsKCiAgICAgICAg
ICByZXR1cm4gKG1GbGFncyAmIChrUmVmQ291bnRNYXNrIHwga0lzSW1tdXRhYmxlKSA9PSAxKTsK
ICAgICAgICB9CgogICAgICB2b2lkIFN0b3JhZ2VMZW5ndGgoIHNpemVfdHlwZSBhTmV3U3RvcmFn
ZUxlbmd0aCApCiAgICAgICAgewogICAgICAgICAgbVN0b3JhZ2VMZW5ndGggPSBhTmV3U3RvcmFn
ZUxlbmd0aDsKICAgICAgICB9CgogICAgICBzaXplX3R5cGUKICAgICAgU3RvcmFnZUxlbmd0aCgp
IGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1TdG9yYWdlTGVuZ3RoOwogICAgICAg
IH0KCiAgICAgIFBSVWludDMyCiAgICAgIEdldEltcGxlbWVudGF0aW9uRmxhZ3MoKSBjb25zdAog
ICAgICAgIHsKICAgICAgICAgIHJldHVybiBtRmxhZ3MgJiBrSW1wbGVtZW50YXRpb25GbGFnc01h
c2s7CiAgICAgICAgfQoKICAgICAgdm9pZAogICAgICBTZXRJbXBsZW1lbnRhdGlvbkZsYWdzKCBQ
UlVpbnQzMiBhTmV3RmxhZ3MgKQogICAgICAgIHsKICAgICAgICAgIG1GbGFncyA9IChtRmxhZ3Mg
JiB+a0ltcGxlbWVudGF0aW9uRmxhZ3NNYXNrKSB8IChhTmV3RmxhZ3MgJiBrSW1wbGVtZW50YXRp
b25GbGFnc01hc2spOwogICAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIFBSVWludDMyIG1G
bGFnczsKICAgICAgc2l6ZV90eXBlIG1TdG9yYWdlTGVuZ3RoOwoKICAgICAgUFJVaW50MzIKICAg
ICAgZ2V0X3JlZmNvdW50KCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gbUZsYWdz
ICYga1JlZkNvdW50TWFzazsKICAgICAgICB9CgogICAgICBQUlVpbnQzMgogICAgICBzZXRfcmVm
Y291bnQoIFBSVWludDMyIGFOZXdSZWZDb3VudCApCiAgICAgICAgewogICAgICAgICAgOwoKICAg
ICAgICAgIG1GbGFncyA9IChtRmxhZ3MgJiBrRmxhZ3NNYXNrKSB8IGFOZXdSZWZDb3VudDsKICAg
ICAgICAgIHJldHVybiBhTmV3UmVmQ291bnQ7CiAgICAgICAgfQoKICAgICAgbnNTdHJpbmdBbGxv
Y2F0b3I8Q2hhclQ+JiBnZXRfYWxsb2NhdG9yKCkgY29uc3Q7CiAgfTsKCgp0ZW1wbGF0ZSA8Y2xh
c3MgQ2hhclQ+CmNsYXNzIG5zU2hhcmVkQnVmZmVySGFuZGxlV2l0aEFsbG9jYXRvcgogICAgOiBw
dWJsaWMgbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+CiAgewogICAgcHVibGljOgoKICAgICAg
dHlwZWRlZiBQUlVpbnQzMiBzaXplX3R5cGU7CgogICAgICBuc1NoYXJlZEJ1ZmZlckhhbmRsZVdp
dGhBbGxvY2F0b3IoIENoYXJUKiBhRGF0YVN0YXJ0LCBDaGFyVCogYURhdGFFbmQsIHNpemVfdHlw
ZSBhU3RvcmFnZUxlbmd0aCwgbnNTdHJpbmdBbGxvY2F0b3I8Q2hhclQ+JiBhQWxsb2NhdG9yICkK
ICAgICAgICAgIDogbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KGFEYXRhU3RhcnQsIGFEYXRh
RW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVN0b3JhZ2VMZW5n
dGgsIDApLAogICAgICAgICAgICBtQWxsb2NhdG9yKGFBbGxvY2F0b3IpCiAgICAgICAgewogICAg
ICAgICAgdGhpcy0+bUZsYWdzIHw9IHRoaXMtPmtJc1VzZXJBbGxvY2F0b3I7CiAgICAgICAgfQoK
ICAgICAgbnNTdHJpbmdBbGxvY2F0b3I8Q2hhclQ+JiBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbUFsbG9jYXRvcjsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgbnNTdHJpbmdBbGxvY2F0
b3I8Q2hhclQ+JiBtQWxsb2NhdG9yOwogIH07CgoKCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4KY2xh
c3MgbnNTaGFyZWRCdWZmZXJIYW5kbGVXaXRoRGVzdHJveQogICAgOiBwdWJsaWMgbnNTaGFyZWRC
dWZmZXJIYW5kbGU8Q2hhclQ+CiAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBQUlVpbnQz
MiBzaXplX3R5cGU7CgogICAgICBuc1NoYXJlZEJ1ZmZlckhhbmRsZVdpdGhEZXN0cm95KCBDaGFy
VCogYURhdGFTdGFydCwgQ2hhclQqIGFEYXRhRW5kLCBzaXplX3R5cGUgYVN0b3JhZ2VMZW5ndGgp
CiAgICAgICAgICA6IG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPihhRGF0YVN0YXJ0LCBhRGF0
YUVuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFTdG9yYWdlTGVu
Z3RoLCAwKQogICAgICAgIHsKICAgICAgICAgIHRoaXMtPm1GbGFncyB8PQogICAgICAgICAgICAg
IHRoaXMtPmtJc1VzZXJBbGxvY2F0b3IgfCB0aGlzLT5rSXNTaW5nbGVBbGxvY2F0aW9uV2l0aEJ1
ZmZlcjsKICAgICAgICB9CgogICAgICB2aXJ0dWFsIHZvaWQgRGVzdHJveSgpID0gMDsKCgoKCiAg
ICAgIHZpcnR1YWwgfm5zU2hhcmVkQnVmZmVySGFuZGxlV2l0aERlc3Ryb3koKSB7IH0KCgogIH07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmNsYXNzIG5zTm9uRGVzdHJ1Y3RpbmdTaGFyZWRCdWZm
ZXJIYW5kbGUKICAgIDogcHVibGljIG5zU2hhcmVkQnVmZmVySGFuZGxlV2l0aERlc3Ryb3k8Q2hh
clQ+CiAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBQUlVpbnQzMiBzaXplX3R5cGU7Cgog
ICAgICBuc05vbkRlc3RydWN0aW5nU2hhcmVkQnVmZmVySGFuZGxlKCBDaGFyVCogYURhdGFTdGFy
dCwgQ2hhclQqIGFEYXRhRW5kLCBzaXplX3R5cGUgYVN0b3JhZ2VMZW5ndGgpCiAgICAgICAgICA6
IG5zU2hhcmVkQnVmZmVySGFuZGxlV2l0aERlc3Ryb3k8Q2hhclQ+KGFEYXRhU3RhcnQsIGFEYXRh
RW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
U3RvcmFnZUxlbmd0aCkKICAgICAgICB7CiAgICAgICAgfQoKICAgICAgdmlydHVhbCB2b2lkIERl
c3Ryb3koKQogICAgICAgIHsKCgogICAgICAgICAgdGhpcy0+c2V0X3JlZmNvdW50KDEpOwogICAg
ICAgIH0KCiAgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+Cm5zU3RyaW5nQWxsb2NhdG9yPENo
YXJUPiYKbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+OjpnZXRfYWxsb2NhdG9yKCkgY29uc3QK
CiAgewogICAgaWYgKCBtRmxhZ3MgJiBrSXNVc2VyQWxsb2NhdG9yICkKICAgICAgewogICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PCBjb25zdCBuc1NoYXJlZEJ1ZmZlckhhbmRsZVdpdGhB
bGxvY2F0b3I8Q2hhclQ+KiA+KHRoaXMpLT5nZXRfYWxsb2NhdG9yKCk7CiAgICAgIH0KCiAgICBy
ZXR1cm4gbnNTdHJpbmdBbGxvY2F0b3JUcmFpdHM8Q2hhclQ+OjpnbG9iYWxfc3RyaW5nX2FsbG9j
YXRvcigpOwogIH0KCgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+Cm5zU2hhcmVkQnVmZmVySGFuZGxl
PENoYXJUPjo6fm5zU2hhcmVkQnVmZmVySGFuZGxlKCkKCiAgewogICAgOwoKICAgIGlmICggISht
RmxhZ3MgJiBrSXNTaW5nbGVBbGxvY2F0aW9uV2l0aEJ1ZmZlcikgKQogICAgICB7CiAgICAgICAg
Q2hhclQqIHN0cmluZ19zdG9yYWdlID0gdGhpcy0+bURhdGFTdGFydDsKICAgICAgICBnZXRfYWxs
b2NhdG9yKCkuRGVhbGxvY2F0ZShzdHJpbmdfc3RvcmFnZSk7CiAgICAgIH0KICB9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgQ2hhclQ+CnZvaWQKbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+OjpSZWxlYXNl
UmVmZXJlbmNlKCkgY29uc3QKICB7CiAgICBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD4qIG11
dGFibGVfdGhpcyA9IGNvbnN0X2Nhc3Q8IG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPiogPih0
aGlzKTsKICAgIGlmICggIW11dGFibGVfdGhpcy0+c2V0X3JlZmNvdW50KCBnZXRfcmVmY291bnQo
KS0xICkgKQogICAgICB7CiAgICAgICAgaWYgKCB+bUZsYWdzICYgKGtJc1VzZXJBbGxvY2F0b3J8
a0lzU2luZ2xlQWxsb2NhdGlvbldpdGhCdWZmZXIpICkKICAgICAgICAgIGRlbGV0ZSBtdXRhYmxl
X3RoaXM7CiAgICAgICAgZWxzZQoKCgogICAgICAgICAgc3RhdGljX2Nhc3Q8IG5zU2hhcmVkQnVm
ZmVySGFuZGxlV2l0aERlc3Ryb3k8Q2hhclQ+KiA+KG11dGFibGVfdGhpcyktPkRlc3Ryb3koKTsK
CiAgICAgIH0KICB9CiMgMzMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNBU3RyaW5n
LmgiIDIKCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zQ2hhclRyYWl0cy5o
IiAxCiMgNDYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNDaGFyVHJhaXRzLmgiCiMg
MSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIg
MwpleHRlcm4gIkMiIHsKIyA0OCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZW51bQp7CiAgX0lT
dXBwZXIgPSAoKDApIDwgOCA/ICgoMSA8PCAoMCkpIDw8IDgpIDogKCgxIDw8ICgwKSkgPj4gOCkp
LAogIF9JU2xvd2VyID0gKCgxKSA8IDggPyAoKDEgPDwgKDEpKSA8PCA4KSA6ICgoMSA8PCAoMSkp
ID4+IDgpKSwKICBfSVNhbHBoYSA9ICgoMikgPCA4ID8gKCgxIDw8ICgyKSkgPDwgOCkgOiAoKDEg
PDwgKDIpKSA+PiA4KSksCiAgX0lTZGlnaXQgPSAoKDMpIDwgOCA/ICgoMSA8PCAoMykpIDw8IDgp
IDogKCgxIDw8ICgzKSkgPj4gOCkpLAogIF9JU3hkaWdpdCA9ICgoNCkgPCA4ID8gKCgxIDw8ICg0
KSkgPDwgOCkgOiAoKDEgPDwgKDQpKSA+PiA4KSksCiAgX0lTc3BhY2UgPSAoKDUpIDwgOCA/ICgo
MSA8PCAoNSkpIDw8IDgpIDogKCgxIDw8ICg1KSkgPj4gOCkpLAogIF9JU3ByaW50ID0gKCg2KSA8
IDggPyAoKDEgPDwgKDYpKSA8PCA4KSA6ICgoMSA8PCAoNikpID4+IDgpKSwKICBfSVNncmFwaCA9
ICgoNykgPCA4ID8gKCgxIDw8ICg3KSkgPDwgOCkgOiAoKDEgPDwgKDcpKSA+PiA4KSksCiAgX0lT
YmxhbmsgPSAoKDgpIDwgOCA/ICgoMSA8PCAoOCkpIDw8IDgpIDogKCgxIDw8ICg4KSkgPj4gOCkp
LAogIF9JU2NudHJsID0gKCg5KSA8IDggPyAoKDEgPDwgKDkpKSA8PCA4KSA6ICgoMSA8PCAoOSkp
ID4+IDgpKSwKICBfSVNwdW5jdCA9ICgoMTApIDwgOCA/ICgoMSA8PCAoMTApKSA8PCA4KSA6ICgo
MSA8PCAoMTApKSA+PiA4KSksCiAgX0lTYWxudW0gPSAoKDExKSA8IDggPyAoKDEgPDwgKDExKSkg
PDwgOCkgOiAoKDEgPDwgKDExKSkgPj4gOCkpCn07CiMgODEgIi91c3IvaW5jbHVkZS9jdHlwZS5o
IiAzCmV4dGVybiBfX2NvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqKl9fY3R5cGVfYl9sb2MgKHZv
aWQpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3QpKTsKZXh0ZXJuIF9fY29uc3QgX19pbnQz
Ml90ICoqX19jdHlwZV90b2xvd2VyX2xvYyAodm9pZCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdCkpOwpleHRlcm4gX19jb25zdCBfX2ludDMyX3QgKipfX2N0eXBlX3RvdXBwZXJfbG9jICh2
b2lkKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0KSk7CiMgOTYgIi91c3IvaW5jbHVkZS9j
dHlwZS5oIiAzCgoKCgoKCmV4dGVybiBpbnQgaXNhbG51bSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBpc2FscGhhIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzY250cmwgKGludCkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgaXNkaWdpdCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2xv
d2VyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzZ3JhcGggKGludCkgdGhyb3cgKCk7CmV4
dGVybiBpbnQgaXNwcmludCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3B1bmN0IChpbnQp
IHRocm93ICgpOwpleHRlcm4gaW50IGlzc3BhY2UgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg
aXN1cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3hkaWdpdCAoaW50KSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCB0b2xvd2VyIChpbnQgX19jKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHRvdXBwZXIgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBpbnQgaXNibGFuayAo
aW50KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBpc2N0eXBlIChpbnQgX19jLCBpbnQgX19t
YXNrKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBpc2FzY2lpIChpbnQgX19jKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCB0b2FzY2lpIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu
dCBfdG91cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfdG9sb3dlciAoaW50KSB0aHJv
dyAoKTsKIyAyNDcgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBpbnQgaXNhbG51bV9s
IChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IGlzYWxwaGFfbCAoaW50LCBf
X2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2NudHJsX2wgKGludCwgX19sb2NhbGVf
dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNkaWdpdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93
ICgpOwpleHRlcm4gaW50IGlzbG93ZXJfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBpc2dyYXBoX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg
aXNwcmludF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IGlzcHVuY3Rf
bCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3NwYWNlX2wgKGludCwg
X19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN1cHBlcl9sIChpbnQsIF9fbG9jYWxl
X3QpIHRocm93ICgpOwpleHRlcm4gaW50IGlzeGRpZ2l0X2wgKGludCwgX19sb2NhbGVfdCkgdGhy
b3cgKCk7CgpleHRlcm4gaW50IGlzYmxhbmtfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGludCBfX3RvbG93ZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93
ICgpOwpleHRlcm4gaW50IHRvbG93ZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgX190b3VwcGVyX2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSB0
aHJvdyAoKTsKZXh0ZXJuIGludCB0b3VwcGVyX2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSB0
aHJvdyAoKTsKIyAzMjMgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCn0KIyA0NyAiLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL3N0cmluZy9uc0NoYXJUcmFpdHMuaCIgMgojIDcwICIuLi8uLi8uLi9kaXN0
L2luY2x1ZGUvc3RyaW5nL25zQ2hhclRyYWl0cy5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9zdHJpbmcvbnNTdHJpbmdJdGVyYXRvclV0aWxzLmgiIDEKIyAzMSAiLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL3N0cmluZy9uc1N0cmluZ0l0ZXJhdG9yVXRpbHMuaCIKdGVtcGxhdGUgPGNsYXNzIEl0
ZXJhdG9yPgppbmxpbmUKUFJCb29sClNhbWVGcmFnbWVudCggY29uc3QgSXRlcmF0b3ImIGxocywg
Y29uc3QgSXRlcmF0b3ImIHJocyApCiAgewogICAgcmV0dXJuIGxocy5mcmFnbWVudCgpLm1TdGFy
dCA9PSByaHMuZnJhZ21lbnQoKS5tU3RhcnQ7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPiBj
bGFzcyBuc1JlYWRpbmdJdGVyYXRvcjsKCgoKCiBzaXplX3QgRGlzdGFuY2UoIGNvbnN0IG5zUmVh
ZGluZ0l0ZXJhdG9yPFBSVW5pY2hhcj4mLCBjb25zdCBuc1JlYWRpbmdJdGVyYXRvcjxQUlVuaWNo
YXI+JiApOwogc2l6ZV90IERpc3RhbmNlKCBjb25zdCBuc1JlYWRpbmdJdGVyYXRvcjxjaGFyPiYs
IGNvbnN0IG5zUmVhZGluZ0l0ZXJhdG9yPGNoYXI+JiApOwojIDcxICIuLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvc3RyaW5nL25zQ2hhclRyYWl0cy5oIiAyCgoKCgoKICB0eXBlZGVmIFBSQm9vbCBuc0No
YXJUcmFpdHNfYm9vbDsKCgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+IHN0cnVjdCBuc0NoYXJUcmFp
dHMge307Cgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgbnNDaGFyVHJhaXRzPFBSVW5pY2hhcj4KICB7CiAg
ICB0eXBlZGVmIFBSVW5pY2hhciBjaGFyX3R5cGU7CiAgICB0eXBlZGVmIFBSVWludDE2IHVuc2ln
bmVkX2NoYXJfdHlwZTsKICAgIHR5cGVkZWYgY2hhciBpbmNvbXBhdGlibGVfY2hhcl90eXBlOwoK
ICAgIHN0YXRpYwogICAgdm9pZAogICAgYXNzaWduKCBjaGFyX3R5cGUmIGxocywgY2hhcl90eXBl
IHJocyApCiAgICAgIHsKICAgICAgICBsaHMgPSByaHM7CiAgICAgIH0KCgoKCgoKCiAgICB0eXBl
ZGVmIGludCBpbnRfdHlwZTsKCgogICAgc3RhdGljCiAgICBjaGFyX3R5cGUKICAgIHRvX2NoYXJf
dHlwZSggaW50X3R5cGUgYyApCiAgICAgIHsKICAgICAgICByZXR1cm4gY2hhcl90eXBlKGMpOwog
ICAgICB9CgogICAgc3RhdGljCiAgICBpbnRfdHlwZQogICAgdG9faW50X3R5cGUoIGNoYXJfdHlw
ZSBjICkKICAgICAgewogICAgICAgIHJldHVybiBpbnRfdHlwZSggc3RhdGljX2Nhc3Q8IHVuc2ln
bmVkX2NoYXJfdHlwZSA+KGMpICk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIG5zQ2hhclRyYWl0
c19ib29sCiAgICBlcV9pbnRfdHlwZSggaW50X3R5cGUgbGhzLCBpbnRfdHlwZSByaHMgKQogICAg
ICB7CiAgICAgICAgcmV0dXJuIGxocyA9PSByaHM7CiAgICAgIH0KCgoKCiAgICBzdGF0aWMKICAg
IG5zQ2hhclRyYWl0c19ib29sCiAgICBlcSggY2hhcl90eXBlIGxocywgY2hhcl90eXBlIHJocyAp
CiAgICAgIHsKICAgICAgICByZXR1cm4gbGhzID09IHJoczsKICAgICAgfQoKICAgIHN0YXRpYwog
ICAgbnNDaGFyVHJhaXRzX2Jvb2wKICAgIGx0KCBjaGFyX3R5cGUgbGhzLCBjaGFyX3R5cGUgcmhz
ICkKICAgICAgewogICAgICAgIHJldHVybiBsaHMgPCByaHM7CiAgICAgIH0KCgoKCiAgICBzdGF0
aWMKICAgIGNoYXJfdHlwZSoKICAgIG1vdmUoIGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlw
ZSogczIsIHNpemVfdCBuICkKICAgICAgewogICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDwgY2hh
cl90eXBlKiA+KG1lbW1vdmUoczEsIHMyLCBuICogc2l6ZW9mKGNoYXJfdHlwZSkpKTsKICAgICAg
fQoKICAgIHN0YXRpYwogICAgY2hhcl90eXBlKgogICAgY29weSggY2hhcl90eXBlKiBzMSwgY29u
c3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4gKQogICAgICB7CiAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PCBjaGFyX3R5cGUqID4obWVtY3B5KHMxLCBzMiwgbiAqIHNpemVvZihjaGFyX3R5cGUp
KSk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNoYXJfdHlwZSoKICAgIGFzc2lnbiggY2hhcl90
eXBlKiBzLCBzaXplX3QgbiwgY2hhcl90eXBlIGMgKQogICAgICB7CgoKCiAgICAgICAgY2hhcl90
eXBlKiByZXN1bHQgPSBzOwogICAgICAgIHdoaWxlICggbi0tICkKICAgICAgICAgIGFzc2lnbigq
cysrLCBjKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwoKICAgICAgfQoKICAgIHN0YXRpYwogICAg
aW50CiAgICBjb21wYXJlKCBjb25zdCBjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMy
LCBzaXplX3QgbiApCiAgICAgIHsKCgoKICAgICAgICBmb3IgKCA7IG4tLTsgKytzMSwgKytzMiAp
CiAgICAgICAgICB7CiAgICAgICAgICAgIGlmICggbHQoKnMxLCAqczIpICkKICAgICAgICAgICAg
ICByZXR1cm4gLTE7CiAgICAgICAgICAgIGlmICggbHQoKnMyLCAqczEpICkKICAgICAgICAgICAg
ICByZXR1cm4gMTsKICAgICAgICAgIH0KCiAgICAgICAgcmV0dXJuIDA7CgogICAgICB9CgogICAg
c3RhdGljCiAgICBzaXplX3QKICAgIGxlbmd0aCggY29uc3QgY2hhcl90eXBlKiBzICkKICAgICAg
ewoKCgogICAgICAgIHNpemVfdCByZXN1bHQgPSAwOwogICAgICAgIHdoaWxlICggIWVxKCpzKyss
IGNoYXJfdHlwZSgwKSkgKQogICAgICAgICAgKytyZXN1bHQ7CiAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKCiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgIGZpbmQoIGNv
bnN0IGNoYXJfdHlwZSogcywgc2l6ZV90IG4sIGNoYXJfdHlwZSBjICkKICAgICAgewoKCgogICAg
ICAgIHdoaWxlICggbi0tICkKICAgICAgICAgIHsKICAgICAgICAgICAgaWYgKCBlcSgqcywgYykg
KQogICAgICAgICAgICAgIHJldHVybiBzOwogICAgICAgICAgICArK3M7CiAgICAgICAgICB9Cgog
ICAgICAgIHJldHVybiAwOwoKICAgICAgfQojIDI1MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0
cmluZy9uc0NoYXJUcmFpdHMuaCIKICB9OwoKdGVtcGxhdGUgPD4Kc3RydWN0IG5zQ2hhclRyYWl0
czxjaGFyPgogIHsKICAgIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7CiAgICB0eXBlZGVmIHVuc2ln
bmVkIGNoYXIgdW5zaWduZWRfY2hhcl90eXBlOwogICAgdHlwZWRlZiBQUlVuaWNoYXIgaW5jb21w
YXRpYmxlX2NoYXJfdHlwZTsKCiAgICBzdGF0aWMKICAgIHZvaWQKICAgIGFzc2lnbiggY2hhcl90
eXBlJiBsaHMsIGNoYXJfdHlwZSByaHMgKQogICAgICB7CiAgICAgICAgbGhzID0gcmhzOwogICAg
ICB9CgoKCgogICAgdHlwZWRlZiBpbnQgaW50X3R5cGU7CgogICAgc3RhdGljCiAgICBjaGFyX3R5
cGUKICAgIHRvX2NoYXJfdHlwZSggaW50X3R5cGUgYyApCiAgICAgIHsKICAgICAgICByZXR1cm4g
Y2hhcl90eXBlKGMpOwogICAgICB9CgogICAgc3RhdGljCiAgICBpbnRfdHlwZQogICAgdG9faW50
X3R5cGUoIGNoYXJfdHlwZSBjICkKICAgICAgewogICAgICAgIHJldHVybiBpbnRfdHlwZSggc3Rh
dGljX2Nhc3Q8IHVuc2lnbmVkX2NoYXJfdHlwZSA+KGMpICk7CiAgICAgIH0KCiAgICBzdGF0aWMK
ICAgIG5zQ2hhclRyYWl0c19ib29sCiAgICBlcV9pbnRfdHlwZSggaW50X3R5cGUgbGhzLCBpbnRf
dHlwZSByaHMgKQogICAgICB7CiAgICAgICAgcmV0dXJuIGxocyA9PSByaHM7CiAgICAgIH0KCgoK
CiAgICBzdGF0aWMKICAgIG5zQ2hhclRyYWl0c19ib29sCiAgICBlcSggY2hhcl90eXBlIGxocywg
Y2hhcl90eXBlIHJocyApCiAgICAgIHsKICAgICAgICByZXR1cm4gbGhzID09IHJoczsKICAgICAg
fQoKICAgIHN0YXRpYwogICAgbnNDaGFyVHJhaXRzX2Jvb2wKICAgIGx0KCBjaGFyX3R5cGUgbGhz
LCBjaGFyX3R5cGUgcmhzICkKICAgICAgewogICAgICAgIHJldHVybiBsaHMgPCByaHM7CiAgICAg
IH0KCgoKCiAgICBzdGF0aWMKICAgIGNoYXJfdHlwZSoKICAgIG1vdmUoIGNoYXJfdHlwZSogczEs
IGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuICkKICAgICAgewogICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDwgY2hhcl90eXBlKiA+KG1lbW1vdmUoczEsIHMyLCBuICogc2l6ZW9mKGNoYXJf
dHlwZSkpKTsKICAgICAgfQoKICAgIHN0YXRpYwogICAgY2hhcl90eXBlKgogICAgY29weSggY2hh
cl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4gKQogICAgICB7CiAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjaGFyX3R5cGUqID4obWVtY3B5KHMxLCBzMiwgbiAqIHNp
emVvZihjaGFyX3R5cGUpKSk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNoYXJfdHlwZSoKICAg
IGFzc2lnbiggY2hhcl90eXBlKiBzLCBzaXplX3QgbiwgY2hhcl90eXBlIGMgKQogICAgICB7CiAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjaGFyX3R5cGUqID4obWVtc2V0KHMsIHRvX2ludF90
eXBlKGMpLCBuKSk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGludAogICAgY29tcGFyZSggY29u
c3QgY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4gKQogICAgICB7
CiAgICAgICAgcmV0dXJuIG1lbWNtcChzMSwgczIsIG4pOwogICAgICB9CgogICAgc3RhdGljCiAg
ICBzaXplX3QKICAgIGxlbmd0aCggY29uc3QgY2hhcl90eXBlKiBzICkKICAgICAgewogICAgICAg
IHJldHVybiBzdHJsZW4ocyk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIGNvbnN0IGNoYXJfdHlw
ZSoKICAgIGZpbmQoIGNvbnN0IGNoYXJfdHlwZSogcywgc2l6ZV90IG4sIGNoYXJfdHlwZSBjICkK
ICAgICAgewogICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBjb25zdCBjaGFyX3R5cGUq
ID4obWVtY2hyKHMsIHRvX2ludF90eXBlKGMpLCBuKSk7CiAgICAgIH0KIyAzNzggIi4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNDaGFyVHJhaXRzLmgiCiAgfTsKCnRlbXBsYXRlIDxjbGFz
cyBJbnB1dEl0ZXJhdG9yPgpzdHJ1Y3QgbnNDaGFyU291cmNlVHJhaXRzCiAgewogICAgdHlwZWRl
ZiB0eXBlbmFtZSBJbnB1dEl0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBl
OwojIDM5NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0NoYXJUcmFpdHMuaCIKICAg
IHN0YXRpYwogICAgUFJVaW50MzIKICAgIHJlYWRhYmxlX2Rpc3RhbmNlKCBjb25zdCBJbnB1dEl0
ZXJhdG9yJiBpdGVyICkKICAgICAgewogICAgICAgIHJldHVybiBpdGVyLnNpemVfZm9yd2FyZCgp
OwogICAgICB9CgogICAgc3RhdGljCiAgICBQUlVpbnQzMgogICAgcmVhZGFibGVfZGlzdGFuY2Uo
IGNvbnN0IElucHV0SXRlcmF0b3ImIGZpcnN0LCBjb25zdCBJbnB1dEl0ZXJhdG9yJiBsYXN0ICkK
ICAgICAgewogICAgICAgIHJldHVybiBQUlVpbnQzMihTYW1lRnJhZ21lbnQoZmlyc3QsIGxhc3Qp
ID8gbGFzdC5nZXQoKS1maXJzdC5nZXQoKSA6IGZpcnN0LnNpemVfZm9yd2FyZCgpKTsKICAgICAg
fQoKICAgIHN0YXRpYwogICAgY29uc3QgdHlwZW5hbWUgSW5wdXRJdGVyYXRvcjo6dmFsdWVfdHlw
ZSoKICAgIHJlYWQoIGNvbnN0IElucHV0SXRlcmF0b3ImIGl0ZXIgKQogICAgICB7CiAgICAgICAg
cmV0dXJuIGl0ZXIuZ2V0KCk7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIHZvaWQKICAgIGFkdmFu
Y2UoIElucHV0SXRlcmF0b3ImIHMsIGRpZmZlcmVuY2VfdHlwZSBuICkKICAgICAgewogICAgICAg
IHMuYWR2YW5jZShuKTsKICAgICAgfQogIH07CgoKCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4Kc3Ry
dWN0IG5zQ2hhclNvdXJjZVRyYWl0czxDaGFyVCo+CiAgewogICAgdHlwZWRlZiBwdHJkaWZmX3Qg
ZGlmZmVyZW5jZV90eXBlOwojIDQzOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0No
YXJUcmFpdHMuaCIKICAgIHN0YXRpYwogICAgUFJVaW50MzIKICAgIHJlYWRhYmxlX2Rpc3RhbmNl
KCBDaGFyVCogcyApCiAgICAgIHsKICAgICAgICByZXR1cm4gUFJVaW50MzIobnNDaGFyVHJhaXRz
PENoYXJUPjo6bGVuZ3RoKHMpKTsKCiAgICAgIH0KCiAgICBzdGF0aWMKICAgIFBSVWludDMyCiAg
ICByZWFkYWJsZV9kaXN0YW5jZSggQ2hhclQqIGZpcnN0LCBDaGFyVCogbGFzdCApCiAgICAgIHsK
ICAgICAgICByZXR1cm4gUFJVaW50MzIobGFzdC1maXJzdCk7CiAgICAgIH0KCiAgICBzdGF0aWMK
ICAgIGNvbnN0IENoYXJUKgogICAgcmVhZCggQ2hhclQqIHMgKQogICAgICB7CiAgICAgICAgcmV0
dXJuIHM7CiAgICAgIH0KCiAgICBzdGF0aWMKICAgIHZvaWQKICAgIGFkdmFuY2UoIENoYXJUKiYg
cywgZGlmZmVyZW5jZV90eXBlIG4gKQogICAgICB7CiAgICAgICAgcyArPSBuOwogICAgICB9CiAg
fTsKIyA1NjMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNDaGFyVHJhaXRzLmgiCnRl
bXBsYXRlIDxjbGFzcyBPdXRwdXRJdGVyYXRvcj4Kc3RydWN0IG5zQ2hhclNpbmtUcmFpdHMKICB7
CiAgICBzdGF0aWMKICAgIFBSVWludDMyCiAgICB3cml0ZSggT3V0cHV0SXRlcmF0b3ImIGl0ZXIs
IGNvbnN0IHR5cGVuYW1lIE91dHB1dEl0ZXJhdG9yOjp2YWx1ZV90eXBlKiBzLCBQUlVpbnQzMiBu
ICkKICAgICAgewogICAgICAgIHJldHVybiBpdGVyLndyaXRlKHMsIG4pOwogICAgICB9CiAgfTsK
CgoKdGVtcGxhdGUgPGNsYXNzIENoYXJUPgpzdHJ1Y3QgbnNDaGFyU2lua1RyYWl0czxDaGFyVCo+
CiAgewogICAgc3RhdGljCiAgICBQUlVpbnQzMgogICAgd3JpdGUoIENoYXJUKiYgaXRlciwgY29u
c3QgQ2hhclQqIHMsIFBSVWludDMyIG4gKQogICAgICB7CiAgICAgICAgbnNDaGFyVHJhaXRzPENo
YXJUPjo6bW92ZShpdGVyLCBzLCBuKTsKICAgICAgICBpdGVyICs9IG47CiAgICAgICAgcmV0dXJu
IG47CiAgICAgIH0KICB9OwojIDM3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zQVN0
cmluZy5oIiAyCgoKCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZ0l0
ZXJhdG9yLmgiIDEKIyAyOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZ0l0
ZXJhdG9yLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZ0ZyYWdt
ZW50LmgiIDEKIyA0MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZ0ZyYWdt
ZW50LmgiCmVudW0gbnNGcmFnbWVudFJlcXVlc3QgeyBrUHJldkZyYWdtZW50LCBrRmlyc3RGcmFn
bWVudCwga0xhc3RGcmFnbWVudCwga05leHRGcmFnbWVudCwga0ZyYWdtZW50QXQgfTsKIyA1NyAi
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZ0ZyYWdtZW50LmgiCnRlbXBsYXRl
IDxjbGFzcyBDaGFyVD4Kc3RydWN0IG5zUmVhZGFibGVGcmFnbWVudAogIHsKICAgIGNvbnN0IENo
YXJUKiBtU3RhcnQ7CiAgICBjb25zdCBDaGFyVCogbUVuZDsKICAgIGNvbnN0IHZvaWQqIG1GcmFn
bWVudElkZW50aWZpZXI7CgogICAgbnNSZWFkYWJsZUZyYWdtZW50KCkKICAgICAgICA6IG1TdGFy
dCgwKSwgbUVuZCgwKSwgbUZyYWdtZW50SWRlbnRpZmllcigwKQogICAgICB7CgogICAgICB9Cgog
ICAgY29uc3Qgdm9pZCoKICAgIEdldElEKCkgY29uc3QKICAgICAgewogICAgICAgIHJldHVybiBt
RnJhZ21lbnRJZGVudGlmaWVyOwogICAgICB9CgogICAgdW5zaWduZWQgbG9uZwogICAgR2V0SURB
c0ludCgpIGNvbnN0CiAgICAgIHsKICAgICAgICB0eXBlZGVmIGNoYXIqIGNoYXJfcHRyOwogICAg
ICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB1bG9uZzsKICAgICAgICByZXR1cm4gdWxvbmcoY2hh
cl9wdHIobUZyYWdtZW50SWRlbnRpZmllciktY2hhcl9wdHIoMCkpOwogICAgICB9CgogICAgdm9p
ZAogICAgU2V0SUQoIGNvbnN0IHZvaWQqIGFJRCApCiAgICAgIHsKICAgICAgICBtRnJhZ21lbnRJ
ZGVudGlmaWVyID0gYUlEOwogICAgICB9CgogICAgdm9pZAogICAgU2V0SUQoIHVuc2lnbmVkIGxv
bmcgYUlEICkKICAgICAgewogICAgICAgIHR5cGVkZWYgY2hhciogY2hhcl9wdHI7CiAgICAgICAg
dHlwZWRlZiB2b2lkKiB2b2lkX3B0cjsKICAgICAgICBtRnJhZ21lbnRJZGVudGlmaWVyID0gdm9p
ZF9wdHIoY2hhcl9wdHIoMCkrYUlEKTsKICAgICAgfQogIH07CiMgMTEzICIuLi8uLi8uLi9kaXN0
L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nRnJhZ21lbnQuaCIKdGVtcGxhdGUgPGNsYXNzIENoYXJU
PgpzdHJ1Y3QgbnNXcml0YWJsZUZyYWdtZW50CiAgewogICAgQ2hhclQqIG1TdGFydDsKICAgIENo
YXJUKiBtRW5kOwogICAgdm9pZCogbUZyYWdtZW50SWRlbnRpZmllcjsKCiAgICBuc1dyaXRhYmxl
RnJhZ21lbnQoKQogICAgICAgIDogbVN0YXJ0KDApLCBtRW5kKDApLCBtRnJhZ21lbnRJZGVudGlm
aWVyKDApCiAgICAgIHsKCiAgICAgIH0KICB9OwojIDI5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv
c3RyaW5nL25zU3RyaW5nSXRlcmF0b3IuaCIgMgoKCgoKCgoKIyAxICIuLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvc3RyaW5nL25zU3RyaW5nVHJhaXRzLmgiIDEKIyA0NCAiLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL3N0cmluZy9uc1N0cmluZ1RyYWl0cy5oIgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CnN0cnVj
dCBuc1N0cmluZ1RyYWl0cwogIHsKICAgIHR5cGVkZWYgbnNBU3RyaW5nIGFic3RyYWN0X3N0cmlu
Z190eXBlOwogICAgdHlwZWRlZiBuc0FGbGF0U3RyaW5nIGFic3RyYWN0X2ZsYXRfdHlwZTsKICAg
IHR5cGVkZWYgY29uc3QgbnNEZXBlbmRlbnRTdHJpbmcgbGl0ZXJhbF9zdHJpbmdfdHlwZTsKICB9
OwojIDY0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nVHJhaXRzLmgiCnRl
bXBsYXRlIDw+CnN0cnVjdCBuc1N0cmluZ1RyYWl0czxjaGFyPgogIHsKICAgIHR5cGVkZWYgbnNB
Q1N0cmluZyBhYnN0cmFjdF9zdHJpbmdfdHlwZTsKICAgIHR5cGVkZWYgbnNBRmxhdENTdHJpbmcg
YWJzdHJhY3RfZmxhdF90eXBlOwogICAgdHlwZWRlZiBjb25zdCBuc0RlcGVuZGVudENTdHJpbmcg
bGl0ZXJhbF9zdHJpbmdfdHlwZTsKICB9OwojIDM3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3Ry
aW5nL25zU3RyaW5nSXRlcmF0b3IuaCIgMgoKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9z
dHJpbmcvbnNBbGdvcml0aG0uaCIgMQojIDUyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5n
L25zQWxnb3JpdGhtLmgiCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKY29uc3QgVCYKTlNfTUlO
KCBjb25zdCBUJiBhLCBjb25zdCBUJiBiICkKICB7CiAgICByZXR1cm4gYiA8IGEgPyBiIDogYTsK
ICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCmNvbnN0IFQmCk5TX01BWCggY29uc3QgVCYg
YSwgY29uc3QgVCYgYiApCiAgewogICAgcmV0dXJuIGEgPiBiID8gYSA6IGI7CiAgfQoKdGVtcGxh
dGUgPGNsYXNzIElucHV0SXRlcmF0b3IsIGNsYXNzIFQ+CmlubGluZQpQUlVpbnQzMgpOU19DT1VO
VCggSW5wdXRJdGVyYXRvciYgZmlyc3QsIGNvbnN0IElucHV0SXRlcmF0b3ImIGxhc3QsIGNvbnN0
IFQmIHZhbHVlICkKICB7CiAgICBQUlVpbnQzMiByZXN1bHQgPSAwOwogICAgZm9yICggOyBmaXJz
dCAhPSBsYXN0OyArK2ZpcnN0ICkKICAgICAgaWYgKCAqZmlyc3QgPT0gdmFsdWUgKQogICAgICAg
ICsrcmVzdWx0OwogICAgcmV0dXJuIHJlc3VsdDsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJ
dGVyYXRvciwgY2xhc3MgT3V0cHV0SXRlcmF0b3I+CmlubGluZQpPdXRwdXRJdGVyYXRvciYKY29w
eV9zdHJpbmcoIElucHV0SXRlcmF0b3ImIGZpcnN0LCBjb25zdCBJbnB1dEl0ZXJhdG9yJiBsYXN0
LCBPdXRwdXRJdGVyYXRvciYgcmVzdWx0ICkKICB7CiAgICB0eXBlZGVmIG5zQ2hhclNvdXJjZVRy
YWl0czxJbnB1dEl0ZXJhdG9yPiBzb3VyY2VfdHJhaXRzOwogICAgdHlwZWRlZiBuc0NoYXJTaW5r
VHJhaXRzPE91dHB1dEl0ZXJhdG9yPiBzaW5rX3RyYWl0czsKCiAgICB3aGlsZSAoIGZpcnN0ICE9
IGxhc3QgKQogICAgICB7CiAgICAgICAgUFJJbnQzMiBjb3VudF9jb3BpZWQgPSBQUkludDMyKHNp
bmtfdHJhaXRzOjp3cml0ZShyZXN1bHQsIHNvdXJjZV90cmFpdHM6OnJlYWQoZmlyc3QpLCBzb3Vy
Y2VfdHJhaXRzOjpyZWFkYWJsZV9kaXN0YW5jZShmaXJzdCwgbGFzdCkpKTsKICAgICAgICA7CiAg
ICAgICAgc291cmNlX3RyYWl0czo6YWR2YW5jZShmaXJzdCwgY291bnRfY29waWVkKTsKICAgICAg
fQoKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3Is
IGNsYXNzIE91dHB1dEl0ZXJhdG9yPgpPdXRwdXRJdGVyYXRvciYKY29weV9zdHJpbmdfYmFja3dh
cmQoIGNvbnN0IElucHV0SXRlcmF0b3ImIGZpcnN0LCBJbnB1dEl0ZXJhdG9yJiBsYXN0LCBPdXRw
dXRJdGVyYXRvciYgcmVzdWx0ICkKICB7CiAgICB3aGlsZSAoIGZpcnN0ICE9IGxhc3QgKQogICAg
ICB7CiAgICAgICAgbGFzdC5ub3JtYWxpemVfYmFja3dhcmQoKTsKICAgICAgICByZXN1bHQubm9y
bWFsaXplX2JhY2t3YXJkKCk7CiAgICAgICAgUFJVaW50MzIgbGVuZ3RoVG9Db3B5ID0gUFJVaW50
MzIoIE5TX01JTihsYXN0LnNpemVfYmFja3dhcmQoKSwgcmVzdWx0LnNpemVfYmFja3dhcmQoKSkg
KTsKICAgICAgICBpZiAoIGZpcnN0LmZyYWdtZW50KCkubVN0YXJ0ID09IGxhc3QuZnJhZ21lbnQo
KS5tU3RhcnQgKQogICAgICAgICAgbGVuZ3RoVG9Db3B5ID0gTlNfTUlOKGxlbmd0aFRvQ29weSwg
UFJVaW50MzIobGFzdC5nZXQoKSAtIGZpcnN0LmdldCgpKSk7CgogICAgICAgIDsKCgoKCgogICAg
ICAgIG5zQ2hhclRyYWl0czx0eXBlbmFtZSBPdXRwdXRJdGVyYXRvcjo6dmFsdWVfdHlwZT46Om1v
dmUocmVzdWx0LmdldCgpLWxlbmd0aFRvQ29weSwgbGFzdC5nZXQoKS1sZW5ndGhUb0NvcHksIGxl
bmd0aFRvQ29weSk7CgoKICAgICAgICBsYXN0LmFkdmFuY2UoIC1QUkludDMyKGxlbmd0aFRvQ29w
eSkgKTsKICAgICAgICByZXN1bHQuYWR2YW5jZSggLVBSSW50MzIobGVuZ3RoVG9Db3B5KSApOwog
ICAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9CiMgNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9zdHJpbmcvbnNTdHJpbmdJdGVyYXRvci5oIiAyCiMgNTYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9zdHJpbmcvbnNTdHJpbmdJdGVyYXRvci5oIgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmNsYXNz
IG5zUmVhZGluZ0l0ZXJhdG9yCgogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBwdHJkaWZm
X3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIENoYXJUIHZhbHVlX3R5cGU7CiAgICAg
IHR5cGVkZWYgY29uc3QgQ2hhclQqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3QgQ2hhclQm
IHJlZmVyZW5jZTsKCgogICAgICB0eXBlZGVmIG5zUmVhZGFibGVGcmFnbWVudDxDaGFyVD4gY29u
c3RfZnJhZ21lbnRfdHlwZTsKICAgICAgdHlwZWRlZiBuc1dyaXRhYmxlRnJhZ21lbnQ8Q2hhclQ+
IGZyYWdtZW50X3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgZnJpZW5kIGNsYXNzIG5zQVN0cmlu
ZzsKICAgICAgZnJpZW5kIGNsYXNzIG5zQUNTdHJpbmc7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
bnNTdHJpbmdUcmFpdHM8Q2hhclQ+OjphYnN0cmFjdF9zdHJpbmdfdHlwZSBhYnN0cmFjdF9zdHJp
bmdfdHlwZTsKCiAgICAgIGNvbnN0X2ZyYWdtZW50X3R5cGUgbUZyYWdtZW50OwogICAgICBjb25z
dCBDaGFyVCogbVBvc2l0aW9uOwogICAgICBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlwZSogbU93
bmluZ1N0cmluZzsKCiAgICBwdWJsaWM6CiAgICAgIG5zUmVhZGluZ0l0ZXJhdG9yKCkgeyB9CgoK
CiAgICAgIGlubGluZSB2b2lkIG5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICAgIGlubGluZSB2b2lk
IG5vcm1hbGl6ZV9iYWNrd2FyZCgpOwoKICAgICAgcG9pbnRlcgogICAgICBnZXQoKSBjb25zdAog
ICAgICAgIHsKICAgICAgICAgIHJldHVybiBtUG9zaXRpb247CiAgICAgICAgfQoKICAgICAgQ2hh
clQKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gKmdl
dCgpOwogICAgICAgIH0KIyAxMDkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJp
bmdJdGVyYXRvci5oIgogICAgICBuc1JlYWRpbmdJdGVyYXRvcjxDaGFyVD4mCiAgICAgIG9wZXJh
dG9yKysoKQogICAgICAgIHsKICAgICAgICAgICsrbVBvc2l0aW9uOwogICAgICAgICAgbm9ybWFs
aXplX2ZvcndhcmQoKTsKICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CgogICAgICBu
c1JlYWRpbmdJdGVyYXRvcjxDaGFyVD4KICAgICAgb3BlcmF0b3IrKyggaW50ICkKICAgICAgICB7
CiAgICAgICAgICBuc1JlYWRpbmdJdGVyYXRvcjxDaGFyVD4gcmVzdWx0KCp0aGlzKTsKICAgICAg
ICAgICsrbVBvc2l0aW9uOwogICAgICAgICAgbm9ybWFsaXplX2ZvcndhcmQoKTsKICAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgICAgfQoKICAgICAgbnNSZWFkaW5nSXRlcmF0b3I8Q2hhclQ+
JgogICAgICBvcGVyYXRvci0tKCkKICAgICAgICB7CiAgICAgICAgICBub3JtYWxpemVfYmFja3dh
cmQoKTsKICAgICAgICAgIC0tbVBvc2l0aW9uOwogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAg
ICAgIH0KCiAgICAgIG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPgogICAgICBvcGVyYXRvci0tKCBp
bnQgKQogICAgICAgIHsKICAgICAgICAgIG5zUmVhZGluZ0l0ZXJhdG9yPENoYXJUPiByZXN1bHQo
KnRoaXMpOwogICAgICAgICAgbm9ybWFsaXplX2JhY2t3YXJkKCk7CiAgICAgICAgICAtLW1Qb3Np
dGlvbjsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQoKICAgICAgY29uc3QgY29u
c3RfZnJhZ21lbnRfdHlwZSYKICAgICAgZnJhZ21lbnQoKSBjb25zdAogICAgICAgIHsKICAgICAg
ICAgIHJldHVybiBtRnJhZ21lbnQ7CiAgICAgICAgfQoKICAgICAgY29uc3QgYWJzdHJhY3Rfc3Ry
aW5nX3R5cGUmCiAgICAgIHN0cmluZygpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgOwogICAg
ICAgICAgcmV0dXJuICptT3duaW5nU3RyaW5nOwogICAgICAgIH0KCiAgICAgIGRpZmZlcmVuY2Vf
dHlwZQogICAgICBzaXplX2ZvcndhcmQoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVy
biBtRnJhZ21lbnQubUVuZCAtIG1Qb3NpdGlvbjsKICAgICAgICB9CgogICAgICBkaWZmZXJlbmNl
X3R5cGUKICAgICAgc2l6ZV9iYWNrd2FyZCgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0
dXJuIG1Qb3NpdGlvbiAtIG1GcmFnbWVudC5tU3RhcnQ7CiAgICAgICAgfQoKICAgICAgbnNSZWFk
aW5nSXRlcmF0b3I8Q2hhclQ+JgogICAgICBhZHZhbmNlKCBkaWZmZXJlbmNlX3R5cGUgbiApCiAg
ICAgICAgewogICAgICAgICAgd2hpbGUgKCBuID4gMCApCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBkaWZmZXJlbmNlX3R5cGUgb25lX2hvcCA9IE5TX01JTihuLCBzaXplX2ZvcndhcmQoKSk7
CgogICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgIG1Qb3NpdGlvbiArPSBvbmVfaG9wOwog
ICAgICAgICAgICAgIG5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICAgICAgICAgICAgbiAtPSBvbmVf
aG9wOwogICAgICAgICAgICB9CgogICAgICAgICAgd2hpbGUgKCBuIDwgMCApCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBub3JtYWxpemVfYmFja3dhcmQoKTsKICAgICAgICAgICAgICBkaWZm
ZXJlbmNlX3R5cGUgb25lX2hvcCA9IE5TX01BWChuLCAtc2l6ZV9iYWNrd2FyZCgpKTsKCiAgICAg
ICAgICAgICAgOwoKCiAgICAgICAgICAgICAgbVBvc2l0aW9uICs9IG9uZV9ob3A7CiAgICAgICAg
ICAgICAgbiAtPSBvbmVfaG9wOwogICAgICAgICAgICB9CgogICAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgICAgIH0KICB9OwojIDIwNiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0
cmluZ0l0ZXJhdG9yLmgiCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4KY2xhc3MgbnNXcml0aW5nSXRl
cmF0b3IKCiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNl
X3R5cGU7CiAgICAgIHR5cGVkZWYgQ2hhclQgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBDaGFy
VCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBDaGFyVCYgcmVmZXJlbmNlOwoKCiAgICAgIHR5cGVk
ZWYgbnNSZWFkYWJsZUZyYWdtZW50PENoYXJUPiBjb25zdF9mcmFnbWVudF90eXBlOwogICAgICB0
eXBlZGVmIG5zV3JpdGFibGVGcmFnbWVudDxDaGFyVD4gZnJhZ21lbnRfdHlwZTsKCiAgICBwcml2
YXRlOgogICAgICBmcmllbmQgY2xhc3MgbnNBU3RyaW5nOwogICAgICBmcmllbmQgY2xhc3MgbnNB
Q1N0cmluZzsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBuc1N0cmluZ1RyYWl0czxDaGFyVD46OmFi
c3RyYWN0X3N0cmluZ190eXBlIGFic3RyYWN0X3N0cmluZ190eXBlOwoKICAgICAgZnJhZ21lbnRf
dHlwZSBtRnJhZ21lbnQ7CiAgICAgIENoYXJUKiBtUG9zaXRpb247CiAgICAgIGFic3RyYWN0X3N0
cmluZ190eXBlKiBtT3duaW5nU3RyaW5nOwoKICAgIHB1YmxpYzoKICAgICAgbnNXcml0aW5nSXRl
cmF0b3IoKSB7IH0KCgoKICAgICAgaW5saW5lIHZvaWQgbm9ybWFsaXplX2ZvcndhcmQoKTsKICAg
ICAgaW5saW5lIHZvaWQgbm9ybWFsaXplX2JhY2t3YXJkKCk7CgogICAgICBwb2ludGVyCiAgICAg
IGdldCgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIG1Qb3NpdGlvbjsKICAgICAg
ICB9CgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgICB7CiAg
ICAgICAgICByZXR1cm4gKmdldCgpOwogICAgICAgIH0KIyAyNTkgIi4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9zdHJpbmcvbnNTdHJpbmdJdGVyYXRvci5oIgogICAgICBuc1dyaXRpbmdJdGVyYXRvcjxD
aGFyVD4mCiAgICAgIG9wZXJhdG9yKysoKQogICAgICAgIHsKICAgICAgICAgICsrbVBvc2l0aW9u
OwogICAgICAgICAgbm9ybWFsaXplX2ZvcndhcmQoKTsKICAgICAgICAgIHJldHVybiAqdGhpczsK
ICAgICAgICB9CgogICAgICBuc1dyaXRpbmdJdGVyYXRvcjxDaGFyVD4KICAgICAgb3BlcmF0b3Ir
KyggaW50ICkKICAgICAgICB7CiAgICAgICAgICBuc1dyaXRpbmdJdGVyYXRvcjxDaGFyVD4gcmVz
dWx0KCp0aGlzKTsKICAgICAgICAgICsrbVBvc2l0aW9uOwogICAgICAgICAgbm9ybWFsaXplX2Zv
cndhcmQoKTsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQoKICAgICAgbnNXcml0
aW5nSXRlcmF0b3I8Q2hhclQ+JgogICAgICBvcGVyYXRvci0tKCkKICAgICAgICB7CiAgICAgICAg
ICBub3JtYWxpemVfYmFja3dhcmQoKTsKICAgICAgICAgIC0tbVBvc2l0aW9uOwogICAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAgICAgIG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPgog
ICAgICBvcGVyYXRvci0tKCBpbnQgKQogICAgICAgIHsKICAgICAgICAgIG5zV3JpdGluZ0l0ZXJh
dG9yPENoYXJUPiByZXN1bHQoKnRoaXMpOwogICAgICAgICAgbm9ybWFsaXplX2JhY2t3YXJkKCk7
CiAgICAgICAgICAtLW1Qb3NpdGlvbjsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAg
fQoKICAgICAgY29uc3QgZnJhZ21lbnRfdHlwZSYKICAgICAgZnJhZ21lbnQoKSBjb25zdAogICAg
ICAgIHsKICAgICAgICAgIHJldHVybiBtRnJhZ21lbnQ7CiAgICAgICAgfQoKICAgICAgZnJhZ21l
bnRfdHlwZSYKICAgICAgZnJhZ21lbnQoKQogICAgICAgIHsKICAgICAgICAgIHJldHVybiBtRnJh
Z21lbnQ7CiAgICAgICAgfQoKICAgICAgY29uc3QgYWJzdHJhY3Rfc3RyaW5nX3R5cGUmCiAgICAg
IHN0cmluZygpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgOwogICAgICAgICAgcmV0dXJuICpt
T3duaW5nU3RyaW5nOwogICAgICAgIH0KCiAgICAgIGFic3RyYWN0X3N0cmluZ190eXBlJgogICAg
ICBzdHJpbmcoKQogICAgICAgIHsKICAgICAgICAgIDsKICAgICAgICAgIHJldHVybiAqbU93bmlu
Z1N0cmluZzsKICAgICAgICB9CgogICAgICBkaWZmZXJlbmNlX3R5cGUKICAgICAgc2l6ZV9mb3J3
YXJkKCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gbUZyYWdtZW50Lm1FbmQgLSBt
UG9zaXRpb247CiAgICAgICAgfQoKICAgICAgZGlmZmVyZW5jZV90eXBlCiAgICAgIHNpemVfYmFj
a3dhcmQoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiBtUG9zaXRpb24gLSBtRnJh
Z21lbnQubVN0YXJ0OwogICAgICAgIH0KCiAgICAgIG5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPiYK
ICAgICAgYWR2YW5jZSggZGlmZmVyZW5jZV90eXBlIG4gKQogICAgICAgIHsKICAgICAgICAgIHdo
aWxlICggbiA+IDAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBl
IG9uZV9ob3AgPSBOU19NSU4obiwgc2l6ZV9mb3J3YXJkKCkpOwoKICAgICAgICAgICAgICA7CgoK
ICAgICAgICAgICAgICBtUG9zaXRpb24gKz0gb25lX2hvcDsKICAgICAgICAgICAgICBub3JtYWxp
emVfZm9yd2FyZCgpOwogICAgICAgICAgICAgIG4gLT0gb25lX2hvcDsKICAgICAgICAgICAgfQoK
ICAgICAgICAgIHdoaWxlICggbiA8IDAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbm9y
bWFsaXplX2JhY2t3YXJkKCk7CiAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlIG9uZV9ob3Ag
PSBOU19NQVgobiwgLXNpemVfYmFja3dhcmQoKSk7CgogICAgICAgICAgICAgIDsKCgogICAgICAg
ICAgICAgIG1Qb3NpdGlvbiArPSBvbmVfaG9wOwogICAgICAgICAgICAgIG4gLT0gb25lX2hvcDsK
ICAgICAgICAgICAgfQoKICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CgogICAgICBQ
UlVpbnQzMgogICAgICB3cml0ZSggY29uc3QgdmFsdWVfdHlwZSogcywgUFJVaW50MzIgbiApCiAg
ICAgICAgewogICAgICAgICAgOwoKICAgICAgICAgIG4gPSBOU19NSU4obiwgUFJVaW50MzIoc2l6
ZV9mb3J3YXJkKCkpKTsKICAgICAgICAgIG5zQ2hhclRyYWl0czx2YWx1ZV90eXBlPjo6bW92ZSht
UG9zaXRpb24sIHMsIG4pOwogICAgICAgICAgYWR2YW5jZSggZGlmZmVyZW5jZV90eXBlKG4pICk7
CiAgICAgICAgICByZXR1cm4gbjsKICAgICAgICB9CiAgfTsKCnRlbXBsYXRlIDxjbGFzcyBDaGFy
VD4KaW5saW5lCnZvaWQKbnNSZWFkaW5nSXRlcmF0b3I8Q2hhclQ+Ojpub3JtYWxpemVfZm9yd2Fy
ZCgpCiAgewogICAgd2hpbGUgKCBtUG9zaXRpb24gPT0gbUZyYWdtZW50Lm1FbmQKICAgICAgICAg
JiYgbU93bmluZ1N0cmluZy0+R2V0UmVhZGFibGVGcmFnbWVudChtRnJhZ21lbnQsIGtOZXh0RnJh
Z21lbnQpICkKICAgICAgICBtUG9zaXRpb24gPSBtRnJhZ21lbnQubVN0YXJ0OwogIH0KCnRlbXBs
YXRlIDxjbGFzcyBDaGFyVD4KaW5saW5lCnZvaWQKbnNSZWFkaW5nSXRlcmF0b3I8Q2hhclQ+Ojpu
b3JtYWxpemVfYmFja3dhcmQoKQogIHsKICAgIHdoaWxlICggbVBvc2l0aW9uID09IG1GcmFnbWVu
dC5tU3RhcnQKICAgICAgICAgJiYgbU93bmluZ1N0cmluZy0+R2V0UmVhZGFibGVGcmFnbWVudCht
RnJhZ21lbnQsIGtQcmV2RnJhZ21lbnQpICkKICAgICAgICBtUG9zaXRpb24gPSBtRnJhZ21lbnQu
bUVuZDsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQpQUkJvb2wKb3BlcmF0b3I9
PSggY29uc3QgbnNSZWFkaW5nSXRlcmF0b3I8Q2hhclQ+JiBsaHMsIGNvbnN0IG5zUmVhZGluZ0l0
ZXJhdG9yPENoYXJUPiYgcmhzICkKICB7CiAgICByZXR1cm4gbGhzLmdldCgpID09IHJocy5nZXQo
KTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQpQUkJvb2wKb3BlcmF0b3IhPSgg
Y29uc3QgbnNSZWFkaW5nSXRlcmF0b3I8Q2hhclQ+JiBsaHMsIGNvbnN0IG5zUmVhZGluZ0l0ZXJh
dG9yPENoYXJUPiYgcmhzICkKICB7CiAgICByZXR1cm4gbGhzLmdldCgpICE9IHJocy5nZXQoKTsK
ICB9CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4KaW5saW5lCnZvaWQKbnNXcml0aW5nSXRl
cmF0b3I8Q2hhclQ+Ojpub3JtYWxpemVfZm9yd2FyZCgpCiAgewogICAgd2hpbGUgKCBtUG9zaXRp
b24gPT0gbUZyYWdtZW50Lm1FbmQKICAgICAgICAgJiYgbU93bmluZ1N0cmluZy0+R2V0V3JpdGFi
bGVGcmFnbWVudChtRnJhZ21lbnQsIGtOZXh0RnJhZ21lbnQpICkKICAgICAgbVBvc2l0aW9uID0g
bUZyYWdtZW50Lm1TdGFydDsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQ2hhclQ+CmlubGluZQp2b2lk
Cm5zV3JpdGluZ0l0ZXJhdG9yPENoYXJUPjo6bm9ybWFsaXplX2JhY2t3YXJkKCkKICB7CiAgICB3
aGlsZSAoIG1Qb3NpdGlvbiA9PSBtRnJhZ21lbnQubVN0YXJ0CiAgICAgICAgICYmIG1Pd25pbmdT
dHJpbmctPkdldFdyaXRhYmxlRnJhZ21lbnQobUZyYWdtZW50LCBrUHJldkZyYWdtZW50KSApCiAg
ICAgIG1Qb3NpdGlvbiA9IG1GcmFnbWVudC5tRW5kOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBDaGFy
VD4KaW5saW5lClBSQm9vbApvcGVyYXRvcj09KCBjb25zdCBuc1dyaXRpbmdJdGVyYXRvcjxDaGFy
VD4mIGxocywgY29uc3QgbnNXcml0aW5nSXRlcmF0b3I8Q2hhclQ+JiByaHMgKQogIHsKICAgIHJl
dHVybiBsaHMuZ2V0KCkgPT0gcmhzLmdldCgpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBDaGFyVD4K
aW5saW5lClBSQm9vbApvcGVyYXRvciE9KCBjb25zdCBuc1dyaXRpbmdJdGVyYXRvcjxDaGFyVD4m
IGxocywgY29uc3QgbnNXcml0aW5nSXRlcmF0b3I8Q2hhclQ+JiByaHMgKQogIHsKICAgIHJldHVy
biBsaHMuZ2V0KCkgIT0gcmhzLmdldCgpOwogIH0KIyA0MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L3N0cmluZy9uc0FTdHJpbmcuaCIgMgoKCgoKCgpjbGFzcyBuc1N0cmluZ0NvbXBhcmF0b3IKICB7
CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgUFJVbmljaGFyIGNoYXJfdHlwZTsKCiAgICAgIHZp
cnR1YWwgaW50IG9wZXJhdG9yKCkoIGNvbnN0IGNoYXJfdHlwZSosIGNvbnN0IGNoYXJfdHlwZSos
IFBSVWludDMyIGFMZW5ndGggKSBjb25zdCA9IDA7CiAgICAgIHZpcnR1YWwgaW50IG9wZXJhdG9y
KCkoIGNoYXJfdHlwZSwgY2hhcl90eXBlICkgY29uc3QgPSAwOwogIH07CgpjbGFzcyBuc0RlZmF1
bHRTdHJpbmdDb21wYXJhdG9yCiAgICA6IHB1YmxpYyBuc1N0cmluZ0NvbXBhcmF0b3IKICB7CiAg
ICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgaW50IG9wZXJhdG9yKCkoIGNvbnN0IGNoYXJfdHlwZSos
IGNvbnN0IGNoYXJfdHlwZSosIFBSVWludDMyIGFMZW5ndGggKSBjb25zdDsKICAgICAgdmlydHVh
bCBpbnQgb3BlcmF0b3IoKSAoIGNoYXJfdHlwZSwgY2hhcl90eXBlICkgY29uc3Q7CiAgfTsKCgoK
CgoKY2xhc3MgbnNDU3RyaW5nQ29tcGFyYXRvcgogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRl
ZiBjaGFyIGNoYXJfdHlwZTsKCiAgICAgIHZpcnR1YWwgaW50IG9wZXJhdG9yKCkoIGNvbnN0IGNo
YXJfdHlwZSosIGNvbnN0IGNoYXJfdHlwZSosIFBSVWludDMyIGFMZW5ndGggKSBjb25zdCA9IDA7
CiAgICAgIHZpcnR1YWwgaW50IG9wZXJhdG9yKCkgKCBjaGFyX3R5cGUsIGNoYXJfdHlwZSApIGNv
bnN0ID0gMDsKICB9OwoKY2xhc3MgbnNEZWZhdWx0Q1N0cmluZ0NvbXBhcmF0b3IKICAgIDogcHVi
bGljIG5zQ1N0cmluZ0NvbXBhcmF0b3IKICB7CiAgICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgaW50
IG9wZXJhdG9yKCkoIGNvbnN0IGNoYXJfdHlwZSosIGNvbnN0IGNoYXJfdHlwZSosIFBSVWludDMy
IGFMZW5ndGggKSBjb25zdDsKICAgICAgdmlydHVhbCBpbnQgb3BlcmF0b3IoKSggY2hhcl90eXBl
LCBjaGFyX3R5cGUgKSBjb25zdDsKICB9OwojIDk5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3Ry
aW5nL25zQVN0cmluZy5oIgpjbGFzcyBuc0FTdHJpbmcKICB7CiAgICBwdWJsaWM6CiAgICAgIHR5
cGVkZWYgUFJVbmljaGFyIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBjaGFyIGluY29tcGF0aWJs
ZV9jaGFyX3R5cGU7CgogICAgICB0eXBlZGVmIG5zQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4gYnVm
ZmVyX2hhbmRsZV90eXBlOwogICAgICB0eXBlZGVmIG5zQ29uc3RCdWZmZXJIYW5kbGU8Y2hhcl90
eXBlPiBjb25zdF9idWZmZXJfaGFuZGxlX3R5cGU7CiAgICAgIHR5cGVkZWYgbnNTaGFyZWRCdWZm
ZXJIYW5kbGU8Y2hhcl90eXBlPiBzaGFyZWRfYnVmZmVyX2hhbmRsZV90eXBlOwoKICAgICAgdHlw
ZWRlZiBuc1JlYWRhYmxlRnJhZ21lbnQ8Y2hhcl90eXBlPiBjb25zdF9mcmFnbWVudF90eXBlOwog
ICAgICB0eXBlZGVmIG5zV3JpdGFibGVGcmFnbWVudDxjaGFyX3R5cGU+IGZyYWdtZW50X3R5cGU7
CgogICAgICB0eXBlZGVmIG5zQVN0cmluZyBzZWxmX3R5cGU7CiAgICAgIHR5cGVkZWYgbnNBU3Ry
aW5nIGFic3RyYWN0X3N0cmluZ190eXBlOwoKICAgICAgdHlwZWRlZiBuc1JlYWRpbmdJdGVyYXRv
cjxjaGFyX3R5cGU+IGNvbnN0X2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIG5zV3JpdGluZ0l0ZXJh
dG9yPGNoYXJfdHlwZT4gaXRlcmF0b3I7CgogICAgICB0eXBlZGVmIFBSVWludDMyIHNpemVfdHlw
ZTsKICAgICAgdHlwZWRlZiBQUlVpbnQzMiBpbmRleF90eXBlOwoKCiAgICBwdWJsaWM6CgoKICAg
ICAgdmlydHVhbCB+bnNBU3RyaW5nKCkgeyB9CgogICAgICBlbnVtIHsKICAgICAgICBrSGFzU3Rh
Y2tCdWZmZXIgPSAweDAwMDAwMDAxCgoKCgogICAgICB9OwogICAgICB2aXJ0dWFsIFBSVWludDMy
IEdldEltcGxlbWVudGF0aW9uRmxhZ3MoKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgYnVm
ZmVyX2hhbmRsZV90eXBlKiBHZXRGbGF0QnVmZmVySGFuZGxlKCkgY29uc3Q7CiAgICAgIHZpcnR1
YWwgY29uc3QgYnVmZmVyX2hhbmRsZV90eXBlKiBHZXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAg
ICAgdmlydHVhbCBjb25zdCBzaGFyZWRfYnVmZmVyX2hhbmRsZV90eXBlKiBHZXRTaGFyZWRCdWZm
ZXJIYW5kbGUoKSBjb25zdDsKIyAxNDggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNB
U3RyaW5nLmgiCiAgICAgIGlubGluZSBjb25zdF9pdGVyYXRvciYgQmVnaW5SZWFkaW5nKCBjb25z
dF9pdGVyYXRvciYgKSBjb25zdDsKICAgICAgaW5saW5lIGNvbnN0X2l0ZXJhdG9yJiBFbmRSZWFk
aW5nKCBjb25zdF9pdGVyYXRvciYgKSBjb25zdDsKCiAgICAgIGlubGluZSBpdGVyYXRvciYgQmVn
aW5Xcml0aW5nKCBpdGVyYXRvciYgKTsKICAgICAgaW5saW5lIGl0ZXJhdG9yJiBFbmRXcml0aW5n
KCBpdGVyYXRvciYgKTsKCiAgICAgIHZpcnR1YWwgc2l6ZV90eXBlIExlbmd0aCgpIGNvbnN0ID0g
MDsKICAgICAgUFJCb29sIElzRW1wdHkoKSBjb25zdCB7IHJldHVybiBMZW5ndGgoKSA9PSAwOyB9
CgogICAgICBpbmxpbmUgUFJCb29sIEVxdWFscyggY29uc3QgYWJzdHJhY3Rfc3RyaW5nX3R5cGUm
LCBjb25zdCBuc1N0cmluZ0NvbXBhcmF0b3ImID0gbnNEZWZhdWx0U3RyaW5nQ29tcGFyYXRvcigp
ICkgY29uc3Q7CiAgICAgIFBSQm9vbCBFcXVhbHMoIGNvbnN0IGNoYXJfdHlwZSosIGNvbnN0IG5z
U3RyaW5nQ29tcGFyYXRvciYgPSBuc0RlZmF1bHRTdHJpbmdDb21wYXJhdG9yKCkgKSBjb25zdDsK
CiAgICAgIHZpcnR1YWwgUFJCb29sIElzVm9pZCgpIGNvbnN0OwogICAgICB2aXJ0dWFsIHZvaWQg
U2V0SXNWb2lkKCBQUkJvb2wgKTsKIyAxNzggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcv
bnNBU3RyaW5nLmgiCiAgICAgIGNoYXJfdHlwZSBGaXJzdCgpIGNvbnN0OwogICAgICBjaGFyX3R5
cGUgTGFzdCgpIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlIENvdW50Q2hhciggY2hhcl90eXBlICkg
Y29uc3Q7CgoKCgogICAgICBQUkludDMyIEZpbmRDaGFyKCBjaGFyX3R5cGUsIGluZGV4X3R5cGUg
YU9mZnNldCA9IDAgKSBjb25zdDsKIyAxOTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcv
bnNBU3RyaW5nLmgiCiAgICAgIHZpcnR1YWwgdm9pZCBTZXRDYXBhY2l0eSggc2l6ZV90eXBlICkg
eyB9CiMgMjE5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zQVN0cmluZy5oIgogICAg
ICB2aXJ0dWFsIHZvaWQgU2V0TGVuZ3RoKCBzaXplX3R5cGUgKSB7IH0KCgogICAgICB2b2lkCiAg
ICAgIFRydW5jYXRlKCBzaXplX3R5cGUgYU5ld0xlbmd0aD0wICkKICAgICAgICB7CiAgICAgICAg
ICA7CgoKICAgICAgICAgIFNldExlbmd0aChhTmV3TGVuZ3RoKTsKICAgICAgICB9CiMgMjU4ICIu
Li8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zQVN0cmluZy5oIgogICAgICB2b2lkIEFzc2ln
biggY29uc3Qgc2VsZl90eXBlJiBhUmVhZGFibGUgKSB7IGRvX0Fzc2lnbkZyb21SZWFkYWJsZShh
UmVhZGFibGUpOyB9CiAgICAgIHZvaWQgQXNzaWduKCBjb25zdCBjaGFyX3R5cGUqIGFQdHIgKSB7
IGFQdHIgPyBkb19Bc3NpZ25Gcm9tRWxlbWVudFB0cihhUHRyKSA6IFNldExlbmd0aCgwKTsgfQog
ICAgICB2b2lkIEFzc2lnbiggY29uc3QgY2hhcl90eXBlKiBhUHRyLCBzaXplX3R5cGUgYUxlbmd0
aCApIHsgZG9fQXNzaWduRnJvbUVsZW1lbnRQdHJMZW5ndGgoYVB0ciwgYUxlbmd0aCk7IH0KICAg
ICAgdm9pZCBBc3NpZ24oIGNoYXJfdHlwZSBhQ2hhciApIHsgZG9fQXNzaWduRnJvbUVsZW1lbnQo
YUNoYXIpOyB9CgoKICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcj0oIGNvbnN0IHNlbGZfdHlwZSYg
YVJlYWRhYmxlICkgeyBBc3NpZ24oYVJlYWRhYmxlKTsgcmV0dXJuICp0aGlzOyB9CgogICAgICBz
ZWxmX3R5cGUmIG9wZXJhdG9yPSggY29uc3QgY2hhcl90eXBlKiBhUHRyICkgeyBBc3NpZ24oYVB0
cik7IHJldHVybiAqdGhpczsgfQogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yPSggY2hhcl90eXBl
IGFDaGFyICkgeyBBc3NpZ24oYUNoYXIpOyByZXR1cm4gKnRoaXM7IH0KCgoKCgoKCiAgICAgIHZv
aWQgQXBwZW5kKCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSApIHsgZG9fQXBwZW5kRnJvbVJl
YWRhYmxlKGFSZWFkYWJsZSk7IH0KICAgICAgdm9pZCBBcHBlbmQoIGNvbnN0IGNoYXJfdHlwZSog
YVB0ciApIHsgaWYgKGFQdHIpIGRvX0FwcGVuZEZyb21FbGVtZW50UHRyKGFQdHIpOyB9CiAgICAg
IHZvaWQgQXBwZW5kKCBjb25zdCBjaGFyX3R5cGUqIGFQdHIsIHNpemVfdHlwZSBhTGVuZ3RoICkg
eyBkb19BcHBlbmRGcm9tRWxlbWVudFB0ckxlbmd0aChhUHRyLCBhTGVuZ3RoKTsgfQogICAgICB2
b2lkIEFwcGVuZCggY2hhcl90eXBlIGFDaGFyICkgeyBkb19BcHBlbmRGcm9tRWxlbWVudChhQ2hh
cik7IH0KCiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0b3IrPSggY29uc3Qgc2VsZl90eXBlJiBhUmVh
ZGFibGUgKSB7IEFwcGVuZChhUmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KICAgICAgc2VsZl90
eXBlJiBvcGVyYXRvcis9KCBjb25zdCBjaGFyX3R5cGUqIGFQdHIgKSB7IEFwcGVuZChhUHRyKTsg
cmV0dXJuICp0aGlzOyB9CiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0b3IrPSggY2hhcl90eXBlIGFD
aGFyICkgeyBBcHBlbmQoYUNoYXIpOyByZXR1cm4gKnRoaXM7IH0KIyAyOTUgIi4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9zdHJpbmcvbnNBU3RyaW5nLmgiCiAgICAgIHZvaWQgSW5zZXJ0KCBjb25zdCBz
ZWxmX3R5cGUmIGFSZWFkYWJsZSwgaW5kZXhfdHlwZSBhdFBvc2l0aW9uICkgeyBkb19JbnNlcnRG
cm9tUmVhZGFibGUoYVJlYWRhYmxlLCBhdFBvc2l0aW9uKTsgfQogICAgICB2b2lkIEluc2VydCgg
Y29uc3QgY2hhcl90eXBlKiBhUHRyLCBpbmRleF90eXBlIGF0UG9zaXRpb24gKSB7IGlmIChhUHRy
KSBkb19JbnNlcnRGcm9tRWxlbWVudFB0cihhUHRyLCBhdFBvc2l0aW9uKTsgfQogICAgICB2b2lk
IEluc2VydCggY29uc3QgY2hhcl90eXBlKiBhUHRyLCBpbmRleF90eXBlIGF0UG9zaXRpb24sIHNp
emVfdHlwZSBhTGVuZ3RoICkgeyBkb19JbnNlcnRGcm9tRWxlbWVudFB0ckxlbmd0aChhUHRyLCBh
dFBvc2l0aW9uLCBhTGVuZ3RoKTsgfQogICAgICB2b2lkIEluc2VydCggY2hhcl90eXBlIGFDaGFy
LCBpbmRleF90eXBlIGF0UG9zaXRpb24gKSB7IGRvX0luc2VydEZyb21FbGVtZW50KGFDaGFyLCBh
dFBvc2l0aW9uKTsgfQoKCgogICAgICB2aXJ0dWFsIHZvaWQgQ3V0KCBpbmRleF90eXBlIGN1dFN0
YXJ0LCBzaXplX3R5cGUgY3V0TGVuZ3RoICk7CgoKCiAgICAgIHZvaWQgUmVwbGFjZSggaW5kZXhf
dHlwZSBjdXRTdGFydCwgc2l6ZV90eXBlIGN1dExlbmd0aCwgY29uc3Qgc2VsZl90eXBlJiBhUmVh
ZGFibGUgKSB7IGRvX1JlcGxhY2VGcm9tUmVhZGFibGUoY3V0U3RhcnQsIGN1dExlbmd0aCwgYVJl
YWRhYmxlKTsgfQoKICAgIHByaXZhdGU6CgogICAgICBpbmRleF90eXBlIENvdW50Q2hhciggaW5j
b21wYXRpYmxlX2NoYXJfdHlwZSApIGNvbnN0OwogICAgICB2b2lkIG9wZXJhdG9yPSAoIGluY29t
cGF0aWJsZV9jaGFyX3R5cGUgKTsKICAgICAgdm9pZCBBc3NpZ24gKCBpbmNvbXBhdGlibGVfY2hh
cl90eXBlICk7CiAgICAgIHZvaWQgb3BlcmF0b3IrPSAoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUg
KTsKICAgICAgdm9pZCBBcHBlbmQgKCBpbmNvbXBhdGlibGVfY2hhcl90eXBlICk7CiAgICAgIHZv
aWQgSW5zZXJ0ICggaW5jb21wYXRpYmxlX2NoYXJfdHlwZSwgaW5kZXhfdHlwZSApOwoKCiAgICBw
cm90ZWN0ZWQ6CiAgICAgICAgICAgICAgdm9pZCBVbmNoZWNrZWRBc3NpZ25Gcm9tUmVhZGFibGUo
IGNvbnN0IHNlbGZfdHlwZSYgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZyb21SZWFk
YWJsZSggY29uc3Qgc2VsZl90eXBlJiApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXNzaWduRnJv
bUVsZW1lbnRQdHIoIGNvbnN0IGNoYXJfdHlwZSogKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0Fz
c2lnbkZyb21FbGVtZW50UHRyTGVuZ3RoKCBjb25zdCBjaGFyX3R5cGUqLCBzaXplX3R5cGUgKTsK
ICAgICAgdmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZyb21FbGVtZW50KCBjaGFyX3R5cGUgKTsKCiAg
ICAgICAgICAgICAgdm9pZCBVbmNoZWNrZWRBcHBlbmRGcm9tUmVhZGFibGUoIGNvbnN0IHNlbGZf
dHlwZSYgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0FwcGVuZEZyb21SZWFkYWJsZSggY29uc3Qg
c2VsZl90eXBlJiApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXBwZW5kRnJvbUVsZW1lbnRQdHIo
IGNvbnN0IGNoYXJfdHlwZSogKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0FwcGVuZEZyb21FbGVt
ZW50UHRyTGVuZ3RoKCBjb25zdCBjaGFyX3R5cGUqLCBzaXplX3R5cGUgKTsKICAgICAgdmlydHVh
bCB2b2lkIGRvX0FwcGVuZEZyb21FbGVtZW50KCBjaGFyX3R5cGUgKTsKCiAgICAgICAgICAgICAg
dm9pZCBVbmNoZWNrZWRJbnNlcnRGcm9tUmVhZGFibGUoIGNvbnN0IHNlbGZfdHlwZSYsIGluZGV4
X3R5cGUgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0luc2VydEZyb21SZWFkYWJsZSggY29uc3Qg
c2VsZl90eXBlJiwgaW5kZXhfdHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0RnJv
bUVsZW1lbnRQdHIoIGNvbnN0IGNoYXJfdHlwZSosIGluZGV4X3R5cGUgKTsKICAgICAgdmlydHVh
bCB2b2lkIGRvX0luc2VydEZyb21FbGVtZW50UHRyTGVuZ3RoKCBjb25zdCBjaGFyX3R5cGUqLCBp
bmRleF90eXBlLCBzaXplX3R5cGUgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX0luc2VydEZyb21F
bGVtZW50KCBjaGFyX3R5cGUsIGluZGV4X3R5cGUgKTsKCiAgICAgICAgICAgICAgdm9pZCBVbmNo
ZWNrZWRSZXBsYWNlRnJvbVJlYWRhYmxlKCBpbmRleF90eXBlLCBzaXplX3R5cGUsIGNvbnN0IHNl
bGZfdHlwZSYgKTsKICAgICAgdmlydHVhbCB2b2lkIGRvX1JlcGxhY2VGcm9tUmVhZGFibGUoIGlu
ZGV4X3R5cGUsIHNpemVfdHlwZSwgY29uc3Qgc2VsZl90eXBlJiApOwoKCgogICAgcHVibGljOgog
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSogR2V0UmVhZGFibGVGcmFnbWVudCggY29uc3Rf
ZnJhZ21lbnRfdHlwZSYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiA9IDAgKSBjb25zdCA9
IDA7CiAgICAgIHZpcnR1YWwgY2hhcl90eXBlKiBHZXRXcml0YWJsZUZyYWdtZW50KCBmcmFnbWVu
dF90eXBlJiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyID0gMCApID0gMDsKCiAgICAgIFBS
Qm9vbCBJc0RlcGVuZGVudE9uKCBjb25zdCBzZWxmX3R5cGUmIGFTdHJpbmcgKSBjb25zdDsKICB9
OwoKCgoKCmNsYXNzIG5zQUNTdHJpbmcKICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgY2hh
ciBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgUFJVbmljaGFyIGluY29tcGF0aWJsZV9jaGFyX3R5
cGU7CgogICAgICB0eXBlZGVmIG5zQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4gYnVmZmVyX2hhbmRs
ZV90eXBlOwogICAgICB0eXBlZGVmIG5zQ29uc3RCdWZmZXJIYW5kbGU8Y2hhcl90eXBlPiBjb25z
dF9idWZmZXJfaGFuZGxlX3R5cGU7CiAgICAgIHR5cGVkZWYgbnNTaGFyZWRCdWZmZXJIYW5kbGU8
Y2hhcl90eXBlPiBzaGFyZWRfYnVmZmVyX2hhbmRsZV90eXBlOwoKICAgICAgdHlwZWRlZiBuc1Jl
YWRhYmxlRnJhZ21lbnQ8Y2hhcl90eXBlPiBjb25zdF9mcmFnbWVudF90eXBlOwogICAgICB0eXBl
ZGVmIG5zV3JpdGFibGVGcmFnbWVudDxjaGFyX3R5cGU+IGZyYWdtZW50X3R5cGU7CgogICAgICB0
eXBlZGVmIG5zQUNTdHJpbmcgc2VsZl90eXBlOwogICAgICB0eXBlZGVmIG5zQUNTdHJpbmcgYWJz
dHJhY3Rfc3RyaW5nX3R5cGU7CgogICAgICB0eXBlZGVmIG5zUmVhZGluZ0l0ZXJhdG9yPGNoYXJf
dHlwZT4gY29uc3RfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgbnNXcml0aW5nSXRlcmF0b3I8Y2hh
cl90eXBlPiBpdGVyYXRvcjsKCiAgICAgIHR5cGVkZWYgUFJVaW50MzIgc2l6ZV90eXBlOwogICAg
ICB0eXBlZGVmIFBSVWludDMyIGluZGV4X3R5cGU7CgoKCgoKCiAgICAgIHZpcnR1YWwgfm5zQUNT
dHJpbmcoKSB7IH0KCiAgICAgIGVudW0gewogICAgICAgIGtIYXNTdGFja0J1ZmZlciA9IDB4MDAw
MDAwMDEKCgoKCiAgICAgIH07CiAgICAgIHZpcnR1YWwgUFJVaW50MzIgR2V0SW1wbGVtZW50YXRp
b25GbGFncygpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBidWZmZXJfaGFuZGxlX3R5cGUq
IEdldEZsYXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBjb25zdCBidWZmZXJf
aGFuZGxlX3R5cGUqIEdldEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogICAgICB2aXJ0dWFsIGNvbnN0
IHNoYXJlZF9idWZmZXJfaGFuZGxlX3R5cGUqIEdldFNoYXJlZEJ1ZmZlckhhbmRsZSgpIGNvbnN0
OwojIDQwMyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0FTdHJpbmcuaCIKICAgICAg
aW5saW5lIGNvbnN0X2l0ZXJhdG9yJiBCZWdpblJlYWRpbmcoIGNvbnN0X2l0ZXJhdG9yJiApIGNv
bnN0OwogICAgICBpbmxpbmUgY29uc3RfaXRlcmF0b3ImIEVuZFJlYWRpbmcoIGNvbnN0X2l0ZXJh
dG9yJiApIGNvbnN0OwoKICAgICAgaW5saW5lIGl0ZXJhdG9yJiBCZWdpbldyaXRpbmcoIGl0ZXJh
dG9yJiApOwogICAgICBpbmxpbmUgaXRlcmF0b3ImIEVuZFdyaXRpbmcoIGl0ZXJhdG9yJiApOwoK
ICAgICAgdmlydHVhbCBzaXplX3R5cGUgTGVuZ3RoKCkgY29uc3QgPSAwOwogICAgICBQUkJvb2wg
SXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIExlbmd0aCgpID09IDA7IH0KCiAgICAgIGlubGluZSBQ
UkJvb2wgRXF1YWxzKCBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlwZSYsIGNvbnN0IG5zQ1N0cmlu
Z0NvbXBhcmF0b3ImID0gbnNEZWZhdWx0Q1N0cmluZ0NvbXBhcmF0b3IoKSApIGNvbnN0OwogICAg
ICBQUkJvb2wgRXF1YWxzKCBjb25zdCBjaGFyX3R5cGUqLCBjb25zdCBuc0NTdHJpbmdDb21wYXJh
dG9yJiA9IG5zRGVmYXVsdENTdHJpbmdDb21wYXJhdG9yKCkgKSBjb25zdDsKCiAgICAgIHZpcnR1
YWwgUFJCb29sIElzVm9pZCgpIGNvbnN0OwogICAgICB2aXJ0dWFsIHZvaWQgU2V0SXNWb2lkKCBQ
UkJvb2wgKTsKIyA0MzMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNBU3RyaW5nLmgi
CiAgICAgIGNoYXJfdHlwZSBGaXJzdCgpIGNvbnN0OwogICAgICBjaGFyX3R5cGUgTGFzdCgpIGNv
bnN0OwoKICAgICAgc2l6ZV90eXBlIENvdW50Q2hhciggY2hhcl90eXBlICkgY29uc3Q7CgoKCiAg
ICAgIFBSSW50MzIgRmluZENoYXIoIGNoYXJfdHlwZSwgaW5kZXhfdHlwZSBhT2Zmc2V0ID0gMCAp
IGNvbnN0OwojIDQ1MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0FTdHJpbmcuaCIK
ICAgICAgdmlydHVhbCB2b2lkIFNldENhcGFjaXR5KCBzaXplX3R5cGUgKSB7IH0KIyA0NzMgIi4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNBU3RyaW5nLmgiCiAgICAgIHZpcnR1YWwgdm9p
ZCBTZXRMZW5ndGgoIHNpemVfdHlwZSApIHsgfQoKCiAgICAgIHZvaWQKICAgICAgVHJ1bmNhdGUo
IHNpemVfdHlwZSBhTmV3TGVuZ3RoPTAgKQogICAgICAgIHsKICAgICAgICAgIDsKCgogICAgICAg
ICAgU2V0TGVuZ3RoKGFOZXdMZW5ndGgpOwogICAgICAgIH0KIyA1MTIgIi4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9zdHJpbmcvbnNBU3RyaW5nLmgiCiAgICAgIHZvaWQgQXNzaWduKCBjb25zdCBzZWxm
X3R5cGUmIGFSZWFkYWJsZSApIHsgZG9fQXNzaWduRnJvbVJlYWRhYmxlKGFSZWFkYWJsZSk7IH0K
ICAgICAgdm9pZCBBc3NpZ24oIGNvbnN0IGNoYXJfdHlwZSogYVB0ciApIHsgYVB0ciA/IGRvX0Fz
c2lnbkZyb21FbGVtZW50UHRyKGFQdHIpIDogU2V0TGVuZ3RoKDApOyB9CiAgICAgIHZvaWQgQXNz
aWduKCBjb25zdCBjaGFyX3R5cGUqIGFQdHIsIHNpemVfdHlwZSBhTGVuZ3RoICkgeyBkb19Bc3Np
Z25Gcm9tRWxlbWVudFB0ckxlbmd0aChhUHRyLCBhTGVuZ3RoKTsgfQogICAgICB2b2lkIEFzc2ln
biggY2hhcl90eXBlIGFDaGFyICkgeyBkb19Bc3NpZ25Gcm9tRWxlbWVudChhQ2hhcik7IH0KCgog
ICAgICBzZWxmX3R5cGUmIG9wZXJhdG9yPSggY29uc3Qgc2VsZl90eXBlJiBhUmVhZGFibGUgKSB7
IEFzc2lnbihhUmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIHNlbGZfdHlwZSYgb3Bl
cmF0b3I9KCBjb25zdCBjaGFyX3R5cGUqIGFQdHIgKSB7IEFzc2lnbihhUHRyKTsgcmV0dXJuICp0
aGlzOyB9CiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0b3I9KCBjaGFyX3R5cGUgYUNoYXIgKSB7IEFz
c2lnbihhQ2hhcik7IHJldHVybiAqdGhpczsgfQoKCgoKCgoKICAgICAgdm9pZCBBcHBlbmQoIGNv
bnN0IHNlbGZfdHlwZSYgYVJlYWRhYmxlICkgeyBkb19BcHBlbmRGcm9tUmVhZGFibGUoYVJlYWRh
YmxlKTsgfQogICAgICB2b2lkIEFwcGVuZCggY29uc3QgY2hhcl90eXBlKiBhUHRyICkgeyBpZiAo
YVB0cikgZG9fQXBwZW5kRnJvbUVsZW1lbnRQdHIoYVB0cik7IH0KICAgICAgdm9pZCBBcHBlbmQo
IGNvbnN0IGNoYXJfdHlwZSogYVB0ciwgc2l6ZV90eXBlIGFMZW5ndGggKSB7IGRvX0FwcGVuZEZy
b21FbGVtZW50UHRyTGVuZ3RoKGFQdHIsIGFMZW5ndGgpOyB9CiAgICAgIHZvaWQgQXBwZW5kKCBj
aGFyX3R5cGUgYUNoYXIgKSB7IGRvX0FwcGVuZEZyb21FbGVtZW50KGFDaGFyKTsgfQoKICAgICAg
c2VsZl90eXBlJiBvcGVyYXRvcis9KCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSApIHsgQXBw
ZW5kKGFSZWFkYWJsZSk7IHJldHVybiAqdGhpczsgfQogICAgICBzZWxmX3R5cGUmIG9wZXJhdG9y
Kz0oIGNvbnN0IGNoYXJfdHlwZSogYVB0ciApIHsgQXBwZW5kKGFQdHIpOyByZXR1cm4gKnRoaXM7
IH0KICAgICAgc2VsZl90eXBlJiBvcGVyYXRvcis9KCBjaGFyX3R5cGUgYUNoYXIgKSB7IEFwcGVu
ZChhQ2hhcik7IHJldHVybiAqdGhpczsgfQojIDU0OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0
cmluZy9uc0FTdHJpbmcuaCIKICAgICAgdm9pZCBJbnNlcnQoIGNvbnN0IHNlbGZfdHlwZSYgYVJl
YWRhYmxlLCBpbmRleF90eXBlIGF0UG9zaXRpb24gKSB7IGRvX0luc2VydEZyb21SZWFkYWJsZShh
UmVhZGFibGUsIGF0UG9zaXRpb24pOyB9CiAgICAgIHZvaWQgSW5zZXJ0KCBjb25zdCBjaGFyX3R5
cGUqIGFQdHIsIGluZGV4X3R5cGUgYXRQb3NpdGlvbiApIHsgaWYgKGFQdHIpIGRvX0luc2VydEZy
b21FbGVtZW50UHRyKGFQdHIsIGF0UG9zaXRpb24pOyB9CiAgICAgIHZvaWQgSW5zZXJ0KCBjb25z
dCBjaGFyX3R5cGUqIGFQdHIsIGluZGV4X3R5cGUgYXRQb3NpdGlvbiwgc2l6ZV90eXBlIGFMZW5n
dGggKSB7IGRvX0luc2VydEZyb21FbGVtZW50UHRyTGVuZ3RoKGFQdHIsIGF0UG9zaXRpb24sIGFM
ZW5ndGgpOyB9CiAgICAgIHZvaWQgSW5zZXJ0KCBjaGFyX3R5cGUgYUNoYXIsIGluZGV4X3R5cGUg
YXRQb3NpdGlvbiApIHsgZG9fSW5zZXJ0RnJvbUVsZW1lbnQoYUNoYXIsIGF0UG9zaXRpb24pOyB9
CgoKCiAgICAgIHZpcnR1YWwgdm9pZCBDdXQoIGluZGV4X3R5cGUgY3V0U3RhcnQsIHNpemVfdHlw
ZSBjdXRMZW5ndGggKTsKCgoKICAgICAgdm9pZCBSZXBsYWNlKCBpbmRleF90eXBlIGN1dFN0YXJ0
LCBzaXplX3R5cGUgY3V0TGVuZ3RoLCBjb25zdCBzZWxmX3R5cGUmIGFSZWFkYWJsZSApIHsgZG9f
UmVwbGFjZUZyb21SZWFkYWJsZShjdXRTdGFydCwgY3V0TGVuZ3RoLCBhUmVhZGFibGUpOyB9Cgog
ICAgcHJpdmF0ZToKCiAgICAgIGluZGV4X3R5cGUgQ291bnRDaGFyKCBpbmNvbXBhdGlibGVfY2hh
cl90eXBlICkgY29uc3Q7CiAgICAgIHZvaWQgb3BlcmF0b3I9ICggaW5jb21wYXRpYmxlX2NoYXJf
dHlwZSApOwogICAgICB2b2lkIEFzc2lnbiAoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUgKTsKICAg
ICAgdm9pZCBvcGVyYXRvcis9ICggaW5jb21wYXRpYmxlX2NoYXJfdHlwZSApOwogICAgICB2b2lk
IEFwcGVuZCAoIGluY29tcGF0aWJsZV9jaGFyX3R5cGUgKTsKICAgICAgdm9pZCBJbnNlcnQgKCBp
bmNvbXBhdGlibGVfY2hhcl90eXBlLCBpbmRleF90eXBlICk7CgoKICAgIHByb3RlY3RlZDoKICAg
ICAgICAgICAgICB2b2lkIFVuY2hlY2tlZEFzc2lnbkZyb21SZWFkYWJsZSggY29uc3Qgc2VsZl90
eXBlJiApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXNzaWduRnJvbVJlYWRhYmxlKCBjb25zdCBz
ZWxmX3R5cGUmICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19Bc3NpZ25Gcm9tRWxlbWVudFB0cigg
Y29uc3QgY2hhcl90eXBlKiApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXNzaWduRnJvbUVsZW1l
bnRQdHJMZW5ndGgoIGNvbnN0IGNoYXJfdHlwZSosIHNpemVfdHlwZSApOwogICAgICB2aXJ0dWFs
IHZvaWQgZG9fQXNzaWduRnJvbUVsZW1lbnQoIGNoYXJfdHlwZSApOwoKICAgICAgICAgICAgICB2
b2lkIFVuY2hlY2tlZEFwcGVuZEZyb21SZWFkYWJsZSggY29uc3Qgc2VsZl90eXBlJiApOwogICAg
ICB2aXJ0dWFsIHZvaWQgZG9fQXBwZW5kRnJvbVJlYWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmICk7
CiAgICAgIHZpcnR1YWwgdm9pZCBkb19BcHBlbmRGcm9tRWxlbWVudFB0ciggY29uc3QgY2hhcl90
eXBlKiApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXBwZW5kRnJvbUVsZW1lbnRQdHJMZW5ndGgo
IGNvbnN0IGNoYXJfdHlwZSosIHNpemVfdHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXBw
ZW5kRnJvbUVsZW1lbnQoIGNoYXJfdHlwZSApOwoKICAgICAgICAgICAgICB2b2lkIFVuY2hlY2tl
ZEluc2VydEZyb21SZWFkYWJsZSggY29uc3Qgc2VsZl90eXBlJiwgaW5kZXhfdHlwZSApOwogICAg
ICB2aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0RnJvbVJlYWRhYmxlKCBjb25zdCBzZWxmX3R5cGUmLCBp
bmRleF90eXBlICk7CiAgICAgIHZpcnR1YWwgdm9pZCBkb19JbnNlcnRGcm9tRWxlbWVudFB0cigg
Y29uc3QgY2hhcl90eXBlKiwgaW5kZXhfdHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fSW5z
ZXJ0RnJvbUVsZW1lbnRQdHJMZW5ndGgoIGNvbnN0IGNoYXJfdHlwZSosIGluZGV4X3R5cGUsIHNp
emVfdHlwZSApOwogICAgICB2aXJ0dWFsIHZvaWQgZG9fSW5zZXJ0RnJvbUVsZW1lbnQoIGNoYXJf
dHlwZSwgaW5kZXhfdHlwZSApOwoKICAgICAgICAgICAgICB2b2lkIFVuY2hlY2tlZFJlcGxhY2VG
cm9tUmVhZGFibGUoIGluZGV4X3R5cGUsIHNpemVfdHlwZSwgY29uc3Qgc2VsZl90eXBlJiApOwog
ICAgICB2aXJ0dWFsIHZvaWQgZG9fUmVwbGFjZUZyb21SZWFkYWJsZSggaW5kZXhfdHlwZSwgc2l6
ZV90eXBlLCBjb25zdCBzZWxmX3R5cGUmICk7CgoKCiAgICBwdWJsaWM6CiAgICAgIHZpcnR1YWwg
Y29uc3QgY2hhcl90eXBlKiBHZXRSZWFkYWJsZUZyYWdtZW50KCBjb25zdF9mcmFnbWVudF90eXBl
JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyID0gMCApIGNvbnN0ID0gMDsKICAgICAgdmly
dHVhbCBjaGFyX3R5cGUqIEdldFdyaXRhYmxlRnJhZ21lbnQoIGZyYWdtZW50X3R5cGUmLCBuc0Zy
YWdtZW50UmVxdWVzdCwgUFJVaW50MzIgPSAwICkgPSAwOwoKICAgICAgUFJCb29sIElzRGVwZW5k
ZW50T24oIGNvbnN0IGFic3RyYWN0X3N0cmluZ190eXBlJiBhU3RyaW5nICkgY29uc3Q7CiAgfTsK
CgoKCmlubGluZQpuc0FTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJgpuc0FTdHJpbmc6OkJlZ2luUmVh
ZGluZyggY29uc3RfaXRlcmF0b3ImIGFSZXN1bHQgKSBjb25zdAogIHsKICAgIGFSZXN1bHQubU93
bmluZ1N0cmluZyA9IHRoaXM7CiAgICBHZXRSZWFkYWJsZUZyYWdtZW50KGFSZXN1bHQubUZyYWdt
ZW50LCBrRmlyc3RGcmFnbWVudCk7CiAgICBhUmVzdWx0Lm1Qb3NpdGlvbiA9IGFSZXN1bHQubUZy
YWdtZW50Lm1TdGFydDsKICAgIGFSZXN1bHQubm9ybWFsaXplX2ZvcndhcmQoKTsKICAgIHJldHVy
biBhUmVzdWx0OwogIH0KCmlubGluZQpuc0FTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJgpuc0FTdHJp
bmc6OkVuZFJlYWRpbmcoIGNvbnN0X2l0ZXJhdG9yJiBhUmVzdWx0ICkgY29uc3QKICB7CiAgICBh
UmVzdWx0Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0UmVhZGFibGVGcmFnbWVudChhUmVz
dWx0Lm1GcmFnbWVudCwga0xhc3RGcmFnbWVudCk7CiAgICBhUmVzdWx0Lm1Qb3NpdGlvbiA9IGFS
ZXN1bHQubUZyYWdtZW50Lm1FbmQ7CgogICAgcmV0dXJuIGFSZXN1bHQ7CiAgfQoKaW5saW5lCm5z
QVN0cmluZzo6aXRlcmF0b3ImCm5zQVN0cmluZzo6QmVnaW5Xcml0aW5nKCBpdGVyYXRvciYgYVJl
c3VsdCApCiAgewogICAgYVJlc3VsdC5tT3duaW5nU3RyaW5nID0gdGhpczsKICAgIEdldFdyaXRh
YmxlRnJhZ21lbnQoYVJlc3VsdC5tRnJhZ21lbnQsIGtGaXJzdEZyYWdtZW50KTsKICAgIGFSZXN1
bHQubVBvc2l0aW9uID0gYVJlc3VsdC5tRnJhZ21lbnQubVN0YXJ0OwogICAgYVJlc3VsdC5ub3Jt
YWxpemVfZm9yd2FyZCgpOwogICAgcmV0dXJuIGFSZXN1bHQ7CiAgfQoKCmlubGluZQpuc0FTdHJp
bmc6Oml0ZXJhdG9yJgpuc0FTdHJpbmc6OkVuZFdyaXRpbmcoIGl0ZXJhdG9yJiBhUmVzdWx0ICkK
ICB7CiAgICBhUmVzdWx0Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0V3JpdGFibGVGcmFn
bWVudChhUmVzdWx0Lm1GcmFnbWVudCwga0xhc3RGcmFnbWVudCk7CiAgICBhUmVzdWx0Lm1Qb3Np
dGlvbiA9IGFSZXN1bHQubUZyYWdtZW50Lm1FbmQ7CgogICAgcmV0dXJuIGFSZXN1bHQ7CiAgfQoK
IGludCBDb21wYXJlKCBjb25zdCBuc0FTdHJpbmcmIGxocywgY29uc3QgbnNBU3RyaW5nJiByaHMs
IGNvbnN0IG5zU3RyaW5nQ29tcGFyYXRvciYgPSBuc0RlZmF1bHRTdHJpbmdDb21wYXJhdG9yKCkg
KTsKCmlubGluZQpQUkJvb2wKbnNBU3RyaW5nOjpFcXVhbHMoIGNvbnN0IGFic3RyYWN0X3N0cmlu
Z190eXBlJiByaHMsIGNvbnN0IG5zU3RyaW5nQ29tcGFyYXRvciYgYUNvbXBhcmF0b3IgKSBjb25z
dAogIHsKICAgIHJldHVybiBMZW5ndGgoKT09cmhzLkxlbmd0aCgpICYmIENvbXBhcmUoKnRoaXMs
IHJocywgYUNvbXBhcmF0b3IpPT0wOwogIH0KCmlubGluZQpQUkJvb2wKb3BlcmF0b3IhPSggY29u
c3QgbnNBU3RyaW5nJiBsaHMsIGNvbnN0IG5zQVN0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4g
IWxocy5FcXVhbHMocmhzKTsKICB9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yPCAoIGNvbnN0IG5z
QVN0cmluZyYgbGhzLCBjb25zdCBuc0FTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIENvbXBh
cmUobGhzLCByaHMpPCAwOwogIH0KCmlubGluZQpQUkJvb2wKb3BlcmF0b3I8PSggY29uc3QgbnNB
U3RyaW5nJiBsaHMsIGNvbnN0IG5zQVN0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gQ29tcGFy
ZShsaHMsIHJocyk8PTA7CiAgfQoKaW5saW5lClBSQm9vbApvcGVyYXRvcj09KCBjb25zdCBuc0FT
dHJpbmcmIGxocywgY29uc3QgbnNBU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBsaHMuRXF1
YWxzKHJocyk7CiAgfQoKaW5saW5lClBSQm9vbApvcGVyYXRvcj49KCBjb25zdCBuc0FTdHJpbmcm
IGxocywgY29uc3QgbnNBU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBDb21wYXJlKGxocywg
cmhzKT49MDsKICB9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yPiAoIGNvbnN0IG5zQVN0cmluZyYg
bGhzLCBjb25zdCBuc0FTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIENvbXBhcmUobGhzLCBy
aHMpPiAwOwogIH0KCgoKCgoKaW5saW5lCm5zQUNTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJgpuc0FD
U3RyaW5nOjpCZWdpblJlYWRpbmcoIGNvbnN0X2l0ZXJhdG9yJiBhUmVzdWx0ICkgY29uc3QKICB7
CiAgICBhUmVzdWx0Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0UmVhZGFibGVGcmFnbWVu
dChhUmVzdWx0Lm1GcmFnbWVudCwga0ZpcnN0RnJhZ21lbnQpOwogICAgYVJlc3VsdC5tUG9zaXRp
b24gPSBhUmVzdWx0Lm1GcmFnbWVudC5tU3RhcnQ7CiAgICBhUmVzdWx0Lm5vcm1hbGl6ZV9mb3J3
YXJkKCk7CiAgICByZXR1cm4gYVJlc3VsdDsKICB9CgppbmxpbmUKbnNBQ1N0cmluZzo6Y29uc3Rf
aXRlcmF0b3ImCm5zQUNTdHJpbmc6OkVuZFJlYWRpbmcoIGNvbnN0X2l0ZXJhdG9yJiBhUmVzdWx0
ICkgY29uc3QKICB7CiAgICBhUmVzdWx0Lm1Pd25pbmdTdHJpbmcgPSB0aGlzOwogICAgR2V0UmVh
ZGFibGVGcmFnbWVudChhUmVzdWx0Lm1GcmFnbWVudCwga0xhc3RGcmFnbWVudCk7CiAgICBhUmVz
dWx0Lm1Qb3NpdGlvbiA9IGFSZXN1bHQubUZyYWdtZW50Lm1FbmQ7CgogICAgcmV0dXJuIGFSZXN1
bHQ7CiAgfQoKaW5saW5lCm5zQUNTdHJpbmc6Oml0ZXJhdG9yJgpuc0FDU3RyaW5nOjpCZWdpbldy
aXRpbmcoIGl0ZXJhdG9yJiBhUmVzdWx0ICkKICB7CiAgICBhUmVzdWx0Lm1Pd25pbmdTdHJpbmcg
PSB0aGlzOwogICAgR2V0V3JpdGFibGVGcmFnbWVudChhUmVzdWx0Lm1GcmFnbWVudCwga0ZpcnN0
RnJhZ21lbnQpOwogICAgYVJlc3VsdC5tUG9zaXRpb24gPSBhUmVzdWx0Lm1GcmFnbWVudC5tU3Rh
cnQ7CiAgICBhUmVzdWx0Lm5vcm1hbGl6ZV9mb3J3YXJkKCk7CiAgICByZXR1cm4gYVJlc3VsdDsK
ICB9CgoKaW5saW5lCm5zQUNTdHJpbmc6Oml0ZXJhdG9yJgpuc0FDU3RyaW5nOjpFbmRXcml0aW5n
KCBpdGVyYXRvciYgYVJlc3VsdCApCiAgewogICAgYVJlc3VsdC5tT3duaW5nU3RyaW5nID0gdGhp
czsKICAgIEdldFdyaXRhYmxlRnJhZ21lbnQoYVJlc3VsdC5tRnJhZ21lbnQsIGtMYXN0RnJhZ21l
bnQpOwogICAgYVJlc3VsdC5tUG9zaXRpb24gPSBhUmVzdWx0Lm1GcmFnbWVudC5tRW5kOwoKICAg
IHJldHVybiBhUmVzdWx0OwogIH0KCgpjbGFzcyBuc0Nhc2VJbnNlbnNpdGl2ZUNTdHJpbmdDb21w
YXJhdG9yCiAgICA6IHB1YmxpYyBuc0NTdHJpbmdDb21wYXJhdG9yCiAgewogICAgcHVibGljOgog
ICAgICB2aXJ0dWFsIGludCBvcGVyYXRvcigpKCBjb25zdCBjaGFyX3R5cGUqLCBjb25zdCBjaGFy
X3R5cGUqLCBQUlVpbnQzMiBhTGVuZ3RoICkgY29uc3Q7CiAgICAgIHZpcnR1YWwgaW50IG9wZXJh
dG9yKCkoIGNoYXJfdHlwZSwgY2hhcl90eXBlICkgY29uc3Q7CiAgfTsKCiBpbnQgQ29tcGFyZSgg
Y29uc3QgbnNBQ1N0cmluZyYgbGhzLCBjb25zdCBuc0FDU3RyaW5nJiByaHMsIGNvbnN0IG5zQ1N0
cmluZ0NvbXBhcmF0b3ImID0gbnNEZWZhdWx0Q1N0cmluZ0NvbXBhcmF0b3IoKSApOwoKaW5saW5l
ClBSQm9vbApuc0FDU3RyaW5nOjpFcXVhbHMoIGNvbnN0IGFic3RyYWN0X3N0cmluZ190eXBlJiBy
aHMsIGNvbnN0IG5zQ1N0cmluZ0NvbXBhcmF0b3ImIGFDb21wYXJhdG9yICkgY29uc3QKICB7CiAg
ICByZXR1cm4gTGVuZ3RoKCk9PXJocy5MZW5ndGgoKSAmJiBDb21wYXJlKCp0aGlzLCByaHMsIGFD
b21wYXJhdG9yKT09MDsKICB9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yIT0oIGNvbnN0IG5zQUNT
dHJpbmcmIGxocywgY29uc3QgbnNBQ1N0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gIWxocy5F
cXVhbHMocmhzKTsKICB9CgppbmxpbmUKUFJCb29sCm9wZXJhdG9yPCAoIGNvbnN0IG5zQUNTdHJp
bmcmIGxocywgY29uc3QgbnNBQ1N0cmluZyYgcmhzICkKICB7CiAgICByZXR1cm4gQ29tcGFyZShs
aHMsIHJocyk8IDA7CiAgfQoKaW5saW5lClBSQm9vbApvcGVyYXRvcjw9KCBjb25zdCBuc0FDU3Ry
aW5nJiBsaHMsIGNvbnN0IG5zQUNTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIENvbXBhcmUo
bGhzLCByaHMpPD0wOwogIH0KCmlubGluZQpQUkJvb2wKb3BlcmF0b3I9PSggY29uc3QgbnNBQ1N0
cmluZyYgbGhzLCBjb25zdCBuc0FDU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBsaHMuRXF1
YWxzKHJocyk7CiAgfQoKaW5saW5lClBSQm9vbApvcGVyYXRvcj49KCBjb25zdCBuc0FDU3RyaW5n
JiBsaHMsIGNvbnN0IG5zQUNTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIENvbXBhcmUobGhz
LCByaHMpPj0wOwogIH0KCmlubGluZQpQUkJvb2wKb3BlcmF0b3I+ICggY29uc3QgbnNBQ1N0cmlu
ZyYgbGhzLCBjb25zdCBuc0FDU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBDb21wYXJlKGxo
cywgcmhzKT4gMDsKICB9CgoKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNE
ZXBlbmRlbnRDb25jYXRlbmF0aW9uLmgiIDEKIyA1MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0
cmluZy9uc0RlcGVuZGVudENvbmNhdGVuYXRpb24uaCIKY2xhc3MgbnNEZXBlbmRlbnRDb25jYXRl
bmF0aW9uCiAgICA6IHB1YmxpYyBuc0FTdHJpbmcKICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVk
ZWYgbnNEZXBlbmRlbnRDb25jYXRlbmF0aW9uIHNlbGZfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CiAg
ICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKiBHZXRSZWFkYWJsZUZyYWdtZW50KCBjb25zdF9m
cmFnbWVudF90eXBlJiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgY29uc3Q7CiAgICAg
IHZpcnR1YWwgY2hhcl90eXBlKiBHZXRXcml0YWJsZUZyYWdtZW50KCBmcmFnbWVudF90eXBlJiwg
bnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgeyByZXR1cm4gMDsgfQoKICAgICAgZW51bSB7
IGtGaXJzdFN0cmluZywga0xhc3RTdHJpbmcgfTsKCiAgICAgIGludAogICAgICBHZXRDdXJyZW50
U3RyaW5nRnJvbUZyYWdtZW50KCBjb25zdCBjb25zdF9mcmFnbWVudF90eXBlJiBhRnJhZ21lbnQg
KSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiAoYUZyYWdtZW50LkdldElEQXNJbnQo
KSAmIG1GcmFnbWVudElkZW50aWZpZXJNYXNrKSA/IGtMYXN0U3RyaW5nIDoga0ZpcnN0U3RyaW5n
OwogICAgICAgIH0KCiAgICAgIGludAogICAgICBTZXRGaXJzdFN0cmluZ0luRnJhZ21lbnQoIGNv
bnN0X2ZyYWdtZW50X3R5cGUmIGFGcmFnbWVudCApIGNvbnN0CiAgICAgICAgewogICAgICAgICAg
YUZyYWdtZW50LlNldElEKGFGcmFnbWVudC5HZXRJREFzSW50KCkgJiB+bUZyYWdtZW50SWRlbnRp
Zmllck1hc2spOwogICAgICAgICAgcmV0dXJuIGtGaXJzdFN0cmluZzsKICAgICAgICB9CgogICAg
ICBpbnQKICAgICAgU2V0TGFzdFN0cmluZ0luRnJhZ21lbnQoIGNvbnN0X2ZyYWdtZW50X3R5cGUm
IGFGcmFnbWVudCApIGNvbnN0CiAgICAgICAgewogICAgICAgICAgYUZyYWdtZW50LlNldElEKGFG
cmFnbWVudC5HZXRJREFzSW50KCkgfCBtRnJhZ21lbnRJZGVudGlmaWVyTWFzayk7CiAgICAgICAg
ICByZXR1cm4ga0xhc3RTdHJpbmc7CiAgICAgICAgfQoKICAgIHB1YmxpYzoKICAgICAgbnNEZXBl
bmRlbnRDb25jYXRlbmF0aW9uKCBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlwZSYgYUZpcnN0U3Ry
aW5nLCBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlwZSYgYUxhc3RTdHJpbmcsIFBSVWludDMyIGFN
YXNrID0gMSApCiAgICAgICAgICA6IG1GcmFnbWVudElkZW50aWZpZXJNYXNrKGFNYXNrKQogICAg
ICAgIHsKICAgICAgICAgIG1TdHJpbmdzW2tGaXJzdFN0cmluZ10gPSAmYUZpcnN0U3RyaW5nOwog
ICAgICAgICAgbVN0cmluZ3Nba0xhc3RTdHJpbmddID0gJmFMYXN0U3RyaW5nOwogICAgICAgIH0K
CiAgICAgIG5zRGVwZW5kZW50Q29uY2F0ZW5hdGlvbiggY29uc3Qgc2VsZl90eXBlJiBhRmlyc3RT
dHJpbmcsIGNvbnN0IGFic3RyYWN0X3N0cmluZ190eXBlJiBhTGFzdFN0cmluZyApCiAgICAgICAg
ICA6IG1GcmFnbWVudElkZW50aWZpZXJNYXNrKGFGaXJzdFN0cmluZy5tRnJhZ21lbnRJZGVudGlm
aWVyTWFzazw8MSkKICAgICAgICB7CiAgICAgICAgICBtU3RyaW5nc1trRmlyc3RTdHJpbmddID0g
JmFGaXJzdFN0cmluZzsKICAgICAgICAgIG1TdHJpbmdzW2tMYXN0U3RyaW5nXSA9ICZhTGFzdFN0
cmluZzsKICAgICAgICB9CgoKCgogICAgcHJpdmF0ZToKCiAgICAgIHZvaWQgb3BlcmF0b3I9KCBj
b25zdCBzZWxmX3R5cGUmICk7CgogICAgcHVibGljOgoKICAgICAgdmlydHVhbCBQUlVpbnQzMiBM
ZW5ndGgoKSBjb25zdDsKCgoKCiAgICAgIFBSVWludDMyIEdldEZyYWdtZW50SWRlbnRpZmllck1h
c2soKSBjb25zdCB7IHJldHVybiBtRnJhZ21lbnRJZGVudGlmaWVyTWFzazsgfQoKICAgIHByaXZh
dGU6CiAgICAgIHZvaWQgb3BlcmF0b3IrKCBjb25zdCBzZWxmX3R5cGUmICk7CgoKCiAgICBwcml2
YXRlOgogICAgICBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlwZSogbVN0cmluZ3NbMl07CiAgICAg
IFBSVWludDMyIG1GcmFnbWVudElkZW50aWZpZXJNYXNrOwogIH07CgpjbGFzcyBuc0RlcGVuZGVu
dENDb25jYXRlbmF0aW9uCiAgICA6IHB1YmxpYyBuc0FDU3RyaW5nCiAgewogICAgcHVibGljOgog
ICAgICB0eXBlZGVmIG5zRGVwZW5kZW50Q0NvbmNhdGVuYXRpb24gc2VsZl90eXBlOwoKICAgIHBy
b3RlY3RlZDoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqIEdldFJlYWRhYmxlRnJhZ21l
bnQoIGNvbnN0X2ZyYWdtZW50X3R5cGUmLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKSBj
b25zdDsKICAgICAgdmlydHVhbCBjaGFyX3R5cGUqIEdldFdyaXRhYmxlRnJhZ21lbnQoIGZyYWdt
ZW50X3R5cGUmLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKSB7IHJldHVybiAwOyB9Cgog
ICAgICBlbnVtIHsga0ZpcnN0U3RyaW5nLCBrTGFzdFN0cmluZyB9OwoKICAgICAgaW50CiAgICAg
IEdldEN1cnJlbnRTdHJpbmdGcm9tRnJhZ21lbnQoIGNvbnN0IGNvbnN0X2ZyYWdtZW50X3R5cGUm
IGFGcmFnbWVudCApIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIChhRnJhZ21lbnQu
R2V0SURBc0ludCgpICYgbUZyYWdtZW50SWRlbnRpZmllck1hc2spID8ga0xhc3RTdHJpbmcgOiBr
Rmlyc3RTdHJpbmc7CiAgICAgICAgfQoKICAgICAgaW50CiAgICAgIFNldEZpcnN0U3RyaW5nSW5G
cmFnbWVudCggY29uc3RfZnJhZ21lbnRfdHlwZSYgYUZyYWdtZW50ICkgY29uc3QKICAgICAgICB7
CiAgICAgICAgICBhRnJhZ21lbnQuU2V0SUQoYUZyYWdtZW50LkdldElEQXNJbnQoKSAmIH5tRnJh
Z21lbnRJZGVudGlmaWVyTWFzayk7CiAgICAgICAgICByZXR1cm4ga0ZpcnN0U3RyaW5nOwogICAg
ICAgIH0KCiAgICAgIGludAogICAgICBTZXRMYXN0U3RyaW5nSW5GcmFnbWVudCggY29uc3RfZnJh
Z21lbnRfdHlwZSYgYUZyYWdtZW50ICkgY29uc3QKICAgICAgICB7CiAgICAgICAgICBhRnJhZ21l
bnQuU2V0SUQoYUZyYWdtZW50LkdldElEQXNJbnQoKSB8IG1GcmFnbWVudElkZW50aWZpZXJNYXNr
KTsKICAgICAgICAgIHJldHVybiBrTGFzdFN0cmluZzsKICAgICAgICB9CgogICAgcHVibGljOgog
ICAgICBuc0RlcGVuZGVudENDb25jYXRlbmF0aW9uKCBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlw
ZSYgYUZpcnN0U3RyaW5nLCBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlwZSYgYUxhc3RTdHJpbmcs
IFBSVWludDMyIGFNYXNrID0gMSApCiAgICAgICAgICA6IG1GcmFnbWVudElkZW50aWZpZXJNYXNr
KGFNYXNrKQogICAgICAgIHsKICAgICAgICAgIG1TdHJpbmdzW2tGaXJzdFN0cmluZ10gPSAmYUZp
cnN0U3RyaW5nOwogICAgICAgICAgbVN0cmluZ3Nba0xhc3RTdHJpbmddID0gJmFMYXN0U3RyaW5n
OwogICAgICAgIH0KCiAgICAgIG5zRGVwZW5kZW50Q0NvbmNhdGVuYXRpb24oIGNvbnN0IHNlbGZf
dHlwZSYgYUZpcnN0U3RyaW5nLCBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlwZSYgYUxhc3RTdHJp
bmcgKQogICAgICAgICAgOiBtRnJhZ21lbnRJZGVudGlmaWVyTWFzayhhRmlyc3RTdHJpbmcubUZy
YWdtZW50SWRlbnRpZmllck1hc2s8PDEpCiAgICAgICAgewogICAgICAgICAgbVN0cmluZ3Nba0Zp
cnN0U3RyaW5nXSA9ICZhRmlyc3RTdHJpbmc7CiAgICAgICAgICBtU3RyaW5nc1trTGFzdFN0cmlu
Z10gPSAmYUxhc3RTdHJpbmc7CiAgICAgICAgfQoKCgoKICAgIHByaXZhdGU6CgogICAgICB2b2lk
IG9wZXJhdG9yPSggY29uc3Qgc2VsZl90eXBlJiApOwoKICAgIHB1YmxpYzoKCiAgICAgIHZpcnR1
YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29uc3Q7CgoKCgogICAgICBQUlVpbnQzMiBHZXRGcmFnbWVu
dElkZW50aWZpZXJNYXNrKCkgY29uc3QgeyByZXR1cm4gbUZyYWdtZW50SWRlbnRpZmllck1hc2s7
IH0KCiAgICBwcml2YXRlOgogICAgICB2b2lkIG9wZXJhdG9yKyggY29uc3Qgc2VsZl90eXBlJiAp
OwoKCgogICAgcHJpdmF0ZToKICAgICAgY29uc3QgYWJzdHJhY3Rfc3RyaW5nX3R5cGUqIG1TdHJp
bmdzWzJdOwogICAgICBQUlVpbnQzMiBtRnJhZ21lbnRJZGVudGlmaWVyTWFzazsKICB9OwojIDIx
NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0RlcGVuZGVudENvbmNhdGVuYXRpb24u
aCIKaW5saW5lCmNvbnN0IG5zRGVwZW5kZW50Q29uY2F0ZW5hdGlvbgpvcGVyYXRvcisoIGNvbnN0
IG5zRGVwZW5kZW50Q29uY2F0ZW5hdGlvbiYgbGhzLCBjb25zdCBuc0FTdHJpbmcmIHJocyApCiAg
ewogICAgcmV0dXJuIG5zRGVwZW5kZW50Q29uY2F0ZW5hdGlvbihsaHMsIHJocywgbGhzLkdldEZy
YWdtZW50SWRlbnRpZmllck1hc2soKTw8MSk7CiAgfQoKaW5saW5lCmNvbnN0IG5zRGVwZW5kZW50
Q0NvbmNhdGVuYXRpb24Kb3BlcmF0b3IrKCBjb25zdCBuc0RlcGVuZGVudENDb25jYXRlbmF0aW9u
JiBsaHMsIGNvbnN0IG5zQUNTdHJpbmcmIHJocyApCiAgewogICAgcmV0dXJuIG5zRGVwZW5kZW50
Q0NvbmNhdGVuYXRpb24obGhzLCByaHMsIGxocy5HZXRGcmFnbWVudElkZW50aWZpZXJNYXNrKCk8
PDEpOwogIH0KCmlubGluZQpjb25zdCBuc0RlcGVuZGVudENvbmNhdGVuYXRpb24Kb3BlcmF0b3Ir
KCBjb25zdCBuc0FTdHJpbmcmIGxocywgY29uc3QgbnNBU3RyaW5nJiByaHMgKQogIHsKICAgIHJl
dHVybiBuc0RlcGVuZGVudENvbmNhdGVuYXRpb24obGhzLCByaHMpOwogIH0KCmlubGluZQpjb25z
dCBuc0RlcGVuZGVudENDb25jYXRlbmF0aW9uCm9wZXJhdG9yKyggY29uc3QgbnNBQ1N0cmluZyYg
bGhzLCBjb25zdCBuc0FDU3RyaW5nJiByaHMgKQogIHsKICAgIHJldHVybiBuc0RlcGVuZGVudEND
b25jYXRlbmF0aW9uKGxocywgcmhzKTsKICB9CiMgODE2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv
c3RyaW5nL25zQVN0cmluZy5oIiAyCiMgNDQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9u
c1ZvaWRBcnJheS5oIiAyCgpjbGFzcyBuc0lTaXplT2ZIYW5kbGVyOwoKCnR5cGVkZWYgaW50ICgq
IG5zVm9pZEFycmF5Q29tcGFyYXRvckZ1bmMpCiAgICAgICAgICAgIChjb25zdCB2b2lkKiBhRWxl
bWVudDEsIGNvbnN0IHZvaWQqIGFFbGVtZW50Miwgdm9pZCogYURhdGEpOwoKCnR5cGVkZWYgUFJC
b29sICgqIG5zVm9pZEFycmF5RW51bUZ1bmMpKHZvaWQqIGFFbGVtZW50LCB2b2lkICphRGF0YSk7
CgoKY2xhc3MgbnNWb2lkQXJyYXkgewpwdWJsaWM6CiAgbnNWb2lkQXJyYXkoKTsKICBuc1ZvaWRB
cnJheShQUkludDMyIGFDb3VudCk7CiAgdmlydHVhbCB+bnNWb2lkQXJyYXkoKTsKCiAgbnNWb2lk
QXJyYXkmIG9wZXJhdG9yPShjb25zdCBuc1ZvaWRBcnJheSYgb3RoZXIpOwoKCgoKCiAgaW5saW5l
IFBSSW50MzIgQ291bnQoKSBjb25zdCB7CiAgICByZXR1cm4gbUltcGwgPyBtSW1wbC0+bUNvdW50
IDogMDsKICB9CgogIGlubGluZSBQUkludDMyIEdldEFycmF5U2l6ZSgpIGNvbnN0IHsKICAgIHJl
dHVybiBtSW1wbCA/IChQUkludDMyKG1JbXBsLT5tQml0cykgJiBrQXJyYXlTaXplTWFzaykgOiAw
OwogIH0KCiAgdm9pZCogRWxlbWVudEF0KFBSSW50MzIgYUluZGV4KSBjb25zdAogIHsKICAgIDsK
ICAgIDsKCgoKICAgIGlmIChhSW5kZXggPj0gQ291bnQoKSkKICAgIHsKICAgICAgcmV0dXJuIDA7
CiAgICB9CiAgICByZXR1cm4gbUltcGwgPyBtSW1wbC0+bUFycmF5W2FJbmRleF0gOiAwOwogIH0K
CgogIHZvaWQqIFNhZmVFbGVtZW50QXQoUFJJbnQzMiBhSW5kZXgpIGNvbnN0CiAgewogICAgaWYg
KGFJbmRleCA8IDAgfHwgYUluZGV4ID49IENvdW50KCkpCiAgICB7CiAgICAgIHJldHVybiAwOwog
ICAgfQogICAgcmV0dXJuIG1JbXBsID8gbUltcGwtPm1BcnJheVthSW5kZXhdIDogMDsKICB9Cgog
IHZvaWQqIG9wZXJhdG9yW10oUFJJbnQzMiBhSW5kZXgpIGNvbnN0IHsgcmV0dXJuIEVsZW1lbnRB
dChhSW5kZXgpOyB9CgogIFBSSW50MzIgSW5kZXhPZih2b2lkKiBhUG9zc2libGVFbGVtZW50KSBj
b25zdDsKCiAgUFJCb29sIEluc2VydEVsZW1lbnRBdCh2b2lkKiBhRWxlbWVudCwgUFJJbnQzMiBh
SW5kZXgpOwogIFBSQm9vbCBJbnNlcnRFbGVtZW50c0F0KGNvbnN0IG5zVm9pZEFycmF5ICZvdGhl
ciwgUFJJbnQzMiBhSW5kZXgpOwoKICBQUkJvb2wgUmVwbGFjZUVsZW1lbnRBdCh2b2lkKiBhRWxl
bWVudCwgUFJJbnQzMiBhSW5kZXgpOwoKCiAgUFJCb29sIE1vdmVFbGVtZW50KFBSSW50MzIgYUZy
b20sIFBSSW50MzIgYVRvKTsKCiAgUFJCb29sIEFwcGVuZEVsZW1lbnQodm9pZCogYUVsZW1lbnQp
IHsKICAgIHJldHVybiBJbnNlcnRFbGVtZW50QXQoYUVsZW1lbnQsIENvdW50KCkpOwogIH0KCiAg
UFJCb29sIEFwcGVuZEVsZW1lbnRzKG5zVm9pZEFycmF5JiBhRWxlbWVudHMpIHsKICAgIHJldHVy
biBJbnNlcnRFbGVtZW50c0F0KGFFbGVtZW50cywgQ291bnQoKSk7CiAgfQoKICBQUkJvb2wgUmVt
b3ZlRWxlbWVudCh2b2lkKiBhRWxlbWVudCk7CiAgUFJCb29sIFJlbW92ZUVsZW1lbnRzQXQoUFJJ
bnQzMiBhSW5kZXgsIFBSSW50MzIgYUNvdW50KTsKICBQUkJvb2wgUmVtb3ZlRWxlbWVudEF0KFBS
SW50MzIgYUluZGV4KSB7IHJldHVybiBSZW1vdmVFbGVtZW50c0F0KGFJbmRleCwxKTsgfQoKICB2
aXJ0dWFsIHZvaWQgQ2xlYXIoKTsKCiAgdmlydHVhbCBQUkJvb2wgU2l6ZVRvKFBSSW50MzIgYU1p
bik7CgoKICB2aXJ0dWFsIHZvaWQgQ29tcGFjdCgpOwoKICB2b2lkIFNvcnQobnNWb2lkQXJyYXlD
b21wYXJhdG9yRnVuYyBhRnVuYywgdm9pZCogYURhdGEpOwoKICBQUkJvb2wgRW51bWVyYXRlRm9y
d2FyZHMobnNWb2lkQXJyYXlFbnVtRnVuYyBhRnVuYywgdm9pZCogYURhdGEpOwogIFBSQm9vbCBF
bnVtZXJhdGVCYWNrd2FyZHMobnNWb2lkQXJyYXlFbnVtRnVuYyBhRnVuYywgdm9pZCogYURhdGEp
OwoKcHJvdGVjdGVkOgogIHZpcnR1YWwgUFJCb29sIEdyb3dBcnJheUJ5KFBSSW50MzIgYUdyb3dC
eSk7CgogIHN0cnVjdCBJbXBsIHsKCgoKCgoKICAgIFBSVWludDMyIG1CaXRzOwoKCgoKICAgIFBS
SW50MzIgbUNvdW50OwoKCgoKICAgIHZvaWQqIG1BcnJheVsxXTsKICB9OwoKICBJbXBsKiBtSW1w
bDsKCgoKCgoKICBlbnVtIHsKICAgIGtBcnJheU93bmVyTWFzayA9IDEgPDwgMzEsCiAgICBrQXJy
YXlTaXplTWFzayA9IH5rQXJyYXlPd25lck1hc2sKICB9OwoKCgogIHZvaWQgU2V0QXJyYXkoSW1w
bCAqbmV3SW1wbCwgUFJJbnQzMiBhU2l6ZSwgUFJJbnQzMiBhQ291bnQsIFBSQm9vbCBvd25lcik7
CiAgaW5saW5lIFBSQm9vbCBJc0FycmF5T3duZXIoKSBjb25zdCB7CiAgICByZXR1cm4gbUltcGwg
PyAoUFJCb29sKG1JbXBsLT5tQml0cykgJiBrQXJyYXlPd25lck1hc2spIDogMDsKICB9Cgpwcml2
YXRlOgoKICBuc1ZvaWRBcnJheShjb25zdCBuc1ZvaWRBcnJheSYgb3RoZXIpOwp9OwoKCgpjbGFz
cyBuc0F1dG9Wb2lkQXJyYXkgOiBwdWJsaWMgbnNWb2lkQXJyYXkgewpwdWJsaWM6CiAgbnNBdXRv
Vm9pZEFycmF5KCk7CiAgdm9pZCBDbGVhcigpOwoKICB2aXJ0dWFsIFBSQm9vbCBTaXplVG8oUFJJ
bnQzMiBhTWluKTsKICB2aXJ0dWFsIHZvaWQgQ29tcGFjdCgpOwoKcHJvdGVjdGVkOgoKICBlbnVt
IHsga0F1dG9CdWZTaXplID0gOCB9OwogIGNoYXIgbUF1dG9CdWZbc2l6ZW9mKEltcGwpICsgKGtB
dXRvQnVmU2l6ZSAtIDEpICogc2l6ZW9mKHZvaWQqKV07Cn07CgoKY2xhc3MgbnNTdHJpbmc7Cgp0
eXBlZGVmIGludCAoKiBuc1N0cmluZ0FycmF5Q29tcGFyYXRvckZ1bmMpCiAgICAgICAgICAgIChj
b25zdCBuc1N0cmluZyogYUVsZW1lbnQxLCBjb25zdCBuc1N0cmluZyogYUVsZW1lbnQyLCB2b2lk
KiBhRGF0YSk7Cgp0eXBlZGVmIFBSQm9vbCAoKm5zU3RyaW5nQXJyYXlFbnVtRnVuYykobnNTdHJp
bmcmIGFFbGVtZW50LCB2b2lkICphRGF0YSk7CgpjbGFzcyBuc1N0cmluZ0FycmF5OiBwcm90ZWN0
ZWQgbnNWb2lkQXJyYXkKewpwdWJsaWM6CiAgbnNTdHJpbmdBcnJheSh2b2lkKTsKICBuc1N0cmlu
Z0FycmF5KFBSSW50MzIgYUNvdW50KTsKICB2aXJ0dWFsIH5uc1N0cmluZ0FycmF5KHZvaWQpOwoK
ICBuc1N0cmluZ0FycmF5JiBvcGVyYXRvcj0oY29uc3QgbnNTdHJpbmdBcnJheSYgb3RoZXIpOwoK
CgoKCiAgUFJJbnQzMiBDb3VudCh2b2lkKSBjb25zdCB7CiAgICByZXR1cm4gbnNWb2lkQXJyYXk6
OkNvdW50KCk7CiAgfQoKICB2b2lkIFN0cmluZ0F0KFBSSW50MzIgYUluZGV4LCBuc0FTdHJpbmcm
IGFTdHJpbmcpIGNvbnN0OwogIG5zU3RyaW5nKiBTdHJpbmdBdChQUkludDMyIGFJbmRleCkgY29u
c3Q7CiAgbnNTdHJpbmcqIG9wZXJhdG9yW10oUFJJbnQzMiBhSW5kZXgpIGNvbnN0IHsgcmV0dXJu
IFN0cmluZ0F0KGFJbmRleCk7IH0KCiAgUFJJbnQzMiBJbmRleE9mKGNvbnN0IG5zQVN0cmluZyYg
YVBvc3NpYmxlU3RyaW5nKSBjb25zdDsKCiAgUFJCb29sIEluc2VydFN0cmluZ0F0KGNvbnN0IG5z
QVN0cmluZyYgYVN0cmluZywgUFJJbnQzMiBhSW5kZXgpOwoKICBQUkJvb2wgUmVwbGFjZVN0cmlu
Z0F0KGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZywgUFJJbnQzMiBhSW5kZXgpOwoKICBQUkJvb2wg
QXBwZW5kU3RyaW5nKGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZykgewogICAgcmV0dXJuIEluc2Vy
dFN0cmluZ0F0KGFTdHJpbmcsIENvdW50KCkpOwogIH0KCiAgUFJCb29sIFJlbW92ZVN0cmluZyhj
b25zdCBuc0FTdHJpbmcmIGFTdHJpbmcpOwogIFBSQm9vbCBSZW1vdmVTdHJpbmdBdChQUkludDMy
IGFJbmRleCk7CiAgdm9pZCBDbGVhcih2b2lkKTsKCiAgdm9pZCBDb21wYWN0KHZvaWQpIHsKICAg
IG5zVm9pZEFycmF5OjpDb21wYWN0KCk7CiAgfQoKICB2b2lkIFNvcnQodm9pZCk7CiAgdm9pZCBT
b3J0KG5zU3RyaW5nQXJyYXlDb21wYXJhdG9yRnVuYyBhRnVuYywgdm9pZCogYURhdGEpOwoKICBQ
UkJvb2wgRW51bWVyYXRlRm9yd2FyZHMobnNTdHJpbmdBcnJheUVudW1GdW5jIGFGdW5jLCB2b2lk
KiBhRGF0YSk7CiAgUFJCb29sIEVudW1lcmF0ZUJhY2t3YXJkcyhuc1N0cmluZ0FycmF5RW51bUZ1
bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKTsKCnByaXZhdGU6CgogIG5zU3RyaW5nQXJyYXkoY29uc3Qg
bnNTdHJpbmdBcnJheSYgb3RoZXIpOwp9OwoKCmNsYXNzIG5zQ1N0cmluZzsKCnR5cGVkZWYgaW50
ICgqIG5zQ1N0cmluZ0FycmF5Q29tcGFyYXRvckZ1bmMpCiAgICAgICAgICAgIChjb25zdCBuc0NT
dHJpbmcqIGFFbGVtZW50MSwgY29uc3QgbnNDU3RyaW5nKiBhRWxlbWVudDIsIHZvaWQqIGFEYXRh
KTsKCnR5cGVkZWYgUFJCb29sICgqbnNDU3RyaW5nQXJyYXlFbnVtRnVuYykobnNDU3RyaW5nJiBh
RWxlbWVudCwgdm9pZCAqYURhdGEpOwoKY2xhc3MgbnNDU3RyaW5nQXJyYXk6IHByb3RlY3RlZCBu
c1ZvaWRBcnJheQp7CnB1YmxpYzoKICBuc0NTdHJpbmdBcnJheSh2b2lkKTsKICBuc0NTdHJpbmdB
cnJheShQUkludDMyIGFDb3VudCk7CiAgdmlydHVhbCB+bnNDU3RyaW5nQXJyYXkodm9pZCk7Cgog
IG5zQ1N0cmluZ0FycmF5JiBvcGVyYXRvcj0oY29uc3QgbnNDU3RyaW5nQXJyYXkmIG90aGVyKTsK
CgoKCgoKICB2b2lkIFBhcnNlU3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZywgY29uc3QgY2hhciog
ZGVsaW1pdGVyKTsKCgoKCgogIFBSSW50MzIgQ291bnQodm9pZCkgY29uc3QgewogICAgcmV0dXJu
IG5zVm9pZEFycmF5OjpDb3VudCgpOwogIH0KCiAgdm9pZCBDU3RyaW5nQXQoUFJJbnQzMiBhSW5k
ZXgsIG5zQ1N0cmluZyYgYUNTdHJpbmcpIGNvbnN0OwogIG5zQ1N0cmluZyogQ1N0cmluZ0F0KFBS
SW50MzIgYUluZGV4KSBjb25zdDsKICBuc0NTdHJpbmcqIG9wZXJhdG9yW10oUFJJbnQzMiBhSW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIENTdHJpbmdBdChhSW5kZXgpOyB9CgogIFBSSW50MzIgSW5kZXhP
Zihjb25zdCBuc0NTdHJpbmcmIGFQb3NzaWJsZVN0cmluZykgY29uc3Q7CiAgUFJJbnQzMiBJbmRl
eE9mSWdub3JlQ2FzZShjb25zdCBuc0NTdHJpbmcmIGFQb3NzaWJsZVN0cmluZykgY29uc3Q7Cgog
IFBSQm9vbCBJbnNlcnRDU3RyaW5nQXQoY29uc3QgbnNDU3RyaW5nJiBhQ1N0cmluZywgUFJJbnQz
MiBhSW5kZXgpOwoKICBQUkJvb2wgUmVwbGFjZUNTdHJpbmdBdChjb25zdCBuc0NTdHJpbmcmIGFD
U3RyaW5nLCBQUkludDMyIGFJbmRleCk7CgogIFBSQm9vbCBBcHBlbmRDU3RyaW5nKGNvbnN0IG5z
Q1N0cmluZyYgYUNTdHJpbmcpIHsKICAgIHJldHVybiBJbnNlcnRDU3RyaW5nQXQoYUNTdHJpbmcs
IENvdW50KCkpOwogIH0KCiAgUFJCb29sIFJlbW92ZUNTdHJpbmcoY29uc3QgbnNDU3RyaW5nJiBh
Q1N0cmluZyk7CiAgUFJCb29sIFJlbW92ZUNTdHJpbmdJZ25vcmVDYXNlKGNvbnN0IG5zQ1N0cmlu
ZyYgYUNTdHJpbmcpOwogIFBSQm9vbCBSZW1vdmVDU3RyaW5nQXQoUFJJbnQzMiBhSW5kZXgpOwog
IHZvaWQgQ2xlYXIodm9pZCk7CgogIHZvaWQgQ29tcGFjdCh2b2lkKSB7CiAgICBuc1ZvaWRBcnJh
eTo6Q29tcGFjdCgpOwogIH0KCiAgdm9pZCBTb3J0KHZvaWQpOwogIHZvaWQgU29ydElnbm9yZUNh
c2Uodm9pZCk7CiAgdm9pZCBTb3J0KG5zQ1N0cmluZ0FycmF5Q29tcGFyYXRvckZ1bmMgYUZ1bmMs
IHZvaWQqIGFEYXRhKTsKCiAgUFJCb29sIEVudW1lcmF0ZUZvcndhcmRzKG5zQ1N0cmluZ0FycmF5
RW51bUZ1bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKTsKICBQUkJvb2wgRW51bWVyYXRlQmFja3dhcmRz
KG5zQ1N0cmluZ0FycmF5RW51bUZ1bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKTsKCnByaXZhdGU6Cgog
IG5zQ1N0cmluZ0FycmF5KGNvbnN0IG5zQ1N0cmluZ0FycmF5JiBvdGhlcik7Cn07CiMgMzQ5ICIu
Li8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNWb2lkQXJyYXkuaCIKY2xhc3MgbnNTbWFsbFZv
aWRBcnJheQp7CnB1YmxpYzoKICBuc1NtYWxsVm9pZEFycmF5KCk7CiAgfm5zU21hbGxWb2lkQXJy
YXkoKTsKCiAgbnNTbWFsbFZvaWRBcnJheSYgb3BlcmF0b3I9KG5zU21hbGxWb2lkQXJyYXkmIG90
aGVyKTsKICB2b2lkKiBvcGVyYXRvcltdKFBSSW50MzIgYUluZGV4KSBjb25zdCB7IHJldHVybiBF
bGVtZW50QXQoYUluZGV4KTsgfQoKCgoKICBQUkludDMyIEdldEFycmF5U2l6ZSgpIGNvbnN0OwoK
ICBQUkludDMyIENvdW50KCkgY29uc3Q7CiAgdm9pZCogRWxlbWVudEF0KFBSSW50MzIgYUluZGV4
KSBjb25zdDsKICB2b2lkKiBTYWZlRWxlbWVudEF0KFBSSW50MzIgYUluZGV4KSBjb25zdCB7Cgog
ICAgaWYgKGFJbmRleCA8IDAgfHwgYUluZGV4ID49IENvdW50KCkpCiAgICAgIHJldHVybiAwOwog
ICAgcmV0dXJuIEVsZW1lbnRBdChhSW5kZXgpOwogIH0KICBQUkludDMyIEluZGV4T2Yodm9pZCog
YVBvc3NpYmxlRWxlbWVudCkgY29uc3Q7CiAgUFJCb29sIEluc2VydEVsZW1lbnRBdCh2b2lkKiBh
RWxlbWVudCwgUFJJbnQzMiBhSW5kZXgpOwogIFBSQm9vbCBJbnNlcnRFbGVtZW50c0F0KGNvbnN0
IG5zVm9pZEFycmF5ICZvdGhlciwgUFJJbnQzMiBhSW5kZXgpOwogIFBSQm9vbCBSZXBsYWNlRWxl
bWVudEF0KHZvaWQqIGFFbGVtZW50LCBQUkludDMyIGFJbmRleCk7CiAgUFJCb29sIE1vdmVFbGVt
ZW50KFBSSW50MzIgYUZyb20sIFBSSW50MzIgYVRvKTsKICBQUkJvb2wgQXBwZW5kRWxlbWVudCh2
b2lkKiBhRWxlbWVudCk7CiAgUFJCb29sIEFwcGVuZEVsZW1lbnRzKG5zVm9pZEFycmF5JiBhRWxl
bWVudHMpIHsKICAgIHJldHVybiBJbnNlcnRFbGVtZW50c0F0KGFFbGVtZW50cywgQ291bnQoKSk7
CiAgfQogIFBSQm9vbCBSZW1vdmVFbGVtZW50KHZvaWQqIGFFbGVtZW50KTsKICBQUkJvb2wgUmVt
b3ZlRWxlbWVudHNBdChQUkludDMyIGFJbmRleCwgUFJJbnQzMiBhQ291bnQpOwogIFBSQm9vbCBS
ZW1vdmVFbGVtZW50QXQoUFJJbnQzMiBhSW5kZXgpOwoKICB2b2lkIENsZWFyKCk7CiAgUFJCb29s
IFNpemVUbyhQUkludDMyIGFNaW4pOwogIHZvaWQgQ29tcGFjdCgpOwogIHZvaWQgU29ydChuc1Zv
aWRBcnJheUNvbXBhcmF0b3JGdW5jIGFGdW5jLCB2b2lkKiBhRGF0YSk7CgogIFBSQm9vbCBFbnVt
ZXJhdGVGb3J3YXJkcyhuc1ZvaWRBcnJheUVudW1GdW5jIGFGdW5jLCB2b2lkKiBhRGF0YSk7CiAg
UFJCb29sIEVudW1lcmF0ZUJhY2t3YXJkcyhuc1ZvaWRBcnJheUVudW1GdW5jIGFGdW5jLCB2b2lk
KiBhRGF0YSk7Cgpwcml2YXRlOgogIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBQdHJCaXRzOwoKICBQ
UkJvb2wgSGFzU2luZ2xlQ2hpbGQoKSBjb25zdAogIHsKICAgIHJldHVybiAobUNoaWxkcmVuICYm
IChQdHJCaXRzKG1DaGlsZHJlbikgJiAweDEpKTsKICB9CiAgUFJCb29sIEhhc1ZlY3RvcigpIGNv
bnN0CiAgewogICAgcmV0dXJuIChtQ2hpbGRyZW4gJiYgIShQdHJCaXRzKG1DaGlsZHJlbikgJiAw
eDEpKTsKICB9CiAgdm9pZCogR2V0U2luZ2xlQ2hpbGQoKSBjb25zdAogIHsKICAgIHJldHVybiAo
bUNoaWxkcmVuID8gKCh2b2lkKikoUHRyQml0cyhtQ2hpbGRyZW4pICYgfjB4MSkpIDogMCk7CiAg
fQogIHZvaWQgU2V0U2luZ2xlQ2hpbGQodm9pZCAqYUNoaWxkKTsKICBuc1ZvaWRBcnJheSogR2V0
Q2hpbGRWZWN0b3IoKSBjb25zdAogIHsKICAgIHJldHVybiAobnNWb2lkQXJyYXkqKW1DaGlsZHJl
bjsKICB9CiAgbnNWb2lkQXJyYXkqIFN3aXRjaFRvVmVjdG9yKCk7CgoKCgoKICB2b2lkICptQ2hp
bGRyZW47Cn07CiMgNDUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NQ2xhc3NJbmZv
LmgiIDIKCmVudW0gbnNET01DbGFzc0luZm9JRCB7CgogIGVET01DbGFzc0luZm9fV2luZG93X2lk
LAogIGVET01DbGFzc0luZm9fTG9jYXRpb25faWQsCiAgZURPTUNsYXNzSW5mb19OYXZpZ2F0b3Jf
aWQsCiAgZURPTUNsYXNzSW5mb19QbHVnaW5faWQsCiAgZURPTUNsYXNzSW5mb19QbHVnaW5BcnJh
eV9pZCwKICBlRE9NQ2xhc3NJbmZvX01pbWVUeXBlX2lkLAogIGVET01DbGFzc0luZm9fTWltZVR5
cGVBcnJheV9pZCwKICBlRE9NQ2xhc3NJbmZvX0JhclByb3BfaWQsCiAgZURPTUNsYXNzSW5mb19I
aXN0b3J5X2lkLAogIGVET01DbGFzc0luZm9fU2NyZWVuX2lkLAoKCiAgZURPTUNsYXNzSW5mb19Y
TUxEb2N1bWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0RvY3VtZW50VHlwZV9pZCwKICBlRE9NQ2xh
c3NJbmZvX0RPTUltcGxlbWVudGF0aW9uX2lkLAogIGVET01DbGFzc0luZm9fRE9NRXhjZXB0aW9u
X2lkLAogIGVET01DbGFzc0luZm9fRG9jdW1lbnRGcmFnbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZv
X0VsZW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19BdHRyX2lkLAogIGVET01DbGFzc0luZm9fVGV4
dF9pZCwKICBlRE9NQ2xhc3NJbmZvX0NvbW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19DREFUQVNl
Y3Rpb25faWQsCiAgZURPTUNsYXNzSW5mb19Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25faWQsCiAgZURP
TUNsYXNzSW5mb19FbnRpdHlfaWQsCiAgZURPTUNsYXNzSW5mb19FbnRpdHlSZWZlcmVuY2VfaWQs
CiAgZURPTUNsYXNzSW5mb19Ob3RhdGlvbl9pZCwKICBlRE9NQ2xhc3NJbmZvX05vZGVMaXN0X2lk
LAogIGVET01DbGFzc0luZm9fTmFtZWROb2RlTWFwX2lkLAoKCiAgZURPTUNsYXNzSW5mb19Eb2N1
bWVudFN0eWxlU2hlZXRMaXN0X2lkLAoKCiAgZURPTUNsYXNzSW5mb19FdmVudF9pZCwKICBlRE9N
Q2xhc3NJbmZvX011dGF0aW9uRXZlbnRfaWQsCgoKICBlRE9NQ2xhc3NJbmZvX0hUTUxEb2N1bWVu
dF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxDb2xsZWN0aW9uX2lkLAogIGVET01DbGFzc0luZm9f
SFRNTE9wdGlvbkNvbGxlY3Rpb25faWQsCiAgZURPTUNsYXNzSW5mb19IVE1MRm9ybUNvbnRyb2xD
b2xsZWN0aW9uX2lkLAogIGVET01DbGFzc0luZm9fSFRNTEdlbmVyaWNDb2xsZWN0aW9uX2lkLAoK
CiAgZURPTUNsYXNzSW5mb19IVE1MQW5jaG9yRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hU
TUxBcHBsZXRFbGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRNTEFyZWFFbGVtZW50X2lkLAog
IGVET01DbGFzc0luZm9fSFRNTEJSRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxCYXNl
RWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxCYXNlRm9udEVsZW1lbnRfaWQsCiAgZURP
TUNsYXNzSW5mb19IVE1MQm9keUVsZW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19IVE1MQnV0dG9u
RWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxETGlzdEVsZW1lbnRfaWQsCiAgZURPTUNs
YXNzSW5mb19IVE1MRGVsRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxEaXJlY3RvcnlF
bGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRNTERpdkVsZW1lbnRfaWQsCiAgZURPTUNsYXNz
SW5mb19IVE1MRW1iZWRFbGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRNTEZpZWxkU2V0RWxl
bWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxGb250RWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJ
bmZvX0hUTUxGb3JtRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxGcmFtZUVsZW1lbnRf
aWQsCiAgZURPTUNsYXNzSW5mb19IVE1MRnJhbWVTZXRFbGVtZW50X2lkLAogIGVET01DbGFzc0lu
Zm9fSFRNTEhSRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxIZWFkRWxlbWVudF9pZCwK
ICBlRE9NQ2xhc3NJbmZvX0hUTUxIZWFkaW5nRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hU
TUxIdG1sRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxJRnJhbWVFbGVtZW50X2lkLAog
IGVET01DbGFzc0luZm9fSFRNTEltYWdlRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxJ
bnB1dEVsZW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19IVE1MSW5zRWxlbWVudF9pZCwKICBlRE9N
Q2xhc3NJbmZvX0hUTUxJc0luZGV4RWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxMSUVs
ZW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19IVE1MTGFiZWxFbGVtZW50X2lkLAogIGVET01DbGFz
c0luZm9fSFRNTExlZ2VuZEVsZW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19IVE1MTGlua0VsZW1l
bnRfaWQsCiAgZURPTUNsYXNzSW5mb19IVE1MTWFwRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZv
X0hUTUxNZW51RWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxNZXRhRWxlbWVudF9pZCwK
ICBlRE9NQ2xhc3NJbmZvX0hUTUxNb2RFbGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRNTE9M
aXN0RWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxPYmplY3RFbGVtZW50X2lkLAogIGVE
T01DbGFzc0luZm9fSFRNTE9wdEdyb3VwRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxP
cHRpb25FbGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRNTFBhcmFncmFwaEVsZW1lbnRfaWQs
CiAgZURPTUNsYXNzSW5mb19IVE1MUGFyYW1FbGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRN
TFByZUVsZW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19IVE1MUXVvdGVFbGVtZW50X2lkLAogIGVE
T01DbGFzc0luZm9fSFRNTFNjcmlwdEVsZW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19IVE1MU2Vs
ZWN0RWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxTcGFjZXJFbGVtZW50X2lkLAogIGVE
T01DbGFzc0luZm9fSFRNTFNwYW5FbGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRNTFN0eWxl
RWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxUYWJsZUNhcHRpb25FbGVtZW50X2lkLAog
IGVET01DbGFzc0luZm9fSFRNTFRhYmxlQ2VsbEVsZW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19I
VE1MVGFibGVDb2xFbGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRNTFRhYmxlQ29sR3JvdXBF
bGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRNTFRhYmxlRWxlbWVudF9pZCwKICBlRE9NQ2xh
c3NJbmZvX0hUTUxUYWJsZVJvd0VsZW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19IVE1MVGFibGVT
ZWN0aW9uRWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxUZXh0QXJlYUVsZW1lbnRfaWQs
CiAgZURPTUNsYXNzSW5mb19IVE1MVGl0bGVFbGVtZW50X2lkLAogIGVET01DbGFzc0luZm9fSFRN
TFVMaXN0RWxlbWVudF9pZCwKICBlRE9NQ2xhc3NJbmZvX0hUTUxVbmtub3duRWxlbWVudF9pZCwK
ICBlRE9NQ2xhc3NJbmZvX0hUTUxXQlJFbGVtZW50X2lkLAoKCiAgZURPTUNsYXNzSW5mb19DU1NT
dHlsZVJ1bGVfaWQsCiAgZURPTUNsYXNzSW5mb19DU1NDaGFyc2V0UnVsZV9pZCwKICBlRE9NQ2xh
c3NJbmZvX0NTU0ltcG9ydFJ1bGVfaWQsCiAgZURPTUNsYXNzSW5mb19DU1NNZWRpYVJ1bGVfaWQs
CiAgZURPTUNsYXNzSW5mb19DU1NOYW1lU3BhY2VSdWxlX2lkLAogIGVET01DbGFzc0luZm9fQ1NT
UnVsZUxpc3RfaWQsCiAgZURPTUNsYXNzSW5mb19DU1NHcm91cFJ1bGVSdWxlTGlzdF9pZCwKICBl
RE9NQ2xhc3NJbmZvX01lZGlhTGlzdF9pZCwKICBlRE9NQ2xhc3NJbmZvX1N0eWxlU2hlZXRMaXN0
X2lkLAogIGVET01DbGFzc0luZm9fQ1NTU3R5bGVTaGVldF9pZCwKICBlRE9NQ2xhc3NJbmZvX0NT
U1N0eWxlRGVjbGFyYXRpb25faWQsCiAgZURPTUNsYXNzSW5mb19Db21wdXRlZENTU1N0eWxlRGVj
bGFyYXRpb25faWQsCiAgZURPTUNsYXNzSW5mb19ST0NTU1ByaW1pdGl2ZVZhbHVlX2lkLAoKCiAg
ZURPTUNsYXNzSW5mb19SYW5nZV9pZCwKICBlRE9NQ2xhc3NJbmZvX1NlbGVjdGlvbl9pZCwKCgog
IGVET01DbGFzc0luZm9fWFVMRG9jdW1lbnRfaWQsCiAgZURPTUNsYXNzSW5mb19YVUxFbGVtZW50
X2lkLAogIGVET01DbGFzc0luZm9fWFVMQ29tbWFuZERpc3BhdGNoZXJfaWQsCiAgZURPTUNsYXNz
SW5mb19YVUxOb2RlTGlzdF9pZCwKICBlRE9NQ2xhc3NJbmZvX1hVTE5hbWVkTm9kZU1hcF9pZCwK
ICBlRE9NQ2xhc3NJbmZvX1hVTEF0dHJfaWQsCiAgZURPTUNsYXNzSW5mb19YVUxDb250cm9sbGVy
c19pZCwKICBlRE9NQ2xhc3NJbmZvX0JveE9iamVjdF9pZCwKICBlRE9NQ2xhc3NJbmZvX1RyZWVT
ZWxlY3Rpb25faWQsCiAgZURPTUNsYXNzSW5mb19UcmVlQ29udGVudFZpZXdfaWQsCgoKICBlRE9N
Q2xhc3NJbmZvX0NyeXB0b19pZCwKICBlRE9NQ2xhc3NJbmZvX0NSTUZPYmplY3RfaWQsCiAgZURP
TUNsYXNzSW5mb19Qa2NzMTFfaWQsCiMgMjQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25z
SURPTUNsYXNzSW5mby5oIgogIGVET01DbGFzc0luZm9fVHJlZVdhbGtlcl9pZCwKCgoKCgoKICBl
RE9NQ2xhc3NJbmZvX0NTU1JlY3RfaWQsCgoKICBlRE9NQ2xhc3NJbmZvX0Nocm9tZVdpbmRvd19p
ZCwKCgogIGVET01DbGFzc0luZm9fQ1NTUkdCQ29sb3JfaWQsCgogIGVET01DbGFzc0luZm9fUmFu
Z2VFeGNlcHRpb25faWQsCgoKCiAgZURPTUNsYXNzSW5mb19DU1NWYWx1ZUxpc3RfaWQsCgoKICBl
RE9NQ2xhc3NJbmZvX0NvbnRlbnRMaXN0X2lkLAoKCiAgZURPTUNsYXNzSW5mb19YTUxTdHlsZXNo
ZWV0UHJvY2Vzc2luZ0luc3RydWN0aW9uX2lkLAoKICBlRE9NQ2xhc3NJbmZvX0ltYWdlRG9jdW1l
bnRfaWQsCgoKICBlRE9NQ2xhc3NJbmZvSURDb3VudAp9OwoKIyAxICIuLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUveHBjb25uZWN0L25zSVhQQ1NjcmlwdGFibGUuaCIgMQojIDE0ICIuLi8uLi8uLi9kaXN0
L2luY2x1ZGUveHBjb25uZWN0L25zSVhQQ1NjcmlwdGFibGUuaCIKIyAxICIuLi8uLi8uLi9kaXN0
L2luY2x1ZGUveHBjb25uZWN0L25zSVhQQ29ubmVjdC5oIiAxCiMgMTggIi4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS94cGNvbm5lY3QvbnNJWFBDb25uZWN0LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL3hwY29ubmVjdC94cGNjb21wb25lbnRzLmgiIDEKIyAxNCAiLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL3hwY29ubmVjdC94cGNjb21wb25lbnRzLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L3hwY29ubmVjdC94cGNleGNlcHRpb24uaCIgMQojIDE0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv
eHBjb25uZWN0L3hwY2V4Y2VwdGlvbi5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNv
bS9uc0lFeGNlcHRpb24uaCIgMQojIDI5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJ
RXhjZXB0aW9uLmgiCmNsYXNzIG5zSVN0YWNrRnJhbWUgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewog
cHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJ
SUQgaWlkID0gezB4OTFkODIxMDUsIDB4N2M2MiwgMHg0ZjhiLCB7IDB4OTcsIDB4NzksIDB4MTUs
IDB4NDIsIDB4NzcsIDB4YzAsIDB4ZWUsIDB4OTAgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRMYW5ndWFnZShQUlVpbnQzMiAqYUxhbmd1YWdlKSA9IDA7CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldExhbmd1YWdlTmFtZShjaGFyICogKmFMYW5ndWFnZU5hbWUpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RmlsZW5hbWUoY2hhciAqICphRmlsZW5hbWUpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZShjaGFyICogKmFOYW1lKSA9IDA7CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldExpbmVOdW1iZXIoUFJJbnQzMiAqYUxpbmVOdW1iZXIpID0gMDsKCgog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0U291cmNlTGluZShjaGFyICogKmFTb3VyY2VMaW5lKSA9IDA7
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhbGxlcihuc0lTdGFja0ZyYW1lICogKmFDYWxsZXIp
ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgVG9TdHJpbmcoY2hhciAqKl9yZXR2YWwpID0gMDsK
Cn07CiMgMTgwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJRXhjZXB0aW9uLmgiCmNs
YXNzIG5zSUV4Y2VwdGlvbiA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRp
YyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhmM2E4
ZDNiNCwgMHhjNDI0LCAweDRlZGMsIHsgMHg4YiwgMHhmNiwgMHg4OSwgMHg3NCwgMHhjOSwgMHg4
MywgMHhiYSwgMHg3OCB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1l
c3NhZ2UoY2hhciAqICphTWVzc2FnZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSZXN1
bHQobnNyZXN1bHQgKmFSZXN1bHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZShj
aGFyICogKmFOYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEZpbGVuYW1lKGNoYXIg
KiAqYUZpbGVuYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExpbmVOdW1iZXIoUFJV
aW50MzIgKmFMaW5lTnVtYmVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbHVtbk51
bWJlcihQUlVpbnQzMiAqYUNvbHVtbk51bWJlcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRMb2NhdGlvbihuc0lTdGFja0ZyYW1lICogKmFMb2NhdGlvbikgPSAwOwoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRJbm5lcihuc0lFeGNlcHRpb24gKiAqYUlubmVyKSA9IDA7CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldERhdGEobnNJU3VwcG9ydHMgKiAqYURhdGEpID0gMDsKCgogIHZpcnR1YWwg
bnNyZXN1bHQgVG9TdHJpbmcoY2hhciAqKl9yZXR2YWwpID0gMDsKCn07CiMgMTUgIi4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QveHBjZXhjZXB0aW9uLmgiIDIKIyAyOSAiLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL3hwY29ubmVjdC94cGNleGNlcHRpb24uaCIKY2xhc3MgbnNJWFBDRXhjZXB0
aW9uIDogcHVibGljIG5zSUV4Y2VwdGlvbiB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJ
RCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhiMmEzNDAxMCwgMHgzOTgz
LCAweDExZDMsIHsgMHg5OCwgMHg4OCwgMHgwMCwgMHg2MCwgMHgwOCwgMHg5NiwgMHgyNCwgMHgy
MiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXRpYWxpemUoY29uc3Qg
Y2hhciAqYU1lc3NhZ2UsIG5zcmVzdWx0IGFSZXN1bHQsIGNvbnN0IGNoYXIgKmFOYW1lLCBuc0lT
dGFja0ZyYW1lICphTG9jYXRpb24sIG5zSVN1cHBvcnRzICphRGF0YSwgbnNJRXhjZXB0aW9uICph
SW5uZXIpID0gMDsKCn07CiMgMTUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QveHBj
Y29tcG9uZW50cy5oIiAyCgoKCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29ubmVjdC94
cGNqc2lkLmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29ubmVjdC94cGNqc2lk
LmgiCmNsYXNzIG5zSUpTSUQgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0
aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4Yzg2
YWUxMzEsIDB4ZDEwMSwgMHgxMWQyLCB7IDB4OTgsIDB4NDEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4
OTYsIDB4MjQsIDB4MjIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRO
YW1lKGNoYXIgKiAqYU5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TnVtYmVyKGNo
YXIgKiAqYU51bWJlcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJZChuc0lEICogKmFJ
ZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWYWxpZChQUkJvb2wgKmFWYWxpZCkgPSAw
OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFcXVhbHMobnNJSlNJRCAqb3RoZXIsIFBSQm9vbCAqX3Jl
dHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbml0aWFsaXplKGNvbnN0IGNoYXIgKmlk
U3RyaW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFs
KSA9IDA7Cgp9OwojIDE2NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29ubmVjdC94cGNqc2lk
LmgiCmNsYXNzIG5zSUpTSUlEIDogcHVibGljIG5zSUpTSUQgewogcHVibGljOgoKICBzdGF0aWMg
Y29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZTA4ZGNk
YTAsIDB4ZDY1MSwgMHgxMWQyLCB7IDB4OTgsIDB4NDMsIDB4MDAsIDB4NjAsIDB4MDgsIDB4OTYs
IDB4MjQsIDB4MjIgfX07IHJldHVybiBpaWQ7fQoKfTsKIyAyMjIgIi4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS94cGNvbm5lY3QveHBjanNpZC5oIgpjbGFzcyBuc0lKU0NJRCA6IHB1YmxpYyBuc0lKU0lE
IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0
IG5zSUlEIGlpZCA9IHsweGUzYTI0YTYwLCAweGQ2NTEsIDB4MTFkMiwgeyAweDk4LCAweDQzLCAw
eDAwLCAweDYwLCAweDA4LCAweDk2LCAweDI0LCAweDIyIH19OyByZXR1cm4gaWlkO30KCgogIHZp
cnR1YWwgbnNyZXN1bHQgQ3JlYXRlSW5zdGFuY2UobnNJU3VwcG9ydHMgKipfcmV0dmFsKSA9IDA7
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNlcnZpY2UobnNJU3VwcG9ydHMgKipfcmV0dmFsKSA9
IDA7Cgp9OwojIDE5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb25uZWN0L3hwY2NvbXBvbmVu
dHMuaCIgMgoKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25lbnRN
YW5hZ2VyLmgiIDEKIyAxNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVu
dE1hbmFnZXIuaCIKY2xhc3MgbnNJRmFjdG9yeTsKIyAyNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L3hwY29tL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKY2xhc3MgbnNJQ29tcG9uZW50TWFuYWdlciA6
IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0
SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhODhlNWE2MCwgMHgyMDVhLCAweDRi
YjEsIHsgMHg5NCwgMHhlMSwgMHgyNiwgMHgyOCwgMHhkYSwgMHhmNSwgMHgxZSwgMHhhZSB9fTsg
cmV0dXJuIGlpZDt9CiMgNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25l
bnRNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDbGFzc09iamVjdChjb25zdCBuc0NJ
RCAmIGFDbGFzcywgY29uc3QgbnNJSUQgJiBhSUlELCB2b2lkICogKnJlc3VsdCkgPSAwOwojIDUy
ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29tcG9uZW50TWFuYWdlci5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0Q2xhc3NPYmplY3RCeUNvbnRyYWN0SUQoY29uc3QgY2hhciAqYUNv
bnRyYWN0SUQsIGNvbnN0IG5zSUlEICYgYUlJRCwgdm9pZCAqICpyZXN1bHQpID0gMDsKIyA2NCAi
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVudE1hbmFnZXIuaCIKICB2aXJ0
dWFsIG5zcmVzdWx0IENyZWF0ZUluc3RhbmNlKGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBuc0lTdXBw
b3J0cyAqYURlbGVnYXRlLCBjb25zdCBuc0lJRCAmIGFJSUQsIHZvaWQgKiAqcmVzdWx0KSA9IDA7
CiMgNzcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25lbnRNYW5hZ2VyLmgi
CiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVJbnN0YW5jZUJ5Q29udHJhY3RJRChjb25zdCBjaGFy
ICphQ29udHJhY3RJRCwgbnNJU3VwcG9ydHMgKmFEZWxlZ2F0ZSwgY29uc3QgbnNJSUQgJiBhSUlE
LCB2b2lkICogKnJlc3VsdCkgPSAwOwoKfTsKIyAxNTggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94
cGNvbS9uc0lDb21wb25lbnRNYW5hZ2VyLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw
Y29tL25zQ29tcG9uZW50TWFuYWdlclV0aWxzLmgiIDEKIyAyOCAiLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL3hwY29tL25zQ29tcG9uZW50TWFuYWdlclV0aWxzLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL3hwY29tL25zQ09NUHRyLmgiIDEKIyAxMjIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94
cGNvbS9uc0NPTVB0ci5oIgogIHR5cGVkZWYgUFJCb29sIE5TQ0FQX0JPT0w7CiMgMTc0ICIuLi8u
Li8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNDT01QdHIuaCIKdGVtcGxhdGUgPGNsYXNzIFQ+CmNs
YXNzIG5zRGVyaXZlZFNhZmUgOiBwdWJsaWMgVAojIDE4NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L3hwY29tL25zQ09NUHRyLmgiCiAgewogICAgcHJpdmF0ZToKCiAgICAgIHVzaW5nIFQ6OkFkZFJl
ZjsKICAgICAgdXNpbmcgVDo6UmVsZWFzZTsKCgoKCgoKICAgICAgdm9pZCBvcGVyYXRvciBkZWxl
dGUoIHZvaWQqLCBzaXplX3QgKTsKCgoKICAgICAgbnNEZXJpdmVkU2FmZTxUPiYgb3BlcmF0b3I9
KCBjb25zdCBUJiApOwojIDIwOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zQ09NUHRy
LmgiCiAgfTsKIyAyMzAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NPTVB0ci5oIgp0
ZW1wbGF0ZSA8Y2xhc3MgVD4Kc3RydWN0IGFscmVhZHlfQWRkUmVmZWQKIyAyNDcgIi4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NPTVB0ci5oIgogIHsKICAgIGFscmVhZHlfQWRkUmVmZWQo
IFQqIGFSYXdQdHIgKQogICAgICAgIDogbVJhd1B0cihhUmF3UHRyKQogICAgICB7CgogICAgICB9
CgogICAgVCogZ2V0KCkgY29uc3QgeyByZXR1cm4gbVJhd1B0cjsgfQoKICAgIFQqIG1SYXdQdHI7
CiAgfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKY29uc3QgYWxyZWFkeV9BZGRSZWZlZDxU
PgpnZXR0ZXJfQWRkUmVmcyggVCogYVJhd1B0ciApCgoKCgogIHsKICAgIHJldHVybiBhbHJlYWR5
X0FkZFJlZmVkPFQ+KGFSYXdQdHIpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKY29u
c3QgYWxyZWFkeV9BZGRSZWZlZDxUPgpnZXR0ZXJfQWRkUmVmcyggY29uc3QgYWxyZWFkeV9BZGRS
ZWZlZDxUPiYgYUFscmVhZHlBZGRSZWZlZFB0ciApCiAgewogICAgcmV0dXJuIGFBbHJlYWR5QWRk
UmVmZWRQdHI7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQpjb25zdCBhbHJlYWR5X0Fk
ZFJlZmVkPFQ+CmRvbnRfQWRkUmVmKCBUKiBhUmF3UHRyICkKICB7CiAgICByZXR1cm4gYWxyZWFk
eV9BZGRSZWZlZDxUPihhUmF3UHRyKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCmNv
bnN0IGFscmVhZHlfQWRkUmVmZWQ8VD4KZG9udF9BZGRSZWYoIGNvbnN0IGFscmVhZHlfQWRkUmVm
ZWQ8VD4gYUFscmVhZHlBZGRSZWZlZFB0ciApCiAgewogICAgcmV0dXJuIGFBbHJlYWR5QWRkUmVm
ZWRQdHI7CiAgfQojIDMwNiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zQ09NUHRyLmgi
CnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKVCoKZG9udF9RdWVyeUludGVyZmFjZSggVCogZXhw
ciApCiAgewogICAgcmV0dXJuIGV4cHI7CiAgfQoKCgpjbGFzcyBuc0NPTVB0cl9oZWxwZXIKIyAz
MzIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NPTVB0ci5oIgogIHsKICAgIHB1Ymxp
YzoKICAgICAgdmlydHVhbCBuc3Jlc3VsdCBvcGVyYXRvcigpKCBjb25zdCBuc0lJRCYsIHZvaWQq
KiApIGNvbnN0ID0gMDsKICB9OwoKY2xhc3MgbnNRdWVyeUludGVyZmFjZSA6IHB1YmxpYyBuc0NP
TVB0cl9oZWxwZXIKICB7CiAgICBwdWJsaWM6CiAgICAgIG5zUXVlcnlJbnRlcmZhY2UoIG5zSVN1
cHBvcnRzKiBhUmF3UHRyLCBuc3Jlc3VsdCogZXJyb3IgKQogICAgICAgICAgOiBtUmF3UHRyKGFS
YXdQdHIpLAogICAgICAgICAgICBtRXJyb3JQdHIoZXJyb3IpCiAgICAgICAgewoKICAgICAgICB9
CgogICAgICB2aXJ0dWFsIG5zcmVzdWx0IG9wZXJhdG9yKCkoIGNvbnN0IG5zSUlEJiBhSUlELCB2
b2lkKiogKSBjb25zdDsKCiAgICBwcml2YXRlOgogICAgICBuc0lTdXBwb3J0cyogbVJhd1B0cjsK
ICAgICAgbnNyZXN1bHQqIG1FcnJvclB0cjsKICB9OwoKaW5saW5lCmNvbnN0IG5zUXVlcnlJbnRl
cmZhY2UKZG9fUXVlcnlJbnRlcmZhY2UoIG5zSVN1cHBvcnRzKiBhUmF3UHRyLCBuc3Jlc3VsdCog
ZXJyb3IgPSAwICkKICB7CiAgICByZXR1cm4gbnNRdWVyeUludGVyZmFjZShhUmF3UHRyLCBlcnJv
cik7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZQp2b2lkCmRvX1F1ZXJ5SW50ZXJmYWNl
KCBhbHJlYWR5X0FkZFJlZmVkPFQ+JiApCiAgewoKCgogIH0KCnRlbXBsYXRlIDxjbGFzcyBUPgpp
bmxpbmUKdm9pZApkb19RdWVyeUludGVyZmFjZSggYWxyZWFkeV9BZGRSZWZlZDxUPiYsIG5zcmVz
dWx0KiApCiAgewoKCgogIH0KCgoKY2xhc3MgbnNDT01QdHJfYmFzZQojIDM5NiAiLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL3hwY29tL25zQ09NUHRyLmgiCiAgewogICAgcHVibGljOgoKICAgICAgbnND
T01QdHJfYmFzZSggbnNJU3VwcG9ydHMqIHJhd1B0ciA9IDAgKQogICAgICAgICAgOiBtUmF3UHRy
KHJhd1B0cikKICAgICAgICB7CgogICAgICAgIH0KCgogICAgICB+bnNDT01QdHJfYmFzZSgpOwoK
CgoKCgogICAgICB2b2lkIGFzc2lnbl93aXRoX0FkZFJlZiggbnNJU3VwcG9ydHMqICk7CiAgICAg
IHZvaWQgYXNzaWduX2Zyb21faGVscGVyKCBjb25zdCBuc0NPTVB0cl9oZWxwZXImLCBjb25zdCBu
c0lJRCYgKTsKICAgICAgdm9pZCoqIGJlZ2luX2Fzc2lnbm1lbnQoKTsKCiAgICBwcm90ZWN0ZWQ6
CiAgICAgIG5zSVN1cHBvcnRzKiBtUmF3UHRyOwoKICAgICAgdm9pZAogICAgICBhc3NpZ25fYXNz
dW1pbmdfQWRkUmVmKCBuc0lTdXBwb3J0cyogbmV3UHRyICkKICAgICAgICB7CiMgNDMxICIuLi8u
Li8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNDT01QdHIuaCIKICAgICAgICAgIG5zSVN1cHBvcnRz
KiBvbGRQdHIgPSBtUmF3UHRyOwogICAgICAgICAgbVJhd1B0ciA9IG5ld1B0cjsKICAgICAgICAg
IDs7CiAgICAgICAgICBpZiAoIG9sZFB0ciApCiAgICAgICAgICAgIChvbGRQdHIpLT5SZWxlYXNl
KCk7CiAgICAgICAgfQogIH07CgoKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBuc0NPTVB0cgoK
ICAgIDogcHJpdmF0ZSBuc0NPTVB0cl9iYXNlCgogIHsKICAgIGVudW0geyBfZm9yY2VfZXZlbl9j
b21wbGlhbnRfY29tcGlsZXJzX3RvX2ZhaWxfID0gc2l6ZW9mKFQpIH07CiMgNDgzICIuLi8uLi8u
Li9kaXN0L2luY2x1ZGUveHBjb20vbnNDT01QdHIuaCIKICAgIHB1YmxpYzoKICAgICAgdHlwZWRl
ZiBUIGVsZW1lbnRfdHlwZTsKIyA1MTMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NP
TVB0ci5oIgogICAgICBuc0NPTVB0cigpCiAgICAgICAgICAgIDogbnNDT01QdHJfYmFzZSgwKQoK
ICAgICAgICB7CiAgICAgICAgICA7OwogICAgICAgIH0KCiAgICAgIG5zQ09NUHRyKCBjb25zdCBu
c0NPTVB0cjxUPiYgYVNtYXJ0UHRyICkKICAgICAgICAgICAgOiBuc0NPTVB0cl9iYXNlKGFTbWFy
dFB0ci5tUmF3UHRyKQoKICAgICAgICB7CiAgICAgICAgICBpZiAoIG1SYXdQdHIgKQogICAgICAg
ICAgICAobVJhd1B0ciktPkFkZFJlZigpOwogICAgICAgICAgOzsKICAgICAgICB9CgogICAgICBu
c0NPTVB0ciggVCogYVJhd1B0ciApCiAgICAgICAgICAgIDogbnNDT01QdHJfYmFzZShhUmF3UHRy
KQoKICAgICAgICB7CiAgICAgICAgICBpZiAoIG1SYXdQdHIgKQogICAgICAgICAgICAobVJhd1B0
ciktPkFkZFJlZigpOwogICAgICAgICAgOzsKICAgICAgICAgIDsKICAgICAgICB9CgogICAgICBu
c0NPTVB0ciggY29uc3QgYWxyZWFkeV9BZGRSZWZlZDxUPiYgYVNtYXJ0UHRyICkKICAgICAgICAg
ICAgOiBuc0NPTVB0cl9iYXNlKGFTbWFydFB0ci5tUmF3UHRyKQoKICAgICAgICB7CiAgICAgICAg
ICA7OwogICAgICAgICAgOwogICAgICAgIH0KCiAgICAgIG5zQ09NUHRyKCBjb25zdCBuc0NPTVB0
cl9oZWxwZXImIGhlbHBlciApCiAgICAgICAgICAgIDogbnNDT01QdHJfYmFzZSgwKQoKCiAgICAg
ICAgewogICAgICAgICAgOzsKICAgICAgICAgIGFzc2lnbl9mcm9tX2hlbHBlcihoZWxwZXIsIG5z
Q09NVHlwZUluZm88VD46OkdldElJRCgpKTsKICAgICAgICAgIDsKICAgICAgICB9CiMgNTcyICIu
Li8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNDT01QdHIuaCIKICAgICAgbnNDT01QdHI8VD4m
CiAgICAgIG9wZXJhdG9yPSggY29uc3QgbnNDT01QdHI8VD4mIHJocyApCgogICAgICAgIHsKICAg
ICAgICAgIGFzc2lnbl93aXRoX0FkZFJlZihyaHMubVJhd1B0cik7CiAgICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgICAgfQoKICAgICAgbnNDT01QdHI8VD4mCiAgICAgIG9wZXJhdG9yPSggVCog
cmhzICkKCiAgICAgICAgewogICAgICAgICAgYXNzaWduX3dpdGhfQWRkUmVmKHJocyk7CiAgICAg
ICAgICA7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgICAgbnNDT01QdHI8
VD4mCiAgICAgIG9wZXJhdG9yPSggY29uc3QgYWxyZWFkeV9BZGRSZWZlZDxUPiYgcmhzICkKCiAg
ICAgICAgewogICAgICAgICAgYXNzaWduX2Fzc3VtaW5nX0FkZFJlZihyaHMubVJhd1B0cik7CiAg
ICAgICAgICA7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgICAgbnNDT01Q
dHI8VD4mCiAgICAgIG9wZXJhdG9yPSggY29uc3QgbnNDT01QdHJfaGVscGVyJiByaHMgKQoKCiAg
ICAgICAgewogICAgICAgICAgYXNzaWduX2Zyb21faGVscGVyKHJocywgbnNDT01UeXBlSW5mbzxU
Pjo6R2V0SUlEKCkpOwogICAgICAgICAgOwogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAg
IH0KIyA2MjMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NPTVB0ci5oIgogICAgICBu
c0Rlcml2ZWRTYWZlPFQ+KgogICAgICBnZXQoKSBjb25zdAoKCgoKCgogICAgICAgIHsKICAgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBuc0Rlcml2ZWRTYWZlPFQ+KiA+KG1SYXdQdHIp
OwogICAgICAgIH0KCiAgICAgIG9wZXJhdG9yIG5zRGVyaXZlZFNhZmU8VD4qKCkgY29uc3QKCgoK
CgoKCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIGdldCgpOwogICAgICAgIH0KCiAgICAgIG5z
RGVyaXZlZFNhZmU8VD4qCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAogICAgICAgIHsKICAgICAg
ICAgIDsKICAgICAgICAgIHJldHVybiBnZXQoKTsKICAgICAgICB9CiMgNjY3ICIuLi8uLi8uLi9k
aXN0L2luY2x1ZGUveHBjb20vbnNDT01QdHIuaCIKICAgICAgbnNDT01QdHI8VD4qCiAgICAgIGdl
dF9hZGRyZXNzKCkKCgogICAgICAgIHsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0K
CiAgICAgIGNvbnN0IG5zQ09NUHRyPFQ+KgogICAgICBnZXRfYWRkcmVzcygpIGNvbnN0CgoKICAg
ICAgICB7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CgoKCiAgICBwdWJsaWM6CiAg
ICAgIG5zRGVyaXZlZFNhZmU8VD4mCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgICAgewog
ICAgICAgICAgOwogICAgICAgICAgcmV0dXJuICpnZXQoKTsKICAgICAgICB9CgoKCgoKCiAgICAg
IFQqKgogICAgICBTdGFydEFzc2lnbm1lbnQoKQogICAgICAgIHsKCiAgICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDwgVCoqID4oYmVnaW5fYXNzaWdubWVudCgpKTsKCgoKCiAgICAgICAg
fQogIH07CiMgNzIxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNDT01QdHIuaCIKdGVt
cGxhdGUgPD4KY2xhc3MgbnNDT01QdHI8bnNJU3VwcG9ydHM+CiAgICA6IHByaXZhdGUgbnNDT01Q
dHJfYmFzZQogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBuc0lTdXBwb3J0cyBlbGVtZW50
X3R5cGU7CiMgNzM5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNDT01QdHIuaCIKICAg
ICAgbnNDT01QdHIoKQogICAgICAgICAgICA6IG5zQ09NUHRyX2Jhc2UoMCkKCiAgICAgICAgewog
ICAgICAgICAgOzsKICAgICAgICB9CgogICAgICBuc0NPTVB0ciggY29uc3QgbnNDT01QdHI8bnNJ
U3VwcG9ydHM+JiBhU21hcnRQdHIgKQogICAgICAgICAgICA6IG5zQ09NUHRyX2Jhc2UoYVNtYXJ0
UHRyLm1SYXdQdHIpCgogICAgICAgIHsKICAgICAgICAgIGlmICggbVJhd1B0ciApCiAgICAgICAg
ICAgIChtUmF3UHRyKS0+QWRkUmVmKCk7CiAgICAgICAgICA7OwogICAgICAgIH0KCiAgICAgIG5z
Q09NUHRyKCBuc0lTdXBwb3J0cyogYVJhd1B0ciApCiAgICAgICAgICAgIDogbnNDT01QdHJfYmFz
ZShhUmF3UHRyKQoKICAgICAgICB7CiAgICAgICAgICBpZiAoIG1SYXdQdHIgKQogICAgICAgICAg
ICAobVJhd1B0ciktPkFkZFJlZigpOwogICAgICAgICAgOzsKICAgICAgICB9CgogICAgICBuc0NP
TVB0ciggY29uc3QgYWxyZWFkeV9BZGRSZWZlZDxuc0lTdXBwb3J0cz4mIGFTbWFydFB0ciApCiAg
ICAgICAgICAgIDogbnNDT01QdHJfYmFzZShhU21hcnRQdHIubVJhd1B0cikKCiAgICAgICAgewog
ICAgICAgICAgOzsKICAgICAgICB9CgogICAgICBuc0NPTVB0ciggY29uc3QgbnNDT01QdHJfaGVs
cGVyJiBoZWxwZXIgKQogICAgICAgICAgICA6IG5zQ09NUHRyX2Jhc2UoMCkKCgogICAgICAgIHsK
ICAgICAgICAgIDs7CiAgICAgICAgICBhc3NpZ25fZnJvbV9oZWxwZXIoaGVscGVyLCBuc0NPTVR5
cGVJbmZvPG5zSVN1cHBvcnRzPjo6R2V0SUlEKCkpOwogICAgICAgIH0KCgoKCiAgICAgIG5zQ09N
UHRyPG5zSVN1cHBvcnRzPiYKICAgICAgb3BlcmF0b3I9KCBjb25zdCBuc0NPTVB0cjxuc0lTdXBw
b3J0cz4mIHJocyApCgogICAgICAgIHsKICAgICAgICAgIGFzc2lnbl93aXRoX0FkZFJlZihyaHMu
bVJhd1B0cik7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICAgICAgbnNDT01Q
dHI8bnNJU3VwcG9ydHM+JgogICAgICBvcGVyYXRvcj0oIG5zSVN1cHBvcnRzKiByaHMgKQoKICAg
ICAgICB7CiAgICAgICAgICBhc3NpZ25fd2l0aF9BZGRSZWYocmhzKTsKICAgICAgICAgIHJldHVy
biAqdGhpczsKICAgICAgICB9CgogICAgICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4mCiAgICAgIG9w
ZXJhdG9yPSggY29uc3QgYWxyZWFkeV9BZGRSZWZlZDxuc0lTdXBwb3J0cz4mIHJocyApCgogICAg
ICAgIHsKICAgICAgICAgIGFzc2lnbl9hc3N1bWluZ19BZGRSZWYocmhzLm1SYXdQdHIpOwogICAg
ICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAgICAgIG5zQ09NUHRyPG5zSVN1cHBvcnRz
PiYKICAgICAgb3BlcmF0b3I9KCBjb25zdCBuc0NPTVB0cl9oZWxwZXImIHJocyApCgoKICAgICAg
ICB7CiAgICAgICAgICBhc3NpZ25fZnJvbV9oZWxwZXIocmhzLCBuc0NPTVR5cGVJbmZvPG5zSVN1
cHBvcnRzPjo6R2V0SUlEKCkpOwogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCgoK
CiAgICAgIG5zRGVyaXZlZFNhZmU8bnNJU3VwcG9ydHM+KgogICAgICBnZXQoKSBjb25zdAoKCgoK
CgogICAgICAgIHsKICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBuc0Rlcml2ZWRT
YWZlPG5zSVN1cHBvcnRzPiogPihtUmF3UHRyKTsKICAgICAgICB9CgogICAgICBvcGVyYXRvciBu
c0Rlcml2ZWRTYWZlPG5zSVN1cHBvcnRzPiooKSBjb25zdAoKCgoKCgoKICAgICAgICB7CiAgICAg
ICAgICByZXR1cm4gZ2V0KCk7CiAgICAgICAgfQoKICAgICAgbnNEZXJpdmVkU2FmZTxuc0lTdXBw
b3J0cz4qCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIDsKICAg
ICAgICAgIHJldHVybiBnZXQoKTsKICAgICAgICB9CiMgODYzICIuLi8uLi8uLi9kaXN0L2luY2x1
ZGUveHBjb20vbnNDT01QdHIuaCIKICAgICAgbnNDT01QdHI8bnNJU3VwcG9ydHM+KgogICAgICBn
ZXRfYWRkcmVzcygpCgoKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9
CgogICAgICBjb25zdCBuc0NPTVB0cjxuc0lTdXBwb3J0cz4qCiAgICAgIGdldF9hZGRyZXNzKCkg
Y29uc3QKCgogICAgICAgIHsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KCgoKICAg
IHB1YmxpYzoKCiAgICAgIG5zRGVyaXZlZFNhZmU8bnNJU3VwcG9ydHM+JgogICAgICBvcGVyYXRv
ciooKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIDsKICAgICAgICAgIHJldHVybiAqZ2V0KCk7
CiAgICAgICAgfQoKCgoKCgogICAgICBuc0lTdXBwb3J0cyoqCiAgICAgIFN0YXJ0QXNzaWdubWVu
dCgpCiAgICAgICAgewoKICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBuc0lTdXBw
b3J0cyoqID4oYmVnaW5fYXNzaWdubWVudCgpKTsKCgoKCiAgICAgICAgfQogIH07CiMgOTUwICIu
Li8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNDT01QdHIuaCIKdGVtcGxhdGUgPGNsYXNzIFQ+
CmlubGluZQpuc0NPTVB0cjxUPioKYWRkcmVzc19vZiggbnNDT01QdHI8VD4mIGFQdHIgKQogIHsK
ICAgIHJldHVybiBhUHRyLmdldF9hZGRyZXNzKCk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+Cmlu
bGluZQpjb25zdCBuc0NPTVB0cjxUPioKYWRkcmVzc19vZiggY29uc3QgbnNDT01QdHI8VD4mIGFQ
dHIgKQogIHsKICAgIHJldHVybiBhUHRyLmdldF9hZGRyZXNzKCk7CiAgfQoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgVD4KY2xhc3MgbnNHZXR0ZXJBZGRSZWZzCiMgOTg3ICIuLi8uLi8uLi9kaXN0L2luY2x1
ZGUveHBjb20vbnNDT01QdHIuaCIKICB7CiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAg
IG5zR2V0dGVyQWRkUmVmcyggbnNDT01QdHI8VD4mIGFTbWFydFB0ciApCiAgICAgICAgICA6IG1U
YXJnZXRTbWFydFB0cihhU21hcnRQdHIpCiAgICAgICAgewoKICAgICAgICB9CiMgMTAwOSAiLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zQ09NUHRyLmgiCiAgICAgIG9wZXJhdG9yIHZvaWQq
KigpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IHZvaWQqKiA+
KG1UYXJnZXRTbWFydFB0ci5TdGFydEFzc2lnbm1lbnQoKSk7CiAgICAgICAgfQoKICAgICAgb3Bl
cmF0b3IgbnNJU3VwcG9ydHMqKigpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8IG5zSVN1cHBvcnRzKiogPihtVGFyZ2V0U21hcnRQdHIuU3RhcnRBc3NpZ25tZW50
KCkpOwogICAgICAgIH0KCiAgICAgIG9wZXJhdG9yIFQqKigpCiAgICAgICAgewogICAgICAgICAg
cmV0dXJuIG1UYXJnZXRTbWFydFB0ci5TdGFydEFzc2lnbm1lbnQoKTsKICAgICAgICB9CgogICAg
ICBUKiYKICAgICAgb3BlcmF0b3IqKCkKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gKihtVGFy
Z2V0U21hcnRQdHIuU3RhcnRBc3NpZ25tZW50KCkpOwogICAgICAgIH0KCiAgICBwcml2YXRlOgog
ICAgICBuc0NPTVB0cjxUPiYgbVRhcmdldFNtYXJ0UHRyOwogIH07CgoKdGVtcGxhdGUgPD4KY2xh
c3MgbnNHZXR0ZXJBZGRSZWZzPG5zSVN1cHBvcnRzPgogIHsKICAgIHB1YmxpYzoKICAgICAgZXhw
bGljaXQKICAgICAgbnNHZXR0ZXJBZGRSZWZzKCBuc0NPTVB0cjxuc0lTdXBwb3J0cz4mIGFTbWFy
dFB0ciApCiAgICAgICAgICA6IG1UYXJnZXRTbWFydFB0cihhU21hcnRQdHIpCiAgICAgICAgewoK
ICAgICAgICB9CiMgMTA1MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zQ09NUHRyLmgi
CiAgICAgIG9wZXJhdG9yIHZvaWQqKigpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8IHZvaWQqKiA+KG1UYXJnZXRTbWFydFB0ci5TdGFydEFzc2lnbm1lbnQoKSk7
CiAgICAgICAgfQoKICAgICAgb3BlcmF0b3IgbnNJU3VwcG9ydHMqKigpCiAgICAgICAgewogICAg
ICAgICAgcmV0dXJuIG1UYXJnZXRTbWFydFB0ci5TdGFydEFzc2lnbm1lbnQoKTsKICAgICAgICB9
CgogICAgICBuc0lTdXBwb3J0cyomCiAgICAgIG9wZXJhdG9yKigpCiAgICAgICAgewogICAgICAg
ICAgcmV0dXJuICoobVRhcmdldFNtYXJ0UHRyLlN0YXJ0QXNzaWdubWVudCgpKTsKICAgICAgICB9
CgogICAgcHJpdmF0ZToKICAgICAgbnNDT01QdHI8bnNJU3VwcG9ydHM+JiBtVGFyZ2V0U21hcnRQ
dHI7CiAgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCm5zR2V0dGVyQWRkUmVmczxUPgpn
ZXR0ZXJfQWRkUmVmcyggbnNDT01QdHI8VD4mIGFTbWFydFB0ciApCgoKCgogIHsKICAgIHJldHVy
biBuc0dldHRlckFkZFJlZnM8VD4oYVNtYXJ0UHRyKTsKICB9CgoKCgoKdGVtcGxhdGUgPGNsYXNz
IFQsIGNsYXNzIFU+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yPT0oIGNvbnN0IG5zQ09NUHRy
PFQ+JiBsaHMsIGNvbnN0IG5zQ09NUHRyPFU+JiByaHMgKQogIHsKICAgIHJldHVybiBzdGF0aWNf
Y2FzdDwgY29uc3Qgdm9pZCogPihsaHMuZ2V0KCkpID09IHN0YXRpY19jYXN0PCBjb25zdCB2b2lk
KiA+KHJocy5nZXQoKSk7CiAgfQoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgppbmxpbmUK
TlNDQVBfQk9PTApvcGVyYXRvciE9KCBjb25zdCBuc0NPTVB0cjxUPiYgbGhzLCBjb25zdCBuc0NP
TVB0cjxVPiYgcmhzICkKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4o
bGhzLmdldCgpKSAhPSBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihyaHMuZ2V0KCkpOwogIH0K
CgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgppbmxpbmUKTlNDQVBfQk9PTApvcGVyYXRv
cj09KCBjb25zdCBuc0NPTVB0cjxUPiYgbGhzLCBjb25zdCBVKiByaHMgKQogIHsKICAgIHJldHVy
biBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMuZ2V0KCkpID09IHN0YXRpY19jYXN0PCBj
b25zdCB2b2lkKiA+KHJocyk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFU+CmlubGlu
ZQpOU0NBUF9CT09MCm9wZXJhdG9yPT0oIGNvbnN0IFUqIGxocywgY29uc3QgbnNDT01QdHI8VD4m
IHJocyApCiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KGxocykgPT0g
c3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4ocmhzLmdldCgpKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgVCwgY2xhc3MgVT4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3IhPSggY29uc3QgbnNDT01Q
dHI8VD4mIGxocywgY29uc3QgVSogcmhzICkKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNv
bnN0IHZvaWQqID4obGhzLmdldCgpKSAhPSBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihyaHMp
OwogIH0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgppbmxpbmUKTlNDQVBfQk9PTApvcGVy
YXRvciE9KCBjb25zdCBVKiBsaHMsIGNvbnN0IG5zQ09NUHRyPFQ+JiByaHMgKQogIHsKICAgIHJl
dHVybiBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMpICE9IHN0YXRpY19jYXN0PCBjb25z
dCB2b2lkKiA+KHJocy5nZXQoKSk7CiAgfQojIDExNTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94
cGNvbS9uc0NPTVB0ci5oIgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVT4KaW5saW5lCk5TQ0FQ
X0JPT0wKb3BlcmF0b3I9PSggY29uc3QgbnNDT01QdHI8VD4mIGxocywgVSogcmhzICkKICB7CiAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4obGhzLmdldCgpKSA9PSBzdGF0aWNf
Y2FzdDwgdm9pZCogPihyaHMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBVPgppbmxp
bmUKTlNDQVBfQk9PTApvcGVyYXRvcj09KCBVKiBsaHMsIGNvbnN0IG5zQ09NUHRyPFQ+JiByaHMg
KQogIHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDwgdm9pZCogPihsaHMpID09IHN0YXRpY19jYXN0
PCBjb25zdCB2b2lkKiA+KHJocy5nZXQoKSk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNz
IFU+CmlubGluZQpOU0NBUF9CT09MCm9wZXJhdG9yIT0oIGNvbnN0IG5zQ09NUHRyPFQ+JiBsaHMs
IFUqIHJocyApCiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PCBjb25zdCB2b2lkKiA+KGxocy5n
ZXQoKSkgIT0gc3RhdGljX2Nhc3Q8IHZvaWQqID4ocmhzKTsKICB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
VCwgY2xhc3MgVT4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3IhPSggVSogbGhzLCBjb25zdCBu
c0NPTVB0cjxUPiYgcmhzICkKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IHZvaWQqID4obGhz
KSAhPSBzdGF0aWNfY2FzdDwgY29uc3Qgdm9pZCogPihyaHMuZ2V0KCkpOwogIH0KCgoKCgoKY2xh
c3MgTlNDQVBfWmVybzsKCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKTlNDQVBfQk9PTApvcGVy
YXRvcj09KCBjb25zdCBuc0NPTVB0cjxUPiYgbGhzLCBOU0NBUF9aZXJvKiByaHMgKQoKICB7CiAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4obGhzLmdldCgpKSA9PSByZWludGVy
cHJldF9jYXN0PCBjb25zdCB2b2lkKiA+KHJocyk7CiAgfQoKdGVtcGxhdGUgPGNsYXNzIFQ+Cmlu
bGluZQpOU0NBUF9CT09MCm9wZXJhdG9yPT0oIE5TQ0FQX1plcm8qIGxocywgY29uc3QgbnNDT01Q
dHI8VD4mIHJocyApCgogIHsKICAgIHJldHVybiByZWludGVycHJldF9jYXN0PCBjb25zdCB2b2lk
KiA+KGxocykgPT0gc3RhdGljX2Nhc3Q8IGNvbnN0IHZvaWQqID4ocmhzLmdldCgpKTsKICB9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lCk5TQ0FQX0JPT0wKb3BlcmF0b3IhPSggY29uc3QgbnND
T01QdHI8VD4mIGxocywgTlNDQVBfWmVybyogcmhzICkKCiAgewogICAgcmV0dXJuIHN0YXRpY19j
YXN0PCBjb25zdCB2b2lkKiA+KGxocy5nZXQoKSkgIT0gcmVpbnRlcnByZXRfY2FzdDwgY29uc3Qg
dm9pZCogPihyaHMpOwogIH0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUKTlNDQVBfQk9PTApv
cGVyYXRvciE9KCBOU0NBUF9aZXJvKiBsaHMsIGNvbnN0IG5zQ09NUHRyPFQ+JiByaHMgKQoKICB7
CiAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgY29uc3Qgdm9pZCogPihsaHMpICE9IHN0YXRp
Y19jYXN0PCBjb25zdCB2b2lkKiA+KHJocy5nZXQoKSk7CiAgfQojIDEyNjAgIi4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS94cGNvbS9uc0NPTVB0ci5oIgppbmxpbmUKTlNDQVBfQk9PTApTYW1lQ09NSWRl
bnRpdHkoIG5zSVN1cHBvcnRzKiBsaHMsIG5zSVN1cHBvcnRzKiByaHMgKQogIHsKICAgIHJldHVy
biBuc0NPTVB0cjxuc0lTdXBwb3J0cz4oIGRvX1F1ZXJ5SW50ZXJmYWNlKGxocykgKSA9PSBuc0NP
TVB0cjxuc0lTdXBwb3J0cz4oIGRvX1F1ZXJ5SW50ZXJmYWNlKHJocykgKTsKICB9CgoKCnRlbXBs
YXRlIDxjbGFzcyBTb3VyY2VUeXBlLCBjbGFzcyBEZXN0aW5hdGlvblR5cGU+CmlubGluZQpuc3Jl
c3VsdApDYWxsUXVlcnlJbnRlcmZhY2UoIG5zQ09NUHRyPFNvdXJjZVR5cGU+JiBhU291cmNlUHRy
LCBEZXN0aW5hdGlvblR5cGUqKiBhRGVzdFB0ciApCiAgewogICAgcmV0dXJuIENhbGxRdWVyeUlu
dGVyZmFjZShhU291cmNlUHRyLmdldCgpLCBhRGVzdFB0cik7CiAgfQojIDI5ICIuLi8uLi8uLi9k
aXN0L2luY2x1ZGUveHBjb20vbnNDb21wb25lbnRNYW5hZ2VyVXRpbHMuaCIgMgoKCgojIDEgIi4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NvbXBvbmVudE1hbmFnZXJPYnNvbGV0ZS5oIiAx
CiMgNDAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NvbXBvbmVudE1hbmFnZXJPYnNv
bGV0ZS5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25lbnRNYW5h
Z2VyLmgiIDEKIyA0MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zQ29tcG9uZW50TWFu
YWdlck9ic29sZXRlLmgiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29t
cG9uZW50TWFuYWdlck9ic29sZXRlLmgiIDEKIyAxNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw
Y29tL25zSUNvbXBvbmVudE1hbmFnZXJPYnNvbGV0ZS5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS94cGNvbS9uc0lGYWN0b3J5LmgiIDEKIyAzMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw
Y29tL25zSUZhY3RvcnkuaCIKY2xhc3MgbnNJRmFjdG9yeSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7
CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBu
c0lJRCBpaWQgPSB7MHgwMDAwMDAwMSwgMHgwMDAwLCAweDAwMDAsIHsgMHhjMCwgMHgwMCwgMHgw
MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiB9fTsgcmV0dXJuIGlpZDt9CiMgNTMgIi4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lGYWN0b3J5LmgiCiAgdmlydHVhbCBuc3Jlc3Vs
dCBDcmVhdGVJbnN0YW5jZShuc0lTdXBwb3J0cyAqYU91dGVyLCBjb25zdCBuc0lJRCAmIGlpZCwg
dm9pZCAqICpyZXN1bHQpID0gMDsKIyA2NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25z
SUZhY3RvcnkuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IExvY2tGYWN0b3J5KFBSQm9vbCBsb2NrKSA9
IDA7Cgp9OwojIDE1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29tcG9uZW50TWFu
YWdlck9ic29sZXRlLmgiIDIKCgoKCgoKY2xhc3MgbnNJRmlsZTsKCmNsYXNzIG5zSUVudW1lcmF0
b3I7CiMgMzMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25lbnRNYW5hZ2Vy
T2Jzb2xldGUuaCIKY2xhc3MgbnNJQ29tcG9uZW50TWFuYWdlck9ic29sZXRlIDogcHVibGljIG5z
SVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3Rh
dGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDg0NThhNzQwLCAweGQ1ZGMsIDB4MTFkMiwgeyAweDky
LCAweGZiLCAweDAwLCAweGUwLCAweDk4LCAweDA1LCAweDU3LCAweDBmIH19OyByZXR1cm4gaWlk
O30KIyA0NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVudE1hbmFnZXJP
YnNvbGV0ZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRmluZEZhY3RvcnkoY29uc3QgbnNDSUQgJiBh
Q2xhc3MsIG5zSUZhY3RvcnkgKipfcmV0dmFsKSA9IDA7CiMgNTggIi4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS94cGNvbS9uc0lDb21wb25lbnRNYW5hZ2VyT2Jzb2xldGUuaCIKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldENsYXNzT2JqZWN0KGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBjb25zdCBuc0lJRCAmIGFJ
SUQsIHZvaWQgKiAqX3JldHZhbCkgPSAwOwojIDcxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBj
b20vbnNJQ29tcG9uZW50TWFuYWdlck9ic29sZXRlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDb250
cmFjdElEVG9DbGFzc0lEKGNvbnN0IGNoYXIgKmFDb250cmFjdElELCBuc0NJRCAqYUNsYXNzKSA9
IDA7CiMgODQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25lbnRNYW5hZ2Vy
T2Jzb2xldGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENMU0lEVG9Db250cmFjdElEKGNvbnN0IG5z
Q0lEICYgYUNsYXNzLCBjaGFyICoqYUNsYXNzTmFtZSwgY2hhciAqKl9yZXR2YWwpID0gMDsKIyA5
NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVudE1hbmFnZXJPYnNvbGV0
ZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlSW5zdGFuY2UoY29uc3QgbnNDSUQgJiBhQ2xh
c3MsIG5zSVN1cHBvcnRzICphRGVsZWdhdGUsIGNvbnN0IG5zSUlEICYgYUlJRCwgdm9pZCAqICpf
cmV0dmFsKSA9IDA7CiMgMTEwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29tcG9u
ZW50TWFuYWdlck9ic29sZXRlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVJbnN0YW5jZUJ5
Q29udHJhY3RJRChjb25zdCBjaGFyICphQ29udHJhY3RJRCwgbnNJU3VwcG9ydHMgKmFEZWxlZ2F0
ZSwgY29uc3QgbnNJSUQgJiBJSUQsIHZvaWQgKiAqX3JldHZhbCkgPSAwOwojIDEyMiAiLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVudE1hbmFnZXJPYnNvbGV0ZS5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgUmVnaXN0cnlMb2NhdGlvbkZvclNwZWMobnNJRmlsZSAqYVNwZWMsIGNo
YXIgKipfcmV0dmFsKSA9IDA7CiMgMTMxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJ
Q29tcG9uZW50TWFuYWdlck9ic29sZXRlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTcGVjRm9yUmVn
aXN0cnlMb2NhdGlvbihjb25zdCBjaGFyICphTG9jYXRpb24sIG5zSUZpbGUgKipfcmV0dmFsKSA9
IDA7CiMgMTQ2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29tcG9uZW50TWFuYWdl
ck9ic29sZXRlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlckZhY3RvcnkoY29uc3QgbnND
SUQgJiBhQ2xhc3MsIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsIGNvbnN0IGNoYXIgKmFDb250cmFj
dElELCBuc0lGYWN0b3J5ICphRmFjdG9yeSwgUFJCb29sIGFSZXBsYWNlKSA9IDA7CiMgMTY3ICIu
Li8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29tcG9uZW50TWFuYWdlck9ic29sZXRlLmgi
CiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlckNvbXBvbmVudChjb25zdCBuc0NJRCAmIGFDbGFz
cywgY29uc3QgY2hhciAqYUNsYXNzTmFtZSwgY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsIGNvbnN0
IGNoYXIgKmFMb2NhdGlvbiwgUFJCb29sIGFSZXBsYWNlLCBQUkJvb2wgYVBlcnNpc3QpID0gMDsK
IyAxODkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25lbnRNYW5hZ2VyT2Jz
b2xldGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZ2lzdGVyQ29tcG9uZW50V2l0aFR5cGUoY29u
c3QgbnNDSUQgJiBhQ2xhc3MsIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsIGNvbnN0IGNoYXIgKmFD
b250cmFjdElELCBuc0lGaWxlICphU3BlYywgY29uc3QgY2hhciAqYUxvY2F0aW9uLCBQUkJvb2wg
YVJlcGxhY2UsIFBSQm9vbCBhUGVyc2lzdCwgY29uc3QgY2hhciAqYVR5cGUpID0gMDsKIyAyMDcg
Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25lbnRNYW5hZ2VyT2Jzb2xldGUu
aCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZ2lzdGVyQ29tcG9uZW50U3BlYyhjb25zdCBuc0NJRCAm
IGFDbGFzcywgY29uc3QgY2hhciAqYUNsYXNzTmFtZSwgY29uc3QgY2hhciAqYUNvbnRyYWN0SUQs
IG5zSUZpbGUgKmFMaWJyYXJ5LCBQUkJvb2wgYVJlcGxhY2UsIFBSQm9vbCBhUGVyc2lzdCkgPSAw
OwojIDIyNiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVudE1hbmFnZXJP
YnNvbGV0ZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmVnaXN0ZXJDb21wb25lbnRMaWIoY29uc3Qg
bnNDSUQgJiBhQ2xhc3MsIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsIGNvbnN0IGNoYXIgKmFDb250
cmFjdElELCBjb25zdCBjaGFyICphRGxsTmFtZSwgUFJCb29sIGFSZXBsYWNlLCBQUkJvb2wgYVBl
cnNpc3QpID0gMDsKIyAyMzggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25l
bnRNYW5hZ2VyT2Jzb2xldGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFVucmVnaXN0ZXJGYWN0b3J5
KGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBuc0lGYWN0b3J5ICphRmFjdG9yeSkgPSAwOwojIDI1MiAi
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVudE1hbmFnZXJPYnNvbGV0ZS5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgVW5yZWdpc3RlckNvbXBvbmVudChjb25zdCBuc0NJRCAmIGFD
bGFzcywgY29uc3QgY2hhciAqYUxvY2F0aW9uKSA9IDA7CiMgMjYxICIuLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUveHBjb20vbnNJQ29tcG9uZW50TWFuYWdlck9ic29sZXRlLmgiCiAgdmlydHVhbCBuc3Jl
c3VsdCBVbnJlZ2lzdGVyQ29tcG9uZW50U3BlYyhjb25zdCBuc0NJRCAmIGFDbGFzcywgbnNJRmls
ZSAqYUxpYnJhcnlTcGVjKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRnJlZUxpYnJh
cmllcyh2b2lkKSA9IDA7CgoKCgogIGVudW0geyBOU19TdGFydHVwID0gMCB9OwoKICBlbnVtIHsg
TlNfU2NyaXB0ID0gMSB9OwoKICBlbnVtIHsgTlNfVGltZXIgPSAyIH07CgogIGVudW0geyBOU19T
aHV0ZG93biA9IDMgfTsKIyAyOTMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21w
b25lbnRNYW5hZ2VyT2Jzb2xldGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEF1dG9SZWdpc3RlcihQ
UkludDMyIHdoZW4sIG5zSUZpbGUgKmRpcmVjdG9yeSkgPSAwOwojIDMwNiAiLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVudE1hbmFnZXJPYnNvbGV0ZS5oIgogIHZpcnR1YWwg
bnNyZXN1bHQgQXV0b1JlZ2lzdGVyQ29tcG9uZW50KFBSSW50MzIgd2hlbiwgbnNJRmlsZSAqYUZp
bGVMb2NhdGlvbikgPSAwOwojIDMxNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNv
bXBvbmVudE1hbmFnZXJPYnNvbGV0ZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQXV0b1VucmVnaXN0
ZXJDb21wb25lbnQoUFJJbnQzMiB3aGVuLCBuc0lGaWxlICphRmlsZUxvY2F0aW9uKSA9IDA7CiMg
MzI3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29tcG9uZW50TWFuYWdlck9ic29s
ZXRlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1JlZ2lzdGVyZWQoY29uc3QgbnNDSUQgJiBhQ2xh
c3MsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwojIDMzNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw
Y29tL25zSUNvbXBvbmVudE1hbmFnZXJPYnNvbGV0ZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRW51
bWVyYXRlQ0xTSURzKG5zSUVudW1lcmF0b3IgKipfcmV0dmFsKSA9IDA7CiMgMzQ3ICIuLi8uLi8u
Li9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29tcG9uZW50TWFuYWdlck9ic29sZXRlLmgiCiAgdmly
dHVhbCBuc3Jlc3VsdCBFbnVtZXJhdGVDb250cmFjdElEcyhuc0lFbnVtZXJhdG9yICoqX3JldHZh
bCkgPSAwOwoKfTsKIyA1OTkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25l
bnRNYW5hZ2VyT2Jzb2xldGUuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnND
b21wb25lbnRNYW5hZ2VyVXRpbHMuaCIgMQojIDYwMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw
Y29tL25zSUNvbXBvbmVudE1hbmFnZXJPYnNvbGV0ZS5oIiAyCiMgNDIgIi4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS94cGNvbS9uc0NvbXBvbmVudE1hbmFnZXJPYnNvbGV0ZS5oIiAyCgpjbGFzcyBuc0lF
bnVtZXJhdG9yOwpjbGFzcyBuc0lGYWN0b3J5OwpjbGFzcyBuc0lGaWxlOwojIDY4ICIuLi8uLi8u
Li9kaXN0L2luY2x1ZGUveHBjb20vbnNDb21wb25lbnRNYW5hZ2VyT2Jzb2xldGUuaCIKZXh0ZXJu
IG5zcmVzdWx0Ck5TX0dldEdsb2JhbENvbXBvbmVudE1hbmFnZXIobnNJQ29tcG9uZW50TWFuYWdl
ciogKnJlc3VsdCk7CgoKCgpjbGFzcyBuc0NvbXBvbmVudE1hbmFnZXIgewpwdWJsaWM6CiAgc3Rh
dGljIG5zcmVzdWx0IEluaXRpYWxpemUodm9pZCk7CgoKICBzdGF0aWMgbnNyZXN1bHQgRmluZEZh
Y3RvcnkoY29uc3QgbnNDSUQgJmFDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNJRmFjdG9yeSAqKmFGYWN0b3J5KTsKCgogIHN0YXRpYyBuc3Jlc3VsdCBHZXRDbGFzc09iamVj
dChjb25zdCBuc0NJRCAmYUNsYXNzLCBjb25zdCBuc0lJRCAmYUlJRCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdm9pZCAqKmFSZXN1bHQpOwoKCiAgc3RhdGljIG5zcmVzdWx0IENv
bnRyYWN0SURUb0NsYXNzSUQoY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNDSUQgKmFDbGFzcyk7CgoKCiAgc3RhdGljIG5zcmVzdWx0IENM
U0lEVG9Db250cmFjdElEKG5zQ0lEICphQ2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciogKmFDbGFzc05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciogKmFDb250cmFjdElEKTsKCgogIHN0YXRpYyBuc3Jlc3VsdCBDcmVhdGVJbnN0YW5jZShj
b25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lT
dXBwb3J0cyAqYURlbGVnYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBuc0lJRCAmYUlJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmFS
ZXN1bHQpOwoKCiAgc3RhdGljIG5zcmVzdWx0IENyZWF0ZUluc3RhbmNlKGNvbnN0IGNoYXIgKmFD
b250cmFjdElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAq
YURlbGVnYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0lJRCAm
YUlJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKmFSZXN1bHQpOwoK
CiAgc3RhdGljIG5zcmVzdWx0IFJlZ2lzdGVyRmFjdG9yeShjb25zdCBuc0NJRCAmYUNsYXNzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYUNsYXNzTmFtZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFDb250cmFjdElE
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRmFjdG9yeSAqYUZhY3Rvcnks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVJlcGxhY2UpOwojIDEy
MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zQ29tcG9uZW50TWFuYWdlck9ic29sZXRl
LmgiCiAgc3RhdGljIG5zcmVzdWx0IFJlZ2lzdGVyQ29tcG9uZW50KGNvbnN0IG5zQ0lEICZhQ2xh
c3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphQ2xhc3NOYW1l
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYUNvbnRyYWN0SUQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphTGlicmFyeVBlcnNp
c3RlbnREZXNjcmlwdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFS
ZXBsYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFQZXJzaXN0KTsK
CgoKICBzdGF0aWMgbnNyZXN1bHQgUmVnaXN0ZXJDb21wb25lbnRTcGVjKGNvbnN0IG5zQ0lEICZh
Q2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYUNs
YXNzTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICph
Q29udHJhY3RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGaWxlICph
TGlicmFyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVJlcGxh
Y2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFQZXJzaXN0KTsK
CgoKCiAgc3RhdGljIG5zcmVzdWx0IFJlZ2lzdGVyQ29tcG9uZW50TGliKGNvbnN0IG5zQ0lEICZh
Q2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KmFDbGFzc05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKmFDb250cmFjdElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICphZGxsTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJCb29sIGFSZXBsYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUkJvb2wgYVBlcnNpc3QpOwoKCgogIHN0YXRpYyBuc3Jlc3VsdCBVbnJlZ2lzdGVyRmFj
dG9yeShjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0lGYWN0b3J5ICphRmFjdG9yeSk7CgoKICBzdGF0aWMgbnNyZXN1bHQgVW5yZWdpc3Rl
ckNvbXBvbmVudChjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFMaWJyYXJ5KTsKCgogIHN0YXRpYyBuc3Jlc3VsdCBV
bnJlZ2lzdGVyQ29tcG9uZW50U3BlYyhjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGaWxlICphTGlicmFyeVNwZWMpOwoKCiAg
c3RhdGljIG5zcmVzdWx0IEZyZWVMaWJyYXJpZXModm9pZCk7CgoKCgoKICBzdGF0aWMgbnNyZXN1
bHQgQXV0b1JlZ2lzdGVyKFBSSW50MzIgd2hlbiwgbnNJRmlsZSogZGlyZWN0b3J5KTsKICBzdGF0
aWMgbnNyZXN1bHQgQXV0b1JlZ2lzdGVyQ29tcG9uZW50KFBSSW50MzIgd2hlbiwgbnNJRmlsZSAq
Y29tcG9uZW50KTsKICBzdGF0aWMgbnNyZXN1bHQgQXV0b1VucmVnaXN0ZXJDb21wb25lbnQoUFJJ
bnQzMiB3aGVuLCBuc0lGaWxlICpjb21wb25lbnQpOwoKCiAgc3RhdGljIG5zcmVzdWx0IElzUmVn
aXN0ZXJlZChjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUFJCb29sICphUmVnaXN0ZXJlZCk7CgoKICBzdGF0aWMgbnNyZXN1bHQgRW51bWVyYXRlQ0xT
SURzKG5zSUVudW1lcmF0b3IqKiBhRW11bWVyYXRvcik7CgoKICBzdGF0aWMgbnNyZXN1bHQgRW51
bWVyYXRlQ29udHJhY3RJRHMobnNJRW51bWVyYXRvcioqIGFFbXVtZXJhdG9yKTsKCn07CiMgMzMg
Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NvbXBvbmVudE1hbmFnZXJVdGlscy5oIiAy
CiMgNDMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NvbXBvbmVudE1hbmFnZXJVdGls
cy5oIgpjbGFzcyBuc0NyZWF0ZUluc3RhbmNlQnlDSUQgOiBwdWJsaWMgbnNDT01QdHJfaGVscGVy
CnsKcHVibGljOgogICAgbnNDcmVhdGVJbnN0YW5jZUJ5Q0lEKCBjb25zdCBuc0NJRCYgYUNJRCwg
bnNJU3VwcG9ydHMqIGFPdXRlciwgbnNyZXN1bHQqIGFFcnJvclB0ciApCiAgICAgICAgOiBtQ0lE
KGFDSUQpLAogICAgICAgICAgbU91dGVyKGFPdXRlciksCiAgICAgICAgICBtRXJyb3JQdHIoYUVy
cm9yUHRyKQogICAgewoKICAgIH0KCiAgICB2aXJ0dWFsIG5zcmVzdWx0IG9wZXJhdG9yKCkoIGNv
bnN0IG5zSUlEJiwgdm9pZCoqICkgY29uc3Q7Cgpwcml2YXRlOgogICAgY29uc3QgbnNDSUQmIG1D
SUQ7CiAgICBuc0lTdXBwb3J0cyogbU91dGVyOwogICAgbnNyZXN1bHQqIG1FcnJvclB0cjsKfTsK
CmNsYXNzIG5zQ3JlYXRlSW5zdGFuY2VCeUNvbnRyYWN0SUQgOiBwdWJsaWMgbnNDT01QdHJfaGVs
cGVyCnsKcHVibGljOgogICAgbnNDcmVhdGVJbnN0YW5jZUJ5Q29udHJhY3RJRCggY29uc3QgY2hh
ciogYUNvbnRyYWN0SUQsIG5zSVN1cHBvcnRzKiBhT3V0ZXIsIG5zcmVzdWx0KiBhRXJyb3JQdHIg
KQogICAgICAgIDogbUNvbnRyYWN0SUQoYUNvbnRyYWN0SUQpLAogICAgICAgICAgbU91dGVyKGFP
dXRlciksCiAgICAgICAgICBtRXJyb3JQdHIoYUVycm9yUHRyKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgIHZp
cnR1YWwgbnNyZXN1bHQgb3BlcmF0b3IoKSggY29uc3QgbnNJSUQmLCB2b2lkKiogKSBjb25zdDsK
CnByaXZhdGU6CiAgICBjb25zdCBjaGFyKiBtQ29udHJhY3RJRDsKICAgIG5zSVN1cHBvcnRzKiBt
T3V0ZXI7CiAgICBuc3Jlc3VsdCogbUVycm9yUHRyOwp9OwoKaW5saW5lCmNvbnN0IG5zQ3JlYXRl
SW5zdGFuY2VCeUNJRApkb19DcmVhdGVJbnN0YW5jZSggY29uc3QgbnNDSUQmIGFDSUQsIG5zcmVz
dWx0KiBlcnJvciA9IDAgKQp7CiAgICByZXR1cm4gbnNDcmVhdGVJbnN0YW5jZUJ5Q0lEKGFDSUQs
IDAsIGVycm9yKTsKfQoKaW5saW5lCmNvbnN0IG5zQ3JlYXRlSW5zdGFuY2VCeUNJRApkb19DcmVh
dGVJbnN0YW5jZSggY29uc3QgbnNDSUQmIGFDSUQsIG5zSVN1cHBvcnRzKiBhT3V0ZXIsIG5zcmVz
dWx0KiBlcnJvciA9IDAgKQp7CiAgICByZXR1cm4gbnNDcmVhdGVJbnN0YW5jZUJ5Q0lEKGFDSUQs
IGFPdXRlciwgZXJyb3IpOwp9CgppbmxpbmUKY29uc3QgbnNDcmVhdGVJbnN0YW5jZUJ5Q29udHJh
Y3RJRApkb19DcmVhdGVJbnN0YW5jZSggY29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5zcmVzdWx0
KiBlcnJvciA9IDAgKQp7CiAgICByZXR1cm4gbnNDcmVhdGVJbnN0YW5jZUJ5Q29udHJhY3RJRChh
Q29udHJhY3RJRCwgMCwgZXJyb3IpOwp9CgppbmxpbmUKY29uc3QgbnNDcmVhdGVJbnN0YW5jZUJ5
Q29udHJhY3RJRApkb19DcmVhdGVJbnN0YW5jZSggY29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5z
SVN1cHBvcnRzKiBhT3V0ZXIsIG5zcmVzdWx0KiBlcnJvciA9IDAgKQp7CiAgICByZXR1cm4gbnND
cmVhdGVJbnN0YW5jZUJ5Q29udHJhY3RJRChhQ29udHJhY3RJRCwgYU91dGVyLCBlcnJvcik7Cn0K
Cgp0ZW1wbGF0ZSA8Y2xhc3MgRGVzdGluYXRpb25UeXBlPgppbmxpbmUKbnNyZXN1bHQKQ2FsbENy
ZWF0ZUluc3RhbmNlKCBjb25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgIG5z
SVN1cHBvcnRzICphRGVsZWdhdGUsCiAgICAgICAgICAgICAgICAgICAgRGVzdGluYXRpb25UeXBl
KiogYURlc3RpbmF0aW9uICkKewogICAgOwoKICAgIHJldHVybiBuc0NvbXBvbmVudE1hbmFnZXI6
OkNyZWF0ZUluc3RhbmNlKGFDbGFzcywgYURlbGVnYXRlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01UeXBlSW5mbzxEZXN0aW5hdGlvblR5cGU+OjpH
ZXRJSUQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8IHZvaWQqKiA+KGFEZXN0aW5hdGlvbikpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgRGVzdGluYXRpb25UeXBlPgppbmxpbmUKbnNyZXN1bHQKQ2FsbENyZWF0ZUluc3RhbmNlKCBj
b25zdCBuc0NJRCAmYUNsYXNzLAogICAgICAgICAgICAgICAgICAgIERlc3RpbmF0aW9uVHlwZSoq
IGFEZXN0aW5hdGlvbiApCnsKICAgIDsKCiAgICByZXR1cm4gbnNDb21wb25lbnRNYW5hZ2VyOjpD
cmVhdGVJbnN0YW5jZShhQ2xhc3MsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0NPTVR5cGVJbmZvPERlc3RpbmF0aW9uVHlwZT46OkdldElJRCgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDwgdm9pZCoqID4oYURlc3RpbmF0aW9uKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBEZXN0aW5h
dGlvblR5cGU+CmlubGluZQpuc3Jlc3VsdApDYWxsQ3JlYXRlSW5zdGFuY2UoIGNvbnN0IGNoYXIg
KmFDb250cmFjdElELAogICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICphRGVsZWdhdGUs
CiAgICAgICAgICAgICAgICAgICAgRGVzdGluYXRpb25UeXBlKiogYURlc3RpbmF0aW9uICkKewog
ICAgOwogICAgOwoKICAgIHJldHVybiBuc0NvbXBvbmVudE1hbmFnZXI6OkNyZWF0ZUluc3RhbmNl
KGFDb250cmFjdElELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYURlbGVnYXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNDT01UeXBlSW5mbzxEZXN0aW5hdGlvblR5cGU+OjpHZXRJSUQoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8IHZvaWQq
KiA+KGFEZXN0aW5hdGlvbikpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRGVzdGluYXRpb25UeXBlPgpp
bmxpbmUKbnNyZXN1bHQKQ2FsbENyZWF0ZUluc3RhbmNlKCBjb25zdCBjaGFyICphQ29udHJhY3RJ
RCwKICAgICAgICAgICAgICAgICAgICBEZXN0aW5hdGlvblR5cGUqKiBhRGVzdGluYXRpb24gKQp7
CiAgICA7CiAgICA7CgogICAgcmV0dXJuIG5zQ29tcG9uZW50TWFuYWdlcjo6Q3JlYXRlSW5zdGFu
Y2UoYUNvbnRyYWN0SUQsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0NPTVR5cGVJbmZvPERlc3RpbmF0aW9uVHlwZT46OkdldElJRCgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDwg
dm9pZCoqID4oYURlc3RpbmF0aW9uKSk7Cn0KCgpleHRlcm4gY29uc3QgY2hhciB4cGNvbUtleU5h
bWVbXTsKZXh0ZXJuIGNvbnN0IGNoYXIgeHBjb21Db21wb25lbnRzS2V5TmFtZVtdOwpleHRlcm4g
Y29uc3QgY2hhciBsYXN0TW9kVmFsdWVOYW1lW107CmV4dGVybiBjb25zdCBjaGFyIGZpbGVTaXpl
VmFsdWVOYW1lW107CmV4dGVybiBjb25zdCBjaGFyIG5hdGl2ZUNvbXBvbmVudFR5cGVbXTsKZXh0
ZXJuIGNvbnN0IGNoYXIgc3RhdGljQ29tcG9uZW50VHlwZVtdOwojIDE1OSAiLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVudE1hbmFnZXIuaCIgMgojIDIzICIuLi8uLi8uLi9k
aXN0L2luY2x1ZGUveHBjb25uZWN0L3hwY2NvbXBvbmVudHMuaCIgMgoKCgojIDEgIi4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QvbnNJU2NyaXB0YWJsZUludGVyZmFjZXMuaCIgMQojIDE0
ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb25uZWN0L25zSVNjcmlwdGFibGVJbnRlcmZhY2Vz
LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUludGVyZmFjZUluZm9NYW5h
Z2VyLmgiIDEKIyAxNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUludGVyZmFjZUlu
Zm9NYW5hZ2VyLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUludGVyZmFj
ZUluZm8uaCIgMQojIDE3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJSW50ZXJmYWNl
SW5mby5oIgpjbGFzcyBuc1hQVE1ldGhvZEluZm87CmNsYXNzIG5zWFBUQ29uc3RhbnQ7CmNsYXNz
IG5zWFBUUGFyYW1JbmZvOwpjbGFzcyBuc1hQVFR5cGU7CiMgMjkgIi4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS94cGNvbS9uc0lJbnRlcmZhY2VJbmZvLmgiCmNsYXNzIG5zSUludGVyZmFjZUluZm8gOiBw
dWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJ
RCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4MjE1ZGJlMDQsIDB4OTRhNywgMHgxMWQy
LCB7IDB4YmEsIDB4NTgsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4NWQsIDB4ZDcgfX07IHJl
dHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYW1lKGNoYXIgKiAqYU5hbWUpID0g
MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW50ZXJmYWNlSUlEKG5zSUlEICogKmFJbnRlcmZh
Y2VJSUQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNTY3JpcHRhYmxlKFBSQm9vbCAqX3Jl
dHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJlbnQobnNJSW50ZXJmYWNlSW5m
byAqICphUGFyZW50KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1ldGhvZENvdW50
KFBSVWludDE2ICphTWV0aG9kQ291bnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29u
c3RhbnRDb3VudChQUlVpbnQxNiAqYUNvbnN0YW50Q291bnQpID0gMDsKCgoKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRNZXRob2RJbmZvKFBSVWludDE2IGluZGV4LCBjb25zdCBuc1hQVE1ldGhv
ZEluZm8gKiAqaW5mbykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNZXRob2RJbmZvRm9y
TmFtZShjb25zdCBjaGFyICptZXRob2ROYW1lLCBQUlVpbnQxNiAqaW5kZXgsIGNvbnN0IG5zWFBU
TWV0aG9kSW5mbyAqICppbmZvKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnN0YW50
KFBSVWludDE2IGluZGV4LCBjb25zdCBuc1hQVENvbnN0YW50ICogKmNvbnN0YW50KSA9IDA7CgoK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbmZvRm9yUGFyYW0oUFJVaW50MTYgbWV0aG9kSW5k
ZXgsIGNvbnN0IG5zWFBUUGFyYW1JbmZvICogcGFyYW0sIG5zSUludGVyZmFjZUluZm8gKipfcmV0
dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldElJREZvclBhcmFtKFBSVWludDE2IG1l
dGhvZEluZGV4LCBjb25zdCBuc1hQVFBhcmFtSW5mbyAqIHBhcmFtLCBuc0lJRCAqICpfcmV0dmFs
KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFR5cGVGb3JQYXJhbShQUlVpbnQxNiBt
ZXRob2RJbmRleCwgY29uc3QgbnNYUFRQYXJhbUluZm8gKiBwYXJhbSwgUFJVaW50MTYgZGltZW5z
aW9uLCBuc1hQVFR5cGUgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2l6
ZUlzQXJnTnVtYmVyRm9yUGFyYW0oUFJVaW50MTYgbWV0aG9kSW5kZXgsIGNvbnN0IG5zWFBUUGFy
YW1JbmZvICogcGFyYW0sIFBSVWludDE2IGRpbWVuc2lvbiwgUFJVaW50OCAqX3JldHZhbCkgPSAw
OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMZW5ndGhJc0FyZ051bWJlckZvclBhcmFtKFBSVWlu
dDE2IG1ldGhvZEluZGV4LCBjb25zdCBuc1hQVFBhcmFtSW5mbyAqIHBhcmFtLCBQUlVpbnQxNiBk
aW1lbnNpb24sIFBSVWludDggKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
SW50ZXJmYWNlSXNBcmdOdW1iZXJGb3JQYXJhbShQUlVpbnQxNiBtZXRob2RJbmRleCwgY29uc3Qg
bnNYUFRQYXJhbUluZm8gKiBwYXJhbSwgUFJVaW50OCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBJc0lJRChjb25zdCBuc0lJRCAqIElJRCwgUFJCb29sICpfcmV0dmFsKSA9IDA7
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWVTaGFyZWQoY29uc3QgY2hhciAqKm5hbWUpID0g
MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SUlEU2hhcmVkKGNvbnN0IG5zSUlEICogKmlpZCkg
PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc0Z1bmN0aW9uKFBSQm9vbCAqX3JldHZhbCkgPSAw
OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBIYXNBbmNlc3Rvcihjb25zdCBuc0lJRCAqIGlpZCwgUFJC
b29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldElJREZvclBhcmFtTm9B
bGxvYyhQUlVpbnQxNiBtZXRob2RJbmRleCwgY29uc3QgbnNYUFRQYXJhbUluZm8gKiBwYXJhbSwg
bnNJSUQgKmlpZCkgPSAwOwoKfTsKIyAxNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25z
SUludGVyZmFjZUluZm9NYW5hZ2VyLmgiIDIKCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv
eHBjb20vbnNJRW51bWVyYXRvci5oIiAxCiMgMTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNv
bS9uc0lFbnVtZXJhdG9yLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVNp
bXBsZUVudW1lcmF0b3IuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJ
U2ltcGxlRW51bWVyYXRvci5oIgpjbGFzcyBuc0lTaW1wbGVFbnVtZXJhdG9yIDogcHVibGljIG5z
SVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3Rh
dGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGQxODk5MjQwLCAweGY5ZDIsIDB4MTFkMiwgeyAweGJk
LCAweGQ2LCAweDAwLCAweDAwLCAweDY0LCAweDY1LCAweDczLCAweDc0IH19OyByZXR1cm4gaWlk
O30KIyA1MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVNpbXBsZUVudW1lcmF0b3Iu
aCIKICB2aXJ0dWFsIG5zcmVzdWx0IEhhc01vcmVFbGVtZW50cyhQUkJvb2wgKl9yZXR2YWwpID0g
MDsKIyA2OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVNpbXBsZUVudW1lcmF0b3Iu
aCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5leHQobnNJU3VwcG9ydHMgKipfcmV0dmFsKSA9IDA7
Cgp9OwojIDExICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJRW51bWVyYXRvci5oIiAy
CgoKCgoKCgpleHRlcm4gIkMiIG5zcmVzdWx0Ck5TX05ld0VtcHR5RW51bWVyYXRvcihuc0lTaW1w
bGVFbnVtZXJhdG9yKiogYVJlc3VsdCk7CiMgMjggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNv
bS9uc0lFbnVtZXJhdG9yLmgiCmNsYXNzIG5zSUVudW1lcmF0b3IgOiBwdWJsaWMgbnNJU3VwcG9y
dHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29u
c3QgbnNJSUQgaWlkID0gezB4YWQzODUyODYsIDB4Y2JjNCwgMHgxMWQyLCB7IDB4OGMsIDB4Y2Es
IDB4MDAsIDB4NjAsIDB4YjAsIDB4ZmMsIDB4MTQsIDB4YTMgfX07IHJldHVybiBpaWQ7fQoKCgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEZpcnN0KHZvaWQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBOZXh0KHZvaWQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3VycmVudEl0ZW0obnNJ
U3VwcG9ydHMgKipfcmV0dmFsKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzRG9uZSh2
b2lkKSA9IDA7Cgp9OwojIDE0MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUVudW1l
cmF0b3IuaCIKY2xhc3MgbnNJQmlkaXJlY3Rpb25hbEVudW1lcmF0b3IgOiBwdWJsaWMgbnNJRW51
bWVyYXRvciB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp
YyBjb25zdCBuc0lJRCBpaWQgPSB7MHg3NWYxNThhMCwgMHhjYWRkLCAweDExZDIsIHsgMHg4Yywg
MHhjYSwgMHgwMCwgMHg2MCwgMHhiMCwgMHhmYywgMHgxNCwgMHhhMyB9fTsgcmV0dXJuIGlpZDt9
CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgTGFzdCh2b2lkKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgUHJldih2b2lkKSA9IDA7Cgp9OwojIDE5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBj
b20vbnNJSW50ZXJmYWNlSW5mb01hbmFnZXIuaCIgMgojIDM3ICIuLi8uLi8uLi9kaXN0L2luY2x1
ZGUveHBjb20vbnNJSW50ZXJmYWNlSW5mb01hbmFnZXIuaCIKY2xhc3MgbnNJSW50ZXJmYWNlSW5m
b01hbmFnZXIgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3Qg
bnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4OGIxNjE5MDAsIDB4
YmUyYiwgMHgxMWQyLCB7IDB4OTgsIDB4MzEsIDB4MDAsIDB4NjAsIDB4MDgsIDB4OTYsIDB4MjQs
IDB4MjIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbmZvRm9ySUlE
KGNvbnN0IG5zSUlEICogaWlkLCBuc0lJbnRlcmZhY2VJbmZvICoqX3JldHZhbCkgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRJbmZvRm9yTmFtZShjb25zdCBjaGFyICpuYW1lLCBuc0lJbnRl
cmZhY2VJbmZvICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJSURGb3JO
YW1lKGNvbnN0IGNoYXIgKm5hbWUsIG5zSUlEICogKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwg
bnNyZXN1bHQgR2V0TmFtZUZvcklJRChjb25zdCBuc0lJRCAqIGlpZCwgY2hhciAqKl9yZXR2YWwp
ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRW51bWVyYXRlSW50ZXJmYWNlcyhuc0lFbnVtZXJh
dG9yICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBdXRvUmVnaXN0ZXJJbnRl
cmZhY2VzKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRW51bWVyYXRlSW50ZXJmYWNl
c1dob3NlTmFtZXNTdGFydFdpdGgoY29uc3QgY2hhciAqcHJlZml4LCBuc0lFbnVtZXJhdG9yICoq
X3JldHZhbCkgPSAwOwoKfTsKIyAxNzYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lJ
bnRlcmZhY2VJbmZvTWFuYWdlci5oIgpjbGFzcyBuc0lJbnRlcmZhY2VJbmZvU3VwZXJNYW5hZ2Vy
IDogcHVibGljIG5zSUludGVyZmFjZUluZm9NYW5hZ2VyIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNv
bnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDBlZTIyODUw
LCAweGJjNmEsIDB4MTFkNSwgeyAweDkxLCAweDM0LCAweDAwLCAweDEwLCAweGE0LCAweGU3LCAw
eDNkLCAweDlhIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgQWRkQWRkaXRp
b25hbE1hbmFnZXIobnNJSW50ZXJmYWNlSW5mb01hbmFnZXIgKm1hbmFnZXIpID0gMDsKCgogIHZp
cnR1YWwgbnNyZXN1bHQgUmVtb3ZlQWRkaXRpb25hbE1hbmFnZXIobnNJSW50ZXJmYWNlSW5mb01h
bmFnZXIgKm1hbmFnZXIpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFzQWRkaXRpb25hbE1h
bmFnZXJzKFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFbnVtZXJh
dGVBZGRpdGlvbmFsTWFuYWdlcnMobnNJU2ltcGxlRW51bWVyYXRvciAqKl9yZXR2YWwpID0gMDsK
Cn07CiMgMTUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QvbnNJU2NyaXB0YWJsZUlu
dGVyZmFjZXMuaCIgMgojIDMzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb25uZWN0L25zSVNj
cmlwdGFibGVJbnRlcmZhY2VzLmgiCmNsYXNzIG5zSVNjcmlwdGFibGVJbnRlcmZhY2VzIDogcHVi
bGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQo
KSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDAxYzc4YzY1LCAweDMxZGEsIDB4NDU2Yiwg
eyAweDkwLCAweGJmLCAweGRhLCAweDM5LCAweGQwLCAweDlmLCAweGRjLCAweGJmIH19OyByZXR1
cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWFuYWdlcihuc0lJbnRlcmZhY2VJbmZv
TWFuYWdlciAqICphTWFuYWdlcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TWFuYWdlcihu
c0lJbnRlcmZhY2VJbmZvTWFuYWdlciAqIGFNYW5hZ2VyKSA9IDA7Cgp9OwojIDI3ICIuLi8uLi8u
Li9kaXN0L2luY2x1ZGUveHBjb25uZWN0L3hwY2NvbXBvbmVudHMuaCIgMgojIDQ1ICIuLi8uLi8u
Li9kaXN0L2luY2x1ZGUveHBjb25uZWN0L3hwY2NvbXBvbmVudHMuaCIKY2xhc3MgbnNJWFBDQ29t
cG9uZW50c19DbGFzc2VzIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGlj
IGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDk3OGZm
NTIwLCAweGQyNmMsIDB4MTFkMiwgeyAweDk4LCAweDQyLCAweDAwLCAweDYwLCAweDA4LCAweDk2
LCAweDI0LCAweDIyIH19OyByZXR1cm4gaWlkO30KCn07CiMgMTA3ICIuLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUveHBjb25uZWN0L3hwY2NvbXBvbmVudHMuaCIKY2xhc3MgbnNJWFBDQ29tcG9uZW50c19D
bGFzc2VzQnlJRCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25z
dCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgzMzZhOTU5MCwg
MHg0ZDE5LCAweDExZDMsIHsgMHg5OCwgMHg5MywgMHgwMCwgMHg2MCwgMHgwOCwgMHg5NiwgMHgy
NCwgMHgyMiB9fTsgcmV0dXJuIGlpZDt9Cgp9OwojIDE2OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L3hwY29ubmVjdC94cGNjb21wb25lbnRzLmgiCmNsYXNzIG5zSVhQQ0NvbXBvbmVudHNfUmVzdWx0
cyA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYg
R2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgyZmMyMjlhMCwgMHg1ODYwLCAw
eDExZDMsIHsgMHg5OCwgMHg5OSwgMHgwMCwgMHg2MCwgMHgwOCwgMHg5NiwgMHgyNCwgMHgyMiB9
fTsgcmV0dXJuIGlpZDt9Cgp9OwojIDIzMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29ubmVj
dC94cGNjb21wb25lbnRzLmgiCmNsYXNzIG5zSVhQQ0NvbXBvbmVudHNfSUQgOiBwdWJsaWMgbnNJ
U3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0
aWMgY29uc3QgbnNJSUQgaWlkID0gezB4Nzk5NGE2ZTAsIDB4ZTAyOCwgMHgxMWQzLCB7IDB4OGYs
IDB4NWQsIDB4MDAsIDB4MTAsIDB4YTQsIDB4ZTcsIDB4M2QsIDB4OWEgfX07IHJldHVybiBpaWQ7
fQoKfTsKIyAyOTMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QveHBjY29tcG9uZW50
cy5oIgpjbGFzcyBuc0lYUENDb21wb25lbnRzX0V4Y2VwdGlvbiA6IHB1YmxpYyBuc0lTdXBwb3J0
cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25z
dCBuc0lJRCBpaWQgPSB7MHg1YmYwMzljMCwgMHhlMDI4LCAweDExZDMsIHsgMHg4ZiwgMHg1ZCwg
MHgwMCwgMHgxMCwgMHhhNCwgMHhlNywgMHgzZCwgMHg5YSB9fTsgcmV0dXJuIGlpZDt9Cgp9Owoj
IDM1NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29ubmVjdC94cGNjb21wb25lbnRzLmgiCmNs
YXNzIG5zSVhQQ0NvbXBvbmVudHNfQ29uc3RydWN0b3IgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewog
cHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJ
SUQgaWlkID0gezB4ODg2NTU2NDAsIDB4ZTAyOCwgMHgxMWQzLCB7IDB4OGYsIDB4NWQsIDB4MDAs
IDB4MTAsIDB4YTQsIDB4ZTcsIDB4M2QsIDB4OWEgfX07IHJldHVybiBpaWQ7fQoKfTsKIyA0MTcg
Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QveHBjY29tcG9uZW50cy5oIgpjbGFzcyBu
c0lYUENDb25zdHJ1Y3RvciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRp
YyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhjODE0
Y2EyMCwgMHhlMGRjLCAweDExZDMsIHsgMHg4ZiwgMHg1ZiwgMHgwMCwgMHgxMCwgMHhhNCwgMHhl
NywgMHgzZCwgMHg5YSB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENs
YXNzSUQobnNJSlNDSUQgKiAqYUNsYXNzSUQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
SW50ZXJmYWNlSUQobnNJSlNJSUQgKiAqYUludGVyZmFjZUlEKSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldEluaXRpYWxpemVyKGNoYXIgKiAqYUluaXRpYWxpemVyKSA9IDA7Cgp9OwojIDUx
MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29ubmVjdC94cGNjb21wb25lbnRzLmgiCmNsYXNz
IG5zSVhQQ0NvbXBvbmVudHMgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0
aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4NDI2
MjRmODAsIDB4ZDI2YywgMHgxMWQyLCB7IDB4OTgsIDB4NDIsIDB4MDAsIDB4NjAsIDB4MDgsIDB4
OTYsIDB4MjQsIDB4MjIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJ
bnRlcmZhY2VzKG5zSVNjcmlwdGFibGVJbnRlcmZhY2VzICogKmFJbnRlcmZhY2VzKSA9IDA7CgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldENsYXNzZXMobnNJWFBDQ29tcG9uZW50c19DbGFzc2VzICog
KmFDbGFzc2VzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENsYXNzZXNCeUlEKG5zSVhQ
Q0NvbXBvbmVudHNfQ2xhc3Nlc0J5SUQgKiAqYUNsYXNzZXNCeUlEKSA9IDA7CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldFN0YWNrKG5zSVN0YWNrRnJhbWUgKiAqYVN0YWNrKSA9IDA7CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldFJlc3VsdHMobnNJWFBDQ29tcG9uZW50c19SZXN1bHRzICogKmFSZXN1
bHRzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1hbmFnZXIobnNJQ29tcG9uZW50TWFu
YWdlciAqICphTWFuYWdlcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJRChuc0lYUEND
b21wb25lbnRzX0lEICogKmFJRCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFeGNlcHRp
b24obnNJWFBDQ29tcG9uZW50c19FeGNlcHRpb24gKiAqYUV4Y2VwdGlvbikgPSAwOwoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRDb25zdHJ1Y3Rvcihuc0lYUENDb21wb25lbnRzX0NvbnN0cnVjdG9y
ICogKmFDb25zdHJ1Y3RvcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1N1Y2Nlc3NDb2Rl
KG5zcmVzdWx0IHJlc3VsdCwgUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz
dWx0IExvb2t1cE1ldGhvZCh2b2lkKSA9IDA7Cgp9OwojIDE5ICIuLi8uLi8uLi9kaXN0L2luY2x1
ZGUveHBjb25uZWN0L25zSVhQQ29ubmVjdC5oIiAyCiMgMzggIi4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS94cGNvbm5lY3QvbnNJWFBDb25uZWN0LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw
Y29tL25zSUV4Y2VwdGlvblNlcnZpY2UuaCIgMQojIDI5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv
eHBjb20vbnNJRXhjZXB0aW9uU2VydmljZS5oIgpjbGFzcyBuc0lFeGNlcHRpb25Qcm92aWRlciA6
IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0
SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgwNTc3NzQ0YywgMHhjMWQyLCAweDQ3
ZjIsIHsgMHg4YiwgMHhjYywgMHhjZSwgMHg3YSwgMHg5ZSwgMHg1YSwgMHg4OCwgMHhmYyB9fTsg
cmV0dXJuIGlpZDt9CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFeGNlcHRpb24obnNyZXN1bHQg
cmVzdWx0LCBuc0lFeGNlcHRpb24gKmRlZmF1bHRFeGNlcHRpb24sIG5zSUV4Y2VwdGlvbiAqKl9y
ZXR2YWwpID0gMDsKCn07CiMgOTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lFeGNl
cHRpb25TZXJ2aWNlLmgiCmNsYXNzIG5zSUV4Y2VwdGlvbk1hbmFnZXIgOiBwdWJsaWMgbnNJU3Vw
cG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMg
Y29uc3QgbnNJSUQgaWlkID0gezB4ZWZjOWQwMGIsIDB4MjMxYywgMHg0ZmViLCB7IDB4ODUsIDB4
MmMsIDB4YWMsIDB4MDEsIDB4NzIsIDB4NjYsIDB4YTQsIDB4MTUgfX07IHJldHVybiBpaWQ7fQoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q3VycmVudEV4Y2VwdGlvbihuc0lFeGNlcHRpb24gKmVy
cm9yKSA9IDA7CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDdXJyZW50RXhjZXB0aW9uKG5zSUV4
Y2VwdGlvbiAqKl9yZXR2YWwpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFeGNlcHRp
b25Gcm9tUHJvdmlkZXIobnNyZXN1bHQgcmMsIG5zSUV4Y2VwdGlvbiAqZGVmYXVsdEV4Y2VwdGlv
biwgbnNJRXhjZXB0aW9uICoqX3JldHZhbCkgPSAwOwoKfTsKIyAxOTIgIi4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS94cGNvbS9uc0lFeGNlcHRpb25TZXJ2aWNlLmgiCmNsYXNzIG5zSUV4Y2VwdGlvblNl
cnZpY2UgOiBwdWJsaWMgbnNJRXhjZXB0aW9uTWFuYWdlciB7CiBwdWJsaWM6CgogIHN0YXRpYyBj
b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgzNWE4OGY1
NCwgMHhmMjY3LCAweDQ0MTQsIHsgMHg5MiwgMHhhNywgMHgxOSwgMHgxZiwgMHg2NCwgMHg1NCwg
MHhhYiwgMHg1MiB9fTsgcmV0dXJuIGlpZDt9CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDdXJy
ZW50RXhjZXB0aW9uTWFuYWdlcihuc0lFeGNlcHRpb25NYW5hZ2VyICogKmFDdXJyZW50RXhjZXB0
aW9uTWFuYWdlcikgPSAwOwojIDIxMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUV4
Y2VwdGlvblNlcnZpY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZ2lzdGVyRXhjZXB0aW9uUHJv
dmlkZXIobnNJRXhjZXB0aW9uUHJvdmlkZXIgKnByb3ZpZGVyLCBQUlVpbnQzMiBtb2R1bGVDb2Rl
KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFVucmVnaXN0ZXJFeGNlcHRpb25Qcm92aWRlcihu
c0lFeGNlcHRpb25Qcm92aWRlciAqcHJvdmlkZXIsIFBSVWludDMyIG1vZHVsZUNvZGUpID0gMDsK
Cn07CiMgMzkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QvbnNJWFBDb25uZWN0Lmgi
IDIKCgoKCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNwdWJ0ZC5oIiAxCiMgNDAg
Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc3B1YnRkLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL2pzL2pzdHlwZXMuaCIgMQojIDYzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanN0
eXBlcy5oIgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5j
bHVkZS9zdGRkZWYuaCIgMSAzCiMgNjQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc3R5cGVz
LmgiIDIKIyAyMzUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc3R5cGVzLmgiCiMgMSAiLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzYXV0b2NmZy5oIiAxCiMgMjM2ICIuLi8uLi8uLi9kaXN0
L2luY2x1ZGUvanMvanN0eXBlcy5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pz
b3NkZXAuaCIgMQojIDIzNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzdHlwZXMuaCIgMgoK
CgoKZXh0ZXJuICJDIiB7CiMgMjUxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanN0eXBlcy5o
Igp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgSlNVaW50ODsKdHlwZWRlZiBzaWduZWQgY2hhciBKU0lu
dDg7CiMgMjY0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanN0eXBlcy5oIgp0eXBlZGVmIHVu
c2lnbmVkIHNob3J0IEpTVWludDE2Owp0eXBlZGVmIHNob3J0IEpTSW50MTY7CiMgMjc3ICIuLi8u
Li8uLi9kaXN0L2luY2x1ZGUvanMvanN0eXBlcy5oIgp0eXBlZGVmIHVuc2lnbmVkIGludCBKU1Vp
bnQzMjsKdHlwZWRlZiBpbnQgSlNJbnQzMjsKIyAzMTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9q
cy9qc3R5cGVzLmgiCnR5cGVkZWYgbG9uZyBsb25nIEpTSW50NjQ7CnR5cGVkZWYgdW5zaWduZWQg
bG9uZyBsb25nIEpTVWludDY0OwojIDMzNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzdHlw
ZXMuaCIKdHlwZWRlZiBpbnQgSlNJbnRuOwp0eXBlZGVmIHVuc2lnbmVkIGludCBKU1VpbnRuOwoj
IDM0NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzdHlwZXMuaCIKdHlwZWRlZiBkb3VibGUg
SlNGbG9hdDY0OwoKCgoKCgp0eXBlZGVmIHNpemVfdCBKU1NpemU7CgoKCgoKCgp0eXBlZGVmIHB0
cmRpZmZfdCBKU1B0cmRpZmY7CgoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgSlNVcHRyZGlm
ZjsKIyAzNzkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc3R5cGVzLmgiCnR5cGVkZWYgSlNJ
bnRuIEpTQm9vbDsKIyAzODkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc3R5cGVzLmgiCnR5
cGVkZWYgSlNVaW50OCBKU1BhY2tlZEJvb2w7CgoKCgp0eXBlZGVmIGxvbmcgSlNXb3JkOwp0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgSlNVd29yZDsKCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pz
L2pzb3R5cGVzLmgiIDEKIyAzOTggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc3R5cGVzLmgi
IDIKCn0KIyA0MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzcHVidGQuaCIgMgojIDEgIi4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2NvbXBhdC5oIiAxCiMgNDUgIi4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9qcy9qc2NvbXBhdC5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2xv
bmcuaCIgMQojIDQ4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNsb25nLmgiCmV4dGVybiAi
QyIgewojIDY2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNsb25nLmgiCmV4dGVybiBKU0lu
dDY0IEpTTExfTWF4SW50KHZvaWQpOwpleHRlcm4gSlNJbnQ2NCBKU0xMX01pbkludCh2b2lkKTsK
ZXh0ZXJuIEpTSW50NjQgSlNMTF9aZXJvKHZvaWQpOwojIDQzMSAiLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL2pzL2pzbG9uZy5oIgp9CiMgNDYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2NvbXBh
dC5oIiAyCgp0eXBlZGVmIEpTSW50biBpbnROOwp0eXBlZGVmIEpTVWludG4gdWludE47CnR5cGVk
ZWYgSlNVd29yZCBqc3V3b3JkOwp0eXBlZGVmIEpTV29yZCBqc3dvcmQ7CnR5cGVkZWYgZmxvYXQg
ZmxvYXQzMjsKIyA0MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzcHVidGQuaCIgMgoKZXh0
ZXJuICJDIiB7CgoKdHlwZWRlZiB1aW50MTYganNjaGFyOwp0eXBlZGVmIGludDMyIGpzaW50Owp0
eXBlZGVmIHVpbnQzMiBqc3VpbnQ7CnR5cGVkZWYgZmxvYXQ2NCBqc2RvdWJsZTsKdHlwZWRlZiBq
c3dvcmQganN2YWw7CnR5cGVkZWYganN3b3JkIGpzaWQ7CnR5cGVkZWYgaW50MzIganNyZWZjb3Vu
dDsKCnR5cGVkZWYgZW51bSBKU1ZlcnNpb24gewogICAgSlNWRVJTSU9OXzFfMCA9IDEwMCwKICAg
IEpTVkVSU0lPTl8xXzEgPSAxMTAsCiAgICBKU1ZFUlNJT05fMV8yID0gMTIwLAogICAgSlNWRVJT
SU9OXzFfMyA9IDEzMCwKICAgIEpTVkVSU0lPTl8xXzQgPSAxNDAsCiAgICBKU1ZFUlNJT05fMV81
ID0gMTUwLAogICAgSlNWRVJTSU9OX0RFRkFVTFQgPSAwLAogICAgSlNWRVJTSU9OX1VOS05PV04g
PSAtMQp9IEpTVmVyc2lvbjsKCgoKCgp0eXBlZGVmIGVudW0gSlNUeXBlIHsKICAgIEpTVFlQRV9W
T0lELAogICAgSlNUWVBFX09CSkVDVCwKICAgIEpTVFlQRV9GVU5DVElPTiwKICAgIEpTVFlQRV9T
VFJJTkcsCiAgICBKU1RZUEVfTlVNQkVSLAogICAgSlNUWVBFX0JPT0xFQU4sCiAgICBKU1RZUEVf
TElNSVQKfSBKU1R5cGU7CgoKdHlwZWRlZiBlbnVtIEpTQWNjZXNzTW9kZSB7CiAgICBKU0FDQ19Q
Uk9UTyA9IDAsCiAgICBKU0FDQ19QQVJFTlQgPSAxLAogICAgSlNBQ0NfSU1QT1JUID0gMiwKICAg
IEpTQUNDX1dBVENIID0gMywKICAgIEpTQUNDX1JFQUQgPSA0LAogICAgSlNBQ0NfV1JJVEUgPSA4
LAogICAgSlNBQ0NfTElNSVQKfSBKU0FjY2Vzc01vZGU7CgoKCgoKCgp0eXBlZGVmIGVudW0gSlNJ
dGVyYXRlT3AgewogICAgSlNFTlVNRVJBVEVfSU5JVCwKICAgIEpTRU5VTUVSQVRFX05FWFQsCiAg
ICBKU0VOVU1FUkFURV9ERVNUUk9ZCn0gSlNJdGVyYXRlT3A7CgoKdHlwZWRlZiBzdHJ1Y3QgSlND
bGFzcyBKU0NsYXNzOwp0eXBlZGVmIHN0cnVjdCBKU0NvbnN0RG91YmxlU3BlYyBKU0NvbnN0RG91
YmxlU3BlYzsKdHlwZWRlZiBzdHJ1Y3QgSlNDb250ZXh0IEpTQ29udGV4dDsKdHlwZWRlZiBzdHJ1
Y3QgSlNFcnJvclJlcG9ydCBKU0Vycm9yUmVwb3J0Owp0eXBlZGVmIHN0cnVjdCBKU0Z1bmN0aW9u
IEpTRnVuY3Rpb247CnR5cGVkZWYgc3RydWN0IEpTRnVuY3Rpb25TcGVjIEpTRnVuY3Rpb25TcGVj
Owp0eXBlZGVmIHN0cnVjdCBKU0lkQXJyYXkgSlNJZEFycmF5Owp0eXBlZGVmIHN0cnVjdCBKU1By
b3BlcnR5IEpTUHJvcGVydHk7CnR5cGVkZWYgc3RydWN0IEpTUHJvcGVydHlTcGVjIEpTUHJvcGVy
dHlTcGVjOwp0eXBlZGVmIHN0cnVjdCBKU09iamVjdCBKU09iamVjdDsKdHlwZWRlZiBzdHJ1Y3Qg
SlNPYmplY3RNYXAgSlNPYmplY3RNYXA7CnR5cGVkZWYgc3RydWN0IEpTT2JqZWN0T3BzIEpTT2Jq
ZWN0T3BzOwp0eXBlZGVmIHN0cnVjdCBKU1J1bnRpbWUgSlNSdW50aW1lOwp0eXBlZGVmIHN0cnVj
dCBKU1J1bnRpbWUgSlNUYXNrU3RhdGU7CnR5cGVkZWYgc3RydWN0IEpTU2NyaXB0IEpTU2NyaXB0
Owp0eXBlZGVmIHN0cnVjdCBKU1N0cmluZyBKU1N0cmluZzsKdHlwZWRlZiBzdHJ1Y3QgSlNYRFJT
dGF0ZSBKU1hEUlN0YXRlOwp0eXBlZGVmIHN0cnVjdCBKU0V4Y2VwdGlvblN0YXRlIEpTRXhjZXB0
aW9uU3RhdGU7CnR5cGVkZWYgc3RydWN0IEpTTG9jYWxlQ2FsbGJhY2tzIEpTTG9jYWxlQ2FsbGJh
Y2tzOwojIDEzMiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzcHVidGQuaCIKdHlwZWRlZiBK
U0Jvb2wKKCogSlNQcm9wZXJ0eU9wKShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBqc3Zh
bCBpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganN2YWwgKnZwKTsKIyAxNjMg
Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc3B1YnRkLmgiCnR5cGVkZWYgSlNCb29sCigqIEpT
TmV3RW51bWVyYXRlT3ApKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBKU0l0ZXJhdGVPcCBlbnVtX29wLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAganN2YWwgKnN0YXRlcCwganNpZCAqaWRwKTsKCgoK
Cgp0eXBlZGVmIEpTQm9vbAooKiBKU0VudW1lcmF0ZU9wKShKU0NvbnRleHQgKmN4LCBKU09iamVj
dCAqb2JqKTsKIyAxODcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc3B1YnRkLmgiCnR5cGVk
ZWYgSlNCb29sCigqIEpTUmVzb2x2ZU9wKShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBq
c3ZhbCBpZCk7CiMgMjAwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNwdWJ0ZC5oIgp0eXBl
ZGVmIEpTQm9vbAooKiBKU05ld1Jlc29sdmVPcCkoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9i
aiwganN2YWwgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludE4gZmxh
Z3MsIEpTT2JqZWN0ICoqb2JqcCk7CgoKCgoKdHlwZWRlZiBKU0Jvb2wKKCogSlNDb252ZXJ0T3Ap
KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIEpTVHlwZSB0eXBlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpzdmFsICp2cCk7CgoKCgoKCnR5cGVkZWYgdm9pZAooKiBKU0Zp
bmFsaXplT3ApKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmopOwoKCgoKCnR5cGVkZWYgdm9p
ZAooKiBKU1N0cmluZ0ZpbmFsaXplT3ApKEpTQ29udGV4dCAqY3gsIEpTU3RyaW5nICpzdHIpOwoj
IDI0NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzcHVidGQuaCIKdHlwZWRlZiBKU09iamVj
dE9wcyAqCigqIEpTR2V0T2JqZWN0T3BzKShKU0NvbnRleHQgKmN4LCBKU0NsYXNzICpjbGFzcCk7
CiMgMjYxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNwdWJ0ZC5oIgp0eXBlZGVmIEpTQm9v
bAooKiBKU0NoZWNrQWNjZXNzT3ApKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzdmFs
IGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FjY2Vzc01vZGUgbW9k
ZSwganN2YWwgKnZwKTsKCgoKCgp0eXBlZGVmIEpTQm9vbAooKiBKU1hEUk9iamVjdE9wKShKU1hE
UlN0YXRlICp4ZHIsIEpTT2JqZWN0ICoqb2JqcCk7CgoKCgoKCnR5cGVkZWYgSlNCb29sCigqIEpT
SGFzSW5zdGFuY2VPcCkoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwganN2YWwgdiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNCb29sICpicCk7CiMgMjk5ICIuLi8u
Li8uLi9kaXN0L2luY2x1ZGUvanMvanNwdWJ0ZC5oIgp0eXBlZGVmIHVpbnQzMgooKiBKU01hcmtP
cCkoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgdm9pZCAqYXJnKTsKIyAzMTcgIi4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9qcy9qc3B1YnRkLmgiCnR5cGVkZWYgSlNPYmplY3RNYXAgKgooKiBK
U05ld09iamVjdE1hcE9wKShKU0NvbnRleHQgKmN4LCBqc3JlZmNvdW50IG5yZWZzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3RPcHMgKm9wcywgSlNDbGFzcyAq
Y2xhc3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2Jq
KTsKCgoKCgp0eXBlZGVmIHZvaWQKKCogSlNPYmplY3RNYXBPcCkoSlNDb250ZXh0ICpjeCwgSlNP
YmplY3RNYXAgKm1hcCk7CiMgMzQ2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNwdWJ0ZC5o
Igp0eXBlZGVmIEpTQm9vbAooKiBKU0xvb2t1cFByb3BPcCkoSlNDb250ZXh0ICpjeCwgSlNPYmpl
Y3QgKm9iaiwganNpZCBpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09i
amVjdCAqKm9ianAsIEpTUHJvcGVydHkgKipwcm9wcAoKCgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKTsKIyAzNjYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc3B1YnRkLmgi
CnR5cGVkZWYgSlNCb29sCigqIEpTRGVmaW5lUHJvcE9wKShKU0NvbnRleHQgKmN4LCBKU09iamVj
dCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzaWQgaWQsIGpzdmFs
IHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTUHJvcGVydHlPcCBn
ZXR0ZXIsIEpTUHJvcGVydHlPcCBzZXR0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdWludE4gYXR0cnMsIEpTUHJvcGVydHkgKipwcm9wcCk7CiMgMzgwICIuLi8uLi8uLi9k
aXN0L2luY2x1ZGUvanMvanNwdWJ0ZC5oIgp0eXBlZGVmIEpTQm9vbAooKiBKU1Byb3BlcnR5SWRP
cCkoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwganNpZCBpZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqc3ZhbCAqdnApOwoKCgoKCgoKdHlwZWRlZiBKU0Jvb2wKKCog
SlNBdHRyaWJ1dGVzT3ApKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzaWQgaWQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNQcm9wZXJ0eSAqcHJvcCwgdWludE4g
KmF0dHJzcCk7CgoKCgoKCnR5cGVkZWYgSlNCb29sCigqIEpTQ2hlY2tBY2Nlc3NJZE9wKShKU0Nv
bnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBqc2lkIGlkLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEpTQWNjZXNzTW9kZSBtb2RlLCBqc3ZhbCAqdnAsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludE4gKmF0dHJzcCk7CgoKCgoKCnR5cGVkZWYg
SlNPYmplY3QgKgooKiBKU09iamVjdE9wKShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsK
CgoKCgoKCnR5cGVkZWYgdm9pZAooKiBKU1Byb3BlcnR5UmVmT3ApKEpTQ29udGV4dCAqY3gsIEpT
T2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTUHJvcGVy
dHkgKnByb3ApOwoKCgoKCgp0eXBlZGVmIEpTQm9vbAooKiBKU1NldE9iamVjdFNsb3RPcCkoSlND
b250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1aW50MzIgc2xvdCwgSlNPYmplY3QgKnBvYmopOwojIDQ0NCAiLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL2pzL2pzcHVidGQuaCIKdHlwZWRlZiBqc3ZhbAooKiBKU0dldFJlcXVpcmVkU2xv
dE9wKShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdWludDMyIHNsb3QpOwoKdHlwZWRlZiB2b2lkCigqIEpTU2V0UmVx
dWlyZWRTbG90T3ApKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzIgc2xvdCwganN2YWwgdik7CgoKCnR5cGVk
ZWYgSlNCb29sCigqIEpTTmF0aXZlKShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCB1aW50
TiBhcmdjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzdmFsICphcmd2LCBqc3ZhbCAq
cnZhbCk7CgoKCnR5cGVkZWYgZW51bSBKU0dDU3RhdHVzIHsKICAgIEpTR0NfQkVHSU4sCiAgICBK
U0dDX0VORCwKICAgIEpTR0NfTUFSS19FTkQsCiAgICBKU0dDX0ZJTkFMSVpFX0VORAp9IEpTR0NT
dGF0dXM7Cgp0eXBlZGVmIEpTQm9vbAooKiBKU0dDQ2FsbGJhY2spKEpTQ29udGV4dCAqY3gsIEpT
R0NTdGF0dXMgc3RhdHVzKTsKCnR5cGVkZWYgSlNCb29sCigqIEpTQnJhbmNoQ2FsbGJhY2spKEpT
Q29udGV4dCAqY3gsIEpTU2NyaXB0ICpzY3JpcHQpOwoKdHlwZWRlZiB2b2lkCigqIEpTRXJyb3JS
ZXBvcnRlcikoSlNDb250ZXh0ICpjeCwgY29uc3QgY2hhciAqbWVzc2FnZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSlNFcnJvclJlcG9ydCAqcmVwb3J0KTsKCnR5cGVkZWYg
c3RydWN0IEpTRXJyb3JGb3JtYXRTdHJpbmcgewogICAgY29uc3QgY2hhciAqZm9ybWF0OwogICAg
dWludE4gYXJnQ291bnQ7Cn0gSlNFcnJvckZvcm1hdFN0cmluZzsKCnR5cGVkZWYgY29uc3QgSlNF
cnJvckZvcm1hdFN0cmluZyAqCigqIEpTRXJyb3JDYWxsYmFjaykodm9pZCAqdXNlclJlZiwgY29u
c3QgY2hhciAqbG9jYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB1aW50TiBlcnJvck51bWJlcik7CiMgNDk1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNw
dWJ0ZC5oIgp0eXBlZGVmIEpTQm9vbAooKiBKU0xvY2FsZVRvVXBwZXJDYXNlKShKU0NvbnRleHQg
KmN4LCBKU1N0cmluZyAqc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAganN2YWwgKnJ2YWwpOwoKdHlwZWRlZiBKU0Jvb2wKKCogSlNMb2NhbGVUb0xvd2VyQ2FzZSko
SlNDb250ZXh0ICpjeCwgSlNTdHJpbmcgKnNyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpzdmFsICpydmFsKTsKCnR5cGVkZWYgSlNCb29sCigqIEpTTG9jYWxlQ29t
cGFyZSkoSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SlNTdHJpbmcgKnNyYzEsIEpTU3RyaW5nICpzcmMyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqc3ZhbCAqcnZhbCk7CgoKCgp0eXBlZGVmIHN0cnVjdCBKU1ByaW5jaXBhbHMg
SlNQcmluY2lwYWxzOwojIDUyMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzcHVidGQuaCIK
dHlwZWRlZiBKU0Jvb2wKKCogSlNQcmluY2lwYWxzVHJhbnNjb2RlcikoSlNYRFJTdGF0ZSAqeGRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNQcmluY2lwYWxz
ICoqcHJpbmNpcGFsc3ApOwoKfQojIDQ2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb25uZWN0
L25zSVhQQ29ubmVjdC5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL3hwdGlu
Zm8uaCIgMQojIDQ0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20veHB0aW5mby5oIgojIDEg
Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS94cHRfc3RydWN0LmgiIDEKIyA0NiAiLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL3hwY29tL3hwdF9zdHJ1Y3QuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUveHBjb20veHB0X2FyZW5hLmgiIDEKIyA0NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw
Y29tL3hwdF9hcmVuYS5oIgojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzCiMgMzMgIi91
c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51
eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdGRs
aWIuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93YWl0
ZmxhZ3MuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAxIDMKIyA2NSAiL3Vzci9pbmNsdWRlL2JpdHMvd2Fp
dHN0YXR1cy5oIiAzCnVuaW9uIHdhaXQKICB7CiAgICBpbnQgd19zdGF0dXM7CiAgICBzdHJ1Y3QK
ICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3Rlcm1zaWc6NzsKICAgICAgICB1bnNp
Z25lZCBpbnQgX193X2NvcmVkdW1wOjE7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19yZXRjb2Rl
Ojg7CiAgICAgICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgoKICAgICAgfSBfX3dhaXRfdGVybWlu
YXRlZDsKICAgIHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHZh
bDo4OwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHNpZzo4OwogICAgICAgIHVuc2lnbmVk
IGludDoxNjsKCgoKCgoKICAgICAgfSBfX3dhaXRfc3RvcHBlZDsKICB9OwojIDQ0ICIvdXNyL2lu
Y2x1ZGUvc3RkbGliLmgiIDIgMwojIDkzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKCgp0eXBl
ZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9IGRpdl90OwoKCgp0
eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGludCByZW07CiAg
fSBsZGl2X3Q7CgoKCgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc3RydWN0CiAgewogICAgbG9u
ZyBsb25nIGludCBxdW90OwogICAgbG9uZyBsb25nIGludCByZW07CiAgfSBsbGRpdl90OwoKCiMg
MTM3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9t
Yl9jdXJfbWF4ICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgYXRvZiAoX19jb25z
dCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0
ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpfX25w
dHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCl9fZXh0ZW5zaW9u
X18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBkb3VibGUg
c3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgoKCmV4dGVybiBm
bG9hdCBzdHJ0b2YgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBs
b25nIGRvdWJsZSBzdHJ0b2xkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93
ICgpOwoKCgoKCmV4dGVybiBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0
b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAg
ICAgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRv
cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7
CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdXEgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAg
IHRocm93ICgpOwoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9s
bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgp
OwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQog
ICAgIHRocm93ICgpOwoKIyAyMjkgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gbG9u
ZyBpbnQgc3RydG9sX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2Us
CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7Cgpl
eHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVy
biBsb25nIGxvbmcgaW50IHN0cnRvbGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2Fs
ZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcg
bG9uZyBpbnQgc3RydG91bGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf
X2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHN0
cnRvZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAg
ICB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBzdHJ0b2ZfbCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc3Ry
dG9sZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBk
b3VibGUgX19zdHJ0b2RfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2lu
dGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkK
ICAgICB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCmV4dGVybiBsb25n
IGludCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQg
X19ncm91cCkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxf
aW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNl
LCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxv
bmcgaW50IF9fc3RydG9sbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0
cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJu
IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFy
ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkK
ICAgICB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gX19pbmxpbmUgZG91YmxlCnN0cnRvZCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIp
IHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2RfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIs
IDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludApzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgIGludCBf
X2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xfaW50ZXJuYWwgKF9fbnB0ciwgX19l
bmRwdHIsIF9fYmFzZSwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgaW50CnN0
cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3Ry
dG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCgoKZXh0ZXJu
IF9faW5saW5lIGZsb2F0CnN0cnRvZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2Zf
aW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGRv
dWJsZQpzdHJ0b2xkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvbGRfaW50ZXJuYWwg
KF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CgoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGlu
ZSBsb25nIGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkK
ewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwg
MCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGlu
dApzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0
cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBf
X3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKCgpf
X2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvbGwgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog
ICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5h
bCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBf
X2lubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50CnN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKiBf
X3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICBp
bnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0
ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KCgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUKYXRv
ZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9kIChfX25w
dHIsIChjaGFyICoqKSBfX251bGwpOwp9CmV4dGVybiBfX2lubGluZSBpbnQKYXRvaSAoX19jb25z
dCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gKGludCkgc3RydG9sIChfX25wdHIs
IChjaGFyICoqKSBfX251bGwsIDEwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKYXRvbCAo
X19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9sIChfX25wdHIs
IChjaGFyICoqKSBfX251bGwsIDEwKTsKfQoKCgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxp
bmUgbG9uZyBsb25nIGludAphdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsK
ICByZXR1cm4gc3RydG9sbCAoX19ucHRyLCAoY2hhciAqKikgX19udWxsLCAxMCk7Cn0KCiMgNDA4
ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9f
bikgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKF9fY29uc3QgY2hhciAqX19zKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKIyA0MjEgIi91c3IvaW5jbHVkZS9z
dGRsaWIuaCIgMwpleHRlcm4gbG9uZyBpbnQgcmFuZG9tICh2b2lkKSB0aHJvdyAoKTsKCgpleHRl
cm4gdm9pZCBzcmFuZG9tICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gY2hhciAqaW5pdHN0YXRlICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3N0YXRlYnVm
LAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbikgdGhyb3cgKCk7CgoK
CmV4dGVybiBjaGFyICpzZXRzdGF0ZSAoY2hhciAqX19zdGF0ZWJ1ZikgdGhyb3cgKCk7CgoKCgoK
CgpzdHJ1Y3QgcmFuZG9tX2RhdGEKICB7CiAgICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAq
cnB0cjsKICAgIGludDMyX3QgKnN0YXRlOwogICAgaW50IHJhbmRfdHlwZTsKICAgIGludCByYW5k
X2RlZzsKICAgIGludCByYW5kX3NlcDsKICAgIGludDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVy
biBpbnQgcmFuZG9tX3IgKHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwKICAg
ICAgICAgICAgICAgICAgICAgaW50MzJfdCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7
CgpleHRlcm4gaW50IHNyYW5kb21fciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRv
bV9kYXRhICpfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25l
ZCBpbnQgX19zZWVkLCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBz
ZXRzdGF0ZV9yIChjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoK
CgoKZXh0ZXJuIGludCByYW5kICh2b2lkKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHNyYW5kICh1
bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcmFuZF9yICh1bnNp
Z25lZCBpbnQgKl9fc2VlZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gZG91YmxlIGRyYW5kNDgg
KHZvaWQpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGVyYW5kNDggKHVuc2lnbmVkIHNob3J0IGlu
dCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbHJhbmQ0OCAodm9pZCkg
dGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBucmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194
c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IG1yYW5kNDggKHZvaWQpIHRocm93
ICgpOwpleHRlcm4gbG9uZyBpbnQganJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1Ymlb
M10pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2VlZHZhbCkg
dGhyb3cgKCk7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgKnNlZWQ0OCAodW5zaWduZWQgc2hv
cnQgaW50IF9fc2VlZDE2dlszXSkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIGxjb25nNDggKHVuc2ln
bmVkIHNob3J0IGludCBfX3BhcmFtWzddKSB0aHJvdyAoKTsKCgoKCgpzdHJ1Y3QgZHJhbmQ0OF9k
YXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IF9feFszXTsKICAgIHVuc2lnbmVkIHNob3J0
IGludCBfX29sZF94WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fYzsKICAgIHVuc2lnbmVk
IHNob3J0IGludCBfX2luaXQ7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fYTsKICB9OwoK
CmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9f
YnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hz
dWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0
cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBf
X3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBscmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4
X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGlu
dCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICh1
bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAg
ICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBt
cmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAg
ICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7
CmV4dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZm
ZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzcmFuZDQ4X3IgKGxvbmcgaW50IF9fc2VlZHZhbCwgc3Ry
dWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNl
ZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLAogICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7CgpleHRlcm4gaW50
IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sCiAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7CgoKCgoKCgoK
CmV4dGVybiB2b2lkICptYWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCAqY2FsbG9jIChzaXplX3QgX19ubWVtYiwg
c2l6ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykp
OwoKCgoKCgoKZXh0ZXJuIHZvaWQgKnJlYWxsb2MgKHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXpl
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJl
ZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgY2ZyZWUgKHZvaWQgKl9f
cHRyKSB0aHJvdyAoKTsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDEgMwojIDI1ICIv
dXNyL2luY2x1ZGUvYWxsb2NhLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGlu
dXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYWxs
b2NhLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJuIHZvaWQgKmFsbG9jYSAoc2l6ZV90
IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKfQojIDU3NyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAy
IDMKCgoKCmV4dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50IHBvc2l4X21lbWFsaWduICh2
b2lkICoqX19tZW1wdHIsIHNpemVfdCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6ZSkKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKZXh0ZXJuIHZvaWQgYWJv
cnQgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKZXh0
ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIGludCBvbl9leGl0ICh2b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICpfX2Fy
ZyksIHZvaWQgKl9fYXJnKQogICAgIHRocm93ICgpOwoKCgoKCgpleHRlcm4gdm9pZCBleGl0IChp
bnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoK
CgoKZXh0ZXJuIHZvaWQgX0V4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKCgpleHRlcm4gY2hhciAqZ2V0ZW52IChfX2NvbnN0IGNo
YXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52IChf
X2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdXRlbnYgKGNo
YXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHNldGVudiAoX19jb25zdCBj
aGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwgaW50IF9fcmVwbGFjZSkKICAgICB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IHVuc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhy
b3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQpIHRocm93ICgpOwojIDY2MSAi
L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9fdGVt
cGxhdGUpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBta3N0ZW1wIChjaGFyICpfX3RlbXBs
YXRlKSB0aHJvdyAoKTsKIyA2NzggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50
IG1rc3RlbXA2NCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjg4ICIvdXNyL2luY2x1
ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRo
cm93ICgpOwoKCgoKCmV4dGVybiBpbnQgc3lzdGVtIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkg
dGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gY2hhciAqY2Fub25pY2FsaXplX2ZpbGVfbmFtZSAoX19j
b25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwojIDcxMiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o
IiAzCmV4dGVybiBjaGFyICpyZWFscGF0aCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFt
ZSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fcmVzb2x2ZWQpIHRo
cm93ICgpOwoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQg
KiwgX19jb25zdCB2b2lkICopOwoKCnR5cGVkZWYgX19jb21wYXJfZm5fdCBjb21wYXJpc29uX2Zu
X3Q7CgoKCgoKCmV4dGVybiB2b2lkICpic2VhcmNoIChfX2NvbnN0IHZvaWQgKl9fa2V5LCBfX2Nv
bnN0IHZvaWQgKl9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25tZW1iLCBz
aXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIHZvaWQgcXNv
cnQgKHZvaWQgKl9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsCiAgICAgICAg
ICAgICAgICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIGludCBhYnMgKGlu
dCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxvbmcg
aW50IGxhYnMgKGxvbmcgaW50IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGxsYWJzIChsb25nIGxv
bmcgaW50IF9feCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK
CgoKCgpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50IF9fZGVub20pCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbGRpdl90IGxkaXYgKGxv
bmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbGxkaXZfdCBsbGRp
diAobG9uZyBsb25nIGludCBfX251bWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsb25nIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKIyA3NzYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hh
ciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9f
ZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBjaGFyICpmY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBp
bnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmlj
dCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmdjdnQgKGRvdWJsZSBfX3ZhbHVl
LCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpx
ZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAg
ICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJv
dyAoKTsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGln
aXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19y
ZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqcWdjdnQgKGxvbmcgZG91Ymxl
IF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmlj
dCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hh
ciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhy
b3cgKCk7CmV4dGVybiBpbnQgZmN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBp
bnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmlj
dCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBzaXpl
X3QgX19sZW4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBxZWN2dF9yIChsb25nIGRvdWJsZSBfX3Zh
bHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9f
ZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAq
X19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBxZmN2
dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAg
ICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAg
ICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJv
dyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgbWJsZW4gKF9fY29uc3QgY2hhciAqX19zLCBzaXplX3Qg
X19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1idG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBf
X3B3YywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNp
emVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFy
X3QgX193Y2hhcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgbWJzdG93Y3MgKHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19wd2NzLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3Qgd2Nz
dG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXplX3QgX19uKQogICAgIHRocm93ICgp
OwoKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25zdCBjaGFyICpfX3Jlc3BvbnNlKSB0
aHJvdyAoKTsKIyA4NTggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IGdldHN1
Ym9wdCAoY2hhciAqKl9fcmVzdHJpY3QgX19vcHRpb25wLAogICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqX19jb25zdCAqX19yZXN0cmljdCBfX3Rva2VucywKICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKipfX3Jlc3RyaWN0IF9fdmFsdWVwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBz
ZXRrZXkgKF9fY29uc3QgY2hhciAqX19rZXkpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBw
b3NpeF9vcGVucHQgKGludCBfX29mbGFnKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZ3Jh
bnRwdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVubG9ja3B0IChpbnQgX19m
ZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqcHRzbmFtZSAoaW50IF9fZmQpIHRocm93ICgp
OwoKCgoKCgpleHRlcm4gaW50IHB0c25hbWVfciAoaW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXpl
X3QgX19idWZsZW4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0cHQgKHZvaWQpIHRocm93ICgp
OwoKCgoKCgpleHRlcm4gaW50IGdldGxvYWRhdmcgKGRvdWJsZSBfX2xvYWRhdmdbXSwgaW50IF9f
bmVsZW0pIHRocm93ICgpOwoKCgoKCn0KIyA0NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29t
L3hwdF9hcmVuYS5oIiAyCiMgNzAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS94cHRfYXJl
bmEuaCIKZXh0ZXJuICJDIiB7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgWFBUQXJlbmEgWFBUQXJlbmE7
CgpYUFRBcmVuYSAqClhQVF9OZXdBcmVuYShQUlVpbnQzMiBibG9ja19zaXplLCBzaXplX3QgYWxp
Z25tZW50LCBjb25zdCBjaGFyKiBuYW1lKTsKCnZvaWQKWFBUX0Rlc3Ryb3lBcmVuYShYUFRBcmVu
YSAqYXJlbmEpOwoKdm9pZApYUFRfRHVtcFN0YXRzKFhQVEFyZW5hICphcmVuYSk7Cgp2b2lkICoK
WFBUX0FyZW5hTWFsbG9jKFhQVEFyZW5hICphcmVuYSwgc2l6ZV90IHNpemUpOwoKY2hhciAqClhQ
VF9BcmVuYVN0ckR1cChYUFRBcmVuYSAqYXJlbmEsIGNvbnN0IGNoYXIgKiBzKTsKCnZvaWQKWFBU
X05vdGlmeURvbmVMb2FkaW5nKFhQVEFyZW5hICphcmVuYSk7Cgp2b2lkClhQVF9BcmVuYUZyZWUo
WFBUQXJlbmEgKmFyZW5hLCB2b2lkKiBibG9jayk7CiMgMTMyICIuLi8uLi8uLi9kaXN0L2luY2x1
ZGUveHBjb20veHB0X2FyZW5hLmgiCn0KIyA0NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29t
L3hwdF9zdHJ1Y3QuaCIgMgoKZXh0ZXJuICJDIiB7CiMgNjEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS94cGNvbS94cHRfc3RydWN0LmgiCnR5cGVkZWYgc3RydWN0IFhQVEhlYWRlciBYUFRIZWFkZXI7
CnR5cGVkZWYgc3RydWN0IFhQVEludGVyZmFjZURpcmVjdG9yeUVudHJ5IFhQVEludGVyZmFjZURp
cmVjdG9yeUVudHJ5Owp0eXBlZGVmIHN0cnVjdCBYUFRJbnRlcmZhY2VEZXNjcmlwdG9yIFhQVElu
dGVyZmFjZURlc2NyaXB0b3I7CnR5cGVkZWYgc3RydWN0IFhQVENvbnN0RGVzY3JpcHRvciBYUFRD
b25zdERlc2NyaXB0b3I7CnR5cGVkZWYgc3RydWN0IFhQVE1ldGhvZERlc2NyaXB0b3IgWFBUTWV0
aG9kRGVzY3JpcHRvcjsKdHlwZWRlZiBzdHJ1Y3QgWFBUUGFyYW1EZXNjcmlwdG9yIFhQVFBhcmFt
RGVzY3JpcHRvcjsKdHlwZWRlZiBzdHJ1Y3QgWFBUVHlwZURlc2NyaXB0b3IgWFBUVHlwZURlc2Ny
aXB0b3I7CnR5cGVkZWYgc3RydWN0IFhQVFR5cGVEZXNjcmlwdG9yUHJlZml4IFhQVFR5cGVEZXNj
cmlwdG9yUHJlZml4Owp0eXBlZGVmIHN0cnVjdCBYUFRTdHJpbmcgWFBUU3RyaW5nOwp0eXBlZGVm
IHN0cnVjdCBYUFRBbm5vdGF0aW9uIFhQVEFubm90YXRpb247CiMgMTA0ICIuLi8uLi8uLi9kaXN0
L2luY2x1ZGUveHBjb20veHB0X3N0cnVjdC5oIgpzdHJ1Y3QgWFBUSGVhZGVyIHsKICAgIFBSVWlu
dDggbWFnaWNbMTZdOwogICAgUFJVaW50OCBtYWpvcl92ZXJzaW9uOwogICAgUFJVaW50OCBtaW5v
cl92ZXJzaW9uOwogICAgUFJVaW50MTYgbnVtX2ludGVyZmFjZXM7CiAgICBQUlVpbnQzMiBmaWxl
X2xlbmd0aDsKICAgIFhQVEludGVyZmFjZURpcmVjdG9yeUVudHJ5ICppbnRlcmZhY2VfZGlyZWN0
b3J5OwogICAgUFJVaW50MzIgZGF0YV9wb29sOwogICAgWFBUQW5ub3RhdGlvbiAqYW5ub3RhdGlv
bnM7Cn07CiMgMTczICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20veHB0X3N0cnVjdC5oIgp0
eXBlZGVmIHN0cnVjdCB7CiAgICBjb25zdCBjaGFyKiBzdHI7CiAgICBQUlVpbnQ4IG1ham9yOwog
ICAgUFJVaW50OCBtaW5vcjsKICAgIFBSVWludDE2IGNvZGU7Cn0gWFBUX1RZUEVMSUJfVkVSU0lP
TlNfU1RSVUNUOwojIDE4NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL3hwdF9zdHJ1Y3Qu
aCIKZXh0ZXJuIFBSVWludDE2ClhQVF9QYXJzZVZlcnNpb25TdHJpbmcoY29uc3QgY2hhciogc3Ry
LCBQUlVpbnQ4KiBtYWpvciwgUFJVaW50OCogbWlub3IpOwoKZXh0ZXJuIFhQVEhlYWRlciAqClhQ
VF9OZXdIZWFkZXIoWFBUQXJlbmEgKmFyZW5hLCBQUlVpbnQxNiBudW1faW50ZXJmYWNlcywKICAg
ICAgICAgICAgICBQUlVpbnQ4IG1ham9yX3ZlcnNpb24sIFBSVWludDggbWlub3JfdmVyc2lvbik7
CgpleHRlcm4gdm9pZApYUFRfRnJlZUhlYWRlcihYUFRBcmVuYSAqYXJlbmEsIFhQVEhlYWRlciog
YUhlYWRlcik7CgoKZXh0ZXJuIFBSVWludDMyClhQVF9TaXplT2ZIZWFkZXIoWFBUSGVhZGVyICpo
ZWFkZXIpOwoKCmV4dGVybiBQUlVpbnQzMgpYUFRfU2l6ZU9mSGVhZGVyQmxvY2soWFBUSGVhZGVy
ICpoZWFkZXIpOwoKCgoKCgoKc3RydWN0IFhQVEludGVyZmFjZURpcmVjdG9yeUVudHJ5IHsKICAg
IG5zSUQgaWlkOwogICAgY2hhciAqbmFtZTsKICAgIGNoYXIgKm5hbWVfc3BhY2U7CiAgICBYUFRJ
bnRlcmZhY2VEZXNjcmlwdG9yICppbnRlcmZhY2VfZGVzY3JpcHRvcjsKCgoKCgp9OwoKZXh0ZXJu
IFBSQm9vbApYUFRfRmlsbEludGVyZmFjZURpcmVjdG9yeUVudHJ5KFhQVEFyZW5hICphcmVuYSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUFRJbnRlcmZhY2VEaXJlY3RvcnlFbnRy
eSAqaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUQgKmlpZCwgY2hhciAq
bmFtZSwgY2hhciAqbmFtZV9zcGFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBY
UFRJbnRlcmZhY2VEZXNjcmlwdG9yICpkZXNjcmlwdG9yKTsKCmV4dGVybiB2b2lkClhQVF9EZXN0
cm95SW50ZXJmYWNlRGlyZWN0b3J5RW50cnkoWFBUQXJlbmEgKmFyZW5hLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFhQVEludGVyZmFjZURpcmVjdG9yeUVudHJ5KiBpZGUpOwoK
CgoKCnN0cnVjdCBYUFRJbnRlcmZhY2VEZXNjcmlwdG9yIHsKICAgIFBSVWludDE2IHBhcmVudF9p
bnRlcmZhY2U7CiAgICBQUlVpbnQxNiBudW1fbWV0aG9kczsKICAgIFhQVE1ldGhvZERlc2NyaXB0
b3IgKm1ldGhvZF9kZXNjcmlwdG9yczsKICAgIFBSVWludDE2IG51bV9jb25zdGFudHM7CiAgICBY
UFRDb25zdERlc2NyaXB0b3IgKmNvbnN0X2Rlc2NyaXB0b3JzOwogICAgUFJVaW50OCBmbGFnczsK
IyAyNjEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS94cHRfc3RydWN0LmgiCiAgICBYUFRU
eXBlRGVzY3JpcHRvciAqYWRkaXRpb25hbF90eXBlczsKICAgIFBSVWludDE2IG51bV9hZGRpdGlv
bmFsX3R5cGVzOwp9OwojIDI3NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL3hwdF9zdHJ1
Y3QuaCIKZXh0ZXJuIFBSQm9vbApYUFRfR2V0SW50ZXJmYWNlSW5kZXhCeU5hbWUoWFBUSW50ZXJm
YWNlRGlyZWN0b3J5RW50cnkgKmlkZV9ibG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBSVWludDE2IG51bV9pbnRlcmZhY2VzLCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJVaW50MTYgKmluZGV4cCk7CgpleHRlcm4gWFBUSW50ZXJmYWNlRGVzY3JpcHRv
ciAqClhQVF9OZXdJbnRlcmZhY2VEZXNjcmlwdG9yKFhQVEFyZW5hICphcmVuYSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJVaW50MTYgcGFyZW50X2ludGVyZmFjZSwgUFJVaW50MTYgbnVt
X21ldGhvZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDE2IG51bV9jb25zdGFu
dHMsIFBSVWludDggZmxhZ3MpOwoKZXh0ZXJuIHZvaWQKWFBUX0ZyZWVJbnRlcmZhY2VEZXNjcmlw
dG9yKFhQVEFyZW5hICphcmVuYSwgWFBUSW50ZXJmYWNlRGVzY3JpcHRvciogaWQpOwoKZXh0ZXJu
IFBSQm9vbApYUFRfSW50ZXJmYWNlRGVzY3JpcHRvckFkZFR5cGVzKFhQVEFyZW5hICphcmVuYSwg
WFBUSW50ZXJmYWNlRGVzY3JpcHRvciAqaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUFJVaW50MTYgbnVtKTsKCmV4dGVybiBQUkJvb2wKWFBUX0ludGVyZmFjZURlc2NyaXB0b3JB
ZGRNZXRob2RzKFhQVEFyZW5hICphcmVuYSwgWFBUSW50ZXJmYWNlRGVzY3JpcHRvciAqaWQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQxNiBudW0pOwoKZXh0ZXJuIFBS
Qm9vbApYUFRfSW50ZXJmYWNlRGVzY3JpcHRvckFkZENvbnN0cyhYUFRBcmVuYSAqYXJlbmEsIFhQ
VEludGVyZmFjZURlc2NyaXB0b3IgKmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUlVpbnQxNiBudW0pOwoKCgoKCnN0cnVjdCBYUFRTdHJpbmcgewogICAgUFJVaW50MTYgbGVu
Z3RoOwogICAgY2hhciAqYnl0ZXM7Cn07CgpleHRlcm4gWFBUU3RyaW5nICoKWFBUX05ld1N0cmlu
ZyhYUFRBcmVuYSAqYXJlbmEsIFBSVWludDE2IGxlbmd0aCwgY2hhciAqYnl0ZXMpOwoKZXh0ZXJu
IFhQVFN0cmluZyAqClhQVF9OZXdTdHJpbmdaKFhQVEFyZW5hICphcmVuYSwgY2hhciAqYnl0ZXMp
OwojIDMzMiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL3hwdF9zdHJ1Y3QuaCIKc3RydWN0
IFhQVFR5cGVEZXNjcmlwdG9yUHJlZml4IHsKICAgIFBSVWludDggZmxhZ3M7Cn07CiMgMzUyICIu
Li8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20veHB0X3N0cnVjdC5oIgplbnVtIFhQVFR5cGVEZXNj
cmlwdG9yVGFncyB7CiAgICBURF9JTlQ4ID0gMCwKICAgIFREX0lOVDE2ID0gMSwKICAgIFREX0lO
VDMyID0gMiwKICAgIFREX0lOVDY0ID0gMywKICAgIFREX1VJTlQ4ID0gNCwKICAgIFREX1VJTlQx
NiA9IDUsCiAgICBURF9VSU5UMzIgPSA2LAogICAgVERfVUlOVDY0ID0gNywKICAgIFREX0ZMT0FU
ID0gOCwKICAgIFREX0RPVUJMRSA9IDksCiAgICBURF9CT09MID0gMTAsCiAgICBURF9DSEFSID0g
MTEsCiAgICBURF9XQ0hBUiA9IDEyLAogICAgVERfVk9JRCA9IDEzLAogICAgVERfUE5TSUlEID0g
MTQsCiAgICBURF9ET01TVFJJTkcgPSAxNSwKICAgIFREX1BTVFJJTkcgPSAxNiwKICAgIFREX1BX
U1RSSU5HID0gMTcsCiAgICBURF9JTlRFUkZBQ0VfVFlQRSA9IDE4LAogICAgVERfSU5URVJGQUNF
X0lTX1RZUEUgPSAxOSwKICAgIFREX0FSUkFZID0gMjAsCiAgICBURF9QU1RSSU5HX1NJWkVfSVMg
PSAyMSwKICAgIFREX1BXU1RSSU5HX1NJWkVfSVMgPSAyMiwKICAgIFREX1VURjhTVFJJTkcgPSAy
MywKICAgIFREX0NTVFJJTkcgPSAyNCwKICAgIFREX0FTVFJJTkcgPSAyNQp9OwoKc3RydWN0IFhQ
VFR5cGVEZXNjcmlwdG9yIHsKICAgIFhQVFR5cGVEZXNjcmlwdG9yUHJlZml4IHByZWZpeDsKICAg
IFBSVWludDggYXJnbnVtOwogICAgUFJVaW50OCBhcmdudW0yOwogICAgdW5pb24gewogICAgICAg
IFBSVWludDE2IGlmYWNlOwogICAgICAgIFBSVWludDE2IGFkZGl0aW9uYWxfdHlwZTsKICAgIH0g
dHlwZTsKfTsKIyA0MTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS94cHRfc3RydWN0Lmgi
CnVuaW9uIFhQVENvbnN0VmFsdWUgewogICAgUFJJbnQ4IGk4OwogICAgUFJVaW50OCB1aTg7CiAg
ICBQUkludDE2IGkxNjsKICAgIFBSVWludDE2IHVpMTY7CiAgICBQUkludDMyIGkzMjsKICAgIFBS
VWludDMyIHVpMzI7CiAgICBQUkludDY0IGk2NDsKICAgIFBSVWludDY0IHVpNjQ7CiAgICBmbG9h
dCBmbHQ7CiAgICBkb3VibGUgZGJsOwogICAgUFJCb29sIGJ1bDsKICAgIGNoYXIgY2g7CiAgICBQ
UlVpbnQxNiB3Y2g7CiAgICBuc0lEICppaWQ7CiAgICBYUFRTdHJpbmcgKnN0cmluZzsKICAgIGNo
YXIgKnN0cjsKICAgIFBSVWludDE2ICp3c3RyOwp9OwoKc3RydWN0IFhQVENvbnN0RGVzY3JpcHRv
ciB7CiAgICBjaGFyICpuYW1lOwogICAgWFBUVHlwZURlc2NyaXB0b3IgdHlwZTsKICAgIHVuaW9u
IFhQVENvbnN0VmFsdWUgdmFsdWU7Cn07CgoKCgoKc3RydWN0IFhQVFBhcmFtRGVzY3JpcHRvciB7
CiAgICBQUlVpbnQ4IGZsYWdzOwogICAgWFBUVHlwZURlc2NyaXB0b3IgdHlwZTsKfTsKIyA0Njcg
Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS94cHRfc3RydWN0LmgiCmV4dGVybiBQUkJvb2wK
WFBUX0ZpbGxQYXJhbURlc2NyaXB0b3IoWFBUQXJlbmEgKmFyZW5hLAogICAgICAgICAgICAgICAg
ICAgICAgICBYUFRQYXJhbURlc2NyaXB0b3IgKnBkLCBQUlVpbnQ4IGZsYWdzLAogICAgICAgICAg
ICAgICAgICAgICAgICBYUFRUeXBlRGVzY3JpcHRvciAqdHlwZSk7CgoKCgoKc3RydWN0IFhQVE1l
dGhvZERlc2NyaXB0b3IgewogICAgY2hhciAqbmFtZTsKICAgIFhQVFBhcmFtRGVzY3JpcHRvciAq
cGFyYW1zOwogICAgWFBUUGFyYW1EZXNjcmlwdG9yICpyZXN1bHQ7CiAgICBQUlVpbnQ4IGZsYWdz
OwogICAgUFJVaW50OCBudW1fYXJnczsKfTsKIyA0OTggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94
cGNvbS94cHRfc3RydWN0LmgiCmV4dGVybiBQUkJvb2wKWFBUX0ZpbGxNZXRob2REZXNjcmlwdG9y
KFhQVEFyZW5hICphcmVuYSwKICAgICAgICAgICAgICAgICAgICAgICAgIFhQVE1ldGhvZERlc2Ny
aXB0b3IgKm1ldGgsIFBSVWludDggZmxhZ3MsIGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBQUlVpbnQ4IG51bV9hcmdzKTsKIyA1MjIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94
cGNvbS94cHRfc3RydWN0LmgiCnN0cnVjdCBYUFRBbm5vdGF0aW9uIHsKICAgIFhQVEFubm90YXRp
b24gKm5leHQ7CiAgICBQUlVpbnQ4IGZsYWdzOwoKICAgIFhQVFN0cmluZyAqY3JlYXRvcjsKICAg
IFhQVFN0cmluZyAqcHJpdmF0ZV9kYXRhOwp9OwoKCgoKCgpleHRlcm4gWFBUQW5ub3RhdGlvbiAq
ClhQVF9OZXdBbm5vdGF0aW9uKFhQVEFyZW5hICphcmVuYSwgUFJVaW50OCBmbGFncywgWFBUU3Ry
aW5nICpjcmVhdG9yLAogICAgICAgICAgICAgICAgICBYUFRTdHJpbmcgKnByaXZhdGVfZGF0YSk7
Cgp9CiMgNDUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS94cHRpbmZvLmgiIDIKIyA3NCAi
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL3hwdGluZm8uaCIKY2xhc3MgbnNJSW50ZXJmYWNl
SW5mb01hbmFnZXI7CmV4dGVybiAiQyIgewoKbnNJSW50ZXJmYWNlSW5mb01hbmFnZXIqClhQVElf
R2V0SW50ZXJmYWNlSW5mb01hbmFnZXIoKTsKCgp2b2lkClhQVElfRnJlZUludGVyZmFjZUluZm9N
YW5hZ2VyKCk7Cn0KCgoKCgoKCmNsYXNzIG5zWFBUVHlwZSA6IHB1YmxpYyBYUFRUeXBlRGVzY3Jp
cHRvclByZWZpeAp7CgpwdWJsaWM6CiAgICBuc1hQVFR5cGUoKQogICAgICAgIHt9CiAgICBuc1hQ
VFR5cGUoY29uc3QgWFBUVHlwZURlc2NyaXB0b3JQcmVmaXgmIHByZWZpeCkKICAgICAgICB7KihY
UFRUeXBlRGVzY3JpcHRvclByZWZpeCopdGhpcyA9IHByZWZpeDt9CgogICAgbnNYUFRUeXBlKGNv
bnN0IHVpbnQ4JiBwcmVmaXgpCiAgICAgICAgeyoodWludDgqKXRoaXMgPSBwcmVmaXg7fQoKICAg
IG5zWFBUVHlwZSYgb3BlcmF0b3I9KHVpbnQ4IHZhbCkKICAgICAgICB7ZmxhZ3MgPSB2YWw7IHJl
dHVybiAqdGhpczt9CgogICAgbnNYUFRUeXBlJiBvcGVyYXRvcj0oY29uc3QgbnNYUFRUeXBlJiBv
dGhlcikKICAgICAgICB7ZmxhZ3MgPSBvdGhlci5mbGFnczsgcmV0dXJuICp0aGlzO30KCiAgICBv
cGVyYXRvciB1aW50OCgpIGNvbnN0CiAgICAgICAge3JldHVybiBmbGFnczt9CgogICAgUFJCb29s
IElzUG9pbnRlcigpIGNvbnN0CiAgICAgICAge3JldHVybiAwICE9ICgoZmxhZ3MgJiAweDgwKSk7
fQoKICAgIFBSQm9vbCBJc1VuaXF1ZVBvaW50ZXIoKSBjb25zdAogICAgICAgIHtyZXR1cm4gMCAh
PSAoKGZsYWdzICYgMHg0MCkpO30KCiAgICBQUkJvb2wgSXNSZWZlcmVuY2UoKSBjb25zdAogICAg
ICAgIHtyZXR1cm4gMCAhPSAoKGZsYWdzICYgMHgyMCkpO30KCiAgICBQUkJvb2wgSXNBcml0aG1l
dGljKCkgY29uc3QKICAgICAgICB7cmV0dXJuIGZsYWdzIDw9IFRfV0NIQVI7fQoKICAgIFBSQm9v
bCBJc0ludGVyZmFjZVBvaW50ZXIoKSBjb25zdAogICAgICAgIHsgc3dpdGNoIChUYWdQYXJ0KCkp
IHsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAg
ICAgICAgY2FzZSBUX0lOVEVSRkFDRToKICAgICAgICAgICAgIGNhc2UgVF9JTlRFUkZBQ0VfSVM6
CiAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgIH0KICAgICAgICB9CgogICAgUFJC
b29sIElzQXJyYXkoKSBjb25zdAogICAgICAgIHtyZXR1cm4gKFBSQm9vbCkgVGFnUGFydCgpID09
IFRfQVJSQVk7fQoKCgoKICAgIFBSQm9vbCBJc0RlcGVuZGVudCgpIGNvbnN0CiAgICAgICAgeyBz
d2l0Y2ggKFRhZ1BhcnQoKSkgewogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
cmV0dXJuIDA7CiAgICAgICAgICAgICBjYXNlIFRfSU5URVJGQUNFX0lTOgogICAgICAgICAgICAg
Y2FzZSBURF9BUlJBWToKICAgICAgICAgICAgIGNhc2UgVF9QU1RSSU5HX1NJWkVfSVM6CiAgICAg
ICAgICAgICBjYXNlIFRfUFdTVFJJTkdfU0laRV9JUzoKICAgICAgICAgICAgICAgcmV0dXJuIDE7
CiAgICAgICAgICAgfQogICAgICAgIH0KCiAgICB1aW50OCBUYWdQYXJ0KCkgY29uc3QKICAgICAg
ICB7cmV0dXJuICh1aW50OCkgKGZsYWdzICYgKH4weGUwKSk7fQoKICAgIGVudW0KICAgIHsKICAg
ICAgICBUX0k4ID0gVERfSU5UOCAsCiAgICAgICAgVF9JMTYgPSBURF9JTlQxNiAsCiAgICAgICAg
VF9JMzIgPSBURF9JTlQzMiAsCiAgICAgICAgVF9JNjQgPSBURF9JTlQ2NCAsCiAgICAgICAgVF9V
OCA9IFREX1VJTlQ4ICwKICAgICAgICBUX1UxNiA9IFREX1VJTlQxNiAsCiAgICAgICAgVF9VMzIg
PSBURF9VSU5UMzIgLAogICAgICAgIFRfVTY0ID0gVERfVUlOVDY0ICwKICAgICAgICBUX0ZMT0FU
ID0gVERfRkxPQVQgLAogICAgICAgIFRfRE9VQkxFID0gVERfRE9VQkxFICwKICAgICAgICBUX0JP
T0wgPSBURF9CT09MICwKICAgICAgICBUX0NIQVIgPSBURF9DSEFSICwKICAgICAgICBUX1dDSEFS
ID0gVERfV0NIQVIgLAogICAgICAgIFRfVk9JRCA9IFREX1ZPSUQgLAogICAgICAgIFRfSUlEID0g
VERfUE5TSUlEICwKICAgICAgICBUX0RPTVNUUklORyA9IFREX0RPTVNUUklORyAsCiAgICAgICAg
VF9DSEFSX1NUUiA9IFREX1BTVFJJTkcgLAogICAgICAgIFRfV0NIQVJfU1RSID0gVERfUFdTVFJJ
TkcgLAogICAgICAgIFRfSU5URVJGQUNFID0gVERfSU5URVJGQUNFX1RZUEUgLAogICAgICAgIFRf
SU5URVJGQUNFX0lTID0gVERfSU5URVJGQUNFX0lTX1RZUEUsCiAgICAgICAgVF9BUlJBWSA9IFRE
X0FSUkFZICwKICAgICAgICBUX1BTVFJJTkdfU0laRV9JUyA9IFREX1BTVFJJTkdfU0laRV9JUyAs
CiAgICAgICAgVF9QV1NUUklOR19TSVpFX0lTID0gVERfUFdTVFJJTkdfU0laRV9JUyAsCiAgICAg
ICAgVF9VVEY4U1RSSU5HID0gVERfVVRGOFNUUklORyAsCiAgICAgICAgVF9DU1RSSU5HID0gVERf
Q1NUUklORyAsCiAgICAgICAgVF9BU1RSSU5HID0gVERfQVNUUklORwogICAgfTsKCn07CgpjbGFz
cyBuc1hQVFBhcmFtSW5mbyA6IHB1YmxpYyBYUFRQYXJhbURlc2NyaXB0b3IKewoKcHVibGljOgog
ICAgbnNYUFRQYXJhbUluZm8oY29uc3QgWFBUUGFyYW1EZXNjcmlwdG9yJiBkZXNjKQogICAgICAg
IHsqKFhQVFBhcmFtRGVzY3JpcHRvciopdGhpcyA9IGRlc2M7fQoKCiAgICBQUkJvb2wgSXNJbigp
IGNvbnN0IHtyZXR1cm4gMCAhPSAoKGZsYWdzICYgMHg4MCkpO30KICAgIFBSQm9vbCBJc091dCgp
IGNvbnN0IHtyZXR1cm4gMCAhPSAoKGZsYWdzICYgMHg0MCkpO30KICAgIFBSQm9vbCBJc1JldHZh
bCgpIGNvbnN0IHtyZXR1cm4gMCAhPSAoKGZsYWdzICYgMHgyMCkpO30KICAgIFBSQm9vbCBJc1No
YXJlZCgpIGNvbnN0IHtyZXR1cm4gMCAhPSAoKGZsYWdzICYgMHgxMCkpO30KICAgIFBSQm9vbCBJ
c0RpcHBlcigpIGNvbnN0IHtyZXR1cm4gMCAhPSAoKGZsYWdzICYgMHgwOCkpO30KICAgIGNvbnN0
IG5zWFBUVHlwZSBHZXRUeXBlKCkgY29uc3Qge3JldHVybiB0eXBlLnByZWZpeDt9CgoKCnByaXZh
dGU6CiAgICBuc1hQVFBhcmFtSW5mbygpOwoKfTsKCmNsYXNzIG5zWFBUTWV0aG9kSW5mbyA6IHB1
YmxpYyBYUFRNZXRob2REZXNjcmlwdG9yCnsKCnB1YmxpYzoKICAgIG5zWFBUTWV0aG9kSW5mbyhj
b25zdCBYUFRNZXRob2REZXNjcmlwdG9yJiBkZXNjKQogICAgICAgIHsqKFhQVE1ldGhvZERlc2Ny
aXB0b3IqKXRoaXMgPSBkZXNjO30KCiAgICBQUkJvb2wgSXNHZXR0ZXIoKSBjb25zdCB7cmV0dXJu
IDAgIT0gKChmbGFncyAmIDB4ODApICk7fQogICAgUFJCb29sIElzU2V0dGVyKCkgY29uc3Qge3Jl
dHVybiAwICE9ICgoZmxhZ3MgJiAweDQwKSApO30KICAgIFBSQm9vbCBJc05vdFhQQ09NKCkgY29u
c3Qge3JldHVybiAwICE9ICgoZmxhZ3MgJiAweDIwKSk7fQogICAgUFJCb29sIElzQ29uc3RydWN0
b3IoKSBjb25zdCB7cmV0dXJuIDAgIT0gKChmbGFncyAmIDB4MTApICk7fQogICAgUFJCb29sIElz
SGlkZGVuKCkgY29uc3Qge3JldHVybiAwICE9ICgoZmxhZ3MgJiAweDA4KSApO30KICAgIGNvbnN0
IGNoYXIqIEdldE5hbWUoKSBjb25zdCB7cmV0dXJuIG5hbWU7fQogICAgdWludDggR2V0UGFyYW1D
b3VudCgpIGNvbnN0IHtyZXR1cm4gbnVtX2FyZ3M7fQoKICAgIGNvbnN0IG5zWFBUUGFyYW1JbmZv
IEdldFBhcmFtKHVpbnQ4IGlkeCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgIDsKICAgICAg
ICAgICAgcmV0dXJuIHBhcmFtc1tpZHhdOwogICAgICAgIH0KICAgIGNvbnN0IG5zWFBUUGFyYW1J
bmZvIEdldFJlc3VsdCgpIGNvbnN0CiAgICAgICAge3JldHVybiAqcmVzdWx0O30KcHJpdmF0ZToK
ICAgIG5zWFBUTWV0aG9kSW5mbygpOwoKfTsKCgoKc3RydWN0IG5zWFBUQ01pbmlWYXJpYW50OwoK
Y2xhc3MgbnNYUFRDb25zdGFudCA6IHB1YmxpYyBYUFRDb25zdERlc2NyaXB0b3IKewoKcHVibGlj
OgogICAgbnNYUFRDb25zdGFudChjb25zdCBYUFRDb25zdERlc2NyaXB0b3ImIGRlc2MpCiAgICAg
ICAgeyooWFBUQ29uc3REZXNjcmlwdG9yKil0aGlzID0gZGVzYzt9CgogICAgY29uc3QgY2hhciog
R2V0TmFtZSgpIGNvbnN0CiAgICAgICAge3JldHVybiBuYW1lO30KCiAgICBjb25zdCBuc1hQVFR5
cGUgR2V0VHlwZSgpIGNvbnN0CiAgICAgICAge3JldHVybiB0eXBlLnByZWZpeDt9CgoKCgoKICAg
IGNvbnN0IG5zWFBUQ01pbmlWYXJpYW50KiBHZXRWYWx1ZSgpIGNvbnN0CiAgICAgICAge3JldHVy
biAobnNYUFRDTWluaVZhcmlhbnQqKSAmdmFsdWU7fQpwcml2YXRlOgogICAgbnNYUFRDb25zdGFu
dCgpOwoKfTsKIyA0NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29ubmVjdC9uc0lYUENvbm5l
Y3QuaCIgMgojIDExNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29ubmVjdC9uc0lYUENvbm5l
Y3QuaCIKY2xhc3MgbnNJWFBDU2NyaXB0YWJsZTsKCmNsYXNzIG5zSVhQQ29ubmVjdDsKCmNsYXNz
IG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmU7CgpjbGFzcyBuc0lJbnRlcmZhY2VJbmZvOwoKY2xh
c3MgbnNJWFBDU2VjdXJpdHlNYW5hZ2VyOwojIDEzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw
Y29ubmVjdC9uc0lYUENvbm5lY3QuaCIKY2xhc3MgbnNJWFBDb25uZWN0SlNPYmplY3RIb2xkZXIg
OiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl
dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ODkxNmEzMjAsIDB4ZDExOCwgMHgx
MWQzLCB7IDB4OGYsIDB4M2EsIDB4MDAsIDB4MTAsIDB4YTQsIDB4ZTcsIDB4M2QsIDB4OWEgfX07
IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRKU09iamVjdChKU09iamVjdCAq
ICphSlNPYmplY3QpID0gMDsKCn07CiMgMjAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb25u
ZWN0L25zSVhQQ29ubmVjdC5oIgpjbGFzcyBuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlIDogcHVi
bGljIG5zSVhQQ29ubmVjdEpTT2JqZWN0SG9sZGVyIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0
IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDIxNWRiZTAyLCAw
eDk0YTcsIDB4MTFkMiwgeyAweGJhLCAweDU4LCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweDVk
LCAweGQ3IH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmF0aXZlKG5z
SVN1cHBvcnRzICogKmFOYXRpdmUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SlNPYmpl
Y3RQcm90b3R5cGUoSlNPYmplY3QgKiAqYUpTT2JqZWN0UHJvdG90eXBlKSA9IDA7CgoKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldFhQQ29ubmVjdChuc0lYUENvbm5lY3QgKiAqYVhQQ29ubmVjdCkg
PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGaW5kSW50ZXJmYWNlV2l0aE1lbWJlcihqc3ZhbCBu
YW1lSUQsIG5zSUludGVyZmFjZUluZm8gKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz
dWx0IEZpbmRJbnRlcmZhY2VXaXRoTmFtZShqc3ZhbCBuYW1lSUQsIG5zSUludGVyZmFjZUluZm8g
KipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlYnVnRHVtcChQUkludDE2IGRl
cHRoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZnJlc2hQcm90b3R5cGUodm9pZCkgPSAw
OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTZWN1cml0eUluZm9BZGRyZXNzKHZvaWQqICogKl9y
ZXR2YWwpID0gMDsKCn07CiMgMzU1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb25uZWN0L25z
SVhQQ29ubmVjdC5oIgpjbGFzcyBuc0lYUENvbm5lY3RXcmFwcGVkSlMgOiBwdWJsaWMgbnNJWFBD
b25uZWN0SlNPYmplY3RIb2xkZXIgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl
dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YmVkNTIwMzAsIDB4YmNhNiwgMHgx
MWQyLCB7IDB4YmEsIDB4NzksIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4NWQsIDB4ZDcgfX07
IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbnRlcmZhY2VJbmZvKG5zSUlu
dGVyZmFjZUluZm8gKiAqYUludGVyZmFjZUluZm8pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0SW50ZXJmYWNlSUlEKG5zSUlEICogKmFJbnRlcmZhY2VJSUQpID0gMDsKCgogIHZpcnR1YWwg
bnNyZXN1bHQgRGVidWdEdW1wKFBSSW50MTYgZGVwdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1
bHQgQWdncmVnYXRlZFF1ZXJ5SW50ZXJmYWNlKGNvbnN0IG5zSUlEICYgdXVpZCwgdm9pZCAqICpy
ZXN1bHQpID0gMDsKCn07CiMgNDY2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb25uZWN0L25z
SVhQQ29ubmVjdC5oIgpjbGFzcyBuc0lYUENOYXRpdmVDYWxsQ29udGV4dCA6IHB1YmxpYyBuc0lT
dXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp
YyBjb25zdCBuc0lJRCBpaWQgPSB7MHgwZmE2OGE2MCwgMHg4Mjg5LCAweDExZDMsIHsgMHhiYiwg
MHgxYSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHg1ZCwgMHhkNyB9fTsgcmV0dXJuIGlpZDt9
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhbGxlZShuc0lTdXBwb3J0cyAqICphQ2FsbGVlKSA9
IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhbGxlZU1ldGhvZEluZGV4KFBSVWludDE2ICph
Q2FsbGVlTWV0aG9kSW5kZXgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2FsbGVlV3Jh
cHBlcihuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICogKmFDYWxsZWVXcmFwcGVyKSA9IDA7CgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldEpTQ29udGV4dChKU0NvbnRleHQgKiAqYUpTQ29udGV4dCkg
PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBcmdjKFBSVWludDMyICphQXJnYykgPSAwOwoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBcmd2UHRyKGpzdmFsICogKmFBcmd2UHRyKSA9IDA7CgoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJldFZhbFB0cihqc3ZhbCAqICphUmV0VmFsUHRyKSA9
IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RXhjZXB0aW9uV2FzVGhyb3duKFBSQm9v
bCAqYUV4Y2VwdGlvbldhc1Rocm93bikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RXhjZXB0
aW9uV2FzVGhyb3duKFBSQm9vbCBhRXhjZXB0aW9uV2FzVGhyb3duKSA9IDA7CgoKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0UmV0dXJuVmFsdWVXYXNTZXQoUFJCb29sICphUmV0dXJuVmFsdWVX
YXNTZXQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJldHVyblZhbHVlV2FzU2V0KFBSQm9v
bCBhUmV0dXJuVmFsdWVXYXNTZXQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2FsbGVl
SW50ZXJmYWNlKG5zSUludGVyZmFjZUluZm8gKiAqYUNhbGxlZUludGVyZmFjZSkgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRDYWxsZWVDbGFzc0luZm8obnNJQ2xhc3NJbmZvICogKmFDYWxs
ZWVDbGFzc0luZm8pID0gMDsKCn07CiMgNzUzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb25u
ZWN0L25zSVhQQ29ubmVjdC5oIgpjbGFzcyBuc0lYUENXcmFwcGVkSlNPYmplY3RHZXR0ZXIgOiBw
dWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJ
RCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4MjU0YmIyZTAsIDB4NjQzOSwgMHgxMWQ0
LCB7IDB4OGYsIDB4ZTAsIDB4MDAsIDB4MTAsIDB4YTQsIDB4ZTcsIDB4M2QsIDB4OWEgfX07IHJl
dHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROZXZlckNhbGxlZChuc0lTdXBwb3J0
cyAqICphTmV2ZXJDYWxsZWQpID0gMDsKCn07CiMgODIxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv
eHBjb25uZWN0L25zSVhQQ29ubmVjdC5oIgpjbGFzcyBuc0lYUENGdW5jdGlvblRoaXNUcmFuc2xh
dG9yIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlE
JiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDAzOWVmMjYwLCAweDJhMGQs
IDB4MTFkNSwgeyAweDkwLCAweGE3LCAweDAwLCAweDEwLCAweGE0LCAweGU3LCAweDNkLCAweDlh
IH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgVHJhbnNsYXRlVGhpcyhuc0lT
dXBwb3J0cyAqYUluaXRpYWxUaGlzLCBuc0lJbnRlcmZhY2VJbmZvICphSW50ZXJmYWNlSW5mbywg
UFJVaW50MTYgYU1ldGhvZEluZGV4LCBQUkJvb2wgKmFIaWRlRmlyc3RQYXJhbUZyb21KUywgbnNJ
SUQgKiAqYUlJRE9mUmVzdWx0LCBuc0lTdXBwb3J0cyAqKl9yZXR2YWwpID0gMDsKCn07CiMgODkz
ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb25uZWN0L25zSVhQQ29ubmVjdC5oIgpjbGFzcyBu
c0lYUENvbm5lY3QgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29u
c3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZWZhZTM3YjAs
IDB4OTQ2ZCwgMHgxMWQyLCB7IDB4YmEsIDB4NTgsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4
NWQsIDB4ZDcgfX07IHJldHVybiBpaWQ7fQoKICBzdGF0aWMgY29uc3QgbnNJRCYgR2V0Q0lEKCkg
e3N0YXRpYyBjb25zdCBuc0lEIGNpZCA9IHsgMHhjYjY1OTNlMCwgMHhmOWIyLCAweDExZDIsIHsg
MHhiZCwgMHhkNiwgMHgwLCAweDAsIDB4NjQsIDB4NjUsIDB4NzMsIDB4NzQgfSB9OyByZXR1cm4g
Y2lkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdENsYXNzZXMoSlNDb250ZXh0ICogYUpTQ29u
dGV4dCwgSlNPYmplY3QgKiBhR2xvYmFsSlNPYmopID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
SW5pdENsYXNzZXNXaXRoTmV3V3JhcHBlZEdsb2JhbChKU0NvbnRleHQgKiBhSlNDb250ZXh0LCBu
c0lTdXBwb3J0cyAqYUNPTU9iaiwgY29uc3QgbnNJSUQgJiBhSUlELCBQUkJvb2wgYUNhbGxKU19J
bml0U3RhbmRhcmRDbGFzc2VzLCBuc0lYUENvbm5lY3RKU09iamVjdEhvbGRlciAqKl9yZXR2YWwp
ID0gMDsKIyA5MzkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QvbnNJWFBDb25uZWN0
LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBXcmFwTmF0aXZlKEpTQ29udGV4dCAqIGFKU0NvbnRleHQs
IEpTT2JqZWN0ICogYVNjb3BlLCBuc0lTdXBwb3J0cyAqYUNPTU9iaiwgY29uc3QgbnNJSUQgJiBh
SUlELCBuc0lYUENvbm5lY3RKU09iamVjdEhvbGRlciAqKl9yZXR2YWwpID0gMDsKIyA5NjUgIi4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QvbnNJWFBDb25uZWN0LmgiCiAgdmlydHVhbCBu
c3Jlc3VsdCBXcmFwSlMoSlNDb250ZXh0ICogYUpTQ29udGV4dCwgSlNPYmplY3QgKiBhSlNPYmos
IGNvbnN0IG5zSUlEICYgYUlJRCwgdm9pZCAqICpyZXN1bHQpID0gMDsKCgoKCgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldFdyYXBwZWROYXRpdmVPZkpTT2JqZWN0KEpTQ29udGV4dCAqIGFKU0NvbnRl
eHQsIEpTT2JqZWN0ICogYUpTT2JqLCBuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICoqX3JldHZh
bCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTZWN1cml0eU1hbmFnZXJGb3JKU0NvbnRl
eHQoSlNDb250ZXh0ICogYUpTQ29udGV4dCwgbnNJWFBDU2VjdXJpdHlNYW5hZ2VyICphTWFuYWdl
ciwgUFJVaW50MTYgZmxhZ3MpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2VjdXJpdHlN
YW5hZ2VyRm9ySlNDb250ZXh0KEpTQ29udGV4dCAqIGFKU0NvbnRleHQsIG5zSVhQQ1NlY3VyaXR5
TWFuYWdlciAqKmFNYW5hZ2VyLCBQUlVpbnQxNiAqZmxhZ3MpID0gMDsKCgoKCgoKICB2aXJ0dWFs
IG5zcmVzdWx0IFNldERlZmF1bHRTZWN1cml0eU1hbmFnZXIobnNJWFBDU2VjdXJpdHlNYW5hZ2Vy
ICphTWFuYWdlciwgUFJVaW50MTYgZmxhZ3MpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
RGVmYXVsdFNlY3VyaXR5TWFuYWdlcihuc0lYUENTZWN1cml0eU1hbmFnZXIgKiphTWFuYWdlciwg
UFJVaW50MTYgKmZsYWdzKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZVN0YWNrRnJh
bWVMb2NhdGlvbihQUlVpbnQzMiBhTGFuZ3VhZ2UsIGNvbnN0IGNoYXIgKmFGaWxlbmFtZSwgY29u
c3QgY2hhciAqYUZ1bmN0aW9uTmFtZSwgUFJJbnQzMiBhTGluZU51bWJlciwgbnNJU3RhY2tGcmFt
ZSAqYUNhbGxlciwgbnNJU3RhY2tGcmFtZSAqKl9yZXR2YWwpID0gMDsKIyAxMDAxICIuLi8uLi8u
Li9kaXN0L2luY2x1ZGUveHBjb25uZWN0L25zSVhQQ29ubmVjdC5oIgogIHZpcnR1YWwgbnNyZXN1
bHQgU3luY0pTQ29udGV4dHModm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDdXJy
ZW50SlNTdGFjayhuc0lTdGFja0ZyYW1lICogKmFDdXJyZW50SlNTdGFjaykgPSAwOwoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRDdXJyZW50TmF0aXZlQ2FsbENvbnRleHQobnNJWFBDTmF0aXZlQ2Fs
bENvbnRleHQgKiAqYUN1cnJlbnROYXRpdmVDYWxsQ29udGV4dCkgPSAwOwoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRQZW5kaW5nRXhjZXB0aW9uKG5zSUV4Y2VwdGlvbiAqICphUGVuZGluZ0V4Y2Vw
dGlvbikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGVuZGluZ0V4Y2VwdGlvbihuc0lFeGNl
cHRpb24gKiBhUGVuZGluZ0V4Y2VwdGlvbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZWJ1
Z0R1bXAoUFJJbnQxNiBkZXB0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEZWJ1Z0R1bXBP
YmplY3QobnNJU3VwcG9ydHMgKmFDT01PYmosIFBSSW50MTYgZGVwdGgpID0gMDsKCgogIHZpcnR1
YWwgbnNyZXN1bHQgRGVidWdEdW1wSlNTdGFjayhQUkJvb2wgc2hvd0FyZ3MsIFBSQm9vbCBzaG93
TG9jYWxzLCBQUkJvb2wgc2hvd1RoaXNQcm9wcykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBE
ZWJ1Z0R1bXBFdmFsSW5KU1N0YWNrRnJhbWUoUFJVaW50MzIgYUZyYW1lTnVtYmVyLCBjb25zdCBj
aGFyICphU291cmNlVGV4dCkgPSAwOwojIDEwMzMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNv
bm5lY3QvbnNJWFBDb25uZWN0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTYWZlSlNDb250ZXh0
Rm9yQ3VycmVudFRocmVhZChKU0NvbnRleHQgKiBjeCkgPSAwOwojIDEwNTAgIi4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS94cGNvbm5lY3QvbnNJWFBDb25uZWN0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBX
cmFwSlNBZ2dyZWdhdGVkVG9OYXRpdmUobnNJU3VwcG9ydHMgKmFPdXRlciwgSlNDb250ZXh0ICog
YUpTQ29udGV4dCwgSlNPYmplY3QgKiBhSlNPYmosIGNvbnN0IG5zSUlEICYgYUlJRCwgdm9pZCAq
ICpyZXN1bHQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFdyYXBwZWROYXRpdmVP
Zk5hdGl2ZU9iamVjdChKU0NvbnRleHQgKiBhSlNDb250ZXh0LCBKU09iamVjdCAqIGFTY29wZSwg
bnNJU3VwcG9ydHMgKmFDT01PYmosIGNvbnN0IG5zSUlEICYgYUlJRCwgbnNJWFBDb25uZWN0V3Jh
cHBlZE5hdGl2ZSAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnVuY3Rp
b25UaGlzVHJhbnNsYXRvcihjb25zdCBuc0lJRCAmIGFJSUQsIG5zSVhQQ0Z1bmN0aW9uVGhpc1Ry
YW5zbGF0b3IgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZ1bmN0aW9u
VGhpc1RyYW5zbGF0b3IoY29uc3QgbnNJSUQgJiBhSUlELCBuc0lYUENGdW5jdGlvblRoaXNUcmFu
c2xhdG9yICphVHJhbnNsYXRvciwgbnNJWFBDRnVuY3Rpb25UaGlzVHJhbnNsYXRvciAqKl9yZXR2
YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVwYXJlbnRXcmFwcGVkTmF0aXZlSWZGb3Vu
ZChKU0NvbnRleHQgKiBhSlNDb250ZXh0LCBKU09iamVjdCAqIGFTY29wZSwgSlNPYmplY3QgKiBh
TmV3UGFyZW50LCBuc0lTdXBwb3J0cyAqYUNPTU9iaiwgbnNJWFBDb25uZWN0SlNPYmplY3RIb2xk
ZXIgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENsZWFyQWxsV3JhcHBlZE5h
dGl2ZVNlY3VyaXR5UG9saWNpZXModm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRX
cmFwcGVkTmF0aXZlUHJvdG90eXBlKEpTQ29udGV4dCAqIGFKU0NvbnRleHQsIEpTT2JqZWN0ICog
YVNjb3BlLCBuc0lDbGFzc0luZm8gKmFDbGFzc0luZm8sIG5zSVhQQ29ubmVjdEpTT2JqZWN0SG9s
ZGVyICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb2xsZWN0R2FyYmFn
ZU9uTWFpblRocmVhZE9ubHkoUFJCb29sICphQ29sbGVjdEdhcmJhZ2VPbk1haW5UaHJlYWRPbmx5
KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDb2xsZWN0R2FyYmFnZU9uTWFpblRocmVhZE9u
bHkoUFJCb29sIGFDb2xsZWN0R2FyYmFnZU9uTWFpblRocmVhZE9ubHkpID0gMDsKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0RGVmZXJSZWxlYXNlc1VudGlsQWZ0ZXJHYXJiYWdlQ29sbGVjdGlvbihQ
UkJvb2wgKmFEZWZlclJlbGVhc2VzVW50aWxBZnRlckdhcmJhZ2VDb2xsZWN0aW9uKSA9IDA7CiAg
dmlydHVhbCBuc3Jlc3VsdCBTZXREZWZlclJlbGVhc2VzVW50aWxBZnRlckdhcmJhZ2VDb2xsZWN0
aW9uKFBSQm9vbCBhRGVmZXJSZWxlYXNlc1VudGlsQWZ0ZXJHYXJiYWdlQ29sbGVjdGlvbikgPSAw
OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWxlYXNlSlNDb250ZXh0KEpTQ29udGV4dCAqIGFKU0Nv
bnRleHQsIFBSQm9vbCBub0dDKSA9IDA7Cgp9OwojIDE1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv
eHBjb25uZWN0L25zSVhQQ1NjcmlwdGFibGUuaCIgMgojIDMxICIuLi8uLi8uLi9kaXN0L2luY2x1
ZGUveHBjb25uZWN0L25zSVhQQ1NjcmlwdGFibGUuaCIKY2xhc3MgbnNJWFBDU2NyaXB0YWJsZSA6
IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0
SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhmYTJjM2I4MCwgMHgwZTlkLCAweDEx
ZDUsIHsgMHg5MCwgMHg5MiwgMHgwMCwgMHgxMCwgMHhhNCwgMHhlNywgMHgzZCwgMHg5YSB9fTsg
cmV0dXJuIGlpZDt9CgogIGVudW0geyBXQU5UX1BSRUNSRUFURSA9IDFVIH07CgogIGVudW0geyBX
QU5UX0NSRUFURSA9IDJVIH07CgogIGVudW0geyBXQU5UX1BPU1RDUkVBVEUgPSA0VSB9OwoKICBl
bnVtIHsgV0FOVF9BRERQUk9QRVJUWSA9IDhVIH07CgogIGVudW0geyBXQU5UX0RFTFBST1BFUlRZ
ID0gMTZVIH07CgogIGVudW0geyBXQU5UX0dFVFBST1BFUlRZID0gMzJVIH07CgogIGVudW0geyBX
QU5UX1NFVFBST1BFUlRZID0gNjRVIH07CgogIGVudW0geyBXQU5UX0VOVU1FUkFURSA9IDEyOFUg
fTsKCiAgZW51bSB7IFdBTlRfTkVXRU5VTUVSQVRFID0gMjU2VSB9OwoKICBlbnVtIHsgV0FOVF9O
RVdSRVNPTFZFID0gNTEyVSB9OwoKICBlbnVtIHsgV0FOVF9DT05WRVJUID0gMTAyNFUgfTsKCiAg
ZW51bSB7IFdBTlRfRklOQUxJWkUgPSAyMDQ4VSB9OwoKICBlbnVtIHsgV0FOVF9DSEVDS0FDQ0VT
UyA9IDQwOTZVIH07CgogIGVudW0geyBXQU5UX0NBTEwgPSA4MTkyVSB9OwoKICBlbnVtIHsgV0FO
VF9DT05TVFJVQ1QgPSAxNjM4NFUgfTsKCiAgZW51bSB7IFdBTlRfSEFTSU5TVEFOQ0UgPSAzMjc2
OFUgfTsKCiAgZW51bSB7IFdBTlRfTUFSSyA9IDY1NTM2VSB9OwoKICBlbnVtIHsgVVNFX0pTU1RV
Ql9GT1JfQUREUFJPUEVSVFkgPSAxMzEwNzJVIH07CgogIGVudW0geyBVU0VfSlNTVFVCX0ZPUl9E
RUxQUk9QRVJUWSA9IDI2MjE0NFUgfTsKCiAgZW51bSB7IFVTRV9KU1NUVUJfRk9SX1NFVFBST1BF
UlRZID0gNTI0Mjg4VSB9OwoKICBlbnVtIHsgRE9OVF9FTlVNX1NUQVRJQ19QUk9QUyA9IDEwNDg1
NzZVIH07CgogIGVudW0geyBET05UX0VOVU1fUVVFUllfSU5URVJGQUNFID0gMjA5NzE1MlUgfTsK
CiAgZW51bSB7IERPTlRfQVNLX0lOU1RBTkNFX0ZPUl9TQ1JJUFRBQkxFID0gNDE5NDMwNFUgfTsK
CiAgZW51bSB7IENMQVNTSU5GT19JTlRFUkZBQ0VTX09OTFkgPSA4Mzg4NjA4VSB9OwoKICBlbnVt
IHsgQUxMT1dfUFJPUF9NT0RTX0RVUklOR19SRVNPTFZFID0gMTY3NzcyMTZVIH07CgogIGVudW0g
eyBBTExPV19QUk9QX01PRFNfVE9fUFJPVE9UWVBFID0gMzM1NTQ0MzJVIH07CgogIGVudW0geyBE
T05UX1NIQVJFX1BST1RPVFlQRSA9IDY3MTA4ODY0VSB9OwoKICBlbnVtIHsgRE9OVF9SRUZMRUNU
X0lOVEVSRkFDRV9OQU1FUyA9IDEzNDIxNzcyOFUgfTsKCiAgZW51bSB7IFJFU0VSVkVEID0gMjE0
NzQ4MzY0OFUgfTsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xhc3NOYW1lKGNoYXIgKiAqYUNs
YXNzTmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTY3JpcHRhYmxlRmxhZ3MoUFJV
aW50MzIgKmFTY3JpcHRhYmxlRmxhZ3MpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUHJlQ3Jl
YXRlKG5zSVN1cHBvcnRzICpuYXRpdmVPYmosIEpTQ29udGV4dCAqIGN4LCBKU09iamVjdCAqIGds
b2JhbE9iaiwgSlNPYmplY3QgKiAqcGFyZW50T2JqKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IENyZWF0ZShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKiBj
eCwgSlNPYmplY3QgKiBvYmopID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUG9zdENyZWF0ZShu
c0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKiBjeCwgSlNPYmpl
Y3QgKiBvYmopID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQWRkUHJvcGVydHkobnNJWFBDb25u
ZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICogY3gsIEpTT2JqZWN0ICogb2Jq
LCBqc3ZhbCBpZCwganN2YWwgKiB2cCwgUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IERlbFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIs
IEpTQ29udGV4dCAqIGN4LCBKU09iamVjdCAqIG9iaiwganN2YWwgaWQsIGpzdmFsICogdnAsIFBS
Qm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcm9wZXJ0eShuc0lY
UENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKiBjeCwgSlNPYmplY3Qg
KiBvYmosIGpzdmFsIGlkLCBqc3ZhbCAqIHZwLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZp
cnR1YWwgbnNyZXN1bHQgU2V0UHJvcGVydHkobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3Jh
cHBlciwgSlNDb250ZXh0ICogY3gsIEpTT2JqZWN0ICogb2JqLCBqc3ZhbCBpZCwganN2YWwgKiB2
cCwgUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEVudW1lcmF0ZShu
c0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKiBjeCwgSlNPYmpl
Y3QgKiBvYmosIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBOZXdF
bnVtZXJhdGUobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICog
Y3gsIEpTT2JqZWN0ICogb2JqLCBQUlVpbnQzMiBlbnVtX29wLCBqc3ZhbCAqIHN0YXRlcCwganNp
ZCAqaWRwLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTmV3UmVz
b2x2ZShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKiBjeCwg
SlNPYmplY3QgKiBvYmosIGpzdmFsIGlkLCBQUlVpbnQzMiBmbGFncywgSlNPYmplY3QgKiAqb2Jq
cCwgUFJCb29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnZlcnQobnNJ
WFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICogY3gsIEpTT2JqZWN0
ICogb2JqLCBQUlVpbnQzMiB0eXBlLCBqc3ZhbCAqIHZwLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgRmluYWxpemUobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAq
d3JhcHBlciwgSlNDb250ZXh0ICogY3gsIEpTT2JqZWN0ICogb2JqKSA9IDA7CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IENoZWNrQWNjZXNzKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIs
IEpTQ29udGV4dCAqIGN4LCBKU09iamVjdCAqIG9iaiwganN2YWwgaWQsIFBSVWludDMyIG1vZGUs
IGpzdmFsICogdnAsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBD
YWxsKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqIGN4LCBK
U09iamVjdCAqIG9iaiwgUFJVaW50MzIgYXJnYywganN2YWwgKiBhcmd2LCBqc3ZhbCAqIHZwLCBQ
UkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ29uc3RydWN0KG5zSVhQ
Q29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqIGN4LCBKU09iamVjdCAq
IG9iaiwgUFJVaW50MzIgYXJnYywganN2YWwgKiBhcmd2LCBqc3ZhbCAqIHZwLCBQUkJvb2wgKl9y
ZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFzSW5zdGFuY2UobnNJWFBDb25uZWN0
V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICogY3gsIEpTT2JqZWN0ICogb2JqLCBq
c3ZhbCB2YWwsIFBSQm9vbCAqYnAsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBNYXJrKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4
dCAqIGN4LCBKU09iamVjdCAqIG9iaiwgdm9pZCAqIGFyZywgUFJVaW50MzIgKl9yZXR2YWwpID0g
MDsKCn07CiMgMjc0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNsYXNzSW5mby5o
IiAyCiMgMjkzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNsYXNzSW5mby5oIgp0
eXBlZGVmIG5zSUNsYXNzSW5mbyogKCpuc0RPTUNsYXNzSW5mb0V4dGVybmFsQ29uc3RydWN0b3JG
bmMpCiAgKGNvbnN0IGNoYXIqIGFOYW1lKTsKIyAzMTIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9k
b20vbnNJRE9NQ2xhc3NJbmZvLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25z
SVNlcnZpY2VNYW5hZ2VyLmgiIDEKIyA0MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25z
SVNlcnZpY2VNYW5hZ2VyLmgiCmNsYXNzIG5zSVNlcnZpY2VNYW5hZ2VyIDogcHVibGljIG5zSVN1
cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGlj
IGNvbnN0IG5zSUlEIGlpZCA9IHsweDhiYjM1ZWQ5LCAweGUzMzIsIDB4NDYyZCwgeyAweDkxLCAw
eDU1LCAweDRhLCAweDAwLCAweDJhLCAweGI1LCAweGM5LCAweDU4IH19OyByZXR1cm4gaWlkO30K
IyA1NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVNlcnZpY2VNYW5hZ2VyLmgiCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRTZXJ2aWNlKGNvbnN0IG5zQ0lEICYgYUNsYXNzLCBjb25zdCBu
c0lJRCAmIGFJSUQsIHZvaWQgKiAqcmVzdWx0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dFNlcnZpY2VCeUNvbnRyYWN0SUQoY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsIGNvbnN0IG5zSUlE
ICYgYUlJRCwgdm9pZCAqICpyZXN1bHQpID0gMDsKIyA3NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L3hwY29tL25zSVNlcnZpY2VNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1NlcnZpY2VJ
bnN0YW50aWF0ZWQoY29uc3QgbnNDSUQgJiBhQ2xhc3MsIGNvbnN0IG5zSUlEICYgYUlJRCwgUFJC
b29sICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzU2VydmljZUluc3RhbnRp
YXRlZEJ5Q29udHJhY3RJRChjb25zdCBjaGFyICphQ29udHJhY3RJRCwgY29uc3QgbnNJSUQgJiBh
SUlELCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCn07CiMgMTY2ICIuLi8uLi8uLi9kaXN0L2luY2x1
ZGUveHBjb20vbnNJU2VydmljZU1hbmFnZXIuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv
eHBjb20vbnNYUENPTS5oIiAxCiMgNDIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc1hQ
Q09NLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zWFBDT01DSUQuaCIgMQoj
IDQzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNYUENPTS5oIiAyCgpjbGFzcyBuc0FT
dHJpbmc7CmNsYXNzIG5zQUNTdHJpbmc7CgpjbGFzcyBuc0lDb21wb25lbnRNYW5hZ2VyOwpjbGFz
cyBuc0lDb21wb25lbnRSZWdpc3RyYXI7CmNsYXNzIG5zSVNlcnZpY2VNYW5hZ2VyOwpjbGFzcyBu
c0lGaWxlOwpjbGFzcyBuc0lMb2NhbEZpbGU7CmNsYXNzIG5zSURpcmVjdG9yeVNlcnZpY2VQcm92
aWRlcjsKY2xhc3MgbnNJTWVtb3J5OwojIDkwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20v
bnNYUENPTS5oIgpleHRlcm4gIkMiIG5zcmVzdWx0Ck5TX0luaXRYUENPTTIobnNJU2VydmljZU1h
bmFnZXIqICpyZXN1bHQsCiAgICAgICAgICAgICAgbnNJRmlsZSogYmluRGlyZWN0b3J5LAogICAg
ICAgICAgICAgIG5zSURpcmVjdG9yeVNlcnZpY2VQcm92aWRlciogYXBwRmlsZUxvY2F0aW9uUHJv
dmlkZXIpOwojIDEwNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zWFBDT00uaCIKZXh0
ZXJuICJDIiBuc3Jlc3VsdApOU19TaHV0ZG93blhQQ09NKG5zSVNlcnZpY2VNYW5hZ2VyKiBzZXJ2
TWdyKTsKIyAxMjEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc1hQQ09NLmgiCmV4dGVy
biAiQyIgbnNyZXN1bHQKTlNfR2V0U2VydmljZU1hbmFnZXIobnNJU2VydmljZU1hbmFnZXIqICpy
ZXN1bHQpOwojIDEzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zWFBDT00uaCIKZXh0
ZXJuICJDIiBuc3Jlc3VsdApOU19HZXRDb21wb25lbnRNYW5hZ2VyKG5zSUNvbXBvbmVudE1hbmFn
ZXIqICpyZXN1bHQpOwojIDE0NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zWFBDT00u
aCIKZXh0ZXJuICJDIiBuc3Jlc3VsdApOU19HZXRDb21wb25lbnRSZWdpc3RyYXIobnNJQ29tcG9u
ZW50UmVnaXN0cmFyKiAqcmVzdWx0KTsKIyAxNjAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNv
bS9uc1hQQ09NLmgiCmV4dGVybiAiQyIgbnNyZXN1bHQKTlNfR2V0TWVtb3J5TWFuYWdlcihuc0lN
ZW1vcnkqICpyZXN1bHQpOwojIDE4NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zWFBD
T00uaCIKZXh0ZXJuICJDIiBuc3Jlc3VsdApOU19OZXdMb2NhbEZpbGUoY29uc3QgbnNBU3RyaW5n
ICZwYXRoLAogICAgICAgICAgICAgICAgUFJCb29sIGZvbGxvd0xpbmtzLAogICAgICAgICAgICAg
ICAgbnNJTG9jYWxGaWxlKiAqcmVzdWx0KTsKCmV4dGVybiAiQyIgbnNyZXN1bHQKTlNfTmV3TmF0
aXZlTG9jYWxGaWxlKGNvbnN0IG5zQUNTdHJpbmcgJnBhdGgsCiAgICAgICAgICAgICAgICAgICAg
ICBQUkJvb2wgZm9sbG93TGlua3MsCiAgICAgICAgICAgICAgICAgICAgICBuc0lMb2NhbEZpbGUq
ICpyZXN1bHQpOwojIDE2NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVNlcnZpY2VN
YW5hZ2VyLmgiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU2VydmljZU1h
bmFnZXJVdGlscy5oIiAxCiMgNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTZXJ2
aWNlTWFuYWdlclV0aWxzLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVNl
cnZpY2VNYW5hZ2VyLmgiIDEKIyA0MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVNl
cnZpY2VNYW5hZ2VyVXRpbHMuaCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9u
c0lTZXJ2aWNlTWFuYWdlck9ic29sZXRlLmgiIDEKIyA1OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L3hwY29tL25zSVNlcnZpY2VNYW5hZ2VyT2Jzb2xldGUuaCIKY2xhc3MgbnNJU2VydmljZU1hbmFn
ZXI7CmNsYXNzIG5zSVNodXRkb3duTGlzdGVuZXI7CmNsYXNzIG5zSURpcmVjdG9yeVNlcnZpY2VQ
cm92aWRlcjsKCmNsYXNzIG5zU2VydmljZU1hbmFnZXJPYnNvbGV0ZTsKIyA3NyAiLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL3hwY29tL25zSVNlcnZpY2VNYW5hZ2VyT2Jzb2xldGUuaCIKY2xhc3MgbnNJ
U2VydmljZU1hbmFnZXJPYnNvbGV0ZSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoKCiAg
ICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0g
eyAweGNmMGRmM2IwLCAweDM0MDEsIDB4MTFkMiwgezB4ODEsIDB4NjMsIDB4MDAsIDB4NjAsIDB4
MDgsIDB4MTEsIDB4OWQsIDB4N2F9IH07IHJldHVybiBpaWQ7fTsKCgoKCgoKCiAgICB2aXJ0dWFs
IG5zcmVzdWx0CiAgICBSZWdpc3RlclNlcnZpY2UoY29uc3QgbnNDSUQmIGFDbGFzcywgbnNJU3Vw
cG9ydHMqIGFTZXJ2aWNlKSA9IDA7CiMgMTAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20v
bnNJU2VydmljZU1hbmFnZXJPYnNvbGV0ZS5oIgogICAgdmlydHVhbCBuc3Jlc3VsdAogICAgVW5y
ZWdpc3RlclNlcnZpY2UoY29uc3QgbnNDSUQmIGFDbGFzcykgPSAwOwoKICAgIHZpcnR1YWwgbnNy
ZXN1bHQKICAgIEdldFNlcnZpY2UoY29uc3QgbnNDSUQmIGFDbGFzcywgY29uc3QgbnNJSUQmIGFJ
SUQsCiAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzKiAqcmVzdWx0LAogICAgICAgICAgICAgICBu
c0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3RlbmVyID0gMCkgPSAwOwoKCiAgICB2aXJ0
dWFsIG5zcmVzdWx0CiAgICBSZWxlYXNlU2VydmljZShjb25zdCBuc0NJRCYgYUNsYXNzLCBuc0lT
dXBwb3J0cyogc2VydmljZSwKICAgICAgICAgICAgICAgICAgIG5zSVNodXRkb3duTGlzdGVuZXIq
IHNodXRkb3duTGlzdGVuZXIgPSAwKSA9IDA7CgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdAogICAg
UmVnaXN0ZXJTZXJ2aWNlKGNvbnN0IGNoYXIqIGFDb250cmFjdElELCBuc0lTdXBwb3J0cyogYVNl
cnZpY2UpID0gMDsKCiAgICB2aXJ0dWFsIG5zcmVzdWx0CiAgICBVbnJlZ2lzdGVyU2VydmljZShj
b25zdCBjaGFyKiBhQ29udHJhY3RJRCkgPSAwOwoKICAgIHZpcnR1YWwgbnNyZXN1bHQKICAgIEdl
dFNlcnZpY2UoY29uc3QgY2hhciogYUNvbnRyYWN0SUQsIGNvbnN0IG5zSUlEJiBhSUlELAogICAg
ICAgICAgICAgICBuc0lTdXBwb3J0cyogKnJlc3VsdCwKICAgICAgICAgICAgICAgbnNJU2h1dGRv
d25MaXN0ZW5lciogc2h1dGRvd25MaXN0ZW5lciA9IDApID0gMDsKCgogICAgdmlydHVhbCBuc3Jl
c3VsdAogICAgUmVsZWFzZVNlcnZpY2UoY29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5zSVN1cHBv
cnRzKiBzZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgbnNJU2h1dGRvd25MaXN0ZW5lciogc2h1
dGRvd25MaXN0ZW5lciA9IDApID0gMDsKCn07CgoKY2xhc3MgbnNTZXJ2aWNlTWFuYWdlciB7CnB1
YmxpYzoKCiAgICBzdGF0aWMgbnNyZXN1bHQKICAgIFJlZ2lzdGVyU2VydmljZShjb25zdCBuc0NJ
RCYgYUNsYXNzLCBuc0lTdXBwb3J0cyogYVNlcnZpY2UpOwoKICAgIHN0YXRpYyBuc3Jlc3VsdAog
ICAgVW5yZWdpc3RlclNlcnZpY2UoY29uc3QgbnNDSUQmIGFDbGFzcyk7CgogICAgc3RhdGljIG5z
cmVzdWx0CiAgICBHZXRTZXJ2aWNlKGNvbnN0IG5zQ0lEJiBhQ2xhc3MsIGNvbnN0IG5zSUlEJiBh
SUlELAogICAgICAgICAgICAgICBuc0lTdXBwb3J0cyogKnJlc3VsdCwKICAgICAgICAgICAgICAg
bnNJU2h1dGRvd25MaXN0ZW5lciogc2h1dGRvd25MaXN0ZW5lciA9IDApOwoKCiAgICBzdGF0aWMg
bnNyZXN1bHQKICAgIFJlbGVhc2VTZXJ2aWNlKGNvbnN0IG5zQ0lEJiBhQ2xhc3MsIG5zSVN1cHBv
cnRzKiBzZXJ2aWNlLAogICAgICAgICAgICAgICAgICAgbnNJU2h1dGRvd25MaXN0ZW5lciogc2h1
dGRvd25MaXN0ZW5lciA9IDApOwoKCgoKICAgIHN0YXRpYyBuc3Jlc3VsdAogICAgUmVnaXN0ZXJT
ZXJ2aWNlKGNvbnN0IGNoYXIqIGFDb250cmFjdElELCBuc0lTdXBwb3J0cyogYVNlcnZpY2UpOwoK
ICAgIHN0YXRpYyBuc3Jlc3VsdAogICAgVW5yZWdpc3RlclNlcnZpY2UoY29uc3QgY2hhciogYUNv
bnRyYWN0SUQpOwoKICAgIHN0YXRpYyBuc3Jlc3VsdAogICAgR2V0U2VydmljZShjb25zdCBjaGFy
KiBhQ29udHJhY3RJRCwgY29uc3QgbnNJSUQmIGFJSUQsCiAgICAgICAgICAgICAgIG5zSVN1cHBv
cnRzKiAqcmVzdWx0LAogICAgICAgICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93
bkxpc3RlbmVyID0gMCk7CgoKICAgIHN0YXRpYyBuc3Jlc3VsdAogICAgUmVsZWFzZVNlcnZpY2Uo
Y29uc3QgY2hhciogYUNvbnRyYWN0SUQsIG5zSVN1cHBvcnRzKiBzZXJ2aWNlLAogICAgICAgICAg
ICAgICAgICAgbnNJU2h1dGRvd25MaXN0ZW5lciogc2h1dGRvd25MaXN0ZW5lciA9IDApOwoKCgoK
CiAgICBzdGF0aWMgbnNyZXN1bHQgR2V0R2xvYmFsU2VydmljZU1hbmFnZXIobnNJU2VydmljZU1h
bmFnZXIqICpyZXN1bHQpOwogICAgc3RhdGljIG5zcmVzdWx0IFNodXRkb3duR2xvYmFsU2Vydmlj
ZU1hbmFnZXIobnNJU2VydmljZU1hbmFnZXIqICpyZXN1bHQpOwp9OwojIDIwMyAiLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL3hwY29tL25zSVNlcnZpY2VNYW5hZ2VyT2Jzb2xldGUuaCIKY2xhc3MgbnNJ
U2h1dGRvd25MaXN0ZW5lcjsKCgp0ZW1wbGF0ZSA8Y2xhc3MgRGVzdGluYXRpb25UeXBlPgppbmxp
bmUKbnNyZXN1bHQKQ2FsbEdldFNlcnZpY2UoIGNvbnN0IG5zQ0lEICZhQ2xhc3MsCiAgICAgICAg
ICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBzaHV0ZG93bkxpc3RlbmVyLAogICAgICAgICAg
ICAgICAgRGVzdGluYXRpb25UeXBlKiogYURlc3RpbmF0aW9uKQp7CiAgICA7CgogICAgcmV0dXJu
IG5zU2VydmljZU1hbmFnZXI6OkdldFNlcnZpY2UoYUNsYXNzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNDT01UeXBlSW5mbzxEZXN0aW5hdGlvblR5cGU+OjpHZXRJ
SUQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8IG5zSVN1cHBvcnRzKiogPihhRGVzdGluYXRpb24pLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2h1dGRvd25MaXN0ZW5lcik7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBEZXN0aW5hdGlvblR5cGU+CmlubGluZQpuc3Jlc3VsdApDYWxsR2V0U2VydmljZSggY29uc3Qg
Y2hhciAqYUNvbnRyYWN0SUQsCiAgICAgICAgICAgICAgICBuc0lTaHV0ZG93bkxpc3RlbmVyKiBz
aHV0ZG93bkxpc3RlbmVyLAogICAgICAgICAgICAgICAgRGVzdGluYXRpb25UeXBlKiogYURlc3Rp
bmF0aW9uKQp7CiAgICA7CiAgICA7CgogICAgcmV0dXJuIG5zU2VydmljZU1hbmFnZXI6OkdldFNl
cnZpY2UoYUNvbnRyYWN0SUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0NPTVR5cGVJbmZvPERlc3RpbmF0aW9uVHlwZT46OkdldElJRCgpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDwgbnNJU3VwcG9ydHMq
KiA+KGFEZXN0aW5hdGlvbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaHV0ZG93bkxpc3RlbmVyKTsKfQojIDQzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20v
bnNJU2VydmljZU1hbmFnZXJVdGlscy5oIiAyCgoKCgpjbGFzcyBuc0dldFNlcnZpY2VCeUNJRCA6
IHB1YmxpYyBuc0NPTVB0cl9oZWxwZXIKewogcHVibGljOgogICAgbnNHZXRTZXJ2aWNlQnlDSUQo
IGNvbnN0IG5zQ0lEJiBhQ0lELCBuc0lTdXBwb3J0cyogYVNlcnZpY2VNYW5hZ2VyLCBuc3Jlc3Vs
dCogYUVycm9yUHRyICkKICAgICAgICA6IG1DSUQoYUNJRCksCiAgICAgICAgbVNlcnZpY2VNYW5h
Z2VyKCBkb19RdWVyeUludGVyZmFjZShhU2VydmljZU1hbmFnZXIpICksCiAgICAgICAgbUVycm9y
UHRyKGFFcnJvclB0cikKICAgICAgICB7CgogICAgICAgIH0KCiAgICB2aXJ0dWFsIG5zcmVzdWx0
IG9wZXJhdG9yKCkoIGNvbnN0IG5zSUlEJiwgdm9pZCoqICkgY29uc3Q7CiAgICB2aXJ0dWFsIH5u
c0dldFNlcnZpY2VCeUNJRCgpIHt9OwoKIHByaXZhdGU6CiAgICBjb25zdCBuc0NJRCYgbUNJRDsK
ICAgIG5zQ09NUHRyPG5zSVNlcnZpY2VNYW5hZ2VyPiBtU2VydmljZU1hbmFnZXI7CiAgICBuc3Jl
c3VsdCogbUVycm9yUHRyOwp9OwoKaW5saW5lCmNvbnN0IG5zR2V0U2VydmljZUJ5Q0lECmRvX0dl
dFNlcnZpY2UoIGNvbnN0IG5zQ0lEJiBhQ0lELCBuc3Jlc3VsdCogZXJyb3IgPSAwICkKewogICAg
cmV0dXJuIG5zR2V0U2VydmljZUJ5Q0lEKGFDSUQsIDAsIGVycm9yKTsKfQoKaW5saW5lCmNvbnN0
IG5zR2V0U2VydmljZUJ5Q0lECmRvX0dldFNlcnZpY2UoIGNvbnN0IG5zQ0lEJiBhQ0lELCBuc0lT
dXBwb3J0cyogYVNlcnZpY2VNYW5hZ2VyLCBuc3Jlc3VsdCogZXJyb3IgPSAwICkKewogICAgcmV0
dXJuIG5zR2V0U2VydmljZUJ5Q0lEKGFDSUQsIGFTZXJ2aWNlTWFuYWdlciwgZXJyb3IpOwp9Cgpj
bGFzcyBuc0dldFNlcnZpY2VCeUNvbnRyYWN0SUQgOiBwdWJsaWMgbnNDT01QdHJfaGVscGVyCnsK
IHB1YmxpYzoKICAgIG5zR2V0U2VydmljZUJ5Q29udHJhY3RJRCggY29uc3QgY2hhciogYUNvbnRy
YWN0SUQsIG5zSVN1cHBvcnRzKiBhU2VydmljZU1hbmFnZXIsIG5zcmVzdWx0KiBhRXJyb3JQdHIg
KQogICAgICAgIDogbUNvbnRyYWN0SUQoYUNvbnRyYWN0SUQpLAogICAgICAgIG1TZXJ2aWNlTWFu
YWdlciggZG9fUXVlcnlJbnRlcmZhY2UoYVNlcnZpY2VNYW5hZ2VyKSApLAogICAgICAgIG1FcnJv
clB0cihhRXJyb3JQdHIpCiAgICAgICAgewoKICAgICAgICB9CgogICAgdmlydHVhbCBuc3Jlc3Vs
dCBvcGVyYXRvcigpKCBjb25zdCBuc0lJRCYsIHZvaWQqKiApIGNvbnN0OwoKICAgIHZpcnR1YWwg
fm5zR2V0U2VydmljZUJ5Q29udHJhY3RJRCgpIHt9OwoKIHByaXZhdGU6CiAgICBjb25zdCBjaGFy
KiBtQ29udHJhY3RJRDsKICAgIG5zQ09NUHRyPG5zSVNlcnZpY2VNYW5hZ2VyPiBtU2VydmljZU1h
bmFnZXI7CiAgICBuc3Jlc3VsdCogbUVycm9yUHRyOwp9OwoKaW5saW5lCmNvbnN0IG5zR2V0U2Vy
dmljZUJ5Q29udHJhY3RJRApkb19HZXRTZXJ2aWNlKCBjb25zdCBjaGFyKiBhQ29udHJhY3RJRCwg
bnNyZXN1bHQqIGVycm9yID0gMCApCnsKICAgIHJldHVybiBuc0dldFNlcnZpY2VCeUNvbnRyYWN0
SUQoYUNvbnRyYWN0SUQsIDAsIGVycm9yKTsKfQoKaW5saW5lCmNvbnN0IG5zR2V0U2VydmljZUJ5
Q29udHJhY3RJRApkb19HZXRTZXJ2aWNlKCBjb25zdCBjaGFyKiBhQ29udHJhY3RJRCwgbnNJU3Vw
cG9ydHMqIGFTZXJ2aWNlTWFuYWdlciwgbnNyZXN1bHQqIGVycm9yID0gMCApCnsKICAgIHJldHVy
biBuc0dldFNlcnZpY2VCeUNvbnRyYWN0SUQoYUNvbnRyYWN0SUQsIGFTZXJ2aWNlTWFuYWdlciwg
ZXJyb3IpOwp9CgpjbGFzcyBuc0dldFNlcnZpY2VGcm9tQ2F0ZWdvcnkgOiBwdWJsaWMgbnNDT01Q
dHJfaGVscGVyCnsKIHB1YmxpYzoKICAgIG5zR2V0U2VydmljZUZyb21DYXRlZ29yeShjb25zdCBj
aGFyKiBhQ2F0ZWdvcnksIGNvbnN0IGNoYXIqIGFFbnRyeSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0lTdXBwb3J0cyogYVNlcnZpY2VNYW5hZ2VyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zcmVzdWx0KiBhRXJyb3JQdHIpCiAgICAgICAgOiBtQ2F0ZWdvcnkoYUNhdGVn
b3J5KSwKICAgICAgICBtRW50cnkoYUVudHJ5KSwKICAgICAgICBtU2VydmljZU1hbmFnZXIoIGRv
X1F1ZXJ5SW50ZXJmYWNlKGFTZXJ2aWNlTWFuYWdlcikgKSwKICAgICAgICBtRXJyb3JQdHIoYUVy
cm9yUHRyKQogICAgICAgIHsKCiAgICAgICAgfQoKICAgIHZpcnR1YWwgbnNyZXN1bHQgb3BlcmF0
b3IoKSggY29uc3QgbnNJSUQmLCB2b2lkKiogKSBjb25zdDsKICAgIHZpcnR1YWwgfm5zR2V0U2Vy
dmljZUZyb21DYXRlZ29yeSgpIHt9OwogcHJvdGVjdGVkOgogICAgY29uc3QgY2hhciogbUNhdGVn
b3J5OwogICAgY29uc3QgY2hhciogbUVudHJ5OwogICAgbnNDT01QdHI8bnNJU2VydmljZU1hbmFn
ZXI+IG1TZXJ2aWNlTWFuYWdlcjsKICAgIG5zcmVzdWx0KiBtRXJyb3JQdHI7Cn07CgppbmxpbmUK
Y29uc3QgbnNHZXRTZXJ2aWNlRnJvbUNhdGVnb3J5CmRvX0dldFNlcnZpY2VGcm9tQ2F0ZWdvcnko
IGNvbnN0IGNoYXIqIGNhdGVnb3J5LCBjb25zdCBjaGFyKiBlbnRyeSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNyZXN1bHQqIGVycm9yID0gMCkKewogICAgcmV0dXJuIG5zR2V0U2Vydmlj
ZUZyb21DYXRlZ29yeShjYXRlZ29yeSwgZW50cnksIDAsIGVycm9yKTsKfQoKCnRlbXBsYXRlIDxj
bGFzcyBEZXN0aW5hdGlvblR5cGU+CmlubGluZQpuc3Jlc3VsdApDYWxsR2V0U2VydmljZSggY29u
c3QgbnNDSUQgJmFDbGFzcywKICAgICAgICAgICAgICAgIERlc3RpbmF0aW9uVHlwZSoqIGFEZXN0
aW5hdGlvbikKewogICAgOwoKICAgIG5zQ09NUHRyPG5zSVNlcnZpY2VNYW5hZ2VyPiBtZ3I7CiAg
ICBuc3Jlc3VsdCBydiA9IE5TX0dldFNlcnZpY2VNYW5hZ2VyKGdldHRlcl9BZGRSZWZzKG1ncikp
OwoKICAgIGlmICgoKHJ2KSAmIDB4ODAwMDAwMDApKQogICAgICAgIHJldHVybiBydjsKCiAgICBy
ZXR1cm4gbWdyLT5HZXRTZXJ2aWNlKGFDbGFzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNDT01UeXBlSW5mbzxEZXN0aW5hdGlvblR5cGU+OjpHZXRJSUQoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDwgdm9pZCoqID4oYURlc3RpbmF0aW9uKSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBEZXN0aW5hdGlvblR5cGU+CmlubGluZQpuc3Jlc3VsdApDYWxsR2V0
U2VydmljZSggY29uc3QgY2hhciAqYUNvbnRyYWN0SUQsCiAgICAgICAgICAgICAgICBEZXN0aW5h
dGlvblR5cGUqKiBhRGVzdGluYXRpb24pCnsKICAgIDsKICAgIDsKCiAgICBuc0NPTVB0cjxuc0lT
ZXJ2aWNlTWFuYWdlcj4gbWdyOwogICAgbnNyZXN1bHQgcnYgPSBOU19HZXRTZXJ2aWNlTWFuYWdl
cihnZXR0ZXJfQWRkUmVmcyhtZ3IpKTsKCiAgICBpZiAoKChydikgJiAweDgwMDAwMDAwKSkKICAg
ICAgICByZXR1cm4gcnY7CgogICAgcmV0dXJuIG1nci0+R2V0U2VydmljZUJ5Q29udHJhY3RJRChh
Q29udHJhY3RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNDT01U
eXBlSW5mbzxEZXN0aW5hdGlvblR5cGU+OjpHZXRJSUQoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDwgdm9pZCoqID4oYURlc3RpbmF0aW9u
KSk7Cn0KIyAxNjggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTZXJ2aWNlTWFuYWdl
ci5oIiAyCiMgMzEzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNsYXNzSW5mby5o
IiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01TY3JpcHRPYmplY3RGYWN0
b3J5LmgiIDEKIyA0MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01TY3JpcHRPYmpl
Y3RGYWN0b3J5LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01DbGFzc0lu
Zm8uaCIgMQojIDQ0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVNjcmlwdE9iamVj
dEZhY3RvcnkuaCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcu
aCIgMQojIDU0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nLmgiCiMgMSAi
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZzIuaCIgMQojIDU4ICIuLi8uLi8u
Li9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nMi5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9zdHJpbmcvbnNBRmxhdFN0cmluZy5oIiAxCiMgMzAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9zdHJpbmcvbnNBRmxhdFN0cmluZy5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJp
bmcvbnNBU2luZ2xlRnJhZ21lbnRTdHJpbmcuaCIgMQojIDQzICIuLi8uLi8uLi9kaXN0L2luY2x1
ZGUvc3RyaW5nL25zQVNpbmdsZUZyYWdtZW50U3RyaW5nLmgiCmNsYXNzIG5zQVNpbmdsZUZyYWdt
ZW50U3RyaW5nCiAgICA6IHB1YmxpYyBuc0FTdHJpbmcKICB7CgoKCgoKICAgIHB1YmxpYzoKICAg
ICAgdHlwZWRlZiBjb25zdCBjaGFyX3R5cGUqIGNvbnN0X2NoYXJfaXRlcmF0b3I7CiAgICAgIHR5
cGVkZWYgY2hhcl90eXBlKiBjaGFyX2l0ZXJhdG9yOwoKCiAgICAgIHVzaW5nIGFic3RyYWN0X3N0
cmluZ190eXBlOjpCZWdpblJlYWRpbmc7CiAgICAgIHVzaW5nIGFic3RyYWN0X3N0cmluZ190eXBl
OjpFbmRSZWFkaW5nOwogICAgICB1c2luZyBhYnN0cmFjdF9zdHJpbmdfdHlwZTo6QmVnaW5Xcml0
aW5nOwogICAgICB1c2luZyBhYnN0cmFjdF9zdHJpbmdfdHlwZTo6RW5kV3JpdGluZzsKCgoKCgoK
CiAgICAgIGlubGluZQogICAgICBjb25zdF9jaGFyX2l0ZXJhdG9yJgogICAgICBCZWdpblJlYWRp
bmcoIGNvbnN0X2NoYXJfaXRlcmF0b3ImIGFSZXN1bHQgKSBjb25zdAogICAgICAgIHsKICAgICAg
ICAgIGNvbnN0X2ZyYWdtZW50X3R5cGUgZjsKICAgICAgICAgIEdldFJlYWRhYmxlRnJhZ21lbnQo
Ziwga0ZpcnN0RnJhZ21lbnQsIDApOwogICAgICAgICAgcmV0dXJuIGFSZXN1bHQgPSBmLm1TdGFy
dDsKICAgICAgICB9CgogICAgICBpbmxpbmUKICAgICAgY29uc3RfY2hhcl9pdGVyYXRvciYKICAg
ICAgRW5kUmVhZGluZyggY29uc3RfY2hhcl9pdGVyYXRvciYgYVJlc3VsdCApIGNvbnN0CiAgICAg
ICAgewogICAgICAgICAgY29uc3RfZnJhZ21lbnRfdHlwZSBmOwogICAgICAgICAgR2V0UmVhZGFi
bGVGcmFnbWVudChmLCBrTGFzdEZyYWdtZW50LCAwKTsKICAgICAgICAgIHJldHVybiBhUmVzdWx0
ID0gZi5tRW5kOwogICAgICAgIH0KCiAgICAgIGlubGluZQogICAgICBjaGFyX2l0ZXJhdG9yJgog
ICAgICBCZWdpbldyaXRpbmcoIGNoYXJfaXRlcmF0b3ImIGFSZXN1bHQgKQogICAgICAgIHsKICAg
ICAgICAgIGZyYWdtZW50X3R5cGUgZjsKICAgICAgICAgIEdldFdyaXRhYmxlRnJhZ21lbnQoZiwg
a0ZpcnN0RnJhZ21lbnQsIDApOwogICAgICAgICAgcmV0dXJuIGFSZXN1bHQgPSBjb25zdF9jYXN0
PCBjaGFyX2l0ZXJhdG9yID4oZi5tU3RhcnQpOwogICAgICAgIH0KCiAgICAgIGlubGluZQogICAg
ICBjaGFyX2l0ZXJhdG9yJgogICAgICBFbmRXcml0aW5nKCBjaGFyX2l0ZXJhdG9yJiBhUmVzdWx0
ICkKICAgICAgICB7CiAgICAgICAgICBmcmFnbWVudF90eXBlIGY7CiAgICAgICAgICBHZXRXcml0
YWJsZUZyYWdtZW50KGYsIGtMYXN0RnJhZ21lbnQsIDApOwogICAgICAgICAgcmV0dXJuIGFSZXN1
bHQgPSBjb25zdF9jYXN0PCBjaGFyX2l0ZXJhdG9yID4oZi5tRW5kKTsKICAgICAgICB9CgogICAg
ICBjaGFyX3R5cGUgb3BlcmF0b3JbXSggUFJVaW50MzIgaSApIGNvbnN0IHsgY29uc3RfY2hhcl9p
dGVyYXRvciB0ZW1wOyByZXR1cm4gQmVnaW5SZWFkaW5nKHRlbXApWyBpIF07IH0KICAgICAgY2hh
cl90eXBlIENoYXJBdCggUFJVaW50MzIgKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgUFJVaW50MzIg
TGVuZ3RoKCkgY29uc3Q7CgoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5
cGUqIEdldFJlYWRhYmxlRnJhZ21lbnQoIGNvbnN0X2ZyYWdtZW50X3R5cGUmLCBuc0ZyYWdtZW50
UmVxdWVzdCwgUFJVaW50MzIgKSBjb25zdDsKICAgICAgdmlydHVhbCBjaGFyX3R5cGUqIEdldFdy
aXRhYmxlRnJhZ21lbnQoIGZyYWdtZW50X3R5cGUmLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50
MzIgKTsKICB9OwoKY2xhc3MgbnNBU2luZ2xlRnJhZ21lbnRDU3RyaW5nCiAgICA6IHB1YmxpYyBu
c0FDU3RyaW5nCiAgewoKCgoKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgY29uc3QgY2hhcl90
eXBlKiBjb25zdF9jaGFyX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIGNoYXJfdHlwZSogY2hhcl9p
dGVyYXRvcjsKCgogICAgICB1c2luZyBhYnN0cmFjdF9zdHJpbmdfdHlwZTo6QmVnaW5SZWFkaW5n
OwogICAgICB1c2luZyBhYnN0cmFjdF9zdHJpbmdfdHlwZTo6RW5kUmVhZGluZzsKICAgICAgdXNp
bmcgYWJzdHJhY3Rfc3RyaW5nX3R5cGU6OkJlZ2luV3JpdGluZzsKICAgICAgdXNpbmcgYWJzdHJh
Y3Rfc3RyaW5nX3R5cGU6OkVuZFdyaXRpbmc7CgoKCgoKCgogICAgICBpbmxpbmUKICAgICAgY29u
c3RfY2hhcl9pdGVyYXRvciYKICAgICAgQmVnaW5SZWFkaW5nKCBjb25zdF9jaGFyX2l0ZXJhdG9y
JiBhUmVzdWx0ICkgY29uc3QKICAgICAgICB7CiAgICAgICAgICBjb25zdF9mcmFnbWVudF90eXBl
IGY7CiAgICAgICAgICBHZXRSZWFkYWJsZUZyYWdtZW50KGYsIGtGaXJzdEZyYWdtZW50LCAwKTsK
ICAgICAgICAgIHJldHVybiBhUmVzdWx0ID0gZi5tU3RhcnQ7CiAgICAgICAgfQoKICAgICAgaW5s
aW5lCiAgICAgIGNvbnN0X2NoYXJfaXRlcmF0b3ImCiAgICAgIEVuZFJlYWRpbmcoIGNvbnN0X2No
YXJfaXRlcmF0b3ImIGFSZXN1bHQgKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIGNvbnN0X2Zy
YWdtZW50X3R5cGUgZjsKICAgICAgICAgIEdldFJlYWRhYmxlRnJhZ21lbnQoZiwga0xhc3RGcmFn
bWVudCwgMCk7CiAgICAgICAgICByZXR1cm4gYVJlc3VsdCA9IGYubUVuZDsKICAgICAgICB9Cgog
ICAgICBpbmxpbmUKICAgICAgY2hhcl9pdGVyYXRvciYKICAgICAgQmVnaW5Xcml0aW5nKCBjaGFy
X2l0ZXJhdG9yJiBhUmVzdWx0ICkKICAgICAgICB7CiAgICAgICAgICBmcmFnbWVudF90eXBlIGY7
CiAgICAgICAgICBHZXRXcml0YWJsZUZyYWdtZW50KGYsIGtGaXJzdEZyYWdtZW50LCAwKTsKICAg
ICAgICAgIHJldHVybiBhUmVzdWx0ID0gY29uc3RfY2FzdDwgY2hhcl9pdGVyYXRvciA+KGYubVN0
YXJ0KTsKICAgICAgICB9CgogICAgICBpbmxpbmUKICAgICAgY2hhcl9pdGVyYXRvciYKICAgICAg
RW5kV3JpdGluZyggY2hhcl9pdGVyYXRvciYgYVJlc3VsdCApCiAgICAgICAgewogICAgICAgICAg
ZnJhZ21lbnRfdHlwZSBmOwogICAgICAgICAgR2V0V3JpdGFibGVGcmFnbWVudChmLCBrTGFzdEZy
YWdtZW50LCAwKTsKICAgICAgICAgIHJldHVybiBhUmVzdWx0ID0gY29uc3RfY2FzdDwgY2hhcl9p
dGVyYXRvciA+KGYubUVuZCk7CiAgICAgICAgfQoKICAgICAgY2hhcl90eXBlIG9wZXJhdG9yW10o
IFBSVWludDMyIGkgKSBjb25zdCB7IGNvbnN0X2NoYXJfaXRlcmF0b3IgdGVtcDsgcmV0dXJuIEJl
Z2luUmVhZGluZyh0ZW1wKVsgaSBdOyB9CiAgICAgIGNoYXJfdHlwZSBDaGFyQXQoIFBSVWludDMy
ICkgY29uc3Q7CgogICAgICB2aXJ0dWFsIFBSVWludDMyIExlbmd0aCgpIGNvbnN0OwoKCiAgICBw
dWJsaWM6CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKiBHZXRSZWFkYWJsZUZyYWdtZW50
KCBjb25zdF9mcmFnbWVudF90eXBlJiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgY29u
c3Q7CiAgICAgIHZpcnR1YWwgY2hhcl90eXBlKiBHZXRXcml0YWJsZUZyYWdtZW50KCBmcmFnbWVu
dF90eXBlJiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICk7CiAgfTsKCmlubGluZQpuc0FT
aW5nbGVGcmFnbWVudFN0cmluZzo6Y2hhcl90eXBlCm5zQVNpbmdsZUZyYWdtZW50U3RyaW5nOjpD
aGFyQXQoIFBSVWludDMyIGkgKSBjb25zdAogIHsKICAgIDsKICAgIHJldHVybiBvcGVyYXRvcltd
KGkpOwogIH0KCmlubGluZQpuc0FTaW5nbGVGcmFnbWVudENTdHJpbmc6OmNoYXJfdHlwZQpuc0FT
aW5nbGVGcmFnbWVudENTdHJpbmc6OkNoYXJBdCggUFJVaW50MzIgaSApIGNvbnN0CiAgewogICAg
OwogICAgcmV0dXJuIG9wZXJhdG9yW10oaSk7CiAgfQojIDMxICIuLi8uLi8uLi9kaXN0L2luY2x1
ZGUvc3RyaW5nL25zQUZsYXRTdHJpbmcuaCIgMgojIDQzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv
c3RyaW5nL25zQUZsYXRTdHJpbmcuaCIKY2xhc3MgbnNBRmxhdFN0cmluZwogICAgOiBwdWJsaWMg
bnNBU2luZ2xlRnJhZ21lbnRTdHJpbmcKICB7CiAgICBwdWJsaWM6CgoKCiAgICAgIHZpcnR1YWwg
Y29uc3QgY2hhcl90eXBlKiBnZXQoKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIGNvbnN0IGNo
YXJfdHlwZSogdGVtcDsKICAgICAgICAgIHJldHVybiBCZWdpblJlYWRpbmcodGVtcCk7CiAgICAg
ICAgfQogIH07CgpjbGFzcyBuc0FGbGF0Q1N0cmluZwogICAgOiBwdWJsaWMgbnNBU2luZ2xlRnJh
Z21lbnRDU3RyaW5nCiAgewogICAgcHVibGljOgoKCgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf
dHlwZSogZ2V0KCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIHRl
bXA7CiAgICAgICAgICByZXR1cm4gQmVnaW5SZWFkaW5nKHRlbXApOwogICAgICAgIH0KCiAgfTsK
IyA1OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZzIuaCIgMgoKCgojIDEg
Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNMaXRlcmFsU3RyaW5nLmgiIDEKIyAzMiAi
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0xpdGVyYWxTdHJpbmcuaCIKIyAxICIuLi8u
Li8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zRGVwZW5kZW50U3RyaW5nLmgiIDEKIyA0NSAiLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0RlcGVuZGVudFN0cmluZy5oIgpjbGFzcyBuc0Rl
cGVuZGVudFN0cmluZwogICAgICA6IHB1YmxpYyBuc0FGbGF0U3RyaW5nCiAgewogICAgcHVibGlj
OgogICAgICB0eXBlZGVmIG5zRGVwZW5kZW50U3RyaW5nIHNlbGZfdHlwZTsKCiAgICAgIHZvaWQK
ICAgICAgUmViaW5kKCBjb25zdCBjaGFyX3R5cGUqIGFQdHIgKQogICAgICAgIHsKICAgICAgICAg
IDsKICAgICAgICAgIG1IYW5kbGUuRGF0YVN0YXJ0KGFQdHIpOwoKCgogICAgICAgICAgbUhhbmRs
ZS5EYXRhRW5kKGFQdHIgPyAoYVB0cituc0NoYXJUcmFpdHM8Y2hhcl90eXBlPjo6bGVuZ3RoKGFQ
dHIpKSA6IDApOwogICAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgUmViaW5kKCBjb25zdCBjaGFy
X3R5cGUqIGFTdGFydFB0ciwgY29uc3QgY2hhcl90eXBlKiBhRW5kUHRyICkKICAgICAgICB7CiAg
ICAgICAgICA7CiMgODYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNEZXBlbmRlbnRT
dHJpbmcuaCIKICAgICAgICAgIDsKICAgICAgICAgIG1IYW5kbGUuRGF0YVN0YXJ0KGFTdGFydFB0
cik7CiAgICAgICAgICBtSGFuZGxlLkRhdGFFbmQoYUVuZFB0cik7CiAgICAgICAgfQoKICAgICAg
dm9pZAogICAgICBSZWJpbmQoIGNvbnN0IGNoYXJfdHlwZSogYVB0ciwgUFJVaW50MzIgYUxlbmd0
aCApCiAgICAgICAgewogICAgICAgICAgOwogICAgICAgICAgUmViaW5kKGFQdHIsIGFQdHIrYUxl
bmd0aCk7CiAgICAgICAgfQoKICAgICAgbnNEZXBlbmRlbnRTdHJpbmcoIGNvbnN0IGNoYXJfdHlw
ZSogYVN0YXJ0UHRyLCBjb25zdCBjaGFyX3R5cGUqIGFFbmRQdHIgKSB7IFJlYmluZChhU3RhcnRQ
dHIsIGFFbmRQdHIpOyB9CiAgICAgIG5zRGVwZW5kZW50U3RyaW5nKCBjb25zdCBjaGFyX3R5cGUq
IGFQdHIsIFBSVWludDMyIGFMZW5ndGggKSB7IFJlYmluZChhUHRyLCBhTGVuZ3RoKTsgfQogICAg
ICBleHBsaWNpdCBuc0RlcGVuZGVudFN0cmluZyggY29uc3QgY2hhcl90eXBlKiBhUHRyICkgeyBS
ZWJpbmQoYVB0cik7IH0KCgoKCiAgICBwcml2YXRlOgoKICAgICAgdm9pZCBvcGVyYXRvcj0oIGNv
bnN0IHNlbGZfdHlwZSYgKTsKCiAgICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgY29uc3QgYnVmZmVy
X2hhbmRsZV90eXBlKiBHZXRGbGF0QnVmZmVySGFuZGxlKCkgY29uc3QgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDwgY29uc3QgYnVmZmVyX2hhbmRsZV90eXBlKiA+KCZtSGFuZGxlKTsgfQogICAg
ICB2aXJ0dWFsIGNvbnN0IGJ1ZmZlcl9oYW5kbGVfdHlwZSogR2V0QnVmZmVySGFuZGxlKCkgY29u
c3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgY29uc3QgYnVmZmVyX2hhbmRsZV90eXBlKiA+
KCZtSGFuZGxlKTsgfQoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0X2J1ZmZlcl9oYW5kbGVfdHlw
ZSBtSGFuZGxlOwogIH07CgoKCmNsYXNzIG5zRGVwZW5kZW50Q1N0cmluZwogICAgICA6IHB1Ymxp
YyBuc0FGbGF0Q1N0cmluZwogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBuc0RlcGVuZGVu
dENTdHJpbmcgc2VsZl90eXBlOwoKICAgICAgdm9pZAogICAgICBSZWJpbmQoIGNvbnN0IGNoYXJf
dHlwZSogYVB0ciApCiAgICAgICAgewogICAgICAgICAgOwogICAgICAgICAgbUhhbmRsZS5EYXRh
U3RhcnQoYVB0cik7CgoKCiAgICAgICAgICBtSGFuZGxlLkRhdGFFbmQoYVB0ciA/IChhUHRyK25z
Q2hhclRyYWl0czxjaGFyX3R5cGU+OjpsZW5ndGgoYVB0cikpIDogMCk7CiAgICAgICAgfQoKICAg
ICAgdm9pZAogICAgICBSZWJpbmQoIGNvbnN0IGNoYXJfdHlwZSogYVN0YXJ0UHRyLCBjb25zdCBj
aGFyX3R5cGUqIGFFbmRQdHIgKQogICAgICAgIHsKICAgICAgICAgIDsKIyAxNjAgIi4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNEZXBlbmRlbnRTdHJpbmcuaCIKICAgICAgICAgIDsKICAg
ICAgICAgIG1IYW5kbGUuRGF0YVN0YXJ0KGFTdGFydFB0cik7CiAgICAgICAgICBtSGFuZGxlLkRh
dGFFbmQoYUVuZFB0cik7CiAgICAgICAgfQoKICAgICAgdm9pZAogICAgICBSZWJpbmQoIGNvbnN0
IGNoYXJfdHlwZSogYVB0ciwgUFJVaW50MzIgYUxlbmd0aCApCiAgICAgICAgewogICAgICAgICAg
OwogICAgICAgICAgUmViaW5kKGFQdHIsIGFQdHIrYUxlbmd0aCk7CiAgICAgICAgfQoKICAgICAg
bnNEZXBlbmRlbnRDU3RyaW5nKCBjb25zdCBjaGFyX3R5cGUqIGFTdGFydFB0ciwgY29uc3QgY2hh
cl90eXBlKiBhRW5kUHRyICkgeyBSZWJpbmQoYVN0YXJ0UHRyLCBhRW5kUHRyKTsgfQogICAgICBu
c0RlcGVuZGVudENTdHJpbmcoIGNvbnN0IGNoYXJfdHlwZSogYVB0ciwgUFJVaW50MzIgYUxlbmd0
aCApIHsgUmViaW5kKGFQdHIsIGFMZW5ndGgpOyB9CiAgICAgIGV4cGxpY2l0IG5zRGVwZW5kZW50
Q1N0cmluZyggY29uc3QgY2hhcl90eXBlKiBhUHRyICkgeyBSZWJpbmQoYVB0cik7IH0KCgoKCiAg
ICBwcml2YXRlOgoKICAgICAgdm9pZCBvcGVyYXRvcj0oIGNvbnN0IHNlbGZfdHlwZSYgKTsKCiAg
ICBwdWJsaWM6CiAgICAgIHZpcnR1YWwgY29uc3QgYnVmZmVyX2hhbmRsZV90eXBlKiBHZXRGbGF0
QnVmZmVySGFuZGxlKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgY29uc3QgYnVm
ZmVyX2hhbmRsZV90eXBlKiA+KCZtSGFuZGxlKTsgfQogICAgICB2aXJ0dWFsIGNvbnN0IGJ1ZmZl
cl9oYW5kbGVfdHlwZSogR2V0QnVmZmVySGFuZGxlKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDwgY29uc3QgYnVmZmVyX2hhbmRsZV90eXBlKiA+KCZtSGFuZGxlKTsgfQoKICAgIHBy
aXZhdGU6CiAgICAgIGNvbnN0X2J1ZmZlcl9oYW5kbGVfdHlwZSBtSGFuZGxlOwogIH07CiMgMzMg
Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNMaXRlcmFsU3RyaW5nLmgiIDIKIyA2MyAi
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZzIuaCIgMgoKCgojIDEgIi4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNEZXBlbmRlbnRTdWJzdHJpbmcuaCIgMQojIDQ1ICIu
Li8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zRGVwZW5kZW50U3Vic3RyaW5nLmgiCmNsYXNz
IG5zRGVwZW5kZW50U3Vic3RyaW5nCiAgICA6IHB1YmxpYyBuc0FTdHJpbmcKIyA1NSAiLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc0RlcGVuZGVudFN1YnN0cmluZy5oIgogIHsKICAgIHB1
YmxpYzoKICAgICAgdHlwZWRlZiBuc0RlcGVuZGVudFN1YnN0cmluZyBzZWxmX3R5cGU7CgogICAg
cHJvdGVjdGVkOgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSogR2V0UmVhZGFibGVGcmFn
bWVudCggY29uc3RfZnJhZ21lbnRfdHlwZSYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiAp
IGNvbnN0OwogICAgICB2aXJ0dWFsIGNoYXJfdHlwZSogR2V0V3JpdGFibGVGcmFnbWVudCggZnJh
Z21lbnRfdHlwZSYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApIHsgcmV0dXJuIDA7IH0K
CiAgICBwdWJsaWM6CiAgICAgIG5zRGVwZW5kZW50U3Vic3RyaW5nKCBjb25zdCBhYnN0cmFjdF9z
dHJpbmdfdHlwZSYgYVN0cmluZywgUFJVaW50MzIgYVN0YXJ0UG9zLCBQUlVpbnQzMiBhTGVuZ3Ro
ICkKICAgICAgICAgIDogbVN0cmluZyhhU3RyaW5nKSwKICAgICAgICAgICAgbVN0YXJ0UG9zKCBO
U19NSU4oYVN0YXJ0UG9zLCBhU3RyaW5nLkxlbmd0aCgpKSApLAogICAgICAgICAgICBtTGVuZ3Ro
KCBOU19NSU4oYUxlbmd0aCwgYVN0cmluZy5MZW5ndGgoKS1tU3RhcnRQb3MpICkKICAgICAgICB7
CgogICAgICAgIH0KCiAgICAgIG5zRGVwZW5kZW50U3Vic3RyaW5nKCBjb25zdCBjb25zdF9pdGVy
YXRvciYgYVN0YXJ0LCBjb25zdCBjb25zdF9pdGVyYXRvciYgYUVuZCApCiAgICAgICAgICA6IG1T
dHJpbmcoYVN0YXJ0LnN0cmluZygpKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0X2l0ZXJhdG9y
IHplcm9Qb2ludDsKICAgICAgICAgIG1TdHJpbmcuQmVnaW5SZWFkaW5nKHplcm9Qb2ludCk7CiAg
ICAgICAgICBtU3RhcnRQb3MgPSBEaXN0YW5jZSh6ZXJvUG9pbnQsIGFTdGFydCk7CiAgICAgICAg
ICBtTGVuZ3RoID0gRGlzdGFuY2UoYVN0YXJ0LCBhRW5kKTsKICAgICAgICB9CgoKCgogICAgcHJp
dmF0ZToKCiAgICAgIHZvaWQgb3BlcmF0b3I9KCBjb25zdCBzZWxmX3R5cGUmICk7CgogICAgcHVi
bGljOgogICAgICB2aXJ0dWFsIFBSVWludDMyIExlbmd0aCgpIGNvbnN0OwoKICAgIHByaXZhdGU6
CiAgICAgIGNvbnN0IGFic3RyYWN0X3N0cmluZ190eXBlJiBtU3RyaW5nOwogICAgICBQUlVpbnQz
MiBtU3RhcnRQb3M7CiAgICAgIFBSVWludDMyIG1MZW5ndGg7CiAgfTsKCmNsYXNzIG5zRGVwZW5k
ZW50Q1N1YnN0cmluZwogICAgOiBwdWJsaWMgbnNBQ1N0cmluZwojIDEwNyAiLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL3N0cmluZy9uc0RlcGVuZGVudFN1YnN0cmluZy5oIgogIHsKICAgIHB1YmxpYzoK
ICAgICAgdHlwZWRlZiBuc0RlcGVuZGVudENTdWJzdHJpbmcgc2VsZl90eXBlOwoKICAgIHByb3Rl
Y3RlZDoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqIEdldFJlYWRhYmxlRnJhZ21lbnQo
IGNvbnN0X2ZyYWdtZW50X3R5cGUmLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKSBjb25z
dDsKICAgICAgdmlydHVhbCBjaGFyX3R5cGUqIEdldFdyaXRhYmxlRnJhZ21lbnQoIGZyYWdtZW50
X3R5cGUmLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJVaW50MzIgKSB7IHJldHVybiAwOyB9CgogICAg
cHVibGljOgogICAgICBuc0RlcGVuZGVudENTdWJzdHJpbmcoIGNvbnN0IGFic3RyYWN0X3N0cmlu
Z190eXBlJiBhU3RyaW5nLCBQUlVpbnQzMiBhU3RhcnRQb3MsIFBSVWludDMyIGFMZW5ndGggKQog
ICAgICAgICAgOiBtU3RyaW5nKGFTdHJpbmcpLAogICAgICAgICAgICBtU3RhcnRQb3MoIE5TX01J
TihhU3RhcnRQb3MsIGFTdHJpbmcuTGVuZ3RoKCkpICksCiAgICAgICAgICAgIG1MZW5ndGgoIE5T
X01JTihhTGVuZ3RoLCBhU3RyaW5nLkxlbmd0aCgpLW1TdGFydFBvcykgKQogICAgICAgIHsKCiAg
ICAgICAgfQoKICAgICAgbnNEZXBlbmRlbnRDU3Vic3RyaW5nKCBjb25zdCBjb25zdF9pdGVyYXRv
ciYgYVN0YXJ0LCBjb25zdCBjb25zdF9pdGVyYXRvciYgYUVuZCApCiAgICAgICAgICA6IG1TdHJp
bmcoYVN0YXJ0LnN0cmluZygpKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIHpl
cm9Qb2ludDsKICAgICAgICAgIG1TdHJpbmcuQmVnaW5SZWFkaW5nKHplcm9Qb2ludCk7CiAgICAg
ICAgICBtU3RhcnRQb3MgPSBEaXN0YW5jZSh6ZXJvUG9pbnQsIGFTdGFydCk7CiAgICAgICAgICBt
TGVuZ3RoID0gRGlzdGFuY2UoYVN0YXJ0LCBhRW5kKTsKICAgICAgICB9CgoKCgogICAgcHJpdmF0
ZToKCiAgICAgIHZvaWQgb3BlcmF0b3I9KCBjb25zdCBzZWxmX3R5cGUmICk7CgogICAgcHVibGlj
OgogICAgICB2aXJ0dWFsIFBSVWludDMyIExlbmd0aCgpIGNvbnN0OwoKICAgIHByaXZhdGU6CiAg
ICAgIGNvbnN0IGFic3RyYWN0X3N0cmluZ190eXBlJiBtU3RyaW5nOwogICAgICBQUlVpbnQzMiBt
U3RhcnRQb3M7CiAgICAgIFBSVWludDMyIG1MZW5ndGg7CiAgfTsKCgpjbGFzcyBuc0RlcGVuZGVu
dFNpbmdsZUZyYWdtZW50U3Vic3RyaW5nCiAgICAgIDogcHVibGljIG5zQVNpbmdsZUZyYWdtZW50
U3RyaW5nCiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIG5zRGVwZW5kZW50U2luZ2xlRnJh
Z21lbnRTdWJzdHJpbmcgc2VsZl90eXBlOwogICAgICB0eXBlZGVmIG5zQVNpbmdsZUZyYWdtZW50
U3RyaW5nIGFic3RyYWN0X3NpbmdsZV9mcmFnbWVudF90eXBlOwoKICAgICAgdm9pZAogICAgICBS
ZWJpbmQoIGNvbnN0IGNoYXJfdHlwZSogYVN0YXJ0UHRyLCBjb25zdCBjaGFyX3R5cGUqIGFFbmRQ
dHIgKQogICAgICAgIHsKICAgICAgICAgIDsKICAgICAgICAgIG1IYW5kbGUuRGF0YVN0YXJ0KGFT
dGFydFB0cik7CiAgICAgICAgICBtSGFuZGxlLkRhdGFFbmQoYUVuZFB0cik7CiAgICAgICAgfQoK
ICAgICAgdm9pZAogICAgICBSZWJpbmQoIGNvbnN0IGFic3RyYWN0X3NpbmdsZV9mcmFnbWVudF90
eXBlJiBhU3RyaW5nLCBjb25zdCBQUlVpbnQzMiBhU3RhcnRQb3MsIGNvbnN0IFBSVWludDMyIGFM
ZW5ndGggKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0X2NoYXJfaXRlcmF0b3IgaXRlcjsKICAg
ICAgICAgIG1IYW5kbGUuRGF0YVN0YXJ0KGFTdHJpbmcuQmVnaW5SZWFkaW5nKGl0ZXIpICsgTlNf
TUlOKGFTdGFydFBvcywgYVN0cmluZy5MZW5ndGgoKSkpOwogICAgICAgICAgbUhhbmRsZS5EYXRh
RW5kKCBOU19NSU4obUhhbmRsZS5EYXRhU3RhcnQoKSArIGFMZW5ndGgsIGFTdHJpbmcuRW5kUmVh
ZGluZyhpdGVyKSkgKTsKICAgICAgICB9CgogICAgICBuc0RlcGVuZGVudFNpbmdsZUZyYWdtZW50
U3Vic3RyaW5nKCBjb25zdCBjaGFyX3R5cGUqIGFTdGFydFB0ciwgY29uc3QgY2hhcl90eXBlKiBh
RW5kUHRyICkgeyBSZWJpbmQoYVN0YXJ0UHRyLCBhRW5kUHRyKTsgfQogICAgICBuc0RlcGVuZGVu
dFNpbmdsZUZyYWdtZW50U3Vic3RyaW5nKCBjb25zdCBhYnN0cmFjdF9zaW5nbGVfZnJhZ21lbnRf
dHlwZSYgYVN0cmluZywgY29uc3QgUFJVaW50MzIgYVN0YXJ0UG9zLCBjb25zdCBQUlVpbnQzMiBh
TGVuZ3RoICkgeyBSZWJpbmQoYVN0cmluZywgYVN0YXJ0UG9zLCBhTGVuZ3RoKTsgfQoKCgoKICAg
IHByaXZhdGU6CgogICAgICB2b2lkIG9wZXJhdG9yPSggY29uc3Qgc2VsZl90eXBlJiApOwoKICAg
IHB1YmxpYzoKICAgICAgdmlydHVhbCBjb25zdCBidWZmZXJfaGFuZGxlX3R5cGUqIEdldEJ1ZmZl
ckhhbmRsZSgpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IGNvbnN0IGJ1ZmZlcl9o
YW5kbGVfdHlwZSogPigmbUhhbmRsZSk7IH0KCiAgICBwcml2YXRlOgogICAgICBjb25zdF9idWZm
ZXJfaGFuZGxlX3R5cGUgbUhhbmRsZTsKICB9OwoKCmNsYXNzIG5zRGVwZW5kZW50U2luZ2xlRnJh
Z21lbnRDU3Vic3RyaW5nCiAgICAgIDogcHVibGljIG5zQVNpbmdsZUZyYWdtZW50Q1N0cmluZwog
IHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBuc0RlcGVuZGVudFNpbmdsZUZyYWdtZW50Q1N1
YnN0cmluZyBzZWxmX3R5cGU7CiAgICAgIHR5cGVkZWYgbnNBU2luZ2xlRnJhZ21lbnRDU3RyaW5n
IGFic3RyYWN0X3NpbmdsZV9mcmFnbWVudF90eXBlOwoKICAgICAgdm9pZAogICAgICBSZWJpbmQo
IGNvbnN0IGNoYXJfdHlwZSogYVN0YXJ0UHRyLCBjb25zdCBjaGFyX3R5cGUqIGFFbmRQdHIgKQog
ICAgICAgIHsKICAgICAgICAgIDsKICAgICAgICAgIG1IYW5kbGUuRGF0YVN0YXJ0KGFTdGFydFB0
cik7CiAgICAgICAgICBtSGFuZGxlLkRhdGFFbmQoYUVuZFB0cik7CiAgICAgICAgfQoKICAgICAg
dm9pZAogICAgICBSZWJpbmQoIGNvbnN0IGFic3RyYWN0X3NpbmdsZV9mcmFnbWVudF90eXBlJiBh
U3RyaW5nLCBjb25zdCBQUlVpbnQzMiBhU3RhcnRQb3MsIGNvbnN0IFBSVWludDMyIGFMZW5ndGgg
KQogICAgICAgIHsKICAgICAgICAgIGNvbnN0X2NoYXJfaXRlcmF0b3IgaXRlcjsKICAgICAgICAg
IG1IYW5kbGUuRGF0YVN0YXJ0KGFTdHJpbmcuQmVnaW5SZWFkaW5nKGl0ZXIpICsgTlNfTUlOKGFT
dGFydFBvcywgYVN0cmluZy5MZW5ndGgoKSkpOwogICAgICAgICAgbUhhbmRsZS5EYXRhRW5kKCBO
U19NSU4obUhhbmRsZS5EYXRhU3RhcnQoKSArIGFMZW5ndGgsIGFTdHJpbmcuRW5kUmVhZGluZyhp
dGVyKSkgKTsKICAgICAgICB9CgogICAgICBuc0RlcGVuZGVudFNpbmdsZUZyYWdtZW50Q1N1YnN0
cmluZyggY29uc3QgY2hhcl90eXBlKiBhU3RhcnRQdHIsIGNvbnN0IGNoYXJfdHlwZSogYUVuZFB0
ciApIHsgUmViaW5kKGFTdGFydFB0ciwgYUVuZFB0cik7IH0KICAgICAgbnNEZXBlbmRlbnRTaW5n
bGVGcmFnbWVudENTdWJzdHJpbmcoIGNvbnN0IGFic3RyYWN0X3NpbmdsZV9mcmFnbWVudF90eXBl
JiBhU3RyaW5nLCBjb25zdCBQUlVpbnQzMiBhU3RhcnRQb3MsIGNvbnN0IFBSVWludDMyIGFMZW5n
dGggKSB7IFJlYmluZChhU3RyaW5nLCBhU3RhcnRQb3MsIGFMZW5ndGgpOyB9CgoKCgogICAgcHJp
dmF0ZToKCiAgICAgIHZvaWQgb3BlcmF0b3I9KCBjb25zdCBzZWxmX3R5cGUmICk7CgogICAgcHVi
bGljOgogICAgICB2aXJ0dWFsIGNvbnN0IGJ1ZmZlcl9oYW5kbGVfdHlwZSogR2V0QnVmZmVySGFu
ZGxlKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwgY29uc3QgYnVmZmVyX2hhbmRs
ZV90eXBlKiA+KCZtSGFuZGxlKTsgfQoKICAgIHByaXZhdGU6CiAgICAgIGNvbnN0X2J1ZmZlcl9o
YW5kbGVfdHlwZSBtSGFuZGxlOwogIH07CgoKCmlubGluZQpjb25zdCBuc0RlcGVuZGVudENTdWJz
dHJpbmcKU3Vic3RyaW5nKCBjb25zdCBuc0FDU3RyaW5nJiBhU3RyaW5nLCBQUlVpbnQzMiBhU3Rh
cnRQb3MsIFBSVWludDMyIGFTdWJzdHJpbmdMZW5ndGggKQogIHsKICAgIHJldHVybiBuc0RlcGVu
ZGVudENTdWJzdHJpbmcoYVN0cmluZywgYVN0YXJ0UG9zLCBhU3Vic3RyaW5nTGVuZ3RoKTsKICB9
CgppbmxpbmUKY29uc3QgbnNEZXBlbmRlbnRTdWJzdHJpbmcKU3Vic3RyaW5nKCBjb25zdCBuc0FT
dHJpbmcmIGFTdHJpbmcsIFBSVWludDMyIGFTdGFydFBvcywgUFJVaW50MzIgYVN1YnN0cmluZ0xl
bmd0aCApCiAgewogICAgcmV0dXJuIG5zRGVwZW5kZW50U3Vic3RyaW5nKGFTdHJpbmcsIGFTdGFy
dFBvcywgYVN1YnN0cmluZ0xlbmd0aCk7CiAgfQoKaW5saW5lCmNvbnN0IG5zRGVwZW5kZW50Q1N1
YnN0cmluZwpTdWJzdHJpbmcoIGNvbnN0IG5zQUNTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJiBhU3Rh
cnQsIGNvbnN0IG5zQUNTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJiBhRW5kICkKICB7CiAgICByZXR1
cm4gbnNEZXBlbmRlbnRDU3Vic3RyaW5nKGFTdGFydCwgYUVuZCk7CiAgfQoKaW5saW5lCmNvbnN0
IG5zRGVwZW5kZW50U3Vic3RyaW5nClN1YnN0cmluZyggY29uc3QgbnNBU3RyaW5nOjpjb25zdF9p
dGVyYXRvciYgYVN0YXJ0LCBjb25zdCBuc0FTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJiBhRW5kICkK
ICB7CiAgICByZXR1cm4gbnNEZXBlbmRlbnRTdWJzdHJpbmcoYVN0YXJ0LCBhRW5kKTsKICB9CgoK
aW5saW5lCmNvbnN0IG5zRGVwZW5kZW50U2luZ2xlRnJhZ21lbnRDU3Vic3RyaW5nClN1YnN0cmlu
ZyggY29uc3QgbnNBU2luZ2xlRnJhZ21lbnRDU3RyaW5nJiBhU3RyaW5nLCBQUlVpbnQzMiBhU3Rh
cnRQb3MsIFBSVWludDMyIGFTdWJzdHJpbmdMZW5ndGggKQogIHsKICAgIHJldHVybiBuc0RlcGVu
ZGVudFNpbmdsZUZyYWdtZW50Q1N1YnN0cmluZyhhU3RyaW5nLCBhU3RhcnRQb3MsIGFTdWJzdHJp
bmdMZW5ndGgpOwogIH0KCmlubGluZQpjb25zdCBuc0RlcGVuZGVudFNpbmdsZUZyYWdtZW50U3Vi
c3RyaW5nClN1YnN0cmluZyggY29uc3QgbnNBU2luZ2xlRnJhZ21lbnRTdHJpbmcmIGFTdHJpbmcs
IFBSVWludDMyIGFTdGFydFBvcywgUFJVaW50MzIgYVN1YnN0cmluZ0xlbmd0aCApCiAgewogICAg
cmV0dXJuIG5zRGVwZW5kZW50U2luZ2xlRnJhZ21lbnRTdWJzdHJpbmcoYVN0cmluZywgYVN0YXJ0
UG9zLCBhU3Vic3RyaW5nTGVuZ3RoKTsKICB9CgppbmxpbmUKY29uc3QgbnNEZXBlbmRlbnRTaW5n
bGVGcmFnbWVudENTdWJzdHJpbmcKU3Vic3RyaW5nKCBjb25zdCBuc0FTaW5nbGVGcmFnbWVudENT
dHJpbmc6OmNvbnN0X2NoYXJfaXRlcmF0b3ImIGFTdGFydCwgY29uc3QgbnNBU2luZ2xlRnJhZ21l
bnRDU3RyaW5nOjpjb25zdF9jaGFyX2l0ZXJhdG9yJiBhRW5kICkKICB7CiAgICByZXR1cm4gbnNE
ZXBlbmRlbnRTaW5nbGVGcmFnbWVudENTdWJzdHJpbmcoYVN0YXJ0LCBhRW5kKTsKICB9Cgppbmxp
bmUKY29uc3QgbnNEZXBlbmRlbnRTaW5nbGVGcmFnbWVudFN1YnN0cmluZwpTdWJzdHJpbmcoIGNv
bnN0IG5zQVNpbmdsZUZyYWdtZW50U3RyaW5nOjpjb25zdF9jaGFyX2l0ZXJhdG9yJiBhU3RhcnQs
IGNvbnN0IG5zQVNpbmdsZUZyYWdtZW50U3RyaW5nOjpjb25zdF9jaGFyX2l0ZXJhdG9yJiBhRW5k
ICkKICB7CiAgICByZXR1cm4gbnNEZXBlbmRlbnRTaW5nbGVGcmFnbWVudFN1YnN0cmluZyhhU3Rh
cnQsIGFFbmQpOwogIH0KIyA2NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmlu
ZzIuaCIgMgoKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNQcm9taXNlRmxh
dFN0cmluZy5oIiAxCiMgMjggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNQcm9taXNl
RmxhdFN0cmluZy5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTaGFyYWJs
ZVN0cmluZy5oIiAxCiMgMzUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTaGFyYWJs
ZVN0cmluZy5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNCdWZmZXJIYW5k
bGVVdGlscy5oIiAxCiMgMzYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNCdWZmZXJI
YW5kbGVVdGlscy5oIgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4y
LjIvaW5jbHVkZS9nKystdjMvbmV3IiAxIDMKIyA0MSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBj
LWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL2crKy12My9uZXciIDMKIyAxICIvdXNyL2xpYi9nY2Mt
bGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvZysrLXYzL2NzdGRkZWYiIDEgMwoj
IDQ3ICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvZysr
LXYzL2NzdGRkZWYiIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8z
LjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBj
LWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL2crKy12My9jc3RkZGVmIiAyIDMKCm5hbWVzcGFjZSBz
dGQKewogIHVzaW5nIDo6cHRyZGlmZl90OwogIHVzaW5nIDo6c2l6ZV90Owp9CiMgNDIgIi91c3Iv
bGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9nKystdjMvbmV3IiAy
IDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUv
ZysrLXYzL2V4Y2VwdGlvbiIgMSAzCiMgNDAgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51
eC1nbnUvMy4yLjIvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAzCmV4dGVybiAiQysrIiB7Cgpu
YW1lc3BhY2Ugc3RkCnsKCgoKCgoKICBjbGFzcyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAg
ZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmV4Y2VwdGlvbigpIHRocm93KCk7
CgoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoK
ICBjbGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAg
ICBiYWRfZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFkX2V4Y2VwdGlv
bigpIHRocm93KCk7CiAgfTsKCgogIHR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAo
KTsKCiAgdHlwZWRlZiB2b2lkICgqdW5leHBlY3RlZF9oYW5kbGVyKSAoKTsKCgogIHRlcm1pbmF0
ZV9oYW5kbGVyIHNldF90ZXJtaW5hdGUodGVybWluYXRlX2hhbmRsZXIpIHRocm93KCk7CgoKICB2
b2lkIHRlcm1pbmF0ZSgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogIHVuZXhw
ZWN0ZWRfaGFuZGxlciBzZXRfdW5leHBlY3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7
CgoKICB2b2lkIHVuZXhwZWN0ZWQoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CiMg
OTggIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9nKyst
djMvZXhjZXB0aW9uIiAzCiAgYm9vbCB1bmNhdWdodF9leGNlcHRpb24oKSB0aHJvdygpOwp9Cgpu
YW1lc3BhY2UgX19nbnVfY3h4CnsKIyAxMTEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51
eC1nbnUvMy4yLjIvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAzCiAgdm9pZCBfX3ZlcmJvc2Vf
dGVybWluYXRlX2hhbmRsZXIgKCk7Cn0KCn0KIyA0MyAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBj
LWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL2crKy12My9uZXciIDIgMwoKZXh0ZXJuICJDKysiIHsK
Cm5hbWVzcGFjZSBzdGQKewoKCiAgY2xhc3MgYmFkX2FsbG9jIDogcHVibGljIGV4Y2VwdGlvbgog
IHsKICBwdWJsaWM6CiAgICBiYWRfYWxsb2MoKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5i
YWRfYWxsb2MoKSB0aHJvdygpOwogIH07CgogIHN0cnVjdCBub3Rocm93X3QgeyB9OwogIGV4dGVy
biBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKCgogIHR5cGVkZWYgdm9pZCAoKm5ld19oYW5kbGVy
KSgpOwoKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIobmV3X2hhbmRsZXIpIHRocm93KCk7
Cn0KIyA3OSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRl
L2crKy12My9uZXciIDMKdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3Rk
OjpiYWRfYWxsb2MpOwp2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCkgdGhyb3cgKHN0
ZDo6YmFkX2FsbG9jKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCopIHRocm93KCk7CnZvaWQg
b3BlcmF0b3IgZGVsZXRlW10odm9pZCopIHRocm93KCk7CnZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6
OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkKiBvcGVyYXRvciBu
ZXdbXShzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9w
ZXJhdG9yIGRlbGV0ZSh2b2lkKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lk
IG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7
CgoKaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgdm9pZCogX19wKSB0aHJv
dygpIHsgcmV0dXJuIF9fcDsgfQppbmxpbmUgdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXpl
X3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7IHJldHVybiBfX3A7IH0KCgppbmxpbmUgdm9pZCBvcGVy
YXRvciBkZWxldGUgKHZvaWQqLCB2b2lkKikgdGhyb3coKSB7IH07CmlubGluZSB2b2lkIG9wZXJh
dG9yIGRlbGV0ZVtdKHZvaWQqLCB2b2lkKikgdGhyb3coKSB7IH07Cgp9CiMgMzcgIi4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNCdWZmZXJIYW5kbGVVdGlscy5oIiAyCgoKCnRlbXBsYXRl
IDxjbGFzcyBDaGFyVD4KY2xhc3MgbnNBdXRvQnVmZmVySGFuZGxlCiAgewogICAgcHVibGljOgog
ICAgICBuc0F1dG9CdWZmZXJIYW5kbGUoKSA6IG1IYW5kbGUoMCkgeyB9CgogICAgICBuc0F1dG9C
dWZmZXJIYW5kbGUoIGNvbnN0IG5zQXV0b0J1ZmZlckhhbmRsZTxDaGFyVD4mIGFPdGhlciApCiAg
ICAgICAgICA6IG1IYW5kbGUoYU90aGVyLmdldCgpKQogICAgICAgIHsKICAgICAgICAgIGlmICgg
bUhhbmRsZSApCiAgICAgICAgICAgIG1IYW5kbGUtPkFjcXVpcmVSZWZlcmVuY2UoKTsKICAgICAg
ICB9CgogICAgICBleHBsaWNpdAogICAgICBuc0F1dG9CdWZmZXJIYW5kbGUoIGNvbnN0IG5zU2hh
cmVkQnVmZmVySGFuZGxlPENoYXJUPiogYUhhbmRsZSApCiAgICAgICAgICA6IG1IYW5kbGUoIGNv
bnN0X2Nhc3Q8IG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPiogPihhSGFuZGxlKSApCiAgICAg
ICAgewogICAgICAgICAgaWYgKCBtSGFuZGxlICkKICAgICAgICAgICAgbUhhbmRsZS0+QWNxdWly
ZVJlZmVyZW5jZSgpOwogICAgICAgIH0KCiAgICAgfm5zQXV0b0J1ZmZlckhhbmRsZSgpCiAgICAg
ICAgewogICAgICAgICAgaWYgKCBtSGFuZGxlICkKICAgICAgICAgICAgbUhhbmRsZS0+UmVsZWFz
ZVJlZmVyZW5jZSgpOwogICAgICAgIH0KCiAgICAgIG5zQXV0b0J1ZmZlckhhbmRsZTxDaGFyVD4m
CiAgICAgIG9wZXJhdG9yPSggY29uc3QgbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KiByaHMg
KQogICAgICAgIHsKICAgICAgICAgIG5zU2hhcmVkQnVmZmVySGFuZGxlPENoYXJUPiogb2xkX2hh
bmRsZSA9IG1IYW5kbGU7CiAgICAgICAgICBpZiAoIChtSGFuZGxlID0gY29uc3RfY2FzdDwgbnNT
aGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KiA+KHJocykpICkKICAgICAgICAgICAgbUhhbmRsZS0+
QWNxdWlyZVJlZmVyZW5jZSgpOwogICAgICAgICAgaWYgKCBvbGRfaGFuZGxlICkKICAgICAgICAg
ICAgb2xkX2hhbmRsZS0+UmVsZWFzZVJlZmVyZW5jZSgpOwogICAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgICAgIH0KCiAgICAgIG5zQXV0b0J1ZmZlckhhbmRsZTxDaGFyVD4mCiAgICAgIG9wZXJh
dG9yPSggY29uc3QgbnNBdXRvQnVmZmVySGFuZGxlPENoYXJUPiYgcmhzICkKICAgICAgICB7CiAg
ICAgICAgICByZXR1cm4gb3BlcmF0b3I9KHJocy5nZXQoKSk7CiAgICAgICAgfQoKICAgICAgbnNT
aGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KgogICAgICBnZXQoKSBjb25zdAogICAgICAgIHsKICAg
ICAgICAgIHJldHVybiBtSGFuZGxlOwogICAgICAgIH0KCiAgICAgIG9wZXJhdG9yIG5zU2hhcmVk
QnVmZmVySGFuZGxlPENoYXJUPiooKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiBn
ZXQoKTsKICAgICAgICB9CgogICAgICBuc1NoYXJlZEJ1ZmZlckhhbmRsZTxDaGFyVD4qCiAgICAg
IG9wZXJhdG9yLT4oKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiBnZXQoKTsKICAg
ICAgICB9CgogICAgcHJpdmF0ZToKICAgICAgbnNTaGFyZWRCdWZmZXJIYW5kbGU8Q2hhclQ+KiBt
SGFuZGxlOwogIH07CgoKdGVtcGxhdGUgPGNsYXNzIEhhbmRsZVQsIGNsYXNzIENoYXJUPgppbmxp
bmUKc2l6ZV90Ck5TX0FsaWduZWRIYW5kbGVTaXplKCBjb25zdCBIYW5kbGVUKiwgY29uc3QgQ2hh
clQqICkKICB7CgogICAgcmV0dXJuICgoc2l6ZW9mKEhhbmRsZVQpICsgc2l6ZW9mKENoYXJUKSAt
IDEpIC8gc2l6ZW9mKENoYXJUKSkgKiBzaXplb2YoQ2hhclQpOwogIH0KCnRlbXBsYXRlIDxjbGFz
cyBIYW5kbGVULCBjbGFzcyBDaGFyVD4KaW5saW5lCmNvbnN0IENoYXJUKgpOU19EYXRhQWZ0ZXJI
YW5kbGUoIGNvbnN0IEhhbmRsZVQqIGFIYW5kbGVQdHIsIGNvbnN0IENoYXJUKiBhRHVtbXlDaGFy
VFB0ciApCiAgewogICAgdHlwZWRlZiBjb25zdCBDaGFyVCogQ2hhclRfcHRyOwogICAgcmV0dXJu
IENoYXJUX3B0cihzdGF0aWNfY2FzdDwgY29uc3QgdW5zaWduZWQgY2hhciogPihhSGFuZGxlUHRy
KSArIE5TX0FsaWduZWRIYW5kbGVTaXplKGFIYW5kbGVQdHIsIGFEdW1teUNoYXJUUHRyKSk7CiAg
fQoKdGVtcGxhdGUgPGNsYXNzIEhhbmRsZVQsIGNsYXNzIENoYXJUPgppbmxpbmUKQ2hhclQqCk5T
X0RhdGFBZnRlckhhbmRsZSggSGFuZGxlVCogYUhhbmRsZVB0ciwgY29uc3QgQ2hhclQqIGFEdW1t
eUNoYXJUUHRyICkKICB7CiAgICB0eXBlZGVmIENoYXJUKiBDaGFyVF9wdHI7CiAgICByZXR1cm4g
Q2hhclRfcHRyKHN0YXRpY19jYXN0PCB1bnNpZ25lZCBjaGFyKiA+KGFIYW5kbGVQdHIpICsgTlNf
QWxpZ25lZEhhbmRsZVNpemUoYUhhbmRsZVB0ciwgYUR1bW15Q2hhclRQdHIpKTsKICB9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgSGFuZGxlVCwgY2xhc3MgU3RyaW5nVD4KSGFuZGxlVCoKTlNfQWxsb2NhdGVD
b250aWd1b3VzSGFuZGxlV2l0aERhdGEoIGNvbnN0IEhhbmRsZVQqIGFEdW1teUhhbmRsZVB0ciwg
UFJVaW50MzIgYUFkZGl0aW9uYWxDYXBhY2l0eSwgY29uc3QgU3RyaW5nVCogYURhdGFTb3VyY2Ug
KQogIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgU3RyaW5nVDo6Y2hhcl90eXBlIGNoYXJfdHlwZTsK
ICAgIHR5cGVkZWYgY2hhcl90eXBlKiBjaGFyX3B0cjsKCgogICAgc2l6ZV90IGhhbmRsZV9zaXpl
ID0gTlNfQWxpZ25lZEhhbmRsZVNpemUoYUR1bW15SGFuZGxlUHRyLCBjaGFyX3B0cigwKSk7CgoK
ICAgIHNpemVfdCBkYXRhX2xlbmd0aCA9IGFEYXRhU291cmNlPyBhRGF0YVNvdXJjZS0+TGVuZ3Ro
KCkgOiAwOwogICAgc2l6ZV90IGJ1ZmZlcl9sZW5ndGggPSBkYXRhX2xlbmd0aCArIGFBZGRpdGlv
bmFsQ2FwYWNpdHk7CgoKICAgIHNpemVfdCBidWZmZXJfc2l6ZSA9IGJ1ZmZlcl9sZW5ndGggKiBz
aXplb2YoY2hhcl90eXBlKTsKCgogICAgSGFuZGxlVCogcmVzdWx0ID0gMDsKICAgIHZvaWQqIGhh
bmRsZV9wdHIgPSA6Om9wZXJhdG9yIG5ldyhoYW5kbGVfc2l6ZSArIGJ1ZmZlcl9zaXplKTsKCiAg
ICBpZiAoIGhhbmRsZV9wdHIgKQogICAgICB7CiAgICAgICAgY2hhcl9wdHIgZGF0YV9zdGFydF9w
dHIgPSBjaGFyX3B0cihzdGF0aWNfY2FzdDwgdW5zaWduZWQgY2hhciogPihoYW5kbGVfcHRyKSAr
IGhhbmRsZV9zaXplKTsKICAgICAgICBjaGFyX3B0ciBkYXRhX2VuZF9wdHIgPSBkYXRhX3N0YXJ0
X3B0ciArIGRhdGFfbGVuZ3RoOwogICAgICAgIGNoYXJfcHRyIGJ1ZmZlcl9lbmRfcHRyID0gZGF0
YV9zdGFydF9wdHIgKyBidWZmZXJfbGVuZ3RoOwoKICAgICAgICBjaGFyX3B0ciB0b0JlZ2luID0g
ZGF0YV9zdGFydF9wdHI7CgogICAgICAgIGlmICggZGF0YV9sZW5ndGggKQogICAgICAgICAgewog
ICAgICAgICAgICB0eXBlbmFtZSBTdHJpbmdUOjpjb25zdF9pdGVyYXRvciBmcm9tQmVnaW4sIGZy
b21FbmQ7CiAgICAgICAgICAgIGNvcHlfc3RyaW5nKGFEYXRhU291cmNlLT5CZWdpblJlYWRpbmco
ZnJvbUJlZ2luKSwgYURhdGFTb3VyY2UtPkVuZFJlYWRpbmcoZnJvbUVuZCksIHRvQmVnaW4pOwog
ICAgICAgICAgfQoKCiAgICAgICAgaWYgKCBhQWRkaXRpb25hbENhcGFjaXR5ID4gMCApCiAgICAg
ICAgICAqdG9CZWdpbiA9IGNoYXJfdHlwZSgwKTsKCiAgICAgICAgcmVzdWx0ID0gbmV3IChoYW5k
bGVfcHRyKSBIYW5kbGVUKGRhdGFfc3RhcnRfcHRyLCBkYXRhX2VuZF9wdHIsIGJ1ZmZlcl9lbmRf
cHRyIC0gZGF0YV9zdGFydF9wdHIsIDEpOwogICAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgSGFuZGxlVCwgY2xhc3MgU3RyaW5nVD4KaW5saW5lCkhhbmRsZVQq
Ck5TX0FsbG9jYXRlQ29udGlndW91c0hhbmRsZVdpdGhEYXRhKCBjb25zdCBIYW5kbGVUKiBhRHVt
bXlIYW5kbGVQdHIsIGNvbnN0IFN0cmluZ1QmIGFEYXRhU291cmNlLCBQUlVpbnQzMiBhQWRkaXRp
b25hbENhcGFjaXR5ICkKICB7CiAgICByZXR1cm4gTlNfQWxsb2NhdGVDb250aWd1b3VzSGFuZGxl
V2l0aERhdGEoYUR1bW15SGFuZGxlUHRyLCBhQWRkaXRpb25hbENhcGFjaXR5LCAmYURhdGFTb3Vy
Y2UpOwogIH0KIyAzNiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1NoYXJhYmxlU3Ry
aW5nLmgiIDIKIyA0NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1NoYXJhYmxlU3Ry
aW5nLmgiCmNsYXNzIG5zU2hhcmFibGVTdHJpbmcKICAgIDogcHVibGljIG5zQUZsYXRTdHJpbmcK
ICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgbnNTaGFyYWJsZVN0cmluZyBzZWxmX3R5cGU7
CgogICAgcHVibGljOgogICAgICBuc1NoYXJhYmxlU3RyaW5nKCkgOiBtQnVmZmVyKEdldFNoYXJl
ZEVtcHR5QnVmZmVySGFuZGxlKCkpIHsgfQogICAgICBuc1NoYXJhYmxlU3RyaW5nKCBjb25zdCBz
ZWxmX3R5cGUmIGFPdGhlciApIDogbUJ1ZmZlcihhT3RoZXIubUJ1ZmZlcikgeyB9CiAgICAgIGV4
cGxpY2l0IG5zU2hhcmFibGVTdHJpbmcoIGNvbnN0IGFic3RyYWN0X3N0cmluZ190eXBlJiBhUmVh
ZGFibGUgKQogICAgICAgIHsKCgogICAgICAgICAgZG9fQXNzaWduRnJvbVJlYWRhYmxlKGFSZWFk
YWJsZSk7CiAgICAgICAgfQogICAgICBleHBsaWNpdCBuc1NoYXJhYmxlU3RyaW5nKCBjb25zdCBz
aGFyZWRfYnVmZmVyX2hhbmRsZV90eXBlKiBhSGFuZGxlICkKICAgICAgICAgIDogbUJ1ZmZlcihh
SGFuZGxlKQogICAgICAgIHsKICAgICAgICAgIDsKICAgICAgICB9CgoKICAgICAgc2VsZl90eXBl
JiBvcGVyYXRvcj0oIGNvbnN0IGFic3RyYWN0X3N0cmluZ190eXBlJiBhUmVhZGFibGUgKQogICAg
ICAgIHsKICAgICAgICAgIEFzc2lnbihhUmVhZGFibGUpOwogICAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgICAgIH0KIyA4MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1NoYXJhYmxl
U3RyaW5nLmgiCiAgICAgIHZvaWQgQWRvcHQoIGNoYXJfdHlwZSogYU5ld1ZhbHVlICk7CgoKCgoK
CgogICAgcHVibGljOgogICAgICB2aXJ0dWFsIHZvaWQgU2V0Q2FwYWNpdHkoIHNpemVfdHlwZSBh
TmV3Q2FwYWNpdHkgKTsKICAgICAgdmlydHVhbCB2b2lkIFNldExlbmd0aCggc2l6ZV90eXBlIGFO
ZXdMZW5ndGggKTsKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbCB2b2lkIGRvX0Fzc2lnbkZy
b21SZWFkYWJsZSggY29uc3QgYWJzdHJhY3Rfc3RyaW5nX3R5cGUmIGFSZWFkYWJsZSApOwogICAg
ICB2aXJ0dWFsIGNvbnN0IHNoYXJlZF9idWZmZXJfaGFuZGxlX3R5cGUqIEdldFNoYXJlZEJ1ZmZl
ckhhbmRsZSgpIGNvbnN0OwoKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUqIEdl
dFdyaXRhYmxlRnJhZ21lbnQoIGZyYWdtZW50X3R5cGUmLCBuc0ZyYWdtZW50UmVxdWVzdCwgUFJV
aW50MzIgKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHN0YXRpYyBzaGFyZWRfYnVmZmVyX2hhbmRs
ZV90eXBlKiBHZXRTaGFyZWRFbXB0eUJ1ZmZlckhhbmRsZSgpOwoKICAgIHByb3RlY3RlZDoKICAg
ICAgbnNBdXRvQnVmZmVySGFuZGxlPGNoYXJfdHlwZT4gbUJ1ZmZlcjsKICB9OwoKCmNsYXNzIG5z
U2hhcmFibGVDU3RyaW5nCiAgICA6IHB1YmxpYyBuc0FGbGF0Q1N0cmluZwogIHsKICAgIHB1Ymxp
YzoKICAgICAgdHlwZWRlZiBuc1NoYXJhYmxlQ1N0cmluZyBzZWxmX3R5cGU7CgogICAgcHVibGlj
OgogICAgICBuc1NoYXJhYmxlQ1N0cmluZygpIDogbUJ1ZmZlcihHZXRTaGFyZWRFbXB0eUJ1ZmZl
ckhhbmRsZSgpKSB7IH0KICAgICAgbnNTaGFyYWJsZUNTdHJpbmcoIGNvbnN0IHNlbGZfdHlwZSYg
YU90aGVyICkgOiBtQnVmZmVyKGFPdGhlci5tQnVmZmVyKSB7IH0KICAgICAgZXhwbGljaXQgbnNT
aGFyYWJsZUNTdHJpbmcoIGNvbnN0IGFic3RyYWN0X3N0cmluZ190eXBlJiBhUmVhZGFibGUgKQog
ICAgICAgIHsKCgogICAgICAgICAgZG9fQXNzaWduRnJvbVJlYWRhYmxlKGFSZWFkYWJsZSk7CiAg
ICAgICAgfQogICAgICBleHBsaWNpdCBuc1NoYXJhYmxlQ1N0cmluZyggY29uc3Qgc2hhcmVkX2J1
ZmZlcl9oYW5kbGVfdHlwZSogYUhhbmRsZSApCiAgICAgICAgICA6IG1CdWZmZXIoYUhhbmRsZSkK
ICAgICAgICB7CiAgICAgICAgICA7CiAgICAgICAgfQoKCiAgICAgIHNlbGZfdHlwZSYgb3BlcmF0
b3I9KCBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlwZSYgYVJlYWRhYmxlICkKICAgICAgICB7CiAg
ICAgICAgICBBc3NpZ24oYVJlYWRhYmxlKTsKICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAg
ICB9CiMgMTQ1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU2hhcmFibGVTdHJpbmcu
aCIKICAgICAgdm9pZCBBZG9wdCggY2hhcl90eXBlKiBhTmV3VmFsdWUgKTsKCgoKCgoKCiAgICBw
dWJsaWM6CiAgICAgIHZpcnR1YWwgdm9pZCBTZXRDYXBhY2l0eSggc2l6ZV90eXBlIGFOZXdDYXBh
Y2l0eSApOwogICAgICB2aXJ0dWFsIHZvaWQgU2V0TGVuZ3RoKCBzaXplX3R5cGUgYU5ld0xlbmd0
aCApOwogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsIHZvaWQgZG9fQXNzaWduRnJvbVJlYWRh
YmxlKCBjb25zdCBhYnN0cmFjdF9zdHJpbmdfdHlwZSYgYVJlYWRhYmxlICk7CiAgICAgIHZpcnR1
YWwgY29uc3Qgc2hhcmVkX2J1ZmZlcl9oYW5kbGVfdHlwZSogR2V0U2hhcmVkQnVmZmVySGFuZGxl
KCkgY29uc3Q7CgogICAgcHVibGljOgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZSogR2V0V3JpdGFi
bGVGcmFnbWVudCggZnJhZ21lbnRfdHlwZSYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiAp
OwoKICAgIHByb3RlY3RlZDoKICAgICAgc3RhdGljIHNoYXJlZF9idWZmZXJfaGFuZGxlX3R5cGUq
IEdldFNoYXJlZEVtcHR5QnVmZmVySGFuZGxlKCk7CgogICAgcHJvdGVjdGVkOgogICAgICBuc0F1
dG9CdWZmZXJIYW5kbGU8Y2hhcl90eXBlPiBtQnVmZmVyOwogIH07CiMgMjkgIi4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9zdHJpbmcvbnNQcm9taXNlRmxhdFN0cmluZy5oIiAyCiMgODMgIi4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNQcm9taXNlRmxhdFN0cmluZy5oIgpjbGFzcyBuc1Byb21p
c2VGbGF0U3RyaW5nCiAgICA6IHB1YmxpYyBuc0FGbGF0U3RyaW5nCiAgewogICAgZnJpZW5kIGNv
bnN0IG5zUHJvbWlzZUZsYXRTdHJpbmcgUHJvbWlzZUZsYXRTdHJpbmcoIGNvbnN0IGFic3RyYWN0
X3N0cmluZ190eXBlJiApOwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBuc1Byb21pc2VGbGF0
U3RyaW5nIHNlbGZfdHlwZTsKCiAgICBwdWJsaWM6CiAgICAgIG5zUHJvbWlzZUZsYXRTdHJpbmco
IGNvbnN0IHNlbGZfdHlwZSYgKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIG5zUHJvbWlzZUZsYXRT
dHJpbmcoKSA6IG1Qcm9taXNlZFN0cmluZygmbUZsYXR0ZW5lZFN0cmluZykgeyB9CiAgICAgIGV4
cGxpY2l0IG5zUHJvbWlzZUZsYXRTdHJpbmcoIGNvbnN0IGFic3RyYWN0X3N0cmluZ190eXBlJiBh
U3RyaW5nICk7CgoKICAgICAgdmlydHVhbCBjb25zdCBidWZmZXJfaGFuZGxlX3R5cGUqIEdldEZs
YXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBjb25zdCBidWZmZXJfaGFuZGxl
X3R5cGUqIEdldEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogICAgICB2aXJ0dWFsIGNvbnN0IHNoYXJl
ZF9idWZmZXJfaGFuZGxlX3R5cGUqIEdldFNoYXJlZEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwoKCgog
ICAgcHVibGljOgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSogZ2V0KCkgY29uc3Q7CiAg
ICAgIHZpcnR1YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29uc3Q7CiAgICBwcm90ZWN0ZWQ6CiAgICAg
IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKiBHZXRSZWFkYWJsZUZyYWdtZW50KCBjb25zdF9mcmFn
bWVudF90eXBlJiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkgY29uc3Q7CgoKICAgIHBy
aXZhdGU6CgogICAgICB2b2lkIG9wZXJhdG9yPSggY29uc3QgbnNQcm9taXNlRmxhdFN0cmluZyYg
KTsKCiAgICBwcml2YXRlOgogICAgICBuc1NoYXJhYmxlU3RyaW5nIG1GbGF0dGVuZWRTdHJpbmc7
CiAgICAgIGNvbnN0IG5zQUZsYXRTdHJpbmcqIG1Qcm9taXNlZFN0cmluZzsKICB9OwoKY2xhc3Mg
bnNQcm9taXNlRmxhdENTdHJpbmcKICAgIDogcHVibGljIG5zQUZsYXRDU3RyaW5nCiAgewogICAg
ZnJpZW5kIGNvbnN0IG5zUHJvbWlzZUZsYXRDU3RyaW5nIFByb21pc2VGbGF0Q1N0cmluZyggY29u
c3QgYWJzdHJhY3Rfc3RyaW5nX3R5cGUmICk7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIG5z
UHJvbWlzZUZsYXRDU3RyaW5nIHNlbGZfdHlwZTsKCiAgICBwdWJsaWM6CiAgICAgIG5zUHJvbWlz
ZUZsYXRDU3RyaW5nKCBjb25zdCBzZWxmX3R5cGUmICk7CgogICAgcHJvdGVjdGVkOgogICAgICBu
c1Byb21pc2VGbGF0Q1N0cmluZygpIDogbVByb21pc2VkU3RyaW5nKCZtRmxhdHRlbmVkU3RyaW5n
KSB7IH0KICAgICAgZXhwbGljaXQgbnNQcm9taXNlRmxhdENTdHJpbmcoIGNvbnN0IGFic3RyYWN0
X3N0cmluZ190eXBlJiBhU3RyaW5nICk7CgoKICAgICAgdmlydHVhbCBjb25zdCBidWZmZXJfaGFu
ZGxlX3R5cGUqIEdldEZsYXRCdWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICAgdmlydHVhbCBjb25z
dCBidWZmZXJfaGFuZGxlX3R5cGUqIEdldEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogICAgICB2aXJ0
dWFsIGNvbnN0IHNoYXJlZF9idWZmZXJfaGFuZGxlX3R5cGUqIEdldFNoYXJlZEJ1ZmZlckhhbmRs
ZSgpIGNvbnN0OwoKCgogICAgcHVibGljOgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSog
Z2V0KCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29uc3Q7CiAgICBw
cm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKiBHZXRSZWFkYWJsZUZyYWdt
ZW50KCBjb25zdF9mcmFnbWVudF90eXBlJiwgbnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICkg
Y29uc3Q7CgoKICAgIHByaXZhdGU6CgogICAgICB2b2lkIG9wZXJhdG9yPSggY29uc3Qgc2VsZl90
eXBlJiApOwoKICAgIHByaXZhdGU6CiAgICAgIG5zU2hhcmFibGVDU3RyaW5nIG1GbGF0dGVuZWRT
dHJpbmc7CiAgICAgIGNvbnN0IG5zQUZsYXRDU3RyaW5nKiBtUHJvbWlzZWRTdHJpbmc7CiAgfTsK
CgppbmxpbmUKY29uc3QgbnNQcm9taXNlRmxhdFN0cmluZwpQcm9taXNlRmxhdFN0cmluZyggY29u
c3QgbnNBU3RyaW5nJiBhU3RyaW5nICkKICB7CiAgICByZXR1cm4gbnNQcm9taXNlRmxhdFN0cmlu
ZyhhU3RyaW5nKTsKICB9CgppbmxpbmUKY29uc3QgbnNQcm9taXNlRmxhdENTdHJpbmcKUHJvbWlz
ZUZsYXRDU3RyaW5nKCBjb25zdCBuc0FDU3RyaW5nJiBhU3RyaW5nICkKICB7CiAgICByZXR1cm4g
bnNQcm9taXNlRmxhdENTdHJpbmcoYVN0cmluZyk7CiAgfQojIDcxICIuLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvc3RyaW5nL25zU3RyaW5nMi5oIiAyCgoKCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L3N0cmluZy9uc1hQSURMU3RyaW5nLmgiIDEKIyAxMjggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9z
dHJpbmcvbnNYUElETFN0cmluZy5oIgpjbGFzcyBuc1hQSURMU3RyaW5nCiAgICA6IHB1YmxpYyBu
c1NoYXJhYmxlU3RyaW5nCiAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIG5zWFBJRExTdHJp
bmcgc2VsZl90eXBlOwoKICAgIHB1YmxpYzoKICAgICAgbnNYUElETFN0cmluZygpCiAgICAgICAg
ICA6IG5zU2hhcmFibGVTdHJpbmcoR2V0U2hhcmVkRW1wdHlCdWZmZXJIYW5kbGUoKSkKICAgICAg
ICB7CgoKCgoKICAgICAgICB9CgogICAgICBuc1hQSURMU3RyaW5nKCBjb25zdCBzZWxmX3R5cGUm
IGFTdHJpbmcgKQogICAgICAgICAgOiBuc1NoYXJhYmxlU3RyaW5nKGFTdHJpbmcubUJ1ZmZlci5n
ZXQoKSkKCiAgICAgICAgewoKCgoKCiAgICAgICAgfQoKICAgICAgZXhwbGljaXQgbnNYUElETFN0
cmluZyggY29uc3QgYWJzdHJhY3Rfc3RyaW5nX3R5cGUmIGFSZWFkYWJsZSApCiAgICAgICAgICA6
IG5zU2hhcmFibGVTdHJpbmcoYVJlYWRhYmxlKQogICAgICAgIHsKCgoKCgogICAgICAgIH0KIyAx
NzMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNYUElETFN0cmluZy5oIgogICAgICBz
ZWxmX3R5cGUmCiAgICAgIG9wZXJhdG9yPSggY29uc3QgYWJzdHJhY3Rfc3RyaW5nX3R5cGUmIGFS
ZWFkYWJsZSApCiAgICAgICAgewogICAgICAgICAgQXNzaWduKGFSZWFkYWJsZSk7CiAgICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKCgoKCgoKICAgICAgdm9pZCBBZG9wdCggY2hhcl90
eXBlKiBhTmV3VmFsdWUgKSB7ICpQcmVwYXJlRm9yVXNlQXNPdXRQYXJhbSgpID0gYU5ld1ZhbHVl
OyB9CgoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqIGdldCgpIGNvbnN0CiAgICAgICAg
ewogICAgICAgICAgcmV0dXJuIChtQnVmZmVyLT5HZXRJbXBsZW1lbnRhdGlvbkZsYWdzKCkgJiBz
aGFyZWRfYnVmZmVyX2hhbmRsZV90eXBlOjprSXNOVUxMKQogICAgICAgICAgICAgICAgICAgPyAw
CiAgICAgICAgICAgICAgICAgICA6IG1CdWZmZXItPkRhdGFTdGFydCgpOwogICAgICAgIH0KCgog
ICAgICBvcGVyYXRvciBjb25zdCBjaGFyX3R5cGUqKCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0K
ICAgICAgY2hhcl90eXBlIG9wZXJhdG9yW10oIGludCBpICkgY29uc3QgeyByZXR1cm4gZ2V0KClb
IGkgXTsgfQoKCiAgICAgIGNsYXNzIGdldHRlcl9Db3BpZXNfdAogICAgICAgIHsKICAgICAgICAg
IHB1YmxpYzoKICAgICAgICAgICAgZ2V0dGVyX0NvcGllc190KCBuc1hQSURMU3RyaW5nJiBhU3Ry
aW5nICkgOiBtU3RyaW5nKCZhU3RyaW5nKSB7IH0KCgoKICAgICAgICAgICAgb3BlcmF0b3IgY2hh
cl90eXBlKiooKSBjb25zdCB7IHJldHVybiBtU3RyaW5nLT5QcmVwYXJlRm9yVXNlQXNPdXRQYXJh
bSgpOyB9CgogICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgbnNYUElETFN0cmluZyogbVN0
cmluZzsKICAgICAgICB9OwoKICAgICAgZnJpZW5kIGNsYXNzIGdldHRlcl9Db3BpZXNfdDsKCiAg
ICBwcm90ZWN0ZWQ6CgoKCgogICAgICB2aXJ0dWFsIGNvbnN0IHNoYXJlZF9idWZmZXJfaGFuZGxl
X3R5cGUqIEdldFNoYXJlZEJ1ZmZlckhhbmRsZSgpIGNvbnN0OwoKCiAgICAgIGNoYXJfdHlwZSoq
IFByZXBhcmVGb3JVc2VBc091dFBhcmFtKCk7CgogICAgICBzdGF0aWMgc2hhcmVkX2J1ZmZlcl9o
YW5kbGVfdHlwZSogR2V0U2hhcmVkRW1wdHlCdWZmZXJIYW5kbGUoKTsKIyAyMzkgIi4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNYUElETFN0cmluZy5oIgogIH07CgppbmxpbmUKbnNYUElE
TFN0cmluZzo6Z2V0dGVyX0NvcGllc190CmdldHRlcl9Db3BpZXMoIG5zWFBJRExTdHJpbmcmIGFT
dHJpbmcgKQogIHsKICAgIHJldHVybiBuc1hQSURMU3RyaW5nOjpnZXR0ZXJfQ29waWVzX3QoYVN0
cmluZyk7CiAgfQoKCgpjbGFzcyBuc1hQSURMQ1N0cmluZwogICAgOiBwdWJsaWMgbnNTaGFyYWJs
ZUNTdHJpbmcKICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgbnNYUElETENTdHJpbmcgc2Vs
Zl90eXBlOwoKICAgIHB1YmxpYzoKICAgICAgbnNYUElETENTdHJpbmcoKQogICAgICAgICAgOiBu
c1NoYXJhYmxlQ1N0cmluZyhHZXRTaGFyZWRFbXB0eUJ1ZmZlckhhbmRsZSgpKQogICAgICAgIHsK
CgoKCgogICAgICAgIH0KCiAgICAgIG5zWFBJRExDU3RyaW5nKCBjb25zdCBzZWxmX3R5cGUmIGFT
dHJpbmcgKQogICAgICAgICAgOiBuc1NoYXJhYmxlQ1N0cmluZyhhU3RyaW5nLm1CdWZmZXIuZ2V0
KCkpCgogICAgICAgIHsKCgoKCgogICAgICAgIH0KIyAyODUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9zdHJpbmcvbnNYUElETFN0cmluZy5oIgogICAgICBzZWxmX3R5cGUmCiAgICAgIG9wZXJhdG9y
PSggY29uc3QgYWJzdHJhY3Rfc3RyaW5nX3R5cGUmIGFSZWFkYWJsZSApCiAgICAgICAgewogICAg
ICAgICAgQXNzaWduKGFSZWFkYWJsZSk7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAg
fQoKCgoKCgoKICAgICAgdm9pZCBBZG9wdCggY2hhcl90eXBlKiBhTmV3VmFsdWUgKSB7ICpQcmVw
YXJlRm9yVXNlQXNPdXRQYXJhbSgpID0gYU5ld1ZhbHVlOyB9CgoKICAgICAgdmlydHVhbCBjb25z
dCBjaGFyX3R5cGUqIGdldCgpIGNvbnN0CiAgICAgICAgewogICAgICAgICAgcmV0dXJuIChtQnVm
ZmVyLT5HZXRJbXBsZW1lbnRhdGlvbkZsYWdzKCkgJiBzaGFyZWRfYnVmZmVyX2hhbmRsZV90eXBl
OjprSXNOVUxMKQogICAgICAgICAgICAgICAgICAgPyAwCiAgICAgICAgICAgICAgICAgICA6IG1C
dWZmZXItPkRhdGFTdGFydCgpOwogICAgICAgIH0KCgogICAgICBvcGVyYXRvciBjb25zdCBjaGFy
X3R5cGUqKCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KICAgICAgY2hhcl90eXBlIG9wZXJhdG9y
W10oIGludCBpICkgY29uc3QgeyByZXR1cm4gZ2V0KClbIGkgXTsgfQoKCiAgICAgIGNsYXNzIGdl
dHRlcl9Db3BpZXNfdAogICAgICAgIHsKICAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgZ2V0
dGVyX0NvcGllc190KCBuc1hQSURMQ1N0cmluZyYgYVN0cmluZyApIDogbVN0cmluZygmYVN0cmlu
ZykgeyB9CgoKCiAgICAgICAgICAgIG9wZXJhdG9yIGNoYXJfdHlwZSoqKCkgY29uc3QgeyByZXR1
cm4gbVN0cmluZy0+UHJlcGFyZUZvclVzZUFzT3V0UGFyYW0oKTsgfQoKICAgICAgICAgIHByaXZh
dGU6CiAgICAgICAgICAgIG5zWFBJRExDU3RyaW5nKiBtU3RyaW5nOwogICAgICAgIH07CgogICAg
ICBmcmllbmQgY2xhc3MgZ2V0dGVyX0NvcGllc190OwoKICAgIHByb3RlY3RlZDoKCgoKCiAgICAg
IHZpcnR1YWwgY29uc3Qgc2hhcmVkX2J1ZmZlcl9oYW5kbGVfdHlwZSogR2V0U2hhcmVkQnVmZmVy
SGFuZGxlKCkgY29uc3Q7CgoKICAgICAgY2hhcl90eXBlKiogUHJlcGFyZUZvclVzZUFzT3V0UGFy
YW0oKTsKCiAgICAgIHN0YXRpYyBzaGFyZWRfYnVmZmVyX2hhbmRsZV90eXBlKiBHZXRTaGFyZWRF
bXB0eUJ1ZmZlckhhbmRsZSgpOwojIDM1MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9u
c1hQSURMU3RyaW5nLmgiCiAgfTsKCmlubGluZQpuc1hQSURMQ1N0cmluZzo6Z2V0dGVyX0NvcGll
c190CmdldHRlcl9Db3BpZXMoIG5zWFBJRExDU3RyaW5nJiBhU3RyaW5nICkKICB7CiAgICByZXR1
cm4gbnNYUElETENTdHJpbmc6OmdldHRlcl9Db3BpZXNfdChhU3RyaW5nKTsKICB9CiMgNzUgIi4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcyLmgiIDIKCgojIDEgIi4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHIuaCIgMQojIDIxMiAiLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL3N0cmluZy9uc1N0ci5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc01l
bW9yeS5oIiAxCiMgNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc01lbW9yeS5oIgoj
IDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lNZW1vcnkuaCIgMQojIDU0ICIuLi8u
Li8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJTWVtb3J5LmgiCmNsYXNzIG5zSU1lbW9yeSA6IHB1
YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlE
KCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg1OWU3ZTc3YSwgMHgzOGU0LCAweDExZDQs
IHsgMHg4YywgMHhmNSwgMHgwMCwgMHg2MCwgMHhiMCwgMHhmYywgMHgxNCwgMHhhMyB9fTsgcmV0
dXJuIGlpZDt9CiMgNjggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lNZW1vcnkuaCIK
ICB2aXJ0dWFsIHZvaWQgKiBBbGxvYyhzaXplX3Qgc2l6ZSkgPSAwOwojIDg1ICIuLi8uLi8uLi9k
aXN0L2luY2x1ZGUveHBjb20vbnNJTWVtb3J5LmgiCiAgdmlydHVhbCB2b2lkICogUmVhbGxvYyh2
b2lkICogcHRyLCBzaXplX3QgbmV3U2l6ZSkgPSAwOwojIDk0ICIuLi8uLi8uLi9kaXN0L2luY2x1
ZGUveHBjb20vbnNJTWVtb3J5LmgiCiAgdmlydHVhbCB2b2lkIEZyZWUodm9pZCAqIHB0cikgPSAw
OwojIDEwNiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSU1lbW9yeS5oIgogIHZpcnR1
YWwgbnNyZXN1bHQgSGVhcE1pbmltaXplKFBSQm9vbCBpbW1lZGlhdGUpID0gMDsKCgoKCgoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBJc0xvd01lbW9yeShQUkJvb2wgKl9yZXR2YWwpID0gMDsKCn07CiMg
NDIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc01lbW9yeS5oIiAyCiMgNjMgIi4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc01lbW9yeS5oIgpjbGFzcyBuc01lbW9yeQp7CnB1Ymxp
YzoKICAgIHN0YXRpYyB2b2lkKiBBbGxvYyhzaXplX3Qgc2l6ZSk7CiAgICBzdGF0aWMgdm9pZCog
UmVhbGxvYyh2b2lkKiBwdHIsIHNpemVfdCBzaXplKTsKICAgIHN0YXRpYyB2b2lkIEZyZWUodm9p
ZCogcHRyKTsKICAgIHN0YXRpYyBuc3Jlc3VsdCBIZWFwTWluaW1pemUoUFJCb29sIGFJbW1lZGlh
dGUpOwogICAgc3RhdGljIHZvaWQqIENsb25lKGNvbnN0IHZvaWQqIHB0ciwgc2l6ZV90IHNpemUp
OwogICAgc3RhdGljIG5zSU1lbW9yeSogR2V0R2xvYmFsTWVtb3J5U2VydmljZSgpOwp9OwojIDIx
MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0ci5oIiAyCgoKIyAxICIvdmFyL3Rt
cC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w
bGhhc2guaCIgMQojIDQzICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96
aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbGhhc2guaCIKZXh0ZXJuICJDIiB7Cgp0eXBlZGVmIHN0
cnVjdCBQTEhhc2hFbnRyeSBQTEhhc2hFbnRyeTsKdHlwZWRlZiBzdHJ1Y3QgUExIYXNoVGFibGUg
UExIYXNoVGFibGU7CnR5cGVkZWYgUFJVaW50MzIgUExIYXNoTnVtYmVyOwoKdHlwZWRlZiBQTEhh
c2hOdW1iZXIgKCAqUExIYXNoRnVuY3Rpb24pKGNvbnN0IHZvaWQgKmtleSk7CnR5cGVkZWYgUFJJ
bnRuICggKlBMSGFzaENvbXBhcmF0b3IpKGNvbnN0IHZvaWQgKnYxLCBjb25zdCB2b2lkICp2Mik7
CgoKCgp0eXBlZGVmIFBSSW50biAoICpQTEhhc2hFbnVtZXJhdG9yKShQTEhhc2hFbnRyeSAqaGUs
IFBSSW50biBpLCB2b2lkICphcmcpOwojIDY3ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4z
LXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbGhhc2guaCIKdHlwZWRlZiBzdHJ1
Y3QgUExIYXNoQWxsb2NPcHMgewogICAgdm9pZCAqICggKmFsbG9jVGFibGUpKHZvaWQgKnBvb2ws
IFBSU2l6ZSBzaXplKTsKICAgIHZvaWQgKCAqZnJlZVRhYmxlKSh2b2lkICpwb29sLCB2b2lkICpp
dGVtKTsKICAgIFBMSGFzaEVudHJ5ICogKCAqYWxsb2NFbnRyeSkodm9pZCAqcG9vbCwgY29uc3Qg
dm9pZCAqa2V5KTsKICAgIHZvaWQgKCAqZnJlZUVudHJ5KSh2b2lkICpwb29sLCBQTEhhc2hFbnRy
eSAqaGUsIFBSVWludG4gZmxhZyk7Cn0gUExIYXNoQWxsb2NPcHM7CgoKCgpzdHJ1Y3QgUExIYXNo
RW50cnkgewogICAgUExIYXNoRW50cnkgKm5leHQ7CiAgICBQTEhhc2hOdW1iZXIga2V5SGFzaDsK
ICAgIGNvbnN0IHZvaWQgKmtleTsKICAgIHZvaWQgKnZhbHVlOwp9OwoKc3RydWN0IFBMSGFzaFRh
YmxlIHsKICAgIFBMSGFzaEVudHJ5ICoqYnVja2V0czsKICAgIFBSVWludDMyIG5lbnRyaWVzOwog
ICAgUFJVaW50MzIgc2hpZnQ7CiAgICBQTEhhc2hGdW5jdGlvbiBrZXlIYXNoOwogICAgUExIYXNo
Q29tcGFyYXRvciBrZXlDb21wYXJlOwogICAgUExIYXNoQ29tcGFyYXRvciB2YWx1ZUNvbXBhcmU7
CiAgICBjb25zdCBQTEhhc2hBbGxvY09wcyAqYWxsb2NPcHM7CiAgICB2b2lkICphbGxvY1Bvb2w7
CgoKCgoKCn07CgoKCgoKZXh0ZXJuIFBMSGFzaFRhYmxlICoKUExfTmV3SGFzaFRhYmxlKFBSVWlu
dDMyIG51bUJ1Y2tldHMsIFBMSGFzaEZ1bmN0aW9uIGtleUhhc2gsCiAgICAgICAgICAgICAgICBQ
TEhhc2hDb21wYXJhdG9yIGtleUNvbXBhcmUsIFBMSGFzaENvbXBhcmF0b3IgdmFsdWVDb21wYXJl
LAogICAgICAgICAgICAgICAgY29uc3QgUExIYXNoQWxsb2NPcHMgKmFsbG9jT3BzLCB2b2lkICph
bGxvY1Bvb2wpOwoKZXh0ZXJuIHZvaWQKUExfSGFzaFRhYmxlRGVzdHJveShQTEhhc2hUYWJsZSAq
aHQpOwoKCmV4dGVybiBQTEhhc2hFbnRyeSAqClBMX0hhc2hUYWJsZUFkZChQTEhhc2hUYWJsZSAq
aHQsIGNvbnN0IHZvaWQgKmtleSwgdm9pZCAqdmFsdWUpOwoKZXh0ZXJuIFBSQm9vbApQTF9IYXNo
VGFibGVSZW1vdmUoUExIYXNoVGFibGUgKmh0LCBjb25zdCB2b2lkICprZXkpOwoKZXh0ZXJuIHZv
aWQgKgpQTF9IYXNoVGFibGVMb29rdXAoUExIYXNoVGFibGUgKmh0LCBjb25zdCB2b2lkICprZXkp
OwoKZXh0ZXJuIHZvaWQgKgpQTF9IYXNoVGFibGVMb29rdXBDb25zdChQTEhhc2hUYWJsZSAqaHQs
IGNvbnN0IHZvaWQgKmtleSk7CgpleHRlcm4gUFJJbnRuClBMX0hhc2hUYWJsZUVudW1lcmF0ZUVu
dHJpZXMoUExIYXNoVGFibGUgKmh0LCBQTEhhc2hFbnVtZXJhdG9yIGYsIHZvaWQgKmFyZyk7CgoK
ZXh0ZXJuIFBMSGFzaE51bWJlcgpQTF9IYXNoU3RyaW5nKGNvbnN0IHZvaWQgKmtleSk7CgoKZXh0
ZXJuIFBSSW50bgpQTF9Db21wYXJlU3RyaW5ncyhjb25zdCB2b2lkICp2MSwgY29uc3Qgdm9pZCAq
djIpOwoKCmV4dGVybiBQUkludG4KUExfQ29tcGFyZVZhbHVlcyhjb25zdCB2b2lkICp2MSwgY29u
c3Qgdm9pZCAqdjIpOwoKCmV4dGVybiBQTEhhc2hFbnRyeSAqKgpQTF9IYXNoVGFibGVSYXdMb29r
dXAoUExIYXNoVGFibGUgKmh0LCBQTEhhc2hOdW1iZXIga2V5SGFzaCwgY29uc3Qgdm9pZCAqa2V5
KTsKCmV4dGVybiBQTEhhc2hFbnRyeSAqKgpQTF9IYXNoVGFibGVSYXdMb29rdXBDb25zdChQTEhh
c2hUYWJsZSAqaHQsIFBMSGFzaE51bWJlciBrZXlIYXNoLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCB2b2lkICprZXkpOwoKZXh0ZXJuIFBMSGFzaEVudHJ5ICoKUExfSGFzaFRhYmxl
UmF3QWRkKFBMSGFzaFRhYmxlICpodCwgUExIYXNoRW50cnkgKipoZXAsIFBMSGFzaE51bWJlciBr
ZXlIYXNoLAogICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSk7
CgpleHRlcm4gdm9pZApQTF9IYXNoVGFibGVSYXdSZW1vdmUoUExIYXNoVGFibGUgKmh0LCBQTEhh
c2hFbnRyeSAqKmhlcCwgUExIYXNoRW50cnkgKmhlKTsKCgpleHRlcm4gUFJJbnRuClBMX0hhc2hU
YWJsZUR1bXAoUExIYXNoVGFibGUgKmh0LCBQTEhhc2hFbnVtZXJhdG9yIGR1bXAsIEZJTEUgKmZw
KTsKCn0KIyAyMTYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHIuaCIgMgojIDEg
Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJTaGFyZWQuaCIgMQoKCgoKCmVudW0g
ZUNoYXJTaXplIHtlT25lQnl0ZT0wLGVUd29CeXRlPTF9OwojIDIxNyAiLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL3N0cmluZy9uc1N0ci5oIiAyCiMgMjM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3Ry
aW5nL25zU3RyLmgiCmNvbnN0IFBSSW50MzIga0RlZmF1bHRTdHJpbmdTaXplID0gNjQ7CmNvbnN0
IFBSSW50MzIga05vdEZvdW5kID0gLTE7CgoKCmNsYXNzIG5zQVN0cmluZzsKY2xhc3MgQ0J1ZkRl
c2NyaXB0b3IgewpwdWJsaWM6CiAgQ0J1ZkRlc2NyaXB0b3IoY2hhciogYVN0cmluZywgUFJCb29s
IGFTdGFja0Jhc2VkLFBSVWludDMyIGFDYXBhY2l0eSxQUkludDMyIGFMZW5ndGg9LTEpOwogIENC
dWZEZXNjcmlwdG9yKGNvbnN0IGNoYXIqIGFTdHJpbmcsIFBSQm9vbCBhU3RhY2tCYXNlZCxQUlVp
bnQzMiBhQ2FwYWNpdHksUFJJbnQzMiBhTGVuZ3RoPS0xKTsKICBDQnVmRGVzY3JpcHRvcihQUlVu
aWNoYXIqIGFTdHJpbmcsIFBSQm9vbCBhU3RhY2tCYXNlZCxQUlVpbnQzMiBhQ2FwYWNpdHksUFJJ
bnQzMiBhTGVuZ3RoPS0xKTsKICBDQnVmRGVzY3JpcHRvcihjb25zdCBQUlVuaWNoYXIqIGFTdHJp
bmcsUFJCb29sIGFTdGFja0Jhc2VkLFBSVWludDMyIGFDYXBhY2l0eSxQUkludDMyIGFMZW5ndGg9
LTEpOwoKICBjaGFyKiBtQnVmZmVyOwogIGVDaGFyU2l6ZSBtQ2hhclNpemU7CiAgUFJVaW50MzIg
bUNhcGFjaXR5OwogIFBSSW50MzIgbUxlbmd0aDsKICBQUkJvb2wgbVN0YWNrQmFzZWQ7CiAgUFJC
b29sIG1Jc0NvbnN0Owp9OwoKCgoKc3RydWN0IG5zU3RyIHsKCnByb3RlY3RlZDoKICBuc1N0cigp
IHsKCgoKICB9CgogIH5uc1N0cigpIHsKCgoKICB9Cgpwcm90ZWN0ZWQ6CiAgdW5pb24gewogICAg
Y2hhciogbVN0cjsKICAgIFBSVW5pY2hhciogbVVTdHI7CiAgfTsKCiAgUFJVaW50MzIgbUxlbmd0
aDsKICBQUlVpbnQzMiBtQ2FwYWNpdHlBbmRGbGFnczsKCiAgaW5saW5lIFBSVWludDMyIEdldENh
cGFjaXR5KCkgY29uc3QgewoKICAgIHJldHVybiAobUNhcGFjaXR5QW5kRmxhZ3MgJiAofigoMTw8
KDMxKSkgfCAoMTw8KDMwKSkpKSk7CiAgfQoKICBpbmxpbmUgUFJCb29sIEdldE93bnNCdWZmZXIo
KSBjb25zdCB7CiAgICByZXR1cm4gKChtQ2FwYWNpdHlBbmRGbGFncyAmICgxPDwoMzApKSkgIT0g
MCk7CiAgfQoKICBpbmxpbmUgZUNoYXJTaXplIEdldENoYXJTaXplKCkgY29uc3QgewogICAgcmV0
dXJuIGVDaGFyU2l6ZShtQ2FwYWNpdHlBbmRGbGFncyA+PiAoMzEpKTsKICB9Cgpwcml2YXRlOgoK
ICBpbmxpbmUgdm9pZCBTZXRJbnRlcm5hbENhcGFjaXR5KFBSVWludDMyIGFDYXBhY2l0eSkgewog
ICAgbUNhcGFjaXR5QW5kRmxhZ3MgPQogICAgICAoKG1DYXBhY2l0eUFuZEZsYWdzICYgfih+KCgx
PDwoMzEpKSB8ICgxPDwoMzApKSkpKSB8CiAgICAgICAoYUNhcGFjaXR5ICYgKH4oKDE8PCgzMSkp
IHwgKDE8PCgzMCkpKSkpKTsKICB9CgogIGlubGluZSB2b2lkIFNldENoYXJTaXplKGVDaGFyU2l6
ZSBhQ2hhclNpemUpIHsKICAgIG1DYXBhY2l0eUFuZEZsYWdzID0KICAgICAgKChtQ2FwYWNpdHlB
bmRGbGFncyAmIH4oMTw8KDMxKSkpIHwKICAgICAgIChQUlVpbnQzMihhQ2hhclNpemUpIDw8ICgz
MSkpKTsKICB9CgogIGlubGluZSB2b2lkIFNldE93bnNCdWZmZXIoUFJCb29sIGFPd25zQnVmZmVy
KSB7CiAgICBtQ2FwYWNpdHlBbmRGbGFncyA9CiAgICAgIChtQ2FwYWNpdHlBbmRGbGFncyAmIH4o
MTw8KDMwKSkgfAogICAgICAgKGFPd25zQnVmZmVyID8gMSA6IDApIDw8ICgzMCkpOwogIH0KCiAg
aW5saW5lIFBSVW5pY2hhciBHZXRDaGFyQXQoUFJVaW50MzIgYW5JbmRleCkgY29uc3QgewogICAg
aWYoYW5JbmRleDxtTGVuZ3RoKSB7CiAgICAgIHJldHVybiAoZVR3b0J5dGU9PUdldENoYXJTaXpl
KCkpID8gbVVTdHJbYW5JbmRleF0gOiAoUFJVbmljaGFyKW1TdHJbYW5JbmRleF07CiAgICB9CiAg
ICByZXR1cm4gMDsKICB9CgpwdWJsaWM6CiAgZnJpZW5kCiAgY2hhcioKICBUb05ld1VURjhTdHJp
bmcoIGNvbnN0IG5zQVN0cmluZyYgYVNvdXJjZSApOwogIGZyaWVuZCBpbmxpbmUgdm9pZCBBZGRO
dWxsVGVybWluYXRvcihuc1N0ciYgYURlc3QpOwogIGZyaWVuZCBjbGFzcyBuc1N0clByaXZhdGU7
CiAgZnJpZW5kIGNsYXNzIG5zU3RyaW5nOwogIGZyaWVuZCBjbGFzcyBuc0NTdHJpbmc7Cn07CiMg
MzM5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyLmgiCmlubGluZSBQUkludDMy
IE1pbkludChQUkludDMyIGFuSW50MSxQUkludDMyIGFuSW50Mil7CiAgcmV0dXJuIChhbkludDE8
YW5JbnQyKSA/IGFuSW50MSA6IGFuSW50MjsKfQoKaW5saW5lIFBSSW50MzIgTWF4SW50KFBSSW50
MzIgYW5JbnQxLFBSSW50MzIgYW5JbnQyKXsKICByZXR1cm4gKGFuSW50MTxhbkludDIpID8gYW5J
bnQyIDogYW5JbnQxOwp9CgppbmxpbmUgdm9pZCBBZGROdWxsVGVybWluYXRvcihuc1N0ciYgYURl
c3QpIHsKICBpZihlVHdvQnl0ZT09YURlc3QuR2V0Q2hhclNpemUoKSkKICAgIGFEZXN0Lm1VU3Ry
W2FEZXN0Lm1MZW5ndGhdPTA7CiAgZWxzZSBhRGVzdC5tU3RyW2FEZXN0Lm1MZW5ndGhdPTA7Cn0K
CgoKCgoKCmlubGluZSB2b2lkIFJlY3ljbGUoIGNoYXIqIGFCdWZmZXIpIHsgbnNNZW1vcnk6OkZy
ZWUoYUJ1ZmZlcik7IH0KaW5saW5lIHZvaWQgUmVjeWNsZSggUFJVbmljaGFyKiBhQnVmZmVyKSB7
IG5zTWVtb3J5OjpGcmVlKGFCdWZmZXIpOyB9CiMgNzggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9z
dHJpbmcvbnNTdHJpbmcyLmgiIDIKCmNsYXNzIFVURjh0cmFpdHMKICB7CiAgICBwdWJsaWM6CiAg
ICAgIHN0YXRpYyBQUkJvb2wgaXNBU0NJSShjaGFyIGMpIHsgcmV0dXJuIChjICYgMHg4MCkgPT0g
MHgwMDsgfQogICAgICBzdGF0aWMgUFJCb29sIGlzSW5TZXEoY2hhciBjKSB7IHJldHVybiAoYyAm
IDB4QzApID09IDB4ODA7IH0KICAgICAgc3RhdGljIFBSQm9vbCBpczJieXRlKGNoYXIgYykgeyBy
ZXR1cm4gKGMgJiAweEUwKSA9PSAweEMwOyB9CiAgICAgIHN0YXRpYyBQUkJvb2wgaXMzYnl0ZShj
aGFyIGMpIHsgcmV0dXJuIChjICYgMHhGMCkgPT0gMHhFMDsgfQogICAgICBzdGF0aWMgUFJCb29s
IGlzNGJ5dGUoY2hhciBjKSB7IHJldHVybiAoYyAmIDB4RjgpID09IDB4RjA7IH0KICAgICAgc3Rh
dGljIFBSQm9vbCBpczVieXRlKGNoYXIgYykgeyByZXR1cm4gKGMgJiAweEZDKSA9PSAweEY4OyB9
CiAgICAgIHN0YXRpYyBQUkJvb2wgaXM2Ynl0ZShjaGFyIGMpIHsgcmV0dXJuIChjICYgMHhGRSkg
PT0gMHhGQzsgfQogIH07CgoKCgoKY2xhc3MgbnNJU2l6ZU9mSGFuZGxlcjsKY2xhc3MgbnNDU3Ry
aW5nOwoKCmNsYXNzIG5zU3RyaW5nIDoKICBwdWJsaWMgbnNBRmxhdFN0cmluZywKICBwdWJsaWMg
bnNTdHIgewoKcHVibGljOgogIGZyaWVuZCBjbGFzcyBuc0NTdHJpbmc7CiAgZnJpZW5kIGNsYXNz
IG5zTGluZWJyZWFrQ29udmVydGVyOwogIGZyaWVuZCB2b2lkIFRvTG93ZXJDYXNlKCBuc1N0cmlu
ZyYgKTsKICBmcmllbmQgdm9pZCBUb1VwcGVyQ2FzZSggbnNTdHJpbmcmICk7Cgpwcm90ZWN0ZWQ6
CiAgdmlydHVhbCBjb25zdCBuc0J1ZmZlckhhbmRsZTxQUlVuaWNoYXI+KiBHZXRGbGF0QnVmZmVy
SGFuZGxlKCkgY29uc3Q7CiAgdmlydHVhbCBjb25zdCBQUlVuaWNoYXIqIEdldFJlYWRhYmxlRnJh
Z21lbnQoIG5zUmVhZGFibGVGcmFnbWVudDxQUlVuaWNoYXI+JiwgbnNGcmFnbWVudFJlcXVlc3Qs
IFBSVWludDMyICkgY29uc3Q7CiAgdmlydHVhbCBQUlVuaWNoYXIqIEdldFdyaXRhYmxlRnJhZ21l
bnQoIG5zV3JpdGFibGVGcmFnbWVudDxQUlVuaWNoYXI+JiwgbnNGcmFnbWVudFJlcXVlc3QsIFBS
VWludDMyICk7CgpwdWJsaWM6CiAgdmlydHVhbCBjb25zdCBQUlVuaWNoYXIqIGdldCgpIGNvbnN0
OwoKcHVibGljOgoKCgogIG5zU3RyaW5nKCk7CgoKCgoKICBuc1N0cmluZyhjb25zdCBuc1N0cmlu
ZyYgYVN0cmluZyk7CgogIGV4cGxpY2l0IG5zU3RyaW5nKGNvbnN0IG5zQVN0cmluZyYpOwoKICBl
eHBsaWNpdCBuc1N0cmluZyhjb25zdCBQUlVuaWNoYXIqKTsKICBuc1N0cmluZyhjb25zdCBQUlVu
aWNoYXIqLCBQUkludDMyKTsKCgoKCgoKICB2aXJ0dWFsIH5uc1N0cmluZygpOwoKCgoKCiAgdmly
dHVhbCBQUlVpbnQzMiBMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtTGVuZ3RoOyB9CgoKCgoKCgog
IHZvaWQgU2V0TGVuZ3RoKFBSVWludDMyIGFMZW5ndGgpOwoKCgoKCgogIHZvaWQgU2V0Q2FwYWNp
dHkoUFJVaW50MzIgYUxlbmd0aCk7CiMgMTcwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5n
L25zU3RyaW5nMi5oIgogIFBSQm9vbCBTZXRDaGFyQXQoUFJVbmljaGFyIGFDaGFyLFBSVWludDMy
IGFuSW5kZXgpOwojIDE4NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZzIu
aCIKICB2b2lkIFN0cmlwQ2hhcnMoIGNvbnN0IGNoYXIqIGFTZXQgKTsKICB2b2lkIFN0cmlwQ2hh
ciggUFJVbmljaGFyIGFDaGFyLCBQUkludDMyIGFuT2Zmc2V0PTAgKTsKCgoKCgogIHZvaWQgU3Ry
aXBXaGl0ZXNwYWNlKCk7CgoKCgoKCiAgdm9pZCBSZXBsYWNlQ2hhciggUFJVbmljaGFyIGFuT2xk
Q2hhciwgUFJVbmljaGFyIGFOZXdDaGFyICk7CiAgdm9pZCBSZXBsYWNlQ2hhciggY29uc3QgY2hh
ciogYVNldCwgUFJVbmljaGFyIGFOZXdDaGFyICk7CgogIHZvaWQgUmVwbGFjZVN1YnN0cmluZygg
Y29uc3QgbnNTdHJpbmcmIGFUYXJnZXQsIGNvbnN0IG5zU3RyaW5nJiBhTmV3VmFsdWUgKTsKICB2
b2lkIFJlcGxhY2VTdWJzdHJpbmcoIGNvbnN0IFBSVW5pY2hhciogYVRhcmdldCwgY29uc3QgUFJV
bmljaGFyKiBhTmV3VmFsdWUgKTsKIyAyMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcv
bnNTdHJpbmcyLmgiCiAgdm9pZCBUcmltKGNvbnN0IGNoYXIqIGFTZXQsUFJCb29sIGFFbGltaW5h
dGVMZWFkaW5nPTEsUFJCb29sIGFFbGltaW5hdGVUcmFpbGluZz0xLFBSQm9vbCBhSWdub3JlUXVv
dGVzPTApOwojIDIyOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZzIuaCIK
ICB2b2lkIENvbXByZXNzV2hpdGVzcGFjZSggUFJCb29sIGFFbGltaW5hdGVMZWFkaW5nPTEsUFJC
b29sIGFFbGltaW5hdGVUcmFpbGluZz0xKTsKIyAyNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9z
dHJpbmcvbnNTdHJpbmcyLmgiCiAgY2hhciogVG9DU3RyaW5nKGNoYXIqIGFCdWYsUFJVaW50MzIg
YUJ1Zkxlbmd0aCxQUlVpbnQzMiBhbk9mZnNldD0wKSBjb25zdDsKCgoKCgoKICBmbG9hdCBUb0Zs
b2F0KFBSSW50MzIqIGFFcnJvckNvZGUpIGNvbnN0OwoKCgoKCgoKICBQUkludDMyIFRvSW50ZWdl
cihQUkludDMyKiBhRXJyb3JDb2RlLFBSVWludDMyIGFSYWRpeD0oMTApKSBjb25zdDsKIyAyNzIg
Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcyLmgiCiAgbnNTdHJpbmcmIG9w
ZXJhdG9yPSggY29uc3QgbnNTdHJpbmcmIGFTdHJpbmcgKSB7IEFzc2lnbihhU3RyaW5nKTsgcmV0
dXJuICp0aGlzOyB9CiAgbnNTdHJpbmcmIG9wZXJhdG9yPSggY29uc3QgbnNBU3RyaW5nJiBhUmVh
ZGFibGUgKSB7IEFzc2lnbihhUmVhZGFibGUpOyByZXR1cm4gKnRoaXM7IH0KCiAgbnNTdHJpbmcm
IG9wZXJhdG9yPSggY29uc3QgUFJVbmljaGFyKiBhUHRyICkgeyBBc3NpZ24oYVB0cik7IHJldHVy
biAqdGhpczsgfQogIG5zU3RyaW5nJiBvcGVyYXRvcj0oIFBSVW5pY2hhciBhQ2hhciApIHsgQXNz
aWduKGFDaGFyKTsgcmV0dXJuICp0aGlzOyB9CgogIHZvaWQgQXNzaWduV2l0aENvbnZlcnNpb24o
Y29uc3QgY2hhciopOwogIHZvaWQgQXNzaWduV2l0aENvbnZlcnNpb24oY29uc3QgY2hhciosIFBS
SW50MzIpOwojIDI5MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZzIuaCIK
ICB2b2lkIEFwcGVuZEludChQUkludDMyLCBQUkludDMyPTEwKTsKICB2b2lkIEFwcGVuZEZsb2F0
KGRvdWJsZSk7CiAgdm9pZCBBcHBlbmRXaXRoQ29udmVyc2lvbihjb25zdCBjaGFyKiwgUFJJbnQz
Mj0tMSk7CgogIHZpcnR1YWwgdm9pZCBkb19BcHBlbmRGcm9tRWxlbWVudCggUFJVbmljaGFyICk7
CgoKCiAgdm9pZCBJbnNlcnRXaXRoQ29udmVyc2lvbihjb25zdCBjaGFyKiwgUFJVaW50MzIsIFBS
SW50MzI9LTEpOwoKCiAgdm9pZCBBZG9wdCggUFJVbmljaGFyKiBhUHRyLCBQUkludDMyIGFMZW5n
dGggPSAtMSApOwojIDMyMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZzIu
aCIKICBzaXplX3R5cGUgTGVmdCggc2VsZl90eXBlJiwgc2l6ZV90eXBlICkgY29uc3Q7CiAgc2l6
ZV90eXBlIE1pZCggc2VsZl90eXBlJiwgUFJVaW50MzIsIFBSVWludDMyICkgY29uc3Q7CiAgc2l6
ZV90eXBlIFJpZ2h0KCBzZWxmX3R5cGUmLCBzaXplX3R5cGUgKSBjb25zdDsKIyAzMzcgIi4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcyLmgiCiAgUFJJbnQzMiBGaW5kQ2hhcihQ
UlVuaWNoYXIgYUNoYXIsIFBSSW50MzIgYW5PZmZzZXQ9MCwgUFJJbnQzMiBhQ291bnQ9LTEpIGNv
bnN0OwojIDM0OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZzIuaCIKICBQ
UkludDMyIEZpbmQoY29uc3QgbnNDU3RyaW5nJiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0w
LFBSSW50MzIgYW5PZmZzZXQ9MCxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBG
aW5kKGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhbk9m
ZnNldD0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKCiAgUFJJbnQzMiBGaW5kKGNvbnN0IG5z
QUZsYXRTdHJpbmcmIGFTdHJpbmcsIFBSSW50MzIgYW5PZmZzZXQ9MCwgUFJJbnQzMiBhQ291bnQ9
LTEpIGNvbnN0OwoKICBQUkludDMyIEZpbmQoY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nLCBQUklu
dDMyIGFuT2Zmc2V0PTAsIFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKIyAzNjMgIi4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcyLmgiCiAgUFJJbnQzMiBGaW5kQ2hhckluU2V0
KGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJJbnQzMiBhbk9mZnNldD0wKSBjb25zdDsKICBQUkludDMy
IEZpbmRDaGFySW5TZXQoY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nLFBSSW50MzIgYW5PZmZzZXQ9
MCkgY29uc3Q7CiMgMzc0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nMi5o
IgogIFBSSW50MzIgUkZpbmQoY29uc3QgY2hhciogYUNTdHJpbmcsUFJCb29sIGFJZ25vcmVDYXNl
PTAsUFJJbnQzMiBhbk9mZnNldD0tMSxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CgogIFBSSW50
MzIgUkZpbmQoY29uc3QgbnNBRmxhdFN0cmluZyYgYVN0cmluZywgUFJJbnQzMiBhbk9mZnNldD0t
MSxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7CiAgUFJJbnQzMiBSRmluZChjb25zdCBQUlVuaWNo
YXIqIGFTdHJpbmcsUFJJbnQzMiBhbk9mZnNldD0tMSxQUkludDMyIGFDb3VudD0tMSkgY29uc3Q7
CiMgMzg5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nMi5oIgogIFBSSW50
MzIgUkZpbmRDaGFyKFBSVW5pY2hhciBhQ2hhcixQUkludDMyIGFuT2Zmc2V0PS0xLFBSSW50MzIg
YUNvdW50PS0xKSBjb25zdDsKIyAzOTggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNT
dHJpbmcyLmgiCiAgUFJJbnQzMiBSRmluZENoYXJJblNldChjb25zdCBQUlVuaWNoYXIqIGFTdHJp
bmcsUFJJbnQzMiBhbk9mZnNldD0tMSkgY29uc3Q7CiMgNDE0ICIuLi8uLi8uLi9kaXN0L2luY2x1
ZGUvc3RyaW5nL25zU3RyaW5nMi5oIgogIFBSSW50MzIgQ29tcGFyZVdpdGhDb252ZXJzaW9uKGNv
bnN0IGNoYXIqIGFTdHJpbmcsIFBSQm9vbCBhSWdub3JlQ2FzZT0wLCBQUkludDMyIGFDb3VudD0t
MSkgY29uc3Q7CgogIFBSQm9vbCBFcXVhbHNXaXRoQ29udmVyc2lvbihjb25zdCBjaGFyKiBhU3Ry
aW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYUNvdW50PS0xKSBjb25zdDsKCiAgUFJC
b29sIEVxdWFsc0lnbm9yZUNhc2UoY29uc3QgY2hhciogYVN0cmluZyxQUkludDMyIGFDb3VudD0t
MSkgY29uc3Q7CgoKCgoKCgogIFBSQm9vbCBJc0FTQ0lJKGNvbnN0IFBSVW5pY2hhciogYUJ1ZmZl
cj0wKTsKCgoKCgoKCiAgc3RhdGljIFBSQm9vbCBJc1NwYWNlKFBSVW5pY2hhciBjaCk7CiMgNDQ0
ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nMi5oIgpwcml2YXRlOgoKCiAg
dm9pZCBvcGVyYXRvcj0oIGNoYXIgKTsKICB2b2lkIEFzc2lnbldpdGhDb252ZXJzaW9uKCBjb25z
dCBQUlVuaWNoYXIqLCBQUkludDMyPS0xICk7CiAgdm9pZCBBcHBlbmRXaXRoQ29udmVyc2lvbigg
Y29uc3QgUFJVbmljaGFyKiwgUFJJbnQzMj0tMSApOwogIHZvaWQgSW5zZXJ0V2l0aENvbnZlcnNp
b24oIGNvbnN0IFBSVW5pY2hhciosIFBSVWludDMyLCBQUkludDMyPS0xICk7Cn07CgppbmxpbmUK
bnNTdHJpbmc6OnNpemVfdHlwZQpuc1N0cmluZzo6TGVmdCggbnNBU3RyaW5nJiBhUmVzdWx0LCBz
aXplX3R5cGUgYUxlbmd0aFRvQ29weSApIGNvbnN0CiAgewogICAgcmV0dXJuIE1pZChhUmVzdWx0
LCAwLCBhTGVuZ3RoVG9Db3B5KTsKICB9CgppbmxpbmUKbnNTdHJpbmc6OnNpemVfdHlwZQpuc1N0
cmluZzo6UmlnaHQoIHNlbGZfdHlwZSYgYVJlc3VsdCwgc2l6ZV90eXBlIGFMZW5ndGhUb0NvcHkg
KSBjb25zdAogIHsKICAgIHNpemVfdHlwZSBteUxlbmd0aCA9IExlbmd0aCgpOwogICAgYUxlbmd0
aFRvQ29weSA9IE5TX01JTihteUxlbmd0aCwgYUxlbmd0aFRvQ29weSk7CiAgICByZXR1cm4gTWlk
KGFSZXN1bHQsIG15TGVuZ3RoLWFMZW5ndGhUb0NvcHksIGFMZW5ndGhUb0NvcHkpOwogIH0KIyA0
NzggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcyLmgiCmNsYXNzIG5zQXV0
b1N0cmluZyA6IHB1YmxpYyBuc1N0cmluZyB7CnB1YmxpYzoKCiAgICB2aXJ0dWFsIH5uc0F1dG9T
dHJpbmcoKSB7fQoKICAgIG5zQXV0b1N0cmluZygpOwogICAgbnNBdXRvU3RyaW5nKGNvbnN0IG5z
QXV0b1N0cmluZyYgYVN0cmluZyk7CiAgICBleHBsaWNpdCBuc0F1dG9TdHJpbmcoY29uc3QgbnNB
U3RyaW5nJiBhU3RyaW5nKTsKICAgIGV4cGxpY2l0IG5zQXV0b1N0cmluZyhjb25zdCBuc1N0cmlu
ZyYgYVN0cmluZyk7CiAgICBleHBsaWNpdCBuc0F1dG9TdHJpbmcoY29uc3QgUFJVbmljaGFyKiBh
U3RyaW5nKTsKICAgIG5zQXV0b1N0cmluZyhjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsUFJJbnQz
MiBhTGVuZ3RoKTsKICAgIGV4cGxpY2l0IG5zQXV0b1N0cmluZyhQUlVuaWNoYXIgYUNoYXIpOwog
ICAgZXhwbGljaXQgbnNBdXRvU3RyaW5nKGNvbnN0IENCdWZEZXNjcmlwdG9yJiBhQnVmZmVyKTsK
CiAgICBuc0F1dG9TdHJpbmcmIG9wZXJhdG9yPSggY29uc3QgbnNBdXRvU3RyaW5nJiBhU3RyaW5n
ICkgeyBBc3NpZ24oYVN0cmluZyk7IHJldHVybiAqdGhpczsgfQogIHByaXZhdGU6CiAgICB2b2lk
IG9wZXJhdG9yPSggY2hhciApOwogIHB1YmxpYzoKICAgIG5zQXV0b1N0cmluZyYgb3BlcmF0b3I9
KCBjb25zdCBuc0FTdHJpbmcmIGFSZWFkYWJsZSApIHsgQXNzaWduKGFSZWFkYWJsZSk7IHJldHVy
biAqdGhpczsgfQoKICAgIG5zQXV0b1N0cmluZyYgb3BlcmF0b3I9KCBjb25zdCBQUlVuaWNoYXIq
IGFQdHIgKSB7IEFzc2lnbihhUHRyKTsgcmV0dXJuICp0aGlzOyB9CiAgICBuc0F1dG9TdHJpbmcm
IG9wZXJhdG9yPSggUFJVbmljaGFyIGFDaGFyICkgeyBBc3NpZ24oYUNoYXIpOyByZXR1cm4gKnRo
aXM7IH0KIyA1MDkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcyLmgiCiAg
ICBQUlVuaWNoYXIgbUJ1ZmZlcltrRGVmYXVsdFN0cmluZ1NpemVdOwp9OwoKCgpjbGFzcyBOU19D
b252ZXJ0QVNDSUl0b1VDUzIKICAgICAgOiBwdWJsaWMgbnNBdXRvU3RyaW5nCgoKCiAgewogICAg
cHVibGljOgogICAgICBleHBsaWNpdAogICAgICBOU19Db252ZXJ0QVNDSUl0b1VDUzIoIGNvbnN0
IG5zQUNTdHJpbmcmIGFDU3RyaW5nICk7CgogICAgICBleHBsaWNpdAogICAgICBOU19Db252ZXJ0
QVNDSUl0b1VDUzIoIGNvbnN0IG5zQUZsYXRDU3RyaW5nJiBhQ1N0cmluZyApCiAgICAgICAgewog
ICAgICAgICAgSW5pdCggYUNTdHJpbmcuZ2V0KCksIGFDU3RyaW5nLkxlbmd0aCgpICk7CiAgICAg
ICAgfQoKICAgICAgZXhwbGljaXQKICAgICAgTlNfQ29udmVydEFTQ0lJdG9VQ1MyKCBjb25zdCBj
aGFyKiBhQ1N0cmluZyApCiAgICAgICAgewogICAgICAgICAgSW5pdCggYUNTdHJpbmcsIH5QUlVp
bnQzMigwKSApOwogICAgICAgIH0KCiAgICAgIE5TX0NvbnZlcnRBU0NJSXRvVUNTMiggY29uc3Qg
Y2hhciogYUNTdHJpbmcsIFBSVWludDMyIGFMZW5ndGggKQogICAgICAgIHsKICAgICAgICAgIElu
aXQoIGFDU3RyaW5nLCBhTGVuZ3RoICk7CiAgICAgICAgfQojIDU0OCAiLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL3N0cmluZy9uc1N0cmluZzIuaCIKICAgIHByb3RlY3RlZDoKICAgICAgdm9pZCBJbml0
KCBjb25zdCBjaGFyKiBhQ1N0cmluZywgUFJVaW50MzIgYUxlbmd0aCApOwoKICAgIHByaXZhdGU6
CgogICAgICBOU19Db252ZXJ0QVNDSUl0b1VDUzIoIFBSVW5pY2hhciApOwogIH07CgpjbGFzcyBO
U19Db252ZXJ0VVRGOHRvVUNTMgogICAgICA6IHB1YmxpYyBuc0F1dG9TdHJpbmcKICB7CiAgICBw
dWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIE5TX0NvbnZlcnRVVEY4dG9VQ1MyKCBjb25zdCBu
c0FDU3RyaW5nJiBhQ1N0cmluZyApCiAgICAgICAgewogICAgICAgICAgSW5pdCggYUNTdHJpbmcg
KTsKICAgICAgICB9CgogICAgICBleHBsaWNpdAogICAgICBOU19Db252ZXJ0VVRGOHRvVUNTMigg
Y29uc3QgY2hhciogYUNTdHJpbmcgKQogICAgICAgIHsKICAgICAgICAgIEluaXQoIG5zRGVwZW5k
ZW50Q1N0cmluZyggYUNTdHJpbmcgKSApOwogICAgICAgIH0KCiAgICAgIE5TX0NvbnZlcnRVVEY4
dG9VQ1MyKCBjb25zdCBjaGFyKiBhQ1N0cmluZywgUFJVaW50MzIgYUxlbmd0aCApCiAgICAgICAg
ewogICAgICAgICAgSW5pdCggU3Vic3RyaW5nKCBhQ1N0cmluZywgYUNTdHJpbmcgKyBhTGVuZ3Ro
ICkgKTsKICAgICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2b2lkIEluaXQoIGNvbnN0IG5z
QUNTdHJpbmcmIGFDU3RyaW5nICk7CgogICAgcHJpdmF0ZToKICAgICAgTlNfQ29udmVydFVURjh0
b1VDUzIoIFBSVW5pY2hhciApOwogIH07CgoKCgpjbGFzcyBDb252ZXJ0VVRGOHRvVUNTMgogIHsK
ICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBuc0FDU3RyaW5nOjpjaGFyX3R5cGUgdmFsdWVfdHlw
ZTsKICAgICAgdHlwZWRlZiBuc0FTdHJpbmc6OmNoYXJfdHlwZSBidWZmZXJfdHlwZTsKCiAgICBD
b252ZXJ0VVRGOHRvVUNTMiggYnVmZmVyX3R5cGUqIGFCdWZmZXIgKQogICAgICAgIDogbVN0YXJ0
KGFCdWZmZXIpLCBtQnVmZmVyKGFCdWZmZXIpLCBtRXJyb3JFbmNvdW50ZXJlZCgwKSB7fQoKICAg
IHNpemVfdCBMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtQnVmZmVyIC0gbVN0YXJ0OyB9CgogICAg
UFJVaW50MzIgd3JpdGUoIGNvbnN0IHZhbHVlX3R5cGUqIHN0YXJ0LCBQUlVpbnQzMiBOICkKICAg
ICAgewogICAgICAgIGlmICggbUVycm9yRW5jb3VudGVyZWQgKQogICAgICAgICAgcmV0dXJuIE47
CgoKCiAgICAgICAgY29uc3QgdmFsdWVfdHlwZSogcCA9IHN0YXJ0OwogICAgICAgIGNvbnN0IHZh
bHVlX3R5cGUqIGVuZCA9IHN0YXJ0ICsgTjsKICAgICAgICBmb3IgKCA7IHAgIT0gZW5kIDsgKQog
ICAgICAgICAgewogICAgICAgICAgICBjaGFyIGMgPSAqcCsrOwoKICAgICAgICAgICAgaWYgKCBV
VEY4dHJhaXRzOjppc0FTQ0lJKGMpICkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAq
bUJ1ZmZlcisrID0gYnVmZmVyX3R5cGUoYyk7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICBQUlVpbnQzMiB1Y3M0OwogICAgICAgICAgICBQUlVp
bnQzMiBtaW5VY3M0OwogICAgICAgICAgICBQUkludDMyIHN0YXRlID0gMDsKCiAgICAgICAgICAg
IGlmICggVVRGOHRyYWl0czo6aXMyYnl0ZShjKSApCiAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgdWNzNCA9IChQUlVpbnQzMihjKSA8PCA2KSAmIDB4MDAwMDA3QzBMOwogICAgICAgICAg
ICAgICAgc3RhdGUgPSAxOwogICAgICAgICAgICAgICAgbWluVWNzNCA9IDB4MDAwMDAwODA7CiAg
ICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmICggVVRGOHRyYWl0czo6aXMzYnl0ZShj
KSApCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdWNzNCA9IChQUlVpbnQzMihjKSA8
PCAxMikgJiAweDAwMDBGMDAwTDsKICAgICAgICAgICAgICAgIHN0YXRlID0gMjsKICAgICAgICAg
ICAgICAgIG1pblVjczQgPSAweDAwMDAwODAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ZWxzZSBpZiAoIFVURjh0cmFpdHM6OmlzNGJ5dGUoYykgKQogICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgIHVjczQgPSAoUFJVaW50MzIoYykgPDwgMTgpICYgMHgwMDFGMDAwMEw7CiAgICAg
ICAgICAgICAgICBzdGF0ZSA9IDM7CiAgICAgICAgICAgICAgICBtaW5VY3M0ID0gMHgwMDAxMDAw
MDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKCBVVEY4dHJhaXRzOjppczVi
eXRlKGMpICkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB1Y3M0ID0gKFBSVWludDMy
KGMpIDw8IDI0KSAmIDB4MDMwMDAwMDBMOwogICAgICAgICAgICAgICAgc3RhdGUgPSA0OwogICAg
ICAgICAgICAgICAgbWluVWNzNCA9IDB4MDAyMDAwMDA7CiAgICAgICAgICAgICAgfQogICAgICAg
ICAgICBlbHNlIGlmICggVVRGOHRyYWl0czo6aXM2Ynl0ZShjKSApCiAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgdWNzNCA9IChQUlVpbnQzMihjKSA8PCAzMCkgJiAweDQwMDAwMDAwTDsK
ICAgICAgICAgICAgICAgIHN0YXRlID0gNTsKICAgICAgICAgICAgICAgIG1pblVjczQgPSAweDA0
MDAwMDAwOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIG1FcnJvckVuY291bnRlcmVkID0gMTsK
ICAgICAgICAgICAgICAgIHJldHVybiBOOwogICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHdo
aWxlICggc3RhdGUtLSApCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYyA9ICpwKys7
CgogICAgICAgICAgICAgICAgaWYgKCBVVEY4dHJhaXRzOjppc0luU2VxKGMpICkKICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFBSSW50MzIgc2hpZnQgPSBzdGF0ZSAqIDY7
CiAgICAgICAgICAgICAgICAgICAgdWNzNCB8PSAoUFJVaW50MzIoYykgJiAweDNGKSA8PCBzaGlm
dDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgIG1FcnJvckVu
Y291bnRlcmVkID0gMTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gTjsKICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggdWNzNCA8IG1pblVjczQg
KQogICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAqbUJ1ZmZlcisrID0gMHhmZmZkOwog
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoIHVjczQgPD0gMHhEN0ZGICkKICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAqbUJ1ZmZlcisrID0gdWNzNDsKICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKCB1Y3M0IDw9IDB4REZGRiApCiAgICAgICAgICAg
ICAgewoKICAgICAgICAgICAgICAgICptQnVmZmVyKysgPSAweGZmZmQ7CiAgICAgICAgICAgICAg
fQogICAgICAgICAgICBlbHNlIGlmICggdWNzNCA9PSAweEZGRkUgfHwgdWNzNCA9PSAweEZGRkYg
KQogICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAqbUJ1ZmZlcisrID0gMHhmZmZkOwog
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoIHVjczQgPj0gMHgwMDAxMDAwMCAp
CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKCB1Y3M0ID49IDB4MDAxMTAwMDAg
KQogICAgICAgICAgICAgICAgICAqbUJ1ZmZlcisrID0gMHhmZmZkOwogICAgICAgICAgICAgICAg
ZWxzZSB7CgogICAgICAgICAgICAgICAgICB1Y3M0IC09IDB4MDAwMTAwMDA7CiAgICAgICAgICAg
ICAgICAgICptQnVmZmVyKysgPSAoUFJVbmljaGFyKSh1Y3M0ID4+IDEwKSB8IDB4ZDgwMHU7CiAg
ICAgICAgICAgICAgICAgICptQnVmZmVyKysgPSAoUFJVbmljaGFyKSh1Y3M0ICYgMHgzZmYpIHwg
MHhkYzAwdTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoIHVjczQgIT0gMHhGRUZGICkK
ICAgICAgICAgICAgICAgICAgICAqbUJ1ZmZlcisrID0gdWNzNDsKICAgICAgICAgICAgICB9CiAg
ICAgICAgICB9CiAgICAgICAgcmV0dXJuIHAgLSBzdGFydDsKICAgICAgfQoKICAgIHByaXZhdGU6
CiAgICAgIGJ1ZmZlcl90eXBlKiBtU3RhcnQ7CiAgICAgIGJ1ZmZlcl90eXBlKiBtQnVmZmVyOwog
ICAgICBQUkJvb2wgbUVycm9yRW5jb3VudGVyZWQ7CiAgfTsKIyA1NSAiLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL3N0cmluZy9uc1N0cmluZy5oIiAyCgoKY2xhc3MgbnNDU3RyaW5nIDoKICBwdWJsaWMg
bnNBRmxhdENTdHJpbmcsCiAgcHVibGljIG5zU3RyIHsKCnB1YmxpYzoKICBmcmllbmQgY2xhc3Mg
bnNTdHJpbmc7CiAgZnJpZW5kIHZvaWQgVG9VcHBlckNhc2UoIG5zQ1N0cmluZyYgKTsKICBmcmll
bmQgdm9pZCBUb0xvd2VyQ2FzZSggbnNDU3RyaW5nJiApOwoKcHJvdGVjdGVkOgogIHZpcnR1YWwg
Y29uc3QgbnNCdWZmZXJIYW5kbGU8Y2hhcj4qIEdldEZsYXRCdWZmZXJIYW5kbGUoKSBjb25zdDsK
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIEdldFJlYWRhYmxlRnJhZ21lbnQoIG5zUmVhZGFibGVGcmFn
bWVudDxjaGFyPiYsIG5zRnJhZ21lbnRSZXF1ZXN0LCBQUlVpbnQzMiApIGNvbnN0OwogIHZpcnR1
YWwgY2hhciogR2V0V3JpdGFibGVGcmFnbWVudCggbnNXcml0YWJsZUZyYWdtZW50PGNoYXI+Jiwg
bnNGcmFnbWVudFJlcXVlc3QsIFBSVWludDMyICk7CgpwdWJsaWM6CiAgdmlydHVhbCBjb25zdCBj
aGFyKiBnZXQoKSBjb25zdCB7IHJldHVybiBtU3RyOyB9CgpwdWJsaWM6CgoKCiAgbnNDU3RyaW5n
KCk7CgoKCgoKICBuc0NTdHJpbmcoY29uc3QgbnNDU3RyaW5nJiBhU3RyaW5nKTsKCiAgZXhwbGlj
aXQgbnNDU3RyaW5nKCBjb25zdCBuc0FDU3RyaW5nJiApOwoKICBleHBsaWNpdCBuc0NTdHJpbmco
Y29uc3QgY2hhciopOwogIG5zQ1N0cmluZyhjb25zdCBjaGFyKiwgUFJJbnQzMik7CgoKCgoKICB2
aXJ0dWFsIH5uc0NTdHJpbmcoKTsKCgoKCgogIHZpcnR1YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gbUxlbmd0aDsgfQoKCgoKCgoKICB2b2lkIFNldExlbmd0aChQUlVpbnQzMiBh
TGVuZ3RoKTsKCgoKCgoKICB2b2lkIFNldENhcGFjaXR5KFBSVWludDMyIGFMZW5ndGgpOwoKCgoK
CiAgUFJCb29sIFNldENoYXJBdChQUlVuaWNoYXIgYUNoYXIsUFJVaW50MzIgYW5JbmRleCk7CiMg
MTM2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nLmgiCiAgdm9pZCBTdHJp
cENoYXJzKGNvbnN0IGNoYXIqIGFTZXQpOwogIHZvaWQgU3RyaXBDaGFyKGNoYXIgYUNoYXIsUFJJ
bnQzMiBhbk9mZnNldD0wKTsKCgoKCgoKICB2b2lkIFN0cmlwV2hpdGVzcGFjZSgpOwoKCgoKCgog
IHZvaWQgUmVwbGFjZUNoYXIoY2hhciBhT2xkQ2hhcixjaGFyIGFOZXdDaGFyKTsKICB2b2lkIFJl
cGxhY2VDaGFyKGNvbnN0IGNoYXIqIGFTZXQsY2hhciBhTmV3Q2hhcik7CgogIHZvaWQgUmVwbGFj
ZVN1YnN0cmluZyhjb25zdCBuc0NTdHJpbmcmIGFUYXJnZXQsY29uc3QgbnNDU3RyaW5nJiBhTmV3
VmFsdWUpOwogIHZvaWQgUmVwbGFjZVN1YnN0cmluZyhjb25zdCBjaGFyKiBhVGFyZ2V0LGNvbnN0
IGNoYXIqIGFOZXdWYWx1ZSk7CiMgMTY4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25z
U3RyaW5nLmgiCiAgdm9pZCBUcmltKGNvbnN0IGNoYXIqIGFTZXQsUFJCb29sIGFFbGltaW5hdGVM
ZWFkaW5nPTEsUFJCb29sIGFFbGltaW5hdGVUcmFpbGluZz0xLFBSQm9vbCBhSWdub3JlUXVvdGVz
PTApOwojIDE3OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZy5oIgogIHZv
aWQgQ29tcHJlc3NXaGl0ZXNwYWNlKCBQUkJvb2wgYUVsaW1pbmF0ZUxlYWRpbmc9MSxQUkJvb2wg
YUVsaW1pbmF0ZVRyYWlsaW5nPTEpOwojIDE5MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmlu
Zy9uc1N0cmluZy5oIgogIGZsb2F0IFRvRmxvYXQoUFJJbnQzMiogYUVycm9yQ29kZSkgY29uc3Q7
CiMgMTk5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nLmgiCiAgUFJJbnQz
MiBUb0ludGVnZXIoUFJJbnQzMiogYUVycm9yQ29kZSxQUlVpbnQzMiBhUmFkaXg9KDEwKSkgY29u
c3Q7CiMgMjE1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nLmgiCiAgbnND
U3RyaW5nJiBvcGVyYXRvcj0oIGNvbnN0IG5zQ1N0cmluZyYgYVN0cmluZyApIHsgQXNzaWduKGFT
dHJpbmcpOyByZXR1cm4gKnRoaXM7IH0KICBuc0NTdHJpbmcmIG9wZXJhdG9yPSggY29uc3QgbnNB
Q1N0cmluZyYgYVJlYWRhYmxlICkgeyBBc3NpZ24oYVJlYWRhYmxlKTsgcmV0dXJuICp0aGlzOyB9
CgogIG5zQ1N0cmluZyYgb3BlcmF0b3I9KCBjb25zdCBjaGFyKiBhUHRyICkgeyBBc3NpZ24oYVB0
cik7IHJldHVybiAqdGhpczsgfQogIG5zQ1N0cmluZyYgb3BlcmF0b3I9KCBjaGFyIGFDaGFyICkg
eyBBc3NpZ24oYUNoYXIpOyByZXR1cm4gKnRoaXM7IH0KCiAgdm9pZCBBc3NpZ25XaXRoQ29udmVy
c2lvbihjb25zdCBQUlVuaWNoYXIqLFBSSW50MzI9LTEpOwogIHZvaWQgQXNzaWduV2l0aENvbnZl
cnNpb24oIGNvbnN0IG5zU3RyaW5nJiBhU3RyaW5nICk7CiAgdm9pZCBBc3NpZ25XaXRoQ29udmVy
c2lvbiggY29uc3QgbnNBU3RyaW5nJiBhU3RyaW5nICk7CiMgMjM1ICIuLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvc3RyaW5nL25zU3RyaW5nLmgiCiAgdm9pZCBBcHBlbmRXaXRoQ29udmVyc2lvbihjb25z
dCBuc1N0cmluZyYsIFBSSW50MzI9LTEpOwogIHZvaWQgQXBwZW5kV2l0aENvbnZlcnNpb24oIGNv
bnN0IG5zQVN0cmluZyYgYVN0cmluZyApOwogIHZvaWQgQXBwZW5kV2l0aENvbnZlcnNpb24oY29u
c3QgUFJVbmljaGFyKiwgUFJJbnQzMj0tMSk7CgogIHZvaWQgQXBwZW5kSW50KFBSSW50MzIgYUlu
dGVnZXIsUFJJbnQzMiBhUmFkaXg9MTApOwogIHZvaWQgQXBwZW5kRmxvYXQoIGRvdWJsZSBhRmxv
YXQgKTsKIyAyNTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcuaCIKICB2
b2lkIEFkb3B0KCBjaGFyKiBhUHRyLCBQUkludDMyIGFMZW5ndGggPSAtMSApOwojIDI2OSAiLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZy5oIgogIHNpemVfdHlwZSBMZWZ0KCBz
ZWxmX3R5cGUmLCBzaXplX3R5cGUgKSBjb25zdDsKICBzaXplX3R5cGUgTWlkKCBzZWxmX3R5cGUm
LCBQUlVpbnQzMiwgUFJVaW50MzIgKSBjb25zdDsKICBzaXplX3R5cGUgUmlnaHQoIHNlbGZfdHlw
ZSYsIHNpemVfdHlwZSApIGNvbnN0OwojIDI4OCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmlu
Zy9uc1N0cmluZy5oIgogIFBSSW50MzIgRmluZChjb25zdCBuc0NTdHJpbmcmIGFTdHJpbmcsUFJC
b29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhbk9mZnNldD0wLFBSSW50MzIgYUNvdW50PS0xKSBj
b25zdDsKICBQUkludDMyIEZpbmQoY29uc3QgY2hhciogYVN0cmluZyxQUkJvb2wgYUlnbm9yZUNh
c2U9MCxQUkludDMyIGFuT2Zmc2V0PTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwojIDI5OSAi
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZy5oIgogIFBSSW50MzIgRmluZENo
YXIoUFJVbmljaGFyIGFDaGFyLFBSSW50MzIgYW5PZmZzZXQ9MCxQUkludDMyIGFDb3VudD0tMSkg
Y29uc3Q7CiMgMzA4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3RyaW5nLmgiCiAg
UFJJbnQzMiBGaW5kQ2hhckluU2V0KGNvbnN0IGNoYXIqIGFTdHJpbmcsUFJJbnQzMiBhbk9mZnNl
dD0wKSBjb25zdDsKICBQUkludDMyIEZpbmRDaGFySW5TZXQoY29uc3QgbnNDU3RyaW5nJiBhU3Ry
aW5nLFBSSW50MzIgYW5PZmZzZXQ9MCkgY29uc3Q7CiMgMzE5ICIuLi8uLi8uLi9kaXN0L2luY2x1
ZGUvc3RyaW5nL25zU3RyaW5nLmgiCiAgUFJJbnQzMiBSRmluZChjb25zdCBjaGFyKiBhQ1N0cmlu
ZyxQUkJvb2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PS0xLFBSSW50MzIgYUNvdW50
PS0xKSBjb25zdDsKICBQUkludDMyIFJGaW5kKGNvbnN0IG5zQ1N0cmluZyYgYVN0cmluZyxQUkJv
b2wgYUlnbm9yZUNhc2U9MCxQUkludDMyIGFuT2Zmc2V0PS0xLFBSSW50MzIgYUNvdW50PS0xKSBj
b25zdDsKIyAzMzAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcuaCIKICBQ
UkludDMyIFJGaW5kQ2hhcihQUlVuaWNoYXIgYUNoYXIsUFJJbnQzMiBhbk9mZnNldD0tMSxQUklu
dDMyIGFDb3VudD0tMSkgY29uc3Q7CiMgMzM5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5n
L25zU3RyaW5nLmgiCiAgUFJJbnQzMiBSRmluZENoYXJJblNldChjb25zdCBjaGFyKiBhU3RyaW5n
LFBSSW50MzIgYW5PZmZzZXQ9LTEpIGNvbnN0OwogIFBSSW50MzIgUkZpbmRDaGFySW5TZXQoY29u
c3QgbnNDU3RyaW5nJiBhU3RyaW5nLFBSSW50MzIgYW5PZmZzZXQ9LTEpIGNvbnN0OwojIDM1NiAi
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZy5oIgogIFBSSW50MzIgQ29tcGFy
ZShjb25zdCBjaGFyKiBhU3RyaW5nLFBSQm9vbCBhSWdub3JlQ2FzZT0wLFBSSW50MzIgYUNvdW50
PS0xKSBjb25zdDsKCiAgUFJCb29sIEVxdWFsc1dpdGhDb252ZXJzaW9uKGNvbnN0IGNoYXIqIGFT
dHJpbmcsUFJCb29sIGFJZ25vcmVDYXNlPTAsUFJJbnQzMiBhQ291bnQ9LTEpIGNvbnN0OwoKICBQ
UkJvb2wgRXF1YWxzSWdub3JlQ2FzZShjb25zdCBjaGFyKiBhU3RyaW5nLFBSSW50MzIgYUNvdW50
PS0xKSBjb25zdDsKIyAzNzIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNTdHJpbmcu
aCIKcHJpdmF0ZToKCgogIHZvaWQgb3BlcmF0b3I9KCBQUlVuaWNoYXIgKTsKICB2b2lkIEFzc2ln
bldpdGhDb252ZXJzaW9uKCBjb25zdCBjaGFyKiwgUFJJbnQzMj0tMSApOwogIHZvaWQgSW5zZXJ0
V2l0aENvbnZlcnNpb24oIGNoYXIsIFBSVWludDMyICk7Cn07CgppbmxpbmUKbnNDU3RyaW5nOjpz
aXplX3R5cGUKbnNDU3RyaW5nOjpMZWZ0KCBuc0FDU3RyaW5nJiBhUmVzdWx0LCBzaXplX3R5cGUg
YUxlbmd0aFRvQ29weSApIGNvbnN0CiAgewogICAgcmV0dXJuIE1pZChhUmVzdWx0LCAwLCBhTGVu
Z3RoVG9Db3B5KTsKICB9CgppbmxpbmUKbnNDU3RyaW5nOjpzaXplX3R5cGUKbnNDU3RyaW5nOjpS
aWdodCggc2VsZl90eXBlJiBhUmVzdWx0LCBzaXplX3R5cGUgYUxlbmd0aFRvQ29weSApIGNvbnN0
CiAgewogICAgc2l6ZV90eXBlIG15TGVuZ3RoID0gTGVuZ3RoKCk7CiAgICBhTGVuZ3RoVG9Db3B5
ID0gTlNfTUlOKG15TGVuZ3RoLCBhTGVuZ3RoVG9Db3B5KTsKICAgIHJldHVybiBNaWQoYVJlc3Vs
dCwgbXlMZW5ndGgtYUxlbmd0aFRvQ29weSwgYUxlbmd0aFRvQ29weSk7CiAgfQojIDQwNiAiLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1N0cmluZy5oIgpjbGFzcyBuc0NBdXRvU3RyaW5n
IDogcHVibGljIG5zQ1N0cmluZyB7CnB1YmxpYzoKCiAgICB2aXJ0dWFsIH5uc0NBdXRvU3RyaW5n
KCkge30KCiAgICBuc0NBdXRvU3RyaW5nKCk7CiAgICBleHBsaWNpdCBuc0NBdXRvU3RyaW5nKGNv
bnN0IG5zQ1N0cmluZyYgKTsKICAgIGV4cGxpY2l0IG5zQ0F1dG9TdHJpbmcoY29uc3QgbnNBQ1N0
cmluZyYgYVN0cmluZyk7CiAgICBleHBsaWNpdCBuc0NBdXRvU3RyaW5nKGNvbnN0IGNoYXIqIGFT
dHJpbmcpOwogICAgbnNDQXV0b1N0cmluZyhjb25zdCBjaGFyKiBhU3RyaW5nLFBSSW50MzIgYUxl
bmd0aCk7CiAgICBleHBsaWNpdCBuc0NBdXRvU3RyaW5nKGNvbnN0IENCdWZEZXNjcmlwdG9yJiBh
QnVmZmVyKTsKCiAgICBuc0NBdXRvU3RyaW5nJiBvcGVyYXRvcj0oIGNvbnN0IG5zQ0F1dG9TdHJp
bmcmIGFTdHJpbmcgKSB7IEFzc2lnbihhU3RyaW5nKTsgcmV0dXJuICp0aGlzOyB9CiAgcHJpdmF0
ZToKICAgIHZvaWQgb3BlcmF0b3I9KCBQUlVuaWNoYXIgKTsKICBwdWJsaWM6CiAgICBuc0NBdXRv
U3RyaW5nJiBvcGVyYXRvcj0oIGNvbnN0IG5zQUNTdHJpbmcmIGFSZWFkYWJsZSApIHsgQXNzaWdu
KGFSZWFkYWJsZSk7IHJldHVybiAqdGhpczsgfQoKICAgIG5zQ0F1dG9TdHJpbmcmIG9wZXJhdG9y
PSggY29uc3QgY2hhciogYVB0ciApIHsgQXNzaWduKGFQdHIpOyByZXR1cm4gKnRoaXM7IH0KICAg
IG5zQ0F1dG9TdHJpbmcmIG9wZXJhdG9yPSggY2hhciBhQ2hhciApIHsgQXNzaWduKGFDaGFyKTsg
cmV0dXJuICp0aGlzOyB9CiMgNDM1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zU3Ry
aW5nLmgiCiAgICBjaGFyIG1CdWZmZXJba0RlZmF1bHRTdHJpbmdTaXplXTsKfTsKCgoKCgoKY2xh
c3MgTlNfQ29udmVydFVDUzJ0b1VURjgKICAgICAgOiBwdWJsaWMgbnNDQXV0b1N0cmluZwoKCgog
IHsKICAgIHB1YmxpYzoKICAgICAgZnJpZW5kIGNoYXIqIFRvTmV3VVRGOFN0cmluZyggY29uc3Qg
bnNBU3RyaW5nJiBhU291cmNlICk7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBO
U19Db252ZXJ0VUNTMnRvVVRGOCggY29uc3QgUFJVbmljaGFyKiBhU3RyaW5nICkKICAgICAgICB7
CiAgICAgICAgICBBcHBlbmQoIGFTdHJpbmcsIH5QUlVpbnQzMigwKSApOwogICAgICAgIH0KCiAg
ICAgIE5TX0NvbnZlcnRVQ1MydG9VVEY4KCBjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsIFBSVWlu
dDMyIGFMZW5ndGggKQogICAgICAgIHsKICAgICAgICAgIEFwcGVuZCggYVN0cmluZywgYUxlbmd0
aCApOwogICAgICAgIH0KCiAgICAgIGV4cGxpY2l0IE5TX0NvbnZlcnRVQ1MydG9VVEY4KCBjb25z
dCBuc0FTdHJpbmcmIGFTdHJpbmcgKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZvaWQgQXBwZW5k
KCBjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcsIFBSVWludDMyIGFMZW5ndGggKTsKCiAgICBwcml2
YXRlOgoKICAgICAgTlNfQ29udmVydFVDUzJ0b1VURjgoIGNoYXIgKTsKICB9OwoKCgoKY2xhc3Mg
TlNfTG9zc3lDb252ZXJ0VUNTMnRvQVNDSUkKICAgICAgOiBwdWJsaWMgbnNDQXV0b1N0cmluZwoK
CgogIHsKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgTlNfTG9zc3lDb252ZXJ0VUNT
MnRvQVNDSUkoIGNvbnN0IFBSVW5pY2hhciogYVN0cmluZyApCiAgICAgICAgewogICAgICAgICAg
QXBwZW5kV2l0aENvbnZlcnNpb24oIGFTdHJpbmcsIH5QUlVpbnQzMigwKSApOwogICAgICAgIH0K
CiAgICAgIE5TX0xvc3N5Q29udmVydFVDUzJ0b0FTQ0lJKCBjb25zdCBQUlVuaWNoYXIqIGFTdHJp
bmcsIFBSVWludDMyIGFMZW5ndGggKQogICAgICAgIHsKICAgICAgICAgIEFwcGVuZFdpdGhDb252
ZXJzaW9uKCBhU3RyaW5nLCBhTGVuZ3RoICk7CiAgICAgICAgfQoKICAgICAgZXhwbGljaXQgTlNf
TG9zc3lDb252ZXJ0VUNTMnRvQVNDSUkoIGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZyApOwoKICAg
IHByaXZhdGU6CgogICAgICBOU19Mb3NzeUNvbnZlcnRVQ1MydG9BU0NJSSggY2hhciApOwogIH07
CiMgNDUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NU2NyaXB0T2JqZWN0RmFjdG9y
eS5oIiAyCgoKCgoKY2xhc3MgbnNJU2NyaXB0Q29udGV4dDsKY2xhc3MgbnNJU2NyaXB0R2xvYmFs
T2JqZWN0OwpjbGFzcyBuc0lET01FdmVudExpc3RlbmVyOwoKY2xhc3MgbnNJRE9NU2NyaXB0T2Jq
ZWN0RmFjdG9yeSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3Qg
bnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAweGE2Y2Y5MDY0LCAw
eDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRk
LCAweDMyIH0gfTsgcmV0dXJuIGlpZDt9CgogIHZpcnR1YWwgbnNyZXN1bHQgTmV3U2NyaXB0Q29u
dGV4dChuc0lTY3JpcHRHbG9iYWxPYmplY3QgKmFHbG9iYWwsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5zSVNjcmlwdENvbnRleHQgKiphQ29udGV4dCkgPSAwOwoKICB2aXJ0dWFsIG5z
cmVzdWx0IE5ld0pTRXZlbnRMaXN0ZW5lcihuc0lTY3JpcHRDb250ZXh0ICphQ29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyogYU9iamVjdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lET01FdmVudExpc3RlbmVyICoqIGFJbnN0YW5j
ZVB0clJlc3VsdCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IE5ld1NjcmlwdEdsb2JhbE9iamVj
dChQUkJvb2wgYUlzQ2hyb21lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SVNjcmlwdEdsb2JhbE9iamVjdCAqKmFHbG9iYWwpID0gMDsKCiAgdmlydHVhbCBuc0lTdXBwb3J0
cyAqR2V0Q2xhc3NJbmZvSW5zdGFuY2UobnNET01DbGFzc0luZm9JRCBhSUQpID0gMDsKICB2aXJ0
dWFsIG5zSVN1cHBvcnRzICpHZXRFeHRlcm5hbENsYXNzSW5mb0luc3RhbmNlKGNvbnN0IG5zQVN0
cmluZyYgYU5hbWUpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZ2lzdGVyRE9NQ2xh
c3NJbmZvKGNvbnN0IGNoYXIgKmFOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNET01DbGFzc0luZm9FeHRlcm5hbENvbnN0cnVjdG9yRm5jIGFDb25zdHJ1Y3RvckZwdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0lJRCAqYVByb3RvQ2hh
aW5JbnRlcmZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0lJ
RCAqKmFJbnRlcmZhY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50
MzIgYVNjcmlwdGFibGVGbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
Qm9vbCBhSGFzQ2xhc3NJbnRlcmZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBuc0NJRCAqYUNvbnN0cnVjdG9yQ0lEKSA9IDA7Cn07CiMgMzE0ICIuLi8uLi8uLi9k
aXN0L2luY2x1ZGUvZG9tL25zSURPTUNsYXNzSW5mby5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL2RvbS9uc0RPTUNJRC5oIiAxCiMgMzE1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9t
L25zSURPTUNsYXNzSW5mby5oIiAyCiMgMzc0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25z
SURPTUNsYXNzSW5mby5oIgpjbGFzcyBuc0lET01TY3JpcHRPYmplY3RGYWN0b3J5OwoKY2xhc3Mg
bnNJRE9NQ0lFeHRlbnNpb24gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewpwdWJsaWM6CiAgc3RhdGlj
IGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHg4OTFh
N2IwMSwgMHgxYjYxLCAweDExZDYsIHsgMHhhNywgMHhmMiwgMHhmNiwgMHg5MCwgMHhiNiwgMHgz
OCwgMHg4OSwgMHg5YyB9IH07IHJldHVybiBpaWQ7fQoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlZ2lz
dGVyRE9NQ0koY29uc3QgY2hhciogYU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SURPTVNjcmlwdE9iamVjdEZhY3RvcnkqIGFET01TT0ZhY3RvcnkpID0gMDsKfTsKIyA0NCAibnNE
T01DbGFzc0luZm8uaCIgMgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNhcGkuaCIg
MQojIDQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNhcGkuaCIKIyAxICIvdXNyL2xpYi9n
Y2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQx
ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNhcGkuaCIgMgoKCgpleHRlcm4gIkMiIHsKIyAx
NDcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gaW50NjQKSlNfTm93
KCk7CgoKZXh0ZXJuIGpzdmFsCkpTX0dldE5hTlZhbHVlKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJu
IGpzdmFsCkpTX0dldE5lZ2F0aXZlSW5maW5pdHlWYWx1ZShKU0NvbnRleHQgKmN4KTsKCmV4dGVy
biBqc3ZhbApKU19HZXRQb3NpdGl2ZUluZmluaXR5VmFsdWUoSlNDb250ZXh0ICpjeCk7CgpleHRl
cm4ganN2YWwKSlNfR2V0RW1wdHlTdHJpbmdWYWx1ZShKU0NvbnRleHQgKmN4KTsKIyAxOTYgIi4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gSlNCb29sCkpTX0NvbnZlcnRB
cmd1bWVudHMoSlNDb250ZXh0ICpjeCwgdWludE4gYXJnYywganN2YWwgKmFyZ3YsIGNvbnN0IGNo
YXIgKmZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAuLi4pOwojIDIxNiAiLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL2pzL2pzYXBpLmgiCmV4dGVybiBqc3ZhbCAqCkpTX1B1c2hBcmd1bWVudHMoSlND
b250ZXh0ICpjeCwgdm9pZCAqKm1hcmtwLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CgoKCgoK
CmV4dGVybiB2b2lkCkpTX1BvcEFyZ3VtZW50cyhKU0NvbnRleHQgKmN4LCB2b2lkICptYXJrKTsK
IyAyNzcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gSlNCb29sCkpT
X0NvbnZlcnRWYWx1ZShKU0NvbnRleHQgKmN4LCBqc3ZhbCB2LCBKU1R5cGUgdHlwZSwganN2YWwg
KnZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfVmFsdWVUb09iamVjdChKU0NvbnRleHQgKmN4LCBqc3Zh
bCB2LCBKU09iamVjdCAqKm9ianApOwoKZXh0ZXJuIEpTRnVuY3Rpb24gKgpKU19WYWx1ZVRvRnVu
Y3Rpb24oSlNDb250ZXh0ICpjeCwganN2YWwgdik7CgpleHRlcm4gSlNGdW5jdGlvbiAqCkpTX1Zh
bHVlVG9Db25zdHJ1Y3RvcihKU0NvbnRleHQgKmN4LCBqc3ZhbCB2KTsKCmV4dGVybiBKU1N0cmlu
ZyAqCkpTX1ZhbHVlVG9TdHJpbmcoSlNDb250ZXh0ICpjeCwganN2YWwgdik7CgpleHRlcm4gSlNC
b29sCkpTX1ZhbHVlVG9OdW1iZXIoSlNDb250ZXh0ICpjeCwganN2YWwgdiwganNkb3VibGUgKmRw
KTsKCgoKCgpleHRlcm4gSlNCb29sCkpTX1ZhbHVlVG9FQ01BSW50MzIoSlNDb250ZXh0ICpjeCwg
anN2YWwgdiwgaW50MzIgKmlwKTsKCgoKCgpleHRlcm4gSlNCb29sCkpTX1ZhbHVlVG9FQ01BVWlu
dDMyKEpTQ29udGV4dCAqY3gsIGpzdmFsIHYsIHVpbnQzMiAqaXApOwoKCgoKCgpleHRlcm4gSlNC
b29sCkpTX1ZhbHVlVG9JbnQzMihKU0NvbnRleHQgKmN4LCBqc3ZhbCB2LCBpbnQzMiAqaXApOwoK
CgoKZXh0ZXJuIEpTQm9vbApKU19WYWx1ZVRvVWludDE2KEpTQ29udGV4dCAqY3gsIGpzdmFsIHYs
IHVpbnQxNiAqaXApOwoKZXh0ZXJuIEpTQm9vbApKU19WYWx1ZVRvQm9vbGVhbihKU0NvbnRleHQg
KmN4LCBqc3ZhbCB2LCBKU0Jvb2wgKmJwKTsKCmV4dGVybiBKU1R5cGUKSlNfVHlwZU9mVmFsdWUo
SlNDb250ZXh0ICpjeCwganN2YWwgdik7CgpleHRlcm4gY29uc3QgY2hhciAqCkpTX0dldFR5cGVO
YW1lKEpTQ29udGV4dCAqY3gsIEpTVHlwZSB0eXBlKTsKIyAzNDIgIi4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gSlNSdW50aW1lICoKSlNfSW5pdCh1aW50MzIgbWF4Ynl0
ZXMpOwoKZXh0ZXJuIHZvaWQKSlNfRmluaXNoKEpTUnVudGltZSAqcnQpOwoKZXh0ZXJuIHZvaWQK
SlNfU2h1dERvd24odm9pZCk7Cgp2b2lkICoKSlNfR2V0UnVudGltZVByaXZhdGUoSlNSdW50aW1l
ICpydCk7Cgp2b2lkCkpTX1NldFJ1bnRpbWVQcml2YXRlKEpTUnVudGltZSAqcnQsIHZvaWQgKmRh
dGEpOwoKCgpleHRlcm4gdm9pZApKU19CZWdpblJlcXVlc3QoSlNDb250ZXh0ICpjeCk7CgpleHRl
cm4gdm9pZApKU19FbmRSZXF1ZXN0KEpTQ29udGV4dCAqY3gpOwoKCmV4dGVybiB2b2lkCkpTX1lp
ZWxkUmVxdWVzdChKU0NvbnRleHQgKmN4KTsKCmV4dGVybiBqc3JlZmNvdW50CkpTX1N1c3BlbmRS
ZXF1ZXN0KEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJuIHZvaWQKSlNfUmVzdW1lUmVxdWVzdChKU0Nv
bnRleHQgKmN4LCBqc3JlZmNvdW50IHNhdmVEZXB0aCk7CgoKCmV4dGVybiB2b2lkCkpTX0xvY2so
SlNSdW50aW1lICpydCk7CgpleHRlcm4gdm9pZApKU19VbmxvY2soSlNSdW50aW1lICpydCk7Cgpl
eHRlcm4gSlNDb250ZXh0ICoKSlNfTmV3Q29udGV4dChKU1J1bnRpbWUgKnJ0LCBzaXplX3Qgc3Rh
Y2tDaHVua1NpemUpOwoKZXh0ZXJuIHZvaWQKSlNfRGVzdHJveUNvbnRleHQoSlNDb250ZXh0ICpj
eCk7CgpleHRlcm4gdm9pZApKU19EZXN0cm95Q29udGV4dE5vR0MoSlNDb250ZXh0ICpjeCk7Cgpl
eHRlcm4gdm9pZApKU19EZXN0cm95Q29udGV4dE1heWJlR0MoSlNDb250ZXh0ICpjeCk7CgpleHRl
cm4gdm9pZCAqCkpTX0dldENvbnRleHRQcml2YXRlKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJuIHZv
aWQKSlNfU2V0Q29udGV4dFByaXZhdGUoSlNDb250ZXh0ICpjeCwgdm9pZCAqZGF0YSk7CgpleHRl
cm4gSlNSdW50aW1lICoKSlNfR2V0UnVudGltZShKU0NvbnRleHQgKmN4KTsKCmV4dGVybiBKU0Nv
bnRleHQgKgpKU19Db250ZXh0SXRlcmF0b3IoSlNSdW50aW1lICpydCwgSlNDb250ZXh0ICoqaXRl
cnApOwoKZXh0ZXJuIEpTVmVyc2lvbgpKU19HZXRWZXJzaW9uKEpTQ29udGV4dCAqY3gpOwoKZXh0
ZXJuIEpTVmVyc2lvbgpKU19TZXRWZXJzaW9uKEpTQ29udGV4dCAqY3gsIEpTVmVyc2lvbiB2ZXJz
aW9uKTsKCmV4dGVybiBjb25zdCBjaGFyICoKSlNfVmVyc2lvblRvU3RyaW5nKEpTVmVyc2lvbiB2
ZXJzaW9uKTsKCmV4dGVybiBKU1ZlcnNpb24KSlNfU3RyaW5nVG9WZXJzaW9uKGNvbnN0IGNoYXIg
KnN0cmluZyk7CiMgNDM2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNhcGkuaCIKZXh0ZXJu
IHVpbnQzMgpKU19HZXRPcHRpb25zKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJuIHVpbnQzMgpKU19T
ZXRPcHRpb25zKEpTQ29udGV4dCAqY3gsIHVpbnQzMiBvcHRpb25zKTsKCmV4dGVybiB1aW50MzIK
SlNfVG9nZ2xlT3B0aW9ucyhKU0NvbnRleHQgKmN4LCB1aW50MzIgb3B0aW9ucyk7CgpleHRlcm4g
Y29uc3QgY2hhciAqCkpTX0dldEltcGxlbWVudGF0aW9uVmVyc2lvbih2b2lkKTsKCmV4dGVybiBK
U09iamVjdCAqCkpTX0dldEdsb2JhbE9iamVjdChKU0NvbnRleHQgKmN4KTsKCmV4dGVybiB2b2lk
CkpTX1NldEdsb2JhbE9iamVjdChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsKIyA0NjEg
Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gSlNCb29sCkpTX0luaXRT
dGFuZGFyZENsYXNzZXMoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaik7CiMgNDc3ICIuLi8u
Li8uLi9kaXN0L2luY2x1ZGUvanMvanNhcGkuaCIKZXh0ZXJuIEpTQm9vbApKU19SZXNvbHZlU3Rh
bmRhcmRDbGFzcyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgSlNCb29sICpyZXNvbHZlZCk7CgpleHRlcm4gSlNCb29sCkpTX0Vu
dW1lcmF0ZVN0YW5kYXJkQ2xhc3NlcyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsKCmV4
dGVybiBKU09iamVjdCAqCkpTX0dldFNjb3BlQ2hhaW4oSlNDb250ZXh0ICpjeCk7CgpleHRlcm4g
dm9pZCAqCkpTX21hbGxvYyhKU0NvbnRleHQgKmN4LCBzaXplX3QgbmJ5dGVzKTsKCmV4dGVybiB2
b2lkICoKSlNfcmVhbGxvYyhKU0NvbnRleHQgKmN4LCB2b2lkICpwLCBzaXplX3QgbmJ5dGVzKTsK
CmV4dGVybiB2b2lkCkpTX2ZyZWUoSlNDb250ZXh0ICpjeCwgdm9pZCAqcCk7CgpleHRlcm4gY2hh
ciAqCkpTX3N0cmR1cChKU0NvbnRleHQgKmN4LCBjb25zdCBjaGFyICpzKTsKCmV4dGVybiBqc2Rv
dWJsZSAqCkpTX05ld0RvdWJsZShKU0NvbnRleHQgKmN4LCBqc2RvdWJsZSBkKTsKCmV4dGVybiBK
U0Jvb2wKSlNfTmV3RG91YmxlVmFsdWUoSlNDb250ZXh0ICpjeCwganNkb3VibGUgZCwganN2YWwg
KnJ2YWwpOwoKZXh0ZXJuIEpTQm9vbApKU19OZXdOdW1iZXJWYWx1ZShKU0NvbnRleHQgKmN4LCBq
c2RvdWJsZSBkLCBqc3ZhbCAqcnZhbCk7CiMgNTI0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMv
anNhcGkuaCIKZXh0ZXJuIEpTQm9vbApKU19BZGRSb290KEpTQ29udGV4dCAqY3gsIHZvaWQgKnJw
KTsKCmV4dGVybiBKU0Jvb2wKSlNfQWRkTmFtZWRSb290KEpTQ29udGV4dCAqY3gsIHZvaWQgKnJw
LCBjb25zdCBjaGFyICpuYW1lKTsKCmV4dGVybiBKU0Jvb2wKSlNfQWRkTmFtZWRSb290UlQoSlNS
dW50aW1lICpydCwgdm9pZCAqcnAsIGNvbnN0IGNoYXIgKm5hbWUpOwoKZXh0ZXJuIEpTQm9vbApK
U19SZW1vdmVSb290KEpTQ29udGV4dCAqY3gsIHZvaWQgKnJwKTsKCmV4dGVybiBKU0Jvb2wKSlNf
UmVtb3ZlUm9vdFJUKEpTUnVudGltZSAqcnQsIHZvaWQgKnJwKTsKIyA1NTQgIi4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gdm9pZApKU19DbGVhck5ld2Jvcm5Sb290cyhK
U0NvbnRleHQgKmN4KTsKIyA1ODYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5oIgp0
eXBlZGVmIGludE4KKCogSlNHQ1Jvb3RNYXBGdW4pKHZvaWQgKnJwLCBjb25zdCBjaGFyICpuYW1l
LCB2b2lkICpkYXRhKTsKCmV4dGVybiB1aW50MzIKSlNfTWFwR0NSb290cyhKU1J1bnRpbWUgKnJ0
LCBKU0dDUm9vdE1hcEZ1biBtYXAsIHZvaWQgKmRhdGEpOwoKZXh0ZXJuIEpTQm9vbApKU19Mb2Nr
R0NUaGluZyhKU0NvbnRleHQgKmN4LCB2b2lkICp0aGluZyk7CgpleHRlcm4gSlNCb29sCkpTX0xv
Y2tHQ1RoaW5nUlQoSlNSdW50aW1lICpydCwgdm9pZCAqdGhpbmcpOwoKZXh0ZXJuIEpTQm9vbApK
U19VbmxvY2tHQ1RoaW5nKEpTQ29udGV4dCAqY3gsIHZvaWQgKnRoaW5nKTsKCmV4dGVybiBKU0Jv
b2wKSlNfVW5sb2NrR0NUaGluZ1JUKEpTUnVudGltZSAqcnQsIHZvaWQgKnRoaW5nKTsKIyA2MTcg
Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gdm9pZApKU19NYXJrR0NU
aGluZyhKU0NvbnRleHQgKmN4LCB2b2lkICp0aGluZywgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAq
YXJnKTsKCmV4dGVybiB2b2lkCkpTX0dDKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJuIHZvaWQKSlNf
TWF5YmVHQyhKU0NvbnRleHQgKmN4KTsKCmV4dGVybiBKU0dDQ2FsbGJhY2sKSlNfU2V0R0NDYWxs
YmFjayhKU0NvbnRleHQgKmN4LCBKU0dDQ2FsbGJhY2sgY2IpOwoKZXh0ZXJuIEpTR0NDYWxsYmFj
awpKU19TZXRHQ0NhbGxiYWNrUlQoSlNSdW50aW1lICpydCwgSlNHQ0NhbGxiYWNrIGNiKTsKCmV4
dGVybiBKU0Jvb2wKSlNfSXNBYm91dFRvQmVGaW5hbGl6ZWQoSlNDb250ZXh0ICpjeCwgdm9pZCAq
dGhpbmcpOwojIDY0NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzYXBpLmgiCmV4dGVybiBp
bnROCkpTX0FkZEV4dGVybmFsU3RyaW5nRmluYWxpemVyKEpTU3RyaW5nRmluYWxpemVPcCBmaW5h
bGl6ZXIpOwojIDY2MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzYXBpLmgiCmV4dGVybiBp
bnROCkpTX1JlbW92ZUV4dGVybmFsU3RyaW5nRmluYWxpemVyKEpTU3RyaW5nRmluYWxpemVPcCBm
aW5hbGl6ZXIpOwoKCgoKCgpleHRlcm4gSlNTdHJpbmcgKgpKU19OZXdFeHRlcm5hbFN0cmluZyhK
U0NvbnRleHQgKmN4LCBqc2NoYXIgKmNoYXJzLCBzaXplX3QgbGVuZ3RoLCBpbnROIHR5cGUpOwoK
CgoKCmV4dGVybiBpbnROCkpTX0dldEV4dGVybmFsU3RyaW5nR0NUeXBlKEpTUnVudGltZSAqcnQs
IEpTU3RyaW5nICpzdHIpOwojIDY4OCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzYXBpLmgi
CnN0cnVjdCBKU0NsYXNzIHsKICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAgICB1aW50MzIgZmxhZ3M7
CgoKICAgIEpTUHJvcGVydHlPcCBhZGRQcm9wZXJ0eTsKICAgIEpTUHJvcGVydHlPcCBkZWxQcm9w
ZXJ0eTsKICAgIEpTUHJvcGVydHlPcCBnZXRQcm9wZXJ0eTsKICAgIEpTUHJvcGVydHlPcCBzZXRQ
cm9wZXJ0eTsKICAgIEpTRW51bWVyYXRlT3AgZW51bWVyYXRlOwogICAgSlNSZXNvbHZlT3AgcmVz
b2x2ZTsKICAgIEpTQ29udmVydE9wIGNvbnZlcnQ7CiAgICBKU0ZpbmFsaXplT3AgZmluYWxpemU7
CgoKICAgIEpTR2V0T2JqZWN0T3BzIGdldE9iamVjdE9wczsKICAgIEpTQ2hlY2tBY2Nlc3NPcCBj
aGVja0FjY2VzczsKICAgIEpTTmF0aXZlIGNhbGw7CiAgICBKU05hdGl2ZSBjb25zdHJ1Y3Q7CiAg
ICBKU1hEUk9iamVjdE9wIHhkck9iamVjdDsKICAgIEpTSGFzSW5zdGFuY2VPcCBoYXNJbnN0YW5j
ZTsKICAgIEpTTWFya09wIG1hcms7CiAgICBqc3dvcmQgc3BhcmU7Cn07CiMgNzM3ICIuLi8uLi8u
Li9kaXN0L2luY2x1ZGUvanMvanNhcGkuaCIKc3RydWN0IEpTT2JqZWN0T3BzIHsKCiAgICBKU05l
d09iamVjdE1hcE9wIG5ld09iamVjdE1hcDsKICAgIEpTT2JqZWN0TWFwT3AgZGVzdHJveU9iamVj
dE1hcDsKICAgIEpTTG9va3VwUHJvcE9wIGxvb2t1cFByb3BlcnR5OwogICAgSlNEZWZpbmVQcm9w
T3AgZGVmaW5lUHJvcGVydHk7CiAgICBKU1Byb3BlcnR5SWRPcCBnZXRQcm9wZXJ0eTsKICAgIEpT
UHJvcGVydHlJZE9wIHNldFByb3BlcnR5OwogICAgSlNBdHRyaWJ1dGVzT3AgZ2V0QXR0cmlidXRl
czsKICAgIEpTQXR0cmlidXRlc09wIHNldEF0dHJpYnV0ZXM7CiAgICBKU1Byb3BlcnR5SWRPcCBk
ZWxldGVQcm9wZXJ0eTsKICAgIEpTQ29udmVydE9wIGRlZmF1bHRWYWx1ZTsKICAgIEpTTmV3RW51
bWVyYXRlT3AgZW51bWVyYXRlOwogICAgSlNDaGVja0FjY2Vzc0lkT3AgY2hlY2tBY2Nlc3M7CgoK
ICAgIEpTT2JqZWN0T3AgdGhpc09iamVjdDsKICAgIEpTUHJvcGVydHlSZWZPcCBkcm9wUHJvcGVy
dHk7CiAgICBKU05hdGl2ZSBjYWxsOwogICAgSlNOYXRpdmUgY29uc3RydWN0OwogICAgSlNYRFJP
YmplY3RPcCB4ZHJPYmplY3Q7CiAgICBKU0hhc0luc3RhbmNlT3AgaGFzSW5zdGFuY2U7CiAgICBK
U1NldE9iamVjdFNsb3RPcCBzZXRQcm90bzsKICAgIEpTU2V0T2JqZWN0U2xvdE9wIHNldFBhcmVu
dDsKICAgIEpTTWFya09wIG1hcms7CiAgICBKU0ZpbmFsaXplT3AgY2xlYXI7CiAgICBKU0dldFJl
cXVpcmVkU2xvdE9wIGdldFJlcXVpcmVkU2xvdDsKICAgIEpTU2V0UmVxdWlyZWRTbG90T3Agc2V0
UmVxdWlyZWRTbG90Owp9OwojIDc3NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzYXBpLmgi
CnN0cnVjdCBKU1Byb3BlcnR5IHsKICAgIGpzaWQgaWQ7Cn07CgpzdHJ1Y3QgSlNJZEFycmF5IHsK
ICAgIGpzaW50IGxlbmd0aDsKICAgIGpzaWQgdmVjdG9yWzFdOwp9OwoKZXh0ZXJuIHZvaWQKSlNf
RGVzdHJveUlkQXJyYXkoSlNDb250ZXh0ICpjeCwgSlNJZEFycmF5ICppZGEpOwoKZXh0ZXJuIEpT
Qm9vbApKU19WYWx1ZVRvSWQoSlNDb250ZXh0ICpjeCwganN2YWwgdiwganNpZCAqaWRwKTsKCmV4
dGVybiBKU0Jvb2wKSlNfSWRUb1ZhbHVlKEpTQ29udGV4dCAqY3gsIGpzaWQgaWQsIGpzdmFsICp2
cCk7CgoKCgpleHRlcm4gSlNCb29sCkpTX1Byb3BlcnR5U3R1YihKU0NvbnRleHQgKmN4LCBKU09i
amVjdCAqb2JqLCBqc3ZhbCBpZCwganN2YWwgKnZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfRW51bWVy
YXRlU3R1YihKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsKCmV4dGVybiBKU0Jvb2wKSlNf
UmVzb2x2ZVN0dWIoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwganN2YWwgaWQpOwoKZXh0
ZXJuIEpTQm9vbApKU19Db252ZXJ0U3R1YihKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBK
U1R5cGUgdHlwZSwganN2YWwgKnZwKTsKCmV4dGVybiB2b2lkCkpTX0ZpbmFsaXplU3R1YihKU0Nv
bnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsKCnN0cnVjdCBKU0NvbnN0RG91YmxlU3BlYyB7CiAg
ICBqc2RvdWJsZSBkdmFsOwogICAgY29uc3QgY2hhciAqbmFtZTsKICAgIHVpbnQ4IGZsYWdzOwog
ICAgdWludDggc3BhcmVbM107Cn07CgoKCgoKCnN0cnVjdCBKU1Byb3BlcnR5U3BlYyB7CiAgICBj
b25zdCBjaGFyICpuYW1lOwogICAgaW50OCB0aW55aWQ7CiAgICB1aW50OCBmbGFnczsKICAgIEpT
UHJvcGVydHlPcCBnZXR0ZXI7CiAgICBKU1Byb3BlcnR5T3Agc2V0dGVyOwp9OwoKc3RydWN0IEpT
RnVuY3Rpb25TcGVjIHsKICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAgICBKU05hdGl2ZSBjYWxsOwog
ICAgdWludDggbmFyZ3M7CiAgICB1aW50OCBmbGFnczsKICAgIHVpbnQxNiBleHRyYTsKfTsKCmV4
dGVybiBKU09iamVjdCAqCkpTX0luaXRDbGFzcyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2Jq
LCBKU09iamVjdCAqcGFyZW50X3Byb3RvLAogICAgICAgICAgICAgSlNDbGFzcyAqY2xhc3AsIEpT
TmF0aXZlIGNvbnN0cnVjdG9yLCB1aW50TiBuYXJncywKICAgICAgICAgICAgIEpTUHJvcGVydHlT
cGVjICpwcywgSlNGdW5jdGlvblNwZWMgKmZzLAogICAgICAgICAgICAgSlNQcm9wZXJ0eVNwZWMg
KnN0YXRpY19wcywgSlNGdW5jdGlvblNwZWMgKnN0YXRpY19mcyk7CgoKZXh0ZXJuIEpTQ2xhc3Mg
KgpKU19HZXRDbGFzcyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsKIyA4NTkgIi4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gSlNCb29sCkpTX0luc3RhbmNlT2Yo
SlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgSlNDbGFzcyAqY2xhc3AsIGpzdmFsICphcmd2
KTsKCmV4dGVybiB2b2lkICoKSlNfR2V0UHJpdmF0ZShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAq
b2JqKTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0UHJpdmF0ZShKU0NvbnRleHQgKmN4LCBKU09iamVj
dCAqb2JqLCB2b2lkICpkYXRhKTsKCmV4dGVybiB2b2lkICoKSlNfR2V0SW5zdGFuY2VQcml2YXRl
KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIEpTQ2xhc3MgKmNsYXNwLAogICAgICAgICAg
ICAgICAgICAgICAganN2YWwgKmFyZ3YpOwoKZXh0ZXJuIEpTT2JqZWN0ICoKSlNfR2V0UHJvdG90
eXBlKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmopOwoKZXh0ZXJuIEpTQm9vbApKU19TZXRQ
cm90b3R5cGUoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgSlNPYmplY3QgKnByb3RvKTsK
CmV4dGVybiBKU09iamVjdCAqCkpTX0dldFBhcmVudChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAq
b2JqKTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0UGFyZW50KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0
ICpvYmosIEpTT2JqZWN0ICpwYXJlbnQpOwoKZXh0ZXJuIEpTT2JqZWN0ICoKSlNfR2V0Q29uc3Ry
dWN0b3IoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKnByb3RvKTsKCmV4dGVybiBKU09iamVjdCAq
CkpTX05ld09iamVjdChKU0NvbnRleHQgKmN4LCBKU0NsYXNzICpjbGFzcCwgSlNPYmplY3QgKnBy
b3RvLCBKU09iamVjdCAqcGFyZW50KTsKCmV4dGVybiBKU09iamVjdCAqCkpTX0NvbnN0cnVjdE9i
amVjdChKU0NvbnRleHQgKmN4LCBKU0NsYXNzICpjbGFzcCwgSlNPYmplY3QgKnByb3RvLAogICAg
ICAgICAgICAgICAgICAgSlNPYmplY3QgKnBhcmVudCk7CgpleHRlcm4gSlNPYmplY3QgKgpKU19D
b25zdHJ1Y3RPYmplY3RXaXRoQXJndW1lbnRzKEpTQ29udGV4dCAqY3gsIEpTQ2xhc3MgKmNsYXNw
LCBKU09iamVjdCAqcHJvdG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmpl
Y3QgKnBhcmVudCwgdWludE4gYXJnYywganN2YWwgKmFyZ3YpOwoKZXh0ZXJuIEpTT2JqZWN0ICoK
SlNfRGVmaW5lT2JqZWN0KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIg
Km5hbWUsIEpTQ2xhc3MgKmNsYXNwLAogICAgICAgICAgICAgICAgSlNPYmplY3QgKnByb3RvLCB1
aW50TiBhdHRycyk7CgpleHRlcm4gSlNCb29sCkpTX0RlZmluZUNvbnN0RG91YmxlcyhKU0NvbnRl
eHQgKmN4LCBKU09iamVjdCAqb2JqLCBKU0NvbnN0RG91YmxlU3BlYyAqY2RzKTsKCmV4dGVybiBK
U0Jvb2wKSlNfRGVmaW5lUHJvcGVydGllcyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBK
U1Byb3BlcnR5U3BlYyAqcHMpOwoKZXh0ZXJuIEpTQm9vbApKU19EZWZpbmVQcm9wZXJ0eShKU0Nv
bnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBqc3ZhbCB2YWx1ZSwK
ICAgICAgICAgICAgICAgICAgSlNQcm9wZXJ0eU9wIGdldHRlciwgSlNQcm9wZXJ0eU9wIHNldHRl
ciwgdWludE4gYXR0cnMpOwoKCgoKCgoKZXh0ZXJuIEpTQm9vbApKU19HZXRQcm9wZXJ0eUF0dHJp
YnV0ZXMoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnROICphdHRyc3AsIEpTQm9vbCAqZm91bmRwKTsKCgoK
CgoKCmV4dGVybiBKU0Jvb2wKSlNfU2V0UHJvcGVydHlBdHRyaWJ1dGVzKEpTQ29udGV4dCAqY3gs
IEpTT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICB1aW50TiBhdHRycywgSlNCb29sICpmb3VuZHApOwoKZXh0ZXJuIEpTQm9vbApKU19EZWZpbmVQ
cm9wZXJ0eVdpdGhUaW55SWQoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29uc3QgY2hh
ciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDggdGlueWlkLCBqc3ZhbCB2
YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTUHJvcGVydHlPcCBnZXR0ZXIsIEpT
UHJvcGVydHlPcCBzZXR0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50TiBhdHRy
cyk7CgpleHRlcm4gSlNCb29sCkpTX0FsaWFzUHJvcGVydHkoSlNDb250ZXh0ICpjeCwgSlNPYmpl
Y3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICph
bGlhcyk7CgpleHRlcm4gSlNCb29sCkpTX0xvb2t1cFByb3BlcnR5KEpTQ29udGV4dCAqY3gsIEpT
T2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGpzdmFsICp2cCk7CgpleHRlcm4gSlNCb29s
CkpTX0dldFByb3BlcnR5KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIg
Km5hbWUsIGpzdmFsICp2cCk7CgpleHRlcm4gSlNCb29sCkpTX1NldFByb3BlcnR5KEpTQ29udGV4
dCAqY3gsIEpTT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGpzdmFsICp2cCk7CgpleHRl
cm4gSlNCb29sCkpTX0RlbGV0ZVByb3BlcnR5KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmos
IGNvbnN0IGNoYXIgKm5hbWUpOwoKZXh0ZXJuIEpTQm9vbApKU19EZWxldGVQcm9wZXJ0eTIoSlND
b250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAg
ICAgICAgIGpzdmFsICpydmFsKTsKCmV4dGVybiBKU0Jvb2wKSlNfRGVmaW5lVUNQcm9wZXJ0eShK
U0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGpz
Y2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sIGpzdmFsIHZhbHVlLAogICAgICAgICAgICAgICAg
ICAgIEpTUHJvcGVydHlPcCBnZXR0ZXIsIEpTUHJvcGVydHlPcCBzZXR0ZXIsCiAgICAgICAgICAg
ICAgICAgICAgdWludE4gYXR0cnMpOwoKCgoKCgoKZXh0ZXJuIEpTQm9vbApKU19HZXRVQ1Byb3Bl
cnR5QXR0cmlidXRlcyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBqc2NoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50TiAqYXR0cnNwLCBKU0Jvb2wgKmZvdW5kcCk7CgoKCgoK
CgpleHRlcm4gSlNCb29sCkpTX1NldFVDUHJvcGVydHlBdHRyaWJ1dGVzKEpTQ29udGV4dCAqY3gs
IEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzY2hhciAq
bmFtZSwgc2l6ZV90IG5hbWVsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnROIGF0
dHJzLCBKU0Jvb2wgKmZvdW5kcCk7CgoKZXh0ZXJuIEpTQm9vbApKU19EZWZpbmVVQ1Byb3BlcnR5
V2l0aFRpbnlJZChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBqc2NoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQ4IHRpbnlpZCwganN2YWwgdmFsdWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEpTUHJvcGVydHlPcCBnZXR0ZXIsIEpTUHJvcGVydHlPcCBz
ZXR0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnROIGF0dHJzKTsKCmV4dGVy
biBKU0Jvb2wKSlNfTG9va3VwVUNQcm9wZXJ0eShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2Jq
LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4s
CiAgICAgICAgICAgICAgICAgICAganN2YWwgKnZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfR2V0VUNQ
cm9wZXJ0eShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgIGNv
bnN0IGpzY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sCiAgICAgICAgICAgICAgICAganN2YWwg
KnZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0VUNQcm9wZXJ0eShKU0NvbnRleHQgKmN4LCBKU09i
amVjdCAqb2JqLAogICAgICAgICAgICAgICAgIGNvbnN0IGpzY2hhciAqbmFtZSwgc2l6ZV90IG5h
bWVsZW4sCiAgICAgICAgICAgICAgICAganN2YWwgKnZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfRGVs
ZXRlVUNQcm9wZXJ0eTIoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwKICAgICAgICAgICAg
ICAgICAgICAgY29uc3QganNjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwKICAgICAgICAgICAg
ICAgICAgICAganN2YWwgKnJ2YWwpOwoKZXh0ZXJuIEpTT2JqZWN0ICoKSlNfTmV3QXJyYXlPYmpl
Y3QoSlNDb250ZXh0ICpjeCwganNpbnQgbGVuZ3RoLCBqc3ZhbCAqdmVjdG9yKTsKCmV4dGVybiBK
U0Jvb2wKSlNfSXNBcnJheU9iamVjdChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsKCmV4
dGVybiBKU0Jvb2wKSlNfR2V0QXJyYXlMZW5ndGgoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9i
aiwganN1aW50ICpsZW5ndGhwKTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0QXJyYXlMZW5ndGgoSlND
b250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwganN1aW50IGxlbmd0aCk7CgpleHRlcm4gSlNCb29s
CkpTX0hhc0FycmF5TGVuZ3RoKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzdWludCAq
bGVuZ3RocCk7CgpleHRlcm4gSlNCb29sCkpTX0RlZmluZUVsZW1lbnQoSlNDb250ZXh0ICpjeCwg
SlNPYmplY3QgKm9iaiwganNpbnQgaW5kZXgsIGpzdmFsIHZhbHVlLAogICAgICAgICAgICAgICAg
IEpTUHJvcGVydHlPcCBnZXR0ZXIsIEpTUHJvcGVydHlPcCBzZXR0ZXIsIHVpbnROIGF0dHJzKTsK
CmV4dGVybiBKU0Jvb2wKSlNfQWxpYXNFbGVtZW50KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpv
YmosIGNvbnN0IGNoYXIgKm5hbWUsIGpzaW50IGFsaWFzKTsKCmV4dGVybiBKU0Jvb2wKSlNfTG9v
a3VwRWxlbWVudChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBqc2ludCBpbmRleCwganN2
YWwgKnZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfR2V0RWxlbWVudChKU0NvbnRleHQgKmN4LCBKU09i
amVjdCAqb2JqLCBqc2ludCBpbmRleCwganN2YWwgKnZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0
RWxlbWVudChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBqc2ludCBpbmRleCwganN2YWwg
KnZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfRGVsZXRlRWxlbWVudChKU0NvbnRleHQgKmN4LCBKU09i
amVjdCAqb2JqLCBqc2ludCBpbmRleCk7CgpleHRlcm4gSlNCb29sCkpTX0RlbGV0ZUVsZW1lbnQy
KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzaW50IGluZGV4LCBqc3ZhbCAqcnZhbCk7
CgpleHRlcm4gdm9pZApKU19DbGVhclNjb3BlKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmop
OwoKZXh0ZXJuIEpTSWRBcnJheSAqCkpTX0VudW1lcmF0ZShKU0NvbnRleHQgKmN4LCBKU09iamVj
dCAqb2JqKTsKCmV4dGVybiBKU0Jvb2wKSlNfQ2hlY2tBY2Nlc3MoSlNDb250ZXh0ICpjeCwgSlNP
YmplY3QgKm9iaiwganNpZCBpZCwgSlNBY2Nlc3NNb2RlIG1vZGUsCiAgICAgICAgICAgICAgIGpz
dmFsICp2cCwgdWludE4gKmF0dHJzcCk7CgpleHRlcm4gSlNDaGVja0FjY2Vzc09wCkpTX1NldENo
ZWNrT2JqZWN0QWNjZXNzQ2FsbGJhY2soSlNSdW50aW1lICpydCwgSlNDaGVja0FjY2Vzc09wIGFj
Yik7CgpleHRlcm4gSlNCb29sCkpTX0dldFJlc2VydmVkU2xvdChKU0NvbnRleHQgKmN4LCBKU09i
amVjdCAqb2JqLCB1aW50MzIgaW5kZXgsIGpzdmFsICp2cCk7CgpleHRlcm4gSlNCb29sCkpTX1Nl
dFJlc2VydmVkU2xvdChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCB1aW50MzIgaW5kZXgs
IGpzdmFsIHYpOwoKCgoKCgpzdHJ1Y3QgSlNQcmluY2lwYWxzIHsKICAgIGNoYXIgKmNvZGViYXNl
OwogICAgdm9pZCAqICgqIGdldFByaW5jaXBhbEFycmF5KShKU0NvbnRleHQgKmN4LCBKU1ByaW5j
aXBhbHMgKik7CiAgICBKU0Jvb2wgKCogZ2xvYmFsUHJpdmlsZWdlc0VuYWJsZWQpKEpTQ29udGV4
dCAqY3gsIEpTUHJpbmNpcGFscyAqKTsKCgogICAgdWludE4gcmVmY291bnQ7CiAgICB2b2lkICgq
IGRlc3Ryb3kpKEpTQ29udGV4dCAqY3gsIHN0cnVjdCBKU1ByaW5jaXBhbHMgKik7Cn07CiMgMTA5
MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzYXBpLmgiCmV4dGVybiBKU1ByaW5jaXBhbHNU
cmFuc2NvZGVyCkpTX1NldFByaW5jaXBhbHNUcmFuc2NvZGVyKEpTUnVudGltZSAqcnQsIEpTUHJp
bmNpcGFsc1RyYW5zY29kZXIgcHgpOwoKCgoKCgpleHRlcm4gSlNGdW5jdGlvbiAqCkpTX05ld0Z1
bmN0aW9uKEpTQ29udGV4dCAqY3gsIEpTTmF0aXZlIGNhbGwsIHVpbnROIG5hcmdzLCB1aW50TiBm
bGFncywKICAgICAgICAgICAgICAgSlNPYmplY3QgKnBhcmVudCwgY29uc3QgY2hhciAqbmFtZSk7
CgpleHRlcm4gSlNPYmplY3QgKgpKU19HZXRGdW5jdGlvbk9iamVjdChKU0Z1bmN0aW9uICpmdW4p
OwoKCgoKCmV4dGVybiBjb25zdCBjaGFyICoKSlNfR2V0RnVuY3Rpb25OYW1lKEpTRnVuY3Rpb24g
KmZ1bik7CiMgMTEyNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzYXBpLmgiCmV4dGVybiBK
U1N0cmluZyAqCkpTX0dldEZ1bmN0aW9uSWQoSlNGdW5jdGlvbiAqZnVuKTsKCgoKCmV4dGVybiB1
aW50TgpKU19HZXRGdW5jdGlvbkZsYWdzKEpTRnVuY3Rpb24gKmZ1bik7CgoKCgoKCgpleHRlcm4g
SlNCb29sCkpTX09iamVjdElzRnVuY3Rpb24oSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaik7
CgpleHRlcm4gSlNCb29sCkpTX0RlZmluZUZ1bmN0aW9ucyhKU0NvbnRleHQgKmN4LCBKU09iamVj
dCAqb2JqLCBKU0Z1bmN0aW9uU3BlYyAqZnMpOwoKZXh0ZXJuIEpTRnVuY3Rpb24gKgpKU19EZWZp
bmVGdW5jdGlvbihKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1l
LCBKU05hdGl2ZSBjYWxsLAogICAgICAgICAgICAgICAgICB1aW50TiBuYXJncywgdWludE4gYXR0
cnMpOwoKZXh0ZXJuIEpTT2JqZWN0ICoKSlNfQ2xvbmVGdW5jdGlvbk9iamVjdChKU0NvbnRleHQg
KmN4LCBKU09iamVjdCAqZnVub2JqLCBKU09iamVjdCAqcGFyZW50KTsKIyAxMTU5ICIuLi8uLi8u
Li9kaXN0L2luY2x1ZGUvanMvanNhcGkuaCIKZXh0ZXJuIEpTQm9vbApKU19CdWZmZXJJc0NvbXBp
bGFibGVVbml0KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqYnl0ZXMsIHNpemVfdCBsZW5ndGgpOwojIDExNzAgIi4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gSlNTY3JpcHQgKgpKU19Db21waWxl
U2NyaXB0KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqYnl0ZXMsIHNpemVfdCBsZW5ndGgsCiAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqZmlsZW5hbWUsIHVpbnROIGxpbmVubyk7CgpleHRlcm4gSlNTY3JpcHQgKgpKU19Db21waWxl
U2NyaXB0Rm9yUHJpbmNpcGFscyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBKU1ByaW5jaXBhbHMgKnByaW5jaXBhbHMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ5dGVzLCBzaXplX3QgbGVuZ3RoLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgdWludE4g
bGluZW5vKTsKCmV4dGVybiBKU1NjcmlwdCAqCkpTX0NvbXBpbGVVQ1NjcmlwdChKU0NvbnRleHQg
KmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgY29uc3QganNjaGFyICpjaGFy
cywgc2l6ZV90IGxlbmd0aCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1l
LCB1aW50TiBsaW5lbm8pOwoKZXh0ZXJuIEpTU2NyaXB0ICoKSlNfQ29tcGlsZVVDU2NyaXB0Rm9y
UHJpbmNpcGFscyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEpTUHJpbmNpcGFscyAqcHJpbmNpcGFscywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBqc2NoYXIgKmNoYXJzLCBzaXplX3QgbGVuZ3RoLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1aW50TiBs
aW5lbm8pOwoKZXh0ZXJuIEpTU2NyaXB0ICoKSlNfQ29tcGlsZUZpbGUoSlNDb250ZXh0ICpjeCwg
SlNPYmplY3QgKm9iaiwgY29uc3QgY2hhciAqZmlsZW5hbWUpOwoKZXh0ZXJuIEpTU2NyaXB0ICoK
SlNfQ29tcGlsZUZpbGVIYW5kbGUoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29uc3Qg
Y2hhciAqZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgIEZJTEUgKmZoKTsKCmV4dGVybiBK
U1NjcmlwdCAqCkpTX0NvbXBpbGVGaWxlSGFuZGxlRm9yUHJpbmNpcGFscyhKU0NvbnRleHQgKmN4
LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAqZmlsZW5hbWUsIEZJTEUgKmZoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSlNQcmluY2lwYWxzICpwcmluY2lwYWxzKTsKIyAxMjIwICIuLi8uLi8uLi9kaXN0L2luY2x1
ZGUvanMvanNhcGkuaCIKZXh0ZXJuIEpTT2JqZWN0ICoKSlNfTmV3U2NyaXB0T2JqZWN0KEpTQ29u
dGV4dCAqY3gsIEpTU2NyaXB0ICpzY3JpcHQpOwoKCgoKCmV4dGVybiBKU09iamVjdCAqCkpTX0dl
dFNjcmlwdE9iamVjdChKU1NjcmlwdCAqc2NyaXB0KTsKCmV4dGVybiB2b2lkCkpTX0Rlc3Ryb3lT
Y3JpcHQoSlNDb250ZXh0ICpjeCwgSlNTY3JpcHQgKnNjcmlwdCk7CgpleHRlcm4gSlNGdW5jdGlv
biAqCkpTX0NvbXBpbGVGdW5jdGlvbihKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBjb25z
dCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgdWludE4gbmFyZ3MsIGNvbnN0IGNoYXIg
KiphcmduYW1lcywKICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ5dGVzLCBzaXplX3Qg
bGVuZ3RoLAogICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIHVpbnROIGxp
bmVubyk7CgpleHRlcm4gSlNGdW5jdGlvbiAqCkpTX0NvbXBpbGVGdW5jdGlvbkZvclByaW5jaXBh
bHMoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBKU1ByaW5jaXBhbHMgKnByaW5jaXBhbHMsIGNvbnN0IGNoYXIgKm5hbWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludE4gbmFyZ3MsIGNvbnN0IGNoYXIgKiphcmdu
YW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpieXRlcywg
c2l6ZV90IGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICpmaWxlbmFtZSwgdWludE4gbGluZW5vKTsKCmV4dGVybiBKU0Z1bmN0aW9uICoKSlNfQ29tcGls
ZVVDRnVuY3Rpb24oSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFt
ZSwKICAgICAgICAgICAgICAgICAgICAgdWludE4gbmFyZ3MsIGNvbnN0IGNoYXIgKiphcmduYW1l
cywKICAgICAgICAgICAgICAgICAgICAgY29uc3QganNjaGFyICpjaGFycywgc2l6ZV90IGxlbmd0
aCwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIHVpbnROIGxpbmVu
byk7CgpleHRlcm4gSlNGdW5jdGlvbiAqCkpTX0NvbXBpbGVVQ0Z1bmN0aW9uRm9yUHJpbmNpcGFs
cyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSlNQcmluY2lwYWxzICpwcmluY2lwYWxzLCBjb25zdCBjaGFyICpuYW1lLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludE4gbmFyZ3MsIGNvbnN0IGNoYXIgKiph
cmduYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzY2hhciAq
Y2hhcnMsIHNpemVfdCBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyICpmaWxlbmFtZSwgdWludE4gbGluZW5vKTsKCmV4dGVybiBKU1N0cmluZyAqCkpT
X0RlY29tcGlsZVNjcmlwdChKU0NvbnRleHQgKmN4LCBKU1NjcmlwdCAqc2NyaXB0LCBjb25zdCBj
aGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgdWludE4gaW5kZW50KTsKCgoKCgoKCmV4dGVy
biBKU1N0cmluZyAqCkpTX0RlY29tcGlsZUZ1bmN0aW9uKEpTQ29udGV4dCAqY3gsIEpTRnVuY3Rp
b24gKmZ1biwgdWludE4gaW5kZW50KTsKCmV4dGVybiBKU1N0cmluZyAqCkpTX0RlY29tcGlsZUZ1
bmN0aW9uQm9keShKU0NvbnRleHQgKmN4LCBKU0Z1bmN0aW9uICpmdW4sIHVpbnROIGluZGVudCk7
CiMgMTMxMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzYXBpLmgiCmV4dGVybiBKU0Jvb2wK
SlNfRXhlY3V0ZVNjcmlwdChKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBKU1NjcmlwdCAq
c2NyaXB0LCBqc3ZhbCAqcnZhbCk7CgoKCgoKdHlwZWRlZiBlbnVtIEpTRXhlY1BhcnQgeyBKU0VY
RUNfUFJPTE9HLCBKU0VYRUNfTUFJTiB9IEpTRXhlY1BhcnQ7CgpleHRlcm4gSlNCb29sCkpTX0V4
ZWN1dGVTY3JpcHRQYXJ0KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIEpTU2NyaXB0ICpz
Y3JpcHQsCiAgICAgICAgICAgICAgICAgICAgIEpTRXhlY1BhcnQgcGFydCwganN2YWwgKnJ2YWwp
OwoKZXh0ZXJuIEpTQm9vbApKU19FdmFsdWF0ZVNjcmlwdChKU0NvbnRleHQgKmN4LCBKU09iamVj
dCAqb2JqLAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpieXRlcywgdWludE4gbGVuZ3Ro
LAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgdWludE4gbGluZW5vLAog
ICAgICAgICAgICAgICAgICBqc3ZhbCAqcnZhbCk7CgpleHRlcm4gSlNCb29sCkpTX0V2YWx1YXRl
U2NyaXB0Rm9yUHJpbmNpcGFscyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSlNQcmluY2lwYWxzICpwcmluY2lwYWxzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnl0ZXMsIHVpbnROIGxlbmd0aCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1aW50
TiBsaW5lbm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc3ZhbCAqcnZhbCk7Cgpl
eHRlcm4gSlNCb29sCkpTX0V2YWx1YXRlVUNTY3JpcHQoSlNDb250ZXh0ICpjeCwgSlNPYmplY3Qg
Km9iaiwKICAgICAgICAgICAgICAgICAgICBjb25zdCBqc2NoYXIgKmNoYXJzLCB1aW50TiBsZW5n
dGgsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIHVpbnROIGxpbmVu
bywKICAgICAgICAgICAgICAgICAgICBqc3ZhbCAqcnZhbCk7CgpleHRlcm4gSlNCb29sCkpTX0V2
YWx1YXRlVUNTY3JpcHRGb3JQcmluY2lwYWxzKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmos
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTUHJpbmNpcGFscyAqcHJpbmNpcGFs
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QganNjaGFyICpjaGFycywg
dWludE4gbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICpmaWxlbmFtZSwgdWludE4gbGluZW5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqc3ZhbCAqcnZhbCk7CgpleHRlcm4gSlNCb29sCkpTX0NhbGxGdW5jdGlvbihKU0NvbnRleHQg
KmN4LCBKU09iamVjdCAqb2JqLCBKU0Z1bmN0aW9uICpmdW4sIHVpbnROIGFyZ2MsCiAgICAgICAg
ICAgICAgICBqc3ZhbCAqYXJndiwganN2YWwgKnJ2YWwpOwoKZXh0ZXJuIEpTQm9vbApKU19DYWxs
RnVuY3Rpb25OYW1lKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5h
bWUsIHVpbnROIGFyZ2MsCiAgICAgICAgICAgICAgICAgICAganN2YWwgKmFyZ3YsIGpzdmFsICpy
dmFsKTsKCmV4dGVybiBKU0Jvb2wKSlNfQ2FsbEZ1bmN0aW9uVmFsdWUoSlNDb250ZXh0ICpjeCwg
SlNPYmplY3QgKm9iaiwganN2YWwgZnZhbCwgdWludE4gYXJnYywKICAgICAgICAgICAgICAgICAg
ICAganN2YWwgKmFyZ3YsIGpzdmFsICpydmFsKTsKCmV4dGVybiBKU0JyYW5jaENhbGxiYWNrCkpT
X1NldEJyYW5jaENhbGxiYWNrKEpTQ29udGV4dCAqY3gsIEpTQnJhbmNoQ2FsbGJhY2sgY2IpOwoK
ZXh0ZXJuIEpTQm9vbApKU19Jc1J1bm5pbmcoSlNDb250ZXh0ICpjeCk7CgpleHRlcm4gSlNCb29s
CkpTX0lzQ29uc3RydWN0aW5nKEpTQ29udGV4dCAqY3gpOwoKCgoKCgpleHRlcm4gSlNCb29sCkpT
X0lzQXNzaWduaW5nKEpTQ29udGV4dCAqY3gpOwojIDEzODYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9qcy9qc2FwaS5oIgpleHRlcm4gdm9pZApKU19TZXRDYWxsUmV0dXJuVmFsdWUyKEpTQ29udGV4
dCAqY3gsIGpzdmFsIHYpOwojIDE0MDAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5o
IgpleHRlcm4gSlNTdHJpbmcgKgpKU19OZXdTdHJpbmcoSlNDb250ZXh0ICpjeCwgY2hhciAqYnl0
ZXMsIHNpemVfdCBsZW5ndGgpOwoKZXh0ZXJuIEpTU3RyaW5nICoKSlNfTmV3U3RyaW5nQ29weU4o
SlNDb250ZXh0ICpjeCwgY29uc3QgY2hhciAqcywgc2l6ZV90IG4pOwoKZXh0ZXJuIEpTU3RyaW5n
ICoKSlNfTmV3U3RyaW5nQ29weVooSlNDb250ZXh0ICpjeCwgY29uc3QgY2hhciAqcyk7CgpleHRl
cm4gSlNTdHJpbmcgKgpKU19JbnRlcm5TdHJpbmcoSlNDb250ZXh0ICpjeCwgY29uc3QgY2hhciAq
cyk7CgpleHRlcm4gSlNTdHJpbmcgKgpKU19OZXdVQ1N0cmluZyhKU0NvbnRleHQgKmN4LCBqc2No
YXIgKmNoYXJzLCBzaXplX3QgbGVuZ3RoKTsKCmV4dGVybiBKU1N0cmluZyAqCkpTX05ld1VDU3Ry
aW5nQ29weU4oSlNDb250ZXh0ICpjeCwgY29uc3QganNjaGFyICpzLCBzaXplX3Qgbik7CgpleHRl
cm4gSlNTdHJpbmcgKgpKU19OZXdVQ1N0cmluZ0NvcHlaKEpTQ29udGV4dCAqY3gsIGNvbnN0IGpz
Y2hhciAqcyk7CgpleHRlcm4gSlNTdHJpbmcgKgpKU19JbnRlcm5VQ1N0cmluZ04oSlNDb250ZXh0
ICpjeCwgY29uc3QganNjaGFyICpzLCBzaXplX3QgbGVuZ3RoKTsKCmV4dGVybiBKU1N0cmluZyAq
CkpTX0ludGVyblVDU3RyaW5nKEpTQ29udGV4dCAqY3gsIGNvbnN0IGpzY2hhciAqcyk7CgpleHRl
cm4gY2hhciAqCkpTX0dldFN0cmluZ0J5dGVzKEpTU3RyaW5nICpzdHIpOwoKZXh0ZXJuIGpzY2hh
ciAqCkpTX0dldFN0cmluZ0NoYXJzKEpTU3RyaW5nICpzdHIpOwoKZXh0ZXJuIHNpemVfdApKU19H
ZXRTdHJpbmdMZW5ndGgoSlNTdHJpbmcgKnN0cik7CgpleHRlcm4gaW50TgpKU19Db21wYXJlU3Ry
aW5ncyhKU1N0cmluZyAqc3RyMSwgSlNTdHJpbmcgKnN0cjIpOwojIDE0NTggIi4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4gSlNTdHJpbmcgKgpKU19OZXdHcm93YWJsZVN0
cmluZyhKU0NvbnRleHQgKmN4LCBqc2NoYXIgKmNoYXJzLCBzaXplX3QgbGVuZ3RoKTsKCgoKCgoK
ZXh0ZXJuIEpTU3RyaW5nICoKSlNfTmV3RGVwZW5kZW50U3RyaW5nKEpTQ29udGV4dCAqY3gsIEpT
U3RyaW5nICpzdHIsIHNpemVfdCBzdGFydCwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBs
ZW5ndGgpOwojIDE0NzcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5oIgpleHRlcm4g
SlNTdHJpbmcgKgpKU19Db25jYXRTdHJpbmdzKEpTQ29udGV4dCAqY3gsIEpTU3RyaW5nICpsZWZ0
LCBKU1N0cmluZyAqcmlnaHQpOwoKCgoKCmV4dGVybiBjb25zdCBqc2NoYXIgKgpKU19VbmRlcGVu
ZFN0cmluZyhKU0NvbnRleHQgKmN4LCBKU1N0cmluZyAqc3RyKTsKCgoKCgpleHRlcm4gSlNCb29s
CkpTX01ha2VTdHJpbmdJbW11dGFibGUoSlNDb250ZXh0ICpjeCwgSlNTdHJpbmcgKnN0cik7CgoK
CgoKCnN0cnVjdCBKU0xvY2FsZUNhbGxiYWNrcyB7CiAgICBKU0xvY2FsZVRvVXBwZXJDYXNlIGxv
Y2FsZVRvVXBwZXJDYXNlOwogICAgSlNMb2NhbGVUb0xvd2VyQ2FzZSBsb2NhbGVUb0xvd2VyQ2Fz
ZTsKICAgIEpTTG9jYWxlQ29tcGFyZSBsb2NhbGVDb21wYXJlOwp9OwoKCgoKCmV4dGVybiB2b2lk
CkpTX1NldExvY2FsZUNhbGxiYWNrcyhKU0NvbnRleHQgKmN4LCBKU0xvY2FsZUNhbGxiYWNrcyAq
Y2FsbGJhY2tzKTsKCgoKCgpleHRlcm4gSlNMb2NhbGVDYWxsYmFja3MgKgpKU19HZXRMb2NhbGVD
YWxsYmFja3MoSlNDb250ZXh0ICpjeCk7CiMgMTUzMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pz
L2pzYXBpLmgiCmV4dGVybiB2b2lkCkpTX1JlcG9ydEVycm9yKEpTQ29udGV4dCAqY3gsIGNvbnN0
IGNoYXIgKmZvcm1hdCwgLi4uKTsKCgoKCmV4dGVybiB2b2lkCkpTX1JlcG9ydEVycm9yTnVtYmVy
KEpTQ29udGV4dCAqY3gsIEpTRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrLAogICAgICAgICAg
ICAgICAgICAgICB2b2lkICp1c2VyUmVmLCBjb25zdCB1aW50TiBlcnJvck51bWJlciwgLi4uKTsK
CgoKCmV4dGVybiB2b2lkCkpTX1JlcG9ydEVycm9yTnVtYmVyVUMoSlNDb250ZXh0ICpjeCwgSlNF
cnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2ssCiAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVz
ZXJSZWYsIGNvbnN0IHVpbnROIGVycm9yTnVtYmVyLCAuLi4pOwoKCgoKCgoKZXh0ZXJuIEpTQm9v
bApKU19SZXBvcnRXYXJuaW5nKEpTQ29udGV4dCAqY3gsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4u
KTsKCmV4dGVybiBKU0Jvb2wKSlNfUmVwb3J0RXJyb3JGbGFnc0FuZE51bWJlcihKU0NvbnRleHQg
KmN4LCB1aW50TiBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0Vycm9yQ2Fs
bGJhY2sgZXJyb3JDYWxsYmFjaywgdm9pZCAqdXNlclJlZiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB1aW50TiBlcnJvck51bWJlciwgLi4uKTsKCmV4dGVybiBKU0Jvb2wKSlNf
UmVwb3J0RXJyb3JGbGFnc0FuZE51bWJlclVDKEpTQ29udGV4dCAqY3gsIHVpbnROIGZsYWdzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNFcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJh
Y2ssIHZvaWQgKnVzZXJSZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1
aW50TiBlcnJvck51bWJlciwgLi4uKTsKCgoKCmV4dGVybiB2b2lkCkpTX1JlcG9ydE91dE9mTWVt
b3J5KEpTQ29udGV4dCAqY3gpOwoKc3RydWN0IEpTRXJyb3JSZXBvcnQgewogICAgY29uc3QgY2hh
ciAqZmlsZW5hbWU7CiAgICB1aW50TiBsaW5lbm87CiAgICBjb25zdCBjaGFyICpsaW5lYnVmOwog
ICAgY29uc3QgY2hhciAqdG9rZW5wdHI7CiAgICBjb25zdCBqc2NoYXIgKnVjbGluZWJ1ZjsKICAg
IGNvbnN0IGpzY2hhciAqdWN0b2tlbnB0cjsKICAgIHVpbnROIGZsYWdzOwogICAgdWludE4gZXJy
b3JOdW1iZXI7CiAgICBjb25zdCBqc2NoYXIgKnVjbWVzc2FnZTsKICAgIGNvbnN0IGpzY2hhciAq
Km1lc3NhZ2VBcmdzOwp9OwojIDE2MDUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2FwaS5o
IgpleHRlcm4gSlNFcnJvclJlcG9ydGVyCkpTX1NldEVycm9yUmVwb3J0ZXIoSlNDb250ZXh0ICpj
eCwgSlNFcnJvclJlcG9ydGVyIGVyKTsKIyAxNjE3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMv
anNhcGkuaCIKZXh0ZXJuIEpTT2JqZWN0ICoKSlNfTmV3UmVnRXhwT2JqZWN0KEpTQ29udGV4dCAq
Y3gsIGNoYXIgKmJ5dGVzLCBzaXplX3QgbGVuZ3RoLCB1aW50TiBmbGFncyk7CgpleHRlcm4gSlNP
YmplY3QgKgpKU19OZXdVQ1JlZ0V4cE9iamVjdChKU0NvbnRleHQgKmN4LCBqc2NoYXIgKmNoYXJz
LCBzaXplX3QgbGVuZ3RoLCB1aW50TiBmbGFncyk7CgpleHRlcm4gdm9pZApKU19TZXRSZWdFeHBJ
bnB1dChKU0NvbnRleHQgKmN4LCBKU1N0cmluZyAqaW5wdXQsIEpTQm9vbCBtdWx0aWxpbmUpOwoK
ZXh0ZXJuIHZvaWQKSlNfQ2xlYXJSZWdFeHBTdGF0aWNzKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJu
IHZvaWQKSlNfQ2xlYXJSZWdFeHBSb290cyhKU0NvbnRleHQgKmN4KTsKCgoKCgpleHRlcm4gSlNC
b29sCkpTX0lzRXhjZXB0aW9uUGVuZGluZyhKU0NvbnRleHQgKmN4KTsKCmV4dGVybiBKU0Jvb2wK
SlNfR2V0UGVuZGluZ0V4Y2VwdGlvbihKU0NvbnRleHQgKmN4LCBqc3ZhbCAqdnApOwoKZXh0ZXJu
IHZvaWQKSlNfU2V0UGVuZGluZ0V4Y2VwdGlvbihKU0NvbnRleHQgKmN4LCBqc3ZhbCB2KTsKCmV4
dGVybiB2b2lkCkpTX0NsZWFyUGVuZGluZ0V4Y2VwdGlvbihKU0NvbnRleHQgKmN4KTsKIyAxNjU5
ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNhcGkuaCIKZXh0ZXJuIEpTRXhjZXB0aW9uU3Rh
dGUgKgpKU19TYXZlRXhjZXB0aW9uU3RhdGUoSlNDb250ZXh0ICpjeCk7CgpleHRlcm4gdm9pZApK
U19SZXN0b3JlRXhjZXB0aW9uU3RhdGUoSlNDb250ZXh0ICpjeCwgSlNFeGNlcHRpb25TdGF0ZSAq
c3RhdGUpOwoKZXh0ZXJuIHZvaWQKSlNfRHJvcEV4Y2VwdGlvblN0YXRlKEpTQ29udGV4dCAqY3gs
IEpTRXhjZXB0aW9uU3RhdGUgKnN0YXRlKTsKIyAxNjc1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv
anMvanNhcGkuaCIKZXh0ZXJuIEpTRXJyb3JSZXBvcnQgKgpKU19FcnJvckZyb21FeGNlcHRpb24o
SlNDb250ZXh0ICpjeCwganN2YWwgdik7CiMgMTY5MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pz
L2pzYXBpLmgiCmV4dGVybiBpbnROCkpTX0dldENvbnRleHRUaHJlYWQoSlNDb250ZXh0ICpjeCk7
CgpleHRlcm4gaW50TgpKU19TZXRDb250ZXh0VGhyZWFkKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJu
IGludE4KSlNfQ2xlYXJDb250ZXh0VGhyZWFkKEpTQ29udGV4dCAqY3gpOwoKCgoKCn0KIyA0NiAi
bnNET01DbGFzc0luZm8uaCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jYXBzL25zSVNj
cmlwdFNlY3VyaXR5TWFuYWdlci5oIiAxCiMgMTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jYXBz
L25zSVNjcmlwdFNlY3VyaXR5TWFuYWdlci5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9j
YXBzL25zSVByaW5jaXBhbC5oIiAxCiMgMTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jYXBzL25z
SVByaW5jaXBhbC5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTZXJpYWxp
emFibGUuaCIgMQojIDE3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU2VyaWFsaXph
YmxlLmgiCmNsYXNzIG5zSU9iamVjdElucHV0U3RyZWFtOwoKY2xhc3MgbnNJT2JqZWN0T3V0cHV0
U3RyZWFtOwojIDI5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU2VyaWFsaXphYmxl
LmgiCmNsYXNzIG5zSVNlcmlhbGl6YWJsZSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6
CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQg
PSB7MHg5MWNjYTk4MSwgMHhjMjZkLCAweDQ0YTgsIHsgMHhiZSwgMHhiZSwgMHhkOSwgMHhlZCwg
MHg0OCwgMHg5MSwgMHg1MCwgMHgzYSB9fTsgcmV0dXJuIGlpZDt9CiMgNDEgIi4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS94cGNvbS9uc0lTZXJpYWxpemFibGUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJl
YWQobnNJT2JqZWN0SW5wdXRTdHJlYW0gKmFJbnB1dFN0cmVhbSkgPSAwOwojIDUzICIuLi8uLi8u
Li9kaXN0L2luY2x1ZGUveHBjb20vbnNJU2VyaWFsaXphYmxlLmgiCiAgdmlydHVhbCBuc3Jlc3Vs
dCBXcml0ZShuc0lPYmplY3RPdXRwdXRTdHJlYW0gKmFPdXRwdXRTdHJlYW0pID0gMDsKCn07CiMg
MTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jYXBzL25zSVByaW5jaXBhbC5oIiAyCgoKCgoKCnN0
cnVjdCBKU1ByaW5jaXBhbHM7CiMgMjYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jYXBzL25zSVBy
aW5jaXBhbC5oIgpjbGFzcyBuc0lQcmluY2lwYWwgOiBwdWJsaWMgbnNJU2VyaWFsaXphYmxlIHsK
IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z
SUlEIGlpZCA9IHsweGZmOTMxM2QwLCAweDI1ZTEsIDB4MTFkMiwgeyAweDgxLCAweDYwLCAweDAw
LCAweDYwLCAweDA4LCAweDExLCAweDlkLCAweDdhIH19OyByZXR1cm4gaWlkO30KCiAgZW51bSB7
IEVOQUJMRV9ERU5JRUQgPSAxIH07CgogIGVudW0geyBFTkFCTEVfVU5LTk9XTiA9IDIgfTsKCiAg
ZW51bSB7IEVOQUJMRV9XSVRIX1VTRVJfUEVSTUlTU0lPTiA9IDMgfTsKCiAgZW51bSB7IEVOQUJM
RV9HUkFOVEVEID0gNCB9OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUb1N0cmluZyhjaGFyICoqX3Jl
dHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUb1VzZXJWaXNpYmxlU3RyaW5nKGNoYXIg
KipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByZWZlcmVuY2VzKGNoYXIg
KipwcmVmTmFtZSwgY2hhciAqKmlkLCBjaGFyICoqZ3JhbnRlZExpc3QsIGNoYXIgKipkZW5pZWRM
aXN0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEVxdWFscyhuc0lQcmluY2lwYWwgKm90aGVy
LCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFzaFZhbHVlKFBS
VWludDMyICpfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEpTUHJpbmNpcGFs
cyhKU1ByaW5jaXBhbHMgKiAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDYW5F
bmFibGVDYXBhYmlsaXR5KGNvbnN0IGNoYXIgKmNhcGFiaWxpdHksIFBSSW50MTYgKl9yZXR2YWwp
ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q2FuRW5hYmxlQ2FwYWJpbGl0eShjb25zdCBj
aGFyICpjYXBhYmlsaXR5LCBQUkludDE2IGNhbkVuYWJsZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBJc0NhcGFiaWxpdHlFbmFibGVkKGNvbnN0IGNoYXIgKmNhcGFiaWxpdHksIHZvaWQgKiBh
bm5vdGF0aW9uLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRW5h
YmxlQ2FwYWJpbGl0eShjb25zdCBjaGFyICpjYXBhYmlsaXR5LCB2b2lkICogKmFubm90YXRpb24p
ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmV2ZXJ0Q2FwYWJpbGl0eShjb25zdCBjaGFyICpj
YXBhYmlsaXR5LCB2b2lkICogKmFubm90YXRpb24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
RGlzYWJsZUNhcGFiaWxpdHkoY29uc3QgY2hhciAqY2FwYWJpbGl0eSwgdm9pZCAqICphbm5vdGF0
aW9uKSA9IDA7Cgp9OwojIDE1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY2Fwcy9uc0lTY3JpcHRT
ZWN1cml0eU1hbmFnZXIuaCIgMgoKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbm5l
Y3QvbnNJWFBDU2VjdXJpdHlNYW5hZ2VyLmgiIDEKIyAxOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L3hwY29ubmVjdC9uc0lYUENTZWN1cml0eU1hbmFnZXIuaCIKY2xhc3MgbnNJQ2xhc3NJbmZvOwoK
Y2xhc3MgbnNJWFBDTmF0aXZlQ2FsbENvbnRleHQ7CiMgMzAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS94cGNvbm5lY3QvbnNJWFBDU2VjdXJpdHlNYW5hZ2VyLmgiCmNsYXNzIG5zSVhQQ1NlY3VyaXR5
TWFuYWdlciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBu
c0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgzMTQzMTQ0MCwgMHhm
MWNlLCAweDExZDIsIHsgMHg5OCwgMHg1YSwgMHgwMCwgMHg2MCwgMHgwOCwgMHg5NiwgMHgyNCwg
MHgyMiB9fTsgcmV0dXJuIGlpZDt9CgoKCgogIGVudW0geyBIT09LX0NSRUFURV9XUkFQUEVSID0g
MVUgfTsKCiAgZW51bSB7IEhPT0tfQ1JFQVRFX0lOU1RBTkNFID0gMlUgfTsKCiAgZW51bSB7IEhP
T0tfR0VUX1NFUlZJQ0UgPSA0VSB9OwoKICBlbnVtIHsgSE9PS19DQUxMX01FVEhPRCA9IDhVIH07
CgogIGVudW0geyBIT09LX0dFVF9QUk9QRVJUWSA9IDE2VSB9OwoKICBlbnVtIHsgSE9PS19TRVRf
UFJPUEVSVFkgPSAzMlUgfTsKCiAgZW51bSB7IEhPT0tfQUxMID0gNjNVIH07CiMgNjAgIi4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QvbnNJWFBDU2VjdXJpdHlNYW5hZ2VyLmgiCiAgdmly
dHVhbCBuc3Jlc3VsdCBDYW5DcmVhdGVXcmFwcGVyKEpTQ29udGV4dCAqIGFKU0NvbnRleHQsIGNv
bnN0IG5zSUlEICYgYUlJRCwgbnNJU3VwcG9ydHMgKmFPYmosIG5zSUNsYXNzSW5mbyAqYUNsYXNz
SW5mbywgdm9pZCAqICphUG9saWN5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENhbkNyZWF0
ZUluc3RhbmNlKEpTQ29udGV4dCAqIGFKU0NvbnRleHQsIGNvbnN0IG5zQ0lEICYgYUNJRCkgPSAw
OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDYW5HZXRTZXJ2aWNlKEpTQ29udGV4dCAqIGFKU0NvbnRl
eHQsIGNvbnN0IG5zQ0lEICYgYUNJRCkgPSAwOwoKICBlbnVtIHsgQUNDRVNTX0NBTExfTUVUSE9E
ID0gMFUgfTsKCiAgZW51bSB7IEFDQ0VTU19HRVRfUFJPUEVSVFkgPSAxVSB9OwoKICBlbnVtIHsg
QUNDRVNTX1NFVF9QUk9QRVJUWSA9IDJVIH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENhbkFjY2Vz
cyhQUlVpbnQzMiBhQWN0aW9uLCBuc0lYUENOYXRpdmVDYWxsQ29udGV4dCAqYUNhbGxDb250ZXh0
LCBKU0NvbnRleHQgKiBhSlNDb250ZXh0LCBKU09iamVjdCAqIGFKU09iamVjdCwgbnNJU3VwcG9y
dHMgKmFPYmosIG5zSUNsYXNzSW5mbyAqYUNsYXNzSW5mbywganN2YWwgYU5hbWUsIHZvaWQgKiAq
YVBvbGljeSkgPSAwOwoKfTsKIyAxOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NhcHMvbnNJU2Ny
aXB0U2VjdXJpdHlNYW5hZ2VyLmgiIDIKCgoKCgoKY2xhc3MgbnNJVVJJOwojIDM1ICIuLi8uLi8u
Li9kaXN0L2luY2x1ZGUvY2Fwcy9uc0lTY3JpcHRTZWN1cml0eU1hbmFnZXIuaCIKY2xhc3MgbnNJ
U2NyaXB0U2VjdXJpdHlNYW5hZ2VyIDogcHVibGljIG5zSVhQQ1NlY3VyaXR5TWFuYWdlciB7CiBw
dWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJ
RCBpaWQgPSB7MHg1OGRmNTc4MCwgMHg4MDA2LCAweDExZDIsIHsgMHhiZCwgMHg5MSwgMHgwMCwg
MHg4MCwgMHg1ZiwgMHg4YSwgMHhlMywgMHhmNCB9fTsgcmV0dXJuIGlpZDt9CgoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IENoZWNrUHJvcGVydHlBY2Nlc3MoSlNDb250ZXh0ICogYUpTQ29udGV4dCwg
SlNPYmplY3QgKiBhSlNPYmplY3QsIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsIGpzdmFsIGFQcm9w
ZXJ0eSwgUFJVaW50MzIgYUFjdGlvbikgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDaGVj
a0Nvbm5lY3QoSlNDb250ZXh0ICogYUpTQ29udGV4dCwgbnNJVVJJICphVGFyZ2V0VVJJLCBjb25z
dCBjaGFyICphQ2xhc3NOYW1lLCBjb25zdCBjaGFyICphUHJvcGVydHkpID0gMDsKIyA2MiAiLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL2NhcHMvbnNJU2NyaXB0U2VjdXJpdHlNYW5hZ2VyLmgiCiAgdmly
dHVhbCBuc3Jlc3VsdCBDaGVja0xvYWRVUklGcm9tU2NyaXB0KEpTQ29udGV4dCAqIGN4LCBuc0lV
UkkgKnVyaSkgPSAwOwoKCgoKICBlbnVtIHsgU1RBTkRBUkQgPSAwVSB9OwoKICBlbnVtIHsgRElT
QUxMT1dfRlJPTV9NQUlMID0gMVUgfTsKCiAgZW51bSB7IEFMTE9XX0NIUk9NRSA9IDJVIH07CiMg
ODQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jYXBzL25zSVNjcmlwdFNlY3VyaXR5TWFuYWdlci5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgQ2hlY2tMb2FkVVJJKG5zSVVSSSAqZnJvbSwgbnNJVVJJICp1
cmksIFBSVWludDMyIGZsYWdzKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDaGVja0xv
YWRVUklTdHIoY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdXJpLCBQUlVpbnQzMiBmbGFn
cykgPSAwOwojIDEwNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NhcHMvbnNJU2NyaXB0U2VjdXJp
dHlNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDaGVja0Z1bmN0aW9uQWNjZXNzKEpTQ29u
dGV4dCAqIGN4LCB2b2lkICogZnVuT2JqLCB2b2lkICogdGFyZ2V0T2JqKSA9IDA7CgoKCgoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBDYW5FeGVjdXRlU2NyaXB0cyhKU0NvbnRleHQgKiBjeCwgbnNJUHJp
bmNpcGFsICpwcmluY2lwYWwsIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldFN1YmplY3RQcmluY2lwYWwobnNJUHJpbmNpcGFsICoqX3JldHZhbCkgPSAw
OwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTeXN0ZW1QcmluY2lwYWwobnNJUHJpbmNpcGFs
ICoqX3JldHZhbCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDZXJ0aWZpY2F0ZVBy
aW5jaXBhbChjb25zdCBjaGFyICpDZXJ0SUQsIG5zSVByaW5jaXBhbCAqKl9yZXR2YWwpID0gMDsK
CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvZGViYXNlUHJpbmNpcGFsKG5zSVVSSSAqYVVS
SSwgbnNJUHJpbmNpcGFsICoqX3JldHZhbCkgPSAwOwojIDE0NyAiLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL2NhcHMvbnNJU2NyaXB0U2VjdXJpdHlNYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBS
ZXF1ZXN0Q2FwYWJpbGl0eShuc0lQcmluY2lwYWwgKnByaW5jaXBhbCwgY29uc3QgY2hhciAqY2Fw
YWJpbGl0eSwgUFJJbnQxNiAqcmVzdWx0KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IElz
Q2FwYWJpbGl0eUVuYWJsZWQoY29uc3QgY2hhciAqY2FwYWJpbGl0eSwgUFJCb29sICpfcmV0dmFs
KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFbmFibGVDYXBhYmlsaXR5KGNvbnN0IGNo
YXIgKmNhcGFiaWxpdHkpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXZlcnRDYXBh
YmlsaXR5KGNvbnN0IGNoYXIgKmNhcGFiaWxpdHkpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVz
dWx0IERpc2FibGVDYXBhYmlsaXR5KGNvbnN0IGNoYXIgKmNhcGFiaWxpdHkpID0gMDsKCgoKCgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldENhbkVuYWJsZUNhcGFiaWxpdHkoY29uc3QgY2hhciAqY2Vy
dGlmaWNhdGVJRCwgY29uc3QgY2hhciAqY2FwYWJpbGl0eSwgUFJJbnQxNiBjYW5FbmFibGUpID0g
MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0T2JqZWN0UHJpbmNpcGFsKEpTQ29udGV4dCAq
IGN4LCBKU09iamVjdCAqIG9iaiwgbnNJUHJpbmNpcGFsICoqX3JldHZhbCkgPSAwOwoKCgoKCgog
IHZpcnR1YWwgbnNyZXN1bHQgU3ViamVjdFByaW5jaXBhbElzU3lzdGVtKFBSQm9vbCAqX3JldHZh
bCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2hlY2tTYW1lT3JpZ2luKEpTQ29udGV4
dCAqIGFKU0NvbnRleHQsIG5zSVVSSSAqYVRhcmdldFVSSSkgPSAwOwoKCgoKCgogIHZpcnR1YWwg
bnNyZXN1bHQgQ2hlY2tTYW1lT3JpZ2luVVJJKG5zSVVSSSAqYVNvdXJjZVVSSSwgbnNJVVJJICph
VGFyZ2V0VVJJKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDaGVja1NhbWVPcmlnaW5Q
cmluY2lwYWwobnNJUHJpbmNpcGFsICphU291cmNlUHJpbmNpcGFsLCBuc0lQcmluY2lwYWwgKmFU
YXJnZXRQcmluY2lwYWwpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByaW5jaXBh
bEZyb21Db250ZXh0KEpTQ29udGV4dCAqIGN4LCBuc0lQcmluY2lwYWwgKipfcmV0dmFsKSA9IDA7
Cgp9OwojIDQ3ICJuc0RPTUNsYXNzSW5mby5oIiAyCgpjbGFzcyBuc0lET01XaW5kb3c7CmNsYXNz
IG5zSURPTU5TSFRNTE9wdGlvbkNvbGxlY3Rpb247CmNsYXNzIG5zSVBsdWdpbkluc3RhbmNlOwpj
bGFzcyBuc0lGb3JtOwoKc3RydWN0IG5zRE9NQ2xhc3NJbmZvRGF0YTsKCnR5cGVkZWYgbnNJQ2xh
c3NJbmZvKiAoKm5zRE9NQ2xhc3NJbmZvQ29uc3RydWN0b3JGbmMpCiAgKG5zRE9NQ2xhc3NJbmZv
RGF0YSogYURhdGEpOwoKCnN0cnVjdCBuc0RPTUNsYXNzSW5mb0RhdGEKewogIGNvbnN0IGNoYXIg
Km1OYW1lOwogIHVuaW9uIHsKICAgIG5zRE9NQ2xhc3NJbmZvQ29uc3RydWN0b3JGbmMgbUNvbnN0
cnVjdG9yRnB0cjsKICAgIG5zRE9NQ2xhc3NJbmZvRXh0ZXJuYWxDb25zdHJ1Y3RvckZuYyBtRXh0
ZXJuYWxDb25zdHJ1Y3RvckZwdHI7CiAgfSB1OwogIG5zSUNsYXNzSW5mbyAqbUNhY2hlZENsYXNz
SW5mbzsKCiAgY29uc3QgbnNJSUQgKm1Qcm90b0NoYWluSW50ZXJmYWNlOwogIGNvbnN0IG5zSUlE
ICoqbUludGVyZmFjZXM7CiAgUFJVaW50MzIgbVNjcmlwdGFibGVGbGFncyA6IDMxOwogIFBSQm9v
bCBtSGFzQ2xhc3NJbnRlcmZhY2UgOiAxOwoKCgp9OwoKc3RydWN0IG5zRXh0ZXJuYWxET01DbGFz
c0luZm9EYXRhIDogcHVibGljIG5zRE9NQ2xhc3NJbmZvRGF0YQp7CiAgY29uc3QgbnNDSUQgKm1D
b25zdHJ1Y3RvckNJRDsKfTsKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgUHRyQml0czsKIyA5MyAi
bnNET01DbGFzc0luZm8uaCIKY2xhc3MgbnNET01DbGFzc0luZm8gOiBwdWJsaWMgbnNJWFBDU2Ny
aXB0YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgbnNJQ2xhc3NJbmZvCnsKcHVi
bGljOgogIG5zRE9NQ2xhc3NJbmZvKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpOwogIHZpcnR1
YWwgfm5zRE9NQ2xhc3NJbmZvKCk7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2xhc3NOYW1lKGNo
YXIgKiAqYUNsYXNzTmFtZSk7IHZpcnR1YWwgbnNyZXN1bHQgR2V0U2NyaXB0YWJsZUZsYWdzKFBS
VWludDMyICphU2NyaXB0YWJsZUZsYWdzKTsgdmlydHVhbCBuc3Jlc3VsdCBQcmVDcmVhdGUobnNJ
U3VwcG9ydHMgKm5hdGl2ZU9iaiwgSlNDb250ZXh0ICogY3gsIEpTT2JqZWN0ICogZ2xvYmFsT2Jq
LCBKU09iamVjdCAqICpwYXJlbnRPYmopOyB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZShuc0lYUENv
bm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKiBjeCwgSlNPYmplY3QgKiBv
YmopOyB2aXJ0dWFsIG5zcmVzdWx0IFBvc3RDcmVhdGUobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2
ZSAqd3JhcHBlciwgSlNDb250ZXh0ICogY3gsIEpTT2JqZWN0ICogb2JqKTsgdmlydHVhbCBuc3Jl
c3VsdCBBZGRQcm9wZXJ0eShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0Nv
bnRleHQgKiBjeCwgSlNPYmplY3QgKiBvYmosIGpzdmFsIGlkLCBqc3ZhbCAqIHZwLCBQUkJvb2wg
Kl9yZXR2YWwpOyB2aXJ0dWFsIG5zcmVzdWx0IERlbFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBw
ZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqIGN4LCBKU09iamVjdCAqIG9iaiwganN2YWwg
aWQsIGpzdmFsICogdnAsIFBSQm9vbCAqX3JldHZhbCk7IHZpcnR1YWwgbnNyZXN1bHQgR2V0UHJv
cGVydHkobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICogY3gs
IEpTT2JqZWN0ICogb2JqLCBqc3ZhbCBpZCwganN2YWwgKiB2cCwgUFJCb29sICpfcmV0dmFsKTsg
dmlydHVhbCBuc3Jlc3VsdCBTZXRQcm9wZXJ0eShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3
cmFwcGVyLCBKU0NvbnRleHQgKiBjeCwgSlNPYmplY3QgKiBvYmosIGpzdmFsIGlkLCBqc3ZhbCAq
IHZwLCBQUkJvb2wgKl9yZXR2YWwpOyB2aXJ0dWFsIG5zcmVzdWx0IEVudW1lcmF0ZShuc0lYUENv
bm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKiBjeCwgSlNPYmplY3QgKiBv
YmosIFBSQm9vbCAqX3JldHZhbCk7IHZpcnR1YWwgbnNyZXN1bHQgTmV3RW51bWVyYXRlKG5zSVhQ
Q29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqIGN4LCBKU09iamVjdCAq
IG9iaiwgUFJVaW50MzIgZW51bV9vcCwganN2YWwgKiBzdGF0ZXAsIGpzaWQgKmlkcCwgUFJCb29s
ICpfcmV0dmFsKTsgdmlydHVhbCBuc3Jlc3VsdCBOZXdSZXNvbHZlKG5zSVhQQ29ubmVjdFdyYXBw
ZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqIGN4LCBKU09iamVjdCAqIG9iaiwganN2YWwg
aWQsIFBSVWludDMyIGZsYWdzLCBKU09iamVjdCAqICpvYmpwLCBQUkJvb2wgKl9yZXR2YWwpOyB2
aXJ0dWFsIG5zcmVzdWx0IENvbnZlcnQobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBl
ciwgSlNDb250ZXh0ICogY3gsIEpTT2JqZWN0ICogb2JqLCBQUlVpbnQzMiB0eXBlLCBqc3ZhbCAq
IHZwLCBQUkJvb2wgKl9yZXR2YWwpOyB2aXJ0dWFsIG5zcmVzdWx0IEZpbmFsaXplKG5zSVhQQ29u
bmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqIGN4LCBKU09iamVjdCAqIG9i
aik7IHZpcnR1YWwgbnNyZXN1bHQgQ2hlY2tBY2Nlc3MobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2
ZSAqd3JhcHBlciwgSlNDb250ZXh0ICogY3gsIEpTT2JqZWN0ICogb2JqLCBqc3ZhbCBpZCwgUFJV
aW50MzIgbW9kZSwganN2YWwgKiB2cCwgUFJCb29sICpfcmV0dmFsKTsgdmlydHVhbCBuc3Jlc3Vs
dCBDYWxsKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqIGN4
LCBKU09iamVjdCAqIG9iaiwgUFJVaW50MzIgYXJnYywganN2YWwgKiBhcmd2LCBqc3ZhbCAqIHZw
LCBQUkJvb2wgKl9yZXR2YWwpOyB2aXJ0dWFsIG5zcmVzdWx0IENvbnN0cnVjdChuc0lYUENvbm5l
Y3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKiBjeCwgSlNPYmplY3QgKiBvYmos
IFBSVWludDMyIGFyZ2MsIGpzdmFsICogYXJndiwganN2YWwgKiB2cCwgUFJCb29sICpfcmV0dmFs
KTsgdmlydHVhbCBuc3Jlc3VsdCBIYXNJbnN0YW5jZShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZl
ICp3cmFwcGVyLCBKU0NvbnRleHQgKiBjeCwgSlNPYmplY3QgKiBvYmosIGpzdmFsIHZhbCwgUFJC
b29sICpicCwgUFJCb29sICpfcmV0dmFsKTsgdmlydHVhbCBuc3Jlc3VsdCBNYXJrKG5zSVhQQ29u
bmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqIGN4LCBKU09iamVjdCAqIG9i
aiwgdm9pZCAqIGFyZywgUFJVaW50MzIgKl9yZXR2YWwpOwoKICBwdWJsaWM6IHZpcnR1YWwgbnNy
ZXN1bHQgUXVlcnlJbnRlcmZhY2UoY29uc3QgbnNJSUQmIGFJSUQsIHZvaWQqKiBhSW5zdGFuY2VQ
dHIpOyB2aXJ0dWFsIG5zcmVmY250IEFkZFJlZih2b2lkKTsgdmlydHVhbCBuc3JlZmNudCBSZWxl
YXNlKHZvaWQpOyBwcm90ZWN0ZWQ6IG5zQXV0b1JlZkNudCBtUmVmQ250OyBwdWJsaWM6CgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0SW50ZXJmYWNlcyhQUlVpbnQzMiAqY291bnQsIG5zSUlEICogKiph
cnJheSk7IHZpcnR1YWwgbnNyZXN1bHQgR2V0SGVscGVyRm9yTGFuZ3VhZ2UoUFJVaW50MzIgbGFu
Z3VhZ2UsIG5zSVN1cHBvcnRzICoqX3JldHZhbCk7IHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udHJh
Y3RJRChjaGFyICogKmFDb250cmFjdElEKTsgdmlydHVhbCBuc3Jlc3VsdCBHZXRDbGFzc0Rlc2Ny
aXB0aW9uKGNoYXIgKiAqYUNsYXNzRGVzY3JpcHRpb24pOyB2aXJ0dWFsIG5zcmVzdWx0IEdldENs
YXNzSUQobnNDSUQgKiAqYUNsYXNzSUQpOyB2aXJ0dWFsIG5zcmVzdWx0IEdldEltcGxlbWVudGF0
aW9uTGFuZ3VhZ2UoUFJVaW50MzIgKmFJbXBsZW1lbnRhdGlvbkxhbmd1YWdlKTsgdmlydHVhbCBu
c3Jlc3VsdCBHZXRGbGFncyhQUlVpbnQzMiAqYUZsYWdzKTsgdmlydHVhbCBuc3Jlc3VsdCBHZXRD
bGFzc0lETm9BbGxvYyhuc0NJRCAqYUNsYXNzSUROb0FsbG9jKTsKIyAxMTUgIm5zRE9NQ2xhc3NJ
bmZvLmgiCiAgc3RhdGljIG5zSUNsYXNzSW5mbyogR2V0Q2xhc3NJbmZvSW5zdGFuY2UobnNET01D
bGFzc0luZm9JRCBhSUQpOwogIHN0YXRpYyBuc0lDbGFzc0luZm8qIEdldENsYXNzSW5mb0luc3Rh
bmNlKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpOwoKICBzdGF0aWMgdm9pZCBTaHV0RG93bigp
OwoKICBzdGF0aWMgbnNJQ2xhc3NJbmZvICpkb0NyZWF0ZShuc0RPTUNsYXNzSW5mb0RhdGEqIGFE
YXRhKQogIHsKICAgIHJldHVybiBuZXcgbnNET01DbGFzc0luZm8oYURhdGEpOwogIH0KCiAgc3Rh
dGljIG5zcmVzdWx0IFdyYXBOYXRpdmUoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKnNjb3BlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICpuYXRpdmUsIGNvbnN0IG5z
SUlEJiBhSUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzdmFsICp2cCk7CiAgc3Rh
dGljIG5zcmVzdWx0IFRocm93SlNFeGNlcHRpb24oSlNDb250ZXh0ICpjeCwgbnNyZXN1bHQgYVJl
c3VsdCk7CgogIHN0YXRpYyBuc3Jlc3VsdCBJbml0RE9NSlNDbGFzcyhKU0NvbnRleHQgKmN4LCBK
U09iamVjdCAqb2JqKTsKCiAgc3RhdGljIEpTQ2xhc3Mgc0RPTUpTQ2xhc3M7Cgpwcm90ZWN0ZWQ6
CiAgY29uc3QgbnNET01DbGFzc0luZm9EYXRhKiBtRGF0YTsKCiAgc3RhdGljIG5zcmVzdWx0IElu
aXQoKTsKICBzdGF0aWMgbnNyZXN1bHQgUmVnaXN0ZXJDbGFzc05hbWUoUFJJbnQzMiBhRE9NQ2xh
c3NJbmZvSUQpOwogIHN0YXRpYyBuc3Jlc3VsdCBSZWdpc3RlckNsYXNzUHJvdG9zKFBSSW50MzIg
YURPTUNsYXNzSW5mb0lEKTsKICBzdGF0aWMgbnNyZXN1bHQgUmVnaXN0ZXJFeHRlcm5hbENsYXNz
ZXMoKTsKICBuc3Jlc3VsdCBSZXNvbHZlQ29uc3RydWN0b3IoSlNDb250ZXh0ICpjeCwgSlNPYmpl
Y3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKipvYmpwKTsK
CgoKCiAgc3RhdGljIFBSSW50MzIgR2V0QXJyYXlJbmRleEZyb21JZChKU0NvbnRleHQgKmN4LCBq
c3ZhbCBpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCAqYUlz
TnVtYmVyID0gMCk7CgogIHN0YXRpYyBpbmxpbmUgUFJCb29sIElzUmVhZG9ubHlSZXBsYWNlYWJs
ZShqc3ZhbCBpZCkKICB7CiAgICByZXR1cm4gKGlkID09IHNUb3BfaWQgfHwKICAgICAgICAgICAg
aWQgPT0gc1Njcm9sbGJhcnNfaWQgfHwKICAgICAgICAgICAgaWQgPT0gc0NvbnRlbnRfaWQgfHwK
ICAgICAgICAgICAgaWQgPT0gc1NpZGViYXJfaWQgfHwKICAgICAgICAgICAgaWQgPT0gc01lbnVi
YXJfaWQgfHwKICAgICAgICAgICAgaWQgPT0gc1Rvb2xiYXJfaWQgfHwKICAgICAgICAgICAgaWQg
PT0gc0xvY2F0aW9uYmFyX2lkIHx8CiAgICAgICAgICAgIGlkID09IHNQZXJzb25hbGJhcl9pZCB8
fAogICAgICAgICAgICBpZCA9PSBzU3RhdHVzYmFyX2lkIHx8CiAgICAgICAgICAgIGlkID09IHNE
aXJlY3Rvcmllc19pZCB8fAogICAgICAgICAgICBpZCA9PSBzQ29udHJvbGxlcnNfaWQgfHwKICAg
ICAgICAgICAgaWQgPT0gc1Njcm9sbFhfaWQgfHwKICAgICAgICAgICAgaWQgPT0gc1Njcm9sbFlf
aWQgfHwKICAgICAgICAgICAgaWQgPT0gc0xlbmd0aF9pZCB8fAogICAgICAgICAgICBpZCA9PSBz
RnJhbWVzX2lkKTsKICB9CgogIHN0YXRpYyBpbmxpbmUgUFJCb29sIElzV3JpdGFibGVSZXBsYWNl
YWJsZShqc3ZhbCBpZCkKICB7CiAgICByZXR1cm4gKGlkID09IHNJbm5lckhlaWdodF9pZCB8fAog
ICAgICAgICAgICBpZCA9PSBzSW5uZXJXaWR0aF9pZCB8fAogICAgICAgICAgICBpZCA9PSBzT3V0
ZXJIZWlnaHRfaWQgfHwKICAgICAgICAgICAgaWQgPT0gc091dGVyV2lkdGhfaWQgfHwKICAgICAg
ICAgICAgaWQgPT0gc1NjcmVlblhfaWQgfHwKICAgICAgICAgICAgaWQgPT0gc1NjcmVlbllfaWQg
fHwKICAgICAgICAgICAgaWQgPT0gc1N0YXR1c19pZCB8fAogICAgICAgICAgICBpZCA9PSBzTmFt
ZV9pZCk7CiAgfQoKICBuc3Jlc3VsdCBkb0NoZWNrUHJvcGVydHlBY2Nlc3MoSlNDb250ZXh0ICpj
eCwgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBSVWludDMyIGFjY2Vzc01vZGUsIFBSQm9vbCBpc1dpbmRvdyk7Cgog
IHN0YXRpYyBKU0NsYXNzIHNET01Db25zdHJ1Y3RvclByb3RvQ2xhc3M7CiAgc3RhdGljIEpTRnVu
Y3Rpb25TcGVjIHNET01KU0NsYXNzX21ldGhvZHNbXTsKCiAgc3RhdGljIG5zSVhQQ29ubmVjdCAq
c1hQQ29ubmVjdDsKICBzdGF0aWMgbnNJU2NyaXB0U2VjdXJpdHlNYW5hZ2VyICpzU2VjTWFuOwoK
CiAgc3RhdGljIG5zcmVzdWx0IERlZmluZVN0YXRpY0pTVmFscyhKU0NvbnRleHQgKmN4KTsKCiAg
c3RhdGljIFBSQm9vbCBzSXNJbml0aWFsaXplZDsKCiAgc3RhdGljIGpzdmFsIHNUb3BfaWQ7CiAg
c3RhdGljIGpzdmFsIHNTY3JvbGxiYXJzX2lkOwogIHN0YXRpYyBqc3ZhbCBzTG9jYXRpb25faWQ7
CiAgc3RhdGljIGpzdmFsIHNDb21wb25lbnRzX2lkOwogIHN0YXRpYyBqc3ZhbCBzQ29uc3RydWN0
b3JfaWQ7CiAgc3RhdGljIGpzdmFsIHNfY29udGVudF9pZDsKICBzdGF0aWMganN2YWwgc0NvbnRl
bnRfaWQ7CiAgc3RhdGljIGpzdmFsIHNTaWRlYmFyX2lkOwogIHN0YXRpYyBqc3ZhbCBzTWVudWJh
cl9pZDsKICBzdGF0aWMganN2YWwgc1Rvb2xiYXJfaWQ7CiAgc3RhdGljIGpzdmFsIHNMb2NhdGlv
bmJhcl9pZDsKICBzdGF0aWMganN2YWwgc1BlcnNvbmFsYmFyX2lkOwogIHN0YXRpYyBqc3ZhbCBz
U3RhdHVzYmFyX2lkOwogIHN0YXRpYyBqc3ZhbCBzRGlyZWN0b3JpZXNfaWQ7CiAgc3RhdGljIGpz
dmFsIHNDb250cm9sbGVyc19pZDsKICBzdGF0aWMganN2YWwgc0xlbmd0aF9pZDsKICBzdGF0aWMg
anN2YWwgc0lubmVySGVpZ2h0X2lkOwogIHN0YXRpYyBqc3ZhbCBzSW5uZXJXaWR0aF9pZDsKICBz
dGF0aWMganN2YWwgc091dGVySGVpZ2h0X2lkOwogIHN0YXRpYyBqc3ZhbCBzT3V0ZXJXaWR0aF9p
ZDsKICBzdGF0aWMganN2YWwgc1NjcmVlblhfaWQ7CiAgc3RhdGljIGpzdmFsIHNTY3JlZW5ZX2lk
OwogIHN0YXRpYyBqc3ZhbCBzU3RhdHVzX2lkOwogIHN0YXRpYyBqc3ZhbCBzTmFtZV9pZDsKICBz
dGF0aWMganN2YWwgc09ubW91c2Vkb3duX2lkOwogIHN0YXRpYyBqc3ZhbCBzT25tb3VzZXVwX2lk
OwogIHN0YXRpYyBqc3ZhbCBzT25jbGlja19pZDsKICBzdGF0aWMganN2YWwgc09uY29udGV4dG1l
bnVfaWQ7CiAgc3RhdGljIGpzdmFsIHNPbm1vdXNlb3Zlcl9pZDsKICBzdGF0aWMganN2YWwgc09u
bW91c2VvdXRfaWQ7CiAgc3RhdGljIGpzdmFsIHNPbmtleWRvd25faWQ7CiAgc3RhdGljIGpzdmFs
IHNPbmtleXVwX2lkOwogIHN0YXRpYyBqc3ZhbCBzT25rZXlwcmVzc19pZDsKICBzdGF0aWMganN2
YWwgc09ubW91c2Vtb3ZlX2lkOwogIHN0YXRpYyBqc3ZhbCBzT25mb2N1c19pZDsKICBzdGF0aWMg
anN2YWwgc09uYmx1cl9pZDsKICBzdGF0aWMganN2YWwgc09uc3VibWl0X2lkOwogIHN0YXRpYyBq
c3ZhbCBzT25yZXNldF9pZDsKICBzdGF0aWMganN2YWwgc09uY2hhbmdlX2lkOwogIHN0YXRpYyBq
c3ZhbCBzT25zZWxlY3RfaWQ7CiAgc3RhdGljIGpzdmFsIHNPbmxvYWRfaWQ7CiAgc3RhdGljIGpz
dmFsIHNPbnVubG9hZF9pZDsKICBzdGF0aWMganN2YWwgc09uYWJvcnRfaWQ7CiAgc3RhdGljIGpz
dmFsIHNPbmVycm9yX2lkOwogIHN0YXRpYyBqc3ZhbCBzT25wYWludF9pZDsKICBzdGF0aWMganN2
YWwgc09ucmVzaXplX2lkOwogIHN0YXRpYyBqc3ZhbCBzT25zY3JvbGxfaWQ7CiAgc3RhdGljIGpz
dmFsIHNTY3JvbGxJbnRvVmlld19pZDsKICBzdGF0aWMganN2YWwgc1Njcm9sbFhfaWQ7CiAgc3Rh
dGljIGpzdmFsIHNTY3JvbGxZX2lkOwogIHN0YXRpYyBqc3ZhbCBzT3Blbl9pZDsKICBzdGF0aWMg
anN2YWwgc0l0ZW1faWQ7CiAgc3RhdGljIGpzdmFsIHNFbnVtZXJhdGVfaWQ7CiAgc3RhdGljIGpz
dmFsIHNOYXZpZ2F0b3JfaWQ7CiAgc3RhdGljIGpzdmFsIHNEb2N1bWVudF9pZDsKICBzdGF0aWMg
anN2YWwgc1dpbmRvd19pZDsKICBzdGF0aWMganN2YWwgc0ZyYW1lc19pZDsKCiAgc3RhdGljIGNv
bnN0IEpTQ2xhc3MgKnNPYmplY3RDbGFzczsKCiAgc3RhdGljIFBSQm9vbCBzRG9TZWN1cml0eUNo
ZWNrSW5BZGRQcm9wZXJ0eTsKfTsKCnR5cGVkZWYgbnNET01DbGFzc0luZm8gbnNET01HZW5lcmlj
U0g7CgoKCgoKCmNsYXNzIG5zRXZlbnRSZWNpZXZlclNIIDogcHVibGljIG5zRE9NR2VuZXJpY1NI
CnsKcHJvdGVjdGVkOgogIG5zRXZlbnRSZWNpZXZlclNIKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURh
dGEpIDogbnNET01HZW5lcmljU0goYURhdGEpCiAgewogIH0KCiAgdmlydHVhbCB+bnNFdmVudFJl
Y2lldmVyU0goKQogIHsKICB9CgogIHN0YXRpYyBQUkJvb2wgUmVhbGx5SXNFdmVudE5hbWUoanN2
YWwgaWQsIGpzY2hhciBhRmlyc3RDaGFyKTsKCiAgc3RhdGljIGlubGluZSBQUkJvb2wgSXNFdmVu
dE5hbWUoanN2YWwgaWQpCiAgewogICAgOwoKICAgIGpzY2hhciAqc3RyID0gOjpKU19HZXRTdHJp
bmdDaGFycygoKEpTU3RyaW5nICopKCh2b2lkICopKChpZCkgJiB+KGpzdmFsKSgoKEpTVWludDMy
KTEgPDwgKDMpKSAtIDEpKSkpKTsKCiAgICBpZiAoc3RyWzBdID09ICdvJyAmJiBzdHJbMV0gPT0g
J24nKSB7CiAgICAgIHJldHVybiBSZWFsbHlJc0V2ZW50TmFtZShpZCwgc3RyWzJdKTsKICAgIH0K
CiAgICByZXR1cm4gMDsKICB9CgogIG5zcmVzdWx0IFJlZ2lzdGVyQ29tcGlsZUhhbmRsZXIobnNJ
WFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGNvbXBpbGUsIFBSQm9vbCAqZGlkX2Nv
bXBpbGUpOwoKcHVibGljOgogIHZpcnR1YWwgbnNyZXN1bHQgTmV3UmVzb2x2ZShuc0lYUENvbm5l
Y3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAg
ICAgICAgICBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwgUFJVaW50MzIgZmxhZ3MsCiAgICAgICAg
ICAgICAgICAgICAgICAgIEpTT2JqZWN0ICoqb2JqcCwgUFJCb29sICpfcmV0dmFsKTsKICB2aXJ0
dWFsIG5zcmVzdWx0IFNldFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBw
ZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2Jq
LCBqc3ZhbCBpZCwganN2YWwgKnZwLAogICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sICpf
cmV0dmFsKTsKfTsKCgoKCmNsYXNzIG5zV2luZG93U0ggOiBwdWJsaWMgbnNFdmVudFJlY2lldmVy
U0gKewpwcm90ZWN0ZWQ6CiAgbnNXaW5kb3dTSChuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKSA6
IG5zRXZlbnRSZWNpZXZlclNIKGFEYXRhKQogIHsKICB9CgogIHZpcnR1YWwgfm5zV2luZG93U0go
KQogIHsKICB9CgogIHN0YXRpYyBuc3Jlc3VsdCBHbG9iYWxSZXNvbHZlKG5zSVN1cHBvcnRzICph
TmF0aXZlLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpT
T2JqZWN0ICpvYmosIEpTU3RyaW5nICpzdHIsIFBSVWludDMyIGZsYWdzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBSQm9vbCAqZGlkX3Jlc29sdmUpOwoKcHVibGljOgogIHZpcnR1
YWwgbnNyZXN1bHQgUHJlQ3JlYXRlKG5zSVN1cHBvcnRzICpuYXRpdmVPYmosIEpTQ29udGV4dCAq
Y3gsCiAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKmdsb2JhbE9iaiwgSlNPYmplY3Qg
KipwYXJlbnRPYmopOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UHJvcGVydHkobnNJWFBDb25uZWN0
V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBqc3ZhbCAqdnAsIFBSQm9vbCAqX3JldHZh
bCk7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQcm9wZXJ0eShuc0lYUENvbm5lY3RXcmFwcGVkTmF0
aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgICAgSlNP
YmplY3QgKm9iaiwganN2YWwgaWQsIGpzdmFsICp2cCwgUFJCb29sICpfcmV0dmFsKTsKICB2aXJ0
dWFsIG5zcmVzdWx0IEFkZFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBw
ZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2Jq
LCBqc3ZhbCBpZCwganN2YWwgKnZwLCBQUkJvb2wgKl9yZXR2YWwpOwogIHZpcnR1YWwgbnNyZXN1
bHQgRGVsUHJvcGVydHkobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250
ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlk
LCBqc3ZhbCAqdnAsIFBSQm9vbCAqX3JldHZhbCk7CiAgdmlydHVhbCBuc3Jlc3VsdCBOZXdSZXNv
bHZlKG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAg
ICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBQUlVpbnQzMiBm
bGFncywKICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKipvYmpwLCBQUkJvb2wgKl9y
ZXR2YWwpOwogIHZpcnR1YWwgbnNyZXN1bHQgRmluYWxpemUobnNJWFBDb25uZWN0V3JhcHBlZE5h
dGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgIEpTT2Jq
ZWN0ICpvYmopOwoKICBzdGF0aWMgbnNyZXN1bHQgQ2FjaGVEb2N1bWVudFByb3BlcnR5KEpTQ29u
dGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0lET01XaW5kb3cgKndpbmRvdyk7CgogIHN0YXRpYyBuc0lDbGFzc0luZm8gKmRv
Q3JlYXRlKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpCiAgewogICAgcmV0dXJuIG5ldyBuc1dp
bmRvd1NIKGFEYXRhKTsKICB9Cn07CgoKCgpjbGFzcyBuc0xvY2F0aW9uU0ggOiBwdWJsaWMgbnNE
T01HZW5lcmljU0gKewpwcm90ZWN0ZWQ6CiAgbnNMb2NhdGlvblNIKG5zRE9NQ2xhc3NJbmZvRGF0
YSogYURhdGEpIDogbnNET01HZW5lcmljU0goYURhdGEpCiAgewogIH0KCiAgdmlydHVhbCB+bnNM
b2NhdGlvblNIKCkKICB7CiAgfQoKcHVibGljOgogIHZpcnR1YWwgbnNyZXN1bHQgQ2hlY2tBY2Nl
c3MobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAg
ICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBQUlVpbnQzMiBt
b2RlLAogICAgICAgICAgICAgICAgICAgICAgICAganN2YWwgKnZwLCBQUkJvb2wgKl9yZXR2YWwp
OwoKICBzdGF0aWMgbnNJQ2xhc3NJbmZvICpkb0NyZWF0ZShuc0RPTUNsYXNzSW5mb0RhdGEqIGFE
YXRhKQogIHsKICAgIHJldHVybiBuZXcgbnNMb2NhdGlvblNIKGFEYXRhKTsKICB9Cn07CgoKCgoK
Y2xhc3MgbnNOb2RlU0ggOiBwdWJsaWMgbnNFdmVudFJlY2lldmVyU0gKewpwcm90ZWN0ZWQ6CiAg
bnNOb2RlU0gobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkgOiBuc0V2ZW50UmVjaWV2ZXJTSChh
RGF0YSkKICB7CiAgfQoKICB2aXJ0dWFsIH5uc05vZGVTSCgpCiAgewogIH0KCnB1YmxpYzoKICB2
aXJ0dWFsIG5zcmVzdWx0IFByZUNyZWF0ZShuc0lTdXBwb3J0cyAqbmF0aXZlT2JqLCBKU0NvbnRl
eHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICpnbG9iYWxPYmosIEpTT2Jq
ZWN0ICoqcGFyZW50T2JqKTsKICB2aXJ0dWFsIG5zcmVzdWx0IEFkZFByb3BlcnR5KG5zSVhQQ29u
bmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwganN2YWwgKnZwLCBQUkJvb2wgKl9y
ZXR2YWwpOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RmxhZ3MoUFJVaW50MzIgKmFGbGFncyk7Cgog
IHN0YXRpYyBuc0lDbGFzc0luZm8gKmRvQ3JlYXRlKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEp
CiAgewogICAgcmV0dXJuIG5ldyBuc05vZGVTSChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3MgbnNF
bGVtZW50U0ggOiBwdWJsaWMgbnNOb2RlU0gKewpwcm90ZWN0ZWQ6CiAgbnNFbGVtZW50U0gobnNE
T01DbGFzc0luZm9EYXRhKiBhRGF0YSkgOiBuc05vZGVTSChhRGF0YSkKICB7CiAgfQoKICB2aXJ0
dWFsIH5uc0VsZW1lbnRTSCgpCiAgewogIH0KCnB1YmxpYzoKICB2aXJ0dWFsIG5zcmVzdWx0IFBv
c3RDcmVhdGUobnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpj
eCwKICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2JqKTsKCiAgc3RhdGljIG5zSUNsYXNz
SW5mbyAqZG9DcmVhdGUobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkKICB7CiAgICByZXR1cm4g
bmV3IG5zRWxlbWVudFNIKGFEYXRhKTsKICB9Cn07CgoKCgpjbGFzcyBuc0FycmF5U0ggOiBwdWJs
aWMgbnNET01DbGFzc0luZm8Kewpwcm90ZWN0ZWQ6CiAgbnNBcnJheVNIKG5zRE9NQ2xhc3NJbmZv
RGF0YSogYURhdGEpIDogbnNET01DbGFzc0luZm8oYURhdGEpCiAgewogIH0KCiAgdmlydHVhbCB+
bnNBcnJheVNIKCkKICB7CiAgfQoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEl0ZW1BdChuc0lTdXBw
b3J0cyAqYU5hdGl2ZSwgUFJVaW50MzIgYUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSVN1cHBvcnRzICoqYVJlc3VsdCk7CgpwdWJsaWM6CiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRQcm9wZXJ0eShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQg
KmN4LAogICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsIGpz
dmFsICp2cCwgUFJCb29sICpfcmV0dmFsKTsKCiAgc3RhdGljIG5zSUNsYXNzSW5mbyAqZG9DcmVh
dGUobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkKICB7CiAgICByZXR1cm4gbmV3IG5zQXJyYXlT
SChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3MgbnNOYW1lZEFycmF5U0ggOiBwdWJsaWMgbnNBcnJh
eVNICnsKcHJvdGVjdGVkOgogIG5zTmFtZWRBcnJheVNIKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURh
dGEpIDogbnNBcnJheVNIKGFEYXRhKQogIHsKICB9CgogIHZpcnR1YWwgfm5zTmFtZWRBcnJheVNI
KCkKICB7CiAgfQoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWVkSXRlbShuc0lTdXBwb3J0cyAq
YU5hdGl2ZSwgY29uc3QgbnNBU3RyaW5nJiBhTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0lTdXBwb3J0cyAqKmFSZXN1bHQpID0gMDsKCnB1YmxpYzoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpT
Q29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2JqLCBqc3Zh
bCBpZCwganN2YWwgKnZwLCBQUkJvb2wgKl9yZXR2YWwpOwp9OwoKCgoKY2xhc3MgbnNOYW1lZE5v
ZGVNYXBTSCA6IHB1YmxpYyBuc05hbWVkQXJyYXlTSAp7CnByb3RlY3RlZDoKICBuc05hbWVkTm9k
ZU1hcFNIKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpIDogbnNOYW1lZEFycmF5U0goYURhdGEp
CiAgewogIH0KCiAgdmlydHVhbCB+bnNOYW1lZE5vZGVNYXBTSCgpCiAgewogIH0KCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldEl0ZW1BdChuc0lTdXBwb3J0cyAqYU5hdGl2ZSwgUFJVaW50MzIgYUlu
ZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqYVJlc3VsdCk7
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWVkSXRlbShuc0lTdXBwb3J0cyAqYU5hdGl2ZSwg
Y29uc3QgbnNBU3RyaW5nJiBhTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lTdXBwb3J0cyAqKmFSZXN1bHQpOwoKcHVibGljOgogIHN0YXRpYyBuc0lDbGFzc0luZm8gKmRv
Q3JlYXRlKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpCiAgewogICAgcmV0dXJuIG5ldyBuc05h
bWVkTm9kZU1hcFNIKGFEYXRhKTsKICB9Cn07CgoKCgpjbGFzcyBuc0hUTUxDb2xsZWN0aW9uU0gg
OiBwdWJsaWMgbnNOYW1lZEFycmF5U0gKewpwcm90ZWN0ZWQ6CiAgbnNIVE1MQ29sbGVjdGlvblNI
KG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpIDogbnNOYW1lZEFycmF5U0goYURhdGEpCiAgewog
IH0KCiAgdmlydHVhbCB+bnNIVE1MQ29sbGVjdGlvblNIKCkKICB7CiAgfQoKCgogIHZpcnR1YWwg
bnNyZXN1bHQgR2V0SXRlbUF0KG5zSVN1cHBvcnRzICphTmF0aXZlLCBQUlVpbnQzMiBhSW5kZXgs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMgKiphUmVzdWx0KTsKCgog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZWRJdGVtKG5zSVN1cHBvcnRzICphTmF0aXZlLCBjb25z
dCBuc0FTdHJpbmcmIGFOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1
cHBvcnRzICoqYVJlc3VsdCk7CgpwdWJsaWM6CiAgc3RhdGljIG5zSUNsYXNzSW5mbyAqZG9DcmVh
dGUobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkKICB7CiAgICByZXR1cm4gbmV3IG5zSFRNTENv
bGxlY3Rpb25TSChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3MgbnNDb250ZW50TGlzdFNIIDogcHVi
bGljIG5zSFRNTENvbGxlY3Rpb25TSAp7CnByb3RlY3RlZDoKICBuc0NvbnRlbnRMaXN0U0gobnNE
T01DbGFzc0luZm9EYXRhKiBhRGF0YSkgOiBuc0hUTUxDb2xsZWN0aW9uU0goYURhdGEpCiAgewog
IH0KCiAgdmlydHVhbCB+bnNDb250ZW50TGlzdFNIKCkKICB7CiAgfQoKcHVibGljOgogIHZpcnR1
YWwgbnNyZXN1bHQgUHJlQ3JlYXRlKG5zSVN1cHBvcnRzICpuYXRpdmVPYmosIEpTQ29udGV4dCAq
Y3gsCiAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKmdsb2JhbE9iaiwgSlNPYmplY3Qg
KipwYXJlbnRPYmopOwoKICBzdGF0aWMgbnNJQ2xhc3NJbmZvICpkb0NyZWF0ZShuc0RPTUNsYXNz
SW5mb0RhdGEqIGFEYXRhKQogIHsKICAgIHJldHVybiBuZXcgbnNDb250ZW50TGlzdFNIKGFEYXRh
KTsKICB9Cn07CgoKCgoKY2xhc3MgbnNGb3JtQ29udHJvbExpc3RTSCA6IHB1YmxpYyBuc0hUTUxD
b2xsZWN0aW9uU0gKewpwcm90ZWN0ZWQ6CiAgbnNGb3JtQ29udHJvbExpc3RTSChuc0RPTUNsYXNz
SW5mb0RhdGEqIGFEYXRhKSA6IG5zSFRNTENvbGxlY3Rpb25TSChhRGF0YSkKICB7CiAgfQoKICB2
aXJ0dWFsIH5uc0Zvcm1Db250cm9sTGlzdFNIKCkKICB7CiAgfQoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0TmFtZWRJdGVtKG5zSVN1cHBvcnRzICphTmF0aXZlLCBjb25zdCBuc0FTdHJpbmcmIGFO
YW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqYVJlc3Vs
dCk7CgpwdWJsaWM6CiAgc3RhdGljIG5zSUNsYXNzSW5mbyAqZG9DcmVhdGUobnNET01DbGFzc0lu
Zm9EYXRhKiBhRGF0YSkKICB7CiAgICByZXR1cm4gbmV3IG5zRm9ybUNvbnRyb2xMaXN0U0goYURh
dGEpOwogIH0KfTsKCgoKCmNsYXNzIG5zRG9jdW1lbnRTSCA6IHB1YmxpYyBuc05vZGVTSAp7CnB1
YmxpYzoKICBuc0RvY3VtZW50U0gobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkgOiBuc05vZGVT
SChhRGF0YSkKICB7CiAgfQoKICB2aXJ0dWFsIH5uc0RvY3VtZW50U0goKQogIHsKICB9CgpwdWJs
aWM6CiAgdmlydHVhbCBuc3Jlc3VsdCBBZGRQcm9wZXJ0eShuc0lYUENvbm5lY3RXcmFwcGVkTmF0
aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgICAgSlNP
YmplY3QgKm9iaiwganN2YWwgaWQsIGpzdmFsICp2cCwgUFJCb29sICpfcmV0dmFsKTsKICB2aXJ0
dWFsIG5zcmVzdWx0IERlbFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBw
ZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2Jq
LCBqc3ZhbCBpZCwganN2YWwgKnZwLCBQUkJvb2wgKl9yZXR2YWwpOwogIHZpcnR1YWwgbnNyZXN1
bHQgTmV3UmVzb2x2ZShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRl
eHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwg
UFJVaW50MzIgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0ICoqb2JqcCwg
UFJCb29sICpfcmV0dmFsKTsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb3BlcnR5KG5zSVhQQ29u
bmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwganN2YWwgKnZwLCBQUkJvb2wgKl9y
ZXR2YWwpOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UHJvcGVydHkobnNJWFBDb25uZWN0V3JhcHBl
ZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAg
IEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBqc3ZhbCAqdnAsIFBSQm9vbCAqX3JldHZhbCk7CiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRGbGFncyhQUlVpbnQzMiogYUZsYWdzKTsKCiAgc3RhdGljIG5z
SUNsYXNzSW5mbyAqZG9DcmVhdGUobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkKICB7CiAgICBy
ZXR1cm4gbmV3IG5zRG9jdW1lbnRTSChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3MgbnNIVE1MRG9j
dW1lbnRTSCA6IHB1YmxpYyBuc0RvY3VtZW50U0gKewpwcm90ZWN0ZWQ6CiAgbnNIVE1MRG9jdW1l
bnRTSChuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKSA6IG5zRG9jdW1lbnRTSChhRGF0YSkKICB7
CiAgfQoKICB2aXJ0dWFsIH5uc0hUTUxEb2N1bWVudFNIKCkKICB7CiAgfQoKICBzdGF0aWMgbnNy
ZXN1bHQgUmVzb2x2ZUltcGwoSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJWFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwganN2YWwgaWQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqcmVzdWx0KTsKICBzdGF0aWMg
SlNCb29sIERvY3VtZW50T3BlbihKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50TiBhcmdjLCBqc3ZhbCAq
YXJndiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganN2YWwg
KnJ2YWwpOwoKcHVibGljOgogIHZpcnR1YWwgbnNyZXN1bHQgTmV3UmVzb2x2ZShuc0lYUENvbm5l
Y3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAg
ICAgICAgICBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwgUFJVaW50MzIgZmxhZ3MsCiAgICAgICAg
ICAgICAgICAgICAgICAgIEpTT2JqZWN0ICoqb2JqcCwgUFJCb29sICpfcmV0dmFsKTsKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBw
ZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqb2Jq
LCBqc3ZhbCBpZCwganN2YWwgKnZwLCBQUkJvb2wgKl9yZXR2YWwpOwoKICBzdGF0aWMgbnNJQ2xh
c3NJbmZvICpkb0NyZWF0ZShuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKQogIHsKICAgIHJldHVy
biBuZXcgbnNIVE1MRG9jdW1lbnRTSChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3MgbnNIVE1MRWxl
bWVudFNIIDogcHVibGljIG5zRWxlbWVudFNICnsKcHJvdGVjdGVkOgogIG5zSFRNTEVsZW1lbnRT
SChuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKSA6IG5zRWxlbWVudFNIKGFEYXRhKQogIHsKICB9
CgogIHZpcnR1YWwgfm5zSFRNTEVsZW1lbnRTSCgpCiAgewogIH0KCiAgc3RhdGljIEpTQm9vbCBT
Y3JvbGxJbnRvVmlldyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnROIGFyZ2MsIGpzdmFsICphcmd2
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzdmFsICpy
dmFsKTsKCnB1YmxpYzoKICB2aXJ0dWFsIG5zcmVzdWx0IE5ld1Jlc29sdmUobnNJWFBDb25uZWN0
V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAg
ICAgICAgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsIFBSVWludDMyIGZsYWdzLAogICAgICAgICAg
ICAgICAgICAgICAgICBKU09iamVjdCAqKm9ianAsIFBSQm9vbCAqX3JldHZhbCk7CgogIHN0YXRp
YyBuc0lDbGFzc0luZm8gKmRvQ3JlYXRlKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpCiAgewog
ICAgcmV0dXJuIG5ldyBuc0hUTUxFbGVtZW50U0goYURhdGEpOwogIH0KfTsKCgoKCmNsYXNzIG5z
SFRNTEZvcm1FbGVtZW50U0ggOiBwdWJsaWMgbnNIVE1MRWxlbWVudFNICnsKcHJvdGVjdGVkOgog
IG5zSFRNTEZvcm1FbGVtZW50U0gobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkgOiBuc0hUTUxF
bGVtZW50U0goYURhdGEpCiAgewogIH0KCiAgdmlydHVhbCB+bnNIVE1MRm9ybUVsZW1lbnRTSCgp
CiAgewogIH0KCiAgc3RhdGljIG5zcmVzdWx0IEZpbmROYW1lZEl0ZW0obnNJRm9ybSAqYUZvcm0s
IEpTU3RyaW5nICpzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9y
dHMgKiphUmVzdWx0KTsKCnB1YmxpYzoKICB2aXJ0dWFsIG5zcmVzdWx0IE5ld1Jlc29sdmUobnNJ
WFBDb25uZWN0V3JhcHBlZE5hdGl2ZSAqd3JhcHBlciwgSlNDb250ZXh0ICpjeCwKICAgICAgICAg
ICAgICAgICAgICAgICAgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsIFBSVWludDMyIGZsYWdzLAog
ICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqKm9ianAsIFBSQm9vbCAqX3JldHZhbCk7
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcm9wZXJ0eShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZl
ICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmpl
Y3QgKm9iaiwganN2YWwgaWQsIGpzdmFsICp2cCwKICAgICAgICAgICAgICAgICAgICAgICAgIFBS
Qm9vbCAqX3JldHZhbCk7CgogIHZpcnR1YWwgbnNyZXN1bHQgTmV3RW51bWVyYXRlKG5zSVhQQ29u
bmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgSlND
b250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVp
bnQzMiBlbnVtX29wLCBqc3ZhbCAqc3RhdGVwLAogICAgICAgICAgICAgICAgICAgICAgICAgIGpz
aWQgKmlkcCwgUFJCb29sICpfcmV0dmFsKTsKCiAgc3RhdGljIG5zSUNsYXNzSW5mbyAqZG9DcmVh
dGUobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkKICB7CiAgICByZXR1cm4gbmV3IG5zSFRNTEZv
cm1FbGVtZW50U0goYURhdGEpOwogIH0KfTsKCgoKCmNsYXNzIG5zSFRNTFNlbGVjdEVsZW1lbnRT
SCA6IHB1YmxpYyBuc0hUTUxFbGVtZW50U0gKewpwcm90ZWN0ZWQ6CiAgbnNIVE1MU2VsZWN0RWxl
bWVudFNIKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpIDogbnNIVE1MRWxlbWVudFNIKGFEYXRh
KQogIHsKICB9CgogIHZpcnR1YWwgfm5zSFRNTFNlbGVjdEVsZW1lbnRTSCgpCiAgewogIH0KCnB1
YmxpYzoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb3BlcnR5KG5zSVhQQ29ubmVjdFdyYXBwZWRO
YXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICBK
U09iamVjdCAqb2JqLCBqc3ZhbCBpZCwganN2YWwgKnZwLAogICAgICAgICAgICAgICAgICAgICAg
ICAgUFJCb29sICpfcmV0dmFsKTsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFByb3BlcnR5KG5zSVhQ
Q29ubmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwganN2YWwgKnZwLCBQUkJvb2wg
Kl9yZXR2YWwpOwoKICBzdGF0aWMgbnNyZXN1bHQgU2V0T3B0aW9uKEpTQ29udGV4dCAqY3gsIGpz
dmFsICp2cCwgUFJVaW50MzIgYUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ
RE9NTlNIVE1MT3B0aW9uQ29sbGVjdGlvbiAqYU9wdENvbGxlY3Rpb24pOwoKICBzdGF0aWMgbnNJ
Q2xhc3NJbmZvICpkb0NyZWF0ZShuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKQogIHsKICAgIHJl
dHVybiBuZXcgbnNIVE1MU2VsZWN0RWxlbWVudFNIKGFEYXRhKTsKICB9Cn07CgoKCgoKY2xhc3Mg
bnNIVE1MRXh0ZXJuYWxPYmpTSCA6IHB1YmxpYyBuc0hUTUxFbGVtZW50U0gKewpwcm90ZWN0ZWQ6
CiAgbnNIVE1MRXh0ZXJuYWxPYmpTSChuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKSA6IG5zSFRN
TEVsZW1lbnRTSChhRGF0YSkKICB7CiAgfQoKICB2aXJ0dWFsIH5uc0hUTUxFeHRlcm5hbE9ialNI
KCkKICB7CiAgfQoKICBuc3Jlc3VsdCBHZXRQbHVnaW5JbnN0YW5jZShuc0lYUENvbm5lY3RXcmFw
cGVkTmF0aXZlICphV3JhcHBlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lQbHVn
aW5JbnN0YW5jZSAqKmFSZXN1bHQpOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBsdWdpbkpTT2Jq
ZWN0KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lQbHVnaW5JbnN0YW5jZSAqcGx1Z2luX2luc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqKnBsdWdpbl9vYmosCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqKnBsdWdpbl9wcm90bykgPSAw
OwoKcHVibGljOgogIHZpcnR1YWwgbnNyZXN1bHQgUG9zdENyZWF0ZShuc0lYUENvbm5lY3RXcmFw
cGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAg
ICBKU09iamVjdCAqb2JqKTsKfTsKCgoKCmNsYXNzIG5zSFRNTEFwcGxldEVsZW1lbnRTSCA6IHB1
YmxpYyBuc0hUTUxFeHRlcm5hbE9ialNICnsKcHJvdGVjdGVkOgogIG5zSFRNTEFwcGxldEVsZW1l
bnRTSChuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKSA6IG5zSFRNTEV4dGVybmFsT2JqU0goYURh
dGEpCiAgewogIH0KCiAgdmlydHVhbCB+bnNIVE1MQXBwbGV0RWxlbWVudFNIKCkKICB7CiAgfQoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBsdWdpbkpTT2JqZWN0KEpTQ29udGV4dCAqY3gsIEpTT2Jq
ZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lQbHVnaW5J
bnN0YW5jZSAqcGx1Z2luX2luc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBKU09iamVjdCAqKnBsdWdpbl9vYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBKU09iamVjdCAqKnBsdWdpbl9wcm90byk7CgpwdWJsaWM6CiAgc3RhdGljIG5zSUNsYXNz
SW5mbyAqZG9DcmVhdGUobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkKICB7CiAgICByZXR1cm4g
bmV3IG5zSFRNTEFwcGxldEVsZW1lbnRTSChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3MgbnNIVE1M
UGx1Z2luT2JqRWxlbWVudFNIIDogcHVibGljIG5zSFRNTEFwcGxldEVsZW1lbnRTSAp7CnByb3Rl
Y3RlZDoKICBuc0hUTUxQbHVnaW5PYmpFbGVtZW50U0gobnNET01DbGFzc0luZm9EYXRhKiBhRGF0
YSkgOiBuc0hUTUxBcHBsZXRFbGVtZW50U0goYURhdGEpCiAgewogIH0KCiAgdmlydHVhbCB+bnNI
VE1MUGx1Z2luT2JqRWxlbWVudFNIKCkKICB7CiAgfQoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBs
dWdpbkpTT2JqZWN0KEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lQbHVnaW5JbnN0YW5jZSAqcGx1Z2luX2luc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqKnBsdWdpbl9vYmos
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCAqKnBsdWdpbl9w
cm90byk7CgpwdWJsaWM6CiAgdmlydHVhbCBuc3Jlc3VsdCBOZXdSZXNvbHZlKG5zSVhQQ29ubmVj
dFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAgICAg
ICAgICAgIEpTT2JqZWN0ICpvYmosIGpzdmFsIGlkLCBQUlVpbnQzMiBmbGFncywKICAgICAgICAg
ICAgICAgICAgICAgICAgSlNPYmplY3QgKipvYmpwLCBQUkJvb2wgKl9yZXR2YWwpOwoKICBzdGF0
aWMgbnNJQ2xhc3NJbmZvICpkb0NyZWF0ZShuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKQogIHsK
ICAgIHJldHVybiBuZXcgbnNIVE1MUGx1Z2luT2JqRWxlbWVudFNIKGFEYXRhKTsKICB9Cn07CgoK
CgpjbGFzcyBuc0hUTUxPcHRpb25Db2xsZWN0aW9uU0ggOiBwdWJsaWMgbnNIVE1MQ29sbGVjdGlv
blNICnsKcHJvdGVjdGVkOgogIG5zSFRNTE9wdGlvbkNvbGxlY3Rpb25TSChuc0RPTUNsYXNzSW5m
b0RhdGEqIGFEYXRhKSA6IG5zSFRNTENvbGxlY3Rpb25TSChhRGF0YSkKICB7CiAgfQoKICB2aXJ0
dWFsIH5uc0hUTUxPcHRpb25Db2xsZWN0aW9uU0goKQogIHsKICB9CgpwdWJsaWM6CiAgdmlydHVh
bCBuc3Jlc3VsdCBTZXRQcm9wZXJ0eShuc0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVy
LCBKU0NvbnRleHQgKmN4LAogICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKm9iaiwg
anN2YWwgaWQsIGpzdmFsICp2cCwgUFJCb29sICpfcmV0dmFsKTsKCiAgc3RhdGljIG5zSUNsYXNz
SW5mbyAqZG9DcmVhdGUobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkKICB7CiAgICByZXR1cm4g
bmV3IG5zSFRNTE9wdGlvbkNvbGxlY3Rpb25TSChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3MgbnNQ
bHVnaW5TSCA6IHB1YmxpYyBuc05hbWVkQXJyYXlTSAp7CnByb3RlY3RlZDoKICBuc1BsdWdpblNI
KG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpIDogbnNOYW1lZEFycmF5U0goYURhdGEpCiAgewog
IH0KCiAgdmlydHVhbCB+bnNQbHVnaW5TSCgpCiAgewogIH0KCgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldEl0ZW1BdChuc0lTdXBwb3J0cyAqYU5hdGl2ZSwgUFJVaW50MzIgYUluZGV4LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqYVJlc3VsdCk7CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldE5hbWVkSXRlbShuc0lTdXBwb3J0cyAqYU5hdGl2ZSwgY29uc3QgbnNBU3Ry
aW5nJiBhTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAq
KmFSZXN1bHQpOwoKcHVibGljOgogIHN0YXRpYyBuc0lDbGFzc0luZm8gKmRvQ3JlYXRlKG5zRE9N
Q2xhc3NJbmZvRGF0YSogYURhdGEpCiAgewogICAgcmV0dXJuIG5ldyBuc1BsdWdpblNIKGFEYXRh
KTsKICB9Cn07CgoKCgpjbGFzcyBuc1BsdWdpbkFycmF5U0ggOiBwdWJsaWMgbnNOYW1lZEFycmF5
U0gKewpwcm90ZWN0ZWQ6CiAgbnNQbHVnaW5BcnJheVNIKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURh
dGEpIDogbnNOYW1lZEFycmF5U0goYURhdGEpCiAgewogIH0KCiAgdmlydHVhbCB+bnNQbHVnaW5B
cnJheVNIKCkKICB7CiAgfQoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SXRlbUF0KG5zSVN1cHBv
cnRzICphTmF0aXZlLCBQUlVpbnQzMiBhSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJU3VwcG9ydHMgKiphUmVzdWx0KTsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZWRJ
dGVtKG5zSVN1cHBvcnRzICphTmF0aXZlLCBjb25zdCBuc0FTdHJpbmcmIGFOYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqYVJlc3VsdCk7CgpwdWJsaWM6
CiAgc3RhdGljIG5zSUNsYXNzSW5mbyAqZG9DcmVhdGUobnNET01DbGFzc0luZm9EYXRhKiBhRGF0
YSkKICB7CiAgICByZXR1cm4gbmV3IG5zUGx1Z2luQXJyYXlTSChhRGF0YSk7CiAgfQp9OwoKCgoK
Y2xhc3MgbnNNaW1lVHlwZUFycmF5U0ggOiBwdWJsaWMgbnNOYW1lZEFycmF5U0gKewpwcm90ZWN0
ZWQ6CiAgbnNNaW1lVHlwZUFycmF5U0gobnNET01DbGFzc0luZm9EYXRhKiBhRGF0YSkgOiBuc05h
bWVkQXJyYXlTSChhRGF0YSkKICB7CiAgfQoKICB2aXJ0dWFsIH5uc01pbWVUeXBlQXJyYXlTSCgp
CiAgewogIH0KCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEl0ZW1BdChuc0lTdXBwb3J0cyAqYU5h
dGl2ZSwgUFJVaW50MzIgYUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1
cHBvcnRzICoqYVJlc3VsdCk7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWVkSXRlbShuc0lT
dXBwb3J0cyAqYU5hdGl2ZSwgY29uc3QgbnNBU3RyaW5nJiBhTmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAqKmFSZXN1bHQpOwoKcHVibGljOgogIHN0YXRp
YyBuc0lDbGFzc0luZm8gKmRvQ3JlYXRlKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpCiAgewog
ICAgcmV0dXJuIG5ldyBuc01pbWVUeXBlQXJyYXlTSChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3Mg
bnNTdHJpbmdBcnJheVNIIDogcHVibGljIG5zRE9NQ2xhc3NJbmZvCnsKcHJvdGVjdGVkOgogIG5z
U3RyaW5nQXJyYXlTSChuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKSA6IG5zRE9NQ2xhc3NJbmZv
KGFEYXRhKQogIHsKICB9CgogIHZpcnR1YWwgfm5zU3RyaW5nQXJyYXlTSCgpCiAgewogIH0KCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRTdHJpbmdBdChuc0lTdXBwb3J0cyAqYU5hdGl2ZSwgUFJJbnQz
MiBhSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcmIGFSZXN1
bHQpID0gMDsKCnB1YmxpYzoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb3BlcnR5KG5zSVhQQ29u
bmVjdFdyYXBwZWROYXRpdmUgKndyYXBwZXIsIEpTQ29udGV4dCAqY3gsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwganN2YWwgKnZwLCBQUkJvb2wgKl9y
ZXR2YWwpOwp9OwoKCgoKY2xhc3MgbnNIaXN0b3J5U0ggOiBwdWJsaWMgbnNTdHJpbmdBcnJheVNI
CnsKcHJvdGVjdGVkOgogIG5zSGlzdG9yeVNIKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpIDog
bnNTdHJpbmdBcnJheVNIKGFEYXRhKQogIHsKICB9CgogIHZpcnR1YWwgfm5zSGlzdG9yeVNIKCkK
ICB7CiAgfQoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0cmluZ0F0KG5zSVN1cHBvcnRzICphTmF0
aXZlLCBQUkludDMyIGFJbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQVN0
cmluZyYgYVJlc3VsdCk7CgpwdWJsaWM6CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcm9wZXJ0eShu
c0lYUENvbm5lY3RXcmFwcGVkTmF0aXZlICp3cmFwcGVyLCBKU0NvbnRleHQgKmN4LAogICAgICAg
ICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsIGpzdmFsICp2cCwgUFJC
b29sICpfcmV0dmFsKTsKCiAgc3RhdGljIG5zSUNsYXNzSW5mbyAqZG9DcmVhdGUobnNET01DbGFz
c0luZm9EYXRhKiBhRGF0YSkKICB7CiAgICByZXR1cm4gbmV3IG5zSGlzdG9yeVNIKGFEYXRhKTsK
ICB9Cn07CgoKCgpjbGFzcyBuc01lZGlhTGlzdFNIIDogcHVibGljIG5zU3RyaW5nQXJyYXlTSAp7
CnByb3RlY3RlZDoKICBuc01lZGlhTGlzdFNIKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpIDog
bnNTdHJpbmdBcnJheVNIKGFEYXRhKQogIHsKICB9CgogIHZpcnR1YWwgfm5zTWVkaWFMaXN0U0go
KQogIHsKICB9CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3RyaW5nQXQobnNJU3VwcG9ydHMgKmFO
YXRpdmUsIFBSSW50MzIgYUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNB
U3RyaW5nJiBhUmVzdWx0KTsKCnB1YmxpYzoKICBzdGF0aWMgbnNJQ2xhc3NJbmZvICpkb0NyZWF0
ZShuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKQogIHsKICAgIHJldHVybiBuZXcgbnNNZWRpYUxp
c3RTSChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3MgbnNTdHlsZVNoZWV0TGlzdFNIIDogcHVibGlj
IG5zQXJyYXlTSAp7CnByb3RlY3RlZDoKICBuc1N0eWxlU2hlZXRMaXN0U0gobnNET01DbGFzc0lu
Zm9EYXRhKiBhRGF0YSkgOiBuc0FycmF5U0goYURhdGEpCiAgewogIH0KCiAgdmlydHVhbCB+bnNT
dHlsZVNoZWV0TGlzdFNIKCkKICB7CiAgfQoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SXRlbUF0
KG5zSVN1cHBvcnRzICphTmF0aXZlLCBQUlVpbnQzMiBhSW5kZXgsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJU3VwcG9ydHMgKiphUmVzdWx0KTsKCnB1YmxpYzoKICBzdGF0aWMgbnNJ
Q2xhc3NJbmZvICpkb0NyZWF0ZShuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKQogIHsKICAgIHJl
dHVybiBuZXcgbnNTdHlsZVNoZWV0TGlzdFNIKGFEYXRhKTsKICB9Cn07CgoKCgpjbGFzcyBuc0NT
U1ZhbHVlTGlzdFNIIDogcHVibGljIG5zQXJyYXlTSAp7CnByb3RlY3RlZDoKICBuc0NTU1ZhbHVl
TGlzdFNIKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpIDogbnNBcnJheVNIKGFEYXRhKQogIHsK
ICB9CgogIHZpcnR1YWwgfm5zQ1NTVmFsdWVMaXN0U0goKQogIHsKICB9CgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRJdGVtQXQobnNJU3VwcG9ydHMgKmFOYXRpdmUsIFBSVWludDMyIGFJbmRleCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAqKmFSZXN1bHQpOwoKcHVi
bGljOgogIHN0YXRpYyBuc0lDbGFzc0luZm8gKmRvQ3JlYXRlKG5zRE9NQ2xhc3NJbmZvRGF0YSog
YURhdGEpCiAgewogICAgcmV0dXJuIG5ldyBuc0NTU1ZhbHVlTGlzdFNIKGFEYXRhKTsKICB9Cn07
CgoKCgpjbGFzcyBuc0NTU1N0eWxlRGVjbFNIIDogcHVibGljIG5zU3RyaW5nQXJyYXlTSAp7CnBy
b3RlY3RlZDoKICBuc0NTU1N0eWxlRGVjbFNIKG5zRE9NQ2xhc3NJbmZvRGF0YSogYURhdGEpIDog
bnNTdHJpbmdBcnJheVNIKGFEYXRhKQogIHsKICB9CgogIHZpcnR1YWwgfm5zQ1NTU3R5bGVEZWNs
U0goKQogIHsKICB9CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3RyaW5nQXQobnNJU3VwcG9ydHMg
KmFOYXRpdmUsIFBSSW50MzIgYUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNBU3RyaW5nJiBhUmVzdWx0KTsKCnB1YmxpYzoKICBzdGF0aWMgbnNJQ2xhc3NJbmZvICpkb0Ny
ZWF0ZShuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKQogIHsKICAgIHJldHVybiBuZXcgbnNDU1NT
dHlsZURlY2xTSChhRGF0YSk7CiAgfQp9OwoKCgoKY2xhc3MgbnNDU1NSdWxlTGlzdFNIIDogcHVi
bGljIG5zQXJyYXlTSAp7CnByb3RlY3RlZDoKICBuc0NTU1J1bGVMaXN0U0gobnNET01DbGFzc0lu
Zm9EYXRhKiBhRGF0YSkgOiBuc0FycmF5U0goYURhdGEpCiAgewogIH0KCiAgdmlydHVhbCB+bnND
U1NSdWxlTGlzdFNIKCkKICB7CiAgfQoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SXRlbUF0KG5z
SVN1cHBvcnRzICphTmF0aXZlLCBQUlVpbnQzMiBhSW5kZXgsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJU3VwcG9ydHMgKiphUmVzdWx0KTsKCnB1YmxpYzoKICBzdGF0aWMgbnNJQ2xh
c3NJbmZvICpkb0NyZWF0ZShuc0RPTUNsYXNzSW5mb0RhdGEqIGFEYXRhKQogIHsKICAgIHJldHVy
biBuZXcgbnNDU1NSdWxlTGlzdFNIKGFEYXRhKTsKICB9Cn07CiMgMTEzMCAibnNET01DbGFzc0lu
Zm8uaCIKY2xhc3MgbnNFdmVudExpc3RlbmVyVGhpc1RyYW5zbGF0b3IgOiBwdWJsaWMgbnNJWFBD
RnVuY3Rpb25UaGlzVHJhbnNsYXRvcgp7CnB1YmxpYzoKICBuc0V2ZW50TGlzdGVuZXJUaGlzVHJh
bnNsYXRvcigpCiAgewogIH0KCiAgdmlydHVhbCB+bnNFdmVudExpc3RlbmVyVGhpc1RyYW5zbGF0
b3IoKQogIHsKICB9CgoKICBwdWJsaWM6IHZpcnR1YWwgbnNyZXN1bHQgUXVlcnlJbnRlcmZhY2Uo
Y29uc3QgbnNJSUQmIGFJSUQsIHZvaWQqKiBhSW5zdGFuY2VQdHIpOyB2aXJ0dWFsIG5zcmVmY250
IEFkZFJlZih2b2lkKTsgdmlydHVhbCBuc3JlZmNudCBSZWxlYXNlKHZvaWQpOyBwcm90ZWN0ZWQ6
IG5zQXV0b1JlZkNudCBtUmVmQ250OyBwdWJsaWM6CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRyYW5z
bGF0ZVRoaXMobnNJU3VwcG9ydHMgKmFJbml0aWFsVGhpcywgbnNJSW50ZXJmYWNlSW5mbyAqYUlu
dGVyZmFjZUluZm8sIFBSVWludDE2IGFNZXRob2RJbmRleCwgUFJCb29sICphSGlkZUZpcnN0UGFy
YW1Gcm9tSlMsIG5zSUlEICogKmFJSURPZlJlc3VsdCwgbnNJU3VwcG9ydHMgKipfcmV0dmFsKTsK
fTsKCgp2b2lkIEludmFsaWRhdGVDb250ZXh0QW5kV3JhcHBlckNhY2hlKCk7CiMgNDIgIm5zRE9N
Q2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NSVC5o
IiAxCiMgNDIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NSVC5oIgojIDEgIi92YXIv
dG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3By
L3Bsc3RyLmgiIDEKIyA2MSAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21v
emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuICJDIiB7CgoKCgoKCmV4dGVy
biBQUlVpbnQzMgpQTF9zdHJsZW4oY29uc3QgY2hhciAqc3RyKTsKIyA3OSAiL3Zhci90bXAvcG9y
dGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIu
aCIKZXh0ZXJuIFBSVWludDMyClBMX3N0cm5sZW4oY29uc3QgY2hhciAqc3RyLCBQUlVpbnQzMiBt
YXgpOwojIDkwICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cmNweShjaGFyICpk
ZXN0LCBjb25zdCBjaGFyICpzcmMpOwojIDEwMyAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEu
My1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIg
KgpQTF9zdHJuY3B5KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgUFJVaW50MzIgbWF4KTsK
IyAxMjYgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3Qv
aW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybmNweXooY2hhciAqZGVz
dCwgY29uc3QgY2hhciAqc3JjLCBQUlVpbnQzMiBtYXgpOwojIDE0MCAiL3Zhci90bXAvcG9ydGFn
ZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIK
ZXh0ZXJuIGNoYXIgKgpQTF9zdHJkdXAoY29uc3QgY2hhciAqcyk7CgoKCgoKCgpleHRlcm4gdm9p
ZApQTF9zdHJmcmVlKGNoYXIgKnMpOwojIDE2NCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEu
My1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIg
KgpQTF9zdHJuZHVwKGNvbnN0IGNoYXIgKnMsIFBSVWludDMyIG1heCk7CiMgMTc2ICIvdmFyL3Rt
cC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w
bHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cmNhdChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNy
Yyk7CiMgMTkxICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cm5jYXQoY2hhciAq
ZHN0LCBjb25zdCBjaGFyICpzcmMsIFBSVWludDMyIG1heCk7CiMgMjA1ICIvdmFyL3RtcC9wb3J0
YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5o
IgpleHRlcm4gY2hhciAqClBMX3N0cmNhdG4oY2hhciAqZHN0LCBQUlVpbnQzMiBtYXgsIGNvbnN0
IGNoYXIgKnNyYyk7CiMgMjE3ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsv
bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gUFJJbnRuClBMX3N0cmNt
cChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKTsKIyAyMzEgIi92YXIvdG1wL3BvcnRhZ2Uv
bW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4
dGVybiBQUkludG4KUExfc3RybmNtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiLCBQUlVp
bnQzMiBtYXgpOwojIDI0MyAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21v
emlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIFBSSW50bgpQTF9zdHJjYXNl
Y21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpOwojIDI1NSAiL3Zhci90bXAvcG9ydGFn
ZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIK
ZXh0ZXJuIFBSSW50bgpQTF9zdHJuY2FzZWNtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpi
LCBQUlVpbnQzMiBtYXgpOwojIDI2NiAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93
b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9z
dHJjaHIoY29uc3QgY2hhciAqcywgY2hhciBjKTsKIyAyNzcgIi92YXIvdG1wL3BvcnRhZ2UvbW96
aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVy
biBjaGFyICoKUExfc3RycmNocihjb25zdCBjaGFyICpzLCBjaGFyIGMpOwojIDI4OSAiL3Zhci90
bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIv
cGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJuY2hyKGNvbnN0IGNoYXIgKnMsIGNoYXIgYywg
UFJVaW50MzIgbik7CiMgMzAxICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsv
bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cm5y
Y2hyKGNvbnN0IGNoYXIgKnMsIGNoYXIgYywgUFJVaW50MzIgbik7CiMgMzE3ICIvdmFyL3RtcC9w
b3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0
ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cnBicmsoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAq
bGlzdCk7CiMgMzI4ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxs
YS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRlcm4gY2hhciAqClBMX3N0cnByYnJrKGNv
bnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmxpc3QpOwojIDMzOSAiL3Zhci90bXAvcG9ydGFnZS9t
b3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0
ZXJuIGNoYXIgKgpQTF9zdHJucGJyayhjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpsaXN0LCBQ
UlVpbnQzMiBuKTsKIyAzNTAgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9t
b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybnBy
YnJrKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmxpc3QsIFBSVWludDMyIG4pOwojIDM2MCAi
L3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRl
L25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJzdHIoY29uc3QgY2hhciAqYmlnLCBj
b25zdCBjaGFyICpsaXR0bGUpOwojIDM3MCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1y
MS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQ
TF9zdHJyc3RyKGNvbnN0IGNoYXIgKmJpZywgY29uc3QgY2hhciAqbGl0dGxlKTsKIyAzODEgIi92
YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybnN0cihjb25zdCBjaGFyICpiaWcsIGNv
bnN0IGNoYXIgKmxpdHRsZSwgUFJVaW50MzIgbik7CiMgMzkyICIvdmFyL3RtcC9wb3J0YWdlL21v
emlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wbHN0ci5oIgpleHRl
cm4gY2hhciAqClBMX3N0cm5yc3RyKGNvbnN0IGNoYXIgKmJpZywgY29uc3QgY2hhciAqbGl0dGxl
LCBQUlVpbnQzMiBtYXgpOwojIDQwMiAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93
b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9z
dHJjYXNlc3RyKGNvbnN0IGNoYXIgKmJpZywgY29uc3QgY2hhciAqbGl0dGxlKTsKIyA0MTIgIi92
YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RyY2FzZXJzdHIoY29uc3QgY2hhciAqYmln
LCBjb25zdCBjaGFyICpsaXR0bGUpOwojIDQyMyAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEu
My1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIg
KgpQTF9zdHJuY2FzZXN0cihjb25zdCBjaGFyICpiaWcsIGNvbnN0IGNoYXIgKmxpdHRsZSwgUFJV
aW50MzIgbWF4KTsKIyA0MzQgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9t
b3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3Bsc3RyLmgiCmV4dGVybiBjaGFyICoKUExfc3RybmNh
c2Vyc3RyKGNvbnN0IGNoYXIgKmJpZywgY29uc3QgY2hhciAqbGl0dGxlLCBQUlVpbnQzMiBtYXgp
OwojIDQ1NiAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvcGxzdHIuaCIKZXh0ZXJuIGNoYXIgKgpQTF9zdHJ0b2tfcihjaGFyICpz
MSwgY29uc3QgY2hhciAqczIsIGNoYXIgKipsYXN0cyk7CgoKCgoKCgp9CiMgNDMgIi4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS94cGNvbS9uc0NSVC5oIiAyCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1
ZGUveHBjb20vbnNDcHBTaGFyZWRBbGxvY2F0b3IuaCIgMQojIDIzICIuLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUveHBjb20vbnNDcHBTaGFyZWRBbGxvY2F0b3IuaCIKIyAxICIvdXNyL2xpYi9nY2MtbGli
L2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDExICIvdXNy
L2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvbGltaXRzLmgiIDMK
IyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3lz
bGltaXRzLmgiIDEgMwoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1n
bnUvMy4yLjIvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTMyICIvdXNyL2xpYi9nY2MtbGliL2k1
ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvbGltaXRzLmgiIDEgMwojIDE0NCAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAxIDMKIyAxMjYgIi91c3IvaW5jbHVkZS9iaXRz
L3Bvc2l4MV9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMK
IyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv
bGludXgvbGltaXRzLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIg
MiAzCiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMwojIDE0NSAiL3Vz
ci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDJf
bGltLmgiIDEgMwojIDE0OSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9iaXRzL3hv
cGVuX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDM1
ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMiAzCiMgMTM2ICIvdXNyL2luY2x1ZGUv
Yml0cy94b3Blbl9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEg
MwojIDEzNyAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDIgMwojIDE1MyAiL3Vzci9p
bmNsdWRlL2xpbWl0cy5oIiAyIDMKIyAxMzMgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51
eC1nbnUvMy4yLjIvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgOCAiL3Vzci9saWIvZ2NjLWxpYi9p
NTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMKIyAxMiAiL3Vz
ci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL2xpbWl0cy5oIiAy
IDMKIyAyNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zQ3BwU2hhcmVkQWxsb2NhdG9y
LmgiIDIKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIG5zQ3BwU2hhcmVkQWxsb2NhdG9yCgoK
CgogIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVk
ZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90
eXBlOwoKICAgICAgdHlwZWRlZiBUKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IFQqIGNv
bnN0X3BvaW50ZXI7CgogICAgICB0eXBlZGVmIFQmIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBj
b25zdCBUJiBjb25zdF9yZWZlcmVuY2U7CgoKCiAgICAgIG5zQ3BwU2hhcmVkQWxsb2NhdG9yKCkg
eyB9CgoKCgoKCiAgICAgfm5zQ3BwU2hhcmVkQWxsb2NhdG9yKCkgeyB9CgoKICAgICAgcG9pbnRl
cgogICAgICBhZGRyZXNzKCByZWZlcmVuY2UgciApIGNvbnN0CiAgICAgICAgewogICAgICAgICAg
cmV0dXJuICZyOwogICAgICAgIH0KCiAgICAgIGNvbnN0X3BvaW50ZXIKICAgICAgYWRkcmVzcygg
Y29uc3RfcmVmZXJlbmNlIHIgKSBjb25zdAogICAgICAgIHsKICAgICAgICAgIHJldHVybiAmcjsK
ICAgICAgICB9CgogICAgICBwb2ludGVyCiAgICAgIGFsbG9jYXRlKCBzaXplX3R5cGUgbiwgY29u
c3Qgdm9pZCogPTAgKQogICAgICAgIHsKICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PCBwb2ludGVyID4obnNNZW1vcnk6OkFsbG9jKHN0YXRpY19jYXN0PCBQUlVpbnQzMiA+KG4qc2l6
ZW9mKFQpKSkpOwogICAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgZGVhbGxvY2F0ZSggcG9pbnRl
ciBwLCBzaXplX3R5cGUgKQogICAgICAgIHsKICAgICAgICAgIG5zTWVtb3J5OjpGcmVlKHApOwog
ICAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgY29uc3RydWN0KCBwb2ludGVyIHAsIGNvbnN0IFQm
IHZhbCApCiAgICAgICAgewogICAgICAgICAgbmV3IChwKSBUKHZhbCk7CiAgICAgICAgfQoKICAg
ICAgdm9pZAogICAgICBkZXN0cm95KCBwb2ludGVyIHAgKQogICAgICAgIHsKICAgICAgICAgIHAt
Pn5UKCk7CiAgICAgICAgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIG1heF9zaXplKCkgY29uc3QK
ICAgICAgICB7CgoKCiAgICAgICAgICByZXR1cm4gKDIxNDc0ODM2NDdMICogMlVMICsgMSkgLyBz
aXplb2YoVCk7CgogICAgICAgIH0KIyAxMTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9u
c0NwcFNoYXJlZEFsbG9jYXRvci5oIgogIH07CgoKdGVtcGxhdGUgPGNsYXNzIFQ+ClBSQm9vbApv
cGVyYXRvcj09KCBjb25zdCBuc0NwcFNoYXJlZEFsbG9jYXRvcjxUPiYsIGNvbnN0IG5zQ3BwU2hh
cmVkQWxsb2NhdG9yPFQ+JiApCiAgewogICAgcmV0dXJuIDE7CiAgfQoKdGVtcGxhdGUgPGNsYXNz
IFQ+ClBSQm9vbApvcGVyYXRvciE9KCBjb25zdCBuc0NwcFNoYXJlZEFsbG9jYXRvcjxUPiYsIGNv
bnN0IG5zQ3BwU2hhcmVkQWxsb2NhdG9yPFQ+JiApCiAgewogICAgcmV0dXJuIDA7CiAgfQojIDQ2
ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNDUlQuaCIgMgojIDYyICIuLi8uLi8uLi9k
aXN0L2luY2x1ZGUveHBjb20vbnNDUlQuaCIKZXh0ZXJuIGNvbnN0IFBSVW5pY2hhciBrSXNvTGF0
aW4xVG9VQ1MyWzI1Nl07CiMgMTAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNDUlQu
aCIKY2xhc3MgbnNDUlQgewpwdWJsaWM6CiAgZW51bSB7CiAgICBUQUI9J1x0JyAsCiAgICBMRj0n
XG4nICwKICAgIFZUQUI9J1x2JyAsCiAgICBGRj0nXGYnICwKICAgIENSPSdccicKICB9OwojIDEz
NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zQ1JULmgiCiAgc3RhdGljIFBSVWludDMy
IHN0cmxlbihjb25zdCBjaGFyKiBzKSB7CiAgICByZXR1cm4gUFJVaW50MzIoOjpzdHJsZW4ocykp
OwogIH0KCgogIHN0YXRpYyBQUkludDMyIHN0cmNtcChjb25zdCBjaGFyKiBzMSwgY29uc3QgY2hh
ciogczIpIHsKICAgIHJldHVybiBQUkludDMyKFBMX3N0cmNtcChzMSwgczIpKTsKICB9CgogIHN0
YXRpYyBQUkludDMyIHN0cm5jbXAoY29uc3QgY2hhciogczEsIGNvbnN0IGNoYXIqIHMyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYU1heExlbikgewogICAgcmV0dXJuIFBSSW50
MzIoUExfc3RybmNtcChzMSwgczIsIGFNYXhMZW4pKTsKICB9CgoKICBzdGF0aWMgUFJJbnQzMiBz
dHJjYXNlY21wKGNvbnN0IGNoYXIqIHMxLCBjb25zdCBjaGFyKiBzMikgewogICAgcmV0dXJuIFBS
SW50MzIoUExfc3RyY2FzZWNtcChzMSwgczIpKTsKICB9CgoKICBzdGF0aWMgUFJJbnQzMiBzdHJu
Y2FzZWNtcChjb25zdCBjaGFyKiBzMSwgY29uc3QgY2hhciogczIsIFBSVWludDMyIGFNYXhMZW4p
IHsKICAgIFBSSW50MzIgcmVzdWx0PVBSSW50MzIoUExfc3RybmNhc2VjbXAoczEsIHMyLCBhTWF4
TGVuKSk7CgoKICAgIGlmIChyZXN1bHQ8MCkKICAgICAgcmVzdWx0PS0xOwogICAgcmV0dXJuIHJl
c3VsdDsKICB9CgogIHN0YXRpYyBQUkludDMyIHN0cm5jbXAoY29uc3QgY2hhciogczEsIGNvbnN0
IGNoYXIqIHMyLCBQUkludDMyIGFNYXhMZW4pIHsKCiAgICBQUkludDMyIGRpZmYgPSAoKGNvbnN0
IHVuc2lnbmVkIGNoYXIqKXMxKVswXSAtICgoY29uc3QgdW5zaWduZWQgY2hhciopczIpWzBdOwog
ICAgaWYgKGRpZmYgIT0gMCkgcmV0dXJuIGRpZmY7CiAgICByZXR1cm4gUFJJbnQzMihQTF9zdHJu
Y21wKHMxLHMyLHVuc2lnbmVkKGFNYXhMZW4pKSk7CiAgfQoKICBzdGF0aWMgY2hhciogc3RyZHVw
KGNvbnN0IGNoYXIqIHN0cikgewogICAgcmV0dXJuIFBMX3N0cmR1cChzdHIpOwogIH0KCiAgc3Rh
dGljIGNoYXIqIHN0cm5kdXAoY29uc3QgY2hhciogc3RyLCBQUlVpbnQzMiBsZW4pIHsKICAgIHJl
dHVybiBQTF9zdHJuZHVwKHN0ciwgbGVuKTsKICB9CgogIHN0YXRpYyB2b2lkIGZyZWUoY2hhciog
c3RyKSB7CiAgICBQTF9zdHJmcmVlKHN0cik7CiAgfQojIDIwMSAiLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL3hwY29tL25zQ1JULmgiCiAgc3RhdGljIGNoYXIqIHN0cnRvayhjaGFyKiBzdHIsIGNvbnN0
IGNoYXIqIGRlbGltcywgY2hhciogKm5ld1N0cik7CgoKICBzdGF0aWMgUFJVaW50MzIgc3RybGVu
KGNvbnN0IFBSVW5pY2hhciogcyk7CgoKICBzdGF0aWMgUFJJbnQzMiBzdHJjbXAoY29uc3QgUFJV
bmljaGFyKiBzMSwgY29uc3QgUFJVbmljaGFyKiBzMik7CgogIHN0YXRpYyBQUkludDMyIHN0cm5j
bXAoY29uc3QgUFJVbmljaGFyKiBzMSwgY29uc3QgUFJVbmljaGFyKiBzMiwKICAgICAgICAgICAg
ICAgICAgICAgICAgIFBSVWludDMyIGFNYXhMZW4pOwoKCgogIHN0YXRpYyBQUlVuaWNoYXIqIHN0
cmR1cChjb25zdCBQUlVuaWNoYXIqIHN0cik7CgoKCiAgc3RhdGljIFBSVW5pY2hhciogc3RybmR1
cChjb25zdCBQUlVuaWNoYXIqIHN0ciwgUFJVaW50MzIgbGVuKTsKCiAgc3RhdGljIHZvaWQgZnJl
ZShQUlVuaWNoYXIqIHN0cikgewogICAgICAgIG5zQ3BwU2hhcmVkQWxsb2NhdG9yPFBSVW5pY2hh
cj4gc2hhcmVkX2FsbG9jYXRvcjsKICAgICAgICBzaGFyZWRfYWxsb2NhdG9yLmRlYWxsb2NhdGUo
c3RyLCAwICk7CiAgfQoKCgogIHN0YXRpYyBQUlVpbnQzMiBIYXNoQ29kZShjb25zdCBjaGFyKiBz
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyKiByZXN1bHRpbmdTdHJMZW4g
PSAwKTsKCgoKICBzdGF0aWMgUFJVaW50MzIgSGFzaENvZGUoY29uc3QgUFJVbmljaGFyKiBzdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyKiByZXN1bHRpbmdTdHJMZW4gPSAw
KTsKCgoKCiAgc3RhdGljIFBSVWludDMyIEhhc2hDb2RlQXNVVEY4KGNvbnN0IFBSVW5pY2hhciog
c3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiogcmVzdWx0aW5n
U3RyTGVuID0gMCk7CgoKICBzdGF0aWMgUFJVaW50MzIgQnVmZmVySGFzaENvZGUoY29uc3QgY2hh
ciogc3RyLCBQUlVpbnQzMiBzdHJMZW4pOwoKCiAgc3RhdGljIFBSVWludDMyIEJ1ZmZlckhhc2hD
b2RlKGNvbnN0IFBSVW5pY2hhciogc3RyLCBQUlVpbnQzMiBzdHJMZW4pOwoKCiAgc3RhdGljIFBS
SW50NjQgYXRvbGwoY29uc3QgY2hhciAqc3RyKTsKCiAgc3RhdGljIGNoYXIgVG9VcHBlcihjaGFy
IGFDaGFyKTsKCiAgc3RhdGljIGNoYXIgVG9Mb3dlcihjaGFyIGFDaGFyKTsKCiAgc3RhdGljIFBS
Qm9vbCBJc1VwcGVyKGNoYXIgYUNoYXIpOwoKICBzdGF0aWMgUFJCb29sIElzTG93ZXIoY2hhciBh
Q2hhcik7CgogIHN0YXRpYyBQUkJvb2wgSXNBc2NpaShQUlVuaWNoYXIgYUNoYXIpOwogIHN0YXRp
YyBQUkJvb2wgSXNBc2NpaShjb25zdCBQUlVuaWNoYXIqIGFTdHJpbmcpOwogIHN0YXRpYyBQUkJv
b2wgSXNBc2NpaUFscGhhKFBSVW5pY2hhciBhQ2hhcik7CiAgc3RhdGljIFBSQm9vbCBJc0FzY2lp
RGlnaXQoUFJVbmljaGFyIGFDaGFyKTsKICBzdGF0aWMgUFJCb29sIElzQXNjaWlTcGFjZShQUlVu
aWNoYXIgYUNoYXIpOwogIHN0YXRpYyBQUkJvb2wgSXNBc2NpaShjb25zdCBjaGFyKiBhU3RyaW5n
KTsKfTsKIyA0MyAibnNET01DbGFzc0luZm8uY3BwIiAyCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS94cGNvbS9uc0lDYXRlZ29yeU1hbmFnZXIuaCIgMQojIDI5ICIuLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUveHBjb20vbnNJQ2F0ZWdvcnlNYW5hZ2VyLmgiCmNsYXNzIG5zSUNhdGVnb3J5TWFuYWdl
ciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYg
R2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgzMjc1YjJjZCwgMHhhZjZkLCAw
eDQyOWEsIHsgMHg4MCwgMHhkNywgMHhmMCwgMHhjNSwgMHgxMiwgMHgwMywgMHg0MiwgMHhhYyB9
fTsgcmV0dXJuIGlpZDt9CiMgNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDYXRl
Z29yeU1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhdGVnb3J5RW50cnkoY29uc3Qg
Y2hhciAqYUNhdGVnb3J5LCBjb25zdCBjaGFyICphRW50cnksIGNoYXIgKipfcmV0dmFsKSA9IDA7
CiMgNTMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDYXRlZ29yeU1hbmFnZXIuaCIK
ICB2aXJ0dWFsIG5zcmVzdWx0IEFkZENhdGVnb3J5RW50cnkoY29uc3QgY2hhciAqYUNhdGVnb3J5
LCBjb25zdCBjaGFyICphRW50cnksIGNvbnN0IGNoYXIgKmFWYWx1ZSwgUFJCb29sIGFQZXJzaXN0
LCBQUkJvb2wgYVJlcGxhY2UsIGNoYXIgKipfcmV0dmFsKSA9IDA7CiMgNjIgIi4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS94cGNvbS9uc0lDYXRlZ29yeU1hbmFnZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0
IERlbGV0ZUNhdGVnb3J5RW50cnkoY29uc3QgY2hhciAqYUNhdGVnb3J5LCBjb25zdCBjaGFyICph
RW50cnksIFBSQm9vbCBhUGVyc2lzdCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IERl
bGV0ZUNhdGVnb3J5KGNvbnN0IGNoYXIgKmFDYXRlZ29yeSkgPSAwOwoKCgoKCgogIHZpcnR1YWwg
bnNyZXN1bHQgRW51bWVyYXRlQ2F0ZWdvcnkoY29uc3QgY2hhciAqYUNhdGVnb3J5LCBuc0lTaW1w
bGVFbnVtZXJhdG9yICoqX3JldHZhbCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRW51
bWVyYXRlQ2F0ZWdvcmllcyhuc0lTaW1wbGVFbnVtZXJhdG9yICoqX3JldHZhbCkgPSAwOwoKfTsK
IyA0NSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw
Y29tL25zSUNvbXBvbmVudFJlZ2lzdHJhci5oIiAxCiMgMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS94cGNvbS9uc0lDb21wb25lbnRSZWdpc3RyYXIuaCIKY2xhc3MgbnNJRmlsZTsKCmNsYXNzIG5z
SUZhY3Rvcnk7CgpjbGFzcyBuc0lTaW1wbGVFbnVtZXJhdG9yOwojIDMxICIuLi8uLi8uLi9kaXN0
L2luY2x1ZGUveHBjb20vbnNJQ29tcG9uZW50UmVnaXN0cmFyLmgiCmNsYXNzIG5zSUNvbXBvbmVu
dFJlZ2lzdHJhciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25z
dCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgyNDE3Y2JmZSwg
MHg2NWFkLCAweDQ4YTYsIHsgMHhiNCwgMHhiNiwgMHhlYiwgMHg4NCwgMHhkYiwgMHgxNywgMHg0
MywgMHg5MiB9fTsgcmV0dXJuIGlpZDt9CiMgNTkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNv
bS9uc0lDb21wb25lbnRSZWdpc3RyYXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEF1dG9SZWdpc3Rl
cihuc0lGaWxlICphU3BlYykgPSAwOwojIDc4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20v
bnNJQ29tcG9uZW50UmVnaXN0cmFyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBdXRvVW5yZWdpc3Rl
cihuc0lGaWxlICphU3BlYykgPSAwOwojIDk0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20v
bnNJQ29tcG9uZW50UmVnaXN0cmFyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlckZhY3Rv
cnkoY29uc3QgbnNDSUQgJiBhQ2xhc3MsIGNvbnN0IGNoYXIgKmFDbGFzc05hbWUsIGNvbnN0IGNo
YXIgKmFDb250cmFjdElELCBuc0lGYWN0b3J5ICphRmFjdG9yeSkgPSAwOwojIDEwOSAiLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUNvbXBvbmVudFJlZ2lzdHJhci5oIgogIHZpcnR1YWwg
bnNyZXN1bHQgVW5yZWdpc3RlckZhY3RvcnkoY29uc3QgbnNDSUQgJiBhQ2xhc3MsIG5zSUZhY3Rv
cnkgKmFGYWN0b3J5KSA9IDA7CiMgMTM1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJ
Q29tcG9uZW50UmVnaXN0cmFyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlckZhY3RvcnlM
b2NhdGlvbihjb25zdCBuc0NJRCAmIGFDbGFzcywgY29uc3QgY2hhciAqYUNsYXNzTmFtZSwgY29u
c3QgY2hhciAqYUNvbnRyYWN0SUQsIG5zSUZpbGUgKmFGaWxlLCBjb25zdCBjaGFyICphTG9hZGVy
U3RyLCBjb25zdCBjaGFyICphVHlwZSkgPSAwOwojIDE0OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L3hwY29tL25zSUNvbXBvbmVudFJlZ2lzdHJhci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgVW5yZWdp
c3RlckZhY3RvcnlMb2NhdGlvbihjb25zdCBuc0NJRCAmIGFDbGFzcywgbnNJRmlsZSAqYUZpbGUp
ID0gMDsKIyAxNjEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25lbnRSZWdp
c3RyYXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IElzQ0lEUmVnaXN0ZXJlZChjb25zdCBuc0NJRCAm
IGFDbGFzcywgUFJCb29sICpfcmV0dmFsKSA9IDA7CiMgMTczICIuLi8uLi8uLi9kaXN0L2luY2x1
ZGUveHBjb20vbnNJQ29tcG9uZW50UmVnaXN0cmFyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJc0Nv
bnRyYWN0SURSZWdpc3RlcmVkKGNvbnN0IGNoYXIgKmFDb250cmFjdElELCBQUkJvb2wgKl9yZXR2
YWwpID0gMDsKIyAxODUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lDb21wb25lbnRS
ZWdpc3RyYXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEVudW1lcmF0ZUNJRHMobnNJU2ltcGxlRW51
bWVyYXRvciAqKl9yZXR2YWwpID0gMDsKIyAxOTggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNv
bS9uc0lDb21wb25lbnRSZWdpc3RyYXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEVudW1lcmF0ZUNv
bnRyYWN0SURzKG5zSVNpbXBsZUVudW1lcmF0b3IgKipfcmV0dmFsKSA9IDA7CiMgMjA4ICIuLi8u
Li8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29tcG9uZW50UmVnaXN0cmFyLmgiCiAgdmlydHVh
bCBuc3Jlc3VsdCBDSURUb0NvbnRyYWN0SUQoY29uc3QgbnNDSUQgJiBhQ2xhc3MsIGNoYXIgKipf
cmV0dmFsKSA9IDA7CiMgMjE4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQ29tcG9u
ZW50UmVnaXN0cmFyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDb250cmFjdElEVG9DSUQoY29uc3Qg
Y2hhciAqYUNvbnRyYWN0SUQsIG5zQ0lEICogKl9yZXR2YWwpID0gMDsKCn07CiMgNDYgIm5zRE9N
Q2xhc3NJbmZvLmNwcCIgMgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU3Vw
cG9ydHNQcmltaXRpdmVzLmgiIDEKIyAzMyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25z
SVN1cHBvcnRzUHJpbWl0aXZlcy5oIgpjbGFzcyBuc0lTdXBwb3J0c1ByaW1pdGl2ZSA6IHB1Ymxp
YyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkg
e3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhkMGQ0YjEzNiwgMHgxZGQxLCAweDExYjIsIHsg
MHg5MywgMHg3MSwgMHhmMCwgMHg3MiwgMHg3ZSwgMHhmOCwgMHgyNywgMHhjMCB9fTsgcmV0dXJu
IGlpZDt9CgogIGVudW0geyBUWVBFX0lEID0gMVUgfTsKCiAgZW51bSB7IFRZUEVfQ1NUUklORyA9
IDJVIH07CgogIGVudW0geyBUWVBFX1NUUklORyA9IDNVIH07CgogIGVudW0geyBUWVBFX1BSQk9P
TCA9IDRVIH07CgogIGVudW0geyBUWVBFX1BSVUlOVDggPSA1VSB9OwoKICBlbnVtIHsgVFlQRV9Q
UlVJTlQxNiA9IDZVIH07CgogIGVudW0geyBUWVBFX1BSVUlOVDMyID0gN1UgfTsKCiAgZW51bSB7
IFRZUEVfUFJVSU5UNjQgPSA4VSB9OwoKICBlbnVtIHsgVFlQRV9QUlRJTUUgPSA5VSB9OwoKICBl
bnVtIHsgVFlQRV9DSEFSID0gMTBVIH07CgogIGVudW0geyBUWVBFX1BSSU5UMTYgPSAxMVUgfTsK
CiAgZW51bSB7IFRZUEVfUFJJTlQzMiA9IDEyVSB9OwoKICBlbnVtIHsgVFlQRV9QUklOVDY0ID0g
MTNVIH07CgogIGVudW0geyBUWVBFX0ZMT0FUID0gMTRVIH07CgogIGVudW0geyBUWVBFX0RPVUJM
RSA9IDE1VSB9OwoKICBlbnVtIHsgVFlQRV9WT0lEID0gMTZVIH07CgogIGVudW0geyBUWVBFX0lO
VEVSRkFDRV9QT0lOVEVSID0gMTdVIH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFR5cGUoUFJV
aW50MTYgKmFUeXBlKSA9IDA7Cgp9OwojIDEzOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29t
L25zSVN1cHBvcnRzUHJpbWl0aXZlcy5oIgpjbGFzcyBuc0lTdXBwb3J0c0lEIDogcHVibGljIG5z
SVN1cHBvcnRzUHJpbWl0aXZlIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJ
SUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGQxODI5MGEwLCAweDRhMWMsIDB4MTFk
MywgeyAweDk4LCAweDkwLCAweDAwLCAweDYwLCAweDA4LCAweDk2LCAweDI0LCAweDIyIH19OyBy
ZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGF0YShuc0lEICogKmFEYXRhKSA9
IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREYXRhKGNvbnN0IG5zSUQgKiBhRGF0YSkgPSAwOwoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBUb1N0cmluZyhjaGFyICoqX3JldHZhbCkgPSAwOwoKfTsKIyAy
MzEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c1ByaW1pdGl2ZXMuaCIK
Y2xhc3MgbnNJU3VwcG9ydHNDU3RyaW5nIDogcHVibGljIG5zSVN1cHBvcnRzUHJpbWl0aXZlIHsK
IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z
SUlEIGlpZCA9IHsweGQ2NWZmMjcwLCAweDRhMWMsIDB4MTFkMywgeyAweDk4LCAweDkwLCAweDAw
LCAweDYwLCAweDA4LCAweDk2LCAweDI0LCAweDIyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0RGF0YShuc0FDU3RyaW5nICYgYURhdGEpID0gMDsKICB2aXJ0dWFsIG5z
cmVzdWx0IFNldERhdGEoY29uc3QgbnNBQ1N0cmluZyAmIGFEYXRhKSA9IDA7CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDMyMyAiLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzUHJpbWl0aXZlcy5oIgpjbGFzcyBuc0lT
dXBwb3J0c1N0cmluZyA6IHB1YmxpYyBuc0lTdXBwb3J0c1ByaW1pdGl2ZSB7CiBwdWJsaWM6Cgog
IHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7
MHhkNzlkYzk3MCwgMHg0YTFjLCAweDExZDMsIHsgMHg5OCwgMHg5MCwgMHgwMCwgMHg2MCwgMHgw
OCwgMHg5NiwgMHgyNCwgMHgyMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldERhdGEobnNBU3RyaW5nICYgYURhdGEpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERh
dGEoY29uc3QgbnNBU3RyaW5nICYgYURhdGEpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgVG9T
dHJpbmcoUFJVbmljaGFyICoqX3JldHZhbCkgPSAwOwoKfTsKIyA0MTggIi4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c1ByaW1pdGl2ZXMuaCIKY2xhc3MgbnNJU3VwcG9ydHNQ
UkJvb2wgOiBwdWJsaWMgbnNJU3VwcG9ydHNQcmltaXRpdmUgewogcHVibGljOgoKICBzdGF0aWMg
Y29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZGRjM2I0
OTAsIDB4NGExYywgMHgxMWQzLCB7IDB4OTgsIDB4OTAsIDB4MDAsIDB4NjAsIDB4MDgsIDB4OTYs
IDB4MjQsIDB4MjIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREYXRh
KFBSQm9vbCAqYURhdGEpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERhdGEoUFJCb29sIGFE
YXRhKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFsKSA9
IDA7Cgp9OwojIDUxMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzUHJp
bWl0aXZlcy5oIgpjbGFzcyBuc0lTdXBwb3J0c1BSVWludDggOiBwdWJsaWMgbnNJU3VwcG9ydHNQ
cmltaXRpdmUgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0
aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZGVjMmU0ZTAsIDB4NGExYywgMHgxMWQzLCB7IDB4OTgs
IDB4OTAsIDB4MDAsIDB4NjAsIDB4MDgsIDB4OTYsIDB4MjQsIDB4MjIgfX07IHJldHVybiBpaWQ7
fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREYXRhKFBSVWludDggKmFEYXRhKSA9IDA7CiAgdmly
dHVhbCBuc3Jlc3VsdCBTZXREYXRhKFBSVWludDggYURhdGEpID0gMDsKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgVG9TdHJpbmcoY2hhciAqKl9yZXR2YWwpID0gMDsKCn07CiMgNjAyICIuLi8uLi8uLi9k
aXN0L2luY2x1ZGUveHBjb20vbnNJU3VwcG9ydHNQcmltaXRpdmVzLmgiCmNsYXNzIG5zSVN1cHBv
cnRzUFJVaW50MTYgOiBwdWJsaWMgbnNJU3VwcG9ydHNQcmltaXRpdmUgewogcHVibGljOgoKICBz
dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4
ZGZhY2IwOTAsIDB4NGExYywgMHgxMWQzLCB7IDB4OTgsIDB4OTAsIDB4MDAsIDB4NjAsIDB4MDgs
IDB4OTYsIDB4MjQsIDB4MjIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXREYXRhKFBSVWludDE2ICphRGF0YSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGF0YShQ
UlVpbnQxNiBhRGF0YSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUb1N0cmluZyhjaGFyICoq
X3JldHZhbCkgPSAwOwoKfTsKIyA2OTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lT
dXBwb3J0c1ByaW1pdGl2ZXMuaCIKY2xhc3MgbnNJU3VwcG9ydHNQUlVpbnQzMiA6IHB1YmxpYyBu
c0lTdXBwb3J0c1ByaW1pdGl2ZSB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0
SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhlMDFkYzQ3MCwgMHg0YTFjLCAweDEx
ZDMsIHsgMHg5OCwgMHg5MCwgMHgwMCwgMHg2MCwgMHgwOCwgMHg5NiwgMHgyNCwgMHgyMiB9fTsg
cmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERhdGEoUFJVaW50MzIgKmFEYXRh
KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREYXRhKFBSVWludDMyIGFEYXRhKSA9IDA7CgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDc4
NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN1cHBvcnRzUHJpbWl0aXZlcy5oIgpj
bGFzcyBuc0lTdXBwb3J0c1BSVWludDY0IDogcHVibGljIG5zSVN1cHBvcnRzUHJpbWl0aXZlIHsK
IHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5z
SUlEIGlpZCA9IHsweGUxMzU2N2MwLCAweDRhMWMsIDB4MTFkMywgeyAweDk4LCAweDkwLCAweDAw
LCAweDYwLCAweDA4LCAweDk2LCAweDI0LCAweDIyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0RGF0YShQUlVpbnQ2NCAqYURhdGEpID0gMDsKICB2aXJ0dWFsIG5zcmVz
dWx0IFNldERhdGEoUFJVaW50NjQgYURhdGEpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgVG9T
dHJpbmcoY2hhciAqKl9yZXR2YWwpID0gMDsKCn07CiMgODc4ICIuLi8uLi8uLi9kaXN0L2luY2x1
ZGUveHBjb20vbnNJU3VwcG9ydHNQcmltaXRpdmVzLmgiCmNsYXNzIG5zSVN1cHBvcnRzUFJUaW1l
IDogcHVibGljIG5zSVN1cHBvcnRzUHJpbWl0aXZlIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0
IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGUyNTYzNjMwLCAw
eDRhMWMsIDB4MTFkMywgeyAweDk4LCAweDkwLCAweDAwLCAweDYwLCAweDA4LCAweDk2LCAweDI0
LCAweDIyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGF0YShQUlRp
bWUgKmFEYXRhKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREYXRhKFBSVGltZSBhRGF0YSkg
PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUb1N0cmluZyhjaGFyICoqX3JldHZhbCkgPSAwOwoK
fTsKIyA5NzEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c1ByaW1pdGl2
ZXMuaCIKY2xhc3MgbnNJU3VwcG9ydHNDaGFyIDogcHVibGljIG5zSVN1cHBvcnRzUHJpbWl0aXZl
IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0
IG5zSUlEIGlpZCA9IHsweGUyYjA1ZTQwLCAweDRhMWMsIDB4MTFkMywgeyAweDk4LCAweDkwLCAw
eDAwLCAweDYwLCAweDA4LCAweDk2LCAweDI0LCAweDIyIH19OyByZXR1cm4gaWlkO30KCgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0RGF0YShjaGFyICphRGF0YSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1
bHQgU2V0RGF0YShjaGFyIGFEYXRhKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRvU3RyaW5n
KGNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDEwNjMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94
cGNvbS9uc0lTdXBwb3J0c1ByaW1pdGl2ZXMuaCIKY2xhc3MgbnNJU3VwcG9ydHNQUkludDE2IDog
cHVibGljIG5zSVN1cHBvcnRzUHJpbWl0aXZlIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5z
SUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGUzMGQ5NGIwLCAweDRh
MWMsIDB4MTFkMywgeyAweDk4LCAweDkwLCAweDAwLCAweDYwLCAweDA4LCAweDk2LCAweDI0LCAw
eDIyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGF0YShQUkludDE2
ICphRGF0YSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGF0YShQUkludDE2IGFEYXRhKSA9
IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9
OwojIDExNTUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c1ByaW1pdGl2
ZXMuaCIKY2xhc3MgbnNJU3VwcG9ydHNQUkludDMyIDogcHVibGljIG5zSVN1cHBvcnRzUHJpbWl0
aXZlIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNv
bnN0IG5zSUlEIGlpZCA9IHsweGUzNmM1MjUwLCAweDRhMWMsIDB4MTFkMywgeyAweDk4LCAweDkw
LCAweDAwLCAweDYwLCAweDA4LCAweDk2LCAweDI0LCAweDIyIH19OyByZXR1cm4gaWlkO30KCgog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0RGF0YShQUkludDMyICphRGF0YSkgPSAwOwogIHZpcnR1YWwg
bnNyZXN1bHQgU2V0RGF0YShQUkludDMyIGFEYXRhKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDEyNDcgIi4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c1ByaW1pdGl2ZXMuaCIKY2xhc3MgbnNJU3VwcG9ydHNQ
UkludDY0IDogcHVibGljIG5zSVN1cHBvcnRzUHJpbWl0aXZlIHsKIHB1YmxpYzoKCiAgc3RhdGlj
IGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGUzY2Iw
ZmYwLCAweDRhMWMsIDB4MTFkMywgeyAweDk4LCAweDkwLCAweDAwLCAweDYwLCAweDA4LCAweDk2
LCAweDI0LCAweDIyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGF0
YShQUkludDY0ICphRGF0YSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RGF0YShQUkludDY0
IGFEYXRhKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFs
KSA9IDA7Cgp9OwojIDEzMzkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0
c1ByaW1pdGl2ZXMuaCIKY2xhc3MgbnNJU3VwcG9ydHNGbG9hdCA6IHB1YmxpYyBuc0lTdXBwb3J0
c1ByaW1pdGl2ZSB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0
YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhYmVhYTM5MCwgMHg0YWMwLCAweDExZDMsIHsgMHhi
YSwgMHhlYSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHg1ZCwgMHhkNyB9fTsgcmV0dXJuIGlp
ZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERhdGEoZmxvYXQgKmFEYXRhKSA9IDA7CiAgdmly
dHVhbCBuc3Jlc3VsdCBTZXREYXRhKGZsb2F0IGFEYXRhKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz
dWx0IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDE0MzEgIi4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0c1ByaW1pdGl2ZXMuaCIKY2xhc3MgbnNJU3VwcG9y
dHNEb3VibGUgOiBwdWJsaWMgbnNJU3VwcG9ydHNQcmltaXRpdmUgewogcHVibGljOgoKICBzdGF0
aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YjMy
NTIzYTAsIDB4NGFjMCwgMHgxMWQzLCB7IDB4YmEsIDB4ZWEsIDB4MDAsIDB4ODAsIDB4NWYsIDB4
OGEsIDB4NWQsIDB4ZDcgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRE
YXRhKGRvdWJsZSAqYURhdGEpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldERhdGEoZG91Ymxl
IGFEYXRhKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFs
KSA9IDA7Cgp9OwojIDE1MjMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdXBwb3J0
c1ByaW1pdGl2ZXMuaCIKY2xhc3MgbnNJU3VwcG9ydHNWb2lkIDogcHVibGljIG5zSVN1cHBvcnRz
UHJpbWl0aXZlIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3Rh
dGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDQ2NDQ4NGYwLCAweDU2OGQsIDB4MTFkMywgeyAweGJh
LCAweGY4LCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweDVkLCAweGQ3IH19OyByZXR1cm4gaWlk
O30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGF0YSh2b2lkICogKmFEYXRhKSA9IDA7CiAgdmly
dHVhbCBuc3Jlc3VsdCBTZXREYXRhKHZvaWQgKiBhRGF0YSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBUb1N0cmluZyhjaGFyICoqX3JldHZhbCkgPSAwOwoKfTsKIyAxNjE1ICIuLi8uLi8uLi9k
aXN0L2luY2x1ZGUveHBjb20vbnNJU3VwcG9ydHNQcmltaXRpdmVzLmgiCmNsYXNzIG5zSVN1cHBv
cnRzSW50ZXJmYWNlUG9pbnRlciA6IHB1YmxpYyBuc0lTdXBwb3J0c1ByaW1pdGl2ZSB7CiBwdWJs
aWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBp
aWQgPSB7MHg5OTVlYTcyNCwgMHgxZGQxLCAweDExYjIsIHsgMHg5MiwgMHgxMSwgMHhjMiwgMHgx
YiwgMHhkZCwgMHgzZSwgMHg3ZSwgMHhkMCB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldERhdGEobnNJU3VwcG9ydHMgKiAqYURhdGEpID0gMDsKICB2aXJ0dWFsIG5zcmVz
dWx0IFNldERhdGEobnNJU3VwcG9ydHMgKiBhRGF0YSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXREYXRhSUlEKG5zSUQgKiAqYURhdGFJSUQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNl
dERhdGFJSUQoY29uc3QgbnNJRCAqIGFEYXRhSUlEKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IFRvU3RyaW5nKGNoYXIgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDQ4ICJuc0RPTUNsYXNzSW5mby5j
cHAiIDIKCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29ubmVjdC9uc0lKU0NvbnRleHRT
dGFjay5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbm5lY3QvbnNJSlNDb250
ZXh0U3RhY2suaCIKY2xhc3MgbnNJSlNDb250ZXh0U3RhY2sgOiBwdWJsaWMgbnNJU3VwcG9ydHMg
ewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg
bnNJSUQgaWlkID0gezB4YzY3ZDgyNzAsIDB4MzE4OSwgMHgxMWQzLCB7IDB4OTgsIDB4ODUsIDB4
MDAsIDB4NjAsIDB4MDgsIDB4OTYsIDB4MjQsIDB4MjIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRDb3VudChQUkludDMyICphQ291bnQpID0gMDsKCgogIHZpcnR1YWwg
bnNyZXN1bHQgUGVlayhKU0NvbnRleHQgKiAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBQb3AoSlNDb250ZXh0ICogKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
UHVzaChKU0NvbnRleHQgKiBjeCkgPSAwOwoKfTsKIyAxMjggIi4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS94cGNvbm5lY3QvbnNJSlNDb250ZXh0U3RhY2suaCIKY2xhc3MgbnNJVGhyZWFkSlNDb250ZXh0
U3RhY2sgOiBwdWJsaWMgbnNJSlNDb250ZXh0U3RhY2sgewogcHVibGljOgoKICBzdGF0aWMgY29u
c3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTEzMzlhZTAs
IDB4MDVjMSwgMHgxMWQ0LCB7IDB4OGYsIDB4OTIsIDB4MDAsIDB4MTAsIDB4YTQsIDB4ZTcsIDB4
M2QsIDB4OWEgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTYWZlSlND
b250ZXh0KEpTQ29udGV4dCAqICphU2FmZUpTQ29udGV4dCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1
bHQgU2V0U2FmZUpTQ29udGV4dChKU0NvbnRleHQgKiBhU2FmZUpTQ29udGV4dCkgPSAwOwoKfTsK
IyA1MCAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2Rv
bS9uc0lTY3JpcHRDb250ZXh0LmgiIDEKIyA0NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9u
c0lTY3JpcHRDb250ZXh0LmgiCmNsYXNzIG5zSVNjcmlwdEdsb2JhbE9iamVjdDsKY2xhc3MgbnNJ
U2NyaXB0U2VjdXJpdHlNYW5hZ2VyOwpjbGFzcyBuc0lTY3JpcHRDb250ZXh0T3duZXI7CmNsYXNz
IG5zSVByaW5jaXBhbDsKY2xhc3MgbnNJQXRvbTsKCnR5cGVkZWYgdm9pZCAoKm5zU2NyaXB0VGVy
bWluYXRpb25GdW5jKShuc0lTdXBwb3J0cyogYVJlZik7CiMgNjYgIi4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9kb20vbnNJU2NyaXB0Q29udGV4dC5oIgpjbGFzcyBuc0lTY3JpcHRDb250ZXh0IDogcHVi
bGljIG5zSVN1cHBvcnRzIHsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkg
e3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4OGY2YmNhN2QsIDB4Y2U0MiwgMHgxMWQxLCB7
MHhiNywgMHgyNCwgMHgwMCwgMHg2MCwgMHgwOCwgMHg5MSwgMHhkOCwgMHhjOX0gfTsgcmV0dXJu
IGlpZDt9CiMgODcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJU2NyaXB0Q29udGV4dC5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgRXZhbHVhdGVTdHJpbmcoY29uc3QgbnNBU3RyaW5nJiBhU2Ny
aXB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYVNjb3BlT2JqZWN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJpbmNpcGFsICphUHJpbmNpcGFsLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYVVSTCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBSVWludDMyIGFMaW5lTm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBhVmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zQVN0cmlu
ZyYgYVJldFZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sKiBhSXNVbmRl
ZmluZWQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBFdmFsdWF0ZVN0cmluZ1dpdGhWYWx1ZShj
b25zdCBuc0FTdHJpbmcmIGFTY3JpcHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2b2lkICphU2NvcGVPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0lQcmluY2lwYWwgKmFQcmluY2lwYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICphVVJMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJVaW50MzIgYUxpbmVObywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGFWZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdm9pZCogYVJldFZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJCb29sKiBhSXNVbmRlZmluZWQpID0gMDsKIyAxMjMgIi4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9kb20vbnNJU2NyaXB0Q29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ29tcGlsZVNj
cmlwdChjb25zdCBQUlVuaWNoYXIqIGFUZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBQ
UkludDMyIGFUZXh0TGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhU2Nv
cGVPYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByaW5jaXBhbCogYVByaW5j
aXBhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYVVSTCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUxpbmVObywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogYVZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZvaWQqKiBhU2NyaXB0T2JqZWN0KSA9IDA7CiMgMTQ2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv
ZG9tL25zSVNjcmlwdENvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEV4ZWN1dGVTY3JpcHQo
dm9pZCogYVNjcmlwdE9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYVNj
b3BlT2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBuc0FTdHJpbmcqIGFSZXRWYWx1
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJCb29sKiBhSXNVbmRlZmluZWQpID0gMDsK
IyAxNzMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJU2NyaXB0Q29udGV4dC5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgQ29tcGlsZUV2ZW50SGFuZGxlcih2b2lkKiBhVGFyZ2V0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhTmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgbnNBU3RyaW5nJiBhQm9keSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJCb29sIGFTaGFyZWQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQqKiBhSGFuZGxlcikgPSAwOwojIDE5MSAiLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL2RvbS9uc0lTY3JpcHRDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDYWxsRXZlbnRI
YW5kbGVyKHZvaWQqIGFUYXJnZXQsIHZvaWQqIGFIYW5kbGVyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQUlVpbnQzMiBhcmdjLCB2b2lkKiBhcmd2LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQUkJvb2wqIGFCb29sUmVzdWx0LCBQUkJvb2wgYVJldmVyc2VSZXR1cm5SZXN1
bHQpID0gMDsKIyAyMTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJU2NyaXB0Q29udGV4
dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQmluZENvbXBpbGVkRXZlbnRIYW5kbGVyKHZvaWQqIGFU
YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYU5h
bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYUhhbmRsZXIp
ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBDb21waWxlRnVuY3Rpb24odm9pZCogYVRhcmdldCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0NTdHJpbmcmIGFOYW1lLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFBcmdDb3VudCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiogYUFyZ0FycmF5LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYUJvZHksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogYVVSTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
UlVpbnQzMiBhTGluZU5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhU2hh
cmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqKiBhRnVuY3Rpb25PYmplY3Qp
ID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0TGFuZ3VhZ2VWZXJzaW9u
KGNvbnN0IGNoYXIqIGFWZXJzaW9uKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEds
b2JhbE9iamVjdChuc0lTY3JpcHRHbG9iYWxPYmplY3QqKiBhR2xvYmFsT2JqZWN0KSA9IDA7CgoK
CgoKICB2aXJ0dWFsIHZvaWQqIEdldE5hdGl2ZUNvbnRleHQoKSA9IDA7CiMgMjUzICIuLi8uLi8u
Li9kaXN0L2luY2x1ZGUvZG9tL25zSVNjcmlwdENvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0
IEluaXRDb250ZXh0KG5zSVNjcmlwdEdsb2JhbE9iamVjdCAqYUdsb2JhbE9iamVjdCkgPSAwOwoj
IDI2MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lTY3JpcHRDb250ZXh0LmgiCiAgdmly
dHVhbCBuc3Jlc3VsdCBJc0NvbnRleHRJbml0aWFsaXplZCgpID0gMDsKCgoKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBHQygpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2VjdXJpdHlN
YW5hZ2VyKG5zSVNjcmlwdFNlY3VyaXR5TWFuYWdlcioqIGFJbnN0YW5jZVB0cikgPSAwOwojIDI5
MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lTY3JpcHRDb250ZXh0LmgiCiAgdmlydHVh
bCBuc3Jlc3VsdCBTY3JpcHRFdmFsdWF0ZWQoUFJCb29sIGFUZXJtaW5hdGVkKSA9IDA7CgoKCgoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0T3duZXIobnNJU2NyaXB0Q29udGV4dE93bmVyKiBvd25l
cikgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE93bmVyKG5zSVNjcmlwdENvbnRl
eHRPd25lcioqIG93bmVyKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VGVybWlu
YXRpb25GdW5jdGlvbihuc1NjcmlwdFRlcm1pbmF0aW9uRnVuYyBhRnVuYywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqIGFSZWYpID0gMDsKCgoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRTY3JpcHRzRW5hYmxlZChQUkJvb2wgKmFFbmFibGVkKSA9IDA7CiAg
dmlydHVhbCBuc3Jlc3VsdCBTZXRTY3JpcHRzRW5hYmxlZChQUkJvb2wgYUVuYWJsZWQsIFBSQm9v
bCBhRmlyZVRpbWVvdXRzKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb2Nlc3Np
bmdTY3JpcHRUYWcoUFJCb29sICogYVJlc3VsdCkgPTA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQ
cm9jZXNzaW5nU2NyaXB0VGFnKFBSQm9vbCBhUmVzdWx0KSA9MDsKCgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBTZXRHQ09uRGVzdHJ1Y3Rpb24oUFJCb29sIGFHQ09uRGVzdHJ1Y3Rpb24pID0gMDsKfTsK
IyA1MSAibnNET01DbGFzc0luZm8uY3BwIiAyCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv
c3RyaW5nL25zUmVhZGFibGVVdGlscy5oIiAxCiMgMzkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9z
dHJpbmcvbnNSZWFkYWJsZVV0aWxzLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmlu
Zy9uc0FTdHJpbmdHZW5lcmF0b3IuaCIgMQojIDM5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3Ry
aW5nL25zQVN0cmluZ0dlbmVyYXRvci5oIgpjbGFzcyBuc0FTdHJpbmc7CmNsYXNzIG5zQUNTdHJp
bmc7CgpjbGFzcyBuc0FTdHJpbmdHZW5lcmF0b3IKICB7CiAgICBwdWJsaWM6CiAgICAgIHZpcnR1
YWwgfm5zQVN0cmluZ0dlbmVyYXRvcigpIHsgfQoKICAgICAgdmlydHVhbCBQUlVuaWNoYXIqIG9w
ZXJhdG9yKCkoIFBSVW5pY2hhciogYURlc3RCdWZmZXIgKSBjb25zdCA9IDA7CiAgICAgIHZpcnR1
YWwgUFJVaW50MzIgTGVuZ3RoKCkgY29uc3QgPSAwOwogICAgICB2aXJ0dWFsIFBSVWludDMyIE1h
eExlbmd0aCgpIGNvbnN0ID0gMDsKICAgICAgdmlydHVhbCBQUkJvb2wgSXNEZXBlbmRlbnRPbigg
Y29uc3QgbnNBU3RyaW5nJiApIGNvbnN0ID0gMDsKICB9OwoKY2xhc3MgbnNBQ1N0cmluZ0dlbmVy
YXRvcgogIHsKICAgIHB1YmxpYzoKICAgICAgdmlydHVhbCB+bnNBQ1N0cmluZ0dlbmVyYXRvcigp
IHsgfQoKICAgICAgdmlydHVhbCBjaGFyKiBvcGVyYXRvcigpKCBjaGFyKiBhRGVzdEJ1ZmZlciAp
IGNvbnN0ID0gMDsKICAgICAgdmlydHVhbCBQUlVpbnQzMiBMZW5ndGgoKSBjb25zdCA9IDA7CiAg
ICAgIHZpcnR1YWwgUFJVaW50MzIgTWF4TGVuZ3RoKCkgY29uc3QgPSAwOwogICAgICB2aXJ0dWFs
IFBSQm9vbCBJc0RlcGVuZGVudE9uKCBjb25zdCBuc0FDU3RyaW5nJiApIGNvbnN0ID0gMDsKICB9
OwojIDQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25zUmVhZGFibGVVdGlscy5oIiAy
CgoKY2xhc3MgbnNBU2luZ2xlRnJhZ21lbnRDU3RyaW5nOwpjbGFzcyBuc0NTdHJpbmc7Cgogc2l6
ZV90IERpc3RhbmNlKCBjb25zdCBuc0FTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJiwgY29uc3QgbnNB
U3RyaW5nOjpjb25zdF9pdGVyYXRvciYgKTsKIHNpemVfdCBEaXN0YW5jZSggY29uc3QgbnNBQ1N0
cmluZzo6Y29uc3RfaXRlcmF0b3ImLCBjb25zdCBuc0FDU3RyaW5nOjpjb25zdF9pdGVyYXRvciYg
KTsKCgogdm9pZCBDb3B5VUNTMnRvQVNDSUkoIGNvbnN0IG5zQVN0cmluZyYgYVNvdXJjZSwgbnNB
Q1N0cmluZyYgYURlc3QgKTsKIHZvaWQgQ29weUFTQ0lJdG9VQ1MyKCBjb25zdCBuc0FDU3RyaW5n
JiBhU291cmNlLCBuc0FTdHJpbmcmIGFEZXN0ICk7CiMgNjMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9zdHJpbmcvbnNSZWFkYWJsZVV0aWxzLmgiCiBjaGFyKiBUb05ld0NTdHJpbmcoIGNvbnN0IG5z
QVN0cmluZyYgYVNvdXJjZSApOwojIDc1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5nL25z
UmVhZGFibGVVdGlscy5oIgogY2hhciogVG9OZXdDU3RyaW5nKCBjb25zdCBuc0FDU3RyaW5nJiBh
U291cmNlICk7CiMgODggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNSZWFkYWJsZVV0
aWxzLmgiCiBjaGFyKiBUb05ld1VURjhTdHJpbmcoIGNvbnN0IG5zQVN0cmluZyYgYVNvdXJjZSAp
OwojIDEwMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1JlYWRhYmxlVXRpbHMuaCIK
IFBSVW5pY2hhciogVG9OZXdVbmljb2RlKCBjb25zdCBuc0FTdHJpbmcmIGFTb3VyY2UgKTsKIyAx
MTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9zdHJpbmcvbnNSZWFkYWJsZVV0aWxzLmgiCiBQUlVu
aWNoYXIqIFRvTmV3VW5pY29kZSggY29uc3QgbnNBQ1N0cmluZyYgYVNvdXJjZSApOwojIDEyOCAi
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmluZy9uc1JlYWRhYmxlVXRpbHMuaCIKIFBSVW5pY2hh
ciogQ29weVVuaWNvZGVUbyggY29uc3QgbnNBU3RyaW5nJiBhU291cmNlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhU3JjT2Zmc2V0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUlVuaWNoYXIqIGFEZXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQUlVpbnQzMiBhTGVuZ3RoICk7CiMgMTQ1ICIuLi8uLi8uLi9kaXN0L2luY2x1
ZGUvc3RyaW5nL25zUmVhZGFibGVVdGlscy5oIgogdm9pZCBDb3B5VW5pY29kZVRvKCBjb25zdCBu
c0FTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJiBhU3JjU3RhcnQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IG5zQVN0cmluZzo6Y29uc3RfaXRlcmF0b3ImIGFTcmNFbmQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zQVN0cmluZyYgYURlc3QgKTsKIyAxNTkgIi4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9zdHJpbmcvbnNSZWFkYWJsZVV0aWxzLmgiCiB2b2lkIEFwcGVuZFVuaWNvZGVU
byggY29uc3QgbnNBU3RyaW5nOjpjb25zdF9pdGVyYXRvciYgYVNyY1N0YXJ0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZzo6Y29uc3RfaXRlcmF0b3ImIGFTcmNF
bmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNBU3RyaW5nJiBhRGVzdCApOwoKCgoK
CgogUFJCb29sIElzQVNDSUkoIGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZyApOwoKCgoKCgogUFJC
b29sIElzQVNDSUkoIGNvbnN0IG5zQUNTdHJpbmcmIGFTdHJpbmcgKTsKCgoKCgoKIHZvaWQgVG9V
cHBlckNhc2UoIG5zQUNTdHJpbmcmICk7Cgogdm9pZCBUb0xvd2VyQ2FzZSggbnNBQ1N0cmluZyYg
KTsKCiB2b2lkIFRvVXBwZXJDYXNlKCBuc0FTaW5nbGVGcmFnbWVudENTdHJpbmcmICk7Cgogdm9p
ZCBUb0xvd2VyQ2FzZSggbnNBU2luZ2xlRnJhZ21lbnRDU3RyaW5nJiApOwoKIHZvaWQgVG9VcHBl
ckNhc2UoIG5zQ1N0cmluZyYgKTsKCiB2b2lkIFRvTG93ZXJDYXNlKCBuc0NTdHJpbmcmICk7CgoK
Cgogdm9pZCBUb1VwcGVyQ2FzZSggY29uc3QgbnNBQ1N0cmluZyYgYVNvdXJjZSwgbnNBQ1N0cmlu
ZyYgYURlc3QgKTsKCiB2b2lkIFRvTG93ZXJDYXNlKCBjb25zdCBuc0FDU3RyaW5nJiBhU291cmNl
LCBuc0FDU3RyaW5nJiBhRGVzdCApOwojIDIxMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3N0cmlu
Zy9uc1JlYWRhYmxlVXRpbHMuaCIKIFBSQm9vbCBGaW5kSW5SZWFkYWJsZSggY29uc3QgbnNBU3Ry
aW5nJiBhUGF0dGVybiwgbnNBU3RyaW5nOjpjb25zdF9pdGVyYXRvciYsIG5zQVN0cmluZzo6Y29u
c3RfaXRlcmF0b3ImLCBjb25zdCBuc1N0cmluZ0NvbXBhcmF0b3ImID0gbnNEZWZhdWx0U3RyaW5n
Q29tcGFyYXRvcigpICk7CiBQUkJvb2wgRmluZEluUmVhZGFibGUoIGNvbnN0IG5zQUNTdHJpbmcm
IGFQYXR0ZXJuLCBuc0FDU3RyaW5nOjpjb25zdF9pdGVyYXRvciYsIG5zQUNTdHJpbmc6OmNvbnN0
X2l0ZXJhdG9yJiwgY29uc3QgbnNDU3RyaW5nQ29tcGFyYXRvciYgPSBuc0RlZmF1bHRDU3RyaW5n
Q29tcGFyYXRvcigpICk7CgoKCmlubGluZSBQUkJvb2wgRmluZEluUmVhZGFibGUoIGNvbnN0IG5z
QVN0cmluZyYgYVBhdHRlcm4sIGNvbnN0IG5zQVN0cmluZyYgYVNvdXJjZSwgY29uc3QgbnNTdHJp
bmdDb21wYXJhdG9yJiBjb21wYXJlID0gbnNEZWZhdWx0U3RyaW5nQ29tcGFyYXRvcigpICkKewog
IG5zQVN0cmluZzo6Y29uc3RfaXRlcmF0b3Igc3RhcnQsIGVuZDsKICBhU291cmNlLkJlZ2luUmVh
ZGluZyhzdGFydCk7CiAgYVNvdXJjZS5FbmRSZWFkaW5nKGVuZCk7CiAgcmV0dXJuIEZpbmRJblJl
YWRhYmxlKGFQYXR0ZXJuLCBzdGFydCwgZW5kLCBjb21wYXJlKTsKfQoKaW5saW5lIFBSQm9vbCBG
aW5kSW5SZWFkYWJsZSggY29uc3QgbnNBQ1N0cmluZyYgYVBhdHRlcm4sIGNvbnN0IG5zQUNTdHJp
bmcmIGFTb3VyY2UsIGNvbnN0IG5zQ1N0cmluZ0NvbXBhcmF0b3ImIGNvbXBhcmUgPSBuc0RlZmF1
bHRDU3RyaW5nQ29tcGFyYXRvcigpICkKewogIG5zQUNTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yIHN0
YXJ0LCBlbmQ7CiAgYVNvdXJjZS5CZWdpblJlYWRpbmcoc3RhcnQpOwogIGFTb3VyY2UuRW5kUmVh
ZGluZyhlbmQpOwogIHJldHVybiBGaW5kSW5SZWFkYWJsZShhUGF0dGVybiwgc3RhcnQsIGVuZCwg
Y29tcGFyZSk7Cn0KCgogUFJCb29sIENhc2VJbnNlbnNpdGl2ZUZpbmRJblJlYWRhYmxlKCBjb25z
dCBuc0FDU3RyaW5nJiBhUGF0dGVybiwgbnNBQ1N0cmluZzo6Y29uc3RfaXRlcmF0b3ImLCBuc0FD
U3RyaW5nOjpjb25zdF9pdGVyYXRvciYgKTsKIyAyNDMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9z
dHJpbmcvbnNSZWFkYWJsZVV0aWxzLmgiCiBQUkJvb2wgUkZpbmRJblJlYWRhYmxlKCBjb25zdCBu
c0FTdHJpbmcmIGFQYXR0ZXJuLCBuc0FTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJiwgbnNBU3RyaW5n
Ojpjb25zdF9pdGVyYXRvciYsIGNvbnN0IG5zU3RyaW5nQ29tcGFyYXRvciYgPSBuc0RlZmF1bHRT
dHJpbmdDb21wYXJhdG9yKCkgKTsKIFBSQm9vbCBSRmluZEluUmVhZGFibGUoIGNvbnN0IG5zQUNT
dHJpbmcmIGFQYXR0ZXJuLCBuc0FDU3RyaW5nOjpjb25zdF9pdGVyYXRvciYsIG5zQUNTdHJpbmc6
OmNvbnN0X2l0ZXJhdG9yJiwgY29uc3QgbnNDU3RyaW5nQ29tcGFyYXRvciYgPSBuc0RlZmF1bHRD
U3RyaW5nQ29tcGFyYXRvcigpICk7CiMgMjU0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvc3RyaW5n
L25zUmVhZGFibGVVdGlscy5oIgogUFJCb29sIEZpbmRDaGFySW5SZWFkYWJsZSggUFJVbmljaGFy
IGFDaGFyLCBuc0FTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJiBhU2VhcmNoU3RhcnQsIGNvbnN0IG5z
QVN0cmluZzo6Y29uc3RfaXRlcmF0b3ImIGFTZWFyY2hFbmQgKTsKIFBSQm9vbCBGaW5kQ2hhcklu
UmVhZGFibGUoIGNoYXIgYUNoYXIsIG5zQUNTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJiBhU2VhcmNo
U3RhcnQsIGNvbnN0IG5zQUNTdHJpbmc6OmNvbnN0X2l0ZXJhdG9yJiBhU2VhcmNoRW5kICk7CgoK
CgogUFJVaW50MzIgQ291bnRDaGFySW5SZWFkYWJsZSggY29uc3QgbnNBU3RyaW5nJiBhU3RyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVbmljaGFyIGFDaGFyICk7CiBQ
UlVpbnQzMiBDb3VudENoYXJJblJlYWRhYmxlKCBjb25zdCBuc0FDU3RyaW5nJiBhU3RyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBhQ2hhciApOwoKIFBSVWludDMy
IEhhc2hTdHJpbmcoIGNvbnN0IG5zQVN0cmluZyYgYVN0ciApOwogUFJVaW50MzIgSGFzaFN0cmlu
ZyggY29uc3QgbnNBQ1N0cmluZyYgYVN0ciApOwojIDI3NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L3N0cmluZy9uc1JlYWRhYmxlVXRpbHMuaCIKY2xhc3MgbnNTdWJzdGl0dXRlU3RyaW5nCiAgICA6
IHB1YmxpYyBuc0FTdHJpbmdHZW5lcmF0b3IKICB7CiAgICBwdWJsaWM6CiAgICAgIG5zU3Vic3Rp
dHV0ZVN0cmluZyggY29uc3QgbnNBU3RyaW5nJiBhVGV4dCwgY29uc3QgbnNBU3RyaW5nJiBhUGF0
dGVybiwgY29uc3QgbnNBU3RyaW5nJiBhUmVwbGFjZW1lbnQgKQogICAgICAgICAgOiBtVGV4dChh
VGV4dCksCiAgICAgICAgICAgIG1QYXR0ZXJuKGFQYXR0ZXJuKSwKICAgICAgICAgICAgbVJlcGxh
Y2VtZW50KGFSZXBsYWNlbWVudCksCiAgICAgICAgICAgIG1OdW1iZXJPZk1hdGNoZXMoLTEpCiAg
ICAgICAgewoKICAgICAgICB9CgogICAgICB2aXJ0dWFsIFBSVW5pY2hhciogb3BlcmF0b3IoKSgg
UFJVbmljaGFyKiBhRGVzdEJ1ZmZlciApIGNvbnN0OwogICAgICB2aXJ0dWFsIFBSVWludDMyIExl
bmd0aCgpIGNvbnN0OwogICAgICB2aXJ0dWFsIFBSVWludDMyIE1heExlbmd0aCgpIGNvbnN0Owog
ICAgICB2aXJ0dWFsIFBSQm9vbCBJc0RlcGVuZGVudE9uKCBjb25zdCBuc0FTdHJpbmcmICkgY29u
c3Q7CgogICAgcHJpdmF0ZToKICAgICAgdm9pZCBDb3VudE1hdGNoZXMoKSBjb25zdDsKCiAgICBw
cml2YXRlOgogICAgICBjb25zdCBuc0FTdHJpbmcmIG1UZXh0OwogICAgICBjb25zdCBuc0FTdHJp
bmcmIG1QYXR0ZXJuOwogICAgICBjb25zdCBuc0FTdHJpbmcmIG1SZXBsYWNlbWVudDsKICAgICAg
ICAgICAgICAgICAgICBQUkludDMyIG1OdW1iZXJPZk1hdGNoZXM7CiAgfTsKCmNsYXNzIG5zU3Vi
c3RpdHV0ZUNTdHJpbmcKICAgIDogcHVibGljIG5zQUNTdHJpbmdHZW5lcmF0b3IKICB7CiAgICBw
dWJsaWM6CiAgICAgIG5zU3Vic3RpdHV0ZUNTdHJpbmcoIGNvbnN0IG5zQUNTdHJpbmcmIGFUZXh0
LCBjb25zdCBuc0FDU3RyaW5nJiBhUGF0dGVybiwgY29uc3QgbnNBQ1N0cmluZyYgYVJlcGxhY2Vt
ZW50ICkKICAgICAgICAgIDogbVRleHQoYVRleHQpLAogICAgICAgICAgICBtUGF0dGVybihhUGF0
dGVybiksCiAgICAgICAgICAgIG1SZXBsYWNlbWVudChhUmVwbGFjZW1lbnQpLAogICAgICAgICAg
ICBtTnVtYmVyT2ZNYXRjaGVzKC0xKQogICAgICAgIHsKCiAgICAgICAgfQoKICAgICAgdmlydHVh
bCBjaGFyKiBvcGVyYXRvcigpKCBjaGFyKiBhRGVzdEJ1ZmZlciApIGNvbnN0OwogICAgICB2aXJ0
dWFsIFBSVWludDMyIExlbmd0aCgpIGNvbnN0OwogICAgICB2aXJ0dWFsIFBSVWludDMyIE1heExl
bmd0aCgpIGNvbnN0OwogICAgICB2aXJ0dWFsIFBSQm9vbCBJc0RlcGVuZGVudE9uKCBjb25zdCBu
c0FDU3RyaW5nJiApIGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgIHZvaWQgQ291bnRNYXRjaGVz
KCkgY29uc3Q7CgogICAgcHJpdmF0ZToKICAgICAgY29uc3QgbnNBQ1N0cmluZyYgbVRleHQ7CiAg
ICAgIGNvbnN0IG5zQUNTdHJpbmcmIG1QYXR0ZXJuOwogICAgICBjb25zdCBuc0FDU3RyaW5nJiBt
UmVwbGFjZW1lbnQ7CiAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBtTnVtYmVyT2ZNYXRjaGVz
OwogIH07CiMgNTQgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS94cGNvbS94cHRjYWxsLmgiIDEKIyA4MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29t
L3hwdGNhbGwuaCIKc3RydWN0IG5zWFBUQ01pbmlWYXJpYW50CnsKCgogICAgdW5pb24KICAgIHsK
ICAgICAgICBQUkludDggaTg7CiAgICAgICAgUFJJbnQxNiBpMTY7CiAgICAgICAgUFJJbnQzMiBp
MzI7CiAgICAgICAgUFJJbnQ2NCBpNjQ7CiAgICAgICAgUFJVaW50OCB1ODsKICAgICAgICBQUlVp
bnQxNiB1MTY7CiAgICAgICAgUFJVaW50MzIgdTMyOwogICAgICAgIFBSVWludDY0IHU2NDsKICAg
ICAgICBmbG9hdCBmOwogICAgICAgIGRvdWJsZSBkOwogICAgICAgIFBSQm9vbCBiOwogICAgICAg
IGNoYXIgYzsKICAgICAgICBQUlVuaWNoYXIgd2M7CiAgICAgICAgdm9pZCogcDsKICAgIH0gdmFs
Owp9OwoKc3RydWN0IG5zWFBUQ1ZhcmlhbnQgOiBwdWJsaWMgbnNYUFRDTWluaVZhcmlhbnQKewoK
CgoKICAgIHZvaWQqIHB0cjsKICAgIG5zWFBUVHlwZSB0eXBlOwogICAgUFJVaW50OCBmbGFnczsK
CiAgICBlbnVtCiAgICB7CgogICAgICAgIFBUUl9JU19EQVRBID0gMHgxLAogICAgICAgIFZBTF9J
U19BTExPQ0QgPSAweDIsCiAgICAgICAgVkFMX0lTX0lGQUNFID0gMHg0LAogICAgICAgIFZBTF9J
U19BUlJBWSA9IDB4OCwKICAgICAgICBWQUxfSVNfRE9NU1RSID0gMHgxMCwKICAgICAgICBWQUxf
SVNfVVRGOFNUUiA9IDB4MjAsCiAgICAgICAgVkFMX0lTX0NTVFIgPSAweDQwCiAgICB9OwoKICAg
IHZvaWQgQ2xlYXJGbGFncygpIHtmbGFncyA9IDA7fQogICAgdm9pZCBTZXRQdHJJc0RhdGEoKSB7
ZmxhZ3MgfD0gUFRSX0lTX0RBVEE7fQogICAgdm9pZCBTZXRWYWxJc0FsbG9jYXRlZCgpIHtmbGFn
cyB8PSBWQUxfSVNfQUxMT0NEO30KICAgIHZvaWQgU2V0VmFsSXNJbnRlcmZhY2UoKSB7ZmxhZ3Mg
fD0gVkFMX0lTX0lGQUNFO30KICAgIHZvaWQgU2V0VmFsSXNBcnJheSgpIHtmbGFncyB8PSBWQUxf
SVNfQVJSQVk7fQogICAgdm9pZCBTZXRWYWxJc0RPTVN0cmluZygpIHtmbGFncyB8PSBWQUxfSVNf
RE9NU1RSO30KICAgIHZvaWQgU2V0VmFsSXNVVEY4U3RyaW5nKCkge2ZsYWdzIHw9IFZBTF9JU19V
VEY4U1RSO30KICAgIHZvaWQgU2V0VmFsSXNDU3RyaW5nKCkge2ZsYWdzIHw9IFZBTF9JU19DU1RS
O30KCiAgICBQUkJvb2wgSXNQdHJEYXRhKCkgY29uc3Qge3JldHVybiAwICE9IChmbGFncyAmIFBU
Ul9JU19EQVRBKTt9CiAgICBQUkJvb2wgSXNWYWxBbGxvY2F0ZWQoKSBjb25zdCB7cmV0dXJuIDAg
IT0gKGZsYWdzICYgVkFMX0lTX0FMTE9DRCk7fQogICAgUFJCb29sIElzVmFsSW50ZXJmYWNlKCkg
Y29uc3Qge3JldHVybiAwICE9IChmbGFncyAmIFZBTF9JU19JRkFDRSk7fQogICAgUFJCb29sIElz
VmFsQXJyYXkoKSBjb25zdCB7cmV0dXJuIDAgIT0gKGZsYWdzICYgVkFMX0lTX0FSUkFZKTt9CiAg
ICBQUkJvb2wgSXNWYWxET01TdHJpbmcoKSBjb25zdCB7cmV0dXJuIDAgIT0gKGZsYWdzICYgVkFM
X0lTX0RPTVNUUik7fQogICAgUFJCb29sIElzVmFsVVRGOFN0cmluZygpIGNvbnN0IHtyZXR1cm4g
MCAhPSAoZmxhZ3MgJiBWQUxfSVNfVVRGOFNUUik7fQogICAgUFJCb29sIElzVmFsQ1N0cmluZygp
IGNvbnN0IHtyZXR1cm4gMCAhPSAoZmxhZ3MgJiBWQUxfSVNfQ1NUUik7fQoKICAgIHZvaWQgSW5p
dChjb25zdCBuc1hQVENNaW5pVmFyaWFudCYgbXYsIGNvbnN0IG5zWFBUVHlwZSYgdCwgUFJVaW50
OCBmKQogICAgewogICAgICAgIHR5cGUgPSB0OwogICAgICAgIGZsYWdzID0gZjsKCiAgICAgICAg
aWYoZiAmIFBUUl9JU19EQVRBKQogICAgICAgIHsKICAgICAgICAgICAgcHRyID0gbXYudmFsLnA7
CiAgICAgICAgICAgIHZhbC5wID0gMDsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsK
ICAgICAgICAgICAgcHRyID0gMDsKICAgICAgICAgICAgc3dpdGNoKHQuVGFnUGFydCgpKSB7CiAg
ICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfSTg6IHZhbC5pOCA9IG12LnZhbC5pODsgYnJl
YWs7CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfSTE2OiB2YWwuaTE2ID0gbXYudmFs
LmkxNjsgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfSTMyOiB2YWwuaTMy
ID0gbXYudmFsLmkzMjsgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfSTY0
OiB2YWwuaTY0ID0gbXYudmFsLmk2NDsgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5
cGU6OlRfVTg6IHZhbC51OCA9IG12LnZhbC51ODsgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBu
c1hQVFR5cGU6OlRfVTE2OiB2YWwudTE2ID0gbXYudmFsLnUxNjsgYnJlYWs7CiAgICAgICAgICAg
ICAgY2FzZSBuc1hQVFR5cGU6OlRfVTMyOiB2YWwudTMyID0gbXYudmFsLnUzMjsgYnJlYWs7CiAg
ICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfVTY0OiB2YWwudTY0ID0gbXYudmFsLnU2NDsg
YnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfRkxPQVQ6IHZhbC5mID0gbXYu
dmFsLmY7IGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgbnNYUFRUeXBlOjpUX0RPVUJMRTogdmFs
LmQgPSBtdi52YWwuZDsgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfQk9P
TDogdmFsLmIgPSBtdi52YWwuYjsgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6
OlRfQ0hBUjogdmFsLmMgPSBtdi52YWwuYzsgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSBuc1hQ
VFR5cGU6OlRfV0NIQVI6IHZhbC53YyA9IG12LnZhbC53YzsgYnJlYWs7CiAgICAgICAgICAgICAg
Y2FzZSBuc1hQVFR5cGU6OlRfVk9JRDoKICAgICAgICAgICAgICBjYXNlIG5zWFBUVHlwZTo6VF9J
SUQ6CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfRE9NU1RSSU5HOgogICAgICAgICAg
ICAgIGNhc2UgbnNYUFRUeXBlOjpUX0NIQVJfU1RSOgogICAgICAgICAgICAgIGNhc2UgbnNYUFRU
eXBlOjpUX1dDSEFSX1NUUjoKICAgICAgICAgICAgICBjYXNlIG5zWFBUVHlwZTo6VF9JTlRFUkZB
Q0U6CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfSU5URVJGQUNFX0lTOgogICAgICAg
ICAgICAgIGNhc2UgbnNYUFRUeXBlOjpUX0FSUkFZOgogICAgICAgICAgICAgIGNhc2UgbnNYUFRU
eXBlOjpUX1BTVFJJTkdfU0laRV9JUzoKICAgICAgICAgICAgICBjYXNlIG5zWFBUVHlwZTo6VF9Q
V1NUUklOR19TSVpFX0lTOgogICAgICAgICAgICAgIGNhc2UgbnNYUFRUeXBlOjpUX1VURjhTVFJJ
Tkc6CiAgICAgICAgICAgICAgY2FzZSBuc1hQVFR5cGU6OlRfQ1NUUklORzoKICAgICAgICAgICAg
ICBkZWZhdWx0OiB2YWwucCA9IG12LnZhbC5wOyBicmVhazsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgIH0KfTsKCgoKY2xhc3MgbnNYUFRDU3R1YkJhc2UgOiBwdWJsaWMgbnNJU3VwcG9ydHMK
ewpwdWJsaWM6CgoKCgogICAgdmlydHVhbCBuc3Jlc3VsdCBRdWVyeUludGVyZmFjZShjb25zdCBu
c0lJRCYgYUlJRCwgdm9pZCoqIGFJbnN0YW5jZVB0cik7CgoKCiMgMSAiLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL3hwY29tL3hwdGNzdHVic2RlY2wuaW5jIiAxCiMgMTEgIi4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS94cGNvbS94cHRjc3R1YnNkZWNsLmluYyIKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjMoKTsK
IHZpcnR1YWwgbnNyZXN1bHQgU3R1YjQoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjUoKTsKIHZp
cnR1YWwgbnNyZXN1bHQgU3R1YjYoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjcoKTsKIHZpcnR1
YWwgbnNyZXN1bHQgU3R1YjgoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjkoKTsKIHZpcnR1YWwg
bnNyZXN1bHQgU3R1YjEwKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMSgpOwogdmlydHVhbCBu
c3Jlc3VsdCBTdHViMTIoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjEzKCk7CiB2aXJ0dWFsIG5z
cmVzdWx0IFN0dWIxNCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTUoKTsKIHZpcnR1YWwgbnNy
ZXN1bHQgU3R1YjE2KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNygpOwogdmlydHVhbCBuc3Jl
c3VsdCBTdHViMTgoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE5KCk7CiB2aXJ0dWFsIG5zcmVz
dWx0IFN0dWIyMCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjEoKTsKIHZpcnR1YWwgbnNyZXN1
bHQgU3R1YjIyKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMygpOwogdmlydHVhbCBuc3Jlc3Vs
dCBTdHViMjQoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjI1KCk7CiB2aXJ0dWFsIG5zcmVzdWx0
IFN0dWIyNigpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjcoKTsKIHZpcnR1YWwgbnNyZXN1bHQg
U3R1YjI4KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyOSgpOwogdmlydHVhbCBuc3Jlc3VsdCBT
dHViMzAoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjMxKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0
dWIzMigpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMzMoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1
YjM0KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIzNSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHVi
MzYoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjM3KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIz
OCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMzkoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjQw
KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI0MSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViNDIo
KTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjQzKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI0NCgp
OwogdmlydHVhbCBuc3Jlc3VsdCBTdHViNDUoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjQ2KCk7
CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI0NygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViNDgoKTsK
IHZpcnR1YWwgbnNyZXN1bHQgU3R1YjQ5KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI1MCgpOwog
dmlydHVhbCBuc3Jlc3VsdCBTdHViNTEoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjUyKCk7CiB2
aXJ0dWFsIG5zcmVzdWx0IFN0dWI1MygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViNTQoKTsKIHZp
cnR1YWwgbnNyZXN1bHQgU3R1YjU1KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI1NigpOwogdmly
dHVhbCBuc3Jlc3VsdCBTdHViNTcoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjU4KCk7CiB2aXJ0
dWFsIG5zcmVzdWx0IFN0dWI1OSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViNjAoKTsKIHZpcnR1
YWwgbnNyZXN1bHQgU3R1YjYxKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI2MigpOwogdmlydHVh
bCBuc3Jlc3VsdCBTdHViNjMoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjY0KCk7CiB2aXJ0dWFs
IG5zcmVzdWx0IFN0dWI2NSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViNjYoKTsKIHZpcnR1YWwg
bnNyZXN1bHQgU3R1YjY3KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI2OCgpOwogdmlydHVhbCBu
c3Jlc3VsdCBTdHViNjkoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjcwKCk7CiB2aXJ0dWFsIG5z
cmVzdWx0IFN0dWI3MSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViNzIoKTsKIHZpcnR1YWwgbnNy
ZXN1bHQgU3R1YjczKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI3NCgpOwogdmlydHVhbCBuc3Jl
c3VsdCBTdHViNzUoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1Yjc2KCk7CiB2aXJ0dWFsIG5zcmVz
dWx0IFN0dWI3NygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViNzgoKTsKIHZpcnR1YWwgbnNyZXN1
bHQgU3R1Yjc5KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI4MCgpOwogdmlydHVhbCBuc3Jlc3Vs
dCBTdHViODEoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjgyKCk7CiB2aXJ0dWFsIG5zcmVzdWx0
IFN0dWI4MygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViODQoKTsKIHZpcnR1YWwgbnNyZXN1bHQg
U3R1Yjg1KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI4NigpOwogdmlydHVhbCBuc3Jlc3VsdCBT
dHViODcoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1Yjg4KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0
dWI4OSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViOTAoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1
YjkxKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI5MigpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHVi
OTMoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1Yjk0KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI5
NSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViOTYoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1Yjk3
KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWI5OCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViOTko
KTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjEwMCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTAx
KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMDIoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjEw
MygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTA0KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIx
MDUoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjEwNigpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHVi
MTA3KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMDgoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1
YjEwOSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTEwKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0
dWIxMTEoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjExMigpOwogdmlydHVhbCBuc3Jlc3VsdCBT
dHViMTEzKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMTQoKTsKIHZpcnR1YWwgbnNyZXN1bHQg
U3R1YjExNSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTE2KCk7CiB2aXJ0dWFsIG5zcmVzdWx0
IFN0dWIxMTcoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjExOCgpOwogdmlydHVhbCBuc3Jlc3Vs
dCBTdHViMTE5KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMjAoKTsKIHZpcnR1YWwgbnNyZXN1
bHQgU3R1YjEyMSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTIyKCk7CiB2aXJ0dWFsIG5zcmVz
dWx0IFN0dWIxMjMoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjEyNCgpOwogdmlydHVhbCBuc3Jl
c3VsdCBTdHViMTI1KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMjYoKTsKIHZpcnR1YWwgbnNy
ZXN1bHQgU3R1YjEyNygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTI4KCk7CiB2aXJ0dWFsIG5z
cmVzdWx0IFN0dWIxMjkoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjEzMCgpOwogdmlydHVhbCBu
c3Jlc3VsdCBTdHViMTMxKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMzIoKTsKIHZpcnR1YWwg
bnNyZXN1bHQgU3R1YjEzMygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTM0KCk7CiB2aXJ0dWFs
IG5zcmVzdWx0IFN0dWIxMzUoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjEzNigpOwogdmlydHVh
bCBuc3Jlc3VsdCBTdHViMTM3KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxMzgoKTsKIHZpcnR1
YWwgbnNyZXN1bHQgU3R1YjEzOSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTQwKCk7CiB2aXJ0
dWFsIG5zcmVzdWx0IFN0dWIxNDEoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE0MigpOwogdmly
dHVhbCBuc3Jlc3VsdCBTdHViMTQzKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNDQoKTsKIHZp
cnR1YWwgbnNyZXN1bHQgU3R1YjE0NSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTQ2KCk7CiB2
aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNDcoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE0OCgpOwog
dmlydHVhbCBuc3Jlc3VsdCBTdHViMTQ5KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNTAoKTsK
IHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE1MSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTUyKCk7
CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNTMoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE1NCgp
OwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTU1KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNTYo
KTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE1NygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTU4
KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNTkoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE2
MCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTYxKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIx
NjIoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE2MygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHVi
MTY0KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNjUoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1
YjE2NigpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTY3KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0
dWIxNjgoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE2OSgpOwogdmlydHVhbCBuc3Jlc3VsdCBT
dHViMTcwKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNzEoKTsKIHZpcnR1YWwgbnNyZXN1bHQg
U3R1YjE3MigpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTczKCk7CiB2aXJ0dWFsIG5zcmVzdWx0
IFN0dWIxNzQoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE3NSgpOwogdmlydHVhbCBuc3Jlc3Vs
dCBTdHViMTc2KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxNzcoKTsKIHZpcnR1YWwgbnNyZXN1
bHQgU3R1YjE3OCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTc5KCk7CiB2aXJ0dWFsIG5zcmVz
dWx0IFN0dWIxODAoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE4MSgpOwogdmlydHVhbCBuc3Jl
c3VsdCBTdHViMTgyKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxODMoKTsKIHZpcnR1YWwgbnNy
ZXN1bHQgU3R1YjE4NCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTg1KCk7CiB2aXJ0dWFsIG5z
cmVzdWx0IFN0dWIxODYoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE4NygpOwogdmlydHVhbCBu
c3Jlc3VsdCBTdHViMTg4KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxODkoKTsKIHZpcnR1YWwg
bnNyZXN1bHQgU3R1YjE5MCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTkxKCk7CiB2aXJ0dWFs
IG5zcmVzdWx0IFN0dWIxOTIoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE5MygpOwogdmlydHVh
bCBuc3Jlc3VsdCBTdHViMTk0KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIxOTUoKTsKIHZpcnR1
YWwgbnNyZXN1bHQgU3R1YjE5NigpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMTk3KCk7CiB2aXJ0
dWFsIG5zcmVzdWx0IFN0dWIxOTgoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjE5OSgpOwogdmly
dHVhbCBuc3Jlc3VsdCBTdHViMjAwKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMDEoKTsKIHZp
cnR1YWwgbnNyZXN1bHQgU3R1YjIwMigpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjAzKCk7CiB2
aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMDQoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIwNSgpOwog
dmlydHVhbCBuc3Jlc3VsdCBTdHViMjA2KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMDcoKTsK
IHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIwOCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjA5KCk7
CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMTAoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIxMSgp
OwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjEyKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMTMo
KTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIxNCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjE1
KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMTYoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIx
NygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjE4KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIy
MTkoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIyMCgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHVi
MjIxKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMjIoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1
YjIyMygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjI0KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0
dWIyMjUoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIyNigpOwogdmlydHVhbCBuc3Jlc3VsdCBT
dHViMjI3KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMjgoKTsKIHZpcnR1YWwgbnNyZXN1bHQg
U3R1YjIyOSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjMwKCk7CiB2aXJ0dWFsIG5zcmVzdWx0
IFN0dWIyMzEoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIzMigpOwogdmlydHVhbCBuc3Jlc3Vs
dCBTdHViMjMzKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyMzQoKTsKIHZpcnR1YWwgbnNyZXN1
bHQgU3R1YjIzNSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjM2KCk7CiB2aXJ0dWFsIG5zcmVz
dWx0IFN0dWIyMzcoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjIzOCgpOwogdmlydHVhbCBuc3Jl
c3VsdCBTdHViMjM5KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyNDAoKTsKIHZpcnR1YWwgbnNy
ZXN1bHQgU3R1YjI0MSgpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjQyKCk7CiB2aXJ0dWFsIG5z
cmVzdWx0IFN0dWIyNDMoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU3R1YjI0NCgpOwogdmlydHVhbCBu
c3Jlc3VsdCBTdHViMjQ1KCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFN0dWIyNDYoKTsKIHZpcnR1YWwg
bnNyZXN1bHQgU3R1YjI0NygpOwogdmlydHVhbCBuc3Jlc3VsdCBTdHViMjQ4KCk7CiB2aXJ0dWFs
IG5zcmVzdWx0IFN0dWIyNDkoKTsKCgogdmlydHVhbCBuc3Jlc3VsdCBTZW50aW5lbDAoKTsKIHZp
cnR1YWwgbnNyZXN1bHQgU2VudGluZWwxKCk7CiB2aXJ0dWFsIG5zcmVzdWx0IFNlbnRpbmVsMigp
OwogdmlydHVhbCBuc3Jlc3VsdCBTZW50aW5lbDMoKTsKIHZpcnR1YWwgbnNyZXN1bHQgU2VudGlu
ZWw0KCk7CiMgMjAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20veHB0Y2FsbC5oIiAyCgoK
CgoKICAgIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW50ZXJmYWNlSW5mbyhuc0lJbnRlcmZhY2VJbmZv
KiogaW5mbykgPSAwOwoKCiAgICB2aXJ0dWFsIG5zcmVzdWx0IENhbGxNZXRob2QoUFJVaW50MTYg
bWV0aG9kSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNYUFRNZXRob2RJ
bmZvKiBpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zWFBUQ01pbmlWYXJpYW50KiBw
YXJhbXMpID0gMDsKfTsKCgpleHRlcm4gIkMiIHsKCm5zcmVzdWx0ClhQVENfSW52b2tlQnlJbmRl
eChuc0lTdXBwb3J0cyogdGhhdCwgUFJVaW50MzIgbWV0aG9kSW5kZXgsCiAgICAgICAgICAgICAg
ICAgICBQUlVpbnQzMiBwYXJhbUNvdW50LCBuc1hQVENWYXJpYW50KiBwYXJhbXMpOwoKCmV4dGVy
biB2b2lkIHhwdGNfZHVtbXkoKTsKZXh0ZXJuIHZvaWQgeHB0Y19kdW1teTIoKTsKCn0KIyA1NSAi
bnNET01DbGFzc0luZm8uY3BwIiAyCgoKCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pz
bnVtLmgiIDEKIyA0OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzbnVtLmgiCmV4dGVybiAi
QyIgewojIDY3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNudW0uaCIKdHlwZWRlZiB1bmlv
biB7CiAgICBqc2RvdWJsZSB2YWx1ZTsKICAgIHN0cnVjdCB7CgogICAgICAgIHVpbnQzMiBsc3c7
CiAgICAgICAgdWludDMyIG1zdzsKCgoKCiAgICB9IHBhcnRzOwp9IGpzX2llZWVfZG91YmxlX3No
YXBlX3R5cGU7CiMgMTQ2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNudW0uaCIKZXh0ZXJu
IEpTQm9vbApqc19Jbml0UnVudGltZU51bWJlclN0YXRlKEpTQ29udGV4dCAqY3gpOwoKZXh0ZXJu
IHZvaWQKanNfRmluaXNoUnVudGltZU51bWJlclN0YXRlKEpTQ29udGV4dCAqY3gpOwoKCmV4dGVy
biBKU09iamVjdCAqCmpzX0luaXROdW1iZXJDbGFzcyhKU0NvbnRleHQgKmN4LCBKU09iamVjdCAq
b2JqKTsKCgoKCmV4dGVybiBjb25zdCBjaGFyIGpzX0luZmluaXR5X3N0cltdOwpleHRlcm4gY29u
c3QgY2hhciBqc19OYU5fc3RyW107CmV4dGVybiBjb25zdCBjaGFyIGpzX2lzTmFOX3N0cltdOwpl
eHRlcm4gY29uc3QgY2hhciBqc19pc0Zpbml0ZV9zdHJbXTsKZXh0ZXJuIGNvbnN0IGNoYXIganNf
cGFyc2VGbG9hdF9zdHJbXTsKZXh0ZXJuIGNvbnN0IGNoYXIganNfcGFyc2VJbnRfc3RyW107CgoK
ZXh0ZXJuIGpzZG91YmxlICoKanNfTmV3RG91YmxlKEpTQ29udGV4dCAqY3gsIGpzZG91YmxlIGQp
OwoKZXh0ZXJuIHZvaWQKanNfRmluYWxpemVEb3VibGUoSlNDb250ZXh0ICpjeCwganNkb3VibGUg
KmRwKTsKCmV4dGVybiBKU0Jvb2wKanNfTmV3RG91YmxlVmFsdWUoSlNDb250ZXh0ICpjeCwganNk
b3VibGUgZCwganN2YWwgKnJ2YWwpOwoKZXh0ZXJuIEpTQm9vbApqc19OZXdOdW1iZXJWYWx1ZShK
U0NvbnRleHQgKmN4LCBqc2RvdWJsZSBkLCBqc3ZhbCAqcnZhbCk7CgoKZXh0ZXJuIEpTT2JqZWN0
ICoKanNfTnVtYmVyVG9PYmplY3QoSlNDb250ZXh0ICpjeCwganNkb3VibGUgZCk7CgoKZXh0ZXJu
IEpTU3RyaW5nICoKanNfTnVtYmVyVG9TdHJpbmcoSlNDb250ZXh0ICpjeCwganNkb3VibGUgZCk7
CgoKCgoKZXh0ZXJuIEpTQm9vbApqc19WYWx1ZVRvTnVtYmVyKEpTQ29udGV4dCAqY3gsIGpzdmFs
IHYsIGpzZG91YmxlICpkcCk7CgoKCgoKZXh0ZXJuIEpTQm9vbApqc19WYWx1ZVRvRUNNQUludDMy
KEpTQ29udGV4dCAqY3gsIGpzdmFsIHYsIGludDMyICppcCk7CgpleHRlcm4gSlNCb29sCmpzX0Rv
dWJsZVRvRUNNQUludDMyKEpTQ29udGV4dCAqY3gsIGpzZG91YmxlIGQsIGludDMyICppcCk7CgoK
CgoKZXh0ZXJuIEpTQm9vbApqc19WYWx1ZVRvRUNNQVVpbnQzMihKU0NvbnRleHQgKmN4LCBqc3Zh
bCB2LCB1aW50MzIgKmlwKTsKCmV4dGVybiBKU0Jvb2wKanNfRG91YmxlVG9FQ01BVWludDMyKEpT
Q29udGV4dCAqY3gsIGpzZG91YmxlIGQsIHVpbnQzMiAqaXApOwoKCgoKCgpleHRlcm4gSlNCb29s
CmpzX1ZhbHVlVG9JbnQzMihKU0NvbnRleHQgKmN4LCBqc3ZhbCB2LCBpbnQzMiAqaXApOwoKCgoK
CmV4dGVybiBKU0Jvb2wKanNfVmFsdWVUb1VpbnQxNihKU0NvbnRleHQgKmN4LCBqc3ZhbCB2LCB1
aW50MTYgKmlwKTsKCgoKCgpleHRlcm4ganNkb3VibGUKanNfRG91YmxlVG9JbnRlZ2VyKGpzZG91
YmxlIGQpOwojIDI0NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzbnVtLmgiCmV4dGVybiBK
U0Jvb2wKanNfc3RydG9kKEpTQ29udGV4dCAqY3gsIGNvbnN0IGpzY2hhciAqcywgY29uc3QganNj
aGFyICoqZXAsIGpzZG91YmxlICpkcCk7CiMgMjU1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMv
anNudW0uaCIKZXh0ZXJuIEpTQm9vbApqc19zdHJ0b2ludGVnZXIoSlNDb250ZXh0ICpjeCwgY29u
c3QganNjaGFyICpzLCBjb25zdCBqc2NoYXIgKiplcCwganNpbnQgcmFkaXgsIGpzZG91YmxlICpk
cCk7Cgp9CiMgNTkgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9qcy9qc2RiZ2FwaS5oIiAxCiMgNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2Ri
Z2FwaS5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc29wY29kZS5oIiAxCiMgNDAg
Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc29wY29kZS5oIgojIDEgIi91c3IvbGliL2djYy1s
aWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDEgIi4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc29wY29kZS5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL2pzL2pzcHJ2dGQuaCIgMQojIDU1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvanMvanNw
cnZ0ZC5oIgp0eXBlZGVmIHVpbnQ4IGpzYnl0ZWNvZGU7CnR5cGVkZWYgdWludDgganNzcmNub3Rl
Owp0eXBlZGVmIHVpbnQzMiBqc2F0b21pZDsKCgp0eXBlZGVmIHN0cnVjdCBKU0FyZ3VtZW50Rm9y
bWF0TWFwIEpTQXJndW1lbnRGb3JtYXRNYXA7CnR5cGVkZWYgc3RydWN0IEpTQ29kZUdlbmVyYXRv
ciBKU0NvZGVHZW5lcmF0b3I7CnR5cGVkZWYgc3RydWN0IEpTRGVwZW5kZW50U3RyaW5nIEpTRGVw
ZW5kZW50U3RyaW5nOwp0eXBlZGVmIHN0cnVjdCBKU0dDTG9ja0hhc2hFbnRyeSBKU0dDTG9ja0hh
c2hFbnRyeTsKdHlwZWRlZiBzdHJ1Y3QgSlNHQ1Jvb3RIYXNoRW50cnkgSlNHQ1Jvb3RIYXNoRW50
cnk7CnR5cGVkZWYgc3RydWN0IEpTR0NUaGluZyBKU0dDVGhpbmc7CnR5cGVkZWYgc3RydWN0IEpT
UGFyc2VOb2RlIEpTUGFyc2VOb2RlOwp0eXBlZGVmIHN0cnVjdCBKU1NoYXJwT2JqZWN0TWFwIEpT
U2hhcnBPYmplY3RNYXA7CnR5cGVkZWYgc3RydWN0IEpTVG9rZW4gSlNUb2tlbjsKdHlwZWRlZiBz
dHJ1Y3QgSlNUb2tlblBvcyBKU1Rva2VuUG9zOwp0eXBlZGVmIHN0cnVjdCBKU1Rva2VuUHRyIEpT
VG9rZW5QdHI7CnR5cGVkZWYgc3RydWN0IEpTVG9rZW5TdHJlYW0gSlNUb2tlblN0cmVhbTsKdHlw
ZWRlZiBzdHJ1Y3QgSlNUcmVlQ29udGV4dCBKU1RyZWVDb250ZXh0Owp0eXBlZGVmIHN0cnVjdCBK
U1RyeU5vdGUgSlNUcnlOb3RlOwoKCnR5cGVkZWYgc3RydWN0IEpTQXRvbSBKU0F0b207CnR5cGVk
ZWYgc3RydWN0IEpTQXRvbUxpc3QgSlNBdG9tTGlzdDsKdHlwZWRlZiBzdHJ1Y3QgSlNBdG9tTGlz
dEVsZW1lbnQgSlNBdG9tTGlzdEVsZW1lbnQ7CnR5cGVkZWYgc3RydWN0IEpTQXRvbU1hcCBKU0F0
b21NYXA7CnR5cGVkZWYgc3RydWN0IEpTQXRvbVN0YXRlIEpTQXRvbVN0YXRlOwp0eXBlZGVmIHN0
cnVjdCBKU0NvZGVTcGVjIEpTQ29kZVNwZWM7CnR5cGVkZWYgc3RydWN0IEpTUHJpbnRlciBKU1By
aW50ZXI7CnR5cGVkZWYgc3RydWN0IEpTUmVnRXhwIEpTUmVnRXhwOwp0eXBlZGVmIHN0cnVjdCBK
U1JlZ0V4cFN0YXRpY3MgSlNSZWdFeHBTdGF0aWNzOwp0eXBlZGVmIHN0cnVjdCBKU1Njb3BlIEpT
U2NvcGU7CnR5cGVkZWYgc3RydWN0IEpTU2NvcGVPcHMgSlNTY29wZU9wczsKdHlwZWRlZiBzdHJ1
Y3QgSlNTY29wZVByb3BlcnR5IEpTU2NvcGVQcm9wZXJ0eTsKdHlwZWRlZiBzdHJ1Y3QgSlNTdGFj
a0ZyYW1lIEpTU3RhY2tGcmFtZTsKdHlwZWRlZiBzdHJ1Y3QgSlNTdGFja0hlYWRlciBKU1N0YWNr
SGVhZGVyOwp0eXBlZGVmIHN0cnVjdCBKU1N1YlN0cmluZyBKU1N1YlN0cmluZzsKCgp0eXBlZGVm
IGVudW0gSlNUcmFwU3RhdHVzIHsKICAgIEpTVFJBUF9FUlJPUiwKICAgIEpTVFJBUF9DT05USU5V
RSwKICAgIEpTVFJBUF9SRVRVUk4sCiAgICBKU1RSQVBfVEhST1csCiAgICBKU1RSQVBfTElNSVQK
fSBKU1RyYXBTdGF0dXM7Cgp0eXBlZGVmIEpTVHJhcFN0YXR1cwooKiBKU1RyYXBIYW5kbGVyKShK
U0NvbnRleHQgKmN4LCBKU1NjcmlwdCAqc2NyaXB0LCBqc2J5dGVjb2RlICpwYywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpzdmFsICpydmFsLCB2b2lkICpjbG9zdXJlKTsKCnR5
cGVkZWYgSlNCb29sCigqIEpTV2F0Y2hQb2ludEhhbmRsZXIpKEpTQ29udGV4dCAqY3gsIEpTT2Jq
ZWN0ICpvYmosIGpzdmFsIGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAganN2YWwgb2xkLCBqc3ZhbCAqbmV3cCwgdm9pZCAqY2xvc3VyZSk7CgoKdHlwZWRlZiB2b2lk
CigqIEpTTmV3U2NyaXB0SG9vaykoSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVpbnROIGxpbmVubywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSlNTY3JpcHQgKnNjcmlwdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSlNGdW5jdGlvbiAqZnVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2b2lkICpjYWxsZXJkYXRhKTsKCgp0eXBlZGVmIHZvaWQKKCogSlNEZXN0cm95U2NyaXB0SG9v
aykoSlNDb250ZXh0ICpjeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEpTU2NyaXB0ICpzY3JpcHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2b2lkICpjYWxsZXJkYXRhKTsKCnR5cGVkZWYgdm9pZAooKiBKU1NvdXJjZUhhbmRsZXIpKGNv
bnN0IGNoYXIgKmZpbGVuYW1lLCB1aW50TiBsaW5lbm8sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpzY2hhciAqc3RyLCBzaXplX3QgbGVuZ3RoLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2b2lkICoqbGlzdGVuZXJUU0RhdGEsIHZvaWQgKmNsb3N1cmUp
OwojIDE1NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzcHJ2dGQuaCIKdHlwZWRlZiB2b2lk
ICoKKCogSlNJbnRlcnByZXRlckhvb2spKEpTQ29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAqZnAs
IEpTQm9vbCBiZWZvcmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNC
b29sICpvaywgdm9pZCAqY2xvc3VyZSk7Cgp0eXBlZGVmIHZvaWQKKCogSlNPYmplY3RIb29rKShK
U0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBKU0Jvb2wgaXNOZXcsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsb3N1cmUpOwoKdHlwZWRlZiBKU0Jvb2wKKCogSlNE
ZWJ1Z0Vycm9ySG9vaykoSlNDb250ZXh0ICpjeCwgY29uc3QgY2hhciAqbWVzc2FnZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTRXJyb3JSZXBvcnQgKnJlcG9ydCwgdm9p
ZCAqY2xvc3VyZSk7CiMgNDIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc29wY29kZS5oIiAy
CgoKZXh0ZXJuICJDIiB7CgoKCgp0eXBlZGVmIGVudW0gSlNPcCB7CgoKIyAxICIuLi8uLi8uLi9k
aXN0L2luY2x1ZGUvanMvanNvcGNvZGUudGJsIiAxCiMgNjcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9qcy9qc29wY29kZS50YmwiCkpTT1BfTk9QID0gMCwKSlNPUF9QVVNIID0gMSwKSlNPUF9QT1BW
ID0gMiwKSlNPUF9FTlRFUldJVEggPSAzLApKU09QX0xFQVZFV0lUSCA9IDQsCkpTT1BfUkVUVVJO
ID0gNSwKSlNPUF9HT1RPID0gNiwKSlNPUF9JRkVRID0gNywKSlNPUF9JRk5FID0gOCwKCgpKU09Q
X0FSR1VNRU5UUyA9IDksCgoKSlNPUF9GT1JBUkcgPSAxMCwKSlNPUF9GT1JWQVIgPSAxMSwKCgpK
U09QX0RVUCA9IDEyLApKU09QX0RVUDIgPSAxMywKSlNPUF9TRVRDT05TVCA9IDE0LApKU09QX0JJ
VE9SID0gMTUsCkpTT1BfQklUWE9SID0gMTYsCkpTT1BfQklUQU5EID0gMTcsCkpTT1BfRVEgPSAx
OCwKSlNPUF9ORSA9IDE5LApKU09QX0xUID0gMjAsCkpTT1BfTEUgPSAyMSwKSlNPUF9HVCA9IDIy
LApKU09QX0dFID0gMjMsCkpTT1BfTFNIID0gMjQsCkpTT1BfUlNIID0gMjUsCkpTT1BfVVJTSCA9
IDI2LApKU09QX0FERCA9IDI3LApKU09QX1NVQiA9IDI4LApKU09QX01VTCA9IDI5LApKU09QX0RJ
ViA9IDMwLApKU09QX01PRCA9IDMxLApKU09QX05PVCA9IDMyLApKU09QX0JJVE5PVCA9IDMzLApK
U09QX05FRyA9IDM0LApKU09QX05FVyA9IDM1LApKU09QX0RFTE5BTUUgPSAzNiwKSlNPUF9ERUxQ
Uk9QID0gMzcsCkpTT1BfREVMRUxFTSA9IDM4LApKU09QX1RZUEVPRiA9IDM5LApKU09QX1ZPSUQg
PSA0MCwKSlNPUF9JTkNOQU1FID0gNDEsCkpTT1BfSU5DUFJPUCA9IDQyLApKU09QX0lOQ0VMRU0g
PSA0MywKSlNPUF9ERUNOQU1FID0gNDQsCkpTT1BfREVDUFJPUCA9IDQ1LApKU09QX0RFQ0VMRU0g
PSA0NiwKSlNPUF9OQU1FSU5DID0gNDcsCkpTT1BfUFJPUElOQyA9IDQ4LApKU09QX0VMRU1JTkMg
PSA0OSwKSlNPUF9OQU1FREVDID0gNTAsCkpTT1BfUFJPUERFQyA9IDUxLApKU09QX0VMRU1ERUMg
PSA1MiwKSlNPUF9HRVRQUk9QID0gNTMsCkpTT1BfU0VUUFJPUCA9IDU0LApKU09QX0dFVEVMRU0g
PSA1NSwKSlNPUF9TRVRFTEVNID0gNTYsCkpTT1BfUFVTSE9CSiA9IDU3LApKU09QX0NBTEwgPSA1
OCwKSlNPUF9OQU1FID0gNTksCkpTT1BfTlVNQkVSID0gNjAsCkpTT1BfU1RSSU5HID0gNjEsCkpT
T1BfWkVSTyA9IDYyLApKU09QX09ORSA9IDYzLApKU09QX05VTEwgPSA2NCwKSlNPUF9USElTID0g
NjUsCkpTT1BfRkFMU0UgPSA2NiwKSlNPUF9UUlVFID0gNjcsCkpTT1BfT1IgPSA2OCwKSlNPUF9B
TkQgPSA2OSwKCgpKU09QX1RBQkxFU1dJVENIID0gNzAsCkpTT1BfTE9PS1VQU1dJVENIID0gNzEs
CgoKSlNPUF9ORVdfRVEgPSA3MiwKSlNPUF9ORVdfTkUgPSA3MywKCgpKU09QX0NMT1NVUkUgPSA3
NCwKCgpKU09QX0VYUE9SVEFMTCA9IDc1LApKU09QX0VYUE9SVE5BTUUgPSA3NiwKSlNPUF9JTVBP
UlRBTEwgPSA3NywKSlNPUF9JTVBPUlRQUk9QID0gNzgsCkpTT1BfSU1QT1JURUxFTSA9IDc5LAoK
CkpTT1BfT0JKRUNUID0gODAsCgoKSlNPUF9QT1AgPSA4MSwKCgpKU09QX1BPUyA9IDgyLAoKCkpT
T1BfVFJBUCA9IDgzLAoKCkpTT1BfR0VUQVJHID0gODQsCkpTT1BfU0VUQVJHID0gODUsCkpTT1Bf
R0VUVkFSID0gODYsCkpTT1BfU0VUVkFSID0gODcsCgoKSlNPUF9VSU5UMTYgPSA4OCwKCgpKU09Q
X05FV0lOSVQgPSA4OSwKSlNPUF9FTkRJTklUID0gOTAsCkpTT1BfSU5JVFBST1AgPSA5MSwKSlNP
UF9JTklURUxFTSA9IDkyLApKU09QX0RFRlNIQVJQID0gOTMsCkpTT1BfVVNFU0hBUlAgPSA5NCwK
CgpKU09QX0lOQ0FSRyA9IDk1LApKU09QX0lOQ1ZBUiA9IDk2LApKU09QX0RFQ0FSRyA9IDk3LApK
U09QX0RFQ1ZBUiA9IDk4LApKU09QX0FSR0lOQyA9IDk5LApKU09QX1ZBUklOQyA9IDEwMCwKSlNP
UF9BUkdERUMgPSAxMDEsCkpTT1BfVkFSREVDID0gMTAyLAoKCkpTT1BfVE9PQkpFQ1QgPSAxMDMs
CkpTT1BfRk9STkFNRSA9IDEwNCwKSlNPUF9GT1JQUk9QID0gMTA1LApKU09QX0ZPUkVMRU0gPSAx
MDYsCkpTT1BfUE9QMiA9IDEwNywKCgpKU09QX0JJTkROQU1FID0gMTA4LApKU09QX1NFVE5BTUUg
PSAxMDksCgoKSlNPUF9USFJPVyA9IDExMCwKCgpKU09QX0lOID0gMTExLApKU09QX0lOU1RBTkNF
T0YgPSAxMTIsCgoKSlNPUF9ERUJVR0dFUiA9IDExMywKCgpKU09QX0dPU1VCID0gMTE0LApKU09Q
X1JFVFNVQiA9IDExNSwKCgpKU09QX0VYQ0VQVElPTiA9IDExNiwKSlNPUF9TRVRTUCA9IDExNywK
CgoKCgoKSlNPUF9DT05EU1dJVENIID0gMTE4LApKU09QX0NBU0UgPSAxMTksCkpTT1BfREVGQVVM
VCA9IDEyMCwKCgoKCkpTT1BfRVZBTCA9IDEyMSwKCgoKCkpTT1BfRU5VTUVMRU0gPSAxMjIsCgoK
CgoKCkpTT1BfR0VUVEVSID0gMTIzLApKU09QX1NFVFRFUiA9IDEyNCwKCgoKCkpTT1BfREVGRlVO
ID0gMTI1LApKU09QX0RFRkNPTlNUID0gMTI2LApKU09QX0RFRlZBUiA9IDEyNywKCgpKU09QX0FO
T05GVU5PQkogPSAxMjgsCgoKSlNPUF9OQU1FREZVTk9CSiA9IDEyOSwKCgpKU09QX0lOSVRDQVRD
SFZBUiA9IDEzMCwKCgpKU09QX0dST1VQID0gMTMxLAoKCkpTT1BfU0VUQ0FMTCA9IDEzMiwKCgoK
CgpKU09QX1RSWSA9IDEzMywKSlNPUF9GSU5BTExZID0gMTM0LAoKCgoKCgoKSlNPUF9TV0FQID0g
MTM1LAoKCgoKCgpKU09QX0FSR1NVQiA9IDEzNiwKSlNPUF9BUkdDTlQgPSAxMzcsCgoKCgoKCkpT
T1BfREVGTE9DQUxGVU4gPSAxMzgsCgoKSlNPUF9HT1RPWCA9IDEzOSwKSlNPUF9JRkVRWCA9IDE0
MCwKSlNPUF9JRk5FWCA9IDE0MSwKSlNPUF9PUlggPSAxNDIsCkpTT1BfQU5EWCA9IDE0MywKSlNP
UF9HT1NVQlggPSAxNDQsCkpTT1BfQ0FTRVggPSAxNDUsCkpTT1BfREVGQVVMVFggPSAxNDYsCkpT
T1BfVEFCTEVTV0lUQ0hYID0gMTQ3LApKU09QX0xPT0tVUFNXSVRDSFggPSAxNDgsCgoKSlNPUF9C
QUNLUEFUQ0ggPSAxNDksCkpTT1BfQkFDS1BBVENIX1BPUCA9IDE1MCwKSlNPUF9CQUNLUEFUQ0hf
UFVTSCA9IDE1MSwKCgpKU09QX1NFVFJWQUwgPSAxNTIsCkpTT1BfUkVUUlZBTCA9IDE1MywKIyA1
MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzb3Bjb2RlLmgiIDIKCiAgICBKU09QX0xJTUlU
Cn0gSlNPcDsKIyAxNjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc29wY29kZS5oIgpzdHJ1
Y3QgSlNDb2RlU3BlYyB7CiAgICBjb25zdCBjaGFyICpuYW1lOwogICAgY29uc3QgY2hhciAqdG9r
ZW47CiAgICBpbnQ4IGxlbmd0aDsKICAgIGludDggbnVzZXM7CiAgICBpbnQ4IG5kZWZzOwogICAg
dWludDggcHJlYzsKICAgIHVpbnQzMiBmb3JtYXQ7Cn07CgpleHRlcm4gY2hhciBqc19jb25zdF9z
dHJbXTsKZXh0ZXJuIGNoYXIganNfdmFyX3N0cltdOwpleHRlcm4gY2hhciBqc19mdW5jdGlvbl9z
dHJbXTsKZXh0ZXJuIGNoYXIganNfaW5fc3RyW107CmV4dGVybiBjaGFyIGpzX2luc3RhbmNlb2Zf
c3RyW107CmV4dGVybiBjaGFyIGpzX25ld19zdHJbXTsKZXh0ZXJuIGNoYXIganNfZGVsZXRlX3N0
cltdOwpleHRlcm4gY2hhciBqc190eXBlb2Zfc3RyW107CmV4dGVybiBjaGFyIGpzX3ZvaWRfc3Ry
W107CmV4dGVybiBjaGFyIGpzX251bGxfc3RyW107CmV4dGVybiBjaGFyIGpzX3RoaXNfc3RyW107
CmV4dGVybiBjaGFyIGpzX2ZhbHNlX3N0cltdOwpleHRlcm4gY2hhciBqc190cnVlX3N0cltdOwpl
eHRlcm4gSlNDb2RlU3BlYyBqc19Db2RlU3BlY1tdOwpleHRlcm4gdWludE4ganNfTnVtQ29kZVNw
ZWNzOwpleHRlcm4ganNjaGFyIGpzX0VzY2FwZU1hcFtdOwoKCgoKCgpleHRlcm4gSlNTdHJpbmcg
Kgpqc19RdW90ZVN0cmluZyhKU0NvbnRleHQgKmN4LCBKU1N0cmluZyAqc3RyLCBqc2NoYXIgcXVv
dGUpOwoKCgoKCgpleHRlcm4gSlNQcmludGVyICoKanNfTmV3UHJpbnRlcihKU0NvbnRleHQgKmN4
LCBjb25zdCBjaGFyICpuYW1lLCB1aW50TiBpbmRlbnQsIEpTQm9vbCBwcmV0dHkpOwoKZXh0ZXJu
IHZvaWQKanNfRGVzdHJveVByaW50ZXIoSlNQcmludGVyICpqcCk7CgpleHRlcm4gSlNTdHJpbmcg
Kgpqc19HZXRQcmludGVyT3V0cHV0KEpTUHJpbnRlciAqanApOwoKZXh0ZXJuIGludApqc19wcmlu
dGYoSlNQcmludGVyICpqcCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOwoKZXh0ZXJuIEpTQm9v
bApqc19wdXRzKEpTUHJpbnRlciAqanAsIGNvbnN0IGNoYXIgKnMpOwojIDIzNyAiLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL2pzL2pzb3Bjb2RlLmgiCmV4dGVybiBKU0Jvb2wKanNfRGVjb21waWxlQ29k
ZShKU1ByaW50ZXIgKmpwLCBKU1NjcmlwdCAqc2NyaXB0LCBqc2J5dGVjb2RlICpwYywgdWludE4g
bGVuKTsKCmV4dGVybiBKU0Jvb2wKanNfRGVjb21waWxlU2NyaXB0KEpTUHJpbnRlciAqanAsIEpT
U2NyaXB0ICpzY3JpcHQpOwoKZXh0ZXJuIEpTQm9vbApqc19EZWNvbXBpbGVGdW5jdGlvbkJvZHko
SlNQcmludGVyICpqcCwgSlNGdW5jdGlvbiAqZnVuKTsKCmV4dGVybiBKU0Jvb2wKanNfRGVjb21w
aWxlRnVuY3Rpb24oSlNQcmludGVyICpqcCwgSlNGdW5jdGlvbiAqZnVuKTsKIyAyNTkgIi4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9qcy9qc29wY29kZS5oIgpleHRlcm4gSlNTdHJpbmcgKgpqc19EZWNv
bXBpbGVWYWx1ZUdlbmVyYXRvcihKU0NvbnRleHQgKmN4LCBpbnROIHNwaW5kZXgsIGpzdmFsIHYs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTU3RyaW5nICpmYWxsYmFjayk7CgoKCgp9CiMg
NDIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2RiZ2FwaS5oIiAyCgoKZXh0ZXJuICJDIiB7
CgpleHRlcm4gdm9pZApqc19QYXRjaE9wY29kZShKU0NvbnRleHQgKmN4LCBKU1NjcmlwdCAqc2Ny
aXB0LCBqc2J5dGVjb2RlICpwYywgSlNPcCBvcCk7CgpleHRlcm4gSlNCb29sCkpTX1NldFRyYXAo
SlNDb250ZXh0ICpjeCwgSlNTY3JpcHQgKnNjcmlwdCwganNieXRlY29kZSAqcGMsCiAgICAgICAg
ICAgSlNUcmFwSGFuZGxlciBoYW5kbGVyLCB2b2lkICpjbG9zdXJlKTsKCmV4dGVybiBKU09wCkpT
X0dldFRyYXBPcGNvZGUoSlNDb250ZXh0ICpjeCwgSlNTY3JpcHQgKnNjcmlwdCwganNieXRlY29k
ZSAqcGMpOwoKZXh0ZXJuIHZvaWQKSlNfQ2xlYXJUcmFwKEpTQ29udGV4dCAqY3gsIEpTU2NyaXB0
ICpzY3JpcHQsIGpzYnl0ZWNvZGUgKnBjLAogICAgICAgICAgICAgSlNUcmFwSGFuZGxlciAqaGFu
ZGxlcnAsIHZvaWQgKipjbG9zdXJlcCk7CgpleHRlcm4gdm9pZApKU19DbGVhclNjcmlwdFRyYXBz
KEpTQ29udGV4dCAqY3gsIEpTU2NyaXB0ICpzY3JpcHQpOwoKZXh0ZXJuIHZvaWQKSlNfQ2xlYXJB
bGxUcmFwcyhKU0NvbnRleHQgKmN4KTsKCmV4dGVybiBKU1RyYXBTdGF0dXMKSlNfSGFuZGxlVHJh
cChKU0NvbnRleHQgKmN4LCBKU1NjcmlwdCAqc2NyaXB0LCBqc2J5dGVjb2RlICpwYywganN2YWwg
KnJ2YWwpOwoKZXh0ZXJuIEpTQm9vbApKU19TZXRJbnRlcnJ1cHQoSlNSdW50aW1lICpydCwgSlNU
cmFwSGFuZGxlciBoYW5kbGVyLCB2b2lkICpjbG9zdXJlKTsKCmV4dGVybiBKU0Jvb2wKSlNfQ2xl
YXJJbnRlcnJ1cHQoSlNSdW50aW1lICpydCwgSlNUcmFwSGFuZGxlciAqaGFuZGxlcnAsIHZvaWQg
KipjbG9zdXJlcCk7CgoKCmV4dGVybiBKU0Jvb2wKSlNfU2V0V2F0Y2hQb2ludChKU0NvbnRleHQg
KmN4LCBKU09iamVjdCAqb2JqLCBqc3ZhbCBpZCwKICAgICAgICAgICAgICAgICBKU1dhdGNoUG9p
bnRIYW5kbGVyIGhhbmRsZXIsIHZvaWQgKmNsb3N1cmUpOwoKZXh0ZXJuIEpTQm9vbApKU19DbGVh
cldhdGNoUG9pbnQoSlNDb250ZXh0ICpjeCwgSlNPYmplY3QgKm9iaiwganN2YWwgaWQsCiAgICAg
ICAgICAgICAgICAgICBKU1dhdGNoUG9pbnRIYW5kbGVyICpoYW5kbGVycCwgdm9pZCAqKmNsb3N1
cmVwKTsKCmV4dGVybiBKU0Jvb2wKSlNfQ2xlYXJXYXRjaFBvaW50c0Zvck9iamVjdChKU0NvbnRl
eHQgKmN4LCBKU09iamVjdCAqb2JqKTsKCmV4dGVybiBKU0Jvb2wKSlNfQ2xlYXJBbGxXYXRjaFBv
aW50cyhKU0NvbnRleHQgKmN4KTsKIyAxMjAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9qcy9qc2Ri
Z2FwaS5oIgpleHRlcm4gdWludE4KSlNfUENUb0xpbmVOdW1iZXIoSlNDb250ZXh0ICpjeCwgSlNT
Y3JpcHQgKnNjcmlwdCwganNieXRlY29kZSAqcGMpOwoKZXh0ZXJuIGpzYnl0ZWNvZGUgKgpKU19M
aW5lTnVtYmVyVG9QQyhKU0NvbnRleHQgKmN4LCBKU1NjcmlwdCAqc2NyaXB0LCB1aW50TiBsaW5l
bm8pOwoKZXh0ZXJuIEpTU2NyaXB0ICoKSlNfR2V0RnVuY3Rpb25TY3JpcHQoSlNDb250ZXh0ICpj
eCwgSlNGdW5jdGlvbiAqZnVuKTsKCmV4dGVybiBKU1ByaW5jaXBhbHMgKgpKU19HZXRTY3JpcHRQ
cmluY2lwYWxzKEpTQ29udGV4dCAqY3gsIEpTU2NyaXB0ICpzY3JpcHQpOwojIDEzOSAiLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL2pzL2pzZGJnYXBpLmgiCmV4dGVybiBKU1N0YWNrRnJhbWUgKgpKU19G
cmFtZUl0ZXJhdG9yKEpTQ29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAqKml0ZXJhdG9ycCk7Cgpl
eHRlcm4gSlNTY3JpcHQgKgpKU19HZXRGcmFtZVNjcmlwdChKU0NvbnRleHQgKmN4LCBKU1N0YWNr
RnJhbWUgKmZwKTsKCmV4dGVybiBqc2J5dGVjb2RlICoKSlNfR2V0RnJhbWVQQyhKU0NvbnRleHQg
KmN4LCBKU1N0YWNrRnJhbWUgKmZwKTsKCmV4dGVybiBKU0Jvb2wKSlNfSXNOYXRpdmVGcmFtZShK
U0NvbnRleHQgKmN4LCBKU1N0YWNrRnJhbWUgKmZwKTsKCmV4dGVybiB2b2lkICoKSlNfR2V0RnJh
bWVBbm5vdGF0aW9uKEpTQ29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAqZnApOwoKZXh0ZXJuIHZv
aWQKSlNfU2V0RnJhbWVBbm5vdGF0aW9uKEpTQ29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAqZnAs
IHZvaWQgKmFubm90YXRpb24pOwoKZXh0ZXJuIHZvaWQgKgpKU19HZXRGcmFtZVByaW5jaXBhbEFy
cmF5KEpTQ29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAqZnApOwoKCmV4dGVybiBKU09iamVjdCAq
CkpTX0dldEZyYW1lT2JqZWN0KEpTQ29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAqZnApOwoKZXh0
ZXJuIEpTT2JqZWN0ICoKSlNfR2V0RnJhbWVTY29wZUNoYWluKEpTQ29udGV4dCAqY3gsIEpTU3Rh
Y2tGcmFtZSAqZnApOwoKZXh0ZXJuIEpTT2JqZWN0ICoKSlNfR2V0RnJhbWVDYWxsT2JqZWN0KEpT
Q29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAqZnApOwoKZXh0ZXJuIEpTT2JqZWN0ICoKSlNfR2V0
RnJhbWVUaGlzKEpTQ29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAqZnApOwoKZXh0ZXJuIEpTRnVu
Y3Rpb24gKgpKU19HZXRGcmFtZUZ1bmN0aW9uKEpTQ29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAq
ZnApOwoKZXh0ZXJuIEpTT2JqZWN0ICoKSlNfR2V0RnJhbWVGdW5jdGlvbk9iamVjdChKU0NvbnRl
eHQgKmN4LCBKU1N0YWNrRnJhbWUgKmZwKTsKCgoKZXh0ZXJuIEpTQm9vbApKU19Jc0NvbnN0cnVj
dG9yRnJhbWUoSlNDb250ZXh0ICpjeCwgSlNTdGFja0ZyYW1lICpmcCk7CgpleHRlcm4gSlNCb29s
CkpTX0lzRGVidWdnZXJGcmFtZShKU0NvbnRleHQgKmN4LCBKU1N0YWNrRnJhbWUgKmZwKTsKCmV4
dGVybiBqc3ZhbApKU19HZXRGcmFtZVJldHVyblZhbHVlKEpTQ29udGV4dCAqY3gsIEpTU3RhY2tG
cmFtZSAqZnApOwoKZXh0ZXJuIHZvaWQKSlNfU2V0RnJhbWVSZXR1cm5WYWx1ZShKU0NvbnRleHQg
KmN4LCBKU1N0YWNrRnJhbWUgKmZwLCBqc3ZhbCBydmFsKTsKCgoKZXh0ZXJuIGNvbnN0IGNoYXIg
KgpKU19HZXRTY3JpcHRGaWxlbmFtZShKU0NvbnRleHQgKmN4LCBKU1NjcmlwdCAqc2NyaXB0KTsK
CmV4dGVybiB1aW50TgpKU19HZXRTY3JpcHRCYXNlTGluZU51bWJlcihKU0NvbnRleHQgKmN4LCBK
U1NjcmlwdCAqc2NyaXB0KTsKCmV4dGVybiB1aW50TgpKU19HZXRTY3JpcHRMaW5lRXh0ZW50KEpT
Q29udGV4dCAqY3gsIEpTU2NyaXB0ICpzY3JpcHQpOwoKZXh0ZXJuIEpTVmVyc2lvbgpKU19HZXRT
Y3JpcHRWZXJzaW9uKEpTQ29udGV4dCAqY3gsIEpTU2NyaXB0ICpzY3JpcHQpOwojIDIxNyAiLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzZGJnYXBpLmgiCmV4dGVybiB2b2lkCkpTX1NldE5ld1Nj
cmlwdEhvb2tQcm9jKEpTUnVudGltZSAqcnQsIEpTTmV3U2NyaXB0SG9vayBob29rLCB2b2lkICpj
YWxsZXJkYXRhKTsKCmV4dGVybiB2b2lkCkpTX1NldERlc3Ryb3lTY3JpcHRIb29rUHJvYyhKU1J1
bnRpbWUgKnJ0LCBKU0Rlc3Ryb3lTY3JpcHRIb29rIGhvb2ssCiAgICAgICAgICAgICAgICAgICAg
ICAgIHZvaWQgKmNhbGxlcmRhdGEpOwoKCgpleHRlcm4gSlNCb29sCkpTX0V2YWx1YXRlVUNJblN0
YWNrRnJhbWUoSlNDb250ZXh0ICpjeCwgSlNTdGFja0ZyYW1lICpmcCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBqc2NoYXIgKmJ5dGVzLCB1aW50TiBsZW5ndGgsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIHVpbnROIGxpbmVubywKICAgICAg
ICAgICAgICAgICAgICAgICAgICBqc3ZhbCAqcnZhbCk7CgpleHRlcm4gSlNCb29sCkpTX0V2YWx1
YXRlSW5TdGFja0ZyYW1lKEpTQ29udGV4dCAqY3gsIEpTU3RhY2tGcmFtZSAqZnAsCiAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ5dGVzLCB1aW50TiBsZW5ndGgsCiAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1aW50TiBsaW5lbm8sCiAgICAg
ICAgICAgICAgICAgICAgICAgIGpzdmFsICpydmFsKTsKCgoKdHlwZWRlZiBzdHJ1Y3QgSlNQcm9w
ZXJ0eURlc2MgewogICAganN2YWwgaWQ7CiAgICBqc3ZhbCB2YWx1ZTsKICAgIHVpbnQ4IGZsYWdz
OwogICAgdWludDggc3BhcmU7CiAgICB1aW50MTYgc2xvdDsKICAgIGpzdmFsIGFsaWFzOwp9IEpT
UHJvcGVydHlEZXNjOwojIDI2MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2pzL2pzZGJnYXBpLmgi
CnR5cGVkZWYgc3RydWN0IEpTUHJvcGVydHlEZXNjQXJyYXkgewogICAgdWludDMyIGxlbmd0aDsK
ICAgIEpTUHJvcGVydHlEZXNjICphcnJheTsKfSBKU1Byb3BlcnR5RGVzY0FycmF5OwoKZXh0ZXJu
IEpTU2NvcGVQcm9wZXJ0eSAqCkpTX1Byb3BlcnR5SXRlcmF0b3IoSlNPYmplY3QgKm9iaiwgSlNT
Y29wZVByb3BlcnR5ICoqaXRlcmF0b3JwKTsKCmV4dGVybiBKU0Jvb2wKSlNfR2V0UHJvcGVydHlE
ZXNjKEpTQ29udGV4dCAqY3gsIEpTT2JqZWN0ICpvYmosIEpTU2NvcGVQcm9wZXJ0eSAqc3Byb3As
CiAgICAgICAgICAgICAgICAgICBKU1Byb3BlcnR5RGVzYyAqcGQpOwoKZXh0ZXJuIEpTQm9vbApK
U19HZXRQcm9wZXJ0eURlc2NBcnJheShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqLCBKU1By
b3BlcnR5RGVzY0FycmF5ICpwZGEpOwoKZXh0ZXJuIHZvaWQKSlNfUHV0UHJvcGVydHlEZXNjQXJy
YXkoSlNDb250ZXh0ICpjeCwgSlNQcm9wZXJ0eURlc2NBcnJheSAqcGRhKTsKCgoKZXh0ZXJuIEpT
Qm9vbApKU19TZXREZWJ1Z2dlckhhbmRsZXIoSlNSdW50aW1lICpydCwgSlNUcmFwSGFuZGxlciBo
YW5kbGVyLCB2b2lkICpjbG9zdXJlKTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0U291cmNlSGFuZGxl
cihKU1J1bnRpbWUgKnJ0LCBKU1NvdXJjZUhhbmRsZXIgaGFuZGxlciwgdm9pZCAqY2xvc3VyZSk7
CgpleHRlcm4gSlNCb29sCkpTX1NldEV4ZWN1dGVIb29rKEpTUnVudGltZSAqcnQsIEpTSW50ZXJw
cmV0ZXJIb29rIGhvb2ssIHZvaWQgKmNsb3N1cmUpOwoKZXh0ZXJuIEpTQm9vbApKU19TZXRDYWxs
SG9vayhKU1J1bnRpbWUgKnJ0LCBKU0ludGVycHJldGVySG9vayBob29rLCB2b2lkICpjbG9zdXJl
KTsKCmV4dGVybiBKU0Jvb2wKSlNfU2V0T2JqZWN0SG9vayhKU1J1bnRpbWUgKnJ0LCBKU09iamVj
dEhvb2sgaG9vaywgdm9pZCAqY2xvc3VyZSk7CgpleHRlcm4gSlNCb29sCkpTX1NldFRocm93SG9v
ayhKU1J1bnRpbWUgKnJ0LCBKU1RyYXBIYW5kbGVyIGhvb2ssIHZvaWQgKmNsb3N1cmUpOwoKZXh0
ZXJuIEpTQm9vbApKU19TZXREZWJ1Z0Vycm9ySG9vayhKU1J1bnRpbWUgKnJ0LCBKU0RlYnVnRXJy
b3JIb29rIGhvb2ssIHZvaWQgKmNsb3N1cmUpOwoKCgpleHRlcm4gc2l6ZV90CkpTX0dldE9iamVj
dFRvdGFsU2l6ZShKU0NvbnRleHQgKmN4LCBKU09iamVjdCAqb2JqKTsKCmV4dGVybiBzaXplX3QK
SlNfR2V0RnVuY3Rpb25Ub3RhbFNpemUoSlNDb250ZXh0ICpjeCwgSlNGdW5jdGlvbiAqZnVuKTsK
CmV4dGVybiBzaXplX3QKSlNfR2V0U2NyaXB0VG90YWxTaXplKEpTQ29udGV4dCAqY3gsIEpTU2Ny
aXB0ICpzY3JpcHQpOwoKfQojIDYwICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKCgojIDEgIi4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSUNvbnRlbnQuaCIgMQojIDQzICIuLi8uLi8uLi9k
aXN0L2luY2x1ZGUvY29udGVudC9uc0lDb250ZW50LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL3dpZGdldC9uc0V2ZW50LmgiIDEKIyA1MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3dpZGdl
dC9uc0V2ZW50LmgiCmVudW0gbnNFdmVudFN0YXR1cyB7CgogIG5zRXZlbnRTdGF0dXNfZUlnbm9y
ZSwKCiAgbnNFdmVudFN0YXR1c19lQ29uc3VtZU5vRGVmYXVsdCwKCiAgbnNFdmVudFN0YXR1c19l
Q29uc3VtZURvRGVmYXVsdAp9OwoKc3RydWN0IG5zRXZlbnQ7CgpzdHJ1Y3QgbnNHVUlFdmVudDsK
c3RydWN0IG5zU2l6ZUV2ZW50OwpzdHJ1Y3QgbnNTaXplTW9kZUV2ZW50OwpzdHJ1Y3QgbnNaTGV2
ZWxFdmVudDsKc3RydWN0IG5zUGFpbnRFdmVudDsKc3RydWN0IG5zU2Nyb2xsYmFyRXZlbnQ7CnN0
cnVjdCBuc1Njcm9sbFBvcnRFdmVudDsKc3RydWN0IG5zSW5wdXRFdmVudDsKc3RydWN0IG5zTW91
c2VFdmVudDsKc3RydWN0IG5zQWNjZXNzaWJsZUV2ZW50OwpzdHJ1Y3QgbnNLZXlFdmVudDsKc3Ry
dWN0IG5zVGV4dEV2ZW50OwpzdHJ1Y3QgbnNDb21wb3NpdGlvbkV2ZW50OwpzdHJ1Y3QgbnNNb3Vz
ZVNjcm9sbEV2ZW50OwpzdHJ1Y3QgbnNSZWNvbnZlcnNpb25FdmVudDsKc3RydWN0IG5zVG9vbHRp
cEV2ZW50OwpzdHJ1Y3QgbnNNZW51RXZlbnQ7CgpzdHJ1Y3QgbnNUZXh0RXZlbnRSZXBseTsKc3Ry
dWN0IG5zUmVjb252ZXJzaW9uRXZlbnRSZXBseTsKIyA0NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L2NvbnRlbnQvbnNJQ29udGVudC5oIiAyCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250
ZW50L25zQ29udGVudEVycm9ycy5oIiAxCiMgNDYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250
ZW50L25zSUNvbnRlbnQuaCIgMgoKCmNsYXNzIG5zSUF0b207CmNsYXNzIG5zSURvY3VtZW50Owpj
bGFzcyBuc0lQcmVzQ29udGV4dDsKY2xhc3MgbnNWb2lkQXJyYXk7CmNsYXNzIG5zSURPTUV2ZW50
OwpjbGFzcyBuc0lDb250ZW50OwpjbGFzcyBuc0lTdXBwb3J0c0FycmF5OwpjbGFzcyBuc0lET01S
YW5nZTsKY2xhc3MgbnNJU2l6ZU9mSGFuZGxlcjsKY2xhc3MgbnNJTm9kZUluZm87CmNsYXNzIG5z
SUV2ZW50TGlzdGVuZXJNYW5hZ2VyOwojIDY5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVu
dC9uc0lDb250ZW50LmgiCmNsYXNzIG5zSUNvbnRlbnQgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewpw
dWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlE
IGlpZCA9IHsgMHg3ODAzMDIyMCwgMHg5NDQ3LCAweDExZDEsIHsweDkzLCAweDIzLCAweDAwLCAw
eDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyfSB9OyByZXR1cm4gaWlkO30KCgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0RG9jdW1lbnQobnNJRG9jdW1lbnQqJiBhUmVzdWx0KSBjb25zdCA9IDA7
CiMgODcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSUNvbnRlbnQuaCIKICB2aXJ0
dWFsIG5zcmVzdWx0IFNldERvY3VtZW50KG5zSURvY3VtZW50KiBhRG9jdW1lbnQsIFBSQm9vbCBh
RGVlcCwgUFJCb29sIGFDb21waWxlRXZlbnRIYW5kbGVycykgPSAwOwoKCgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRQYXJlbnQobnNJQ29udGVudComIGFSZXN1bHQpIGNvbnN0ID0gMDsKCgoKCgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBhcmVudChuc0lDb250ZW50KiBhUGFyZW50KSA9IDA7CgoK
CgoKCiAgdmlydHVhbCBQUkJvb2wgSXNOYXRpdmVBbm9ueW1vdXMoKSBjb25zdCA9IDA7CgoKCgoK
CiAgdmlydHVhbCB2b2lkIFNldE5hdGl2ZUFub255bW91cyhQUkJvb2wgYUFub255bW91cykgPSAw
OwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROYW1lU3BhY2VJRChQUkludDMyJiBhUmVzdWx0
KSBjb25zdCA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRhZyhuc0lBdG9tKiYgYVJl
c3VsdCkgY29uc3QgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROb2RlSW5mbyhuc0lO
b2RlSW5mbyomIGFSZXN1bHQpIGNvbnN0ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2Fu
Q29udGFpbkNoaWxkcmVuKFBSQm9vbCYgYVJlc3VsdCkgY29uc3QgPSAwOwoKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBDaGlsZENvdW50KFBSSW50MzImIGFSZXN1bHQpIGNvbnN0ID0gMDsKCgoKCgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IENoaWxkQXQoUFJJbnQzMiBhSW5kZXgsIG5zSUNvbnRlbnQqJiBh
UmVzdWx0KSBjb25zdCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbmRleE9mKG5zSUNv
bnRlbnQqIGFQb3NzaWJsZUNoaWxkLCBQUkludDMyJiBhSW5kZXgpIGNvbnN0ID0gMDsKIyAxNzAg
Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSUNvbnRlbnQuaCIKICB2aXJ0dWFsIG5z
cmVzdWx0IEluc2VydENoaWxkQXQobnNJQ29udGVudCogYUtpZCwgUFJJbnQzMiBhSW5kZXgsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhTm90aWZ5LCBQUkJvb2wgYURlZXBTZXRE
b2N1bWVudCkgPSAwOwojIDE4MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJQ29u
dGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmVwbGFjZUNoaWxkQXQobnNJQ29udGVudCogYUtp
ZCwgUFJJbnQzMiBhSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYU5v
dGlmeSwgUFJCb29sIGFEZWVwU2V0RG9jdW1lbnQpID0gMDsKIyAxOTMgIi4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9jb250ZW50L25zSUNvbnRlbnQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEFwcGVuZENo
aWxkVG8obnNJQ29udGVudCogYUtpZCwgUFJCb29sIGFOb3RpZnksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBSQm9vbCBhRGVlcFNldERvY3VtZW50KSA9IDA7CiMgMjAzICIuLi8uLi8uLi9k
aXN0L2luY2x1ZGUvY29udGVudC9uc0lDb250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1v
dmVDaGlsZEF0KFBSSW50MzIgYUluZGV4LCBQUkJvb2wgYU5vdGlmeSkgPSAwOwojIDIxNSAiLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJQ29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1
bHQgTm9ybWFsaXplQXR0clN0cmluZyhjb25zdCBuc0FTdHJpbmcmIGFTdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSU5vZGVJbmZvKiYgYU5vZGVJbmZvKSA9IDA7CiMgMjMx
ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lDb250ZW50LmgiCiAgdmlydHVhbCBu
c3Jlc3VsdCBTZXRBdHRyKFBSSW50MzIgYU5hbWVTcGFjZUlELCBuc0lBdG9tKiBhTmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgbnNBU3RyaW5nJiBhVmFsdWUsCiAgICAgICAgICAgICAg
ICAgICAgIFBSQm9vbCBhTm90aWZ5KSA9IDA7CiMgMjQ4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv
Y29udGVudC9uc0lDb250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBdHRyKG5zSU5vZGVJ
bmZvKiBhTm9kZUluZm8sCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zQVN0cmluZyYgYVZh
bHVlLAogICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYU5vdGlmeSkgPSAwOwojIDI2NSAiLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJQ29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0QXR0cihQUkludDMyIGFOYW1lU3BhY2VJRCwgbnNJQXRvbSogYU5hbWUsCiAgICAgICAg
ICAgICAgICAgICAgIG5zQVN0cmluZyYgYVJlc3VsdCkgY29uc3QgPSAwOwojIDI4MyAiLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJQ29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0QXR0cihQUkludDMyIGFOYW1lU3BhY2VJRCwgbnNJQXRvbSogYU5hbWUsCiAgICAgICAgICAg
ICAgICAgICAgIG5zSUF0b20qJiBhUHJlZml4LCBuc0FTdHJpbmcmIGFSZXN1bHQpIGNvbnN0ID0g
MDsKIyAyOTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSUNvbnRlbnQuaCIKICB2
aXJ0dWFsIFBSQm9vbCBIYXNBdHRyKFBSSW50MzIgYU5hbWVTcGFjZUlELCBuc0lBdG9tKiBhTmFt
ZSkgY29uc3QgPSAwOwojIDMwNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJQ29u
dGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgVW5zZXRBdHRyKFBSSW50MzIgYU5hbWVTcGFjZUlE
LCBuc0lBdG9tKiBhQXR0ciwKICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYU5vdGlmeSkg
PSAwOwojIDMxNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJQ29udGVudC5oIgog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0QXR0ck5hbWVBdChQUkludDMyIGFJbmRleCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJJbnQzMiYgYU5hbWVTcGFjZUlELAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lBdG9tKiYgYU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SUF0b20qJiBhUHJlZml4KSBjb25zdCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRB
dHRyQ291bnQoUFJJbnQzMiYgYUNvdW50UmVzdWx0KSBjb25zdCA9IDA7CiMgMzQxICIuLi8uLi8u
Li9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lDb250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBS
YW5nZUFkZChuc0lET01SYW5nZSogYVJhbmdlKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
UmFuZ2VSZW1vdmUobnNJRE9NUmFuZ2UqIGFSYW5nZSkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldFJhbmdlTGlzdChuc1ZvaWRBcnJheSomIGFSZXN1bHQpIGNvbnN0ID0gMDsKIyAzODUg
Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSUNvbnRlbnQuaCIKICB2aXJ0dWFsIG5z
cmVzdWx0IEhhbmRsZURPTUV2ZW50KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0V2ZW50KiBhRXZlbnQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lET01FdmVudCoqIGFET01FdmVudCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBSVWludDMyIGFGbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRXZl
bnRTdGF0dXMqIGFFdmVudFN0YXR1cykgPSAwOwojIDQwNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L2NvbnRlbnQvbnNJQ29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udGVudElEKFBS
VWludDMyKiBhSUQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRDb250ZW50SUQoUFJV
aW50MzIgYUlEKSA9IDA7CiMgNDIzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lD
b250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRGb2N1cyhuc0lQcmVzQ29udGV4dCogYVBy
ZXNDb250ZXh0KSA9IDA7CiMgNDM1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lD
b250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVGb2N1cyhuc0lQcmVzQ29udGV4dCog
YVByZXNDb250ZXh0KSA9IDA7CiMgNDQ0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9u
c0lDb250ZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCaW5kaW5nUGFyZW50KG5zSUNvbnRl
bnQqIGFDb250ZW50KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmluZGluZ1Bh
cmVudChuc0lDb250ZW50KiogYUNvbnRlbnQpID0gMDsKCgoKCiAgZW51bSB7CgogICAgZVRFWFQg
PSAweDAwMDAwMDAxLAoKICAgIGVFTEVNRU5UID0gMHgwMDAwMDAwMiwKCiAgICBlSFRNTCA9IDB4
MDAwMDAwMDQsCgogICAgZUhUTUxfRk9STV9DT05UUk9MID0gMHgwMDAwMDAwOCwKCiAgICBlWFVM
ID0gMHgwMDAwMDAxMAogIH07CiMgNDc5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9u
c0lDb250ZW50LmgiCiAgdmlydHVhbCBQUkJvb2wgSXNDb250ZW50T2ZUeXBlKFBSVWludDMyIGFG
bGFncykgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGlzdGVuZXJNYW5hZ2VyKG5z
SUV2ZW50TGlzdGVuZXJNYW5hZ2VyKiogYVJlc3VsdCkgPSAwOwojIDUxNCAiLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL2NvbnRlbnQvbnNJQ29udGVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRG9uZUNy
ZWF0aW5nRWxlbWVudCgpID0gMDsKIyA1NDggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50
L25zSUNvbnRlbnQuaCIKfTsKIyA2MyAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJRG9jdW1lbnQuaCIgMQojIDQ1ICIuLi8uLi8uLi9k
aXN0L2luY2x1ZGUvY29udGVudC9uc0lEb2N1bWVudC5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9jb250ZW50L25zQ2hhbmdlSGludC5oIiAxCiMgNDQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9jb250ZW50L25zQ2hhbmdlSGludC5oIgplbnVtIG5zQ2hhbmdlSGludCB7CiAgbnNDaGFuZ2VI
aW50X05vbmUgPSAwLAogIG5zQ2hhbmdlSGludF9Vbmtub3duID0gMHgwMSwKICBuc0NoYW5nZUhp
bnRfQXR0ckNoYW5nZSA9IDB4MDIsCiAgbnNDaGFuZ2VIaW50X0F1cmFsID0gMHgwNCwKICBuc0No
YW5nZUhpbnRfQ29udGVudCA9IDB4MDgsCiAgbnNDaGFuZ2VIaW50X1JlcGFpbnRGcmFtZSA9IDB4
MTAsCiAgbnNDaGFuZ2VIaW50X1JlZmxvd0ZyYW1lID0gMHgyMCwKICBuc0NoYW5nZUhpbnRfU3lu
Y0ZyYW1lVmlldyA9IDB4NDAsCiAgbnNDaGFuZ2VIaW50X1JlY29uc3RydWN0RnJhbWUgPSAweDgw
LAoKICBuc0NoYW5nZUhpbnRfUmVjb25zdHJ1Y3REb2MgPSAweDEwMAoKCgoKCn07CiMgNzggIi4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zQ2hhbmdlSGludC5oIgppbmxpbmUgbnNDaGFu
Z2VIaW50IE5TX0NvbWJpbmVIaW50KG5zQ2hhbmdlSGludCBhSDEsIG5zQ2hhbmdlSGludCBhSDIp
IHsKICByZXR1cm4gKG5zQ2hhbmdlSGludCkoYUgxIHwgYUgyKTsKfQoKCmlubGluZSBuc0NoYW5n
ZUhpbnQgTlNfU3VidHJhY3RIaW50KG5zQ2hhbmdlSGludCBhSDEsIG5zQ2hhbmdlSGludCBhSDIp
IHsKICByZXR1cm4gKG5zQ2hhbmdlSGludCkoYUgxICYgfmFIMik7Cn0KCgoKaW5saW5lIFBSQm9v
bCBOU19VcGRhdGVIaW50KG5zQ2hhbmdlSGludCYgYURlc3QsIG5zQ2hhbmdlSGludCBhU3JjKSB7
CiAgbnNDaGFuZ2VIaW50IHIgPSAobnNDaGFuZ2VIaW50KShhRGVzdCB8IGFTcmMpOwogIFBSQm9v
bCBjaGFuZ2VkID0gKGludClyICE9IChpbnQpYURlc3Q7CiAgYURlc3QgPSByOwogIHJldHVybiBj
aGFuZ2VkOwp9CgoKaW5saW5lIFBSQm9vbCBOU19Jc0hpbnRTdWJzZXQobnNDaGFuZ2VIaW50IGFT
dWJzZXQsIG5zQ2hhbmdlSGludCBhU3VwZXJTZXQpIHsKICByZXR1cm4gKGFTdWJzZXQgJiBhU3Vw
ZXJTZXQpID09IGFTdWJzZXQ7Cn0KCgpjb25zdCBuc0NoYW5nZUhpbnQgTlNfU1RZTEVfSElOVF9V
TktOT1dOID0gbnNDaGFuZ2VIaW50X1Vua25vd247CmNvbnN0IG5zQ2hhbmdlSGludCBOU19TVFlM
RV9ISU5UX05PTkUgPSBuc0NoYW5nZUhpbnRfTm9uZTsKY29uc3QgbnNDaGFuZ2VIaW50IE5TX1NU
WUxFX0hJTlRfQVRUUkNIQU5HRSA9IG5zQ2hhbmdlSGludF9BdHRyQ2hhbmdlOwpjb25zdCBuc0No
YW5nZUhpbnQgTlNfU1RZTEVfSElOVF9BVVJBTCA9IChuc0NoYW5nZUhpbnQpCiAgKG5zQ2hhbmdl
SGludF9BdHRyQ2hhbmdlIHwgbnNDaGFuZ2VIaW50X0F1cmFsKTsKY29uc3QgbnNDaGFuZ2VIaW50
IE5TX1NUWUxFX0hJTlRfQ09OVEVOVCA9IChuc0NoYW5nZUhpbnQpCiAgKG5zQ2hhbmdlSGludF9B
dHRyQ2hhbmdlIHwgbnNDaGFuZ2VIaW50X0F1cmFsIHwgbnNDaGFuZ2VIaW50X0NvbnRlbnQpOwpj
b25zdCBuc0NoYW5nZUhpbnQgTlNfU1RZTEVfSElOVF9WSVNVQUwgPSAobnNDaGFuZ2VIaW50KQog
IChuc0NoYW5nZUhpbnRfQXR0ckNoYW5nZSB8IG5zQ2hhbmdlSGludF9BdXJhbCB8IG5zQ2hhbmdl
SGludF9Db250ZW50IHwgbnNDaGFuZ2VIaW50X1JlcGFpbnRGcmFtZQogICB8IG5zQ2hhbmdlSGlu
dF9TeW5jRnJhbWVWaWV3KTsKY29uc3QgbnNDaGFuZ2VIaW50IE5TX1NUWUxFX0hJTlRfUkVGTE9X
ID0gKG5zQ2hhbmdlSGludCkKICAobnNDaGFuZ2VIaW50X0F0dHJDaGFuZ2UgfCBuc0NoYW5nZUhp
bnRfQXVyYWwgfCBuc0NoYW5nZUhpbnRfQ29udGVudCB8IG5zQ2hhbmdlSGludF9SZXBhaW50RnJh
bWUKICAgfCBuc0NoYW5nZUhpbnRfU3luY0ZyYW1lVmlldyB8IG5zQ2hhbmdlSGludF9SZWZsb3dG
cmFtZSk7CmNvbnN0IG5zQ2hhbmdlSGludCBOU19TVFlMRV9ISU5UX0ZSQU1FQ0hBTkdFID0gKG5z
Q2hhbmdlSGludCkKICAobnNDaGFuZ2VIaW50X0F0dHJDaGFuZ2UgfCBuc0NoYW5nZUhpbnRfQXVy
YWwgfCBuc0NoYW5nZUhpbnRfQ29udGVudCB8IG5zQ2hhbmdlSGludF9SZXBhaW50RnJhbWUKICAg
fCBuc0NoYW5nZUhpbnRfU3luY0ZyYW1lVmlldyB8IG5zQ2hhbmdlSGludF9SZWZsb3dGcmFtZSB8
IG5zQ2hhbmdlSGludF9SZWNvbnN0cnVjdEZyYW1lKTsKY29uc3QgbnNDaGFuZ2VIaW50IE5TX1NU
WUxFX0hJTlRfUkVDT05TVFJVQ1RfQUxMID0gKG5zQ2hhbmdlSGludCkKICAobnNDaGFuZ2VIaW50
X0F0dHJDaGFuZ2UgfCBuc0NoYW5nZUhpbnRfQXVyYWwgfCBuc0NoYW5nZUhpbnRfQ29udGVudCB8
IG5zQ2hhbmdlSGludF9SZXBhaW50RnJhbWUKICAgfCBuc0NoYW5nZUhpbnRfU3luY0ZyYW1lVmll
dyB8IG5zQ2hhbmdlSGludF9SZWZsb3dGcmFtZSB8IG5zQ2hhbmdlSGludF9SZWNvbnN0cnVjdEZy
YW1lCiAgIHwgbnNDaGFuZ2VIaW50X1JlY29uc3RydWN0RG9jKTsKIyA0NiAiLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL2NvbnRlbnQvbnNJRG9jdW1lbnQuaCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS94cGNvbS9uc0NPTUFycmF5LmgiIDEKIyA1MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw
Y29tL25zQ09NQXJyYXkuaCIKY2xhc3MgbnNDT01BcnJheV9iYXNlCnsKICAgIGZyaWVuZCBjbGFz
cyBuc0FycmF5Owpwcm90ZWN0ZWQ6CiAgICBuc0NPTUFycmF5X2Jhc2UoKSB7fQogICAgbnNDT01B
cnJheV9iYXNlKFBSSW50MzIgYUNvdW50KSA6IG1BcnJheShhQ291bnQpIHt9CiAgICBuc0NPTUFy
cmF5X2Jhc2UoY29uc3QgbnNDT01BcnJheV9iYXNlJiBvdGhlcik7CiAgICB+bnNDT01BcnJheV9i
YXNlKCk7CgogICAgUFJJbnQzMiBJbmRleE9mKG5zSVN1cHBvcnRzKiBhT2JqZWN0KSBjb25zdCB7
CiAgICAgICAgcmV0dXJuIG1BcnJheS5JbmRleE9mKGFPYmplY3QpOwogICAgfQoKICAgIFBSQm9v
bCBFbnVtZXJhdGVGb3J3YXJkcyhuc1ZvaWRBcnJheUVudW1GdW5jIGFGdW5jLCB2b2lkKiBhRGF0
YSkgewogICAgICAgIHJldHVybiBtQXJyYXkuRW51bWVyYXRlRm9yd2FyZHMoYUZ1bmMsIGFEYXRh
KTsKICAgIH0KCiAgICBQUkJvb2wgRW51bWVyYXRlQmFja3dhcmRzKG5zVm9pZEFycmF5RW51bUZ1
bmMgYUZ1bmMsIHZvaWQqIGFEYXRhKSB7CiAgICAgICAgcmV0dXJuIG1BcnJheS5FbnVtZXJhdGVC
YWNrd2FyZHMoYUZ1bmMsIGFEYXRhKTsKICAgIH0KCgoKCiAgICB2b2lkIENsZWFyKCk7CiAgICBQ
UkJvb2wgSW5zZXJ0T2JqZWN0QXQobnNJU3VwcG9ydHMqIGFPYmplY3QsIFBSSW50MzIgYUluZGV4
KTsKICAgIFBSQm9vbCBJbnNlcnRPYmplY3RzQXQoY29uc3QgbnNDT01BcnJheV9iYXNlJiBhT2Jq
ZWN0cywgUFJJbnQzMiBhSW5kZXgpOwogICAgUFJCb29sIFJlcGxhY2VPYmplY3RBdChuc0lTdXBw
b3J0cyogYU9iamVjdCwgUFJJbnQzMiBhSW5kZXgpOwogICAgUFJCb29sIEFwcGVuZE9iamVjdChu
c0lTdXBwb3J0cyAqYU9iamVjdCkgewogICAgICAgIHJldHVybiBJbnNlcnRPYmplY3RBdChhT2Jq
ZWN0LCBDb3VudCgpKTsKICAgIH0KICAgIFBSQm9vbCBBcHBlbmRPYmplY3RzKGNvbnN0IG5zQ09N
QXJyYXlfYmFzZSYgYU9iamVjdHMpIHsKICAgICAgICByZXR1cm4gSW5zZXJ0T2JqZWN0c0F0KGFP
YmplY3RzLCBDb3VudCgpKTsKICAgIH0KICAgIFBSQm9vbCBSZW1vdmVPYmplY3QobnNJU3VwcG9y
dHMgKmFPYmplY3QpOwogICAgUFJCb29sIFJlbW92ZU9iamVjdEF0KFBSSW50MzIgYUluZGV4KTsK
CnB1YmxpYzoKCgogICAgUFJJbnQzMiBDb3VudCgpIGNvbnN0IHsKICAgICAgICByZXR1cm4gbUFy
cmF5LkNvdW50KCk7CiAgICB9CgogICAgbnNEZXJpdmVkU2FmZTxuc0lTdXBwb3J0cz4qIE9iamVj
dEF0KFBSSW50MzIgYUluZGV4KSBjb25zdCB7CiAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8IG5zRGVyaXZlZFNhZmU8bnNJU3VwcG9ydHM+KiA+KG1BcnJheS5FbGVtZW50QXQoYUluZGV4
KSk7CiAgICB9CgogICAgbnNEZXJpdmVkU2FmZTxuc0lTdXBwb3J0cz4qIG9wZXJhdG9yW10oUFJJ
bnQzMiBhSW5kZXgpIGNvbnN0IHsKICAgICAgICByZXR1cm4gT2JqZWN0QXQoYUluZGV4KTsKICAg
IH0KCnByaXZhdGU6CgoKICAgIG5zVm9pZEFycmF5IG1BcnJheTsKCgogICAgbnNDT01BcnJheV9i
YXNlJiBvcGVyYXRvcj0oY29uc3QgbnNDT01BcnJheV9iYXNlJiBvdGhlcik7Cn07CiMgMTI5ICIu
Li8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNDT01BcnJheS5oIgp0ZW1wbGF0ZSA8Y2xhc3Mg
VD4KY2xhc3MgbnNDT01BcnJheSA6IHB1YmxpYyBuc0NPTUFycmF5X2Jhc2UKewogcHVibGljOgog
ICAgbnNDT01BcnJheSgpIHt9CiAgICBuc0NPTUFycmF5KFBSSW50MzIgYUNvdW50KSA6IG5zQ09N
QXJyYXlfYmFzZShhQ291bnQpIHt9CgoKCiAgICBuc0NPTUFycmF5KGNvbnN0IG5zQ09NQXJyYXk8
VD4mIGFPdGhlcikgOiBuc0NPTUFycmF5X2Jhc2UoYU90aGVyKSB7IH0KCiAgICB+bnNDT01BcnJh
eSgpIHt9CgoKICAgIG5zRGVyaXZlZFNhZmU8VD4qIE9iamVjdEF0KFBSSW50MzIgYUluZGV4KSBj
b25zdCB7CiAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8IG5zRGVyaXZlZFNhZmU8VD4q
ID4obnNDT01BcnJheV9iYXNlOjpPYmplY3RBdChhSW5kZXgpKTsKICAgIH0KCgogICAgbnNEZXJp
dmVkU2FmZTxUPiogb3BlcmF0b3JbXShQUkludDMyIGFJbmRleCkgY29uc3QgewogICAgICAgIHJl
dHVybiBPYmplY3RBdChhSW5kZXgpOwogICAgfQoKCiAgICBQUkludDMyIEluZGV4T2YoVCogYU9i
amVjdCkgY29uc3QgewogICAgICAgIHJldHVybiBuc0NPTUFycmF5X2Jhc2U6OkluZGV4T2Yoc3Rh
dGljX2Nhc3Q8IG5zSVN1cHBvcnRzKiA+KGFPYmplY3QpKTsKICAgIH0KCgoKICAgIFBSQm9vbCBJ
bnNlcnRPYmplY3RBdChUKiBhT2JqZWN0LCBQUkludDMyIGFJbmRleCkgewogICAgICAgIHJldHVy
biBuc0NPTUFycmF5X2Jhc2U6Okluc2VydE9iamVjdEF0KHN0YXRpY19jYXN0PCBuc0lTdXBwb3J0
cyogPihhT2JqZWN0KSwgYUluZGV4KTsKICAgIH0KCgoKICAgIFBSQm9vbCBJbnNlcnRPYmplY3Rz
QXQoY29uc3QgbnNDT01BcnJheTxUPiYgYU9iamVjdHMsIFBSSW50MzIgYUluZGV4KSB7CiAgICAg
ICAgcmV0dXJuIG5zQ09NQXJyYXlfYmFzZTo6SW5zZXJ0T2JqZWN0c0F0KGFPYmplY3RzLCBhSW5k
ZXgpOwogICAgfQoKCgogICAgUFJCb29sIFJlcGxhY2VPYmplY3RBdChUKiBhT2JqZWN0LCBQUklu
dDMyIGFJbmRleCkgewogICAgICAgIHJldHVybiBuc0NPTUFycmF5X2Jhc2U6OlJlcGxhY2VPYmpl
Y3RBdChzdGF0aWNfY2FzdDwgbnNJU3VwcG9ydHMqID4oYU9iamVjdCksIGFJbmRleCk7CiAgICB9
CgoKCgoKICAgIFBSSW50MzIgQ291bnQoKSBjb25zdCB7CiAgICAgICAgcmV0dXJuIG5zQ09NQXJy
YXlfYmFzZTo6Q291bnQoKTsKICAgIH0KCgogICAgdm9pZCBDbGVhcigpIHsKICAgICAgICBuc0NP
TUFycmF5X2Jhc2U6OkNsZWFyKCk7CiAgICB9CgoKCgogICAgdHlwZWRlZiBQUkJvb2wgKCogbnND
T01BcnJheUVudW1GdW5jKQogICAgICAgIChUKiBhRWxlbWVudCwgdm9pZCAqYURhdGEpOwoKCiAg
ICBQUkJvb2wgRW51bWVyYXRlRm9yd2FyZHMobnNDT01BcnJheUVudW1GdW5jIGFGdW5jLCB2b2lk
KiBhRGF0YSkgewogICAgICAgIHJldHVybiBuc0NPTUFycmF5X2Jhc2U6OkVudW1lcmF0ZUZvcndh
cmRzKG5zVm9pZEFycmF5RW51bUZ1bmMoYUZ1bmMpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFEYXRhKTsKICAgIH0KCiAgICBQUkJvb2wgRW51bWVy
YXRlQmFja3dhcmRzKG5zQ09NQXJyYXlFbnVtRnVuYyBhRnVuYywgdm9pZCogYURhdGEpIHsKICAg
ICAgICByZXR1cm4gbnNDT01BcnJheV9iYXNlOjpFbnVtZXJhdGVCYWNrd2FyZHMobnNWb2lkQXJy
YXlFbnVtRnVuYyhhRnVuYyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYURhdGEpOwogICAgfQoKCiAgICBQUkJvb2wgQXBwZW5kT2JqZWN0KFQgKmFP
YmplY3QpIHsKICAgICAgICByZXR1cm4gbnNDT01BcnJheV9iYXNlOjpBcHBlbmRPYmplY3Qoc3Rh
dGljX2Nhc3Q8IG5zSVN1cHBvcnRzKiA+KGFPYmplY3QpKTsKICAgIH0KCgogICAgUFJCb29sIEFw
cGVuZE9iamVjdHMoY29uc3QgbnNDT01BcnJheTxUPiYgYU9iamVjdHMpIHsKICAgICAgICByZXR1
cm4gbnNDT01BcnJheV9iYXNlOjpBcHBlbmRPYmplY3RzKGFPYmplY3RzKTsKICAgIH0KCgoKCiAg
ICBQUkJvb2wgUmVtb3ZlT2JqZWN0KFQgKmFPYmplY3QpIHsKICAgICAgICByZXR1cm4gbnNDT01B
cnJheV9iYXNlOjpSZW1vdmVPYmplY3Qoc3RhdGljX2Nhc3Q8IG5zSVN1cHBvcnRzKiA+KGFPYmpl
Y3QpKTsKICAgIH0KCgoKICAgIFBSQm9vbCBSZW1vdmVPYmplY3RBdChQUkludDMyIGFJbmRleCkg
ewogICAgICAgIHJldHVybiBuc0NPTUFycmF5X2Jhc2U6OlJlbW92ZU9iamVjdEF0KGFJbmRleCk7
CiAgICB9Cgpwcml2YXRlOgoKCiAgICBuc0NPTUFycmF5PFQ+JiBvcGVyYXRvcj0oY29uc3QgbnND
T01BcnJheTxUPiYgb3RoZXIpOwp9OwojIDQ3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVu
dC9uc0lEb2N1bWVudC5oIiAyCgpjbGFzcyBuc0lBdG9tOwpjbGFzcyBuc0lBcmVuYTsKY2xhc3Mg
bnNJQ29udGVudDsKY2xhc3MgbnNJRG9jdW1lbnRDb250YWluZXI7CmNsYXNzIG5zSURvY3VtZW50
T2JzZXJ2ZXI7CmNsYXNzIG5zSVByZXNDb250ZXh0OwpjbGFzcyBuc0lQcmVzU2hlbGw7CgpjbGFz
cyBuc0lTdHJlYW1MaXN0ZW5lcjsKY2xhc3MgbnNJU3RyZWFtT2JzZXJ2ZXI7CmNsYXNzIG5zSVN0
eWxlU2V0OwpjbGFzcyBuc0lTdHlsZVNoZWV0OwpjbGFzcyBuc0lTdHlsZVJ1bGU7CmNsYXNzIG5z
SVVSSTsKY2xhc3MgbnNJTG9hZEdyb3VwOwpjbGFzcyBuc0lWaWV3TWFuYWdlcjsKY2xhc3MgbnNJ
U2NyaXB0R2xvYmFsT2JqZWN0OwpjbGFzcyBuc0lET01FdmVudDsKY2xhc3MgbnNJRGV2aWNlQ29u
dGV4dDsKY2xhc3MgbnNJUGFyc2VyOwpjbGFzcyBuc0lET01Ob2RlOwpjbGFzcyBuc0lET01Eb2N1
bWVudEZyYWdtZW50OwpjbGFzcyBuc0lMaW5lQnJlYWtlcjsKY2xhc3MgbnNJV29yZEJyZWFrZXI7
CmNsYXNzIG5zSVNlbGVjdGlvbjsKY2xhc3MgbnNJQ2hhbm5lbDsKY2xhc3MgbnNJUHJpbmNpcGFs
OwpjbGFzcyBuc0lOb2RlSW5mb01hbmFnZXI7CmNsYXNzIG5zSURPTURvY3VtZW50OwpjbGFzcyBu
c0lET01Eb2N1bWVudFR5cGU7CmNsYXNzIG5zSUJpbmRpbmdNYW5hZ2VyOwpjbGFzcyBuc0lPYnNl
cnZlcjsKY2xhc3MgbnNJU3VwcG9ydHNBcnJheTsKY2xhc3MgbnNJU2NyaXB0TG9hZGVyOwpjbGFz
cyBuc1N0cmluZzsKY2xhc3MgbnNJQ29udGVudFNpbms7CmNsYXNzIG5zSVNjcmlwdEV2ZW50TWFu
YWdlcjsKIyAxMDAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSURvY3VtZW50Lmgi
CmNsYXNzIG5zSURvY3VtZW50IDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGljOgogIHN0YXRp
YyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4OTRj
NmNlYjAsIDB4OTQ0NywgMHgxMWQxLCB7MHg5MywgMHgyMywgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4
YSwgMHhkZCwgMHgzMn0gfTsgcmV0dXJuIGlpZDt9CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
QXJlbmEobnNJQXJlbmEqKiBhQXJlbmEpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBTdGFydERv
Y3VtZW50TG9hZChjb25zdCBjaGFyKiBhQ29tbWFuZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSUNoYW5uZWwqIGFDaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJTG9hZEdyb3VwKiBhTG9hZEdyb3VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJU3VwcG9ydHMqIGFDb250YWluZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lTdHJlYW1MaXN0ZW5lciAqKmFEb2NMaXN0ZW5lciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBSQm9vbCBhUmVzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lDb250ZW50U2luayogYVNpbmsgPSAwKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgU3RvcERv
Y3VtZW50TG9hZCgpID0gMDsKCgoKCiAgdmlydHVhbCBjb25zdCBuc1N0cmluZyogR2V0RG9jdW1l
bnRUaXRsZSgpIGNvbnN0ID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREb2N1bWVudFVS
TChuc0lVUkkqKiBhVVJMKSBjb25zdCA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREb2N1bWVu
dFVSTChuc0lVUkkqIGFVUkwpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmluY2lw
YWwobnNJUHJpbmNpcGFsICoqYVByaW5jaXBhbCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBBZGRQcmluY2lwYWwobnNJUHJpbmNpcGFsICphUHJpbmNpcGFsKSA9IDA7CgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0RG9jdW1lbnRMb2FkR3JvdXAobnNJTG9hZEdyb3VwKiogYUdyb3VwKSBj
b25zdCA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmFzZVVSTChuc0lVUkkqJiBhVVJM
KSBjb25zdCA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCYXNlVVJMKG5zSVVSSSogYVVSTCkg
PSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJhc2VUYXJnZXQobnNBU3RyaW5nICZhQmFz
ZVRhcmdldCk9MDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEJhc2VUYXJnZXQoY29uc3QgbnNBU3Ry
aW5nICZhQmFzZVRhcmdldCk9MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RG9jdW1lbnRD
aGFyYWN0ZXJTZXQobnNBU3RyaW5nJiBvQ2hhclNldElEKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs
dCBTZXREb2N1bWVudENoYXJhY3RlclNldChjb25zdCBuc0FTdHJpbmcmIGFDaGFyU2V0SUQpID0g
MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREb2N1bWVudENoYXJhY3RlclNldFNvdXJjZShQUklu
dDMyKiBhQ2hhcnNldFNvdXJjZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0RG9jdW1lbnRD
aGFyYWN0ZXJTZXRTb3VyY2UoUFJJbnQzMiBhQ2hhcnNldFNvdXJjZSkgPSAwOwoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgQWRkQ2hhclNldE9ic2VydmVyKG5zSU9ic2VydmVyKiBhT2JzZXJ2ZXIpID0g
MDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVDaGFyU2V0T2JzZXJ2ZXIobnNJT2JzZXJ2
ZXIqIGFPYnNlcnZlcikgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRlbnRUeXBl
KG5zQVN0cmluZyYgYUNvbnRlbnRUeXBlKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0
Q29udGVudFR5cGUoY29uc3QgbnNBU3RyaW5nJiBhQ29udGVudFR5cGUpID0gMDsKCgoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRDb250ZW50TGFuZ3VhZ2UobnNBU3RyaW5nJiBhQ29udGVudExhbmd1
YWdlKSBjb25zdCA9IDA7CiMgMTk5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lE
b2N1bWVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmlkaUVuYWJsZWQoUFJCb29sKiBhQmlk
aUVuYWJsZWQpIGNvbnN0ID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRCaWRpRW5h
YmxlZChQUkJvb2wgYUJpZGlFbmFibGVkKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
TGluZUJyZWFrZXIobnNJTGluZUJyZWFrZXIqKiBhUmVzdWx0KSA9IDA7CiAgdmlydHVhbCBuc3Jl
c3VsdCBTZXRMaW5lQnJlYWtlcihuc0lMaW5lQnJlYWtlciogYUxpbmVCcmVha2VyKSA9IDA7CiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRXb3JkQnJlYWtlcihuc0lXb3JkQnJlYWtlcioqIGFSZXN1bHQp
ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFdvcmRCcmVha2VyKG5zSVdvcmRCcmVha2VyKiBh
V29yZEJyZWFrZXIpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SGVhZGVyRGF0YShu
c0lBdG9tKiBhSGVhZGVyRmllbGQsIG5zQVN0cmluZyYgYURhdGEpIGNvbnN0ID0gMDsKICB2aXJ0
dWFsIG5zcmVzdWx0IFNldEhlYWRlckRhdGEobnNJQXRvbSogYWhlYWRlckZpZWxkLCBjb25zdCBu
c0FTdHJpbmcmIGFEYXRhKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVTaGVs
bChuc0lQcmVzQ29udGV4dCogYUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBuc0lW
aWV3TWFuYWdlciogYVZpZXdNYW5hZ2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5
bGVTZXQqIGFTdHlsZVNldCwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNTaGVsbCoq
IGFJbnN0YW5jZVB0clJlc3VsdCkgPSAwOwogIHZpcnR1YWwgUFJCb29sIERlbGV0ZVNoZWxsKG5z
SVByZXNTaGVsbCogYVNoZWxsKSA9IDA7CiAgdmlydHVhbCBQUkludDMyIEdldE51bWJlck9mU2hl
bGxzKCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2hlbGxBdChQUkludDMyIGFJbmRleCwg
bnNJUHJlc1NoZWxsKiogYVNoZWxsKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQ
YXJlbnREb2N1bWVudChuc0lEb2N1bWVudCoqIGFQYXJlbnQpID0gMDsKCgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBTZXRQYXJlbnREb2N1bWVudChuc0lEb2N1bWVudCogYVBhcmVudCkgPSAwOwoKCgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFN1YkRvY3VtZW50Rm9yKG5zSUNvbnRlbnQgKmFDb250ZW50
LCBuc0lEb2N1bWVudCogYVN1YkRvYykgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN1
YkRvY3VtZW50Rm9yKG5zSUNvbnRlbnQgKmFDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJRG9jdW1lbnQqKiBhU3ViRG9jKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgRmluZENvbnRlbnRGb3JTdWJEb2N1bWVudChuc0lEb2N1bWVudCAqYURvY3VtZW50LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50ICoqYUNvbnRlbnQp
ID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRSb290Q29udGVudChuc0lDb250ZW50Kiog
YVJvb3QpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJvb3RDb250ZW50KG5zSUNvbnRlbnQq
IGFSb290KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IENoaWxkQXQoUFJJbnQzMiBhSW5k
ZXgsIG5zSUNvbnRlbnQqJiBhUmVzdWx0KSBjb25zdCA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBJ
bmRleE9mKG5zSUNvbnRlbnQqIGFQb3NzaWJsZUNoaWxkLCBQUkludDMyJiBhSW5kZXgpIGNvbnN0
ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENoaWxkQ291bnQoUFJJbnQzMiYgYUNvdW50KSA9
IDA7CiMgMjk1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lEb2N1bWVudC5oIgog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0TnVtYmVyT2ZTdHlsZVNoZWV0cyhQUkJvb2wgYUluY2x1ZGVT
cGVjaWFsU2hlZXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMy
KiBhQ291bnQpID0gMDsKIyAzMDYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSURv
Y3VtZW50LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTdHlsZVNoZWV0QXQoUFJJbnQzMiBhSW5k
ZXgsIFBSQm9vbCBhSW5jbHVkZVNwZWNpYWxTaGVldHMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJU3R5bGVTaGVldCoqIGFTaGVldCkgPSAwOwojIDMxNiAiLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL2NvbnRlbnQvbnNJRG9jdW1lbnQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEluc2VydFN0
eWxlU2hlZXRBdChuc0lTdHlsZVNoZWV0KiBhU2hlZXQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJJbnQzMiBhSW5kZXgpID0gMDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRJbmRleE9mU3R5bGVTaGVldChuc0lTdHlsZVNoZWV0KiBhU2hlZXQsIFBSSW50MzIqIGFJbmRl
eCkgPSAwOwojIDMzNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJRG9jdW1lbnQu
aCIKICB2aXJ0dWFsIG5zcmVzdWx0IFVwZGF0ZVN0eWxlU2hlZXRzKG5zQ09NQXJyYXk8bnNJU3R5
bGVTaGVldD4mIGFPbGRTaGVldHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0NP
TUFycmF5PG5zSVN0eWxlU2hlZXQ+JiBhTmV3U2hlZXRzKSA9IDA7CgoKCgogIHZpcnR1YWwgdm9p
ZCBBZGRTdHlsZVNoZWV0KG5zSVN0eWxlU2hlZXQqIGFTaGVldCwgUFJVaW50MzIgYUZsYWdzKSA9
IDA7CgoKCgogIHZpcnR1YWwgdm9pZCBSZW1vdmVTdHlsZVNoZWV0KG5zSVN0eWxlU2hlZXQqIGFT
aGVldCkgPSAwOwoKCgoKCiAgdmlydHVhbCB2b2lkIFNldFN0eWxlU2hlZXRBcHBsaWNhYmxlU3Rh
dGUobnNJU3R5bGVTaGVldCogYVNoZWV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBSQm9vbCBhQXBwbGljYWJsZSkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0U2NyaXB0R2xvYmFsT2JqZWN0KG5zSVNjcmlwdEdsb2JhbE9iamVjdCoqIGFHbG9i
YWxPYmplY3QpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNjcmlwdEdsb2JhbE9iamVjdChu
c0lTY3JpcHRHbG9iYWxPYmplY3QqIGFHbG9iYWxPYmplY3QpID0gMDsKCgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRTY3JpcHRMb2FkZXIobnNJU2NyaXB0TG9hZGVyKiogYVNjcmlwdExvYWRlcikg
PSAwOwojIDM3NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJRG9jdW1lbnQuaCIK
ICB2aXJ0dWFsIHZvaWQgQWRkT2JzZXJ2ZXIobnNJRG9jdW1lbnRPYnNlcnZlciogYU9ic2VydmVy
KSA9IDA7CgoKCgoKICB2aXJ0dWFsIFBSQm9vbCBSZW1vdmVPYnNlcnZlcihuc0lEb2N1bWVudE9i
c2VydmVyKiBhT2JzZXJ2ZXIpID0gMDsKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEJlZ2luVXBkYXRl
KCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgRW5kVXBkYXRlKCkgPSAwOwogIHZpcnR1YWwgbnNy
ZXN1bHQgQmVnaW5Mb2FkKCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgRW5kTG9hZCgpID0gMDsK
ICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRlbnRDaGFuZ2VkKG5zSUNvbnRlbnQqIGFDb250ZW50LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3VwcG9ydHMqIGFTdWJDb250ZW50KSA9IDA7
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRlbnRTdGF0ZXNDaGFuZ2VkKG5zSUNvbnRlbnQqIGFD
b250ZW50MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFD
b250ZW50MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYVN0YXRl
TWFzaykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQXR0cmlidXRlV2lsbENoYW5nZShuc0lDb250
ZW50KiBhQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYU5h
bWVTcGFjZUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhQXR0
cmlidXRlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBBdHRyaWJ1dGVDaGFuZ2VkKG5zSUNvbnRl
bnQqIGFDaGlsZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhTmFtZVNw
YWNlSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFBdHRyaWJ1dGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYU1vZFR5cGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zQ2hhbmdlSGludCBhSGludCkgPSAwOwogIHZpcnR1YWwg
bnNyZXN1bHQgQ29udGVudEFwcGVuZGVkKG5zSUNvbnRlbnQqIGFDb250YWluZXIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhTmV3SW5kZXhJbkNvbnRhaW5lcikgPSAwOwog
IHZpcnR1YWwgbnNyZXN1bHQgQ29udGVudEluc2VydGVkKG5zSUNvbnRlbnQqIGFDb250YWluZXIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNoaWxkLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYUluZGV4SW5Db250YWluZXIpID0gMDsKICB2
aXJ0dWFsIG5zcmVzdWx0IENvbnRlbnRSZXBsYWNlZChuc0lDb250ZW50KiBhQ29udGFpbmVyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFPbGRDaGlsZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBhTmV3Q2hpbGQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhSW5kZXhJbkNvbnRhaW5lcikgPSAwOwogIHZpcnR1
YWwgbnNyZXN1bHQgQ29udGVudFJlbW92ZWQobnNJQ29udGVudCogYUNvbnRhaW5lciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDaGlsZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBSSW50MzIgYUluZGV4SW5Db250YWluZXIpID0gMDsKCgoKICB2aXJ0dWFs
IG5zcmVzdWx0IFN0eWxlUnVsZUNoYW5nZWQobnNJU3R5bGVTaGVldCogYVN0eWxlU2hlZXQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlUnVsZSogYVN0eWxlUnVsZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNDaGFuZ2VIaW50IGFIaW50KSA9IDA7CiAgdmly
dHVhbCBuc3Jlc3VsdCBTdHlsZVJ1bGVBZGRlZChuc0lTdHlsZVNoZWV0KiBhU3R5bGVTaGVldCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlUnVsZSogYVN0eWxlUnVsZSkgPSAw
OwogIHZpcnR1YWwgbnNyZXN1bHQgU3R5bGVSdWxlUmVtb3ZlZChuc0lTdHlsZVNoZWV0KiBhU3R5
bGVTaGVldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVSdWxlKiBhU3R5
bGVSdWxlKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlRE9NRXZlbnQobnNJUHJlc0Nv
bnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRXZlbnQq
IGFFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSURPTUV2ZW50KiogYURPTUV2
ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgYUZsYWdzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnNFdmVudFN0YXR1cyogYUV2ZW50U3RhdHVzKSA9IDA7Cgog
IHZpcnR1YWwgUFJCb29sIEV2ZW50Q2FwdHVyZVJlZ2lzdHJhdGlvbihQUkludDMyIGFDYXB0dXJl
ckluY3JlbWVudCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEZsdXNoUGVuZGluZ05vdGlmaWNh
dGlvbnMoUFJCb29sIGFGbHVzaFJlZmxvd3M9MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJCb29sIGFVcGRhdGVWaWV3cz0wKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0QW5kSW5jcmVtZW50Q29udGVudElEKFBSSW50MzIqIGFJRCkgPSAwOwoKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldEJpbmRpbmdNYW5hZ2VyKG5zSUJpbmRpbmdNYW5hZ2VyKiogYVJlc3VsdCkg
PSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5vZGVJbmZvTWFuYWdlcihuc0lOb2RlSW5mb01h
bmFnZXIqJiBhTm9kZUluZm9NYW5hZ2VyKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgUmVzZXQo
bnNJQ2hhbm5lbCogYUNoYW5uZWwsIG5zSUxvYWRHcm91cCogYUxvYWRHcm91cCkgPSAwOwogIHZp
cnR1YWwgbnNyZXN1bHQgUmVzZXRUb1VSSShuc0lVUkkgKmFVUkksIG5zSUxvYWRHcm91cCogYUxv
YWRHcm91cCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEFkZFJlZmVyZW5jZSh2b2lkICphS2V5
LCBuc0lTdXBwb3J0cyAqYVJlZmVyZW5jZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3Zl
UmVmZXJlbmNlKHZvaWQgKmFLZXksIG5zSVN1cHBvcnRzICoqYU9sZFJlZmVyZW5jZSkgPSAwOwoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENvbnRhaW5lcihuc0lTdXBwb3J0cyAqYUNvbnRhaW5l
cikgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRhaW5lcihuc0lTdXBwb3J0cyAq
KmFDb250YWluZXIpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTY3JpcHRFdmVudE1hbmFn
ZXIobnNJU2NyaXB0RXZlbnRNYW5hZ2VyICoqYVJlc3VsdCkgPSAwOwp9OwoKCgpleHRlcm4gbnNy
ZXN1bHQKICAgTlNfTmV3SFRNTERvY3VtZW50KG5zSURvY3VtZW50KiogYUluc3RhbmNlUHRyUmVz
dWx0KTsKCmV4dGVybiBuc3Jlc3VsdAogICBOU19OZXdYTUxEb2N1bWVudChuc0lEb2N1bWVudCoq
IGFJbnN0YW5jZVB0clJlc3VsdCk7CgoKCgoKCmV4dGVybiBuc3Jlc3VsdAogICBOU19OZXdJbWFn
ZURvY3VtZW50KG5zSURvY3VtZW50KiogYUluc3RhbmNlUHRyUmVzdWx0KTsKCmV4dGVybiBuc3Jl
c3VsdAogICBOU19OZXdEb2N1bWVudEZyYWdtZW50KG5zSURPTURvY3VtZW50RnJhZ21lbnQqKiBh
SW5zdGFuY2VQdHJSZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRG9jdW1lbnQq
IGFPd25lckRvY3VtZW50KTsKZXh0ZXJuIG5zcmVzdWx0CiAgIE5TX05ld0RPTURvY3VtZW50KG5z
SURPTURvY3VtZW50KiogYUluc3RhbmNlUHRyUmVzdWx0LAogICAgICAgICAgICAgICAgICAgICBj
b25zdCBuc0FTdHJpbmcmIGFOYW1lc3BhY2VVUkksCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IG5zQVN0cmluZyYgYVF1YWxpZmllZE5hbWUsCiAgICAgICAgICAgICAgICAgICAgIG5zSURPTURv
Y3VtZW50VHlwZSogYURvY3R5cGUsCiAgICAgICAgICAgICAgICAgICAgIG5zSVVSSSogYUJhc2VV
UkkpOwojIDY0ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1
ZGUvZG9tL25zSURPTURvY3VtZW50LmgiIDEKIyAxMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2Rv
bS9uc0lET01Eb2N1bWVudC5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9N
Tm9kZS5oIiAxCiMgMTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NTm9kZS5oIgoj
IDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vZG9tc3R1YnMuaCIgMQojIDE4ICIuLi8uLi8u
Li9kaXN0L2luY2x1ZGUvZG9tL2RvbXN0dWJzLmgiCmlubGluZSBQUkJvb2wgRE9NU3RyaW5nSXNO
dWxsKGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZykKewogIHJldHVybiBhU3RyaW5nLklzVm9pZCgp
Owp9CmlubGluZSB2b2lkIFNldERPTVN0cmluZ1RvTnVsbChuc0FTdHJpbmcmIGFTdHJpbmcpCnsK
ICBhU3RyaW5nLlRydW5jYXRlKCk7CiAgYVN0cmluZy5TZXRJc1ZvaWQoMSk7Cn0KdHlwZWRlZiBQ
UlVpbnQ2NCBET01UaW1lU3RhbXA7CgpjbGFzcyBuc0lET01BdHRyOwoKY2xhc3MgbnNJRE9NQ0RB
VEFTZWN0aW9uOwoKY2xhc3MgbnNJRE9NQ2hhcmFjdGVyRGF0YTsKCmNsYXNzIG5zSURPTUNvbW1l
bnQ7CgpjbGFzcyBuc0lET01ET01JbXBsZW1lbnRhdGlvbjsKCmNsYXNzIG5zSURPTURvY3VtZW50
OwoKY2xhc3MgbnNJRE9NRG9jdW1lbnRGcmFnbWVudDsKCmNsYXNzIG5zSURPTURvY3VtZW50VHlw
ZTsKCmNsYXNzIG5zSURPTUVsZW1lbnQ7CgpjbGFzcyBuc0lET01FbnRpdHk7CgpjbGFzcyBuc0lE
T01FbnRpdHlSZWZlcmVuY2U7CgpjbGFzcyBuc0lET01OU0RvY3VtZW50OwoKY2xhc3MgbnNJRE9N
TmFtZWROb2RlTWFwOwoKY2xhc3MgbnNJRE9NTm9kZTsKCmNsYXNzIG5zSURPTU5vZGVMaXN0OwoK
Y2xhc3MgbnNJRE9NTm90YXRpb247CgpjbGFzcyBuc0lET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb247
CgpjbGFzcyBuc0lET01UZXh0OwoKY2xhc3MgRE9NRXhjZXB0aW9uOwoKY2xhc3MgUmFuZ2VFeGNl
cHRpb247CgpjbGFzcyBuc0lET01TdHlsZVNoZWV0TGlzdDsKCmNsYXNzIG5zSURPTUxpbmtTdHls
ZTsKCmNsYXNzIG5zSURPTVN0eWxlU2hlZXQ7CgpjbGFzcyBuc0lET01NZWRpYUxpc3Q7CgpjbGFz
cyBuc0lET01BYnN0cmFjdFZpZXc7CgpjbGFzcyBuc0lET01Eb2N1bWVudFZpZXc7CgpjbGFzcyBu
c0lET01XaW5kb3c7CgpjbGFzcyBuc0lET01XaW5kb3dJbnRlcm5hbDsKCmNsYXNzIG5zSURPTVdp
bmRvd0NvbGxlY3Rpb247CgpjbGFzcyBuc0lET01QbHVnaW47CgpjbGFzcyBuc0lET01QbHVnaW5B
cnJheTsKCmNsYXNzIG5zSURPTU1pbWVUeXBlOwoKY2xhc3MgbnNJRE9NTWltZVR5cGVBcnJheTsK
CmNsYXNzIG5zSURPTUJhclByb3A7CgpjbGFzcyBuc0lET01OYXZpZ2F0b3I7CgpjbGFzcyBuc0lE
T01TY3JlZW47CgpjbGFzcyBuc0lET01IaXN0b3J5OwoKY2xhc3MgbnNJRE9NRXZlbnQ7CgpjbGFz
cyBuc0lET01FdmVudFRhcmdldDsKCmNsYXNzIG5zSURPTUV2ZW50TGlzdGVuZXI7CgpjbGFzcyBu
c0lET01FdmVudEdyb3VwOwoKY2xhc3MgbnNJRE9NSFRNTEVsZW1lbnQ7CgpjbGFzcyBuc0lET01I
VE1MRm9ybUVsZW1lbnQ7CgpjbGFzcyBuc0lET01IVE1MQ29sbGVjdGlvbjsKCmNsYXNzIG5zSURP
TUNTU1ZhbHVlOwoKY2xhc3MgbnNJRE9NQ1NTVmFsdWVMaXN0OwoKY2xhc3MgbnNJRE9NQ1NTUHJp
bWl0aXZlVmFsdWU7CgpjbGFzcyBuc0lET01DU1NSdWxlOwoKY2xhc3MgbnNJRE9NQ1NTUnVsZUxp
c3Q7CgpjbGFzcyBuc0lET01DU1NTdHlsZVNoZWV0OwoKY2xhc3MgbnNJRE9NQ1NTU3R5bGVEZWNs
YXJhdGlvbjsKCmNsYXNzIG5zSURPTUNvdW50ZXI7CgpjbGFzcyBuc0lET01SZWN0OwoKY2xhc3Mg
bnNJRE9NUkdCQ29sb3I7CgpjbGFzcyBuc0lET01DU1NTdHlsZVJ1bGU7CgpjbGFzcyBuc0lET01D
U1NTdHlsZVJ1bGVDb2xsZWN0aW9uOwoKY2xhc3MgbnNJRE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnQ7CgpjbGFzcyBuc0lET01IVE1MVGFibGVTZWN0aW9uRWxlbWVudDsKCmNsYXNzIG5zSURPTVJh
bmdlOwoKY2xhc3MgbnNJRE9NQ1JNRk9iamVjdDsKCmNsYXNzIG5zSURPTUNyeXB0bzsKCmNsYXNz
IG5zSURPTVBrY3MxMTsKIyAxMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01Ob2Rl
LmgiIDIKCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTTNOb2RlLmgiIDEK
IyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET00zTm9kZS5oIgpjbGFzcyBuc0lE
T00zTm9kZSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBu
c0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgyOWZiMmExOCwgMHgx
ZGQyLCAweDExYjIsIHsgMHg4ZCwgMHhkOSwgMHhhNiwgMHhmZCwgMHg1ZCwgMHg1YSwgMHhkMSwg
MHgyZiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJhc2VVUkkobnNB
U3RyaW5nICYgYUJhc2VVUkkpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ29tcGFyZURvY3Vt
ZW50UG9zaXRpb24obnNJRE9NTm9kZSAqb3RoZXIsIFBSVWludDE2ICpfcmV0dmFsKSA9IDA7CgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IElzU2FtZU5vZGUobnNJRE9NTm9kZSAqb3RoZXIsIFBSQm9vbCAq
X3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBMb29rdXBOYW1lc3BhY2VQcmVmaXgo
Y29uc3QgbnNBU3RyaW5nICYgbmFtZXNwYWNlVVJJLCBuc0FTdHJpbmcgJiBfcmV0dmFsKSA9IDA7
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IExvb2t1cE5hbWVzcGFjZVVSSShjb25zdCBuc0FTdHJpbmcg
JiBwcmVmaXgsIG5zQVN0cmluZyAmIF9yZXR2YWwpID0gMDsKCn07CiMgMTUgIi4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9kb20vbnNJRE9NTm9kZS5oIiAyCiMgMjkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9kb20vbnNJRE9NTm9kZS5oIgpjbGFzcyBuc0lET01Ob2RlIDogcHVibGljIG5zSVN1cHBvcnRz
IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0
IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MDdjLCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAw
eDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KIyA0NCAi
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01Ob2RlLmgiCiAgZW51bSB7IEVMRU1FTlRf
Tk9ERSA9IDFVIH07CgogIGVudW0geyBBVFRSSUJVVEVfTk9ERSA9IDJVIH07CgogIGVudW0geyBU
RVhUX05PREUgPSAzVSB9OwoKICBlbnVtIHsgQ0RBVEFfU0VDVElPTl9OT0RFID0gNFUgfTsKCiAg
ZW51bSB7IEVOVElUWV9SRUZFUkVOQ0VfTk9ERSA9IDVVIH07CgogIGVudW0geyBFTlRJVFlfTk9E
RSA9IDZVIH07CgogIGVudW0geyBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUgPSA3VSB9OwoK
ICBlbnVtIHsgQ09NTUVOVF9OT0RFID0gOFUgfTsKCiAgZW51bSB7IERPQ1VNRU5UX05PREUgPSA5
VSB9OwoKICBlbnVtIHsgRE9DVU1FTlRfVFlQRV9OT0RFID0gMTBVIH07CgogIGVudW0geyBET0NV
TUVOVF9GUkFHTUVOVF9OT0RFID0gMTFVIH07CgogIGVudW0geyBOT1RBVElPTl9OT0RFID0gMTJV
IH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5vZGVOYW1lKG5zQVN0cmluZyAmIGFOb2RlTmFt
ZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXROb2RlVmFsdWUobnNBU3RyaW5nICYgYU5v
ZGVWYWx1ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Tm9kZVZhbHVlKGNvbnN0IG5zQVN0
cmluZyAmIGFOb2RlVmFsdWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Tm9kZVR5cGUo
UFJVaW50MTYgKmFOb2RlVHlwZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJlbnRO
b2RlKG5zSURPTU5vZGUgKiAqYVBhcmVudE5vZGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0Q2hpbGROb2Rlcyhuc0lET01Ob2RlTGlzdCAqICphQ2hpbGROb2RlcykgPSAwOwoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRGaXJzdENoaWxkKG5zSURPTU5vZGUgKiAqYUZpcnN0Q2hpbGQpID0g
MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFzdENoaWxkKG5zSURPTU5vZGUgKiAqYUxhc3RD
aGlsZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmV2aW91c1NpYmxpbmcobnNJRE9N
Tm9kZSAqICphUHJldmlvdXNTaWJsaW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE5l
eHRTaWJsaW5nKG5zSURPTU5vZGUgKiAqYU5leHRTaWJsaW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldEF0dHJpYnV0ZXMobnNJRE9NTmFtZWROb2RlTWFwICogKmFBdHRyaWJ1dGVzKSA9
IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE93bmVyRG9jdW1lbnQobnNJRE9NRG9jdW1lbnQg
KiAqYU93bmVyRG9jdW1lbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5zZXJ0QmVmb3Jl
KG5zSURPTU5vZGUgKm5ld0NoaWxkLCBuc0lET01Ob2RlICpyZWZDaGlsZCwgbnNJRE9NTm9kZSAq
Kl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVwbGFjZUNoaWxkKG5zSURPTU5v
ZGUgKm5ld0NoaWxkLCBuc0lET01Ob2RlICpvbGRDaGlsZCwgbnNJRE9NTm9kZSAqKl9yZXR2YWwp
ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlQ2hpbGQobnNJRE9NTm9kZSAqb2xkQ2hp
bGQsIG5zSURPTU5vZGUgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFwcGVu
ZENoaWxkKG5zSURPTU5vZGUgKm5ld0NoaWxkLCBuc0lET01Ob2RlICoqX3JldHZhbCkgPSAwOwoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBIYXNDaGlsZE5vZGVzKFBSQm9vbCAqX3JldHZhbCkgPSAwOwoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBDbG9uZU5vZGUoUFJCb29sIGRlZXAsIG5zSURPTU5vZGUgKipf
cmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IE5vcm1hbGl6ZSh2b2lkKSA9IDA7CgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IElzU3VwcG9ydGVkKGNvbnN0IG5zQVN0cmluZyAmIGZlYXR1cmUs
IGNvbnN0IG5zQVN0cmluZyAmIHZlcnNpb24sIFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXROYW1lc3BhY2VVUkkobnNBU3RyaW5nICYgYU5hbWVzcGFjZVVSSSkg
PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcmVmaXgobnNBU3RyaW5nICYgYVByZWZpeCkg
PSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UHJlZml4KGNvbnN0IG5zQVN0cmluZyAmIGFQcmVm
aXgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TG9jYWxOYW1lKG5zQVN0cmluZyAmIGFM
b2NhbE5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSGFzQXR0cmlidXRlcyhQUkJvb2wg
Kl9yZXR2YWwpID0gMDsKCiAgZW51bSB7IERPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRCA9
IDMyVSB9OwoKICBlbnVtIHsgRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HID0gMVUgfTsKCiAg
ZW51bSB7IERPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORyA9IDJVIH07CgogIGVudW0geyBET0NV
TUVOVF9QT1NJVElPTl9DT05UQUlOUyA9IDRVIH07CgogIGVudW0geyBET0NVTUVOVF9QT1NJVElP
Tl9JU19DT05UQUlORUQgPSA4VSB9OwoKICBlbnVtIHsgRE9DVU1FTlRfUE9TSVRJT05fSU1QTEVN
RU5UQVRJT05fU1BFQ0lGSUMgPSAxNlUgfTsKCn07CiMgMTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9kb20vbnNJRE9NRG9jdW1lbnQuaCIgMgojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9t
L25zSURPTURvY3VtZW50LmgiCmNsYXNzIG5zSURPTURvY3VtZW50IDogcHVibGljIG5zSURPTU5v
ZGUgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29u
c3QgbnNJSUQgaWlkID0gezB4YTZjZjkwNzUsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUs
IDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQojIDQ1
ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTURvY3VtZW50LmgiCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXREb2N0eXBlKG5zSURPTURvY3VtZW50VHlwZSAqICphRG9jdHlwZSkgPSAwOwoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbXBsZW1lbnRhdGlvbihuc0lET01ET01JbXBsZW1lbnRh
dGlvbiAqICphSW1wbGVtZW50YXRpb24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RG9j
dW1lbnRFbGVtZW50KG5zSURPTUVsZW1lbnQgKiAqYURvY3VtZW50RWxlbWVudCkgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVFbGVtZW50KGNvbnN0IG5zQVN0cmluZyAmIHRhZ05hbWUs
IG5zSURPTUVsZW1lbnQgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0
ZURvY3VtZW50RnJhZ21lbnQobnNJRE9NRG9jdW1lbnRGcmFnbWVudCAqKl9yZXR2YWwpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlVGV4dE5vZGUoY29uc3QgbnNBU3RyaW5nICYgZGF0
YSwgbnNJRE9NVGV4dCAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRl
Q29tbWVudChjb25zdCBuc0FTdHJpbmcgJiBkYXRhLCBuc0lET01Db21tZW50ICoqX3JldHZhbCkg
PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVDREFUQVNlY3Rpb24oY29uc3QgbnNBU3Ry
aW5nICYgZGF0YSwgbnNJRE9NQ0RBVEFTZWN0aW9uICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBDcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oY29uc3QgbnNBU3RyaW5nICYg
dGFyZ2V0LCBjb25zdCBuc0FTdHJpbmcgJiBkYXRhLCBuc0lET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rp
b24gKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENyZWF0ZUF0dHJpYnV0ZShj
b25zdCBuc0FTdHJpbmcgJiBuYW1lLCBuc0lET01BdHRyICoqX3JldHZhbCkgPSAwOwoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBDcmVhdGVFbnRpdHlSZWZlcmVuY2UoY29uc3QgbnNBU3RyaW5nICYgbmFt
ZSwgbnNJRE9NRW50aXR5UmVmZXJlbmNlICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRFbGVtZW50c0J5VGFnTmFtZShjb25zdCBuc0FTdHJpbmcgJiB0YWduYW1lLCBuc0lE
T01Ob2RlTGlzdCAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW1wb3J0Tm9k
ZShuc0lET01Ob2RlICppbXBvcnRlZE5vZGUsIFBSQm9vbCBkZWVwLCBuc0lET01Ob2RlICoqX3Jl
dHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVFbGVtZW50TlMoY29uc3QgbnNB
U3RyaW5nICYgbmFtZXNwYWNlVVJJLCBjb25zdCBuc0FTdHJpbmcgJiBxdWFsaWZpZWROYW1lLCBu
c0lET01FbGVtZW50ICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVB
dHRyaWJ1dGVOUyhjb25zdCBuc0FTdHJpbmcgJiBuYW1lc3BhY2VVUkksIGNvbnN0IG5zQVN0cmlu
ZyAmIHF1YWxpZmllZE5hbWUsIG5zSURPTUF0dHIgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldEVsZW1lbnRzQnlUYWdOYW1lTlMoY29uc3QgbnNBU3RyaW5nICYgbmFtZXNw
YWNlVVJJLCBjb25zdCBuc0FTdHJpbmcgJiBsb2NhbE5hbWUsIG5zSURPTU5vZGVMaXN0ICoqX3Jl
dHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFbGVtZW50QnlJZChjb25zdCBuc0FT
dHJpbmcgJiBlbGVtZW50SWQsIG5zSURPTUVsZW1lbnQgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDY1
ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25z
SURPTVhNTERvY3VtZW50LmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lE
T01YTUxEb2N1bWVudC5oIgpjbGFzcyBuc0lET01YTUxEb2N1bWVudCA6IHB1YmxpYyBuc0lET01E
b2N1bWVudCB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp
YyBjb25zdCBuc0lJRCBpaWQgPSB7MHg4ODE2ZDAwMywgMHhlN2M4LCAweDQwNjUsIHsgMHg4OCwg
MHgyNywgMHg4MiwgMHg5YiwgMHg4ZCwgMHgwNywgMHhiNiwgMHhlMCB9fTsgcmV0dXJuIGlpZDt9
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IExvYWQoY29uc3QgbnNBU3RyaW5nICYgdXJsKSA9IDA7CiMg
NDIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NWE1MRG9jdW1lbnQuaCIKICB2aXJ0
dWFsIG5zcmVzdWx0IEV2YWx1YXRlRklYcHRyKGNvbnN0IG5zQVN0cmluZyAmIGV4cHJlc3Npb24s
IG5zSURPTVJhbmdlICoqX3JldHZhbCkgPSAwOwoKfTsKIyA2NiAibnNET01DbGFzc0luZm8uY3Bw
IiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU0RvY3VtZW50LmgiIDEK
IyAxNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU0RvY3VtZW50LmgiCmNsYXNz
IG5zSUJveE9iamVjdDsKCmNsYXNzIG5zSURPTUxvY2F0aW9uOwojIDI5ICIuLi8uLi8uLi9kaXN0
L2luY2x1ZGUvZG9tL25zSURPTU5TRG9jdW1lbnQuaCIKY2xhc3MgbnNJRE9NTlNEb2N1bWVudCA6
IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0
SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTBjZCwgMHgxNWIzLCAweDEx
ZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsg
cmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENoYXJhY3RlclNldChuc0FTdHJp
bmcgJiBhQ2hhcmFjdGVyU2V0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERpcihuc0FT
dHJpbmcgJiBhRGlyKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREaXIoY29uc3QgbnNBU3Ry
aW5nICYgYURpcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMb2NhdGlvbihuc0lET01M
b2NhdGlvbiAqICphTG9jYXRpb24pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGl0bGUo
bnNBU3RyaW5nICYgYVRpdGxlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUaXRsZShjb25z
dCBuc0FTdHJpbmcgJiBhVGl0bGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29udGVu
dFR5cGUobnNBU3RyaW5nICYgYUNvbnRlbnRUeXBlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldEJveE9iamVjdEZvcihuc0lET01FbGVtZW50ICplbHQsIG5zSUJveE9iamVjdCAqKl9yZXR2
YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Qm94T2JqZWN0Rm9yKG5zSURPTUVsZW1l
bnQgKmVsdCwgbnNJQm94T2JqZWN0ICpib3hPYmplY3QpID0gMDsKCn07CiMgNjcgIm5zRE9NQ2xh
c3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NRXZlbnQu
aCIgMQojIDE3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUV2ZW50LmgiCmNsYXNz
IG5zSURPTUV2ZW50VGFyZ2V0OwojIDI3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURP
TUV2ZW50LmgiCmNsYXNzIG5zSURPTUV2ZW50IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1Ymxp
YzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlp
ZCA9IHsweGE2NmI3YjgwLCAweGZmNDYsIDB4YmQ5NywgeyAweDAwLCAweDgwLCAweDVmLCAweDhh
LCAweGUzLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KIyA0NCAiLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL2RvbS9uc0lET01FdmVudC5oIgogIGVudW0geyBDQVBUVVJJTkdfUEhBU0Ug
PSAxVSB9OwoKCgoKICBlbnVtIHsgQVRfVEFSR0VUID0gMlUgfTsKCgoKCiAgZW51bSB7IEJVQkJM
SU5HX1BIQVNFID0gM1UgfTsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFR5cGUobnNBU3Ry
aW5nICYgYVR5cGUpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRhcmdldChuc0lE
T01FdmVudFRhcmdldCAqICphVGFyZ2V0KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0Q3VycmVudFRhcmdldChuc0lET01FdmVudFRhcmdldCAqICphQ3VycmVudFRhcmdldCkgPSAw
OwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RXZlbnRQaGFzZShQUlVpbnQxNiAqYUV2ZW50
UGhhc2UpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJ1YmJsZXMoUFJCb29sICph
QnViYmxlcykgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhbmNlbGFibGUoUFJC
b29sICphQ2FuY2VsYWJsZSkgPSAwOwojIDEwOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9u
c0lET01FdmVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VGltZVN0YW1wKERPTVRpbWVTdGFt
cCAqYVRpbWVTdGFtcCkgPSAwOwojIDEyMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lE
T01FdmVudC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU3RvcFByb3BhZ2F0aW9uKHZvaWQpID0gMDsK
IyAxMzUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NRXZlbnQuaCIKICB2aXJ0dWFs
IG5zcmVzdWx0IFByZXZlbnREZWZhdWx0KHZvaWQpID0gMDsKIyAxNjQgIi4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9kb20vbnNJRE9NRXZlbnQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEluaXRFdmVudChj
b25zdCBuc0FTdHJpbmcgJiBldmVudFR5cGVBcmcsIFBSQm9vbCBjYW5CdWJibGVBcmcsIFBSQm9v
bCBjYW5jZWxhYmxlQXJnKSA9IDA7Cgp9OwojIDY4ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAx
ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU5TRXZlbnQuaCIgMQojIDI1ICIuLi8u
Li8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU5TRXZlbnQuaCIKY2xhc3MgbnNJRE9NTlNFdmVu
dCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYg
R2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhOTA5NzdkZCwgMHhhODBiLCAw
eDQ5YmIsIHsgMHg4MSwgMHg2OSwgMHhjYywgMHg5MCwgMHhlMywgMHhkMSwgMHhkYSwgMHg5OCB9
fTsgcmV0dXJuIGlpZDt9CgogIGVudW0geyBNT1VTRURPV04gPSAxIH07CgogIGVudW0geyBNT1VT
RVVQID0gMiB9OwoKICBlbnVtIHsgTU9VU0VPVkVSID0gNCB9OwoKICBlbnVtIHsgTU9VU0VPVVQg
PSA4IH07CgogIGVudW0geyBNT1VTRU1PVkUgPSAxNiB9OwoKICBlbnVtIHsgTU9VU0VEUkFHID0g
MzIgfTsKCiAgZW51bSB7IENMSUNLID0gNjQgfTsKCiAgZW51bSB7IERCTENMSUNLID0gMTI4IH07
CgogIGVudW0geyBLRVlET1dOID0gMjU2IH07CgogIGVudW0geyBLRVlVUCA9IDUxMiB9OwoKICBl
bnVtIHsgS0VZUFJFU1MgPSAxMDI0IH07CgogIGVudW0geyBEUkFHRFJPUCA9IDIwNDggfTsKCiAg
ZW51bSB7IEZPQ1VTID0gNDA5NiB9OwoKICBlbnVtIHsgQkxVUiA9IDgxOTIgfTsKCiAgZW51bSB7
IFNFTEVDVCA9IDE2Mzg0IH07CgogIGVudW0geyBDSEFOR0UgPSAzMjc2OCB9OwoKICBlbnVtIHsg
UkVTRVQgPSA2NTUzNiB9OwoKICBlbnVtIHsgU1VCTUlUID0gMTMxMDcyIH07CgogIGVudW0geyBT
Q1JPTEwgPSAyNjIxNDQgfTsKCiAgZW51bSB7IExPQUQgPSA1MjQyODggfTsKCiAgZW51bSB7IFVO
TE9BRCA9IDEwNDg1NzYgfTsKCiAgZW51bSB7IFhGRVJfRE9ORSA9IDIwOTcxNTIgfTsKCiAgZW51
bSB7IEFCT1JUID0gNDE5NDMwNCB9OwoKICBlbnVtIHsgRVJST1IgPSA4Mzg4NjA4IH07CgogIGVu
dW0geyBMT0NBVEUgPSAxNjc3NzIxNiB9OwoKICBlbnVtIHsgTU9WRSA9IDMzNTU0NDMyIH07Cgog
IGVudW0geyBSRVNJWkUgPSA2NzEwODg2NCB9OwoKICBlbnVtIHsgRk9SV0FSRCA9IDEzNDIxNzcy
OCB9OwoKICBlbnVtIHsgSEVMUCA9IDI2ODQzNTQ1NiB9OwoKICBlbnVtIHsgQkFDSyA9IDUzNjg3
MDkxMiB9OwoKICBlbnVtIHsgVEVYVCA9IDEwNzM3NDE4MjQgfTsKCiAgZW51bSB7IEFMVF9NQVNL
ID0gMSB9OwoKICBlbnVtIHsgQ09OVFJPTF9NQVNLID0gMiB9OwoKICBlbnVtIHsgU0hJRlRfTUFT
SyA9IDQgfTsKCiAgZW51bSB7IE1FVEFfTUFTSyA9IDggfTsKCgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldE9yaWdpbmFsVGFyZ2V0KG5zSURPTUV2ZW50VGFyZ2V0ICogKmFPcmlnaW5hbFRhcmdldCkg
PSAwOwojIDExNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU0V2ZW50LmgiCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRFeHBsaWNpdE9yaWdpbmFsVGFyZ2V0KG5zSURPTUV2ZW50VGFy
Z2V0ICogKmFFeHBsaWNpdE9yaWdpbmFsVGFyZ2V0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldFRtcDEzUmVhbE9yaWdpbmFsVGFyZ2V0KG5zSURPTUV2ZW50VGFyZ2V0ICogKmFUbXAxM1Jl
YWxPcmlnaW5hbFRhcmdldCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBQcmV2ZW50QnViYmxl
KHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUHJldmVudENhcHR1cmUodm9pZCkgPSAw
OwoKfTsKIyA2OSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL2RvbS9uc0lET01LZXlFdmVudC5oIiAxCiMgMTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9k
b20vbnNJRE9NS2V5RXZlbnQuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURP
TVVJRXZlbnQuaCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVVJRXZl
bnQuaCIKY2xhc3MgbnNJRE9NVUlFdmVudCA6IHB1YmxpYyBuc0lET01FdmVudCB7CiBwdWJsaWM6
CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQg
PSB7MHhhNmNmOTBjMywgMHgxNWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwg
MHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldFZpZXcobnNJRE9NQWJzdHJhY3RWaWV3ICogKmFWaWV3KSA9IDA7CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldERldGFpbChQUkludDMyICphRGV0YWlsKSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEluaXRVSUV2ZW50KGNvbnN0IG5zQVN0cmluZyAmIHR5cGVBcmcsIFBSQm9vbCBjYW5C
dWJibGVBcmcsIFBSQm9vbCBjYW5jZWxhYmxlQXJnLCBuc0lET01BYnN0cmFjdFZpZXcgKnZpZXdB
cmcsIFBSSW50MzIgZGV0YWlsQXJnKSA9IDA7Cgp9OwojIDExICIuLi8uLi8uLi9kaXN0L2luY2x1
ZGUvZG9tL25zSURPTUtleUV2ZW50LmgiIDIKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2Rv
bS9uc0lET01LZXlFdmVudC5oIgpjbGFzcyBuc0lET01LZXlFdmVudCA6IHB1YmxpYyBuc0lET01V
SUV2ZW50IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGlj
IGNvbnN0IG5zSUlEIGlpZCA9IHsweDAyOGUwZTZlLCAweDhiMDEsIDB4MTFkMywgeyAweGFhLCAw
eGU3LCAweDAwLCAweDEwLCAweDgzLCAweDhhLCAweDMxLCAweDIzIH19OyByZXR1cm4gaWlkO30K
CiAgZW51bSB7IERPTV9WS19DQU5DRUwgPSAzVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0hFTFAgPSA2
VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0JBQ0tfU1BBQ0UgPSA4VSB9OwoKICBlbnVtIHsgRE9NX1ZL
X1RBQiA9IDlVIH07CgogIGVudW0geyBET01fVktfQ0xFQVIgPSAxMlUgfTsKCiAgZW51bSB7IERP
TV9WS19SRVRVUk4gPSAxM1UgfTsKCiAgZW51bSB7IERPTV9WS19FTlRFUiA9IDE0VSB9OwoKICBl
bnVtIHsgRE9NX1ZLX1NISUZUID0gMTZVIH07CgogIGVudW0geyBET01fVktfQ09OVFJPTCA9IDE3
VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0FMVCA9IDE4VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1BBVVNF
ID0gMTlVIH07CgogIGVudW0geyBET01fVktfQ0FQU19MT0NLID0gMjBVIH07CgogIGVudW0geyBE
T01fVktfRVNDQVBFID0gMjdVIH07CgogIGVudW0geyBET01fVktfU1BBQ0UgPSAzMlUgfTsKCiAg
ZW51bSB7IERPTV9WS19QQUdFX1VQID0gMzNVIH07CgogIGVudW0geyBET01fVktfUEFHRV9ET1dO
ID0gMzRVIH07CgogIGVudW0geyBET01fVktfRU5EID0gMzVVIH07CgogIGVudW0geyBET01fVktf
SE9NRSA9IDM2VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0xFRlQgPSAzN1UgfTsKCiAgZW51bSB7IERP
TV9WS19VUCA9IDM4VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1JJR0hUID0gMzlVIH07CgogIGVudW0g
eyBET01fVktfRE9XTiA9IDQwVSB9OwoKICBlbnVtIHsgRE9NX1ZLX1BSSU5UU0NSRUVOID0gNDRV
IH07CgogIGVudW0geyBET01fVktfSU5TRVJUID0gNDVVIH07CgogIGVudW0geyBET01fVktfREVM
RVRFID0gNDZVIH07CgogIGVudW0geyBET01fVktfMCA9IDQ4VSB9OwoKICBlbnVtIHsgRE9NX1ZL
XzEgPSA0OVUgfTsKCiAgZW51bSB7IERPTV9WS18yID0gNTBVIH07CgogIGVudW0geyBET01fVktf
MyA9IDUxVSB9OwoKICBlbnVtIHsgRE9NX1ZLXzQgPSA1MlUgfTsKCiAgZW51bSB7IERPTV9WS181
ID0gNTNVIH07CgogIGVudW0geyBET01fVktfNiA9IDU0VSB9OwoKICBlbnVtIHsgRE9NX1ZLXzcg
PSA1NVUgfTsKCiAgZW51bSB7IERPTV9WS184ID0gNTZVIH07CgogIGVudW0geyBET01fVktfOSA9
IDU3VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1NFTUlDT0xPTiA9IDU5VSB9OwoKICBlbnVtIHsgRE9N
X1ZLX0VRVUFMUyA9IDYxVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0EgPSA2NVUgfTsKCiAgZW51bSB7
IERPTV9WS19CID0gNjZVIH07CgogIGVudW0geyBET01fVktfQyA9IDY3VSB9OwoKICBlbnVtIHsg
RE9NX1ZLX0QgPSA2OFUgfTsKCiAgZW51bSB7IERPTV9WS19FID0gNjlVIH07CgogIGVudW0geyBE
T01fVktfRiA9IDcwVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0cgPSA3MVUgfTsKCiAgZW51bSB7IERP
TV9WS19IID0gNzJVIH07CgogIGVudW0geyBET01fVktfSSA9IDczVSB9OwoKICBlbnVtIHsgRE9N
X1ZLX0ogPSA3NFUgfTsKCiAgZW51bSB7IERPTV9WS19LID0gNzVVIH07CgogIGVudW0geyBET01f
VktfTCA9IDc2VSB9OwoKICBlbnVtIHsgRE9NX1ZLX00gPSA3N1UgfTsKCiAgZW51bSB7IERPTV9W
S19OID0gNzhVIH07CgogIGVudW0geyBET01fVktfTyA9IDc5VSB9OwoKICBlbnVtIHsgRE9NX1ZL
X1AgPSA4MFUgfTsKCiAgZW51bSB7IERPTV9WS19RID0gODFVIH07CgogIGVudW0geyBET01fVktf
UiA9IDgyVSB9OwoKICBlbnVtIHsgRE9NX1ZLX1MgPSA4M1UgfTsKCiAgZW51bSB7IERPTV9WS19U
ID0gODRVIH07CgogIGVudW0geyBET01fVktfVSA9IDg1VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1Yg
PSA4NlUgfTsKCiAgZW51bSB7IERPTV9WS19XID0gODdVIH07CgogIGVudW0geyBET01fVktfWCA9
IDg4VSB9OwoKICBlbnVtIHsgRE9NX1ZLX1kgPSA4OVUgfTsKCiAgZW51bSB7IERPTV9WS19aID0g
OTBVIH07CgogIGVudW0geyBET01fVktfTlVNUEFEMCA9IDk2VSB9OwoKICBlbnVtIHsgRE9NX1ZL
X05VTVBBRDEgPSA5N1UgfTsKCiAgZW51bSB7IERPTV9WS19OVU1QQUQyID0gOThVIH07CgogIGVu
dW0geyBET01fVktfTlVNUEFEMyA9IDk5VSB9OwoKICBlbnVtIHsgRE9NX1ZLX05VTVBBRDQgPSAx
MDBVIH07CgogIGVudW0geyBET01fVktfTlVNUEFENSA9IDEwMVUgfTsKCiAgZW51bSB7IERPTV9W
S19OVU1QQUQ2ID0gMTAyVSB9OwoKICBlbnVtIHsgRE9NX1ZLX05VTVBBRDcgPSAxMDNVIH07Cgog
IGVudW0geyBET01fVktfTlVNUEFEOCA9IDEwNFUgfTsKCiAgZW51bSB7IERPTV9WS19OVU1QQUQ5
ID0gMTA1VSB9OwoKICBlbnVtIHsgRE9NX1ZLX01VTFRJUExZID0gMTA2VSB9OwoKICBlbnVtIHsg
RE9NX1ZLX0FERCA9IDEwN1UgfTsKCiAgZW51bSB7IERPTV9WS19TRVBBUkFUT1IgPSAxMDhVIH07
CgogIGVudW0geyBET01fVktfU1VCVFJBQ1QgPSAxMDlVIH07CgogIGVudW0geyBET01fVktfREVD
SU1BTCA9IDExMFUgfTsKCiAgZW51bSB7IERPTV9WS19ESVZJREUgPSAxMTFVIH07CgogIGVudW0g
eyBET01fVktfRjEgPSAxMTJVIH07CgogIGVudW0geyBET01fVktfRjIgPSAxMTNVIH07CgogIGVu
dW0geyBET01fVktfRjMgPSAxMTRVIH07CgogIGVudW0geyBET01fVktfRjQgPSAxMTVVIH07Cgog
IGVudW0geyBET01fVktfRjUgPSAxMTZVIH07CgogIGVudW0geyBET01fVktfRjYgPSAxMTdVIH07
CgogIGVudW0geyBET01fVktfRjcgPSAxMThVIH07CgogIGVudW0geyBET01fVktfRjggPSAxMTlV
IH07CgogIGVudW0geyBET01fVktfRjkgPSAxMjBVIH07CgogIGVudW0geyBET01fVktfRjEwID0g
MTIxVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0YxMSA9IDEyMlUgfTsKCiAgZW51bSB7IERPTV9WS19G
MTIgPSAxMjNVIH07CgogIGVudW0geyBET01fVktfRjEzID0gMTI0VSB9OwoKICBlbnVtIHsgRE9N
X1ZLX0YxNCA9IDEyNVUgfTsKCiAgZW51bSB7IERPTV9WS19GMTUgPSAxMjZVIH07CgogIGVudW0g
eyBET01fVktfRjE2ID0gMTI3VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0YxNyA9IDEyOFUgfTsKCiAg
ZW51bSB7IERPTV9WS19GMTggPSAxMjlVIH07CgogIGVudW0geyBET01fVktfRjE5ID0gMTMwVSB9
OwoKICBlbnVtIHsgRE9NX1ZLX0YyMCA9IDEzMVUgfTsKCiAgZW51bSB7IERPTV9WS19GMjEgPSAx
MzJVIH07CgogIGVudW0geyBET01fVktfRjIyID0gMTMzVSB9OwoKICBlbnVtIHsgRE9NX1ZLX0Yy
MyA9IDEzNFUgfTsKCiAgZW51bSB7IERPTV9WS19GMjQgPSAxMzVVIH07CgogIGVudW0geyBET01f
VktfTlVNX0xPQ0sgPSAxNDRVIH07CgogIGVudW0geyBET01fVktfU0NST0xMX0xPQ0sgPSAxNDVV
IH07CgogIGVudW0geyBET01fVktfQ09NTUEgPSAxODhVIH07CgogIGVudW0geyBET01fVktfUEVS
SU9EID0gMTkwVSB9OwoKICBlbnVtIHsgRE9NX1ZLX1NMQVNIID0gMTkxVSB9OwoKICBlbnVtIHsg
RE9NX1ZLX0JBQ0tfUVVPVEUgPSAxOTJVIH07CgogIGVudW0geyBET01fVktfT1BFTl9CUkFDS0VU
ID0gMjE5VSB9OwoKICBlbnVtIHsgRE9NX1ZLX0JBQ0tfU0xBU0ggPSAyMjBVIH07CgogIGVudW0g
eyBET01fVktfQ0xPU0VfQlJBQ0tFVCA9IDIyMVUgfTsKCiAgZW51bSB7IERPTV9WS19RVU9URSA9
IDIyMlUgfTsKCiAgZW51bSB7IERPTV9WS19NRVRBID0gMjI0VSB9OwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRDaGFyQ29kZShQUlVpbnQzMiAqYUNoYXJDb2RlKSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldEtleUNvZGUoUFJVaW50MzIgKmFLZXlDb2RlKSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldEFsdEtleShQUkJvb2wgKmFBbHRLZXkpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0Q3RybEtleShQUkJvb2wgKmFDdHJsS2V5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldFNoaWZ0S2V5KFBSQm9vbCAqYVNoaWZ0S2V5KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldE1ldGFLZXkoUFJCb29sICphTWV0YUtleSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJ
bml0S2V5RXZlbnQoY29uc3QgbnNBU3RyaW5nICYgdHlwZUFyZywgUFJCb29sIGNhbkJ1YmJsZUFy
ZywgUFJCb29sIGNhbmNlbGFibGVBcmcsIG5zSURPTUFic3RyYWN0VmlldyAqdmlld0FyZywgUFJC
b29sIGN0cmxLZXlBcmcsIFBSQm9vbCBhbHRLZXlBcmcsIFBSQm9vbCBzaGlmdEtleUFyZywgUFJC
b29sIG1ldGFLZXlBcmcsIFBSVWludDMyIGtleUNvZGVBcmcsIFBSVWludDMyIGNoYXJDb2RlQXJn
KSA9IDA7Cgp9OwojIDcwICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0
L2luY2x1ZGUvZG9tL25zSURPTUV2ZW50TGlzdGVuZXIuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0
L2luY2x1ZGUvZG9tL25zSURPTUV2ZW50TGlzdGVuZXIuaCIKY2xhc3MgbnNJRE9NRXZlbnRMaXN0
ZW5lciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJ
RCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhkZjMxYzEyMCwgMHhkZWQ2
LCAweDExZDEsIHsgMHhiZCwgMHg4NSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhlMywgMHhm
NCB9fTsgcmV0dXJuIGlpZDt9CiMgNDkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9N
RXZlbnRMaXN0ZW5lci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSGFuZGxlRXZlbnQobnNJRE9NRXZl
bnQgKmV2ZW50KSA9IDA7Cgp9OwojIDcxICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKCgojIDEgIi4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9kb2NzaGVsbC9uc0lEb2NTaGVsbC5oIiAxCiMgMTcgIi4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9kb2NzaGVsbC9uc0lEb2NTaGVsbC5oIgpjbGFzcyBuc0lQcmVzQ29u
dGV4dDsKY2xhc3MgbnNJUHJlc1NoZWxsOwpjbGFzcyBuc0lVUkk7CgpjbGFzcyBuc0lDb250ZW50
Vmlld2VyOwoKY2xhc3MgbnNJVVJJQ29udGVudExpc3RlbmVyOwoKY2xhc3MgbnNJQ2hyb21lRXZl
bnRIYW5kbGVyOwoKY2xhc3MgbnNJRG9jU2hlbGxMb2FkSW5mbzsKCmNsYXNzIG5zSURvY3VtZW50
Q2hhcnNldEluZm87CgpjbGFzcyBuc0lXZWJOYXZpZ2F0aW9uOwoKY2xhc3MgbnNJU2ltcGxlRW51
bWVyYXRvcjsKCmNsYXNzIG5zSUlucHV0U3RyZWFtOwoKY2xhc3MgbnNJUmVxdWVzdDsKCmNsYXNz
IG5zSVNIRW50cnk7CiMgNDkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb2NzaGVsbC9uc0lEb2NT
aGVsbC5oIgpjbGFzcyBuc0lEb2NTaGVsbCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6
CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQg
PSB7MHg2OWU1ZGUwMCwgMHg3YjhiLCAweDExZDMsIHsgMHhhZiwgMHg2MSwgMHgwMCwgMHhhMCwg
MHgyNCwgMHhmZiwgMHhjMCwgMHg4YyB9fTsgcmV0dXJuIGlpZDt9CiMgNzEgIi4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9kb2NzaGVsbC9uc0lEb2NTaGVsbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgTG9h
ZFVSSShuc0lVUkkgKnVyaSwgbnNJRG9jU2hlbGxMb2FkSW5mbyAqbG9hZEluZm8sIFBSVWludDMy
IGFMb2FkRmxhZ3MsIFBSQm9vbCBmaXJzdFBhcnR5KSA9IDA7CiMgOTMgIi4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9kb2NzaGVsbC9uc0lEb2NTaGVsbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgTG9hZFN0
cmVhbShuc0lJbnB1dFN0cmVhbSAqYVN0cmVhbSwgbnNJVVJJICphVVJJLCBjb25zdCBuc0FDU3Ry
aW5nICYgYUNvbnRlbnRUeXBlLCBjb25zdCBuc0FDU3RyaW5nICYgYUNvbnRlbnRDaGFyc2V0LCBu
c0lEb2NTaGVsbExvYWRJbmZvICphTG9hZEluZm8pID0gMDsKIyAxMTUgIi4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9kb2NzaGVsbC9uc0lEb2NTaGVsbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSW50ZXJu
YWxMb2FkKG5zSVVSSSAqYVVSSSwgbnNJVVJJICphUmVmZXJyZXIsIG5zSVN1cHBvcnRzICphT3du
ZXIsIFBSQm9vbCBhSW5oZXJpdE93bmVyLCBjb25zdCBQUlVuaWNoYXIgKmFXaW5kb3dUYXJnZXQs
IG5zSUlucHV0U3RyZWFtICphUG9zdERhdGFTdHJlYW0sIG5zSUlucHV0U3RyZWFtICphSGVhZGVy
c1N0cmVhbSwgUFJVaW50MzIgYUxvYWRGbGFncywgbnNJU0hFbnRyeSAqYVNIRW50cnksIFBSQm9v
bCBmaXJzdFBhcnR5LCBuc0lEb2NTaGVsbCAqKmFEb2NTaGVsbCwgbnNJUmVxdWVzdCAqKmFSZXF1
ZXN0KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVhdGVMb2FkSW5mbyhuc0lEb2NT
aGVsbExvYWRJbmZvICoqbG9hZEluZm8pID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFBy
ZXBhcmVGb3JOZXdDb250ZW50TW9kZWwodm9pZCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVz
dWx0IFNldEN1cnJlbnRVUkkobnNJVVJJICphVVJJKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBGaXJlVW5sb2FkTm90aWZpY2F0aW9uKHZvaWQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0UHJlc0NvbnRleHQobnNJUHJlc0NvbnRleHQgKiAqYVByZXNDb250ZXh0KSA9IDA7
CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByZXNTaGVsbChuc0lQcmVzU2hlbGwgKiAqYVBy
ZXNTaGVsbCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RWxkZXN0UHJlc1NoZWxs
KG5zSVByZXNTaGVsbCAqICphRWxkZXN0UHJlc1NoZWxsKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRDb250ZW50Vmlld2VyKG5zSUNvbnRlbnRWaWV3ZXIgKiAqYUNvbnRlbnRWaWV3
ZXIpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENocm9tZUV2ZW50SGFuZGxlcihu
c0lDaHJvbWVFdmVudEhhbmRsZXIgKiAqYUNocm9tZUV2ZW50SGFuZGxlcikgPSAwOwogIHZpcnR1
YWwgbnNyZXN1bHQgU2V0Q2hyb21lRXZlbnRIYW5kbGVyKG5zSUNocm9tZUV2ZW50SGFuZGxlciAq
IGFDaHJvbWVFdmVudEhhbmRsZXIpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBh
cmVudFVSSUNvbnRlbnRMaXN0ZW5lcihuc0lVUklDb250ZW50TGlzdGVuZXIgKiAqYVBhcmVudFVS
SUNvbnRlbnRMaXN0ZW5lcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGFyZW50VVJJQ29u
dGVudExpc3RlbmVyKG5zSVVSSUNvbnRlbnRMaXN0ZW5lciAqIGFQYXJlbnRVUklDb250ZW50TGlz
dGVuZXIpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERvY3VtZW50Q2hhcnNldElu
Zm8obnNJRG9jdW1lbnRDaGFyc2V0SW5mbyAqICphRG9jdW1lbnRDaGFyc2V0SW5mbykgPSAwOwog
IHZpcnR1YWwgbnNyZXN1bHQgU2V0RG9jdW1lbnRDaGFyc2V0SW5mbyhuc0lEb2N1bWVudENoYXJz
ZXRJbmZvICogYURvY3VtZW50Q2hhcnNldEluZm8pID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0QWxsb3dQbHVnaW5zKFBSQm9vbCAqYUFsbG93UGx1Z2lucykgPSAwOwogIHZpcnR1YWwg
bnNyZXN1bHQgU2V0QWxsb3dQbHVnaW5zKFBSQm9vbCBhQWxsb3dQbHVnaW5zKSA9IDA7CgoKCgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFsbG93SmF2YXNjcmlwdChQUkJvb2wgKmFBbGxvd0phdmFz
Y3JpcHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFsbG93SmF2YXNjcmlwdChQUkJvb2wg
YUFsbG93SmF2YXNjcmlwdCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBbGxvd01l
dGFSZWRpcmVjdHMoUFJCb29sICphQWxsb3dNZXRhUmVkaXJlY3RzKSA9IDA7CiAgdmlydHVhbCBu
c3Jlc3VsdCBTZXRBbGxvd01ldGFSZWRpcmVjdHMoUFJCb29sIGFBbGxvd01ldGFSZWRpcmVjdHMp
ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWxsb3dTdWJmcmFtZXMoUFJCb29sICph
QWxsb3dTdWJmcmFtZXMpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFsbG93U3ViZnJhbWVz
KFBSQm9vbCBhQWxsb3dTdWJmcmFtZXMpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
QWxsb3dJbWFnZXMoUFJCb29sICphQWxsb3dJbWFnZXMpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0
IFNldEFsbG93SW1hZ2VzKFBSQm9vbCBhQWxsb3dJbWFnZXMpID0gMDsKIyAyMzkgIi4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9kb2NzaGVsbC9uc0lEb2NTaGVsbC5oIgogIGVudW0geyBFTlVNRVJBVEVf
Rk9SV0FSRFMgPSAwIH07CgogIGVudW0geyBFTlVNRVJBVEVfQkFDS1dBUkRTID0gMSB9OwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXREb2NTaGVsbEVudW1lcmF0b3IoUFJJbnQzMiBhSXRlbVR5cGUs
IFBSSW50MzIgYURpcmVjdGlvbiwgbnNJU2ltcGxlRW51bWVyYXRvciAqKl9yZXR2YWwpID0gMDsK
CgoKCiAgZW51bSB7IEFQUF9UWVBFX1VOS05PV04gPSAwVSB9OwoKICBlbnVtIHsgQVBQX1RZUEVf
TUFJTCA9IDFVIH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFwcFR5cGUoUFJVaW50MzIgKmFB
cHBUeXBlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBcHBUeXBlKFBSVWludDMyIGFBcHBU
eXBlKSA9IDA7CiMgMjY2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9jc2hlbGwvbnNJRG9jU2hl
bGwuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFpvb20oZmxvYXQgKmFab29tKSA9IDA7CiAgdmly
dHVhbCBuc3Jlc3VsdCBTZXRab29tKGZsb2F0IGFab29tKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldE1hcmdpbldpZHRoKFBSSW50MzIgKmFNYXJnaW5XaWR0aCkgPSAwOwogIHZpcnR1YWwg
bnNyZXN1bHQgU2V0TWFyZ2luV2lkdGgoUFJJbnQzMiBhTWFyZ2luV2lkdGgpID0gMDsKCgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0TWFyZ2luSGVpZ2h0KFBSSW50MzIgKmFNYXJnaW5IZWlnaHQpID0g
MDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1hcmdpbkhlaWdodChQUkludDMyIGFNYXJnaW5IZWln
aHQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SGFzRm9jdXMoUFJCb29sICphSGFzRm9j
dXMpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEhhc0ZvY3VzKFBSQm9vbCBhSGFzRm9jdXMp
ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2FudmFzSGFzRm9jdXMoUFJCb29sICphQ2Fu
dmFzSGFzRm9jdXMpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldENhbnZhc0hhc0ZvY3VzKFBS
Qm9vbCBhQ2FudmFzSGFzRm9jdXMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgVGFiVG9UcmVl
T3duZXIoUFJCb29sIGZvcndhcmQsIFBSQm9vbCAqdG9va0ZvY3VzKSA9IDA7CgoKCgogIGVudW0g
eyBCVVNZX0ZMQUdTX05PTkUgPSAwVSB9OwoKICBlbnVtIHsgQlVTWV9GTEFHU19CVVNZID0gMVUg
fTsKCiAgZW51bSB7IEJVU1lfRkxBR1NfQkVGT1JFX1BBR0VfTE9BRCA9IDJVIH07CgogIGVudW0g
eyBCVVNZX0ZMQUdTX1BBR0VfTE9BRElORyA9IDRVIH07CgoKCgogIGVudW0geyBMT0FEX0NNRF9O
T1JNQUwgPSAxVSB9OwoKICBlbnVtIHsgTE9BRF9DTURfUkVMT0FEID0gMlUgfTsKCiAgZW51bSB7
IExPQURfQ01EX0hJU1RPUlkgPSA0VSB9OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCdXN5Rmxh
Z3MoUFJVaW50MzIgKmFCdXN5RmxhZ3MpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TG9h
ZFR5cGUoUFJVaW50MzIgKmFMb2FkVHlwZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TG9h
ZFR5cGUoUFJVaW50MzIgYUxvYWRUeXBlKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzQmVp
bmdEZXN0cm95ZWQoUFJCb29sICpfcmV0dmFsKSA9IDA7Cgp9OwojIDc0ICJuc0RPTUNsYXNzSW5m
by5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9jc2hlbGwvbnNJRG9jU2hlbGxU
cmVlSXRlbS5oIiAxCiMgMTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb2NzaGVsbC9uc0lEb2NT
aGVsbFRyZWVJdGVtLmgiCmNsYXNzIG5zSURvY1NoZWxsVHJlZU93bmVyOwojIDMyICIuLi8uLi8u
Li9kaXN0L2luY2x1ZGUvZG9jc2hlbGwvbnNJRG9jU2hlbGxUcmVlSXRlbS5oIgpjbGFzcyBuc0lE
b2NTaGVsbFRyZWVJdGVtIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGlj
IGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGI1MmFl
NzgwLCAweGE5NjYsIDB4MTFkMywgeyAweGFmLCAweGM3LCAweDAwLCAweGEwLCAweDI0LCAweGZm
LCAweGMwLCAweDhjIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFt
ZShQUlVuaWNoYXIgKiAqYU5hbWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE5hbWUoY29u
c3QgUFJVbmljaGFyICogYU5hbWUpID0gMDsKIyA0OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2Rv
Y3NoZWxsL25zSURvY1NoZWxsVHJlZUl0ZW0uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE5hbWVFcXVh
bHMoY29uc3QgUFJVbmljaGFyICpuYW1lLCBQUkJvb2wgKl9yZXR2YWwpID0gMDsKCiAgZW51bSB7
IHR5cGVDaHJvbWUgPSAwIH07CgogIGVudW0geyB0eXBlQ29udGVudCA9IDEgfTsKCiAgZW51bSB7
IHR5cGVDb250ZW50V3JhcHBlciA9IDIgfTsKCiAgZW51bSB7IHR5cGVDaHJvbWVXcmFwcGVyID0g
MyB9OwoKICBlbnVtIHsgdHlwZUFsbCA9IDIxNDc0ODM2NDcgfTsKCgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0SXRlbVR5cGUoUFJJbnQzMiAqYUl0ZW1UeXBlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs
dCBTZXRJdGVtVHlwZShQUkludDMyIGFJdGVtVHlwZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRQYXJlbnQobnNJRG9jU2hlbGxUcmVlSXRlbSAqICphUGFyZW50KSA9IDA7CiAgdmlydHVh
bCBuc3Jlc3VsdCBTZXRQYXJlbnQobnNJRG9jU2hlbGxUcmVlSXRlbSAqIGFQYXJlbnQpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2FtZVR5cGVQYXJlbnQobnNJRG9jU2hlbGxUcmVlSXRl
bSAqICphU2FtZVR5cGVQYXJlbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Um9vdFRy
ZWVJdGVtKG5zSURvY1NoZWxsVHJlZUl0ZW0gKiAqYVJvb3RUcmVlSXRlbSkgPSAwOwoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRTYW1lVHlwZVJvb3RUcmVlSXRlbShuc0lEb2NTaGVsbFRyZWVJdGVt
ICogKmFTYW1lVHlwZVJvb3RUcmVlSXRlbSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGaW5k
SXRlbVdpdGhOYW1lKGNvbnN0IFBSVW5pY2hhciAqbmFtZSwgbnNJU3VwcG9ydHMgKmFSZXF1ZXN0
b3IsIG5zSURvY1NoZWxsVHJlZUl0ZW0gKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldFRyZWVPd25lcihuc0lEb2NTaGVsbFRyZWVPd25lciAqICphVHJlZU93bmVyKSA9IDA7
CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRUcmVlT3duZXIobnNJRG9jU2hlbGxUcmVlT3duZXIgKiBh
VHJlZU93bmVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENoaWxkT2Zmc2V0KFBSSW50
MzIgKmFDaGlsZE9mZnNldCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q2hpbGRPZmZzZXQo
UFJJbnQzMiBhQ2hpbGRPZmZzZXQpID0gMDsKCn07CiMgNzUgIm5zRE9NQ2xhc3NJbmZvLmNwcCIg
MgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb2NzaGVsbC9uc0lEb2NTaGVsbFRyZWVOb2Rl
LmgiIDEKIyAzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvY3NoZWxsL25zSURvY1NoZWxsVHJl
ZU5vZGUuaCIKY2xhc3MgbnNJRG9jU2hlbGxUcmVlTm9kZSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7
CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBu
c0lJRCBpaWQgPSB7MHhjMDk0ZjgxMCwgMHhhOGFiLCAweDExZDMsIHsgMHhhZiwgMHhjNiwgMHgw
MCwgMHhhMCwgMHgyNCwgMHhmZiwgMHhjMCwgMHg4YyB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldENoaWxkQ291bnQoUFJJbnQzMiAqYUNoaWxkQ291bnQpID0gMDsKCgog
IHZpcnR1YWwgbnNyZXN1bHQgQWRkQ2hpbGQobnNJRG9jU2hlbGxUcmVlSXRlbSAqY2hpbGQpID0g
MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlQ2hpbGQobnNJRG9jU2hlbGxUcmVlSXRlbSAq
Y2hpbGQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q2hpbGRBdChQUkludDMyIGluZGV4
LCBuc0lEb2NTaGVsbFRyZWVJdGVtICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBGaW5kQ2hpbGRXaXRoTmFtZShjb25zdCBQUlVuaWNoYXIgKmFOYW1lLCBQUkJvb2wgYVJlY3Vy
c2UsIFBSQm9vbCBhU2FtZVR5cGUsIG5zSURvY1NoZWxsVHJlZUl0ZW0gKmFSZXF1ZXN0b3IsIG5z
SURvY1NoZWxsVHJlZUl0ZW0gKipfcmV0dmFsKSA9IDA7Cgp9OwojIDc2ICJuc0RPTUNsYXNzSW5m
by5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSVNjcmlwdEV4dGVybmFs
TmFtZVNldC5oIiAxCiMgNDggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJU2NyaXB0RXh0
ZXJuYWxOYW1lU2V0LmgiCmNsYXNzIG5zSVNjcmlwdENvbnRleHQ7CiMgNTggIi4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9kb20vbnNJU2NyaXB0RXh0ZXJuYWxOYW1lU2V0LmgiCmNsYXNzIG5zSVNjcmlw
dEV4dGVybmFsTmFtZVNldCA6IHB1YmxpYyBuc0lTdXBwb3J0cwp7CnB1YmxpYzoKICBzdGF0aWMg
Y29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkw
ZGEsIDB4MTViMywgMHgxMWQyLCB7MHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwg
MHhkZCwgMHgzMn19OyByZXR1cm4gaWlkO307CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdGlh
bGl6ZU5hbWVTZXQobnNJU2NyaXB0Q29udGV4dCogYVNjcmlwdENvbnRleHQpID0gMDsKfTsKIyA3
NyAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAibnNKU1V0aWxzLmgiIDEKIyA1MyAibnNKU1V0
aWxzLmgiCmNsYXNzIG5zSURPTUV2ZW50TGlzdGVuZXI7CmNsYXNzIG5zSVNjcmlwdENvbnRleHQ7
CmNsYXNzIG5zSVNjcmlwdEdsb2JhbE9iamVjdDsKY2xhc3MgbnNJU2NyaXB0U2VjdXJpdHlNYW5h
Z2VyOwoKY2xhc3MgbnNKU1V0aWxzIHsKcHVibGljOgogIHN0YXRpYyBKU0Jvb2wgR2V0Q2FsbGlu
Z0xvY2F0aW9uKEpTQ29udGV4dCogYUNvbnRleHQsIGNvbnN0IGNoYXIqICphRmlsZW5hbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJVaW50MzIgKmFMaW5lbm8pOwoKICBz
dGF0aWMgdm9pZCBDb252ZXJ0U3RyaW5nVG9KU1ZhbChjb25zdCBuc1N0cmluZyYgYVByb3AsIEpT
Q29udGV4dCogYUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganN2
YWwqIGFSZXR1cm4pOwoKICBzdGF0aWMgUFJCb29sIENvbnZlcnRKU1ZhbFRvWFBDT2JqZWN0KG5z
SVN1cHBvcnRzKiogYVN1cHBvcnRzLCBjb25zdCBuc0lJRCYgYUlJRCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEpTQ29udGV4dCogYUNvbnRleHQsIGpzdmFsIGFWYWx1
ZSk7CgogIHN0YXRpYyB2b2lkIENvbnZlcnRKU1ZhbFRvU3RyaW5nKG5zQVN0cmluZyYgYVN0cmlu
ZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0NvbnRleHQqIGFDb250ZXh0
LCBqc3ZhbCBhVmFsdWUpOwoKICBzdGF0aWMgUFJCb29sIENvbnZlcnRKU1ZhbFRvVWludDMyKFBS
VWludDMyKiBhUHJvcCwgSlNDb250ZXh0KiBhQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpzdmFsIGFWYWx1ZSk7CgogIHN0YXRpYyBuc3Jlc3VsdCBHZXRTdGF0
aWNTY3JpcHRHbG9iYWwoSlNDb250ZXh0KiBhQ29udGV4dCwgSlNPYmplY3QqIGFPYmosCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTY3JpcHRHbG9iYWxPYmplY3Qq
KiBhR2xvYmFsKTsKCiAgc3RhdGljIG5zcmVzdWx0IEdldFN0YXRpY1NjcmlwdENvbnRleHQoSlND
b250ZXh0KiBhQ29udGV4dCwgSlNPYmplY3QqIGFPYmosCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnNJU2NyaXB0Q29udGV4dCoqIGFTY3JpcHRDb250ZXh0KTsKCiAg
c3RhdGljIG5zcmVzdWx0IEdldER5bmFtaWNTY3JpcHRHbG9iYWwoSlNDb250ZXh0ICphQ29udGV4
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTY3JpcHRHbG9i
YWxPYmplY3QqKiBhR2xvYmFsKTsKCiAgc3RhdGljIG5zcmVzdWx0IEdldER5bmFtaWNTY3JpcHRD
b250ZXh0KEpTQ29udGV4dCAqYUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5zSVNjcmlwdENvbnRleHQqKiBhU2NyaXB0Q29udGV4dCk7Cn07CiMgNzgg
Im5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9u
c0lJbnRlcmZhY2VSZXF1ZXN0b3IuaCIgMQojIDM4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBj
b20vbnNJSW50ZXJmYWNlUmVxdWVzdG9yLmgiCmNsYXNzIG5zSUludGVyZmFjZVJlcXVlc3RvciA6
IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0
SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHgwMzNhMTQ3MCwgMHg4YjJhLCAweDEx
ZDMsIHsgMHhhZiwgMHg4OCwgMHgwMCwgMHhhMCwgMHgyNCwgMHhmZiwgMHhjMCwgMHg4YyB9fTsg
cmV0dXJuIGlpZDt9CiMgNTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lJbnRlcmZh
Y2VSZXF1ZXN0b3IuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEludGVyZmFjZShjb25zdCBuc0lJ
RCAmIHV1aWQsIHZvaWQgKiAqcmVzdWx0KSA9IDA7Cgp9OwojIDc5ICJuc0RPTUNsYXNzSW5mby5j
cHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJSW50ZXJmYWNlUmVxdWVz
dG9yVXRpbHMuaCIgMQojIDI5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJSW50ZXJm
YWNlUmVxdWVzdG9yVXRpbHMuaCIKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIERlc3RpbmF0aW9u
VHlwZT4KaW5saW5lCm5zcmVzdWx0CkNhbGxHZXRJbnRlcmZhY2UoIFQqIGFTb3VyY2UsIERlc3Rp
bmF0aW9uVHlwZSoqIGFEZXN0aW5hdGlvbiApCiAgewogICAgOwogICAgOwoKICAgIHJldHVybiBh
U291cmNlLT5HZXRJbnRlcmZhY2UobnNDT01UeXBlSW5mbzxEZXN0aW5hdGlvblR5cGU+OjpHZXRJ
SUQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDwg
dm9pZCoqID4oYURlc3RpbmF0aW9uKSk7CiAgfQoKY2xhc3MgbnNHZXRJbnRlcmZhY2UgOiBwdWJs
aWMgbnNDT01QdHJfaGVscGVyCiAgewogICAgcHVibGljOgogICAgICBuc0dldEludGVyZmFjZSgg
bnNJU3VwcG9ydHMqIGFTb3VyY2UsIG5zcmVzdWx0KiBlcnJvciApCiAgICAgICAgICA6IG1Tb3Vy
Y2UoYVNvdXJjZSksCiAgICAgICAgICAgIG1FcnJvclB0cihlcnJvcikKICAgICAgICB7CgogICAg
ICAgIH0KCiAgICAgIHZpcnR1YWwgbnNyZXN1bHQgb3BlcmF0b3IoKSggY29uc3QgbnNJSUQmLCB2
b2lkKiogKSBjb25zdDsKICAgICAgdmlydHVhbCB+bnNHZXRJbnRlcmZhY2UoKSB7fTsKCiAgICBw
cml2YXRlOgogICAgICBuc0NPTVB0cjxuc0lTdXBwb3J0cz4gbVNvdXJjZTsKICAgICAgbnNyZXN1
bHQqIG1FcnJvclB0cjsKICB9OwoKaW5saW5lCmNvbnN0IG5zR2V0SW50ZXJmYWNlCmRvX0dldElu
dGVyZmFjZSggbnNJU3VwcG9ydHMqIGFTb3VyY2UsIG5zcmVzdWx0KiBlcnJvciA9IDAgKQogIHsK
ICAgIHJldHVybiBuc0dldEludGVyZmFjZShhU291cmNlLCBlcnJvcik7CiAgfQojIDgwICJuc0RP
TUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi9idWlsZC9uc1NjcmlwdE5hbWVTcGFjZU1hbmFnZXIu
aCIgMQojIDM5ICIuLi9idWlsZC9uc1NjcmlwdE5hbWVTcGFjZU1hbmFnZXIuaCIKIyAxICIuLi8u
Li8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSVNjcmlwdE5hbWVTcGFjZU1hbmFnZXIuaCIgMQojIDQw
ICIuLi9idWlsZC9uc1NjcmlwdE5hbWVTcGFjZU1hbmFnZXIuaCIgMgoKCiMgMSAiLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL3hwY29tL3BsZGhhc2guaCIgMQojIDQ3ICIuLi8uLi8uLi9kaXN0L2luY2x1
ZGUveHBjb20vcGxkaGFzaC5oIgpleHRlcm4gIkMiIHsKIyA3MiAiLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL3hwY29tL3BsZGhhc2guaCIKdHlwZWRlZiBQUlVpbnQzMiBQTERIYXNoTnVtYmVyOwp0eXBl
ZGVmIHN0cnVjdCBQTERIYXNoRW50cnlIZHIgUExESGFzaEVudHJ5SGRyOwp0eXBlZGVmIHN0cnVj
dCBQTERIYXNoRW50cnlTdHViIFBMREhhc2hFbnRyeVN0dWI7CnR5cGVkZWYgc3RydWN0IFBMREhh
c2hUYWJsZSBQTERIYXNoVGFibGU7CnR5cGVkZWYgc3RydWN0IFBMREhhc2hUYWJsZU9wcyBQTERI
YXNoVGFibGVPcHM7CiMgMTA2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vcGxkaGFzaC5o
IgpzdHJ1Y3QgUExESGFzaEVudHJ5SGRyIHsKICAgIFBMREhhc2hOdW1iZXIga2V5SGFzaDsKfTsK
IyAxODYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9wbGRoYXNoLmgiCnN0cnVjdCBQTERI
YXNoVGFibGUgewogICAgUExESGFzaFRhYmxlT3BzICpvcHM7CiAgICB2b2lkICpkYXRhOwogICAg
UFJJbnQxNiBoYXNoU2hpZnQ7CiAgICB1aW50OCBtYXhBbHBoYUZyYWM7CiAgICB1aW50OCBtaW5B
bHBoYUZyYWM7CiAgICBQUlVpbnQzMiBlbnRyeVNpemU7CiAgICBQUlVpbnQzMiBlbnRyeUNvdW50
OwogICAgUFJVaW50MzIgcmVtb3ZlZENvdW50OwogICAgUFJVaW50MzIgZ2VuZXJhdGlvbjsKICAg
IGNoYXIgKmVudHJ5U3RvcmU7CiMgMjE4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vcGxk
aGFzaC5oIgp9OwojIDIzMiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL3BsZGhhc2guaCIK
dHlwZWRlZiB2b2lkICoKKCogUExESGFzaEFsbG9jVGFibGUpKFBMREhhc2hUYWJsZSAqdGFibGUs
IFBSVWludDMyIG5ieXRlcyk7Cgp0eXBlZGVmIHZvaWQKKCogUExESGFzaEZyZWVUYWJsZSkgKFBM
REhhc2hUYWJsZSAqdGFibGUsIHZvaWQgKnB0cik7CgoKCgoKCgp0eXBlZGVmIGNvbnN0IHZvaWQg
KgooKiBQTERIYXNoR2V0S2V5KSAoUExESGFzaFRhYmxlICp0YWJsZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQTERIYXNoRW50cnlIZHIgKmVudHJ5KTsKCgoKCgp0eXBl
ZGVmIFBMREhhc2hOdW1iZXIKKCogUExESGFzaEhhc2hLZXkpIChQTERIYXNoVGFibGUgKnRhYmxl
LCBjb25zdCB2b2lkICprZXkpOwoKCgoKCnR5cGVkZWYgUFJCb29sCigqIFBMREhhc2hNYXRjaEVu
dHJ5KShQTERIYXNoVGFibGUgKnRhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFBMREhhc2hFbnRyeUhkciAqZW50cnksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqa2V5KTsKCgoKCgoKCnR5cGVkZWYgdm9pZAoo
KiBQTERIYXNoTW92ZUVudHJ5KShQTERIYXNoVGFibGUgKnRhYmxlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgUExESGFzaEVudHJ5SGRyICpmcm9tLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUExESGFzaEVudHJ5SGRyICp0byk7CgoKCgoK
CnR5cGVkZWYgdm9pZAooKiBQTERIYXNoQ2xlYXJFbnRyeSkoUExESGFzaFRhYmxlICp0YWJsZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTERIYXNoRW50cnlIZHIgKmVu
dHJ5KTsKCgoKCgoKdHlwZWRlZiB2b2lkCigqIFBMREhhc2hGaW5hbGl6ZSkgKFBMREhhc2hUYWJs
ZSAqdGFibGUpOwojIDI5OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL3BsZGhhc2guaCIK
dHlwZWRlZiB2b2lkCigqIFBMREhhc2hJbml0RW50cnkpKFBMREhhc2hUYWJsZSAqdGFibGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTERIYXNoRW50cnlIZHIgKmVudHJ5
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqa2V5KTsK
IyAzMzAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9wbGRoYXNoLmgiCnN0cnVjdCBQTERI
YXNoVGFibGVPcHMgewoKICAgIFBMREhhc2hBbGxvY1RhYmxlIGFsbG9jVGFibGU7CiAgICBQTERI
YXNoRnJlZVRhYmxlIGZyZWVUYWJsZTsKICAgIFBMREhhc2hHZXRLZXkgZ2V0S2V5OwogICAgUExE
SGFzaEhhc2hLZXkgaGFzaEtleTsKICAgIFBMREhhc2hNYXRjaEVudHJ5IG1hdGNoRW50cnk7CiAg
ICBQTERIYXNoTW92ZUVudHJ5IG1vdmVFbnRyeTsKICAgIFBMREhhc2hDbGVhckVudHJ5IGNsZWFy
RW50cnk7CiAgICBQTERIYXNoRmluYWxpemUgZmluYWxpemU7CgoKICAgIFBMREhhc2hJbml0RW50
cnkgaW5pdEVudHJ5Owp9OwoKCgoKZXh0ZXJuIHZvaWQgKgpQTF9ESGFzaEFsbG9jVGFibGUoUExE
SGFzaFRhYmxlICp0YWJsZSwgUFJVaW50MzIgbmJ5dGVzKTsKCmV4dGVybiB2b2lkClBMX0RIYXNo
RnJlZVRhYmxlKFBMREhhc2hUYWJsZSAqdGFibGUsIHZvaWQgKnB0cik7CgpleHRlcm4gUExESGFz
aE51bWJlcgpQTF9ESGFzaFN0cmluZ0tleShQTERIYXNoVGFibGUgKnRhYmxlLCBjb25zdCB2b2lk
ICprZXkpOwoKCnN0cnVjdCBQTERIYXNoRW50cnlTdHViIHsKICAgIFBMREhhc2hFbnRyeUhkciBo
ZHI7CiAgICBjb25zdCB2b2lkICprZXk7Cn07CgpleHRlcm4gY29uc3Qgdm9pZCAqClBMX0RIYXNo
R2V0S2V5U3R1YihQTERIYXNoVGFibGUgKnRhYmxlLCBQTERIYXNoRW50cnlIZHIgKmVudHJ5KTsK
CmV4dGVybiBQTERIYXNoTnVtYmVyClBMX0RIYXNoVm9pZFB0cktleVN0dWIoUExESGFzaFRhYmxl
ICp0YWJsZSwgY29uc3Qgdm9pZCAqa2V5KTsKCmV4dGVybiBQUkJvb2wKUExfREhhc2hNYXRjaEVu
dHJ5U3R1YihQTERIYXNoVGFibGUgKnRhYmxlLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFBMREhhc2hFbnRyeUhkciAqZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9p
ZCAqa2V5KTsKCmV4dGVybiB2b2lkClBMX0RIYXNoTW92ZUVudHJ5U3R1YihQTERIYXNoVGFibGUg
KnRhYmxlLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgUExESGFzaEVudHJ5SGRyICpmcm9t
LAogICAgICAgICAgICAgICAgICAgICAgUExESGFzaEVudHJ5SGRyICp0byk7CgpleHRlcm4gdm9p
ZApQTF9ESGFzaENsZWFyRW50cnlTdHViKFBMREhhc2hUYWJsZSAqdGFibGUsIFBMREhhc2hFbnRy
eUhkciAqZW50cnkpOwoKZXh0ZXJuIHZvaWQKUExfREhhc2hGaW5hbGl6ZVN0dWIoUExESGFzaFRh
YmxlICp0YWJsZSk7CgoKCgoKCmV4dGVybiBQTERIYXNoVGFibGVPcHMgKgpQTF9ESGFzaEdldFN0
dWJPcHModm9pZCk7CgoKCgoKCgpleHRlcm4gUExESGFzaFRhYmxlICoKUExfTmV3REhhc2hUYWJs
ZShQTERIYXNoVGFibGVPcHMgKm9wcywgdm9pZCAqZGF0YSwgUFJVaW50MzIgZW50cnlTaXplLAog
ICAgICAgICAgICAgICAgIFBSVWludDMyIGNhcGFjaXR5KTsKCgoKCgpleHRlcm4gdm9pZApQTF9E
SGFzaFRhYmxlRGVzdHJveShQTERIYXNoVGFibGUgKnRhYmxlKTsKCgoKCgoKCmV4dGVybiBQUkJv
b2wKUExfREhhc2hUYWJsZUluaXQoUExESGFzaFRhYmxlICp0YWJsZSwgUExESGFzaFRhYmxlT3Bz
ICpvcHMsIHZvaWQgKmRhdGEsCiAgICAgICAgICAgICAgICAgIFBSVWludDMyIGVudHJ5U2l6ZSwg
UFJVaW50MzIgY2FwYWNpdHkpOwojIDQyOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL3Bs
ZGhhc2guaCIKdm9pZApQTF9ESGFzaFRhYmxlU2V0QWxwaGFCb3VuZHMoUExESGFzaFRhYmxlICp0
YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IG1heEFscGhhLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmxvYXQgbWluQWxwaGEpOwojIDQ0OCAiLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL3hwY29tL3BsZGhhc2guaCIKZXh0ZXJuIHZvaWQKUExfREhhc2hUYWJsZUZpbmlz
aChQTERIYXNoVGFibGUgKnRhYmxlKTsKCgoKCgoKCnR5cGVkZWYgZW51bSBQTERIYXNoT3BlcmF0
b3IgewogICAgUExfREhBU0hfTE9PS1VQID0gMCwKICAgIFBMX0RIQVNIX0FERCA9IDEsCiAgICBQ
TF9ESEFTSF9SRU1PVkUgPSAyLAogICAgUExfREhBU0hfTkVYVCA9IDAsCiAgICBQTF9ESEFTSF9T
VE9QID0gMQp9IFBMREhhc2hPcGVyYXRvcjsKIyA0OTIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94
cGNvbS9wbGRoYXNoLmgiCmV4dGVybiBQTERIYXNoRW50cnlIZHIgKgpQTF9ESGFzaFRhYmxlT3Bl
cmF0ZShQTERIYXNoVGFibGUgKnRhYmxlLCBjb25zdCB2b2lkICprZXksIFBMREhhc2hPcGVyYXRv
ciBvcCk7CiMgNTA0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vcGxkaGFzaC5oIgpleHRl
cm4gdm9pZApQTF9ESGFzaFRhYmxlUmF3UmVtb3ZlKFBMREhhc2hUYWJsZSAqdGFibGUsIFBMREhh
c2hFbnRyeUhkciAqZW50cnkpOwojIDU0NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL3Bs
ZGhhc2guaCIKdHlwZWRlZiBQTERIYXNoT3BlcmF0b3IKKCogUExESGFzaEVudW1lcmF0b3IpKFBM
REhhc2hUYWJsZSAqdGFibGUsIFBMREhhc2hFbnRyeUhkciAqaGRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIG51bWJlciwgdm9pZCAqYXJnKTsKCmV4dGVy
biBQUlVpbnQzMgpQTF9ESGFzaFRhYmxlRW51bWVyYXRlKFBMREhhc2hUYWJsZSAqdGFibGUsIFBM
REhhc2hFbnVtZXJhdG9yIGV0b3IsIHZvaWQgKmFyZyk7CiMgNTYwICIuLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUveHBjb20vcGxkaGFzaC5oIgp9CiMgNDMgIi4uL2J1aWxkL25zU2NyaXB0TmFtZVNwYWNl
TWFuYWdlci5oIiAyCgoKCnN0cnVjdCBuc0dsb2JhbE5hbWVTdHJ1Y3QKewogIHN0cnVjdCBDb25z
dHJ1Y3RvckFsaWFzCiAgewogICAgbnNDSUQgbUNJRDsKICAgIG5zU3RyaW5nIG1Qcm90b05hbWU7
CiAgICBuc0dsb2JhbE5hbWVTdHJ1Y3QqIG1Qcm90bzsKICB9OwoKICBlbnVtIG5hbWV0eXBlIHsK
ICAgIGVUeXBlTm90SW5pdGlhbGl6ZWQsCiAgICBlVHlwZUludGVyZmFjZSwKICAgIGVUeXBlUHJv
cGVydHksCiAgICBlVHlwZUV4dGVybmFsQ29uc3RydWN0b3IsCiAgICBlVHlwZVN0YXRpY05hbWVT
ZXQsCiAgICBlVHlwZUR5bmFtaWNOYW1lU2V0LAogICAgZVR5cGVDbGFzc0NvbnN0cnVjdG9yLAog
ICAgZVR5cGVDbGFzc1Byb3RvLAogICAgZVR5cGVFeHRlcm5hbENsYXNzSW5mb0NyZWF0b3IsCiAg
ICBlVHlwZUV4dGVybmFsQ2xhc3NJbmZvLAogICAgZVR5cGVFeHRlcm5hbENvbnN0cnVjdG9yQWxp
YXMKICB9IG1UeXBlOwoKICB1bmlvbiB7CiAgICBQUkludDMyIG1ET01DbGFzc0luZm9JRDsKICAg
IG5zSUlEIG1JSUQ7CiAgICBuc0V4dGVybmFsRE9NQ2xhc3NJbmZvRGF0YSogbURhdGE7CiAgICBD
b25zdHJ1Y3RvckFsaWFzKiBtQWxpYXM7CiAgICBuc0NJRCBtQ0lEOwogIH07Cgpwcml2YXRlOgoK
Cn07CgoKY2xhc3MgbnNJU2NyaXB0Q29udGV4dDsKY2xhc3MgbnNJQ2F0ZWdvcnlNYW5hZ2VyOwoK
CmNsYXNzIG5zU2NyaXB0TmFtZVNwYWNlTWFuYWdlcgp7CnB1YmxpYzoKICBuc1NjcmlwdE5hbWVT
cGFjZU1hbmFnZXIoKTsKICB2aXJ0dWFsIH5uc1NjcmlwdE5hbWVTcGFjZU1hbmFnZXIoKTsKCiAg
bnNyZXN1bHQgSW5pdCgpOwogIG5zcmVzdWx0IEluaXRGb3JDb250ZXh0KG5zSVNjcmlwdENvbnRl
eHQgKmFDb250ZXh0KTsKCgoKCgoKICBuc3Jlc3VsdCBMb29rdXBOYW1lKGNvbnN0IG5zQVN0cmlu
ZyYgYU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0dsb2JhbE5hbWVTdHJ1Y3Qg
KiphTmFtZVN0cnVjdCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBSVW5pY2hhciAqKmFD
bGFzc05hbWUgPSAwKTsKCiAgbnNyZXN1bHQgUmVnaXN0ZXJDbGFzc05hbWUoY29uc3QgY2hhciAq
YUNsYXNzTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFET01DbGFz
c0luZm9JRCk7CgogIG5zcmVzdWx0IFJlZ2lzdGVyQ2xhc3NQcm90byhjb25zdCBjaGFyICphQ2xh
c3NOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuc0lJRCAqYUNvbnN0
cnVjdG9yUHJvdG9JSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCAqYUZv
dW5kT2xkKTsKCiAgbnNyZXN1bHQgUmVnaXN0ZXJFeHRlcm5hbEludGVyZmFjZXMoUFJCb29sIGFB
c1Byb3RvKTsKCiAgbnNyZXN1bHQgUmVnaXN0ZXJFeHRlcm5hbENsYXNzTmFtZShjb25zdCBjaGFy
ICphQ2xhc3NOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNDSUQm
IGFDSUQpOwoKCgogIG5zcmVzdWx0IFJlZ2lzdGVyRE9NQ0lEYXRhKGNvbnN0IGNoYXIgKmFOYW1l
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRE9NQ2xhc3NJbmZvRXh0ZXJuYWxDb25z
dHJ1Y3RvckZuYyBhQ29uc3RydWN0b3JGcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IG5zSUlEICphUHJvdG9DaGFpbkludGVyZmFjZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBuc0lJRCAqKmFJbnRlcmZhY2VzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBSVWludDMyIGFTY3JpcHRhYmxlRmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJCb29sIGFIYXNDbGFzc0ludGVyZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBuc0NJRCAqYUNvbnN0cnVjdG9yQ0lEKTsKCiAgbnNHbG9iYWxOYW1lU3RydWN0
KiBHZXRDb25zdHJ1Y3RvclByb3RvKGNvbnN0IG5zR2xvYmFsTmFtZVN0cnVjdCogYVN0cnVjdCk7
Cgpwcm90ZWN0ZWQ6CgoKCgogIG5zR2xvYmFsTmFtZVN0cnVjdCAqQWRkVG9IYXNoKGNvbnN0IG5z
QVN0cmluZyYgYUtleSk7CgogIG5zcmVzdWx0IEZpbGxIYXNoKG5zSUNhdGVnb3J5TWFuYWdlciAq
YUNhdGVnb3J5TWFuYWdlciwKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphQ2F0ZWdv
cnksCiAgICAgICAgICAgICAgICAgICAgbnNHbG9iYWxOYW1lU3RydWN0OjpuYW1ldHlwZSBhVHlw
ZSk7CiAgbnNyZXN1bHQgRmlsbEhhc2hXaXRoRE9NSW50ZXJmYWNlcygpOwogIG5zcmVzdWx0IFJl
Z2lzdGVySW50ZXJmYWNlKGNvbnN0IGNoYXIqIGFJZk5hbWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbnNJSUQgKmFJZklJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUkJvb2wqIGFGb3VuZE9sZCk7CgoKCiAgUExESGFzaFRhYmxlIG1HbG9iYWxOYW1lczsKCiAg
UFJQYWNrZWRCb29sIG1Jc0luaXRpYWxpemVkOwp9OwojIDgxICJuc0RPTUNsYXNzSW5mby5jcHAi
IDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSVNjcmlwdE9iamVjdE93bmVyLmgi
IDEKIyA2MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lTY3JpcHRPYmplY3RPd25lci5o
IgpjbGFzcyBuc0lTY3JpcHRPYmplY3RPd25lciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1Ymxp
YzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlk
ID0geyAweDhmNmJjYTdlLCAweGNlNDIsIDB4MTFkMSwgezB4YjcsIDB4MjQsIDB4MDAsIDB4NjAs
IDB4MDgsIDB4OTEsIDB4ZDgsIDB4Yzl9IH07IHJldHVybiBpaWQ7fQojIDc0ICIuLi8uLi8uLi9k
aXN0L2luY2x1ZGUvZG9tL25zSVNjcmlwdE9iamVjdE93bmVyLmgiCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRTY3JpcHRPYmplY3QobnNJU2NyaXB0Q29udGV4dCAqYUNvbnRleHQsIHZvaWQqKiBhU2Ny
aXB0T2JqZWN0KSA9IDA7CiMgODYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJU2NyaXB0
T2JqZWN0T3duZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNjcmlwdE9iamVjdCh2b2lkKiBh
U2NyaXB0T2JqZWN0KSA9IDA7Cn07CgpjbGFzcyBuc0lBdG9tOwojIDEwMiAiLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL2RvbS9uc0lTY3JpcHRPYmplY3RPd25lci5oIgpjbGFzcyBuc0lTY3JpcHRFdmVu
dEhhbmRsZXJPd25lciA6IHB1YmxpYyBuc0lTdXBwb3J0cwp7CnB1YmxpYzoKICBzdGF0aWMgY29u
c3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0geyAweDJhZDU0YWUw
LCAweGE4MzksIDB4MTFkMywgezB4YmEsIDB4OTcsIDB4MDAsIDB4MTAsIDB4NGIsIDB4YTAsIDB4
MmQsIDB4M2R9IH07IHJldHVybiBpaWQ7fQojIDExNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2Rv
bS9uc0lTY3JpcHRPYmplY3RPd25lci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ29tcGlsZUV2ZW50
SGFuZGxlcihuc0lTY3JpcHRDb250ZXh0KiBhQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZCogYVRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJQXRvbSAqYU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IG5zQVN0cmluZyYgYUJvZHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQq
KiBhSGFuZGxlcikgPSAwOwojIDEzMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lTY3Jp
cHRPYmplY3RPd25lci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29tcGlsZWRFdmVudEhhbmRs
ZXIobnNJQXRvbSAqYU5hbWUsIHZvaWQqKiBhSGFuZGxlcikgPSAwOwp9OwojIDgyICJuc0RPTUNs
YXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSUpTTmF0aXZl
SW5pdGlhbGl6ZXIuaCIgMQojIDU2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSUpTTmF0
aXZlSW5pdGlhbGl6ZXIuaCIKY2xhc3MgbnNJSlNOYXRpdmVJbml0aWFsaXplciA6IHB1YmxpYyBu
c0lTdXBwb3J0cyB7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0
aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwZjQsIDB4MTViMywgMHgxMWQyLCB7MHg5Mywg
MHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMn19OyByZXR1cm4gaWlkO30K
CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5pdGlhbGl6ZShKU0NvbnRleHQgKmN4LCBKU09iamVj
dCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhcmdjLCBqc3ZhbCAqYXJn
dikgPSAwOwp9OwojIDgzICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKCgojIDEgIi4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9kb20vbnNJRE9NUGx1Z2luQXJyYXkuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0
L2luY2x1ZGUvZG9tL25zSURPTVBsdWdpbkFycmF5LmgiCmNsYXNzIG5zSURPTVBsdWdpbkFycmF5
IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBH
ZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGY2MTM0NjgwLCAweGYyOGIsIDB4
MTFkMiwgeyAweDgzLCAweDYwLCAweGM5LCAweDA4LCAweDk5LCAweDA0LCAweDljLCAweDNjIH19
OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGVuZ3RoKFBSVWludDMyICph
TGVuZ3RoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEl0ZW0oUFJVaW50MzIgaW5kZXgsIG5z
SURPTVBsdWdpbiAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTmFtZWRJdGVt
KGNvbnN0IG5zQVN0cmluZyAmIG5hbWUsIG5zSURPTVBsdWdpbiAqKl9yZXR2YWwpID0gMDsKCgog
IHZpcnR1YWwgbnNyZXN1bHQgUmVmcmVzaChQUkJvb2wgcmVsb2FkRG9jdW1lbnRzKSA9IDA7Cgp9
OwojIDEyOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01QbHVnaW5BcnJheS5oIgpj
bGFzcyBuc0lET01KU1BsdWdpbkFycmF5IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoK
CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9
IHsweGVlNzUzMzUyLCAweDFkZDEsIDB4MTFiMiwgeyAweGIxLCAweDhkLCAweGIwLCAweGI3LCAw
eDMyLCAweDBhLCAweDI4LCAweGMzIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1
bHQgUmVmcmVzaCh2b2lkKSA9IDA7Cgp9OwojIDg2ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAx
ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVBsdWdpbi5oIiAxCiMgMjUgIi4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NUGx1Z2luLmgiCmNsYXNzIG5zSURPTVBsdWdpbiA6
IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0
SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhmNjEzNDY4MSwgMHhmMjhiLCAweDEx
ZDIsIHsgMHg4MywgMHg2MCwgMHhjOSwgMHgwOCwgMHg5OSwgMHgwNCwgMHg5YywgMHgzYyB9fTsg
cmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlc2NyaXB0aW9uKG5zQVN0cmlu
ZyAmIGFEZXNjcmlwdGlvbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGaWxlbmFtZShu
c0FTdHJpbmcgJiBhRmlsZW5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZShu
c0FTdHJpbmcgJiBhTmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMZW5ndGgoUFJV
aW50MzIgKmFMZW5ndGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXRlbShQUlVpbnQzMiBp
bmRleCwgbnNJRE9NTWltZVR5cGUgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IE5hbWVkSXRlbShjb25zdCBuc0FTdHJpbmcgJiBuYW1lLCBuc0lET01NaW1lVHlwZSAqKl9yZXR2
YWwpID0gMDsKCn07CiMgODcgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9kb20vbnNJRE9NTWltZVR5cGVBcnJheS5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9kb20vbnNJRE9NTWltZVR5cGVBcnJheS5oIgpjbGFzcyBuc0lET01NaW1lVHlw
ZUFycmF5IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5z
SUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGY2MTM0NjgzLCAweGYy
OGIsIDB4MTFkMiwgeyAweDgzLCAweDYwLCAweGM5LCAweDA4LCAweDk5LCAweDA0LCAweDljLCAw
eDNjIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGVuZ3RoKFBSVWlu
dDMyICphTGVuZ3RoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEl0ZW0oUFJVaW50MzIgaW5k
ZXgsIG5zSURPTU1pbWVUeXBlICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBO
YW1lZEl0ZW0oY29uc3QgbnNBU3RyaW5nICYgbmFtZSwgbnNJRE9NTWltZVR5cGUgKipfcmV0dmFs
KSA9IDA7Cgp9OwojIDg4ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0
L2luY2x1ZGUvZG9tL25zSURPTU1pbWVUeXBlLmgiIDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL2RvbS9uc0lET01NaW1lVHlwZS5oIgpjbGFzcyBuc0lET01NaW1lVHlwZSA6IHB1YmxpYyBu
c0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0
YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhmNjEzNDY4MiwgMHhmMjhiLCAweDExZDIsIHsgMHg4
MywgMHg2MCwgMHhjOSwgMHgwOCwgMHg5OSwgMHgwNCwgMHg5YywgMHgzYyB9fTsgcmV0dXJuIGlp
ZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlc2NyaXB0aW9uKG5zQVN0cmluZyAmIGFEZXNj
cmlwdGlvbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFbmFibGVkUGx1Z2luKG5zSURP
TVBsdWdpbiAqICphRW5hYmxlZFBsdWdpbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRT
dWZmaXhlcyhuc0FTdHJpbmcgJiBhU3VmZml4ZXMpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0VHlwZShuc0FTdHJpbmcgJiBhVHlwZSkgPSAwOwoKfTsKIyA4OSAibnNET01DbGFzc0luZm8u
Y3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU0xvY2F0aW9uLmgi
IDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU0xvY2F0aW9uLmgiCmNs
YXNzIG5zSURPTU5TTG9jYXRpb24gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBz
dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4
YTZjZjkxMDgsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYs
IDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBS
ZWxvYWQodm9pZCkgPSAwOwoKfTsKIyA5MCAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01Mb2NhdGlvbi5oIiAxCiMgMjUgIi4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NTG9jYXRpb24uaCIKY2xhc3MgbnNJRE9NTG9jYXRpb24g
OiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdl
dElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwNmQsIDB4MTViMywgMHgx
MWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07
IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIYXNoKG5zQVN0cmluZyAmIGFI
YXNoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRIYXNoKGNvbnN0IG5zQVN0cmluZyAmIGFI
YXNoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEhvc3QobnNBU3RyaW5nICYgYUhvc3Qp
ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEhvc3QoY29uc3QgbnNBU3RyaW5nICYgYUhvc3Qp
ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SG9zdG5hbWUobnNBU3RyaW5nICYgYUhvc3Ru
YW1lKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRIb3N0bmFtZShjb25zdCBuc0FTdHJpbmcg
JiBhSG9zdG5hbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SHJlZihuc0FTdHJpbmcg
JiBhSHJlZikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SHJlZihjb25zdCBuc0FTdHJpbmcg
JiBhSHJlZikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQYXRobmFtZShuc0FTdHJpbmcg
JiBhUGF0aG5hbWUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFBhdGhuYW1lKGNvbnN0IG5z
QVN0cmluZyAmIGFQYXRobmFtZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQb3J0KG5z
QVN0cmluZyAmIGFQb3J0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQb3J0KGNvbnN0IG5z
QVN0cmluZyAmIGFQb3J0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFByb3RvY29sKG5z
QVN0cmluZyAmIGFQcm90b2NvbCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UHJvdG9jb2wo
Y29uc3QgbnNBU3RyaW5nICYgYVByb3RvY29sKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dFNlYXJjaChuc0FTdHJpbmcgJiBhU2VhcmNoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRT
ZWFyY2goY29uc3QgbnNBU3RyaW5nICYgYVNlYXJjaCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBSZWxvYWQoUFJCb29sIGZvcmNlZ2V0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlcGxh
Y2UoY29uc3QgbnNBU3RyaW5nICYgdXJsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFzc2ln
bihjb25zdCBuc0FTdHJpbmcgJiB1cmwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgVG9TdHJp
bmcobnNBU3RyaW5nICYgX3JldHZhbCkgPSAwOwoKfTsKIyA5MSAibnNET01DbGFzc0luZm8uY3Bw
IiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01XaW5kb3dJbnRlcm5hbC5o
IiAxCiMgMTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NV2luZG93SW50ZXJuYWwu
aCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVdpbmRvdy5oIiAxCiMgMTcg
Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NV2luZG93LmgiCmNsYXNzIG5zSVNlbGVj
dGlvbjsKIyAyNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01XaW5kb3cuaCIKY2xh
c3MgbnNJRE9NV2luZG93IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGlj
IGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5
MDZiLCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhh
LCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KIyA0NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L2RvbS9uc0lET01XaW5kb3cuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERvY3VtZW50KG5zSURP
TURvY3VtZW50ICogKmFEb2N1bWVudCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dFBhcmVudChuc0lET01XaW5kb3cgKiAqYVBhcmVudCkgPSAwOwojIDY1ICIuLi8uLi8uLi9kaXN0
L2luY2x1ZGUvZG9tL25zSURPTVdpbmRvdy5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VG9wKG5z
SURPTVdpbmRvdyAqICphVG9wKSA9IDA7CiMgNzQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20v
bnNJRE9NV2luZG93LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTY3JvbGxiYXJzKG5zSURPTUJh
clByb3AgKiAqYVNjcm9sbGJhcnMpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnJh
bWVzKG5zSURPTVdpbmRvd0NvbGxlY3Rpb24gKiAqYUZyYW1lcykgPSAwOwoKCgoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldE5hbWUobnNBU3RyaW5nICYgYU5hbWUpID0gMDsKICB2aXJ0dWFsIG5z
cmVzdWx0IFNldE5hbWUoY29uc3QgbnNBU3RyaW5nICYgYU5hbWUpID0gMDsKIyAxMDAgIi4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NV2luZG93LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRUZXh0Wm9vbShmbG9hdCAqYVRleHRab29tKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRU
ZXh0Wm9vbShmbG9hdCBhVGV4dFpvb20pID0gMDsKIyAxMTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9kb20vbnNJRE9NV2luZG93LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTY3JvbGxYKFBSSW50
MzIgKmFTY3JvbGxYKSA9IDA7CiMgMTE5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURP
TVdpbmRvdy5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2Nyb2xsWShQUkludDMyICphU2Nyb2xs
WSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTY3JvbGxUbyhQUkludDMyIHhTY3JvbGws
IFBSSW50MzIgeVNjcm9sbCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2Nyb2xsQnko
UFJJbnQzMiB4U2Nyb2xsRGlmLCBQUkludDMyIHlTY3JvbGxEaWYpID0gMDsKCgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0U2VsZWN0aW9uKG5zSVNlbGVjdGlvbiAqKl9yZXR2YWwpID0gMDsKCgoK
CgogIHZpcnR1YWwgbnNyZXN1bHQgU2Nyb2xsQnlMaW5lcyhQUkludDMyIG51bUxpbmVzKSA9IDA7
CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNjcm9sbEJ5UGFnZXMoUFJJbnQzMiBudW1QYWdlcykg
PSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTaXplVG9Db250ZW50KHZvaWQpID0gMDsKCn07
CiMgMTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NV2luZG93SW50ZXJuYWwuaCIg
MgoKCgoKCgpjbGFzcyBuc0lTaWRlYmFyOwoKY2xhc3MgbnNJUHJvbXB0OwoKY2xhc3MgbnNJQ29u
dHJvbGxlcnM7CgpjbGFzcyBuc0lET01Mb2NhdGlvbjsKIyAzMyAiLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL2RvbS9uc0lET01XaW5kb3dJbnRlcm5hbC5oIgpjbGFzcyBuc0lET01XaW5kb3dJbnRlcm5h
bCA6IHB1YmxpYyBuc0lET01XaW5kb3cgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQm
IEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4OWM5MTE4NjAsIDB4N2RkOSwg
MHgxMWQ0LCB7IDB4OWEsIDB4ODMsIDB4MDAsIDB4MDAsIDB4NjQsIDB4NjUsIDB4NzMsIDB4NzQg
fX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRXaW5kb3cobnNJRE9NV2lu
ZG93SW50ZXJuYWwgKiAqYVdpbmRvdykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTZWxm
KG5zSURPTVdpbmRvd0ludGVybmFsICogKmFTZWxmKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEdldE5hdmlnYXRvcihuc0lET01OYXZpZ2F0b3IgKiAqYU5hdmlnYXRvcikgPSAwOwoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRTY3JlZW4obnNJRE9NU2NyZWVuICogKmFTY3JlZW4pID0gMDsKCgog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0SGlzdG9yeShuc0lET01IaXN0b3J5ICogKmFIaXN0b3J5KSA9
IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvbnRlbnQobnNJRE9NV2luZG93ICogKmFDb250
ZW50KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNpZGViYXIobnNJU2lkZWJhciAqICph
U2lkZWJhcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQcm9tcHRlcihuc0lQcm9tcHQg
KiAqYVByb21wdGVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldE1lbnViYXIobnNJRE9N
QmFyUHJvcCAqICphTWVudWJhcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUb29sYmFy
KG5zSURPTUJhclByb3AgKiAqYVRvb2xiYXIpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
TG9jYXRpb25iYXIobnNJRE9NQmFyUHJvcCAqICphTG9jYXRpb25iYXIpID0gMDsKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0UGVyc29uYWxiYXIobnNJRE9NQmFyUHJvcCAqICphUGVyc29uYWxiYXIp
ID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3RhdHVzYmFyKG5zSURPTUJhclByb3AgKiAq
YVN0YXR1c2JhcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREaXJlY3Rvcmllcyhuc0lE
T01CYXJQcm9wICogKmFEaXJlY3RvcmllcykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRD
bG9zZWQoUFJCb29sICphQ2xvc2VkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENyeXB0
byhuc0lET01DcnlwdG8gKiAqYUNyeXB0bykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQ
a2NzMTEobnNJRE9NUGtjczExICogKmFQa2NzMTEpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0Q29udHJvbGxlcnMobnNJQ29udHJvbGxlcnMgKiAqYUNvbnRyb2xsZXJzKSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldE9wZW5lcihuc0lET01XaW5kb3dJbnRlcm5hbCAqICphT3BlbmVy
KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRPcGVuZXIobnNJRE9NV2luZG93SW50ZXJuYWwg
KiBhT3BlbmVyKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0YXR1cyhuc0FTdHJpbmcg
JiBhU3RhdHVzKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTdGF0dXMoY29uc3QgbnNBU3Ry
aW5nICYgYVN0YXR1cykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZWZhdWx0U3RhdHVz
KG5zQVN0cmluZyAmIGFEZWZhdWx0U3RhdHVzKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRE
ZWZhdWx0U3RhdHVzKGNvbnN0IG5zQVN0cmluZyAmIGFEZWZhdWx0U3RhdHVzKSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldExvY2F0aW9uKG5zSURPTUxvY2F0aW9uICogKmFMb2NhdGlvbikg
PSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbm5lcldpZHRoKFBSSW50MzIgKmFJbm5lcldp
ZHRoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRJbm5lcldpZHRoKFBSSW50MzIgYUlubmVy
V2lkdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SW5uZXJIZWlnaHQoUFJJbnQzMiAq
YUlubmVySGVpZ2h0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRJbm5lckhlaWdodChQUklu
dDMyIGFJbm5lckhlaWdodCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRPdXRlcldpZHRo
KFBSSW50MzIgKmFPdXRlcldpZHRoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRPdXRlcldp
ZHRoKFBSSW50MzIgYU91dGVyV2lkdGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0T3V0
ZXJIZWlnaHQoUFJJbnQzMiAqYU91dGVySGVpZ2h0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT
ZXRPdXRlckhlaWdodChQUkludDMyIGFPdXRlckhlaWdodCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRTY3JlZW5YKFBSSW50MzIgKmFTY3JlZW5YKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs
dCBTZXRTY3JlZW5YKFBSSW50MzIgYVNjcmVlblgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0U2NyZWVuWShQUkludDMyICphU2NyZWVuWSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0
U2NyZWVuWShQUkludDMyIGFTY3JlZW5ZKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBh
Z2VYT2Zmc2V0KFBSSW50MzIgKmFQYWdlWE9mZnNldCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRQYWdlWU9mZnNldChQUkludDMyICphUGFnZVlPZmZzZXQpID0gMDsKCgogIHZpcnR1YWwg
bnNyZXN1bHQgR2V0TGVuZ3RoKFBSVWludDMyICphTGVuZ3RoKSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldEZ1bGxTY3JlZW4oUFJCb29sICphRnVsbFNjcmVlbikgPSAwOwogIHZpcnR1YWwg
bnNyZXN1bHQgU2V0RnVsbFNjcmVlbihQUkJvb2wgYUZ1bGxTY3JlZW4pID0gMDsKCgogIHZpcnR1
YWwgbnNyZXN1bHQgQWxlcnQoY29uc3QgbnNBU3RyaW5nICYgdGV4dCkgPSAwOwoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBDb25maXJtKGNvbnN0IG5zQVN0cmluZyAmIHRleHQsIFBSQm9vbCAqX3JldHZh
bCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBQcm9tcHQoY29uc3QgbnNBU3RyaW5nICYgYU1l
c3NhZ2UsIGNvbnN0IG5zQVN0cmluZyAmIGFJbml0aWFsLCBjb25zdCBuc0FTdHJpbmcgJiBhVGl0
bGUsIFBSVWludDMyIGFTYXZlUGFzc3dvcmQsIG5zQVN0cmluZyAmIF9yZXR2YWwpID0gMDsKCgog
IHZpcnR1YWwgbnNyZXN1bHQgRm9jdXModm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBC
bHVyKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQmFjayh2b2lkKSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEZvcndhcmQodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBI
b21lKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU3RvcCh2b2lkKSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IFByaW50KHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTW92
ZVRvKFBSSW50MzIgeFBvcywgUFJJbnQzMiB5UG9zKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IE1vdmVCeShQUkludDMyIHhEaWYsIFBSSW50MzIgeURpZikgPSAwOwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBSZXNpemVUbyhQUkludDMyIHdpZHRoLCBQUkludDMyIGhlaWdodCkgPSAwOwoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBSZXNpemVCeShQUkludDMyIHdpZHRoRGlmLCBQUkludDMyIGhlaWdodERp
ZikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTY3JvbGwoUFJJbnQzMiB4U2Nyb2xsLCBQUklu
dDMyIHlTY3JvbGwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgT3Blbihjb25zdCBuc0FTdHJp
bmcgJiB1cmwsIGNvbnN0IG5zQVN0cmluZyAmIG5hbWUsIGNvbnN0IG5zQVN0cmluZyAmIG9wdGlv
bnMsIG5zSURPTVdpbmRvdyAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgT3Bl
bkRpYWxvZyhjb25zdCBuc0FTdHJpbmcgJiB1cmwsIGNvbnN0IG5zQVN0cmluZyAmIG5hbWUsIGNv
bnN0IG5zQVN0cmluZyAmIG9wdGlvbnMsIG5zSVN1cHBvcnRzICphRXh0cmFBcmd1bWVudCwgbnNJ
RE9NV2luZG93ICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDbG9zZSh2b2lk
KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFVwZGF0ZUNvbW1hbmRzKGNvbnN0IG5zQVN0cmlu
ZyAmIGFjdGlvbikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFc2NhcGUoY29uc3QgbnNBU3Ry
aW5nICYgc3RyLCBuc0FTdHJpbmcgJiBfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0
IFVuZXNjYXBlKGNvbnN0IG5zQVN0cmluZyAmIHN0ciwgbnNBU3RyaW5nICYgX3JldHZhbCkgPSAw
OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGaW5kKGNvbnN0IG5zQVN0cmluZyAmIHN0ciwgUFJCb29s
IGNhc2VTZW5zaXRpdmUsIFBSQm9vbCBiYWNrd2FyZHMsIFBSQm9vbCB3cmFwQXJvdW5kLCBQUkJv
b2wgd2hvbGVXb3JkLCBQUkJvb2wgc2VhcmNoSW5GcmFtZXMsIFBSQm9vbCBzaG93RGlhbG9nLCBQ
UkJvb2wgKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQXRvYihjb25zdCBuc0FT
dHJpbmcgJiBhQXNjaWlTdHJpbmcsIG5zQVN0cmluZyAmIF9yZXR2YWwpID0gMDsKCgogIHZpcnR1
YWwgbnNyZXN1bHQgQnRvYShjb25zdCBuc0FTdHJpbmcgJiBhQmFzZTY0RGF0YSwgbnNBU3RyaW5n
ICYgX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGcmFtZUVsZW1lbnQobnNJ
RE9NRWxlbWVudCAqICphRnJhbWVFbGVtZW50KSA9IDA7Cgp9OwojIDkyICJuc0RPTUNsYXNzSW5m
by5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUpTV2luZG93Lmgi
IDEKIyAyNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01KU1dpbmRvdy5oIgpjbGFz
cyBuc0lET01KU1dpbmRvdyA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRp
YyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhjODE4
ODYyMCwgMHgxZGQxLCAweDExYjIsIHsgMHhiYywgMHg4OCwgMHhkZiwgMHg4NCwgMHg0MCwgMHg0
OSwgMHg4YSwgMHhkZCB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IER1bXAo
Y29uc3QgbnNBU3RyaW5nICYgc3RyKSA9IDA7CiMgNDAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9k
b20vbnNJRE9NSlNXaW5kb3cuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRpbWVvdXQoUFJJbnQz
MiAqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRJbnRlcnZhbChQUkludDMy
ICpfcmV0dmFsKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xlYXJUaW1lb3V0KHZv
aWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xlYXJJbnRlcnZhbCh2b2lkKSA9IDA7CgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFJlc2l6YWJsZShQUkJvb2wgcmVzaXphYmxlKSA9IDA7CgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IENhcHR1cmVFdmVudHMoUFJJbnQzMiBldmVudEZsYWdzKSA9IDA7
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbGVhc2VFdmVudHMoUFJJbnQzMiBldmVudEZsYWdzKSA9
IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJvdXRlRXZlbnQobnNJRE9NRXZlbnQgKmV2dCkgPSAw
OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBFbmFibGVFeHRlcm5hbENhcHR1cmUodm9pZCkgPSAwOwoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBEaXNhYmxlRXh0ZXJuYWxDYXB0dXJlKHZvaWQpID0gMDsKCgoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFByb21wdChuc0FTdHJpbmcgJiBfcmV0dmFsKSA9IDA7CgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IE9wZW4obnNJRE9NV2luZG93ICoqX3JldHZhbCkgPSAwOwoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBPcGVuRGlhbG9nKG5zSURPTVdpbmRvdyAqKl9yZXR2YWwpID0gMDsK
IyA5NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01KU1dpbmRvdy5oIgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0RnJhbWVzKG5zSURPTVdpbmRvdyAqICphRnJhbWVzKSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEZpbmQoUFJCb29sICpfcmV0dmFsKSA9IDA7Cgp9OwojIDkzICJuc0RP
TUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTVdp
bmRvd0NvbGxlY3Rpb24uaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURP
TVdpbmRvd0NvbGxlY3Rpb24uaCIKY2xhc3MgbnNJRE9NV2luZG93Q29sbGVjdGlvbiA6IHB1Ymxp
YyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkg
e3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTA2ZiwgMHgxNWIzLCAweDExZDIsIHsg
MHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwgMHgzMiB9fTsgcmV0dXJu
IGlpZDt9CiMgNDAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NV2luZG93Q29sbGVj
dGlvbi5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGVuZ3RoKFBSVWludDMyICphTGVuZ3RoKSA9
IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEl0ZW0oUFJVaW50MzIgaW5kZXgsIG5zSURPTVdp
bmRvdyAqKl9yZXR2YWwpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgTmFtZWRJdGVtKGNv
bnN0IG5zQVN0cmluZyAmIG5hbWUsIG5zSURPTVdpbmRvdyAqKl9yZXR2YWwpID0gMDsKCn07CiMg
OTQgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20v
bnNJRE9NSGlzdG9yeS5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9N
SGlzdG9yeS5oIgpjbGFzcyBuc0lET01IaXN0b3J5IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1
YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlE
IGlpZCA9IHsweDg5NmQxZDIwLCAweGI0YzQsIDB4MTFkMiwgeyAweGJkLCAweDkzLCAweDAwLCAw
eDgwLCAweDVmLCAweDhhLCAweGUzLCAweGY0IH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwg
bnNyZXN1bHQgR2V0TGVuZ3RoKFBSSW50MzIgKmFMZW5ndGgpID0gMDsKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0Q3VycmVudChuc0FTdHJpbmcgJiBhQ3VycmVudCkgPSAwOwoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRQcmV2aW91cyhuc0FTdHJpbmcgJiBhUHJldmlvdXMpID0gMDsKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0TmV4dChuc0FTdHJpbmcgJiBhTmV4dCkgPSAwOwoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBCYWNrKHZvaWQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgRm9yd2FyZCh2b2lk
KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdvSW5kZXgoUFJJbnQzMiBhRGVsdGEpID0gMDsK
CgogIHZpcnR1YWwgbnNyZXN1bHQgR29VcmkoY29uc3QgbnNBU3RyaW5nICYgYVVyaVN1YnN0cmlu
ZykgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJdGVtKFBSVWludDMyIGluZGV4LCBuc0FTdHJp
bmcgJiBfcmV0dmFsKSA9IDA7Cgp9OwojIDk1ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIu
Li8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU5TSGlzdG9yeS5oIiAxCiMgMjUgIi4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NTlNIaXN0b3J5LmgiCmNsYXNzIG5zSURPTU5TSGlz
dG9yeSA6IHB1YmxpYyBuc0lET01IaXN0b3J5IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5z
SUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDVmYjk2ZjQ2LCAweDFk
ZDIsIDB4MTFiMiwgeyAweGE1LCAweGRjLCAweDk5LCAweDhjLCAweGE4LCAweDYzLCAweDZlLCAw
eGE5IH19OyByZXR1cm4gaWlkO30KCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR28odm9pZCkgPSAw
OwoKfTsKIyA5NiAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL2RvbS9uc0lET01NZWRpYUxpc3QuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv
ZG9tL25zSURPTU1lZGlhTGlzdC5oIgpjbGFzcyBuc0lET01NZWRpYUxpc3QgOiBwdWJsaWMgbnNJ
U3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0
aWMgY29uc3QgbnNJSUQgaWlkID0gezB4OWIwYzJlZDcsIDB4MTExYywgMHg0ODI0LCB7IDB4YWQs
IDB4ZjksIDB4ZWYsIDB4MGQsIDB4YTYsIDB4ZGEsIDB4ZDMsIDB4NzEgfX07IHJldHVybiBpaWQ7
fQojIDQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU1lZGlhTGlzdC5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0TWVkaWFUZXh0KG5zQVN0cmluZyAmIGFNZWRpYVRleHQpID0gMDsK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1lZGlhVGV4dChjb25zdCBuc0FTdHJpbmcgJiBhTWVkaWFU
ZXh0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExlbmd0aChQUlVpbnQzMiAqYUxlbmd0
aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJdGVtKFBSVWludDMyIGluZGV4LCBuc0FTdHJp
bmcgJiBfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IERlbGV0ZU1lZGl1bShjb25z
dCBuc0FTdHJpbmcgJiBvbGRNZWRpdW0pID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQXBwZW5k
TWVkaXVtKGNvbnN0IG5zQVN0cmluZyAmIG5ld01lZGl1bSkgPSAwOwoKfTsKIyA5NyAibnNET01D
bGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01DaHJv
bWVXaW5kb3cuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUNocm9t
ZVdpbmRvdy5oIgpjbGFzcyBuc0lET01DaHJvbWVXaW5kb3cgOiBwdWJsaWMgbnNJU3VwcG9ydHMg
ewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg
bnNJSUQgaWlkID0gezB4ODc2ZDZmOTYsIDB4MjQyMCwgMHg0Zjc4LCB7IDB4YmMsIDB4MTcsIDB4
MDAsIDB4YjEsIDB4YTIsIDB4ZWMsIDB4MTIsIDB4YmEgfX07IHJldHVybiBpaWQ7fQoKICBlbnVt
IHsgU1RBVEVfTUFYSU1JWkVEID0gMVUgfTsKCiAgZW51bSB7IFNUQVRFX01JTklNSVpFRCA9IDJV
IH07CgogIGVudW0geyBTVEFURV9OT1JNQUwgPSAzVSB9OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRUaXRsZShuc0FTdHJpbmcgJiBhVGl0bGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRp
dGxlKGNvbnN0IG5zQVN0cmluZyAmIGFUaXRsZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRXaW5kb3dTdGF0ZShQUlVpbnQxNiAqYVdpbmRvd1N0YXRlKSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldEF0dGVudGlvbih2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEN1
cnNvcihjb25zdCBuc0FTdHJpbmcgJiBjdXJzb3IpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
TWF4aW1pemUodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBNaW5pbWl6ZSh2b2lkKSA9
IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlc3RvcmUodm9pZCkgPSAwOwoKfTsKIyA5OCAibnNE
T01DbGFzc0luZm8uY3BwIiAyCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zRE9N
RXJyb3IuaCIgMQojIDEwMSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL2RvbS9uc0lET01ET01FeGNlcHRpb24uaCIgMQojIDM4ICIuLi8uLi8uLi9kaXN0
L2luY2x1ZGUvZG9tL25zSURPTURPTUV4Y2VwdGlvbi5oIgpjbGFzcyBuc0lET01ET01FeGNlcHRp
b24gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQm
IEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkxMGEsIDB4MTViMywg
MHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIg
fX07IHJldHVybiBpaWQ7fQoKICBlbnVtIHsgSU5ERVhfU0laRV9FUlIgPSAxVSB9OwoKICBlbnVt
IHsgRE9NU1RSSU5HX1NJWkVfRVJSID0gMlUgfTsKCiAgZW51bSB7IEhJRVJBUkNIWV9SRVFVRVNU
X0VSUiA9IDNVIH07CgogIGVudW0geyBXUk9OR19ET0NVTUVOVF9FUlIgPSA0VSB9OwoKICBlbnVt
IHsgSU5WQUxJRF9DSEFSQUNURVJfRVJSID0gNVUgfTsKCiAgZW51bSB7IE5PX0RBVEFfQUxMT1dF
RF9FUlIgPSA2VSB9OwoKICBlbnVtIHsgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSID0gN1Ug
fTsKCiAgZW51bSB7IE5PVF9GT1VORF9FUlIgPSA4VSB9OwoKICBlbnVtIHsgTk9UX1NVUFBPUlRF
RF9FUlIgPSA5VSB9OwoKICBlbnVtIHsgSU5VU0VfQVRUUklCVVRFX0VSUiA9IDEwVSB9OwoKICBl
bnVtIHsgSU5WQUxJRF9TVEFURV9FUlIgPSAxMVUgfTsKCiAgZW51bSB7IFNZTlRBWF9FUlIgPSAx
MlUgfTsKCiAgZW51bSB7IElOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUiA9IDEzVSB9OwoKICBlbnVt
IHsgTkFNRVNQQUNFX0VSUiA9IDE0VSB9OwoKICBlbnVtIHsgSU5WQUxJRF9BQ0NFU1NfRVJSID0g
MTVVIH07CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENvZGUoUFJVaW50MzIgKmFDb2RlKSA9IDA7
Cgp9OwojIDEwMiAibnNET01DbGFzc0luZm8uY3BwIiAyCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9kb20vbnNJRE9NTm9kZUxpc3QuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv
ZG9tL25zSURPTU5vZGVMaXN0LmgiCmNsYXNzIG5zSURPTU5vZGVMaXN0IDogcHVibGljIG5zSVN1
cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGlj
IGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MDdkLCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAw
eDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30K
IyA0MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01Ob2RlTGlzdC5oIgogIHZpcnR1
YWwgbnNyZXN1bHQgSXRlbShQUlVpbnQzMiBpbmRleCwgbnNJRE9NTm9kZSAqKl9yZXR2YWwpID0g
MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGVuZ3RoKFBSVWludDMyICphTGVuZ3RoKSA9IDA7
Cgp9OwojIDEwNCAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL2RvbS9uc0lET01OYW1lZE5vZGVNYXAuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1
ZGUvZG9tL25zSURPTU5hbWVkTm9kZU1hcC5oIgpjbGFzcyBuc0lET01OYW1lZE5vZGVNYXAgOiBw
dWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJ
RCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwN2IsIDB4MTViMywgMHgxMWQy
LCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJl
dHVybiBpaWQ7fQojIDQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTU5hbWVkTm9k
ZU1hcC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZWRJdGVtKGNvbnN0IG5zQVN0cmluZyAm
IG5hbWUsIG5zSURPTU5vZGUgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNl
dE5hbWVkSXRlbShuc0lET01Ob2RlICphcmcsIG5zSURPTU5vZGUgKipfcmV0dmFsKSA9IDA7CgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZU5hbWVkSXRlbShjb25zdCBuc0FTdHJpbmcgJiBuYW1l
LCBuc0lET01Ob2RlICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJdGVtKFBS
VWludDMyIGluZGV4LCBuc0lET01Ob2RlICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRMZW5ndGgoUFJVaW50MzIgKmFMZW5ndGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0TmFtZWRJdGVtTlMoY29uc3QgbnNBU3RyaW5nICYgbmFtZXNwYWNlVVJJLCBjb25zdCBu
c0FTdHJpbmcgJiBsb2NhbE5hbWUsIG5zSURPTU5vZGUgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IFNldE5hbWVkSXRlbU5TKG5zSURPTU5vZGUgKmFyZywgbnNJRE9NTm9kZSAq
Kl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVtb3ZlTmFtZWRJdGVtTlMoY29u
c3QgbnNBU3RyaW5nICYgbmFtZXNwYWNlVVJJLCBjb25zdCBuc0FTdHJpbmcgJiBsb2NhbE5hbWUs
IG5zSURPTU5vZGUgKipfcmV0dmFsKSA9IDA7Cgp9OwojIDEwNSAibnNET01DbGFzc0luZm8uY3Bw
IiAyCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lGb3JtLmgiIDEKIyA0
NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNJRm9ybS5oIgpjbGFzcyBuc0lGb3Jt
Q29udHJvbDsKY2xhc3MgbnNJU2l6ZU9mSGFuZGxlcjsKY2xhc3MgbnNJRE9NSFRNTElucHV0RWxl
bWVudDsKY2xhc3MgbnNJUmFkaW9WaXNpdG9yOwpjbGFzcyBuc0lTaW1wbGVFbnVtZXJhdG9yOwoj
IDcwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lGb3JtLmgiCmNsYXNzIG5zSUZv
cm0gOiBwdWJsaWMgbnNJU3VwcG9ydHMKewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IG5zSUlEJiBH
ZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHhiN2U5NDUxMCwgMHg0YzE5LCAw
eDExZDIsIHsgMHg4MCwgMHgzZiwgMHgwLCAweDYwLCAweDgsIDB4MTUsIDB4YTcsIDB4OTEgfSB9
OyByZXR1cm4gaWlkO30KCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBZGRFbGVtZW50KG5zSUZv
cm1Db250cm9sKiBhRWxlbWVudCkgPSAwOwojIDkxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29u
dGVudC9uc0lGb3JtLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBZGRFbGVtZW50VG9UYWJsZShuc0lG
b3JtQ29udHJvbCogYUVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBuc0FTdHJpbmcmIGFOYW1lKSA9IDA7CiMgMTAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29u
dGVudC9uc0lGb3JtLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFbGVtZW50QXQoUFJJbnQzMiBh
SW5kZXgsIG5zSUZvcm1Db250cm9sKiogYUVsZW1lbnQpIGNvbnN0ID0gMDsKCgoKCgoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRFbGVtZW50Q291bnQoUFJVaW50MzIqIGFDb3VudCkgY29uc3QgPSAw
OwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZUVsZW1lbnQobnNJRm9ybUNvbnRyb2wq
IGFFbGVtZW50KSA9IDA7CiMgMTMwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lG
b3JtLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVFbGVtZW50RnJvbVRhYmxlKG5zSUZvcm1D
b250cm9sKiBhRWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbnNBU3RyaW5nJiBhTmFtZSkgPSAwOwojIDE0MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2Nv
bnRlbnQvbnNJRm9ybS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmVzb2x2ZU5hbWUoY29uc3QgbnNB
U3RyaW5nJiBhTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzICoqYVJl
c3VsdCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSW5kZXhPZkNvbnRyb2wobnNJRm9y
bUNvbnRyb2wqIGFDb250cm9sLCBQUkludDMyKiBhSW5kZXgpID0gMDsKCgoKCgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldENvbnRyb2xFbnVtZXJhdG9yKG5zSVNpbXBsZUVudW1lcmF0b3IqKiBhRW51
bSkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgT25TdWJtaXRDbGlja0JlZ2luKCkgPSAw
OwogIHZpcnR1YWwgbnNyZXN1bHQgT25TdWJtaXRDbGlja0VuZCgpID0gMDsKCgoKCgoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBGbHVzaFBlbmRpbmdTdWJtaXNzaW9uKCkgPSAwOwoKCgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgRm9yZ2V0UGVuZGluZ1N1Ym1pc3Npb24oKSA9IDA7Cn07CiMgMTA4ICJuc0RP
TUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lG
b3JtQ29udHJvbC5oIiAxCiMgNDIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSUZv
cm1Db250cm9sLmgiCmNsYXNzIG5zSURPTUhUTUxGb3JtRWxlbWVudDsKY2xhc3MgbnNJUHJlc0Nv
bnRleHQ7CmNsYXNzIG5zSVByZXNTdGF0ZTsKY2xhc3MgbnNJQ29udGVudDsKY2xhc3MgbnNTdHJp
bmc7CmNsYXNzIG5zSUZvcm1Qcm9jZXNzb3I7CmNsYXNzIG5zSUZvcm1TdWJtaXNzaW9uOwojIDgz
ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lGb3JtQ29udHJvbC5oIgpjbGFzcyBu
c0lGb3JtQ29udHJvbCA6IHB1YmxpYyBuc0lTdXBwb3J0cwp7CnB1YmxpYzoKCiAgc3RhdGljIGNv
bnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsgMHgyODJmZjQ0
MCwgMHhjZDdlLCAweDExZDEsIHsweDg5LCAweGFkLCAweDAwLCAweDYwLCAweDA4LCAweDkxLCAw
eDFiLCAweDgxfSB9OyByZXR1cm4gaWlkO30KCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9y
bShuc0lET01IVE1MRm9ybUVsZW1lbnQqKiBhRm9ybSkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IFNldEZvcm0obnNJRE9NSFRNTEZvcm1FbGVtZW50KiBhRm9ybSwKICAgICAgICAgICAg
ICAgICAgICAgUFJCb29sIGFSZW1vdmVGcm9tRm9ybSA9IDEpID0gMDsKCgoKCgogIHZpcnR1YWwg
UFJJbnQzMiBHZXRUeXBlKCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXNldCgpID0g
MDsKIyAxMjQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSUZvcm1Db250cm9sLmgi
CiAgdmlydHVhbCBuc3Jlc3VsdCBTdWJtaXROYW1lc1ZhbHVlcyhuc0lGb3JtU3VibWlzc2lvbiog
YUZvcm1TdWJtaXNzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVu
dCogYVN1Ym1pdEVsZW1lbnQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNhdmVTdGF0
ZSgpID0gMDsKIyAxNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zSUZvcm1Db250
cm9sLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXN0b3JlU3RhdGUobnNJUHJlc1N0YXRlKiBhU3Rh
dGUpID0gMDsKfTsKIyAxMDkgIm5zRE9NQ2xhc3NJbmZvLmNwcCIgMgojIDEgIi4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTEZvcm1FbGVtZW50LmgiIDEKIyAxMCAiLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MRm9ybUVsZW1lbnQuaCIKIyAxICIuLi8uLi8uLi9k
aXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxFbGVtZW50LmgiIDEKIyAxMCAiLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL2RvbS9uc0lET01IVE1MRWxlbWVudC5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9kb20vbnNJRE9NRWxlbWVudC5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9k
b20vbnNJRE9NRWxlbWVudC5oIgpjbGFzcyBuc0lET01FbGVtZW50IDogcHVibGljIG5zSURPTU5v
ZGUgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29u
c3QgbnNJSUQgaWlkID0gezB4YTZjZjkwNzgsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUs
IDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQojIDQw
ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUVsZW1lbnQuaCIKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldFRhZ05hbWUobnNBU3RyaW5nICYgYVRhZ05hbWUpID0gMDsKCgogIHZpcnR1YWwg
bnNyZXN1bHQgR2V0QXR0cmlidXRlKGNvbnN0IG5zQVN0cmluZyAmIG5hbWUsIG5zQVN0cmluZyAm
IF9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QXR0cmlidXRlKGNvbnN0IG5z
QVN0cmluZyAmIG5hbWUsIGNvbnN0IG5zQVN0cmluZyAmIHZhbHVlKSA9IDA7CgoKICB2aXJ0dWFs
IG5zcmVzdWx0IFJlbW92ZUF0dHJpYnV0ZShjb25zdCBuc0FTdHJpbmcgJiBuYW1lKSA9IDA7CgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldEF0dHJpYnV0ZU5vZGUoY29uc3QgbnNBU3RyaW5nICYgbmFt
ZSwgbnNJRE9NQXR0ciAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QXR0
cmlidXRlTm9kZShuc0lET01BdHRyICpuZXdBdHRyLCBuc0lET01BdHRyICoqX3JldHZhbCkgPSAw
OwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVBdHRyaWJ1dGVOb2RlKG5zSURPTUF0dHIgKm9s
ZEF0dHIsIG5zSURPTUF0dHIgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dEVsZW1lbnRzQnlUYWdOYW1lKGNvbnN0IG5zQVN0cmluZyAmIG5hbWUsIG5zSURPTU5vZGVMaXN0
ICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBdHRyaWJ1dGVOUyhjb25z
dCBuc0FTdHJpbmcgJiBuYW1lc3BhY2VVUkksIGNvbnN0IG5zQVN0cmluZyAmIGxvY2FsTmFtZSwg
bnNBU3RyaW5nICYgX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRBdHRyaWJ1
dGVOUyhjb25zdCBuc0FTdHJpbmcgJiBuYW1lc3BhY2VVUkksIGNvbnN0IG5zQVN0cmluZyAmIHF1
YWxpZmllZE5hbWUsIGNvbnN0IG5zQVN0cmluZyAmIHZhbHVlKSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IFJlbW92ZUF0dHJpYnV0ZU5TKGNvbnN0IG5zQVN0cmluZyAmIG5hbWVzcGFjZVVSSSwg
Y29uc3QgbnNBU3RyaW5nICYgbG9jYWxOYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dEF0dHJpYnV0ZU5vZGVOUyhjb25zdCBuc0FTdHJpbmcgJiBuYW1lc3BhY2VVUkksIGNvbnN0IG5z
QVN0cmluZyAmIGxvY2FsTmFtZSwgbnNJRE9NQXR0ciAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1
YWwgbnNyZXN1bHQgU2V0QXR0cmlidXRlTm9kZU5TKG5zSURPTUF0dHIgKm5ld0F0dHIsIG5zSURP
TUF0dHIgKipfcmV0dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVsZW1lbnRzQnlU
YWdOYW1lTlMoY29uc3QgbnNBU3RyaW5nICYgbmFtZXNwYWNlVVJJLCBjb25zdCBuc0FTdHJpbmcg
JiBsb2NhbE5hbWUsIG5zSURPTU5vZGVMaXN0ICoqX3JldHZhbCkgPSAwOwoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBIYXNBdHRyaWJ1dGUoY29uc3QgbnNBU3RyaW5nICYgbmFtZSwgUFJCb29sICpfcmV0
dmFsKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEhhc0F0dHJpYnV0ZU5TKGNvbnN0IG5zQVN0
cmluZyAmIG5hbWVzcGFjZVVSSSwgY29uc3QgbnNBU3RyaW5nICYgbG9jYWxOYW1lLCBQUkJvb2wg
Kl9yZXR2YWwpID0gMDsKCn07CiMgMTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9N
SFRNTEVsZW1lbnQuaCIgMgojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhU
TUxFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxFbGVtZW50IDogcHVibGljIG5zSURPTUVsZW1l
bnQgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29u
c3QgbnNJSUQgaWlkID0gezB4YTZjZjkwODUsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUs
IDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQojIDQx
ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25zSURPTUhUTUxFbGVtZW50LmgiCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRJZChuc0FTdHJpbmcgJiBhSWQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0
IFNldElkKGNvbnN0IG5zQVN0cmluZyAmIGFJZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRUaXRsZShuc0FTdHJpbmcgJiBhVGl0bGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFRp
dGxlKGNvbnN0IG5zQVN0cmluZyAmIGFUaXRsZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRMYW5nKG5zQVN0cmluZyAmIGFMYW5nKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMYW5n
KGNvbnN0IG5zQVN0cmluZyAmIGFMYW5nKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERp
cihuc0FTdHJpbmcgJiBhRGlyKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREaXIoY29uc3Qg
bnNBU3RyaW5nICYgYURpcikgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDbGFzc05hbWUo
bnNBU3RyaW5nICYgYUNsYXNzTmFtZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q2xhc3NO
YW1lKGNvbnN0IG5zQVN0cmluZyAmIGFDbGFzc05hbWUpID0gMDsKCn07CiMgMTEgIi4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTEZvcm1FbGVtZW50LmgiIDIKIyAyNSAiLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01IVE1MRm9ybUVsZW1lbnQuaCIKY2xhc3MgbnNJRE9N
SFRNTEZvcm1FbGVtZW50IDogcHVibGljIG5zSURPTUhUTUxFbGVtZW50IHsKIHB1YmxpYzoKCiAg
c3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsw
eGE2Y2Y5MDhmLCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVm
LCAweDhhLCAweGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KIyA0MCAiLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL2RvbS9uc0lET01IVE1MRm9ybUVsZW1lbnQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dEVsZW1lbnRzKG5zSURPTUhUTUxDb2xsZWN0aW9uICogKmFFbGVtZW50cykgPSAwOwoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRMZW5ndGgoUFJJbnQzMiAqYUxlbmd0aCkgPSAwOwoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXROYW1lKG5zQVN0cmluZyAmIGFOYW1lKSA9IDA7CiAgdmlydHVhbCBuc3Jl
c3VsdCBTZXROYW1lKGNvbnN0IG5zQVN0cmluZyAmIGFOYW1lKSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldEFjY2VwdENoYXJzZXQobnNBU3RyaW5nICYgYUFjY2VwdENoYXJzZXQpID0gMDsK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFjY2VwdENoYXJzZXQoY29uc3QgbnNBU3RyaW5nICYgYUFj
Y2VwdENoYXJzZXQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QWN0aW9uKG5zQVN0cmlu
ZyAmIGFBY3Rpb24pID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFjdGlvbihjb25zdCBuc0FT
dHJpbmcgJiBhQWN0aW9uKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEVuY3R5cGUobnNB
U3RyaW5nICYgYUVuY3R5cGUpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEVuY3R5cGUoY29u
c3QgbnNBU3RyaW5nICYgYUVuY3R5cGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TWV0
aG9kKG5zQVN0cmluZyAmIGFNZXRob2QpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldE1ldGhv
ZChjb25zdCBuc0FTdHJpbmcgJiBhTWV0aG9kKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dFRhcmdldChuc0FTdHJpbmcgJiBhVGFyZ2V0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRU
YXJnZXQoY29uc3QgbnNBU3RyaW5nICYgYVRhcmdldCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBTdWJtaXQodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZXNldCh2b2lkKSA9IDA7
Cgp9OwojIDExMCAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL2RvbS9uc0lET01OU0hUTUxGb3JtQ29udHJvbExpc3QuaCIgMQojIDI1ICIuLi8uLi8uLi9k
aXN0L2luY2x1ZGUvZG9tL25zSURPTU5TSFRNTEZvcm1Db250cm9sTGlzdC5oIgpjbGFzcyBuc0lE
T01OU0hUTUxGb3JtQ29udHJvbExpc3QgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoK
ICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0g
ezB4YTZjZjkxMWEsIDB4MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4
NWYsIDB4OGEsIDB4ZGQsIDB4MzIgfX07IHJldHVybiBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBOYW1lZEl0ZW0oY29uc3QgbnNBU3RyaW5nICYgbmFtZSwgbnNJU3VwcG9ydHMgKipfcmV0dmFs
KSA9IDA7Cgp9OwojIDExMSAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL2RvbS9uc0lET01IVE1MQ29sbGVjdGlvbi5oIiAxCiMgMjUgIi4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9kb20vbnNJRE9NSFRNTENvbGxlY3Rpb24uaCIKY2xhc3MgbnNJRE9NSFRNTENv
bGxlY3Rpb24gOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3Qg
bnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4YTZjZjkwODMsIDB4
MTViMywgMHgxMWQyLCB7IDB4OTMsIDB4MmUsIDB4MDAsIDB4ODAsIDB4NWYsIDB4OGEsIDB4ZGQs
IDB4MzIgfX07IHJldHVybiBpaWQ7fQojIDQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZG9tL25z
SURPTUhUTUxDb2xsZWN0aW9uLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMZW5ndGgoUFJVaW50
MzIgKmFMZW5ndGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXRlbShQUlVpbnQzMiBpbmRl
eCwgbnNJRE9NTm9kZSAqKl9yZXR2YWwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgTmFtZWRJ
dGVtKGNvbnN0IG5zQVN0cmluZyAmIG5hbWUsIG5zSURPTU5vZGUgKipfcmV0dmFsKSA9IDA7Cgp9
OwojIDExMiAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L2NvbnRlbnQvbnNJSFRNTERvY3VtZW50LmgiIDEKIyA0MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L2NvbnRlbnQvbnNJSFRNTERvY3VtZW50LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xh
eW91dC9uc0NvbXBhdGliaWxpdHkuaCIgMQojIDQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5
b3V0L25zQ29tcGF0aWJpbGl0eS5oIgplbnVtIG5zQ29tcGF0aWJpbGl0eSB7CiAgZUNvbXBhdGli
aWxpdHlfRnVsbFN0YW5kYXJkcyA9IDEsCiAgZUNvbXBhdGliaWxpdHlfQWxtb3N0U3RhbmRhcmRz
ID0gMiwKICBlQ29tcGF0aWJpbGl0eV9OYXZRdWlya3MgPSAzCn07CiMgNDMgIi4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9jb250ZW50L25zSUhUTUxEb2N1bWVudC5oIiAyCgpjbGFzcyBuc0lJbWFnZU1h
cDsKY2xhc3MgbnNTdHJpbmc7CmNsYXNzIG5zSURPTU5vZGVMaXN0OwpjbGFzcyBuc0lET01IVE1M
Q29sbGVjdGlvbjsKY2xhc3MgbnNJRE9NSFRNTEZvcm1FbGVtZW50OwpjbGFzcyBuc0lET01IVE1M
TWFwRWxlbWVudDsKY2xhc3MgbnNJSFRNTFN0eWxlU2hlZXQ7CmNsYXNzIG5zSVN0eWxlU2hlZXQ7
CmNsYXNzIG5zSUNTU0xvYWRlcjsKY2xhc3MgbnNJQ29udGVudDsKY2xhc3MgbnNJRE9NSFRNTEJv
ZHlFbGVtZW50OwojIDY0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc0lIVE1MRG9j
dW1lbnQuaCIKY2xhc3MgbnNJSFRNTERvY3VtZW50IDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVi
bGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBp
aWQgPSB7MHhiMmE4NDhiMCwgMHhkMGE5LCAweDExZDEsIHsweDg5LCAweGIxLCAweDAwLCAweDYw
LCAweDA4LCAweDkxLCAweDFiLCAweDgxfX07IHJldHVybiBpaWQ7fQoKICB2aXJ0dWFsIG5zcmVz
dWx0IEFkZEltYWdlTWFwKG5zSURPTUhUTUxNYXBFbGVtZW50KiBhTWFwKSA9IDA7CgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0SW1hZ2VNYXAoY29uc3QgbnNBU3RyaW5nJiBhTWFwTmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSURPTUhUTUxNYXBFbGVtZW50KiogYVJlc3VsdCkgPSAwOwoK
ICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZUltYWdlTWFwKG5zSURPTUhUTUxNYXBFbGVtZW50KiBh
TWFwKSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0TGFzdE1vZGlmaWVkKGNvbnN0IG5zQVN0
cmluZyYgYUxhc3RNb2RpZmllZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UmVmZXJyZXIo
Y29uc3QgbnNBU3RyaW5nJiBhUmVmZXJyZXIpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRDb21wYXRpYmlsaXR5TW9kZShuc0NvbXBhdGliaWxpdHkmIGFNb2RlKSA9IDA7CiAgdmlydHVh
bCBuc3Jlc3VsdCBTZXRDb21wYXRpYmlsaXR5TW9kZShuc0NvbXBhdGliaWxpdHkgYU1vZGUpID0g
MDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBXYXNEb21haW5TZXQoUFJCb29sKiBhRG9tYWluV2Fz
U2V0KSA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgUmVzb2x2ZU5hbWUoY29uc3QgbnNBU3RyaW5n
JiBhTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIG5zSURPTUhUTUxGb3JtRWxlbWVudCAq
YUZvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdXBwb3J0cyAqKmFSZXN1bHQpID0g
MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGb3JtQ29udHJvbEVsZW1lbnRzKG5zSURPTU5vZGVM
aXN0KiogYVJldHVybikgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEFkZGVkRm9ybSgpID0g
MDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVkRm9ybSgpID0gMDsKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXROdW1Gb3Jtc1N5bmNocm9ub3VzKFBSSW50MzIqIGFOdW1Gb3JtcykgPSAw
OwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJvZHlFbGVtZW50KG5zSURPTUhUTUxCb2R5RWxlbWVu
dCoqIGFCb2R5KSA9IDA7CgogIHZpcnR1YWwgUFJCb29sIElzV3JpdGluZygpID0gMDsKCn07CiMg
MTEzICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9k
b20vbnNJRE9NSFRNTFNlbGVjdEVsZW1lbnQuaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1
ZGUvZG9tL25zSURPTUhUTUxTZWxlY3RFbGVtZW50LmgiCmNsYXNzIG5zSURPTUhUTUxTZWxlY3RF
bGVtZW50IDogcHVibGljIG5zSURPTUhUTUxFbGVtZW50IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNv
bnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGE2Y2Y5MDkw
LCAweDE1YjMsIDB4MTFkMiwgeyAweDkzLCAweDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAw
eGRkLCAweDMyIH19OyByZXR1cm4gaWlkO30KCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VHlwZShu
c0FTdHJpbmcgJiBhVHlwZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTZWxlY3RlZElu
ZGV4KFBSSW50MzIgKmFTZWxlY3RlZEluZGV4KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRT
ZWxlY3RlZEluZGV4KFBSSW50MzIgYVNlbGVjdGVkSW5kZXgpID0gMDsKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0VmFsdWUobnNBU3RyaW5nICYgYVZhbHVlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs
dCBTZXRWYWx1ZShjb25zdCBuc0FTdHJpbmcgJiBhVmFsdWUpID0gMDsKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0TGVuZ3RoKFBSVWludDMyICphTGVuZ3RoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3Vs
dCBTZXRMZW5ndGgoUFJVaW50MzIgYUxlbmd0aCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRGb3JtKG5zSURPTUhUTUxGb3JtRWxlbWVudCAqICphRm9ybSkgPSAwOwoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRPcHRpb25zKG5zSURPTUhUTUxDb2xsZWN0aW9uICogKmFPcHRpb25zKSA9IDA7
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERpc2FibGVkKFBSQm9vbCAqYURpc2FibGVkKSA9IDA7
CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXREaXNhYmxlZChQUkJvb2wgYURpc2FibGVkKSA9IDA7CgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEdldE11bHRpcGxlKFBSQm9vbCAqYU11bHRpcGxlKSA9IDA7CiAg
dmlydHVhbCBuc3Jlc3VsdCBTZXRNdWx0aXBsZShQUkJvb2wgYU11bHRpcGxlKSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldE5hbWUobnNBU3RyaW5nICYgYU5hbWUpID0gMDsKICB2aXJ0dWFs
IG5zcmVzdWx0IFNldE5hbWUoY29uc3QgbnNBU3RyaW5nICYgYU5hbWUpID0gMDsKCgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0U2l6ZShQUkludDMyICphU2l6ZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1
bHQgU2V0U2l6ZShQUkludDMyIGFTaXplKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFRh
YkluZGV4KFBSSW50MzIgKmFUYWJJbmRleCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VGFi
SW5kZXgoUFJJbnQzMiBhVGFiSW5kZXgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQWRkKG5z
SURPTUhUTUxFbGVtZW50ICplbGVtZW50LCBuc0lET01IVE1MRWxlbWVudCAqYmVmb3JlKSA9IDA7
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJlbW92ZShQUkludDMyIGluZGV4KSA9IDA7CgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEJsdXIodm9pZCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGb2N1cyh2
b2lkKSA9IDA7Cgp9OwojIDExNiAibnNET01DbGFzc0luZm8uY3BwIiAyCiMgMSAiLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU1hCTEZvcm1Db250cm9sLmgiIDEKIyAxNyAiLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU1hCTEZvcm1Db250cm9sLmgiCmNsYXNzIG5zSUJv
eE9iamVjdDsKIyAyNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2RvbS9uc0lET01OU1hCTEZvcm1D
b250cm9sLmgiCmNsYXNzIG5zSURPTU5TWEJMRm9ybUNvbnRyb2wgOiBwdWJsaWMgbnNJU3VwcG9y
dHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29u
c3QgbnNJSUQgaWlkID0gezB4MWMyOGVkNjYsIDB4MWRkMiwgMHgxMWIyLCB7IDB4OTUsIDB4YWYs
IDB4ZTIsIDB4Y2YsIDB4MTAsIDB4OTMsIDB4MWEsIDB4ZGIgfX07IHJldHVybiBpaWQ7fQoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRCb3hPYmplY3QobnNJQm94T2JqZWN0ICogKmFCb3hPYmplY3Qp
ID0gMDsKCn07CiMgMTE3ICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKCgojIDEgIi4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luSW5zdGFuY2UuaCIgMQojIDE0ICIuLi8uLi8uLi9k
aXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbkluc3RhbmNlLmgiCiMgMSAiLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5TdHJlYW1MaXN0ZW5lci5oIiAxCiMgMTQgIi4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luU3RyZWFtTGlzdGVuZXIuaCIKIyAxICIu
Li8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zcGx1Z2lucm9vdC5oIiAxCiMgMTUgIi4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luU3RyZWFtTGlzdGVuZXIuaCIgMgoKCgoj
IDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luU3RyZWFtSW5mby5oIiAx
CiMgMjEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luU3RyZWFtSW5mby5o
IgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNwbHVnaW5kZWZzLmgiIDEKIyA1
OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc3BsdWdpbmRlZnMuaCIKIyAxICIvdXNy
L1gxMVI2L2luY2x1ZGUvWDExL1hsaWIuaCIgMQojIDU1ICIvdXNyL1gxMVI2L2luY2x1ZGUvWDEx
L1hsaWIuaCIKIyAxICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL1guaCIgMQojIDcxICIvdXNyL1gx
MVI2L2luY2x1ZGUvWDExL1guaCIKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFhJRDsKCgoKdHlwZWRl
ZiB1bnNpZ25lZCBsb25nIE1hc2s7CgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBBdG9tOwoKdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIFZpc3VhbElEOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgVGltZTsK
IyAxMDEgIi91c3IvWDExUjYvaW5jbHVkZS9YMTEvWC5oIgp0eXBlZGVmIFhJRCBXaW5kb3c7CnR5
cGVkZWYgWElEIERyYXdhYmxlOwoKCnR5cGVkZWYgWElEIEZvbnQ7Cgp0eXBlZGVmIFhJRCBQaXht
YXA7CnR5cGVkZWYgWElEIEN1cnNvcjsKdHlwZWRlZiBYSUQgQ29sb3JtYXA7CnR5cGVkZWYgWElE
IEdDb250ZXh0Owp0eXBlZGVmIFhJRCBLZXlTeW07Cgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgS2V5
Q29kZTsKIyA1NiAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9YbGliLmgiIDIKCgojIDEgIi91c3Iv
WDExUjYvaW5jbHVkZS9YMTEvWGZ1bmNwcm90by5oIiAxCiMgNTkgIi91c3IvWDExUjYvaW5jbHVk
ZS9YMTEvWGxpYi5oIiAyCiMgMSAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9Yb3NkZWZzLmgiIDEK
IyA2MCAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9YbGliLmgiIDIKIyA3MiAiL3Vzci9YMTFSNi9p
bmNsdWRlL1gxMS9YbGliLmgiCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdu
dS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA3MyAiL3Vzci9YMTFSNi9pbmNsdWRlL1gx
MS9YbGliLmgiIDIKIyA5NCAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9YbGliLmgiCnR5cGVkZWYg
Y2hhciAqWFBvaW50ZXI7CiMgMTY2ICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL1hsaWIuaCIKdHlw
ZWRlZiBzdHJ1Y3QgX1hFeHREYXRhIHsKICAgICAgICBpbnQgbnVtYmVyOwogICAgICAgIHN0cnVj
dCBfWEV4dERhdGEgKm5leHQ7CiAgICAgICAgaW50ICgqZnJlZV9wcml2YXRlKSgKCiAgICAgICAg
c3RydWN0IF9YRXh0RGF0YSAqZXh0ZW5zaW9uCgogICAgICAgICk7CiAgICAgICAgWFBvaW50ZXIg
cHJpdmF0ZV9kYXRhOwp9IFhFeHREYXRhOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGlu
dCBleHRlbnNpb247CiAgICAgICAgaW50IG1ham9yX29wY29kZTsKICAgICAgICBpbnQgZmlyc3Rf
ZXZlbnQ7CiAgICAgICAgaW50IGZpcnN0X2Vycm9yOwp9IFhFeHRDb2RlczsKCgoKCgp0eXBlZGVm
IHN0cnVjdCB7CiAgICBpbnQgZGVwdGg7CiAgICBpbnQgYml0c19wZXJfcGl4ZWw7CiAgICBpbnQg
c2NhbmxpbmVfcGFkOwp9IFhQaXhtYXBGb3JtYXRWYWx1ZXM7CgoKCgoKdHlwZWRlZiBzdHJ1Y3Qg
ewogICAgICAgIGludCBmdW5jdGlvbjsKICAgICAgICB1bnNpZ25lZCBsb25nIHBsYW5lX21hc2s7
CiAgICAgICAgdW5zaWduZWQgbG9uZyBmb3JlZ3JvdW5kOwogICAgICAgIHVuc2lnbmVkIGxvbmcg
YmFja2dyb3VuZDsKICAgICAgICBpbnQgbGluZV93aWR0aDsKICAgICAgICBpbnQgbGluZV9zdHls
ZTsKICAgICAgICBpbnQgY2FwX3N0eWxlOwoKICAgICAgICBpbnQgam9pbl9zdHlsZTsKICAgICAg
ICBpbnQgZmlsbF9zdHlsZTsKCiAgICAgICAgaW50IGZpbGxfcnVsZTsKICAgICAgICBpbnQgYXJj
X21vZGU7CiAgICAgICAgUGl4bWFwIHRpbGU7CiAgICAgICAgUGl4bWFwIHN0aXBwbGU7CiAgICAg
ICAgaW50IHRzX3hfb3JpZ2luOwogICAgICAgIGludCB0c195X29yaWdpbjsKICAgICAgICBGb250
IGZvbnQ7CiAgICAgICAgaW50IHN1YndpbmRvd19tb2RlOwogICAgICAgIGludCBncmFwaGljc19l
eHBvc3VyZXM7CiAgICAgICAgaW50IGNsaXBfeF9vcmlnaW47CiAgICAgICAgaW50IGNsaXBfeV9v
cmlnaW47CiAgICAgICAgUGl4bWFwIGNsaXBfbWFzazsKICAgICAgICBpbnQgZGFzaF9vZmZzZXQ7
CiAgICAgICAgY2hhciBkYXNoZXM7Cn0gWEdDVmFsdWVzOwoKCgoKCgp0eXBlZGVmIHN0cnVjdCBf
WEdDCgoKCgoKCgoqR0M7CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgWEV4dERhdGEgKmV4
dF9kYXRhOwogICAgICAgIFZpc3VhbElEIHZpc3VhbGlkOwoKICAgICAgICBpbnQgY19jbGFzczsK
CgoKICAgICAgICB1bnNpZ25lZCBsb25nIHJlZF9tYXNrLCBncmVlbl9tYXNrLCBibHVlX21hc2s7
CiAgICAgICAgaW50IGJpdHNfcGVyX3JnYjsKICAgICAgICBpbnQgbWFwX2VudHJpZXM7Cn0gVmlz
dWFsOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCBkZXB0aDsKICAgICAgICBpbnQg
bnZpc3VhbHM7CiAgICAgICAgVmlzdWFsICp2aXN1YWxzOwp9IERlcHRoOwoKCgoKCgoKc3RydWN0
IF9YRGlzcGxheTsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBYRXh0RGF0YSAqZXh0X2RhdGE7
CiAgICAgICAgc3RydWN0IF9YRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgcm9vdDsK
ICAgICAgICBpbnQgd2lkdGgsIGhlaWdodDsKICAgICAgICBpbnQgbXdpZHRoLCBtaGVpZ2h0Owog
ICAgICAgIGludCBuZGVwdGhzOwogICAgICAgIERlcHRoICpkZXB0aHM7CiAgICAgICAgaW50IHJv
b3RfZGVwdGg7CiAgICAgICAgVmlzdWFsICpyb290X3Zpc3VhbDsKICAgICAgICBHQyBkZWZhdWx0
X2djOwogICAgICAgIENvbG9ybWFwIGNtYXA7CiAgICAgICAgdW5zaWduZWQgbG9uZyB3aGl0ZV9w
aXhlbDsKICAgICAgICB1bnNpZ25lZCBsb25nIGJsYWNrX3BpeGVsOwogICAgICAgIGludCBtYXhf
bWFwcywgbWluX21hcHM7CiAgICAgICAgaW50IGJhY2tpbmdfc3RvcmU7CiAgICAgICAgaW50IHNh
dmVfdW5kZXJzOwogICAgICAgIGxvbmcgcm9vdF9pbnB1dF9tYXNrOwp9IFNjcmVlbjsKCgoKCnR5
cGVkZWYgc3RydWN0IHsKICAgICAgICBYRXh0RGF0YSAqZXh0X2RhdGE7CiAgICAgICAgaW50IGRl
cHRoOwogICAgICAgIGludCBiaXRzX3Blcl9waXhlbDsKICAgICAgICBpbnQgc2NhbmxpbmVfcGFk
Owp9IFNjcmVlbkZvcm1hdDsKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgIFBpeG1hcCBiYWNrZ3Jv
dW5kX3BpeG1hcDsKICAgIHVuc2lnbmVkIGxvbmcgYmFja2dyb3VuZF9waXhlbDsKICAgIFBpeG1h
cCBib3JkZXJfcGl4bWFwOwogICAgdW5zaWduZWQgbG9uZyBib3JkZXJfcGl4ZWw7CiAgICBpbnQg
Yml0X2dyYXZpdHk7CiAgICBpbnQgd2luX2dyYXZpdHk7CiAgICBpbnQgYmFja2luZ19zdG9yZTsK
ICAgIHVuc2lnbmVkIGxvbmcgYmFja2luZ19wbGFuZXM7CiAgICB1bnNpZ25lZCBsb25nIGJhY2tp
bmdfcGl4ZWw7CiAgICBpbnQgc2F2ZV91bmRlcjsKICAgIGxvbmcgZXZlbnRfbWFzazsKICAgIGxv
bmcgZG9fbm90X3Byb3BhZ2F0ZV9tYXNrOwogICAgaW50IG92ZXJyaWRlX3JlZGlyZWN0OwogICAg
Q29sb3JtYXAgY29sb3JtYXA7CiAgICBDdXJzb3IgY3Vyc29yOwp9IFhTZXRXaW5kb3dBdHRyaWJ1
dGVzOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50IHgsIHk7CiAgICBpbnQgd2lkdGgsIGhlaWdo
dDsKICAgIGludCBib3JkZXJfd2lkdGg7CiAgICBpbnQgZGVwdGg7CiAgICBWaXN1YWwgKnZpc3Vh
bDsKICAgIFdpbmRvdyByb290OwoKICAgIGludCBjX2NsYXNzOwoKCgogICAgaW50IGJpdF9ncmF2
aXR5OwogICAgaW50IHdpbl9ncmF2aXR5OwogICAgaW50IGJhY2tpbmdfc3RvcmU7CiAgICB1bnNp
Z25lZCBsb25nIGJhY2tpbmdfcGxhbmVzOwogICAgdW5zaWduZWQgbG9uZyBiYWNraW5nX3BpeGVs
OwogICAgaW50IHNhdmVfdW5kZXI7CiAgICBDb2xvcm1hcCBjb2xvcm1hcDsKICAgIGludCBtYXBf
aW5zdGFsbGVkOwogICAgaW50IG1hcF9zdGF0ZTsKICAgIGxvbmcgYWxsX2V2ZW50X21hc2tzOwog
ICAgbG9uZyB5b3VyX2V2ZW50X21hc2s7CiAgICBsb25nIGRvX25vdF9wcm9wYWdhdGVfbWFzazsK
ICAgIGludCBvdmVycmlkZV9yZWRpcmVjdDsKICAgIFNjcmVlbiAqc2NyZWVuOwp9IFhXaW5kb3dB
dHRyaWJ1dGVzOwoKCgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IGZhbWlseTsKICAg
ICAgICBpbnQgbGVuZ3RoOwogICAgICAgIGNoYXIgKmFkZHJlc3M7Cn0gWEhvc3RBZGRyZXNzOwoK
CgoKdHlwZWRlZiBzdHJ1Y3QgX1hJbWFnZSB7CiAgICBpbnQgd2lkdGgsIGhlaWdodDsKICAgIGlu
dCB4b2Zmc2V0OwogICAgaW50IGZvcm1hdDsKICAgIGNoYXIgKmRhdGE7CiAgICBpbnQgYnl0ZV9v
cmRlcjsKICAgIGludCBiaXRtYXBfdW5pdDsKICAgIGludCBiaXRtYXBfYml0X29yZGVyOwogICAg
aW50IGJpdG1hcF9wYWQ7CiAgICBpbnQgZGVwdGg7CiAgICBpbnQgYnl0ZXNfcGVyX2xpbmU7CiAg
ICBpbnQgYml0c19wZXJfcGl4ZWw7CiAgICB1bnNpZ25lZCBsb25nIHJlZF9tYXNrOwogICAgdW5z
aWduZWQgbG9uZyBncmVlbl9tYXNrOwogICAgdW5zaWduZWQgbG9uZyBibHVlX21hc2s7CiAgICBY
UG9pbnRlciBvYmRhdGE7CiAgICBzdHJ1Y3QgZnVuY3MgewoKICAgICAgICBzdHJ1Y3QgX1hJbWFn
ZSAqKCpjcmVhdGVfaW1hZ2UpKAogICAgICAgICAgICAgICAgc3RydWN0IF9YRGlzcGxheSogLAog
ICAgICAgICAgICAgICAgVmlzdWFsKiAsCiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgLAog
ICAgICAgICAgICAgICAgaW50ICwKICAgICAgICAgICAgICAgIGludCAsCiAgICAgICAgICAgICAg
ICBjaGFyKiAsCiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgLAogICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50ICwKICAgICAgICAgICAgICAgIGludCAsCiAgICAgICAgICAgICAgICBpbnQg
KTsKICAgICAgICBpbnQgKCpkZXN0cm95X2ltYWdlKSAoc3RydWN0IF9YSW1hZ2UgKik7CiAgICAg
ICAgdW5zaWduZWQgbG9uZyAoKmdldF9waXhlbCkgKHN0cnVjdCBfWEltYWdlICosIGludCwgaW50
KTsKICAgICAgICBpbnQgKCpwdXRfcGl4ZWwpIChzdHJ1Y3QgX1hJbWFnZSAqLCBpbnQsIGludCwg
dW5zaWduZWQgbG9uZyk7CiAgICAgICAgc3RydWN0IF9YSW1hZ2UgKigqc3ViX2ltYWdlKShzdHJ1
Y3QgX1hJbWFnZSAqLCBpbnQsIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogICAg
ICAgIGludCAoKmFkZF9waXhlbCkgKHN0cnVjdCBfWEltYWdlICosIGxvbmcpOwojIDQxMiAiL3Vz
ci9YMTFSNi9pbmNsdWRlL1gxMS9YbGliLmgiCiAgICAgICAgfSBmOwp9IFhJbWFnZTsKCgoKCnR5
cGVkZWYgc3RydWN0IHsKICAgIGludCB4LCB5OwogICAgaW50IHdpZHRoLCBoZWlnaHQ7CiAgICBp
bnQgYm9yZGVyX3dpZHRoOwogICAgV2luZG93IHNpYmxpbmc7CiAgICBpbnQgc3RhY2tfbW9kZTsK
fSBYV2luZG93Q2hhbmdlczsKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICB1bnNpZ25lZCBs
b25nIHBpeGVsOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHJlZCwgZ3JlZW4sIGJsdWU7CiAgICAg
ICAgY2hhciBmbGFnczsKICAgICAgICBjaGFyIHBhZDsKfSBYQ29sb3I7CgoKCgoKCnR5cGVkZWYg
c3RydWN0IHsKICAgIHNob3J0IHgxLCB5MSwgeDIsIHkyOwp9IFhTZWdtZW50OwoKdHlwZWRlZiBz
dHJ1Y3QgewogICAgc2hvcnQgeCwgeTsKfSBYUG9pbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBz
aG9ydCB4LCB5OwogICAgdW5zaWduZWQgc2hvcnQgd2lkdGgsIGhlaWdodDsKfSBYUmVjdGFuZ2xl
OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgc2hvcnQgeCwgeTsKICAgIHVuc2lnbmVkIHNob3J0IHdp
ZHRoLCBoZWlnaHQ7CiAgICBzaG9ydCBhbmdsZTEsIGFuZ2xlMjsKfSBYQXJjOwoKCgoKdHlwZWRl
ZiBzdHJ1Y3QgewogICAgICAgIGludCBrZXlfY2xpY2tfcGVyY2VudDsKICAgICAgICBpbnQgYmVs
bF9wZXJjZW50OwogICAgICAgIGludCBiZWxsX3BpdGNoOwogICAgICAgIGludCBiZWxsX2R1cmF0
aW9uOwogICAgICAgIGludCBsZWQ7CiAgICAgICAgaW50IGxlZF9tb2RlOwogICAgICAgIGludCBr
ZXk7CiAgICAgICAgaW50IGF1dG9fcmVwZWF0X21vZGU7Cn0gWEtleWJvYXJkQ29udHJvbDsKCgoK
dHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCBrZXlfY2xpY2tfcGVyY2VudDsKICAgICAgICBp
bnQgYmVsbF9wZXJjZW50OwogICAgICAgIHVuc2lnbmVkIGludCBiZWxsX3BpdGNoLCBiZWxsX2R1
cmF0aW9uOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbGVkX21hc2s7CiAgICAgICAgaW50IGdsb2Jh
bF9hdXRvX3JlcGVhdDsKICAgICAgICBjaGFyIGF1dG9fcmVwZWF0c1szMl07Cn0gWEtleWJvYXJk
U3RhdGU7CgoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBUaW1lIHRpbWU7CiAgICAgICAgc2hv
cnQgeCwgeTsKfSBYVGltZUNvb3JkOwoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IG1h
eF9rZXlwZXJtb2Q7CiAgICAgICAgS2V5Q29kZSAqbW9kaWZpZXJtYXA7Cn0gWE1vZGlmaWVyS2V5
bWFwOwojIDUwNiAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9YbGliLmgiCnR5cGVkZWYgc3RydWN0
IF9YRGlzcGxheSBEaXNwbGF5OwoKCnN0cnVjdCBfWFByaXZhdGU7CnN0cnVjdCBfWHJtSGFzaEJ1
Y2tldFJlYzsKCnR5cGVkZWYgc3RydWN0CgoKCnsKICAgICAgICBYRXh0RGF0YSAqZXh0X2RhdGE7
CiAgICAgICAgc3RydWN0IF9YUHJpdmF0ZSAqcHJpdmF0ZTE7CiAgICAgICAgaW50IGZkOwogICAg
ICAgIGludCBwcml2YXRlMjsKICAgICAgICBpbnQgcHJvdG9fbWFqb3JfdmVyc2lvbjsKICAgICAg
ICBpbnQgcHJvdG9fbWlub3JfdmVyc2lvbjsKICAgICAgICBjaGFyICp2ZW5kb3I7CiAgICAgICAg
WElEIHByaXZhdGUzOwogICAgICAgIFhJRCBwcml2YXRlNDsKICAgICAgICBYSUQgcHJpdmF0ZTU7
CiAgICAgICAgaW50IHByaXZhdGU2OwogICAgICAgIFhJRCAoKnJlc291cmNlX2FsbG9jKSgKCiAg
ICAgICAgICAgICAgICBzdHJ1Y3QgX1hEaXNwbGF5KgoKICAgICAgICApOwogICAgICAgIGludCBi
eXRlX29yZGVyOwogICAgICAgIGludCBiaXRtYXBfdW5pdDsKICAgICAgICBpbnQgYml0bWFwX3Bh
ZDsKICAgICAgICBpbnQgYml0bWFwX2JpdF9vcmRlcjsKICAgICAgICBpbnQgbmZvcm1hdHM7CiAg
ICAgICAgU2NyZWVuRm9ybWF0ICpwaXhtYXBfZm9ybWF0OwogICAgICAgIGludCBwcml2YXRlODsK
ICAgICAgICBpbnQgcmVsZWFzZTsKICAgICAgICBzdHJ1Y3QgX1hQcml2YXRlICpwcml2YXRlOSwg
KnByaXZhdGUxMDsKICAgICAgICBpbnQgcWxlbjsKICAgICAgICB1bnNpZ25lZCBsb25nIGxhc3Rf
cmVxdWVzdF9yZWFkOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcmVxdWVzdDsKICAgICAgICBYUG9p
bnRlciBwcml2YXRlMTE7CiAgICAgICAgWFBvaW50ZXIgcHJpdmF0ZTEyOwogICAgICAgIFhQb2lu
dGVyIHByaXZhdGUxMzsKICAgICAgICBYUG9pbnRlciBwcml2YXRlMTQ7CiAgICAgICAgdW5zaWdu
ZWQgbWF4X3JlcXVlc3Rfc2l6ZTsKICAgICAgICBzdHJ1Y3QgX1hybUhhc2hCdWNrZXRSZWMgKmRi
OwogICAgICAgIGludCAoKnByaXZhdGUxNSkoCgogICAgICAgICAgICAgICAgc3RydWN0IF9YRGlz
cGxheSoKCiAgICAgICAgICAgICAgICApOwogICAgICAgIGNoYXIgKmRpc3BsYXlfbmFtZTsKICAg
ICAgICBpbnQgZGVmYXVsdF9zY3JlZW47CiAgICAgICAgaW50IG5zY3JlZW5zOwogICAgICAgIFNj
cmVlbiAqc2NyZWVuczsKICAgICAgICB1bnNpZ25lZCBsb25nIG1vdGlvbl9idWZmZXI7CiAgICAg
ICAgdW5zaWduZWQgbG9uZyBwcml2YXRlMTY7CiAgICAgICAgaW50IG1pbl9rZXljb2RlOwogICAg
ICAgIGludCBtYXhfa2V5Y29kZTsKICAgICAgICBYUG9pbnRlciBwcml2YXRlMTc7CiAgICAgICAg
WFBvaW50ZXIgcHJpdmF0ZTE4OwogICAgICAgIGludCBwcml2YXRlMTk7CiAgICAgICAgY2hhciAq
eGRlZmF1bHRzOwoKfQoKCgoqX1hQcml2RGlzcGxheTsKIyA1ODIgIi91c3IvWDExUjYvaW5jbHVk
ZS9YMTEvWGxpYi5oIgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAg
dW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlz
cGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIFdpbmRvdyByb290
OwogICAgICAgIFdpbmRvdyBzdWJ3aW5kb3c7CiAgICAgICAgVGltZSB0aW1lOwogICAgICAgIGlu
dCB4LCB5OwogICAgICAgIGludCB4X3Jvb3QsIHlfcm9vdDsKICAgICAgICB1bnNpZ25lZCBpbnQg
c3RhdGU7CiAgICAgICAgdW5zaWduZWQgaW50IGtleWNvZGU7CiAgICAgICAgaW50IHNhbWVfc2Ny
ZWVuOwp9IFhLZXlFdmVudDsKdHlwZWRlZiBYS2V5RXZlbnQgWEtleVByZXNzZWRFdmVudDsKdHlw
ZWRlZiBYS2V5RXZlbnQgWEtleVJlbGVhc2VkRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAg
ICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNl
bmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgd2luZG93
OwogICAgICAgIFdpbmRvdyByb290OwogICAgICAgIFdpbmRvdyBzdWJ3aW5kb3c7CiAgICAgICAg
VGltZSB0aW1lOwogICAgICAgIGludCB4LCB5OwogICAgICAgIGludCB4X3Jvb3QsIHlfcm9vdDsK
ICAgICAgICB1bnNpZ25lZCBpbnQgc3RhdGU7CiAgICAgICAgdW5zaWduZWQgaW50IGJ1dHRvbjsK
ICAgICAgICBpbnQgc2FtZV9zY3JlZW47Cn0gWEJ1dHRvbkV2ZW50Owp0eXBlZGVmIFhCdXR0b25F
dmVudCBYQnV0dG9uUHJlc3NlZEV2ZW50Owp0eXBlZGVmIFhCdXR0b25FdmVudCBYQnV0dG9uUmVs
ZWFzZWRFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1
bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNw
bGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgV2luZG93IHJvb3Q7
CiAgICAgICAgV2luZG93IHN1YndpbmRvdzsKICAgICAgICBUaW1lIHRpbWU7CiAgICAgICAgaW50
IHgsIHk7CiAgICAgICAgaW50IHhfcm9vdCwgeV9yb290OwogICAgICAgIHVuc2lnbmVkIGludCBz
dGF0ZTsKICAgICAgICBjaGFyIGlzX2hpbnQ7CiAgICAgICAgaW50IHNhbWVfc2NyZWVuOwp9IFhN
b3Rpb25FdmVudDsKdHlwZWRlZiBYTW90aW9uRXZlbnQgWFBvaW50ZXJNb3ZlZEV2ZW50OwoKdHlw
ZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2Vy
aWFsOwogICAgICAgIGludCBzZW5kX2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAg
ICAgICAgV2luZG93IHdpbmRvdzsKICAgICAgICBXaW5kb3cgcm9vdDsKICAgICAgICBXaW5kb3cg
c3Vid2luZG93OwogICAgICAgIFRpbWUgdGltZTsKICAgICAgICBpbnQgeCwgeTsKICAgICAgICBp
bnQgeF9yb290LCB5X3Jvb3Q7CiAgICAgICAgaW50IG1vZGU7CiAgICAgICAgaW50IGRldGFpbDsK
CgoKCiAgICAgICAgaW50IHNhbWVfc2NyZWVuOwogICAgICAgIGludCBmb2N1czsKICAgICAgICB1
bnNpZ25lZCBpbnQgc3RhdGU7Cn0gWENyb3NzaW5nRXZlbnQ7CnR5cGVkZWYgWENyb3NzaW5nRXZl
bnQgWEVudGVyV2luZG93RXZlbnQ7CnR5cGVkZWYgWENyb3NzaW5nRXZlbnQgWExlYXZlV2luZG93
RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWdu
ZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAq
ZGlzcGxheTsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIGludCBtb2RlOwogICAgICAg
IGludCBkZXRhaWw7CgoKCgoKfSBYRm9jdXNDaGFuZ2VFdmVudDsKdHlwZWRlZiBYRm9jdXNDaGFu
Z2VFdmVudCBYRm9jdXNJbkV2ZW50Owp0eXBlZGVmIFhGb2N1c0NoYW5nZUV2ZW50IFhGb2N1c091
dEV2ZW50OwoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNp
Z25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5
ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgY2hhciBrZXlfdmVjdG9y
WzMyXTsKfSBYS2V5bWFwRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7
CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAg
ICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIGlu
dCB4LCB5OwogICAgICAgIGludCB3aWR0aCwgaGVpZ2h0OwogICAgICAgIGludCBjb3VudDsKfSBY
RXhwb3NlRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAg
dW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlz
cGxheSAqZGlzcGxheTsKICAgICAgICBEcmF3YWJsZSBkcmF3YWJsZTsKICAgICAgICBpbnQgeCwg
eTsKICAgICAgICBpbnQgd2lkdGgsIGhlaWdodDsKICAgICAgICBpbnQgY291bnQ7CiAgICAgICAg
aW50IG1ham9yX2NvZGU7CiAgICAgICAgaW50IG1pbm9yX2NvZGU7Cn0gWEdyYXBoaWNzRXhwb3Nl
RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWdu
ZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAq
ZGlzcGxheTsKICAgICAgICBEcmF3YWJsZSBkcmF3YWJsZTsKICAgICAgICBpbnQgbWFqb3JfY29k
ZTsKICAgICAgICBpbnQgbWlub3JfY29kZTsKfSBYTm9FeHBvc2VFdmVudDsKCnR5cGVkZWYgc3Ry
dWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNlcmlhbDsKICAg
ICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdp
bmRvdyB3aW5kb3c7CiAgICAgICAgaW50IHN0YXRlOwp9IFhWaXNpYmlsaXR5RXZlbnQ7Cgp0eXBl
ZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJp
YWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAg
ICAgICBXaW5kb3cgcGFyZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgaW50IHgs
IHk7CiAgICAgICAgaW50IHdpZHRoLCBoZWlnaHQ7CiAgICAgICAgaW50IGJvcmRlcl93aWR0aDsK
ICAgICAgICBpbnQgb3ZlcnJpZGVfcmVkaXJlY3Q7Cn0gWENyZWF0ZVdpbmRvd0V2ZW50OwoKdHlw
ZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2Vy
aWFsOwogICAgICAgIGludCBzZW5kX2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAg
ICAgICAgV2luZG93IGV2ZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7Cn0gWERlc3Ryb3lXaW5k
b3dFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNp
Z25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5
ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyBldmVudDsKICAgICAgICBXaW5kb3cgd2luZG93Owog
ICAgICAgIGludCBmcm9tX2NvbmZpZ3VyZTsKfSBYVW5tYXBFdmVudDsKCnR5cGVkZWYgc3RydWN0
IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAg
ICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRv
dyBldmVudDsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIGludCBvdmVycmlkZV9yZWRp
cmVjdDsKfSBYTWFwRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAg
ICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAg
ICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgcGFyZW50OwogICAgICAgIFdpbmRv
dyB3aW5kb3c7Cn0gWE1hcFJlcXVlc3RFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBp
bnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9l
dmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyBldmVudDsKICAg
ICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIFdpbmRvdyBwYXJlbnQ7CiAgICAgICAgaW50IHgs
IHk7CiAgICAgICAgaW50IG92ZXJyaWRlX3JlZGlyZWN0Owp9IFhSZXBhcmVudEV2ZW50OwoKdHlw
ZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2Vy
aWFsOwogICAgICAgIGludCBzZW5kX2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAg
ICAgICAgV2luZG93IGV2ZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAgaW50IHgs
IHk7CiAgICAgICAgaW50IHdpZHRoLCBoZWlnaHQ7CiAgICAgICAgaW50IGJvcmRlcl93aWR0aDsK
ICAgICAgICBXaW5kb3cgYWJvdmU7CiAgICAgICAgaW50IG92ZXJyaWRlX3JlZGlyZWN0Owp9IFhD
b25maWd1cmVFdmVudDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAg
ICB1bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBE
aXNwbGF5ICpkaXNwbGF5OwogICAgICAgIFdpbmRvdyBldmVudDsKICAgICAgICBXaW5kb3cgd2lu
ZG93OwogICAgICAgIGludCB4LCB5Owp9IFhHcmF2aXR5RXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7
CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAg
aW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cg
d2luZG93OwogICAgICAgIGludCB3aWR0aCwgaGVpZ2h0Owp9IFhSZXNpemVSZXF1ZXN0RXZlbnQ7
Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9u
ZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxh
eTsKICAgICAgICBXaW5kb3cgcGFyZW50OwogICAgICAgIFdpbmRvdyB3aW5kb3c7CiAgICAgICAg
aW50IHgsIHk7CiAgICAgICAgaW50IHdpZHRoLCBoZWlnaHQ7CiAgICAgICAgaW50IGJvcmRlcl93
aWR0aDsKICAgICAgICBXaW5kb3cgYWJvdmU7CiAgICAgICAgaW50IGRldGFpbDsKICAgICAgICB1
bnNpZ25lZCBsb25nIHZhbHVlX21hc2s7Cn0gWENvbmZpZ3VyZVJlcXVlc3RFdmVudDsKCnR5cGVk
ZWYgc3RydWN0IHsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHNlcmlh
bDsKICAgICAgICBpbnQgc2VuZF9ldmVudDsKICAgICAgICBEaXNwbGF5ICpkaXNwbGF5OwogICAg
ICAgIFdpbmRvdyBldmVudDsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIGludCBwbGFj
ZTsKfSBYQ2lyY3VsYXRlRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7
CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAg
ICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgcGFyZW50OwogICAgICAgIFdp
bmRvdyB3aW5kb3c7CiAgICAgICAgaW50IHBsYWNlOwp9IFhDaXJjdWxhdGVSZXF1ZXN0RXZlbnQ7
Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9u
ZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxh
eTsKICAgICAgICBXaW5kb3cgd2luZG93OwogICAgICAgIEF0b20gYXRvbTsKICAgICAgICBUaW1l
IHRpbWU7CiAgICAgICAgaW50IHN0YXRlOwp9IFhQcm9wZXJ0eUV2ZW50OwoKdHlwZWRlZiBzdHJ1
Y3QgewogICAgICAgIGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VyaWFsOwogICAg
ICAgIGludCBzZW5kX2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAgICAgICAgV2lu
ZG93IHdpbmRvdzsKICAgICAgICBBdG9tIHNlbGVjdGlvbjsKICAgICAgICBUaW1lIHRpbWU7Cn0g
WFNlbGVjdGlvbkNsZWFyRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7
CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNlbmRfZXZlbnQ7CiAg
ICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgb3duZXI7CiAgICAgICAgV2lu
ZG93IHJlcXVlc3RvcjsKICAgICAgICBBdG9tIHNlbGVjdGlvbjsKICAgICAgICBBdG9tIHRhcmdl
dDsKICAgICAgICBBdG9tIHByb3BlcnR5OwogICAgICAgIFRpbWUgdGltZTsKfSBYU2VsZWN0aW9u
UmVxdWVzdEV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCB0eXBlOwogICAgICAg
IHVuc2lnbmVkIGxvbmcgc2VyaWFsOwogICAgICAgIGludCBzZW5kX2V2ZW50OwogICAgICAgIERp
c3BsYXkgKmRpc3BsYXk7CiAgICAgICAgV2luZG93IHJlcXVlc3RvcjsKICAgICAgICBBdG9tIHNl
bGVjdGlvbjsKICAgICAgICBBdG9tIHRhcmdldDsKICAgICAgICBBdG9tIHByb3BlcnR5OwogICAg
ICAgIFRpbWUgdGltZTsKfSBYU2VsZWN0aW9uRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAg
ICAgaW50IHR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZXJpYWw7CiAgICAgICAgaW50IHNl
bmRfZXZlbnQ7CiAgICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBXaW5kb3cgd2luZG93
OwogICAgICAgIENvbG9ybWFwIGNvbG9ybWFwOwoKICAgICAgICBpbnQgY19uZXc7CgoKCiAgICAg
ICAgaW50IHN0YXRlOwp9IFhDb2xvcm1hcEV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAg
IGludCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VyaWFsOwogICAgICAgIGludCBzZW5k
X2V2ZW50OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAgICAgICAgV2luZG93IHdpbmRvdzsK
ICAgICAgICBBdG9tIG1lc3NhZ2VfdHlwZTsKICAgICAgICBpbnQgZm9ybWF0OwogICAgICAgIHVu
aW9uIHsKICAgICAgICAgICAgICAgIGNoYXIgYlsyMF07CiAgICAgICAgICAgICAgICBzaG9ydCBz
WzEwXTsKICAgICAgICAgICAgICAgIGxvbmcgbFs1XTsKICAgICAgICAgICAgICAgIH0gZGF0YTsK
fSBYQ2xpZW50TWVzc2FnZUV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCB0eXBl
OwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VyaWFsOwogICAgICAgIGludCBzZW5kX2V2ZW50Owog
ICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAgICAgICAgV2luZG93IHdpbmRvdzsKICAgICAgICBp
bnQgcmVxdWVzdDsKCiAgICAgICAgaW50IGZpcnN0X2tleWNvZGU7CiAgICAgICAgaW50IGNvdW50
Owp9IFhNYXBwaW5nRXZlbnQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHR5cGU7CiAg
ICAgICAgRGlzcGxheSAqZGlzcGxheTsKICAgICAgICBYSUQgcmVzb3VyY2VpZDsKICAgICAgICB1
bnNpZ25lZCBsb25nIHNlcmlhbDsKICAgICAgICB1bnNpZ25lZCBjaGFyIGVycm9yX2NvZGU7CiAg
ICAgICAgdW5zaWduZWQgY2hhciByZXF1ZXN0X2NvZGU7CiAgICAgICAgdW5zaWduZWQgY2hhciBt
aW5vcl9jb2RlOwp9IFhFcnJvckV2ZW50OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIGludCB0
eXBlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VyaWFsOwogICAgICAgIGludCBzZW5kX2V2ZW50
OwogICAgICAgIERpc3BsYXkgKmRpc3BsYXk7CiAgICAgICAgV2luZG93IHdpbmRvdzsKfSBYQW55
RXZlbnQ7CgoKCgoKdHlwZWRlZiB1bmlvbiBfWEV2ZW50IHsKICAgICAgICBpbnQgdHlwZTsKICAg
ICAgICBYQW55RXZlbnQgeGFueTsKICAgICAgICBYS2V5RXZlbnQgeGtleTsKICAgICAgICBYQnV0
dG9uRXZlbnQgeGJ1dHRvbjsKICAgICAgICBYTW90aW9uRXZlbnQgeG1vdGlvbjsKICAgICAgICBY
Q3Jvc3NpbmdFdmVudCB4Y3Jvc3Npbmc7CiAgICAgICAgWEZvY3VzQ2hhbmdlRXZlbnQgeGZvY3Vz
OwogICAgICAgIFhFeHBvc2VFdmVudCB4ZXhwb3NlOwogICAgICAgIFhHcmFwaGljc0V4cG9zZUV2
ZW50IHhncmFwaGljc2V4cG9zZTsKICAgICAgICBYTm9FeHBvc2VFdmVudCB4bm9leHBvc2U7CiAg
ICAgICAgWFZpc2liaWxpdHlFdmVudCB4dmlzaWJpbGl0eTsKICAgICAgICBYQ3JlYXRlV2luZG93
RXZlbnQgeGNyZWF0ZXdpbmRvdzsKICAgICAgICBYRGVzdHJveVdpbmRvd0V2ZW50IHhkZXN0cm95
d2luZG93OwogICAgICAgIFhVbm1hcEV2ZW50IHh1bm1hcDsKICAgICAgICBYTWFwRXZlbnQgeG1h
cDsKICAgICAgICBYTWFwUmVxdWVzdEV2ZW50IHhtYXByZXF1ZXN0OwogICAgICAgIFhSZXBhcmVu
dEV2ZW50IHhyZXBhcmVudDsKICAgICAgICBYQ29uZmlndXJlRXZlbnQgeGNvbmZpZ3VyZTsKICAg
ICAgICBYR3Jhdml0eUV2ZW50IHhncmF2aXR5OwogICAgICAgIFhSZXNpemVSZXF1ZXN0RXZlbnQg
eHJlc2l6ZXJlcXVlc3Q7CiAgICAgICAgWENvbmZpZ3VyZVJlcXVlc3RFdmVudCB4Y29uZmlndXJl
cmVxdWVzdDsKICAgICAgICBYQ2lyY3VsYXRlRXZlbnQgeGNpcmN1bGF0ZTsKICAgICAgICBYQ2ly
Y3VsYXRlUmVxdWVzdEV2ZW50IHhjaXJjdWxhdGVyZXF1ZXN0OwogICAgICAgIFhQcm9wZXJ0eUV2
ZW50IHhwcm9wZXJ0eTsKICAgICAgICBYU2VsZWN0aW9uQ2xlYXJFdmVudCB4c2VsZWN0aW9uY2xl
YXI7CiAgICAgICAgWFNlbGVjdGlvblJlcXVlc3RFdmVudCB4c2VsZWN0aW9ucmVxdWVzdDsKICAg
ICAgICBYU2VsZWN0aW9uRXZlbnQgeHNlbGVjdGlvbjsKICAgICAgICBYQ29sb3JtYXBFdmVudCB4
Y29sb3JtYXA7CiAgICAgICAgWENsaWVudE1lc3NhZ2VFdmVudCB4Y2xpZW50OwogICAgICAgIFhN
YXBwaW5nRXZlbnQgeG1hcHBpbmc7CiAgICAgICAgWEVycm9yRXZlbnQgeGVycm9yOwogICAgICAg
IFhLZXltYXBFdmVudCB4a2V5bWFwOwogICAgICAgIGxvbmcgcGFkWzI0XTsKfSBYRXZlbnQ7CgoK
CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBzaG9ydCBsYmVhcmluZzsKICAgIHNob3J0IHJiZWFy
aW5nOwogICAgc2hvcnQgd2lkdGg7CiAgICBzaG9ydCBhc2NlbnQ7CiAgICBzaG9ydCBkZXNjZW50
OwogICAgdW5zaWduZWQgc2hvcnQgYXR0cmlidXRlczsKfSBYQ2hhclN0cnVjdDsKCgoKCgp0eXBl
ZGVmIHN0cnVjdCB7CiAgICBBdG9tIG5hbWU7CiAgICB1bnNpZ25lZCBsb25nIGNhcmQzMjsKfSBY
Rm9udFByb3A7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYRXh0RGF0YSAqZXh0X2RhdGE7CiAgICBG
b250IGZpZDsKICAgIHVuc2lnbmVkIGRpcmVjdGlvbjsKICAgIHVuc2lnbmVkIG1pbl9jaGFyX29y
X2J5dGUyOwogICAgdW5zaWduZWQgbWF4X2NoYXJfb3JfYnl0ZTI7CiAgICB1bnNpZ25lZCBtaW5f
Ynl0ZTE7CiAgICB1bnNpZ25lZCBtYXhfYnl0ZTE7CiAgICBpbnQgYWxsX2NoYXJzX2V4aXN0Owog
ICAgdW5zaWduZWQgZGVmYXVsdF9jaGFyOwogICAgaW50IG5fcHJvcGVydGllczsKICAgIFhGb250
UHJvcCAqcHJvcGVydGllczsKICAgIFhDaGFyU3RydWN0IG1pbl9ib3VuZHM7CiAgICBYQ2hhclN0
cnVjdCBtYXhfYm91bmRzOwogICAgWENoYXJTdHJ1Y3QgKnBlcl9jaGFyOwogICAgaW50IGFzY2Vu
dDsKICAgIGludCBkZXNjZW50Owp9IFhGb250U3RydWN0OwoKCgoKdHlwZWRlZiBzdHJ1Y3Qgewog
ICAgY2hhciAqY2hhcnM7CiAgICBpbnQgbmNoYXJzOwogICAgaW50IGRlbHRhOwogICAgRm9udCBm
b250Owp9IFhUZXh0SXRlbTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIHVuc2lnbmVkIGNoYXIgYnl0
ZTE7CiAgICB1bnNpZ25lZCBjaGFyIGJ5dGUyOwp9IFhDaGFyMmI7Cgp0eXBlZGVmIHN0cnVjdCB7
CiAgICBYQ2hhcjJiICpjaGFyczsKICAgIGludCBuY2hhcnM7CiAgICBpbnQgZGVsdGE7CiAgICBG
b250IGZvbnQ7Cn0gWFRleHRJdGVtMTY7CgoKdHlwZWRlZiB1bmlvbiB7IERpc3BsYXkgKmRpc3Bs
YXk7CiAgICAgICAgICAgICAgICBHQyBnYzsKICAgICAgICAgICAgICAgIFZpc3VhbCAqdmlzdWFs
OwogICAgICAgICAgICAgICAgU2NyZWVuICpzY3JlZW47CiAgICAgICAgICAgICAgICBTY3JlZW5G
b3JtYXQgKnBpeG1hcF9mb3JtYXQ7CiAgICAgICAgICAgICAgICBYRm9udFN0cnVjdCAqZm9udDsg
fSBYRURhdGFPYmplY3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBYUmVjdGFuZ2xlIG1heF9pbmtf
ZXh0ZW50OwogICAgWFJlY3RhbmdsZSBtYXhfbG9naWNhbF9leHRlbnQ7Cn0gWEZvbnRTZXRFeHRl
bnRzOwoKCgoKCnR5cGVkZWYgc3RydWN0IF9YT00gKlhPTTsKdHlwZWRlZiBzdHJ1Y3QgX1hPQyAq
WE9DLCAqWEZvbnRTZXQ7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBjaGFyICpjaGFyczsKICAgIGlu
dCBuY2hhcnM7CiAgICBpbnQgZGVsdGE7CiAgICBYRm9udFNldCBmb250X3NldDsKfSBYbWJUZXh0
SXRlbTsKCnR5cGVkZWYgc3RydWN0IHsKICAgIHdjaGFyX3QgKmNoYXJzOwogICAgaW50IG5jaGFy
czsKICAgIGludCBkZWx0YTsKICAgIFhGb250U2V0IGZvbnRfc2V0Owp9IFh3Y1RleHRJdGVtOwoj
IDExMTYgIi91c3IvWDExUjYvaW5jbHVkZS9YMTEvWGxpYi5oIgp0eXBlZGVmIHN0cnVjdCB7CiAg
ICBpbnQgY2hhcnNldF9jb3VudDsKICAgIGNoYXIgKipjaGFyc2V0X2xpc3Q7Cn0gWE9NQ2hhclNl
dExpc3Q7Cgp0eXBlZGVmIGVudW0gewogICAgWE9NT3JpZW50YXRpb25fTFRSX1RUQiwKICAgIFhP
TU9yaWVudGF0aW9uX1JUTF9UVEIsCiAgICBYT01PcmllbnRhdGlvbl9UVEJfTFRSLAogICAgWE9N
T3JpZW50YXRpb25fVFRCX1JUTCwKICAgIFhPTU9yaWVudGF0aW9uX0NvbnRleHQKfSBYT3JpZW50
YXRpb247Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICBpbnQgbnVtX29yaWVudGF0aW9uOwogICAgWE9y
aWVudGF0aW9uICpvcmllbnRhdGlvbjsKfSBYT01PcmllbnRhdGlvbjsKCnR5cGVkZWYgc3RydWN0
IHsKICAgIGludCBudW1fZm9udDsKICAgIFhGb250U3RydWN0ICoqZm9udF9zdHJ1Y3RfbGlzdDsK
ICAgIGNoYXIgKipmb250X25hbWVfbGlzdDsKfSBYT01Gb250SW5mbzsKCnR5cGVkZWYgc3RydWN0
IF9YSU0gKlhJTTsKdHlwZWRlZiBzdHJ1Y3QgX1hJQyAqWElDOwoKdHlwZWRlZiB2b2lkICgqWElN
UHJvYykoCgogICAgWElNLAogICAgWFBvaW50ZXIsCiAgICBYUG9pbnRlcgoKKTsKCnR5cGVkZWYg
aW50ICgqWElDUHJvYykoCgogICAgWElDLAogICAgWFBvaW50ZXIsCiAgICBYUG9pbnRlcgoKKTsK
CnR5cGVkZWYgdm9pZCAoKlhJRFByb2MpKAoKICAgIERpc3BsYXkqLAogICAgWFBvaW50ZXIsCiAg
ICBYUG9pbnRlcgoKKTsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBYSU1TdHlsZTsKCnR5cGVkZWYg
c3RydWN0IHsKICAgIHVuc2lnbmVkIHNob3J0IGNvdW50X3N0eWxlczsKICAgIFhJTVN0eWxlICpz
dXBwb3J0ZWRfc3R5bGVzOwp9IFhJTVN0eWxlczsKIyAxMjM1ICIvdXNyL1gxMVI2L2luY2x1ZGUv
WDExL1hsaWIuaCIKdHlwZWRlZiB2b2lkICpYVmFOZXN0ZWRMaXN0OwoKCgoKdHlwZWRlZiBzdHJ1
Y3QgewogICAgWFBvaW50ZXIgY2xpZW50X2RhdGE7CiAgICBYSU1Qcm9jIGNhbGxiYWNrOwp9IFhJ
TUNhbGxiYWNrOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgWFBvaW50ZXIgY2xpZW50X2RhdGE7CiAg
ICBYSUNQcm9jIGNhbGxiYWNrOwp9IFhJQ0NhbGxiYWNrOwoKdHlwZWRlZiB1bnNpZ25lZCBsb25n
IFhJTUZlZWRiYWNrOwojIDEyNjIgIi91c3IvWDExUjYvaW5jbHVkZS9YMTEvWGxpYi5oIgp0eXBl
ZGVmIHN0cnVjdCBfWElNVGV4dCB7CiAgICB1bnNpZ25lZCBzaG9ydCBsZW5ndGg7CiAgICBYSU1G
ZWVkYmFjayAqZmVlZGJhY2s7CiAgICBpbnQgZW5jb2RpbmdfaXNfd2NoYXI7CiAgICB1bmlvbiB7
CiAgICAgICAgY2hhciAqbXVsdGlfYnl0ZTsKICAgICAgICB3Y2hhcl90ICp3aWRlX2NoYXI7CiAg
ICB9IHN0cmluZzsKfSBYSU1UZXh0OwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFhJTVByZWVkaXRT
dGF0ZTsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfWElNUHJlZWRpdFN0YXRlTm90aWZ5Q2FsbGJhY2tT
dHJ1Y3QgewogICAgWElNUHJlZWRpdFN0YXRlIHN0YXRlOwp9IFhJTVByZWVkaXRTdGF0ZU5vdGlm
eUNhbGxiYWNrU3RydWN0OwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIFhJTVJlc2V0U3RhdGU7CgoK
Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgWElNU3RyaW5nQ29udmVyc2lvbkZlZWRiYWNrOwojIDEy
OTYgIi91c3IvWDExUjYvaW5jbHVkZS9YMTEvWGxpYi5oIgp0eXBlZGVmIHN0cnVjdCBfWElNU3Ry
aW5nQ29udmVyc2lvblRleHQgewogICAgdW5zaWduZWQgc2hvcnQgbGVuZ3RoOwogICAgWElNU3Ry
aW5nQ29udmVyc2lvbkZlZWRiYWNrICpmZWVkYmFjazsKICAgIGludCBlbmNvZGluZ19pc193Y2hh
cjsKICAgIHVuaW9uIHsKICAgICAgICBjaGFyICptYnM7CiAgICAgICAgd2NoYXJfdCAqd2NzOwog
ICAgfSBzdHJpbmc7Cn0gWElNU3RyaW5nQ29udmVyc2lvblRleHQ7Cgp0eXBlZGVmIHVuc2lnbmVk
IHNob3J0IFhJTVN0cmluZ0NvbnZlcnNpb25Qb3NpdGlvbjsKCnR5cGVkZWYgdW5zaWduZWQgc2hv
cnQgWElNU3RyaW5nQ29udmVyc2lvblR5cGU7CgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQg
WElNU3RyaW5nQ29udmVyc2lvbk9wZXJhdGlvbjsKCgoKCnR5cGVkZWYgZW51bSB7CiAgICBYSU1G
b3J3YXJkQ2hhciwgWElNQmFja3dhcmRDaGFyLAogICAgWElNRm9yd2FyZFdvcmQsIFhJTUJhY2t3
YXJkV29yZCwKICAgIFhJTUNhcmV0VXAsIFhJTUNhcmV0RG93biwKICAgIFhJTU5leHRMaW5lLCBY
SU1QcmV2aW91c0xpbmUsCiAgICBYSU1MaW5lU3RhcnQsIFhJTUxpbmVFbmQsCiAgICBYSU1BYnNv
bHV0ZVBvc2l0aW9uLAogICAgWElNRG9udENoYW5nZQp9IFhJTUNhcmV0RGlyZWN0aW9uOwoKdHlw
ZWRlZiBzdHJ1Y3QgX1hJTVN0cmluZ0NvbnZlcnNpb25DYWxsYmFja1N0cnVjdCB7CiAgICBYSU1T
dHJpbmdDb252ZXJzaW9uUG9zaXRpb24gcG9zaXRpb247CiAgICBYSU1DYXJldERpcmVjdGlvbiBk
aXJlY3Rpb247CiAgICBYSU1TdHJpbmdDb252ZXJzaW9uT3BlcmF0aW9uIG9wZXJhdGlvbjsKICAg
IHVuc2lnbmVkIHNob3J0IGZhY3RvcjsKICAgIFhJTVN0cmluZ0NvbnZlcnNpb25UZXh0ICp0ZXh0
Owp9IFhJTVN0cmluZ0NvbnZlcnNpb25DYWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgc3RydWN0IF9Y
SU1QcmVlZGl0RHJhd0NhbGxiYWNrU3RydWN0IHsKICAgIGludCBjYXJldDsKICAgIGludCBjaGdf
Zmlyc3Q7CiAgICBpbnQgY2hnX2xlbmd0aDsKICAgIFhJTVRleHQgKnRleHQ7Cn0gWElNUHJlZWRp
dERyYXdDYWxsYmFja1N0cnVjdDsKCnR5cGVkZWYgZW51bSB7CiAgICBYSU1Jc0ludmlzaWJsZSwK
ICAgIFhJTUlzUHJpbWFyeSwKICAgIFhJTUlzU2Vjb25kYXJ5Cn0gWElNQ2FyZXRTdHlsZTsKCnR5
cGVkZWYgc3RydWN0IF9YSU1QcmVlZGl0Q2FyZXRDYWxsYmFja1N0cnVjdCB7CiAgICBpbnQgcG9z
aXRpb247CiAgICBYSU1DYXJldERpcmVjdGlvbiBkaXJlY3Rpb247CiAgICBYSU1DYXJldFN0eWxl
IHN0eWxlOwp9IFhJTVByZWVkaXRDYXJldENhbGxiYWNrU3RydWN0OwoKdHlwZWRlZiBlbnVtIHsK
ICAgIFhJTVRleHRUeXBlLAogICAgWElNQml0bWFwVHlwZQp9IFhJTVN0YXR1c0RhdGFUeXBlOwoK
dHlwZWRlZiBzdHJ1Y3QgX1hJTVN0YXR1c0RyYXdDYWxsYmFja1N0cnVjdCB7CiAgICBYSU1TdGF0
dXNEYXRhVHlwZSB0eXBlOwogICAgdW5pb24gewogICAgICAgIFhJTVRleHQgKnRleHQ7CiAgICAg
ICAgUGl4bWFwIGJpdG1hcDsKICAgIH0gZGF0YTsKfSBYSU1TdGF0dXNEcmF3Q2FsbGJhY2tTdHJ1
Y3Q7Cgp0eXBlZGVmIHN0cnVjdCBfWElNSG90S2V5VHJpZ2dlciB7CiAgICBLZXlTeW0ga2V5c3lt
OwogICAgaW50IG1vZGlmaWVyOwogICAgaW50IG1vZGlmaWVyX21hc2s7Cn0gWElNSG90S2V5VHJp
Z2dlcjsKCnR5cGVkZWYgc3RydWN0IF9YSU1Ib3RLZXlUcmlnZ2VycyB7CiAgICBpbnQgbnVtX2hv
dF9rZXk7CiAgICBYSU1Ib3RLZXlUcmlnZ2VyICprZXk7Cn0gWElNSG90S2V5VHJpZ2dlcnM7Cgp0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgWElNSG90S2V5U3RhdGU7CgoKCgp0eXBlZGVmIHN0cnVjdCB7
CiAgICB1bnNpZ25lZCBzaG9ydCBjb3VudF92YWx1ZXM7CiAgICBjaGFyICoqc3VwcG9ydGVkX3Zh
bHVlczsKfSBYSU1WYWx1ZXNMaXN0OwoKZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJuIGludCBfWGRl
YnVnOwoKZXh0ZXJuIFhGb250U3RydWN0ICpYTG9hZFF1ZXJ5Rm9udCgKCiAgICBEaXNwbGF5KiAs
CiAgICBjb25zdCBjaGFyKgoKKTsKCmV4dGVybiBYRm9udFN0cnVjdCAqWFF1ZXJ5Rm9udCgKCiAg
ICBEaXNwbGF5KiAsCiAgICBYSUQKCik7CgoKZXh0ZXJuIFhUaW1lQ29vcmQgKlhHZXRNb3Rpb25F
dmVudHMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFRpbWUgLAogICAgVGltZSAs
CiAgICBpbnQqCgopOwoKZXh0ZXJuIFhNb2RpZmllcktleW1hcCAqWERlbGV0ZU1vZGlmaWVybWFw
RW50cnkoCgogICAgWE1vZGlmaWVyS2V5bWFwKiAsCgogICAgdW5zaWduZWQgaW50ICwKCgoKICAg
IGludAoKKTsKCmV4dGVybiBYTW9kaWZpZXJLZXltYXAgKlhHZXRNb2RpZmllck1hcHBpbmcoCgog
ICAgRGlzcGxheSoKCik7CgpleHRlcm4gWE1vZGlmaWVyS2V5bWFwICpYSW5zZXJ0TW9kaWZpZXJt
YXBFbnRyeSgKCiAgICBYTW9kaWZpZXJLZXltYXAqICwKCiAgICB1bnNpZ25lZCBpbnQgLAoKCgog
ICAgaW50CgopOwoKZXh0ZXJuIFhNb2RpZmllcktleW1hcCAqWE5ld01vZGlmaWVybWFwKAoKICAg
IGludAoKKTsKCmV4dGVybiBYSW1hZ2UgKlhDcmVhdGVJbWFnZSgKCiAgICBEaXNwbGF5KiAsCiAg
ICBWaXN1YWwqICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGNo
YXIqICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgaW50ICwKICAg
IGludAoKKTsKZXh0ZXJuIGludCBYSW5pdEltYWdlKAoKICAgIFhJbWFnZSoKCik7CmV4dGVybiBY
SW1hZ2UgKlhHZXRJbWFnZSgKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBpbnQg
LAogICAgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5z
aWduZWQgbG9uZyAsCiAgICBpbnQKCik7CmV4dGVybiBYSW1hZ2UgKlhHZXRTdWJJbWFnZSgKCiAg
ICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIHVuc2ln
bmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgbG9uZyAsCiAgICBpbnQg
LAogICAgWEltYWdlKiAsCiAgICBpbnQgLAogICAgaW50CgopOwoKCgoKZXh0ZXJuIERpc3BsYXkg
KlhPcGVuRGlzcGxheSgKCiAgICBjb25zdCBjaGFyKgoKKTsKCmV4dGVybiB2b2lkIFhybUluaXRp
YWxpemUoCgogICAgdm9pZAoKKTsKCmV4dGVybiBjaGFyICpYRmV0Y2hCeXRlcygKCiAgICBEaXNw
bGF5KiAsCiAgICBpbnQqCgopOwpleHRlcm4gY2hhciAqWEZldGNoQnVmZmVyKAoKICAgIERpc3Bs
YXkqICwKICAgIGludCogLAogICAgaW50CgopOwpleHRlcm4gY2hhciAqWEdldEF0b21OYW1lKAoK
ICAgIERpc3BsYXkqICwKICAgIEF0b20KCik7CmV4dGVybiBpbnQgWEdldEF0b21OYW1lcygKCiAg
ICBEaXNwbGF5KiAsCiAgICBBdG9tKiAsCiAgICBpbnQgLAogICAgY2hhcioqCgopOwpleHRlcm4g
Y2hhciAqWEdldERlZmF1bHQoCgogICAgRGlzcGxheSogLAogICAgY29uc3QgY2hhciogLAogICAg
Y29uc3QgY2hhcioKCik7CmV4dGVybiBjaGFyICpYRGlzcGxheU5hbWUoCgogICAgY29uc3QgY2hh
cioKCik7CmV4dGVybiBjaGFyICpYS2V5c3ltVG9TdHJpbmcoCgogICAgS2V5U3ltCgopOwoKZXh0
ZXJuIGludCAoKlhTeW5jaHJvbml6ZSgKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQKCikpKAoKICAg
IERpc3BsYXkqCgopOwpleHRlcm4gaW50ICgqWFNldEFmdGVyRnVuY3Rpb24oCgogICAgRGlzcGxh
eSogLAogICAgaW50ICgqKSAoCgogICAgICAgICAgICAgRGlzcGxheSoKCiAgICAgICAgICAgICkK
CikpKAoKICAgIERpc3BsYXkqCgopOwpleHRlcm4gQXRvbSBYSW50ZXJuQXRvbSgKCiAgICBEaXNw
bGF5KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBpbnQKCik7CmV4dGVybiBpbnQgWEludGVybkF0
b21zKAoKICAgIERpc3BsYXkqICwKICAgIGNoYXIqKiAsCiAgICBpbnQgLAogICAgaW50ICwKICAg
IEF0b20qCgopOwpleHRlcm4gQ29sb3JtYXAgWENvcHlDb2xvcm1hcEFuZEZyZWUoCgogICAgRGlz
cGxheSogLAogICAgQ29sb3JtYXAKCik7CmV4dGVybiBDb2xvcm1hcCBYQ3JlYXRlQ29sb3JtYXAo
CgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFZpc3VhbCogLAogICAgaW50CgopOwpl
eHRlcm4gQ3Vyc29yIFhDcmVhdGVQaXhtYXBDdXJzb3IoCgogICAgRGlzcGxheSogLAogICAgUGl4
bWFwICwKICAgIFBpeG1hcCAsCiAgICBYQ29sb3IqICwKICAgIFhDb2xvciogLAogICAgdW5zaWdu
ZWQgaW50ICwKICAgIHVuc2lnbmVkIGludAoKKTsKZXh0ZXJuIEN1cnNvciBYQ3JlYXRlR2x5cGhD
dXJzb3IoCgogICAgRGlzcGxheSogLAogICAgRm9udCAsCiAgICBGb250ICwKICAgIHVuc2lnbmVk
IGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgWENvbG9yIGNvbnN0ICogLAogICAgWENvbG9y
IGNvbnN0ICoKCik7CmV4dGVybiBDdXJzb3IgWENyZWF0ZUZvbnRDdXJzb3IoCgogICAgRGlzcGxh
eSogLAogICAgdW5zaWduZWQgaW50CgopOwpleHRlcm4gRm9udCBYTG9hZEZvbnQoCgogICAgRGlz
cGxheSogLAogICAgY29uc3QgY2hhcioKCik7CmV4dGVybiBHQyBYQ3JlYXRlR0MoCgogICAgRGlz
cGxheSogLAogICAgRHJhd2FibGUgLAogICAgdW5zaWduZWQgbG9uZyAsCiAgICBYR0NWYWx1ZXMq
CgopOwpleHRlcm4gR0NvbnRleHQgWEdDb250ZXh0RnJvbUdDKAoKICAgIEdDCgopOwpleHRlcm4g
dm9pZCBYRmx1c2hHQygKCiAgICBEaXNwbGF5KiAsCiAgICBHQwoKKTsKZXh0ZXJuIFBpeG1hcCBY
Q3JlYXRlUGl4bWFwKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIHVuc2lnbmVk
IGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50CgopOwpleHRlcm4gUGl4
bWFwIFhDcmVhdGVCaXRtYXBGcm9tRGF0YSgKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAs
CiAgICBjb25zdCBjaGFyKiAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50Cgop
OwpleHRlcm4gUGl4bWFwIFhDcmVhdGVQaXhtYXBGcm9tQml0bWFwRGF0YSgKCiAgICBEaXNwbGF5
KiAsCiAgICBEcmF3YWJsZSAsCiAgICBjaGFyKiAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5z
aWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGxvbmcgLAogICAgdW5zaWduZWQgbG9uZyAsCiAgICB1
bnNpZ25lZCBpbnQKCik7CmV4dGVybiBXaW5kb3cgWENyZWF0ZVNpbXBsZVdpbmRvdygKCiAgICBE
aXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgaW50ICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBp
bnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBs
b25nICwKICAgIHVuc2lnbmVkIGxvbmcKCik7CmV4dGVybiBXaW5kb3cgWEdldFNlbGVjdGlvbk93
bmVyKAoKICAgIERpc3BsYXkqICwKICAgIEF0b20KCik7CmV4dGVybiBXaW5kb3cgWENyZWF0ZVdp
bmRvdygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgaW50ICwKICAgIGludCAsCiAg
ICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAg
ICBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIFZpc3VhbCogLAogICAgdW5zaWduZWQgbG9u
ZyAsCiAgICBYU2V0V2luZG93QXR0cmlidXRlcyoKCik7CmV4dGVybiBDb2xvcm1hcCAqWExpc3RJ
bnN0YWxsZWRDb2xvcm1hcHMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGludCoK
Cik7CmV4dGVybiBjaGFyICoqWExpc3RGb250cygKCiAgICBEaXNwbGF5KiAsCiAgICBjb25zdCBj
aGFyKiAsCiAgICBpbnQgLAogICAgaW50KgoKKTsKZXh0ZXJuIGNoYXIgKipYTGlzdEZvbnRzV2l0
aEluZm8oCgogICAgRGlzcGxheSogLAogICAgY29uc3QgY2hhciogLAogICAgaW50ICwKICAgIGlu
dCogLAogICAgWEZvbnRTdHJ1Y3QqKgoKKTsKZXh0ZXJuIGNoYXIgKipYR2V0Rm9udFBhdGgoCgog
ICAgRGlzcGxheSogLAogICAgaW50KgoKKTsKZXh0ZXJuIGNoYXIgKipYTGlzdEV4dGVuc2lvbnMo
CgogICAgRGlzcGxheSogLAogICAgaW50KgoKKTsKZXh0ZXJuIEF0b20gKlhMaXN0UHJvcGVydGll
cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgaW50KgoKKTsKZXh0ZXJuIFhIb3N0
QWRkcmVzcyAqWExpc3RIb3N0cygKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQqICwKICAgIGludCoK
Cik7CmV4dGVybiBLZXlTeW0gWEtleWNvZGVUb0tleXN5bSgKCiAgICBEaXNwbGF5KiAsCgogICAg
dW5zaWduZWQgaW50ICwKCgoKICAgIGludAoKKTsKZXh0ZXJuIEtleVN5bSBYTG9va3VwS2V5c3lt
KAoKICAgIFhLZXlFdmVudCogLAogICAgaW50CgopOwpleHRlcm4gS2V5U3ltICpYR2V0S2V5Ym9h
cmRNYXBwaW5nKAoKICAgIERpc3BsYXkqICwKCiAgICB1bnNpZ25lZCBpbnQgLAoKCgogICAgaW50
ICwKICAgIGludCoKCik7CmV4dGVybiBLZXlTeW0gWFN0cmluZ1RvS2V5c3ltKAoKICAgIGNvbnN0
IGNoYXIqCgopOwpleHRlcm4gbG9uZyBYTWF4UmVxdWVzdFNpemUoCgogICAgRGlzcGxheSoKCik7
CmV4dGVybiBsb25nIFhFeHRlbmRlZE1heFJlcXVlc3RTaXplKAoKICAgIERpc3BsYXkqCgopOwpl
eHRlcm4gY2hhciAqWFJlc291cmNlTWFuYWdlclN0cmluZygKCiAgICBEaXNwbGF5KgoKKTsKZXh0
ZXJuIGNoYXIgKlhTY3JlZW5SZXNvdXJjZVN0cmluZygKCiAgICAgICAgU2NyZWVuKgoKKTsKZXh0
ZXJuIHVuc2lnbmVkIGxvbmcgWERpc3BsYXlNb3Rpb25CdWZmZXJTaXplKAoKICAgIERpc3BsYXkq
CgopOwpleHRlcm4gVmlzdWFsSUQgWFZpc3VhbElERnJvbVZpc3VhbCgKCiAgICBWaXN1YWwqCgop
OwoKCgpleHRlcm4gaW50IFhJbml0VGhyZWFkcygKCiAgICB2b2lkCgopOwoKZXh0ZXJuIHZvaWQg
WExvY2tEaXNwbGF5KAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIHZvaWQgWFVubG9ja0Rpc3Bs
YXkoCgogICAgRGlzcGxheSoKCik7CgoKCmV4dGVybiBYRXh0Q29kZXMgKlhJbml0RXh0ZW5zaW9u
KAoKICAgIERpc3BsYXkqICwKICAgIGNvbnN0IGNoYXIqCgopOwoKZXh0ZXJuIFhFeHRDb2RlcyAq
WEFkZEV4dGVuc2lvbigKCiAgICBEaXNwbGF5KgoKKTsKZXh0ZXJuIFhFeHREYXRhICpYRmluZE9u
RXh0ZW5zaW9uTGlzdCgKCiAgICBYRXh0RGF0YSoqICwKICAgIGludAoKKTsKZXh0ZXJuIFhFeHRE
YXRhICoqWEVIZWFkT2ZFeHRlbnNpb25MaXN0KAoKICAgIFhFRGF0YU9iamVjdAoKKTsKCgpleHRl
cm4gV2luZG93IFhSb290V2luZG93KAoKICAgIERpc3BsYXkqICwKICAgIGludAoKKTsKZXh0ZXJu
IFdpbmRvdyBYRGVmYXVsdFJvb3RXaW5kb3coCgogICAgRGlzcGxheSoKCik7CmV4dGVybiBXaW5k
b3cgWFJvb3RXaW5kb3dPZlNjcmVlbigKCiAgICBTY3JlZW4qCgopOwpleHRlcm4gVmlzdWFsICpY
RGVmYXVsdFZpc3VhbCgKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQKCik7CmV4dGVybiBWaXN1YWwg
KlhEZWZhdWx0VmlzdWFsT2ZTY3JlZW4oCgogICAgU2NyZWVuKgoKKTsKZXh0ZXJuIEdDIFhEZWZh
dWx0R0MoCgogICAgRGlzcGxheSogLAogICAgaW50CgopOwpleHRlcm4gR0MgWERlZmF1bHRHQ09m
U2NyZWVuKAoKICAgIFNjcmVlbioKCik7CmV4dGVybiB1bnNpZ25lZCBsb25nIFhCbGFja1BpeGVs
KAoKICAgIERpc3BsYXkqICwKICAgIGludAoKKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgWFdoaXRl
UGl4ZWwoCgogICAgRGlzcGxheSogLAogICAgaW50CgopOwpleHRlcm4gdW5zaWduZWQgbG9uZyBY
QWxsUGxhbmVzKAoKICAgIHZvaWQKCik7CmV4dGVybiB1bnNpZ25lZCBsb25nIFhCbGFja1BpeGVs
T2ZTY3JlZW4oCgogICAgU2NyZWVuKgoKKTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgWFdoaXRlUGl4
ZWxPZlNjcmVlbigKCiAgICBTY3JlZW4qCgopOwpleHRlcm4gdW5zaWduZWQgbG9uZyBYTmV4dFJl
cXVlc3QoCgogICAgRGlzcGxheSoKCik7CmV4dGVybiB1bnNpZ25lZCBsb25nIFhMYXN0S25vd25S
ZXF1ZXN0UHJvY2Vzc2VkKAoKICAgIERpc3BsYXkqCgopOwpleHRlcm4gY2hhciAqWFNlcnZlclZl
bmRvcigKCiAgICBEaXNwbGF5KgoKKTsKZXh0ZXJuIGNoYXIgKlhEaXNwbGF5U3RyaW5nKAoKICAg
IERpc3BsYXkqCgopOwpleHRlcm4gQ29sb3JtYXAgWERlZmF1bHRDb2xvcm1hcCgKCiAgICBEaXNw
bGF5KiAsCiAgICBpbnQKCik7CmV4dGVybiBDb2xvcm1hcCBYRGVmYXVsdENvbG9ybWFwT2ZTY3Jl
ZW4oCgogICAgU2NyZWVuKgoKKTsKZXh0ZXJuIERpc3BsYXkgKlhEaXNwbGF5T2ZTY3JlZW4oCgog
ICAgU2NyZWVuKgoKKTsKZXh0ZXJuIFNjcmVlbiAqWFNjcmVlbk9mRGlzcGxheSgKCiAgICBEaXNw
bGF5KiAsCiAgICBpbnQKCik7CmV4dGVybiBTY3JlZW4gKlhEZWZhdWx0U2NyZWVuT2ZEaXNwbGF5
KAoKICAgIERpc3BsYXkqCgopOwpleHRlcm4gbG9uZyBYRXZlbnRNYXNrT2ZTY3JlZW4oCgogICAg
U2NyZWVuKgoKKTsKCmV4dGVybiBpbnQgWFNjcmVlbk51bWJlck9mU2NyZWVuKAoKICAgIFNjcmVl
bioKCik7Cgp0eXBlZGVmIGludCAoKlhFcnJvckhhbmRsZXIpICgKCiAgICBEaXNwbGF5KiAsCiAg
ICBYRXJyb3JFdmVudCoKCik7CgpleHRlcm4gWEVycm9ySGFuZGxlciBYU2V0RXJyb3JIYW5kbGVy
ICgKCiAgICBYRXJyb3JIYW5kbGVyCgopOwoKCnR5cGVkZWYgaW50ICgqWElPRXJyb3JIYW5kbGVy
KSAoCgogICAgRGlzcGxheSoKCik7CgpleHRlcm4gWElPRXJyb3JIYW5kbGVyIFhTZXRJT0Vycm9y
SGFuZGxlciAoCgogICAgWElPRXJyb3JIYW5kbGVyCgopOwoKCmV4dGVybiBYUGl4bWFwRm9ybWF0
VmFsdWVzICpYTGlzdFBpeG1hcEZvcm1hdHMoCgogICAgRGlzcGxheSogLAogICAgaW50KgoKKTsK
ZXh0ZXJuIGludCAqWExpc3REZXB0aHMoCgogICAgRGlzcGxheSogLAogICAgaW50ICwKICAgIGlu
dCoKCik7CgoKCmV4dGVybiBpbnQgWFJlY29uZmlndXJlV01XaW5kb3coCgogICAgRGlzcGxheSog
LAogICAgV2luZG93ICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgWFdpbmRvd0No
YW5nZXMqCgopOwoKZXh0ZXJuIGludCBYR2V0V01Qcm90b2NvbHMoCgogICAgRGlzcGxheSogLAog
ICAgV2luZG93ICwKICAgIEF0b20qKiAsCiAgICBpbnQqCgopOwpleHRlcm4gaW50IFhTZXRXTVBy
b3RvY29scygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgQXRvbSogLAogICAgaW50
CgopOwpleHRlcm4gaW50IFhJY29uaWZ5V2luZG93KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRv
dyAsCiAgICBpbnQKCik7CmV4dGVybiBpbnQgWFdpdGhkcmF3V2luZG93KAoKICAgIERpc3BsYXkq
ICwKICAgIFdpbmRvdyAsCiAgICBpbnQKCik7CmV4dGVybiBpbnQgWEdldENvbW1hbmQoCgogICAg
RGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGNoYXIqKiogLAogICAgaW50KgoKKTsKZXh0ZXJu
IGludCBYR2V0V01Db2xvcm1hcFdpbmRvd3MoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwK
ICAgIFdpbmRvdyoqICwKICAgIGludCoKCik7CmV4dGVybiBpbnQgWFNldFdNQ29sb3JtYXBXaW5k
b3dzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBXaW5kb3cqICwKICAgIGludAoK
KTsKZXh0ZXJuIHZvaWQgWEZyZWVTdHJpbmdMaXN0KAoKICAgIGNoYXIqKgoKKTsKZXh0ZXJuIGlu
dCBYU2V0VHJhbnNpZW50Rm9ySGludCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAg
V2luZG93CgopOwoKCgpleHRlcm4gaW50IFhBY3RpdmF0ZVNjcmVlblNhdmVyKAoKICAgIERpc3Bs
YXkqCgopOwoKZXh0ZXJuIGludCBYQWRkSG9zdCgKCiAgICBEaXNwbGF5KiAsCiAgICBYSG9zdEFk
ZHJlc3MqCgopOwoKZXh0ZXJuIGludCBYQWRkSG9zdHMoCgogICAgRGlzcGxheSogLAogICAgWEhv
c3RBZGRyZXNzKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhBZGRUb0V4dGVuc2lvbkxpc3Qo
CgogICAgc3RydWN0IF9YRXh0RGF0YSoqICwKICAgIFhFeHREYXRhKgoKKTsKCmV4dGVybiBpbnQg
WEFkZFRvU2F2ZVNldCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50
IFhBbGxvY0NvbG9yKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFwICwKICAgIFhDb2xvcioK
Cik7CgpleHRlcm4gaW50IFhBbGxvY0NvbG9yQ2VsbHMoCgogICAgRGlzcGxheSogLAogICAgQ29s
b3JtYXAgLAogICAgaW50ICwKICAgIHVuc2lnbmVkIGxvbmcqICwKICAgIHVuc2lnbmVkIGludCAs
CiAgICB1bnNpZ25lZCBsb25nKiAsCiAgICB1bnNpZ25lZCBpbnQKCik7CgpleHRlcm4gaW50IFhB
bGxvY0NvbG9yUGxhbmVzKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFwICwKICAgIGludCAs
CiAgICB1bnNpZ25lZCBsb25nKiAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGludCAsCiAgICBp
bnQgLAogICAgdW5zaWduZWQgbG9uZyogLAogICAgdW5zaWduZWQgbG9uZyogLAogICAgdW5zaWdu
ZWQgbG9uZyoKCik7CgpleHRlcm4gaW50IFhBbGxvY05hbWVkQ29sb3IoCgogICAgRGlzcGxheSog
LAogICAgQ29sb3JtYXAgLAogICAgY29uc3QgY2hhciogLAogICAgWENvbG9yKiAsCiAgICBYQ29s
b3IqCgopOwoKZXh0ZXJuIGludCBYQWxsb3dFdmVudHMoCgogICAgRGlzcGxheSogLAogICAgaW50
ICwKICAgIFRpbWUKCik7CgpleHRlcm4gaW50IFhBdXRvUmVwZWF0T2ZmKAoKICAgIERpc3BsYXkq
CgopOwoKZXh0ZXJuIGludCBYQXV0b1JlcGVhdE9uKAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJu
IGludCBYQmVsbCgKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhCaXRt
YXBCaXRPcmRlcigKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBpbnQgWEJpdG1hcFBhZCgKCiAg
ICBEaXNwbGF5KgoKKTsKCmV4dGVybiBpbnQgWEJpdG1hcFVuaXQoCgogICAgRGlzcGxheSoKCik7
CgpleHRlcm4gaW50IFhDZWxsc09mU2NyZWVuKAoKICAgIFNjcmVlbioKCik7CgpleHRlcm4gaW50
IFhDaGFuZ2VBY3RpdmVQb2ludGVyR3JhYigKCiAgICBEaXNwbGF5KiAsCiAgICB1bnNpZ25lZCBp
bnQgLAogICAgQ3Vyc29yICwKICAgIFRpbWUKCik7CgpleHRlcm4gaW50IFhDaGFuZ2VHQygKCiAg
ICBEaXNwbGF5KiAsCiAgICBHQyAsCiAgICB1bnNpZ25lZCBsb25nICwKICAgIFhHQ1ZhbHVlcyoK
Cik7CgpleHRlcm4gaW50IFhDaGFuZ2VLZXlib2FyZENvbnRyb2woCgogICAgRGlzcGxheSogLAog
ICAgdW5zaWduZWQgbG9uZyAsCiAgICBYS2V5Ym9hcmRDb250cm9sKgoKKTsKCmV4dGVybiBpbnQg
WENoYW5nZUtleWJvYXJkTWFwcGluZygKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQgLAogICAgaW50
ICwKICAgIEtleVN5bSogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYQ2hhbmdlUG9pbnRlckNv
bnRyb2woCgogICAgRGlzcGxheSogLAogICAgaW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAg
aW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWENoYW5nZVByb3BlcnR5KAoKICAgIERpc3Bs
YXkqICwKICAgIFdpbmRvdyAsCiAgICBBdG9tICwKICAgIEF0b20gLAogICAgaW50ICwKICAgIGlu
dCAsCiAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhD
aGFuZ2VTYXZlU2V0KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBpbnQKCik7Cgpl
eHRlcm4gaW50IFhDaGFuZ2VXaW5kb3dBdHRyaWJ1dGVzKAoKICAgIERpc3BsYXkqICwKICAgIFdp
bmRvdyAsCiAgICB1bnNpZ25lZCBsb25nICwKICAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzKgoKKTsK
CmV4dGVybiBpbnQgWENoZWNrSWZFdmVudCgKCiAgICBEaXNwbGF5KiAsCiAgICBYRXZlbnQqICwK
ICAgIGludCAoKikgKAoKICAgICAgICAgICAgICAgRGlzcGxheSogLAogICAgICAgICAgICAgICBY
RXZlbnQqICwKICAgICAgICAgICAgICAgWFBvaW50ZXIKCiAgICAgICAgICAgICApICwKICAgIFhQ
b2ludGVyCgopOwoKZXh0ZXJuIGludCBYQ2hlY2tNYXNrRXZlbnQoCgogICAgRGlzcGxheSogLAog
ICAgbG9uZyAsCiAgICBYRXZlbnQqCgopOwoKZXh0ZXJuIGludCBYQ2hlY2tUeXBlZEV2ZW50KAoK
ICAgIERpc3BsYXkqICwKICAgIGludCAsCiAgICBYRXZlbnQqCgopOwoKZXh0ZXJuIGludCBYQ2hl
Y2tUeXBlZFdpbmRvd0V2ZW50KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBpbnQg
LAogICAgWEV2ZW50KgoKKTsKCmV4dGVybiBpbnQgWENoZWNrV2luZG93RXZlbnQoCgogICAgRGlz
cGxheSogLAogICAgV2luZG93ICwKICAgIGxvbmcgLAogICAgWEV2ZW50KgoKKTsKCmV4dGVybiBp
bnQgWENpcmN1bGF0ZVN1YndpbmRvd3MoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAg
IGludAoKKTsKCmV4dGVybiBpbnQgWENpcmN1bGF0ZVN1YndpbmRvd3NEb3duKAoKICAgIERpc3Bs
YXkqICwKICAgIFdpbmRvdwoKKTsKCmV4dGVybiBpbnQgWENpcmN1bGF0ZVN1YndpbmRvd3NVcCgK
CiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhDbGVhckFyZWEoCgog
ICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWdu
ZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhDbGVh
cldpbmRvdygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhDbG9z
ZURpc3BsYXkoCgogICAgRGlzcGxheSoKCik7CgpleHRlcm4gaW50IFhDb25maWd1cmVXaW5kb3co
CgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBYV2lu
ZG93Q2hhbmdlcyoKCik7CgpleHRlcm4gaW50IFhDb25uZWN0aW9uTnVtYmVyKAoKICAgIERpc3Bs
YXkqCgopOwoKZXh0ZXJuIGludCBYQ29udmVydFNlbGVjdGlvbigKCiAgICBEaXNwbGF5KiAsCiAg
ICBBdG9tICwKICAgIEF0b20gLAogICAgQXRvbSAsCiAgICBXaW5kb3cgLAogICAgVGltZQoKKTsK
CmV4dGVybiBpbnQgWENvcHlBcmVhKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAg
IERyYXdhYmxlICwKICAgIEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5zaWduZWQgaW50
ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBpbnQgLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBY
Q29weUdDKAoKICAgIERpc3BsYXkqICwKICAgIEdDICwKICAgIHVuc2lnbmVkIGxvbmcgLAogICAg
R0MKCik7CgpleHRlcm4gaW50IFhDb3B5UGxhbmUoCgogICAgRGlzcGxheSogLAogICAgRHJhd2Fi
bGUgLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICB1bnNp
Z25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5z
aWduZWQgbG9uZwoKKTsKCmV4dGVybiBpbnQgWERlZmF1bHREZXB0aCgKCiAgICBEaXNwbGF5KiAs
CiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhEZWZhdWx0RGVwdGhPZlNjcmVlbigKCiAgICBTY3Jl
ZW4qCgopOwoKZXh0ZXJuIGludCBYRGVmYXVsdFNjcmVlbigKCiAgICBEaXNwbGF5KgoKKTsKCmV4
dGVybiBpbnQgWERlZmluZUN1cnNvcigKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAg
Q3Vyc29yCgopOwoKZXh0ZXJuIGludCBYRGVsZXRlUHJvcGVydHkoCgogICAgRGlzcGxheSogLAog
ICAgV2luZG93ICwKICAgIEF0b20KCik7CgpleHRlcm4gaW50IFhEZXN0cm95V2luZG93KAoKICAg
IERpc3BsYXkqICwKICAgIFdpbmRvdwoKKTsKCmV4dGVybiBpbnQgWERlc3Ryb3lTdWJ3aW5kb3dz
KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdwoKKTsKCmV4dGVybiBpbnQgWERvZXNCYWNraW5n
U3RvcmUoCgogICAgU2NyZWVuKgoKKTsKCmV4dGVybiBpbnQgWERvZXNTYXZlVW5kZXJzKAoKICAg
IFNjcmVlbioKCik7CgpleHRlcm4gaW50IFhEaXNhYmxlQWNjZXNzQ29udHJvbCgKCiAgICBEaXNw
bGF5KgoKKTsKCgpleHRlcm4gaW50IFhEaXNwbGF5Q2VsbHMoCgogICAgRGlzcGxheSogLAogICAg
aW50CgopOwoKZXh0ZXJuIGludCBYRGlzcGxheUhlaWdodCgKCiAgICBEaXNwbGF5KiAsCiAgICBp
bnQKCik7CgpleHRlcm4gaW50IFhEaXNwbGF5SGVpZ2h0TU0oCgogICAgRGlzcGxheSogLAogICAg
aW50CgopOwoKZXh0ZXJuIGludCBYRGlzcGxheUtleWNvZGVzKAoKICAgIERpc3BsYXkqICwKICAg
IGludCogLAogICAgaW50KgoKKTsKCmV4dGVybiBpbnQgWERpc3BsYXlQbGFuZXMoCgogICAgRGlz
cGxheSogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYRGlzcGxheVdpZHRoKAoKICAgIERpc3Bs
YXkqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWERpc3BsYXlXaWR0aE1NKAoKICAgIERpc3Bs
YXkqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWERyYXdBcmMoCgogICAgRGlzcGxheSogLAog
ICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBp
bnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50
IFhEcmF3QXJjcygKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBY
QXJjKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhEcmF3SW1hZ2VTdHJpbmcoCgogICAgRGlz
cGxheSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBj
b25zdCBjaGFyKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhEcmF3SW1hZ2VTdHJpbmcxNigK
CiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50
ICwKICAgIGNvbnN0IFhDaGFyMmIqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWERyYXdMaW5l
KAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIEdDICwKICAgIGludCAsCiAgICBp
bnQgLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWERyYXdMaW5lcygKCiAgICBE
aXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBYUG9pbnQqICwKICAgIGludCAs
CiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhEcmF3UG9pbnQoCgogICAgRGlzcGxheSogLAogICAg
RHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWERy
YXdQb2ludHMoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgWFBv
aW50KiAsCiAgICBpbnQgLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYRHJhd1JlY3RhbmdsZSgK
CiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50
ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQKCik7CgpleHRlcm4gaW50IFhE
cmF3UmVjdGFuZ2xlcygKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAg
ICBYUmVjdGFuZ2xlKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhEcmF3U2VnbWVudHMoCgog
ICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgWFNlZ21lbnQqICwKICAg
IGludAoKKTsKCmV4dGVybiBpbnQgWERyYXdTdHJpbmcoCgogICAgRGlzcGxheSogLAogICAgRHJh
d2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBjb25zdCBjaGFyKiAsCiAg
ICBpbnQKCik7CgpleHRlcm4gaW50IFhEcmF3U3RyaW5nMTYoCgogICAgRGlzcGxheSogLAogICAg
RHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBjb25zdCBYQ2hhcjJi
KiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhEcmF3VGV4dCgKCiAgICBEaXNwbGF5KiAsCiAg
ICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIFhUZXh0SXRlbSog
LAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYRHJhd1RleHQxNigKCiAgICBEaXNwbGF5KiAsCiAg
ICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIFhUZXh0SXRlbTE2
KiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhFbmFibGVBY2Nlc3NDb250cm9sKAoKICAgIERp
c3BsYXkqCgopOwoKZXh0ZXJuIGludCBYRXZlbnRzUXVldWVkKAoKICAgIERpc3BsYXkqICwKICAg
IGludAoKKTsKCmV4dGVybiBpbnQgWEZldGNoTmFtZSgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5k
b3cgLAogICAgY2hhcioqCgopOwoKZXh0ZXJuIGludCBYRmlsbEFyYygKCiAgICBEaXNwbGF5KiAs
CiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIHVuc2lnbmVk
IGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBp
bnQgWEZpbGxBcmNzKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIEdDICwKICAg
IFhBcmMqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWEZpbGxQb2x5Z29uKAoKICAgIERpc3Bs
YXkqICwKICAgIERyYXdhYmxlICwKICAgIEdDICwKICAgIFhQb2ludCogLAogICAgaW50ICwKICAg
IGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhGaWxsUmVjdGFuZ2xlKAoKICAgIERpc3Bs
YXkqICwKICAgIERyYXdhYmxlICwKICAgIEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgdW5z
aWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludAoKKTsKCmV4dGVybiBpbnQgWEZpbGxSZWN0YW5n
bGVzKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIEdDICwKICAgIFhSZWN0YW5n
bGUqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWEZsdXNoKAoKICAgIERpc3BsYXkqCgopOwoK
ZXh0ZXJuIGludCBYRm9yY2VTY3JlZW5TYXZlcigKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQKCik7
CgpleHRlcm4gaW50IFhGcmVlKAoKICAgIHZvaWQqCgopOwoKZXh0ZXJuIGludCBYRnJlZUNvbG9y
bWFwKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFwCgopOwoKZXh0ZXJuIGludCBYRnJlZUNv
bG9ycygKCiAgICBEaXNwbGF5KiAsCiAgICBDb2xvcm1hcCAsCiAgICB1bnNpZ25lZCBsb25nKiAs
CiAgICBpbnQgLAogICAgdW5zaWduZWQgbG9uZwoKKTsKCmV4dGVybiBpbnQgWEZyZWVDdXJzb3Io
CgogICAgRGlzcGxheSogLAogICAgQ3Vyc29yCgopOwoKZXh0ZXJuIGludCBYRnJlZUV4dGVuc2lv
bkxpc3QoCgogICAgY2hhcioqCgopOwoKZXh0ZXJuIGludCBYRnJlZUZvbnQoCgogICAgRGlzcGxh
eSogLAogICAgWEZvbnRTdHJ1Y3QqCgopOwoKZXh0ZXJuIGludCBYRnJlZUZvbnRJbmZvKAoKICAg
IGNoYXIqKiAsCiAgICBYRm9udFN0cnVjdCogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYRnJl
ZUZvbnROYW1lcygKCiAgICBjaGFyKioKCik7CgpleHRlcm4gaW50IFhGcmVlRm9udFBhdGgoCgog
ICAgY2hhcioqCgopOwoKZXh0ZXJuIGludCBYRnJlZUdDKAoKICAgIERpc3BsYXkqICwKICAgIEdD
CgopOwoKZXh0ZXJuIGludCBYRnJlZU1vZGlmaWVybWFwKAoKICAgIFhNb2RpZmllcktleW1hcCoK
Cik7CgpleHRlcm4gaW50IFhGcmVlUGl4bWFwKAoKICAgIERpc3BsYXkqICwKICAgIFBpeG1hcAoK
KTsKCmV4dGVybiBpbnQgWEdlb21ldHJ5KAoKICAgIERpc3BsYXkqICwKICAgIGludCAsCiAgICBj
b25zdCBjaGFyKiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5z
aWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGlu
dCogLAogICAgaW50KiAsCiAgICBpbnQqICwKICAgIGludCoKCik7CgpleHRlcm4gaW50IFhHZXRF
cnJvckRhdGFiYXNlVGV4dCgKCiAgICBEaXNwbGF5KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBj
b25zdCBjaGFyKiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBjaGFyKiAsCiAgICBpbnQKCik7Cgpl
eHRlcm4gaW50IFhHZXRFcnJvclRleHQoCgogICAgRGlzcGxheSogLAogICAgaW50ICwKICAgIGNo
YXIqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWEdldEZvbnRQcm9wZXJ0eSgKCiAgICBYRm9u
dFN0cnVjdCogLAogICAgQXRvbSAsCiAgICB1bnNpZ25lZCBsb25nKgoKKTsKCmV4dGVybiBpbnQg
WEdldEdDVmFsdWVzKAoKICAgIERpc3BsYXkqICwKICAgIEdDICwKICAgIHVuc2lnbmVkIGxvbmcg
LAogICAgWEdDVmFsdWVzKgoKKTsKCmV4dGVybiBpbnQgWEdldEdlb21ldHJ5KAoKICAgIERpc3Bs
YXkqICwKICAgIERyYXdhYmxlICwKICAgIFdpbmRvdyogLAogICAgaW50KiAsCiAgICBpbnQqICwK
ICAgIHVuc2lnbmVkIGludCogLAogICAgdW5zaWduZWQgaW50KiAsCiAgICB1bnNpZ25lZCBpbnQq
ICwKICAgIHVuc2lnbmVkIGludCoKCik7CgpleHRlcm4gaW50IFhHZXRJY29uTmFtZSgKCiAgICBE
aXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgY2hhcioqCgopOwoKZXh0ZXJuIGludCBYR2V0SW5w
dXRGb2N1cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cqICwKICAgIGludCoKCik7CgpleHRl
cm4gaW50IFhHZXRLZXlib2FyZENvbnRyb2woCgogICAgRGlzcGxheSogLAogICAgWEtleWJvYXJk
U3RhdGUqCgopOwoKZXh0ZXJuIGludCBYR2V0UG9pbnRlckNvbnRyb2woCgogICAgRGlzcGxheSog
LAogICAgaW50KiAsCiAgICBpbnQqICwKICAgIGludCoKCik7CgpleHRlcm4gaW50IFhHZXRQb2lu
dGVyTWFwcGluZygKCiAgICBEaXNwbGF5KiAsCiAgICB1bnNpZ25lZCBjaGFyKiAsCiAgICBpbnQK
Cik7CgpleHRlcm4gaW50IFhHZXRTY3JlZW5TYXZlcigKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQq
ICwKICAgIGludCogLAogICAgaW50KiAsCiAgICBpbnQqCgopOwoKZXh0ZXJuIGludCBYR2V0VHJh
bnNpZW50Rm9ySGludCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgV2luZG93KgoK
KTsKCmV4dGVybiBpbnQgWEdldFdpbmRvd1Byb3BlcnR5KAoKICAgIERpc3BsYXkqICwKICAgIFdp
bmRvdyAsCiAgICBBdG9tICwKICAgIGxvbmcgLAogICAgbG9uZyAsCiAgICBpbnQgLAogICAgQXRv
bSAsCiAgICBBdG9tKiAsCiAgICBpbnQqICwKICAgIHVuc2lnbmVkIGxvbmcqICwKICAgIHVuc2ln
bmVkIGxvbmcqICwKICAgIHVuc2lnbmVkIGNoYXIqKgoKKTsKCmV4dGVybiBpbnQgWEdldFdpbmRv
d0F0dHJpYnV0ZXMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhXaW5kb3dBdHRy
aWJ1dGVzKgoKKTsKCmV4dGVybiBpbnQgWEdyYWJCdXR0b24oCgogICAgRGlzcGxheSogLAogICAg
dW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBXaW5kb3cgLAogICAgaW50ICwK
ICAgIHVuc2lnbmVkIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIFdpbmRvdyAsCiAgICBD
dXJzb3IKCik7CgpleHRlcm4gaW50IFhHcmFiS2V5KAoKICAgIERpc3BsYXkqICwKICAgIGludCAs
CiAgICB1bnNpZ25lZCBpbnQgLAogICAgV2luZG93ICwKICAgIGludCAsCiAgICBpbnQgLAogICAg
aW50CgopOwoKZXh0ZXJuIGludCBYR3JhYktleWJvYXJkKAoKICAgIERpc3BsYXkqICwKICAgIFdp
bmRvdyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGludCAsCiAgICBUaW1lCgopOwoKZXh0ZXJu
IGludCBYR3JhYlBvaW50ZXIoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGludCAs
CiAgICB1bnNpZ25lZCBpbnQgLAogICAgaW50ICwKICAgIGludCAsCiAgICBXaW5kb3cgLAogICAg
Q3Vyc29yICwKICAgIFRpbWUKCik7CgpleHRlcm4gaW50IFhHcmFiU2VydmVyKAoKICAgIERpc3Bs
YXkqCgopOwoKZXh0ZXJuIGludCBYSGVpZ2h0TU1PZlNjcmVlbigKCiAgICBTY3JlZW4qCgopOwoK
ZXh0ZXJuIGludCBYSGVpZ2h0T2ZTY3JlZW4oCgogICAgU2NyZWVuKgoKKTsKCmV4dGVybiBpbnQg
WElmRXZlbnQoCgogICAgRGlzcGxheSogLAogICAgWEV2ZW50KiAsCiAgICBpbnQgKCopICgKCiAg
ICAgICAgICAgICAgIERpc3BsYXkqICwKICAgICAgICAgICAgICAgWEV2ZW50KiAsCiAgICAgICAg
ICAgICAgIFhQb2ludGVyCgogICAgICAgICAgICAgKSAsCiAgICBYUG9pbnRlcgoKKTsKCmV4dGVy
biBpbnQgWEltYWdlQnl0ZU9yZGVyKAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIGludCBYSW5z
dGFsbENvbG9ybWFwKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFwCgopOwoKZXh0ZXJuIEtl
eUNvZGUgWEtleXN5bVRvS2V5Y29kZSgKCiAgICBEaXNwbGF5KiAsCiAgICBLZXlTeW0KCik7Cgpl
eHRlcm4gaW50IFhLaWxsQ2xpZW50KAoKICAgIERpc3BsYXkqICwKICAgIFhJRAoKKTsKCmV4dGVy
biBpbnQgWExvb2t1cENvbG9yKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFwICwKICAgIGNv
bnN0IGNoYXIqICwKICAgIFhDb2xvciogLAogICAgWENvbG9yKgoKKTsKCmV4dGVybiBpbnQgWExv
d2VyV2luZG93KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdwoKKTsKCmV4dGVybiBpbnQgWE1h
cFJhaXNlZCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhNYXBT
dWJ3aW5kb3dzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdwoKKTsKCmV4dGVybiBpbnQgWE1h
cFdpbmRvdygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhNYXNr
RXZlbnQoCgogICAgRGlzcGxheSogLAogICAgbG9uZyAsCiAgICBYRXZlbnQqCgopOwoKZXh0ZXJu
IGludCBYTWF4Q21hcHNPZlNjcmVlbigKCiAgICBTY3JlZW4qCgopOwoKZXh0ZXJuIGludCBYTWlu
Q21hcHNPZlNjcmVlbigKCiAgICBTY3JlZW4qCgopOwoKZXh0ZXJuIGludCBYTW92ZVJlc2l6ZVdp
bmRvdygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgaW50ICwKICAgIGludCAsCiAg
ICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50CgopOwoKZXh0ZXJuIGludCBYTW92ZVdp
bmRvdygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgaW50ICwKICAgIGludAoKKTsK
CmV4dGVybiBpbnQgWE5leHRFdmVudCgKCiAgICBEaXNwbGF5KiAsCiAgICBYRXZlbnQqCgopOwoK
ZXh0ZXJuIGludCBYTm9PcCgKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBpbnQgWFBhcnNlQ29s
b3IoCgogICAgRGlzcGxheSogLAogICAgQ29sb3JtYXAgLAogICAgY29uc3QgY2hhciogLAogICAg
WENvbG9yKgoKKTsKCmV4dGVybiBpbnQgWFBhcnNlR2VvbWV0cnkoCgogICAgY29uc3QgY2hhciog
LAogICAgaW50KiAsCiAgICBpbnQqICwKICAgIHVuc2lnbmVkIGludCogLAogICAgdW5zaWduZWQg
aW50KgoKKTsKCmV4dGVybiBpbnQgWFBlZWtFdmVudCgKCiAgICBEaXNwbGF5KiAsCiAgICBYRXZl
bnQqCgopOwoKZXh0ZXJuIGludCBYUGVla0lmRXZlbnQoCgogICAgRGlzcGxheSogLAogICAgWEV2
ZW50KiAsCiAgICBpbnQgKCopICgKCiAgICAgICAgICAgICAgIERpc3BsYXkqICwKICAgICAgICAg
ICAgICAgWEV2ZW50KiAsCiAgICAgICAgICAgICAgIFhQb2ludGVyCgogICAgICAgICAgICAgKSAs
CiAgICBYUG9pbnRlcgoKKTsKCmV4dGVybiBpbnQgWFBlbmRpbmcoCgogICAgRGlzcGxheSoKCik7
CgpleHRlcm4gaW50IFhQbGFuZXNPZlNjcmVlbigKCiAgICBTY3JlZW4qCgoKKTsKCmV4dGVybiBp
bnQgWFByb3RvY29sUmV2aXNpb24oCgogICAgRGlzcGxheSoKCik7CgpleHRlcm4gaW50IFhQcm90
b2NvbFZlcnNpb24oCgogICAgRGlzcGxheSoKCik7CgoKZXh0ZXJuIGludCBYUHV0QmFja0V2ZW50
KAoKICAgIERpc3BsYXkqICwKICAgIFhFdmVudCoKCik7CgpleHRlcm4gaW50IFhQdXRJbWFnZSgK
CiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBYSW1hZ2UqICwKICAg
IGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAog
ICAgdW5zaWduZWQgaW50CgopOwoKZXh0ZXJuIGludCBYUUxlbmd0aCgKCiAgICBEaXNwbGF5KgoK
KTsKCmV4dGVybiBpbnQgWFF1ZXJ5QmVzdEN1cnNvcigKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3
YWJsZSAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVk
IGludCogLAogICAgdW5zaWduZWQgaW50KgoKKTsKCmV4dGVybiBpbnQgWFF1ZXJ5QmVzdFNpemUo
CgogICAgRGlzcGxheSogLAogICAgaW50ICwKICAgIERyYXdhYmxlICwKICAgIHVuc2lnbmVkIGlu
dCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50KiAsCiAgICB1bnNpZ25lZCBp
bnQqCgopOwoKZXh0ZXJuIGludCBYUXVlcnlCZXN0U3RpcHBsZSgKCiAgICBEaXNwbGF5KiAsCiAg
ICBEcmF3YWJsZSAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVu
c2lnbmVkIGludCogLAogICAgdW5zaWduZWQgaW50KgoKKTsKCmV4dGVybiBpbnQgWFF1ZXJ5QmVz
dFRpbGUoCgogICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgdW5zaWduZWQgaW50ICwK
ICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQqICwKICAgIHVuc2lnbmVkIGludCoK
Cik7CgpleHRlcm4gaW50IFhRdWVyeUNvbG9yKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFw
ICwKICAgIFhDb2xvcioKCik7CgpleHRlcm4gaW50IFhRdWVyeUNvbG9ycygKCiAgICBEaXNwbGF5
KiAsCiAgICBDb2xvcm1hcCAsCiAgICBYQ29sb3IqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQg
WFF1ZXJ5RXh0ZW5zaW9uKAoKICAgIERpc3BsYXkqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGlu
dCogLAogICAgaW50KiAsCiAgICBpbnQqCgopOwoKZXh0ZXJuIGludCBYUXVlcnlLZXltYXAoCgog
ICAgRGlzcGxheSogLAogICAgY2hhciBbMzJdCgopOwoKZXh0ZXJuIGludCBYUXVlcnlQb2ludGVy
KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBXaW5kb3cqICwKICAgIFdpbmRvdyog
LAogICAgaW50KiAsCiAgICBpbnQqICwKICAgIGludCogLAogICAgaW50KiAsCiAgICB1bnNpZ25l
ZCBpbnQqCgopOwoKZXh0ZXJuIGludCBYUXVlcnlUZXh0RXh0ZW50cygKCiAgICBEaXNwbGF5KiAs
CiAgICBYSUQgLAogICAgY29uc3QgY2hhciogLAogICAgaW50ICwKICAgIGludCogLAogICAgaW50
KiAsCiAgICBpbnQqICwKICAgIFhDaGFyU3RydWN0KgoKKTsKCmV4dGVybiBpbnQgWFF1ZXJ5VGV4
dEV4dGVudHMxNigKCiAgICBEaXNwbGF5KiAsCiAgICBYSUQgLAogICAgY29uc3QgWENoYXIyYiog
LAogICAgaW50ICwKICAgIGludCogLAogICAgaW50KiAsCiAgICBpbnQqICwKICAgIFhDaGFyU3Ry
dWN0KgoKKTsKCmV4dGVybiBpbnQgWFF1ZXJ5VHJlZSgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5k
b3cgLAogICAgV2luZG93KiAsCiAgICBXaW5kb3cqICwKICAgIFdpbmRvdyoqICwKICAgIHVuc2ln
bmVkIGludCoKCik7CgpleHRlcm4gaW50IFhSYWlzZVdpbmRvdygKCiAgICBEaXNwbGF5KiAsCiAg
ICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhSZWFkQml0bWFwRmlsZSgKCiAgICBEaXNwbGF5KiAs
CiAgICBEcmF3YWJsZSAsCiAgICBjb25zdCBjaGFyKiAsCiAgICB1bnNpZ25lZCBpbnQqICwKICAg
IHVuc2lnbmVkIGludCogLAogICAgUGl4bWFwKiAsCiAgICBpbnQqICwKICAgIGludCoKCik7Cgpl
eHRlcm4gaW50IFhSZWFkQml0bWFwRmlsZURhdGEoCgogICAgY29uc3QgY2hhciogLAogICAgdW5z
aWduZWQgaW50KiAsCiAgICB1bnNpZ25lZCBpbnQqICwKICAgIHVuc2lnbmVkIGNoYXIqKiAsCiAg
ICBpbnQqICwKICAgIGludCoKCik7CgpleHRlcm4gaW50IFhSZWJpbmRLZXlzeW0oCgogICAgRGlz
cGxheSogLAogICAgS2V5U3ltICwKICAgIEtleVN5bSogLAogICAgaW50ICwKICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFJlY29sb3JDdXJzb3IoCgog
ICAgRGlzcGxheSogLAogICAgQ3Vyc29yICwKICAgIFhDb2xvciogLAogICAgWENvbG9yKgoKKTsK
CmV4dGVybiBpbnQgWFJlZnJlc2hLZXlib2FyZE1hcHBpbmcoCgogICAgWE1hcHBpbmdFdmVudCoK
Cik7CgpleHRlcm4gaW50IFhSZW1vdmVGcm9tU2F2ZVNldCgKCiAgICBEaXNwbGF5KiAsCiAgICBX
aW5kb3cKCik7CgpleHRlcm4gaW50IFhSZW1vdmVIb3N0KAoKICAgIERpc3BsYXkqICwKICAgIFhI
b3N0QWRkcmVzcyoKCik7CgpleHRlcm4gaW50IFhSZW1vdmVIb3N0cygKCiAgICBEaXNwbGF5KiAs
CiAgICBYSG9zdEFkZHJlc3MqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFJlcGFyZW50V2lu
ZG93KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBXaW5kb3cgLAogICAgaW50ICwK
ICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFJlc2V0U2NyZWVuU2F2ZXIoCgogICAgRGlzcGxheSoK
Cik7CgpleHRlcm4gaW50IFhSZXNpemVXaW5kb3coCgogICAgRGlzcGxheSogLAogICAgV2luZG93
ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25lZCBpbnQKCik7CgpleHRlcm4gaW50IFhS
ZXN0YWNrV2luZG93cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cqICwKICAgIGludAoKKTsK
CmV4dGVybiBpbnQgWFJvdGF0ZUJ1ZmZlcnMoCgogICAgRGlzcGxheSogLAogICAgaW50CgopOwoK
ZXh0ZXJuIGludCBYUm90YXRlV2luZG93UHJvcGVydGllcygKCiAgICBEaXNwbGF5KiAsCiAgICBX
aW5kb3cgLAogICAgQXRvbSogLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFNj
cmVlbkNvdW50KAoKICAgIERpc3BsYXkqCgopOwoKZXh0ZXJuIGludCBYU2VsZWN0SW5wdXQoCgog
ICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGxvbmcKCik7CgpleHRlcm4gaW50IFhTZW5k
RXZlbnQoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGludCAsCiAgICBsb25nICwK
ICAgIFhFdmVudCoKCik7CgpleHRlcm4gaW50IFhTZXRBY2Nlc3NDb250cm9sKAoKICAgIERpc3Bs
YXkqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFNldEFyY01vZGUoCgogICAgRGlzcGxheSog
LAogICAgR0MgLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYU2V0QmFja2dyb3VuZCgKCiAgICBE
aXNwbGF5KiAsCiAgICBHQyAsCiAgICB1bnNpZ25lZCBsb25nCgopOwoKZXh0ZXJuIGludCBYU2V0
Q2xpcE1hc2soCgogICAgRGlzcGxheSogLAogICAgR0MgLAogICAgUGl4bWFwCgopOwoKZXh0ZXJu
IGludCBYU2V0Q2xpcE9yaWdpbigKCiAgICBEaXNwbGF5KiAsCiAgICBHQyAsCiAgICBpbnQgLAog
ICAgaW50CgopOwoKZXh0ZXJuIGludCBYU2V0Q2xpcFJlY3RhbmdsZXMoCgogICAgRGlzcGxheSog
LAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAgICBYUmVjdGFuZ2xlKiAsCiAgICBpbnQg
LAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYU2V0Q2xvc2VEb3duTW9kZSgKCiAgICBEaXNwbGF5
KiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhTZXRDb21tYW5kKAoKICAgIERpc3BsYXkqICwK
ICAgIFdpbmRvdyAsCiAgICBjaGFyKiogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYU2V0RGFz
aGVzKAoKICAgIERpc3BsYXkqICwKICAgIEdDICwKICAgIGludCAsCiAgICBjb25zdCBjaGFyKiAs
CiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhTZXRGaWxsUnVsZSgKCiAgICBEaXNwbGF5KiAsCiAg
ICBHQyAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhTZXRGaWxsU3R5bGUoCgogICAgRGlzcGxh
eSogLAogICAgR0MgLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYU2V0Rm9udCgKCiAgICBEaXNw
bGF5KiAsCiAgICBHQyAsCiAgICBGb250CgopOwoKZXh0ZXJuIGludCBYU2V0Rm9udFBhdGgoCgog
ICAgRGlzcGxheSogLAogICAgY2hhcioqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFNldEZv
cmVncm91bmQoCgogICAgRGlzcGxheSogLAogICAgR0MgLAogICAgdW5zaWduZWQgbG9uZwoKKTsK
CmV4dGVybiBpbnQgWFNldEZ1bmN0aW9uKAoKICAgIERpc3BsYXkqICwKICAgIEdDICwKICAgIGlu
dAoKKTsKCmV4dGVybiBpbnQgWFNldEdyYXBoaWNzRXhwb3N1cmVzKAoKICAgIERpc3BsYXkqICwK
ICAgIEdDICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFNldEljb25OYW1lKAoKICAgIERpc3Bs
YXkqICwKICAgIFdpbmRvdyAsCiAgICBjb25zdCBjaGFyKgoKKTsKCmV4dGVybiBpbnQgWFNldElu
cHV0Rm9jdXMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIGludCAsCiAgICBUaW1l
CgopOwoKZXh0ZXJuIGludCBYU2V0TGluZUF0dHJpYnV0ZXMoCgogICAgRGlzcGxheSogLAogICAg
R0MgLAogICAgdW5zaWduZWQgaW50ICwKICAgIGludCAsCiAgICBpbnQgLAogICAgaW50CgopOwoK
ZXh0ZXJuIGludCBYU2V0TW9kaWZpZXJNYXBwaW5nKAoKICAgIERpc3BsYXkqICwKICAgIFhNb2Rp
ZmllcktleW1hcCoKCik7CgpleHRlcm4gaW50IFhTZXRQbGFuZU1hc2soCgogICAgRGlzcGxheSog
LAogICAgR0MgLAogICAgdW5zaWduZWQgbG9uZwoKKTsKCmV4dGVybiBpbnQgWFNldFBvaW50ZXJN
YXBwaW5nKAoKICAgIERpc3BsYXkqICwKICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqICwKICAgIGlu
dAoKKTsKCmV4dGVybiBpbnQgWFNldFNjcmVlblNhdmVyKAoKICAgIERpc3BsYXkqICwKICAgIGlu
dCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFNldFNlbGVj
dGlvbk93bmVyKAoKICAgIERpc3BsYXkqICwKICAgIEF0b20gLAogICAgV2luZG93ICwKICAgIFRp
bWUKCik7CgpleHRlcm4gaW50IFhTZXRTdGF0ZSgKCiAgICBEaXNwbGF5KiAsCiAgICBHQyAsCiAg
ICB1bnNpZ25lZCBsb25nICwKICAgIHVuc2lnbmVkIGxvbmcgLAogICAgaW50ICwKICAgIHVuc2ln
bmVkIGxvbmcKCik7CgpleHRlcm4gaW50IFhTZXRTdGlwcGxlKAoKICAgIERpc3BsYXkqICwKICAg
IEdDICwKICAgIFBpeG1hcAoKKTsKCmV4dGVybiBpbnQgWFNldFN1YndpbmRvd01vZGUoCgogICAg
RGlzcGxheSogLAogICAgR0MgLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYU2V0VFNPcmlnaW4o
CgogICAgRGlzcGxheSogLAogICAgR0MgLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBp
bnQgWFNldFRpbGUoCgogICAgRGlzcGxheSogLAogICAgR0MgLAogICAgUGl4bWFwCgopOwoKZXh0
ZXJuIGludCBYU2V0V2luZG93QmFja2dyb3VuZCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cg
LAogICAgdW5zaWduZWQgbG9uZwoKKTsKCmV4dGVybiBpbnQgWFNldFdpbmRvd0JhY2tncm91bmRQ
aXhtYXAoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFBpeG1hcAoKKTsKCmV4dGVy
biBpbnQgWFNldFdpbmRvd0JvcmRlcigKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAg
dW5zaWduZWQgbG9uZwoKKTsKCmV4dGVybiBpbnQgWFNldFdpbmRvd0JvcmRlclBpeG1hcCgKCiAg
ICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgUGl4bWFwCgopOwoKZXh0ZXJuIGludCBYU2V0
V2luZG93Qm9yZGVyV2lkdGgoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIHVuc2ln
bmVkIGludAoKKTsKCmV4dGVybiBpbnQgWFNldFdpbmRvd0NvbG9ybWFwKAoKICAgIERpc3BsYXkq
ICwKICAgIFdpbmRvdyAsCiAgICBDb2xvcm1hcAoKKTsKCmV4dGVybiBpbnQgWFN0b3JlQnVmZmVy
KAoKICAgIERpc3BsYXkqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGludCAsCiAgICBpbnQKCik7
CgpleHRlcm4gaW50IFhTdG9yZUJ5dGVzKAoKICAgIERpc3BsYXkqICwKICAgIGNvbnN0IGNoYXIq
ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFN0b3JlQ29sb3IoCgogICAgRGlzcGxheSogLAog
ICAgQ29sb3JtYXAgLAogICAgWENvbG9yKgoKKTsKCmV4dGVybiBpbnQgWFN0b3JlQ29sb3JzKAoK
ICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFwICwKICAgIFhDb2xvciogLAogICAgaW50CgopOwoK
ZXh0ZXJuIGludCBYU3RvcmVOYW1lKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBj
b25zdCBjaGFyKgoKKTsKCmV4dGVybiBpbnQgWFN0b3JlTmFtZWRDb2xvcigKCiAgICBEaXNwbGF5
KiAsCiAgICBDb2xvcm1hcCAsCiAgICBjb25zdCBjaGFyKiAsCiAgICB1bnNpZ25lZCBsb25nICwK
ICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFN5bmMoCgogICAgRGlzcGxheSogLAogICAgaW50Cgop
OwoKZXh0ZXJuIGludCBYVGV4dEV4dGVudHMoCgogICAgWEZvbnRTdHJ1Y3QqICwKICAgIGNvbnN0
IGNoYXIqICwKICAgIGludCAsCiAgICBpbnQqICwKICAgIGludCogLAogICAgaW50KiAsCiAgICBY
Q2hhclN0cnVjdCoKCik7CgpleHRlcm4gaW50IFhUZXh0RXh0ZW50czE2KAoKICAgIFhGb250U3Ry
dWN0KiAsCiAgICBjb25zdCBYQ2hhcjJiKiAsCiAgICBpbnQgLAogICAgaW50KiAsCiAgICBpbnQq
ICwKICAgIGludCogLAogICAgWENoYXJTdHJ1Y3QqCgopOwoKZXh0ZXJuIGludCBYVGV4dFdpZHRo
KAoKICAgIFhGb250U3RydWN0KiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBpbnQKCik7CgpleHRl
cm4gaW50IFhUZXh0V2lkdGgxNigKCiAgICBYRm9udFN0cnVjdCogLAogICAgY29uc3QgWENoYXIy
YiogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYVHJhbnNsYXRlQ29vcmRpbmF0ZXMoCgogICAg
RGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFdpbmRvdyAsCiAgICBpbnQgLAogICAgaW50ICwK
ICAgIGludCogLAogICAgaW50KiAsCiAgICBXaW5kb3cqCgopOwoKZXh0ZXJuIGludCBYVW5kZWZp
bmVDdXJzb3IoCgogICAgRGlzcGxheSogLAogICAgV2luZG93CgopOwoKZXh0ZXJuIGludCBYVW5n
cmFiQnV0dG9uKAoKICAgIERpc3BsYXkqICwKICAgIHVuc2lnbmVkIGludCAsCiAgICB1bnNpZ25l
ZCBpbnQgLAogICAgV2luZG93CgopOwoKZXh0ZXJuIGludCBYVW5ncmFiS2V5KAoKICAgIERpc3Bs
YXkqICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgV2luZG93CgopOwoKZXh0ZXJu
IGludCBYVW5ncmFiS2V5Ym9hcmQoCgogICAgRGlzcGxheSogLAogICAgVGltZQoKKTsKCmV4dGVy
biBpbnQgWFVuZ3JhYlBvaW50ZXIoCgogICAgRGlzcGxheSogLAogICAgVGltZQoKKTsKCmV4dGVy
biBpbnQgWFVuZ3JhYlNlcnZlcigKCiAgICBEaXNwbGF5KgoKKTsKCmV4dGVybiBpbnQgWFVuaW5z
dGFsbENvbG9ybWFwKAoKICAgIERpc3BsYXkqICwKICAgIENvbG9ybWFwCgopOwoKZXh0ZXJuIGlu
dCBYVW5sb2FkRm9udCgKCiAgICBEaXNwbGF5KiAsCiAgICBGb250CgopOwoKZXh0ZXJuIGludCBY
VW5tYXBTdWJ3aW5kb3dzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdwoKKTsKCmV4dGVybiBp
bnQgWFVubWFwV2luZG93KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdwoKKTsKCmV4dGVybiBp
bnQgWFZlbmRvclJlbGVhc2UoCgogICAgRGlzcGxheSoKCik7CgpleHRlcm4gaW50IFhXYXJwUG9p
bnRlcigKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgV2luZG93ICwKICAgIGludCAs
CiAgICBpbnQgLAogICAgdW5zaWduZWQgaW50ICwKICAgIHVuc2lnbmVkIGludCAsCiAgICBpbnQg
LAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYV2lkdGhNTU9mU2NyZWVuKAoKICAgIFNjcmVlbioK
Cik7CgpleHRlcm4gaW50IFhXaWR0aE9mU2NyZWVuKAoKICAgIFNjcmVlbioKCik7CgpleHRlcm4g
aW50IFhXaW5kb3dFdmVudCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgbG9uZyAs
CiAgICBYRXZlbnQqCgopOwoKZXh0ZXJuIGludCBYV3JpdGVCaXRtYXBGaWxlKAoKICAgIERpc3Bs
YXkqICwKICAgIGNvbnN0IGNoYXIqICwKICAgIFBpeG1hcCAsCiAgICB1bnNpZ25lZCBpbnQgLAog
ICAgdW5zaWduZWQgaW50ICwKICAgIGludCAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhTdXBw
b3J0c0xvY2FsZSAodm9pZCk7CgpleHRlcm4gY2hhciAqWFNldExvY2FsZU1vZGlmaWVycygKICAg
IGNvbnN0IGNoYXIqCik7CgpleHRlcm4gWE9NIFhPcGVuT00oCgogICAgRGlzcGxheSogLAogICAg
c3RydWN0IF9Ycm1IYXNoQnVja2V0UmVjKiAsCiAgICBjb25zdCBjaGFyKiAsCiAgICBjb25zdCBj
aGFyKgoKKTsKCmV4dGVybiBpbnQgWENsb3NlT00oCgogICAgWE9NCgopOwoKZXh0ZXJuIGNoYXIg
KlhTZXRPTVZhbHVlcygKCiAgICBYT00gLAogICAgLi4uCgopOwoKZXh0ZXJuIGNoYXIgKlhHZXRP
TVZhbHVlcygKCiAgICBYT00gLAogICAgLi4uCgopOwoKZXh0ZXJuIERpc3BsYXkgKlhEaXNwbGF5
T2ZPTSgKCiAgICBYT00KCik7CgpleHRlcm4gY2hhciAqWExvY2FsZU9mT00oCgogICAgWE9NCgop
OwoKZXh0ZXJuIFhPQyBYQ3JlYXRlT0MoCgogICAgWE9NICwKICAgIC4uLgoKKTsKCmV4dGVybiB2
b2lkIFhEZXN0cm95T0MoCgogICAgWE9DCgopOwoKZXh0ZXJuIFhPTSBYT01PZk9DKAoKICAgIFhP
QwoKKTsKCmV4dGVybiBjaGFyICpYU2V0T0NWYWx1ZXMoCgogICAgWE9DICwKICAgIC4uLgoKKTsK
CmV4dGVybiBjaGFyICpYR2V0T0NWYWx1ZXMoCgogICAgWE9DICwKICAgIC4uLgoKKTsKCmV4dGVy
biBYRm9udFNldCBYQ3JlYXRlRm9udFNldCgKCiAgICBEaXNwbGF5KiAsCiAgICBjb25zdCBjaGFy
KiAsCiAgICBjaGFyKioqICwKICAgIGludCogLAogICAgY2hhcioqCgopOwoKZXh0ZXJuIHZvaWQg
WEZyZWVGb250U2V0KAoKICAgIERpc3BsYXkqICwKICAgIFhGb250U2V0CgopOwoKZXh0ZXJuIGlu
dCBYRm9udHNPZkZvbnRTZXQoCgogICAgWEZvbnRTZXQgLAogICAgWEZvbnRTdHJ1Y3QqKiogLAog
ICAgY2hhcioqKgoKKTsKCmV4dGVybiBjaGFyICpYQmFzZUZvbnROYW1lTGlzdE9mRm9udFNldCgK
CiAgICBYRm9udFNldAoKKTsKCmV4dGVybiBjaGFyICpYTG9jYWxlT2ZGb250U2V0KAoKICAgIFhG
b250U2V0CgopOwoKZXh0ZXJuIGludCBYQ29udGV4dERlcGVuZGVudERyYXdpbmcoCgogICAgWEZv
bnRTZXQKCik7CgpleHRlcm4gaW50IFhEaXJlY3Rpb25hbERlcGVuZGVudERyYXdpbmcoCgogICAg
WEZvbnRTZXQKCik7CgpleHRlcm4gaW50IFhDb250ZXh0dWFsRHJhd2luZygKCiAgICBYRm9udFNl
dAoKKTsKCmV4dGVybiBYRm9udFNldEV4dGVudHMgKlhFeHRlbnRzT2ZGb250U2V0KAoKICAgIFhG
b250U2V0CgopOwoKZXh0ZXJuIGludCBYbWJUZXh0RXNjYXBlbWVudCgKCiAgICBYRm9udFNldCAs
CiAgICBjb25zdCBjaGFyKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFh3Y1RleHRFc2NhcGVt
ZW50KAoKICAgIFhGb250U2V0ICwKICAgIGNvbnN0IHdjaGFyX3QqICwKICAgIGludAoKKTsKCmV4
dGVybiBpbnQgWHV0ZjhUZXh0RXNjYXBlbWVudCgKCiAgICBYRm9udFNldCAsCiAgICBjb25zdCBj
aGFyKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhtYlRleHRFeHRlbnRzKAoKICAgIFhGb250
U2V0ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGludCAsCiAgICBYUmVjdGFuZ2xlKiAsCiAgICBY
UmVjdGFuZ2xlKgoKKTsKCmV4dGVybiBpbnQgWHdjVGV4dEV4dGVudHMoCgogICAgWEZvbnRTZXQg
LAogICAgY29uc3Qgd2NoYXJfdCogLAogICAgaW50ICwKICAgIFhSZWN0YW5nbGUqICwKICAgIFhS
ZWN0YW5nbGUqCgopOwoKZXh0ZXJuIGludCBYdXRmOFRleHRFeHRlbnRzKAoKICAgIFhGb250U2V0
ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGludCAsCiAgICBYUmVjdGFuZ2xlKiAsCiAgICBYUmVj
dGFuZ2xlKgoKKTsKCmV4dGVybiBpbnQgWG1iVGV4dFBlckNoYXJFeHRlbnRzKAoKICAgIFhGb250
U2V0ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGludCAsCiAgICBYUmVjdGFuZ2xlKiAsCiAgICBY
UmVjdGFuZ2xlKiAsCiAgICBpbnQgLAogICAgaW50KiAsCiAgICBYUmVjdGFuZ2xlKiAsCiAgICBY
UmVjdGFuZ2xlKgoKKTsKCmV4dGVybiBpbnQgWHdjVGV4dFBlckNoYXJFeHRlbnRzKAoKICAgIFhG
b250U2V0ICwKICAgIGNvbnN0IHdjaGFyX3QqICwKICAgIGludCAsCiAgICBYUmVjdGFuZ2xlKiAs
CiAgICBYUmVjdGFuZ2xlKiAsCiAgICBpbnQgLAogICAgaW50KiAsCiAgICBYUmVjdGFuZ2xlKiAs
CiAgICBYUmVjdGFuZ2xlKgoKKTsKCmV4dGVybiBpbnQgWHV0ZjhUZXh0UGVyQ2hhckV4dGVudHMo
CgogICAgWEZvbnRTZXQgLAogICAgY29uc3QgY2hhciogLAogICAgaW50ICwKICAgIFhSZWN0YW5n
bGUqICwKICAgIFhSZWN0YW5nbGUqICwKICAgIGludCAsCiAgICBpbnQqICwKICAgIFhSZWN0YW5n
bGUqICwKICAgIFhSZWN0YW5nbGUqCgopOwoKZXh0ZXJuIHZvaWQgWG1iRHJhd1RleHQoCgogICAg
RGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAsCiAg
ICBYbWJUZXh0SXRlbSogLAogICAgaW50CgopOwoKZXh0ZXJuIHZvaWQgWHdjRHJhd1RleHQoCgog
ICAgRGlzcGxheSogLAogICAgRHJhd2FibGUgLAogICAgR0MgLAogICAgaW50ICwKICAgIGludCAs
CiAgICBYd2NUZXh0SXRlbSogLAogICAgaW50CgopOwoKZXh0ZXJuIHZvaWQgWHV0ZjhEcmF3VGV4
dCgKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBHQyAsCiAgICBpbnQgLAogICAg
aW50ICwKICAgIFhtYlRleHRJdGVtKiAsCiAgICBpbnQKCik7CgpleHRlcm4gdm9pZCBYbWJEcmF3
U3RyaW5nKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIFhGb250U2V0ICwKICAg
IEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgY29uc3QgY2hhciogLAogICAgaW50CgopOwoK
ZXh0ZXJuIHZvaWQgWHdjRHJhd1N0cmluZygKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAs
CiAgICBYRm9udFNldCAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGNvbnN0IHdj
aGFyX3QqICwKICAgIGludAoKKTsKCmV4dGVybiB2b2lkIFh1dGY4RHJhd1N0cmluZygKCiAgICBE
aXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBYRm9udFNldCAsCiAgICBHQyAsCiAgICBpbnQg
LAogICAgaW50ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGludAoKKTsKCmV4dGVybiB2b2lkIFht
YkRyYXdJbWFnZVN0cmluZygKCiAgICBEaXNwbGF5KiAsCiAgICBEcmF3YWJsZSAsCiAgICBYRm9u
dFNldCAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIGNvbnN0IGNoYXIqICwKICAg
IGludAoKKTsKCmV4dGVybiB2b2lkIFh3Y0RyYXdJbWFnZVN0cmluZygKCiAgICBEaXNwbGF5KiAs
CiAgICBEcmF3YWJsZSAsCiAgICBYRm9udFNldCAsCiAgICBHQyAsCiAgICBpbnQgLAogICAgaW50
ICwKICAgIGNvbnN0IHdjaGFyX3QqICwKICAgIGludAoKKTsKCmV4dGVybiB2b2lkIFh1dGY4RHJh
d0ltYWdlU3RyaW5nKAoKICAgIERpc3BsYXkqICwKICAgIERyYXdhYmxlICwKICAgIFhGb250U2V0
ICwKICAgIEdDICwKICAgIGludCAsCiAgICBpbnQgLAogICAgY29uc3QgY2hhciogLAogICAgaW50
CgopOwoKZXh0ZXJuIFhJTSBYT3BlbklNKAoKICAgIERpc3BsYXkqICwKICAgIHN0cnVjdCBfWHJt
SGFzaEJ1Y2tldFJlYyogLAogICAgY2hhciogLAogICAgY2hhcioKCik7CgpleHRlcm4gaW50IFhD
bG9zZUlNKAoKICAgIFhJTQoKKTsKCmV4dGVybiBjaGFyICpYR2V0SU1WYWx1ZXMoCgogICAgWElN
ICwgLi4uCgopOwoKZXh0ZXJuIGNoYXIgKlhTZXRJTVZhbHVlcygKCiAgICBYSU0gLCAuLi4KCik7
CgpleHRlcm4gRGlzcGxheSAqWERpc3BsYXlPZklNKAoKICAgIFhJTQoKKTsKCmV4dGVybiBjaGFy
ICpYTG9jYWxlT2ZJTSgKCiAgICBYSU0KCik7CgpleHRlcm4gWElDIFhDcmVhdGVJQygKCiAgICBY
SU0gLCAuLi4KCik7CgpleHRlcm4gdm9pZCBYRGVzdHJveUlDKAoKICAgIFhJQwoKKTsKCmV4dGVy
biB2b2lkIFhTZXRJQ0ZvY3VzKAoKICAgIFhJQwoKKTsKCmV4dGVybiB2b2lkIFhVbnNldElDRm9j
dXMoCgogICAgWElDCgopOwoKZXh0ZXJuIHdjaGFyX3QgKlh3Y1Jlc2V0SUMoCgogICAgWElDCgop
OwoKZXh0ZXJuIGNoYXIgKlhtYlJlc2V0SUMoCgogICAgWElDCgopOwoKZXh0ZXJuIGNoYXIgKlh1
dGY4UmVzZXRJQygKCiAgICBYSUMKCik7CgpleHRlcm4gY2hhciAqWFNldElDVmFsdWVzKAoKICAg
IFhJQyAsIC4uLgoKKTsKCmV4dGVybiBjaGFyICpYR2V0SUNWYWx1ZXMoCgogICAgWElDICwgLi4u
CgopOwoKZXh0ZXJuIFhJTSBYSU1PZklDKAoKICAgIFhJQwoKKTsKCmV4dGVybiBpbnQgWEZpbHRl
ckV2ZW50KAoKICAgIFhFdmVudCogLAogICAgV2luZG93CgopOwoKZXh0ZXJuIGludCBYbWJMb29r
dXBTdHJpbmcoCgogICAgWElDICwKICAgIFhLZXlQcmVzc2VkRXZlbnQqICwKICAgIGNoYXIqICwK
ICAgIGludCAsCiAgICBLZXlTeW0qICwKICAgIGludCoKCik7CgpleHRlcm4gaW50IFh3Y0xvb2t1
cFN0cmluZygKCiAgICBYSUMgLAogICAgWEtleVByZXNzZWRFdmVudCogLAogICAgd2NoYXJfdCog
LAogICAgaW50ICwKICAgIEtleVN5bSogLAogICAgaW50KgoKKTsKCmV4dGVybiBpbnQgWHV0ZjhM
b29rdXBTdHJpbmcoCgogICAgWElDICwKICAgIFhLZXlQcmVzc2VkRXZlbnQqICwKICAgIGNoYXIq
ICwKICAgIGludCAsCiAgICBLZXlTeW0qICwKICAgIGludCoKCik7CgpleHRlcm4gWFZhTmVzdGVk
TGlzdCBYVmFDcmVhdGVOZXN0ZWRMaXN0KAoKICAgIGludCAsIC4uLgoKKTsKCgoKZXh0ZXJuIGlu
dCBYUmVnaXN0ZXJJTUluc3RhbnRpYXRlQ2FsbGJhY2soCgogICAgRGlzcGxheSogLAogICAgc3Ry
dWN0IF9Ycm1IYXNoQnVja2V0UmVjKiAsCiAgICBjaGFyKiAsCiAgICBjaGFyKiAsCiAgICBYSURQ
cm9jICwKICAgIFhQb2ludGVyCgopOwoKZXh0ZXJuIGludCBYVW5yZWdpc3RlcklNSW5zdGFudGlh
dGVDYWxsYmFjaygKCiAgICBEaXNwbGF5KiAsCiAgICBzdHJ1Y3QgX1hybUhhc2hCdWNrZXRSZWMq
ICwKICAgIGNoYXIqICwKICAgIGNoYXIqICwKICAgIFhJRFByb2MgLAogICAgWFBvaW50ZXIKCik7
Cgp0eXBlZGVmIHZvaWQgKCpYQ29ubmVjdGlvbldhdGNoUHJvYykoCgogICAgRGlzcGxheSogLAog
ICAgWFBvaW50ZXIgLAogICAgaW50ICwKICAgIGludCAsCiAgICBYUG9pbnRlcioKCik7CgoKZXh0
ZXJuIGludCBYSW50ZXJuYWxDb25uZWN0aW9uTnVtYmVycygKCiAgICBEaXNwbGF5KiAsCiAgICBp
bnQqKiAsCiAgICBpbnQqCgopOwoKZXh0ZXJuIHZvaWQgWFByb2Nlc3NJbnRlcm5hbENvbm5lY3Rp
b24oCgogICAgRGlzcGxheSogLAogICAgaW50CgopOwoKZXh0ZXJuIGludCBYQWRkQ29ubmVjdGlv
bldhdGNoKAoKICAgIERpc3BsYXkqICwKICAgIFhDb25uZWN0aW9uV2F0Y2hQcm9jICwKICAgIFhQ
b2ludGVyCgopOwoKZXh0ZXJuIHZvaWQgWFJlbW92ZUNvbm5lY3Rpb25XYXRjaCgKCiAgICBEaXNw
bGF5KiAsCiAgICBYQ29ubmVjdGlvbldhdGNoUHJvYyAsCiAgICBYUG9pbnRlcgoKKTsKCmV4dGVy
biB2b2lkIFhTZXRBdXRob3JpemF0aW9uKAoKICAgIGNoYXIgKiAsCiAgICBpbnQgLAogICAgY2hh
ciAqICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgX1htYnRvd2MoCgogICAgd2NoYXJfdCAqICwK
CgoKCiAgICBjaGFyICogLAogICAgaW50CgoKKTsKCmV4dGVybiBpbnQgX1h3Y3RvbWIoCgogICAg
Y2hhciAqICwKICAgIHdjaGFyX3QKCik7Cgp9CiMgNjAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9w
bHVnaW4vbnNwbHVnaW5kZWZzLmgiIDIKIyAxICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL1h1dGls
LmgiIDEKIyA3NCAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9YdXRpbC5oIgp0eXBlZGVmIHN0cnVj
dCB7CiAgICAgICAgbG9uZyBmbGFnczsKICAgICAgICBpbnQgeCwgeTsKICAgICAgICBpbnQgd2lk
dGgsIGhlaWdodDsKICAgICAgICBpbnQgbWluX3dpZHRoLCBtaW5faGVpZ2h0OwogICAgICAgIGlu
dCBtYXhfd2lkdGgsIG1heF9oZWlnaHQ7CiAgICAgICAgaW50IHdpZHRoX2luYywgaGVpZ2h0X2lu
YzsKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgaW50IHg7CiAgICAgICAgICAgICAg
ICBpbnQgeTsKICAgICAgICB9IG1pbl9hc3BlY3QsIG1heF9hc3BlY3Q7CiAgICAgICAgaW50IGJh
c2Vfd2lkdGgsIGJhc2VfaGVpZ2h0OwogICAgICAgIGludCB3aW5fZ3Jhdml0eTsKfSBYU2l6ZUhp
bnRzOwojIDExMiAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9YdXRpbC5oIgp0eXBlZGVmIHN0cnVj
dCB7CiAgICAgICAgbG9uZyBmbGFnczsKICAgICAgICBpbnQgaW5wdXQ7CgogICAgICAgIGludCBp
bml0aWFsX3N0YXRlOwogICAgICAgIFBpeG1hcCBpY29uX3BpeG1hcDsKICAgICAgICBXaW5kb3cg
aWNvbl93aW5kb3c7CiAgICAgICAgaW50IGljb25feCwgaWNvbl95OwogICAgICAgIFBpeG1hcCBp
Y29uX21hc2s7CiAgICAgICAgWElEIHdpbmRvd19ncm91cDsKCn0gWFdNSGludHM7CiMgMTU2ICIv
dXNyL1gxMVI2L2luY2x1ZGUvWDExL1h1dGlsLmgiCnR5cGVkZWYgc3RydWN0IHsKICAgIHVuc2ln
bmVkIGNoYXIgKnZhbHVlOwogICAgQXRvbSBlbmNvZGluZzsKICAgIGludCBmb3JtYXQ7CiAgICB1
bnNpZ25lZCBsb25nIG5pdGVtczsKfSBYVGV4dFByb3BlcnR5OwoKCgoKCnR5cGVkZWYgZW51bSB7
CiAgICBYU3RyaW5nU3R5bGUsCiAgICBYQ29tcG91bmRUZXh0U3R5bGUsCiAgICBYVGV4dFN0eWxl
LAogICAgWFN0ZElDQ1RleHRTdHlsZSwKCiAgICBYVVRGOFN0cmluZ1N0eWxlCn0gWElDQ0VuY29k
aW5nU3R5bGU7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IG1pbl93aWR0aCwgbWluX2hl
aWdodDsKICAgICAgICBpbnQgbWF4X3dpZHRoLCBtYXhfaGVpZ2h0OwogICAgICAgIGludCB3aWR0
aF9pbmMsIGhlaWdodF9pbmM7Cn0gWEljb25TaXplOwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAg
IGNoYXIgKnJlc19uYW1lOwogICAgICAgIGNoYXIgKnJlc19jbGFzczsKfSBYQ2xhc3NIaW50Owoj
IDIwNSAiL3Vzci9YMTFSNi9pbmNsdWRlL1gxMS9YdXRpbC5oIgp0eXBlZGVmIHN0cnVjdCBfWENv
bXBvc2VTdGF0dXMgewogICAgWFBvaW50ZXIgY29tcG9zZV9wdHI7CiAgICBpbnQgY2hhcnNfbWF0
Y2hlZDsKfSBYQ29tcG9zZVN0YXR1czsKIyAyNDAgIi91c3IvWDExUjYvaW5jbHVkZS9YMTEvWHV0
aWwuaCIKdHlwZWRlZiBzdHJ1Y3QgX1hSZWdpb24gKlJlZ2lvbjsKIyAyNTQgIi91c3IvWDExUjYv
aW5jbHVkZS9YMTEvWHV0aWwuaCIKdHlwZWRlZiBzdHJ1Y3QgewogIFZpc3VhbCAqdmlzdWFsOwog
IFZpc3VhbElEIHZpc3VhbGlkOwogIGludCBzY3JlZW47CiAgaW50IGRlcHRoOwoKICBpbnQgY19j
bGFzczsKCgoKICB1bnNpZ25lZCBsb25nIHJlZF9tYXNrOwogIHVuc2lnbmVkIGxvbmcgZ3JlZW5f
bWFzazsKICB1bnNpZ25lZCBsb25nIGJsdWVfbWFzazsKICBpbnQgY29sb3JtYXBfc2l6ZTsKICBp
bnQgYml0c19wZXJfcmdiOwp9IFhWaXN1YWxJbmZvOwojIDI4NyAiL3Vzci9YMTFSNi9pbmNsdWRl
L1gxMS9YdXRpbC5oIgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgQ29sb3JtYXAgY29sb3JtYXA7
CiAgICAgICAgdW5zaWduZWQgbG9uZyByZWRfbWF4OwogICAgICAgIHVuc2lnbmVkIGxvbmcgcmVk
X211bHQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBncmVlbl9tYXg7CiAgICAgICAgdW5zaWduZWQg
bG9uZyBncmVlbl9tdWx0OwogICAgICAgIHVuc2lnbmVkIGxvbmcgYmx1ZV9tYXg7CiAgICAgICAg
dW5zaWduZWQgbG9uZyBibHVlX211bHQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBiYXNlX3BpeGVs
OwogICAgICAgIFZpc3VhbElEIHZpc3VhbGlkOwogICAgICAgIFhJRCBraWxsaWQ7Cn0gWFN0YW5k
YXJkQ29sb3JtYXA7CiMgMzI0ICIvdXNyL1gxMVI2L2luY2x1ZGUvWDExL1h1dGlsLmgiCnR5cGVk
ZWYgaW50IFhDb250ZXh0OwoKCgoKZXh0ZXJuICJDIiB7CgoKCmV4dGVybiBYQ2xhc3NIaW50ICpY
QWxsb2NDbGFzc0hpbnQgKAoKICAgIHZvaWQKCik7CgpleHRlcm4gWEljb25TaXplICpYQWxsb2NJ
Y29uU2l6ZSAoCgogICAgdm9pZAoKKTsKCmV4dGVybiBYU2l6ZUhpbnRzICpYQWxsb2NTaXplSGlu
dHMgKAoKICAgIHZvaWQKCik7CgpleHRlcm4gWFN0YW5kYXJkQ29sb3JtYXAgKlhBbGxvY1N0YW5k
YXJkQ29sb3JtYXAgKAoKICAgIHZvaWQKCik7CgpleHRlcm4gWFdNSGludHMgKlhBbGxvY1dNSGlu
dHMgKAoKICAgIHZvaWQKCik7CgpleHRlcm4gaW50IFhDbGlwQm94KAoKICAgIFJlZ2lvbiAsCiAg
ICBYUmVjdGFuZ2xlKgoKKTsKCmV4dGVybiBSZWdpb24gWENyZWF0ZVJlZ2lvbigKCiAgICB2b2lk
CgopOwoKZXh0ZXJuIGNvbnN0IGNoYXIgKlhEZWZhdWx0U3RyaW5nICh2b2lkKTsKCmV4dGVybiBp
bnQgWERlbGV0ZUNvbnRleHQoCgogICAgRGlzcGxheSogLAogICAgWElEICwKICAgIFhDb250ZXh0
CgopOwoKZXh0ZXJuIGludCBYRGVzdHJveVJlZ2lvbigKCiAgICBSZWdpb24KCik7CgpleHRlcm4g
aW50IFhFbXB0eVJlZ2lvbigKCiAgICBSZWdpb24KCik7CgpleHRlcm4gaW50IFhFcXVhbFJlZ2lv
bigKCiAgICBSZWdpb24gLAogICAgUmVnaW9uCgopOwoKZXh0ZXJuIGludCBYRmluZENvbnRleHQo
CgogICAgRGlzcGxheSogLAogICAgWElEICwKICAgIFhDb250ZXh0ICwKICAgIFhQb2ludGVyKgoK
KTsKCmV4dGVybiBpbnQgWEdldENsYXNzSGludCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cg
LAogICAgWENsYXNzSGludCoKCik7CgpleHRlcm4gaW50IFhHZXRJY29uU2l6ZXMoCgogICAgRGlz
cGxheSogLAogICAgV2luZG93ICwKICAgIFhJY29uU2l6ZSoqICwKICAgIGludCoKCik7CgpleHRl
cm4gaW50IFhHZXROb3JtYWxIaW50cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAg
WFNpemVIaW50cyoKCik7CgpleHRlcm4gaW50IFhHZXRSR0JDb2xvcm1hcHMoCgogICAgRGlzcGxh
eSogLAogICAgV2luZG93ICwKICAgIFhTdGFuZGFyZENvbG9ybWFwKiogLAogICAgaW50KiAsCiAg
ICBBdG9tCgopOwoKZXh0ZXJuIGludCBYR2V0U2l6ZUhpbnRzKAoKICAgIERpc3BsYXkqICwKICAg
IFdpbmRvdyAsCiAgICBYU2l6ZUhpbnRzKiAsCiAgICBBdG9tCgopOwoKZXh0ZXJuIGludCBYR2V0
U3RhbmRhcmRDb2xvcm1hcCgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWFN0YW5k
YXJkQ29sb3JtYXAqICwKICAgIEF0b20KCik7CgpleHRlcm4gaW50IFhHZXRUZXh0UHJvcGVydHko
CgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhUZXh0UHJvcGVydHkqICwKICAgIEF0
b20KCik7CgpleHRlcm4gWFZpc3VhbEluZm8gKlhHZXRWaXN1YWxJbmZvKAoKICAgIERpc3BsYXkq
ICwKICAgIGxvbmcgLAogICAgWFZpc3VhbEluZm8qICwKICAgIGludCoKCik7CgpleHRlcm4gaW50
IFhHZXRXTUNsaWVudE1hY2hpbmUoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhU
ZXh0UHJvcGVydHkqCgopOwoKZXh0ZXJuIFhXTUhpbnRzICpYR2V0V01IaW50cygKCiAgICBEaXNw
bGF5KiAsCiAgICBXaW5kb3cKCik7CgpleHRlcm4gaW50IFhHZXRXTUljb25OYW1lKAoKICAgIERp
c3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYVGV4dFByb3BlcnR5KgoKKTsKCmV4dGVybiBpbnQg
WEdldFdNTmFtZSgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWFRleHRQcm9wZXJ0
eSoKCik7CgpleHRlcm4gaW50IFhHZXRXTU5vcm1hbEhpbnRzKAoKICAgIERpc3BsYXkqICwKICAg
IFdpbmRvdyAsCiAgICBYU2l6ZUhpbnRzKiAsCiAgICBsb25nKgoKKTsKCmV4dGVybiBpbnQgWEdl
dFdNU2l6ZUhpbnRzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYU2l6ZUhpbnRz
KiAsCiAgICBsb25nKiAsCiAgICBBdG9tCgopOwoKZXh0ZXJuIGludCBYR2V0Wm9vbUhpbnRzKAoK
ICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYU2l6ZUhpbnRzKgoKKTsKCmV4dGVybiBp
bnQgWEludGVyc2VjdFJlZ2lvbigKCiAgICBSZWdpb24gLAogICAgUmVnaW9uICwKICAgIFJlZ2lv
bgoKKTsKCmV4dGVybiB2b2lkIFhDb252ZXJ0Q2FzZSgKCiAgICBLZXlTeW0gLAogICAgS2V5U3lt
KiAsCiAgICBLZXlTeW0qCgopOwoKZXh0ZXJuIGludCBYTG9va3VwU3RyaW5nKAoKICAgIFhLZXlF
dmVudCogLAogICAgY2hhciogLAogICAgaW50ICwKICAgIEtleVN5bSogLAogICAgWENvbXBvc2VT
dGF0dXMqCgopOwoKZXh0ZXJuIGludCBYTWF0Y2hWaXN1YWxJbmZvKAoKICAgIERpc3BsYXkqICwK
ICAgIGludCAsCiAgICBpbnQgLAogICAgaW50ICwKICAgIFhWaXN1YWxJbmZvKgoKKTsKCmV4dGVy
biBpbnQgWE9mZnNldFJlZ2lvbigKCiAgICBSZWdpb24gLAogICAgaW50ICwKICAgIGludAoKKTsK
CmV4dGVybiBpbnQgWFBvaW50SW5SZWdpb24oCgogICAgUmVnaW9uICwKICAgIGludCAsCiAgICBp
bnQKCik7CgpleHRlcm4gUmVnaW9uIFhQb2x5Z29uUmVnaW9uKAoKICAgIFhQb2ludCogLAogICAg
aW50ICwKICAgIGludAoKKTsKCmV4dGVybiBpbnQgWFJlY3RJblJlZ2lvbigKCiAgICBSZWdpb24g
LAogICAgaW50ICwKICAgIGludCAsCiAgICB1bnNpZ25lZCBpbnQgLAogICAgdW5zaWduZWQgaW50
CgopOwoKZXh0ZXJuIGludCBYU2F2ZUNvbnRleHQoCgogICAgRGlzcGxheSogLAogICAgWElEICwK
ICAgIFhDb250ZXh0ICwKICAgIGNvbnN0IGNoYXIqCgopOwoKZXh0ZXJuIGludCBYU2V0Q2xhc3NI
aW50KAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYQ2xhc3NIaW50KgoKKTsKCmV4
dGVybiBpbnQgWFNldEljb25TaXplcygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAg
WEljb25TaXplKiAsCiAgICBpbnQKCik7CgpleHRlcm4gaW50IFhTZXROb3JtYWxIaW50cygKCiAg
ICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWFNpemVIaW50cyoKCik7CgpleHRlcm4gdm9p
ZCBYU2V0UkdCQ29sb3JtYXBzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYU3Rh
bmRhcmRDb2xvcm1hcCogLAogICAgaW50ICwKICAgIEF0b20KCik7CgpleHRlcm4gaW50IFhTZXRT
aXplSGludHMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhTaXplSGludHMqICwK
ICAgIEF0b20KCik7CgpleHRlcm4gaW50IFhTZXRTdGFuZGFyZFByb3BlcnRpZXMoCgogICAgRGlz
cGxheSogLAogICAgV2luZG93ICwKICAgIGNvbnN0IGNoYXIqICwKICAgIGNvbnN0IGNoYXIqICwK
ICAgIFBpeG1hcCAsCiAgICBjaGFyKiogLAogICAgaW50ICwKICAgIFhTaXplSGludHMqCgopOwoK
ZXh0ZXJuIHZvaWQgWFNldFRleHRQcm9wZXJ0eSgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cg
LAogICAgWFRleHRQcm9wZXJ0eSogLAogICAgQXRvbQoKKTsKCmV4dGVybiB2b2lkIFhTZXRXTUNs
aWVudE1hY2hpbmUoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhUZXh0UHJvcGVy
dHkqCgopOwoKZXh0ZXJuIGludCBYU2V0V01IaW50cygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5k
b3cgLAogICAgWFdNSGludHMqCgopOwoKZXh0ZXJuIHZvaWQgWFNldFdNSWNvbk5hbWUoCgogICAg
RGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhUZXh0UHJvcGVydHkqCgopOwoKZXh0ZXJuIHZv
aWQgWFNldFdNTmFtZSgKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgWFRleHRQcm9w
ZXJ0eSoKCik7CgpleHRlcm4gdm9pZCBYU2V0V01Ob3JtYWxIaW50cygKCiAgICBEaXNwbGF5KiAs
CiAgICBXaW5kb3cgLAogICAgWFNpemVIaW50cyoKCik7CgpleHRlcm4gdm9pZCBYU2V0V01Qcm9w
ZXJ0aWVzKAoKICAgIERpc3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYVGV4dFByb3BlcnR5KiAs
CiAgICBYVGV4dFByb3BlcnR5KiAsCiAgICBjaGFyKiogLAogICAgaW50ICwKICAgIFhTaXplSGlu
dHMqICwKICAgIFhXTUhpbnRzKiAsCiAgICBYQ2xhc3NIaW50KgoKKTsKCmV4dGVybiB2b2lkIFht
YlNldFdNUHJvcGVydGllcygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAgY29uc3Qg
Y2hhciogLAogICAgY29uc3QgY2hhciogLAogICAgY2hhcioqICwKICAgIGludCAsCiAgICBYU2l6
ZUhpbnRzKiAsCiAgICBYV01IaW50cyogLAogICAgWENsYXNzSGludCoKCik7CgpleHRlcm4gdm9p
ZCBYdXRmOFNldFdNUHJvcGVydGllcygKCiAgICBEaXNwbGF5KiAsCiAgICBXaW5kb3cgLAogICAg
Y29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAogICAgY2hhcioqICwKICAgIGludCAsCiAg
ICBYU2l6ZUhpbnRzKiAsCiAgICBYV01IaW50cyogLAogICAgWENsYXNzSGludCoKCik7CgpleHRl
cm4gdm9pZCBYU2V0V01TaXplSGludHMoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAg
IFhTaXplSGludHMqICwKICAgIEF0b20KCik7CgpleHRlcm4gaW50IFhTZXRSZWdpb24oCgogICAg
RGlzcGxheSogLAogICAgR0MgLAogICAgUmVnaW9uCgopOwoKZXh0ZXJuIHZvaWQgWFNldFN0YW5k
YXJkQ29sb3JtYXAoCgogICAgRGlzcGxheSogLAogICAgV2luZG93ICwKICAgIFhTdGFuZGFyZENv
bG9ybWFwKiAsCiAgICBBdG9tCgopOwoKZXh0ZXJuIGludCBYU2V0Wm9vbUhpbnRzKAoKICAgIERp
c3BsYXkqICwKICAgIFdpbmRvdyAsCiAgICBYU2l6ZUhpbnRzKgoKKTsKCmV4dGVybiBpbnQgWFNo
cmlua1JlZ2lvbigKCiAgICBSZWdpb24gLAogICAgaW50ICwKICAgIGludAoKKTsKCmV4dGVybiBp
bnQgWFN0cmluZ0xpc3RUb1RleHRQcm9wZXJ0eSgKCiAgICBjaGFyKiogLAogICAgaW50ICwKICAg
IFhUZXh0UHJvcGVydHkqCgopOwoKZXh0ZXJuIGludCBYU3VidHJhY3RSZWdpb24oCgogICAgUmVn
aW9uICwKICAgIFJlZ2lvbiAsCiAgICBSZWdpb24KCik7CgpleHRlcm4gaW50IFhtYlRleHRMaXN0
VG9UZXh0UHJvcGVydHkoCiAgICBEaXNwbGF5KiBkaXNwbGF5LAogICAgY2hhcioqIGxpc3QsCiAg
ICBpbnQgY291bnQsCiAgICBYSUNDRW5jb2RpbmdTdHlsZSBzdHlsZSwKICAgIFhUZXh0UHJvcGVy
dHkqIHRleHRfcHJvcF9yZXR1cm4KKTsKCmV4dGVybiBpbnQgWHdjVGV4dExpc3RUb1RleHRQcm9w
ZXJ0eSgKICAgIERpc3BsYXkqIGRpc3BsYXksCiAgICB3Y2hhcl90KiogbGlzdCwKICAgIGludCBj
b3VudCwKICAgIFhJQ0NFbmNvZGluZ1N0eWxlIHN0eWxlLAogICAgWFRleHRQcm9wZXJ0eSogdGV4
dF9wcm9wX3JldHVybgopOwoKZXh0ZXJuIGludCBYdXRmOFRleHRMaXN0VG9UZXh0UHJvcGVydHko
CiAgICBEaXNwbGF5KiBkaXNwbGF5LAogICAgY2hhcioqIGxpc3QsCiAgICBpbnQgY291bnQsCiAg
ICBYSUNDRW5jb2RpbmdTdHlsZSBzdHlsZSwKICAgIFhUZXh0UHJvcGVydHkqIHRleHRfcHJvcF9y
ZXR1cm4KKTsKCmV4dGVybiB2b2lkIFh3Y0ZyZWVTdHJpbmdMaXN0KAogICAgd2NoYXJfdCoqIGxp
c3QKKTsKCmV4dGVybiBpbnQgWFRleHRQcm9wZXJ0eVRvU3RyaW5nTGlzdCgKCiAgICBYVGV4dFBy
b3BlcnR5KiAsCiAgICBjaGFyKioqICwKICAgIGludCoKCik7CgpleHRlcm4gaW50IFhtYlRleHRQ
cm9wZXJ0eVRvVGV4dExpc3QoCiAgICBEaXNwbGF5KiBkaXNwbGF5LAogICAgY29uc3QgWFRleHRQ
cm9wZXJ0eSogdGV4dF9wcm9wLAogICAgY2hhcioqKiBsaXN0X3JldHVybiwKICAgIGludCogY291
bnRfcmV0dXJuCik7CgpleHRlcm4gaW50IFh3Y1RleHRQcm9wZXJ0eVRvVGV4dExpc3QoCiAgICBE
aXNwbGF5KiBkaXNwbGF5LAogICAgY29uc3QgWFRleHRQcm9wZXJ0eSogdGV4dF9wcm9wLAogICAg
d2NoYXJfdCoqKiBsaXN0X3JldHVybiwKICAgIGludCogY291bnRfcmV0dXJuCik7CgpleHRlcm4g
aW50IFh1dGY4VGV4dFByb3BlcnR5VG9UZXh0TGlzdCgKICAgIERpc3BsYXkqIGRpc3BsYXksCiAg
ICBjb25zdCBYVGV4dFByb3BlcnR5KiB0ZXh0X3Byb3AsCiAgICBjaGFyKioqIGxpc3RfcmV0dXJu
LAogICAgaW50KiBjb3VudF9yZXR1cm4KKTsKCmV4dGVybiBpbnQgWFVuaW9uUmVjdFdpdGhSZWdp
b24oCgogICAgWFJlY3RhbmdsZSogLAogICAgUmVnaW9uICwKICAgIFJlZ2lvbgoKKTsKCmV4dGVy
biBpbnQgWFVuaW9uUmVnaW9uKAoKICAgIFJlZ2lvbiAsCiAgICBSZWdpb24gLAogICAgUmVnaW9u
CgopOwoKZXh0ZXJuIGludCBYV01HZW9tZXRyeSgKCiAgICBEaXNwbGF5KiAsCiAgICBpbnQgLAog
ICAgY29uc3QgY2hhciogLAogICAgY29uc3QgY2hhciogLAogICAgdW5zaWduZWQgaW50ICwKICAg
IFhTaXplSGludHMqICwKICAgIGludCogLAogICAgaW50KiAsCiAgICBpbnQqICwKICAgIGludCog
LAogICAgaW50KgoKKTsKCmV4dGVybiBpbnQgWFhvclJlZ2lvbigKCiAgICBSZWdpb24gLAogICAg
UmVnaW9uICwKICAgIFJlZ2lvbgoKKTsKCn0KIyA2MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3Bs
dWdpbi9uc3BsdWdpbmRlZnMuaCIgMgojIDEyMyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdp
bi9uc3BsdWdpbmRlZnMuaCIKdHlwZWRlZiBjb25zdCBjaGFyKiBuc01JTUVUeXBlOwoKc3RydWN0
IG5zQnl0ZVJhbmdlIHsKICAgIFBSSW50MzIgb2Zmc2V0OwogICAgUFJVaW50MzIgbGVuZ3RoOwog
ICAgc3RydWN0IG5zQnl0ZVJhbmdlKiBuZXh0Owp9OwoKc3RydWN0IG5zUGx1Z2luUmVjdCB7CiAg
ICBQUlVpbnQxNiB0b3A7CiAgICBQUlVpbnQxNiBsZWZ0OwogICAgUFJVaW50MTYgYm90dG9tOwog
ICAgUFJVaW50MTYgcmlnaHQ7Cn07CiMgMTUwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2lu
L25zcGx1Z2luZGVmcy5oIgplbnVtIG5zUGx1Z2luQ2FsbGJhY2tUeXBlIHsKICAgIG5zUGx1Z2lu
Q2FsbGJhY2tUeXBlX1NldFdpbmRvdyA9IDEsCiAgICBuc1BsdWdpbkNhbGxiYWNrVHlwZV9Qcmlu
dAp9OwoKc3RydWN0IG5zUGx1Z2luQW55Q2FsbGJhY2tTdHJ1Y3QgewogICAgUFJJbnQzMiB0eXBl
Owp9OwoKCnN0cnVjdCBuc1BsdWdpblNldFdpbmRvd0NhbGxiYWNrU3RydWN0IHsKICAgIFBSSW50
MzIgdHlwZTsKICAgIERpc3BsYXkqIGRpc3BsYXk7CiAgICBWaXN1YWwqIHZpc3VhbDsKICAgIENv
bG9ybWFwIGNvbG9ybWFwOwogICAgUFJVaW50MzIgZGVwdGg7Cn07CgoKCgoKCgpzdHJ1Y3QgbnNQ
bHVnaW5QcmludENhbGxiYWNrU3RydWN0IHsKICAgIFBSSW50MzIgdHlwZTsKICAgIEZJTEUqIGZw
Owp9OwoKCgoKCgplbnVtIG5zUGx1Z2luVmFyaWFibGUgewogICAgbnNQbHVnaW5WYXJpYWJsZV9O
YW1lU3RyaW5nID0gMSwKICAgIG5zUGx1Z2luVmFyaWFibGVfRGVzY3JpcHRpb25TdHJpbmcgPSAy
Cn07CgplbnVtIG5zUGx1Z2luTWFuYWdlclZhcmlhYmxlIHsKICAgIG5zUGx1Z2luTWFuYWdlclZh
cmlhYmxlX1hEaXNwbGF5ID0gMSwKICAgIG5zUGx1Z2luTWFuYWdlclZhcmlhYmxlX1h0QXBwQ29u
dGV4dCA9IDIKfTsKCmVudW0gbnNQbHVnaW5JbnN0YW5jZVBlZXJWYXJpYWJsZSB7CiAgICBuc1Bs
dWdpbkluc3RhbmNlUGVlclZhcmlhYmxlX05ldHNjYXBlV2luZG93ID0gMwoKCn07CgplbnVtIG5z
UGx1Z2luSW5zdGFuY2VWYXJpYWJsZSB7CiAgICBuc1BsdWdpbkluc3RhbmNlVmFyaWFibGVfV2lu
ZG93bGVzc0Jvb2wgPSAzLAogICAgbnNQbHVnaW5JbnN0YW5jZVZhcmlhYmxlX1RyYW5zcGFyZW50
Qm9vbCA9IDQsCiAgICBuc1BsdWdpbkluc3RhbmNlVmFyaWFibGVfRG9DYWNoZUJvb2wgPSA1LAog
ICAgbnNQbHVnaW5JbnN0YW5jZVZhcmlhYmxlX0NhbGxTZXRXaW5kb3dBZnRlckRlc3Ryb3lCb29s
ID0gNiwKICAgIG5zUGx1Z2luSW5zdGFuY2VWYXJpYWJsZV9TY3JpcHRhYmxlSW5zdGFuY2UgPSAx
MCwKICAgIG5zUGx1Z2luSW5zdGFuY2VWYXJpYWJsZV9TY3JpcHRhYmxlSUlEID0gMTEKfTsKCgoK
ZW51bSBuc1BsdWdpbk1vZGUgewogICAgbnNQbHVnaW5Nb2RlX0VtYmVkZGVkID0gMSwKICAgIG5z
UGx1Z2luTW9kZV9GdWxsCn07CgoKZW51bSBuc1BsdWdpblN0cmVhbVR5cGUgewogICAgbnNQbHVn
aW5TdHJlYW1UeXBlX05vcm1hbCA9IDEsCiAgICBuc1BsdWdpblN0cmVhbVR5cGVfU2VlaywKICAg
IG5zUGx1Z2luU3RyZWFtVHlwZV9Bc0ZpbGUsCiAgICBuc1BsdWdpblN0cmVhbVR5cGVfQXNGaWxl
T25seQp9OwoKCgoKCmVudW0gbnNQbHVnaW5XaW5kb3dUeXBlIHsKICAgIG5zUGx1Z2luV2luZG93
VHlwZV9XaW5kb3cgPSAxLAogICAgbnNQbHVnaW5XaW5kb3dUeXBlX0RyYXdhYmxlCn07CiMgMjUx
ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zcGx1Z2luZGVmcy5oIgpzdHJ1Y3QgbnNQ
bHVnaW5Qb3J0Owp0eXBlZGVmIFJlZ2lvbiBuc1BsdWdpblJlZ2lvbjsKdHlwZWRlZiBEcmF3YWJs
ZSBuc1BsdWdpblBsYXRmb3JtV2luZG93UmVmOwojIDI2MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L3BsdWdpbi9uc3BsdWdpbmRlZnMuaCIKc3RydWN0IG5zUGx1Z2luV2luZG93IHsKICAgIG5zUGx1
Z2luUG9ydCogd2luZG93OwoKCiAgICBQUkludDMyIHg7CiAgICBQUkludDMyIHk7CiAgICBQUlVp
bnQzMiB3aWR0aDsKICAgIFBSVWludDMyIGhlaWdodDsKICAgIG5zUGx1Z2luUmVjdCBjbGlwUmVj
dDsKCgogICAgdm9pZCogd3NfaW5mbzsKCiAgICBuc1BsdWdpbldpbmRvd1R5cGUgdHlwZTsKfTsK
CnN0cnVjdCBuc1BsdWdpbkZ1bGxQcmludCB7CiAgICBQUkJvb2wgcGx1Z2luUHJpbnRlZDsKCiAg
ICBQUkJvb2wgcHJpbnRPbmU7CgogICAgdm9pZCogcGxhdGZvcm1QcmludDsKfTsKCnN0cnVjdCBu
c1BsdWdpbkVtYmVkUHJpbnQgewogICAgbnNQbHVnaW5XaW5kb3cgd2luZG93OwogICAgdm9pZCog
cGxhdGZvcm1QcmludDsKfTsKCnN0cnVjdCBuc1BsdWdpblByaW50IHsKICAgIFBSVWludDE2IG1v
ZGU7CiAgICB1bmlvbgogICAgewogICAgICAgIG5zUGx1Z2luRnVsbFByaW50IGZ1bGxQcmludDsK
ICAgICAgICBuc1BsdWdpbkVtYmVkUHJpbnQgZW1iZWRQcmludDsKICAgIH0gcHJpbnQ7Cn07Cgpz
dHJ1Y3QgbnNQbHVnaW5FdmVudCB7CiMgMzE4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2lu
L25zcGx1Z2luZGVmcy5oIgogICAgWEV2ZW50IGV2ZW50OwoKCgp9OwoKCgoKCmVudW0gbnNQbHVn
aW5FdmVudFR5cGUgewojIDMzOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc3BsdWdp
bmRlZnMuaCIKICAgIG5zUGx1Z2luRXZlbnRUeXBlX0lkbGUgPSAwCn07CgoKCmVudW0gbnNQbHVn
aW5SZWFzb24gewogICAgbnNQbHVnaW5SZWFzb25fQmFzZSA9IDAsCiAgICBuc1BsdWdpblJlYXNv
bl9Eb25lID0gMCwKICAgIG5zUGx1Z2luUmVhc29uX05ldHdvcmtFcnIsCiAgICBuc1BsdWdpblJl
YXNvbl9Vc2VyQnJlYWssCiAgICBuc1BsdWdpblJlYXNvbl9Ob1JlYXNvbgp9OwojIDM3MSAiLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc3BsdWdpbmRlZnMuaCIKY2xhc3MgbnNJUGx1Z2lu
OwpjbGFzcyBuc0lFdmVudEhhbmRsZXI7CmNsYXNzIG5zSVBsdWdpbkluc3RhbmNlOwoKCmNsYXNz
IG5zSVBsdWdpbk1hbmFnZXI7CmNsYXNzIG5zSUZpbGVVdGlsaXRpZXM7CmNsYXNzIG5zSVBsdWdp
bkluc3RhbmNlUGVlcjsKY2xhc3MgbnNJV2luZG93bGVzc1BsdWdpbkluc3RhbmNlUGVlcjsKY2xh
c3MgbnNJUGx1Z2luVGFnSW5mbzsKIyAyMiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9u
c0lQbHVnaW5TdHJlYW1JbmZvLmgiIDIKIyAzMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdp
bi9uc0lQbHVnaW5TdHJlYW1JbmZvLmgiCmNsYXNzIG5zSVBsdWdpblN0cmVhbUluZm8gOiBwdWJs
aWMgbnNJU3VwcG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgp
IHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4ZWQ3ZDRjYTAsIDB4YjAwNSwgMHgxMWQyLCB7
IDB4YWQsIDB4YWEsIDB4MDAsIDB4ODAsIDB4NWYsIDB4NmQsIDB4ZWMsIDB4NDkgfX07IHJldHVy
biBpaWQ7fQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb250ZW50VHlwZShuc01JTUVUeXBlICph
Q29udGVudFR5cGUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNTZWVrYWJsZShQUkJvb2wg
KmFTZWVrYWJsZSkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMZW5ndGgoUFJVaW50MzIg
KmFMZW5ndGgpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFzdE1vZGlmaWVkKFBSVWlu
dDMyICphTGFzdE1vZGlmaWVkKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFVSTChjb25z
dCBjaGFyICogKmFVUkwpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVxdWVzdFJlYWQobnNC
eXRlUmFuZ2UgKiBhUmFuZ2VMaXN0KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0cmVh
bU9mZnNldChQUkludDMyICphU3RyZWFtT2Zmc2V0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT
ZXRTdHJlYW1PZmZzZXQoUFJJbnQzMiBhU3RyZWFtT2Zmc2V0KSA9IDA7Cgp9OwojIDE5ICIuLi8u
Li8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpblN0cmVhbUxpc3RlbmVyLmgiIDIKCgoK
IyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJSW5wdXRTdHJlYW0uaCIgMQojIDE3
ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJSW5wdXRTdHJlYW0uaCIKY2xhc3MgbnNJ
SW5wdXRTdHJlYW07CiMgNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lJbnB1dFN0
cmVhbS5oIgp0eXBlZGVmIG5zcmVzdWx0ICgqIG5zV3JpdGVTZWdtZW50RnVuKShuc0lJbnB1dFN0
cmVhbSAqYUluU3RyZWFtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
b2lkICphQ2xvc3VyZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqYUZyb21TZWdtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUlVpbnQzMiBhVG9PZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBSVWludDMyIGFDb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJVaW50MzIgKmFXcml0ZUNvdW50KTsKIyA1NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L3hwY29tL25zSUlucHV0U3RyZWFtLmgiCmNsYXNzIG5zSUlucHV0U3RyZWFtIDogcHVibGljIG5z
SVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3Rh
dGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGZhOWM3ZjZjLCAweDYxYjMsIDB4MTFkNCwgeyAweDk4
LCAweDc3LCAweDAwLCAweGMwLCAweDRmLCAweGEwLCAweGNmLCAweDRhIH19OyByZXR1cm4gaWlk
O30KIyA2OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUlucHV0U3RyZWFtLmgiCiAg
dmlydHVhbCBuc3Jlc3VsdCBDbG9zZSh2b2lkKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEF2YWlsYWJsZShQUlVpbnQzMiAqX3JldHZhbCkgPSAwOwojIDkxICIuLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUveHBjb20vbnNJSW5wdXRTdHJlYW0uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlYWQoY2hh
ciAqIGFCdWYsIFBSVWludDMyIGFDb3VudCwgUFJVaW50MzIgKl9yZXR2YWwpID0gMDsKIyAxMTUg
Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lJbnB1dFN0cmVhbS5oIgogIHZpcnR1YWwg
bnNyZXN1bHQgUmVhZFNlZ21lbnRzKG5zV3JpdGVTZWdtZW50RnVuIGFXcml0ZXIsIHZvaWQgKiBh
Q2xvc3VyZSwgUFJVaW50MzIgYUNvdW50LCBQUlVpbnQzMiAqX3JldHZhbCkgPSAwOwoKCgoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBJc05vbkJsb2NraW5nKFBSQm9vbCAqX3JldHZhbCkgPSAwOwoKfTsK
IyAyMyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5TdHJlYW1MaXN0ZW5l
ci5oIiAyCiMgNDQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luU3RyZWFt
TGlzdGVuZXIuaCIKY2xhc3MgbnNJUGx1Z2luU3RyZWFtTGlzdGVuZXIgOiBwdWJsaWMgbnNJU3Vw
cG9ydHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMg
Y29uc3QgbnNJSUQgaWlkID0gezB4ZGYwNTU3NzAsIDB4NTQ0OCwgMHgxMWQyLCB7IDB4ODEsIDB4
NjQsIDB4MDAsIDB4NjAsIDB4MDgsIDB4MTEsIDB4OWQsIDB4N2EgfX07IHJldHVybiBpaWQ7fQoj
IDU4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpblN0cmVhbUxpc3RlbmVy
LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBPblN0YXJ0QmluZGluZyhuc0lQbHVnaW5TdHJlYW1JbmZv
ICphUGx1Z2luSW5mbykgPSAwOwojIDcyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25z
SVBsdWdpblN0cmVhbUxpc3RlbmVyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBPbkRhdGFBdmFpbGFi
bGUobnNJUGx1Z2luU3RyZWFtSW5mbyAqYVBsdWdpbkluZm8sIG5zSUlucHV0U3RyZWFtICphSW5w
dXRTdHJlYW0sIFBSVWludDMyIGFMZW5ndGgpID0gMDsKIyA4MiAiLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL3BsdWdpbi9uc0lQbHVnaW5TdHJlYW1MaXN0ZW5lci5oIgogIHZpcnR1YWwgbnNyZXN1bHQg
T25GaWxlQXZhaWxhYmxlKG5zSVBsdWdpblN0cmVhbUluZm8gKmFQbHVnaW5JbmZvLCBjb25zdCBj
aGFyICphRmlsZU5hbWUpID0gMDsKIyA5NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9u
c0lQbHVnaW5TdHJlYW1MaXN0ZW5lci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgT25TdG9wQmluZGlu
Zyhuc0lQbHVnaW5TdHJlYW1JbmZvICphUGx1Z2luSW5mbywgbnNyZXN1bHQgYVN0YXR1cykgPSAw
OwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0cmVhbVR5cGUobnNQbHVnaW5TdHJlYW1U
eXBlICphU3RyZWFtVHlwZSkgPSAwOwoKfTsKIyAxNSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3Bs
dWdpbi9uc0lQbHVnaW5JbnN0YW5jZS5oIiAyCgoKCgoKCgpjbGFzcyBuc0lQbHVnaW5JbnN0YW5j
ZVBlZXI7CiMgNDkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luSW5zdGFu
Y2UuaCIKY2xhc3MgbnNJUGx1Z2luSW5zdGFuY2UgOiBwdWJsaWMgbnNJU3VwcG9ydHMgewogcHVi
bGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQg
aWlkID0gezB4ZWJlMDBmNDAsIDB4MDE5OSwgMHgxMWQyLCB7IDB4ODEsIDB4NWIsIDB4MDAsIDB4
NjAsIDB4MDgsIDB4MTEsIDB4OWQsIDB4N2EgfX07IHJldHVybiBpaWQ7fQojIDYyICIuLi8uLi8u
Li9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbkluc3RhbmNlLmgiCiAgdmlydHVhbCBuc3Jl
c3VsdCBJbml0aWFsaXplKG5zSVBsdWdpbkluc3RhbmNlUGVlciAqYVBlZXIpID0gMDsKIyA3NCAi
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5JbnN0YW5jZS5oIgogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0UGVlcihuc0lQbHVnaW5JbnN0YW5jZVBlZXIgKiAqYVBlZXIpID0gMDsK
IyA4NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5JbnN0YW5jZS5oIgog
IHZpcnR1YWwgbnNyZXN1bHQgU3RhcnQodm9pZCkgPSAwOwojIDk2ICIuLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvcGx1Z2luL25zSVBsdWdpbkluc3RhbmNlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTdG9w
KHZvaWQpID0gMDsKIyAxMDcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2lu
SW5zdGFuY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IERlc3Ryb3kodm9pZCkgPSAwOwojIDExOCAi
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5JbnN0YW5jZS5oIgogIHZpcnR1
YWwgbnNyZXN1bHQgU2V0V2luZG93KG5zUGx1Z2luV2luZG93ICogYVdpbmRvdykgPSAwOwojIDEz
MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5JbnN0YW5jZS5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgTmV3U3RyZWFtKG5zSVBsdWdpblN0cmVhbUxpc3RlbmVyICoqYUxpc3Rl
bmVyKSA9IDA7CiMgMTQxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbklu
c3RhbmNlLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBQcmludChuc1BsdWdpblByaW50ICogYVBsYXRm
b3JtUHJpbnQpID0gMDsKIyAxNTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1
Z2luSW5zdGFuY2UuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFZhbHVlKG5zUGx1Z2luSW5zdGFu
Y2VWYXJpYWJsZSBhVmFyaWFibGUsIHZvaWQgKiBhVmFsdWUpID0gMDsKIyAxNzEgIi4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luSW5zdGFuY2UuaCIKICB2aXJ0dWFsIG5zcmVz
dWx0IEhhbmRsZUV2ZW50KG5zUGx1Z2luRXZlbnQgKiBhRXZlbnQsIFBSQm9vbCAqYUhhbmRsZWQp
ID0gMDsKCn07CiMgMTIwICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbGF5b3V0L25zSU9iamVjdEZyYW1lLmgiIDEKIyA0MCAiLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL2xheW91dC9uc0lPYmplY3RGcmFtZS5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9sYXlvdXQvbnNJRnJhbWUuaCIgMQojIDQ5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0
L25zSUZyYW1lLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNTdHlsZVN0
cnVjdC5oIiAxCiMgNDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zU3R5bGVTdHJ1
Y3QuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvZ2Z4L25zQ29sb3IuaCIgMQojIDQzICIu
Li8uLi8uLi9kaXN0L2luY2x1ZGUvZ2Z4L25zQ29sb3IuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUveHBjb20vbnNDb21PYnNvbGV0ZS5oIiAxCiMgNDQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9nZngvbnNDb2xvci5oIiAyCgpjbGFzcyBuc1N0cmluZzsKY2xhc3MgbnNBU3RyaW5nOwoKCgp0
eXBlZGVmIFBSVWludDMyIG5zY29sb3I7CiMgODkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZngv
bnNDb2xvci5oIgpleHRlcm4gIkMiIFBSQm9vbCBOU19IZXhUb1JHQihjb25zdCBuc1N0cmluZyYg
YUJ1ZiwgbnNjb2xvciogYVJlc3VsdCk7CgoKCgpleHRlcm4gIkMiIFBSQm9vbCBOU19Mb29zZUhl
eFRvUkdCKGNvbnN0IG5zU3RyaW5nJiBhQnVmLCBuc2NvbG9yKiBhUmVzdWx0KTsKCgoKZXh0ZXJu
ICJDIiBQUkJvb2wgTlNfQ29sb3JOYW1lVG9SR0IoY29uc3QgbnNBU3RyaW5nJiBhQnVmLCBuc2Nv
bG9yKiBhUmVzdWx0KTsKCgoKZXh0ZXJuICJDIiBuc2NvbG9yIE5TX0JyaWdodGVuQ29sb3IobnNj
b2xvciBpbkNvbG9yKTsKCgoKZXh0ZXJuICJDIiBuc2NvbG9yIE5TX0RhcmtlbkNvbG9yKG5zY29s
b3IgaW5Db2xvcik7CiMgNDIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zU3R5bGVT
dHJ1Y3QuaCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZngvbnNDb29yZC5oIiAxCiMg
NTYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZngvbnNDb29yZC5oIgp0eXBlZGVmIFBSSW50MzIg
bnNjb29yZDsKIyA0MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNTdHlsZVN0cnVj
dC5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2dmeC9uc01hcmdpbi5oIiAxCiMgNDQg
Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZngvbnNNYXJnaW4uaCIKc3RydWN0IG5zTWFyZ2luIHsK
ICBuc2Nvb3JkIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbTsKCgogIG5zTWFyZ2luKCkge30KICBu
c01hcmdpbihjb25zdCBuc01hcmdpbiYgYU1hcmdpbikgeyp0aGlzID0gYU1hcmdpbjt9CiAgbnNN
YXJnaW4obnNjb29yZCBhTGVmdCwgbnNjb29yZCBhVG9wLAogICAgICAgICAgIG5zY29vcmQgYVJp
Z2h0LCBuc2Nvb3JkIGFCb3R0b20pIHtsZWZ0ID0gYUxlZnQ7IHRvcCA9IGFUb3A7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gYVJpZ2h0OyBib3R0
b20gPSBhQm90dG9tO30KCiAgdm9pZCBTaXplVG8obnNjb29yZCBhTGVmdCwgbnNjb29yZCBhVG9w
LAogICAgICAgICAgICAgIG5zY29vcmQgYVJpZ2h0LCBuc2Nvb3JkIGFCb3R0b20pIHtsZWZ0ID0g
YUxlZnQ7IHRvcCA9IGFUb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJpZ2h0ID0gYVJpZ2h0OyBib3R0b20gPSBhQm90dG9tO30KICB2b2lkIFNpemVC
eShuc2Nvb3JkIGFMZWZ0LCBuc2Nvb3JkIGFUb3AsCiAgICAgICAgICAgICAgbnNjb29yZCBhUmln
aHQsIG5zY29vcmQgYUJvdHRvbSkge2xlZnQgKz0gYUxlZnQ7IHRvcCArPSBhVG9wOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodCArPSBhUmlnaHQ7
IGJvdHRvbSArPSBhQm90dG9tO30KCgoKICBQUkJvb2wgb3BlcmF0b3I9PShjb25zdCBuc01hcmdp
biYgYU1hcmdpbikgY29uc3QgewogICAgcmV0dXJuIChQUkJvb2wpICgobGVmdCA9PSBhTWFyZ2lu
LmxlZnQpICYmICh0b3AgPT0gYU1hcmdpbi50b3ApICYmCiAgICAgICAgICAgICAgICAgICAgIChy
aWdodCA9PSBhTWFyZ2luLnJpZ2h0KSAmJiAoYm90dG9tID09IGFNYXJnaW4uYm90dG9tKSk7CiAg
fQogIFBSQm9vbCBvcGVyYXRvciE9KGNvbnN0IG5zTWFyZ2luJiBhTWFyZ2luKSBjb25zdCB7CiAg
ICByZXR1cm4gKFBSQm9vbCkgKChsZWZ0ICE9IGFNYXJnaW4ubGVmdCkgfHwgKHRvcCAhPSBhTWFy
Z2luLnRvcCkgfHwKICAgICAgICAgICAgICAgICAgICAgKHJpZ2h0ICE9IGFNYXJnaW4ucmlnaHQp
IHx8IChib3R0b20gIT0gYU1hcmdpbi5ib3R0b20pKTsKICB9CiAgbnNNYXJnaW4gb3BlcmF0b3Ir
KGNvbnN0IG5zTWFyZ2luJiBhTWFyZ2luKSBjb25zdCB7CiAgICByZXR1cm4gbnNNYXJnaW4obGVm
dCArIGFNYXJnaW4ubGVmdCwgdG9wICsgYU1hcmdpbi50b3AsCiAgICAgICAgICAgICAgICAgICAg
cmlnaHQgKyBhTWFyZ2luLnJpZ2h0LCBib3R0b20gKyBhTWFyZ2luLmJvdHRvbSk7CiAgfQogIG5z
TWFyZ2luIG9wZXJhdG9yLShjb25zdCBuc01hcmdpbiYgYU1hcmdpbikgY29uc3QgewogICAgcmV0
dXJuIG5zTWFyZ2luKGxlZnQgLSBhTWFyZ2luLmxlZnQsIHRvcCAtIGFNYXJnaW4udG9wLAogICAg
ICAgICAgICAgICAgICAgIHJpZ2h0IC0gYU1hcmdpbi5yaWdodCwgYm90dG9tIC0gYU1hcmdpbi5i
b3R0b20pOwogIH0KICBuc01hcmdpbiYgb3BlcmF0b3IrPShjb25zdCBuc01hcmdpbiYgYU1hcmdp
bikge2xlZnQgKz0gYU1hcmdpbi5sZWZ0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9wICs9IGFNYXJnaW4udG9wOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgKz0gYU1hcmdpbi5yaWdodDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbSArPSBh
TWFyZ2luLmJvdHRvbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAqdGhpczt9CiAgbnNNYXJnaW4mIG9wZXJhdG9yLT0oY29uc3QgbnNNYXJn
aW4mIGFNYXJnaW4pIHtsZWZ0IC09IGFNYXJnaW4ubGVmdDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCAtPSBhTWFyZ2luLnRvcDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0IC09IGFNYXJnaW4u
cmlnaHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b3R0b20gLT0gYU1hcmdpbi5ib3R0b207CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7fQp9OwojIDQ0ICIuLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvY29udGVudC9uc1N0eWxlU3RydWN0LmgiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1
ZGUvZ2Z4L25zUmVjdC5oIiAxCiMgNDUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZngvbnNSZWN0
LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2dmeC9uc1BvaW50LmgiIDEKIyA0NCAiLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL2dmeC9uc1BvaW50LmgiCnN0cnVjdCBuc1BvaW50IHsKICBuc2Nv
b3JkIHgsIHk7CgoKICBuc1BvaW50KCkge30KICBuc1BvaW50KGNvbnN0IG5zUG9pbnQmIGFQb2lu
dCkge3ggPSBhUG9pbnQueDsgeSA9IGFQb2ludC55O30KICBuc1BvaW50KG5zY29vcmQgYVgsIG5z
Y29vcmQgYVkpIHt4ID0gYVg7IHkgPSBhWTt9CgogIHZvaWQgTW92ZVRvKG5zY29vcmQgYVgsIG5z
Y29vcmQgYVkpIHt4ID0gYVg7IHkgPSBhWTt9CiAgdm9pZCBNb3ZlQnkobnNjb29yZCBhRHgsIG5z
Y29vcmQgYUR5KSB7eCArPSBhRHg7IHkgKz0gYUR5O30KCgoKICBQUkJvb2wgb3BlcmF0b3I9PShj
b25zdCBuc1BvaW50JiBhUG9pbnQpIGNvbnN0IHsKICAgIHJldHVybiAoUFJCb29sKSAoKHggPT0g
YVBvaW50LngpICYmICh5ID09IGFQb2ludC55KSk7CiAgfQogIFBSQm9vbCBvcGVyYXRvciE9KGNv
bnN0IG5zUG9pbnQmIGFQb2ludCkgY29uc3QgewogICAgcmV0dXJuIChQUkJvb2wpICgoeCAhPSBh
UG9pbnQueCkgfHwgKHkgIT0gYVBvaW50LnkpKTsKICB9CiAgbnNQb2ludCBvcGVyYXRvcisoY29u
c3QgbnNQb2ludCYgYVBvaW50KSBjb25zdCB7CiAgICByZXR1cm4gbnNQb2ludCh4ICsgYVBvaW50
LngsIHkgKyBhUG9pbnQueSk7CiAgfQogIG5zUG9pbnQgb3BlcmF0b3ItKGNvbnN0IG5zUG9pbnQm
IGFQb2ludCkgY29uc3QgewogICAgcmV0dXJuIG5zUG9pbnQoeCAtIGFQb2ludC54LCB5IC0gYVBv
aW50LnkpOwogIH0KICBuc1BvaW50JiBvcGVyYXRvcis9KGNvbnN0IG5zUG9pbnQmIGFQb2ludCkg
ewogICAgeCArPSBhUG9pbnQueDsKICAgIHkgKz0gYVBvaW50Lnk7CiAgICByZXR1cm4gKnRoaXM7
CiAgfQogIG5zUG9pbnQmIG9wZXJhdG9yLT0oY29uc3QgbnNQb2ludCYgYVBvaW50KSB7CiAgICB4
IC09IGFQb2ludC54OwogICAgeSAtPSBhUG9pbnQueTsKICAgIHJldHVybiAqdGhpczsKICB9Cn07
CgoKCgoKc3RydWN0IG5zRmxvYXRQb2ludCB7CiAgZmxvYXQgeCwgeTsKCgogIG5zRmxvYXRQb2lu
dCgpIHt9CiAgbnNGbG9hdFBvaW50KGNvbnN0IG5zRmxvYXRQb2ludCYgYVBvaW50KSB7eCA9IGFQ
b2ludC54OyB5ID0gYVBvaW50Lnk7fQogIG5zRmxvYXRQb2ludChmbG9hdCBhWCwgZmxvYXQgYVkp
IHt4ID0gYVg7IHkgPSBhWTt9CgogIHZvaWQgTW92ZVRvKGZsb2F0IGFYLCBmbG9hdCBhWSkge3gg
PSBhWDsgeSA9IGFZO30KICB2b2lkIE1vdmVUbyhuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZKSB7eCA9
IChmbG9hdClhWDsgeSA9IChmbG9hdClhWTt9CiAgdm9pZCBNb3ZlQnkoZmxvYXQgYUR4LCBmbG9h
dCBhRHkpIHt4ICs9IGFEeDsgeSArPSBhRHk7fQoKCgogIFBSQm9vbCBvcGVyYXRvcj09KGNvbnN0
IG5zRmxvYXRQb2ludCYgYVBvaW50KSBjb25zdCB7CiAgICByZXR1cm4gKFBSQm9vbCkgKCh4ID09
IGFQb2ludC54KSAmJiAoeSA9PSBhUG9pbnQueSkpOwogIH0KICBQUkJvb2wgb3BlcmF0b3IhPShj
b25zdCBuc0Zsb2F0UG9pbnQmIGFQb2ludCkgY29uc3QgewogICAgcmV0dXJuIChQUkJvb2wpICgo
eCAhPSBhUG9pbnQueCkgfHwgKHkgIT0gYVBvaW50LnkpKTsKICB9CiAgbnNGbG9hdFBvaW50IG9w
ZXJhdG9yKyhjb25zdCBuc0Zsb2F0UG9pbnQmIGFQb2ludCkgY29uc3QgewogICAgcmV0dXJuIG5z
RmxvYXRQb2ludCh4ICsgYVBvaW50LngsIHkgKyBhUG9pbnQueSk7CiAgfQogIG5zRmxvYXRQb2lu
dCBvcGVyYXRvci0oY29uc3QgbnNGbG9hdFBvaW50JiBhUG9pbnQpIGNvbnN0IHsKICAgIHJldHVy
biBuc0Zsb2F0UG9pbnQoeCAtIGFQb2ludC54LCB5IC0gYVBvaW50LnkpOwogIH0KICBuc0Zsb2F0
UG9pbnQmIG9wZXJhdG9yKz0oY29uc3QgbnNGbG9hdFBvaW50JiBhUG9pbnQpIHsKICAgIHggKz0g
YVBvaW50Lng7CiAgICB5ICs9IGFQb2ludC55OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBuc0Zs
b2F0UG9pbnQmIG9wZXJhdG9yLT0oY29uc3QgbnNGbG9hdFBvaW50JiBhUG9pbnQpIHsKICAgIHgg
LT0gYVBvaW50Lng7CiAgICB5IC09IGFQb2ludC55OwogICAgcmV0dXJuICp0aGlzOwogIH0KfTsK
CgoKCgoKc3RydWN0IG5zUGF0aFBvaW50OiBwdWJsaWMgbnNGbG9hdFBvaW50ewoKICBQUkJvb2wg
bUlzT25DdXJ2ZTsKCgogIG5zUGF0aFBvaW50KCkge30KICBuc1BhdGhQb2ludChjb25zdCBuc1Bh
dGhQb2ludCYgYVBvaW50KSB7eCA9IGFQb2ludC54OyB5ID0gYVBvaW50Lnk7bUlzT25DdXJ2ZT1h
UG9pbnQubUlzT25DdXJ2ZTt9CiAgbnNQYXRoUG9pbnQoZmxvYXQgYVgsIGZsb2F0IGFZKSB7eCA9
IGFYOyB5ID0gYVk7bUlzT25DdXJ2ZT0xO30KICBuc1BhdGhQb2ludChmbG9hdCBhWCwgZmxvYXQg
YVksUFJCb29sIGFJc09uQ3VydmUpIHt4ID0gYVg7IHkgPSBhWTttSXNPbkN1cnZlPWFJc09uQ3Vy
dmU7fQoKfTsKIyA0NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2dmeC9uc1JlY3QuaCIgMgojIDEg
Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZngvbnNTaXplLmgiIDEKIyA0NyAiLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL2dmeC9uc1NpemUuaCIKc3RydWN0IG5zU2l6ZSB7CiAgbnNjb29yZCB3aWR0aCwg
aGVpZ2h0OwoKCiAgbnNTaXplKCkge30KICBuc1NpemUoY29uc3QgbnNTaXplJiBhU2l6ZSkge3dp
ZHRoID0gYVNpemUud2lkdGg7IGhlaWdodCA9IGFTaXplLmhlaWdodDt9CiAgbnNTaXplKG5zY29v
cmQgYVdpZHRoLCBuc2Nvb3JkIGFIZWlnaHQpIHt3aWR0aCA9IGFXaWR0aDsgaGVpZ2h0ID0gYUhl
aWdodDt9CgogIHZvaWQgU2l6ZVRvKG5zY29vcmQgYVdpZHRoLCBuc2Nvb3JkIGFIZWlnaHQpIHt3
aWR0aCA9IGFXaWR0aDsgaGVpZ2h0ID0gYUhlaWdodDt9CiAgdm9pZCBTaXplQnkobnNjb29yZCBh
RGVsdGFXaWR0aCwgbnNjb29yZCBhRGVsdGFIZWlnaHQpIHt3aWR0aCArPSBhRGVsdGFXaWR0aDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhlaWdodCArPSBhRGVsdGFIZWlnaHQ7fQoKCgogIFBSQm9vbCBvcGVyYXRvcj09KGNvbnN0IG5z
U2l6ZSYgYVNpemUpIGNvbnN0IHsKICAgIHJldHVybiAoUFJCb29sKSAoKHdpZHRoID09IGFTaXpl
LndpZHRoKSAmJiAoaGVpZ2h0ID09IGFTaXplLmhlaWdodCkpOwogIH0KICBQUkJvb2wgb3BlcmF0
b3IhPShjb25zdCBuc1NpemUmIGFTaXplKSBjb25zdCB7CiAgICByZXR1cm4gKFBSQm9vbCkgKCh3
aWR0aCAhPSBhU2l6ZS53aWR0aCkgfHwgKGhlaWdodCAhPSBhU2l6ZS5oZWlnaHQpKTsKICB9CiAg
bnNTaXplIG9wZXJhdG9yKyhjb25zdCBuc1NpemUmIGFTaXplKSBjb25zdCB7CiAgICByZXR1cm4g
bnNTaXplKHdpZHRoICsgYVNpemUud2lkdGgsIGhlaWdodCArIGFTaXplLmhlaWdodCk7CiAgfQog
IG5zU2l6ZSBvcGVyYXRvci0oY29uc3QgbnNTaXplJiBhU2l6ZSkgY29uc3QgewogICAgcmV0dXJu
IG5zU2l6ZSh3aWR0aCAtIGFTaXplLndpZHRoLCBoZWlnaHQgLSBhU2l6ZS5oZWlnaHQpOwogIH0K
ICBuc1NpemUmIG9wZXJhdG9yKz0oY29uc3QgbnNTaXplJiBhU2l6ZSkge3dpZHRoICs9IGFTaXpl
LndpZHRoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0
ICs9IGFTaXplLmhlaWdodDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAqdGhpczt9CiAgbnNTaXplJiBvcGVyYXRvci09KGNvbnN0IG5zU2l6ZSYgYVNp
emUpIHt3aWR0aCAtPSBhU2l6ZS53aWR0aDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhlaWdodCAtPSBhU2l6ZS5oZWlnaHQ7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7fQp9OwojIDQ3ICIuLi8uLi8uLi9k
aXN0L2luY2x1ZGUvZ2Z4L25zUmVjdC5oIiAyCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94
cGNvbS9uc1VuaXRDb252ZXJzaW9uLmgiIDEKIyA0MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hw
Y29tL25zVW5pdENvbnZlcnNpb24uaCIKIyAxICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAxIDMKIyAy
OSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpleHRlcm4gIkMiIHsKCgoKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy9odWdlX3ZhbC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoK
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbmFuLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvbWF0
aC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMSAzCiMgMjkgIi91
c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMwp0eXBlZGVmIGxvbmcgZG91YmxlIGZsb2F0X3Q7
Cgp0eXBlZGVmIGxvbmcgZG91YmxlIGRvdWJsZV90OwojIDQxICIvdXNyL2luY2x1ZGUvbWF0aC5o
IiAyIDMKIyA2NSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRz
L21hdGhjYWxscy5oIiAxIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMK
CgpleHRlcm4gZG91YmxlIGFjb3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fYWNvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGFzaW4gKGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXNpbiAoZG91YmxlIF9feCkgdGhyb3cg
KCk7CgpleHRlcm4gZG91YmxlIGF0YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91
YmxlIF9fYXRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGF0YW4yIChk
b3VibGUgX195LCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4yIChk
b3VibGUgX195LCBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGNvcyAoZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19jb3MgKGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKZXh0ZXJuIGRvdWJsZSBzaW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91
YmxlIF9fc2luIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgdGFuIChkb3Vi
bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3RhbiAoZG91YmxlIF9feCkgdGhyb3cg
KCk7CgoKCgpleHRlcm4gZG91YmxlIGNvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g
ZG91YmxlIF9fY29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHNpbmgg
KGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2luaCAoZG91YmxlIF9feCkg
dGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHRhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gZG91YmxlIF9fdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBz
aW5jb3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19zaW54LCBkb3VibGUgKl9fY29zeCkgdGhyb3cg
KCk7IGV4dGVybiB2b2lkIF9fc2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91
YmxlICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIGFjb3NoIChkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Fjb3NoIChkb3VibGUgX194KSB0aHJvdyAo
KTsKCmV4dGVybiBkb3VibGUgYXNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91
YmxlIF9fYXNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhdGFuaCAo
ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFuaCAoZG91YmxlIF9feCkg
dGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gZG91YmxlIGV4cCAoZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19leHAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3Vi
bGUgZnJleHAgKGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX19mcmV4cCAoZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpl
eHRlcm4gZG91YmxlIGxkZXhwIChkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19sZGV4cCAoZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93
ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX2xvZyAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxMCAo
ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cxMCAoZG91YmxlIF9feCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBtb2RmIChkb3VibGUgX194LCBkb3VibGUgKl9faXB0
cikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19tb2RmIChkb3VibGUgX194LCBkb3VibGUgKl9f
aXB0cikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGV4cDEwIChkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cDEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVy
biBkb3VibGUgcG93MTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcG93
MTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgZXhwbTEgKGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXhwbTEgKGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nMXAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g
ZG91YmxlIF9fbG9nMXAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9n
YiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2diIChkb3VibGUgX194
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBleHAyIChkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX2V4cDIgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBk
b3VibGUgbG9nMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cyIChk
b3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gZG91YmxlIHBvdyAoZG91YmxlIF9f
eCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19wb3cgKGRvdWJsZSBfX3gs
IGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgc3FydCAoZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zcXJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gZG91YmxlIGh5cG90IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsg
ZXh0ZXJuIGRvdWJsZSBfX2h5cG90IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIGRvdWJsZSBjYnJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX2NicnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBkb3VibGUg
Y2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBl
eHRlcm4gZG91YmxlIF9fY2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZmFicyAoZG91YmxlIF9feCkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fZmFicyAoZG91Ymxl
IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3Vi
bGUgZmxvb3IgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsgZXh0ZXJuIGRvdWJsZSBfX2Zsb29yIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBmbW9kIChkb3VibGUgX194LCBkb3Vi
bGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Ztb2QgKGRvdWJsZSBfX3gsIGRvdWJs
ZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mIChkb3VibGUgX192YWx1ZSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5p
dGUgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKCgoKZXh0ZXJuIGludCBpc2luZiAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZSAoZG91YmxlIF9fdmFsdWUp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGRy
ZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZHJl
bSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgc2ln
bmlmaWNhbmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2lnbmlmaWNh
bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgY29weXNpZ24gKGRv
dWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsgZXh0ZXJuIGRvdWJsZSBfX2NvcHlzaWduIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCmV4dGVybiBkb3VibGUgbmFu
IChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOyBleHRlcm4gZG91YmxlIF9fbmFuIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVybiBpbnQgX19pc25hbiAoZG91
YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0
ZXJuIGludCBpc25hbiAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGowIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4g
ZG91YmxlIF9fajAgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgajEgKGRvdWJsZSkg
dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19qMSAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRv
dWJsZSBqbiAoaW50LCBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fam4gKGludCwg
ZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5MCAoZG91YmxlKSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX3kwIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIHkxIChkb3Vi
bGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9feTEgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVy
biBkb3VibGUgeW4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3luIChp
bnQsIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgZXJmIChkb3VibGUpIHRo
cm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXJmIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91
YmxlIGVyZmMgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19lcmZjIChkb3VibGUp
IHRocm93ICgpOwpleHRlcm4gZG91YmxlIGxnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX2xnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSB0
Z2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX190Z2FtbWEgKGRvdWJsZSkg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX2dhbW1hIChkb3VibGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91Ymxl
IGxnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX19sZ2FtbWFfciAoZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOwoKCgoKCgoK
ZXh0ZXJuIGRvdWJsZSByaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X3JpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbmV4dGFmdGVyIChk
b3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7IGV4dGVybiBkb3VibGUgX19uZXh0YWZ0ZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBkb3VibGUgbmV4dHRv
d2FyZCAoZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uZXh0dG93YXJkIChkb3VibGUgX194LCBs
b25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK
ZXh0ZXJuIGRvdWJsZSByZW1haW5kZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgp
OyBleHRlcm4gZG91YmxlIF9fcmVtYWluZGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYm4gKGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93
ICgpOyBleHRlcm4gZG91YmxlIF9fc2NhbGJuIChkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCBpbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQg
X19pbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxibG4g
KGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zY2Fs
YmxuIChkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gZG91Ymxl
IG5lYXJieWludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19uZWFyYnlp
bnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHJvdW5kIChkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JvdW5kIChkb3VibGUgX194KSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGRvdWJsZSB0cnVuYyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fdHJ1bmMgKGRvdWJsZSBfX3gpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBkb3VibGUgcmVt
cXVvIChkb3VibGUgX194LCBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX3JlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhy
b3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGludCBfX2xyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxv
bmcgbG9uZyBpbnQgbGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9u
ZyBpbnQgX19sbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQg
bHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kIChk
b3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZCAoZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZCAoZG91YmxlIF9f
eCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgZmRpbSAoZG91YmxlIF9feCwgZG91YmxlIF9f
eSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mZGltIChkb3VibGUgX194LCBkb3VibGUgX195
KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGZtYXggKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kp
IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1heCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbWluIChkb3VibGUgX194LCBkb3VibGUgX195KSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtaW4gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRo
cm93ICgpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeSAoZG91YmxlIF9fdmFsdWUpIHRocm93
ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWdu
Yml0IChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgoKCmV4dGVybiBkb3VibGUgZm1hIChkb3VibGUgX194LCBkb3VibGUgX195LCBkb3Vi
bGUgX196KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtYSAoZG91YmxlIF9feCwgZG91Ymxl
IF9feSwgZG91YmxlIF9feikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxiIChkb3Vi
bGUgX194LCBkb3VibGUgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxiIChkb3Vi
bGUgX194LCBkb3VibGUgX19uKSB0aHJvdyAoKTsKIyA2NiAiL3Vzci9pbmNsdWRlL21hdGguaCIg
MiAzCiMgODggIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9t
YXRoY2FsbHMuaCIgMSAzCiMgNTMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCgoK
ZXh0ZXJuIGZsb2F0IGFjb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19h
Y29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhc2luZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXNpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7Cgpl
eHRlcm4gZmxvYXQgYXRhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0
YW5mIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGF0YW4yZiAoZmxvYXQgX195
LCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hdGFuMmYgKGZsb2F0IF9feSwg
ZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgY29zZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fY29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBm
bG9hdCBzaW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zaW5mIChmbG9h
dCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHRhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
IGV4dGVybiBmbG9hdCBfX3RhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxv
YXQgY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Nvc2hmIChmbG9h
dCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgp
OyBleHRlcm4gZmxvYXQgX19zaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9h
dCB0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGFuaGYgKGZsb2F0
IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBzaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0
ICpfX3NpbngsIGZsb2F0ICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvc2Yg
KGZsb2F0IF9feCwgZmxvYXQgKl9fc2lueCwgZmxvYXQgKl9fY29zeCkgdGhyb3cgKCk7CgoKCgoK
CmV4dGVybiBmbG9hdCBhY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf
X2Fjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhc2luaGYgKGZsb2F0
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2FzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAo
KTsKCmV4dGVybiBmbG9hdCBhdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX2F0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBmbG9hdCBleHBm
IChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHBmIChmbG9hdCBfX3gpIHRo
cm93ICgpOwoKCmV4dGVybiBmbG9hdCBmcmV4cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9uZW50
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZnJleHBmIChmbG9hdCBfX3gsIGludCAqX19leHBv
bmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxkZXhwZiAoZmxvYXQgX194LCBpbnQgX19l
eHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xkZXhwZiAoZmxvYXQgX194LCBpbnQg
X19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZ2YgKGZsb2F0IF9feCkgdGhy
b3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZ2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGZsb2F0IGxvZzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMTBm
IChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBtb2RmZiAoZmxvYXQgX194LCBm
bG9hdCAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbW9kZmYgKGZsb2F0IF9feCwg
ZmxvYXQgKl9faXB0cikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgZXhwMTBmIChmbG9hdCBf
X3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHAxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
CgpleHRlcm4gZmxvYXQgcG93MTBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19wb3cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGV4cG0xZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwbTFmIChmbG9hdCBfX3gpIHRo
cm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cxcGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVy
biBmbG9hdCBfX2xvZzFwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9n
YmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZ2JmIChmbG9hdCBfX3gp
IHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgZXhwMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
IGV4dGVybiBmbG9hdCBfX2V4cDJmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9h
dCBsb2cyZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMmYgKGZsb2F0
IF9feCkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGZsb2F0IHBvd2YgKGZsb2F0IF9feCwgZmxv
YXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcG93ZiAoZmxvYXQgX194LCBmbG9hdCBf
X3kpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBzcXJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGZsb2F0IF9fc3FydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGZs
b2F0IGh5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19oeXBvdGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZs
b2F0IGNicnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jYnJ0ZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gZmxvYXQgY2VpbGYgKGZsb2F0IF9feCkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19jZWls
ZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0
ZXJuIGZsb2F0IGZhYnNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fZmFic2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBmbG9vcmYgKGZsb2F0IF9feCkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19mbG9v
cmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4
dGVybiBmbG9hdCBmbW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4g
ZmxvYXQgX19mbW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGludCBfX2lzaW5mZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGVmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBpc2luZmYgKGZs
b2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRl
cm4gaW50IGZpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0
aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHNpZ25pZmljYW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGZsb2F0IF9fc2lnbmlmaWNhbmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCmV4
dGVybiBmbG9hdCBjb3B5c2lnbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2NvcHlzaWduZiAoZmxvYXQg
X194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK
CgoKZXh0ZXJuIGZsb2F0IG5hbmYgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25hbmYgKF9fY29uc3QgY2hh
ciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0
ZXJuIGludCBfX2lzbmFuZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKCgpleHRlcm4gaW50IGlzbmFuZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBqMGYgKGZsb2F0
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fajBmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBm
bG9hdCBqMWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fajFmIChmbG9hdCkgdGhy
b3cgKCk7CmV4dGVybiBmbG9hdCBqbmYgKGludCwgZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxv
YXQgX19qbmYgKGludCwgZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgeTBmIChmbG9hdCkg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3kwZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxv
YXQgeTFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3kxZiAoZmxvYXQpIHRocm93
ICgpOwpleHRlcm4gZmxvYXQgeW5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0
IF9feW5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGVyZmYgKGZs
b2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXJmZiAoZmxvYXQpIHRocm93ICgpOwpleHRl
cm4gZmxvYXQgZXJmY2YgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXJmY2YgKGZs
b2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGxnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0
ZXJuIGZsb2F0IF9fbGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQg
dGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX190Z2FtbWFmIChmbG9hdCkg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX19nYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGxn
YW1tYWZfciAoZmxvYXQsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf
X2xnYW1tYWZfciAoZmxvYXQsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCgpleHRl
cm4gZmxvYXQgcmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JpbnRm
IChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBuZXh0YWZ0ZXJmIChmbG9hdCBf
X3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRl
cm4gZmxvYXQgX19uZXh0YWZ0ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGZsb2F0IG5leHR0b3dhcmRmIChmbG9h
dCBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOyBleHRlcm4gZmxvYXQgX19uZXh0dG93YXJkZiAoZmxvYXQgX194LCBsb25nIGRvdWJsZSBf
X3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGZsb2F0
IHJlbWFpbmRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0
IF9fcmVtYWluZGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4g
ZmxvYXQgc2NhbGJuZiAoZmxvYXQgX194LCBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0
IF9fc2NhbGJuZiAoZmxvYXQgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBp
bG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9nYmYgKGZsb2F0IF9f
eCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBp
bnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9u
ZyBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IG5lYXJieWludGYgKGZsb2F0IF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX25lYXJieWludGYgKGZsb2F0IF9feCkgdGhyb3cg
KCk7CgoKCmV4dGVybiBmbG9hdCByb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBm
bG9hdCBfX3JvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHRydW5j
ZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVy
biBmbG9hdCBfX3RydW5jZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKCgpleHRlcm4gZmxvYXQgcmVtcXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ks
IGludCAqX19xdW8pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yZW1xdW9mIChmbG9hdCBfX3gs
IGZsb2F0IF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBs
cmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyaW50ZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50ZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRmIChmbG9hdCBfX3gpIHRo
cm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQgbHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxv
bmcgbG9uZyBpbnQgbGxyb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxv
bmcgaW50IF9fbGxyb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBm
ZGltZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mZGlt
ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBmbWF4ZiAo
ZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbWF4ZiAoZmxv
YXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBmbWluZiAoZmxvYXQg
X194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbWluZiAoZmxvYXQgX194
LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeWYgKGZsb2F0
IF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4
dGVybiBpbnQgX19zaWduYml0ZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBmbG9hdCBmbWFmIChmbG9hdCBfX3gsIGZs
b2F0IF9feSwgZmxvYXQgX196KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZm1hZiAoZmxvYXQg
X194LCBmbG9hdCBfX3ksIGZsb2F0IF9feikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc2Nh
bGJmIChmbG9hdCBfX3gsIGZsb2F0IF9fbikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NjYWxi
ZiAoZmxvYXQgX194LCBmbG9hdCBfX24pIHRocm93ICgpOwojIDg5ICIvdXNyL2luY2x1ZGUvbWF0
aC5oIiAyIDMKIyAxMDkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5o
IiAzCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19hY29zbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK
CmV4dGVybiBsb25nIGRvdWJsZSBhc2lubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRl
cm4gbG9uZyBkb3VibGUgYXRhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX2F0YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxv
bmcgZG91YmxlIGF0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgY29zbCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zbCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBzaW5sIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zaW5sIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
ZXh0ZXJuIGxvbmcgZG91YmxlIHNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19zaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVy
biBsb25nIGRvdWJsZSB0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
dm9pZCBzaW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX3NpbngsIGxvbmcg
ZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvc2wgKGxvbmcgZG91
YmxlIF9feCwgbG9uZyBkb3VibGUgKl9fc2lueCwgbG9uZyBkb3VibGUgKl9fY29zeCkgdGhyb3cg
KCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBhY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhc2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK
CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
CmV4dGVybiBsb25nIGRvdWJsZSBmcmV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50ICpfX2V4cG9u
ZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZnJleHBsIChsb25nIGRvdWJsZSBf
X3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxkZXhw
bCAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX2xkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fbG9nMTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4
dGVybiBsb25nIGRvdWJsZSBtb2RmbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19p
cHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbW9kZmwgKGxvbmcgZG91YmxlIF9f
eCwgbG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUg
ZXhwMTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19l
eHAxMGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgcG93
MTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19wb3cx
MGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4
cG0xbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhw
bTFsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cx
cGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzFw
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nYmwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2JsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwMmwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cDJsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cybCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMmwgKGxvbmcg
ZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHBvd2wgKGxv
bmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fcG93bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoK
CmV4dGVybiBsb25nIGRvdWJsZSBzcXJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fc3FydGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIGh5cG90bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf
X3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19oeXBvdGwgKGxvbmcgZG91YmxlIF9f
eCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNi
cnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jYnJ0
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUg
Y2VpbGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jZWlsbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZhYnNs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmFic2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbG9vcmwgKGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19mbG9vcmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbW9kbCAobG9uZyBk
b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19mbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGludCBfX2lzaW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGVsIChsb25nIGRvdWJs
ZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0
ZXJuIGludCBpc2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZWwgKGxvbmcgZG91YmxlIF9fdmFs
dWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBk
b3VibGUgZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg
X195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpZ25pZmljYW5kbCAobG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2lnbmlmaWNhbmRsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3B5c2ln
bmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NvcHlzaWdubCAobG9uZyBk
b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5hbmwgKF9fY29uc3QgY2hhciAqX190
YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX25hbmwgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBfX2lzbmFubCAobG9uZyBkb3VibGUgX192
YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gaW50
IGlzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBqMGwgKGxvbmcgZG91YmxlKSB0aHJvdyAo
KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajBsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVy
biBsb25nIGRvdWJsZSBqMWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fajFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBqbmwg
KGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qbmwgKGlu
dCwgbG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeTBsIChsb25nIGRv
dWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kwbCAobG9uZyBkb3VibGUpIHRo
cm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeTFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX3kxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9u
ZyBkb3VibGUgeW5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9feW5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcg
ZG91YmxlIGVyZmwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
ZXJmbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgZXJmY2wgKGxv
bmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXJmY2wgKGxvbmcgZG91
YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGxnYW1tYWwgKGxvbmcgZG91YmxlKSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93
ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgdGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93
ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190Z2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19nYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIGxnYW1tYWxfciAobG9uZyBkb3VibGUsIGludCAqX19zaWduZ2Ft
cCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWxfciAobG9uZyBkb3VibGUs
IGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmlu
dGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JpbnRs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0YWZ0
ZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0YWZ0ZXJsIChsb25n
IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIG5leHR0b3dhcmRsIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0dG93YXJkbCAobG9uZyBkb3VibGUgX194LCBsb25n
IGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0
ZXJuIGxvbmcgZG91YmxlIHJlbWFpbmRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg
X195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtYWluZGVybCAobG9uZyBkb3Vi
bGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUg
c2NhbGJubCAobG9uZyBkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fc2NhbGJubCAobG9uZyBkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGludCBpbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQg
X19pbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3Vi
bGUgc2NhbGJsbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJsbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19u
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5lYXJieWludGwgKGxvbmcgZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX25lYXJieWludGwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSByb3VuZGwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JvdW5kbCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHRydW5jbCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX3RydW5jbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmVtcXVvbCAobG9uZyBkb3Vi
bGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19yZW1xdW9sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgaW50
ICpfX3F1bykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludGwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyaW50bCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50bCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQgbHJvdW5kbCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kbCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZGwgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZGwgKGxvbmcgZG91Ymxl
IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBmZGltbCAobG9uZyBkb3VibGUg
X194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mZGlt
bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBs
b25nIGRvdWJsZSBmbWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93
ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv
dWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbWlubCAobG9uZyBkb3Vi
bGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19m
bWlubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IF9fZnBjbGFzc2lmeWwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0bCAobG9u
ZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBmbWFsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91
YmxlIF9feSwgbG9uZyBkb3VibGUgX196KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
Zm1hbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feikg
dGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJsIChsb25nIGRvdWJsZSBfX3gs
IGxvbmcgZG91YmxlIF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibCAo
bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIHRocm93ICgpOwojIDExMCAiL3Vzci9p
bmNsdWRlL21hdGguaCIgMiAzCiMgMTI1ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCmV4dGVybiBp
bnQgc2lnbmdhbTsKIyAxNjYgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZW51bQogIHsKICAgIEZQ
X05BTiwKCiAgICBGUF9JTkZJTklURSwKCiAgICBGUF9aRVJPLAoKICAgIEZQX1NVQk5PUk1BTCwK
CiAgICBGUF9OT1JNQUwKCiAgfTsKIyAyNTIgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKdHlwZWRl
ZiBlbnVtCnsKICBfSUVFRV8gPSAtMSwKICBfU1ZJRF8sCiAgX1hPUEVOXywKICBfUE9TSVhfLAog
IF9JU09DXwp9IF9MSUJfVkVSU0lPTl9UWVBFOwoKCgoKZXh0ZXJuIF9MSUJfVkVSU0lPTl9UWVBF
IF9MSUJfVkVSU0lPTjsKIyAyNzUgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKc3RydWN0IF9fZXhj
ZXB0aW9uCgoKCiAgewogICAgaW50IHR5cGU7CiAgICBjaGFyICpuYW1lOwogICAgZG91YmxlIGFy
ZzE7CiAgICBkb3VibGUgYXJnMjsKICAgIGRvdWJsZSByZXR2YWw7CiAgfTsKCgpleHRlcm4gaW50
IG1hdGhlcnIgKHN0cnVjdCBfX2V4Y2VwdGlvbiAqX19leGMpIHRocm93ICgpOwojIDM2MiAiL3Vz
ci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIg
MSAzCiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgaW50
Cl9fc2lnbmJpdGYgKGZsb2F0IF9feCkgdGhyb3cgKCkKewogIF9fZXh0ZW5zaW9uX18gdW5pb24g
eyBmbG9hdCBfX2Y7IGludCBfX2k7IH0gX191ID0geyBfX2Y6IF9feCB9OwogIHJldHVybiBfX3Uu
X19pIDwgMDsKfQpfX2lubGluZSBpbnQKX19zaWduYml0IChkb3VibGUgX194KSB0aHJvdyAoKQp7
CiAgX19leHRlbnNpb25fXyB1bmlvbiB7IGRvdWJsZSBfX2Q7IGludCBfX2lbMl07IH0gX191ID0g
eyBfX2Q6IF9feCB9OwogIHJldHVybiBfX3UuX19pWzFdIDwgMDsKfQpfX2lubGluZSBpbnQKX19z
aWduYml0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgX19leHRlbnNpb25fXyB1bmlv
biB7IGxvbmcgZG91YmxlIF9fbDsgaW50IF9faVszXTsgfSBfX3UgPSB7IF9fbDogX194IH07CiAg
cmV0dXJuIChfX3UuX19pWzJdICYgMHg4MDAwKSAhPSAwOwp9CiMgMjkxICIvdXNyL2luY2x1ZGUv
Yml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgZG91YmxlIF9fc2duIChkb3VibGUpIHRocm93
ICgpOyBfX2lubGluZSBkb3VibGUgX19zZ24gKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJu
IF9feCA9PSAwLjAgPyAwLjAgOiAoX194ID4gMC4wID8gMS4wIDogLTEuMCk7IH0gX19pbmxpbmUg
ZmxvYXQgX19zZ25mIChmbG9hdCkgdGhyb3cgKCk7IF9faW5saW5lIGZsb2F0IF9fc2duZiAoZmxv
YXQgX194KSB0aHJvdyAoKSB7IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9feCA+IDAuMCA/
IDEuMCA6IC0xLjApOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2dubCAobG9uZyBkb3VibGUp
IHRocm93ICgpOyBfX2lubGluZSBsb25nIGRvdWJsZSBfX3NnbmwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCkgeyByZXR1cm4gX194ID09IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAgOiAt
MS4wKTsgfQojIDQyNSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5l
IGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3Rl
ciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10
IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192
YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBhdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KSB0aHJv
dyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAo
ImZwYXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEp
Iik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGF0YW4ybCAobG9uZyBk
b3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi
bGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUp
IDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KX19p
bmxpbmUgbG9uZyBkb3VibGUgX19hdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9s
YXRpbGVfXyAoImZwYXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kp
IDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9CgoKX19pbmxpbmUgZG91YmxlIGZtb2QgKGRv
dWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192
YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW1cblx0IiAiZm5zdHN3CSUlYXhcblx0
IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChf
X3kpIDogImF4IiwgImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGZtb2Rm
IChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBf
X3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbVxuXHQiICJmbnN0c3cJJSVheFxu
XHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIg
KF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3Vi
bGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJl
Z2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVt
XG5cdCIgImZuc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1
ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1ZTsg
fQojIDQ0MCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGRvdWJs
ZSBzcXJ0IChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3Jlc3VsdDsg
X19hc20gX192b2xhdGlsZV9fICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gp
KTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5saW5lIGZsb2F0IHNxcnRmIChmbG9hdCBfX3gpIHRo
cm93ICgpIHsgcmVnaXN0ZXIgZmxvYXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZz
cXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBf
X2lubGluZSBsb25nIGRvdWJsZSBzcXJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJl
Z2lzdGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIg
OiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KX19pbmxp
bmUgbG9uZyBkb3VibGUgX19zcXJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lz
dGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAi
PXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KCgpfX2lubGlu
ZSBkb3VibGUgZmFicyAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX19idWlsdGluX2Zh
YnMgKF9feCk7IH0KX19pbmxpbmUgZmxvYXQgZmFic2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyBy
ZXR1cm4gX19idWlsdGluX2ZhYnNmIChfX3gpOyB9Cl9faW5saW5lIGxvbmcgZG91YmxlIGZhYnNs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbCAoX194
KTsgfQpfX2lubGluZSBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbCAoX194KTsgfQojIDQ2NiAiL3Vzci9pbmNsdWRl
L2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5lIGRvdWJsZSBhdGFuIChkb3VibGUgX194KSB0
aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgi
ZmxkMTsgZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyBy
ZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgZmxvYXQgYXRhbmYgKGZsb2F0IF9feCkgdGhyb3cg
KCkgeyByZWdpc3RlciBmbG9hdCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsg
ZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4g
X19yZXN1bHQ7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgYXRhbmwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGls
ZV9fICgiZmxkMTsgZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgx
KSIpOyByZXR1cm4gX19yZXN1bHQ7IH0KCl9faW5saW5lIGxvbmcgZG91YmxlIF9fc2duMWwgKGxv
bmcgZG91YmxlKSB0aHJvdyAoKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ24xbCAobG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKSB7IF9fZXh0ZW5zaW9uX18gdW5pb24geyBsb25nIGRvdWJsZSBf
X3hsZDsgdW5zaWduZWQgaW50IF9feGlbM107IH0gX19uID0geyBfX3hsZDogX194IH07IF9fbi5f
X3hpWzJdID0gKF9fbi5fX3hpWzJdICYgMHg4MDAwKSB8IDB4M2ZmZjsgX19uLl9feGlbMV0gPSAw
eDgwMDAwMDAwOyBfX24uX194aVswXSA9IDA7IHJldHVybiBfX24uX194bGQ7IH0KIyA0OTIgIi91
c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgZmxvb3IgKGRv
dWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xh
dGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBp
bnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7
IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA0MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJm
bGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIg
OiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAl
MCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBmbG9v
cmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBf
X3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNo
b3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9f
Y3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDQwMDsgX19hc20gX192b2xhdGls
ZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5k
aW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZs
ZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcg
ZG91YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcg
ZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9s
YXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0
Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAw
OyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20g
X192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2Fz
bSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7
IH0KIyA1MDMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3Vi
bGUgY2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Zh
bHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2ln
bmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9
bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDgwMDsgX19hc20gX192
b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUg
KCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGls
ZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5l
IGZsb2F0IGNlaWxmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUg
X192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1
bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIg
OiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA4MDA7IF9fYXNt
IF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0
aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9s
YXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lu
bGluZSBsb25nIGRvdWJsZSBjZWlsbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lz
dGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9f
Y3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRp
bGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYp
IHwgMHgwODAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXAp
KTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9f
eCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJu
IF9fdmFsdWU7IH0KIyA1MjEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lu
bGluZSBkb3VibGUKbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX3kpIHRocm93ICgpCnsKICByZWdp
c3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDog
Ij10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0
dXJuIF9fdmFsdWU7Cn0KIyA1MzkgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpf
X2lubGluZSBkb3VibGUgbG9nMXAgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9u
ZyBkb3VibGUgX192YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQy
MTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNt
IF9fdm9sYXRpbGVfXyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAo
X192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxp
bmUgZmxvYXQgbG9nMXBmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi
bGUgX192YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIz
NzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9s
YXRpbGVfXyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1
ZSkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9u
ZyBkb3VibGUgbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9u
ZyBkb3VibGUgX192YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQy
MTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNt
IF9fdm9sYXRpbGVfXyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAo
X192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1NTMg
Ii91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpfX2lubGluZSBkb3VibGUgYXNpbmgg
KGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJz
bCAoX194KTsgcmV0dXJuIChsb2cxcGwgKF9feSAqIF9feSAvIChfX3NxcnRsIChfX3kgKiBfX3kg
KyAxLjApICsgMS4wKSArIF9feSkgKiBfX3NnbjFsIChfX3gpKTsgfSBfX2lubGluZSBmbG9hdCBh
c2luaGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBf
X2ZhYnNsIChfX3gpOyByZXR1cm4gKGxvZzFwbCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAq
IF9feSArIDEuMCkgKyAxLjApICsgX195KSAqIF9fc2duMWwgKF9feCkpOyB9IF9faW5saW5lIGxv
bmcgZG91YmxlIGFzaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxv
bmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAobG9nMXBsIChfX3kgKiBfX3kg
LyAoX19zcXJ0bCAoX195ICogX195ICsgMS4wKSArIDEuMCkgKyBfX3kpICogX19zZ24xbCAoX194
KSk7IH0KCgoKCl9faW5saW5lIGRvdWJsZSBhY29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyBy
ZXR1cm4gbG9nbCAoX194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEu
MCkpOyB9IF9faW5saW5lIGZsb2F0IGFjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJldHVy
biBsb2dsIChfX3ggKyBfX3NxcnRsIChfX3ggLSAxLjApICogX19zcXJ0bCAoX194ICsgMS4wKSk7
IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
IHsgcmV0dXJuIGxvZ2wgKF9feCArIF9fc3FydGwgKF9feCAtIDEuMCkgKiBfX3NxcnRsIChfX3gg
KyAxLjApKTsgfQoKCl9faW5saW5lIGRvdWJsZSBhdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCkg
eyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAq
IGxvZzFwbCAoLShfX3kgKyBfX3kpIC8gKDEuMCArIF9feSkpICogX19zZ24xbCAoX194KTsgfSBf
X2lubGluZSBmbG9hdCBhdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25n
IGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAqIGxvZzFwbCAoLShfX3kg
KyBfX3kpIC8gKDEuMCArIF9feSkpICogX19zZ24xbCAoX194KTsgfSBfX2lubGluZSBsb25nIGRv
dWJsZSBhdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRv
dWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gLTAuNSAqIGxvZzFwbCAoLShfX3kgKyBf
X3kpIC8gKDEuMCArIF9feSkpICogX19zZ24xbCAoX194KTsgfQoKCgoKX19pbmxpbmUgZG91Ymxl
IGh5cG90IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJldHVybiBfX3NxcnRs
IChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpOyB9IF9faW5saW5lIGZsb2F0IGh5cG90ZiAoZmxvYXQg
X194LCBmbG9hdCBfX3kpIHRocm93ICgpIHsgcmV0dXJuIF9fc3FydGwgKF9feCAqIF9feCArIF9f
eSAqIF9feSk7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgaHlwb3RsIChsb25nIGRvdWJsZSBfX3gs
IGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgeyByZXR1cm4gX19zcXJ0bCAoX194ICogX194ICsg
X195ICogX195KTsgfQoKX19pbmxpbmUgZG91YmxlIGxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgp
IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19q
dW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1bmspLCAi
PXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZs
b2F0IGxvZ2JmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192
YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJm
eHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7
IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGxvZ2JsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIg
bG9uZyBkb3VibGUgX19qdW5rOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAi
PXQiIChfX2p1bmspLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVl
OyB9CiMgNTgzICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgZmxv
YXQKbGRleHBmIChmbG9hdCBfX3gsIGludCBfX3kpIHRocm93ICgpCnsKICByZWdpc3RlciBsb25n
IGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192
YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoKGxvbmcgZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFs
dWU7Cn0KCl9faW5saW5lIGxvbmcgZG91YmxlCmxkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQg
X195KSB0aHJvdyAoKQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192
b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKChs
b25nIGRvdWJsZSkgX195KSk7IHJldHVybiBfX3ZhbHVlOwp9CiMgNjA3ICIvdXNyL2luY2x1ZGUv
Yml0cy9tYXRoaW5saW5lLmgiIDMKX19pbmxpbmUgbG9uZyBpbnQKbHJpbnRmIChmbG9hdCBfX3gp
IHRocm93ICgpCnsKICBsb25nIGludCBfX2xyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAo
ImZpc3RwbCAlMCIgOiAiPW0iIChfX2xyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1
cm4gX19scmludHJlczsKfQpfX2lubGluZSBsb25nIGludApscmludCAoZG91YmxlIF9feCkgdGhy
b3cgKCkKewogIGxvbmcgaW50IF9fbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlz
dHBsICUwIiA6ICI9bSIgKF9fbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7IHJldHVybiBf
X2xyaW50cmVzOwp9Cl9faW5saW5lIGxvbmcgaW50CmxyaW50bCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKQp7CiAgbG9uZyBpbnQgX19scmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJm
aXN0cGwgJTAiIDogIj1tIiAoX19scmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJu
IF9fbHJpbnRyZXM7Cn0KIyA2MzAgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpf
X2lubGluZSBsb25nIGxvbmcgaW50CmxscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCkKewogIGxv
bmcgbG9uZyBpbnQgX19sbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBsbCAl
MCIgOiAiPW0iIChfX2xscmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbGxy
aW50cmVzOwp9Cl9faW5saW5lIGxvbmcgbG9uZyBpbnQKbGxyaW50IChkb3VibGUgX194KSB0aHJv
dyAoKQp7CiAgbG9uZyBsb25nIGludCBfX2xscmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18g
KCJmaXN0cGxsICUwIiA6ICI9bSIgKF9fbGxyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyBy
ZXR1cm4gX19sbHJpbnRyZXM7Cn0KX19pbmxpbmUgbG9uZyBsb25nIGludApsbHJpbnRsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpCnsKICBsb25nIGxvbmcgaW50IF9fbGxyaW50cmVzOyBfX2Fz
bV9fIF9fdm9sYXRpbGVfXyAoImZpc3RwbGwgJTAiIDogIj1tIiAoX19sbHJpbnRyZXMpIDogInQi
IChfX3gpIDogInN0Iik7IHJldHVybiBfX2xscmludHJlczsKfQoKCgoKCgoKX19pbmxpbmUgZG91
YmxlIGRyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIgZG91
YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGludCBfX2Nsb2JiZXJlZDsgX19hc20gX192b2xhdGlsZV9f
ICgiMToJZnByZW0xXG5cdCIgImZzdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAi
PXQiIChfX3ZhbHVlKSwgIj0mYSIgKF9fY2xvYmJlcmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kp
IDogImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGRyZW1mIChmbG9hdCBf
X3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgeyByZWdpc3RlciBkb3VibGUgX192YWx1ZTsgcmVnaXN0
ZXIgaW50IF9fY2xvYmJlcmVkOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbTFcblx0IiAi
ZnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpLCAiPSZh
IiAoX19jbG9iYmVyZWQpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiY2MiKTsgcmV0dXJuIF9f
dmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9u
ZyBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3Rl
ciBpbnQgX19jbG9iYmVyZWQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtMVxuXHQiICJm
c3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSksICI9JmEi
IChfX2Nsb2JiZXJlZCkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJjYyIpOyByZXR1cm4gX192
YWx1ZTsgfQojIDY2NSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCl9faW5saW5l
IGludApfX2Zpbml0ZSAoZG91YmxlIF9feCkgdGhyb3cgKCkKewogIHJldHVybiAoX19leHRlbnNp
b25fXwogICAgICAgICAgKCgoKCh1bmlvbiB7IGRvdWJsZSBfX2Q7IGludCBfX2lbMl07IH0pIHtf
X2Q6IF9feH0pLl9faVsxXQogICAgICAgICAgICAgfCAweDgwMGZmZmZmdSkgKyAxKSA+PiAzMSkp
Owp9CiMgMzYzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA0MjMgIi91c3IvaW5jbHVkZS9t
YXRoLmgiIDMKfQojIDQzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNVbml0Q29udmVy
c2lvbi5oIiAyCiMgNTUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc1VuaXRDb252ZXJz
aW9uLmgiCmlubGluZSBuc2Nvb3JkIE5TVG9Db29yZEZsb29yKGZsb2F0IGFWYWx1ZSkKewogIHJl
dHVybiAoKDAuMGYgPD0gYVZhbHVlKSA/IG5zY29vcmQoYVZhbHVlKSA6IG5zY29vcmQoYVZhbHVl
IC0gMC45OTk5OTk5OTk5OTk5OTk5ZikpOwp9CgppbmxpbmUgbnNjb29yZCBOU1RvQ29vcmRDZWls
KGZsb2F0IGFWYWx1ZSkKewogIHJldHVybiAoKDAuMGYgPD0gYVZhbHVlKSA/IG5zY29vcmQoYVZh
bHVlICsgMC45OTk5OTk5OTk5OTk5OTk5ZikgOiBuc2Nvb3JkKGFWYWx1ZSkpOwp9CgppbmxpbmUg
bnNjb29yZCBOU1RvQ29vcmRSb3VuZChmbG9hdCBhVmFsdWUpCnsKICByZXR1cm4gKCgwLjBmIDw9
IGFWYWx1ZSkgPyBuc2Nvb3JkKGFWYWx1ZSArIDAuNWYpIDogbnNjb29yZChhVmFsdWUgLSAwLjVm
KSk7Cn0KCmlubGluZSBuc2Nvb3JkIE5TVG9Db29yZFJvdW5kRXhjbHVzaXZlKGZsb2F0IGFWYWx1
ZSkKewogIHJldHVybiAoKDAuMGYgPD0gYVZhbHVlKSA/IG5zY29vcmQoYVZhbHVlICsgMC40OTk5
OTk5OTk5OTk5OTk5ZikgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zY29vcmQoYVZh
bHVlIC0gMC40OTk5OTk5OTk5OTk5OTk5ZikpOwp9CgoKCgoKaW5saW5lIFBSSW50MzIgTlNUb0lu
dEZsb29yKGZsb2F0IGFWYWx1ZSkKewogIHJldHVybiAoKDAuMGYgPD0gYVZhbHVlKSA/IFBSSW50
MzIoYVZhbHVlKSA6IFBSSW50MzIoYVZhbHVlIC0gMC45OTk5OTk5OTk5OTk5OTk5ZikpOwp9Cgpp
bmxpbmUgUFJJbnQzMiBOU1RvSW50Q2VpbChmbG9hdCBhVmFsdWUpCnsKICByZXR1cm4gKCgwLjBm
IDw9IGFWYWx1ZSkgPyBQUkludDMyKGFWYWx1ZSArIDAuOTk5OTk5OTk5OTk5OTk5OWYpIDogUFJJ
bnQzMihhVmFsdWUpKTsKfQoKaW5saW5lIFBSSW50MzIgTlNUb0ludFJvdW5kKGZsb2F0IGFWYWx1
ZSkKewogIHJldHVybiAoKDAuMGYgPD0gYVZhbHVlKSA/IFBSSW50MzIoYVZhbHVlICsgMC41Zikg
OiBQUkludDMyKGFWYWx1ZSAtIDAuNWYpKTsKfQoKaW5saW5lIFBSSW50MzIgTlNUb0ludFJvdW5k
RXhjbHVzaXZlKGZsb2F0IGFWYWx1ZSkKewogIHJldHVybiAoKDAuMGYgPD0gYVZhbHVlKSA/IFBS
SW50MzIoYVZhbHVlICsgMC40OTk5OTk5OTk5OTk5OTk5ZikgOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBSSW50MzIoYVZhbHVlIC0gMC40OTk5OTk5OTk5OTk5OTk5ZikpOwp9CgoKCgoK
aW5saW5lIG5zY29vcmQgTlNGbG9hdFBvaW50c1RvVHdpcHMoZmxvYXQgYVBvaW50cykKewogIHJl
dHVybiBOU1RvQ29vcmRSb3VuZChhUG9pbnRzICogMjAuMGYpOwp9CgppbmxpbmUgbnNjb29yZCBO
U0ludFBvaW50c1RvVHdpcHMoUFJJbnQzMiBhUG9pbnRzKQp7CiAgcmV0dXJuIG5zY29vcmQoYVBv
aW50cyAqIDIwKTsKfQoKaW5saW5lIFBSSW50MzIgTlNUd2lwc1RvSW50UG9pbnRzKG5zY29vcmQg
YVR3aXBzKQp7CiAgcmV0dXJuIE5TVG9JbnRSb3VuZChhVHdpcHMgLyAyMC4wZik7Cn0KCmlubGlu
ZSBQUkludDMyIE5TVHdpcHNUb0Zsb29ySW50UG9pbnRzKG5zY29vcmQgYVR3aXBzKQp7CiAgcmV0
dXJuIE5TVG9JbnRGbG9vcihhVHdpcHMgLyAyMC4wZik7Cn0KCmlubGluZSBQUkludDMyIE5TVHdp
cHNUb0NlaWxJbnRQb2ludHMobnNjb29yZCBhVHdpcHMpCnsKICByZXR1cm4gTlNUb0ludENlaWwo
YVR3aXBzIC8gMjAuMGYpOwp9CgppbmxpbmUgZmxvYXQgTlNUd2lwc1RvRmxvYXRQb2ludHMobnNj
b29yZCBhVHdpcHMpCnsKICByZXR1cm4gKGZsb2F0KGFUd2lwcykgLyAyMC4wZik7Cn0KCgoKCmlu
bGluZSBuc2Nvb3JkIE5TRmxvYXRQaXhlbHNUb1R3aXBzKGZsb2F0IGFQaXhlbHMsIGZsb2F0IGFU
d2lwc1BlclBpeGVsKQp7CiAgcmV0dXJuIE5TVG9Db29yZFJvdW5kKGFQaXhlbHMgKiBhVHdpcHNQ
ZXJQaXhlbCk7Cn0KCmlubGluZSBuc2Nvb3JkIE5TSW50UGl4ZWxzVG9Ud2lwcyhQUkludDMyIGFQ
aXhlbHMsIGZsb2F0IGFUd2lwc1BlclBpeGVsKQp7CiAgcmV0dXJuIE5TVG9Db29yZFJvdW5kKGZs
b2F0KGFQaXhlbHMpICogYVR3aXBzUGVyUGl4ZWwpOwp9CgppbmxpbmUgZmxvYXQgTlNUd2lwc1Rv
RmxvYXRQaXhlbHMobnNjb29yZCBhVHdpcHMsIGZsb2F0IGFQaXhlbHNQZXJUd2lwKQp7CiAgcmV0
dXJuIChmbG9hdChhVHdpcHMpICogYVBpeGVsc1BlclR3aXApOwp9CgppbmxpbmUgUFJJbnQzMiBO
U1R3aXBzVG9JbnRQaXhlbHMobnNjb29yZCBhVHdpcHMsIGZsb2F0IGFQaXhlbHNQZXJUd2lwKQp7
CiAgcmV0dXJuIE5TVG9JbnRSb3VuZChmbG9hdChhVHdpcHMpICogYVBpeGVsc1BlclR3aXApOwp9
CgoKCgppbmxpbmUgbnNjb29yZCBOU1VuaXRzVG9Ud2lwcyhmbG9hdCBhVmFsdWUsIGZsb2F0IGFQ
b2ludHNQZXJVbml0KQp7CiAgcmV0dXJuIE5TVG9Db29yZFJvdW5kKGFWYWx1ZSAqIGFQb2ludHNQ
ZXJVbml0ICogMjAuMGYpOwp9CgppbmxpbmUgZmxvYXQgTlNUd2lwc1RvVW5pdHMobnNjb29yZCBh
VHdpcHMsIGZsb2F0IGFVbml0c1BlclBvaW50KQp7CiAgcmV0dXJuIChhVHdpcHMgKiAoYVVuaXRz
UGVyUG9pbnQgLyAyMC4wZikpOwp9CiMgNDkgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZngvbnNS
ZWN0LmgiIDIKCgpzdHJ1Y3QgbnNSZWN0IHsKICBuc2Nvb3JkIHgsIHk7CiAgbnNjb29yZCB3aWR0
aCwgaGVpZ2h0OwoKCiAgbnNSZWN0KCkgOiB4KDApLCB5KDApLCB3aWR0aCgwKSwgaGVpZ2h0KDAp
IHt9CiAgbnNSZWN0KGNvbnN0IG5zUmVjdCYgYVJlY3QpIHsqdGhpcyA9IGFSZWN0O30KICBuc1Jl
Y3QoY29uc3QgbnNQb2ludCYgYU9yaWdpbiwgY29uc3QgbnNTaXplICZhU2l6ZSkge3ggPSBhT3Jp
Z2luLng7IHkgPSBhT3JpZ2luLnk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IGFTaXplLndpZHRoOyBoZWlnaHQgPSBhU2l6ZS5o
ZWlnaHQ7fQogIG5zUmVjdChuc2Nvb3JkIGFYLCBuc2Nvb3JkIGFZLCBuc2Nvb3JkIGFXaWR0aCwg
bnNjb29yZCBhSGVpZ2h0KSB7eCA9IGFYOyB5ID0gYVk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IGFXaWR0
aDsgaGVpZ2h0ID0gYUhlaWdodDt9CgoKCiAgUFJCb29sIElzRW1wdHkoKSBjb25zdCB7CiAgICBy
ZXR1cm4gKFBSQm9vbCkgKChoZWlnaHQgPD0gMCkgfHwgKHdpZHRoIDw9IDApKTsKICB9CiAgdm9p
ZCBFbXB0eSgpIHt3aWR0aCA9IGhlaWdodCA9IDA7fQoKCiAgUFJCb29sIENvbnRhaW5zKGNvbnN0
IG5zUmVjdCYgYVJlY3QpIGNvbnN0OwogIFBSQm9vbCBDb250YWlucyhuc2Nvb3JkIGFYLCBuc2Nv
b3JkIGFZKSBjb25zdDsKICBQUkJvb2wgQ29udGFpbnMoY29uc3QgbnNQb2ludCYgYVBvaW50KSBj
b25zdCB7cmV0dXJuIENvbnRhaW5zKGFQb2ludC54LCBhUG9pbnQueSk7fQoKCgogIFBSQm9vbCBJ
bnRlcnNlY3RzKGNvbnN0IG5zUmVjdCYgYVJlY3QpIGNvbnN0OwoKCgoKCgogIFBSQm9vbCBJbnRl
cnNlY3RSZWN0KGNvbnN0IG5zUmVjdCYgYVJlY3QxLCBjb25zdCBuc1JlY3QmIGFSZWN0Mik7CgoK
CgoKCiAgUFJCb29sIFVuaW9uUmVjdChjb25zdCBuc1JlY3QmIGFSZWN0MSwgY29uc3QgbnNSZWN0
JiBhUmVjdDIpOwoKCiAgdm9pZCBTZXRSZWN0KG5zY29vcmQgYVgsIG5zY29vcmQgYVksIG5zY29v
cmQgYVdpZHRoLCBuc2Nvb3JkIGFIZWlnaHQpIHsKICAgIHggPSBhWDsgeSA9IGFZOyB3aWR0aCA9
IGFXaWR0aDsgaGVpZ2h0ID0gYUhlaWdodDsKICB9CiAgdm9pZCBNb3ZlVG8obnNjb29yZCBhWCwg
bnNjb29yZCBhWSkge3ggPSBhWDsgeSA9IGFZO30KICB2b2lkIE1vdmVUbyhjb25zdCBuc1BvaW50
JiBhUG9pbnQpIHt4ID0gYVBvaW50Lng7IHkgPSBhUG9pbnQueTt9CiAgdm9pZCBNb3ZlQnkobnNj
b29yZCBhRHgsIG5zY29vcmQgYUR5KSB7eCArPSBhRHg7IHkgKz0gYUR5O30KICB2b2lkIFNpemVU
byhuc2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVpZ2h0KSB7d2lkdGggPSBhV2lkdGg7IGhlaWdo
dCA9IGFIZWlnaHQ7fQogIHZvaWQgU2l6ZVRvKGNvbnN0IG5zU2l6ZSYgYVNpemUpIHtTaXplVG8o
YVNpemUud2lkdGgsIGFTaXplLmhlaWdodCk7fQogIHZvaWQgU2l6ZUJ5KG5zY29vcmQgYURlbHRh
V2lkdGgsIG5zY29vcmQgYURlbHRhSGVpZ2h0KSB7d2lkdGggKz0gYURlbHRhV2lkdGg7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWln
aHQgKz0gYURlbHRhSGVpZ2h0O30KCgogIHZvaWQgSW5mbGF0ZShuc2Nvb3JkIGFEeCwgbnNjb29y
ZCBhRHkpOwogIHZvaWQgSW5mbGF0ZShjb25zdCBuc1NpemUmIGFTaXplKSB7SW5mbGF0ZShhU2l6
ZS53aWR0aCwgYVNpemUuaGVpZ2h0KTt9CiAgdm9pZCBJbmZsYXRlKGNvbnN0IG5zTWFyZ2luJiBh
TWFyZ2luKTsKCgogIHZvaWQgRGVmbGF0ZShuc2Nvb3JkIGFEeCwgbnNjb29yZCBhRHkpOwogIHZv
aWQgRGVmbGF0ZShjb25zdCBuc1NpemUmIGFTaXplKSB7RGVmbGF0ZShhU2l6ZS53aWR0aCwgYVNp
emUuaGVpZ2h0KTt9CiAgdm9pZCBEZWZsYXRlKGNvbnN0IG5zTWFyZ2luJiBhTWFyZ2luKTsKCgoK
ICBQUkJvb2wgb3BlcmF0b3I9PShjb25zdCBuc1JlY3QmIGFSZWN0KSBjb25zdCB7CiAgICByZXR1
cm4gKFBSQm9vbCkgKChJc0VtcHR5KCkgJiYgYVJlY3QuSXNFbXB0eSgpKSB8fAogICAgICAgICAg
ICAgICAgICAgICAoKHggPT0gYVJlY3QueCkgJiYgKHkgPT0gYVJlY3QueSkgJiYKICAgICAgICAg
ICAgICAgICAgICAgICh3aWR0aCA9PSBhUmVjdC53aWR0aCkgJiYgKGhlaWdodCA9PSBhUmVjdC5o
ZWlnaHQpKSk7CiAgfQogIFBSQm9vbCBvcGVyYXRvciE9KGNvbnN0IG5zUmVjdCYgYVJlY3QpIGNv
bnN0IHsKICAgIHJldHVybiAoUFJCb29sKSAhb3BlcmF0b3I9PShhUmVjdCk7CiAgfQogIG5zUmVj
dCBvcGVyYXRvcisoY29uc3QgbnNSZWN0JiBhUmVjdCkgY29uc3QgewogICAgcmV0dXJuIG5zUmVj
dCh4ICsgYVJlY3QueCwgeSArIGFSZWN0LnksCiAgICAgICAgICAgICAgICAgIHdpZHRoICsgYVJl
Y3Qud2lkdGgsIGhlaWdodCArIGFSZWN0LmhlaWdodCk7CiAgfQogIG5zUmVjdCBvcGVyYXRvci0o
Y29uc3QgbnNSZWN0JiBhUmVjdCkgY29uc3QgewogICAgcmV0dXJuIG5zUmVjdCh4IC0gYVJlY3Qu
eCwgeSAtIGFSZWN0LnksCiAgICAgICAgICAgICAgICAgIHdpZHRoIC0gYVJlY3Qud2lkdGgsIGhl
aWdodCAtIGFSZWN0LmhlaWdodCk7CiAgfQogIG5zUmVjdCYgb3BlcmF0b3IrPShjb25zdCBuc1Bv
aW50JiBhUG9pbnQpIHt4ICs9IGFQb2ludC54OyB5ICs9IGFQb2ludC55OyByZXR1cm4gKnRoaXM7
fQogIG5zUmVjdCYgb3BlcmF0b3ItPShjb25zdCBuc1BvaW50JiBhUG9pbnQpIHt4IC09IGFQb2lu
dC54OyB5IC09IGFQb2ludC55OyByZXR1cm4gKnRoaXM7fQoKICBuc1JlY3QmIG9wZXJhdG9yKj0o
Y29uc3QgZmxvYXQgYVNjYWxlKSB7eCA9IE5TVG9Db29yZFJvdW5kKHggKiBhU2NhbGUpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gTlNUb0Nvb3JkUm91bmQo
eSAqIGFTY2FsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdp
ZHRoID0gTlNUb0Nvb3JkUm91bmQod2lkdGggKiBhU2NhbGUpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSBOU1RvQ29vcmRSb3VuZChoZWlnaHQgKiBh
U2NhbGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
KnRoaXM7fQoKICBuc1JlY3QmIFNjYWxlUm91bmRPdXQoY29uc3QgZmxvYXQgYVNjYWxlKTsKICBu
c1JlY3QmIFNjYWxlUm91bmRJbihjb25zdCBmbG9hdCBhU2NhbGUpOwoKCiAgbnNjb29yZCBYTW9z
dCgpIGNvbnN0IHtyZXR1cm4geCArIHdpZHRoO30KICBuc2Nvb3JkIFlNb3N0KCkgY29uc3Qge3Jl
dHVybiB5ICsgaGVpZ2h0O30KfTsKCgpleHRlcm4gRklMRSogb3BlcmF0b3I8PChGSUxFKiBvdXQs
IGNvbnN0IG5zUmVjdCYgcmVjdCk7CiMgNDUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50
L25zU3R5bGVTdHJ1Y3QuaCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9nZngvbnNGb250
LmgiIDEKIyA1MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2dmeC9uc0ZvbnQuaCIKdHlwZWRlZiBQ
UkJvb2wgKCpuc0ZvbnRGYW1pbHlFbnVtRnVuYykoY29uc3QgbnNTdHJpbmcmIGFGYW1pbHksIFBS
Qm9vbCBhR2VuZXJpYywgdm9pZCAqYURhdGEpOwoKCgoKY29uc3QgUFJVaW50OCBrR2VuZXJpY0Zv
bnRfTk9ORSA9IDB4MDA7Cgpjb25zdCBQUlVpbnQ4IGtHZW5lcmljRm9udF9tb3pfdmFyaWFibGUg
PSAweDAwOwpjb25zdCBQUlVpbnQ4IGtHZW5lcmljRm9udF9tb3pfZml4ZWQgPSAweDAxOwoKY29u
c3QgUFJVaW50OCBrR2VuZXJpY0ZvbnRfc2VyaWYgPSAweDAyOwpjb25zdCBQUlVpbnQ4IGtHZW5l
cmljRm9udF9zYW5zX3NlcmlmID0gMHgwNDsKY29uc3QgUFJVaW50OCBrR2VuZXJpY0ZvbnRfbW9u
b3NwYWNlID0gMHgwODsKY29uc3QgUFJVaW50OCBrR2VuZXJpY0ZvbnRfY3Vyc2l2ZSA9IDB4MTA7
CmNvbnN0IFBSVWludDgga0dlbmVyaWNGb250X2ZhbnRhc3kgPSAweDIwOwoKCnN0cnVjdCBuc0Zv
bnQgewoKICBuc1N0cmluZyBuYW1lOwoKCiAgUFJVaW50OCBzdHlsZTsKCgogIFBSVWludDggdmFy
aWFudCA6IDc7CgoKCiAgUFJQYWNrZWRCb29sIGZhbWlseU5hbWVRdWlya3MgOiAxOwoKCiAgUFJV
aW50MTYgd2VpZ2h0OwoKCgogIFBSVWludDggZGVjb3JhdGlvbnM7CgoKICBuc2Nvb3JkIHNpemU7
CgoKCgoKICBmbG9hdCBzaXplQWRqdXN0OwoKCiAgbnNGb250KGNvbnN0IGNoYXIqIGFOYW1lLCBQ
UlVpbnQ4IGFTdHlsZSwgUFJVaW50OCBhVmFyaWFudCwKICAgICAgICAgUFJVaW50MTYgYVdlaWdo
dCwgUFJVaW50OCBhRGVjb3JhdGlvbiwgbnNjb29yZCBhU2l6ZSwKICAgICAgICAgZmxvYXQgYVNp
emVBZGp1c3Q9MC4wZik7CgoKICBuc0ZvbnQoY29uc3QgbnNTdHJpbmcmIGFOYW1lLCBQUlVpbnQ4
IGFTdHlsZSwgUFJVaW50OCBhVmFyaWFudCwKICAgICAgICAgUFJVaW50MTYgYVdlaWdodCwgUFJV
aW50OCBhRGVjb3JhdGlvbiwgbnNjb29yZCBhU2l6ZSwKICAgICAgICAgZmxvYXQgYVNpemVBZGp1
c3Q9MC4wZik7CgoKICBuc0ZvbnQoY29uc3QgbnNGb250JiBhRm9udCk7CgogIG5zRm9udCgpOwog
IH5uc0ZvbnQoKTsKCiAgUFJCb29sIG9wZXJhdG9yPT0oY29uc3QgbnNGb250JiBhT3RoZXIpIGNv
bnN0IHsKICAgIHJldHVybiBFcXVhbHMoYU90aGVyKTsKICB9CgogIFBSQm9vbCBFcXVhbHMoY29u
c3QgbnNGb250JiBhT3RoZXIpIGNvbnN0IDsKCiAgbnNGb250JiBvcGVyYXRvcj0oY29uc3QgbnNG
b250JiBhT3RoZXIpOwoKCgoKCiAgUFJCb29sIEVudW1lcmF0ZUZhbWlsaWVzKG5zRm9udEZhbWls
eUVudW1GdW5jIGFGdW5jLCB2b2lkKiBhRGF0YSkgY29uc3Q7CiAgdm9pZCBHZXRGaXJzdEZhbWls
eShuc1N0cmluZyYgYUZhbWlseSkgY29uc3Q7CgoKICBzdGF0aWMgdm9pZCBHZXRHZW5lcmljSUQo
Y29uc3QgbnNTdHJpbmcmIGFHZW5lcmljLCBQUlVpbnQ4KiBhSUQpOwp9OwojIDQ2ICIuLi8uLi8u
Li9kaXN0L2luY2x1ZGUvY29udGVudC9uc1N0eWxlU3RydWN0LmgiIDIKCiMgMSAiLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNTdHlsZUNvb3JkLmgiIDEKIyA0NCAiLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL2NvbnRlbnQvbnNTdHlsZUNvb3JkLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL2xheW91dC9uc1N0eWxlQ29uc3RzLmgiIDEKIyA0NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRl
L2NvbnRlbnQvbnNTdHlsZUNvb3JkLmgiIDIKY2xhc3MgbnNTdHJpbmc7CgplbnVtIG5zU3R5bGVV
bml0IHsKICBlU3R5bGVVbml0X051bGwgPSAwLAogIGVTdHlsZVVuaXRfTm9ybWFsID0gMSwKICBl
U3R5bGVVbml0X0F1dG8gPSAyLAogIGVTdHlsZVVuaXRfSW5oZXJpdCA9IDMsCiAgZVN0eWxlVW5p
dF9QZXJjZW50ID0gMTAsCiAgZVN0eWxlVW5pdF9GYWN0b3IgPSAxMSwKICBlU3R5bGVVbml0X0Nv
b3JkID0gMjAsCiAgZVN0eWxlVW5pdF9JbnRlZ2VyID0gMzAsCiAgZVN0eWxlVW5pdF9Qcm9wb3J0
aW9uYWwgPSAzMSwKICBlU3R5bGVVbml0X0VudW1lcmF0ZWQgPSAzMiwKICBlU3R5bGVVbml0X0No
YXJzID0gMzMKfTsKCnR5cGVkZWYgdW5pb24gewogIFBSSW50MzIgbUludDsKICBmbG9hdCBtRmxv
YXQ7Cn0gbnNTdHlsZVVuaW9uOwojIDc0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9u
c1N0eWxlQ29vcmQuaCIKY2xhc3MgbnNTdHlsZUNvb3JkIHsKcHVibGljOgogIG5zU3R5bGVDb29y
ZChuc1N0eWxlVW5pdCBhVW5pdCA9IGVTdHlsZVVuaXRfTnVsbCk7CiAgbnNTdHlsZUNvb3JkKG5z
Y29vcmQgYVZhbHVlKTsKICBuc1N0eWxlQ29vcmQoUFJJbnQzMiBhVmFsdWUsIG5zU3R5bGVVbml0
IGFVbml0KTsKICBuc1N0eWxlQ29vcmQoZmxvYXQgYVZhbHVlLCBuc1N0eWxlVW5pdCBhVW5pdCk7
CiAgbnNTdHlsZUNvb3JkKGNvbnN0IG5zU3R5bGVDb29yZCYgYUNvcHkpOwoKICBuc1N0eWxlQ29v
cmQmIG9wZXJhdG9yPShjb25zdCBuc1N0eWxlQ29vcmQmIGFDb3B5KTsKICBQUkJvb2wgb3BlcmF0
b3I9PShjb25zdCBuc1N0eWxlQ29vcmQmIGFPdGhlcikgY29uc3Q7CiAgUFJCb29sIG9wZXJhdG9y
IT0oY29uc3QgbnNTdHlsZUNvb3JkJiBhT3RoZXIpIGNvbnN0OwoKICBuc1N0eWxlVW5pdCBHZXRV
bml0KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Vbml0OyB9CiAgbnNjb29yZCBHZXRDb29yZFZhbHVl
KHZvaWQpIGNvbnN0OwogIFBSSW50MzIgR2V0SW50VmFsdWUodm9pZCkgY29uc3Q7CiAgZmxvYXQg
R2V0UGVyY2VudFZhbHVlKHZvaWQpIGNvbnN0OwogIGZsb2F0IEdldEZhY3RvclZhbHVlKHZvaWQp
IGNvbnN0OwogIHZvaWQgR2V0VW5pb25WYWx1ZShuc1N0eWxlVW5pb24mIGFWYWx1ZSkgY29uc3Q7
CgogIHZvaWQgUmVzZXQodm9pZCk7CiAgdm9pZCBTZXRDb29yZFZhbHVlKG5zY29vcmQgYVZhbHVl
KTsKICB2b2lkIFNldEludFZhbHVlKFBSSW50MzIgYVZhbHVlLCBuc1N0eWxlVW5pdCBhVW5pdCk7
CiAgdm9pZCBTZXRQZXJjZW50VmFsdWUoZmxvYXQgYVZhbHVlKTsKICB2b2lkIFNldEZhY3RvclZh
bHVlKGZsb2F0IGFWYWx1ZSk7CiAgdm9pZCBTZXROb3JtYWxWYWx1ZSh2b2lkKTsKICB2b2lkIFNl
dEF1dG9WYWx1ZSh2b2lkKTsKICB2b2lkIFNldEluaGVyaXRWYWx1ZSh2b2lkKTsKICB2b2lkIFNl
dFVuaW9uVmFsdWUoY29uc3QgbnNTdHlsZVVuaW9uJiBhVmFsdWUsIG5zU3R5bGVVbml0IGFVbml0
KTsKCiAgdm9pZCBBcHBlbmRUb1N0cmluZyhuc1N0cmluZyYgYUJ1ZmZlcikgY29uc3Q7CiAgdm9p
ZCBUb1N0cmluZyhuc1N0cmluZyYgYUJ1ZmZlcikgY29uc3Q7CgpwdWJsaWM6CiAgbnNTdHlsZVVu
aXQgbVVuaXQ7CiAgbnNTdHlsZVVuaW9uIG1WYWx1ZTsKfTsKCgoKCgoKCmNsYXNzIG5zU3R5bGVT
aWRlcyB7CnB1YmxpYzoKICBuc1N0eWxlU2lkZXModm9pZCk7CgoKICBQUkJvb2wgb3BlcmF0b3I9
PShjb25zdCBuc1N0eWxlU2lkZXMmIGFPdGhlcikgY29uc3Q7CiAgUFJCb29sIG9wZXJhdG9yIT0o
Y29uc3QgbnNTdHlsZVNpZGVzJiBhT3RoZXIpIGNvbnN0OwoKCgogIGlubGluZSBuc1N0eWxlVW5p
dCBHZXRVbml0KFBSVWludDggYVNpZGUpIGNvbnN0OwogIGlubGluZSBuc1N0eWxlVW5pdCBHZXRM
ZWZ0VW5pdCh2b2lkKSBjb25zdDsKICBpbmxpbmUgbnNTdHlsZVVuaXQgR2V0VG9wVW5pdCh2b2lk
KSBjb25zdDsKICBpbmxpbmUgbnNTdHlsZVVuaXQgR2V0UmlnaHRVbml0KHZvaWQpIGNvbnN0Owog
IGlubGluZSBuc1N0eWxlVW5pdCBHZXRCb3R0b21Vbml0KHZvaWQpIGNvbnN0OwoKICBpbmxpbmUg
bnNTdHlsZUNvb3JkJiBHZXQoUFJVaW50OCBhU2lkZSwgbnNTdHlsZUNvb3JkJiBhQ29vcmQpIGNv
bnN0OwogIGlubGluZSBuc1N0eWxlQ29vcmQmIEdldExlZnQobnNTdHlsZUNvb3JkJiBhQ29vcmQp
IGNvbnN0OwogIGlubGluZSBuc1N0eWxlQ29vcmQmIEdldFRvcChuc1N0eWxlQ29vcmQmIGFDb29y
ZCkgY29uc3Q7CiAgaW5saW5lIG5zU3R5bGVDb29yZCYgR2V0UmlnaHQobnNTdHlsZUNvb3JkJiBh
Q29vcmQpIGNvbnN0OwogIGlubGluZSBuc1N0eWxlQ29vcmQmIEdldEJvdHRvbShuc1N0eWxlQ29v
cmQmIGFDb29yZCkgY29uc3Q7CgogIHZvaWQgUmVzZXQodm9pZCk7CgogIGlubGluZSB2b2lkIFNl
dChQUlVpbnQ4IGFTaWRlLCBjb25zdCBuc1N0eWxlQ29vcmQmIGFDb29yZCk7CiAgaW5saW5lIHZv
aWQgU2V0TGVmdChjb25zdCBuc1N0eWxlQ29vcmQmIGFDb29yZCk7CiAgaW5saW5lIHZvaWQgU2V0
VG9wKGNvbnN0IG5zU3R5bGVDb29yZCYgYUNvb3JkKTsKICBpbmxpbmUgdm9pZCBTZXRSaWdodChj
b25zdCBuc1N0eWxlQ29vcmQmIGFDb29yZCk7CiAgaW5saW5lIHZvaWQgU2V0Qm90dG9tKGNvbnN0
IG5zU3R5bGVDb29yZCYgYUNvb3JkKTsKCiAgdm9pZCBBcHBlbmRUb1N0cmluZyhuc1N0cmluZyYg
YUJ1ZmZlcikgY29uc3Q7CiAgdm9pZCBUb1N0cmluZyhuc1N0cmluZyYgYUJ1ZmZlcikgY29uc3Q7
Cgpwcm90ZWN0ZWQ6CiAgUFJVaW50OCBtVW5pdHNbNF07CiAgbnNTdHlsZVVuaW9uIG1WYWx1ZXNb
NF07Cn07CgoKCgppbmxpbmUgUFJCb29sIG5zU3R5bGVDb29yZDo6b3BlcmF0b3IhPShjb25zdCBu
c1N0eWxlQ29vcmQmIGFPdGhlcikgY29uc3QKewogIHJldHVybiBQUkJvb2woISAoKCp0aGlzKSA9
PSBhT3RoZXIpKTsKfQoKaW5saW5lIFBSSW50MzIgbnNTdHlsZUNvb3JkOjpHZXRDb29yZFZhbHVl
KHZvaWQpIGNvbnN0CnsKICA7CiAgaWYgKG1Vbml0ID09IGVTdHlsZVVuaXRfQ29vcmQpIHsKICAg
IHJldHVybiBtVmFsdWUubUludDsKICB9CiAgcmV0dXJuIDA7Cn0KCmlubGluZSBQUkludDMyIG5z
U3R5bGVDb29yZDo6R2V0SW50VmFsdWUodm9pZCkgY29uc3QKewogIDsKCgoKICBpZiAoKG1Vbml0
ID09IGVTdHlsZVVuaXRfUHJvcG9ydGlvbmFsKSB8fAogICAgICAobVVuaXQgPT0gZVN0eWxlVW5p
dF9FbnVtZXJhdGVkKSB8fAogICAgICAobVVuaXQgPT0gZVN0eWxlVW5pdF9DaGFycykgfHwKICAg
ICAgKG1Vbml0ID09IGVTdHlsZVVuaXRfSW50ZWdlcikpIHsKICAgIHJldHVybiBtVmFsdWUubUlu
dDsKICB9CiAgcmV0dXJuIDA7Cn0KCmlubGluZSBmbG9hdCBuc1N0eWxlQ29vcmQ6OkdldFBlcmNl
bnRWYWx1ZSh2b2lkKSBjb25zdAp7CiAgOwogIGlmIChtVW5pdCA9PSBlU3R5bGVVbml0X1BlcmNl
bnQpIHsKICAgIHJldHVybiBtVmFsdWUubUZsb2F0OwogIH0KICByZXR1cm4gMC4wZjsKfQoKaW5s
aW5lIGZsb2F0IG5zU3R5bGVDb29yZDo6R2V0RmFjdG9yVmFsdWUodm9pZCkgY29uc3QKewogIDsK
ICBpZiAobVVuaXQgPT0gZVN0eWxlVW5pdF9GYWN0b3IpIHsKICAgIHJldHVybiBtVmFsdWUubUZs
b2F0OwogIH0KICByZXR1cm4gMC4wZjsKfQoKaW5saW5lIHZvaWQgbnNTdHlsZUNvb3JkOjpHZXRV
bmlvblZhbHVlKG5zU3R5bGVVbmlvbiYgYVZhbHVlKSBjb25zdAp7CiAgbWVtY3B5KCZhVmFsdWUs
ICZtVmFsdWUsIHNpemVvZihuc1N0eWxlVW5pb24pKTsKfQoKCgoKaW5saW5lIFBSQm9vbCBuc1N0
eWxlU2lkZXM6Om9wZXJhdG9yIT0oY29uc3QgbnNTdHlsZVNpZGVzJiBhT3RoZXIpIGNvbnN0CnsK
ICByZXR1cm4gUFJCb29sKCEgKCgqdGhpcykgPT0gYU90aGVyKSk7Cn0KCmlubGluZSBuc1N0eWxl
VW5pdCBuc1N0eWxlU2lkZXM6OkdldFVuaXQoUFJVaW50OCBhU2lkZSkgY29uc3QKewogIHJldHVy
biAobnNTdHlsZVVuaXQpbVVuaXRzW2FTaWRlXTsKfQoKaW5saW5lIG5zU3R5bGVVbml0IG5zU3R5
bGVTaWRlczo6R2V0TGVmdFVuaXQodm9pZCkgY29uc3QKewogIHJldHVybiBHZXRVbml0KDMpOwp9
CgppbmxpbmUgbnNTdHlsZVVuaXQgbnNTdHlsZVNpZGVzOjpHZXRUb3BVbml0KHZvaWQpIGNvbnN0
CnsKICByZXR1cm4gR2V0VW5pdCgwKTsKfQoKaW5saW5lIG5zU3R5bGVVbml0IG5zU3R5bGVTaWRl
czo6R2V0UmlnaHRVbml0KHZvaWQpIGNvbnN0CnsKICByZXR1cm4gR2V0VW5pdCgxKTsKfQoKaW5s
aW5lIG5zU3R5bGVVbml0IG5zU3R5bGVTaWRlczo6R2V0Qm90dG9tVW5pdCh2b2lkKSBjb25zdAp7
CiAgcmV0dXJuIEdldFVuaXQoMik7Cn0KCmlubGluZSBuc1N0eWxlQ29vcmQmIG5zU3R5bGVTaWRl
czo6R2V0KFBSVWludDggYVNpZGUsIG5zU3R5bGVDb29yZCYgYUNvb3JkKSBjb25zdAp7CiAgYUNv
b3JkLlNldFVuaW9uVmFsdWUobVZhbHVlc1thU2lkZV0sIChuc1N0eWxlVW5pdCltVW5pdHNbYVNp
ZGVdKTsKICByZXR1cm4gYUNvb3JkOwp9CgppbmxpbmUgbnNTdHlsZUNvb3JkJiBuc1N0eWxlU2lk
ZXM6OkdldExlZnQobnNTdHlsZUNvb3JkJiBhQ29vcmQpIGNvbnN0CnsKICByZXR1cm4gR2V0KDMs
IGFDb29yZCk7Cn0KCmlubGluZSBuc1N0eWxlQ29vcmQmIG5zU3R5bGVTaWRlczo6R2V0VG9wKG5z
U3R5bGVDb29yZCYgYUNvb3JkKSBjb25zdAp7CiAgcmV0dXJuIEdldCgwLCBhQ29vcmQpOwp9Cgpp
bmxpbmUgbnNTdHlsZUNvb3JkJiBuc1N0eWxlU2lkZXM6OkdldFJpZ2h0KG5zU3R5bGVDb29yZCYg
YUNvb3JkKSBjb25zdAp7CiAgcmV0dXJuIEdldCgxLCBhQ29vcmQpOwp9CgppbmxpbmUgbnNTdHls
ZUNvb3JkJiBuc1N0eWxlU2lkZXM6OkdldEJvdHRvbShuc1N0eWxlQ29vcmQmIGFDb29yZCkgY29u
c3QKewogIHJldHVybiBHZXQoMiwgYUNvb3JkKTsKfQoKaW5saW5lIHZvaWQgbnNTdHlsZVNpZGVz
OjpTZXQoUFJVaW50OCBhU2lkZSwgY29uc3QgbnNTdHlsZUNvb3JkJiBhQ29vcmQpCnsKICBtVW5p
dHNbYVNpZGVdID0gYUNvb3JkLkdldFVuaXQoKTsKICBhQ29vcmQuR2V0VW5pb25WYWx1ZShtVmFs
dWVzW2FTaWRlXSk7Cn0KCmlubGluZSB2b2lkIG5zU3R5bGVTaWRlczo6U2V0TGVmdChjb25zdCBu
c1N0eWxlQ29vcmQmIGFDb29yZCkKewogIFNldCgzLCBhQ29vcmQpOwp9CgppbmxpbmUgdm9pZCBu
c1N0eWxlU2lkZXM6OlNldFRvcChjb25zdCBuc1N0eWxlQ29vcmQmIGFDb29yZCkKewogIFNldCgw
LCBhQ29vcmQpOwp9CgppbmxpbmUgdm9pZCBuc1N0eWxlU2lkZXM6OlNldFJpZ2h0KGNvbnN0IG5z
U3R5bGVDb29yZCYgYUNvb3JkKQp7CiAgU2V0KDEsIGFDb29yZCk7Cn0KCmlubGluZSB2b2lkIG5z
U3R5bGVTaWRlczo6U2V0Qm90dG9tKGNvbnN0IG5zU3R5bGVDb29yZCYgYUNvb3JkKQp7CiAgU2V0
KDIsIGFDb29yZCk7Cn0KIyA0OCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNTdHls
ZVN0cnVjdC5oIiAyCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVN0eWxl
U2V0LmgiIDEKIyA0NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lTdHlsZVNldC5o
IgpjbGFzcyBuc0lBdG9tOwpjbGFzcyBuc0lTdHlsZVJ1bGU7CmNsYXNzIG5zSVN0eWxlU2hlZXQ7
CmNsYXNzIG5zSVN0eWxlQ29udGV4dDsKY2xhc3MgbnNJU3R5bGVSdWxlU3VwcGxpZXI7CmNsYXNz
IG5zSVN0eWxlRnJhbWVDb25zdHJ1Y3Rpb247CmNsYXNzIG5zSVByZXNDb250ZXh0OwpjbGFzcyBu
c0lQcmVzU2hlbGw7CmNsYXNzIG5zSUNvbnRlbnQ7CmNsYXNzIG5zSUZyYW1lOwpjbGFzcyBuc0lE
b2N1bWVudDsKY2xhc3MgbnNJRnJhbWVNYW5hZ2VyOwpjbGFzcyBuc0lTdXBwb3J0c0FycmF5Owpj
bGFzcyBuc1J1bGVOb2RlOwpzdHJ1Y3QgbnNGaW5kRnJhbWVIaW50OwoKCmNsYXNzIG5zSVNpemVP
ZkhhbmRsZXI7CgpjbGFzcyBuc0lDU1NQc2V1ZG9Db21wYXJhdG9yOwoKCgoKCmNsYXNzIG5zSVN0
eWxlU2V0IDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJ
RCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhlNTkzOTZiMCwgMHhiMjQ0
LCAweDExZDEsIHsweDgwLCAweDMxLCAweDAwLCAweDYwLCAweDA4LCAweDE1LCAweDliLCAweDVh
fX07IHJldHVybiBpaWQ7fQoKCgogIHZpcnR1YWwgdm9pZCBBcHBlbmRPdmVycmlkZVN0eWxlU2hl
ZXQobnNJU3R5bGVTaGVldCogYVNoZWV0KSA9IDA7CiAgdmlydHVhbCB2b2lkIEluc2VydE92ZXJy
aWRlU3R5bGVTaGVldEFmdGVyKG5zSVN0eWxlU2hlZXQqIGFTaGVldCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVTaGVldCogYUFmdGVyU2hlZXQp
ID0gMDsKICB2aXJ0dWFsIHZvaWQgSW5zZXJ0T3ZlcnJpZGVTdHlsZVNoZWV0QmVmb3JlKG5zSVN0
eWxlU2hlZXQqIGFTaGVldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSVN0eWxlU2hlZXQqIGFCZWZvcmVTaGVldCkgPSAwOwogIHZpcnR1YWwgdm9pZCBS
ZW1vdmVPdmVycmlkZVN0eWxlU2hlZXQobnNJU3R5bGVTaGVldCogYVNoZWV0KSA9IDA7CiAgdmly
dHVhbCBQUkludDMyIEdldE51bWJlck9mT3ZlcnJpZGVTdHlsZVNoZWV0cygpID0gMDsKICB2aXJ0
dWFsIG5zSVN0eWxlU2hlZXQqIEdldE92ZXJyaWRlU3R5bGVTaGVldEF0KFBSSW50MzIgYUluZGV4
KSA9IDA7CgoKICB2aXJ0dWFsIHZvaWQgQWRkRG9jU3R5bGVTaGVldChuc0lTdHlsZVNoZWV0KiBh
U2hlZXQsIG5zSURvY3VtZW50KiBhRG9jdW1lbnQpID0gMDsKICB2aXJ0dWFsIHZvaWQgUmVtb3Zl
RG9jU3R5bGVTaGVldChuc0lTdHlsZVNoZWV0KiBhU2hlZXQpID0gMDsKICB2aXJ0dWFsIFBSSW50
MzIgR2V0TnVtYmVyT2ZEb2NTdHlsZVNoZWV0cygpID0gMDsKICB2aXJ0dWFsIG5zSVN0eWxlU2hl
ZXQqIEdldERvY1N0eWxlU2hlZXRBdChQUkludDMyIGFJbmRleCkgPSAwOwoKICB2aXJ0dWFsIHZv
aWQgQXBwZW5kVXNlclN0eWxlU2hlZXQobnNJU3R5bGVTaGVldCogYVNoZWV0KSA9IDA7CiAgdmly
dHVhbCB2b2lkIEluc2VydFVzZXJTdHlsZVNoZWV0QWZ0ZXIobnNJU3R5bGVTaGVldCogYVNoZWV0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZVNo
ZWV0KiBhQWZ0ZXJTaGVldCkgPSAwOwogIHZpcnR1YWwgdm9pZCBJbnNlcnRVc2VyU3R5bGVTaGVl
dEJlZm9yZShuc0lTdHlsZVNoZWV0KiBhU2hlZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZVNoZWV0KiBhQmVmb3JlU2hlZXQpID0gMDsKICB2
aXJ0dWFsIHZvaWQgUmVtb3ZlVXNlclN0eWxlU2hlZXQobnNJU3R5bGVTaGVldCogYVNoZWV0KSA9
IDA7CiAgdmlydHVhbCBQUkludDMyIEdldE51bWJlck9mVXNlclN0eWxlU2hlZXRzKCkgPSAwOwog
IHZpcnR1YWwgbnNJU3R5bGVTaGVldCogR2V0VXNlclN0eWxlU2hlZXRBdChQUkludDMyIGFJbmRl
eCkgPSAwOwogIHZpcnR1YWwgdm9pZCBSZXBsYWNlVXNlclN0eWxlU2hlZXRzKG5zSVN1cHBvcnRz
QXJyYXkqIGFOZXdTaGVldHMpID0gMDsKCiAgdmlydHVhbCB2b2lkIEFwcGVuZEFnZW50U3R5bGVT
aGVldChuc0lTdHlsZVNoZWV0KiBhU2hlZXQpID0gMDsKICB2aXJ0dWFsIHZvaWQgSW5zZXJ0QWdl
bnRTdHlsZVNoZWV0QWZ0ZXIobnNJU3R5bGVTaGVldCogYVNoZWV0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZVNoZWV0KiBhQWZ0ZXJTaGVldCkg
PSAwOwogIHZpcnR1YWwgdm9pZCBJbnNlcnRBZ2VudFN0eWxlU2hlZXRCZWZvcmUobnNJU3R5bGVT
aGVldCogYVNoZWV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNJU3R5bGVTaGVldCogYUJlZm9yZVNoZWV0KSA9IDA7CiAgdmlydHVhbCB2b2lkIFJlbW92
ZUFnZW50U3R5bGVTaGVldChuc0lTdHlsZVNoZWV0KiBhU2hlZXQpID0gMDsKICB2aXJ0dWFsIFBS
SW50MzIgR2V0TnVtYmVyT2ZBZ2VudFN0eWxlU2hlZXRzKCkgPSAwOwogIHZpcnR1YWwgbnNJU3R5
bGVTaGVldCogR2V0QWdlbnRTdHlsZVNoZWV0QXQoUFJJbnQzMiBhSW5kZXgpID0gMDsKICB2aXJ0
dWFsIHZvaWQgUmVwbGFjZUFnZW50U3R5bGVTaGVldHMobnNJU3VwcG9ydHNBcnJheSogYU5ld1No
ZWV0cykgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJ1bGVUcmVlKG5zUnVsZU5vZGUqKiBh
UmVzdWx0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBDbGVhckNhY2hlZERhdGFJblJ1bGVUcmVl
KG5zSVN0eWxlUnVsZSogYVJ1bGUpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBZGRSdWxl
Tm9kZU1hcHBpbmcobnNSdWxlTm9kZSogYVJ1bGVOb2RlKSA9IDA7CiMgMTMwICIuLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbGF5b3V0L25zSVN0eWxlU2V0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBCZWdp
blJ1bGVUcmVlUmVjb25zdHJ1Y3QoKT0wOwogIHZpcnR1YWwgbnNyZXN1bHQgRW5kUnVsZVRyZWVS
ZWNvbnN0cnVjdCgpPTA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3R5bGVGcmFtZUNvbnN0cnVj
dGlvbihuc0lTdHlsZUZyYW1lQ29uc3RydWN0aW9uKiogYVJlc3VsdCkgPSAwOwojIDE0NCAiLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lTdHlsZVNldC5oIgogIHZpcnR1YWwgbnNyZXN1
bHQgQ2xlYXJTdHlsZURhdGEobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNJU3R5bGVS
dWxlKiBhUnVsZSwgbnNJU3R5bGVDb250ZXh0KiBhQ29udGV4dCkgPSAwOwoKCgogIHZpcnR1YWwg
bnNyZXN1bHQgRW5hYmxlUXVpcmtTdHlsZVNoZWV0KFBSQm9vbCBhRW5hYmxlKSA9IDA7CgoKICB2
aXJ0dWFsIG5zcmVzdWx0IE5vdGlmeVN0eWxlU2hlZXRTdGF0ZUNoYW5nZWQoUFJCb29sIGFBcHBs
aWNhYmxlKSA9IDA7CgoKICB2aXJ0dWFsIG5zSVN0eWxlQ29udGV4dCogUmVzb2x2ZVN0eWxlRm9y
KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYVBhcmVudENvbnRleHQp
ID0gMDsKIyAxNjggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJU3R5bGVTZXQuaCIK
ICB2aXJ0dWFsIG5zSVN0eWxlQ29udGV4dCogUmVzb2x2ZVN0eWxlRm9yTm9uRWxlbWVudCgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNDb250ZXh0KiBh
UHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lTdHlsZUNvbnRleHQqIGFQYXJlbnRDb250ZXh0KSA9IDA7CgoKCiAgdmlydHVhbCBuc0lTdHls
ZUNvbnRleHQqIFJlc29sdmVQc2V1ZG9TdHlsZUZvcihuc0lQcmVzQ29udGV4dCogYVByZXNDb250
ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ
Q29udGVudCogYVBhcmVudENvbnRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhUHNldWRvVGFnLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhUGFyZW50Q29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SUNTU1BzZXVkb0NvbXBhcmF0b3IqIGFDb21wYXJhdG9yID0gMCkgPSAwOwoKCgoKICB2aXJ0dWFs
IG5zSVN0eWxlQ29udGV4dCogUHJvYmVQc2V1ZG9TdHlsZUZvcihuc0lQcmVzQ29udGV4dCogYVBy
ZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zSUNvbnRlbnQqIGFQYXJlbnRDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFQc2V1ZG9UYWcsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhUGFyZW50Q29u
dGV4dCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFNodXRkb3duKCk9MDsKCgoKICB2aXJ0dWFs
IG5zcmVzdWx0IFJlUGFyZW50U3R5bGVDb250ZXh0KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBh
U3R5bGVDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxl
Q29udGV4dCogYU5ld1BhcmVudENvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnNJU3R5bGVDb250ZXh0KiogYU5ld1N0eWxlQ29udGV4dCkgPSAwOwoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBIYXNTdGF0ZURlcGVuZGVudFN0eWxlKG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBh
Q29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYVN0
YXRlTWFzaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCogYVJl
c3VsdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDb25zdHJ1Y3RSb290RnJhbWUobnNJUHJl
c0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNJQ29udGVudCogYURvY0VsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5zSUZyYW1lKiYgYUZyYW1lU3ViVHJlZSkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFJl
Y29uc3RydWN0RG9jRWxlbWVudEhpZXJhcmNoeShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0
KSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRlbnRBcHBlbmRlZChuc0lQcmVzQ29udGV4
dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQq
IGFDb250YWluZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhTmV3SW5k
ZXhJbkNvbnRhaW5lcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQ29udGVudEluc2VydGVkKG5z
SVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNJQ29udGVudCogYUNvbnRhaW5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lD
b250ZW50KiBhQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhSW5k
ZXhJbkNvbnRhaW5lcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQ29udGVudFJlcGxhY2VkKG5z
SVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNJQ29udGVudCogYUNvbnRhaW5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lD
b250ZW50KiBhT2xkQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVu
dCogYU5ld0NoaWxkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIgYUluZGV4
SW5Db250YWluZXIpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRlbnRSZW1vdmVkKG5zSVBy
ZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lD
b250ZW50KiBhQ29udGFpbmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVu
dCogYUNoaWxkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhSW5kZXhJbkNv
bnRhaW5lcikgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IENvbnRlbnRDaGFuZ2VkKG5zSVByZXND
b250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250
ZW50KiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN1cHBvcnRzKiBh
U3ViQ29udGVudCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQ29udGVudFN0YXRlc0NoYW5nZWQo
bnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSUNvbnRlbnQqIGFDb250ZW50MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSUNvbnRlbnQqIGFDb250ZW50MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBSSW50MzIgYVN0YXRlTWFzaykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQXR0cmli
dXRlQ2hhbmdlZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBSSW50MzIgYU5hbWVTcGFjZUlELAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lBdG9tKiBhQXR0cmlidXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUklu
dDMyIGFNb2RUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0NoYW5nZUhpbnQg
YUhpbnQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgU3R5bGVSdWxlQ2hhbmdlZChuc0lQcmVz
Q29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lT
dHlsZVNoZWV0KiBhU3R5bGVTaGVldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJ
U3R5bGVSdWxlKiBhU3R5bGVSdWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0No
YW5nZUhpbnQgYUhpbnQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFN0eWxlUnVsZUFkZGVkKG5z
SVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lTdHlsZVNoZWV0KiBhU3R5bGVTaGVldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z
SVN0eWxlUnVsZSogYVN0eWxlUnVsZSkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU3R5bGVSdWxl
UmVtb3ZlZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lTdHlsZVNoZWV0KiBhU3R5bGVTaGVldCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJU3R5bGVSdWxlKiBhU3R5bGVSdWxlKSA9IDA7CgoKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBDYW50UmVuZGVyUmVwbGFjZWRFbGVtZW50KG5zSVByZXNDb250ZXh0KiBhUHJl
c0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1l
KiBhRnJhbWUpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlQ29udGludWluZ0ZyYW1l
KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuc0lGcmFtZSogYVBhcmVudEZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSUZyYW1lKiogYUNvbnRpbnVpbmdGcmFtZSkgPSAwOwojIDI4MiAiLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL2xheW91dC9uc0lTdHlsZVNldC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgRmlu
ZFByaW1hcnlGcmFtZUZvcihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZU1hbmFnZXIqIGFGcmFtZU1hbmFnZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnQqIGFDb250ZW50LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSoqIGFGcmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNGaW5kRnJhbWVIaW50KiBhSGludD0wKSA9IDA7CiMg
MzAwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVN0eWxlU2V0LmgiCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRJbnNlcnRpb25Qb2ludChuc0lQcmVzU2hlbGwqIGFQcmVzU2hlbGwsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYVBhcmVudEZyYW1lLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNoaWxkQ29udGVudCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiogYUluc2VydGlvblBvaW50KSA9
IDA7CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRTdHlsZVJ1bGVTdXBwbGllcihuc0lTdHlsZVJ1
bGVTdXBwbGllciogYVN1cHBsaWVyKT0wOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3R5bGVSdWxl
U3VwcGxpZXIobnNJU3R5bGVSdWxlU3VwcGxpZXIqKiBhU3VwcGxpZXIpPTA7CgoKCgoKCgogIHZp
cnR1YWwgdm9pZCBSZXNldFVuaXF1ZVN0eWxlSXRlbXModm9pZCkgPSAwOwoKCgogIHZpcnR1YWwg
bnNyZXN1bHQgQXR0cmlidXRlQWZmZWN0c1N0eWxlKG5zSUF0b20gKmFBdHRyaWJ1dGUsIG5zSUNv
bnRlbnQgKmFDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9v
bCAmYUFmZmVjdHMpID0gMDsKfTsKCmV4dGVybiBuc3Jlc3VsdAogIE5TX05ld1N0eWxlU2V0KG5z
SVN0eWxlU2V0KiogYUluc3RhbmNlUHRyUmVzdWx0KTsKCgpjbGFzcyBuc1VuaXF1ZVN0eWxlSXRl
bXMgOiBwcml2YXRlIG5zVm9pZEFycmF5CnsKcHVibGljIDoKCiAgc3RhdGljIG5zVW5pcXVlU3R5
bGVJdGVtcyAqR2V0VW5pcXVlU3R5bGVJdGVtcyggdm9pZCApewogICAgaWYobUluc3RhbmNlID09
IDApewoKCgogICAgICBuZXcgbnNVbmlxdWVTdHlsZUl0ZW1zOwoKICAgICAgOwoKCgogICAgfQog
ICAgcmV0dXJuIG1JbnN0YW5jZTsKICB9CgogIHZvaWQgKkdldEl0ZW0odm9pZCAqYVB0cil7CiAg
ICBQUkludDMyIGluZGV4ID0gbnNWb2lkQXJyYXk6OkluZGV4T2YoYVB0cik7CiAgICBpZiggaW5k
ZXggIT0gLTEpewogICAgICByZXR1cm4gbnNWb2lkQXJyYXk6OkVsZW1lbnRBdChpbmRleCk7CiAg
ICB9IGVsc2UgewogICAgICByZXR1cm4gMDsKICAgIH0KICB9CgogIFBSQm9vbCBBZGRJdGVtKHZv
aWQgKmFQdHIpewogICAgaWYobnNWb2lkQXJyYXk6OkluZGV4T2YoYVB0cikgPT0gLTEpewogICAg
ICByZXR1cm4gbnNWb2lkQXJyYXk6OkFwcGVuZEVsZW1lbnQoYVB0cik7CiAgICB9IGVsc2Ugewog
ICAgICByZXR1cm4gMDsKICAgIH0KICB9CgogIFBSQm9vbCBSZW1vdmVJdGVtKHZvaWQgKmFQdHIp
ewogICAgcmV0dXJuIG5zVm9pZEFycmF5OjpSZW1vdmVFbGVtZW50KGFQdHIpOwogIH0KCiAgUFJJ
bnQzMiBDb3VudCh2b2lkKXsKICAgIHJldHVybiBuc1ZvaWRBcnJheTo6Q291bnQoKTsKICB9Cgog
IHZvaWQgQ2xlYXIodm9pZCl7CiAgICBuc1ZvaWRBcnJheTo6Q2xlYXIoKTsKICB9CnByb3RlY3Rl
ZDoKCiAgbnNVbmlxdWVTdHlsZUl0ZW1zKCBjb25zdCBuc1VuaXF1ZVN0eWxlSXRlbXMmIHNyYyk7
CiAgbnNVbmlxdWVTdHlsZUl0ZW1zJiBvcGVyYXRvciA9KGNvbnN0IG5zVW5pcXVlU3R5bGVJdGVt
cyYgc3JjKTsKCgogIG5zVW5pcXVlU3R5bGVJdGVtcyh2b2lkKSA6IG5zVm9pZEFycmF5KCl7CiAg
ICA7CiAgICBtSW5zdGFuY2U9dGhpczsKICB9CgogIHN0YXRpYyBuc1VuaXF1ZVN0eWxlSXRlbXMg
Km1JbnN0YW5jZTsKfTsKIyAzOTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJU3R5
bGVTZXQuaCIKc3RydWN0IG5zRmluZEZyYW1lSGludAp7CiAgbnNJRnJhbWUgKm1QcmltYXJ5RnJh
bWVGb3JQcmV2U2libGluZzsKICBuc0ZpbmRGcmFtZUhpbnQoKSB7CiAgICBtUHJpbWFyeUZyYW1l
Rm9yUHJldlNpYmxpbmcgPSAwOwogIH07Cn07CiMgNTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9j
b250ZW50L25zU3R5bGVTdHJ1Y3QuaCIgMgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlv
dXQvbnNJUHJlc0NvbnRleHQuaCIgMQojIDQ0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0
L25zSVByZXNDb250ZXh0LmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVJl
cXVlc3QuaCIgMQojIDE3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJUmVxdWVzdC5o
IgpjbGFzcyBuc0lMb2FkR3JvdXA7Cgp0eXBlZGVmIFBSVWludDMyIG5zTG9hZEZsYWdzOwojIDM0
ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJUmVxdWVzdC5oIgpjbGFzcyBuc0lSZXF1
ZXN0IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlE
JiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGVmNmJmYmQyLCAweGZkNDYs
IDB4NDhkOCwgeyAweDk2LCAweGI3LCAweDlmLCAweDhmLCAweDBmLCAweGQzLCAweDg3LCAweGZl
IH19OyByZXR1cm4gaWlkO30KCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmFtZShuc0FDU3Ry
aW5nICYgYU5hbWUpID0gMDsKIyA1MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVJl
cXVlc3QuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IElzUGVuZGluZyhQUkJvb2wgKl9yZXR2YWwpID0g
MDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U3RhdHVzKG5zcmVzdWx0ICphU3RhdHVzKSA9
IDA7CiMgNzUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lSZXF1ZXN0LmgiCiAgdmly
dHVhbCBuc3Jlc3VsdCBDYW5jZWwobnNyZXN1bHQgYVN0YXR1cykgPSAwOwojIDg5ICIuLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbmVja28vbnNJUmVxdWVzdC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU3Vz
cGVuZCh2b2lkKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVzdW1lKHZvaWQpID0g
MDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMb2FkR3JvdXAobnNJTG9hZEdyb3VwICog
KmFMb2FkR3JvdXApID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldExvYWRHcm91cChuc0lMb2Fk
R3JvdXAgKiBhTG9hZEdyb3VwKSA9IDA7CiMgMTE1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVj
a28vbnNJUmVxdWVzdC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TG9hZEZsYWdzKG5zTG9hZEZs
YWdzICphTG9hZEZsYWdzKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRMb2FkRmxhZ3MobnNM
b2FkRmxhZ3MgYUxvYWRGbGFncykgPSAwOwoKCgoKCgoKICBlbnVtIHsgTE9BRF9OT1JNQUwgPSAw
VSB9OwoKCgoKCiAgZW51bSB7IExPQURfQkFDS0dST1VORCA9IDFVIH07CiMgMTM5ICIuLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbmVja28vbnNJUmVxdWVzdC5oIgogIGVudW0geyBJTkhJQklUX0NBQ0hJ
TkcgPSAxMjhVIH07CgoKCgoKCiAgZW51bSB7IElOSElCSVRfUEVSU0lTVEVOVF9DQUNISU5HID0g
MjU2VSB9OwojIDE1NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVJlcXVlc3QuaCIK
ICBlbnVtIHsgTE9BRF9CWVBBU1NfQ0FDSEUgPSA1MTJVIH07CgoKCgoKCgogIGVudW0geyBMT0FE
X0ZST01fQ0FDSEUgPSAxMDI0VSB9OwojIDE4OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tv
L25zSVJlcXVlc3QuaCIKICBlbnVtIHsgVkFMSURBVEVfQUxXQVlTID0gMjA0OFUgfTsKCiAgZW51
bSB7IFZBTElEQVRFX05FVkVSID0gNDA5NlUgfTsKCiAgZW51bSB7IFZBTElEQVRFX09OQ0VfUEVS
X1NFU1NJT04gPSA4MTkyVSB9OwoKfTsKIyA0NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91
dC9uc0lQcmVzQ29udGV4dC5oIiAyCgoKY2xhc3MgbnNCaWRpUHJlc1V0aWxzOwoKCnN0cnVjdCBu
c0ZvbnQ7CnN0cnVjdCBuc1JlY3Q7CgpjbGFzcyBpbWdJUmVxdWVzdDsKCmNsYXNzIG5zSUNvbnRl
bnQ7CmNsYXNzIG5zSURvY3VtZW50OwpjbGFzcyBuc0lEZXZpY2VDb250ZXh0OwpjbGFzcyBuc0lG
b250TWV0cmljczsKY2xhc3MgbnNJRnJhbWU7CmNsYXNzIG5zSUltYWdlOwpjbGFzcyBuc0lMaW5r
SGFuZGxlcjsKY2xhc3MgbnNJUHJlc1NoZWxsOwpjbGFzcyBuc0lQcmVmOwpjbGFzcyBuc0lTdHls
ZUNvbnRleHQ7CmNsYXNzIG5zSUF0b207CmNsYXNzIG5zU3RyaW5nOwpjbGFzcyBuc0lFdmVudFN0
YXRlTWFuYWdlcjsKY2xhc3MgbnNJVVJJOwpjbGFzcyBuc0lMb29rQW5kRmVlbDsKY2xhc3MgbnNJ
SU9TZXJ2aWNlOwpjbGFzcyBuc0lDU1NQc2V1ZG9Db21wYXJhdG9yOwpjbGFzcyBuc0lMYW5ndWFn
ZUF0b207CmNsYXNzIG5zSVRoZW1lOwpzdHJ1Y3QgbnNTdHlsZVN0cnVjdDsKc3RydWN0IG5zU3R5
bGVCYWNrZ3JvdW5kOwojIDg1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXND
b250ZXh0LmgiCmVudW0gbnNXaWRnZXRSZW5kZXJpbmcgewogIGVXaWRnZXRSZW5kZXJpbmdfTmF0
aXZlID0gMSwKICBlV2lkZ2V0UmVuZGVyaW5nX0dmeCA9IDIsCiAgZVdpZGdldFJlbmRlcmluZ19Q
YXJ0aWFsR2Z4ID0gMwp9OwoKZW51bSBuc1dpZGdldFR5cGUgewogIGVXaWRnZXRUeXBlX0J1dHRv
biA9IDEsCiAgZVdpZGdldFR5cGVfQ2hlY2tib3ggPSAyLAogIGVXaWRnZXRUeXBlX1JhZGlvID0g
MywKICBlV2lkZ2V0VHlwZV9UZXh0ID0gNAp9OwoKZW51bSBuc0xhbmd1YWdlU3BlY2lmaWNUcmFu
c2Zvcm1UeXBlIHsKICBlTGFuZ3VhZ2VTcGVjaWZpY1RyYW5zZm9ybVR5cGVfVW5rbm93biA9IC0x
LAogIGVMYW5ndWFnZVNwZWNpZmljVHJhbnNmb3JtVHlwZV9Ob25lID0gMCwKICBlTGFuZ3VhZ2VT
cGVjaWZpY1RyYW5zZm9ybVR5cGVfSmFwYW5lc2UsCiAgZUxhbmd1YWdlU3BlY2lmaWNUcmFuc2Zv
cm1UeXBlX0tvcmVhbgp9OwoKCmNvbnN0IFBSVWludDMyIGtQcmVzQ29udGV4dF9Vc2VEb2N1bWVu
dENvbG9ycyA9IDB4MDE7CmNvbnN0IFBSVWludDMyIGtQcmVzQ29udGV4dF9Vc2VEb2N1bWVudEZv
bnRzID0gMHgwMjsKY29uc3QgUFJVaW50MzIga1ByZXNDb250ZXh0X1VuZGVybGluZUxpbmtzID0g
MHgwMzsKCgpjb25zdCBQUlVpbnQzMiBrUHJlc0NvbnRleHRfTWluaW11bUZvbnRTaXplID0gMHgw
MTsKCgoKY29uc3QgUFJVaW50OCBrUHJlc0NvbnRleHRfRGVmYXVsdFZhcmlhYmxlRm9udF9JRCA9
IDB4MDA7CmNvbnN0IFBSVWludDgga1ByZXNDb250ZXh0X0RlZmF1bHRGaXhlZEZvbnRfSUQgPSAw
eDAxOwoKCgpjbGFzcyBuc0lQcmVzQ29udGV4dCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1Ymxp
YzoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlk
ID0geyAweDBhNWQxMmUwLCAweDk0NGUsIDB4MTFkMSwgezB4OTMsIDB4MjMsIDB4MDAsIDB4ODAs
IDB4NWYsIDB4OGEsIDB4ZGQsIDB4MzJ9IH07IHJldHVybiBpaWQ7fQoKCgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEluaXQobnNJRGV2aWNlQ29udGV4dCogYURldmljZUNvbnRleHQpID0gMDsKCgoKCgog
IHZpcnR1YWwgbnNyZXN1bHQgU2V0U2hlbGwobnNJUHJlc1NoZWxsKiBhU2hlbGwpID0gMDsKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTaGVsbChuc0lQcmVzU2hlbGwqKiBhUmVzdWx0KSA9IDA7
CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Q29tcGF0aWJpbGl0eU1vZGUobnNDb21wYXRp
YmlsaXR5KiBhTW9kZVJlc3VsdCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q29tcGF0aWJp
bGl0eU1vZGUobnNDb21wYXRpYmlsaXR5IGFNb2RlKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0V2lkZ2V0UmVuZGVyaW5nTW9kZShuc1dpZGdldFJlbmRlcmluZyogYU1vZGVSZXN1bHQp
ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFdpZGdldFJlbmRlcmluZ01vZGUobnNXaWRnZXRS
ZW5kZXJpbmcgYU1vZGUpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRJbWFnZUFuaW1h
dGlvbk1vZGUoUFJVaW50MTYqIGFNb2RlUmVzdWx0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT
ZXRJbWFnZUFuaW1hdGlvbk1vZGUoUFJVaW50MTYgYU1vZGUpID0gMDsKCgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRJbWFnZUxvYWRGbGFncyhuc0xvYWRGbGFncyYgYUxvYWRGbGFncykgPSAwOwoK
CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExvb2tBbmRGZWVsKG5zSUxvb2tBbmRGZWVsKiogYUxv
b2tBbmRGZWVsKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0SU9TZXJ2aWNlKG5zSUlP
U2VydmljZSoqIGFJT1NlcnZpY2UpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCYXNl
VVJMKG5zSVVSSSoqIGFVUkxSZXN1bHQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRN
ZWRpdW0obnNJQXRvbSoqIGFNZWRpdW1SZXN1bHQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBDbGVhclN0eWxlRGF0YUFuZFJlZmxvdyh2b2lkKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVz
dWx0IFJlc29sdmVTdHlsZUNvbnRleHRGb3IobnNJQ29udGVudCogYUNvbnRlbnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYVBhcmVudENvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCoq
IGFSZXN1bHQpID0gMDsKIyAyMTEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJUHJl
c0NvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFJlc29sdmVTdHlsZUNvbnRleHRGb3JOb25F
bGVtZW50KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNvbnRl
eHQqIGFQYXJlbnRDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lTdHlsZUNvbnRleHQqKiBhUmVzdWx0KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBS
ZXNvbHZlUHNldWRvU3R5bGVDb250ZXh0Rm9yKG5zSUNvbnRlbnQqIGFQYXJlbnRDb250ZW50LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhUHNldWRv
VGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHlsZUNv
bnRleHQqIGFQYXJlbnRDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0lTdHlsZUNvbnRleHQqKiBhUmVzdWx0KSA9IDA7CiMgMjMzICIuLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXNDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBS
ZXNvbHZlUHNldWRvU3R5bGVXaXRoQ29tcGFyYXRvcihuc0lDb250ZW50KiBhUGFyZW50Q29udGVu
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20q
IGFQc2V1ZG9UYWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lTdHlsZUNvbnRleHQqIGFQYXJlbnRDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ1NTUHNldWRvQ29tcGFyYXRvciogYUNvbXBhcmF0
b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lTdHls
ZUNvbnRleHQqKiBhUmVzdWx0KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUHJvYmVQ
c2V1ZG9TdHlsZUNvbnRleHRGb3IobnNJQ29udGVudCogYVBhcmVudENvbnRlbnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhUHNldWRvVGFnLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiBhUGFy
ZW50Q29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0
eWxlQ29udGV4dCoqIGFSZXN1bHQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFhC
TEJpbmRpbmdVUkwobnNJQ29udGVudCogYUNvbnRlbnQsIG5zQVN0cmluZyYgYVJlc3VsdCkgPSAw
OwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZVBhcmVudFN0eWxlQ29udGV4dChuc0lGcmFtZSog
YUZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0
KiBhTmV3UGFyZW50Q29udGV4dCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBbGxvY2F0ZUZy
b21TaGVsbChzaXplX3QgYVNpemUsIHZvaWQqKiBhUmVzdWx0KSA9IDA7CiAgdmlydHVhbCBuc3Jl
c3VsdCBGcmVlVG9TaGVsbChzaXplX3QgYVNpemUsIHZvaWQqIGFGcmVlQ2h1bmspID0gMDsKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNZXRyaWNzRm9yKGNvbnN0IG5zRm9udCYgYUZvbnQsIG5z
SUZvbnRNZXRyaWNzKiogYVJlc3VsdCkgPSAwOwoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXREZWZh
dWx0Rm9udChQUlVpbnQ4IGFGb250SUQsIGNvbnN0IG5zRm9udCoqIGFSZXN1bHQpID0gMDsKCiAg
dmlydHVhbCBuc3Jlc3VsdCBTZXREZWZhdWx0Rm9udChQUlVpbnQ4IGFGb250SUQsIGNvbnN0IG5z
Rm9udCYgYUZvbnQpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldENhY2hlZEJvb2xQ
cmVmKFBSVWludDMyIGFQcmVmVHlwZSwgUFJCb29sJiBhVmFsdWUpID0gMDsKCgoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldENhY2hlZEludFByZWYoUFJVaW50MzIgYVByZWZUeXBlLCBQUkludDMy
JiBhVmFsdWUpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGb250U2NhbGVyKFBSSW50
MzIqIGFSZXN1bHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEZvbnRTY2FsZXIoUFJJbnQz
MiBhU2NhbGVyKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGVmYXVsdENvbG9yKG5z
Y29sb3IqIGFDb2xvcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGVmYXVsdEJhY2tncm91
bmRDb2xvcihuc2NvbG9yKiBhQ29sb3IpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERlZmF1
bHRMaW5rQ29sb3IobnNjb2xvciogYUNvbG9yKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRE
ZWZhdWx0VmlzaXRlZExpbmtDb2xvcihuc2NvbG9yKiBhQ29sb3IpID0gMDsKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldEZvY3VzQmFja2dyb3VuZENvbG9yKG5zY29sb3IqIGFDb2xvcikgPSAwOwogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0Rm9jdXNUZXh0Q29sb3IobnNjb2xvciogYUNvbG9yKSA9IDA7CiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRVc2VGb2N1c0NvbG9ycyhQUkJvb2wmIHVzZUZvY3VzQ29sb3Jz
KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGb2N1c1JpbmdXaWR0aChQUlVpbnQ4ICpmb2N1
c1JpbmdXaWR0aCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rm9jdXNSaW5nT25Bbnl0aGlu
ZyhQUkJvb2wmIGZvY3VzUmluZ09uQW55dGhpbmcpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQg
U2V0RGVmYXVsdENvbG9yKG5zY29sb3IgYUNvbG9yKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBT
ZXREZWZhdWx0QmFja2dyb3VuZENvbG9yKG5zY29sb3IgYUNvbG9yKSA9IDA7CiAgdmlydHVhbCBu
c3Jlc3VsdCBTZXREZWZhdWx0TGlua0NvbG9yKG5zY29sb3IgYUNvbG9yKSA9IDA7CiAgdmlydHVh
bCBuc3Jlc3VsdCBTZXREZWZhdWx0VmlzaXRlZExpbmtDb2xvcihuc2NvbG9yIGFDb2xvcikgPSAw
OwojIDMyNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lQcmVzQ29udGV4dC5oIgog
IHZpcnR1YWwgbnNyZXN1bHQgTG9hZEltYWdlKGNvbnN0IG5zU3RyaW5nJiBhVVJMLAogICAgICAg
ICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhVGFyZ2V0RnJhbWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgaW1nSVJlcXVlc3QgKiphUmVxdWVzdCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBTdG9wSW1hZ2VzRm9yKG5zSUZyYW1lKiBhVGFyZ2V0RnJhbWUpID0gMDsKCiAgdmlydHVhbCBu
c3Jlc3VsdCBTZXRDb250YWluZXIobnNJU3VwcG9ydHMqIGFDb250YWluZXIpID0gMDsKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRDb250YWluZXIobnNJU3VwcG9ydHMqKiBhUmVzdWx0KSA9IDA7CgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldExpbmtIYW5kbGVyKG5zSUxpbmtIYW5kbGVyKiBhSGFuZGxl
cikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGlua0hhbmRsZXIobnNJTGlua0hhbmRsZXIq
KiBhUmVzdWx0KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VmlzaWJsZUFyZWEo
bnNSZWN0JiBhUmVzdWx0KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFZpc2libGVB
cmVhKGNvbnN0IG5zUmVjdCYgcikgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1BhZ2lu
YXRlZChQUkJvb2wqIGFSZXN1bHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGFn
aW5hdGVkU2Nyb2xsaW5nKFBSQm9vbCBhUmVzdWx0KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldFBhZ2luYXRlZFNjcm9sbGluZyhQUkJvb2wqIGFSZXN1bHQpID0gMDsKIyAzODMgIi4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJUHJlc0NvbnRleHQuaCIKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldFBhZ2VEaW0obnNSZWN0KiBhQWN0dWFsUmVjdCwgbnNSZWN0KiBhQWRqUmVjdCkg
PSAwOwojIDM5MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lQcmVzQ29udGV4dC5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0UGFnZURpbShuc1JlY3QqIGFSZWN0KSA9IDA7CgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0UGl4ZWxzVG9Ud2lwcyhmbG9hdCogYVJlc3VsdCkgY29uc3QgPSAw
OwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFR3aXBzVG9QaXhlbHMoZmxvYXQqIGFSZXN1bHQpIGNv
bnN0ID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRUd2lwc1RvUGl4ZWxzRm9yRm9udHMoZmxv
YXQqIGFSZXN1bHQpIGNvbnN0ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFNjYWxl
ZFBpeGVsc1RvVHdpcHMoZmxvYXQqIGFTY2FsZSkgY29uc3QgPSAwOwoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXREZXZpY2VDb250ZXh0KG5zSURldmljZUNvbnRleHQqKiBhUmVzdWx0KSBjb25zdCA9
IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RXZlbnRTdGF0ZU1hbmFnZXIobnNJRXZlbnRTdGF0
ZU1hbmFnZXIqKiBhTWFuYWdlcikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFuZ3VhZ2Uo
bnNJTGFuZ3VhZ2VBdG9tKiogYUxhbmd1YWdlKSA9IDA7CiMgNDIxICIuLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbGF5b3V0L25zSVByZXNDb250ZXh0LmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRMYW5n
dWFnZVNwZWNpZmljVHJhbnNmb3JtVHlwZSgKICAgICAgICAgICAgICBuc0xhbmd1YWdlU3BlY2lm
aWNUcmFuc2Zvcm1UeXBlKiBhVHlwZSkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJh
Y2tncm91bmRJbWFnZURyYXcoUFJCb29sICZhQ2FuRHJhdyk9MDsKICB2aXJ0dWFsIG5zcmVzdWx0
IFNldEJhY2tncm91bmRJbWFnZURyYXcoUFJCb29sIGFDYW5EcmF3KT0wOwogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0QmFja2dyb3VuZENvbG9yRHJhdyhQUkJvb2wgJmFDYW5EcmF3KT0wOwogIHZpcnR1
YWwgbnNyZXN1bHQgU2V0QmFja2dyb3VuZENvbG9yRHJhdyhQUkJvb2wgYUNhbkRyYXcpPTA7CiMg
NDQwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXNDb250ZXh0LmgiCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRCaWRpRW5hYmxlZChQUkJvb2wqIGFCaWRpRW5hYmxlZCkgY29uc3Qg
PSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QmlkaUVuYWJsZWQoUFJCb29sIGFCaWRp
RW5hYmxlZCkgY29uc3QgPSAwOwojIDQ2MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9u
c0lQcmVzQ29udGV4dC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0VmlzdWFsTW9kZShQUkJvb2wg
YUlzVmlzdWFsKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1Zpc3VhbE1vZGUoUFJC
b29sJiBhSXNWaXN1YWwpIGNvbnN0ID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEJp
ZGlVdGlscyhuc0JpZGlQcmVzVXRpbHMqKiBhQmlkaVV0aWxzKSA9IDA7CgoKCgogIHZpcnR1YWwg
bnNyZXN1bHQgU2V0QmlkaShQUlVpbnQzMiBhQmlkaU9wdGlvbnMsIFBSQm9vbCBhRm9yY2VSZWZs
b3cgPSAwKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmlkaShQUlVpbnQzMiogYUJp
ZGlPcHRpb25zKSBjb25zdCA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1Zpc1JUTChQ
UkJvb2wgJmFSZXN1bHQpIGNvbnN0ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNBcmFi
aWNFbmNvZGluZyhQUkJvb2wgJmFSZXN1bHQpIGNvbnN0ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgU2V0SXNCaWRpU3lzdGVtKFBSQm9vbCBhSXNCaWRpKSA9IDA7CgoKCgoKICB2aXJ0dWFs
IG5zcmVzdWx0IEdldElzQmlkaVN5c3RlbShQUkJvb2wgJmFSZXN1bHQpIGNvbnN0ID0gMDsKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRCaWRpQ2hhcnNldChuc0FTdHJpbmcgJmFDaGFyU2V0KSBj
b25zdCA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SXNSZW5kZXJpbmdPbmx5U2Vs
ZWN0aW9uKFBSQm9vbCBhUmVzdWx0KSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBJc1JlbmRlcmlu
Z09ubHlTZWxlY3Rpb24oUFJCb29sKiBhUmVzdWx0KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0VGhlbWUobnNJVGhlbWUqKiBhUmVzdWx0KSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgVGhlbWVDaGFuZ2VkKCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFN5c0NvbG9y
Q2hhbmdlZCgpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEZpbmRGcmFtZUJhY2tncm91
bmQobnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbnNTdHlsZUJhY2tncm91bmQqKiBhQmFja2dyb3VuZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJCb29sKiBhSXNDYW5hdnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBSQm9vbCogYUZvdW5kQmFja2dyb3VuZCkgPSAwOwoKCgoKCn07CiMgNTY5ICIuLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXNDb250ZXh0LmgiCmV4dGVybiBuc3Jlc3Vs
dAogIE5TX05ld0dhbGxleUNvbnRleHQobnNJUHJlc0NvbnRleHQqKiBhSW5zdGFuY2VQdHJSZXN1
bHQpOwojIDUyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc1N0eWxlU3RydWN0Lmgi
IDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXNTaGVsbC5oIiAxCiMg
NDMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJUHJlc1NoZWxsLmgiCiMgMSAiLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc1JlZmxvd1R5cGUuaCIgMQojIDQxICIuLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbGF5b3V0L25zUmVmbG93VHlwZS5oIgplbnVtIG5zUmVmbG93VHlwZSB7
CgoKCgoKCgogIGVSZWZsb3dUeXBlX0NvbnRlbnRDaGFuZ2VkLAoKCgoKCgoKICBlUmVmbG93VHlw
ZV9TdHlsZUNoYW5nZWQsCgoKCgogIGVSZWZsb3dUeXBlX1JlZmxvd0RpcnR5LAoKCgoKICBlUmVm
bG93VHlwZV9Vc2VyRGVmaW5lZAp9OwojIDQ0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0
L25zSVByZXNTaGVsbC5oIiAyCgoKY2xhc3MgbnNJQXRvbTsKY2xhc3MgbnNJQ29udGVudDsKY2xh
c3MgbnNJQ29udGVudEl0ZXJhdG9yOwpjbGFzcyBuc0lEb2N1bWVudDsKY2xhc3MgbnNJRG9jdW1l
bnRPYnNlcnZlcjsKY2xhc3MgbnNJRnJhbWU7CmNsYXNzIG5zSVByZXNDb250ZXh0OwpjbGFzcyBu
c0lTdHlsZVNldDsKY2xhc3MgbnNJVmlld01hbmFnZXI7CmNsYXNzIG5zSURldmljZUNvbnRleHQ7
CmNsYXNzIG5zSVJlbmRlcmluZ0NvbnRleHQ7CmNsYXNzIG5zSVBhZ2VTZXF1ZW5jZUZyYW1lOwpj
bGFzcyBuc1N0cmluZzsKY2xhc3MgbnNBU3RyaW5nOwpjbGFzcyBuc1N0cmluZ0FycmF5OwpjbGFz
cyBuc0lDYXJldDsKY2xhc3MgbnNJU3R5bGVDb250ZXh0OwpjbGFzcyBuc0lGcmFtZVNlbGVjdGlv
bjsKY2xhc3MgbnNJRnJhbWVNYW5hZ2VyOwpjbGFzcyBuc0lMYXlvdXRIaXN0b3J5U3RhdGU7CmNs
YXNzIG5zSUFyZW5hOwpjbGFzcyBuc0lSZWZsb3dDYWxsYmFjazsKY2xhc3MgbnNJU3VwcG9ydHNB
cnJheTsKY2xhc3MgbnNJRE9NTm9kZTsKY2xhc3MgbnNIVE1MUmVmbG93Q29tbWFuZDsKIyAxMDYg
Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJUHJlc1NoZWxsLmgiCmVudW0gbnNBdHRy
aWJ1dGVDaGFuZ2VUeXBlIHsKICBlQ2hhbmdlVHlwZV9TZXQgPSAwLAogIGVDaGFuZ2VUeXBlX1Jl
bW92ZSA9IDEKfTsKIyAxMjIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJUHJlc1No
ZWxsLmgiCmNsYXNzIG5zSVByZXNTaGVsbCA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CnB1YmxpYzoK
ICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0g
eyAweDc2ZTc5YzYwLCAweDk0NGUsIDB4MTFkMSwgezB4OTMsIDB4MjMsIDB4MDAsIDB4ODAsIDB4
NWYsIDB4OGEsIDB4ZGQsIDB4MzJ9IH07IHJldHVybiBpaWQ7fQoKICB2aXJ0dWFsIG5zcmVzdWx0
IEluaXQobnNJRG9jdW1lbnQqIGFEb2N1bWVudCwKICAgICAgICAgICAgICAgICAgbnNJUHJlc0Nv
bnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgbnNJVmlld01hbmFnZXIqIGFW
aWV3TWFuYWdlciwKICAgICAgICAgICAgICAgICAgbnNJU3R5bGVTZXQqIGFTdHlsZVNldCwKICAg
ICAgICAgICAgICAgICAgbnNDb21wYXRpYmlsaXR5IGFDb21wYXRNb2RlKSA9IDA7CiMgMTM5ICIu
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXNTaGVsbC5oIgogIHZpcnR1YWwgbnNy
ZXN1bHQgRGVzdHJveSgpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBBbGxvY2F0ZUZyYW1l
KHNpemVfdCBhU2l6ZSwgdm9pZCoqIGFSZXN1bHQpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEZy
ZWVGcmFtZShzaXplX3QgYVNpemUsIHZvaWQqIGFGcmVlQ2h1bmspID0gMDsKCgogIHZpcnR1YWwg
bnNyZXN1bHQgUHVzaFN0YWNrTWVtb3J5KCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgUG9wU3Rh
Y2tNZW1vcnkoKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBBbGxvY2F0ZVN0YWNrTWVtb3J5KHNp
emVfdCBhU2l6ZSwgdm9pZCoqIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRE
b2N1bWVudChuc0lEb2N1bWVudCoqIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBH
ZXRQcmVzQ29udGV4dChuc0lQcmVzQ29udGV4dCoqIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRWaWV3TWFuYWdlcihuc0lWaWV3TWFuYWdlcioqIGFSZXN1bHQpID0gMDsKCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRTdHlsZVNldChuc0lTdHlsZVNldCoqIGFSZXN1bHQpID0gMDsK
CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRBY3RpdmVBbHRlcm5hdGVTdHlsZVNoZWV0KG5zU3RyaW5n
JiBhU2hlZXRUaXRsZSkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IFNlbGVjdEFsdGVybmF0ZVN0
eWxlU2hlZXQoY29uc3QgbnNTdHJpbmcmIGFTaGVldFRpdGxlKSA9IDA7CgoKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBSZWNvbnN0cnVjdFN0eWxlRGF0YShQUkJvb2wgYVJlYnVpbGRSdWxlVHJlZSkg
PSAwOwojIDE3OSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lQcmVzU2hlbGwuaCIK
ICB2aXJ0dWFsIG5zcmVzdWx0IFNldFByZWZlcmVuY2VTdHlsZVJ1bGVzKFBSQm9vbCBhRm9yY2VS
ZWZsb3cpID0gMDsKIyAxODggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJUHJlc1No
ZWxsLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBFbmFibGVQcmVmU3R5bGVSdWxlcyhQUkJvb2wgYUVu
YWJsZSwgUFJVaW50OCBhUHJlZlR5cGU9MHhGRikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQXJl
UHJlZlN0eWxlUnVsZXNFbmFibGVkKFBSQm9vbCYgYUVuYWJsZWQpID0gMDsKCgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgTGlzdEFsdGVybmF0ZVN0eWxlU2hlZXRzKG5zU3RyaW5nQXJyYXkmIGFUaXRs
ZUxpc3QpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnJhbWVTZWxlY3Rpb24obnNJ
RnJhbWVTZWxlY3Rpb24qKiBhU2VsZWN0aW9uKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEJl
Z2luT2JzZXJ2aW5nRG9jdW1lbnQoKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEVuZE9ic2Vy
dmluZ0RvY3VtZW50KCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RGlkSW5pdGlh
bFJlZmxvdyhQUkJvb2wgKmFEaWRJbml0aWFsUmVmbG93KSA9IDA7CiMgMjIzICIuLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXNTaGVsbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgSW5p
dGlhbFJlZmxvdyhuc2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVpZ2h0KSA9IDA7CgoKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IFJlc2l6ZVJlZmxvdyhuc2Nvb3JkIGFXaWR0aCwgbnNjb29yZCBhSGVp
Z2h0KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU3R5bGVDaGFuZ2VSZWZsb3coKSA9IDA7
CgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Um9vdEZyYW1lKG5zSUZyYW1lKiogYUZyYW1lKSBjb25z
dCA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBhZ2VTZXF1ZW5jZUZyYW1lKG5zSVBh
Z2VTZXF1ZW5jZUZyYW1lKiogYVJlc3VsdCkgY29uc3QgPSAwOwojIDI1OCAiLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL2xheW91dC9uc0lQcmVzU2hlbGwuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBy
aW1hcnlGcmFtZUZvcihuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuc0lGcmFtZSoqIGFQcmltYXJ5RnJhbWUpIGNvbnN0ID0gMDsKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgR2V0U3R5bGVDb250ZXh0Rm9yKG5zSUZyYW1lKiBhRnJhbWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3R5bGVDb250ZXh0KiogYVN0eWxlQ29udGV4
dCkgY29uc3QgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExheW91dE9iamVjdEZv
cihuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lTdXBwb3J0cyoqIGFSZXN1bHQpIGNvbnN0ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0UGxhY2Vob2xkZXJGcmFtZUZvcihuc0lGcmFtZSogYUZyYW1lLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSoqIGFQbGFjZWhvbGRlckZyYW1lKSBjb25zdCA9
IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQXBwZW5kUmVmbG93Q29tbWFuZChuc0hUTUxSZWZs
b3dDb21tYW5kKiBhUmVmbG93Q29tbWFuZCkgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQ2FuY2Vs
UmVmbG93Q29tbWFuZChuc0lGcmFtZSogYVRhcmdldEZyYW1lLCBuc1JlZmxvd1R5cGUqIGFDbWRU
eXBlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBDYW5jZWxBbGxSZWZsb3dDb21tYW5kcygpID0g
MDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWNyZWF0ZUZyYW1lc0Zvcihuc0lDb250ZW50KiBh
Q29udGVudCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgSXNTYWZlVG9GbHVzaChQUkJv
b2wmIGFJc1NhZmVUb0ZsdXNoKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBGbHVzaFBl
bmRpbmdOb3RpZmljYXRpb25zKFBSQm9vbCBhVXBkYXRlVmlld3MpID0gMDsKCgoKCiAgdmlydHVh
bCBuc3Jlc3VsdCBQb3N0RE9NRXZlbnQobnNJQ29udGVudCogYUNvbnRlbnQsIG5zRXZlbnQqIGFF
dmVudCk9MDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBQb3N0QXR0cmlidXRlQ2hhbmdlKG5zSUNv
bnRlbnQqIGFDb250ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMy
IGFOYW1lU3BhY2VJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSog
YU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zU3RyaW5nJiBh
VmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBhTm90aWZ5LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0F0dHJpYnV0ZUNoYW5nZVR5cGUgYVR5
cGUpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBQb3N0UmVmbG93Q2FsbGJhY2sobnNJUmVmbG93
Q2FsbGJhY2sqIGFDYWxsYmFjaykgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgQ2FuY2VsUmVmbG93
Q2FsbGJhY2sobnNJUmVmbG93Q2FsbGJhY2sqIGFDYWxsYmFjaykgPSAwOwoKCgogIHZpcnR1YWwg
bnNyZXN1bHQgQmVnaW5SZWZsb3dCYXRjaGluZygpID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IEVu
ZFJlZmxvd0JhdGNoaW5nKFBSQm9vbCBhRmx1c2hQZW5kaW5nUmVmbG93cykgPSAwOwogIHZpcnR1
YWwgbnNyZXN1bHQgR2V0UmVmbG93QmF0Y2hpbmdTdGF0dXMoUFJCb29sKiBhSXNCYXRjaGluZykg
PSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IENsZWFyRnJhbWVSZWZzKG5zSUZyYW1lKiBhRnJhbWUp
ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlUmVuZGVyaW5nQ29udGV4dChuc0lG
cmFtZSAqYUZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lSZW5k
ZXJpbmdDb250ZXh0KiogYUNvbnRleHQpID0gMDsKIyAzNTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9sYXlvdXQvbnNJUHJlc1NoZWxsLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBDYW50UmVuZGVyUmVw
bGFjZWRFbGVtZW50KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWUpID0gMDsKIyAzNjIgIi4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJUHJlc1NoZWxsLmgiCiAgdmlydHVhbCBuc3Jl
c3VsdCBHb1RvQW5jaG9yKGNvbnN0IG5zQVN0cmluZyYgYUFuY2hvck5hbWUsIFBSQm9vbCBhU2Ny
b2xsKSA9IDA7CiMgMzkyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXNTaGVs
bC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2Nyb2xsRnJhbWVJbnRvVmlldyhuc0lGcmFtZSAqYUZy
YW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludG4gYVZQZXJjZW50LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludG4gYUhQZXJjZW50KSBjb25zdCA9
IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IFNldElnbm9yZUZyYW1lRGVzdHJ1Y3Rpb24oUFJC
b29sIGFJZ25vcmUpID0gMDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IE5vdGlmeURlc3Ryb3lp
bmdGcmFtZShuc0lGcmFtZSogYUZyYW1lKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
RnJhbWVNYW5hZ2VyKG5zSUZyYW1lTWFuYWdlcioqIGFGcmFtZU1hbmFnZXIpIGNvbnN0ID0gMDsK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEb0NvcHkoKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgR2V0TGlua0xvY2F0aW9uKG5zSURPTU5vZGUqIGFOb2RlLCBuc0FTdHJpbmcmIGFMb2NhdGlv
bikgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEltYWdlTG9jYXRpb24obnNJRE9NTm9k
ZSogYU5vZGUsIG5zQVN0cmluZyYgYUxvY2F0aW9uKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1
bHQgRG9Db3B5SW1hZ2VDb250ZW50cyhuc0lET01Ob2RlKiBhTm9kZSkgPSAwOwoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldENhcmV0KG5zSUNhcmV0ICoqYU91dENhcmV0KSA9IDA7CiMgNDQ4ICIu
Li8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXNTaGVsbC5oIgogIHZpcnR1YWwgbnNy
ZXN1bHQgU2V0U2VsZWN0aW9uRmxhZ3MoUFJJbnQxNiBhSW5FbmFibGUpID0gMDsKIyA0NTcgIi4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJUHJlc1NoZWxsLmgiCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRTZWxlY3Rpb25GbGFncyhQUkludDE2ICphT3V0RW5hYmxlZCkgPSAwOwoKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEhhbmRsZUV2ZW50V2l0aFRhcmdldChuc0V2ZW50KiBhRXZlbnQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFGcmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lDb250ZW50KiBhQ29udGVudCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiBhRmxhZ3MsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnNFdmVudFN0YXR1cyogYVN0YXR1cykgPSAwOwoKCgoK
ICB2aXJ0dWFsIG5zcmVzdWx0IEhhbmRsZURPTUV2ZW50V2l0aFRhcmdldChuc0lDb250ZW50KiBh
VGFyZ2V0Q29udGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRXZlbnQqIGFFdmVu
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zRXZlbnRTdGF0dXMqIGFTdGF0dXMpID0g
MDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRFdmVudFRhcmdldEZyYW1lKG5zSUZyYW1lKiog
YUZyYW1lKSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RXZlbnRUYXJnZXRDb250ZW50
KG5zRXZlbnQqIGFFdmVudCwgbnNJQ29udGVudCoqIGFDb250ZW50KSA9IDA7CgoKCgoKICB2aXJ0
dWFsIG5zcmVzdWx0IENhcHR1cmVIaXN0b3J5U3RhdGUobnNJTGF5b3V0SGlzdG9yeVN0YXRlKiog
YUxheW91dEhpc3RvcnlTdGF0ZSwgUFJCb29sIGFMZWF2aW5nUGFnZSA9IDApID0gMDsKICB2aXJ0
dWFsIG5zcmVzdWx0IEdldEhpc3RvcnlTdGF0ZShuc0lMYXlvdXRIaXN0b3J5U3RhdGUqKiBhTGF5
b3V0SGlzdG9yeVN0YXRlKSA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRIaXN0b3J5U3RhdGUo
bnNJTGF5b3V0SGlzdG9yeVN0YXRlKiBhTGF5b3V0SGlzdG9yeVN0YXRlKSA9IDA7CgoKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IElzUmVmbG93TG9ja2VkKFBSQm9vbCogYUlzTG9ja2VkKSA9IDA7CiMg
NTA2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSVByZXNTaGVsbC5oIgogIGVudW0g
R2VuZXJhdGVkQ29udGVudFR5cGUge0JlZm9yZSwgQWZ0ZXJ9OwogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0R2VuZXJhdGVkQ29udGVudEl0ZXJhdG9yKG5zSUNvbnRlbnQqIGFDb250ZW50LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlZENvbnRlbnRUeXBlIGFU
eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUNvbnRlbnRJ
dGVyYXRvcioqIGFJdGVyYXRvcikgY29uc3QgPSAwOwojIDUyMSAiLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL2xheW91dC9uc0lQcmVzU2hlbGwuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFub255bW91
c0NvbnRlbnRGb3IobnNJQ29udGVudCogYUNvbnRlbnQsIG5zSVN1cHBvcnRzQXJyYXkqIGFBbm9u
eW1vdXNFbGVtZW50cykgPSAwOwojIDUzMiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9u
c0lQcmVzU2hlbGwuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFub255bW91c0NvbnRlbnRGb3Io
bnNJQ29udGVudCogYUNvbnRlbnQsIG5zSVN1cHBvcnRzQXJyYXkqKiBhQW5vbnltb3VzRWxlbWVu
dHMpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgUmVsZWFzZUFub255bW91c0NvbnRlbnQo
KSA9IDA7CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJc1BhaW50aW5nU3VwcHJlc3NlZChQUkJv
b2wqIGFSZXN1bHQpPTA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgVW5zdXBwcmVzc1BhaW50aW5n
KCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IERpc2FibGVUaGVtZVN1cHBvcnQoKSA9IDA7
CgoKCgogIHZpcnR1YWwgUFJCb29sIElzVGhlbWVTdXBwb3J0RW5hYmxlZCgpID0gMDsKCgoKCgoK
CiAgc3RhdGljIFBSQm9vbCBHZXRWZXJpZnlSZWZsb3dFbmFibGUoKTsKCgoKCiAgc3RhdGljIHZv
aWQgU2V0VmVyaWZ5UmVmbG93RW5hYmxlKFBSQm9vbCBhRW5hYmxlZCk7CgoKCgogIHN0YXRpYyBQ
UkludDMyIEdldFZlcmlmeVJlZmxvd0ZsYWdzKCk7CiMgNTk2ICIuLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbGF5b3V0L25zSVByZXNTaGVsbC5oIgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0Q2FyZXRCaWRp
TGV2ZWwoUFJVaW50OCBhTGV2ZWwpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDYXJl
dEJpZGlMZXZlbChQUlVpbnQ4ICphT3V0TGV2ZWwpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBVbmRlZmluZUNhcmV0QmlkaUxldmVsKHZvaWQpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBCaWRpU3R5bGVDaGFuZ2VSZWZsb3codm9pZCkgPSAwOwoKCn07CgoKCgoKZXh0ZXJuIG5zcmVz
dWx0CiAgTlNfTmV3UHJlc1NoZWxsKG5zSVByZXNTaGVsbCoqIGFJbnN0YW5jZVB0clJlc3VsdCk7
CiMgNTMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zU3R5bGVTdHJ1Y3QuaCIgMgoK
IyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbG9jYWxlL25zSUxhbmd1YWdlQXRvbS5oIiAxCiMg
MTQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sb2NhbGUvbnNJTGFuZ3VhZ2VBdG9tLmgiCiMgMSAi
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSUF0b20uaCIgMQojIDE3ICIuLi8uLi8uLi9k
aXN0L2luY2x1ZGUveHBjb20vbnNJQXRvbS5oIgpjbGFzcyBuc0lTaXplT2ZIYW5kbGVyOwojIDI5
ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJQXRvbS5oIgpjbGFzcyBuc0lBdG9tIDog
cHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJ
SUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDNkMWIxNWIwLCAweDkzYjQsIDB4MTFk
MSwgeyAweDg5LCAweDViLCAweDAwLCAweDYwLCAweDA4LCAweDkxLCAweDFiLCAweDgxIH19OyBy
ZXR1cm4gaWlkO30KCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgVG9TdHJpbmcobnNBU3RyaW5nICYg
X3JldHZhbCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRVbmljb2RlKGNvbnN0IFBS
VW5pY2hhciAqKmFSZXN1bHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2l6ZU9mKG5z
SVNpemVPZkhhbmRsZXIgKmFIYW5kbGVyLCBQUlVpbnQzMiAqX3JldHZhbCkgPSAwOwoKfTsKIyAx
NDAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lBdG9tLmgiCmV4dGVybiBuc0lBdG9t
KiBOU19OZXdBdG9tKGNvbnN0IGNoYXIqIGlzb2xhdGluMSk7CmV4dGVybiBuc0lBdG9tKiBOU19O
ZXdQZXJtYW5lbnRBdG9tKGNvbnN0IGNoYXIqIGlzb2xhdGluMSk7CmlubGluZSBhbHJlYWR5X0Fk
ZFJlZmVkPG5zSUF0b20+IGRvX0dldEF0b20oY29uc3QgY2hhciogaXNvbGF0aW4xKQogICAgeyBy
ZXR1cm4gTlNfTmV3QXRvbShpc29sYXRpbjEpOyB9CmlubGluZSBhbHJlYWR5X0FkZFJlZmVkPG5z
SUF0b20+IGRvX0dldFBlcm1hbmVudEF0b20oY29uc3QgY2hhciogaXNvbGF0aW4xKQogICAgeyBy
ZXR1cm4gTlNfTmV3UGVybWFuZW50QXRvbShpc29sYXRpbjEpOyB9CgoKCgpleHRlcm4gbnNJQXRv
bSogTlNfTmV3QXRvbShjb25zdCBQUlVuaWNoYXIqIHVuaWNvZGUpOwpleHRlcm4gbnNJQXRvbSog
TlNfTmV3UGVybWFuZW50QXRvbShjb25zdCBQUlVuaWNoYXIqIHVuaWNvZGUpOwppbmxpbmUgYWxy
ZWFkeV9BZGRSZWZlZDxuc0lBdG9tPiBkb19HZXRBdG9tKGNvbnN0IFBSVW5pY2hhciogdW5pY29k
ZSkKICAgIHsgcmV0dXJuIE5TX05ld0F0b20odW5pY29kZSk7IH0KaW5saW5lIGFscmVhZHlfQWRk
UmVmZWQ8bnNJQXRvbT4gZG9fR2V0UGVybWFuZW50QXRvbShjb25zdCBQUlVuaWNoYXIqIHVuaWNv
ZGUpCiAgICB7IHJldHVybiBOU19OZXdQZXJtYW5lbnRBdG9tKHVuaWNvZGUpOyB9CgoKCmV4dGVy
biBuc0lBdG9tKiBOU19OZXdBdG9tKGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZyk7CmV4dGVybiBu
c0lBdG9tKiBOU19OZXdQZXJtYW5lbnRBdG9tKGNvbnN0IG5zQVN0cmluZyYgYVN0cmluZyk7Cmlu
bGluZSBhbHJlYWR5X0FkZFJlZmVkPG5zSUF0b20+IGRvX0dldEF0b20oY29uc3QgbnNBU3RyaW5n
JiBhU3RyaW5nKQogICAgeyByZXR1cm4gTlNfTmV3QXRvbShhU3RyaW5nKTsgfQppbmxpbmUgYWxy
ZWFkeV9BZGRSZWZlZDxuc0lBdG9tPiBkb19HZXRQZXJtYW5lbnRBdG9tKGNvbnN0IG5zQVN0cmlu
ZyYgYVN0cmluZykKICAgIHsgcmV0dXJuIE5TX05ld1Blcm1hbmVudEF0b20oYVN0cmluZyk7IH0K
CgoKCmV4dGVybiBuc3JlZmNudCBOU19HZXROdW1iZXJPZkF0b21zKHZvaWQpOwojIDE1ICIuLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbG9jYWxlL25zSUxhbmd1YWdlQXRvbS5oIiAyCiMgMjkgIi4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9sb2NhbGUvbnNJTGFuZ3VhZ2VBdG9tLmgiCmNsYXNzIG5zSUxhbmd1
YWdlQXRvbSA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBu
c0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhhNmNmOTExZSwgMHgx
NWIzLCAweDExZDIsIHsgMHg5MywgMHgyZSwgMHgwMCwgMHg4MCwgMHg1ZiwgMHg4YSwgMHhkZCwg
MHgzMiB9fTsgcmV0dXJuIGlpZDt9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldExhbmd1YWdlKFBS
VW5pY2hhciAqICphTGFuZ3VhZ2UpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TGFuZ3Vh
Z2VHcm91cChuc0lBdG9tICogKmFMYW5ndWFnZUdyb3VwKSA9IDA7CgoKICB2aXJ0dWFsIG5zcmVz
dWx0IExhbmd1YWdlSXMoY29uc3QgUFJVbmljaGFyICphTGFuZ3VhZ2UsIFBSQm9vbCAqX3JldHZh
bCkgPSAwOwoKfTsKIyA1NSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNTdHlsZVN0
cnVjdC5oIiAyCgpjbGFzcyBuc0lGcmFtZTsKCmVudW0gbnNTdHlsZVN0cnVjdElEIHsKIyA2OCAi
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNTdHlsZVN0cnVjdC5oIgojIDEgIi4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9jb250ZW50L25zU3R5bGVTdHJ1Y3RMaXN0LmgiIDEKIyA1NyAiLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNTdHlsZVN0cnVjdExpc3QuaCIKZVN0eWxlU3Ry
dWN0X0ZvbnQsCmVTdHlsZVN0cnVjdF9Db2xvciwKZVN0eWxlU3RydWN0X0JhY2tncm91bmQsCmVT
dHlsZVN0cnVjdF9MaXN0LAplU3R5bGVTdHJ1Y3RfUG9zaXRpb24sCmVTdHlsZVN0cnVjdF9UZXh0
LAplU3R5bGVTdHJ1Y3RfVGV4dFJlc2V0LAplU3R5bGVTdHJ1Y3RfRGlzcGxheSwKZVN0eWxlU3Ry
dWN0X1Zpc2liaWxpdHksCmVTdHlsZVN0cnVjdF9Db250ZW50LAplU3R5bGVTdHJ1Y3RfUXVvdGVz
LAplU3R5bGVTdHJ1Y3RfVXNlckludGVyZmFjZSwKZVN0eWxlU3RydWN0X1VJUmVzZXQsCmVTdHls
ZVN0cnVjdF9UYWJsZSwKZVN0eWxlU3RydWN0X1RhYmxlQm9yZGVyLAplU3R5bGVTdHJ1Y3RfTWFy
Z2luLAplU3R5bGVTdHJ1Y3RfUGFkZGluZywKZVN0eWxlU3RydWN0X0JvcmRlciwKZVN0eWxlU3Ry
dWN0X091dGxpbmUsCgplU3R5bGVTdHJ1Y3RfWFVMLAojIDY5ICIuLi8uLi8uLi9kaXN0L2luY2x1
ZGUvY29udGVudC9uc1N0eWxlU3RydWN0LmgiIDIKCgpuc1N0eWxlU3RydWN0SURfTGVuZ3RoCgp9
OwojIDg4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvY29udGVudC9uc1N0eWxlU3RydWN0LmgiCnN0
cnVjdCBuc1N0eWxlU3RydWN0IHsKfTsKCgoKc3RydWN0IG5zU3R5bGVGb250IDogcHVibGljIG5z
U3R5bGVTdHJ1Y3QgewogIG5zU3R5bGVGb250KHZvaWQpOwogIH5uc1N0eWxlRm9udCh2b2lkKSB7
fTsKCiAgc3RhdGljIGNvbnN0IG5zU3R5bGVTdHJ1Y3RJRCBHZXRTdHlsZVN0cnVjdElEKCkge3Jl
dHVybiBlU3R5bGVTdHJ1Y3RfRm9udDt9CgogIG5zQ2hhbmdlSGludCBDYWxjRGlmZmVyZW5jZShj
b25zdCBuc1N0eWxlRm9udCYgYU90aGVyKSBjb25zdDsKICBzdGF0aWMgbnNDaGFuZ2VIaW50IENh
bGNGb250RGlmZmVyZW5jZShjb25zdCBuc0ZvbnQmIGFGb250MSwgY29uc3QgbnNGb250JiBhRm9u
dDIpOwoKICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHN6LCBuc0lQcmVzQ29udGV4dCogYUNv
bnRleHQpIHRocm93KCk7CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCk7
CgogIFBSVWludDggbUZsYWdzOwogIG5zRm9udCBtRm9udDsKICBuc2Nvb3JkIG1TaXplOwoKCgoK
ICBuc1N0eWxlRm9udChjb25zdCBuc0ZvbnQmIGFGb250KTsKICBuc1N0eWxlRm9udChjb25zdCBu
c1N0eWxlRm9udCYgYVN0eWxlRm9udCk7CiAgbnNTdHlsZUZvbnQobnNJUHJlc0NvbnRleHQqIGFQ
cmVzQ29udGV4dCk7Cn07CgpzdHJ1Y3QgbnNTdHlsZUNvbG9yIDogcHVibGljIG5zU3R5bGVTdHJ1
Y3QgewogIG5zU3R5bGVDb2xvcihuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KTsKICBuc1N0
eWxlQ29sb3IoY29uc3QgbnNTdHlsZUNvbG9yJiBhT3RoZXIpOwogIH5uc1N0eWxlQ29sb3Iodm9p
ZCkge307CgogIHN0YXRpYyBjb25zdCBuc1N0eWxlU3RydWN0SUQgR2V0U3R5bGVTdHJ1Y3RJRCgp
IHtyZXR1cm4gZVN0eWxlU3RydWN0X0NvbG9yO30KCiAgbnNDaGFuZ2VIaW50IENhbGNEaWZmZXJl
bmNlKGNvbnN0IG5zU3R5bGVDb2xvciYgYU90aGVyKSBjb25zdDsKCiAgdm9pZCogb3BlcmF0b3Ig
bmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KSB0aHJvdygpIHsKICAgIHZv
aWQqIHJlc3VsdCA9IDA7CiAgICBhQ29udGV4dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1
bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0
KiBhQ29udGV4dCkgewogICAgdGhpcy0+fm5zU3R5bGVDb2xvcigpOwogICAgYUNvbnRleHQtPkZy
ZWVUb1NoZWxsKHNpemVvZihuc1N0eWxlQ29sb3IpLCB0aGlzKTsKICB9OwoKCgogIG5zY29sb3Ig
bUNvbG9yOwp9OwoKc3RydWN0IG5zU3R5bGVCYWNrZ3JvdW5kIDogcHVibGljIG5zU3R5bGVTdHJ1
Y3QgewogIG5zU3R5bGVCYWNrZ3JvdW5kKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQpOwog
IG5zU3R5bGVCYWNrZ3JvdW5kKGNvbnN0IG5zU3R5bGVCYWNrZ3JvdW5kJiBhT3RoZXIpOwogIH5u
c1N0eWxlQmFja2dyb3VuZCgpIHt9OwoKICBzdGF0aWMgY29uc3QgbnNTdHlsZVN0cnVjdElEIEdl
dFN0eWxlU3RydWN0SUQoKSB7cmV0dXJuIGVTdHlsZVN0cnVjdF9CYWNrZ3JvdW5kO30KCiAgdm9p
ZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KSB0aHJv
dygpIHsKICAgIHZvaWQqIHJlc3VsdCA9IDA7CiAgICBhQ29udGV4dC0+QWxsb2NhdGVGcm9tU2hl
bGwoc3osICZyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBEZXN0cm95KG5z
SVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdGhpcy0+fm5zU3R5bGVCYWNrZ3JvdW5kKCk7
CiAgICBhQ29udGV4dC0+RnJlZVRvU2hlbGwoc2l6ZW9mKG5zU3R5bGVCYWNrZ3JvdW5kKSwgdGhp
cyk7CiAgfTsKCiAgbnNDaGFuZ2VIaW50IENhbGNEaWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVCYWNr
Z3JvdW5kJiBhT3RoZXIpIGNvbnN0OwoKCgoKCiAgUFJVaW50OCBtQmFja2dyb3VuZEZsYWdzOwog
IFBSVWludDggbUJhY2tncm91bmRBdHRhY2htZW50IDogNDsKICBQUlVpbnQ4IG1CYWNrZ3JvdW5k
Q2xpcCA6IDM7CiAgUFJVaW50OCBtQmFja2dyb3VuZElubGluZVBvbGljeSA6IDI7CiAgUFJVaW50
OCBtQmFja2dyb3VuZE9yaWdpbiA6IDM7CiAgUFJVaW50OCBtQmFja2dyb3VuZFJlcGVhdCA6IDQ7
CgoKCiAgdW5pb24gewogICAgbnNjb29yZCBtQ29vcmQ7CiAgICBmbG9hdCBtRmxvYXQ7CiAgfSBt
QmFja2dyb3VuZFhQb3NpdGlvbiwKICAgIG1CYWNrZ3JvdW5kWVBvc2l0aW9uOwoKICBuc2NvbG9y
IG1CYWNrZ3JvdW5kQ29sb3I7CiAgbnNTdHJpbmcgbUJhY2tncm91bmRJbWFnZTsKCiAgUFJCb29s
IElzVHJhbnNwYXJlbnQoKSBjb25zdAogIHsKICAgIHJldHVybiAobUJhY2tncm91bmRGbGFncyAm
CiAgICAgICAgICAgICgweDAxIHwgMHgwMikpID09CiAgICAgICAgICAgICgweDAxIHwgMHgwMik7
CiAgfQp9OwojIDIwMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNTdHlsZVN0cnVj
dC5oIgpzdHJ1Y3QgbnNTdHlsZU1hcmdpbjogcHVibGljIG5zU3R5bGVTdHJ1Y3QgewogIG5zU3R5
bGVNYXJnaW4odm9pZCk7CiAgbnNTdHlsZU1hcmdpbihjb25zdCBuc1N0eWxlTWFyZ2luJiBhTWFy
Z2luKTsKICB+bnNTdHlsZU1hcmdpbih2b2lkKSB7fTsKCiAgc3RhdGljIGNvbnN0IG5zU3R5bGVT
dHJ1Y3RJRCBHZXRTdHlsZVN0cnVjdElEKCkge3JldHVybiBlU3R5bGVTdHJ1Y3RfTWFyZ2luO30K
CiAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQqIGFDb250ZXh0
KSB0aHJvdygpOwogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpOwoKICB2
b2lkIFJlY2FsY0RhdGEoKTsKICBuc0NoYW5nZUhpbnQgQ2FsY0RpZmZlcmVuY2UoY29uc3QgbnNT
dHlsZU1hcmdpbiYgYU90aGVyKSBjb25zdDsKCiAgbnNTdHlsZVNpZGVzIG1NYXJnaW47CgogIFBS
Qm9vbCBHZXRNYXJnaW4obnNNYXJnaW4mIGFNYXJnaW4pIGNvbnN0CiAgewogICAgaWYgKG1IYXND
YWNoZWRNYXJnaW4pIHsKICAgICAgYU1hcmdpbiA9IG1DYWNoZWRNYXJnaW47CiAgICAgIHJldHVy
biAxOwogICAgfQogICAgcmV0dXJuIDA7CiAgfQoKCiAgdm9pZCBDYWxjTWFyZ2luRm9yKGNvbnN0
IG5zSUZyYW1lKiBhRnJhbWUsIG5zTWFyZ2luJiBhTWFyZ2luKSBjb25zdDsKCnByb3RlY3RlZDoK
ICBQUlBhY2tlZEJvb2wgbUhhc0NhY2hlZE1hcmdpbjsKICBuc01hcmdpbiBtQ2FjaGVkTWFyZ2lu
Owp9OwoKCnN0cnVjdCBuc1N0eWxlUGFkZGluZzogcHVibGljIG5zU3R5bGVTdHJ1Y3QgewogIG5z
U3R5bGVQYWRkaW5nKHZvaWQpOwogIG5zU3R5bGVQYWRkaW5nKGNvbnN0IG5zU3R5bGVQYWRkaW5n
JiBhUGFkZGluZyk7CiAgfm5zU3R5bGVQYWRkaW5nKHZvaWQpIHt9OwoKICBzdGF0aWMgY29uc3Qg
bnNTdHlsZVN0cnVjdElEIEdldFN0eWxlU3RydWN0SUQoKSB7cmV0dXJuIGVTdHlsZVN0cnVjdF9Q
YWRkaW5nO30KCiAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQq
IGFDb250ZXh0KSB0aHJvdygpOwogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29udGV4dCogYUNvbnRl
eHQpOwoKICB2b2lkIFJlY2FsY0RhdGEoKTsKICBuc0NoYW5nZUhpbnQgQ2FsY0RpZmZlcmVuY2Uo
Y29uc3QgbnNTdHlsZVBhZGRpbmcmIGFPdGhlcikgY29uc3Q7CgogIG5zU3R5bGVTaWRlcyBtUGFk
ZGluZzsKCiAgUFJCb29sIEdldFBhZGRpbmcobnNNYXJnaW4mIGFQYWRkaW5nKSBjb25zdAogIHsK
ICAgIGlmIChtSGFzQ2FjaGVkUGFkZGluZykgewogICAgICBhUGFkZGluZyA9IG1DYWNoZWRQYWRk
aW5nOwogICAgICByZXR1cm4gMTsKICAgIH0KICAgIHJldHVybiAwOwogIH0KCgogIHZvaWQgQ2Fs
Y1BhZGRpbmdGb3IoY29uc3QgbnNJRnJhbWUqIGFGcmFtZSwgbnNNYXJnaW4mIGFQYWRkaW5nKSBj
b25zdDsKCnByb3RlY3RlZDoKICBQUlBhY2tlZEJvb2wgbUhhc0NhY2hlZFBhZGRpbmc7CiAgbnNN
YXJnaW4gbUNhY2hlZFBhZGRpbmc7Cn07CgpzdHJ1Y3QgbnNCb3JkZXJDb2xvcnMgewogIG5zQm9y
ZGVyQ29sb3JzKiBtTmV4dDsKICBuc2NvbG9yIG1Db2xvcjsKICBQUkJvb2wgbVRyYW5zcGFyZW50
OwoKICBuc0JvcmRlckNvbG9ycyogQ29weUNvbG9ycygpIHsKICAgIG5zQm9yZGVyQ29sb3JzKiBu
ZXh0ID0gMDsKICAgIGlmIChtTmV4dCkKICAgICAgbmV4dCA9IG1OZXh0LT5Db3B5Q29sb3JzKCk7
CiAgICByZXR1cm4gbmV3IG5zQm9yZGVyQ29sb3JzKG1Db2xvciwgbVRyYW5zcGFyZW50LCBuZXh0
KTsKICB9CgogIG5zQm9yZGVyQ29sb3JzKCkgOm1OZXh0KDApIHsgbUNvbG9yID0gKChuc2NvbG9y
KSAoKDI1NSA8PCAyNCkgfCAoKDApPDwxNikgfCAoKDApPDw4KSB8ICgwKSkpOyB9OwoKICBuc0Jv
cmRlckNvbG9ycyhjb25zdCBuc2NvbG9yJiBhQ29sb3IsIFBSQm9vbCBhVHJhbnNwYXJlbnQsIG5z
Qm9yZGVyQ29sb3JzKiBhTmV4dD0wKSB7CiAgICBtQ29sb3IgPSBhQ29sb3I7CiAgICBtVHJhbnNw
YXJlbnQgPSBhVHJhbnNwYXJlbnQ7CiAgICBtTmV4dCA9IGFOZXh0OwogIH0KCiAgfm5zQm9yZGVy
Q29sb3JzKCkgewogICAgZGVsZXRlIG1OZXh0OwogIH0KCiAgUFJCb29sIEVxdWFscyhuc0JvcmRl
ckNvbG9ycyogYU90aGVyKSB7CiAgICBuc0JvcmRlckNvbG9ycyogYzEgPSB0aGlzOwogICAgbnNC
b3JkZXJDb2xvcnMqIGMyID0gYU90aGVyOwogICAgd2hpbGUgKGMxICYmIGMyKSB7CiAgICAgIGlm
IChjMS0+bUNvbG9yICE9IGMyLT5tQ29sb3IgfHwKICAgICAgICAgIGMxLT5tVHJhbnNwYXJlbnQg
IT0gYzItPm1UcmFuc3BhcmVudCkKICAgICAgICByZXR1cm4gMDsKICAgICAgYzEgPSBjMS0+bU5l
eHQ7CiAgICAgIGMyID0gYzItPm1OZXh0OwogICAgfQogICAgcmV0dXJuICFjMSAmJiAhYzI7CiAg
fQp9OwoKc3RydWN0IG5zU3R5bGVCb3JkZXI6IHB1YmxpYyBuc1N0eWxlU3RydWN0IHsKICBuc1N0
eWxlQm9yZGVyKCkgOm1Cb3JkZXJDb2xvcnMoMCkge307CiAgbnNTdHlsZUJvcmRlcihuc0lQcmVz
Q29udGV4dCogYUNvbnRleHQpOwogIG5zU3R5bGVCb3JkZXIoY29uc3QgbnNTdHlsZUJvcmRlciYg
YUJvcmRlcik7CiAgfm5zU3R5bGVCb3JkZXIodm9pZCkgewogICAgaWYgKG1Cb3JkZXJDb2xvcnMp
IHsKICAgICAgZm9yIChQUkludDMyIGkgPSAwOyBpIDwgNDsgaSsrKQogICAgICAgIGRlbGV0ZSBt
Qm9yZGVyQ29sb3JzW2ldOwogICAgICBkZWxldGUgW11tQm9yZGVyQ29sb3JzOwogICAgfQogIH07
CgogIHN0YXRpYyBjb25zdCBuc1N0eWxlU3RydWN0SUQgR2V0U3R5bGVTdHJ1Y3RJRCgpIHtyZXR1
cm4gZVN0eWxlU3RydWN0X0JvcmRlcjt9CgogIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc3os
IG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgdGhyb3coKTsKICB2b2lkIERlc3Ryb3kobnNJUHJl
c0NvbnRleHQqIGFDb250ZXh0KTsKCiAgUFJCb29sIElzQm9yZGVyU2lkZVZpc2libGUoUFJVaW50
OCBhU2lkZSkgY29uc3Q7CiAgdm9pZCBSZWNhbGNEYXRhKCk7CiAgbnNDaGFuZ2VIaW50IENhbGNE
aWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVCb3JkZXImIGFPdGhlcikgY29uc3Q7CgogIG5zU3R5bGVT
aWRlcyBtQm9yZGVyOwogIG5zU3R5bGVTaWRlcyBtQm9yZGVyUmFkaXVzOwogIFBSVWludDggbUZs
b2F0RWRnZTsKICBuc0JvcmRlckNvbG9ycyoqIG1Cb3JkZXJDb2xvcnM7CgogIHZvaWQgRW5zdXJl
Qm9yZGVyQ29sb3JzKCkgewogICAgaWYgKCFtQm9yZGVyQ29sb3JzKSB7CiAgICAgIG1Cb3JkZXJD
b2xvcnMgPSBuZXcgbnNCb3JkZXJDb2xvcnMqWzRdOwogICAgICBpZiAobUJvcmRlckNvbG9ycykK
ICAgICAgICBmb3IgKFBSSW50MzIgaSA9IDA7IGkgPCA0OyBpKyspCiAgICAgICAgICBtQm9yZGVy
Q29sb3JzW2ldID0gMDsKICAgIH0KICB9CgogIHZvaWQgQ2xlYXJCb3JkZXJDb2xvcnMoUFJVaW50
OCBhU2lkZSkgewogICAgaWYgKG1Cb3JkZXJDb2xvcnNbYVNpZGVdKSB7CiAgICAgIGRlbGV0ZSBt
Qm9yZGVyQ29sb3JzW2FTaWRlXTsKICAgICAgbUJvcmRlckNvbG9yc1thU2lkZV0gPSAwOwogICAg
fQogIH0KCiAgUFJCb29sIEdldEJvcmRlcihuc01hcmdpbiYgYUJvcmRlcikgY29uc3QKICB7CiAg
ICBpZiAobUhhc0NhY2hlZEJvcmRlcikgewogICAgICBhQm9yZGVyID0gbUNhY2hlZEJvcmRlcjsK
ICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICByZXR1cm4gMDsKICB9CgogIFBSVWludDggR2V0Qm9y
ZGVyU3R5bGUoUFJVaW50OCBhU2lkZSkgY29uc3QKICB7CiAgICA7CiAgICByZXR1cm4gKG1Cb3Jk
ZXJTdHlsZVthU2lkZV0gJiAweDFGKTsKICB9CgogIHZvaWQgU2V0Qm9yZGVyU3R5bGUoUFJVaW50
OCBhU2lkZSwgUFJVaW50OCBhU3R5bGUpCiAgewogICAgOwogICAgbUJvcmRlclN0eWxlW2FTaWRl
XSAmPSB+MHgxRjsKICAgIG1Cb3JkZXJTdHlsZVthU2lkZV0gfD0gKGFTdHlsZSAmIDB4MUYpOwoK
ICB9CgogIHZvaWQgR2V0Qm9yZGVyQ29sb3IoUFJVaW50OCBhU2lkZSwgbnNjb2xvciYgYUNvbG9y
LAogICAgICAgICAgICAgICAgICAgICAgUFJCb29sJiBhVHJhbnNwYXJlbnQsIFBSQm9vbCYgYUZv
cmVncm91bmQpIGNvbnN0CiAgewogICAgYVRyYW5zcGFyZW50ID0gYUZvcmVncm91bmQgPSAwOwog
ICAgOwogICAgaWYgKChtQm9yZGVyU3R5bGVbYVNpZGVdICYgMHg2MCkgPT0gMCkKICAgICAgYUNv
bG9yID0gbUJvcmRlckNvbG9yW2FTaWRlXTsKICAgIGVsc2UgaWYgKG1Cb3JkZXJTdHlsZVthU2lk
ZV0gJiAweDIwKQogICAgICBhRm9yZWdyb3VuZCA9IDE7CiAgICBlbHNlCiAgICAgIGFUcmFuc3Bh
cmVudCA9IDE7CiAgfQoKICB2b2lkIFNldEJvcmRlckNvbG9yKFBSVWludDggYVNpZGUsIG5zY29s
b3IgYUNvbG9yKQogIHsKICAgIDsKICAgIG1Cb3JkZXJDb2xvclthU2lkZV0gPSBhQ29sb3I7CiAg
ICBtQm9yZGVyU3R5bGVbYVNpZGVdICY9IH4weDYwOwogICAgbUJvcmRlclN0eWxlW2FTaWRlXSB8
PSAweDgwOwogIH0KCiAgdm9pZCBHZXRDb21wb3NpdGVDb2xvcnMoUFJJbnQzMiBhSW5kZXgsIG5z
Qm9yZGVyQ29sb3JzKiogYUNvbG9ycykgY29uc3QKICB7CiAgICBpZiAoIW1Cb3JkZXJDb2xvcnMp
CiAgICAgICphQ29sb3JzID0gMDsKICAgIGVsc2UKICAgICAgKmFDb2xvcnMgPSBtQm9yZGVyQ29s
b3JzW2FJbmRleF07CiAgfQoKICB2b2lkIEFwcGVuZEJvcmRlckNvbG9yKFBSSW50MzIgYUluZGV4
LCBuc2NvbG9yIGFDb2xvciwgUFJCb29sIGFUcmFuc3BhcmVudCkKICB7CiAgICA7CiAgICBuc0Jv
cmRlckNvbG9ycyogY29sb3JFbnRyeSA9IG5ldyBuc0JvcmRlckNvbG9ycyhhQ29sb3IsIGFUcmFu
c3BhcmVudCk7CiAgICBpZiAoIW1Cb3JkZXJDb2xvcnNbYUluZGV4XSkKICAgICAgbUJvcmRlckNv
bG9yc1thSW5kZXhdID0gY29sb3JFbnRyeTsKICAgIGVsc2UgewogICAgICBuc0JvcmRlckNvbG9y
cyogbGFzdCA9IG1Cb3JkZXJDb2xvcnNbYUluZGV4XTsKICAgICAgd2hpbGUgKGxhc3QtPm1OZXh0
KQogICAgICAgIGxhc3QgPSBsYXN0LT5tTmV4dDsKICAgICAgbGFzdC0+bU5leHQgPSBjb2xvckVu
dHJ5OwogICAgfQogICAgbUJvcmRlclN0eWxlW2FJbmRleF0gJj0gfjB4NjA7CiAgICBtQm9yZGVy
U3R5bGVbYUluZGV4XSB8PSAweDgwOwogIH0KCiAgdm9pZCBTZXRCb3JkZXJUcmFuc3BhcmVudChQ
UlVpbnQ4IGFTaWRlKQogIHsKICAgIDsKICAgIG1Cb3JkZXJTdHlsZVthU2lkZV0gJj0gfjB4NjA7
CiAgICBtQm9yZGVyU3R5bGVbYVNpZGVdIHw9ICgweDgwIHwgMHg0MCk7CiAgfQoKICB2b2lkIFNl
dEJvcmRlclRvRm9yZWdyb3VuZChQUlVpbnQ4IGFTaWRlKQogIHsKICAgIDsKICAgIG1Cb3JkZXJT
dHlsZVthU2lkZV0gJj0gfjB4NjA7CiAgICBtQm9yZGVyU3R5bGVbYVNpZGVdIHw9ICgweDgwIHwg
MHgyMCk7CiAgfQoKICB2b2lkIFVuc2V0Qm9yZGVyQ29sb3IoUFJVaW50OCBhU2lkZSkKICB7CiAg
ICA7CiAgICBtQm9yZGVyU3R5bGVbYVNpZGVdICY9IDB4MUY7CiAgfQoKCiAgdm9pZCBDYWxjQm9y
ZGVyRm9yKGNvbnN0IG5zSUZyYW1lKiBhRnJhbWUsIG5zTWFyZ2luJiBhQm9yZGVyKSBjb25zdDsK
ICB2b2lkIENhbGNCb3JkZXJGb3IoY29uc3QgbnNJRnJhbWUqIGFGcmFtZSwgUFJVaW50OCBhU2lk
ZSwgbnNjb29yZCYgYVdpZHRoKSBjb25zdDsKCnByb3RlY3RlZDoKICBQUlBhY2tlZEJvb2wgbUhh
c0NhY2hlZEJvcmRlcjsKICBuc01hcmdpbiBtQ2FjaGVkQm9yZGVyOwoKICBQUlVpbnQ4IG1Cb3Jk
ZXJTdHlsZVs0XTsKICBuc2NvbG9yIG1Cb3JkZXJDb2xvcls0XTsKCgoKICBuc2Nvb3JkIG1Cb3Jk
ZXJXaWR0aHNbM107Cn07CgoKc3RydWN0IG5zU3R5bGVCb3JkZXJQYWRkaW5nOiBwdWJsaWMgbnNT
dHlsZVN0cnVjdCB7CiAgbnNTdHlsZUJvcmRlclBhZGRpbmcodm9pZCkgeyBtSGFzQ2FjaGVkQm9y
ZGVyUGFkZGluZyA9IDA7IH07CiAgfm5zU3R5bGVCb3JkZXJQYWRkaW5nKHZvaWQpIHt9OwoKCgoK
ICBQUkJvb2wgR2V0Qm9yZGVyUGFkZGluZyhuc01hcmdpbiYgYUJvcmRlclBhZGRpbmcpIGNvbnN0
IHsKICAgIGlmIChtSGFzQ2FjaGVkQm9yZGVyUGFkZGluZykgewogICAgICBhQm9yZGVyUGFkZGlu
ZyA9IG1DYWNoZWRCb3JkZXJQYWRkaW5nOwogICAgICByZXR1cm4gMTsKICAgIH0KICAgIHJldHVy
biAwOwogIH0KCiAgdm9pZCBTZXRCb3JkZXJQYWRkaW5nKG5zTWFyZ2luIGFCb3JkZXJQYWRkaW5n
KSB7CiAgICBtQ2FjaGVkQm9yZGVyUGFkZGluZyA9IGFCb3JkZXJQYWRkaW5nOwogICAgbUhhc0Nh
Y2hlZEJvcmRlclBhZGRpbmcgPSAxOwogIH0KCnByb3RlY3RlZDoKICBuc01hcmdpbiBtQ2FjaGVk
Qm9yZGVyUGFkZGluZzsKICBQUlBhY2tlZEJvb2wgbUhhc0NhY2hlZEJvcmRlclBhZGRpbmc7Cn07
CgoKc3RydWN0IG5zU3R5bGVPdXRsaW5lOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHls
ZU91dGxpbmUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCk7CiAgbnNTdHlsZU91dGxpbmUo
Y29uc3QgbnNTdHlsZU91dGxpbmUmIGFPdXRsaW5lKTsKICB+bnNTdHlsZU91dGxpbmUodm9pZCkg
e307CgogIHN0YXRpYyBjb25zdCBuc1N0eWxlU3RydWN0SUQgR2V0U3R5bGVTdHJ1Y3RJRCgpIHty
ZXR1cm4gZVN0eWxlU3RydWN0X091dGxpbmU7fQoKICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90
IHN6LCBuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHRocm93KCkgewogICAgdm9pZCogcmVzdWx0
ID0gMDsKICAgIGFDb250ZXh0LT5BbGxvY2F0ZUZyb21TaGVsbChzeiwgJnJlc3VsdCk7CiAgICBy
ZXR1cm4gcmVzdWx0OwogIH0KICB2b2lkIERlc3Ryb3kobnNJUHJlc0NvbnRleHQqIGFDb250ZXh0
KSB7CiAgICB0aGlzLT5+bnNTdHlsZU91dGxpbmUoKTsKICAgIGFDb250ZXh0LT5GcmVlVG9TaGVs
bChzaXplb2YobnNTdHlsZU91dGxpbmUpLCB0aGlzKTsKICB9OwoKICB2b2lkIFJlY2FsY0RhdGEo
KTsKICBuc0NoYW5nZUhpbnQgQ2FsY0RpZmZlcmVuY2UoY29uc3QgbnNTdHlsZU91dGxpbmUmIGFP
dGhlcikgY29uc3Q7CgogIG5zU3R5bGVTaWRlcyBtT3V0bGluZVJhZGl1czsKCgogIG5zU3R5bGVD
b29yZCBtT3V0bGluZVdpZHRoOwoKICBQUkJvb2wgR2V0T3V0bGluZVdpZHRoKG5zY29vcmQmIGFX
aWR0aCkgY29uc3QKICB7CiAgICBpZiAobUhhc0NhY2hlZE91dGxpbmUpIHsKICAgICAgYVdpZHRo
ID0gbUNhY2hlZE91dGxpbmVXaWR0aDsKICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICByZXR1cm4g
MDsKICB9CgogIFBSVWludDggR2V0T3V0bGluZVN0eWxlKHZvaWQpIGNvbnN0CiAgewogICAgcmV0
dXJuIChtT3V0bGluZVN0eWxlICYgMHgxRik7CiAgfQoKICB2b2lkIFNldE91dGxpbmVTdHlsZShQ
UlVpbnQ4IGFTdHlsZSkKICB7CiAgICBtT3V0bGluZVN0eWxlICY9IH4weDFGOwogICAgbU91dGxp
bmVTdHlsZSB8PSAoYVN0eWxlICYgMHgxRik7CiAgfQoKCiAgUFJCb29sIEdldE91dGxpbmVDb2xv
cihuc2NvbG9yJiBhQ29sb3IpIGNvbnN0CiAgewogICAgaWYgKChtT3V0bGluZVN0eWxlICYgMHg2
MCkgPT0gMCkgewogICAgICBhQ29sb3IgPSBtT3V0bGluZUNvbG9yOwogICAgICByZXR1cm4gMTsK
ICAgIH0KICAgIHJldHVybiAwOwogIH0KCiAgdm9pZCBTZXRPdXRsaW5lQ29sb3IobnNjb2xvciBh
Q29sb3IpCiAgewogICAgbU91dGxpbmVDb2xvciA9IGFDb2xvcjsKICAgIG1PdXRsaW5lU3R5bGUg
Jj0gfjB4NjA7CiAgICBtT3V0bGluZVN0eWxlIHw9IDB4ODA7CiAgfQoKICB2b2lkIFNldE91dGxp
bmVJbnZlcnQodm9pZCkKICB7CiAgICBtT3V0bGluZVN0eWxlIHw9ICgweDgwIHwgMHg2MCk7CiAg
fQoKICBQUkJvb2wgR2V0T3V0bGluZUludmVydCh2b2lkKSBjb25zdAogIHsKICAgIHJldHVybiht
T3V0bGluZVN0eWxlICYgMHg2MCk7CiAgfQoKcHJvdGVjdGVkOgogIG5zY29vcmQgbUNhY2hlZE91
dGxpbmVXaWR0aDsKCiAgbnNjb2xvciBtT3V0bGluZUNvbG9yOwoKCiAgbnNjb29yZCBtQm9yZGVy
V2lkdGhzWzNdOwoKICBQUlBhY2tlZEJvb2wgbUhhc0NhY2hlZE91dGxpbmU7CiAgUFJVaW50OCBt
T3V0bGluZVN0eWxlOwp9OwoKCnN0cnVjdCBuc1N0eWxlTGlzdCA6IHB1YmxpYyBuc1N0eWxlU3Ry
dWN0IHsKICBuc1N0eWxlTGlzdCh2b2lkKTsKICBuc1N0eWxlTGlzdChjb25zdCBuc1N0eWxlTGlz
dCYgYVN0eWxlTGlzdCk7CiAgfm5zU3R5bGVMaXN0KHZvaWQpOwoKICBzdGF0aWMgY29uc3QgbnNT
dHlsZVN0cnVjdElEIEdldFN0eWxlU3RydWN0SUQoKSB7cmV0dXJuIGVTdHlsZVN0cnVjdF9MaXN0
O30KCiAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQqIGFDb250
ZXh0KSB0aHJvdygpIHsKICAgIHZvaWQqIHJlc3VsdCA9IDA7CiAgICBhQ29udGV4dC0+QWxsb2Nh
dGVGcm9tU2hlbGwoc3osICZyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBE
ZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdGhpcy0+fm5zU3R5bGVMaXN0
KCk7CiAgICBhQ29udGV4dC0+RnJlZVRvU2hlbGwoc2l6ZW9mKG5zU3R5bGVMaXN0KSwgdGhpcyk7
CiAgfTsKCiAgbnNDaGFuZ2VIaW50IENhbGNEaWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVMaXN0JiBh
T3RoZXIpIGNvbnN0OwoKICBQUlVpbnQ4IG1MaXN0U3R5bGVUeXBlOwogIFBSVWludDggbUxpc3RT
dHlsZVBvc2l0aW9uOwogIG5zU3RyaW5nIG1MaXN0U3R5bGVJbWFnZTsKICBuc1JlY3QgbUltYWdl
UmVnaW9uOwp9OwoKc3RydWN0IG5zU3R5bGVQb3NpdGlvbiA6IHB1YmxpYyBuc1N0eWxlU3RydWN0
IHsKICBuc1N0eWxlUG9zaXRpb24odm9pZCk7CiAgbnNTdHlsZVBvc2l0aW9uKGNvbnN0IG5zU3R5
bGVQb3NpdGlvbiYgYU90aGVyKTsKICB+bnNTdHlsZVBvc2l0aW9uKHZvaWQpOwoKICBzdGF0aWMg
Y29uc3QgbnNTdHlsZVN0cnVjdElEIEdldFN0eWxlU3RydWN0SUQoKSB7cmV0dXJuIGVTdHlsZVN0
cnVjdF9Qb3NpdGlvbjt9CgogIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIG5zSVByZXND
b250ZXh0KiBhQ29udGV4dCkgdGhyb3coKSB7CiAgICB2b2lkKiByZXN1bHQgPSAwOwogICAgYUNv
bnRleHQtPkFsbG9jYXRlRnJvbVNoZWxsKHN6LCAmcmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7
CiAgfQogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHsKICAgIHRoaXMt
Pn5uc1N0eWxlUG9zaXRpb24oKTsKICAgIGFDb250ZXh0LT5GcmVlVG9TaGVsbChzaXplb2YobnNT
dHlsZVBvc2l0aW9uKSwgdGhpcyk7CiAgfTsKCiAgbnNDaGFuZ2VIaW50IENhbGNEaWZmZXJlbmNl
KGNvbnN0IG5zU3R5bGVQb3NpdGlvbiYgYU90aGVyKSBjb25zdDsKCiAgbnNTdHlsZVNpZGVzIG1P
ZmZzZXQ7CiAgbnNTdHlsZUNvb3JkIG1XaWR0aDsKICBuc1N0eWxlQ29vcmQgbU1pbldpZHRoOwog
IG5zU3R5bGVDb29yZCBtTWF4V2lkdGg7CiAgbnNTdHlsZUNvb3JkIG1IZWlnaHQ7CiAgbnNTdHls
ZUNvb3JkIG1NaW5IZWlnaHQ7CiAgbnNTdHlsZUNvb3JkIG1NYXhIZWlnaHQ7CiAgUFJVaW50OCBt
Qm94U2l6aW5nOwogIG5zU3R5bGVDb29yZCBtWkluZGV4Owp9OwoKc3RydWN0IG5zU3R5bGVUZXh0
UmVzZXQgOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHlsZVRleHRSZXNldCh2b2lkKTsK
ICBuc1N0eWxlVGV4dFJlc2V0KGNvbnN0IG5zU3R5bGVUZXh0UmVzZXQmIGFPdGhlcik7CiAgfm5z
U3R5bGVUZXh0UmVzZXQodm9pZCk7CgogIHN0YXRpYyBjb25zdCBuc1N0eWxlU3RydWN0SUQgR2V0
U3R5bGVTdHJ1Y3RJRCgpIHtyZXR1cm4gZVN0eWxlU3RydWN0X1RleHRSZXNldDt9CgogIHZvaWQq
IG9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgdGhyb3co
KSB7CiAgICB2b2lkKiByZXN1bHQgPSAwOwogICAgYUNvbnRleHQtPkFsbG9jYXRlRnJvbVNoZWxs
KHN6LCAmcmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHZvaWQgRGVzdHJveShuc0lQ
cmVzQ29udGV4dCogYUNvbnRleHQpIHsKICAgIHRoaXMtPn5uc1N0eWxlVGV4dFJlc2V0KCk7CiAg
ICBhQ29udGV4dC0+RnJlZVRvU2hlbGwoc2l6ZW9mKG5zU3R5bGVUZXh0UmVzZXQpLCB0aGlzKTsK
ICB9OwoKICBuc0NoYW5nZUhpbnQgQ2FsY0RpZmZlcmVuY2UoY29uc3QgbnNTdHlsZVRleHRSZXNl
dCYgYU90aGVyKSBjb25zdDsKCiAgUFJVaW50OCBtVGV4dERlY29yYXRpb247CiAgUFJVaW50OCBt
VW5pY29kZUJpZGk7CgogIG5zU3R5bGVDb29yZCBtVmVydGljYWxBbGlnbjsKfTsKCnN0cnVjdCBu
c1N0eWxlVGV4dCA6IHB1YmxpYyBuc1N0eWxlU3RydWN0IHsKICBuc1N0eWxlVGV4dCh2b2lkKTsK
ICBuc1N0eWxlVGV4dChjb25zdCBuc1N0eWxlVGV4dCYgYU90aGVyKTsKICB+bnNTdHlsZVRleHQo
dm9pZCk7CgogIHN0YXRpYyBjb25zdCBuc1N0eWxlU3RydWN0SUQgR2V0U3R5bGVTdHJ1Y3RJRCgp
IHtyZXR1cm4gZVN0eWxlU3RydWN0X1RleHQ7fQoKICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90
IHN6LCBuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHRocm93KCkgewogICAgdm9pZCogcmVzdWx0
ID0gMDsKICAgIGFDb250ZXh0LT5BbGxvY2F0ZUZyb21TaGVsbChzeiwgJnJlc3VsdCk7CiAgICBy
ZXR1cm4gcmVzdWx0OwogIH0KICB2b2lkIERlc3Ryb3kobnNJUHJlc0NvbnRleHQqIGFDb250ZXh0
KSB7CiAgICB0aGlzLT5+bnNTdHlsZVRleHQoKTsKICAgIGFDb250ZXh0LT5GcmVlVG9TaGVsbChz
aXplb2YobnNTdHlsZVRleHQpLCB0aGlzKTsKICB9OwoKICBuc0NoYW5nZUhpbnQgQ2FsY0RpZmZl
cmVuY2UoY29uc3QgbnNTdHlsZVRleHQmIGFPdGhlcikgY29uc3Q7CgogIFBSVWludDggbVRleHRB
bGlnbjsKICBQUlVpbnQ4IG1UZXh0VHJhbnNmb3JtOwogIFBSVWludDggbVdoaXRlU3BhY2U7Cgog
IG5zU3R5bGVDb29yZCBtTGV0dGVyU3BhY2luZzsKICBuc1N0eWxlQ29vcmQgbUxpbmVIZWlnaHQ7
CiAgbnNTdHlsZUNvb3JkIG1UZXh0SW5kZW50OwogIG5zU3R5bGVDb29yZCBtV29yZFNwYWNpbmc7
CgogIFBSQm9vbCBXaGl0ZVNwYWNlSXNTaWduaWZpY2FudCgpIGNvbnN0IHsKICAgIHJldHVybiBt
V2hpdGVTcGFjZSA9PSAxIHx8CiAgICAgICAgICAgbVdoaXRlU3BhY2UgPT0gMzsKICB9Cn07Cgpz
dHJ1Y3QgbnNTdHlsZVZpc2liaWxpdHkgOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHls
ZVZpc2liaWxpdHkobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCk7CiAgbnNTdHlsZVZpc2li
aWxpdHkoY29uc3QgbnNTdHlsZVZpc2liaWxpdHkmIGFWaXNpYmlsaXR5KTsKICB+bnNTdHlsZVZp
c2liaWxpdHkoKSB7fTsKCiAgc3RhdGljIGNvbnN0IG5zU3R5bGVTdHJ1Y3RJRCBHZXRTdHlsZVN0
cnVjdElEKCkge3JldHVybiBlU3R5bGVTdHJ1Y3RfVmlzaWJpbGl0eTt9CgogIHZvaWQqIG9wZXJh
dG9yIG5ldyhzaXplX3Qgc3osIG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgdGhyb3coKSB7CiAg
ICB2b2lkKiByZXN1bHQgPSAwOwogICAgYUNvbnRleHQtPkFsbG9jYXRlRnJvbVNoZWxsKHN6LCAm
cmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29u
dGV4dCogYUNvbnRleHQpIHsKICAgIHRoaXMtPn5uc1N0eWxlVmlzaWJpbGl0eSgpOwogICAgYUNv
bnRleHQtPkZyZWVUb1NoZWxsKHNpemVvZihuc1N0eWxlVmlzaWJpbGl0eSksIHRoaXMpOwogIH07
CgogIG5zQ2hhbmdlSGludCBDYWxjRGlmZmVyZW5jZShjb25zdCBuc1N0eWxlVmlzaWJpbGl0eSYg
YU90aGVyKSBjb25zdDsKCiAgUFJVaW50OCBtRGlyZWN0aW9uOwogIFBSVWludDggbVZpc2libGU7
CiAgbnNDT01QdHI8bnNJTGFuZ3VhZ2VBdG9tPiBtTGFuZ3VhZ2U7CiAgZmxvYXQgbU9wYWNpdHk7
CgogIFBSQm9vbCBJc1Zpc2libGUoKSBjb25zdCB7CiAgICAgICAgICAgICAgICByZXR1cm4gKG1W
aXNpYmxlID09IDEpOwogICAgICAgIH0KCiAgICAgICAgUFJCb29sIElzVmlzaWJsZU9yQ29sbGFw
c2VkKCkgY29uc3QgewogICAgICAgICAgICAgICAgcmV0dXJuICgobVZpc2libGUgPT0gMSkgfHwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1WaXNpYmxl
ID09IDIpKTsKICAgICAgICB9Cn07CgpzdHJ1Y3QgbnNTdHlsZURpc3BsYXkgOiBwdWJsaWMgbnNT
dHlsZVN0cnVjdCB7CiAgbnNTdHlsZURpc3BsYXkoKTsKICBuc1N0eWxlRGlzcGxheShjb25zdCBu
c1N0eWxlRGlzcGxheSYgYU90aGVyKTsKICB+bnNTdHlsZURpc3BsYXkoKSB7fTsKCiAgc3RhdGlj
IGNvbnN0IG5zU3R5bGVTdHJ1Y3RJRCBHZXRTdHlsZVN0cnVjdElEKCkge3JldHVybiBlU3R5bGVT
dHJ1Y3RfRGlzcGxheTt9CgogIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc3osIG5zSVByZXND
b250ZXh0KiBhQ29udGV4dCkgdGhyb3coKSB7CiAgICB2b2lkKiByZXN1bHQgPSAwOwogICAgYUNv
bnRleHQtPkFsbG9jYXRlRnJvbVNoZWxsKHN6LCAmcmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7
CiAgfQogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHsKICAgIHRoaXMt
Pn5uc1N0eWxlRGlzcGxheSgpOwogICAgYUNvbnRleHQtPkZyZWVUb1NoZWxsKHNpemVvZihuc1N0
eWxlRGlzcGxheSksIHRoaXMpOwogIH07CgogIG5zQ2hhbmdlSGludCBDYWxjRGlmZmVyZW5jZShj
b25zdCBuc1N0eWxlRGlzcGxheSYgYU90aGVyKSBjb25zdDsKCiAgbnNTdHJpbmcgbUJpbmRpbmc7
CgoKCgoKCiAgbnNSZWN0IG1DbGlwOwoKICBQUlVpbnQ4IG1EaXNwbGF5OwogIFBSVWludDggbU9y
aWdpbmFsRGlzcGxheTsKICBQUlVpbnQ4IG1BcHBlYXJhbmNlOwogIFBSVWludDggbVBvc2l0aW9u
OwogIFBSVWludDggbUZsb2F0czsKICBQUlVpbnQ4IG1CcmVha1R5cGU7CiAgUFJQYWNrZWRCb29s
IG1CcmVha0JlZm9yZTsKICBQUlBhY2tlZEJvb2wgbUJyZWFrQWZ0ZXI7CiAgUFJVaW50OCBtT3Zl
cmZsb3c7CgogIFBSVWludDggbUNsaXBGbGFnczsKCiAgUFJCb29sIElzQmxvY2tMZXZlbCgpIGNv
bnN0IHtyZXR1cm4gKDEgPT0gbURpc3BsYXkpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKDQgPT0gbURpc3BsYXkpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKDggPT0gbURpc3BsYXkpO30KCiAgUFJCb29sIElzRmxvYXRpbmcoKSBjb25z
dCB7CiAgICByZXR1cm4gMCAhPSBtRmxvYXRzOwogIH0KCiAgUFJCb29sIElzQWJzb2x1dGVseVBv
c2l0aW9uZWQoKSBjb25zdCB7cmV0dXJuICgyID09IG1Qb3NpdGlvbikgfHwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMgPT0gbVBvc2l0aW9uKTt9Cgog
IFBSQm9vbCBJc1Bvc2l0aW9uZWQoKSBjb25zdCB7cmV0dXJuIElzQWJzb2x1dGVseVBvc2l0aW9u
ZWQoKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxID09IG1Qb3Np
dGlvbik7fQp9OwoKc3RydWN0IG5zU3R5bGVUYWJsZTogcHVibGljIG5zU3R5bGVTdHJ1Y3Qgewog
IG5zU3R5bGVUYWJsZSh2b2lkKTsKICBuc1N0eWxlVGFibGUoY29uc3QgbnNTdHlsZVRhYmxlJiBh
T3RoZXIpOwogIH5uc1N0eWxlVGFibGUodm9pZCk7CgogIHN0YXRpYyBjb25zdCBuc1N0eWxlU3Ry
dWN0SUQgR2V0U3R5bGVTdHJ1Y3RJRCgpIHtyZXR1cm4gZVN0eWxlU3RydWN0X1RhYmxlO30KCiAg
dm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KSB0
aHJvdygpIHsKICAgIHZvaWQqIHJlc3VsdCA9IDA7CiAgICBhQ29udGV4dC0+QWxsb2NhdGVGcm9t
U2hlbGwoc3osICZyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBEZXN0cm95
KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdGhpcy0+fm5zU3R5bGVUYWJsZSgpOwog
ICAgYUNvbnRleHQtPkZyZWVUb1NoZWxsKHNpemVvZihuc1N0eWxlVGFibGUpLCB0aGlzKTsKICB9
OwoKICBuc0NoYW5nZUhpbnQgQ2FsY0RpZmZlcmVuY2UoY29uc3QgbnNTdHlsZVRhYmxlJiBhT3Ro
ZXIpIGNvbnN0OwoKICBQUlVpbnQ4IG1MYXlvdXRTdHJhdGVneTsKICBQUlVpbnQ4IG1GcmFtZTsK
ICBQUlVpbnQ4IG1SdWxlczsKICBQUkludDMyIG1Db2xzOwogIFBSSW50MzIgbVNwYW47Cn07Cgpz
dHJ1Y3QgbnNTdHlsZVRhYmxlQm9yZGVyOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHls
ZVRhYmxlQm9yZGVyKG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCk7CiAgbnNTdHlsZVRhYmxlQm9y
ZGVyKGNvbnN0IG5zU3R5bGVUYWJsZUJvcmRlciYgYU90aGVyKTsKICB+bnNTdHlsZVRhYmxlQm9y
ZGVyKHZvaWQpOwoKICBzdGF0aWMgY29uc3QgbnNTdHlsZVN0cnVjdElEIEdldFN0eWxlU3RydWN0
SUQoKSB7cmV0dXJuIGVTdHlsZVN0cnVjdF9UYWJsZUJvcmRlcjt9CgogIHZvaWQqIG9wZXJhdG9y
IG5ldyhzaXplX3Qgc3osIG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgdGhyb3coKSB7CiAgICB2
b2lkKiByZXN1bHQgPSAwOwogICAgYUNvbnRleHQtPkFsbG9jYXRlRnJvbVNoZWxsKHN6LCAmcmVz
dWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29udGV4
dCogYUNvbnRleHQpIHsKICAgIHRoaXMtPn5uc1N0eWxlVGFibGVCb3JkZXIoKTsKICAgIGFDb250
ZXh0LT5GcmVlVG9TaGVsbChzaXplb2YobnNTdHlsZVRhYmxlQm9yZGVyKSwgdGhpcyk7CiAgfTsK
CiAgbnNDaGFuZ2VIaW50IENhbGNEaWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVUYWJsZUJvcmRlciYg
YU90aGVyKSBjb25zdDsKCiAgbnNTdHlsZUNvb3JkIG1Cb3JkZXJTcGFjaW5nWDsKICBuc1N0eWxl
Q29vcmQgbUJvcmRlclNwYWNpbmdZOwogIFBSVWludDggbUJvcmRlckNvbGxhcHNlOwogIFBSVWlu
dDggbUNhcHRpb25TaWRlOwogIFBSVWludDggbUVtcHR5Q2VsbHM7Cn07CgplbnVtIG5zU3R5bGVD
b250ZW50VHlwZSB7CiAgZVN0eWxlQ29udGVudFR5cGVfU3RyaW5nID0gMSwKICBlU3R5bGVDb250
ZW50VHlwZV9VUkwgPSAxMCwKICBlU3R5bGVDb250ZW50VHlwZV9BdHRyID0gMjAsCiAgZVN0eWxl
Q29udGVudFR5cGVfQ291bnRlciA9IDMwLAogIGVTdHlsZUNvbnRlbnRUeXBlX0NvdW50ZXJzID0g
MzEsCiAgZVN0eWxlQ29udGVudFR5cGVfT3BlblF1b3RlID0gNDAsCiAgZVN0eWxlQ29udGVudFR5
cGVfQ2xvc2VRdW90ZSA9IDQxLAogIGVTdHlsZUNvbnRlbnRUeXBlX05vT3BlblF1b3RlID0gNDIs
CiAgZVN0eWxlQ29udGVudFR5cGVfTm9DbG9zZVF1b3RlID0gNDMKfTsKCnN0cnVjdCBuc1N0eWxl
Q29udGVudERhdGEgewogIG5zU3R5bGVDb250ZW50VHlwZSBtVHlwZTsKICBuc1N0cmluZyBtQ29u
dGVudDsKfTsKCnN0cnVjdCBuc1N0eWxlQ291bnRlckRhdGEgewogIG5zU3RyaW5nIG1Db3VudGVy
OwogIFBSSW50MzIgbVZhbHVlOwp9OwoKCgoKc3RydWN0IG5zU3R5bGVRdW90ZXMgOiBwdWJsaWMg
bnNTdHlsZVN0cnVjdCB7CiAgbnNTdHlsZVF1b3RlcygpOwogIG5zU3R5bGVRdW90ZXMoY29uc3Qg
bnNTdHlsZVF1b3RlcyYgYVF1b3Rlcyk7CiAgfm5zU3R5bGVRdW90ZXMoKTsKCiAgc3RhdGljIGNv
bnN0IG5zU3R5bGVTdHJ1Y3RJRCBHZXRTdHlsZVN0cnVjdElEKCkge3JldHVybiBlU3R5bGVTdHJ1
Y3RfUXVvdGVzO30KCiAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJlc0NvbnRl
eHQqIGFDb250ZXh0KSB0aHJvdygpIHsKICAgIHZvaWQqIHJlc3VsdCA9IDA7CiAgICBhQ29udGV4
dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9
CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdGhpcy0+fm5z
U3R5bGVRdW90ZXMoKTsKICAgIGFDb250ZXh0LT5GcmVlVG9TaGVsbChzaXplb2YobnNTdHlsZVF1
b3RlcyksIHRoaXMpOwogIH07CgogIG5zQ2hhbmdlSGludCBDYWxjRGlmZmVyZW5jZShjb25zdCBu
c1N0eWxlUXVvdGVzJiBhT3RoZXIpIGNvbnN0OwoKCiAgUFJVaW50MzIgUXVvdGVzQ291bnQodm9p
ZCkgY29uc3QgeyByZXR1cm4gbVF1b3Rlc0NvdW50OyB9CiAgbnNyZXN1bHQgR2V0UXVvdGVzQXQo
UFJVaW50MzIgYUluZGV4LCBuc1N0cmluZyYgYU9wZW4sIG5zU3RyaW5nJiBhQ2xvc2UpIGNvbnN0
IHsKICAgIGlmIChhSW5kZXggPCBtUXVvdGVzQ291bnQpIHsKICAgICAgYUluZGV4ICo9IDI7CiAg
ICAgIGFPcGVuID0gbVF1b3Rlc1thSW5kZXhdOwogICAgICBhQ2xvc2UgPSBtUXVvdGVzWysrYUlu
ZGV4XTsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDA3
MDA1N0wpOwogIH0KCiAgbnNyZXN1bHQgQWxsb2NhdGVRdW90ZXMoUFJVaW50MzIgYUNvdW50KSB7
CiAgICBpZiAoYUNvdW50ICE9IG1RdW90ZXNDb3VudCkgewogICAgICBpZiAobVF1b3RlcykgeyBk
ZWxldGVbXSBtUXVvdGVzOyBtUXVvdGVzID0gMDsgfTsKICAgICAgaWYgKGFDb3VudCkgewogICAg
ICAgIG1RdW90ZXMgPSBuZXcgbnNTdHJpbmdbYUNvdW50ICogMl07CiAgICAgICAgaWYgKCEgbVF1
b3RlcykgewogICAgICAgICAgbVF1b3Rlc0NvdW50ID0gMDsKICAgICAgICAgIHJldHVybiAoKG5z
cmVzdWx0KSAweDgwMDcwMDBlTCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIG1RdW90ZXNDb3Vu
dCA9IGFDb3VudDsKICAgIH0KICAgIHJldHVybiAwOwogIH0KCiAgbnNyZXN1bHQgU2V0UXVvdGVz
QXQoUFJVaW50MzIgYUluZGV4LCBjb25zdCBuc1N0cmluZyYgYU9wZW4sIGNvbnN0IG5zU3RyaW5n
JiBhQ2xvc2UpIHsKICAgIGlmIChhSW5kZXggPCBtUXVvdGVzQ291bnQpIHsKICAgICAgYUluZGV4
ICo9IDI7CiAgICAgIG1RdW90ZXNbYUluZGV4XSA9IGFPcGVuOwogICAgICBtUXVvdGVzWysrYUlu
ZGV4XSA9IGFDbG9zZTsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICByZXR1cm4gKChuc3Jlc3Vs
dCkgMHg4MDA3MDA1N0wpOwogIH0KCnByb3RlY3RlZDoKICBQUlVpbnQzMiBtUXVvdGVzQ291bnQ7
CiAgbnNTdHJpbmcqIG1RdW90ZXM7Cn07CgpzdHJ1Y3QgbnNTdHlsZUNvbnRlbnQ6IHB1YmxpYyBu
c1N0eWxlU3RydWN0IHsKICBuc1N0eWxlQ29udGVudCh2b2lkKTsKICBuc1N0eWxlQ29udGVudChj
b25zdCBuc1N0eWxlQ29udGVudCYgYUNvbnRlbnQpOwogIH5uc1N0eWxlQ29udGVudCh2b2lkKTsK
CiAgc3RhdGljIGNvbnN0IG5zU3R5bGVTdHJ1Y3RJRCBHZXRTdHlsZVN0cnVjdElEKCkge3JldHVy
biBlU3R5bGVTdHJ1Y3RfQ29udGVudDt9CgogIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc3os
IG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgdGhyb3coKSB7CiAgICB2b2lkKiByZXN1bHQgPSAw
OwogICAgYUNvbnRleHQtPkFsbG9jYXRlRnJvbVNoZWxsKHN6LCAmcmVzdWx0KTsKICAgIHJldHVy
biByZXN1bHQ7CiAgfQogIHZvaWQgRGVzdHJveShuc0lQcmVzQ29udGV4dCogYUNvbnRleHQpIHsK
ICAgIHRoaXMtPn5uc1N0eWxlQ29udGVudCgpOwogICAgYUNvbnRleHQtPkZyZWVUb1NoZWxsKHNp
emVvZihuc1N0eWxlQ29udGVudCksIHRoaXMpOwogIH07CgogIG5zQ2hhbmdlSGludCBDYWxjRGlm
ZmVyZW5jZShjb25zdCBuc1N0eWxlQ29udGVudCYgYU90aGVyKSBjb25zdDsKCiAgUFJVaW50MzIg
Q29udGVudENvdW50KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1Db250ZW50Q291bnQ7IH0KICBuc3Jl
c3VsdCBHZXRDb250ZW50QXQoUFJVaW50MzIgYUluZGV4LCBuc1N0eWxlQ29udGVudFR5cGUmIGFU
eXBlLCBuc1N0cmluZyYgYUNvbnRlbnQpIGNvbnN0IHsKICAgIGlmIChhSW5kZXggPCBtQ29udGVu
dENvdW50KSB7CiAgICAgIGFUeXBlID0gbUNvbnRlbnRzW2FJbmRleF0ubVR5cGU7CiAgICAgIGFD
b250ZW50ID0gbUNvbnRlbnRzW2FJbmRleF0ubUNvbnRlbnQ7CiAgICAgIHJldHVybiAwOwogICAg
fQogICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwNTdMKTsKICB9CgogIG5zcmVzdWx0IEFs
bG9jYXRlQ29udGVudHMoUFJVaW50MzIgYUNvdW50KSB7CiAgICBpZiAoYUNvdW50ICE9IG1Db250
ZW50Q291bnQpIHsKICAgICAgaWYgKG1Db250ZW50cykgeyBkZWxldGVbXSBtQ29udGVudHM7IG1D
b250ZW50cyA9IDA7IH07CiAgICAgIGlmIChhQ291bnQpIHsKICAgICAgICBtQ29udGVudHMgPSBu
ZXcgbnNTdHlsZUNvbnRlbnREYXRhW2FDb3VudF07CiAgICAgICAgaWYgKCEgbUNvbnRlbnRzKSB7
CiAgICAgICAgICBtQ29udGVudENvdW50ID0gMDsKICAgICAgICAgIHJldHVybiAoKG5zcmVzdWx0
KSAweDgwMDcwMDBlTCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIG1Db250ZW50Q291bnQgPSBh
Q291bnQ7CiAgICB9CiAgICByZXR1cm4gMDsKICB9CgogIG5zcmVzdWx0IFNldENvbnRlbnRBdChQ
UlVpbnQzMiBhSW5kZXgsIG5zU3R5bGVDb250ZW50VHlwZSBhVHlwZSwgY29uc3QgbnNTdHJpbmcm
IGFDb250ZW50KSB7CiAgICBpZiAoYUluZGV4IDwgbUNvbnRlbnRDb3VudCkgewogICAgICBtQ29u
dGVudHNbYUluZGV4XS5tVHlwZSA9IGFUeXBlOwogICAgICBpZiAoYVR5cGUgPCBlU3R5bGVDb250
ZW50VHlwZV9PcGVuUXVvdGUpIHsKICAgICAgICBtQ29udGVudHNbYUluZGV4XS5tQ29udGVudCA9
IGFDb250ZW50OwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIG1Db250ZW50c1thSW5kZXhd
Lm1Db250ZW50LlRydW5jYXRlKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBy
ZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDA3MDA1N0wpOwogIH0KCiAgUFJVaW50MzIgQ291bnRlcklu
Y3JlbWVudENvdW50KHZvaWQpIGNvbnN0IHsgcmV0dXJuIG1JbmNyZW1lbnRDb3VudDsgfQogIG5z
cmVzdWx0IEdldENvdW50ZXJJbmNyZW1lbnRBdChQUlVpbnQzMiBhSW5kZXgsIG5zU3RyaW5nJiBh
Q291bnRlciwgUFJJbnQzMiYgYUluY3JlbWVudCkgY29uc3QgewogICAgaWYgKGFJbmRleCA8IG1J
bmNyZW1lbnRDb3VudCkgewogICAgICBhQ291bnRlciA9IG1JbmNyZW1lbnRzW2FJbmRleF0ubUNv
dW50ZXI7CiAgICAgIGFJbmNyZW1lbnQgPSBtSW5jcmVtZW50c1thSW5kZXhdLm1WYWx1ZTsKICAg
ICAgcmV0dXJuIDA7CiAgICB9CiAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDA3MDA1N0wpOwog
IH0KCiAgbnNyZXN1bHQgQWxsb2NhdGVDb3VudGVySW5jcmVtZW50cyhQUlVpbnQzMiBhQ291bnQp
IHsKICAgIGlmIChhQ291bnQgIT0gbUluY3JlbWVudENvdW50KSB7CiAgICAgIGlmIChtSW5jcmVt
ZW50cykgeyBkZWxldGVbXSBtSW5jcmVtZW50czsgbUluY3JlbWVudHMgPSAwOyB9OwogICAgICBp
ZiAoYUNvdW50KSB7CiAgICAgICAgbUluY3JlbWVudHMgPSBuZXcgbnNTdHlsZUNvdW50ZXJEYXRh
W2FDb3VudF07CiAgICAgICAgaWYgKCEgbUluY3JlbWVudHMpIHsKICAgICAgICAgIG1JbmNyZW1l
bnRDb3VudCA9IDA7CiAgICAgICAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4MDA3MDAwZUwpOwog
ICAgICAgIH0KICAgICAgfQogICAgICBtSW5jcmVtZW50Q291bnQgPSBhQ291bnQ7CiAgICB9CiAg
ICByZXR1cm4gMDsKICB9CgogIG5zcmVzdWx0IFNldENvdW50ZXJJbmNyZW1lbnRBdChQUlVpbnQz
MiBhSW5kZXgsIGNvbnN0IG5zU3RyaW5nJiBhQ291bnRlciwgUFJJbnQzMiBhSW5jcmVtZW50KSB7
CiAgICBpZiAoYUluZGV4IDwgbUluY3JlbWVudENvdW50KSB7CiAgICAgIG1JbmNyZW1lbnRzW2FJ
bmRleF0ubUNvdW50ZXIgPSBhQ291bnRlcjsKICAgICAgbUluY3JlbWVudHNbYUluZGV4XS5tVmFs
dWUgPSBhSW5jcmVtZW50OwogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVybiAoKG5zcmVz
dWx0KSAweDgwMDcwMDU3TCk7CiAgfQoKICBQUlVpbnQzMiBDb3VudGVyUmVzZXRDb3VudCh2b2lk
KSBjb25zdCB7IHJldHVybiBtUmVzZXRDb3VudDsgfQogIG5zcmVzdWx0IEdldENvdW50ZXJSZXNl
dEF0KFBSVWludDMyIGFJbmRleCwgbnNTdHJpbmcmIGFDb3VudGVyLCBQUkludDMyJiBhVmFsdWUp
IGNvbnN0IHsKICAgIGlmIChhSW5kZXggPCBtUmVzZXRDb3VudCkgewogICAgICBhQ291bnRlciA9
IG1SZXNldHNbYUluZGV4XS5tQ291bnRlcjsKICAgICAgYVZhbHVlID0gbVJlc2V0c1thSW5kZXhd
Lm1WYWx1ZTsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICByZXR1cm4gKChuc3Jlc3VsdCkgMHg4
MDA3MDA1N0wpOwogIH0KCiAgbnNyZXN1bHQgQWxsb2NhdGVDb3VudGVyUmVzZXRzKFBSVWludDMy
IGFDb3VudCkgewogICAgaWYgKGFDb3VudCAhPSBtUmVzZXRDb3VudCkgewogICAgICBpZiAobVJl
c2V0cykgeyBkZWxldGVbXSBtUmVzZXRzOyBtUmVzZXRzID0gMDsgfTsKICAgICAgaWYgKGFDb3Vu
dCkgewogICAgICAgIG1SZXNldHMgPSBuZXcgbnNTdHlsZUNvdW50ZXJEYXRhW2FDb3VudF07CiAg
ICAgICAgaWYgKCEgbVJlc2V0cykgewogICAgICAgICAgbVJlc2V0Q291bnQgPSAwOwogICAgICAg
ICAgcmV0dXJuICgobnNyZXN1bHQpIDB4ODAwNzAwMGVMKTsKICAgICAgICB9CiAgICAgIH0KICAg
ICAgbVJlc2V0Q291bnQgPSBhQ291bnQ7CiAgICB9CiAgICByZXR1cm4gMDsKICB9CgogIG5zcmVz
dWx0IFNldENvdW50ZXJSZXNldEF0KFBSVWludDMyIGFJbmRleCwgY29uc3QgbnNTdHJpbmcmIGFD
b3VudGVyLCBQUkludDMyIGFWYWx1ZSkgewogICAgaWYgKGFJbmRleCA8IG1SZXNldENvdW50KSB7
CiAgICAgIG1SZXNldHNbYUluZGV4XS5tQ291bnRlciA9IGFDb3VudGVyOwogICAgICBtUmVzZXRz
W2FJbmRleF0ubVZhbHVlID0gYVZhbHVlOwogICAgICByZXR1cm4gMDsKICAgIH0KICAgIHJldHVy
biAoKG5zcmVzdWx0KSAweDgwMDcwMDU3TCk7CiAgfQoKICBuc1N0eWxlQ29vcmQgbU1hcmtlck9m
ZnNldDsKCnByb3RlY3RlZDoKICBQUlVpbnQzMiBtQ29udGVudENvdW50OwogIG5zU3R5bGVDb250
ZW50RGF0YSogbUNvbnRlbnRzOwoKICBQUlVpbnQzMiBtSW5jcmVtZW50Q291bnQ7CiAgbnNTdHls
ZUNvdW50ZXJEYXRhKiBtSW5jcmVtZW50czsKCiAgUFJVaW50MzIgbVJlc2V0Q291bnQ7CiAgbnNT
dHlsZUNvdW50ZXJEYXRhKiBtUmVzZXRzOwp9OwoKc3RydWN0IG5zU3R5bGVVSVJlc2V0OiBwdWJs
aWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHlsZVVJUmVzZXQodm9pZCk7CiAgbnNTdHlsZVVJUmVz
ZXQoY29uc3QgbnNTdHlsZVVJUmVzZXQmIGFPdGhlcik7CiAgfm5zU3R5bGVVSVJlc2V0KHZvaWQp
OwoKICBzdGF0aWMgY29uc3QgbnNTdHlsZVN0cnVjdElEIEdldFN0eWxlU3RydWN0SUQoKSB7cmV0
dXJuIGVTdHlsZVN0cnVjdF9VSVJlc2V0O30KCiAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBz
eiwgbnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KSB0aHJvdygpIHsKICAgIHZvaWQqIHJlc3VsdCA9
IDA7CiAgICBhQ29udGV4dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1bHQpOwogICAgcmV0
dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkg
ewogICAgdGhpcy0+fm5zU3R5bGVVSVJlc2V0KCk7CiAgICBhQ29udGV4dC0+RnJlZVRvU2hlbGwo
c2l6ZW9mKG5zU3R5bGVVSVJlc2V0KSwgdGhpcyk7CiAgfTsKCiAgbnNDaGFuZ2VIaW50IENhbGNE
aWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVVSVJlc2V0JiBhT3RoZXIpIGNvbnN0OwoKICBQUlVuaWNo
YXIgbUtleUVxdWl2YWxlbnQ7CiAgUFJVaW50OCBtVXNlclNlbGVjdDsKICBQUlVpbnQ4IG1SZXNp
emVyOwogIFBSVWludDggbUZvcmNlQnJva2VuSW1hZ2VJY29uOwp9OwoKc3RydWN0IG5zU3R5bGVV
c2VySW50ZXJmYWNlOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHlsZVVzZXJJbnRlcmZh
Y2Uodm9pZCk7CiAgbnNTdHlsZVVzZXJJbnRlcmZhY2UoY29uc3QgbnNTdHlsZVVzZXJJbnRlcmZh
Y2UmIGFPdGhlcik7CiAgfm5zU3R5bGVVc2VySW50ZXJmYWNlKHZvaWQpOwoKICBzdGF0aWMgY29u
c3QgbnNTdHlsZVN0cnVjdElEIEdldFN0eWxlU3RydWN0SUQoKSB7cmV0dXJuIGVTdHlsZVN0cnVj
dF9Vc2VySW50ZXJmYWNlO30KCiAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzeiwgbnNJUHJl
c0NvbnRleHQqIGFDb250ZXh0KSB0aHJvdygpIHsKICAgIHZvaWQqIHJlc3VsdCA9IDA7CiAgICBh
Q29udGV4dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1bHQpOwogICAgcmV0dXJuIHJlc3Vs
dDsKICB9CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkgewogICAgdGhp
cy0+fm5zU3R5bGVVc2VySW50ZXJmYWNlKCk7CiAgICBhQ29udGV4dC0+RnJlZVRvU2hlbGwoc2l6
ZW9mKG5zU3R5bGVVc2VySW50ZXJmYWNlKSwgdGhpcyk7CiAgfTsKCiAgbnNDaGFuZ2VIaW50IENh
bGNEaWZmZXJlbmNlKGNvbnN0IG5zU3R5bGVVc2VySW50ZXJmYWNlJiBhT3RoZXIpIGNvbnN0OwoK
ICBQUlVpbnQ4IG1Vc2VySW5wdXQ7CiAgUFJVaW50OCBtVXNlck1vZGlmeTsKICBQUlVpbnQ4IG1V
c2VyRm9jdXM7CgogIFBSVWludDggbUN1cnNvcjsKICBuc1N0cmluZyBtQ3Vyc29ySW1hZ2U7Cn07
CgoKc3RydWN0IG5zU3R5bGVYVUwgOiBwdWJsaWMgbnNTdHlsZVN0cnVjdCB7CiAgbnNTdHlsZVhV
TCgpOwogIG5zU3R5bGVYVUwoY29uc3QgbnNTdHlsZVhVTCYgYVNvdXJjZSk7CiAgfm5zU3R5bGVY
VUwoKTsKCiAgc3RhdGljIGNvbnN0IG5zU3R5bGVTdHJ1Y3RJRCBHZXRTdHlsZVN0cnVjdElEKCkg
e3JldHVybiBlU3R5bGVTdHJ1Y3RfWFVMO30KCiAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBz
eiwgbnNJUHJlc0NvbnRleHQqIGFDb250ZXh0KSB0aHJvdygpIHsKICAgIHZvaWQqIHJlc3VsdCA9
IDA7CiAgICBhQ29udGV4dC0+QWxsb2NhdGVGcm9tU2hlbGwoc3osICZyZXN1bHQpOwogICAgcmV0
dXJuIHJlc3VsdDsKICB9CiAgdm9pZCBEZXN0cm95KG5zSVByZXNDb250ZXh0KiBhQ29udGV4dCkg
ewogICAgdGhpcy0+fm5zU3R5bGVYVUwoKTsKICAgIGFDb250ZXh0LT5GcmVlVG9TaGVsbChzaXpl
b2YobnNTdHlsZVhVTCksIHRoaXMpOwogIH07CgogIG5zQ2hhbmdlSGludCBDYWxjRGlmZmVyZW5j
ZShjb25zdCBuc1N0eWxlWFVMJiBhT3RoZXIpIGNvbnN0OwoKICBmbG9hdCBtQm94RmxleDsKICBQ
UlVpbnQzMiBtQm94T3JkaW5hbDsKICBQUlVpbnQ4IG1Cb3hBbGlnbjsKICBQUlVpbnQ4IG1Cb3hE
aXJlY3Rpb247CiAgUFJVaW50OCBtQm94T3JpZW50OwogIFBSVWludDggbUJveFBhY2s7Cn07CiMg
MTE3MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2NvbnRlbnQvbnNTdHlsZVN0cnVjdC5oIgpzdHJ1
Y3QgbnNCb3JkZXJFZGdlczsKCgpzdHJ1Y3QgbnNCb3JkZXJFZGdlCnsKCiAgbnNjb29yZCBtV2lk
dGg7CgogIG5zY29vcmQgbUxlbmd0aDsKICBuc2NvbG9yIG1Db2xvcjsKCiAgbnNCb3JkZXJFZGdl
cyAqIG1JbnNpZGVOZWlnaGJvcjsKICBQUlVpbnQ4IG1TdHlsZTsKCiAgUFJVaW50OCBtU2lkZTsK
CiAgbnNCb3JkZXJFZGdlKCk7Cn07CgppbmxpbmUgbnNCb3JkZXJFZGdlOjpuc0JvcmRlckVkZ2Uo
KQp7CiAgbVdpZHRoPTA7CiAgbUxlbmd0aD0wOwogIG1TdHlsZT0wOwogIG1Db2xvcj0wOwogIG1T
aWRlPTM7CiAgbUluc2lkZU5laWdoYm9yID0gMDsKfTsKCgoKCnN0cnVjdCBuc0JvcmRlckVkZ2Vz
CnsKICBuc1ZvaWRBcnJheSBtRWRnZXNbNF07CiAgbnNNYXJnaW4gbU1heEJvcmRlcldpZHRoOwog
IFBSUGFja2VkQm9vbCBtT3V0c2lkZUVkZ2U7CgogIG5zQm9yZGVyRWRnZXMoKTsKfTsKCmlubGlu
ZSBuc0JvcmRlckVkZ2VzOjpuc0JvcmRlckVkZ2VzKCkKewogIG1NYXhCb3JkZXJXaWR0aC5TaXpl
VG8oMCwwLDAsMCk7CiAgbU91dHNpZGVFZGdlID0gMTsKfTsKIyA1MCAiLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIiAyCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xh
eW91dC9uc0lTdHlsZUNvbnRleHQuaCIgMQojIDU0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5
b3V0L25zSVN0eWxlQ29udGV4dC5oIgpjbGFzcyBuc0lTaXplT2ZIYW5kbGVyOwoKY2xhc3MgbnNJ
RnJhbWU7CmNsYXNzIG5zSVN0eWxlU2V0OwpjbGFzcyBuc0lQcmVzQ29udGV4dDsKY2xhc3MgbnNJ
U3VwcG9ydHNBcnJheTsKY2xhc3MgbnNJU3R5bGVDb250ZXh0OwpjbGFzcyBuc1J1bGVOb2RlOwoK
CgoKCgoKY2xhc3MgbnNJU3R5bGVDb250ZXh0IDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGlj
OgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQg
PSB7IDB4MjZhNGQ5NzAsIDB4YTM0MiwgMHgxMWQxLCB7MHg4OSwgMHg3NCwgMHgwMCwgMHg2MCwg
MHgwOCwgMHg5MSwgMHgxYiwgMHg4MX0gfTsgcmV0dXJuIGlpZDt9CgogIHZpcnR1YWwgUFJCb29s
IEVxdWFscyhjb25zdCBuc0lTdHlsZUNvbnRleHQqIGFPdGhlcikgY29uc3QgPSAwOwoKICB2aXJ0
dWFsIGFscmVhZHlfQWRkUmVmZWQ8bnNJU3R5bGVDb250ZXh0PiBHZXRQYXJlbnQodm9pZCkgY29u
c3QgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Rmlyc3RDaGlsZChuc0lTdHlsZUNvbnRleHQq
KiBhQ29udGV4dCk9MDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRQc2V1ZG9UeXBlKG5zSUF0b20q
JiBhUHNldWRvVGFnKSBjb25zdCA9IDA7CgogIHZpcnR1YWwgbnNyZXN1bHQgRmluZENoaWxkV2l0
aFJ1bGVzKGNvbnN0IG5zSUF0b20qIGFQc2V1ZG9UYWcsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNSdWxlTm9kZSogYVJ1bGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSVN0eWxlQ29udGV4dComIGFSZXN1bHQpID0gMDsKCiAgdmlydHVhbCBQUkJvb2wgSGFz
VGV4dERlY29yYXRpb25zKCk9MDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm9yZGVyUGFkZGlu
Z0Zvcihuc1N0eWxlQm9yZGVyUGFkZGluZyYgYUJvcmRlclBhZGRpbmcpPTA7CgoKCgoKCgogIHZp
cnR1YWwgbnNyZXN1bHQgQ2FsY1N0eWxlRGlmZmVyZW5jZShuc0lTdHlsZUNvbnRleHQqIGFPdGhl
ciwgbnNDaGFuZ2VIaW50JiBhSGludCkgPSAwOwoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFJ1bGVO
b2RlKG5zUnVsZU5vZGUqKiBhUmVzdWx0KT0wOwogIHZpcnR1YWwgbnNyZXN1bHQgQWRkU3R5bGVC
aXQoY29uc3QgUFJVaW50MzImIGFCaXQpPTA7CiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTdHlsZUJp
dHMoUFJVaW50MzIqIGFCaXRzKT0wOwojIDExMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91
dC9uc0lTdHlsZUNvbnRleHQuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFN0eWxlKG5zU3R5bGVT
dHJ1Y3RJRCBhU0lELCBuc1N0eWxlU3RydWN0KiBhU3RydWN0KSA9IDA7CgoKICB2aXJ0dWFsIG5z
cmVzdWx0IEdldFN0eWxlKG5zU3R5bGVTdHJ1Y3RJRCBhU0lELCBjb25zdCBuc1N0eWxlU3RydWN0
KiogYVN0cnVjdCkgPSAwOwoKICB2aXJ0dWFsIGNvbnN0IG5zU3R5bGVTdHJ1Y3QqIEdldFN0eWxl
RGF0YShuc1N0eWxlU3RydWN0SUQgYVNJRCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zU3R5bGVTdHJ1
Y3QqIEdldFVuaXF1ZVN0eWxlRGF0YShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBjb25z
dCBuc1N0eWxlU3RydWN0SUQmIGFTSUQpID0gMDsKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xlYXJD
YWNoZWREYXRhRm9yUnVsZShuc0lTdHlsZVJ1bGUqIGFSdWxlKSA9IDA7CgoKCiAgdmlydHVhbCBu
c3Jlc3VsdCBDbGVhclN0eWxlRGF0YShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LCBuc0lT
dHlsZVJ1bGUqIGFSdWxlKSA9IDA7Cn07CgoKCmV4dGVybiBuc3Jlc3VsdAogIE5TX05ld1N0eWxl
Q29udGV4dChuc0lTdHlsZUNvbnRleHQqKiBhSW5zdGFuY2VQdHJSZXN1bHQsCiAgICAgICAgICAg
ICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYVBhcmVudENvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgIG5zSUF0b20qIGFQc2V1ZG9UeXBlLAogICAgICAgICAgICAgICAgICAgICBuc1J1bGVO
b2RlKiBhUnVsZU5vZGUsCiAgICAgICAgICAgICAgICAgICAgIG5zSVByZXNDb250ZXh0KiBhUHJl
c0NvbnRleHQpOwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5lIHZvaWQKR2V0U3R5bGVEYXRh
KG5zSVN0eWxlQ29udGV4dCogYVN0eWxlQ29udGV4dCwgY29uc3QgVCoqIGFTdHlsZVN0cnVjdCkK
ewogICAgKmFTdHlsZVN0cnVjdCA9IHN0YXRpY19jYXN0PCBjb25zdCBUKiA+KGFTdHlsZUNvbnRl
eHQtPkdldFN0eWxlRGF0YSgoVDo6R2V0U3R5bGVTdHJ1Y3RJRCgpKSkpOwoKfQojIDUxICIuLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSUZyYW1lLmgiIDIKIyA3MCAiLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgpzdHJ1Y3QgbnNIVE1MUmVmbG93U3RhdGU7CmNs
YXNzIG5zSFRNTFJlZmxvd0NvbW1hbmQ7CnN0cnVjdCBuc0hUTUxSZWZsb3dNZXRyaWNzOwoKY2xh
c3MgbnNJQXRvbTsKY2xhc3MgbnNJUHJlc0NvbnRleHQ7CmNsYXNzIG5zSVByZXNTaGVsbDsKY2xh
c3MgbnNJUmVuZGVyaW5nQ29udGV4dDsKY2xhc3MgbnNJU2l6ZU9mSGFuZGxlcjsKY2xhc3MgbnNJ
VmlldzsKY2xhc3MgbnNJV2lkZ2V0OwpjbGFzcyBuc0lET01SYW5nZTsKY2xhc3MgbnNJU2VsZWN0
aW9uQ29udHJvbGxlcjsKCmNsYXNzIG5zSUFjY2Vzc2libGU7CgoKc3RydWN0IG5zUGVla09mZnNl
dFN0cnVjdDsKc3RydWN0IG5zUG9pbnQ7CnN0cnVjdCBuc1JlY3Q7CnN0cnVjdCBuc1NpemU7CnN0
cnVjdCBuc01hcmdpbjsKCgp0eXBlZGVmIHZvaWQKKCpOU0ZyYW1lUHJvcGVydHlEdG9yRnVuYyko
bnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnNJRnJhbWUqIGFGcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYVBy
b3BlcnR5TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYVByb3BlcnR5VmFs
dWUpOwojIDExOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgp0eXBl
ZGVmIFBSVWludDMyIG5zU3BsaXR0YWJsZVR5cGU7CiMgMTM2ICIuLi8uLi8uLi9kaXN0L2luY2x1
ZGUvbGF5b3V0L25zSUZyYW1lLmgiCnR5cGVkZWYgUFJVaW50MzIgbnNGcmFtZVN0YXRlOwojIDIz
MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgplbnVtIG5zRnJhbWVQ
YWludExheWVyIHsKICBlRnJhbWVQYWludExheWVyX1VuZGVybGF5ID0gMCwKICBlRnJhbWVQYWlu
dExheWVyX0NvbnRlbnQgPSAxLAogIGVGcmFtZVBhaW50TGF5ZXJfT3ZlcmxheSA9IDIKfTsKCmVu
dW0gbnNTZWxlY3Rpb25BbW91bnQgewogIGVTZWxlY3RDaGFyYWN0ZXIgPSAwLAogIGVTZWxlY3RX
b3JkID0gMSwKICBlU2VsZWN0TGluZSA9IDIsCiAgZVNlbGVjdEJlZ2luTGluZSA9IDMsCiAgZVNl
bGVjdEVuZExpbmUgPSA0LAogIGVTZWxlY3ROb0Ftb3VudCA9IDUsCiAgZVNlbGVjdERpciA9IDYs
CiAgZVNlbGVjdFBhcmFncmFwaCA9IDcKfTsKCmVudW0gbnNEaXJlY3Rpb24gewogIGVEaXJOZXh0
ID0gMCwKICBlRGlyUHJldmlvdXM9IDEKfTsKCmVudW0gbnNTcHJlYWQgewogIGVTcHJlYWROb25l
ID0gMCwKICBlU3ByZWFkQWNyb3NzID0gMSwKICBlU3ByZWFkRG93biA9IDIKfTsKIyAyOTIgIi4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJRnJhbWUuaCIKdHlwZWRlZiBQUlVpbnQzMiBu
c1JlZmxvd1N0YXR1czsKIyAzNzUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJRnJh
bWUuaCIKdHlwZWRlZiBQUkJvb2wgbnNEaWRSZWZsb3dTdGF0dXM7CiMgMzk2ICIuLi8uLi8uLi9k
aXN0L2luY2x1ZGUvbGF5b3V0L25zSUZyYW1lLmgiCmNsYXNzIG5zSUZyYW1lIDogcHVibGljIG5z
SVN1cHBvcnRzCnsKcHVibGljOgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp
YyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4YTZjZjkwNTAsIDB4MTViMywgMHgxMWQyLHsweDkzLCAw
eDJlLCAweDAwLCAweDgwLCAweDVmLCAweDhhLCAweGRkLCAweDMyfX07IHJldHVybiBpaWQ7fQoj
IDQxOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgogIHZpcnR1YWwg
bnNyZXN1bHQgSW5pdChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgbnNJQ29udGVudCogYUNvbnRlbnQsCiAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSog
YVBhcmVudCwKICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCogYUNvbnRleHQsCiAg
ICAgICAgICAgICAgICAgICBuc0lGcmFtZSogYVByZXZJbkZsb3cpID0gMDsKCgoKCgogIHZpcnR1
YWwgbnNyZXN1bHQgRGVzdHJveShuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KSA9IDA7CgoK
CgogIHZpcnR1YWwgdm9pZCBSZW1vdmVkQXNQcmltYXJ5RnJhbWUobnNJUHJlc0NvbnRleHQqIGFQ
cmVzQ29udGV4dCkge30KIyA0NTMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJRnJh
bWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEluaXRpYWxDaGlsZExpc3QobnNJUHJlc0NvbnRl
eHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0
b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1l
KiBhQ2hpbGRMaXN0KSA9IDA7CiMgNDcxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25z
SUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBcHBlbmRGcmFtZXMobnNJUHJlc0NvbnRleHQq
IGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lQcmVzU2hlbGwmIGFQ
cmVzU2hlbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhRnJhbWVMaXN0KSA9IDA7CiMgNDkx
ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jl
c3VsdCBJbnNlcnRGcmFtZXMobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBuc0lQcmVzU2hlbGwmIGFQcmVzU2hlbGwsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg
IG5zSUZyYW1lKiBhUHJldkZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1l
KiBhRnJhbWVMaXN0KSA9IDA7CiMgNTEzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25z
SUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZW1vdmVGcmFtZShuc0lQcmVzQ29udGV4dCog
YVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgbnNJUHJlc1NoZWxsJiBhUHJl
c1NoZWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYUxpc3ROYW1lLAogICAg
ICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqIGFPbGRGcmFtZSkgPSAwOwojIDUzNSAiLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQg
UmVwbGFjZUZyYW1lKG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnNJUHJlc1NoZWxsJiBhUHJlc1NoZWxsLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIG5zSUF0b20qIGFMaXN0TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lG
cmFtZSogYU9sZEZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiBhTmV3
RnJhbWUpID0gMDsKCgoKCgoKCiAgbnNyZXN1bHQgR2V0Q29udGVudChuc0lDb250ZW50KiogYUNv
bnRlbnQpIGNvbnN0IHsgKmFDb250ZW50ID0gbUNvbnRlbnQ7IG5zX2lmX2FkZHJlZigqYUNvbnRl
bnQpOyByZXR1cm4gMDsgfQoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRPZmZzZXRzKFBSSW50
MzIgJnN0YXJ0LCBQUkludDMyICZlbmQpIGNvbnN0ID0gMDsKCgoKCgoKCiAgbnNyZXN1bHQgR2V0
U3R5bGVDb250ZXh0KG5zSVN0eWxlQ29udGV4dCoqIGFTdHlsZUNvbnRleHQpIGNvbnN0IHsKICAg
ICphU3R5bGVDb250ZXh0ID0gbVN0eWxlQ29udGV4dDsgbnNfaWZfYWRkcmVmKCphU3R5bGVDb250
ZXh0KTsgcmV0dXJuIDA7CiAgfQogIG5zcmVzdWx0IFNldFN0eWxlQ29udGV4dChuc0lQcmVzQ29u
dGV4dCogYVByZXNDb250ZXh0LCBuc0lTdHlsZUNvbnRleHQqIGFDb250ZXh0KSB7CiAgICBpZiAo
YUNvbnRleHQgIT0gbVN0eWxlQ29udGV4dCkgewogICAgICBkbyB7IGlmIChtU3R5bGVDb250ZXh0
KSB7IChtU3R5bGVDb250ZXh0KS0+UmVsZWFzZSgpOyAobVN0eWxlQ29udGV4dCkgPSAwOyB9IH0g
d2hpbGUgKDApOwogICAgICBpZiAoMCAhPSBhQ29udGV4dCkgewogICAgICAgIG1TdHlsZUNvbnRl
eHQgPSBhQ29udGV4dDsKICAgICAgICAoYUNvbnRleHQpLT5BZGRSZWYoKTsKICAgICAgICBEaWRT
ZXRTdHlsZUNvbnRleHQoYVByZXNDb250ZXh0KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIDA7
CiAgfQoKCiAgdmlydHVhbCBuc3Jlc3VsdCBEaWRTZXRTdHlsZUNvbnRleHQobnNJUHJlc0NvbnRl
eHQqIGFQcmVzQ29udGV4dCkgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFN0eWxlRGF0
YUV4dGVybmFsKG5zU3R5bGVTdHJ1Y3RJRCBhU0lELAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbnNTdHlsZVN0cnVjdComIGFTdHlsZVN0cnVjdCkgY29uc3QgPSAwOwoj
IDU5MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgogIG5zcmVzdWx0
IEdldFN0eWxlRGF0YShuc1N0eWxlU3RydWN0SUQgYVNJRCwKICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgbnNTdHlsZVN0cnVjdComIGFTdHlsZVN0cnVjdCkgY29uc3QgewogICAgcmV0dXJu
IEdldFN0eWxlRGF0YUV4dGVybmFsKGFTSUQsIGFTdHlsZVN0cnVjdCk7CiAgfQoKCgogIG5zcmVz
dWx0IEdldFN0eWxlKG5zU3R5bGVTdHJ1Y3RJRCBhU0lELCBjb25zdCBuc1N0eWxlU3RydWN0Kiog
YVN0cnVjdCkgY29uc3QgewogICAgOwogICAgbVN0eWxlQ29udGV4dC0+R2V0U3R5bGUoYVNJRCwg
YVN0cnVjdCk7CiAgICByZXR1cm4gMDsKICB9CgoKICB2aXJ0dWFsIG5zcmVzdWx0IENhbGNCb3Jk
ZXJQYWRkaW5nKG5zTWFyZ2luJiBhQm9yZGVyUGFkZGluZykgY29uc3QgPSAwOwojIDYxOSAiLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0QWRkaXRpb25hbFN0eWxlQ29udGV4dChQUkludDMyIGFJbmRleCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSVN0eWxlQ29udGV4dCoqIGFTdHlsZUNvbnRleHQp
IGNvbnN0ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldEFkZGl0aW9uYWxTdHlsZUNvbnRleHQo
UFJJbnQzMiBhSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lTdHlsZUNvbnRleHQqIGFTdHlsZUNvbnRleHQpID0gMDsKCgoKCiAgbnNyZXN1bHQgR2V0UGFy
ZW50KG5zSUZyYW1lKiogYVBhcmVudCkgY29uc3QgeyAqYVBhcmVudCA9IG1QYXJlbnQ7IHJldHVy
biAwOyB9CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQYXJlbnQoY29uc3QgbnNJRnJhbWUqIGFQYXJl
bnQpIHsgbVBhcmVudCA9IChuc0lGcmFtZSopYVBhcmVudDsgcmV0dXJuIDA7IH0KIyA2MzggIi4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJRnJhbWUuaCIKICBuc3Jlc3VsdCBHZXRSZWN0
KG5zUmVjdCYgYVJlY3QpIGNvbnN0IHsKICAgIGFSZWN0ID0gbVJlY3Q7CiAgICByZXR1cm4gMDsK
ICB9CgogIG5zcmVzdWx0IEdldE9yaWdpbihuc1BvaW50JiBhUG9pbnQpIGNvbnN0IHsKICAgIGFQ
b2ludC54ID0gbVJlY3QueDsKICAgIGFQb2ludC55ID0gbVJlY3QueTsKICAgIHJldHVybiAwOwog
IH0KCiAgbnNyZXN1bHQgR2V0U2l6ZShuc1NpemUmIGFTaXplKSBjb25zdCB7CiAgICBhU2l6ZS53
aWR0aCA9IG1SZWN0LndpZHRoOwogICAgYVNpemUuaGVpZ2h0ID0gbVJlY3QuaGVpZ2h0OwogICAg
cmV0dXJuIDA7CiAgfQoKICBuc3Jlc3VsdCBTZXRSZWN0KG5zSVByZXNDb250ZXh0KiBhUHJlc0Nv
bnRleHQsCiAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYVJlY3QpIHsKICAgIE1vdmVUbyhh
UHJlc0NvbnRleHQsIGFSZWN0LngsIGFSZWN0LnkpOwogICAgU2l6ZVRvKGFQcmVzQ29udGV4dCwg
YVJlY3Qud2lkdGgsIGFSZWN0LmhlaWdodCk7CiAgICByZXR1cm4gMDsKICB9CgogIG5zcmVzdWx0
IE1vdmVUbyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICBu
c2Nvb3JkIGFYLAogICAgICAgICAgICAgICAgICBuc2Nvb3JkIGFZKSB7CiAgICBtUmVjdC54ID0g
YVg7CiAgICBtUmVjdC55ID0gYVk7CiAgICByZXR1cm4gMDsKICB9CgogIG5zcmVzdWx0IFNpemVU
byhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICBuc2Nvb3Jk
IGFXaWR0aCwKICAgICAgICAgICAgICAgICAgbnNjb29yZCBhSGVpZ2h0KSB7CiAgICBtUmVjdC53
aWR0aCA9IGFXaWR0aDsKICAgIG1SZWN0LmhlaWdodCA9IGFIZWlnaHQ7CiAgICByZXR1cm4gMDsK
ICB9CiMgNjg4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSUZyYW1lLmgiCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRBZGRpdGlvbmFsQ2hpbGRMaXN0TmFtZShQUkludDMyIGFJbmRleCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiogYUxpc3RO
YW1lKSBjb25zdCA9IDA7CiMgNjk5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSUZy
YW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBGaXJzdENoaWxkKG5zSVByZXNDb250ZXh0KiBhUHJl
c0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBuc0lBdG9tKiBhTGlzdE5hbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lGcmFtZSoqIGFGaXJzdENoaWxkKSBjb25zdCA9IDA7
CgoKCgogIG5zcmVzdWx0IEdldE5leHRTaWJsaW5nKG5zSUZyYW1lKiogYU5leHRTaWJsaW5nKSBj
b25zdCB7CiAgICAqYU5leHRTaWJsaW5nID0gbU5leHRTaWJsaW5nOwogICAgcmV0dXJuIDA7CiAg
fQoKICBuc3Jlc3VsdCBTZXROZXh0U2libGluZyhuc0lGcmFtZSogYU5leHRTaWJsaW5nKSB7CiAg
ICBtTmV4dFNpYmxpbmcgPSBhTmV4dFNpYmxpbmc7CiAgICByZXR1cm4gMDsKICB9CgoKCgoKCiAg
dmlydHVhbCBuc3Jlc3VsdCBQYWludChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAogICAg
ICAgICAgICAgICAgICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSZW5kZXJpbmdDb250ZXh0LAog
ICAgICAgICAgICAgICAgICAgIGNvbnN0IG5zUmVjdCYgYURpcnR5UmVjdCwKICAgICAgICAgICAg
ICAgICAgICBuc0ZyYW1lUGFpbnRMYXllciBhV2hpY2hMYXllciwKICAgICAgICAgICAgICAgICAg
ICBQUlVpbnQzMiBhRmxhZ3MgPSAwKSA9IDA7CgoKCgoKICB2aXJ0dWFsIFBSQm9vbCBDYW5QYWlu
dEJhY2tncm91bmQoKSB7IHJldHVybiAxOyB9CiMgNzQ4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bGF5b3V0L25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBIYW5kbGVFdmVudChuc0lQcmVz
Q29udGV4dCogYVByZXNDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIG5zR1VJRXZl
bnQqIGFFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICBuc0V2ZW50U3RhdHVzKiBhRXZl
bnRTdGF0dXMpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb250ZW50Rm9yRXZlbnQobnNJ
UHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnNFdmVudCogYUV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lD
b250ZW50KiogYUNvbnRlbnQpID0gMDsKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRDb250ZW50QW5k
T2Zmc2V0c0Zyb21Qb2ludChuc0lQcmVzQ29udGV4dCogYUNYLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNQb2ludCYgYVBvaW50LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCAqKiBhTmV3Q29udGVu
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzImIGFD
b250ZW50T2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJJbnQzMiYgYUNvbnRlbnRPZmZzZXRFbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUkJvb2wmIGFCZWdpbkZyYW1lQ29udGVudCkgPSAwOwoKCgoKCiAgdmly
dHVhbCBuc3Jlc3VsdCBHZXRDdXJzb3IobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgbnNQb2ludCYgYVBvaW50LAogICAgICAgICAgICAgICAgICAg
ICAgICBQUkludDMyJiBhQ3Vyc29yKSA9IDA7CiMgNzc4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bGF5b3V0L25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRGcmFtZUZvclBvaW50KG5z
SVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBuc1BvaW50JiBhUG9pbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0ZyYW1lUGFpbnRMYXllciBhV2hpY2hMYXllciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSUZyYW1lKiogYUZyYW1lKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0
UG9pbnRGcm9tT2Zmc2V0KG5zSVByZXNDb250ZXh0KiBpblByZXNDb250ZXh0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdDb250ZXh0KiBpblJlbmRDb250ZXh0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGluT2Zmc2V0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1BvaW50KiBvdXRQb2ludCkgPSAwOwojIDgw
MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0Q2hpbGRGcmFtZUNvbnRhaW5pbmdPZmZzZXQoUFJJbnQzMiBpbkNvbnRlbnRPZmZz
ZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSQm9vbCBpbkhpbnQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSW50MzIqIG91dEZyYW1lQ29udGVudE9mZnNl
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRnJhbWUqICpvdXRDaGlsZEZy
YW1lKSA9IDA7CgoKCgoKICBuc3Jlc3VsdCBHZXRGcmFtZVN0YXRlKG5zRnJhbWVTdGF0ZSogYVJl
c3VsdCkgewogICAgKmFSZXN1bHQgPSBtU3RhdGU7CiAgICByZXR1cm4gMDsKICB9CgoKCgogIG5z
cmVzdWx0IFNldEZyYW1lU3RhdGUobnNGcmFtZVN0YXRlIGFOZXdTdGF0ZSkgewogICAgbVN0YXRl
ID0gYU5ld1N0YXRlOwogICAgcmV0dXJuIDA7CiAgfQojIDgzMyAiLi4vLi4vLi4vZGlzdC9pbmNs
dWRlL2xheW91dC9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ29udGVudENoYW5nZWQo
bnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuc0lDb250ZW50KiBhQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJU3Vw
cG9ydHMqIGFTdWJDb250ZW50KSA9IDA7CiMgODQ3ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5
b3V0L25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBBdHRyaWJ1dGVDaGFuZ2VkKG5zSVBy
ZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
c0lDb250ZW50KiBhQ2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMy
IGFOYW1lU3BhY2VJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFB
dHRyaWJ1dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkludDMyIGFNb2RUeXBl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhSGludCkgPSAwOwojIDg2
MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNy
ZXN1bHQgQ29udGVudFN0YXRlQ2hhbmdlZChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQ29udGVudCogYUNoaWxkLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnQzMiBhSGludCkgPSAwOwoKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IElzU3BsaXR0YWJsZShuc1NwbGl0dGFibGVUeXBlJiBhSXNTcGxpdHRh
YmxlKSBjb25zdCA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UHJldkluRmxvdyhuc0lG
cmFtZSoqIGFQcmV2SW5GbG93KSBjb25zdCA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRQcmV2
SW5GbG93KG5zSUZyYW1lKikgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TmV4dEluRmxvdyhu
c0lGcmFtZSoqIGFOZXh0SW5GbG93KSBjb25zdCA9IDA7CiAgdmlydHVhbCBuc3Jlc3VsdCBTZXRO
ZXh0SW5GbG93KG5zSUZyYW1lKikgPSAwOwoKCgoKICB2aXJ0dWFsIG5zSUZyYW1lKiBHZXRGaXJz
dEluRmxvdygpIGNvbnN0IHsKICAgIHJldHVybiBjb25zdF9jYXN0PCBuc0lGcmFtZSogPih0aGlz
KTsKICB9CgoKCgogIHZpcnR1YWwgbnNJRnJhbWUqIEdldExhc3RJbkZsb3coKSBjb25zdCB7CiAg
ICByZXR1cm4gY29uc3RfY2FzdDwgbnNJRnJhbWUqID4odGhpcyk7CiAgfQojIDkwMyAiLi4vLi4v
Li4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgV2ls
bFJlZmxvdyhuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0KSA9IDA7CiMgOTQ1ICIuLi8uLi8u
Li9kaXN0L2luY2x1ZGUvbGF5b3V0L25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWZs
b3cobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICBuc0hU
TUxSZWZsb3dNZXRyaWNzJiBhUmVmbG93TWV0cmljcywKICAgICAgICAgICAgICAgICAgICBjb25z
dCBuc0hUTUxSZWZsb3dTdGF0ZSYgYVJlZmxvd1N0YXRlLAogICAgICAgICAgICAgICAgICAgIG5z
UmVmbG93U3RhdHVzJiBhU3RhdHVzKSA9IDA7CiMgOTY1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv
bGF5b3V0L25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBEaWRSZWZsb3cobnNJUHJlc0Nv
bnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnNIVE1M
UmVmbG93U3RhdGUqIGFSZWZsb3dTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgbnNEaWRS
ZWZsb3dTdGF0dXMgYVN0YXR1cykgPSAwOwojIDk4MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xh
eW91dC9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ2FuQ29udGludWVUZXh0UnVuKFBS
Qm9vbCYgYUNvbnRpbnVlVGV4dFJ1bikgY29uc3QgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0
IEFkanVzdEZyYW1lU2l6ZShuc2Nvb3JkIGFFeHRyYVNwYWNlLCBuc2Nvb3JkJiBhVXNlZFNwYWNl
KSA9IDA7CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBUcmltVHJhaWxpbmdXaGl0ZVNwYWNlKG5zSVBy
ZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5zSVJlbmRlcmluZ0NvbnRleHQmIGFSQywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnNjb29yZCYgYURlbHRhV2lkdGgpID0gMDsKCgoKCiAgdmlydHVhbCBuc3Jlc3Vs
dCBHZXRWaWV3KG5zSVByZXNDb250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAg
ICAgICBuc0lWaWV3KiogYVZpZXcpIGNvbnN0ID0gMDsKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFZp
ZXcobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgIG5z
SVZpZXcqIGFWaWV3KSA9IDA7CgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFyZW50V2l0aFZp
ZXcobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuc0lGcmFtZSoqIGFQYXJlbnQpIGNvbnN0ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0T2Zmc2V0RnJvbVZpZXcobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1BvaW50JiBhT2Zmc2V0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5zSVZpZXcqKiBhVmlldykgY29uc3QgPSAwOwojIDEwMjUg
Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldE9yaWdpblRvVmlld09mZnNldChuc0lQcmVzQ29udGV4dCogYVByZXNDb250ZXh0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1BvaW50JiBhT2Zmc2V0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lWaWV3KiogYVZpZXcpIGNvbnN0ID0g
MDsKCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRXaW5kb3cobnNJUHJlc0NvbnRleHQqIGFQ
cmVzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgbnNJV2lkZ2V0KiogYVdpZGdldCkg
Y29uc3QgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RnJhbWVUeXBlKG5zSUF0b20q
KiBhVHlwZSkgY29uc3QgPSAwOwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IElzUGVyY2VudGFnZUJh
c2UoUFJCb29sJiBhQmFzZSkgY29uc3QgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBTY3Jv
bGxlZChuc0lWaWV3ICphVmlldykgPSAwOwojIDEwNjYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9s
YXlvdXQvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFNlbGVjdGVkKG5zSVByZXND
b250ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJRE9NUmFu
Z2UqIGFSYW5nZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wgYVNlbGVjdGVkLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zU3ByZWFkIGFTcHJlYWQpID0gMDsKCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRTZWxlY3RlZChQUkJvb2wgKmFTZWxlY3RlZCkgY29uc3QgPSAwOwojIDEw
ODIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5z
cmVzdWx0IElzU2VsZWN0YWJsZShQUkJvb2wqIGFJc1NlbGVjdGFibGUsIFBSVWludDgqIGFTZWxl
Y3RTdHlsZSkgY29uc3QgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0U2VsZWN0aW9u
Q29udHJvbGxlcihuc0lQcmVzQ29udGV4dCAqYVByZXNDb250ZXh0LCBuc0lTZWxlY3Rpb25Db250
cm9sbGVyICoqYVNlbENvbikgPSAwOwojIDExMDAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlv
dXQvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IENhcHR1cmVNb3VzZShuc0lQcmVzQ29u
dGV4dCogYVByZXNDb250ZXh0LCBQUkJvb2wgYUdyYWJNb3VzZUV2ZW50cykgPSAwOwojIDExMDkg
Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9sYXlvdXQvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVz
dWx0IFBlZWtPZmZzZXQobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwgbnNQZWVrT2Zmc2V0
U3RydWN0ICphUG9zKSA9IDA7CiMgMTEyMiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9u
c0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ2hlY2tWaXNpYmlsaXR5KG5zSVByZXNDb250
ZXh0KiBhQ29udGV4dCwgUFJJbnQzMiBhU3RhcnRJbmRleCwgUFJJbnQzMiBhRW5kSW5kZXgsIFBS
Qm9vbCBhUmVjdXJzZSwgUFJCb29sICphRmluaXNoZWQsIFBSQm9vbCAqX3JldHZhbCk9MDsKCgoK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWZsb3dEaXJ0eUNoaWxkKG5zSVByZXNTaGVsbCogYVBy
ZXNTaGVsbCwgbnNJRnJhbWUqIGFDaGlsZCkgPSAwOwojIDExNDAgIi4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9sYXlvdXQvbnNJRnJhbWUuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFjY2Vzc2libGUo
bnNJQWNjZXNzaWJsZSoqIGFBY2Nlc3NpYmxlKSA9IDA7CiMgMTE2MCAiLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFyZW50U3R5
bGVDb250ZXh0RnJhbWUobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUZyYW1lKiogYVByb3ZpZGVyRnJhbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkJvb2wqIGFJc0NoaWxkKSA9
IDA7CiMgMTE3MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5oIgogIHZp
cnR1YWwgbnNyZXN1bHQgSXNWaXNpYmxlRm9yUGFpbnRpbmcobnNJUHJlc0NvbnRleHQgKiBhUHJl
c0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc0lSZW5kZXJpbmdD
b250ZXh0JiBhUmVuZGVyaW5nQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBSQm9vbCBhQ2hlY2tWaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
UkJvb2wqIGFJc1Zpc2libGUpID0gMDsKIyAxMTg4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5
b3V0L25zSUZyYW1lLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBJc0VtcHR5KG5zQ29tcGF0aWJpbGl0
eSBhQ29tcGF0TW9kZSwKICAgICAgICAgICAgICAgICAgICAgUFJCb29sIGFJc1ByZSwKICAgICAg
ICAgICAgICAgICAgICAgUFJCb29sKiBhUmVzdWx0KSA9IDA7CgoKCgoKCgogIFBSQm9vbCBJc0dl
bmVyYXRlZENvbnRlbnRGcmFtZSgpIHsKICAgIHJldHVybiAobVN0YXRlICYgMHgwMDAwMDA0MCkg
IT0gMDsKICB9CiMgMTIxMCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL2xheW91dC9uc0lGcmFtZS5o
IgogIFBSQm9vbCBJc1BzZXVkb0ZyYW1lKG5zSUNvbnRlbnQqIGFQYXJlbnRDb250ZW50KSB7CiAg
ICByZXR1cm4gbUNvbnRlbnQgPT0gYVBhcmVudENvbnRlbnQ7CiAgfQoKCgogIHZpcnR1YWwgdm9p
ZCogR2V0UHJvcGVydHkobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5zSUF0b20qIGFQcm9wZXJ0eU5hbWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQUkJvb2wgYVJlbW92ZVByb3BlcnR5KSBjb25zdCA9IDA7CgogIHZpcnR1YWwg
bnNyZXN1bHQgU2V0UHJvcGVydHkobnNJUHJlc0NvbnRleHQqIGFQcmVzQ29udGV4dCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5zSUF0b20qIGFQcm9wZXJ0eU5hbWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhUHJvcGVydHlWYWx1ZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5TRnJhbWVQcm9wZXJ0eUR0b3JGdW5jIGFQcm9wRHRvckZ1bmMp
ID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QmlkaVByb3BlcnR5KG5zSVByZXNDb250
ZXh0KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSog
YVByb3BlcnR5TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiogYVByb3Bl
cnR5VmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGFTaXplICkgY29u
c3QgPSAwOwogIHZpcnR1YWwgbnNyZXN1bHQgU2V0QmlkaVByb3BlcnR5KG5zSVByZXNDb250ZXh0
KiBhUHJlc0NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNJQXRvbSogYVBy
b3BlcnR5TmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhUHJvcGVydHlW
YWx1ZSkgPSAwOwoKCnByb3RlY3RlZDoKCiAgbnNSZWN0IG1SZWN0OwogIG5zSUNvbnRlbnQqIG1D
b250ZW50OwogIG5zSVN0eWxlQ29udGV4dCogbVN0eWxlQ29udGV4dDsKICBuc0lGcmFtZSogbVBh
cmVudDsKICBuc0lGcmFtZSogbU5leHRTaWJsaW5nOwogIG5zRnJhbWVTdGF0ZSBtU3RhdGU7Cgpw
cml2YXRlOgogIHZpcnR1YWwgbnNyZWZjbnQgQWRkUmVmKHZvaWQpID0gMDsKICB2aXJ0dWFsIG5z
cmVmY250IFJlbGVhc2Uodm9pZCkgPSAwOwp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KaW5saW5l
IHZvaWQKR2V0U3R5bGVEYXRhKG5zSUZyYW1lKiBhRnJhbWUsIGNvbnN0IFQqKiBhU3R5bGVTdHJ1
Y3QpCnsKICAgIGFGcmFtZS0+R2V0U3R5bGVEYXRhKChUOjpHZXRTdHlsZVN0cnVjdElEKCkpLAog
ICAgICAgICAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PCBjb25zdCBuc1N0eWxlU3RydWN0
KiogPihhU3R5bGVTdHJ1Y3QpKTsKfQojIDQxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbGF5b3V0
L25zSU9iamVjdEZyYW1lLmgiIDIKCmNsYXNzIG5zSVBsdWdpbkluc3RhbmNlOwoKCgoKCmNsYXNz
IG5zSU9iamVjdEZyYW1lIDogcHVibGljIG5zSVN1cHBvcnRzIHsKcHVibGljOgogIHN0YXRpYyBj
b25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7IDB4NmQxMGIw
N2QsIDB4ZTc1YiwgMHgxMWQ0LCB7IDB4OTgsIDB4ODUsIDB4MCwgMHhjMCwgMHg0ZiwgMHhhMCwg
MHhjZiwgMHg0YiB9IH07IHJldHVybiBpaWQ7fQoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFBsdWdp
bkluc3RhbmNlKG5zSVBsdWdpbkluc3RhbmNlKiYgYVBsdWdpbkluc3RhbmNlKSA9IDA7Cn07CiMg
MTIxICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1
Z2luL25zSVNjcmlwdGFibGVQbHVnaW4uaCIgMQojIDI1ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv
cGx1Z2luL25zSVNjcmlwdGFibGVQbHVnaW4uaCIKY2xhc3MgbnNJU2NyaXB0YWJsZVBsdWdpbiA6
IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0
SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHhmMWExMmJiYSwgMHgxZGQxLCAweDEx
YjIsIHsgMHhhOSwgMHg1ZiwgMHhjZCwgMHhjMSwgMHgxOCwgMHg2MCwgMHg1ZSwgMHg5MiB9fTsg
cmV0dXJuIGlpZDt9CgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRTY3JpcHRhYmxlUGVlcih2
b2lkICogKmFTY3JpcHRhYmxlUGVlcikgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdl
dFNjcmlwdGFibGVJbnRlcmZhY2UobnNJSUQgKiAqYVNjcmlwdGFibGVJbnRlcmZhY2UpID0gMDsK
Cn07CiMgMTIyICJuc0RPTUNsYXNzSW5mby5jcHAiIDIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1
ZGUvcGx1Z2luL25zSVBsdWdpbkhvc3QuaCIgMQojIDE4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv
cGx1Z2luL25zSVBsdWdpbkhvc3QuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2lu
L25zSVBsdWdpbkluc3RhbmNlT3duZXIuaCIgMQojIDIxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUv
cGx1Z2luL25zSVBsdWdpbkluc3RhbmNlT3duZXIuaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1
ZGUvcGx1Z2luL25zcGx1Z2luLmgiIDEKIyAxMDggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVn
aW4vbnNwbHVnaW4uaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdp
bi5oIiAxCiMgNTIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luLmgiCmNs
YXNzIG5zSVBsdWdpbiA6IHB1YmxpYyBuc0lGYWN0b3J5IHsKIHB1YmxpYzoKCiAgc3RhdGljIGNv
bnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGRmNzczMDcw
LCAweDAxOTksIDB4MTFkMiwgeyAweDgxLCAweDViLCAweDAwLCAweDYwLCAweDA4LCAweDExLCAw
eDlkLCAweDdhIH19OyByZXR1cm4gaWlkO30KCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBDcmVh
dGVQbHVnaW5JbnN0YW5jZShuc0lTdXBwb3J0cyAqYU91dGVyLCBjb25zdCBuc0lJRCAmIGFJSUQs
IGNvbnN0IGNoYXIgKmFQbHVnaW5NSU1FVHlwZSwgdm9pZCAqICphUmVzdWx0KSA9IDA7CiMgNzUg
Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luLmgiCiAgdmlydHVhbCBuc3Jl
c3VsdCBJbml0aWFsaXplKHZvaWQpID0gMDsKIyA4NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3Bs
dWdpbi9uc0lQbHVnaW4uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNodXRkb3duKHZvaWQpID0gMDsK
IyAxMDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luLmgiCiAgdmlydHVh
bCBuc3Jlc3VsdCBHZXRNSU1FRGVzY3JpcHRpb24oY29uc3QgY2hhciAqICphTUlNRURlc2NyaXB0
aW9uKSA9IDA7CiMgMTEzICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbi5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0VmFsdWUobnNQbHVnaW5WYXJpYWJsZSBhVmFyaWFibGUs
IHZvaWQgKiBhVmFsdWUpID0gMDsKCn07CiMgMTA5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1
Z2luL25zcGx1Z2luLmgiIDIKIyAxMjYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNw
bHVnaW4uaCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbk1hbmFn
ZXIuaCIgMQojIDI5ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbk1hbmFn
ZXIuaCIKY2xhc3MgbnNJUGx1Z2luU3RyZWFtTGlzdGVuZXI7CiMgMzkgIi4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luTWFuYWdlci5oIgpjbGFzcyBuc0lQbHVnaW5NYW5hZ2Vy
IDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5zSUlEJiBH
ZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGRhNThhZDgwLCAweDRlYjYsIDB4
MTFkMiwgeyAweDgxLCAweDY0LCAweDAwLCAweDYwLCAweDA4LCAweDExLCAweDlkLCAweDdhIH19
OyByZXR1cm4gaWlkO30KIyA1NCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVn
aW5NYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWYWx1ZShuc1BsdWdpbk1hbmFnZXJW
YXJpYWJsZSB2YXJpYWJsZSwgdm9pZCAqIHZhbHVlKSA9IDA7CiMgNjYgIi4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luTWFuYWdlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgUmVs
b2FkUGx1Z2lucyhQUkJvb2wgcmVsb2FkUGFnZXMpID0gMDsKIyA3NiAiLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5NYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBVc2Vy
QWdlbnQoY29uc3QgY2hhciAqICogcmVzdWx0aW5nQWdlbnRTdHJpbmcpID0gMDsKCiAgICB2aXJ0
dWFsIG5zcmVzdWx0CiAgICBHZXRVUkwobnNJU3VwcG9ydHMqIHBsdWdpbkluc3QsCiAgICAgICAg
ICAgY29uc3QgY2hhciogdXJsLAogICAgICAgICAgIGNvbnN0IGNoYXIqIHRhcmdldCA9IF9fbnVs
bCwKICAgICAgICAgICBuc0lQbHVnaW5TdHJlYW1MaXN0ZW5lciogc3RyZWFtTGlzdGVuZXIgPSBf
X251bGwsCiAgICAgICAgICAgY29uc3QgY2hhciogYWx0SG9zdCA9IF9fbnVsbCwKICAgICAgICAg
ICBjb25zdCBjaGFyKiByZWZlcnJlciA9IF9fbnVsbCwKICAgICAgICAgICBQUkJvb2wgZm9yY2VK
U0VuYWJsZWQgPSAwKSA9IDA7CiAgICB2aXJ0dWFsIG5zcmVzdWx0CiAgICBQb3N0VVJMKG5zSVN1
cHBvcnRzKiBwbHVnaW5JbnN0LAogICAgICAgICAgICBjb25zdCBjaGFyKiB1cmwsCiAgICAgICAg
ICAgIFBSVWludDMyIHBvc3REYXRhTGVuLAogICAgICAgICAgICBjb25zdCBjaGFyKiBwb3N0RGF0
YSwKICAgICAgICAgICAgUFJCb29sIGlzRmlsZSA9IDAsCiAgICAgICAgICAgIGNvbnN0IGNoYXIq
IHRhcmdldCA9IF9fbnVsbCwKICAgICAgICAgICAgbnNJUGx1Z2luU3RyZWFtTGlzdGVuZXIqIHN0
cmVhbUxpc3RlbmVyID0gX19udWxsLAogICAgICAgICAgICBjb25zdCBjaGFyKiBhbHRIb3N0ID0g
X19udWxsLAogICAgICAgICAgICBjb25zdCBjaGFyKiByZWZlcnJlciA9IF9fbnVsbCwKICAgICAg
ICAgICAgUFJCb29sIGZvcmNlSlNFbmFibGVkID0gMCwKICAgICAgICAgICAgUFJVaW50MzIgcG9z
dEhlYWRlcnNMZW5ndGggPSAwLAogICAgICAgICAgICBjb25zdCBjaGFyKiBwb3N0SGVhZGVycyA9
IF9fbnVsbCkgPSAwOwojIDE3MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVn
aW5NYW5hZ2VyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlclBsdWdpbihjb25zdCBuc0lJ
RCYgYUNJRCwgY29uc3QgY2hhciAqYVBsdWdpbk5hbWUsIGNvbnN0IGNoYXIgKmFEZXNjcmlwdGlv
biwgY29uc3QgY2hhciAqICogYU1pbWVUeXBlcywgY29uc3QgY2hhciAqICogYU1pbWVEZXNjcmlw
dGlvbnMsIGNvbnN0IGNoYXIgKiAqIGFGaWxlRXh0ZW5zaW9ucywgUFJJbnQzMiBhQ291bnQpID0g
MDsKIyAxODAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luTWFuYWdlci5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgVW5yZWdpc3RlclBsdWdpbihjb25zdCBuc0lJRCYgYUNJRCkg
PSAwOwojIDE5MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5NYW5hZ2Vy
LmgiCiAgICB2aXJ0dWFsIG5zcmVzdWx0CiAgICBHZXRVUkxXaXRoSGVhZGVycyhuc0lTdXBwb3J0
cyogcGx1Z2luSW5zdCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHVybCwKICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRhcmdldCA9IF9fbnVsbCwKICAgICAgICAg
ICAgICAgICAgICAgIG5zSVBsdWdpblN0cmVhbUxpc3RlbmVyKiBzdHJlYW1MaXN0ZW5lciA9IF9f
bnVsbCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFsdEhvc3QgPSBfX251bGws
CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWZlcnJlciA9IF9fbnVsbCwKICAg
ICAgICAgICAgICAgICAgICAgIFBSQm9vbCBmb3JjZUpTRW5hYmxlZCA9IDAsCiAgICAgICAgICAg
ICAgICAgICAgICBQUlVpbnQzMiBnZXRIZWFkZXJzTGVuZ3RoID0gMCwKICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGdldEhlYWRlcnMgPSBfX251bGwpID0gMDsKfTsKIyAxMjcgIi4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNwbHVnaW4uaCIgMgoKCgoKCgojIDEgIi4uLy4u
Ly4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luSW5zdGFuY2VQZWVyLmgiIDEKIyAyMiAi
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5JbnN0YW5jZVBlZXIuaCIKc3Ry
dWN0IEpTT2JqZWN0OwpjbGFzcyBuc0lPdXRwdXRTdHJlYW07CiMgNDIgIi4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luSW5zdGFuY2VQZWVyLmgiCmNsYXNzIG5zSVBsdWdpbklu
c3RhbmNlUGVlciA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25z
dCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg0YjdjZWEyMCwg
MHgwMTliLCAweDExZDIsIHsgMHg4MSwgMHg1YiwgMHgwMCwgMHg2MCwgMHgwOCwgMHgxMSwgMHg5
ZCwgMHg3YSB9fTsgcmV0dXJuIGlpZDt9CiMgNTcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVn
aW4vbnNJUGx1Z2luSW5zdGFuY2VQZWVyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWYWx1ZShu
c1BsdWdpbkluc3RhbmNlUGVlclZhcmlhYmxlIGFWYXJpYWJsZSwgdm9pZCAqIGFWYWx1ZSkgPSAw
OwojIDY4ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbkluc3RhbmNlUGVl
ci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TUlNRVR5cGUobnNNSU1FVHlwZSAqYU1JTUVUeXBl
KSA9IDA7CiMgODAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luSW5zdGFu
Y2VQZWVyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRNb2RlKG5zUGx1Z2luTW9kZSAqYU1vZGUp
ID0gMDsKIyA5NiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5JbnN0YW5j
ZVBlZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE5ld1N0cmVhbShuc01JTUVUeXBlIGFUeXBlLCBj
b25zdCBjaGFyICphVGFyZ2V0LCBuc0lPdXRwdXRTdHJlYW0gKiphUmVzdWx0KSA9IDA7CiMgMTA4
ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbkluc3RhbmNlUGVlci5oIgog
IHZpcnR1YWwgbnNyZXN1bHQgU2hvd1N0YXR1cyhjb25zdCBjaGFyICphTWVzc2FnZSkgPSAwOwoj
IDExOCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5JbnN0YW5jZVBlZXIu
aCIKICB2aXJ0dWFsIG5zcmVzdWx0IFNldFdpbmRvd1NpemUoUFJVaW50MzIgYVdpZHRoLCBQUlVp
bnQzMiBhSGVpZ2h0KSA9IDA7Cgp9OwojIDEzNCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdp
bi9uc3BsdWdpbi5oIiAyCgoKCgoKCgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4v
bnNJUGx1Z2luVGFnSW5mby5oIiAxCiMgMjIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4v
bnNJUGx1Z2luVGFnSW5mby5oIgpjbGFzcyBuc0lET01FbGVtZW50OwojIDM3ICIuLi8uLi8uLi9k
aXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpblRhZ0luZm8uaCIKY2xhc3MgbnNJUGx1Z2luVGFn
SW5mbyA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJ
RCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQgPSB7MHg1ZjFlYzFkMCwgMHgwMTli
LCAweDExZDIsIHsgMHg4MSwgMHg1YiwgMHgwMCwgMHg2MCwgMHgwOCwgMHgxMSwgMHg5ZCwgMHg3
YSB9fTsgcmV0dXJuIGlpZDt9CiMgNTIgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJ
UGx1Z2luVGFnSW5mby5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXR0cmlidXRlcyhQUlVpbnQx
NiAmIGFDb3VudCwgY29uc3QgY2hhciogY29uc3QqICYgYU5hbWVzLCBjb25zdCBjaGFyKiBjb25z
dCogJiBhVmFsdWVzKSA9IDA7CiMgNjQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJ
UGx1Z2luVGFnSW5mby5oIgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0QXR0cmlidXRlKGNvbnN0IGNo
YXIgKmFOYW1lLCBjb25zdCBjaGFyICogKmFSZXN1bHQpID0gMDsKCn07CiMgMTQyICIuLi8uLi8u
Li9kaXN0L2luY2x1ZGUvcGx1Z2luL25zcGx1Z2luLmgiIDIKCgoKCgoKCiMgMSAiLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lXaW5kb3dsZXNzUGx1Z0luc3RQZWVyLmgiIDEKIyAzMCAi
Li4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lXaW5kb3dsZXNzUGx1Z0luc3RQZWVyLmgi
CmNsYXNzIG5zSVdpbmRvd2xlc3NQbHVnaW5JbnN0YW5jZVBlZXIgOiBwdWJsaWMgbnNJU3VwcG9y
dHMgewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29u
c3QgbnNJSUQgaWlkID0gezB4NTdiNGUyZjAsIDB4MDE5YiwgMHgxMWQyLCB7IDB4ODEsIDB4NWIs
IDB4MDAsIDB4NjAsIDB4MDgsIDB4MTEsIDB4OWQsIDB4N2EgfX07IHJldHVybiBpaWQ7fQoKCgoK
CiAgdmlydHVhbCBuc3Jlc3VsdCBJbnZhbGlkYXRlUmVjdChuc1BsdWdpblJlY3QgKiBhUmVjdCkg
PSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnZhbGlkYXRlUmVnaW9uKG5zUGx1Z2luUmVn
aW9uIGFSZWdpb24pID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgRm9yY2VSZWRyYXcodm9p
ZCkgPSAwOwoKfTsKIyAxNTAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNwbHVnaW4u
aCIgMgojIDE2MyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc3BsdWdpbi5oIgojIDEg
Ii4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luTWFuYWdlcjIuaCIgMQojIDE3
ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbk1hbmFnZXIyLmgiCmNsYXNz
IG5zSVBsdWdpbjsKCmNsYXNzIG5zSUV2ZW50SGFuZGxlcjsKIyAzMyAiLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5NYW5hZ2VyMi5oIgpjbGFzcyBuc0lQbHVnaW5NYW5hZ2Vy
MiA6IHB1YmxpYyBuc0lQbHVnaW5NYW5hZ2VyIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0IG5z
SUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweGQyOTYyZGMwLCAweDRl
YjYsIDB4MTFkMiwgeyAweDgxLCAweDY0LCAweDAwLCAweDYwLCAweDA4LCAweDExLCAweDlkLCAw
eDdhIH19OyByZXR1cm4gaWlkO30KCgoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBCZWdpbldhaXRD
dXJzb3Iodm9pZCkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEVuZFdhaXRDdXJzb3Io
dm9pZCkgPSAwOwojIDYyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbk1h
bmFnZXIyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBTdXBwb3J0c1VSTFByb3RvY29sKGNvbnN0IGNo
YXIgKmFQcm90b2NvbCwgUFJCb29sICphUmVzdWx0KSA9IDA7CiMgNzUgIi4uLy4uLy4uL2Rpc3Qv
aW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luTWFuYWdlcjIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE5v
dGlmeVN0YXR1c0NoYW5nZShuc0lQbHVnaW4gKmFQbHVnaW4sIG5zcmVzdWx0IGFTdGF0dXMpID0g
MDsKIyA5MSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5NYW5hZ2VyMi5o
IgogIHZpcnR1YWwgbnNyZXN1bHQgRmluZFByb3h5Rm9yVVJMKGNvbnN0IGNoYXIgKmFVUkwsIGNo
YXIgKiphUmVzdWx0KSA9IDA7CiMgMTAyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25z
SVBsdWdpbk1hbmFnZXIyLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBSZWdpc3RlcldpbmRvdyhuc0lF
dmVudEhhbmRsZXIgKmFIYW5kbGVyLCBuc1BsdWdpblBsYXRmb3JtV2luZG93UmVmIGFXaW5kb3cp
ID0gMDsKIyAxMTMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luTWFuYWdl
cjIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFVucmVnaXN0ZXJXaW5kb3cobnNJRXZlbnRIYW5kbGVy
ICphSGFuZGxlciwgbnNQbHVnaW5QbGF0Zm9ybVdpbmRvd1JlZiBhV2luZG93KSA9IDA7CiMgMTI0
ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpbk1hbmFnZXIyLmgiCiAgdmly
dHVhbCBuc3Jlc3VsdCBBbGxvY2F0ZU1lbnVJRChuc0lFdmVudEhhbmRsZXIgKmFIYW5kbGVyLCBQ
UkJvb2wgYUlzU3VibWVudSwgUFJJbnQxNiAqYVJlc3VsdCkgPSAwOwojIDEzNCAiLi4vLi4vLi4v
ZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5NYW5hZ2VyMi5oIgogIHZpcnR1YWwgbnNyZXN1
bHQgRGVhbGxvY2F0ZU1lbnVJRChuc0lFdmVudEhhbmRsZXIgKmFIYW5kbGVyLCBQUkludDE2IGFN
ZW51SUQpID0gMDsKIyAxNDUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2lu
TWFuYWdlcjIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEhhc0FsbG9jYXRlZE1lbnVJRChuc0lFdmVu
dEhhbmRsZXIgKmFIYW5kbGVyLCBQUkludDE2IGFNZW51SUQsIFBSQm9vbCAqYVJlc3VsdCkgPSAw
OwoKfTsKIyAxNjQgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNwbHVnaW4uaCIgMgoK
CgoKCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSUZpbGVVdGlsaXRpZXMu
aCIgMQojIDM0ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSUZpbGVVdGlsaXRpZXMu
aCIKY2xhc3MgbnNJRmlsZVV0aWxpdGllcyA6IHB1YmxpYyBuc0lTdXBwb3J0cyB7CiBwdWJsaWM6
CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRpYyBjb25zdCBuc0lJRCBpaWQg
PSB7MHg4OWEzMWNlMCwgMHgwMTlhLCAweDExZDIsIHsgMHg4MSwgMHg1YiwgMHgwMCwgMHg2MCwg
MHgwOCwgMHgxMSwgMHg5ZCwgMHg3YSB9fTsgcmV0dXJuIGlpZDt9CiMgNDYgIi4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9wbHVnaW4vbnNJRmlsZVV0aWxpdGllcy5oIgogIHZpcnR1YWwgbnNyZXN1bHQg
R2V0UHJvZ3JhbVBhdGgoY29uc3QgY2hhciAqICphUHJvZ3JhbVBhdGgpID0gMDsKIyA1NSAiLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lGaWxlVXRpbGl0aWVzLmgiCiAgdmlydHVhbCBu
c3Jlc3VsdCBHZXRUZW1wRGlyUGF0aChjb25zdCBjaGFyICogKmFUZW1wRGlyUGF0aCkgPSAwOwoj
IDY2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSUZpbGVVdGlsaXRpZXMuaCIKICB2
aXJ0dWFsIG5zcmVzdWx0IE5ld1RlbXBGaWxlTmFtZShjb25zdCBjaGFyICphUHJlZml4LCBQUlVp
bnQzMiBhTGVuZ3RoLCBjaGFyICogYUJ1ZmZlcikgPSAwOwoKfTsKIyAxNzIgIi4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9wbHVnaW4vbnNwbHVnaW4uaCIgMgoKCgoKCgoKIyAxICIuLi8uLi8uLi9kaXN0
L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpblRhZ0luZm8yLmgiIDEKIyAxNyAiLi4vLi4vLi4vZGlz
dC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5UYWdJbmZvMi5oIgplbnVtIG5zUGx1Z2luVGFnVHlw
ZSB7CiAgbnNQbHVnaW5UYWdUeXBlX1Vua25vd24sCiAgbnNQbHVnaW5UYWdUeXBlX0VtYmVkLAog
IG5zUGx1Z2luVGFnVHlwZV9PYmplY3QsCiAgbnNQbHVnaW5UYWdUeXBlX0FwcGxldAp9OwojIDMx
ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpblRhZ0luZm8yLmgiCmNsYXNz
IG5zSVBsdWdpblRhZ0luZm8yIDogcHVibGljIG5zSVBsdWdpblRhZ0luZm8gewogcHVibGljOgoK
ICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0g
ezB4NmE0OWM5YTAsIDB4MDE5YiwgMHgxMWQyLCB7IDB4ODEsIDB4NWIsIDB4MDAsIDB4NjAsIDB4
MDgsIDB4MTEsIDB4OWQsIDB4N2EgfX07IHJldHVybiBpaWQ7fQoKCgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0VGFnVHlwZShuc1BsdWdpblRhZ1R5cGUgKmFUYWdUeXBlKSA9IDA7CgoKCgoKICB2
aXJ0dWFsIG5zcmVzdWx0IEdldFRhZ1RleHQoY29uc3QgY2hhciAqICphVGFnVGV4dCkgPSAwOwoj
IDU2ICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvcGx1Z2luL25zSVBsdWdpblRhZ0luZm8yLmgiCiAg
dmlydHVhbCBuc3Jlc3VsdCBHZXRQYXJhbWV0ZXJzKFBSVWludDE2ICYgYUNvdW50LCBjb25zdCBj
aGFyKiBjb25zdCogJiBhTmFtZXMsIGNvbnN0IGNoYXIqIGNvbnN0KiAmIGFWYWx1ZXMpID0gMDsK
IyA2NyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5UYWdJbmZvMi5oIgog
IHZpcnR1YWwgbnNyZXN1bHQgR2V0UGFyYW1ldGVyKGNvbnN0IGNoYXIgKmFOYW1lLCBjb25zdCBj
aGFyICogKmFSZXN1bHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0RG9jdW1lbnRC
YXNlKGNvbnN0IGNoYXIgKiAqYURvY3VtZW50QmFzZSkgPSAwOwoKCgoKCgogIHZpcnR1YWwgbnNy
ZXN1bHQgR2V0RG9jdW1lbnRFbmNvZGluZyhjb25zdCBjaGFyICogKmFEb2N1bWVudEVuY29kaW5n
KSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldEFsaWdubWVudChjb25zdCBjaGFyICog
KmFFbGlnbm1lbnQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0V2lkdGgoUFJVaW50
MzIgKmFXaWR0aCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRIZWlnaHQoUFJVaW50
MzIgKmFIZWlnaHQpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0Qm9yZGVyVmVydFNw
YWNlKFBSVWludDMyICphQm9yZGVyVmVydFNwYWNlKSA9IDA7CgoKCgoKICB2aXJ0dWFsIG5zcmVz
dWx0IEdldEJvcmRlckhvcml6U3BhY2UoUFJVaW50MzIgKmFCb3JkZXJIb3JpelNwYWNlKSA9IDA7
CgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldFVuaXF1ZUlEKFBSVWludDMyICphVW5pcXVlSUQp
ID0gMDsKIyAxMjYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luVGFnSW5m
bzIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERPTUVsZW1lbnQobnNJRE9NRWxlbWVudCAqICph
RE9NRWxlbWVudCkgPSAwOwoKfTsKIyAxODAgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4v
bnNwbHVnaW4uaCIgMgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJT3V0cHV0
U3RyZWFtLmgiIDEKIyAxNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSU91dHB1dFN0
cmVhbS5oIgpjbGFzcyBuc0lPdXRwdXRTdHJlYW07CgpjbGFzcyBuc0lJbnB1dFN0cmVhbTsKIyA0
MiAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSU91dHB1dFN0cmVhbS5oIgp0eXBlZGVm
IG5zcmVzdWx0ICgqIG5zUmVhZFNlZ21lbnRGdW4pKG5zSU91dHB1dFN0cmVhbSAqYU91dFN0cmVh
bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphQ2xvc3VyZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICphVG9TZWdtZW50LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFGcm9tT2Zmc2V0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSVWludDMyIGFDb3VudCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUlVpbnQzMiAqYVJlYWRDb3Vu
dCk7CiMgNTYgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lPdXRwdXRTdHJlYW0uaCIK
Y2xhc3MgbnNJT3V0cHV0U3RyZWFtIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAg
c3RhdGljIGNvbnN0IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsw
eDBkMGFjZDJhLCAweDYxYjQsIDB4MTFkNCwgeyAweDk4LCAweDc3LCAweDAwLCAweGMwLCAweDRm
LCAweGEwLCAweGNmLCAweDRhIH19OyByZXR1cm4gaWlkO30KIyA3MyAiLi4vLi4vLi4vZGlzdC9p
bmNsdWRlL3hwY29tL25zSU91dHB1dFN0cmVhbS5oIgogIHZpcnR1YWwgbnNyZXN1bHQgQ2xvc2Uo
dm9pZCkgPSAwOwojIDgyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJT3V0cHV0U3Ry
ZWFtLmgiCiAgdmlydHVhbCBuc3Jlc3VsdCBGbHVzaCh2b2lkKSA9IDA7CiMgOTcgIi4uLy4uLy4u
L2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lPdXRwdXRTdHJlYW0uaCIKICB2aXJ0dWFsIG5zcmVzdWx0
IFdyaXRlKGNvbnN0IGNoYXIgKmFCdWYsIFBSVWludDMyIGFDb3VudCwgUFJVaW50MzIgKl9yZXR2
YWwpID0gMDsKIyAxMTggIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lPdXRwdXRTdHJl
YW0uaCIKICB2aXJ0dWFsIG5zcmVzdWx0IFdyaXRlRnJvbShuc0lJbnB1dFN0cmVhbSAqYUZyb21T
dHJlYW0sIFBSVWludDMyIGFDb3VudCwgUFJVaW50MzIgKl9yZXR2YWwpID0gMDsKIyAxNDEgIi4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lPdXRwdXRTdHJlYW0uaCIKICB2aXJ0dWFsIG5z
cmVzdWx0IFdyaXRlU2VnbWVudHMobnNSZWFkU2VnbWVudEZ1biBhUmVhZGVyLCB2b2lkICogYUNs
b3N1cmUsIFBSVWludDMyIGFDb3VudCwgUFJVaW50MzIgKl9yZXR2YWwpID0gMDsKIyAxNTAgIi4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lPdXRwdXRTdHJlYW0uaCIKICB2aXJ0dWFsIG5z
cmVzdWx0IElzTm9uQmxvY2tpbmcoUFJCb29sICpfcmV0dmFsKSA9IDA7Cgp9OwojIDE4MiAiLi4v
Li4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc3BsdWdpbi5oIiAyCiMgMjIgIi4uLy4uLy4uL2Rp
c3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1Z2luSW5zdGFuY2VPd25lci5oIiAyCmNsYXNzIG5zSVBs
dWdpbkluc3RhbmNlOwoKY2xhc3MgbnNJRG9jdW1lbnQ7CiMgMzQgIi4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9wbHVnaW4vbnNJUGx1Z2luSW5zdGFuY2VPd25lci5oIgpjbGFzcyBuc0lQbHVnaW5JbnN0
YW5jZU93bmVyIDogcHVibGljIG5zSVN1cHBvcnRzIHsKIHB1YmxpYzoKCiAgc3RhdGljIGNvbnN0
IG5zSUlEJiBHZXRJSUQoKSB7c3RhdGljIGNvbnN0IG5zSUlEIGlpZCA9IHsweDE4MjcwODcwLCAw
eDMyZjEsIDB4MTFkMiwgeyAweGE4LCAweDMwLCAweDAwLCAweDQwLCAweDk1LCAweDlhLCAweDI4
LCAweGM5IH19OyByZXR1cm4gaWlkO30KCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgU2V0SW5zdGFu
Y2UobnNJUGx1Z2luSW5zdGFuY2UgKmFJbnN0YW5jZSkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jl
c3VsdCBHZXRJbnN0YW5jZShuc0lQbHVnaW5JbnN0YW5jZSAqICYgYUluc3RhbmNlKSA9IDA7CgoK
CgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRXaW5kb3cobnNQbHVnaW5XaW5kb3cgKiAmIGFXaW5k
b3cpID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgR2V0TW9kZShuc1BsdWdpbk1vZGUgKmFN
b2RlKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQgQ3JlYXRlV2lkZ2V0KHZvaWQpID0g
MDsKCgoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0CiAgR2V0VVJMKGNvbnN0IGNoYXIgKmFVUkwsIGNv
bnN0IGNoYXIgKmFUYXJnZXQsCiAgICAgICAgIHZvaWQgKmFQb3N0RGF0YSwgUFJVaW50MzIgYVBv
c3REYXRhTGVuLAogICAgICAgICB2b2lkICphSGVhZGVyc0RhdGEsIFBSVWludDMyIGFIZWFkZXJz
RGF0YUxlbiwKICAgICAgICAgUFJCb29sIGFJc0ZpbGUgPSAwKSA9IDA7CgoKCgogIHZpcnR1YWwg
bnNyZXN1bHQgU2hvd1N0YXR1cyhjb25zdCBjaGFyICphU3RhdHVzTXNnKSA9IDA7CgogIHZpcnR1
YWwgbnNyZXN1bHQKICBTaG93U3RhdHVzKGNvbnN0IFBSVW5pY2hhciAqYVN0YXR1c01zZykgPSAw
OwoKCgoKICB2aXJ0dWFsIG5zcmVzdWx0IEdldERvY3VtZW50KG5zSURvY3VtZW50ICogKmFEb2N1
bWVudCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnZhbGlkYXRlUmVjdChuc1BsdWdp
blJlY3QgKiBhUmVjdCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBJbnZhbGlkYXRlUmVn
aW9uKG5zUGx1Z2luUmVnaW9uIGFSZWdpb24pID0gMDsKCgoKCgogIHZpcnR1YWwgbnNyZXN1bHQg
Rm9yY2VSZWRyYXcodm9pZCkgPSAwOwoKCgoKCiAgdmlydHVhbCBuc3Jlc3VsdCBHZXRWYWx1ZShu
c1BsdWdpbkluc3RhbmNlUGVlclZhcmlhYmxlIGFWYXJpYWJsZSwgdm9pZCAqIGFWYWx1ZSkgPSAw
OwoKfTsKIyAxOSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3BsdWdpbi9uc0lQbHVnaW5Ib3N0Lmgi
IDIKCgoKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJU3RyZWFtTGlzdGVuZXIu
aCIgMQojIDEwICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJU3RyZWFtTGlzdGVuZXIu
aCIKIyAxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJUmVxdWVzdE9ic2VydmVyLmgi
IDEKIyAxNyAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zSVJlcXVlc3RPYnNlcnZlci5o
IgpjbGFzcyBuc0lSZXF1ZXN0OwojIDMyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNJ
UmVxdWVzdE9ic2VydmVyLmgiCmNsYXNzIG5zSVJlcXVlc3RPYnNlcnZlciA6IHB1YmxpYyBuc0lT
dXBwb3J0cyB7CiBwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBuc0lJRCYgR2V0SUlEKCkge3N0YXRp
YyBjb25zdCBuc0lJRCBpaWQgPSB7MHhmZDkxZTJlMCwgMHgxNDgxLCAweDExZDMsIHsgMHg5Mywg
MHgzMywgMHgwMCwgMHgxMCwgMHg0YiwgMHhhMCwgMHhmZCwgMHg0MCB9fTsgcmV0dXJuIGlpZDt9
CiMgNDcgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lSZXF1ZXN0T2JzZXJ2ZXIuaCIK
ICB2aXJ0dWFsIG5zcmVzdWx0IE9uU3RhcnRSZXF1ZXN0KG5zSVJlcXVlc3QgKmFSZXF1ZXN0LCBu
c0lTdXBwb3J0cyAqYUNvbnRleHQpID0gMDsKIyA2MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25l
Y2tvL25zSVJlcXVlc3RPYnNlcnZlci5oIgogIHZpcnR1YWwgbnNyZXN1bHQgT25TdG9wUmVxdWVz
dChuc0lSZXF1ZXN0ICphUmVxdWVzdCwgbnNJU3VwcG9ydHMgKmFDb250ZXh0LCBuc3Jlc3VsdCBh
U3RhdHVzQ29kZSkgPSAwOwoKfTsKIyAxMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25z
SVN0cmVhbUxpc3RlbmVyLmgiIDIKCgoKCgoKY2xhc3MgbnNJSW5wdXRTdHJlYW07CiMgMzIgIi4u
Ly4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNrby9uc0lTdHJlYW1MaXN0ZW5lci5oIgpjbGFzcyBuc0lT
dHJlYW1MaXN0ZW5lciA6IHB1YmxpYyBuc0lSZXF1ZXN0T2JzZXJ2ZXIgewogcHVibGljOgoKICBz
dGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3QgbnNJSUQgaWlkID0gezB4
MWE2MzcwMjAsIDB4MTQ4MiwgMHgxMWQzLCB7IDB4OTMsIDB4MzMsIDB4MDAsIDB4MTAsIDB4NGIs
IDB4YTAsIDB4ZmQsIDB4NDAgfX07IHJldHVybiBpaWQ7fQojIDUyICIuLi8uLi8uLi9kaXN0L2lu
Y2x1ZGUvbmVja28vbnNJU3RyZWFtTGlzdGVuZXIuaCIKICB2aXJ0dWFsIG5zcmVzdWx0IE9uRGF0
YUF2YWlsYWJsZShuc0lSZXF1ZXN0ICphUmVxdWVzdCwgbnNJU3VwcG9ydHMgKmFDb250ZXh0LCBu
c0lJbnB1dFN0cmVhbSAqYUlucHV0U3RyZWFtLCBQUlVpbnQzMiBhT2Zmc2V0LCBQUlVpbnQzMiBh
Q291bnQpID0gMDsKCn07CiMgMjMgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9wbHVnaW4vbnNJUGx1
Z2luSG9zdC5oIiAyCgoKCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN0cmlu
Z1N0cmVhbS5oIiAxCiMgMzEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS94cGNvbS9uc0lTdHJpbmdT
dHJlYW0uaCIKY2xhc3MgbnNJU3RyaW5nSW5wdXRTdHJlYW0gOiBwdWJsaWMgbnNJU3VwcG9ydHMg
ewogcHVibGljOgoKICBzdGF0aWMgY29uc3QgbnNJSUQmIEdldElJRCgpIHtzdGF0aWMgY29uc3Qg
bnNJSUQgaWlkID0gezB4NDUwY2QyZDQsIDB4ZjBmZCwgMHg0MjRkLCB7IDB4YjMsIDB4NjUsIDB4
YjEsIDB4MjUsIDB4MWYsIDB4ODAsIDB4ZmQsIDB4NTMgfX07IHJldHVybiBpaWQ7fQojIDQ2ICIu
Li8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU3RyaW5nU3RyZWFtLmgiCiAgdmlydHVhbCBu
c3Jlc3VsdCBTZXREYXRhKGNvbnN0IGNoYXIgKmRhdGEsIFBSSW50MzIgZGF0YUxlbikgPSAwOwoj
IDYxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU3RyaW5nU3RyZWFtLmgiCiAgdmly
dHVhbCBuc3Jlc3VsdCBBZG9wdERhdGEoY2hhciAqIGRhdGEsIFBSSW50MzIgZGF0YUxlbikgPSAw
OwojIDcyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUveHBjb20vbnNJU3RyaW5nU3RyZWFtLmgiCiAg
dmlydHVhbCBuc3Jlc3VsdCBTaGFyZURhdGEoY29uc3QgY2hhciAqZGF0YSwgUFJJbnQzMiBkYXRh
TGVuKSA9IDA7Cgp9OwojIDE1MCAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL3hwY29tL25zSVN0cmlu
Z1N0cmVhbS5oIgpleHRlcm4gIkMiIG5zcmVzdWx0IE5TX05ld1N0cmluZ0lucHV0U3RyZWFtKAog
ICAgbnNJSW5wdXRTdHJlYW0qKiBhU3RyZWFtUmVzdWx0LAogICAgY29uc3QgbnNBU3RyaW5nJiBh
U3RyaW5nVG9SZWFkKTsKCgoKZXh0ZXJuICJDIiBuc3Jlc3VsdCBOU19OZXdDU3RyaW5nSW5wdXRT
dHJlYW0oCiAgICBuc0lJbnB1dFN0cmVhbSoqIGFTdHJlYW1SZXN1bHQsCiAgICBjb25zdCBuc0FD
U3RyaW5nJiBhU3RyaW5nVG9SZWFkKTsKCgoKZXh0ZXJuICJDIiBuc3Jlc3VsdCBOU19OZXdDaGFy
SW5wdXRTdHJlYW0oCiAgICBuc0lTdXBwb3J0cyoqIGFTdHJlYW1SZXN1bHQsCiAgICBjb25zdCBj
aGFyKiBhU3RyaW5nVG9SZWFkKTsKCgoKZXh0ZXJuICJDIiBuc3Jlc3VsdCBOU19OZXdDaGFyT3V0
cHV0U3RyZWFtKAogICAgbnNJU3VwcG9ydHMqKiBhU3RyZWFtUmVzdWx0LAogICAgY2hhcioqIGFT
dHJpbmdUb0NoYW5nZSk7CgoKCmV4dGVybiAiQyIgbnNyZXN1bHQgTlNfTmV3Qnl0ZUlucHV0U3Ry
ZWFtKAogICAgbnNJU3VwcG9ydHMqKiBhU3RyZWFtUmVzdWx0LAogICAgY29uc3QgY2hhciogYVN0
cmluZ1RvUmVhZCwKICAgIFBSSW50MzIgYUxlbmd0aCk7CiMgMjcgIi4uLy4uLy4uL2Rpc3QvaW5j
bHVkZS9wbHVnaW4vbnNJUGx1Z2luSG9zdC5oIiAyCiMgMzUgIi4uLy4uLy4uL2Rpc3QvaW5jbHVk
ZS9wbHVnaW4vbnNJUGx1Z2luSG9zdC5oIgojIDEgIi4uLy4uLy4uL2Rpc3QvaW5jbHVkZS9uZWNr
by9uc05ldFV0aWwuaCIgMQojIDQxICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNOZXRV
dGlsLmgiCiMgMSAiLi4vLi4vLi4vZGlzdC9pbmNsdWRlL25lY2tvL25zTmV0RXJyb3IuaCIgMQoj
IDQyICIuLi8uLi8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNOZXRVdGlsLmgiIDIKIyAxICIuLi8u
Li8uLi9kaXN0L2luY2x1ZGUvbmVja28vbnNOZXRDSUQuaCIgMQojIDQzICIuLi8uLi8uLi9kaXN0
L2luY2x1ZGUvbmVja28vbnNOZXRVdGlsLmgiIDIKCgoKCiMgMSAiL3Zhci90bXAvcG9ydGFnZS9t
b3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIiAxCiMg
NDcgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5j
bHVkZS9uc3ByL3ByaW8uaCIKIyAxICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dv
cmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlucnZhbC5oIiAxCiMgNTIgIi92YXIvdG1w
L3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By
aW5ydmFsLmgiCmV4dGVybiAiQyIgewoKCgoKCnR5cGVkZWYgUFJVaW50MzIgUFJJbnRlcnZhbFRp
bWU7CiMgMTA1ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wcmlucnZhbC5oIgpleHRlcm4gUFJJbnRlcnZhbFRpbWUgUFJfSW50
ZXJ2YWxOb3codm9pZCk7CiMgMTIzICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dv
cmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlucnZhbC5oIgpleHRlcm4gUFJVaW50MzIg
UFJfVGlja3NQZXJTZWNvbmQodm9pZCk7CiMgMTQyICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEt
MS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlucnZhbC5oIgpleHRlcm4g
UFJJbnRlcnZhbFRpbWUgUFJfU2Vjb25kc1RvSW50ZXJ2YWwoUFJVaW50MzIgc2Vjb25kcyk7CmV4
dGVybiBQUkludGVydmFsVGltZSBQUl9NaWxsaXNlY29uZHNUb0ludGVydmFsKFBSVWludDMyIG1p
bGxpKTsKZXh0ZXJuIFBSSW50ZXJ2YWxUaW1lIFBSX01pY3Jvc2Vjb25kc1RvSW50ZXJ2YWwoUFJV
aW50MzIgbWljcm8pOwojIDE2MyAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3Jr
L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpbnJ2YWwuaCIKZXh0ZXJuIFBSVWludDMyIFBS
X0ludGVydmFsVG9TZWNvbmRzKFBSSW50ZXJ2YWxUaW1lIHRpY2tzKTsKZXh0ZXJuIFBSVWludDMy
IFBSX0ludGVydmFsVG9NaWxsaXNlY29uZHMoUFJJbnRlcnZhbFRpbWUgdGlja3MpOwpleHRlcm4g
UFJVaW50MzIgUFJfSW50ZXJ2YWxUb01pY3Jvc2Vjb25kcyhQUkludGVydmFsVGltZSB0aWNrcyk7
Cgp9CiMgNDggIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rp
c3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIgMgojIDEgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0x
LjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5ldC5oIiAxCiMgNjUgIi92
YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3ByaW5ldC5oIgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDEgMwojIDI1ICIv
dXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAzCmV4dGVybiAiQyIgewoKIyAxICIvdXNyL2luY2x1
ZGUvc3lzL3Vpby5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N5cy91aW8uaCIgMwpleHRlcm4g
IkMiIHsKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Vpby5oIiAxIDMKIyA0MiAiL3Vzci9pbmNs
dWRlL2JpdHMvdWlvLmgiIDMKc3RydWN0IGlvdmVjCiAgewogICAgdm9pZCAqaW92X2Jhc2U7CiAg
ICBzaXplX3QgaW92X2xlbjsKICB9OwojIDMwICIvdXNyL2luY2x1ZGUvc3lzL3Vpby5oIiAyIDMK
CgoKCgoKCmV4dGVybiBzc2l6ZV90IHJlYWR2IChpbnQgX19mZCwgX19jb25zdCBzdHJ1Y3QgaW92
ZWMgKl9fdmVjdG9yLCBpbnQgX19jb3VudCkKICAgICB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHNz
aXplX3Qgd3JpdGV2IChpbnQgX19mZCwgX19jb25zdCBzdHJ1Y3QgaW92ZWMgKl9fdmVjdG9yLCBp
bnQgX19jb3VudCkKICAgICB0aHJvdyAoKTsKCn0KIyAyOCAiL3Vzci9pbmNsdWRlL3N5cy9zb2Nr
ZXQuaCIgMiAzCgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yLjIv
aW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDIg
MwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0LmgiIDEgMwojIDI5ICIvdXNyL2lu
Y2x1ZGUvYml0cy9zb2NrZXQuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51
eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9iaXRz
L3NvY2tldC5oIiAyIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8z
LjIuMi9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0
LmgiIDIgMwoKCgoKdHlwZWRlZiBfX3NvY2tsZW5fdCBzb2NrbGVuX3Q7CgoKCgplbnVtIF9fc29j
a2V0X3R5cGUKewogIFNPQ0tfU1RSRUFNID0gMSwKCgogIFNPQ0tfREdSQU0gPSAyLAoKCiAgU09D
S19SQVcgPSAzLAoKICBTT0NLX1JETSA9IDQsCgogIFNPQ0tfU0VRUEFDS0VUID0gNSwKCgogIFNP
Q0tfUEFDS0VUID0gMTAKCgoKfTsKIyAxNDIgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2FkZHIuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVk
ZS9iaXRzL3NvY2thZGRyLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgc2FfZmFtaWx5
X3Q7CiMgMTQzICIvdXNyL2luY2x1ZGUvYml0cy9zb2NrZXQuaCIgMiAzCgoKc3RydWN0IHNvY2th
ZGRyCiAgewogICAgc2FfZmFtaWx5X3Qgc2FfZmFtaWx5OwogICAgY2hhciBzYV9kYXRhWzE0XTsK
ICB9OwojIDE2MiAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0LmgiIDMKc3RydWN0IHNvY2thZGRy
X3N0b3JhZ2UKICB7CiAgICBzYV9mYW1pbHlfdCBzc19mYW1pbHk7CiAgICBfX3VpbnQzMl90IF9f
c3NfYWxpZ247CiAgICBjaGFyIF9fc3NfcGFkZGluZ1soMTI4IC0gKDIgKiBzaXplb2YgKF9fdWlu
dDMyX3QpKSldOwogIH07CgoKCmVudW0KICB7CiAgICBNU0dfT09CID0gMHgwMSwKCiAgICBNU0df
UEVFSyA9IDB4MDIsCgogICAgTVNHX0RPTlRST1VURSA9IDB4MDQsCgoKCiAgICBNU0dfVFJZSEFS
RCA9IE1TR19ET05UUk9VVEUsCgoKICAgIE1TR19DVFJVTkMgPSAweDA4LAoKICAgIE1TR19QUk9Y
WSA9IDB4MTAsCgogICAgTVNHX1RSVU5DID0gMHgyMCwKCiAgICBNU0dfRE9OVFdBSVQgPSAweDQw
LAoKICAgIE1TR19FT1IgPSAweDgwLAoKICAgIE1TR19XQUlUQUxMID0gMHgxMDAsCgogICAgTVNH
X0ZJTiA9IDB4MjAwLAoKICAgIE1TR19TWU4gPSAweDQwMCwKCiAgICBNU0dfQ09ORklSTSA9IDB4
ODAwLAoKICAgIE1TR19SU1QgPSAweDEwMDAsCgogICAgTVNHX0VSUlFVRVVFID0gMHgyMDAwLAoK
ICAgIE1TR19OT1NJR05BTCA9IDB4NDAwMCwKCiAgICBNU0dfTU9SRSA9IDB4ODAwMAoKICB9OwoK
CgoKc3RydWN0IG1zZ2hkcgogIHsKICAgIHZvaWQgKm1zZ19uYW1lOwogICAgc29ja2xlbl90IG1z
Z19uYW1lbGVuOwoKICAgIHN0cnVjdCBpb3ZlYyAqbXNnX2lvdjsKICAgIGludCBtc2dfaW92bGVu
OwoKICAgIHZvaWQgKm1zZ19jb250cm9sOwogICAgc29ja2xlbl90IG1zZ19jb250cm9sbGVuOwoK
ICAgIGludCBtc2dfZmxhZ3M7CiAgfTsKCgpzdHJ1Y3QgY21zZ2hkcgogIHsKICAgIHNpemVfdCBj
bXNnX2xlbjsKCiAgICBpbnQgY21zZ19sZXZlbDsKICAgIGludCBjbXNnX3R5cGU7CgoKCiAgfTsK
IyAyNTcgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAzCmV4dGVybiBzdHJ1Y3QgY21zZ2hk
ciAqX19jbXNnX254dGhkciAoc3RydWN0IG1zZ2hkciAqX19taGRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjbXNnaGRyICpfX2Ntc2cpIHRocm93ICgpOwoK
CgoKZXh0ZXJuIF9faW5saW5lIHN0cnVjdCBjbXNnaGRyICoKX19jbXNnX254dGhkciAoc3RydWN0
IG1zZ2hkciAqX19taGRyLCBzdHJ1Y3QgY21zZ2hkciAqX19jbXNnKSB0aHJvdyAoKQp7CiAgaWYg
KChzaXplX3QpIF9fY21zZy0+Y21zZ19sZW4gPCBzaXplb2YgKHN0cnVjdCBjbXNnaGRyKSkKCiAg
ICByZXR1cm4gMDsKCiAgX19jbXNnID0gKHN0cnVjdCBjbXNnaGRyICopICgodW5zaWduZWQgY2hh
ciAqKSBfX2Ntc2cKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKCgoX19jbXNnLT5j
bXNnX2xlbikgKyBzaXplb2YgKHNpemVfdCkgLSAxKSAmIChzaXplX3QpIH4oc2l6ZW9mIChzaXpl
X3QpIC0gMSkpKTsKICBpZiAoKHVuc2lnbmVkIGNoYXIgKikgKF9fY21zZyArIDEpID4gKCh1bnNp
Z25lZCBjaGFyICopIF9fbWhkci0+bXNnX2NvbnRyb2wKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICsgX19taGRyLT5tc2dfY29udHJvbGxlbikKICAgICAgfHwgKCh1bnNp
Z25lZCBjaGFyICopIF9fY21zZyArICgoKF9fY21zZy0+Y21zZ19sZW4pICsgc2l6ZW9mIChzaXpl
X3QpIC0gMSkgJiAoc2l6ZV90KSB+KHNpemVvZiAoc2l6ZV90KSAtIDEpKQogICAgICAgICAgPiAo
KHVuc2lnbmVkIGNoYXIgKikgX19taGRyLT5tc2dfY29udHJvbCArIF9fbWhkci0+bXNnX2NvbnRy
b2xsZW4pKSkKCiAgICByZXR1cm4gMDsKICByZXR1cm4gX19jbXNnOwp9CgoKCgplbnVtCiAgewog
ICAgU0NNX1JJR0hUUyA9IDB4MDEsCgoKICAgIFNDTV9DUkVERU5USUFMUyA9IDB4MDIsCgoKICAg
IF9fU0NNX0NPTk5FQ1QgPSAweDAzCiAgfTsKCgoKc3RydWN0IHVjcmVkCnsKICBwaWRfdCBwaWQ7
CiAgdWlkX3QgdWlkOwogIGdpZF90IGdpZDsKfTsKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vc29j
a2V0LmgiIDEgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vc29ja2lvcy5oIiAxIDMKIyA1ICIv
dXNyL2luY2x1ZGUvYXNtL3NvY2tldC5oIiAyIDMKIyAzMDYgIi91c3IvaW5jbHVkZS9iaXRzL3Nv
Y2tldC5oIiAyIDMKCgoKc3RydWN0IGxpbmdlcgogIHsKICAgIGludCBsX29ub2ZmOwogICAgaW50
IGxfbGluZ2VyOwogIH07CiMgMzYgIi91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDIgMwoKCgoK
c3RydWN0IG9zb2NrYWRkcgogIHsKICAgIHVuc2lnbmVkIHNob3J0IGludCBzYV9mYW1pbHk7CiAg
ICB1bnNpZ25lZCBjaGFyIHNhX2RhdGFbMTRdOwogIH07CgoKCgplbnVtCnsKICBTSFVUX1JEID0g
MCwKCiAgU0hVVF9XUiwKCiAgU0hVVF9SRFdSCgp9OwojIDEwMCAiL3Vzci9pbmNsdWRlL3N5cy9z
b2NrZXQuaCIgMwpleHRlcm4gaW50IHNvY2tldCAoaW50IF9fZG9tYWluLCBpbnQgX190eXBlLCBp
bnQgX19wcm90b2NvbCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzb2NrZXRwYWlyIChpbnQg
X19kb21haW4sIGludCBfX3R5cGUsIGludCBfX3Byb3RvY29sLAogICAgICAgICAgICAgICAgICAg
ICAgIGludCBfX2Zkc1syXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBiaW5kIChpbnQgX19mZCwg
X19jb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiBfX2FkZHIsIHNvY2tsZW5fdCBfX2xlbikKICAgICB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldHNvY2tuYW1lIChpbnQgX19mZCwgc3RydWN0IHNvY2th
ZGRyICpfX3Jlc3RyaWN0IF9fYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90
ICpfX3Jlc3RyaWN0IF9fbGVuKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGNvbm5lY3QgKGlu
dCBfX2ZkLCBfX2NvbnN0IHN0cnVjdCBzb2NrYWRkciAqIF9fYWRkciwgc29ja2xlbl90IF9fbGVu
KQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGdldHBlZXJuYW1lIChpbnQgX19mZCwgc3Ry
dWN0IHNvY2thZGRyICpfX3Jlc3RyaWN0IF9fYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAg
c29ja2xlbl90ICpfX3Jlc3RyaWN0IF9fbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNzaXplX3Qg
c2VuZCAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24sIGludCBfX2Zs
YWdzKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gc3NpemVfdCByZWN2IChpbnQgX19mZCwgdm9p
ZCAqX19idWYsIHNpemVfdCBfX24sIGludCBfX2ZsYWdzKQogICAgIHRocm93ICgpOwoKCgpleHRl
cm4gc3NpemVfdCBzZW5kdG8gKGludCBfX2ZkLCBfX2NvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3Qg
X19uLAogICAgICAgICAgICAgICAgICAgICAgIGludCBfX2ZsYWdzLCBfX2NvbnN0IHN0cnVjdCBz
b2NrYWRkciAqIF9fYWRkciwKICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgX19hZGRy
X2xlbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHNzaXplX3QgcmVjdmZyb20gKGludCBfX2ZkLCB2
b2lkICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19uLCBpbnQgX19mbGFncywKICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqX19yZXN0cmljdCBfX2FkZHIsIHNvY2ts
ZW5fdCAqX19yZXN0cmljdCBfX2FkZHJfbGVuKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNz
aXplX3Qgc2VuZG1zZyAoaW50IF9fZmQsIF9fY29uc3Qgc3RydWN0IG1zZ2hkciAqX19tZXNzYWdl
LCBpbnQgX19mbGFncykKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNzaXplX3QgcmVjdm1zZyAo
aW50IF9fZmQsIHN0cnVjdCBtc2doZHIgKl9fbWVzc2FnZSwgaW50IF9fZmxhZ3MpCiAgICAgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXRzb2Nrb3B0IChpbnQgX19mZCwgaW50IF9fbGV2ZWws
IGludCBfX29wdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19yZXN0cmljdCBf
X29wdHZhbCwKICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgKl9fcmVzdHJpY3QgX19v
cHRsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRzb2Nrb3B0IChpbnQgX19mZCwgaW50
IF9fbGV2ZWwsIGludCBfX29wdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2
b2lkICpfX29wdHZhbCwgc29ja2xlbl90IF9fb3B0bGVuKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
aW50IGxpc3RlbiAoaW50IF9fZmQsIGludCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50
IGFjY2VwdCAoaW50IF9fZmQsIHN0cnVjdCBzb2NrYWRkciAqX19yZXN0cmljdCBfX2FkZHIsCiAg
ICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgKl9fcmVzdHJpY3QgX19hZGRyX2xlbikKICAgICB0
aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgc2h1dGRvd24gKGludCBfX2ZkLCBpbnQgX19ob3cp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzb2NrYXRtYXJrIChpbnQgX19mZCkgdGhyb3cgKCk7
CgoKCgoKCgpleHRlcm4gaW50IGlzZmR0eXBlIChpbnQgX19mZCwgaW50IF9fZmR0eXBlKSB0aHJv
dyAoKTsKCgp9CiMgNjYgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3pp
bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5ldC5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL25ldGlu
ZXQvaW4uaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvc3RkaW50LmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3N0
ZGludC5oIiAyIDMKIyA0OSAiL3Vzci9pbmNsdWRlL3N0ZGludC5oIiAzCnR5cGVkZWYgdW5zaWdu
ZWQgY2hhciB1aW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1aW50MTZfdDsKCnR5
cGVkZWYgdW5zaWduZWQgaW50IHVpbnQzMl90OwoKCgoKCl9fZXh0ZW5zaW9uX18KdHlwZWRlZiB1
bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnQ2NF90OwoKCgoKCgp0eXBlZGVmIHNpZ25lZCBjaGFy
IGludF9sZWFzdDhfdDsKdHlwZWRlZiBzaG9ydCBpbnQgaW50X2xlYXN0MTZfdDsKdHlwZWRlZiBp
bnQgaW50X2xlYXN0MzJfdDsKCgoKX19leHRlbnNpb25fXwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQg
aW50X2xlYXN0NjRfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnRfbGVhc3Q4X3Q7CnR5
cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVpbnRfbGVhc3QxNl90Owp0eXBlZGVmIHVuc2lnbmVk
IGludCB1aW50X2xlYXN0MzJfdDsKCgoKX19leHRlbnNpb25fXwp0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgbG9uZyBpbnQgdWludF9sZWFzdDY0X3Q7CgoKCgoKCnR5cGVkZWYgc2lnbmVkIGNoYXIgaW50
X2Zhc3Q4X3Q7CgoKCgoKdHlwZWRlZiBpbnQgaW50X2Zhc3QxNl90Owp0eXBlZGVmIGludCBpbnRf
ZmFzdDMyX3Q7Cl9fZXh0ZW5zaW9uX18KdHlwZWRlZiBsb25nIGxvbmcgaW50IGludF9mYXN0NjRf
dDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnRfZmFzdDhfdDsKCgoKCgp0eXBlZGVmIHVu
c2lnbmVkIGludCB1aW50X2Zhc3QxNl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50X2Zhc3Qz
Ml90OwpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1aW50X2Zh
c3Q2NF90OwojIDEyNiAiL3Vzci9pbmNsdWRlL3N0ZGludC5oIiAzCnR5cGVkZWYgaW50IGludHB0
cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRwdHJfdDsKIyAxMzggIi91c3IvaW5jbHVk
ZS9zdGRpbnQuaCIgMwpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgbG9uZyBsb25nIGludCBpbnRtYXhf
dDsKX19leHRlbnNpb25fXwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWludG1heF90
OwojIDI0ICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAyIDMKCgoKZXh0ZXJuICJDIiB7CgoK
ZW51bQogIHsKICAgIElQUFJPVE9fSVAgPSAwLAoKICAgIElQUFJPVE9fSE9QT1BUUyA9IDAsCgog
ICAgSVBQUk9UT19JQ01QID0gMSwKCiAgICBJUFBST1RPX0lHTVAgPSAyLAoKICAgIElQUFJPVE9f
SVBJUCA9IDQsCgogICAgSVBQUk9UT19UQ1AgPSA2LAoKICAgIElQUFJPVE9fRUdQID0gOCwKCiAg
ICBJUFBST1RPX1BVUCA9IDEyLAoKICAgIElQUFJPVE9fVURQID0gMTcsCgogICAgSVBQUk9UT19J
RFAgPSAyMiwKCiAgICBJUFBST1RPX1RQID0gMjksCgogICAgSVBQUk9UT19JUFY2ID0gNDEsCgog
ICAgSVBQUk9UT19ST1VUSU5HID0gNDMsCgogICAgSVBQUk9UT19GUkFHTUVOVCA9IDQ0LAoKICAg
IElQUFJPVE9fUlNWUCA9IDQ2LAoKICAgIElQUFJPVE9fR1JFID0gNDcsCgogICAgSVBQUk9UT19F
U1AgPSA1MCwKCiAgICBJUFBST1RPX0FIID0gNTEsCgogICAgSVBQUk9UT19JQ01QVjYgPSA1OCwK
CiAgICBJUFBST1RPX05PTkUgPSA1OSwKCiAgICBJUFBST1RPX0RTVE9QVFMgPSA2MCwKCiAgICBJ
UFBST1RPX01UUCA9IDkyLAoKICAgIElQUFJPVE9fRU5DQVAgPSA5OCwKCiAgICBJUFBST1RPX1BJ
TSA9IDEwMywKCiAgICBJUFBST1RPX0NPTVAgPSAxMDgsCgogICAgSVBQUk9UT19SQVcgPSAyNTUs
CgogICAgSVBQUk9UT19NQVgKICB9OwoKCgp0eXBlZGVmIHVpbnQxNl90IGluX3BvcnRfdDsKCgpl
bnVtCiAgewogICAgSVBQT1JUX0VDSE8gPSA3LAogICAgSVBQT1JUX0RJU0NBUkQgPSA5LAogICAg
SVBQT1JUX1NZU1RBVCA9IDExLAogICAgSVBQT1JUX0RBWVRJTUUgPSAxMywKICAgIElQUE9SVF9O
RVRTVEFUID0gMTUsCiAgICBJUFBPUlRfRlRQID0gMjEsCiAgICBJUFBPUlRfVEVMTkVUID0gMjMs
CiAgICBJUFBPUlRfU01UUCA9IDI1LAogICAgSVBQT1JUX1RJTUVTRVJWRVIgPSAzNywKICAgIElQ
UE9SVF9OQU1FU0VSVkVSID0gNDIsCiAgICBJUFBPUlRfV0hPSVMgPSA0MywKICAgIElQUE9SVF9N
VFAgPSA1NywKCiAgICBJUFBPUlRfVEZUUCA9IDY5LAogICAgSVBQT1JUX1JKRSA9IDc3LAogICAg
SVBQT1JUX0ZJTkdFUiA9IDc5LAogICAgSVBQT1JUX1RUWUxJTksgPSA4NywKICAgIElQUE9SVF9T
VVBEVVAgPSA5NSwKCgogICAgSVBQT1JUX0VYRUNTRVJWRVIgPSA1MTIsCiAgICBJUFBPUlRfTE9H
SU5TRVJWRVIgPSA1MTMsCiAgICBJUFBPUlRfQ01EU0VSVkVSID0gNTE0LAogICAgSVBQT1JUX0VG
U1NFUlZFUiA9IDUyMCwKCgogICAgSVBQT1JUX0JJRkZVRFAgPSA1MTIsCiAgICBJUFBPUlRfV0hP
U0VSVkVSID0gNTEzLAogICAgSVBQT1JUX1JPVVRFU0VSVkVSID0gNTIwLAoKCiAgICBJUFBPUlRf
UkVTRVJWRUQgPSAxMDI0LAoKCiAgICBJUFBPUlRfVVNFUlJFU0VSVkVEID0gNTAwMAogIH07CgoK
CnR5cGVkZWYgdWludDMyX3QgaW5fYWRkcl90OwpzdHJ1Y3QgaW5fYWRkcgogIHsKICAgIGluX2Fk
ZHJfdCBzX2FkZHI7CiAgfTsKIyAxOTAgIi91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDMKc3Ry
dWN0IGluNl9hZGRyCiAgewogICAgdW5pb24KICAgICAgewogICAgICAgIHVpbnQ4X3QgdTZfYWRk
cjhbMTZdOwogICAgICAgIHVpbnQxNl90IHU2X2FkZHIxNls4XTsKICAgICAgICB1aW50MzJfdCB1
Nl9hZGRyMzJbNF07CiAgICAgIH0gaW42X3U7CgoKCiAgfTsKCmV4dGVybiBjb25zdCBzdHJ1Y3Qg
aW42X2FkZHIgaW42YWRkcl9hbnk7CmV4dGVybiBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgaW42YWRk
cl9sb29wYmFjazsKIyAyMTYgIi91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDMKc3RydWN0IHNv
Y2thZGRyX2luCiAgewogICAgc2FfZmFtaWx5X3Qgc2luX2ZhbWlseTsKICAgIGluX3BvcnRfdCBz
aW5fcG9ydDsKICAgIHN0cnVjdCBpbl9hZGRyIHNpbl9hZGRyOwoKCiAgICB1bnNpZ25lZCBjaGFy
IHNpbl96ZXJvW3NpemVvZiAoc3RydWN0IHNvY2thZGRyKSAtCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChzaXplb2YgKHVuc2lnbmVkIHNob3J0IGludCkpIC0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZW9mIChpbl9wb3J0X3QpIC0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZW9mIChzdHJ1Y3QgaW5fYWRkcildOwogIH07CgoKc3RydWN0IHNvY2thZGRyX2luNgogIHsK
ICAgIHNhX2ZhbWlseV90IHNpbjZfZmFtaWx5OwogICAgaW5fcG9ydF90IHNpbjZfcG9ydDsKICAg
IHVpbnQzMl90IHNpbjZfZmxvd2luZm87CiAgICBzdHJ1Y3QgaW42X2FkZHIgc2luNl9hZGRyOwog
ICAgdWludDMyX3Qgc2luNl9zY29wZV9pZDsKICB9OwoKCnN0cnVjdCBpcHY2X21yZXEKICB7Cgog
ICAgc3RydWN0IGluNl9hZGRyIGlwdjZtcl9tdWx0aWFkZHI7CgoKICAgIHVuc2lnbmVkIGludCBp
cHY2bXJfaW50ZXJmYWNlOwogIH07CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9pbi5oIiAxIDMK
IyA2NiAiL3Vzci9pbmNsdWRlL2JpdHMvaW4uaCIgMwpzdHJ1Y3QgaXBfb3B0cwogIHsKICAgIHN0
cnVjdCBpbl9hZGRyIGlwX2RzdDsKICAgIGNoYXIgaXBfb3B0c1s0MF07CiAgfTsKCgpzdHJ1Y3Qg
aXBfbXJlcQogIHsKICAgIHN0cnVjdCBpbl9hZGRyIGltcl9tdWx0aWFkZHI7CiAgICBzdHJ1Y3Qg
aW5fYWRkciBpbXJfaW50ZXJmYWNlOwogIH07CgoKc3RydWN0IGlwX21yZXFuCiAgewogICAgc3Ry
dWN0IGluX2FkZHIgaW1yX211bHRpYWRkcjsKICAgIHN0cnVjdCBpbl9hZGRyIGltcl9hZGRyZXNz
OwogICAgaW50IGltcl9pZmluZGV4OwogIH07CgoKc3RydWN0IGluX3BrdGluZm8KICB7CiAgICBp
bnQgaXBpX2lmaW5kZXg7CiAgICBzdHJ1Y3QgaW5fYWRkciBpcGlfc3BlY19kc3Q7CiAgICBzdHJ1
Y3QgaW5fYWRkciBpcGlfYWRkcjsKICB9OwojIDI1MSAiL3Vzci9pbmNsdWRlL25ldGluZXQvaW4u
aCIgMiAzCiMgMjU5ICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAzCmV4dGVybiB1aW50MzJf
dCBudG9obCAodWludDMyX3QgX19uZXRsb25nKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CmV4dGVybiB1aW50MTZfdCBudG9ocyAodWludDE2X3QgX19uZXRzaG9ydCkKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiB1aW50MzJfdCBo
dG9ubCAodWludDMyX3QgX19ob3N0bG9uZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CmV4dGVybiB1aW50MTZfdCBodG9ucyAodWludDE2X3QgX19ob3N0c2hvcnQp
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy9ieXRlc3dhcC5oIiAxIDMKIyAyNzEgIi91c3IvaW5jbHVkZS9uZXRpbmV0
L2luLmgiIDIgMwojIDMzMyAiL3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaCIgMwpleHRlcm4gaW50
IGJpbmRyZXN2cG9ydCAoaW50IF9fc29ja2ZkLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKl9fc29ja19p
bikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBiaW5kcmVzdnBvcnQ2IChpbnQgX19zb2NrZmQsIHN0
cnVjdCBzb2NrYWRkcl9pbjYgKl9fc29ja19pbikKICAgICB0aHJvdyAoKTsKIyAzNjEgIi91c3Iv
aW5jbHVkZS9uZXRpbmV0L2luLmgiIDMKc3RydWN0IGluNl9wa3RpbmZvCiAgewogICAgc3RydWN0
IGluNl9hZGRyIGlwaTZfYWRkcjsKICAgIHVuc2lnbmVkIGludCBpcGk2X2lmaW5kZXg7CiAgfTsK
Cn0KIyA2NyAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlz
dC9pbmNsdWRlL25zcHIvcHJpbmV0LmgiIDIKIyA4MSAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxh
LTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpbmV0LmgiCiMgMSAiL3Vz
ci9pbmNsdWRlL2FycGEvaW5ldC5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL2FycGEvaW5ldC5o
IiAzCmV4dGVybiAiQyIgewoKCgpleHRlcm4gaW5fYWRkcl90IGluZXRfYWRkciAoX19jb25zdCBj
aGFyICpfX2NwKSB0aHJvdyAoKTsKCgpleHRlcm4gaW5fYWRkcl90IGluZXRfbG5hb2YgKHN0cnVj
dCBpbl9hZGRyIF9faW4pIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IGluX2FkZHIgaW5ldF9t
YWtlYWRkciAoaW5fYWRkcl90IF9fbmV0LCBpbl9hZGRyX3QgX19ob3N0KQogICAgIHRocm93ICgp
OwoKCmV4dGVybiBpbl9hZGRyX3QgaW5ldF9uZXRvZiAoc3RydWN0IGluX2FkZHIgX19pbikgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbl9hZGRyX3QgaW5ldF9uZXR3b3JrIChfX2NvbnN0IGNoYXIgKl9f
Y3ApIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqaW5ldF9udG9hIChzdHJ1Y3QgaW5fYWRkciBf
X2luKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaW5ldF9wdG9uIChpbnQgX19hZiwgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fY3AsCiAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX3Jl
c3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBfX2NvbnN0IGNoYXIgKmluZXRfbnRv
cCAoaW50IF9fYWYsIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX2NwLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNvY2tsZW5fdCBfX2xl
bikKICAgICB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGluX2FkZHJfdCBpbmV0X2F0b24gKF9fY29u
c3QgY2hhciAqX19jcCwgc3RydWN0IGluX2FkZHIgKl9faW5wKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGNoYXIgKmluZXRfbmV0YSAoaW5fYWRkcl90IF9fbmV0LCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9f
bGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICppbmV0X25ldF9udG9wIChpbnQgX19hZiwg
X19jb25zdCB2b2lkICpfX2NwLCBpbnQgX19iaXRzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlu
ZXRfbmV0X3B0b24gKGludCBfX2FmLCBfX2NvbnN0IGNoYXIgKl9fY3AsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZCAqX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgpleHRl
cm4gdW5zaWduZWQgaW50IGluZXRfbnNhcF9hZGRyIChfX2NvbnN0IGNoYXIgKl9fY3AsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKl9fYnVmLCBpbnQg
X19sZW4pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqaW5ldF9uc2FwX250b2EgKGludCBfX2xl
biwgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX2NwLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgp9CiMgODIgIi92YXIvdG1wL3BvcnRhZ2UvbW96
aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW5ldC5oIiAyCgoj
IDEgIi91c3IvaW5jbHVkZS9uZXRkYi5oIiAxIDMKIyAzMyAiL3Vzci9pbmNsdWRlL25ldGRiLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvcnBjL25ldGRiLmgiIDEgMwojIDQyICIvdXNyL2luY2x1ZGUv
cnBjL25ldGRiLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMu
Mi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvcnBjL25ldGRiLmgi
IDIgMwoKZXh0ZXJuICJDIiB7CgpzdHJ1Y3QgcnBjZW50CnsKICBjaGFyICpyX25hbWU7CiAgY2hh
ciAqKnJfYWxpYXNlczsKICBpbnQgcl9udW1iZXI7Cn07CgpleHRlcm4gdm9pZCBzZXRycGNlbnQg
KGludCBfX3N0YXlvcGVuKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgZW5kcnBjZW50ICh2b2lkKSB0
aHJvdyAoKTsKZXh0ZXJuIHN0cnVjdCBycGNlbnQgKmdldHJwY2J5bmFtZSAoX19jb25zdCBjaGFy
ICpfX25hbWUpIHRocm93ICgpOwpleHRlcm4gc3RydWN0IHJwY2VudCAqZ2V0cnBjYnludW1iZXIg
KGludCBfX251bWJlcikgdGhyb3cgKCk7CmV4dGVybiBzdHJ1Y3QgcnBjZW50ICpnZXRycGNlbnQg
KHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0cnBjYnluYW1lX3IgKF9fY29uc3QgY2hh
ciAqX19uYW1lLCBzdHJ1Y3QgcnBjZW50ICpfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKl9fYnVmZmVyLCBzaXplX3QgX19idWZsZW4sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBycGNlbnQgKipfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4g
aW50IGdldHJwY2J5bnVtYmVyX3IgKGludCBfX251bWJlciwgc3RydWN0IHJwY2VudCAqX19yZXN1
bHRfYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fYnVmZmVyLCBzaXpl
X3QgX19idWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJwY2VudCAq
Kl9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0cnBjZW50X3IgKHN0cnVjdCBycGNl
bnQgKl9fcmVzdWx0X2J1ZiwgY2hhciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBfX2J1Zmxlbiwgc3RydWN0IHJwY2VudCAqKl9fcmVzdWx0KSB0aHJvdyAoKTsKCgp9
CiMgMzQgIi91c3IvaW5jbHVkZS9uZXRkYi5oIiAyIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvc2lnaW5mby5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnaW5mby5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvd29yZHNpemUuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9i
aXRzL3NpZ2luZm8uaCIgMiAzCgoKCgoKCgp0eXBlZGVmIHVuaW9uIHNpZ3ZhbAogIHsKICAgIGlu
dCBzaXZhbF9pbnQ7CiAgICB2b2lkICpzaXZhbF9wdHI7CiAgfSBzaWd2YWxfdDsKIyAyNzEgIi91
c3IvaW5jbHVkZS9iaXRzL3NpZ2luZm8uaCIgMwpzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfczsKCnR5
cGVkZWYgc3RydWN0IHNpZ2V2ZW50CiAgewogICAgc2lndmFsX3Qgc2lnZXZfdmFsdWU7CiAgICBp
bnQgc2lnZXZfc2lnbm87CiAgICBpbnQgc2lnZXZfbm90aWZ5OwoKICAgIHVuaW9uCiAgICAgIHsK
ICAgICAgICBpbnQgX3BhZFsoKDY0IC8gc2l6ZW9mIChpbnQpKSAtIDMpXTsKCiAgICAgICAgc3Ry
dWN0CiAgICAgICAgICB7CiAgICAgICAgICAgIHZvaWQgKCpfZnVuY3Rpb24pIChzaWd2YWxfdCk7
CiAgICAgICAgICAgIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zICpfYXR0cmlidXRlOwogICAgICAg
ICAgfSBfc2lnZXZfdGhyZWFkOwogICAgICB9IF9zaWdldl91bjsKICB9IHNpZ2V2ZW50X3Q7CgoK
CgoKCmVudW0KewogIFNJR0VWX1NJR05BTCA9IDAsCgogIFNJR0VWX05PTkUsCgogIFNJR0VWX1RI
UkVBRAoKfTsKIyAzOSAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1
ZGUvdGltZS5oIiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDIgMwoKCiMgMSAiL3Vz
ci9pbmNsdWRlL2JpdHMvbmV0ZGIuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9iaXRzL25ldGRi
LmgiIDMKc3RydWN0IG5ldGVudAp7CiAgY2hhciAqbl9uYW1lOwogIGNoYXIgKipuX2FsaWFzZXM7
CiAgaW50IG5fYWRkcnR5cGU7CiAgdWludDMyX3Qgbl9uZXQ7Cn07CiMgNDQgIi91c3IvaW5jbHVk
ZS9uZXRkYi5oIiAyIDMKIyA1NCAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDMKZXh0ZXJuICJDIiB7
CgoKCgoKCmV4dGVybiBpbnQgKl9faF9lcnJub19sb2NhdGlvbiAodm9pZCkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDg4ICIvdXNyL2luY2x1ZGUvbmV0ZGIuaCIgMwpl
eHRlcm4gdm9pZCBoZXJyb3IgKF9fY29uc3QgY2hhciAqX19zdHIpIHRocm93ICgpOwoKCmV4dGVy
biBfX2NvbnN0IGNoYXIgKmhzdHJlcnJvciAoaW50IF9fZXJyX251bSkgdGhyb3cgKCk7CgoKCgpz
dHJ1Y3QgaG9zdGVudAp7CiAgY2hhciAqaF9uYW1lOwogIGNoYXIgKipoX2FsaWFzZXM7CiAgaW50
IGhfYWRkcnR5cGU7CiAgaW50IGhfbGVuZ3RoOwogIGNoYXIgKipoX2FkZHJfbGlzdDsKCn07CgoK
CmV4dGVybiB2b2lkIHNldGhvc3RlbnQgKGludCBfX3N0YXlfb3BlbikgdGhyb3cgKCk7CgoKZXh0
ZXJuIHZvaWQgZW5kaG9zdGVudCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgaG9z
dGVudCAqZ2V0aG9zdGVudCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgaG9zdGVu
dCAqZ2V0aG9zdGJ5YWRkciAoX19jb25zdCB2b2lkICpfX2FkZHIsIF9fc29ja2xlbl90IF9fbGVu
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3R5cGUpIHRocm93
ICgpOwoKCmV4dGVybiBzdHJ1Y3QgaG9zdGVudCAqZ2V0aG9zdGJ5bmFtZSAoX19jb25zdCBjaGFy
ICpfX25hbWUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBzdHJ1Y3QgaG9zdGVudCAqZ2V0aG9zdGJ5
bmFtZTIgKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX19hZikgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiBpbnQgZ2V0aG9zdGVudF9yIChzdHJ1Y3QgaG9zdGVudCAqX19yZXN0cmljdCBfX3Jlc3Vs
dF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBz
aXplX3QgX19idWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAq
Kl9fcmVzdHJpY3QgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVz
dHJpY3QgX19oX2Vycm5vcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGdldGhvc3RieWFkZHJfciAo
X19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fYWRkciwgX19zb2NrbGVuX3QgX19sZW4sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX190eXBlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IGhvc3RlbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVu
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQgKipfX3Jlc3RyaWN0
IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9f
aF9lcnJub3ApIHRocm93ICgpOwoKZXh0ZXJuIGludCBnZXRob3N0YnluYW1lX3IgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3QgaG9zdGVudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19oX2Vycm5vcCkg
dGhyb3cgKCk7CgpleHRlcm4gaW50IGdldGhvc3RieW5hbWUyX3IgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25hbWUsIGludCBfX2FmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdCBob3N0ZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQgKipfX3Jlc3RyaWN0IF9fcmVz
dWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2hfZXJy
bm9wKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBzZXRuZXRlbnQgKGludCBfX3N0YXlfb3Bl
bikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZW5kbmV0ZW50ICh2b2lkKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIHN0cnVjdCBuZXRlbnQgKmdldG5ldGVudCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVy
biBzdHJ1Y3QgbmV0ZW50ICpnZXRuZXRieWFkZHIgKHVpbnQzMl90IF9fbmV0LCBpbnQgX190eXBl
KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBzdHJ1Y3QgbmV0ZW50ICpnZXRuZXRieW5hbWUgKF9f
Y29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZ2V0bmV0ZW50
X3IgKHN0cnVjdCBuZXRlbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAgICAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRlbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0LAog
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19oX2Vycm5vcCkgdGhyb3cg
KCk7CgpleHRlcm4gaW50IGdldG5ldGJ5YWRkcl9yICh1aW50MzJfdCBfX25ldCwgaW50IF9fdHlw
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldGVudCAqX19yZXN0cmljdCBf
X3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3Qg
X19idWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IG5ldGVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCAqX19yZXN0cmljdCBfX2hfZXJybm9wKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0bmV0
YnluYW1lX3IgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBuZXRlbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19i
dWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRlbnQgKipfX3Jlc3Ry
aWN0IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3Qg
X19oX2Vycm5vcCkgdGhyb3cgKCk7CgoKCgpzdHJ1Y3Qgc2VydmVudAp7CiAgY2hhciAqc19uYW1l
OwogIGNoYXIgKipzX2FsaWFzZXM7CiAgaW50IHNfcG9ydDsKICBjaGFyICpzX3Byb3RvOwp9OwoK
CgpleHRlcm4gdm9pZCBzZXRzZXJ2ZW50IChpbnQgX19zdGF5X29wZW4pIHRocm93ICgpOwoKCmV4
dGVybiB2b2lkIGVuZHNlcnZlbnQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IHNl
cnZlbnQgKmdldHNlcnZlbnQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IHNlcnZl
bnQgKmdldHNlcnZieW5hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19wcm90bykgdGhyb3cgKCk7CgoK
CmV4dGVybiBzdHJ1Y3Qgc2VydmVudCAqZ2V0c2VydmJ5cG9ydCAoaW50IF9fcG9ydCwgX19jb25z
dCBjaGFyICpfX3Byb3RvKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZ2V0c2VydmVu
dF9yIChzdHJ1Y3Qgc2VydmVudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VydmVudCAqKl9fcmVzdHJpY3QgX19yZXN1
bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBnZXRzZXJ2YnluYW1lX3IgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19wcm90bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBzZXJ2ZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZXJ2ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCkg
dGhyb3cgKCk7CgpleHRlcm4gaW50IGdldHNlcnZieXBvcnRfciAoaW50IF9fcG9ydCwgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fcHJvdG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3Qgc2VydmVudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VydmVudCAqKl9fcmVzdHJpY3QgX19yZXN1
bHQpIHRocm93ICgpOwoKCgoKc3RydWN0IHByb3RvZW50CnsKICBjaGFyICpwX25hbWU7CiAgY2hh
ciAqKnBfYWxpYXNlczsKICBpbnQgcF9wcm90bzsKfTsKCgoKZXh0ZXJuIHZvaWQgc2V0cHJvdG9l
bnQgKGludCBfX3N0YXlfb3BlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZW5kcHJvdG9lbnQg
KHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IHByb3RvZW50ICpnZXRwcm90b2VudCAo
dm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHN0cnVjdCBwcm90b2VudCAqZ2V0cHJvdG9ieW5hbWUg
KF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgpleHRlcm4gc3RydWN0IHByb3RvZW50
ICpnZXRwcm90b2J5bnVtYmVyIChpbnQgX19wcm90bykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGlu
dCBnZXRwcm90b2VudF9yIChzdHJ1Y3QgcHJvdG9lbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVm
LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVf
dCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHJvdG9lbnQgKipf
X3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0cHJvdG9ieW5hbWVf
ciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgcHJvdG9lbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2J1
ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHJvdG9lbnQgKipfX3Jl
c3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZ2V0cHJvdG9ieW51bWJlcl9y
IChpbnQgX19wcm90bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwcm90
b2VudCAqX19yZXN0cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHJvdG9lbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0bmV0Z3JlbnQgKF9fY29uc3QgY2hhciAqX19u
ZXRncm91cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZW5kbmV0Z3JlbnQgKHZvaWQpIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IGdldG5ldGdyZW50IChjaGFyICoqX19yZXN0cmljdCBfX2hvc3Rw
LAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3VzZXJwLAogICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2RvbWFpbnApIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IGlubmV0Z3IgKF9fY29uc3QgY2hhciAqX19uZXRncm91cCwgX19jb25z
dCBjaGFyICpfX2hvc3QsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3VzZXIs
IF9fY29uc3QgY2hhciAqZG9tYWluKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldG5ldGdyZW50
X3IgKGNoYXIgKipfX3Jlc3RyaWN0IF9faG9zdHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqKl9fcmVzdHJpY3QgX191c2VycCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
ICoqX19yZXN0cmljdCBfX2RvbWFpbnAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq
X19yZXN0cmljdCBfX2J1ZmZlciwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKIyAzMzQgIi91
c3IvaW5jbHVkZS9uZXRkYi5oIiAzCmV4dGVybiBpbnQgcmNtZCAoY2hhciAqKl9fcmVzdHJpY3Qg
X19haG9zdCwgdW5zaWduZWQgc2hvcnQgaW50IF9fcnBvcnQsCiAgICAgICAgICAgICAgICAgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbG9jdXNlciwKICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19yZW11c2VyLAogICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX2NtZCwgaW50ICpfX3Jlc3RyaWN0IF9fZmQycCkKICAgICB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCByY21kX2FmIChjaGFyICoqX19yZXN0cmljdCBfX2Fob3N0LCB1bnNp
Z25lZCBzaG9ydCBpbnQgX19ycG9ydCwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19sb2N1c2VyLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3JlbXVzZXIsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fY21kLCBpbnQgKl9fcmVzdHJpY3QgX19mZDJwLAogICAgICAgICAgICAgICAg
ICAgIHNhX2ZhbWlseV90IF9fYWYpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHJleGVjIChj
aGFyICoqX19yZXN0cmljdCBfX2Fob3N0LCBpbnQgX19ycG9ydCwKICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fcGFzcywKICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fY21kLCBpbnQgKl9fcmVzdHJpY3QgX19mZDJwKQogICAgIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IHJleGVjX2FmIChjaGFyICoqX19yZXN0cmljdCBfX2Fob3N0LCBpbnQg
X19ycG9ydCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bmFtZSwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcGFz
cywKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fY21kLCBp
bnQgKl9fcmVzdHJpY3QgX19mZDJwLAogICAgICAgICAgICAgICAgICAgICBzYV9mYW1pbHlfdCBf
X2FmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcnVzZXJvayAoX19jb25zdCBjaGFyICpfX3Jo
b3N0LCBpbnQgX19zdXNlciwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVt
dXNlciwgX19jb25zdCBjaGFyICpfX2xvY3VzZXIpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHJ1
c2Vyb2tfYWYgKF9fY29uc3QgY2hhciAqX19yaG9zdCwgaW50IF9fc3VzZXIsCiAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3JlbXVzZXIsIF9fY29uc3QgY2hhciAqX19sb2N1
c2VyLAogICAgICAgICAgICAgICAgICAgICAgIHNhX2ZhbWlseV90IF9fYWYpIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGludCBycmVzdnBvcnQgKGludCAqX19hbHBvcnQpIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IHJyZXN2cG9ydF9hZiAoaW50ICpfX2FscG9ydCwgc2FfZmFtaWx5X3QgX19hZikgdGhy
b3cgKCk7CgoKCgoKCnN0cnVjdCBhZGRyaW5mbwp7CiAgaW50IGFpX2ZsYWdzOwogIGludCBhaV9m
YW1pbHk7CiAgaW50IGFpX3NvY2t0eXBlOwogIGludCBhaV9wcm90b2NvbDsKICBzb2NrbGVuX3Qg
YWlfYWRkcmxlbjsKICBzdHJ1Y3Qgc29ja2FkZHIgKmFpX2FkZHI7CiAgY2hhciAqYWlfY2Fub25u
YW1lOwogIHN0cnVjdCBhZGRyaW5mbyAqYWlfbmV4dDsKfTsKCgoKc3RydWN0IGdhaWNiCnsKICBj
b25zdCBjaGFyICphcl9uYW1lOwogIGNvbnN0IGNoYXIgKmFyX3NlcnZpY2U7CiAgY29uc3Qgc3Ry
dWN0IGFkZHJpbmZvICphcl9yZXF1ZXN0OwogIHN0cnVjdCBhZGRyaW5mbyAqYXJfcmVzdWx0OwoK
ICBpbnQgX19yZXR1cm47CiAgaW50IF9fdW51c2VkWzVdOwp9OwojIDQ1OSAiL3Vzci9pbmNsdWRl
L25ldGRiLmgiIDMKZXh0ZXJuIGludCBnZXRhZGRyaW5mbyAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fc2VydmljZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgYWRk
cmluZm8gKl9fcmVzdHJpY3QgX19yZXEsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBh
ZGRyaW5mbyAqKl9fcmVzdHJpY3QgX19wYWkpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGZyZWVh
ZGRyaW5mbyAoc3RydWN0IGFkZHJpbmZvICpfX2FpKSB0aHJvdyAoKTsKCgpleHRlcm4gX19jb25z
dCBjaGFyICpnYWlfc3RyZXJyb3IgKGludCBfX2Vjb2RlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IGdldG5hbWVpbmZvIChfX2NvbnN0IHN0cnVjdCBzb2NrYWRkciAqX19yZXN0cmljdCBfX3NhLAog
ICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgX19zYWxlbiwgY2hhciAqX19yZXN0cmlj
dCBfX2hvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCBfX2hvc3RsZW4sIGNo
YXIgKl9fcmVzdHJpY3QgX19zZXJ2LAogICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3Qg
X19zZXJ2bGVuLCB1bnNpZ25lZCBpbnQgX19mbGFncykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGlu
dCBnZXRhZGRyaW5mb19hIChpbnQgX19tb2RlLCBzdHJ1Y3QgZ2FpY2IgKl9fbGlzdFtdLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2VudCwgc3RydWN0IHNpZ2V2ZW50ICpfX3Jlc3Ry
aWN0IF9fc2lnKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBnYWlfc3VzcGVuZCAoX19j
b25zdCBzdHJ1Y3QgZ2FpY2IgKl9fY29uc3QgX19saXN0W10sIGludCBfX2VudCwKICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fdGltZW91dCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBnYWlfZXJyb3IgKHN0cnVjdCBnYWljYiAqX19yZXEpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgZ2FpX2NhbmNlbCAoc3RydWN0IGdhaWNiICpfX2dhaWNicCkgdGhyb3cg
KCk7CgoKCn0KIyA4NCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpbmV0LmgiIDIKIyA0OSAiL3Zhci90bXAvcG9ydGFnZS9t
b3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIiAyCgpl
eHRlcm4gIkMiIHsKCgp0eXBlZGVmIHN0cnVjdCBQUkRpciBQUkRpcjsKdHlwZWRlZiBzdHJ1Y3Qg
UFJEaXJFbnRyeSBQUkRpckVudHJ5OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgUFJGaWxlRGVzYyBQUkZp
bGVEZXNjOwp0eXBlZGVmIHN0cnVjdCBQUkZpbGVJbmZvIFBSRmlsZUluZm87CnR5cGVkZWYgc3Ry
dWN0IFBSRmlsZUluZm82NCBQUkZpbGVJbmZvNjQ7CnR5cGVkZWYgdW5pb24gUFJOZXRBZGRyIFBS
TmV0QWRkcjsKdHlwZWRlZiBzdHJ1Y3QgUFJJT01ldGhvZHMgUFJJT01ldGhvZHM7CnR5cGVkZWYg
c3RydWN0IFBSUG9sbERlc2MgUFJQb2xsRGVzYzsKdHlwZWRlZiBzdHJ1Y3QgUFJGaWxlUHJpdmF0
ZSBQUkZpbGVQcml2YXRlOwp0eXBlZGVmIHN0cnVjdCBQUlNlbmRGaWxlRGF0YSBQUlNlbmRGaWxl
RGF0YTsKIyA3OSAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEv
ZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgp0eXBlZGVmIFBSSW50biBQUkRlc2NJZGVudGl0eTsK
CnN0cnVjdCBQUkZpbGVEZXNjIHsKICAgIGNvbnN0IFBSSU9NZXRob2RzICptZXRob2RzOwogICAg
UFJGaWxlUHJpdmF0ZSAqc2VjcmV0OwogICAgUFJGaWxlRGVzYyAqbG93ZXIsICpoaWdoZXI7CiAg
ICB2b2lkICggKmR0b3IpKFBSRmlsZURlc2MgKmZkKTsKCiAgICBQUkRlc2NJZGVudGl0eSBpZGVu
dGl0eTsKfTsKIyA5OSAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgp0eXBlZGVmIGVudW0gUFJUcmFuc21pdEZpbGVG
bGFncyB7CiAgICBQUl9UUkFOU01JVEZJTEVfS0VFUF9PUEVOID0gMCwKCiAgICBQUl9UUkFOU01J
VEZJTEVfQ0xPU0VfU09DS0VUID0gMQoKfSBQUlRyYW5zbWl0RmlsZUZsYWdzOwojIDE1MiAiL3Zh
ci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25z
cHIvcHJpby5oIgpzdHJ1Y3QgUFJJUHY2QWRkciB7CiAgICAgICAgdW5pb24gewogICAgICAgICAg
ICAgICAgUFJVaW50OCBfUzZfdThbMTZdOwogICAgICAgICAgICAgICAgUFJVaW50MTYgX1M2X3Ux
Nls4XTsKICAgICAgICAgICAgICAgIFBSVWludDMyIF9TNl91MzJbNF07CiAgICAgICAgICAgICAg
ICBQUlVpbnQ2NCBfUzZfdTY0WzJdOwogICAgICAgIH0gX1M2X3VuOwp9OwoKCgoKCnR5cGVkZWYg
c3RydWN0IFBSSVB2NkFkZHIgUFJJUHY2QWRkcjsKCnVuaW9uIFBSTmV0QWRkciB7CiAgICBzdHJ1
Y3QgewogICAgICAgIFBSVWludDE2IGZhbWlseTsKCgoKICAgICAgICBjaGFyIGRhdGFbMTRdOwoK
ICAgIH0gcmF3OwogICAgc3RydWN0IHsKICAgICAgICBQUlVpbnQxNiBmYW1pbHk7CiAgICAgICAg
UFJVaW50MTYgcG9ydDsKICAgICAgICBQUlVpbnQzMiBpcDsKCgoKICAgICAgICBjaGFyIHBhZFs4
XTsKCiAgICB9IGluZXQ7CiAgICBzdHJ1Y3QgewogICAgICAgIFBSVWludDE2IGZhbWlseTsKICAg
ICAgICBQUlVpbnQxNiBwb3J0OwogICAgICAgIFBSVWludDMyIGZsb3dpbmZvOwogICAgICAgIFBS
SVB2NkFkZHIgaXA7CiAgICAgICAgUFJVaW50MzIgc2NvcGVfaWQ7CiAgICB9IGlwdjY7CgogICAg
c3RydWN0IHsKICAgICAgICBQUlVpbnQxNiBmYW1pbHk7CiAgICAgICAgY2hhciBwYXRoWzEwNF07
CiAgICB9IGxvY2FsOwoKfTsKIyAyMTAgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEv
d29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKdHlwZWRlZiBlbnVtIFBSU29j
a09wdGlvbgp7CiAgICBQUl9Tb2NrT3B0X05vbmJsb2NraW5nLAogICAgUFJfU29ja09wdF9MaW5n
ZXIsCiAgICBQUl9Tb2NrT3B0X1JldXNlYWRkciwKICAgIFBSX1NvY2tPcHRfS2VlcGFsaXZlLAog
ICAgUFJfU29ja09wdF9SZWN2QnVmZmVyU2l6ZSwKICAgIFBSX1NvY2tPcHRfU2VuZEJ1ZmZlclNp
emUsCgogICAgUFJfU29ja09wdF9JcFRpbWVUb0xpdmUsCiAgICBQUl9Tb2NrT3B0X0lwVHlwZU9m
U2VydmljZSwKCiAgICBQUl9Tb2NrT3B0X0FkZE1lbWJlciwKICAgIFBSX1NvY2tPcHRfRHJvcE1l
bWJlciwKICAgIFBSX1NvY2tPcHRfTWNhc3RJbnRlcmZhY2UsCiAgICBQUl9Tb2NrT3B0X01jYXN0
VGltZVRvTGl2ZSwKICAgIFBSX1NvY2tPcHRfTWNhc3RMb29wYmFjaywKCiAgICBQUl9Tb2NrT3B0
X05vRGVsYXksCiAgICBQUl9Tb2NrT3B0X01heFNlZ21lbnQsCiAgICBQUl9Tb2NrT3B0X0Jyb2Fk
Y2FzdCwKICAgIFBSX1NvY2tPcHRfTGFzdAp9IFBSU29ja09wdGlvbjsKCnR5cGVkZWYgc3RydWN0
IFBSTGluZ2VyIHsKICAgICAgICBQUkJvb2wgcG9sYXJpdHk7CiAgICAgICAgUFJJbnRlcnZhbFRp
bWUgbGluZ2VyOwp9IFBSTGluZ2VyOwoKdHlwZWRlZiBzdHJ1Y3QgUFJNY2FzdFJlcXVlc3Qgewog
ICAgICAgIFBSTmV0QWRkciBtY2FkZHI7CiAgICAgICAgUFJOZXRBZGRyIGlmYWRkcjsKfSBQUk1j
YXN0UmVxdWVzdDsKCnR5cGVkZWYgc3RydWN0IFBSU29ja2V0T3B0aW9uRGF0YQp7CiAgICBQUlNv
Y2tPcHRpb24gb3B0aW9uOwogICAgdW5pb24KICAgIHsKICAgICAgICBQUlVpbnRuIGlwX3R0bDsK
ICAgICAgICBQUlVpbnRuIG1jYXN0X3R0bDsKICAgICAgICBQUlVpbnRuIHRvczsKICAgICAgICBQ
UkJvb2wgbm9uX2Jsb2NraW5nOwogICAgICAgIFBSQm9vbCByZXVzZV9hZGRyOwogICAgICAgIFBS
Qm9vbCBrZWVwX2FsaXZlOwogICAgICAgIFBSQm9vbCBtY2FzdF9sb29wYmFjazsKICAgICAgICBQ
UkJvb2wgbm9fZGVsYXk7CiAgICAgICAgUFJCb29sIGJyb2FkY2FzdDsKICAgICAgICBQUlNpemUg
bWF4X3NlZ21lbnQ7CiAgICAgICAgUFJTaXplIHJlY3ZfYnVmZmVyX3NpemU7CiAgICAgICAgUFJT
aXplIHNlbmRfYnVmZmVyX3NpemU7CiAgICAgICAgUFJMaW5nZXIgbGluZ2VyOwogICAgICAgIFBS
TWNhc3RSZXF1ZXN0IGFkZF9tZW1iZXI7CiAgICAgICAgUFJNY2FzdFJlcXVlc3QgZHJvcF9tZW1i
ZXI7CiAgICAgICAgUFJOZXRBZGRyIG1jYXN0X2lmOwogICAgfSB2YWx1ZTsKfSBQUlNvY2tldE9w
dGlvbkRhdGE7CiMgMjc2ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96
aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCnR5cGVkZWYgc3RydWN0IFBSSU9WZWMgewog
ICAgY2hhciAqaW92X2Jhc2U7CiAgICBpbnQgaW92X2xlbjsKfSBQUklPVmVjOwoKCgoKCgp0eXBl
ZGVmIGVudW0gUFJEZXNjVHlwZQp7CiAgICBQUl9ERVNDX0ZJTEUgPSAxLAogICAgUFJfREVTQ19T
T0NLRVRfVENQID0gMiwKICAgIFBSX0RFU0NfU09DS0VUX1VEUCA9IDMsCiAgICBQUl9ERVNDX0xB
WUVSRUQgPSA0LAogICAgUFJfREVTQ19QSVBFID0gNQp9IFBSRGVzY1R5cGU7Cgp0eXBlZGVmIGVu
dW0gUFJTZWVrV2hlbmNlIHsKICAgIFBSX1NFRUtfU0VUID0gMCwKICAgIFBSX1NFRUtfQ1VSID0g
MSwKICAgIFBSX1NFRUtfRU5EID0gMgp9IFBSU2Vla1doZW5jZTsKCmV4dGVybiBQUkRlc2NUeXBl
IFBSX0dldERlc2NUeXBlKFBSRmlsZURlc2MgKmZpbGUpOwojIDMxOSAiL3Zhci90bXAvcG9ydGFn
ZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgp0
eXBlZGVmIFBSU3RhdHVzICggKlBSQ2xvc2VGTikoUFJGaWxlRGVzYyAqZmQpOwp0eXBlZGVmIFBS
SW50MzIgKCAqUFJSZWFkRk4pKFBSRmlsZURlc2MgKmZkLCB2b2lkICpidWYsIFBSSW50MzIgYW1v
dW50KTsKdHlwZWRlZiBQUkludDMyICggKlBSV3JpdGVGTikoUFJGaWxlRGVzYyAqZmQsIGNvbnN0
IHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQpOwp0eXBlZGVmIFBSSW50MzIgKCAqUFJBdmFpbGFi
bGVGTikoUFJGaWxlRGVzYyAqZmQpOwp0eXBlZGVmIFBSSW50NjQgKCAqUFJBdmFpbGFibGU2NEZO
KShQUkZpbGVEZXNjICpmZCk7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJGc3luY0ZOKShQUkZpbGVE
ZXNjICpmZCk7CnR5cGVkZWYgUFJPZmZzZXQzMiAoICpQUlNlZWtGTikoUFJGaWxlRGVzYyAqZmQs
IFBST2Zmc2V0MzIgb2Zmc2V0LCBQUlNlZWtXaGVuY2UgaG93KTsKdHlwZWRlZiBQUk9mZnNldDY0
ICggKlBSU2VlazY0Rk4pKFBSRmlsZURlc2MgKmZkLCBQUk9mZnNldDY0IG9mZnNldCwgUFJTZWVr
V2hlbmNlIGhvdyk7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJGaWxlSW5mb0ZOKShQUkZpbGVEZXNj
ICpmZCwgUFJGaWxlSW5mbyAqaW5mbyk7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJGaWxlSW5mbzY0
Rk4pKFBSRmlsZURlc2MgKmZkLCBQUkZpbGVJbmZvNjQgKmluZm8pOwp0eXBlZGVmIFBSSW50MzIg
KCAqUFJXcml0ZXZGTikoCiAgICBQUkZpbGVEZXNjICpmZCwgY29uc3QgUFJJT1ZlYyAqaW92LCBQ
UkludDMyIGlvdl9zaXplLAogICAgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CnR5cGVkZWYgUFJT
dGF0dXMgKCAqUFJDb25uZWN0Rk4pKAogICAgUFJGaWxlRGVzYyAqZmQsIGNvbnN0IFBSTmV0QWRk
ciAqYWRkciwgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CnR5cGVkZWYgUFJGaWxlRGVzYyogKCAq
UFJBY2NlcHRGTikgKAogICAgUFJGaWxlRGVzYyAqZmQsIFBSTmV0QWRkciAqYWRkciwgUFJJbnRl
cnZhbFRpbWUgdGltZW91dCk7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJCaW5kRk4pKFBSRmlsZURl
c2MgKmZkLCBjb25zdCBQUk5ldEFkZHIgKmFkZHIpOwp0eXBlZGVmIFBSU3RhdHVzICggKlBSTGlz
dGVuRk4pKFBSRmlsZURlc2MgKmZkLCBQUkludG4gYmFja2xvZyk7CnR5cGVkZWYgUFJTdGF0dXMg
KCAqUFJTaHV0ZG93bkZOKShQUkZpbGVEZXNjICpmZCwgUFJJbnRuIGhvdyk7CnR5cGVkZWYgUFJJ
bnQzMiAoICpQUlJlY3ZGTikoCiAgICBQUkZpbGVEZXNjICpmZCwgdm9pZCAqYnVmLCBQUkludDMy
IGFtb3VudCwKICAgIFBSSW50biBmbGFncywgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CnR5cGVk
ZWYgUFJJbnQzMiAoICpQUlNlbmRGTikgKAogICAgUFJGaWxlRGVzYyAqZmQsIGNvbnN0IHZvaWQg
KmJ1ZiwgUFJJbnQzMiBhbW91bnQsCiAgICBQUkludG4gZmxhZ3MsIFBSSW50ZXJ2YWxUaW1lIHRp
bWVvdXQpOwp0eXBlZGVmIFBSSW50MzIgKCAqUFJSZWN2ZnJvbUZOKSgKICAgIFBSRmlsZURlc2Mg
KmZkLCB2b2lkICpidWYsIFBSSW50MzIgYW1vdW50LAogICAgUFJJbnRuIGZsYWdzLCBQUk5ldEFk
ZHIgKmFkZHIsIFBSSW50ZXJ2YWxUaW1lIHRpbWVvdXQpOwp0eXBlZGVmIFBSSW50MzIgKCAqUFJT
ZW5kdG9GTikoCiAgICBQUkZpbGVEZXNjICpmZCwgY29uc3Qgdm9pZCAqYnVmLCBQUkludDMyIGFt
b3VudCwKICAgIFBSSW50biBmbGFncywgY29uc3QgUFJOZXRBZGRyICphZGRyLCBQUkludGVydmFs
VGltZSB0aW1lb3V0KTsKdHlwZWRlZiBQUkludDE2ICggKlBSUG9sbEZOKSgKICAgIFBSRmlsZURl
c2MgKmZkLCBQUkludDE2IGluX2ZsYWdzLCBQUkludDE2ICpvdXRfZmxhZ3MpOwp0eXBlZGVmIFBS
SW50MzIgKCAqUFJBY2NlcHRyZWFkRk4pKAogICAgUFJGaWxlRGVzYyAqc2QsIFBSRmlsZURlc2Mg
KipuZCwgUFJOZXRBZGRyICoqcmFkZHIsCiAgICB2b2lkICpidWYsIFBSSW50MzIgYW1vdW50LCBQ
UkludGVydmFsVGltZSB0KTsKdHlwZWRlZiBQUkludDMyICggKlBSVHJhbnNtaXRmaWxlRk4pKAog
ICAgIFBSRmlsZURlc2MgKnNkLCBQUkZpbGVEZXNjICpmZCwgY29uc3Qgdm9pZCAqaGVhZGVycywK
ICAgICBQUkludDMyIGhsZW4sIFBSVHJhbnNtaXRGaWxlRmxhZ3MgZmxhZ3MsIFBSSW50ZXJ2YWxU
aW1lIHQpOwp0eXBlZGVmIFBSU3RhdHVzICggKlBSR2V0c29ja25hbWVGTikoUFJGaWxlRGVzYyAq
ZmQsIFBSTmV0QWRkciAqYWRkcik7CnR5cGVkZWYgUFJTdGF0dXMgKCAqUFJHZXRwZWVybmFtZUZO
KShQUkZpbGVEZXNjICpmZCwgUFJOZXRBZGRyICphZGRyKTsKdHlwZWRlZiBQUlN0YXR1cyAoICpQ
UkdldHNvY2tldG9wdGlvbkZOKSgKICAgIFBSRmlsZURlc2MgKmZkLCBQUlNvY2tldE9wdGlvbkRh
dGEgKmRhdGEpOwp0eXBlZGVmIFBSU3RhdHVzICggKlBSU2V0c29ja2V0b3B0aW9uRk4pKAogICAg
UFJGaWxlRGVzYyAqZmQsIGNvbnN0IFBSU29ja2V0T3B0aW9uRGF0YSAqZGF0YSk7CnR5cGVkZWYg
UFJJbnQzMiAoICpQUlNlbmRmaWxlRk4pKAogICAgICAgIFBSRmlsZURlc2MgKm5ldHdvcmtTb2Nr
ZXQsIFBSU2VuZEZpbGVEYXRhICpzZW5kRGF0YSwKICAgICAgICBQUlRyYW5zbWl0RmlsZUZsYWdz
IGZsYWdzLCBQUkludGVydmFsVGltZSB0aW1lb3V0KTsKdHlwZWRlZiBQUlN0YXR1cyAoICpQUkNv
bm5lY3Rjb250aW51ZUZOKSgKICAgIFBSRmlsZURlc2MgKmZkLCBQUkludDE2IG91dF9mbGFncyk7
CnR5cGVkZWYgUFJJbnRuICggKlBSUmVzZXJ2ZWRGTikoUFJGaWxlRGVzYyAqZmQpOwoKc3RydWN0
IFBSSU9NZXRob2RzIHsKICAgIFBSRGVzY1R5cGUgZmlsZV90eXBlOwogICAgUFJDbG9zZUZOIGNs
b3NlOwogICAgUFJSZWFkRk4gcmVhZDsKICAgIFBSV3JpdGVGTiB3cml0ZTsKICAgIFBSQXZhaWxh
YmxlRk4gYXZhaWxhYmxlOwogICAgUFJBdmFpbGFibGU2NEZOIGF2YWlsYWJsZTY0OwogICAgUFJG
c3luY0ZOIGZzeW5jOwogICAgUFJTZWVrRk4gc2VlazsKICAgIFBSU2VlazY0Rk4gc2VlazY0Owog
ICAgUFJGaWxlSW5mb0ZOIGZpbGVJbmZvOwogICAgUFJGaWxlSW5mbzY0Rk4gZmlsZUluZm82NDsK
ICAgIFBSV3JpdGV2Rk4gd3JpdGV2OwogICAgUFJDb25uZWN0Rk4gY29ubmVjdDsKICAgIFBSQWNj
ZXB0Rk4gYWNjZXB0OwogICAgUFJCaW5kRk4gYmluZDsKICAgIFBSTGlzdGVuRk4gbGlzdGVuOwog
ICAgUFJTaHV0ZG93bkZOIHNodXRkb3duOwogICAgUFJSZWN2Rk4gcmVjdjsKICAgIFBSU2VuZEZO
IHNlbmQ7CiAgICBQUlJlY3Zmcm9tRk4gcmVjdmZyb207CiAgICBQUlNlbmR0b0ZOIHNlbmR0bzsK
ICAgIFBSUG9sbEZOIHBvbGw7CiAgICBQUkFjY2VwdHJlYWRGTiBhY2NlcHRyZWFkOwogICAgUFJU
cmFuc21pdGZpbGVGTiB0cmFuc21pdGZpbGU7CiAgICBQUkdldHNvY2tuYW1lRk4gZ2V0c29ja25h
bWU7CiAgICBQUkdldHBlZXJuYW1lRk4gZ2V0cGVlcm5hbWU7CiAgICBQUlJlc2VydmVkRk4gcmVz
ZXJ2ZWRfZm5fNjsKICAgIFBSUmVzZXJ2ZWRGTiByZXNlcnZlZF9mbl81OwogICAgUFJHZXRzb2Nr
ZXRvcHRpb25GTiBnZXRzb2NrZXRvcHRpb247CgogICAgUFJTZXRzb2NrZXRvcHRpb25GTiBzZXRz
b2NrZXRvcHRpb247CgogICAgUFJTZW5kZmlsZUZOIHNlbmRmaWxlOwogICAgUFJDb25uZWN0Y29u
dGludWVGTiBjb25uZWN0Y29udGludWU7CgogICAgUFJSZXNlcnZlZEZOIHJlc2VydmVkX2ZuXzM7
CiAgICBQUlJlc2VydmVkRk4gcmVzZXJ2ZWRfZm5fMjsKICAgIFBSUmVzZXJ2ZWRGTiByZXNlcnZl
ZF9mbl8xOwogICAgUFJSZXNlcnZlZEZOIHJlc2VydmVkX2ZuXzA7Cn07CiMgNDMzICIvdmFyL3Rt
cC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9w
cmlvLmgiCnR5cGVkZWYgZW51bSBQUlNwZWNpYWxGRAp7CiAgICBQUl9TdGFuZGFyZElucHV0LAog
ICAgUFJfU3RhbmRhcmRPdXRwdXQsCiAgICBQUl9TdGFuZGFyZEVycm9yCn0gUFJTcGVjaWFsRkQ7
CgpleHRlcm4gUFJGaWxlRGVzYyogUFJfR2V0U3BlY2lhbEZEKFBSU3BlY2lhbEZEIGlkKTsKIyA0
ODAgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5j
bHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSRGVzY0lkZW50aXR5IFBSX0dldFVuaXF1ZUlkZW50
aXR5KGNvbnN0IGNoYXIgKmxheWVyX25hbWUpOwpleHRlcm4gY29uc3QgY2hhciogUFJfR2V0TmFt
ZUZvcklkZW50aXR5KFBSRGVzY0lkZW50aXR5IGlkZW50KTsKZXh0ZXJuIFBSRGVzY0lkZW50aXR5
IFBSX0dldExheWVyc0lkZW50aXR5KFBSRmlsZURlc2MqIGZkKTsKZXh0ZXJuIFBSRmlsZURlc2Mq
IFBSX0dldElkZW50aXRpZXNMYXllcihQUkZpbGVEZXNjKiBmZF9zdGFjaywgUFJEZXNjSWRlbnRp
dHkgaWQpOwojIDQ5MyAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemls
bGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gY29uc3QgUFJJT01ldGhvZHMgKiBQ
Ul9HZXREZWZhdWx0SU9NZXRob2RzKHZvaWQpOwojIDUwNCAiL3Zhci90bXAvcG9ydGFnZS9tb3pp
bGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4g
UFJGaWxlRGVzYyogUFJfQ3JlYXRlSU9MYXllclN0dWIoCiAgICBQUkRlc2NJZGVudGl0eSBpZGVu
dCwgY29uc3QgUFJJT01ldGhvZHMgKm1ldGhvZHMpOwojIDUyMSAiL3Zhci90bXAvcG9ydGFnZS9t
b3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRl
cm4gUFJGaWxlRGVzYyogUFJfQ3JlYXRlSU9MYXllcihQUkZpbGVEZXNjKiBmZCk7CiMgNTM3ICIv
dmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUv
bnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9QdXNoSU9MYXllcigKICAgIFBSRmlsZURl
c2MgKmZkX3N0YWNrLCBQUkRlc2NJZGVudGl0eSBpZCwgUFJGaWxlRGVzYyAqbGF5ZXIpOwojIDU1
NCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNs
dWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJGaWxlRGVzYyogUFJfUG9wSU9MYXllcihQUkZpbGVE
ZXNjICpmZF9zdGFjaywgUFJEZXNjSWRlbnRpdHkgaWQpOwojIDYyOCAiL3Zhci90bXAvcG9ydGFn
ZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpl
eHRlcm4gUFJGaWxlRGVzYyogUFJfT3Blbihjb25zdCBjaGFyICpuYW1lLCBQUkludG4gZmxhZ3Ms
IFBSSW50biBtb2RlKTsKIyA2NTQgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29y
ay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSRmlsZURlc2MqIFBS
X09wZW5GaWxlKAogICAgY29uc3QgY2hhciAqbmFtZSwgUFJJbnRuIGZsYWdzLCBQUkludG4gbW9k
ZSk7CiMgNjg1ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9k
aXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9DbG9zZShQUkZpbGVE
ZXNjICpmZCk7CiMgNzIwICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96
aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkludDMyIFBSX1JlYWQoUFJG
aWxlRGVzYyAqZmQsIHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQpOwojIDc0NCAiL3Zhci90bXAv
cG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJp
by5oIgpleHRlcm4gUFJJbnQzMiBQUl9Xcml0ZShQUkZpbGVEZXNjICpmZCxjb25zdCB2b2lkICpi
dWYsUFJJbnQzMiBhbW91bnQpOwojIDc3OCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1y
MS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJJbnQzMiBQ
Ul9Xcml0ZXYoCiAgICBQUkZpbGVEZXNjICpmZCwgY29uc3QgUFJJT1ZlYyAqaW92LCBQUkludDMy
IGlvdl9zaXplLAogICAgUFJJbnRlcnZhbFRpbWUgdGltZW91dCk7CiMgNzk5ICIvdmFyL3RtcC9w
b3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlv
LmgiCmV4dGVybiBQUlN0YXR1cyBQUl9EZWxldGUoY29uc3QgY2hhciAqbmFtZSk7CgoKCnR5cGVk
ZWYgZW51bSBQUkZpbGVUeXBlCnsKICAgIFBSX0ZJTEVfRklMRSA9IDEsCiAgICBQUl9GSUxFX0RJ
UkVDVE9SWSA9IDIsCiAgICBQUl9GSUxFX09USEVSID0gMwp9IFBSRmlsZVR5cGU7CgpzdHJ1Y3Qg
UFJGaWxlSW5mbyB7CiAgICBQUkZpbGVUeXBlIHR5cGU7CiAgICBQUk9mZnNldDMyIHNpemU7CiAg
ICBQUlRpbWUgY3JlYXRpb25UaW1lOwogICAgUFJUaW1lIG1vZGlmeVRpbWU7Cn07CgpzdHJ1Y3Qg
UFJGaWxlSW5mbzY0IHsKICAgIFBSRmlsZVR5cGUgdHlwZTsKICAgIFBST2Zmc2V0NjQgc2l6ZTsK
ICAgIFBSVGltZSBjcmVhdGlvblRpbWU7CiAgICBQUlRpbWUgbW9kaWZ5VGltZTsKfTsKIyA4NDIg
Ii92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVk
ZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0dldEZpbGVJbmZvKGNvbnN0IGNoYXIg
KmZuLCBQUkZpbGVJbmZvICppbmZvKTsKZXh0ZXJuIFBSU3RhdHVzIFBSX0dldEZpbGVJbmZvNjQo
Y29uc3QgY2hhciAqZm4sIFBSRmlsZUluZm82NCAqaW5mbyk7CiMgODY5ICIvdmFyL3RtcC9wb3J0
YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgi
CmV4dGVybiBQUlN0YXR1cyBQUl9HZXRPcGVuRmlsZUluZm8oUFJGaWxlRGVzYyAqZmQsIFBSRmls
ZUluZm8gKmluZm8pOwpleHRlcm4gUFJTdGF0dXMgUFJfR2V0T3BlbkZpbGVJbmZvNjQoUFJGaWxl
RGVzYyAqZmQsIFBSRmlsZUluZm82NCAqaW5mbyk7CiMgODg4ICIvdmFyL3RtcC9wb3J0YWdlL21v
emlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVy
biBQUlN0YXR1cyBQUl9SZW5hbWUoY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdG8pOwoj
IDkxNCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9p
bmNsdWRlL25zcHIvcHJpby5oIgp0eXBlZGVmIGVudW0gUFJBY2Nlc3NIb3cgewogICAgUFJfQUND
RVNTX0VYSVNUUyA9IDEsCiAgICBQUl9BQ0NFU1NfV1JJVEVfT0sgPSAyLAogICAgUFJfQUNDRVNT
X1JFQURfT0sgPSAzCn0gUFJBY2Nlc3NIb3c7CgpleHRlcm4gUFJTdGF0dXMgUFJfQWNjZXNzKGNv
bnN0IGNoYXIgKm5hbWUsIFBSQWNjZXNzSG93IGhvdyk7CiMgOTU1ICIvdmFyL3RtcC9wb3J0YWdl
L21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4
dGVybiBQUk9mZnNldDMyIFBSX1NlZWsoUFJGaWxlRGVzYyAqZmQsIFBST2Zmc2V0MzIgb2Zmc2V0
LCBQUlNlZWtXaGVuY2Ugd2hlbmNlKTsKZXh0ZXJuIFBST2Zmc2V0NjQgUFJfU2VlazY0KFBSRmls
ZURlc2MgKmZkLCBQUk9mZnNldDY0IG9mZnNldCwgUFJTZWVrV2hlbmNlIHdoZW5jZSk7CiMgOTc4
ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1
ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkludDMyIFBSX0F2YWlsYWJsZShQUkZpbGVEZXNjICpm
ZCk7CmV4dGVybiBQUkludDY0IFBSX0F2YWlsYWJsZTY0KFBSRmlsZURlc2MgKmZkKTsKIyA5OTgg
Ii92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVk
ZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX1N5bmMoUFJGaWxlRGVzYyAqZmQpOwoK
CgpzdHJ1Y3QgUFJEaXJFbnRyeSB7CiAgICBjb25zdCBjaGFyICpuYW1lOwp9OwojIDEwMzcgIi92
YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9u
c3ByL3ByaW8uaCIKZXh0ZXJuIFBSRGlyKiBQUl9PcGVuRGlyKGNvbnN0IGNoYXIgKm5hbWUpOwoj
IDEwNjkgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3Qv
aW5jbHVkZS9uc3ByL3ByaW8uaCIKdHlwZWRlZiBlbnVtIFBSRGlyRmxhZ3MgewogICAgUFJfU0tJ
UF9OT05FID0gMHgwLAogICAgUFJfU0tJUF9ET1QgPSAweDEsCiAgICBQUl9TS0lQX0RPVF9ET1Qg
PSAweDIsCiAgICBQUl9TS0lQX0JPVEggPSAweDMsCiAgICBQUl9TS0lQX0hJRERFTiA9IDB4NAp9
IFBSRGlyRmxhZ3M7CgpleHRlcm4gUFJEaXJFbnRyeSogUFJfUmVhZERpcihQUkRpciAqZGlyLCBQ
UkRpckZsYWdzIGZsYWdzKTsKIyAxMTAzICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIx
L3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQ
Ul9DbG9zZURpcihQUkRpciAqZGlyKTsKIyAxMTMyICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEt
MS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0
YXR1cyBQUl9Na0Rpcihjb25zdCBjaGFyICpuYW1lLCBQUkludG4gbW9kZSk7CiMgMTE0NCAiL3Zh
ci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25z
cHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfTWFrZURpcihjb25zdCBjaGFyICpuYW1lLCBQ
UkludG4gbW9kZSk7CiMgMTE2NCAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3Jr
L21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJTdGF0dXMgUFJfUm1E
aXIoY29uc3QgY2hhciAqbmFtZSk7CiMgMTE4MyAiL3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEu
My1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25zcHIvcHJpby5oIgpleHRlcm4gUFJGaWxl
RGVzYyogUFJfTmV3VURQU29ja2V0KHZvaWQpOwojIDEyMDIgIi92YXIvdG1wL3BvcnRhZ2UvbW96
aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJu
IFBSRmlsZURlc2MqIFBSX05ld1RDUFNvY2tldCh2b2lkKTsKIyAxMjIyICIvdmFyL3RtcC9wb3J0
YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgi
CmV4dGVybiBQUkZpbGVEZXNjKiBQUl9PcGVuVURQU29ja2V0KFBSSW50biBhZik7CiMgMTI0MiAi
L3Zhci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRl
L25zcHIvcHJpby5oIgpleHRlcm4gUFJGaWxlRGVzYyogUFJfT3BlblRDUFNvY2tldChQUkludG4g
YWYpOwojIDEyNjYgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxh
L2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0Nvbm5lY3QoCiAg
ICBQUkZpbGVEZXNjICpmZCwgY29uc3QgUFJOZXRBZGRyICphZGRyLCBQUkludGVydmFsVGltZSB0
aW1lb3V0KTsKIyAxMzAxICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96
aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9Db25uZWN0
Q29udGludWUoUFJGaWxlRGVzYyAqZmQsIFBSSW50MTYgb3V0X2ZsYWdzKTsKIyAxMzMxICIvdmFy
L3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNw
ci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9HZXRDb25uZWN0U3RhdHVzKGNvbnN0IFBSUG9s
bERlc2MgKnBkKTsKIyAxMzU1ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsv
bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkZpbGVEZXNjKiBQUl9B
Y2NlcHQoCiAgICBQUkZpbGVEZXNjICpmZCwgUFJOZXRBZGRyICphZGRyLCBQUkludGVydmFsVGlt
ZSB0aW1lb3V0KTsKIyAxMzc3ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsv
bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUlN0YXR1cyBQUl9CaW5k
KFBSRmlsZURlc2MgKmZkLCBjb25zdCBQUk5ldEFkZHIgKmFkZHIpOwojIDEzOTkgIi92YXIvdG1w
L3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3ppbGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3By
aW8uaCIKZXh0ZXJuIFBSU3RhdHVzIFBSX0xpc3RlbihQUkZpbGVEZXNjICpmZCwgUFJJbnRuIGJh
Y2tsb2cpOwojIDE0MjMgIi92YXIvdG1wL3BvcnRhZ2UvbW96aWxsYS0xLjMtcjEvd29yay9tb3pp
bGxhL2Rpc3QvaW5jbHVkZS9uc3ByL3ByaW8uaCIKdHlwZWRlZiBlbnVtIFBSU2h1dGRvd25Ib3cK
ewogICAgUFJfU0hVVERPV05fUkNWID0gMCwKICAgIFBSX1NIVVRET1dOX1NFTkQgPSAxLAogICAg
UFJfU0hVVERPV05fQk9USCA9IDIKfSBQUlNodXRkb3duSG93OwoKZXh0ZXJuIFBSU3RhdHVzIFBS
X1NodXRkb3duKFBSRmlsZURlc2MgKmZkLCBQUlNodXRkb3duSG93IGhvdyk7CiMgMTQ2MyAiL3Zh
ci90bXAvcG9ydGFnZS9tb3ppbGxhLTEuMy1yMS93b3JrL21vemlsbGEvZGlzdC9pbmNsdWRlL25z
cHIvcHJpby5oIgpleHRlcm4gUFJJbnQzMiBQUl9SZWN2KFBSRmlsZURlc2MgKmZkLCB2b2lkICpi
dWYsIFBSSW50MzIgYW1vdW50LAogICAgICAgICAgICAgICAgUFJJbnRuIGZsYWdzLCBQUkludGVy
dmFsVGltZSB0aW1lb3V0KTsKIyAxNDk0ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIx
L3dvcmsvbW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkludDMyIFBS
X1NlbmQoUFJGaWxlRGVzYyAqZmQsIGNvbnN0IHZvaWQgKmJ1ZiwgUFJJbnQzMiBhbW91bnQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJJbnRuIGZsYWdzLCBQUkludGVydmFsVGlt
ZSB0aW1lb3V0KTsKIyAxNTI5ICIvdmFyL3RtcC9wb3J0YWdlL21vemlsbGEtMS4zLXIxL3dvcmsv
bW96aWxsYS9kaXN0L2luY2x1ZGUvbnNwci9wcmlvLmgiCmV4dGVybiBQUkludDMyIFBSX1JlY3ZG