c++/1952: Compiling a reasonably simple sort routine causes the bug

witkop@cs.usm.maine.edu witkop@cs.usm.maine.edu
Mon Feb 12 11:36:00 GMT 2001


>Number:         1952
>Category:       c++
>Synopsis:       Compiling a reasonably simple sort routine causes the bug
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Mon Feb 12 11:36:00 PST 2001
>Closed-Date:
>Last-Modified:
>Originator:     Peter Witkop
>Release:        gcc version 2.95.2 19991024 (release)
>Organization:
>Environment:
Reading specs from /usr/local/lib/gcc-lib/alpha-dec-osf4.0d/2.95.2/specs
>Description:
Compiling the attached code (simple gapsort routine), causes
and 'ice' error message.  Also compiling simialr code, that
does not use macros, but 'static const int' for magic numbers
doesn't cause the compiler error message, but causes a seg fault
before main is called.
>How-To-Repeat:
The bug is triggered with the command 'g++ -g gapsort.compiler_bug.cpp -o gapsort'
The attached file is the pre-precoessed data (what was saved
with the -save-temps option) from the 'gapsort.compiler_bug.cpp'
file.
>Fix:

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

IyAxICJnYXBzb3J0LmNvbXBpbGVyX2J1Zy5jcHAiCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp
Yi9hbHBoYS1kZWMtb3NmNC4wZC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9pb3N0
cmVhbSIgMSAzCiAKIAoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvYWxwaGEtZGVjLW9z
ZjQuMGQvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaW9zdHJlYW0uaCIgMSAzCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCiMgMSAiL3Vzci9s
b2NhbC9saWIvZ2NjLWxpYi9hbHBoYS1kZWMtb3NmNC4wZC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5j
bHVkZS9nKystMy9zdHJlYW1idWYuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoj
cHJhZ21hIGludGVyZmFjZQoKCiAgIAoKCgpleHRlcm4gIkMiIHsKIyAxICIvdXNyL2xvY2FsL2xp
Yi9nY2MtbGliL2FscGhhLWRlYy1vc2Y0LjBkLzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr
Ky0zL2xpYmlvLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3Iv
bG9jYWwvbGliL2djYy1saWIvYWxwaGEtZGVjLW9zZjQuMGQvMi45NS4yLy4uLy4uLy4uLy4uL2Fs
cGhhLWRlYy1vc2Y0LjBkL2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMwogIAoKCgoKCgoKCgoKdHlw
ZWRlZiAgICAgICAgICBpbnQgICBfR19pbnQ4X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19R
SV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCAgX0dfdWludDhfdCBfX2F0dHJpYnV0ZV9fKChf
X21vZGVfXyhfX1FJX18pKSk7CnR5cGVkZWYgICAgICAgICAgaW50ICBfR19pbnQxNl90IF9fYXR0
cmlidXRlX18oKF9fbW9kZV9fKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWlu
dDE2X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19ISV9fKSkpOwp0eXBlZGVmICAgICAgICAg
IGludCAgX0dfaW50MzJfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX1NJX18pKSk7CnR5cGVk
ZWYgdW5zaWduZWQgaW50IF9HX3VpbnQzMl90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fU0lf
XykpKTsKdHlwZWRlZiAgICAgICAgICBpbnQgIF9HX2ludDY0X3QgX19hdHRyaWJ1dGVfXygoX19t
b2RlX18oX19ESV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50NjRfdCBfX2F0dHJp
YnV0ZV9fKChfX21vZGVfXyhfX0RJX18pKSk7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBs
b25nIF9HX2xsb25nOwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9H
X3VsbG9uZzsKCgoKCgoKCgp0eXBlZGVmIGludCBfR19jbG9ja190Owp0eXBlZGVmIGludCBfR19k
ZXZfdDsKdHlwZWRlZiBsb25nIF9HX2Zwb3NfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfZ2lk
X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX2lub190Owp0eXBlZGVmIHVuc2lnbmVkIGludCBf
R19tb2RlX3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX0dfbmxpbmtfdDsKdHlwZWRlZiBsb25n
IF9HX29mZl90Owp0eXBlZGVmIGludCBfR19waWRfdDsKCgoKdHlwZWRlZiBsb25nIGludCBfR19w
dHJkaWZmX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfR19zaWdzZXRfdDsKCgoKdHlwZWRlZiBs
b25nIHVuc2lnbmVkIGludCBfR19zaXplX3Q7CnR5cGVkZWYgaW50IF9HX3RpbWVfdDsKdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgX0dfdWlkX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3djaGFyX3Q7
CgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgbG9uZyBfR19zc2l6ZV90Owp0eXBlZGVmIHVuc2lnbmVk
IGludCBfR193aW50X3Q7CgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2dj
Yy1saWIvYWxwaGEtZGVjLW9zZjQuMGQvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoK
CgogCgoKIyAxOSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9hbHBoYS1kZWMtb3NmNC4wZC8yLjk1
LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xvY2Fs
L2xpYi9nY2MtbGliL2FscGhhLWRlYy1vc2Y0LjBkLzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAz
CgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMgMTMxICIvdXNyL2xv
Y2FsL2xpYi9nY2MtbGliL2FscGhhLWRlYy1vc2Y0LjBkLzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5o
IiAzCgoKIAoKIAoKIyAxOTAgIi91c3IvbG9jYWwvbGliL2djYy1saWIvYWxwaGEtZGVjLW9zZjQu
MGQvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCgoKIAoKIyAyNzEgIi91c3IvbG9j
YWwvbGliL2djYy1saWIvYWxwaGEtZGVjLW9zZjQuMGQvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgi
IDMKCgojIDI4MyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9hbHBoYS1kZWMtb3NmNC4wZC8yLjk1
LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCiAKCiMgMzE3ICIvdXNyL2xvY2FsL2xpYi9nY2Mt
bGliL2FscGhhLWRlYy1vc2Y0LjBkLzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiMgODggIi91c3IvbG9jYWwvbGliL2djYy1saWIvYWxwaGEtZGVj
LW9zZjQuMGQvMi45NS4yLy4uLy4uLy4uLy4uL2FscGhhLWRlYy1vc2Y0LjBkL2luY2x1ZGUvX0df
Y29uZmlnLmgiIDIgMwoKCiMgMzAgIi91c3IvbG9jYWwvbGliL2djYy1saWIvYWxwaGEtZGVjLW9z
ZjQuMGQvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGliaW8uaCIgMiAzCgoKCgoK
CgoKCgoKCgoKCgoKCiAKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9hbHBoYS1kZWMtb3Nm
NC4wZC8yLjk1LjIvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9hbHBoYS1kZWMtb3NmNC4w
ZC8yLjk1LjIvaW5jbHVkZS92YS1hbHBoYS5oIiAxIDMKIAoKIAoKCgoKIAoKCgoKIAoKCgoKCnR5
cGVkZWYgc3RydWN0IHsKICBjaGFyICpfX2Jhc2U7CQkJIAogIGludCBfX29mZnNldDsJCQkgCn0g
X19nbnVjX3ZhX2xpc3Q7CgoKCgogCgoKIyAxMjggIi91c3IvbG9jYWwvbGliL2djYy1saWIvYWxw
aGEtZGVjLW9zZjQuMGQvMi45NS4yL2luY2x1ZGUvdmEtYWxwaGEuaCIgMwoKIyAzNiAiL3Vzci9s
b2NhbC9saWIvZ2NjLWxpYi9hbHBoYS1kZWMtb3NmNC4wZC8yLjk1LjIvaW5jbHVkZS9zdGRhcmcu
aCIgMiAzCgojIDEzMyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9hbHBoYS1kZWMtb3NmNC4wZC8y
Ljk1LjIvaW5jbHVkZS9zdGRhcmcuaCIgMwoKCgoKCgoKCgojIDIwOSAiL3Vzci9sb2NhbC9saWIv
Z2NjLWxpYi9hbHBoYS1kZWMtb3NmNC4wZC8yLjk1LjIvaW5jbHVkZS9zdGRhcmcuaCIgMwoKCgoK
IyA1MCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9hbHBoYS1kZWMtb3NmNC4wZC8yLjk1LjIvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9saWJpby5oIiAyIDMKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgojIDEwNCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9hbHBo
YS1kZWMtb3NmNC4wZC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9saWJpby5oIiAz
CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoK
CgpzdHJ1Y3QgX0lPX2p1bXBfdDsgIHN0cnVjdCBfSU9fRklMRTsKCiAKIyAxNzQgIi91c3IvbG9j
YWwvbGliL2djYy1saWIvYWxwaGEtZGVjLW9zZjQuMGQvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvbGliaW8uaCIgMwoKCgoKCgoKCgogICAgdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7
CgoKCgoKIAoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsK
ICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwogICAKCiAgIAogIGludCBfcG9zOwojIDIwNyAiL3Vz
ci9sb2NhbC9saWIvZ2NjLWxpYi9hbHBoYS1kZWMtb3NmNC4wZC8yLjk1LjIvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9saWJpby5oIiAzCgp9OwoKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2Zs
YWdzOwkJIAoKCiAgIAogICAKICBjaGFyKiBfSU9fcmVhZF9wdHI7CSAKICBjaGFyKiBfSU9fcmVh
ZF9lbmQ7CSAKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwkgCiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7
CSAKICBjaGFyKiBfSU9fd3JpdGVfcHRyOwkgCiAgY2hhciogX0lPX3dyaXRlX2VuZDsJIAogIGNo
YXIqIF9JT19idWZfYmFzZTsJIAogIGNoYXIqIF9JT19idWZfZW5kOwkgCiAgIAogIGNoYXIgKl9J
T19zYXZlX2Jhc2U7ICAKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7ICAgCiAgY2hhciAqX0lPX3Nh
dmVfZW5kOyAgCgogIHN0cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19G
SUxFICpfY2hhaW47CgogIGludCBfZmlsZW5vOwogIGludCBfYmxrc2l6ZTsKCgoKICBfR19vZmZf
dCAgX29mZnNldDsKCgoKICAgCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgY2hhciBf
dW51c2VkOwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKICAgCgoKCgoKCgoKfTsKCgoKCgoKCgoKCgpz
dHJ1Y3QgX0lPX0ZJTEVfcGx1czsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT19zdGRp
bl8sIF9JT19zdGRvdXRfLCBfSU9fc3RkZXJyXzsKCgoKCgogCnR5cGVkZWYgc3RydWN0CnsKICBf
R19zc2l6ZV90ICAoKnJlYWQpICAoc3RydWN0IF9JT19GSUxFICosIHZvaWQgKiwgX0dfc3NpemVf
dCApICA7CiAgX0dfc3NpemVfdCAgKCp3cml0ZSkgIChzdHJ1Y3QgX0lPX0ZJTEUgKiwgY29uc3Qg
dm9pZCAqLCBfR19zc2l6ZV90ICkgIDsKICBfR19mcG9zX3QgICgqc2VlaykgIChzdHJ1Y3QgX0lP
X0ZJTEUgKiwgX0dfb2ZmX3QgLCBpbnQpICA7CiAgaW50ICgqY2xvc2UpICAoc3RydWN0IF9JT19G
SUxFICopICA7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdDsKCiAKc3RydWN0IF9JT19jb29r
aWVfZmlsZQp7CiAgc3RydWN0IF9JT19GSUxFIGZpbGU7CiAgY29uc3Qgdm9pZCAqdnRhYmxlOwog
IHZvaWQgKmNvb2tpZTsKICBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IGlvX2Z1bmN0aW9uczsK
fTsKCgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAgKF9JT19GSUxFICop
ICA7CmV4dGVybiBpbnQgX191ZmxvdyAgKF9JT19GSUxFICopICA7CmV4dGVybiBpbnQgX19vdmVy
ZmxvdyAgKF9JT19GSUxFICosIGludCkgIDsKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gaW50IF9J
T19nZXRjICAoX0lPX0ZJTEUgKl9fZnApICA7CmV4dGVybiBpbnQgX0lPX3B1dGMgIChpbnQgX19j
LCBfSU9fRklMRSAqX19mcCkgIDsKZXh0ZXJuIGludCBfSU9fZmVvZiAgKF9JT19GSUxFICpfX2Zw
KSAgOwpleHRlcm4gaW50IF9JT19mZXJyb3IgIChfSU9fRklMRSAqX19mcCkgIDsKCmV4dGVybiBp
bnQgX0lPX3BlZWtjX2xvY2tlZCAgKF9JT19GSUxFICpfX2ZwKSAgOwoKIAoKCgpleHRlcm4gdm9p
ZCBfSU9fZmxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tm
aWxlICAoX0lPX0ZJTEUgKikgIDsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlICAoX0lPX0ZJ
TEUgKikgIDsKCgoKCgoKCgoKCgoKCmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYgIChfSU9fRklMRSAq
LCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0ICwgaW50ICopICA7CmV4dGVybiBpbnQgX0lP
X3ZmcHJpbnRmICAoX0lPX0ZJTEUgKiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCApICA7
CmV4dGVybiBfR19zc2l6ZV90ICBfSU9fcGFkbiAgKF9JT19GSUxFICosIGludCwgX0dfc3NpemVf
dCApICA7CmV4dGVybiBfR19zaXplX3QgIF9JT19zZ2V0biAgKF9JT19GSUxFICosIHZvaWQgKiwg
X0dfc2l6ZV90ICkgIDsKCgoKCgpleHRlcm4gX0dfZnBvc190ICBfSU9fc2Vla29mZiAgKF9JT19G
SUxFICosIF9HX29mZl90ICwgaW50LCBpbnQpICA7CmV4dGVybiBfR19mcG9zX3QgIF9JT19zZWVr
cG9zICAoX0lPX0ZJTEUgKiwgX0dfZnBvc190ICwgaW50KSAgOwoKCmV4dGVybiB2b2lkIF9JT19m
cmVlX2JhY2t1cF9hcmVhICAoX0lPX0ZJTEUgKikgIDsKCgp9CgoKCiMgMzYgIi91c3IvbG9jYWwv
bGliL2djYy1saWIvYWxwaGEtZGVjLW9zZjQuMGQvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUv
ZysrLTMvc3RyZWFtYnVmLmgiIDIgMwoKfQogCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIv
YWxwaGEtZGVjLW9zZjQuMGQvMi45NS4yL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvYWxw
aGEtZGVjLW9zZjQuMGQvMi45NS4yL2luY2x1ZGUvdmEtYWxwaGEuaCIgMSAzCiAKCiAKCgoKCiAK
CiMgMjUgIi91c3IvbG9jYWwvbGliL2djYy1saWIvYWxwaGEtZGVjLW9zZjQuMGQvMi45NS4yL2lu
Y2x1ZGUvdmEtYWxwaGEuaCIgMwoKCiAKCgoKCgoKCgp0eXBlZGVmIF9fZ251Y192YV9saXN0IHZh
X2xpc3Q7CgojIDQ5ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2FscGhhLWRlYy1vc2Y0LjBkLzIu
OTUuMi9pbmNsdWRlL3ZhLWFscGhhLmgiIDMKCgogCgogCgoKCgoKCgoKCgoKCgoKCgogCgplbnVt
IHsKICBfX25vX3R5cGVfY2xhc3MgPSAtMSwKICBfX3ZvaWRfdHlwZV9jbGFzcywKICBfX2ludGVn
ZXJfdHlwZV9jbGFzcywKICBfX2NoYXJfdHlwZV9jbGFzcywKICBfX2VudW1lcmFsX3R5cGVfY2xh
c3MsCiAgX19ib29sZWFuX3R5cGVfY2xhc3MsCiAgX19wb2ludGVyX3R5cGVfY2xhc3MsCiAgX19y
ZWZlcmVuY2VfdHlwZV9jbGFzcywKICBfX29mZnNldF90eXBlX2NsYXNzLAogIF9fcmVhbF90eXBl
X2NsYXNzLAogIF9fY29tcGxleF90eXBlX2NsYXNzLAogIF9fZnVuY3Rpb25fdHlwZV9jbGFzcywK
ICBfX21ldGhvZF90eXBlX2NsYXNzLAogIF9fcmVjb3JkX3R5cGVfY2xhc3MsCiAgX191bmlvbl90
eXBlX2NsYXNzLAogIF9fYXJyYXlfdHlwZV9jbGFzcywKICBfX3N0cmluZ190eXBlX2NsYXNzLAog
IF9fc2V0X3R5cGVfY2xhc3MsCiAgX19maWxlX3R5cGVfY2xhc3MsCiAgX19sYW5nX3R5cGVfY2xh
c3MKfTsKCiAKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIyAzNiAiL3Vzci9s
b2NhbC9saWIvZ2NjLWxpYi9hbHBoYS1kZWMtb3NmNC4wZC8yLjk1LjIvaW5jbHVkZS9zdGRhcmcu
aCIgMiAzCgojIDEzMyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9hbHBoYS1kZWMtb3NmNC4wZC8y
Ljk1LjIvaW5jbHVkZS9zdGRhcmcuaCIgMwoKCgoKCgoKCgoKIAogCgoKCgoKCgoKCgoKCgojIDE3
NSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9hbHBoYS1kZWMtb3NmNC4wZC8yLjk1LjIvaW5jbHVk
ZS9zdGRhcmcuaCIgMwoKCiAKCgoKIyAyMDUgIi91c3IvbG9jYWwvbGliL2djYy1saWIvYWxwaGEt
ZGVjLW9zZjQuMGQvMi45NS4yL2luY2x1ZGUvc3RkYXJnLmgiIDMKCgoKCgoKCgojIDQwICIvdXNy
L2xvY2FsL2xpYi9nY2MtbGliL2FscGhhLWRlYy1vc2Y0LjBkLzIuOTUuMi8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAyIDMKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4
dGVybiAiQysrIiB7CmNsYXNzIGlzdHJlYW07ICAKY2xhc3Mgb3N0cmVhbTsgY2xhc3Mgc3RyZWFt
YnVmOwoKIAoKCgoKCgoKdHlwZWRlZiBfR19vZmZfdCAgc3RyZWFtb2ZmOwp0eXBlZGVmIF9HX2Zw
b3NfdCAgc3RyZWFtcG9zOwoKdHlwZWRlZiBfR19zc2l6ZV90ICBzdHJlYW1zaXplOwoKdHlwZWRl
ZiB1bnNpZ25lZCBsb25nIF9fZm10ZmxhZ3M7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX2lvc3Rh
dGU7CgpzdHJ1Y3QgX2lvc19maWVsZHMKeyAgCiAgICBzdHJlYW1idWYgKl9zdHJidWY7CiAgICBv
c3RyZWFtKiBfdGllOwogICAgaW50IF93aWR0aDsKICAgIF9fZm10ZmxhZ3MgX2ZsYWdzOwogICAg
c2hvcnQgIF9maWxsOwogICAgX19pb3N0YXRlIF9zdGF0ZTsKICAgIF9faW9zdGF0ZSBfZXhjZXB0
aW9uczsKICAgIGludCBfcHJlY2lzaW9uOwoKICAgIHZvaWQgKl9hcnJheXM7ICAKfTsKCgoKCgoK
CgoKCgoKCgoKIyAxMjQgIi91c3IvbG9jYWwvbGliL2djYy1saWIvYWxwaGEtZGVjLW9zZjQuMGQv
Mi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDMKCgpjbGFzcyBp
b3MgOiBwdWJsaWMgX2lvc19maWVsZHMgewogIGlvcyYgb3BlcmF0b3I9KGlvcyYpOyAgIAogIGlv
cyAoY29uc3QgaW9zJik7ICAKICBwdWJsaWM6CiAgICB0eXBlZGVmIF9fZm10ZmxhZ3MgZm10Zmxh
Z3M7CiAgICB0eXBlZGVmIGludCBpb3N0YXRlOwogICAgdHlwZWRlZiBpbnQgb3Blbm1vZGU7CiAg
ICB0eXBlZGVmIF9HX3NzaXplX3QgIHN0cmVhbXNpemU7CiAgICBlbnVtIGlvX3N0YXRlIHsKCWdv
b2RiaXQgPSAwICwKCWVvZmJpdCA9IDEgLAoJZmFpbGJpdCA9IDIgLAoJYmFkYml0ID0gNCAgfTsK
ICAgIGVudW0gb3Blbl9tb2RlIHsKCWluID0gMSAsCglvdXQgPSAyICwKCWF0ZSA9IDQgLAoJYXBw
ID0gOCAsCgl0cnVuYyA9IDE2ICwKCW5vY3JlYXRlID0gMzIgLAoJbm9yZXBsYWNlID0gNjQgLAoJ
YmluID0gMTI4ICwgIAoJYmluYXJ5ID0gMTI4ICB9OwogICAgZW51bSBzZWVrX2RpciB7IGJlZywg
Y3VyLCBlbmR9OwogICAgdHlwZWRlZiBlbnVtIHNlZWtfZGlyIHNlZWtkaXI7CiAgICAgCiAgICBl
bnVtIHsgc2tpcHdzPSAwMSAsCgkgICBsZWZ0PSAwMiAsIHJpZ2h0PSAwNCAsIGludGVybmFsPSAw
MTAgLAoJICAgZGVjPSAwMjAgLCBvY3Q9IDA0MCAsIGhleD0gMDEwMCAsCgkgICBzaG93YmFzZT0g
MDIwMCAsIHNob3dwb2ludD0gMDQwMCAsCgkgICB1cHBlcmNhc2U9IDAxMDAwICwgc2hvd3Bvcz0g
MDIwMDAgLAoJICAgc2NpZW50aWZpYz0gMDQwMDAgLCBmaXhlZD0gMDEwMDAwICwKCSAgIHVuaXRi
dWY9IDAyMDAwMCAsIHN0ZGlvPSAwNDAwMDAgCgoKCgkgICB9OwogICAgZW51bSB7ICAKCWJhc2Vm
aWVsZD1kZWMrb2N0K2hleCwKCWZsb2F0ZmllbGQgPSBzY2llbnRpZmljK2ZpeGVkLAoJYWRqdXN0
ZmllbGQgPSBsZWZ0K3JpZ2h0K2ludGVybmFsCiAgICB9OwoKIyAxNzcgIi91c3IvbG9jYWwvbGli
L2djYy1saWIvYWxwaGEtZGVjLW9zZjQuMGQvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvc3RyZWFtYnVmLmgiIDMKCgogICAgb3N0cmVhbSogdGllKCkgY29uc3QgeyByZXR1cm4gX3Rp
ZTsgfQogICAgb3N0cmVhbSogdGllKG9zdHJlYW0qIHZhbCkgeyBvc3RyZWFtKiBzYXZlPV90aWU7
IF90aWU9dmFsOyByZXR1cm4gc2F2ZTsgfQoKICAgICAKICAgIHNob3J0ICBmaWxsKCkgY29uc3Qg
eyByZXR1cm4gX2ZpbGw7IH0KICAgIHNob3J0ICBmaWxsKHNob3J0ICBuZXdmKQoJe3Nob3J0ICBv
bGRmID0gX2ZpbGw7IF9maWxsID0gbmV3ZjsgcmV0dXJuIG9sZGY7fQogICAgZm10ZmxhZ3MgZmxh
Z3MoKSBjb25zdCB7IHJldHVybiBfZmxhZ3M7IH0KICAgIGZtdGZsYWdzIGZsYWdzKGZtdGZsYWdz
IG5ld192YWwpIHsKCWZtdGZsYWdzIG9sZF92YWwgPSBfZmxhZ3M7IF9mbGFncyA9IG5ld192YWw7
IHJldHVybiBvbGRfdmFsOyB9CiAgICBpbnQgcHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gX3By
ZWNpc2lvbjsgfQogICAgaW50IHByZWNpc2lvbihpbnQgbmV3cCkgewoJdW5zaWduZWQgc2hvcnQg
b2xkcCA9IF9wcmVjaXNpb247IF9wcmVjaXNpb24gPSAodW5zaWduZWQgc2hvcnQpbmV3cDsKCXJl
dHVybiBvbGRwOyB9CiAgICBmbXRmbGFncyBzZXRmKGZtdGZsYWdzIHZhbCkgewoJZm10ZmxhZ3Mg
b2xkYml0cyA9IF9mbGFnczsKCV9mbGFncyB8PSB2YWw7IHJldHVybiBvbGRiaXRzOyB9CiAgICBm
bXRmbGFncyBzZXRmKGZtdGZsYWdzIHZhbCwgZm10ZmxhZ3MgbWFzaykgewoJZm10ZmxhZ3Mgb2xk
Yml0cyA9IF9mbGFnczsKCV9mbGFncyA9IChfZmxhZ3MgJiB+bWFzaykgfCAodmFsICYgbWFzayk7
IHJldHVybiBvbGRiaXRzOyB9CiAgICBmbXRmbGFncyB1bnNldGYoZm10ZmxhZ3MgbWFzaykgewoJ
Zm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFnczsKCV9mbGFncyAmPSB+bWFzazsgcmV0dXJuIG9sZGJp
dHM7IH0KICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIF93aWR0aDsgfQogICAgaW50IHdp
ZHRoKGludCB2YWwpIHsgaW50IHNhdmUgPSBfd2lkdGg7IF93aWR0aCA9IHZhbDsgcmV0dXJuIHNh
dmU7IH0KCgoKCiAgICB2b2lkIF90aHJvd19mYWlsdXJlKCkgY29uc3QgeyB9CgogICAgdm9pZCBj
bGVhcihpb3N0YXRlIHN0YXRlID0gMCkgewoJX3N0YXRlID0gX3N0cmJ1ZiA/IHN0YXRlIDogc3Rh
dGV8YmFkYml0OwoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9
CiAgICB2b2lkIHNldChpb3N0YXRlIGZsYWcpIHsgX3N0YXRlIHw9IGZsYWc7CglpZiAoX3N0YXRl
ICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KICAgIHZvaWQgc2V0c3RhdGUoaW9z
dGF0ZSBmbGFnKSB7IF9zdGF0ZSB8PSBmbGFnOyAgCglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMp
IF90aHJvd19mYWlsdXJlKCk7IH0KICAgIGludCBnb29kKCkgY29uc3QgeyByZXR1cm4gX3N0YXRl
ID09IDA7IH0KICAgIGludCBlb2YoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgJiBpb3M6OmVvZmJp
dDsgfQogICAgaW50IGZhaWwoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgJiAoaW9zOjpiYWRiaXR8
aW9zOjpmYWlsYml0KTsgfQogICAgaW50IGJhZCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIGlv
czo6YmFkYml0OyB9CiAgICBpb3N0YXRlIHJkc3RhdGUoKSBjb25zdCB7IHJldHVybiBfc3RhdGU7
IH0KICAgIG9wZXJhdG9yIHZvaWQqKCkgY29uc3QgeyByZXR1cm4gZmFpbCgpID8gKHZvaWQqKTAg
OiAodm9pZCopKC0xKTsgfQogICAgaW50IG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIGZhaWwo
KTsgfQogICAgaW9zdGF0ZSBleGNlcHRpb25zKCkgY29uc3QgeyByZXR1cm4gX2V4Y2VwdGlvbnM7
IH0KICAgIHZvaWQgZXhjZXB0aW9ucyhpb3N0YXRlIGVuYWJsZSkgewoJX2V4Y2VwdGlvbnMgPSBl
bmFibGU7CglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KCiAg
ICBzdHJlYW1idWYqIHJkYnVmKCkgY29uc3QgeyByZXR1cm4gX3N0cmJ1ZjsgfQogICAgc3RyZWFt
YnVmKiByZGJ1ZihzdHJlYW1idWYgKl9zKSB7CiAgICAgIHN0cmVhbWJ1ZiAqX29sZCA9IF9zdHJi
dWY7IF9zdHJidWYgPSBfczsgY2xlYXIgKCk7IHJldHVybiBfb2xkOyB9CgogICAgc3RhdGljIGlu
dCBzeW5jX3dpdGhfc3RkaW8oaW50IG9uKTsKICAgIHN0YXRpYyB2b2lkIHN5bmNfd2l0aF9zdGRp
bygpIHsgc3luY193aXRoX3N0ZGlvKDEpOyB9CiAgICBzdGF0aWMgZm10ZmxhZ3MgYml0YWxsb2Mo
KTsKICAgIHN0YXRpYyBpbnQgeGFsbG9jKCk7CiAgICB2b2lkKiYgcHdvcmQoaW50KTsKICAgIHZv
aWQqIHB3b3JkKGludCkgY29uc3Q7CiAgICBsb25nJiBpd29yZChpbnQpOwogICAgbG9uZyBpd29y
ZChpbnQpIGNvbnN0OwoKCgoKCgoKCgogICAgIAogICAgY2xhc3MgSW5pdCB7CiAgICBwdWJsaWM6
CiAgICAgIEluaXQgKCkgeyB9CiAgICB9OwoKICBwcm90ZWN0ZWQ6CiAgICBpbmxpbmUgaW9zKHN0
cmVhbWJ1Ziogc2IgPSAwLCBvc3RyZWFtKiB0aWVfdG8gPSAwKTsKICAgIGlubGluZSB2aXJ0dWFs
IH5pb3MoKTsKICAgIGlubGluZSB2b2lkIGluaXQoc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGll
ID0gMCk7Cn07CgoKCgp0eXBlZGVmIGlvczo6c2Vla19kaXIgX3NlZWtfZGlyOwoKCiAKIAogCiAK
IAoKIAogCmNsYXNzIHN0cmVhbW1hcmtlciA6IHByaXZhdGUgX0lPX21hcmtlciB7CiAgICBmcmll
bmQgY2xhc3Mgc3RyZWFtYnVmOwogICAgdm9pZCBzZXRfb2Zmc2V0KGludCBvZmZzZXQpIHsgX3Bv
cyA9IG9mZnNldDsgfQogIHB1YmxpYzoKICAgIHN0cmVhbW1hcmtlcihzdHJlYW1idWYgKnNiKTsK
ICAgIH5zdHJlYW1tYXJrZXIoKTsKICAgIGludCBzYXZpbmcoKSB7IHJldHVybiAgMTsgfQogICAg
aW50IGRlbHRhKHN0cmVhbW1hcmtlciYpOwogICAgaW50IGRlbHRhKCk7Cn07CgpzdHJ1Y3Qgc3Ry
ZWFtYnVmIDogcHVibGljIF9JT19GSUxFIHsgIAogICAgZnJpZW5kIGNsYXNzIGlvczsKICAgIGZy
aWVuZCBjbGFzcyBpc3RyZWFtOwogICAgZnJpZW5kIGNsYXNzIG9zdHJlYW07CiAgICBmcmllbmQg
Y2xhc3Mgc3RyZWFtbWFya2VyOwogICAgY29uc3Qgdm9pZCAqJl92dGFibGUoKSB7IHJldHVybiAq
KGNvbnN0IHZvaWQqKikoKF9JT19GSUxFKil0aGlzICsgMSk7IH0KICBwcm90ZWN0ZWQ6CiAgICBz
dGF0aWMgc3RyZWFtYnVmKiBfbGlzdF9hbGw7ICAKICAgIF9JT19GSUxFKiYgeGNoYWluKCkgeyBy
ZXR1cm4gX2NoYWluOyB9CiAgICB2b2lkIF91bl9saW5rKCk7CiAgICB2b2lkIF9saW5rX2luKCk7
CiAgICBjaGFyKiBncHRyKCkgY29uc3QKICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/
IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9wdHI7IH0KICAgIGNoYXIqIHBwdHIoKSBjb25zdCB7
IHJldHVybiBfSU9fd3JpdGVfcHRyOyB9CiAgICBjaGFyKiBlZ3B0cigpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0K
ICAgIGNoYXIqIGVwcHRyKCkgY29uc3QgeyByZXR1cm4gX0lPX3dyaXRlX2VuZDsgfQogICAgY2hh
ciogcGJhc2UoKSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfYmFzZTsgfQogICAgY2hhciogZWJh
Y2soKSBjb25zdAogICAgICB7IHJldHVybiBfZmxhZ3MgICYgMHgxMDAgID8gX0lPX3NhdmVfYmFz
ZSA6IF9JT19yZWFkX2Jhc2U7fQogICAgY2hhciogYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9JT19i
dWZfYmFzZTsgfQogICAgY2hhciogZWJ1ZigpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZfZW5kOyB9
CiAgICBpbnQgYmxlbigpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZfZW5kIC0gX0lPX2J1Zl9iYXNl
OyB9CiAgICB2b2lkIHhwdXRfY2hhcihjaGFyIGMpIHsgKl9JT193cml0ZV9wdHIrKyA9IGM7IH0K
ICAgIGludCB4ZmxhZ3MoKSB7IHJldHVybiBfZmxhZ3MgOyB9CiAgICBpbnQgeGZsYWdzKGludCBm
KSB7aW50IGZsID0gX2ZsYWdzIDsgX2ZsYWdzICA9IGY7IHJldHVybiBmbDt9CiAgICB2b2lkIHhz
ZXRmbGFncyhpbnQgZikgeyBfZmxhZ3MgIHw9IGY7IH0KICAgIHZvaWQgeHNldGZsYWdzKGludCBm
LCBpbnQgbWFzaykKICAgICAgeyBfZmxhZ3MgID0gKF9mbGFncyAgJiB+bWFzaykgfCAoZiAmIG1h
c2spOyB9CiAgICB2b2lkIGdidW1wKGludCBuKQogICAgICB7IF9mbGFncyAgJiAweDEwMCAgPyAo
X0lPX3NhdmVfYmFzZSs9bik6KF9JT19yZWFkX3B0cis9bik7fQogICAgdm9pZCBwYnVtcChpbnQg
bikgeyBfSU9fd3JpdGVfcHRyICs9IG47IH0KICAgIHZvaWQgc2V0YihjaGFyKiBiLCBjaGFyKiBl
YiwgaW50IGE9MCk7CiAgICB2b2lkIHNldHAoY2hhciogcCwgY2hhciogZXApCiAgICAgIHsgX0lP
X3dyaXRlX2Jhc2U9X0lPX3dyaXRlX3B0cj1wOyBfSU9fd3JpdGVfZW5kPWVwOyB9CiAgICB2b2lk
IHNldGcoY2hhciogZWIsIGNoYXIqIGcsIGNoYXIgKmVnKSB7CiAgICAgIGlmIChfZmxhZ3MgICYg
MHgxMDAgKSBfSU9fZnJlZV9iYWNrdXBfYXJlYSh0aGlzKTsgCiAgICAgIF9JT19yZWFkX2Jhc2Ug
PSBlYjsgX0lPX3JlYWRfcHRyID0gZzsgX0lPX3JlYWRfZW5kID0gZWc7IH0KICAgIGNoYXIgKnNo
b3J0YnVmKCkgeyByZXR1cm4gX3Nob3J0YnVmOyB9CgogICAgaW50IGluX2JhY2t1cCgpIHsgcmV0
dXJuIF9mbGFncyAmIDB4MTAwIDsgfQogICAgIAogICAgY2hhciAqR2Jhc2UoKSB7IHJldHVybiBp
bl9iYWNrdXAoKSA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9iYXNlOyB9CiAgICAgCiAgICBj
aGFyICplR3B0cigpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3NhdmVfZW5kIDogX0lPX3Jl
YWRfZW5kOyB9CiAgICAgCiAgICBjaGFyICpCYmFzZSgpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8g
X0lPX3JlYWRfYmFzZSA6IF9JT19zYXZlX2Jhc2U7IH0KICAgIGNoYXIgKkJwdHIoKSB7IHJldHVy
biBfSU9fYmFja3VwX2Jhc2U7IH0KICAgICAKICAgIGNoYXIgKmVCcHRyKCkgeyByZXR1cm4gaW5f
YmFja3VwKCkgPyBfSU9fcmVhZF9lbmQgOiBfSU9fc2F2ZV9lbmQ7IH0KICAgIGNoYXIgKk5iYXNl
KCkgeyByZXR1cm4gX0lPX3NhdmVfYmFzZTsgfQogICAgY2hhciAqZU5wdHIoKSB7IHJldHVybiBf
SU9fc2F2ZV9lbmQ7IH0KICAgIGludCBoYXZlX2JhY2t1cCgpIHsgcmV0dXJuIF9JT19zYXZlX2Jh
c2UgIT0gX19udWxsIDsgfQogICAgaW50IGhhdmVfbWFya2VycygpIHsgcmV0dXJuIF9tYXJrZXJz
ICE9IF9fbnVsbCA7IH0KICAgIHZvaWQgZnJlZV9iYWNrdXBfYXJlYSgpOwogICAgdm9pZCB1bnNh
dmVfbWFya2VycygpOyAgCiAgICBpbnQgcHV0X21vZGUoKSB7IHJldHVybiBfZmxhZ3MgJiAweDgw
MCA7IH0KICAgIGludCBzd2l0Y2hfdG9fZ2V0X21vZGUoKTsKICAgIAogICAgc3RyZWFtYnVmKGlu
dCBmbGFncz0wKTsKICBwdWJsaWM6CiAgICBzdGF0aWMgaW50IGZsdXNoX2FsbCgpOwogICAgc3Rh
dGljIHZvaWQgZmx1c2hfYWxsX2xpbmVidWZmZXJlZCgpOyAgCiAgICB2aXJ0dWFsIH5zdHJlYW1i
dWYoKTsKICAgIHZpcnR1YWwgaW50IG92ZXJmbG93KGludCBjID0gKC0xKSApOyAgCiAgICB2aXJ0
dWFsIGludCB1bmRlcmZsb3coKTsgIAogICAgdmlydHVhbCBpbnQgdWZsb3coKTsgIAogICAgdmly
dHVhbCBpbnQgcGJhY2tmYWlsKGludCBjKTsKIAogICAgdmlydHVhbCBzdHJlYW1zaXplIHhzcHV0
bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHhz
Z2V0bihjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vla29m
ZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCk7CiAgICB2
aXJ0dWFsIHN0cmVhbXBvcyBzZWVrcG9zKHN0cmVhbXBvcyBwb3MsIGludCBtb2RlID0gaW9zOjpp
bnxpb3M6Om91dCk7CgogICAgc3RyZWFtcG9zIHB1YnNlZWtvZmYoc3RyZWFtb2ZmIG8sIF9zZWVr
X2RpciBkLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KQogICAgICB7IHJldHVybiBfSU9fc2Vl
a29mZiAodGhpcywgbywgZCwgbW9kZSk7IH0KICAgIHN0cmVhbXBvcyBwdWJzZWVrcG9zKHN0cmVh
bXBvcyBwb3MsIGludCBtb2RlID0gaW9zOjppbnxpb3M6Om91dCkKICAgICAgeyByZXR1cm4gX0lP
X3NlZWtwb3MgKHRoaXMsIHBvcywgbW9kZSk7IH0KICAgIHN0cmVhbXBvcyBzc2Vla29mZihzdHJl
YW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCk7CiAgICBzdHJlYW1w
b3Mgc3NlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KTsK
ICAgIHZpcnR1YWwgc3RyZWFtYnVmKiBzZXRidWYoY2hhciogcCwgaW50IGxlbik7CiAgICB2aXJ0
dWFsIGludCBzeW5jKCk7CiAgICB2aXJ0dWFsIGludCBkb2FsbG9jYXRlKCk7CgogICAgaW50IHNl
ZWttYXJrKHN0cmVhbW1hcmtlciYgbWFyaywgaW50IGRlbHRhID0gMCk7CiAgICBpbnQgc3B1dGJh
Y2tjKGNoYXIgYyk7CiAgICBpbnQgc3VuZ2V0YygpOwogICAgaW50IHVuYnVmZmVyZWQoKSB7IHJl
dHVybiBfZmxhZ3MgJiAyICA/IDEgOiAwOyB9CiAgICBpbnQgbGluZWJ1ZmZlcmVkKCkgeyByZXR1
cm4gX2ZsYWdzICYgMHgyMDAgID8gMSA6IDA7IH0KICAgIHZvaWQgdW5idWZmZXJlZChpbnQgaSkK
CXsgaWYgKGkpIF9mbGFncyB8PSAyIDsgZWxzZSBfZmxhZ3MgJj0gfjIgOyB9CiAgICB2b2lkIGxp
bmVidWZmZXJlZChpbnQgaSkKCXsgaWYgKGkpIF9mbGFncyB8PSAweDIwMCA7IGVsc2UgX2ZsYWdz
ICY9IH4weDIwMCA7IH0KICAgIGludCBhbGxvY2F0ZSgpIHsgIAoJaWYgKGJhc2UoKSB8fCB1bmJ1
ZmZlcmVkKCkpIHJldHVybiAwOwoJZWxzZSByZXR1cm4gZG9hbGxvY2F0ZSgpOyB9CiAgICAgCiAg
ICB2b2lkIGFsbG9jYnVmKCkgeyBpZiAoYmFzZSgpID09IF9fbnVsbCApIGRvYWxsb2NidWYoKTsg
fQogICAgdm9pZCBkb2FsbG9jYnVmKCk7CiAgICBpbnQgaW5fYXZhaWwoKSB7IHJldHVybiBfSU9f
cmVhZF9lbmQgLSBfSU9fcmVhZF9wdHI7IH0KICAgIGludCBvdXRfd2FpdGluZygpIHsgcmV0dXJu
IF9JT193cml0ZV9wdHIgLSBfSU9fd3JpdGVfYmFzZTsgfQogICAgc3RyZWFtc2l6ZSBzcHV0bihj
b25zdCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIHhzcHV0bihzLCBuKTsgfQogICAg
c3RyZWFtc2l6ZSBwYWRuKGNoYXIgcGFkLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIF9JT19wYWRu
KHRoaXMsIHBhZCwgbik7IH0KICAgIHN0cmVhbXNpemUgc2dldG4oY2hhciogcywgc3RyZWFtc2l6
ZSBuKSB7IHJldHVybiBfSU9fc2dldG4odGhpcywgcywgbik7IH0KICAgIGludCBpZ25vcmUoaW50
KTsKICAgIGludCBnZXRfY29sdW1uKCk7CiAgICBpbnQgc2V0X2NvbHVtbihpbnQpOwogICAgbG9u
ZyBzZ2V0bGluZShjaGFyKiBidWYsIF9HX3NpemVfdCAgbiwgY2hhciBkZWxpbSwgaW50IHB1dGJh
Y2tfZGVsaW0pOwogICAgaW50IHNwdXRjKGludCBjKSB7IHJldHVybiBfSU9fcHV0YyhjLCB0aGlz
KTsgfQogICAgaW50IHNidW1wYygpIHsgcmV0dXJuIF9JT19nZXRjKHRoaXMpOyB9CiAgICBpbnQg
c2dldGMoKSB7IHJldHVybiAoKCAgdGhpcyAgKS0+X0lPX3JlYWRfcHRyID49ICggIHRoaXMgICkt
Pl9JT19yZWFkX2VuZCAmJiBfX3VuZGVyZmxvdyAoICB0aGlzICApID09ICgtMSkgID8gKC0xKSAg
OiAqKHVuc2lnbmVkIGNoYXIgKikgKCAgdGhpcyAgKS0+X0lPX3JlYWRfcHRyKSAgOyB9CiAgICBp
bnQgc25leHRjKCkgewoJaWYgKF9JT19yZWFkX3B0ciA+PSBfSU9fcmVhZF9lbmQgJiYgX191bmRl
cmZsb3codGhpcykgPT0gKC0xKSApCgkgIHJldHVybiAoLTEpIDsKCWVsc2UgcmV0dXJuIF9JT19y
ZWFkX3B0cisrLCBzZ2V0YygpOyB9CiAgICB2b2lkIHN0b3NzYygpIHsgaWYgKF9JT19yZWFkX3B0
ciA8IF9JT19yZWFkX2VuZCkgX0lPX3JlYWRfcHRyKys7IH0KICAgIGludCB2c2NhbihjaGFyIGNv
bnN0ICpmbXQwLCBfX2dudWNfdmFfbGlzdCAgYXAsIGlvcyogc3RyZWFtID0gX19udWxsICk7CiAg
ICBpbnQgc2NhbihjaGFyIGNvbnN0ICpmbXQwIC4uLik7CiAgICBpbnQgdmZvcm0oY2hhciBjb25z
dCAqZm10MCwgX19nbnVjX3ZhX2xpc3QgIGFwKTsKICAgIGludCBmb3JtKGNoYXIgY29uc3QgKmZt
dDAgLi4uKTsKCgoKCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3JlYWQoY2hhciogYnVmLCBz
dHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c193cml0ZShjb25zdCBj
aGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzeXNfc2VlayhzdHJlYW1v
ZmYsIF9zZWVrX2Rpcik7CiAgICB2aXJ0dWFsIGludCBzeXNfY2xvc2UoKTsKICAgIHZpcnR1YWwg
aW50IHN5c19zdGF0KHZvaWQqKTsgIAoKCgoKfTsKCiAKIAoKY2xhc3MgZmlsZWJ1ZiA6IHB1Ymxp
YyBzdHJlYW1idWYgewogIHByb3RlY3RlZDoKICAgIHZvaWQgaW5pdCgpOwogIHB1YmxpYzoKICAg
IHN0YXRpYyBjb25zdCBpbnQgb3BlbnByb3Q7ICAKICAgIGZpbGVidWYoKTsKICAgIGZpbGVidWYo
aW50IGZkKTsKICAgIGZpbGVidWYoaW50IGZkLCBjaGFyKiBwLCBpbnQgbGVuKTsKCgoKICAgIH5m
aWxlYnVmKCk7CiAgICBmaWxlYnVmKiBhdHRhY2goaW50IGZkKTsKICAgIGZpbGVidWYqIG9wZW4o
Y29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpOwogICAgZmlsZWJ1Ziogb3Bl
bihjb25zdCBjaGFyICpmaWxlbmFtZSwgaW9zOjpvcGVubW9kZSBtb2RlLCBpbnQgcHJvdCA9IDA2
NjQpOwogICAgdmlydHVhbCBpbnQgdW5kZXJmbG93KCk7CiAgICB2aXJ0dWFsIGludCBvdmVyZmxv
dyhpbnQgYyA9ICgtMSkgKTsKICAgIGludCBpc19vcGVuKCkgY29uc3QgeyByZXR1cm4gX2ZpbGVu
byA+PSAwOyB9CiAgICBpbnQgZmQoKSBjb25zdCB7IHJldHVybiBpc19vcGVuKCkgPyBfZmlsZW5v
IDogKC0xKSA7IH0KICAgIGZpbGVidWYqIGNsb3NlKCk7CiAgICB2aXJ0dWFsIGludCBkb2FsbG9j
YXRlKCk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGly
LCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtYnVmKiBzZXRi
dWYoY2hhciogcCwgaW50IGxlbik7CiAgICBzdHJlYW1zaXplIHhzcHV0bihjb25zdCBjaGFyKiBz
LCBzdHJlYW1zaXplIG4pOwogICAgc3RyZWFtc2l6ZSB4c2dldG4oY2hhciogcywgc3RyZWFtc2l6
ZSBuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICBwcm90ZWN0ZWQ6ICAKIAogICAgaW50IGlz
X3JlYWRpbmcoKSB7IHJldHVybiBlYmFjaygpICE9IGVncHRyKCk7IH0KICAgIGNoYXIqIGN1cl9w
dHIoKSB7IHJldHVybiBpc19yZWFkaW5nKCkgPyAgZ3B0cigpIDogcHB0cigpOyB9CiAgICAgCiAg
ICBjaGFyKiBmaWxlX3B0cigpIHsgcmV0dXJuIGVHcHRyKCk7IH0KICAgICAKICAgIHZpcnR1YWwg
c3RyZWFtc2l6ZSBzeXNfcmVhZChjaGFyKiBidWYsIHN0cmVhbXNpemUgc2l6ZSk7CiAgICB2aXJ0
dWFsIHN0cmVhbXBvcyBzeXNfc2VlayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICB2aXJ0dWFs
IHN0cmVhbXNpemUgc3lzX3dyaXRlKGNvbnN0IGNoYXIqLCBzdHJlYW1zaXplKTsKICAgIHZpcnR1
YWwgaW50IHN5c19zdGF0KHZvaWQqKTsgIAogICAgdmlydHVhbCBpbnQgc3lzX2Nsb3NlKCk7CgoK
Cgp9OwoKaW5saW5lIHZvaWQgaW9zOjppbml0KHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZV90
bykgewoJCV9zdGF0ZSA9IHNiID8gaW9zOjpnb29kYml0IDogaW9zOjpiYWRiaXQ7IF9leGNlcHRp
b25zPTA7CgkJX3N0cmJ1Zj1zYjsgX3RpZSA9IHRpZV90bzsgX3dpZHRoPTA7IF9maWxsPScgJzsK
CgkJX2ZsYWdzPWlvczo6c2tpcHdzfGlvczo6ZGVjOwoKCgoJCV9wcmVjaXNpb249NjsgX2FycmF5
cyA9IDA7IH0KCmlubGluZSBpb3M6OmlvcyhzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVfdG8p
IHsgaW5pdChzYiwgdGllX3RvKTsgfQoKaW5saW5lIGlvczo6fmlvcygpIHsKCgoKICAgICAKICAg
ICAKICAgIG9wZXJhdG9yIGRlbGV0ZVtdIChfYXJyYXlzKTsKfQp9ICAKCiMgMzEgIi91c3IvbG9j
YWwvbGliL2djYy1saWIvYWxwaGEtZGVjLW9zZjQuMGQvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1
ZGUvZysrLTMvaW9zdHJlYW0uaCIgMiAzCgoKZXh0ZXJuICJDKysiIHsKY2xhc3MgaXN0cmVhbTsg
Y2xhc3Mgb3N0cmVhbTsKdHlwZWRlZiBpb3MmICgqX19tYW5pcCkoaW9zJik7CnR5cGVkZWYgaXN0
cmVhbSYgKCpfX2ltYW5pcCkoaXN0cmVhbSYpOwp0eXBlZGVmIG9zdHJlYW0mICgqX19vbWFuaXAp
KG9zdHJlYW0mKTsKCmV4dGVybiBpc3RyZWFtJiB3cyhpc3RyZWFtJiBpbnMpOwpleHRlcm4gb3N0
cmVhbSYgZmx1c2gob3N0cmVhbSYgb3V0cyk7CmV4dGVybiBvc3RyZWFtJiBlbmRsKG9zdHJlYW0m
IG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5kcyhvc3RyZWFtJiBvdXRzKTsKCmNsYXNzIG9zdHJl
YW0gOiB2aXJ0dWFsIHB1YmxpYyBpb3MKewogICAgIAogICAgdm9pZCBkb19vc2Z4KCk7CiAgcHVi
bGljOgogICAgb3N0cmVhbSgpIHsgfQogICAgb3N0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFt
KiB0aWVkPSBfX251bGwgKTsKICAgIGludCBvcGZ4KCkgewoJaWYgKCFnb29kKCkpIHJldHVybiAw
OwoJZWxzZSB7IGlmIChfdGllKSBfdGllLT5mbHVzaCgpOyAgOyByZXR1cm4gMTt9IH0KICAgIHZv
aWQgb3NmeCgpIHsgIDsKCQkgIGlmIChmbGFncygpICYgKGlvczo6dW5pdGJ1Znxpb3M6OnN0ZGlv
KSkKCQkgICAgICBkb19vc2Z4KCk7IH0KICAgIG9zdHJlYW0mIGZsdXNoKCk7CiAgICBvc3RyZWFt
JiBwdXQoY2hhciBjKSB7IF9zdHJidWYtPnNwdXRjKGMpOyByZXR1cm4gKnRoaXM7IH0KCgoKCgog
ICAgb3N0cmVhbSYgd3JpdGUoY29uc3QgY2hhciAqcywgc3RyZWFtc2l6ZSBuKTsKICAgIG9zdHJl
YW0mIHdyaXRlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMsIHN0cmVhbXNpemUgbikKICAgICAgeyBy
ZXR1cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMsIG4pO30KICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0
IHNpZ25lZCBjaGFyICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25z
dCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCB2b2lkICpzLCBzdHJlYW1z
aXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3Ry
ZWFtJiBzZWVrcChzdHJlYW1wb3MpOwogICAgb3N0cmVhbSYgc2Vla3Aoc3RyZWFtb2ZmLCBfc2Vl
a19kaXIpOwogICAgc3RyZWFtcG9zIHRlbGxwKCk7CiAgICBvc3RyZWFtJiBmb3JtKGNvbnN0IGNo
YXIgKmZvcm1hdCAuLi4pOwogICAgb3N0cmVhbSYgdmZvcm0oY29uc3QgY2hhciAqZm9ybWF0LCBf
X2dudWNfdmFfbGlzdCAgYXJncyk7CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjaGFyIGMpOwog
ICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykg
PDwgKGNoYXIpYzsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzaWduZWQgY2hhciBjKSB7IHJl
dHVybiAoKnRoaXMpIDw8IChjaGFyKWM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qg
Y2hhciAqcyk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMp
Cgl7IHJldHVybiAoKnRoaXMpIDw8IChjb25zdCBjaGFyKilzOyB9CiAgICBvc3RyZWFtJiBvcGVy
YXRvcjw8KGNvbnN0IHNpZ25lZCBjaGFyICpzKQoJeyByZXR1cm4gKCp0aGlzKSA8PCAoY29uc3Qg
Y2hhciopczsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCB2b2lkICpwKTsKICAgIG9z
dHJlYW0mIG9wZXJhdG9yPDwoaW50IG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25l
ZCBpbnQgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcgbik7CiAgICBvc3RyZWFtJiBv
cGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbik7CgogICAgX19leHRlbnNpb25fXyBvc3RyZWFtJiBv
cGVyYXRvcjw8KGxvbmcgbG9uZyBuKTsKICAgIF9fZXh0ZW5zaW9uX18gb3N0cmVhbSYgb3BlcmF0
b3I8PCh1bnNpZ25lZCBsb25nIGxvbmcgbik7CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzaG9y
dCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKGludCluKTt9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8
KHVuc2lnbmVkIHNob3J0IG4pIHtyZXR1cm4gb3BlcmF0b3I8PCgodW5zaWduZWQgaW50KW4pO30K
CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGJvb2wgYikgeyByZXR1cm4gb3BlcmF0b3I8PCgoaW50
KWIpOyB9CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChkb3VibGUgbik7CiAgICBvc3RyZWFtJiBv
cGVyYXRvcjw8KGZsb2F0IG4pIHsgcmV0dXJuIG9wZXJhdG9yPDwoKGRvdWJsZSluKTsgfQoKCgog
ICAgb3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIGRvdWJsZSBuKSB7IHJldHVybiBvcGVyYXRvcjw8
KChkb3VibGUpbik7IH0KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KF9fb21hbmlwIGZ1bmMpIHsg
cmV0dXJuICgqZnVuYykoKnRoaXMpOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KF9fbWFuaXAg
ZnVuYykgeygqZnVuYykoKnRoaXMpOyByZXR1cm4gKnRoaXM7fQogICAgb3N0cmVhbSYgb3BlcmF0
b3I8PChzdHJlYW1idWYqKTsKCgoKfTsKCmNsYXNzIGlzdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBp
b3MKewogICAgIApwcm90ZWN0ZWQ6CiAgICBfR19zaXplX3QgIF9nY291bnQ7CgogICAgaW50IF9z
a2lwX3dzKCk7CiAgcHVibGljOgogICAgaXN0cmVhbSgpOiBfZ2NvdW50ICgwKSB7IH0KICAgIGlz
dHJlYW0oc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSp0aWVkPSBfX251bGwgKTsKICAgIGlzdHJlYW0m
IGdldChjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0m
IGdldCh1bnNpZ25lZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyBy
ZXR1cm4gZ2V0KChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXQoY2hh
ciYgYyk7CiAgICBpc3RyZWFtJiBnZXQodW5zaWduZWQgY2hhciYgYykgeyByZXR1cm4gZ2V0KChj
aGFyJiljKTsgfQogICAgaXN0cmVhbSYgZ2V0bGluZShjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIg
ZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0mIGdldGxpbmUodW5zaWduZWQgY2hhciogcHRyLCBp
bnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJykKCXsgcmV0dXJuIGdldGxpbmUoKGNoYXIqKXB0ciwg
bGVuLCBkZWxpbSk7IH0KICAgIGlzdHJlYW0mIGdldChzaWduZWQgY2hhciYgYykgIHsgcmV0dXJu
IGdldCgoY2hhciYpYyk7IH0KICAgIGlzdHJlYW0mIGdldChzaWduZWQgY2hhciogcHRyLCBpbnQg
bGVuLCBjaGFyIGRlbGltID0gJ1xuJykKCXsgcmV0dXJuIGdldCgoY2hhciopcHRyLCBsZW4sIGRl
bGltKTsgfQogICAgaXN0cmVhbSYgZ2V0bGluZShzaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBj
aGFyIGRlbGltID0gJ1xuJykKCXsgcmV0dXJuIGdldGxpbmUoKGNoYXIqKXB0ciwgbGVuLCBkZWxp
bSk7IH0KICAgIGlzdHJlYW0mIHJlYWQoY2hhciAqcHRyLCBzdHJlYW1zaXplIG4pOwogICAgaXN0
cmVhbSYgcmVhZCh1bnNpZ25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1
cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgcmVhZChzaWduZWQgY2hhciAq
cHRyLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHJlYWQoKGNoYXIqKXB0ciwgbik7IH0K
ICAgIGlzdHJlYW0mIHJlYWQodm9pZCAqcHRyLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJu
IHJlYWQoKGNoYXIqKXB0ciwgbik7IH0KICAgIGlzdHJlYW0mIGdldChzdHJlYW1idWYmIHNiLCBj
aGFyIGRlbGltID0gJ1xuJyk7CiAgICBpc3RyZWFtJiBnZXRzKGNoYXIgKipzLCBjaGFyIGRlbGlt
ID0gJ1xuJyk7CiAgICBpbnQgaXBmeChpbnQgbmVlZCA9IDApIHsKCWlmICghZ29vZCgpKSB7IHNl
dChpb3M6OmZhaWxiaXQpOyByZXR1cm4gMDsgfQoJZWxzZSB7CgkgICA7CgkgIGlmIChfdGllICYm
IChuZWVkID09IDAgfHwgcmRidWYoKS0+aW5fYXZhaWwoKSA8IG5lZWQpKSBfdGllLT5mbHVzaCgp
OwoJICBpZiAoIW5lZWQgJiYgKGZsYWdzKCkgJiBpb3M6OnNraXB3cykpIHJldHVybiBfc2tpcF93
cygpOwoJICBlbHNlIHJldHVybiAxOwoJfQogICAgfQogICAgaW50IGlwZngwKCkgeyAgCglpZiAo
IWdvb2QoKSkgeyBzZXQoaW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7IH0KCWVsc2UgewoJICAgOwoJ
ICBpZiAoX3RpZSkgX3RpZS0+Zmx1c2goKTsKCSAgaWYgKGZsYWdzKCkgJiBpb3M6OnNraXB3cykg
cmV0dXJuIF9za2lwX3dzKCk7CgkgIGVsc2UgcmV0dXJuIDE7Cgl9CiAgICB9CiAgICBpbnQgaXBm
eDEoKSB7ICAKCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyByZXR1cm4gMDsgfQoJ
ZWxzZSB7CgkgICA7CgkgIGlmIChfdGllICYmIHJkYnVmKCktPmluX2F2YWlsKCkgPT0gMCkgX3Rp
ZS0+Zmx1c2goKTsKCSAgcmV0dXJuIDE7Cgl9CiAgICB9CiAgICB2b2lkIGlzZngoKSB7ICA7IH0K
ICAgIGludCBnZXQoKSB7IGlmICghaXBmeDEoKSkgcmV0dXJuICgtMSkgOwoJCWVsc2UgeyBpbnQg
Y2ggPSBfc3RyYnVmLT5zYnVtcGMoKTsKCQkgICAgICAgaWYgKGNoID09ICgtMSkgKSBzZXQoaW9z
Ojplb2ZiaXQpOwoJCSAgICAgICBpc2Z4KCk7CgkJICAgICAgIHJldHVybiBjaDsKCQkgICAgIH0g
fQogICAgaW50IHBlZWsoKTsKICAgIF9HX3NpemVfdCAgZ2NvdW50KCkgeyByZXR1cm4gX2djb3Vu
dDsgfQogICAgaXN0cmVhbSYgaWdub3JlKGludCBuPTEsIGludCBkZWxpbSA9ICgtMSkgKTsKICAg
IGludCBzeW5jICgpOwogICAgaXN0cmVhbSYgc2Vla2coc3RyZWFtcG9zKTsKICAgIGlzdHJlYW0m
IHNlZWtnKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAgIHN0cmVhbXBvcyB0ZWxsZygpOwogICAg
aXN0cmVhbSYgcHV0YmFjayhjaGFyIGNoKSB7CglpZiAoZ29vZCgpICYmIF9zdHJidWYtPnNwdXRi
YWNrYyhjaCkgPT0gKC0xKSApIGNsZWFyKGlvczo6YmFkYml0KTsKCXJldHVybiAqdGhpczt9CiAg
ICBpc3RyZWFtJiB1bmdldCgpIHsKCWlmIChnb29kKCkgJiYgX3N0cmJ1Zi0+c3VuZ2V0YygpID09
ICgtMSkgKSBjbGVhcihpb3M6OmJhZGJpdCk7CglyZXR1cm4gKnRoaXM7fQogICAgaXN0cmVhbSYg
c2Nhbihjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsKICAgIGlzdHJlYW0mIHZzY2FuKGNvbnN0IGNo
YXIgKmZvcm1hdCwgX19nbnVjX3ZhX2xpc3QgIGFyZ3MpOwoKCgoKCgogICAgaXN0cmVhbSYgb3Bl
cmF0b3I+PihjaGFyKik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGNoYXIqIHAp
IHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+
KHNpZ25lZCBjaGFyKnApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9CiAgICBpc3Ry
ZWFtJiBvcGVyYXRvcj4+KGNoYXImIGMpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25l
ZCBjaGFyJiBjKSB7cmV0dXJuIG9wZXJhdG9yPj4oKGNoYXImKWMpO30KICAgIGlzdHJlYW0mIG9w
ZXJhdG9yPj4oc2lnbmVkIGNoYXImIGMpIHtyZXR1cm4gb3BlcmF0b3I+PigoY2hhciYpYyk7fQog
ICAgaXN0cmVhbSYgb3BlcmF0b3I+PihpbnQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4obG9u
ZyYpOwoKICAgIF9fZXh0ZW5zaW9uX18gaXN0cmVhbSYgb3BlcmF0b3I+Pihsb25nIGxvbmcmKTsK
ICAgIF9fZXh0ZW5zaW9uX18gaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcm
KTsKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNob3J0Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRv
cj4+KHVuc2lnbmVkIGludCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25n
Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0Jik7CgogICAgaXN0cmVh
bSYgb3BlcmF0b3I+Pihib29sJik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihmbG9hdCYpOwog
ICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihkb3VibGUmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4o
bG9uZyBkb3VibGUmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oIF9fbWFuaXAgZnVuYykgeygq
ZnVuYykoKnRoaXMpOyByZXR1cm4gKnRoaXM7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihfX2lt
YW5pcCBmdW5jKSB7IHJldHVybiAoKmZ1bmMpKCp0aGlzKTsgfQogICAgaXN0cmVhbSYgb3BlcmF0
b3I+PihzdHJlYW1idWYqKTsKfTsKCmNsYXNzIGlvc3RyZWFtIDogcHVibGljIGlzdHJlYW0sIHB1
YmxpYyBvc3RyZWFtCnsKICBwdWJsaWM6CiAgICBpb3N0cmVhbSgpIHsgfQogICAgaW9zdHJlYW0o
c3RyZWFtYnVmKiBzYiwgb3N0cmVhbSp0aWVkPSBfX251bGwgKTsKfTsKCmNsYXNzIF9JT19pc3Ry
ZWFtX3dpdGhhc3NpZ24gOiBwdWJsaWMgaXN0cmVhbSB7CnB1YmxpYzoKICBfSU9faXN0cmVhbV93
aXRoYXNzaWduJiBvcGVyYXRvcj0oaXN0cmVhbSYpOwogIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24m
IG9wZXJhdG9yPShfSU9faXN0cmVhbV93aXRoYXNzaWduJiByaHMpCiAgICB7IHJldHVybiBvcGVy
YXRvcj0gKHN0YXRpY19jYXN0PGlzdHJlYW0mPiAocmhzKSk7IH0KfTsKCmNsYXNzIF9JT19vc3Ry
ZWFtX3dpdGhhc3NpZ24gOiBwdWJsaWMgb3N0cmVhbSB7CnB1YmxpYzoKICBfSU9fb3N0cmVhbV93
aXRoYXNzaWduJiBvcGVyYXRvcj0ob3N0cmVhbSYpOwogIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24m
IG9wZXJhdG9yPShfSU9fb3N0cmVhbV93aXRoYXNzaWduJiByaHMpCiAgICB7IHJldHVybiBvcGVy
YXRvcj0gKHN0YXRpY19jYXN0PG9zdHJlYW0mPiAocmhzKSk7IH0KfTsKCmV4dGVybiBfSU9faXN0
cmVhbV93aXRoYXNzaWduIGNpbjsKIApleHRlcm4gX0lPX29zdHJlYW1fd2l0aGFzc2lnbiBjb3V0
LCBjZXJyOwoKZXh0ZXJuIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24gY2xvZwoKX19hc21fXyAoIl9f
SU9fY2xvZyIpCgo7CgpleHRlcm4gaXN0cmVhbSYgbG9jayhpc3RyZWFtJiBpbnMpOwpleHRlcm4g
aXN0cmVhbSYgdW5sb2NrKGlzdHJlYW0mIGlucyk7CmV4dGVybiBvc3RyZWFtJiBsb2NrKG9zdHJl
YW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgdW5sb2NrKG9zdHJlYW0mIG91dHMpOwoKc3RydWN0
IElvc3RyZWFtX2luaXQgeyB9IDsgICAKCmlubGluZSBpb3MmIGRlYyhpb3MmIGkpCnsgaS5zZXRm
KGlvczo6ZGVjLCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9CmlubGlu
ZSBpb3MmIGhleChpb3MmIGkpCnsgaS5zZXRmKGlvczo6aGV4LCBpb3M6OmRlY3xpb3M6OmhleHxp
b3M6Om9jdCk7IHJldHVybiBpOyB9CmlubGluZSBpb3MmIG9jdChpb3MmIGkpCnsgaS5zZXRmKGlv
czo6b2N0LCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9Cn0gIAoKCiMg
NiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9hbHBoYS1kZWMtb3NmNC4wZC8yLjk1LjIvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9pb3N0cmVhbSIgMiAzCgoKIyAxICJnYXBzb3J0LmNvbXBpbGVy
X2J1Zy5jcHAiIDIKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9hbHBoYS1kZWMtb3NmNC4w
ZC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9mc3RyZWFtIiAxIDMKIAogCgoKCiMg
MSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9hbHBoYS1kZWMtb3NmNC4wZC8yLjk1LjIvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9mc3RyZWFtLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCgoKZXh0ZXJuICJDKysiIHsKY2xhc3MgZnN0cmVhbWJh
c2UgOiB2aXJ0dWFsIHB1YmxpYyBpb3MgewoKICAgIG11dGFibGUgZmlsZWJ1ZiBfX215X2ZiOyAg
CgogICAgdm9pZCBfX2ZiX2luaXQgKCk7CiAgcHVibGljOgogICAgZnN0cmVhbWJhc2UoKTsKICAg
IGZzdHJlYW1iYXNlKGludCBmZCk7CiAgICBmc3RyZWFtYmFzZShpbnQgZmQsIGNoYXIgKnAsIGlu
dCBsKTsgIAogICAgZnN0cmVhbWJhc2UoY29uc3QgY2hhciAqbmFtZSwgaW50IG1vZGUsIGludCBw
cm90PTA2NjQpOwogICAgdm9pZCBjbG9zZSgpOwoKICAgIGZpbGVidWYqIHJkYnVmKCkgY29uc3Qg
eyByZXR1cm4gJl9fbXlfZmI7IH0KCgoKICAgIHZvaWQgb3Blbihjb25zdCBjaGFyICpuYW1lLCBp
bnQgbW9kZSwgaW50IHByb3Q9MDY2NCk7CiAgICBpbnQgaXNfb3BlbigpIGNvbnN0IHsgcmV0dXJu
IHJkYnVmKCktPmlzX29wZW4oKTsgfQogICAgdm9pZCBzZXRidWYoY2hhciAqcHRyLCBpbnQgbGVu
KSB7IHJkYnVmKCktPnNldGJ1ZihwdHIsIGxlbik7IH0KICAgIHZvaWQgYXR0YWNoKGludCBmZCk7
CgoKCgp9OwoKY2xhc3MgaWZzdHJlYW0gOiBwdWJsaWMgZnN0cmVhbWJhc2UsIHB1YmxpYyBpc3Ry
ZWFtIHsKICBwdWJsaWM6CiAgICBpZnN0cmVhbSgpIDogZnN0cmVhbWJhc2UoKSB7IH0KICAgIGlm
c3RyZWFtKGludCBmZCkgOiBmc3RyZWFtYmFzZShmZCkgeyB9CiAgICBpZnN0cmVhbShpbnQgZmQs
IGNoYXIgKnAsIGludCBsKSA6IGZzdHJlYW1iYXNlKGZkLCBwLCBsKSB7IH0gIAogICAgaWZzdHJl
YW0oY29uc3QgY2hhciAqbmFtZSwgaW50IG1vZGU9aW9zOjppbiwgaW50IHByb3Q9MDY2NCkKCTog
ZnN0cmVhbWJhc2UobmFtZSwgbW9kZSwgcHJvdCkgeyB9CiAgICB2b2lkIG9wZW4oY29uc3QgY2hh
ciAqbmFtZSwgaW50IG1vZGU9aW9zOjppbiwgaW50IHByb3Q9MDY2NCkKCXsgZnN0cmVhbWJhc2U6
Om9wZW4obmFtZSwgbW9kZSwgcHJvdCk7IH0KfTsKCmNsYXNzIG9mc3RyZWFtIDogcHVibGljIGZz
dHJlYW1iYXNlLCBwdWJsaWMgb3N0cmVhbSB7CiAgcHVibGljOgogICAgb2ZzdHJlYW0oKSA6IGZz
dHJlYW1iYXNlKCkgeyB9CiAgICBvZnN0cmVhbShpbnQgZmQpIDogZnN0cmVhbWJhc2UoZmQpIHsg
fQogICAgb2ZzdHJlYW0oaW50IGZkLCBjaGFyICpwLCBpbnQgbCkgOiBmc3RyZWFtYmFzZShmZCwg
cCwgbCkgeyB9ICAKICAgIG9mc3RyZWFtKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2RlPWlvczo6
b3V0LCBpbnQgcHJvdD0wNjY0KQoJOiBmc3RyZWFtYmFzZShuYW1lLCBtb2RlLCBwcm90KSB7IH0K
ICAgIHZvaWQgb3Blbihjb25zdCBjaGFyICpuYW1lLCBpbnQgbW9kZT1pb3M6Om91dCwgaW50IHBy
b3Q9MDY2NCkKCXsgZnN0cmVhbWJhc2U6Om9wZW4obmFtZSwgbW9kZSwgcHJvdCk7IH0KfTsKCmNs
YXNzIGZzdHJlYW0gOiBwdWJsaWMgZnN0cmVhbWJhc2UsIHB1YmxpYyBpb3N0cmVhbSB7CiAgcHVi
bGljOgogICAgZnN0cmVhbSgpIDogZnN0cmVhbWJhc2UoKSB7IH0KICAgIGZzdHJlYW0oaW50IGZk
KSA6IGZzdHJlYW1iYXNlKGZkKSB7IH0KICAgIGZzdHJlYW0oY29uc3QgY2hhciAqbmFtZSwgaW50
IG1vZGUsIGludCBwcm90PTA2NjQpCgk6IGZzdHJlYW1iYXNlKG5hbWUsIG1vZGUsIHByb3QpIHsg
fQogICAgZnN0cmVhbShpbnQgZmQsIGNoYXIgKnAsIGludCBsKSA6IGZzdHJlYW1iYXNlKGZkLCBw
LCBsKSB7IH0gIAogICAgdm9pZCBvcGVuKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2RlLCBpbnQg
cHJvdD0wNjY0KQoJeyBmc3RyZWFtYmFzZTo6b3BlbihuYW1lLCBtb2RlLCBwcm90KTsgfQp9Owp9
ICAKCiMgNiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9hbHBoYS1kZWMtb3NmNC4wZC8yLjk1LjIv
Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9mc3RyZWFtIiAyIDMKCgojIDIgImdhcHNvcnQuY29t
cGlsZXJfYnVnLmNwcCIgMgoKCgoKIAoKCgoKaW50IGdldF9kYXRhX2FycmF5IChjaGFyICpmaWxl
X25hbWUsIGludCAqZGF0YV9hcnJheSwgaW50IG1heF9zaXplKSB7CiAgaWZzdHJlYW0gaW5wdXQg
KGZpbGVfbmFtZSwgaW9zOjppbik7CgogIGlmICghaW5wdXQuaXNfb3BlbiAoKSkgewogICAgcmV0
dXJuIC0xOwogIH0KCiAgaW50IGxpbmVzX3JlYWQgPSAwOwogIHdoaWxlIChpbnB1dCA+PiBkYXRh
X2FycmF5W2xpbmVzX3JlYWRdKSB7CiAgICBsaW5lc19yZWFkKys7CiAgfQogIHJldHVybiBsaW5l
c19yZWFkOwp9Cgp2b2lkIHN3YXAgKGludCAmYSwgaW50ICZiKSB7CiAgaW50IHQgPSBhOwogIGEg
PSBiOwogIGIgPSB0Owp9CgogCnZvaWQgZ2Fwc29ydCAoaW50ICphcnJheSwgaW50IHNpemUpCnsK
ICBpbnQgZ2FwLCBuZWFyPTAsIGZhcj0wOwogIGZvciAoZ2FwID0gc2l6ZSAtIDE7IGdhcCA+PSAx
OyBnYXAtLSkgewogICAgbmVhciA9IDA7CiAgICBmYXIgPSBuZWFyICsgZ2FwOwogICAgd2hpbGUg
KGZhciA8IHNpemUpIHsgIAogICAgICBpZiAoYXJyYXlbbmVhcl0gPiBhcnJheVtmYXJdKSB7Cglz
d2FwIChhcnJheVtuZWFyXSwgYXJyYXlbZmFyXSk7CiAgICAgIH0KICAgICAgbmVhcisrOwogICAg
ICBmYXIrKzsKICAgIH0KICB9Cn0KCiAgIAoKCgoKCgoKIAppbnQgbWFpbiAoaW50IGFyZ2MsIGNo
YXIqKiBhcmd2KQp7IAogICAKICBpbnQgZGF0YV9zaXplID0gMDsKICBpbnQgZGF0YVsxMDAwMDAw
MDAwXTsKCiAgaWYgKGFyZ2MgPCAyKSB7CiAgICBjb3V0IDw8ICJVc2FnZTogIiA8PCBhcmd2WzBd
IDw8ICIgPGZpbGUgbmFtZT4iIDw8IGVuZGw7CiAgICBleGl0ICgxKTsKICB9CgogIGRhdGFfc2l6
ZSA9IGdldF9kYXRhX2FycmF5IChhcmd2WzFdLCBkYXRhLCAxMDAwMDAwMDA7ICk7CiAgaWYgKGRh
dGFfc2l6ZSA8IDApIHsKICAgIGNvdXQgPDwgIlVuYWJsZSB0byBvcGVuICIgPDwgYXJndlsxXSA8
PCBlbmRsOwogICAgZXhpdCAoMSk7CiAgfQogIGVsc2UgaWYgKGRhdGFfc2l6ZSA9PSAwKSB7CiAg
ICBjb3V0IDw8ICJGaWxlIGNvbnRhaW5zIG5vIGRhdGEiIDw8IGVuZGw7CiAgICBleGl0ICgxKTsK
ICB9CgogIGdhcHNvcnQgKGRhdGEsIGRhdGFfc2l6ZSk7CgogICAKICBmb3IgKGludCBpID0gMDsg
aSA8IGRhdGFfc2l6ZTsgaSsrKSB7CiAgICBjb3V0IDw8IGRhdGFbaV0gPDwgZW5kbDsKICB9Cn0K
Cg==



More information about the Gcc-bugs mailing list