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]

c++/1562: g++ 2.96 x86 Code Generation bug for 64-bit integers



>Number:         1562
>Category:       c++
>Synopsis:       g++ 2.96 x86 Code Generation bug for 64-bit integers
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Jan 05 09:26:01 PST 2001
>Closed-Date:
>Last-Modified:
>Originator:     Chris Colohan
>Release:        gcc version 2.96 20000731 (Red Hat Linux 7.0)
>Organization:
>Environment:
Red Hat Linux 7.0 system running on an Intel machine.  Updated to newest gcc RPM (gcc-2.96-69) -- ie, this includes Red Hat's patches.
>Description:
Under certain conditions g++ seems to be producing invalid code for subtracting 64-bit unsigned integers.  With the attached test case, if compiled with -O0 or -O1 correct execution results.  With -O2 or -O3, garbage is left in the upper 32 bits of the result of the threadTimer2.current_time() call.  The lower 32 bits are correct.

If you run the attached test case compiled with -O0, the output is:

TEST PASSED!

If you run the attached test case compiled with -O2, the output is:

=== TEST FAILED! ===
threadTimer2.current_time() = 17868988680824959108
process2->nfetch = 1132270
threadTimer2.time_base = 333418
Abort
>How-To-Repeat:
Compile and run the attached test case with an optimization level of -O2 or higher.
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: text/x-csrc; name="gcc_bug.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="gcc_bug.ii"

