c++/2201: Internal compiler error while compiling patr of lapack++

a.metselaar@math.utwente.nl a.metselaar@math.utwente.nl
Wed Mar 7 04:36:00 GMT 2001


>Number:         2201
>Category:       c++
>Synopsis:       Internal compiler error while compiling patr of lapack++
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-illegal-code
>Submitter-Id:   net
>Arrival-Date:   Wed Mar 07 04:36:01 PST 2001
>Closed-Date:
>Last-Modified:
>Originator:     Arnold Metselaar
>Release:        gcc version 2.95.2 19991024 (release)
>Organization:
>Environment:
i486-suse-linux/2.95.2/specs
uname -msrp : Linux 2.2.14 i686 unknown 
LD_LIBRARY_PATH=/opt/kde/lib
MACHTYPE=i386-suse-linux
HOSTTYPE=i386
PATH=/home/metselaa/bin:/usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin:/usr/lib/java/bin:/usr/games/bin:/usr/games:/opt/gnome/bin:/opt/kde/bin:.
>Description:
In file included from /home/metselaa/include/lapackpp/vi.h:25,
                 from /home/metselaa/include/lapackpp/gmi.h:19,
                 from /home/metselaa/include/lapackpp/lavi.h:11,
                 from force_ice.cpp:8:
