public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c++/9334: args to cout evaluated prematurely
@ 2003-01-15 20:46 bala
  0 siblings, 0 replies; 2+ messages in thread
From: bala @ 2003-01-15 20:46 UTC (permalink / raw)
  To: gcc-gnats


>Number:         9334
>Category:       c++
>Synopsis:       args to cout evaluated prematurely
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Jan 15 12:46:03 PST 2003
>Closed-Date:
>Last-Modified:
>Originator:     Bala Swaminathan
>Release:        2.95.3
>Organization:
>Environment:
LINUX:
monsterd01:~/c++> uname -a
Linux monsterd01 2.4.18-3-rmap12h-lvm105 #1 SMP Wed Aug 7 17:54:19 EDT 2002 i686 unknown
monsterd01:~/c++> /usr/bin/g++ -v
Reading specs from /usr/lib/gcc-lib/i486-suse-linux/2.95.3/specs
gcc version 2.95.3 20010315 (SuSE)
>Description:
a cout statement in is causing the gcc version 2.95.3 20010315 (SuSE) in Linux to prematurely pass the value of an int variable before any preceeding operator<< is evaluated on the cout.

(See "How-To-Repeat:" for the program)
// LINUX
monsterd01:~/c++> uname -a
Linux monsterd01 2.4.18-3-rmap12h-lvm105 #1 SMP Wed Aug 7 17:54:19 EDT 2002 i686 unknown
monsterd01:~/c++> /usr/bin/g++ -v
Reading specs from /usr/lib/gcc-lib/i486-suse-linux/2.95.3/specs
gcc version 2.95.3 20010315 (SuSE)
monsterd01:~/c++> /usr/bin/g++ linuxcout.C
monsterd01:~/c++> a.out
foo(&x): 100, x: 1111

//SUN
booby:~/c++> uname -a
SunOS booby 5.8 Generic_108528-16 sun4u sparc SUNW,Sun-Blade-100
booby:~/c++> g++ -v
Reading specs from /usr/local/gnu/install/gcc/2.9.5.2/lib/gcc-lib/sparc-sun-solaris2.6/2.95.2/specs
gcc version 2.95.2 19991024 (release)
booby:~/c++> g++ linuxcout.C 
booby:~/c++> a.out
foo(&x): 100, x: 100
>How-To-Repeat:
#include <iostream>
int foo(int* changeme) { return (*changeme = 100); }
int main() {
  int x=1111;
  std::cout << "foo(&x): " << foo(&x) << ", x: " << x << std::endl;
}
// BTW: there was no complaint when I used an unqualified endl instead of std::endl;
>Fix:
Split the cout stmt above into two statements--one where x is evaluated and then one where x is printed:

std::cout << "foo(&x): " << foo(&x);
std::cout << ", x: " << x << std::endl;
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="linuxcout.e"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="linuxcout.e"

