public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* other/10379: Compiling Openoffice I get "Internal compiler error in expand_call" on file monetary.cpp
@ 2003-04-11 16:16 alessandro.surace
  0 siblings, 0 replies; only message in thread
From: alessandro.surace @ 2003-04-11 16:16 UTC (permalink / raw)
  To: gcc-gnats


>Number:         10379
>Category:       other
>Synopsis:       Compiling Openoffice I get "Internal compiler error in expand_call" on file monetary.cpp
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Apr 11 16:16:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Alessandro Surace
>Release:        unknown-1.0
>Organization:
>Environment:
GCC Version
Reading specs from /usr/lib/gcc-lib/i486-suse-linux/3.2/specs
Configured with: ../configure --enable-threads=posix --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib --enable-languages=c,c++,f77,objc,java,ada --enable-libgcj --with-gxx-include-dir=/usr/include/g++ --with-slibdir=/lib --with-system-zlib --enable-shared --enable-__cxa_atexit i486-suse-linux
Thread model: posix
gcc version 3.2

System Type

Linux version 2.4.19 (root@linux) (gcc version 3.2) #2 Wed Dec 18 11:17:19 CET 2
002
BIOS-provided physical RAM map:
 BIOS-e820: 0000000000000000 - 000000000009fc00 (usable)
 BIOS-e820: 000000000009fc00 - 00000000000a0000 (reserved)
 BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
 BIOS-e820: 0000000000100000 - 000000000fff0000 (usable)
 BIOS-e820: 000000000fff0000 - 000000000fff8000 (ACPI data)
 BIOS-e820: 000000000fff8000 - 0000000010000000 (ACPI NVS)
 BIOS-e820: 00000000ffff0000 - 0000000100000000 (reserved)
0MB HIGHMEM available.
255MB LOWMEM available.
Advanced speculative caching feature not present
On node 0 totalpages: 65520
zone(0): 4096 pages.
zone(1): 61424 pages.
zone(2): 0 pages.
Kernel command line: auto BOOT_IMAGE=linux2.4.19 ro root=3a00
Local APIC disabled by BIOS -- reenabling.
Could not enable APIC!
Initializing CPU#0
Detected 845.640 MHz processor.
Console: colour dummy device 80x25
Calibrating delay loop... 1684.27 BogoMIPS
Memory: 255232k/262080k available (1447k kernel code, 6460k reserved, 323k data,
 128k init, 0k highmem)
>Description:
I was tring to build OpenOffice 1.1beta And after few minutes of compilation I Get the follow error:
g++ -D_REENTRANT -fexceptions -I../stlport -Wall -W -Wno-sign-compare -Wno-unuse
d -Wno-uninitialized -ftemplate-depth-32 -O2 -fPIC monetary.cpp -c -o ../lib/obj
/GCC/ReleaseD/monetary.o
../stlport/stl/_monetary.c: In member function `_InputIter 
   _STL::money_get<_CharT, _InputIter>::do_get(_InputIter, _InputIter, bool, 
   _STL::ios_base&, int&, _STL::basic_string<_CharT, _STL::char_traits<_CharT>, 
   _STL::allocator<_CharT> >&) const [with _CharT = wchar_t, _InputIter = 
   _STL::istreambuf_iterator<wchar_t, _STL::char_traits<wchar_t> >]':
monetary.cpp:137:   instantiated from here
../stlport/stl/_monetary.c:292: Internal compiler error in expand_call, at 
   calls.c:3049
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
make: *** [../lib/obj/GCC/ReleaseD/monetary.o] Error 1
dmake:  Error code 2, while making './unxlngi4.pro/misc/build/so_built_so_stlpor
t'
---* TG_SLO.MK *---

ERROR: Error 65280 occurred while making /home/depot/oo_1.1beta_src/stlport
dmake:  Error code 1, while making 'build_all'
---* TG_SLO.MK *---
>How-To-Repeat:
Just try to build OpenOffice 1.1beta
>Fix:

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

IyAxICJtb25ldGFyeS5jcHAiCiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZCBsaW5lPiIK
IyAxICJtb25ldGFyeS5jcHAiCiMgMTggIm1vbmV0YXJ5LmNwcCIKIyAxICJzdGxwb3J0X3ByZWZp
eC5oIiAxCiMgMjAgInN0bHBvcnRfcHJlZml4LmgiCiMgMSAiLi4vc3RscG9ydC9zdGwvX2NvbmZp
Zy5oIiAxCiMgNjIgIi4uL3N0bHBvcnQvc3RsL19jb25maWcuaCIKIyAxICIuLi9zdGxwb3J0L3N0
bF91c2VyX2NvbmZpZy5oIiAxCiMgNjMgIi4uL3N0bHBvcnQvc3RsL19jb25maWcuaCIgMgoKCgoK
IyAxICIuLi9zdGxwb3J0L3N0bC9fY29uZmlnX2NvbXBhdC5oIiAxCiMgNjggIi4uL3N0bHBvcnQv
c3RsL19jb25maWcuaCIgMgoKCgojIDEgIi4uL3N0bHBvcnQvc3RsL19zaXRlX2NvbmZpZy5oIiAx
CiMgNzIgIi4uL3N0bHBvcnQvc3RsL19jb25maWcuaCIgMgoKCiMgMSAiLi4vc3RscG9ydC9jb25m
aWcvc3RsY29tcC5oIiAxCiMgNTEgIi4uL3N0bHBvcnQvY29uZmlnL3N0bGNvbXAuaCIKIyAxICIu
Li9zdGxwb3J0L2NvbmZpZy9zdGxfZ2NjLmgiIDEKIyA1MiAiLi4vc3RscG9ydC9jb25maWcvc3Rs
Y29tcC5oIiAyCiMgNzUgIi4uL3N0bHBvcnQvc3RsL19jb25maWcuaCIgMgojIDgzICIuLi9zdGxw
b3J0L3N0bC9fY29uZmlnLmgiCiMgMSAiLi4vc3RscG9ydC9jb25maWcvc3RsX2NvbmZpeC5oIiAx
CiMgODQgIi4uL3N0bHBvcnQvc3RsL19jb25maWcuaCIgMgojIDQ4MiAiLi4vc3RscG9ydC9zdGwv
X2NvbmZpZy5oIgpuYW1lc3BhY2Ugc3RkIHsgfQpuYW1lc3BhY2UgX19zdGRfYWxpYXMgPSBzdGQ7
CiMgNTQzICIuLi9zdGxwb3J0L3N0bC9fY29uZmlnLmgiCm5hbWVzcGFjZSBfU1RMIHsgfQoKbmFt
ZXNwYWNlIHN0bHBvcnQgPSBfU1RMOwojIDIxICJzdGxwb3J0X3ByZWZpeC5oIiAyCgoKCgoKCgoj
IDEgIi4uL3N0bHBvcnQvY3RpbWUiIDEKIyAyMSAiLi4vc3RscG9ydC9jdGltZSIKIyAxICIuLi9z
dGxwb3J0L3N0bC9fcHJvbG9nLmgiIDEKIyAyMiAiLi4vc3RscG9ydC9jdGltZSIgMgoKCgojIDEg
Ii91c3IvaW5jbHVkZS9nKysvY3RpbWUiIDEKIyA0OCAiL3Vzci9pbmNsdWRlL2crKy9jdGltZSIg
MwoKIyAxICIuLi9zdGxwb3J0L2NzdGRkZWYiIDEgMwojIDM1ICIuLi9zdGxwb3J0L2NzdGRkZWYi
IDMKIyAxICIvdXNyL2luY2x1ZGUvZysrL2NzdGRkZWYiIDEgMwojIDQ3ICIvdXNyL2luY2x1ZGUv
ZysrL2NzdGRkZWYiIDMKCiMgMSAiLi4vc3RscG9ydC9zdGRkZWYuaCIgMSAzCiMgMjMgIi4uL3N0
bHBvcnQvc3RkZGVmLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8z
LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQ3ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3Vz
ZS1saW51eC8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIGludCBwdHJkaWZmX3Q7CiMg
MjAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8zLjIvaW5jbHVkZS9zdGRkZWYu
aCIgMwp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7CiMgMjQgIi4uL3N0bHBvcnQvc3RkZGVm
LmgiIDIgMwojIDQ5ICIvdXNyL2luY2x1ZGUvZysrL2NzdGRkZWYiIDIgMwoKbmFtZXNwYWNlIHN0
ZAp7CiAgdXNpbmcgOjpwdHJkaWZmX3Q7CiAgdXNpbmcgOjpzaXplX3Q7Cn0KIyAzNiAiLi4vc3Rs
cG9ydC9jc3RkZGVmIiAyIDMKCgoKCgpuYW1lc3BhY2UgX1NUTCB7CnVzaW5nIF9fc3RkX2FsaWFz
OjpwdHJkaWZmX3Q7CnVzaW5nIF9fc3RkX2FsaWFzOjpzaXplX3Q7Cn0KIyA1MCAiL3Vzci9pbmNs
dWRlL2crKy9jdGltZSIgMiAzCgojIDEgIi4uL3N0bHBvcnQvdGltZS5oIiAxIDMKIyAyMyAiLi4v
c3RscG9ydC90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyAyOCAiL3Vz
ci9pbmNsdWRlL3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAy
ODMgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVm
cy5oIiAxIDMKIyAyODQgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAzMTIgIi91c3Iv
aW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMK
IyAzMTMgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3Rp
bWUuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgoKCiMgMSAiLi4vc3RscG9ydC9zdGRkZWYuaCIg
MSAzCiMgMjMgIi4uL3N0bHBvcnQvc3RkZGVmLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0
ODYtc3VzZS1saW51eC8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjQgIi4uL3N0bHBvcnQv
c3RkZGVmLmgiIDIgMwojIDM5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgoKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMK
IyA1NiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz
LmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCiMgMSAiLi4vc3RscG9y
dC9zdGRkZWYuaCIgMSAzCiMgMjMgIi4uL3N0bHBvcnQvc3RkZGVmLmgiIDMKIyAxICIvdXNyL2xp
Yi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjQg
Ii4uL3N0bHBvcnQvc3RkZGVmLmgiIDIgMwojIDMwICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5o
IiAyIDMKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQg
c2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VfaW50Owp0eXBlZGVmIHVu
c2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9u
ZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGlu
dCBfX3F1YWRfdDsKIyA0OSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVmIHNp
Z25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBl
ZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGlu
dCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2ln
bmVkIGludCBfX3VpbnQzMl90OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxv
bmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgX191aW50NjRfdDsKCnR5cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVkZWYg
X191X3F1YWRfdCBfX2Rldl90Owp0eXBlZGVmIF9fdV9pbnQgX191aWRfdDsKdHlwZWRlZiBfX3Vf
aW50IF9fZ2lkX3Q7CnR5cGVkZWYgX191X2xvbmcgX19pbm9fdDsKdHlwZWRlZiBfX3VfaW50IF9f
bW9kZV90Owp0eXBlZGVmIF9fdV9pbnQgX19ubGlua190Owp0eXBlZGVmIGxvbmcgaW50IF9fb2Zm
X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVk
ZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX3JsaW1fdDsKdHlwZWRlZiBfX3Vf
cXVhZF90IF9fcmxpbTY0X3Q7CnR5cGVkZWYgX191X2ludCBfX2lkX3Q7Cgp0eXBlZGVmIHN0cnVj
dAogIHsKICAgIGludCBfX3ZhbFsyXTsKICB9IF9fZnNpZF90OwoKCnR5cGVkZWYgaW50IF9fZGFk
ZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX190aW1lX3Q7
CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N1
c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3dibGtfdDsKCnR5cGVkZWYgbG9uZyBpbnQg
X19jbG9ja190OwoKCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90OwoKCnR5cGVkZWYgaW50IF9fdGlt
ZXJfdDsKCgoKCgoKdHlwZWRlZiBpbnQgX19rZXlfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0
IGludCBfX2lwY19waWRfdDsKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa3NpemVfdDsKCgoKCnR5
cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Jsa2NudDY0X3Q7
CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzYmxrY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2Zz
YmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3Vf
cXVhZF90IF9fZnNmaWxjbnQ2NF90OwoKCnR5cGVkZWYgX191X3F1YWRfdCBfX2lubzY0X3Q7CgoK
dHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7CgoKdHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFy
X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX190X3VzY2FsYXJfdDsKCgp0eXBlZGVmIGlu
dCBfX2ludHB0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IF9fc29ja2xlbl90OwoKCgoKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVk
ZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIg
MSAzCiMgNjggIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMKc3RydWN0IF9fc2NoZWRfcGFy
YW0KICB7CiAgICBpbnQgX19zY2hlZF9wcmlvcml0eTsKICB9OwojIDI0ICIvdXNyL2luY2x1ZGUv
Yml0cy9wdGhyZWFkdHlwZXMuaCIgMiAzCgoKc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBs
b25nIGludCBfX3N0YXR1czsKICBpbnQgX19zcGlubG9jazsKCn07CgoKCnR5cGVkZWYgc3RydWN0
IF9wdGhyZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgoKCgoKdHlwZWRlZiBzdHJ1
Y3QgX19wdGhyZWFkX2F0dHJfcwp7CiAgaW50IF9fZGV0YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRw
b2xpY3k7CiAgc3RydWN0IF9fc2NoZWRfcGFyYW0gX19zY2hlZHBhcmFtOwogIGludCBfX2luaGVy
aXRzY2hlZDsKICBpbnQgX19zY29wZTsKICBzaXplX3QgX19ndWFyZHNpemU7CiAgaW50IF9fc3Rh
Y2thZGRyX3NldDsKICB2b2lkICpfX3N0YWNrYWRkcjsKICBzaXplX3QgX19zdGFja3NpemU7Cn0g
cHRocmVhZF9hdHRyX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFz
dGxvY2sgX19jX2xvY2s7CiAgX3B0aHJlYWRfZGVzY3IgX19jX3dhaXRpbmc7Cn0gcHRocmVhZF9j
b25kX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRh
dHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVm
IHN0cnVjdAp7CiAgaW50IF9fbV9yZXNlcnZlZDsKICBpbnQgX19tX2NvdW50OwogIF9wdGhyZWFk
X2Rlc2NyIF9fbV9vd25lcjsKICBpbnQgX19tX2tpbmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rs
b2NrIF9fbV9sb2NrOwp9IHB0aHJlYWRfbXV0ZXhfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGlu
dCBfX211dGV4a2luZDsKfSBwdGhyZWFkX211dGV4YXR0cl90OwoKCgp0eXBlZGVmIGludCBwdGhy
ZWFkX29uY2VfdDsKCgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX3J3bG9ja190CnsKICBzdHJ1
Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19yd19sb2NrOwogIGludCBfX3J3X3JlYWRlcnM7CiAgX3B0
aHJlYWRfZGVzY3IgX19yd193cml0ZXI7CiAgX3B0aHJlYWRfZGVzY3IgX19yd19yZWFkX3dhaXRp
bmc7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0ZV93YWl0aW5nOwogIGludCBfX3J3X2tpbmQ7
CiAgaW50IF9fcndfcHNoYXJlZDsKfSBwdGhyZWFkX3J3bG9ja190OwoKCgp0eXBlZGVmIHN0cnVj
dAp7CiAgaW50IF9fbG9ja2tpbmQ7CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX3J3bG9ja2F0
dHJfdDsKCgoKCnR5cGVkZWYgdm9sYXRpbGUgaW50IHB0aHJlYWRfc3BpbmxvY2tfdDsKCgp0eXBl
ZGVmIHN0cnVjdCB7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fYmFfbG9jazsKICBpbnQg
X19iYV9yZXF1aXJlZDsKICBpbnQgX19iYV9wcmVzZW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fYmFf
d2FpdGluZzsKfSBwdGhyZWFkX2JhcnJpZXJfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgaW50IF9f
cHNoYXJlZDsKfSBwdGhyZWFkX2JhcnJpZXJhdHRyX3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBs
b25nIGludCBwdGhyZWFkX3Q7CiMgMTQ0ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMK
IyA1NyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBfX2Nsb2NrX3QgY2xvY2tf
dDsKIyA3MCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fdGltZV90IHRpbWVfdDsK
IyA4MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fY2xvY2tpZF90IGNsb2NraWRf
dDsKIyA5NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fdGltZXJfdCB0aW1lcl90
OwojIDEwNiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBf
X3RpbWVfdCB0dl9zZWM7CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07CgoKCgoKCgpzdHJ1Y3Qg
dG0KewogIGludCB0bV9zZWM7CiAgaW50IHRtX21pbjsKICBpbnQgdG1faG91cjsKICBpbnQgdG1f
bWRheTsKICBpbnQgdG1fbW9uOwogIGludCB0bV95ZWFyOwogIGludCB0bV93ZGF5OwogIGludCB0
bV95ZGF5OwogIGludCB0bV9pc2RzdDsKCgogIGxvbmcgaW50IHRtX2dtdG9mZjsKICBfX2NvbnN0
IGNoYXIgKnRtX3pvbmU7CgoKCgp9OwoKCgoKc3RydWN0IGl0aW1lcnNwZWMKICB7CiAgICBzdHJ1
Y3QgdGltZXNwZWMgaXRfaW50ZXJ2YWw7CiAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfdmFsdWU7CiAg
fTsKCgpzdHJ1Y3Qgc2lnZXZlbnQ7CgoKCgoKdHlwZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKCgoK
ZXh0ZXJuIGNsb2NrX3QgY2xvY2sgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB0aW1lX3QgdGlt
ZSAodGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGRpZmZ0aW1lICh0
aW1lX3QgX190aW1lMSwgdGltZV90IF9fdGltZTApCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiB0aW1lX3QgbWt0aW1lIChzdHJ1Y3QgdG0gKl9fdHAp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RyZnRpbWUgKGNoYXIgKl9fcmVzdHJpY3Qg
X19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
c3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0
cnB0aW1lIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgc3RydWN0IHRtICpfX3RwKQogICAg
IHRocm93ICgpOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZSAoX19jb25zdCB0aW1lX3Qg
Kl9fdGltZXIpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWUgKF9fY29u
c3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGlt
ZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKCgpleHRl
cm4gc3RydWN0IHRtICpsb2NhbHRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190
aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmlj
dCBfX3RwKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICphc2N0aW1lIChfX2NvbnN0IHN0cnVj
dCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKmN0aW1lIChfX2NvbnN0IHRpbWVf
dCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICphc2N0aW1lX3IgKF9fY29u
c3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHAsCiAgICAgICAgICAgICAgICAgICAgICAgIGNo
YXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpjdGltZV9yIChf
X2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqX190em5h
bWVbMl07CmV4dGVybiBpbnQgX19kYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50IF9fdGltZXpvbmU7
CgoKCgpleHRlcm4gY2hhciAqdHpuYW1lWzJdOwoKCgpleHRlcm4gdm9pZCB0enNldCAodm9pZCkg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCB0aW1lem9u
ZTsKCgoKCgpleHRlcm4gaW50IHN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX193aGVuKSB0aHJvdyAo
KTsKIyAyNzEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIHRpbWVfdCB0aW1lZ20gKHN0
cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lbG9jYWwgKHN0cnVj
dCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBkeXNpemUgKGludCBfX3llYXIpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IG5hbm9z
bGVlcCAoX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVkX3RpbWUsCiAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGludCBjbG9ja19nZXRyZXMgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGlt
ZXNwZWMgKl9fcmVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX2dldHRpbWUgKGNsb2Nr
aWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdHApIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgY2xvY2tfc2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIF9fY29uc3Qgc3RydWN0
IHRpbWVzcGVjICpfX3RwKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGNsb2NrX25hbm9z
bGVlcCAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbSkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBjbG9ja19nZXRjcHVjbG9ja2lkIChwaWRfdCBfX3BpZCwgY2xvY2tpZF90ICpfX2Nsb2Nr
X2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgdGltZXJfY3JlYXRlIChjbG9ja2lkX3QgX19j
bG9ja19pZCwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdldmVudCAqX19yZXN0
cmljdCBfX2V2cCwKICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX3QgKl9fcmVzdHJpY3Qg
X190aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX2RlbGV0ZSAodGltZXJfdCBf
X3RpbWVyaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfc2V0dGltZSAodGltZXJfdCBf
X3RpbWVyaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
c3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX192YWx1ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX292YWx1ZSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCB0aW1lcl9nZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwgc3RydWN0IGl0
aW1lcnNwZWMgKl9fdmFsdWUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9nZXRv
dmVycnVuICh0aW1lcl90IF9fdGltZXJpZCkgdGhyb3cgKCk7CiMgMzQyICIvdXNyL2luY2x1ZGUv
dGltZS5oIiAzCmV4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7CgoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAq
Z2V0ZGF0ZSAoX19jb25zdCBjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CiMgMzU3ICIvdXNyL2lu
Y2x1ZGUvdGltZS5oIiAzCmV4dGVybiBpbnQgZ2V0ZGF0ZV9yIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJp
Y3QgX19yZXNidWZwKSB0aHJvdyAoKTsKCgoKfQojIDI0ICIuLi9zdGxwb3J0L3RpbWUuaCIgMiAz
CiMgNTIgIi91c3IvaW5jbHVkZS9nKysvY3RpbWUiIDIgMwojIDY0ICIvdXNyL2luY2x1ZGUvZysr
L2N0aW1lIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6Y2xvY2tfdDsKICB1c2luZyA6OnRp
bWVfdDsKICB1c2luZyA6OnRtOwoKICB1c2luZyA6OmNsb2NrOwogIHVzaW5nIDo6ZGlmZnRpbWU7
CiAgdXNpbmcgOjpta3RpbWU7CiAgdXNpbmcgOjp0aW1lOwogIHVzaW5nIDo6YXNjdGltZTsKICB1
c2luZyA6OmN0aW1lOwogIHVzaW5nIDo6Z210aW1lOwogIHVzaW5nIDo6bG9jYWx0aW1lOwogIHVz
aW5nIDo6c3RyZnRpbWU7Cn0KIyAyNiAiLi4vc3RscG9ydC9jdGltZSIgMgoKCgoKCm5hbWVzcGFj
ZSBfU1RMIHsKdXNpbmcgX19zdGRfYWxpYXM6OnNpemVfdDsKdXNpbmcgX19zdGRfYWxpYXM6OmNs
b2NrX3Q7CnVzaW5nIF9fc3RkX2FsaWFzOjp0aW1lX3Q7CnVzaW5nIF9fc3RkX2FsaWFzOjp0bTsK
CnVzaW5nIF9fc3RkX2FsaWFzOjpjbG9jazsKdXNpbmcgX19zdGRfYWxpYXM6OmFzY3RpbWU7CnVz
aW5nIF9fc3RkX2FsaWFzOjpjdGltZTsKdXNpbmcgX19zdGRfYWxpYXM6OmdtdGltZTsKdXNpbmcg
X19zdGRfYWxpYXM6OmRpZmZ0aW1lOwp1c2luZyBfX3N0ZF9hbGlhczo6bWt0aW1lOwp1c2luZyBf
X3N0ZF9hbGlhczo6bG9jYWx0aW1lOwp1c2luZyBfX3N0ZF9hbGlhczo6c3RyZnRpbWU7CnVzaW5n
IF9fc3RkX2FsaWFzOjp0aW1lOwoKfQoKCgojIDEgIi4uL3N0bHBvcnQvc3RsL19lcGlsb2cuaCIg
MQojIDE0ICIuLi9zdGxwb3J0L3N0bC9fZXBpbG9nLmgiCiMgMSAiLi4vc3RscG9ydC9zdGwvX2Nv
bmZpZ19jb21wYXRfcG9zdC5oIiAxCiMgMTUgIi4uL3N0bHBvcnQvc3RsL19lcGlsb2cuaCIgMgoj
IDUyICIuLi9zdGxwb3J0L2N0aW1lIiAyCiMgMjkgInN0bHBvcnRfcHJlZml4LmgiIDIKCnVzaW5n
IF9fc3RkX2FsaWFzOjp0aW1lX3Q7CiMgMTkgIm1vbmV0YXJ5LmNwcCIgMgoKIyAxICIuLi9zdGxw
b3J0L3N0bC9fbW9uZXRhcnkuaCIgMQojIDI3ICIuLi9zdGxwb3J0L3N0bC9fbW9uZXRhcnkuaCIK
IyAxICIuLi9zdGxwb3J0L3N0bC9fY3R5cGUuaCIgMQojIDI2ICIuLi9zdGxwb3J0L3N0bC9fY3R5
cGUuaCIKIyAxICIuLi9zdGxwb3J0L3N0bC9jX2xvY2FsZS5oIiAxCiMgOTAgIi4uL3N0bHBvcnQv
c3RsL2NfbG9jYWxlLmgiCiMgMSAiLi4vc3RscG9ydC9jd2NoYXIiIDEKIyAyMSAiLi4vc3RscG9y
dC9jd2NoYXIiCiMgMSAiLi4vc3RscG9ydC9zdGwvX3Byb2xvZy5oIiAxCiMgMjIgIi4uL3N0bHBv
cnQvY3djaGFyIiAyCgoKCgoKIyAxICIuLi9zdGxwb3J0L3N0bC9fY3djaGFyLmgiIDEKIyAzMSAi
Li4vc3RscG9ydC9zdGwvX2N3Y2hhci5oIgojIDEgIi91c3IvaW5jbHVkZS9nKysvY3djaGFyIiAx
CiMgNDggIi91c3IvaW5jbHVkZS9nKysvY3djaGFyIiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKysv
aTQ4Ni1zdXNlLWxpbnV4L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUv
ZysrL2k0ODYtc3VzZS1saW51eC9iaXRzL2MrK2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2crKy9pNDg2LXN1c2UtbGludXgvYml0cy9vc19kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2lu
Y2x1ZGUvZysrL2k0ODYtc3VzZS1saW51eC9iaXRzL2MrK2NvbmZpZy5oIiAyIDMKIyA1MCAiL3Vz
ci9pbmNsdWRlL2crKy9jd2NoYXIiIDIgMwoKCgoKIyAxICIuLi9zdGxwb3J0L3djaGFyLmgiIDEg
MwojIDM0ICIuLi9zdGxwb3J0L3djaGFyLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg
MSAzCiMgMzcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiLi4vc3RscG9ydC9zdGRpby5o
IiAxIDMKIyAyMiAiLi4vc3RscG9ydC9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlv
LmgiIDEgMwojIDQ1ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9f
RklMRSBGSUxFOwojIDU1ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBf
SU9fRklMRSBfX0ZJTEU7CiMgMjMgIi4uL3N0bHBvcnQvc3RkaW8uaCIgMiAzCiMgMzggIi91c3Iv
aW5jbHVkZS93Y2hhci5oIiAyIDMKCgojIDEgIi4uL3N0bHBvcnQvc3RkYXJnLmgiIDEgMwojIDIz
ICIuLi9zdGxwb3J0L3N0ZGFyZy5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2Ut
bGludXgvMy4yL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQzICIvdXNyL2xpYi9nY2MtbGliL2k0
ODYtc3VzZS1saW51eC8zLjIvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fYnVpbHRpbl92
YV9saXN0IF9fZ251Y192YV9saXN0OwojIDI0ICIuLi9zdGxwb3J0L3N0ZGFyZy5oIiAyIDMKIyA0
MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKCgoKCgoKIyAxICIuLi9zdGxwb3J0L3N0ZGRl
Zi5oIiAxIDMKIyAyMyAiLi4vc3RscG9ydC9zdGRkZWYuaCIgMwojIDEgIi91c3IvbGliL2djYy1s
aWIvaTQ4Ni1zdXNlLWxpbnV4LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMjEgIi91c3Iv
bGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVk
ZWYgdW5zaWduZWQgaW50IHdpbnRfdDsKIyAyNCAiLi4vc3RscG9ydC9zdGRkZWYuaCIgMiAzCiMg
NDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2No
YXIuaCIgMSAzCiMgNTEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyA2NyAiL3Vzci9pbmNs
dWRlL3djaGFyLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2NvdW50OwogIHVuaW9uCiAg
ewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07CiAgfSBfX3ZhbHVlOwp9IF9f
bWJzdGF0ZV90OwojIDg1ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwp0eXBlZGVmIF9fbWJzdGF0
ZV90IG1ic3RhdGVfdDsKIyAxMDUgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCnN0cnVjdCB0bTsK
CgpleHRlcm4gIkMiIHsKCgpleHRlcm4gd2NoYXJfdCAqd2NzY3B5ICh3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fc3JjKSB0aHJvdyAoKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NuY3B5ICh3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgpleHRl
cm4gd2NoYXJfdCAqd2NzY2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjKSB0aHJvdyAo
KTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NuY2F0ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3Ny
Yywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHdjc2NtcCAoX19jb25z
dCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHdjc25jbXAgKF9fY29uc3Qgd2No
YXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gaW50IHdjc2Nhc2VjbXAg
KF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHdjc25jYXNlY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qg
d2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgdGhyb3cg
KCk7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVk
ZS94bG9jYWxlLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX19sb2NhbGVfc3RydWN0CnsKCiAgc3RydWN0
IGxvY2FsZV9kYXRhICpfX2xvY2FsZXNbMTNdOwoKCiAgY29uc3QgdW5zaWduZWQgc2hvcnQgaW50
ICpfX2N0eXBlX2I7CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvbG93ZXI7CiAgY29uc3QgaW50ICpf
X2N0eXBlX3RvdXBwZXI7Cn0gKl9fbG9jYWxlX3Q7CiMgMTQ0ICIvdXNyL2luY2x1ZGUvd2NoYXIu
aCIgMiAzCgpleHRlcm4gaW50IF9fd2NzY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEs
IF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2Nh
bGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9fd2NzbmNhc2VjbXBfbCAoX19jb25z
dCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBpbnQgd2NzY29sbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3Qg
Kl9fczIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3hmcm0gKHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19zMSwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IF9fd2Nz
Y29sbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAg
ICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCmV4dGVy
biBzaXplX3QgX193Y3N4ZnJtX2wgKHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19z
MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xv
YykgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2R1cCAoX19jb25zdCB3Y2hhcl90ICpf
X3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCmV4dGVybiB3Y2hh
cl90ICp3Y3NjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3Ny
Y2hyIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2hybnVs
IChfX2NvbnN0IHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX3djKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCB3Y3Njc3BuIChfX2NvbnN0
IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVqZWN0KQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgd2Nzc3BuIChfX2Nv
bnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fYWNjZXB0KQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3Bicmsg
KF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2Nz
c3RyIChfX2NvbnN0IHdjaGFyX3QgKl9faGF5c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19uZWVk
bGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiB3
Y2hhcl90ICp3Y3N3Y3MgKF9fY29uc3Qgd2NoYXJfdCAqX19oYXlzdGFjaywgX19jb25zdCB3Y2hh
cl90ICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CgoKZXh0ZXJuIHdjaGFyX3QgKndjc3RvayAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2RlbGltLAog
ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3B0cikgdGhyb3cg
KCk7CgoKZXh0ZXJuIHNpemVfdCB3Y3NsZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NubGVuIChf
X2NvbnN0IHdjaGFyX3QgKl9fcywgc2l6ZV90IF9fbWF4bGVuKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jaHIgKF9fY29u
c3Qgd2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHdtZW1jbXAgKF9fY29uc3Qg
d2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB3Y2hhcl90ICp3bWVtY3B5ICh3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90
ICp3bWVtbW92ZSAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3Qg
X19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3Y2hhcl90ICp3bWVtc2V0ICh3Y2hhcl90ICpf
X3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB3Y2hhcl90
ICp3bWVtcGNweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQogICAg
IHRocm93ICgpOwoKCgoKCmV4dGVybiB3aW50X3QgYnRvd2MgKGludCBfX2MpIHRocm93ICgpOwoK
CgpleHRlcm4gaW50IHdjdG9iICh3aW50X3QgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBt
YnNpbml0IChfX2NvbnN0IG1ic3RhdGVfdCAqX19wcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgoKCmV4dGVybiBzaXplX3QgbWJydG93YyAod2NoYXJfdCAqX19yZXN0cmlj
dCBfX3B3YywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19wKSB0
aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IHdjcnRvbWIgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCB3
Y2hhcl90IF9fd2MsCiAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0
IF9fcHMpIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3QgX19tYnJsZW4gKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgIG1ic3Rh
dGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBtYnJsZW4gKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAg
ICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCmV4dGVybiBfX2lu
bGluZSBzaXplX3QgbWJybGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3Qg
X19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0
IF9fcHMpIHRocm93ICgpCnsgcmV0dXJuIChfX3BzICE9IF9fbnVsbAogICAgICAgICAgPyBtYnJ0
b3djIChfX251bGwsIF9fcywgX19uLCBfX3BzKSA6IF9fbWJybGVuIChfX3MsIF9fbiwgX19udWxs
KSk7IH0KCgoKCmV4dGVybiBzaXplX3QgbWJzcnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
ZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBf
X3NyYywgc2l6ZV90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpf
X3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3J0b21icyAoY2hh
ciAqX19yZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2No
YXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
c2l6ZV90IG1ic25ydG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9f
bm1jLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICpf
X3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc25ydG9tYnMgKGNo
YXIgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3
Y2hhcl90ICoqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgX19ud2MsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRl
X3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgd2N3aWR0aCAo
d2NoYXJfdCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHdjc3dpZHRoIChfX2NvbnN0IHdj
aGFyX3QgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSB3Y3N0
b2QgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBm
bG9hdCB3Y3N0b2YgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKZXh0
ZXJuIGxvbmcgZG91YmxlIHdjc3RvbGQgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2Vu
ZHB0cikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcgaW50IHdjc3RvbCAoX19jb25zdCB3Y2hh
cl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgpleHRlcm4gdW5z
aWduZWQgbG9uZyBpbnQgd2NzdG91bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpl
eHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b3EgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf
X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0
ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91cSAoX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2No
YXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJu
IGxvbmcgbG9uZyBpbnQgd2NzdG9sbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJu
IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91bGwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0
cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hh
cl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpOwojIDQxMCAiL3Vzci9pbmNsdWRlL3djaGFy
LmgiIDMKZXh0ZXJuIGxvbmcgaW50IF9fd2NzdG9sX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0
cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0
cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
bG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2Nz
dG91bF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxl
X3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBf
X3djc3RvbGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBf
X2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcg
aW50IF9fd2NzdG91bGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0
cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGRv
dWJsZSBfX3djc3RvZF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xv
Y2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IF9fd2NzdG9mX2wgKF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0
aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBfX3djc3RvbGRfbCAoX19jb25zdCB3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hh
cl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIF9fd2NzdG9k
X2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50
IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBfX3djc3RvZl9pbnRlcm5hbCAo
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAg
ICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBfX3djc3RvbGRfaW50ZXJuYWwgKF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGxvbmcgaW50IF9fd2NzdG9sX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf
X2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50
IF9fd2NzdG91bF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9f
CmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2NzdG9sbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoK
Cl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX193Y3N0b3VsbF9p
bnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKioKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2VuZHB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSB3
Y3N0b2QgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkK
eyByZXR1cm4gX193Y3N0b2RfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOyB9CmV4dGVy
biBfX2lubGluZSBsb25nIGludCB3Y3N0b2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf
X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNl
KSB0aHJvdyAoKQp7IHJldHVybiBfX3djc3RvbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwg
X19iYXNlLCAwKTsgfQpleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBpbnQgd2NzdG91bCAo
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cg
KCkKeyByZXR1cm4gX193Y3N0b3VsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2Us
IDApOyB9CgoKZXh0ZXJuIF9faW5saW5lIGZsb2F0IHdjc3RvZiAoX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsgcmV0dXJuIF9fd2NzdG9mX2ludGVybmFs
IChfX25wdHIsIF9fZW5kcHRyLCAwKTsgfQpleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgd2Nz
dG9sZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJv
dyAoKQp7IHJldHVybiBfX3djc3RvbGRfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOyB9
CgoKX19leHRlbnNpb25fXwpleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludCB3Y3N0b3EgKF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKeyByZXR1cm4g
X193Y3N0b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOyB9Cl9fZXh0
ZW5zaW9uX18KZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91cSAo
X19jb25zdCB3Y2hhcl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlKSB0aHJv
dyAoKQp7IHJldHVybiBfX3djc3RvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jh
c2UsIDApOyB9CgoKCgoKCgpleHRlcm4gd2NoYXJfdCAqd2NwY3B5ICh3Y2hhcl90ICpfX2Rlc3Qs
IF9fY29uc3Qgd2NoYXJfdCAqX19zcmMpIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqd2Nw
bmNweSAod2NoYXJfdCAqX19kZXN0LCBfX2NvbnN0IHdjaGFyX3QgKl9fc3JjLCBzaXplX3QgX19u
KQogICAgIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBmd2lkZSAoX19GSUxFICpfX2ZwLCBp
bnQgX19tb2RlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmd3ByaW50ZiAoX19GSUxFICpfX3Jl
c3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHdwcmlu
dGYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93
ICgpIDsKCmV4dGVybiBpbnQgc3dwcmludGYgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXpl
X3QgX19uLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgoKZXh0ZXJuIGludCB2ZndwcmludGYgKF9f
RklMRSAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFf
bGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZ3cHJpbnRmIChfX2NvbnN0
IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251
Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgpleHRlcm4gaW50IHZzd3ByaW50ZiAo
d2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg
ICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgoKCmV4dGVybiBpbnQg
ZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAg
IF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgp
IDsKCmV4dGVybiBpbnQgd3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3Jt
YXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHN3c2NhbmYgKF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKCgoKZXh0ZXJuIGlu
dCB2ZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAg
ICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZ3c2Nh
bmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAg
ICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZz
d3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAg
ICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgoKCmV4dGVybiB3
aW50X3QgZmdldHdjIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBn
ZXR3YyAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBnZXR3Y2hh
ciAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiB3aW50X3QgZnB1dHdjICh3Y2hhcl90IF9fd2Ms
IF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2ludF90IHB1dHdjICh3Y2hhcl90
IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgcHV0d2No
YXIgKHdjaGFyX3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gd2NoYXJfdCAqZmdldHdzICh3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAg
IF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBmcHV0
d3MgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLAogICAgICAgICAgICAgICAgICAg
X19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCB1
bmdldHdjICh3aW50X3QgX193YywgX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIHdpbnRfdCBnZXR3Y191bmxvY2tlZCAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4
dGVybiB3aW50X3QgZ2V0d2NoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB3
aW50X3QgZmdldHdjX3VubG9ja2VkIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRl
cm4gd2ludF90IGZwdXR3Y191bmxvY2tlZCAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCBwdXR3Y191bmxvY2tlZCAod2NoYXJfdCBfX3dj
LCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBwdXR3Y2hhcl91bmxv
Y2tlZCAod2NoYXJfdCBfX3djKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKmZnZXR3c191
bmxvY2tlZCAod2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLCBpbnQgX19uLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgZnB1dHdzX3VubG9ja2VkIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX193cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBf
X3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBzaXplX3Qgd2NzZnRpbWUgKHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwojIDY4
MCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKfQojIDM1ICIuLi9zdGxwb3J0L3djaGFyLmgiIDIg
MwojIDU1ICIvdXNyL2luY2x1ZGUvZysrL2N3Y2hhciIgMiAzCiMgNjkgIi91c3IvaW5jbHVkZS9n
KysvY3djaGFyIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bWJzdGF0ZV90Owp9CiMgMTMz
ICIvdXNyL2luY2x1ZGUvZysrL2N3Y2hhciIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Ondp
bnRfdDsKCiAgdXNpbmcgOjpidG93YzsKICB1c2luZyA6OmZnZXR3YzsKICB1c2luZyA6OmZnZXR3
czsKICB1c2luZyA6OmZwdXR3YzsKICB1c2luZyA6OmZwdXR3czsKICB1c2luZyA6OmZ3aWRlOwog
IHVzaW5nIDo6ZndwcmludGY7CiAgdXNpbmcgOjpmd3NjYW5mOwogIHVzaW5nIDo6Z2V0d2M7CiAg
dXNpbmcgOjpnZXR3Y2hhcjsKICB1c2luZyA6Om1icmxlbjsKICB1c2luZyA6Om1icnRvd2M7CiAg
dXNpbmcgOjptYnNpbml0OwogIHVzaW5nIDo6bWJzcnRvd2NzOwogIHVzaW5nIDo6cHV0d2M7CiAg
dXNpbmcgOjpwdXR3Y2hhcjsKICB1c2luZyA6OnN3cHJpbnRmOwogIHVzaW5nIDo6c3dzY2FuZjsK
ICB1c2luZyA6OnVuZ2V0d2M7CiAgdXNpbmcgOjp2ZndwcmludGY7CiAgdXNpbmcgOjp2ZndzY2Fu
ZjsKICB1c2luZyA6OnZzd3ByaW50ZjsKICB1c2luZyA6OnZzd3NjYW5mOwogIHVzaW5nIDo6dndw
cmludGY7CiAgdXNpbmcgOjp2d3NjYW5mOwogIHVzaW5nIDo6d2NydG9tYjsKICB1c2luZyA6Ondj
c2NhdDsKICB1c2luZyA6Ondjc2NtcDsKICB1c2luZyA6Ondjc2NvbGw7CiAgdXNpbmcgOjp3Y3Nj
cHk7CiAgdXNpbmcgOjp3Y3Njc3BuOwogIHVzaW5nIDo6d2NzZnRpbWU7CiAgdXNpbmcgOjp3Y3Ns
ZW47CiAgdXNpbmcgOjp3Y3NuY2F0OwogIHVzaW5nIDo6d2NzbmNtcDsKICB1c2luZyA6Ondjc25j
cHk7CiAgdXNpbmcgOjp3Y3NydG9tYnM7CiAgdXNpbmcgOjp3Y3NzcG47CiAgdXNpbmcgOjp3Y3N0
b2Q7CiAgdXNpbmcgOjp3Y3N0b2Y7CiAgdXNpbmcgOjp3Y3N0b2s7CiAgdXNpbmcgOjp3Y3N0b2w7
CiAgdXNpbmcgOjp3Y3N0b3VsOwogIHVzaW5nIDo6d2NzeGZybTsKICB1c2luZyA6OndjdG9iOwog
IHVzaW5nIDo6d21lbWNtcDsKICB1c2luZyA6OndtZW1jcHk7CiAgdXNpbmcgOjp3bWVtbW92ZTsK
ICB1c2luZyA6OndtZW1zZXQ7CiAgdXNpbmcgOjp3cHJpbnRmOwogIHVzaW5nIDo6d3NjYW5mOwoK
ICB1c2luZyA6Ondjc2NocjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzY2hyKHdjaGFyX3QqIF9f
cCwgd2NoYXJfdCBfX2MpCiAgeyByZXR1cm4gd2NzY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJf
dCo+KF9fcCksIF9fYyk7IH0KCiAgdXNpbmcgOjp3Y3NwYnJrOwoKICBpbmxpbmUgd2NoYXJfdCoK
ICB3Y3NwYnJrKHdjaGFyX3QqIF9fczEsIHdjaGFyX3QqIF9fczIpCiAgeyByZXR1cm4gd2NzcGJy
ayhjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjp3
Y3NyY2hyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NyY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJf
dCBfX2MpCiAgeyByZXR1cm4gd2NzcmNocihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3Ap
LCBfX2MpOyB9CgogIHVzaW5nIDo6d2Nzc3RyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NzdHIo
d2NoYXJfdCogX19zMSwgd2NoYXJfdCogX19zMikKICB7IHJldHVybiB3Y3NzdHIoY29uc3RfY2Fz
dDxjb25zdCB3Y2hhcl90Kj4oX19zMSksIF9fczIpOyB9CgogIHVzaW5nIDo6d21lbWNocjsKCiAg
aW5saW5lIHdjaGFyX3QqCiAgd21lbWNocih3Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jLCBzaXpl
X3QgX19uKQogIHsgcmV0dXJuIHdtZW1jaHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19w
KSwgX19jLCBfX24pOyB9Cn0KCgoKCgoKCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6
d2NzdG9sZDsKICB1c2luZyA6Ondjc3RvbGw7CiAgdXNpbmcgOjp3Y3N0b3VsbDsKfQoKbmFtZXNw
YWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4Ojp3Y3N0b2xkOwogIHVzaW5nIF9fZ251X2N4eDo6
d2NzdG9sbDsKICB1c2luZyBfX2dudV9jeHg6Ondjc3RvdWxsOwp9CiMgMzIgIi4uL3N0bHBvcnQv
c3RsL19jd2NoYXIuaCIgMgojIDEwNSAiLi4vc3RscG9ydC9zdGwvX2N3Y2hhci5oIgpzdHJ1Y3Qg
X19zdGxfbWJzdGF0ZV90OwoKCnN0cnVjdCBfX3N0bF9tYnN0YXRlX3QgewogIF9fc3RsX21ic3Rh
dGVfdCggbG9uZyBfX3N0ID0gMCApIHsgX01fc3RhdGVbMF0gPSBfX3N0IDsgfQogIF9fc3RsX21i
c3RhdGVfdCYgb3BlcmF0b3I9KGNvbnN0IGxvbmcgX19zdCkgewogICAgX01fc3RhdGVbMF0gPSBf
X3N0OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfX3N0bF9tYnN0YXRlX3QoY29uc3QgX19zdGxf
bWJzdGF0ZV90JiBfX3gpIHtfTV9zdGF0ZVswXT0gX194Ll9NX3N0YXRlWzBdOyB9CiAgX19zdGxf
bWJzdGF0ZV90JiBvcGVyYXRvcj0oY29uc3QgX19zdGxfbWJzdGF0ZV90JiBfX3gpIHsKICAgIF9N
X3N0YXRlWzBdPSBfX3guX01fc3RhdGVbMF07CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCgoKCgoK
ICBsb25nIF9NX3N0YXRlWzFdOwoKfTsKCmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19z
dGxfbWJzdGF0ZV90JiBfX3gsIGNvbnN0IF9fc3RsX21ic3RhdGVfdCYgX195KSB7CiAgcmV0dXJu
ICggX194Ll9NX3N0YXRlWzBdID09IF9feS5fTV9zdGF0ZVswXSApOwp9CgppbmxpbmUgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IF9fc3RsX21ic3RhdGVfdCYgX194LCBjb25zdCBfX3N0bF9tYnN0YXRl
X3QmIF9feSkgewogIHJldHVybiAoIF9feC5fTV9zdGF0ZVswXSA9PSBfX3kuX01fc3RhdGVbMF0g
KTsKfQoKCgpuYW1lc3BhY2UgX1NUTCB7Cgp0eXBlZGVmIF9fc3RsX21ic3RhdGVfdCBtYnN0YXRl
X3Q7Cgp9CiMgMTU1ICIuLi9zdGxwb3J0L3N0bC9fY3djaGFyLmgiCm5hbWVzcGFjZSBfU1RMIHsK
CgoKCgoKCnVzaW5nIF9fc3RkX2FsaWFzOjp3aW50X3Q7CgoKCgp1c2luZyBfX3N0ZF9hbGlhczo6
c2l6ZV90OwojIDI4MCAiLi4vc3RscG9ydC9zdGwvX2N3Y2hhci5oIgp9CiMgMjggIi4uL3N0bHBv
cnQvY3djaGFyIiAyCgoKIyAxICIuLi9zdGxwb3J0L3N0bC9fZXBpbG9nLmgiIDEKIyAxNCAiLi4v
c3RscG9ydC9zdGwvX2VwaWxvZy5oIgojIDEgIi4uL3N0bHBvcnQvc3RsL19jb25maWdfY29tcGF0
X3Bvc3QuaCIgMQojIDE1ICIuLi9zdGxwb3J0L3N0bC9fZXBpbG9nLmgiIDIKIyAzMSAiLi4vc3Rs
cG9ydC9jd2NoYXIiIDIKIyA5MSAiLi4vc3RscG9ydC9zdGwvY19sb2NhbGUuaCIgMgoKCiMgMSAi
Li4vc3RscG9ydC9jY3R5cGUiIDEKIyAyMSAiLi4vc3RscG9ydC9jY3R5cGUiCiMgMSAiLi4vc3Rs
cG9ydC9zdGwvX3Byb2xvZy5oIiAxCiMgMjIgIi4uL3N0bHBvcnQvY2N0eXBlIiAyCgoKCgojIDEg
Ii91c3IvaW5jbHVkZS9nKysvY2N0eXBlIiAxCiMgNDcgIi91c3IvaW5jbHVkZS9nKysvY2N0eXBl
IiAzCgoKIyAxICIuLi9zdGxwb3J0L2N0eXBlLmgiIDEgMwojIDIzICIuLi9zdGxwb3J0L2N0eXBl
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9j
dHlwZS5oIiAzCmV4dGVybiAiQyIgewojIDQwICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRl
L2VuZGlhbi5oIiAyIDMKIyA0MSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIgMwoKCgoKCgplbnVt
CnsKICBfSVN1cHBlciA9ICgoMCkgPCA4ID8gKCgxIDw8ICgwKSkgPDwgOCkgOiAoKDEgPDwgKDAp
KSA+PiA4KSksCiAgX0lTbG93ZXIgPSAoKDEpIDwgOCA/ICgoMSA8PCAoMSkpIDw8IDgpIDogKCgx
IDw8ICgxKSkgPj4gOCkpLAogIF9JU2FscGhhID0gKCgyKSA8IDggPyAoKDEgPDwgKDIpKSA8PCA4
KSA6ICgoMSA8PCAoMikpID4+IDgpKSwKICBfSVNkaWdpdCA9ICgoMykgPCA4ID8gKCgxIDw8ICgz
KSkgPDwgOCkgOiAoKDEgPDwgKDMpKSA+PiA4KSksCiAgX0lTeGRpZ2l0ID0gKCg0KSA8IDggPyAo
KDEgPDwgKDQpKSA8PCA4KSA6ICgoMSA8PCAoNCkpID4+IDgpKSwKICBfSVNzcGFjZSA9ICgoNSkg
PCA4ID8gKCgxIDw8ICg1KSkgPDwgOCkgOiAoKDEgPDwgKDUpKSA+PiA4KSksCiAgX0lTcHJpbnQg
PSAoKDYpIDwgOCA/ICgoMSA8PCAoNikpIDw8IDgpIDogKCgxIDw8ICg2KSkgPj4gOCkpLAogIF9J
U2dyYXBoID0gKCg3KSA8IDggPyAoKDEgPDwgKDcpKSA8PCA4KSA6ICgoMSA8PCAoNykpID4+IDgp
KSwKICBfSVNibGFuayA9ICgoOCkgPCA4ID8gKCgxIDw8ICg4KSkgPDwgOCkgOiAoKDEgPDwgKDgp
KSA+PiA4KSksCiAgX0lTY250cmwgPSAoKDkpIDwgOCA/ICgoMSA8PCAoOSkpIDw8IDgpIDogKCgx
IDw8ICg5KSkgPj4gOCkpLAogIF9JU3B1bmN0ID0gKCgxMCkgPCA4ID8gKCgxIDw8ICgxMCkpIDw8
IDgpIDogKCgxIDw8ICgxMCkpID4+IDgpKSwKICBfSVNhbG51bSA9ICgoMTEpIDwgOCA/ICgoMSA8
PCAoMTEpKSA8PCA4KSA6ICgoMSA8PCAoMTEpKSA+PiA4KSkKfTsKIyA3NSAiL3Vzci9pbmNsdWRl
L2N0eXBlLmgiIDMKZXh0ZXJuIF9fY29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICpfX2N0eXBlX2I7
CmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqX19jdHlwZV90b2xvd2VyOwpleHRlcm4gX19jb25z
dCBfX2ludDMyX3QgKl9fY3R5cGVfdG91cHBlcjsKIyA5MSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgi
IDMKZXh0ZXJuIGludCBpc2FsbnVtIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzYWxwaGEg
KGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNjbnRybCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBpc2RpZ2l0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzbG93ZXIgKGludCkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgaXNncmFwaCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3By
aW50IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzcHVuY3QgKGludCkgdGhyb3cgKCk7CmV4
dGVybiBpbnQgaXNzcGFjZSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3VwcGVyIChpbnQp
IHRocm93ICgpOwpleHRlcm4gaW50IGlzeGRpZ2l0IChpbnQpIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgaXNibGFuayAoaW50KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgdG9sb3dlciAoaW50IF9f
YykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0b3VwcGVyIChpbnQgX19jKSB0aHJvdyAoKTsKCgoK
CgoKZXh0ZXJuIGludCBpc2FzY2lpIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB0
b2FzY2lpIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfdG91cHBlciAoaW50KSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBfdG9sb3dlciAoaW50KSB0aHJvdyAoKTsKIyAyMjMgIi91c3Iv
aW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBpbnQgX19pc2FsbnVtX2wgKGludCwgX19sb2NhbGVf
dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2FscGhhX2wgKGludCwgX19sb2NhbGVfdCkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgX19pc2NudHJsX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7
CmV4dGVybiBpbnQgX19pc2RpZ2l0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgX19pc2xvd2VyX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg
X19pc2dyYXBoX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3By
aW50X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3B1bmN0X2wg
KGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3NwYWNlX2wgKGludCwg
X19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3VwcGVyX2wgKGludCwgX19sb2Nh
bGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3hkaWdpdF9sIChpbnQsIF9fbG9jYWxlX3Qp
IHRocm93ICgpOwoKZXh0ZXJuIGludCBfX2lzYmxhbmtfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCBfX3RvbG93ZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgX190b3VwcGVyX2wgKGludCBfX2MsIF9fbG9jYWxlX3Qg
X19sKSB0aHJvdyAoKTsKIyAyNzYgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCn0KIyAyNCAiLi4v
c3RscG9ydC9jdHlwZS5oIiAyIDMKIyA1MCAiL3Vzci9pbmNsdWRlL2crKy9jY3R5cGUiIDIgMwoj
IDY2ICIvdXNyL2luY2x1ZGUvZysrL2NjdHlwZSIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6
OmlzYWxudW07CiAgdXNpbmcgOjppc2FscGhhOwogIHVzaW5nIDo6aXNjbnRybDsKICB1c2luZyA6
OmlzZGlnaXQ7CiAgdXNpbmcgOjppc2dyYXBoOwogIHVzaW5nIDo6aXNsb3dlcjsKICB1c2luZyA6
OmlzcHJpbnQ7CiAgdXNpbmcgOjppc3B1bmN0OwogIHVzaW5nIDo6aXNzcGFjZTsKICB1c2luZyA6
OmlzdXBwZXI7CiAgdXNpbmcgOjppc3hkaWdpdDsKICB1c2luZyA6OnRvbG93ZXI7CiAgdXNpbmcg
Ojp0b3VwcGVyOwp9CiMgMjcgIi4uL3N0bHBvcnQvY2N0eXBlIiAyCiMgNTEgIi4uL3N0bHBvcnQv
Y2N0eXBlIgpuYW1lc3BhY2UgX1NUTCB7CnVzaW5nIF9fc3RkX2FsaWFzOjppc2FsbnVtOwp1c2lu
ZyBfX3N0ZF9hbGlhczo6aXNhbHBoYTsKdXNpbmcgX19zdGRfYWxpYXM6OmlzY250cmw7CnVzaW5n
IF9fc3RkX2FsaWFzOjppc2RpZ2l0Owp1c2luZyBfX3N0ZF9hbGlhczo6aXNncmFwaDsKdXNpbmcg
X19zdGRfYWxpYXM6OmlzbG93ZXI7CnVzaW5nIF9fc3RkX2FsaWFzOjppc3ByaW50Owp1c2luZyBf
X3N0ZF9hbGlhczo6aXNwdW5jdDsKdXNpbmcgX19zdGRfYWxpYXM6Omlzc3BhY2U7CnVzaW5nIF9f
c3RkX2FsaWFzOjppc3VwcGVyOwp1c2luZyBfX3N0ZF9hbGlhczo6aXN4ZGlnaXQ7CnVzaW5nIF9f
c3RkX2FsaWFzOjp0b2xvd2VyOwp1c2luZyBfX3N0ZF9hbGlhczo6dG91cHBlcjsKfQoKCgoKIyAx
ICIuLi9zdGxwb3J0L3N0bC9fZXBpbG9nLmgiIDEKIyAxNCAiLi4vc3RscG9ydC9zdGwvX2VwaWxv
Zy5oIgojIDEgIi4uL3N0bHBvcnQvc3RsL19jb25maWdfY29tcGF0X3Bvc3QuaCIgMQojIDE1ICIu
Li9zdGxwb3J0L3N0bC9fZXBpbG9nLmgiIDIKIyA3MSAiLi4vc3RscG9ydC9jY3R5cGUiIDIKIyA5
NCAiLi4vc3RscG9ydC9zdGwvY19sb2NhbGUuaCIgMgojIDEwNyAiLi4vc3RscG9ydC9zdGwvY19s
b2NhbGUuaCIKc3RydWN0IF9Mb2NhbGVfY3R5cGU7CnN0cnVjdCBfTG9jYWxlX251bWVyaWM7CnN0
cnVjdCBfTG9jYWxlX3RpbWU7CnN0cnVjdCBfTG9jYWxlX2NvbGxhdGU7CnN0cnVjdCBfTG9jYWxl
X21vbmV0YXJ5OwpzdHJ1Y3QgX0xvY2FsZV9tZXNzYWdlczsKIyAyNyAiLi4vc3RscG9ydC9zdGwv
X2N0eXBlLmgiIDIKCgojIDEgIi4uL3N0bHBvcnQvc3RsL19sb2NhbGUuaCIgMQojIDI3ICIuLi9z
dGxwb3J0L3N0bC9fbG9jYWxlLmgiCiMgMSAiLi4vc3RscG9ydC9jc3RkbGliIiAxCiMgMjEgIi4u
L3N0bHBvcnQvY3N0ZGxpYiIKIyAxICIuLi9zdGxwb3J0L3N0bC9fcHJvbG9nLmgiIDEKIyAyMiAi
Li4vc3RscG9ydC9jc3RkbGliIiAyCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9jc3RkbGliIiAx
CiMgNDggIi91c3IvaW5jbHVkZS9nKysvY3N0ZGxpYiIgMwoKCgoKIyAxICIuLi9zdGxwb3J0L3N0
ZGxpYi5oIiAxIDMKIyAyMyAiLi4vc3RscG9ydC9zdGRsaWIuaCIgMwojIDEgIi91c3IvaW5jbHVk
ZS9zdGRsaWIuaCIgMSAzCiMgMzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi4uL3N0
bHBvcnQvc3RkZGVmLmgiIDEgMwojIDIzICIuLi9zdGxwb3J0L3N0ZGRlZi5oIiAzCiMgMSAiL3Vz
ci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoj
IDI0ICIuLi9zdGxwb3J0L3N0ZGRlZi5oIiAyIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o
IiAyIDMKCmV4dGVybiAiQyIgewoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRmbGFn
cy5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy93YWl0c3RhdHVzLmgiIDEgMwojIDY1ICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3Rh
dHVzLmgiIDMKdW5pb24gd2FpdAogIHsKICAgIGludCB3X3N0YXR1czsKICAgIHN0cnVjdAogICAg
ICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3dfdGVybXNpZzo3OwogICAgICAgIHVuc2lnbmVk
IGludCBfX3dfY29yZWR1bXA6MTsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3JldGNvZGU6ODsK
ICAgICAgICB1bnNpZ25lZCBpbnQ6MTY7CgoKCgoKCgogICAgICB9IF9fd2FpdF90ZXJtaW5hdGVk
OwogICAgc3RydWN0CiAgICAgIHsKCiAgICAgICAgdW5zaWduZWQgaW50IF9fd19zdG9wdmFsOjg7
CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19zdG9wc2lnOjg7CiAgICAgICAgdW5zaWduZWQgaW50
OjE2OwoKCgoKCgogICAgICB9IF9fd2FpdF9zdG9wcGVkOwogIH07CiMgNDQgIi91c3IvaW5jbHVk
ZS9zdGRsaWIuaCIgMiAzCiMgOTQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwp0eXBlZGVmIHN0
cnVjdAogIHsKICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9IGRpdl90OwoKCgp0eXBlZGVm
IHN0cnVjdAogIHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGludCByZW07CiAgfSBsZGl2
X3Q7CgoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgbG9uZyBp
bnQgcXVvdDsKICAgIGxvbmcgbG9uZyBpbnQgcmVtOwogIH0gbGxkaXZfdDsKIyAxMzMgIi91c3Iv
aW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gc2l6ZV90IF9fY3R5cGVfZ2V0X21iX2N1cl9tYXgg
KHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGF0b2YgKF9fY29uc3QgY2hhciAqX19u
cHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgYXRv
aSAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKZXh0ZXJuIGxvbmcgaW50IGF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbG9u
ZyBsb25nIGludCBhdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBkb3VibGUgc3RydG9kIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgc3RydG9mIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICBjaGFyICoq
X19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc3RydG9s
ZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxv
bmcgaW50IHN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRo
cm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKX19l
eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b3EgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRl
cm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq
X19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKCgoKX19l
eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4
dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CiMgMjE1
ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2wgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVk
IGxvbmcgaW50IF9fc3RydG91bF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2Us
IF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBs
b25nIGludCBfX3N0cnRvbGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVf
dCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxv
bmcgaW50IF9fc3RydG91bGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJs
ZSBfX3N0cnRvZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9f
bG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2wgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gbG9u
ZyBkb3VibGUgX19zdHJ0b2xkX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cg
KCk7CgoKCgoKCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJu
IGZsb2F0IF9fc3RydG9mX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3Ry
dG9sZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJv
dyAoKTsKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBs
b25nIGludCBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lv
bl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9pbnRlcm5hbCAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9f
ZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRl
cm5hbCAoX19jb25zdCBjaGFyICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19i
YXNlLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBfX2lubGluZSBk
b3VibGUKc3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvZF9pbnRlcm5hbCAo
X19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50CnN0cnRvbCAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsCiAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvbF9pbnRl
cm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpleHRlcm4gX19pbmxpbmUgdW5z
aWduZWQgbG9uZyBpbnQKc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgp
CnsKICByZXR1cm4gX19zdHJ0b3VsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2Us
IDApOwp9CgoKZXh0ZXJuIF9faW5saW5lIGZsb2F0CnN0cnRvZiAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsKICBy
ZXR1cm4gX19zdHJ0b2ZfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBf
X2lubGluZSBsb25nIGRvdWJsZQpzdHJ0b2xkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkKewogIHJldHVybiBfX3N0
cnRvbGRfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CgoKCl9fZXh0ZW5zaW9uX18g
ZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICBpbnQgX19i
YXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAoX19ucHRyLCBfX2Vu
ZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1bnNpZ25l
ZCBsb25nIGxvbmcgaW50CnN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAo
KQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFz
ZSwgMCk7Cn0KCgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludApz
dHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0
cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNp
b25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGludApzdHJ0b3VsbCAoX19j
b25zdCBjaGFyICogX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LAogICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvdWxsX2lu
dGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKZXh0ZXJuIF9faW5saW5l
IGRvdWJsZQphdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkKewogIHJldHVybiBz
dHJ0b2QgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCk7Cn0KZXh0ZXJuIF9faW5saW5lIGludAph
dG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkKewogIHJldHVybiAoaW50KSBzdHJ0
b2wgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwgMTApOwp9CmV4dGVybiBfX2lubGluZSBsb25n
IGludAphdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkKewogIHJldHVybiBzdHJ0
b2wgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwgMTApOwp9CgoKX19leHRlbnNpb25fXyBleHRl
cm4gX19pbmxpbmUgbG9uZyBsb25nIGludAphdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRo
cm93ICgpCnsKICByZXR1cm4gc3RydG9sbCAoX19ucHRyLCAoY2hhciAqKikgX19udWxsLCAxMCk7
Cn0KIyAzODQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbDY0YSAobG9u
ZyBpbnQgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgYTY0bCAoX19jb25zdCBjaGFy
ICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCiMgMSAiL3Vzci9p
bmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAz
CmV4dGVybiAiQyIgewoKCgoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0eXBlZGVmIF9fdV9z
aG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYgX191X2xvbmcgdV9s
b25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IHVfcXVhZF90
Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgoKCnR5cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoK
Cgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoKCgoKCnR5cGVkZWYgX19pbm82NF90IGlubzY0X3Q7
CgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoK
Cgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYgX19ubGlua190IG5saW5rX3Q7
CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKdHlwZWRlZiBfX29mZl90IG9mZl90OwoK
CgoKCgp0eXBlZGVmIF9fb2ZmNjRfdCBvZmY2NF90OwojIDEwNCAiL3Vzci9pbmNsdWRlL3N5cy90
eXBlcy5oIiAzCnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCgp0eXBlZGVmIF9fc3NpemVfdCBzc2l6
ZV90OwoKCgoKCnR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5cGVkZWYgX19jYWRkcl90IGNh
ZGRyX3Q7CgoKCgoKdHlwZWRlZiBfX2tleV90IGtleV90OwojIDEzMiAiL3Vzci9pbmNsdWRlL3N5
cy90eXBlcy5oIiAzCiMgMSAiLi4vc3RscG9ydC90aW1lLmgiIDEgMwojIDEzMyAiL3Vzci9pbmNs
dWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKdHlwZWRlZiBfX3VzZWNvbmRzX3QgdXNlY29uZHNfdDsK
CgoKdHlwZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoKCgoKCiMgMSAiLi4vc3RscG9y
dC9zdGRkZWYuaCIgMSAzCiMgMjMgIi4uL3N0bHBvcnQvc3RkZGVmLmgiIDMKIyAxICIvdXNyL2xp
Yi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjQg
Ii4uL3N0bHBvcnQvc3RkZGVmLmgiIDIgMwojIDE0NyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5o
IiAyIDMKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1bG9uZzsKdHlwZWRlZiB1bnNpZ25l
ZCBzaG9ydCBpbnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50OwojIDE5MCAiL3Vz
ci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgaW50IGludDhfdCBfX2F0dHJpYnV0ZV9f
ICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiBpbnQgaW50MTZfdCBfX2F0dHJpYnV0ZV9f
ICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgaW50MzJfdCBfX2F0dHJpYnV0ZV9f
ICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiBpbnQgaW50NjRfdCBfX2F0dHJpYnV0ZV9f
ICgoX19tb2RlX18gKF9fRElfXykpKTsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDhfdCBf
X2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQg
dV9pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVu
c2lnbmVkIGludCB1X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7
CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18g
KF9fRElfXykpKTsKCnR5cGVkZWYgaW50IHJlZ2lzdGVyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k
ZV9fIChfX3dvcmRfXykpKTsKIyAyMTUgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3Nl
bGVjdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMwojIDMyICIvdXNy
L2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3Nl
dC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKdHlwZWRlZiBpbnQg
X19zaWdfYXRvbWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcg
aW50IF9fdmFsWygxMDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9
IF9fc2lnc2V0X3Q7CiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCgp0eXBl
ZGVmIF9fc2lnc2V0X3Qgc2lnc2V0X3Q7CgoKCgoKIyAxICIuLi9zdGxwb3J0L3RpbWUuaCIgMSAz
CiMgNDUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy90aW1lLmgiIDEgMwojIDY3ICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDMKc3RydWN0
IHRpbWV2YWwKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBfX3N1c2Vjb25kc190IHR2X3Vz
ZWM7CiAgfTsKIyA0NyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCiMgNTUgIi91c3Iv
aW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKdHlwZWRlZiBsb25nIGludCBfX2ZkX21hc2s7CgoKCgoK
Cgp0eXBlZGVmIHN0cnVjdAogIHsKCgoKICAgIF9fZmRfbWFzayBmZHNfYml0c1sxMDI0IC8gKDgg
KiBzaXplb2YgKF9fZmRfbWFzaykpXTsKCgoKCgogIH0gZmRfc2V0OwoKCgoKCgp0eXBlZGVmIF9f
ZmRfbWFzayBmZF9tYXNrOwojIDk1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCmV4dGVy
biAiQyIgewoKCgoKCgpleHRlcm4gaW50IHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jl
c3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBf
X3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0
ZmRzLAogICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190aW1l
b3V0KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHBzZWxlY3QgKGludCBfX25mZHMsIGZkX3Nl
dCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCiAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jl
c3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0
IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAq
X19yZXN0cmljdCBfX3RpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgX19zaWdzZXRf
dCAqX19yZXN0cmljdCBfX3NpZ21hc2spIHRocm93ICgpOwoKCn0KIyAyMTYgIi91c3IvaW5jbHVk
ZS9zeXMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5oIiAx
IDMKIyAyMTkgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCgp0eXBlZGVmIF9fYmxr
c2l6ZV90IGJsa3NpemVfdDsKCgoKCgoKdHlwZWRlZiBfX2Jsa2NudF90IGJsa2NudF90OwoKCgp0
eXBlZGVmIF9fZnNibGtjbnRfdCBmc2Jsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNmaWxjbnRfdCBm
c2ZpbGNudF90OwojIDI1NyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19i
bGtjbnQ2NF90IGJsa2NudDY0X3Q7CnR5cGVkZWYgX19mc2Jsa2NudDY0X3QgZnNibGtjbnQ2NF90
Owp0eXBlZGVmIF9fZnNmaWxjbnQ2NF90IGZzZmlsY250NjRfdDsKCgp9CiMgMzkxICIvdXNyL2lu
Y2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgcmFuZG9tICh2b2lkKSB0
aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZG9tICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJv
dyAoKTsKCgoKCgpleHRlcm4gY2hhciAqaW5pdHN0YXRlICh1bnNpZ25lZCBpbnQgX19zZWVkLCBj
aGFyICpfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxl
bikgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpzZXRzdGF0ZSAoY2hhciAqX19zdGF0ZWJ1Zikg
dGhyb3cgKCk7CgoKCgoKCgpzdHJ1Y3QgcmFuZG9tX2RhdGEKICB7CiAgICBpbnQzMl90ICpmcHRy
OwogICAgaW50MzJfdCAqcnB0cjsKICAgIGludDMyX3QgKnN0YXRlOwogICAgaW50IHJhbmRfdHlw
ZTsKICAgIGludCByYW5kX2RlZzsKICAgIGludCByYW5kX3NlcDsKICAgIGludDMyX3QgKmVuZF9w
dHI7CiAgfTsKCmV4dGVybiBpbnQgcmFuZG9tX3IgKHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0
cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqX19yZXN0cmljdCBfX3Jl
c3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNyYW5kb21fciAodW5zaWduZWQgaW50IF9fc2Vl
ZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IGluaXRz
dGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYs
CiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuLAogICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgp
OwoKZXh0ZXJuIGludCBzZXRzdGF0ZV9yIChjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVm
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHJhbmQgKHZvaWQpIHRocm93ICgpOwoKZXh0ZXJu
IHZvaWQgc3JhbmQgKHVuc2lnbmVkIGludCBfX3NlZWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IHJhbmRfciAodW5zaWduZWQgaW50ICpfX3NlZWQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGRv
dWJsZSBkcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4ICh1bnNp
Z25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGxy
YW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gbG9uZyBpbnQgbnJhbmQ0OCAodW5zaWduZWQg
c2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBtcmFuZDQ4
ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IGpyYW5kNDggKHVuc2lnbmVkIHNob3J0
IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZDQ4IChsb25nIGlu
dCBfX3NlZWR2YWwpIHRocm93ICgpOwpleHRlcm4gdW5zaWduZWQgc2hvcnQgaW50ICpzZWVkNDgg
KHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10pIHRocm93ICgpOwpleHRlcm4gdm9pZCBs
Y29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkgdGhyb3cgKCk7CgoKCgoKc3Ry
dWN0IGRyYW5kNDhfZGF0YQogIHsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX3hbM107CiAgICB1
bnNpZ25lZCBzaG9ydCBpbnQgX19vbGRfeFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2M7
CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19pbml0OwogICAgdW5zaWduZWQgbG9uZyBsb25nIGlu
dCBfX2E7CiAgfTsKCgpleHRlcm4gaW50IGRyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAq
X19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0
cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNpZ25lZCBz
aG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4
X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUg
Kl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbHJhbmQ0OF9yIChz
dHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAg
ICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50
IG5yYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAg
ICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9f
YnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1
bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGpyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9f
eHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jl
c3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJp
Y3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3JhbmQ0OF9yIChsb25nIGludCBf
X3NlZWR2YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKQogICAgIHRocm93ICgpOwoK
ZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSwKICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIHRocm93ICgp
OwoKZXh0ZXJuIGludCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddLAog
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIHRocm93
ICgpOwojIDUyNyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiB2b2lkICptYWxsb2Mg
KHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7Cgpl
eHRlcm4gdm9pZCAqY2FsbG9jIChzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSkKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCmV4dGVybiB2b2lkICpy
ZWFsbG9jICh2b2lkICpfX3B0ciwgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lkIGZyZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIHZvaWQgY2ZyZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoKIyAxICIv
dXNyL2luY2x1ZGUvYWxsb2NhLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDMK
IyAxICIuLi9zdGxwb3J0L3N0ZGRlZi5oIiAxIDMKIyAyMyAiLi4vc3RscG9ydC9zdGRkZWYuaCIg
MwojIDEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzMuMi9pbmNsdWRlL3N0ZGRl
Zi5oIiAxIDMKIyAyNCAiLi4vc3RscG9ydC9zdGRkZWYuaCIgMiAzCiMgMjYgIi91c3IvaW5jbHVk
ZS9hbGxvY2EuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgpleHRlcm4gdm9pZCAqYWxsb2NhIChz
aXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKCgp9CiMgNTQ3ICIvdXNyL2luY2x1ZGUvc3RkbGli
LmgiIDIgMwoKCgoKZXh0ZXJuIHZvaWQgKnZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiBpbnQgcG9zaXhfbWVtYWxp
Z24gKHZvaWQgKipfX21lbXB0ciwgc2l6ZV90IF9fYWxpZ25tZW50LCBzaXplX3QgX19zaXplKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCmV4dGVybiB2b2lk
IGFib3J0ICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoK
CmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5jKSAodm9pZCkpIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGludCBvbl9leGl0ICh2b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICpf
X2FyZyksIHZvaWQgKl9fYXJnKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIGV4aXQg
KGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoK
CgoKZXh0ZXJuIHZvaWQgX0V4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIGNoYXIgKmdldGVudiAoX19jb25zdCBjaGFy
ICpfX25hbWUpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52IChfX2Nv
bnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdXRlbnYgKGNoYXIg
Kl9fc3RyaW5nKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHNldGVudiAoX19jb25zdCBjaGFy
ICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwgaW50IF9fcmVwbGFjZSkKICAgICB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHVuc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cg
KCk7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQpIHRocm93ICgpOwojIDYyMyAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9fdGVtcGxh
dGUpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBta3N0ZW1wIChjaGFyICpfX3RlbXBsYXRl
KSB0aHJvdyAoKTsKIyA2NDAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IG1r
c3RlbXA2NCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjUwICIvdXNyL2luY2x1ZGUv
c3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGludCBzeXN0ZW0gKF9fY29uc3QgY2hhciAqX19jb21tYW5kKSB0aHJv
dyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmNhbm9uaWNhbGl6ZV9maWxlX25hbWUgKF9fY29uc3Qg
Y2hhciAqX19uYW1lKSB0aHJvdyAoKTsKIyA2NzIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpl
eHRlcm4gY2hhciAqcmVhbHBhdGggKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX3Jlc29sdmVkKSB0aHJvdyAo
KTsKCgoKCgoKdHlwZWRlZiBpbnQgKCpfX2NvbXBhcl9mbl90KSAoX19jb25zdCB2b2lkICosIF9f
Y29uc3Qgdm9pZCAqKTsKCgp0eXBlZGVmIF9fY29tcGFyX2ZuX3QgY29tcGFyaXNvbl9mbl90OwoK
CgoKCmV4dGVybiB2b2lkICpic2VhcmNoIChfX2NvbnN0IHZvaWQgKl9fa2V5LCBfX2NvbnN0IHZv
aWQgKl9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25tZW1iLCBzaXplX3Qg
X19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIHZvaWQgcXNvcnQgKHZv
aWQgKl9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAg
ICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIGludCBhYnMgKGludCBfX3gp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxh
YnMgKGxvbmcgaW50IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
X19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBsbGFicyAobG9uZyBsb25nIGludCBf
X3gpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgpleHRl
cm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbGRpdl90IGxkaXYgKGxvbmcgaW50IF9f
bnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRlcm4gbGxkaXZfdCBsbGRpdiAobG9uZyBsb25n
IGludCBfX251bWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxv
bmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OwojIDcyOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICplY3Z0IChkb3Vi
bGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAg
ICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGNoYXIgKmZjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmlj
dCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhy
b3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdp
dCwgY2hhciAqX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRv
dWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jl
c3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4g
Y2hhciAqcWZjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAg
ICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2ln
bikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpxZ2N2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50
IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGVjdnRfciAo
ZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAg
ICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0
IF9fYnVmLAogICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBmY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmlj
dCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hh
ciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhy
b3cgKCk7CgpleHRlcm4gaW50IHFlY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25k
aWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpf
X3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9f
YnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IHFmY3Z0X3IgKGxvbmcgZG91
YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVz
dHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAg
ICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKCgpl
eHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBtYnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsCiAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHdjdG9tYiAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpIHRo
cm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
cHdjcywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
cywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IHdjc3RvbWJzIChjaGFyICpf
X3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fcHdjcywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVy
biBpbnQgcnBtYXRjaCAoX19jb25zdCBjaGFyICpfX3Jlc3BvbnNlKSB0aHJvdyAoKTsKIyA4MDgg
Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IGdldHN1Ym9wdCAoY2hhciAqKl9f
cmVzdHJpY3QgX19vcHRpb25wLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19jb25zdCAq
X19yZXN0cmljdCBfX3Rva2VucywKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fdmFsdWVwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBzZXRrZXkgKF9fY29uc3Qg
Y2hhciAqX19rZXkpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwb3NpeF9vcGVucHQgKGlu
dCBfX29mbGFnKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZ3JhbnRwdCAoaW50IF9fZmQp
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVubG9ja3B0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gY2hhciAqcHRzbmFtZSAoaW50IF9fZmQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4g
aW50IHB0c25hbWVfciAoaW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0cHQgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4g
aW50IGdldGxvYWRhdmcgKGRvdWJsZSBfX2xvYWRhdmdbXSwgaW50IF9fbmVsZW0pIHRocm93ICgp
OwoKCgoKCn0KIyAyNCAiLi4vc3RscG9ydC9zdGRsaWIuaCIgMiAzCiMgNTMgIi91c3IvaW5jbHVk
ZS9nKysvY3N0ZGxpYiIgMiAzCiMgODQgIi91c3IvaW5jbHVkZS9nKysvY3N0ZGxpYiIgMwpuYW1l
c3BhY2Ugc3RkCnsKICB1c2luZyA6OmRpdl90OwogIHVzaW5nIDo6bGRpdl90OwoKICB1c2luZyA6
OmFib3J0OwogIHVzaW5nIDo6YWJzOwogIHVzaW5nIDo6YXRleGl0OwogIHVzaW5nIDo6YXRvZjsK
ICB1c2luZyA6OmF0b2k7CiAgdXNpbmcgOjphdG9sOwogIHVzaW5nIDo6YnNlYXJjaDsKICB1c2lu
ZyA6OmNhbGxvYzsKICB1c2luZyA6OmRpdjsKICB1c2luZyA6OmV4aXQ7CiAgdXNpbmcgOjpmcmVl
OwogIHVzaW5nIDo6Z2V0ZW52OwogIHVzaW5nIDo6bGFiczsKICB1c2luZyA6OmxkaXY7CiAgdXNp
bmcgOjptYWxsb2M7CiAgdXNpbmcgOjptYmxlbjsKICB1c2luZyA6Om1ic3Rvd2NzOwogIHVzaW5n
IDo6bWJ0b3djOwogIHVzaW5nIDo6cXNvcnQ7CiAgdXNpbmcgOjpyYW5kOwogIHVzaW5nIDo6cmVh
bGxvYzsKICB1c2luZyA6OnNyYW5kOwogIHVzaW5nIDo6c3RydG9kOwogIHVzaW5nIDo6c3RydG9s
OwogIHVzaW5nIDo6c3RydG91bDsKICB1c2luZyA6OnN5c3RlbTsKICB1c2luZyA6Ondjc3RvbWJz
OwogIHVzaW5nIDo6d2N0b21iOwoKICBpbmxpbmUgbG9uZwogIGFicyhsb25nIF9faSkgeyByZXR1
cm4gbGFicyhfX2kpOyB9CgogIGlubGluZSBsZGl2X3QKICBkaXYobG9uZyBfX2ksIGxvbmcgX19q
KSB7IHJldHVybiBsZGl2KF9faSwgX19qKTsgfQp9CiMgMTM2ICIvdXNyL2luY2x1ZGUvZysrL2Nz
dGRsaWIiIDMKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdXNpbmcgOjpsbGRpdl90OwogIHVzaW5n
IDo6X0V4aXQ7CgogIGlubGluZSBsb25nIGxvbmcKICBhYnMobG9uZyBsb25nIF9feCkgeyByZXR1
cm4gX194ID49IDAgPyBfX3ggOiAtX194OyB9CgogIGlubGluZSBsb25nIGxvbmcKICBsbGFicyhs
b25nIGxvbmcgX194KSB7IHJldHVybiBfX3ggPj0gMCA/IF9feCA6IC1fX3g7IH0KCiAgaW5saW5l
IGxsZGl2X3QKICBkaXYobG9uZyBsb25nIF9fbiwgbG9uZyBsb25nIF9fZCkKICB7IGxsZGl2X3Qg
X19xOyBfX3EucXVvdCA9IF9fbiAvIF9fZDsgX19xLnJlbSA9IF9fbiAlIF9fZDsgcmV0dXJuIF9f
cTsgfQoKICBpbmxpbmUgbGxkaXZfdAogIGxsZGl2KGxvbmcgbG9uZyBfX24sIGxvbmcgbG9uZyBf
X2QpCiAgeyBsbGRpdl90IF9fcTsgX19xLnF1b3QgPSBfX24gLyBfX2Q7IF9fcS5yZW0gPSBfX24g
JSBfX2Q7IHJldHVybiBfX3E7IH0KCiAgdXNpbmcgOjphdG9sbDsKICB1c2luZyA6OnN0cnRvZjsK
ICB1c2luZyA6OnN0cnRvbGw7CiAgdXNpbmcgOjpzdHJ0b3VsbDsKICB1c2luZyA6OnN0cnRvbGQ7
Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4eDo6bGxkaXZfdDsKICB1c2luZyBf
X2dudV9jeHg6Ol9FeGl0OwogIHVzaW5nIF9fZ251X2N4eDo6YWJzOwogIHVzaW5nIF9fZ251X2N4
eDo6bGxhYnM7CiAgdXNpbmcgX19nbnVfY3h4OjpkaXY7CiAgdXNpbmcgX19nbnVfY3h4OjpsbGRp
djsKICB1c2luZyBfX2dudV9jeHg6OmF0b2xsOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG9mOwog
IHVzaW5nIF9fZ251X2N4eDo6c3RydG9sbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvdWxsOwog
IHVzaW5nIF9fZ251X2N4eDo6c3RydG9sZDsKfQojIDI2ICIuLi9zdGxwb3J0L2NzdGRsaWIiIDIK
IyA0MSAiLi4vc3RscG9ydC9jc3RkbGliIgpuYW1lc3BhY2UgX1NUTCB7CnVzaW5nIF9fc3RkX2Fs
aWFzOjpkaXZfdDsKdXNpbmcgX19zdGRfYWxpYXM6OmxkaXZfdDsKdXNpbmcgX19zdGRfYWxpYXM6
OnNpemVfdDsKCgp1c2luZyBfX3N0ZF9hbGlhczo6YWJvcnQ7CnVzaW5nIF9fc3RkX2FsaWFzOjph
dGV4aXQ7CnVzaW5nIF9fc3RkX2FsaWFzOjpleGl0Owp1c2luZyBfX3N0ZF9hbGlhczo6Z2V0ZW52
Owp1c2luZyBfX3N0ZF9hbGlhczo6Y2FsbG9jOwp1c2luZyBfX3N0ZF9hbGlhczo6ZnJlZTsKdXNp
bmcgX19zdGRfYWxpYXM6Om1hbGxvYzsKdXNpbmcgX19zdGRfYWxpYXM6OnJlYWxsb2M7CnVzaW5n
IF9fc3RkX2FsaWFzOjphdG9mOwp1c2luZyBfX3N0ZF9hbGlhczo6YXRvaTsKdXNpbmcgX19zdGRf
YWxpYXM6OmF0b2w7CnVzaW5nIF9fc3RkX2FsaWFzOjptYmxlbjsKdXNpbmcgX19zdGRfYWxpYXM6
Om1ic3Rvd2NzOwp1c2luZyBfX3N0ZF9hbGlhczo6bWJ0b3djOwp1c2luZyBfX3N0ZF9hbGlhczo6
c3RydG9kOwp1c2luZyBfX3N0ZF9hbGlhczo6c3RydG9sOwp1c2luZyBfX3N0ZF9hbGlhczo6c3Ry
dG91bDsKdXNpbmcgX19zdGRfYWxpYXM6OnN5c3RlbTsKCgoKCgp1c2luZyBfX3N0ZF9hbGlhczo6
YnNlYXJjaDsKdXNpbmcgX19zdGRfYWxpYXM6OnFzb3J0OwoKCnVzaW5nIF9fc3RkX2FsaWFzOjph
YnM7Cgp1c2luZyBfX3N0ZF9hbGlhczo6ZGl2Owp1c2luZyBfX3N0ZF9hbGlhczo6bGFiczsKdXNp
bmcgX19zdGRfYWxpYXM6OmxkaXY7CnVzaW5nIF9fc3RkX2FsaWFzOjpyYW5kOwp1c2luZyBfX3N0
ZF9hbGlhczo6c3JhbmQ7Cgp9CgoKbmFtZXNwYWNlIF9TVEwgewojIDEwMyAiLi4vc3RscG9ydC9j
c3RkbGliIgp9CgoKIyAxICIuLi9zdGxwb3J0L3N0bC9fZXBpbG9nLmgiIDEKIyAxNCAiLi4vc3Rs
cG9ydC9zdGwvX2VwaWxvZy5oIgojIDEgIi4uL3N0bHBvcnQvc3RsL19jb25maWdfY29tcGF0X3Bv
c3QuaCIgMQojIDE1ICIuLi9zdGxwb3J0L3N0bC9fZXBpbG9nLmgiIDIKIyAxMDcgIi4uL3N0bHBv
cnQvY3N0ZGxpYiIgMgojIDI4ICIuLi9zdGxwb3J0L3N0bC9fbG9jYWxlLmgiIDIKCgoKIyAxICIu
Li9zdGxwb3J0L3N0bC9fdGhyZWFkcy5oIiAxCiMgNTMgIi4uL3N0bHBvcnQvc3RsL190aHJlYWRz
LmgiCiAgdHlwZWRlZiBzaXplX3QgX19zdGxfYXRvbWljX3Q7CiMgNzQgIi4uL3N0bHBvcnQvc3Rs
L190aHJlYWRzLmgiCiMgMSAiLi4vc3RscG9ydC9wdGhyZWFkLmgiIDEKIyAxOCAiLi4vc3RscG9y
dC9wdGhyZWFkLmgiCiMgMSAiLi4vc3RscG9ydC9zdGwvX3Byb2xvZy5oIiAxCiMgMTkgIi4uL3N0
bHBvcnQvcHRocmVhZC5oIiAyCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDEg
MwojIDIwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3NjaGVk
LmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMwojIDEgIi4uL3N0bHBvcnQvdGlt
ZS5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNs
dWRlL2JpdHMvc2NoZWQuaCIgMSAzCiMgNDcgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMK
c3RydWN0IHNjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2NoZWRfcHJpb3JpdHk7CiAgfTsKCmV4
dGVybiAiQyIgewoKCgpleHRlcm4gaW50IGNsb25lIChpbnQgKCpfX2ZuKSAodm9pZCAqX19hcmcp
LCB2b2lkICpfX2NoaWxkX3N0YWNrLAogICAgICAgICAgICAgICAgICBpbnQgX19mbGFncywgdm9p
ZCAqX19hcmcpIHRocm93ICgpOwoKCn0KIyAzMyAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIgMwoK
CgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBzY2hlZF9zZXRwYXJhbSAoX19waWRfdCBfX3Bp
ZCwgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBzY2hlZF9nZXRwYXJhbSAoX19waWRfdCBfX3BpZCwgc3RydWN0IHNjaGVkX3Bh
cmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX3NldHNjaGVkdWxlciAo
X19waWRfdCBfX3BpZCwgaW50IF9fcG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgc2NoZWRfZ2V0c2NoZWR1bGVyIChfX3BpZF90IF9fcGlkKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHNjaGVkX3lpZWxkICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX2dl
dF9wcmlvcml0eV9tYXggKGludCBfX2FsZ29yaXRobSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBz
Y2hlZF9nZXRfcHJpb3JpdHlfbWluIChpbnQgX19hbGdvcml0aG0pIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgc2NoZWRfcnJfZ2V0X2ludGVydmFsIChfX3BpZF90IF9fcGlkLCBzdHJ1Y3QgdGltZXNw
ZWMgKl9fdCkgdGhyb3cgKCk7Cgp9CiMgMjEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwoj
IDEgIi4uL3N0bHBvcnQvdGltZS5oIiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIg
MiAzCgoKIyAxICIuLi9zdGxwb3J0L3NpZ25hbC5oIiAxIDMKIyAyMyAiLi4vc3RscG9ydC9zaWdu
YWwuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVk
ZS9zaWduYWwuaCIgMwpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0
LmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDIgMwojIDM3MSAiL3Vzci9pbmNs
dWRlL3NpZ25hbC5oIiAzCn0KIyAyNCAiLi4vc3RscG9ydC9zaWduYWwuaCIgMiAzCiMgMjUgIi91
c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0
eXBlcy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvaW5pdHNwaW4uaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgi
IDIgMwoKCmV4dGVybiAiQyIgewojIDU5ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmVudW0K
ewogIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFLAoKICBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRAoK
fTsKCmVudW0KewogIFBUSFJFQURfSU5IRVJJVF9TQ0hFRCwKCiAgUFRIUkVBRF9FWFBMSUNJVF9T
Q0hFRAoKfTsKCmVudW0KewogIFBUSFJFQURfU0NPUEVfU1lTVEVNLAoKICBQVEhSRUFEX1NDT1BF
X1BST0NFU1MKCn07CgplbnVtCnsKICBQVEhSRUFEX01VVEVYX1RJTUVEX05QLAogIFBUSFJFQURf
TVVURVhfUkVDVVJTSVZFX05QLAogIFBUSFJFQURfTVVURVhfRVJST1JDSEVDS19OUCwKICBQVEhS
RUFEX01VVEVYX0FEQVBUSVZFX05QCgogICwKICBQVEhSRUFEX01VVEVYX05PUk1BTCA9IFBUSFJF
QURfTVVURVhfVElNRURfTlAsCiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUgPSBQVEhSRUFEX01V
VEVYX1JFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0sgPSBQVEhSRUFEX01V
VEVYX0VSUk9SQ0hFQ0tfTlAsCiAgUFRIUkVBRF9NVVRFWF9ERUZBVUxUID0gUFRIUkVBRF9NVVRF
WF9OT1JNQUwKCgoKICAsIFBUSFJFQURfTVVURVhfRkFTVF9OUCA9IFBUSFJFQURfTVVURVhfQURB
UFRJVkVfTlAKCn07CgplbnVtCnsKICBQVEhSRUFEX1BST0NFU1NfUFJJVkFURSwKCiAgUFRIUkVB
RF9QUk9DRVNTX1NIQVJFRAoKfTsKCgplbnVtCnsKICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfUkVB
REVSX05QLAogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9XUklURVJfTlAsCiAgUFRIUkVBRF9SV0xP
Q0tfUFJFRkVSX1dSSVRFUl9OT05SRUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9SV0xPQ0tfREVGQVVM
VF9OUCA9IFBUSFJFQURfUldMT0NLX1BSRUZFUl9XUklURVJfTlAKfTsKIyAxMzEgIi91c3IvaW5j
bHVkZS9wdGhyZWFkLmgiIDMKc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyCnsKICB2b2lk
ICgqX19yb3V0aW5lKSAodm9pZCAqKTsKICB2b2lkICpfX2FyZzsKICBpbnQgX19jYW5jZWx0eXBl
OwogIHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19wcmV2Owp9OwoKCgplbnVtCnsK
ICBQVEhSRUFEX0NBTkNFTF9FTkFCTEUsCgogIFBUSFJFQURfQ0FOQ0VMX0RJU0FCTEUKCn07CmVu
dW0KewogIFBUSFJFQURfQ0FOQ0VMX0RFRkVSUkVELAoKICBQVEhSRUFEX0NBTkNFTF9BU1lOQ0hS
T05PVVMKCn07CiMgMTYzICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRo
cmVhZF9jcmVhdGUgKHB0aHJlYWRfdCAqX19yZXN0cmljdCBfX3RocmVhZHAsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICooKl9fc3RhcnRfcm91dGluZSkgKHZv
aWQgKiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fcmVzdHJpY3QgX19hcmcp
IHRocm93ICgpOwoKCmV4dGVybiBwdGhyZWFkX3QgcHRocmVhZF9zZWxmICh2b2lkKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfZXF1YWwgKHB0aHJlYWRfdCBfX3RocmVhZDEsIHB0aHJl
YWRfdCBfX3RocmVhZDIpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHB0aHJlYWRfZXhpdCAodm9p
ZCAqX19yZXR2YWwpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykp
OwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2pvaW4gKHB0aHJlYWRfdCBfX3RoLCB2b2lkICoqX190
aHJlYWRfcmV0dXJuKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfZGV0YWNoIChw
dGhyZWFkX3QgX190aCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9p
bml0IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl
YWRfYXR0cl9kZXN0cm95IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2RldGFjaHN0
YXRlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRkZXRhY2hzdGF0ZSAo
X19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50ICpfX2RldGFjaHN0YXRlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBhcmFtIChwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBf
X2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3Ry
dWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fcGFyYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dl
dHNjaGVkcGFyYW0gKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QgX19wYXJh
bSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGlj
eSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fcG9saWN5KQogICAgIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcG9saWN5IChfX2NvbnN0IHB0aHJlYWRf
YXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2F0dHIsIGludCAqX19yZXN0cmljdCBfX3BvbGljeSkKICAgICB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHB0aHJlYWRfYXR0cl9zZXRpbmhlcml0c2NoZWQgKHB0aHJlYWRfYXR0cl90ICpfX2F0
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9faW5oZXJp
dCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0aW5oZXJpdHNjaGVkIChf
X2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19hdHRyLCBpbnQgKl9fcmVzdHJpY3QgX19pbmhlcml0KQogICAg
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjb3BlIChwdGhyZWFkX2F0
dHJfdCAqX19hdHRyLCBpbnQgX19zY29wZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0
aHJlYWRfYXR0cl9nZXRzY29wZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBf
X2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3Qg
X19zY29wZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGd1YXJkc2l6
ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgX19ndWFyZHNpemUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh
ZF9hdHRyX2dldGd1YXJkc2l6ZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgc2l6ZV90ICpfX3Jl
c3RyaWN0IF9fZ3VhcmRzaXplKQogICAgIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJl
YWRfYXR0cl9zZXRzdGFja2FkZHIgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19zdGFja2FkZHIpIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkciAoX19jb25zdCBwdGhyZWFkX2F0
dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
YXR0ciwgdm9pZCAqKl9fcmVzdHJpY3QgX19zdGFja2FkZHIpCiAgICAgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2sgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIs
IHZvaWQgKl9fc3RhY2thZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRz
dGFjayAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqX19yZXN0cmljdCBfX3N0YWNrYWRkciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX3N0
YWNrc2l6ZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2tz
aXplIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBfX3N0YWNrc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhy
ZWFkX2F0dHJfZ2V0c3RhY2tzaXplIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBzaXplX3QgKl9f
cmVzdHJpY3QgX19zdGFja3NpemUpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVh
ZF9nZXRhdHRyX25wIChwdGhyZWFkX3QgX190aCwgcHRocmVhZF9hdHRyX3QgKl9fYXR0cikgdGhy
b3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRzY2hlZHBhcmFtIChwdGhyZWFkX3Qg
X190YXJnZXRfdGhyZWFkLCBpbnQgX19wb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkKICAgICB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0c2NoZWRwYXJhbSAocHRocmVhZF90IF9fdGFyZ2V0
X3RocmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmlj
dCBfX3BvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2hl
ZF9wYXJhbSAqX19yZXN0cmljdCBfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IHB0aHJlYWRfZ2V0Y29uY3VycmVuY3kgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9zZXRjb25jdXJyZW5jeSAoaW50IF9fbGV2ZWwpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu
IGludCBwdGhyZWFkX3lpZWxkICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhy
ZWFkX211dGV4X2luaXQgKHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpf
X3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX211dGV4X2F0dHIpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9kZXN0cm95IChwdGhyZWFkX211dGV4
X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF90cnlsb2Nr
IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh
ZF9tdXRleF9sb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IHB0aHJlYWRfbXV0ZXhfdGltZWRsb2NrIChwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJp
Y3QgX19tdXRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBz
dHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3Vu
bG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX211dGV4YXR0cl9pbml0IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSAocHRocmVhZF9t
dXRleGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhh
dHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJl
ZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9zZXRwc2hhcmVkIChw
dGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhy
ZWFkX211dGV4YXR0cl9zZXR0eXBlIChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsIGludCBf
X2tpbmQpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXR0
eXBlIChfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIGludCAqX19yZXN0cmljdCBfX2tpbmQp
IHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfaW5pdCAocHRocmVhZF9j
b25kX3QgKl9fcmVzdHJpY3QgX19jb25kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbmRfYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2Nv
bmRfZGVzdHJveSAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2NvbmRfc2lnbmFsIChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9icm9hZGNhc3QgKHB0aHJlYWRfY29uZF90ICpfX2Nv
bmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF93YWl0IChwdGhyZWFkX2Nv
bmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0
aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
aW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9f
Y29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3Qg
Kl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRf
Y29uZGF0dHJfaW5pdCAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9kZXN0cm95IChwdGhyZWFkX2NvbmRhdHRyX3QgKl9f
YXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2dldHBzaGFyZWQg
KF9fY29uc3QgcHRocmVhZF9jb25kYXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfY29uZGF0dHJfdCAq
X19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNo
YXJlZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2luaXQgKHB0
aHJlYWRfcndsb2NrX3QgKl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19yZXN0cmljdAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX3J3bG9ja19kZXN0cm95IChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19yZGxvY2sgKHB0aHJlYWRfcndsb2Nr
X3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RyeXJk
bG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IHB0aHJlYWRfcndsb2NrX3RpbWVkcmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3Jlc3RyaWN0
IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2Fic3RpbWUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfcnds
b2NrX3dybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgcHRocmVhZF9yd2xvY2tfdHJ5d3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9j
aykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdGltZWR3cmxvY2sgKHB0
aHJlYWRfcndsb2NrX3QgKl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdW5sb2NrIChwdGhyZWFkX3J3bG9ja190ICpf
X3J3bG9jaykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfaW5p
dCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw
dGhyZWFkX3J3bG9ja2F0dHJfZGVzdHJveSAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0cikg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZ2V0cHNoYXJlZCAoX19j
b25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX3J3bG9ja2F0
dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9n
ZXRraW5kX25wIChfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19wcmVmKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9zZXRraW5kX25wIChwdGhyZWFkX3J3bG9j
a2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgX19wcmVmKSB0aHJvdyAoKTsKIyA1MDkgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMK
ZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5faW5pdCAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2ss
IGludCBfX3BzaGFyZWQpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5f
ZGVzdHJveSAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgcHRocmVhZF9zcGluX2xvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl90cnlsb2NrIChwdGhyZWFkX3NwaW5sb2NrX3Qg
Kl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5fdW5sb2NrIChwdGhy
ZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRf
YmFycmllcl9pbml0IChwdGhyZWFkX2JhcnJpZXJfdCAqX19yZXN0cmljdCBfX2JhcnJpZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9iYXJyaWVyYXR0
cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwg
dW5zaWduZWQgaW50IF9fY291bnQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJp
ZXJfZGVzdHJveSAocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmllcikgdGhyb3cgKCk7CgpleHRl
cm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfaW5pdCAocHRocmVhZF9iYXJyaWVyYXR0cl90ICpf
X2F0dHIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJhdHRyX2Rlc3Ryb3kg
KHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRo
cmVhZF9iYXJyaWVyYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfYmFycmllcmF0dHJf
dCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0
IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAq
X19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJp
ZXJhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgdGhyb3cg
KCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcl93YWl0IChwdGhyZWFkX2JhcnJpZXJfdCAq
X19iYXJyaWVyKSB0aHJvdyAoKTsKIyA1NTYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0
ZXJuIGludCBwdGhyZWFkX2tleV9jcmVhdGUgKHB0aHJlYWRfa2V5X3QgKl9fa2V5LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fZGVzdHJfZnVuY3Rpb24pICh2b2lkICop
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2RlbGV0ZSAocHRocmVhZF9rZXlf
dCBfX2tleSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldHNwZWNpZmljIChwdGhy
ZWFkX2tleV90IF9fa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
dm9pZCAqX19wb2ludGVyKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqcHRocmVhZF9nZXRzcGVj
aWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSkgdGhyb3cgKCk7CiMgNTc2ICIvdXNyL2luY2x1ZGUv
cHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9vbmNlIChwdGhyZWFkX29uY2VfdCAqX19v
bmNlX2NvbnRyb2wsCiAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19pbml0X3JvdXRp
bmUpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWxz
dGF0ZSAoaW50IF9fc3RhdGUsIGludCAqX19vbGRzdGF0ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgcHRocmVhZF9zZXRjYW5jZWx0eXBlIChpbnQgX190eXBlLCBpbnQgKl9fb2xkdHlwZSkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NhbmNlbCAocHRocmVhZF90IF9fY2FuY2VsdGhy
ZWFkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHB0aHJlYWRfdGVzdGNhbmNlbCAodm9pZCkg
dGhyb3cgKCk7CiMgNjEwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiB2b2lkIF9w
dGhyZWFkX2NsZWFudXBfcHVzaCAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1
ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19yb3V0aW5l
KSAodm9pZCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2Fy
ZykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3BvcCAoc3Ry
dWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBfX2V4ZWN1dGUpIHRocm93ICgpOwojIDYzMSAiL3Vzci9pbmNs
dWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3B1c2hfZGVmZXIg
KHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hcmcpIHRocm93
ICgpOwojIDY0MiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVh
ZF9jbGVhbnVwX3BvcF9yZXN0b3JlIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9f
YnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19l
eGVjdXRlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0Y3B1Y2xvY2tpZCAo
cHRocmVhZF90IF9fdGhyZWFkX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2xvY2tpZF90ICpfX2Nsb2NrX2lkKSB0aHJvdyAoKTsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvc2lndGhyZWFkLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvYml0cy9zaWd0aHJlYWQuaCIg
MwpleHRlcm4gaW50IHB0aHJlYWRfc2lnbWFzayAoaW50IF9faG93LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9fbmV3bWFzaywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19vbGRtYXNr
KXRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9raWxsIChwdGhyZWFkX3QgX190aHJlYWRp
ZCwgaW50IF9fc2lnbm8pIHRocm93ICgpOwojIDY1NiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIg
MiAzCiMgNjcxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9h
dGZvcmsgKHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdm9pZCAoKl9fcGFyZW50KSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv
aWQgKCpfX2NoaWxkKSAodm9pZCkpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgcHRocmVhZF9r
aWxsX290aGVyX3RocmVhZHNfbnAgKHZvaWQpIHRocm93ICgpOwoKfQojIDI3ICIuLi9zdGxwb3J0
L3B0aHJlYWQuaCIgMgoKCgoKIyAxICIuLi9zdGxwb3J0L3N0bC9fZXBpbG9nLmgiIDEKIyAxNCAi
Li4vc3RscG9ydC9zdGwvX2VwaWxvZy5oIgojIDEgIi4uL3N0bHBvcnQvc3RsL19jb25maWdfY29t
cGF0X3Bvc3QuaCIgMQojIDE1ICIuLi9zdGxwb3J0L3N0bC9fZXBpbG9nLmgiIDIKIyAzMiAiLi4v
c3RscG9ydC9wdGhyZWFkLmgiIDIKIyA3NSAiLi4vc3RscG9ydC9zdGwvX3RocmVhZHMuaCIgMgoj
IDE5OCAiLi4vc3RscG9ydC9zdGwvX3RocmVhZHMuaCIKbmFtZXNwYWNlIF9TVEwgewoKCnRlbXBs
YXRlIDxpbnQgX19pbnN0PgpzdHJ1Y3QgX1NUTFBfbXV0ZXhfc3BpbiB7CiAgZW51bSB7IF9fbG93
X21heCA9IDMwLCBfX2hpZ2hfbWF4ID0gMTAwMCB9OwoKICBzdGF0aWMgdW5zaWduZWQgX19tYXg7
CiAgc3RhdGljIHVuc2lnbmVkIF9fbGFzdDsKICBzdGF0aWMgdm9pZCBfTV9kb19sb2NrKHZvbGF0
aWxlIF9fc3RsX2F0b21pY190KiBfX2xvY2spOwogIHN0YXRpYyB2b2lkIF9TX25zZWNfc2xlZXAo
aW50IF9fbG9nX25zZWMpOwp9OwojIDIyNiAiLi4vc3RscG9ydC9zdGwvX3RocmVhZHMuaCIKc3Ry
dWN0IF9TVExQX211dGV4X2Jhc2UKewojIDI2NSAiLi4vc3RscG9ydC9zdGwvX3RocmVhZHMuaCIK
ICBwdGhyZWFkX211dGV4X3QgX01fbG9jazsKICBpbmxpbmUgdm9pZCBfTV9pbml0aWFsaXplKCkg
ewogICAgcHRocmVhZF9tdXRleF9pbml0KCZfTV9sb2NrLDApOwogIH0KICBpbmxpbmUgdm9pZCBf
TV9kZXN0cm95KCkgewogICAgcHRocmVhZF9tdXRleF9kZXN0cm95KCZfTV9sb2NrKTsKICB9CiAg
aW5saW5lIHZvaWQgX01fYWNxdWlyZV9sb2NrKCkgewoKCgoKICAgIHB0aHJlYWRfbXV0ZXhfbG9j
aygmX01fbG9jayk7CiAgfQogIGlubGluZSB2b2lkIF9NX3JlbGVhc2VfbG9jaygpIHsgcHRocmVh
ZF9tdXRleF91bmxvY2soJl9NX2xvY2spOyB9CiMgMzI3ICIuLi9zdGxwb3J0L3N0bC9fdGhyZWFk
cy5oIgp9OwoKCgoKCgpzdHJ1Y3QgX1NUTFBfbXV0ZXhfaW5kaXJlY3QKewogIHZvaWQqIF9NX2xv
Y2s7CgoKICBpbmxpbmUgdm9pZCBfTV9pbml0aWFsaXplKCkgewogICAgX01fbG9jayA9ICh2b2lk
KilfX3N0ZF9hbGlhczo6Y2FsbG9jKDEsc2l6ZW9mKHB0aHJlYWRfbXV0ZXhfdCkpOwogICAgcHRo
cmVhZF9tdXRleF9pbml0KChwdGhyZWFkX211dGV4X3QqKV9NX2xvY2ssMCk7CiAgfQogIGlubGlu
ZSB2b2lkIF9NX2Rlc3Ryb3koKSB7CiAgICBwdGhyZWFkX211dGV4X2Rlc3Ryb3koKHB0aHJlYWRf
bXV0ZXhfdCopX01fbG9jayk7CiAgICBmcmVlKChjaGFyKilfTV9sb2NrKTsKICB9CiAgaW5saW5l
IHZvaWQgX01fYWNxdWlyZV9sb2NrKCkgewogICAgcHRocmVhZF9tdXRleF9sb2NrKChwdGhyZWFk
X211dGV4X3QqKV9NX2xvY2spOwogIH0KICBpbmxpbmUgdm9pZCBfTV9yZWxlYXNlX2xvY2soKSB7
IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKChwdGhyZWFkX211dGV4X3QqKV9NX2xvY2spOyB9CiMgMzg0
ICIuLi9zdGxwb3J0L3N0bC9fdGhyZWFkcy5oIgp9OwoKCgoKCnN0cnVjdCBfU1RMUF9tdXRleCA6
IHB1YmxpYyBfU1RMUF9tdXRleF9pbmRpcmVjdCB7CiAgaW5saW5lIF9TVExQX211dGV4ICgpIHsK
ICAgIF9NX2luaXRpYWxpemUoKTsKICB9CiAgaW5saW5lIH5fU1RMUF9tdXRleCAoKSB7CiAgICBf
TV9kZXN0cm95KCk7CiAgfQpwcml2YXRlOgogIF9TVExQX211dGV4KGNvbnN0IF9TVExQX211dGV4
Jik7CiAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1NUTFBfbXV0ZXgmKTsKfTsKCgoKCgpzdHJ1Y3Qg
X1JlZmNvdW50X0Jhc2UKewoKICB2b2xhdGlsZSBfX3N0bF9hdG9taWNfdCBfTV9yZWZfY291bnQ7
CgoKICBfU1RMUF9tdXRleCBfTV9tdXRleDsKCgoKICBfUmVmY291bnRfQmFzZShfX3N0bF9hdG9t
aWNfdCBfX24pIDogX01fcmVmX2NvdW50KF9fbikge30KCgoKCgoKICB2b2lkIF9NX2luY3IoKSB7
CiAgICBfTV9tdXRleC5fTV9hY3F1aXJlX2xvY2soKTsKICAgICsrX01fcmVmX2NvdW50OwogICAg
X01fbXV0ZXguX01fcmVsZWFzZV9sb2NrKCk7CiAgfQogIHZvaWQgX01fZGVjcigpIHsKICAgIF9N
X211dGV4Ll9NX2FjcXVpcmVfbG9jaygpOwogICAgLS1fTV9yZWZfY291bnQ7CiAgICBfTV9tdXRl
eC5fTV9yZWxlYXNlX2xvY2soKTsKICB9CgoKCgp9OwojIDQ0OSAiLi4vc3RscG9ydC9zdGwvX3Ro
cmVhZHMuaCIKdGVtcGxhdGU8aW50IF9fZHVtbXk+CnN0cnVjdCBfU3dhcF9sb2NrX3N0cnVjdCB7
CiAgc3RhdGljIF9TVExQX211dGV4X2Jhc2UgX1Nfc3dhcF9sb2NrOwp9OwoKCgoKCmlubGluZSBf
X3N0bF9hdG9taWNfdCBfQXRvbWljX3N3YXAodm9sYXRpbGUgX19zdGxfYXRvbWljX3QgKiBfX3As
IF9fc3RsX2F0b21pY190IF9fcSkgewogIF9Td2FwX2xvY2tfc3RydWN0PDA+OjpfU19zd2FwX2xv
Y2suX01fYWNxdWlyZV9sb2NrKCk7CiAgX19zdGxfYXRvbWljX3QgX19yZXN1bHQgPSAqX19wOwog
ICpfX3AgPSBfX3E7CiAgX1N3YXBfbG9ja19zdHJ1Y3Q8MD46Ol9TX3N3YXBfbG9jay5fTV9yZWxl
YXNlX2xvY2soKTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KIyA0ODEgIi4uL3N0bHBvcnQvc3RsL190
aHJlYWRzLmgiCnN0cnVjdCBfU1RMUF9hdXRvX2xvY2sKewogIF9TVExQX211dGV4X2Jhc2UmIF9N
X2xvY2s7CgogIF9TVExQX2F1dG9fbG9jayhfU1RMUF9tdXRleF9iYXNlJiBfX2xvY2spIDogX01f
bG9jayhfX2xvY2spCiAgICB7IF9NX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH0KICB+X1NUTFBf
YXV0b19sb2NrKCkgeyBfTV9sb2NrLl9NX3JlbGVhc2VfbG9jaygpOyB9Cgpwcml2YXRlOgogIHZv
aWQgb3BlcmF0b3I9KGNvbnN0IF9TVExQX2F1dG9fbG9jayYpOwogIF9TVExQX2F1dG9fbG9jayhj
b25zdCBfU1RMUF9hdXRvX2xvY2smKTsKfTsKIyA1NDkgIi4uL3N0bHBvcnQvc3RsL190aHJlYWRz
LmgiCn0KCgojIDEgIi4uL3N0bHBvcnQvc3RsL190aHJlYWRzLmMiIDEKIyAzNiAiLi4vc3RscG9y
dC9zdGwvX3RocmVhZHMuYyIKdXNpbmcgX19zdGRfYWxpYXM6OnRpbWVfdDsKCiMgMSAiL3Vzci9p
bmNsdWRlL3N5cy90aW1lLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMwoj
IDEgIi4uL3N0bHBvcnQvdGltZS5oIiAxIDMKIyAxOCAiLi4vc3RscG9ydC90aW1lLmgiIDMKIyAx
ICIuLi9zdGxwb3J0L3N0bC9fcHJvbG9nLmgiIDEgMwojIDE5ICIuLi9zdGxwb3J0L3RpbWUuaCIg
MiAzCiMgMjcgIi4uL3N0bHBvcnQvdGltZS5oIiAzCiMgMSAiLi4vc3RscG9ydC9zdGwvX2VwaWxv
Zy5oIiAxIDMKIyAxNCAiLi4vc3RscG9ydC9zdGwvX2VwaWxvZy5oIiAzCiMgMSAiLi4vc3RscG9y
dC9zdGwvX2NvbmZpZ19jb21wYXRfcG9zdC5oIiAxIDMKIyAxNSAiLi4vc3RscG9ydC9zdGwvX2Vw
aWxvZy5oIiAyIDMKIyAyOCAiLi4vc3RscG9ydC90aW1lLmgiIDIgMwojIDI3ICIvdXNyL2luY2x1
ZGUvc3lzL3RpbWUuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiMg
MjkgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMKIyAzOCAiL3Vzci9pbmNsdWRlL3N5cy90
aW1lLmgiIDMKZXh0ZXJuICJDIiB7CiMgNTYgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzCnN0
cnVjdCB0aW1lem9uZQogIHsKICAgIGludCB0el9taW51dGVzd2VzdDsKICAgIGludCB0el9kc3R0
aW1lOwogIH07Cgp0eXBlZGVmIHN0cnVjdCB0aW1lem9uZSAqX19yZXN0cmljdCBfX3RpbWV6b25l
X3B0cl90OwojIDcyICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMwpleHRlcm4gaW50IGdldHRp
bWVvZmRheSAoc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190diwKICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fdGltZXpvbmVfcHRyX3QgX190eikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50
IHNldHRpbWVvZmRheSAoX19jb25zdCBzdHJ1Y3QgdGltZXZhbCAqX190diwKICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWV6b25lICpfX3R6KSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gaW50IGFkanRpbWUgKF9fY29uc3Qgc3RydWN0IHRpbWV2YWwgKl9fZGVsdGEsCiAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKl9fb2xkZGVsdGEpIHRocm93ICgpOwoK
CgoKZW51bSBfX2l0aW1lcl93aGljaAogIHsKCiAgICBJVElNRVJfUkVBTCA9IDAsCgoKICAgIElU
SU1FUl9WSVJUVUFMID0gMSwKCgoKICAgIElUSU1FUl9QUk9GID0gMgoKICB9OwoKCgpzdHJ1Y3Qg
aXRpbWVydmFsCiAgewoKICAgIHN0cnVjdCB0aW1ldmFsIGl0X2ludGVydmFsOwoKICAgIHN0cnVj
dCB0aW1ldmFsIGl0X3ZhbHVlOwogIH07CgoKCgoKCnR5cGVkZWYgaW50IF9faXRpbWVyX3doaWNo
X3Q7CgoKCgpleHRlcm4gaW50IGdldGl0aW1lciAoX19pdGltZXJfd2hpY2hfdCBfX3doaWNoLAog
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl0aW1lcnZhbCAqX192YWx1ZSkgdGhyb3cgKCk7
CgoKCgpleHRlcm4gaW50IHNldGl0aW1lciAoX19pdGltZXJfd2hpY2hfdCBfX3doaWNoLAogICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgaXRpbWVydmFsICpfX3Jlc3RyaWN0IF9f
bmV3LAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl0aW1lcnZhbCAqX19yZXN0cmljdCBf
X29sZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdXRpbWVzIChfX2NvbnN0IGNoYXIgKl9fZmls
ZSwgX19jb25zdCBzdHJ1Y3QgdGltZXZhbCBfX3R2cFsyXSkKICAgICB0aHJvdyAoKTsKIyAxNzEg
Ii91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzCn0KIyAzOSAiLi4vc3RscG9ydC9zdGwvX3RocmVh
ZHMuYyIgMgoKCm5hbWVzcGFjZSBfU1RMIHsKCgoKCnRlbXBsYXRlPGludCBfX2R1bW15PgpfU1RM
UF9tdXRleF9iYXNlCl9Td2FwX2xvY2tfc3RydWN0PF9fZHVtbXk+OjpfU19zd2FwX2xvY2sgPSB7
IHswLCAwLCAwLCBQVEhSRUFEX01VVEVYX1RJTUVEX05QLCB7IDAsIDAgfX0gfTsKCgp0ZW1wbGF0
ZSA8aW50IF9faW5zdD4KdW5zaWduZWQgX1NUTFBfbXV0ZXhfc3BpbjxfX2luc3Q+OjpfX21heCA9
IF9TVExQX211dGV4X3NwaW48X19pbnN0Pjo6X19sb3dfbWF4OwoKdGVtcGxhdGUgPGludCBfX2lu
c3Q+CnVuc2lnbmVkIF9TVExQX211dGV4X3NwaW48X19pbnN0Pjo6X19sYXN0ID0gMDsKIyA3NyAi
Li4vc3RscG9ydC9zdGwvX3RocmVhZHMuYyIKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQKX1NU
TFBfbXV0ZXhfc3BpbjxfX2luc3Q+OjpfU19uc2VjX3NsZWVwKGludCBfX2xvZ19uc2VjKSB7CgoK
CgoKCgogICAgICAgICAgdGltZXNwZWMgX190czsKCiAgICAgICAgICBfX3RzLnR2X3NlYyA9IDA7
CiAgICAgICAgICBfX3RzLnR2X25zZWMgPSAxIDw8IF9fbG9nX25zZWM7CiAgICAgICAgICBuYW5v
c2xlZXAoJl9fdHMsIDApOwoKICB9CgoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQKX1NUTFBf
bXV0ZXhfc3BpbjxfX2luc3Q+OjpfTV9kb19sb2NrKHZvbGF0aWxlIF9fc3RsX2F0b21pY190KiBf
X2xvY2spCnsKIyAxMzkgIi4uL3N0bHBvcnQvc3RsL190aHJlYWRzLmMiCn0KCn0KIyA1NTMgIi4u
L3N0bHBvcnQvc3RsL190aHJlYWRzLmgiIDIKIyAzMiAiLi4vc3RscG9ydC9zdGwvX2xvY2FsZS5o
IiAyCgoKCiMgMSAiLi4vc3RscG9ydC9zdGwvX3N0cmluZ19md2QuaCIgMQojIDIzICIuLi9zdGxw
b3J0L3N0bC9fc3RyaW5nX2Z3ZC5oIgojIDEgIi4uL3N0bHBvcnQvaW9zZndkIiAxCiMgMjQgIi4u
L3N0bHBvcnQvaW9zZndkIgojIDEgIi4uL3N0bHBvcnQvc3RsL19wcm9sb2cuaCIgMQojIDI1ICIu
Li9zdGxwb3J0L2lvc2Z3ZCIgMgojIDMzICIuLi9zdGxwb3J0L2lvc2Z3ZCIKIyAxICIuLi9zdGxw
b3J0L3N0bC9faW9zZndkLmgiIDEKIyAyMiAiLi4vc3RscG9ydC9zdGwvX2lvc2Z3ZC5oIgojIDEg
Ii4uL3N0bHBvcnQvc3RsL2NoYXJfdHJhaXRzLmgiIDEKIyAzNSAiLi4vc3RscG9ydC9zdGwvY2hh
cl90cmFpdHMuaCIKIyAxICIuLi9zdGxwb3J0L2NzdHJpbmciIDEKIyAyNSAiLi4vc3RscG9ydC9j
c3RyaW5nIgojIDEgIi91c3IvaW5jbHVkZS9nKysvY3N0cmluZyIgMQojIDQ4ICIvdXNyL2luY2x1
ZGUvZysrL2NzdHJpbmciIDMKCgoKIyAxICIuLi9zdGxwb3J0L3N0cmluZy5oIiAxIDMKIyAyMSAi
Li4vc3RscG9ydC9zdHJpbmcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMg
MjggIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gIkMiIHsKCgoKCiMgMSAiLi4vc3Rs
cG9ydC9zdGRkZWYuaCIgMSAzCiMgMjMgIi4uL3N0bHBvcnQvc3RkZGVmLmgiIDMKIyAxICIvdXNy
L2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg
MjQgIi4uL3N0bHBvcnQvc3RkZGVmLmgiIDIgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgi
IDIgMwoKCgpleHRlcm4gdm9pZCAqbWVtY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3Qg
X19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqbWVtbW92ZSAodm9pZCAqX19kZXN0LCBfX2Nv
bnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiB2
b2lkICptZW1jY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB2b2lkICpfX3Jl
c3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgaW50IF9fYywgc2l6ZV90IF9fbikK
ICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkICptZW1zZXQgKHZvaWQgKl9fcywgaW50IF9f
Yywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtZW1jbXAgKF9fY29uc3Qgdm9p
ZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1jaHIgKF9fY29uc3Qg
dm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiB2b2lkICpyYXdtZW1jaHIgKF9fY29uc3Qgdm9p
ZCAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpl
eHRlcm4gdm9pZCAqbWVtcmNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBf
X24pCiAgICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJu
IGNoYXIgKnN0cmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJuY3B5IChjaGFy
ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0
cmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X3NyYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJuY2F0IChjaGFyICpfX3Jlc3Ry
aWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzdHJjbXAgKF9fY29u
c3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBzdHJuY21wIChfX2NvbnN0IGNoYXIgKl9f
czEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0cmNvbGwgKF9fY29uc3QgY2hhciAq
X19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtIChjaGFyICpfX3Jlc3RyaWN0IF9fZGVz
dCwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMs
IHNpemVfdCBfX24pIHRocm93ICgpOwojIDExMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4
dGVybiBpbnQgX19zdHJjb2xsX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpf
X3MyLCBfX2xvY2FsZV90IF9fbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl
X18pKTsKCmV4dGVybiBzaXplX3QgX19zdHJ4ZnJtX2wgKGNoYXIgKl9fZGVzdCwgX19jb25zdCBj
aGFyICpfX3NyYywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2Nh
bGVfdCBfX2wpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmR1cCAoX19jb25zdCBjaGFy
ICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKCmV4dGVy
biBjaGFyICpzdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19uKQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CiMgMTU1ICIvdXNyL2luY2x1
ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cmNociAoX19jb25zdCBjaGFyICpfX3MsIGlu
dCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIg
KnN0cnJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjaHJudWwgKF9fY29uc3QgY2hh
ciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoK
CmV4dGVybiBzaXplX3Qgc3RyY3NwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAq
X19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0
ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNj
ZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNo
YXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0
cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gY2hhciAq
c3RyY2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVl
ZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4g
Y2hhciAqc3RydG9rIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZGVsaW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3N0cnRva19yIChj
aGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RydG9rX3IgKGNo
YXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIHZvaWQgKm1lbW1lbSAoX19jb25zdCB2b2lkICpfX2hheXN0YWNrLCBz
aXplX3QgX19oYXlzdGFja2xlbiwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpf
X25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlbGVuKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKCgpleHRlcm4gdm9pZCAqX19tZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0
IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0
IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgKm1lbXBjcHkgKHZvaWQg
Kl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpf
X3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzaXplX3Qg
c3RybGVuIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cm5sZW4gKF9fY29uc3QgY2hhciAqX19zdHJpbmcs
IHNpemVfdCBfX21heGxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCgoKCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50IF9fZXJybnVtKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVf
dCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lkICpfX3Ms
IHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lk
ICpfX3NyYywgdm9pZCAqX19kZXN0LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9p
ZCBiemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGJj
bXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpp
bmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBp
bnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGlu
dCBmZnMgKGludCBfX2kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK
CmV4dGVybiBpbnQgZmZzbCAobG9uZyBpbnQgX19sKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBpbnQgZmZzbGwgKGxvbmcgbG9uZyBp
bnQgX19sbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpl
eHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpf
X3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBp
bnQgc3RybmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBz
aXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoK
CmV4dGVybiBpbnQgX19zdHJjYXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBj
aGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgX19zdHJuY2Fz
ZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNl
cCAoY2hhciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLAogICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN0
cnZlcnNjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpzdHJzaWdu
YWwgKGludCBfX3NpZykgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKl9fc3RwY3B5IChjaGFyICpf
X3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRo
cm93ICgpOwpleHRlcm4gY2hhciAqc3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hh
ciAqX19zdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAo
KTsKZXh0ZXJuIGNoYXIgKnN0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19u
KSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyZnJ5IChjaGFyICpfX3N0cmluZykgdGhyb3cg
KCk7CgoKZXh0ZXJuIHZvaWQgKm1lbWZyb2IgKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cg
KCk7CgoKCgoKCmV4dGVybiBjaGFyICpiYXNlbmFtZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1l
KSB0aHJvdyAoKTsKIyAzNjQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwp9CiMgMjIgIi4uL3N0
bHBvcnQvc3RyaW5nLmgiIDIgMwojIDUyICIvdXNyL2luY2x1ZGUvZysrL2NzdHJpbmciIDIgMwoj
IDc3ICIvdXNyL2luY2x1ZGUvZysrL2NzdHJpbmciIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcg
OjptZW1jcHk7CiAgdXNpbmcgOjptZW1tb3ZlOwogIHVzaW5nIDo6c3RyY3B5OwogIHVzaW5nIDo6
c3RybmNweTsKICB1c2luZyA6OnN0cmNhdDsKICB1c2luZyA6OnN0cm5jYXQ7CiAgdXNpbmcgOjpt
ZW1jbXA7CiAgdXNpbmcgOjpzdHJjbXA7CiAgdXNpbmcgOjpzdHJjb2xsOwogIHVzaW5nIDo6c3Ry
bmNtcDsKICB1c2luZyA6OnN0cnhmcm07CiAgdXNpbmcgOjpzdHJjc3BuOwogIHVzaW5nIDo6c3Ry
c3BuOwogIHVzaW5nIDo6c3RydG9rOwogIHVzaW5nIDo6bWVtc2V0OwogIHVzaW5nIDo6c3RyZXJy
b3I7CiAgdXNpbmcgOjpzdHJsZW47CgogIHVzaW5nIDo6bWVtY2hyOwoKICBpbmxpbmUgdm9pZCoK
ICBtZW1jaHIodm9pZCogX19wLCBpbnQgX19jLCBzaXplX3QgX19uKQogIHsgcmV0dXJuIG1lbWNo
cihjb25zdF9jYXN0PGNvbnN0IHZvaWQqPihfX3ApLCBfX2MsIF9fbik7IH0KCiAgdXNpbmcgOjpz
dHJjaHI7CgogIGlubGluZSBjaGFyKgogIHN0cmNocihjaGFyKiBfX3MxLCBpbnQgX19uKQogIHsg
cmV0dXJuIF9fYnVpbHRpbl9zdHJjaHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9f
bik7IH0KCiAgdXNpbmcgOjpzdHJwYnJrOwoKICBpbmxpbmUgY2hhcioKICBzdHJwYnJrKGNoYXIq
IF9fczEsIGNvbnN0IGNoYXIqIF9fczIpCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnBicmsoY29u
c3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIpOyB9CgogIHVzaW5nIDo6c3RycmNocjsK
CiAgaW5saW5lIGNoYXIqCiAgc3RycmNocihjaGFyKiBfX3MxLCBpbnQgX19uKQogIHsgcmV0dXJu
IF9fYnVpbHRpbl9zdHJyY2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX24pOyB9
CgogIHVzaW5nIDo6c3Ryc3RyOwoKICBpbmxpbmUgY2hhcioKICBzdHJzdHIoY2hhciogX19zMSwg
Y29uc3QgY2hhciogX19zMikKICB7IHJldHVybiBfX2J1aWx0aW5fc3Ryc3RyKGNvbnN0X2Nhc3Q8
Y29uc3QgY2hhcio+KF9fczEpLCBfX3MyKTsgfQp9CiMgMjYgIi4uL3N0bHBvcnQvY3N0cmluZyIg
MgoKCgoKCm5hbWVzcGFjZSBfU1RMIHsKIyAxICIuLi9zdGxwb3J0L3VzaW5nL2NzdHJpbmciIDEK
dXNpbmcgX19zdGRfYWxpYXM6OnNpemVfdDsKIyAxNyAiLi4vc3RscG9ydC91c2luZy9jc3RyaW5n
IgogdXNpbmcgX19zdGRfYWxpYXM6Om1lbW1vdmU7CiB1c2luZyBfX3N0ZF9hbGlhczo6bWVtY3B5
OwoKCgoKdXNpbmcgX19zdGRfYWxpYXM6Om1lbWNocjsKdXNpbmcgX19zdGRfYWxpYXM6OnN0cmNo
cjsKdXNpbmcgX19zdGRfYWxpYXM6OnN0cnBicms7CnVzaW5nIF9fc3RkX2FsaWFzOjpzdHJyY2hy
Owp1c2luZyBfX3N0ZF9hbGlhczo6c3Ryc3RyOwoKCnVzaW5nIF9fc3RkX2FsaWFzOjptZW1jbXA7
CnVzaW5nIF9fc3RkX2FsaWFzOjptZW1zZXQ7Cgp1c2luZyBfX3N0ZF9hbGlhczo6c3RyY2F0OwoK
CnVzaW5nIF9fc3RkX2FsaWFzOjpzdHJjbXA7CgoKdXNpbmcgX19zdGRfYWxpYXM6OnN0cmNvbGw7
Cgp1c2luZyBfX3N0ZF9hbGlhczo6c3RyY3B5OwoKdXNpbmcgX19zdGRfYWxpYXM6OnN0cmNzcG47
CnVzaW5nIF9fc3RkX2FsaWFzOjpzdHJlcnJvcjsKdXNpbmcgX19zdGRfYWxpYXM6OnN0cmxlbjsK
dXNpbmcgX19zdGRfYWxpYXM6OnN0cm5jYXQ7CnVzaW5nIF9fc3RkX2FsaWFzOjpzdHJuY21wOwoK
dXNpbmcgX19zdGRfYWxpYXM6OnN0cm5jcHk7CnVzaW5nIF9fc3RkX2FsaWFzOjpzdHJzcG47Cgp1
c2luZyBfX3N0ZF9hbGlhczo6c3RydG9rOwp1c2luZyBfX3N0ZF9hbGlhczo6c3RyeGZybTsKIyAz
MyAiLi4vc3RscG9ydC9jc3RyaW5nIiAyCn0KIyAzNiAiLi4vc3RscG9ydC9zdGwvY2hhcl90cmFp
dHMuaCIgMgoKCgojIDEgIi4uL3N0bHBvcnQvc3RsL3R5cGVfdHJhaXRzLmgiIDEKIyA2MiAiLi4v
c3RscG9ydC9zdGwvdHlwZV90cmFpdHMuaCIKbmFtZXNwYWNlIF9TVEwgewoKc3RydWN0IF9fdHJ1
ZV90eXBlIHt9OwpzdHJ1Y3QgX19mYWxzZV90eXBlIHt9OwoKCnRlbXBsYXRlIDxpbnQgX0lzPiBz
dHJ1Y3QgX19ib29sMnR5cGUgeyB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfUmV0OyB9OwoKdGVtcGxh
dGU8PgpzdHJ1Y3QgX19ib29sMnR5cGU8MT4geyB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9SZXQ7IH07
Cgp0ZW1wbGF0ZTw+CnN0cnVjdCBfX2Jvb2wydHlwZTwwPiB7IHR5cGVkZWYgX19mYWxzZV90eXBl
IF9SZXQ7IH07CgoKdGVtcGxhdGUgPGNsYXNzIF9QMSwgY2xhc3MgX1AyLCBjbGFzcyBfUDM+CnN0
cnVjdCBfTGFuZDMgewogIHR5cGVkZWYgX19mYWxzZV90eXBlIF9SZXQ7Cn07Cgp0ZW1wbGF0ZTw+
CnN0cnVjdCBfTGFuZDM8X190cnVlX3R5cGUsIF9fdHJ1ZV90eXBlLCBfX3RydWVfdHlwZT4gewog
IHR5cGVkZWYgX190cnVlX3R5cGUgX1JldDsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3Ry
dWN0IF9fdHlwZV90cmFpdHM7CnRlbXBsYXRlIDxpbnQgX0lzUE9EPiBzdHJ1Y3QgX190eXBlX3Ry
YWl0c19hdXggewogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w
ZXJhdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4Kc3RydWN0
IF9fdHlwZV90cmFpdHNfYXV4PDA+IHsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZp
YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZp
YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxf
YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1w
bGF0ZTw+CnN0cnVjdCBfX3R5cGVfdHJhaXRzX2F1eDwxPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsK
fTsKIyAxNzQgIi4uL3N0bHBvcnQvc3RsL3R5cGVfdHJhaXRzLmgiCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzIHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSB0aGlzX2R1
bW15X21lbWJlcl9tdXN0X2JlX2ZpcnN0OwojIDE5MiAiLi4vc3RscG9ydC9zdGwvdHlwZV90cmFp
dHMuaCIKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv
cjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX2ZhbHNlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4g
c3RydWN0IF9Jc1B0ciB7IGVudW0geyBfUmV0ID0gMCB9OyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PiBzdHJ1Y3QgX0lzUHRyVHlwZSB7CiAgc3RhdGljIF9fZmFsc2VfdHlwZSBfUmV0KCkgeyByZXR1
cm4gX19mYWxzZV90eXBlKCk7fQp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1RwMSwgY2xhc3MgX1RwMj4g
c3RydWN0IF9Cb3RoUHRyVHlwZSB7CiAgc3RhdGljIF9fZmFsc2VfdHlwZSBfUmV0KCkgeyByZXR1
cm4gX19mYWxzZV90eXBlKCk7fQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBfSXNQ
dHI8X1RwKj4geyBlbnVtIHsgX1JldCA9IDEgfTsgfTsKdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3Ry
dWN0IF9Jc1B0clR5cGU8X1RwKj4gewogIHN0YXRpYyBfX3RydWVfdHlwZSBfUmV0KCkgeyByZXR1
cm4gX190cnVlX3R5cGUoKTt9Cn07CnRlbXBsYXRlIDxjbGFzcyBfVHAxLCBjbGFzcyBfVHAyPiBz
dHJ1Y3QgX0JvdGhQdHJUeXBlPF9UcDEqLCBfVHAyKj4gewogIHN0YXRpYyBfX3RydWVfdHlwZSBf
UmV0KCkgeyByZXR1cm4gX190cnVlX3R5cGUoKTt9Cn07CiMgMjI0ICIuLi9zdGxwb3J0L3N0bC90
eXBlX3RyYWl0cy5oIgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IDogX190
eXBlX3RyYWl0c19hdXg8MT4ge307Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGNo
YXI+IDogX190eXBlX3RyYWl0c19hdXg8MT4ge307Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVf
dHJhaXRzPHNpZ25lZCBjaGFyPiA6IF9fdHlwZV90cmFpdHNfYXV4PDE+IHt9OwoKdGVtcGxhdGU8
PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBjaGFyPiA6IF9fdHlwZV90cmFpdHNfYXV4
PDE+IHt9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx3Y2hhcl90PiA6IF9fdHlw
ZV90cmFpdHNfYXV4PDE+IHt9OwoKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2hv
cnQ+IDogX190eXBlX3RyYWl0c19hdXg8MT4ge307CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90
cmFpdHM8dW5zaWduZWQgc2hvcnQ+IDogX190eXBlX3RyYWl0c19hdXg8MT4ge307CnRlbXBsYXRl
PD4gc3RydWN0IF9fdHlwZV90cmFpdHM8aW50PiA6IF9fdHlwZV90cmFpdHNfYXV4PDE+IHt9Owp0
ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGludD4gOiBfX3R5cGVfdHJh
aXRzX2F1eDwxPiB7fTsKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiA6IF9f
dHlwZV90cmFpdHNfYXV4PDE+IHt9Owp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVu
c2lnbmVkIGxvbmc+IDogX190eXBlX3RyYWl0c19hdXg8MT4ge307CgoKdGVtcGxhdGU8PiBzdHJ1
Y3QgX190eXBlX3RyYWl0czxsb25nIGxvbmc+IDogX190eXBlX3RyYWl0c19hdXg8MT4ge307CnRl
bXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZyBsb25nPiA6IF9fdHlw
ZV90cmFpdHNfYXV4PDE+IHt9OwoKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Zmxv
YXQ+IDogX190eXBlX3RyYWl0c19hdXg8MT4ge307CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90
cmFpdHM8ZG91YmxlPiA6IF9fdHlwZV90cmFpdHNfYXV4PDE+IHt9OwoKCnRlbXBsYXRlPD4gc3Ry
dWN0IF9fdHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IDogX190eXBlX3RyYWl0c19hdXg8MT4ge307
CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPF9UcCo+IDogX190
eXBlX3RyYWl0c19hdXg8MT4ge307CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IF9J
c19pbnRlZ2VyIHsKICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfSW50ZWdyYWw7Cn07CgoKCnRlbXBs
YXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGJvb2w+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9J
bnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Y2hhcj4gewogIHR5
cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNf
aW50ZWdlcjxzaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9
OwoKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGNoYXI+IHsKICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2lu
dGVnZXI8d2NoYXJfdD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0
ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxzaG9ydD4gewogIHR5cGVkZWYgX190cnVlX3R5
cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQg
c2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4g
c3RydWN0IF9Jc19pbnRlZ2VyPGludD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFs
Owp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgaW50PiB7CiAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50
ZWdlcjxsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0
ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVf
dHlwZSBfSW50ZWdyYWw7Cn07CgoKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGxvbmcg
bG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBz
dHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVf
dHlwZSBfSW50ZWdyYWw7Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAxLCBjbGFzcyBfVHAyPgpz
dHJ1Y3QgX09LVG9NZW1DcHkgewogIGVudW0geyBfU2FtZVNpemUgPSAoc2l6ZW9mKF9UcDEpID09
IHNpemVvZihfVHAyKSkgfSA7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcDE+
OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yIF9UcjE7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBfX3R5cGVfdHJhaXRzPF9UcDI+OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yIF9U
cjI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX2Jvb2wydHlwZTwgX1NhbWVTaXplID46Ol9SZXQgX1Ry
MzsKICB0eXBlZGVmIHR5cGVuYW1lIF9MYW5kMzxfVHIxLCBfVHIyLCBfVHIzPjo6X1JldCBfVHlw
ZTsKICBzdGF0aWMgX1R5cGUgX1JldCgpIHsgcmV0dXJuIF9UeXBlKCk7IH0KfTsKCnRlbXBsYXRl
IDxjbGFzcyBfVHAxLCBjbGFzcyBfVHAyPgppbmxpbmUgX09LVG9NZW1DcHk8X1RwMSwgX1RwMj4g
X0lzT0tUb01lbUNweShfVHAxKiwgX1RwMiopIHsKICByZXR1cm4gX09LVG9NZW1DcHk8X1RwMSwg
X1RwMj4oKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9Jc1BPRCB7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46OmlzX1BPRF90eXBlIF9UeXBlOwogIHN0YXRp
YyBfVHlwZSBfUmV0KCkgeyByZXR1cm4gX1R5cGUoKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4KaW5saW5lIF9Jc1BPRDxfVHA+IF9Jc19QT0QgKF9UcCopIHsgcmV0dXJuIF9Jc1BPRDxfVHA+
KCk7IH0KIyAzODkgIi4uL3N0bHBvcnQvc3RsL3R5cGVfdHJhaXRzLmgiCn0KIyA0MCAiLi4vc3Rs
cG9ydC9zdGwvY2hhcl90cmFpdHMuaCIgMgoKCgoKCgpuYW1lc3BhY2UgX1NUTCB7CgoKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+IGNsYXNzIGFsbG9jYXRvcjsKIyA2MCAiLi4vc3RscG9ydC9zdGwvY2hh
cl90cmFpdHMuaCIKdHlwZWRlZiBsb25nIHN0cmVhbW9mZjsKCgp0eXBlZGVmIHB0cmRpZmZfdCBz
dHJlYW1zaXplOwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9TdGF0ZVQ+IGNsYXNzIGZwb3MKewpwdWJs
aWM6CiAgZnBvcyhzdHJlYW1vZmYgX19wb3MpIDogX01fcG9zKF9fcG9zKSwgX01fc3QoX1N0YXRl
VCgpKSB7fQogIGZwb3MoKSA6IF9NX3BvcygwKSwgX01fc3QoX1N0YXRlVCgpKSB7fQoKICBvcGVy
YXRvciBzdHJlYW1vZmYoKSBjb25zdCB7IHJldHVybiBfTV9wb3M7IH0KCiAgZnJpZW5kIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBmcG9zPF9TdGF0ZVQ+JiBfX3gsIGNvbnN0IGZwb3M8X1N0YXRlVD4m
IF9feSkKICAgIHsgcmV0dXJuIF9feC5fTV9wb3MgPT0gX195Ll9NX3BvczsgfQogIGZyaWVuZCBi
b29sIG9wZXJhdG9yIT0oY29uc3QgZnBvczxfU3RhdGVUPiYgX194LCBjb25zdCBmcG9zPF9TdGF0
ZVQ+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fcG9zICE9IF9feS5fTV9wb3M7IH0KCiAgZnBv
czxfU3RhdGVUPiYgb3BlcmF0b3IrPShzdHJlYW1vZmYgX19vZmYpIHsKICAgIF9NX3BvcyArPSBf
X29mZjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgZnBvczxfU3RhdGVUPiYgb3BlcmF0b3ItPShz
dHJlYW1vZmYgX19vZmYpIHsKICAgIF9NX3BvcyAtPSBfX29mZjsKICAgIHJldHVybiAqdGhpczsK
ICB9CgogIGZwb3M8X1N0YXRlVD4gb3BlcmF0b3IrKHN0cmVhbW9mZiBfX29mZikgewogICAgZnBv
czxfU3RhdGVUPiBfX3RtcCgqdGhpcyk7CiAgICBfX3RtcCArPSBfX29mZjsKICAgIHJldHVybiBf
X3RtcDsKICB9CiAgZnBvczxfU3RhdGVUPiBvcGVyYXRvci0oc3RyZWFtb2ZmIF9fb2ZmKSB7CiAg
ICBmcG9zPF9TdGF0ZVQ+IF9fdG1wKCp0aGlzKTsKICAgIF9fdG1wIC09IF9fb2ZmOwogICAgcmV0
dXJuIF9fdG1wOwogIH0KCnB1YmxpYzoKICBfU3RhdGVUIHN0YXRlKCkgY29uc3QgeyByZXR1cm4g
X01fc3Q7IH0KICB2b2lkIHN0YXRlKF9TdGF0ZVQgX19zdCkgeyBfTV9zdCA9IF9fc3Q7IH0KcHJp
dmF0ZToKICBzdHJlYW1vZmYgX01fcG9zOwogIF9TdGF0ZVQgX01fc3Q7Cn07Cgp0eXBlZGVmIGZw
b3M8bWJzdGF0ZV90PiBzdHJlYW1wb3M7CnR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHdzdHJlYW1w
b3M7CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfSW50VD4gY2xhc3MgX19jaGFy
X3RyYWl0c19iYXNlIHsKcHVibGljOgogIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICB0eXBl
ZGVmIF9JbnRUIGludF90eXBlOwoKICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICB0eXBl
ZGVmIHN0cmVhbXBvcyBwb3NfdHlwZTsKCgoKICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBl
OwoKCgogIHN0YXRpYyB2b2lkIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlw
ZSYgX19jMikgeyBfX2MxID0gX19jMjsgfQogIHN0YXRpYyBib29sIGVxKGNvbnN0IF9DaGFyVCYg
X19jMSwgY29uc3QgX0NoYXJUJiBfX2MyKQogICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CiAg
c3RhdGljIGJvb2wgbHQoY29uc3QgX0NoYXJUJiBfX2MxLCBjb25zdCBfQ2hhclQmIF9fYzIpCiAg
ICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQoKICBzdGF0aWMgaW50IGNvbXBhcmUoY29uc3QgX0No
YXJUKiBfX3MxLCBjb25zdCBfQ2hhclQqIF9fczIsIHNpemVfdCBfX24pIHsKICAgIGZvciAoc2l6
ZV90IF9faSA9IDA7IF9faSA8IF9fbjsgKytfX2kpCiAgICAgIGlmICghZXEoX19zMVtfX2ldLCBf
X3MyW19faV0pKQogICAgICAgIHJldHVybiBfX3MxW19faV0gPCBfX3MyW19faV0gPyAtMSA6IDE7
CiAgICByZXR1cm4gMDsKICB9CgogIHN0YXRpYyBzaXplX3QgbGVuZ3RoKGNvbnN0IF9DaGFyVCog
X19zKSB7CiAgICBjb25zdCBfQ2hhclQgX051bGxDaGFyID0gX0NoYXJUKCk7CiAgICBzaXplX3Qg
X19pOwogICAgZm9yIChfX2kgPSAwOyAhZXEoX19zW19faV0sIF9OdWxsQ2hhcik7ICsrX19pKQog
ICAgICB7fQogICAgcmV0dXJuIF9faTsKICB9CgogIHN0YXRpYyBjb25zdCBfQ2hhclQqIGZpbmQo
Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IF9DaGFyVCYgX19jKSB7CiAgICBm
b3IgKCA7IF9fbiA+IDAgOyArK19fcywgLS1fX24pCiAgICAgIGlmIChlcSgqX19zLCBfX2MpKQog
ICAgICAgIHJldHVybiBfX3M7CiAgICByZXR1cm4gMDsKICB9CgoKICBzdGF0aWMgX0NoYXJUKiBt
b3ZlKF9DaGFyVCogX19zMSwgY29uc3QgX0NoYXJUKiBfX3MyLCBzaXplX3QgX1N6KSB7CiAgICBy
ZXR1cm4gKF9TeiA9PSAwID8gX19zMSA6IChfQ2hhclQqKW1lbW1vdmUoX19zMSwgX19zMiwgX1N6
ICogc2l6ZW9mKF9DaGFyVCkpKTsKICB9CgogIHN0YXRpYyBfQ2hhclQqIGNvcHkoX0NoYXJUKiBf
X3MxLCBjb25zdCBfQ2hhclQqIF9fczIsIHNpemVfdCBfX24pIHsKICAgIHJldHVybiAoX19uID09
IDAgPyBfX3MxIDoKICAgICAgICAgICAgKF9DaGFyVCopbWVtY3B5KF9fczEsIF9fczIsIF9fbiAq
IHNpemVvZihfQ2hhclQpKSk7CiAgICB9CgogIHN0YXRpYyBfQ2hhclQqIGFzc2lnbihfQ2hhclQq
IF9fcywgc2l6ZV90IF9fbiwgX0NoYXJUIF9fYykgewogICAgZm9yIChzaXplX3QgX19pID0gMDsg
X19pIDwgX19uOyArK19faSkKICAgICAgX19zW19faV0gPSBfX2M7CiAgICByZXR1cm4gX19zOwog
IH0KCiAgc3RhdGljIGludF90eXBlIG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9fYykgewogICAg
cmV0dXJuICFlcV9pbnRfdHlwZShfX2MsIGVvZigpKSA/IF9fYyA6IHN0YXRpY19jYXN0PGludF90
eXBlPigwKTsKICB9CgogIHN0YXRpYyBjaGFyX3R5cGUgdG9fY2hhcl90eXBlKGNvbnN0IGludF90
eXBlJiBfX2MpIHsKICAgIHJldHVybiAoY2hhcl90eXBlKV9fYzsKICB9CgogIHN0YXRpYyBpbnRf
dHlwZSB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykgewogICAgcmV0dXJuIChpbnRf
dHlwZSlfX2M7CiAgfQoKICBzdGF0aWMgYm9vbCBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYg
X19jMSwgY29uc3QgaW50X3R5cGUmIF9fYzIpIHsKICAgIHJldHVybiBfX2MxID09IF9fYzI7CiAg
fQoKICBzdGF0aWMgaW50X3R5cGUgZW9mKCkgewogICAgcmV0dXJuIChpbnRfdHlwZSktMTsKCiAg
fQp9OwoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJUPiBjbGFzcyBjaGFyX3RyYWl0cwogIDog
cHVibGljIF9fY2hhcl90cmFpdHNfYmFzZTxfQ2hhclQsIF9DaGFyVD4Ke307CgoKCnRlbXBsYXRl
PD4gY2xhc3MgY2hhcl90cmFpdHM8Y2hhcj4KICA6IHB1YmxpYyBfX2NoYXJfdHJhaXRzX2Jhc2U8
Y2hhciwgaW50Pgp7CnB1YmxpYzoKICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwogIHR5cGVkZWYg
aW50IGludF90eXBlOwoKICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKCiAgdHlwZWRlZiBz
dHJlYW1wb3MgcG9zX3R5cGU7CiAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCgoKICBz
dGF0aWMgY2hhciB0b19jaGFyX3R5cGUoY29uc3QgaW50JiBfX2MpIHsKICAgIHJldHVybiAoY2hh
cikodW5zaWduZWQgY2hhcilfX2M7CiAgfQoKICBzdGF0aWMgaW50IHRvX2ludF90eXBlKGNvbnN0
IGNoYXImIF9fYykgewogICAgcmV0dXJuICh1bnNpZ25lZCBjaGFyKV9fYzsKICB9CgogIHN0YXRp
YyBpbnQgY29tcGFyZShjb25zdCBjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyLCBzaXplX3Qg
X19uKQogICAgeyByZXR1cm4gbWVtY21wKF9fczEsIF9fczIsIF9fbik7IH0KCiAgc3RhdGljIHNp
emVfdCBsZW5ndGgoY29uc3QgY2hhciogX19zKSB7IHJldHVybiBzdHJsZW4oX19zKTsgfQoKICBz
dGF0aWMgdm9pZCBhc3NpZ24oY2hhciYgX19jMSwgY29uc3QgY2hhciYgX19jMikgeyBfX2MxID0g
X19jMjsgfQoKICBzdGF0aWMgY2hhciogYXNzaWduKGNoYXIqIF9fcywgc2l6ZV90IF9fbiwgY2hh
ciBfX2MpCiAgICB7IG1lbXNldChfX3MsIF9fYywgX19uKTsgcmV0dXJuIF9fczsgfQp9OwoKCgp0
ZW1wbGF0ZTw+IGNsYXNzIGNoYXJfdHJhaXRzPHdjaGFyX3Q+CiAgOiBwdWJsaWMgX19jaGFyX3Ry
YWl0c19iYXNlPHdjaGFyX3QsIHdpbnRfdD4Ke307CgoKfQojIDIzICIuLi9zdGxwb3J0L3N0bC9f
aW9zZndkLmgiIDIKCgpuYW1lc3BhY2UgX1NUTCB7CgpjbGFzcyBpb3NfYmFzZTsKCnRlbXBsYXRl
IDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KY2xh
c3MgYmFzaWNfaW9zOwoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cyA9IGNo
YXJfdHJhaXRzPF9DaGFyVD4gPgpjbGFzcyBiYXNpY19zdHJlYW1idWY7Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CmNsYXNzIGJh
c2ljX2lzdHJlYW07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzID0gY2hh
cl90cmFpdHM8X0NoYXJUPiA+CmNsYXNzIGJhc2ljX29zdHJlYW07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0NoYXJULCBjbGFzcyBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CmNsYXNzIGJhc2lj
X2lvc3RyZWFtOwoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cyA9IGNoYXJf
dHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICBjbGFzcyBfQWxsb2NhdG9yID0gYWxsb2NhdG9yPF9D
aGFyVD4gPgpjbGFzcyBiYXNpY19zdHJpbmdidWY7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBj
bGFzcyBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgIGNsYXNzIF9BbGxv
Y2F0b3IgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CmNsYXNzIGJhc2ljX2lzdHJpbmdzdHJlYW07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJU
PiwKICAgICAgICAgIGNsYXNzIF9BbGxvY2F0b3IgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CmNsYXNz
IGJhc2ljX29zdHJpbmdzdHJlYW07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJh
aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgIGNsYXNzIF9BbGxvY2F0b3IgPSBh
bGxvY2F0b3I8X0NoYXJUPiA+CmNsYXNzIGJhc2ljX3N0cmluZ3N0cmVhbTsKCnRlbXBsYXRlIDxj
bGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KY2xhc3Mg
YmFzaWNfZmlsZWJ1ZjsKCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMgPSBj
aGFyX3RyYWl0czxfQ2hhclQ+ID4KY2xhc3MgYmFzaWNfaWZzdHJlYW07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CmNsYXNzIGJh
c2ljX29mc3RyZWFtOwoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cyA9IGNo
YXJfdHJhaXRzPF9DaGFyVD4gPgpjbGFzcyBiYXNpY19mc3RyZWFtOwoKdGVtcGxhdGUgPGNsYXNz
IF9DaGFyVCwgY2xhc3MgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgpjbGFzcyBpc3Ry
ZWFtYnVmX2l0ZXJhdG9yOwoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cyA9
IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgpjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yOwoKdHlwZWRl
ZiBiYXNpY19pb3M8Y2hhciwgY2hhcl90cmFpdHM8Y2hhcj4gPiBpb3M7CgoKdHlwZWRlZiBiYXNp
Y19pb3M8d2NoYXJfdCwgY2hhcl90cmFpdHM8d2NoYXJfdD4gPiB3aW9zOwoKCgpjbGFzcyBsb2Nh
bGU7CiMgOTUgIi4uL3N0bHBvcnQvc3RsL19pb3Nmd2QuaCIKdGVtcGxhdGUgPGNsYXNzIF9GYWNl
dD4gaW5saW5lIGNvbnN0IF9GYWNldCYgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwoKCnRlbXBs
YXRlIDxjbGFzcyBfQ2hhclQ+IGNsYXNzIGN0eXBlOwp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJUPiBj
bGFzcyBjdHlwZV9ieW5hbWU7CnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQ+IGNsYXNzIGNvbGxhdGU7
CnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQ+IGNsYXNzIGNvbGxhdGVfYnluYW1lOwoKdGVtcGxhdGU8
PiBjbGFzcyBjdHlwZTxjaGFyPjsKdGVtcGxhdGU8PiBjbGFzcyBjdHlwZV9ieW5hbWU8Y2hhcj47
CnRlbXBsYXRlPD4gY2xhc3MgY29sbGF0ZTxjaGFyPjsKdGVtcGxhdGU8PiBjbGFzcyBjb2xsYXRl
X2J5bmFtZTxjaGFyPjsKCgp0ZW1wbGF0ZTw+IGNsYXNzIGN0eXBlPHdjaGFyX3Q+Owp0ZW1wbGF0
ZTw+IGNsYXNzIGN0eXBlX2J5bmFtZTx3Y2hhcl90PjsKdGVtcGxhdGU8PiBjbGFzcyBjb2xsYXRl
PHdjaGFyX3Q+Owp0ZW1wbGF0ZTw+IGNsYXNzIGNvbGxhdGVfYnluYW1lPHdjaGFyX3Q+OwoKCgoK
dGVtcGxhdGU8PiBjbGFzcyBiYXNpY19zdHJlYW1idWY8Y2hhciwgY2hhcl90cmFpdHM8Y2hhcj4g
PjsKCgp0eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhciwgY2hhcl90cmFpdHM8Y2hhcj4gPiBpc3Ry
ZWFtOwp0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhciwgY2hhcl90cmFpdHM8Y2hhcj4gPiBvc3Ry
ZWFtOwp0eXBlZGVmIGJhc2ljX2lvc3RyZWFtPGNoYXIsIGNoYXJfdHJhaXRzPGNoYXI+ID4gaW9z
dHJlYW07CnR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXIsY2hhcl90cmFpdHM8Y2hhcj4gPiBz
dHJlYW1idWY7Cgp0eXBlZGVmIGJhc2ljX3N0cmluZ2J1ZjxjaGFyLCBjaGFyX3RyYWl0czxjaGFy
PiwgYWxsb2NhdG9yPGNoYXI+ID4gc3RyaW5nYnVmOwp0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJl
YW08Y2hhciwgY2hhcl90cmFpdHM8Y2hhcj4sIGFsbG9jYXRvcjxjaGFyPiA+IGlzdHJpbmdzdHJl
YW07CnR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyLCBjaGFyX3RyYWl0czxjaGFyPiwg
YWxsb2NhdG9yPGNoYXI+ID4gb3N0cmluZ3N0cmVhbTsKdHlwZWRlZiBiYXNpY19zdHJpbmdzdHJl
YW08Y2hhciwgY2hhcl90cmFpdHM8Y2hhcj4sIGFsbG9jYXRvcjxjaGFyPiA+IHN0cmluZ3N0cmVh
bTsKCnR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyLCBjaGFyX3RyYWl0czxjaGFyPiA+IGZpbGVi
dWY7CnR5cGVkZWYgYmFzaWNfaWZzdHJlYW08Y2hhciwgY2hhcl90cmFpdHM8Y2hhcj4gPiBpZnN0
cmVhbTsKdHlwZWRlZiBiYXNpY19vZnN0cmVhbTxjaGFyLCBjaGFyX3RyYWl0czxjaGFyPiA+IG9m
c3RyZWFtOwp0eXBlZGVmIGJhc2ljX2ZzdHJlYW08Y2hhciwgY2hhcl90cmFpdHM8Y2hhcj4gPiBm
c3RyZWFtOwoKCgp0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90LCBjaGFyX3RyYWl0czx3
Y2hhcl90PiA+IHdzdHJlYW1idWY7CnR5cGVkZWYgYmFzaWNfaXN0cmVhbTx3Y2hhcl90LCBjaGFy
X3RyYWl0czx3Y2hhcl90PiA+IHdpc3RyZWFtOwp0eXBlZGVmIGJhc2ljX29zdHJlYW08d2NoYXJf
dCwgY2hhcl90cmFpdHM8d2NoYXJfdD4gPiB3b3N0cmVhbTsKdHlwZWRlZiBiYXNpY19pb3N0cmVh
bTx3Y2hhcl90LCBjaGFyX3RyYWl0czx3Y2hhcl90PiA+IHdpb3N0cmVhbTsKCnR5cGVkZWYgYmFz
aWNfc3RyaW5nYnVmPHdjaGFyX3QsIGNoYXJfdHJhaXRzPHdjaGFyX3Q+LCBhbGxvY2F0b3I8d2No
YXJfdD4gPiB3c3RyaW5nYnVmOwp0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08d2NoYXJfdCwg
Y2hhcl90cmFpdHM8d2NoYXJfdD4sIGFsbG9jYXRvcjx3Y2hhcl90PiA+IHdpc3RyaW5nc3RyZWFt
Owp0eXBlZGVmIGJhc2ljX29zdHJpbmdzdHJlYW08d2NoYXJfdCwgY2hhcl90cmFpdHM8d2NoYXJf
dD4sIGFsbG9jYXRvcjx3Y2hhcl90PiA+IHdvc3RyaW5nc3RyZWFtOwp0eXBlZGVmIGJhc2ljX3N0
cmluZ3N0cmVhbTx3Y2hhcl90LCBjaGFyX3RyYWl0czx3Y2hhcl90PiwgYWxsb2NhdG9yPHdjaGFy
X3Q+ID4gd3N0cmluZ3N0cmVhbTsKCnR5cGVkZWYgYmFzaWNfZmlsZWJ1Zjx3Y2hhcl90LCBjaGFy
X3RyYWl0czx3Y2hhcl90PiA+IHdmaWxlYnVmOwp0eXBlZGVmIGJhc2ljX2lmc3RyZWFtPHdjaGFy
X3QsIGNoYXJfdHJhaXRzPHdjaGFyX3Q+ID4gd2lmc3RyZWFtOwp0eXBlZGVmIGJhc2ljX29mc3Ry
ZWFtPHdjaGFyX3QsIGNoYXJfdHJhaXRzPHdjaGFyX3Q+ID4gd29mc3RyZWFtOwp0eXBlZGVmIGJh
c2ljX2ZzdHJlYW08d2NoYXJfdCwgY2hhcl90cmFpdHM8d2NoYXJfdD4gPiB3ZnN0cmVhbTsKCgp9
CiMgMzQgIi4uL3N0bHBvcnQvaW9zZndkIiAyCiMgNTAgIi4uL3N0bHBvcnQvaW9zZndkIgojIDEg
Ii4uL3N0bHBvcnQvc3RsL19lcGlsb2cuaCIgMQojIDE0ICIuLi9zdGxwb3J0L3N0bC9fZXBpbG9n
LmgiCiMgMSAiLi4vc3RscG9ydC9zdGwvX2NvbmZpZ19jb21wYXRfcG9zdC5oIiAxCiMgMTUgIi4u
L3N0bHBvcnQvc3RsL19lcGlsb2cuaCIgMgojIDUxICIuLi9zdGxwb3J0L2lvc2Z3ZCIgMgojIDI0
ICIuLi9zdGxwb3J0L3N0bC9fc3RyaW5nX2Z3ZC5oIiAyCgoKbmFtZXNwYWNlIF9TVEwgewoKCnRl
bXBsYXRlIDxjbGFzcyBfQ2hhclQsCiAgICAgICAgICBjbGFzcyBfVHJhaXRzID0gY2hhcl90cmFp
dHM8X0NoYXJUPiwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4K
Y2xhc3MgYmFzaWNfc3RyaW5nOwoKCgoKCgoKdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hhciwgY2hh
cl90cmFpdHM8Y2hhcj4sIGFsbG9jYXRvcjxjaGFyPiA+IHN0cmluZzsKCgp0eXBlZGVmIGJhc2lj
X3N0cmluZzx3Y2hhcl90LCBjaGFyX3RyYWl0czx3Y2hhcl90PiwgYWxsb2NhdG9yPHdjaGFyX3Q+
ID4gd3N0cmluZzsKCgoKIGNvbnN0IGNoYXIqCl9fZ2V0X2Nfc3RyaW5nKGNvbnN0IHN0cmluZyYg
X19zdHIpOwoKCgoKCgp9CiMgMzYgIi4uL3N0bHBvcnQvc3RsL19sb2NhbGUuaCIgMgoKCm5hbWVz
cGFjZSBfU1RMIHsKCmNsYXNzIF9Mb2NhbGVfaW1wbDsKY2xhc3MgX0xvY2FsZTsKY2xhc3MgbG9j
YWxlOwpjbGFzcyBpb3NfYmFzZTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJUPgpib29sCl9fbG9j
YWxlX2RvX29wZXJhdG9yX2NhbGwgKGNvbnN0IGxvY2FsZSogX190aGF0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBjaGFyX3RyYWl0czxfQ2hh
clQ+LCBhbGxvY2F0b3I8X0NoYXJUPiA+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIGNoYXJfdHJhaXRzPF9DaGFyVD4sIGFsbG9jYXRv
cjxfQ2hhclQ+ID4mIF9feSk7CgoKCmNsYXNzIGxvY2FsZSB7CnB1YmxpYzoKCgogIGNsYXNzIGZh
Y2V0IDogcHJpdmF0ZSBfUmVmY291bnRfQmFzZSB7CiAgcHJvdGVjdGVkOgogICAgZXhwbGljaXQg
ZmFjZXQoc2l6ZV90IF9fbm9fZGVsID0gMCkgOiBfUmVmY291bnRfQmFzZSgxKSwgX01fZGVsZXRl
KF9fbm9fZGVsID09IDApIHt9CiAgICB2aXJ0dWFsIH5mYWNldCgpOwogICAgZnJpZW5kIGNsYXNz
IGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBfTG9jYWxlX2ltcGw7CiAgICBmcmllbmQgY2xhc3Mg
X0xvY2FsZTsKCiAgcHJpdmF0ZToKICAgIGZhY2V0KGNvbnN0IGZhY2V0JiBfX2YpIDogX1JlZmNv
dW50X0Jhc2UoMSksIF9NX2RlbGV0ZShfX2YuX01fZGVsZXRlID09IDApIHt9OwogICAgdm9pZCBv
cGVyYXRvcj0oY29uc3QgZmFjZXQmKTsKCiAgcHJpdmF0ZToKICAgIGNvbnN0IGJvb2wgX01fZGVs
ZXRlOwogIH07CgoKCgogIGNsYXNzCgogIGlkIHsKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAg
ICBmcmllbmQgY2xhc3MgX0xvY2FsZV9pbXBsOwogIHB1YmxpYzoKICAgIHNpemVfdCBfTV9pbmRl
eDsKICAgIHN0YXRpYyBzaXplX3QgX1NfbWF4OwogIH07CgogIHR5cGVkZWYgaW50IGNhdGVnb3J5
OwoKCgogIHN0YXRpYyBjb25zdCBjYXRlZ29yeQoKICAgIG5vbmUgPSAweDAwMCwKICAgIGNvbGxh
dGUgPSAweDAxMCwKICAgIGN0eXBlID0gMHgwMjAsCiAgICBtb25ldGFyeSA9IDB4MDQwLAogICAg
bnVtZXJpYyA9IDB4MTAwLAogICAgdGltZSA9IDB4MjAwLAogICAgbWVzc2FnZXMgPSAweDQwMCwK
ICAgIGFsbCA9IGNvbGxhdGUgfCBjdHlwZSB8IG1vbmV0YXJ5IHwgbnVtZXJpYyB8IHRpbWUgfCBt
ZXNzYWdlcwoKCgogIDsKCgogIGxvY2FsZSgpOwogIGxvY2FsZShjb25zdCBsb2NhbGUmKSA7CiAg
ZXhwbGljaXQgbG9jYWxlKGNvbnN0IGNoYXIgKik7CiAgbG9jYWxlKGNvbnN0IGxvY2FsZSYsIGNv
bnN0IGNoYXIqLCBjYXRlZ29yeSk7CgoKICBsb2NhbGUoX0xvY2FsZV9pbXBsKik7CiAgbG9jYWxl
KF9Mb2NhbGVfaW1wbCosIGJvb2wpOwoKcHVibGljOgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9GYWNl
dD4KICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX2xvYywgX0ZhY2V0KiBfX2YpIDogX01faW1wbCgw
KQogICAgewoKICAgICAgbmV3KHRoaXMpIGxvY2FsZShfX2xvYy5fTV9pbXBsLCBfX2YgIT0gMCk7
CiAgICAgIGlmIChfX2YgIT0gMCkKICAgICAgICB0aGlzLT5fTV9pbnNlcnQoX19mLCBfRmFjZXQ6
OmlkKTsKICAgIH0KCgogIGxvY2FsZShjb25zdCBsb2NhbGUmLCBjb25zdCBsb2NhbGUmLCBjYXRl
Z29yeSk7CiAgfmxvY2FsZSgpIDsKICBjb25zdCBsb2NhbGUmIG9wZXJhdG9yPShjb25zdCBsb2Nh
bGUmKSA7CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZhY2V0PiBsb2NhbGUgY29tYmluZShjb25zdCBs
b2NhbGUmIF9fbG9jKSB7CiAgICBsb2NhbGUgX19yZXN1bHQoX19sb2MuX01faW1wbCwgdHJ1ZSk7
CiAgICBpZiAoZmFjZXQqIF9fZiA9IF9fbG9jLl9NX2dldF9mYWNldChfRmFjZXQ6OmlkKSkgewog
ICAgICBfX3Jlc3VsdC5fTV9pbnNlcnQoX19mLCBfRmFjZXQ6OmlkKTsKICAgICAgX19mLT5fTV9p
bmNyKCk7CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX3Rocm93X3J1bnRpbWVfZXJyb3IoKTsKICAg
IHJldHVybiBfX3Jlc3VsdDsKICB9CgoKICBzdHJpbmcgbmFtZSgpIGNvbnN0OwoKICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgbG9jYWxlJikgY29uc3Q7CiAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGxv
Y2FsZSYpIGNvbnN0OwoKCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJh
aXRzLCBjbGFzcyBfQWxsb2M+CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgY29uc3QgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX195KSBjb25zdCB7CiAgICByZXR1
cm4gX19sb2NhbGVfZG9fb3BlcmF0b3JfY2FsbCh0aGlzLCBfX3gsIF9feSk7CiAgfQoKCgogIHN0
YXRpYyBsb2NhbGUgZ2xvYmFsKGNvbnN0IGxvY2FsZSYpOwogIHN0YXRpYyBjb25zdCBsb2NhbGUm
IGNsYXNzaWMoKTsKCnB1YmxpYzoKICBmYWNldCogX01fZ2V0X2ZhY2V0KGNvbnN0IGlkJikgY29u
c3Q7CgogIGZhY2V0KiBfTV91c2VfZmFjZXQoY29uc3QgaWQmKSBjb25zdDsKICBzdGF0aWMgdm9p
ZCBfTV90aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqID0gMCk7CiAgc3RhdGljIHZvaWQg
X1NfaW5pdGlhbGl6ZSgpOwogIHN0YXRpYyB2b2lkIF9TX3VuaW5pdGlhbGl6ZSgpOwoKcHJpdmF0
ZToKCiAgdm9pZCBfTV9pbnNlcnQoZmFjZXQqIF9fZiwgaWQmIF9faWQpOwoKCiAgZnJpZW5kIGNs
YXNzIF9Mb2NhbGVfaW1wbDsKICBmcmllbmQgY2xhc3MgX0xvY2FsZTsKICBmcmllbmQgY2xhc3Mg
aW9zX2Jhc2U7Cgpwcml2YXRlOgogIF9Mb2NhbGVfaW1wbCogX01faW1wbDsKfTsKIyAxOTcgIi4u
L3N0bHBvcnQvc3RsL19sb2NhbGUuaCIKdGVtcGxhdGUgPGNsYXNzIF9GYWNldD4gaW5saW5lIGNv
bnN0IF9GYWNldCYgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpCgp7CiAgcmV0dXJuICpz
dGF0aWNfY2FzdDxjb25zdCBfRmFjZXQqPihfX2xvYy5fTV91c2VfZmFjZXQoX0ZhY2V0OjppZCkp
Owp9CiMgMjExICIuLi9zdGxwb3J0L3N0bC9fbG9jYWxlLmgiCnRlbXBsYXRlIDxjbGFzcyBfRmFj
ZXQ+IGlubGluZSBib29sIGhhc19mYWNldChjb25zdCBsb2NhbGUmIF9fbG9jKQoKewogIHJldHVy
biAoX19sb2MuX01fZ2V0X2ZhY2V0KF9GYWNldDo6aWQpICE9IDApOwp9CgoKCgoKCn0KIyAzMCAi
Li4vc3RscG9ydC9zdGwvX2N0eXBlLmgiIDIKCgojIDEgIi4uL3N0bHBvcnQvc3RsL19hbGdvYmFz
ZS5oIiAxCiMgNDMgIi4uL3N0bHBvcnQvc3RsL19hbGdvYmFzZS5oIgojIDEgIi4uL3N0bHBvcnQv
Y2xpbWl0cyIgMQojIDIxICIuLi9zdGxwb3J0L2NsaW1pdHMiCiMgMSAiLi4vc3RscG9ydC9zdGwv
X3Byb2xvZy5oIiAxCiMgMjIgIi4uL3N0bHBvcnQvY2xpbWl0cyIgMgoKCgoKCiMgMSAiL3Vzci9p
bmNsdWRlL2crKy9jbGltaXRzIiAxCiMgNDggIi91c3IvaW5jbHVkZS9nKysvY2xpbWl0cyIgMwoK
IyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8zLjIvaW5jbHVkZS9saW1pdHMu
aCIgMSAzCiMgMTEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzMuMi9pbmNsdWRl
L2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMy4yL2lu
Y2x1ZGUvc3lzbGltaXRzLmgiIDEgMwoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1z
dXNlLWxpbnV4LzMuMi9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxMzIgIi91c3IvbGliL2djYy1s
aWIvaTQ4Ni1zdXNlLWxpbnV4LzMuMi9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2xpbWl0cy5oIiAxIDMKIyAxNDQgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMSAzCiMgMTI2ICIvdXNyL2luY2x1ZGUvYml0
cy9wb3NpeDFfbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMSAz
CiMgMzYgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2xpbnV4L2xpbWl0cy5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgi
IDIgMwojIDEyNyAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAyIDMKIyAxNDUgIi91
c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgy
X2xpbS5oIiAxIDMKIyAxNDkgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCiMgMSAiL3Vz
ci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvYml0cy94
b3Blbl9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAz
NSAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDIgMwojIDEzNiAiL3Vzci9pbmNsdWRl
L2JpdHMveG9wZW5fbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAx
IDMKIyAxMzcgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAyIDMKIyAxNTMgIi91c3Iv
aW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgMTMzICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1s
aW51eC8zLjIvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgOCAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2
LXN1c2UtbGludXgvMy4yL2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMwojIDEyICIvdXNyL2xpYi9n
Y2MtbGliL2k0ODYtc3VzZS1saW51eC8zLjIvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgNTAgIi91
c3IvaW5jbHVkZS9nKysvY2xpbWl0cyIgMiAzCiMgMjggIi4uL3N0bHBvcnQvY2xpbWl0cyIgMgoj
IDM3ICIuLi9zdGxwb3J0L2NsaW1pdHMiCiMgMSAiLi4vc3RscG9ydC9zdGwvX2VwaWxvZy5oIiAx
CiMgMTQgIi4uL3N0bHBvcnQvc3RsL19lcGlsb2cuaCIKIyAxICIuLi9zdGxwb3J0L3N0bC9fY29u
ZmlnX2NvbXBhdF9wb3N0LmgiIDEKIyAxNSAiLi4vc3RscG9ydC9zdGwvX2VwaWxvZy5oIiAyCiMg
MzggIi4uL3N0bHBvcnQvY2xpbWl0cyIgMgojIDQ0ICIuLi9zdGxwb3J0L3N0bC9fYWxnb2Jhc2Uu
aCIgMgoKCgoKCgoKIyAxICIuLi9zdGxwb3J0L3N0bC9fcGFpci5oIiAxCiMgMzQgIi4uL3N0bHBv
cnQvc3RsL19wYWlyLmgiCm5hbWVzcGFjZSBfU1RMIHsKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNs
YXNzIF9UMj4Kc3RydWN0IHBhaXIgewogIHR5cGVkZWYgX1QxIGZpcnN0X3R5cGU7CiAgdHlwZWRl
ZiBfVDIgc2Vjb25kX3R5cGU7CgogIF9UMSBmaXJzdDsKICBfVDIgc2Vjb25kOwoKCgogIHBhaXIo
KSA6IGZpcnN0KF9UMSgpKSwgc2Vjb25kKF9UMigpKSB7fQoKICBwYWlyKGNvbnN0IF9UMSYgX19h
LCBjb25zdCBfVDImIF9fYikgOiBmaXJzdChfX2EpLCBzZWNvbmQoX19iKSB7fQoKCiAgdGVtcGxh
dGUgPGNsYXNzIF9VMSwgY2xhc3MgX1UyPgogIHBhaXIoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9f
cCkgOiBmaXJzdChfX3AuZmlyc3QpLCBzZWNvbmQoX19wLnNlY29uZCkge30KCiAgcGFpcihjb25z
dCBwYWlyPF9UMSxfVDI+JiBfX28pIDogZmlyc3QoX19vLmZpcnN0KSwgc2Vjb25kKF9fby5zZWNv
bmQpIHt9CgogCn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9U
Mj4mIF9feSkKewogIHJldHVybiBfX3guZmlyc3QgPT0gX195LmZpcnN0ICYmIF9feC5zZWNvbmQg
PT0gX195LnNlY29uZDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUg
Ym9vbCBvcGVyYXRvcjwoY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEs
IF9UMj4mIF9feSkKewogIHJldHVybiBfX3guZmlyc3QgPCBfX3kuZmlyc3QgfHwKICAgICAgICAg
KCEoX195LmZpcnN0IDwgX194LmZpcnN0KSAmJiBfX3guc2Vjb25kIDwgX195LnNlY29uZCk7Cn0K
CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsK
ICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1Qy
PgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3Qg
cGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYWlyPF9U
MSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX195
IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBv
cGVyYXRvcj49KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+
JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9U
MSwgY2xhc3MgX1QyLCBpbnQgX1N6PgppbmxpbmUgcGFpcjxfVDEsIF9UMiBjb25zdCo+IG1ha2Vf
cGFpcihfVDEgY29uc3QmIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1QyIGNvbnN0ICgmX195KVtfU3pdKQp7CiAgcmV0dXJuIHBhaXI8X1QxLCBfVDIgY29uc3Qq
PihfX3gsIHN0YXRpY19jYXN0PF9UMiBjb25zdCo+KF9feSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1QxLCBjbGFzcyBfVDIsIGludCBfU3o+CmlubGluZSBwYWlyPF9UMSBjb25zdCosIF9UMj4gbWFr
ZV9wYWlyKF9UMSBjb25zdCAoJl9feClbX1N6XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1QyIGNvbnN0JiBfX3kpCnsKICByZXR1cm4gcGFpcjxfVDEgY29uc3QqLCBf
VDI+KHN0YXRpY19jYXN0PF9UMSBjb25zdCo+KF9feCksIF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVDEsIGNsYXNzIF9UMiwgaW50IF9TejEsIGludCBfU3oyPgppbmxpbmUgcGFpcjxfVDEgY29u
c3QqLCBfVDIgY29uc3QqPiBtYWtlX3BhaXIoX1QxIGNvbnN0ICgmX194KVtfU3oxXSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UMiBjb25zdCAoJl9feSlb
X1N6Ml0pCnsKICByZXR1cm4gcGFpcjxfVDEgY29uc3QqLCBfVDIgY29uc3QqPihzdGF0aWNfY2Fz
dDxfVDEgY29uc3QqPihfX3gpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PF9UMiBjb25zdCo+KF9feSkpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwg
Y2xhc3MgX1QyPgppbmxpbmUgcGFpcjxfVDEsIF9UMj4gbWFrZV9wYWlyKGNvbnN0IF9UMSYgX194
LCBjb25zdCBfVDImIF9feSkKewogIHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0K
Cgp9CgoKbmFtZXNwYWNlIF9TVEwgeyBuYW1lc3BhY2UgcmVsX29wcyB7Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAm
IF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpp
bmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7CiAg
cmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGJvb2wgb3Bl
cmF0b3I8PShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1cm4gIShfX3kg
PCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNv
bnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0K
Cn0gfQojIDUyICIuLi9zdGxwb3J0L3N0bC9fYWxnb2Jhc2UuaCIgMgoKCgojIDEgIi4uL3N0bHBv
cnQvc3RsL19pdGVyYXRvcl9iYXNlLmgiIDEKIyA0MSAiLi4vc3RscG9ydC9zdGwvX2l0ZXJhdG9y
X2Jhc2UuaCIKbmFtZXNwYWNlIF9TVEwgewoKc3RydWN0IGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsK
c3RydWN0IG91dHB1dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yX3Rh
ZyA6IHB1YmxpYyBpbnB1dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0
ZXJhdG9yX3RhZyA6IHB1YmxpYyBmb3J3YXJkX2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IHJhbmRv
bV9hY2Nlc3NfaXRlcmF0b3JfdGFnIDogcHVibGljIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFn
IHt9OwoKCnRlbXBsYXRlIDxjbGFzcyBfQ2F0ZWdvcnksIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3Rh
bmNlID0gcHRyZGlmZl90LAogICAgICAgICAgY2xhc3MgX1BvaW50ZXIgPSBfVHAqLCBjbGFzcyBf
UmVmZXJlbmNlID0gX1RwJiA+CnN0cnVjdCBpdGVyYXRvciB7CiAgdHlwZWRlZiBfQ2F0ZWdvcnkg
aXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9E
aXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfUG9pbnRlciBwb2ludGVyOwogIHR5
cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVuY2U7Cn07CnRlbXBsYXRlPD4Kc3RydWN0IGl0ZXJhdG9y
PG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+IHsKICB0eXBlZGVm
IG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CgogIHR5cGVkZWYgdm9pZCB2
YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lk
IHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCn07CiMgOTAgIi4uL3N0bHBvcnQv
c3RsL19pdGVyYXRvcl9iYXNlLmgiCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CnN0cnVjdCBp
dGVyYXRvcl90cmFpdHMgewogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjppdGVyYXRvcl9j
YXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6
dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZm
ZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9y
Ojpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnJlZmVyZW5j
ZSByZWZlcmVuY2U7Cn07CiMgMTA5ICIuLi9zdGxwb3J0L3N0bC9faXRlcmF0b3JfYmFzZS5oIgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9UcCo+IHsK
ICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog
IHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90
eXBlOwogIHR5cGVkZWYgY29uc3QgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwJiBy
ZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRz
PF9UcCo+IHsKICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2Nh
dGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlm
ZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZl
cmVuY2U7Cn07CiMgMTYwICIuLi9zdGxwb3J0L3N0bC9faXRlcmF0b3JfYmFzZS5oIgp0ZW1wbGF0
ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojpp
dGVyYXRvcl9jYXRlZ29yeSBfX2l0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVyJikgewogIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkg
X0NhdGVnb3J5OwogIHJldHVybiBfQ2F0ZWdvcnkoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVy
PgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90eXBl
KiBfX2Rpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXImKSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX2RpZmZfdHlwZTsKICByZXR1cm4g
c3RhdGljX2Nhc3Q8X2RpZmZfdHlwZSo+KDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+Cmlu
bGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKiBfX3ZhbHVl
X3R5cGUoY29uc3QgX0l0ZXImKSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0l0ZXI+Ojp2YWx1ZV90eXBlIF92YWx1ZV90eXBlOwogIHJldHVybiBzdGF0aWNfY2FzdDxfdmFs
dWVfdHlwZSo+KDApOwp9CiMgMjMyICIuLi9zdGxwb3J0L3N0bC9faXRlcmF0b3JfYmFzZS5oIgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBpbnB1dF9pdGVyYXRv
ciA6CiAgcHVibGljIGl0ZXJhdG9yIDxpbnB1dF9pdGVyYXRvcl90YWcsIF9UcCwgX0Rpc3RhbmNl
LCBfVHAqLCBfVHAmPiB7fTsKc3RydWN0IG91dHB1dF9pdGVyYXRvciA6IHB1YmxpYyBpdGVyYXRv
ciA8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4ge307CnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGZvcndhcmRfaXRlcmF0b3Ig
OgogIHB1YmxpYyBpdGVyYXRvcjxmb3J3YXJkX2l0ZXJhdG9yX3RhZywgX1RwLCBfRGlzdGFuY2Us
IF9UcCosIF9UcCY+IHt9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0
cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yIDoKICBwdWJsaWMgaXRlcmF0b3I8YmlkaXJlY3Rp
b25hbF9pdGVyYXRvcl90YWcsIF9UcCwgX0Rpc3RhbmNlLCBfVHAqLCBfVHAmPiB7fTsKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVy
YXRvciA6CiAgcHVibGljIGl0ZXJhdG9yPHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCBfVHAs
IF9EaXN0YW5jZSwgX1RwKiwgX1RwJj4ge307CiMgMjc3ICIuLi9zdGxwb3J0L3N0bC9faXRlcmF0
b3JfYmFzZS5oIgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5j
ZT4KaW5saW5lIHZvaWQgX19kaXN0YW5jZShjb25zdCBfSW5wdXRJdGVyYXRvciYgX19maXJzdCwg
Y29uc3QgX0lucHV0SXRlcmF0b3ImIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9EaXN0YW5jZSYgX19uLCBjb25zdCBpbnB1dF9pdGVyYXRvcl90YWcgJikgewogIF9J
bnB1dEl0ZXJhdG9yIF9faXQoX19maXJzdCk7CiAgd2hpbGUgKF9faXQgIT0gX19sYXN0KSB7ICsr
X19pdDsgKytfX247IH0KfQojIDMwMSAiLi4vc3RscG9ydC9zdGwvX2l0ZXJhdG9yX2Jhc2UuaCIK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgpp
bmxpbmUgdm9pZCBfX2Rpc3RhbmNlKGNvbnN0IF9SYW5kb21BY2Nlc3NJdGVyYXRvciYgX19maXJz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciYgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh
bmNlJiBfX24sIGNvbnN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnICYpIHsKICBfX24gKz0g
X19sYXN0IC0gX19maXJzdDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xh
c3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBkaXN0YW5jZShjb25zdCBfSW5wdXRJdGVyYXRvciYg
X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfSW5wdXRJdGVy
YXRvciYgX19sYXN0LCBfRGlzdGFuY2UmIF9fbikgewogIF9fZGlzdGFuY2UoX19maXJzdCwgX19s
YXN0LCBfX24sIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czwgX0lucHV0SXRlcmF0b3IgPjo6aXRl
cmF0b3JfY2F0ZWdvcnkoKSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+Cmlu
bGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNl
X3R5cGUKX19kaXN0YW5jZShjb25zdCBfSW5wdXRJdGVyYXRvciYgX19maXJzdCwgY29uc3QgX0lu
cHV0SXRlcmF0b3ImIF9fbGFzdCwgY29uc3QgaW5wdXRfaXRlcmF0b3JfdGFnICYpIHsKICB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19u
ID0gMDsKICBfSW5wdXRJdGVyYXRvciBfX2l0KF9fZmlyc3QpOwogIHdoaWxlIChfX2l0ICE9IF9f
bGFzdCkgewogICAgKytfX2l0OyArK19fbjsKICB9CiAgcmV0dXJuIF9fbjsKfQojIDM1NSAiLi4v
c3RscG9ydC9zdGwvX2l0ZXJhdG9yX2Jhc2UuaCIKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz
SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0YW5jZShjb25zdCBfUmFuZG9tQWNjZXNz
SXRlcmF0b3ImIF9fZmlyc3QsIGNvbnN0IF9SYW5kb21BY2Nlc3NJdGVyYXRvciYgX19sYXN0LAog
ICAgICAgICAgIGNvbnN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnICYpIHsKICByZXR1cm4g
X19sYXN0IC0gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgppbmxp
bmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90
eXBlCmRpc3RhbmNlKGNvbnN0IF9JbnB1dEl0ZXJhdG9yJiBfX2ZpcnN0LCBjb25zdCBfSW5wdXRJ
dGVyYXRvciYgX19sYXN0KSB7CiAgcmV0dXJuIF9fZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8IF9JbnB1dEl0ZXJhdG9yID46Oml0ZXJhdG9yX2NhdGVn
b3J5KCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfTm9uY29uc3RfdHJhaXRz
OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9Db25zdF90cmFpdHMgewogIHR5cGVkZWYg
X1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5jZTsKICB0eXBlZGVm
IGNvbnN0IF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9Ob25jb25zdF90cmFpdHM8X1RwPiBfTm9u
X2NvbnN0X3RyYWl0czsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfTm9uY29uc3Rf
dHJhaXRzIHsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX1RwJiByZWZlcmVu
Y2U7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfTm9uY29uc3RfdHJhaXRzPF9U
cD4gX05vbl9jb25zdF90cmFpdHM7Cn07CiMgNDEwICIuLi9zdGxwb3J0L3N0bC9faXRlcmF0b3Jf
YmFzZS5oIgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxp
bmUgdm9pZCBfX2FkdmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBjb25zdCBp
bnB1dF9pdGVyYXRvcl90YWcgJikgewogIHdoaWxlIChfX24tLSkgKytfX2k7Cn0KCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFu
Y2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBjb25zdCBvdXRwdXRfaXRlcmF0b3Jf
dGFnICYpIHsKICB3aGlsZSAoX19uLS0pICsrX19pOwp9CiMgNDI4ICIuLi9zdGxwb3J0L3N0bC9f
aXRlcmF0b3JfYmFzZS5oIgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwg
Y2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX0JpZGlyZWN0aW9uYWxJdGVy
YXRvciYgX19pLCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmlk
aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgJikgewogIGlmIChfX24gPiAwKQogICAgd2hpbGUgKF9f
bi0tKSArK19faTsKICBlbHNlCiAgICB3aGlsZSAoX19uKyspIC0tX19pOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lk
IF9fYWR2YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnICYpIHsK
ICBfX2kgKz0gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9E
aXN0YW5jZT4KaW5saW5lIHZvaWQgYWR2YW5jZShfSW5wdXRJdGVyYXRvciYgX19pLCBfRGlzdGFu
Y2UgX19uKSB7CiAgX19hZHZhbmNlKF9faSwgX19uLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
IF9JbnB1dEl0ZXJhdG9yID46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOwp9Cgp9CiMgNTYgIi4uL3N0
bHBvcnQvc3RsL19hbGdvYmFzZS5oIiAyCgoKbmFtZXNwYWNlIF9TVEwgewoKdGVtcGxhdGUgPGNs
YXNzIF9UcD4KaW5saW5lIHZvaWQgc3dhcChfVHAmIF9fYSwgX1RwJiBfX2IpIHsKICBfVHAgX190
bXAgPSBfX2E7CiAgX19hID0gX19iOwogIF9fYiA9IF9fdG1wOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KaW5saW5lIHZvaWQgaXRlcl9zd2Fw
KF9Gb3J3YXJkSXRlcjEgX19pMSwgX0ZvcndhcmRJdGVyMiBfX2kyKSB7CiAgc3dhcCgqX19pMSwg
Kl9faTIpOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0IF9UcCYgKG1p
bikoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7IHJldHVybiBfX2IgPCBfX2EgPyBf
X2IgOiBfX2E7IH0KdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0IF9UcCYgKG1heCko
Y29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7IHJldHVybiBfX2EgPCBfX2IgPyBfX2Ig
OiBfX2E7IH0KCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxp
bmUgY29uc3QgX1RwJiAobWluKShjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21w
YXJlIF9fY29tcCkgewogIHJldHVybiBfX2NvbXAoX19iLCBfX2EpID8gX19iIDogX19hOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIGNvbnN0IF9UcCYgKG1h
eCkoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKICBy
ZXR1cm4gX19jb21wKF9fYSwgX19iKSA/IF9fYiA6IF9fYTsKfQojIDEwNiAiLi4vc3RscG9ydC9z
dGwvX2FsZ29iYXNlLmgiCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0
SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5KF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
X091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5w
dXRfaXRlcmF0b3JfdGFnICYsIF9EaXN0YW5jZSopIHsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0OyArK19fcmVzdWx0LCArK19fZmlyc3QpCiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICBy
ZXR1cm4gX19yZXN1bHQ7Cn0KIyAxMzQgIi4uL3N0bHBvcnQvc3RsL19hbGdvYmFzZS5oIgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBf
RGlzdGFuY2U+CmlubGluZSBfT3V0cHV0SXRlcgpfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m
aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQsIGNvbnN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnICYsIF9EaXN0YW5jZSopIHsKICBm
b3IgKF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikgewog
ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgICArK19fcmVzdWx0Owog
IH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCmlubGluZSB2b2lkKgpfX2NvcHlfdHJpdmlhbChjb25z
dCB2b2lkKiBfX2ZpcnN0LCBjb25zdCB2b2lkKiBfX2xhc3QsIHZvaWQqIF9fcmVzdWx0KSB7CiAg
cmV0dXJuIChfX2xhc3QgPT0gX19maXJzdCkgPyBfX3Jlc3VsdCA6CiAgICAoKGNoYXIqKW1lbW1v
dmUoX19yZXN1bHQsIF9fZmlyc3QsICgoY29uc3QgY2hhciopX19sYXN0IC0gKGNvbnN0IGNoYXIq
KV9fZmlyc3QpKSkgKwogICAgKChjb25zdCBjaGFyKilfX2xhc3QgLSAoY29uc3QgY2hhciopX19m
aXJzdCk7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBf
QmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0Jp
ZGlyZWN0aW9uYWxJdGVyMiBfX2NvcHlfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2Zp
cnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgJiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSopCnsK
ICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsK
ICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg
Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19jb3B5X2JhY2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyAmLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgZm9yIChfRGlzdGFu
Y2UgX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pCiAgICAqLS1fX3Jlc3Vs
dCA9ICotLV9fbGFzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCmlubGluZSB2b2lkKgpfX2NvcHlf
dHJpdmlhbF9iYWNrd2FyZChjb25zdCB2b2lkKiBfX2ZpcnN0LCBjb25zdCB2b2lkKiBfX2xhc3Qs
IHZvaWQqIF9fcmVzdWx0KSB7CiAgY29uc3QgcHRyZGlmZl90IF9OdW0gPSAoY29uc3QgY2hhciop
X19sYXN0IC0gKGNvbnN0IGNoYXIqKV9fZmlyc3Q7CiAgcmV0dXJuIChfTnVtID4gMCkgPyBtZW1t
b3ZlKChjaGFyKilfX3Jlc3VsdCAtIF9OdW0sIF9fZmlyc3QsIF9OdW0pIDogX19yZXN1bHQgOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBf
T3V0cHV0SXRlciBfX2NvcHlfcHRycyhfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgY29uc3QgX19mYWxzZV90eXBlJikgewogIHJldHVy
biBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czwgX0lucHV0SXRlciA+OjppdGVyYXRvcl9jYXRlZ29yeSgpLAog
ICAgICAgICAgICAgICAgKHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czwgX0lucHV0SXRlciA+Ojpk
aWZmZXJlbmNlX3R5cGUqKTApOwp9CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBf
T3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weV9wdHJzKF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBjb25zdCBfX3Ry
dWVfdHlwZSYpIHsKCgogIHJldHVybiAoX091dHB1dEl0ZXIpX19jb3B5X3RyaXZpYWwoX19maXJz
dCwgX19sYXN0LCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz
cyBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weV9hdXgoX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX091dHB1dEl0ZXIgX19yZXN1bHQsIGNvbnN0IF9f
dHJ1ZV90eXBlJikgewogIHJldHVybiBfX2NvcHlfcHRycyhfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
dWx0LAogICAgICAgICAgICAgICAgICAgICBfSXNPS1RvTWVtQ3B5KCh0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8IF9JbnB1dEl0ZXIgPjo6dmFsdWVfdHlwZSopMCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAodHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPCBfT3V0cHV0SXRlciA+
Ojp2YWx1ZV90eXBlKikwKS5fUmV0KCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg
Y2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfYXV4KF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBjb25z
dCBfX2ZhbHNlX3R5cGUmKSB7CiAgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
dWx0LAogICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPCBfSW5wdXRJdGVy
ID46Oml0ZXJhdG9yX2NhdGVnb3J5KCksICh0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8IF9JbnB1
dEl0ZXIgPjo6ZGlmZmVyZW5jZV90eXBlKikwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgY29weShfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogCiAg
ICByZXR1cm4gX19jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfQm90aFB0clR5
cGU8IF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPiA6OiBfUmV0KCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2Nv
cHlfYmFja3dhcmRfcHRycyhfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBf
T3V0cHV0SXRlciBfX3Jlc3VsdCwgY29uc3QgX19mYWxzZV90eXBlJikgewogIHJldHVybiBfX2Nv
cHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPCBfSW5wdXRJdGVyID46Oml0ZXJhdG9yX2NhdGVnb3J5KCksICh0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8IF9JbnB1dEl0ZXIgPjo6ZGlmZmVyZW5jZV90eXBlKikwKTsKfQp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRl
ciBfX2NvcHlfYmFja3dhcmRfcHRycyhfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgY29uc3QgX190cnVlX3R5cGUmKSB7CiAgcmV0dXJu
IChfT3V0cHV0SXRlcilfX2NvcHlfdHJpdmlhbF9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsIF9f
cmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVy
PgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X2JhY2t3YXJkX2F1eChfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgY29uc3QgX19mYWxz
ZV90eXBlJikgewogIHJldHVybiBfX2NvcHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LCBfX3Jl
c3VsdCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPCBfSW5wdXRJdGVyID46Oml0ZXJhdG9yX2Nh
dGVnb3J5KCksICh0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8IF9JbnB1dEl0ZXIgPjo6ZGlmZmVy
ZW5jZV90eXBlKikwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRw
dXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X2JhY2t3YXJkX2F1eChfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgY29uc3Qg
X190cnVlX3R5cGUmKSB7CiAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9wdHJzKF9fZmlyc3QsIF9f
bGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Jc09LVG9NZW1D
cHkoKHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czwgX0lucHV0SXRlciA+Ojp2YWx1ZV90eXBlKikw
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8IF9PdXRwdXRJdGVyID46OnZhbHVlX3R5cGUqKTApLl9SZXQoKSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIF9P
dXRwdXRJdGVyIGNvcHlfYmFja3dhcmQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsKIAogICAgcmV0dXJuIF9fY29weV9iYWNrd2Fy
ZF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0JvdGhQdHJUeXBlPCBfSW5wdXRJdGVy
LCBfT3V0cHV0SXRlcj4gOjogX1JldCgpICk7Cn0KIyAyODIgIi4uL3N0bHBvcnQvc3RsL19hbGdv
YmFzZS5oIgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9P
dXRwdXRJdGVyPgppbmxpbmUKcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4gX19jb3B5X24o
X0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXRfaXRlcmF0b3JfdGFnICYpIHsKICBmb3Ig
KCA7IF9fY291bnQgPiAwOyAtLV9fY291bnQpIHsKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Owog
ICAgKytfX2ZpcnN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRl
ciwgX091dHB1dEl0ZXI+KF9fZmlyc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9S
QUl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X1JBSXRl
ciwgX091dHB1dEl0ZXI+Cl9fY29weV9uKF9SQUl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwK
ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgIGNvbnN0IHJhbmRvbV9hY2Nl
c3NfaXRlcmF0b3JfdGFnICYpIHsKICBfUkFJdGVyIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2NvdW50
OwogIHJldHVybiBwYWlyPF9SQUl0ZXIsIF9PdXRwdXRJdGVyPihfX2xhc3QsIGNvcHkoX19maXJz
dCwgX19sYXN0LCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh
c3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfT3V0
cHV0SXRlcj4KX19jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LCBfT3V0
cHV0SXRlciBfX3Jlc3VsdCkgewogCiAgcmV0dXJuIF9fY29weV9uKF9fZmlyc3QsIF9fY291bnQs
IF9fcmVzdWx0LCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8IF9JbnB1dEl0ZXIgPjo6aXRlcmF0
b3JfY2F0ZWdvcnkoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6
ZSwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVy
Pgpjb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LCBfT3V0cHV0SXRlciBf
X3Jlc3VsdCkgewogCiAgcmV0dXJuIF9fY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0
LCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8IF9JbnB1dEl0ZXIgPjo6aXRlcmF0b3JfY2F0ZWdv
cnkoKSk7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+Cmlu
bGluZQp2b2lkIGZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
IGNvbnN0IF9UcCYgX192YWx1ZSkgewogCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf
X2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX091dHB1
dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+CmlubGluZQpfT3V0cHV0SXRlciBmaWxsX24o
X091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUpIHsKIAog
IGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19maXJzdCkKICAgICpfX2ZpcnN0ID0gX192YWx1
ZTsKICByZXR1cm4gX19maXJzdDsKfQoKCgoKaW5saW5lIHZvaWQgZmlsbCh1bnNpZ25lZCBjaGFy
KiBfX2ZpcnN0LCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QsCiAgICAgICAgICAgICAgICAgY29uc3Qg
dW5zaWduZWQgY2hhciYgX192YWx1ZSkgewogIHVuc2lnbmVkIGNoYXIgX190bXAgPSBfX3ZhbHVl
OwogIG1lbXNldChfX2ZpcnN0LCBfX3RtcCwgX19sYXN0IC0gX19maXJzdCk7Cn0KCmlubGluZSB2
b2lkIGZpbGwoc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHNpZ25lZCBjaGFyKiBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgY29uc3Qgc2lnbmVkIGNoYXImIF9fdmFsdWUpIHsKICBzaWduZWQgY2hhciBf
X3RtcCA9IF9fdmFsdWU7CiAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7Cn0KCmlubGluZSB2b2lkIGZpbGwoY2hhciog
X19maXJzdCwgY2hhciogX19sYXN0LCBjb25zdCBjaGFyJiBfX3ZhbHVlKSB7CiAgY2hhciBfX3Rt
cCA9IF9fdmFsdWU7CiAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+
KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9TaXplPgpp
bmxpbmUgdW5zaWduZWQgY2hhciogZmlsbF9uKHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIF9TaXpl
IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyJiBf
X3ZhbHVlKSB7CiAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBfX3ZhbHVlKTsKICByZXR1
cm4gX19maXJzdCArIF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9TaXplPgppbmxpbmUgc2lnbmVk
IGNoYXIqIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHNpZ25lZCBjaGFyJiBfX3ZhbHVlKSB7CiAgZmlsbChfX2ZpcnN0LCBf
X2ZpcnN0ICsgX19uLCBfX3ZhbHVlKTsKICByZXR1cm4gX19maXJzdCArIF9fbjsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9TaXplPgppbmxpbmUgY2hhciogZmlsbF9uKGNoYXIqIF9fZmlyc3QsIF9TaXpl
IF9fbiwgY29uc3QgY2hhciYgX192YWx1ZSkgewogIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9f
biwgX192YWx1ZSk7CiAgcmV0dXJuIF9fZmlyc3QgKyBfX247Cn0KCgoKCgoKCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmlubGluZQpwYWlyPF9JbnB1dEl0
ZXIxLCBfSW5wdXRJdGVyMj4gbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIp
IHsKIAogCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgKl9fZmlyc3QxID09ICpfX2Zp
cnN0MikgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAgfQogIHJldHVybiBwYWly
PF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVBy
ZWRpY2F0ZT4KaW5saW5lCnBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPiBtaXNtYXRjaChf
SW5wdXRJdGVyMSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkgewogCiAKICB3aGls
ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmly
c3QyKSkgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAgfQogIHJldHVybiBwYWly
PF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KaW5saW5lCmJvb2wgZXF1
YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKSB7CiAKIAogIGZvciAoIDsgX19maXJzdDEgIT0g
X19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgIGlmICghKCpfX2ZpcnN0MSA9PSAq
X19maXJzdDIpKQogICAgICByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9CaW5hcnlQcmVk
aWNhdGU+CmlubGluZQpib29sIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVy
MSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0JpbmFy
eVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKSB7CiAKIAogIGZvciAoIDsgX19maXJzdDEgIT0gX19s
YXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgIGlmICghX19iaW5hcnlfcHJlZCgqX19m
aXJzdDEsICpfX2ZpcnN0MikpCiAgICAgIHJldHVybiBmYWxzZTsKICByZXR1cm4gdHJ1ZTsKfQoK
CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmJvb2wg
bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz
dDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpOwoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBj
bGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0NvbXBhcmU+CmJvb2wgbGV4aWNvZ3JhcGhpY2FsX2Nv
bXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9f
bGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKTsKCmlu
bGluZSBib29sCmxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9f
Zmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xh
c3QxLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0
MiwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikK
ewogIGNvbnN0IHNpemVfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CiAgY29uc3Qgc2l6
ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKIAogCgogIGNvbnN0IGludCBfX3Jlc3Vs
dCA9IG1lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIsIChtaW4pIChfX2xlbjEsIF9fbGVuMikpOwog
IHJldHVybiBfX3Jlc3VsdCAhPSAwID8gKF9fcmVzdWx0IDwgMCkgOiAoX19sZW4xIDwgX19sZW4y
KTsKfQojIDQ4MyAiLi4vc3RscG9ydC9zdGwvX2FsZ29iYXNlLmgiCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmludCBfX2xleGljb2dyYXBoaWNhbF9jb21w
YXJlXzN3YXkoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1
dEl0ZXIyIF9fbGFzdDIpOwoKaW5saW5lIGludApfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3
YXkoY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QyKQp7CiAgY29uc3Qg
cHRyZGlmZl90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsKICBjb25zdCBwdHJkaWZmX3Qg
X19sZW4yID0gX19sYXN0MiAtIF9fZmlyc3QyOwogIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNt
cChfX2ZpcnN0MSwgX19maXJzdDIsIChtaW4pIChfX2xlbjEsIF9fbGVuMikpOwogIHJldHVybiBf
X3Jlc3VsdCAhPSAwID8gX19yZXN1bHQKICAgICAgICAgICAgICAgICAgICAgICA6IChfX2xlbjEg
PT0gX19sZW4yID8gMCA6IChfX2xlbjEgPCBfX2xlbjIgPyAtMSA6IDEpKTsKfQojIDUxNSAiLi4v
c3RscG9ydC9zdGwvX2FsZ29iYXNlLmgiCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xh
c3MgX0lucHV0SXRlcjI+CmludCBsZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9JbnB1dEl0
ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0Mik7CgoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKY291bnQoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlKSB7CiAK
ICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBf
X24gPSAwOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmICgq
X19maXJzdCA9PSBfX3ZhbHVlKQogICAgICArK19fbjsKICByZXR1cm4gX19uOwp9CgoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9UcD4KX0lucHV0SXRlciBmaW5kKF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwpOwp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX0lucHV0SXRlciBmaW5kX2lm
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVk
KTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwg
Y2xhc3MgX0JpbmFyeVByZWQ+Cl9Gb3J3YXJkSXRlcjEgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19m
aXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLCBfQmluYXJ5UHJlZCBfX3By
ZWRpY2F0ZSk7CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRl
ciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0lucHV0SXRlciBfX2ZpbmRfZmlyc3Rfb2YoX0lu
cHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCk7Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwKICAgICAgICAgIGNs
YXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlcjEKZmluZF9lbmQoX0ZvcndhcmRJdGVy
MSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICBfRm9yd2FyZEl0ZXIy
IF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgIF9CaW5hcnlQcmVkaWNh
dGUgX19jb21wKTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+Cmlu
bGluZSB2b2lkCnJlcGxhY2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh
c3QsCiAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25ld192YWx1
ZSkgewogCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKCpf
X2ZpcnN0ID09IF9fb2xkX3ZhbHVlKQogICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBj
bGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX2xvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXAsIF9EaXN0YW5jZSopOwoKfQoKCiMg
MSAiLi4vc3RscG9ydC9zdGwvX2FsZ29iYXNlLmMiIDEKIyAyOCAiLi4vc3RscG9ydC9zdGwvX2Fs
Z29iYXNlLmMiCm5hbWVzcGFjZSBfU1RMIHsKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwg
Y2xhc3MgX0lucHV0SXRlcjI+CmJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRl
cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpIHsKIAogICAK
ICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAg
ICAgICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgICBpZiAoKl9fZmlyc3Qx
IDwgKl9fZmlyc3QyKQogICAgICAgIHJldHVybiB0cnVlOwogICAgICBpZiAoKl9fZmlyc3QyIDwg
Kl9fZmlyc3QxKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICByZXR1cm4gX19maXJzdDEg
PT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBsZXhpY29n
cmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lu
cHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf
X2NvbXApIHsKIAogICAKICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0
MiAhPSBfX2xhc3QyCiAgICAgICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAg
ICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgfQogIHJldHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9f
bGFzdDI7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVy
Mj4KaW50IF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBfX2ZpcnN0
MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikKewogIHdoaWxlIChf
X2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlmICgqX19m
aXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiAtMTsKICAgIGlmICgqX19maXJzdDIgPCAq
X19maXJzdDEpCiAgICAgIHJldHVybiAxOwogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7
CiAgfQogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKSB7CiAgICByZXR1cm4gIShfX2ZpcnN0MSA9
PSBfX2xhc3QxKTsKICB9CiAgZWxzZSB7CiAgICByZXR1cm4gLTE7CiAgfQp9CgoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KaW50IGxleGljb2dyYXBoaWNh
bF9jb21wYXJlXzN3YXkoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBf
SW5wdXRJdGVyMiBfX2xhc3QyKQp7CiAKICAgCiAgICByZXR1cm4gX19sZXhpY29ncmFwaGljYWxf
Y29tcGFyZV8zd2F5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7Cn0KCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmluZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNj
ZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgJikKewogIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX3RyaXBf
Y291bnQgPSAoX19sYXN0IC0gX19maXJzdCkgPj4gMjsKCiAgZm9yICggOyBfX3RyaXBfY291bnQg
PiAwIDsgLS1fX3RyaXBfY291bnQpIHsKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJu
IF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1
cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJl
dHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkg
cmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICBzd2l0Y2goX19sYXN0IC0gX19m
aXJzdCkgewogIGNhc2UgMzoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmly
c3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAyOgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSBy
ZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICBjYXNlIDE6CiAgICBpZiAoKl9fZmlyc3Qg
PT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMDoKICBkZWZh
dWx0OgogICAgcmV0dXJuIF9fbGFzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj
ZXNzSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlu
ZF9pZihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRl
IF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnICYpCnsKICB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50ID0g
KF9fbGFzdCAtIF9fZmlyc3QpID4+IDI7CgogIGZvciAoIDsgX190cmlwX2NvdW50ID4gMCA7IC0t
X190cmlwX2NvdW50KSB7CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7
CiAgICArK19fZmlyc3Q7CgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0
OwogICAgKytfX2ZpcnN0OwoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJz
dDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmly
c3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgewogIGNh
c2UgMzoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19m
aXJzdDsKICBjYXNlIDI6CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7
CiAgICArK19fZmlyc3Q7CiAgY2FzZSAxOgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVy
biBfX2ZpcnN0OwoKICBjYXNlIDA6CiAgZGVmYXVsdDoKICAgIHJldHVybiBfX2xhc3Q7CiAgfQp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX0lucHV0SXRl
ciBfX2ZpbmQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBpbnB1dF9pdGVyYXRvcl90YWcgJikKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFz
dCAmJiAhKCpfX2ZpcnN0ID09IF9fdmFsKSkKICAgICsrX19maXJzdDsKICByZXR1cm4gX19maXJz
dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+CmlubGlu
ZSBfSW5wdXRJdGVyIF9fZmluZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dF9pdGVyYXRvcl90YWcgJikKewogIHdo
aWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhX19wcmVkKCpfX2ZpcnN0KSkKICAgICsrX19maXJz
dDsKICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz
IF9QcmVkaWNhdGU+Cl9JbnB1dEl0ZXIgZmluZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpIHsKIAog
ICAgcmV0dXJuIF9fZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPCBfSW5wdXRJdGVyID46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwPgpfSW5wdXRJdGVyIGZpbmQoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCkKewogCiAg
ICByZXR1cm4gX19maW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czwgX0lucHV0SXRlciA+OjppdGVyYXRvcl9jYXRlZ29yeSgpKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsIGNsYXNzIF9CaW5hcnlQ
cmVkPgpfRm9yd2FyZEl0ZXIxIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2Fy
ZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJz
dDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVBy
ZWQgX19wcmVkaWNhdGUpCnsKIAogICAKCiAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSB8fCBf
X2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICByZXR1cm4gX19maXJzdDE7CgoKICBfRm9yd2FyZEl0
ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICArK19fdG1wOwogIGlmIChfX3RtcCA9PSBfX2xhc3QyKSB7
CiAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3Qx
LCAqX19maXJzdDIpKQogICAgICArK19fZmlyc3QxOwogICAgcmV0dXJuIF9fZmlyc3QxOwogIH0K
CgoKICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7
CgoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgIHdoaWxlIChfX2ZpcnN0MSAh
PSBfX2xhc3QxKSB7CiAgICAgIGlmIChfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0Mikp
CiAgICAgICAgYnJlYWs7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICB3aGlsZSAoX19maXJz
dDEgIT0gX19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAg
ICArK19fZmlyc3QxOwogICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgIHJldHVybiBf
X2xhc3QxOwoKICAgIF9fcCA9IF9fcDE7CiAgICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9f
Zmlyc3QxOwogICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpIHJldHVybiBfX2xhc3QxOwoK
ICAgIHdoaWxlIChfX3ByZWRpY2F0ZSgqX19jdXJyZW50LCAqX19wKSkgewogICAgICBpZiAoKytf
X3AgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgIGlmICgrK19fY3Vy
cmVudCA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgfQoKICAgICsrX19m
aXJzdDE7CiAgfQogIHJldHVybiBfX2ZpcnN0MTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpfSW5wdXRJ
dGVyIF9fZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFz
dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0Zv
cndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVk
aWNhdGUgX19jb21wKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3Qx
KQogICAgZm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRlciAhPSBfX2xh
c3QyOyArK19faXRlcikKICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2l0ZXIpKQogICAg
ICAgIHJldHVybiBfX2ZpcnN0MTsKICByZXR1cm4gX19sYXN0MTsKfQojIDI3OCAiLi4vc3RscG9y
dC9zdGwvX2FsZ29iYXNlLmMiCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBf
Rm9yd2FyZEl0ZXIyLAogIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlcjEgX19m
aW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0
ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3J3YXJkX2l0ZXJh
dG9yX3RhZyAmLCBjb25zdCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyAmLAogICAgICAgICAgICAgICAg
ICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCnsKICBpZiAoX19maXJzdDIgPT0gX19s
YXN0MikKICAgIHJldHVybiBfX2xhc3QxOwogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyMSBfX3Jl
c3VsdCA9IF9fbGFzdDE7CiAgICB3aGlsZSAoMSkgewogICAgICBfRm9yd2FyZEl0ZXIxIF9fbmV3
X3Jlc3VsdAogICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19s
YXN0MiwgX19jb21wKTsKICAgICAgaWYgKF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgICAg
IHJldHVybiBfX3Jlc3VsdDsKICAgICAgZWxzZSB7CiAgICAgICAgX19yZXN1bHQgPSBfX25ld19y
ZXN1bHQ7CiAgICAgICAgX19maXJzdDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgKytfX2ZpcnN0
MTsKICAgICAgfQogICAgfQogIH0KfQoKCgoKCn0KIyAxICIuLi9zdGxwb3J0L3N0bC9faXRlcmF0
b3IuaCIgMQojIDM3ICIuLi9zdGxwb3J0L3N0bC9faXRlcmF0b3IuaCIKbmFtZXNwYWNlIF9TVEwg
ewojIDQ2ICIuLi9zdGxwb3J0L3N0bC9faXRlcmF0b3IuaCIKdGVtcGxhdGUgPGNsYXNzIF9JdGVy
YXRvcj4KY2xhc3MgcmV2ZXJzZV9pdGVyYXRvciA6CiAgcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAg
ICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUs
CiAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpk
aWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSXRlcmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgp7CnByb3RlY3RlZDoKICBfSXRlcmF0b3Ig
Y3VycmVudDsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiBfU2VsZjsKcHVi
bGljOgogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJh
dG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVy
ZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46
OnBvaW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRl
cmF0b3I+OjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgX0l0ZXJhdG9yIGl0ZXJhdG9y
X3R5cGU7CnB1YmxpYzoKICByZXZlcnNlX2l0ZXJhdG9yKCkge30KICBleHBsaWNpdCByZXZlcnNl
X2l0ZXJhdG9yKGl0ZXJhdG9yX3R5cGUgX194KSA6IGN1cnJlbnQoX194KSB7fQogIHJldmVyc2Vf
aXRlcmF0b3IoY29uc3QgX1NlbGYmIF9feCkgOiBjdXJyZW50KF9feC5jdXJyZW50KSB7fQogIF9T
ZWxmJiBvcGVyYXRvciA9IChjb25zdCBfU2VsZiYgX194KSB7IGN1cnJlbnQgPSBfX3guYmFzZSgp
OyByZXR1cm4gKnRoaXM7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgogIHJldmVyc2VfaXRl
cmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcj4mIF9feCkgOiBjdXJyZW50KF9feC5i
YXNlKCkpIHt9CiAgdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgogIF9TZWxmJiBvcGVyYXRvciA9IChj
b25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194KSB7IGN1cnJlbnQgPSBfX3guYmFzZSgp
OyByZXR1cm4gKnRoaXM7IH0KCgogIGl0ZXJhdG9yX3R5cGUgYmFzZSgpIGNvbnN0IHsgcmV0dXJu
IGN1cnJlbnQ7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAgX0l0ZXJhdG9y
IF9fdG1wID0gY3VycmVudDsKICAgIHJldHVybiAqLS1fX3RtcDsKICB9CiAgcG9pbnRlciBvcGVy
YXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KICBfU2VsZiYgb3BlcmF0
b3IrKygpIHsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3Bl
cmF0b3IrKyhpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAtLWN1cnJlbnQ7CiAg
ICByZXR1cm4gX190bXA7CiAgfQogIF9TZWxmJiBvcGVyYXRvci0tKCkgewogICAgKytjdXJyZW50
OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvci0tKGludCkgewogICAgX1Nl
bGYgX190bXAgPSAqdGhpczsKICAgICsrY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9Cgog
IF9TZWxmIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7CiAgICByZXR1cm4g
X1NlbGYoY3VycmVudCAtIF9fbik7CiAgfQogIF9TZWxmJiBvcGVyYXRvcis9KGRpZmZlcmVuY2Vf
dHlwZSBfX24pIHsKICAgIGN1cnJlbnQgLT0gX19uOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBf
U2VsZiBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgewogICAgcmV0dXJuIF9T
ZWxmKGN1cnJlbnQgKyBfX24pOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5
cGUgX19uKSB7CiAgICBjdXJyZW50ICs9IF9fbjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgcmVm
ZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKigq
dGhpcyArIF9fbik7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kp
IHsKICByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf
SXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJh
dG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsK
fQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuICEo
X194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9w
ZXJhdG9yPihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAg
cmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJv
b2wgb3BlcmF0b3I8PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f
eSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+
CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+
JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy
YXRvcj4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNz
IF9JdGVyYXRvcj4KCgoKaW5saW5lIHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y
Pjo6ZGlmZmVyZW5jZV90eXBlCgpvcGVyYXRvci0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl
cmF0b3I+JiBfX3gsCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m
IF9feSkgewogIHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsKfQojIDE3OCAiLi4vc3Rs
cG9ydC9zdGwvX2l0ZXJhdG9yLmgiCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3IsIGNsYXNzIF9E
aWZmZXJlbmNlVHlwZT4KaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPgpvcGVyYXRv
cisoX0RpZmZlcmVuY2VUeXBlIG4sY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiB4
KSB7CiAgcmV0dXJuIHgub3BlcmF0b3IrKG4pOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFp
bmVyPgpjbGFzcyBiYWNrX2luc2VydF9pdGVyYXRvcgogIDogcHVibGljIGl0ZXJhdG9yPG91dHB1
dF9pdGVyYXRvcl90YWcsdm9pZCx2b2lkLHZvaWQsdm9pZD4Kewpwcm90ZWN0ZWQ6CiAgX0NvbnRh
aW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90
eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKCiAg
ZXhwbGljaXQgYmFja19pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5l
cigmX194KSB7fQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9y
PShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7CiAgICBj
b250YWluZXItPnB1c2hfYmFjayhfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgYmFj
a19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlz
OyB9CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJl
dHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRv
cisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVy
PgppbmxpbmUgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gYmFja19pbnNlcnRlcihf
Q29udGFpbmVyJiBfX3gpIHsKICByZXR1cm4gYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l
cj4oX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGZyb250X2luc2Vy
dF9pdGVyYXRvcgogIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsdm9pZCx2
b2lkLHZvaWQsdm9pZD4Kewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwpwdWJs
aWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0cHV0
X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICBleHBsaWNpdCBmcm9udF9pbnNlcnRf
aXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7fQogIGZyb250X2lu
c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0Nv
bnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgewogICAgY29udGFpbmVyLT5wdXNoX2Zyb250
KF9fdmFsdWUpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8
X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgZnJvbnRfaW5zZXJ0
X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBm
cm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVy
biAqdGhpczsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmlubGluZSBmcm9udF9p
bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gZnJvbnRfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194
KSB7CiAgcmV0dXJuIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KY2xhc3MgaW5zZXJ0X2l0ZXJhdG9yCiAgOiBwdWJs
aWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZyx2b2lkLHZvaWQsdm9pZCx2b2lkPgp7CnBy
b3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6
aXRlcmF0b3IgaXRlcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlw
ZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgaW5z
ZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0
b3IgX19pKQogICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQogIGluc2VydF9pdGVy
YXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6
dmFsdWVfdHlwZSYgX192YWx1ZSkgewogICAgaXRlciA9IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIs
IF9fdmFsdWUpOwogICAgKytpdGVyOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpbnNlcnRfaXRl
cmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgaW5zZXJ0
X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBp
bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhp
czsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXIsIGNsYXNzIF9JdGVyYXRvcj4KaW5s
aW5lIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPgppbnNlcnRlcihfQ29udGFpbmVyJiBfX3gs
IF9JdGVyYXRvciBfX2kpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9y
IF9faXRlcjsKICByZXR1cm4gaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCwgX19pdGVy
KF9faSkpOwp9Cgp9CiMgMzA5ICIuLi9zdGxwb3J0L3N0bC9fYWxnb2Jhc2UuYyIgMgpuYW1lc3Bh
Y2UgX1NUTCB7CgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9C
aWRpcmVjdGlvbmFsSXRlcjIsCiAgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0JpZGlyZWN0aW9u
YWxJdGVyMQpfX2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVj
dGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmly
c3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgY29uc3QgYmlkaXJl
Y3Rpb25hbF9pdGVyYXRvcl90YWcgJiwgY29uc3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcg
JiwKICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKewogIHR5cGVkZWYgcmV2ZXJz
ZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIxPiBfUmV2SXRlcjE7CiAgdHlwZWRlZiByZXZl
cnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsKCiAgX1Jldkl0ZXIx
IF9fcmxhc3QxKF9fZmlyc3QxKTsKICBfUmV2SXRlcjIgX19ybGFzdDIoX19maXJzdDIpOwogIF9S
ZXZJdGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIxKF9fbGFzdDEpLCBfX3JsYXN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwgX19ybGFz
dDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwoKICBpZiAoX19ycmVz
dWx0ID09IF9fcmxhc3QxKQogICAgcmV0dXJuIF9fbGFzdDE7CiAgZWxzZSB7CiAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIxIF9fcmVzdWx0ID0gX19ycmVzdWx0LmJhc2UoKTsKICAgIGFkdmFuY2UoX19y
ZXN1bHQsIC1kaXN0YW5jZShfX2ZpcnN0MiwgX19sYXN0MikpOwogICAgcmV0dXJuIF9fcmVzdWx0
OwogIH0KfQoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0
ZXIyLAogIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlcjEKZmluZF9lbmQoX0Zv
cndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICBfRm9y
d2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgIF9CaW5h
cnlQcmVkaWNhdGUgX19jb21wKQp7CiAKICAgCiAgICByZXR1cm4gX19maW5kX2VuZChfX2ZpcnN0
MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCgogICAgICAgICAgICAgICAgICAgICAgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPCBfRm9yd2FyZEl0ZXIxID46Oml0ZXJhdG9yX2NhdGVnb3J5
KCksCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8IF9Gb3J3
YXJkSXRlcjIgPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSwKCgoKCiAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNs
YXNzIF9Db21wYXJlLCBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX2xvd2VyX2JvdW5k
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXAsIF9EaXN0YW5j
ZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogIF9E
aXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICB3aGlsZSAoX19sZW4g
PiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgX19taWRkbGUgPSBfX2ZpcnN0Owog
ICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCBf
X3ZhbCkpIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAg
IF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogICAgZWxzZQogICAgICBfX2xlbiA9
IF9faGFsZjsKICB9CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCn0KIyA1NzYgIi4uL3N0bHBvcnQvc3Rs
L19hbGdvYmFzZS5oIiAyCiMgMzMgIi4uL3N0bHBvcnQvc3RsL19jdHlwZS5oIiAyCgoKbmFtZXNw
YWNlIF9TVEwgewoKY2xhc3MgY3R5cGVfYmFzZSB7CnB1YmxpYzoKICBlbnVtIG1hc2sgewogICAg
c3BhY2UgPSBfSVNzcGFjZSwKICAgIHByaW50ID0gX0lTcHJpbnQsCiAgICBjbnRybCA9IF9JU2Nu
dHJsLAogICAgdXBwZXIgPSBfSVN1cHBlciwKICAgIGxvd2VyID0gX0lTbG93ZXIsCiAgICBhbHBo
YSA9IF9JU2FscGhhLAogICAgZGlnaXQgPSBfSVNkaWdpdCwKICAgIHB1bmN0ID0gX0lTcHVuY3Qs
CiAgICB4ZGlnaXQgPSBfSVN4ZGlnaXQsCiAgICBhbG51bSA9IGFscGhhIHwgZGlnaXQsCiAgICBn
cmFwaCA9IGFsbnVtIHwgcHVuY3QKICB9Owp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQ+IGNs
YXNzIGN0eXBlIHt9Owp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQ+IGNsYXNzIGN0eXBlX2J5bmFtZSB7
fTsKCgoKdGVtcGxhdGU8PgpjbGFzcyBjdHlwZTxjaGFyPiA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0
LCBwdWJsaWMgY3R5cGVfYmFzZQp7CgoKCgoKCiAgICBmcmllbmQgY2xhc3MgY3R5cGU8d2NoYXJf
dD47CgoKICBmcmllbmQgY2xhc3MgX0xvY2FsZTsKcHVibGljOgoKICB0eXBlZGVmIGNoYXIgY2hh
cl90eXBlOwoKICBleHBsaWNpdCBjdHlwZShjb25zdCBtYXNrKiBfX3RhYiA9IDAsIGJvb2wgX19k
ZWwgPSBmYWxzZSwgc2l6ZV90IF9fcmVmcyA9IDApOwogIGJvb2wgaXMobWFzayBfX20sIGNoYXIg
X19jKSBjb25zdAogICAgeyByZXR1cm4gKCgqKF9NX2N0eXBlX3RhYmxlKyh1bnNpZ25lZCBjaGFy
KV9fYykpICYgX19tKSAhPSAwOyB9CgogIGNvbnN0IGNoYXIqIGlzKGNvbnN0IGNoYXIqIF9fbG93
LCBjb25zdCBjaGFyKiBfX2hpZ2gsIG1hc2sqIF9fdmVjKSBjb25zdCB7CiAgICBmb3IgKGNvbnN0
IGNoYXIqIF9fcCA9IF9fbG93O19fcCAhPSBfX2hpZ2g7ICsrX19wLCArK19fdmVjKSB7CiAgICAg
ICpfX3ZlYyA9IF9NX2N0eXBlX3RhYmxlWyh1bnNpZ25lZCBjaGFyKSpfX3BdOwogICAgfQogICAg
cmV0dXJuIF9faGlnaDsKICB9CgogIGNvbnN0IGNoYXIqIHNjYW5faXMobWFzayBfX20sIGNvbnN0
IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gpIGNvbnN0OwogIGNvbnN0IGNoYXIqIHNj
YW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBj
b25zdDsKCiAgY2hhciAodG91cHBlcikoY2hhciBfX2MpIGNvbnN0IHsgcmV0dXJuIGRvX3RvdXBw
ZXIoX19jKTsgfQogIGNvbnN0IGNoYXIqICh0b3VwcGVyKShjaGFyKiBfX2xvdywgY29uc3QgY2hh
ciogX19oaWdoKSBjb25zdCB7CiAgICByZXR1cm4gZG9fdG91cHBlcihfX2xvdywgX19oaWdoKTsK
ICB9CgogIGNoYXIgKHRvbG93ZXIpKGNoYXIgX19jKSBjb25zdCB7IHJldHVybiBkb190b2xvd2Vy
KF9fYyk7IH0KICBjb25zdCBjaGFyKiAodG9sb3dlcikoY2hhciogX19sb3csIGNvbnN0IGNoYXIq
IF9faGlnaCkgY29uc3QgewogICAgcmV0dXJuIGRvX3RvbG93ZXIoX19sb3csIF9faGlnaCk7CiAg
fQoKICBjaGFyIHdpZGVuKGNoYXIgX19jKSBjb25zdCB7IHJldHVybiBkb193aWRlbihfX2MpOyB9
CiAgY29uc3QgY2hhciogd2lkZW4oY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGln
aCwgY2hhciogX190bykgY29uc3QgewogICAgcmV0dXJuIGRvX3dpZGVuKF9fbG93LCBfX2hpZ2gs
IF9fdG8pOwogIH0KCiAgY2hhciBuYXJyb3coY2hhciBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0
IHsKICAgIHJldHVybiBkb19uYXJyb3coX19jLCBfX2RmYXVsdCk7CiAgfQogIGNvbnN0IGNoYXIq
IG5hcnJvdyhjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoLAogICAgICAgICAg
ICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX3RvKSBjb25zdCB7CiAgICByZXR1cm4g
ZG9fbmFycm93KF9fbG93LCBfX2hpZ2gsIF9fZGZhdWx0LCBfX3RvKTsKICB9CgogIHN0YXRpYyBs
b2NhbGU6OmlkIGlkOwoKCgogIHN0YXRpYyBjb25zdCBzaXplX3QgdGFibGVfc2l6ZSA9IDI1NjsK
Cgpwcm90ZWN0ZWQ6CiAgY29uc3QgbWFzayogdGFibGUoKSBjb25zdCB7cmV0dXJuIF9NX2N0eXBl
X3RhYmxlO30KICBzdGF0aWMgY29uc3QgbWFzayogY2xhc3NpY190YWJsZSgpIHsgcmV0dXJuICYg
X1NfY2xhc3NpY190YWJsZSBbMV07IH0KCiAgfmN0eXBlKCk7CgogIHZpcnR1YWwgY2hhciBkb190
b3VwcGVyKGNoYXIgX19jKSBjb25zdDsKICB2aXJ0dWFsIGNoYXIgZG9fdG9sb3dlcihjaGFyIF9f
YykgY29uc3Q7CiAgdmlydHVhbCBjb25zdCBjaGFyKiBkb190b3VwcGVyKGNoYXIqIF9fbG93LCBj
b25zdCBjaGFyKiBfX2hpZ2gpIGNvbnN0OwogIHZpcnR1YWwgY29uc3QgY2hhciogZG9fdG9sb3dl
cihjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdDsKICB2aXJ0dWFsIGNoYXIg
ZG9fd2lkZW4oY2hhciBfX2MpIGNvbnN0OwogIHZpcnR1YWwgY29uc3QgY2hhciogZG9fd2lkZW4o
Y29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIqIF9fdG8pIGNvbnN0OwogIHZpcnR1YWwgY2hhciBkb19uYXJyb3co
Y2hhciBfX2MsIGNoYXIgKSBjb25zdDsKICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGRvX25hcnJvdyhj
b25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgLCBjaGFyKiBfX3RvKSBjb25zdDsKcHJpdmF0ZToKICBzdHJ1Y3Qg
X0lzX21hc2sgewogICAgbWFzayBfX207CiAgICBfSXNfbWFzayhtYXNrIF9feCk6IF9fbShfX3gp
IHt9CiAgIGJvb2wgb3BlcmF0b3IoKShjaGFyIF9fYykge3JldHVybiAoX19tICYgKHVuc2lnbmVk
IGNoYXIpIF9fYykgIT0gMDt9CiAgfTsKCiAgc3RhdGljIGNvbnN0IG1hc2sgX1NfY2xhc3NpY190
YWJsZVsyNTcgXTsKICBjb25zdCBtYXNrKiBfTV9jdHlwZV90YWJsZTsKICBib29sIF9NX2RlbGV0
ZTsKCiAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgX1NfdXBwZXJbMjU2IF07CiAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIGNoYXIgX1NfbG93ZXJbMjU2IF07Cn07Cgp0ZW1wbGF0ZTw+CmNsYXNz
IGN0eXBlX2J5bmFtZTxjaGFyPjogcHVibGljIGN0eXBlPGNoYXI+IHsKcHVibGljOgogIGV4cGxp
Y2l0IGN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90ID0gMCk7CiAgfmN0eXBlX2J5bmFt
ZSgpOwoKICB2aXJ0dWFsIGNoYXIgZG9fdG91cHBlcihjaGFyIF9fYykgY29uc3Q7CiAgdmlydHVh
bCBjaGFyIGRvX3RvbG93ZXIoY2hhciBfX2MpIGNvbnN0OwoKICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IGRvX3RvdXBwZXIoY2hhciosIGNvbnN0IGNoYXIqKSBjb25zdDsKICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIGRvX3RvbG93ZXIoY2hhciosIGNvbnN0IGNoYXIqKSBjb25zdDsKCnByaXZhdGU6CiAgbWFz
ayBfTV9ieW5hbWVfdGFibGVbdGFibGVfc2l6ZSArIDFdOwogIF9Mb2NhbGVfY3R5cGUqIF9NX2N0
eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+CmNsYXNzIGN0eXBlPHdjaGFyX3Q+IDogcHVibGljIGxvY2Fs
ZTo6ZmFjZXQsIHB1YmxpYyBjdHlwZV9iYXNlCnsKICBmcmllbmQgY2xhc3MgX0xvY2FsZTsKcHVi
bGljOgogIHR5cGVkZWYgd2NoYXJfdCBjaGFyX3R5cGU7CgogIGV4cGxpY2l0IGN0eXBlKHNpemVf
dCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7fQoKICBib29sIGlzKG1hc2sg
X19tLCB3Y2hhcl90IF9fYykgY29uc3QKICAgIHsgcmV0dXJuIGRvX2lzKF9fbSwgX19jKTsgfQoK
ICBjb25zdCB3Y2hhcl90KiBpcyhjb25zdCB3Y2hhcl90KiBfX2xvdywgY29uc3Qgd2NoYXJfdCog
X19oaWdoLAogICAgICAgICAgICAgICAgICAgIG1hc2sqIF9fdmVjKSBjb25zdAogICAgeyByZXR1
cm4gZG9faXMoX19sb3csIF9faGlnaCwgX192ZWMpOyB9CgogIGNvbnN0IHdjaGFyX3QqIHNjYW5f
aXMobWFzayBfX20sCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90KiBfX2xv
dywgY29uc3Qgd2NoYXJfdCogX19oaWdoKSBjb25zdAogICAgeyByZXR1cm4gZG9fc2Nhbl9pcyhf
X20sIF9fbG93LCBfX2hpZ2gpOyB9CgogIGNvbnN0IHdjaGFyX3QqIHNjYW5fbm90IChtYXNrIF9f
bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCogX19sb3csIGNvbnN0
IHdjaGFyX3QqIF9faGlnaCkgY29uc3QKICAgIHsgcmV0dXJuIGRvX3NjYW5fbm90KF9fbSwgX19s
b3csIF9faGlnaCk7IH0KCiAgd2NoYXJfdCAodG91cHBlcikod2NoYXJfdCBfX2MpIGNvbnN0IHsg
cmV0dXJuIGRvX3RvdXBwZXIoX19jKTsgfQogIGNvbnN0IHdjaGFyX3QqICh0b3VwcGVyKSh3Y2hh
cl90KiBfX2xvdywgd2NoYXJfdCogX19oaWdoKSBjb25zdAogICAgeyByZXR1cm4gZG9fdG91cHBl
cihfX2xvdywgX19oaWdoKTsgfQoKICB3Y2hhcl90ICh0b2xvd2VyKSh3Y2hhcl90IF9fYykgY29u
c3QgeyByZXR1cm4gZG9fdG9sb3dlcihfX2MpOyB9CiAgY29uc3Qgd2NoYXJfdCogKHRvbG93ZXIp
KHdjaGFyX3QqIF9fbG93LCB3Y2hhcl90KiBfX2hpZ2gpIGNvbnN0CiAgICB7IHJldHVybiBkb190
b2xvd2VyKF9fbG93LCBfX2hpZ2gpOyB9CgogIHdjaGFyX3Qgd2lkZW4oY2hhciBfX2MpIGNvbnN0
IHsgcmV0dXJuIGRvX3dpZGVuKF9fYyk7IH0KICBjb25zdCBjaGFyKiB3aWRlbihjb25zdCBjaGFy
KiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoLAogICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qq
IF9fdG8pIGNvbnN0CiAgICB7IHJldHVybiBkb193aWRlbihfX2xvdywgX19oaWdoLCBfX3RvKTsg
fQoKICBjaGFyIG5hcnJvdyh3Y2hhcl90IF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3QKICAgIHsg
cmV0dXJuIGRvX25hcnJvdyhfX2MsIF9fZGZhdWx0KTsgfQogIGNvbnN0IHdjaGFyX3QqIG5hcnJv
dyhjb25zdCB3Y2hhcl90KiBfX2xvdywgY29uc3Qgd2NoYXJfdCogX19oaWdoLAogICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX3RvKSBjb25zdAogICAgeyByZXR1
cm4gZG9fbmFycm93KF9fbG93LCBfX2hpZ2gsIF9fZGZhdWx0LCBfX3RvKTsgfQoKICBzdGF0aWMg
bG9jYWxlOjppZCBpZDsKCnByb3RlY3RlZDoKICB+Y3R5cGUoKTsKCiAgdmlydHVhbCBib29sIGRv
X2lzKG1hc2sgX19tLCB3Y2hhcl90IF9fYykgY29uc3Q7CiAgdmlydHVhbCBjb25zdCB3Y2hhcl90
KiBkb19pcyhjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCosIG1hc2sqKSBjb25zdDsKICB2
aXJ0dWFsIGNvbnN0IHdjaGFyX3QqIGRvX3NjYW5faXMobWFzaywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqKSBjb25zdDsK
ICB2aXJ0dWFsIGNvbnN0IHdjaGFyX3QqIGRvX3NjYW5fbm90KG1hc2ssCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopIGNv
bnN0OwogIHZpcnR1YWwgd2NoYXJfdCBkb190b3VwcGVyKHdjaGFyX3QgX19jKSBjb25zdDsKICB2
aXJ0dWFsIGNvbnN0IHdjaGFyX3QqIGRvX3RvdXBwZXIod2NoYXJfdCosIGNvbnN0IHdjaGFyX3Qq
KSBjb25zdDsKICB2aXJ0dWFsIHdjaGFyX3QgZG9fdG9sb3dlcih3Y2hhcl90IGMpIGNvbnN0Owog
IHZpcnR1YWwgY29uc3Qgd2NoYXJfdCogZG9fdG9sb3dlcih3Y2hhcl90KiwgY29uc3Qgd2NoYXJf
dCopIGNvbnN0OwogIHZpcnR1YWwgd2NoYXJfdCBkb193aWRlbihjaGFyIGMpIGNvbnN0OwogIHZp
cnR1YWwgY29uc3QgY2hhciogZG9fd2lkZW4oY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCB3Y2hh
cl90KikgY29uc3Q7CiAgdmlydHVhbCBjaGFyIGRvX25hcnJvdyh3Y2hhcl90IF9fYywgY2hhciBf
X2RmYXVsdCkgY29uc3Q7CiAgdmlydHVhbCBjb25zdCB3Y2hhcl90KiBkb19uYXJyb3coY29uc3Qg
d2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIsIGNoYXIqKSBjb25zdDsKfTsKCnRlbXBsYXRlPD4KY2xhc3MgY3R5cGVfYnluYW1l
PHdjaGFyX3Q+OiBwdWJsaWMgY3R5cGU8d2NoYXJfdD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY3R5
cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fbmFtZSwgc2l6ZV90IF9fcmVmcyA9IDApOwoKcHJvdGVj
dGVkOgogIH5jdHlwZV9ieW5hbWUoKTsKCiAgdmlydHVhbCBib29sIGRvX2lzKG1hc2sgX19tLCB3
Y2hhcl90IF9fYykgY29uc3Q7CiAgdmlydHVhbCBjb25zdCB3Y2hhcl90KiBkb19pcyhjb25zdCB3
Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCosIG1hc2sqKSBjb25zdDsKICB2aXJ0dWFsIGNvbnN0IHdj
aGFyX3QqIGRvX3NjYW5faXMobWFzaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqKSBjb25zdDsKICB2aXJ0dWFsIGNvbnN0
IHdjaGFyX3QqIGRvX3NjYW5fbm90KG1hc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopIGNvbnN0OwogIHZpcnR1YWwg
d2NoYXJfdCBkb190b3VwcGVyKHdjaGFyX3QgX19jKSBjb25zdDsKICB2aXJ0dWFsIGNvbnN0IHdj
aGFyX3QqIGRvX3RvdXBwZXIod2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqKSBjb25zdDsKICB2aXJ0
dWFsIHdjaGFyX3QgZG9fdG9sb3dlcih3Y2hhcl90IGMpIGNvbnN0OwogIHZpcnR1YWwgY29uc3Qg
d2NoYXJfdCogZG9fdG9sb3dlcih3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCopIGNvbnN0OwoKcHJp
dmF0ZToKICBfTG9jYWxlX2N0eXBlKiBfTV9jdHlwZTsKfTsKCgoKfQojIDI4ICIuLi9zdGxwb3J0
L3N0bC9fbW9uZXRhcnkuaCIgMgoKCgojIDEgIi4uL3N0bHBvcnQvc3RsL19vc3RyZWFtYnVmX2l0
ZXJhdG9yLmgiIDEKIyAyNyAiLi4vc3RscG9ydC9zdGwvX29zdHJlYW1idWZfaXRlcmF0b3IuaCIK
IyAxICIuLi9zdGxwb3J0L3N0bC9fc3RyZWFtYnVmLmgiIDEKIyAyMiAiLi4vc3RscG9ydC9zdGwv
X3N0cmVhbWJ1Zi5oIgojIDEgIi4uL3N0bHBvcnQvc3RsL19pb3NfYmFzZS5oIiAxCiMgMjIgIi4u
L3N0bHBvcnQvc3RsL19pb3NfYmFzZS5oIgojIDEgIi4uL3N0bHBvcnQvc3RkZXhjZXB0IiAxCiMg
MjMgIi4uL3N0bHBvcnQvc3RkZXhjZXB0IgojIDEgIi4uL3N0bHBvcnQvc3RsL19wcm9sb2cuaCIg
MQojIDI0ICIuLi9zdGxwb3J0L3N0ZGV4Y2VwdCIgMgojIDMzICIuLi9zdGxwb3J0L3N0ZGV4Y2Vw
dCIKIyAxICIuLi9zdGxwb3J0L2V4Y2VwdGlvbiIgMQojIDYwICIuLi9zdGxwb3J0L2V4Y2VwdGlv
biIKIyAxICIvdXNyL2luY2x1ZGUvZysrL2V4Y2VwdGlvbiIgMQojIDQwICIvdXNyL2luY2x1ZGUv
ZysrL2V4Y2VwdGlvbiIKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewoKCgoKCgogIGNs
YXNzIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBleGNlcHRpb24oKSB0aHJvdygpIHsgfQog
ICAgdmlydHVhbCB+ZXhjZXB0aW9uKCkgdGhyb3coKTsKCgogICAgdmlydHVhbCBjb25zdCBjaGFy
KiB3aGF0KCkgY29uc3QgdGhyb3coKTsKICB9OwoKCgogIGNsYXNzIGJhZF9leGNlcHRpb24gOiBw
dWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9leGNlcHRpb24oKSB0aHJvdygp
IHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9uKCkgdGhyb3coKTsKICB9OwoKCiAgdHlw
ZWRlZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgpOwoKICB0eXBlZGVmIHZvaWQgKCp1bmV4
cGVjdGVkX2hhbmRsZXIpICgpOwoKCiAgdGVybWluYXRlX2hhbmRsZXIgc2V0X3Rlcm1pbmF0ZSh0
ZXJtaW5hdGVfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdGVybWluYXRlKCkgX19hdHRyaWJ1
dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCiAgdW5leHBlY3RlZF9oYW5kbGVyIHNldF91bmV4cGVj
dGVkKHVuZXhwZWN0ZWRfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdW5leHBlY3RlZCgpIF9f
YXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKIyA5OCAiL3Vzci9pbmNsdWRlL2crKy9leGNl
cHRpb24iCiAgYm9vbCB1bmNhdWdodF9leGNlcHRpb24oKSB0aHJvdygpOwp9CgpuYW1lc3BhY2Ug
X19nbnVfY3h4CnsKIyAxMTEgIi91c3IvaW5jbHVkZS9nKysvZXhjZXB0aW9uIgogIHZvaWQgX192
ZXJib3NlX3Rlcm1pbmF0ZV9oYW5kbGVyICgpOwp9Cgp9CiMgNjEgIi4uL3N0bHBvcnQvZXhjZXB0
aW9uIiAyCiMgNzggIi4uL3N0bHBvcnQvZXhjZXB0aW9uIgpuYW1lc3BhY2UgX1NUTCB7CgoKdXNp
bmcgX19zdGRfYWxpYXM6OmV4Y2VwdGlvbjsKdXNpbmcgX19zdGRfYWxpYXM6OmJhZF9leGNlcHRp
b247CiMgOTUgIi4uL3N0bHBvcnQvZXhjZXB0aW9uIgp1c2luZyBfX3N0ZF9hbGlhczo6dW5leHBl
Y3RlZDsKdXNpbmcgX19zdGRfYWxpYXM6OnVuZXhwZWN0ZWRfaGFuZGxlcjsKdXNpbmcgX19zdGRf
YWxpYXM6OnNldF91bmV4cGVjdGVkOwp1c2luZyBfX3N0ZF9hbGlhczo6dGVybWluYXRlOwp1c2lu
ZyBfX3N0ZF9hbGlhczo6dGVybWluYXRlX2hhbmRsZXI7CnVzaW5nIF9fc3RkX2FsaWFzOjpzZXRf
dGVybWluYXRlOwojIDEwOSAiLi4vc3RscG9ydC9leGNlcHRpb24iCn0KIyAzNCAiLi4vc3RscG9y
dC9zdGRleGNlcHQiIDIKCgoKCgoKCiMgMSAiLi4vc3RscG9ydC9zdGwvX2FsbG9jLmgiIDEKIyA2
MCAiLi4vc3RscG9ydC9zdGwvX2FsbG9jLmgiCiMgMSAiLi4vc3RscG9ydC9uZXciIDEKIyA1MCAi
Li4vc3RscG9ydC9uZXciCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9uZXciIDEKIyA0MiAiL3Vzci9p
bmNsdWRlL2crKy9uZXciCiMgMSAiLi4vc3RscG9ydC9leGNlcHRpb24iIDEKIyA3OCAiLi4vc3Rs
cG9ydC9leGNlcHRpb24iCm5hbWVzcGFjZSBfU1RMIHsKCgp1c2luZyBfX3N0ZF9hbGlhczo6ZXhj
ZXB0aW9uOwp1c2luZyBfX3N0ZF9hbGlhczo6YmFkX2V4Y2VwdGlvbjsKIyA5NSAiLi4vc3RscG9y
dC9leGNlcHRpb24iCnVzaW5nIF9fc3RkX2FsaWFzOjp1bmV4cGVjdGVkOwp1c2luZyBfX3N0ZF9h
bGlhczo6dW5leHBlY3RlZF9oYW5kbGVyOwp1c2luZyBfX3N0ZF9hbGlhczo6c2V0X3VuZXhwZWN0
ZWQ7CnVzaW5nIF9fc3RkX2FsaWFzOjp0ZXJtaW5hdGU7CnVzaW5nIF9fc3RkX2FsaWFzOjp0ZXJt
aW5hdGVfaGFuZGxlcjsKdXNpbmcgX19zdGRfYWxpYXM6OnNldF90ZXJtaW5hdGU7CiMgMTA5ICIu
Li9zdGxwb3J0L2V4Y2VwdGlvbiIKfQojIDQzICIvdXNyL2luY2x1ZGUvZysrL25ldyIgMgoKZXh0
ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewoKCiAgY2xhc3MgYmFkX2FsbG9jIDogcHVibGlj
IGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfYWxsb2MoKSB0aHJvdygpIHsgfQoKCiAg
ICB2aXJ0dWFsIH5iYWRfYWxsb2MoKSB0aHJvdygpOwogIH07CgogIHN0cnVjdCBub3Rocm93X3Qg
eyB9OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKCgogIHR5cGVkZWYgdm9pZCAo
Km5ld19oYW5kbGVyKSgpOwoKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIobmV3X2hhbmRs
ZXIpIHRocm93KCk7Cn0KIyA3OSAiL3Vzci9pbmNsdWRlL2crKy9uZXciCnZvaWQqIG9wZXJhdG9y
IG5ldyhzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCogb3BlcmF0b3Ig
bmV3W10oc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgb3BlcmF0b3Ig
ZGVsZXRlKHZvaWQqKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqKSB0aHJv
dygpOwp2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190
JikgdGhyb3coKTsKdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6
bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCosIGNvbnN0IHN0
ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiwgY29u
c3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwoKCmlubGluZSB2b2lkKiBvcGVyYXRvciBuZXco
c3RkOjpzaXplX3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7IHJldHVybiBfX3A7IH0KaW5saW5lIHZv
aWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCB2b2lkKiBfX3ApIHRocm93KCkgeyByZXR1
cm4gX19wOyB9CgoKaW5saW5lIHZvaWQgb3BlcmF0b3IgZGVsZXRlICh2b2lkKiwgdm9pZCopIHRo
cm93KCkgeyB9OwppbmxpbmUgdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiwgdm9pZCopIHRo
cm93KCkgeyB9OwoKfQojIDUxICIuLi9zdGxwb3J0L25ldyIgMgoKCgoKCgogICAgbmFtZXNwYWNl
IF9TVEwgewogICAgdXNpbmcgX19zdGRfYWxpYXM6OmJhZF9hbGxvYzsKICAgIHVzaW5nIF9fc3Rk
X2FsaWFzOjpub3Rocm93X3Q7CiAgICB1c2luZyBfX3N0ZF9hbGlhczo6bm90aHJvdzsKCgoKCgog
ICAgdXNpbmcgX19zdGRfYWxpYXM6Om5ld19oYW5kbGVyOwogICAgdXNpbmcgX19zdGRfYWxpYXM6
OnNldF9uZXdfaGFuZGxlcjsKCgogICAgfQojIDEwNyAiLi4vc3RscG9ydC9uZXciCm5hbWVzcGFj
ZSBfU1RMIHsKCgoKCmlubGluZSB2b2lkKiBfX3N0bF9uZXcoc2l6ZV90IF9fbikgeyByZXR1cm4g
OjpvcGVyYXRvciBuZXcoX19uKTsgfQppbmxpbmUgdm9pZCBfX3N0bF9kZWxldGUodm9pZCogX19w
KSB7IDo6b3BlcmF0b3IgZGVsZXRlKF9fcCk7IH0KCn0KIyA2MSAiLi4vc3RscG9ydC9zdGwvX2Fs
bG9jLmgiIDIKCgoKCgoKCiMgMSAiLi4vc3RscG9ydC9zdGwvX2NvbnN0cnVjdC5oIiAxCiMgNDYg
Ii4uL3N0bHBvcnQvc3RsL19jb25zdHJ1Y3QuaCIKbmFtZXNwYWNlIF9TVEwgewojIDU1ICIuLi9z
dGxwb3J0L3N0bC9fY29uc3RydWN0LmgiCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSB2b2lk
IF9EZXN0cm95KF9UcCogX19wb2ludGVyKSB7CiMgNjcgIi4uL3N0bHBvcnQvc3RsL19jb25zdHJ1
Y3QuaCIKICAgIF9fcG9pbnRlci0+fl9UcCgpOwoKCgoKCn0KCgoKCgoKdGVtcGxhdGUgPGNsYXNz
IF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgdm9pZCBfQ29uc3RydWN0KF9UMSogX19wLCBjb25zdCBf
VDImIF9fdmFsdWUpIHsKCgoKICAgIG5ldyAoX19wKSBfVDEoX192YWx1ZSk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfVDE+CmlubGluZSB2b2lkIF9Db25zdHJ1Y3QoX1QxKiBfX3ApIHsKCgoKICBuZXcg
KF9fcCkgX1QxKCk7Cn0KIyAxMDMgIi4uL3N0bHBvcnQvc3RsL19jb25zdHJ1Y3QuaCIKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGluZSB2b2lkCl9fZGVzdHJveV9hdXgoX0Zv
cndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgY29uc3QgX19m
YWxzZV90eXBlJikgewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAg
IF9EZXN0cm95KCYqX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y
PgppbmxpbmUgdm9pZCBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRl
cmF0b3IsIGNvbnN0IF9fdHJ1ZV90eXBlJikge30KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXJhdG9yLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fZGVzdHJveShfRm9yd2FyZEl0ZXJhdG9y
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfVHAqKSB7CiAgdHlwZWRlZiB0eXBl
bmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2Rlc3RydWN0b3IgX1RyaXZpYWxf
ZGVzdHJ1Y3RvcjsKICBfX2Rlc3Ryb3lfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX1RyaXZpYWxfZGVz
dHJ1Y3RvcigpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGluZSB2
b2lkIF9EZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBf
X2xhc3QpIHsKICBfX2Rlc3Ryb3koX19maXJzdCwgX19sYXN0LCAodHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPCBfRm9yd2FyZEl0ZXJhdG9yID46OnZhbHVlX3R5cGUqKTApOwp9CgppbmxpbmUgdm9p
ZCBfRGVzdHJveShjaGFyKiwgY2hhciopIHt9CgppbmxpbmUgdm9pZCBfRGVzdHJveSh3Y2hhcl90
Kiwgd2NoYXJfdCopIHt9CmlubGluZSB2b2lkIF9EZXN0cm95KGNvbnN0IHdjaGFyX3QqLCBjb25z
dCB3Y2hhcl90Kikge30KCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxp
bmUgdm9pZCBjb25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1ZSkge19Db25zdHJ1
Y3QoX19wLCBfX3ZhbHVlKTsgfQp0ZW1wbGF0ZSA8Y2xhc3MgX1QxPgppbmxpbmUgdm9pZCBjb25z
dHJ1Y3QoX1QxKiBfX3ApIHsgX0NvbnN0cnVjdChfX3ApOyB9CnRlbXBsYXRlIDxjbGFzcyBfVHA+
CmlubGluZSB2b2lkIGRlc3Ryb3koX1RwKiBfX3BvaW50ZXIpIHsgX0Rlc3Ryb3koX19wb2ludGVy
KTsgfQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQgZGVzdHJv
eShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7IF9E
ZXN0cm95KF9fZmlyc3QsIF9fbGFzdCk7IH0KCn0KIyA2OSAiLi4vc3RscG9ydC9zdGwvX2FsbG9j
LmgiIDIKIyA4NSAiLi4vc3RscG9ydC9zdGwvX2FsbG9jLmgiCm5hbWVzcGFjZSBfU1RMIHsKIyA5
NCAiLi4vc3RscG9ydC9zdGwvX2FsbG9jLmgiCnR5cGVkZWYgdm9pZCAoKiBfX29vbV9oYW5kbGVy
X3R5cGUpKCk7Cgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4KY2xhc3MgX19tYWxsb2NfYWxsb2Mgewpw
cml2YXRlOgogIHN0YXRpYyB2b2lkKiBfU19vb21fbWFsbG9jKHNpemVfdCk7CiAgc3RhdGljIF9f
b29tX2hhbmRsZXJfdHlwZSBfX29vbV9oYW5kbGVyOwpwdWJsaWM6CgogIHR5cGVkZWYgY2hhciB2
YWx1ZV90eXBlOwoKCgoKCiAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBfX24pIHsKICAg
IHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19y
ZXN1bHQgPSBfU19vb21fbWFsbG9jKF9fbik7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQogIHN0
YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgKSB7IGZyZWUoKGNoYXIqKV9f
cCk7IH0KICBzdGF0aWMgX19vb21faGFuZGxlcl90eXBlIHNldF9tYWxsb2NfaGFuZGxlcihfX29v
bV9oYW5kbGVyX3R5cGUgX19mKSB7CiAgICBfX29vbV9oYW5kbGVyX3R5cGUgX19vbGQgPSBfX29v
bV9oYW5kbGVyOwogICAgX19vb21faGFuZGxlciA9IF9fZjsKICAgIHJldHVybihfX29sZCk7CiAg
fQp9OwoKCgoKY2xhc3MgX19uZXdfYWxsb2MgewpwdWJsaWM6CgogIHR5cGVkZWYgY2hhciB2YWx1
ZV90eXBlOwoKCgoKCiAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBfX24pIHsgcmV0dXJu
IF9fc3RsX25ldyhfX24pOyB9CiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNp
emVfdCkgeyBfX3N0bF9kZWxldGUoX19wKTsgfQp9OwojIDE0NiAiLi4vc3RscG9ydC9zdGwvX2Fs
bG9jLmgiCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIF9fZGVidWdfYWxsb2MgOiBwdWJs
aWMgX0FsbG9jIHsKcHVibGljOgogIHR5cGVkZWYgX0FsbG9jIF9fYWxsb2NhdG9yX3R5cGU7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKcHJpdmF0ZToK
ICBzdHJ1Y3QgX19hbGxvY19oZWFkZXIgewogICAgc2l6ZV90IF9fbWFnaWM6IDE2OwogICAgc2l6
ZV90IF9fdHlwZV9zaXplOjE2OwogICAgdW5zaWduZWQgbG9uZyBfTV9zaXplOwogIH07CgogIGVu
dW0geyBfX3BhZD04LCBfX21hZ2ljPTB4ZGViYSwgX19kZWxldGVkX21hZ2ljID0gMHhkZWJkLAog
ICAgICAgICBfX3NocmVkX2J5dGU9IDB4QTMKICB9OwoKICBlbnVtIHsgX19leHRyYV9iZWZvcmUg
PSAxNiwgX19leHRyYV9hZnRlciA9IDggfTsKCgoKICBzdGF0aWMgc2l6ZV90IF9fZXh0cmFfYmVm
b3JlX2NodW5rKCkgewogICAgcmV0dXJuIChsb25nKV9fZXh0cmFfYmVmb3JlL3NpemVvZih2YWx1
ZV90eXBlKSsKICAgICAgKHNpemVfdCkoKGxvbmcpX19leHRyYV9iZWZvcmUlc2l6ZW9mKHZhbHVl
X3R5cGUpPjApOwogIH0KICBzdGF0aWMgc2l6ZV90IF9fZXh0cmFfYWZ0ZXJfY2h1bmsoKSB7CiAg
ICByZXR1cm4gKGxvbmcpX19leHRyYV9hZnRlci9zaXplb2YodmFsdWVfdHlwZSkrCiAgICAgIChz
aXplX3QpKChsb25nKV9fZXh0cmFfYWZ0ZXIlc2l6ZW9mKHZhbHVlX3R5cGUpPjApOwogIH0KcHVi
bGljOgoKCgoKCiAgX19kZWJ1Z19hbGxvYygpIHt9CiAgfl9fZGVidWdfYWxsb2MoKSB7fQogIHN0
YXRpYyB2b2lkICogYWxsb2NhdGUoc2l6ZV90KTsKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZv
aWQgKiwgc2l6ZV90KTsKfTsKIyAyMTQgIi4uL3N0bHBvcnQvc3RsL19hbGxvYy5oIgplbnVtIHtf
QUxJR04gPSA4LCBfQUxJR05fU0hJRlQ9MywgX01BWF9CWVRFUyA9IDEyOH07CgoKCmNsYXNzIF9O
b2RlX2FsbG9jX29iaiB7CnB1YmxpYzoKICAgIF9Ob2RlX2FsbG9jX29iaiAqIF9NX2ZyZWVfbGlz
dF9saW5rOwp9OwoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpjbGFzcyBf
X25vZGVfYWxsb2MgewogIHB1YmxpYzoKICBzdGF0aWMgaW5saW5lIHNpemVfdCBfU19yb3VuZF91
cChzaXplX3QgX19ieXRlcykgeyByZXR1cm4gKCgoX19ieXRlcykgKyAoc2l6ZV90KV9BTElHTi0x
KSAmIH4oKHNpemVfdClfQUxJR04gLSAxKSk7IH0KICB0eXBlZGVmIF9Ob2RlX2FsbG9jX29iaiBf
T2JqOwpwcml2YXRlOgoKICBzdGF0aWMgdm9pZCogX1NfcmVmaWxsKHNpemVfdCBfX24pOwoKCiAg
c3RhdGljIGNoYXIqIF9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3Bfc2l6ZSwgaW50JiBfX25vYmpz
KTsKCiAgc3RhdGljIF9Ob2RlX2FsbG9jX29iaiAqIHZvbGF0aWxlIF9TX2ZyZWVfbGlzdFsxNl07
CiAgc3RhdGljIGNoYXIqIF9TX3N0YXJ0X2ZyZWU7CiAgc3RhdGljIGNoYXIqIF9TX2VuZF9mcmVl
OwogIHN0YXRpYyBzaXplX3QgX1NfaGVhcF9zaXplOwogIHN0YXRpYyB2b2lkICogX01fYWxsb2Nh
dGUoc2l6ZV90IF9fbik7CgogIHN0YXRpYyB2b2lkIF9NX2RlYWxsb2NhdGUodm9pZCAqX19wLCBz
aXplX3QgX19uKTsKcHVibGljOgoKICB0eXBlZGVmIGNoYXIgdmFsdWVfdHlwZTsKCgoKCgoKICBz
dGF0aWMgdm9pZCAqIGFsbG9jYXRlKHNpemVfdCBfX24pIHsgcmV0dXJuIChfX24gPiAoc2l6ZV90
KV9NQVhfQllURVMpID8gX19zdGxfbmV3KF9fbikgOiBfTV9hbGxvY2F0ZShfX24pOyB9CgogIHN0
YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCAqX19wLCBzaXplX3QgX19uKSB7IGlmIChfX24gPiAo
c2l6ZV90KV9NQVhfQllURVMpIF9fc3RsX2RlbGV0ZShfX3ApOyBlbHNlIF9NX2RlYWxsb2NhdGUo
X19wLCBfX24pOyB9Cn07CgoKCgoKdHlwZWRlZiBfX25vZGVfYWxsb2M8dHJ1ZSwgMD4gX05vZGVf
YWxsb2M7CiMgMzEyICIuLi9zdGxwb3J0L3N0bC9fYWxsb2MuaCIKdHlwZWRlZiBfTm9kZV9hbGxv
YyBfX3NnaV9hbGxvYzsKCgp0eXBlZGVmIF9fbm9kZV9hbGxvYzxmYWxzZSwgMD4gX19zaW5nbGVf
Y2xpZW50X2FsbG9jOwp0eXBlZGVmIF9fbm9kZV9hbGxvYzx0cnVlLCAwPiBfX211bHRpdGhyZWFk
ZWRfYWxsb2M7CiMgMzI5ICIuLi9zdGxwb3J0L3N0bC9fYWxsb2MuaCIKdGVtcGxhdGUgPGNsYXNz
IF9UcD4KY2xhc3MgYWxsb2NhdG9yIHsKcHVibGljOgoKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBl
OwogIHR5cGVkZWYgdmFsdWVfdHlwZSAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNv
bnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9U
cCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVm
IHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1
Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07CgogIGFs
bG9jYXRvcigpIHt9CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhbGxvY2F0b3IoY29uc3QgYWxs
b2NhdG9yPF9UcDE+Jikge30KCiAgYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxfVHA+Jikge30K
ICB+YWxsb2NhdG9yKCkge30KICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgeyByZXR1
cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBj
b25zdCB7IHJldHVybiAmX194OyB9CgogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29u
c3Qgdm9pZCogPSAwKSBjb25zdCB7CiAgICByZXR1cm4gX19uICE9IDAgPyByZWludGVycHJldF9j
YXN0PHZhbHVlX3R5cGUqPihfX3NnaV9hbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKHZhbHVl
X3R5cGUpKSkgOiAwOwogIH0KCiAgdm9pZCBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5
cGUgX19uKSBjb25zdCB7CiAgIAogICAgICBpZiAoX19wICE9IDApIF9fc2dpX2FsbG9jOjpkZWFs
bG9jYXRlKCh2b2lkKilfX3AsIF9fbiAqIHNpemVvZih2YWx1ZV90eXBlKSk7CiAgfQoKICB2b2lk
IGRlYWxsb2NhdGUocG9pbnRlciBfX3ApIGNvbnN0IHsgaWYgKF9fcCAhPSAwKSBfX3NnaV9hbGxv
Yzo6ZGVhbGxvY2F0ZSgodm9pZCopX19wLCBzaXplb2YodmFsdWVfdHlwZSkpOyB9CiAgc2l6ZV90
eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZih2YWx1ZV90
eXBlKTsgfQogIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSBj
b25zdCB7IF9TVEw6OmNvbnN0cnVjdChfX3AsIF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShwb2lu
dGVyIF9fcCkgY29uc3QgeyBfU1RMOjpkZXN0cm95KF9fcCk7IH0KCgoKCn07Cgp0ZW1wbGF0ZTw+
CmNsYXNzIGFsbG9jYXRvcjx2b2lkPiB7CnB1YmxpYzoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5
cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCog
cG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CgogIHR5cGVkZWYg
dm9pZCB2YWx1ZV90eXBlOwoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQg
ewogICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsKCgoKCgp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBh
bGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikgeyByZXR1cm4gdHJ1ZTsgfQp0
ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+IGlubGluZSBib29sIG9wZXJhdG9yIT0oY29u
c3QgYWxsb2NhdG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpIHsgcmV0dXJuIGZhbHNl
OyB9CiMgNDExICIuLi9zdGxwb3J0L3N0bC9fYWxsb2MuaCIKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX0FsbG9jYXRvcj4Kc3RydWN0IF9BbGxvY190cmFpdHMKewogIHR5cGVkZWYgX0FsbG9j
YXRvciBfT3JpZzsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjogcmViaW5kPF9UcD4g
X1JlYmluZF90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlYmluZF90eXBlOjpvdGhlciBhbGxv
Y2F0b3JfdHlwZTsKICBzdGF0aWMgYWxsb2NhdG9yX3R5cGUgY3JlYXRlX2FsbG9jYXRvcihjb25z
dCBfT3JpZyYgX19hKSB7IHJldHVybiBhbGxvY2F0b3JfdHlwZShfX2EpOyB9CgoKCgoKfTsKIyA0
NTcgIi4uL3N0bHBvcnQvc3RsL19hbGxvYy5oIgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2M+CmlubGluZSB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6YWxsb2Nh
dG9yX3R5cGUKX19zdGxfYWxsb2NfY3JlYXRlKGNvbnN0IF9BbGxvYyYgX19hLCBjb25zdCBfVHAq
KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OiByZWJpbmQ8X1RwPjo6b3RoZXIgX1JlYm91
bmRfdHlwZTsKICByZXR1cm4gX1JlYm91bmRfdHlwZShfX2EpOwp9CiMgNDgwICIuLi9zdGxwb3J0
L3N0bC9fYWxsb2MuaCIKdGVtcGxhdGUgPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX1RwLCBjbGFzcyBf
TWF5YmVSZWJvdW5kQWxsb2M+CmNsYXNzIF9TVExQX2FsbG9jX3Byb3h5IDogcHVibGljIF9NYXli
ZVJlYm91bmRBbGxvYyB7CnByaXZhdGU6CiAgdHlwZWRlZiBfTWF5YmVSZWJvdW5kQWxsb2MgX0Jh
c2U7CiAgdHlwZWRlZiBfU1RMUF9hbGxvY19wcm94eTxfVmFsdWUsIF9UcCwgX01heWJlUmVib3Vu
ZEFsbG9jPiBfU2VsZjsKcHVibGljOgogIF9WYWx1ZSBfTV9kYXRhOwoKICBpbmxpbmUgX1NUTFBf
YWxsb2NfcHJveHkoY29uc3QgX1NlbGYmIF9feCkgOiBfTWF5YmVSZWJvdW5kQWxsb2MoX194KSwg
X01fZGF0YShfX3guX01fZGF0YSkge30KICBpbmxpbmUgX1NUTFBfYWxsb2NfcHJveHkoY29uc3Qg
X01heWJlUmVib3VuZEFsbG9jJiBfX2EsIF9WYWx1ZSBfX3ApIDogX01heWJlUmVib3VuZEFsbG9j
KF9fYSksIF9NX2RhdGEoX19wKSB7fQogIGlubGluZSBfU2VsZiYgb3BlcmF0b3IgPSAoY29uc3Qg
X1NlbGYmIF9feCkgeyBfTV9kYXRhID0gX194Ll9NX2RhdGE7IHJldHVybiAqdGhpczsgfQogIGlu
bGluZSBfU2VsZiYgb3BlcmF0b3IgPSAoY29uc3QgX0Jhc2UmIF9feCkgeyAoKF9CYXNlJikqdGhp
cykgPSBfX3g7IHJldHVybiAqdGhpczsgfQojIDUwMyAiLi4vc3RscG9ydC9zdGwvX2FsbG9jLmgi
Cn07CiMgNTE0ICIuLi9zdGxwb3J0L3N0bC9fYWxsb2MuaCIKfQoKCiMgMSAiLi4vc3RscG9ydC9z
dGwvX2FsbG9jLmMiIDEKIyA1OSAiLi4vc3RscG9ydC9zdGwvX2FsbG9jLmMiCm5hbWVzcGFjZSBf
U1RMIHsKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lkICogX19tYWxsb2NfYWxsb2M8X19pbnN0
Pjo6X1Nfb29tX21hbGxvYyhzaXplX3QgX19uKQp7CiAgX19vb21faGFuZGxlcl90eXBlIF9fbXlf
bWFsbG9jX2hhbmRsZXI7CiAgdm9pZCAqIF9fcmVzdWx0OwoKICBmb3IgKDs7KSB7CiAgICBfX215
X21hbGxvY19oYW5kbGVyID0gX19vb21faGFuZGxlcjsKICAgIGlmICgwID09IF9fbXlfbWFsbG9j
X2hhbmRsZXIpIHsgdGhyb3cgX1NUTDo6YmFkX2FsbG9jKCk7IH0KICAgICgqX19teV9tYWxsb2Nf
aGFuZGxlcikoKTsKICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICBpZiAoX19yZXN1bHQp
IHJldHVybihfX3Jlc3VsdCk7CiAgfQoKCgoKfQoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4Kdm9p
ZCAqIF9fZGVidWdfYWxsb2M8X0FsbG9jPjo6YWxsb2NhdGUoc2l6ZV90IF9fbikgewogIHNpemVf
dCBfX3JlYWxfbiA9IF9fbiArIF9fZXh0cmFfYmVmb3JlX2NodW5rKCkgKyBfX2V4dHJhX2FmdGVy
X2NodW5rKCk7CiAgX19hbGxvY19oZWFkZXIgKl9fcmVzdWx0ID0gKF9fYWxsb2NfaGVhZGVyICop
X19hbGxvY2F0b3JfdHlwZTo6YWxsb2NhdGUoX19yZWFsX24pOwogIG1lbXNldCgoY2hhciopX19y
ZXN1bHQsIF9fc2hyZWRfYnl0ZSwgX19yZWFsX24qc2l6ZW9mKHZhbHVlX3R5cGUpKTsKICBfX3Jl
c3VsdC0+X19tYWdpYyA9IF9fbWFnaWM7CiAgX19yZXN1bHQtPl9fdHlwZV9zaXplID0gc2l6ZW9m
KHZhbHVlX3R5cGUpOwogIF9fcmVzdWx0LT5fTV9zaXplID0gKHVuc2lnbmVkIGxvbmcpX19uOwog
IHJldHVybiAoKGNoYXIqKV9fcmVzdWx0KSArIChsb25nKV9fZXh0cmFfYmVmb3JlOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0FsbG9jPgp2b2lkCl9fZGVidWdfYWxsb2M8X0FsbG9jPjo6ZGVhbGxvY2F0
ZSh2b2lkICpfX3AsIHNpemVfdCBfX24pIHsKICBfX2FsbG9jX2hlYWRlciAqIF9fcmVhbF9wID0g
KF9fYWxsb2NfaGVhZGVyKikoKGNoYXIgKilfX3AgLShsb25nKV9fZXh0cmFfYmVmb3JlKTsKCiAK
IAogCiAKCiAgdW5zaWduZWQgY2hhciogX190bXA7CiAgZm9yIChfX3RtcD0gKHVuc2lnbmVkIGNo
YXIqKShfX3JlYWxfcCsxKTsgX190bXAgPCAodW5zaWduZWQgY2hhciopX19wOyBfX3RtcCsrKSB7
CiAgIAogICAgICB9CgogIHNpemVfdCBfX3JlYWxfbj0gX19uICsgX19leHRyYV9iZWZvcmVfY2h1
bmsoKSArIF9fZXh0cmFfYWZ0ZXJfY2h1bmsoKTsKCiAgZm9yIChfX3RtcD0gKCh1bnNpZ25lZCBj
aGFyKilfX3ApK19fbipzaXplb2YodmFsdWVfdHlwZSk7CiAgICAgICBfX3RtcCA8ICgodW5zaWdu
ZWQgY2hhciopX19yZWFsX3ApK19fcmVhbF9uIDsgX190bXArKykgewogICAKICAgICAgfQoKCiAg
X19yZWFsX3AtPl9fbWFnaWM9X19kZWxldGVkX21hZ2ljOwogIG1lbXNldCgoY2hhciopX19wLCBf
X3NocmVkX2J5dGUsIF9fbipzaXplb2YodmFsdWVfdHlwZSkpOwogIF9fYWxsb2NhdG9yX3R5cGU6
OmRlYWxsb2NhdGUoX19yZWFsX3AsIF9fcmVhbF9uKTsKfQoKCgp0ZW1wbGF0ZSA8Ym9vbCBfX3Ro
cmVhZHMsIGludCBfX2luc3Q+CmNsYXNzIF9Ob2RlX0FsbG9jX0xvY2sgewpwdWJsaWM6CiAgX05v
ZGVfQWxsb2NfTG9jaygpIHsKCgoKCiAgICAgIGlmIChfX3RocmVhZHMpCgogICAgICAgIF9TX2xv
Y2suX01fYWNxdWlyZV9sb2NrKCk7CiAgfQoKICB+X05vZGVfQWxsb2NfTG9jaygpIHsKCgoKICAg
ICAgaWYgKF9fdGhyZWFkcykKCiAgICAgICAgX1NfbG9jay5fTV9yZWxlYXNlX2xvY2soKTsKICB9
CgogIHN0YXRpYyBfU1RMUF9tdXRleF9iYXNlIF9TX2xvY2s7Cn07CgoKCgp0ZW1wbGF0ZSA8Ym9v
bCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnZvaWQqCl9fbm9kZV9hbGxvYzxfX3RocmVhZHMsIF9f
aW5zdD46Ol9NX2FsbG9jYXRlKHNpemVfdCBfX24pIHsKICB2b2lkKiBfX3I7CiAgX09iaiAqIHZv
bGF0aWxlICogX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyAoKF9fbi1zaXplX3QoMSkp
Pj4oaW50KV9BTElHTl9TSElGVCk7CgoKICBfTm9kZV9BbGxvY19Mb2NrPF9fdGhyZWFkcywgX19p
bnN0PiBfX2xvY2tfaW5zdGFuY2U7CgoKCgogIGlmICggKF9fciA9ICpfX215X2ZyZWVfbGlzdCkg
IT0gMCApIHsKICAgICpfX215X2ZyZWVfbGlzdCA9ICgoX09iaiopX19yKSAtPiBfTV9mcmVlX2xp
c3RfbGluazsKICB9IGVsc2UgewogICAgX19yID0gX1NfcmVmaWxsKF9fbik7CiAgfQoKICByZXR1
cm4gX19yOwp9Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnZvaWQKX19u
b2RlX2FsbG9jPF9fdGhyZWFkcywgX19pbnN0Pjo6X01fZGVhbGxvY2F0ZSh2b2lkICpfX3AsIHNp
emVfdCBfX24pIHsKICBfT2JqICogdm9sYXRpbGUgKiBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVf
bGlzdCArICgoX19uLXNpemVfdCgxKSk+PihpbnQpX0FMSUdOX1NISUZUKTsKCgogIF9Ob2RlX0Fs
bG9jX0xvY2s8X190aHJlYWRzLCBfX2luc3Q+IF9fbG9ja19pbnN0YW5jZTsKCgogICgoX09iaiAq
KV9fcCkgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgKl9fbXlfZnJl
ZV9saXN0ID0gKF9PYmogKilfX3A7Cgp9CgoKCgoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBp
bnQgX19pbnN0PgpjaGFyKgpfX25vZGVfYWxsb2M8X190aHJlYWRzLCBfX2luc3Q+OjpfU19jaHVu
a19hbGxvYyhzaXplX3QgX3Bfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50JiBfX25vYmpzKQp7CiAgY2hhciogX19yZXN1bHQ7CiAgc2l6ZV90
IF9fdG90YWxfYnl0ZXMgPSBfcF9zaXplICogX19ub2JqczsKICBzaXplX3QgX19ieXRlc19sZWZ0
ID0gX1NfZW5kX2ZyZWUgLSBfU19zdGFydF9mcmVlOwoKICBpZiAoX19ieXRlc19sZWZ0ID49IF9f
dG90YWxfYnl0ZXMpIHsKICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgIF9TX3N0YXJ0
X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgIHJldHVybihfX3Jlc3VsdCk7CiAgfSBlbHNlIGlm
IChfX2J5dGVzX2xlZnQgPj0gX3Bfc2l6ZSkgewogICAgX19ub2JqcyA9IChpbnQpKF9fYnl0ZXNf
bGVmdC9fcF9zaXplKTsKICAgIF9fdG90YWxfYnl0ZXMgPSBfcF9zaXplICogX19ub2JqczsKICAg
IF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9i
eXRlczsKICAgIHJldHVybihfX3Jlc3VsdCk7CiAgfSBlbHNlIHsKICAgIHNpemVfdCBfX2J5dGVz
X3RvX2dldCA9CiAgICAgIDIgKiBfX3RvdGFsX2J5dGVzICsgX1Nfcm91bmRfdXAoX1NfaGVhcF9z
aXplID4+IDQpOwoKICAgIGlmIChfX2J5dGVzX2xlZnQgPiAwKSB7CiAgICAgIF9PYmoqIHZvbGF0
aWxlKiBfX215X2ZyZWVfbGlzdCA9CiAgICAgICAgX1NfZnJlZV9saXN0ICsgKChfX2J5dGVzX2xl
ZnQtc2l6ZV90KDEpKT4+KGludClfQUxJR05fU0hJRlQpOwoKICAgICAgKChfT2JqKilfU19zdGFy
dF9mcmVlKSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgKl9f
bXlfZnJlZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0X2ZyZWU7CiAgICB9CiAgICBfU19zdGFydF9m
cmVlID0gKGNoYXIqKV9fc3RsX25ldyhfX2J5dGVzX3RvX2dldCk7CiAgICBpZiAoMCA9PSBfU19z
dGFydF9mcmVlKSB7CiAgICAgIHNpemVfdCBfX2k7CiAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215
X2ZyZWVfbGlzdDsKICAgICAgX09iaiogX19wOwoKCgogICAgICBmb3IgKF9faSA9IF9wX3NpemU7
IF9faSA8PSAoc2l6ZV90KV9NQVhfQllURVM7IF9faSArPSAoc2l6ZV90KV9BTElHTikgewogICAg
ICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgKChfX2ktc2l6ZV90KDEpKT4+KGlu
dClfQUxJR05fU0hJRlQpOwogICAgICAgIF9fcCA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICBp
ZiAoMCAhPSBfX3ApIHsKICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcCAtPiBfTV9mcmVl
X2xpc3RfbGluazsKICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopX19wOwogICAgICAg
ICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19pOwogICAgICAgICAgcmV0dXJuKF9T
X2NodW5rX2FsbG9jKF9wX3NpemUsIF9fbm9ianMpKTsKCgogICAgICAgIH0KICAgICAgfQogICAg
ICBfU19lbmRfZnJlZSA9IDA7CiAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopX19zdGxfbmV3
KF9fYnl0ZXNfdG9fZ2V0KTsKCgoKCgoKCiAgICB9CiAgICBfU19oZWFwX3NpemUgKz0gX19ieXRl
c190b19nZXQ7CiAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2J5dGVzX3RvX2dl
dDsKICAgIHJldHVybihfU19jaHVua19hbGxvYyhfcF9zaXplLCBfX25vYmpzKSk7CiAgfQp9CgoK
CgoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pgp2b2lkKgpfX25vZGVfYWxs
b2M8X190aHJlYWRzLCBfX2luc3Q+OjpfU19yZWZpbGwoc2l6ZV90IF9fbikKewogIGludCBfX25v
YmpzID0gMjA7CiAgX19uID0gX1Nfcm91bmRfdXAoX19uKTsKICBjaGFyKiBfX2NodW5rID0gX1Nf
Y2h1bmtfYWxsb2MoX19uLCBfX25vYmpzKTsKICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xp
c3Q7CiAgX09iaiogX19yZXN1bHQ7CiAgX09iaiogX19jdXJyZW50X29iajsKICBfT2JqKiBfX25l
eHRfb2JqOwogIGludCBfX2k7CgogIGlmICgxID09IF9fbm9ianMpIHJldHVybihfX2NodW5rKTsK
ICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArICgoX19uLXNpemVfdCgxKSk+PihpbnQp
X0FMSUdOX1NISUZUKTsKCgogIF9fcmVzdWx0ID0gKF9PYmoqKV9fY2h1bms7CiAgKl9fbXlfZnJl
ZV9saXN0ID0gX19uZXh0X29iaiA9IChfT2JqKikoX19jaHVuayArIF9fbik7CiAgZm9yIChfX2kg
PSAxOyA7IF9faSsrKSB7CiAgICBfX2N1cnJlbnRfb2JqID0gX19uZXh0X29iajsKICAgIF9fbmV4
dF9vYmogPSAoX09iaiopKChjaGFyKilfX25leHRfb2JqICsgX19uKTsKICAgIGlmIChfX25vYmpz
IC0gMSA9PSBfX2kpIHsKICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9
IDA7CiAgICAgIGJyZWFrOwogICAgfSBlbHNlIHsKICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9m
cmVlX2xpc3RfbGluayA9IF9fbmV4dF9vYmo7CiAgICB9CiAgfQogIHJldHVybihfX3Jlc3VsdCk7
Cn0KCgoKdGVtcGxhdGUgPGludCBfX2luc3Q+Cl9fb29tX2hhbmRsZXJfdHlwZSBfX21hbGxvY19h
bGxvYzxfX2luc3Q+OjpfX29vbV9oYW5kbGVyPShfX29vbV9oYW5kbGVyX3R5cGUpMCA7CgoKICAg
IHRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIF9TVExQX211dGV4X2Jh
c2UKICAgIF9Ob2RlX0FsbG9jX0xvY2s8X190aHJlYWRzLCBfX2luc3Q+OjpfU19sb2NrID0geyB7
MCwgMCwgMCwgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwgeyAwLCAwIH19IH07CgoKdGVtcGxhdGUg
PGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpfTm9kZV9hbGxvY19vYmogKiB2b2xhdGlsZQpf
X25vZGVfYWxsb2M8X190aHJlYWRzLCBfX2luc3Q+OjpfU19mcmVlX2xpc3RbMTZdCj0gezAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OwoKCgoKdGVtcGxhdGUg
PGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpjaGFyICpfX25vZGVfYWxsb2M8X190aHJlYWRz
LCBfX2luc3Q+OjpfU19zdGFydF9mcmVlID0gMDsKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywg
aW50IF9faW5zdD4KY2hhciAqX19ub2RlX2FsbG9jPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfZW5k
X2ZyZWUgPSAwOwoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpzaXplX3Qg
X19ub2RlX2FsbG9jPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfaGVhcF9zaXplID0gMDsKIyAzNTQg
Ii4uL3N0bHBvcnQvc3RsL19hbGxvYy5jIgp9CiMgNTE4ICIuLi9zdGxwb3J0L3N0bC9fYWxsb2Mu
aCIgMgojIDQyICIuLi9zdGxwb3J0L3N0ZGV4Y2VwdCIgMgojIDUwICIuLi9zdGxwb3J0L3N0ZGV4
Y2VwdCIKbmFtZXNwYWNlIF9TVEwgewojIDU5ICIuLi9zdGxwb3J0L3N0ZGV4Y2VwdCIKY2xhc3Mg
X19OYW1lZF9leGNlcHRpb24gOiBwdWJsaWMgX19zdGRfYWxpYXM6OmV4Y2VwdGlvbiB7CnB1Ymxp
YzoKICBfX05hbWVkX2V4Y2VwdGlvbihjb25zdCBzdHJpbmcmIF9fc3RyKQoKICAgIDsKICBjb25z
dCBjaGFyKiB3aGF0KCkgY29uc3QgdGhyb3coKTsKICB+X19OYW1lZF9leGNlcHRpb24oKSB0aHJv
dygpOwojIDc0ICIuLi9zdGxwb3J0L3N0ZGV4Y2VwdCIKcHJpdmF0ZToKICBlbnVtIHsgX1NfYnVm
c2l6ZSA9IDI1NiB9OwogIGNoYXIgX01fbmFtZVtfU19idWZzaXplXTsKfTsKCmNsYXNzIGxvZ2lj
X2Vycm9yIDogcHVibGljIF9fTmFtZWRfZXhjZXB0aW9uIHsKcHVibGljOgogIGxvZ2ljX2Vycm9y
KGNvbnN0IHN0cmluZyYgX19zKSA6IF9fTmFtZWRfZXhjZXB0aW9uKF9fcykge30KCiAgfmxvZ2lj
X2Vycm9yKCkgdGhyb3coKTsKCn07CgpjbGFzcyBydW50aW1lX2Vycm9yIDogcHVibGljIF9fTmFt
ZWRfZXhjZXB0aW9uIHsKcHVibGljOgogIHJ1bnRpbWVfZXJyb3IoY29uc3Qgc3RyaW5nJiBfX3Mp
IDogX19OYW1lZF9leGNlcHRpb24oX19zKSB7fQoKICB+cnVudGltZV9lcnJvcigpIHRocm93KCk7
Cgp9OwoKY2xhc3MgZG9tYWluX2Vycm9yIDogcHVibGljIGxvZ2ljX2Vycm9yIHsKcHVibGljOgog
IGRvbWFpbl9lcnJvcihjb25zdCBzdHJpbmcmIF9fYXJnKSA6IGxvZ2ljX2Vycm9yKF9fYXJnKSB7
fQoKICB+ZG9tYWluX2Vycm9yKCkgdGhyb3coKTsKCn07CgpjbGFzcyBpbnZhbGlkX2FyZ3VtZW50
IDogcHVibGljIGxvZ2ljX2Vycm9yIHsKcHVibGljOgogIGludmFsaWRfYXJndW1lbnQoY29uc3Qg
c3RyaW5nJiBfX2FyZykgOiBsb2dpY19lcnJvcihfX2FyZykge30KCiAgfmludmFsaWRfYXJndW1l
bnQoKSB0aHJvdygpOwoKfTsKCmNsYXNzIGxlbmd0aF9lcnJvciA6IHB1YmxpYyBsb2dpY19lcnJv
ciB7CnB1YmxpYzoKICBsZW5ndGhfZXJyb3IoY29uc3Qgc3RyaW5nJiBfX2FyZykgOiBsb2dpY19l
cnJvcihfX2FyZykge30KCiAgfmxlbmd0aF9lcnJvcigpIHRocm93KCk7Cgp9OwoKY2xhc3Mgb3V0
X29mX3JhbmdlIDogcHVibGljIGxvZ2ljX2Vycm9yIHsKcHVibGljOgogIG91dF9vZl9yYW5nZShj
b25zdCBzdHJpbmcmIF9fYXJnKSA6IGxvZ2ljX2Vycm9yKF9fYXJnKSB7fQoKICB+b3V0X29mX3Jh
bmdlKCkgdGhyb3coKTsKCn07CgpjbGFzcyByYW5nZV9lcnJvciA6IHB1YmxpYyBydW50aW1lX2Vy
cm9yIHsKcHVibGljOgogIHJhbmdlX2Vycm9yKGNvbnN0IHN0cmluZyYgX19hcmcpIDogcnVudGlt
ZV9lcnJvcihfX2FyZykge30KCiAgfnJhbmdlX2Vycm9yKCkgdGhyb3coKTsKCn07CgpjbGFzcyBv
dmVyZmxvd19lcnJvciA6IHB1YmxpYyBydW50aW1lX2Vycm9yIHsKcHVibGljOgogIG92ZXJmbG93
X2Vycm9yKGNvbnN0IHN0cmluZyYgX19hcmcpIDogcnVudGltZV9lcnJvcihfX2FyZykge30KCiAg
fm92ZXJmbG93X2Vycm9yKCkgdGhyb3coKTsKCn07CgpjbGFzcyB1bmRlcmZsb3dfZXJyb3IgOiBw
dWJsaWMgcnVudGltZV9lcnJvciB7CnB1YmxpYzoKICB1bmRlcmZsb3dfZXJyb3IoY29uc3Qgc3Ry
aW5nJiBfX2FyZykgOiBydW50aW1lX2Vycm9yKF9fYXJnKSB7fQoKICB+dW5kZXJmbG93X2Vycm9y
KCkgdGhyb3coKTsKCn07Cgp9CiMgMTY1ICIuLi9zdGxwb3J0L3N0ZGV4Y2VwdCIKIyAxICIuLi9z
dGxwb3J0L3N0bC9fZXBpbG9nLmgiIDEKIyAxNCAiLi4vc3RscG9ydC9zdGwvX2VwaWxvZy5oIgoj
IDEgIi4uL3N0bHBvcnQvc3RsL19jb25maWdfY29tcGF0X3Bvc3QuaCIgMQojIDE1ICIuLi9zdGxw
b3J0L3N0bC9fZXBpbG9nLmgiIDIKIyAxNjYgIi4uL3N0bHBvcnQvc3RkZXhjZXB0IiAyCiMgMjMg
Ii4uL3N0bHBvcnQvc3RsL19pb3NfYmFzZS5oIiAyCgoKIyAxICIuLi9zdGxwb3J0L3V0aWxpdHki
IDEKIyAyOCAiLi4vc3RscG9ydC91dGlsaXR5IgojIDEgIi4uL3N0bHBvcnQvc3RsL19wcm9sb2cu
aCIgMQojIDI5ICIuLi9zdGxwb3J0L3V0aWxpdHkiIDIKIyA1MiAiLi4vc3RscG9ydC91dGlsaXR5
IgojIDEgIi4uL3N0bHBvcnQvc3RsL19lcGlsb2cuaCIgMQojIDE0ICIuLi9zdGxwb3J0L3N0bC9f
ZXBpbG9nLmgiCiMgMSAiLi4vc3RscG9ydC9zdGwvX2NvbmZpZ19jb21wYXRfcG9zdC5oIiAxCiMg
MTUgIi4uL3N0bHBvcnQvc3RsL19lcGlsb2cuaCIgMgojIDUzICIuLi9zdGxwb3J0L3V0aWxpdHki
IDIKIyAyNiAiLi4vc3RscG9ydC9zdGwvX2lvc19iYXNlLmgiIDIKCgoKCgojIDEgIi4uL3N0bHBv
cnQvc3RsL19zdHJpbmcuaCIgMQojIDIzICIuLi9zdGxwb3J0L3N0bC9fc3RyaW5nLmgiCiMgMSAi
Li4vc3RscG9ydC9tZW1vcnkiIDEKIyAyNCAiLi4vc3RscG9ydC9tZW1vcnkiCiMgMSAiLi4vc3Rs
cG9ydC9zdGwvX3Byb2xvZy5oIiAxCiMgMjUgIi4uL3N0bHBvcnQvbWVtb3J5IiAyCgoKCgoKCgoj
IDEgIi4uL3N0bHBvcnQvc3RsL190ZW1wYnVmLmgiIDEKIyA0MCAiLi4vc3RscG9ydC9zdGwvX3Rl
bXBidWYuaCIKIyAxICIuLi9zdGxwb3J0L3N0bC9fdW5pbml0aWFsaXplZC5oIiAxCiMgNDUgIi4u
L3N0bHBvcnQvc3RsL191bmluaXRpYWxpemVkLmgiCm5hbWVzcGFjZSBfU1RMIHsKCgoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0Zvcndh
cmRJdGVyCl9fdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgY29u
c3QgX190cnVlX3R5cGUmKSB7CiAgcmV0dXJuIF9fY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBf
X3Jlc3VsdCwgX0JvdGhQdHJUeXBlPCBfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+IDo6IF9SZXQo
KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+Cmlu
bGluZQpfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAg
ICAgICAgICBjb25zdCBfX2ZhbHNlX3R5cGUmKQp7CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19y
ZXN1bHQ7CiAgdHJ5IHsKICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwg
KytfX2N1cikKICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7CiAgICByZXR1cm4g
X19jdXI7CiAgfQogIGNhdGNoKC4uLikgeyBfRGVzdHJveShfX3Jlc3VsdCwgX19jdXIpOyB0aHJv
dzsgfTsKCgoKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRl
cj4KaW5saW5lIF9Gb3J3YXJkSXRlcgp1bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2Zp
cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJu
IF9fdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIHR5cGVuYW1l
IF9fdHlwZV90cmFpdHM8IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czwgX0ZvcndhcmRJdGVyID46
OnZhbHVlX3R5cGUgPjo6aXNfUE9EX3R5cGUoKSk7Cn0KCmlubGluZSBjaGFyKgp1bmluaXRpYWxp
emVkX2NvcHkoY29uc3QgY2hhciogX19maXJzdCwgY29uc3QgY2hhciogX19sYXN0LCBjaGFyKiBf
X3Jlc3VsdCkgewogIHJldHVybiAoY2hhciopX19jb3B5X3RyaXZpYWwgKF9fZmlyc3QsIF9fbGFz
dCwgX19yZXN1bHQpOwp9CgoKaW5saW5lIHdjaGFyX3QqCnVuaW5pdGlhbGl6ZWRfY29weShjb25z
dCB3Y2hhcl90KiBfX2ZpcnN0LCBjb25zdCB3Y2hhcl90KiBfX2xhc3QsIHdjaGFyX3QqIF9fcmVz
dWx0KSB7CiAgcmV0dXJuICh3Y2hhcl90KilfX2NvcHlfdHJpdmlhbCAoX19maXJzdCwgX19sYXN0
LCBfX3Jlc3VsdCk7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1Np
emUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lCnBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJ
dGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19j
b3VudCwKICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXRfaXRlcmF0b3JfdGFnICYpCnsKICBfRm9yd2Fy
ZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsKICB0cnkgewogICAgZm9yICggOyBfX2NvdW50ID4gMCA7
IC0tX19jb3VudCwgKytfX2ZpcnN0LCArK19fY3VyKQogICAgICBfQ29uc3RydWN0KCYqX19jdXIs
ICpfX2ZpcnN0KTsKICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19m
aXJzdCwgX19jdXIpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fY3Vy
KTsgdGhyb3c7IH07CgoKCn0KIyAxMzUgIi4uL3N0bHBvcnQvc3RsL191bmluaXRpYWxpemVkLmgi
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9G
b3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3YXJkSXRlcj4K
X191bmluaXRpYWxpemVkX2NvcHlfbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfU2l6ZSBf
X2NvdW50LCBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIGNvbnN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0
b3JfdGFnICYpIHsKICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QgPSBfX2ZpcnN0ICsgX19jb3Vu
dDsKICByZXR1cm4gcGFpcjxfUmFuZG9tQWNjZXNzSXRlciwgX0ZvcndhcmRJdGVyPiggX19sYXN0
LCBfX3VuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8IHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czwgX0ZvcndhcmRJdGVyID46OnZhbHVlX3R5cGUgPjo6aXNfUE9EX3R5cGUoKSkpOwp9CgoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0
ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4KdW5pbml0aWFsaXplZF9j
b3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAg
ICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpIHsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2Nv
cHlfbihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jlc3VsdCwgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PCBfSW5wdXRJdGVyID46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fdW5pbml0aWFsaXplZF9m
aWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgY29uc3QgX190cnVlX3R5cGUmKSB7CiAgX1NUTDo6
ZmlsbChfX2ZpcnN0LCBfX2xhc3QsIF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX191bmluaXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IF9UcCYgX194LCBjb25zdCBfX2ZhbHNlX3R5cGUmKQp7CiAgX0ZvcndhcmRJdGVyIF9fY3Vy
ID0gX19maXJzdDsKICB0cnkgewogICAgZm9yICggOyBfX2N1ciAhPSBfX2xhc3Q7ICsrX19jdXIp
CiAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0
cm95KF9fZmlyc3QsIF9fY3VyKTsgdGhyb3c7IH07Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9feCkgewogIF9f
dW5pbml0aWFsaXplZF9maWxsKF9fZmlyc3QsIF9fbGFzdCwgX194LCB0eXBlbmFtZSBfX3R5cGVf
dHJhaXRzPCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8IF9Gb3J3YXJkSXRlciA+Ojp2YWx1ZV90
eXBlID46OmlzX1BPRF90eXBlKCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs
IGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxp
emVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBjb25zdCBfX3RydWVfdHlwZSYpIHsKICByZXR1cm4g
X1NUTDo6ZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3Vu
aW5pdGlhbGl6ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9fZmFsc2VfdHlwZSYpCnsK
ICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogIHRyeSB7CiAgICBmb3IgKCA7IF9fbiA+
IDA7IC0tX19uLCArK19fY3VyKQogICAgICBfQ29uc3RydWN0KCYqX19jdXIsIF9feCk7CiAgICBy
ZXR1cm4gX19jdXI7CiAgfQogIGNhdGNoKC4uLikgeyBfRGVzdHJveShfX2ZpcnN0LCBfX2N1cik7
IHRocm93OyB9OwoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6
ZSwgY2xhc3MgX1RwPgppbmxpbmUgX0ZvcndhcmRJdGVyCnVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9G
b3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX194KSB7CiAgcmV0dXJu
IF9fdW5pbml0aWFsaXplZF9maWxsX24oX19maXJzdCwgX19uLCBfX3gsIHR5cGVuYW1lIF9fdHlw
ZV90cmFpdHM8IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czwgX0ZvcndhcmRJdGVyID46OnZhbHVl
X3R5cGUgPjo6aXNfUE9EX3R5cGUoKSk7Cn0KIyAyMTkgIi4uL3N0bHBvcnQvc3RsL191bmluaXRp
YWxpemVkLmgiCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIs
IGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRf
Y29weV9jb3B5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBf
X2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwg
X190cnVlX3R5cGUpCnsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDIsIF9f
bGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdW5pbml0aWFsaXplZF9jb3B5
KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCwgX190cnVlX3R5cGUoKSksIF9fdHJ1ZV90eXBl
KCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBj
bGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2Nv
cHlfY29weShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19s
YXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIF9f
ZmFsc2VfdHlwZSkKewogIF9Gb3J3YXJkSXRlciBfX21pZCA9IF9fdW5pbml0aWFsaXplZF9jb3B5
KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCwgdHlwZW5hbWUgX190eXBlX3RyYWl0czwgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPCBfRm9yd2FyZEl0ZXIgPjo6dmFsdWVfdHlwZSA+Ojppc19Q
T0RfdHlwZSgpKTsKICB0cnkgewogICAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5KF9fZmly
c3QyLCBfX2xhc3QyLCBfX21pZCAsIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8IHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czwgX0ZvcndhcmRJdGVyID46OnZhbHVlX3R5cGUgPjo6aXNfUE9EX3R5cGUo
KSk7CiAgfQogIGNhdGNoKC4uLikgeyBfRGVzdHJveShfX3Jlc3VsdCwgX19taWQpOyB0aHJvdzsg
fTsKCgoKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFz
cyBfSW5wdXRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxsX2Nv
cHkoX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBfRm9yd2FyZEl0ZXIgX19taWQsIGNvbnN0IF9UcCYg
X194LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aXNf
UE9EX3R5cGUgX0lfUE9EOwogIF9fdW5pbml0aWFsaXplZF9maWxsKF9fcmVzdWx0LCBfX21pZCwg
X194LCBfSV9QT0QoKSk7CiAgdHJ5IHsKICAgIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weShf
X2ZpcnN0LCBfX2xhc3QsIF9fbWlkLCBfSV9QT0QoKSk7CiAgfQogIGNhdGNoKC4uLikgeyBfRGVz
dHJveShfX3Jlc3VsdCwgX19taWQpOyB0aHJvdzsgfTsKCgoKfQoKCgoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApf
X3VuaW5pdGlhbGl6ZWRfY29weV9maWxsKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIg
X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIs
IF9Gb3J3YXJkSXRlciBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9U
cCYgX194KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46OmlzX1BPRF90
eXBlIF9JX1BPRDsKICBfRm9yd2FyZEl0ZXIgX19taWQyID0gX191bmluaXRpYWxpemVkX2NvcHko
X19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfSV9QT0QoKSk7CiAgdHJ5IHsKICAgIF9fdW5p
bml0aWFsaXplZF9maWxsKF9fbWlkMiwgX19sYXN0MiwgX194LCBfSV9QT0QoKSk7CiAgfQogIGNh
dGNoKC4uLikgeyBfRGVzdHJveShfX2ZpcnN0MiwgX19taWQyKTsgdGhyb3c7IH07Cn0KCn0KIyA0
MSAiLi4vc3RscG9ydC9zdGwvX3RlbXBidWYuaCIgMgoKCm5hbWVzcGFjZSBfU1RMIHsKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CnBhaXI8X1RwKiwgcHRyZGlmZl90PgpfX2dldF90ZW1wb3JhcnlfYnVm
ZmVyKHB0cmRpZmZfdCBfX2xlbiwgX1RwKik7CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGlu
ZSBwYWlyPF9UcCosIHB0cmRpZmZfdD4gZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9f
bGVuKSB7CiAgcmV0dXJuIF9fZ2V0X3RlbXBvcmFyeV9idWZmZXIoX19sZW4sIChfVHAqKSAwKTsK
fQoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHBhaXI8X1RwKiwgcHRyZGlmZl90
PgpnZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCopIHsKICByZXR1cm4g
X19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihfX2xlbiwgKF9UcCopIDApOwp9CgoKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CmlubGluZSB2b2lkIHJldHVybl90ZW1wb3JhcnlfYnVmZmVyKF9UcCogX19wKSB7
CgogIGZyZWUoKGNoYXIqKV9fcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y
LCBjbGFzcyBfVHA+CmNsYXNzIF9UZW1wb3JhcnlfYnVmZmVyIHsKcHJpdmF0ZToKICBwdHJkaWZm
X3QgX01fb3JpZ2luYWxfbGVuOwogIHB0cmRpZmZfdCBfTV9sZW47CiAgX1RwKiBfTV9idWZmZXI7
CgogIHZvaWQgX01fYWxsb2NhdGVfYnVmZmVyKCkgewogICAgX01fb3JpZ2luYWxfbGVuID0gX01f
bGVuOwogICAgX01fYnVmZmVyID0gMDsKCiAgICBpZiAoX01fbGVuID4gKHB0cmRpZmZfdCkoMjE0
NzQ4MzY0NyAvIHNpemVvZihfVHApKSkKICAgICAgX01fbGVuID0gMjE0NzQ4MzY0NyAvIHNpemVv
ZihfVHApOwoKICAgIHdoaWxlIChfTV9sZW4gPiAwKSB7CiAgICAgIF9NX2J1ZmZlciA9IChfVHAq
KSBtYWxsb2MoX01fbGVuICogc2l6ZW9mKF9UcCkpOwogICAgICBpZiAoX01fYnVmZmVyKQogICAg
ICAgIGJyZWFrOwogICAgICBfTV9sZW4gLz0gMjsKICAgIH0KICB9CgogIHZvaWQgX01faW5pdGlh
bGl6ZV9idWZmZXIoY29uc3QgX1RwJiwgY29uc3QgX190cnVlX3R5cGUmKSB7fQogIHZvaWQgX01f
aW5pdGlhbGl6ZV9idWZmZXIoY29uc3QgX1RwJiB2YWwsIGNvbnN0IF9fZmFsc2VfdHlwZSYpIHsK
ICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2J1ZmZlciwgX01fbGVuLCB2YWwpOwogIH0KCnB1
YmxpYzoKICBwdHJkaWZmX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2xlbjsgfQogIHB0cmRp
ZmZfdCByZXF1ZXN0ZWRfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX29yaWdpbmFsX2xlbjsgfQog
IF9UcCogYmVnaW4oKSB7IHJldHVybiBfTV9idWZmZXI7IH0KICBfVHAqIGVuZCgpIHsgcmV0dXJu
IF9NX2J1ZmZlciArIF9NX2xlbjsgfQoKICBfVGVtcG9yYXJ5X2J1ZmZlcihfRm9yd2FyZEl0ZXJh
dG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CgoKCgogICAgIHR5cGVkZWYg
dHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj
dG9yIF9Ucml2aWFsOwoKICAgIHRyeSB7CiAgICAgIF9NX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3Qs
IF9fbGFzdCk7CiAgICAgIF9NX2FsbG9jYXRlX2J1ZmZlcigpOwogICAgICBpZiAoX01fbGVuID4g
MCkKICAgICAgICBfTV9pbml0aWFsaXplX2J1ZmZlcigqX19maXJzdCwgX1RyaXZpYWwoKSk7CiAg
ICB9CiAgICBjYXRjaCguLi4pIHsgZnJlZShfTV9idWZmZXIpOyBfTV9idWZmZXIgPSAwOyBfTV9s
ZW4gPSAwOyB0aHJvdzsgfTsKICB9CgogIH5fVGVtcG9yYXJ5X2J1ZmZlcigpIHsKICAgIF9EZXN0
cm95KF9NX2J1ZmZlciwgX01fYnVmZmVyICsgX01fbGVuKTsKICAgIGZyZWUoX01fYnVmZmVyKTsK
ICB9Cgpwcml2YXRlOgoKICBfVGVtcG9yYXJ5X2J1ZmZlcihjb25zdCBfVGVtcG9yYXJ5X2J1ZmZl
cjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+Jikge30KICB2b2lkIG9wZXJhdG9yPShjb25zdCBfVGVt
cG9yYXJ5X2J1ZmZlcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+Jikge30KfTsKCgoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwKICAgICAgICAgIGNsYXNzIF9UcAoKICAgICAgICAg
ICAgICAgICAgICA9IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6
dmFsdWVfdHlwZQoKICAgICAgICAgPgpzdHJ1Y3QgdGVtcG9yYXJ5X2J1ZmZlciA6IHB1YmxpYyBf
VGVtcG9yYXJ5X2J1ZmZlcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+CnsKICB0ZW1wb3JhcnlfYnVm
ZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCiAg
ICA6IF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4oX19maXJzdCwgX19s
YXN0KSB7fQogIH50ZW1wb3JhcnlfYnVmZmVyKCkge30KfTsKCgoKfQoKCiMgMSAiLi4vc3RscG9y
dC9zdGwvX3RlbXBidWYuYyIgMQojIDI5ICIuLi9zdGxwb3J0L3N0bC9fdGVtcGJ1Zi5jIgpuYW1l
c3BhY2UgX1NUTCB7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpwYWlyPF9UcCosIHB0cmRpZmZfdD4K
X19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCopCnsKICBpZiAoX19s
ZW4gPiBwdHJkaWZmX3QoMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApKSkKICAgIF9fbGVuID0gMjE0
NzQ4MzY0NyAvIHNpemVvZihfVHApOwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfVHAqIF9f
dG1wID0gKF9UcCopIG1hbGxvYygoc2l6ZV90KV9fbGVuICogc2l6ZW9mKF9UcCkpOwogICAgaWYg
KF9fdG1wICE9IDApCiAgICAgIHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oX190bXAsIF9f
bGVuKTsKICAgIF9fbGVuIC89IDI7CiAgfQoKICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+
KChfVHAqKTAsIDApOwp9Cn0KIyAxNTkgIi4uL3N0bHBvcnQvc3RsL190ZW1wYnVmLmgiIDIKIyAz
MyAiLi4vc3RscG9ydC9tZW1vcnkiIDIKCgoKIyAxICIuLi9zdGxwb3J0L3N0bC9fcmF3X3N0b3Jh
Z2VfaXRlci5oIiAxCiMgMzcgIi4uL3N0bHBvcnQvc3RsL19yYXdfc3RvcmFnZV9pdGVyLmgiCm5h
bWVzcGFjZSBfU1RMIHsKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBf
VHA+CmNsYXNzIHJhd19zdG9yYWdlX2l0ZXJhdG9yCgoKCnsKcHJvdGVjdGVkOgogIF9Gb3J3YXJk
SXRlcmF0b3IgX01faXRlcjsKcHVibGljOgogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBp
dGVyYXRvcl9jYXRlZ29yeTsKCiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2
b2lkIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZv
aWQgcmVmZXJlbmNlOwoKICBleHBsaWNpdCByYXdfc3RvcmFnZV9pdGVyYXRvcihfRm9yd2FyZEl0
ZXJhdG9yIF9feCkgOiBfTV9pdGVyKF9feCkge30KICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9y
d2FyZEl0ZXJhdG9yLCBfVHA+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIHJhd19z
dG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4mIG9wZXJhdG9yPShjb25zdCBf
VHAmIF9fZWxlbWVudCkgewogICAgX0NvbnN0cnVjdCgmKl9NX2l0ZXIsIF9fZWxlbWVudCk7CiAg
ICByZXR1cm4gKnRoaXM7CiAgfQogIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0
b3IsIF9UcD4mIG9wZXJhdG9yKysoKSB7CiAgICArK19NX2l0ZXI7CiAgICByZXR1cm4gKnRoaXM7
CiAgfQogIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4gb3BlcmF0
b3IrKyhpbnQpIHsKICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9U
cD4gX190bXAgPSAqdGhpczsKICAgICsrX01faXRlcjsKICAgIHJldHVybiBfX3RtcDsKICB9Cn07
CgoKCgoKfQojIDM3ICIuLi9zdGxwb3J0L21lbW9yeSIgMgoKCiMgMSAiLi4vc3RscG9ydC9zdGwv
X2F1dG9fcHRyLmgiIDEKIyAyMiAiLi4vc3RscG9ydC9zdGwvX2F1dG9fcHRyLmgiCm5hbWVzcGFj
ZSBfU1RMIHsKCmNsYXNzIF9fcHRyX2Jhc2UgewpwdWJsaWM6CiAgdm9pZCogX01fcDsKICB2b2lk
IF9fc2V0KGNvbnN0IHZvaWQqIHApIHsgX01fcCA9IGNvbnN0X2Nhc3Q8dm9pZCo+KHApOyB9CiAg
dm9pZCBfX3NldCh2b2lkKiBwKSB7IF9NX3AgPSBwOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PiBjbGFzcyBhdXRvX3B0cl9yZWYgewpwdWJsaWM6CiAgX19wdHJfYmFzZSYgX01fcjsKICBfVHAq
IGNvbnN0IF9NX3A7CgogIGF1dG9fcHRyX3JlZihfX3B0cl9iYXNlJiBfX3IsIF9UcCogX19wKSA6
IF9NX3IoX19yKSwgX01fcChfX3ApIHsgfQoKICBfVHAqIHJlbGVhc2UoKSBjb25zdCB7IF9NX3Iu
X19zZXQoKHZvaWQqKTApOyByZXR1cm4gX01fcDsgfQoKfTsKCnRlbXBsYXRlPGNsYXNzIF9UcD4g
c3RydWN0IGF1dG9fcHRyIDogcHVibGljIF9fcHRyX2Jhc2UgewoKICB0eXBlZGVmIF9UcCBlbGVt
ZW50X3R5cGU7CiAgdHlwZWRlZiBhdXRvX3B0cjxfVHA+IF9TZWxmOwoKICBfVHAqIHJlbGVhc2Uo
KSB7CiAgICBfVHAqIF9fcHggPSB0aGlzLT5nZXQoKTsKICAgIHRoaXMtPl9NX3AgPSAwOwogICAg
cmV0dXJuIF9fcHg7CiAgfQoKICB2b2lkIHJlc2V0KF9UcCogX19weD0wKSB7CiAgICBfVHAqIF9f
cHQgPSB0aGlzLT5nZXQoKTsKICAgIGlmIChfX3B4ICE9IF9fcHQpCiAgICAgIGRlbGV0ZSBfX3B0
OwogICAgdGhpcy0+X19zZXQoX19weCk7CiAgfQoKICBfVHAqIGdldCgpIGNvbnN0IHsgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8X1RwKj4oY29uc3RfY2FzdDx2b2lkKj4oX01fcCkpOyB9CgoKICBf
VHAqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQoKICBfVHAmIG9wZXJhdG9y
KigpIGNvbnN0IHsgcmV0dXJuICpnZXQoKTsgfQoKICBhdXRvX3B0cigpIHsgdGhpcy0+X01fcCA9
IDA7IH0KCiAgZXhwbGljaXQgYXV0b19wdHIoX1RwKiBfX3B4KSB7IHRoaXMtPl9fc2V0KF9fcHgp
OyB9CiMgODIgIi4uL3N0bHBvcnQvc3RsL19hdXRvX3B0ci5oIgogIHRlbXBsYXRlPGNsYXNzIF9U
cDE+IGF1dG9fcHRyKGF1dG9fcHRyPF9UcDE+JiBfX3IpIHsKICAgIHRoaXMtPl9fc2V0KChfVHAx
KilfX3IucmVsZWFzZSgpKTsKICB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcDE+IGF1dG9fcHRyPF9U
cD4mIG9wZXJhdG9yPShhdXRvX3B0cjxfVHAxPiYgX19yKSB7CiAgICByZXNldCgoX1RwMSopX19y
LnJlbGVhc2UoKSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQojIDEwMSAiLi4vc3RscG9ydC9zdGwv
X2F1dG9fcHRyLmgiCiAgYXV0b19wdHIoX1NlbGYmIF9fcikgeyB0aGlzLT5fX3NldChfX3IucmVs
ZWFzZSgpKTsgfQoKICBfU2VsZiYgb3BlcmF0b3I9KF9TZWxmJiBfX3IpIHsKICAgIHJlc2V0KF9f
ci5yZWxlYXNlKCkpOwogICAgcmV0dXJuICp0aGlzOwogIH0KCgogIH5hdXRvX3B0cigpIHsgZGVs
ZXRlIHRoaXMtPmdldCgpOyB9CgogIGF1dG9fcHRyKGF1dG9fcHRyX3JlZjxfVHA+IF9fcikgewog
ICAgdGhpcy0+X19zZXQoX19yLnJlbGVhc2UoKSk7CiAgfQoKICBfU2VsZiYgb3BlcmF0b3I9KGF1
dG9fcHRyX3JlZjxfVHA+IF9fcikgewogICAgcmVzZXQoX19yLnJlbGVhc2UoKSk7CiAgICByZXR1
cm4gKnRoaXM7CiAgfQoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RwMT4gb3BlcmF0b3IgYXV0b19wdHJf
cmVmPF9UcDE+KCkgewogICAgcmV0dXJuIGF1dG9fcHRyX3JlZjxfVHAxPigqdGhpcywgdGhpcy0+
Z2V0KCkpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBfVHAxPiBvcGVyYXRvciBhdXRvX3B0cjxfVHAx
PigpIHsKICAgIHJldHVybiBhdXRvX3B0cjxfVHAxPihyZWxlYXNlKCkpOwogIH0KCgoKCgp9Owp9
CiMgNDAgIi4uL3N0bHBvcnQvbWVtb3J5IiAyCiMgNTcgIi4uL3N0bHBvcnQvbWVtb3J5IgojIDEg
Ii4uL3N0bHBvcnQvc3RsL19lcGlsb2cuaCIgMQojIDE0ICIuLi9zdGxwb3J0L3N0bC9fZXBpbG9n
LmgiCiMgMSAiLi4vc3RscG9ydC9zdGwvX2NvbmZpZ19jb21wYXRfcG9zdC5oIiAxCiMgMTUgIi4u
L3N0bHBvcnQvc3RsL19lcGlsb2cuaCIgMgojIDU4ICIuLi9zdGxwb3J0L21lbW9yeSIgMgojIDI0
ICIuLi9zdGxwb3J0L3N0bC9fc3RyaW5nLmgiIDIKIyAzNSAiLi4vc3RscG9ydC9zdGwvX3N0cmlu
Zy5oIgojIDEgIi4uL3N0bHBvcnQvc3RsL19mdW5jdGlvbi5oIiAxCiMgMzQgIi4uL3N0bHBvcnQv
c3RsL19mdW5jdGlvbi5oIgojIDEgIi4uL3N0bHBvcnQvc3RsL19mdW5jdGlvbl9iYXNlLmgiIDEK
IyAzNyAiLi4vc3RscG9ydC9zdGwvX2Z1bmN0aW9uX2Jhc2UuaCIKbmFtZXNwYWNlIF9TVEwgewoK
dGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCB1bmFyeV9mdW5jdGlv
biB7CiAgdHlwZWRlZiBfQXJnIGFyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3Vs
dF90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jl
c3VsdD4Kc3RydWN0IGJpbmFyeV9mdW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJnMSBmaXJzdF9hcmd1
bWVudF90eXBlOwogIHR5cGVkZWYgX0FyZzIgc2Vjb25kX2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRl
ZiBfUmVzdWx0IHJlc3VsdF90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGVx
dWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9w
ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBf
X3ggPT0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qgbm90X2VxdWFsX3Rv
IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9y
KCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggIT0g
X195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZ3JlYXRlciA6IHB1YmxpYyBi
aW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9U
cCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID4gX195OyB9Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248
X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBf
VHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDwgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgpzdHJ1Y3QgZ3JlYXRlcl9lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9U
cCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9f
eSkgY29uc3QgeyByZXR1cm4gX194ID49IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K
c3RydWN0IGxlc3NfZXF1YWwgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4K
ewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0
IHsgcmV0dXJuIF9feCA8PSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+Cmxlc3M8X1Rw
PiBfX2xlc3MoX1RwKiApIHsgcmV0dXJuIGxlc3M8X1RwPigpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgplcXVhbF90bzxfVHA+IF9fZXF1YWxfdG8oX1RwKiApIHsgcmV0dXJuIGVxdWFsX3RvPF9U
cD4oKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IHBsdXMgOiBwdWJsaWMgYmluYXJ5
X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gs
IGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggKyBfX3k7IH0KfTsKCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CnN0cnVjdCBtaW51cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9U
cCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kp
IGNvbnN0IHsgcmV0dXJuIF9feCAtIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KcGx1
czxfVHA+IF9fcGx1cyhfVHAqICkgeyByZXR1cm4gcGx1czxfVHA+KCk7IH0KCnRlbXBsYXRlIDxj
bGFzcyBfVHA+Cm1pbnVzPF9UcD4gX19taW51cyhfVHAqICkgeyByZXR1cm4gbWludXM8X1RwPigp
OyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbXVsdGlwbGllcyA6IHB1YmxpYyBiaW5h
cnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f
eCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAqIF9feTsgfQp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9UcD4Kc3RydWN0IGRpdmlkZXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9U
cCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYg
X195KSBjb25zdCB7IHJldHVybiBfX3ggLyBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+
CnN0cnVjdCBtb2R1bHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4Kewog
IF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyBy
ZXR1cm4gX194ICUgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbmVnYXRl
IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25z
dCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gLV9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4Kc3RydWN0IGxvZ2ljYWxfYW5kIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJv
b2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBj
b25zdCB7IHJldHVybiBfX3ggJiYgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1
Y3QgbG9naWNhbF9vciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAg
Ym9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyBy
ZXR1cm4gX194IHx8IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2lj
YWxfbm90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRv
cigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAhX194OyB9Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0MXN0IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9Q
YWlyLCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZT4gewogIGNvbnN0IHR5cGVuYW1lIF9QYWly
OjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJl
dHVybiBfX3guZmlyc3Q7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPgpzdHJ1Y3QgX1Nl
bGVjdDJuZCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OnNl
Y29uZF90eXBlPgp7CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRv
cigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guc2Vjb25kOwogIH0K
fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgX1Byb2plY3Qx
c3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLCBfQXJnMiwgX0FyZzE+IHsKICBfQXJn
MSBvcGVyYXRvcigpKGNvbnN0IF9BcmcxJiBfX3gsIGNvbnN0IF9BcmcyJikgY29uc3QgeyByZXR1
cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3Qg
X1Byb2plY3QybmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLCBfQXJnMiwgX0FyZzI+
IHsKICBfQXJnMiBvcGVyYXRvcigpKGNvbnN0IF9BcmcxJiwgY29uc3QgX0FyZzImIF9feSkgY29u
c3QgeyByZXR1cm4gX195OyB9Cn07CiMgMTg4ICIuLi9zdGxwb3J0L3N0bC9fZnVuY3Rpb25fYmFz
ZS5oIgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX0lkZW50aXR5IDogcHVibGljIHVuYXJ5
X2Z1bmN0aW9uPF9UcCxfVHA+IHsKICBjb25zdCBfVHAmIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBf
X3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQsIGNs
YXNzIF9Bcmd1bWVudD4Kc3RydWN0IF9Db25zdGFudF91bmFyeV9mdW4gewogIHR5cGVkZWYgX0Fy
Z3VtZW50IGFyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwogIHJl
c3VsdF90eXBlIF9NX3ZhbDsKCiAgX0NvbnN0YW50X3VuYXJ5X2Z1bihjb25zdCByZXN1bHRfdHlw
ZSYgX192KSA6IF9NX3ZhbChfX3YpIHt9CiAgY29uc3QgcmVzdWx0X3R5cGUmIG9wZXJhdG9yKCko
Y29uc3QgX0FyZ3VtZW50JikgY29uc3QgeyByZXR1cm4gX01fdmFsOyB9Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1Jlc3VsdCwgY2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgX0NvbnN0YW50
X2JpbmFyeV9mdW4gewogIHR5cGVkZWYgX0FyZzEgZmlyc3RfYXJndW1lbnRfdHlwZTsKICB0eXBl
ZGVmIF9BcmcyIHNlY29uZF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRf
dHlwZTsKICBfUmVzdWx0IF9NX3ZhbDsKCiAgX0NvbnN0YW50X2JpbmFyeV9mdW4oY29uc3QgX1Jl
c3VsdCYgX192KSA6IF9NX3ZhbChfX3YpIHt9CiAgY29uc3QgcmVzdWx0X3R5cGUmIG9wZXJhdG9y
KCkoY29uc3QgX0FyZzEmLCBjb25zdCBfQXJnMiYpIGNvbnN0IHsKICAgIHJldHVybiBfTV92YWw7
CiAgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IGlubGluZSBfVHAgX19pZGVudGl0eV9lbGVt
ZW50KHBsdXM8X1RwPikgeyByZXR1cm4gX1RwKDApOyB9CnRlbXBsYXRlIDxjbGFzcyBfVHA+IGlu
bGluZSBfVHAgX19pZGVudGl0eV9lbGVtZW50KG11bHRpcGxpZXM8X1RwPikgeyByZXR1cm4gX1Rw
KDEpOyB9Cgp9CiMgMzUgIi4uL3N0bHBvcnQvc3RsL19mdW5jdGlvbi5oIiAyCgoKbmFtZXNwYWNl
IF9TVEwgewoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBpbmxpbmUgX1RwIGlkZW50aXR5X2VsZW1l
bnQocGx1czxfVHA+KSB7IHJldHVybiBfVHAoMCk7IH0KdGVtcGxhdGUgPGNsYXNzIF9UcD4gaW5s
aW5lIF9UcCBpZGVudGl0eV9lbGVtZW50KG11bHRpcGxpZXM8X1RwPikgeyByZXR1cm4gX1RwKDEp
OyB9CiMgODQgIi4uL3N0bHBvcnQvc3RsL19mdW5jdGlvbi5oIgp0ZW1wbGF0ZSA8Y2xhc3MgX1By
ZWRpY2F0ZT4KY2xhc3MgdW5hcnlfbmVnYXRlIDoKICAgIHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0
eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1bWVudF90eXBlLCBib29sPiB7CnByb3RlY3RlZDoKICBf
UHJlZGljYXRlIF9NX3ByZWQ7CnB1YmxpYzoKICBleHBsaWNpdCB1bmFyeV9uZWdhdGUoY29uc3Qg
X1ByZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25z
dCB0eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJl
dHVybiAhX01fcHJlZChfX3gpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgpp
bmxpbmUgdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDEoY29uc3QgX1ByZWRpY2F0ZSYgX19w
cmVkKQp7CiAgcmV0dXJuIHVuYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3MgYmluYXJ5X25lZ2F0ZQogICAgOiBwdWJsaWMg
YmluYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25k
X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbD4gewpwcm90
ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgYmluYXJ5X25l
Z2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVy
YXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9f
eCwKICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2Fy
Z3VtZW50X3R5cGUmIF9feSkgY29uc3QKICB7CiAgICByZXR1cm4gIV9NX3ByZWQoX194LCBfX3kp
OwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgYmluYXJ5X25lZ2F0
ZTxfUHJlZGljYXRlPgpub3QyKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkKewogIHJldHVybiBi
aW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3Bl
cmF0aW9uPgpjbGFzcyBiaW5kZXIxc3QgOgogICAgcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVu
YW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlID4gewpwcm90ZWN0ZWQ6CiAg
X09wZXJhdGlvbiBfTV9vcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90
eXBlIF9NX3ZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMXN0KGNvbnN0IF9PcGVyYXRpb24mIF9feCwK
ICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlw
ZSYgX195KQogICAgICA6IF9NX29wKF9feCksIF9NX3ZhbHVlKF9feSkge30KICB0eXBlbmFtZSBf
T3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJh
dGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX29w
KF9NX3ZhbHVlLCBfX3gpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBjbGFz
cyBfVHA+CmlubGluZSBiaW5kZXIxc3Q8X09wZXJhdGlvbj4KYmluZDFzdChjb25zdCBfT3BlcmF0
aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlwZW5hbWUgX09wZXJhdGlv
bjo6Zmlyc3RfYXJndW1lbnRfdHlwZSBfQXJnMV90eXBlOwogIHJldHVybiBiaW5kZXIxc3Q8X09w
ZXJhdGlvbj4oX19mbiwgX0FyZzFfdHlwZShfX3gpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PcGVy
YXRpb24+CmNsYXNzIGJpbmRlcjJuZAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1l
IF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVy
YXRpb24gX01fb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUg
dmFsdWU7CnB1YmxpYzoKICBiaW5kZXIybmQoY29uc3QgX09wZXJhdGlvbiYgX194LAogICAgICAg
ICAgICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX195
KQogICAgICA6IF9NX29wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFtZSBfT3BlcmF0aW9u
OjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmly
c3RfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fb3AoX194LCB2YWx1
ZSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24sIGNsYXNzIF9UcD4KaW5saW5l
IGJpbmRlcjJuZDxfT3BlcmF0aW9uPgpiaW5kMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9fZm4sIGNv
bnN0IF9UcCYgX194KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJn
dW1lbnRfdHlwZSBfQXJnMl90eXBlOwogIHJldHVybiBiaW5kZXIybmQ8X09wZXJhdGlvbj4oX19m
biwgX0FyZzJfdHlwZShfX3gpKTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBj
bGFzcyBfT3BlcmF0aW9uMj4KY2xhc3MgdW5hcnlfY29tcG9zZSA6CiAgcHVibGljIHVuYXJ5X2Z1
bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlLAogICAgICAgICAgICAg
ICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVk
OgogIF9PcGVyYXRpb24xIF9NX2ZuMTsKICBfT3BlcmF0aW9uMiBfTV9mbjI7CnB1YmxpYzoKICB1
bmFyeV9jb21wb3NlKGNvbnN0IF9PcGVyYXRpb24xJiBfX3gsIGNvbnN0IF9PcGVyYXRpb24yJiBf
X3kpCiAgICA6IF9NX2ZuMShfX3gpLCBfTV9mbjIoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRp
b24xOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjI6
OmFyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX2ZuMShfTV9mbjIoX194
KSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9u
Mj4KaW5saW5lIHVuYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsX09wZXJhdGlvbjI+CmNvbXBvc2Ux
KGNvbnN0IF9PcGVyYXRpb24xJiBfX2ZuMSwgY29uc3QgX09wZXJhdGlvbjImIF9fZm4yKQp7CiAg
cmV0dXJuIHVuYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsX09wZXJhdGlvbjI+KF9fZm4xLCBfX2Zu
Mik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjIsIGNs
YXNzIF9PcGVyYXRpb24zPgpjbGFzcyBiaW5hcnlfY29tcG9zZSA6CiAgICBwdWJsaWMgdW5hcnlf
ZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBlPiB7CnByb3Rl
Y3RlZDoKICBfT3BlcmF0aW9uMSBfTV9mbjE7CiAgX09wZXJhdGlvbjIgX01fZm4yOwogIF9PcGVy
YXRpb24zIF9NX2ZuMzsKcHVibGljOgogIGJpbmFyeV9jb21wb3NlKGNvbnN0IF9PcGVyYXRpb24x
JiBfX3gsIGNvbnN0IF9PcGVyYXRpb24yJiBfX3ksCiAgICAgICAgICAgICAgICAgY29uc3QgX09w
ZXJhdGlvbjMmIF9feikKICAgIDogX01fZm4xKF9feCksIF9NX2ZuMihfX3kpLCBfTV9mbjMoX196
KSB7IH0KICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNv
bnN0IHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAg
IHJldHVybiBfTV9mbjEoX01fZm4yKF9feCksIF9NX2ZuMyhfX3gpKTsKICB9Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24yLCBjbGFzcyBfT3BlcmF0aW9u
Mz4KaW5saW5lIGJpbmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLCBfT3BlcmF0aW9uMiwgX09wZXJh
dGlvbjM+CmNvbXBvc2UyKGNvbnN0IF9PcGVyYXRpb24xJiBfX2ZuMSwgY29uc3QgX09wZXJhdGlv
bjImIF9fZm4yLAogICAgICAgICBjb25zdCBfT3BlcmF0aW9uMyYgX19mbjMpCnsKICByZXR1cm4g
YmluYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsX09wZXJhdGlvbjIsX09wZXJhdGlvbjM+CiAgICAo
X19mbjEsIF9fZm4yLCBfX2ZuMyk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9S
ZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24gOiBwdWJsaWMgdW5hcnlfZnVu
Y3Rpb248X0FyZywgX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAgX1Jlc3VsdCAoKl9NX3B0cikoX0Fy
Zyk7CnB1YmxpYzoKICBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKCkge30KICBleHBsaWNpdCBw
b2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcpKSA6IF9NX3B0cihf
X3gpIHt9CiAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcgX194KSBjb25zdCB7IHJldHVybiBfTV9w
dHIoX194KTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CmlubGlu
ZSBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHB0cl9mdW4oX1Jlc3Vs
dCAoKl9feCkoX0FyZykpCnsKICByZXR1cm4gcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJn
LCBfUmVzdWx0PihfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBj
bGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbiA6CiAgcHVibGlj
IGJpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PiB7CnByb3RlY3RlZDoKICAgIF9S
ZXN1bHQgKCpfTV9wdHIpKF9BcmcxLCBfQXJnMik7CnB1YmxpYzoKICAgIHBvaW50ZXJfdG9fYmlu
YXJ5X2Z1bmN0aW9uKCkge30KICAgIGV4cGxpY2l0IHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9u
KF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpCiAgICAgIDogX01fcHRyKF9feCkge30KICAg
IF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnMSBfX3gsIF9BcmcyIF9feSkgY29uc3QgewogICAgICBy
ZXR1cm4gX01fcHRyKF9feCwgX195KTsKICAgIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwg
Y2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVyX3RvX2JpbmFyeV9mdW5j
dGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PgpwdHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBf
QXJnMikpIHsKICByZXR1cm4gcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIs
X1Jlc3VsdD4oX194KTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IGlkZW50aXR5
IDogcHVibGljIF9JZGVudGl0eTxfVHA+IHt9OwoKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPiBzdHJ1
Y3Qgc2VsZWN0MXN0IDogcHVibGljIF9TZWxlY3Qxc3Q8X1BhaXI+IHt9Owp0ZW1wbGF0ZSA8Y2xh
c3MgX1BhaXI+IHN0cnVjdCBzZWxlY3QybmQgOiBwdWJsaWMgX1NlbGVjdDJuZDxfUGFpcj4ge307
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgcHJvamVjdDFzdCA6
IHB1YmxpYyBfUHJvamVjdDFzdDxfQXJnMSwgX0FyZzI+IHt9OwoKdGVtcGxhdGUgPGNsYXNzIF9B
cmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IHByb2plY3QybmQgOiBwdWJsaWMgX1Byb2plY3QybmQ8
X0FyZzEsIF9BcmcyPiB7fTsKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBf
Q29uc3RhbnRfdm9pZF9mdW4gewogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKICByZXN1
bHRfdHlwZSBfTV92YWw7CgogIF9Db25zdGFudF92b2lkX2Z1bihjb25zdCByZXN1bHRfdHlwZSYg
X192KSA6IF9NX3ZhbChfX3YpIHt9CiAgY29uc3QgcmVzdWx0X3R5cGUmIG9wZXJhdG9yKCkoKSBj
b25zdCB7IHJldHVybiBfTV92YWw7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4Kc3Ry
dWN0IGNvbnN0YW50X3ZvaWRfZnVuIDogcHVibGljIF9Db25zdGFudF92b2lkX2Z1bjxfUmVzdWx0
PiB7CiAgY29uc3RhbnRfdm9pZF9mdW4oY29uc3QgX1Jlc3VsdCYgX192KSA6IF9Db25zdGFudF92
b2lkX2Z1bjxfUmVzdWx0PihfX3YpIHt9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdCwgY2xh
c3MgX0FyZ3VtZW50ID0gX1Jlc3VsdCA+CnN0cnVjdCBjb25zdGFudF91bmFyeV9mdW4gOiBwdWJs
aWMgX0NvbnN0YW50X3VuYXJ5X2Z1bjxfUmVzdWx0LCBfQXJndW1lbnQ+CnsKICBjb25zdGFudF91
bmFyeV9mdW4oY29uc3QgX1Jlc3VsdCYgX192KQogICAgOiBfQ29uc3RhbnRfdW5hcnlfZnVuPF9S
ZXN1bHQsIF9Bcmd1bWVudD4oX192KSB7fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQsIGNs
YXNzIF9BcmcxID0gX1Jlc3VsdCwgY2xhc3MgX0FyZzIgPSBfQXJnMSA+CnN0cnVjdCBjb25zdGFu
dF9iaW5hcnlfZnVuCiAgOiBwdWJsaWMgX0NvbnN0YW50X2JpbmFyeV9mdW48X1Jlc3VsdCwgX0Fy
ZzEsIF9BcmcyPgp7CiAgY29uc3RhbnRfYmluYXJ5X2Z1bihjb25zdCBfUmVzdWx0JiBfX3YpCiAg
ICA6IF9Db25zdGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsIF9BcmcxLCBfQXJnMj4oX192KSB7fQp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CmlubGluZSBjb25zdGFudF92b2lkX2Z1bjxfUmVz
dWx0PiBjb25zdGFudDAoY29uc3QgX1Jlc3VsdCYgX192YWwpCnsKICByZXR1cm4gY29uc3RhbnRf
dm9pZF9mdW48X1Jlc3VsdD4oX192YWwpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4KaW5s
aW5lIGNvbnN0YW50X3VuYXJ5X2Z1bjxfUmVzdWx0LF9SZXN1bHQ+IGNvbnN0YW50MShjb25zdCBf
UmVzdWx0JiBfX3ZhbCkKewogIHJldHVybiBjb25zdGFudF91bmFyeV9mdW48X1Jlc3VsdCxfUmVz
dWx0PihfX3ZhbCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgppbmxpbmUgY29uc3RhbnRf
YmluYXJ5X2Z1bjxfUmVzdWx0LF9SZXN1bHQsX1Jlc3VsdD4KY29uc3RhbnQyKGNvbnN0IF9SZXN1
bHQmIF9fdmFsKQp7CiAgcmV0dXJuIGNvbnN0YW50X2JpbmFyeV9mdW48X1Jlc3VsdCxfUmVzdWx0
LF9SZXN1bHQ+KF9fdmFsKTsKfQoKCgpjbGFzcyBzdWJ0cmFjdGl2ZV9ybmcgOiBwdWJsaWMgdW5h
cnlfZnVuY3Rpb248dW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZz4gewpwcml2YXRlOgogIHVu
c2lnbmVkIGxvbmcgX01fdGFibGVbNTVdOwogIHVuc2lnbmVkIGxvbmcgX01faW5kZXgxOwogIHVu
c2lnbmVkIGxvbmcgX01faW5kZXgyOwpwdWJsaWM6CiAgdW5zaWduZWQgbG9uZyBvcGVyYXRvcigp
KHVuc2lnbmVkIGxvbmcgX19saW1pdCkgewogICAgX01faW5kZXgxID0gKF9NX2luZGV4MSArIDEp
ICUgNTU7CiAgICBfTV9pbmRleDIgPSAoX01faW5kZXgyICsgMSkgJSA1NTsKICAgIF9NX3RhYmxl
W19NX2luZGV4MV0gPSBfTV90YWJsZVtfTV9pbmRleDFdIC0gX01fdGFibGVbX01faW5kZXgyXTsK
ICAgIHJldHVybiBfTV90YWJsZVtfTV9pbmRleDFdICUgX19saW1pdDsKICB9CgogIHZvaWQgX01f
aW5pdGlhbGl6ZSh1bnNpZ25lZCBsb25nIF9fc2VlZCkKICB7CiAgICB1bnNpZ25lZCBsb25nIF9f
ayA9IDE7CiAgICBfTV90YWJsZVs1NF0gPSBfX3NlZWQ7CiAgICB1bnNpZ25lZCBsb25nIF9faTsK
ICAgIGZvciAoX19pID0gMDsgX19pIDwgNTQ7IF9faSsrKSB7CiAgICAgICAgdW5zaWduZWQgbG9u
ZyBfX2lpID0gKDIxICogKF9faSArIDEpICUgNTUpIC0gMTsKICAgICAgICBfTV90YWJsZVtfX2lp
XSA9IF9fazsKICAgICAgICBfX2sgPSBfX3NlZWQgLSBfX2s7CiAgICAgICAgX19zZWVkID0gX01f
dGFibGVbX19paV07CiAgICB9CiAgICBmb3IgKGludCBfX2xvb3AgPSAwOyBfX2xvb3AgPCA0OyBf
X2xvb3ArKykgewogICAgICAgIGZvciAoX19pID0gMDsgX19pIDwgNTU7IF9faSsrKQogICAgICAg
ICAgICBfTV90YWJsZVtfX2ldID0gX01fdGFibGVbX19pXSAtIF9NX3RhYmxlWygxICsgX19pICsg
MzApICUgNTVdOwogICAgfQogICAgX01faW5kZXgxID0gMDsKICAgIF9NX2luZGV4MiA9IDMxOwog
IH0KCiAgc3VidHJhY3RpdmVfcm5nKHVuc2lnbmVkIGludCBfX3NlZWQpIHsgX01faW5pdGlhbGl6
ZShfX3NlZWQpOyB9CiAgc3VidHJhY3RpdmVfcm5nKCkgeyBfTV9pbml0aWFsaXplKDE2MTgwMzM5
OHVsKTsgfQp9OwojIDM5NiAiLi4vc3RscG9ydC9zdGwvX2Z1bmN0aW9uLmgiCnRlbXBsYXRlIDxj
bGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5j
dGlvbjxfVHAqLF9SZXQ+IHsKICB0eXBlZGVmIF9SZXQgKF9UcDo6Kl9mdW5fdHlwZSkodm9pZCk7
CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3QoX2Z1bl90eXBlIF9fcGYpIDogX01fZihfX3Bm
KSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9N
X2YpKCk7IH0KcHJpdmF0ZToKICBfZnVuX3R5cGUgX01fZjsKfTsKCnRlbXBsYXRlIDxjbGFzcyBf
UmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5j
dGlvbjxjb25zdCBfVHAqLF9SZXQ+IHsKICB0eXBlZGVmIF9SZXQgKF9UcDo6Kl9mdW5fdHlwZSko
dm9pZCkgY29uc3Q7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3QoX2Z1bl90eXBl
IF9fcGYpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkg
Y29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfZnVuX3R5cGUgX01f
ZjsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3Jl
Zl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CiAgdHlwZWRlZiBfUmV0IChf
VHA6OipfZnVuX3R5cGUpKHZvaWQpOwpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl9yZWZfdChf
ZnVuX3R5cGUgX19wZikgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19y
KSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX2Z1bl90eXBlIF9N
X2Y7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1f
ZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CiAgdHlwZWRlZiBf
UmV0IChfVHA6OipfZnVuX3R5cGUpKHZvaWQpIGNvbnN0OwpwdWJsaWM6CiAgZXhwbGljaXQgY29u
c3RfbWVtX2Z1bl9yZWZfdChfZnVuX3R5cGUgX19wZikgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBv
cGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9
CnByaXZhdGU6CiAgX2Z1bl90eXBlIF9NX2Y7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xh
c3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV90IDogcHVibGljIGJpbmFyeV9mdW5j
dGlvbjxfVHAqLF9BcmcsX1JldD4gewogIHR5cGVkZWYgX1JldCAoX1RwOjoqX2Z1bl90eXBlKShf
QXJnKTsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3QoX2Z1bl90eXBlIF9fcGYpIDogX01f
ZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsg
cmV0dXJuIChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX2Z1bl90eXBlIF9NX2Y7Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25z
dF9tZW1fZnVuMV90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9BcmcsX1Jl
dD4gewogIHR5cGVkZWYgX1JldCAoX1RwOjoqX2Z1bl90eXBlKShfQXJnKSBjb25zdDsKcHVibGlj
OgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3QoX2Z1bl90eXBlIF9fcGYpIDogX01fZihfX3Bm
KSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0CiAg
ICB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9mdW5fdHlwZSBfTV9m
Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3Mg
bWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsK
ICB0eXBlZGVmIF9SZXQgKF9UcDo6Kl9mdW5fdHlwZSkoX0FyZyk7CnB1YmxpYzoKICBleHBsaWNp
dCBtZW1fZnVuMV9yZWZfdChfZnVuX3R5cGUgX19wZikgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBv
cGVyYXRvcigpKF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZiko
X194KTsgfQpwcml2YXRlOgogIF9mdW5fdHlwZSBfTV9mOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9S
ZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfcmVmX3QgOiBw
dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsKICB0eXBlZGVmIF9SZXQgKF9U
cDo6Kl9mdW5fdHlwZSkoX0FyZykgY29uc3Q7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1f
ZnVuMV9yZWZfdChfZnVuX3R5cGUgX19wZikgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRv
cigpKGNvbnN0IF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZiko
X194KTsgfQpwcml2YXRlOgogIF9mdW5fdHlwZSBfTV9mOwp9OwoKCgoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4KY2xhc3MgbWVtX2Z1bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248
X1RwKix2b2lkPiB7CiAgdHlwZWRlZiB2b2lkIChfVHA6OipfZnVuX3R5cGUpKHZvaWQpOwpwdWJs
aWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90IChfZnVuX3R5cGUgX19wZikgOiBfTV9mKF9fcGYpIHt9
CiAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7IChfX3AtPipfTV9mKSgpOyB9CnBy
aXZhdGU6CiAgX2Z1bl90eXBlIF9NX2Y7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBj
b25zdF9tZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBf
VHAqLHZvaWQ+IHsKICB0eXBlZGVmIHZvaWQgKF9UcDo6Kl9mdW5fdHlwZSkodm9pZCkgY29uc3Q7
CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3QgKF9mdW5fdHlwZSBfX3BmKSA6IF9N
X2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgKF9f
cC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfZnVuX3R5cGUgX01fZjsKfTsKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVmX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9m
dW5jdGlvbjxfVHAsdm9pZD4gewogIHR5cGVkZWYgdm9pZCAoX1RwOjoqX2Z1bl90eXBlKSh2b2lk
KTsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3QgKF9mdW5fdHlwZSBfX3BmKSA6IF9N
X2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01f
ZikoKTsgfQpwcml2YXRlOgogIF9mdW5fdHlwZSBfTV9mOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1
bmN0aW9uPF9UcCx2b2lkPiB7CiAgdHlwZWRlZiB2b2lkIChfVHA6OipfZnVuX3R5cGUpKHZvaWQp
IGNvbnN0OwpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZfdCAoX2Z1bl90eXBl
IF9fcGYpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fcikg
Y29uc3QgeyAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX2Z1bl90eXBlIF9NX2Y7Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV90PHZvaWQsIF9U
cCwgX0FyZz4gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyx2b2lkPiB7CiAgdHlw
ZWRlZiB2b2lkIChfVHA6OipfZnVuX3R5cGUpKF9BcmcpOwpwdWJsaWM6CiAgZXhwbGljaXQgbWVt
X2Z1bjFfdCAoX2Z1bl90eXBlIF9fcGYpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3Io
KShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0
ZToKICBfZnVuX3R5cGUgX01fZjsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+
CmNsYXNzIGNvbnN0X21lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFy
eV9mdW5jdGlvbjxjb25zdCBfVHAqLF9Bcmcsdm9pZD4gewogIHR5cGVkZWYgdm9pZCAoX1RwOjoq
X2Z1bl90eXBlKShfQXJnKSBjb25zdDsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4x
X3QgKF9mdW5fdHlwZSBfX3BmKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29u
c3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZh
dGU6CiAgX2Z1bl90eXBlIF9NX2Y7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJn
PgpjbGFzcyBtZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5
X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKICB0eXBlZGVmIHZvaWQgKF9UcDo6Kl9mdW5fdHlw
ZSkoX0FyZyk7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdCAoX2Z1bl90eXBlIF9f
cGYpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gp
IGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9mdW5fdHlwZSBfTV9mOwp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFf
cmVmX3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0Fy
Zyx2b2lkPiB7CiAgdHlwZWRlZiB2b2lkIChfVHA6OipfZnVuX3R5cGUpKF9BcmcpIGNvbnN0Owpw
dWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3QgKF9mdW5fdHlwZSBfX3BmKSA6
IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9BcmcgX194
KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfZnVuX3R5cGUgX01fZjsK
fTsKIyA1NzMgIi4uL3N0bHBvcnQvc3RsL19mdW5jdGlvbi5oIgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jl
dCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9U
cDo6Kl9fZikoKSkgeyByZXR1cm4gbWVtX2Z1bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl90PF9SZXQsX1Rw
PiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSBjb25zdCkgeyByZXR1cm4gY29uc3RfbWVtX2Z1
bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpp
bmxpbmUgbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19m
KSgpKSB7IHJldHVybiBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9U
cD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KSB7IHJldHVybiBjb25zdF9t
ZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNs
YXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4KbWVt
X2Z1bihfUmV0IChfVHA6OipfX2YpKF9BcmcpKSB7IHJldHVybiBtZW1fZnVuMV90PF9SZXQsX1Rw
LF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9B
cmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+Cm1lbV9mdW4oX1JldCAo
X1RwOjoqX19mKShfQXJnKSBjb25zdCkgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9U
cCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBf
QXJnPgppbmxpbmUgbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4KbWVtX2Z1bl9yZWYoX1Jl
dCAoX1RwOjoqX19mKShfQXJnKSkgeyByZXR1cm4gbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0Fy
Zz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4K
aW5saW5lIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+Cm1lbV9mdW5fcmVmKF9S
ZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90
PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf
VHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+Cm1lbV9mdW4x
KF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpIHsgcmV0dXJuIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0Fy
Zz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4K
aW5saW5lIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4KbWVtX2Z1bjEoX1JldCAoX1Rw
OjoqX19mKShfQXJnKSBjb25zdCkgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxf
QXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJn
PgppbmxpbmUgbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4KbWVtX2Z1bjFfcmVmKF9SZXQg
KF9UcDo6Kl9fZikoX0FyZykpIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+
KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+Cmlu
bGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuMV9yZWYoX1Jl
dCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfcmVmX3Q8
X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKCgoKCn0KIyAzNiAiLi4vc3RscG9ydC9zdGwvX3N0cmlu
Zy5oIiAyCgoKIyAxICIuLi9zdGxwb3J0L3N0bC9fY3RyYWl0c19mbnMuaCIgMQojIDI4ICIuLi9z
dGxwb3J0L3N0bC9fY3RyYWl0c19mbnMuaCIKbmFtZXNwYWNlIF9TVEwgewoKdGVtcGxhdGUgPGNs
YXNzIF9UcmFpdHM+CnN0cnVjdCBfRXFfdHJhaXRzCiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9u
PHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZW5hbWUgX1RyYWl0czo6Y2hhcl90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlw
ZSYgX194LAogICAgICAgICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfVHJhaXRzOjpjaGFyX3R5
cGUmIF9feSkgY29uc3QKICAgIHsgcmV0dXJuIF9UcmFpdHM6OmVxKF9feCwgX195KTsgfQp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9UcmFpdHM+CnN0cnVjdCBfRXFfY2hhcl9ib3VuZAogIDogcHVibGlj
IHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZSwgYm9vbD4KewogIHR5
cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZSBfX3ZhbDsKICBfRXFfY2hhcl9ib3VuZCh0eXBlbmFt
ZSBfVHJhaXRzOjpjaGFyX3R5cGUgX19jKSA6IF9fdmFsKF9fYykge30KICBib29sIG9wZXJhdG9y
KCkoY29uc3QgdHlwZW5hbWUgX1RyYWl0czo6Y2hhcl90eXBlJiBfX3gpIGNvbnN0CiAgICB7IHJl
dHVybiBfVHJhaXRzOjplcShfX3gsIF9fdmFsKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcmFp
dHM+CnN0cnVjdCBfTmVxX2NoYXJfYm91bmQKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBl
bmFtZSBfVHJhaXRzOjpjaGFyX3R5cGUsIGJvb2w+CnsKICB0eXBlbmFtZSBfVHJhaXRzOjpjaGFy
X3R5cGUgX192YWw7CiAgX05lcV9jaGFyX2JvdW5kKHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlw
ZSBfX2MpIDogX192YWwoX19jKSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBf
VHJhaXRzOjpjaGFyX3R5cGUmIF9feCkgY29uc3QKICAgIHsgcmV0dXJuICFfVHJhaXRzOjplcShf
X3gsIF9fdmFsKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcmFpdHM+CnN0cnVjdCBfRXFfaW50
X2JvdW5kCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1RyYWl0czo6Y2hhcl90
eXBlLCBib29sPgp7CiAgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgX192YWw7CgogIF9FcV9p
bnRfYm91bmQodHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgX19jKSA6IF9fdmFsKF9fYykge30K
ICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX1RyYWl0czo6Y2hhcl90eXBlJiBfX3gp
IGNvbnN0CiAgICB7IHJldHVybiBfVHJhaXRzOjplcV9pbnRfdHlwZShfVHJhaXRzOjp0b19pbnRf
dHlwZShfX3gpLCBfX3ZhbCk7IH0KfTsKIyA4NSAiLi4vc3RscG9ydC9zdGwvX2N0cmFpdHNfZm5z
LmgiCn0KIyAzOSAiLi4vc3RscG9ydC9zdGwvX3N0cmluZy5oIiAyCiMgNzkgIi4uL3N0bHBvcnQv
c3RsL19zdHJpbmcuaCIKbmFtZXNwYWNlIF9TVEwgewoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9U
cmFpdHM+IHN0cnVjdCBfTm90X3dpdGhpbl90cmFpdHMKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlv
bjx0eXBlbmFtZSBfVHJhaXRzOjpjaGFyX3R5cGUsIGJvb2w+IHsKICB0eXBlZGVmIHR5cGVuYW1l
IF9UcmFpdHM6OmNoYXJfdHlwZSBfQ2hhclQ7CiAgY29uc3QgX0NoYXJUKiBfTV9maXJzdDsKICBj
b25zdCBfQ2hhclQqIF9NX2xhc3Q7CgogIF9Ob3Rfd2l0aGluX3RyYWl0cyhjb25zdCB0eXBlbmFt
ZSBfVHJhaXRzOjpjaGFyX3R5cGUqIF9fZiwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHlw
ZW5hbWUgX1RyYWl0czo6Y2hhcl90eXBlKiBfX2wpCiAgICA6IF9NX2ZpcnN0KF9fZiksIF9NX2xh
c3QoX19sKSB7fQoKICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX1RyYWl0czo6Y2hh
cl90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBmaW5kX2lmKChfQ2hhclQqKV9NX2ZpcnN0
LCAoX0NoYXJUKilfTV9sYXN0LAogICAgICAgICAgICAgICAgICAgX0VxX2NoYXJfYm91bmQ8X1Ry
YWl0cz4oX194KSkgPT0gKF9DaGFyVCopX01fbGFzdDsKICB9Cn07CiMgMTE0ICIuLi9zdGxwb3J0
L3N0bC9fc3RyaW5nLmgiCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gY2xhc3Mg
X1N0cmluZ19iYXNlIHsKcHVibGljOgogCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRz
PF9UcCwgX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgX1RwKiBfTV9z
dGFydDsKICBfVHAqIF9NX2ZpbmlzaDsKICBfU1RMUF9hbGxvY19wcm94eTxfVHAqLCBfVHAsIGFs
bG9jYXRvcl90eXBlPiBfTV9lbmRfb2Zfc3RvcmFnZTsKCiAgdm9pZCBfTV9hbGxvY2F0ZV9ibG9j
ayhzaXplX3QpOwogIHZvaWQgX01fZGVhbGxvY2F0ZV9ibG9jaygpCiAgICB7IF9NX2VuZF9vZl9z
dG9yYWdlLmRlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlLl9NX2RhdGEgLSBf
TV9zdGFydCk7IH0KCiAgc2l6ZV90IG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gKHNpemVfdCgt
MSkgLyBzaXplb2YoX1RwKSkgLSAxOyB9CgogIF9TdHJpbmdfYmFzZShjb25zdCBhbGxvY2F0b3Jf
dHlwZSYgX19hKQogICAgOiBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRfb2Zfc3Rv
cmFnZShfX2EsIChfVHAqKTApIHt9CgogIF9TdHJpbmdfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlw
ZSYgX19hLCBzaXplX3QgX19uKQogICAgOiBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9l
bmRfb2Zfc3RvcmFnZShfX2EsIChfVHAqKTApCiAgICB7IF9NX2FsbG9jYXRlX2Jsb2NrKF9fbik7
IH0KCiAgfl9TdHJpbmdfYmFzZSgpIHsgX01fZGVhbGxvY2F0ZV9ibG9jaygpOyB9CgogIHZvaWQg
X01fdGhyb3dfbGVuZ3RoX2Vycm9yKCkgY29uc3Q7CiAgdm9pZCBfTV90aHJvd19vdXRfb2ZfcmFu
Z2UoKSBjb25zdDsKfTsKIyAxNjQgIi4uL3N0bHBvcnQvc3RsL19zdHJpbmcuaCIKc3RydWN0IF9T
dHJpbmdfcmVzZXJ2ZV90IHt9OwoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0
cywgY2xhc3MgX0FsbG9jPiBjbGFzcyBiYXNpY19zdHJpbmcgOiBwcm90ZWN0ZWQgX1N0cmluZ19i
YXNlPF9DaGFyVCxfQWxsb2M+IHsKcHJpdmF0ZToKICB0eXBlZGVmIF9TdHJpbmdfYmFzZTxfQ2hh
clQsX0FsbG9jPiBfQmFzZTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4gX1NlbGY7CgoKICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9DaGFyVD46
Ol9JbnRlZ3JhbCBfQ2hhcl9Jc19JbnRlZ3JhbDsKcHVibGljOgogIHR5cGVkZWYgX0NoYXJUIHZh
bHVlX3R5cGU7CiAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKICB0eXBlZGVmIHZhbHVl
X3R5cGUqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVy
OwogIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgdmFsdWVf
dHlwZSYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBl
ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0
ZXJhdG9yX3RhZyBfSXRlcmF0b3JfY2F0ZWdvcnk7CgogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlw
ZSogY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBpdGVyYXRvcjsKCiAgdHlw
ZWRlZiBfU1RMOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNl
X2l0ZXJhdG9yOyB0eXBlZGVmIF9TVEw6OnJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVy
c2VfaXRlcmF0b3I7CgoKCgogIHN0YXRpYyBjb25zdCBzaXplX3QgbnBvcyA9IH4oc2l6ZV90KTA7
CgoKICB0eXBlZGVmIF9TdHJpbmdfcmVzZXJ2ZV90IF9SZXNlcnZlX3Q7CiMgMjA5ICIuLi9zdGxw
b3J0L3N0bC9fc3RyaW5nLmgiCnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9TdHJpbmdfYmFz
ZTxfQ2hhclQsX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogIGFsbG9j
YXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7CiAgICByZXR1cm4gKGNvbnN0IGFsbG9j
YXRvcl90eXBlJil0aGlzLT5fTV9lbmRfb2Zfc3RvcmFnZTsKICB9CgogIGJhc2ljX3N0cmluZygp
OwoKICBleHBsaWNpdCBiYXNpY19zdHJpbmcoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAg
IDogX1N0cmluZ19iYXNlPF9DaGFyVCxfQWxsb2M+KF9fYSwgOCkgewogICAgX01fdGVybWluYXRl
X3N0cmluZygpOwogIH0KCiAgYmFzaWNfc3RyaW5nKF9SZXNlcnZlX3QsIHNpemVfdCBfX24sCiAg
ICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgp
KQogICAgOiBfU3RyaW5nX2Jhc2U8X0NoYXJULF9BbGxvYz4oX19hLCBfX24gKyAxKSB7CiAgICBf
TV90ZXJtaW5hdGVfc3RyaW5nKCk7CiAgfQoKICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYpOwoKICBiYXNpY19zdHJpbmcoY29uc3QgX1Nl
bGYmIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uID0gbnBvcywKICAgICAgICAg
ICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6
IF9TdHJpbmdfYmFzZTxfQ2hhclQsX0FsbG9jPihfX2EpIHsKICAgIGlmIChfX3BvcyA+IF9fcy5z
aXplKCkpCiAgICAgIHRoaXMtPl9NX3Rocm93X291dF9vZl9yYW5nZSgpOwogICAgZWxzZQogICAg
ICBfTV9yYW5nZV9pbml0aWFsaXplKF9fcy5fTV9zdGFydCArIF9fcG9zLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fcy5fTV9zdGFydCArIF9fcG9zICsgKG1pbikgKF9fbiwgX19zLnNpemUo
KSAtIF9fcG9zKSk7CiAgfQoKICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf
dHlwZSBfX24sCiAgICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxv
Y2F0b3JfdHlwZSgpKQogICAgOiBfU3RyaW5nX2Jhc2U8X0NoYXJULF9BbGxvYz4oX19hKQogICAg
ewogICAgIAogICAgICBfTV9yYW5nZV9pbml0aWFsaXplKF9fcywgX19zICsgX19uKTsKICAgIH0K
CiAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLAogICAgICAgICAgICAgICBjb25zdCBh
bGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSk7CgogIGJhc2ljX3N0cmluZyhz
aXplX3R5cGUgX19uLCBfQ2hhclQgX19jLAogICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3Jf
dHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX1N0cmluZ19iYXNlPF9DaGFyVCxf
QWxsb2M+KF9fYSwgX19uICsgMSkKICB7CiAgICB0aGlzLT5fTV9maW5pc2ggPSB1bmluaXRpYWxp
emVkX2ZpbGxfbih0aGlzLT5fTV9zdGFydCwgX19uLCBfX2MpOwogICAgX01fdGVybWluYXRlX3N0
cmluZygpOwogIH0KIyAyNzEgIi4uL3N0bHBvcnQvc3RsL19zdHJpbmcuaCIKICB0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcmF0b3I+IGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyYXRvciBfX2YsIF9J
bnB1dEl0ZXJhdG9yIF9fbCwKICAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUgJiBf
X2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfU3RyaW5nX2Jhc2U8X0NoYXJULF9BbGxvYz4o
X19hKQogIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+
OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfX2YsIF9f
bCwgX0ludGVncmFsKCkpOwogIH0KIyAzMDIgIi4uL3N0bHBvcnQvc3RsL19zdHJpbmcuaCIKICB+
YmFzaWNfc3RyaW5nKCkgeyBfRGVzdHJveSh0aGlzLT5fTV9zdGFydCwgdGhpcy0+X01fZmluaXNo
ICsgMSk7IH0KCiAgX1NlbGYmIG9wZXJhdG9yPShjb25zdCBfU2VsZiYgX19zKSB7CiAgICBpZiAo
Jl9fcyAhPSB0aGlzKQogICAgICBhc3NpZ24oX19zLl9NX3N0YXJ0LCBfX3MuX01fZmluaXNoKTsK
ICAgIHJldHVybiAqdGhpczsKICB9CgogIF9TZWxmJiBvcGVyYXRvcj0oY29uc3QgX0NoYXJUKiBf
X3MpIHsKICAgCiAgICByZXR1cm4gYXNzaWduKF9fcywgX19zICsgdHJhaXRzX3R5cGU6Omxlbmd0
aChfX3MpKTsKICB9CgogIF9TZWxmJiBvcGVyYXRvcj0oX0NoYXJUIF9fYykKICAgIHsgcmV0dXJu
IGFzc2lnbihzdGF0aWNfY2FzdDxzaXplX3R5cGU+KDEpLCBfX2MpOyB9CgogIHN0YXRpYyBfQ2hh
clQgX01fbnVsbCgpIHsKCiAgICByZXR1cm4gX0NoYXJUKCk7CgoKCiAgfQoKcHJpdmF0ZToKCgog
IHZvaWQgX01fY29uc3RydWN0X251bGxfYXV4KF9DaGFyVCogX19wLCBjb25zdCBfX2ZhbHNlX3R5
cGUmKSB7CiAgICBfQ29uc3RydWN0KF9fcCk7CiAgfQogIHZvaWQgX01fY29uc3RydWN0X251bGxf
YXV4KF9DaGFyVCogX19wLCBjb25zdCBfX3RydWVfdHlwZSYpIHsKICAgICpfX3AgPSAwOwogIH0K
CiAgdm9pZCBfTV9jb25zdHJ1Y3RfbnVsbChfQ2hhclQqIF9fcCkgewogICAgX01fY29uc3RydWN0
X251bGxfYXV4KF9fcCwgX0NoYXJfSXNfSW50ZWdyYWwoKSk7CiAgfQoKcHJpdmF0ZToKCgoKICB2
b2lkIF9NX3Rlcm1pbmF0ZV9zdHJpbmdfYXV4KGNvbnN0IF9fZmFsc2VfdHlwZSYpIHsKICAgIHRy
eSB7CiAgICAgIF9NX2NvbnN0cnVjdF9udWxsKHRoaXMtPl9NX2ZpbmlzaCk7CiAgICB9CiAgICBj
YXRjaCguLi4pIHsgX0Rlc3Ryb3kodGhpcy0+X01fc3RhcnQsIHRoaXMtPl9NX2ZpbmlzaCk7IHRo
cm93OyB9OwogIH0KCiAgdm9pZCBfTV90ZXJtaW5hdGVfc3RyaW5nX2F1eChjb25zdCBfX3RydWVf
dHlwZSYpIHsKICAgICoodGhpcy0+X01fZmluaXNoKT0wOwogIH0KCiAgdm9pZCBfTV90ZXJtaW5h
dGVfc3RyaW5nKCkgewogICAgX01fdGVybWluYXRlX3N0cmluZ19hdXgoX0NoYXJfSXNfSW50ZWdy
YWwoKSk7CiAgfQoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPiB2b2lkIF9NX3Jhbmdl
X2luaXRpYWxpemUoX0lucHV0SXRlciBfX2YsIF9JbnB1dEl0ZXIgX19sLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBpbnB1dF9pdGVyYXRvcl90YWcgJikgewogICAgdGhpcy0+X01f
YWxsb2NhdGVfYmxvY2soOCk7CiAgICBfTV9jb25zdHJ1Y3RfbnVsbCh0aGlzLT5fTV9maW5pc2gp
OwogICAgdHJ5IHsKICAgICAgYXBwZW5kKF9fZiwgX19sKTsKICAgIH0KICAgIGNhdGNoKC4uLikg
eyBfRGVzdHJveSh0aGlzLT5fTV9zdGFydCwgdGhpcy0+X01fZmluaXNoICsgMSk7IHRocm93OyB9
OwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4gdm9pZCBfTV9yYW5nZV9pbml0
aWFsaXplKF9Gb3J3YXJkSXRlciBfX2YsIF9Gb3J3YXJkSXRlciBfX2wsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGZvcndhcmRfaXRlcmF0b3JfdGFnICYpIHsKICAgIGRpZmZlcmVu
Y2VfdHlwZSBfX24gPSBkaXN0YW5jZShfX2YsIF9fbCk7CiAgICB0aGlzLT5fTV9hbGxvY2F0ZV9i
bG9jayhfX24gKyAxKTsKICAgIHRoaXMtPl9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShf
X2YsIF9fbCwgdGhpcy0+X01fc3RhcnQpOwogICAgX01fdGVybWluYXRlX3N0cmluZygpOwogIH0K
CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+IHZvaWQgX01fcmFuZ2VfaW5pdGlhbGl6ZShf
SW5wdXRJdGVyIF9fZiwgX0lucHV0SXRlciBfX2wpIHsKICAgIF9NX3JhbmdlX2luaXRpYWxpemUo
X19mLCBfX2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czwgX0lucHV0SXRlciA+OjppdGVyYXRv
cl9jYXRlZ29yeSgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4gdm9pZCBfTV9p
bml0aWFsaXplX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194LCBjb25zdCBfX3Ry
dWVfdHlwZSYpIHsKICAgIHRoaXMtPl9NX2FsbG9jYXRlX2Jsb2NrKF9fbiArIDEpOwogICAgdGhp
cy0+X01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24odGhpcy0+X01fc3RhcnQsIF9fbiwg
X194KTsKICAgIF9NX3Rlcm1pbmF0ZV9zdHJpbmcoKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyPiB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0lucHV0SXRlciBfX2YsIF9J
bnB1dEl0ZXIgX19sLCBjb25zdCBfX2ZhbHNlX3R5cGUmKSB7CiAgICAgX01fcmFuZ2VfaW5pdGlh
bGl6ZShfX2YsIF9fbCk7CiAgfQojIDQwNCAiLi4vc3RscG9ydC9zdGwvX3N0cmluZy5oIgpwdWJs
aWM6CiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiB0aGlzLT5fTV9zdGFydDsgfQogIGl0ZXJh
dG9yIGVuZCgpIHsgcmV0dXJuIHRoaXMtPl9NX2ZpbmlzaDsgfQogIGNvbnN0X2l0ZXJhdG9yIGJl
Z2luKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+X01fc3RhcnQ7IH0KICBjb25zdF9pdGVyYXRvciBl
bmQoKSBjb25zdCB7IHJldHVybiB0aGlzLT5fTV9maW5pc2g7IH0KCiAgcmV2ZXJzZV9pdGVyYXRv
ciByYmVnaW4oKQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5fTV9maW5pc2gp
OyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0
b3IodGhpcy0+X01fc3RhcnQpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBj
b25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5fTV9maW5pc2gp
OyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QKICAgIHsgcmV0dXJuIGNv
bnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+X01fc3RhcnQpOyB9CgpwdWJsaWM6CiAgc2l6ZV90
eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiB0aGlzLT5fTV9maW5pc2ggLSB0aGlzLT5fTV9zdGFy
dDsgfQogIHNpemVfdHlwZSBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBzaXplKCk7IH0KCiAgc2l6
ZV90IG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6Om1heF9zaXplKCk7IH0KCgogIHZv
aWQgcmVzaXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpIHsKICAgIGlmIChfX24gPD0gc2l6
ZSgpKQogICAgICBlcmFzZShiZWdpbigpICsgX19uLCBlbmQoKSk7CiAgICBlbHNlCiAgICAgIGFw
cGVuZChfX24gLSBzaXplKCksIF9fYyk7CiAgfQogIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX24p
IHsgcmVzaXplKF9fbiwgX01fbnVsbCgpKTsgfQoKICB2b2lkIHJlc2VydmUoc2l6ZV90eXBlID0g
MCk7CgogIHNpemVfdHlwZSBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuICh0aGlzLT5fTV9lbmRf
b2Zfc3RvcmFnZS5fTV9kYXRhIC0gdGhpcy0+X01fc3RhcnQpIC0gMTsgfQoKICB2b2lkIGNsZWFy
KCkgewogICAgaWYgKCFlbXB0eSgpKSB7CiAgICAgIF9UcmFpdHM6OmFzc2lnbigqKHRoaXMtPl9N
X3N0YXJ0KSwgX01fbnVsbCgpKTsKICAgICAgX0Rlc3Ryb3kodGhpcy0+X01fc3RhcnQrMSwgdGhp
cy0+X01fZmluaXNoKzEpOwogICAgICB0aGlzLT5fTV9maW5pc2ggPSB0aGlzLT5fTV9zdGFydDsK
ICAgIH0KICB9CgogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiB0aGlzLT5fTV9zdGFydCA9
PSB0aGlzLT5fTV9maW5pc2g7IH0KCnB1YmxpYzoKCiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9y
W10oc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsgcmV0dXJuICoodGhpcy0+X01fc3RhcnQgKyBf
X24pOyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikKICAgIHsgcmV0dXJu
ICoodGhpcy0+X01fc3RhcnQgKyBfX24pOyB9CgogIGNvbnN0X3JlZmVyZW5jZSBhdChzaXplX3R5
cGUgX19uKSBjb25zdCB7CiAgICBpZiAoX19uID49IHNpemUoKSkKICAgICAgdGhpcy0+X01fdGhy
b3dfb3V0X29mX3JhbmdlKCk7CiAgICByZXR1cm4gKih0aGlzLT5fTV9zdGFydCArIF9fbik7CiAg
fQoKICByZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikgewogICAgaWYgKF9fbiA+PSBzaXplKCkp
CiAgICAgIHRoaXMtPl9NX3Rocm93X291dF9vZl9yYW5nZSgpOwogICAgcmV0dXJuICoodGhpcy0+
X01fc3RhcnQgKyBfX24pOwogIH0KCnB1YmxpYzoKCiAgX1NlbGYmIG9wZXJhdG9yKz0oY29uc3Qg
X1NlbGYmIF9fcykgeyByZXR1cm4gYXBwZW5kKF9fcyk7IH0KICBfU2VsZiYgb3BlcmF0b3IrPShj
b25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gYXBwZW5kKF9fcyk7IH0KICBfU2VsZiYgb3BlcmF0
b3IrPShfQ2hhclQgX19jKSB7IHB1c2hfYmFjayhfX2MpOyByZXR1cm4gKnRoaXM7IH0KCiAgX1Nl
bGYmIGFwcGVuZChjb25zdCBfU2VsZiYgX19zKQogICAgeyByZXR1cm4gYXBwZW5kKF9fcy5fTV9z
dGFydCwgX19zLl9NX2ZpbmlzaCk7IH0KCiAgX1NlbGYmIGFwcGVuZChjb25zdCBfU2VsZiYgX19z
LAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikK
ICB7CiAgICBpZiAoX19wb3MgPiBfX3Muc2l6ZSgpKQogICAgICB0aGlzLT5fTV90aHJvd19vdXRf
b2ZfcmFuZ2UoKTsKICAgIHJldHVybiBhcHBlbmQoX19zLl9NX3N0YXJ0ICsgX19wb3MsCiAgICAg
ICAgICAgICAgICAgIF9fcy5fTV9zdGFydCArIF9fcG9zICsgKG1pbikgKF9fbiwgX19zLnNpemUo
KSAtIF9fcG9zKSk7CiAgfQoKICBfU2VsZiYgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXpl
X3R5cGUgX19uKQogICAgeyByZXR1cm4gYXBwZW5kKF9fcywgX19zK19fbik7IH0KICBfU2VsZiYg
YXBwZW5kKGNvbnN0IF9DaGFyVCogX19zKQogICAgeyByZXR1cm4gYXBwZW5kKF9fcywgX19zICsg
dHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQogIF9TZWxmJiBhcHBlbmQoc2l6ZV90eXBlIF9f
biwgX0NoYXJUIF9fYyk7CgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4gX1NlbGYm
IGFwcGVuZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0KSB7CiAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXI+OjpfSW50ZWdyYWwgX0ludGVncmFs
OwogICAgcmV0dXJuIF9NX2FwcGVuZF9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3Jh
bCgpKTsKICB9CgoKCgoKCgogIHZvaWQgcHVzaF9iYWNrKF9DaGFyVCBfX2MpIHsKICAgIGlmICh0
aGlzLT5fTV9maW5pc2ggKyAxID09IHRoaXMtPl9NX2VuZF9vZl9zdG9yYWdlLl9NX2RhdGEpCiAg
ICAgIHJlc2VydmUoc2l6ZSgpICsgKG1heCkoc2l6ZSgpLCBzdGF0aWNfY2FzdDxzaXplX3R5cGU+
KDEpKSk7CiAgICBfTV9jb25zdHJ1Y3RfbnVsbCh0aGlzLT5fTV9maW5pc2ggKyAxKTsKICAgIF9U
cmFpdHM6OmFzc2lnbigqKHRoaXMtPl9NX2ZpbmlzaCksIF9fYyk7CiAgICArK3RoaXMtPl9NX2Zp
bmlzaDsKICB9CgogIHZvaWQgcG9wX2JhY2soKSB7CiAgICBfVHJhaXRzOjphc3NpZ24oKih0aGlz
LT5fTV9maW5pc2ggLSAxKSwgX01fbnVsbCgpKTsKICAgIF9EZXN0cm95KHRoaXMtPl9NX2Zpbmlz
aCk7CiAgICAtLXRoaXMtPl9NX2ZpbmlzaDsKICB9Cgpwcml2YXRlOgoKCgogIHRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyPiBfU2VsZiYgYXBwZW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsIGNvbnN0IGlucHV0X2l0ZXJhdG9yX3RhZyAmKQogIHsKICAgICAgICAgIGZv
ciAoIDsgX19maXJzdCAhPSBfX2xhc3QgOyArK19fZmlyc3QpCiAgICAgICAgICAgIHB1c2hfYmFj
aygqX19maXJzdCk7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKICB0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPiBfU2VsZiYgYXBwZW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcndh
cmRfaXRlcmF0b3JfdGFnICYpIHsKICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAg
ICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgICAgICAgICAgZGlm
ZmVyZW5jZV90eXBlIF9fbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICAg
IGlmIChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fbikgPiBtYXhfc2l6ZSgpIHx8IF9fb2xkX3Np
emUgPiBtYXhfc2l6ZSgpIC0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX24pKQogICAgICAgICAg
ICAgIHRoaXMtPl9NX3Rocm93X2xlbmd0aF9lcnJvcigpOwogICAgICAgICAgICBpZiAoX19vbGRf
c2l6ZSArIF9fbiA+IGNhcGFjaXR5KCkpIHsKICAgICAgICAgICAgICBjb25zdCBzaXplX3R5cGUg
X19sZW4gPSBfX29sZF9zaXplICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KG1heCkoX19vbGRfc2l6ZSwgc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX24pKSArIDE7CiAgICAg
ICAgICAgICAgcG9pbnRlciBfX25ld19zdGFydCA9IHRoaXMtPl9NX2VuZF9vZl9zdG9yYWdlLmFs
bG9jYXRlKF9fbGVuKTsKICAgICAgICAgICAgICBwb2ludGVyIF9fbmV3X2ZpbmlzaCA9IF9fbmV3
X3N0YXJ0OwogICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBfX25ld19maW5pc2gg
PSB1bmluaXRpYWxpemVkX2NvcHkodGhpcy0+X01fc3RhcnQsIHRoaXMtPl9NX2ZpbmlzaCwgX19u
ZXdfc3RhcnQpOwogICAgICAgICAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9j
b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19uZXdfZmluaXNoKTsKICAgICAgICAgICAgICAgIF9NX2Nv
bnN0cnVjdF9udWxsKF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
IGNhdGNoKC4uLikgeyAoX0Rlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgdGhpcy0+
X01fZW5kX29mX3N0b3JhZ2UuZGVhbGxvY2F0ZShfX25ld19zdGFydCxfX2xlbikpOyB0aHJvdzsg
fTsKCiAgICAgICAgICAgICAgX0Rlc3Ryb3kodGhpcy0+X01fc3RhcnQsIHRoaXMtPl9NX2Zpbmlz
aCArIDEpOwogICAgICAgICAgICAgIHRoaXMtPl9NX2RlYWxsb2NhdGVfYmxvY2soKTsKICAgICAg
ICAgICAgICB0aGlzLT5fTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgICAgICAgICAgIHRoaXMt
Pl9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgICAgICAgICAgICB0aGlzLT5fTV9lbmRfb2Zf
c3RvcmFnZS5fTV9kYXRhID0gX19uZXdfc3RhcnQgKyBfX2xlbjsKICAgICAgICAgICAgfQogICAg
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19mMSA9IF9fZmlyc3Q7
CiAgICAgICAgICAgICAgKytfX2YxOwogICAgICAgICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShf
X2YxLCBfX2xhc3QsIHRoaXMtPl9NX2ZpbmlzaCArIDEpOwogICAgICAgICAgICAgIHRyeSB7CiAg
ICAgICAgICAgICAgICBfTV9jb25zdHJ1Y3RfbnVsbCh0aGlzLT5fTV9maW5pc2ggKyBfX24pOwog
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3kodGhpcy0+
X01fZmluaXNoICsgMSwgdGhpcy0+X01fZmluaXNoICsgX19uKTsgdGhyb3c7IH07CiAgICAgICAg
ICAgICAgX1RyYWl0czo6YXNzaWduKCplbmQoKSwgKl9fZmlyc3QpOwogICAgICAgICAgICAgIHRo
aXMtPl9NX2ZpbmlzaCArPSBfX247CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAg
IHJldHVybiAqdGhpczsKICAgICAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4gX1Nl
bGYmIF9NX2FwcGVuZF9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwgY29uc3Qg
X190cnVlX3R5cGUmKSB7CiAgICByZXR1cm4gYXBwZW5kKChzaXplX3R5cGUpIF9fbiwgKF9DaGFy
VCkgX194KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPiBfU2VsZiYgX01fYXBw
ZW5kX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19mLCBfSW5wdXRJdGVyIF9fbCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2ZhbHNlX3R5cGUmKSB7CiAgICByZXR1cm4g
YXBwZW5kKF9fZiwgX19sLCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8IF9JbnB1dEl0ZXIgPjo6
aXRlcmF0b3JfY2F0ZWdvcnkoKSk7CiAgfQoKCgpwdWJsaWM6CgogIF9TZWxmJiBhc3NpZ24oY29u
c3QgX1NlbGYmIF9fcykKICAgIHsgcmV0dXJuIGFzc2lnbihfX3MuX01fc3RhcnQsIF9fcy5fTV9m
aW5pc2gpOyB9CgogIF9TZWxmJiBhc3NpZ24oY29uc3QgX1NlbGYmIF9fcywKICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIHsKICAgIGlmIChfX3Bv
cyA+IF9fcy5zaXplKCkpCiAgICAgIHRoaXMtPl9NX3Rocm93X291dF9vZl9yYW5nZSgpOwogICAg
cmV0dXJuIGFzc2lnbihfX3MuX01fc3RhcnQgKyBfX3BvcywKICAgICAgICAgICAgICAgICAgX19z
Ll9NX3N0YXJ0ICsgX19wb3MgKyAobWluKSAoX19uLCBfX3Muc2l6ZSgpIC0gX19wb3MpKTsKICB9
CgogIF9TZWxmJiBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICB7
IHJldHVybiBhc3NpZ24oX19zLCBfX3MgKyBfX24pOyB9CgogIF9TZWxmJiBhc3NpZ24oY29uc3Qg
X0NoYXJUKiBfX3MpCiAgICB7IHJldHVybiBhc3NpZ24oX19zLCBfX3MgKyBfVHJhaXRzOjpsZW5n
dGgoX19zKSk7IH0KCiAgX1NlbGYmIGFzc2lnbihzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsK
CgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPiBfU2VsZiYgYXNzaWduKF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lz
X2ludGVnZXI8X0lucHV0SXRlcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICByZXR1cm4gX01f
YXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KCgoKCgpw
cml2YXRlOgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4gX1NlbGYmIF9NX2Fzc2lnbl9k
aXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwgY29uc3QgX190cnVlX3R5cGUmKSB7
CiAgICByZXR1cm4gYXNzaWduKChzaXplX3R5cGUpIF9fbiwgKF9DaGFyVCkgX194KTsKICB9Cgog
IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPiBfU2VsZiYgX01fYXNzaWduX2Rpc3BhdGNoKF9J
bnB1dEl0ZXIgX19mLCBfSW5wdXRJdGVyIF9fbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBfX2ZhbHNlX3R5cGUmKSB7CiAgICAgICAgICBwb2ludGVyIF9fY3VyID0g
dGhpcy0+X01fc3RhcnQ7CiAgICAgICAgICB3aGlsZSAoX19mICE9IF9fbCAmJiBfX2N1ciAhPSB0
aGlzLT5fTV9maW5pc2gpIHsKICAgICAgICAgICAgX1RyYWl0czo6YXNzaWduKCpfX2N1ciwgKl9f
Zik7CiAgICAgICAgICAgICsrX19mOwogICAgICAgICAgICArK19fY3VyOwogICAgICAgICAgfQog
ICAgICAgICAgaWYgKF9fZiA9PSBfX2wpCiAgICAgICAgICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7
CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGFwcGVuZChfX2YsIF9fbCk7CiAgICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAgICAgICAgfQoKCgpwdWJsaWM6CgogIF9TZWxmJiBpbnNlcnQoc2l6ZV90
eXBlIF9fcG9zLCBjb25zdCBfU2VsZiYgX19zKSB7CiAgICBpZiAoX19wb3MgPiBzaXplKCkpCiAg
ICAgIHRoaXMtPl9NX3Rocm93X291dF9vZl9yYW5nZSgpOwogICAgaWYgKHNpemUoKSA+IG1heF9z
aXplKCkgLSBfX3Muc2l6ZSgpKQogICAgICB0aGlzLT5fTV90aHJvd19sZW5ndGhfZXJyb3IoKTsK
ICAgIGluc2VydChiZWdpbigpICsgX19wb3MsIF9fcy5fTV9zdGFydCwgX19zLl9NX2ZpbmlzaCk7
CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBfU2VsZiYgaW5zZXJ0KHNpemVfdHlwZSBfX3Bvcywg
Y29uc3QgX1NlbGYmIF9fcywKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19iZWcs
IHNpemVfdHlwZSBfX24pIHsKICAgIGlmIChfX3BvcyA+IHNpemUoKSB8fCBfX2JlZyA+IF9fcy5z
aXplKCkpCiAgICAgIHRoaXMtPl9NX3Rocm93X291dF9vZl9yYW5nZSgpOwogICAgc2l6ZV90eXBl
IF9fbGVuID0gKG1pbikgKF9fbiwgX19zLnNpemUoKSAtIF9fYmVnKTsKICAgIGlmIChzaXplKCkg
PiBtYXhfc2l6ZSgpIC0gX19sZW4pCiAgICAgIHRoaXMtPl9NX3Rocm93X2xlbmd0aF9lcnJvcigp
OwogICAgaW5zZXJ0KGJlZ2luKCkgKyBfX3BvcywKICAgICAgICAgICBfX3MuX01fc3RhcnQgKyBf
X2JlZywgX19zLl9NX3N0YXJ0ICsgX19iZWcgKyBfX2xlbik7CiAgICByZXR1cm4gKnRoaXM7CiAg
fQoKICBfU2VsZiYgaW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MsIHNp
emVfdHlwZSBfX24pIHsKICAgCiAgICBpZiAoX19wb3MgPiBzaXplKCkpCiAgICAgIHRoaXMtPl9N
X3Rocm93X291dF9vZl9yYW5nZSgpOwogICAgaWYgKHNpemUoKSA+IG1heF9zaXplKCkgLSBfX24p
CiAgICAgIHRoaXMtPl9NX3Rocm93X2xlbmd0aF9lcnJvcigpOwogICAgaW5zZXJ0KGJlZ2luKCkg
KyBfX3BvcywgX19zLCBfX3MgKyBfX24pOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgX1NlbGYm
IGluc2VydChzaXplX3R5cGUgX19wb3MsIGNvbnN0IF9DaGFyVCogX19zKSB7CiAgIAogICAgaWYg
KF9fcG9zID4gc2l6ZSgpKQogICAgICB0aGlzLT5fTV90aHJvd19vdXRfb2ZfcmFuZ2UoKTsKICAg
IHNpemVfdHlwZSBfX2xlbiA9IF9UcmFpdHM6Omxlbmd0aChfX3MpOwogICAgaWYgKHNpemUoKSA+
IG1heF9zaXplKCkgLSBfX2xlbikKICAgICAgdGhpcy0+X01fdGhyb3dfbGVuZ3RoX2Vycm9yKCk7
CiAgICBpbnNlcnQodGhpcy0+X01fc3RhcnQgKyBfX3BvcywgX19zLCBfX3MgKyBfX2xlbik7CiAg
ICByZXR1cm4gKnRoaXM7CiAgfQoKICBfU2VsZiYgaW5zZXJ0KHNpemVfdHlwZSBfX3Bvcywgc2l6
ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykgewogICAgaWYgKF9fcG9zID4gc2l6ZSgpKQogICAgICB0
aGlzLT5fTV90aHJvd19vdXRfb2ZfcmFuZ2UoKTsKICAgIGlmIChzaXplKCkgPiBtYXhfc2l6ZSgp
IC0gX19uKQogICAgICB0aGlzLT5fTV90aHJvd19sZW5ndGhfZXJyb3IoKTsKICAgIGluc2VydChi
ZWdpbigpICsgX19wb3MsIF9fbiwgX19jKTsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGl0ZXJh
dG9yIGluc2VydChpdGVyYXRvciBfX3AsIF9DaGFyVCBfX2MpIHsKICAgCiAgICBpZiAoX19wID09
IGVuZCgpKSB7CiAgICAgIHB1c2hfYmFjayhfX2MpOwogICAgICByZXR1cm4gdGhpcy0+X01fZmlu
aXNoIC0gMTsKICAgIH0KICAgIGVsc2UKICAgICAgcmV0dXJuIF9NX2luc2VydF9hdXgoX19wLCBf
X2MpOwogIH0KCiAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wLCBzaXplX3QgX19uLCBfQ2hhclQg
X19jKTsKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPiB2b2lkIGluc2VydChpdGVy
YXRvciBfX3AsIF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QpIHsKICAgIHR5
cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcj46Ol9JbnRlZ3JhbCBfSW50ZWdy
YWw7CiAgICBfTV9pbnNlcnRfZGlzcGF0Y2goX19wLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3Jh
bCgpKTsKICB9CgoKCgoKCgpwcml2YXRlOgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
PiB2b2lkIGluc2VydChpdGVyYXRvciBfX3AsIF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgY29uc3QgaW5wdXRfaXRlcmF0b3JfdGFnICYpCiAgewog
ICAgICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSB7CiAgICAgICAg
ICAgIF9fcCA9IGluc2VydChfX3AsICpfX2ZpcnN0KTsKICAgICAgICAgICAgKytfX3A7CiAgICAg
ICAgICB9CiAgICAgICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPiB2b2lkIGlu
c2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICBjb25zdCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyAmKSB7
CiAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgZGlmZmVyZW5jZV90eXBlIF9fbiA9
IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmICh0aGlzLT5fTV9lbmRfb2Zfc3Rv
cmFnZS5fTV9kYXRhIC0gdGhpcy0+X01fZmluaXNoID49IF9fbiArIDEpIHsKICAgICAgICBjb25z
dCBkaWZmZXJlbmNlX3R5cGUgX19lbGVtc19hZnRlciA9IHRoaXMtPl9NX2ZpbmlzaCAtIF9fcG9z
aXRpb247CiAgICAgICAgcG9pbnRlciBfX29sZF9maW5pc2ggPSB0aGlzLT5fTV9maW5pc2g7CiAg
ICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIgPj0gX19uKSB7CiAgICAgICAgICB1bmluaXRpYWxpemVk
X2NvcHkoKHRoaXMtPl9NX2ZpbmlzaCAtIF9fbikgKyAxLCB0aGlzLT5fTV9maW5pc2ggKyAxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPl9NX2ZpbmlzaCArIDEpOwogICAgICAg
ICAgdGhpcy0+X01fZmluaXNoICs9IF9fbjsKICAgICAgICAgIF9UcmFpdHM6Om1vdmUoX19wb3Np
dGlvbiArIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgX19wb3NpdGlvbiwgKF9fZWxlbXNf
YWZ0ZXIgLSBfX24pICsgMSk7CiAgICAgICAgICBfTV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19w
b3NpdGlvbik7CiAgICAgICAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgX0Zvcndh
cmRJdGVyIF9fbWlkID0gX19maXJzdDsKICAgICAgICAgIGFkdmFuY2UoX19taWQsIF9fZWxlbXNf
YWZ0ZXIgKyAxKTsKICAgICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX21pZCwgX19sYXN0LCB0
aGlzLT5fTV9maW5pc2ggKyAxKTsKICAgICAgICAgIHRoaXMtPl9NX2ZpbmlzaCArPSBfX24gLSBf
X2VsZW1zX2FmdGVyOwogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgdW5p
bml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCArIDEsIHRoaXMtPl9NX2Zp
bmlzaCk7CiAgICAgICAgICAgICAgICAgIHRoaXMtPl9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVy
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY2F0Y2goLi4uKSB7IChfRGVzdHJv
eShfX29sZF9maW5pc2ggKyAxLCB0aGlzLT5fTV9maW5pc2gpLCB0aGlzLT5fTV9maW5pc2ggPSBf
X29sZF9maW5pc2gpOyB0aHJvdzsgfTsKCiAgICAgICAgICAgICAgICBfTV9jb3B5KF9fZmlyc3Qs
IF9fbWlkLCBfX3Bvc2l0aW9uKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAg
ICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICAgICAgY29uc3Qgc2l6
ZV90eXBlIF9fbGVuCiAgICAgICAgICA9IF9fb2xkX3NpemUgKyAobWF4KShfX29sZF9zaXplLCBz
dGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fbikpICsgMTsKICAgICAgICAgICAgICBwb2ludGVyIF9f
bmV3X3N0YXJ0ID0gdGhpcy0+X01fZW5kX29mX3N0b3JhZ2UuYWxsb2NhdGUoX19sZW4pOwogICAg
ICAgICAgICAgIHBvaW50ZXIgX19uZXdfZmluaXNoID0gX19uZXdfc3RhcnQ7CiAgICAgICAgICAg
ICAgdHJ5IHsKICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29w
eSh0aGlzLT5fTV9zdGFydCwgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICAgICAgICAg
ICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19u
ZXdfZmluaXNoKTsKICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaAogICAgICAgICAgICAgICAg
ICA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCB0aGlzLT5fTV9maW5pc2gsIF9fbmV3
X2ZpbmlzaCk7CiAgICAgICAgICAgICAgICBfTV9jb25zdHJ1Y3RfbnVsbChfX25ld19maW5pc2gp
OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjYXRjaCguLi4pIHsgKF9EZXN0cm95KF9f
bmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIHRoaXMtPl9NX2VuZF9vZl9zdG9yYWdlLmRlYWxsb2Nh
dGUoX19uZXdfc3RhcnQsX19sZW4pKTsgdGhyb3c7IH07CgogICAgICAgICAgICAgIF9EZXN0cm95
KHRoaXMtPl9NX3N0YXJ0LCB0aGlzLT5fTV9maW5pc2ggKyAxKTsKICAgICAgICAgICAgICB0aGlz
LT5fTV9kZWFsbG9jYXRlX2Jsb2NrKCk7CiAgICAgICAgICAgICAgdGhpcy0+X01fc3RhcnQgPSBf
X25ld19zdGFydDsKICAgICAgICAgICAgICB0aGlzLT5fTV9maW5pc2ggPSBfX25ld19maW5pc2g7
CiAgICAgICAgICAgICAgdGhpcy0+X01fZW5kX29mX3N0b3JhZ2UuX01fZGF0YSA9IF9fbmV3X3N0
YXJ0ICsgX19sZW47CiAgICAgICAgICAgIH0KICAgIH0KICB9CgogIHRlbXBsYXRlIDxjbGFzcyBf
SW50ZWdlcj4gdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wLCBfSW50ZWdlciBf
X24sIF9JbnRlZ2VyIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX3RydWVf
dHlwZSYpIHsKICAgIGluc2VydChfX3AsIChzaXplX3R5cGUpIF9fbiwgKF9DaGFyVCkgX194KTsK
ICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPiB2b2lkIF9NX2luc2VydF9kaXNwYXRj
aChpdGVyYXRvciBfX3AsIF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19mYWxzZV90eXBlJikgewogICAgaW5zZXJ0
KF9fcCwgX19maXJzdCwgX19sYXN0LCB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8IF9JbnB1dEl0
ZXIgPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcmF0b3I+IHZvaWQKICBfTV9jb3B5KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0
ZXJhdG9yIF9fbGFzdCwgcG9pbnRlciBfX3Jlc3VsdCkgewogICAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgICBfVHJhaXRzOjphc3NpZ24oKl9f
cmVzdWx0LCAqX19maXJzdCk7CiAgfQoKCgogIHBvaW50ZXIgX01faW5zZXJ0X2F1eChwb2ludGVy
LCBfQ2hhclQpOwoKICB2b2lkCiAgX01fY29weShjb25zdCBfQ2hhclQqIF9fZmlyc3QsIGNvbnN0
IF9DaGFyVCogX19sYXN0LCBfQ2hhclQqIF9fcmVzdWx0KSB7CiAgICBfVHJhaXRzOjpjb3B5KF9f
cmVzdWx0LCBfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgpwdWJsaWM6CgogIF9TZWxm
JiBlcmFzZShzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykgewogICAg
aWYgKF9fcG9zID4gc2l6ZSgpKQogICAgICB0aGlzLT5fTV90aHJvd19vdXRfb2ZfcmFuZ2UoKTsK
ICAgIGVyYXNlKGJlZ2luKCkgKyBfX3BvcywgYmVnaW4oKSArIF9fcG9zICsgKG1pbikgKF9fbiwg
c2l6ZSgpIC0gX19wb3MpKTsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGl0ZXJhdG9yIGVyYXNl
KGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKCiAgICBfVHJhaXRzOjptb3ZlKF9fcG9zaXRpb24sIF9f
cG9zaXRpb24gKyAxLCB0aGlzLT5fTV9maW5pc2ggLSBfX3Bvc2l0aW9uKTsKICAgIF9EZXN0cm95
KHRoaXMtPl9NX2ZpbmlzaCk7CiAgICAtLXRoaXMtPl9NX2ZpbmlzaDsKICAgIHJldHVybiBfX3Bv
c2l0aW9uOwogIH0KCiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3Ig
X19sYXN0KSB7CiAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKCiAgICAgIHRyYWl0c190eXBl
Ojptb3ZlKF9fZmlyc3QsIF9fbGFzdCwgKHRoaXMtPl9NX2ZpbmlzaCAtIF9fbGFzdCkgKyAxKTsK
ICAgICAgcG9pbnRlciBfX25ld19maW5pc2ggPSB0aGlzLT5fTV9maW5pc2ggLSAoX19sYXN0IC0g
X19maXJzdCk7CiAgICAgIF9EZXN0cm95KF9fbmV3X2ZpbmlzaCArIDEsIHRoaXMtPl9NX2Zpbmlz
aCArIDEpOwogICAgICB0aGlzLT5fTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgICB9CiAgICBy
ZXR1cm4gX19maXJzdDsKICB9CgpwdWJsaWM6CgogIF9TZWxmJiByZXBsYWNlKHNpemVfdHlwZSBf
X3Bvcywgc2l6ZV90eXBlIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1NlbGYm
IF9fcykgewogICAgaWYgKF9fcG9zID4gc2l6ZSgpKQogICAgICB0aGlzLT5fTV90aHJvd19vdXRf
b2ZfcmFuZ2UoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IChtaW4pIChfX24sIHNpemUo
KSAtIF9fcG9zKTsKICAgIGlmIChzaXplKCkgLSBfX2xlbiA+PSBtYXhfc2l6ZSgpIC0gX19zLnNp
emUoKSkKICAgICAgdGhpcy0+X01fdGhyb3dfbGVuZ3RoX2Vycm9yKCk7CiAgICByZXR1cm4gcmVw
bGFjZShiZWdpbigpICsgX19wb3MsIGJlZ2luKCkgKyBfX3BvcyArIF9fbGVuLAogICAgICAgICAg
ICAgICAgICAgX19zLl9NX3N0YXJ0LCBfX3MuX01fZmluaXNoKTsKICB9CgogIF9TZWxmJiByZXBs
YWNlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLAogICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBfU2VsZiYgX19zLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUg
X19wb3MyLCBzaXplX3R5cGUgX19uMikgewogICAgaWYgKF9fcG9zMSA+IHNpemUoKSB8fCBfX3Bv
czIgPiBfX3Muc2l6ZSgpKQogICAgICB0aGlzLT5fTV90aHJvd19vdXRfb2ZfcmFuZ2UoKTsKICAg
IGNvbnN0IHNpemVfdHlwZSBfX2xlbjEgPSAobWluKSAoX19uMSwgc2l6ZSgpIC0gX19wb3MxKTsK
ICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbjIgPSAobWluKSAoX19uMiwgX19zLnNpemUoKSAtIF9f
cG9zMik7CiAgICBpZiAoc2l6ZSgpIC0gX19sZW4xID49IG1heF9zaXplKCkgLSBfX2xlbjIpCiAg
ICAgIHRoaXMtPl9NX3Rocm93X2xlbmd0aF9lcnJvcigpOwogICAgcmV0dXJuIHJlcGxhY2UoYmVn
aW4oKSArIF9fcG9zMSwgYmVnaW4oKSArIF9fcG9zMSArIF9fbGVuMSwKICAgICAgICAgICAgICAg
ICAgIF9fcy5fTV9zdGFydCArIF9fcG9zMiwgX19zLl9NX3N0YXJ0ICsgX19wb3MyICsgX19sZW4y
KTsKICB9CgogIF9TZWxmJiByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEs
CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19u
MikgewogICAKICAgIGlmIChfX3BvcyA+IHNpemUoKSkKICAgICAgdGhpcy0+X01fdGhyb3dfb3V0
X29mX3JhbmdlKCk7CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSAobWluKSAoX19uMSwgc2l6
ZSgpIC0gX19wb3MpOwogICAgaWYgKF9fbjIgPiBtYXhfc2l6ZSgpIHx8IHNpemUoKSAtIF9fbGVu
ID49IG1heF9zaXplKCkgLSBfX24yKQogICAgICB0aGlzLT5fTV90aHJvd19sZW5ndGhfZXJyb3Io
KTsKICAgIHJldHVybiByZXBsYWNlKGJlZ2luKCkgKyBfX3BvcywgYmVnaW4oKSArIF9fcG9zICsg
X19sZW4sCiAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIF9fbjIpOwogIH0KCiAgX1NlbGYm
IHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwKICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3MpIHsKICAgCiAgICBpZiAoX19wb3MgPiBzaXplKCkp
CiAgICAgIHRoaXMtPl9NX3Rocm93X291dF9vZl9yYW5nZSgpOwogICAgY29uc3Qgc2l6ZV90eXBl
IF9fbGVuID0gKG1pbikgKF9fbjEsIHNpemUoKSAtIF9fcG9zKTsKICAgIGNvbnN0IHNpemVfdHlw
ZSBfX24yID0gX1RyYWl0czo6bGVuZ3RoKF9fcyk7CiAgICBpZiAoX19uMiA+IG1heF9zaXplKCkg
fHwgc2l6ZSgpIC0gX19sZW4gPj0gbWF4X3NpemUoKSAtIF9fbjIpCiAgICAgIHRoaXMtPl9NX3Ro
cm93X2xlbmd0aF9lcnJvcigpOwogICAgcmV0dXJuIHJlcGxhY2UoYmVnaW4oKSArIF9fcG9zLCBi
ZWdpbigpICsgX19wb3MgKyBfX2xlbiwKICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgX1Ry
YWl0czo6bGVuZ3RoKF9fcykpOwogIH0KCiAgX1NlbGYmIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9z
LCBzaXplX3R5cGUgX19uMSwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIs
IF9DaGFyVCBfX2MpIHsKICAgIGlmIChfX3BvcyA+IHNpemUoKSkKICAgICAgdGhpcy0+X01fdGhy
b3dfb3V0X29mX3JhbmdlKCk7CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSAobWluKSAoX19u
MSwgc2l6ZSgpIC0gX19wb3MpOwogICAgaWYgKF9fbjIgPiBtYXhfc2l6ZSgpIHx8IHNpemUoKSAt
IF9fbGVuID49IG1heF9zaXplKCkgLSBfX24yKQogICAgICB0aGlzLT5fTV90aHJvd19sZW5ndGhf
ZXJyb3IoKTsKICAgIHJldHVybiByZXBsYWNlKGJlZ2luKCkgKyBfX3BvcywgYmVnaW4oKSArIF9f
cG9zICsgX19sZW4sIF9fbjIsIF9fYyk7CiAgfQoKICBfU2VsZiYgcmVwbGFjZShpdGVyYXRvciBf
X2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9T
ZWxmJiBfX3MpCiAgICB7IHJldHVybiByZXBsYWNlKF9fZmlyc3QsIF9fbGFzdCwgX19zLl9NX3N0
YXJ0LCBfX3MuX01fZmluaXNoKTsgfQoKICBfU2VsZiYgcmVwbGFjZShpdGVyYXRvciBfX2ZpcnN0
LCBpdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCog
X19zLCBzaXplX3R5cGUgX19uKQogICAgeyByZXR1cm4gcmVwbGFjZShfX2ZpcnN0LCBfX2xhc3Qs
IF9fcywgX19zICsgX19uKTsgfQoKICBfU2VsZiYgcmVwbGFjZShpdGVyYXRvciBfX2ZpcnN0LCBp
dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19z
KSB7CiAgIAogICAgcmV0dXJuIHJlcGxhY2UoX19maXJzdCwgX19sYXN0LCBfX3MsIF9fcyArIF9U
cmFpdHM6Omxlbmd0aChfX3MpKTsKICB9CgogIF9TZWxmJiByZXBsYWNlKGl0ZXJhdG9yIF9fZmly
c3QsIGl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9f
biwgX0NoYXJUIF9fYyk7CgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPiBfU2VsZiYg
cmVwbGFjZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgIF9JbnB1dEl0ZXIgX19mLCBfSW5wdXRJdGVyIF9fbCkgewogICAgdHlwZWRlZiB0
eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAg
IHJldHVybiBfTV9yZXBsYWNlX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX19mLCBfX2wsIF9J
bnRlZ3JhbCgpKTsKICB9CgoKCgoKcHJpdmF0ZToKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVn
ZXI+IF9TZWxmJiBfTV9yZXBsYWNlX2Rpc3BhdGNoKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9y
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ludGVnZXIgX19u
LCBfSW50ZWdlciBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IF9fdHJ1ZV90eXBlJikgewogICAgcmV0dXJuIHJlcGxhY2UoX19maXJzdCwgX19sYXN0LCAoc2l6
ZV90eXBlKSBfX24sIChfQ2hhclQpIF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcj4gX1NlbGYmIF9NX3JlcGxhY2VfZGlzcGF0Y2goaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0
b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy
IF9fZiwgX0lucHV0SXRlciBfX2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9fZmFsc2VfdHlwZSYpIHsKICAgIHJldHVybiByZXBsYWNlKF9fZmlyc3QsIF9fbGFz
dCwgX19mLCBfX2wsIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czwgX0lucHV0SXRlciA+OjppdGVy
YXRvcl9jYXRlZ29yeSgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPiBfU2Vs
ZiYgcmVwbGFjZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19mLCBfSW5wdXRJdGVyIF9fbCwgY29uc3QgaW5wdXRf
aXRlcmF0b3JfdGFnICYpIHsKICAgICAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYg
X19mICE9IF9fbDsgKytfX2ZpcnN0LCArK19fZikKICAgICAgICAgICAgX1RyYWl0czo6YXNzaWdu
KCpfX2ZpcnN0LCAqX19mKTsKCiAgICAgICAgICBpZiAoX19mID09IF9fbCkKICAgICAgICAgICAg
ZXJhc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgaW5zZXJ0
KF9fbGFzdCwgX19mLCBfX2wpOwogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgIH0KCiAg
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4gX1NlbGYmIHJlcGxhY2UoaXRlcmF0b3IgX19m
aXJzdCwgaXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0
ZXIgX19mLCBfRm9yd2FyZEl0ZXIgX19sLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBm
b3J3YXJkX2l0ZXJhdG9yX3RhZyAmKSB7CiAgICAgICAgICBkaWZmZXJlbmNlX3R5cGUgX19uID0g
ZGlzdGFuY2UoX19mLCBfX2wpOwogICAgICAgICAgY29uc3QgZGlmZmVyZW5jZV90eXBlIF9fbGVu
ID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgICAgIGlmIChfX2xlbiA+PSBfX24pIHsKICAgICAg
ICAgICAgX01fY29weShfX2YsIF9fbCwgX19maXJzdCk7CiAgICAgICAgICAgIGVyYXNlKF9fZmly
c3QgKyBfX24sIF9fbGFzdCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyIF9fbSA9IF9fZjsKICAgICAgICAgICAgYWR2YW5jZShfX20sIF9fbGVu
KTsKICAgICAgICAgICAgX01fY29weShfX2YsIF9fbSwgX19maXJzdCk7CiAgICAgICAgICAgIGlu
c2VydChfX2xhc3QsIF9fbSwgX19sKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiAqdGhp
czsKICAgICAgICB9CgoKCnB1YmxpYzoKCiAgc2l6ZV90eXBlIGNvcHkoX0NoYXJUKiBfX3MsIHNp
emVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0IHsKICAgCiAgICBpZiAoX19w
b3MgPiBzaXplKCkpCiAgICAgIHRoaXMtPl9NX3Rocm93X291dF9vZl9yYW5nZSgpOwogICAgY29u
c3Qgc2l6ZV90eXBlIF9fbGVuID0gKG1pbikgKF9fbiwgc2l6ZSgpIC0gX19wb3MpOwogICAgX1Ry
YWl0czo6Y29weShfX3MsIHRoaXMtPl9NX3N0YXJ0ICsgX19wb3MsIF9fbGVuKTsKICAgIHJldHVy
biBfX2xlbjsKICB9CgogIHZvaWQgc3dhcChfU2VsZiYgX19zKSB7CiAgICBfU1RMOjpzd2FwKHRo
aXMtPl9NX3N0YXJ0LCBfX3MuX01fc3RhcnQpOwogICAgX1NUTDo6c3dhcCh0aGlzLT5fTV9maW5p
c2gsIF9fcy5fTV9maW5pc2gpOwogICAgX1NUTDo6c3dhcCh0aGlzLT5fTV9lbmRfb2Zfc3RvcmFn
ZSwgX19zLl9NX2VuZF9vZl9zdG9yYWdlKTsKICB9CgpwdWJsaWM6CgogIGNvbnN0IF9DaGFyVCog
Y19zdHIoKSBjb25zdCB7IHJldHVybiB0aGlzLT5fTV9zdGFydDsgfQogIGNvbnN0IF9DaGFyVCog
ZGF0YSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPl9NX3N0YXJ0OyB9CgpwdWJsaWM6CgogIHNpemVf
dHlwZSBmaW5kKGNvbnN0IF9TZWxmJiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAg
ICB7IHJldHVybiBmaW5kKF9fcy5fTV9zdGFydCwgX19wb3MsIF9fcy5zaXplKCkpOyB9CgogIHNp
emVfdHlwZSBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25z
dAogICAgeyByZXR1cm4gZmluZChfX3MsIF9fcG9zLCBfVHJhaXRzOjpsZW5ndGgoX19zKSk7IH0K
CiAgc2l6ZV90eXBlIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6
ZV90eXBlIF9fbikgY29uc3Q7CiAgc2l6ZV90eXBlIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBl
IF9fcG9zID0gMCkgY29uc3Q7CgpwdWJsaWM6CgogIHNpemVfdHlwZSByZmluZChjb25zdCBfU2Vs
ZiYgX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gcmZpbmQo
X19zLl9NX3N0YXJ0LCBfX3BvcywgX19zLnNpemUoKSk7IH0KCiAgc2l6ZV90eXBlIHJmaW5kKGNv
bnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1
cm4gcmZpbmQoX19zLCBfX3BvcywgX1RyYWl0czo6bGVuZ3RoKF9fcykpOyB9CgogIHNpemVfdHlw
ZSByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u
KSBjb25zdDsKICBzaXplX3R5cGUgcmZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0g
bnBvcykgY29uc3Q7CgpwdWJsaWM6CgogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X29mKGNvbnN0IF9T
ZWxmJiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICB7IHJldHVybiBmaW5kX2Zp
cnN0X29mKF9fcy5fTV9zdGFydCwgX19wb3MsIF9fcy5zaXplKCkpOyB9CgogIHNpemVfdHlwZSBm
aW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25z
dAogICAgeyByZXR1cm4gZmluZF9maXJzdF9vZihfX3MsIF9fcG9zLCBfVHJhaXRzOjpsZW5ndGgo
X19zKSk7IH0KCiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNp
emVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uKSBj
b25zdDsKCiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9f
cG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGZpbmQoX19jLCBfX3Bvcyk7IH0KCnB1YmxpYzoK
CiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9vZihjb25zdCBfU2VsZiYgX19zLAogICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIGZp
bmRfbGFzdF9vZihfX3MuX01fc3RhcnQsIF9fcG9zLCBfX3Muc2l6ZSgpKTsgfQoKICBzaXplX3R5
cGUgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9z
KSBjb25zdAogICAgeyByZXR1cm4gZmluZF9sYXN0X29mKF9fcywgX19wb3MsIF9UcmFpdHM6Omxl
bmd0aChfX3MpKTsgfQoKICBzaXplX3R5cGUgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19z
LCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19u
KSBjb25zdDsKCiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUg
X19wb3MgPSBucG9zKSBjb25zdCB7CiAgICByZXR1cm4gcmZpbmQoX19jLCBfX3Bvcyk7CiAgfQoK
cHVibGljOgoKICBzaXplX3R5cGUgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX1NlbGYmIF9fcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QK
ICAgIHsgcmV0dXJuIGZpbmRfZmlyc3Rfbm90X29mKF9fcy5fTV9zdGFydCwgX19wb3MsIF9fcy5z
aXplKCkpOyB9CgogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9f
cywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGZpbmRfZmlyc3Rfbm90
X29mKF9fcywgX19wb3MsIF9UcmFpdHM6Omxlbmd0aChfX3MpKTsgfQoKICBzaXplX3R5cGUgZmlu
ZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogIHNpemVfdHlw
ZSBmaW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25z
dDsKCnB1YmxpYzoKCiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX1NlbGYmIF9f
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBj
b25zdAogICAgeyByZXR1cm4gZmluZF9sYXN0X25vdF9vZihfX3MuX01fc3RhcnQsIF9fcG9zLCBf
X3Muc2l6ZSgpKTsgfQoKICBzaXplX3R5cGUgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQq
IF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIGZpbmRfbGFz
dF9ub3Rfb2YoX19zLCBfX3BvcywgX1RyYWl0czo6bGVuZ3RoKF9fcykpOyB9CgogIHNpemVfdHlw
ZSBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogIHNpemVf
dHlwZSBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3Mp
IGNvbnN0OwoKcHVibGljOgoKICBfU2VsZiBzdWJzdHIoc2l6ZV90eXBlIF9fcG9zID0gMCwgc2l6
ZV90eXBlIF9fbiA9IG5wb3MpIGNvbnN0IHsKICAgIGlmIChfX3BvcyA+IHNpemUoKSkKICAgICAg
dGhpcy0+X01fdGhyb3dfb3V0X29mX3JhbmdlKCk7CiAgICByZXR1cm4gX1NlbGYodGhpcy0+X01f
c3RhcnQgKyBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+X01fc3RhcnQgKyBf
X3BvcyArIChtaW4pIChfX24sIHNpemUoKSAtIF9fcG9zKSk7CiAgfQoKcHVibGljOgoKICBpbnQg
Y29tcGFyZShjb25zdCBfU2VsZiYgX19zKSBjb25zdAogICAgeyByZXR1cm4gX01fY29tcGFyZSh0
aGlzLT5fTV9zdGFydCwgdGhpcy0+X01fZmluaXNoLCBfX3MuX01fc3RhcnQsIF9fcy5fTV9maW5p
c2gpOyB9CgogIGludCBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLAog
ICAgICAgICAgICAgIGNvbnN0IF9TZWxmJiBfX3MpIGNvbnN0IHsKICAgIGlmIChfX3BvczEgPiBz
aXplKCkpCiAgICAgIHRoaXMtPl9NX3Rocm93X291dF9vZl9yYW5nZSgpOwogICAgcmV0dXJuIF9N
X2NvbXBhcmUodGhpcy0+X01fc3RhcnQgKyBfX3BvczEsCiAgICAgICAgICAgICAgICAgICAgICB0
aGlzLT5fTV9zdGFydCArIF9fcG9zMSArIChtaW4pIChfX24xLCBzaXplKCkgLSBfX3BvczEpLAog
ICAgICAgICAgICAgICAgICAgICAgX19zLl9NX3N0YXJ0LCBfX3MuX01fZmluaXNoKTsKICB9Cgog
IGludCBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLAogICAgICAgICAg
ICAgIGNvbnN0IF9TZWxmJiBfX3MsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6
ZV90eXBlIF9fbjIpIGNvbnN0IHsKICAgIGlmIChfX3BvczEgPiBzaXplKCkgfHwgX19wb3MyID4g
X19zLnNpemUoKSkKICAgICAgdGhpcy0+X01fdGhyb3dfb3V0X29mX3JhbmdlKCk7CiAgICByZXR1
cm4gX01fY29tcGFyZSh0aGlzLT5fTV9zdGFydCArIF9fcG9zMSwKICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMtPl9NX3N0YXJ0ICsgX19wb3MxICsgKG1pbikgKF9fbjEsIHNpemUoKSAtIF9fcG9z
MSksCiAgICAgICAgICAgICAgICAgICAgICBfX3MuX01fc3RhcnQgKyBfX3BvczIsCiAgICAgICAg
ICAgICAgICAgICAgICBfX3MuX01fc3RhcnQgKyBfX3BvczIgKyAobWluKSAoX19uMiwgX19zLnNp
emUoKSAtIF9fcG9zMikpOwogIH0KCiAgaW50IGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX3MpIGNv
bnN0IHsKICAgCiAgICAgIHJldHVybiBfTV9jb21wYXJlKHRoaXMtPl9NX3N0YXJ0LCB0aGlzLT5f
TV9maW5pc2gsIF9fcywgX19zICsgX1RyYWl0czo6bGVuZ3RoKF9fcykpOwogIH0KCiAgaW50IGNv
bXBhcmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19z
KSBjb25zdCB7CiAgIAogICAgaWYgKF9fcG9zMSA+IHNpemUoKSkKICAgICAgdGhpcy0+X01fdGhy
b3dfb3V0X29mX3JhbmdlKCk7CiAgICByZXR1cm4gX01fY29tcGFyZSh0aGlzLT5fTV9zdGFydCAr
IF9fcG9zMSwKICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPl9NX3N0YXJ0ICsgX19wb3MxICsg
KG1pbikgKF9fbjEsIHNpemUoKSAtIF9fcG9zMSksCiAgICAgICAgICAgICAgICAgICAgICBfX3Ms
IF9fcyArIF9UcmFpdHM6Omxlbmd0aChfX3MpKTsKICB9CgogIGludCBjb21wYXJlKHNpemVfdHlw
ZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKICAgICAgICAgICAg
ICBzaXplX3R5cGUgX19uMikgY29uc3QgewogICAKICAgIGlmIChfX3BvczEgPiBzaXplKCkpCiAg
ICAgIHRoaXMtPl9NX3Rocm93X291dF9vZl9yYW5nZSgpOwogICAgcmV0dXJuIF9NX2NvbXBhcmUo
dGhpcy0+X01fc3RhcnQgKyBfX3BvczEsCiAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5fTV9z
dGFydCArIF9fcG9zMSArIChtaW4pIChfX24xLCBzaXplKCkgLSBfX3BvczEpLAogICAgICAgICAg
ICAgICAgICAgICAgX19zLCBfX3MgKyBfX24yKTsKICB9CgpwdWJsaWM6CgogIHN0YXRpYyBpbnQg
X01fY29tcGFyZShjb25zdCBfQ2hhclQqIF9fZjEsIGNvbnN0IF9DaGFyVCogX19sMSwKICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2YyLCBjb25zdCBfQ2hhclQqIF9fbDIp
IHsKICAgIGNvbnN0IHB0cmRpZmZfdCBfX24xID0gX19sMSAtIF9fZjE7CiAgICBjb25zdCBwdHJk
aWZmX3QgX19uMiA9IF9fbDIgLSBfX2YyOwogICAgY29uc3QgaW50IGNtcCA9IF9UcmFpdHM6OmNv
bXBhcmUoX19mMSwgX19mMiwgKG1pbikgKF9fbjEsIF9fbjIpKTsKICAgIHJldHVybiBjbXAgIT0g
MCA/IGNtcCA6IChfX24xIDwgX19uMiA/IC0xIDogKF9fbjEgPiBfX24yID8gMSA6IDApKTsKICB9
Cn07CiMgMTE2MSAiLi4vc3RscG9ydC9zdGwvX3N0cmluZy5oIgp0ZW1wbGF0ZSA8Y2xhc3MgX0No
YXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+IGlubGluZSBiYXNpY19zdHJpbmc8X0No
YXJULF9UcmFpdHMsX0FsbG9jPgpvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxf
VHJhaXRzLF9BbGxvYz4mIF9fcywKICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs
X1RyYWl0cyxfQWxsb2M+JiBfX3kpCnsKICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsX1Ry
YWl0cyxfQWxsb2M+IF9TdHI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfU3RyOjpfUmVzZXJ2ZV90IF9S
ZXNlcnZlX3Q7CgoKICBfU3RyIF9fcmVzdWx0ID0gX1N0cihfUmVzZXJ2ZV90KCksX19zLnNpemUo
KSArIF9feS5zaXplKCkpOwoKCgogIF9fcmVzdWx0LmFwcGVuZChfX3MpOwogIF9fcmVzdWx0LmFw
cGVuZChfX3kpOwogIHJldHVybiBfX3Jlc3VsdDsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfQ2hh
clQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4gaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hh
clQsX1RyYWl0cyxfQWxsb2M+Cm9wZXJhdG9yKyhjb25zdCBfQ2hhclQqIF9fcywKICAgICAgICAg
IGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3kpIHsKIAogIHR5
cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4gX1N0cjsKICB0eXBlZGVm
IHR5cGVuYW1lIF9TdHI6Ol9SZXNlcnZlX3QgX1Jlc2VydmVfdDsKICBjb25zdCBzaXplX3QgX19u
ID0gX1RyYWl0czo6bGVuZ3RoKF9fcyk7CgogIF9TdHIgX19yZXN1bHQgPSBfU3RyKF9SZXNlcnZl
X3QoKSwgX19uICsgX195LnNpemUoKSk7CgoKCiAgX19yZXN1bHQuYXBwZW5kKF9fcywgX19zICsg
X19uKTsKICBfX3Jlc3VsdC5hcHBlbmQoX195KTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4gaW5saW5lIGJh
c2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+Cm9wZXJhdG9yKyhfQ2hhclQgX19jLAog
ICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9feSkg
ewogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4gX1N0cjsKICB0
eXBlZGVmIHR5cGVuYW1lIF9TdHI6Ol9SZXNlcnZlX3QgX1Jlc2VydmVfdDsKCiAgX1N0ciBfX3Jl
c3VsdCA9IF9TdHIoX1Jlc2VydmVfdCgpLCAxICsgX195LnNpemUoKSk7CgoKCiAgX19yZXN1bHQu
cHVzaF9iYWNrKF9fYyk7CiAgX19yZXN1bHQuYXBwZW5kKF9feSk7CiAgcmV0dXJuIF9fcmVzdWx0
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+
IGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPgpvcGVyYXRvcisoY29u
c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9feCwKICAgICAgICAgIGNv
bnN0IF9DaGFyVCogX19zKSB7CiAKICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0
cyxfQWxsb2M+IF9TdHI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfU3RyOjpfUmVzZXJ2ZV90IF9SZXNl
cnZlX3Q7CiAgY29uc3Qgc2l6ZV90IF9fbiA9IF9UcmFpdHM6Omxlbmd0aChfX3MpOwoKICBfU3Ry
IF9fcmVzdWx0ID0gX1N0cihfUmVzZXJ2ZV90KCksIF9feC5zaXplKCkgKyBfX24sIF9feC5nZXRf
YWxsb2NhdG9yKCkpOwoKCgogIF9fcmVzdWx0LmFwcGVuZChfX3gpOwogIF9fcmVzdWx0LmFwcGVu
ZChfX3MsIF9fcyArIF9fbik7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+IGlubGluZSBiYXNpY19zdHJpbmc8
X0NoYXJULF9UcmFpdHMsX0FsbG9jPgpvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
VCxfVHJhaXRzLF9BbGxvYz4mIF9feCwKICAgICAgICAgIGNvbnN0IF9DaGFyVCBfX2MpIHsKICB0
eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+IF9TdHI7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfU3RyOjpfUmVzZXJ2ZV90IF9SZXNlcnZlX3Q7CgogIF9TdHIgX19yZXN1bHQg
PSBfU3RyKF9SZXNlcnZlX3QoKSwgX194LnNpemUoKSArIDEsIF9feC5nZXRfYWxsb2NhdG9yKCkp
OwoKCgogIF9fcmVzdWx0LmFwcGVuZChfX3gpOwogIF9fcmVzdWx0LnB1c2hfYmFjayhfX2MpOwog
IHJldHVybiBfX3Jlc3VsdDsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9U
cmFpdHMsIGNsYXNzIF9BbGxvYz4gaW5saW5lIGJvb2wKb3BlcmF0b3I9PShjb25zdCBiYXNpY19z
dHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX194LAogICAgICAgICAgIGNvbnN0IGJhc2lj
X3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194LnNpemUo
KSA9PSBfX3kuc2l6ZSgpICYmIF9UcmFpdHM6OmNvbXBhcmUoX194LmRhdGEoKSwgX195LmRhdGEo
KSwgX194LnNpemUoKSkgPT0gMDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1Ry
YWl0cywgY2xhc3MgX0FsbG9jPiBpbmxpbmUgYm9vbApvcGVyYXRvcj09KGNvbnN0IF9DaGFyVCog
X19zLAogICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+
JiBfX3kpIHsKIAogIHNpemVfdCBfX24gPSBfVHJhaXRzOjpsZW5ndGgoX19zKTsKICByZXR1cm4g
X19uID09IF9feS5zaXplKCkgJiYgX1RyYWl0czo6Y29tcGFyZShfX3MsIF9feS5kYXRhKCksIF9f
bikgPT0gMDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3Mg
X0FsbG9jPiBpbmxpbmUgYm9vbApvcGVyYXRvcj09KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs
X1RyYWl0cyxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3MpIHsKIAog
IHNpemVfdCBfX24gPSBfVHJhaXRzOjpsZW5ndGgoX19zKTsKICByZXR1cm4gX194LnNpemUoKSA9
PSBfX24gJiYgX1RyYWl0czo6Y29tcGFyZShfX3guZGF0YSgpLCBfX3MsIF9fbikgPT0gMDsKfQoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+IGlu
bGluZSBib29sCm9wZXJhdG9yPChjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0Fs
bG9jPiYgX194LAogICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9B
bGxvYz4mIF9feSkgewogIHJldHVybiBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9j
PiA6Ol9NX2NvbXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwKICAgICAgICAgICAgICAgICBf
X3kuYmVnaW4oKSwgX195LmVuZCgpKSA8IDA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNs
YXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4gaW5saW5lIGJvb2wKb3BlcmF0b3I8KGNvbnN0IF9D
aGFyVCogX19zLAogICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9B
bGxvYz4mIF9feSkgewogCiAgc2l6ZV90IF9fbiA9IF9UcmFpdHM6Omxlbmd0aChfX3MpOwogIHJl
dHVybiBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiA6Ol9NX2NvbXBhcmUoX19z
LCBfX3MgKyBfX24sIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpIDwgMDsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPiBpbmxpbmUgYm9vbApvcGVy
YXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9feCwKICAg
ICAgICAgIGNvbnN0IF9DaGFyVCogX19zKSB7CiAKICBzaXplX3QgX19uID0gX1RyYWl0czo6bGVu
Z3RoKF9fcyk7CiAgcmV0dXJuIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+IDo6
X01fY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfX3MsIF9fcyArIF9fbikgPCAwOwp9
CgoKCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4g
aW5saW5lIGJvb2wKb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMs
X0FsbG9jPiYgX194LAogICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0
cyxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPiBpbmxpbmUgYm9vbApvcGVy
YXRvcj4oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9feCwKICAg
ICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3kpIHsK
ICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJh
aXRzLCBjbGFzcyBfQWxsb2M+IGlubGluZSBib29sCm9wZXJhdG9yPD0oY29uc3QgYmFzaWNfc3Ry
aW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9feCwKICAgICAgICAgICBjb25zdCBiYXNpY19z
dHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9j
PiBpbmxpbmUgYm9vbApvcGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0
cyxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJh
aXRzLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCgoKdGVtcGxhdGUg
PGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPiBpbmxpbmUgYm9vbApv
cGVyYXRvciE9KGNvbnN0IF9DaGFyVCogX19zLAogICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu
ZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3kpIHsKIAogIHJldHVybiAhKF9fcyA9PSBfX3kp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+
IGlubGluZSBib29sCm9wZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRz
LF9BbGxvYz4mIF9feCwKICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcykgewogCiAgcmV0dXJu
ICEoX194ID09IF9fcyk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMs
IGNsYXNzIF9BbGxvYz4gaW5saW5lIGJvb2wKb3BlcmF0b3I+KGNvbnN0IF9DaGFyVCogX19zLAog
ICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9feSkg
ewogCiAgcmV0dXJuIF9feSA8IF9fczsKfQoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3Mg
X1RyYWl0cywgY2xhc3MgX0FsbG9jPiBpbmxpbmUgYm9vbApvcGVyYXRvcj4oY29uc3QgYmFzaWNf
c3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9feCwKICAgICAgICAgIGNvbnN0IF9DaGFy
VCogX19zKSB7CiAKICByZXR1cm4gX19zIDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJU
LCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+IGlubGluZSBib29sCm9wZXJhdG9yPD0oY29u
c3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJh
aXRzLF9BbGxvYz4mIF9feSkgewogCiAgcmV0dXJuICEoX195IDwgX19zKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPiBpbmxpbmUgYm9vbApv
cGVyYXRvcjw9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3gs
CiAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3MpIHsKIAogIHJldHVybiAhKF9fcyA8IF9feCk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4g
aW5saW5lIGJvb2wKb3BlcmF0b3I+PShjb25zdCBfQ2hhclQqIF9fcywKICAgICAgICAgICBjb25z
dCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX195KSB7CiAKICByZXR1cm4g
IShfX3MgPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBj
bGFzcyBfQWxsb2M+IGlubGluZSBib29sCm9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9D
aGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9feCwKICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcykg
ewogCiAgcmV0dXJuICEoX194IDwgX19zKTsKfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJU
LCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+IGlubGluZSB2b2lkCnN3YXAoYmFzaWNfc3Ry
aW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9feCwKICAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LF9UcmFpdHMsX0FsbG9jPiYgX195KSB7CiAgX194LnN3YXAoX195KTsKfQoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+IHZvaWQgX1Nfc3RyaW5n
X2NvcHkoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fcywKICAg
ICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fYnVmLAogICAgICAgICAgICAgICAgICAgIHNpemVf
dCBfX24pOwoKCgp9CgoKCgoKCiMgMSAiLi4vc3RscG9ydC9zdGwvX3N0cmluZy5jIiAxCiMgNDMg
Ii4uL3N0bHBvcnQvc3RsL19zdHJpbmcuYyIKbmFtZXNwYWNlIF9TVEwgewojIDUzICIuLi9zdGxw
b3J0L3N0bC9fc3RyaW5nLmMiCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMs
IGNsYXNzIF9BbGxvYz4gdm9pZCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6
cmVzZXJ2ZShzaXplX3R5cGUgX19yZXNfYXJnKSB7CiAgaWYgKF9fcmVzX2FyZyA+IG1heF9zaXpl
KCkpCiAgICB0aGlzLT5fTV90aHJvd19sZW5ndGhfZXJyb3IoKTsKCiAgc2l6ZV90eXBlIF9fbiA9
IChtYXgpKF9fcmVzX2FyZywgc2l6ZSgpKSArIDE7CiAgcG9pbnRlciBfX25ld19zdGFydCA9IHRo
aXMtPl9NX2VuZF9vZl9zdG9yYWdlLmFsbG9jYXRlKF9fbik7CiAgcG9pbnRlciBfX25ld19maW5p
c2ggPSBfX25ld19zdGFydDsKCiAgdHJ5IHsKICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6
ZWRfY29weSh0aGlzLT5fTV9zdGFydCwgdGhpcy0+X01fZmluaXNoLCBfX25ld19zdGFydCk7CiAg
ICBfTV9jb25zdHJ1Y3RfbnVsbChfX25ld19maW5pc2gpOwogIH0KICBjYXRjaCguLi4pIHsgKF9E
ZXN0cm95KF9fbmV3X3N0YXJ0LCBfX25ld19maW5pc2gpLCB0aGlzLT5fTV9lbmRfb2Zfc3RvcmFn
ZS5kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LCBfX24pKTsgdGhyb3c7IH07CgoKICBfRGVzdHJveSh0
aGlzLT5fTV9zdGFydCwgdGhpcy0+X01fZmluaXNoICsgMSk7CiAgdGhpcy0+X01fZGVhbGxvY2F0
ZV9ibG9jaygpOwogIHRoaXMtPl9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgdGhpcy0+X01fZmlu
aXNoID0gX19uZXdfZmluaXNoOwogIHRoaXMtPl9NX2VuZF9vZl9zdG9yYWdlLl9NX2RhdGEgPSBf
X25ld19zdGFydCArIF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0
cywgY2xhc3MgX0FsbG9jPiBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgYmFz
aWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46OmFwcGVuZChzaXplX3R5cGUgX19uLCBf
Q2hhclQgX19jKSB7CiAgaWYgKF9fbiA+IG1heF9zaXplKCkgfHwgc2l6ZSgpID4gbWF4X3NpemUo
KSAtIF9fbikKICAgIHRoaXMtPl9NX3Rocm93X2xlbmd0aF9lcnJvcigpOwogIGlmIChzaXplKCkg
KyBfX24gPiBjYXBhY2l0eSgpKQogICAgcmVzZXJ2ZShzaXplKCkgKyAobWF4KShzaXplKCksIF9f
bikpOwogIGlmIChfX24gPiAwKSB7CiAgICB1bmluaXRpYWxpemVkX2ZpbGxfbih0aGlzLT5fTV9m
aW5pc2ggKyAxLCBfX24gLSAxLCBfX2MpOwogICAgdHJ5IHsKICAgICAgX01fY29uc3RydWN0X251
bGwodGhpcy0+X01fZmluaXNoICsgX19uKTsKICAgIH0KICAgIGNhdGNoKC4uLikgeyBfRGVzdHJv
eSh0aGlzLT5fTV9maW5pc2ggKyAxLCB0aGlzLT5fTV9maW5pc2ggKyBfX24pOyB0aHJvdzsgfTsK
ICAgIF9UcmFpdHM6OmFzc2lnbigqZW5kKCksIF9fYyk7CiAgICB0aGlzLT5fTV9maW5pc2ggKz0g
X19uOwogIH0KICByZXR1cm4gKnRoaXM7Cn0KIyAxMzYgIi4uL3N0bHBvcnQvc3RsL19zdHJpbmcu
YyIKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPiBi
YXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgYmFzaWNfc3RyaW5nPF9DaGFyVCxf
VHJhaXRzLF9BbGxvYz46OmFzc2lnbihzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKSB7CiAgaWYg
KF9fbiA8PSBzaXplKCkpIHsKICAgIF9UcmFpdHM6OmFzc2lnbih0aGlzLT5fTV9zdGFydCwgX19u
LCBfX2MpOwogICAgZXJhc2UoYmVnaW4oKSArIF9fbiwgZW5kKCkpOwogIH0KICBlbHNlIHsKICAg
IF9UcmFpdHM6OmFzc2lnbih0aGlzLT5fTV9zdGFydCwgc2l6ZSgpLCBfX2MpOwogICAgYXBwZW5k
KF9fbiAtIHNpemUoKSwgX19jKTsKICB9CiAgcmV0dXJuICp0aGlzOwp9CiMgMTcxICIuLi9zdGxw
b3J0L3N0bC9fc3RyaW5nLmMiCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMs
IGNsYXNzIF9BbGxvYz4gX0NoYXJUKgpiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9j
PiA6Ol9NX2luc2VydF9hdXgoX0NoYXJUKiBfX3AsCiAgICAgICAgICAgICAgICAgIF9DaGFyVCBf
X2MpCnsKICBwb2ludGVyIF9fbmV3X3BvcyA9IF9fcDsKICBpZiAodGhpcy0+X01fZmluaXNoICsg
MSA8IHRoaXMtPl9NX2VuZF9vZl9zdG9yYWdlLl9NX2RhdGEpIHsKICAgIF9NX2NvbnN0cnVjdF9u
dWxsKHRoaXMtPl9NX2ZpbmlzaCArIDEpOwogICAgX1RyYWl0czo6bW92ZShfX3AgKyAxLCBfX3As
IHRoaXMtPl9NX2ZpbmlzaCAtIF9fcCk7CiAgICBfVHJhaXRzOjphc3NpZ24oKl9fcCwgX19jKTsK
ICAgICsrdGhpcy0+X01fZmluaXNoOwogIH0KICBlbHNlIHsKICAgIGNvbnN0IHNpemVfdHlwZSBf
X29sZF9sZW4gPSBzaXplKCk7CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9sZW4g
KwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1heCkoX19vbGRfbGVuLCBzdGF0aWNfY2Fz
dDxzaXplX3R5cGU+KDEpKSArIDE7CiAgICBwb2ludGVyIF9fbmV3X3N0YXJ0ID0gdGhpcy0+X01f
ZW5kX29mX3N0b3JhZ2UuYWxsb2NhdGUoX19sZW4pOwogICAgcG9pbnRlciBfX25ld19maW5pc2gg
PSBfX25ld19zdGFydDsKICAgIHRyeSB7CiAgICAgIF9fbmV3X3BvcyA9IHVuaW5pdGlhbGl6ZWRf
Y29weSh0aGlzLT5fTV9zdGFydCwgX19wLCBfX25ld19zdGFydCk7CiAgICAgIF9Db25zdHJ1Y3Qo
X19uZXdfcG9zLCBfX2MpOwogICAgICBfX25ld19maW5pc2ggPSBfX25ld19wb3MgKyAxOwogICAg
ICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19wLCB0aGlzLT5fTV9maW5pc2gs
IF9fbmV3X2ZpbmlzaCk7CiAgICAgIF9NX2NvbnN0cnVjdF9udWxsKF9fbmV3X2ZpbmlzaCk7CiAg
ICB9CiAgICBjYXRjaCguLi4pIHsgKF9EZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCks
IHRoaXMtPl9NX2VuZF9vZl9zdG9yYWdlLmRlYWxsb2NhdGUoX19uZXdfc3RhcnQsX19sZW4pKTsg
dGhyb3c7IH07CgogICAgX0Rlc3Ryb3kodGhpcy0+X01fc3RhcnQsIHRoaXMtPl9NX2ZpbmlzaCAr
IDEpOwogICAgdGhpcy0+X01fZGVhbGxvY2F0ZV9ibG9jaygpOwogICAgdGhpcy0+X01fc3RhcnQg
PSBfX25ld19zdGFydDsKICAgIHRoaXMtPl9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgIHRo
aXMtPl9NX2VuZF9vZl9zdG9yYWdlLl9NX2RhdGEgPSBfX25ld19zdGFydCArIF9fbGVuOwogIH0K
ICByZXR1cm4gX19uZXdfcG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJh
aXRzLCBjbGFzcyBfQWxsb2M+IHZvaWQgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxv
Yz46Omluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgIHNpemVfdCBfX24sIF9D
aGFyVCBfX2MpCnsKICBpZiAoX19uICE9IDApIHsKICAgIGlmIChzaXplX3R5cGUodGhpcy0+X01f
ZW5kX29mX3N0b3JhZ2UuX01fZGF0YSAtIHRoaXMtPl9NX2ZpbmlzaCkgPj0gX19uICsgMSkgewog
ICAgICBjb25zdCBzaXplX3R5cGUgX19lbGVtc19hZnRlciA9IHRoaXMtPl9NX2ZpbmlzaCAtIF9f
cG9zaXRpb247CiAgICAgIHBvaW50ZXIgX19vbGRfZmluaXNoID0gdGhpcy0+X01fZmluaXNoOwog
ICAgICBpZiAoX19lbGVtc19hZnRlciA+PSBfX24pIHsKICAgICAgICB1bmluaXRpYWxpemVkX2Nv
cHkoKHRoaXMtPl9NX2ZpbmlzaCAtIF9fbikgKyAxLCB0aGlzLT5fTV9maW5pc2ggKyAxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5fTV9maW5pc2ggKyAxKTsKICAgICAgICB0aGlz
LT5fTV9maW5pc2ggKz0gX19uOwogICAgICAgIF9UcmFpdHM6Om1vdmUoX19wb3NpdGlvbiArIF9f
biwKICAgICAgICAgICAgICAgICAgICAgIF9fcG9zaXRpb24sIChfX2VsZW1zX2FmdGVyIC0gX19u
KSArIDEpOwogICAgICAgIF9UcmFpdHM6OmFzc2lnbihfX3Bvc2l0aW9uLCBfX24sIF9fYyk7CiAg
ICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9maWxsX24odGhpcy0+X01f
ZmluaXNoICsgMSwgX19uIC0gX19lbGVtc19hZnRlciAtIDEsIF9fYyk7CiAgICAgICAgdGhpcy0+
X01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgdHJ5IHsKICAgICAgICAg
IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2ggKyAxLCB0aGlzLT5f
TV9maW5pc2gpOwogICAgICAgICAgdGhpcy0+X01fZmluaXNoICs9IF9fZWxlbXNfYWZ0ZXI7CiAg
ICAgICAgfQogICAgICAgIGNhdGNoKC4uLikgeyAoX0Rlc3Ryb3koX19vbGRfZmluaXNoICsgMSwg
dGhpcy0+X01fZmluaXNoKSwgdGhpcy0+X01fZmluaXNoID0gX19vbGRfZmluaXNoKTsgdGhyb3c7
IH07CgogICAgICAgIF9UcmFpdHM6OmFzc2lnbihfX3Bvc2l0aW9uLCBfX2VsZW1zX2FmdGVyICsg
MSwgX19jKTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBf
X29sZF9zaXplID0gc2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9z
aXplICsgKG1heCkoX19vbGRfc2l6ZSwgX19uKSArIDE7CiAgICAgIHBvaW50ZXIgX19uZXdfc3Rh
cnQgPSB0aGlzLT5fTV9lbmRfb2Zfc3RvcmFnZS5hbGxvY2F0ZShfX2xlbik7CiAgICAgIHBvaW50
ZXIgX19uZXdfZmluaXNoID0gX19uZXdfc3RhcnQ7CiAgICAgIHRyeSB7CiAgICAgICAgX19uZXdf
ZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KHRoaXMtPl9NX3N0YXJ0LCBfX3Bvc2l0aW9uLCBf
X25ld19zdGFydCk7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24o
X19uZXdfZmluaXNoLCBfX24sIF9fYyk7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFs
aXplZF9jb3B5KF9fcG9zaXRpb24sIHRoaXMtPl9NX2ZpbmlzaCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfZmluaXNoKTsKICAgICAgICBfTV9jb25zdHJ1
Y3RfbnVsbChfX25ld19maW5pc2gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikgeyAoX0Rlc3Ry
b3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgdGhpcy0+X01fZW5kX29mX3N0b3JhZ2UuZGVh
bGxvY2F0ZShfX25ld19zdGFydCxfX2xlbikpOyB0aHJvdzsgfTsKCiAgICAgIF9EZXN0cm95KHRo
aXMtPl9NX3N0YXJ0LCB0aGlzLT5fTV9maW5pc2ggKyAxKTsKICAgICAgdGhpcy0+X01fZGVhbGxv
Y2F0ZV9ibG9jaygpOwogICAgICB0aGlzLT5fTV9zdGFydCA9IF9fbmV3X3N0YXJ0OwogICAgICB0
aGlzLT5fTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgICAgIHRoaXMtPl9NX2VuZF9vZl9zdG9y
YWdlLl9NX2RhdGEgPSBfX25ld19zdGFydCArIF9fbGVuOwogICAgfQogIH0KfQojIDMxNiAiLi4v
c3RscG9ydC9zdGwvX3N0cmluZy5jIgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJh
aXRzLCBjbGFzcyBfQWxsb2M+IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBi
YXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiA6OnJlcGxhY2UoaXRlcmF0b3IgX19m
aXJzdCwgaXRlcmF0b3IgX19sYXN0LCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQp7CiAgc2l6
ZV90eXBlIF9fbGVuID0gKHNpemVfdHlwZSkoX19sYXN0IC0gX19maXJzdCk7CgogIGlmIChfX2xl
biA+PSBfX24pIHsKICAgIF9UcmFpdHM6OmFzc2lnbihfX2ZpcnN0LCBfX24sIF9fYyk7CiAgICBl
cmFzZShfX2ZpcnN0ICsgX19uLCBfX2xhc3QpOwogIH0KICBlbHNlIHsKICAgIF9UcmFpdHM6OmFz
c2lnbihfX2ZpcnN0LCBfX2xlbiwgX19jKTsKICAgIGluc2VydChfX2xhc3QsIF9fbiAtIF9fbGVu
LCBfX2MpOwogIH0KICByZXR1cm4gKnRoaXM7Cn0KIyAzNTMgIi4uL3N0bHBvcnQvc3RsL19zdHJp
bmcuYyIKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9j
PiB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6c2l6ZV90eXBl
CmJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+IDo6ZmluZChjb25zdCBfQ2hhclQq
IF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAp7CiAgaWYgKF9fcG9z
ICsgX19uID4gc2l6ZSgpKQogICAgcmV0dXJuIG5wb3M7CiAgZWxzZSB7CiAgICBjb25zdCBjb25z
dF9wb2ludGVyIF9fcmVzdWx0ID0KICAgICAgX1NUTDo6c2VhcmNoKChjb25zdCBfQ2hhclQqKXRo
aXMtPl9NX3N0YXJ0ICsgX19wb3MsIChjb25zdCBfQ2hhclQqKXRoaXMtPl9NX2ZpbmlzaCwKICAg
ICAgICAgICAgICAgICAgICAgICAgX19zLCBfX3MgKyBfX24sIF9FcV90cmFpdHM8X1RyYWl0cz4o
KSk7CiAgICByZXR1cm4gX19yZXN1bHQgIT0gdGhpcy0+X01fZmluaXNoID8gX19yZXN1bHQgLSB0
aGlzLT5fTV9zdGFydCA6IG5wb3M7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFz
cyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsX1Ry
YWl0cyxfQWxsb2M+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxv
Yz4gOjpmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKewogIGlmIChfX3Bv
cyA+PSBzaXplKCkpCiAgICByZXR1cm4gbnBvczsKICBlbHNlIHsKICAgIGNvbnN0IGNvbnN0X3Bv
aW50ZXIgX19yZXN1bHQgPQogICAgICBfU1RMOjpmaW5kX2lmKChjb25zdCBfQ2hhclQqKXRoaXMt
Pl9NX3N0YXJ0ICsgX19wb3MsIChjb25zdCBfQ2hhclQqKXRoaXMtPl9NX2ZpbmlzaCwKICAgICAg
ICAgICAgICAgICAgICAgICAgIF9FcV9jaGFyX2JvdW5kPF9UcmFpdHM+KF9fYykpOwogICAgcmV0
dXJuIF9fcmVzdWx0ICE9IHRoaXMtPl9NX2ZpbmlzaCA/IF9fcmVzdWx0IC0gdGhpcy0+X01fc3Rh
cnQgOiBucG9zOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywg
Y2xhc3MgX0FsbG9jPiB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9j
Pjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+IDo6cmZpbmQo
Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QK
ewogIGNvbnN0IHNpemVfdCBfX2xlbiA9IHNpemUoKTsKCiAgaWYgKF9fbiA+IF9fbGVuKQogICAg
cmV0dXJuIG5wb3M7CiAgZWxzZSBpZiAoX19uID09IDApCiAgICByZXR1cm4gKG1pbikgKF9fbGVu
LCBfX3Bvcyk7CiAgZWxzZSB7CiAgICBjb25zdF9wb2ludGVyIF9fbGFzdCA9IHRoaXMtPl9NX3N0
YXJ0ICsgKG1pbikgKF9fbGVuIC0gX19uLCBfX3BvcykgKyBfX247CiAgICBjb25zdF9wb2ludGVy
IF9fcmVzdWx0ID0gX1NUTDo6ZmluZF9lbmQoKGNvbnN0X3BvaW50ZXIpdGhpcy0+X01fc3RhcnQs
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fcywgX19zICsgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0VxX3RyYWl0czxfVHJhaXRzPigpKTsKICAgIHJldHVybiBfX3Jlc3VsdCAhPSBf
X2xhc3QgPyBfX3Jlc3VsdCAtIHRoaXMtPl9NX3N0YXJ0IDogbnBvczsKICB9Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4gdHlwZW5hbWUgYmFz
aWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46OnNpemVfdHlwZQpiYXNpY19zdHJpbmc8
X0NoYXJULF9UcmFpdHMsX0FsbG9jPiA6OnJmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3Bv
cykgY29uc3QKewogIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKTsKCiAgaWYgKF9fbGVu
IDwgMSkKICAgIHJldHVybiBucG9zOwogIGVsc2UgewogICAgY29uc3QgY29uc3RfaXRlcmF0b3Ig
X19sYXN0ID0gYmVnaW4oKSArIChtaW4pIChfX2xlbiAtIDEsIF9fcG9zKSArIDE7CiAgICBjb25z
dF9yZXZlcnNlX2l0ZXJhdG9yIF9fcnJlc3VsdCA9CiAgICAgIF9TVEw6OmZpbmRfaWYoY29uc3Rf
cmV2ZXJzZV9pdGVyYXRvcihfX2xhc3QpLCByZW5kKCksCiAgICAgICAgICAgICAgX0VxX2NoYXJf
Ym91bmQ8X1RyYWl0cz4oX19jKSk7CiAgICByZXR1cm4gX19ycmVzdWx0ICE9IHJlbmQoKSA/IChf
X3JyZXN1bHQuYmFzZSgpIC0gMSkgLSBiZWdpbigpIDogbnBvczsKICB9Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4gdHlwZW5hbWUgYmFzaWNf
c3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46OnNpemVfdHlwZQpiYXNpY19zdHJpbmc8X0No
YXJULF9UcmFpdHMsX0FsbG9jPiA6OmZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNp
emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKewogIGlmIChfX3BvcyA+PSBzaXpl
KCkpCiAgICByZXR1cm4gbnBvczsKICBlbHNlIHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fcmVzdWx0
ID0gX19maW5kX2ZpcnN0X29mKGJlZ2luKCkgKyBfX3BvcywgZW5kKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIF9fbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9FcV90cmFpdHM8X1RyYWl0cz4o
KSk7CiAgICByZXR1cm4gX19yZXN1bHQgIT0gZW5kKCkgPyBfX3Jlc3VsdCAtIGJlZ2luKCkgOiBu
cG9zOwogIH0KfQoKCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNz
IF9BbGxvYz4gdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46OnNp
emVfdHlwZQpiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiA6OmZpbmRfbGFzdF9v
Zihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25z
dAp7CiAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpOwoKICBpZiAoX19sZW4gPCAxKQog
ICAgcmV0dXJuIG5wb3M7CiAgZWxzZSB7CiAgICBjb25zdCBjb25zdF9pdGVyYXRvciBfX2xhc3Qg
PSBiZWdpbigpICsgKG1pbikgKF9fbGVuIC0gMSwgX19wb3MpICsgMTsKICAgIGNvbnN0IGNvbnN0
X3JldmVyc2VfaXRlcmF0b3IgX19ycmVzdWx0ID0KICAgICAgX19maW5kX2ZpcnN0X29mKGNvbnN0
X3JldmVyc2VfaXRlcmF0b3IoX19sYXN0KSwgcmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAg
X19zLCBfX3MgKyBfX24sCiAgICAgICAgICAgICAgICAgICAgICBfRXFfdHJhaXRzPF9UcmFpdHM+
KCkpOwogICAgcmV0dXJuIF9fcnJlc3VsdCAhPSByZW5kKCkgPyAoX19ycmVzdWx0LmJhc2UoKSAt
IDEpIC0gYmVnaW4oKSA6IG5wb3M7CiAgfQp9CgoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xh
c3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPiB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULF9U
cmFpdHMsX0FsbG9jPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxs
b2M+IDo6ZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bv
cywgc2l6ZV90eXBlIF9fbikgY29uc3QKewogIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6Y2hh
cl90eXBlIF9DaGFyVHlwZTsKICBpZiAoX19wb3MgPiBzaXplKCkpCiAgICByZXR1cm4gbnBvczsK
ICBlbHNlIHsKICAgIGNvbnN0X3BvaW50ZXIgX19yZXN1bHQgPSBfU1RMOjpmaW5kX2lmKChjb25z
dCBfQ2hhclQqKXRoaXMtPl9NX3N0YXJ0ICsgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGNvbnN0IF9DaGFyVCopdGhpcy0+X01fZmluaXNoLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9Ob3Rfd2l0aGluX3RyYWl0czxfVHJhaXRzPigoY29uc3Qg
X0NoYXJUeXBlKilfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChjb25zdCBfQ2hhclR5cGUqKV9fcyArIF9fbikpOwogICAgcmV0
dXJuIF9fcmVzdWx0ICE9IHRoaXMtPl9NX2ZpbmlzaCA/IF9fcmVzdWx0IC0gdGhpcy0+X01fc3Rh
cnQgOiBucG9zOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywg
Y2xhc3MgX0FsbG9jPiB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9j
Pjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+IDo6ZmluZF9m
aXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAp7CiAgaWYgKF9f
cG9zID4gc2l6ZSgpKQogICAgcmV0dXJuIG5wb3M7CiAgZWxzZSB7CiAgICBjb25zdF9wb2ludGVy
IF9fcmVzdWx0ID0gX1NUTDo6ZmluZF9pZigoY29uc3QgX0NoYXJUKil0aGlzLT5fTV9zdGFydCAr
IF9fcG9zLCAoY29uc3QgX0NoYXJUKil0aGlzLT5fTV9maW5pc2gsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9OZXFfY2hhcl9ib3VuZDxfVHJhaXRzPihf
X2MpKTsKICAgIHJldHVybiBfX3Jlc3VsdCAhPSB0aGlzLT5fTV9maW5pc2ggPyBfX3Jlc3VsdCAt
IHRoaXMtPl9NX3N0YXJ0IDogbnBvczsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNs
YXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4gdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCxf
VHJhaXRzLF9BbGxvYz46OnNpemVfdHlwZQpiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0Fs
bG9jPiA6OmZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bv
cywgc2l6ZV90eXBlIF9fbikgY29uc3QKewogIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6Y2hh
cl90eXBlIF9DaGFyVHlwZTsKICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBzaXplKCk7CgogIGlm
IChfX2xlbiA8IDEpCiAgICByZXR1cm4gbnBvczsKICBlbHNlIHsKICAgIGNvbnN0X2l0ZXJhdG9y
IF9fbGFzdCA9IGJlZ2luKCkgKyAobWluKSAoX19sZW4gLSAxLCBfX3BvcykgKyAxOwogICAgY29u
c3RfcmV2ZXJzZV9pdGVyYXRvciBfX3JsYXN0ID0gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihfX2xh
c3QpOwogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciBfX3JyZXN1bHQgPQogICAgICBfU1RMOjpm
aW5kX2lmKF9fcmxhc3QsIHJlbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Ob3Rfd2l0
aGluX3RyYWl0czxfVHJhaXRzPigoY29uc3QgX0NoYXJUeXBlKilfX3MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IF9DaGFyVHlwZSop
X19zICsgX19uKSk7CiAgICByZXR1cm4gX19ycmVzdWx0ICE9IHJlbmQoKSA/IChfX3JyZXN1bHQu
YmFzZSgpIC0gMSkgLSBiZWdpbigpIDogbnBvczsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ2hh
clQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4gdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9D
aGFyVCxfVHJhaXRzLF9BbGxvYz46OnNpemVfdHlwZQpiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+IDo6ZmluZF9sYXN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19w
b3MpIGNvbnN0CnsKICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBzaXplKCk7CgogIGlmIChfX2xl
biA8IDEpCiAgICByZXR1cm4gbnBvczsKICBlbHNlIHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fbGFz
dCA9IGJlZ2luKCkgKyAobWluKSAoX19sZW4gLSAxLCBfX3BvcykgKyAxOwogICAgY29uc3RfcmV2
ZXJzZV9pdGVyYXRvciBfX3JsYXN0ID0gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihfX2xhc3QpOwog
ICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciBfX3JyZXN1bHQgPQogICAgICBfU1RMOjpmaW5kX2lm
KF9fcmxhc3QsIHJlbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9OZXFfY2hhcl9ib3Vu
ZDxfVHJhaXRzPihfX2MpKTsKICAgIHJldHVybiBfX3JyZXN1bHQgIT0gcmVuZCgpID8gKF9fcnJl
c3VsdC5iYXNlKCkgLSAxKSAtIGJlZ2luKCkgOiBucG9zOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNz
IF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPiB2b2lkIF9TX3N0cmluZ19jb3B5
KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3MsCiAgICAgICAg
ICAgICAgICAgICAgX0NoYXJUKiBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19u
KQp7CiAgaWYgKF9fbiA+IDApIHsKICAgIF9fbiA9IChtaW4pIChfX24gLSAxLCBfX3Muc2l6ZSgp
KTsKICAgIF9TVEw6OmNvcHkoX19zLmJlZ2luKCksIF9fcy5iZWdpbigpICsgX19uLCBfX2J1Zik7
CiAgICBfX2J1ZltfX25dID0gX0NoYXJUKCk7CiAgfQp9Cn0KCgoKCgojIDEgIi4uL3N0bHBvcnQv
c3RsL19zdHJpbmdfZndkLmMiIDEKIyA1MjUgIi4uL3N0bHBvcnQvc3RsL19zdHJpbmcuYyIgMgoK
CgoKCgojIDEgIi4uL3N0bHBvcnQvc3RsL19yYW5nZV9lcnJvcnMuaCIgMQojIDM2ICIuLi9zdGxw
b3J0L3N0bC9fcmFuZ2VfZXJyb3JzLmgiCm5hbWVzcGFjZSBfU1RMIHsKdm9pZCBfX3N0bF90aHJv
d19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX21zZyk7CnZvaWQgX19zdGxfdGhyb3dfb3V0X29m
X3JhbmdlKGNvbnN0IGNoYXIqIF9fbXNnKTsKdm9pZCBfX3N0bF90aHJvd19sZW5ndGhfZXJyb3Io
Y29uc3QgY2hhciogX19tc2cpOwp2b2lkIF9fc3RsX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29u
c3QgY2hhciogX19tc2cpOwp2b2lkIF9fc3RsX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNo
YXIqIF9fbXNnKTsKfQojIDUzMiAiLi4vc3RscG9ydC9zdGwvX3N0cmluZy5jIiAyCm5hbWVzcGFj
ZSBfU1RMIHsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHZvaWQgX1N0cmlu
Z19iYXNlPF9UcCxfQWxsb2M+OjpfTV90aHJvd19sZW5ndGhfZXJyb3IoKSBjb25zdCB7CiAgICBf
X3N0bF90aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZyIpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2M+IHZvaWQgX1N0cmluZ19iYXNlPF9UcCwgX0FsbG9jPjo6X01f
dGhyb3dfb3V0X29mX3JhbmdlKCkgY29uc3QgewogICAgX19zdGxfdGhyb3dfb3V0X29mX3Jhbmdl
KCJiYXNpY19zdHJpbmciKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB2
b2lkIF9TdHJpbmdfYmFzZTxfVHAsIF9BbGxvYz46Ol9NX2FsbG9jYXRlX2Jsb2NrKHNpemVfdCBf
X24pIHsKICBpZiAoKF9fbiA8PSAobWF4X3NpemUoKSsxKSkgJiYgKF9fbj4wKSl7CiAgICBfTV9z
dGFydCA9IF9NX2VuZF9vZl9zdG9yYWdlLmFsbG9jYXRlKF9fbik7CiAgICBfTV9maW5pc2ggPSBf
TV9zdGFydDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlLl9NX2RhdGEgPSBfTV9zdGFydCArIF9fbjsK
ICB9CiAgICBlbHNlCiAgICAgIF9NX3Rocm93X2xlbmd0aF9lcnJvcigpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+IGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OmJhc2ljX3N0cmluZygpCiAgOiBfU3RyaW5nX2Jhc2U8
X0NoYXJULF9BbGxvYz4oYWxsb2NhdG9yX3R5cGUoKSkgewogIHRoaXMtPl9NX3N0YXJ0ID0gdGhp
cy0+X01fZW5kX29mX3N0b3JhZ2UuYWxsb2NhdGUoOCk7CiAgdGhpcy0+X01fZmluaXNoID0gdGhp
cy0+X01fc3RhcnQ7CiAgdGhpcy0+X01fZW5kX29mX3N0b3JhZ2UuX01fZGF0YSA9IHRoaXMtPl9N
X3N0YXJ0ICsgODsKICBfTV90ZXJtaW5hdGVfc3RyaW5nKCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+IGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OmJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsbG9j
YXRvcl90eXBlJiBfX2EpCiAgOiBfU3RyaW5nX2Jhc2U8X0NoYXJULF9BbGxvYz4oX19hKQp7CiAK
ICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX19zLCBfX3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9f
cykpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0Fs
bG9jPiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpiYXNpY19zdHJpbmco
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiAmIF9fcykKICA6IF9T
dHJpbmdfYmFzZTxfQ2hhclQsX0FsbG9jPihfX3MuZ2V0X2FsbG9jYXRvcigpKQp7CiAgX01fcmFu
Z2VfaW5pdGlhbGl6ZShfX3MuX01fc3RhcnQsIF9fcy5fTV9maW5pc2gpOwp9CgoKCgoKfQojIDE0
MDggIi4uL3N0bHBvcnQvc3RsL19zdHJpbmcuaCIgMgoKCiMgMSAiLi4vc3RscG9ydC9zdGwvX3N0
cmluZ19pby5oIiAxCiMgMjQgIi4uL3N0bHBvcnQvc3RsL19zdHJpbmdfaW8uaCIKIyAxICIuLi9z
dGxwb3J0L3N0cmluZyIgMQojIDI0ICIuLi9zdGxwb3J0L3N0cmluZyIKIyAxICIuLi9zdGxwb3J0
L3N0bC9fcHJvbG9nLmgiIDEKIyAyNSAiLi4vc3RscG9ydC9zdHJpbmciIDIKIyA0MiAiLi4vc3Rs
cG9ydC9zdHJpbmciCiMgMSAiLi4vc3RscG9ydC9zdGwvX3N0cmluZy5oIiAxCiMgNDMgIi4uL3N0
bHBvcnQvc3RyaW5nIiAyCgoKCgoKCgojIDEgIi4uL3N0bHBvcnQvc3RsL19lcGlsb2cuaCIgMQoj
IDE0ICIuLi9zdGxwb3J0L3N0bC9fZXBpbG9nLmgiCiMgMSAiLi4vc3RscG9ydC9zdGwvX2NvbmZp
Z19jb21wYXRfcG9zdC5oIiAxCiMgMTUgIi4uL3N0bHBvcnQvc3RsL19lcGlsb2cuaCIgMgojIDUx
ICIuLi9zdGxwb3J0L3N0cmluZyIgMgojIDI1ICIuLi9zdGxwb3J0L3N0bC9fc3RyaW5nX2lvLmgi
IDIKIyAzNiAiLi4vc3RscG9ydC9zdGwvX3N0cmluZ19pby5oIgpuYW1lc3BhY2UgX1NUTCB7CgoK
CnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgpvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPiYgX19vcywKICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU
LF9UcmFpdHMsX0FsbG9jPiYgX19zKTsKCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9U
cmFpdHMsIGNsYXNzIF9BbGxvYz4KYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgpvcGVy
YXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAgICAgICAgICBi
YXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19zKTsKCnRlbXBsYXRlIDxjbGFz
cyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JgpnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19p
cywKICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19zLAogICAg
ICAgIF9DaGFyVCBfX2RlbGltKTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1Ry
YWl0cywgY2xhc3MgX0FsbG9jPgppbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JgpnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAgICAgICBi
YXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19zKQp7CiAgcmV0dXJuIGdldGxp
bmUoX19pcywgX19zLCBfX2lzLndpZGVuKCdcbicpKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfQ2hh
clQsIGNsYXNzIF9UcmFpdHM+CmJvb2wKX19zdGxwX3N0cmluZ19maWxsKGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYgX19vcywKICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVm
PF9DaGFyVCwgX1RyYWl0cz4qIF9fYnVmLAogICAgICAgICAgICAgICAgICBzaXplX3QgX19uKTsK
IyAxMTQgIi4uL3N0bHBvcnQvc3RsL19zdHJpbmdfaW8uaCIKfQoKCgoKIyAxICIuLi9zdGxwb3J0
L3N0bC9fc3RyaW5nX2lvLmMiIDEKCgoKCgoKCm5hbWVzcGFjZSBfU1RMIHsKIyAxOCAiLi4vc3Rs
cG9ydC9zdGwvX3N0cmluZ19pby5jIgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJh
aXRzPgpib29sCl9fc3RscF9zdHJpbmdfZmlsbChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mIF9fb3MsCiAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp
dHM+KiBfX2J1ZiwKICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikKewogIF9DaGFyVCBfX2Yg
PSBfX29zLmZpbGwoKTsKICBzaXplX3QgX19pOwogIGJvb2wgX19vayA9IHRydWU7CgogIGZvciAo
X19pID0gMDsgX19pIDwgX19uOyArK19faSkKICAgIF9fb2sgPSBfX29rICYmICFfVHJhaXRzOjpl
cV9pbnRfdHlwZShfX2J1Zi0+c3B1dGMoX19mKSwgX1RyYWl0czo6ZW9mKCkpOwogIHJldHVybiBf
X29rOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxs
b2M+CmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKb3BlcmF0b3I8PChiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCiAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5n
PF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fcykKewoKIAogIHR5cGVkZWYgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbTsKICB0eXBlbmFtZSBfX29zdHJlYW06OnNlbnRy
eSBfX3NlbnRyeShfX29zKTsKICBib29sIF9fb2sgPSBmYWxzZTsKCiAgaWYgKF9fc2VudHJ5KSB7
CiAgICBfX29rID0gdHJ1ZTsKICAgIHNpemVfdCBfX24gPSBfX3Muc2l6ZSgpOwogICAgc2l6ZV90
IF9fcGFkX2xlbiA9IDA7CiAgICBjb25zdCBib29sIF9fbGVmdCA9IChfX29zLmZsYWdzKCkgJiBf
X29zdHJlYW06OmxlZnQpICE9IDA7CiAgICBjb25zdCBzaXplX3QgX193ID0gX19vcy53aWR0aCgw
KTsKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX2J1ZiA9IF9fb3MucmRi
dWYoKTsKCiAgICBpZiAoX19uIDwgX193KSB7CiAgICAgIF9fcGFkX2xlbiA9IF9fdyAtIF9fbjsK
ICAgIH0KCiAgICBpZiAoIV9fbGVmdCkKICAgICAgX19vayA9IF9fc3RscF9zdHJpbmdfZmlsbChf
X29zLCBfX2J1ZiwgX19wYWRfbGVuKTsKCiAgICBfX29rID0gX19vayAmJiAoX19idWYtPnNwdXRu
KF9fcy5kYXRhKCksIHN0cmVhbXNpemUoX19uKSkgPT0gc3RyZWFtc2l6ZShfX24pKTsKCiAgICBp
ZiAoX19sZWZ0KQogICAgICBfX29rID0gX19vayAmJiBfX3N0bHBfc3RyaW5nX2ZpbGwoX19vcywg
X19idWYsIF9fcGFkX2xlbik7CiAgfQoKICBpZiAoIV9fb2spCiAgICBfX29zLnNldHN0YXRlKF9f
b3N0cmVhbTo6ZmFpbGJpdCk7CgogIHJldHVybiBfX29zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0No
YXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CmJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMs
CiAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLCBfQWxsb2M+JiBfX3MpCnsK
IAogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbTsKICB0
eXBlbmFtZSBfX2lzdHJlYW06OnNlbnRyeSBfX3NlbnRyeShfX2lzKTsKCiAgaWYgKF9fc2VudHJ5
KSB7CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19idWYgPSBfX2lzLnJk
YnVmKCk7CiAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX0NfdHlwZTsKCgoKICAgIGNvbnN0IF9D
X3R5cGUmIF9DdHlwZSA9ICooY29uc3QgX0NfdHlwZSopX19pcy5fTV9jdHlwZV9mYWNldCgpOwoj
IDk5ICIuLi9zdGxwb3J0L3N0bC9fc3RyaW5nX2lvLmMiCiAgICBfX3MuY2xlYXIoKTsKICAgIHNp
emVfdCBfX24gPSBfX2lzLndpZHRoKDApOwogICAgaWYgKF9fbiA9PSAwKQogICAgICBfX24gPSBz
dGF0aWNfY2FzdDxzaXplX3Q+KC0xKTsKICAgIGVsc2UKICAgICAgX19zLnJlc2VydmUoX19uKTsK
CgogICAgd2hpbGUgKF9fbi0tID4gMCkgewogICAgICB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlw
ZSBfX2MxID0gX19idWYtPnNidW1wYygpOwogICAgICBpZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUo
X19jMSwgX1RyYWl0czo6ZW9mKCkpKSB7CiAgICAgICAgX19pcy5zZXRzdGF0ZShfX2lzdHJlYW06
OmVvZmJpdCk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX0No
YXJUIF9fYyA9IF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MxKTsKCiAgICAgICAgaWYgKF9DdHlw
ZS5pcyhfQ190eXBlOjpzcGFjZSwgX19jKSkgewogICAgICAgICAgaWYgKF9UcmFpdHM6OmVxX2lu
dF90eXBlKF9fYnVmLT5zcHV0YmFja2MoX19jKSwgX1RyYWl0czo6ZW9mKCkpKQogICAgICAgICAg
ICBfX2lzLnNldHN0YXRlKF9faXN0cmVhbTo6ZmFpbGJpdCk7CiAgICAgICAgICBicmVhazsKICAg
ICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX19zLnB1c2hfYmFjayhfX2MpOwogICAgICB9
CiAgICB9CgoKICAgIGlmIChfX3Muc2l6ZSgpID09IDApCiAgICAgIF9faXMuc2V0c3RhdGUoX19p
c3RyZWFtOjpmYWlsYml0KTsKICB9CiAgZWxzZQogICAgX19pcy5zZXRzdGF0ZShfX2lzdHJlYW06
OmZhaWxiaXQpOwoKICByZXR1cm4gX19pczsKfQoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xh
c3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CmdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAogICAgICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3MsCiAgICAgICAgX0NoYXJUIF9f
ZGVsaW0pCnsKIAogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0
cmVhbTsKICBzaXplX3QgX19ucmVhZCA9IDA7CiAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjpzZW50cnkgX19zZW50cnkoX19pcywgdHJ1ZSk7CiAgaWYgKF9fc2VudHJ5
KSB7CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19idWYgPSBfX2lzLnJk
YnVmKCk7CiAgICBfX3MuY2xlYXIoKTsKCiAgICB3aGlsZSAoX19ucmVhZCA8IF9fcy5tYXhfc2l6
ZSgpKSB7CiAgICAgIGludCBfX2MxID0gX19idWYtPnNidW1wYygpOwogICAgICBpZiAoX1RyYWl0
czo6ZXFfaW50X3R5cGUoX19jMSwgX1RyYWl0czo6ZW9mKCkpKSB7CiAgICAgICAgX19pcy5zZXRz
dGF0ZShfX2lzdHJlYW06OmVvZmJpdCk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgZWxz
ZSB7CiAgICAgICAgKytfX25yZWFkOwogICAgICAgIF9DaGFyVCBfX2MgPSBfVHJhaXRzOjp0b19j
aGFyX3R5cGUoX19jMSk7CiAgICAgICAgaWYgKCFfVHJhaXRzOjplcShfX2MsIF9fZGVsaW0pKQog
ICAgICAgICAgX19zLnB1c2hfYmFjayhfX2MpOwogICAgICAgIGVsc2UKICAgICAgICAgIGJyZWFr
OwogICAgICB9CiAgICB9CiAgfQogIGlmIChfX25yZWFkID09IDAgfHwgX19ucmVhZCA+PSBfX3Mu
bWF4X3NpemUoKSkKICAgIF9faXMuc2V0c3RhdGUoX19pc3RyZWFtOjpmYWlsYml0KTsKCiAgcmV0
dXJuIF9faXM7Cn0KIyAzMjEgIi4uL3N0bHBvcnQvc3RsL19zdHJpbmdfaW8uYyIKfQojIDEyMCAi
Li4vc3RscG9ydC9zdGwvX3N0cmluZ19pby5oIiAyCiMgMTQxMSAiLi4vc3RscG9ydC9zdGwvX3N0
cmluZy5oIiAyCiMgMSAiLi4vc3RscG9ydC9zdGwvX3N0cmluZ19oYXNoLmgiIDEKIyAyMyAiLi4v
c3RscG9ydC9zdGwvX3N0cmluZ19oYXNoLmgiCiMgMSAiLi4vc3RscG9ydC9zdGwvX2hhc2hfZnVu
LmgiIDEKIyAzOCAiLi4vc3RscG9ydC9zdGwvX2hhc2hfZnVuLmgiCm5hbWVzcGFjZSBfU1RMIHsK
CnRlbXBsYXRlIDxjbGFzcyBfS2V5PiBzdHJ1Y3QgaGFzaCB7IH07CgppbmxpbmUgc2l6ZV90IF9f
c3RsX2hhc2hfc3RyaW5nKGNvbnN0IGNoYXIqIF9fcykKewogCiAgdW5zaWduZWQgbG9uZyBfX2gg
PSAwOwogIGZvciAoIDsgKl9fczsgKytfX3MpCiAgICBfX2ggPSA1Kl9faCArICpfX3M7CgogIHJl
dHVybiBzaXplX3QoX19oKTsKfQoKdGVtcGxhdGU8PiBzdHJ1Y3QgaGFzaDxjaGFyKj4KewogIHNp
emVfdCBvcGVyYXRvcigpKGNvbnN0IGNoYXIqIF9fcykgY29uc3QgeyByZXR1cm4gX19zdGxfaGFz
aF9zdHJpbmcoX19zKTsgfQp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgaGFzaDxjb25zdCBjaGFyKj4K
ewogIHNpemVfdCBvcGVyYXRvcigpKGNvbnN0IGNoYXIqIF9fcykgY29uc3QgeyByZXR1cm4gX19z
dGxfaGFzaF9zdHJpbmcoX19zKTsgfQp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgaGFzaDxjaGFyPiB7
CiAgc2l6ZV90IG9wZXJhdG9yKCkoY2hhciBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9Owp0
ZW1wbGF0ZTw+IHN0cnVjdCBoYXNoPHVuc2lnbmVkIGNoYXI+IHsKICBzaXplX3Qgb3BlcmF0b3Io
KSh1bnNpZ25lZCBjaGFyIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZTw+
IHN0cnVjdCBoYXNoPHNpZ25lZCBjaGFyPiB7CiAgc2l6ZV90IG9wZXJhdG9yKCkodW5zaWduZWQg
Y2hhciBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgaGFz
aDxzaG9ydD4gewogIHNpemVfdCBvcGVyYXRvcigpKHNob3J0IF9feCkgY29uc3QgeyByZXR1cm4g
X194OyB9Cn07CnRlbXBsYXRlPD4gc3RydWN0IGhhc2g8dW5zaWduZWQgc2hvcnQ+IHsKICBzaXpl
X3Qgb3BlcmF0b3IoKSh1bnNpZ25lZCBzaG9ydCBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9
Owp0ZW1wbGF0ZTw+IHN0cnVjdCBoYXNoPGludD4gewogIHNpemVfdCBvcGVyYXRvcigpKGludCBf
X3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9Owp0ZW1wbGF0ZTw+IHN0cnVjdCBoYXNoPHVuc2ln
bmVkIGludD4gewogIHNpemVfdCBvcGVyYXRvcigpKHVuc2lnbmVkIGludCBfX3gpIGNvbnN0IHsg
cmV0dXJuIF9feDsgfQp9Owp0ZW1wbGF0ZTw+IHN0cnVjdCBoYXNoPGxvbmc+IHsKICBzaXplX3Qg
b3BlcmF0b3IoKShsb25nIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Cn07CnRlbXBsYXRlPD4g
c3RydWN0IGhhc2g8dW5zaWduZWQgbG9uZz4gewogIHNpemVfdCBvcGVyYXRvcigpKHVuc2lnbmVk
IGxvbmcgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KfTsKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBo
YXNoPGxvbmcgbG9uZz4gewogIHNpemVfdCBvcGVyYXRvcigpKGxvbmcgeCkgY29uc3QgeyByZXR1
cm4geDsgfQp9Owp0ZW1wbGF0ZTw+IHN0cnVjdCBoYXNoPHVuc2lnbmVkIGxvbmcgbG9uZz4gewog
IHNpemVfdCBvcGVyYXRvcigpKHVuc2lnbmVkIGxvbmcgeCkgY29uc3QgeyByZXR1cm4geDsgfQp9
OwoKCn0KIyAyNCAiLi4vc3RscG9ydC9zdGwvX3N0cmluZ19oYXNoLmgiIDIKCgoKCgoKbmFtZXNw
YWNlIF9TVEwgewoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3Mg
X0FsbG9jPgppbmxpbmUgc2l6ZV90Cl9fc3RsX3N0cmluZ19oYXNoKGNvbnN0IGJhc2ljX3N0cmlu
ZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3MpIHsKICB1bnNpZ25lZCBsb25nIF9faCA9IDA7
CiAgdHlwZWRlZiB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6
Y29uc3RfcG9pbnRlciBjb25zdF9wdHI7CiAgc2l6ZV90IF9fbGVuID0gX19zLnNpemUoKTsKICBj
b25zdCBfQ2hhclQqIF9fZGF0YSA9IF9fcy5kYXRhKCk7CiAgZm9yICggc2l6ZV90IF9faSA9IDA7
IF9faSA8IF9fbGVuOyArK19faSkKICAgIF9faCA9IDUqX19oICsgX19kYXRhW19faV07CiAgcmV0
dXJuIHNpemVfdChfX2gpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFp
dHMsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IGhhc2g8YmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRz
LF9BbGxvYz4gPiB7CiAgc2l6ZV90IG9wZXJhdG9yKCkoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
VCxfVHJhaXRzLF9BbGxvYz4mIF9fcykgY29uc3QKICAgIHsgcmV0dXJuIF9fc3RsX3N0cmluZ19o
YXNoKF9fcyk7IH0KfTsKIyA2OCAiLi4vc3RscG9ydC9zdGwvX3N0cmluZ19oYXNoLmgiCn0KIyAx
NDEyICIuLi9zdGxwb3J0L3N0bC9fc3RyaW5nLmgiIDIKIyAzMiAiLi4vc3RscG9ydC9zdGwvX2lv
c19iYXNlLmgiIDIKCgpuYW1lc3BhY2UgX1NUTCB7CiMgNDUgIi4uL3N0bHBvcnQvc3RsL19pb3Nf
YmFzZS5oIgpjbGFzcyBpb3NfYmFzZSB7CnB1YmxpYzoKCiAgY2xhc3MgZmFpbHVyZSA6IHB1Ymxp
YyBfX05hbWVkX2V4Y2VwdGlvbiB7CiAgcHVibGljOgogICAgZXhwbGljaXQgZmFpbHVyZShjb25z
dCBzdHJpbmcmKTsKICAgIHZpcnR1YWwgfmZhaWx1cmUoKSB0aHJvdygpOwogIH07CgogIHR5cGVk
ZWYgaW50IGZtdGZsYWdzOwogIHR5cGVkZWYgaW50IGlvc3RhdGU7CiAgdHlwZWRlZiBpbnQgb3Bl
bm1vZGU7CiAgdHlwZWRlZiBpbnQgc2Vla2RpcjsKCgogIHR5cGVkZWYgZm10ZmxhZ3MgZm10X2Zs
YWdzOwoKCgoKCgoKICBzdGF0aWMgY29uc3QgaW50CgogICAgbGVmdCA9IDB4MDAwMSwKICAgIHJp
Z2h0ID0gMHgwMDAyLAogICAgaW50ZXJuYWwgPSAweDAwMDQsCiAgICBkZWMgPSAweDAwMDgsCiAg
ICBoZXggPSAweDAwMTAsCiAgICBvY3QgPSAweDAwMjAsCiAgICBmaXhlZCA9IDB4MDA0MCwKICAg
IHNjaWVudGlmaWMgPSAweDAwODAsCiAgICBib29sYWxwaGEgPSAweDAxMDAsCiAgICBzaG93YmFz
ZSA9IDB4MDIwMCwKICAgIHNob3dwb2ludCA9IDB4MDQwMCwKICAgIHNob3dwb3MgPSAweDA4MDAs
CiAgICBza2lwd3MgPSAweDEwMDAsCiAgICB1bml0YnVmID0gMHgyMDAwLAogICAgdXBwZXJjYXNl
ID0gMHg0MDAwLAogICAgYWRqdXN0ZmllbGQgPSBsZWZ0IHwgcmlnaHQgfCBpbnRlcm5hbCwKICAg
IGJhc2VmaWVsZCA9IGRlYyB8IGhleCB8IG9jdCwKICAgIGZsb2F0ZmllbGQgPSBzY2llbnRpZmlj
IHwgZml4ZWQsCgoKICAgIGdvb2RiaXQgPSAweDAwLAogICAgYmFkYml0ID0gMHgwMSwKICAgIGVv
ZmJpdCA9IDB4MDIsCiAgICBmYWlsYml0ID0gMHgwNCwKCgogICAgX19kZWZhdWx0X21vZGUgPSAw
eDAsCiAgICBhcHAgPSAweDAxLAogICAgYXRlID0gMHgwMiwKICAgIGJpbmFyeSA9IDB4MDQsCiAg
ICBpbiA9IDB4MDgsCiAgICBvdXQgPSAweDEwLAogICAgdHJ1bmMgPSAweDIwLAoKCgogICAgYmVn
ID0gMHgwMSwKICAgIGN1ciA9IDB4MDIsCiAgICBlbmQgPSAweDA0CgoKCiAgOwoKcHVibGljOgog
IGZtdGZsYWdzIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gX01fZm10ZmxhZ3M7IH0KICBmbXRmbGFn
cyBmbGFncyhmbXRmbGFncyBfX2ZsYWdzKSB7CiAgICBmbXRmbGFncyBfX3RtcCA9IF9NX2ZtdGZs
YWdzOwogICAgX01fZm10ZmxhZ3MgPSBfX2ZsYWdzOwogICAgcmV0dXJuIF9fdG1wOwogIH0KCiAg
Zm10ZmxhZ3Mgc2V0ZihmbXRmbGFncyBfX2ZsYWcpIHsKICAgIGZtdGZsYWdzIF9fdG1wID0gX01f
Zm10ZmxhZ3M7CiAgICBfTV9mbXRmbGFncyB8PSBfX2ZsYWc7CiAgICByZXR1cm4gX190bXA7CiAg
fQogIGZtdGZsYWdzIHNldGYoZm10ZmxhZ3MgX19mbGFnLCBmbXRmbGFncyBfX21hc2spIHsKICAg
IGZtdGZsYWdzIF9fdG1wID0gX01fZm10ZmxhZ3M7CiAgICBfTV9mbXRmbGFncyAmPSB+X19tYXNr
OwogICAgX01fZm10ZmxhZ3MgfD0gX19mbGFnICYgX19tYXNrOwogICAgcmV0dXJuIF9fdG1wOwog
IH0KICB2b2lkIHVuc2V0ZihmbXRmbGFncyBfX21hc2spIHsgX01fZm10ZmxhZ3MgJj0gfl9fbWFz
azsgfQoKICBzdHJlYW1zaXplIHByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIF9NX3ByZWNpc2lv
bjsgfQogIHN0cmVhbXNpemUgcHJlY2lzaW9uKHN0cmVhbXNpemUgX19uZXdwcmVjaXNpb24pIHsK
ICAgIHN0cmVhbXNpemUgX190bXAgPSBfTV9wcmVjaXNpb247CiAgICBfTV9wcmVjaXNpb24gPSBf
X25ld3ByZWNpc2lvbjsKICAgIHJldHVybiBfX3RtcDsKICB9CgogIHN0cmVhbXNpemUgd2lkdGgo
KSBjb25zdCB7IHJldHVybiBfTV93aWR0aDsgfQogIHN0cmVhbXNpemUgd2lkdGgoc3RyZWFtc2l6
ZSBfX25ld3dpZHRoKSB7CiAgICBzdHJlYW1zaXplIF9fdG1wID0gX01fd2lkdGg7CiAgICBfTV93
aWR0aCA9IF9fbmV3d2lkdGg7CiAgICByZXR1cm4gX190bXA7CiAgfQoKcHVibGljOgogIGxvY2Fs
ZSBpbWJ1ZShjb25zdCBsb2NhbGUmKTsKICBsb2NhbGUgZ2V0bG9jKCkgY29uc3QgeyByZXR1cm4g
X01fbG9jYWxlOyB9CgpwdWJsaWM6CiAgc3RhdGljIGludCB4YWxsb2MoKTsKICBsb25nJiBpd29y
ZChpbnQgX19pbmRleCk7CiAgdm9pZComIHB3b3JkKGludCBfX2luZGV4KTsKCnB1YmxpYzoKICB2
aXJ0dWFsIH5pb3NfYmFzZSgpOwoKcHVibGljOgogIGVudW0gZXZlbnQgeyBlcmFzZV9ldmVudCwg
aW1idWVfZXZlbnQsIGNvcHlmbXRfZXZlbnQgfTsKICB0eXBlZGVmIHZvaWQgKCpldmVudF9jYWxs
YmFjaykoZXZlbnQsIGlvc19iYXNlJiwgaW50IF9faW5kZXgpOwogIHZvaWQgcmVnaXN0ZXJfY2Fs
bGJhY2soZXZlbnRfY2FsbGJhY2sgX19mbiwgaW50IF9faW5kZXgpOwoKcHVibGljOgoKCiAgc3Rh
dGljIGJvb2wgc3luY193aXRoX3N0ZGlvKGJvb2wgX19zeW5jID0gdHJ1ZSk7CgpwdWJsaWM6CgoK
CiAgb3BlcmF0b3Igdm9pZCooKSBjb25zdCB7IHJldHVybiAhZmFpbCgpID8gKHZvaWQqKSBjb25z
dF9jYXN0PGlvc19iYXNlKj4odGhpcykgOiAodm9pZCopIDA7IH0KICBib29sIG9wZXJhdG9yISgp
IGNvbnN0IHsgcmV0dXJuIGZhaWwoKTsgfQoKICBpb3N0YXRlIHJkc3RhdGUoKSBjb25zdCB7IHJl
dHVybiBfTV9pb3N0YXRlOyB9CgogIGJvb2wgZ29vZCgpIGNvbnN0IHsgcmV0dXJuIF9NX2lvc3Rh
dGUgPT0gMDsgfQogIGJvb2wgZW9mKCkgY29uc3QgeyByZXR1cm4gKF9NX2lvc3RhdGUgJiBlb2Zi
aXQpICE9IDA7IH0KICBib29sIGZhaWwoKSBjb25zdCB7IHJldHVybiAoX01faW9zdGF0ZSAmIChm
YWlsYml0IHwgYmFkYml0KSkgIT0gMDsgfQogIGJvb2wgYmFkKCkgY29uc3QgeyByZXR1cm4gKF9N
X2lvc3RhdGUgJiBiYWRiaXQpICE9IDA7IH0KCnByb3RlY3RlZDoKCgoKCgogIHZvaWQgX01fY29w
eV9zdGF0ZShjb25zdCBpb3NfYmFzZSYgX194KTsKCiAgdm9pZCBfTV9zZXRzdGF0ZV9ub3Rocm93
KGlvc3RhdGUgX19zdGF0ZSkgeyBfTV9pb3N0YXRlIHw9IF9fc3RhdGU7IH0KICB2b2lkIF9NX2Ns
ZWFyX25vdGhyb3coaW9zdGF0ZSBfX3N0YXRlKSB7IF9NX2lvc3RhdGUgPSBfX3N0YXRlOyB9CiAg
aW9zdGF0ZSBfTV9nZXRfZXhjZXB0aW9uX21hc2soKSBjb25zdCB7IHJldHVybiBfTV9leGNlcHRp
b25fbWFzazsgfQogIHZvaWQgX01fc2V0X2V4Y2VwdGlvbl9tYXNrKGlvc3RhdGUgX19tYXNrKSB7
IF9NX2V4Y2VwdGlvbl9tYXNrID0gX19tYXNrOyB9CiAgdm9pZCBfTV9jaGVja19leGNlcHRpb25f
bWFzaygpCiAgICB7IGlmIChfTV9pb3N0YXRlICYgX01fZXhjZXB0aW9uX21hc2spIF9NX3Rocm93
X2ZhaWx1cmUoKTsgfQoKICB2b2lkIF9NX2ludm9rZV9jYWxsYmFja3MoZXZlbnQpOwogIHZvaWQg
X01fdGhyb3dfZmFpbHVyZSgpOwoKICBpb3NfYmFzZSgpOwoKcHJvdGVjdGVkOgogIHN0YXRpYyB2
b2lkIF9TX2luaXRpYWxpemUoKTsKICBzdGF0aWMgdm9pZCBfU191bmluaXRpYWxpemUoKTsKICBz
dGF0aWMgYm9vbCBfU193YXNfc3luY2VkOwoKcHJpdmF0ZToKCiAgaW9zX2Jhc2UoY29uc3QgaW9z
X2Jhc2UmKTsKICB2b2lkIG9wZXJhdG9yPShjb25zdCBpb3NfYmFzZSYpOwoKcHJpdmF0ZToKCiAg
Zm10ZmxhZ3MgX01fZm10ZmxhZ3M7CiAgaW9zdGF0ZSBfTV9pb3N0YXRlOwogIG9wZW5tb2RlIF9N
X29wZW5tb2RlOwogIHNlZWtkaXIgX01fc2Vla2RpcjsKICBpb3N0YXRlIF9NX2V4Y2VwdGlvbl9t
YXNrOwoKICBzdHJlYW1zaXplIF9NX3ByZWNpc2lvbjsKICBzdHJlYW1zaXplIF9NX3dpZHRoOwoK
ICBsb2NhbGUgX01fbG9jYWxlOwoKICBwYWlyPGV2ZW50X2NhbGxiYWNrLCBpbnQ+KiBfTV9jYWxs
YmFja3M7CiAgc2l6ZV90IF9NX251bV9jYWxsYmFja3M7CiAgc2l6ZV90IF9NX2NhbGxiYWNrX2lu
ZGV4OwoKCiAgbG9uZyogX01faXdvcmRzOwogIHNpemVfdCBfTV9udW1faXdvcmRzOwoKICB2b2lk
KiogX01fcHdvcmRzOwogIHNpemVfdCBfTV9udW1fcHdvcmRzOwoKICBzdGF0aWMgaW50IF9TX2lu
ZGV4OwoKcHJvdGVjdGVkOgoKICBsb2NhbGU6OmZhY2V0KiBfTV9jYWNoZWRfY3R5cGU7CiAgbG9j
YWxlOjpmYWNldCogX01fY2FjaGVkX251bXB1bmN0OwogIHN0cmluZyBfTV9jYWNoZWRfZ3JvdXBp
bmc7CnB1YmxpYzoKCiAgY29uc3QgbG9jYWxlOjpmYWNldCogX01fY3R5cGVfZmFjZXQoKSBjb25z
dCB7IHJldHVybiBfTV9jYWNoZWRfY3R5cGU7IH0KICBjb25zdCBsb2NhbGU6OmZhY2V0KiBfTV9u
dW1wdW5jdF9mYWNldCgpIGNvbnN0IHsgcmV0dXJuIF9NX2NhY2hlZF9udW1wdW5jdDsgfQogIGNv
bnN0IHN0cmluZyYgX01fZ3JvdXBpbmcoKSBjb25zdCB7IHJldHVybiBfTV9jYWNoZWRfZ3JvdXBp
bmc7IH0KcHVibGljOgoKCgoKCgoKICBjbGFzcyBJbml0IHsKICBwdWJsaWM6CiAgICBJbml0KCk7
CiAgICB+SW5pdCgpOwogIHByaXZhdGU6CiAgICBzdGF0aWMgbG9uZyBfU19jb3VudDsKICAgIGZy
aWVuZCBjbGFzcyBpb3NfYmFzZTsKICB9OwoKCiAgY2xhc3MgX0xvY19pbml0IHsKICBwdWJsaWM6
CiAgICBfTG9jX2luaXQoKTsKICAgIH5fTG9jX2luaXQoKTsKICBwcml2YXRlOgogICAgc3RhdGlj
IGxvbmcgX1NfY291bnQ7CiAgICBmcmllbmQgY2xhc3MgaW9zX2Jhc2U7CiAgfTsKCiAgZnJpZW5k
IGNsYXNzIEluaXQ7CgpwdWJsaWM6CgoKICB0eXBlZGVmIGlvc3RhdGUgaW9fc3RhdGU7CiAgdHlw
ZWRlZiBvcGVubW9kZSBvcGVuX21vZGU7CiAgdHlwZWRlZiBzZWVrZGlyIHNlZWtfZGlyOwogIHR5
cGVkZWYgX1NUTDo6c3RyZWFtb2ZmIHN0cmVhbW9mZjsKICB0eXBlZGVmIF9TVEw6OnN0cmVhbXBv
cyBzdHJlYW1wb3M7Cgp9OwoKdGVtcGxhdGUgPGNsYXNzIEZhY2V0Pgpsb2NhbGU6OmZhY2V0KiBf
TV9nZXRfZmFjZXQoaW9zX2Jhc2UmIF9faSwgRmFjZXQqKQp7Cgp9CgoKCgoKCmlubGluZSBpb3Nf
YmFzZSYgYm9vbGFscGhhKGlvc19iYXNlJiBfX3MpCiAgeyBfX3Muc2V0Zihpb3NfYmFzZTo6Ym9v
bGFscGhhKTsgcmV0dXJuIF9fczt9CgppbmxpbmUgaW9zX2Jhc2UmIG5vYm9vbGFscGhhKGlvc19i
YXNlJiBfX3MpCiAgeyBfX3MudW5zZXRmKGlvc19iYXNlOjpib29sYWxwaGEpOyByZXR1cm4gX19z
O30KCmlubGluZSBpb3NfYmFzZSYgc2hvd2Jhc2UoaW9zX2Jhc2UmIF9fcykKICB7IF9fcy5zZXRm
KGlvc19iYXNlOjpzaG93YmFzZSk7IHJldHVybiBfX3M7fQoKaW5saW5lIGlvc19iYXNlJiBub3No
b3diYXNlKGlvc19iYXNlJiBfX3MpCiAgeyBfX3MudW5zZXRmKGlvc19iYXNlOjpzaG93YmFzZSk7
IHJldHVybiBfX3M7fQoKaW5saW5lIGlvc19iYXNlJiBzaG93cG9pbnQoaW9zX2Jhc2UmIF9fcykK
ICB7IF9fcy5zZXRmKGlvc19iYXNlOjpzaG93cG9pbnQpOyByZXR1cm4gX19zO30KCmlubGluZSBp
b3NfYmFzZSYgbm9zaG93cG9pbnQoaW9zX2Jhc2UmIF9fcykKICB7IF9fcy51bnNldGYoaW9zX2Jh
c2U6OnNob3dwb2ludCk7IHJldHVybiBfX3M7fQoKaW5saW5lIGlvc19iYXNlJiBzaG93cG9zKGlv
c19iYXNlJiBfX3MpCiAgeyBfX3Muc2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7IHJldHVybiBfX3M7
fQoKaW5saW5lIGlvc19iYXNlJiBub3Nob3dwb3MoaW9zX2Jhc2UmIF9fcykKICB7IF9fcy51bnNl
dGYoaW9zX2Jhc2U6OnNob3dwb3MpOyByZXR1cm4gX19zO30KCmlubGluZSBpb3NfYmFzZSYgc2tp
cHdzKGlvc19iYXNlJiBfX3MpCiAgeyBfX3Muc2V0Zihpb3NfYmFzZTo6c2tpcHdzKTsgcmV0dXJu
IF9fczt9CgppbmxpbmUgaW9zX2Jhc2UmIG5vc2tpcHdzKGlvc19iYXNlJiBfX3MpCiAgeyBfX3Mu
dW5zZXRmKGlvc19iYXNlOjpza2lwd3MpOyByZXR1cm4gX19zO30KCmlubGluZSBpb3NfYmFzZSYg
dXBwZXJjYXNlKGlvc19iYXNlJiBfX3MpCiAgeyBfX3Muc2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNl
KTsgcmV0dXJuIF9fczt9CgppbmxpbmUgaW9zX2Jhc2UmIG5vdXBwZXJjYXNlKGlvc19iYXNlJiBf
X3MpCiAgeyBfX3MudW5zZXRmKGlvc19iYXNlOjp1cHBlcmNhc2UpOyByZXR1cm4gX19zO30KCmlu
bGluZSBpb3NfYmFzZSYgdW5pdGJ1Zihpb3NfYmFzZSYgX19zKQogIHsgX19zLnNldGYoaW9zX2Jh
c2U6OnVuaXRidWYpOyByZXR1cm4gX19zO30KCmlubGluZSBpb3NfYmFzZSYgbm91bml0YnVmKGlv
c19iYXNlJiBfX3MpCiAgeyBfX3MudW5zZXRmKGlvc19iYXNlOjp1bml0YnVmKTsgcmV0dXJuIF9f
czt9CgoKCmlubGluZSBpb3NfYmFzZSYgaW50ZXJuYWwoaW9zX2Jhc2UmIF9fcykKICB7IF9fcy5z
ZXRmKGlvc19iYXNlOjppbnRlcm5hbCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsgcmV0dXJuIF9f
czsgfQoKaW5saW5lIGlvc19iYXNlJiBsZWZ0KGlvc19iYXNlJiBfX3MpCiAgeyBfX3Muc2V0Zihp
b3NfYmFzZTo6bGVmdCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsgcmV0dXJuIF9fczsgfQoKaW5s
aW5lIGlvc19iYXNlJiByaWdodChpb3NfYmFzZSYgX19zKQogIHsgX19zLnNldGYoaW9zX2Jhc2U6
OnJpZ2h0LCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOyByZXR1cm4gX19zOyB9CgoKaW5saW5lIGlv
c19iYXNlJiBkZWMoaW9zX2Jhc2UmIF9fcykKICB7IF9fcy5zZXRmKGlvc19iYXNlOjpkZWMsIGlv
c19iYXNlOjpiYXNlZmllbGQpOyByZXR1cm4gX19zOyB9CgppbmxpbmUgaW9zX2Jhc2UmIGhleChp
b3NfYmFzZSYgX19zKQogIHsgX19zLnNldGYoaW9zX2Jhc2U6OmhleCwgaW9zX2Jhc2U6OmJhc2Vm
aWVsZCk7IHJldHVybiBfX3M7IH0KCmlubGluZSBpb3NfYmFzZSYgb2N0KGlvc19iYXNlJiBfX3Mp
CiAgeyBfX3Muc2V0Zihpb3NfYmFzZTo6b2N0LCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsgcmV0dXJu
IF9fczsgfQoKCgppbmxpbmUgaW9zX2Jhc2UmIGZpeGVkKGlvc19iYXNlJiBfX3MpCiAgeyBfX3Mu
c2V0Zihpb3NfYmFzZTo6Zml4ZWQsIGlvc19iYXNlOjpmbG9hdGZpZWxkKTsgcmV0dXJuIF9fczsg
fQoKaW5saW5lIGlvc19iYXNlJiBzY2llbnRpZmljKGlvc19iYXNlJiBfX3MpCiAgeyBfX3Muc2V0
Zihpb3NfYmFzZTo6c2NpZW50aWZpYywgaW9zX2Jhc2U6OmZsb2F0ZmllbGQpOyByZXR1cm4gX19z
OyB9CiMgMzk5ICIuLi9zdGxwb3J0L3N0bC9faW9zX2Jhc2UuaCIKfQojIDIzICIuLi9zdGxwb3J0
L3N0bC9fc3RyZWFtYnVmLmgiIDIKCgoKCiMgMSAiLi4vc3RscG9ydC9zdGwvX3N0ZGlvX2ZpbGUu
aCIgMQojIDY5ICIuLi9zdGxwb3J0L3N0bC9fc3RkaW9fZmlsZS5oIgojIDEgIi4uL3N0bHBvcnQv
Y3N0ZGlvIiAxCiMgMjMgIi4uL3N0bHBvcnQvY3N0ZGlvIgojIDEgIi4uL3N0bHBvcnQvc3RsL19w
cm9sb2cuaCIgMQojIDI0ICIuLi9zdGxwb3J0L2NzdGRpbyIgMgoKCgojIDEgIi91c3IvaW5jbHVk
ZS9nKysvY3N0ZGlvIiAxCiMgNDggIi91c3IvaW5jbHVkZS9nKysvY3N0ZGlvIiAzCgoKCgojIDEg
Ii4uL3N0bHBvcnQvc3RkaW8uaCIgMSAzCiMgMjIgIi4uL3N0bHBvcnQvc3RkaW8uaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMK
ZXh0ZXJuICJDIiB7CgoKCiMgMSAiLi4vc3RscG9ydC9zdGRkZWYuaCIgMSAzCiMgMjMgIi4uL3N0
bHBvcnQvc3RkZGVmLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8z
LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjQgIi4uL3N0bHBvcnQvc3RkZGVmLmgiIDIgMwoj
IDM1ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCiMgNjUgIi91c3IvaW5jbHVkZS9zdGRpby5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvbGli
aW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMSAzCiMgMTQgIi91c3IvaW5j
bHVkZS9fR19jb25maWcuaCIgMwojIDEgIi4uL3N0bHBvcnQvc3RkZGVmLmgiIDEgMwojIDIzICIu
Li9zdGxwb3J0L3N0ZGRlZi5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGlu
dXgvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI0ICIuLi9zdGxwb3J0L3N0ZGRlZi5oIiAy
IDMKIyAxNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKIyAyNCAiL3Vzci9pbmNsdWRl
L19HX2NvbmZpZy5oIiAzCiMgMSAiLi4vc3RscG9ydC93Y2hhci5oIiAxIDMKIyAyNSAiL3Vzci9p
bmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKCnR5cGVkZWYgc3RydWN0CnsKICBfX29mZl90IF9fcG9z
OwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvc190Owp0eXBlZGVmIHN0cnVjdAp7CiAg
X19vZmY2NF90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7CiMg
NDQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nY29udi5o
IiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL2djb252LmgiIDMKIyAxICIuLi9zdGxwb3J0L3djaGFy
LmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgoKIyAxICIuLi9zdGxwb3J0
L3N0ZGRlZi5oIiAxIDMKIyAyMyAiLi4vc3RscG9ydC9zdGRkZWYuaCIgMwojIDEgIi91c3IvbGli
L2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyNCAi
Li4vc3RscG9ydC9zdGRkZWYuaCIgMiAzCiMgMzIgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMK
CgoKCgplbnVtCnsKICBfX0dDT05WX09LID0gMCwKICBfX0dDT05WX05PQ09OViwKICBfX0dDT05W
X05PREIsCiAgX19HQ09OVl9OT01FTSwKCiAgX19HQ09OVl9FTVBUWV9JTlBVVCwKICBfX0dDT05W
X0ZVTExfT1VUUFVULAogIF9fR0NPTlZfSUxMRUdBTF9JTlBVVCwKICBfX0dDT05WX0lOQ09NUExF
VEVfSU5QVVQsCgogIF9fR0NPTlZfSUxMRUdBTF9ERVNDUklQVE9SLAogIF9fR0NPTlZfSU5URVJO
QUxfRVJST1IKfTsKCgoKZW51bQp7CiAgX19HQ09OVl9JU19MQVNUID0gMHgwMDAxLAogIF9fR0NP
TlZfSUdOT1JFX0VSUk9SUyA9IDB4MDAwMgp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwOwpzdHJ1
Y3QgX19nY29udl9zdGVwX2RhdGE7CnN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3Q7CnN0cnVj
dCBfX2djb252X3RyYW5zX2RhdGE7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl9mY3QpIChzdHJ1
Y3QgX19nY29udl9zdGVwICosIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLCBfX2NvbnN0IHVuc2ln
bmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKios
IHNpemVfdCAqLCBpbnQsIGludCk7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2luaXRfZmN0KSAo
c3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl9lbmRfZmN0KSAo
c3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2Zj
dCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLCB2b2lkICosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBj
aGFyICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5
cGVkZWYgaW50ICgqX19nY29udl90cmFuc19jb250ZXh0X2ZjdCkgKHZvaWQgKiwgX19jb25zdCB1
bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7CgoKdHlwZWRlZiBp
bnQgKCpfX2djb252X3RyYW5zX3F1ZXJ5X2ZjdCkgKF9fY29uc3QgY2hhciAqLCBfX2NvbnN0IGNo
YXIgKioqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICop
OwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19pbml0X2ZjdCkgKHZvaWQgKiosIGNvbnN0
IGNoYXIgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCkgKHZvaWQgKik7
CgpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhCnsKCiAgX19nY29udl90cmFuc19mY3QgX190cmFu
c19mY3Q7CiAgX19nY29udl90cmFuc19jb250ZXh0X2ZjdCBfX3RyYW5zX2NvbnRleHRfZmN0Owog
IF9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCBfX3RyYW5zX2VuZF9mY3Q7CiAgdm9pZCAqX19kYXRhOwog
IHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fbmV4dDsKfTsKCgoKc3RydWN0IF9fZ2NvbnZf
c3RlcAp7CiAgc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdCAqX19zaGxpYl9oYW5kbGU7CiAg
X19jb25zdCBjaGFyICpfX21vZG5hbWU7CgogIGludCBfX2NvdW50ZXI7CgogIGNoYXIgKl9fZnJv
bV9uYW1lOwogIGNoYXIgKl9fdG9fbmFtZTsKCiAgX19nY29udl9mY3QgX19mY3Q7CiAgX19nY29u
dl9pbml0X2ZjdCBfX2luaXRfZmN0OwogIF9fZ2NvbnZfZW5kX2ZjdCBfX2VuZF9mY3Q7CgoKCiAg
aW50IF9fbWluX25lZWRlZF9mcm9tOwogIGludCBfX21heF9uZWVkZWRfZnJvbTsKICBpbnQgX19t
aW5fbmVlZGVkX3RvOwogIGludCBfX21heF9uZWVkZWRfdG87CgoKICBpbnQgX19zdGF0ZWZ1bDsK
CiAgdm9pZCAqX19kYXRhOwp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEKewogIHVuc2ln
bmVkIGNoYXIgKl9fb3V0YnVmOwogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmZW5kOwoKCgogIGlu
dCBfX2ZsYWdzOwoKCgogIGludCBfX2ludm9jYXRpb25fY291bnRlcjsKCgoKICBpbnQgX19pbnRl
cm5hbF91c2U7CgogIF9fbWJzdGF0ZV90ICpfX3N0YXRlcDsKICBfX21ic3RhdGVfdCBfX3N0YXRl
OwoKCgogIHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fdHJhbnM7Cn07CgoKCnR5cGVkZWYg
c3RydWN0IF9fZ2NvbnZfaW5mbwp7CiAgc2l6ZV90IF9fbnN0ZXBzOwogIHN0cnVjdCBfX2djb252
X3N0ZXAgKl9fc3RlcHM7CiAgX19leHRlbnNpb25fXyBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEg
X19kYXRhIFtdOwp9ICpfX2djb252X3Q7CiMgNDUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIg
MiAzCnR5cGVkZWYgdW5pb24KewogIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICBzdHJ1Y3QK
ICB7CiAgICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgICBzdHJ1Y3QgX19nY29udl9zdGVw
X2RhdGEgX19kYXRhOwogIH0gX19jb21iaW5lZDsKfSBfR19pY29udl90OwoKdHlwZWRlZiBpbnQg
X0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBp
bnQgX0dfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJ
X18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQzMl90IF9fYXR0cmlidXRlX18gKChf
X21vZGVfXyAoX19TSV9fKSkpOwojIDMzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgNTMg
Ii91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAiLi4vc3RscG9ydC9zdGRhcmcuaCIgMSAzCiMg
MjMgIi4uL3N0bHBvcnQvc3RkYXJnLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3Vz
ZS1saW51eC8zLjIvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgMjQgIi4uL3N0bHBvcnQvc3RkYXJn
LmgiIDIgMwojIDU0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgMTYwICIvdXNyL2luY2x1
ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lPX2p1bXBfdDsgc3RydWN0IF9JT19GSUxFOwojIDE3MCAi
L3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCgoKc3Ry
dWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lP
X0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9zOwojIDE5MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi
IDMKfTsKCgplbnVtIF9fY29kZWN2dF9yZXN1bHQKewogIF9fY29kZWN2dF9vaywKICBfX2NvZGVj
dnRfcGFydGlhbCwKICBfX2NvZGVjdnRfZXJyb3IsCiAgX19jb2RlY3Z0X25vY29udgp9OwoKCgoK
c3RydWN0IF9JT19jb2RlY3Z0CnsKICB2b2lkICgqX19jb2RlY3Z0X2Rlc3RyKSAoc3RydWN0IF9J
T19jb2RlY3Z0ICopOwogIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2dF9kb19vdXQp
IChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19tYnN0YXRlX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICosCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiosIGNoYXIgKiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCBjaGFyICoqKTsK
ICBlbnVtIF9fY29kZWN2dF9yZXN1bHQgKCpfX2NvZGVjdnRfZG9fdW5zaGlmdCkgKHN0cnVjdCBf
SU9fY29kZWN2dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19tYnN0YXRlX3QgKiwgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCBjaGFyICoqKTsKICBlbnVtIF9fY29kZWN2dF9y
ZXN1bHQgKCpfX2NvZGVjdnRfZG9faW4pIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgY29uc3Qg
Y2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKiosIHdjaGFyX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3Y2hhcl90ICosIHdjaGFyX3QgKiopOwogIGludCAoKl9fY29kZWN2dF9kb19lbmNv
ZGluZykgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKICBpbnQgKCpfX2NvZGVjdnRfZG9fYWx3YXlz
X25vY29udikgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKICBpbnQgKCpfX2NvZGVjdnRfZG9fbGVu
Z3RoKSAoc3RydWN0IF9JT19jb2RlY3Z0ICosIF9fbWJzdGF0ZV90ICosCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwogIGlu
dCAoKl9fY29kZWN2dF9kb19tYXhfbGVuZ3RoKSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOwoKICBf
R19pY29udl90IF9fY2RfaW47CiAgX0dfaWNvbnZfdCBfX2NkX291dDsKfTsKCgpzdHJ1Y3QgX0lP
X3dpZGVfZGF0YQp7CiAgd2NoYXJfdCAqX0lPX3JlYWRfcHRyOwogIHdjaGFyX3QgKl9JT19yZWFk
X2VuZDsKICB3Y2hhcl90ICpfSU9fcmVhZF9iYXNlOwogIHdjaGFyX3QgKl9JT193cml0ZV9iYXNl
OwogIHdjaGFyX3QgKl9JT193cml0ZV9wdHI7CiAgd2NoYXJfdCAqX0lPX3dyaXRlX2VuZDsKICB3
Y2hhcl90ICpfSU9fYnVmX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX2J1Zl9lbmQ7CgogIHdjaGFyX3Qg
Kl9JT19zYXZlX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX2JhY2t1cF9iYXNlOwoKICB3Y2hhcl90ICpf
SU9fc2F2ZV9lbmQ7CgogIF9fbWJzdGF0ZV90IF9JT19zdGF0ZTsKICBfX21ic3RhdGVfdCBfSU9f
bGFzdF9zdGF0ZTsKICBzdHJ1Y3QgX0lPX2NvZGVjdnQgX2NvZGVjdnQ7CgogIHdjaGFyX3QgX3No
b3J0YnVmWzFdOwoKICBzdHJ1Y3QgX0lPX2p1bXBfdCAqX3dpZGVfdnRhYmxlOwp9OwoKCnN0cnVj
dCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsKCgoKCiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNo
YXIqIF9JT19yZWFkX2VuZDsKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0
ZV9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBj
aGFyKiBfSU9fYnVmX2Jhc2U7CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZl
X2Jhc2U7CiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCiAg
c3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsK
CiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXplOwogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoK
CiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZz
ZXQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xvY2s7CiMgMzA1ICIv
dXNyL2luY2x1ZGUvbGliaW8uaCIgMwogIF9fb2ZmNjRfdCBfb2Zmc2V0OwoKCiAgc3RydWN0IF9J
T19jb2RlY3Z0ICpfY29kZWN2dDsKICBzdHJ1Y3QgX0lPX3dpZGVfZGF0YSAqX3dpZGVfZGF0YTsK
CgoKCiAgaW50IF9tb2RlOwoKICBjaGFyIF91bnVzZWQyWzE1ICogc2l6ZW9mIChpbnQpIC0gMiAq
IHNpemVvZiAodm9pZCAqKV07Cgp9OwoKCgoKCnN0cnVjdCBfSU9fRklMRV9wbHVzOwoKZXh0ZXJu
IHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19G
SUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lP
XzJfMV9zdGRlcnJfOwojIDM0NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiBfX3Nz
aXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAqX19idWYsIHNpemVfdCBf
X25ieXRlcyk7CgoKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICh2b2lkICpf
X2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lvX3NlZWtfZm4gKHZvaWQg
Kl9fY29va2llLCBfX29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0eXBlZGVmIGludCBfX2lv
X2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVmIF9faW9fcmVhZF9mbiBjb29r
aWVfcmVhZF9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4gY29va2llX3dyaXRlX2Z1
bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVrX2Z1bmN0aW9uX3Q7CnR5
cGVkZWYgX19pb19jbG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25fdDsKCgp0eXBlZGVmIHN0
cnVjdAp7CiAgX19pb19yZWFkX2ZuICpyZWFkOwogIF9faW9fd3JpdGVfZm4gKndyaXRlOwogIF9f
aW9fc2Vla19mbiAqc2VlazsKICBfX2lvX2Nsb3NlX2ZuICpjbG9zZTsKfSBfSU9fY29va2llX2lv
X2Z1bmN0aW9uc190Owp0eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgY29va2llX2lv
X2Z1bmN0aW9uc190OwoKc3RydWN0IF9JT19jb29raWVfZmlsZTsKCgpleHRlcm4gdm9pZCBfSU9f
Y29va2llX2luaXQgKHN0cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2ZpbGUsIGludCBfX3JlYWRf
d3JpdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19jb29raWUsIF9JT19j
b29raWVfaW9fZnVuY3Rpb25zX3QgX19mbnMpOwoKCgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGlu
dCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX191ZmxvdyAo
X0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAoX0lPX0ZJTEUgKiwg
aW50KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1bmRlcmZsb3cgKF9JT19GSUxFICopIHRo
cm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0
ZXJuIHdpbnRfdCBfX3dvdmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90KSB0aHJvdyAoKTsKIyA0
MjYgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX2dldGMgKF9JT19GSUxF
ICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lPX0ZJTEUg
Kl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mZW9mIChfSU9fRklMRSAqX19mcCkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgX0lPX2ZlcnJvciAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwoK
ZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIHZvaWQgX0lPX2Zsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVy
biB2b2lkIF9JT19mdW5sb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQg
X0lPX2Z0cnlsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CiMgNDU2ICIvdXNyL2luY2x1
ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT192ZnNjYW5mIChfSU9fRklMRSAqIF9fcmVzdHJp
Y3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2du
dWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fdmZw
cmludGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIHRocm93ICgpOwpleHRlcm4gX19z
c2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVfdCkgdGhyb3cgKCk7CmV4
dGVybiBzaXplX3QgX0lPX3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICosIHNpemVfdCkgdGhyb3cg
KCk7CgpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrb2ZmIChfSU9fRklMRSAqLCBfX29mZjY0X3Qs
IGludCwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJ
TEUgKiwgX19vZmY2NF90LCBpbnQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFj
a3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgX0lPX2dldHdj
IChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX0lPX3B1dHdjICh3Y2hh
cl90IF9fd2MsIF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZndpZGUg
KF9JT19GSUxFICpfX2ZwLCBpbnQgX19tb2RlKSB0aHJvdyAoKTsKIyA1MDUgIi91c3IvaW5jbHVk
ZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zmd3NjYW5mIChfSU9fRklMRSAqIF9fcmVzdHJp
Y3QsIGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
X19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lP
X3Zmd3ByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IHdjaGFyX3QgKl9fcmVzdHJp
Y3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIHRocm93ICgpOwpl
eHRlcm4gX19zc2l6ZV90IF9JT193cGFkbiAoX0lPX0ZJTEUgKiwgd2ludF90LCBfX3NzaXplX3Qp
IHRocm93ICgpOwpleHRlcm4gdm9pZCBfSU9fZnJlZV93YmFja3VwX2FyZWEgKF9JT19GSUxFICop
IHRocm93ICgpOwoKCgp9CiMgNjYgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKCnR5cGVk
ZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKIyA4MCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMK
dHlwZWRlZiBfR19mcG9zX3QgZnBvc190OwoKCgoKdHlwZWRlZiBfR19mcG9zNjRfdCBmcG9zNjRf
dDsKIyAxMjkgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
c3RkaW9fbGltLmgiIDEgMwojIDEzMCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgpleHRl
cm4gRklMRSAqc3RkaW47CmV4dGVybiBGSUxFICpzdGRvdXQ7CmV4dGVybiBGSUxFICpzdGRlcnI7
CgoKCgoKCmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93
ICgpOwoKZXh0ZXJuIGludCByZW5hbWUgKF9fY29uc3QgY2hhciAqX19vbGQsIF9fY29uc3QgY2hh
ciAqX19uZXcpIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKnRtcGZpbGUgKHZvaWQpIHRocm93
ICgpOwojIDE1OCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJTEUgKnRtcGZpbGU2
NCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnRtcG5hbSAoY2hhciAqX19zKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBjaGFyICp0bXBuYW1fciAoY2hhciAqX19zKSB0aHJvdyAoKTsKIyAx
NzggIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBjaGFyICp0ZW1wbmFtIChfX2NvbnN0
IGNoYXIgKl9fZGlyLCBfX2NvbnN0IGNoYXIgKl9fcGZ4KQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJl
YW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZmx1c2ggKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBpbnQgZmNsb3NlYWxsICh2b2lkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
RklMRSAqZm9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzKSB0aHJvdyAoKTsK
CmV4dGVybiBGSUxFICpmcmVvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFt
ZSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVz
LAogICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cg
KCk7CiMgMjIyICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAqZm9wZW42NCAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CmV4dGVybiBGSUxF
ICpmcmVvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAg
ICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gRklMRSAqZmRvcGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3Qg
X19tYWdpY19jb29raWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lPX2Nvb2tpZV9p
b19mdW5jdGlvbnNfdCBfX2lvX2Z1bmNzKSB0aHJvdyAoKTsKCgpleHRlcm4gRklMRSAqZm1lbW9w
ZW4gKHZvaWQgKl9fcywgc2l6ZV90IF9fbGVuLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93
ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKm9wZW5fbWVtc3RyZWFtIChjaGFyICoqX19yZXN0cmljdCBf
X2J1ZmxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3Qg
X19zaXplbG9jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBzZXRidWYgKEZJTEUgKl9fcmVz
dHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IHNldHZidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJp
Y3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgaW50IF9fbW9kZXMsIHNpemVfdCBfX24pIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry
ZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBfX3NpemUpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNldGxpbmVidWYgKEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBf
X3N0cmVhbSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
b3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHByaW50ZiAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcHJpbnRmIChj
aGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB2ZnByaW50ZiAo
RklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwK
ICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKZXh0
ZXJuIGludCB2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251
Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hh
ciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAg
ICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IHNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAog
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4u
LikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywg
MywgNCkpKTsKCmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6
ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKCgoKCgpleHRlcm4gaW50
IHZhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2YsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkp
KTsKZXh0ZXJuIGludCBfX2FzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykp
KTsKZXh0ZXJuIGludCBhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoK
CmV4dGVybiBpbnQgdmRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19mbXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpl
eHRlcm4gaW50IGRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
bXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmlu
dGZfXywgMiwgMykpKTsKCgoKCmV4dGVybiBpbnQgZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9f
c3RyZWFtLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y
bWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzc2NhbmYgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdmZzY2Fu
ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h
dCwKICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCmV4dGVy
biBpbnQgdnNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192
YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChf
X3NjYW5mX18sIDEsIDApKSk7CgoKZXh0ZXJuIGludCB2c3NjYW5mIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgoKCmV4dGVybiBpbnQgZmdl
dGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0
cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRjaGFyICh2b2lkKSB0aHJvdyAoKTsKCgoK
CgoKCmV4dGVybiBpbnQgZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpl
eHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGlu
dCBmZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGlu
dCBmcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IHB1
dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dGNo
YXIgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAo
aW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdXRjX3Vu
bG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0
Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXR3IChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKl9fcmVz
dHJpY3QgX19zLCBpbnQgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93
ICgpOwoKCgpleHRlcm4gY2hhciAqZmdldHNfdW5sb2NrZWQgKGNoYXIgKl9fcmVzdHJpY3QgX19z
LCBpbnQgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3Qg
X19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgdGhy
b3cgKCk7CiMgNDI2ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gX19zc2l6ZV90IF9f
Z2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRo
cm93ICgpOwpleHRlcm4gX19zc2l6ZV90IGdldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBfX2xp
bmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9f
biwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9f
cmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBfX3NzaXplX3QgZ2V0bGluZSAo
Y2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUg
Kl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0cyAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAg
ICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmcHV0c191bmxvY2tlZCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmlj
dCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHV0cyAoX19jb25zdCBjaGFyICpf
X3MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVuZ2V0YyAoaW50IF9fYywgRklMRSAqX19zdHJl
YW0pIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkICh2b2lkICpfX3Jlc3RyaWN0IF9f
cHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxF
ICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3QgZndyaXRlIChf
X2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fcykgdGhyb3cgKCk7CgoK
CmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNp
emVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJ
TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gc2l6ZV90IGZ3cml0ZV91
bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmlj
dCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZzZWVrIChGSUxFICpfX3N0cmVh
bSwgbG9uZyBpbnQgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBp
bnQgZnRlbGwgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHJld2luZCAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwojIDQ4OSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMK
ZXh0ZXJuIGludCBmc2Vla28gKEZJTEUgKl9fc3RyZWFtLCBfX29mZl90IF9fb2ZmLCBpbnQgX193
aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmX3QgZnRlbGxvIChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmdldHBvcyAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVh
bSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBm
c2V0cG9zIChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSB0aHJvdyAoKTsK
IyA1MjMgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUg
Kl9fc3RyZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CmV4dGVy
biBfX29mZjY0X3QgZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGlu
dCBmZ2V0cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3M2NF90ICpfX3Jlc3Ry
aWN0IF9fcG9zKQogICAgIHRocm93ICgpOwpleHRlcm4gaW50IGZzZXRwb3M2NCAoRklMRSAqX19z
dHJlYW0sIF9fY29uc3QgZnBvczY0X3QgKl9fcG9zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQg
Y2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVvZiAoRklM
RSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQgKEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CmV4dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAo
KTsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N5c19lcnJsaXN0LmgiIDEgMwojIDI3ICIv
dXNyL2luY2x1ZGUvYml0cy9zeXNfZXJybGlzdC5oIiAzCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4
dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKCgpleHRlcm4gaW50IF9z
eXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lzX2Vycmxpc3RbXTsKIyA1
NTMgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKCmV4dGVybiBpbnQgZmlsZW5vIChGSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZpbGVub191bmxvY2tlZCAoRklM
RSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqcG9wZW4gKF9fY29uc3Qg
Y2hhciAqX19jb21tYW5kLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgcGNsb3NlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIg
KmN0ZXJtaWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmN1c2VyaWQg
KGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpzdHJ1Y3Qgb2JzdGFjazsKCgpleHRlcm4gaW50IG9i
c3RhY2tfcHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwg
Li4uKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBvYnN0YWNrX3ZwcmludGYgKHN0cnVjdCBvYnN0YWNr
ICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fZ251Y192YV9saXN0IF9fYXJncykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gdm9pZCBmbG9j
a2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmdHJ5bG9ja2Zp
bGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwojIDYyNSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAxIDMKIyAzMyAiL3Vzci9pbmNsdWRlL2Jp
dHMvc3RkaW8uaCIgMwppbmxpbmUgaW50CnZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX2ZtdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpCnsKICByZXR1cm4gdmZwcmlu
dGYgKHN0ZG91dCwgX19mbXQsIF9fYXJnKTsKfQoKCmlubGluZSBpbnQKZ2V0Y2hhciAodm9pZCkg
dGhyb3cgKCkKewogIHJldHVybiBfSU9fZ2V0YyAoc3RkaW4pOwp9CgoKCgppbmxpbmUgaW50Cmdl
dGNfdW5sb2NrZWQgKEZJTEUgKl9fZnApIHRocm93ICgpCnsKICByZXR1cm4gKChfX2ZwKS0+X0lP
X3JlYWRfcHRyID49IChfX2ZwKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAoX19mcCkgOiAqKHVu
c2lnbmVkIGNoYXIgKikgKF9fZnApLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgppbmxpbmUgaW50Cmdl
dGNoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpCnsKICByZXR1cm4gKChzdGRpbiktPl9JT19y
ZWFkX3B0ciA+PSAoc3RkaW4pLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChzdGRpbikgOiAqKHVu
c2lnbmVkIGNoYXIgKikgKHN0ZGluKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoKCgppbmxpbmUgaW50
CnB1dGNoYXIgKGludCBfX2MpIHRocm93ICgpCnsKICByZXR1cm4gX0lPX3B1dGMgKF9fYywgc3Rk
b3V0KTsKfQoKCgoKaW5saW5lIGludApmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19z
dHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyID49
IChfX3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoX19zdHJlYW0sICh1bnNp
Z25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCooX19zdHJlYW0pLT5fSU9fd3Jp
dGVfcHRyKysgPSAoX19jKSkpOwp9CgoKCgoKaW5saW5lIGludApwdXRjX3VubG9ja2VkIChpbnQg
X19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9J
T193cml0ZV9wdHIgPj0gKF9fc3RyZWFtKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChf
X3N0cmVhbSwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihfX3N0
cmVhbSktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgppbmxpbmUgaW50CnB1dGNoYXJf
dW5sb2NrZWQgKGludCBfX2MpIHRocm93ICgpCnsKICByZXR1cm4gKCgoc3Rkb3V0KS0+X0lPX3dy
aXRlX3B0ciA+PSAoc3Rkb3V0KS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChzdGRvdXQs
ICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCooc3Rkb3V0KS0+X0lP
X3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCgoKCmlubGluZSBfX3NzaXplX3QKZ2V0bGluZSAo
Y2hhciAqKl9fbGluZXB0ciwgc2l6ZV90ICpfX24sIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7
CiAgcmV0dXJuIF9fZ2V0ZGVsaW0gKF9fbGluZXB0ciwgX19uLCAnXG4nLCBfX3N0cmVhbSk7Cn0K
CgoKCgppbmxpbmUgaW50CmZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7
CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X2ZsYWdzICYgMHgxMCkgIT0gMCk7Cn0KCgppbmxpbmUg
aW50CmZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4g
KCgoX19zdHJlYW0pLT5fZmxhZ3MgJiAweDIwKSAhPSAwKTsKfQojIDYyNiAiL3Vzci9pbmNsdWRl
L3N0ZGlvLmgiIDIgMwoKCn0KIyAyMyAiLi4vc3RscG9ydC9zdGRpby5oIiAyIDMKIyA1MyAiL3Vz
ci9pbmNsdWRlL2crKy9jc3RkaW8iIDIgMwojIDk3ICIvdXNyL2luY2x1ZGUvZysrL2NzdGRpbyIg
MwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OkZJTEU7CiAgdXNpbmcgOjpmcG9zX3Q7CgogIHVz
aW5nIDo6Y2xlYXJlcnI7CiAgdXNpbmcgOjpmY2xvc2U7CiAgdXNpbmcgOjpmZW9mOwogIHVzaW5n
IDo6ZmVycm9yOwogIHVzaW5nIDo6ZmZsdXNoOwogIHVzaW5nIDo6ZmdldGM7CiAgdXNpbmcgOjpm
Z2V0cG9zOwogIHVzaW5nIDo6ZmdldHM7CiAgdXNpbmcgOjpmb3BlbjsKICB1c2luZyA6OmZwcmlu
dGY7CiAgdXNpbmcgOjpmcHV0YzsKICB1c2luZyA6OmZwdXRzOwogIHVzaW5nIDo6ZnJlYWQ7CiAg
dXNpbmcgOjpmcmVvcGVuOwogIHVzaW5nIDo6ZnNjYW5mOwogIHVzaW5nIDo6ZnNlZWs7CiAgdXNp
bmcgOjpmc2V0cG9zOwogIHVzaW5nIDo6ZnRlbGw7CiAgdXNpbmcgOjpmd3JpdGU7CiAgdXNpbmcg
OjpnZXRjOwogIHVzaW5nIDo6Z2V0Y2hhcjsKICB1c2luZyA6OmdldHM7CiAgdXNpbmcgOjpwZXJy
b3I7CiAgdXNpbmcgOjpwcmludGY7CiAgdXNpbmcgOjpwdXRjOwogIHVzaW5nIDo6cHV0Y2hhcjsK
ICB1c2luZyA6OnB1dHM7CiAgdXNpbmcgOjpyZW1vdmU7CiAgdXNpbmcgOjpyZW5hbWU7CiAgdXNp
bmcgOjpyZXdpbmQ7CiAgdXNpbmcgOjpzY2FuZjsKICB1c2luZyA6OnNldGJ1ZjsKICB1c2luZyA6
OnNldHZidWY7CiAgdXNpbmcgOjpzcHJpbnRmOwogIHVzaW5nIDo6c3NjYW5mOwogIHVzaW5nIDo6
dG1wZmlsZTsKICB1c2luZyA6OnRtcG5hbTsKICB1c2luZyA6OnVuZ2V0YzsKICB1c2luZyA6OnZm
cHJpbnRmOwogIHVzaW5nIDo6dnByaW50ZjsKICB1c2luZyA6OnZzcHJpbnRmOwp9CiMgMTUzICIv
dXNyL2luY2x1ZGUvZysrL2NzdGRpbyIgMwpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB1c2luZyA6
OnNucHJpbnRmOwogIHVzaW5nIDo6dmZzY2FuZjsKICB1c2luZyA6OnZzY2FuZjsKICB1c2luZyA6
OnZzbnByaW50ZjsKICB1c2luZyA6OnZzc2NhbmY7Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5n
IF9fZ251X2N4eDo6c25wcmludGY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2ZnNjYW5mOwogIHVzaW5n
IF9fZ251X2N4eDo6dnNjYW5mOwogIHVzaW5nIF9fZ251X2N4eDo6dnNucHJpbnRmOwogIHVzaW5n
IF9fZ251X2N4eDo6dnNzY2FuZjsKfQojIDI4ICIuLi9zdGxwb3J0L2NzdGRpbyIgMgojIDUwICIu
Li9zdGxwb3J0L2NzdGRpbyIKbmFtZXNwYWNlIF9TVEwgewp1c2luZyBfX3N0ZF9hbGlhczo6RklM
RTsKdXNpbmcgX19zdGRfYWxpYXM6OmZwb3NfdDsKdXNpbmcgX19zdGRfYWxpYXM6OnNpemVfdDsK
IyA2NCAiLi4vc3RscG9ydC9jc3RkaW8iCnVzaW5nIF9fc3RkX2FsaWFzOjpjbGVhcmVycjsKdXNp
bmcgX19zdGRfYWxpYXM6OmZjbG9zZTsKdXNpbmcgX19zdGRfYWxpYXM6OmZlb2Y7CnVzaW5nIF9f
c3RkX2FsaWFzOjpmZXJyb3I7CnVzaW5nIF9fc3RkX2FsaWFzOjpmZmx1c2g7CnVzaW5nIF9fc3Rk
X2FsaWFzOjpmZ2V0YzsKdXNpbmcgX19zdGRfYWxpYXM6OmZnZXRwb3M7CnVzaW5nIF9fc3RkX2Fs
aWFzOjpmZ2V0czsKdXNpbmcgX19zdGRfYWxpYXM6OmZvcGVuOwp1c2luZyBfX3N0ZF9hbGlhczo6
ZnByaW50ZjsKdXNpbmcgX19zdGRfYWxpYXM6OmZwdXRjOwp1c2luZyBfX3N0ZF9hbGlhczo6ZnB1
dHM7CnVzaW5nIF9fc3RkX2FsaWFzOjpmcmVhZDsKdXNpbmcgX19zdGRfYWxpYXM6OmZyZW9wZW47
CnVzaW5nIF9fc3RkX2FsaWFzOjpmc2NhbmY7CnVzaW5nIF9fc3RkX2FsaWFzOjpmc2VlazsKdXNp
bmcgX19zdGRfYWxpYXM6OmZzZXRwb3M7CnVzaW5nIF9fc3RkX2FsaWFzOjpmdGVsbDsKdXNpbmcg
X19zdGRfYWxpYXM6OmZ3cml0ZTsKCgogdXNpbmcgX19zdGRfYWxpYXM6OmdldGM7CiB1c2luZyBf
X3N0ZF9hbGlhczo6Z2V0Y2hhcjsKIHVzaW5nIF9fc3RkX2FsaWFzOjpwdXRjOwogdXNpbmcgX19z
dGRfYWxpYXM6OnB1dGNoYXI7CgoKdXNpbmcgX19zdGRfYWxpYXM6OmdldHM7CnVzaW5nIF9fc3Rk
X2FsaWFzOjpwZXJyb3I7CnVzaW5nIF9fc3RkX2FsaWFzOjpwcmludGY7CnVzaW5nIF9fc3RkX2Fs
aWFzOjpwdXRzOwp1c2luZyBfX3N0ZF9hbGlhczo6cmVtb3ZlOwp1c2luZyBfX3N0ZF9hbGlhczo6
cmVuYW1lOwp1c2luZyBfX3N0ZF9hbGlhczo6cmV3aW5kOwp1c2luZyBfX3N0ZF9hbGlhczo6c2Nh
bmY7CnVzaW5nIF9fc3RkX2FsaWFzOjpzZXRidWY7CnVzaW5nIF9fc3RkX2FsaWFzOjpzZXR2YnVm
Owp1c2luZyBfX3N0ZF9hbGlhczo6c3ByaW50ZjsKdXNpbmcgX19zdGRfYWxpYXM6OnNzY2FuZjsK
dXNpbmcgX19zdGRfYWxpYXM6OnRtcGZpbGU7CnVzaW5nIF9fc3RkX2FsaWFzOjp0bXBuYW07CnVz
aW5nIF9fc3RkX2FsaWFzOjp1bmdldGM7CnVzaW5nIF9fc3RkX2FsaWFzOjp2ZnByaW50ZjsKdXNp
bmcgX19zdGRfYWxpYXM6OnZwcmludGY7CnVzaW5nIF9fc3RkX2FsaWFzOjp2c3ByaW50ZjsKCgp1
c2luZyBfX3N0ZF9hbGlhczo6dnNucHJpbnRmOwoKCn0KCgoKIyAxICIuLi9zdGxwb3J0L3N0bC9f
ZXBpbG9nLmgiIDEKIyAxNCAiLi4vc3RscG9ydC9zdGwvX2VwaWxvZy5oIgojIDEgIi4uL3N0bHBv
cnQvc3RsL19jb25maWdfY29tcGF0X3Bvc3QuaCIgMQojIDE1ICIuLi9zdGxwb3J0L3N0bC9fZXBp
bG9nLmgiIDIKIyAxMTkgIi4uL3N0bHBvcnQvY3N0ZGlvIiAyCiMgNzAgIi4uL3N0bHBvcnQvc3Rs
L19zdGRpb19maWxlLmgiIDIKIyA3OSAiLi4vc3RscG9ydC9zdGwvX3N0ZGlvX2ZpbGUuaCIKbmFt
ZXNwYWNlIF9TVEwgewojIDI0NiAiLi4vc3RscG9ydC9zdGwvX3N0ZGlvX2ZpbGUuaCIKaW5saW5l
IGludCBfRklMRV9mZChjb25zdCBGSUxFJiBfX2YpIHsgcmV0dXJuIF9fZi5fZmlsZW5vOyB9Cmlu
bGluZSBjaGFyKiBfRklMRV9JX2JlZ2luKGNvbnN0IEZJTEUmIF9fZikgeyByZXR1cm4gX19mLl9J
T19yZWFkX2Jhc2U7IH0KaW5saW5lIGNoYXIqIF9GSUxFX0lfbmV4dChjb25zdCBGSUxFJiBfX2Yp
IHsgcmV0dXJuIF9fZi5fSU9fcmVhZF9wdHI7IH0KaW5saW5lIGNoYXIqIF9GSUxFX0lfZW5kKGNv
bnN0IEZJTEUmIF9fZikgeyByZXR1cm4gX19mLl9JT19yZWFkX2VuZDsgfQoKaW5saW5lIHB0cmRp
ZmZfdCBfRklMRV9JX2F2YWlsKGNvbnN0IEZJTEUmIF9fZikKICB7IHJldHVybiBfX2YuX0lPX3Jl
YWRfZW5kIC0gX19mLl9JT19yZWFkX3B0cjsgfQoKaW5saW5lIGNoYXImIF9GSUxFX0lfcHJlaW5j
cihGSUxFJiBfX2YpIHsgcmV0dXJuICorK19fZi5fSU9fcmVhZF9wdHI7IH0KaW5saW5lIGNoYXIm
IF9GSUxFX0lfcG9zdGluY3IoRklMRSYgX19mKSB7IHJldHVybiAqX19mLl9JT19yZWFkX3B0cisr
OyB9CmlubGluZSBjaGFyJiBfRklMRV9JX3ByZWRlY3IoRklMRSYgX19mKSB7IHJldHVybiAqLS1f
X2YuX0lPX3JlYWRfcHRyOyB9CmlubGluZSBjaGFyJiBfRklMRV9JX3Bvc3RkZWNyKEZJTEUmIF9f
ZikgeyByZXR1cm4gKl9fZi5fSU9fcmVhZF9wdHItLTsgfQppbmxpbmUgdm9pZCBfRklMRV9JX2J1
bXAoRklMRSYgX19mLCBpbnQgX19uKSB7IF9fZi5fSU9fcmVhZF9wdHIgKz0gX19uOyB9Cgppbmxp
bmUgdm9pZCBfRklMRV9JX3NldChGSUxFJiBfX2YsIGNoYXIqIF9fYmVnaW4sIGNoYXIqIF9fbmV4
dCwgY2hhciogX19lbmQpIHsKICBfX2YuX0lPX3JlYWRfYmFzZSA9IF9fYmVnaW47CiAgX19mLl9J
T19yZWFkX3B0ciA9IF9fbmV4dDsKICBfX2YuX0lPX3JlYWRfZW5kID0gX19lbmQ7Cn0KCmlubGlu
ZSBjaGFyKiBfRklMRV9PX2JlZ2luKGNvbnN0IEZJTEUmIF9fZikgeyByZXR1cm4gX19mLl9JT193
cml0ZV9iYXNlOyB9CmlubGluZSBjaGFyKiBfRklMRV9PX25leHQoY29uc3QgRklMRSYgX19mKSB7
IHJldHVybiBfX2YuX0lPX3dyaXRlX3B0cjsgfQppbmxpbmUgY2hhciogX0ZJTEVfT19lbmQoY29u
c3QgRklMRSYgX19mKSB7IHJldHVybiBfX2YuX0lPX3dyaXRlX2VuZDsgfQoKaW5saW5lIHB0cmRp
ZmZfdCBfRklMRV9PX2F2YWlsKGNvbnN0IEZJTEUmIF9fZikKICB7IHJldHVybiBfX2YuX0lPX3dy
aXRlX2VuZCAtIF9fZi5fSU9fd3JpdGVfcHRyOyB9CgppbmxpbmUgY2hhciYgX0ZJTEVfT19wcmVp
bmNyKEZJTEUmIF9fZikgeyByZXR1cm4gKisrX19mLl9JT193cml0ZV9wdHI7IH0KaW5saW5lIGNo
YXImIF9GSUxFX09fcG9zdGluY3IoRklMRSYgX19mKSB7IHJldHVybiAqX19mLl9JT193cml0ZV9w
dHIrKzsgfQppbmxpbmUgY2hhciYgX0ZJTEVfT19wcmVkZWNyKEZJTEUmIF9fZikgeyByZXR1cm4g
Ki0tX19mLl9JT193cml0ZV9wdHI7IH0KaW5saW5lIGNoYXImIF9GSUxFX09fcG9zdGRlY3IoRklM
RSYgX19mKSB7IHJldHVybiAqX19mLl9JT193cml0ZV9wdHItLTsgfQppbmxpbmUgdm9pZCBfRklM
RV9PX2J1bXAoRklMRSYgX19mLCBpbnQgX19uKSB7IF9fZi5fSU9fd3JpdGVfcHRyICs9IF9fbjsg
fQoKaW5saW5lIHZvaWQgX0ZJTEVfT19zZXQoRklMRSYgX19mLCBjaGFyKiBfX2JlZ2luLCBjaGFy
KiBfX25leHQsIGNoYXIqIF9fZW5kKSB7CiAgX19mLl9JT193cml0ZV9iYXNlID0gX19iZWdpbjsK
ICBfX2YuX0lPX3dyaXRlX3B0ciA9IF9fbmV4dDsKICBfX2YuX0lPX3dyaXRlX2VuZCA9IF9fZW5k
OwoKfQojIDYzMiAiLi4vc3RscG9ydC9zdGwvX3N0ZGlvX2ZpbGUuaCIKfQojIDI4ICIuLi9zdGxw
b3J0L3N0bC9fc3RyZWFtYnVmLmgiIDIKCgoKbmFtZXNwYWNlIF9TVEwgewojIDUzICIuLi9zdGxw
b3J0L3N0bC9fc3RyZWFtYnVmLmgiCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFp
dHM+CmNsYXNzIGJhc2ljX3N0cmVhbWJ1Zgp7CiAgZnJpZW5kIGNsYXNzIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPjsKICBmcmllbmQgY2xhc3MgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+OwoKcHVibGljOgogIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICB0eXBlZGVmIHR5
cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1Ry
YWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZf
dHlwZSBvZmZfdHlwZTsKICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7Cgpwcml2YXRlOgoK
ICBjaGFyX3R5cGUqIF9NX2diZWdpbjsKICBjaGFyX3R5cGUqIF9NX2duZXh0OwogIGNoYXJfdHlw
ZSogX01fZ2VuZDsKCiAgY2hhcl90eXBlKiBfTV9wYmVnaW47CiAgY2hhcl90eXBlKiBfTV9wbmV4
dDsKICBjaGFyX3R5cGUqIF9NX3BlbmQ7CgogIGxvY2FsZSBfTV9sb2NhbGU7CgpwdWJsaWM6CiAg
X1NUTFBfbXV0ZXggX01fbG9jazsKCnB1YmxpYzoKICB2aXJ0dWFsIH5iYXNpY19zdHJlYW1idWYo
KTsKCnByb3RlY3RlZDoKICBiYXNpY19zdHJlYW1idWYoKTsKCnByb3RlY3RlZDoKICBjaGFyX3R5
cGUqIGViYWNrKCkgY29uc3QgeyByZXR1cm4gX01fZ2JlZ2luOyB9CiAgY2hhcl90eXBlKiBncHRy
KCkgY29uc3QgeyByZXR1cm4gX01fZ25leHQ7IH0KICBjaGFyX3R5cGUqIGVncHRyKCkgY29uc3Qg
eyByZXR1cm4gX01fZ2VuZDsgfQoKICB2b2lkIGdidW1wKGludCBfX24pIHsgX01fZ25leHQgKz0g
X19uOyB9CiAgdm9pZCBzZXRnKGNoYXJfdHlwZSogX19nYmVnaW4sIGNoYXJfdHlwZSogX19nbmV4
dCwgY2hhcl90eXBlKiBfX2dlbmQpIHsKICAgIF9NX2diZWdpbiA9IF9fZ2JlZ2luOwogICAgX01f
Z25leHQgPSBfX2duZXh0OwogICAgX01fZ2VuZCA9IF9fZ2VuZDsKICB9CgpwdWJsaWM6CgoKCgog
IGNoYXJfdHlwZSogX01fZWJhY2soKSBjb25zdCB7IHJldHVybiBlYmFjaygpOyB9CiAgY2hhcl90
eXBlKiBfTV9ncHRyKCkgY29uc3QgeyByZXR1cm4gZ3B0cigpOyB9CiAgY2hhcl90eXBlKiBfTV9l
Z3B0cigpIGNvbnN0IHsgcmV0dXJuIGVncHRyKCk7IH0KICB2b2lkIF9NX2didW1wKGludCBfX24p
IHsgZ2J1bXAoX19uKTsgfQogIHZvaWQgX01fc2V0ZyhjaGFyX3R5cGUqIF9fZ2JlZ2luLCBjaGFy
X3R5cGUqIF9fZ25leHQsIGNoYXJfdHlwZSogX19nZW5kKQogICAgeyBzZXRnKF9fZ2JlZ2luLCBf
X2duZXh0LCBfX2dlbmQpOyB9Cgpwcm90ZWN0ZWQ6CgogIGNoYXJfdHlwZSogcGJhc2UoKSBjb25z
dCB7IHJldHVybiBfTV9wYmVnaW47IH0KICBjaGFyX3R5cGUqIHBwdHIoKSBjb25zdCB7IHJldHVy
biBfTV9wbmV4dDsgfQogIGNoYXJfdHlwZSogZXBwdHIoKSBjb25zdCB7IHJldHVybiBfTV9wZW5k
OyB9CgogIHZvaWQgcGJ1bXAoaW50IF9fbikgeyBfTV9wbmV4dCArPSBfX247IH0KICB2b2lkIHNl
dHAoY2hhcl90eXBlKiBfX3BiZWdpbiwgY2hhcl90eXBlKiBfX3BlbmQpIHsKICAgIF9NX3BiZWdp
biA9IF9fcGJlZ2luOwogICAgX01fcG5leHQgPSBfX3BiZWdpbjsKICAgIF9NX3BlbmQgPSBfX3Bl
bmQ7CiAgfQoKcHJvdGVjdGVkOgoKICB2aXJ0dWFsIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9U
cmFpdHM+KiBzZXRidWYoY2hhcl90eXBlKiwgc3RyZWFtc2l6ZSk7CgoKCiAgdmlydHVhbCBwb3Nf
dHlwZSBzZWVrb2ZmKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vla2RpciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6
Om91dCk7CgoKCiAgdmlydHVhbCBwb3NfdHlwZQogIHNlZWtwb3MocG9zX3R5cGUsIGlvc19iYXNl
OjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpOwoKCgogIHZpcnR1YWwg
aW50IHN5bmMoKTsKCgpwdWJsaWM6CiAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4q
IHB1YnNldGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7IHJldHVybiB0
aGlzLT5zZXRidWYoX19zLCBfX24pOyB9CgogIHBvc190eXBlIHB1YnNlZWtvZmYob2ZmX3R5cGUg
X19vZmZzZXQsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LAogICAgICAgICAgICAgICAgICAgICAg
aW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkK
ICAgIHsgcmV0dXJuIHRoaXMtPnNlZWtvZmYoX19vZmZzZXQsIF9fd2F5LCBfX21vZCk7IH0KCiAg
cG9zX3R5cGUgcHVic2Vla3Bvcyhwb3NfdHlwZSBfX3NwLAogICAgICAgICAgICAgICAgICAgICAg
aW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkK
ICAgIHsgcmV0dXJuIHRoaXMtPnNlZWtwb3MoX19zcCwgX19tb2QpOyB9CgogIGludCBwdWJzeW5j
KCkgeyByZXR1cm4gdGhpcy0+c3luYygpOyB9Cgpwcm90ZWN0ZWQ6CgoKCgoKICB2aXJ0dWFsIHN0
cmVhbXNpemUgc2hvd21hbnljKCk7CgoKCiAgdmlydHVhbCBzdHJlYW1zaXplIHhzZ2V0bihjaGFy
X3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKCgoKICB2aXJ0dWFsIGludF90eXBlIHVuZGVy
ZmxvdygpOwoKCgogIHZpcnR1YWwgaW50X3R5cGUgdWZsb3coKTsKCgoKCiAgdmlydHVhbCBpbnRf
dHlwZSBwYmFja2ZhaWwoaW50X3R5cGUgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpOwoKcHJvdGVjdGVk
OgoKCgoKICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBz
dHJlYW1zaXplIF9fbik7CgoKCiAgdmlydHVhbCBzdHJlYW1zaXplIF9NX3hzcHV0bmMoY2hhcl90
eXBlIF9fYywgc3RyZWFtc2l6ZSBfX24pOwoKCgogIHZpcnR1YWwgaW50X3R5cGUgb3ZlcmZsb3co
aW50X3R5cGUgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpOwoKcHVibGljOgoKICBpbnRfdHlwZSBzcHV0
YyhjaGFyX3R5cGUgX19jKSB7CiAgICByZXR1cm4gKChfTV9wbmV4dCA8IF9NX3BlbmQpID8gX1Ry
YWl0czo6dG9faW50X3R5cGUoKl9NX3BuZXh0KysgPSBfX2MpCiAgICAgIDogdGhpcy0+b3ZlcmZs
b3coX1RyYWl0czo6dG9faW50X3R5cGUoX19jKSkpOwogIH0KCgogIHN0cmVhbXNpemUgc3B1dG4o
Y29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgeyByZXR1cm4gdGhpcy0+
eHNwdXRuKF9fcywgX19uKTsgfQoKCiAgc3RyZWFtc2l6ZSBfTV9zcHV0bmMoY2hhcl90eXBlIF9f
Yywgc3RyZWFtc2l6ZSBfX24pCiAgICB7IHJldHVybiB0aGlzLT5fTV94c3B1dG5jKF9fYywgX19u
KTsgfQoKcHJpdmF0ZToKICBpbnRfdHlwZSBfTV9zbmV4dGNfYXV4KCk7CgoKcHVibGljOgogIHN0
cmVhbXNpemUgaW5fYXZhaWwoKSB7CiAgICByZXR1cm4gKF9NX2duZXh0IDwgX01fZ2VuZCkgPyAo
X01fZ2VuZCAtIF9NX2duZXh0KSA6IHRoaXMtPnNob3dtYW55YygpOwogIH0KCgogIGludF90eXBl
IHNuZXh0YygpIHsKICAgICAgICByZXR1cm4gKCBfTV9nZW5kIC0gX01fZ25leHQgPiAxID8KICAg
ICAgICAgICAgIF9UcmFpdHM6OnRvX2ludF90eXBlKCorK19NX2duZXh0KSA6CiAgICAgICAgICAg
ICB0aGlzLT5fTV9zbmV4dGNfYXV4KCkpOwogIH0KCgogIGludF90eXBlIHNidW1wYygpIHsKICAg
IHJldHVybiBfTV9nbmV4dCA8IF9NX2dlbmQgPyBfVHJhaXRzOjp0b19pbnRfdHlwZSgqX01fZ25l
eHQrKykKICAgICAgOiB0aGlzLT51ZmxvdygpOwogIH0KCgogIGludF90eXBlIHNnZXRjKCkgewog
ICAgcmV0dXJuIF9NX2duZXh0IDwgX01fZ2VuZCA/IF9UcmFpdHM6OnRvX2ludF90eXBlKCpfTV9n
bmV4dCkKICAgICAgOiB0aGlzLT51bmRlcmZsb3coKTsKICB9CgogIHN0cmVhbXNpemUgc2dldG4o
Y2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogIHsgcmV0dXJuIHRoaXMtPnhzZ2V0bihf
X3MsIF9fbik7IH0KCiAgaW50X3R5cGUgc3B1dGJhY2tjKGNoYXJfdHlwZSBfX2MpIHsKICAgIHJl
dHVybiAoKF9NX2diZWdpbiA8IF9NX2duZXh0KSAmJiBfVHJhaXRzOjplcShfX2MsICooX01fZ25l
eHQgLSAxKSkpCiAgICAgID8gX1RyYWl0czo6dG9faW50X3R5cGUoKi0tX01fZ25leHQpCiAgICAg
IDogdGhpcy0+cGJhY2tmYWlsKF9UcmFpdHM6OnRvX2ludF90eXBlKF9fYykpOwogIH0KCiAgaW50
X3R5cGUgc3VuZ2V0YygpIHsKICAgIHJldHVybiAoX01fZ2JlZ2luIDwgX01fZ25leHQpCiAgICAg
ID8gX1RyYWl0czo6dG9faW50X3R5cGUoKi0tX01fZ25leHQpCiAgICAgIDogdGhpcy0+cGJhY2tm
YWlsKCk7CiAgfQoKcHJvdGVjdGVkOgoKCgoKCiAgdmlydHVhbCB2b2lkIGltYnVlKGNvbnN0IGxv
Y2FsZSYpOwoKcHVibGljOgogIGxvY2FsZSBwdWJpbWJ1ZShjb25zdCBsb2NhbGUmKTsKICBsb2Nh
bGUgZ2V0bG9jKCkgY29uc3QgeyByZXR1cm4gX01fbG9jYWxlOyB9CgoKICB2b2lkIHN0b3NzYygp
IHsgdGhpcy0+c2J1bXBjKCk7IH0KIyAyODIgIi4uL3N0bHBvcnQvc3RsL19zdHJlYW1idWYuaCIK
fTsKIyAzMTMgIi4uL3N0bHBvcnQvc3RsL19zdHJlYW1idWYuaCIKdGVtcGxhdGU8PgpjbGFzcyBi
YXNpY19zdHJlYW1idWY8Y2hhciwgY2hhcl90cmFpdHM8Y2hhcj4gPgp7CiAgZnJpZW5kIGNsYXNz
IGJhc2ljX2lzdHJlYW08Y2hhciwgY2hhcl90cmFpdHM8Y2hhcj4gPjsKICBmcmllbmQgY2xhc3Mg
YmFzaWNfb3N0cmVhbTxjaGFyLCBjaGFyX3RyYWl0czxjaGFyPiA+OwpwdWJsaWM6CiAgdHlwZWRl
ZiBjaGFyIGNoYXJfdHlwZTsKICB0eXBlZGVmIGNoYXJfdHJhaXRzPGNoYXI+OjppbnRfdHlwZSBp
bnRfdHlwZTsKICB0eXBlZGVmIGNoYXJfdHJhaXRzPGNoYXI+Ojpwb3NfdHlwZSBwb3NfdHlwZTsK
ICB0eXBlZGVmIGNoYXJfdHJhaXRzPGNoYXI+OjpvZmZfdHlwZSBvZmZfdHlwZTsKICB0eXBlZGVm
IGNoYXJfdHJhaXRzPGNoYXI+IHRyYWl0c190eXBlOwoKcHJpdmF0ZToKCiAgRklMRSYgX01fZ2V0
OwogIEZJTEUmIF9NX3B1dDsKCgoKCgogIEZJTEUgX01fZGVmYXVsdF9nZXQ7CiAgRklMRSBfTV9k
ZWZhdWx0X3B1dDsKCgogIGxvY2FsZSBfTV9sb2NhbGU7CgpwdWJsaWM6CiAgX1NUTFBfbXV0ZXgg
X01fbG9jazsKCnB1YmxpYzoKICB2aXJ0dWFsIH5iYXNpY19zdHJlYW1idWYgKCk7Cgpwcm90ZWN0
ZWQ6CgoKICBiYXNpY19zdHJlYW1idWYgKCkKIyAzNjAgIi4uL3N0bHBvcnQvc3RsL19zdHJlYW1i
dWYuaCIKOwoKCgogIGJhc2ljX3N0cmVhbWJ1ZiAoRklMRSogX19nZXQsIEZJTEUqIF9fcHV0KTsK
CnByb3RlY3RlZDoKICBjaGFyX3R5cGUqIGViYWNrKCkgY29uc3QgeyByZXR1cm4gX0ZJTEVfSV9i
ZWdpbihfTV9nZXQpOyB9CiAgY2hhcl90eXBlKiBncHRyKCkgY29uc3QgeyByZXR1cm4gX0ZJTEVf
SV9uZXh0KF9NX2dldCk7IH0KICBjaGFyX3R5cGUqIGVncHRyKCkgY29uc3QgeyByZXR1cm4gX0ZJ
TEVfSV9lbmQoX01fZ2V0KTsgfQogIHZvaWQgZ2J1bXAoaW50IF9fbikgeyBfRklMRV9JX2J1bXAo
X01fZ2V0LCBfX24pOyB9CiAgdm9pZCBzZXRnKGNoYXJfdHlwZSogX19nYmVnaW4sIGNoYXJfdHlw
ZSogX19nbmV4dCwgY2hhcl90eXBlKiBfX2dlbmQpCiAgICB7IF9GSUxFX0lfc2V0KF9NX2dldCwg
X19nYmVnaW4sIF9fZ25leHQsIF9fZ2VuZCk7IH0KCnB1YmxpYzoKCgoKCiAgY2hhcl90eXBlKiBf
TV9lYmFjaygpIGNvbnN0IHsgcmV0dXJuIF9GSUxFX0lfYmVnaW4oX01fZ2V0KTsgfQogIGNoYXJf
dHlwZSogX01fZ3B0cigpIGNvbnN0IHsgcmV0dXJuIF9GSUxFX0lfbmV4dChfTV9nZXQpOyB9CiAg
Y2hhcl90eXBlKiBfTV9lZ3B0cigpIGNvbnN0IHsgcmV0dXJuIF9GSUxFX0lfZW5kKF9NX2dldCk7
IH0KCiAgdm9pZCBfTV9nYnVtcChpbnQgX19uKSB7IF9GSUxFX0lfYnVtcChfTV9nZXQsIF9fbik7
IH0KICB2b2lkIF9NX3NldGcoY2hhcl90eXBlKiBfX2diZWdpbiwgY2hhcl90eXBlKiBfX2duZXh0
LCBjaGFyX3R5cGUqIF9fZ2VuZCkKICAgIHsgX0ZJTEVfSV9zZXQoX01fZ2V0LCBfX2diZWdpbiwg
X19nbmV4dCwgX19nZW5kKTsgfQoKcHJvdGVjdGVkOgogIGNoYXJfdHlwZSogcGJhc2UoKSBjb25z
dCB7IHJldHVybiBfRklMRV9PX2JlZ2luKF9NX3B1dCk7IH0KICBjaGFyX3R5cGUqIHBwdHIoKSBj
b25zdCB7IHJldHVybiBfRklMRV9PX25leHQoX01fcHV0KTsgfQogIGNoYXJfdHlwZSogZXBwdHIo
KSBjb25zdCB7IHJldHVybiBfRklMRV9PX2VuZChfTV9wdXQpOyB9CgogIHZvaWQgcGJ1bXAoaW50
IF9fbikgeyBfRklMRV9PX2J1bXAoX01fcHV0LCBfX24pOyB9CiAgdm9pZCBzZXRwKGNoYXJfdHlw
ZSogX19wYmVnaW4sIGNoYXJfdHlwZSogX19wZW5kKQogICAgeyBfRklMRV9PX3NldChfTV9wdXQs
IF9fcGJlZ2luLCBfX3BiZWdpbiwgX19wZW5kKTsgfQoKcHJvdGVjdGVkOgogIHZpcnR1YWwgYmFz
aWNfc3RyZWFtYnVmPGNoYXIsIGNoYXJfdHJhaXRzPGNoYXI+ID4qIHNldGJ1ZihjaGFyX3R5cGUq
LCBzdHJlYW1zaXplKTsKICB2aXJ0dWFsIHBvc190eXBlIHNlZWtvZmYob2ZmX3R5cGUsIGlvc19i
YXNlOjpzZWVrZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1v
ZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsKICB2aXJ0dWFsIHBvc190eXBlCiAg
c2Vla3Bvcyhwb3NfdHlwZSwgaW9zX2Jhc2U6Om9wZW5tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9z
X2Jhc2U6Om91dCk7CiAgdmlydHVhbCBpbnQgc3luYygpOwoKcHVibGljOgogIGJhc2ljX3N0cmVh
bWJ1ZjxjaGFyLCBjaGFyX3RyYWl0czxjaGFyPiA+KiBwdWJzZXRidWYoY2hhcl90eXBlKiBfX3Ms
IHN0cmVhbXNpemUgX19uKQogICAgeyByZXR1cm4gdGhpcy0+c2V0YnVmKF9fcywgX19uKTsgfQoK
ICBwb3NfdHlwZSBwdWJzZWVrb2ZmKG9mZl90eXBlIF9fb2Zmc2V0LCBpb3NfYmFzZTo6c2Vla2Rp
ciBfX3dheSwKICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZCA9
IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICB7IHJldHVybiB0aGlzLT5zZWVrb2Zm
KF9fb2Zmc2V0LCBfX3dheSwgX19tb2QpOyB9CgogIHBvc190eXBlIHB1YnNlZWtwb3MocG9zX3R5
cGUgX19zcCwKICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZCA9
IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICB7IHJldHVybiB0aGlzLT5zZWVrcG9z
KF9fc3AsIF9fbW9kKTsgfQoKICBpbnQgcHVic3luYygpIHsgcmV0dXJuIHRoaXMtPnN5bmMoKTsg
fQoKcHJvdGVjdGVkOgogIHZpcnR1YWwgc3RyZWFtc2l6ZSBzaG93bWFueWMoKTsKICB2aXJ0dWFs
IHN0cmVhbXNpemUgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CiAgdmly
dHVhbCBpbnRfdHlwZSB1bmRlcmZsb3coKTsKICB2aXJ0dWFsIGludF90eXBlIHVmbG93KCk7CiAg
dmlydHVhbCBpbnRfdHlwZSBwYmFja2ZhaWwoaW50X3R5cGUgX19jID0gdHJhaXRzX3R5cGU6OmVv
ZigpKTsKCnByb3RlY3RlZDoKICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNwdXRuKGNvbnN0IGNoYXJf
dHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CiAgdmlydHVhbCBzdHJlYW1zaXplIF9NX3hzcHV0
bmMoY2hhcl90eXBlIF9fYywgc3RyZWFtc2l6ZSBfX24pOwogIHZpcnR1YWwgaW50X3R5cGUgb3Zl
cmZsb3coaW50X3R5cGUgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpOwoKcHVibGljOgoKICBpbnRfdHlw
ZSBzcHV0YyhjaGFyX3R5cGUgX19jKSB7CiAgICBpbnRfdHlwZSBfX3JlczsKICAgICAgICBpZigg
X0ZJTEVfT19hdmFpbChfTV9wdXQpID4gMCApCiAgICAgICAgewogICAgICAgICAgICAgICAgX0ZJ
TEVfT19wb3N0aW5jcihfTV9wdXQpID0gX19jOwogICAgICAgICAgICAgICAgX19yZXMgPSB0cmFp
dHNfdHlwZTo6dG9faW50X3R5cGUoX19jKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICBf
X3JlcyA9IHRoaXMtPm92ZXJmbG93KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKTsKICAg
IHJldHVybiBfX3JlczsKICB9CgoKICBzdHJlYW1zaXplIHNwdXRuKGNvbnN0IGNoYXJfdHlwZSog
X19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsgcmV0dXJuIHRoaXMtPnhzcHV0bihfX3MsIF9fbik7
IH0KCgogIHN0cmVhbXNpemUgX01fc3B1dG5jKGNoYXJfdHlwZSBfX2MsIHN0cmVhbXNpemUgX19u
KQogICAgeyByZXR1cm4gdGhpcy0+X01feHNwdXRuYyhfX2MsIF9fbik7IH0KCnByaXZhdGU6CiAg
aW50X3R5cGUgX01fc25leHRjX2F1eCgpOwoKcHVibGljOgogIHN0cmVhbXNpemUgaW5fYXZhaWwo
KQogICAgeyByZXR1cm4gX0ZJTEVfSV9hdmFpbChfTV9nZXQpID4gMCA/IF9GSUxFX0lfYXZhaWwo
X01fZ2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLT5zaG93
bWFueWMoKTsgfQoKCiAgaW50X3R5cGUgc25leHRjKCkgewogICAgcmV0dXJuIF9GSUxFX0lfYXZh
aWwoX01fZ2V0KSA+IDEKICAgICAgPyB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX0ZJTEVfSV9w
cmVpbmNyKF9NX2dldCkpCiAgICAgIDogdGhpcy0+X01fc25leHRjX2F1eCgpOwogIH0KCgogIGlu
dF90eXBlIHNidW1wYygpIHsKICAgIHJldHVybiBfRklMRV9JX2F2YWlsKF9NX2dldCkgPiAwCiAg
ICAgID8gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9GSUxFX0lfcG9zdGluY3IoX01fZ2V0KSkK
ICAgICAgOiB0aGlzLT51ZmxvdygpOwogIH0KCgogIGludF90eXBlIHNnZXRjKCkgewogICAgcmV0
dXJuIF9GSUxFX0lfYXZhaWwoX01fZ2V0KSA+IDAKICAgICAgPyB0cmFpdHNfdHlwZTo6dG9faW50
X3R5cGUoKl9GSUxFX0lfbmV4dChfTV9nZXQpKQogICAgICA6IHRoaXMtPnVuZGVyZmxvdygpOwog
IH0KCiAgc3RyZWFtc2l6ZSBzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAg
ICB7IHJldHVybiB0aGlzLT54c2dldG4oX19zLCBfX24pOyB9CgogIGludF90eXBlIHNwdXRiYWNr
YyhjaGFyX3R5cGUgX19jKSB7CiAgICByZXR1cm4gX0ZJTEVfSV9iZWdpbihfTV9nZXQpIDwgX0ZJ
TEVfSV9uZXh0KF9NX2dldCkgJiYKICAgICAgICAgICBfX2MgPT0gKihfRklMRV9JX25leHQoX01f
Z2V0KSAtIDEpCiAgICAgID8gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9GSUxFX0lfcHJlZGVj
cihfTV9nZXQpKQogICAgICA6IHRoaXMtPnBiYWNrZmFpbCh0cmFpdHNfdHlwZTo6dG9faW50X3R5
cGUoX19jKSk7CiAgfQoKICBpbnRfdHlwZSBzdW5nZXRjKCkgewogICAgcmV0dXJuIF9GSUxFX0lf
YmVnaW4oX01fZ2V0KSA8IF9GSUxFX0lfbmV4dChfTV9nZXQpCiAgICAgID8gdHJhaXRzX3R5cGU6
OnRvX2ludF90eXBlKF9GSUxFX0lfcHJlZGVjcihfTV9nZXQpKQogICAgICA6IHRoaXMtPnBiYWNr
ZmFpbCgpOwogIH0KCnByb3RlY3RlZDoKICB2aXJ0dWFsIHZvaWQgaW1idWUoY29uc3QgbG9jYWxl
Jik7CgpwdWJsaWM6CiAgbG9jYWxlIHB1YmltYnVlKGNvbnN0IGxvY2FsZSYpOwogIGxvY2FsZSBn
ZXRsb2MoKSBjb25zdCB7IHJldHVybiBfTV9sb2NhbGU7IH0KCgpwdWJsaWM6CiAgdm9pZCBzdG9z
c2MoKSB7IHRoaXMtPnNidW1wYygpOyB9CiMgNTIxICIuLi9zdGxwb3J0L3N0bC9fc3RyZWFtYnVm
LmgiCn07Cn0KCgojIDEgIi4uL3N0bHBvcnQvc3RsL19zdHJlYW1idWYuYyIgMQojIDIzICIuLi9z
dGxwb3J0L3N0bC9fc3RyZWFtYnVmLmMiCm5hbWVzcGFjZSBfU1RMIHsKCgoKdGVtcGxhdGUgPGNs
YXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0
cz46OmJhc2ljX3N0cmVhbWJ1ZigpCiAgOiBfTV9nYmVnaW4oMCksIF9NX2duZXh0KDApLCBfTV9n
ZW5kKDApLAogICAgX01fcGJlZ2luKDApLCBfTV9wbmV4dCgwKSwgX01fcGVuZCgwKSwKICAgIF9N
X2xvY2FsZSgpCnsKCn0KCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CmJh
c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+Ojp+YmFzaWNfc3RyZWFtYnVmKCkKe30KCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgpsb2NhbGUKYmFzaWNfc3RyZWFt
YnVmPF9DaGFyVCwgX1RyYWl0cz46OnB1YmltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpIHsKICB0
aGlzLT5pbWJ1ZShfX2xvYyk7CiAgbG9jYWxlIF9fdG1wID0gX01fbG9jYWxlOwogIF9NX2xvY2Fs
ZSA9IF9fbG9jOwogIHJldHVybiBfX3RtcDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xh
c3MgX1RyYWl0cz4Kc3RyZWFtc2l6ZQpiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6
eHNnZXRuKF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbikKewogIHN0cmVhbXNpemUgX19yZXN1
bHQgPSAwOwogIGNvbnN0IGludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CgogIHdoaWxl
IChfX3Jlc3VsdCA8IF9fbikgewogICAgaWYgKF9NX2duZXh0IDwgX01fZ2VuZCkgewogICAgICBz
aXplX3QgX19jaHVuayA9IChtaW4pIChzdGF0aWNfY2FzdDxzaXplX3Q+KF9NX2dlbmQgLSBfTV9n
bmV4dCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHNpemVfdD4oX19u
IC0gX19yZXN1bHQpKTsKICAgICAgX1RyYWl0czo6Y29weShfX3MsIF9NX2duZXh0LCBfX2NodW5r
KTsKICAgICAgX19yZXN1bHQgKz0gX19jaHVuazsKICAgICAgX19zICs9IF9fY2h1bms7CiAgICAg
IF9NX2duZXh0ICs9IF9fY2h1bms7CiAgICB9CiAgICBlbHNlIHsKICAgICAgaW50X3R5cGUgX19j
ID0gdGhpcy0+c2J1bXBjKCk7CiAgICAgIGlmICghX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBf
X2VvZikpIHsKICAgICAgICAqX19zID0gX19jOwogICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAg
KytfX3M7CiAgICAgIH0KICAgICAgZWxzZQogICAgICAgIGJyZWFrOwogICAgfQogIH0KCiAgcmV0
dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgpz
dHJlYW1zaXplCmJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+Ojp4c3B1dG4oY29uc3Qg
X0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQp7CiAgc3RyZWFtc2l6ZSBfX3Jlc3VsdCA9IDA7
CiAgY29uc3QgaW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKCiAgd2hpbGUgKF9fcmVz
dWx0IDwgX19uKSB7CiAgICBpZiAoX01fcG5leHQgPCBfTV9wZW5kKSB7CiAgICAgIHNpemVfdCBf
X2NodW5rID0gKG1pbikgKHN0YXRpY19jYXN0PHNpemVfdD4oX01fcGVuZCAtIF9NX3BuZXh0KSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c2l6ZV90PihfX24gLSBfX3Jl
c3VsdCkpOwogICAgICBfVHJhaXRzOjpjb3B5KF9NX3BuZXh0LCBfX3MsIF9fY2h1bmspOwogICAg
ICBfX3Jlc3VsdCArPSBfX2NodW5rOwogICAgICBfX3MgKz0gX19jaHVuazsKICAgICAgX01fcG5l
eHQgKz0gX19jaHVuazsKICAgIH0KCiAgICBlbHNlIGlmICghX1RyYWl0czo6ZXFfaW50X3R5cGUo
dGhpcy0+b3ZlcmZsb3coX1RyYWl0czo6dG9faW50X3R5cGUoKl9fcykpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fZW9mKSkgewogICAgICArK19fcmVzdWx0OwogICAgICAr
K19fczsKICAgIH0KICAgIGVsc2UKICAgICAgYnJlYWs7CiAgfQogIHJldHVybiBfX3Jlc3VsdDsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4Kc3RyZWFtc2l6ZQpiYXNp
Y19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6X01feHNwdXRuYyhfQ2hhclQgX19jLCBzdHJl
YW1zaXplIF9fbikKewogIHN0cmVhbXNpemUgX19yZXN1bHQgPSAwOwogIGNvbnN0IGludF90eXBl
IF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CgogIHdoaWxlIChfX3Jlc3VsdCA8IF9fbikgewogICAg
aWYgKF9NX3BuZXh0IDwgX01fcGVuZCkgewogICAgICBzaXplX3QgX19jaHVuayA9IChtaW4pIChz
dGF0aWNfY2FzdDxzaXplX3Q+KF9NX3BlbmQgLSBfTV9wbmV4dCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PHNpemVfdD4oX19uIC0gX19yZXN1bHQpKTsKICAgICAgX1Ry
YWl0czo6YXNzaWduKF9NX3BuZXh0LCBfX2NodW5rLCBfX2MpOwogICAgICBfX3Jlc3VsdCArPSBf
X2NodW5rOwogICAgICBfTV9wbmV4dCArPSBfX2NodW5rOwogICAgfQoKICAgIGVsc2UgaWYgKCFf
VHJhaXRzOjplcV9pbnRfdHlwZSh0aGlzLT5vdmVyZmxvdyhfVHJhaXRzOjp0b19pbnRfdHlwZShf
X2MpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2VvZikpCiAgICAgICsr
X19yZXN1bHQ7CiAgICBlbHNlCiAgICAgIGJyZWFrOwogIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CnR5cGVuYW1lIGJhc2ljX3N0
cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQpiYXNpY19zdHJlYW1idWY8X0NoYXJU
LCBfVHJhaXRzPjo6X01fc25leHRjX2F1eCgpCnsKICBpbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6
OmVvZigpOwogIGlmIChfTV9nZW5kID09IF9NX2duZXh0KQogICAgcmV0dXJuIF9UcmFpdHM6OmVx
X2ludF90eXBlKHRoaXMtPnVmbG93KCksIF9fZW9mKSA/IF9fZW9mIDogdGhpcy0+c2dldGMoKTsK
ICBlbHNlIHsKICAgIF9NX2duZXh0ID0gX01fZ2VuZDsKICAgIHJldHVybiB0aGlzLT51bmRlcmZs
b3coKTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CnR5cGVu
YW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQpiYXNpY19zdHJl
YW1idWY8X0NoYXJULCBfVHJhaXRzPjo6cGJhY2tmYWlsKGludF90eXBlKSB7CiByZXR1cm4gX1Ry
YWl0czo6ZW9mKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CnR5
cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQpiYXNpY19z
dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6b3ZlcmZsb3coaW50X3R5cGUpIHsKICByZXR1cm4g
X1RyYWl0czo6ZW9mKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+
CnR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQpiYXNp
Y19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6dWZsb3coKSB7CiAgICByZXR1cm4gKCBfVHJh
aXRzOjplcV9pbnRfdHlwZSh0aGlzLT51bmRlcmZsb3coKSxfVHJhaXRzOjplb2YoKSkgPwogICAg
ICAgICAgICAgX1RyYWl0czo6ZW9mKCkgOgogICAgICAgICAgICAgX1RyYWl0czo6dG9faW50X3R5
cGUoKl9NX2duZXh0KyspKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0
cz4KdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCmJh
c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+Ojp1bmRlcmZsb3coKQp7IHJldHVybiBfVHJh
aXRzOjplb2YoKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4Kc3Ry
ZWFtc2l6ZQpiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6c2hvd21hbnljKCkKeyBy
ZXR1cm4gMDsgfQoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4Kdm9pZApi
YXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW1idWUoY29uc3QgbG9jYWxlJikge30K
CnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CmludApiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPjo6c3luYygpIHsgcmV0dXJuIDA7IH0KCnRlbXBsYXRlIDxjbGFz
cyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CnR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs
IF9UcmFpdHM+Ojpwb3NfdHlwZQpiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6c2Vl
a3Bvcyhwb3NfdHlwZSwgaW9zX2Jhc2U6Om9wZW5tb2RlKQp7IHJldHVybiBwb3NfdHlwZSgtMSk7
IH0KCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CnR5cGVuYW1lIGJhc2lj
X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQpiYXNpY19zdHJlYW1idWY8X0No
YXJULCBfVHJhaXRzPjo6c2Vla29mZihvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSkK
eyByZXR1cm4gcG9zX3R5cGUoLTEpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBf
VHJhaXRzPgpiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKYmFzaWNfc3RyZWFtYnVm
PF9DaGFyVCwgX1RyYWl0cz46OiBzZXRidWYoY2hhcl90eXBlKiwgc3RyZWFtc2l6ZSkKeyByZXR1
cm4gdGhpczsgfQojIDIwOCAiLi4vc3RscG9ydC9zdGwvX3N0cmVhbWJ1Zi5jIgp9CiMgNTI2ICIu
Li9zdGxwb3J0L3N0bC9fc3RyZWFtYnVmLmgiIDIKIyAyOCAiLi4vc3RscG9ydC9zdGwvX29zdHJl
YW1idWZfaXRlcmF0b3IuaCIgMgoKCm5hbWVzcGFjZSBfU1RMIHsKCnRlbXBsYXRlIDxjbGFzcyBf
Q2hhclQsIGNsYXNzIF9UcmFpdHM+CmV4dGVybiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh
aXRzPiogX01fZ2V0X29zdHJlYW1idWYoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiAp
IDsKCgp0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CmNsYXNzIG9zdHJlYW1i
dWZfaXRlcmF0b3IKewpwdWJsaWM6CiAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogIHR5cGVk
ZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90
eXBlIGludF90eXBlOwogIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4g
c3RyZWFtYnVmX3R5cGU7CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4g
b3N0cmVhbV90eXBlOwoKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0
ZWdvcnk7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVu
Y2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNl
OwoKcHVibGljOgogIG9zdHJlYW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5cGUqIF9fYnVmKSA6
IF9NX2J1ZihfX2J1ZiksIF9NX29rKF9fYnVmIT0wKSB7fQoKICBpbmxpbmUgb3N0cmVhbWJ1Zl9p
dGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fbykgOwoKICBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFy
VCwgX1RyYWl0cz4mIG9wZXJhdG9yPShjaGFyX3R5cGUgX19jKSB7CiAgICBfTV9vayA9IF9NX29r
ICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX01fYnVmLT5zcHV0YyhfX2MpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjplb2Yo
KSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwg
X1RyYWl0cz4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgb3N0cmVhbWJ1Zl9pdGVy
YXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBv
c3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIG9wZXJhdG9yKysoaW50KSB7IHJl
dHVybiAqdGhpczsgfQoKICBib29sIGZhaWxlZCgpIGNvbnN0IHsgcmV0dXJuICFfTV9vazsgfQoK
cHJpdmF0ZToKICBzdHJlYW1idWZfdHlwZSogX01fYnVmOwogIGJvb2wgX01fb2s7Cn07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgppbmxpbmUgb3N0cmVhbWJ1Zl9pdGVy
YXRvcjxfQ2hhclQsIF9UcmFpdHM+Ojpvc3RyZWFtYnVmX2l0ZXJhdG9yKGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYgX19vKSA6IF9NX2J1ZihfTV9nZXRfb3N0cmVhbWJ1ZihfX28pKSwg
X01fb2soX01fYnVmICE9IDApIHt9CiMgOTAgIi4uL3N0bHBvcnQvc3RsL19vc3RyZWFtYnVmX2l0
ZXJhdG9yLmgiCn0KIyAzMiAiLi4vc3RscG9ydC9zdGwvX21vbmV0YXJ5LmgiIDIKCgoKIyAxICIu
Li9zdGxwb3J0L3N0bC9faXN0cmVhbWJ1Zl9pdGVyYXRvci5oIiAxCiMgMzQgIi4uL3N0bHBvcnQv
c3RsL19pc3RyZWFtYnVmX2l0ZXJhdG9yLmgiCm5hbWVzcGFjZSBfU1RMIHsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgpleHRlcm4gYmFzaWNfc3RyZWFtYnVmPF9DaGFy
VCwgX1RyYWl0cz4qIF9NX2dldF9pc3RyZWFtYnVmKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYgKSA7CgoKCgoKdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgpjbGFz
cyBpc3RyZWFtYnVmX2l0ZXJhdG9yCnsKcHVibGljOgogIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw
ZTsKICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfVHJh
aXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs
IF9UcmFpdHM+IHN0cmVhbWJ1Zl90eXBlOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+IGlzdHJlYW1fdHlwZTsKCiAgdHlwZWRlZiBpbnB1dF9pdGVyYXRvcl90YWcgaXRl
cmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfQ2hhclQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5
cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0
IF9DaGFyVCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9DaGFyVCYgcmVmZXJlbmNlOwoKcHVi
bGljOgogIGlzdHJlYW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5cGUqIF9fcCA9IDApIHsgdGhp
cy0+X01faW5pdChfX3ApOyB9CgogIGlubGluZSBpc3RyZWFtYnVmX2l0ZXJhdG9yKGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcyk7CgogIGNoYXJfdHlwZSBvcGVyYXRvciooKSBj
b25zdCB7IHRoaXMtPl9NX2dldGMoKTsgcmV0dXJuIF9NX2M7IH0KICBpc3RyZWFtYnVmX2l0ZXJh
dG9yPF9DaGFyVCwgX1RyYWl0cz4mIG9wZXJhdG9yKysoKSB7IHRoaXMtPl9NX2J1bXBjKCk7IHJl
dHVybiAqdGhpczsgfQogIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBvcGVy
YXRvcisrKGludCk7CgogIGJvb2wgZXF1YWwoY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh
clQsIF9UcmFpdHM+JiBfX2kpIGNvbnN0IHsKICAgIGlmICh0aGlzLT5fTV9idWYpCiAgICAgIHRo
aXMtPl9NX2dldGMoKTsKICAgIGlmIChfX2kuX01fYnVmKQogICAgICBfX2kuX01fZ2V0YygpOwog
ICAgcmV0dXJuIHRoaXMtPl9NX2VvZiA9PSBfX2kuX01fZW9mOwogIH0KCnByaXZhdGU6CiAgdm9p
ZCBfTV9pbml0KHN0cmVhbWJ1Zl90eXBlKiBfX3ApIHsKICAgIF9NX2J1ZiA9IF9fcDsKICAgIF9N
X2VvZiA9ICFfX3A7CgogICAgX01faGF2ZV9jID0gZmFsc2U7CiAgfQoKICB2b2lkIF9NX2dldGMo
KSBjb25zdCB7CiAgICBpZiAoX01faGF2ZV9jKQogICAgICByZXR1cm47CiAgICBpbnRfdHlwZSBf
X2MgPSBfTV9idWYtPnNnZXRjKCk7CgogICAgX01fYyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5
cGUoX19jKTsKICAgIF9NX2VvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIHRyYWl0
c190eXBlOjplb2YoKSk7CiAgICBfTV9oYXZlX2MgPSB0cnVlOwoKCgoKCgoKICB9CgogIHZvaWQg
X01fYnVtcGMoKSB7CiAgICBfTV9idWYtPnNidW1wYygpOwogICAgX01faGF2ZV9jID0gZmFsc2U7
CiAgfQoKcHJpdmF0ZToKICBzdHJlYW1idWZfdHlwZSogX01fYnVmOwogIG11dGFibGUgX0NoYXJU
IF9NX2M7CiAgbXV0YWJsZSB1bnNpZ25lZCBjaGFyIF9NX2VvZjsKICBtdXRhYmxlIHVuc2lnbmVk
IGNoYXIgX01faGF2ZV9jOwp9OwoKdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRz
PgppbmxpbmUgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+Ojppc3RyZWFtYnVm
X2l0ZXJhdG9yKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcykKeyB0aGlzLT5f
TV9pbml0KF9NX2dldF9pc3RyZWFtYnVmKF9faXMpKTsgfQoKdGVtcGxhdGU8Y2xhc3MgX0NoYXJU
LCBjbGFzcyBfVHJhaXRzPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1idWZf
aXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX3kp
IHsKICByZXR1cm4gX194LmVxdWFsKF9feSk7Cn0KCgoKdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBj
bGFzcyBfVHJhaXRzPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGlzdHJlYW1idWZfaXRl
cmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX3kpIHsK
ICByZXR1cm4gIV9feC5lcXVhbChfX3kpOwp9CiMgMTUxICIuLi9zdGxwb3J0L3N0bC9faXN0cmVh
bWJ1Zl9pdGVyYXRvci5oIgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgpp
c3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4KaXN0cmVhbWJ1Zl9pdGVyYXRvcjxf
Q2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcisrKGludCkgewogIGlzdHJlYW1idWZfaXRlcmF0b3I8
X0NoYXJULCBfVHJhaXRzPiBfX3RtcCA9ICp0aGlzOwogIHRoaXMtPl9NX2J1bXBjKCk7CiAgdGhp
cy0+X01faGF2ZV9jID0gZmFsc2U7CiAgcmV0dXJuIF9fdG1wOwp9Cgp9CiMgMzYgIi4uL3N0bHBv
cnQvc3RsL19tb25ldGFyeS5oIiAyCgoKbmFtZXNwYWNlIF9TVEwgewoKY2xhc3MgbW9uZXlfYmFz
ZSB7CnB1YmxpYzoKICBlbnVtIHBhcnQge25vbmUsIHNwYWNlLCBzeW1ib2wsIHNpZ24sIHZhbHVl
fTsKICBzdHJ1Y3QgcGF0dGVybiB7CiAgICBjaGFyIGZpZWxkWzRdOwogIH07Cn07CgoKdGVtcGxh
dGUgPGNsYXNzIF9jaGFyVCwgYm9vbCBfSW50ZXJuYXRpb25hbCA9IGZhbHNlID4gY2xhc3MgbW9u
ZXlwdW5jdCB7fTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0lucHV0SXRlciA9
IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CmNsYXNzIG1vbmV5X2dldCA6IHB1YmxpYyBs
b2NhbGU6OmZhY2V0CnsKICBmcmllbmQgY2xhc3MgX0xvY2FsZTsKcHVibGljOgogIHR5cGVkZWYg
X0NoYXJUIGNoYXJfdHlwZTsKICB0eXBlZGVmIF9JbnB1dEl0ZXIgaXRlcl90eXBlOwogIHR5cGVk
ZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgY2hhcl90cmFpdHM8X0NoYXJUPiwgYWxsb2NhdG9yPF9D
aGFyVD4gPiBzdHJpbmdfdHlwZTsKCiAgbW9uZXlfZ2V0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxv
Y2FsZTo6ZmFjZXQoX19yZWZzKSB7fQoKICBpdGVyX3R5cGUgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0
ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsCiAgICAgICAgICAgICAgICBpb3NfYmFzZSYgX19z
dHIsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgICAgIGxvbmcgZG91Ymxl
JiBfX3VuaXRzKSBjb25zdAogICAgeyByZXR1cm4gZG9fZ2V0KF9fcywgX19lbmQsIF9faW50bCwg
X19zdHIsIF9fZXJyLCBfX3VuaXRzKTsgfQoKICBpdGVyX3R5cGUgZ2V0KGl0ZXJfdHlwZSBfX3Ms
IGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsCiAgICAgICAgICAgICAgICBpb3NfYmFzZSYg
X19zdHIsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgICAgIHN0cmluZ190
eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgIHsgcmV0dXJuIGRvX2dldChfX3MsIF9fZW5kLCBfX2lu
dGwsIF9fc3RyLCBfX2VyciwgX19kaWdpdHMpOyB9CgogIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoK
cHJvdGVjdGVkOgogIH5tb25leV9nZXQoKSB7fQoKICB2aXJ0dWFsIGl0ZXJfdHlwZSBkb19nZXQo
aXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW9zX2Jhc2UmIF9fc3RyLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZG91YmxlJiBfX3VuaXRzKSBjb25zdDsK
CiAgdmlydHVhbCBpdGVyX3R5cGUgZG9fZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2Vu
ZCwgYm9vbCBfX2ludGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlJiBfX3N0
ciwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0Owp9OwoKCgoKdGVtcGxhdGU8PgpjbGFzcyBtb25l
eXB1bmN0PGNoYXIsIHRydWU+IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBtb25leV9i
YXNlCnsKCnB1YmxpYzoKICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwogIHR5cGVkZWYgc3RyaW5n
IHN0cmluZ190eXBlOwogIGV4cGxpY2l0IG1vbmV5cHVuY3QgKHNpemVfdCBfX3JlZnMgPSAwKTsK
CiAgY2hhciBkZWNpbWFsX3BvaW50KCkgY29uc3QgeyByZXR1cm4gZG9fZGVjaW1hbF9wb2ludCgp
OyB9CiAgY2hhciB0aG91c2FuZHNfc2VwKCkgY29uc3QgeyByZXR1cm4gZG9fdGhvdXNhbmRzX3Nl
cCgpOyB9CiAgc3RyaW5nIGdyb3VwaW5nKCkgY29uc3QgeyByZXR1cm4gZG9fZ3JvdXBpbmcoKTsg
fQogIHN0cmluZ190eXBlIGN1cnJfc3ltYm9sKCkgY29uc3QgeyByZXR1cm4gZG9fY3Vycl9zeW1i
b2woKTsgfQogIHN0cmluZ190eXBlIHBvc2l0aXZlX3NpZ24oKSBjb25zdCB7IHJldHVybiBkb19w
b3NpdGl2ZV9zaWduKCk7IH0KICBzdHJpbmdfdHlwZSBuZWdhdGl2ZV9zaWduKCkgY29uc3QgeyBy
ZXR1cm4gZG9fbmVnYXRpdmVfc2lnbigpOyB9CiAgaW50IGZyYWNfZGlnaXRzKCkgY29uc3QgeyBy
ZXR1cm4gZG9fZnJhY19kaWdpdHMoKTsgfQogIHBhdHRlcm4gcG9zX2Zvcm1hdCgpIGNvbnN0IHsg
cmV0dXJuIGRvX3Bvc19mb3JtYXQoKTsgfQogIHBhdHRlcm4gbmVnX2Zvcm1hdCgpIGNvbnN0IHsg
cmV0dXJuIGRvX25lZ19mb3JtYXQoKTsgfQoKICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCgoKICBz
dGF0aWMgY29uc3QgYm9vbCBpbnRsID0gdHJ1ZTsKCgpwcm90ZWN0ZWQ6CiAgcGF0dGVybiBfTV9w
b3NfZm9ybWF0OwogIHBhdHRlcm4gX01fbmVnX2Zvcm1hdDsKCiAgfm1vbmV5cHVuY3QgKCk7Cgog
IHZpcnR1YWwgY2hhciBkb19kZWNpbWFsX3BvaW50KCkgY29uc3Q7CiAgdmlydHVhbCBjaGFyIGRv
X3Rob3VzYW5kc19zZXAoKSBjb25zdDsKICB2aXJ0dWFsIHN0cmluZyBkb19ncm91cGluZygpIGNv
bnN0OwoKICB2aXJ0dWFsIHN0cmluZyBkb19jdXJyX3N5bWJvbCgpIGNvbnN0OwoKICB2aXJ0dWFs
IHN0cmluZyBkb19wb3NpdGl2ZV9zaWduKCkgY29uc3Q7CiAgdmlydHVhbCBzdHJpbmcgZG9fbmVn
YXRpdmVfc2lnbigpIGNvbnN0OwogIHZpcnR1YWwgaW50IGRvX2ZyYWNfZGlnaXRzKCkgY29uc3Q7
CiAgdmlydHVhbCBwYXR0ZXJuIGRvX3Bvc19mb3JtYXQoKSBjb25zdDsKICB2aXJ0dWFsIHBhdHRl
cm4gZG9fbmVnX2Zvcm1hdCgpIGNvbnN0OwoKICBmcmllbmQgY2xhc3MgX0xvY2FsZTsKCn07Cgp0
ZW1wbGF0ZTw+CmNsYXNzIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+IDogcHVibGljIGxvY2FsZTo6
ZmFjZXQsIHB1YmxpYyBtb25leV9iYXNlCnsKcHVibGljOgogIHR5cGVkZWYgY2hhciBjaGFyX3R5
cGU7CiAgdHlwZWRlZiBzdHJpbmcgc3RyaW5nX3R5cGU7CgogIGV4cGxpY2l0IG1vbmV5cHVuY3Qg
KHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgY2hhciBkZWNpbWFsX3BvaW50KCkgY29uc3QgeyByZXR1
cm4gZG9fZGVjaW1hbF9wb2ludCgpOyB9CiAgY2hhciB0aG91c2FuZHNfc2VwKCkgY29uc3QgeyBy
ZXR1cm4gZG9fdGhvdXNhbmRzX3NlcCgpOyB9CiAgc3RyaW5nIGdyb3VwaW5nKCkgY29uc3QgeyBy
ZXR1cm4gZG9fZ3JvdXBpbmcoKTsgfQogIHN0cmluZ190eXBlIGN1cnJfc3ltYm9sKCkgY29uc3Qg
eyByZXR1cm4gZG9fY3Vycl9zeW1ib2woKTsgfQogIHN0cmluZ190eXBlIHBvc2l0aXZlX3NpZ24o
KSBjb25zdCB7IHJldHVybiBkb19wb3NpdGl2ZV9zaWduKCk7IH0KICBzdHJpbmdfdHlwZSBuZWdh
dGl2ZV9zaWduKCkgY29uc3QgeyByZXR1cm4gZG9fbmVnYXRpdmVfc2lnbigpOyB9CiAgaW50IGZy
YWNfZGlnaXRzKCkgY29uc3QgeyByZXR1cm4gZG9fZnJhY19kaWdpdHMoKTsgfQogIHBhdHRlcm4g
cG9zX2Zvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIGRvX3Bvc19mb3JtYXQoKTsgfQogIHBhdHRlcm4g
bmVnX2Zvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIGRvX25lZ19mb3JtYXQoKTsgfQoKICBzdGF0aWMg
bG9jYWxlOjppZCBpZDsKCgoKICBzdGF0aWMgY29uc3QgYm9vbCBpbnRsID0gZmFsc2U7CgoKcHJv
dGVjdGVkOgogIHBhdHRlcm4gX01fcG9zX2Zvcm1hdDsKICBwYXR0ZXJuIF9NX25lZ19mb3JtYXQ7
CgogIH5tb25leXB1bmN0ICgpOwoKICB2aXJ0dWFsIGNoYXIgZG9fZGVjaW1hbF9wb2ludCgpIGNv
bnN0OwogIHZpcnR1YWwgY2hhciBkb190aG91c2FuZHNfc2VwKCkgY29uc3Q7CiAgdmlydHVhbCBz
dHJpbmcgZG9fZ3JvdXBpbmcoKSBjb25zdDsKCiAgdmlydHVhbCBzdHJpbmcgZG9fY3Vycl9zeW1i
b2woKSBjb25zdDsKCiAgdmlydHVhbCBzdHJpbmcgZG9fcG9zaXRpdmVfc2lnbigpIGNvbnN0Owog
IHZpcnR1YWwgc3RyaW5nIGRvX25lZ2F0aXZlX3NpZ24oKSBjb25zdDsKICB2aXJ0dWFsIGludCBk
b19mcmFjX2RpZ2l0cygpIGNvbnN0OwogIHZpcnR1YWwgcGF0dGVybiBkb19wb3NfZm9ybWF0KCkg
Y29uc3Q7CiAgdmlydHVhbCBwYXR0ZXJuIGRvX25lZ19mb3JtYXQoKSBjb25zdDsKCiAgZnJpZW5k
IGNsYXNzIF9Mb2NhbGU7Cn07CgoKCgp0ZW1wbGF0ZTw+CmNsYXNzIG1vbmV5cHVuY3Q8d2NoYXJf
dCwgdHJ1ZT4gOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIG1vbmV5X2Jhc2UKewogIGZy
aWVuZCBjbGFzcyBfTG9jYWxlOwpwdWJsaWM6CiAgdHlwZWRlZiB3Y2hhcl90IGNoYXJfdHlwZTsK
ICB0eXBlZGVmIHdzdHJpbmcgc3RyaW5nX3R5cGU7CiAgZXhwbGljaXQgbW9uZXlwdW5jdCAoc2l6
ZV90IF9fcmVmcyA9IDApOwogIHdjaGFyX3QgZGVjaW1hbF9wb2ludCgpIGNvbnN0IHsgcmV0dXJu
IGRvX2RlY2ltYWxfcG9pbnQoKTsgfQogIHdjaGFyX3QgdGhvdXNhbmRzX3NlcCgpIGNvbnN0IHsg
cmV0dXJuIGRvX3Rob3VzYW5kc19zZXAoKTsgfQogIHN0cmluZyBncm91cGluZygpIGNvbnN0IHsg
cmV0dXJuIGRvX2dyb3VwaW5nKCk7IH0KICBzdHJpbmdfdHlwZSBjdXJyX3N5bWJvbCgpIGNvbnN0
IHsgcmV0dXJuIGRvX2N1cnJfc3ltYm9sKCk7IH0KICBzdHJpbmdfdHlwZSBwb3NpdGl2ZV9zaWdu
KCkgY29uc3QgeyByZXR1cm4gZG9fcG9zaXRpdmVfc2lnbigpOyB9CiAgc3RyaW5nX3R5cGUgbmVn
YXRpdmVfc2lnbigpIGNvbnN0IHsgcmV0dXJuIGRvX25lZ2F0aXZlX3NpZ24oKTsgfQogIGludCBm
cmFjX2RpZ2l0cygpIGNvbnN0IHsgcmV0dXJuIGRvX2ZyYWNfZGlnaXRzKCk7IH0KICBwYXR0ZXJu
IHBvc19mb3JtYXQoKSBjb25zdCB7IHJldHVybiBkb19wb3NfZm9ybWF0KCk7IH0KICBwYXR0ZXJu
IG5lZ19mb3JtYXQoKSBjb25zdCB7IHJldHVybiBkb19uZWdfZm9ybWF0KCk7IH0KCiAgc3RhdGlj
IGxvY2FsZTo6aWQgaWQ7CgoKCiAgc3RhdGljIGNvbnN0IGJvb2wgaW50bCA9IHRydWU7CgoKcHJv
dGVjdGVkOgogIHBhdHRlcm4gX01fcG9zX2Zvcm1hdDsKICBwYXR0ZXJuIF9NX25lZ19mb3JtYXQ7
CgogIH5tb25leXB1bmN0ICgpOwoKICB2aXJ0dWFsIHdjaGFyX3QgZG9fZGVjaW1hbF9wb2ludCgp
IGNvbnN0OwogIHZpcnR1YWwgd2NoYXJfdCBkb190aG91c2FuZHNfc2VwKCkgY29uc3Q7CiAgdmly
dHVhbCBzdHJpbmcgZG9fZ3JvdXBpbmcoKSBjb25zdDsKCiAgdmlydHVhbCBzdHJpbmdfdHlwZSBk
b19jdXJyX3N5bWJvbCgpIGNvbnN0OwoKICB2aXJ0dWFsIHN0cmluZ190eXBlIGRvX3Bvc2l0aXZl
X3NpZ24oKSBjb25zdDsKICB2aXJ0dWFsIHN0cmluZ190eXBlIGRvX25lZ2F0aXZlX3NpZ24oKSBj
b25zdDsKICB2aXJ0dWFsIGludCBkb19mcmFjX2RpZ2l0cygpIGNvbnN0OwogIHZpcnR1YWwgcGF0
dGVybiBkb19wb3NfZm9ybWF0KCkgY29uc3Q7CiAgdmlydHVhbCBwYXR0ZXJuIGRvX25lZ19mb3Jt
YXQoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZTw+CmNsYXNzIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFs
c2U+IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBtb25leV9iYXNlCnsKICBmcmllbmQg
Y2xhc3MgX0xvY2FsZTsKcHVibGljOgogIHR5cGVkZWYgd2NoYXJfdCBjaGFyX3R5cGU7CiAgdHlw
ZWRlZiB3c3RyaW5nIHN0cmluZ190eXBlOwogIGV4cGxpY2l0IG1vbmV5cHVuY3QgKHNpemVfdCBf
X3JlZnMgPSAwKTsKICB3Y2hhcl90IGRlY2ltYWxfcG9pbnQoKSBjb25zdCB7IHJldHVybiBkb19k
ZWNpbWFsX3BvaW50KCk7IH0KICB3Y2hhcl90IHRob3VzYW5kc19zZXAoKSBjb25zdCB7IHJldHVy
biBkb190aG91c2FuZHNfc2VwKCk7IH0KICBzdHJpbmcgZ3JvdXBpbmcoKSBjb25zdCB7IHJldHVy
biBkb19ncm91cGluZygpOyB9CiAgc3RyaW5nX3R5cGUgY3Vycl9zeW1ib2woKSBjb25zdCB7IHJl
dHVybiBkb19jdXJyX3N5bWJvbCgpOyB9CiAgc3RyaW5nX3R5cGUgcG9zaXRpdmVfc2lnbigpIGNv
bnN0IHsgcmV0dXJuIGRvX3Bvc2l0aXZlX3NpZ24oKTsgfQogIHN0cmluZ190eXBlIG5lZ2F0aXZl
X3NpZ24oKSBjb25zdCB7IHJldHVybiBkb19uZWdhdGl2ZV9zaWduKCk7IH0KICBpbnQgZnJhY19k
aWdpdHMoKSBjb25zdCB7IHJldHVybiBkb19mcmFjX2RpZ2l0cygpOyB9CiAgcGF0dGVybiBwb3Nf
Zm9ybWF0KCkgY29uc3QgeyByZXR1cm4gZG9fcG9zX2Zvcm1hdCgpOyB9CiAgcGF0dGVybiBuZWdf
Zm9ybWF0KCkgY29uc3QgeyByZXR1cm4gZG9fbmVnX2Zvcm1hdCgpOyB9CgogIHN0YXRpYyBsb2Nh
bGU6OmlkIGlkOwoKCgogIHN0YXRpYyBjb25zdCBib29sIGludGwgPSBmYWxzZTsKCgpwcm90ZWN0
ZWQ6CiAgcGF0dGVybiBfTV9wb3NfZm9ybWF0OwogIHBhdHRlcm4gX01fbmVnX2Zvcm1hdDsKCiAg
fm1vbmV5cHVuY3QgKCk7CgogIHZpcnR1YWwgd2NoYXJfdCBkb19kZWNpbWFsX3BvaW50KCkgY29u
c3Q7CiAgdmlydHVhbCB3Y2hhcl90IGRvX3Rob3VzYW5kc19zZXAoKSBjb25zdDsKICB2aXJ0dWFs
IHN0cmluZyBkb19ncm91cGluZygpIGNvbnN0OwoKICB2aXJ0dWFsIHN0cmluZ190eXBlIGRvX2N1
cnJfc3ltYm9sKCkgY29uc3Q7CgogIHZpcnR1YWwgc3RyaW5nX3R5cGUgZG9fcG9zaXRpdmVfc2ln
bigpIGNvbnN0OwogIHZpcnR1YWwgc3RyaW5nX3R5cGUgZG9fbmVnYXRpdmVfc2lnbigpIGNvbnN0
OwogIHZpcnR1YWwgaW50IGRvX2ZyYWNfZGlnaXRzKCkgY29uc3Q7CiAgdmlydHVhbCBwYXR0ZXJu
IGRvX3Bvc19mb3JtYXQoKSBjb25zdDsKICB2aXJ0dWFsIHBhdHRlcm4gZG9fbmVnX2Zvcm1hdCgp
IGNvbnN0Owp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX2NoYXJULCBib29sIF9JbnRlcm5hdGlvbmFs
ID0gZmFsc2UgPiBjbGFzcyBtb25leXB1bmN0X2J5bmFtZSB7fTsKCnRlbXBsYXRlPD4KY2xhc3Mg
bW9uZXlwdW5jdF9ieW5hbWU8Y2hhciwgdHJ1ZT4gOiBwdWJsaWMgbW9uZXlwdW5jdDxjaGFyLCB0
cnVlPgp7CnB1YmxpYzoKICB0eXBlZGVmIG1vbmV5X2Jhc2U6OnBhdHRlcm4gcGF0dGVybjsKICB0
eXBlZGVmIGNoYXIgY2hhcl90eXBlOwogIHR5cGVkZWYgc3RyaW5nIHN0cmluZ190eXBlOwoKICBl
eHBsaWNpdCBtb25leXB1bmN0X2J5bmFtZSAoY29uc3QgY2hhciAqIF9fbmFtZSwgc2l6ZV90IF9f
cmVmcyA9IDApOwoKcHJvdGVjdGVkOgogIF9Mb2NhbGVfbW9uZXRhcnkqIF9NX21vbmV0YXJ5Owog
IH5tb25leXB1bmN0X2J5bmFtZSAoKTsKICB2aXJ0dWFsIGNoYXIgZG9fZGVjaW1hbF9wb2ludCgp
IGNvbnN0OwogIHZpcnR1YWwgY2hhciBkb190aG91c2FuZHNfc2VwKCkgY29uc3Q7CiAgdmlydHVh
bCBzdHJpbmcgZG9fZ3JvdXBpbmcoKSBjb25zdDsKCiAgdmlydHVhbCBzdHJpbmdfdHlwZSBkb19j
dXJyX3N5bWJvbCgpIGNvbnN0OwoKICB2aXJ0dWFsIHN0cmluZ190eXBlIGRvX3Bvc2l0aXZlX3Np
Z24oKSBjb25zdDsKICB2aXJ0dWFsIHN0cmluZ190eXBlIGRvX25lZ2F0aXZlX3NpZ24oKSBjb25z
dDsKICB2aXJ0dWFsIGludCBkb19mcmFjX2RpZ2l0cygpIGNvbnN0Owp9OwoKdGVtcGxhdGU8Pgpj
bGFzcyBtb25leXB1bmN0X2J5bmFtZTxjaGFyLCBmYWxzZT4gOiBwdWJsaWMgbW9uZXlwdW5jdDxj
aGFyLCBmYWxzZT4KewpwdWJsaWM6CiAgdHlwZWRlZiBtb25leV9iYXNlOjpwYXR0ZXJuIHBhdHRl
cm47CiAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKICB0eXBlZGVmIHN0cmluZyBzdHJpbmdfdHlw
ZTsKCiAgZXhwbGljaXQgbW9uZXlwdW5jdF9ieW5hbWUgKGNvbnN0IGNoYXIgKiBfX25hbWUsIHNp
emVfdCBfX3JlZnMgPSAwKTsKCnByb3RlY3RlZDoKICBfTG9jYWxlX21vbmV0YXJ5KiBfTV9tb25l
dGFyeTsKICB+bW9uZXlwdW5jdF9ieW5hbWUgKCk7CiAgdmlydHVhbCBjaGFyIGRvX2RlY2ltYWxf
cG9pbnQoKSBjb25zdDsKICB2aXJ0dWFsIGNoYXIgZG9fdGhvdXNhbmRzX3NlcCgpIGNvbnN0Owog
IHZpcnR1YWwgc3RyaW5nIGRvX2dyb3VwaW5nKCkgY29uc3Q7CgogIHZpcnR1YWwgc3RyaW5nX3R5
cGUgZG9fY3Vycl9zeW1ib2woKSBjb25zdDsKCiAgdmlydHVhbCBzdHJpbmdfdHlwZSBkb19wb3Np
dGl2ZV9zaWduKCkgY29uc3Q7CiAgdmlydHVhbCBzdHJpbmdfdHlwZSBkb19uZWdhdGl2ZV9zaWdu
KCkgY29uc3Q7CiAgdmlydHVhbCBpbnQgZG9fZnJhY19kaWdpdHMoKSBjb25zdDsKfTsKCgp0ZW1w
bGF0ZTw+CmNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPHdjaGFyX3QsIHRydWU+IDogcHVibGljIG1v
bmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT4KewpwdWJsaWM6CiAgdHlwZWRlZiBtb25leV9iYXNlOjpw
YXR0ZXJuIHBhdHRlcm47CiAgdHlwZWRlZiB3Y2hhcl90IGNoYXJfdHlwZTsKICB0eXBlZGVmIHdz
dHJpbmcgc3RyaW5nX3R5cGU7CgogIGV4cGxpY2l0IG1vbmV5cHVuY3RfYnluYW1lIChjb25zdCBj
aGFyICogX19uYW1lLCBzaXplX3QgX19yZWZzID0gMCk7Cgpwcm90ZWN0ZWQ6CiAgX0xvY2FsZV9t
b25ldGFyeSogX01fbW9uZXRhcnk7CiAgfm1vbmV5cHVuY3RfYnluYW1lICgpOwogIHZpcnR1YWwg
d2NoYXJfdCBkb19kZWNpbWFsX3BvaW50KCkgY29uc3Q7CiAgdmlydHVhbCB3Y2hhcl90IGRvX3Ro
b3VzYW5kc19zZXAoKSBjb25zdDsKICB2aXJ0dWFsIHN0cmluZyBkb19ncm91cGluZygpIGNvbnN0
OwoKICB2aXJ0dWFsIHN0cmluZ190eXBlIGRvX2N1cnJfc3ltYm9sKCkgY29uc3Q7CgogIHZpcnR1
YWwgc3RyaW5nX3R5cGUgZG9fcG9zaXRpdmVfc2lnbigpIGNvbnN0OwogIHZpcnR1YWwgc3RyaW5n
X3R5cGUgZG9fbmVnYXRpdmVfc2lnbigpIGNvbnN0OwogIHZpcnR1YWwgaW50IGRvX2ZyYWNfZGln
aXRzKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZTw+CmNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPHdjaGFy
X3QsIGZhbHNlPiA6IHB1YmxpYyBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPgp7CnB1YmxpYzoK
ICB0eXBlZGVmIG1vbmV5X2Jhc2U6OnBhdHRlcm4gcGF0dGVybjsKICB0eXBlZGVmIHdjaGFyX3Qg
Y2hhcl90eXBlOwogIHR5cGVkZWYgd3N0cmluZyBzdHJpbmdfdHlwZTsKCiAgZXhwbGljaXQgbW9u
ZXlwdW5jdF9ieW5hbWUgKGNvbnN0IGNoYXIgKiBfX25hbWUsIHNpemVfdCBfX3JlZnMgPSAwKTsK
CnByb3RlY3RlZDoKICBfTG9jYWxlX21vbmV0YXJ5KiBfTV9tb25ldGFyeTsKICB+bW9uZXlwdW5j
dF9ieW5hbWUgKCk7CiAgdmlydHVhbCB3Y2hhcl90IGRvX2RlY2ltYWxfcG9pbnQoKSBjb25zdDsK
ICB2aXJ0dWFsIHdjaGFyX3QgZG9fdGhvdXNhbmRzX3NlcCgpIGNvbnN0OwogIHZpcnR1YWwgc3Ry
aW5nIGRvX2dyb3VwaW5nKCkgY29uc3Q7CgogIHZpcnR1YWwgc3RyaW5nX3R5cGUgZG9fY3Vycl9z
eW1ib2woKSBjb25zdDsKCiAgdmlydHVhbCBzdHJpbmdfdHlwZSBkb19wb3NpdGl2ZV9zaWduKCkg
Y29uc3Q7CiAgdmlydHVhbCBzdHJpbmdfdHlwZSBkb19uZWdhdGl2ZV9zaWduKCkgY29uc3Q7CiAg
dmlydHVhbCBpbnQgZG9fZnJhY19kaWdpdHMoKSBjb25zdDsKfTsKCgoKCgoKCnRlbXBsYXRlIDxj
bGFzcyBfQ2hhclQsIGNsYXNzIF9PdXRwdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh
clQ+ID4KY2xhc3MgbW9uZXlfcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQgewogIGZyaWVuZCBj
bGFzcyBfTG9jYWxlOwoKcHVibGljOgogIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICB0eXBl
ZGVmIF9PdXRwdXRJdGVyIGl0ZXJfdHlwZTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQs
IGNoYXJfdHJhaXRzPF9DaGFyVD4sIGFsbG9jYXRvcjxfQ2hhclQ+ID4gc3RyaW5nX3R5cGU7Cgog
IG1vbmV5X3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykge30K
CiAgaXRlcl90eXBlIHB1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9f
c3RyLAogICAgICAgICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX191bml0
cykgY29uc3QKICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9faW50bCwgX19zdHIsIF9fZmlsbCwg
X191bml0cyk7IH0KCiAgaXRlcl90eXBlIHB1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwg
aW9zX2Jhc2UmIF9fc3RyLAogICAgICAgICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwKICAgICAg
ICAgICAgICAgIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgIHsgcmV0dXJu
IGRvX3B1dChfX3MsIF9faW50bCwgX19zdHIsIF9fZmlsbCwgX19kaWdpdHMpOyB9CgogIHN0YXRp
YyBsb2NhbGU6OmlkIGlkOwoKcHJvdGVjdGVkOgogIH5tb25leV9wdXQoKSB7fQoKICB2aXJ0dWFs
IGl0ZXJfdHlwZSBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBf
X3N0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBk
b3VibGUgKSBjb25zdCB7CgogICAgbG9jYWxlIF9fbG9jID0gX19zdHIuZ2V0bG9jKCk7CiAgICBf
Q2hhclQgX19idWZbNjRdOwogICAgcmV0dXJuIGRvX3B1dChfX3MsIF9faW50bCwgX19zdHIsIF9f
ZmlsbCwgX19idWYgKyAwKTsKICB9CgogIHZpcnR1YWwgaXRlcl90eXBlIGRvX3B1dChpdGVyX3R5
cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9fc3RyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0Owp9OwojIDQ1MSAiLi4vc3RscG9ydC9zdGwv
X21vbmV0YXJ5LmgiCn0KCgojIDEgIi4uL3N0bHBvcnQvc3RsL19tb25ldGFyeS5jIiAxCiMgMjQg
Ii4uL3N0bHBvcnQvc3RsL19tb25ldGFyeS5jIgojIDEgIi4uL3N0bHBvcnQvc3RsL19pb3MuaCIg
MQojIDMwICIuLi9zdGxwb3J0L3N0bC9faW9zLmgiCiMgMSAiLi4vc3RscG9ydC9zdGwvX251bXB1
bmN0LmgiIDEKIyAzOCAiLi4vc3RscG9ydC9zdGwvX251bXB1bmN0LmgiCm5hbWVzcGFjZSBfU1RM
IHsKCgoKCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0IHt9Owp0ZW1wbGF0
ZSA8Y2xhc3MgX0NoYXJUPiBjbGFzcyBudW1wdW5jdF9ieW5hbWUge307CnRlbXBsYXRlIDxjbGFz
cyBfQ2gsIGNsYXNzIF9Jbkl0PiBjbGFzcyBudW1fZ2V0OwoKdGVtcGxhdGU8PgpjbGFzcyBudW1w
dW5jdDxjaGFyPiA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CnsKICBmcmllbmQgY2xhc3MgX0xvY2Fs
ZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9DaCwgY2xhc3MgX0luSXQ+IGZyaWVuZCBjbGFzcyBudW1f
Z2V0OwoKcHVibGljOgogIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7CiAgdHlwZWRlZiBzdHJpbmcg
c3RyaW5nX3R5cGU7CgogIGV4cGxpY2l0IG51bXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxv
Y2FsZTo6ZmFjZXQoX19yZWZzKSB7fQoKICBjaGFyIGRlY2ltYWxfcG9pbnQoKSBjb25zdCB7IHJl
dHVybiBkb19kZWNpbWFsX3BvaW50KCk7IH0KICBjaGFyIHRob3VzYW5kc19zZXAoKSBjb25zdCB7
IHJldHVybiBkb190aG91c2FuZHNfc2VwKCk7IH0KICBzdHJpbmcgZ3JvdXBpbmcoKSBjb25zdCB7
IHJldHVybiBkb19ncm91cGluZygpOyB9CiAgc3RyaW5nIHRydWVuYW1lKCkgY29uc3QgeyByZXR1
cm4gZG9fdHJ1ZW5hbWUoKTsgfQogIHN0cmluZyBmYWxzZW5hbWUoKSBjb25zdCB7IHJldHVybiBk
b19mYWxzZW5hbWUoKTsgfQoKICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCgpwcm90ZWN0ZWQ6Cgog
IH5udW1wdW5jdCgpOwoKICBzdGF0aWMgc3RyaW5nIF9NX3RydWVuYW1lOwogIHN0YXRpYyBzdHJp
bmcgX01fZmFsc2VuYW1lOwogIHN0YXRpYyBzdHJpbmcgX01fZ3JvdXBpbmc7CgogIHZpcnR1YWwg
Y2hhciBkb19kZWNpbWFsX3BvaW50KCkgY29uc3Q7CiAgdmlydHVhbCBjaGFyIGRvX3Rob3VzYW5k
c19zZXAoKSBjb25zdDsKICB2aXJ0dWFsIHN0cmluZyBkb19ncm91cGluZygpIGNvbnN0OwogIHZp
cnR1YWwgc3RyaW5nIGRvX3RydWVuYW1lKCkgY29uc3Q7CiAgdmlydHVhbCBzdHJpbmcgZG9fZmFs
c2VuYW1lKCkgY29uc3Q7Cn07CgoKCnRlbXBsYXRlPD4KY2xhc3MgbnVtcHVuY3Q8d2NoYXJfdD4g
OiBwdWJsaWMgbG9jYWxlOjpmYWNldAp7CiAgZnJpZW5kIGNsYXNzIF9Mb2NhbGU7CnB1YmxpYzoK
ICB0eXBlZGVmIHdjaGFyX3QgY2hhcl90eXBlOwogIHR5cGVkZWYgd3N0cmluZyBzdHJpbmdfdHlw
ZTsKCiAgZXhwbGljaXQgbnVtcHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNl
dChfX3JlZnMpIHt9CgogIHdjaGFyX3QgZGVjaW1hbF9wb2ludCgpIGNvbnN0IHsgcmV0dXJuIGRv
X2RlY2ltYWxfcG9pbnQoKTsgfQogIHdjaGFyX3QgdGhvdXNhbmRzX3NlcCgpIGNvbnN0IHsgcmV0
dXJuIGRvX3Rob3VzYW5kc19zZXAoKTsgfQogIHN0cmluZyBncm91cGluZygpIGNvbnN0IHsgcmV0
dXJuIGRvX2dyb3VwaW5nKCk7IH0KICB3c3RyaW5nIHRydWVuYW1lKCkgY29uc3QgeyByZXR1cm4g
ZG9fdHJ1ZW5hbWUoKTsgfQogIHdzdHJpbmcgZmFsc2VuYW1lKCkgY29uc3QgeyByZXR1cm4gZG9f
ZmFsc2VuYW1lKCk7IH0KCiAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7Cgpwcm90ZWN0ZWQ6CiAgc3Rh
dGljIHdzdHJpbmcgX01fdHJ1ZW5hbWU7CiAgc3RhdGljIHdzdHJpbmcgX01fZmFsc2VuYW1lOwog
IHN0YXRpYyBzdHJpbmcgX01fZ3JvdXBpbmc7CgogIH5udW1wdW5jdCgpOwoKICB2aXJ0dWFsIHdj
aGFyX3QgZG9fZGVjaW1hbF9wb2ludCgpIGNvbnN0OwogIHZpcnR1YWwgd2NoYXJfdCBkb190aG91
c2FuZHNfc2VwKCkgY29uc3Q7CiAgdmlydHVhbCBzdHJpbmcgZG9fZ3JvdXBpbmcoKSBjb25zdDsK
ICB2aXJ0dWFsIHdzdHJpbmcgZG9fdHJ1ZW5hbWUoKSBjb25zdDsKICB2aXJ0dWFsIHdzdHJpbmcg
ZG9fZmFsc2VuYW1lKCkgY29uc3Q7Cn07CgoKCnRlbXBsYXRlPD4KY2xhc3MgbnVtcHVuY3RfYnlu
YW1lPGNoYXI+IDogcHVibGljIG51bXB1bmN0PGNoYXI+IHsKcHVibGljOgogIHR5cGVkZWYgY2hh
ciBjaGFyX3R5cGU7CiAgdHlwZWRlZiBzdHJpbmcgc3RyaW5nX3R5cGU7CgogIGV4cGxpY2l0IG51
bXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiBfX25hbWUsIHNpemVfdCBfX3JlZnMgPSAwKTsKCnBy
b3RlY3RlZDoKCiAgfm51bXB1bmN0X2J5bmFtZSgpOwoKICB2aXJ0dWFsIGNoYXIgZG9fZGVjaW1h
bF9wb2ludCgpIGNvbnN0OwogIHZpcnR1YWwgY2hhciBkb190aG91c2FuZHNfc2VwKCkgY29uc3Q7
CiAgdmlydHVhbCBzdHJpbmcgZG9fZ3JvdXBpbmcoKSBjb25zdDsKCnByaXZhdGU6CiAgX0xvY2Fs
ZV9udW1lcmljKiBfTV9udW1lcmljOwp9OwoKCnRlbXBsYXRlPD4KY2xhc3MgbnVtcHVuY3RfYnlu
YW1lPHdjaGFyX3Q+OiBwdWJsaWMgbnVtcHVuY3Q8d2NoYXJfdD4gewpwdWJsaWM6CiAgdHlwZWRl
ZiB3Y2hhcl90IGNoYXJfdHlwZTsKICB0eXBlZGVmIHdzdHJpbmcgc3RyaW5nX3R5cGU7CgogIGV4
cGxpY2l0IG51bXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiBfX25hbWUsIHNpemVfdCBfX3JlZnMg
PSAwKTsKCnByb3RlY3RlZDoKCiAgfm51bXB1bmN0X2J5bmFtZSgpOwoKICB2aXJ0dWFsIHdjaGFy
X3QgZG9fZGVjaW1hbF9wb2ludCgpIGNvbnN0OwogIHZpcnR1YWwgd2NoYXJfdCBkb190aG91c2Fu
ZHNfc2VwKCkgY29uc3Q7CiAgdmlydHVhbCBzdHJpbmcgZG9fZ3JvdXBpbmcoKSBjb25zdDsKCnBy
aXZhdGU6CiAgX0xvY2FsZV9udW1lcmljKiBfTV9udW1lcmljOwp9OwoKCgp9CiMgMzEgIi4uL3N0
bHBvcnQvc3RsL19pb3MuaCIgMgoKCm5hbWVzcGFjZSBfU1RMIHsKIyA0NiAiLi4vc3RscG9ydC9z
dGwvX2lvcy5oIgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgpjbGFzcyBi
YXNpY19pb3MgOiBwdWJsaWMgaW9zX2Jhc2UgewogIGZyaWVuZCBjbGFzcyBpb3NfYmFzZTsKcHVi
bGljOgogIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFp
dHM6OmludF90eXBlIGludF90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5
cGUgcG9zX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlw
ZTsKICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgpwdWJsaWM6CiAgZXhwbGljaXQgYmFz
aWNfaW9zKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3N0cmVhbWJ1Zik7CiAg
dmlydHVhbCB+YmFzaWNfaW9zKCkge30KCnB1YmxpYzoKICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4qIHRpZSgpIGNvbnN0IHsKICAgIHJldHVybiBfTV90aWVkX29zdHJlYW07CiAgfQog
IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPioKICB0aWUoYmFzaWNfb3N0cmVhbTxjaGFy
X3R5cGUsIHRyYWl0c190eXBlPiogX19uZXdfdGllZF9vc3RyZWFtKSB7CiAgICBiYXNpY19vc3Ry
ZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+KiBfX3RtcCA9IF9NX3RpZWRfb3N0cmVhbTsKICAg
IF9NX3RpZWRfb3N0cmVhbSA9IF9fbmV3X3RpZWRfb3N0cmVhbTsKICAgIHJldHVybiBfX3RtcDsK
ICB9CgogIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiByZGJ1ZigpIGNvbnN0CiAg
ICB7IHJldHVybiBfTV9zdHJlYW1idWY7IH0KCiAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
YWl0cz4qCiAgcmRidWYoYmFzaWNfc3RyZWFtYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+Kik7
CgoKICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYgY29weWZtdChjb25zdCBiYXNpY19pb3M8
X0NoYXJULCBfVHJhaXRzPiYgX194KTsKCiAgY2hhcl90eXBlIGZpbGwoKSBjb25zdCB7IHJldHVy
biBfTV9maWxsOyB9CiAgY2hhcl90eXBlIGZpbGwoY2hhcl90eXBlIF9fZmlsbCkgewogICAgY2hh
cl90eXBlIF9fdG1wKF9NX2ZpbGwpOwogICAgX01fZmlsbCA9IF9fZmlsbDsKICAgIHJldHVybiBf
X3RtcDsKICB9CgpwdWJsaWM6CgoKICB2b2lkIGNsZWFyKGlvc3RhdGUgX19zdGF0ZSA9IGdvb2Ri
aXQpIHsKICAgIF9NX2NsZWFyX25vdGhyb3codGhpcy0+cmRidWYoKSA/IF9fc3RhdGUgOiBpb3N0
YXRlKF9fc3RhdGV8aW9zX2Jhc2U6OmJhZGJpdCkpOwogICAgX01fY2hlY2tfZXhjZXB0aW9uX21h
c2soKTsKICB9CiAgdm9pZCBzZXRzdGF0ZShpb3N0YXRlIF9fc3RhdGUpIHsgdGhpcy0+Y2xlYXIo
cmRzdGF0ZSgpIHwgX19zdGF0ZSk7IH0KCiAgaW9zdGF0ZSBleGNlcHRpb25zKCkgY29uc3QgeyBy
ZXR1cm4gdGhpcy0+X01fZ2V0X2V4Y2VwdGlvbl9tYXNrKCk7IH0KICB2b2lkIGV4Y2VwdGlvbnMo
aW9zdGF0ZSBfX21hc2spIHsKICAgIHRoaXMtPl9NX3NldF9leGNlcHRpb25fbWFzayhfX21hc2sp
OwogICAgdGhpcy0+Y2xlYXIodGhpcy0+cmRzdGF0ZSgpKTsKICB9CgpwdWJsaWM6CiAgbG9jYWxl
IGltYnVlKGNvbnN0IGxvY2FsZSYpOwoKICBpbmxpbmUgY2hhciBuYXJyb3coX0NoYXJULCBjaGFy
KSBjb25zdCA7CiAgaW5saW5lIF9DaGFyVCB3aWRlbihjaGFyKSBjb25zdDsKCgogIHN0YXRpYyBi
b29sIF9TX2VvZihpbnRfdHlwZSBfX2MpIHsKICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gX1Ry
YWl0czo6ZW9mKCk7CiAgICByZXR1cm4gX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZik7
CiAgfQoKcHJvdGVjdGVkOgogIGJhc2ljX2lvcygpOwoKICB2b2lkIGluaXQoYmFzaWNfc3RyZWFt
YnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc3RyZWFtYnVmKTsKCnB1YmxpYzoKCgoKICB2b2lkIF9N
X2hhbmRsZV9leGNlcHRpb24oaW9zX2Jhc2U6Omlvc3RhdGUgX19mbGFnKTsKCnByaXZhdGU6CiAg
Y2hhcl90eXBlIF9NX2ZpbGw7CgogIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBf
TV9zdHJlYW1idWY7CiAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfTV90aWVkX29z
dHJlYW07Cgp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CmlubGlu
ZSBjaGFyCmJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjpuYXJyb3coX0NoYXJUIF9fYywgY2hh
ciBfX2RlZmF1bHQpIGNvbnN0CnsgcmV0dXJuICgoY29uc3QgY3R5cGU8X0NoYXJUPiopdGhpcy0+
X01fY3R5cGVfZmFjZXQoKSktPm5hcnJvdyhfX2MsIF9fZGVmYXVsdCk7IH0KCnRlbXBsYXRlIDxj
bGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CmlubGluZSBfQ2hhclQKYmFzaWNfaW9zPF9DaGFy
VCwgX1RyYWl0cz46OndpZGVuKGNoYXIgX19jKSBjb25zdAp7CiAgcmV0dXJuICgoY29uc3QgY3R5
cGU8X0NoYXJUPiopdGhpcy0+X01fY3R5cGVfZmFjZXQoKSktPndpZGVuKF9fYyk7IH0KIyAxNTMg
Ii4uL3N0bHBvcnQvc3RsL19pb3MuaCIKdGVtcGxhdGU8PgppbmxpbmUgY2hhcgpiYXNpY19pb3M8
Y2hhciwgY2hhcl90cmFpdHM8Y2hhcj4gPjo6bmFycm93KGNoYXIgX19jLCBjaGFyKSBjb25zdAp7
CiAgcmV0dXJuIF9fYzsKfQoKdGVtcGxhdGU8PgppbmxpbmUgY2hhcgpiYXNpY19pb3M8Y2hhciwg
Y2hhcl90cmFpdHM8Y2hhcj4gPjo6d2lkZW4oY2hhciBfX2MpIGNvbnN0CnsKICByZXR1cm4gX19j
Owp9CgoKCn0KCgojIDEgIi4uL3N0bHBvcnQvc3RsL19pb3MuYyIgMQojIDMxICIuLi9zdGxwb3J0
L3N0bC9faW9zLmMiCm5hbWVzcGFjZSBfU1RMIHsKCgoKCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQs
IGNsYXNzIF9UcmFpdHM+CmJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+CiAgOjpiYXNpY19pb3Mo
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc3RyZWFtYnVmKQogICAgOiBpb3Nf
YmFzZSgpLAogICAgICBfTV9maWxsKF9DaGFyVCgpKSwgX01fc3RyZWFtYnVmKDApLCBfTV90aWVk
X29zdHJlYW0oMCkKewogIGluaXQoX19zdHJlYW1idWYpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0No
YXJULCBjbGFzcyBfVHJhaXRzPgpiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKYmFz
aWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OnJkYnVmKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9U
cmFpdHM+KiBfX2J1ZikKewogIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Rt
cCA9IF9NX3N0cmVhbWJ1ZjsKICBfTV9zdHJlYW1idWYgPSBfX2J1ZjsKICB0aGlzLT5jbGVhcigp
OwogIHJldHVybiBfX3RtcDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0
cz4KYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4mCmJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+
Ojpjb3B5Zm10KGNvbnN0IGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JiBfX3gpCnsKICBfTV9p
bnZva2VfY2FsbGJhY2tzKGVyYXNlX2V2ZW50KTsKICBfTV9jb3B5X3N0YXRlKF9feCk7CiAgX01f
ZmlsbCA9IF9feC5fTV9maWxsOwogIF9NX3RpZWRfb3N0cmVhbSA9IF9feC5fTV90aWVkX29zdHJl
YW07CiAgX01faW52b2tlX2NhbGxiYWNrcyhjb3B5Zm10X2V2ZW50KTsKICB0aGlzLT5fTV9zZXRf
ZXhjZXB0aW9uX21hc2soX194LmV4Y2VwdGlvbnMoKSk7CiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgpsb2NhbGUgYmFzaWNfaW9zPF9DaGFy
VCwgX1RyYWl0cz46OmltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpCnsKICBsb2NhbGUgX190bXAg
PSBpb3NfYmFzZTo6aW1idWUoX19sb2MpOwoKICBpZiAoX01fc3RyZWFtYnVmKQogICAgX01fc3Ry
ZWFtYnVmLT5wdWJpbWJ1ZShfX2xvYyk7CgoKICB0aGlzLT5fTV9jYWNoZWRfY3R5cGUgPSBfX2xv
Yy5fTV9nZXRfZmFjZXQoY3R5cGU8Y2hhcl90eXBlPjo6aWQpIDsKICB0aGlzLT5fTV9jYWNoZWRf
bnVtcHVuY3QgPSBfX2xvYy5fTV9nZXRfZmFjZXQobnVtcHVuY3Q8Y2hhcl90eXBlPjo6aWQpIDsK
ICB0aGlzLT5fTV9jYWNoZWRfZ3JvdXBpbmcgPSAoKG51bXB1bmN0PGNoYXJfdHlwZT4qKV9NX2Nh
Y2hlZF9udW1wdW5jdCktPmdyb3VwaW5nKCkgOwogIHJldHVybiBfX3RtcDsKfQoKCgoKCnRlbXBs
YXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CmJhc2ljX2lvczxfQ2hhclQsIF9UcmFp
dHM+OjpiYXNpY19pb3MoKQogIDogaW9zX2Jhc2UoKSwKICAgIF9NX2ZpbGwoX0NoYXJUKCkpLCBf
TV9zdHJlYW1idWYoMCksIF9NX3RpZWRfb3N0cmVhbSgwKQp7fQoKdGVtcGxhdGUgPGNsYXNzIF9D
aGFyVCwgY2xhc3MgX1RyYWl0cz4Kdm9pZApiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6aW5p
dChiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikKewogIHRoaXMtPnJkYnVm
KF9fc2IpOwogIHRoaXMtPmltYnVlKGxvY2FsZSgpKTsKICB0aGlzLT50aWUoMCk7CiAgdGhpcy0+
X01fc2V0X2V4Y2VwdGlvbl9tYXNrKGlvc19iYXNlOjpnb29kYml0KTsKICB0aGlzLT5fTV9jbGVh
cl9ub3Rocm93KF9fc2IgIT0gMCA/IGlvc19iYXNlOjpnb29kYml0IDogaW9zX2Jhc2U6OmJhZGJp
dCk7CiAgaW9zX2Jhc2U6OmZsYWdzKGlvc19iYXNlOjpza2lwd3MgfCBpb3NfYmFzZTo6ZGVjKTsK
ICBpb3NfYmFzZTo6d2lkdGgoMCk7CiAgaW9zX2Jhc2U6OnByZWNpc2lvbig2KTsKICB0aGlzLT5m
aWxsKHdpZGVuKCcgJykpOwoKCn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJh
aXRzPgp2b2lkIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjpfTV9oYW5kbGVfZXhjZXB0aW9u
KGlvc19iYXNlOjppb3N0YXRlIF9fZmxhZykKewogIHRoaXMtPl9NX3NldHN0YXRlX25vdGhyb3co
X19mbGFnKTsKICBpZiAodGhpcy0+X01fZ2V0X2V4Y2VwdGlvbl9tYXNrKCkgJiBfX2ZsYWcpCiAg
ICB0aHJvdzsKfQoKfQojIDE3MyAiLi4vc3RscG9ydC9zdGwvX2lvcy5oIiAyCiMgMjUgIi4uL3N0
bHBvcnQvc3RsL19tb25ldGFyeS5jIiAyCgoKCiMgMSAiLi4vc3RscG9ydC9zdGwvX251bV9wdXQu
aCIgMQojIDM2ICIuLi9zdGxwb3J0L3N0bC9fbnVtX3B1dC5oIgpuYW1lc3BhY2UgX1NUTCB7CgoK
CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfT3V0cHV0SXRlciA9IG9zdHJlYW1i
dWZfaXRlcmF0b3I8X0NoYXJULCBjaGFyX3RyYWl0czxfQ2hhclQ+ID4gPgoKY2xhc3MgbnVtX3B1
dDogcHVibGljIGxvY2FsZTo6ZmFjZXQKewogIGZyaWVuZCBjbGFzcyBfTG9jYWxlOwpwdWJsaWM6
CiAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogIHR5cGVkZWYgX091dHB1dEl0ZXIgaXRlcl90
eXBlOwoKICBleHBsaWNpdCBudW1fcHV0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFj
ZXQoX19yZWZzKSB7fQoKCiAgaXRlcl90eXBlIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYg
X19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgICAgICAgYm9vbCBfX3ZhbCkgY29uc3Qg
ewogICAgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3ZhbCk7CiAgfQoKICBpdGVy
X3R5cGUgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGws
CiAgICAgICAgICAgICAgIGxvbmcgX192YWwpIGNvbnN0IHsKICAgIHJldHVybiBkb19wdXQoX19z
LCBfX2YsIF9fZmlsbCwgX192YWwpOwogIH0KCiAgaXRlcl90eXBlIHB1dChpdGVyX3R5cGUgX19z
LCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbG9uZyBfX3ZhbCkgY29uc3QgewogICAgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxs
LCBfX3ZhbCk7CiAgfQoKCiAgaXRlcl90eXBlIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYg
X19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgICAgICAgbG9uZyBsb25nIF9fdmFsKSBj
b25zdCB7CiAgICByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdmFsKTsKICB9Cgog
IGl0ZXJfdHlwZSBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9f
ZmlsbCwKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3ZhbCkgY29uc3Qgewog
ICAgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3ZhbCk7CiAgfQoKCiAgaXRlcl90
eXBlIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAog
ICAgICAgICAgICAgICAgZG91YmxlIF9fdmFsKSBjb25zdCB7CiAgICByZXR1cm4gZG9fcHV0KF9f
cywgX19mLCBfX2ZpbGwsIChkb3VibGUpX192YWwpOwogIH0KCgogIGl0ZXJfdHlwZSBwdXQoaXRl
cl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICAg
ICAgIGxvbmcgZG91YmxlIF9fdmFsKSBjb25zdCB7CiAgICByZXR1cm4gZG9fcHV0KF9fcywgX19m
LCBfX2ZpbGwsIF9fdmFsKTsKICB9CgoKICBpdGVyX3R5cGUgcHV0KGl0ZXJfdHlwZSBfX3MsIGlv
c19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICAgICBjb25zdCB2b2lk
ICogX192YWwpIGNvbnN0IHsKICAgIHJldHVybiBkb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192
YWwpOwogIH0KCiAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7Cgpwcm90ZWN0ZWQ6CiAgfm51bV9wdXQo
KSB7fQoKICB2aXJ0dWFsIF9PdXRwdXRJdGVyIGRvX3B1dChfT3V0cHV0SXRlciBfX3MsIGlvc19i
YXNlJiBfX2YsIF9DaGFyVCBfX2ZpbGwsIGJvb2wgX192YWwpIGNvbnN0OwoKICB2aXJ0dWFsIF9P
dXRwdXRJdGVyIGRvX3B1dChfT3V0cHV0SXRlciBfX3MsIGlvc19iYXNlJiBfX2YsIF9DaGFyVCBf
X2ZpbGwsIGxvbmcgX192YWwpIGNvbnN0OwogIHZpcnR1YWwgX091dHB1dEl0ZXIgZG9fcHV0KF9P
dXRwdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9fZiwgX0NoYXJUIF9fZmlsbCwgdW5zaWduZWQgbG9u
ZyBfX3ZhbCkgY29uc3Q7CiAgdmlydHVhbCBfT3V0cHV0SXRlciBkb19wdXQoX091dHB1dEl0ZXIg
X19zLCBpb3NfYmFzZSYgX19mLCBfQ2hhclQgX19maWxsLCBkb3VibGUgX192YWwpIGNvbnN0OwoK
ICB2aXJ0dWFsIF9PdXRwdXRJdGVyIGRvX3B1dChfT3V0cHV0SXRlciBfX3MsIGlvc19iYXNlJiBf
X2YsIF9DaGFyVCBfX2ZpbGwsIGxvbmcgZG91YmxlIF9fdmFsKSBjb25zdDsKCgoKICB2aXJ0dWFs
IF9PdXRwdXRJdGVyIGRvX3B1dChfT3V0cHV0SXRlciBfX3MsIGlvc19iYXNlJiBfX2YsIF9DaGFy
VCBfX2ZpbGwsIGxvbmcgbG9uZyBfX3ZhbCkgY29uc3Q7CiAgdmlydHVhbCBfT3V0cHV0SXRlciBk
b19wdXQoX091dHB1dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19mLCBfQ2hhclQgX19maWxsLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX192YWwpIGNvbnN0IDsK
CiAgdmlydHVhbCBfT3V0cHV0SXRlciBkb19wdXQoX091dHB1dEl0ZXIgX19zLCBpb3NfYmFzZSYg
X19mLCBfQ2hhclQgX19maWxsLCBjb25zdCB2b2lkKiBfX3ZhbCkgY29uc3Q7Cn07CiMgMTMzICIu
Li9zdGxwb3J0L3N0bC9fbnVtX3B1dC5oIgp0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CmNoYXIq
Cl9fd3JpdGVfaW50ZWdlcl9iYWNrd2FyZChjaGFyKiBfX2J1ZiwgaW9zX2Jhc2U6OmZtdGZsYWdz
IF9fZmxhZ3MsIF9JbnRlZ2VyIF9feCk7Cgp2b2lkIF9fc3RyaW5nX3RvX2Zsb2F0KGNvbnN0IHN0
cmluZyYsIGZsb2F0Jik7CnZvaWQgX19zdHJpbmdfdG9fZmxvYXQoY29uc3Qgc3RyaW5nJiwgZG91
YmxlJik7CmV4dGVybiBjaGFyKiBfX3dyaXRlX2Zsb2F0KGNoYXIqLCBpb3NfYmFzZTo6Zm10Zmxh
Z3MsIGludCwgZG91YmxlKTsKCnZvaWQgX19zdHJpbmdfdG9fZmxvYXQoY29uc3Qgc3RyaW5nJiwg
bG9uZyBkb3VibGUmKTsKZXh0ZXJuIGNoYXIqIF9fd3JpdGVfZmxvYXQoY2hhciosIGlvc19iYXNl
OjpmbXRmbGFncywgaW50LCBsb25nIGRvdWJsZSk7CgoKCmV4dGVybiB3Y2hhcl90KiBfX2NvbnZl
cnRfZmxvYXRfYnVmZmVyKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgd2NoYXJfdCosIGNvbnN0
IGN0eXBlPHdjaGFyX3Q+Jiwgd2NoYXJfdCk7CgpleHRlcm4gdm9pZCBfX2FkanVzdF9mbG9hdF9i
dWZmZXIoY2hhciosIGNoYXIqLCBjaGFyKTsKCmV4dGVybiBjaGFyKgpfX3dyaXRlX2ludGVnZXIo
Y2hhciogYnVmLCBpb3NfYmFzZTo6Zm10ZmxhZ3MgZmxhZ3MsIGxvbmcgeCk7CgpleHRlcm4gcHRy
ZGlmZl90IF9faW5zZXJ0X2dyb3VwaW5nKGNoYXIqIGZpcnN0LCBjaGFyKiBsYXN0LCBjb25zdCBz
dHJpbmcmLCBjaGFyLCBjaGFyLCBjaGFyLCBpbnQpOwoKZXh0ZXJuIHB0cmRpZmZfdCBfX2luc2Vy
dF9ncm91cGluZyh3Y2hhcl90Kiwgd2NoYXJfdCosIGNvbnN0IHN0cmluZyYsIHdjaGFyX3QsIHdj
aGFyX3QsIHdjaGFyX3QsIGludCk7CiMgMTc1ICIuLi9zdGxwb3J0L3N0bC9fbnVtX3B1dC5oIgp9
CgoKIyAxICIuLi9zdGxwb3J0L3N0bC9fbnVtX3B1dC5jIiAxCiMgMjQgIi4uL3N0bHBvcnQvc3Rs
L19udW1fcHV0LmMiCiMgMSAiLi4vc3RscG9ydC9zdGwvX2xpbWl0cy5oIiAxCiMgMzIgIi4uL3N0
bHBvcnQvc3RsL19saW1pdHMuaCIKIyAxICIuLi9zdGxwb3J0L2NmbG9hdCIgMQojIDIxICIuLi9z
dGxwb3J0L2NmbG9hdCIKIyAxICIuLi9zdGxwb3J0L3N0bC9fcHJvbG9nLmgiIDEKIyAyMiAiLi4v
c3RscG9ydC9jZmxvYXQiIDIKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9nKysvY2Zsb2F0IiAxCiMg
NDcgIi91c3IvaW5jbHVkZS9nKysvY2Zsb2F0IiAzCgojIDEgIi91c3IvbGliL2djYy1saWIvaTQ4
Ni1zdXNlLWxpbnV4LzMuMi9pbmNsdWRlL2Zsb2F0LmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUv
ZysrL2NmbG9hdCIgMiAzCiMgMjggIi4uL3N0bHBvcnQvY2Zsb2F0IiAyCgoKCgoKIyAxICIuLi9z
dGxwb3J0L3N0bC9fZXBpbG9nLmgiIDEKIyAxNCAiLi4vc3RscG9ydC9zdGwvX2VwaWxvZy5oIgoj
IDEgIi4uL3N0bHBvcnQvc3RsL19jb25maWdfY29tcGF0X3Bvc3QuaCIgMQojIDE1ICIuLi9zdGxw
b3J0L3N0bC9fZXBpbG9nLmgiIDIKIyAzNCAiLi4vc3RscG9ydC9jZmxvYXQiIDIKIyAzMyAiLi4v
c3RscG9ydC9zdGwvX2xpbWl0cy5oIiAyCiMgNDEgIi4uL3N0bHBvcnQvc3RsL19saW1pdHMuaCIK
bmFtZXNwYWNlIF9TVEwgewoKZW51bSBmbG9hdF9yb3VuZF9zdHlsZSB7CiAgcm91bmRfaW5kZXRl
cm1pbmF0ZSA9IC0xLAogIHJvdW5kX3Rvd2FyZF96ZXJvID0gMCwKICByb3VuZF90b19uZWFyZXN0
ID0gMSwKICByb3VuZF90b3dhcmRfaW5maW5pdHkgPSAyLAogIHJvdW5kX3Rvd2FyZF9uZWdfaW5m
aW5pdHkgPSAzCn07CgplbnVtIGZsb2F0X2Rlbm9ybV9zdHlsZSB7CiAgZGVub3JtX2luZGV0ZXJt
aW5hdGUgPSAtMSwKICBkZW5vcm1fYWJzZW50ID0gMCwKICBkZW5vcm1fcHJlc2VudCA9IDEKfTsK
CgoKdGVtcGxhdGUgPGNsYXNzIF9fbnVtYmVyPgpjbGFzcyBfTnVtZXJpY19saW1pdHNfYmFzZSB7
CnB1YmxpYzoKCiAgc3RhdGljIF9fbnVtYmVyICggbWluKSgpIHsgcmV0dXJuIF9fbnVtYmVyKCk7
IH0KICBzdGF0aWMgX19udW1iZXIgKCBtYXgpKCkgeyByZXR1cm4gX19udW1iZXIoKTsgfQoKCgoK
ICBzdGF0aWMgY29uc3QgaW50CgoKICBkaWdpdHMgPSAwLAogIGRpZ2l0czEwID0gMCwKICByYWRp
eCA9IDAsCiAgbWluX2V4cG9uZW50ID0gMCwKICBtaW5fZXhwb25lbnQxMCA9IDAsCiAgbWF4X2V4
cG9uZW50ID0gMCwKICBtYXhfZXhwb25lbnQxMCA9IDAKCgoKCgoKICA7CiAgc3RhdGljIGNvbnN0
IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICBzdGF0aWMg
Y29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsK
ICBzdGF0aWMgY29uc3QgYm9vbAoKCiAgICBpc19zcGVjaWFsaXplZCA9IGZhbHNlLAogICAgaXNf
c2lnbmVkID0gZmFsc2UsCiAgICBpc19pbnRlZ2VyID0gZmFsc2UsCiAgICBpc19leGFjdCA9IGZh
bHNlLAogICAgaGFzX2luZmluaXR5ID0gZmFsc2UsCiAgICBoYXNfcXVpZXRfTmFOID0gZmFsc2Us
CiAgICBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlLAogICAgaGFzX2Rlbm9ybV9sb3NzID0gZmFs
c2UsCiAgICBpc19pZWM1NTkgPSBmYWxzZSwKICAgIGlzX2JvdW5kZWQgPSBmYWxzZSwKICAgIGlz
X21vZHVsbyA9IGZhbHNlLAogICAgdHJhcHMgPSBmYWxzZSwKICAgIHRpbnluZXNzX2JlZm9yZSA9
IGZhbHNlCgoKCiAgOwoKICBzdGF0aWMgX19udW1iZXIgZXBzaWxvbigpIHsgcmV0dXJuIF9fbnVt
YmVyKCk7IH0KICBzdGF0aWMgX19udW1iZXIgcm91bmRfZXJyb3IoKSB7IHJldHVybiBfX251bWJl
cigpOyB9CgogIHN0YXRpYyBfX251bWJlciBpbmZpbml0eSgpIHsgcmV0dXJuIF9fbnVtYmVyKCk7
IH0KICBzdGF0aWMgX19udW1iZXIgcXVpZXRfTmFOKCkgeyByZXR1cm4gX19udW1iZXIoKTsgfQog
IHN0YXRpYyBfX251bWJlciBzaWduYWxpbmdfTmFOKCkgeyByZXR1cm4gX19udW1iZXIoKTsgfQog
IHN0YXRpYyBfX251bWJlciBkZW5vcm1fbWluKCkgeyByZXR1cm4gX19udW1iZXIoKTsgfQoKCn07
CiMgMTM1ICIuLi9zdGxwb3J0L3N0bC9fbGltaXRzLmgiCnRlbXBsYXRlIDxjbGFzcyBfSW50LAog
ICAgICAgICAgX0ludCBfX2ltaW4sCiAgICAgICAgICBfSW50IF9faW1heCwKICAgICAgICAgIGlu
dCBfX2lkaWdpdHMsIGJvb2wgX19pc21vZD4KY2xhc3MgX0ludGVnZXJfbGltaXRzIDogcHVibGlj
IF9OdW1lcmljX2xpbWl0c19iYXNlPF9JbnQ+CnsKcHVibGljOgoKICBzdGF0aWMgX0ludCAoIG1p
bikgKCkgeyByZXR1cm4gKF9JbnQpX19pbWluOyB9CiAgc3RhdGljIF9JbnQgKCBtYXgpICgpIHsg
cmV0dXJuIChfSW50KV9faW1heDsgfQoKCgoKICBzdGF0aWMgY29uc3QgaW50CgogIGRpZ2l0cyA9
IChfX2lkaWdpdHMgPCAwKSA/CiAgKChpbnQpKChzaXplb2YoX0ludCkgKiAoOCkpKSAtICgoX19p
bWluID09IDApID8gMCA6IDEpKQogIDogKF9faWRpZ2l0cyksCiAgZGlnaXRzMTAgPSAoZGlnaXRz
ICogMzAxVUwpIC8gMTAwMCwKICByYWRpeCA9IDIKCiAgOwogIHN0YXRpYyBjb25zdCBib29sCgoK
CiAgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlLAogIGlzX3NpZ25lZCA9IChfX2ltaW4gIT0gMCksCiAg
aXNfaW50ZWdlciA9IHRydWUsCiAgaXNfZXhhY3QgPSB0cnVlLAogIGlzX2JvdW5kZWQgPSB0cnVl
LAogIGlzX21vZHVsbyA9IF9faXNtb2QKCgoKICA7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9fbnVt
YmVyLAogICAgICAgICBpbnQgX19EaWdpdHMsIGludCBfX0RpZ2l0czEwLAogICAgICAgICBpbnQg
X19NaW5FeHAsIGludCBfX01heEV4cCwKICAgICAgICAgaW50IF9fTWluRXhwMTAsIGludCBfX01h
eEV4cDEwLAogICAgICAgICBib29sIF9fSXNJRUM1NTksCiAgICAgICAgIGZsb2F0X3JvdW5kX3N0
eWxlIF9fUm91bmRTdHlsZT4KY2xhc3MgX0Zsb2F0aW5nX2xpbWl0cyA6IHB1YmxpYyBfTnVtZXJp
Y19saW1pdHNfYmFzZTxfX251bWJlcj4KewpwdWJsaWM6CgoKCgogIHN0YXRpYyBjb25zdCBpbnQK
CgogIGRpZ2l0cyA9IF9fRGlnaXRzLAogIGRpZ2l0czEwID0gX19EaWdpdHMxMCwKCiAgcmFkaXgg
PSAoIDIgKSwKICBtaW5fZXhwb25lbnQgPSBfX01pbkV4cCwKICBtYXhfZXhwb25lbnQgPSBfX01h
eEV4cCwKICBtaW5fZXhwb25lbnQxMCA9IF9fTWluRXhwMTAsCiAgbWF4X2V4cG9uZW50MTAgPSBf
X01heEV4cDEwCgoKCgoKCiAgOwogIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFz
X2Rlbm9ybSA9IGRlbm9ybV9pbmRldGVybWluYXRlOwogIHN0YXRpYyBjb25zdCBmbG9hdF9yb3Vu
ZF9zdHlsZSByb3VuZF9zdHlsZSA9IF9fUm91bmRTdHlsZTsKICBzdGF0aWMgY29uc3QgYm9vbAoK
CiAgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlLAogIGlzX3NpZ25lZCA9IHRydWUsCiAgaGFzX2luZmlu
aXR5ID0gdHJ1ZSwKICBoYXNfcXVpZXRfTmFOID0gdHJ1ZSwKICBoYXNfc2lnbmFsaW5nX05hTj0g
dHJ1ZSwKICBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZSwKICBpc19pZWM1NTkgPSBfX0lzSUVDNTU5
LAogIGlzX2JvdW5kZWQgPSB0cnVlLAogIHRyYXBzID0gdHJ1ZSwKICB0aW55bmVzc19iZWZvcmU9
IGZhbHNlCgoKCgogIDsKCn07CgoKCgoKdGVtcGxhdGU8Y2xhc3MgX1RwPgpjbGFzcyBudW1lcmlj
X2xpbWl0cyA6IHB1YmxpYyBfTnVtZXJpY19saW1pdHNfYmFzZTxfVHA+IHt9OwoKCgoKCnRlbXBs
YXRlPD4KY2xhc3MgbnVtZXJpY19saW1pdHM8Ym9vbD4KICA6IHB1YmxpYyBfSW50ZWdlcl9saW1p
dHM8Ym9vbCwgZmFsc2UsIHRydWUsIDEsIGZhbHNlPgp7fTsKCgoKdGVtcGxhdGU8PgpjbGFzcyBu
dW1lcmljX2xpbWl0czxjaGFyPgogIDogcHVibGljIF9JbnRlZ2VyX2xpbWl0czxjaGFyLCAoLTEy
OCksIDEyNywgLTEsIHRydWU+Cnt9OwoKCnRlbXBsYXRlPD4KY2xhc3MgbnVtZXJpY19saW1pdHM8
c2lnbmVkIGNoYXI+CiAgOiBwdWJsaWMgX0ludGVnZXJfbGltaXRzPHNpZ25lZCBjaGFyLCAoLTEy
OCksIDEyNywgLTEsIHRydWU+Cnt9OwoKCnRlbXBsYXRlPD4KY2xhc3MgbnVtZXJpY19saW1pdHM8
dW5zaWduZWQgY2hhcj4KICA6IHB1YmxpYyBfSW50ZWdlcl9saW1pdHM8dW5zaWduZWQgY2hhciwg
MCwgMjU1LCAtMSwgdHJ1ZT4Ke307CgoKCnRlbXBsYXRlPD4KY2xhc3MgbnVtZXJpY19saW1pdHM8
d2NoYXJfdD4KICA6IHB1YmxpYyBfSW50ZWdlcl9saW1pdHM8d2NoYXJfdCwgKC0yMTQ3NDgzNjQ3
bCAtIDFsKSwgKDIxNDc0ODM2NDdsKSwgLTEsIHRydWU+Cnt9OwoKCgp0ZW1wbGF0ZTw+CmNsYXNz
IG51bWVyaWNfbGltaXRzPHNob3J0PgogIDogcHVibGljIF9JbnRlZ2VyX2xpbWl0czxzaG9ydCwg
KC0zMjc2NyAtMSksIDMyNzY3LCAtMSwgdHJ1ZT4Ke307Cgp0ZW1wbGF0ZTw+CmNsYXNzIG51bWVy
aWNfbGltaXRzPHVuc2lnbmVkIHNob3J0PgogIDogcHVibGljIF9JbnRlZ2VyX2xpbWl0czx1bnNp
Z25lZCBzaG9ydCwgMCwgKDMyNzY3ICogMiArIDEpLCAtMSwgdHJ1ZT4Ke307Cgp0ZW1wbGF0ZTw+
CmNsYXNzIG51bWVyaWNfbGltaXRzPGludD4KICA6IHB1YmxpYyBfSW50ZWdlcl9saW1pdHM8aW50
LCAoLTIxNDc0ODM2NDcgLTEpLCAyMTQ3NDgzNjQ3LCAtMSwgdHJ1ZT4Ke307Cgp0ZW1wbGF0ZTw+
CmNsYXNzIG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD4KICA6IHB1YmxpYyBfSW50ZWdlcl9s
aW1pdHM8dW5zaWduZWQgaW50LCAwLCAoMjE0NzQ4MzY0NyAqIDJVICsgMSksIC0xLCB0cnVlPgp7
fTsKCnRlbXBsYXRlPD4KY2xhc3MgbnVtZXJpY19saW1pdHM8bG9uZz4KICA6IHB1YmxpYyBfSW50
ZWdlcl9saW1pdHM8bG9uZywgKC0yMTQ3NDgzNjQ3TCAtMSksIDIxNDc0ODM2NDdMLCAtMSwgdHJ1
ZT4Ke307Cgp0ZW1wbGF0ZTw+CmNsYXNzIG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+CiAg
OiBwdWJsaWMgX0ludGVnZXJfbGltaXRzPHVuc2lnbmVkIGxvbmcsIDAsICgyMTQ3NDgzNjQ3TCAq
IDJVTCArIDEpLCAtMSwgdHJ1ZT4Ke307CiMgMzQ1ICIuLi9zdGxwb3J0L3N0bC9fbGltaXRzLmgi
CnRlbXBsYXRlPD4KY2xhc3MgbnVtZXJpY19saW1pdHM8bG9uZyBsb25nPgogIDogcHVibGljIF9O
dW1lcmljX2xpbWl0c19iYXNlPGxvbmcgbG9uZz4KewpwdWJsaWM6CgogIHN0YXRpYyBsb25nIGxv
bmcgKCBtaW4pICgpIHsgcmV0dXJuICgtMHg3ZmZmZmZmZmZmZmZmZmZmTEwgLTFMTCk7IH0KICBz
dGF0aWMgbG9uZyBsb25nICggbWF4KSAoKSB7IHJldHVybiAweDdmZmZmZmZmZmZmZmZmZmZMTDsg
fQoKCgoKICBzdGF0aWMgY29uc3QgaW50CgogIGRpZ2l0cyA9ICgoaW50KSgoc2l6ZW9mKGxvbmcg
bG9uZykgKiAoOCkpKSAtIDEpLAogIGRpZ2l0czEwID0gKGRpZ2l0cyAqIDMwMVVMKSAvIDEwMDAs
CiAgcmFkaXggPSAyCgogIDsKICBzdGF0aWMgY29uc3QgYm9vbAoKCgogIGlzX3NwZWNpYWxpemVk
ID0gdHJ1ZSwKICBpc19zaWduZWQgPSB0cnVlLAogIGlzX2ludGVnZXIgPSB0cnVlLAogIGlzX2V4
YWN0ID0gdHJ1ZSwKICBpc19ib3VuZGVkID0gdHJ1ZSwKICBpc19tb2R1bG8gPSB0cnVlCgoKCiAg
Owp9OwoKdGVtcGxhdGU8PgpjbGFzcyBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nIGxvbmc+
CiAgOiBwdWJsaWMgX051bWVyaWNfbGltaXRzX2Jhc2U8dW5zaWduZWQgbG9uZyBsb25nPgp7CnB1
YmxpYzoKCiAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyAoIG1pbikgKCkgeyByZXR1cm4gMFVM
TDsgfQogIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgKCBtYXgpICgpIHsgcmV0dXJuIDB4ZmZm
ZmZmZmZmZmZmZmZmZlVMTDsgfQoKCgoKICBzdGF0aWMgY29uc3QgaW50CgogIGRpZ2l0cyA9ICgo
aW50KSgoc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZykgKiAoOCkpKSksCiAgZGlnaXRzMTAgPSAo
ZGlnaXRzICogMzAxVUwpIC8gMTAwMCwKICByYWRpeCA9IDIKCiAgOwogIHN0YXRpYyBjb25zdCBi
b29sCgoKCiAgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlLAogIGlzX3NpZ25lZCA9IGZhbHNlLAogIGlz
X2ludGVnZXIgPSB0cnVlLAogIGlzX2V4YWN0ID0gdHJ1ZSwKICBpc19ib3VuZGVkID0gdHJ1ZSwK
ICBpc19tb2R1bG8gPSB0cnVlCgoKCiAgOwp9OwoKCgoKCgoKdW5pb24gX0ZfcmVwCnsKICB1bnNp
Z25lZCBzaG9ydCByZXBbMl07CiAgZmxvYXQgdmFsOwp9Owp1bmlvbiBfRF9yZXAKewogIHVuc2ln
bmVkIHNob3J0IHJlcFs0XTsKICBkb3VibGUgdmFsOwp9OwoKCnVuaW9uIF9MX3JlcAp7CiAgdW5z
aWduZWQgc2hvcnQgcmVwWzhdOwogIGxvbmcgZG91YmxlIHZhbDsKfTsKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX19kdW1teT4KY2xhc3MgX0xpbUcKewpwdWJsaWM6CiAgc3RhdGljIGNvbnN0IF9GX3JlcCBf
Rl9pbmY7CiAgc3RhdGljIGNvbnN0IF9GX3JlcCBfRl9xTmFOOwogIHN0YXRpYyBjb25zdCBfRl9y
ZXAgX0Zfc05hTjsKICBzdGF0aWMgY29uc3QgX0RfcmVwIF9EX2luZjsKICBzdGF0aWMgY29uc3Qg
X0RfcmVwIF9EX3FOYU47CiAgc3RhdGljIGNvbnN0IF9EX3JlcCBfRF9zTmFOOwoKCiAgc3RhdGlj
IGNvbnN0IF9MX3JlcCBfTF9pbmY7CiAgc3RhdGljIGNvbnN0IF9MX3JlcCBfTF9xTmFOOwogIHN0
YXRpYyBjb25zdCBfTF9yZXAgX0xfc05hTjsKCn07CgoKCgoKdGVtcGxhdGU8PiBjbGFzcyBudW1l
cmljX2xpbWl0czxmbG9hdD4KICA6IHB1YmxpYyBfRmxvYXRpbmdfbGltaXRzPGZsb2F0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMjQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA2
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xMjUpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMTI4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0zNyksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAzOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZF90b19uZWFyZXN0Pgp7CnB1YmxpYzoK
ICBzdGF0aWMgZmxvYXQgKCBtaW4pICgpIHsgcmV0dXJuIDEuMTc1NDk0MzVlLTM4RjsgfQogIHN0
YXRpYyBmbG9hdCBkZW5vcm1fbWluKCkgeyByZXR1cm4gMS4xNzU0OTQzNWUtMzhGOyB9CiAgc3Rh
dGljIGZsb2F0ICggbWF4KSAoKSB7IHVzaW5nIG5hbWVzcGFjZSBfX3N0ZF9hbGlhcyA7IHJldHVy
biAzLjQwMjgyMzQ3ZSszOEY7IH0KICBzdGF0aWMgZmxvYXQgZXBzaWxvbigpIHsgcmV0dXJuIDEu
MTkyMDkyOTBlLTA3RjsgfQogIHN0YXRpYyBmbG9hdCByb3VuZF9lcnJvcigpIHsgcmV0dXJuIDAu
NWY7IH0KICBzdGF0aWMgZmxvYXQgaW5maW5pdHkoKSB7IHJldHVybiBfTGltRzxib29sPjo6X0Zf
aW5mLnZhbDsgfQogIHN0YXRpYyBmbG9hdCBxdWlldF9OYU4oKSB7IHJldHVybiBfTGltRzxib29s
Pjo6X0ZfcU5hTi52YWw7IH0KICBzdGF0aWMgZmxvYXQgc2lnbmFsaW5nX05hTigpIHsgcmV0dXJu
IF9MaW1HPGJvb2w+OjpfRl9zTmFOLnZhbDsgfQp9OwoKdGVtcGxhdGU8PiBjbGFzcyBudW1lcmlj
X2xpbWl0czxkb3VibGU+CiAgOiBwdWJsaWMgX0Zsb2F0aW5nX2xpbWl0czxkb3VibGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA1MywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0xMDIxKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDEwMjQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTMwNyksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAzMDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
cnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRfdG9fbmVhcmVzdD4KewpwdWJs
aWM6CiAgc3RhdGljIGRvdWJsZSAoIG1pbikoKSB7IHJldHVybiAyLjIyNTA3Mzg1ODUwNzIwMTRl
LTMwODsgfQogIHN0YXRpYyBkb3VibGUgZGVub3JtX21pbigpIHsgcmV0dXJuIDIuMjI1MDczODU4
NTA3MjAxNGUtMzA4OyB9CiAgc3RhdGljIGRvdWJsZSAoIG1heCkoKSB7IHVzaW5nIG5hbWVzcGFj
ZSBfX3N0ZF9hbGlhcyA7IHJldHVybiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwODsgfQogIHN0YXRp
YyBkb3VibGUgZXBzaWxvbigpIHsgcmV0dXJuIDIuMjIwNDQ2MDQ5MjUwMzEzMWUtMTY7IH0KICBz
dGF0aWMgZG91YmxlIHJvdW5kX2Vycm9yKCkgeyByZXR1cm4gMC41OyB9CiAgc3RhdGljIGRvdWJs
ZSBpbmZpbml0eSgpIHsgcmV0dXJuIF9MaW1HPGJvb2w+OjpfRF9pbmYudmFsOyB9CiAgc3RhdGlj
IGRvdWJsZSBxdWlldF9OYU4oKXsgcmV0dXJuIF9MaW1HPGJvb2w+OjpfRF9xTmFOLnZhbDsgfQog
IHN0YXRpYyBkb3VibGUgc2lnbmFsaW5nX05hTigpIHsgcmV0dXJuIF9MaW1HPGJvb2w+OjpfRF9z
TmFOLnZhbDsgfQp9OwoKCgp0ZW1wbGF0ZTw+CmNsYXNzIG51bWVyaWNfbGltaXRzPGxvbmcgZG91
YmxlPgogIDogcHVibGljIF9GbG9hdGluZ19saW1pdHM8bG9uZyBkb3VibGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA2NCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE4LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKC0xNjM4MSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAxNjM4NCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtNDkzMSksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA0OTMyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFs
c2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZF90b19uZWFyZXN0Pgp7CnB1Ymxp
YzoKICBzdGF0aWMgbG9uZyBkb3VibGUgKCBtaW4pICgpIHsgdXNpbmcgbmFtZXNwYWNlIF9fc3Rk
X2FsaWFzIDsgcmV0dXJuIDMuMzYyMTAzMTQzMTEyMDkzNTA2MjZlLTQ5MzJMOyB9CiAgc3RhdGlj
IGxvbmcgZG91YmxlIGRlbm9ybV9taW4oKSB7IHVzaW5nIG5hbWVzcGFjZSBfX3N0ZF9hbGlhcyA7
IHJldHVybiAzLjM2MjEwMzE0MzExMjA5MzUwNjI2ZS00OTMyTDsgfQogIHN0YXRpYyBsb25nIGRv
dWJsZSAoIG1heCkgKCkgeyB1c2luZyBuYW1lc3BhY2UgX19zdGRfYWxpYXMgOyByZXR1cm4gMS4x
ODk3MzE0OTUzNTcyMzE3NjUwMmUrNDkzMkw7IH0KICBzdGF0aWMgbG9uZyBkb3VibGUgZXBzaWxv
bigpIHsgcmV0dXJuIDEuMDg0MjAyMTcyNDg1NTA0NDM0MDFlLTE5TDsgfQogIHN0YXRpYyBsb25n
IGRvdWJsZSByb3VuZF9lcnJvcigpIHsgcmV0dXJuIDQ7IH0KICBzdGF0aWMgbG9uZyBkb3VibGUg
aW5maW5pdHkoKSB7IHJldHVybiBfTGltRzxib29sPjo6X0xfaW5mLnZhbDsgfQogIHN0YXRpYyBs
b25nIGRvdWJsZSBxdWlldF9OYU4oKSB7IHJldHVybiBfTGltRzxib29sPjo6X0xfcU5hTi52YWw7
IH0KICBzdGF0aWMgbG9uZyBkb3VibGUgc2lnbmFsaW5nX05hTigpIHsgcmV0dXJuIF9MaW1HPGJv
b2w+OjpfTF9zTmFOLnZhbDsgfQp9OwoKCgoKCn0KCgojIDEgIi4uL3N0bHBvcnQvc3RsL19saW1p
dHMuYyIgMQojIDI4ICIuLi9zdGxwb3J0L3N0bC9fbGltaXRzLmMiCm5hbWVzcGFjZSBfU1RMIHsK
CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfX251bWJlcj4gY29uc3QgYm9vbCBfTnVtZXJpY19saW1p
dHNfYmFzZTxfX251bWJlcj46OiBpc19zcGVjaWFsaXplZDsKdGVtcGxhdGUgPGNsYXNzIF9fbnVt
YmVyPiBjb25zdCBpbnQgX051bWVyaWNfbGltaXRzX2Jhc2U8X19udW1iZXI+OjogZGlnaXRzOwp0
ZW1wbGF0ZSA8Y2xhc3MgX19udW1iZXI+IGNvbnN0IGludCBfTnVtZXJpY19saW1pdHNfYmFzZTxf
X251bWJlcj46OiBkaWdpdHMxMDsKdGVtcGxhdGUgPGNsYXNzIF9fbnVtYmVyPiBjb25zdCBib29s
IF9OdW1lcmljX2xpbWl0c19iYXNlPF9fbnVtYmVyPjo6IGlzX3NpZ25lZDsKdGVtcGxhdGUgPGNs
YXNzIF9fbnVtYmVyPiBjb25zdCBib29sIF9OdW1lcmljX2xpbWl0c19iYXNlPF9fbnVtYmVyPjo6
IGlzX2ludGVnZXI7CnRlbXBsYXRlIDxjbGFzcyBfX251bWJlcj4gY29uc3QgYm9vbCBfTnVtZXJp
Y19saW1pdHNfYmFzZTxfX251bWJlcj46OiBpc19leGFjdDsKdGVtcGxhdGUgPGNsYXNzIF9fbnVt
YmVyPiBjb25zdCBpbnQgX051bWVyaWNfbGltaXRzX2Jhc2U8X19udW1iZXI+OjogcmFkaXg7CnRl
bXBsYXRlIDxjbGFzcyBfX251bWJlcj4gY29uc3QgaW50IF9OdW1lcmljX2xpbWl0c19iYXNlPF9f
bnVtYmVyPjo6IG1pbl9leHBvbmVudDsKdGVtcGxhdGUgPGNsYXNzIF9fbnVtYmVyPiBjb25zdCBp
bnQgX051bWVyaWNfbGltaXRzX2Jhc2U8X19udW1iZXI+OjogbWF4X2V4cG9uZW50Owp0ZW1wbGF0
ZSA8Y2xhc3MgX19udW1iZXI+IGNvbnN0IGludCBfTnVtZXJpY19saW1pdHNfYmFzZTxfX251bWJl
cj46OiBtaW5fZXhwb25lbnQxMDsKdGVtcGxhdGUgPGNsYXNzIF9fbnVtYmVyPiBjb25zdCBpbnQg
X051bWVyaWNfbGltaXRzX2Jhc2U8X19udW1iZXI+OjogbWF4X2V4cG9uZW50MTA7CnRlbXBsYXRl
IDxjbGFzcyBfX251bWJlcj4gY29uc3QgYm9vbCBfTnVtZXJpY19saW1pdHNfYmFzZTxfX251bWJl
cj46OiBoYXNfaW5maW5pdHk7CnRlbXBsYXRlIDxjbGFzcyBfX251bWJlcj4gY29uc3QgYm9vbCBf
TnVtZXJpY19saW1pdHNfYmFzZTxfX251bWJlcj46OiBoYXNfcXVpZXRfTmFOOwp0ZW1wbGF0ZSA8
Y2xhc3MgX19udW1iZXI+IGNvbnN0IGJvb2wgX051bWVyaWNfbGltaXRzX2Jhc2U8X19udW1iZXI+
OjogaGFzX3NpZ25hbGluZ19OYU47CnRlbXBsYXRlIDxjbGFzcyBfX251bWJlcj4gY29uc3QgZmxv
YXRfZGVub3JtX3N0eWxlIF9OdW1lcmljX2xpbWl0c19iYXNlPF9fbnVtYmVyPjo6IGhhc19kZW5v
cm07CnRlbXBsYXRlIDxjbGFzcyBfX251bWJlcj4gY29uc3QgYm9vbCBfTnVtZXJpY19saW1pdHNf
YmFzZTxfX251bWJlcj46OiBoYXNfZGVub3JtX2xvc3M7CnRlbXBsYXRlIDxjbGFzcyBfX251bWJl
cj4gY29uc3QgYm9vbCBfTnVtZXJpY19saW1pdHNfYmFzZTxfX251bWJlcj46OiBpc19pZWM1NTk7
CnRlbXBsYXRlIDxjbGFzcyBfX251bWJlcj4gY29uc3QgYm9vbCBfTnVtZXJpY19saW1pdHNfYmFz
ZTxfX251bWJlcj46OiBpc19ib3VuZGVkOwp0ZW1wbGF0ZSA8Y2xhc3MgX19udW1iZXI+IGNvbnN0
IGJvb2wgX051bWVyaWNfbGltaXRzX2Jhc2U8X19udW1iZXI+OjogaXNfbW9kdWxvOwp0ZW1wbGF0
ZSA8Y2xhc3MgX19udW1iZXI+IGNvbnN0IGJvb2wgX051bWVyaWNfbGltaXRzX2Jhc2U8X19udW1i
ZXI+OjogdHJhcHM7CnRlbXBsYXRlIDxjbGFzcyBfX251bWJlcj4gY29uc3QgYm9vbCBfTnVtZXJp
Y19saW1pdHNfYmFzZTxfX251bWJlcj46OiB0aW55bmVzc19iZWZvcmU7CnRlbXBsYXRlIDxjbGFz
cyBfX251bWJlcj4gY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgX051bWVyaWNfbGltaXRzX2Jhc2U8
X19udW1iZXI+Ojogcm91bmRfc3R5bGU7CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ludCwgX0lu
dCBfX2ltaW4sIF9JbnQgX19pbWF4LCBpbnQgX19pZGlnaXRzLCBib29sIF9faXNtb2Q+IGNvbnN0
IGJvb2wgX0ludGVnZXJfbGltaXRzPF9JbnQsIF9faW1pbiwgX19pbWF4LCBfX2lkaWdpdHMsIF9f
aXNtb2Q+OjogaXNfc3BlY2lhbGl6ZWQ7CnRlbXBsYXRlIDxjbGFzcyBfSW50LCBfSW50IF9faW1p
biwgX0ludCBfX2ltYXgsIGludCBfX2lkaWdpdHMsIGJvb2wgX19pc21vZD4gY29uc3QgaW50IF9J
bnRlZ2VyX2xpbWl0czxfSW50LCBfX2ltaW4sIF9faW1heCwgX19pZGlnaXRzLCBfX2lzbW9kPjo6
IGRpZ2l0czsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ludCwgX0ludCBfX2ltaW4sIF9JbnQgX19pbWF4
LCBpbnQgX19pZGlnaXRzLCBib29sIF9faXNtb2Q+IGNvbnN0IGludCBfSW50ZWdlcl9saW1pdHM8
X0ludCwgX19pbWluLCBfX2ltYXgsIF9faWRpZ2l0cywgX19pc21vZD46OiBkaWdpdHMxMDsKdGVt
cGxhdGUgPGNsYXNzIF9JbnQsIF9JbnQgX19pbWluLCBfSW50IF9faW1heCwgaW50IF9faWRpZ2l0
cywgYm9vbCBfX2lzbW9kPiBjb25zdCBib29sIF9JbnRlZ2VyX2xpbWl0czxfSW50LCBfX2ltaW4s
IF9faW1heCwgX19pZGlnaXRzLCBfX2lzbW9kPjo6IGlzX3NpZ25lZDsKdGVtcGxhdGUgPGNsYXNz
IF9JbnQsIF9JbnQgX19pbWluLCBfSW50IF9faW1heCwgaW50IF9faWRpZ2l0cywgYm9vbCBfX2lz
bW9kPiBjb25zdCBib29sIF9JbnRlZ2VyX2xpbWl0czxfSW50LCBfX2ltaW4sIF9faW1heCwgX19p
ZGlnaXRzLCBfX2lzbW9kPjo6IGlzX2ludGVnZXI7CnRlbXBsYXRlIDxjbGFzcyBfSW50LCBfSW50
IF9faW1pbiwgX0ludCBfX2ltYXgsIGludCBfX2lkaWdpdHMsIGJvb2wgX19pc21vZD4gY29uc3Qg
Ym9vbCBfSW50ZWdlcl9saW1pdHM8X0ludCwgX19pbWluLCBfX2ltYXgsIF9faWRpZ2l0cywgX19p
c21vZD46OiBpc19leGFjdDsKdGVtcGxhdGUgPGNsYXNzIF9JbnQsIF9JbnQgX19pbWluLCBfSW50
IF9faW1heCwgaW50IF9faWRpZ2l0cywgYm9vbCBfX2lzbW9kPiBjb25zdCBpbnQgX0ludGVnZXJf
bGltaXRzPF9JbnQsIF9faW1pbiwgX19pbWF4LCBfX2lkaWdpdHMsIF9faXNtb2Q+OjogcmFkaXg7
CnRlbXBsYXRlIDxjbGFzcyBfSW50LCBfSW50IF9faW1pbiwgX0ludCBfX2ltYXgsIGludCBfX2lk
aWdpdHMsIGJvb2wgX19pc21vZD4gY29uc3QgYm9vbCBfSW50ZWdlcl9saW1pdHM8X0ludCwgX19p
bWluLCBfX2ltYXgsIF9faWRpZ2l0cywgX19pc21vZD46OiBpc19ib3VuZGVkOwp0ZW1wbGF0ZSA8
Y2xhc3MgX0ludCwgX0ludCBfX2ltaW4sIF9JbnQgX19pbWF4LCBpbnQgX19pZGlnaXRzLCBib29s
IF9faXNtb2Q+IGNvbnN0IGJvb2wgX0ludGVnZXJfbGltaXRzPF9JbnQsIF9faW1pbiwgX19pbWF4
LCBfX2lkaWdpdHMsIF9faXNtb2Q+OjogaXNfbW9kdWxvOwojIDg5ICIuLi9zdGxwb3J0L3N0bC9f
bGltaXRzLmMiCnRlbXBsYXRlIDxjbGFzcyBfX251bWJlciwgaW50IF9fRGlnaXRzLCBpbnQgX19E
aWdpdHMxMCwgaW50IF9fTWluRXhwLCBpbnQgX19NYXhFeHAsIGludCBfX01pbkV4cDEwLCBpbnQg
X19NYXhFeHAxMCwgYm9vbCBfX0lzSUVDNTU5LCBmbG9hdF9yb3VuZF9zdHlsZSBfX1JvdW5kU3R5
bGU+IGNvbnN0IGJvb2wgX0Zsb2F0aW5nX2xpbWl0czwgX19udW1iZXIsIF9fRGlnaXRzLCBfX0Rp
Z2l0czEwLCBfX01pbkV4cCwgX19NYXhFeHAsIF9fTWluRXhwMTAsIF9fTWF4RXhwMTAsIF9fSXNJ
RUM1NTksIF9fUm91bmRTdHlsZT46OiBpc19zcGVjaWFsaXplZDsKdGVtcGxhdGUgPGNsYXNzIF9f
bnVtYmVyLCBpbnQgX19EaWdpdHMsIGludCBfX0RpZ2l0czEwLCBpbnQgX19NaW5FeHAsIGludCBf
X01heEV4cCwgaW50IF9fTWluRXhwMTAsIGludCBfX01heEV4cDEwLCBib29sIF9fSXNJRUM1NTks
IGZsb2F0X3JvdW5kX3N0eWxlIF9fUm91bmRTdHlsZT4gY29uc3QgaW50IF9GbG9hdGluZ19saW1p
dHM8IF9fbnVtYmVyLCBfX0RpZ2l0cywgX19EaWdpdHMxMCwgX19NaW5FeHAsIF9fTWF4RXhwLCBf
X01pbkV4cDEwLCBfX01heEV4cDEwLCBfX0lzSUVDNTU5LCBfX1JvdW5kU3R5bGU+OjogZGlnaXRz
Owp0ZW1wbGF0ZSA8Y2xhc3MgX19udW1iZXIsIGludCBfX0RpZ2l0cywgaW50IF9fRGlnaXRzMTAs
IGludCBfX01pbkV4cCwgaW50IF9fTWF4RXhwLCBpbnQgX19NaW5FeHAxMCwgaW50IF9fTWF4RXhw
MTAsIGJvb2wgX19Jc0lFQzU1OSwgZmxvYXRfcm91bmRfc3R5bGUgX19Sb3VuZFN0eWxlPiBjb25z
dCBpbnQgX0Zsb2F0aW5nX2xpbWl0czwgX19udW1iZXIsIF9fRGlnaXRzLCBfX0RpZ2l0czEwLCBf
X01pbkV4cCwgX19NYXhFeHAsIF9fTWluRXhwMTAsIF9fTWF4RXhwMTAsIF9fSXNJRUM1NTksIF9f
Um91bmRTdHlsZT46OiBkaWdpdHMxMDsKdGVtcGxhdGUgPGNsYXNzIF9fbnVtYmVyLCBpbnQgX19E
aWdpdHMsIGludCBfX0RpZ2l0czEwLCBpbnQgX19NaW5FeHAsIGludCBfX01heEV4cCwgaW50IF9f
TWluRXhwMTAsIGludCBfX01heEV4cDEwLCBib29sIF9fSXNJRUM1NTksIGZsb2F0X3JvdW5kX3N0
eWxlIF9fUm91bmRTdHlsZT4gY29uc3QgYm9vbCBfRmxvYXRpbmdfbGltaXRzPCBfX251bWJlciwg
X19EaWdpdHMsIF9fRGlnaXRzMTAsIF9fTWluRXhwLCBfX01heEV4cCwgX19NaW5FeHAxMCwgX19N
YXhFeHAxMCwgX19Jc0lFQzU1OSwgX19Sb3VuZFN0eWxlPjo6IGlzX3NpZ25lZDsKdGVtcGxhdGUg
PGNsYXNzIF9fbnVtYmVyLCBpbnQgX19EaWdpdHMsIGludCBfX0RpZ2l0czEwLCBpbnQgX19NaW5F
eHAsIGludCBfX01heEV4cCwgaW50IF9fTWluRXhwMTAsIGludCBfX01heEV4cDEwLCBib29sIF9f
SXNJRUM1NTksIGZsb2F0X3JvdW5kX3N0eWxlIF9fUm91bmRTdHlsZT4gY29uc3QgaW50IF9GbG9h
dGluZ19saW1pdHM8IF9fbnVtYmVyLCBfX0RpZ2l0cywgX19EaWdpdHMxMCwgX19NaW5FeHAsIF9f
TWF4RXhwLCBfX01pbkV4cDEwLCBfX01heEV4cDEwLCBfX0lzSUVDNTU5LCBfX1JvdW5kU3R5bGU+
OjogcmFkaXg7CnRlbXBsYXRlIDxjbGFzcyBfX251bWJlciwgaW50IF9fRGlnaXRzLCBpbnQgX19E
aWdpdHMxMCwgaW50IF9fTWluRXhwLCBpbnQgX19NYXhFeHAsIGludCBfX01pbkV4cDEwLCBpbnQg
X19NYXhFeHAxMCwgYm9vbCBfX0lzSUVDNTU5LCBmbG9hdF9yb3VuZF9zdHlsZSBfX1JvdW5kU3R5
bGU+IGNvbnN0IGludCBfRmxvYXRpbmdfbGltaXRzPCBfX251bWJlciwgX19EaWdpdHMsIF9fRGln
aXRzMTAsIF9fTWluRXhwLCBfX01heEV4cCwgX19NaW5FeHAxMCwgX19NYXhFeHAxMCwgX19Jc0lF
QzU1OSwgX19Sb3VuZFN0eWxlPjo6IG1pbl9leHBvbmVudDsKdGVtcGxhdGUgPGNsYXNzIF9fbnVt
YmVyLCBpbnQgX19EaWdpdHMsIGludCBfX0RpZ2l0czEwLCBpbnQgX19NaW5FeHAsIGludCBfX01h
eEV4cCwgaW50IF9fTWluRXhwMTAsIGludCBfX01heEV4cDEwLCBib29sIF9fSXNJRUM1NTksIGZs
b2F0X3JvdW5kX3N0eWxlIF9fUm91bmRTdHlsZT4gY29uc3QgaW50IF9GbG9hdGluZ19saW1pdHM8
IF9fbnVtYmVyLCBfX0RpZ2l0cywgX19EaWdpdHMxMCwgX19NaW5FeHAsIF9fTWF4RXhwLCBfX01p
bkV4cDEwLCBfX01heEV4cDEwLCBfX0lzSUVDNTU5LCBfX1JvdW5kU3R5bGU+OjogbWF4X2V4cG9u
ZW50Owp0ZW1wbGF0ZSA8Y2xhc3MgX19udW1iZXIsIGludCBfX0RpZ2l0cywgaW50IF9fRGlnaXRz
MTAsIGludCBfX01pbkV4cCwgaW50IF9fTWF4RXhwLCBpbnQgX19NaW5FeHAxMCwgaW50IF9fTWF4
RXhwMTAsIGJvb2wgX19Jc0lFQzU1OSwgZmxvYXRfcm91bmRfc3R5bGUgX19Sb3VuZFN0eWxlPiBj
b25zdCBpbnQgX0Zsb2F0aW5nX2xpbWl0czwgX19udW1iZXIsIF9fRGlnaXRzLCBfX0RpZ2l0czEw
LCBfX01pbkV4cCwgX19NYXhFeHAsIF9fTWluRXhwMTAsIF9fTWF4RXhwMTAsIF9fSXNJRUM1NTks
IF9fUm91bmRTdHlsZT46OiBtaW5fZXhwb25lbnQxMDsKdGVtcGxhdGUgPGNsYXNzIF9fbnVtYmVy
LCBpbnQgX19EaWdpdHMsIGludCBfX0RpZ2l0czEwLCBpbnQgX19NaW5FeHAsIGludCBfX01heEV4
cCwgaW50IF9fTWluRXhwMTAsIGludCBfX01heEV4cDEwLCBib29sIF9fSXNJRUM1NTksIGZsb2F0
X3JvdW5kX3N0eWxlIF9fUm91bmRTdHlsZT4gY29uc3QgaW50IF9GbG9hdGluZ19saW1pdHM8IF9f
bnVtYmVyLCBfX0RpZ2l0cywgX19EaWdpdHMxMCwgX19NaW5FeHAsIF9fTWF4RXhwLCBfX01pbkV4
cDEwLCBfX01heEV4cDEwLCBfX0lzSUVDNTU5LCBfX1JvdW5kU3R5bGU+OjogbWF4X2V4cG9uZW50
MTA7CnRlbXBsYXRlIDxjbGFzcyBfX251bWJlciwgaW50IF9fRGlnaXRzLCBpbnQgX19EaWdpdHMx
MCwgaW50IF9fTWluRXhwLCBpbnQgX19NYXhFeHAsIGludCBfX01pbkV4cDEwLCBpbnQgX19NYXhF
eHAxMCwgYm9vbCBfX0lzSUVDNTU5LCBmbG9hdF9yb3VuZF9zdHlsZSBfX1JvdW5kU3R5bGU+IGNv
bnN0IGJvb2wgX0Zsb2F0aW5nX2xpbWl0czwgX19udW1iZXIsIF9fRGlnaXRzLCBfX0RpZ2l0czEw
LCBfX01pbkV4cCwgX19NYXhFeHAsIF9fTWluRXhwMTAsIF9fTWF4RXhwMTAsIF9fSXNJRUM1NTks
IF9fUm91bmRTdHlsZT46OiBoYXNfaW5maW5pdHk7CnRlbXBsYXRlIDxjbGFzcyBfX251bWJlciwg
aW50IF9fRGlnaXRzLCBpbnQgX19EaWdpdHMxMCwgaW50IF9fTWluRXhwLCBpbnQgX19NYXhFeHAs
IGludCBfX01pbkV4cDEwLCBpbnQgX19NYXhFeHAxMCwgYm9vbCBfX0lzSUVDNTU5LCBmbG9hdF9y
b3VuZF9zdHlsZSBfX1JvdW5kU3R5bGU+IGNvbnN0IGJvb2wgX0Zsb2F0aW5nX2xpbWl0czwgX19u
dW1iZXIsIF9fRGlnaXRzLCBfX0RpZ2l0czEwLCBfX01pbkV4cCwgX19NYXhFeHAsIF9fTWluRXhw
MTAsIF9fTWF4RXhwMTAsIF9fSXNJRUM1NTksIF9fUm91bmRTdHlsZT46OiBoYXNfcXVpZXRfTmFO
Owp0ZW1wbGF0ZSA8Y2xhc3MgX19udW1iZXIsIGludCBfX0RpZ2l0cywgaW50IF9fRGlnaXRzMTAs
IGludCBfX01pbkV4cCwgaW50IF9fTWF4RXhwLCBpbnQgX19NaW5FeHAxMCwgaW50IF9fTWF4RXhw
MTAsIGJvb2wgX19Jc0lFQzU1OSwgZmxvYXRfcm91bmRfc3R5bGUgX19Sb3VuZFN0eWxlPiBjb25z
dCBib29sIF9GbG9hdGluZ19saW1pdHM8IF9fbnVtYmVyLCBfX0RpZ2l0cywgX19EaWdpdHMxMCwg
X19NaW5FeHAsIF9fTWF4RXhwLCBfX01pbkV4cDEwLCBfX01heEV4cDEwLCBfX0lzSUVDNTU5LCBf
X1JvdW5kU3R5bGU+OjogaGFzX3NpZ25hbGluZ19OYU47CnRlbXBsYXRlIDxjbGFzcyBfX251bWJl
ciwgaW50IF9fRGlnaXRzLCBpbnQgX19EaWdpdHMxMCwgaW50IF9fTWluRXhwLCBpbnQgX19NYXhF
eHAsIGludCBfX01pbkV4cDEwLCBpbnQgX19NYXhFeHAxMCwgYm9vbCBfX0lzSUVDNTU5LCBmbG9h
dF9yb3VuZF9zdHlsZSBfX1JvdW5kU3R5bGU+IGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBfRmxv
YXRpbmdfbGltaXRzPCBfX251bWJlciwgX19EaWdpdHMsIF9fRGlnaXRzMTAsIF9fTWluRXhwLCBf
X01heEV4cCwgX19NaW5FeHAxMCwgX19NYXhFeHAxMCwgX19Jc0lFQzU1OSwgX19Sb3VuZFN0eWxl
Pjo6IGhhc19kZW5vcm07CnRlbXBsYXRlIDxjbGFzcyBfX251bWJlciwgaW50IF9fRGlnaXRzLCBp
bnQgX19EaWdpdHMxMCwgaW50IF9fTWluRXhwLCBpbnQgX19NYXhFeHAsIGludCBfX01pbkV4cDEw
LCBpbnQgX19NYXhFeHAxMCwgYm9vbCBfX0lzSUVDNTU5LCBmbG9hdF9yb3VuZF9zdHlsZSBfX1Jv
dW5kU3R5bGU+IGNvbnN0IGJvb2wgX0Zsb2F0aW5nX2xpbWl0czwgX19udW1iZXIsIF9fRGlnaXRz
LCBfX0RpZ2l0czEwLCBfX01pbkV4cCwgX19NYXhFeHAsIF9fTWluRXhwMTAsIF9fTWF4RXhwMTAs
IF9fSXNJRUM1NTksIF9fUm91bmRTdHlsZT46OiBoYXNfZGVub3JtX2xvc3M7CnRlbXBsYXRlIDxj
bGFzcyBfX251bWJlciwgaW50IF9fRGlnaXRzLCBpbnQgX19EaWdpdHMxMCwgaW50IF9fTWluRXhw
LCBpbnQgX19NYXhFeHAsIGludCBfX01pbkV4cDEwLCBpbnQgX19NYXhFeHAxMCwgYm9vbCBfX0lz
SUVDNTU5LCBmbG9hdF9yb3VuZF9zdHlsZSBfX1JvdW5kU3R5bGU+IGNvbnN0IGJvb2wgX0Zsb2F0
aW5nX2xpbWl0czwgX19udW1iZXIsIF9fRGlnaXRzLCBfX0RpZ2l0czEwLCBfX01pbkV4cCwgX19N
YXhFeHAsIF9fTWluRXhwMTAsIF9fTWF4RXhwMTAsIF9fSXNJRUM1NTksIF9fUm91bmRTdHlsZT46
OiBpc19pZWM1NTk7CnRlbXBsYXRlIDxjbGFzcyBfX251bWJlciwgaW50IF9fRGlnaXRzLCBpbnQg
X19EaWdpdHMxMCwgaW50IF9fTWluRXhwLCBpbnQgX19NYXhFeHAsIGludCBfX01pbkV4cDEwLCBp
bnQgX19NYXhFeHAxMCwgYm9vbCBfX0lzSUVDNTU5LCBmbG9hdF9yb3VuZF9zdHlsZSBfX1JvdW5k
U3R5bGU+IGNvbnN0IGJvb2wgX0Zsb2F0aW5nX2xpbWl0czwgX19udW1iZXIsIF9fRGlnaXRzLCBf
X0RpZ2l0czEwLCBfX01pbkV4cCwgX19NYXhFeHAsIF9fTWluRXhwMTAsIF9fTWF4RXhwMTAsIF9f
SXNJRUM1NTksIF9fUm91bmRTdHlsZT46OiBpc19ib3VuZGVkOwp0ZW1wbGF0ZSA8Y2xhc3MgX19u
dW1iZXIsIGludCBfX0RpZ2l0cywgaW50IF9fRGlnaXRzMTAsIGludCBfX01pbkV4cCwgaW50IF9f
TWF4RXhwLCBpbnQgX19NaW5FeHAxMCwgaW50IF9fTWF4RXhwMTAsIGJvb2wgX19Jc0lFQzU1OSwg
ZmxvYXRfcm91bmRfc3R5bGUgX19Sb3VuZFN0eWxlPiBjb25zdCBib29sIF9GbG9hdGluZ19saW1p
dHM8IF9fbnVtYmVyLCBfX0RpZ2l0cywgX19EaWdpdHMxMCwgX19NaW5FeHAsIF9fTWF4RXhwLCBf
X01pbkV4cDEwLCBfX01heEV4cDEwLCBfX0lzSUVDNTU5LCBfX1JvdW5kU3R5bGU+OjogdHJhcHM7
CnRlbXBsYXRlIDxjbGFzcyBfX251bWJlciwgaW50IF9fRGlnaXRzLCBpbnQgX19EaWdpdHMxMCwg
aW50IF9fTWluRXhwLCBpbnQgX19NYXhFeHAsIGludCBfX01pbkV4cDEwLCBpbnQgX19NYXhFeHAx
MCwgYm9vbCBfX0lzSUVDNTU5LCBmbG9hdF9yb3VuZF9zdHlsZSBfX1JvdW5kU3R5bGU+IGNvbnN0
IGJvb2wgX0Zsb2F0aW5nX2xpbWl0czwgX19udW1iZXIsIF9fRGlnaXRzLCBfX0RpZ2l0czEwLCBf
X01pbkV4cCwgX19NYXhFeHAsIF9fTWluRXhwMTAsIF9fTWF4RXhwMTAsIF9fSXNJRUM1NTksIF9f
Um91bmRTdHlsZT46OiB0aW55bmVzc19iZWZvcmU7CnRlbXBsYXRlIDxjbGFzcyBfX251bWJlciwg
aW50IF9fRGlnaXRzLCBpbnQgX19EaWdpdHMxMCwgaW50IF9fTWluRXhwLCBpbnQgX19NYXhFeHAs
IGludCBfX01pbkV4cDEwLCBpbnQgX19NYXhFeHAxMCwgYm9vbCBfX0lzSUVDNTU5LCBmbG9hdF9y
b3VuZF9zdHlsZSBfX1JvdW5kU3R5bGU+IGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIF9GbG9hdGlu
Z19saW1pdHM8IF9fbnVtYmVyLCBfX0RpZ2l0cywgX19EaWdpdHMxMCwgX19NaW5FeHAsIF9fTWF4
RXhwLCBfX01pbkV4cDEwLCBfX01heEV4cDEwLCBfX0lzSUVDNTU5LCBfX1JvdW5kU3R5bGU+Ojog
cm91bmRfc3R5bGU7CiMgMTU1ICIuLi9zdGxwb3J0L3N0bC9fbGltaXRzLmMiCnRlbXBsYXRlIDxj
bGFzcyBfX2R1bW15Pgpjb25zdCBfTF9yZXAgX0xpbUc8X19kdW1teT46Ol9MX2luZiA9IHt7IDAs
IDAsIDAsIDB4ODAwMCwgMHg3ZmZmIH19Owp0ZW1wbGF0ZSA8Y2xhc3MgX19kdW1teT4KY29uc3Qg
X0xfcmVwIF9MaW1HPF9fZHVtbXk+OjpfTF9xTmFOID0ge3sgMCwgMCwgMCwgMHhhMDAwLCAweDdm
ZmYgfX07CnRlbXBsYXRlIDxjbGFzcyBfX2R1bW15Pgpjb25zdCBfTF9yZXAgX0xpbUc8X19kdW1t
eT46Ol9MX3NOYU4gPSB7eyAwLCAwLCAwLCAweGMwMDAsIDB4N2ZmZiB9fTsKCnRlbXBsYXRlIDxj
bGFzcyBfX2R1bW15Pgpjb25zdCBfRF9yZXAgX0xpbUc8X19kdW1teT46Ol9EX2luZiA9IHt7IDAs
IDAsIDAsIDB4N2ZmMCB9fTsKdGVtcGxhdGUgPGNsYXNzIF9fZHVtbXk+CmNvbnN0IF9EX3JlcCBf
TGltRzxfX2R1bW15Pjo6X0RfcU5hTiA9IHt7IDAsIDAsIDAsIDB4N2ZmNCB9fTsKdGVtcGxhdGUg
PGNsYXNzIF9fZHVtbXk+CmNvbnN0IF9EX3JlcCBfTGltRzxfX2R1bW15Pjo6X0Rfc05hTiA9IHt7
IDAsIDAsIDAsIDB4N2ZmOCB9fTsKdGVtcGxhdGUgPGNsYXNzIF9fZHVtbXk+CmNvbnN0IF9GX3Jl
cCBfTGltRzxfX2R1bW15Pjo6X0ZfaW5mID0ge3sgMCwgMHg3ZjgwIH19Owp0ZW1wbGF0ZSA8Y2xh
c3MgX19kdW1teT4KY29uc3QgX0ZfcmVwIF9MaW1HPF9fZHVtbXk+OjpfRl9xTmFOID0ge3sgMCwg
MHg3ZmEwIH19Owp0ZW1wbGF0ZSA8Y2xhc3MgX19kdW1teT4KY29uc3QgX0ZfcmVwIF9MaW1HPF9f
ZHVtbXk+OjpfRl9zTmFOID0ge3sgMCwgMHg3ZmMwIH19OwojIDIyMSAiLi4vc3RscG9ydC9zdGwv
X2xpbWl0cy5jIgp9CiMgNTM5ICIuLi9zdGxwb3J0L3N0bC9fbGltaXRzLmgiIDIKIyAyNSAiLi4v
c3RscG9ydC9zdGwvX251bV9wdXQuYyIgMgoKCm5hbWVzcGFjZSBfU1RMIHsKCgoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfT3V0cHV0SXRlcixjbGFzcyBfRmxvYXQ+Cl9PdXRwdXRJ
dGVyCl9NX2RvX3B1dF9mbG9hdChfT3V0cHV0SXRlciBfX3MsIGlvc19iYXNlJiBfX2YsIF9DaGFy
VCBfX2ZpbGwsX0Zsb2F0IF9feCk7CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3Mg
X091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyCl9fY29weV9mbG9hdF9hbmRfZmlsbChjb25zdCBfQ2hh
clQqIF9fZmlyc3QsIGNvbnN0IF9DaGFyVCogX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
X091dHB1dEl0ZXIgX19vdXQsCiAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6Zm10Zmxh
Z3MgX19mbGFncywKICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbXNpemUgX193aWR0aCwgX0No
YXJUIF9fZmlsbCwKICAgICAgICAgICAgICAgICAgICAgIF9DaGFyVCBfX3BsdXMsIF9DaGFyVCBf
X21pbnVzKSB7CiAgaWYgKF9fd2lkdGggPD0gX19sYXN0IC0gX19maXJzdCkKICAgIHJldHVybiBj
b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19vdXQpOwogIGVsc2UgewogICAgc3RyZWFtc2l6ZSBfX3Bh
ZCA9IF9fd2lkdGggLSAoX19sYXN0IC0gX19maXJzdCk7CiAgICBpb3NfYmFzZTo6Zm10ZmxhZ3Mg
X19kaXIgPSBfX2ZsYWdzICYgaW9zX2Jhc2U6OmFkanVzdGZpZWxkOwoKICAgIGlmIChfX2RpciA9
PSBpb3NfYmFzZTo6bGVmdCkgewogICAgICBfX291dCA9IGNvcHkoX19maXJzdCwgX19sYXN0LCBf
X291dCk7CiAgICAgIHJldHVybiBmaWxsX24oX19vdXQsIF9fcGFkLCBfX2ZpbGwpOwogICAgfQog
ICAgZWxzZSBpZiAoX19kaXIgPT0gaW9zX2Jhc2U6OmludGVybmFsICYmIF9fZmlyc3QgIT0gX19s
YXN0ICYmCiAgICAgICAgICAgICAoKl9fZmlyc3QgPT0gX19wbHVzIHx8ICpfX2ZpcnN0ID09IF9f
bWludXMpKSB7CiAgICAgICpfX291dCsrID0gKl9fZmlyc3QrKzsKICAgICAgX19vdXQgPSBmaWxs
X24oX19vdXQsIF9fcGFkLCBfX2ZpbGwpOwogICAgICByZXR1cm4gY29weShfX2ZpcnN0LCBfX2xh
c3QsIF9fb3V0KTsKICAgIH0KICAgIGVsc2UgewogICAgICBfX291dCA9IGZpbGxfbihfX291dCwg
X19wYWQsIF9fZmlsbCk7CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19vdXQp
OwogICAgfQogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVy
Cl9fcHV0X2Zsb2F0KGNoYXIqIF9faWJ1ZiwgY2hhciogX19pZW5kLCBfT3V0cHV0SXRlciBfX291
dCwKICAgICAgICAgICAgaW9zX2Jhc2UmIF9fZiwgd2NoYXJfdCBfX2ZpbGwsCiAgICAgICAgICAg
IHdjaGFyX3QgX19kZWNpbWFsX3BvaW50LAogICAgICAgICAgICB3Y2hhcl90IF9fc2VwLCBjb25z
dCBzdHJpbmcmIF9fZ3JvdXBpbmcpCnsKICBjb25zdCBjdHlwZTx3Y2hhcl90PiYgX19jdCA9ICoo
Y3R5cGU8d2NoYXJfdD4qKV9fZi5fTV9jdHlwZV9mYWNldCgpIDsKCiAgd2NoYXJfdCBfX3didWZb
MTI4XTsKICB3Y2hhcl90KiBfX2VlbmQgPSBfX2NvbnZlcnRfZmxvYXRfYnVmZmVyKF9faWJ1Ziwg
X19pZW5kLCBfX3didWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2N0LCBfX2RlY2ltYWxfcG9pbnQpOwogIGlmIChfX2dyb3VwaW5nLnNpemUoKSAhPSAwKSB7
CgoKCgoKICAgIHN0cmluZyBfX25ld19ncm91cGluZyA9IF9fZ3JvdXBpbmc7CiAgICB3Y2hhcl90
KiBfX2RlY2ltYWxfcG9zID0gZmluZChfX3didWYsIF9fZWVuZCwgX19kZWNpbWFsX3BvaW50KTsK
ICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSA9PSAxKQogICAgICBfX25ld19ncm91cGluZy5wdXNo
X2JhY2soX19ncm91cGluZ1swXSk7CgoKCiAgICBfX25ld19ncm91cGluZ1swXSArPSBzdGF0aWNf
Y2FzdDxjaGFyPihfX2VlbmQgLSBfX2RlY2ltYWxfcG9zKTsKICAgIHB0cmRpZmZfdCBfX2xlbiA9
IF9faW5zZXJ0X2dyb3VwaW5nKF9fd2J1ZiwgX19lZW5kLCBfX25ld19ncm91cGluZywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2VwLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19jdC53aWRlbignKycpLCBfX2N0LndpZGVuKCctJyks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKICAgIF9fZWVuZCA9
IF9fd2J1ZiArIF9fbGVuOwogIH0KCiAgcmV0dXJuIF9fY29weV9mbG9hdF9hbmRfZmlsbChfX3di
dWYsIF9fZWVuZCwgX19vdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2YuZmxh
Z3MoKSwgX19mLndpZHRoKDApLCBfX2ZpbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2N0LndpZGVuKCcrJyksIF9fY3Qud2lkZW4oJy0nKSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNz
IF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlcgpfX3B1dF9mbG9hdChjaGFyKiBfX2lidWYsIGNoYXIq
IF9faWVuZCwgX091dHB1dEl0ZXIgX19vdXQsCiAgICAgICAgICAgIGlvc19iYXNlJiBfX2YsIGNo
YXIgX19maWxsLAogICAgICAgICAgICBjaGFyIF9fZGVjaW1hbF9wb2ludCwKICAgICAgICAgICAg
Y2hhciBfX3NlcCwgY29uc3Qgc3RyaW5nJiBfX2dyb3VwaW5nKQp7CiAgX19hZGp1c3RfZmxvYXRf
YnVmZmVyKF9faWJ1ZiwgX19pZW5kLCBfX2RlY2ltYWxfcG9pbnQpOwogIGlmIChfX2dyb3VwaW5n
LnNpemUoKSAhPSAwKSB7CiAgICBzdHJpbmcgX19uZXdfZ3JvdXBpbmcgPSBfX2dyb3VwaW5nOwog
ICAgY29uc3QgY2hhciAqIF9fZGVjaW1hbF9wb3MgPSBmaW5kKF9faWJ1ZiwgX19pZW5kLCBfX2Rl
Y2ltYWxfcG9pbnQpOwogICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpID09IDEpCiAgICAgIF9fbmV3
X2dyb3VwaW5nLnB1c2hfYmFjayhfX2dyb3VwaW5nWzBdKTsKICAgIF9fbmV3X2dyb3VwaW5nWzBd
ICs9IHN0YXRpY19jYXN0PGNoYXI+KChfX2llbmQgLSBfX2RlY2ltYWxfcG9zKSk7CiAgICBwdHJk
aWZmX3QgX19sZW4gPSBfX2luc2VydF9ncm91cGluZyhfX2lidWYsIF9faWVuZCwgX19uZXdfZ3Jv
dXBpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NlcCwgJysn
LCAnLScsIDApOwogICAgX19pZW5kID0gX19pYnVmICsgX19sZW47CiAgfQoKICByZXR1cm4gX19j
b3B5X2Zsb2F0X2FuZF9maWxsKF9faWJ1ZiwgX19pZW5kLCBfX291dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fZi5mbGFncygpLCBfX2Yud2lkdGgoMCksIF9fZmlsbCwgJysnLCAn
LScpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3Mg
X0Zsb2F0PgpfT3V0cHV0SXRlcgpfTV9kb19wdXRfZmxvYXQoX091dHB1dEl0ZXIgX19zLCBpb3Nf
YmFzZSYgX19mLAogICAgICAgICAgICAgICAgX0NoYXJUIF9fZmlsbCwgX0Zsb2F0IF9feCkKewog
IGNoYXIgX19idWZbMTI4XTsKICBjaGFyKiBfX2llbmQgPSBfX3dyaXRlX2Zsb2F0KF9fYnVmLCBf
X2YuZmxhZ3MoKSwgKGludClfX2YucHJlY2lzaW9uKCksIF9feCk7CgoKICBjb25zdCBudW1wdW5j
dDxfQ2hhclQ+JiBfX25wID0gKihjb25zdCBudW1wdW5jdDxfQ2hhclQ+KilfX2YuX01fbnVtcHVu
Y3RfZmFjZXQoKTsKCiAgcmV0dXJuIF9fcHV0X2Zsb2F0KF9fYnVmLCBfX2llbmQsIF9fcywgX19m
LCBfX2ZpbGwsCiAgICAgICAgICAgICAgICAgICAgIF9fbnAuZGVjaW1hbF9wb2ludCgpLAogICAg
ICAgICAgICAgICAgICAgICBfX25wLnRob3VzYW5kc19zZXAoKSwgX19mLl9NX2dyb3VwaW5nKCkp
Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0
SXRlcgpfX2NvcHlfaW50ZWdlcl9hbmRfZmlsbChjb25zdCBfQ2hhclQqIF9fYnVmLCBwdHJkaWZm
X3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fb3V0LAogICAg
ICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGcsIHN0cmVhbXNpemUg
X193aWQsIF9DaGFyVCBfX2ZpbGwsCiAgICAgICAgICAgICAgICAgICAgICAgIF9DaGFyVCBfX3Bs
dXMsIF9DaGFyVCBfX21pbnVzKQp7CiAgaWYgKF9fbGVuID49IF9fd2lkKQogICAgcmV0dXJuIGNv
cHkoX19idWYsIF9fYnVmICsgX19sZW4sIF9fb3V0KTsKICBlbHNlIHsKICAgIHB0cmRpZmZfdCBf
X3BhZCA9IF9fd2lkIC0gX19sZW47CiAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19kaXIgPSBfX2Zs
ZyAmIGlvc19iYXNlOjphZGp1c3RmaWVsZDsKCiAgICBpZiAoX19kaXIgPT0gaW9zX2Jhc2U6Omxl
ZnQpIHsKICAgICAgX19vdXQgPSBjb3B5KF9fYnVmLCBfX2J1ZiArIF9fbGVuLCBfX291dCk7CiAg
ICAgIHJldHVybiBmaWxsX24oX19vdXQsIF9fcGFkLCBfX2ZpbGwpOwogICAgfQogICAgZWxzZSBp
ZiAoX19kaXIgPT0gaW9zX2Jhc2U6OmludGVybmFsICYmIF9fbGVuICE9IDAgJiYKICAgICAgICAg
ICAgIChfX2J1ZlswXSA9PSBfX3BsdXMgfHwgX19idWZbMF0gPT0gX19taW51cykpIHsKICAgICAg
Kl9fb3V0KysgPSBfX2J1ZlswXTsKICAgICAgX19vdXQgPSBmaWxsX24oX19vdXQsIF9fcGFkLCBf
X2ZpbGwpOwogICAgICByZXR1cm4gY29weShfX2J1ZiArIDEsIF9fYnVmICsgX19sZW4sIF9fb3V0
KTsKICAgIH0KICAgIGVsc2UgaWYgKF9fZGlyID09IGlvc19iYXNlOjppbnRlcm5hbCAmJiBfX2xl
biA+PSAyICYmCiAgICAgICAgICAgICAoX19mbGcgJiBpb3NfYmFzZTo6c2hvd2Jhc2UpICYmCiAg
ICAgICAgICAgICAoX19mbGcgJiBpb3NfYmFzZTo6YmFzZWZpZWxkKSA9PSBpb3NfYmFzZTo6aGV4
KSB7CiAgICAgICpfX291dCsrID0gX19idWZbMF07CiAgICAgICpfX291dCsrID0gX19idWZbMV07
CiAgICAgIF9fb3V0ID0gZmlsbF9uKF9fb3V0LCBfX3BhZCwgX19maWxsKTsKICAgICAgcmV0dXJu
IGNvcHkoX19idWYgKyAyLCBfX2J1ZiArIF9fbGVuLCBfX291dCk7CiAgICB9CiAgICBlbHNlIHsK
ICAgICAgX19vdXQgPSBmaWxsX24oX19vdXQsIF9fcGFkLCBfX2ZpbGwpOwogICAgICByZXR1cm4g
Y29weShfX2J1ZiwgX19idWYgKyBfX2xlbiwgX19vdXQpOwogICAgfQogIH0KfQoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyCl9fcHV0X2ludGVnZXIoY2hhciogX19i
dWYsIGNoYXIqIF9faWVuZCwgX091dHB1dEl0ZXIgX19zLAogICAgICAgICAgICAgIGlvc19iYXNl
JiBfX2YsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MsIHdjaGFyX3Qg
X19maWxsKQp7CiAgbG9jYWxlIF9fbG9jID0gX19mLmdldGxvYygpOwoKICBjb25zdCBjdHlwZTx3
Y2hhcl90PiYgX19jdCA9ICooY29uc3QgY3R5cGU8d2NoYXJfdD4qKV9fZi5fTV9jdHlwZV9mYWNl
dCgpOwoKICB3Y2hhcl90IF9fcGx1cyA9IF9fY3Qud2lkZW4oJysnKTsKICB3Y2hhcl90IF9fbWlu
dXMgPSBfX2N0LndpZGVuKCctJyk7CgogIHdjaGFyX3QgX193YnVmWzY0XTsKICBfX2N0LndpZGVu
KF9fYnVmLCBfX2llbmQsIF9fd2J1Zik7CiAgcHRyZGlmZl90IF9fbGVuID0gX19pZW5kIC0gX19i
dWY7CiAgd2NoYXJfdCogX19lZW5kID0gX193YnVmICsgX19sZW47CgoKCgogIGNvbnN0IG51bXB1
bmN0PHdjaGFyX3Q+JiBfX25wID0gKihjb25zdCBudW1wdW5jdDx3Y2hhcl90PiopX19mLl9NX251
bXB1bmN0X2ZhY2V0KCk7CiAgY29uc3Qgc3RyaW5nJiBfX2dyb3VwaW5nID0gX19mLl9NX2dyb3Vw
aW5nKCk7CgogIGlmICghX19ncm91cGluZy5lbXB0eSgpKSB7CiAgICBpbnQgX19iYXNlY2hhcnM7
CiAgICBpZiAoX19mbGFncyAmIGlvc19iYXNlOjpzaG93YmFzZSkKICAgICAgc3dpdGNoIChfX2Zs
YWdzICYgaW9zX2Jhc2U6OmJhc2VmaWVsZCkgewogICAgICAgIGNhc2UgaW9zX2Jhc2U6OmhleDog
X19iYXNlY2hhcnMgPSAyOyBicmVhazsKICAgICAgICBjYXNlIGlvc19iYXNlOjpvY3Q6IF9fYmFz
ZWNoYXJzID0gMTsgYnJlYWs7CiAgICAgICAgZGVmYXVsdDogX19iYXNlY2hhcnMgPSAwOwogICAg
ICB9CiAgICBlbHNlCiAgICAgIF9fYmFzZWNoYXJzID0gMDsKCiAgICBfX2xlbiA9IF9faW5zZXJ0
X2dyb3VwaW5nKF9fd2J1ZiwgX19lZW5kLCBfX2dyb3VwaW5nLCBfX25wLnRob3VzYW5kc19zZXAo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wbHVzLCBfX21pbnVzLCBfX2Jhc2Vj
aGFycyk7CiAgfQoKICByZXR1cm4gX19jb3B5X2ludGVnZXJfYW5kX2ZpbGwoKHdjaGFyX3QqKV9f
d2J1ZiwgX19sZW4sIF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mbGFn
cywgX19mLndpZHRoKDApLCBfX2ZpbGwsIF9fcGx1cywgX19taW51cyk7Cn0KCgoKdGVtcGxhdGUg
PGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlcgpfX3B1dF9pbnRlZ2VyKGNoYXIqIF9fYnVm
LCBjaGFyKiBfX2llbmQsIF9PdXRwdXRJdGVyIF9fcywKICAgICAgICAgICAgICBpb3NfYmFzZSYg
X19mLCBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncywgY2hhciBfX2ZpbGwpCnsKICBwdHJkaWZm
X3QgX19sZW4gPSBfX2llbmQgLSBfX2J1ZjsKCgoKCiAgY29uc3QgbnVtcHVuY3Q8Y2hhcj4mIF9f
bnAgPSAqKGNvbnN0IG51bXB1bmN0PGNoYXI+KilfX2YuX01fbnVtcHVuY3RfZmFjZXQoKTsKICBj
b25zdCBzdHJpbmcmIF9fZ3JvdXBpbmcgPSBfX2YuX01fZ3JvdXBpbmcoKTsKCiAgaWYgKCFfX2dy
b3VwaW5nLmVtcHR5KCkpIHsKICAgIGludCBfX2Jhc2VjaGFyczsKICAgIGlmIChfX2ZsYWdzICYg
aW9zX2Jhc2U6OnNob3diYXNlKQogICAgICBzd2l0Y2ggKF9fZmxhZ3MgJiBpb3NfYmFzZTo6YmFz
ZWZpZWxkKSB7CiAgICAgICAgY2FzZSBpb3NfYmFzZTo6aGV4OiBfX2Jhc2VjaGFycyA9IDI7IGJy
ZWFrOwogICAgICAgIGNhc2UgaW9zX2Jhc2U6Om9jdDogX19iYXNlY2hhcnMgPSAxOyBicmVhazsK
ICAgICAgICBkZWZhdWx0OiBfX2Jhc2VjaGFycyA9IDA7CiAgICAgIH0KICAgIGVsc2UKICAgICAg
X19iYXNlY2hhcnMgPSAwOwogICAgX19sZW4gPSBfX2luc2VydF9ncm91cGluZyhfX2J1ZiwgX19p
ZW5kLCBfX2dyb3VwaW5nLCBfX25wLnRob3VzYW5kc19zZXAoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJysnLCAnLScsIF9fYmFzZWNoYXJzKTsKICB9CgogIHJldHVybiBfX2NvcHlf
aW50ZWdlcl9hbmRfZmlsbChfX2J1ZiwgX19sZW4sIF9fcywgX19mbGFncywgX19mLndpZHRoKDAp
LCBfX2ZpbGwsICcrJywgJy0nKTsKfQoKCnR5cGVkZWYgbG9uZyBsb25nIF9fbWF4X2ludF90Owp0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3VtYXhfaW50X3Q7CgoKCgoKZXh0ZXJuIGNvbnN0
IGNoYXIgX19oZXhfY2hhcl90YWJsZV9sb1tdOwpleHRlcm4gY29uc3QgY2hhciBfX2hleF9jaGFy
X3RhYmxlX2hpW107Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CmlubGluZSBjaGFyKgpfX3dy
aXRlX2RlY2ltYWxfYmFja3dhcmQoY2hhciogX19wdHIsIF9JbnRlZ2VyIF9feCwgaW9zX2Jhc2U6
OmZtdGZsYWdzIF9fZmxhZ3MsIGNvbnN0IF9fdHJ1ZV90eXBlJiApCnsKICBfX21heF9pbnRfdCBf
X3RlbXAgPSBfX3g7CgogIGNvbnN0IGJvb2wgX19uZWdhdGl2ZSA9IF9feCA8IDAgOwoKICBpZiAo
X19uZWdhdGl2ZSkgX190ZW1wID0gLV9fdGVtcDsKCiAgZm9yICg7IF9fdGVtcCAhPSAwOyBfX3Rl
bXAgLz0gMTApCiAgICAqLS1fX3B0ciA9IChpbnQpKF9fdGVtcCAlIDEwKSArICcwJzsKCiAgaWYg
KF9fbmVnYXRpdmUpCiAgICAqLS1fX3B0ciA9ICctJzsKICBlbHNlIGlmIChfX2ZsYWdzICYgaW9z
X2Jhc2U6OnNob3dwb3MpCiAgICAqLS1fX3B0ciA9ICcrJzsKICByZXR1cm4gX19wdHI7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KaW5saW5lIGNoYXIqCl9fd3JpdGVfZGVjaW1hbF9iYWNr
d2FyZChjaGFyKiBfX3B0ciwgX0ludGVnZXIgX194LCBpb3NfYmFzZTo6Zm10ZmxhZ3MsIGNvbnN0
IF9fZmFsc2VfdHlwZSYgKQp7CiAgZm9yICg7IF9feCAhPSAwOyBfX3ggLz0gMTApCiAgICAqLS1f
X3B0ciA9IChpbnQpKF9feCAlIDEwKSArICcwJzsKICByZXR1cm4gX19wdHI7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfSW50ZWdlcj4KY2hhcioKX193cml0ZV9pbnRlZ2VyX2JhY2t3YXJkKGNoYXIqIF9f
YnVmLCBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncywgX0ludGVnZXIgX194KQp7CiAgY2hhciog
X19wdHIgPSBfX2J1ZjsKICBfX3VtYXhfaW50X3QgX190ZW1wOwoKICBpZiAoX194ID09IDApIHsK
ICAgICotLV9fcHRyID0gJzAnOwogICAgaWYgKChfX2ZsYWdzICYgaW9zX2Jhc2U6OnNob3dwb3Mp
ICYmICggKF9fZmxhZ3MgJiAoaW9zX2Jhc2U6OmhleCB8IGlvc19iYXNlOjpvY3QpKSA9PSAwICkp
CiAgICAgICotLV9fcHRyID0gJysnOwogIH0KICBlbHNlIHsKCiAgICBzd2l0Y2ggKF9fZmxhZ3Mg
JiBpb3NfYmFzZTo6YmFzZWZpZWxkKSB7CiAgICBjYXNlIGlvc19iYXNlOjpvY3Q6CiAgICAgIF9f
dGVtcCA9IF9feDsKCiAgICAgIGlmICggc2l6ZW9mKF9feCkgPCA4ICYmIHNpemVvZihfX3VtYXhf
aW50X3QpID49IDggKQogICAgICAgIF9fdGVtcCAmPSAweEZGRkZGRkZGOwoKICAgICAgZm9yICg7
IF9fdGVtcCAhPSAwOyBfX3RlbXAgPj49MykKICAgICAgICAqLS1fX3B0ciA9ICgoKHVuc2lnbmVk
KV9fdGVtcCkmIDB4NykgKyAnMCc7CgoKICAgICAgaWYgKF9fZmxhZ3MgJiBpb3NfYmFzZTo6c2hv
d2Jhc2UpCiAgICAgICAgKi0tX19wdHIgPSAnMCc7CiAgICAgIGJyZWFrOwogICAgY2FzZSBpb3Nf
YmFzZTo6aGV4OgogICAgICB7CiAgICAgICAgY29uc3QgY2hhciogX190YWJsZV9wdHIgPSAoX19m
bGFncyAmIGlvc19iYXNlOjp1cHBlcmNhc2UpID8KICAgICAgICAgIF9faGV4X2NoYXJfdGFibGVf
aGkgOiBfX2hleF9jaGFyX3RhYmxlX2xvOwogICAgICBfX3RlbXAgPSBfX3g7CgogICAgICBpZiAo
IHNpemVvZihfX3gpIDwgOCAmJiBzaXplb2YoX191bWF4X2ludF90KSA+PSA4ICkKICAgICAgICBf
X3RlbXAgJj0gMHhGRkZGRkZGRjsKCiAgICAgICAgZm9yICg7IF9fdGVtcCAhPSAwOyBfX3RlbXAg
Pj49NCkKICAgICAgICAgICotLV9fcHRyID0gX190YWJsZV9wdHJbKCh1bnNpZ25lZClfX3RlbXAg
JiAweEYpXTsKCiAgICAgICAgaWYgKF9fZmxhZ3MgJiBpb3NfYmFzZTo6c2hvd2Jhc2UpIHsKICAg
ICAgICAgICotLV9fcHRyID0gX190YWJsZV9wdHJbMTZdOwogICAgICAgICAgKi0tX19wdHIgPSAn
MCc7CiAgICAgICAgfQogICAgICB9CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgewoK
CgoKCgoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fYm9vbDJ0eXBlPG51bWVyaWNfbGltaXRz
PF9JbnRlZ2VyPjo6aXNfc2lnbmVkPjo6X1JldCBfSXNTaWduZWQ7CiAgICAgICAgX19wdHIgPSBf
X3dyaXRlX2RlY2ltYWxfYmFja3dhcmQoX19wdHIsIF9feCwgX19mbGFncywgX0lzU2lnbmVkKCkp
OwoKICAgICAgfQogICAgICBicmVhazsKICAgIH0KICB9CgogIHJldHVybiBfX3B0cjsKfQoKCgoK
CgoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX091dHB1dEl0ZXJhdG9yPgpsb2NhbGU6
OmlkIG51bV9wdXQ8X0NoYXJULCBfT3V0cHV0SXRlcmF0b3I+OjppZDsKIyA0MTEgIi4uL3N0bHBv
cnQvc3RsL19udW1fcHV0LmMiCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9PdXRwdXRJ
dGVyPgpfT3V0cHV0SXRlcgpudW1fcHV0PF9DaGFyVCwgX091dHB1dEl0ZXI+Ojpkb19wdXQoX091
dHB1dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19mLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3ZhbCkgY29uc3QgewogIGlmICghKF9f
Zi5mbGFncygpICYgaW9zX2Jhc2U6OmJvb2xhbHBoYSkpCiAgICByZXR1cm4gdGhpcy0+ZG9fcHV0
KF9fcywgX19mLCBfX2ZpbGwsIHN0YXRpY19jYXN0PGxvbmc+KF9fdmFsKSk7CgogIGxvY2FsZSBf
X2xvYyA9IF9fZi5nZXRsb2MoKTsKCgoKICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0g
Kihjb25zdCBudW1wdW5jdDxfQ2hhclQ+KilfX2YuX01fbnVtcHVuY3RfZmFjZXQoKTsKCiAgYmFz
aWNfc3RyaW5nPF9DaGFyVD4gX19zdHIgPSBfX3ZhbCA/IF9fbnAudHJ1ZW5hbWUoKSA6IF9fbnAu
ZmFsc2VuYW1lKCk7CgoKCgogIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19mLmZsYWdz
KCk7CiAgaWYgKChfX2ZsYWdzICYgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKSA9PSBpb3NfYmFzZTo6
aW50ZXJuYWwpCiAgICBfX2ZsYWdzID0gKF9fZmxhZ3MgJiB+aW9zX2Jhc2U6OmFkanVzdGZpZWxk
KSB8IGlvc19iYXNlOjpyaWdodDsKCiAgcmV0dXJuIF9fY29weV9pbnRlZ2VyX2FuZF9maWxsKF9f
c3RyLmNfc3RyKCksIF9fc3RyLnNpemUoKSwgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2ZsYWdzLCBfX2Yud2lkdGgoMCksIF9fZmlsbCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKF9DaGFyVCkgMCwgKF9DaGFyVCkgMCk7Cn0KCgoKdGVtcGxhdGUgPGNs
YXNzIF9DaGFyVCwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyCm51bV9wdXQ8X0NoYXJU
LCBfT3V0cHV0SXRlcj46OmRvX3B1dChfT3V0cHV0SXRlciBfX3MsIGlvc19iYXNlJiBfX2YsIF9D
aGFyVCBfX2ZpbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIF9f
dmFsKSBjb25zdCB7CgogIGNoYXIgX19idWZbNjRdOwoKICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19m
bGFncyA9IF9fZi5mbGFncygpOwogIGNoYXIqIF9faWJlZyA9IF9fd3JpdGVfaW50ZWdlcl9iYWNr
d2FyZCgoY2hhciopX19idWYrNjQsIF9fZmxhZ3MsIF9fdmFsKTsKICByZXR1cm4gX19wdXRfaW50
ZWdlcihfX2liZWcsIChjaGFyKilfX2J1Zis2NCwgX19zLCBfX2YsIF9fZmxhZ3MsIF9fZmlsbCk7
Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0
ZXIKbnVtX3B1dDxfQ2hhclQsIF9PdXRwdXRJdGVyPjo6ZG9fcHV0KF9PdXRwdXRJdGVyIF9fcywg
aW9zX2Jhc2UmIF9fZiwgX0NoYXJUIF9fZmlsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX192YWwpIGNvbnN0IHsKICBjaGFyIF9fYnVmWzY0XTsK
CgogIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19mLmZsYWdzKCk7CiAgY2hhciogX19p
YmVnID0gX193cml0ZV9pbnRlZ2VyX2JhY2t3YXJkKChjaGFyKilfX2J1Zis2NCwgX19mbGFncywg
X192YWwpOwogIHJldHVybiBfX3B1dF9pbnRlZ2VyKF9faWJlZywgKGNoYXIqKV9fYnVmKzY0LCBf
X3MsIF9fZiwgX19mbGFncywgX19maWxsKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xh
c3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyCm51bV9wdXQ8X0NoYXJULCBfT3V0cHV0SXRlcj46
OmRvX3B1dChfT3V0cHV0SXRlciBfX3MsIGlvc19iYXNlJiBfX2YsIF9DaGFyVCBfX2ZpbGwsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgX192YWwpIGNvbnN0IHsK
ICByZXR1cm4gX01fZG9fcHV0X2Zsb2F0KF9fcywgX19mLCBfX2ZpbGwsIF9fdmFsKTsKfQoKCnRl
bXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlcgpudW1f
cHV0PF9DaGFyVCwgX091dHB1dEl0ZXI+Ojpkb19wdXQoX091dHB1dEl0ZXIgX19zLCBpb3NfYmFz
ZSYgX19mLCBfQ2hhclQgX19maWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbG9uZyBkb3VibGUgX192YWwpIGNvbnN0IHsKICByZXR1cm4gX01fZG9fcHV0X2Zsb2F0KF9f
cywgX19mLCBfX2ZpbGwsIF9fdmFsKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFz
cyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIKbnVtX3B1dDxfQ2hhclQsIF9PdXRwdXRJdGVyPjo6
ZG9fcHV0KF9PdXRwdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9fZiwgX0NoYXJUIF9fZmlsbCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbG9uZyBfX3ZhbCkgY29uc3Qg
ewogIGNoYXIgX19idWZbNjRdOwoKCiAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2Yu
ZmxhZ3MoKTsKICBjaGFyKiBfX2liZWcgPSBfX3dyaXRlX2ludGVnZXJfYmFja3dhcmQoKGNoYXIq
KV9fYnVmKzY0LCBfX2ZsYWdzLCBfX3ZhbCk7CiAgcmV0dXJuIF9fcHV0X2ludGVnZXIoX19pYmVn
LCAoY2hhciopX19idWYrNjQsIF9fcywgX19mLCBfX2ZsYWdzLCBfX2ZpbGwpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIKbnVtX3B1dDxf
Q2hhclQsIF9PdXRwdXRJdGVyPjo6ZG9fcHV0KF9PdXRwdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9f
ZiwgX0NoYXJUIF9fZmlsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGxvbmcgbG9uZyBfX3ZhbCkgY29uc3QgewogIGNoYXIgX19idWZbNjRdOwoKCiAgaW9z
X2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2YuZmxhZ3MoKTsKICBjaGFyKiBfX2liZWcgPSBf
X3dyaXRlX2ludGVnZXJfYmFja3dhcmQoKGNoYXIqKV9fYnVmKzY0LCBfX2ZsYWdzLCBfX3ZhbCk7
CiAgcmV0dXJuIF9fcHV0X2ludGVnZXIoX19pYmVnLCAoY2hhciopX19idWYrNjQsIF9fcywgX19m
LCBfX2ZsYWdzLCBfX2ZpbGwpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9P
dXRwdXRJdGVyPgpfT3V0cHV0SXRlcgpudW1fcHV0PF9DaGFyVCwgX091dHB1dEl0ZXI+Ojpkb19w
dXQoX091dHB1dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19mLCBfQ2hhclQgX19maWxsLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogX192YWwpIGNvbnN0IHsK
CiAgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCByZWludGVycHJldF9jYXN0
PHVuc2lnbmVkIGxvbmcgbG9uZz4oX192YWwpKTsKCgoKfQp9CiMgMTc5ICIuLi9zdGxwb3J0L3N0
bC9fbnVtX3B1dC5oIiAyCiMgMjkgIi4uL3N0bHBvcnQvc3RsL19tb25ldGFyeS5jIiAyCgoKCiMg
MSAiLi4vc3RscG9ydC9zdGwvX251bV9nZXQuaCIgMQojIDQxICIuLi9zdGxwb3J0L3N0bC9fbnVt
X2dldC5oIgpuYW1lc3BhY2UgX1NUTCB7CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBj
bGFzcyBfSW5wdXRJdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KCmNsYXNzIG51
bV9nZXQ6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CnsKICBmcmllbmQgY2xhc3MgX0xvY2FsZTsKcHVi
bGljOgogIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICB0eXBlZGVmIF9JbnB1dEl0ZXIgaXRl
cl90eXBlOwoKICBleHBsaWNpdCBudW1fZ2V0KHNpemVfdCBfX3JlZnMgPSAwKTogbG9jYWxlOjpm
YWNldChfX3JlZnMpIHt9CgoKICBfSW5wdXRJdGVyIGdldChfSW5wdXRJdGVyIF9faW4sIF9JbnB1
dEl0ZXIgX19lbmQsIGlvc19iYXNlJiBfX3N0ciwKICAgICAgICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwgYm9vbCYgX192YWwpIGNvbnN0IHsKICAgIHJldHVybiBkb19nZXQoX19p
biwgX19lbmQsIF9fc3RyLCBfX2VyciwgX192YWwpOwogIH0KIyA3OSAiLi4vc3RscG9ydC9zdGwv
X251bV9nZXQuaCIKICBfSW5wdXRJdGVyIGdldChfSW5wdXRJdGVyIF9faW4sIF9JbnB1dEl0ZXIg
X19lbmQsIGlvc19iYXNlJiBfX3N0ciwKICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VyciwgbG9uZyYgX192YWwpIGNvbnN0IHsKICAgIHJldHVybiBkb19nZXQoX19pbiwgX19l
bmQsIF9fc3RyLCBfX2VyciwgX192YWwpOwogIH0KCiAgX0lucHV0SXRlciBnZXQoX0lucHV0SXRl
ciBfX2luLCBfSW5wdXRJdGVyIF9fZW5kLCBpb3NfYmFzZSYgX19zdHIsCiAgICAgICAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIHNob3J0JiBfX3ZhbCkgY29uc3Qg
ewogICAgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19zdHIsIF9fZXJyLCBfX3ZhbCk7CiAg
fQoKICBfSW5wdXRJdGVyIGdldChfSW5wdXRJdGVyIF9faW4sIF9JbnB1dEl0ZXIgX19lbmQsIGlv
c19iYXNlJiBfX3N0ciwKICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg
dW5zaWduZWQgaW50JiBfX3ZhbCkgY29uc3QgewogICAgcmV0dXJuIGRvX2dldChfX2luLCBfX2Vu
ZCwgX19zdHIsIF9fZXJyLCBfX3ZhbCk7CiAgfQoKICBfSW5wdXRJdGVyIGdldChfSW5wdXRJdGVy
IF9faW4sIF9JbnB1dEl0ZXIgX19lbmQsIGlvc19iYXNlJiBfX3N0ciwKICAgICAgICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYgX192YWwpIGNvbnN0IHsK
ICAgIHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9fc3RyLCBfX2VyciwgX192YWwpOwogIH0K
CgoKICBfSW5wdXRJdGVyIGdldChfSW5wdXRJdGVyIF9faW4sIF9JbnB1dEl0ZXIgX19lbmQsIGlv
c19iYXNlJiBfX3N0ciwKICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg
bG9uZyBsb25nJiBfX3ZhbCkgY29uc3QgewogICAgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwg
X19zdHIsIF9fZXJyLCBfX3ZhbCk7CiAgfQoKICBfSW5wdXRJdGVyIGdldChfSW5wdXRJdGVyIF9f
aW4sIF9JbnB1dEl0ZXIgX19lbmQsIGlvc19iYXNlJiBfX3N0ciwKICAgICAgICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyBsb25nJiBfX3ZhbCkgY29uc3Qg
ewogICAgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19zdHIsIF9fZXJyLCBfX3ZhbCk7CiAg
fQoKCgogIF9JbnB1dEl0ZXIgZ2V0KF9JbnB1dEl0ZXIgX19pbiwgX0lucHV0SXRlciBfX2VuZCwg
aW9zX2Jhc2UmIF9fc3RyLAogICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgZmxvYXQmIF9fdmFsKSBjb25zdCB7CiAgICByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBf
X3N0ciwgX19lcnIsIF9fdmFsKTsKICB9CgogIF9JbnB1dEl0ZXIgZ2V0KF9JbnB1dEl0ZXIgX19p
biwgX0lucHV0SXRlciBfX2VuZCwgaW9zX2Jhc2UmIF9fc3RyLAogICAgICAgICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBkb3VibGUmIF9fdmFsKSBjb25zdCB7CiAgICByZXR1cm4g
ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX3N0ciwgX19lcnIsIF9fdmFsKTsKICB9CgoKCiAgX0lucHV0
SXRlciBnZXQoX0lucHV0SXRlciBfX2luLCBfSW5wdXRJdGVyIF9fZW5kLCBpb3NfYmFzZSYgX19z
dHIsCiAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91Ymxl
JiBfX3ZhbCkgY29uc3QgewogICAgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19zdHIsIF9f
ZXJyLCBfX3ZhbCk7CiAgfQoKCiAgX0lucHV0SXRlciBnZXQoX0lucHV0SXRlciBfX2luLCBfSW5w
dXRJdGVyIF9fZW5kLCBpb3NfYmFzZSYgX19zdHIsCiAgICAgICAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIsIHZvaWQqJiBfX3ZhbCkgY29uc3QgewogICAgcmV0dXJuIGRvX2dldChf
X2luLCBfX2VuZCwgX19zdHIsIF9fZXJyLCBfX3ZhbCk7CiAgfQoKICBzdGF0aWMgbG9jYWxlOjpp
ZCBpZDsKCnByb3RlY3RlZDoKICB+bnVtX2dldCgpIHt9CgogIHR5cGVkZWYgc3RyaW5nIHN0cmlu
Z190eXBlOwogIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfQ3R5cGU7CiAgdHlwZWRlZiBudW1wdW5j
dDxfQ2hhclQ+IF9OdW1wdW5jdDsKCgogIHZpcnR1YWwgX0lucHV0SXRlciBkb19nZXQoX0lucHV0
SXRlciBfX2luLCBfSW5wdXRJdGVyIF9fZW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICBp
b3NfYmFzZSYgX19zdHIsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgYm9vbCYgX192YWwpIGNv
bnN0OwoKCiAgdmlydHVhbCBfSW5wdXRJdGVyIGRvX2dldChfSW5wdXRJdGVyIF9faW4sIF9JbnB1
dEl0ZXIgX19lbmQsIGlvc19iYXNlJiBfX3N0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nJiBfX3ZhbCkgY29uc3Q7CiAgdmlydHVhbCBf
SW5wdXRJdGVyIGRvX2dldChfSW5wdXRJdGVyIF9faW4sIF9JbnB1dEl0ZXIgX19lbmQsIGlvc19i
YXNlJiBfX3N0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192YWwpIGNvbnN0OwogIHZpcnR1YWwgX0lucHV0SXRl
ciBkb19nZXQoX0lucHV0SXRlciBfX2luLCBfSW5wdXRJdGVyIF9fZW5kLCBpb3NfYmFzZSYgX19z
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg
dW5zaWduZWQgaW50JiBfX3ZhbCkgY29uc3Q7CiAgdmlydHVhbCBfSW5wdXRJdGVyIGRvX2dldChf
SW5wdXRJdGVyIF9faW4sIF9JbnB1dEl0ZXIgX19lbmQsIGlvc19iYXNlJiBfX3N0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBs
b25nJiBfX3ZhbCkgY29uc3Q7CgoKCgoKCgogIHZpcnR1YWwgX0lucHV0SXRlciBkb19nZXQoX0lu
cHV0SXRlciBfX2luLCBfSW5wdXRJdGVyIF9fZW5kLCBpb3NfYmFzZSYgX19zdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192YWwp
IGNvbnN0OwogIHZpcnR1YWwgX0lucHV0SXRlciBkb19nZXQoX0lucHV0SXRlciBfX2luLCBfSW5w
dXRJdGVyIF9fZW5kLCBpb3NfYmFzZSYgX19zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZG91YmxlJiBfX3ZhbCkgY29uc3Q7CiAgdmlydHVh
bCBfSW5wdXRJdGVyIGRvX2dldChfSW5wdXRJdGVyIF9faW4sIF9JbnB1dEl0ZXIgX19lbmQsIGlv
c19iYXNlJiBfX3N0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiYgX19wKSBjb25zdDsK
CgogIHZpcnR1YWwgX0lucHV0SXRlciBkb19nZXQoX0lucHV0SXRlciBfX2luLCBfSW5wdXRJdGVy
IF9fZW5kLCBpb3NfYmFzZSYgX19zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19i
YXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdmFsKSBjb25zdDsKCgoKCiAgdmly
dHVhbCBfSW5wdXRJdGVyIGRvX2dldChfSW5wdXRJdGVyIF9faW4sIF9JbnB1dEl0ZXIgX19lbmQs
IGlvc19iYXNlJiBfX3N0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwgbG9uZyBsb25nJiBfX3ZhbCkgY29uc3Q7CiAgdmlydHVhbCBfSW5wdXRJ
dGVyIGRvX2dldChfSW5wdXRJdGVyIF9faW4sIF9JbnB1dEl0ZXIgX19lbmQsIGlvc19iYXNlJiBf
X3N0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LCB1bnNpZ25lZCBsb25nIGxvbmcmIF9fdmFsKSBjb25zdDsKCgp9OwojIDIwMCAiLi4vc3RscG9y
dC9zdGwvX251bV9nZXQuaCIKZXh0ZXJuIGJvb2wgX192YWxpZF9ncm91cGluZyhjb25zdCBjaGFy
KiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlciwgY2xhc3MgX0ludGVnZXI+CmJvb2wKX19nZXRfZGVjaW1hbF9pbnRlZ2Vy
KF9JbnB1dEl0ZXImIF9fZmlyc3QsIF9JbnB1dEl0ZXImIF9fbGFzdCwgX0ludGVnZXImIF9fdmFs
KTsKCmlubGluZSBib29sIF9fZ2V0X2ZkaWdpdChjaGFyJiBfX2MsIGNvbnN0IGNoYXIqKTsKaW5s
aW5lIGJvb2wgX19nZXRfZmRpZ2l0X29yX3NlcChjaGFyJiBfX2MsIGNoYXIgX19zZXAsIGNvbnN0
IGNoYXIgKik7Cgpib29sIF9fZ2V0X2ZkaWdpdCh3Y2hhcl90JiwgY29uc3Qgd2NoYXJfdCopOwpi
b29sIF9fZ2V0X2ZkaWdpdF9vcl9zZXAod2NoYXJfdCYsIHdjaGFyX3QsIGNvbnN0IHdjaGFyX3Qq
KTsKCgppbmxpbmUgdm9pZApfSW5pdGlhbGl6ZV9nZXRfZmxvYXQoY29uc3QgY3R5cGU8Y2hhcj4m
LAogICAgICAgICAgICAgICAgICAgICAgIGNoYXImIFBsdXMsIGNoYXImIE1pbnVzLAogICAgICAg
ICAgICAgICAgICAgICAgIGNoYXImIHBvd19lLCBjaGFyJiBwb3dfRSwKICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyKikKewogIFBsdXMgPSAnKyc7CiAgTWludXMgPSAnLSc7CiAgcG93X2UgPSAn
ZSc7CiAgcG93X0UgPSAnRSc7Cn0KCgp2b2lkIF9Jbml0aWFsaXplX2dldF9mbG9hdChjb25zdCBj
dHlwZTx3Y2hhcl90PiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
Y2hhcl90Jiwgd2NoYXJfdCYsIHdjaGFyX3QmLCB3Y2hhcl90Jiwgd2NoYXJfdCopOwoKdm9pZCBf
X3N0cmluZ190b19mbG9hdChjb25zdCBzdHJpbmcmLCBmbG9hdCYpOwp2b2lkIF9fc3RyaW5nX3Rv
X2Zsb2F0KGNvbnN0IHN0cmluZyYsIGRvdWJsZSYpOwoKdm9pZCBfX3N0cmluZ190b19mbG9hdChj
b25zdCBzdHJpbmcmLCBsb25nIGRvdWJsZSYpOwojIDI0OCAiLi4vc3RscG9ydC9zdGwvX251bV9n
ZXQuaCIKfQoKCiMgMSAiLi4vc3RscG9ydC9zdGwvX251bV9nZXQuYyIgMQojIDI3ICIuLi9zdGxw
b3J0L3N0bC9fbnVtX2dldC5jIgpuYW1lc3BhY2UgX1NUTCB7CgpleHRlcm4gY29uc3QgdW5zaWdu
ZWQgY2hhciBfX2RpZ2l0X3ZhbF90YWJsZVtdOwoKdGVtcGxhdGUgPCBjbGFzcyBfSW5wdXRJdGVy
LCBjbGFzcyBfSW50ZWdlciwgY2xhc3MgX0NoYXJUPgpfSW5wdXRJdGVyCl9NX2RvX2dldF9pbnRl
Z2VyKF9JbnB1dEl0ZXImLCBfSW5wdXRJdGVyJiwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0
ZSYsIF9JbnRlZ2VyJiwgX0NoYXJUKik7CgoKCmlubGluZSBib29sIF9fZ2V0X2ZkaWdpdChjaGFy
JiBfX2MsIGNvbnN0IGNoYXIqKQogIHsgcmV0dXJuIF9fYyA+PSAnMCcgJiYgX19jIDw9ICc5Jzsg
fQoKaW5saW5lIGJvb2wgX19nZXRfZmRpZ2l0X29yX3NlcChjaGFyJiBfX2MsIGNoYXIgX19zZXAs
IGNvbnN0IGNoYXIgKikKewogIGlmIChfX2MgPT0gX19zZXApIHsKICAgIF9fYyA9ICcsJyA7CiAg
ICByZXR1cm4gdHJ1ZSA7CiAgfSBlbHNlCiAgICByZXR1cm4gKCBfX2MgPj0gJzAnICYmIF9fYyA8
PSAnOScpOwp9CgppbmxpbmUgaW50Cl9fZ2V0X2RpZ2l0X2Zyb21fdGFibGUodW5zaWduZWQgX19p
bmRleCkKewogIHJldHVybiAoX19pbmRleCA+IDEyNyA/IDB4RkYgOiBfX2RpZ2l0X3ZhbF90YWJs
ZVtfX2luZGV4XSk7Cn0KCmV4dGVybiBjb25zdCBjaGFyIF9fbmFycm93X2F0b21zW107Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0NoYXJUPgppbnQKX01fZ2V0X2Jhc2Vfb3Jf
emVybyhfSW5wdXRJdGVyJiBfX2luLCBfSW5wdXRJdGVyJiBfX2VuZCwgaW9zX2Jhc2UmIF9fc3Ry
LCBfQ2hhclQqKQp7CiAgX0NoYXJUIF9fYXRvbXNbNV07CiAgY29uc3QgY3R5cGU8X0NoYXJUPiYg
X19jX3R5cGUgPSAqKGNvbnN0IGN0eXBlPF9DaGFyVD4qKV9fc3RyLl9NX2N0eXBlX2ZhY2V0KCk7
CgogIF9fY190eXBlLndpZGVuKF9fbmFycm93X2F0b21zLCBfX25hcnJvd19hdG9tcyArIDUsIF9f
YXRvbXMpOwoKICBib29sIF9fbmVnYXRpdmUgPSBmYWxzZTsKICBfQ2hhclQgX19jID0gKl9faW47
CgogIGlmIChfX2MgPT0gX19hdG9tc1sxXSApIHsKICAgIF9fbmVnYXRpdmUgPSB0cnVlOwogICAg
KytfX2luOwogIH0KICBlbHNlIGlmIChfX2MgPT0gX19hdG9tc1swXSApCiAgICArK19faW47CgoK
ICBpbnQgX19iYXNlOwogIGludCBfX3ZhbGlkX3plcm8gPSAwOwoKICBpb3NfYmFzZTo6Zm10Zmxh
Z3MgX19iYXNlZmllbGQgPSBfX3N0ci5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKCiAg
c3dpdGNoIChfX2Jhc2VmaWVsZCkgewogIGNhc2UgaW9zX2Jhc2U6Om9jdDoKICAgIF9fYmFzZSA9
IDg7CiAgICBicmVhazsKICBjYXNlIGlvc19iYXNlOjpkZWM6CiAgICBfX2Jhc2UgPSAxMDsKICAg
IGJyZWFrOwogIGNhc2UgaW9zX2Jhc2U6OmhleDoKICAgIF9fYmFzZSA9IDE2OwogICAgaWYgKF9f
aW4gIT0gX19lbmQgJiYgKl9faW4gPT0gX19hdG9tc1syXSApIHsKICAgICAgKytfX2luOwogICAg
ICBpZiAoX19pbiAhPSBfX2VuZCAmJgogICAgICAgICAgKCpfX2luID09IF9fYXRvbXNbM10gfHwg
Kl9faW4gPT0gX19hdG9tc1s0XSApKQogICAgICAgICsrX19pbjsKICAgICAgZWxzZQogICAgICAg
IF9fdmFsaWRfemVybyA9IDE7CiAgICB9CiAgICBicmVhazsKICBkZWZhdWx0OgogICAgaWYgKF9f
aW4gIT0gX19lbmQgJiYgKl9faW4gPT0gX19hdG9tc1syXSApIHsKICAgICAgKytfX2luOwogICAg
ICBpZiAoX19pbiAhPSBfX2VuZCAmJgogICAgICAgICAgKCpfX2luID09IF9fYXRvbXNbM10gfHwg
Kl9faW4gPT0gX19hdG9tc1s0XSApKSB7CiAgICAgICAgKytfX2luOwogICAgICAgIF9fYmFzZSA9
IDE2OwogICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfX2Jhc2UgPSA4Owog
ICAgICAgICAgX192YWxpZF96ZXJvID0gMTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlCiAgICAg
IF9fYmFzZSA9IDEwOwogICAgYnJlYWs7CiAgfQogIHJldHVybiAoX19iYXNlIDw8IDIpIHwgKChp
bnQpX19uZWdhdGl2ZSA8PCAxKSB8IF9fdmFsaWRfemVybzsKfQoKCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyLCBjbGFzcyBfSW50ZWdlcj4KYm9vbApfX2dldF9pbnRlZ2VyKF9JbnB1dEl0ZXIm
IF9fZmlyc3QsIF9JbnB1dEl0ZXImIF9fbGFzdCwKICAgICAgICAgICAgICBpbnQgX19iYXNlLCBf
SW50ZWdlciYgX192YWwsCiAgICAgICAgICAgICAgaW50IF9fZ290LCBib29sIF9faXNfbmVnYXRp
dmUsIGNoYXIgX19zZXBhcmF0b3IsIGNvbnN0IHN0cmluZyYgX19ncm91cGluZywgY29uc3QgX190
cnVlX3R5cGUmKQp7CiAgYm9vbCBfX292ZXJmbG93ID0gZmFsc2U7CiAgX0ludGVnZXIgX19yZXN1
bHQgPSAwOwogIGJvb2wgX19pc19ncm91cCA9ICFfX2dyb3VwaW5nLmVtcHR5KCk7CiAgY2hhciBf
X2dyb3VwX3NpemVzWzY0XTsKICBpbnQgX19jdXJyZW50X2dyb3VwX3NpemUgPSAwOwogIGNoYXIq
IF9fZ3JvdXBfc2l6ZXNfZW5kID0gX19ncm91cF9zaXplczsKCiAgX0ludGVnZXIgX19vdmVyX2Jh
c2UgPSAobnVtZXJpY19saW1pdHM8X0ludGVnZXI+OjptaW4pKCkgLyBzdGF0aWNfY2FzdDxfSW50
ZWdlcj4oX19iYXNlKTsKCiAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgOyArK19fZmlyc3Qp
IHsKCiAgICAgY29uc3QgY2hhciBfX2MgPSAqX19maXJzdDsKCiAgICAgaWYgKF9faXNfZ3JvdXAg
JiYgX19jID09IF9fc2VwYXJhdG9yKSB7CiAgICAgICAqX19ncm91cF9zaXplc19lbmQrKyA9IF9f
Y3VycmVudF9ncm91cF9zaXplOwogICAgICAgX19jdXJyZW50X2dyb3VwX3NpemUgPSAwOwogICAg
ICAgY29udGludWU7CiAgICAgfQoKICAgICBpbnQgX19uID0gX19nZXRfZGlnaXRfZnJvbV90YWJs
ZShfX2MpOwoKICAgICBpZiAoX19uID49IF9fYmFzZSkKICAgICAgIGJyZWFrOwoKICAgICArK19f
Z290OwogICAgICsrX19jdXJyZW50X2dyb3VwX3NpemU7CgogICAgIGlmIChfX3Jlc3VsdCA8IF9f
b3Zlcl9iYXNlKQogICAgICAgX19vdmVyZmxvdyA9IHRydWU7CiAgICAgZWxzZSB7CiAgICAgICBf
SW50ZWdlciBfX25leHQgPSBzdGF0aWNfY2FzdDxfSW50ZWdlcj4oX19iYXNlICogX19yZXN1bHQg
LSBfX24pOwogICAgICAgaWYgKF9fcmVzdWx0ICE9IDApCiAgICAgICAgIF9fb3ZlcmZsb3cgPSBf
X292ZXJmbG93IHx8IF9fbmV4dCA+PSBfX3Jlc3VsdDsKICAgICAgIF9fcmVzdWx0ID0gX19uZXh0
OwogICAgIH0KICAgfQoKICAgaWYgKF9faXNfZ3JvdXAgJiYgX19ncm91cF9zaXplc19lbmQgIT0g
X19ncm91cF9zaXplcykgewogICAgICpfX2dyb3VwX3NpemVzX2VuZCsrID0gX19jdXJyZW50X2dy
b3VwX3NpemU7CiAgIH0KCgogICBpZiAoX19nb3QgPiAwKSB7CiAgICAgICBfX3ZhbCA9IF9fb3Zl
cmZsb3cKICAgICAgICAgPyBfX2lzX25lZ2F0aXZlID8gKG51bWVyaWNfbGltaXRzPF9JbnRlZ2Vy
Pjo6bWluKSgpCiAgICAgICAgIDogKG51bWVyaWNfbGltaXRzPF9JbnRlZ2VyPjo6bWF4KSgpCiAg
ICAgICAgIDogKF9faXNfbmVnYXRpdmUgPyBfX3Jlc3VsdCA6IHN0YXRpY19jYXN0PF9JbnRlZ2Vy
PigtX19yZXN1bHQpKTsKICAgfQoKICByZXR1cm4gKChfX2dvdCA+IDApICYmICFfX292ZXJmbG93
KSAmJiAoX19pc19ncm91cCA9PSAwIHx8IF9fdmFsaWRfZ3JvdXBpbmcoX19ncm91cF9zaXplcywg
X19ncm91cF9zaXplc19lbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmRhdGEoKSwg
X19ncm91cGluZy5kYXRhKCkrIF9fZ3JvdXBpbmcuc2l6ZSgpKSkgOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlciwgY2xhc3MgX0ludGVnZXI+CmJvb2wKX19nZXRfaW50ZWdlcihfSW5wdXRJ
dGVyJiBfX2ZpcnN0LCBfSW5wdXRJdGVyJiBfX2xhc3QsCiAgICAgICAgICAgICAgaW50IF9fYmFz
ZSwgX0ludGVnZXImIF9fdmFsLAogICAgICAgICAgICAgIGludCBfX2dvdCwgYm9vbCBfX2lzX25l
Z2F0aXZlLCBjaGFyIF9fc2VwYXJhdG9yLCBjb25zdCBzdHJpbmcmIF9fZ3JvdXBpbmcsIGNvbnN0
IF9fZmFsc2VfdHlwZSYpCnsKICBib29sIF9fb3ZlcmZsb3cgPSBmYWxzZTsKICBfSW50ZWdlciBf
X3Jlc3VsdCA9IDA7CiAgYm9vbCBfX2lzX2dyb3VwID0gIV9fZ3JvdXBpbmcuZW1wdHkoKTsKICBj
aGFyIF9fZ3JvdXBfc2l6ZXNbNjRdOwogIGludCBfX2N1cnJlbnRfZ3JvdXBfc2l6ZSA9IDA7CiAg
Y2hhciogX19ncm91cF9zaXplc19lbmQgPSBfX2dyb3VwX3NpemVzOwoKICBfSW50ZWdlciBfX292
ZXJfYmFzZSA9IChudW1lcmljX2xpbWl0czxfSW50ZWdlcj46Om1heCkoKSAvIHN0YXRpY19jYXN0
PF9JbnRlZ2VyPihfX2Jhc2UpOwoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0IDsgKytfX2Zp
cnN0KSB7CgogICAgY29uc3QgY2hhciBfX2MgPSAqX19maXJzdDsKCiAgICBpZiAoX19pc19ncm91
cCAmJiBfX2MgPT0gX19zZXBhcmF0b3IpIHsKICAgICAgKl9fZ3JvdXBfc2l6ZXNfZW5kKysgPSBf
X2N1cnJlbnRfZ3JvdXBfc2l6ZTsKICAgICAgX19jdXJyZW50X2dyb3VwX3NpemUgPSAwOwogICAg
ICBjb250aW51ZTsKICAgIH0KCiAgICBpbnQgX19uID0gX19nZXRfZGlnaXRfZnJvbV90YWJsZShf
X2MpOwoKICAgIGlmIChfX24gPj0gX19iYXNlKQogICAgICBicmVhazsKCiAgICArK19fZ290Owog
ICAgKytfX2N1cnJlbnRfZ3JvdXBfc2l6ZTsKCiAgICBpZiAoX19yZXN1bHQgPiBfX292ZXJfYmFz
ZSkKICAgICAgX19vdmVyZmxvdyA9IHRydWU7CiAgICBlbHNlIHsKICAgICAgX0ludGVnZXIgX19u
ZXh0ID0gc3RhdGljX2Nhc3Q8X0ludGVnZXI+KF9fYmFzZSAqIF9fcmVzdWx0ICsgX19uKTsKICAg
ICAgICBpZiAoX19yZXN1bHQgIT0gMCkKICAgICAgICAgIF9fb3ZlcmZsb3cgPSBfX292ZXJmbG93
IHx8IF9fbmV4dCA8PSBfX3Jlc3VsdDsKICAgICAgICBfX3Jlc3VsdCA9IF9fbmV4dDsKICAgICAg
fQogIH0KCiAgaWYgKF9faXNfZ3JvdXAgJiYgX19ncm91cF9zaXplc19lbmQgIT0gX19ncm91cF9z
aXplcykgewogICAgICAqX19ncm91cF9zaXplc19lbmQrKyA9IF9fY3VycmVudF9ncm91cF9zaXpl
OwogIH0KCgogIGlmIChfX2dvdCA+IDApIHsKICAgICAgX192YWwgPSBfX292ZXJmbG93CiAgICAg
ICAgPyAobnVtZXJpY19saW1pdHM8X0ludGVnZXI+OjptYXgpKCkKICAgICAgICA6IChfX2lzX25l
Z2F0aXZlID8gc3RhdGljX2Nhc3Q8X0ludGVnZXI+KC1fX3Jlc3VsdCkgOiBfX3Jlc3VsdCk7CiAg
fQoKICByZXR1cm4gKChfX2dvdCA+IDApICYmICFfX292ZXJmbG93KSAmJgogICAgKF9faXNfZ3Jv
dXAgPT0gMCB8fCBfX3ZhbGlkX2dyb3VwaW5nKF9fZ3JvdXBfc2l6ZXMsIF9fZ3JvdXBfc2l6ZXNf
ZW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBpbmcu
ZGF0YSgpLCBfX2dyb3VwaW5nLmRhdGEoKSsgX19ncm91cGluZy5zaXplKCkpKSA7Cn0KCgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ludGVnZXI+CmJvb2wKX19nZXRfZGVjaW1h
bF9pbnRlZ2VyKF9JbnB1dEl0ZXImIF9fZmlyc3QsIF9JbnB1dEl0ZXImIF9fbGFzdCwgX0ludGVn
ZXImIF9fdmFsKQp7CiAgc3RyaW5nIF9fZ3JwOwogIHJldHVybiBfX2dldF9pbnRlZ2VyKF9fZmly
c3QsIF9fbGFzdCwgMTAsIF9fdmFsLCAwLCBmYWxzZSwgJyAnLCBfX2dycCwgX19mYWxzZV90eXBl
KCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ludGVnZXIsIGNsYXNz
IF9DaGFyVD4KX0lucHV0SXRlcgpfTV9kb19nZXRfaW50ZWdlcihfSW5wdXRJdGVyJiBfX2luLCBf
SW5wdXRJdGVyJiBfX2VuZCwgaW9zX2Jhc2UmIF9fc3RyLAogICAgICAgICAgICAgICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSYgX19lcnIsIF9JbnRlZ2VyJiBfX3ZhbCwgX0NoYXJUKiBfX3BjKQp7CgoK
CgogIHR5cGVkZWYgdHlwZW5hbWUgX19ib29sMnR5cGU8bnVtZXJpY19saW1pdHM8X0ludGVnZXI+
Ojppc19zaWduZWQ+OjpfUmV0IF9Jc1NpZ25lZDsKCgogIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4m
IF9fbnVtcHVuY3QgPSAqKGNvbnN0IG51bXB1bmN0PF9DaGFyVD4qKV9fc3RyLl9NX251bXB1bmN0
X2ZhY2V0KCk7CiAgY29uc3Qgc3RyaW5nJiBfX2dyb3VwaW5nID0gX19zdHIuX01fZ3JvdXBpbmco
KTsKCiAgY29uc3QgaW50IF9fYmFzZV9vcl96ZXJvID0gX01fZ2V0X2Jhc2Vfb3JfemVybyhfX2lu
LCBfX2VuZCwgX19zdHIsIF9fcGMpOwogIGludCBfX2dvdCA9IF9fYmFzZV9vcl96ZXJvICYgMTsK
CiAgYm9vbCBfX3Jlc3VsdDsKCiAgaWYgKF9faW4gPT0gX19lbmQpIHsKCiAgICBpZiAoX19nb3Qg
PiAwKSB7CiAgICAgIF9fdmFsID0gMDsKICAgICAgX19yZXN1bHQgPSB0cnVlOwogICAgfQogICAg
ZWxzZQogICAgICBfX3Jlc3VsdCA9IGZhbHNlOwogIH0gZWxzZSB7CgogICAgY29uc3QgYm9vbCBf
X25lZ2F0aXZlID0gX19iYXNlX29yX3plcm8gJiAyOwogICAgY29uc3QgaW50IF9fYmFzZSA9IF9f
YmFzZV9vcl96ZXJvID4+IDI7CgoKCgoKCgogICAgX19yZXN1bHQgPSBfX2dldF9pbnRlZ2VyKF9f
aW4sIF9fZW5kLCBfX2Jhc2UsIF9fdmFsLCBfX2dvdCwgX19uZWdhdGl2ZSwgX19udW1wdW5jdC50
aG91c2FuZHNfc2VwKCksIF9fZ3JvdXBpbmcsIF9Jc1NpZ25lZCgpKTsKCiAgfQoKICBfX2VyciA9
IHN0YXRpY19jYXN0PGlvc19iYXNlOjppb3N0YXRlPihfX3Jlc3VsdCA/IGlvc19iYXNlOjpnb29k
Yml0IDogaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICBpZiAoX19pbiA9PSBfX2VuZCkKICAgIF9fZXJy
IHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgcmV0dXJuIF9faW47Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX0NoYXJUPgpfSW5wdXRJdGVyCl9fY29weV9zaWduKF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIHN0cmluZyYgX192LAogICAgICAgICAgICBf
Q2hhclQgX19wbHVzLCBfQ2hhclQgX19taW51cykgewogICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0
KSB7CiAgICBfQ2hhclQgX19jID0gKl9fZmlyc3Q7CiAgICBpZiAoX19jID09IF9fcGx1cykKICAg
ICAgKytfX2ZpcnN0OwogICAgZWxzZSBpZiAoX19jID09IF9fbWludXMpIHsKICAgICAgX192LnB1
c2hfYmFjaygnLScpOwogICAgICArK19fZmlyc3Q7CiAgICB9CiAgfQogIHJldHVybiBfX2ZpcnN0
Owp9CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9DaGFyVD4KYm9vbApfX2Nv
cHlfZGlnaXRzKF9JbnB1dEl0ZXImIF9fZmlyc3QsIF9JbnB1dEl0ZXImIF9fbGFzdCwKICAgICAg
ICAgICAgICBzdHJpbmcmIF9fdiwgY29uc3QgX0NoYXJUKiBfX2RpZ2l0cykKewogIGJvb2wgX19v
ayA9IGZhbHNlOwoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpIHsKICAg
IF9DaGFyVCBfX2MgPSAqX19maXJzdDsKICAgIGlmIChfX2dldF9mZGlnaXQoX19jLCBfX2RpZ2l0
cykpIHsKICAgICAgX192LnB1c2hfYmFjaygoY2hhcilfX2MpOwogICAgICBfX29rID0gdHJ1ZTsK
ICAgIH0KICAgIGVsc2UKICAgICAgYnJlYWs7CiAgfQogIHJldHVybiBfX29rOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0NoYXJUPgpib29sCl9fY29weV9ncm91cGVkX2Rp
Z2l0cyhfSW5wdXRJdGVyJiBfX2ZpcnN0LCBfSW5wdXRJdGVyJiBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICBzdHJpbmcmIF9fdiwgY29uc3QgX0NoYXJUICogX19kaWdpdHMsCiAgICAgICAg
ICAgICAgICAgICAgICBfQ2hhclQgX19zZXAsIGNvbnN0IHN0cmluZyYgX19ncm91cGluZywKICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wmIF9fZ3JvdXBpbmdfb2spCnsKICBib29sIF9fb2sgPSBm
YWxzZTsKICBjaGFyIF9fZ3JvdXBfc2l6ZXNbNjRdOwogIGNoYXIqX19ncm91cF9zaXplc19lbmQg
PSBfX2dyb3VwX3NpemVzOwogIGNoYXIgX19jdXJyZW50X2dyb3VwX3NpemUgPSAwOwoKICBmb3Ig
KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpIHsKICAgIF9DaGFyVCBfX2MgPSAqX19m
aXJzdDsKICAgIGJvb2wgX190bXAgPSBfX2dldF9mZGlnaXRfb3Jfc2VwKF9fYywgX19zZXAsIF9f
ZGlnaXRzKTsKICAgIGlmIChfX3RtcCkgewogICAgICBpZiAoX19jID09ICcsJykgewogICAgICAg
ICpfX2dyb3VwX3NpemVzX2VuZCsrID0gX19jdXJyZW50X2dyb3VwX3NpemU7CiAgICAgICAgX19j
dXJyZW50X2dyb3VwX3NpemUgPSAwOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fb2sg
PSB0cnVlOwogICAgICAgIF9fdi5wdXNoX2JhY2soKGNoYXIpX19jKTsKICAgICAgICArK19fY3Vy
cmVudF9ncm91cF9zaXplOwogICAgICB9CiAgICB9CiAgICBlbHNlCiAgICAgIGJyZWFrOwogIH0K
CiAgaWYgKF9fZ3JvdXBfc2l6ZXNfZW5kICE9IF9fZ3JvdXBfc2l6ZXMpCiAgICAqX19ncm91cF9z
aXplc19lbmQrKyA9IF9fY3VycmVudF9ncm91cF9zaXplOwogIF9fZ3JvdXBpbmdfb2sgPSBfX3Zh
bGlkX2dyb3VwaW5nKF9fZ3JvdXBfc2l6ZXMsIF9fZ3JvdXBfc2l6ZXNfZW5kLCBfX2dyb3VwaW5n
LmRhdGEoKSwgX19ncm91cGluZy5kYXRhKCkgKyBfX2dyb3VwaW5nLnNpemUoKSk7CiAgcmV0dXJu
IF9fb2s7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0NoYXJUPgpib29s
Cl9NX3JlYWRfZmxvYXQoc3RyaW5nJiBfX2J1ZiwgX0lucHV0SXRlciYgX19pbiwgX0lucHV0SXRl
ciYgX19lbmQsIGlvc19iYXNlJiBfX3MsIF9DaGFyVCopCnsKCgoKICBib29sIF9fZGlnaXRzX2Jl
Zm9yZV9kb3QgOwogIGJvb2wgX19kaWdpdHNfYWZ0ZXJfZG90ID0gZmFsc2U7CiAgYm9vbCBfX29r
OwoKICBib29sIF9fZ3JvdXBpbmdfb2sgPSB0cnVlOwoKICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBf
X2N0ID0gKihjb25zdCBjdHlwZTxfQ2hhclQ+KilfX3MuX01fY3R5cGVfZmFjZXQoKTsKICBjb25z
dCBudW1wdW5jdDxfQ2hhclQ+JiBfX251bXB1bmN0ID0gKihjb25zdCBudW1wdW5jdDxfQ2hhclQ+
KilfX3MuX01fbnVtcHVuY3RfZmFjZXQoKTsKICBjb25zdCBzdHJpbmcmIF9fZ3JvdXBpbmcgPSBf
X3MuX01fZ3JvdXBpbmcoKTsKCiAgX0NoYXJUIF9fZG90ID0gX19udW1wdW5jdC5kZWNpbWFsX3Bv
aW50KCk7CiAgX0NoYXJUIF9fc2VwID0gX19udW1wdW5jdC50aG91c2FuZHNfc2VwKCk7CgogIF9D
aGFyVCBfX2RpZ2l0c1sxMF07CiAgX0NoYXJUIF9fcGx1czsKICBfQ2hhclQgX19taW51czsKCiAg
X0NoYXJUIF9fcG93X2U7CiAgX0NoYXJUIF9fcG93X0U7CgogIF9Jbml0aWFsaXplX2dldF9mbG9h
dChfX2N0LCBfX3BsdXMsIF9fbWludXMsIF9fcG93X2UsIF9fcG93X0UsIF9fZGlnaXRzKTsKCgog
IF9faW4gPSBfX2NvcHlfc2lnbihfX2luLCBfX2VuZCwgX19idWYsIF9fcGx1cywgX19taW51cyk7
CgoKICBpZiAoX19ncm91cGluZy5zaXplKCkgIT0gMCkKICAgIF9fZGlnaXRzX2JlZm9yZV9kb3Qg
PSBfX2NvcHlfZ3JvdXBlZF9kaWdpdHMoX19pbiwgX19lbmQsIF9fYnVmLCBfX2RpZ2l0cywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zZXAsIF9fZ3Jv
dXBpbmcsIF9fZ3JvdXBpbmdfb2spOwogIGVsc2UKICAgIF9fZGlnaXRzX2JlZm9yZV9kb3QgPSBf
X2NvcHlfZGlnaXRzKF9faW4sIF9fZW5kLCBfX2J1ZiwgX19kaWdpdHMpOwoKCiAgaWYgKF9faW4g
IT0gX19lbmQgJiYgKl9faW4gPT0gX19kb3QpIHsKICAgIF9fYnVmLnB1c2hfYmFjaygnLicpOwog
ICAgKytfX2luOwogICAgX19kaWdpdHNfYWZ0ZXJfZG90ID0gX19jb3B5X2RpZ2l0cyhfX2luLCBf
X2VuZCwgX19idWYsIF9fZGlnaXRzKTsKICB9CgoKICBfX29rID0gX19kaWdpdHNfYmVmb3JlX2Rv
dCB8fCBfX2RpZ2l0c19hZnRlcl9kb3Q7CgoKICBpZiAoX19vayAmJiBfX2luICE9IF9fZW5kICYm
ICgqX19pbiA9PSBfX3Bvd19lIHx8ICpfX2luID09IF9fcG93X0UpKSB7CiAgICBfX2J1Zi5wdXNo
X2JhY2soJ2UnKTsKICAgICsrX19pbjsKICAgIF9faW4gPSBfX2NvcHlfc2lnbihfX2luLCBfX2Vu
ZCwgX19idWYsIF9fcGx1cywgX19taW51cyk7CiAgICBfX29rID0gX19jb3B5X2RpZ2l0cyhfX2lu
LCBfX2VuZCwgX19idWYsIF9fZGlnaXRzKTsKCgogIH0KCiAgcmV0dXJuIF9fb2s7Cn0KCgoKCgoK
dGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0lucHV0SXRlcmF0b3I+CmxvY2FsZTo6aWQg
bnVtX2dldDxfQ2hhclQsIF9JbnB1dEl0ZXJhdG9yPjo6aWQ7CiMgNDYzICIuLi9zdGxwb3J0L3N0
bC9fbnVtX2dldC5jIgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfSW5wdXRJdGVyPgpf
SW5wdXRJdGVyCm51bV9nZXQ8X0NoYXJULCBfSW5wdXRJdGVyPjo6ZG9fZ2V0KF9JbnB1dEl0ZXIg
X19pbiwgX0lucHV0SXRlciBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW9zX2Jhc2UmIF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBib29sJiBfX3gpIGNvbnN0CnsKICBpZiAoX19zLmZsYWdz
KCkgJiBpb3NfYmFzZTo6Ym9vbGFscGhhKSB7CiAgICBsb2NhbGUgX19sb2MgPSBfX3MuZ2V0bG9j
KCk7CiAgICBjb25zdCBfTnVtcHVuY3QmIF9fbnAgPSAqKGNvbnN0IF9OdW1wdW5jdCopX19zLl9N
X251bXB1bmN0X2ZhY2V0KCk7CgoKCiAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJUPiBfX3Ry
dWVuYW1lID0gX19ucC50cnVlbmFtZSgpOwogICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVD4g
X19mYWxzZW5hbWUgPSBfX25wLmZhbHNlbmFtZSgpOwogICAgYm9vbCBfX3RydWVfb2sgPSB0cnVl
OwogICAgYm9vbCBfX2ZhbHNlX29rID0gdHJ1ZTsKCiAgICBzaXplX3QgX19uID0gMDsKICAgIGZv
ciAoIDsgX19pbiAhPSBfX2VuZDsgKytfX2luKSB7CiAgICAgIF9DaGFyVCBfX2MgPSAqX19pbjsK
ICAgICAgX190cnVlX29rID0gX190cnVlX29rICYmIChfX2MgPT0gX190cnVlbmFtZVtfX25dKTsK
ICAgICAgX19mYWxzZV9vayA9IF9fZmFsc2Vfb2sgJiYgKF9fYyA9PSBfX2ZhbHNlbmFtZVtfX25d
KTsKICAgICAgKytfX247CgogICAgICBpZiAoKCFfX3RydWVfb2sgJiYgIV9fZmFsc2Vfb2spIHx8
CiAgICAgICAgICAoX190cnVlX29rICYmIF9fbiA+PSBfX3RydWVuYW1lLnNpemUoKSkgfHwKICAg
ICAgICAgIChfX2ZhbHNlX29rICYmIF9fbiA+PSBfX2ZhbHNlbmFtZS5zaXplKCkpKSB7CiAgICAg
ICAgKytfX2luOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBpZiAoX190cnVlX29r
ICYmIF9fbiA8IF9fdHJ1ZW5hbWUuc2l6ZSgpKSBfX3RydWVfb2sgPSBmYWxzZTsKICAgIGlmIChf
X2ZhbHNlX29rICYmIF9fbiA8IF9fZmFsc2VuYW1lLnNpemUoKSkgX19mYWxzZV9vayA9IGZhbHNl
OwoKICAgIGlmIChfX3RydWVfb2sgfHwgX19mYWxzZV9vaykgewogICAgICBfX2VyciA9IGlvc19i
YXNlOjpnb29kYml0OwogICAgICBfX3ggPSBfX3RydWVfb2s7CiAgICB9CiAgICBlbHNlCiAgICAg
IF9fZXJyID0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgaWYgKF9faW4gPT0gX19lbmQpCiAgICAg
IF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CgogICAgcmV0dXJuIF9faW47CiAgfQoKICBlbHNl
IHsKICAgIGxvbmcgX19seDsKICAgIF9JbnB1dEl0ZXIgX190bXAgPSB0aGlzLT5kb19nZXQoX19p
biwgX19lbmQsIF9fcywgX19lcnIsIF9fbHgpOwogICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6
ZmFpbGJpdCkpIHsKICAgICAgaWYgKF9fbHggPT0gMCkKICAgICAgICBfX3ggPSBmYWxzZTsKICAg
ICAgZWxzZSBpZiAoX19seCA9PSAxKQogICAgICAgIF9feCA9IHRydWU7CiAgICAgIGVsc2UKICAg
ICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgIH0KICAgIHJldHVybiBfX3RtcDsK
ICB9Cn0KIyA1NDQgIi4uL3N0bHBvcnQvc3RsL19udW1fZ2V0LmMiCnRlbXBsYXRlIDxjbGFzcyBf
Q2hhclQsIGNsYXNzIF9JbnB1dEl0ZXI+Cl9JbnB1dEl0ZXIKbnVtX2dldDxfQ2hhclQsIF9JbnB1
dEl0ZXI+Ojpkb19nZXQoX0lucHV0SXRlciBfX2luLCBfSW5wdXRJdGVyIF9fZW5kLCBpb3NfYmFz
ZSYgX19zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwgbG9uZyYgX192YWwpIGNvbnN0IHsKICByZXR1cm4gX01fZG9fZ2V0X2lu
dGVnZXIoX19pbiwgX19lbmQsIF9fc3RyLCBfX2VyciwgX192YWwsIChfQ2hhclQqKTAgKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0lucHV0SXRlcj4KX0lucHV0SXRlcgpudW1f
Z2V0PF9DaGFyVCwgX0lucHV0SXRlcj46OmRvX2dldChfSW5wdXRJdGVyIF9faW4sIF9JbnB1dEl0
ZXIgX19lbmQsIGlvc19iYXNlJiBfX3N0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCYgX192YWwpIGNvbnN0IHsKICByZXR1cm4gX01fZG9f
Z2V0X2ludGVnZXIoX19pbiwgX19lbmQsIF9fc3RyLCBfX2VyciwgX192YWwsIChfQ2hhclQqKTAg
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0lucHV0SXRlcj4KX0lucHV0SXRl
cgpudW1fZ2V0PF9DaGFyVCwgX0lucHV0SXRlcj46OmRvX2dldChfSW5wdXRJdGVyIF9faW4sIF9J
bnB1dEl0ZXIgX19lbmQsIGlvc19iYXNlJiBfX3N0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQmIF9fdmFsKSBjb25zdCB7CiAgcmV0dXJuIF9N
X2RvX2dldF9pbnRlZ2VyKF9faW4sIF9fZW5kLCBfX3N0ciwgX19lcnIsIF9fdmFsLCAoX0NoYXJU
KikwICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9JbnB1dEl0ZXI+Cl9JbnB1
dEl0ZXIKbnVtX2dldDxfQ2hhclQsIF9JbnB1dEl0ZXI+Ojpkb19nZXQoX0lucHV0SXRlciBfX2lu
LCBfSW5wdXRJdGVyIF9fZW5kLCBpb3NfYmFzZSYgX19zdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyYgX192YWwpIGNvbnN0IHsKICByZXR1
cm4gX01fZG9fZ2V0X2ludGVnZXIoX19pbiwgX19lbmQsIF9fc3RyLCBfX2VyciwgX192YWwsIChf
Q2hhclQqKTAgKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9JbnB1dEl0ZXI+
Cl9JbnB1dEl0ZXIKbnVtX2dldDxfQ2hhclQsIF9JbnB1dEl0ZXI+Ojpkb19nZXQoX0lucHV0SXRl
ciBfX2luLCBfSW5wdXRJdGVyIF9fZW5kLCBpb3NfYmFzZSYgX19zdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQmIF9fdmFsKSBjb25zdCB7CiAgc3RyaW5n
IF9fYnVmIDsKICBib29sIF9fb2sgPSBfTV9yZWFkX2Zsb2F0KF9fYnVmLCBfX2luLCBfX2VuZCwg
X19zdHIsIChfQ2hhclQqKTAgKTsKICBfX3N0cmluZ190b19mbG9hdChfX2J1ZiwgX192YWwpOwog
IF9fZXJyID0gc3RhdGljX2Nhc3Q8aW9zX2Jhc2U6Omlvc3RhdGU+KF9fb2sgPyBpb3NfYmFzZTo6
Z29vZGJpdCA6IGlvc19iYXNlOjpmYWlsYml0KTsKICBpZiAoX19pbiA9PSBfX2VuZCkKICAgIF9f
ZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgcmV0dXJuIF9faW47Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfQ2hhclQsIGNsYXNzIF9JbnB1dEl0ZXI+Cl9JbnB1dEl0ZXIKbnVtX2dldDxfQ2hhclQsIF9J
bnB1dEl0ZXI+Ojpkb19nZXQoX0lucHV0SXRlciBfX2luLCBfSW5wdXRJdGVyIF9fZW5kLCBpb3Nf
YmFzZSYgX19zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91
YmxlJiBfX3ZhbCkgY29uc3QgewogIHN0cmluZyBfX2J1ZiA7CiAgYm9vbCBfX29rID0gX01fcmVh
ZF9mbG9hdChfX2J1ZiwgX19pbiwgX19lbmQsIF9fc3RyLCAoX0NoYXJUKikwICk7CiAgX19zdHJp
bmdfdG9fZmxvYXQoX19idWYsIF9fdmFsKTsKICBfX2VyciA9IHN0YXRpY19jYXN0PGlvc19iYXNl
Ojppb3N0YXRlPihfX29rID8gaW9zX2Jhc2U6Omdvb2RiaXQgOiBpb3NfYmFzZTo6ZmFpbGJpdCk7
CiAgaWYgKF9faW4gPT0gX19lbmQpCiAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogIHJl
dHVybiBfX2luOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0lucHV0SXRlcj4K
X0lucHV0SXRlcgpudW1fZ2V0PF9DaGFyVCwgX0lucHV0SXRlcj46OmRvX2dldChfSW5wdXRJdGVy
IF9faW4sIF9JbnB1dEl0ZXIgX19lbmQsIGlvc19iYXNlJiBfX3N0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRvdWJsZSYgX192YWwpIGNvbnN0IHsKICBz
dHJpbmcgX19idWYgOwogIGJvb2wgX19vayA9IF9NX3JlYWRfZmxvYXQoX19idWYsIF9faW4sIF9f
ZW5kLCBfX3N0ciwgKF9DaGFyVCopMCApOwogIF9fc3RyaW5nX3RvX2Zsb2F0KF9fYnVmLCBfX3Zh
bCk7CiAgX19lcnIgPSBzdGF0aWNfY2FzdDxpb3NfYmFzZTo6aW9zdGF0ZT4oX19vayA/IGlvc19i
YXNlOjpnb29kYml0IDogaW9zX2Jhc2U6OmZhaWxiaXQpOwogIGlmIChfX2luID09IF9fZW5kKQog
ICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICByZXR1cm4gX19pbjsKfQoKCnRlbXBsYXRl
IDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9JbnB1dEl0ZXI+Cl9JbnB1dEl0ZXIKbnVtX2dldDxfQ2hh
clQsIF9JbnB1dEl0ZXI+Ojpkb19nZXQoX0lucHV0SXRlciBfX2luLCBfSW5wdXRJdGVyIF9fZW5k
LCBpb3NfYmFzZSYgX19zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZComIF9fcCkgY29u
c3QgewogICAgcHRyZGlmZl90IF9fdmFsOwogICAgaXRlcl90eXBlIF9fdG1wID0gX01fZG9fZ2V0
X2ludGVnZXIoX19pbiwgX19lbmQsIF9fc3RyLCBfX2VyciwgX192YWwsIChfQ2hhclQqKTAgKTsK
ICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQogICAgICBfX3AgPSByZWludGVy
cHJldF9jYXN0PHZvaWQqPihfX3ZhbCk7CiAgICByZXR1cm4gX190bXA7CiAgfQoKCgoKdGVtcGxh
dGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX0lucHV0SXRlcj4KX0lucHV0SXRlcgpudW1fZ2V0PF9D
aGFyVCwgX0lucHV0SXRlcj46OmRvX2dldChfSW5wdXRJdGVyIF9faW4sIF9JbnB1dEl0ZXIgX19l
bmQsIGlvc19iYXNlJiBfX3N0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsb25nIGxvbmcmIF9fdmFsKSBjb25zdCB7CiAgcmV0dXJuIF9NX2RvX2dldF9pbnRlZ2Vy
KF9faW4sIF9fZW5kLCBfX3N0ciwgX19lcnIsIF9fdmFsLCAoX0NoYXJUKikwICk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9JbnB1dEl0ZXI+Cl9JbnB1dEl0ZXIKbnVtX2dldDxf
Q2hhclQsIF9JbnB1dEl0ZXI+Ojpkb19nZXQoX0lucHV0SXRlciBfX2luLCBfSW5wdXRJdGVyIF9f
ZW5kLCBpb3NfYmFzZSYgX19zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbG9uZyBsb25nJiBfX3ZhbCkgY29uc3QgewogIHJldHVybiBfTV9kb19n
ZXRfaW50ZWdlcihfX2luLCBfX2VuZCwgX19zdHIsIF9fZXJyLCBfX3ZhbCwgKF9DaGFyVCopMCAp
Owp9CgoKCn0KIyAyNTIgIi4uL3N0bHBvcnQvc3RsL19udW1fZ2V0LmgiIDIKIyAzMyAiLi4vc3Rs
cG9ydC9zdGwvX21vbmV0YXJ5LmMiIDIKCgpuYW1lc3BhY2UgX1NUTCB7CgoKCnRlbXBsYXRlIDxj
bGFzcyBfQ2hhclQsIGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgpsb2NhbGU6OmlkIG1vbmV5X2dldDxf
Q2hhclQsIF9JbnB1dEl0ZXJhdG9yPjo6aWQ7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFz
cyBfT3V0cHV0SXRlcmF0b3I+CmxvY2FsZTo6aWQgbW9uZXlfcHV0PF9DaGFyVCwgX091dHB1dEl0
ZXJhdG9yPjo6aWQ7CiMgNzYgIi4uL3N0bHBvcnQvc3RsL19tb25ldGFyeS5jIgp0ZW1wbGF0ZSA8
Y2xhc3MgX0luSXQxLCBjbGFzcyBfSW5JdDI+CnBhaXI8X0luSXQxLCBib29sPiBfX2dldF9zdHJp
bmcoX0luSXQxIF9fZmlyc3QsIF9Jbkl0MSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfSW5JdDIgX19zdHJfZmlyc3QsIF9Jbkl0MiBfX3N0cl9sYXN0KSB7CiAgcGFpcjxf
SW5JdDEsIF9Jbkl0Mj4gX19wciA9IG1pc21hdGNoKF9fZmlyc3QsIF9fbGFzdCwgX19zdHJfZmly
c3QpOwogIHJldHVybiBtYWtlX3BhaXIoX19wci5maXJzdCwgX19wci5zZWNvbmQgPT0gX19zdHJf
bGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5JdCwgY2xhc3MgX091SXQsIGNsYXNzIF9DaGFy
VD4KYm9vbApfX2dldF9tb25ldGFyeV92YWx1ZShfSW5JdCYgX19maXJzdCwgX0luSXQgX19sYXN0
LCBfT3VJdCBfX291dCwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYg
X2NfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgX0NoYXJUIF9fcG9pbnQsCiAgICAgICAgICAg
ICAgICAgICAgIGludCBfX2ZyYWNfZGlnaXRzLAogICAgICAgICAgICAgICAgICAgICBfQ2hhclQg
X19zZXAsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZyYgX19ncm91cGluZywKICAg
ICAgICAgICAgICAgICAgICAgYm9vbCYgX19zeW50YXhfb2spCnsKICBpZiAoX19maXJzdCA9PSBf
X2xhc3QgfHwgIV9jX3R5cGUuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsICpfX2ZpcnN0KSkKICAgIHJl
dHVybiBmYWxzZTsKCiAgY2hhciBfX2dyb3VwX3NpemVzWzEyOF07CiAgY2hhciogX19ncm91cF9z
aXplc19lbmQgPSBfX2dyb3VwaW5nLnNpemUoKSA9PSAwID8gMCA6IF9fZ3JvdXBfc2l6ZXM7CiAg
Y2hhciBfX2N1cnJlbnRfZ3JvdXBfc2l6ZSA9IDA7CgogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFz
dCkgewogICAgaWYgKF9jX3R5cGUuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsICpfX2ZpcnN0KSkgewog
ICAgICArK19fY3VycmVudF9ncm91cF9zaXplOwogICAgICAqX19vdXQrKyA9ICpfX2ZpcnN0Kys7
CiAgICB9CiAgICBlbHNlIGlmIChfX2dyb3VwX3NpemVzX2VuZCkgewogICAgICBpZiAoKl9fZmly
c3QgPT0gX19zZXApIHsKICAgICAgICAqX19ncm91cF9zaXplc19lbmQrKyA9IF9fY3VycmVudF9n
cm91cF9zaXplOwogICAgICAgIF9fY3VycmVudF9ncm91cF9zaXplID0gMDsKICAgICAgICArK19f
Zmlyc3Q7CiAgICAgIH0KICAgICAgZWxzZSBicmVhazsKICAgIH0KICAgIGVsc2UKICAgICAgYnJl
YWs7CiAgfQoKICBpZiAoX19ncm91cGluZy5zaXplKCkgPT0gMCkKICAgIF9fc3ludGF4X29rID0g
dHJ1ZTsKICBlbHNlIHsKICAgIGlmIChfX2dyb3VwX3NpemVzX2VuZCAhPSBfX2dyb3VwX3NpemVz
KQogICAgICAqX19ncm91cF9zaXplc19lbmQrKyA9IF9fY3VycmVudF9ncm91cF9zaXplOwoKICAg
IF9fc3ludGF4X29rID0gX192YWxpZF9ncm91cGluZyhfX2dyb3VwX3NpemVzLCBfX2dyb3VwX3Np
emVzX2VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmRh
dGEoKSwgX19ncm91cGluZy5kYXRhKCkrIF9fZ3JvdXBpbmcuc2l6ZSgpKTsKCiAgICBpZiAoX19m
aXJzdCA9PSBfX2xhc3QgfHwgKl9fZmlyc3QgIT0gX19wb2ludCkgewogICAgICBmb3IgKGludCBf
X2RpZ2l0cyA9IDA7IF9fZGlnaXRzICE9IF9fZnJhY19kaWdpdHM7ICsrX19kaWdpdHMpCiAgICAg
ICAgKl9fb3V0KysgPSBfQ2hhclQoJzAnKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgfQoK
ICArK19fZmlyc3Q7CgogIHNpemVfdCBfX2RpZ2l0cyA9IDA7CgogIHdoaWxlIChfX2ZpcnN0ICE9
IF9fbGFzdCAmJiBfY190eXBlLmlzKGN0eXBlX2Jhc2U6OmRpZ2l0LCAqX19maXJzdCkpIHsKICAg
ICAgKl9fb3V0KysgPSAqX19maXJzdCsrOwogICAgICsrX19kaWdpdHM7CiAgfQoKICBfX3N5bnRh
eF9vayA9IF9fc3ludGF4X29rICYmIChfX2RpZ2l0cyA9PSBfX2ZyYWNfZGlnaXRzKTsKCiAgcmV0
dXJuIHRydWU7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9JbnB1dEl0ZXI+
Cl9JbnB1dEl0ZXIKbW9uZXlfZ2V0PF9DaGFyVCwgX0lucHV0SXRlcj46OmRvX2dldChfSW5wdXRJ
dGVyIF9fcywgX0lucHV0SXRlciBfX2VuZCwgYm9vbCBfX2ludGwsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2UmIF9fc3RyLCBpb3NfYmFzZTo6aW9zdGF0ZSYg
X19lcnIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkb3VibGUm
IF9fdW5pdHMpIGNvbnN0IHsKICBzdHJpbmdfdHlwZSBfX2J1ZjsKICBfX3MgPSBkb19nZXQoX19z
LCBfX2VuZCwgX19pbnRsLCBfX3N0ciwgX19lcnIsIF9fYnVmKTsKCiAgaWYgKF9fZXJyID09IGlv
c19iYXNlOjpnb29kYml0IHx8IF9fZXJyID09IGlvc19iYXNlOjplb2ZiaXQpIHsKICAgIF9fYnVm
LnB1c2hfYmFjaygwKTsKICAgIHR5cGVuYW1lIHN0cmluZ190eXBlOjppdGVyYXRvciBfX2IgPSBf
X2J1Zi5iZWdpbigpLCBfX2UgPSBfX2J1Zi5lbmQoKTsKCgogICAgX19nZXRfZGVjaW1hbF9pbnRl
Z2VyKF9fYiwgX19lLCBfX3VuaXRzKTsKICB9CiAgaWYgKF9fcyA9PSBfX2VuZCkKICAgIF9fZXJy
IHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgcmV0dXJuIF9fczsKfQoKCnRlbXBsYXRlIDxjbGFzcyBf
Q2hhclQsIGNsYXNzIF9JbnB1dEl0ZXI+Cl9JbnB1dEl0ZXIKbW9uZXlfZ2V0PF9DaGFyVCwgX0lu
cHV0SXRlcj46OmRvX2dldChpdGVyX3R5cGUgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2UmIF9fc3RyLCBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nX3R5
cGUmIF9fZGlnaXRzKSBjb25zdCB7CiAgaWYgKF9fcyA9PSBfX2VuZCkgewogICAgX19lcnIgfD0g
aW9zX2Jhc2U6OmVvZmJpdDsKICAgIHJldHVybiBfX3M7CiAgfQoKICB0eXBlZGVmIG1vbmV5cHVu
Y3Q8X0NoYXJULCBmYWxzZT4gX1B1bmN0OwogIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQsIHRy
dWU+IF9QdW5jdF9pbnRsOwogIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfQ3R5cGU7CgogIGxvY2Fs
ZSBfX2xvYyA9IF9fc3RyLmdldGxvYygpOwogIGNvbnN0IF9QdW5jdCYgX19wdW5jdCA9IHVzZV9m
YWNldDxfUHVuY3Q+KF9fbG9jKSA7CiAgY29uc3QgX1B1bmN0X2ludGwmIF9fcHVuY3RfaW50bCA9
IHVzZV9mYWNldDxfUHVuY3RfaW50bD4oX19sb2MpIDsKICBjb25zdCBfQ3R5cGUmIF9fY190eXBl
ID0gdXNlX2ZhY2V0PF9DdHlwZT4oX19sb2MpIDsKCiAgbW9uZXlfYmFzZTo6cGF0dGVybiBfX2Zv
cm1hdCA9IF9faW50bCA/IF9fcHVuY3RfaW50bC5uZWdfZm9ybWF0KCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogX19wdW5jdC5uZWdfZm9ybWF0KCk7CiAgc3RyaW5n
X3R5cGUgX19ucyA9IF9faW50bCA/IF9fcHVuY3RfaW50bC5uZWdhdGl2ZV9zaWduKCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogX19wdW5jdC5uZWdhdGl2ZV9zaWduKCk7CiAgc3RyaW5n
X3R5cGUgX19wcyA9IF9faW50bCA/IF9fcHVuY3RfaW50bC5wb3NpdGl2ZV9zaWduKCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogX19wdW5jdC5wb3NpdGl2ZV9zaWduKCk7CiAgaW50IF9f
aTsKICBib29sIF9faXNfcG9zaXRpdmUgPSB0cnVlOwogIGJvb2wgX19zeW1ib2xfcmVxdWlyZWQg
PSAoX19zdHIuZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZSkgIT0wOwogIHN0cmluZ190eXBl
IF9fYnVmOwogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPHN0cmluZ190eXBlPiBfX291dChfX2J1Zik7
CgoKICBmb3IgKF9faSA9IDA7IF9faSA8IDQ7ICsrX19pKSB7CiAgICBzd2l0Y2ggKF9fZm9ybWF0
LmZpZWxkW19faV0pIHsKICAgIGNhc2UgKGNoYXIpIG1vbmV5X2Jhc2U6Om5vbmU6CiAgICAgIGlm
IChfX2kgPT0gMykgewogICAgICAgIGlmIChfX2NfdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwg
Kl9fcykpIHsKICAgICAgICAgIF9fZXJyID0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICBy
ZXR1cm4gX19zOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgfQogICAgICB3aGlsZSAo
X19zICE9IF9fZW5kICYmIF9fY190eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCAqX19zKSkKICAg
ICAgICArK19fczsKICAgICAgYnJlYWs7CiAgICBjYXNlIChjaGFyKSBtb25leV9iYXNlOjpzcGFj
ZToKICAgICAgaWYgKCFfX2NfdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgKl9fcykpIHsKICAg
ICAgICBfX2VyciA9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgIHJldHVybiBfX3M7CiAgICAg
IH0KICAgICAgKytfX3M7CiAgICAgIHdoaWxlIChfX3MgIT0gX19lbmQgJiYgX19jX3R5cGUuaXMo
Y3R5cGVfYmFzZTo6c3BhY2UsICpfX3MpKQogICAgICAgICsrX19zOwogICAgICBicmVhazsKICAg
IGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOiB7CiAgICAgIHN0cmluZ190eXBlIF9fY3MgPSBfX2lu
dGwgPyBfX3B1bmN0X2ludGwuY3Vycl9zeW1ib2woKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogX19wdW5jdC5jdXJyX3N5bWJvbCgpOwogICAgICBwYWlyPGl0ZXJfdHlwZSwgYm9v
bD4KICAgICAgX19yZXN1bHQgPSBfX2dldF9zdHJpbmcoX19zLCBfX2VuZCwgX19jcy5iZWdpbigp
LCBfX2NzLmVuZCgpKTsKICAgICAgaWYgKCFfX3Jlc3VsdC5zZWNvbmQgJiYgX19zeW1ib2xfcmVx
dWlyZWQpCiAgICAgICAgX19lcnIgPSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgX19zID0gX19y
ZXN1bHQuZmlyc3Q7CiAgICAgIGJyZWFrOwogICAgfQogICAgY2FzZSBtb25leV9iYXNlOjpzaWdu
OiB7CiAgICAgIGlmIChfX3MgPT0gX19lbmQpIHsKICAgICAgICBpZiAoX19wcy5zaXplKCkgPT0g
MCkKICAgICAgICAgIGJyZWFrOwogICAgICAgIGlmIChfX25zLnNpemUoKSA9PSAwKSB7CiAgICAg
ICAgICBfX2lzX3Bvc2l0aXZlID0gZmFsc2U7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAg
ICAgICAgX19lcnIgPSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICByZXR1cm4gX19zOwogICAg
ICB9CiAgICAgIGVsc2UgewogICAgICAgIGlmIChfX3BzLnNpemUoKSA9PSAwKSB7CiAgICAgICAg
ICBpZiAoX19ucy5zaXplKCkgPT0gMCkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBpZiAo
Kl9fcyA9PSArK19fbnNbMF0pIHsKICAgICAgICAgICAgKytfX3M7CiAgICAgICAgICAgIF9faXNf
cG9zaXRpdmUgPSBmYWxzZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAg
ICBfX2VyciA9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAg
ICAgICAgICBpZiAoKl9fcyA9PSBfX3BzWzBdKSB7CiAgICAgICAgICAgICsrX19zOwogICAgICAg
ICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX25zLnNpemUoKSA9PSAwKQog
ICAgICAgICAgICBicmVhazsKICAgICAgICAgIGlmICgqX19zID09IF9fbnNbMF0pIHsKICAgICAg
ICAgICAgKytfX3M7CiAgICAgICAgICAgIF9faXNfcG9zaXRpdmUgPSBmYWxzZTsKICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBfX2VyciA9IGlvc19iYXNlOjpmYWlsYml0
OwoKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIF9fczsKCiAgICB9CiAgICBjYXNlIG1v
bmV5X2Jhc2U6OnZhbHVlOiB7CiAgICAgIF9DaGFyVCBfX3BvaW50ID0gX19pbnRsID8gX19wdW5j
dF9pbnRsLmRlY2ltYWxfcG9pbnQoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9f
cHVuY3QuZGVjaW1hbF9wb2ludCgpOwogICAgICBpbnQgX19mcmFjX2RpZ2l0cyA9IF9faW50bCA/
IF9fcHVuY3RfaW50bC5mcmFjX2RpZ2l0cygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDogX19wdW5jdC5mcmFjX2RpZ2l0cygpOwogICAgICBzdHJpbmcgX19ncm91cGluZyA9IF9f
aW50bCA/IF9fcHVuY3RfaW50bC5ncm91cGluZygpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogX19wdW5jdC5ncm91cGluZygpOwogICAgICBib29sIF9fc3ludGF4X29rID0gdHJ1
ZTsKCiAgICAgIGJvb2wgX19yZXN1bHQ7CgogICAgICBfQ2hhclQgX19zZXAgPSBfX2dyb3VwaW5n
LnNpemUoKSA9PSAwID8gX0NoYXJUKCkgOgogICAgICAgIF9faW50bCA/IF9fcHVuY3RfaW50bC50
aG91c2FuZHNfc2VwKCkgOiBfX3B1bmN0LnRob3VzYW5kc19zZXAoKTsKCiAgICAgIF9fcmVzdWx0
ID0gX19nZXRfbW9uZXRhcnlfdmFsdWUoX19zLCBfX2VuZCwgX19vdXQsIF9fY190eXBlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcG9pbnQsIF9fZnJhY19kaWdpdHMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zZXAsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZywgX19zeW50YXhfb2spOwoKICAg
ICAgaWYgKCFfX3N5bnRheF9vaykKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsK
ICAgICAgaWYgKCFfX3Jlc3VsdCkgewogICAgICAgIF9fZXJyID0gaW9zX2Jhc2U6OmZhaWxiaXQ7
CiAgICAgICAgcmV0dXJuIF9fczsKICAgICAgfQogICAgICBicmVhazsKCiAgICB9CgoKICAgIH0K
ICB9CgogIGlmIChfX2lzX3Bvc2l0aXZlKSB7CiAgICBpZiAoX19wcy5zaXplKCkgPiAxKSB7CiAg
ICAgIHBhaXI8X0lucHV0SXRlciwgYm9vbD4KICAgICAgICBfX3Jlc3VsdCA9IF9fZ2V0X3N0cmlu
ZyhfX3MsIF9fZW5kLCBfX3BzLmJlZ2luKCkgKyAxLCBfX3BzLmVuZCgpKTsKICAgICAgX19zID0g
X19yZXN1bHQuZmlyc3Q7CiAgICAgIGlmICghX19yZXN1bHQuc2Vjb25kKQogICAgICAgIF9fZXJy
IHw9IGlvczo6ZmFpbGJpdDsKICAgIH0KICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxi
aXQpKQogICAgICBfX2RpZ2l0cyA9IF9fYnVmOwogIH0KICBlbHNlIHsKICAgIGlmIChfX25zLnNp
emUoKSA+IDEpIHsKICAgICAgcGFpcjxfSW5wdXRJdGVyLCBib29sPgogICAgICAgIF9fcmVzdWx0
ID0gX19nZXRfc3RyaW5nKF9fcywgX19lbmQsIF9fbnMuYmVnaW4oKSArIDEsIF9fbnMuZW5kKCkp
OwogICAgICBfX3MgPSBfX3Jlc3VsdC5maXJzdDsKICAgICAgaWYgKCFfX3Jlc3VsdC5zZWNvbmQp
CiAgICAgICAgX19lcnIgfD0gaW9zOjpmYWlsYml0OwogICAgfQogICAgaWYgKCEoX19lcnIgJiBp
b3M6OmZhaWxiaXQpKSB7CiAgICAgIF9fYnVmLmluc2VydChfX2J1Zi5iZWdpbigpLF9fY190eXBl
LndpZGVuKCctJykpOwogICAgICBfX2RpZ2l0cyA9IF9fYnVmOwogICAgfQogIH0KICBpZiAoX19z
ID09IF9fZW5kKQogICAgX19lcnIgfD0gaW9zOjplb2ZiaXQ7CgogIHJldHVybiBfX3M7Cn0KCgoK
dGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyCm1v
bmV5X3B1dDxfQ2hhclQsIF9PdXRwdXRJdGVyPgogOjpkb19wdXQoX091dHB1dEl0ZXIgX19zLCBi
b29sIF9faW50bCwgaW9zX2Jhc2UmIF9fc3RyLAogICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwK
ICAgICAgICAgIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QgewogIHR5cGVkZWYg
Y3R5cGU8X0NoYXJUPiBfQ3R5cGU7CiAgdHlwZWRlZiBtb25leXB1bmN0PF9DaGFyVCwgZmFsc2U+
IF9QdW5jdDsKICB0eXBlZGVmIG1vbmV5cHVuY3Q8X0NoYXJULCB0cnVlPiBfUHVuY3RfaW50bDsK
CiAgbG9jYWxlIF9fbG9jID0gX19zdHIuZ2V0bG9jKCk7CiAgY29uc3QgX0N0eXBlJiBfX2NfdHlw
ZSA9IHVzZV9mYWNldDxfQ3R5cGU+KF9fbG9jKSA7CiAgY29uc3QgX1B1bmN0JiBfX3B1bmN0ID0g
dXNlX2ZhY2V0PF9QdW5jdD4oX19sb2MpIDsKICBjb25zdCBfUHVuY3RfaW50bCYgX19wdW5jdF9p
bnRsID0gdXNlX2ZhY2V0PF9QdW5jdF9pbnRsPihfX2xvYykgOwoKCgogIGNoYXJfdHlwZSBfX21p
bnVzID0gX19jX3R5cGUud2lkZW4oJy0nKTsKICBjaGFyX3R5cGUgX19wbHVzID0gX19jX3R5cGUu
d2lkZW4oJysnKTsKICBjaGFyX3R5cGUgX19zcGFjZSA9IF9fY190eXBlLndpZGVuKCcgJyk7CiAg
Y2hhcl90eXBlIF9femVybyA9IF9fY190eXBlLndpZGVuKCcwJyk7CiAgY2hhcl90eXBlIF9fcG9p
bnQgPSBfX2ludGwgPyBfX2NfdHlwZS53aWRlbihfX3B1bmN0X2ludGwuZGVjaW1hbF9wb2ludCgp
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19jX3R5cGUud2lkZW4oX19wdW5jdC5k
ZWNpbWFsX3BvaW50KCkpOwoKICBjaGFyX3R5cGUgX19zZXAgPSBfX2ludGwgPyBfX3B1bmN0X2lu
dGwudGhvdXNhbmRzX3NlcCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19wdW5jdCAu
dGhvdXNhbmRzX3NlcCgpOwoKICBzdHJpbmcgX19ncm91cGluZyA9IF9faW50bCA/IF9fcHVuY3Rf
aW50bC5ncm91cGluZygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX3B1bmN0IC5n
cm91cGluZygpOwoKICBpbnQgX19mcmFjX2RpZ2l0cyA9IF9faW50bCA/IF9fcHVuY3RfaW50bC5m
cmFjX2RpZ2l0cygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fcHVuY3Qu
ZnJhY19kaWdpdHMoKTsKCiAgc3RyaW5nX3R5cGUgX19jdXJyX3N5bSA9IF9faW50bCA/IF9fcHVu
Y3RfaW50bC5jdXJyX3N5bWJvbCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6
IF9fcHVuY3QuY3Vycl9zeW1ib2woKTsKCgoKCgoKICBpZiAoX19kaWdpdHMuc2l6ZSgpID09IDAp
CiAgICByZXR1cm4gX19zOwoKICB0eXBlbmFtZSBzdHJpbmdfdHlwZTo6Y29uc3RfaXRlcmF0b3Ig
X19kaWdpdHNfZmlyc3QgPSBfX2RpZ2l0cy5iZWdpbigpOwogIHR5cGVuYW1lIHN0cmluZ190eXBl
Ojpjb25zdF9pdGVyYXRvciBfX2RpZ2l0c19sYXN0ID0gX19kaWdpdHMuZW5kKCk7CgogIGJvb2wg
X19pc19uZWdhdGl2ZSA9ICpfX2RpZ2l0c19maXJzdCA9PSBfX21pbnVzOwogIGlmIChfX2lzX25l
Z2F0aXZlKQogICAgKytfX2RpZ2l0c19maXJzdDsKCiAgc3RyaW5nX3R5cGUgX19zaWduID0gX19p
bnRsID8KICAgICAgICAgICAgICAgICAgICAgICAgIF9faXNfbmVnYXRpdmUgPyBfX3B1bmN0X2lu
dGwubmVnYXRpdmVfc2lnbigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDogX19wdW5jdF9pbnRsLnBvc2l0aXZlX3NpZ24oKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6CiAgICAgICAgICAgICAgICAgICAgICAgICBfX2lzX25lZ2F0aXZlID8gX19wdW5jdC5u
ZWdhdGl2ZV9zaWduKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBf
X3B1bmN0LnBvc2l0aXZlX3NpZ24oKTsKICB0eXBlbmFtZSBzdHJpbmdfdHlwZTo6Y29uc3RfaXRl
cmF0b3IgX19jcCA9IF9fZGlnaXRzX2ZpcnN0OwogIHdoaWxlIChfX2NwICE9IF9fZGlnaXRzX2xh
c3QgJiYgX19jX3R5cGUuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsICpfX2NwKSkKICAgICsrX19jcDsK
ICBpZiAoX19jcCA9PSBfX2RpZ2l0c19maXJzdCkKICAgIHJldHVybiBfX3M7CiAgX19kaWdpdHNf
bGFzdCA9IF9fY3A7CiMgNDE0ICIuLi9zdGxwb3J0L3N0bC9fbW9uZXRhcnkuYyIKICBzdHJpbmdf
dHlwZSBfX25ld19kaWdpdHMoX19kaWdpdHNfZmlyc3QsIF9fZGlnaXRzX2xhc3QpOwoKICBpZiAo
X19ncm91cGluZy5zaXplKCkgIT0gMCkgewogICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpID09IDEp
CiAgICAgIF9fZ3JvdXBpbmcucHVzaF9iYWNrKF9fZ3JvdXBpbmdbMF0pOwogICAgX19ncm91cGlu
Z1swXSArPSBfX2ZyYWNfZGlnaXRzOwogICAgX0NoYXJUKiBfX2RhdGFfcHRyID0gY29uc3RfY2Fz
dDxfQ2hhclQqPihfX25ld19kaWdpdHMuZGF0YSgpKTsKICAgIF9DaGFyVCogX19kYXRhX2VuZCA9
IF9fZGF0YV9wdHIgKyBfX25ld19kaWdpdHMuc2l6ZSgpOwoKICAgIHB0cmRpZmZfdCBfX3ZhbHVl
X2xlbmd0aCA9IF9faW5zZXJ0X2dyb3VwaW5nKF9fZGF0YV9wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RhdGFfZW5kLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2VwLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wbHVzLCBfX21pbnVzLCAw
KTsKICAgIF9fZGlnaXRzX2ZpcnN0ID0gX19uZXdfZGlnaXRzLmJlZ2luKCk7CiAgICBfX2RpZ2l0
c19sYXN0ID0gX19kaWdpdHNfZmlyc3QgKyBfX3ZhbHVlX2xlbmd0aDsKICB9CgoKCiAgc2l6ZV90
IF9fd2lkdGggPSBfX3N0ci53aWR0aCgpOwoKCgoKICBzaXplX3QgX192YWx1ZV9sZW5ndGggPSBf
X2RpZ2l0c19sYXN0IC0gX19kaWdpdHNfZmlyc3Q7CgoKICBzaXplX3QgX19sZW5ndGggPSBfX3Zh
bHVlX2xlbmd0aDsKCiAgX19sZW5ndGggKz0gX19zaWduLnNpemUoKTsKICBpZiAoX19mcmFjX2Rp
Z2l0cyAhPSAwKQogICAgKytfX2xlbmd0aDsKCiAgYm9vbCBfX2dlbmVyYXRlX2N1cnIgPSAoX19z
dHIuZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZSkgIT0wOwogIGlmIChfX2dlbmVyYXRlX2N1
cnIpCiAgICBfX2xlbmd0aCArPSBfX2N1cnJfc3ltLnNpemUoKTsKICBtb25leV9iYXNlOjpwYXR0
ZXJuIF9fZm9ybWF0ID0KICAgIF9faW50bCA/IChfX2lzX25lZ2F0aXZlID8gX19wdW5jdF9pbnRs
Lm5lZ19mb3JtYXQoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX3B1bmN0X2ludGwu
cG9zX2Zvcm1hdCgpKQogICAgICAgICAgIDogKF9faXNfbmVnYXRpdmUgPyBfX3B1bmN0Lm5lZ19m
b3JtYXQoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX3B1bmN0LnBvc19mb3JtYXQo
KSk7CiAgewogICAgZm9yIChpbnQgX19pID0gMDsgX19pIDwgNDsgKytfX2kpCiAgICAgIGlmIChf
X2Zvcm1hdC5maWVsZFtfX2ldID09IChjaGFyKSBtb25leV9iYXNlOjpzcGFjZSkKICAgICAgICAr
K19fbGVuZ3RoOwogIH0KCiAgc2l6ZV90IF9fZmlsbF9hbXQgPSBfX2xlbmd0aCA8IF9fd2lkdGgg
PyBfX3dpZHRoIC0gX19sZW5ndGggOiAwOwoKICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19maWxsX3Bv
cyA9IF9fc3RyLmZsYWdzKCkgJiBpb3NfYmFzZTo6YWRqdXN0ZmllbGQ7CgogIGlmIChfX2ZpbGxf
YW10ICE9IDAgJiYKICAgICAgIShfX2ZpbGxfcG9zICYgKGlvc19iYXNlOjpsZWZ0IHwgaW9zX2Jh
c2U6OmludGVybmFsKSkpCiAgICBfX3MgPSBmaWxsX24oX19zLCBfX2ZpbGxfYW10LCBfX2ZpbGwp
OwoKICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCA0OyArK19faSkgewogICAgY2hhciBfX2ZmaWVs
ZCA9IF9fZm9ybWF0LmZpZWxkW19faV07CiAgICBpZiAoX19mZmllbGQgPT0gbW9uZXlfYmFzZTo6
bm9uZSkgewogICAgICBpZiAoX19maWxsX2FtdCAhPSAwICYmIF9fZmlsbF9wb3MgPT0gaW9zX2Jh
c2U6OmludGVybmFsKQogICAgICAgIF9fcyA9IGZpbGxfbihfX3MsIF9fZmlsbF9hbXQsIF9fZmls
bCk7CiAgICB9CiAgICBlbHNlIGlmIChfX2ZmaWVsZCA9PSBtb25leV9iYXNlOjpzcGFjZSkgewog
ICAgICAqX19zKysgPSBfX3NwYWNlOwogICAgICBpZiAoX19maWxsX2FtdCAhPSAwICYmIF9fZmls
bF9wb3MgPT0gaW9zX2Jhc2U6OmludGVybmFsKQogICAgICAgIF9fcyA9IGZpbGxfbihfX3MsIF9f
ZmlsbF9hbXQsIF9fZmlsbCk7CiAgICB9CiAgICBlbHNlIGlmIChfX2ZmaWVsZCA9PSBtb25leV9i
YXNlOjpzeW1ib2wpIHsKICAgICAgaWYgKF9fZ2VuZXJhdGVfY3VycikKICAgICAgICBfX3MgPSBj
b3B5KF9fY3Vycl9zeW0uYmVnaW4oKSwgX19jdXJyX3N5bS5lbmQoKSwgX19zKTsKICAgIH0KICAg
IGVsc2UgaWYgKF9fZmZpZWxkID09IG1vbmV5X2Jhc2U6OnNpZ24pIHsKICAgICAgaWYgKF9fc2ln
bi5zaXplKCkgIT0gMCkKICAgICAgICAqX19zKysgPSBfX3NpZ25bMF07CiAgICB9CiAgICBlbHNl
IGlmIChfX2ZmaWVsZCA9PSBtb25leV9iYXNlOjp2YWx1ZSkgewogICAgICBpZiAoX19mcmFjX2Rp
Z2l0cyA9PSAwKQogICAgICAgIF9fcyA9IGNvcHkoX19kaWdpdHNfZmlyc3QsIF9fZGlnaXRzX2xh
c3QsIF9fcyk7CiAgICAgIGVsc2UgewogICAgICAgIGlmICgoaW50KV9fdmFsdWVfbGVuZ3RoIDw9
IF9fZnJhY19kaWdpdHMpIHsKICAgICAgICAgICpfX3MrKyA9IF9fcG9pbnQ7CiAgICAgICAgICBf
X3MgPSBjb3B5KF9fZGlnaXRzX2ZpcnN0LCBfX2RpZ2l0c19sYXN0LCBfX3MpOwogICAgICAgICAg
X19zID0gZmlsbF9uKF9fcywgX19mcmFjX2RpZ2l0cyAtIF9fdmFsdWVfbGVuZ3RoLCBfX3plcm8p
OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIF9fcyA9IGNvcHkoX19kaWdpdHNf
Zmlyc3QsIF9fZGlnaXRzX2xhc3QgLSBfX2ZyYWNfZGlnaXRzLCBfX3MpOwogICAgICAgICAgaWYg
KF9fZnJhY19kaWdpdHMgIT0gMCkgewogICAgICAgICAgICAqX19zKysgPSBfX3BvaW50OwogICAg
ICAgICAgICBfX3MgPSBjb3B5KF9fZGlnaXRzX2xhc3QgLSBfX2ZyYWNfZGlnaXRzLCBfX2RpZ2l0
c19sYXN0LCBfX3MpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCgoK
ICBpZiAoX19zaWduLnNpemUoKSA+IDEpCiAgICBfX3MgPSBjb3B5KF9fc2lnbi5iZWdpbigpICsg
MSwgX19zaWduLmVuZCgpLCBfX3MpOwogIGlmICghKF9fZmlsbF9wb3MgJiAoaW9zX2Jhc2U6OnJp
Z2h0IHwgaW9zX2Jhc2U6OmludGVybmFsKSkpCiAgICBfX3MgPSBmaWxsX24oX19zLCBfX2ZpbGxf
YW10LCBfX2ZpbGwpOwoKICByZXR1cm4gX19zOwp9Cgp9CiMgNDU1ICIuLi9zdGxwb3J0L3N0bC9f
bW9uZXRhcnkuaCIgMgojIDIxICJtb25ldGFyeS5jcHAiIDIKIyAxICIuLi9zdGxwb3J0L3N0bC9f
aXN0cmVhbS5oIiAxCiMgMzEgIi4uL3N0bHBvcnQvc3RsL19pc3RyZWFtLmgiCiMgMSAiLi4vc3Rs
cG9ydC9zdGwvX29zdHJlYW0uaCIgMQojIDMxICIuLi9zdGxwb3J0L3N0bC9fb3N0cmVhbS5oIgpu
YW1lc3BhY2UgX1NUTCB7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBj
bGFzcyBfTnVtYmVyPgpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCl9NX3B1dF9udW0o
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLCBfTnVtYmVyIF9feCk7CgoKCgoK
CnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CmJvb2wKX01faW5pdChiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fc3RyKTsKCgoKCnRlbXBsYXRlIDxjbGFzcyBf
Q2hhclQsIGNsYXNzIF9UcmFpdHM+CmNsYXNzIGJhc2ljX29zdHJlYW0gOiB2aXJ0dWFsIHB1Ymxp
YyBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPgp7CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4gX1NlbGY7CgpwdWJsaWM6CiAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBl
OwogIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1l
IF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlw
ZTsKICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+IF9CYXNpY19pb3M7CgpwdWJs
aWM6CiAgZXhwbGljaXQgYmFzaWNfb3N0cmVhbShiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh
aXRzPiogX19idWYpOwogIH5iYXNpY19vc3RyZWFtKCk7CgpwdWJsaWM6CiAgdHlwZWRlZiBiYXNp
Y19pb3M8X0NoYXJULCBfVHJhaXRzPiYgKCAqX19pb3NfZm4pKGJhc2ljX2lvczxfQ2hhclQsIF9U
cmFpdHM+Jik7CiAgdHlwZWRlZiBpb3NfYmFzZSYgKCAqX19pb3NfYmFzZV9mbikoaW9zX2Jhc2Um
KTsKICB0eXBlZGVmIF9TZWxmJiAoICpfX29zdHJlYW1fZm4pKF9TZWxmJik7CiAgX1NlbGYmIG9w
ZXJhdG9yPDwgKF9fb3N0cmVhbV9mbiBfX2YpIHsgcmV0dXJuIF9fZigqdGhpcyk7IH0KICBfU2Vs
ZiAmIG9wZXJhdG9yPDwgKF9faW9zX2Jhc2VfZm4gX19mKSB7IF9fZigqdGhpcyk7IHJldHVybiAq
dGhpczsgfQogIF9TZWxmJiBvcGVyYXRvcjw8IChfX2lvc19mbiBfX2ZmKSB7IF9fZmYoKnRoaXMp
OyByZXR1cm4gKnRoaXM7IH0KCnByaXZhdGU6CiAgYm9vbCBfTV9jb3B5X2J1ZmZlcmVkKGJhc2lj
X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX2Zyb20sCiAgICAgICAgICAgICAgICAgICAg
ICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3RvKTsKICBib29sIF9NX2Nv
cHlfdW5idWZmZXJlZChiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19mcm9tLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+
KiBfX3RvKTsKCnB1YmxpYzoKICB2b2lkIF9NX3B1dF9jaGFyKF9DaGFyVCBfX2MpOwoKICB2b2lk
IF9NX3B1dF9ub3dpZGVuKGNvbnN0IF9DaGFyVCogX19zKTsKICB2b2lkIF9NX3B1dF93aWRlbihj
b25zdCBjaGFyKiBfX3MpOwogIGJvb2wgX01fcHV0X3dpZGVuX2F1eChjb25zdCBjaGFyKiBfX3Ms
IHN0cmVhbXNpemUgX19uKTsKCnB1YmxpYzoKICBfU2VsZiYgcHV0KGNoYXJfdHlwZSBfX2MpOwog
IF9TZWxmJiB3cml0ZShjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKcHVi
bGljOgoKICBfU2VsZiYgb3BlcmF0b3I8PChiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz
PiogX19idWYpOwoKCiAgX1NlbGYmIG9wZXJhdG9yPDwodW5zaWduZWQgY2hhciBfX3gpIHsgX01f
cHV0X2NoYXIoX194KTsgcmV0dXJuICp0aGlzOyB9CgogIF9TZWxmJiBvcGVyYXRvcjw8KHNob3J0
IF9feCkgeyByZXR1cm4gX01fcHV0X251bSgqdGhpcywgc3RhdGljX2Nhc3Q8bG9uZz4oX194KSk7
IH0KICBfU2VsZiYgb3BlcmF0b3I8PCh1bnNpZ25lZCBzaG9ydCBfX3gpIHsgcmV0dXJuIF9NX3B1
dF9udW0oKnRoaXMsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KF9feCkpOyB9CiAgX1NlbGYm
IG9wZXJhdG9yPDwoaW50IF9feCkgeyByZXR1cm4gX01fcHV0X251bSgqdGhpcywgc3RhdGljX2Nh
c3Q8bG9uZz4oX194KSk7IH0KICBfU2VsZiYgb3BlcmF0b3I8PCh1bnNpZ25lZCBpbnQgX194KSB7
IHJldHVybiBfTV9wdXRfbnVtKCp0aGlzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX3gp
KTsgfQogIF9TZWxmJiBvcGVyYXRvcjw8KGxvbmcgX194KSB7IHJldHVybiBfTV9wdXRfbnVtKCp0
aGlzLCBfX3gpOyB9CiAgX1NlbGYmIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBfX3gpIHsgcmV0
dXJuIF9NX3B1dF9udW0oKnRoaXMsIF9feCk7IH0KCiAgX1NlbGYmIG9wZXJhdG9yPDwgKGxvbmcg
bG9uZyBfX3gpIHsgcmV0dXJuIF9NX3B1dF9udW0oKnRoaXMsIF9feCk7IH0KICBfU2VsZiYgb3Bl
cmF0b3I8PCAodW5zaWduZWQgbG9uZyBsb25nIF9feCkgeyByZXR1cm4gX01fcHV0X251bSgqdGhp
cywgX194KTsgfQoKICBfU2VsZiYgb3BlcmF0b3I8PChmbG9hdCBfX3gpCiAgICB7IHJldHVybiBf
TV9wdXRfbnVtKCp0aGlzLCBzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9CiAgX1NlbGYmIG9w
ZXJhdG9yPDwoZG91YmxlIF9feCkgeyByZXR1cm4gX01fcHV0X251bSgqdGhpcywgX194KTsgfQoK
ICBfU2VsZiYgb3BlcmF0b3I8PChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIF9NX3B1dF9udW0o
KnRoaXMsIF9feCk7IH0KCiAgX1NlbGYmIG9wZXJhdG9yPDwoY29uc3Qgdm9pZCogX194KSB7IHJl
dHVybiBfTV9wdXRfbnVtKCp0aGlzLCBfX3gpOyB9CgogIF9TZWxmJiBvcGVyYXRvcjw8KGJvb2wg
X194KSB7IHJldHVybiBfTV9wdXRfbnVtKCp0aGlzLCBfX3gpOyB9CgoKcHVibGljOgogIF9TZWxm
JiBmbHVzaCgpIHsKICAgIGlmICh0aGlzLT5yZGJ1ZigpKQogICAgICBpZiAodGhpcy0+cmRidWYo
KS0+cHVic3luYygpID09IC0xKQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi
aXQpOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgcG9zX3R5cGUgdGVsbHAoKSB7CiAgICByZXR1
cm4gdGhpcy0+cmRidWYoKSAmJiAhdGhpcy0+ZmFpbCgpCiAgICAgID8gdGhpcy0+cmRidWYoKS0+
cHVic2Vla29mZigwLCBpb3NfYmFzZTo6Y3VyLCBpb3NfYmFzZTo6b3V0KQogICAgICA6IHBvc190
eXBlKC0xKTsKICB9CgogIF9TZWxmJiBzZWVrcChwb3NfdHlwZSBfX3BvcykgewogICAgaWYgKHRo
aXMtPnJkYnVmKCkgJiYgIXRoaXMtPmZhaWwoKSkKICAgICAgdGhpcy0+cmRidWYoKS0+cHVic2Vl
a3BvcyhfX3BvcywgaW9zX2Jhc2U6Om91dCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBfU2Vs
ZiYgc2Vla3Aob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fZGlyKSB7CiAgICBp
ZiAodGhpcy0+cmRidWYoKSAmJiAhdGhpcy0+ZmFpbCgpKQogICAgICB0aGlzLT5yZGJ1ZigpLT5w
dWJzZWVrb2ZmKF9fb2ZmLCBfX2RpciwgaW9zX2Jhc2U6Om91dCk7CiAgICByZXR1cm4gKnRoaXM7
CiAgfQojIDE1NSAiLi4vc3RscG9ydC9zdGwvX29zdHJlYW0uaCIKICAgIGNsYXNzIHNlbnRyeSB7
CiAgICAgIHR5cGVkZWYgc2VudHJ5IF9TZWxmOwoKICAgIHByaXZhdGU6CiAgICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX01fc3RyOwoKICAgICAgYm9vbCBfTV9vazsKICAgIHB1
YmxpYzoKICAgICAgZXhwbGljaXQgc2VudHJ5KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYgX19zdHIpCiAgICAgICAgOiBfTV9zdHIoX19zdHIpLCBfTV9vayhfTV9pbml0KF9fc3RyKSkK
ICAgICAgewogICAgICB9CgogICAgICB+c2VudHJ5KCkgewogICAgICAgIGlmIChfTV9zdHIuZmxh
Z3MoKSAmIGlvc19iYXNlOjp1bml0YnVmKQoKCgogICAgICAgICAgICBfTV9zdHIuZmx1c2goKTsK
ICAgICAgfQoKICAgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIF9NX29rOyB9CiAg
ICBwcml2YXRlOgogICAgICBzZW50cnkoY29uc3QgX1NlbGYmIF9fcykgOiBfTV9zdHIgKF9fcy5f
TV9zdHIpIHt9OwogICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBfU2VsZiYpIHt9OwogICAgfTsK
CgoKCn07CiMgMTk3ICIuLi9zdGxwb3J0L3N0bC9fb3N0cmVhbS5oIgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0NoYXJULCBjbGFzcyBfVHJhaXRzPgppbmxpbmUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
YWl0cz4qCl9NX2dldF9vc3RyZWFtYnVmKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYg
X19TdCkKewogIHJldHVybiBfX1N0LnJkYnVmKCk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9DaGFy
VCwgY2xhc3MgX1RyYWl0cz4KaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK
b3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsIF9DaGFyVCBf
X2MpIHsKICBfX29zLl9NX3B1dF9jaGFyKF9fYyk7CiAgcmV0dXJuIF9fb3M7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CmlubGluZSBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCm9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBf
X29zLCBjb25zdCBfQ2hhclQqIF9fcykgewogIF9fb3MuX01fcHV0X25vd2lkZW4oX19zKTsKICBy
ZXR1cm4gX19vczsKfQojIDI2MiAiLi4vc3RscG9ydC9zdGwvX29zdHJlYW0uaCIKdGVtcGxhdGUg
PGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9f
b3MsIGNoYXIgX19jKSB7CiAgX19vcy5fTV9wdXRfY2hhcihfX29zLndpZGVuKF9fYykpOwogIHJl
dHVybiBfX29zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4KaW5saW5lIGJhc2ljX29zdHJl
YW08Y2hhciwgX1RyYWl0cz4mCm9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRz
PiYgX19vcywgY2hhciBfX2MpIHsKICBfX29zLl9NX3B1dF9jaGFyKF9fYyk7CiAgcmV0dXJuIF9f
b3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHJhaXRzPgppbmxpbmUgYmFzaWNfb3N0cmVhbTxjaGFy
LCBfVHJhaXRzPiYKb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX29z
LCBzaWduZWQgY2hhciBfX2MpIHsKICBfX29zLl9NX3B1dF9jaGFyKF9fYyk7CiAgcmV0dXJuIF9f
b3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHJhaXRzPgppbmxpbmUgYmFzaWNfb3N0cmVhbTxjaGFy
LCBfVHJhaXRzPiYKb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX29z
LCB1bnNpZ25lZCBjaGFyIF9fYykgewogIF9fb3MuX01fcHV0X2NoYXIoX19jKTsKICByZXR1cm4g
X19vczsKfQoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KaW5saW5lIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mIF9fb3MsIGNvbnN0IGNoYXIqIF9fcykgewogIF9fb3MuX01fcHV0X3dp
ZGVuKF9fcyk7CiAgcmV0dXJuIF9fb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHJhaXRzPgppbmxp
bmUgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKb3BlcmF0b3I8PChiYXNpY19vc3RyZWFt
PGNoYXIsIF9UcmFpdHM+JiBfX29zLCBjb25zdCBjaGFyKiBfX3MpIHsKICBfX29zLl9NX3B1dF9u
b3dpZGVuKF9fcyk7CiAgcmV0dXJuIF9fb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHJhaXRzPgpp
bmxpbmUgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKb3BlcmF0b3I8PChiYXNpY19vc3Ry
ZWFtPGNoYXIsIF9UcmFpdHM+JiBfX29zLCBjb25zdCBzaWduZWQgY2hhciogX19zKSB7CiAgX19v
cy5fTV9wdXRfbm93aWRlbihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihfX3MpKTsKICBy
ZXR1cm4gX19vczsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcmFpdHM+CmlubGluZSBiYXNpY19vc3Ry
ZWFtPGNoYXIsIF9UcmFpdHM+JgpvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0
cz4mIF9fb3MsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fcykgewogIF9fb3MuX01fcHV0X25vd2lk
ZW4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oX19zKSk7CiAgcmV0dXJuIF9fb3M7Cn0K
CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgppbmxpbmUgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgplbmRsKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYgX19vcykgewogIF9fb3MucHV0KF9fb3Mud2lkZW4oJ1xuJykpOwogIF9fb3MuZmx1c2go
KTsKICByZXR1cm4gX19vczsKfQoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0
cz4KaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKZW5kcyhiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpIHsKICBfX29zLnB1dChfQ2hhclQoKSk7CiAgcmV0
dXJuIF9fb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CmlubGlu
ZSBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCmZsdXNoKGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPiYgX19vcykgewogIF9fb3MuZmx1c2goKTsKICByZXR1cm4gX19vczsKfQoK
fQoKCgoKIyAxICIuLi9zdGxwb3J0L3N0bC9fb3N0cmVhbS5jIiAxCiMgMjcgIi4uL3N0bHBvcnQv
c3RsL19vc3RyZWFtLmMiCm5hbWVzcGFjZSBfU1RMIHsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJU
LCBjbGFzcyBfVHJhaXRzPgpib29sCl9NX2luaXQoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JiBfX3N0cikgewogIGlmIChfX3N0ci5nb29kKCkpIHsKCiAgICBpZiAoIV9fc3RyLnJkYnVm
KCkpCiAgICAgIF9fc3RyLnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgaWYgKF9fc3Ry
LnRpZSgpKQogICAgICBfX3N0ci50aWUoKS0+Zmx1c2goKTsKICAgIHJldHVybiBfX3N0ci5nb29k
KCk7CiAgfSBlbHNlCiAgICByZXR1cm4gZmFsc2U7Cn0KCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9D
aGFyVCwgY2xhc3MgX1RyYWl0cz4KYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAgOjpi
YXNpY19vc3RyZWFtKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX2J1ZikKICAg
IDogYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4oKQp7CiAgdGhpcy0+aW5pdChfX2J1Zik7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CmJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPjo6fmJhc2ljX29zdHJlYW0oKQp7fQoKCnRlbXBsYXRlIDxjbGFzcyBfQ2hh
clQsIGNsYXNzIF9UcmFpdHM+CmJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh
clQsIF9UcmFpdHM+KiBfX2Zyb20pCnsKICBzZW50cnkgX19zZW50cnkoKnRoaXMpOwogIGlmIChf
X3NlbnRyeSkgewogICAgaWYgKF9fZnJvbSkgewogICAgICBib29sIF9fYW55X2luc2VydGVkID0g
X19mcm9tLT5ncHRyKCkgIT0gX19mcm9tLT5lZ3B0cigpCiAgICAgICAgPyB0aGlzLT5fTV9jb3B5
X2J1ZmZlcmVkKF9fZnJvbSwgdGhpcy0+cmRidWYoKSkKICAgICAgICA6IHRoaXMtPl9NX2NvcHlf
dW5idWZmZXJlZChfX2Zyb20sIHRoaXMtPnJkYnVmKCkpOwogICAgICBpZiAoIV9fYW55X2luc2Vy
dGVkKQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgIH0KICAg
IGVsc2UKICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgfQoKICByZXR1
cm4gKnRoaXM7Cn0KCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4K
Ym9vbCBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4KICA6Ol9NX2NvcHlfYnVmZmVyZWQo
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fZnJvbSwKICAgICAgICAgICAgICAg
ICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fdG8pCnsKICBib29sIF9f
YW55X2luc2VydGVkID0gZmFsc2U7CgogIHdoaWxlIChfX2Zyb20tPmVncHRyKCkgIT0gX19mcm9t
LT5ncHRyKCkpIHsKICAgIGNvbnN0IHB0cmRpZmZfdCBfX2F2YWlsID0gX19mcm9tLT5lZ3B0cigp
IC0gX19mcm9tLT5ncHRyKCk7CgogICAgc3RyZWFtc2l6ZSBfX253cml0dGVuOwogICAgdHJ5IHsK
ICAgICAgX19ud3JpdHRlbiA9IF9fdG8tPnNwdXRuKF9fZnJvbS0+Z3B0cigpLCBfX2F2YWlsKTsK
ICAgICAgX19mcm9tLT5nYnVtcCgoaW50KV9fbndyaXR0ZW4pOwogICAgfQogICAgY2F0Y2goLi4u
KSB7CiAgICAgIHRoaXMtPl9NX2hhbmRsZV9leGNlcHRpb24oaW9zX2Jhc2U6OmJhZGJpdCk7CiAg
ICAgIHJldHVybiBfX2FueV9pbnNlcnRlZDsKICAgIH0KCiAgICBpZiAoX19ud3JpdHRlbiA9PSBf
X2F2YWlsKSB7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKHRoaXMtPl9TX2VvZihfX2Zyb20tPnNn
ZXRjKCkpKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgZWxzZQogICAgICAgICAgX19h
bnlfaW5zZXJ0ZWQgPSB0cnVlOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikgewogICAgICAgIHRo
aXMtPl9NX2hhbmRsZV9leGNlcHRpb24oaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgfQogICAgfQoKICAgIGVsc2UgaWYgKF9fbndyaXR0ZW4gIT0gMCkKICAg
ICAgcmV0dXJuIHRydWU7CgogICAgZWxzZQogICAgICByZXR1cm4gX19hbnlfaW5zZXJ0ZWQ7CiAg
fQoKCgogIHJldHVybiBfX2FueV9pbnNlcnRlZCB8fCB0aGlzLT5fTV9jb3B5X3VuYnVmZmVyZWQo
X19mcm9tLCBfX3RvKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4K
Ym9vbCBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4KICA6Ol9NX2NvcHlfdW5idWZmZXJl
ZChiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19mcm9tLAogICAgICAgICAgICAg
ICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3RvKQp7CiAgYm9v
bCBfX2FueV9pbnNlcnRlZCA9IGZhbHNlOwoKICB3aGlsZSAodHJ1ZSkgewogICAgaW50X3R5cGUg
X19jOwogICAgdHJ5IHsKICAgICAgX19jID0gX19mcm9tLT5zYnVtcGMoKTsKICAgIH0KICAgIGNh
dGNoKC4uLikgewogICAgICB0aGlzLT5fTV9oYW5kbGVfZXhjZXB0aW9uKGlvc19iYXNlOjpmYWls
Yml0KTsKICAgICAgcmV0dXJuIF9fYW55X2luc2VydGVkOwogICAgfQoKICAgIGlmICh0aGlzLT5f
U19lb2YoX19jKSkKICAgICAgcmV0dXJuIF9fYW55X2luc2VydGVkOwoKICAgIGVsc2UgewogICAg
ICBpbnRfdHlwZSBfX3RtcDsKICAgICAgdHJ5IHsKICAgICAgICBfX3RtcCA9IF9fdG8tPnNwdXRj
KF9fYyk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKSB7CiAgICAgICAgdGhpcy0+X01faGFuZGxl
X2V4Y2VwdGlvbihpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICByZXR1cm4gX19hbnlfaW5zZXJ0
ZWQ7CiAgICAgIH0KCiAgICAgIGlmICh0aGlzLT5fU19lb2YoX190bXApKSB7CiAgICAgICAgdHJ5
IHsKICAgICAgICAgICAgICAgICAgICAgICAgX19mcm9tLT5zcHV0YmFja2MoX19jKTsKICAgICAg
ICB9CiAgICAgICAgY2F0Y2goLi4uKSB7CiAgICAgICAgICB0aGlzLT5fTV9oYW5kbGVfZXhjZXB0
aW9uKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgcmV0dXJuIF9fYW55X2luc2VydGVkOwog
ICAgICAgIH0KICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19hbnlfaW5zZXJ0ZWQgPSB0cnVl
OwogICAgfQogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBj
bGFzcyBfTnVtYmVyPgpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCl9NX3B1dF9udW0o
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLCBfTnVtYmVyIF9feCkKewogIHR5
cGVkZWYgdHlwZW5hbWUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnkgX1Nl
bnRyeTsKICBfU2VudHJ5IF9fc2VudHJ5KF9fb3MpOwogIGJvb2wgX19mYWlsZWQgPSB0cnVlOwoK
ICBpZiAoX19zZW50cnkpIHsKICAgIHRyeSB7CiAgICAgIHR5cGVkZWYgbnVtX3B1dDxfQ2hhclQs
IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiA+IF9OdW1QdXQ7CiAgICAgIF9f
ZmFpbGVkID0gKHVzZV9mYWNldDxfTnVtUHV0PihfX29zLmdldGxvYygpKSkucHV0KAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvc3RyZWFt
YnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4oX19vcy5yZGJ1ZigpKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19vcywgX19vcy5m
aWxsKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9feCkuZmFpbGVkKCk7CiAgICB9CiAgICBjYXRjaCguLi4pIHsKICAgICAgX19vcy5f
TV9oYW5kbGVfZXhjZXB0aW9uKGlvc19iYXNlOjpiYWRiaXQpOwogICAgfQogIH0KICBpZiAoX19m
YWlsZWQpCiAgICBfX29zLnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogIHJldHVybiBfX29z
Owp9CiMgMjE3ICIuLi9zdGxwb3J0L3N0bC9fb3N0cmVhbS5jIgp0ZW1wbGF0ZSA8Y2xhc3MgX0No
YXJULCBjbGFzcyBfVHJhaXRzPgp2b2lkIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
X01fcHV0X2NoYXIoX0NoYXJUIF9fYykKewogIHNlbnRyeSBfX3NlbnRyeSgqdGhpcyk7CiAgaWYg
KF9fc2VudHJ5KSB7CiAgICBib29sIF9fZmFpbGVkID0gdHJ1ZTsKICAgIHRyeSB7CiAgICAgIHN0
cmVhbXNpemUgX19ucGFkID0gdGhpcy0+d2lkdGgoKSA+IDAgPyB0aGlzLT53aWR0aCgpIC0gMSA6
IDA7CgogICAgICBpZiAoX19ucGFkID09IDApCiAgICAgICAgX19mYWlsZWQgPSB0aGlzLT5fU19l
b2YodGhpcy0+cmRidWYoKS0+c3B1dGMoX19jKSk7CiAgICAgIGVsc2UgaWYgKCh0aGlzLT5mbGFn
cygpICYgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKSA9PSBpb3NfYmFzZTo6bGVmdCkgewogICAgICAg
IF9fZmFpbGVkID0gdGhpcy0+X1NfZW9mKHRoaXMtPnJkYnVmKCktPnNwdXRjKF9fYykpOwogICAg
ICAgIF9fZmFpbGVkID0gX19mYWlsZWQgfHwKICAgICAgICAgICAgICAgICAgIHRoaXMtPnJkYnVm
KCktPl9NX3NwdXRuYyh0aGlzLT5maWxsKCksIF9fbnBhZCkgIT0gX19ucGFkOwogICAgICB9CiAg
ICAgIGVsc2UgewogICAgICAgIF9fZmFpbGVkID0gdGhpcy0+cmRidWYoKS0+X01fc3B1dG5jKHRo
aXMtPmZpbGwoKSwgX19ucGFkKSAhPSBfX25wYWQ7CiAgICAgICAgX19mYWlsZWQgPSBfX2ZhaWxl
ZCB8fCB0aGlzLT5fU19lb2YodGhpcy0+cmRidWYoKS0+c3B1dGMoX19jKSk7CiAgICAgIH0KCiAg
ICAgIHRoaXMtPndpZHRoKDApOwogICAgfQogICAgY2F0Y2goLi4uKSB7CiAgICAgIHRoaXMtPl9N
X2hhbmRsZV9leGNlcHRpb24oaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICB9CgogICAgaWYgKF9fZmFp
bGVkKQogICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICB9Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CnZvaWQgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjpfTV9wdXRfbm93aWRlbihjb25zdCBfQ2hhclQqIF9fcykKewogIHNlbnRy
eSBfX3NlbnRyeSgqdGhpcyk7CiAgaWYgKF9fc2VudHJ5KSB7CiAgICBib29sIF9fZmFpbGVkID0g
dHJ1ZTsKICAgIHN0cmVhbXNpemUgX19uID0gX1RyYWl0czo6bGVuZ3RoKF9fcyk7CiAgICBzdHJl
YW1zaXplIF9fbnBhZCA9IHRoaXMtPndpZHRoKCkgPiBfX24gPyB0aGlzLT53aWR0aCgpIC0gX19u
IDogMDsKCiAgICB0cnkgewogICAgICBpZiAoX19ucGFkID09IDApCiAgICAgICAgX19mYWlsZWQg
PSB0aGlzLT5yZGJ1ZigpLT5zcHV0bihfX3MsIF9fbikgIT0gX19uOwogICAgICBlbHNlIGlmICgo
dGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3RmaWVsZCkgPT0gaW9zX2Jhc2U6OmxlZnQp
IHsKICAgICAgICBfX2ZhaWxlZCA9IHRoaXMtPnJkYnVmKCktPnNwdXRuKF9fcywgX19uKSAhPSBf
X247CiAgICAgICAgX19mYWlsZWQgPSBfX2ZhaWxlZCB8fAogICAgICAgICAgICAgICAgICAgdGhp
cy0+cmRidWYoKS0+X01fc3B1dG5jKHRoaXMtPmZpbGwoKSwgX19ucGFkKSAhPSBfX25wYWQ7CiAg
ICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX19mYWlsZWQgPSB0aGlzLT5yZGJ1ZigpLT5fTV9z
cHV0bmModGhpcy0+ZmlsbCgpLCBfX25wYWQpICE9IF9fbnBhZDsKICAgICAgICBfX2ZhaWxlZCA9
IF9fZmFpbGVkIHx8IHRoaXMtPnJkYnVmKCktPnNwdXRuKF9fcywgX19uKSAhPSBfX247CiAgICAg
IH0KCiAgICAgIHRoaXMtPndpZHRoKDApOwogICAgfQogICAgY2F0Y2goLi4uKSB7CiAgICAgIHRo
aXMtPl9NX2hhbmRsZV9leGNlcHRpb24oaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICB9CgogICAgaWYg
KF9fZmFpbGVkKQogICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgfQp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgp2b2lkIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPjo6X01fcHV0X3dpZGVuKGNvbnN0IGNoYXIqIF9fcykKewogIHNl
bnRyeSBfX3NlbnRyeSgqdGhpcyk7CiAgaWYgKF9fc2VudHJ5KSB7CiAgICBib29sIF9fZmFpbGVk
ID0gdHJ1ZTsKICAgIHN0cmVhbXNpemUgX19uID0gY2hhcl90cmFpdHM8Y2hhcj46Omxlbmd0aChf
X3MpOwogICAgc3RyZWFtc2l6ZSBfX25wYWQgPSB0aGlzLT53aWR0aCgpID4gX19uID8gdGhpcy0+
d2lkdGgoKSAtIF9fbiA6IDA7CgogICAgdHJ5IHsKICAgICAgaWYgKF9fbnBhZCA9PSAwKQogICAg
ICAgIF9fZmFpbGVkID0gIXRoaXMtPl9NX3B1dF93aWRlbl9hdXgoX19zLCBfX24pOwogICAgICBl
bHNlIGlmICgodGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3RmaWVsZCkgPT0gaW9zX2Jh
c2U6OmxlZnQpIHsKICAgICAgICBfX2ZhaWxlZCA9ICF0aGlzLT5fTV9wdXRfd2lkZW5fYXV4KF9f
cywgX19uKTsKICAgICAgICBfX2ZhaWxlZCA9IF9fZmFpbGVkIHx8CiAgICAgICAgICAgICAgICAg
ICB0aGlzLT5yZGJ1ZigpLT5fTV9zcHV0bmModGhpcy0+ZmlsbCgpLCBfX25wYWQpICE9IF9fbnBh
ZDsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX2ZhaWxlZCA9IHRoaXMtPnJkYnVmKCkt
Pl9NX3NwdXRuYyh0aGlzLT5maWxsKCksIF9fbnBhZCkgIT0gX19ucGFkOwogICAgICAgIF9fZmFp
bGVkID0gX19mYWlsZWQgfHwgIXRoaXMtPl9NX3B1dF93aWRlbl9hdXgoX19zLCBfX24pOwogICAg
ICB9CgogICAgICB0aGlzLT53aWR0aCgwKTsKICAgIH0KICAgIGNhdGNoKC4uLikgewogICAgICB0
aGlzLT5fTV9oYW5kbGVfZXhjZXB0aW9uKGlvc19iYXNlOjpiYWRiaXQpOwogICAgfQoKICAgIGlm
IChfX2ZhaWxlZCkKICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogIH0K
fQoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KYm9vbCBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46Ol9NX3B1dF93aWRlbl9hdXgoY29uc3QgY2hhciogX19zLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJl
YW1zaXplIF9fbikKewogIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX2J1ZiA9
IHRoaXMtPnJkYnVmKCk7CgogIGZvciAoIDsgX19uID4gMCA7IC0tX19uKQogICAgaWYgKHRoaXMt
Pl9TX2VvZihfX2J1Zi0+c3B1dGModGhpcy0+d2lkZW4oKl9fcysrKSkpKQogICAgICByZXR1cm4g
ZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBf
VHJhaXRzPgpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCmJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPjo6cHV0KGNoYXJfdHlwZSBfX2MpCnsKICBzZW50cnkgX19zZW50cnkoKnRo
aXMpOwogIGJvb2wgX19mYWlsZWQgPSB0cnVlOwoKICBpZiAoX19zZW50cnkpIHsKICAgIHRyeSB7
CiAgICAgIF9fZmFpbGVkID0gdGhpcy0+X1NfZW9mKHRoaXMtPnJkYnVmKCktPnNwdXRjKF9fYykp
OwogICAgfQogICAgY2F0Y2goLi4uKSB7CiAgICAgIHRoaXMtPl9NX2hhbmRsZV9leGNlcHRpb24o
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICB9CiAgfQoKICBpZiAoX19mYWlsZWQpCiAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKCiAgcmV0dXJuICp0aGlzOwp9CgoKdGVtcGxhdGUg
PGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JgpiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OndyaXRlKGNvbnN0IGNoYXJfdHlw
ZSogX19zLCBzdHJlYW1zaXplIF9fbikKewogIHNlbnRyeSBfX3NlbnRyeSgqdGhpcyk7CiAgYm9v
bCBfX2ZhaWxlZCA9IHRydWU7CgogIGlmIChfX3NlbnRyeSkgewogICAgdHJ5IHsKICAgICAgX19m
YWlsZWQgPSB0aGlzLT5yZGJ1ZigpLT5zcHV0bihfX3MsIF9fbikgIT0gX19uOwogICAgfQogICAg
Y2F0Y2goLi4uKSB7CiAgICAgIHRoaXMtPl9NX2hhbmRsZV9leGNlcHRpb24oaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICB9CiAgfQoKICBpZiAoX19mYWlsZWQpCiAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsKCiAgcmV0dXJuICp0aGlzOwp9Cgp9CiMgMzUwICIuLi9zdGxwb3J0L3N0
bC9fb3N0cmVhbS5oIiAyCiMgMzIgIi4uL3N0bHBvcnQvc3RsL19pc3RyZWFtLmgiIDIKIyA0MCAi
Li4vc3RscG9ydC9zdGwvX2lzdHJlYW0uaCIKbmFtZXNwYWNlIF9TVEwgewoKdGVtcGxhdGUgPGNs
YXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX051bWJlcj4KaW9zX2Jhc2U6Omlvc3Rh
dGUKX01fZ2V0X251bShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fdGhhdCwgX051
bWJlciYgX192YWwpOwoKCgoKCgpzdHJ1Y3QgX05vX1NraXBfV1Mge307Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgpib29sIF9NX2luaXRfc2tpcChiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mIF9faXMpOwp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBf
VHJhaXRzPgpib29sIF9NX2luaXRfbm9za2lwKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYgX19pcyk7CiMgNjYgIi4uL3N0bHBvcnQvc3RsL19pc3RyZWFtLmgiCnRlbXBsYXRlIDxjbGFz
cyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CmNsYXNzIGJhc2ljX2lzdHJlYW0gOiB2aXJ0dWFsIHB1
YmxpYyBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiB7CnB1YmxpYzoKCiAgdHlwZWRlZiBfQ2hh
clQgY2hhcl90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5
cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogIHR5cGVkZWYgX1RyYWl0
cyB0cmFpdHNfdHlwZTsKICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+IF9CYXNp
Y19pb3M7CiAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX1NlbGY7Cgog
IHR5cGVkZWYgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4mICggKl9faW9zX2ZuKShiYXNpY19p
b3M8X0NoYXJULCBfVHJhaXRzPiYpOwogIHR5cGVkZWYgaW9zX2Jhc2UmICggKl9faW9zX2Jhc2Vf
Zm4pKGlvc19iYXNlJik7CiAgdHlwZWRlZiBfU2VsZiYgKCAqX19pc3RyZWFtX2ZuKShfU2VsZiYp
OwoKcHVibGljOgogIGV4cGxpY2l0IGJhc2ljX2lzdHJlYW0oYmFzaWNfc3RyZWFtYnVmPF9DaGFy
VCwgX1RyYWl0cz4qIF9fYnVmKSA6CiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPigpLCBf
TV9nY291bnQoMCkgewogICAgdGhpcy0+aW5pdChfX2J1Zik7CiAgfQogIH5iYXNpY19pc3RyZWFt
KCkge307CgpwdWJsaWM6CgpwdWJsaWM6CgogIF9TZWxmJiBvcGVyYXRvcj4+IChfX2lzdHJlYW1f
Zm4gX19mKSB7IHJldHVybiBfX2YoKnRoaXMpOyB9CiAgX1NlbGYmIG9wZXJhdG9yPj4gKF9faW9z
X2ZuIF9fZikgeyBfX2YoKnRoaXMpOyByZXR1cm4gKnRoaXM7IH0KICBfU2VsZiYgb3BlcmF0b3I+
PiAoX19pb3NfYmFzZV9mbiBfX2YpIHsgX19mKCp0aGlzKTsgcmV0dXJuICp0aGlzOyB9CgpwdWJs
aWM6CiAgX1NlbGYmIG9wZXJhdG9yPj4gKHNob3J0JiBfX3ZhbCkgewogICAgbG9uZyBfX2x2YWw7
CiAgICB1bnNpZ25lZCBzaG9ydCBfX3V2YWw7CiAgIF9NX2dldF9udW0oKnRoaXMsIF9fbHZhbCk7
CiAgICBfX3ZhbCA9IHN0YXRpY19jYXN0PHNob3J0PihfX2x2YWwpOwogICAgX191dmFsID0gX19s
dmFsOwoKCiAgICBpZiAoKF9fdmFsICE9IF9fbHZhbCkgJiYgKChsb25nKV9fdXZhbCAhPSBfX2x2
YWwpKQogICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICByZXR1cm4g
KnRoaXM7CiAgfQogIF9TZWxmJiBvcGVyYXRvcj4+IChpbnQmIF9fdmFsKSB7CiAgICBsb25nIF9f
bHZhbDsKICAgIHVuc2lnbmVkIGludCBfX3V2YWw7CiAgICBfTV9nZXRfbnVtKCp0aGlzLCBfX2x2
YWwpOwogICAgX192YWwgPSBfX2x2YWw7CiAgICBfX3V2YWwgPSBfX2x2YWw7CgoKICAgIGlmICgo
X192YWwgIT0gX19sdmFsKSAmJiAoKGxvbmcpX191dmFsICE9IF9fbHZhbCkpCiAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1Nl
bGYmIG9wZXJhdG9yPj4gKHVuc2lnbmVkIHNob3J0JiBfX3ZhbCkgeyBfTV9nZXRfbnVtKCp0aGlz
LCBfX3ZhbCk7IHJldHVybiAqdGhpczsgfQogIF9TZWxmJiBvcGVyYXRvcj4+ICh1bnNpZ25lZCBp
bnQmIF9fdmFsKSB7IF9NX2dldF9udW0oKnRoaXMsIF9fdmFsKTsgcmV0dXJuICp0aGlzOyB9CiAg
X1NlbGYmIG9wZXJhdG9yPj4gKGxvbmcmIF9fdmFsKSB7IF9NX2dldF9udW0oKnRoaXMsIF9fdmFs
KTsgcmV0dXJuICp0aGlzOyB9CiAgX1NlbGYmIG9wZXJhdG9yPj4gKHVuc2lnbmVkIGxvbmcmIF9f
dmFsKSB7IF9NX2dldF9udW0oKnRoaXMsIF9fdmFsKTsgcmV0dXJuICp0aGlzOyB9CgogIF9TZWxm
JiBvcGVyYXRvcj4+IChsb25nIGxvbmcmIF9fdmFsKSB7IF9NX2dldF9udW0oKnRoaXMsIF9fdmFs
KTsgcmV0dXJuICp0aGlzOyB9CiAgX1NlbGYmIG9wZXJhdG9yPj4gKHVuc2lnbmVkIGxvbmcgbG9u
ZyYgX192YWwpIHsgX01fZ2V0X251bSgqdGhpcywgX192YWwpOyByZXR1cm4gKnRoaXM7IH0KCiAg
X1NlbGYmIG9wZXJhdG9yPj4gKGZsb2F0JiBfX3ZhbCkgeyBfTV9nZXRfbnVtKCp0aGlzLCBfX3Zh
bCk7IHJldHVybiAqdGhpczsgfQogIF9TZWxmJiBvcGVyYXRvcj4+IChkb3VibGUmIF9fdmFsKSB7
IF9NX2dldF9udW0oKnRoaXMsIF9fdmFsKTsgcmV0dXJuICp0aGlzOyB9CgogIF9TZWxmJiBvcGVy
YXRvcj4+IChsb25nIGRvdWJsZSYgX192YWwpIHsgX01fZ2V0X251bSgqdGhpcywgX192YWwpOyBy
ZXR1cm4gKnRoaXM7IH0KCgogIF9TZWxmJiBvcGVyYXRvcj4+IChib29sJiBfX3ZhbCkgeyBfTV9n
ZXRfbnVtKCp0aGlzLCBfX3ZhbCk7IHJldHVybiAqdGhpczsgfQoKICBfU2VsZiYgb3BlcmF0b3I+
PiAodm9pZComIF9fdmFsKSB7IF9NX2dldF9udW0oKnRoaXMsIF9fdmFsKTsgcmV0dXJuICp0aGlz
OyB9CgpwdWJsaWM6CiAgX1NlbGYmIG9wZXJhdG9yPj4oYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg
X1RyYWl0cz4qKTsKCnB1YmxpYzoKICBzdHJlYW1zaXplIGdjb3VudCgpIGNvbnN0IHsgcmV0dXJu
IF9NX2djb3VudDsgfQogIGludF90eXBlIHBlZWsoKTsKCnB1YmxpYzoKICBpbnRfdHlwZSBnZXQo
KTsKICBfU2VsZiYgZ2V0KGNoYXJfdHlwZSYgX19jKTsKCnB1YmxpYzoKICBfU2VsZiYgZ2V0KGNo
YXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pOwogIF9TZWxm
JiBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgeyByZXR1cm4gZ2V0KF9f
cywgX19uLCB0aGlzLT53aWRlbignXG4nKSk7IH0KCnB1YmxpYzoKICBfU2VsZiYgZ2V0KGJhc2lj
X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+JiBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAg
Y2hhcl90eXBlIF9fZGVsaW0pOwogIF9TZWxmJiBnZXQoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg
X1RyYWl0cz4mIF9fYnVmKQogICAgeyByZXR1cm4gZ2V0KF9fYnVmLCB0aGlzLT53aWRlbignXG4n
KSk7IH0KCnB1YmxpYzoKICBfU2VsZiYgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6
ZSBfX24sIGNoYXJfdHlwZSBkZWxpbSk7CiAgX1NlbGYmIGdldGxpbmUoY2hhcl90eXBlKiBfX3Ms
IHN0cmVhbXNpemUgX19uKQogICAgeyByZXR1cm4gZ2V0bGluZShfX3MsIF9fbiwgdGhpcy0+d2lk
ZW4oJ1xuJykpOyB9CgpwdWJsaWM6CiAgX1NlbGYmIGlnbm9yZSgpOwogIF9TZWxmJiBpZ25vcmUo
c3RyZWFtc2l6ZSBfX24pOwoKCgogIF9TZWxmJiBpZ25vcmUoc3RyZWFtc2l6ZSBfX24sIGludF90
eXBlIF9fZGVsaW0pOwoKICBfU2VsZiYgcmVhZChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBf
X24pOwogIHN0cmVhbXNpemUgcmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19u
KTsKCnB1YmxpYzoKICBfU2VsZiYgcHV0YmFjayhjaGFyX3R5cGUgX19jKTsKICBfU2VsZiYgdW5n
ZXQoKTsKCnB1YmxpYzoKICBpbnQgc3luYygpOwoKICBwb3NfdHlwZSB0ZWxsZygpOwogIF9TZWxm
JiBzZWVrZyhwb3NfdHlwZSBfX3Bvcyk7CiAgX1NlbGYmIHNlZWtnKG9mZl90eXBlLCBpb3NfYmFz
ZTo6c2Vla2Rpcik7CgpwdWJsaWM6CiAgdm9pZCBfTV9mb3JtYXR0ZWRfZ2V0KF9DaGFyVCYgX19j
KTsKICB2b2lkIF9NX2Zvcm1hdHRlZF9nZXQoX0NoYXJUKiBfX3MpOwogIHZvaWQgX01fc2tpcF93
aGl0ZXNwYWNlKGJvb2wgX19zZXRfZmFpbGJpdCk7Cgpwcml2YXRlOgogIHN0cmVhbXNpemUgX01f
Z2NvdW50OwoKcHVibGljOgojIDIwOSAiLi4vc3RscG9ydC9zdGwvX2lzdHJlYW0uaCIKICBjbGFz
cyBzZW50cnkgewogICAgdHlwZWRlZiBzZW50cnkgX1NlbGY7CgoKICBwcml2YXRlOgogICAgY29u
c3QgYm9vbCBfTV9vazsKCgogIHB1YmxpYzoKICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlw
ZTsKCiAgICBleHBsaWNpdCBzZW50cnkoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBf
X2lzLAogICAgICAgICAgICAgICAgICAgIGJvb2wgX19ub3NraXB3cyA9IGZhbHNlKSA6CiAgICAg
IF9NX29rKChfX25vc2tpcHdzIHx8ICEoX19pcy5mbGFncygpICYgaW9zX2Jhc2U6OnNraXB3cykp
ID8gX01faW5pdF9ub3NraXAoX19pcykgOiBfTV9pbml0X3NraXAoX19pcykgKQoKICAgICAge30K
CgoKICAgIHNlbnRyeShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsIF9Ob19T
a2lwX1dTKSA6CiAgICAgIF9NX29rKF9NX2luaXRfbm9za2lwKF9faXMpKSB7fQoKICAgIH5zZW50
cnkoKSB7fQoKICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBfTV9vazsgfQoKICBw
cml2YXRlOgogICAgc2VudHJ5KGNvbnN0IF9TZWxmJikgOiBfTV9vayhmYWxzZSkge30KICAgIHZv
aWQgb3BlcmF0b3I9KGNvbnN0IF9TZWxmJikge30KICB9OwoKCgoKCn07CiMgMjU4ICIuLi9zdGxw
b3J0L3N0bC9faXN0cmVhbS5oIgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRz
PgppbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgpvcGVyYXRvcj4+KGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpIHsKICBfX2luLl9N
X2Zvcm1hdHRlZF9nZXQoX19jKTsKICByZXR1cm4gX19pbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U
cmFpdHM+CmlubGluZSBiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgpvcGVyYXRvcj4+KGJh
c2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXImIF9fYykgewog
IF9faW4uX01fZm9ybWF0dGVkX2dldChyZWludGVycHJldF9jYXN0PGNoYXImPihfX2MpKTsKICBy
ZXR1cm4gX19pbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcmFpdHM+CmlubGluZSBiYXNpY19pc3Ry
ZWFtPGNoYXIsIF9UcmFpdHM+JgpvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0
cz4mIF9faW4sIHNpZ25lZCBjaGFyJiBfX2MpIHsKICBfX2luLl9NX2Zvcm1hdHRlZF9nZXQocmVp
bnRlcnByZXRfY2FzdDxjaGFyJj4oX19jKSk7CiAgcmV0dXJuIF9faW47Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CmlubGluZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mCm9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lu
LCBfQ2hhclQqIF9fcykgewogIF9faW4uX01fZm9ybWF0dGVkX2dldChfX3MpOwogIHJldHVybiBf
X2luOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4KaW5saW5lIGJhc2ljX2lzdHJlYW08Y2hh
ciwgX1RyYWl0cz4mCm9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19p
biwgdW5zaWduZWQgY2hhciogX19zKSB7CiAgX19pbi5fTV9mb3JtYXR0ZWRfZ2V0KHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KF9fcykpOwogIHJldHVybiBfX2luOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RyYWl0cz4KaW5saW5lIGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCm9wZXJhdG9yPj4o
YmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNoYXIqIF9fcykgewog
IF9faW4uX01fZm9ybWF0dGVkX2dldChyZWludGVycHJldF9jYXN0PGNoYXIqPihfX3MpKTsKICBy
ZXR1cm4gX19pbjsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgpi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCndzKGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYgX19pcyk7CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRz
PgpjbGFzcyBiYXNpY19pb3N0cmVhbQogIDogcHVibGljIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiwKICAgIHB1YmxpYyBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4KewpwdWJs
aWM6CiAgdHlwZWRlZiBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiBfQmFzaWNfaW9zOwoKICBl
eHBsaWNpdCBiYXNpY19pb3N0cmVhbShiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiog
X19idWYpOwogIHZpcnR1YWwgfmJhc2ljX2lvc3RyZWFtKCk7Cn07CiMgMzI4ICIuLi9zdGxwb3J0
L3N0bC9faXN0cmVhbS5oIgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgpi
YXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX01fZ2V0X2lzdHJlYW1idWYoYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzKQp7CiAgcmV0dXJuIF9faXMucmRidWYoKTsK
fQoKfQoKCiMgMSAiLi4vc3RscG9ydC9zdGwvX2lzdHJlYW0uYyIgMQojIDQyICIuLi9zdGxwb3J0
L3N0bC9faXN0cmVhbS5jIgpuYW1lc3BhY2UgX1NUTCB7CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Ry
YWl0cz4Kc3RydWN0IF9Jc19ub3Rfd3NwYWNlIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6
OmNoYXJfdHlwZSBhcmd1bWVudF90eXBlOwogIHR5cGVkZWYgYm9vbCByZXN1bHRfdHlwZTsKCiAg
Y29uc3QgY3R5cGU8YXJndW1lbnRfdHlwZT4qIF9NX2N0eXBlOwoKICBfSXNfbm90X3dzcGFjZShj
b25zdCBjdHlwZTxhcmd1bWVudF90eXBlPiogX19jX3R5cGUpIDogX01fY3R5cGUoX19jX3R5cGUp
IHt9CiAgYm9vbCBvcGVyYXRvcigpKGFyZ3VtZW50X3R5cGUgX19jKSBjb25zdAogICAgeyByZXR1
cm4gIV9NX2N0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKTsgfQp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9UcmFpdHM+CnN0cnVjdCBfSXNfd3NwYWNlX251bGwgewogIHR5cGVkZWYgdHlwZW5h
bWUgX1RyYWl0czo6Y2hhcl90eXBlIGFyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBib29sIHJlc3Vs
dF90eXBlOwoKICBjb25zdCBjdHlwZTxhcmd1bWVudF90eXBlPiogX01fY3R5cGU7CgogIF9Jc193
c3BhY2VfbnVsbChjb25zdCBjdHlwZTxhcmd1bWVudF90eXBlPiogX19jX3R5cGUpIDogX01fY3R5
cGUoX19jX3R5cGUpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGFyZ3VtZW50X3R5cGUgX19jKSBjb25z
dCB7CiAgICByZXR1cm4gX1RyYWl0czo6ZXEoX19jLCBhcmd1bWVudF90eXBlKCkpIHx8CiAgICAg
ICAgICAgX01fY3R5cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOwogIH0KfTsKCnRlbXBs
YXRlIDxjbGFzcyBfVHJhaXRzPgpzdHJ1Y3QgX1NjYW5fZm9yX3dzcGFjZSB7CiAgdHlwZWRlZiB0
eXBlbmFtZSBfVHJhaXRzOjpjaGFyX3R5cGUgY2hhcl90eXBlOwogIHR5cGVkZWYgY2hhcl90eXBl
KiBmaXJzdF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgY2hhcl90eXBlKiBzZWNvbmRfYXJndW1l
bnRfdHlwZTsKICB0eXBlZGVmIGNoYXJfdHlwZSogcmVzdWx0X3R5cGU7CgogIGNvbnN0IGN0eXBl
PGNoYXJfdHlwZT4qIF9NX2N0eXBlOwoKICBfU2Nhbl9mb3Jfd3NwYWNlKGNvbnN0IGN0eXBlPGNo
YXJfdHlwZT4qIF9fY3R5cGUpIDogX01fY3R5cGUoX19jdHlwZSkge30KICBjb25zdCBjaGFyX3R5
cGUqCiAgb3BlcmF0b3IoKShjb25zdCBjaGFyX3R5cGUqIF9fZmlyc3QsIGNvbnN0IGNoYXJfdHlw
ZSogX19sYXN0KSBjb25zdCB7CiAgICByZXR1cm4gX01fY3R5cGUtPnNjYW5faXMoY3R5cGVfYmFz
ZTo6c3BhY2UsIF9fZmlyc3QsIF9fbGFzdCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcmFp
dHM+CnN0cnVjdCBfU2Nhbl93c3BhY2VfbnVsbCB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRz
OjpjaGFyX3R5cGUgY2hhcl90eXBlOwogIHR5cGVkZWYgY2hhcl90eXBlKiBmaXJzdF9hcmd1bWVu
dF90eXBlOwogIHR5cGVkZWYgY2hhcl90eXBlKiBzZWNvbmRfYXJndW1lbnRfdHlwZTsKICB0eXBl
ZGVmIGNoYXJfdHlwZSogcmVzdWx0X3R5cGU7CgogIGNvbnN0IGN0eXBlPGNoYXJfdHlwZT4qIF9N
X2N0eXBlOwoKICBfU2Nhbl93c3BhY2VfbnVsbChjb25zdCBjdHlwZTxjaGFyX3R5cGU+KiBfX2Nf
dHlwZSkgOiBfTV9jdHlwZShfX2NfdHlwZSkge30KICBjb25zdCBjaGFyX3R5cGUqCiAgb3BlcmF0
b3IoKShjb25zdCBjaGFyX3R5cGUqIF9fZmlyc3QsIGNvbnN0IGNoYXJfdHlwZSogX19sYXN0KSBj
b25zdCB7CiAgICBfX2xhc3QgPSBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgX0VxX2NoYXJfYm91bmQ8X1RyYWl0cz4oY2hhcl90eXBlKCkpKTsKICAgIHJldHVy
biBfTV9jdHlwZS0+c2Nhbl9pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19maXJzdCwgX19sYXN0KTsK
ICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4Kc3RydWN0IF9TY2FuX2Zvcl9ub3Rfd3Nw
YWNlIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZSBjaGFyX3R5cGU7CiAg
dHlwZWRlZiBjaGFyX3R5cGUqIGZpcnN0X2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBjaGFyX3R5
cGUqIHNlY29uZF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgY2hhcl90eXBlKiByZXN1bHRfdHlw
ZTsKCiAgY29uc3QgY3R5cGU8Y2hhcl90eXBlPiogX01fY3R5cGU7CgogIF9TY2FuX2Zvcl9ub3Rf
d3NwYWNlKGNvbnN0IGN0eXBlPGNoYXJfdHlwZT4qIF9fY190eXBlKSA6IF9NX2N0eXBlKF9fY190
eXBlKSB7fQogIGNvbnN0IGNoYXJfdHlwZSoKICBvcGVyYXRvcigpKGNvbnN0IGNoYXJfdHlwZSog
X19maXJzdCwgY29uc3QgY2hhcl90eXBlKiBfX2xhc3QpIGNvbnN0IHsKICAgIHJldHVybiBfTV9j
dHlwZS0+c2Nhbl9ub3QoY3R5cGVfYmFzZTo6c3BhY2UsIF9fZmlyc3QsIF9fbGFzdCk7CiAgfQp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9UcmFpdHM+CnN0cnVjdCBfU2Nhbl9mb3JfY2hhcl92YWwKewog
IHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6Y2hhcl90eXBlIGNoYXJfdHlwZTsKICB0eXBlZGVm
IGNoYXJfdHlwZSogZmlyc3RfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIGNoYXJfdHlwZSogc2Vj
b25kX2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBjaGFyX3R5cGUqIHJlc3VsdF90eXBlOwoKICBj
aGFyX3R5cGUgX01fdmFsOwoKICBfU2Nhbl9mb3JfY2hhcl92YWwoY2hhcl90eXBlIF9fdmFsdWUp
IDogX01fdmFsKF9fdmFsdWUpIHt9CgogIGNvbnN0IGNoYXJfdHlwZSoKICBvcGVyYXRvcigpKGNv
bnN0IGNoYXJfdHlwZSogX19maXJzdCwgY29uc3QgY2hhcl90eXBlKiBfX2xhc3QpIGNvbnN0IHsK
ICAgIHJldHVybiBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwgX0VxX2NoYXJfYm91bmQ8X1RyYWl0
cz4oX01fdmFsKSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcmFpdHM+CnN0cnVjdCBfU2Nh
bl9mb3JfaW50X3ZhbAp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpjaGFyX3R5cGUgY2hh
cl90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAg
dHlwZWRlZiBjaGFyX3R5cGUqIGZpcnN0X2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBjaGFyX3R5
cGUqIHNlY29uZF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgY2hhcl90eXBlKiByZXN1bHRfdHlw
ZTsKCiAgaW50X3R5cGUgX01fdmFsOwoKICBfU2Nhbl9mb3JfaW50X3ZhbChpbnRfdHlwZSBfX3Zh
bHVlKSA6IF9NX3ZhbChfX3ZhbHVlKSB7fQoKICBjb25zdCBjaGFyX3R5cGUqCiAgb3BlcmF0b3Io
KShjb25zdCBjaGFyX3R5cGUqIF9fZmlyc3QsIGNvbnN0IGNoYXJfdHlwZSogX19sYXN0KSBjb25z
dCB7CiAgICByZXR1cm4gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICBfRXFfaW50X2JvdW5kPF9UcmFpdHM+KF9NX3ZhbCkpOwogIH0KfTsKCgoKCnRlbXBsYXRlIDxj
bGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CmJvb2wKX19wdXNoYmFjayhiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPiogX19idWYsIF9DaGFyVCBfX2MpCnsKICBib29sIHJldDsKICB0
cnkgewogICAgY29uc3QgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgX19lb2YgPSBfVHJhaXRz
Ojplb2YoKTsKICAgIHJldCA9ICFfVHJhaXRzOjplcV9pbnRfdHlwZShfX2J1Zi0+c3B1dGJhY2tj
KF9fYyksIF9fZW9mKTsKICB9CiAgY2F0Y2goLi4uKSB7CiAgICByZXQgPSBmYWxzZTsKICB9CiAg
cmV0dXJuIHJldDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgp3cyhiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mIF9faXMpCnsKICB0eXBlZGVmIHR5cGVuYW1lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPjo6c2VudHJ5IF9TZW50cnk7CiAgX1NlbnRyeSBfX3NlbnRyeShfX2lzLCBfTm9fU2tp
cF9XUygpKTsKICBpZiAoX19zZW50cnkpCiAgICBfX2lzLl9NX3NraXBfd2hpdGVzcGFjZShmYWxz
ZSk7CiAgcmV0dXJuIF9faXM7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJh
aXRzPgpib29sCl9NX2luaXRfc2tpcChiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9f
aXMpIHsKICBpZiAoX19pcy5nb29kKCkpIHsKICAgIGlmIChfX2lzLnRpZSgpKQogICAgICBfX2lz
LnRpZSgpLT5mbHVzaCgpOwoKICAgIF9faXMuX01fc2tpcF93aGl0ZXNwYWNlKHRydWUpOwogIH0K
CiAgaWYgKCFfX2lzLmdvb2QoKSkgewogICAgX19pcy5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJp
dCk7CiAgICByZXR1cm4gZmFsc2U7CiAgfSBlbHNlCiAgICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KYm9vbApfTV9pbml0X25vc2tpcChiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMpewogIGlmIChfX2lzLmdvb2QoKSkgewog
ICAgaWYgKF9faXMudGllKCkpCiAgICAgIF9faXMudGllKCktPmZsdXNoKCk7CgogICAgaWYgKCFf
X2lzLnJkYnVmKCkpCiAgICAgIF9faXMuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgfQog
IGVsc2UKICAgIF9faXMuc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogIHJldHVybiBfX2lz
Lmdvb2QoKTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNs
YXNzIF9OdW1iZXI+Cmlvc19iYXNlOjppb3N0YXRlCl9NX2dldF9udW0oYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JiBfX3RoYXQsIF9OdW1iZXImIF9fdmFsKQp7CiAgdHlwZWRlZiB0eXBl
bmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeSBfU2VudHJ5OwogIGlv
c19iYXNlOjppb3N0YXRlIF9fZXJyID0gMDsKICBfU2VudHJ5IF9fc2VudHJ5KCBfX3RoYXQgKTsK
ICBpZiAoX19zZW50cnkpIHsKICAgIHR5cGVkZWYgbnVtX2dldDxfQ2hhclQsIGlzdHJlYW1idWZf
aXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiA+IF9OdW1fZ2V0OwogICAgdHJ5IHsKICAgICAgKChj
b25zdCBfTnVtX2dldCYpdXNlX2ZhY2V0PF9OdW1fZ2V0PihfX3RoYXQuZ2V0bG9jKCkpKS5nZXQo
aXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+KF9fdGhhdC5yZGJ1ZigpKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIF9fdGhhdCwgX19lcnIsIF9f
dmFsKTsKICAgIH0KICAgIGNhdGNoKC4uLikgewogICAgICBfX3RoYXQuX01faGFuZGxlX2V4Y2Vw
dGlvbihpb3NfYmFzZTo6YmFkYml0KTsKICAgIH0KICAgIGlmIChfX2VycikgX190aGF0LnNldHN0
YXRlKF9fZXJyKTsKICB9CiAgcmV0dXJuIF9fZXJyOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0No
YXJULCBjbGFzcyBfVHJhaXRzPgp0eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46OmludF90eXBlCmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cGVlaygpCnsKICB0
eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBfX3RtcCA9IF9UcmFpdHM6OmVvZigpOwoKICB0aGlz
LT5fTV9nY291bnQgPSAwOwogIHNlbnRyeSBfX3NlbnRyeSgqdGhpcywgX05vX1NraXBfV1MoKSk7
CgogIGlmIChfX3NlbnRyeSkgewogICAgdHJ5IHsKICAgICAgX190bXAgPSB0aGlzLT5yZGJ1Zigp
LT5zZ2V0YygpOwogICAgfQogICAgY2F0Y2goLi4uKSB7CiAgICAgIHRoaXMtPl9NX2hhbmRsZV9l
eGNlcHRpb24oaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICB9CiAgICBpZiAodGhpcy0+X1NfZW9mKF9f
dG1wKSkKICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgfQoKICByZXR1
cm4gX190bXA7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgp0eXBl
bmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCmJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPjo6Z2V0KCkKewogIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBl
IF9fdG1wID0gX1RyYWl0czo6ZW9mKCk7CiAgc2VudHJ5IF9fc2VudHJ5KCp0aGlzLCBfTm9fU2tp
cF9XUygpKTsKICB0aGlzLT5fTV9nY291bnQgPSAwOwoKICBpZiAoX19zZW50cnkpIHsKICAgIHRy
eSB7CiAgICAgIF9fdG1wID0gdGhpcy0+cmRidWYoKS0+c2J1bXBjKCk7CiAgICB9CiAgICBjYXRj
aCguLi4pIHsKICAgICAgdGhpcy0+X01faGFuZGxlX2V4Y2VwdGlvbihpb3NfYmFzZTo6YmFkYml0
KTsKICAgIH0KCiAgICBpZiAoIXRoaXMtPl9TX2VvZihfX3RtcCkpCiAgICAgIHRoaXMtPl9NX2dj
b3VudCA9IDE7CiAgfQoKICBpZiAoX01fZ2NvdW50ID09IDApCiAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICByZXR1cm4gX190bXA7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CmJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiYKYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpnZXQoX0NoYXJU
JiBfX2MpCnsKICBzZW50cnkgX19zZW50cnkoKnRoaXMsIF9Ob19Ta2lwX1dTKCkpOwogIHRoaXMt
Pl9NX2djb3VudCA9IDA7CgogIGlmIChfX3NlbnRyeSkgewogICAgdHlwZW5hbWUgX1RyYWl0czo6
aW50X3R5cGUgX190bXAgPSBfVHJhaXRzOjplb2YoKTsKICAgIHRyeSB7CiAgICAgIF9fdG1wID0g
dGhpcy0+cmRidWYoKS0+c2J1bXBjKCk7CiAgICB9CiAgICBjYXRjaCguLi4pIHsKICAgICAgdGhp
cy0+X01faGFuZGxlX2V4Y2VwdGlvbihpb3NfYmFzZTo6YmFkYml0KTsKICAgIH0KCiAgICBpZiAo
IXRoaXMtPl9TX2VvZihfX3RtcCkpIHsKICAgICAgdGhpcy0+X01fZ2NvdW50ID0gMTsKICAgICAg
X19jID0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fdG1wKTsKICAgIH0KICB9CgogIGlmICh0aGlz
LT5fTV9nY291bnQgPT0gMCkKICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBp
b3NfYmFzZTo6ZmFpbGJpdCk7CgogIHJldHVybiAqdGhpczsKfQoKCgoKCgoKdGVtcGxhdGUgPGNs
YXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Omlnbm9yZSgpCnsKICBzZW50cnkgX19z
ZW50cnkoKnRoaXMsIF9Ob19Ta2lwX1dTKCkpOwogIHRoaXMtPl9NX2djb3VudCA9IDA7CgogIGlm
IChfX3NlbnRyeSkgewogICAgaW50X3R5cGUgX19jOwogICAgdHJ5IHsKICAgICAgX19jID0gdGhp
cy0+cmRidWYoKS0+c2J1bXBjKCk7CiAgICB9CiAgICBjYXRjaCguLi4pIHsKICAgICAgdGhpcy0+
X01faGFuZGxlX2V4Y2VwdGlvbihpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKICAgIGlmICghdGhpcy0+X1NfZW9mKF9fYykpCiAgICAgIHRoaXMtPl9NX2djb3Vu
dCA9IDE7CiAgICBlbHNlCiAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwog
IH0KCiAgcmV0dXJuICp0aGlzOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9U
cmFpdHM+CmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjpwdXRiYWNrKF9DaGFyVCBfX2MpIHsKICB0aGlzLT5fTV9nY291bnQgPSAw
OwogIHNlbnRyeSBfX3NlbnRyeSgqdGhpcywgX05vX1NraXBfV1MoKSk7CgogIGlmIChfX3NlbnRy
eSkgewogICAgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgX190bXAgPSBfVHJhaXRzOjplb2Yo
KTsKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX2J1ZiA9IHRoaXMtPnJk
YnVmKCk7CgogICAgaWYgKF9fYnVmKSB7CiAgICAgIHRyeSB7CiAgICAgICAgX190bXAgPSBfX2J1
Zi0+c3B1dGJhY2tjKF9fYyk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKSB7CiAgICAgICAgdGhp
cy0+X01faGFuZGxlX2V4Y2VwdGlvbihpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgfQogICAgfQog
ICAgaWYgKHRoaXMtPl9TX2VvZihfX3RtcCkpCiAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOwogIH0KICBlbHNlCiAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJp
dCk7CgogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1Ry
YWl0cz4KYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OnVuZ2V0KCkgewogIHRoaXMtPl9NX2djb3VudCA9IDA7CgogIHNlbnRyeSBf
X3NlbnRyeSgqdGhpcywgX05vX1NraXBfV1MoKSk7CgogIGlmIChfX3NlbnRyeSkgewogICAgYmFz
aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fYnVmID0gdGhpcy0+cmRidWYoKTsKCiAg
ICBpZiAoX19idWYpIHsKICAgICAgdHJ5IHsKICAgICAgICBfQ2hhclQgX190bXA7CiAgICAgICAg
X190bXAgPSBfX2J1Zi0+c3VuZ2V0YygpOwogICAgICAgIGlmICh0aGlzLT5fU19lb2YoX190bXAp
KQogICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgIH0KICAg
ICAgY2F0Y2goLi4uKSB7CiAgICAgICAgdGhpcy0+X01faGFuZGxlX2V4Y2VwdGlvbihpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgfQogICAgfSBlbHNlCiAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogIH0KICBlbHNlCiAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFp
bGJpdCk7CgogIHJldHVybiAqdGhpczsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFz
cyBfVHJhaXRzPgppbnQgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzeW5jKCkgewog
IHNlbnRyeSBfX3NlbnRyeSgqdGhpcywgX05vX1NraXBfV1MoKSk7CgogIGJhc2ljX3N0cmVhbWJ1
ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX2J1ZiA9IHRoaXMtPnJkYnVmKCk7CiAgaWYgKF9fYnVmKSB7
CiAgICBpZiAoX19idWYtPnB1YnN5bmMoKSA9PSAtMSkgewogICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6YmFkYml0KTsKICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgZWxzZQogICAgICBy
ZXR1cm4gMDsKICB9CiAgZWxzZQogICAgcmV0dXJuIC0xOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0No
YXJULCBjbGFzcyBfVHJhaXRzPgp0eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46OnBvc190eXBlCmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6dGVsbGcoKSB7Cgog
IGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX2J1ZiA9IHRoaXMtPnJkYnVmKCk7
CiAgcmV0dXJuIChfX2J1ZiAmJiAhdGhpcy0+ZmFpbCgpKSA/IF9fYnVmLT5wdWJzZWVrb2ZmKDAs
IGlvc19iYXNlOjpjdXIsIGlvc19iYXNlOjppbikKICAgIDogcG9zX3R5cGUoLTEpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgpiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mCmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2Vla2cocG9zX3R5cGUg
X19wb3MpIHsKICBzZW50cnkgX19zZW50cnkoKnRoaXMsIF9Ob19Ta2lwX1dTKCkpOwoKICBiYXNp
Y19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19idWYgPSB0aGlzLT5yZGJ1ZigpOwogIGlm
ICghdGhpcy0+ZmFpbCgpICYmIF9fYnVmKQogICAgX19idWYtPnB1YnNlZWtwb3MoX19wb3MsIGlv
c19iYXNlOjppbik7CiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBj
bGFzcyBfVHJhaXRzPgpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCmJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPjo6c2Vla2cob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVr
ZGlyIF9fZGlyKQp7CiAgc2VudHJ5IF9fc2VudHJ5KCp0aGlzLCBfTm9fU2tpcF9XUygpKTsKCiAg
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fYnVmID0gdGhpcy0+cmRidWYoKTsK
ICBpZiAoIXRoaXMtPmZhaWwoKSAmJiBfX2J1ZikKICAgIF9fYnVmLT5wdWJzZWVrb2ZmKF9fb2Zm
LCBfX2RpciwgaW9zX2Jhc2U6OmluKTsKICByZXR1cm4gKnRoaXM7Cn0KCgoKdGVtcGxhdGUgPGNs
YXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4Kdm9pZCBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46Ol9NX2Zvcm1hdHRlZF9nZXQoX0NoYXJUJiBfX2MpCnsKCgogIHNlbnRyeSBfX3NlbnRy
eSgqdGhpcyk7CgogIGlmIChfX3NlbnRyeSkgewogICAgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5
cGUgX190bXAgPSBfVHJhaXRzOjplb2YoKTsKCiAgICB0cnkgewogICAgICBfX3RtcCA9IHRoaXMt
PnJkYnVmKCktPnNidW1wYygpOwogICAgfQogICAgY2F0Y2goLi4uKSB7CiAgICAgIHRoaXMtPl9N
X2hhbmRsZV9leGNlcHRpb24oaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgIHJldHVybjsKICAgIH0K
CiAgICBpZiAoIXRoaXMtPl9TX2VvZihfX3RtcCkpCiAgICAgIF9fYyA9IF9UcmFpdHM6OnRvX2No
YXJfdHlwZShfX3RtcCk7CiAgICBlbHNlCiAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpl
b2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgfQp9CiMgNTE3ICIuLi9zdGxwb3J0L3N0bC9f
aXN0cmVhbS5jIgp0ZW1wbGF0ZSA8IGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3Mg
X0lzX0RlbGltPgpzdHJlYW1zaXplCl9NX3JlYWRfdW5idWZmZXJlZChiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4qIF9fdGhhdCwgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4q
IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbXNpemUgX051bSwgX0NoYXJUKiBf
X3MsCiAgICAgICAgICAgICAgICAgICAgICAgX0lzX0RlbGltIF9faXNfZGVsaW0sCiAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBfX2V4dHJhY3RfZGVsaW0sIGJvb2wgX19hcHBlbmRfbnVsbCwK
ICAgICAgICAgICAgICAgICAgICAgICBib29sIF9faXNfZ2V0bGluZSkKewogIHN0cmVhbXNpemUg
X19uID0gMDsKICBpb3NfYmFzZTo6aW9zdGF0ZSBfX3N0YXR1cyA9IDA7CgogIHR5cGVkZWYgdHlw
ZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZSBpbnRfdHlwZTsK
CiAgdHJ5IHsKICAgIGludF90eXBlIF9fYyA9IF9fYnVmLT5zZ2V0YygpOwogICAgd2hpbGUgKHRy
dWUpIHsKICAgICAgaWYgKF9fdGhhdC0+X1NfZW9mKF9fYykpIHsKICAgICAgICBpZiAoX19uIDwg
X051bSB8fCBfX2lzX2dldGxpbmUpCiAgICAgICAgICBfX3N0YXR1cyB8PSBpb3NfYmFzZTo6ZW9m
Yml0OwogICAgICAgIGJyZWFrOwogICAgICB9CgogICAgICBlbHNlIGlmIChfX2lzX2RlbGltKF9f
YykpIHsKICAgICAgICBpZiAoX19leHRyYWN0X2RlbGltKSB7CiAgICAgICAgICBfX2J1Zi0+c2J1
bXBjKCk7CiAgICAgICAgICArK19fbjsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIH0K
CiAgICAgIGVsc2UgaWYgKF9fbiA9PSBfTnVtKSB7CiAgICAgICAgaWYgKF9faXNfZ2V0bGluZSkK
ICAgICAgICAgIF9fc3RhdHVzIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgIGJyZWFrOwog
ICAgICB9CgogICAgICAqX19zKysgPSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAg
KytfX247CiAgICAgIF9fYyA9IF9fYnVmLT5zbmV4dGMoKTsKICAgIH0KICB9CiAgY2F0Y2goLi4u
KSB7CiAgICBfX3RoYXQtPl9NX2hhbmRsZV9leGNlcHRpb24oaW9zX2Jhc2U6OmJhZGJpdCk7CiAg
ICAqX19zID0gX0NoYXJUKCk7CiAgICByZXR1cm4gX19uOwogIH0KCiAgaWYgKF9fYXBwZW5kX251
bGwpCiAgICAqX19zID0gX0NoYXJUKCk7CiAgaWYgKF9fc3RhdHVzKQogICAgX190aGF0LT5zZXRz
dGF0ZShfX3N0YXR1cyk7CiAgcmV0dXJuIF9fbjsKfQoKCgoKCnRlbXBsYXRlIDwgY2xhc3MgX0No
YXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfSXNfRGVsaW0sIGNsYXNzIF9TY2FuX0RlbGltPgpz
dHJlYW1zaXplCl9NX3JlYWRfYnVmZmVyZWQoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
KiBfX3RoYXQsIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX2J1ZiwKICAgICAg
ICAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfTnVtLCBfQ2hhclQqIF9fcywKICAgICAgICAgICAg
ICAgICAgICAgX0lzX0RlbGltIF9faXNfZGVsaW0sIF9TY2FuX0RlbGltIF9fc2Nhbl9kZWxpbSwK
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBfX2V4dHJhY3RfZGVsaW0sIGJvb2wgX19hcHBlbmRf
bnVsbCwKICAgICAgICAgICAgICAgICAgICAgYm9vbCBfX2lzX2dldGxpbmUpCnsKICBzdHJlYW1z
aXplIF9fbiA9IDA7CiAgaW9zX2Jhc2U6Omlvc3RhdGUgX19zdGF0dXMgPSAwOwogIGJvb2wgX19k
b25lID0gZmFsc2U7CgogIHRyeSB7CiAgICB3aGlsZSAoX19idWYtPl9NX2VncHRyKCkgIT0gX19i
dWYtPl9NX2dwdHIoKSAmJiAhX19kb25lKSB7CiAgICAgIGNvbnN0IF9DaGFyVCogX19maXJzdCA9
IF9fYnVmLT5fTV9ncHRyKCk7CiAgICAgIGNvbnN0IF9DaGFyVCogX19sYXN0ID0gX19idWYtPl9N
X2VncHRyKCk7CiAgICAgIHB0cmRpZmZfdCBfX3JlcXVlc3QgPSBfTnVtIC0gX19uOwoKICAgICAg
Y29uc3QgX0NoYXJUKiBfX3AgPSBfX3NjYW5fZGVsaW0oX19maXJzdCwgX19sYXN0KTsKICAgICAg
cHRyZGlmZl90IF9fY2h1bmsgPSAobWluKSAocHRyZGlmZl90KF9fcCAtIF9fZmlyc3QpLCBfX3Jl
cXVlc3QpOwogICAgICBfVHJhaXRzOjpjb3B5KF9fcywgX19maXJzdCwgX19jaHVuayk7CiAgICAg
IF9fcyArPSBfX2NodW5rOwogICAgICBfX24gKz0gX19jaHVuazsKICAgICAgX19idWYtPl9NX2di
dW1wKChpbnQpX19jaHVuayk7CgoKICAgICAgaWYgKF9fcCAhPSBfX2xhc3QgJiYgX19wIC0gX19m
aXJzdCA8PSBfX3JlcXVlc3QpIHsKICAgICAgICBpZiAoX19leHRyYWN0X2RlbGltKSB7CiAgICAg
ICAgICBfX24gKz0gMTsKICAgICAgICAgIF9fYnVmLT5fTV9nYnVtcCgxKTsKICAgICAgICB9CiAg
ICAgICAgX19kb25lID0gdHJ1ZTsKICAgICAgfQoKCiAgICAgIGVsc2UgaWYoX19uID09IF9OdW0p
IHsKCgogICAgICAgIGlmIChfX2lzX2dldGxpbmUpIHsKICAgICAgICAgIGlmIChfX2NodW5rID09
IF9fbGFzdCAtIF9fZmlyc3QpIHsKICAgICAgICAgICAgaWYgKF9fdGhhdC0+X1NfZW9mKF9fYnVm
LT5zZ2V0YygpKSkKICAgICAgICAgICAgICBfX3N0YXR1cyB8PSBpb3NfYmFzZTo6ZW9mYml0Owog
ICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3N0YXR1cyB8PSBpb3NfYmFz
ZTo6ZmFpbGJpdDsKICAgICAgICB9CiAgICAgICAgX19kb25lID0gdHJ1ZTsKICAgICAgfQoKCgog
ICAgICBlbHNlIHsKICAgICAgICBpZiAoX190aGF0LT5fU19lb2YoX19idWYtPnNnZXRjKCkpKSB7
CiAgICAgICAgICBfX3N0YXR1cyB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICAgICAgX19kb25l
ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgY2F0Y2goLi4uKSB7CiAgICBf
X3RoYXQtPl9NX2hhbmRsZV9leGNlcHRpb24oaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICBfX2RvbmUg
PSB0cnVlOwogIH0KCiAgaWYgKF9fZG9uZSkgewogICAgaWYgKF9fYXBwZW5kX251bGwpCiAgICAg
ICAgKl9fcyA9IF9DaGFyVCgpOwogICAgaWYgKF9fc3RhdHVzICE9IDApCiAgICAgIF9fdGhhdC0+
c2V0c3RhdGUoX19zdGF0dXMpOwogICAgcmV0dXJuIF9fbjsKICB9CgoKCgoKCiAgcmV0dXJuIF9f
biArIF9NX3JlYWRfdW5idWZmZXJlZChfX3RoYXQsIF9fYnVmLCBfTnVtIC0gX19uLCBfX3MsIF9f
aXNfZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2V4dHJhY3RfZGVs
aW0sX19hcHBlbmRfbnVsbCxfX2lzX2dldGxpbmUpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0No
YXJULCBjbGFzcyBfVHJhaXRzPgpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCmJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6Z2V0KF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9f
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NoYXJUIF9fZGVsaW0pIHsK
ICBzZW50cnkgX19zZW50cnkoKnRoaXMsIF9Ob19Ta2lwX1dTKCkpOwogIHRoaXMtPl9NX2djb3Vu
dCA9IDA7CgogIGlmIChfX3NlbnRyeSkgewogICAgaWYgKF9fbiA+IDApIHsKICAgICAgYmFzaWNf
c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fYnVmID0gdGhpcy0+cmRidWYoKTsKCiAgICAg
IGlmIChfX2J1Zi0+ZWdwdHIoKSAhPSBfX2J1Zi0+Z3B0cigpKQogICAgICAgIHRoaXMtPl9NX2dj
b3VudCA9CiAgICAgICAgICBfTV9yZWFkX2J1ZmZlcmVkKHRoaXMsIF9fYnVmLCBfX24gLSAxLCBf
X3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9FcV9jaGFyX2JvdW5kPF9UcmFpdHM+KF9f
ZGVsaW0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfU2Nhbl9mb3JfY2hhcl92YWw8X1Ry
YWl0cz4oX19kZWxpbSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCB0cnVlLCBm
YWxzZSk7CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5fTV9nY291bnQgPQogICAgICAgICAgX01f
cmVhZF91bmJ1ZmZlcmVkKHRoaXMsIF9fYnVmLCBfX24gLSAxLCBfX3MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0VxX2NoYXJfYm91bmQ8X1RyYWl0cz4oX19kZWxpbSksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIHRydWUsIGZhbHNlKTsKICAgIH0KICB9CgogIGlm
ICh0aGlzLT5fTV9nY291bnQgPT0gMCkKICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWls
Yml0KTsKCiAgcmV0dXJuICp0aGlzOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNz
IF9UcmFpdHM+CmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+OjpnZXRsaW5lKF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DaGFyVCBfX2RlbGltKSB7CiAg
c2VudHJ5IF9fc2VudHJ5KCp0aGlzLCBfTm9fU2tpcF9XUygpKTsKICB0aGlzLT5fTV9nY291bnQg
PSAwOwoKICBpZiAoX19zZW50cnkpIHsKICAgIGlmIChfX24gPiAwKSB7CiAgICAgIGJhc2ljX3N0
cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX2J1ZiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgIHRo
aXMtPl9NX2djb3VudCA9IF9fYnVmLT5lZ3B0cigpICE9IF9fYnVmLT5ncHRyKCkKICAgICAgICA/
IF9NX3JlYWRfYnVmZmVyZWQodGhpcywgX19idWYsIF9fbiAtIDEsIF9fcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0VxX2NoYXJfYm91bmQ8X1RyYWl0cz4oX19kZWxpbSksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9TY2FuX2Zvcl9jaGFyX3ZhbDxfVHJhaXRzPihfX2RlbGltKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgdHJ1ZSwgdHJ1ZSkKICAgICAgICA6IF9N
X3JlYWRfdW5idWZmZXJlZCh0aGlzLCBfX2J1ZiwgX19uIC0gMSwgX19zLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9FcV9jaGFyX2JvdW5kPF9UcmFpdHM+KF9fZGVsaW0pLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRydWUsIHRydWUsIHRydWUpOwogICAgfQogIH0KCiAgaWYg
KHRoaXMtPl9NX2djb3VudCA9PSAwKQogICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxi
aXQpOwoKICByZXR1cm4gKnRoaXM7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3Mg
X1RyYWl0cz4KYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgpiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz46OnJlYWQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQp7CiAg
c2VudHJ5IF9fc2VudHJ5KCp0aGlzLCBfTm9fU2tpcF9XUygpKTsKICB0aGlzLT5fTV9nY291bnQg
PSAwOwoKICBpZiAoX19zZW50cnkgJiYgIXRoaXMtPmVvZigpKSB7CiAgICBiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPipfX2J1ZiA9IHRoaXMtPnJkYnVmKCk7CiAgICBpZiAoX19idWYt
PmdwdHIoKSAhPSBfX2J1Zi0+ZWdwdHIoKSkKICAgICAgX01fZ2NvdW50CiAgICAgICAgPSBfTV9y
ZWFkX2J1ZmZlcmVkKHRoaXMsIF9fYnVmLCBfX24sIF9fcywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0NvbnN0YW50X3VuYXJ5X2Z1bjxib29sLCBpbnRfdHlwZT4oZmFsc2UpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBfUHJvamVjdDJuZDxjb25zdCBfQ2hhclQqLCBjb25zdCBfQ2hh
clQqPigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgZmFsc2UsIGZhbHNlKTsK
ICAgIGVsc2UKICAgICAgX01fZ2NvdW50CiAgICAgICAgPSBfTV9yZWFkX3VuYnVmZmVyZWQodGhp
cywgX19idWYsIF9fbiwgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db25zdGFu
dF91bmFyeV9mdW48Ym9vbCwgaW50X3R5cGU+KGZhbHNlKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKICB9CiAgZWxzZQogICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICBpZiAodGhpcy0+ZW9mKCkpCiAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICByZXR1cm4gKnRo
aXM7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CnN0cmVhbXNp
emUKYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpyZWFkc29tZShjaGFyX3R5cGUqIF9f
cywgc3RyZWFtc2l6ZSBfX25tYXgpCnsKICBzZW50cnkgX19zZW50cnkoKnRoaXMsIF9Ob19Ta2lw
X1dTKCkpOwogIHRoaXMtPl9NX2djb3VudCA9IDA7CgogIGlmIChfX3NlbnRyeSAmJiAhdGhpcy0+
ZW9mKCkgJiYgX19ubWF4ID49IDApIHsKCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh
aXRzPiogX19idWYgPSB0aGlzLT5yZGJ1ZigpOwogICAgc3RyZWFtc2l6ZSBfX2F2YWlsID0gX19i
dWYtPmluX2F2YWlsKCk7CgoKICAgIGlmIChfX2F2YWlsID09IC0xKQogICAgICB0aGlzLT5fTV9z
ZXRzdGF0ZV9ub3Rocm93KGlvc19iYXNlOjplb2ZiaXQpOwoKICAgIGVsc2UgaWYgKF9fYXZhaWwg
IT0gMCkgewoKICAgICAgaWYgKF9fYnVmLT5ncHRyKCkgIT0gX19idWYtPmVncHRyKCkpCiAgICAg
ICAgX01fZ2NvdW50CiAgICAgICAgICA9IF9NX3JlYWRfYnVmZmVyZWQodGhpcywgX19idWYsICht
aW4pIChfX2F2YWlsLCBfX25tYXgpLCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0NvbnN0YW50X3VuYXJ5X2Z1bjxib29sLCBpbnRfdHlwZT4oZmFsc2UpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9Qcm9qZWN0Mm5kPGNvbnN0IF9DaGFyVCosIGNvbnN0IF9DaGFyVCo+
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CiAg
ICAgIGVsc2UKICAgICAgICBfTV9nY291bnQKICAgICAgICAgID0gX01fcmVhZF91bmJ1ZmZlcmVk
KHRoaXMsIF9fYnVmLCAobWluKSAoX19hdmFpbCwgX19ubWF4KSwgX19zLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0NvbnN0YW50X3VuYXJ5X2Z1bjxib29sLCBpbnRfdHlwZT4oZmFs
c2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIGZhbHNlLCBmYWxzZSk7
CiAgICB9CiAgfQogIGVsc2UgewoKICAgIGlmICh0aGlzLT5lb2YoKSkKICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsKICAgIGVsc2UKICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogIH0KCgoKCiAgcmV0dXJuIF9N
X2djb3VudDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4Kdm9pZCBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Ol9NX2Zvcm1hdHRlZF9nZXQoX0NoYXJUKiBf
X3MpCnsKICBzZW50cnkgX19zZW50cnkoKnRoaXMpOwoKICBpZiAoX19zZW50cnkpIHsKICAgIGJh
c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX2J1ZiA9IHRoaXMtPnJkYnVmKCk7CiAg
ICBzdHJlYW1zaXplIF9fbm1heCA9IHRoaXMtPndpZHRoKCkgPiAwCiAgICAgID8gdGhpcy0+d2lk
dGgoKSAtIDEKICAgICAgOiAobnVtZXJpY19saW1pdHM8c3RyZWFtc2l6ZT46Om1heCkoKSAvIHNp
emVvZihfQ2hhclQpIC0gMTsKCiAgICBzdHJlYW1zaXplIF9fbiA9IF9fYnVmLT5ncHRyKCkgIT0g
X19idWYtPmVncHRyKCkKICAgICAgPyBfTV9yZWFkX2J1ZmZlcmVkKHRoaXMsIF9fYnVmLCBfX25t
YXgsIF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgIF9Jc193c3BhY2VfbnVsbDxfVHJhaXRz
PigoY29uc3QgY3R5cGU8X0NoYXJUPiopdGhpcy0+X01fY3R5cGVfZmFjZXQoKSksCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfU2Nhbl93c3BhY2VfbnVsbDxfVHJhaXRzPigoY29uc3QgY3R5cGU8
X0NoYXJUPiopdGhpcy0+X01fY3R5cGVfZmFjZXQoKSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICBmYWxzZSwgdHJ1ZSwgZmFsc2UpCiAgICAgIDogX01fcmVhZF91bmJ1ZmZlcmVkKHRoaXMsIF9f
YnVmLCBfX25tYXgsIF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lzX3dzcGFjZV9u
dWxsPF9UcmFpdHM+KChjb25zdCBjdHlwZTxfQ2hhclQ+Kil0aGlzLT5fTV9jdHlwZV9mYWNldCgp
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIHRydWUsIGZhbHNlKTsKICAgIGlm
IChfX24gPT0gMCkKICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogIH0K
ICB0aGlzLT53aWR0aCgwKTsKfQoKCgoKCgp0ZW1wbGF0ZSA8IGNsYXNzIF9DaGFyVCwgY2xhc3Mg
X1RyYWl0cywgY2xhc3MgX0lzX0RlbGltPgp2b2lkCl9NX2lnbm9yZV91bmJ1ZmZlcmVkKGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX190aGF0LAogICAgICAgICAgICAgICAgICAgICBi
YXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19idWYsCiAgICAgICAgICAgICAgICAg
ICAgIF9Jc19EZWxpbSBfX2lzX2RlbGltLAogICAgICAgICAgICAgICAgICAgICBib29sIF9fZXh0
cmFjdF9kZWxpbSwgYm9vbCBfX3NldF9mYWlsYml0KQp7CiAgYm9vbCBfX2RvbmUgPSBmYWxzZTsK
ICBpb3NfYmFzZTo6aW9zdGF0ZSBfX3N0YXR1cyA9IDA7CiAgdHlwZWRlZiB0eXBlbmFtZSBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlIGludF90eXBlOwoKICB0cnkgewog
ICAgd2hpbGUgKCFfX2RvbmUpIHsKICAgICAgaW50X3R5cGUgX19jID0gX19idWYtPnNidW1wYygp
OwoKICAgICAgaWYgKF9fdGhhdC0+X1NfZW9mKF9fYykpIHsKICAgICAgICBfX2RvbmUgPSB0cnVl
OwogICAgICAgIF9fc3RhdHVzIHw9IF9fc2V0X2ZhaWxiaXQgPyBpb3NfYmFzZTo6ZW9mYml0IHwg
aW9zX2Jhc2U6OmZhaWxiaXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW9z
X2Jhc2U6OmVvZmJpdDsKICAgICAgfQoKICAgICAgZWxzZSBpZiAoX19pc19kZWxpbShfX2MpKSB7
CiAgICAgICAgX19kb25lID0gdHJ1ZTsKICAgICAgICBpZiAoIV9fZXh0cmFjdF9kZWxpbSkKICAg
ICAgICAgIGlmIChfX3RoYXQtPl9TX2VvZihfX2J1Zi0+c3B1dGJhY2tjKF9UcmFpdHM6OnRvX2No
YXJfdHlwZShfX2MpKSkpCiAgICAgICAgICAgIF9fc3RhdHVzIHw9IGlvc19iYXNlOjpmYWlsYml0
OwogICAgICB9CiAgICB9CiAgfQogIGNhdGNoKC4uLikgewogICAgX190aGF0LT5fTV9oYW5kbGVf
ZXhjZXB0aW9uKGlvc19iYXNlOjpiYWRiaXQpOwogIH0KCiAgX190aGF0LT5zZXRzdGF0ZShfX3N0
YXR1cyk7Cn0KCgoKCgoKdGVtcGxhdGUgPCBjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNs
YXNzIF9Jc19EZWxpbSwgY2xhc3MgX1NjYW5fRGVsaW0+CnZvaWQKX01faWdub3JlX2J1ZmZlcmVk
KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX190aGF0LAogICAgICAgICAgICAgICAg
ICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fYnVmLAogICAgICAgICAgICAg
ICAgICAgX0lzX0RlbGltIF9faXNfZGVsaW0sIF9TY2FuX0RlbGltIF9fc2Nhbl9kZWxpbSwKICAg
ICAgICAgICAgICAgICAgIGJvb2wgX19leHRyYWN0X2RlbGltLCBib29sIF9fc2V0X2ZhaWxiaXQp
CnsKICBib29sIF9fYXRfZW9mID0gZmFsc2U7CiAgYm9vbCBfX2ZvdW5kX2RlbGltID0gZmFsc2U7
CgogIHRyeSB7CiAgICB3aGlsZSAoX19idWYtPl9NX2VncHRyKCkgIT0gX19idWYtPl9NX2dwdHIo
KSAmJiAhX19hdF9lb2YgJiYgIV9fZm91bmRfZGVsaW0pIHsKICAgICAgY29uc3QgX0NoYXJUKiBf
X3AgPSBfX3NjYW5fZGVsaW0oX19idWYtPl9NX2dwdHIoKSwgX19idWYtPl9NX2VncHRyKCkpOwog
ICAgICBfX2J1Zi0+X01fZ2J1bXAoKGludCkoX19wIC0gX19idWYtPl9NX2dwdHIoKSkpOwoKICAg
ICAgaWYgKF9fcCAhPSBfX2J1Zi0+X01fZWdwdHIoKSkgewogICAgICAgIGlmIChfX2V4dHJhY3Rf
ZGVsaW0pCiAgICAgICAgICBfX2J1Zi0+X01fZ2J1bXAoMSk7CiAgICAgICAgX19mb3VuZF9kZWxp
bSA9IHRydWU7CiAgICAgIH0KCiAgICAgIGVsc2UKICAgICAgICBfX2F0X2VvZiA9IF9fdGhhdC0+
X1NfZW9mKF9fYnVmLT5zZ2V0YygpKTsKICAgIH0KICB9CiAgY2F0Y2goLi4uKSB7CiAgICBfX3Ro
YXQtPl9NX2hhbmRsZV9leGNlcHRpb24oaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICByZXR1cm47CiAg
fQoKICBpZiAoX19hdF9lb2YpIHsKICAgIF9fdGhhdC0+c2V0c3RhdGUoX19zZXRfZmFpbGJpdCA/
IGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDogaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICByZXR1cm47CiAgfQogIGlm
IChfX2ZvdW5kX2RlbGltKQogICAgcmV0dXJuOwoKCgoKCiAgX01faWdub3JlX3VuYnVmZmVyZWQo
X190aGF0LCBfX2J1ZiwgX19pc19kZWxpbSwgX19leHRyYWN0X2RlbGltLCBfX3NldF9mYWlsYml0
KTsKfQojIDkyNiAiLi4vc3RscG9ydC9zdGwvX2lzdHJlYW0uYyIKdGVtcGxhdGUgPCBjbGFzcyBf
Q2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9NYXhfQ2hhcnMsIGNsYXNzIF9Jc19EZWxpbT4K
c3RyZWFtc2l6ZQpfTV9pZ25vcmVfdW5idWZmZXJlZChiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4qIF9fdGhhdCwKICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFy
VCwgX1RyYWl0cz4qIF9fYnVmLAogICAgICAgICAgICAgICAgICAgICBzdHJlYW1zaXplIF9OdW0s
IF9NYXhfQ2hhcnMgX19tYXhfY2hhcnMsCiAgICAgICAgICAgICAgICAgICAgIF9Jc19EZWxpbSBf
X2lzX2RlbGltLAogICAgICAgICAgICAgICAgICAgICBib29sIF9fZXh0cmFjdF9kZWxpbSwgYm9v
bCBfX3NldF9mYWlsYml0KQp7CiAgc3RyZWFtc2l6ZSBfX24gPSAwOwogIGlvc19iYXNlOjppb3N0
YXRlIF9fc3RhdHVzID0gMDsKICB0eXBlZGVmIHR5cGVuYW1lIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6aW50X3R5cGUgaW50X3R5cGU7CgogIHRyeSB7CiAgICB3aGlsZSAoX19tYXhf
Y2hhcnMoX051bSwgX19uKSA+IDApIHsKICAgICAgaW50X3R5cGUgX19jID0gX19idWYtPnNidW1w
YygpOwoKICAgICAgaWYgKF9fdGhhdC0+X1NfZW9mKF9fYykpIHsKICAgICAgICBfX3N0YXR1cyB8
PSBfX3NldF9mYWlsYml0ID8gaW9zX2Jhc2U6OmVvZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAg
ICAgYnJlYWs7CiAgICAgIH0KCiAgICAgIGVsc2UgaWYgKF9faXNfZGVsaW0oX19jKSkgewogICAg
ICAgIGlmIChfX2V4dHJhY3RfZGVsaW0pCiAgICAgICAgICArK19fbjsKICAgICAgICBlbHNlIGlm
IChfX3RoYXQtPl9TX2VvZihfX2J1Zi0+c3B1dGJhY2tjKF9UcmFpdHM6OnRvX2NoYXJfdHlwZShf
X2MpKSkpCiAgICAgICAgICBfX3N0YXR1cyB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAgICAg
YnJlYWs7CiAgICAgIH0KCiAgICAgICsrX19uOwogICAgfQogIH0KICBjYXRjaCguLi4pIHsKICAg
IF9fdGhhdC0+X01faGFuZGxlX2V4Y2VwdGlvbihpb3NfYmFzZTo6YmFkYml0KTsKICB9CgogIGlm
IChfX3N0YXR1cykKICAgIF9fdGhhdC0+c2V0c3RhdGUoX19zdGF0dXMpOwogIHJldHVybiBfX247
Cn0KCnRlbXBsYXRlIDwgY2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfTWF4X0No
YXJzLCBjbGFzcyBfSXNfRGVsaW0sIGNsYXNzIF9TY2FuX0RlbGltPgpzdHJlYW1zaXplCl9NX2ln
bm9yZV9idWZmZXJlZChiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9fdGhhdCwKICAg
ICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX2J1ZiwK
ICAgICAgICAgICAgICAgICAgIHN0cmVhbXNpemUgX051bSwKICAgICAgICAgICAgICAgICAgIF9N
YXhfQ2hhcnMgX19tYXhfY2hhcnMsCiAgICAgICAgICAgICAgICAgICBfSXNfRGVsaW0gX19pc19k
ZWxpbSwgX1NjYW5fRGVsaW0gX19zY2FuX2RlbGltLAogICAgICAgICAgICAgICAgICAgYm9vbCBf
X2V4dHJhY3RfZGVsaW0sIGJvb2wgX19zZXRfZmFpbGJpdCkKewogIHN0cmVhbXNpemUgX19uID0g
MDsKICBib29sIF9fYXRfZW9mID0gZmFsc2U7CiAgYm9vbCBfX2RvbmUgPSBmYWxzZTsKCiAgdHJ5
IHsKICAgIHdoaWxlIChfX2J1Zi0+X01fZWdwdHIoKSAhPSBfX2J1Zi0+X01fZ3B0cigpICYmICFf
X2RvbmUpIHsKICAgICAgcHRyZGlmZl90IF9fYXZhaWwgPSBfX2J1Zi0+X01fZWdwdHIoKSAtIF9f
YnVmLT5fTV9ncHRyKCk7CiAgICAgIHN0cmVhbXNpemUgX19tID0gX19tYXhfY2hhcnMoX051bSwg
X19uKTsKCiAgICAgIGlmIChfX2F2YWlsID49IF9fbSkgewogICAgICAgIGNvbnN0IF9DaGFyVCog
X19sYXN0ID0gX19idWYtPl9NX2dwdHIoKSArIF9fbTsKICAgICAgICBjb25zdCBfQ2hhclQqIF9f
cCA9IF9fc2Nhbl9kZWxpbShfX2J1Zi0+X01fZ3B0cigpLCBfX2xhc3QpOwogICAgICAgIHB0cmRp
ZmZfdCBfX2NodW5rID0gX19wIC0gX19idWYtPl9NX2dwdHIoKTsKICAgICAgICBfX24gKz0gX19j
aHVuazsKICAgICAgICBfX2J1Zi0+X01fZ2J1bXAoKGludClfX2NodW5rKTsKCiAgICAgICAgaWYg
KF9fZXh0cmFjdF9kZWxpbSAmJiBfX3AgIT0gX19sYXN0KSB7CiAgICAgICAgICBfX24gKz0gMTsK
ICAgICAgICAgIF9fYnVmLT5fTV9nYnVtcCgxKTsKICAgICAgICB9CgogICAgICAgIF9fZG9uZSA9
IHRydWU7CiAgICAgIH0KCiAgICAgIGVsc2UgewogICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0g
X19zY2FuX2RlbGltKF9fYnVmLT5fTV9ncHRyKCksIF9fYnVmLT5fTV9lZ3B0cigpKTsKICAgICAg
ICBwdHJkaWZmX3QgX19jaHVuayA9IF9fcCAtIF9fYnVmLT5fTV9ncHRyKCk7CiAgICAgICAgX19u
ICs9IF9fY2h1bms7CiAgICAgICAgX19idWYtPl9NX2didW1wKChpbnQpX19jaHVuayk7CgogICAg
ICAgIGlmIChfX3AgIT0gX19idWYtPl9NX2VncHRyKCkpIHsKICAgICAgICAgIGlmIChfX2V4dHJh
Y3RfZGVsaW0pIHsKICAgICAgICAgICAgX19uICs9IDE7CiAgICAgICAgICAgIF9fYnVmLT5fTV9n
YnVtcCgxKTsKICAgICAgICAgIH0KCiAgICAgICAgICBfX2RvbmUgPSB0cnVlOwogICAgICAgIH0K
CgogICAgICAgIGVsc2UgaWYgKF9fdGhhdC0+X1NfZW9mKF9fYnVmLT5zZ2V0YygpKSkgewogICAg
ICAgICAgX19kb25lID0gdHJ1ZTsKICAgICAgICAgIF9fYXRfZW9mID0gdHJ1ZTsKICAgICAgICB9
CiAgICAgIH0KICAgIH0KICB9CiAgY2F0Y2goLi4uKSB7CiAgICBfX3RoYXQtPl9NX2hhbmRsZV9l
eGNlcHRpb24oaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICByZXR1cm4gX19uOwogIH0KCiAgaWYgKF9f
YXRfZW9mKQogICAgX190aGF0LT5zZXRzdGF0ZShfX3NldF9mYWlsYml0ID8gaW9zX2Jhc2U6OmVv
ZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiBpb3NfYmFzZTo6ZW9mYml0KTsKCiAgaWYgKF9fZG9uZSkKICAgIHJldHVybiBfX247CgoK
CgoKCiAgcmV0dXJuIF9fbiArIF9NX2lnbm9yZV91bmJ1ZmZlcmVkKCBfX3RoYXQsIF9fYnVmLCBf
TnVtLCBfX21heF9jaGFycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19p
c19kZWxpbSwgX19leHRyYWN0X2RlbGltLCBfX3NldF9mYWlsYml0KTsKfQoKCnRlbXBsYXRlIDxj
bGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjppZ25vcmUoc3RyZWFtc2l6ZSBfX24p
CnsKICBzZW50cnkgX19zZW50cnkoKnRoaXMsIF9Ob19Ta2lwX1dTKCkpOwogIHRoaXMtPl9NX2dj
b3VudCA9IDA7CgogIGlmIChfX3NlbnRyeSkgewogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg
X1RyYWl0cz4qIF9fYnVmID0gdGhpcy0+cmRidWYoKTsKICAgIHR5cGVkZWYgX0NvbnN0YW50X3Vu
YXJ5X2Z1bjxib29sLCBpbnRfdHlwZT4gX0NvbnN0X2Jvb2w7CiAgICB0eXBlZGVmIF9Db25zdGFu
dF9iaW5hcnlfZnVuPHN0cmVhbXNpemUsIHN0cmVhbXNpemUsIHN0cmVhbXNpemU+CiAgICAgIF9D
b25zdF9zdHJlYW1zaXplOwogICAgY29uc3Qgc3RyZWFtc2l6ZSBfX21heHNzID0gKG51bWVyaWNf
bGltaXRzPHN0cmVhbXNpemU+OjptYXgpKCk7CgogICAgaWYgKF9fbiA9PSAobnVtZXJpY19saW1p
dHM8aW50Pjo6bWF4KSgpKSB7CiAgICAgIGlmIChfX2J1Zi0+Z3B0cigpICE9IF9fYnVmLT5lZ3B0
cigpKQogICAgICAgIF9NX2djb3VudAogICAgICAgICAgPSBfTV9pZ25vcmVfYnVmZmVyZWQodGhp
cywgX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21heHNzLCBfQ29uc3Rf
c3RyZWFtc2l6ZShfX21heHNzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db25z
dF9ib29sKGZhbHNlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qcm9qZWN0Mm5k
PGNvbnN0IF9DaGFyVCosIGNvbnN0IF9DaGFyVCo+KCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmYWxzZSwgZmFsc2UpOwogICAgICBlbHNlCiAgICAgICAgX01fZ2NvdW50ID0gX01f
aWdub3JlX3VuYnVmZmVyZWQodGhpcywgX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19tYXhzcywgX0NvbnN0X3N0cmVhbXNpemUoX19tYXhzcyksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbnN0X2Jvb2woZmFsc2UpLCBm
YWxzZSwgZmFsc2UpOwogICAgfQogICAgZWxzZSB7CiAgICAgIGlmIChfX2J1Zi0+Z3B0cigpICE9
IF9fYnVmLT5lZ3B0cigpKQogICAgICAgIF9NX2djb3VudAogICAgICAgICAgPSBfTV9pZ25vcmVf
YnVmZmVyZWQodGhpcywgX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX24s
IG1pbnVzPHN0cmVhbXNpemU+KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29u
c3RfYm9vbChmYWxzZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJvamVjdDJu
ZDxjb25zdCBfQ2hhclQqLCBjb25zdCBfQ2hhclQqPigpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmFsc2UsIGZhbHNlKTsKICAgICAgZWxzZQogICAgICAgIF9NX2djb3VudCA9IF9N
X2lnbm9yZV91bmJ1ZmZlcmVkKHRoaXMsIF9fYnVmLCBfX24sIG1pbnVzPHN0cmVhbXNpemU+KCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbnN0X2Jvb2woZmFs
c2UpLCBmYWxzZSwgZmFsc2UpOwogICAgfQogIH0KCiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6aWdub3JlKHN0cmVhbXNpemUg
X19uLCBpbnRfdHlwZSBfX2RlbGltKQp7CiAgc2VudHJ5IF9fc2VudHJ5KCp0aGlzLCBfTm9fU2tp
cF9XUygpKTsKICB0aGlzLT5fTV9nY291bnQgPSAwOwoKICBpZiAoX19zZW50cnkpIHsKICAgIGJh
c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX2J1ZiA9IHRoaXMtPnJkYnVmKCk7CiAg
ICB0eXBlZGVmIF9Db25zdGFudF91bmFyeV9mdW48Ym9vbCwgaW50X3R5cGU+IF9Db25zdF9ib29s
OwogICAgdHlwZWRlZiBfQ29uc3RhbnRfYmluYXJ5X2Z1bjxzdHJlYW1zaXplLCBzdHJlYW1zaXpl
LCBzdHJlYW1zaXplPgogICAgICBfQ29uc3Rfc3RyZWFtc2l6ZTsKICAgIGNvbnN0IHN0cmVhbXNp
emUgX19tYXhzcyA9IChudW1lcmljX2xpbWl0czxzdHJlYW1zaXplPjo6bWF4KSgpOwoKICAgIGlm
IChfX24gPT0gKG51bWVyaWNfbGltaXRzPGludD46Om1heCkoKSkgewogICAgICBpZiAoX19idWYt
PmdwdHIoKSAhPSBfX2J1Zi0+ZWdwdHIoKSkKICAgICAgICBfTV9nY291bnQgPSBfTV9pZ25vcmVf
YnVmZmVyZWQodGhpcywgX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fbWF4c3MsIF9Db25zdF9zdHJlYW1zaXplKF9fbWF4c3MpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfRXFfaW50X2JvdW5kPF9UcmFpdHM+KF9fZGVsaW0pLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU2Nhbl9mb3JfaW50X3ZhbDxf
VHJhaXRzPihfX2RlbGltKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHJ1ZSwgZmFsc2UpOwogICAgICBlbHNlCiAgICAgICAgX01fZ2NvdW50ID0gX01faWdub3JlX3Vu
YnVmZmVyZWQodGhpcywgX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19tYXhzcywgX0NvbnN0X3N0cmVhbXNpemUoX19tYXhzcyksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0VxX2ludF9ib3VuZDxfVHJhaXRzPihfX2RlbGlt
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCBmYWxzZSk7
CiAgICB9CiAgICBlbHNlIHsKICAgICAgaWYgKF9fYnVmLT5ncHRyKCkgIT0gX19idWYtPmVncHRy
KCkpCiAgICAgICAgX01fZ2NvdW50ID0gX01faWdub3JlX2J1ZmZlcmVkKHRoaXMsIF9fYnVmLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX24sIG1pbnVzPHN0cmVhbXNp
emU+KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9FcV9pbnRfYm91
bmQ8X1RyYWl0cz4oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19kZWxpbSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TY2Fu
X2Zvcl9pbnRfdmFsPF9UcmFpdHM+KF9fZGVsaW0pLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0cnVlLCBmYWxzZSk7CiAgICAgIGVsc2UKICAgICAgICBfTV9nY291bnQg
PSBfTV9pZ25vcmVfdW5idWZmZXJlZCh0aGlzLCBfX2J1ZiwgX19uLCBtaW51czxzdHJlYW1zaXpl
PigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9FcV9pbnRfYm91
bmQ8X1RyYWl0cz4oX19kZWxpbSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHJ1ZSwgZmFsc2UpOwogICAgfQogIH0KCiAgcmV0dXJuICp0aGlzOwp9CgoKCnRlbXBs
YXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CnZvaWQgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjpfTV9za2lwX3doaXRlc3BhY2UoYm9vbCBfX3NldF9mYWlsYml0KQp7CiAg
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fYnVmID0gdGhpcy0+cmRidWYoKTsK
ICBpZiAoIV9fYnVmKQogICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgZWxz
ZSBpZiAoX19idWYtPmdwdHIoKSAhPSBfX2J1Zi0+ZWdwdHIoKSkKICAgIF9NX2lnbm9yZV9idWZm
ZXJlZCh0aGlzLCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICBfSXNfbm90X3dzcGFjZTxf
VHJhaXRzPigoY29uc3QgY3R5cGU8X0NoYXJUPiopdGhpcy0+X01fY3R5cGVfZmFjZXQoKSksCiAg
ICAgICAgICAgICAgICAgICAgICAgX1NjYW5fZm9yX25vdF93c3BhY2U8X1RyYWl0cz4oKGNvbnN0
IGN0eXBlPF9DaGFyVD4qKXRoaXMtPl9NX2N0eXBlX2ZhY2V0KCkpLAogICAgICAgICAgICAgICAg
ICAgICAgIGZhbHNlLCBfX3NldF9mYWlsYml0KTsKICBlbHNlCiAgICBfTV9pZ25vcmVfdW5idWZm
ZXJlZCh0aGlzLCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Jc19ub3Rfd3NwYWNl
PF9UcmFpdHM+KChjb25zdCBjdHlwZTxfQ2hhclQ+Kil0aGlzLT5fTV9jdHlwZV9mYWNldCgpKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBfX3NldF9mYWlsYml0KTsKfQojIDExNjMg
Ii4uL3N0bHBvcnQvc3RsL19pc3RyZWFtLmMiCnRlbXBsYXRlIDwgY2xhc3MgX0NoYXJULCBjbGFz
cyBfVHJhaXRzLCBjbGFzcyBfSXNfRGVsaW0+CnN0cmVhbXNpemUKX01fY29weV91bmJ1ZmZlcmVk
KCBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9fdGhhdCwgYmFzaWNfc3RyZWFtYnVm
PF9DaGFyVCwgX1RyYWl0cz4qIF9fc3JjLAogICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVh
bWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgX0lzX0Rl
bGltIF9faXNfZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgYm9vbCBfX2V4dHJhY3RfZGVsaW0s
IGJvb2wgX19yZXRocm93KQp7CiAgc3RyZWFtc2l6ZSBfX2V4dHJhY3RlZCA9IDA7CiAgaW9zX2Jh
c2U6Omlvc3RhdGUgX19zdGF0dXMgPSAwOwogIHR5cGVkZWYgdHlwZW5hbWUgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZSBpbnRfdHlwZTsKICBpbnRfdHlwZSBfX2M7Cgog
IHRyeSB7CgogICAgd2hpbGUgKHRydWUpIHsKCgogICAgICBfX2MgPSBfX3NyYy0+c2J1bXBjKCk7
CgoKICAgICAgaWYgKF9fdGhhdC0+X1NfZW9mKF9fYykpIHsKICAgICAgICBfX3N0YXR1cyB8PSBp
b3NfYmFzZTo6ZW9mYml0OwogICAgICAgIGJyZWFrOwogICAgICB9CgogICAgICBlbHNlIGlmIChf
X2lzX2RlbGltKF9fYykpIHsKICAgICAgICBpZiAoIV9fZXh0cmFjdF9kZWxpbSAmJiAhX19wdXNo
YmFjayhfX3NyYywgX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYykpKQogICAgICAgICAgX19zdGF0
dXMgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICAgIGVs
c2UgewoKCiAgICAgICAgYm9vbCBfX2ZhaWxlZCA9IGZhbHNlOwogICAgICAgIHRyeSB7CiAgICAg
ICAgICBpZiAoIV9fdGhhdC0+X1NfZW9mKF9fZGVzdC0+c3B1dGMoX19jKSkpCiAgICAgICAgICAg
ICsrX19leHRyYWN0ZWQ7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fZmFpbGVkID0gdHJ1
ZTsKICAgICAgICB9CiAgICAgICAgY2F0Y2goLi4uKSB7CiAgICAgICAgICBfX2ZhaWxlZCA9IHRy
dWU7CiAgICAgICAgfQoKCgogICAgICAgIGlmIChfX2ZhaWxlZCAmJiAhX19wdXNoYmFjayhfX3Ny
YywgX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYykpKQogICAgICAgICAgX19zdGF0dXMgfD0gaW9z
X2Jhc2U6OmZhaWxiaXQ7CgoKICAgICAgICBpZiAoX19mYWlsZWQpCiAgICAgICAgICBicmVhazsK
ICAgICAgfQoKICAgIH0KCiAgfQoKCiAgY2F0Y2goLi4uKSB7CgogICAgaWYgKF9fcmV0aHJvdyAm
JiBfX2V4dHJhY3RlZCA9PSAwKQogICAgICBfX3RoYXQtPl9NX2hhbmRsZV9leGNlcHRpb24oaW9z
X2Jhc2U6OmZhaWxiaXQpOwogIH0KICBfX3RoYXQtPnNldHN0YXRlKF9fc3RhdHVzKTsKICByZXR1
cm4gX19leHRyYWN0ZWQ7Cn0KCgoKCgoKdGVtcGxhdGUgPCBjbGFzcyBfQ2hhclQsIGNsYXNzIF9U
cmFpdHMsIGNsYXNzIF9Jc19EZWxpbSwgY2xhc3MgX1NjYW5fRGVsaW0+CnN0cmVhbXNpemUKX01f
Y29weV9idWZmZXJlZChiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9fdGhhdCwgYmFz
aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc3JjLAogICAgICAgICAgICAgICAgICAg
ICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19kZXN0LAogICAgICAgICAgICAg
ICAgICAgICBfU2Nhbl9EZWxpbSBfX3NjYW5fZGVsaW0sIF9Jc19EZWxpbSBfX2lzX2RlbGltLAog
ICAgICAgICAgICAgICAgICAgICBib29sIF9fZXh0cmFjdF9kZWxpbSwgYm9vbCBfX3JldGhyb3cp
CnsKICBzdHJlYW1zaXplIF9fZXh0cmFjdGVkID0gMDsKICBpb3NfYmFzZTo6aW9zdGF0ZSBfX3N0
YXR1cyA9IDA7CiAgdHlwZWRlZiB0eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46OmludF90eXBlIGludF90eXBlOwogIGludF90eXBlIF9fYyA9IF9UcmFpdHM6OmVvZigpOwog
IF9DaGFyVCogX19maXJzdCA9IF9fc3JjLT5fTV9ncHRyKCk7CiAgcHRyZGlmZl90IF9fYXZhaWwg
PSBfX3NyYy0+X01fZWdwdHIoKSAtIF9fZmlyc3Q7CgogIGJvb2wgX19kb19oYW5kbGVfZXhjZXB0
aW9uczsKCiAgdHJ5IHsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIF9fZG9faGFuZGxlX2V4Y2Vw
dGlvbnMgPSBmYWxzZSA7CiAgICAgIGNvbnN0IF9DaGFyVCogX19sYXN0ID0gX19zY2FuX2RlbGlt
KF9fZmlyc3QsIF9fc3JjLT5fTV9lZ3B0cigpKTsKCgogICAgICBzdHJlYW1zaXplIF9fbiA9IF9f
ZGVzdC0+c3B1dG4oX19maXJzdCwgX19leHRyYWN0X2RlbGltICYmIF9fbGFzdCAhPSBfX3NyYy0+
X01fZWdwdHIoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoX19sYXN0
IC0gX19maXJzdCkgKyAxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChf
X2xhc3QgLSBfX2ZpcnN0KSk7CiAgICAgIF9fc3JjLT5fTV9nYnVtcCgoaW50KV9fbik7CiAgICAg
IF9fZXh0cmFjdGVkICs9IF9fbjsKCgogICAgICBfX2RvX2hhbmRsZV9leGNlcHRpb25zID0gdHJ1
ZTsKCiAgICAgIGlmIChfX24gPCBfX2F2YWlsKQogICAgICAgIGJyZWFrOwoKICAgICAgX19jID0g
X19zcmMtPnNnZXRjKCk7CgoKCiAgICAgIF9fZmlyc3QgPSBfX3NyYy0+X01fZ3B0cigpOwogICAg
ICBfX2F2YWlsID0gX19zcmMtPl9NX2VncHRyKCkgLSBfX2ZpcnN0OwoKICAgICAgaWYgKF9fYXZh
aWwgPiAwKQogICAgICAgIHt9CiAgICAgIGVsc2UgaWYgKF9fdGhhdC0+X1NfZW9mKF9fYykpIHsK
ICAgICAgICBfX3N0YXR1cyB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICAgIGJyZWFrOwogICAg
ICB9CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gX19leHRyYWN0ZWQgKyBfTV9jb3B5X3VuYnVm
ZmVyZWQoX190aGF0LCBfX3NyYywgX19kZXN0LCBfX2lzX2RlbGltLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2V4dHJhY3RfZGVsaW0sIF9fcmV0aHJv
dyk7CiAgICB9CiAgfQoKICBjYXRjaCguLi4pIHsKCiAgICBpZiAoX19yZXRocm93ICYmIF9fZG9f
aGFuZGxlX2V4Y2VwdGlvbnMgJiYgX19leHRyYWN0ZWQgPT0gMCkKICAgICAgX190aGF0LT5fTV9o
YW5kbGVfZXhjZXB0aW9uKGlvc19iYXNlOjpmYWlsYml0KTsKICB9CgogIGlmIChfX3N0YXR1cykK
ICAgIF9fdGhhdC0+c2V0c3RhdGUoX19zdGF0dXMpOwogIHJldHVybiBfX2V4dHJhY3RlZDsKfQoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgpiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mCmJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPgogIDo6Z2V0KGJh
c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+JiBfX2Rlc3QsIF9DaGFyVCBfX2RlbGltKQp7
CiAgc2VudHJ5IF9fc2VudHJ5KCp0aGlzLCBfTm9fU2tpcF9XUygpKTsKICB0aGlzLT5fTV9nY291
bnQgPSAwOwoKICBpZiAoX19zZW50cnkpIHsKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9U
cmFpdHM+KiBfX3NyYyA9IHRoaXMtPnJkYnVmKCk7CgogICAgaWYgKF9fc3JjKQogICAgICB0aGlz
LT5fTV9nY291bnQgPSBfX3NyYy0+ZWdwdHIoKSAhPSBfX3NyYy0+Z3B0cigpCiAgICAgICAgPyBf
TV9jb3B5X2J1ZmZlcmVkKHRoaXMsIF9fc3JjLCAmX19kZXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBfU2Nhbl9mb3JfY2hhcl92YWw8X1RyYWl0cz4oX19kZWxpbSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9FcV9jaGFyX2JvdW5kPF9UcmFpdHM+KF9fZGVsaW0pLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBmYWxzZSwgZmFsc2UpCiAgICAgICAgOiBfTV9jb3B5X3VuYnVm
ZmVyZWQodGhpcywgX19zcmMsICZfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0VxX2NoYXJfYm91bmQ8X1RyYWl0cz4oX19kZWxpbSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmFsc2UsIGZhbHNlKTsKICB9CgogIGlmICh0aGlzLT5fTV9nY291bnQgPT0gMCkKICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKCiAgcmV0dXJuICp0aGlzOwp9CgoK
dGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JgpiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4KICA6Om9wZXJhdG9y
Pj4oYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fZGVzdCkKewogIHN0cmVhbXNp
emUgX19uID0gMDsKICB0eXBlZGVmIHR5cGVuYW1lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6c2VudHJ5IF9TZW50cnk7CiAgX1NlbnRyeSBfX3NlbnRyeSgqdGhpcyk7CiAgaWYgKF9f
c2VudHJ5KSB7CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zcmMgPSB0
aGlzLT5yZGJ1ZigpOwogICAgaWYgKF9fc3JjICYmIF9fZGVzdCkKICAgICAgX19uID0gX19zcmMt
PmVncHRyKCkgIT0gX19zcmMtPmdwdHIoKQogICAgICAgID8gX01fY29weV9idWZmZXJlZCh0aGlz
LCBfX3NyYywgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJvamVjdDJuZDxj
b25zdCBfQ2hhclQqLCBjb25zdCBfQ2hhclQqPigpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBfQ29uc3RhbnRfdW5hcnlfZnVuPGJvb2wsIGludF90eXBlPihmYWxzZSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZhbHNlLCB0cnVlKQogICAgICAgIDogX01fY29weV91bmJ1ZmZlcmVk
KHRoaXMsIF9fc3JjLCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbnN0
YW50X3VuYXJ5X2Z1bjxib29sLCBpbnRfdHlwZT4oZmFsc2UpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZhbHNlLCB0cnVlKTsKICB9CgogIGlmIChfX24gPT0gMCkKICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKCiAgcmV0dXJuICp0aGlzOwp9CgoKCgoKdGVtcGxh
dGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KYmFzaWNfaW9zdHJlYW08X0NoYXJULCBf
VHJhaXRzPgogIDo6YmFzaWNfaW9zdHJlYW0oYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0
cz4qIF9fYnVmKQogICAgOiBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPigpLAogICAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4oX19idWYpLAogICAgICBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4oX19idWYpCnsKICB0aGlzLT5pbml0KF9fYnVmKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KYmFzaWNfaW9zdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6fmJhc2ljX2lvc3RyZWFtKCkKe30KCn0KIyAzMzggIi4uL3N0bHBvcnQvc3RsL19pc3Ry
ZWFtLmgiIDIKIyAyMiAibW9uZXRhcnkuY3BwIiAyCgpuYW1lc3BhY2UgX1NUTCB7CgpzdGF0aWMg
dm9pZCBfSW5pdF9tb25ldGFyeV9mb3JtYXRzKG1vbmV5X2Jhc2U6OnBhdHRlcm4mIHBvc19mb3Jt
YXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9uZXlfYmFzZTo6cGF0dGVy
biYgbmVnX2Zvcm1hdCkgewogIHBvc19mb3JtYXQuZmllbGRbMF0gPSAoY2hhcikgbW9uZXlfYmFz
ZTo6c3ltYm9sOwogIHBvc19mb3JtYXQuZmllbGRbMV0gPSAoY2hhcikgbW9uZXlfYmFzZTo6c2ln
bjsKICBwb3NfZm9ybWF0LmZpZWxkWzJdID0gKGNoYXIpIG1vbmV5X2Jhc2U6Om5vbmU7CiAgcG9z
X2Zvcm1hdC5maWVsZFszXSA9IChjaGFyKSBtb25leV9iYXNlOjp2YWx1ZTsKCiAgbmVnX2Zvcm1h
dC5maWVsZFswXSA9IChjaGFyKSBtb25leV9iYXNlOjpzeW1ib2w7CiAgbmVnX2Zvcm1hdC5maWVs
ZFsxXSA9IChjaGFyKSBtb25leV9iYXNlOjpzaWduOwogIG5lZ19mb3JtYXQuZmllbGRbMl0gPSAo
Y2hhcikgbW9uZXlfYmFzZTo6bm9uZTsKICBuZWdfZm9ybWF0LmZpZWxkWzNdID0gKGNoYXIpIG1v
bmV5X2Jhc2U6OnZhbHVlOwp9CgoKc3RyaW5nIF9TX2VtcHR5X3N0cmluZygiIik7Cgp3c3RyaW5n
IF9TX2VtcHR5X3dzdHJpbmcoTCIiKTsKCgoKCgoKbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6bW9u
ZXlwdW5jdChzaXplX3QgX19yZWZzKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7CiAgICBfSW5p
dF9tb25ldGFyeV9mb3JtYXRzKF9NX3Bvc19mb3JtYXQsIF9NX25lZ19mb3JtYXQpOwp9Cm1vbmV5
cHVuY3Q8Y2hhciwgdHJ1ZT46On5tb25leXB1bmN0KCkge30KCmNoYXIgbW9uZXlwdW5jdDxjaGFy
LCB0cnVlPjo6ZG9fZGVjaW1hbF9wb2ludCgpIGNvbnN0IHtyZXR1cm4gJyAnO30KY2hhciBtb25l
eXB1bmN0PGNoYXIsIHRydWU+Ojpkb190aG91c2FuZHNfc2VwKCkgY29uc3Qge3JldHVybiAnICc7
fQpzdHJpbmcgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6ZG9fZ3JvdXBpbmcoKSBjb25zdCB7IHJl
dHVybiBfU19lbXB0eV9zdHJpbmc7IH0Kc3RyaW5nIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46OmRv
X2N1cnJfc3ltYm9sKCkgY29uc3QgeyByZXR1cm4gX1NfZW1wdHlfc3RyaW5nOyB9CnN0cmluZyBt
b25leXB1bmN0PGNoYXIsIHRydWU+Ojpkb19wb3NpdGl2ZV9zaWduKCkgY29uc3QgeyByZXR1cm4g
X1NfZW1wdHlfc3RyaW5nOyB9CnN0cmluZyBtb25leXB1bmN0PGNoYXIsIHRydWU+Ojpkb19uZWdh
dGl2ZV9zaWduKCkgY29uc3QgeyByZXR1cm4gX1NfZW1wdHlfc3RyaW5nOyB9Cm1vbmV5X2Jhc2U6
OnBhdHRlcm4gbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6ZG9fcG9zX2Zvcm1hdCgpIGNvbnN0IHty
ZXR1cm4gX01fcG9zX2Zvcm1hdDt9Cm1vbmV5X2Jhc2U6OnBhdHRlcm4gbW9uZXlwdW5jdDxjaGFy
LCB0cnVlPjo6ZG9fbmVnX2Zvcm1hdCgpIGNvbnN0IHtyZXR1cm4gX01fbmVnX2Zvcm1hdDt9Cmlu
dCBtb25leXB1bmN0PGNoYXIsIHRydWU+Ojpkb19mcmFjX2RpZ2l0cygpIGNvbnN0IHtyZXR1cm4g
MDt9Cgptb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6bW9uZXlwdW5jdChzaXplX3QgX19yZWZzKSA6
IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7CiAgICBfSW5pdF9tb25ldGFyeV9mb3JtYXRzKF9NX3Bv
c19mb3JtYXQsIF9NX25lZ19mb3JtYXQpOwp9Cm1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+Ojp+bW9u
ZXlwdW5jdCgpIHt9CgpjaGFyIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+Ojpkb19kZWNpbWFsX3Bv
aW50KCkgY29uc3Qge3JldHVybiAnICc7fQpjaGFyIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+Ojpk
b190aG91c2FuZHNfc2VwKCkgY29uc3Qge3JldHVybiAnICc7fQoKc3RyaW5nIG1vbmV5cHVuY3Q8
Y2hhciwgZmFsc2U+Ojpkb19ncm91cGluZygpIGNvbnN0IHsgcmV0dXJuIF9TX2VtcHR5X3N0cmlu
ZzsgfQpzdHJpbmcgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46OmRvX2N1cnJfc3ltYm9sKCkgY29u
c3QgeyByZXR1cm4gX1NfZW1wdHlfc3RyaW5nOyB9CnN0cmluZyBtb25leXB1bmN0PGNoYXIsIGZh
bHNlPjo6ZG9fcG9zaXRpdmVfc2lnbigpIGNvbnN0IHsgcmV0dXJuIF9TX2VtcHR5X3N0cmluZzsg
fQpzdHJpbmcgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46OmRvX25lZ2F0aXZlX3NpZ24oKSBjb25z
dCB7IHJldHVybiBfU19lbXB0eV9zdHJpbmc7IH0KbW9uZXlfYmFzZTo6cGF0dGVybiBtb25leXB1
bmN0PGNoYXIsIGZhbHNlPjo6ZG9fcG9zX2Zvcm1hdCgpIGNvbnN0IHtyZXR1cm4gX01fcG9zX2Zv
cm1hdDt9Cm1vbmV5X2Jhc2U6OnBhdHRlcm4gbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46OmRvX25l
Z19mb3JtYXQoKSBjb25zdCB7cmV0dXJuIF9NX25lZ19mb3JtYXQ7fQppbnQgbW9uZXlwdW5jdDxj
aGFyLCBmYWxzZT46OmRvX2ZyYWNfZGlnaXRzKCkgY29uc3Qge3JldHVybiAwO30KCgoKCm1vbmV5
cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46Om1vbmV5cHVuY3Qoc2l6ZV90IF9fcmVmcykgOiBsb2NhbGU6
OmZhY2V0KF9fcmVmcykgewogICAgX0luaXRfbW9uZXRhcnlfZm9ybWF0cyhfTV9wb3NfZm9ybWF0
LCBfTV9uZWdfZm9ybWF0KTsKfQptb25leXB1bmN0PHdjaGFyX3QsIHRydWU+Ojp+bW9uZXlwdW5j
dCgpIHt9Cgp3Y2hhcl90IG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46OmRvX2RlY2ltYWxfcG9p
bnQoKSBjb25zdCB7cmV0dXJuIEwnICc7fQp3Y2hhcl90IG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1
ZT46OmRvX3Rob3VzYW5kc19zZXAoKSBjb25zdCB7cmV0dXJuIEwnICc7fQpzdHJpbmcgbW9uZXlw
dW5jdDx3Y2hhcl90LCB0cnVlPjo6ZG9fZ3JvdXBpbmcoKSBjb25zdCB7cmV0dXJuIF9TX2VtcHR5
X3N0cmluZzt9Cgp3c3RyaW5nIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46OmRvX2N1cnJfc3lt
Ym9sKCkgY29uc3QKICB7cmV0dXJuIF9TX2VtcHR5X3dzdHJpbmc7fQp3c3RyaW5nIG1vbmV5cHVu
Y3Q8d2NoYXJfdCwgdHJ1ZT46OmRvX3Bvc2l0aXZlX3NpZ24oKSBjb25zdAogIHtyZXR1cm4gX1Nf
ZW1wdHlfd3N0cmluZzt9CndzdHJpbmcgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPjo6ZG9fbmVn
YXRpdmVfc2lnbigpIGNvbnN0CiAge3JldHVybiBfU19lbXB0eV93c3RyaW5nO30KaW50IG1vbmV5
cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46OmRvX2ZyYWNfZGlnaXRzKCkgY29uc3Qge3JldHVybiAwO30K
bW9uZXlfYmFzZTo6cGF0dGVybiBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+Ojpkb19wb3NfZm9y
bWF0KCkgY29uc3QKICB7cmV0dXJuIF9NX3Bvc19mb3JtYXQ7fQptb25leV9iYXNlOjpwYXR0ZXJu
IG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46OmRvX25lZ19mb3JtYXQoKSBjb25zdAogIHtyZXR1
cm4gX01fbmVnX2Zvcm1hdDt9Cgptb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6bW9uZXlwdW5j
dChzaXplX3QgX19yZWZzKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7CiAgICBfSW5pdF9tb25l
dGFyeV9mb3JtYXRzKF9NX3Bvc19mb3JtYXQsIF9NX25lZ19mb3JtYXQpOwp9Cm1vbmV5cHVuY3Q8
d2NoYXJfdCwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpIHt9Cgp3Y2hhcl90IG1vbmV5cHVuY3Q8d2No
YXJfdCwgZmFsc2U+Ojpkb19kZWNpbWFsX3BvaW50KCkgY29uc3Qge3JldHVybiBMJyAnO30Kd2No
YXJfdCBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6ZG9fdGhvdXNhbmRzX3NlcCgpIGNvbnN0
IHtyZXR1cm4gTCcgJzt9CnN0cmluZyBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6ZG9fZ3Jv
dXBpbmcoKSBjb25zdCB7IHJldHVybiBfU19lbXB0eV9zdHJpbmc7fQp3c3RyaW5nIG1vbmV5cHVu
Y3Q8d2NoYXJfdCwgZmFsc2U+Ojpkb19jdXJyX3N5bWJvbCgpIGNvbnN0CiAge3JldHVybiBfU19l
bXB0eV93c3RyaW5nO30Kd3N0cmluZyBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6ZG9fcG9z
aXRpdmVfc2lnbigpIGNvbnN0CiAge3JldHVybiBfU19lbXB0eV93c3RyaW5nO30Kd3N0cmluZyBt
b25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6ZG9fbmVnYXRpdmVfc2lnbigpIGNvbnN0CiAge3Jl
dHVybiBfU19lbXB0eV93c3RyaW5nO30KaW50IG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+Ojpk
b19mcmFjX2RpZ2l0cygpIGNvbnN0IHtyZXR1cm4gMDt9Cgptb25leV9iYXNlOjpwYXR0ZXJuIG1v
bmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+Ojpkb19wb3NfZm9ybWF0KCkgY29uc3QKICB7cmV0dXJu
IF9NX3Bvc19mb3JtYXQ7fQptb25leV9iYXNlOjpwYXR0ZXJuIG1vbmV5cHVuY3Q8d2NoYXJfdCwg
ZmFsc2U+Ojpkb19uZWdfZm9ybWF0KCkgY29uc3QKICB7cmV0dXJuIF9NX25lZ19mb3JtYXQ7fQoj
IDEzMiAibW9uZXRhcnkuY3BwIgp0ZW1wbGF0ZSBjbGFzcyBtb25leV9nZXQ8Y2hhciwgaXN0cmVh
bWJ1Zl9pdGVyYXRvcjxjaGFyLCBjaGFyX3RyYWl0czxjaGFyPiA+ID47CnRlbXBsYXRlIGNsYXNz
IG1vbmV5X3B1dDxjaGFyLCBvc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXIsIGNoYXJfdHJhaXRzPGNo
YXI+ID4gPjsKCgoKdGVtcGxhdGUgY2xhc3MgbW9uZXlfZ2V0PHdjaGFyX3QsIGlzdHJlYW1idWZf
aXRlcmF0b3I8d2NoYXJfdCwgY2hhcl90cmFpdHM8d2NoYXJfdD4gPiA+Owp0ZW1wbGF0ZSBjbGFz
cyBtb25leV9wdXQ8d2NoYXJfdCwgb3N0cmVhbWJ1Zl9pdGVyYXRvcjx3Y2hhcl90LCBjaGFyX3Ry
YWl0czx3Y2hhcl90PiA+ID47CgoKCgoKCn0K


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

only message in thread, other threads:[~2003-04-11 16:16 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-04-11 16:16 other/10379: Compiling Openoffice I get "Internal compiler error in expand_call" on file monetary.cpp alessandro.surace

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