This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

target/9496: bug in optimizer for linux-mips?


>Number:         9496
>Category:       target
>Synopsis:       bug in optimizer for linux-mips?
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Jan 29 10:16:01 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Guido Guenther
>Release:        gcc version 3.3 20030127 (prerelease)
>Organization:
>Environment:

>Description:
Attached testcase fails with -O2 and -Os. Parts of the source string "one" get overwritten (see 
"abcdefghr should be abcdefgh" output of the testcase. Works without problems when compiled with -O0. Testcase is stripped down from glibc's string/tester.c.

gcc -v
Reading specs from /usr/local/lib/gcc-lib/mips-unknown-linux-gnu/3.3/specs
Configured with: ../gcc-3.3/configure --enable-shared --enable-languages=c
Thread model: posix
gcc version 3.3 20030127 (prerelease)

uname -a
Linux foo 2.4.19-r4k-ip22 #1 Wed Dec 4 10:08:08 CET 2002 mips unknown unknown GNU/Linux
(big endian)

Same problem happens with Debian's gcc version 3.2.1., whereas Debian's gcc 2.95.4 0011002 (Debian prerelease) works fine. Please let me know if I can provide any
further input.
>How-To-Repeat:
gcc -O2 tester-O2.i
./a.out
>Fix:
unknown
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="tester-O2.i"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="tester-O2.i"

IyAxICJ0ZXN0ZXIuYyIKIyAxICI8YnVpbHQtaW4+IgojIDEgIjxjb21tYW5kIGxpbmU+IgojIDEg
InRlc3Rlci5jIgojIDExICJ0ZXN0ZXIuYyIKIyAxICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMSAz
IDQKIyAyOSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9mZWF0
dXJlcy5oIiAxIDMgNAojIDI5MSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMgNAojIDEgIi91
c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzIDQKIyAyOTIgIi91c3IvaW5jbHVkZS9mZWF0dXJl
cy5oIiAyIDMgNAojIDMxNCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMgNAojIDEgIi91c3Iv
aW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAzIDQKIyAzMTUgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5o
IiAyIDMgNAojIDMwICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMiAzIDQKCgoKCgoKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy9lcnJuby5oIiAxIDMgNAojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJu
by5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvZXJybm8uaCIgMSAzIDQKCgoKIyAxICIv
dXNyL2luY2x1ZGUvYXNtL2Vycm5vLmgiIDEgMyA0CiMgNSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vy
cm5vLmgiIDIgMyA0CiMgMjYgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDIgMyA0CgoKCgoK
CmV4dGVybiBpbnQgKl9fZXJybm9fbG9jYXRpb24gKHZvaWQpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKIyAzNyAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDIgMyA0CiMgNTUgIi91c3IvaW5j
bHVkZS9lcnJuby5oIiAzIDQKZXh0ZXJuIGNoYXIgKnByb2dyYW1faW52b2NhdGlvbl9uYW1lLCAq
cHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWU7CgoKCgojIDY5ICIvdXNyL2luY2x1ZGUvZXJy
bm8uaCIgMyA0CnR5cGVkZWYgaW50IGVycm9yX3Q7CiMgMTIgInRlc3Rlci5jIiAyCiMgMSAiL3Vz
ci9sb2NhbC9saWIvZ2NjLWxpYi9taXBzLXVua25vd24tbGludXgtZ251LzMuMy9pbmNsdWRlL3N0
ZGlvLmgiIDEgMyA0CiMgMzkgIi91c3IvbG9jYWwvbGliL2djYy1saWIvbWlwcy11bmtub3duLWxp
bnV4LWdudS8zLjMvaW5jbHVkZS9zdGRpby5oIiAzIDQKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIv
Z2NjLWxpYi9taXBzLXVua25vd24tbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMg
NAojIDIxMyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9taXBzLXVua25vd24tbGludXgtZ251LzMu
My9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwojIDQ0
ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL21pcHMtdW5rbm93bi1saW51eC1nbnUvMy4zL2luY2x1
ZGUvc3RkaW8uaCIgMiAzIDQKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzIDQK
IyAyOCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvd29yZHNpemUuaCIgMSAzIDQKIyAyOSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAz
IDQKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvbWlwcy11bmtub3duLWxpbnV4LWdudS8z
LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzMiAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMu
aCIgMiAzIDQKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWdu
ZWQgc2hvcnQgaW50IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3VfbG9uZzsKCgp0eXBlZGVmIHNpZ25lZCBjaGFyIF9f
aW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBz
aG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90
Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3Vp
bnQzMl90OwoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9f
aW50NjRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191
aW50NjRfdDsKCgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRf
dDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRf
dDsKIyAxMjggIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVk
ZS9iaXRzL3R5cGVzaXplcy5oIiAxIDMgNAojIDEyOSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMu
aCIgMiAzIDQKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19kZXZfdDsKdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgX191aWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19naWRfdDsKdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX2lub190Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgX19pbm82NF90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX21vZGVfdDsKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgX19ubGlua190Owp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYg
bG9uZyBsb25nIGludCBfX29mZjY0X3Q7CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgc3Ry
dWN0IHsgaW50IF9fdmFsWzJdOyB9IF9fZnNpZF90Owp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tf
dDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3JsaW1fdDsKdHlwZWRlZiB1bnNpZ25lZCBs
b25nIGxvbmcgaW50IF9fcmxpbTY0X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9faWRfdDsKdHlw
ZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190
Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7Cgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7
CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190Owp0eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVk
ZWYgaW50IF9fY2xvY2tpZF90OwoKCnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgp0eXBlZGVmIGxv
bmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBl
ZGVmIGxvbmcgbG9uZyBpbnQgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBp
bnQgX19mc2Jsa2NudF90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19mc2Jsa2Nu
dDY0X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX2ZzZmlsY250X3Q7CnR5cGVkZWYg
dW5zaWduZWQgbG9uZyBsb25nIGludCBfX2ZzZmlsY250NjRfdDsKCgoKCnR5cGVkZWYgaW50IF9f
c3NpemVfdDsKdHlwZWRlZiBfX29mZjY0X3QgX19sb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3QgKl9f
cWFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJf
dDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3NvY2tsZW5fdDsKIyA0NiAiL3Vzci9sb2NhbC9s
aWIvZ2NjLWxpYi9taXBzLXVua25vd24tbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGlvLmgiIDIg
MyA0CgoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIEZJTEU7CgoKCgoKIyA3MSAiL3Vz
ci9sb2NhbC9saWIvZ2NjLWxpYi9taXBzLXVua25vd24tbGludXgtZ251LzMuMy9pbmNsdWRlL3N0
ZGlvLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7CiMgODEgIi91c3IvbG9j
YWwvbGliL2djYy1saWIvbWlwcy11bmtub3duLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRpby5o
IiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMSAzIDQKIyAzMiAiL3Vzci9pbmNsdWRl
L2xpYmlvLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMSAzIDQKIyAxNCAi
L3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzIDQKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGli
L21pcHMtdW5rbm93bi1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzI1
ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL21pcHMtdW5rbm93bi1saW51eC1nbnUvMy4zL2luY2x1
ZGUvc3RkZGVmLmgiIDMgNAp0eXBlZGVmIGludCB3Y2hhcl90OwojIDM1NCAiL3Vzci9sb2NhbC9s
aWIvZ2NjLWxpYi9taXBzLXVua25vd24tbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAz
IDQKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29u
ZmlnLmgiIDIgMyA0CiMgMjQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMyA0CiMgMSAiL3Vz
ci9pbmNsdWRlL3djaGFyLmgiIDEgMyA0CiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQK
IyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL21pcHMtdW5rbm93bi1saW51eC1nbnUvMy4zL2lu
Y2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMgNAoK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAxIDMgNAojIDUxICIvdXNyL2luY2x1ZGUv
d2NoYXIuaCIgMiAzIDQKIyA2MyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNAoKCgoKCgoKCnR5
cGVkZWYgc3RydWN0CnsKICBpbnQgX19jb3VudDsKICB1bmlvbgogIHsKICAgIHdpbnRfdCBfX3dj
aDsKICAgIGNoYXIgX193Y2hiWzRdOwogIH0gX192YWx1ZTsKfSBfX21ic3RhdGVfdDsKIyAyNSAi
L3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMgNAoKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2Zm
X3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zX3Q7CnR5cGVkZWYgc3Ry
dWN0CnsKICBfX29mZjY0X3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9z
NjRfdDsKIyA0NCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzIDQKIyAxICIvdXNyL2luY2x1
ZGUvZ2NvbnYuaCIgMSAzIDQKIyAyOCAiL3Vzci9pbmNsdWRlL2djb252LmgiIDMgNAojIDEgIi91
c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMgNAojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMyA0
CiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9taXBzLXVua25vd24tbGludXgtZ251LzMuMy9p
bmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQK
IyA2MyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNAoKIyAyOSAiL3Vzci9pbmNsdWRlL2djb252
LmgiIDIgMyA0CgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL21pcHMtdW5rbm93bi1saW51
eC1nbnUvMy4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzIgIi91c3IvaW5jbHVkZS9nY29u
di5oIiAyIDMgNAoKCgoKCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZfTk9DT05W
LAogIF9fR0NPTlZfTk9EQiwKICBfX0dDT05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZX0lOUFVU
LAogIF9fR0NPTlZfRlVMTF9PVVRQVVQsCiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAogIF9fR0NP
TlZfSU5DT01QTEVURV9JTlBVVCwKCiAgX19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1IsCiAgX19H
Q09OVl9JTlRFUk5BTF9FUlJPUgp9OwoKCgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1QgPSAweDAw
MDEsCiAgX19HQ09OVl9JR05PUkVfRVJST1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBfX2djb252
X3N0ZXA7CnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29i
amVjdDsKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252
X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICos
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosIF9f
Y29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciAqKiwgc2l6ZV90ICosIGludCwgaW50KTsKCgp0eXBlZGVmIHdpbnRfdCAoKl9fZ2Nv
bnZfYnRvd2NfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLCB1bnNpZ25lZCBjaGFyKTsKCgp0
eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5pdF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwp0
eXBlZGVmIHZvaWQgKCpfX2djb252X2VuZF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwoK
Cgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAq
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9k
YXRhICosIHZvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
dW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19j
b25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5z
X2NvbnRleHRfZmN0KSAodm9pZCAqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICos
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIg
KiwgdW5zaWduZWQgY2hhciAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfcXVlcnlf
ZmN0KSAoX19jb25zdCBjaGFyICosIF9fY29uc3QgY2hhciAqKiosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252
X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwgY29uc3QgY2hhciAqKTsKdHlwZWRlZiB2b2lkICgq
X19nY29udl90cmFuc19lbmRfZmN0KSAodm9pZCAqKTsKCnN0cnVjdCBfX2djb252X3RyYW5zX2Rh
dGEKewoKICBfX2djb252X3RyYW5zX2ZjdCBfX3RyYW5zX2ZjdDsKICBfX2djb252X3RyYW5zX2Nv
bnRleHRfZmN0IF9fdHJhbnNfY29udGV4dF9mY3Q7CiAgX19nY29udl90cmFuc19lbmRfZmN0IF9f
dHJhbnNfZW5kX2ZjdDsKICB2b2lkICpfX2RhdGE7CiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0
YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwCnsKICBzdHJ1Y3QgX19nY29udl9s
b2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRsZTsKICBfX2NvbnN0IGNoYXIgKl9fbW9kbmFtZTsK
CiAgaW50IF9fY291bnRlcjsKCiAgY2hhciAqX19mcm9tX25hbWU7CiAgY2hhciAqX190b19uYW1l
OwoKICBfX2djb252X2ZjdCBfX2ZjdDsKICBfX2djb252X2J0b3djX2ZjdCBfX2J0b3djX2ZjdDsK
ICBfX2djb252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2Zj
dDsKCgoKICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwog
IGludCBfX21pbl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCgogIGludCBfX3N0
YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7
CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWY7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7
CgoKCiAgaW50IF9fZmxhZ3M7CgoKCiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVyOwoKCgogIGlu
dCBfX2ludGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJzdGF0ZV90
IF9fc3RhdGU7CgoKCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgoK
dHlwZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3RlcHM7CiAgc3RydWN0
IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBfX2djb252X3N0
ZXBfZGF0YSBfX2RhdGEgW107Cn0gKl9fZ2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2Nv
bmZpZy5oIiAyIDMgNAp0eXBlZGVmIHVuaW9uCnsKICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7
CiAgc3RydWN0CiAgewogICAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogICAgc3RydWN0IF9f
Z2NvbnZfc3RlcF9kYXRhIF9fZGF0YTsKICB9IF9fY29tYmluZWQ7Cn0gX0dfaWNvbnZfdDsKCnR5
cGVkZWYgaW50IF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7
CnR5cGVkZWYgaW50IF9HX2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18p
KSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21v
ZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJp
YnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKIyAzMyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi
IDIgMyA0CiMgNTMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKIyAxICIvdXNyL2xvY2FsL2xp
Yi9nY2MtbGliL21pcHMtdW5rbm93bi1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkYXJnLmgiIDEg
MyA0CiMgNDMgIi91c3IvbG9jYWwvbGliL2djYy1saWIvbWlwcy11bmtub3duLWxpbnV4LWdudS8z
LjMvaW5jbHVkZS9zdGRhcmcuaCIgMyA0CnR5cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVj
X3ZhX2xpc3Q7CiMgNTQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMgNAojIDE2MiAiL3Vzci9p
bmNsdWRlL2xpYmlvLmgiIDMgNApzdHJ1Y3QgX0lPX2p1bXBfdDsgc3RydWN0IF9JT19GSUxFOwoj
IDE3MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMgNAp0eXBlZGVmIHZvaWQgX0lPX2xvY2tfdDsK
CgoKCgpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19tYXJrZXIgKl9uZXh0OwogIHN0
cnVjdCBfSU9fRklMRSAqX3NidWY7CgoKCiAgaW50IF9wb3M7CiMgMTk1ICIvdXNyL2luY2x1ZGUv
bGliaW8uaCIgMyA0Cn07CgoKZW51bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVjdnRfb2ss
CiAgX19jb2RlY3Z0X3BhcnRpYWwsCiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2dF9ub2Nv
bnYKfTsKIyAyNjMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKc3RydWN0IF9JT19GSUxFIHsK
ICBpbnQgX2ZsYWdzOwoKCgoKICBjaGFyKiBfSU9fcmVhZF9wdHI7CiAgY2hhciogX0lPX3JlYWRf
ZW5kOwogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CiAgY2hh
ciogX0lPX3dyaXRlX3B0cjsKICBjaGFyKiBfSU9fd3JpdGVfZW5kOwogIGNoYXIqIF9JT19idWZf
YmFzZTsKICBjaGFyKiBfSU9fYnVmX2VuZDsKCiAgY2hhciAqX0lPX3NhdmVfYmFzZTsKICBjaGFy
ICpfSU9fYmFja3VwX2Jhc2U7CiAgY2hhciAqX0lPX3NhdmVfZW5kOwoKICBzdHJ1Y3QgX0lPX21h
cmtlciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVu
bzsKCgoKICBpbnQgX2ZsYWdzMjsKCiAgX19vZmZfdCBfb2xkX29mZnNldDsKCgoKICB1bnNpZ25l
ZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBzaWduZWQgY2hhciBfdnRhYmxlX29mZnNldDsKICBjaGFy
IF9zaG9ydGJ1ZlsxXTsKCgoKICBfSU9fbG9ja190ICpfbG9jazsKIyAzMTEgIi91c3IvaW5jbHVk
ZS9saWJpby5oIiAzIDQKICBfX29mZjY0X3QgX29mZnNldDsKCgoKCgogIHZvaWQgKl9fcGFkMTsK
ICB2b2lkICpfX3BhZDI7CgogIGludCBfbW9kZTsKCiAgY2hhciBfdW51c2VkMlsxNSAqIHNpemVv
ZiAoaW50KSAtIDIgKiBzaXplb2YgKHZvaWQgKildOwoKfTsKCgp0eXBlZGVmIHN0cnVjdCBfSU9f
RklMRSBfSU9fRklMRTsKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKCmV4dGVybiBzdHJ1Y3QgX0lP
X0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9J
T18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkZXJy
XzsKIyAzNTAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKdHlwZWRlZiBfX3NzaXplX3QgX19p
b19yZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAqX19idWYsIHNpemVfdCBfX25ieXRlcyk7
CgoKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICh2b2lkICpfX2Nvb2tpZSwg
X19jb25zdCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lvX3NlZWtfZm4gKHZvaWQgKl9fY29va2ll
LCBfX29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2Zu
ICh2b2lkICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVmIF9faW9fcmVhZF9mbiBjb29raWVfcmVhZF9m
dW5jdGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4gY29va2llX3dyaXRlX2Z1bmN0aW9uX3Q7
CnR5cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVrX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19p
b19jbG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25fdDsKCgp0eXBlZGVmIHN0cnVjdAp7CiAg
X19pb19yZWFkX2ZuICpyZWFkOwogIF9faW9fd3JpdGVfZm4gKndyaXRlOwogIF9faW9fc2Vla19m
biAqc2VlazsKICBfX2lvX2Nsb3NlX2ZuICpjbG9zZTsKfSBfSU9fY29va2llX2lvX2Z1bmN0aW9u
c190Owp0eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgY29va2llX2lvX2Z1bmN0aW9u
c190OwoKc3RydWN0IF9JT19jb29raWVfZmlsZTsKCgpleHRlcm4gdm9pZCBfSU9fY29va2llX2lu
aXQgKHN0cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2ZpbGUsIGludCBfX3JlYWRfd3JpdGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19jb29raWUsIF9JT19jb29raWVfaW9f
ZnVuY3Rpb25zX3QgX19mbnMpOwoKCgoKCgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAoX0lPX0ZJ
TEUgKikgOwpleHRlcm4gaW50IF9fdWZsb3cgKF9JT19GSUxFICopIDsKZXh0ZXJuIGludCBfX292
ZXJmbG93IChfSU9fRklMRSAqLCBpbnQpIDsKZXh0ZXJuIHdpbnRfdCBfX3d1bmRlcmZsb3cgKF9J
T19GSUxFICopIDsKZXh0ZXJuIHdpbnRfdCBfX3d1ZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4g
d2ludF90IF9fd292ZXJmbG93IChfSU9fRklMRSAqLCB3aW50X3QpIDsKIyA0MzIgIi91c3IvaW5j
bHVkZS9saWJpby5oIiAzIDQKZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIDsK
ZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGlu
dCBfSU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9f
RklMRSAqX19mcCkgOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19m
cCkgOwoKCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19GSUxFICopIDsKZXh0ZXJu
IHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX0lPX2Z0cnls
b2NrZmlsZSAoX0lPX0ZJTEUgKikgOwojIDQ2MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMgNApl
eHRlcm4gaW50IF9JT192ZnNjYW5mIChfSU9fRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIg
KiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50
ICpfX3Jlc3RyaWN0KSA7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChfSU9fRklMRSAqX19yZXN0
cmljdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Z251Y192YV9saXN0KSA7CmV4dGVybiBfX3NzaXplX3QgX0lPX3BhZG4gKF9JT19GSUxFICosIGlu
dCwgX19zc2l6ZV90KSA7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRuIChfSU9fRklMRSAqLCB2b2lk
ICosIHNpemVfdCkgOwoKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla29mZiAoX0lPX0ZJTEUgKiwg
X19vZmY2NF90LCBpbnQsIGludCkgOwpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrcG9zIChfSU9f
RklMRSAqLCBfX29mZjY0X3QsIGludCkgOwoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2Fy
ZWEgKF9JT19GSUxFICopIDsKIyA4MiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9taXBzLXVua25v
d24tbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0CgoKCgp0eXBlZGVmIF9fZ251
Y192YV9saXN0IF9fbm90X3ZhX2xpc3RfXzsKIyA5NSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9t
aXBzLXVua25vd24tbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGlvLmgiIDMgNAoKCnR5cGVkZWYg
X0dfZnBvc190IGZwb3NfdDsKCgoKCgp0eXBlZGVmIF9HX2Zwb3M2NF90IGZwb3M2NF90OwojIDE0
NyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9taXBzLXVua25vd24tbGludXgtZ251LzMuMy9pbmNs
dWRlL3N0ZGlvLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMg
NAojIDE0OCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9taXBzLXVua25vd24tbGludXgtZ251LzMu
My9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0CgoKCmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEUgKnN0ZGlu
OwpleHRlcm4gc3RydWN0IF9JT19GSUxFICpzdGRvdXQ7CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEUg
KnN0ZGVycjsKCgoKCgoKCmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5h
bWUpIDsKCmV4dGVybiBpbnQgcmVuYW1lIChfX2NvbnN0IGNoYXIgKl9fb2xkLCBfX2NvbnN0IGNo
YXIgKl9fbmV3KSA7CgoKCgoKCmV4dGVybiBGSUxFICp0bXBmaWxlICh2b2lkKSA7CiMgMTgwICIv
dXNyL2xvY2FsL2xpYi9nY2MtbGliL21pcHMtdW5rbm93bi1saW51eC1nbnUvMy4zL2luY2x1ZGUv
c3RkaW8uaCIgMyA0CmV4dGVybiBjaGFyICp0bXBuYW0gKGNoYXIgKl9fcykgOwoKCgpleHRlcm4g
RklMRSAqdG1wZmlsZTY0ICh2b2lkKSA7CgoKCgoKZXh0ZXJuIGNoYXIgKnRtcG5hbV9yIChjaGFy
ICpfX3MpIDsKIyAyMDIgIi91c3IvbG9jYWwvbGliL2djYy1saWIvbWlwcy11bmtub3duLWxpbnV4
LWdudS8zLjMvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIGNoYXIgKnRlbXBuYW0gKF9fY29u
c3QgY2hhciAqX19kaXIsIF9fY29uc3QgY2hhciAqX19wZngpCiAgICAgX19hdHRyaWJ1dGVfXyAo
KF9fbWFsbG9jX18pKTsKCgoKCgpleHRlcm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIDsK
CmV4dGVybiBpbnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBmZmx1
c2hfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IGZjbG9zZWFsbCAo
dm9pZCkgOwoKCgoKCgpleHRlcm4gRklMRSAqZm9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX21vZGVzKSA7CgpleHRlcm4gRklMRSAqZnJlb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19z
dHJlYW0pIDsKIyAyNDggIi91c3IvbG9jYWwvbGliL2djYy1saWIvbWlwcy11bmtub3duLWxpbnV4
LWdudS8zLjMvaW5jbHVkZS9zdGRpby5oIiAzIDQKCgpleHRlcm4gRklMRSAqZm9wZW42NCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgOwpleHRlcm4gRklMRSAqZnJlb3BlbjY0
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAg
ICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCgoKCmV4dGVybiBGSUxFICpmZG9w
ZW4gKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIDsKCgoKCgpleHRlcm4gRklMRSAq
Zm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19jb29raWUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2lvX2Z1bmNzKSA7
CgoKZXh0ZXJuIEZJTEUgKmZtZW1vcGVuICh2b2lkICpfX3MsIHNpemVfdCBfX2xlbiwgX19jb25z
dCBjaGFyICpfX21vZGVzKSA7CgoKCgpleHRlcm4gRklMRSAqb3Blbl9tZW1zdHJlYW0gKGNoYXIg
KipfX3Jlc3RyaWN0IF9fYnVmbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCAqX19yZXN0cmljdCBfX3NpemVsb2MpIDsKCgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxF
ICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSA7CgoKCmV4dGVy
biBpbnQgc2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmlj
dCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgOwoK
CgoKCmV4dGVybiB2b2lkIHNldGJ1ZmZlciAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hh
ciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zaXpl
KSA7CgoKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0pIDsKCgoKCgpleHRl
cm4gaW50IGZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCmV4dGVybiBp
bnQgcHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKZXh0
ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKCmV4dGVybiBpbnQg
dmZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSA7Cgpl
eHRlcm4gaW50IHZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19n
bnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19y
ZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAg
ICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIDsKCgoKCgpleHRlcm4gaW50IHNucHJp
bnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICBfX2F0
dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQg
dnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNf
dmFfbGlzdCBfX2FyZykKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZf
XywgMywgMCkpKTsKCgoKCgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0
IF9fcHRyLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mLAogICAgICAgICAgICAgICAgICAg
ICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g
KF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVz
dHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZm10LCAuLi4pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRm
X18sIDIsIDMpKSk7CmV4dGVybiBpbnQgYXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRy
LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4u
LikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsK
CgpleHRlcm4gaW50IHZkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZm10LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICBf
X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGlu
dCBkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4p
CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoK
CgoKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKZXh0
ZXJuIGludCBzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsK
CmV4dGVybiBpbnQgc3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAg
ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCgoK
CgpleHRlcm4gaW50IHZmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3Qg
X19hcmcpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkp
KTsKCgpleHRlcm4gaW50IHZzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0
LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAo
X19zY2FuZl9fLCAxLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNzY2FuZiAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIF9fYXR0cmlidXRlX18gKChf
X2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKCgoKCmV4dGVybiBpbnQgZmdldGMgKEZJ
TEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgZ2V0YyAoRklMRSAqX19zdHJlYW0pIDsKCgpleHRl
cm4gaW50IGdldGNoYXIgKHZvaWQpIDsKCgoKCgoKCgpleHRlcm4gaW50IGdldGNfdW5sb2NrZWQg
KEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkgOwoK
CgoKZXh0ZXJuIGludCBmZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKCgoKCgpleHRl
cm4gaW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IHB1dGMg
KGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIGludCBwdXRjaGFyIChpbnQgX19j
KSA7CgoKCgoKCgoKZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19z
dHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19z
dHJlYW0pIDsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSA7CgoKCgoKZXh0
ZXJuIGludCBnZXR3IChGSUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiBpbnQgcHV0dyAoaW50IF9f
dywgRklMRSAqX19zdHJlYW0pIDsKCgoKCgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKl9fcmVz
dHJpY3QgX19zLCBpbnQgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIDsKCgoK
ZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgOwoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzX3Vu
bG9ja2VkIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CiMgNDcwICIvdXNyL2xvY2Fs
L2xpYi9nY2MtbGliL21pcHMtdW5rbm93bi1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkaW8uaCIg
MyA0CmV4dGVybiBfX3NzaXplX3QgX19nZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5l
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9f
biwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAq
X19yZXN0cmljdCBfX3N0cmVhbSkgOwpleHRlcm4gX19zc2l6ZV90IGdldGRlbGltIChjaGFyICoq
X19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCgpleHRlcm4gX19zc2l6ZV90IGdl
dGxpbmUgKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CgoKCgoKZXh0ZXJuIGludCBmcHV0cyAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAg
ICA7CgoKZXh0ZXJuIGludCBwdXRzIChfX2NvbnN0IGNoYXIgKl9fcykgOwoKCgpleHRlcm4gaW50
IHVuZ2V0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJuIHNpemVfdCBmcmVh
ZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwoKZXh0ZXJuIHNp
emVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6
ZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19z
KSA7CgoKCgpleHRlcm4gaW50IGZwdXRzX3VubG9ja2VkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry
ZWFtKSA7CgoKCgpleHRlcm4gc2l6ZV90IGZyZWFkX3VubG9ja2VkICh2b2lkICpfX3Jlc3RyaWN0
IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CmV4dGVybiBzaXplX3QgZndyaXRl
X3VubG9ja2VkIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3Ry
aWN0IF9fc3RyZWFtKSA7CgoKCgoKZXh0ZXJuIGludCBmc2VlayAoRklMRSAqX19zdHJlYW0sIGxv
bmcgaW50IF9fb2ZmLCBpbnQgX193aGVuY2UpIDsKCmV4dGVybiBsb25nIGludCBmdGVsbCAoRklM
RSAqX19zdHJlYW0pIDsKCmV4dGVybiB2b2lkIHJld2luZCAoRklMRSAqX19zdHJlYW0pIDsKCiMg
NTM3ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL21pcHMtdW5rbm93bi1saW51eC1nbnUvMy4zL2lu
Y2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBpbnQgZnNlZWtvIChGSUxFICpfX3N0cmVhbSwgX19v
ZmZfdCBfX29mZiwgaW50IF9fd2hlbmNlKSA7CgpleHRlcm4gX19vZmZfdCBmdGVsbG8gKEZJTEUg
Kl9fc3RyZWFtKSA7CiMgNTUzICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL21pcHMtdW5rbm93bi1s
aW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkaW8uaCIgMyA0CgoKCmV4dGVybiBpbnQgZmdldHBvcyAo
RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAg
IDsKCmV4dGVybiBpbnQgZnNldHBvcyAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190ICpf
X3BvcykgOwojIDU3MiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9taXBzLXVua25vd24tbGludXgt
Z251LzMuMy9pbmNsdWRlL3N0ZGlvLmgiIDMgNAoKCgpleHRlcm4gaW50IGZzZWVrbzY0IChGSUxF
ICpfX3N0cmVhbSwgX19vZmY2NF90IF9fb2ZmLCBpbnQgX193aGVuY2UpIDsKZXh0ZXJuIF9fb2Zm
NjRfdCBmdGVsbG82NCAoRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBmZ2V0cG9zNjQgKEZJ
TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3M2NF90ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAg
IDsKZXh0ZXJuIGludCBmc2V0cG9zNjQgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3M2NF90
ICpfX3BvcykgOwoKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSA7Cgpl
eHRlcm4gaW50IGZlb2YgKEZJTEUgKl9fc3RyZWFtKSA7CgpleHRlcm4gaW50IGZlcnJvciAoRklM
RSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyX3VubG9ja2VkIChGSUxFICpf
X3N0cmVhbSkgOwpleHRlcm4gaW50IGZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CmV4
dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKCmV4dGVybiB2
b2lkIHBlcnJvciAoX19jb25zdCBjaGFyICpfX3MpIDsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy9zeXNfZXJybGlzdC5oIiAxIDMgNAojIDI3ICIvdXNyL2luY2x1ZGUvYml0cy9zeXNfZXJy
bGlzdC5oIiAzIDQKZXh0ZXJuIGludCBzeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19j
b25zdCBzeXNfZXJybGlzdFtdOwoKCmV4dGVybiBpbnQgX3N5c19uZXJyOwpleHRlcm4gX19jb25z
dCBjaGFyICpfX2NvbnN0IF9zeXNfZXJybGlzdFtdOwojIDYwOSAiL3Vzci9sb2NhbC9saWIvZ2Nj
LWxpYi9taXBzLXVua25vd24tbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0CgoK
CgpleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgZmls
ZW5vX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKCgpleHRlcm4gRklMRSAqcG9wZW4g
KF9fY29uc3QgY2hhciAqX19jb21tYW5kLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIDsKCgpleHRl
cm4gaW50IHBjbG9zZSAoRklMRSAqX19zdHJlYW0pIDsKCgoKCgpleHRlcm4gY2hhciAqY3Rlcm1p
ZCAoY2hhciAqX19zKSA7CgoKCgoKZXh0ZXJuIGNoYXIgKmN1c2VyaWQgKGNoYXIgKl9fcykgOwoK
CgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0ZXJuIGludCBvYnN0YWNrX3ByaW50ZiAoc3RydWN0IG9i
c3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICBfX2F0dHJpYnV0ZV9f
ICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBvYnN0YWNrX3Zw
cmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJncykKICAgICBfX2F0dHJp
YnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKCgoKCgoKCmV4dGVybiB2
b2lkIGZsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJuIGludCBmdHJ5bG9ja2Zp
bGUgKEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIHZvaWQgZnVubG9ja2ZpbGUgKEZJTEUgKl9f
c3RyZWFtKSA7CiMgNjgzICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL21pcHMtdW5rbm93bi1saW51
eC1nbnUvMy4zL2luY2x1ZGUvc3RkaW8uaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3Rk
aW8uaCIgMSAzIDQKIyAzMyAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIgMyA0CmV4dGVybiBf
X2lubGluZSBpbnQKdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBfX2du
dWNfdmFfbGlzdCBfX2FyZykKewogIHJldHVybiB2ZnByaW50ZiAoc3Rkb3V0LCBfX2ZtdCwgX19h
cmcpOwp9CgoKZXh0ZXJuIF9faW5saW5lIGludApnZXRjaGFyICh2b2lkKQp7CiAgcmV0dXJuIF9J
T19nZXRjIChzdGRpbik7Cn0KCgoKCmV4dGVybiBfX2lubGluZSBpbnQKZ2V0Y191bmxvY2tlZCAo
RklMRSAqX19mcCkKewogIHJldHVybiAoKF9fZnApLT5fSU9fcmVhZF9wdHIgPj0gKF9fZnApLT5f
SU9fcmVhZF9lbmQgPyBfX3VmbG93IChfX2ZwKSA6ICoodW5zaWduZWQgY2hhciAqKSAoX19mcCkt
Pl9JT19yZWFkX3B0cisrKTsKfQoKCmV4dGVybiBfX2lubGluZSBpbnQKZ2V0Y2hhcl91bmxvY2tl
ZCAodm9pZCkKewogIHJldHVybiAoKHN0ZGluKS0+X0lPX3JlYWRfcHRyID49IChzdGRpbiktPl9J
T19yZWFkX2VuZCA/IF9fdWZsb3cgKHN0ZGluKSA6ICoodW5zaWduZWQgY2hhciAqKSAoc3RkaW4p
LT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgoKCmV4dGVybiBfX2lubGluZSBpbnQKcHV0Y2hhciAoaW50
IF9fYykKewogIHJldHVybiBfSU9fcHV0YyAoX19jLCBzdGRvdXQpOwp9CgoKCgpleHRlcm4gX19p
bmxpbmUgaW50CmZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkKewogIHJl
dHVybiAoKChfX3N0cmVhbSktPl9JT193cml0ZV9wdHIgPj0gKF9fc3RyZWFtKS0+X0lPX3dyaXRl
X2VuZCkgPyBfX292ZXJmbG93IChfX3N0cmVhbSwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1
bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVhbSktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0K
CgoKCgpleHRlcm4gX19pbmxpbmUgaW50CnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9f
c3RyZWFtKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0ciA+PSAoX19zdHJl
YW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3RyZWFtLCAodW5zaWduZWQgY2hh
cikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0cisr
ID0gKF9fYykpKTsKfQoKCmV4dGVybiBfX2lubGluZSBpbnQKcHV0Y2hhcl91bmxvY2tlZCAoaW50
IF9fYykKewogIHJldHVybiAoKChzdGRvdXQpLT5fSU9fd3JpdGVfcHRyID49IChzdGRvdXQpLT5f
SU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKHN0ZG91dCwgKHVuc2lnbmVkIGNoYXIpIChfX2Mp
KSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzdGRvdXQpLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkp
Owp9CgoKCgoKZXh0ZXJuIF9faW5saW5lIF9fc3NpemVfdApnZXRsaW5lIChjaGFyICoqX19saW5l
cHRyLCBzaXplX3QgKl9fbiwgRklMRSAqX19zdHJlYW0pCnsKICByZXR1cm4gX19nZXRkZWxpbSAo
X19saW5lcHRyLCBfX24sICdcbicsIF9fc3RyZWFtKTsKfQoKCgoKCmV4dGVybiBfX2lubGluZSBp
bnQKZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pCnsKICByZXR1cm4gKCgoX19zdHJlYW0p
LT5fZmxhZ3MgJiAweDEwKSAhPSAwKTsKfQoKCmV4dGVybiBfX2lubGluZSBpbnQKZmVycm9yX3Vu
bG9ja2VkIChGSUxFICpfX3N0cmVhbSkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAm
IDB4MjApICE9IDApOwp9CiMgNjg0ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL21pcHMtdW5rbm93
bi1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQKCgoKIyAxMyAidGVzdGVyLmMi
IDIKIyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDEgMyA0CiMgMzMgIi91c3IvaW5jbHVkZS9z
dGRsaWIuaCIgMyA0CiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9taXBzLXVua25vd24tbGlu
dXgtZ251LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDM0ICIvdXNyL2luY2x1ZGUvc3Rk
bGliLmgiIDIgMyA0CgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93YWl0ZmxhZ3MuaCIg
MSAzIDQKIyA0MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMgNAojIDEgIi91c3IvaW5jbHVk
ZS9iaXRzL3dhaXRzdGF0dXMuaCIgMSAzIDQKIyA2MyAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0
YXR1cy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMyA0CiMgMzcgIi91c3Iv
aW5jbHVkZS9lbmRpYW4uaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZW5kaWFuLmgiIDEg
MyA0CiMgMzggIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzIDQKIyA2NCAiL3Vzci9pbmNsdWRl
L2JpdHMvd2FpdHN0YXR1cy5oIiAyIDMgNAoKdW5pb24gd2FpdAogIHsKICAgIGludCB3X3N0YXR1
czsKICAgIHN0cnVjdAogICAgICB7CgoKCgoKCgogICAgICAgIHVuc2lnbmVkIGludDoxNjsKICAg
ICAgICB1bnNpZ25lZCBpbnQgX193X3JldGNvZGU6ODsKICAgICAgICB1bnNpZ25lZCBpbnQgX193
X2NvcmVkdW1wOjE7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd190ZXJtc2lnOjc7CgogICAgICB9
IF9fd2FpdF90ZXJtaW5hdGVkOwogICAgc3RydWN0CiAgICAgIHsKCgoKCgoKICAgICAgICB1bnNp
Z25lZCBpbnQ6MTY7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19zdG9wc2lnOjg7CiAgICAgICAg
dW5zaWduZWQgaW50IF9fd19zdG9wdmFsOjg7CgogICAgICB9IF9fd2FpdF9zdG9wcGVkOwogIH07
CiMgNDQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzIDQKIyA2OCAiL3Vzci9pbmNsdWRlL3N0
ZGxpYi5oIiAzIDQKdHlwZWRlZiB1bmlvbgogIHsKICAgIHVuaW9uIHdhaXQgKl9fdXB0cjsKICAg
IGludCAqX19pcHRyOwogIH0gX19XQUlUX1NUQVRVUyBfX2F0dHJpYnV0ZV9fICgoX190cmFuc3Bh
cmVudF91bmlvbl9fKSk7CiMgOTMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CgoKdHlwZWRl
ZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07CiAgfSBkaXZfdDsKCgoKdHlw
ZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9uZyBpbnQgcmVtOwogIH0g
bGRpdl90OwoKCgoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcg
bG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgbG9uZyBpbnQgcmVtOwogIH0gbGxkaXZfdDsKCgojIDEz
NyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9t
Yl9jdXJfbWF4ICh2b2lkKSA7CgoKCgpleHRlcm4gZG91YmxlIGF0b2YgKF9fY29uc3QgY2hhciAq
X19ucHRyKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgYXRvaSAoX19j
b25zdCBjaGFyICpfX25wdHIpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGxv
bmcgaW50IGF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl
X18pKTsKCgoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGF0b2xsIChfX2Nv
bnN0IGNoYXIgKl9fbnB0cikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpl
eHRlcm4gZG91YmxlIHN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSA7CgoKCgoKZXh0
ZXJuIGZsb2F0IHN0cnRvZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIDsKCmV4dGVybiBsb25n
IGRvdWJsZSBzdHJ0b2xkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIDsKCgoKCgpl
eHRlcm4gbG9uZyBpbnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9f
YmFzZSkgOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICA7CgoKCgpfX2V4dGVuc2lv
bl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9u
ZyBsb25nIGludCBzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwgaW50IF9fYmFzZSkKICAgICA7CgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBs
b25nIGludCBzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9f
YmFzZSkgOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0
b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19i
YXNlKQogICAgIDsKCiMgMjI1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNAojIDEgIi91c3Iv
aW5jbHVkZS94bG9jYWxlLmgiIDEgMyA0CiMgMjggIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDMg
NAp0eXBlZGVmIHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QKewoKICBzdHJ1Y3QgbG9jYWxlX2RhdGEg
Kl9fbG9jYWxlc1sxM107CgoKICBjb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsK
ICBjb25zdCBpbnQgKl9fY3R5cGVfdG9sb3dlcjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG91cHBl
cjsKCgogIGNvbnN0IGNoYXIgKl9fbmFtZXNbMTNdOwp9ICpfX2xvY2FsZV90OwojIDIyNiAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMgNAoKCgpleHRlcm4gbG9uZyBpbnQgc3RydG9sX2wgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0
cnRvdWxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2Mp
IDsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbF9sIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIDsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJu
IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgOwoKZXh0ZXJuIGRv
dWJsZSBzdHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19s
b2MpCiAgICAgOwoKZXh0ZXJuIGZsb2F0IHN0cnRvZl9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLCBfX2xvY2FsZV90IF9fbG9jKSA7CgpleHRlcm4gbG9uZyBkb3VibGUgc3RydG9sZF9sIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19sb2NhbGVfdCBfX2xvYykgOwoKCgoKCgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2lu
dGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXAp
CiAgICAgOwpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIDsKZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3Vw
KSA7CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIDsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9f
c3RydG91bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxv
bmcgaW50IF9fc3RydG9sbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0
cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25l
ZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3Qg
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApCiAgICAgOwoK
CgoKCgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUKc3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikKewogIHJldHVybiBfX3N0
cnRvZF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIGxv
bmcgaW50CnN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0cnRv
bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpleHRlcm4gX19pbmxp
bmUgdW5zaWduZWQgbG9uZyBpbnQKc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpCnsK
ICByZXR1cm4gX19zdHJ0b3VsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDAp
Owp9CgoKCgpleHRlcm4gX19pbmxpbmUgZmxvYXQKc3RydG9mIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikKewogIHJldHVybiBfX3N0
cnRvZl9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIGxv
bmcgZG91YmxlCnN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyKQp7CiAgcmV0dXJuIF9fc3RydG9sZF9pbnRlcm5hbCAoX19u
cHRyLCBfX2VuZHB0ciwgMCk7Cn0KCgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxv
bmcgbG9uZyBpbnQKc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFy
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9f
c3RydG9sbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVu
c2lvbl9fIGV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50CnN0cnRvdXEgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LAogICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9f
bnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KCgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9f
aW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpCnsK
ICByZXR1cm4gX19zdHJ0b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDAp
Owp9Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQK
c3RydG91bGwgKF9fY29uc3QgY2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0
cmljdCBfX2VuZHB0ciwKICAgICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4gX19zdHJ0b3Vs
bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCgoKZXh0ZXJuIF9f
aW5saW5lIGRvdWJsZQphdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKewogIHJldHVybiBzdHJ0
b2QgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApKTsKfQpleHRlcm4gX19pbmxpbmUgaW50
CmF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKQp7CiAgcmV0dXJuIChpbnQpIHN0cnRvbCAoX19u
cHRyLCAoY2hhciAqKikgKCh2b2lkICopMCksIDEwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBp
bnQKYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpCnsKICByZXR1cm4gc3RydG9sIChfX25wdHIs
IChjaGFyICoqKSAoKHZvaWQgKikwKSwgMTApOwp9CgoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBf
X2lubGluZSBsb25nIGxvbmcgaW50CmF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKewogIHJl
dHVybiBzdHJ0b2xsIChfX25wdHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSwgMTApOwp9CgojIDQw
OCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50
IF9fbikgOwoKCmV4dGVybiBsb25nIGludCBhNjRsIChfX2NvbnN0IGNoYXIgKl9fcykgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEg
MyA0CiMgMjkgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CgoKCgoKCnR5cGVkZWYgX191
X2NoYXIgdV9jaGFyOwp0eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQg
dV9pbnQ7CnR5cGVkZWYgX191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsK
dHlwZWRlZiBfX3VfcXVhZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgoK
CnR5cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoKCgoK
CnR5cGVkZWYgX19pbm82NF90IGlubzY0X3Q7CgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoK
Cgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoK
CnR5cGVkZWYgX19ubGlua190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoK
CgoKdHlwZWRlZiBfX29mZl90IG9mZl90OwoKCgoKCgp0eXBlZGVmIF9fb2ZmNjRfdCBvZmY2NF90
OwoKCgoKdHlwZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoK
CnR5cGVkZWYgX19zc2l6ZV90IHNzaXplX3Q7CgoKCgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJf
dDsKdHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJfdDsKCgoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7
CiMgMTMzICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS90
aW1lLmgiIDEgMyA0CiMgNTggIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAoKCnR5cGVkZWYgX19j
bG9ja190IGNsb2NrX3Q7CgoKCiMgNzQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAoKCnR5cGVk
ZWYgX190aW1lX3QgdGltZV90OwoKCgojIDkyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKdHlw
ZWRlZiBfX2Nsb2NraWRfdCBjbG9ja2lkX3Q7CiMgMTA0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAz
IDQKdHlwZWRlZiBfX3RpbWVyX3QgdGltZXJfdDsKIyAxMzQgIi91c3IvaW5jbHVkZS9zeXMvdHlw
ZXMuaCIgMiAzIDQKCgoKdHlwZWRlZiBfX3VzZWNvbmRzX3QgdXNlY29uZHNfdDsKCgoKdHlwZWRl
ZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2Nj
LWxpYi9taXBzLXVua25vd24tbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAoj
IDE0OCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAoKCgp0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgaW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVk
ZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMgMTkxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMg
NAp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7
CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7
CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7
CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7
CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f
IChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJpYnV0ZV9f
ICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQzMl90IF9f
YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1
X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0eXBlZGVmIGlu
dCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18pKSk7CiMgMjE2
ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2Vs
ZWN0LmgiIDEgMyA0CiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMgNAojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3NlbGVjdC5oIiAxIDMgNAojIDMyICIvdXNyL2luY2x1ZGUvc3lzL3Nl
bGVjdC5oIiAyIDMgNAoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMyA0CiMg
MjMgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAzIDQKdHlwZWRlZiBpbnQgX19zaWdfYXRv
bWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFs
WygxMDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2lnc2V0
X3Q7CiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMyA0CgoKCnR5cGVkZWYgX19z
aWdzZXRfdCBzaWdzZXRfdDsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMyA0CiMg
MTE2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKc3RydWN0IHRpbWVzcGVjCiAgewogICAgX190
aW1lX3QgdHZfc2VjOwogICAgbG9uZyBpbnQgdHZfbnNlYzsKICB9OwojIDQ1ICIvdXNyL2luY2x1
ZGUvc3lzL3NlbGVjdC5oIiAyIDMgNAoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEg
MyA0CiMgNjcgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMyA0CnN0cnVjdCB0aW1ldmFsCiAg
ewogICAgX190aW1lX3QgdHZfc2VjOwogICAgX19zdXNlY29uZHNfdCB0dl91c2VjOwogIH07CiMg
NDcgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMyA0CiMgNTUgIi91c3IvaW5jbHVkZS9z
eXMvc2VsZWN0LmgiIDMgNAp0eXBlZGVmIGxvbmcgaW50IF9fZmRfbWFzazsKIyA2NyAiL3Vzci9p
bmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0CnR5cGVkZWYgc3RydWN0CiAgewoKCgogICAgX19mZF9t
YXNrIGZkc19iaXRzWzEwMjQgLyAoOCAqIHNpemVvZiAoX19mZF9tYXNrKSldOwoKCgoKCiAgfSBm
ZF9zZXQ7CgoKCgoKCnR5cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CiMgOTkgIi91c3IvaW5jbHVk
ZS9zeXMvc2VsZWN0LmgiIDMgNAoKCgoKCgoKZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMs
IGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQg
Kl9fcmVzdHJpY3QgX193cml0ZWZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0
cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpfX3Jl
c3RyaWN0IF9fdGltZW91dCkgOwoKCgoKCmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9fbmZkcywg
ZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQg
Kl9fcmVzdHJpY3QgX193cml0ZWZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVz
dHJpY3QgX19leGNlcHRmZHMsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRpbWVz
cGVjICpfX3Jlc3RyaWN0IF9fdGltZW91dCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBfX3Np
Z3NldF90ICpfX3Jlc3RyaWN0IF9fc2lnbWFzaykgOwoKCgojIDIxNyAiL3Vzci9pbmNsdWRlL3N5
cy90eXBlcy5oIiAyIDMgNAoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMSAz
IDQKIyAyMjAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKCgoKCnR5cGVkZWYgX19i
bGtzaXplX3QgYmxrc2l6ZV90OwoKCgoKCgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CgoK
CnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2ZpbGNudF90
IGZzZmlsY250X3Q7CiMgMjU4ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVm
IF9fYmxrY250NjRfdCBibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNibGtjbnQ2NF90IGZzYmxrY250
NjRfdDsKdHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNudDY0X3Q7CgoKCgoKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzIDQKIyAyMyAiL3Vzci9pbmNsdWRlL2Jp
dHMvcHRocmVhZHR5cGVzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEg
MyA0CiMgODMgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMgNApzdHJ1Y3QgX19zY2hlZF9w
YXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CiMgMjQgIi91c3IvaW5jbHVk
ZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMgNAoKdHlwZWRlZiBpbnQgX19hdG9taWNfbG9ja190
OwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7CiAgX19h
dG9taWNfbG9ja190IF9fc3BpbmxvY2s7Cgp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9k
ZXNjcl9zdHJ1Y3QgKl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0IF9fcHRocmVh
ZF9hdHRyX3MKewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0
cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAg
aW50IF9fc2NvcGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7
CiAgdm9pZCAqX19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0
cl90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fY19s
b2NrOwogIF9wdGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0
eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fZHVtbXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5
cGVkZWYgdW5zaWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewog
IGludCBfX21fcmVzZXJ2ZWQ7CiAgaW50IF9fbV9jb3VudDsKICBfcHRocmVhZF9kZXNjciBfX21f
b3duZXI7CiAgaW50IF9fbV9raW5kOwogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9j
azsKfSBwdGhyZWFkX211dGV4X3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtp
bmQ7Cn0gcHRocmVhZF9tdXRleGF0dHJfdDsKCgoKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7
CgoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9yd2xvY2tfdAp7CiAgc3RydWN0IF9wdGhyZWFk
X2Zhc3Rsb2NrIF9fcndfbG9jazsKICBpbnQgX19yd19yZWFkZXJzOwogIF9wdGhyZWFkX2Rlc2Ny
IF9fcndfd3JpdGVyOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfcmVhZF93YWl0aW5nOwogIF9wdGhy
ZWFkX2Rlc2NyIF9fcndfd3JpdGVfd2FpdGluZzsKICBpbnQgX19yd19raW5kOwogIGludCBfX3J3
X3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2tfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBf
X2xvY2traW5kOwogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7CgoKCgp0
eXBlZGVmIHZvbGF0aWxlIGludCBwdGhyZWFkX3NwaW5sb2NrX3Q7CgoKdHlwZWRlZiBzdHJ1Y3Qg
ewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2JhX2xvY2s7CiAgaW50IF9fYmFfcmVxdWly
ZWQ7CiAgaW50IF9fYmFfcHJlc2VudDsKICBfcHRocmVhZF9kZXNjciBfX2JhX3dhaXRpbmc7Cn0g
cHRocmVhZF9iYXJyaWVyX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIGludCBfX3BzaGFyZWQ7Cn0g
cHRocmVhZF9iYXJyaWVyYXR0cl90OwoKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcHRo
cmVhZF90OwojIDI2NyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAoKCgojIDQxNSAi
L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMgNAoKCgoKCgpleHRlcm4gbG9uZyBpbnQgcmFuZG9t
ICh2b2lkKSA7CgoKZXh0ZXJuIHZvaWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgOwoK
CgoKCmV4dGVybiBjaGFyICppbml0c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9f
c3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuKSA7CgoK
CmV4dGVybiBjaGFyICpzZXRzdGF0ZSAoY2hhciAqX19zdGF0ZWJ1ZikgOwoKCgoKCgoKc3RydWN0
IHJhbmRvbV9kYXRhCiAgewogICAgaW50MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAg
ICBpbnQzMl90ICpzdGF0ZTsKICAgIGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAg
ICBpbnQgcmFuZF9zZXA7CiAgICBpbnQzMl90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJh
bmRvbV9yIChzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAg
ICAgICAgICAgIGludDMyX3QgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKCmV4dGVybiBpbnQgc3Jh
bmRvbV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSA7
CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3Jl
c3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRl
bGVuLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJp
Y3QgX19idWYpIDsKCmV4dGVybiBpbnQgc2V0c3RhdGVfciAoY2hhciAqX19yZXN0cmljdCBfX3N0
YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0
cmljdCBfX2J1ZikgOwoKCgoKCgpleHRlcm4gaW50IHJhbmQgKHZvaWQpIDsKCmV4dGVybiB2b2lk
IHNyYW5kICh1bnNpZ25lZCBpbnQgX19zZWVkKSA7CgoKCgpleHRlcm4gaW50IHJhbmRfciAodW5z
aWduZWQgaW50ICpfX3NlZWQpIDsKCgoKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkg
OwpleHRlcm4gZG91YmxlIGVyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSA7
CgoKZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIDsKZXh0ZXJuIGxvbmcgaW50IG5yYW5k
NDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSA7CgoKZXh0ZXJuIGxvbmcgaW50IG1y
YW5kNDggKHZvaWQpIDsKZXh0ZXJuIGxvbmcgaW50IGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IGlu
dCBfX3hzdWJpWzNdKSA7CgoKZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19zZWVkdmFs
KSA7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgKnNlZWQ0OCAodW5zaWduZWQgc2hvcnQgaW50
IF9fc2VlZDE2dlszXSkgOwpleHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQg
X19wYXJhbVs3XSkgOwoKCgoKCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBz
aG9ydCBpbnQgX194WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fb2xkX3hbM107CiAgICB1
bnNpZ25lZCBzaG9ydCBpbnQgX19jOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9faW5pdDsKICAg
IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19hOwogIH07CgoKZXh0ZXJuIGludCBkcmFuZDQ4X3Ig
KHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAg
ICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKZXh0ZXJuIGludCBlcmFuZDQ4
X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAg
c3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgOwoKCmV4dGVybiBpbnQgbHJhbmQ0
OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAg
ICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKZXh0ZXJuIGludCBu
cmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAg
ICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CgoKZXh0ZXJuIGlu
dCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAg
ICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgOwpleHRl
cm4gaW50IGpyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAog
ICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKCgpl
eHRlcm4gaW50IHNyYW5kNDhfciAobG9uZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9k
YXRhICpfX2J1ZmZlcikKICAgICA7CgpleHRlcm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9y
dCBpbnQgX19zZWVkMTZ2WzNdLAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9k
YXRhICpfX2J1ZmZlcikgOwoKZXh0ZXJuIGludCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNob3J0IGlu
dCBfX3BhcmFtWzddLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAq
X19idWZmZXIpIDsKCgoKCgoKCgoKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90IF9fc2l6ZSkg
X19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lkICpjYWxsb2MgKHNpemVf
dCBfX25tZW1iLCBzaXplX3QgX19zaXplKQogICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19f
KSk7CgoKCgoKCgpleHRlcm4gdm9pZCAqcmVhbGxvYyAodm9pZCAqX19wdHIsIHNpemVfdCBfX3Np
emUpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCBmcmVlICh2b2lk
ICpfX3B0cikgOwoKCgoKZXh0ZXJuIHZvaWQgY2ZyZWUgKHZvaWQgKl9fcHRyKSA7CgoKCiMgMSAi
L3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAxIDMgNAojIDI1ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgi
IDMgNAojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvbWlwcy11bmtub3duLWxpbnV4LWdudS8z
LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAyNiAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAy
IDMgNAoKCgoKCgoKZXh0ZXJuIHZvaWQgKmFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkgOwoKCgoKCgoj
IDU3NyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMgNAoKCgoKZXh0ZXJuIHZvaWQgKnZhbGxv
YyAoc2l6ZV90IF9fc2l6ZSkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVy
biBpbnQgcG9zaXhfbWVtYWxpZ24gKHZvaWQgKipfX21lbXB0ciwgc2l6ZV90IF9fYWxpZ25tZW50
LCBzaXplX3QgX19zaXplKQogICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpl
eHRlcm4gdm9pZCBhYm9ydCAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoK
CgpleHRlcm4gaW50IGF0ZXhpdCAodm9pZCAoKl9fZnVuYykgKHZvaWQpKSA7CgoKCgoKZXh0ZXJu
IGludCBvbl9leGl0ICh2b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICpfX2FyZyks
IHZvaWQgKl9fYXJnKQogICAgIDsKCgoKCgoKZXh0ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3RhdHVz
KSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgoKCmV4dGVybiB2b2lkIF9FeGl0
IChpbnQgX19zdGF0dXMpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCgoKZXh0
ZXJuIGNoYXIgKmdldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKCgoKCmV4dGVybiBjaGFy
ICpfX3NlY3VyZV9nZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CgoKCgoKZXh0ZXJuIGlu
dCBwdXRlbnYgKGNoYXIgKl9fc3RyaW5nKSA7CgoKCgoKZXh0ZXJuIGludCBzZXRlbnYgKF9fY29u
c3QgY2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIgKl9fdmFsdWUsIGludCBfX3JlcGxhY2UpCiAg
ICAgOwoKCmV4dGVybiBpbnQgdW5zZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CgoKCgoK
CmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQpIDsKIyA2NjEgIi91c3IvaW5jbHVkZS9zdGRsaWIu
aCIgMyA0CmV4dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsKCgoKCgoKCmV4
dGVybiBpbnQgbWtzdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgOwojIDY3OCAiL3Vzci9pbmNsdWRl
L3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIGludCBta3N0ZW1wNjQgKGNoYXIgKl9fdGVtcGxhdGUpIDsK
IyA2ODggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4dGVybiBjaGFyICpta2R0ZW1wIChj
aGFyICpfX3RlbXBsYXRlKSA7CgoKCgoKZXh0ZXJuIGludCBzeXN0ZW0gKF9fY29uc3QgY2hhciAq
X19jb21tYW5kKSA7CgoKCgoKCgpleHRlcm4gY2hhciAqY2Fub25pY2FsaXplX2ZpbGVfbmFtZSAo
X19jb25zdCBjaGFyICpfX25hbWUpIDsKIyA3MTIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0
CmV4dGVybiBjaGFyICpyZWFscGF0aCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwK
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fcmVzb2x2ZWQpIDsKCgoK
CgoKdHlwZWRlZiBpbnQgKCpfX2NvbXBhcl9mbl90KSAoX19jb25zdCB2b2lkICosIF9fY29uc3Qg
dm9pZCAqKTsKCgp0eXBlZGVmIF9fY29tcGFyX2ZuX3QgY29tcGFyaXNvbl9mbl90OwoKCgoKCgpl
eHRlcm4gdm9pZCAqYnNlYXJjaCAoX19jb25zdCB2b2lkICpfX2tleSwgX19jb25zdCB2b2lkICpf
X2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6
ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2b2lkIHFzb3J0ICh2b2lkICpf
X2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAg
X19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzIChsb25nIGludCBf
X3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKX19leHRlbnNpb25fXyBleHRlcm4g
bG9uZyBsb25nIGludCBsbGFicyAobG9uZyBsb25nIGludCBfX3gpCiAgICAgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCgoKCgoKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVtZXIsIGlu
dCBfX2Rlbm9tKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZf
dCBsZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKQogICAgIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxsZGl2X3QgbGxk
aXYgKGxvbmcgbG9uZyBpbnQgX19udW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG9uZyBsb25nIGludCBfX2Rlbm9tKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCiMgNzc2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gY2hhciAqZWN2
dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQs
CiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7CgoKCgpleHRlcm4g
Y2hhciAqZmN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0
IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7CgoK
CgpleHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAq
X19idWYpIDsKCgoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50
IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBp
bnQgKl9fcmVzdHJpY3QgX19zaWduKSA7CmV4dGVybiBjaGFyICpxZmN2dCAobG9uZyBkb3VibGUg
X192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmlj
dCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7CmV4dGVybiBjaGFyICpxZ2N2dCAo
bG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgOwoKCgoKZXh0
ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0
cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwg
Y2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikg
OwpleHRlcm4gaW50IGZjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpf
X3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19z
aWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgc2l6ZV90IF9f
bGVuKSA7CgpleHRlcm4gaW50IHFlY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25k
aWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpf
X3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9f
YnVmLCBzaXplX3QgX19sZW4pIDsKZXh0ZXJuIGludCBxZmN2dF9yIChsb25nIGRvdWJsZSBfX3Zh
bHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9f
ZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAq
X19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSA7CgoKCgoKCgpleHRlcm4gaW50IG1ibGVu
IChfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgbWJ0b3djICh3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgd2N0b21iIChjaGFy
ICpfX3MsIHdjaGFyX3QgX193Y2hhcikgOwoKCgpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICh3Y2hh
cl90ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgOwoKZXh0ZXJuIHNpemVfdCB3Y3N0b21i
cyAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
d2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVfdCBfX24pCiAgICAgOwoKCgoKCgoKCmV4
dGVybiBpbnQgcnBtYXRjaCAoX19jb25zdCBjaGFyICpfX3Jlc3BvbnNlKSA7CiMgODU4ICIvdXNy
L2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gaW50IGdldHN1Ym9wdCAoY2hhciAqKl9fcmVz
dHJpY3QgX19vcHRpb25wLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19jb25zdCAqX19y
ZXN0cmljdCBfX3Rva2VucywKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0
IF9fdmFsdWVwKSA7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0a2V5IChfX2NvbnN0IGNoYXIgKl9fa2V5
KSA7CgoKCgoKCgpleHRlcm4gaW50IHBvc2l4X29wZW5wdCAoaW50IF9fb2ZsYWcpIDsKCgoKCgoK
CmV4dGVybiBpbnQgZ3JhbnRwdCAoaW50IF9fZmQpIDsKCgoKZXh0ZXJuIGludCB1bmxvY2twdCAo
aW50IF9fZmQpIDsKCgoKCmV4dGVybiBjaGFyICpwdHNuYW1lIChpbnQgX19mZCkgOwoKCgoKCgpl
eHRlcm4gaW50IHB0c25hbWVfciAoaW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZs
ZW4pIDsKCgpleHRlcm4gaW50IGdldHB0ICh2b2lkKSA7CgoKCgoKCmV4dGVybiBpbnQgZ2V0bG9h
ZGF2ZyAoZG91YmxlIF9fbG9hZGF2Z1tdLCBpbnQgX19uZWxlbSkgOwoKCgoKCgojIDE0ICJ0ZXN0
ZXIuYyIgMgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzIDQKIyAyOCAiL3Vzci9pbmNs
dWRlL3N0cmluZy5oIiAzIDQKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvbWlwcy11
bmtub3duLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzNCAiL3Vzci9p
bmNsdWRlL3N0cmluZy5oIiAyIDMgNAoKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqX19y
ZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0
cmljdCBfX3NyYywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiB2b2lkICptZW1tb3ZlICh2b2lkICpf
X2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAgOwoKCgoKCgpleHRl
cm4gdm9pZCAqbWVtY2NweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAq
X19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MsIHNpemVfdCBf
X24pCiAgICAgOwoKCgoKCmV4dGVybiB2b2lkICptZW1zZXQgKHZvaWQgKl9fcywgaW50IF9fYywg
c2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgbWVtY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9f
Y29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJl
X18pKTsKCgpleHRlcm4gdm9pZCAqbWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywg
c2l6ZV90IF9fbikKICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJu
IHZvaWQgKnJhd21lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1yY2hyIChfX2NvbnN0IHZvaWQgKl9f
cywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICA7CgpleHRlcm4gY2hhciAqc3RybmNweSAo
Y2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gY2hhciAqc3RyY2F0
IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3Jj
KQogICAgIDsKCmV4dGVybiBjaGFyICpzdHJuY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29u
c3QgY2hhciAqX19zMikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBp
bnQgc3RybmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVf
dCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJj
b2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybSAoY2hhciAqX19yZXN0
cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CgojIDExNyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAz
IDQKZXh0ZXJuIGludCBzdHJjb2xsX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFy
ICpfX3MyLCBfX2xvY2FsZV90IF9fbCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CmV4dGVybiBzaXplX3Qgc3RyeGZybV9sIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19z
cmMsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbCkg
OwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmR1cCAoX19jb25zdCBjaGFyICpfX3MpIF9fYXR0cmlidXRl
X18gKChfX21hbGxvY19fKSk7CgoKCgoKCmV4dGVybiBjaGFyICpzdHJuZHVwIChfX2NvbnN0IGNo
YXIgKl9fc3RyaW5nLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19f
KSk7CiMgMTYwICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMgNAoKCmV4dGVybiBjaGFyICpzdHJj
aHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCmV4dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNocm51bCAoX19j
b25zdCBjaGFyICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoK
CmV4dGVybiBzaXplX3Qgc3RyY3NwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAq
X19yZWplY3QpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVf
dCBzdHJzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAg
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29u
c3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0
YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKCgpleHRlcm4gY2hhciAqc3RydG9rIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pCiAgICAgOwoKCgoKZXh0ZXJuIGNoYXIgKl9fc3Ry
dG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSA7CgpleHRlcm4gY2hhciAqc3RydG9rX3IgKGNo
YXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSA7CgoKCgpl
eHRlcm4gY2hhciAqc3RyY2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0
IGNoYXIgKl9fbmVlZGxlKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCgpl
eHRlcm4gdm9pZCAqbWVtbWVtIChfX2NvbnN0IHZvaWQgKl9faGF5c3RhY2ssIHNpemVfdCBfX2hh
eXN0YWNrbGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fbmVlZGxlLCBz
aXplX3QgX19uZWVkbGVsZW4pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4
dGVybiB2b2lkICpfX21lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24p
IDsKZXh0ZXJuIHZvaWQgKm1lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19u
KSA7CgoKCgoKZXh0ZXJuIHNpemVfdCBzdHJsZW4gKF9fY29uc3QgY2hhciAqX19zKSBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cm5sZW4gKF9fY29uc3Qg
Y2hhciAqX19zdHJpbmcsIHNpemVfdCBfX21heGxlbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCgoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgOwoKCgoK
ZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVf
dCBfX2J1ZmxlbikgOwoKCgoKZXh0ZXJuIHZvaWQgX19iemVybyAodm9pZCAqX19zLCBzaXplX3Qg
X19uKSA7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChfX2NvbnN0IHZvaWQgKl9fc3JjLCB2b2lkICpf
X2Rlc3QsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gdm9pZCBiemVybyAodm9pZCAqX19zLCBzaXpl
X3QgX19uKSA7CgoKZXh0ZXJuIGludCBiY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qg
dm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CgpleHRlcm4gY2hhciAqaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqcmluZGV4IChfX2NvbnN0IGNoYXIg
Kl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBpbnQg
ZmZzIChpbnQgX19pKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50
IGZmc2wgKGxvbmcgaW50IF9fbCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRl
bnNpb25fXyBleHRlcm4gaW50IGZmc2xsIChsb25nIGxvbmcgaW50IF9fbGwpCiAgICAgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBzdHJjYXNlY21wIChfX2NvbnN0
IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCgpleHRlcm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f
Y29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJl
X18pKTsKCgoKCgpleHRlcm4gaW50IHN0cmNhc2VjbXBfbCAoX19jb25zdCBjaGFyICpfX3MxLCBf
X2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9f
bG9jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgc3RybmNhc2VjbXBf
bCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykKICAgICBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gY2hhciAqc3Ryc2VwIChjaGFyICoqX19yZXN0
cmljdCBfX3N0cmluZ3AsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2RlbGltKSA7CgoKCgpleHRlcm4gaW50IHN0cnZlcnNjbXAgKF9fY29uc3QgY2hhciAq
X19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKCmV4dGVybiBjaGFyICpzdHJzaWduYWwgKGludCBfX3NpZykgOwoKCmV4dGVybiBjaGFyICpf
X3N0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX3NyYykKICAgICA7CmV4dGVybiBjaGFyICpzdHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19k
ZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgOwoKCgpleHRlcm4gY2hh
ciAqX19zdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CmV4dGVy
biBjaGFyICpzdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgOwoKCmV4
dGVybiBjaGFyICpzdHJmcnkgKGNoYXIgKl9fc3RyaW5nKSA7CgoKZXh0ZXJuIHZvaWQgKm1lbWZy
b2IgKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgOwoKCgoKCgpleHRlcm4gY2hhciAqYmFzZW5hbWUg
KF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgOwojIDM3MiAiL3Vzci9pbmNsdWRlL3N0cmluZy5o
IiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcuaCIgMSAzIDQKIyAzNzMgIi91c3Iv
aW5jbHVkZS9zdHJpbmcuaCIgMiAzIDQKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIu
aCIgMSAzIDQKIyA4MCAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzIDQKdHlwZWRlZiBz
dHJ1Y3QgeyB1bnNpZ25lZCBjaGFyIF9fYXJyWzJdOyB9IF9fU1RSSU5HMl9DT1BZX0FSUjIgX19h
dHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwp0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGNoYXIgX19h
cnJbM107IH0gX19TVFJJTkcyX0NPUFlfQVJSMyBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CnR5
cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgY2hhciBfX2Fycls0XTsgfSBfX1NUUklORzJfQ09QWV9B
UlI0IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBj
aGFyIF9fYXJyWzVdOyB9IF9fU1RSSU5HMl9DT1BZX0FSUjUgX19hdHRyaWJ1dGVfXyAoKHBhY2tl
ZCkpOwp0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGNoYXIgX19hcnJbNl07IH0gX19TVFJJTkcy
X0NPUFlfQVJSNiBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CnR5cGVkZWYgc3RydWN0IHsgdW5z
aWduZWQgY2hhciBfX2Fycls3XTsgfSBfX1NUUklORzJfQ09QWV9BUlI3IF9fYXR0cmlidXRlX18g
KChwYWNrZWQpKTsKdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBjaGFyIF9fYXJyWzhdOyB9IF9f
U1RSSU5HMl9DT1BZX0FSUjggX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwojIDM4OSAiL3Vzci9p
bmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzIDQKZXh0ZXJuIHZvaWQgKl9fcmF3bWVtY2hyIChjb25z
dCB2b2lkICpfX3MsIGludCBfX2MpOwojIDkxOSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5o
IiAzIDQKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cmNzcG5fYzEgKF9fY29uc3QgY2hhciAq
X19zLCBpbnQgX19yZWplY3QpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3RyY3Nwbl9jMSAo
X19jb25zdCBjaGFyICpfX3MsIGludCBfX3JlamVjdCkKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jl
c3VsdCA9IDA7CiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gIT0gJ1wwJyAmJiBfX3NbX19yZXN1bHRd
ICE9IF9fcmVqZWN0KQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCmV4dGVy
biBfX2lubGluZSBzaXplX3QgX19zdHJjc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9f
cmVqZWN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3JlamVj
dDIpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3RyY3Nwbl9jMiAoX19jb25zdCBjaGFyICpf
X3MsIGludCBfX3JlamVjdDEsIGludCBfX3JlamVjdDIpCnsKICByZWdpc3RlciBzaXplX3QgX19y
ZXN1bHQgPSAwOwogIHdoaWxlIChfX3NbX19yZXN1bHRdICE9ICdcMCcgJiYgX19zW19fcmVzdWx0
XSAhPSBfX3JlamVjdDEKICAgICAgICAgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDIpCiAg
ICArK19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJuIF9faW5saW5lIHNpemVf
dCBfX3N0cmNzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19yZWplY3QxLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcmVqZWN0MiwgaW50IF9fcmVqZWN0
Myk7CmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJjc3BuX2MzIChfX2NvbnN0IGNoYXIgKl9f
cywgaW50IF9fcmVqZWN0MSwgaW50IF9fcmVqZWN0MiwKICAgICAgICAgICAgICBpbnQgX19yZWpl
Y3QzKQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsKICB3aGlsZSAoX19zW19fcmVz
dWx0XSAhPSAnXDAnICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QxCiAgICAgICAgICYmIF9f
c1tfX3Jlc3VsdF0gIT0gX19yZWplY3QyICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QzKQog
ICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KIyA5NzYgIi91c3IvaW5jbHVkZS9i
aXRzL3N0cmluZzIuaCIgMyA0CmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJzcG5fYzEgKF9f
Y29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9f
c3Ryc3BuX2MxIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0KQp7CiAgcmVnaXN0ZXIg
c2l6ZV90IF9fcmVzdWx0ID0gMDsKCiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQp
CiAgICArK19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJuIF9faW5saW5lIHNp
emVfdCBfX3N0cnNwbl9jMiAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2FjY2VwdDIpOwpleHRlcm4gX19p
bmxpbmUgc2l6ZV90Cl9fc3Ryc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0
MSwgaW50IF9fYWNjZXB0MikKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CgogIHdo
aWxlIChfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MSB8fCBfX3NbX19yZXN1bHRdID09IF9fYWNj
ZXB0MikKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpleHRlcm4gX19pbmxp
bmUgc2l6ZV90IF9fc3Ryc3BuX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYWNjZXB0MiwgaW50IF9f
YWNjZXB0Myk7CmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJzcG5fYzMgKF9fY29uc3QgY2hh
ciAqX19zLCBpbnQgX19hY2NlcHQxLCBpbnQgX19hY2NlcHQyLCBpbnQgX19hY2NlcHQzKQp7CiAg
cmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsKCiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gPT0g
X19hY2NlcHQxIHx8IF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQyCiAgICAgICAgIHx8IF9fc1tf
X3Jlc3VsdF0gPT0gX19hY2NlcHQzKQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7
Cn0KIyAxMDMzICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMgNApleHRlcm4gX19pbmxp
bmUgY2hhciAqX19zdHJwYnJrX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2FjY2VwdDIpOwpleHRl
cm4gX19pbmxpbmUgY2hhciAqCl9fc3RycGJya19jMiAoX19jb25zdCBjaGFyICpfX3MsIGludCBf
X2FjY2VwdDEsIGludCBfX2FjY2VwdDIpCnsKCiAgd2hpbGUgKCpfX3MgIT0gJ1wwJyAmJiAqX19z
ICE9IF9fYWNjZXB0MSAmJiAqX19zICE9IF9fYWNjZXB0MikKICAgICsrX19zOwogIHJldHVybiAq
X19zID09ICdcMCcgPyAoKHZvaWQgKikwKSA6IChjaGFyICopIChzaXplX3QpIF9fczsKfQoKZXh0
ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RycGJya19jMyAoX19jb25zdCBjaGFyICpfX3MsIGludCBf
X2FjY2VwdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19hY2Nl
cHQyLCBpbnQgX19hY2NlcHQzKTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnBicmtfYzMg
KF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQxLCBpbnQgX19hY2NlcHQyLAogICAgICAg
ICAgICAgIGludCBfX2FjY2VwdDMpCnsKCiAgd2hpbGUgKCpfX3MgIT0gJ1wwJyAmJiAqX19zICE9
IF9fYWNjZXB0MSAmJiAqX19zICE9IF9fYWNjZXB0MgogICAgICAgICAmJiAqX19zICE9IF9fYWNj
ZXB0MykKICAgICsrX19zOwogIHJldHVybiAqX19zID09ICdcMCcgPyAoKHZvaWQgKikwKSA6IChj
aGFyICopIChzaXplX3QpIF9fczsKfQojIDEwODUgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIu
aCIgMyA0CmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnRva19yXzFjIChjaGFyICpfX3MsIGNo
YXIgX19zZXAsIGNoYXIgKipfX25leHRwKTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnRv
a19yXzFjIChjaGFyICpfX3MsIGNoYXIgX19zZXAsIGNoYXIgKipfX25leHRwKQp7CiAgY2hhciAq
X19yZXN1bHQ7CiAgaWYgKF9fcyA9PSAoKHZvaWQgKikwKSkKICAgIF9fcyA9ICpfX25leHRwOwog
IHdoaWxlICgqX19zID09IF9fc2VwKQogICAgKytfX3M7CiAgX19yZXN1bHQgPSAoKHZvaWQgKikw
KTsKICBpZiAoKl9fcyAhPSAnXDAnKQogICAgewogICAgICBfX3Jlc3VsdCA9IF9fcysrOwogICAg
ICB3aGlsZSAoKl9fcyAhPSAnXDAnKQogICAgICAgIGlmICgqX19zKysgPT0gX19zZXApCiAgICAg
ICAgICB7CiAgICAgICAgICAgIF9fc1stMV0gPSAnXDAnOwogICAgICAgICAgICBicmVhazsKICAg
ICAgICAgIH0KICAgICAgKl9fbmV4dHAgPSBfX3M7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9
CiMgMTExNyAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzIDQKZXh0ZXJuIGNoYXIgKl9f
c3Ryc2VwX2cgKGNoYXIgKipfX3N0cmluZ3AsIF9fY29uc3QgY2hhciAqX19kZWxpbSk7CiMgMTEz
NSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzIDQKZXh0ZXJuIF9faW5saW5lIGNoYXIg
Kl9fc3Ryc2VwXzFjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0KTsKZXh0ZXJuIF9faW5saW5l
IGNoYXIgKgpfX3N0cnNlcF8xYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdCkKewogIHJlZ2lz
dGVyIGNoYXIgKl9fcmV0dmFsID0gKl9fczsKICBpZiAoX19yZXR2YWwgIT0gKCh2b2lkICopMCkg
JiYgKCpfX3MgPSAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKF9fcmVqZWN0
KSAmJiAoX19yZWplY3QpID09ICdcMCcgPyAoY2hhciAqKSBfX3Jhd21lbWNociAoX19yZXR2YWws
IF9fcmVqZWN0KSA6IHN0cmNociAoX19yZXR2YWwsIF9fcmVqZWN0KSkpKSAhPSAoKHZvaWQgKikw
KSkKICAgICooKl9fcykrKyA9ICdcMCc7CiAgcmV0dXJuIF9fcmV0dmFsOwp9CgpleHRlcm4gX19p
bmxpbmUgY2hhciAqX19zdHJzZXBfMmMgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFy
IF9fcmVqZWN0Mik7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJzZXBfMmMgKGNoYXIgKipf
X3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MikKewogIHJlZ2lzdGVyIGNoYXIgKl9f
cmV0dmFsID0gKl9fczsKICBpZiAoX19yZXR2YWwgIT0gKCh2b2lkICopMCkpCiAgICB7CiAgICAg
IHJlZ2lzdGVyIGNoYXIgKl9fY3AgPSBfX3JldHZhbDsKICAgICAgd2hpbGUgKDEpCiAgICAgICAg
ewogICAgICAgICAgaWYgKCpfX2NwID09ICdcMCcpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBfX2NwID0gKCh2b2lkICopMCk7CiAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAg
ICAgICAgaWYgKCpfX2NwID09IF9fcmVqZWN0MSB8fCAqX19jcCA9PSBfX3JlamVjdDIpCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAqX19jcCsrID0gJ1wwJzsKICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgfQogICAgICAgICAgKytfX2NwOwogICAgICAgIH0KICAgICAgKl9fcyA9
IF9fY3A7CiAgICB9CiAgcmV0dXJuIF9fcmV0dmFsOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAq
X19zdHJzZXBfM2MgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fcmVqZWN0Myk7CmV4dGVy
biBfX2lubGluZSBjaGFyICoKX19zdHJzZXBfM2MgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3Qx
LCBjaGFyIF9fcmVqZWN0MiwgY2hhciBfX3JlamVjdDMpCnsKICByZWdpc3RlciBjaGFyICpfX3Jl
dHZhbCA9ICpfX3M7CiAgaWYgKF9fcmV0dmFsICE9ICgodm9pZCAqKTApKQogICAgewogICAgICBy
ZWdpc3RlciBjaGFyICpfX2NwID0gX19yZXR2YWw7CiAgICAgIHdoaWxlICgxKQogICAgICAgIHsK
ICAgICAgICAgIGlmICgqX19jcCA9PSAnXDAnKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
X19jcCA9ICgodm9pZCAqKTApOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGlmICgqX19jcCA9PSBfX3JlamVjdDEgfHwgKl9fY3AgPT0gX19yZWplY3QyIHx8ICpfX2Nw
ID09IF9fcmVqZWN0MykKICAgICAgICAgICAgewogICAgICAgICAgICAgICpfX2NwKysgPSAnXDAn
OwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICArK19fY3A7CiAg
ICAgICAgfQogICAgICAqX19zID0gX19jcDsKICAgIH0KICByZXR1cm4gX19yZXR2YWw7Cn0KIyAx
MjE2ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMgNApleHRlcm4gY2hhciAqX19zdHJk
dXAgKF9fY29uc3QgY2hhciAqX19zdHJpbmcpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7
CiMgMTIzNSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzIDQKZXh0ZXJuIGNoYXIgKl9f
c3RybmR1cCAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbikKICAgICBfX2F0dHJp
YnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDM3NiAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMg
NAoKCgoKIyAxNSAidGVzdGVyLmMiIDIKIyAyMyAidGVzdGVyLmMiCmNvbnN0IGNoYXIgKml0ID0g
Im1lbWNjcHkiOwpzaXplX3QgZXJyb3JzID0gMDsKCgpzdGF0aWMgdm9pZApjaGVjayAoaW50IHRo
aW5nLCBpbnQgbnVtYmVyKQp7CiAgaWYgKCF0aGluZykKICAgIHsKICAgICAgcHJpbnRmKCJmbHVu
a2VkIHRlc3QgJWRcbiIsIG51bWJlcik7CiAgICAgICsrZXJyb3JzOwogICAgfQp9CgoKc3RhdGlj
IHZvaWQKZXF1YWwgKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIsIGludCBudW1iZXIpCnsK
ICBjaGVjayhhICE9ICgodm9pZCAqKTApICYmIGIgIT0gKCh2b2lkICopMCkgJiYgKF9fZXh0ZW5z
aW9uX18gKHsgc2l6ZV90IF9fczFfbGVuLCBfX3MyX2xlbjsgKF9fYnVpbHRpbl9jb25zdGFudF9w
ICgoYSkpICYmIF9fYnVpbHRpbl9jb25zdGFudF9wICgoYikpICYmIChfX3MxX2xlbiA9IHN0cmxl
biAoKGEpKSwgX19zMl9sZW4gPSBzdHJsZW4gKChiKSksICghKChzaXplX3QpKGNvbnN0IHZvaWQg
KikoKChhKSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoKGEpKSA9PSAxKSB8fCBfX3Mx
X2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKCgoYikpICsgMSkgLSAoc2l6
ZV90KShjb25zdCB2b2lkICopKChiKSkgPT0gMSkgfHwgX19zMl9sZW4gPj0gNCkpID8gbWVtY21w
ICgoX19jb25zdCBjaGFyICopICgoYSkpLCAoX19jb25zdCBjaGFyICopICgoYikpLCAoX19zMV9s
ZW4gPCBfX3MyX2xlbiA/IF9fczFfbGVuIDogX19zMl9sZW4pICsgMSkgOiAoX19idWlsdGluX2Nv
bnN0YW50X3AgKChhKSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKChhKSkgKyAxKSAtIChz
aXplX3QpKGNvbnN0IHZvaWQgKikoKGEpKSA9PSAxKSAmJiAoX19zMV9sZW4gPSBzdHJsZW4gKChh
KSksIF9fczFfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKChiKSkgJiYgKChzaXpl
X3QpKGNvbnN0IHZvaWQgKikoKChiKSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoKGIp
KSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9f
Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoYSkpKVswXSAtICgoX19j
b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoKGIpKSlbMF0pOyBpZiAoX19z
MV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2ln
bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKGEpKSlbMV0gLSAoKF9fY29uc3QgdW5zaWdu
ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoYikpKVsxXSk7IGlmIChfX3MxX2xlbiA+IDEg
JiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq
KSAoX19jb25zdCBjaGFyICopICgoYSkpKVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop
IChfX2NvbnN0IGNoYXIgKikgKChiKSkpWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jlc3Vs
dCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj
aGFyICopICgoYSkpKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo
YXIgKikgKChiKSkpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBf
X2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczIgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf
X2NvbnN0IGNoYXIgKikgKChiKSk7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3Qg
dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoYSkpKVswXSAtIF9fczJbMF0pOyBp
ZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0
IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKGEpKSlbMV0gLSBfX3MyWzFdKTsg
aWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25z
dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKChhKSkpWzJdIC0gX19zMlsyXSk7
IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0
IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKGEpKSlbM10gLSBfX3MyWzNdKTsg
fSB9IF9fcmVzdWx0OyB9KSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wICgoYikpICYmICgoc2l6
ZV90KShjb25zdCB2b2lkICopKCgoYikpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKChi
KSkgPT0gMSkgJiYgKF9fczJfbGVuID0gc3RybGVuICgoYikpLCBfX3MyX2xlbiA8IDQpID8gKF9f
YnVpbHRpbl9jb25zdGFudF9wICgoYSkpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKCgoYSkp
ICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKChhKSkgPT0gMSkgPyAoX19leHRlbnNpb25f
XyAoeyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg
KF9fY29uc3QgY2hhciAqKSAoKGEpKSlbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo
X19jb25zdCBjaGFyICopKChiKSkpWzBdKTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9
PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo
YXIgKikgKChhKSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh
ciAqKSAoKGIpKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19y
ZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKGEp
KSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoYikp
KVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChf
X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKGEpKSlbM10gLSAoKF9f
Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoYikpKVszXSk7IH0gfSBf
X3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpf
X3MxID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoYSkpOyBy
ZWdpc3RlciBpbnQgX19yZXN1bHQgPSBfX3MxWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg
KikgKF9fY29uc3QgY2hhciAqKSAoKGIpKSlbMF07IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1
bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg
KikgKF9fY29uc3QgY2hhciAqKSAoKGIpKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVz
dWx0ID09IDApIHsgX19yZXN1bHQgPSAoX19zMVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFy
ICopIChfX2NvbnN0IGNoYXIgKikgKChiKSkpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAmJiBfX3Jl
c3VsdCA9PSAwKSBfX3Jlc3VsdCA9IChfX3MxWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg
KikgKF9fY29uc3QgY2hhciAqKSAoKGIpKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiBzdHJj
bXAgKChhKSwgKGIpKSkpKTsgfSkgPT0gMCksIG51bWJlcik7Cn0KCmNoYXIgb25lWzUwXTsKY2hh
ciB0d29bNTBdOwoKc3RhdGljIHZvaWQKdGVzdF9tZW1jY3B5ICh2b2lkKQp7CiAgKHZvaWQpIHN0
cmNweShvbmUsICJhYmNkZWZnaCIpOwogICh2b2lkKSBzdHJjcHkodHdvLCAiaG9yc2VmZWF0aGVy
cyIpOwogIGNoZWNrKG1lbWNjcHkodHdvLCBvbmUsICdmJywgOSkgPT0gdHdvKzYsIDcpOwogIGVx
dWFsKG9uZSwgImFiY2RlZmdoIiwgOCk7CiAgcHJpbnRmKCIlcCBpcyAlcyBzaG91bGQgYmUgYWJj
ZGVmZ2hcbiIsIG9uZSwgb25lKTsKICBlcXVhbCh0d28sICJhYmNkZWZlYXRoZXJzIiwgOSk7Cn0K
CmludAptYWluICh2b2lkKQp7CiAgaW50IHN0YXR1czsKCgogIHRlc3RfbWVtY2NweSAoKTsKCiAg
aWYgKGVycm9ycyA9PSAwKQogICAgewogICAgICBzdGF0dXMgPSAwOwogICAgICBwdXRzKCJObyBl
cnJvcnMuIik7CiAgICB9CiAgZWxzZQogICAgewogICAgICBzdGF0dXMgPSAxOwogICAgICBwcmlu
dGYoIiVaZCBlcnJvcnMuXG4iLCBlcnJvcnMpOwogICAgfQoKICByZXR1cm4gc3RhdHVzOwp9Cg==


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]