/usr/include/assert.h: In function `void __assert_fail(const char *, const char
*, unsigned int, const char *)':
/usr/include/assert.h:64: parse error before `('
/usr/include/assert.h: In function `void __assert_perror_fail(int, const char *, unsigned int, const char *)':
/usr/include/assert.h:71: parse error before `('
In file included from /home/metselaa/include/lapackpp/gmi.h:19,
                 from /home/metselaa/include/lapackpp/lavi.h:11,
                 from force_ice.cpp:8:
/home/metselaa/include/lapackpp/vi.h:88: non-local function `class ostream & operator <<(ostream &, const __assert_perror_fail(int, const char *, unsigned int,
const char *)::VectorInt &)' uses local type `const __assert_perror_fail(int, const char *, unsigned int, const char *)::VectorInt'
/home/metselaa/include/lapackpp/vi.h: In method `int __assert_perror_fail(int, const char *, unsigned int, const char *)::VectorInt::null() const':
/home/metselaa/include/lapackpp/vi.h:101: Internal compiler error in `find_function_data', at function.c:542
Please submit a full bug report.
See <URL: http://www.gnu.org/software/gcc/bugs.html > for instructions.           
>How-To-Repeat:
g++ force_ice.ii
>Fix:

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

IyAxICJmb3JjZV9pY2UuY3BwIgogCgogCgogCiMgMSAiL2hvbWUvbWV0c2VsYWEvaW5jbHVkZS9s
YXBhY2twcC9ibGFzKysuaCIgMQogCgoKCgogCiAKCiMgMSAiL2hvbWUvbWV0c2VsYWEvaW5jbHVk
ZS9sYXBhY2twcC9sYWV4Y3AuaCIgMQogCiAKCiAKIAogCiAKIAogCiAKIAoKCgoKIyAxICIvdXNy
L2luY2x1ZGUvZysrL2lvc3RyZWFtLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoj
cHJhZ21hIGludGVyZmFjZQoKCgojIDEgIi91c3IvaW5jbHVkZS9nKysvc3RyZWFtYnVmLmgiIDEg
MwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCgogICAKCgoK
ZXh0ZXJuICJDIiB7CiMgMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDEgMwogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMSAzCiAKCgoK
CgogCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoK
CgoKIAoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKCgogCgoKCgoKCgog
CiMgMTM4ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwoKCiAKCgoKCgoKCgoKIAoKCgoKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxOTYgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5o
IiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiAKCgoKCgoKCgogCgoK
CgogCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoK
CgoKCgogCgoKCgogCgoKCgoKIAoKCgoKCgoKCiAKCgoKCiMgNzEgIi91c3IvaW5jbHVkZS9zeXMv
Y2RlZnMuaCIgMwoKCiAKCgoKCgoKCiAKCgoKIyAxMDMgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMu
aCIgMwoKCgogCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIAoKCgoKCgoKCiAK
CgoKCgoKCgoKIAoKCgoKCgoKIyAyNTAgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKCgog
CgoKCgoKCgoKIAoKCgoKCiAKCiAKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9nbnUvc3R1YnMu
aCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDI3OCAiL3Vz
ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwoKCgoKIyAyNiAiL3Vzci9pbmNsdWRlL2JpdHMvdHlw
ZXMuaCIgMiAzCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4y
L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9p
NDg2LXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgog
CgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUv
c3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAx
MzEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRl
Zi5oIiAzCgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgc2l6ZV90OwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKIyAyNzEg
Ii91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5o
IiAzCgoKIyAyODMgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNs
dWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNl
LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCiAKdHlwZWRlZiB1bnNp
Z25lZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdV9zaG9ydDsKdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25n
OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRf
dDsKX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7CiMgNDggIi91
c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7
CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGlu
dCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVk
ZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7
CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90Owpf
X2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90OwoK
dHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7
CQkgCnR5cGVkZWYgX191X2ludCBfX3VpZF90OwkJIAp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsJ
CSAKdHlwZWRlZiBfX3VfbG9uZyBfX2lub190OwkJIAp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7
CQkgCnR5cGVkZWYgX191X2ludCBfX25saW5rX3Q7IAkJIAp0eXBlZGVmIGxvbmcgaW50IF9fb2Zm
X3Q7CQkgCnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7CQkgCnR5cGVkZWYgaW50IF9fcGlkX3Q7
CQkJIAp0eXBlZGVmIGludCBfX3NzaXplX3Q7CQkJIAp0eXBlZGVmIF9fdV9sb25nIF9fcmxpbV90
OwkJIAp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsJCSAKdHlwZWRlZiBfX3VfaW50IF9f
aWRfdDsJCQkgCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsyXTsKICB9IF9fZnNp
ZF90OwkJCQkgCgogCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsJCQkgCnR5cGVkZWYgY2hhciAqX19j
YWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIGxvbmcgaW50IF9fc3di
bGtfdDsJCSAKDAp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKCiAKdHlwZWRlZiB1bnNpZ25l
ZCBsb25nIGludCBfX2ZkX21hc2s7CgogCgoKIAoKCgoKIAp0eXBlZGVmIHN0cnVjdAogIHsKICAg
ICAKCgoKCgogICAgX19mZF9tYXNrIF9fZmRzX2JpdHNbMTAyNCAgLyAoOCAqIHNpemVvZiAoX19m
ZF9tYXNrKSkgXTsKCgogIH0gX19mZF9zZXQ7CgoKdHlwZWRlZiBpbnQgX19rZXlfdDsKCiAKdHlw
ZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoKIAoKIAp0eXBlZGVmIGxvbmcg
aW50IF9fYmxrY250X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19ibGtjbnQ2NF90OwoKIAp0eXBlZGVm
IF9fdV9sb25nIF9fZnNibGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90
OwoKIAp0eXBlZGVmIF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9f
ZnNmaWxjbnQ2NF90OwoKIAp0eXBlZGVmIF9fdV9sb25nIF9faW5vNjRfdDsKCiAKdHlwZWRlZiBf
X2xvZmZfdCBfX29mZjY0X3Q7CgogCnR5cGVkZWYgbG9uZyBpbnQgX190X3NjYWxhcl90Owp0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fdF91c2NhbGFyX3Q7CgogCnR5cGVkZWYgaW50IF9faW50
cHRyX3Q7CgoKIAoKCgoKCiMgOSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKCgoKCgoj
IDEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRl
Zi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4
LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3Iv
bGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoK
IAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMgMTMxICIvdXNyL2xpYi9n
Y2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAK
CgojIDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUv
c3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVm
IHVuc2lnbmVkIGludCAgd2ludF90OwoKCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIv
aTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCiMgMTQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCnR5cGVkZWYgaW50IF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k
ZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IF9HX2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9f
bW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0
cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191
aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKCgoKCiAKCgoKCgoK
CgoKCgoKCgoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCiMgMzAgIi91c3IvaW5jbHVkZS9saWJp
by5oIiAyIDMKCgoKCgoKCgoKCgoKCgoKCiAKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1
c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCnR5
cGVkZWYgdm9pZCAqX19nbnVjX3ZhX2xpc3Q7CgoKCiAKCiMgMTIyICIvdXNyL2xpYi9nY2MtbGli
L2k0ODYtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRhcmcuaCIgMwoKCgoKCgoKCgoKCgoK
CgoKCgoKCiMgMjA5ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjIvaW5j
bHVkZS9zdGRhcmcuaCIgMwoKCgoKIyA0OCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwoKCgoK
CgoKIyA2NyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKCgogCgoKCgoKCgoKCgoKCgoKCgoKIyA5
OCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCnN0cnVjdCBfSU9fanVtcF90OyAgc3RydWN0IF9J
T19GSUxFOwoKIAoKCgoKCgoKdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCiAKCnN0cnVjdCBf
SU9fbWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxF
ICpfc2J1ZjsKICAgCgogICAKICBpbnQgX3BvczsKIyAxODYgIi91c3IvaW5jbHVkZS9saWJpby5o
IiAzCgp9OwoKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwkJIAoKCiAgIAogICAKICBj
aGFyKiBfSU9fcmVhZF9wdHI7CSAKICBjaGFyKiBfSU9fcmVhZF9lbmQ7CSAKICBjaGFyKiBfSU9f
cmVhZF9iYXNlOwkgCiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CSAKICBjaGFyKiBfSU9fd3JpdGVf
cHRyOwkgCiAgY2hhciogX0lPX3dyaXRlX2VuZDsJIAogIGNoYXIqIF9JT19idWZfYmFzZTsJIAog
IGNoYXIqIF9JT19idWZfZW5kOwkgCiAgIAogIGNoYXIgKl9JT19zYXZlX2Jhc2U7ICAKICBjaGFy
ICpfSU9fYmFja3VwX2Jhc2U7ICAgCiAgY2hhciAqX0lPX3NhdmVfZW5kOyAgCgogIHN0cnVjdCBf
SU9fbWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxFICpfY2hhaW47CgogIGludCBf
ZmlsZW5vOwogIGludCBfYmxrc2l6ZTsKICBfX29mZl90ICAgX29sZF9vZmZzZXQ7ICAKCgogICAK
ICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBzaWduZWQgY2hhciBfdnRhYmxlX29mZnNl
dDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCiAgIAoKICBfSU9fbG9ja190ICpfbG9jazsKCgoKCgoK
CgogIF9fb2ZmNjRfdCAgIF9vZmZzZXQ7CiAgIAogIGludCBfdW51c2VkMlsxNl07Cgp9OwoKCgoK
CnN0cnVjdCBfSU9fRklMRV9wbHVzOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJf
MV9zdGRpbl87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZG91dF87CmV4
dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87CgoKCgoKCgoKCgoKIAoK
IAoKdHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICAodm9pZCAqICBfX2Nvb2tpZSwgY2hh
ciAqX19idWYsCgkJCQkgICAgICAgc2l6ZV90IF9fbmJ5dGVzKSAgOwoKIAoKCgoKCnR5cGVkZWYg
X19zc2l6ZV90IF9faW9fd3JpdGVfZm4gICh2b2lkICogIF9fY29va2llLCBfX2NvbnN0IGNoYXIg
Kl9fYnVmLAoJCQkJICAgICAgc2l6ZV90IF9fbikgIDsKCiAKCgoKCgp0eXBlZGVmIGludCBfX2lv
X3NlZWtfZm4gICh2b2lkICogIF9fY29va2llLCBfX29mZl90ICAgX19wb3MsIGludCBfX3cpICA7
CgogCnR5cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gICh2b2lkICogIF9fY29va2llKSAgOwoKCiMg
MzExICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwoKCgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGlu
dCBfX3VuZGVyZmxvdyAgKF9JT19GSUxFICopICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IF9fdWZs
b3cgIChfSU9fRklMRSAqKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBfX292ZXJmbG93ICAoX0lP
X0ZJTEUgKiwgaW50KSAgdGhyb3cgKCkgIDsKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiBpbnQgX0lP
X2dldGMgIChfSU9fRklMRSAqX19mcCkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgX0lPX3B1dGMg
IChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgX0lPX2Zl
b2YgIChfSU9fRklMRSAqX19mcCkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgX0lPX2ZlcnJvciAg
KF9JT19GSUxFICpfX2ZwKSAgdGhyb3cgKCkgIDsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tl
ZCAgKF9JT19GSUxFICpfX2ZwKSAgdGhyb3cgKCkgIDsKCiAKCgoKZXh0ZXJuIHZvaWQgX0lPX2Zs
b2NrZmlsZSAgKF9JT19GSUxFICopICB0aHJvdyAoKSAgOwpleHRlcm4gdm9pZCBfSU9fZnVubG9j
a2ZpbGUgIChfSU9fRklMRSAqKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tm
aWxlICAoX0lPX0ZJTEUgKikgIHRocm93ICgpICA7CgoKCgoKCgoKCgoKCmV4dGVybiBpbnQgX0lP
X3Zmc2NhbmYgIChfSU9fRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0
LAoJCQkgICAgIF9fZ251Y192YV9saXN0ICwgaW50ICpfX3Jlc3RyaWN0KSAgdGhyb3cgKCkgIDsK
ZXh0ZXJuIGludCBfSU9fdmZwcmludGYgIChfSU9fRklMRSAqX19yZXN0cmljdCwgY29uc3QgY2hh
ciAqX19yZXN0cmljdCwKCQkJICAgICAgX19nbnVjX3ZhX2xpc3QgKSAgdGhyb3cgKCkgIDsKZXh0
ZXJuIF9fc3NpemVfdCAgIF9JT19wYWRuICAoX0lPX0ZJTEUgKiwgaW50LCBfX3NzaXplX3QgICkg
IHRocm93ICgpICA7CmV4dGVybiBzaXplX3QgICBfSU9fc2dldG4gIChfSU9fRklMRSAqLCB2b2lk
ICosIHNpemVfdCAgKSAgdGhyb3cgKCkgIDsKCmV4dGVybiBfX29mZjY0X3QgICBfSU9fc2Vla29m
ZiAgKF9JT19GSUxFICosIF9fb2ZmNjRfdCAgLCBpbnQsIGludCkgIHRocm93ICgpICA7CmV4dGVy
biBfX29mZjY0X3QgICBfSU9fc2Vla3BvcyAgKF9JT19GSUxFICosIF9fb2ZmNjRfdCAgLCBpbnQp
ICB0aHJvdyAoKSAgOwoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgIChfSU9fRklM
RSAqKSAgdGhyb3cgKCkgIDsKCgp9CgoKCiMgMzYgIi91c3IvaW5jbHVkZS9nKysvc3RyZWFtYnVm
LmgiIDIgMwoKfQogCgojIDEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUu
Mi9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgogCgoKCgoK
CgoKCgoKCgoKCgoKdm9pZCB2YV9lbmQgKF9fZ251Y192YV9saXN0KTsJCSAKCgogCgoKCiAKCgoK
CgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAoKCgoKCgoKCgoKCgoKIyAxNzUg
Ii91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGFyZy5o
IiAzCgoKIAoKCgoKIAoKIAoKIAoKdHlwZWRlZiBfX2dudWNfdmFfbGlzdCB2YV9saXN0OwoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgojIDQwICIvdXNyL2luY2x1ZGUvZysrL3N0cmVhbWJ1Zi5oIiAy
IDMKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQysrIiB7CmNsYXNzIGlzdHJlYW07
ICAKY2xhc3Mgb3N0cmVhbTsgY2xhc3Mgc3RyZWFtYnVmOwoKIAoKCgoKdHlwZWRlZiBfX29mZjY0
X3QgICBzdHJlYW1vZmY7CnR5cGVkZWYgX19vZmY2NF90ICAgc3RyZWFtcG9zOwoKCgoKdHlwZWRl
ZiBfX3NzaXplX3QgICBzdHJlYW1zaXplOwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fZm10Zmxh
Z3M7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX2lvc3RhdGU7CgpzdHJ1Y3QgX2lvc19maWVsZHMK
eyAgCiAgICBzdHJlYW1idWYgKl9zdHJidWY7CiAgICBvc3RyZWFtKiBfdGllOwogICAgaW50IF93
aWR0aDsKICAgIF9fZm10ZmxhZ3MgX2ZsYWdzOwogICAgd2NoYXJfdCAgIF9maWxsOwogICAgX19p
b3N0YXRlIF9zdGF0ZTsKICAgIF9faW9zdGF0ZSBfZXhjZXB0aW9uczsKICAgIGludCBfcHJlY2lz
aW9uOwoKICAgIHZvaWQgKl9hcnJheXM7ICAKfTsKCgoKCgoKCgoKCgoKCgoKIyAxMjQgIi91c3Iv
aW5jbHVkZS9nKysvc3RyZWFtYnVmLmgiIDMKCgpjbGFzcyBpb3MgOiBwdWJsaWMgX2lvc19maWVs
ZHMgewogIGlvcyYgb3BlcmF0b3I9KGlvcyYpOyAgIAogIGlvcyAoY29uc3QgaW9zJik7ICAKICBw
dWJsaWM6CiAgICB0eXBlZGVmIF9fZm10ZmxhZ3MgZm10ZmxhZ3M7CiAgICB0eXBlZGVmIGludCBp
b3N0YXRlOwogICAgdHlwZWRlZiBpbnQgb3Blbm1vZGU7CiAgICB0eXBlZGVmIF9fc3NpemVfdCAg
IHN0cmVhbXNpemU7CiAgICBlbnVtIGlvX3N0YXRlIHsKCWdvb2RiaXQgPSAwICwKCWVvZmJpdCA9
IDEgLAoJZmFpbGJpdCA9IDIgLAoJYmFkYml0ID0gNCAgfTsKICAgIGVudW0gb3Blbl9tb2RlIHsK
CWluID0gMSAsCglvdXQgPSAyICwKCWF0ZSA9IDQgLAoJYXBwID0gOCAsCgl0cnVuYyA9IDE2ICwK
CW5vY3JlYXRlID0gMzIgLAoJbm9yZXBsYWNlID0gNjQgLAoJYmluID0gMTI4ICwgIAoJYmluYXJ5
ID0gMTI4ICB9OwogICAgZW51bSBzZWVrX2RpciB7IGJlZywgY3VyLCBlbmR9OwogICAgdHlwZWRl
ZiBlbnVtIHNlZWtfZGlyIHNlZWtkaXI7CiAgICAgCiAgICBlbnVtIHsgc2tpcHdzPSAwMSAsCgkg
ICBsZWZ0PSAwMiAsIHJpZ2h0PSAwNCAsIGludGVybmFsPSAwMTAgLAoJICAgZGVjPSAwMjAgLCBv
Y3Q9IDA0MCAsIGhleD0gMDEwMCAsCgkgICBzaG93YmFzZT0gMDIwMCAsIHNob3dwb2ludD0gMDQw
MCAsCgkgICB1cHBlcmNhc2U9IDAxMDAwICwgc2hvd3Bvcz0gMDIwMDAgLAoJICAgc2NpZW50aWZp
Yz0gMDQwMDAgLCBmaXhlZD0gMDEwMDAwICwKCSAgIHVuaXRidWY9IDAyMDAwMCAsIHN0ZGlvPSAw
NDAwMDAgCgoKCgkgICB9OwogICAgZW51bSB7ICAKCWJhc2VmaWVsZD1kZWMrb2N0K2hleCwKCWZs
b2F0ZmllbGQgPSBzY2llbnRpZmljK2ZpeGVkLAoJYWRqdXN0ZmllbGQgPSBsZWZ0K3JpZ2h0K2lu
dGVybmFsCiAgICB9OwoKIyAxNzcgIi91c3IvaW5jbHVkZS9nKysvc3RyZWFtYnVmLmgiIDMKCgog
ICAgb3N0cmVhbSogdGllKCkgY29uc3QgeyByZXR1cm4gX3RpZTsgfQogICAgb3N0cmVhbSogdGll
KG9zdHJlYW0qIHZhbCkgeyBvc3RyZWFtKiBzYXZlPV90aWU7IF90aWU9dmFsOyByZXR1cm4gc2F2
ZTsgfQoKICAgICAKICAgIHdjaGFyX3QgICBmaWxsKCkgY29uc3QgeyByZXR1cm4gX2ZpbGw7IH0K
ICAgIHdjaGFyX3QgICBmaWxsKHdjaGFyX3QgICBuZXdmKQoJe3djaGFyX3QgICBvbGRmID0gX2Zp
bGw7IF9maWxsID0gbmV3ZjsgcmV0dXJuIG9sZGY7fQogICAgZm10ZmxhZ3MgZmxhZ3MoKSBjb25z
dCB7IHJldHVybiBfZmxhZ3M7IH0KICAgIGZtdGZsYWdzIGZsYWdzKGZtdGZsYWdzIG5ld192YWwp
IHsKCWZtdGZsYWdzIG9sZF92YWwgPSBfZmxhZ3M7IF9mbGFncyA9IG5ld192YWw7IHJldHVybiBv
bGRfdmFsOyB9CiAgICBpbnQgcHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gX3ByZWNpc2lvbjsg
fQogICAgaW50IHByZWNpc2lvbihpbnQgbmV3cCkgewoJdW5zaWduZWQgc2hvcnQgb2xkcCA9IF9w
cmVjaXNpb247IF9wcmVjaXNpb24gPSAodW5zaWduZWQgc2hvcnQpbmV3cDsKCXJldHVybiBvbGRw
OyB9CiAgICBmbXRmbGFncyBzZXRmKGZtdGZsYWdzIHZhbCkgewoJZm10ZmxhZ3Mgb2xkYml0cyA9
IF9mbGFnczsKCV9mbGFncyB8PSB2YWw7IHJldHVybiBvbGRiaXRzOyB9CiAgICBmbXRmbGFncyBz
ZXRmKGZtdGZsYWdzIHZhbCwgZm10ZmxhZ3MgbWFzaykgewoJZm10ZmxhZ3Mgb2xkYml0cyA9IF9m
bGFnczsKCV9mbGFncyA9IChfZmxhZ3MgJiB+bWFzaykgfCAodmFsICYgbWFzayk7IHJldHVybiBv
bGRiaXRzOyB9CiAgICBmbXRmbGFncyB1bnNldGYoZm10ZmxhZ3MgbWFzaykgewoJZm10ZmxhZ3Mg
b2xkYml0cyA9IF9mbGFnczsKCV9mbGFncyAmPSB+bWFzazsgcmV0dXJuIG9sZGJpdHM7IH0KICAg
IGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIF93aWR0aDsgfQogICAgaW50IHdpZHRoKGludCB2
YWwpIHsgaW50IHNhdmUgPSBfd2lkdGg7IF93aWR0aCA9IHZhbDsgcmV0dXJuIHNhdmU7IH0KCgoK
CiAgICB2b2lkIF90aHJvd19mYWlsdXJlKCkgY29uc3QgeyB9CgogICAgdm9pZCBjbGVhcihpb3N0
YXRlIHN0YXRlID0gMCkgewoJX3N0YXRlID0gX3N0cmJ1ZiA/IHN0YXRlIDogc3RhdGV8YmFkYml0
OwoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAgICB2b2lk
IHNldChpb3N0YXRlIGZsYWcpIHsgX3N0YXRlIHw9IGZsYWc7CglpZiAoX3N0YXRlICYgX2V4Y2Vw
dGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KICAgIHZvaWQgc2V0c3RhdGUoaW9zdGF0ZSBmbGFn
KSB7IF9zdGF0ZSB8PSBmbGFnOyAgCglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19m
YWlsdXJlKCk7IH0KICAgIGludCBnb29kKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlID09IDA7IH0K
ICAgIGludCBlb2YoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgJiBpb3M6OmVvZmJpdDsgfQogICAg
aW50IGZhaWwoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgJiAoaW9zOjpiYWRiaXR8aW9zOjpmYWls
Yml0KTsgfQogICAgaW50IGJhZCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIGlvczo6YmFkYml0
OyB9CiAgICBpb3N0YXRlIHJkc3RhdGUoKSBjb25zdCB7IHJldHVybiBfc3RhdGU7IH0KICAgIG9w
ZXJhdG9yIHZvaWQqKCkgY29uc3QgeyByZXR1cm4gZmFpbCgpID8gKHZvaWQqKTAgOiAodm9pZCop
KC0xKTsgfQogICAgaW50IG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIGZhaWwoKTsgfQogICAg
aW9zdGF0ZSBleGNlcHRpb25zKCkgY29uc3QgeyByZXR1cm4gX2V4Y2VwdGlvbnM7IH0KICAgIHZv
aWQgZXhjZXB0aW9ucyhpb3N0YXRlIGVuYWJsZSkgewoJX2V4Y2VwdGlvbnMgPSBlbmFibGU7Cglp
ZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KCiAgICBzdHJlYW1i
dWYqIHJkYnVmKCkgY29uc3QgeyByZXR1cm4gX3N0cmJ1ZjsgfQogICAgc3RyZWFtYnVmKiByZGJ1
ZihzdHJlYW1idWYgKl9zKSB7CiAgICAgIHN0cmVhbWJ1ZiAqX29sZCA9IF9zdHJidWY7IF9zdHJi
dWYgPSBfczsgY2xlYXIgKCk7IHJldHVybiBfb2xkOyB9CgogICAgc3RhdGljIGludCBzeW5jX3dp
dGhfc3RkaW8oaW50IG9uKTsKICAgIHN0YXRpYyB2b2lkIHN5bmNfd2l0aF9zdGRpbygpIHsgc3lu
Y193aXRoX3N0ZGlvKDEpOyB9CiAgICBzdGF0aWMgZm10ZmxhZ3MgYml0YWxsb2MoKTsKICAgIHN0
YXRpYyBpbnQgeGFsbG9jKCk7CiAgICB2b2lkKiYgcHdvcmQoaW50KTsKICAgIHZvaWQqIHB3b3Jk
KGludCkgY29uc3Q7CiAgICBsb25nJiBpd29yZChpbnQpOwogICAgbG9uZyBpd29yZChpbnQpIGNv
bnN0OwoKCgoKCgoKCgogICAgIAogICAgY2xhc3MgSW5pdCB7CiAgICBwdWJsaWM6CiAgICAgIElu
aXQgKCkgeyB9CiAgICB9OwoKICBwcm90ZWN0ZWQ6CiAgICBpbmxpbmUgaW9zKHN0cmVhbWJ1Ziog
c2IgPSAwLCBvc3RyZWFtKiB0aWVfdG8gPSAwKTsKICAgIGlubGluZSB2aXJ0dWFsIH5pb3MoKTsK
ICAgIGlubGluZSB2b2lkIGluaXQoc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllID0gMCk7Cn07
CgoKCgp0eXBlZGVmIGlvczo6c2Vla19kaXIgX3NlZWtfZGlyOwoKCiAKIAogCiAKIAoKIAogCmNs
YXNzIHN0cmVhbW1hcmtlciA6IHByaXZhdGUgX0lPX21hcmtlciB7CiAgICBmcmllbmQgY2xhc3Mg
c3RyZWFtYnVmOwogICAgdm9pZCBzZXRfb2Zmc2V0KGludCBvZmZzZXQpIHsgX3BvcyA9IG9mZnNl
dDsgfQogIHB1YmxpYzoKICAgIHN0cmVhbW1hcmtlcihzdHJlYW1idWYgKnNiKTsKICAgIH5zdHJl
YW1tYXJrZXIoKTsKICAgIGludCBzYXZpbmcoKSB7IHJldHVybiAgMTsgfQogICAgaW50IGRlbHRh
KHN0cmVhbW1hcmtlciYpOwogICAgaW50IGRlbHRhKCk7Cn07CgpzdHJ1Y3Qgc3RyZWFtYnVmIDog
cHVibGljIF9JT19GSUxFIHsgIAogICAgZnJpZW5kIGNsYXNzIGlvczsKICAgIGZyaWVuZCBjbGFz
cyBpc3RyZWFtOwogICAgZnJpZW5kIGNsYXNzIG9zdHJlYW07CiAgICBmcmllbmQgY2xhc3Mgc3Ry
ZWFtbWFya2VyOwogICAgY29uc3Qgdm9pZCAqJl92dGFibGUoKSB7IHJldHVybiAqKGNvbnN0IHZv
aWQqKikoKF9JT19GSUxFKil0aGlzICsgMSk7IH0KICBwcm90ZWN0ZWQ6CiAgICBzdGF0aWMgc3Ry
ZWFtYnVmKiBfbGlzdF9hbGw7ICAKICAgIF9JT19GSUxFKiYgeGNoYWluKCkgeyByZXR1cm4gX2No
YWluOyB9CiAgICB2b2lkIF91bl9saW5rKCk7CiAgICB2b2lkIF9saW5rX2luKCk7CiAgICBjaGFy
KiBncHRyKCkgY29uc3QKICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZl
X2Jhc2UgOiBfSU9fcmVhZF9wdHI7IH0KICAgIGNoYXIqIHBwdHIoKSBjb25zdCB7IHJldHVybiBf
SU9fd3JpdGVfcHRyOyB9CiAgICBjaGFyKiBlZ3B0cigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9m
bGFncyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAgIGNoYXIq
IGVwcHRyKCkgY29uc3QgeyByZXR1cm4gX0lPX3dyaXRlX2VuZDsgfQogICAgY2hhciogcGJhc2Uo
KSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfYmFzZTsgfQogICAgY2hhciogZWJhY2soKSBjb25z
dAogICAgICB7IHJldHVybiBfZmxhZ3MgICYgMHgxMDAgID8gX0lPX3NhdmVfYmFzZSA6IF9JT19y
ZWFkX2Jhc2U7fQogICAgY2hhciogYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZfYmFzZTsg
fQogICAgY2hhciogZWJ1ZigpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZfZW5kOyB9CiAgICBpbnQg
YmxlbigpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZfZW5kIC0gX0lPX2J1Zl9iYXNlOyB9CiAgICB2
b2lkIHhwdXRfY2hhcihjaGFyIGMpIHsgKl9JT193cml0ZV9wdHIrKyA9IGM7IH0KICAgIGludCB4
ZmxhZ3MoKSB7IHJldHVybiBfZmxhZ3MgOyB9CiAgICBpbnQgeGZsYWdzKGludCBmKSB7aW50IGZs
ID0gX2ZsYWdzIDsgX2ZsYWdzICA9IGY7IHJldHVybiBmbDt9CiAgICB2b2lkIHhzZXRmbGFncyhp
bnQgZikgeyBfZmxhZ3MgIHw9IGY7IH0KICAgIHZvaWQgeHNldGZsYWdzKGludCBmLCBpbnQgbWFz
aykKICAgICAgeyBfZmxhZ3MgID0gKF9mbGFncyAgJiB+bWFzaykgfCAoZiAmIG1hc2spOyB9CiAg
ICB2b2lkIGdidW1wKGludCBuKQogICAgICB7IF9mbGFncyAgJiAweDEwMCAgPyAoX0lPX3NhdmVf
YmFzZSs9bik6KF9JT19yZWFkX3B0cis9bik7fQogICAgdm9pZCBwYnVtcChpbnQgbikgeyBfSU9f
d3JpdGVfcHRyICs9IG47IH0KICAgIHZvaWQgc2V0YihjaGFyKiBiLCBjaGFyKiBlYiwgaW50IGE9
MCk7CiAgICB2b2lkIHNldHAoY2hhciogcCwgY2hhciogZXApCiAgICAgIHsgX0lPX3dyaXRlX2Jh
c2U9X0lPX3dyaXRlX3B0cj1wOyBfSU9fd3JpdGVfZW5kPWVwOyB9CiAgICB2b2lkIHNldGcoY2hh
ciogZWIsIGNoYXIqIGcsIGNoYXIgKmVnKSB7CiAgICAgIGlmIChfZmxhZ3MgICYgMHgxMDAgKSBf
SU9fZnJlZV9iYWNrdXBfYXJlYSh0aGlzKTsgCiAgICAgIF9JT19yZWFkX2Jhc2UgPSBlYjsgX0lP
X3JlYWRfcHRyID0gZzsgX0lPX3JlYWRfZW5kID0gZWc7IH0KICAgIGNoYXIgKnNob3J0YnVmKCkg
eyByZXR1cm4gX3Nob3J0YnVmOyB9CgogICAgaW50IGluX2JhY2t1cCgpIHsgcmV0dXJuIF9mbGFn
cyAmIDB4MTAwIDsgfQogICAgIAogICAgY2hhciAqR2Jhc2UoKSB7IHJldHVybiBpbl9iYWNrdXAo
KSA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9iYXNlOyB9CiAgICAgCiAgICBjaGFyICplR3B0
cigpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3NhdmVfZW5kIDogX0lPX3JlYWRfZW5kOyB9
CiAgICAgCiAgICBjaGFyICpCYmFzZSgpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3JlYWRf
YmFzZSA6IF9JT19zYXZlX2Jhc2U7IH0KICAgIGNoYXIgKkJwdHIoKSB7IHJldHVybiBfSU9fYmFj
a3VwX2Jhc2U7IH0KICAgICAKICAgIGNoYXIgKmVCcHRyKCkgeyByZXR1cm4gaW5fYmFja3VwKCkg
PyBfSU9fcmVhZF9lbmQgOiBfSU9fc2F2ZV9lbmQ7IH0KICAgIGNoYXIgKk5iYXNlKCkgeyByZXR1
cm4gX0lPX3NhdmVfYmFzZTsgfQogICAgY2hhciAqZU5wdHIoKSB7IHJldHVybiBfSU9fc2F2ZV9l
bmQ7IH0KICAgIGludCBoYXZlX2JhY2t1cCgpIHsgcmV0dXJuIF9JT19zYXZlX2Jhc2UgIT0gX19u
dWxsIDsgfQogICAgaW50IGhhdmVfbWFya2VycygpIHsgcmV0dXJuIF9tYXJrZXJzICE9IF9fbnVs
bCA7IH0KICAgIHZvaWQgZnJlZV9iYWNrdXBfYXJlYSgpOwogICAgdm9pZCB1bnNhdmVfbWFya2Vy
cygpOyAgCiAgICBpbnQgcHV0X21vZGUoKSB7IHJldHVybiBfZmxhZ3MgJiAweDgwMCA7IH0KICAg
IGludCBzd2l0Y2hfdG9fZ2V0X21vZGUoKTsKICAgIAogICAgc3RyZWFtYnVmKGludCBmbGFncz0w
KTsKICBwdWJsaWM6CiAgICBzdGF0aWMgaW50IGZsdXNoX2FsbCgpOwogICAgc3RhdGljIHZvaWQg
Zmx1c2hfYWxsX2xpbmVidWZmZXJlZCgpOyAgCiAgICB2aXJ0dWFsIH5zdHJlYW1idWYoKTsKICAg
IHZpcnR1YWwgaW50IG92ZXJmbG93KGludCBjID0gKC0xKSApOyAgCiAgICB2aXJ0dWFsIGludCB1
bmRlcmZsb3coKTsgIAogICAgdmlydHVhbCBpbnQgdWZsb3coKTsgIAogICAgdmlydHVhbCBpbnQg
cGJhY2tmYWlsKGludCBjKTsKIAogICAgdmlydHVhbCBzdHJlYW1zaXplIHhzcHV0bihjb25zdCBj
aGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHhzZ2V0bihjaGFy
KiBzLCBzdHJlYW1zaXplIG4pOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vla29mZihzdHJlYW1v
ZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCk7CiAgICB2aXJ0dWFsIHN0
cmVhbXBvcyBzZWVrcG9zKHN0cmVhbXBvcyBwb3MsIGludCBtb2RlID0gaW9zOjppbnxpb3M6Om91
dCk7CgogICAgc3RyZWFtcG9zIHB1YnNlZWtvZmYoc3RyZWFtb2ZmIG8sIF9zZWVrX2RpciBkLCBp
bnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KQogICAgICB7IHJldHVybiBfSU9fc2Vla29mZiAodGhp
cywgbywgZCwgbW9kZSk7IH0KICAgIHN0cmVhbXBvcyBwdWJzZWVrcG9zKHN0cmVhbXBvcyBwb3Ms
IGludCBtb2RlID0gaW9zOjppbnxpb3M6Om91dCkKICAgICAgeyByZXR1cm4gX0lPX3NlZWtwb3Mg
KHRoaXMsIHBvcywgbW9kZSk7IH0KICAgIHN0cmVhbXBvcyBzc2Vla29mZihzdHJlYW1vZmYsIF9z
ZWVrX2RpciwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCk7CiAgICBzdHJlYW1wb3Mgc3NlZWtw
b3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1
YWwgc3RyZWFtYnVmKiBzZXRidWYoY2hhciogcCwgaW50IGxlbik7CiAgICB2aXJ0dWFsIGludCBz
eW5jKCk7CiAgICB2aXJ0dWFsIGludCBkb2FsbG9jYXRlKCk7CgogICAgaW50IHNlZWttYXJrKHN0
cmVhbW1hcmtlciYgbWFyaywgaW50IGRlbHRhID0gMCk7CiAgICBpbnQgc3B1dGJhY2tjKGNoYXIg
Yyk7CiAgICBpbnQgc3VuZ2V0YygpOwogICAgaW50IHVuYnVmZmVyZWQoKSB7IHJldHVybiBfZmxh
Z3MgJiAyICA/IDEgOiAwOyB9CiAgICBpbnQgbGluZWJ1ZmZlcmVkKCkgeyByZXR1cm4gX2ZsYWdz
ICYgMHgyMDAgID8gMSA6IDA7IH0KICAgIHZvaWQgdW5idWZmZXJlZChpbnQgaSkKCXsgaWYgKGkp
IF9mbGFncyB8PSAyIDsgZWxzZSBfZmxhZ3MgJj0gfjIgOyB9CiAgICB2b2lkIGxpbmVidWZmZXJl
ZChpbnQgaSkKCXsgaWYgKGkpIF9mbGFncyB8PSAweDIwMCA7IGVsc2UgX2ZsYWdzICY9IH4weDIw
MCA7IH0KICAgIGludCBhbGxvY2F0ZSgpIHsgIAoJaWYgKGJhc2UoKSB8fCB1bmJ1ZmZlcmVkKCkp
IHJldHVybiAwOwoJZWxzZSByZXR1cm4gZG9hbGxvY2F0ZSgpOyB9CiAgICAgCiAgICB2b2lkIGFs
bG9jYnVmKCkgeyBpZiAoYmFzZSgpID09IF9fbnVsbCApIGRvYWxsb2NidWYoKTsgfQogICAgdm9p
ZCBkb2FsbG9jYnVmKCk7CiAgICBpbnQgaW5fYXZhaWwoKSB7IHJldHVybiBfSU9fcmVhZF9lbmQg
LSBfSU9fcmVhZF9wdHI7IH0KICAgIGludCBvdXRfd2FpdGluZygpIHsgcmV0dXJuIF9JT193cml0
ZV9wdHIgLSBfSU9fd3JpdGVfYmFzZTsgfQogICAgc3RyZWFtc2l6ZSBzcHV0bihjb25zdCBjaGFy
KiBzLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIHhzcHV0bihzLCBuKTsgfQogICAgc3RyZWFtc2l6
ZSBwYWRuKGNoYXIgcGFkLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIF9JT19wYWRuKHRoaXMsIHBh
ZCwgbik7IH0KICAgIHN0cmVhbXNpemUgc2dldG4oY2hhciogcywgc3RyZWFtc2l6ZSBuKSB7IHJl
dHVybiBfSU9fc2dldG4odGhpcywgcywgbik7IH0KICAgIGludCBpZ25vcmUoaW50KTsKICAgIGlu
dCBnZXRfY29sdW1uKCk7CiAgICBpbnQgc2V0X2NvbHVtbihpbnQpOwogICAgbG9uZyBzZ2V0bGlu
ZShjaGFyKiBidWYsIHNpemVfdCAgIG4sIGNoYXIgZGVsaW0sIGludCBwdXRiYWNrX2RlbGltKTsK
ICAgIGludCBzcHV0YyhpbnQgYykgeyByZXR1cm4gX0lPX3B1dGMoYywgdGhpcyk7IH0KICAgIGlu
dCBzYnVtcGMoKSB7IHJldHVybiBfSU9fZ2V0Yyh0aGlzKTsgfQogICAgaW50IHNnZXRjKCkgeyBy
ZXR1cm4gKCggIHRoaXMgICktPl9JT19yZWFkX3B0ciA+PSAoICB0aGlzICApLT5fSU9fcmVhZF9l
bmQgJiYgX191bmRlcmZsb3cgKCAgdGhpcyAgKSA9PSAoLTEpICA/ICgtMSkgIDogKih1bnNpZ25l
ZCBjaGFyICopICggIHRoaXMgICktPl9JT19yZWFkX3B0cikgIDsgfQogICAgaW50IHNuZXh0Yygp
IHsKCWlmIChfSU9fcmVhZF9wdHIgPj0gX0lPX3JlYWRfZW5kICYmIF9fdW5kZXJmbG93KHRoaXMp
ID09ICgtMSkgKQoJICByZXR1cm4gKC0xKSA7CgllbHNlIHJldHVybiBfSU9fcmVhZF9wdHIrKywg
c2dldGMoKTsgfQogICAgdm9pZCBzdG9zc2MoKSB7IGlmIChfSU9fcmVhZF9wdHIgPCBfSU9fcmVh
ZF9lbmQpIF9JT19yZWFkX3B0cisrOyB9CiAgICBpbnQgdnNjYW4oY2hhciBjb25zdCAqZm10MCwg
X19nbnVjX3ZhX2xpc3QgIGFwLCBpb3MqIHN0cmVhbSA9IF9fbnVsbCApOwogICAgaW50IHNjYW4o
Y2hhciBjb25zdCAqZm10MCAuLi4pOwogICAgaW50IHZmb3JtKGNoYXIgY29uc3QgKmZtdDAsIF9f
Z251Y192YV9saXN0ICBhcCk7CiAgICBpbnQgZm9ybShjaGFyIGNvbnN0ICpmbXQwIC4uLik7CgoK
CgogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c19yZWFkKGNoYXIqIGJ1Ziwgc3RyZWFtc2l6ZSBz
aXplKTsKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfd3JpdGUoY29uc3QgY2hhciosIHN0cmVh
bXNpemUpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc3lzX3NlZWsoc3RyZWFtb2ZmLCBfc2Vla19k
aXIpOwogICAgdmlydHVhbCBpbnQgc3lzX2Nsb3NlKCk7CiAgICB2aXJ0dWFsIGludCBzeXNfc3Rh
dCh2b2lkKik7ICAKCiAgICB2aXJ0dWFsIGludCBzaG93bWFueWMoKTsKICAgIHZpcnR1YWwgdm9p
ZCBpbWJ1ZSh2b2lkICopOwoKfTsKCiAKIAoKY2xhc3MgZmlsZWJ1ZiA6IHB1YmxpYyBzdHJlYW1i
dWYgewogIHByb3RlY3RlZDoKICAgIHZvaWQgaW5pdCgpOwogIHB1YmxpYzoKICAgIHN0YXRpYyBj
b25zdCBpbnQgb3BlbnByb3Q7ICAKICAgIGZpbGVidWYoKTsKICAgIGZpbGVidWYoaW50IGZkKTsK
ICAgIGZpbGVidWYoaW50IGZkLCBjaGFyKiBwLCBpbnQgbGVuKTsKCgoKICAgIH5maWxlYnVmKCk7
CiAgICBmaWxlYnVmKiBhdHRhY2goaW50IGZkKTsKICAgIGZpbGVidWYqIG9wZW4oY29uc3QgY2hh
ciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpOwogICAgZmlsZWJ1Ziogb3Blbihjb25zdCBj
aGFyICpmaWxlbmFtZSwgaW9zOjpvcGVubW9kZSBtb2RlLCBpbnQgcHJvdCA9IDA2NjQpOwogICAg
dmlydHVhbCBpbnQgdW5kZXJmbG93KCk7CiAgICB2aXJ0dWFsIGludCBvdmVyZmxvdyhpbnQgYyA9
ICgtMSkgKTsKICAgIGludCBpc19vcGVuKCkgY29uc3QgeyByZXR1cm4gX2ZpbGVubyA+PSAwOyB9
CiAgICBpbnQgZmQoKSBjb25zdCB7IHJldHVybiBpc19vcGVuKCkgPyBfZmlsZW5vIDogKC0xKSA7
IH0KICAgIGZpbGVidWYqIGNsb3NlKCk7CiAgICB2aXJ0dWFsIGludCBkb2FsbG9jYXRlKCk7CiAg
ICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9k
ZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtYnVmKiBzZXRidWYoY2hhciog
cCwgaW50IGxlbik7CiAgICBzdHJlYW1zaXplIHhzcHV0bihjb25zdCBjaGFyKiBzLCBzdHJlYW1z
aXplIG4pOwogICAgc3RyZWFtc2l6ZSB4c2dldG4oY2hhciogcywgc3RyZWFtc2l6ZSBuKTsKICAg
IHZpcnR1YWwgaW50IHN5bmMoKTsKICBwcm90ZWN0ZWQ6ICAKIAogICAgaW50IGlzX3JlYWRpbmco
KSB7IHJldHVybiBlYmFjaygpICE9IGVncHRyKCk7IH0KICAgIGNoYXIqIGN1cl9wdHIoKSB7IHJl
dHVybiBpc19yZWFkaW5nKCkgPyAgZ3B0cigpIDogcHB0cigpOyB9CiAgICAgCiAgICBjaGFyKiBm
aWxlX3B0cigpIHsgcmV0dXJuIGVHcHRyKCk7IH0KICAgICAKICAgIHZpcnR1YWwgc3RyZWFtc2l6
ZSBzeXNfcmVhZChjaGFyKiBidWYsIHN0cmVhbXNpemUgc2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVh
bXBvcyBzeXNfc2VlayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICB2aXJ0dWFsIHN0cmVhbXNp
emUgc3lzX3dyaXRlKGNvbnN0IGNoYXIqLCBzdHJlYW1zaXplKTsKICAgIHZpcnR1YWwgaW50IHN5
c19zdGF0KHZvaWQqKTsgIAogICAgdmlydHVhbCBpbnQgc3lzX2Nsb3NlKCk7CgoKCgp9OwoKaW5s
aW5lIHZvaWQgaW9zOjppbml0KHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZV90bykgewoJCV9z
dGF0ZSA9IHNiID8gaW9zOjpnb29kYml0IDogaW9zOjpiYWRiaXQ7IF9leGNlcHRpb25zPTA7CgkJ
X3N0cmJ1Zj1zYjsgX3RpZSA9IHRpZV90bzsgX3dpZHRoPTA7IF9maWxsPScgJzsKCgkJX2ZsYWdz
PWlvczo6c2tpcHdzfGlvczo6ZGVjOwoKCgoJCV9wcmVjaXNpb249NjsgX2FycmF5cyA9IDA7IH0K
CmlubGluZSBpb3M6OmlvcyhzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsgaW5pdChz
YiwgdGllX3RvKTsgfQoKaW5saW5lIGlvczo6fmlvcygpIHsKCgoKICAgICAKICAgICAKICAgIG9w
ZXJhdG9yIGRlbGV0ZVtdIChfYXJyYXlzKTsKfQp9ICAKCiMgMzEgIi91c3IvaW5jbHVkZS9nKysv
aW9zdHJlYW0uaCIgMiAzCgoKZXh0ZXJuICJDKysiIHsKY2xhc3MgaXN0cmVhbTsgY2xhc3Mgb3N0
cmVhbTsKdHlwZWRlZiBpb3MmICgqX19tYW5pcCkoaW9zJik7CnR5cGVkZWYgaXN0cmVhbSYgKCpf
X2ltYW5pcCkoaXN0cmVhbSYpOwp0eXBlZGVmIG9zdHJlYW0mICgqX19vbWFuaXApKG9zdHJlYW0m
KTsKCmV4dGVybiBpc3RyZWFtJiB3cyhpc3RyZWFtJiBpbnMpOwpleHRlcm4gb3N0cmVhbSYgZmx1
c2gob3N0cmVhbSYgb3V0cyk7CmV4dGVybiBvc3RyZWFtJiBlbmRsKG9zdHJlYW0mIG91dHMpOwpl
eHRlcm4gb3N0cmVhbSYgZW5kcyhvc3RyZWFtJiBvdXRzKTsKCmNsYXNzIG9zdHJlYW0gOiB2aXJ0
dWFsIHB1YmxpYyBpb3MKewogICAgIAogICAgdm9pZCBkb19vc2Z4KCk7CiAgcHVibGljOgogICAg
b3N0cmVhbSgpIHsgfQogICAgb3N0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVkPSBf
X251bGwgKTsKICAgIGludCBvcGZ4KCkgewoJaWYgKCFnb29kKCkpIHJldHVybiAwOwoJZWxzZSB7
IGlmIChfdGllKSBfdGllLT5mbHVzaCgpOyAgOyByZXR1cm4gMTt9IH0KICAgIHZvaWQgb3NmeCgp
IHsgIDsKCQkgIGlmIChmbGFncygpICYgKGlvczo6dW5pdGJ1Znxpb3M6OnN0ZGlvKSkKCQkgICAg
ICBkb19vc2Z4KCk7IH0KICAgIG9zdHJlYW0mIGZsdXNoKCk7CiAgICBvc3RyZWFtJiBwdXQoY2hh
ciBjKSB7IF9zdHJidWYtPnNwdXRjKGMpOyByZXR1cm4gKnRoaXM7IH0KCgoKCgogICAgb3N0cmVh
bSYgd3JpdGUoY29uc3QgY2hhciAqcywgc3RyZWFtc2l6ZSBuKTsKICAgIG9zdHJlYW0mIHdyaXRl
KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gd3Jp
dGUoKGNvbnN0IGNoYXIqKXMsIG4pO30KICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHNpZ25lZCBj
aGFyICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilz
LCBuKTt9CiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCB2b2lkICpzLCBzdHJlYW1zaXplIG4pCiAg
ICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiBzZWVr
cChzdHJlYW1wb3MpOwogICAgb3N0cmVhbSYgc2Vla3Aoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwog
ICAgc3RyZWFtcG9zIHRlbGxwKCk7CiAgICBvc3RyZWFtJiBmb3JtKGNvbnN0IGNoYXIgKmZvcm1h
dCAuLi4pOwogICAgb3N0cmVhbSYgdmZvcm0oY29uc3QgY2hhciAqZm9ybWF0LCBfX2dudWNfdmFf
bGlzdCAgYXJncyk7CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjaGFyIGMpOwogICAgb3N0cmVh
bSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNoYXIp
YzsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzaWduZWQgY2hhciBjKSB7IHJldHVybiAoKnRo
aXMpIDw8IChjaGFyKWM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3QgY2hhciAqcyk7
CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMpCgl7IHJldHVy
biAoKnRoaXMpIDw8IChjb25zdCBjaGFyKilzOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNv
bnN0IHNpZ25lZCBjaGFyICpzKQoJeyByZXR1cm4gKCp0aGlzKSA8PCAoY29uc3QgY2hhciopczsg
fQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCB2b2lkICpwKTsKICAgIG9zdHJlYW0mIG9w
ZXJhdG9yPDwoaW50IG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBpbnQgbik7
CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8
KHVuc2lnbmVkIGxvbmcgbik7CgogICAgX19leHRlbnNpb25fXyBvc3RyZWFtJiBvcGVyYXRvcjw8
KGxvbmcgbG9uZyBuKTsKICAgIF9fZXh0ZW5zaW9uX18gb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNp
Z25lZCBsb25nIGxvbmcgbik7CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzaG9ydCBuKSB7cmV0
dXJuIG9wZXJhdG9yPDwoKGludCluKTt9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVk
IHNob3J0IG4pIHtyZXR1cm4gb3BlcmF0b3I8PCgodW5zaWduZWQgaW50KW4pO30KCiAgICBvc3Ry
ZWFtJiBvcGVyYXRvcjw8KGJvb2wgYikgeyByZXR1cm4gb3BlcmF0b3I8PCgoaW50KWIpOyB9Cgog
ICAgb3N0cmVhbSYgb3BlcmF0b3I8PChkb3VibGUgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8
KGZsb2F0IG4pIHsgcmV0dXJuIG9wZXJhdG9yPDwoKGRvdWJsZSluKTsgfQoKICAgIG9zdHJlYW0m
IG9wZXJhdG9yPDwobG9uZyBkb3VibGUgbik7CgoKCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KF9f
b21hbmlwIGZ1bmMpIHsgcmV0dXJuICgqZnVuYykoKnRoaXMpOyB9CiAgICBvc3RyZWFtJiBvcGVy
YXRvcjw8KF9fbWFuaXAgZnVuYykgeygqZnVuYykoKnRoaXMpOyByZXR1cm4gKnRoaXM7fQogICAg
b3N0cmVhbSYgb3BlcmF0b3I8PChzdHJlYW1idWYqKTsKCgoKfTsKCmNsYXNzIGlzdHJlYW0gOiB2
aXJ0dWFsIHB1YmxpYyBpb3MKewogICAgIApwcm90ZWN0ZWQ6CiAgICBzaXplX3QgICBfZ2NvdW50
OwoKICAgIGludCBfc2tpcF93cygpOwogIHB1YmxpYzoKICAgIGlzdHJlYW0oKTogX2djb3VudCAo
MCkgeyB9CiAgICBpc3RyZWFtKHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qdGllZD0gX19udWxsICk7
CiAgICBpc3RyZWFtJiBnZXQoY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJyk7
CiAgICBpc3RyZWFtJiBnZXQodW5zaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGlt
ID0gJ1xuJykKCXsgcmV0dXJuIGdldCgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0
cmVhbSYgZ2V0KGNoYXImIGMpOwogICAgaXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXImIGMpIHsg
cmV0dXJuIGdldCgoY2hhciYpYyk7IH0KICAgIGlzdHJlYW0mIGdldGxpbmUoY2hhciogcHRyLCBp
bnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJyk7CiAgICBpc3RyZWFtJiBnZXRsaW5lKHVuc2lnbmVk
IGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXRsaW5l
KChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXQoc2lnbmVkIGNoYXIm
IGMpICB7IHJldHVybiBnZXQoKGNoYXImKWMpOyB9CiAgICBpc3RyZWFtJiBnZXQoc2lnbmVkIGNo
YXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXQoKGNoYXIq
KXB0ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlzdHJlYW0mIGdldGxpbmUoc2lnbmVkIGNoYXIqIHB0
ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXRsaW5lKChjaGFyKilw
dHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiByZWFkKGNoYXIgKnB0ciwgc3RyZWFtc2l6
ZSBuKTsKICAgIGlzdHJlYW0mIHJlYWQodW5zaWduZWQgY2hhciAqcHRyLCBzdHJlYW1zaXplIG4p
CiAgICAgIHsgcmV0dXJuIHJlYWQoKGNoYXIqKXB0ciwgbik7IH0KICAgIGlzdHJlYW0mIHJlYWQo
c2lnbmVkIGNoYXIgKnB0ciwgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiByZWFkKChjaGFy
KilwdHIsIG4pOyB9CiAgICBpc3RyZWFtJiByZWFkKHZvaWQgKnB0ciwgc3RyZWFtc2l6ZSBuKQog
ICAgICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9CiAgICBpc3RyZWFtJiBnZXQoc3Ry
ZWFtYnVmJiBzYiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0cyhjaGFyICoq
cywgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaW50IGlwZngoaW50IG5lZWQgPSAwKSB7CglpZiAo
IWdvb2QoKSkgeyBzZXQoaW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7IH0KCWVsc2UgewoJICAgOwoJ
ICBpZiAoX3RpZSAmJiAobmVlZCA9PSAwIHx8IHJkYnVmKCktPmluX2F2YWlsKCkgPCBuZWVkKSkg
X3RpZS0+Zmx1c2goKTsKCSAgaWYgKCFuZWVkICYmIChmbGFncygpICYgaW9zOjpza2lwd3MpKSBy
ZXR1cm4gX3NraXBfd3MoKTsKCSAgZWxzZSByZXR1cm4gMTsKCX0KICAgIH0KICAgIGludCBpcGZ4
MCgpIHsgIAoJaWYgKCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9Cgll
bHNlIHsKCSAgIDsKCSAgaWYgKF90aWUpIF90aWUtPmZsdXNoKCk7CgkgIGlmIChmbGFncygpICYg
aW9zOjpza2lwd3MpIHJldHVybiBfc2tpcF93cygpOwoJICBlbHNlIHJldHVybiAxOwoJfQogICAg
fQogICAgaW50IGlwZngxKCkgeyAgCglpZiAoIWdvb2QoKSkgeyBzZXQoaW9zOjpmYWlsYml0KTsg
cmV0dXJuIDA7IH0KCWVsc2UgewoJICAgOwoJICBpZiAoX3RpZSAmJiByZGJ1ZigpLT5pbl9hdmFp
bCgpID09IDApIF90aWUtPmZsdXNoKCk7CgkgIHJldHVybiAxOwoJfQogICAgfQogICAgdm9pZCBp
c2Z4KCkgeyAgOyB9CiAgICBpbnQgZ2V0KCkgeyBpZiAoIWlwZngxKCkpIHJldHVybiAoLTEpIDsK
CQllbHNlIHsgaW50IGNoID0gX3N0cmJ1Zi0+c2J1bXBjKCk7CgkJICAgICAgIGlmIChjaCA9PSAo
LTEpICkgc2V0KGlvczo6ZW9mYml0KTsKCQkgICAgICAgaXNmeCgpOwoJCSAgICAgICByZXR1cm4g
Y2g7CgkJICAgICB9IH0KICAgIGludCBwZWVrKCk7CiAgICBzaXplX3QgICBnY291bnQoKSB7IHJl
dHVybiBfZ2NvdW50OyB9CiAgICBpc3RyZWFtJiBpZ25vcmUoaW50IG49MSwgaW50IGRlbGltID0g
KC0xKSApOwogICAgaW50IHN5bmMgKCk7CiAgICBpc3RyZWFtJiBzZWVrZyhzdHJlYW1wb3MpOwog
ICAgaXN0cmVhbSYgc2Vla2coc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgc3RyZWFtcG9zIHRl
bGxnKCk7CiAgICBpc3RyZWFtJiBwdXRiYWNrKGNoYXIgY2gpIHsKCWlmIChnb29kKCkgJiYgX3N0
cmJ1Zi0+c3B1dGJhY2tjKGNoKSA9PSAoLTEpICkgY2xlYXIoaW9zOjpiYWRiaXQpOwoJcmV0dXJu
ICp0aGlzO30KICAgIGlzdHJlYW0mIHVuZ2V0KCkgewoJaWYgKGdvb2QoKSAmJiBfc3RyYnVmLT5z
dW5nZXRjKCkgPT0gKC0xKSApIGNsZWFyKGlvczo6YmFkYml0KTsKCXJldHVybiAqdGhpczt9CiAg
ICBpc3RyZWFtJiBzY2FuKGNvbnN0IGNoYXIgKmZvcm1hdCAuLi4pOwogICAgaXN0cmVhbSYgdnNj
YW4oY29uc3QgY2hhciAqZm9ybWF0LCBfX2dudWNfdmFfbGlzdCAgYXJncyk7CgoKCgoKCiAgICBp
c3RyZWFtJiBvcGVyYXRvcj4+KGNoYXIqKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWdu
ZWQgY2hhciogcCkgeyByZXR1cm4gb3BlcmF0b3I+PigoY2hhciopcCk7IH0KICAgIGlzdHJlYW0m
IG9wZXJhdG9yPj4oc2lnbmVkIGNoYXIqcCkgeyByZXR1cm4gb3BlcmF0b3I+PigoY2hhciopcCk7
IH0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oY2hhciYgYyk7CiAgICBpc3RyZWFtJiBvcGVyYXRv
cj4+KHVuc2lnbmVkIGNoYXImIGMpIHtyZXR1cm4gb3BlcmF0b3I+PigoY2hhciYpYyk7fQogICAg
aXN0cmVhbSYgb3BlcmF0b3I+PihzaWduZWQgY2hhciYgYykge3JldHVybiBvcGVyYXRvcj4+KChj
aGFyJiljKTt9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGludCYpOwogICAgaXN0cmVhbSYgb3Bl
cmF0b3I+Pihsb25nJik7CgogICAgX19leHRlbnNpb25fXyBpc3RyZWFtJiBvcGVyYXRvcj4+KGxv
bmcgbG9uZyYpOwogICAgX19leHRlbnNpb25fXyBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVk
IGxvbmcgbG9uZyYpOwoKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc2hvcnQmKTsKICAgIGlzdHJl
YW0mIG9wZXJhdG9yPj4odW5zaWduZWQgaW50Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVu
c2lnbmVkIGxvbmcmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgc2hvcnQmKTsK
CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGJvb2wmKTsKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+
KGZsb2F0Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGRvdWJsZSYpOwogICAgaXN0cmVhbSYg
b3BlcmF0b3I+Pihsb25nIGRvdWJsZSYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+PiggX19tYW5p
cCBmdW5jKSB7KCpmdW5jKSgqdGhpcyk7IHJldHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiBvcGVy
YXRvcj4+KF9faW1hbmlwIGZ1bmMpIHsgcmV0dXJuICgqZnVuYykoKnRoaXMpOyB9CiAgICBpc3Ry
ZWFtJiBvcGVyYXRvcj4+KHN0cmVhbWJ1ZiopOwp9OwoKY2xhc3MgaW9zdHJlYW0gOiBwdWJsaWMg
aXN0cmVhbSwgcHVibGljIG9zdHJlYW0KewogIHB1YmxpYzoKICAgIGlvc3RyZWFtKCkgeyB9CiAg
ICBpb3N0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKnRpZWQ9IF9fbnVsbCApOwp9OwoKY2xh
c3MgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiA6IHB1YmxpYyBpc3RyZWFtIHsKcHVibGljOgogIF9J
T19pc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShpc3RyZWFtJik7CiAgX0lPX2lzdHJlYW1f
d2l0aGFzc2lnbiYgb3BlcmF0b3I9KF9JT19pc3RyZWFtX3dpdGhhc3NpZ24mIHJocykKICAgIHsg
cmV0dXJuIG9wZXJhdG9yPSAoc3RhdGljX2Nhc3Q8aXN0cmVhbSY+IChyaHMpKTsgfQp9OwoKY2xh
c3MgX0lPX29zdHJlYW1fd2l0aGFzc2lnbiA6IHB1YmxpYyBvc3RyZWFtIHsKcHVibGljOgogIF9J
T19vc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShvc3RyZWFtJik7CiAgX0lPX29zdHJlYW1f
d2l0aGFzc2lnbiYgb3BlcmF0b3I9KF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIHJocykKICAgIHsg
cmV0dXJuIG9wZXJhdG9yPSAoc3RhdGljX2Nhc3Q8b3N0cmVhbSY+IChyaHMpKTsgfQp9OwoKZXh0
ZXJuIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24gY2luOwogCmV4dGVybiBfSU9fb3N0cmVhbV93aXRo
YXNzaWduIGNvdXQsIGNlcnI7CgpleHRlcm4gX0lPX29zdHJlYW1fd2l0aGFzc2lnbiBjbG9nCgoK
CjsKCmV4dGVybiBpc3RyZWFtJiBsb2NrKGlzdHJlYW0mIGlucyk7CmV4dGVybiBpc3RyZWFtJiB1
bmxvY2soaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIG9zdHJlYW0mIGxvY2sob3N0cmVhbSYgb3V0cyk7
CmV4dGVybiBvc3RyZWFtJiB1bmxvY2sob3N0cmVhbSYgb3V0cyk7CgpzdHJ1Y3QgSW9zdHJlYW1f
aW5pdCB7IH0gOyAgIAoKaW5saW5lIGlvcyYgZGVjKGlvcyYgaSkKeyBpLnNldGYoaW9zOjpkZWMs
IGlvczo6ZGVjfGlvczo6aGV4fGlvczo6b2N0KTsgcmV0dXJuIGk7IH0KaW5saW5lIGlvcyYgaGV4
KGlvcyYgaSkKeyBpLnNldGYoaW9zOjpoZXgsIGlvczo6ZGVjfGlvczo6aGV4fGlvczo6b2N0KTsg
cmV0dXJuIGk7IH0KaW5saW5lIGlvcyYgb2N0KGlvcyYgaSkKeyBpLnNldGYoaW9zOjpvY3QsIGlv
czo6ZGVjfGlvczo6aGV4fGlvczo6b2N0KTsgcmV0dXJuIGk7IH0KfSAgCgoKIyAxNiAiL2hvbWUv
bWV0c2VsYWEvaW5jbHVkZS9sYXBhY2twcC9sYWV4Y3AuaCIgMgoKIyAxICIvdXNyL2luY2x1ZGUv
c3RkbGliLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCiMgMSAiL3Vz
ci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDEg
MwoKCgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4y
L2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2Nj
LWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoK
IAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAxMzEgIi91c3IvbGliL2djYy1saWIv
aTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKCiMgMTg4
ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYu
aCIgMwoKCgoKCiAKCgoKCiAKCgojIDI2OSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGlu
dXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiMgMjgzICIvdXNyL2xpYi9nY2MtbGli
L2k0ODYtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCiMgMzE3
ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYu
aCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDMzICIvdXNyL2luY2x1ZGUvc3RkbGli
LmgiIDIgMwoKCmV4dGVybiAiQyIgeyAKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQg
cXVvdDsJCQkgCiAgICBpbnQgcmVtOwkJCSAKICB9IGRpdl90OwoKIAoKdHlwZWRlZiBzdHJ1Y3QK
ICB7CiAgICBsb25nIGludCBxdW90OwkJIAogICAgbG9uZyBpbnQgcmVtOwkJIAogIH0gbGRpdl90
OwoKCgojIDY1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKCgoKIAoKCgogCgoKCgoKIAoKZXh0
ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICAodm9pZCkgIHRocm93ICgpICA7CgoK
IApleHRlcm4gZG91YmxlIGF0b2YgIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgIHRocm93ICgpICA7
CiAKZXh0ZXJuIGludCBhdG9pICAoX19jb25zdCBjaGFyICpfX25wdHIpICB0aHJvdyAoKSAgOwog
CmV4dGVybiBsb25nIGludCBhdG9sICAoX19jb25zdCBjaGFyICpfX25wdHIpICB0aHJvdyAoKSAg
OwoKCiAKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBhdG9sbCAgKF9fY29uc3Qg
Y2hhciAqX19ucHRyKSAgdGhyb3cgKCkgIDsKCgogCmV4dGVybiBkb3VibGUgc3RydG9kICAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJICAgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIpICB0aHJvdyAoKSAgOwoKCgoKCgoKCgoKIApleHRlcm4gbG9uZyBpbnQgc3RydG9sICAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJICAgICBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgIHRocm93ICgpICA7CiAKZXh0ZXJuIHVuc2lnbmVkIGxv
bmcgaW50IHN0cnRvdWwgIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJICAg
ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJCQkJICAgICAgIGludCBfX2Jhc2UpICB0
aHJvdyAoKSAgOwoKCiAKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b3Eg
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJICBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgIHRocm93ICgpICA7CiAKX19leHRlbnNpb25fXwpleHRl
cm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VxICAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKCQkJCQkgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCgkJCQkJICAg
IGludCBfX2Jhc2UpICB0aHJvdyAoKSAgOwoKCgogCgogCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxv
bmcgbG9uZyBpbnQgc3RydG9sbCAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJ
CQkgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgIHRocm93ICgpICA7
CiAKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkJICAgICBjaGFyICoqX19yZXN0
cmljdCBfX2VuZHB0ciwKCQkJCQkgICAgIGludCBfX2Jhc2UpICB0aHJvdyAoKSAgOwoKCgojIDE5
MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCgoKCiAKCgpleHRlcm4gZG91YmxlIF9fc3RydG9k
X2ludGVybmFsICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCSAgICAgIGNo
YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJCQkJICAgICAgaW50IF9fZ3JvdXApICB0aHJvdyAo
KSAgOwpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJuYWwgIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLAoJCQkJICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9f
Z3JvdXApICB0aHJvdyAoKSAgOwpleHRlcm4gbG9uZyBkb3VibGUgIF9fc3RydG9sZF9pbnRlcm5h
bCAgKF9fY29uc3QgY2hhciAqCgkJCQkJCV9fcmVzdHJpY3QgX19ucHRyLAoJCQkJCQljaGFyICoq
X19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCQkJaW50IF9fZ3JvdXApICB0aHJvdyAoKSAgOwoKZXh0
ZXJuIGxvbmcgaW50IF9fc3RydG9sX2ludGVybmFsICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwKCQkJCQljaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCQlpbnQgX19iYXNl
LCBpbnQgX19ncm91cCkgIHRocm93ICgpICA7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBf
X3N0cnRvdWxfaW50ZXJuYWwgIChfX2NvbnN0IGNoYXIgKgoJCQkJCQkgIF9fcmVzdHJpY3QgX19u
cHRyLAoJCQkJCQkgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJCQkJCQkgIGludCBfX2Jh
c2UsIGludCBfX2dyb3VwKSAgdGhyb3cgKCkgIDsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxv
bmcgbG9uZyBpbnQgX19zdHJ0b2xsX2ludGVybmFsICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwKCQkJCQkgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCQkgICAg
ICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgIHRocm93ICgpICA7CgoKCl9fZXh0ZW5zaW9uX18K
ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAgKF9fY29u
c3QgY2hhciAqCgkJCQkJCQlfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCQkJCWNoYXIgKioKCQkJCQkJ
CV9fcmVzdHJpY3QgX19lbmRwdHIsCgkJCQkJCQlpbnQgX19iYXNlLAoJCQkJCQkJaW50IF9fZ3Jv
dXApICB0aHJvdyAoKSAgOwoKCgoKIyAzMjYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwoKCgoK
IAoKCmV4dGVybiBjaGFyICpsNjRhICAobG9uZyBpbnQgX19uKSAgdGhyb3cgKCkgIDsKCiAKZXh0
ZXJuIGxvbmcgaW50IGE2NGwgIChfX2NvbnN0IGNoYXIgKl9fcykgIHRocm93ICgpICA7CgoKIyAx
ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
CgoKCmV4dGVybiAiQyIgeyAKCgoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0eXBlZGVmIF9f
dV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYgX191X2xvbmcg
dV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IHVfcXVh
ZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IGxvZmZfdDsK
CgoKdHlwZWRlZiBfX2lub190IGlub190OwoKCgoKCgoKCgoKCnR5cGVkZWYgX19kZXZfdCBkZXZf
dDsKCgoKCnR5cGVkZWYgX19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90
OwoKCgoKdHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsKCgoKCnR5cGVkZWYgX191aWRfdCB1aWRf
dDsKCgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CgoKCgoKCgoKCgoKdHlwZWRlZiBfX3BpZF90
IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKdHlwZWRlZiBfX3NzaXplX3Qgc3Np
emVfdDsKCgoKCnR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5cGVkZWYgX19jYWRkcl90IGNh
ZGRyX3Q7CgoKCnR5cGVkZWYgX19rZXlfdCBrZXlfdDsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUv
dGltZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgojIDUxICIvdXNy
L2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgNjIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKCgoK
CgogCnR5cGVkZWYgX190aW1lX3QgdGltZV90OwoKCgoKCiMgODkgIi91c3IvaW5jbHVkZS90aW1l
LmgiIDMKCgoKCiMgMjc5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgMTIyICIvdXNyL2lu
Y2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNl
LWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3Iv
bGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoK
CiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIu
OTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCiAKCiAKCiMgMTMxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjIv
aW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCgojIDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2
LXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgojIDI3
MSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVm
LmgiIDMKCgojIDI4MyAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4yL2lu
Y2x1ZGUvc3RkZGVmLmgiIDMKCgogCgogCgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1
c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKIyAxMjUgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCiAKdHlwZWRlZiB1
bnNpZ25lZCBsb25nIGludCB1bG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdXNob3J0
Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50OwoKCiAKCiMgMTU5ICIvdXNyL2luY2x1ZGUvc3lz
L3R5cGVzLmgiIDMKCgogCgoKCgoKCgp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAo
KF9fbW9kZV9fICggIF9fUUlfXyApKSkgOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRl
X18gKChfX21vZGVfXyAoICBfX0hJX18gKSkpIDsKdHlwZWRlZiBpbnQgaW50MzJfdCBfX2F0dHJp
YnV0ZV9fICgoX19tb2RlX18gKCAgX19TSV9fICkpKSA7CnR5cGVkZWYgaW50IGludDY0X3QgX19h
dHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fRElfXyApKSkgOwoKCnR5cGVkZWYgdW5zaWduZWQg
aW50IHVfaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoICBfX1FJX18gKSkpIDsKdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoICBf
X0hJX18gKSkpIDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQzMl90IF9fYXR0cmlidXRlX18g
KChfX21vZGVfXyAoICBfX1NJX18gKSkpIDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90
IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoICBfX0RJX18gKSkpIDsKCnR5cGVkZWYgaW50IHJl
Z2lzdGVyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX3dvcmRfXykpKTsKCgogCgoKCgoK
CiAKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgogCgoKCgoKCgoKCiAKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiAKCgoK
CgoKIyAzNSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAyIDMKCgogCgoKCgoKCgoKCgoKCgojIDE5
MSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgogCiMgMSAiL3Vzci9pbmNsdWRlL3N5
cy9zZWxlY3QuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgoKIAojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3NlbGVjdC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDMKCgoKCgoKCgoKCgoKIyA1NiAiL3Vz
ci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDMKCiMgNzIgIi91c3IvaW5jbHVkZS9iaXRzL3NlbGVj
dC5oIiAzCgojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgogCiMgMSAiL3Vz
ci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVk
ZWYgaW50IF9fc2lnX2F0b21pY190OwoKIAoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWdu
ZWQgbG9uZyBpbnQgX192YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQp
KSkgXTsKICB9IF9fc2lnc2V0X3Q7CgoKCgogCgoKCgoKIyAxMjUgIi91c3IvaW5jbHVkZS9iaXRz
L3NpZ3NldC5oIiAzCgojIDM0ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgogCgoj
IDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK
CgoKCgoKCiMgNTEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKIyA2MiAiL3Vzci9pbmNsdWRl
L3RpbWUuaCIgMwoKCgojIDczICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCgoKCgoKIAoKc3Ry
dWN0IHRpbWVzcGVjCiAgewogICAgbG9uZyBpbnQgdHZfc2VjOwkJIAogICAgbG9uZyBpbnQgdHZf
bnNlYzsJCSAKICB9OwoKCgoKCiMgMjc5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgMzgg
Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCmV4dGVybiAiQyIgeyAKCiAKCgoKc3Ry
dWN0IHRpbWV2YWw7Cgp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwoKIAp0eXBlZGVmIF9fZmRf
c2V0IGZkX3NldDsKCiAKCgoKIAoKCgoKIAoKCgoKCgogCgoKCgpleHRlcm4gaW50IF9fc2VsZWN0
ICAoaW50IF9fbmZkcywgX19mZF9zZXQgKl9fcmVhZGZkcywKCQkJICBfX2ZkX3NldCAqX193cml0
ZWZkcywgX19mZF9zZXQgKl9fZXhjZXB0ZmRzLAoJCQkgIHN0cnVjdCB0aW1ldmFsICpfX3RpbWVv
dXQpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IHNlbGVjdCAgKGludCBfX25mZHMsIF9fZmRfc2V0
ICpfX3JlYWRmZHMsCgkJCV9fZmRfc2V0ICpfX3dyaXRlZmRzLCBfX2ZkX3NldCAqX19leGNlcHRm
ZHMsCgkJCXN0cnVjdCB0aW1ldmFsICpfX3RpbWVvdXQpICB0aHJvdyAoKSAgOwoKIyA5MSAiL3Vz
ci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwoKCn0gCgoKIyAxOTQgIi91c3IvaW5jbHVkZS9zeXMv
dHlwZXMuaCIgMiAzCgoKIAojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMwog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgojIDQ3ICIvdXNyL2luY2x1ZGUvc3lzL3N5
c21hY3Jvcy5oIiAzCgoKCiMgMTk3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgoK
IAoKdHlwZWRlZiBfX2Jsa2NudF90IGJsa2NudF90OwkgIAp0eXBlZGVmIF9fZnNibGtjbnRfdCBm
c2Jsa2NudF90OyAgCnR5cGVkZWYgX19mc2ZpbGNudF90IGZzZmlsY250X3Q7ICAKCgoKCgoKCgoK
CgoKfSAKCgojIDMzOSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgogCgoKCiAKZXh0ZXJu
IGludDMyX3QgcmFuZG9tICAodm9pZCkgIHRocm93ICgpICA7CgogCmV4dGVybiB2b2lkIHNyYW5k
b20gICh1bnNpZ25lZCBpbnQgX19zZWVkKSAgdGhyb3cgKCkgIDsKCiAKCgoKZXh0ZXJuIHZvaWQg
KiAgaW5pdHN0YXRlICAodW5zaWduZWQgaW50IF9fc2VlZCwgdm9pZCAqICBfX3N0YXRlYnVmLAoJ
CQkgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4pICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIHZvaWQg
KiAgc2V0c3RhdGUgICh2b2lkICogIF9fc3RhdGVidWYpICB0aHJvdyAoKSAgOwoKCgogCgoKCnN0
cnVjdCByYW5kb21fZGF0YQogIHsKICAgIGludDMyX3QgKmZwdHI7CQkgCiAgICBpbnQzMl90ICpy
cHRyOwkJIAogICAgaW50MzJfdCAqc3RhdGU7CQkgCiAgICBpbnQgcmFuZF90eXBlOwkJIAogICAg
aW50IHJhbmRfZGVnOwkJIAogICAgaW50IHJhbmRfc2VwOwkJIAogICAgaW50MzJfdCAqZW5kX3B0
cjsJCSAKICB9OwoKZXh0ZXJuIGludCByYW5kb21fciAgKHN0cnVjdCByYW5kb21fZGF0YSAqX19y
ZXN0cmljdCBfX2J1ZiwKCQkJICBpbnQzMl90ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSAgdGhyb3cg
KCkgIDsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0
IHJhbmRvbV9kYXRhICpfX2J1ZikgIHRocm93ICgpICA7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9y
ICAodW5zaWduZWQgaW50IF9fc2VlZCwKCQkJICAgICB2b2lkICogIF9fcmVzdHJpY3QgX19zdGF0
ZWJ1ZiwKCQkJICAgICBzaXplX3QgX19zdGF0ZWxlbiwKCQkJICAgICBzdHJ1Y3QgcmFuZG9tX2Rh
dGEgKl9fcmVzdHJpY3QgX19idWYpICB0aHJvdyAoKSAgOwoKZXh0ZXJuIGludCBzZXRzdGF0ZV9y
ICAodm9pZCAqICBfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCgkJCSAgICBzdHJ1Y3QgcmFuZG9tX2Rh
dGEgKl9fcmVzdHJpY3QgX19idWYpICB0aHJvdyAoKSAgOwoKCgoKIApleHRlcm4gaW50IHJhbmQg
ICh2b2lkKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gdm9pZCBzcmFuZCAgKHVuc2lnbmVkIGludCBf
X3NlZWQpICB0aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIGludCByYW5kX3IgICh1bnNpZ25lZCBpbnQg
Kl9fc2VlZCkgIHRocm93ICgpICA7CgoKCgogCgogCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAgKHZv
aWQpICB0aHJvdyAoKSAgOwpleHRlcm4gZG91YmxlIGVyYW5kNDggICh1bnNpZ25lZCBzaG9ydCBp
bnQgX194c3ViaVszXSkgIHRocm93ICgpICA7CgogCmV4dGVybiBsb25nIGludCBscmFuZDQ4ICAo
dm9pZCkgIHRocm93ICgpICA7CmV4dGVybiBsb25nIGludCBucmFuZDQ4ICAodW5zaWduZWQgc2hv
cnQgaW50IF9feHN1YmlbM10pICB0aHJvdyAoKSAgOwoKIApleHRlcm4gbG9uZyBpbnQgbXJhbmQ0
OCAgKHZvaWQpICB0aHJvdyAoKSAgOwpleHRlcm4gbG9uZyBpbnQganJhbmQ0OCAgKHVuc2lnbmVk
IHNob3J0IGludCBfX3hzdWJpWzNdKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIHZvaWQgc3JhbmQ0
OCAgKGxvbmcgaW50IF9fc2VlZHZhbCkgIHRocm93ICgpICA7CmV4dGVybiB1bnNpZ25lZCBzaG9y
dCBpbnQgKnNlZWQ0OCAgKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10pICB0aHJvdyAo
KSAgOwpleHRlcm4gdm9pZCBsY29uZzQ4ICAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10p
ICB0aHJvdyAoKSAgOwoKIApzdHJ1Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hv
cnQgaW50IHhbM107CSAKICAgIHVuc2lnbmVkIHNob3J0IGludCBhWzNdOwkgCiAgICB1bnNpZ25l
ZCBzaG9ydCBpbnQgYzsJIAogICAgdW5zaWduZWQgc2hvcnQgaW50IG9sZF94WzNdOyAgCiAgICBp
bnQgaW5pdDsJCQkgCiAgfTsKCgogCmV4dGVybiBpbnQgZHJhbmQ0OF9yICAoc3RydWN0IGRyYW5k
NDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKCQkJICAgZG91YmxlICpfX3Jlc3RyaWN0IF9f
cmVzdWx0KSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBlcmFuZDQ4X3IgICh1bnNpZ25lZCBzaG9y
dCBpbnQgX194c3ViaVszXSwKCQkJICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBf
X2J1ZmZlciwKCQkJICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSAgdGhyb3cgKCkgIDsK
CiAKZXh0ZXJuIGludCBscmFuZDQ4X3IgIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0
IF9fYnVmZmVyLAoJCQkgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgIHRocm93ICgp
ICA7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10s
CgkJCSAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCgkJCSAgIGxv
bmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBt
cmFuZDQ4X3IgIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAoJCQkg
ICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgIHRocm93ICgpICA7CmV4dGVybiBpbnQg
anJhbmQ0OF9yICAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCgkJCSAgIHN0cnVjdCBk
cmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCgkJCSAgIGxvbmcgaW50ICpfX3Jlc3Ry
aWN0IF9fcmVzdWx0KSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBzcmFuZDQ4X3IgIChsb25n
IGludCBfX3NlZWR2YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSAgdGhyb3cgKCkg
IDsKCmV4dGVybiBpbnQgc2VlZDQ4X3IgICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNd
LAoJCQkgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSAgdGhyb3cgKCkgIDsKCmV4dGVy
biBpbnQgbGNvbmc0OF9yICAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sCgkJCSAgIHN0
cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSAgdGhyb3cgKCkgIDsKCgoKCgoKCiAKZXh0ZXJu
IHZvaWQgKiAgbWFsbG9jICAoc2l6ZV90IF9fc2l6ZSkgIHRocm93ICgpICA7CiAKZXh0ZXJuIHZv
aWQgKiAgY2FsbG9jICAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpICB0aHJvdyAoKSAg
OwoKCgogCgpleHRlcm4gdm9pZCAqICByZWFsbG9jICAodm9pZCAqICBfX3B0ciwgc2l6ZV90IF9f
c2l6ZSkgIHRocm93ICgpICA7CiAKZXh0ZXJuIHZvaWQgZnJlZSAgKHZvaWQgKiAgX19wdHIpICB0
aHJvdyAoKSAgOwoKCiAKZXh0ZXJuIHZvaWQgY2ZyZWUgICh2b2lkICogIF9fcHRyKSAgdGhyb3cg
KCkgIDsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjIvaW5j
bHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYt
c3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgoj
IDYxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRk
ZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgogCgojIDEzMSAi
L3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgi
IDMKCgogCgogCgoKIyAxODggIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUu
Mi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKIyAyNzEgIi91c3IvbGliL2djYy1s
aWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIyAyODMgIi91
c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAz
CgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9p
bmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjUgIi91c3Iv
aW5jbHVkZS9hbGxvY2EuaCIgMiAzCgoKZXh0ZXJuICJDIiB7IAoKIAoKCiAKZXh0ZXJuIHZvaWQg
KiAgYWxsb2NhICAoc2l6ZV90IF9fc2l6ZSkgIHRocm93ICgpICA7CgoKCgoKfSAKCgojIDQ5MiAi
L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCiAKZXh0ZXJuIHZvaWQgKiAgdmFsbG9jICAo
c2l6ZV90IF9fc2l6ZSkgIHRocm93ICgpICA7CgoKCiAKZXh0ZXJuIHZvaWQgYWJvcnQgICh2b2lk
KSAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKIApleHRlcm4g
aW50IGF0ZXhpdCAgKHZvaWQgKCpfX2Z1bmMpICh2b2lkKSkgIHRocm93ICgpICA7CgoKIAoKZXh0
ZXJuIGludCBfX29uX2V4aXQgICh2b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICog
IF9fYXJnKSwKCQkJICAgdm9pZCAqICBfX2FyZykgIHRocm93ICgpICA7CmV4dGVybiBpbnQgb25f
ZXhpdCAgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKiAgX19hcmcpLAoJCQkg
dm9pZCAqICBfX2FyZykgIHRocm93ICgpICA7CgoKIAoKCmV4dGVybiB2b2lkIGV4aXQgIChpbnQg
X19zdGF0dXMpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoK
CgoKCgogCmV4dGVybiBjaGFyICpnZXRlbnYgIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgIHRocm93
ICgpICA7CgogCgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52ICAoX19jb25zdCBjaGFyICpf
X25hbWUpICB0aHJvdyAoKSAgOwoKCiAKIAoKZXh0ZXJuIGludCBwdXRlbnYgIChjaGFyICpfX3N0
cmluZykgIHRocm93ICgpICA7CgoKCiAKCmV4dGVybiBpbnQgc2V0ZW52ICAoX19jb25zdCBjaGFy
ICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwKCQkJaW50IF9fcmVwbGFjZSkgIHRocm93
ICgpICA7CgogCmV4dGVybiB2b2lkIHVuc2V0ZW52ICAoX19jb25zdCBjaGFyICpfX25hbWUpICB0
aHJvdyAoKSAgOwoKCgogCgoKZXh0ZXJuIGludCBjbGVhcmVudiAgKHZvaWQpICB0aHJvdyAoKSAg
OwoKCgoKIAoKCgpleHRlcm4gY2hhciAqbWt0ZW1wICAoY2hhciAqX190ZW1wbGF0ZSkgIHRocm93
ICgpICA7CgogCgoKCgpleHRlcm4gaW50IG1rc3RlbXAgIChjaGFyICpfX3RlbXBsYXRlKSAgdGhy
b3cgKCkgIDsKCgoKIApleHRlcm4gaW50IHN5c3RlbSAgKF9fY29uc3QgY2hhciAqX19jb21tYW5k
KSAgdGhyb3cgKCkgIDsKCgoKCgoKCgoKCiAKCgoKCgpleHRlcm4gY2hhciAqcmVhbHBhdGggIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAoJCQkgICAgY2hhciAqX19yZXN0cmljdCBf
X3Jlc29sdmVkKSAgdGhyb3cgKCkgIDsKCgoKIAoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5f
dCkgIChfX2NvbnN0IHZvaWQgKiAsIF9fY29uc3Qgdm9pZCAqICkgIDsKCgoKCgoKIAoKZXh0ZXJu
IHZvaWQgKiAgYnNlYXJjaCAgKF9fY29uc3Qgdm9pZCAqICBfX2tleSwgX19jb25zdCB2b2lkICog
IF9fYmFzZSwKCQkJICAgICAgIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAoJCQkgICAg
ICAgX19jb21wYXJfZm5fdCBfX2NvbXBhcikgIDsKCiAKCmV4dGVybiB2b2lkIHFzb3J0ICAodm9p
ZCAqICBfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAoJCQkgIF9fY29tcGFy
X2ZuX3QgX19jb21wYXIpICA7CgoKIApleHRlcm4gaW50IGFicyAgKGludCBfX3gpICB0aHJvdyAo
KSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMgIChs
b25nIGludCBfX3gpICB0aHJvdyAoKSAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK
CgoKIAoKIApleHRlcm4gZGl2X3QgZGl2ICAoaW50IF9fbnVtZXIsIGludCBfX2Rlbm9tKSAgdGhy
b3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsZGl2X3QgbGRpdiAg
KGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pICB0aHJvdyAoKSAgCiAgICAgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgoKCiAKCgogCgoKZXh0ZXJuIGNoYXIgKmVj
dnQgIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNw
dCwKCQkJaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgIHRocm93ICgpICA7CgogCgoKZXh0ZXJuIGNo
YXIgKmZjdnQgIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3Qg
X19kZWNwdCwKCQkJaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgIHRocm93ICgpICA7CgogCgoKZXh0
ZXJuIGNoYXIgKmdjdnQgIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1
ZikgIHRocm93ICgpICA7CgogCmV4dGVybiBjaGFyICpxZWN2dCAgKGxvbmcgZG91YmxlICBfX3Zh
bHVlLCBpbnQgX19uZGlnaXQsCgkJCSBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jl
c3RyaWN0IF9fc2lnbikgIHRocm93ICgpICA7CmV4dGVybiBjaGFyICpxZmN2dCAgKGxvbmcgZG91
YmxlICBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCgkJCSBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwg
aW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgIHRocm93ICgpICA7CmV4dGVybiBjaGFyICpxZ2N2dCAg
KGxvbmcgZG91YmxlICBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSAgdGhyb3cg
KCkgIDsKCgoKIAoKZXh0ZXJuIGludCBlY3Z0X3IgIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp
Z2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKCQkJaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwg
Y2hhciAqX19yZXN0cmljdCBfX2J1ZiwKCQkJc2l6ZV90IF9fbGVuKSAgdGhyb3cgKCkgIDsKZXh0
ZXJuIGludCBmY3Z0X3IgIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVz
dHJpY3QgX19kZWNwdCwKCQkJaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmlj
dCBfX2J1ZiwKCQkJc2l6ZV90IF9fbGVuKSAgdGhyb3cgKCkgIDsKCmV4dGVybiBpbnQgcWVjdnRf
ciAgKGxvbmcgZG91YmxlICBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCgkJCSBpbnQgKl9fcmVzdHJp
Y3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKCQkJIGNoYXIgKl9fcmVzdHJpY3Qg
X19idWYsIHNpemVfdCBfX2xlbikgIHRocm93ICgpICA7CmV4dGVybiBpbnQgcWZjdnRfciAgKGxv
bmcgZG91YmxlICBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCgkJCSBpbnQgKl9fcmVzdHJpY3QgX19k
ZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKCQkJIGNoYXIgKl9fcmVzdHJpY3QgX19idWYs
IHNpemVfdCBfX2xlbikgIHRocm93ICgpICA7CgoKCgogCgpleHRlcm4gaW50IG1ibGVuICAoX19j
b25zdCBjaGFyICpfX3MsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwogCgpleHRlcm4gaW50IG1i
dG93YyAgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsCgkJCV9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX3MsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwogCgpleHRlcm4gaW50IHdjdG9tYiAg
KGNoYXIgKl9fcywgd2NoYXJfdCBfX3djaGFyKSAgdGhyb3cgKCkgIDsKCgogCmV4dGVybiBzaXpl
X3QgbWJzdG93Y3MgICh3Y2hhcl90ICpfX3Jlc3RyaWN0ICBfX3B3Y3MsCgkJCSAgICAgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CiAKZXh0ZXJu
IHNpemVfdCB3Y3N0b21icyAgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAoJCQkgICAgIF9fY29uc3Qg
d2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwoKCgog
CgoKCmV4dGVybiBpbnQgcnBtYXRjaCAgKF9fY29uc3QgY2hhciAqX19yZXNwb25zZSkgIHRocm93
ICgpICA7CgoKCiMgNzMyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKCgoKIyA3NTYgIi91c3Iv
aW5jbHVkZS9zdGRsaWIuaCIgMwoKCiMgNzY2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKCgoK
Cgp9IAoKCiMgMTcgIi9ob21lL21ldHNlbGFhL2luY2x1ZGUvbGFwYWNrcHAvbGFleGNwLmgiIDIK
CgoKCmlubGluZSB2b2lkIHRocm93XyAoY29uc3QgY2hhciAqd2hlcmUsIGNvbnN0IGNoYXIgKndo
YXQpCnsKICAgIGNlcnIgPDwgIkV4Y2VwdGlvbjogIiA8PCB3aGVyZSA8PCAiICAiIDw8IHdoYXQg
PDwgZW5kbDsKICAgIGV4aXQoMSk7Cn0KCgoKIyA5ICIvaG9tZS9tZXRzZWxhYS9pbmNsdWRlL2xh
cGFja3BwL2JsYXMrKy5oIiAyCgojIDEgIi9ob21lL21ldHNlbGFhL2luY2x1ZGUvbGFwYWNrcHAv
YmxhczErKy5oIiAxCiAKIAoKCgoKCgoKIyAxICIvaG9tZS9tZXRzZWxhYS9pbmNsdWRlL2xhcGFj
a3BwL2JsYXMxLmgiIDEKIAogCgoKCgojIDEgIi9ob21lL21ldHNlbGFhL2luY2x1ZGUvbGFwYWNr
cHAvYXJjaC5oIiAxCiAKIAoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNyAiL2hvbWUvbWV0
c2VsYWEvaW5jbHVkZS9sYXBhY2twcC9ibGFzMS5oIiAyCgojIDEgIi9ob21lL21ldHNlbGFhL2lu
Y2x1ZGUvbGFwYWNrcHAvZjJjLmgiIDEKCgogCgoKCgoKCgoKCgoKCgoKCgogCgoKCgp0eXBlZGVm
IGxvbmcgaW50IGludGVnZXI7CnR5cGVkZWYgY2hhciAqYWRkcmVzczsKdHlwZWRlZiBzaG9ydCBp
bnQgc2hvcnRpbnQ7CnR5cGVkZWYgZmxvYXQgZjJjX3JlYWw7CnR5cGVkZWYgZG91YmxlIGRvdWJs
ZXJlYWw7CnR5cGVkZWYgc3RydWN0IHsgZjJjX3JlYWwgciwgaTsgfSBmMmNfY29tcGxleDsKdHlw
ZWRlZiBzdHJ1Y3QgeyBkb3VibGVyZWFsIHIsIGk7IH0gZG91YmxlY29tcGxleDsKdHlwZWRlZiBs
b25nIGludCBsb2dpY2FsOwp0eXBlZGVmIHNob3J0IGludCBzaG9ydGxvZ2ljYWw7CgoKCgogCgoK
CgpleHRlcm4gaW50IHVuZ2V0YygpOyAgICAgCgogCgoKCgoKCgp0eXBlZGVmIGxvbmcgZmxhZzsK
dHlwZWRlZiBsb25nIGZ0bmxlbjsKdHlwZWRlZiBsb25nIGZ0bmludDsKCgogCnR5cGVkZWYgc3Ry
dWN0CnsgICBmbGFnIGNpZXJyOwogICAgZnRuaW50IGNpdW5pdDsKICAgIGZsYWcgY2llbmQ7CiAg
ICBjaGFyICpjaWZtdDsKICAgIGZ0bmludCBjaXJlYzsKfSBjaWxpc3Q7CgogCnR5cGVkZWYgc3Ry
dWN0CnsgICBmbGFnIGljaWVycjsKICAgIGNoYXIgKmljaXVuaXQ7CiAgICBmbGFnIGljaWVuZDsK
ICAgIGNoYXIgKmljaWZtdDsKICAgIGZ0bmludCBpY2lybGVuOwogICAgZnRuaW50IGljaXJudW07
Cn0gaWNpbGlzdDsKCiAKdHlwZWRlZiBzdHJ1Y3QKeyAgIGZsYWcgb2VycjsKICAgIGZ0bmludCBv
dW5pdDsKICAgIGNoYXIgKm9mbm07CiAgICBmdG5sZW4gb2ZubWxlbjsKICAgIGNoYXIgKm9zdGE7
CiAgICBjaGFyICpvYWNjOwogICAgY2hhciAqb2ZtOwogICAgZnRuaW50IG9ybDsKICAgIGNoYXIg
Km9ibG5rOwp9IG9saXN0OwoKIAp0eXBlZGVmIHN0cnVjdAp7ICAgZmxhZyBjZXJyOwogICAgZnRu
aW50IGN1bml0OwogICAgY2hhciAqY3N0YTsKfSBjbGxpc3Q7CgogCnR5cGVkZWYgc3RydWN0Cnsg
ICBmbGFnIGFlcnI7CiAgICBmdG5pbnQgYXVuaXQ7Cn0gYWxpc3Q7CgogCnR5cGVkZWYgc3RydWN0
CnsgICBmbGFnIGluZXJyOwogICAgZnRuaW50IGludW5pdDsKICAgIGNoYXIgKmluZmlsZTsKICAg
IGZ0bmxlbiBpbmZpbGVuOwogICAgZnRuaW50ICAqaW5leDsgICAKICAgIGZ0bmludCAgKmlub3Bl
bjsKICAgIGZ0bmludCAgKmlubnVtOwogICAgZnRuaW50ICAqaW5uYW1lZDsKICAgIGNoYXIgICAg
KmlubmFtZTsKICAgIGZ0bmxlbiAgaW5uYW1sZW47CiAgICBjaGFyICAgICppbmFjYzsKICAgIGZ0
bmxlbiAgaW5hY2NsZW47CiAgICBjaGFyICAgICppbnNlcTsKICAgIGZ0bmxlbiAgaW5zZXFsZW47
CiAgICBjaGFyICAgICppbmRpcjsKICAgIGZ0bmxlbiAgaW5kaXJsZW47CiAgICBjaGFyICAgICpp
bmZtdDsKICAgIGZ0bmxlbiAgaW5mbXRsZW47CiAgICBjaGFyICAgICppbmZvcm07CiAgICBmdG5p
bnQgIGluZm9ybWxlbjsKICAgIGNoYXIgICAgKmludW5mOwogICAgZnRubGVuICBpbnVuZmxlbjsK
ICAgIGZ0bmludCAgKmlucmVjbDsKICAgIGZ0bmludCAgKmlubnJlYzsKICAgIGNoYXIgICAgKmlu
Ymxhbms7CiAgICBmdG5sZW4gIGluYmxhbmtsZW47Cn0gaW5saXN0OwoKCgp1bmlvbiBNdWx0aXR5
cGUgeyAgICAKICAgIHNob3J0aW50IGg7CiAgICBpbnRlZ2VyIGk7CiAgICBmMmNfcmVhbCByOwog
ICAgZG91YmxlcmVhbCBkOwogICAgZjJjX2NvbXBsZXggYzsKICAgIGRvdWJsZWNvbXBsZXggejsK
ICAgIH07Cgp0eXBlZGVmIHVuaW9uIE11bHRpdHlwZSBNdWx0aXR5cGU7Cgp0eXBlZGVmIGxvbmcg
TG9uZzsgICAKCnN0cnVjdCBWYXJkZXNjIHsgICAgIAogICAgY2hhciAqbmFtZTsKICAgIGNoYXIg
KmFkZHI7CiAgICBmdG5sZW4gKmRpbXM7CiAgICBpbnQgIHR5cGU7CiAgICB9Owp0eXBlZGVmIHN0
cnVjdCBWYXJkZXNjIFZhcmRlc2M7CgpzdHJ1Y3QgTmFtZWxpc3QgewogICAgY2hhciAqbmFtZTsK
ICAgIFZhcmRlc2MgKip2YXJzOwogICAgaW50IG52YXJzOwogICAgfTsKdHlwZWRlZiBzdHJ1Y3Qg
TmFtZWxpc3QgTmFtZWxpc3Q7CgogCgoKCgoKCiAKCgoKdHlwZWRlZiBpbnQgICAoKlVfZnApKC4u
Lik7CnR5cGVkZWYgc2hvcnRpbnQgKCpKX2ZwKSguLi4pOwp0eXBlZGVmIGludGVnZXIgKCpJX2Zw
KSguLi4pOwp0eXBlZGVmIGYyY19yZWFsICgqUl9mcCkoLi4uKTsKdHlwZWRlZiBkb3VibGVyZWFs
ICgqRF9mcCkoLi4uKSwgKCpFX2ZwKSguLi4pOwp0eXBlZGVmICAgdm9pZCAgKCpDX2ZwKSguLi4p
Owp0eXBlZGVmICAgdm9pZCAgKCpaX2ZwKSguLi4pOwp0eXBlZGVmIGxvZ2ljYWwgKCpMX2ZwKSgu
Li4pOwp0eXBlZGVmIHNob3J0bG9naWNhbCAoKktfZnApKC4uLik7CnR5cGVkZWYgICB2b2lkICAo
KkhfZnApKC4uLik7CnR5cGVkZWYgICBpbnQgKCpTX2ZwKSguLi4pOwojIDE5NyAiL2hvbWUvbWV0
c2VsYWEvaW5jbHVkZS9sYXBhY2twcC9mMmMuaCIKCiAKdHlwZWRlZiB2b2lkICBDX2Y7ICAgIAp0
eXBlZGVmIHZvaWQgIEhfZjsgICAgCnR5cGVkZWYgdm9pZCAgWl9mOyAgICAKdHlwZWRlZiBkb3Vi
bGVyZWFsIEVfZjsgIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCmV4dGVybiAiQyIg
ewpleHRlcm4gaW50IGFib3J0Xyh2b2lkKTsKZXh0ZXJuIGRvdWJsZSBjX2FicyhmMmNfY29tcGxl
eCAqKTsKZXh0ZXJuIHZvaWQgY19jb3MoZjJjX2NvbXBsZXggKiwgZjJjX2NvbXBsZXggKik7CmV4
dGVybiB2b2lkIGNfZGl2KGYyY19jb21wbGV4ICosIGYyY19jb21wbGV4ICosIGYyY19jb21wbGV4
ICopOwpleHRlcm4gdm9pZCBjX2V4cChmMmNfY29tcGxleCAqLCBmMmNfY29tcGxleCAqKTsKZXh0
ZXJuIHZvaWQgY19sb2coZjJjX2NvbXBsZXggKiwgZjJjX2NvbXBsZXggKik7CmV4dGVybiB2b2lk
IGNfc2luKGYyY19jb21wbGV4ICosIGYyY19jb21wbGV4ICopOwpleHRlcm4gdm9pZCBjX3NxcnQo
ZjJjX2NvbXBsZXggKiwgZjJjX2NvbXBsZXggKik7CmV4dGVybiBkb3VibGUgZF9hYnMoZG91Ymxl
ICopOwpleHRlcm4gZG91YmxlIGRfYWNvcyhkb3VibGUgKik7CmV4dGVybiBkb3VibGUgZF9hc2lu
KGRvdWJsZSAqKTsKZXh0ZXJuIGRvdWJsZSBkX2F0YW4oZG91YmxlICopOwpleHRlcm4gZG91Ymxl
IGRfYXRuMihkb3VibGUgKiwgZG91YmxlICopOwpleHRlcm4gdm9pZCBkX2NuamcoZG91YmxlY29t
cGxleCAqLCBkb3VibGVjb21wbGV4ICopOwpleHRlcm4gZG91YmxlIGRfY29zKGRvdWJsZSAqKTsK
ZXh0ZXJuIGRvdWJsZSBkX2Nvc2goZG91YmxlICopOwpleHRlcm4gZG91YmxlIGRfZGltKGRvdWJs
ZSAqLCBkb3VibGUgKik7CmV4dGVybiBkb3VibGUgZF9leHAoZG91YmxlICopOwpleHRlcm4gZG91
YmxlIGRfaW1hZyhkb3VibGVjb21wbGV4ICopOwpleHRlcm4gZG91YmxlIGRfaW50KGRvdWJsZSAq
KTsKZXh0ZXJuIGRvdWJsZSBkX2xnMTAoZG91YmxlICopOwpleHRlcm4gZG91YmxlIGRfbG9nKGRv
dWJsZSAqKTsKZXh0ZXJuIGRvdWJsZSBkX21vZChkb3VibGUgKiwgZG91YmxlICopOwpleHRlcm4g
ZG91YmxlIGRfbmludChkb3VibGUgKik7CmV4dGVybiBkb3VibGUgZF9wcm9kKGZsb2F0ICosIGZs
b2F0ICopOwpleHRlcm4gZG91YmxlIGRfc2lnbihkb3VibGUgKiwgZG91YmxlICopOwpleHRlcm4g
ZG91YmxlIGRfc2luKGRvdWJsZSAqKTsKZXh0ZXJuIGRvdWJsZSBkX3NpbmgoZG91YmxlICopOwpl
eHRlcm4gZG91YmxlIGRfc3FydChkb3VibGUgKik7CmV4dGVybiBkb3VibGUgZF90YW4oZG91Ymxl
ICopOwpleHRlcm4gZG91YmxlIGRfdGFuaChkb3VibGUgKik7CmV4dGVybiBkb3VibGUgZGVyZl8o
ZG91YmxlICopOwpleHRlcm4gZG91YmxlIGRlcmZjXyhkb3VibGUgKik7CmV4dGVybiBpbnRlZ2Vy
IGRvX2ZpbyhmdG5pbnQgKiwgY2hhciAqLCBmdG5sZW4pOwpleHRlcm4gaW50ZWdlciBkb19saW8o
ZnRuaW50ICosIGZ0bmludCAqLCBjaGFyICosIGZ0bmxlbik7CmV4dGVybiBpbnRlZ2VyIGRvX3Vp
byhmdG5pbnQgKiwgY2hhciAqLCBmdG5sZW4pOwpleHRlcm4gaW50ZWdlciBlX3JkZmUodm9pZCk7
CmV4dGVybiBpbnRlZ2VyIGVfcmR1ZSh2b2lkKTsKZXh0ZXJuIGludGVnZXIgZV9yc2ZlKHZvaWQp
OwpleHRlcm4gaW50ZWdlciBlX3JzZmkodm9pZCk7CmV4dGVybiBpbnRlZ2VyIGVfcnNsZSh2b2lk
KTsKZXh0ZXJuIGludGVnZXIgZV9yc2xpKHZvaWQpOwpleHRlcm4gaW50ZWdlciBlX3JzdWUodm9p
ZCk7CmV4dGVybiBpbnRlZ2VyIGVfd2RmZSh2b2lkKTsKZXh0ZXJuIGludGVnZXIgZV93ZHVlKHZv
aWQpOwpleHRlcm4gaW50ZWdlciBlX3dzZmUodm9pZCk7CmV4dGVybiBpbnRlZ2VyIGVfd3NmaSh2
b2lkKTsKZXh0ZXJuIGludGVnZXIgZV93c2xlKHZvaWQpOwpleHRlcm4gaW50ZWdlciBlX3dzbGko
dm9pZCk7CmV4dGVybiBpbnRlZ2VyIGVfd3N1ZSh2b2lkKTsKZXh0ZXJuIGludCBlZjFhc2NfKGZ0
bmludCAqLCBmdG5sZW4gKiwgZnRuaW50ICosIGZ0bmxlbiAqKTsKZXh0ZXJuIGludGVnZXIgZWYx
Y21jXyhmdG5pbnQgKiwgZnRubGVuICosIGZ0bmludCAqLCBmdG5sZW4gKik7CmV4dGVybiBkb3Vi
bGUgZXJmKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgZXJmXyhmbG9hdCAqKTsKZXh0ZXJuIGRvdWJs
ZSBlcmZjKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgZXJmY18oZmxvYXQgKik7CmV4dGVybiBpbnRl
Z2VyIGZfYmFjayhhbGlzdCAqKTsKZXh0ZXJuIGludGVnZXIgZl9jbG9zKGNsbGlzdCAqKTsKZXh0
ZXJuIGludGVnZXIgZl9lbmQoYWxpc3QgKik7CmV4dGVybiB2b2lkIGZfZXhpdCh2b2lkKTsKZXh0
ZXJuIGludGVnZXIgZl9pbnF1KGlubGlzdCAqKTsKZXh0ZXJuIGludGVnZXIgZl9vcGVuKG9saXN0
ICopOwpleHRlcm4gaW50ZWdlciBmX3JldyhhbGlzdCAqKTsKZXh0ZXJuIGludCBmbHVzaF8odm9p
ZCk7CmV4dGVybiB2b2lkIGdldGFyZ18oaW50ZWdlciAqLCBjaGFyICosIGZ0bmxlbik7CmV4dGVy
biB2b2lkIGdldGVudl8oY2hhciAqLCBjaGFyICosIGZ0bmxlbiwgZnRubGVuKTsKZXh0ZXJuIHNo
b3J0IGhfYWJzKHNob3J0ICopOwpleHRlcm4gc2hvcnQgaF9kaW0oc2hvcnQgKiwgc2hvcnQgKik7
CmV4dGVybiBzaG9ydCBoX2RubnQoZG91YmxlICopOwpleHRlcm4gc2hvcnQgaF9pbmR4KGNoYXIg
KiwgY2hhciAqLCBmdG5sZW4sIGZ0bmxlbik7CmV4dGVybiBzaG9ydCBoX2xlbihjaGFyICosIGZ0
bmxlbik7CmV4dGVybiBzaG9ydCBoX21vZChzaG9ydCAqLCBzaG9ydCAqKTsKZXh0ZXJuIHNob3J0
IGhfbmludChmbG9hdCAqKTsKZXh0ZXJuIHNob3J0IGhfc2lnbihzaG9ydCAqLCBzaG9ydCAqKTsK
ZXh0ZXJuIHNob3J0IGhsX2dlKGNoYXIgKiwgY2hhciAqLCBmdG5sZW4sIGZ0bmxlbik7CmV4dGVy
biBzaG9ydCBobF9ndChjaGFyICosIGNoYXIgKiwgZnRubGVuLCBmdG5sZW4pOwpleHRlcm4gc2hv
cnQgaGxfbGUoY2hhciAqLCBjaGFyICosIGZ0bmxlbiwgZnRubGVuKTsKZXh0ZXJuIHNob3J0IGhs
X2x0KGNoYXIgKiwgY2hhciAqLCBmdG5sZW4sIGZ0bmxlbik7CmV4dGVybiBpbnRlZ2VyIGlfYWJz
KGludGVnZXIgKik7CmV4dGVybiBpbnRlZ2VyIGlfZGltKGludGVnZXIgKiwgaW50ZWdlciAqKTsK
ZXh0ZXJuIGludGVnZXIgaV9kbm50KGRvdWJsZSAqKTsKZXh0ZXJuIGludGVnZXIgaV9pbmR4KGNo
YXIgKiwgY2hhciAqLCBmdG5sZW4sIGZ0bmxlbik7CmV4dGVybiBpbnRlZ2VyIGlfbGVuKGNoYXIg
KiwgZnRubGVuKTsKZXh0ZXJuIGludGVnZXIgaV9tb2QoaW50ZWdlciAqLCBpbnRlZ2VyICopOwpl
eHRlcm4gaW50ZWdlciBpX25pbnQoZmxvYXQgKik7CmV4dGVybiBpbnRlZ2VyIGlfc2lnbihpbnRl
Z2VyICosIGludGVnZXIgKik7CmV4dGVybiBpbnRlZ2VyIGlhcmdjXyh2b2lkKTsKZXh0ZXJuIGZ0
bmxlbiBsX2dlKGNoYXIgKiwgY2hhciAqLCBmdG5sZW4sIGZ0bmxlbik7CmV4dGVybiBmdG5sZW4g
bF9ndChjaGFyICosIGNoYXIgKiwgZnRubGVuLCBmdG5sZW4pOwpleHRlcm4gZnRubGVuIGxfbGUo
Y2hhciAqLCBjaGFyICosIGZ0bmxlbiwgZnRubGVuKTsKZXh0ZXJuIGZ0bmxlbiBsX2x0KGNoYXIg
KiwgY2hhciAqLCBmdG5sZW4sIGZ0bmxlbik7CmV4dGVybiB2b2lkIHBvd19jaShmMmNfY29tcGxl
eCAqLCBmMmNfY29tcGxleCAqLCBpbnRlZ2VyICopOwpleHRlcm4gZG91YmxlIHBvd19kZChkb3Vi
bGUgKiwgZG91YmxlICopOwpleHRlcm4gZG91YmxlIHBvd19kaShkb3VibGUgKiwgaW50ZWdlciAq
KTsKZXh0ZXJuIHNob3J0IHBvd19oaChzaG9ydCAqLCBzaG9ydGludCAqKTsKZXh0ZXJuIGludGVn
ZXIgcG93X2lpKGludGVnZXIgKiwgaW50ZWdlciAqKTsKIApleHRlcm4gdm9pZCBwb3dfemkoZG91
YmxlY29tcGxleCAqLCBkb3VibGVjb21wbGV4ICosIGludGVnZXIgKik7CmV4dGVybiB2b2lkIHBv
d196eihkb3VibGVjb21wbGV4ICosIGRvdWJsZWNvbXBsZXggKiwgZG91YmxlY29tcGxleCAqKTsK
ZXh0ZXJuIGRvdWJsZSByX2FicyhmbG9hdCAqKTsKZXh0ZXJuIGRvdWJsZSByX2Fjb3MoZmxvYXQg
Kik7CmV4dGVybiBkb3VibGUgcl9hc2luKGZsb2F0ICopOwpleHRlcm4gZG91YmxlIHJfYXRhbihm
bG9hdCAqKTsKZXh0ZXJuIGRvdWJsZSByX2F0bjIoZmxvYXQgKiwgZmxvYXQgKik7CmV4dGVybiB2
b2lkIHJfY25qZyhmMmNfY29tcGxleCAqLCBmMmNfY29tcGxleCAqKTsKZXh0ZXJuIGRvdWJsZSBy
X2NvcyhmbG9hdCAqKTsKZXh0ZXJuIGRvdWJsZSByX2Nvc2goZmxvYXQgKik7CmV4dGVybiBkb3Vi
bGUgcl9kaW0oZmxvYXQgKiwgZmxvYXQgKik7CmV4dGVybiBkb3VibGUgcl9leHAoZmxvYXQgKik7
CmV4dGVybiBkb3VibGUgcl9pbWFnKGYyY19jb21wbGV4ICopOwpleHRlcm4gZG91YmxlIHJfaW50
KGZsb2F0ICopOwpleHRlcm4gZG91YmxlIHJfbGcxMChmbG9hdCAqKTsKZXh0ZXJuIGRvdWJsZSBy
X2xvZyhmbG9hdCAqKTsKZXh0ZXJuIGRvdWJsZSByX21vZChmbG9hdCAqLCBmbG9hdCAqKTsKZXh0
ZXJuIGRvdWJsZSByX25pbnQoZmxvYXQgKik7CmV4dGVybiBkb3VibGUgcl9zaWduKGZsb2F0ICos
IGZsb2F0ICopOwpleHRlcm4gZG91YmxlIHJfc2luKGZsb2F0ICopOwpleHRlcm4gZG91YmxlIHJf
c2luaChmbG9hdCAqKTsKZXh0ZXJuIGRvdWJsZSByX3NxcnQoZmxvYXQgKik7CmV4dGVybiBkb3Vi
bGUgcl90YW4oZmxvYXQgKik7CmV4dGVybiBkb3VibGUgcl90YW5oKGZsb2F0ICopOwpleHRlcm4g
dm9pZCBzX2NhdChjaGFyICosIGNoYXIgKiosIGludGVnZXIgKiwgaW50ZWdlciAqLCBmdG5sZW4p
OwpleHRlcm4gaW50ZWdlciBzX2NtcChjaGFyICosIGNoYXIgKiwgZnRubGVuLCBmdG5sZW4pOwpl
eHRlcm4gdm9pZCBzX2NvcHkoY2hhciAqLCBjaGFyICosIGZ0bmxlbiwgZnRubGVuKTsKZXh0ZXJu
IGludCBzX3BhdXMoY2hhciAqLCBmdG5sZW4pOwpleHRlcm4gaW50ZWdlciBzX3JkZmUoY2lsaXN0
ICopOwpleHRlcm4gaW50ZWdlciBzX3JkdWUoY2lsaXN0ICopOwpleHRlcm4gaW50ZWdlciBzX3Ju
Z2UoY2hhciAqLCBpbnRlZ2VyLCBjaGFyICosIGludGVnZXIpOwpleHRlcm4gaW50ZWdlciBzX3Jz
ZmUoY2lsaXN0ICopOwpleHRlcm4gaW50ZWdlciBzX3JzZmkoaWNpbGlzdCAqKTsKZXh0ZXJuIGlu
dGVnZXIgc19yc2xlKGNpbGlzdCAqKTsKZXh0ZXJuIGludGVnZXIgc19yc2xpKGljaWxpc3QgKik7
CmV4dGVybiBpbnRlZ2VyIHNfcnNuZShjaWxpc3QgKik7CmV4dGVybiBpbnRlZ2VyIHNfcnNuaShp
Y2lsaXN0ICopOwpleHRlcm4gaW50ZWdlciBzX3JzdWUoY2lsaXN0ICopOwpleHRlcm4gaW50IHNf
c3RvcChjaGFyICosIGZ0bmxlbik7CmV4dGVybiBpbnRlZ2VyIHNfd2RmZShjaWxpc3QgKik7CmV4
dGVybiBpbnRlZ2VyIHNfd2R1ZShjaWxpc3QgKik7CmV4dGVybiBpbnRlZ2VyIHNfd3NmZShjaWxp
c3QgKik7CmV4dGVybiBpbnRlZ2VyIHNfd3NmaShpY2lsaXN0ICopOwpleHRlcm4gaW50ZWdlciBz
X3dzbGUoY2lsaXN0ICopOwpleHRlcm4gaW50ZWdlciBzX3dzbGkoaWNpbGlzdCAqKTsKZXh0ZXJu
IGludGVnZXIgc193c25lKGNpbGlzdCAqKTsKZXh0ZXJuIGludGVnZXIgc193c25pKGljaWxpc3Qg
Kik7CmV4dGVybiBpbnRlZ2VyIHNfd3N1ZShjaWxpc3QgKik7CmV4dGVybiB2b2lkIHNpZ19kaWUo
Y2hhciAqLCBpbnQpOwpleHRlcm4gaW50ZWdlciBzaWduYWxfKGludGVnZXIgKiwgdm9pZCAoKiko
aW50KSk7CmV4dGVybiBpbnQgc3lzdGVtXyhjaGFyICosIGZ0bmxlbik7CmV4dGVybiBkb3VibGUg
el9hYnMoZG91YmxlY29tcGxleCAqKTsKZXh0ZXJuIHZvaWQgel9jb3MoZG91YmxlY29tcGxleCAq
LCBkb3VibGVjb21wbGV4ICopOwpleHRlcm4gdm9pZCB6X2Rpdihkb3VibGVjb21wbGV4ICosIGRv
dWJsZWNvbXBsZXggKiwgZG91YmxlY29tcGxleCAqKTsKZXh0ZXJuIHZvaWQgel9leHAoZG91Ymxl
Y29tcGxleCAqLCBkb3VibGVjb21wbGV4ICopOwpleHRlcm4gdm9pZCB6X2xvZyhkb3VibGVjb21w
bGV4ICosIGRvdWJsZWNvbXBsZXggKik7CmV4dGVybiB2b2lkIHpfc2luKGRvdWJsZWNvbXBsZXgg
KiwgZG91YmxlY29tcGxleCAqKTsKZXh0ZXJuIHZvaWQgel9zcXJ0KGRvdWJsZWNvbXBsZXggKiwg
ZG91YmxlY29tcGxleCAqKTsKICAgIH0KCiMgOCAiL2hvbWUvbWV0c2VsYWEvaW5jbHVkZS9sYXBh
Y2twcC9ibGFzMS5oIiAyCgoKZXh0ZXJuICJDIgp7CgoKICAgIGRvdWJsZSAgZGFzdW0gIChjb25z
dCBpbnRlZ2VyICpuLCBjb25zdCBkb3VibGUgKmR4LCBjb25zdCBpbnRlZ2VyICppbmN4KTsKCgog
ICAgdm9pZCAgZGF4cHkgIChjb25zdCBpbnRlZ2VyICpuLCBjb25zdCBkb3VibGUgKmRhLCBjb25z
dCBkb3VibGUgKmR4LCAKICAgICAgICAgICAgY29uc3QgaW50ZWdlciAqaW5jeCwgZG91YmxlICpk
eSwgY29uc3QgaW50ZWdlciAqaW5jeSk7CgogICAgdm9pZCAgZGNvcHkgIChjb25zdCBpbnRlZ2Vy
ICpuLCBkb3VibGUgKmR4LCBjb25zdCBpbnRlZ2VyICppbmN4LCBkb3VibGUgKmR5LCAKICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgaW50ZWdlciAqaW5jeSk7CgoKICAgIGRvdWJsZSAgZGRv
dCAgKGNvbnN0IGludGVnZXIgKm4sIGNvbnN0IGRvdWJsZSAqZHgsIGNvbnN0IGludGVnZXIgKmlu
Y3gsIAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgKmR5LCBjb25zdCBpbnRl
Z2VyICppbmN5KTsKCiAgICBkb3VibGUgIGRucm0yICAoY29uc3QgaW50ZWdlciAqbiwgY29uc3Qg
ZG91YmxlICpkeCwgY29uc3QgaW50ZWdlciAqaW5jeCk7IAoKICAgIHZvaWQgIGRyb3QgIChjb25z
dCBpbnRlZ2VyICpuLCBkb3VibGUgKmR4LCBjb25zdCBpbnRlZ2VyICppbmN4LCBkb3VibGUgKmR5
LCAKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ZWdlciAqaW5jeSwgY29uc3QgZG91
YmxlICpjLCBjb25zdCBkb3VibGUgKnMpOwoKICAgIHZvaWQgIGRyb3RnICAoZG91YmxlICpkYSwg
ZG91YmxlICpkYiwgZG91YmxlICpjLCBkb3VibGUgKnMpOwoKICAgIHZvaWQgIGRzY2FsICAoY29u
c3QgaW50ZWdlciAqbiwgZG91YmxlICpkYSwgZG91YmxlICpkeCwgY29uc3QgaW50ZWdlciAqaW5j
eCk7CgogICAgdm9pZCAgZHN3YXAgIChjb25zdCBpbnRlZ2VyICpuLCBkb3VibGUgKmR4LCBjb25z
dCBpbnRlZ2VyICppbmN4LCBkb3VibGUgKmR5LCAKICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgaW50ZWdlciAqaW5jeSk7CgogICAgaW50ZWdlciAgaWRhbWF4ICAoY29uc3QgaW50ZWdlciAq
biwgY29uc3QgZG91YmxlICpkeCwgY29uc3QgaW50ZWdlciAqaW5jeCk7CgojIDc1ICIvaG9tZS9t
ZXRzZWxhYS9pbmNsdWRlL2xhcGFja3BwL2JsYXMxLmgiCgp9CgoKCiMgMTAgIi9ob21lL21ldHNl
bGFhL2luY2x1ZGUvbGFwYWNrcHAvYmxhczErKy5oIiAyCgoKIyAyNSAiL2hvbWUvbWV0c2VsYWEv
aW5jbHVkZS9sYXBhY2twcC9ibGFzMSsrLmgiCgoKCiMgNDIgIi9ob21lL21ldHNlbGFhL2luY2x1
ZGUvbGFwYWNrcHAvYmxhczErKy5oIgoKICAKCgogICAgIAojIDEwICIvaG9tZS9tZXRzZWxhYS9p
bmNsdWRlL2xhcGFja3BwL2JsYXMrKy5oIiAyCgojIDEgIi9ob21lL21ldHNlbGFhL2luY2x1ZGUv
bGFwYWNrcHAvYmxhczIrKy5oIiAxCiAKIAoKCgoKCgojIDEgIi9ob21lL21ldHNlbGFhL2luY2x1
ZGUvbGFwYWNrcHAvYmxhczIuaCIgMQogCiAKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9nZW5l
cmljLmgiIDEgMwogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IAp0eXBlZGVmIGludCAoKkdQVCkoaW50LGNoYXIqKTsKCgoKCgoKCgoKIyA3ICIvaG9tZS9tZXRz
ZWxhYS9pbmNsdWRlL2xhcGFja3BwL2JsYXMyLmgiIDIKCgojIDEgIi9ob21lL21ldHNlbGFhL2lu
Y2x1ZGUvbGFwYWNrcHAvZjJjLmgiIDEKCgogCgoKCgoKCgoKCgoKCgoKCgogCgojIDIyNiAiL2hv
bWUvbWV0c2VsYWEvaW5jbHVkZS9sYXBhY2twcC9mMmMuaCIKCgoKIAoKCgpleHRlcm4gIkMiIHsK
ZXh0ZXJuIGludCBhYm9ydF8odm9pZCk7CmV4dGVybiBkb3VibGUgY19hYnMoZjJjX2NvbXBsZXgg
Kik7CmV4dGVybiB2b2lkIGNfY29zKGYyY19jb21wbGV4ICosIGYyY19jb21wbGV4ICopOwpleHRl
cm4gdm9pZCBjX2RpdihmMmNfY29tcGxleCAqLCBmMmNfY29tcGxleCAqLCBmMmNfY29tcGxleCAq
KTsKZXh0ZXJuIHZvaWQgY19leHAoZjJjX2NvbXBsZXggKiwgZjJjX2NvbXBsZXggKik7CmV4dGVy
biB2b2lkIGNfbG9nKGYyY19jb21wbGV4ICosIGYyY19jb21wbGV4ICopOwpleHRlcm4gdm9pZCBj
X3NpbihmMmNfY29tcGxleCAqLCBmMmNfY29tcGxleCAqKTsKZXh0ZXJuIHZvaWQgY19zcXJ0KGYy
Y19jb21wbGV4ICosIGYyY19jb21wbGV4ICopOwpleHRlcm4gZG91YmxlIGRfYWJzKGRvdWJsZSAq
KTsKZXh0ZXJuIGRvdWJsZSBkX2Fjb3MoZG91YmxlICopOwpleHRlcm4gZG91YmxlIGRfYXNpbihk
b3VibGUgKik7CmV4dGVybiBkb3VibGUgZF9hdGFuKGRvdWJsZSAqKTsKZXh0ZXJuIGRvdWJsZSBk
X2F0bjIoZG91YmxlICosIGRvdWJsZSAqKTsKZXh0ZXJuIHZvaWQgZF9jbmpnKGRvdWJsZWNvbXBs
ZXggKiwgZG91YmxlY29tcGxleCAqKTsKZXh0ZXJuIGRvdWJsZSBkX2Nvcyhkb3VibGUgKik7CmV4
dGVybiBkb3VibGUgZF9jb3NoKGRvdWJsZSAqKTsKZXh0ZXJuIGRvdWJsZSBkX2RpbShkb3VibGUg
KiwgZG91YmxlICopOwpleHRlcm4gZG91YmxlIGRfZXhwKGRvdWJsZSAqKTsKZXh0ZXJuIGRvdWJs
ZSBkX2ltYWcoZG91YmxlY29tcGxleCAqKTsKZXh0ZXJuIGRvdWJsZSBkX2ludChkb3VibGUgKik7
CmV4dGVybiBkb3VibGUgZF9sZzEwKGRvdWJsZSAqKTsKZXh0ZXJuIGRvdWJsZSBkX2xvZyhkb3Vi
bGUgKik7CmV4dGVybiBkb3VibGUgZF9tb2QoZG91YmxlICosIGRvdWJsZSAqKTsKZXh0ZXJuIGRv
dWJsZSBkX25pbnQoZG91YmxlICopOwpleHRlcm4gZG91YmxlIGRfcHJvZChmbG9hdCAqLCBmbG9h
dCAqKTsKZXh0ZXJuIGRvdWJsZSBkX3NpZ24oZG91YmxlICosIGRvdWJsZSAqKTsKZXh0ZXJuIGRv
dWJsZSBkX3Npbihkb3VibGUgKik7CmV4dGVybiBkb3VibGUgZF9zaW5oKGRvdWJsZSAqKTsKZXh0
ZXJuIGRvdWJsZSBkX3NxcnQoZG91YmxlICopOwpleHRlcm4gZG91YmxlIGRfdGFuKGRvdWJsZSAq
KTsKZXh0ZXJuIGRvdWJsZSBkX3RhbmgoZG91YmxlICopOwpleHRlcm4gZG91YmxlIGRlcmZfKGRv
dWJsZSAqKTsKZXh0ZXJuIGRvdWJsZSBkZXJmY18oZG91YmxlICopOwpleHRlcm4gaW50ZWdlciBk
b19maW8oZnRuaW50ICosIGNoYXIgKiwgZnRubGVuKTsKZXh0ZXJuIGludGVnZXIgZG9fbGlvKGZ0
bmludCAqLCBmdG5pbnQgKiwgY2hhciAqLCBmdG5sZW4pOwpleHRlcm4gaW50ZWdlciBkb191aW8o
ZnRuaW50ICosIGNoYXIgKiwgZnRubGVuKTsKZXh0ZXJuIGludGVnZXIgZV9yZGZlKHZvaWQpOwpl
eHRlcm4gaW50ZWdlciBlX3JkdWUodm9pZCk7CmV4dGVybiBpbnRlZ2VyIGVfcnNmZSh2b2lkKTsK
ZXh0ZXJuIGludGVnZXIgZV9yc2ZpKHZvaWQpOwpleHRlcm4gaW50ZWdlciBlX3JzbGUodm9pZCk7
CmV4dGVybiBpbnRlZ2VyIGVfcnNsaSh2b2lkKTsKZXh0ZXJuIGludGVnZXIgZV9yc3VlKHZvaWQp
OwpleHRlcm4gaW50ZWdlciBlX3dkZmUodm9pZCk7CmV4dGVybiBpbnRlZ2VyIGVfd2R1ZSh2b2lk
KTsKZXh0ZXJuIGludGVnZXIgZV93c2ZlKHZvaWQpOwpleHRlcm4gaW50ZWdlciBlX3dzZmkodm9p
ZCk7CmV4dGVybiBpbnRlZ2VyIGVfd3NsZSh2b2lkKTsKZXh0ZXJuIGludGVnZXIgZV93c2xpKHZv
aWQpOwpleHRlcm4gaW50ZWdlciBlX3dzdWUodm9pZCk7CmV4dGVybiBpbnQgZWYxYXNjXyhmdG5p
bnQgKiwgZnRubGVuICosIGZ0bmludCAqLCBmdG5sZW4gKik7CmV4dGVybiBpbnRlZ2VyIGVmMWNt
Y18oZnRuaW50ICosIGZ0bmxlbiAqLCBmdG5pbnQgKiwgZnRubGVuICopOwpleHRlcm4gZG91Ymxl
IGVyZihkb3VibGUpOwpleHRlcm4gZG91YmxlIGVyZl8oZmxvYXQgKik7CmV4dGVybiBkb3VibGUg
ZXJmYyhkb3VibGUpOwpleHRlcm4gZG91YmxlIGVyZmNfKGZsb2F0ICopOwpleHRlcm4gaW50ZWdl
ciBmX2JhY2soYWxpc3QgKik7CmV4dGVybiBpbnRlZ2VyIGZfY2xvcyhjbGxpc3QgKik7CmV4dGVy
biBpbnRlZ2VyIGZfZW5kKGFsaXN0ICopOwpleHRlcm4gdm9pZCBmX2V4aXQodm9pZCk7CmV4dGVy
biBpbnRlZ2VyIGZfaW5xdShpbmxpc3QgKik7CmV4dGVybiBpbnRlZ2VyIGZfb3BlbihvbGlzdCAq
KTsKZXh0ZXJuIGludGVnZXIgZl9yZXcoYWxpc3QgKik7CmV4dGVybiBpbnQgZmx1c2hfKHZvaWQp
OwpleHRlcm4gdm9pZCBnZXRhcmdfKGludGVnZXIgKiwgY2hhciAqLCBmdG5sZW4pOwpleHRlcm4g
dm9pZCBnZXRlbnZfKGNoYXIgKiwgY2hhciAqLCBmdG5sZW4sIGZ0bmxlbik7CmV4dGVybiBzaG9y
dCBoX2FicyhzaG9ydCAqKTsKZXh0ZXJuIHNob3J0IGhfZGltKHNob3J0ICosIHNob3J0ICopOwpl
eHRlcm4gc2hvcnQgaF9kbm50KGRvdWJsZSAqKTsKZXh0ZXJuIHNob3J0IGhfaW5keChjaGFyICos
IGNoYXIgKiwgZnRubGVuLCBmdG5sZW4pOwpleHRlcm4gc2hvcnQgaF9sZW4oY2hhciAqLCBmdG5s
ZW4pOwpleHRlcm4gc2hvcnQgaF9tb2Qoc2hvcnQgKiwgc2hvcnQgKik7CmV4dGVybiBzaG9ydCBo
X25pbnQoZmxvYXQgKik7CmV4dGVybiBzaG9ydCBoX3NpZ24oc2hvcnQgKiwgc2hvcnQgKik7CmV4
dGVybiBzaG9ydCBobF9nZShjaGFyICosIGNoYXIgKiwgZnRubGVuLCBmdG5sZW4pOwpleHRlcm4g
c2hvcnQgaGxfZ3QoY2hhciAqLCBjaGFyICosIGZ0bmxlbiwgZnRubGVuKTsKZXh0ZXJuIHNob3J0
IGhsX2xlKGNoYXIgKiwgY2hhciAqLCBmdG5sZW4sIGZ0bmxlbik7CmV4dGVybiBzaG9ydCBobF9s
dChjaGFyICosIGNoYXIgKiwgZnRubGVuLCBmdG5sZW4pOwpleHRlcm4gaW50ZWdlciBpX2Ficyhp
bnRlZ2VyICopOwpleHRlcm4gaW50ZWdlciBpX2RpbShpbnRlZ2VyICosIGludGVnZXIgKik7CmV4
dGVybiBpbnRlZ2VyIGlfZG5udChkb3VibGUgKik7CmV4dGVybiBpbnRlZ2VyIGlfaW5keChjaGFy
ICosIGNoYXIgKiwgZnRubGVuLCBmdG5sZW4pOwpleHRlcm4gaW50ZWdlciBpX2xlbihjaGFyICos
IGZ0bmxlbik7CmV4dGVybiBpbnRlZ2VyIGlfbW9kKGludGVnZXIgKiwgaW50ZWdlciAqKTsKZXh0
ZXJuIGludGVnZXIgaV9uaW50KGZsb2F0ICopOwpleHRlcm4gaW50ZWdlciBpX3NpZ24oaW50ZWdl
ciAqLCBpbnRlZ2VyICopOwpleHRlcm4gaW50ZWdlciBpYXJnY18odm9pZCk7CmV4dGVybiBmdG5s
ZW4gbF9nZShjaGFyICosIGNoYXIgKiwgZnRubGVuLCBmdG5sZW4pOwpleHRlcm4gZnRubGVuIGxf
Z3QoY2hhciAqLCBjaGFyICosIGZ0bmxlbiwgZnRubGVuKTsKZXh0ZXJuIGZ0bmxlbiBsX2xlKGNo
YXIgKiwgY2hhciAqLCBmdG5sZW4sIGZ0bmxlbik7CmV4dGVybiBmdG5sZW4gbF9sdChjaGFyICos
IGNoYXIgKiwgZnRubGVuLCBmdG5sZW4pOwpleHRlcm4gdm9pZCBwb3dfY2koZjJjX2NvbXBsZXgg
KiwgZjJjX2NvbXBsZXggKiwgaW50ZWdlciAqKTsKZXh0ZXJuIGRvdWJsZSBwb3dfZGQoZG91Ymxl
ICosIGRvdWJsZSAqKTsKZXh0ZXJuIGRvdWJsZSBwb3dfZGkoZG91YmxlICosIGludGVnZXIgKik7
CmV4dGVybiBzaG9ydCBwb3dfaGgoc2hvcnQgKiwgc2hvcnRpbnQgKik7CmV4dGVybiBpbnRlZ2Vy
IHBvd19paShpbnRlZ2VyICosIGludGVnZXIgKik7CiAKZXh0ZXJuIHZvaWQgcG93X3ppKGRvdWJs
ZWNvbXBsZXggKiwgZG91YmxlY29tcGxleCAqLCBpbnRlZ2VyICopOwpleHRlcm4gdm9pZCBwb3df
enooZG91YmxlY29tcGxleCAqLCBkb3VibGVjb21wbGV4ICosIGRvdWJsZWNvbXBsZXggKik7CmV4
dGVybiBkb3VibGUgcl9hYnMoZmxvYXQgKik7CmV4dGVybiBkb3VibGUgcl9hY29zKGZsb2F0ICop
OwpleHRlcm4gZG91YmxlIHJfYXNpbihmbG9hdCAqKTsKZXh0ZXJuIGRvdWJsZSByX2F0YW4oZmxv
YXQgKik7CmV4dGVybiBkb3VibGUgcl9hdG4yKGZsb2F0ICosIGZsb2F0ICopOwpleHRlcm4gdm9p
ZCByX2NuamcoZjJjX2NvbXBsZXggKiwgZjJjX2NvbXBsZXggKik7CmV4dGVybiBkb3VibGUgcl9j
b3MoZmxvYXQgKik7CmV4dGVybiBkb3VibGUgcl9jb3NoKGZsb2F0ICopOwpleHRlcm4gZG91Ymxl
IHJfZGltKGZsb2F0ICosIGZsb2F0ICopOwpleHRlcm4gZG91YmxlIHJfZXhwKGZsb2F0ICopOwpl
eHRlcm4gZG91YmxlIHJfaW1hZyhmMmNfY29tcGxleCAqKTsKZXh0ZXJuIGRvdWJsZSByX2ludChm
bG9hdCAqKTsKZXh0ZXJuIGRvdWJsZSByX2xnMTAoZmxvYXQgKik7CmV4dGVybiBkb3VibGUgcl9s
b2coZmxvYXQgKik7CmV4dGVybiBkb3VibGUgcl9tb2QoZmxvYXQgKiwgZmxvYXQgKik7CmV4dGVy
biBkb3VibGUgcl9uaW50KGZsb2F0ICopOwpleHRlcm4gZG91YmxlIHJfc2lnbihmbG9hdCAqLCBm
bG9hdCAqKTsKZXh0ZXJuIGRvdWJsZSByX3NpbihmbG9hdCAqKTsKZXh0ZXJuIGRvdWJsZSByX3Np
bmgoZmxvYXQgKik7CmV4dGVybiBkb3VibGUgcl9zcXJ0KGZsb2F0ICopOwpleHRlcm4gZG91Ymxl
IHJfdGFuKGZsb2F0ICopOwpleHRlcm4gZG91YmxlIHJfdGFuaChmbG9hdCAqKTsKZXh0ZXJuIHZv
aWQgc19jYXQoY2hhciAqLCBjaGFyICoqLCBpbnRlZ2VyICosIGludGVnZXIgKiwgZnRubGVuKTsK
ZXh0ZXJuIGludGVnZXIgc19jbXAoY2hhciAqLCBjaGFyICosIGZ0bmxlbiwgZnRubGVuKTsKZXh0
ZXJuIHZvaWQgc19jb3B5KGNoYXIgKiwgY2hhciAqLCBmdG5sZW4sIGZ0bmxlbik7CmV4dGVybiBp
bnQgc19wYXVzKGNoYXIgKiwgZnRubGVuKTsKZXh0ZXJuIGludGVnZXIgc19yZGZlKGNpbGlzdCAq
KTsKZXh0ZXJuIGludGVnZXIgc19yZHVlKGNpbGlzdCAqKTsKZXh0ZXJuIGludGVnZXIgc19ybmdl
KGNoYXIgKiwgaW50ZWdlciwgY2hhciAqLCBpbnRlZ2VyKTsKZXh0ZXJuIGludGVnZXIgc19yc2Zl
KGNpbGlzdCAqKTsKZXh0ZXJuIGludGVnZXIgc19yc2ZpKGljaWxpc3QgKik7CmV4dGVybiBpbnRl
Z2VyIHNfcnNsZShjaWxpc3QgKik7CmV4dGVybiBpbnRlZ2VyIHNfcnNsaShpY2lsaXN0ICopOwpl
eHRlcm4gaW50ZWdlciBzX3JzbmUoY2lsaXN0ICopOwpleHRlcm4gaW50ZWdlciBzX3JzbmkoaWNp
bGlzdCAqKTsKZXh0ZXJuIGludGVnZXIgc19yc3VlKGNpbGlzdCAqKTsKZXh0ZXJuIGludCBzX3N0
b3AoY2hhciAqLCBmdG5sZW4pOwpleHRlcm4gaW50ZWdlciBzX3dkZmUoY2lsaXN0ICopOwpleHRl
cm4gaW50ZWdlciBzX3dkdWUoY2lsaXN0ICopOwpleHRlcm4gaW50ZWdlciBzX3dzZmUoY2lsaXN0
ICopOwpleHRlcm4gaW50ZWdlciBzX3dzZmkoaWNpbGlzdCAqKTsKZXh0ZXJuIGludGVnZXIgc193
c2xlKGNpbGlzdCAqKTsKZXh0ZXJuIGludGVnZXIgc193c2xpKGljaWxpc3QgKik7CmV4dGVybiBp
bnRlZ2VyIHNfd3NuZShjaWxpc3QgKik7CmV4dGVybiBpbnRlZ2VyIHNfd3NuaShpY2lsaXN0ICop
OwpleHRlcm4gaW50ZWdlciBzX3dzdWUoY2lsaXN0ICopOwpleHRlcm4gdm9pZCBzaWdfZGllKGNo
YXIgKiwgaW50KTsKZXh0ZXJuIGludGVnZXIgc2lnbmFsXyhpbnRlZ2VyICosIHZvaWQgKCopKGlu
dCkpOwpleHRlcm4gaW50IHN5c3RlbV8oY2hhciAqLCBmdG5sZW4pOwpleHRlcm4gZG91YmxlIHpf
YWJzKGRvdWJsZWNvbXBsZXggKik7CmV4dGVybiB2b2lkIHpfY29zKGRvdWJsZWNvbXBsZXggKiwg
ZG91YmxlY29tcGxleCAqKTsKZXh0ZXJuIHZvaWQgel9kaXYoZG91YmxlY29tcGxleCAqLCBkb3Vi
bGVjb21wbGV4ICosIGRvdWJsZWNvbXBsZXggKik7CmV4dGVybiB2b2lkIHpfZXhwKGRvdWJsZWNv
bXBsZXggKiwgZG91YmxlY29tcGxleCAqKTsKZXh0ZXJuIHZvaWQgel9sb2coZG91YmxlY29tcGxl
eCAqLCBkb3VibGVjb21wbGV4ICopOwpleHRlcm4gdm9pZCB6X3Npbihkb3VibGVjb21wbGV4ICos
IGRvdWJsZWNvbXBsZXggKik7CmV4dGVybiB2b2lkIHpfc3FydChkb3VibGVjb21wbGV4ICosIGRv
dWJsZWNvbXBsZXggKik7CiAgICB9CgojIDkgIi9ob21lL21ldHNlbGFhL2luY2x1ZGUvbGFwYWNr
cHAvYmxhczIuaCIgMgoKCmV4dGVybiAiQyIKewogICAgIHZvaWQgIGRnZW12ICAoY2hhciogdHJh
bnMsIGludGVnZXIqIE0sIGludGVnZXIqIE4sIGRvdWJsZSogYWxwaGEsIAogICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGRvdWJsZSogQSwgaW50ZWdlciogbGRhLCBjb25zdCBkb3VibGUqIGR4LCAK
ICAgICAgICAgICAgICAgICAgICBpbnRlZ2VyKiBpbmN4LCBkb3VibGUqIGJldGEsIGRvdWJsZSog
ZHksIGludGVnZXIqIGluY3kpOwoKICAgICB2b2lkICBkZ2JtdiAgKGNoYXIqIHRyYW5zLCBpbnRl
Z2VyKiBNLCBpbnRlZ2VyKiBOLCBpbnRlZ2VyKiBrbCwgCiAgICAgICAgICAgICAgICAgICAgaW50
ZWdlcioga3UsIGRvdWJsZSogYWxwaGEsIGNvbnN0IGRvdWJsZSogQSwgaW50ZWdlciogbGRhLCAK
ICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUqIGR4LCBpbnRlZ2VyKiBpbmN4LCBkb3Vi
bGUqIGJldGEsIAogICAgICAgICAgICAgICAgICAgIGRvdWJsZSogZHksIGludGVnZXIqIGluY3kp
OwoKICAgICB2b2lkICBkc3ltdiAgKGNoYXIqIHVwbG8sIGludGVnZXIqIE4sIGRvdWJsZSogYWxw
aGEsIGNvbnN0IGRvdWJsZSogQSwgCiAgICAgICAgICAgICAgICAgICAgaW50ZWdlciogbGRhLCBj
b25zdCBkb3VibGUqIGR4LCBpbnRlZ2VyKiBpbmN4LCBkb3VibGUqIGJldGEsCiAgICAgICAgICAg
ICAgICAgICAgZG91YmxlKiBkeSwgaW50ZWdlciogaW5jeSk7CgogICAgIHZvaWQgIGRzYm12ICAo
Y2hhciogdXBsbywgaW50ZWdlciogTiwgaW50ZWdlciogaywgZG91YmxlKiBhbHBoYSwgCiAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZG91YmxlKiBBLCBpbnRlZ2VyKiBsZGEsIGNvbnN0IGRvdWJs
ZSogZHgsIAogICAgICAgICAgICAgICAgICAgIGludGVnZXIqIGluY3gsIGRvdWJsZSogYmV0YSwg
ZG91YmxlKiBkeSwgaW50ZWdlciogaW5jeSk7CgogICAgIHZvaWQgIGRzcG12ICAoY2hhciogdXBs
bywgaW50ZWdlciogTiwgZG91YmxlKiBhbHBoYSwgZG91YmxlKiBBUCwgCiAgICAgICAgICAgICAg
ICAgICAgZG91YmxlKiBkeCwgaW50ZWdlciogaW5jeCwgZG91YmxlKiBiZXRhLCBkb3VibGUqIGR5
LCAKICAgICAgICAgICAgICAgICAgICBpbnRlZ2VyKiBpbmN5KTsKCiAgICAgdm9pZCAgZHRybXYg
IChjaGFyKiB1cGxvLCBjaGFyKiB0cmFucywgY2hhciogZGlhZywgY29uc3QgaW50ZWdlciogTiwg
CiAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlKiBBLCBpbnRlZ2VyKiBsZGEsIGNvbnN0
IGRvdWJsZSogZHgsIAogICAgICAgICAgICAgICAgICAgIGludGVnZXIqIGluY3gpOwoKICAgICAg
CiAgICAgIAoKICAgICB2b2lkICBkdHJzdiAgKGNoYXIqIHVwbG8sIGNoYXIqIHRyYW5zLCBjaGFy
KiBkaWFnLCBjb25zdCBpbnRlZ2VyKiBOLCAKICAgICAgICAgICAgICAgICAgICBkb3VibGUqIEEs
IGludGVnZXIqIGxkYSwgZG91YmxlKiBkeCwgaW50ZWdlciogaW5jeCk7CgogICAgICAKICAgICAg
CgogICAgICAKICAgICAgCgogICAgIHZvaWQgIGRnZXIgIChpbnRlZ2VyKiBNLCBpbnRlZ2VyKiBO
LCBkb3VibGUqIGFscGhhLCAKICAgICAgICAgICAgICAgICAgICAgZG91YmxlKiBkeCwgaW50ZWdl
ciogaW5jeCwgZG91YmxlKiBkeSwgaW50ZWdlciogaW5jeSwgCiAgICAgICAgICAgICAgICAgICAg
IGRvdWJsZSogQSwgaW50ZWdlciogbGRhKTsKCiAgICAgdm9pZCAgZHN5ciAgKGNoYXIqIHVwbG8s
IGludGVnZXIqIE4sIGRvdWJsZSogYWxwaGEsIGRvdWJsZSogZHgsIAogICAgICAgICAgICAgICAg
ICAgaW50ZWdlciogaW5jeCwgZG91YmxlKiBBLCBpbnRlZ2VyKiBsZGEpOwoKICAgICB2b2lkICBk
c3ByICAoY2hhciogdXBsbywgaW50ZWdlciogTiwgZG91YmxlKiBhbHBoYSwgZG91YmxlKiBkeCwg
CiAgICAgICAgICAgICAgICAgICBpbnRlZ2VyKiBpbmN4LCBkb3VibGUqIEFQKTsKCiAgICAgdm9p
ZCAgZHN5cjIgIChjaGFyKiB1cGxvLCBpbnRlZ2VyKiBOLCBkb3VibGUqIGFscGhhLCBkb3VibGUq
IGR4LCAKICAgICAgICAgICAgICAgICAgICBpbnRlZ2VyKiBpbmN4LCBkb3VibGUqIGR5LCBpbnRl
Z2VyKiBpbmN5LCBkb3VibGUqIEEsIAogICAgICAgICAgICAgICAgICAgIGludGVnZXIqIGxkYSk7
CgogICAgIHZvaWQgIGRzcHIyICAoY2hhciogdXBsbywgaW50ZWdlciogTiwgZG91YmxlKiBhbHBo
YSwgZG91YmxlKiBkeCwgCiAgICAgICAgICAgICAgICAgICAgaW50ZWdlciogaW5jeCwgZG91Ymxl
KiBkeSwgaW50ZWdlciogaW5jeSwgZG91YmxlKiBBUCk7Cgp9CgoKIAojIDkgIi9ob21lL21ldHNl
bGFhL2luY2x1ZGUvbGFwYWNrcHAvYmxhczIrKy5oIiAyCgoKIyA5MyAiL2hvbWUvbWV0c2VsYWEv
aW5jbHVkZS9sYXBhY2twcC9ibGFzMisrLmgiCgogICAgIAoKCiAgICAgCiMgMTEgIi9ob21lL21l
dHNlbGFhL2luY2x1ZGUvbGFwYWNrcHAvYmxhcysrLmgiIDIKCiMgMSAiL2hvbWUvbWV0c2VsYWEv
aW5jbHVkZS9sYXBhY2twcC9ibGFzMysrLmgiIDEKIAogCgoKCgoKIyAxICIvaG9tZS9tZXRzZWxh
YS9pbmNsdWRlL2xhcGFja3BwL2JsYXMzLmgiIDEKIAogCgoKCgojIDEgIi9ob21lL21ldHNlbGFh
L2luY2x1ZGUvbGFwYWNrcHAvZjJjLmgiIDEKCgogCgoKCgoKCgoKCgoKCgoKCgogCgojIDIyNiAi
L2hvbWUvbWV0c2VsYWEvaW5jbHVkZS9sYXBhY2twcC9mMmMuaCIKCgoKIAoKCgpleHRlcm4gIkMi
IHsKZXh0ZXJuIGludCBhYm9ydF8odm9pZCk7CmV4dGVybiBkb3VibGUgY19hYnMoZjJjX2NvbXBs
ZXggKik7CmV4dGVybiB2b2lkIGNfY29zKGYyY19jb21wbGV4ICosIGYyY19jb21wbGV4ICopOwpl
eHRlcm4gdm9pZCBjX2RpdihmMmNfY29tcGxleCAqLCBmMmNfY29tcGxleCAqLCBmMmNfY29tcGxl
eCAqKTsKZXh0ZXJuIHZvaWQgY19leHAoZjJjX2NvbXBsZXggKiwgZjJjX2NvbXBsZXggKik7CmV4
dGVybiB2b2lkIGNfbG9nKGYyY19jb21wbGV4ICosIGYyY19jb21wbGV4ICopOwpleHRlcm4gdm9p
ZCBjX3NpbihmMmNfY29tcGxleCAqLCBmMmNfY29tcGxleCAqKTsKZXh0ZXJuIHZvaWQgY19zcXJ0
KGYyY19jb21wbGV4ICosIGYyY19jb21wbGV4ICopOwpleHRlcm4gZG91YmxlIGRfYWJzKGRvdWJs
ZSAqKTsKZXh0ZXJuIGRvdWJsZSBkX2Fjb3MoZG91YmxlICopOwpleHRlcm4gZG91YmxlIGRfYXNp
bihkb3VibGUgKik7CmV4dGVybiBkb3VibGUgZF9hdGFuKGRvdWJsZSAqKTsKZXh0ZXJuIGRvdWJs
ZSBkX2F0bjIoZG91YmxlICosIGRvdWJsZSAqKTsKZXh0ZXJuIHZvaWQgZF9jbmpnKGRvdWJsZWNv
bXBsZXggKiwgZG91YmxlY29tcGxleCAqKTsKZXh0ZXJuIGRvdWJsZSBkX2Nvcyhkb3VibGUgKik7
CmV4dGVybiBkb3VibGUgZF9jb3NoKGRvdWJsZSAqKTsKZXh0ZXJuIGRvdWJsZSBkX2RpbShkb3Vi
bGUgKiwgZG91YmxlICopOwpleHRlcm4gZG91YmxlIGRfZXhwKGRvdWJsZSAqKTsKZXh0ZXJuIGRv
dWJsZSBkX2ltYWcoZG91YmxlY29tcGxleCAqKTsKZXh0ZXJuIGRvdWJsZSBkX2ludChkb3VibGUg
Kik7CmV4dGVybiBkb3VibGUgZF9sZzEwKGRvdWJsZSAqKTsKZXh0ZXJuIGRvdWJsZSBkX2xvZyhk
b3VibGUgKik7CmV4dGVybiBkb3VibGUgZF9tb2QoZG91YmxlICosIGRvdWJsZSAqKTsKZXh0ZXJu
IGRvdWJsZSBkX25pbnQoZG91YmxlICopOwpleHRlcm4gZG91YmxlIGRfcHJvZChmbG9hdCAqLCBm
bG9hdCAqKTsKZXh0ZXJuIGRvdWJsZSBkX3NpZ24oZG91YmxlICosIGRvdWJsZSAqKTsKZXh0ZXJu
IGRvdWJsZSBkX3Npbihkb3VibGUgKik7CmV4dGVybiBkb3VibGUgZF9zaW5oKGRvdWJsZSAqKTsK
ZXh0ZXJuIGRvdWJsZSBkX3NxcnQoZG91YmxlICopOwpleHRlcm4gZG91YmxlIGRfdGFuKGRvdWJs
ZSAqKTsKZXh0ZXJuIGRvdWJsZSBkX3RhbmgoZG91YmxlICopOwpleHRlcm4gZG91YmxlIGRlcmZf
KGRvdWJsZSAqKTsKZXh0ZXJuIGRvdWJsZSBkZXJmY18oZG91YmxlICopOwpleHRlcm4gaW50ZWdl
ciBkb19maW8oZnRuaW50ICosIGNoYXIgKiwgZnRubGVuKTsKZXh0ZXJuIGludGVnZXIgZG9fbGlv
KGZ0bmludCAqLCBmdG5pbnQgKiwgY2hhciAqLCBmdG5sZW4pOwpleHRlcm4gaW50ZWdlciBkb191
aW8oZnRuaW50ICosIGNoYXIgKiwgZnRubGVuKTsKZXh0ZXJuIGludGVnZXIgZV9yZGZlKHZvaWQp
OwpleHRlcm4gaW50ZWdlciBlX3JkdWUodm9pZCk7CmV4dGVybiBpbnRlZ2VyIGVfcnNmZSh2b2lk
KTsKZXh0ZXJuIGludGVnZXIgZV9yc2ZpKHZvaWQpOwpleHRlcm4gaW50ZWdlciBlX3JzbGUodm9p
ZCk7CmV4dGVybiBpbnRlZ2VyIGVfcnNsaSh2b2lkKTsKZXh0ZXJuIGludGVnZXIgZV9yc3VlKHZv
aWQpOwpleHRlcm4gaW50ZWdlciBlX3dkZmUodm9pZCk7CmV4dGVybiBpbnRlZ2VyIGVfd2R1ZSh2
b2lkKTsKZXh0ZXJuIGludGVnZXIgZV93c2ZlKHZvaWQpOwpleHRlcm4gaW50ZWdlciBlX3dzZmko
dm9pZCk7CmV4dGVybiBpbnRlZ2VyIGVfd3NsZSh2b2lkKTsKZXh0ZXJuIGludGVnZXIgZV93c2xp
KHZvaWQpOwpleHRlcm4gaW50ZWdlciBlX3dzdWUodm9pZCk7CmV4dGVybiBpbnQgZWYxYXNjXyhm
dG5pbnQgKiwgZnRubGVuICosIGZ0bmludCAqLCBmdG5sZW4gKik7CmV4dGVybiBpbnRlZ2VyIGVm
MWNtY18oZnRuaW50ICosIGZ0bmxlbiAqLCBmdG5pbnQgKiwgZnRubGVuICopOwpleHRlcm4gZG91
YmxlIGVyZihkb3VibGUpOwpleHRlcm4gZG91YmxlIGVyZl8oZmxvYXQgKik7CmV4dGVybiBkb3Vi
bGUgZXJmYyhkb3VibGUpOwpleHRlcm4gZG91YmxlIGVyZmNfKGZsb2F0ICopOwpleHRlcm4gaW50
ZWdlciBmX2JhY2soYWxpc3QgKik7CmV4dGVybiBpbnRlZ2VyIGZfY2xvcyhjbGxpc3QgKik7CmV4
dGVybiBpbnRlZ2VyIGZfZW5kKGFsaXN0ICopOwpleHRlcm4gdm9pZCBmX2V4aXQodm9pZCk7CmV4
dGVybiBpbnRlZ2VyIGZfaW5xdShpbmxpc3QgKik7CmV4dGVybiBpbnRlZ2VyIGZfb3BlbihvbGlz
dCAqKTsKZXh0ZXJuIGludGVnZXIgZl9yZXcoYWxpc3QgKik7CmV4dGVybiBpbnQgZmx1c2hfKHZv
aWQpOwpleHRlcm4gdm9pZCBnZXRhcmdfKGludGVnZXIgKiwgY2hhciAqLCBmdG5sZW4pOwpleHRl
cm4gdm9pZCBnZXRlbnZfKGNoYXIgKiwgY2hhciAqLCBmdG5sZW4sIGZ0bmxlbik7CmV4dGVybiBz
aG9ydCBoX2FicyhzaG9ydCAqKTsKZXh0ZXJuIHNob3J0IGhfZGltKHNob3J0ICosIHNob3J0ICop
OwpleHRlcm4gc2hvcnQgaF9kbm50KGRvdWJsZSAqKTsKZXh0ZXJuIHNob3J0IGhfaW5keChjaGFy
ICosIGNoYXIgKiwgZnRubGVuLCBmdG5sZW4pOwpleHRlcm4gc2hvcnQgaF9sZW4oY2hhciAqLCBm
dG5sZW4pOwpleHRlcm4gc2hvcnQgaF9tb2Qoc2hvcnQgKiwgc2hvcnQgKik7CmV4dGVybiBzaG9y
dCBoX25pbnQoZmxvYXQgKik7CmV4dGVybiBzaG9ydCBoX3NpZ24oc2hvcnQgKiwgc2hvcnQgKik7
CmV4dGVybiBzaG9ydCBobF9nZShjaGFyICosIGNoYXIgKiwgZnRubGVuLCBmdG5sZW4pOwpleHRl
cm4gc2hvcnQgaGxfZ3QoY2hhciAqLCBjaGFyICosIGZ0bmxlbiwgZnRubGVuKTsKZXh0ZXJuIHNo
b3J0IGhsX2xlKGNoYXIgKiwgY2hhciAqLCBmdG5sZW4sIGZ0bmxlbik7CmV4dGVybiBzaG9ydCBo
bF9sdChjaGFyICosIGNoYXIgKiwgZnRubGVuLCBmdG5sZW4pOwpleHRlcm4gaW50ZWdlciBpX2Fi
cyhpbnRlZ2VyICopOwpleHRlcm4gaW50ZWdlciBpX2RpbShpbnRlZ2VyICosIGludGVnZXIgKik7
CmV4dGVybiBpbnRlZ2VyIGlfZG5udChkb3VibGUgKik7CmV4dGVybiBpbnRlZ2VyIGlfaW5keChj
aGFyICosIGNoYXIgKiwgZnRubGVuLCBmdG5sZW4pOwpleHRlcm4gaW50ZWdlciBpX2xlbihjaGFy
ICosIGZ0bmxlbik7CmV4dGVybiBpbnRlZ2VyIGlfbW9kKGludGVnZXIgKiwgaW50ZWdlciAqKTsK
ZXh0ZXJuIGludGVnZXIgaV9uaW50KGZsb2F0ICopOwpleHRlcm4gaW50ZWdlciBpX3NpZ24oaW50
ZWdlciAqLCBpbnRlZ2VyICopOwpleHRlcm4gaW50ZWdlciBpYXJnY18odm9pZCk7CmV4dGVybiBm
dG5sZW4gbF9nZShjaGFyICosIGNoYXIgKiwgZnRubGVuLCBmdG5sZW4pOwpleHRlcm4gZnRubGVu
IGxfZ3QoY2hhciAqLCBjaGFyICosIGZ0bmxlbiwgZnRubGVuKTsKZXh0ZXJuIGZ0bmxlbiBsX2xl
KGNoYXIgKiwgY2hhciAqLCBmdG5sZW4sIGZ0bmxlbik7CmV4dGVybiBmdG5sZW4gbF9sdChjaGFy
ICosIGNoYXIgKiwgZnRubGVuLCBmdG5sZW4pOwpleHRlcm4gdm9pZCBwb3dfY2koZjJjX2NvbXBs
ZXggKiwgZjJjX2NvbXBsZXggKiwgaW50ZWdlciAqKTsKZXh0ZXJuIGRvdWJsZSBwb3dfZGQoZG91
YmxlICosIGRvdWJsZSAqKTsKZXh0ZXJuIGRvdWJsZSBwb3dfZGkoZG91YmxlICosIGludGVnZXIg
Kik7CmV4dGVybiBzaG9ydCBwb3dfaGgoc2hvcnQgKiwgc2hvcnRpbnQgKik7CmV4dGVybiBpbnRl
Z2VyIHBvd19paShpbnRlZ2VyICosIGludGVnZXIgKik7CiAKZXh0ZXJuIHZvaWQgcG93X3ppKGRv
dWJsZWNvbXBsZXggKiwgZG91YmxlY29tcGxleCAqLCBpbnRlZ2VyICopOwpleHRlcm4gdm9pZCBw
b3dfenooZG91YmxlY29tcGxleCAqLCBkb3VibGVjb21wbGV4ICosIGRvdWJsZWNvbXBsZXggKik7
CmV4dGVybiBkb3VibGUgcl9hYnMoZmxvYXQgKik7CmV4dGVybiBkb3VibGUgcl9hY29zKGZsb2F0
ICopOwpleHRlcm4gZG91YmxlIHJfYXNpbihmbG9hdCAqKTsKZXh0ZXJuIGRvdWJsZSByX2F0YW4o
ZmxvYXQgKik7CmV4dGVybiBkb3VibGUgcl9hdG4yKGZsb2F0ICosIGZsb2F0ICopOwpleHRlcm4g
dm9pZCByX2NuamcoZjJjX2NvbXBsZXggKiwgZjJjX2NvbXBsZXggKik7CmV4dGVybiBkb3VibGUg
cl9jb3MoZmxvYXQgKik7CmV4dGVybiBkb3VibGUgcl9jb3NoKGZsb2F0ICopOwpleHRlcm4gZG91
YmxlIHJfZGltKGZsb2F0ICosIGZsb2F0ICopOwpleHRlcm4gZG91YmxlIHJfZXhwKGZsb2F0ICop
OwpleHRlcm4gZG91YmxlIHJfaW1hZyhmMmNfY29tcGxleCAqKTsKZXh0ZXJuIGRvdWJsZSByX2lu
dChmbG9hdCAqKTsKZXh0ZXJuIGRvdWJsZSByX2xnMTAoZmxvYXQgKik7CmV4dGVybiBkb3VibGUg
cl9sb2coZmxvYXQgKik7CmV4dGVybiBkb3VibGUgcl9tb2QoZmxvYXQgKiwgZmxvYXQgKik7CmV4
dGVybiBkb3VibGUgcl9uaW50KGZsb2F0ICopOwpleHRlcm4gZG91YmxlIHJfc2lnbihmbG9hdCAq
LCBmbG9hdCAqKTsKZXh0ZXJuIGRvdWJsZSByX3NpbihmbG9hdCAqKTsKZXh0ZXJuIGRvdWJsZSBy
X3NpbmgoZmxvYXQgKik7CmV4dGVybiBkb3VibGUgcl9zcXJ0KGZsb2F0ICopOwpleHRlcm4gZG91
YmxlIHJfdGFuKGZsb2F0ICopOwpleHRlcm4gZG91YmxlIHJfdGFuaChmbG9hdCAqKTsKZXh0ZXJu
IHZvaWQgc19jYXQoY2hhciAqLCBjaGFyICoqLCBpbnRlZ2VyICosIGludGVnZXIgKiwgZnRubGVu
KTsKZXh0ZXJuIGludGVnZXIgc19jbXAoY2hhciAqLCBjaGFyICosIGZ0bmxlbiwgZnRubGVuKTsK
ZXh0ZXJuIHZvaWQgc19jb3B5KGNoYXIgKiwgY2hhciAqLCBmdG5sZW4sIGZ0bmxlbik7CmV4dGVy
biBpbnQgc19wYXVzKGNoYXIgKiwgZnRubGVuKTsKZXh0ZXJuIGludGVnZXIgc19yZGZlKGNpbGlz
dCAqKTsKZXh0ZXJuIGludGVnZXIgc19yZHVlKGNpbGlzdCAqKTsKZXh0ZXJuIGludGVnZXIgc19y
bmdlKGNoYXIgKiwgaW50ZWdlciwgY2hhciAqLCBpbnRlZ2VyKTsKZXh0ZXJuIGludGVnZXIgc19y
c2ZlKGNpbGlzdCAqKTsKZXh0ZXJuIGludGVnZXIgc19yc2ZpKGljaWxpc3QgKik7CmV4dGVybiBp
bnRlZ2VyIHNfcnNsZShjaWxpc3QgKik7CmV4dGVybiBpbnRlZ2VyIHNfcnNsaShpY2lsaXN0ICop
OwpleHRlcm4gaW50ZWdlciBzX3JzbmUoY2lsaXN0ICopOwpleHRlcm4gaW50ZWdlciBzX3Jzbmko
aWNpbGlzdCAqKTsKZXh0ZXJuIGludGVnZXIgc19yc3VlKGNpbGlzdCAqKTsKZXh0ZXJuIGludCBz
X3N0b3AoY2hhciAqLCBmdG5sZW4pOwpleHRlcm4gaW50ZWdlciBzX3dkZmUoY2lsaXN0ICopOwpl
eHRlcm4gaW50ZWdlciBzX3dkdWUoY2lsaXN0ICopOwpleHRlcm4gaW50ZWdlciBzX3dzZmUoY2ls
aXN0ICopOwpleHRlcm4gaW50ZWdlciBzX3dzZmkoaWNpbGlzdCAqKTsKZXh0ZXJuIGludGVnZXIg
c193c2xlKGNpbGlzdCAqKTsKZXh0ZXJuIGludGVnZXIgc193c2xpKGljaWxpc3QgKik7CmV4dGVy
biBpbnRlZ2VyIHNfd3NuZShjaWxpc3QgKik7CmV4dGVybiBpbnRlZ2VyIHNfd3NuaShpY2lsaXN0
ICopOwpleHRlcm4gaW50ZWdlciBzX3dzdWUoY2lsaXN0ICopOwpleHRlcm4gdm9pZCBzaWdfZGll
KGNoYXIgKiwgaW50KTsKZXh0ZXJuIGludGVnZXIgc2lnbmFsXyhpbnRlZ2VyICosIHZvaWQgKCop
KGludCkpOwpleHRlcm4gaW50IHN5c3RlbV8oY2hhciAqLCBmdG5sZW4pOwpleHRlcm4gZG91Ymxl
IHpfYWJzKGRvdWJsZWNvbXBsZXggKik7CmV4dGVybiB2b2lkIHpfY29zKGRvdWJsZWNvbXBsZXgg
KiwgZG91YmxlY29tcGxleCAqKTsKZXh0ZXJuIHZvaWQgel9kaXYoZG91YmxlY29tcGxleCAqLCBk
b3VibGVjb21wbGV4ICosIGRvdWJsZWNvbXBsZXggKik7CmV4dGVybiB2b2lkIHpfZXhwKGRvdWJs
ZWNvbXBsZXggKiwgZG91YmxlY29tcGxleCAqKTsKZXh0ZXJuIHZvaWQgel9sb2coZG91YmxlY29t
cGxleCAqLCBkb3VibGVjb21wbGV4ICopOwpleHRlcm4gdm9pZCB6X3Npbihkb3VibGVjb21wbGV4
ICosIGRvdWJsZWNvbXBsZXggKik7CmV4dGVybiB2b2lkIHpfc3FydChkb3VibGVjb21wbGV4ICos
IGRvdWJsZWNvbXBsZXggKik7CiAgICB9CgojIDcgIi9ob21lL21ldHNlbGFhL2luY2x1ZGUvbGFw
YWNrcHAvYmxhczMuaCIgMgoKCmV4dGVybiAiQyIKewogICAgdm9pZCAgZGdlbW0gIChjaGFyICp0
cmFuc2EsIGNoYXIgKnRyYW5zYiwgaW50ZWdlciAqbSwgaW50ZWdlciAqbiwgaW50ZWdlciAqaywK
ICAgICAgICBkb3VibGUgKmFscGhhLCBjb25zdCBkb3VibGUgKmEsIGludGVnZXIgKmxkYSwgY29u
c3QgZG91YmxlICpiLCAKICAgICAgICBpbnRlZ2VyICpsZGIsIGRvdWJsZSAqYmV0YSwgZG91Ymxl
ICpjLCBpbnRlZ2VyICpsZGMpOwogICAgCiAgICB2b2lkICBkdHJzbSAgKGNoYXIgKnNpZGUsIGNo
YXIgKnVwbG8sIGNoYXIgKnRyYW5zYSwgY2hhciAqZGlhZywKICAgICAgICBpbnRlZ2VyICptLCBp
bnRlZ2VyICpuLCBkb3VibGUgKmFscGhhLCBjb25zdCBkb3VibGUgKkEsIGludGVnZXIgKmxkYSwK
ICAgICAgICBjb25zdCBkb3VibGUgKkIsIGludGVnZXIgKmxkYik7CgogICAgdm9pZCAgZHRybW0g
IChjaGFyICpzaWRlLCBjaGFyICp1cGxvLCBjaGFyICp0cmFuc2EsIGNoYXIgKmRpYWcsCiAgICAg
ICAgaW50ZWdlciAqbSwgaW50ZWdlciAqbiwgZG91YmxlICphbHBoYSwgY29uc3QgZG91YmxlICpB
LCBpbnRlZ2VyICpsZGEsCiAgICAgICAgY29uc3QgZG91YmxlICpCLCBpbnRlZ2VyICpsZGIpOwoK
ICAgIHZvaWQgIGRzeW1tICAoY2hhciAqc2lkZSwgY2hhciAqdXBsbywgaW50ZWdlciAqbSwgaW50
ZWdlciAqbiwgCiAgICAgICAgZG91YmxlICphbHBoYSwgY29uc3QgZG91YmxlICpBLCBpbnRlZ2Vy
ICpsZGEsIGNvbnN0IGRvdWJsZSAqQiwgCiAgICAgICAgaW50ZWdlciAqbGRiLCBkb3VibGUgKmJl
dGEsIGRvdWJsZSAqQywgaW50ZWdlciAqbGRjKTsKCiAgICB2b2lkICBkc3lyayAgKGNoYXIgKnVw
bG8sIGNoYXIgKnRyYW5zYSwgaW50ZWdlciAqbiwgaW50ZWdlciAqaywgCiAgICAgICAgZG91Ymxl
ICphbHBoYSwgZG91YmxlICpBLCBpbnRlZ2VyICpsZGEsIGRvdWJsZSAqYmV0YSwgZG91YmxlICpD
LCAKICAgICAgICBpbnRlZ2VyICpsZGMpOwoKICAgIHZvaWQgIGRzeXIyayAgKGNoYXIgKnVwbG8s
IGNoYXIgKnRyYW5zYSwgaW50ZWdlciAqbiwgaW50ZWdlciAqaywgCiAgICAgICAgZG91YmxlICph
bHBoYSwgZG91YmxlICpBLCBpbnRlZ2VyICpsZGEsIGRvdWJsZSAqQiwgaW50ZWdlciAqbGRiLAog
ICAgICAgIGRvdWJsZSAqYmV0YSwgZG91YmxlICpDLCBpbnRlZ2VyICpsZGMpOwp9CgojIDggIi9o
b21lL21ldHNlbGFhL2luY2x1ZGUvbGFwYWNrcHAvYmxhczMrKy5oIiAyCgoKCiMgMTAwICIvaG9t
ZS9tZXRzZWxhYS9pbmNsdWRlL2xhcGFja3BwL2JsYXMzKysuaCIKCiAgICAgCgoKCiAgICAgCiAg
ICAgICAgICAgIAojIDEyICIvaG9tZS9tZXRzZWxhYS9pbmNsdWRlL2xhcGFja3BwL2JsYXMrKy5o
IiAyCgoKZG91YmxlIGFicyhkb3VibGUpOwoKIAogCiAKCiMgNjA4ICIvaG9tZS9tZXRzZWxhYS9p
bmNsdWRlL2xhcGFja3BwL2JsYXMrKy5oIgoKICAgICAKCiAgICAgCiMgNiAiZm9yY2VfaWNlLmNw
cCIgMgoKIyAxICIvaG9tZS9tZXRzZWxhYS9pbmNsdWRlL2xhcGFja3BwL2xhZm5hbWVzLmgiIDEK
IAogCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDc4
ICIvaG9tZS9tZXRzZWxhYS9pbmNsdWRlL2xhcGFja3BwL2xhZm5hbWVzLmgiCgoKIyA3ICJmb3Jj
ZV9pY2UuY3BwIiAyCgojIDEgIi9ob21lL21ldHNlbGFhL2luY2x1ZGUvbGFwYWNrcHAvbGF2aS5o
IiAxCiAKIAoKCgoKCgoKCiMgMSAiL2hvbWUvbWV0c2VsYWEvaW5jbHVkZS9sYXBhY2twcC9nbWku
aCIgMQogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgoKCgoKIyAxICIvaG9tZS9tZXRzZWxhYS9p
bmNsdWRlL2xhcGFja3BwL3ZpLmgiIDEKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog
CgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoK
CgogCgoKCiMgMzIgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwoKCgoKCiAKCgoKCiMgNTYgIi91
c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwoKCmV4dGVybiAiQyIgeyAKCiAKZXh0ZXJuIHZvaWQgX19h
c3NlcnRfZmFpbCAgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sCgkJCQlfX2NvbnN0IGNoYXIg
Kl9fZmlsZSwKCQkJCXVuc2lnbmVkIGludCBfX2xpbmUsCgkJCQlfX2NvbnN0IGNoYXIgKl9fZnVu
Y3Rpb24pICB0aHJvd18gICgpICAKICAgICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7
CgogCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsICAoaW50IF9fZXJybnVtLAoJCQkJ
ICAgICAgIF9fY29uc3QgY2hhciAqX19maWxlLAoJCQkJICAgICAgIHVuc2lnbmVkIGludCBfX2xp
bmUsCgkJCQkgICAgICAgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKSAgdGhyb3dfICAoKSAgCiAg
ICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKfSAKCgoKCgoKCgoKCgoKCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKIyAyNSAiL2hvbWUvbWV0c2VsYWEvaW5jbHVkZS9sYXBhY2twcC92
aS5oIiAyCgoKCgoKCgoKCnR5cGVkZWYgIHN0cnVjdCB7CiAgICBpbnQgICAgICAgIHN6OyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIGludCogICAgZGF0YTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIGludCAgICAgICAgcmVmX2Nv
dW50Owp9IHZyZWZJbnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIAoKCmNsYXNzIFZlY3Rvcklu
dAp7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAogICAgcHJpdmF0ZTogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgIHZyZWZJbnQgKnA7CiAg
ICAgICAgICAgaW50ICpkYXRhOyAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgcHVibGljOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAogICAgIAogICAgVmVjdG9ySW50KGludCk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKICAgIFZlY3RvckludChpbnQsIGludCk7ICAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICBWZWN0b3JJbnQoaW50KiwgaW50KTsKICAg
IFZlY3RvckludChjb25zdCBWZWN0b3JJbnQmKTsgCiAgICB+VmVjdG9ySW50KCkgOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgaW5s
aW5lIGludCYgICAgIG9wZXJhdG9yW10oaW50KTsgCiAgICBpbmxpbmUgaW50JiAgICAgb3BlcmF0
b3JbXShpbnQpIGNvbnN0OyAgCiAgICBpbmxpbmUgaW50JiAgICAgb3BlcmF0b3IoKShpbnQpOyAK
ICAgIGlubGluZSBpbnQmICAgICBvcGVyYXRvcigpKGludCkgY29uc3Q7ICAKICAgIGlubGluZSAg
ICAgICAgICAgICAgb3BlcmF0b3IgICAgaW50KigpOyAKICAgIGlubGluZSBpbnQgICAgICAgICAg
c2l6ZSgpIGNvbnN0OwogICAgaW5saW5lIGludCAgICAgICAgICBudWxsKCkgY29uc3Q7CiAgICAg
ICAgICAgaW50ICAgICAgICAgIHJlc2l6ZShpbnQgZCk7CiAgICBpbmxpbmUgaW50ICAgICAgICAg
IHJlZl9jb3VudCgpIGNvbnN0OyAgIAogICAgaW5saW5lIGludCogICAgIGFkZHIoKSBjb25zdDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKICAgIGlubGluZSAgVmVjdG9ySW50JiBvcGVyYXRvcj0o
Y29uc3QgVmVjdG9ySW50Jik7CiAgICAgICAgICAgIFZlY3RvckludCYgb3BlcmF0b3I9KGludCk7
CiAgICBpbmxpbmUgIFZlY3RvckludCYgcmVmKGNvbnN0IFZlY3RvckludCAmKTsKICAgICAgICAg
ICAgVmVjdG9ySW50JiBpbmplY3QoVmVjdG9ySW50Jik7CiAgICAgICAgICAgIFZlY3RvckludCYg
Y29weShjb25zdCBWZWN0b3JJbnQmKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICBmcmllbmQgb3N0cmVhbSYgICBvcGVyYXRv
cjw8KG9zdHJlYW0mLCBjb25zdCBWZWN0b3JJbnQmKTsgICAgICAgCgp9OyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoK
CiAgICAgCgppbmxpbmUgaW50IFZlY3RvckludDo6bnVsbCgpICAgIGNvbnN0CnsKICAgIHJldHVy
biAoc2l6ZSgpID09IDApIDsKfQoKaW5saW5lIGludCBWZWN0b3JJbnQ6OnNpemUoKSBjb25zdAp7
CiAgICByZXR1cm4gICBwLT4gc3o7Cn0KCgppbmxpbmUgaW50IFZlY3RvckludDo6cmVmX2NvdW50
KCkgY29uc3QKewogICAgcmV0dXJuIHAtPnJlZl9jb3VudDsKfQoKaW5saW5lIGludCogVmVjdG9y
SW50OjphZGRyKCkgY29uc3QKewogICAgcmV0dXJuIGRhdGE7Cn0KCmlubGluZSBWZWN0b3JJbnQ6
Om9wZXJhdG9yIGludCooKSAKewogICAgcmV0dXJuIGRhdGE7Cn0KCgppbmxpbmUgaW50JiBWZWN0
b3JJbnQ6Om9wZXJhdG9yKCkoaW50IGkpCnsKCgoKICAgIHJldHVybiBkYXRhW2ldOwp9Cgppbmxp
bmUgaW50JiBWZWN0b3JJbnQ6Om9wZXJhdG9yKCkoaW50IGkpIGNvbnN0CnsKCgoKICAgIHJldHVy
biBkYXRhW2ldOwp9CgogCmlubGluZSBpbnQmIFZlY3RvckludDo6b3BlcmF0b3JbXShpbnQgaSkK
ewoKCgogICAgcmV0dXJuIGRhdGFbaV07Cn0KCiAKaW5saW5lIGludCYgVmVjdG9ySW50OjpvcGVy
YXRvcltdKGludCBpKSBjb25zdAp7CgoKCiAgICByZXR1cm4gZGF0YVtpXTsKfQoKaW5saW5lIFZl
Y3RvckludCYgVmVjdG9ySW50OjpyZWYoY29uc3QgVmVjdG9ySW50JiBtKQp7CiAgICAgCiAgICAg
CiAgICAKICAgICAgICBpZiAoJm0gIT0gdGhpcykgICAgICAgICAgCiAgICAgICAgewogICAgICAg
ICAgICBtLnAtPnJlZl9jb3VudCsrOwogICAgICAgICAgICBpZiAoLS0ocC0+cmVmX2NvdW50KSA9
PSAwKSAgICAgICAgICAgICAgIAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBkZWxldGUg
W10gKCBwLT5kYXRhKTsKICAgICAgICAgICAgICAgIGRlbGV0ZSBwOwogICAgICAgICAgICB9CiAg
ICAgICAgICAgIHAgPSBtLnA7CiAgICAgICAgICAgIGRhdGEgPSBtLmRhdGE7CiAgICAgICAgfQog
ICAgICAgIHJldHVybiAqdGhpczsKfQoKCmlubGluZSBWZWN0b3JJbnQmIFZlY3RvckludDo6b3Bl
cmF0b3I9KGNvbnN0IFZlY3RvckludCYgbSkKewoKICAgIHJldHVybiAgcmVmKG0pOwp9CgoKCgoK
IAoKIyAxOSAiL2hvbWUvbWV0c2VsYWEvaW5jbHVkZS9sYXBhY2twcC9nbWkuaCIgMgoKIyAxICIv
aG9tZS9tZXRzZWxhYS9pbmNsdWRlL2xhcGFja3BwL2xhaW5kZXguaCIgMQogCiAKCgoKCgogCiAK
IAoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCgoKCgpleHRlcm4gIkMiIHsgCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2Ut
bGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9s
aWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoK
IAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45
NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoK
CgoKIAoKIAoKIyAxMzEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9p
bmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYt
c3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCiMgMjcx
ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYu
aCIgMwoKCiMgMjgzICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjIvaW5j
bHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3Vz
ZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgojIDMzICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgoKCgoKCgoKCgoKIAp0eXBl
ZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwoKCgoKCgoKCgoKIAoKdHlwZWRlZiBfX29mZl90ICBm
cG9zX3Q7CgoKCgoKCgogCgoKCgoKIAoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKIAoKCgoKIAoKCgoK
CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwogCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMTEwICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAz
CgoKCiAKZXh0ZXJuIEZJTEUgKnN0ZGluOwkJIApleHRlcm4gRklMRSAqc3Rkb3V0OwkJIApleHRl
cm4gRklMRSAqc3RkZXJyOwkJIAogCgoKCgoKIApleHRlcm4gaW50IHJlbW92ZSAgKF9fY29uc3Qg
Y2hhciAqX19maWxlbmFtZSkgIHRocm93XyAgKCkgIDsKIApleHRlcm4gaW50IHJlbmFtZSAgKF9f
Y29uc3QgY2hhciAqX19vbGQsIF9fY29uc3QgY2hhciAqX19uZXcpICB0aHJvd18gICgpICA7CgoK
IAoKZXh0ZXJuIEZJTEUgKnRtcGZpbGUgICh2b2lkKSAgdGhyb3dfICAoKSAgOwoKCgoKCgoKCgoK
IApleHRlcm4gY2hhciAqdG1wbmFtICAoY2hhciAqX19zKSAgdGhyb3dfICAoKSAgOwoKCiAKCmV4
dGVybiBjaGFyICp0bXBuYW1fciAgKGNoYXIgKl9fcykgIHRocm93XyAgKCkgIDsKCgoKCiAKCgoK
CgoKZXh0ZXJuIGNoYXIgKnRlbXBuYW0gIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0IGNo
YXIgKl9fcGZ4KSAgdGhyb3dfICAoKSAgOwoKCgogCmV4dGVybiBpbnQgZmNsb3NlICAoRklMRSAq
X19zdHJlYW0pICB0aHJvd18gICgpICA7CiAKZXh0ZXJuIGludCBmZmx1c2ggIChGSUxFICpfX3N0
cmVhbSkgIHRocm93XyAgKCkgIDsKCgogCmV4dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkICAoRklM
RSAqX19zdHJlYW0pICB0aHJvd18gICgpICA7CgoKCgoKCgoKCiAKZXh0ZXJuIEZJTEUgKmZvcGVu
ICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCgkJCSBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19tb2RlcykgIHRocm93XyAgKCkgIDsKIApleHRlcm4gRklMRSAqZnJlb3Bl
biAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAoJCQkgICBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19tb2RlcywKCQkJICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkg
IHRocm93XyAgKCkgIDsKIyAyMDEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCgoKCgoKCgoKCgog
CmV4dGVybiBGSUxFICpmZG9wZW4gIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSAg
dGhyb3dfICAoKSAgOwoKCiMgMjI3ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoKCgogCgpleHRl
cm4gdm9pZCBzZXRidWYgIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3Ry
aWN0IF9fYnVmKSAgdGhyb3dfICAoKSAgOwogCgoKZXh0ZXJuIGludCBzZXR2YnVmICAoRklMRSAq
X19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKCQkJIGludCBfX21v
ZGVzLCBzaXplX3QgX19uKSAgdGhyb3dfICAoKSAgOwoKCiAKCmV4dGVybiB2b2lkIHNldGJ1ZmZl
ciAgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCgkJ
CSAgICBzaXplX3QgX19zaXplKSAgdGhyb3dfICAoKSAgOwoKIApleHRlcm4gdm9pZCBzZXRsaW5l
YnVmICAoRklMRSAqX19zdHJlYW0pICB0aHJvd18gICgpICA7CgoKCiAKZXh0ZXJuIGludCBmcHJp
bnRmICAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKCQkJIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2Zvcm1hdCwgLi4uKSAgdGhyb3dfICAoKSAgOwogCmV4dGVybiBpbnQgcHJpbnRmICAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pICB0aHJvd18gICgpICA7CiAK
ZXh0ZXJuIGludCBzcHJpbnRmICAoY2hhciAqX19yZXN0cmljdCBfX3MsCgkJCSBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgIHRocm93XyAgKCkgIDsKCiAKZXh0ZXJuIGlu
dCB2ZnByaW50ZiAgKEZJTEUgKl9fcmVzdHJpY3QgX19zLAoJCQkgIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2Zvcm1hdCwKCQkJICBfX2dudWNfdmFfbGlzdCAgX19hcmcpICB0aHJvd18gICgp
ICA7CiAKZXh0ZXJuIGludCB2cHJpbnRmICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y
bWF0LAoJCQkgX19nbnVjX3ZhX2xpc3QgIF9fYXJnKSAgdGhyb3dfICAoKSAgOwogCmV4dGVybiBp
bnQgdnNwcmludGYgIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKCQkJICBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19mb3JtYXQsCgkJCSAgX19nbnVjX3ZhX2xpc3QgIF9fYXJnKSAgdGhyb3dfICAo
KSAgOwoKCiAKZXh0ZXJuIGludCBzbnByaW50ZiAgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXpl
X3QgX19tYXhsZW4sCgkJCSAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4p
ICB0aHJvd18gICgpICAKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZf
XywgMywgNCkpKTsKCmV4dGVybiBpbnQgX192c25wcmludGYgIChjaGFyICpfX3Jlc3RyaWN0IF9f
cywgc2l6ZV90IF9fbWF4bGVuLAoJCQkgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv
cm1hdCwKCQkJICAgICBfX2dudWNfdmFfbGlzdCAgX19hcmcpICB0aHJvd18gICgpICAKICAgICBf
X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKZXh0ZXJuIGlu
dCB2c25wcmludGYgIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAoJCQkg
ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCgkJCSAgIF9fZ251Y192YV9saXN0
ICBfX2FyZykgIHRocm93XyAgKCkgIAogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChf
X3ByaW50Zl9fLCAzLCAwKSkpOwoKCiMgMzA2ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoKCgog
CmV4dGVybiBpbnQgZnNjYW5mICAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKCQkJX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pICB0aHJvd18gICgpICA7CiAKZXh0ZXJu
IGludCBzY2FuZiAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSAgdGhy
b3dfICAoKSAgOwogCmV4dGVybiBpbnQgc3NjYW5mICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fcywKCQkJX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pICB0aHJvd18g
ICgpICA7CgojIDMzNCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKIApleHRlcm4gaW50IGZn
ZXRjICAoRklMRSAqX19zdHJlYW0pICB0aHJvd18gICgpICA7CmV4dGVybiBpbnQgZ2V0YyAgKEZJ
TEUgKl9fc3RyZWFtKSAgdGhyb3dfICAoKSAgOwoKIApleHRlcm4gaW50IGdldGNoYXIgICh2b2lk
KSAgdGhyb3dfICAoKSAgOwoKIAoKCgoKIApleHRlcm4gaW50IGdldGNfdW5sb2NrZWQgIChGSUxF
ICpfX3N0cmVhbSkgIHRocm93XyAgKCkgIDsKZXh0ZXJuIGludCBnZXRjaGFyX3VubG9ja2VkICAo
dm9pZCkgIHRocm93XyAgKCkgIDsKCgoKIApleHRlcm4gaW50IGZnZXRjX3VubG9ja2VkICAoRklM
RSAqX19zdHJlYW0pICB0aHJvd18gICgpICA7CgoKCiAKZXh0ZXJuIGludCBmcHV0YyAgKGludCBf
X2MsIEZJTEUgKl9fc3RyZWFtKSAgdGhyb3dfICAoKSAgOwpleHRlcm4gaW50IHB1dGMgIChpbnQg
X19jLCBGSUxFICpfX3N0cmVhbSkgIHRocm93XyAgKCkgIDsKCiAKZXh0ZXJuIGludCBwdXRjaGFy
ICAoaW50IF9fYykgIHRocm93XyAgKCkgIDsKCiAKCgoKCiAKZXh0ZXJuIGludCBmcHV0Y191bmxv
Y2tlZCAgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSAgdGhyb3dfICAoKSAgOwoKCgogCmV4dGVy
biBpbnQgcHV0Y191bmxvY2tlZCAgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSAgdGhyb3dfICAo
KSAgOwpleHRlcm4gaW50IHB1dGNoYXJfdW5sb2NrZWQgIChpbnQgX19jKSAgdGhyb3dfICAoKSAg
OwoKCgoKIApleHRlcm4gaW50IGdldHcgIChGSUxFICpfX3N0cmVhbSkgIHRocm93XyAgKCkgIDsK
CiAKZXh0ZXJuIGludCBwdXR3ICAoaW50IF9fdywgRklMRSAqX19zdHJlYW0pICB0aHJvd18gICgp
ICA7CgoKCiAKZXh0ZXJuIGNoYXIgKmZnZXRzICAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBf
X24sCgkJCSBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSAgdGhyb3dfICAoKSAgOwoKCgoKCgoK
IAoKZXh0ZXJuIGNoYXIgKmdldHMgIChjaGFyICpfX3MpICB0aHJvd18gICgpICA7CgoKIyA0MjQg
Ii91c3IvaW5jbHVkZS9zdGRpby5oIiAzCgoKCiAKZXh0ZXJuIGludCBmcHV0cyAgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX3MsCgkJICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0p
ICB0aHJvd18gICgpICA7CgoKCgoKCgogCmV4dGVybiBpbnQgcHV0cyAgKF9fY29uc3QgY2hhciAq
X19zKSAgdGhyb3dfICAoKSAgOwoKCiAKZXh0ZXJuIGludCB1bmdldGMgIChpbnQgX19jLCBGSUxF
ICpfX3N0cmVhbSkgIHRocm93XyAgKCkgIDsKCgogCmV4dGVybiBzaXplX3QgZnJlYWQgICh2b2lk
ICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAoJCQkgIHNpemVfdCBfX24sIEZJTEUg
Kl9fcmVzdHJpY3QgX19zdHJlYW0pICB0aHJvd18gICgpICA7CiAKZXh0ZXJuIHNpemVfdCBmd3Jp
dGUgIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCgkJCSAg
IHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zKSAgdGhyb3dfICAoKSAgOwoKCiAKZXh0
ZXJuIHNpemVfdCBmcmVhZF91bmxvY2tlZCAgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVf
dCBfX3NpemUsCgkJCQkgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSAg
dGhyb3dfICAoKSAgOwpleHRlcm4gc2l6ZV90IGZ3cml0ZV91bmxvY2tlZCAgKF9fY29uc3Qgdm9p
ZCAqX19yZXN0cmljdCBfX3B0ciwKCQkJCSAgICBzaXplX3QgX19zaXplLCBzaXplX3QgX19uLAoJ
CQkJICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pICB0aHJvd18gICgpICA7CgoKCiAKZXh0
ZXJuIGludCBmc2VlayAgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwgaW50IF9fd2hl
bmNlKSAgdGhyb3dfICAoKSAgOwogCmV4dGVybiBsb25nIGludCBmdGVsbCAgKEZJTEUgKl9fc3Ry
ZWFtKSAgdGhyb3dfICAoKSAgOwogCmV4dGVybiB2b2lkIHJld2luZCAgKEZJTEUgKl9fc3RyZWFt
KSAgdGhyb3dfICAoKSAgOwoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKZXh0ZXJu
IGludCBmZ2V0cG9zICAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKCQkJIGZwb3NfdCAqX19y
ZXN0cmljdCBfX3BvcykgIHRocm93XyAgKCkgIDsKIApleHRlcm4gaW50IGZzZXRwb3MgIChGSUxF
ICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSAgdGhyb3dfICAoKSAgOwojIDUyMyAi
L3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgojIDUzMyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMK
CgogCmV4dGVybiB2b2lkIGNsZWFyZXJyICAoRklMRSAqX19zdHJlYW0pICB0aHJvd18gICgpICA7
CiAKZXh0ZXJuIGludCBmZW9mICAoRklMRSAqX19zdHJlYW0pICB0aHJvd18gICgpICA7CiAKZXh0
ZXJuIGludCBmZXJyb3IgIChGSUxFICpfX3N0cmVhbSkgIHRocm93XyAgKCkgIDsKCgogCmV4dGVy
biB2b2lkIGNsZWFyZXJyX3VubG9ja2VkICAoRklMRSAqX19zdHJlYW0pICB0aHJvd18gICgpICA7
CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAgKEZJTEUgKl9fc3RyZWFtKSAgdGhyb3dfICAoKSAg
OwpleHRlcm4gaW50IGZlcnJvcl91bmxvY2tlZCAgKEZJTEUgKl9fc3RyZWFtKSAgdGhyb3dfICAo
KSAgOwoKCgogCmV4dGVybiB2b2lkIHBlcnJvciAgKF9fY29uc3QgY2hhciAqX19zKSAgdGhyb3df
ICAoKSAgOwoKIAoKCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9f
Y29uc3Qgc3lzX2Vycmxpc3RbXTsKCgoKCgoKCgogCmV4dGVybiBpbnQgZmlsZW5vICAoRklMRSAq
X19zdHJlYW0pICB0aHJvd18gICgpICA7CgoKCiAKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQg
IChGSUxFICpfX3N0cmVhbSkgIHRocm93XyAgKCkgIDsKCgoKCgogCmV4dGVybiBGSUxFICpwb3Bl
biAgKF9fY29uc3QgY2hhciAqX19jb21tYW5kLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpICB0aHJv
d18gICgpICA7CgogCmV4dGVybiBpbnQgcGNsb3NlICAoRklMRSAqX19zdHJlYW0pICB0aHJvd18g
ICgpICA7CgoKCgogCmV4dGVybiBjaGFyICpjdGVybWlkICAoY2hhciAqX19zKSAgdGhyb3dfICAo
KSAgOwoKCgoKCgoKCgojIDYwNyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKCiAKCiAKZXh0
ZXJuIHZvaWQgZmxvY2tmaWxlICAoRklMRSAqX19zdHJlYW0pICB0aHJvd18gICgpICA7CgogCgpl
eHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAgKEZJTEUgKl9fc3RyZWFtKSAgdGhyb3dfICAoKSAgOwoK
IApleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAgKEZJTEUgKl9fc3RyZWFtKSAgdGhyb3dfICAoKSAg
OwoKCgoKCgoKCgoKIAoKCgoKCn0gCgoKCgojIDEzICIvaG9tZS9tZXRzZWxhYS9pbmNsdWRlL2xh
cGFja3BwL2xhaW5kZXguaCIgMgoKCgpjbGFzcyBMYUluZGV4CnsKICAgIHByaXZhdGU6CiAgICAg
ICAgICAgIGludCBzdGFydF87CiAgICAgICAgICAgIGludCBpbmNfOwogICAgICAgICAgICBpbnQg
ZW5kXzsKICAgIHB1YmxpYzoKICAgICAgICBpbmxpbmUgTGFJbmRleCgpIHsgc3RhcnRfID0gaW5j
XyA9IGVuZF8gPSAwO30KICAgICAgICBpbmxpbmUgTGFJbmRleChpbnQgaTEpIHsgc3RhcnRfPWkx
LCBpbmNfPTE7IGVuZF89aTE7fQogICAgICAgIGlubGluZSBMYUluZGV4KGludCBpMSwgaW50IGky
KXsgc3RhcnRfPWkxOyBpbmNfPTE7IGVuZF89aTI7fQogICAgICAgIGlubGluZSBMYUluZGV4KGlu
dCBpMSwgaW50IGkyLCBpbnQgaTMpeyBzdGFydF89aTE7IGluY189aTM7IGVuZF89aTI7fQogICAg
ICAgIGlubGluZSBMYUluZGV4KGNvbnN0IExhSW5kZXggJnMpIHsgc3RhcnRfPXMuc3RhcnRfOyBp
bmNfPXMuaW5jXzsgZW5kXz1zLmVuZF87fQoKIAogCiAKIAoKICAgICAgICBpbmxpbmUgaW50JiBz
dGFydCgpIHsgcmV0dXJuIHN0YXJ0Xzt9CiAgICAgICAgaW5saW5lIGNvbnN0IGludCYgc3RhcnQo
KSBjb25zdCB7IHJldHVybiBzdGFydF87fQogICAgICAgIGlubGluZSBpbnQmIGluYygpIHsgcmV0
dXJuIGluY187fQogICAgICAgIGlubGluZSBjb25zdCBpbnQmIGluYygpIGNvbnN0IHsgcmV0dXJu
IGluY187fQogICAgICAgIGlubGluZSBpbnQmIGVuZCgpIHsgcmV0dXJuIGVuZF87fQogICAgICAg
IGlubGluZSBjb25zdCBpbnQmIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGVuZF87fQogICAgICAgIGlu
bGluZSBpbnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gKChlbmQoKS1zdGFydCgpKS9pbmMoKSAr
IDEpO30KICAgICAgICBpbmxpbmUgY29uc3QgaW50IG51bGwoKSBjb25zdHsgcmV0dXJuIChzdGFy
dCgpID09IDAgJiYgCiAgICAgICAgICAgIGluYygpID09IDAgICYmIGVuZCgpID09IDApO30KICAg
ICAgICBpbmxpbmUgTGFJbmRleCYgb3BlcmF0b3IoKShpbnQgaTEsIGludCBpMil7CiAgICAgICAg
ICAgIHN0YXJ0Xz1pMTsgaW5jXz0xOyBlbmRfPWkyOyByZXR1cm4gKnRoaXM7fQogCiAgICAgICAg
aW5saW5lIGludCBvcGVyYXRvcigpKGludCBuKXsKICAgICAgICAgICAgcmV0dXJuIHN0YXJ0Xytu
KmluY187fQoKICAgICAgICBpbmxpbmUgTGFJbmRleCYgb3BlcmF0b3IrKGludCBpKXsKICAgICAg
ICAgICAgc3RhcnRfKz1pOyBlbmRfKz1pOyByZXR1cm4gKnRoaXM7fQogICAgICAgIGlubGluZSBM
YUluZGV4JiBvcGVyYXRvcj0oY29uc3QgTGFJbmRleCYgaSl7CiAgICAgICAgICAgIHN0YXJ0Xz1p
LnN0YXJ0XzsgaW5jXz0xOyBlbmRfPWkuZW5kXzsgCiAgICAgICAgICAgIHJldHVybiAqdGhpczt9
Cn07CgppbmxpbmUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiBzLCBjb25zdCBMYUluZGV4
IGkpCnsKICAgIHMgPDwgIigiIDw8IGkuc3RhcnQoKSA8PCAiOiIgPDwgaS5pbmMoKSA8PCAiOiIg
PDwgaS5lbmQoKSA8PCAiKSI7CgogICAgcmV0dXJuIHM7Cn0KCgogCgojIDIwICIvaG9tZS9tZXRz
ZWxhYS9pbmNsdWRlL2xhcGFja3BwL2dtaS5oIiAyCgoKCmNsYXNzIExhR2VuTWF0SW50CnsKICAg
IFZlY3RvckludCAgICAgdjsKICAgIExhSW5kZXggICAgICAgICAgIGlpWzJdOwogICAgaW50ICAg
ICAgICAgICAgIGRpbVsyXTsgICAKICAgIGludCAgICAgICAgICAgICBzelsyXTsgICAgCiAgICBz
dGF0aWMgaW50ICBkZWJ1Z187ICAKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgCgogICAgc3RhdGljIGludCAgICAgICppbmZvXzsgICAgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAKCgogICAgaW50IHNoYWxsb3dfOyAgCiAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICAKCgogICAgIAogICAgIAogICAgIAoKcHVibGljOgoK
CgogICAgICAgICAKCiAgICAgICAgIAoKICAgICAgICAgCgoKICAgICAgICBMYUdlbk1hdEludCgp
OwogICAgICAgIExhR2VuTWF0SW50KGludCwgaW50KTsKICAgICAgICBMYUdlbk1hdEludChpbnQq
LCBpbnQsIGludCk7CiAgICAgICAgTGFHZW5NYXRJbnQoY29uc3QgTGFHZW5NYXRJbnQmKTsKICAg
IHZpcnR1YWwgfkxhR2VuTWF0SW50KCk7CgoKICAgICAgICAgCgogICAgICAgICAKCiAgICAgICAg
IAoKICAgIGlubGluZSBpbnQgc2l6ZShpbnQgZCkgY29uc3Q7ICAgIAogICAgaW5saW5lIGludCBp
bmMoaW50IGQpIGNvbnN0OyAgICAgCiAgICBpbmxpbmUgaW50IGdkaW0oaW50IGQpIGNvbnN0OyAg
ICAKICAgIGlubGluZSBpbnQgc3RhcnQoaW50IGQpIGNvbnN0OyAgIAogICAgaW5saW5lIGludCBl
bmQoaW50IGQpIGNvbnN0OyAgICAgCiAgICBpbmxpbmUgTGFJbmRleCBpbmRleChpbnQgZCkgY29u
c3Q7IAogICAgaW5saW5lIGludCByZWZfY291bnQoKSBjb25zdDsKICAgIGlubGluZSBMYUdlbk1h
dEludCYgc2hhbGxvd19hc3NpZ24oKTsKICAgIGlubGluZSBpbnQqIGFkZHIoKSBjb25zdDsgICAg
ICAgIAogICAgCiAgICBpbmxpbmUgaW50JiBvcGVyYXRvcigpKGludCBpLCBpbnQgaik7CiAgICBp
bmxpbmUgaW50JiBvcGVyYXRvcigpKGludCBpLCBpbnQgaikgY29uc3Q7CiAgICBMYUdlbk1hdElu
dCBvcGVyYXRvcigpKGNvbnN0IExhSW5kZXgmIEksIGNvbnN0IExhSW5kZXgmIEopIDsKICAgIExh
R2VuTWF0SW50IG9wZXJhdG9yKCkoY29uc3QgTGFJbmRleCYgSSwgY29uc3QgTGFJbmRleCYgSikg
Y29uc3Q7CgogICAgICAgICAgICBMYUdlbk1hdEludCYgb3BlcmF0b3I9KGludCBzKTsKICAgIGlu
bGluZSAgTGFHZW5NYXRJbnQmIG9wZXJhdG9yPShjb25zdCBMYUdlbk1hdEludCYgcyk7ICAKCiAg
ICBMYUdlbk1hdEludCYgcmVzaXplKGludCBtLCBpbnQgbik7CiAgICBMYUdlbk1hdEludCYgcmVz
aXplKGNvbnN0IExhR2VuTWF0SW50JiBzKTsKICAgIExhR2VuTWF0SW50JiByZWYoY29uc3QgTGFH
ZW5NYXRJbnQmIHMpOwogICAgTGFHZW5NYXRJbnQmIGluamVjdChjb25zdCBMYUdlbk1hdEludCYg
cyk7CiAgICBMYUdlbk1hdEludCYgY29weShjb25zdCBMYUdlbk1hdEludCYgcyk7CgogICAgaW5s
aW5lIGludCBzaGFsbG93KCkgY29uc3QgICAgICAgCiAgICAgICAgeyByZXR1cm4gc2hhbGxvd187
fQogICAgaW5saW5lIGludCBkZWJ1ZygpIGNvbnN0OyAgICAgICAgCiAgICBpbmxpbmUgaW50IGRl
YnVnKGludCBkKTsgICAgICAgICAKICAgIGlubGluZSBjb25zdCBMYUdlbk1hdEludCYgaW5mbygp
IGNvbnN0IHsgCiAgICAgICAgICAgIGludCAqdCA9IGluZm9fOyAKICAgICAgICAgICAgKnQgPSAx
OyAKICAgICAgICAgICAgcmV0dXJuICp0aGlzO307CgogICAgIAogICAgZnJpZW5kIG9zdHJlYW0m
IG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IExhR2VuTWF0SW50Jik7CiAgICBvc3RyZWFtJiBJ
bmZvKG9zdHJlYW0mIHMpCiAgICB7CiAgICAgICAgcyA8PCAiU2l6ZTogKCIgPDwgc2l6ZSgwKSA8
PCAieCIgPDwgc2l6ZSgxKSA8PCAiKSAiIDsKICAgICAgICBzIDw8ICJJbmRlY2VzOiAiIDw8IGlp
WzBdIDw8ICIgIiA8PCBpaVsxXTsKICAgICAgICBzIDw8ICIjcmVmOiAiIDw8IHJlZl9jb3VudCgp
IDw8ICJhZGRyOiAiIDw8ICh1bnNpZ25lZCkgYWRkcigpIDw8IGVuZGw7CiAgICAgICAgcmV0dXJu
IHM7CiAgICB9OwoKfTsgICAKCgogICAgICAgIAoKICAgICAKCgogCmlubGluZSBpbnQgTGFHZW5N
YXRJbnQ6OnNpemUoaW50IGQpIGNvbnN0CnsKICAgIHJldHVybiBzeltkXTsKfQoKaW5saW5lIGlu
dCBMYUdlbk1hdEludDo6aW5jKGludCBkKSBjb25zdAp7CiAgICByZXR1cm4gaWlbZF0uaW5jKCk7
Cn0KCmlubGluZSBpbnQgTGFHZW5NYXRJbnQ6OmdkaW0oaW50IGQpIGNvbnN0CnsKICAgIHJldHVy
biBkaW1bZF07Cn0KCmlubGluZSBpbnQgTGFHZW5NYXRJbnQ6OnN0YXJ0KGludCBkKSBjb25zdAp7
CiAgICByZXR1cm4gaWlbZF0uc3RhcnQoKTsKfQoKaW5saW5lIGludCBMYUdlbk1hdEludDo6ZW5k
KGludCBkKSBjb25zdAp7CiAgICByZXR1cm4gaWlbZF0uZW5kKCk7Cn0KCmlubGluZSBpbnQgTGFH
ZW5NYXRJbnQ6OnJlZl9jb3VudCgpIGNvbnN0CnsKICAgIHJldHVybiB2LnJlZl9jb3VudCgpOwp9
CgoKaW5saW5lIExhSW5kZXggTGFHZW5NYXRJbnQ6OmluZGV4KGludCBkKSAgY29uc3QKewogICAg
cmV0dXJuIGlpW2RdOwp9CgppbmxpbmUgaW50KiBMYUdlbk1hdEludDo6YWRkcigpIGNvbnN0CnsK
ICAgIHJldHVybiAgdi5hZGRyKCk7Cn0KCmlubGluZSBpbnQgTGFHZW5NYXRJbnQ6OmRlYnVnKCkg
Y29uc3QKewogICAgcmV0dXJuIGRlYnVnXzsKfQoKaW5saW5lIGludCBMYUdlbk1hdEludDo6ZGVi
dWcoaW50IGQpCnsKICAgIHJldHVybiBkZWJ1Z18gPSBkOwp9CgppbmxpbmUgaW50JiBMYUdlbk1h
dEludDo6b3BlcmF0b3IoKShpbnQgaSwgaW50IGopCnsKCgoKCgoKCiAgICByZXR1cm4gdiggZGlt
WzBdKihpaVsxXS5zdGFydCgpICsgaippaVsxXS5pbmMoKSkgKyAKICAgICAgICAgICAgICAgIGlp
WzBdLnN0YXJ0KCkgKyBpKmlpWzBdLmluYygpKTsKfQoKaW5saW5lIGludCYgTGFHZW5NYXRJbnQ6
Om9wZXJhdG9yKCkoaW50IGksIGludCBqKSBjb25zdAp7CgoKCgoKCgoKICAgIHJldHVybiB2KCBk
aW1bMF0qKGlpWzFdLnN0YXJ0KCkgKyBqKmlpWzFdLmluYygpKSArIAogICAgICAgICAgICAgICAg
aWlbMF0uc3RhcnQoKSArIGkqaWlbMF0uaW5jKCkpOwp9CgoKCgppbmxpbmUgTGFHZW5NYXRJbnQm
IExhR2VuTWF0SW50OjpvcGVyYXRvcj0oY29uc3QgTGFHZW5NYXRJbnQmIHMpCnsKCiAgICByZXR1
cm4gY29weShzKTsKfQoKCmlubGluZSAgTGFHZW5NYXRJbnQmICBMYUdlbk1hdEludDo6c2hhbGxv
d19hc3NpZ24oKQp7CiAgICBzaGFsbG93XyA9IDE7CiAgICByZXR1cm4gKnRoaXM7Cn0KCgoKCgoK
IAojIDExICIvaG9tZS9tZXRzZWxhYS9pbmNsdWRlL2xhcGFja3BwL2xhdmkuaCIgMgoKCgoKIAog
CgpjbGFzcyBMYVZlY3RvckludDogcHVibGljIExhR2VuTWF0SW50CnsKcHVibGljOgoKICAgIGlu
bGluZSBMYVZlY3RvckludCgpOwogICAgaW5saW5lIExhVmVjdG9ySW50KGludCk7CiAgICBpbmxp
bmUgTGFWZWN0b3JJbnQoaW50LCBpbnQpOyAgCiAgICBpbmxpbmUgTGFWZWN0b3JJbnQoaW50Kiwg
aW50KTsKICAgIGlubGluZSBMYVZlY3RvckludChpbnQqLCBpbnQsIGludCk7CiAgICBpbmxpbmUg
TGFWZWN0b3JJbnQoY29uc3QgTGFHZW5NYXRJbnQmKTsKCiAgICBpbmxpbmUgaW50IHNpemUoKSBj
b25zdDsKICAgIGlubGluZSBpbnQgaW5jKCkgY29uc3Q7ICAgICAKICAgIGlubGluZSBMYUluZGV4
IGluZGV4KCkgY29uc3Q7CiAgICBpbmxpbmUgaW50IHN0YXJ0KCkgY29uc3Q7CiAgICBpbmxpbmUg
aW50IGVuZCgpIGNvbnN0OwoKICAgIGlubGluZSBMYVZlY3RvckludCYgcmVmKGNvbnN0IExhR2Vu
TWF0SW50ICYpOwogICAgaW5saW5lIExhVmVjdG9ySW50JiBpbmplY3QoY29uc3QgTGFHZW5NYXRJ
bnQgJik7CiAgICBpbmxpbmUgTGFWZWN0b3JJbnQmIGNvcHkoY29uc3QgTGFHZW5NYXRJbnQgJik7
CgogICAgaW5saW5lIGludCYgb3BlcmF0b3IoKShpbnQgaSk7CiAgICBpbmxpbmUgaW50JiBvcGVy
YXRvcigpKGludCBpKSBjb25zdCA7CiAgICBpbmxpbmUgTGFWZWN0b3JJbnQgb3BlcmF0b3IoKShj
b25zdCBMYUluZGV4Jik7CgogICAgCiAgICBpbmxpbmUgTGFWZWN0b3JJbnQmIG9wZXJhdG9yPShp
bnQpOwogICAgaW5saW5lIExhVmVjdG9ySW50JiBvcGVyYXRvcj0oY29uc3QgTGFHZW5NYXRJbnQm
KTsKCn07CgogCiAKCmlubGluZSBMYVZlY3RvckludDo6TGFWZWN0b3JJbnQoKSA6IExhR2VuTWF0
SW50KDAsMSkge30KaW5saW5lIExhVmVjdG9ySW50OjpMYVZlY3RvckludChpbnQgaSkgOiBMYUdl
bk1hdEludChpLDEpIHt9CgogCiAKIAogCmlubGluZSBMYVZlY3RvckludDo6TGFWZWN0b3JJbnQo
aW50IG0sIGludCBuKSA6IExhR2VuTWF0SW50KG0sbikKewogICAgKCh2b2lkKSAoKCBuPT0xIHx8
IG09PTEgKSA/IDAgOgkoX19hc3NlcnRfZmFpbCAoIm49PTEgfHwgbT09MSIgLAkiL2hvbWUvbWV0
c2VsYWEvaW5jbHVkZS9sYXBhY2twcC9sYXZpLmgiLCA2MSwgX19QUkVUVFlfRlVOQ1RJT05fXyAp
LCAwKSkpIDsKfQoKaW5saW5lIExhVmVjdG9ySW50OjpMYVZlY3RvckludChpbnQgKmQsIGludCBu
KSA6IAogICAgTGFHZW5NYXRJbnQoZCxuLDEpIHt9CgppbmxpbmUgTGFWZWN0b3JJbnQ6OkxhVmVj
dG9ySW50KGludCAqZCwgaW50IG4sIGludCBtKSA6IAogICAgTGFHZW5NYXRJbnQoZCxuLG0pIHt9
CgppbmxpbmUgTGFWZWN0b3JJbnQ6OkxhVmVjdG9ySW50KGNvbnN0IExhR2VuTWF0SW50ICZHKSAK
ewogICAgICAgICgodm9pZCkgKCggRy5zaXplKDApPT0xIHx8IEcuc2l6ZSgxKT09MSApID8gMCA6
CShfX2Fzc2VydF9mYWlsICgiRy5zaXplKDApPT0xIHx8IEcuc2l6ZSgxKT09MSIgLAkiL2hvbWUv
bWV0c2VsYWEvaW5jbHVkZS9sYXBhY2twcC9sYXZpLmgiLCA3MiwgX19QUkVUVFlfRlVOQ1RJT05f
XyApLCAwKSkpIDsKCiAgICAgICAgKCp0aGlzKS5yZWYoRyk7Cn0KCgogCgogCgppbmxpbmUgaW50
IExhVmVjdG9ySW50OjpzaXplKCkgY29uc3QgCnsgcmV0dXJuIExhR2VuTWF0SW50OjpzaXplKDAp
KkxhR2VuTWF0SW50OjpzaXplKDEpOyB9CgppbmxpbmUgaW50JiBMYVZlY3RvckludDo6b3BlcmF0
b3IoKShpbnQgaSkKeyBpZiAoTGFHZW5NYXRJbnQ6OnNpemUoMCk9PTEgKQogICAgcmV0dXJuIExh
R2VuTWF0SW50OjpvcGVyYXRvcigpKDAsaSk7CiAgZWxzZQogICAgcmV0dXJuIExhR2VuTWF0SW50
OjpvcGVyYXRvcigpKGksMCk7Cn0KCmlubGluZSBpbnQmIExhVmVjdG9ySW50OjpvcGVyYXRvcigp
KGludCBpKSBjb25zdAp7IGlmIChMYUdlbk1hdEludDo6c2l6ZSgwKT09MSApCiAgICByZXR1cm4g
TGFHZW5NYXRJbnQ6Om9wZXJhdG9yKCkoMCxpKTsKICBlbHNlCiAgICByZXR1cm4gTGFHZW5NYXRJ
bnQ6Om9wZXJhdG9yKCkoaSwwKTsKfQoKaW5saW5lIExhVmVjdG9ySW50IExhVmVjdG9ySW50Ojpv
cGVyYXRvcigpKGNvbnN0IExhSW5kZXgmIEkpCnsgaWYgKExhR2VuTWF0SW50OjpzaXplKDApPT0x
KQogICAgcmV0dXJuIExhR2VuTWF0SW50OjpvcGVyYXRvcigpKExhSW5kZXgoMCwwKSxJKTsgCiAg
ZWxzZQogICAgcmV0dXJuIExhR2VuTWF0SW50OjpvcGVyYXRvcigpKEksTGFJbmRleCgwLDApKTsg
Cn0KCgppbmxpbmUgTGFWZWN0b3JJbnQmIExhVmVjdG9ySW50Ojpjb3B5KGNvbnN0IExhR2VuTWF0
SW50ICZBKQp7CiAgICAoKHZvaWQpICgoIEEuc2l6ZSgwKSA9PSAxIHx8IEEuc2l6ZSgxKSA9PSAx
ICkgPyAwIDoJKF9fYXNzZXJ0X2ZhaWwgKCJBLnNpemUoMCkgPT0gMSB8fCBBLnNpemUoMSkgPT0g
MSIgLAkiL2hvbWUvbWV0c2VsYWEvaW5jbHVkZS9sYXBhY2twcC9sYXZpLmgiLCAxMDksIF9fUFJF
VFRZX0ZVTkNUSU9OX18gKSwgMCkpKSA7ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCiAgICBMYUdlbk1hdEludDo6Y29weShBKTsKICAgIHJldHVy
biAqdGhpczsKfQoKaW5saW5lIExhVmVjdG9ySW50JiBMYVZlY3RvckludDo6b3BlcmF0b3I9KGNv
bnN0ICBMYUdlbk1hdEludCAmQSkKewogICAgcmV0dXJuIGluamVjdChBKTsKfQoKaW5saW5lIExh
VmVjdG9ySW50JiBMYVZlY3RvckludDo6cmVmKGNvbnN0IExhR2VuTWF0SW50ICZBKQp7CiAgICAo
KHZvaWQpICgoIEEuc2l6ZSgwKSA9PSAxIHx8IEEuc2l6ZSgxKSA9PSAxICkgPyAwIDoJKF9fYXNz
ZXJ0X2ZhaWwgKCJBLnNpemUoMCkgPT0gMSB8fCBBLnNpemUoMSkgPT0gMSIgLAkiL2hvbWUvbWV0
c2VsYWEvaW5jbHVkZS9sYXBhY2twcC9sYXZpLmgiLCAxMjIsIF9fUFJFVFRZX0ZVTkNUSU9OX18g
KSwgMCkpKSA7CiAgICBMYUdlbk1hdEludDo6cmVmKEEpOwogICAgcmV0dXJuICp0aGlzOwp9Cgpp
bmxpbmUgTGFWZWN0b3JJbnQmIExhVmVjdG9ySW50OjpvcGVyYXRvcj0oaW50IGQpCnsKICAgIExh
R2VuTWF0SW50OjpvcGVyYXRvcj0oZCk7CiAgICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBMYVZl
Y3RvckludCYgTGFWZWN0b3JJbnQ6OmluamVjdChjb25zdCBMYUdlbk1hdEludCAmQSkKewogICAg
KCh2b2lkKSAoKCBBLnNpemUoMCkgPT0gMSB8fCBBLnNpemUoMSkgPT0gMSApID8gMCA6CShfX2Fz
c2VydF9mYWlsICgiQS5zaXplKDApID09IDEgfHwgQS5zaXplKDEpID09IDEiICwJIi9ob21lL21l
dHNlbGFhL2luY2x1ZGUvbGFwYWNrcHAvbGF2aS5oIiwgMTM1LCBfX1BSRVRUWV9GVU5DVElPTl9f
ICksIDApKSkgOwogICAgTGFHZW5NYXRJbnQ6OmluamVjdChBKTsKICAgIHJldHVybiAqdGhpczsK
fQogICAgCmlubGluZSBpbnQgTGFWZWN0b3JJbnQ6OmluYygpIGNvbnN0CnsKICBpZiAoTGFHZW5N
YXRJbnQ6OnNpemUoMSk9PTEgKQogICAgcmV0dXJuIExhR2VuTWF0SW50OjppbmMoMCk7CiAgZWxz
ZQogICAgcmV0dXJuIExhR2VuTWF0SW50OjppbmMoMSk7Cn0KCmlubGluZSBMYUluZGV4IExhVmVj
dG9ySW50OjppbmRleCgpIGNvbnN0CnsKICBpZiAoTGFHZW5NYXRJbnQ6OnNpemUoMSk9PTEgKQog
ICAgcmV0dXJuIExhR2VuTWF0SW50OjppbmRleCgwKTsKICBlbHNlCiAgICByZXR1cm4gTGFHZW5N
YXRJbnQ6OmluZGV4KDEpOwp9CgppbmxpbmUgaW50IExhVmVjdG9ySW50OjpzdGFydCgpIGNvbnN0
CnsKICBpZiAoTGFHZW5NYXRJbnQ6OnNpemUoMSk9PTEgKQogICAgcmV0dXJuIExhR2VuTWF0SW50
OjpzdGFydCgwKTsKICBlbHNlCiAgICByZXR1cm4gTGFHZW5NYXRJbnQ6OnN0YXJ0KDEpOwp9Cgpp
bmxpbmUgaW50IExhVmVjdG9ySW50OjplbmQoKSBjb25zdAp7CiAgaWYgKExhR2VuTWF0SW50Ojpz
aXplKDEpPT0xICkKICAgIHJldHVybiBMYUdlbk1hdEludDo6ZW5kKDApOwogIGVsc2UKICAgIHJl
dHVybiBMYUdlbk1hdEludDo6ZW5kKDEpOwp9CgoKIAojIDggImZvcmNlX2ljZS5jcHAiIDIKCgpp
bnQgbWFpbiAoKXt9Cg==



More information about the Gcc-bugs mailing list