IyAxICJnY2NfYnVnLmNjIgoKIyAyOCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDI4NCAi
L3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMu
aCIgMSAzCiMgMjg0ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMzEyICIvdXNyL2lu
Y2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAzCiMg
MzEyICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMjggIi91c3IvaW5jbHVkZS9zdGRp
by5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoKIyAxOTkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1y
ZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgc2l6ZV90OwojIDM0ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgoKIyA0MyAiL3Vz
ci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8yLjk2L2luY2x1ZGUvc3RkYXJnLmgiIDEg
Mwp0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OwojIDM5ICIvdXNyL2lu
Y2x1ZGUvc3RkaW8uaCIgMiAzCgoKIyAzMCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAz
CiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8yLjk2L2luY2x1ZGUvc3Rk
ZGVmLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVm
IHVuc2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0
Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191
X2xvbmc7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3Vf
cXVhZF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKIyA0
OSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50
OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9y
dCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0
eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQz
Ml90OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRf
dDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRf
dDsKCnR5cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rl
dl90Owp0eXBlZGVmIF9fdV9pbnQgX191aWRfdDsKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CnR5
cGVkZWYgX191X2xvbmcgX19pbm9fdDsKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90Owp0eXBlZGVm
IF9fdV9pbnQgX19ubGlua190Owp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgX19x
dWFkX3QgX19sb2ZmX3Q7CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgaW50IF9fc3NpemVf
dDsKdHlwZWRlZiBfX3VfbG9uZyBfX3JsaW1fdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fcmxpbTY0
X3Q7CnR5cGVkZWYgX191X2ludCBfX2lkX3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBf
X3ZhbFsyXTsKICB9IF9fZnNpZF90OwoKCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsKdHlwZWRlZiBj
aGFyICpfX2NhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgdW5zaWdu
ZWQgaW50IF9fdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N1c2Vjb25kc190Owp0eXBl
ZGVmIGxvbmcgaW50IF9fc3dibGtfdDsKCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKCnR5
cGVkZWYgaW50IF9fY2xvY2tpZF90OwoKCnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgoKdHlwZWRl
ZiB1bnNpZ25lZCBsb25nIGludCBfX2ZkX21hc2s7CgoKIyAxMDkgIi91c3IvaW5jbHVkZS9iaXRz
L3R5cGVzLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKICB7CgoKCgoKCiAgICBfX2ZkX21hc2sgX19mZHNf
Yml0c1sxMDI0IC8gKDggKiBzaXplb2YgKF9fZmRfbWFzaykpXTsKCgogIH0gX19mZF9zZXQ7CgoK
dHlwZWRlZiBpbnQgX19rZXlfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19w
aWRfdDsKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa3NpemVfdDsKCgoKCnR5cGVkZWYgbG9uZyBp
bnQgX19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBf
X3VfbG9uZyBfX2ZzYmxrY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsK
Cgp0eXBlZGVmIF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNm
aWxjbnQ2NF90OwoKCnR5cGVkZWYgX191X3F1YWRfdCBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xv
ZmZfdCBfX29mZjY0X3Q7CgoKdHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYg
dW5zaWduZWQgbG9uZyBpbnQgX190X3VzY2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90
OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IF9fc29ja2xlbl90OwoKCgoKCiMgMjQgIi91c3IvaW5j
bHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2JpdHMvc2No
ZWQuaCIgMSAzCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IHNjaGVkX3ByaW9yaXR5
OwogIH07CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMKCgpzdHJ1
Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3NwaW5s
b2NrOwoKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVh
ZF9kZXNjcjsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fZGV0YWNoc3RhdGU7CiAgaW50
IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0IF9fc2NoZWRfcGFyYW0gX19zY2hlZHBhcmFtOwogIGlu
dCBfX2luaGVyaXRzY2hlZDsKICBpbnQgX19zY29wZTsKICBzaXplX3QgX19ndWFyZHNpemU7CiAg
aW50IF9fc3RhY2thZGRyX3NldDsKICB2b2lkICpfX3N0YWNrYWRkcjsKICBzaXplX3QgX19zdGFj
a3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0
aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0aHJlYWRfZGVzY3IgX19jX3dhaXRpbmc7Cn0g
cHRocmVhZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19kdW1teTsKfSBwdGhy
ZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgoK
Cgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9yZXNlcnZlZDsKICBpbnQgX19tX2NvdW50Owog
IF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBpbnQgX19tX2tpbmQ7CiAgc3RydWN0IF9wdGhy
ZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJlYWRfbXV0ZXhfdDsKCgoKdHlwZWRlZiBzdHJ1
Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhyZWFkX211dGV4YXR0cl90OwoKCgp0eXBlZGVm
IGludCBwdGhyZWFkX29uY2VfdDsKCgojIDE0MCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5
cGVzLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7CgojIDE2NiAiL3Vz
ci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCiMgNDEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAy
IDMKIyA0OSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUg
RklMRTsKCiMgNTkgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9JT19G
SUxFIF9fRklMRTsKCiMgNzAgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCiMgMzEgIi91c3IvaW5j
bHVkZS9saWJpby5oIiAxIDMKIyAxNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMKIyAz
MTIgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL3N0ZGRl
Zi5oIiAxIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUv
X0dfY29uZmlnLmgiIDIgMwojIDI1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyA0NiAi
L3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRo
YXQtbGludXgvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0NiAiL3Vzci9pbmNsdWRlL3dj
aGFyLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgNDggIi91
c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyA2NCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKdHlw
ZWRlZiBzdHJ1Y3QKewogIGludCBfX2NvdW50OwogIHVuaW9uCiAgewogICAgd2ludF90IF9fd2No
OwogICAgY2hhciBfX3djaGJbNF07CiAgfSBfX3ZhbHVlOwp9IF9fbWJzdGF0ZV90OwojIDI1ICIv
dXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmX3Qg
X19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zX3Q7CnR5cGVkZWYgc3RydWN0
CnsKICBfX29mZjY0X3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zNjRf
dDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMjkgIi91c3IvaW5jbHVkZS9n
Y29udi5oIiAxIDMKIyA0NiAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDEgIi91c3IvbGli
L2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0
NiAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDI5ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIg
MiAzCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVk
ZS9zdGRkZWYuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCgoKCgplbnVt
CnsKICBfX0dDT05WX09LID0gMCwKICBfX0dDT05WX05PQ09OViwKICBfX0dDT05WX05PREIsCiAg
X19HQ09OVl9OT01FTSwKCiAgX19HQ09OVl9FTVBUWV9JTlBVVCwKICBfX0dDT05WX0ZVTExfT1VU
UFVULAogIF9fR0NPTlZfSUxMRUdBTF9JTlBVVCwKICBfX0dDT05WX0lOQ09NUExFVEVfSU5QVVQs
CgogIF9fR0NPTlZfSUxMRUdBTF9ERVNDUklQVE9SLAogIF9fR0NPTlZfSU5URVJOQUxfRVJST1IK
fTsKCgoKZW51bQp7CiAgX19HQ09OVl9JU19MQVNUID0gMHgwMDAxLAogIF9fR0NPTlZfSUdOT1JF
X0VSUk9SUyA9IDB4MDAwMgp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwOwpzdHJ1Y3QgX19nY29u
dl9zdGVwX2RhdGE7CnN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3Q7CnN0cnVjdCBfX2djb252
X3RyYW5zX2RhdGE7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl9mY3QpIChzdHJ1Y3QgX19nY29u
dl9zdGVwICosIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIg
KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIHNpemVfdCAq
LCBpbnQsIGludCk7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2luaXRfZmN0KSAoc3RydWN0IF9f
Z2NvbnZfc3RlcCAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl9lbmRfZmN0KSAoc3RydWN0IF9f
Z2NvbnZfc3RlcCAqKTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2ZjdCkgKHN0cnVj
dCBfX2djb252X3N0ZXAgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBfX2djb252X3N0ZXBfZGF0YSAqLCB2b2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICoqLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50
ICgqX19nY29udl90cmFuc19jb250ZXh0X2ZjdCkgKHZvaWQgKiwgX19jb25zdCB1bnNpZ25lZCBj
aGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
dW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2dj
b252X3RyYW5zX3F1ZXJ5X2ZjdCkgKF9fY29uc3QgY2hhciAqLCBfX2NvbnN0IGNoYXIgKioqLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVk
ZWYgaW50ICgqX19nY29udl90cmFuc19pbml0X2ZjdCkgKHZvaWQgKiosIGNvbnN0IGNoYXIgKik7
CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCkgKHZvaWQgKik7CgpzdHJ1Y3Qg
X19nY29udl90cmFuc19kYXRhCnsKCiAgX19nY29udl90cmFuc19mY3QgX190cmFuc19mY3Q7CiAg
X19nY29udl90cmFuc19jb250ZXh0X2ZjdCBfX3RyYW5zX2NvbnRleHRfZmN0OwogIF9fZ2NvbnZf
dHJhbnNfZW5kX2ZjdCBfX3RyYW5zX2VuZF9mY3Q7CiAgdm9pZCAqX19kYXRhOwogIHN0cnVjdCBf
X2djb252X3RyYW5zX2RhdGEgKl9fbmV4dDsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcAp7CiAg
c3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdCAqX19zaGxpYl9oYW5kbGU7CiAgX19jb25zdCBj
aGFyICpfX21vZG5hbWU7CgogIGludCBfX2NvdW50ZXI7CgogIGNoYXIgKl9fZnJvbV9uYW1lOwog
IGNoYXIgKl9fdG9fbmFtZTsKCiAgX19nY29udl9mY3QgX19mY3Q7CiAgX19nY29udl9pbml0X2Zj
dCBfX2luaXRfZmN0OwogIF9fZ2NvbnZfZW5kX2ZjdCBfX2VuZF9mY3Q7CgoKCiAgaW50IF9fbWlu
X25lZWRlZF9mcm9tOwogIGludCBfX21heF9uZWVkZWRfZnJvbTsKICBpbnQgX19taW5fbmVlZGVk
X3RvOwogIGludCBfX21heF9uZWVkZWRfdG87CgoKICBpbnQgX19zdGF0ZWZ1bDsKCiAgdm9pZCAq
X19kYXRhOwp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEKewogIHVuc2lnbmVkIGNoYXIg
Kl9fb3V0YnVmOwogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmZW5kOwoKCgogIGludCBfX2ZsYWdz
OwoKCgogIGludCBfX2ludm9jYXRpb25fY291bnRlcjsKCgoKICBpbnQgX19pbnRlcm5hbF91c2U7
CgogIF9fbWJzdGF0ZV90ICpfX3N0YXRlcDsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwoKCgogIHN0
cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fdHJhbnM7Cn07CgoKCnR5cGVkZWYgc3RydWN0IF9f
Z2NvbnZfaW5mbwp7CiAgc2l6ZV90IF9fbnN0ZXBzOwogIHN0cnVjdCBfX2djb252X3N0ZXAgKl9f
c3RlcHM7CiAgX19leHRlbnNpb25fXyBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhIFsw
XTsKfSAqX19nY29udl90OwoKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKdHlw
ZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogIHN0cnVjdAogIHsKICAg
IHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBf
X2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQx
Nl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19p
bnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2ln
bmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsK
dHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f
IChfX1NJX18pKSk7CgojIDMxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgNTIgIi91c3Iv
aW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51
eC8yLjk2L2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDUyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIg
MiAzCiMgMTU4ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lPX2p1bXBfdDsgc3Ry
dWN0IF9JT19GSUxFOwoKCgoKCgoKCgp0eXBlZGVmIHZvaWQgX0lPX2xvY2tfdDsKCgoKCgpzdHJ1
Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19tYXJrZXIgKl9uZXh0OwogIHN0cnVjdCBfSU9f
RklMRSAqX3NidWY7CgoKCiAgaW50IF9wb3M7CiMgMTkxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIg
Mwp9OwoKCmVudW0gX19jb2RlY3Z0X3Jlc3VsdAp7CiAgX19jb2RlY3Z0X29rLAogIF9fY29kZWN2
dF9wYXJ0aWFsLAogIF9fY29kZWN2dF9lcnJvciwKICBfX2NvZGVjdnRfbm9jb252Cn07CgojIDI1
OSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdz
OwoKCgoKICBjaGFyKiBfSU9fcmVhZF9wdHI7CiAgY2hhciogX0lPX3JlYWRfZW5kOwogIGNoYXIq
IF9JT19yZWFkX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRl
X3B0cjsKICBjaGFyKiBfSU9fd3JpdGVfZW5kOwogIGNoYXIqIF9JT19idWZfYmFzZTsKICBjaGFy
KiBfSU9fYnVmX2VuZDsKCiAgY2hhciAqX0lPX3NhdmVfYmFzZTsKICBjaGFyICpfSU9fYmFja3Vw
X2Jhc2U7CiAgY2hhciAqX0lPX3NhdmVfZW5kOwoKICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtl
cnM7CgogIHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsKICBpbnQgX2Js
a3NpemU7CiAgX19vZmZfdCBfb2xkX29mZnNldDsKCgoKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2Nv
bHVtbjsKICBzaWduZWQgY2hhciBfdnRhYmxlX29mZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsK
CgoKICBfSU9fbG9ja190ICpfbG9jazsKIyAzMDMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiAg
X19vZmY2NF90IF9vZmZzZXQ7CgoKCgoKICB2b2lkICpfX3BhZDE7CiAgdm9pZCAqX19wYWQyOwoK
ICBpbnQgX21vZGU7CgogIGNoYXIgX3VudXNlZDJbMTUgKiBzaXplb2YgKGludCkgLSAyICogc2l6
ZW9mICh2b2lkICopXTsKCn07CgoKCgoKc3RydWN0IF9JT19GSUxFX3BsdXM7CgpleHRlcm4gc3Ry
dWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRpbl87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVf
cGx1cyBfSU9fMl8xX3N0ZG91dF87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8x
X3N0ZGVycl87CiMgMzQyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVmIF9fc3NpemVf
dCBfX2lvX3JlYWRfZm4gKHZvaWQgKl9fY29va2llLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbmJ5
dGVzKTsKCgoKCgoKCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fd3JpdGVfZm4gKHZvaWQgKl9fY29v
a2llLCBfX2NvbnN0IGNoYXIgKl9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgX19uKTsKCgoKCgoKCnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqX19j
b29raWUsIF9fb2ZmNjRfdCAqX19wb3MsIGludCBfX3cpOwoKCnR5cGVkZWYgaW50IF9faW9fY2xv
c2VfZm4gKHZvaWQgKl9fY29va2llKTsKCgojIDM5MSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMK
ZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cg
KCk7CmV4dGVybiBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQg
X19vdmVyZmxvdyAoX0lPX0ZJTEUgKiwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1
bmRlcmZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChf
SU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3dvdmVyZmxvdyAoX0lPX0ZJTEUg
Kiwgd2ludF90KSB0aHJvdyAoKTsKCiMgNDI0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRl
cm4gaW50IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lP
X3B1dGMgKGludCBfX2MsIF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9f
ZmVvZiAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mZXJyb3IgKF9J
T19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tlZCAoX0lP
X0ZJTEUgKl9fZnApIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgKF9J
T19GSUxFICopIHRocm93ICgpOwpleHRlcm4gdm9pZCBfSU9fZnVubG9ja2ZpbGUgKF9JT19GSUxF
ICopIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mdHJ5bG9ja2ZpbGUgKF9JT19GSUxFICopIHRo
cm93ICgpOwoKIyA0NTQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zm
c2NhbmYgKF9JT19GSUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRo
cm93ICgpOwpleHRlcm4gaW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNv
bnN0IGNoYXIgKl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFf
bGlzdCkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3QgX0lPX3BhZG4gKF9JT19GSUxFICosIGlu
dCwgX19zc2l6ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBfSU9fc2dldG4gKF9JT19GSUxF
ICosIHZvaWQgKiwgc2l6ZV90KSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtv
ZmYgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50LCBpbnQpIHRocm93ICgpOwpleHRlcm4gX19v
ZmY2NF90IF9JT19zZWVrcG9zIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCkgdGhyb3cgKCk7
CgpleHRlcm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7
CgojIDUxMCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKfQojIDcwICIvdXNyL2luY2x1ZGUvc3Rk
aW8uaCIgMiAzCgoKCnR5cGVkZWYgX0dfZnBvc190IGZwb3NfdDsKIyAxMjMgIi91c3IvaW5jbHVk
ZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDEy
MyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgpleHRlcm4gRklMRSAqc3RkaW47CmV4dGVy
biBGSUxFICpzdGRvdXQ7CmV4dGVybiBGSUxFICpzdGRlcnI7CgoKCgoKCmV4dGVybiBpbnQgcmVt
b3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93ICgpOwoKZXh0ZXJuIGludCByZW5h
bWUgKF9fY29uc3QgY2hhciAqX19vbGQsIF9fY29uc3QgY2hhciAqX19uZXcpIHRocm93ICgpOwoK
CgoKZXh0ZXJuIEZJTEUgKnRtcGZpbGUgKHZvaWQpIHRocm93ICgpOwojIDE1NCAiL3Vzci9pbmNs
dWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIgKnRtcG5hbSAoY2hhciAqX19zKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBjaGFyICp0bXBuYW1fciAoY2hhciAqX19zKSB0aHJvdyAoKTsKIyAxNzEgIi91
c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBjaGFyICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIg
Kl9fZGlyLCBfX2NvbnN0IGNoYXIgKl9fcGZ4KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwoKZXh0ZXJuIGludCBmZmx1c2ggKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKIyAx
OTQgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICpmb3BlbiAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwoKZXh0ZXJuIEZJTEUgKmZyZW9wZW4g
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAg
ICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKIyAyMjQgIi91c3IvaW5jbHVk
ZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICpmZG9wZW4gKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIg
Kl9fbW9kZXMpIHRocm93ICgpOwojIDI0NyAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJu
IHZvaWQgc2V0YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0
IF9fYnVmKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZXR2YnVmIChGSUxFICpfX3Jlc3RyaWN0
IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgIGlu
dCBfX21vZGVzLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZmZl
ciAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9p
ZCBzZXRsaW5lYnVmIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZw
cmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGlu
dCBwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAo
KTsKCmV4dGVybiBpbnQgc3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgdmZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9s
aXN0IF9fYXJnKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgdnByaW50ZiAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKTsK
CmV4dGVybiBpbnQgdnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0
IF9fYXJnKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzbnByaW50ZiAoY2hhciAqX19yZXN0cmlj
dCBfX3MsIHNpemVfdCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CgpleHRlcm4gaW50IF9fdnNucHJpbnRm
IChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0
IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50
Zl9fLCAzLCAwKSkpOwpleHRlcm4gaW50IHZzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3Ms
IHNpemVfdCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7CiMgMzIxICIvdXNy
L2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBf
X3N0cmVhbSwKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv
cm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2NhbmYgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3NjYW5mIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKIyAzNDcgIi91c3IvaW5jbHVk
ZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZmdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBn
ZXRjaGFyICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZ2V0Y191bmxvY2tlZCAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQgKHZv
aWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJl
YW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJl
YW0pIHRocm93ICgpOwpleHRlcm4gaW50IHB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dGNoYXIgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCgoK
ZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRl
cm4gY2hhciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLCBGSUxFICpfX3Jl
c3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKIyA0MTMgIi91c3IvaW5jbHVkZS9zdGRp
by5oIiAzCmV4dGVybiBjaGFyICpnZXRzIChjaGFyICpfX3MpIHRocm93ICgpOwoKCiMgNDM3ICIv
dXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19zLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoK
CgoKCgoKCmV4dGVybiBpbnQgcHV0cyAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IHVuZ2V0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpl
eHRlcm4gc2l6ZV90IGZyZWFkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXpl
LAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3QgZndyaXRlIChfX2NvbnN0IHZvaWQgKl9fcmVz
dHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
X19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fcykgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgZnJl
YWRfdW5sb2NrZWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19z
dHJlYW0pIHRocm93ICgpOwpleHRlcm4gc2l6ZV90IGZ3cml0ZV91bmxvY2tlZCAoX19jb25zdCB2
b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cg
KCk7CgoKCgpleHRlcm4gaW50IGZzZWVrIChGSUxFICpfX3N0cmVhbSwgbG9uZyBpbnQgX19vZmYs
IGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgZnRlbGwgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHJld2luZCAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwoKCgoKCgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CiMgNTA3ICIvdXNyL2luY2x1
ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZnZXRwb3MgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0sIGZwb3NfdCAqX19yZXN0cmljdCBfX3BvcykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQg
ZnNldHBvcyAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190ICpfX3BvcykgdGhyb3cgKCk7
CiMgNTQzICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gdm9pZCBjbGVhcmVyciAoRklM
RSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZW9mIChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CgpleHRlcm4gaW50IGZlcnJvciAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoK
CgpleHRlcm4gdm9pZCBjbGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwpleHRlcm4gaW50IGZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiB2b2lkIHBlcnJvciAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGludCBzeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBzeXNfZXJybGlzdFtd
OwojIDU3NCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmaWxlbm8gKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmlsZW5vX3VubG9ja2VkIChGSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBGSUxFICpwb3BlbiAoX19jb25zdCBj
aGFyICpfX2NvbW1hbmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBwY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAq
Y3Rlcm1pZCAoY2hhciAqX19zKSB0aHJvdyAoKTsKIyA2MjEgIi91c3IvaW5jbHVkZS9zdGRpby5o
IiAzCmV4dGVybiB2b2lkIGZsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVy
biB2b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CiMgNjQzICIvdXNy
L2luY2x1ZGUvc3RkaW8uaCIgMwojIDMyICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAxIDMK
aW5saW5lIGludAp2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIF9fZ251
Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKQp7CiAgcmV0dXJuIHZmcHJpbnRmIChzdGRvdXQsIF9f
Zm10LCBfX2FyZyk7Cn0KCgppbmxpbmUgaW50CmdldGNoYXIgKHZvaWQpIHRocm93ICgpCnsKICBy
ZXR1cm4gX0lPX2dldGMgKHN0ZGluKTsKfQoKCgoKaW5saW5lIGludApnZXRjX3VubG9ja2VkIChG
SUxFICpfX2ZwKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoX19mcCktPl9JT19yZWFkX3B0ciA+PSAo
X19mcCktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKF9fZnApIDogKih1bnNpZ25lZCBjaGFyICop
IChfX2ZwKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoKaW5saW5lIGludApnZXRjaGFyX3VubG9ja2Vk
ICh2b2lkKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoc3RkaW4pLT5fSU9fcmVhZF9wdHIgPj0gKHN0
ZGluKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAoc3RkaW4pIDogKih1bnNpZ25lZCBjaGFyICop
IChzdGRpbiktPl9JT19yZWFkX3B0cisrKTsKfQoKCgoKaW5saW5lIGludApwdXRjaGFyIChpbnQg
X19jKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9JT19wdXRjIChfX2MsIHN0ZG91dCk7Cn0KCgoKCmlu
bGluZSBpbnQKZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0ciA+PSAoX19zdHJlYW0pLT5f
SU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3RyZWFtLCAodW5zaWduZWQgY2hhcikgKF9f
YykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0cisrID0gKF9f
YykpKTsKfQoKCgoKCmlubGluZSBpbnQKcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19z
dHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyID49
IChfX3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoX19zdHJlYW0sICh1bnNp
Z25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCooX19zdHJlYW0pLT5fSU9fd3Jp
dGVfcHRyKysgPSAoX19jKSkpOwp9CgoKaW5saW5lIGludApwdXRjaGFyX3VubG9ja2VkIChpbnQg
X19jKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKHN0ZG91dCktPl9JT193cml0ZV9wdHIgPj0gKHN0
ZG91dCktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoc3Rkb3V0LCAodW5zaWduZWQgY2hh
cikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKHN0ZG91dCktPl9JT193cml0ZV9wdHIrKyA9
IChfX2MpKSk7Cn0KIyAxMTAgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDMKaW5saW5lIGlu
dApmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiAoKChf
X3N0cmVhbSktPl9mbGFncyAmIDB4MTApICE9IDApOwp9CgoKaW5saW5lIGludApmZXJyb3JfdW5s
b2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+
X2ZsYWdzICYgMHgyMCkgIT0gMCk7Cn0KIyA2NDMgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMK
Cgp9CgojIDIgImdjY19idWcuY2MiIDIKCiMgMzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAz
CiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8yLjk2L2luY2x1ZGUvc3Rk
ZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKZXh0ZXJuICJDIiB7
CgojIDk0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBp
bnQgcXVvdDsKICAgIGludCByZW07CiAgfSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAg
ICBsb25nIGludCBxdW90OwogICAgbG9uZyBpbnQgcmVtOwogIH0gbGRpdl90OwojIDEzMyAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21h
eCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpf
X25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBh
dG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBs
b25nIGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq
X19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgojIDE2MyAiL3Vzci9pbmNsdWRlL3N0ZGxp
Yi5oIiAzCmV4dGVybiBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3Vs
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAg
dGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9xIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9f
ZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhy
b3cgKCk7CgoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoK
X19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAg
IHRocm93ICgpOwojIDI1MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBkb3VibGUg
X19zdHJ0b2RfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBp
bnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFs
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0
aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBf
X3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91
cCkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfaW50ZXJu
YWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQg
X19ncm91cCkgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50
IF9fc3RydG9sbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19i
YXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2ln
bmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmlj
dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkKICAgICB0
aHJvdyAoKTsKIyAyOTQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gX19pbmxpbmUg
ZG91YmxlCnN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2RfaW50ZXJuYWwg
KF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludApzdHJ0b2wg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLAogICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xfaW50
ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIHVu
c2lnbmVkIGxvbmcgaW50CnN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAo
KQp7CiAgcmV0dXJuIF9fc3RydG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNl
LCAwKTsKfQoKIyAzMjYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpfX2V4dGVuc2lvbl9fIGV4
dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFz
ZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRw
dHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQg
bG9uZyBsb25nIGludApzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkK
ewogIHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2Us
IDApOwp9CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3Ry
dG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0
b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0ZW5zaW9u
X18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91bGwgKF9fY29u
c3QgY2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwK
ICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b3VsbF9pbnRl
cm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCmV4dGVybiBfX2lubGluZSBk
b3VibGUKYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3Ry
dG9kIChfX25wdHIsIChjaGFyICoqKSBfX251bGwpOwp9CmV4dGVybiBfX2lubGluZSBpbnQKYXRv
aSAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gKGludCkgc3RydG9s
IChfX25wdHIsIChjaGFyICoqKSBfX251bGwsIDEwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBp
bnQKYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9s
IChfX25wdHIsIChjaGFyICoqKSBfX251bGwsIDEwKTsKfQoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJu
IF9faW5saW5lIGxvbmcgbG9uZyBpbnQKYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJv
dyAoKQp7CiAgcmV0dXJuIHN0cnRvbGwgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwgMTApOwp9
CiMgMzg1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcg
aW50IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKF9fY29uc3QgY2hhciAq
X19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKIyAyOCAiL3Vzci9p
bmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKZXh0ZXJuICJDIiB7CgoKCgp0eXBlZGVmIF9fdV9jaGFy
IHVfY2hhcjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVfaW50
Owp0eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVk
ZWYgX191X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKdHlwZWRl
ZiBfX2xvZmZfdCBsb2ZmX3Q7CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKIyA1OCAiL3Vzci9p
bmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoKCnR5cGVkZWYg
X19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoKCgoKdHlwZWRlZiBf
X25saW5rX3QgbmxpbmtfdDsKCgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsKIyA5NiAiL3Vzci9p
bmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19waWRfdCBwaWRfdDsKCgoKCnR5cGVkZWYg
X19pZF90IGlkX3Q7CgoKCgp0eXBlZGVmIF9fc3NpemVfdCBzc2l6ZV90OwoKCgoKdHlwZWRlZiBf
X2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJfdDsKCgoKdHlwZWRlZiBf
X2tleV90IGtleV90OwojIDEyNyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgNzAgIi91
c3IvaW5jbHVkZS90aW1lLmgiIDEgMwp0eXBlZGVmIF9fdGltZV90IHRpbWVfdDsKCiMgODIgIi91
c3IvaW5jbHVkZS90aW1lLmgiIDMKdHlwZWRlZiBfX2Nsb2NraWRfdCBjbG9ja2lkX3Q7CgojIDk0
ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7CgojIDEy
NyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKIyAxNDEgIi91c3IvaW5jbHVkZS9zeXMv
dHlwZXMuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9p
bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxNDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAz
CgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hv
cnQgaW50IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKIyAxODQgIi91c3IvaW5j
bHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9f
bW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9f
bW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9f
bW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9f
bW9kZV9fIChfX0RJX18pKSk7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRy
aWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50
MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25l
ZCBpbnQgdV9pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBl
ZGVmIHVuc2lnbmVkIGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJ
X18pKSk7Cgp0eXBlZGVmIGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo
X193b3JkX18pKSk7CgoKCgoKCgoKCgoKIyAzOCAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9l
bmRpYW4uaCIgMiAzCiMgMjA3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgojIDMy
ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9z
ZWxlY3QuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCgojIDIz
ICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMSAzCnR5cGVkZWYgaW50IF9fc2lnX2F0b21p
Y190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3ZhbFso
MTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKV07CiAgfSBfX3NpZ3NldF90
OwoKIyAzNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKCgojIDEwNiAiL3Vzci9p
bmNsdWRlL3RpbWUuaCIgMSAzCnN0cnVjdCB0aW1lc3BlYwogIHsKICAgIGxvbmcgaW50IHR2X3Nl
YzsKICAgIGxvbmcgaW50IHR2X25zZWM7CiAgfTsKCiMgMzkgIi91c3IvaW5jbHVkZS9zeXMvc2Vs
ZWN0LmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKc3RydWN0IHRpbWV2YWw7Cgp0eXBlZGVmIF9f
ZmRfbWFzayBmZF9tYXNrOwoKCnR5cGVkZWYgX19mZF9zZXQgZmRfc2V0OwoKCiMgNzQgIi91c3Iv
aW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMsIF9f
ZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAgIF9fZmRfc2V0
ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAgICAgICAgICAgICBfX2ZkX3NldCAqX19y
ZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpf
X3Jlc3RyaWN0IF9fdGltZW91dCkgdGhyb3cgKCk7CgojIDkyICIvdXNyL2luY2x1ZGUvc3lzL3Nl
bGVjdC5oIiAzCn0KCiMgMjEwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgojIDEg
Ii91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMwojIDIxMyAiL3Vzci9pbmNsdWRlL3N5
cy90eXBlcy5oIiAyIDMKIyAyMjQgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVm
IF9fYmxrY250X3QgYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7
CgoKCnR5cGVkZWYgX19mc2ZpbGNudF90IGZzZmlsY250X3Q7CiMgMjU2ICIvdXNyL2luY2x1ZGUv
c3lzL3R5cGVzLmgiIDMKfQoKIyAzOTIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgoK
CmV4dGVybiBpbnQzMl90IHJhbmRvbSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3Jh
bmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmlu
aXRzdGF0ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19zdGF0ZWJ1ZiwKICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4pIHRocm93ICgpOwoKCgpleHRlcm4gY2hh
ciAqc2V0c3RhdGUgKGNoYXIgKl9fc3RhdGVidWYpIHRocm93ICgpOwoKCgoKCgoKc3RydWN0IHJh
bmRvbV9kYXRhCiAgewogICAgaW50MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAgICBp
bnQzMl90ICpzdGF0ZTsKICAgIGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAgICBp
bnQgcmFuZF9zZXA7CiAgICBpbnQzMl90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJhbmRv
bV9yIChzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAg
ICAgICAgIGludDMyX3QgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGlu
dCBzcmFuZG9tX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIHN0cnVjdCByYW5kb21fZGF0YSAqX19i
dWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBpbml0c3RhdGVfciAodW5zaWduZWQgaW50IF9fc2Vl
ZCwgY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgX19zdGF0ZWxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9k
YXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2V0c3RhdGVfciAo
Y2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGlu
dCByYW5kICh2b2lkKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHNyYW5kICh1bnNpZ25lZCBpbnQg
X19zZWVkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19z
ZWVkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgdGhyb3cg
KCk7CmV4dGVybiBkb3VibGUgZXJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10p
IHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBscmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0
ZXJuIGxvbmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJv
dyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbXJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBs
b25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSB0aHJvdyAoKTsKZXh0
ZXJuIHVuc2lnbmVkIHNob3J0IGludCAqc2VlZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVk
MTZ2WzNdKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50
IF9fcGFyYW1bN10pIHRocm93ICgpOwoKCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNp
Z25lZCBzaG9ydCBpbnQgeFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBhWzNdOwogICAgdW5z
aWduZWQgc2hvcnQgaW50IGM7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgb2xkX3hbM107CiAgICBp
bnQgaW5pdDsKICB9OwoKCgpleHRlcm4gaW50IGRyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0
YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19y
ZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNpZ25l
ZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFu
ZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3Vi
bGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbHJhbmQ0OF9y
IChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAg
ICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4g
aW50IG5yYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAg
ICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0
IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19y
ZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGpyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50
IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf
X3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVz
dHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3JhbmQ0OF9yIChsb25nIGlu
dCBfX3NlZWR2YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKQogICAgIHRocm93ICgp
OwoKZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSwK
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIHRocm93
ICgpOwoKZXh0ZXJuIGludCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzdd
LAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIHRo
cm93ICgpOwojIDUyNiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiB2b2lkICptYWxs
b2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7
CgpleHRlcm4gdm9pZCAqY2FsbG9jIChzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSkKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCmV4dGVybiB2b2lk
ICpyZWFsbG9jICh2b2lkICpfX3B0ciwgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lkIGZyZWUgKHZvaWQgKl9fcHRyKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2ZyZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoKCiMg
MjYgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMSAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2
LXJlZGhhdC1saW51eC8yLjk2L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1
ZGUvYWxsb2NhLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJuIHZvaWQgKmFsbG9jYSAo
c2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKfQoKIyA1NDYgIi91c3IvaW5jbHVkZS9zdGRs
aWIuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCAqdmFsbG9jIChzaXplX3QgX19zaXplKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDU2MCAiL3Vzci9pbmNsdWRlL3N0ZGxp
Yi5oIiAzCmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19ub3JldHVybl9fKSk7CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5jKSAodm9p
ZCkpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX29uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChp
bnQgX19zdGF0dXMsIHZvaWQgKl9fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAgdGhyb3cgKCk7CmV4
dGVybiBpbnQgb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqX19h
cmcpLCB2b2lkICpfX2FyZykKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBleGl0IChp
bnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCiMg
NTg4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmdldGVudiAoX19jb25z
dCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52
IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdXRlbnYg
KGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHNldGVudiAoX19jb25z
dCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwgaW50IF9fcmVwbGFjZSkKICAg
ICB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCB1bnNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUp
IHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGNsZWFyZW52ICh2b2lkKSB0aHJvdyAoKTsKIyA2
MjQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICpf
X3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAoY2hhciAqX190
ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjUxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJu
IGNoYXIgKm1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGlu
dCBzeXN0ZW0gKF9fY29uc3QgY2hhciAqX19jb21tYW5kKSB0aHJvdyAoKTsKCgojIDY3MyAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpyZWFscGF0aCAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3Ry
aWN0IF9fcmVzb2x2ZWQpIHRocm93ICgpOwoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2Zu
X3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwoKCgoKCgoKCmV4dGVybiB2b2lk
ICpic2VhcmNoIChfX2NvbnN0IHZvaWQgKl9fa2V5LCBfX2NvbnN0IHZvaWQgKl9fYmFzZSwKICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBh
cl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIHZvaWQgcXNvcnQgKHZvaWQgKl9fYmFzZSwgc2l6
ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICBfX2NvbXBhcl9m
bl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIGludCBhYnMgKGludCBfX3gpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMgKGxvbmcgaW50IF9f
eCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDcxMSAiL3Vzci9pbmNs
dWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBkaXZfdCBkaXYgKGludCBfX251bWVyLCBpbnQgX19kZW5v
bSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsZGl2
X3QgbGRpdiAobG9uZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgNzI5ICIvdXNyL2luY2x1ZGUvc3RkbGli
LmgiIDMKZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGlu
dCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0
IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmN2dCAoZG91YmxlIF9fdmFsdWUs
IGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAg
ICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpnY3Z0
IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAg
ICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmlj
dCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqcWZjdnQgKGxvbmcgZG91YmxlIF9fdmFs
dWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19k
ZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpxZ2N2
dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQs
IGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3Ry
aWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNp
emVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmN2dF9yIChkb3VibGUgX192YWx1ZSwg
aW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAg
IGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAg
ICAgICAgICAgICBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBxZWN2dF9yIChs
b25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50
ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAg
ICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBxZmN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAg
ICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmlj
dCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6
ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBtYmxlbiAoX19jb25zdCBjaGFy
ICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWJ0b3djICh3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3RvbWIgKGNo
YXIgKl9fcywgd2NoYXJfdCBfX3djaGFyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBtYnN0
b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsCiAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKZXh0
ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVfdCBfX24p
CiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHJwbWF0Y2ggKF9fY29uc3QgY2hhciAq
X19yZXNwb25zZSkgdGhyb3cgKCk7CiMgODUxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0
ZXJuIGludCBnZXRsb2FkYXZnIChkb3VibGUgX19sb2FkYXZnW10sIGludCBfX25lbGVtKSB0aHJv
dyAoKTsKCgoKCgp9CgojIDMgImdjY19idWcuY2MiIDIKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBs
b25nIHVpbnQ2NF90Owp0eXBlZGVmIGxvbmcgbG9uZyBpbnQ2NF90OwoKc3RydWN0IFByb2Nlc3My
IHsKICAgIHVpbnQ2NF90IG5mZXRjaDsKfSAqcHJvY2VzczI7CgpzdHJ1Y3QgVGhyZWFkVGltZXIy
IHsKICAgIHVpbnQ2NF90IHRpbWVfYmFzZTsKCiAgICB1aW50NjRfdCBjdXJyZW50X3RpbWUoKSB7
CiAgICAgICAgcmV0dXJuIHByb2Nlc3MyLT5uZmV0Y2ggLSB0aW1lX2Jhc2U7CiAgICB9Cn0gdGhy
ZWFkVGltZXIyOwoKY2xhc3MgRXZlbnRNb25UaW1pbmcyIHsKcHVibGljOgogICAgc3RhdGljIHVp
bnQ2NF90IHRpbWVfb2ZfYmVjb21lX3NwZWN1bGF0aXZlOwoKICAgIHN0YXRpYyB2b2lkIHZpb2xh
dGUodWludDY0X3Qgc3RvcmVfdGltZSk7Cn07CgoKdWludDY0X3QgRXZlbnRNb25UaW1pbmcyOjp0
aW1lX29mX2JlY29tZV9zcGVjdWxhdGl2ZSA9IDA7CgppbnQKbWFpbihpbnQgYXJnYywgY2hhciAq
KmFyZ3YpCnsKICAgIHByb2Nlc3MyID0gbmV3IFByb2Nlc3MyOwoKCiAgICB0aHJlYWRUaW1lcjIu
dGltZV9iYXNlID0gMzMzNDE4OwogICAgcHJvY2VzczItPm5mZXRjaCA9IDExMzIyNzA7CiAgICBF
dmVudE1vblRpbWluZzI6OnRpbWVfb2ZfYmVjb21lX3NwZWN1bGF0aXZlID0gMDsKCiAgICBFdmVu
dE1vblRpbWluZzI6OnZpb2xhdGUoNzk5MDE2KTsKCiAgICBwcmludGYoIlRFU1QgUEFTU0VEIVxu
Iik7CgogICAgcmV0dXJuIDA7Cn0KCnZvaWQgRXZlbnRNb25UaW1pbmcyOjp2aW9sYXRlKHVpbnQ2
NF90IHN0b3JlX3RpbWUpCnsKICAgIHVpbnQ2NF90IHdvcmtfc29fZmFyID0KICAgICAgICB0aHJl
YWRUaW1lcjIuY3VycmVudF90aW1lKCkgLSB0aW1lX29mX2JlY29tZV9zcGVjdWxhdGl2ZTsKCiAg
ICBpZihzdG9yZV90aW1lIDwgdGhyZWFkVGltZXIyLmN1cnJlbnRfdGltZSgpKSB7CiAgICAgICAg
aWYoKGludDY0X3Qpd29ya19zb19mYXIgPCAwKSB7CiAgICAgICAgICAgIHByaW50ZigiPT09IFRF
U1QgRkFJTEVEISA9PT1cbiIKICAgICAgICAgICAgICAgICAgICJ0aHJlYWRUaW1lcjIuY3VycmVu
dF90aW1lKCkgPSAlbGx1XG4iCiAgICAgICAgICAgICAgICAgICAicHJvY2VzczItPm5mZXRjaCA9
ICVsbHVcbiIKICAgICAgICAgICAgICAgICAgICJ0aHJlYWRUaW1lcjIudGltZV9iYXNlID0gJWxs
dVxuIiwKICAgICAgICAgICAgICAgICAgIHRocmVhZFRpbWVyMi5jdXJyZW50X3RpbWUoKSwKICAg
ICAgICAgICAgICAgICAgIHByb2Nlc3MyLT5uZmV0Y2gsCiAgICAgICAgICAgICAgICAgICB0aHJl
YWRUaW1lcjIudGltZV9iYXNlKTsKCiAgICAgICAgICAgIGFib3J0KCk7CiAgICAgICAgfQogICAg
fQp9Cg==

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