IyAxICJsaW51eGNvdXQuQyIKIyAxICIvdXNyL2luY2x1ZGUvZysrL2lvc3RyZWFtIiAxIDMKIAog
CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9pb3N0cmVhbS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrL3N0
cmVhbWJ1Zi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaW50ZXJm
YWNlCgoKICAgCgoKCmV4dGVybiAiQyIgewojIDEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAxIDMK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvX0dfY29uZmln
LmgiIDEgMwogCgoKCgoKIAoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIAoK
CgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAz
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK
CgogCgoKCiAKCgoKCgoKCiAKIyAxNDIgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCgoKIAoK
CgoKCgoKCgogCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDIwOCAiL3Vz
ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CiAKCgoKIAoKCiAKCgoKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgogCgoKIyAxICIvdXNy
L2luY2x1ZGUvc3lzL2NkZWZzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIAoK
CgoKCgogCgoKCgoKIAoKCgoKCgoKCiAKCgoKIyA2NSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5o
IiAzCgoKIAoKCgoKCiAKCgoKCiAKCgoKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK
CiAKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCgogCgoKCgoKCgoKIAoKCgoKCgoKCiAK
CgoKCgoKCgogCgoKCgoKCgoKCgogCgoKCgoKCgogCgoKCgogCgoKCgoKCiMgMjgzICIvdXNyL2lu
Y2x1ZGUvZmVhdHVyZXMuaCIgMiAzCgoKCiAKCgoKCgoKCgogCgoKCgogCgogCgoKCgoKCgoKIyAx
ICIvdXNyL2luY2x1ZGUvZ251L3N0dWJzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgojIDMxMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwoKCgoKIyAyNiAiL3Vz
ci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2
LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAi
L3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgi
IDMKCgoKIAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGlu
dXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK
CgogCgoKCgoKIAoKIAoKIyAxMzEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIu
OTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKIAoKCgoKIAoKIyAyNzEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUu
My9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIyAyODMgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNl
LWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKIyAzMTcgIi91c3IvbGli
L2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIg
MwoKCiAKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNo
b3J0IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNp
Z25lZCBsb25nIF9fdV9sb25nOwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcg
bG9uZyBpbnQgX191X3F1YWRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQg
X19xdWFkX3Q7CiMgNDggIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKCnR5cGVkZWYgc2ln
bmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVk
ZWYgc2lnbmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50
IF9fdWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWdu
ZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9u
ZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25n
IGludCBfX3VpbnQ2NF90OwoKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBf
X3VfcXVhZF90IF9fZGV2X3Q7CQkgCnR5cGVkZWYgX191X2ludCBfX3VpZF90OwkJIAp0eXBlZGVm
IF9fdV9pbnQgX19naWRfdDsJCSAKdHlwZWRlZiBfX3VfbG9uZyBfX2lub190OwkJIAp0eXBlZGVm
IF9fdV9pbnQgX19tb2RlX3Q7CQkgCnR5cGVkZWYgX191X2ludCBfX25saW5rX3Q7IAkJIAp0eXBl
ZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CQkgCnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7CQkgCnR5
cGVkZWYgaW50IF9fcGlkX3Q7CQkJIAp0eXBlZGVmIGludCBfX3NzaXplX3Q7CQkJIAp0eXBlZGVm
IF9fdV9sb25nIF9fcmxpbV90OwkJIAp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsJCSAK
dHlwZWRlZiBfX3VfaW50IF9faWRfdDsJCQkgCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBf
X3ZhbFsyXTsKICB9IF9fZnNpZF90OwkJCQkgCgogCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsJCQkg
CnR5cGVkZWYgY2hhciAqX19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBl
ZGVmIHVuc2lnbmVkIGludCBfX3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNlY29u
ZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7CQkgCgwKdHlwZWRlZiBsb25nIGludCBf
X2Nsb2NrX3Q7CgogCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90OwoKIAp0eXBlZGVmIGludCBfX3Rp
bWVyX3Q7CgoKIAoKCgp0eXBlZGVmIGludCBfX2tleV90OwoKIAp0eXBlZGVmIHVuc2lnbmVkIHNo
b3J0IGludCBfX2lwY19waWRfdDsKCgogCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtzaXplX3Q7Cgog
CgogCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Jsa2Nu
dDY0X3Q7CgogCnR5cGVkZWYgX191X2xvbmcgX19mc2Jsa2NudF90Owp0eXBlZGVmIF9fdV9xdWFk
X3QgX19mc2Jsa2NudDY0X3Q7CgogCnR5cGVkZWYgX191X2xvbmcgX19mc2ZpbGNudF90Owp0eXBl
ZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgogCnR5cGVkZWYgX191X3F1YWRfdCBfX2lu
bzY0X3Q7CgogCnR5cGVkZWYgX19sb2ZmX3QgX19vZmY2NF90OwoKIAp0eXBlZGVmIGxvbmcgaW50
IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3RfdXNjYWxhcl90OwoK
IAp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKIAp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3NvY2ts
ZW5fdDsKCgogCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIAog
CiAKIAogCiAKIAogCiAKIAogCiAKIAoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Nj
aGVkLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgojIDYyICIvdXNyL2luY2x1ZGUvYml0cy9z
Y2hlZC5oIiAzCgoKCgoKIApzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVk
X3ByaW9yaXR5OwogIH07CgoKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgi
IDIgMwoKCiAKc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1czsg
ICAgCiAgaW50IF9fc3BpbmxvY2s7ICAgICAgIAoKfTsKCgogCnR5cGVkZWYgc3RydWN0IF9wdGhy
ZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgoKCgogCnR5cGVkZWYgc3RydWN0IF9f
cHRocmVhZF9hdHRyX3MKewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5
OwogIHN0cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2No
ZWQ7CiAgaW50IF9fc2NvcGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRk
cl9zZXQ7CiAgdm9pZCAqX19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJl
YWRfYXR0cl90OwoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9j
ayBfX2NfbG9jazsgIAogIF9wdGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOyAgICAgICAgIAp9IHB0
aHJlYWRfY29uZF90OwoKCiAKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJl
YWRfY29uZGF0dHJfdDsKCiAKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgog
CiAKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOyAgICAgICAgICAgICAgICAK
ICBpbnQgX19tX2NvdW50OyAgICAgICAgICAgICAgICAgICAKICBfcHRocmVhZF9kZXNjciBfX21f
b3duZXI7ICAgICAgICAKICBpbnQgX19tX2tpbmQ7ICAgICAgICAgICAgICAgICAgICAKICBzdHJ1
Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7ICAKfSBwdGhyZWFkX211dGV4X3Q7CgoKIAp0
eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7
CgoKIAp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgojIDExNyAiL3Vzci9pbmNsdWRlL2Jp
dHMvcHRocmVhZHR5cGVzLmgiIDMKCgojIDEzNiAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5
cGVzLmgiIDMKCgoKIAp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKCgojIDE0
MyAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKCgojIDkgIi91c3IvaW5jbHVkZS9f
R19jb25maWcuaCIgMiAzCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51
eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9n
Y2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoK
IAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMv
aW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgog
CgogCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2luY2x1
ZGUvc3RkZGVmLmgiIDMKCgogCgogCgoKIyAxODggIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNl
LWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgIHdpbnRfdDsKCgoKCiAKCiAKCiMg
MzE3ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRk
ZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDE0ICIvdXNyL2luY2x1ZGUvX0df
Y29uZmlnLmgiIDIgMwoKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiAK
CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKIyA0NiAiL3Vzci9pbmNsdWRlL3djaGFyLmgi
IDMKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMy9pbmNsdWRl
L3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNl
LWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEg
Ii91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5o
IiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMgMTMxICIvdXNy
L2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoK
CiAKCiAKCiMgMTkwICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5j
bHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKCgogCgojIDI3MSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2
LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgoKCgoKCgoKCgogCgog
CgojIDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUv
c3RkZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA0OCAiL3Vzci9pbmNsdWRl
L3djaGFyLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNTAgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCgog
CgoKCgoKCgoKCgoKCgogCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19jb3VudDsKICB1bmlvbgog
IHsKICAgIHdpbnRfdCBfX3djaDsKICAgIGNoYXIgX193Y2hiWzRdOwogIH0gX192YWx1ZTsJCSAK
fSBfX21ic3RhdGVfdDsKCgoKCiAKCiMgNjgzICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoKCgoj
IDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKCnR5cGVkZWYgc3RydWN0CnsKICBf
X29mZl90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvc190Owp0eXBlZGVm
IHN0cnVjdAp7CiAgX19vZmY2NF90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0df
ZnBvczY0X3Q7CgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMSAzCiAKCgoKCgoK
CgoKCgoKCgoKCgogCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiAKCgoK
CgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKIyA0NiAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMK
CgojIDEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0
ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxp
bnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91
c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAz
CgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMgMTMxICIvdXNyL2xp
Yi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAK
CiAKCiMgMTkwICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVk
ZS9zdGRkZWYuaCIgMwoKCgogCgoKCgogCgojIDI3MSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1
c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgoKCgoKCgoKCgogCgogCgoj
IDMxNyAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3Rk
ZGVmLmgiIDMKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA0OCAiL3Vzci9pbmNsdWRlL3dj
aGFyLmgiIDIgMwoKCgoKIAoKCgoKCgoKCgoKCiMgNzYgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAz
CgoKCgogCgojIDY4MyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKCgoKIyAyOCAiL3Vzci9pbmNs
dWRlL2djb252LmgiIDIgMwoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgv
Mi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9saWIvZ2Nj
LWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKIAoKCiAK
CgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4zL2lu
Y2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoK
IAoKIyAxMzEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMy9pbmNsdWRl
L3N0ZGRlZi5oIiAzCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1s
aW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCiMgMjcxICIvdXNy
L2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoK
CiMgMjgzICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9z
dGRkZWYuaCIgMwoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51
eC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoj
IDMwICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgoKIAoKCiAKZW51bQp7CiAgX19HQ09OVl9P
SyA9IDAsCiAgX19HQ09OVl9OT0NPTlYsCiAgX19HQ09OVl9OT0RCLAogIF9fR0NPTlZfTk9NRU0s
CgogIF9fR0NPTlZfRU1QVFlfSU5QVVQsCiAgX19HQ09OVl9GVUxMX09VVFBVVCwKICBfX0dDT05W
X0lMTEVHQUxfSU5QVVQsCiAgX19HQ09OVl9JTkNPTVBMRVRFX0lOUFVULAoKICBfX0dDT05WX0lM
TEVHQUxfREVTQ1JJUFRPUiwKICBfX0dDT05WX0lOVEVSTkFMX0VSUk9SCn07CgoKIAplbnVtCnsK
ICBfX0dDT05WX0lTX0xBU1QgPSAweDAwMDEsCiAgX19HQ09OVl9JR05PUkVfRVJST1JTID0gMHgw
MDAyCn07CgoKIApzdHJ1Y3QgX19nY29udl9zdGVwOwpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGE7
CnN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3Q7CnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGE7
CgoKIAp0eXBlZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLCBz
dHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwKCQkJICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAq
KiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCgkJCSAgICB1bnNpZ25lZCBjaGFyICoqLCBzaXpl
X3QgKiwgaW50LCBpbnQpOwoKIAp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5pdF9mY3QpIChzdHJ1
Y3QgX19nY29udl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2VuZF9mY3QpIChzdHJ1
Y3QgX19nY29udl9zdGVwICopOwoKCiAKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2ZjdCkg
KHN0cnVjdCBfX2djb252X3N0ZXAgKiwKCQkJCSAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICos
IHZvaWQgKiwKCQkJCSAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCgkJCQkgIF9fY29uc3QgdW5z
aWduZWQgY2hhciAqKiwKCQkJCSAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNo
YXIgKiosCgkJCQkgIHNpemVfdCAqKTsKCiAKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2Nv
bnRleHRfZmN0KSAodm9pZCAqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKCQkJCQkgIF9fY29u
c3QgdW5zaWduZWQgY2hhciAqLAoJCQkJCSAgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFy
ICopOwoKIAp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBj
aGFyICosIF9fY29uc3QgY2hhciAqKiosCgkJCQkJc2l6ZV90ICopOwoKIAp0eXBlZGVmIGludCAo
Kl9fZ2NvbnZfdHJhbnNfaW5pdF9mY3QpICh2b2lkICoqLCBjb25zdCBjaGFyICopOwp0eXBlZGVm
IHZvaWQgKCpfX2djb252X3RyYW5zX2VuZF9mY3QpICh2b2lkICopOwoKc3RydWN0IF9fZ2NvbnZf
dHJhbnNfZGF0YQp7CiAgIAogIF9fZ2NvbnZfdHJhbnNfZmN0IF9fdHJhbnNfZmN0OwogIF9fZ2Nv
bnZfdHJhbnNfY29udGV4dF9mY3QgX190cmFuc19jb250ZXh0X2ZjdDsKICBfX2djb252X3RyYW5z
X2VuZF9mY3QgX190cmFuc19lbmRfZmN0OwogIHZvaWQgKl9fZGF0YTsKICBzdHJ1Y3QgX19nY29u
dl90cmFuc19kYXRhICpfX25leHQ7Cn07CgoKIApzdHJ1Y3QgX19nY29udl9zdGVwCnsKICBzdHJ1
Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRsZTsKICBfX2NvbnN0IGNoYXIg
Kl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hhciAqX19mcm9tX25hbWU7CiAgY2hh
ciAqX190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsKICBfX2djb252X2luaXRfZmN0IF9f
aW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2ZjdDsKCiAgIAoKICBpbnQgX19taW5f
bmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwogIGludCBfX21pbl9uZWVkZWRf
dG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCiAgIAogIGludCBfX3N0YXRlZnVsOwoKICB2b2lk
ICpfX2RhdGE7CQkgCn07CgogCgpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEKewogIHVuc2lnbmVk
IGNoYXIgKl9fb3V0YnVmOyAgICAgCiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7ICAKCgog
ICAKICBpbnQgX19mbGFnczsKCiAgIAoKICBpbnQgX19pbnZvY2F0aW9uX2NvdW50ZXI7CgogICAK
CiAgaW50IF9faW50ZXJuYWxfdXNlOwoKICBfX21ic3RhdGVfdCAqX19zdGF0ZXA7CiAgX19tYnN0
YXRlX3QgX19zdGF0ZTsJIAoKCiAgIAogIHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fdHJh
bnM7Cn07CgoKIAp0eXBlZGVmIHN0cnVjdCBfX2djb252X2luZm8KewogIHNpemVfdCBfX25zdGVw
czsKICBzdHJ1Y3QgX19nY29udl9zdGVwICpfX3N0ZXBzOwogIF9fZXh0ZW5zaW9uX18gc3RydWN0
IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YSBbMF0gOwp9ICpfX2djb252X3Q7CgoKIyA0NCAiL3Vz
ci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKCnR5cGVkZWYgdW5pb24KewogIHN0cnVjdCBfX2dj
b252X2luZm8gX19jZDsKICBzdHJ1Y3QKICB7CiAgICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7
CiAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhOwogIH0gX19jb21iaW5lZDsKfSBf
R19pY29udl90OwoKdHlwZWRlZiBpbnQgX0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2Rl
X18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgX0dfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19t
b2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRy
aWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3Vp
bnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwoKCgoKIAoKCgoKCgoK
CgoKCgoKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKIyAzMCAiL3Vzci9pbmNsdWRlL2xpYmlv
LmgiIDIgMwoKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2
LXN1c2UtbGludXgvMi45NS4zL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK
CnR5cGVkZWYgdm9pZCAqX19nbnVjX3ZhX2xpc3Q7CgoKCiAKCiMgMTIyICIvdXNyL2xpYi9nY2Mt
bGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMvaW5jbHVkZS9zdGRhcmcuaCIgMwoKCgoKCgoKCgoK
CgoKCgoKCgoKCiMgMjA5ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjMv
aW5jbHVkZS9zdGRhcmcuaCIgMwoKCgoKIyA1MSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwoK
CgoKCgoKIyA3MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKCgogCgoKCgoKCgoKCgoKCgoKCgoK
IyAxMDEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKc3RydWN0IF9JT19qdW1wX3Q7ICBzdHJ1
Y3QgX0lPX0ZJTEU7CgogCgoKCgoKCgp0eXBlZGVmIHZvaWQgX0lPX2xvY2tfdDsKCgoKIAoKc3Ry
dWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lP
X0ZJTEUgKl9zYnVmOwogICAKCiAgIAogIGludCBfcG9zOwojIDE5MCAiL3Vzci9pbmNsdWRlL2xp
YmlvLmgiIDMKCn07CgogCmVudW0gX19jb2RlY3Z0X3Jlc3VsdAp7CiAgX19jb2RlY3Z0X29rLAog
IF9fY29kZWN2dF9wYXJ0aWFsLAogIF9fY29kZWN2dF9lcnJvciwKICBfX2NvZGVjdnRfbm9jb252
Cn07CgojIDI1NyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKCgpzdHJ1Y3QgX0lPX0ZJTEUgewog
IGludCBfZmxhZ3M7CQkgCgoKICAgCiAgIAogIGNoYXIqIF9JT19yZWFkX3B0cjsJIAogIGNoYXIq
IF9JT19yZWFkX2VuZDsJIAogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CSAKICBjaGFyKiBfSU9fd3Jp
dGVfYmFzZTsJIAogIGNoYXIqIF9JT193cml0ZV9wdHI7CSAKICBjaGFyKiBfSU9fd3JpdGVfZW5k
OwkgCiAgY2hhciogX0lPX2J1Zl9iYXNlOwkgCiAgY2hhciogX0lPX2J1Zl9lbmQ7CSAKICAgCiAg
Y2hhciAqX0lPX3NhdmVfYmFzZTsgIAogIGNoYXIgKl9JT19iYWNrdXBfYmFzZTsgICAKICBjaGFy
ICpfSU9fc2F2ZV9lbmQ7ICAKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1
Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXplOwogIF9f
b2ZmX3QgICBfb2xkX29mZnNldDsgIAoKCiAgIAogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1u
OwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zmc2V0OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKICAg
CgogIF9JT19sb2NrX3QgKl9sb2NrOwoKCgoKCgoKCiAgX19vZmY2NF90ICAgX29mZnNldDsKCgoK
CgogIHZvaWQgKl9fcGFkMTsKICB2b2lkICpfX3BhZDI7CgogIGludCBfbW9kZTsKICAgCiAgY2hh
ciBfdW51c2VkMlsxNSAqIHNpemVvZiAoaW50KSAtIDIgKiBzaXplb2YgKHZvaWQgKildOwoKfTsK
CgoKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKCmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBf
SU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rkb3V0
XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkZXJyXzsKCgoKCgoKCgoK
CgogCgogCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gKHZvaWQgKl9fY29va2llLCBj
aGFyICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCiAKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBf
X2lvX3dyaXRlX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKCQkJCSBz
aXplX3QgX19uKTsKCiAKCgoKCgp0eXBlZGVmIGludCBfX2lvX3NlZWtfZm4gKHZvaWQgKl9fY29v
a2llLCBfX29mZjY0X3QgICAqX19wb3MsIGludCBfX3cpOwoKIAp0eXBlZGVmIGludCBfX2lvX2Ns
b3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CgoKIyAzODcgIi91c3IvaW5jbHVkZS9saWJpby5oIiAz
CgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSB0
aHJvdyAoKSA7CmV4dGVybiBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCkgOwpleHRl
cm4gaW50IF9fb3ZlcmZsb3cgKF9JT19GSUxFICosIGludCkgdGhyb3cgKCkgOwpleHRlcm4gd2lu
dF90ICAgX193dW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKSA7CmV4dGVybiB3aW50X3Qg
ICBfX3d1ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCkgOwpleHRlcm4gd2ludF90ICAgX193b3Zl
cmZsb3cgKF9JT19GSUxFICosIHdpbnRfdCAgKSB0aHJvdyAoKSA7CgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCmV4dGVybiBpbnQgX0lPX2dldGMgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKSA7CmV4
dGVybiBpbnQgX0lPX3B1dGMgKGludCBfX2MsIF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKSA7CmV4
dGVybiBpbnQgX0lPX2Zlb2YgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKSA7CmV4dGVybiBpbnQg
X0lPX2ZlcnJvciAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpIDsKCmV4dGVybiBpbnQgX0lPX3Bl
ZWtjX2xvY2tlZCAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpIDsKCiAKCgoKZXh0ZXJuIHZvaWQg
X0lPX2Zsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCkgOwpleHRlcm4gdm9pZCBfSU9fZnVu
bG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpIDsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tm
aWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKSA7CgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gaW50IF9J
T192ZnNjYW5mIChfSU9fRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0
LAoJCQlfX2dudWNfdmFfbGlzdCAsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCkgOwpleHRlcm4g
aW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKl9fcmVz
dHJpY3QsCgkJCSBfX2dudWNfdmFfbGlzdCApIHRocm93ICgpIDsKZXh0ZXJuIF9fc3NpemVfdCAg
IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVfdCAgKSB0aHJvdyAoKSA7CmV4dGVy
biBzaXplX3QgICBfSU9fc2dldG4gKF9JT19GSUxFICosIHZvaWQgKiwgc2l6ZV90ICApIHRocm93
ICgpIDsKCmV4dGVybiBfX29mZjY0X3QgICBfSU9fc2Vla29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2
NF90ICAsIGludCwgaW50KSB0aHJvdyAoKSA7CmV4dGVybiBfX29mZjY0X3QgICBfSU9fc2Vla3Bv
cyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90ICAsIGludCkgdGhyb3cgKCkgOwoKZXh0ZXJuIHZvaWQg
X0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgpIDsKCiMgNTA3ICIvdXNy
L2luY2x1ZGUvbGliaW8uaCIgMwoKCgp9CgoKCiMgMzYgIi91c3IvaW5jbHVkZS9nKysvc3RyZWFt
YnVmLmgiIDIgMwoKfQogCgojIDEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIu
OTUuMy9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgogCgoK
CgoKCgoKCgoKCgoKCgoKdm9pZCB2YV9lbmQgKF9fZ251Y192YV9saXN0KTsJCSAKCgogCgoKCiAK
CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAoKCgoKCgoKCgoKCgoKIyAx
NzUgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMy9pbmNsdWRlL3N0ZGFy
Zy5oIiAzCgoKIAoKCgoKIAoKIAoKIAoKdHlwZWRlZiBfX2dudWNfdmFfbGlzdCB2YV9saXN0OwoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDQwICIvdXNyL2luY2x1ZGUvZysrL3N0cmVhbWJ1Zi5o
IiAyIDMKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQysrIiB7CmNsYXNzIGlzdHJl
YW07ICAKY2xhc3Mgb3N0cmVhbTsgY2xhc3Mgc3RyZWFtYnVmOwoKIAoKCgoKdHlwZWRlZiBfX29m
ZjY0X3QgICBzdHJlYW1vZmY7CnR5cGVkZWYgX19vZmY2NF90ICAgc3RyZWFtcG9zOwoKCgoKdHlw
ZWRlZiBfX3NzaXplX3QgICBzdHJlYW1zaXplOwoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fZm10
ZmxhZ3M7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX2lvc3RhdGU7CgpzdHJ1Y3QgX2lvc19maWVs
ZHMKeyAgCiAgICBzdHJlYW1idWYgKl9zdHJidWY7CiAgICBvc3RyZWFtKiBfdGllOwogICAgaW50
IF93aWR0aDsKICAgIF9fZm10ZmxhZ3MgX2ZsYWdzOwogICAgd2NoYXJfdCAgIF9maWxsOwogICAg
X19pb3N0YXRlIF9zdGF0ZTsKICAgIF9faW9zdGF0ZSBfZXhjZXB0aW9uczsKICAgIGludCBfcHJl
Y2lzaW9uOwoKICAgIHZvaWQgKl9hcnJheXM7ICAKfTsKCgoKCgoKCgoKCgoKCgoKIyAxMjQgIi91
c3IvaW5jbHVkZS9nKysvc3RyZWFtYnVmLmgiIDMKCgpjbGFzcyBpb3MgOiBwdWJsaWMgX2lvc19m
aWVsZHMgewogIGlvcyYgb3BlcmF0b3I9KGlvcyYpOyAgIAogIGlvcyAoY29uc3QgaW9zJik7ICAK
ICBwdWJsaWM6CiAgICB0eXBlZGVmIF9fZm10ZmxhZ3MgZm10ZmxhZ3M7CiAgICB0eXBlZGVmIGlu
dCBpb3N0YXRlOwogICAgdHlwZWRlZiBpbnQgb3Blbm1vZGU7CiAgICB0eXBlZGVmIF9fc3NpemVf
dCAgIHN0cmVhbXNpemU7CiAgICBlbnVtIGlvX3N0YXRlIHsKCWdvb2RiaXQgPSAwICwKCWVvZmJp
dCA9IDEgLAoJZmFpbGJpdCA9IDIgLAoJYmFkYml0ID0gNCAgfTsKICAgIGVudW0gb3Blbl9tb2Rl
IHsKCWluID0gMSAsCglvdXQgPSAyICwKCWF0ZSA9IDQgLAoJYXBwID0gOCAsCgl0cnVuYyA9IDE2
ICwKCW5vY3JlYXRlID0gMzIgLAoJbm9yZXBsYWNlID0gNjQgLAoJYmluID0gMTI4ICwgIAoJYmlu
YXJ5ID0gMTI4ICB9OwogICAgZW51bSBzZWVrX2RpciB7IGJlZywgY3VyLCBlbmR9OwogICAgdHlw
ZWRlZiBlbnVtIHNlZWtfZGlyIHNlZWtkaXI7CiAgICAgCiAgICBlbnVtIHsgc2tpcHdzPSAwMSAs
CgkgICBsZWZ0PSAwMiAsIHJpZ2h0PSAwNCAsIGludGVybmFsPSAwMTAgLAoJICAgZGVjPSAwMjAg
LCBvY3Q9IDA0MCAsIGhleD0gMDEwMCAsCgkgICBzaG93YmFzZT0gMDIwMCAsIHNob3dwb2ludD0g
MDQwMCAsCgkgICB1cHBlcmNhc2U9IDAxMDAwICwgc2hvd3Bvcz0gMDIwMDAgLAoJICAgc2NpZW50
aWZpYz0gMDQwMDAgLCBmaXhlZD0gMDEwMDAwICwKCSAgIHVuaXRidWY9IDAyMDAwMCAsIHN0ZGlv
PSAwNDAwMDAgCgoKCgkgICB9OwogICAgZW51bSB7ICAKCWJhc2VmaWVsZD1kZWMrb2N0K2hleCwK
CWZsb2F0ZmllbGQgPSBzY2llbnRpZmljK2ZpeGVkLAoJYWRqdXN0ZmllbGQgPSBsZWZ0K3JpZ2h0
K2ludGVybmFsCiAgICB9OwoKIyAxNzcgIi91c3IvaW5jbHVkZS9nKysvc3RyZWFtYnVmLmgiIDMK
CgogICAgb3N0cmVhbSogdGllKCkgY29uc3QgeyByZXR1cm4gX3RpZTsgfQogICAgb3N0cmVhbSog
dGllKG9zdHJlYW0qIHZhbCkgeyBvc3RyZWFtKiBzYXZlPV90aWU7IF90aWU9dmFsOyByZXR1cm4g
c2F2ZTsgfQoKICAgICAKICAgIHdjaGFyX3QgICBmaWxsKCkgY29uc3QgeyByZXR1cm4gX2ZpbGw7
IH0KICAgIHdjaGFyX3QgICBmaWxsKHdjaGFyX3QgICBuZXdmKQoJe3djaGFyX3QgICBvbGRmID0g
X2ZpbGw7IF9maWxsID0gbmV3ZjsgcmV0dXJuIG9sZGY7fQogICAgZm10ZmxhZ3MgZmxhZ3MoKSBj
b25zdCB7IHJldHVybiBfZmxhZ3M7IH0KICAgIGZtdGZsYWdzIGZsYWdzKGZtdGZsYWdzIG5ld192
YWwpIHsKCWZtdGZsYWdzIG9sZF92YWwgPSBfZmxhZ3M7IF9mbGFncyA9IG5ld192YWw7IHJldHVy
biBvbGRfdmFsOyB9CiAgICBpbnQgcHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gX3ByZWNpc2lv
bjsgfQogICAgaW50IHByZWNpc2lvbihpbnQgbmV3cCkgewoJdW5zaWduZWQgc2hvcnQgb2xkcCA9
IF9wcmVjaXNpb247IF9wcmVjaXNpb24gPSAodW5zaWduZWQgc2hvcnQpbmV3cDsKCXJldHVybiBv
bGRwOyB9CiAgICBmbXRmbGFncyBzZXRmKGZtdGZsYWdzIHZhbCkgewoJZm10ZmxhZ3Mgb2xkYml0
cyA9IF9mbGFnczsKCV9mbGFncyB8PSB2YWw7IHJldHVybiBvbGRiaXRzOyB9CiAgICBmbXRmbGFn
cyBzZXRmKGZtdGZsYWdzIHZhbCwgZm10ZmxhZ3MgbWFzaykgewoJZm10ZmxhZ3Mgb2xkYml0cyA9
IF9mbGFnczsKCV9mbGFncyA9IChfZmxhZ3MgJiB+bWFzaykgfCAodmFsICYgbWFzayk7IHJldHVy
biBvbGRiaXRzOyB9CiAgICBmbXRmbGFncyB1bnNldGYoZm10ZmxhZ3MgbWFzaykgewoJZm10Zmxh
Z3Mgb2xkYml0cyA9IF9mbGFnczsKCV9mbGFncyAmPSB+bWFzazsgcmV0dXJuIG9sZGJpdHM7IH0K
ICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIF93aWR0aDsgfQogICAgaW50IHdpZHRoKGlu
dCB2YWwpIHsgaW50IHNhdmUgPSBfd2lkdGg7IF93aWR0aCA9IHZhbDsgcmV0dXJuIHNhdmU7IH0K
CgoKCiAgICB2b2lkIF90aHJvd19mYWlsdXJlKCkgY29uc3QgeyB9CgogICAgdm9pZCBjbGVhcihp
b3N0YXRlIHN0YXRlID0gMCkgewoJX3N0YXRlID0gX3N0cmJ1ZiA/IHN0YXRlIDogc3RhdGV8YmFk
Yml0OwoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAgICB2
b2lkIHNldChpb3N0YXRlIGZsYWcpIHsgX3N0YXRlIHw9IGZsYWc7CglpZiAoX3N0YXRlICYgX2V4
Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KICAgIHZvaWQgc2V0c3RhdGUoaW9zdGF0ZSBm
bGFnKSB7IF9zdGF0ZSB8PSBmbGFnOyAgCglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJv
d19mYWlsdXJlKCk7IH0KICAgIGludCBnb29kKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlID09IDA7
IH0KICAgIGludCBlb2YoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgJiBpb3M6OmVvZmJpdDsgfQog
ICAgaW50IGZhaWwoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgJiAoaW9zOjpiYWRiaXR8aW9zOjpm
YWlsYml0KTsgfQogICAgaW50IGJhZCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIGlvczo6YmFk
Yml0OyB9CiAgICBpb3N0YXRlIHJkc3RhdGUoKSBjb25zdCB7IHJldHVybiBfc3RhdGU7IH0KICAg
IG9wZXJhdG9yIHZvaWQqKCkgY29uc3QgeyByZXR1cm4gZmFpbCgpID8gKHZvaWQqKTAgOiAodm9p
ZCopKC0xKTsgfQogICAgaW50IG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIGZhaWwoKTsgfQog
ICAgaW9zdGF0ZSBleGNlcHRpb25zKCkgY29uc3QgeyByZXR1cm4gX2V4Y2VwdGlvbnM7IH0KICAg
IHZvaWQgZXhjZXB0aW9ucyhpb3N0YXRlIGVuYWJsZSkgewoJX2V4Y2VwdGlvbnMgPSBlbmFibGU7
CglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KCiAgICBzdHJl
YW1idWYqIHJkYnVmKCkgY29uc3QgeyByZXR1cm4gX3N0cmJ1ZjsgfQogICAgc3RyZWFtYnVmKiBy
ZGJ1ZihzdHJlYW1idWYgKl9zKSB7CiAgICAgIHN0cmVhbWJ1ZiAqX29sZCA9IF9zdHJidWY7IF9z
dHJidWYgPSBfczsgY2xlYXIgKCk7IHJldHVybiBfb2xkOyB9CgogICAgc3RhdGljIGludCBzeW5j
X3dpdGhfc3RkaW8oaW50IG9uKTsKICAgIHN0YXRpYyB2b2lkIHN5bmNfd2l0aF9zdGRpbygpIHsg
c3luY193aXRoX3N0ZGlvKDEpOyB9CiAgICBzdGF0aWMgZm10ZmxhZ3MgYml0YWxsb2MoKTsKICAg
IHN0YXRpYyBpbnQgeGFsbG9jKCk7CiAgICB2b2lkKiYgcHdvcmQoaW50KTsKICAgIHZvaWQqIHB3
b3JkKGludCkgY29uc3Q7CiAgICBsb25nJiBpd29yZChpbnQpOwogICAgbG9uZyBpd29yZChpbnQp
IGNvbnN0OwoKCgoKCgoKCgogICAgIAogICAgY2xhc3MgSW5pdCB7CiAgICBwdWJsaWM6CiAgICAg
IEluaXQgKCkgeyB9CiAgICB9OwoKICBwcm90ZWN0ZWQ6CiAgICBpbmxpbmUgaW9zKHN0cmVhbWJ1
Ziogc2IgPSAwLCBvc3RyZWFtKiB0aWVfdG8gPSAwKTsKICAgIGlubGluZSB2aXJ0dWFsIH5pb3Mo
KTsKICAgIGlubGluZSB2b2lkIGluaXQoc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllID0gMCk7
Cn07CgoKCgp0eXBlZGVmIGlvczo6c2Vla19kaXIgX3NlZWtfZGlyOwoKCiAKIAogCiAKIAoKIAog
CmNsYXNzIHN0cmVhbW1hcmtlciA6IHByaXZhdGUgX0lPX21hcmtlciB7CiAgICBmcmllbmQgY2xh
c3Mgc3RyZWFtYnVmOwogICAgdm9pZCBzZXRfb2Zmc2V0KGludCBvZmZzZXQpIHsgX3BvcyA9IG9m
ZnNldDsgfQogIHB1YmxpYzoKICAgIHN0cmVhbW1hcmtlcihzdHJlYW1idWYgKnNiKTsKICAgIH5z
dHJlYW1tYXJrZXIoKTsKICAgIGludCBzYXZpbmcoKSB7IHJldHVybiAgMTsgfQogICAgaW50IGRl
bHRhKHN0cmVhbW1hcmtlciYpOwogICAgaW50IGRlbHRhKCk7Cn07CgpzdHJ1Y3Qgc3RyZWFtYnVm
IDogcHVibGljIF9JT19GSUxFIHsgIAogICAgZnJpZW5kIGNsYXNzIGlvczsKICAgIGZyaWVuZCBj
bGFzcyBpc3RyZWFtOwogICAgZnJpZW5kIGNsYXNzIG9zdHJlYW07CiAgICBmcmllbmQgY2xhc3Mg
c3RyZWFtbWFya2VyOwogICAgY29uc3Qgdm9pZCAqJl92dGFibGUoKSB7IHJldHVybiAqKGNvbnN0
IHZvaWQqKikoKF9JT19GSUxFKil0aGlzICsgMSk7IH0KICBwcm90ZWN0ZWQ6CiAgICBzdGF0aWMg
c3RyZWFtYnVmKiBfbGlzdF9hbGw7ICAKICAgIF9JT19GSUxFKiYgeGNoYWluKCkgeyByZXR1cm4g
X2NoYWluOyB9CiAgICB2b2lkIF91bl9saW5rKCk7CiAgICB2b2lkIF9saW5rX2luKCk7CiAgICBj
aGFyKiBncHRyKCkgY29uc3QKICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19z
YXZlX2Jhc2UgOiBfSU9fcmVhZF9wdHI7IH0KICAgIGNoYXIqIHBwdHIoKSBjb25zdCB7IHJldHVy
biBfSU9fd3JpdGVfcHRyOyB9CiAgICBjaGFyKiBlZ3B0cigpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAgIGNo
YXIqIGVwcHRyKCkgY29uc3QgeyByZXR1cm4gX0lPX3dyaXRlX2VuZDsgfQogICAgY2hhciogcGJh
c2UoKSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfYmFzZTsgfQogICAgY2hhciogZWJhY2soKSBj
b25zdAogICAgICB7IHJldHVybiBfZmxhZ3MgICYgMHgxMDAgID8gX0lPX3NhdmVfYmFzZSA6IF9J
T19yZWFkX2Jhc2U7fQogICAgY2hhciogYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZfYmFz
ZTsgfQogICAgY2hhciogZWJ1ZigpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZfZW5kOyB9CiAgICBp
bnQgYmxlbigpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZfZW5kIC0gX0lPX2J1Zl9iYXNlOyB9CiAg
ICB2b2lkIHhwdXRfY2hhcihjaGFyIGMpIHsgKl9JT193cml0ZV9wdHIrKyA9IGM7IH0KICAgIGlu
dCB4ZmxhZ3MoKSB7IHJldHVybiBfZmxhZ3MgOyB9CiAgICBpbnQgeGZsYWdzKGludCBmKSB7aW50
IGZsID0gX2ZsYWdzIDsgX2ZsYWdzICA9IGY7IHJldHVybiBmbDt9CiAgICB2b2lkIHhzZXRmbGFn
cyhpbnQgZikgeyBfZmxhZ3MgIHw9IGY7IH0KICAgIHZvaWQgeHNldGZsYWdzKGludCBmLCBpbnQg
bWFzaykKICAgICAgeyBfZmxhZ3MgID0gKF9mbGFncyAgJiB+bWFzaykgfCAoZiAmIG1hc2spOyB9
CiAgICB2b2lkIGdidW1wKGludCBuKQogICAgICB7IF9mbGFncyAgJiAweDEwMCAgPyAoX0lPX3Nh
dmVfYmFzZSs9bik6KF9JT19yZWFkX3B0cis9bik7fQogICAgdm9pZCBwYnVtcChpbnQgbikgeyBf
SU9fd3JpdGVfcHRyICs9IG47IH0KICAgIHZvaWQgc2V0YihjaGFyKiBiLCBjaGFyKiBlYiwgaW50
IGE9MCk7CiAgICB2b2lkIHNldHAoY2hhciogcCwgY2hhciogZXApCiAgICAgIHsgX0lPX3dyaXRl
X2Jhc2U9X0lPX3dyaXRlX3B0cj1wOyBfSU9fd3JpdGVfZW5kPWVwOyB9CiAgICB2b2lkIHNldGco
Y2hhciogZWIsIGNoYXIqIGcsIGNoYXIgKmVnKSB7CiAgICAgIGlmIChfZmxhZ3MgICYgMHgxMDAg
KSBfSU9fZnJlZV9iYWNrdXBfYXJlYSh0aGlzKTsgCiAgICAgIF9JT19yZWFkX2Jhc2UgPSBlYjsg
X0lPX3JlYWRfcHRyID0gZzsgX0lPX3JlYWRfZW5kID0gZWc7IH0KICAgIGNoYXIgKnNob3J0YnVm
KCkgeyByZXR1cm4gX3Nob3J0YnVmOyB9CgogICAgaW50IGluX2JhY2t1cCgpIHsgcmV0dXJuIF9m
bGFncyAmIDB4MTAwIDsgfQogICAgIAogICAgY2hhciAqR2Jhc2UoKSB7IHJldHVybiBpbl9iYWNr
dXAoKSA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9iYXNlOyB9CiAgICAgCiAgICBjaGFyICpl
R3B0cigpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3NhdmVfZW5kIDogX0lPX3JlYWRfZW5k
OyB9CiAgICAgCiAgICBjaGFyICpCYmFzZSgpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3Jl
YWRfYmFzZSA6IF9JT19zYXZlX2Jhc2U7IH0KICAgIGNoYXIgKkJwdHIoKSB7IHJldHVybiBfSU9f
YmFja3VwX2Jhc2U7IH0KICAgICAKICAgIGNoYXIgKmVCcHRyKCkgeyByZXR1cm4gaW5fYmFja3Vw
KCkgPyBfSU9fcmVhZF9lbmQgOiBfSU9fc2F2ZV9lbmQ7IH0KICAgIGNoYXIgKk5iYXNlKCkgeyBy
ZXR1cm4gX0lPX3NhdmVfYmFzZTsgfQogICAgY2hhciAqZU5wdHIoKSB7IHJldHVybiBfSU9fc2F2
ZV9lbmQ7IH0KICAgIGludCBoYXZlX2JhY2t1cCgpIHsgcmV0dXJuIF9JT19zYXZlX2Jhc2UgIT0g
X19udWxsIDsgfQogICAgaW50IGhhdmVfbWFya2VycygpIHsgcmV0dXJuIF9tYXJrZXJzICE9IF9f
bnVsbCA7IH0KICAgIHZvaWQgZnJlZV9iYWNrdXBfYXJlYSgpOwogICAgdm9pZCB1bnNhdmVfbWFy
a2VycygpOyAgCiAgICBpbnQgcHV0X21vZGUoKSB7IHJldHVybiBfZmxhZ3MgJiAweDgwMCA7IH0K
ICAgIGludCBzd2l0Y2hfdG9fZ2V0X21vZGUoKTsKICAgIAogICAgc3RyZWFtYnVmKGludCBmbGFn
cz0wKTsKICBwdWJsaWM6CiAgICBzdGF0aWMgaW50IGZsdXNoX2FsbCgpOwogICAgc3RhdGljIHZv
aWQgZmx1c2hfYWxsX2xpbmVidWZmZXJlZCgpOyAgCiAgICB2aXJ0dWFsIH5zdHJlYW1idWYoKTsK
ICAgIHZpcnR1YWwgaW50IG92ZXJmbG93KGludCBjID0gKC0xKSApOyAgCiAgICB2aXJ0dWFsIGlu
dCB1bmRlcmZsb3coKTsgIAogICAgdmlydHVhbCBpbnQgdWZsb3coKTsgIAogICAgdmlydHVhbCBp
bnQgcGJhY2tmYWlsKGludCBjKTsKIAogICAgdmlydHVhbCBzdHJlYW1zaXplIHhzcHV0bihjb25z
dCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHhzZ2V0bihj
aGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vla29mZihzdHJl
YW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCk7CiAgICB2aXJ0dWFs
IHN0cmVhbXBvcyBzZWVrcG9zKHN0cmVhbXBvcyBwb3MsIGludCBtb2RlID0gaW9zOjppbnxpb3M6
Om91dCk7CgogICAgc3RyZWFtcG9zIHB1YnNlZWtvZmYoc3RyZWFtb2ZmIG8sIF9zZWVrX2RpciBk
LCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KQogICAgICB7IHJldHVybiBfSU9fc2Vla29mZiAo
dGhpcywgbywgZCwgbW9kZSk7IH0KICAgIHN0cmVhbXBvcyBwdWJzZWVrcG9zKHN0cmVhbXBvcyBw
b3MsIGludCBtb2RlID0gaW9zOjppbnxpb3M6Om91dCkKICAgICAgeyByZXR1cm4gX0lPX3NlZWtw
b3MgKHRoaXMsIHBvcywgbW9kZSk7IH0KICAgIHN0cmVhbXBvcyBzc2Vla29mZihzdHJlYW1vZmYs
IF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCk7CiAgICBzdHJlYW1wb3Mgc3Nl
ZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KTsKICAgIHZp
cnR1YWwgc3RyZWFtYnVmKiBzZXRidWYoY2hhciogcCwgaW50IGxlbik7CiAgICB2aXJ0dWFsIGlu
dCBzeW5jKCk7CiAgICB2aXJ0dWFsIGludCBkb2FsbG9jYXRlKCk7CgogICAgaW50IHNlZWttYXJr
KHN0cmVhbW1hcmtlciYgbWFyaywgaW50IGRlbHRhID0gMCk7CiAgICBpbnQgc3B1dGJhY2tjKGNo
YXIgYyk7CiAgICBpbnQgc3VuZ2V0YygpOwogICAgaW50IHVuYnVmZmVyZWQoKSB7IHJldHVybiBf
ZmxhZ3MgJiAyICA/IDEgOiAwOyB9CiAgICBpbnQgbGluZWJ1ZmZlcmVkKCkgeyByZXR1cm4gX2Zs
YWdzICYgMHgyMDAgID8gMSA6IDA7IH0KICAgIHZvaWQgdW5idWZmZXJlZChpbnQgaSkKCXsgaWYg
KGkpIF9mbGFncyB8PSAyIDsgZWxzZSBfZmxhZ3MgJj0gfjIgOyB9CiAgICB2b2lkIGxpbmVidWZm
ZXJlZChpbnQgaSkKCXsgaWYgKGkpIF9mbGFncyB8PSAweDIwMCA7IGVsc2UgX2ZsYWdzICY9IH4w
eDIwMCA7IH0KICAgIGludCBhbGxvY2F0ZSgpIHsgIAoJaWYgKGJhc2UoKSB8fCB1bmJ1ZmZlcmVk
KCkpIHJldHVybiAwOwoJZWxzZSByZXR1cm4gZG9hbGxvY2F0ZSgpOyB9CiAgICAgCiAgICB2b2lk
IGFsbG9jYnVmKCkgeyBpZiAoYmFzZSgpID09IF9fbnVsbCApIGRvYWxsb2NidWYoKTsgfQogICAg
dm9pZCBkb2FsbG9jYnVmKCk7CiAgICBpbnQgaW5fYXZhaWwoKSB7IHJldHVybiBfSU9fcmVhZF9l
bmQgLSBfSU9fcmVhZF9wdHI7IH0KICAgIGludCBvdXRfd2FpdGluZygpIHsgcmV0dXJuIF9JT193
cml0ZV9wdHIgLSBfSU9fd3JpdGVfYmFzZTsgfQogICAgc3RyZWFtc2l6ZSBzcHV0bihjb25zdCBj
aGFyKiBzLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIHhzcHV0bihzLCBuKTsgfQogICAgc3RyZWFt
c2l6ZSBwYWRuKGNoYXIgcGFkLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIF9JT19wYWRuKHRoaXMs
IHBhZCwgbik7IH0KICAgIHN0cmVhbXNpemUgc2dldG4oY2hhciogcywgc3RyZWFtc2l6ZSBuKSB7
IHJldHVybiBfSU9fc2dldG4odGhpcywgcywgbik7IH0KICAgIGludCBpZ25vcmUoaW50KTsKICAg
IGludCBnZXRfY29sdW1uKCk7CiAgICBpbnQgc2V0X2NvbHVtbihpbnQpOwogICAgbG9uZyBzZ2V0
bGluZShjaGFyKiBidWYsIHNpemVfdCAgIG4sIGNoYXIgZGVsaW0sIGludCBwdXRiYWNrX2RlbGlt
KTsKICAgIGludCBzcHV0YyhpbnQgYykgeyByZXR1cm4gX0lPX3B1dGMoYywgdGhpcyk7IH0KICAg
IGludCBzYnVtcGMoKSB7IHJldHVybiBfSU9fZ2V0Yyh0aGlzKTsgfQogICAgaW50IHNnZXRjKCkg
eyByZXR1cm4gKCggIHRoaXMgICktPl9JT19yZWFkX3B0ciA+PSAoICB0aGlzICApLT5fSU9fcmVh
ZF9lbmQgJiYgX191bmRlcmZsb3cgKCAgdGhpcyAgKSA9PSAoLTEpICA/ICgtMSkgIDogKih1bnNp
Z25lZCBjaGFyICopICggIHRoaXMgICktPl9JT19yZWFkX3B0cikgIDsgfQogICAgaW50IHNuZXh0
YygpIHsKCWlmIChfSU9fcmVhZF9wdHIgPj0gX0lPX3JlYWRfZW5kICYmIF9fdW5kZXJmbG93KHRo
aXMpID09ICgtMSkgKQoJICByZXR1cm4gKC0xKSA7CgllbHNlIHJldHVybiBfSU9fcmVhZF9wdHIr
Kywgc2dldGMoKTsgfQogICAgdm9pZCBzdG9zc2MoKSB7IGlmIChfSU9fcmVhZF9wdHIgPCBfSU9f
cmVhZF9lbmQpIF9JT19yZWFkX3B0cisrOyB9CiAgICBpbnQgdnNjYW4oY2hhciBjb25zdCAqZm10
MCwgX19nbnVjX3ZhX2xpc3QgIGFwLCBpb3MqIHN0cmVhbSA9IF9fbnVsbCApOwogICAgaW50IHNj
YW4oY2hhciBjb25zdCAqZm10MCAuLi4pOwogICAgaW50IHZmb3JtKGNoYXIgY29uc3QgKmZtdDAs
IF9fZ251Y192YV9saXN0ICBhcCk7CiAgICBpbnQgZm9ybShjaGFyIGNvbnN0ICpmbXQwIC4uLik7
CgoKCgogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c19yZWFkKGNoYXIqIGJ1Ziwgc3RyZWFtc2l6
ZSBzaXplKTsKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfd3JpdGUoY29uc3QgY2hhciosIHN0
cmVhbXNpemUpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc3lzX3NlZWsoc3RyZWFtb2ZmLCBfc2Vl
a19kaXIpOwogICAgdmlydHVhbCBpbnQgc3lzX2Nsb3NlKCk7CiAgICB2aXJ0dWFsIGludCBzeXNf
c3RhdCh2b2lkKik7ICAKCiAgICB2aXJ0dWFsIGludCBzaG93bWFueWMoKTsKICAgIHZpcnR1YWwg
dm9pZCBpbWJ1ZSh2b2lkICopOwoKfTsKCiAKIAoKY2xhc3MgZmlsZWJ1ZiA6IHB1YmxpYyBzdHJl
YW1idWYgewogIHByb3RlY3RlZDoKICAgIHZvaWQgaW5pdCgpOwogIHB1YmxpYzoKICAgIHN0YXRp
YyBjb25zdCBpbnQgb3BlbnByb3Q7ICAKICAgIGZpbGVidWYoKTsKICAgIGZpbGVidWYoaW50IGZk
KTsKICAgIGZpbGVidWYoaW50IGZkLCBjaGFyKiBwLCBpbnQgbGVuKTsKCgoKICAgIH5maWxlYnVm
KCk7CiAgICBmaWxlYnVmKiBhdHRhY2goaW50IGZkKTsKICAgIGZpbGVidWYqIG9wZW4oY29uc3Qg
Y2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpOwogICAgZmlsZWJ1Ziogb3Blbihjb25z
dCBjaGFyICpmaWxlbmFtZSwgaW9zOjpvcGVubW9kZSBtb2RlLCBpbnQgcHJvdCA9IDA2NjQpOwog
ICAgdmlydHVhbCBpbnQgdW5kZXJmbG93KCk7CiAgICB2aXJ0dWFsIGludCBvdmVyZmxvdyhpbnQg
YyA9ICgtMSkgKTsKICAgIGludCBpc19vcGVuKCkgY29uc3QgeyByZXR1cm4gX2ZpbGVubyA+PSAw
OyB9CiAgICBpbnQgZmQoKSBjb25zdCB7IHJldHVybiBpc19vcGVuKCkgPyBfZmlsZW5vIDogKC0x
KSA7IH0KICAgIGZpbGVidWYqIGNsb3NlKCk7CiAgICB2aXJ0dWFsIGludCBkb2FsbG9jYXRlKCk7
CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQg
bW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtYnVmKiBzZXRidWYoY2hh
ciogcCwgaW50IGxlbik7CiAgICBzdHJlYW1zaXplIHhzcHV0bihjb25zdCBjaGFyKiBzLCBzdHJl
YW1zaXplIG4pOwogICAgc3RyZWFtc2l6ZSB4c2dldG4oY2hhciogcywgc3RyZWFtc2l6ZSBuKTsK
ICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICBwcm90ZWN0ZWQ6ICAKIAogICAgaW50IGlzX3JlYWRp
bmcoKSB7IHJldHVybiBlYmFjaygpICE9IGVncHRyKCk7IH0KICAgIGNoYXIqIGN1cl9wdHIoKSB7
IHJldHVybiBpc19yZWFkaW5nKCkgPyAgZ3B0cigpIDogcHB0cigpOyB9CiAgICAgCiAgICBjaGFy
KiBmaWxlX3B0cigpIHsgcmV0dXJuIGVHcHRyKCk7IH0KICAgICAKICAgIHZpcnR1YWwgc3RyZWFt
c2l6ZSBzeXNfcmVhZChjaGFyKiBidWYsIHN0cmVhbXNpemUgc2l6ZSk7CiAgICB2aXJ0dWFsIHN0
cmVhbXBvcyBzeXNfc2VlayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICB2aXJ0dWFsIHN0cmVh
bXNpemUgc3lzX3dyaXRlKGNvbnN0IGNoYXIqLCBzdHJlYW1zaXplKTsKICAgIHZpcnR1YWwgaW50
IHN5c19zdGF0KHZvaWQqKTsgIAogICAgdmlydHVhbCBpbnQgc3lzX2Nsb3NlKCk7CgoKCgp9OwoK
aW5saW5lIHZvaWQgaW9zOjppbml0KHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZV90bykgewoJ
CV9zdGF0ZSA9IHNiID8gaW9zOjpnb29kYml0IDogaW9zOjpiYWRiaXQ7IF9leGNlcHRpb25zPTA7
CgkJX3N0cmJ1Zj1zYjsgX3RpZSA9IHRpZV90bzsgX3dpZHRoPTA7IF9maWxsPScgJzsKCgkJX2Zs
YWdzPWlvczo6c2tpcHdzfGlvczo6ZGVjOwoKCgoJCV9wcmVjaXNpb249NjsgX2FycmF5cyA9IDA7
IH0KCmlubGluZSBpb3M6OmlvcyhzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsgaW5p
dChzYiwgdGllX3RvKTsgfQoKaW5saW5lIGlvczo6fmlvcygpIHsKCgoKICAgICAKICAgICAKICAg
IG9wZXJhdG9yIGRlbGV0ZVtdIChfYXJyYXlzKTsKfQp9ICAKCiMgMzEgIi91c3IvaW5jbHVkZS9n
KysvaW9zdHJlYW0uaCIgMiAzCgoKZXh0ZXJuICJDKysiIHsKY2xhc3MgaXN0cmVhbTsgY2xhc3Mg
b3N0cmVhbTsKdHlwZWRlZiBpb3MmICgqX19tYW5pcCkoaW9zJik7CnR5cGVkZWYgaXN0cmVhbSYg
KCpfX2ltYW5pcCkoaXN0cmVhbSYpOwp0eXBlZGVmIG9zdHJlYW0mICgqX19vbWFuaXApKG9zdHJl
YW0mKTsKCmV4dGVybiBpc3RyZWFtJiB3cyhpc3RyZWFtJiBpbnMpOwpleHRlcm4gb3N0cmVhbSYg
Zmx1c2gob3N0cmVhbSYgb3V0cyk7CmV4dGVybiBvc3RyZWFtJiBlbmRsKG9zdHJlYW0mIG91dHMp
OwpleHRlcm4gb3N0cmVhbSYgZW5kcyhvc3RyZWFtJiBvdXRzKTsKCmNsYXNzIG9zdHJlYW0gOiB2
aXJ0dWFsIHB1YmxpYyBpb3MKewogICAgIAogICAgdm9pZCBkb19vc2Z4KCk7CiAgcHVibGljOgog
ICAgb3N0cmVhbSgpIHsgfQogICAgb3N0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVk
PSBfX251bGwgKTsKICAgIGludCBvcGZ4KCkgewoJaWYgKCFnb29kKCkpIHJldHVybiAwOwoJZWxz
ZSB7IGlmIChfdGllKSBfdGllLT5mbHVzaCgpOyAgOyByZXR1cm4gMTt9IH0KICAgIHZvaWQgb3Nm
eCgpIHsgIDsKCQkgIGlmIChmbGFncygpICYgKGlvczo6dW5pdGJ1Znxpb3M6OnN0ZGlvKSkKCQkg
ICAgICBkb19vc2Z4KCk7IH0KICAgIG9zdHJlYW0mIGZsdXNoKCk7CiAgICBvc3RyZWFtJiBwdXQo
Y2hhciBjKSB7IF9zdHJidWYtPnNwdXRjKGMpOyByZXR1cm4gKnRoaXM7IH0KCgoKCgogICAgb3N0
cmVhbSYgd3JpdGUoY29uc3QgY2hhciAqcywgc3RyZWFtc2l6ZSBuKTsKICAgIG9zdHJlYW0mIHdy
aXRlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4g
d3JpdGUoKGNvbnN0IGNoYXIqKXMsIG4pO30KICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHNpZ25l
ZCBjaGFyICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFy
KilzLCBuKTt9CiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCB2b2lkICpzLCBzdHJlYW1zaXplIG4p
CiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiBz
ZWVrcChzdHJlYW1wb3MpOwogICAgb3N0cmVhbSYgc2Vla3Aoc3RyZWFtb2ZmLCBfc2Vla19kaXIp
OwogICAgc3RyZWFtcG9zIHRlbGxwKCk7CiAgICBvc3RyZWFtJiBmb3JtKGNvbnN0IGNoYXIgKmZv
cm1hdCAuLi4pOwogICAgb3N0cmVhbSYgdmZvcm0oY29uc3QgY2hhciAqZm9ybWF0LCBfX2dudWNf
dmFfbGlzdCAgYXJncyk7CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjaGFyIGMpOwogICAgb3N0
cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNo
YXIpYzsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzaWduZWQgY2hhciBjKSB7IHJldHVybiAo
KnRoaXMpIDw8IChjaGFyKWM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3QgY2hhciAq
cyk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMpCgl7IHJl
dHVybiAoKnRoaXMpIDw8IChjb25zdCBjaGFyKilzOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8
KGNvbnN0IHNpZ25lZCBjaGFyICpzKQoJeyByZXR1cm4gKCp0aGlzKSA8PCAoY29uc3QgY2hhciop
czsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCB2b2lkICpwKTsKICAgIG9zdHJlYW0m
IG9wZXJhdG9yPDwoaW50IG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25lZCBpbnQg
bik7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRv
cjw8KHVuc2lnbmVkIGxvbmcgbik7CgogICAgX19leHRlbnNpb25fXyBvc3RyZWFtJiBvcGVyYXRv
cjw8KGxvbmcgbG9uZyBuKTsKICAgIF9fZXh0ZW5zaW9uX18gb3N0cmVhbSYgb3BlcmF0b3I8PCh1
bnNpZ25lZCBsb25nIGxvbmcgbik7CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzaG9ydCBuKSB7
cmV0dXJuIG9wZXJhdG9yPDwoKGludCluKTt9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2ln
bmVkIHNob3J0IG4pIHtyZXR1cm4gb3BlcmF0b3I8PCgodW5zaWduZWQgaW50KW4pO30KCiAgICBv
c3RyZWFtJiBvcGVyYXRvcjw8KGJvb2wgYikgeyByZXR1cm4gb3BlcmF0b3I8PCgoaW50KWIpOyB9
CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChkb3VibGUgbik7CiAgICBvc3RyZWFtJiBvcGVyYXRv
cjw8KGZsb2F0IG4pIHsgcmV0dXJuIG9wZXJhdG9yPDwoKGRvdWJsZSluKTsgfQoKICAgIG9zdHJl
YW0mIG9wZXJhdG9yPDwobG9uZyBkb3VibGUgbik7CgoKCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8
KF9fb21hbmlwIGZ1bmMpIHsgcmV0dXJuICgqZnVuYykoKnRoaXMpOyB9CiAgICBvc3RyZWFtJiBv
cGVyYXRvcjw8KF9fbWFuaXAgZnVuYykgeygqZnVuYykoKnRoaXMpOyByZXR1cm4gKnRoaXM7fQog
ICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzdHJlYW1idWYqKTsKCgoKfTsKCmNsYXNzIGlzdHJlYW0g
OiB2aXJ0dWFsIHB1YmxpYyBpb3MKewogICAgIApwcm90ZWN0ZWQ6CiAgICBzaXplX3QgICBfZ2Nv
dW50OwoKICAgIGludCBfc2tpcF93cygpOwogIHB1YmxpYzoKICAgIGlzdHJlYW0oKTogX2djb3Vu
dCAoMCkgeyB9CiAgICBpc3RyZWFtKHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qdGllZD0gX19udWxs
ICk7CiAgICBpc3RyZWFtJiBnZXQoY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xu
Jyk7CiAgICBpc3RyZWFtJiBnZXQodW5zaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRl
bGltID0gJ1xuJykKCXsgcmV0dXJuIGdldCgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAg
aXN0cmVhbSYgZ2V0KGNoYXImIGMpOwogICAgaXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXImIGMp
IHsgcmV0dXJuIGdldCgoY2hhciYpYyk7IH0KICAgIGlzdHJlYW0mIGdldGxpbmUoY2hhciogcHRy
LCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJyk7CiAgICBpc3RyZWFtJiBnZXRsaW5lKHVuc2ln
bmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXRs
aW5lKChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXQoc2lnbmVkIGNo
YXImIGMpICB7IHJldHVybiBnZXQoKGNoYXImKWMpOyB9CiAgICBpc3RyZWFtJiBnZXQoc2lnbmVk
IGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXQoKGNo
YXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlzdHJlYW0mIGdldGxpbmUoc2lnbmVkIGNoYXIq
IHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXRsaW5lKChjaGFy
KilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiByZWFkKGNoYXIgKnB0ciwgc3RyZWFt
c2l6ZSBuKTsKICAgIGlzdHJlYW0mIHJlYWQodW5zaWduZWQgY2hhciAqcHRyLCBzdHJlYW1zaXpl
IG4pCiAgICAgIHsgcmV0dXJuIHJlYWQoKGNoYXIqKXB0ciwgbik7IH0KICAgIGlzdHJlYW0mIHJl
YWQoc2lnbmVkIGNoYXIgKnB0ciwgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiByZWFkKChj
aGFyKilwdHIsIG4pOyB9CiAgICBpc3RyZWFtJiByZWFkKHZvaWQgKnB0ciwgc3RyZWFtc2l6ZSBu
KQogICAgICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9CiAgICBpc3RyZWFtJiBnZXQo
c3RyZWFtYnVmJiBzYiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0cyhjaGFy
ICoqcywgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaW50IGlwZngoaW50IG5lZWQgPSAwKSB7Cglp
ZiAoIWdvb2QoKSkgeyBzZXQoaW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7IH0KCWVsc2UgewoJICAg
OwoJICBpZiAoX3RpZSAmJiAobmVlZCA9PSAwIHx8IHJkYnVmKCktPmluX2F2YWlsKCkgPCBuZWVk
KSkgX3RpZS0+Zmx1c2goKTsKCSAgaWYgKCFuZWVkICYmIChmbGFncygpICYgaW9zOjpza2lwd3Mp
KSByZXR1cm4gX3NraXBfd3MoKTsKCSAgZWxzZSByZXR1cm4gMTsKCX0KICAgIH0KICAgIGludCBp
cGZ4MCgpIHsgIAoJaWYgKCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9
CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90aWUpIF90aWUtPmZsdXNoKCk7CgkgIGlmIChmbGFncygp
ICYgaW9zOjpza2lwd3MpIHJldHVybiBfc2tpcF93cygpOwoJICBlbHNlIHJldHVybiAxOwoJfQog
ICAgfQogICAgaW50IGlwZngxKCkgeyAgCglpZiAoIWdvb2QoKSkgeyBzZXQoaW9zOjpmYWlsYml0
KTsgcmV0dXJuIDA7IH0KCWVsc2UgewoJICAgOwoJICBpZiAoX3RpZSAmJiByZGJ1ZigpLT5pbl9h
dmFpbCgpID09IDApIF90aWUtPmZsdXNoKCk7CgkgIHJldHVybiAxOwoJfQogICAgfQogICAgdm9p
ZCBpc2Z4KCkgeyAgOyB9CiAgICBpbnQgZ2V0KCkgeyBpZiAoIWlwZngxKCkpIHJldHVybiAoLTEp
IDsKCQllbHNlIHsgaW50IGNoID0gX3N0cmJ1Zi0+c2J1bXBjKCk7CgkJICAgICAgIGlmIChjaCA9
PSAoLTEpICkgc2V0KGlvczo6ZW9mYml0KTsKCQkgICAgICAgaXNmeCgpOwoJCSAgICAgICByZXR1
cm4gY2g7CgkJICAgICB9IH0KICAgIGludCBwZWVrKCk7CiAgICBzaXplX3QgICBnY291bnQoKSB7
IHJldHVybiBfZ2NvdW50OyB9CiAgICBpc3RyZWFtJiBpZ25vcmUoaW50IG49MSwgaW50IGRlbGlt
ID0gKC0xKSApOwogICAgaW50IHN5bmMgKCk7CiAgICBpc3RyZWFtJiBzZWVrZyhzdHJlYW1wb3Mp
OwogICAgaXN0cmVhbSYgc2Vla2coc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgc3RyZWFtcG9z
IHRlbGxnKCk7CiAgICBpc3RyZWFtJiBwdXRiYWNrKGNoYXIgY2gpIHsKCWlmIChnb29kKCkgJiYg
X3N0cmJ1Zi0+c3B1dGJhY2tjKGNoKSA9PSAoLTEpICkgY2xlYXIoaW9zOjpiYWRiaXQpOwoJcmV0
dXJuICp0aGlzO30KICAgIGlzdHJlYW0mIHVuZ2V0KCkgewoJaWYgKGdvb2QoKSAmJiBfc3RyYnVm
LT5zdW5nZXRjKCkgPT0gKC0xKSApIGNsZWFyKGlvczo6YmFkYml0KTsKCXJldHVybiAqdGhpczt9
CiAgICBpc3RyZWFtJiBzY2FuKGNvbnN0IGNoYXIgKmZvcm1hdCAuLi4pOwogICAgaXN0cmVhbSYg
dnNjYW4oY29uc3QgY2hhciAqZm9ybWF0LCBfX2dudWNfdmFfbGlzdCAgYXJncyk7CgoKCgoKCiAg
ICBpc3RyZWFtJiBvcGVyYXRvcj4+KGNoYXIqKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5z
aWduZWQgY2hhciogcCkgeyByZXR1cm4gb3BlcmF0b3I+PigoY2hhciopcCk7IH0KICAgIGlzdHJl
YW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNoYXIqcCkgeyByZXR1cm4gb3BlcmF0b3I+PigoY2hhciop
cCk7IH0KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oY2hhciYgYyk7CiAgICBpc3RyZWFtJiBvcGVy
YXRvcj4+KHVuc2lnbmVkIGNoYXImIGMpIHtyZXR1cm4gb3BlcmF0b3I+PigoY2hhciYpYyk7fQog
ICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaWduZWQgY2hhciYgYykge3JldHVybiBvcGVyYXRvcj4+
KChjaGFyJiljKTt9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGludCYpOwogICAgaXN0cmVhbSYg
b3BlcmF0b3I+Pihsb25nJik7CgogICAgX19leHRlbnNpb25fXyBpc3RyZWFtJiBvcGVyYXRvcj4+
KGxvbmcgbG9uZyYpOwogICAgX19leHRlbnNpb25fXyBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2ln
bmVkIGxvbmcgbG9uZyYpOwoKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc2hvcnQmKTsKICAgIGlz
dHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgaW50Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+
KHVuc2lnbmVkIGxvbmcmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQgc2hvcnQm
KTsKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGJvb2wmKTsKCiAgICBpc3RyZWFtJiBvcGVyYXRv
cj4+KGZsb2F0Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGRvdWJsZSYpOwogICAgaXN0cmVh
bSYgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+PiggX19t
YW5pcCBmdW5jKSB7KCpmdW5jKSgqdGhpcyk7IHJldHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiBv
cGVyYXRvcj4+KF9faW1hbmlwIGZ1bmMpIHsgcmV0dXJuICgqZnVuYykoKnRoaXMpOyB9CiAgICBp
c3RyZWFtJiBvcGVyYXRvcj4+KHN0cmVhbWJ1ZiopOwp9OwoKY2xhc3MgaW9zdHJlYW0gOiBwdWJs
aWMgaXN0cmVhbSwgcHVibGljIG9zdHJlYW0KewogIHB1YmxpYzoKICAgIGlvc3RyZWFtKCkgeyB9
CiAgICBpb3N0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKnRpZWQ9IF9fbnVsbCApOwp9OwoK
Y2xhc3MgX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiA6IHB1YmxpYyBpc3RyZWFtIHsKcHVibGljOgog
IF9JT19pc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShpc3RyZWFtJik7CiAgX0lPX2lzdHJl
YW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KF9JT19pc3RyZWFtX3dpdGhhc3NpZ24mIHJocykKICAg
IHsgcmV0dXJuIG9wZXJhdG9yPSAoc3RhdGljX2Nhc3Q8aXN0cmVhbSY+IChyaHMpKTsgfQp9OwoK
Y2xhc3MgX0lPX29zdHJlYW1fd2l0aGFzc2lnbiA6IHB1YmxpYyBvc3RyZWFtIHsKcHVibGljOgog
IF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShvc3RyZWFtJik7CiAgX0lPX29zdHJl
YW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIHJocykKICAg
IHsgcmV0dXJuIG9wZXJhdG9yPSAoc3RhdGljX2Nhc3Q8b3N0cmVhbSY+IChyaHMpKTsgfQp9OwoK
ZXh0ZXJuIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24gY2luOwogCmV4dGVybiBfSU9fb3N0cmVhbV93
aXRoYXNzaWduIGNvdXQsIGNlcnI7CgpleHRlcm4gX0lPX29zdHJlYW1fd2l0aGFzc2lnbiBjbG9n
CgoKCjsKCmV4dGVybiBpc3RyZWFtJiBsb2NrKGlzdHJlYW0mIGlucyk7CmV4dGVybiBpc3RyZWFt
JiB1bmxvY2soaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIG9zdHJlYW0mIGxvY2sob3N0cmVhbSYgb3V0
cyk7CmV4dGVybiBvc3RyZWFtJiB1bmxvY2sob3N0cmVhbSYgb3V0cyk7CgpzdHJ1Y3QgSW9zdHJl
YW1faW5pdCB7IH0gOyAgIAoKaW5saW5lIGlvcyYgZGVjKGlvcyYgaSkKeyBpLnNldGYoaW9zOjpk
ZWMsIGlvczo6ZGVjfGlvczo6aGV4fGlvczo6b2N0KTsgcmV0dXJuIGk7IH0KaW5saW5lIGlvcyYg
aGV4KGlvcyYgaSkKeyBpLnNldGYoaW9zOjpoZXgsIGlvczo6ZGVjfGlvczo6aGV4fGlvczo6b2N0
KTsgcmV0dXJuIGk7IH0KaW5saW5lIGlvcyYgb2N0KGlvcyYgaSkKeyBpLnNldGYoaW9zOjpvY3Qs
IGlvczo6ZGVjfGlvczo6aGV4fGlvczo6b2N0KTsgcmV0dXJuIGk7IH0KfSAgCgoKIyA2ICIvdXNy
L2luY2x1ZGUvZysrL2lvc3RyZWFtIiAyIDMKCgojIDEgImxpbnV4Y291dC5DIiAyCgppbnQgZm9v
KGludCogY2hhbmdlbWUpIHsgcmV0dXJuICgqY2hhbmdlbWUgPSAxMDApOyB9CmludCBtYWluKCkg
ewogIGludCB4PTExMTE7CiAgc3RkOjpjb3V0IDw8ICJmb28oJngpOiAiIDw8IGZvbygmeCkgPDwg
IiwgeDogIiA8PCB4IDw8IHN0ZDo6ZW5kbDsKfQo=


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: c++/9334: args to cout evaluated prematurely
@ 2003-01-15 21:46 bangerth
  0 siblings, 0 replies; 2+ messages in thread
From: bangerth @ 2003-01-15 21:46 UTC (permalink / raw)
  To: bala, gcc-bugs, gcc-prs, nobody

Synopsis: args to cout evaluated prematurely

State-Changed-From-To: open->closed
State-Changed-By: bangerth
State-Changed-When: Wed Jan 15 13:46:22 2003
State-Changed-Why:
    That's how C++ works: the order of evaluation of statements
    between sequence points is unspecified. So either the
    value of "x" or of "foo(&x)" is pushed on the stack first.
    Most any good C/C++ book will explain the matter.
    W.

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=9334


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2003-01-15 21:46 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-01-15 20:46 c++/9334: args to cout evaluated prematurely bala
2003-01-15 21:46 bangerth

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