public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* optimization/4358: optimized code produces incorrect results
@ 2001-09-19  4:36 Ko.vanderSloot
  0 siblings, 0 replies; 2+ messages in thread
From: Ko.vanderSloot @ 2001-09-19  4:36 UTC (permalink / raw)
  To: gcc-gnats

>Number:         4358
>Category:       optimization
>Synopsis:       optimized code produces incorrect results
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Sep 19 04:36:02 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Ko van der Sloot
>Release:        Reading specs from /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.0/specs Configured with: ../gcc-3.0/configure  Thread model: single  gcc version 3
>Organization:
>Environment:
RedHat linux 
>Description:
when optimized with -O1 (or higher) the program produces
different (incorrect) results compared to -O0 optimisation.

The same problem occurs with gcc2.95 on Intel-Solaris
On Sparc-Solaris -O1 produces the same results....

It is reported to me to work correct on Power PC's
>How-To-Repeat:
just compile with -O0 or -O1 to see the differences
>Fix:
printing Distance on line 10 of main (just before the if)
makes it work
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="problem.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="problem.ii"

IyAxICJwcm9ibGVtLmNjIgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaW9zdHJlYW0i
IDEgMwojIDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2lvc3RyZWFtIiAzCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3N0cmVhbS5oIiAxIDMKIyAzOCAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3N0cmVhbS5oIiAzCgojIDEgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIg
MSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0
cy9jKytjb25maWcuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1s
aW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvb3NfZGVmaW5lcy5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI4MyAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvc3lzL2NkZWZzLmgiIDEgMwojIDI4NCAiL3Vzci9pbmNsdWRlL2Zl
YXR1cmVzLmgiIDIgMwojIDMxMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvZ251L3N0dWJzLmgiIDEgMwojIDMxMiAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgi
IDIgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2Jp
dHMvb3NfZGVmaW5lcy5oIiAyIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2
LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAyIDMKIyA0MCAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9pb3N0cmVhbS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX29zdHJlYW0uaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfb3N0cmVhbS5oIiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfaW9zLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX2lvcy5oIiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfaW9zZndkLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2lvc2Z3ZC5oIiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51
eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgNDAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfaW9zZndkLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdHJpbmdmd2QuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdHJpbmdmd2QuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMt
bGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RyaW5nZndkLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8
Y2xhc3MgX0NoYXJUPgogICAgc3RydWN0IGNoYXJfdHJhaXRzOwoKICB0ZW1wbGF0ZTw+IGNsYXNz
IGNoYXJfdHJhaXRzPGNoYXI+OwoKICB0ZW1wbGF0ZTw+IGNsYXNzIGNoYXJfdHJhaXRzPHdjaGFy
X3Q+OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYWxsb2NhdG9yOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0
czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+
ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZzsKCiAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hhcj4g
c3RyaW5nOwoKICB0eXBlZGVmIGJhc2ljX3N0cmluZzx3Y2hhcl90PiB3c3RyaW5nOwoKfQojIDQx
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAyIDMKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnBvcy5oIiAxIDMKIyAzOCAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL2Zwb3MuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysraW8uaCIgMSAzCiMgMzUgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAzCiMgMSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9jc3RkaW8iIDEgMwojIDMxICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2NzdGRpbyIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfY3N0ZGlvLmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2NzdGRpby5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxp
bnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX2NzdGRkZWYuaCIgMwojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDE0NyAiL3Vzci9sb2NhbC9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBl
ZGVmIGludCBwdHJkaWZmX3Q7CiMgMTk5ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHNp
emVfdDsKIyAzOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgi
IDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpwdHJkaWZmX3Q7CiAgdXNpbmcgOjpzaXpl
X3Q7Cn0KIyAzOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIg
MiAzCiMgNDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGlvLmgiIDMK
IyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl
L3N0ZGlvLmgiIDEgMwojIDM2ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIg
MSAzCiMgMzcgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu
Y2x1ZGUvc3RkaW8uaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0MyAi
L3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRp
by5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjYgIi91c3Iv
aW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAz
CiMgMjcgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg
MzAgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgdW5zaWduZWQgY2hh
ciBfX3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYgdW5z
aWduZWQgaW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9fZXh0
ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9fZXh0
ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ5ICIvdXNyL2luY2x1
ZGUvYml0cy90eXBlcy5oIiAzCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYg
dW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2ludDE2
X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2lnbmVk
IGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4dGVu
c2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVuc2lv
bl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90OwoKdHlwZWRlZiBf
X3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7CnR5cGVkZWYg
X191X2ludCBfX3VpZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlwZWRlZiBfX3VfbG9u
ZyBfX2lub190Owp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYgX191X2ludCBfX25s
aW5rX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2xvZmZf
dDsKdHlwZWRlZiBpbnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90Owp0eXBlZGVmIF9f
dV9sb25nIF9fcmxpbV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRlZiBf
X3VfaW50IF9faWRfdDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwogIH0g
X19mc2lkX3Q7CgoKdHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2FkZHJf
dDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vj
b25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQg
X19zd2Jsa190OwoKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlwZWRlZiBpbnQgX19j
bG9ja2lkX3Q7CgoKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgoKCgp0eXBlZGVmIGludCBfX2tl
eV90OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90OwoKCgp0eXBlZGVm
IGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0
eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNibGtj
bnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xv
bmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgoKdHlw
ZWRlZiBfX3VfcXVhZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRfdDsK
Cgp0eXBlZGVmIGxvbmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGlu
dCBfX3RfdXNjYWxhcl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoKdHlwZWRlZiB1bnNp
Z25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0
eXBlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2JpdHMv
c2NoZWQuaCIgMwpzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9y
aXR5OwogIH07CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMKCgpz
dHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3Nw
aW5sb2NrOwoKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRo
cmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBpbnQg
X19kZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJh
bSBfX3NjaGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNp
emVfdCBfX2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2th
ZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBz
dHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9k
ZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewog
IGludCBfX2R1bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGlu
dCBwdGhyZWFkX2tleV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVk
OwogIGludCBfX21fY291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21f
a2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRl
eF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0
ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBzdHJ1
Y3QgX3B0aHJlYWRfcndsb2NrX3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xv
Y2s7CiAgaW50IF9fcndfcmVhZGVyczsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsKICBf
cHRocmVhZF9kZXNjciBfX3J3X3JlYWRfd2FpdGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dy
aXRlX3dhaXRpbmc7CiAgaW50IF9fcndfa2luZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0aHJl
YWRfcndsb2NrX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQg
X19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrYXR0cl90OwoKCgoKdHlwZWRlZiB2b2xhdGlsZSBp
bnQgcHRocmVhZF9zcGlubG9ja190OwoKCnR5cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3QgX3B0aHJl
YWRfZmFzdGxvY2sgX19iYV9sb2NrOwogIGludCBfX2JhX3JlcXVpcmVkOwogIGludCBfX2JhX3By
ZXNlbnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19iYV93YWl0aW5nOwp9IHB0aHJlYWRfYmFycmllcl90
OwoKCnR5cGVkZWYgc3RydWN0IHsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfYmFycmllcmF0
dHJfdDsKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKIyAxNDQgIi91
c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwojIDQ1ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDIgMwojIDUzICIvdXNyL2xv
Y2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMK
dHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsKIyA2MyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgc3RydWN0
IF9JT19GSUxFIF9fRklMRTsKIyA3MyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi
IDEgMwojIDMwICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9fR19j
b25maWcuaCIgMSAzCiMgOSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMTAgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIg
MiAzCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w
L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMxMiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGlu
dCB3aW50X3Q7CiMgMTUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCiMgMjQgIi91c3Iv
aW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0
OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9pbmNs
dWRlL3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAxIDMKIyA1
MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDY3ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg
Mwp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fY291bnQ7CiAgdW5pb24KICB7CiAgICB3aW50X3Qg
X193Y2g7CiAgICBjaGFyIF9fd2NoYls0XTsKICB9IF9fdmFsdWU7Cn0gX19tYnN0YXRlX3Q7CiMg
MjUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19v
ZmZfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3NfdDsKdHlwZWRlZiBz
dHJ1Y3QKewogIF9fb2ZmNjRfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zw
b3M2NF90OwojIDQ0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvZ2NvbnYuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9nY29udi5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgoj
IDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgi
IDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNs
dWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKIyAxICIv
dXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAxIDMKIyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgi
IDIgMwojIDI5ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMx
ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgoKCgoKZW51bQp7CiAgX19HQ09OVl9PSyA9IDAs
CiAgX19HQ09OVl9OT0NPTlYsCiAgX19HQ09OVl9OT0RCLAogIF9fR0NPTlZfTk9NRU0sCgogIF9f
R0NPTlZfRU1QVFlfSU5QVVQsCiAgX19HQ09OVl9GVUxMX09VVFBVVCwKICBfX0dDT05WX0lMTEVH
QUxfSU5QVVQsCiAgX19HQ09OVl9JTkNPTVBMRVRFX0lOUFVULAoKICBfX0dDT05WX0lMTEVHQUxf
REVTQ1JJUFRPUiwKICBfX0dDT05WX0lOVEVSTkFMX0VSUk9SCn07CgoKCmVudW0KewogIF9fR0NP
TlZfSVNfTEFTVCA9IDB4MDAwMSwKICBfX0dDT05WX0lHTk9SRV9FUlJPUlMgPSAweDAwMDIKfTsK
CgoKc3RydWN0IF9fZ2NvbnZfc3RlcDsKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhOwpzdHJ1Y3Qg
X19nY29udl9sb2FkZWRfb2JqZWN0OwpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhOwoKCgp0eXBl
ZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLCBzdHJ1Y3QgX19n
Y29udl9zdGVwX2RhdGEgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5z
aWduZWQgY2hhciAqKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqLCBzaXplX3QgKiwgaW50LCBpbnQpOwoKCnR5cGVk
ZWYgaW50ICgqX19nY29udl9pbml0X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CnR5cGVk
ZWYgdm9pZCAoKl9fZ2NvbnZfZW5kX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CgoKCnR5
cGVkZWYgaW50ICgqX19nY29udl90cmFuc19mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEg
Kiwgdm9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNp
Z25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVu
c2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfY29u
dGV4dF9mY3QpICh2b2lkICosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqLCB1
bnNpZ25lZCBjaGFyICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19xdWVyeV9mY3Qp
IChfX2NvbnN0IGNoYXIgKiwgX19jb25zdCBjaGFyICoqKiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJh
bnNfaW5pdF9mY3QpICh2b2lkICoqLCBjb25zdCBjaGFyICopOwp0eXBlZGVmIHZvaWQgKCpfX2dj
b252X3RyYW5zX2VuZF9mY3QpICh2b2lkICopOwoKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YQp7
CgogIF9fZ2NvbnZfdHJhbnNfZmN0IF9fdHJhbnNfZmN0OwogIF9fZ2NvbnZfdHJhbnNfY29udGV4
dF9mY3QgX190cmFuc19jb250ZXh0X2ZjdDsKICBfX2djb252X3RyYW5zX2VuZF9mY3QgX190cmFu
c19lbmRfZmN0OwogIHZvaWQgKl9fZGF0YTsKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpf
X25leHQ7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXAKewogIHN0cnVjdCBfX2djb252X2xvYWRl
ZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxlOwogIF9fY29uc3QgY2hhciAqX19tb2RuYW1lOwoKICBp
bnQgX19jb3VudGVyOwoKICBjaGFyICpfX2Zyb21fbmFtZTsKICBjaGFyICpfX3RvX25hbWU7Cgog
IF9fZ2NvbnZfZmN0IF9fZmN0OwogIF9fZ2NvbnZfaW5pdF9mY3QgX19pbml0X2ZjdDsKICBfX2dj
b252X2VuZF9mY3QgX19lbmRfZmN0OwoKCgogIGludCBfX21pbl9uZWVkZWRfZnJvbTsKICBpbnQg
X19tYXhfbmVlZGVkX2Zyb207CiAgaW50IF9fbWluX25lZWRlZF90bzsKICBpbnQgX19tYXhfbmVl
ZGVkX3RvOwoKCiAgaW50IF9fc3RhdGVmdWw7CgogIHZvaWQgKl9fZGF0YTsKfTsKCgoKc3RydWN0
IF9fZ2NvbnZfc3RlcF9kYXRhCnsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZjsKICB1bnNpZ25l
ZCBjaGFyICpfX291dGJ1ZmVuZDsKCgoKICBpbnQgX19mbGFnczsKCgoKICBpbnQgX19pbnZvY2F0
aW9uX2NvdW50ZXI7CgoKCiAgaW50IF9faW50ZXJuYWxfdXNlOwoKICBfX21ic3RhdGVfdCAqX19z
dGF0ZXA7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKCgoKICBzdHJ1Y3QgX19nY29udl90cmFuc19k
YXRhICpfX3RyYW5zOwp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfX2djb252X2luZm8KewogIHNpemVf
dCBfX25zdGVwczsKICBzdHJ1Y3QgX19nY29udl9zdGVwICpfX3N0ZXBzOwogIF9fZXh0ZW5zaW9u
X18gc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YSBbXTsKfSAqX19nY29udl90OwojIDQ1
ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwp0eXBlZGVmIHVuaW9uCnsKICBzdHJ1Y3Qg
X19nY29udl9pbmZvIF9fY2Q7CiAgc3RydWN0CiAgewogICAgc3RydWN0IF9fZ2NvbnZfaW5mbyBf
X2NkOwogICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YTsKICB9IF9fY29tYmluZWQ7
Cn0gX0dfaWNvbnZfdDsKCnR5cGVkZWYgaW50IF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9f
bW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IF9HX2ludDMyX3QgX19hdHRyaWJ1dGVfXyAo
KF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9f
YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBf
R191aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKIyAzMSAiL3Vz
ci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDUxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDEg
Ii91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3Rk
YXJnLmgiIDEgMwojIDQzICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuMC9pbmNsdWRlL3N0ZGFyZy5oIiAzCnR5cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVj
X3ZhX2xpc3Q7CiMgNTIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyAxNTggIi91c3IvaW5j
bHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fanVtcF90OyBzdHJ1Y3QgX0lPX0ZJTEU7CiMgMTY4
ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVmIHZvaWQgX0lPX2xvY2tfdDsKCgoKCgpz
dHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19tYXJrZXIgKl9uZXh0OwogIHN0cnVjdCBf
SU9fRklMRSAqX3NidWY7CgoKCiAgaW50IF9wb3M7CiMgMTkxICIvdXNyL2luY2x1ZGUvbGliaW8u
aCIgMwp9OwoKCmVudW0gX19jb2RlY3Z0X3Jlc3VsdAp7CiAgX19jb2RlY3Z0X29rLAogIF9fY29k
ZWN2dF9wYXJ0aWFsLAogIF9fY29kZWN2dF9lcnJvciwKICBfX2NvZGVjdnRfbm9jb252Cn07CgoK
CgpzdHJ1Y3QgX0lPX2NvZGVjdnQKewogIHZvaWQgKCpfX2NvZGVjdnRfZGVzdHIpIChzdHJ1Y3Qg
X0lPX2NvZGVjdnQgKik7CiAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgqX19jb2RlY3Z0X2RvX291
dCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICosCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqKiwgY2hhciAqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGNoYXIgKiop
OwogIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2dF9kb191bnNoaWZ0KSAoc3RydWN0
IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX21ic3RhdGVfdCAqLCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGNoYXIgKiopOwogIGVudW0gX19jb2RlY3Z0
X3Jlc3VsdCAoKl9fY29kZWN2dF9kb19pbikgKHN0cnVjdCBfSU9fY29kZWN2dCAqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWJzdGF0ZV90ICosCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjb25z
dCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqKiwgd2NoYXJfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdjaGFyX3QgKiwgd2NoYXJfdCAqKik7CiAgaW50ICgqX19jb2RlY3Z0X2RvX2Vu
Y29kaW5nKSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOwogIGludCAoKl9fY29kZWN2dF9kb19hbHdh
eXNfbm9jb252KSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOwogIGludCAoKl9fY29kZWN2dF9kb19s
ZW5ndGgpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwgX19tYnN0YXRlX3QgKiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CiAg
aW50ICgqX19jb2RlY3Z0X2RvX21heF9sZW5ndGgpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7Cgog
IF9HX2ljb252X3QgX19jZF9pbjsKICBfR19pY29udl90IF9fY2Rfb3V0Owp9OwoKCnN0cnVjdCBf
SU9fd2lkZV9kYXRhCnsKICB3Y2hhcl90ICpfSU9fcmVhZF9wdHI7CiAgd2NoYXJfdCAqX0lPX3Jl
YWRfZW5kOwogIHdjaGFyX3QgKl9JT19yZWFkX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX3dyaXRlX2Jh
c2U7CiAgd2NoYXJfdCAqX0lPX3dyaXRlX3B0cjsKICB3Y2hhcl90ICpfSU9fd3JpdGVfZW5kOwog
IHdjaGFyX3QgKl9JT19idWZfYmFzZTsKICB3Y2hhcl90ICpfSU9fYnVmX2VuZDsKCiAgd2NoYXJf
dCAqX0lPX3NhdmVfYmFzZTsKICB3Y2hhcl90ICpfSU9fYmFja3VwX2Jhc2U7CgogIHdjaGFyX3Qg
Kl9JT19zYXZlX2VuZDsKCiAgX19tYnN0YXRlX3QgX0lPX3N0YXRlOwogIF9fbWJzdGF0ZV90IF9J
T19sYXN0X3N0YXRlOwogIHN0cnVjdCBfSU9fY29kZWN2dCBfY29kZWN2dDsKCiAgd2NoYXJfdCBf
c2hvcnRidWZbMV07CgogIHN0cnVjdCBfSU9fanVtcF90ICpfd2lkZV92dGFibGU7Cn07CgoKc3Ry
dWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwoKCgoKICBjaGFyKiBfSU9fcmVhZF9wdHI7CiAg
Y2hhciogX0lPX3JlYWRfZW5kOwogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CiAgY2hhciogX0lPX3dy
aXRlX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX3B0cjsKICBjaGFyKiBfSU9fd3JpdGVfZW5kOwog
IGNoYXIqIF9JT19idWZfYmFzZTsKICBjaGFyKiBfSU9fYnVmX2VuZDsKCiAgY2hhciAqX0lPX3Nh
dmVfYmFzZTsKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7CiAgY2hhciAqX0lPX3NhdmVfZW5kOwoK
ICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklMRSAqX2NoYWlu
OwoKICBpbnQgX2ZpbGVubzsKICBpbnQgX2Jsa3NpemU7CiAgX19vZmZfdCBfb2xkX29mZnNldDsK
CgoKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBzaWduZWQgY2hhciBfdnRhYmxlX29m
ZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCgoKICBfSU9fbG9ja190ICpfbG9jazsKIyAzMDMg
Ii91c3IvaW5jbHVkZS9saWJpby5oIiAzCiAgX19vZmY2NF90IF9vZmZzZXQ7CgoKICBzdHJ1Y3Qg
X0lPX2NvZGVjdnQgKl9jb2RlY3Z0OwogIHN0cnVjdCBfSU9fd2lkZV9kYXRhICpfd2lkZV9kYXRh
OwoKCgoKICBpbnQgX21vZGU7CgogIGNoYXIgX3VudXNlZDJbMTUgKiBzaXplb2YgKGludCkgLSAy
ICogc2l6ZW9mICh2b2lkICopXTsKCn07CgoKCgoKc3RydWN0IF9JT19GSUxFX3BsdXM7CgpleHRl
cm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRpbl87CmV4dGVybiBzdHJ1Y3QgX0lP
X0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZG91dF87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBf
SU9fMl8xX3N0ZGVycl87CiMgMzQyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVmIF9f
c3NpemVfdCBfX2lvX3JlYWRfZm4gKHZvaWQgKl9fY29va2llLCBjaGFyICpfX2J1Ziwgc2l6ZV90
IF9fbmJ5dGVzKTsKCgoKCgoKCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fd3JpdGVfZm4gKHZvaWQg
Kl9fY29va2llLCBfX2NvbnN0IGNoYXIgKl9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgX19uKTsKCgoKCgoKCnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAodm9p
ZCAqX19jb29raWUsIF9fb2ZmNjRfdCAqX19wb3MsIGludCBfX3cpOwoKCnR5cGVkZWYgaW50IF9f
aW9fY2xvc2VfZm4gKHZvaWQgKl9fY29va2llKTsKCgoKCnR5cGVkZWYgX19pb19yZWFkX2ZuIGNv
b2tpZV9yZWFkX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb193cml0ZV9mbiBjb29raWVfd3JpdGVf
ZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3NlZWtfZm4gY29va2llX3NlZWtfZnVuY3Rpb25fdDsK
dHlwZWRlZiBfX2lvX2Nsb3NlX2ZuIGNvb2tpZV9jbG9zZV9mdW5jdGlvbl90OwoKCnR5cGVkZWYg
c3RydWN0CnsKICBfX2lvX3JlYWRfZm4gKnJlYWQ7CiAgX19pb193cml0ZV9mbiAqd3JpdGU7CiAg
X19pb19zZWVrX2ZuICpzZWVrOwogIF9faW9fY2xvc2VfZm4gKmNsb3NlOwp9IF9JT19jb29raWVf
aW9fZnVuY3Rpb25zX3Q7CnR5cGVkZWYgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBjb29raWVf
aW9fZnVuY3Rpb25zX3Q7CgpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlOwoKCmV4dGVybiB2b2lkIF9J
T19jb29raWVfaW5pdCAoc3RydWN0IF9JT19jb29raWVfZmlsZSAqX19jZmlsZSwgaW50IF9fcmVh
ZF93cml0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2Nvb2tpZSwgX0lP
X2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2Zucyk7CgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4g
aW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX3VmbG93
IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX292ZXJmbG93IChfSU9fRklMRSAq
LCBpbnQpIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikg
dGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193dWZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpl
eHRlcm4gd2ludF90IF9fd292ZXJmbG93IChfSU9fRklMRSAqLCB3aW50X3QpIHRocm93ICgpOwoj
IDQyNCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJ
TEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19wdXRjIChpbnQgX19jLCBfSU9fRklM
RSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Zlb2YgKF9JT19GSUxFICpfX2ZwKSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7
CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0
ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGlu
dCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKIyA0NTQgIi91c3IvaW5j
bHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYgKF9JT19GSUxFICogX19yZXN0
cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9f
Z251Y192YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9JT192
ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCkgdGhyb3cgKCk7CmV4dGVybiBf
X3NzaXplX3QgX0lPX3BhZG4gKF9JT19GSUxFICosIGludCwgX19zc2l6ZV90KSB0aHJvdyAoKTsK
ZXh0ZXJuIHNpemVfdCBfSU9fc2dldG4gKF9JT19GSUxFICosIHZvaWQgKiwgc2l6ZV90KSB0aHJv
dyAoKTsKCmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtvZmYgKF9JT19GSUxFICosIF9fb2ZmNjRf
dCwgaW50LCBpbnQpIHRocm93ICgpOwpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrcG9zIChfSU9f
RklMRSAqLCBfX29mZjY0X3QsIGludCkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBfSU9fZnJlZV9i
YWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBfSU9fZ2V0
d2MgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfSU9fcHV0d2MgKHdj
aGFyX3QgX193YywgX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19md2lk
ZSAoX0lPX0ZJTEUgKl9fZnAsIGludCBfX21vZGUpIHRocm93ICgpOwojIDUwMSAiL3Vzci9pbmNs
dWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fdmZ3c2NhbmYgKF9JT19GSUxFICogX19yZXN0
cmljdCwgY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBf
SU9fdmZ3cHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmljdCwgY29uc3Qgd2NoYXJfdCAqX19yZXN0
cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCkgdGhyb3cgKCk7
CmV4dGVybiBfX3NzaXplX3QgX0lPX3dwYWRuIChfSU9fRklMRSAqLCB3aW50X3QsIF9fc3NpemVf
dCkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIF9JT19mcmVlX3diYWNrdXBfYXJlYSAoX0lPX0ZJTEUg
KikgdGhyb3cgKCk7CgoKCn0KIyA3NCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKCnR5cGVkZWYgX19nbnVjX3ZhX2xp
c3QgX19ub3RfdmFfbGlzdF9fOwojIDg4ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBfR19mcG9zX3QgZnBvc190
OwoKCgoKdHlwZWRlZiBfR19mcG9zNjRfdCBmcG9zNjRfdDsKIyAxMzcgIi91c3IvbG9jYWwvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAxMzggIi91c3IvbG9jYWwvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCmV4dGVy
biBGSUxFICpzdGRpbjsKZXh0ZXJuIEZJTEUgKnN0ZG91dDsKZXh0ZXJuIEZJTEUgKnN0ZGVycjsK
IyAxNTIgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1
ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IHJlbW92ZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1l
KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcmVuYW1lIChfX2NvbnN0IGNoYXIgKl9fb2xkLCBfX2Nv
bnN0IGNoYXIgKl9fbmV3KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxFICp0bXBmaWxlICh2b2lk
KSB0aHJvdyAoKTsKIyAxNjggIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2b2lkKSB0
aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGNoYXIgKnRtcG5hbV9yIChjaGFyICpfX3MpIHRocm93ICgpOwojIDE4OCAiL3Vzci9s
b2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAz
CmV4dGVybiBjaGFyICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0IGNoYXIg
Kl9fcGZ4KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpl
eHRlcm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBm
Zmx1c2ggKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmZmx1c2hfdW5s
b2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmNsb3NlYWxs
ICh2b2lkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gRklMRSAqZm9wZW4gKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX21vZGVzKSB0aHJvdyAoKTsKCmV4dGVybiBGSUxFICpmcmVvcGVuIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgRklM
RSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CiMgMjMyICIvdXNyL2xvY2FsL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJ
TEUgKmZvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgp
OwpleHRlcm4gRklMRSAqZnJlb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxl
bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0p
IHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3QgY2hh
ciAqX19tb2RlcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVuY29va2llICh2b2lk
ICpfX3Jlc3RyaWN0IF9fbWFnaWNfY29va2llLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAg
IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19pb19mdW5jcykgdGhyb3cgKCk7CgoKZXh0ZXJu
IEZJTEUgKmZtZW1vcGVuICh2b2lkICpfX3MsIHNpemVfdCBfX2xlbiwgX19jb25zdCBjaGFyICpf
X21vZGVzKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxFICpvcGVuX21lbXN0cmVhbSAoY2hhciAq
Kl9fcmVzdHJpY3QgX19idWZsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
ICpfX3Jlc3RyaWN0IF9fc2l6ZWxvYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVm
IChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCBzZXR2YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBj
aGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgIGludCBfX21vZGVzLCBz
aXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZmZlciAoRklMRSAqX19y
ZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzZXRsaW5lYnVm
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwcmludGYgKEZJTEUg
Kl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBwcmludGYgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgc3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgdmZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSB0
aHJvdyAoKTsKCmV4dGVybiBpbnQgdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
Zm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQg
dnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCBzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVf
dCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g
KF9fcHJpbnRmX18sIDMsIDQpKSk7CgpleHRlcm4gaW50IHZzbnByaW50ZiAoY2hhciAqX19yZXN0
cmljdCBfX3MsIHNpemVfdCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7CgoK
CgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLCBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19mLAogICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xp
c3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJp
bnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3Qg
X19wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
Zm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJp
bnRmX18sIDIsIDMpKSk7CmV4dGVybiBpbnQgYXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9f
cHRyLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQs
IC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZf
XywgMiwgMykpKTsKCgpleHRlcm4gaW50IHZkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fZm10LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBf
X2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZf
XywgMiwgMCkpKTsKZXh0ZXJuIGludCBkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9y
bWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKCgpleHRlcm4gaW50IGZzY2FuZiAoRklMRSAq
X19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2NhbmYgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQg
c3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IHZmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcp
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwg
MCkpKTsKCgpleHRlcm4gaW50IHZzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y
bWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19mb3JtYXRfXyAoX19zY2FuZl9fLCAxLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNzY2FuZiAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKCgpl
eHRlcm4gaW50IGZnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0
YyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0Y2hhciAodm9pZCkg
dGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBpbnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBpbnQgZnB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBwdXRjaGFyIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZnB1
dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBpbnQgcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpl
eHRlcm4gaW50IHB1dGNoYXJfdW5sb2NrZWQgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCmV4dGVy
biBpbnQgZ2V0dyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0dyAo
aW50IF9fdywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRz
IChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVh
bSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzX3VubG9ja2VkIChjaGFyICpf
X3Jlc3RyaWN0IF9fcywgaW50IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxF
ICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpnZXRzIChj
aGFyICpfX3MpIHRocm93ICgpOwojIDQzNiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBfX3NzaXplX3QgX19nZXRk
ZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cg
KCk7CmV4dGVybiBfX3NzaXplX3QgZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBp
bnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0
cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fc3NpemVfdCBnZXRsaW5lIChjaGFy
ICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgKl9fcmVzdHJpY3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19y
ZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRo
cm93ICgpOwoKCgpleHRlcm4gaW50IGZwdXRzX3VubG9ja2VkIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9f
c3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdXRzIChfX2NvbnN0IGNoYXIgKl9fcykg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5nZXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIs
IHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9f
cmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCBmd3JpdGUgKF9fY29u
c3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIHNpemVfdCBmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90
IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAq
X19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgZndyaXRlX3VubG9j
a2VkIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9f
c3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBs
b25nIGludCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBm
dGVsbCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCk7CiMgNDk5ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmc2Vla28gKEZJ
TEUgKl9fc3RyZWFtLCBfX29mZl90IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0
ZXJuIF9fb2ZmX3QgZnRlbGxvIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgZmdldHBvcyAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0
IF9fcG9zKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVh
bSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSB0aHJvdyAoKTsKIyA1MzMgIi91c3IvbG9jYWwvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4g
aW50IGZzZWVrbzY0IChGSUxFICpfX3N0cmVhbSwgX19vZmY2NF90IF9fb2ZmLCBpbnQgX193aGVu
Y2UpIHRocm93ICgpOwpleHRlcm4gX19vZmY2NF90IGZ0ZWxsbzY0IChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CmV4dGVybiBpbnQgZmdldHBvczY0IChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt
LCBmcG9zNjRfdCAqX19yZXN0cmljdCBfX3BvcykKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGludCBm
c2V0cG9zNjQgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3M2NF90ICpfX3BvcykgdGhyb3cg
KCk7CgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7Cgpl
eHRlcm4gaW50IGZlb2YgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVy
cm9yIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyX3Vu
bG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tl
ZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZlcnJvcl91bmxvY2tlZCAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgcGVycm9yIChfX2NvbnN0
IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN5c19uZXJyOwpleHRlcm4gX19j
b25zdCBjaGFyICpfX2NvbnN0IHN5c19lcnJsaXN0W107CgoKZXh0ZXJuIGludCBfc3lzX25lcnI7
CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3QgX3N5c19lcnJsaXN0W107CgoKCgoKZXh0ZXJu
IGludCBmaWxlbm8gKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmls
ZW5vX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBGSUxF
ICpwb3BlbiAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQsIF9fY29uc3QgY2hhciAqX19tb2Rlcykg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gY2hhciAqY3VzZXJpZCAoY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCnN0cnVjdCBvYnN0YWNr
OwoKCmV4dGVybiBpbnQgb2JzdGFja19wcmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0
IF9fb2JzdGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwpleHRlcm4gaW50IG9ic3RhY2tfdnByaW50
ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmdzKSB0aHJvdyAoKTsKCgoKCgoK
CmV4dGVybiB2b2lkIGZsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IGZ0cnlsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB2
b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CiMgNjQwICIvdXNyL2xv
Y2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2Jp
dHMvc3RkaW8uaCIgMwppbmxpbmUgaW50CnZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX2ZtdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpCnsKICByZXR1cm4gdmZwcmlu
dGYgKHN0ZG91dCwgX19mbXQsIF9fYXJnKTsKfQoKCmlubGluZSBpbnQKZ2V0Y2hhciAodm9pZCkg
dGhyb3cgKCkKewogIHJldHVybiBfSU9fZ2V0YyAoc3RkaW4pOwp9CgoKCgppbmxpbmUgaW50Cmdl
dGNfdW5sb2NrZWQgKEZJTEUgKl9fZnApIHRocm93ICgpCnsKICByZXR1cm4gKChfX2ZwKS0+X0lP
X3JlYWRfcHRyID49IChfX2ZwKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAoX19mcCkgOiAqKHVu
c2lnbmVkIGNoYXIgKikgKF9fZnApLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgppbmxpbmUgaW50Cmdl
dGNoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpCnsKICByZXR1cm4gKChzdGRpbiktPl9JT19y
ZWFkX3B0ciA+PSAoc3RkaW4pLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChzdGRpbikgOiAqKHVu
c2lnbmVkIGNoYXIgKikgKHN0ZGluKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoKCgppbmxpbmUgaW50
CnB1dGNoYXIgKGludCBfX2MpIHRocm93ICgpCnsKICByZXR1cm4gX0lPX3B1dGMgKF9fYywgc3Rk
b3V0KTsKfQoKCgoKaW5saW5lIGludApmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19z
dHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyID49
IChfX3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoX19zdHJlYW0sICh1bnNp
Z25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCooX19zdHJlYW0pLT5fSU9fd3Jp
dGVfcHRyKysgPSAoX19jKSkpOwp9CgoKCgoKaW5saW5lIGludApwdXRjX3VubG9ja2VkIChpbnQg
X19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9J
T193cml0ZV9wdHIgPj0gKF9fc3RyZWFtKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChf
X3N0cmVhbSwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihfX3N0
cmVhbSktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgppbmxpbmUgaW50CnB1dGNoYXJf
dW5sb2NrZWQgKGludCBfX2MpIHRocm93ICgpCnsKICByZXR1cm4gKCgoc3Rkb3V0KS0+X0lPX3dy
aXRlX3B0ciA+PSAoc3Rkb3V0KS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChzdGRvdXQs
ICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCooc3Rkb3V0KS0+X0lP
X3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCgoKCmlubGluZSBfX3NzaXplX3QKZ2V0bGluZSAo
Y2hhciAqKl9fbGluZXB0ciwgc2l6ZV90ICpfX24sIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7
CiAgcmV0dXJuIF9fZ2V0ZGVsaW0gKF9fbGluZXB0ciwgX19uLCAnXG4nLCBfX3N0cmVhbSk7Cn0K
CgoKCgppbmxpbmUgaW50CmZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7
CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X2ZsYWdzICYgMHgxMCkgIT0gMCk7Cn0KCgppbmxpbmUg
aW50CmZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4g
KCgoX19zdHJlYW0pLT5fZmxhZ3MgJiAweDIwKSAhPSAwKTsKfQojIDY0MSAiL3Vzci9sb2NhbC9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgp9
CiMgNDIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGlvLmgiIDIgMwoj
IDg2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAzCm5hbWVz
cGFjZSBzdGQKewogIHVzaW5nIDo6RklMRTsKICB1c2luZyA6OmZwb3NfdDsKCiAgdXNpbmcgOjpj
bGVhcmVycjsKICB1c2luZyA6OmZjbG9zZTsKICB1c2luZyA6OmZlb2Y7CiAgdXNpbmcgOjpmZXJy
b3I7CiAgdXNpbmcgOjpmZmx1c2g7CiAgdXNpbmcgOjpmZ2V0YzsKICB1c2luZyA6OmZnZXRwb3M7
CiAgdXNpbmcgOjpmZ2V0czsKICB1c2luZyA6OmZvcGVuOwogIHVzaW5nIDo6ZnByaW50ZjsKICB1
c2luZyA6OmZwdXRjOwogIHVzaW5nIDo6ZnB1dHM7CiAgdXNpbmcgOjpmcmVhZDsKICB1c2luZyA6
OmZyZW9wZW47CiAgdXNpbmcgOjpmc2NhbmY7CiAgdXNpbmcgOjpmc2VlazsKICB1c2luZyA6OmZz
ZXRwb3M7CiAgdXNpbmcgOjpmdGVsbDsKICB1c2luZyA6OmZ3cml0ZTsKICB1c2luZyA6OmdldGM7
CiAgdXNpbmcgOjpnZXRjaGFyOwogIHVzaW5nIDo6Z2V0czsKICB1c2luZyA6OnBlcnJvcjsKICB1
c2luZyA6OnByaW50ZjsKICB1c2luZyA6OnB1dGM7CiAgdXNpbmcgOjpwdXRjaGFyOwogIHVzaW5n
IDo6cHV0czsKICB1c2luZyA6OnJlbW92ZTsKICB1c2luZyA6OnJlbmFtZTsKICB1c2luZyA6OnJl
d2luZDsKICB1c2luZyA6OnNjYW5mOwogIHVzaW5nIDo6c2V0YnVmOwogIHVzaW5nIDo6c2V0dmJ1
ZjsKICB1c2luZyA6OnNwcmludGY7CiAgdXNpbmcgOjpzc2NhbmY7CiAgdXNpbmcgOjp0bXBmaWxl
OwogIHVzaW5nIDo6dG1wbmFtOwogIHVzaW5nIDo6dW5nZXRjOwogIHVzaW5nIDo6dmZwcmludGY7
CiAgdXNpbmcgOjp2cHJpbnRmOwogIHVzaW5nIDo6dnNwcmludGY7Cn0KIyAxNDIgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGlvLmgiIDMKbmFtZXNwYWNlIF9fZ251X2N4
eAp7CiAgdXNpbmcgOjpzbnByaW50ZjsKICB1c2luZyA6OnZmc2NhbmY7CiAgdXNpbmcgOjp2c2Nh
bmY7CiAgdXNpbmcgOjp2c25wcmludGY7CiAgdXNpbmcgOjp2c3NjYW5mOwp9CgpuYW1lc3BhY2Ug
c3RkCnsKICB1c2luZyBfX2dudV9jeHg6OnNucHJpbnRmOwogIHVzaW5nIF9fZ251X2N4eDo6dmZz
Y2FuZjsKICB1c2luZyBfX2dudV9jeHg6OnZzY2FuZjsKICB1c2luZyBfX2dudV9jeHg6OnZzbnBy
aW50ZjsKICB1c2luZyBfX2dudV9jeHg6OnZzc2NhbmY7Cn0KIyAzMiAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9jc3RkaW8iIDIgMwojIDM2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2
ODYtcGMtbGludXgtZ251L2JpdHMvYysraW8uaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9jc3RkZGVmIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2
LXBjLWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLmgiIDEgMwojIDEwMiAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHIuaCIgMwojIDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLXNpbmds
ZS5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdu
dS9iaXRzL2d0aHItc2luZ2xlLmgiIDMKdHlwZWRlZiBpbnQgX19ndGhyZWFkX211dGV4X3Q7CiMg
MjExICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Ro
ci1zaW5nbGUuaCIgMwpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfYWN0aXZlX3AgKHZvaWQp
CnsKICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X2xvY2sg
KF9fZ3RocmVhZF9tdXRleF90ICogKQp7CiAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50
Cl9fZ3RocmVhZF9tdXRleF90cnlsb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqICkKewogIHJldHVy
biAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrIChfX2d0aHJl
YWRfbXV0ZXhfdCAqICkKewogIHJldHVybiAwOwp9CiMgMTAzICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci5oIiAyIDMKIyAzOCAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDIgMwoKbmFt
ZXNwYWNlIHN0ZAp7CgogIHR5cGVkZWYgbG9uZyBzdHJlYW1vZmY7CiAgdHlwZWRlZiBwdHJkaWZm
X3Qgc3RyZWFtc2l6ZTsKCiAgdHlwZWRlZiBwdHJkaWZmX3Qgd3N0cmVhbXNpemU7CgogIHR5cGVk
ZWYgZnBvc190IF9fY19zdHJlYW1wb3M7CgogIHR5cGVkZWYgX19ndGhyZWFkX211dGV4X3QgX19j
X2xvY2s7CgoKCiAgdHlwZWRlZiBGSUxFIF9fY19maWxlX3R5cGU7CgoKICBzdHJ1Y3QgX19pb3Nf
ZmxhZ3MKICB7CiAgICB0eXBlZGVmIHNob3J0IF9faW50X3R5cGU7CgogICAgc3RhdGljIGNvbnN0
IF9faW50X3R5cGUgX1NfYm9vbGFscGhhID0gMHgwMDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50
X3R5cGUgX1NfZGVjID0gMHgwMDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZml4
ZWQgPSAweDAwMDQ7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19oZXggPSAweDAwMDg7
CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19pbnRlcm5hbCA9IDB4MDAxMDsKICAgIHN0
YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2xlZnQgPSAweDAwMjA7CiAgICBzdGF0aWMgY29uc3Qg
X19pbnRfdHlwZSBfU19vY3QgPSAweDAwNDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBf
U19yaWdodCA9IDB4MDA4MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3NjaWVudGlm
aWMgPSAweDAxMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93YmFzZSA9IDB4
MDIwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3dwb2ludCA9IDB4MDQwMDsK
ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3dwb3MgPSAweDA4MDA7CiAgICBzdGF0
aWMgY29uc3QgX19pbnRfdHlwZSBfU19za2lwd3MgPSAweDEwMDA7CiAgICBzdGF0aWMgY29uc3Qg
X19pbnRfdHlwZSBfU191bml0YnVmID0gMHgyMDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5
cGUgX1NfdXBwZXJjYXNlID0gMHg0MDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
YWRqdXN0ZmllbGQgPSAweDAwMjAgfCAweDAwODAgfCAweDAwMTA7CiAgICBzdGF0aWMgY29uc3Qg
X19pbnRfdHlwZSBfU19iYXNlZmllbGQgPSAweDAwMDIgfCAweDAwNDAgfCAweDAwMDg7CiAgICBz
dGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mbG9hdGZpZWxkID0gMHgwMTAwIHwgMHgwMDA0OwoK
CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iYWRiaXQgPSAweDAxOwogICAgc3RhdGlj
IGNvbnN0IF9faW50X3R5cGUgX1NfZW9mYml0ID0gMHgwMjsKICAgIHN0YXRpYyBjb25zdCBfX2lu
dF90eXBlIF9TX2ZhaWxiaXQgPSAweDA0OwoKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBf
U19hcHAgPSAweDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXRlID0gMHgwMjsK
ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2JpbiA9IDB4MDQ7CiAgICBzdGF0aWMgY29u
c3QgX19pbnRfdHlwZSBfU19pbiA9IDB4MDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBf
U19vdXQgPSAweDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdHJ1bmMgPSAweDIw
OwogIH07Cn0KIyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Zwb3MuaCIgMiAz
CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2NoYXIuaCIgMSAzCiMg
MzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDMKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmln
LmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5o
IiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIg
MSAzCiMgMzkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDIg
MwojIDQyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3dj
aGFyLmgiIDIgMwojIDM3ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvbG9jYWwv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMg
MzggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQxICIvdXNy
L2luY2x1ZGUvd2NoYXIuaCIgMiAzCgoKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2lu
Y2x1ZGUvd2NoYXIuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3djaGFyLmgiIDEgMwoj
IDUxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCiMgODUgIi91c3IvaW5jbHVkZS93Y2hhci5o
IiAzCnR5cGVkZWYgX19tYnN0YXRlX3QgbWJzdGF0ZV90OwojIDEwNSAiL3Vzci9pbmNsdWRlL3dj
aGFyLmgiIDMKc3RydWN0IHRtOwoKCmV4dGVybiAiQyIgewoKCmV4dGVybiB3Y2hhcl90ICp3Y3Nj
cHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKZXh0ZXJuIHdjaGFy
X3QgKndjc25jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQog
ICAgIHRocm93ICgpOwoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjYXQgKHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19zcmMpIHRocm93ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jYXQgKHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hh
cl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgd2NzY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19z
MikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQg
d2NzbmNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNp
emVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4
dGVybiBpbnQgd2NzY2FzZWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFy
X3QgKl9fczIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2NzbmNhc2VjbXAgKF9fY29uc3Qgd2No
YXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAx
IDMKIyAyOCAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMwp0eXBlZGVmIHN0cnVjdCBfX2xvY2Fs
ZV9zdHJ1Y3QKewoKICBzdHJ1Y3QgbG9jYWxlX2RhdGEgKl9fbG9jYWxlc1sxM107CgoKICBjb25z
dCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG9s
b3dlcjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG91cHBlcjsKfSAqX19sb2NhbGVfdDsKIyAxNDQg
Ii91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCmV4dGVybiBpbnQgX193Y3NjYXNlY21wX2wgKF9f
Y29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX193
Y3NuY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19z
MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19s
b2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCB3Y3Njb2xsIChfX2NvbnN0IHdjaGFyX3QgKl9f
czEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qgd2Nz
eGZybSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoK
CgoKCmV4dGVybiBpbnQgX193Y3Njb2xsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25z
dCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9j
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBfX3djc3hmcm1fbCAod2NoYXJfdCAqX19zMSwg
X19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
X19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgpleHRlcm4gd2NoYXJfdCAqd2NzZHVw
IChfX2NvbnN0IHdjaGFyX3QgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9j
X18pKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NociAoX19jb25zdCB3Y2hhcl90ICpfX3djcywg
d2NoYXJfdCBfX3djKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK
ZXh0ZXJuIHdjaGFyX3QgKndjc3JjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3Qg
X193YykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVy
biB3Y2hhcl90ICp3Y3NjaHJudWwgKF9fY29uc3Qgd2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fd2Mp
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6
ZV90IHdjc2NzcG4gKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19y
ZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJu
IHNpemVfdCB3Y3NzcG4gKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAq
X19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRl
cm4gd2NoYXJfdCAqd2NzcGJyayAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hh
cl90ICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CmV4dGVybiB3Y2hhcl90ICp3Y3NzdHIgKF9fY29uc3Qgd2NoYXJfdCAqX19oYXlzdGFjaywgX19j
b25zdCB3Y2hhcl90ICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc3djcyAoX19jb25zdCB3Y2hhcl90ICpfX2hh
eXN0YWNrLCBfX2NvbnN0IHdjaGFyX3QgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gd2NoYXJfdCAqd2NzdG9rICh3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jl
c3RyaWN0IF9fcHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IHdjc2xlbiAoX19jb25zdCB3
Y2hhcl90ICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRl
cm4gc2l6ZV90IHdjc25sZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zLCBzaXplX3QgX19tYXhsZW4p
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gd2No
YXJfdCAqd21lbWNociAoX19jb25zdCB3Y2hhcl90ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3Qg
X19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBp
bnQgd21lbWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHdjaGFyX3Qg
KndtZW1jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1tb3ZlICh3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdj
aGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3Qg
KndtZW1zZXQgKHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgp
OwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1wY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
czIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHdpbnRfdCBidG93YyAo
aW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgd2N0b2IgKHdpbnRfdCBfX2MpIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IG1ic2luaXQgKF9fY29uc3QgbWJzdGF0ZV90ICpfX3BzKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBtYnJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdj
LAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNp
emVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3ApIHRocm93ICgp
OwoKCmV4dGVybiBzaXplX3Qgd2NydG9tYiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHdjaGFyX3Qg
X193YywKICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykg
dGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCBfX21icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpf
X3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwpleHRlcm4gc2l6ZV90IG1icmxlbiAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgIG1i
c3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBfX2lubGluZSBz
aXplX3QgbWJybGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMp
IHRocm93ICgpCnsgcmV0dXJuIChfX3BzICE9IF9fbnVsbAogICAgICAgICAgPyBtYnJ0b3djIChf
X251bGwsIF9fcywgX19uLCBfX3BzKSA6IF9fbWJybGVuIChfX3MsIF9fbiwgX19udWxsKSk7IH0K
CgoKCmV4dGVybiBzaXplX3QgbWJzcnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywg
c2l6ZV90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3Ry
aWN0IF9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3J0b21icyAoY2hhciAqX19y
ZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAq
Kl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAg
IG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90
IG1ic25ydG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbm1jLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3Ry
aWN0IF9fcHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc25ydG9tYnMgKGNoYXIgKl9f
cmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90
ICoqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19u
d2MsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9f
cmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgd2N3aWR0aCAod2ludF90
IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgd2Nzd2lkdGggKF9fY29uc3Qgd2NoYXJfdCAq
X19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIHdjc3RvZCAoX19j
b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgIHdj
aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHdj
c3RvZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwpleHRlcm4gbG9u
ZyBkb3VibGUgd2NzdG9sZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBpbnQgd2NzdG9sIChfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0
cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBs
b25nIGludCB3Y3N0b3VsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBs
b25nIGxvbmcgaW50IHdjc3RvcSAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0
ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5z
aWduZWQgbG9uZyBsb25nIGludCB3Y3N0b3VxIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoq
X19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBs
b25nIGludCB3Y3N0b2xsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwg
aW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWdu
ZWQgbG9uZyBsb25nIGludCB3Y3N0b3VsbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fYmFzZSkgdGhyb3cgKCk7CiMgNDA3ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDQwOCAiL3Vzci9pbmNsdWRlL3djaGFy
LmgiIDIgMwoKCgpleHRlcm4gbG9uZyBpbnQgX193Y3N0b2xfbCAoX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQg
X193Y3N0b3VsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19s
b2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcg
aW50IF9fd2NzdG9sbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2Fs
ZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcg
bG9uZyBpbnQgX193Y3N0b3VsbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRl
cm4gZG91YmxlIF9fd2NzdG9kX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
IF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgX193Y3N0b2Zf
bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKQog
ICAgIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIF9fd2NzdG9sZF9sIChfX2NvbnN0IHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgX193
Y3N0b2RfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IF9fd2NzdG9mX2ludGVy
bmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91
cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fd2NzdG9sZF9pbnRlcm5hbCAo
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgpl
eHRlcm4gbG9uZyBpbnQgX193Y3N0b2xfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0
cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9u
ZyBpbnQgX193Y3N0b3VsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19u
cHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5z
aW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX193Y3N0b2xsX2ludGVybmFsIChfX2NvbnN0IHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAo
KTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3djc3Rv
dWxsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9f
ZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gX19pbmxpbmUgZG91
YmxlIHdjc3RvZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJv
dyAoKQp7IHJldHVybiBfX3djc3RvZF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7IH0K
ZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50IHdjc3RvbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf
X2Jhc2UpIHRocm93ICgpCnsgcmV0dXJuIF9fd2NzdG9sX2ludGVybmFsIChfX25wdHIsIF9fZW5k
cHRyLCBfX2Jhc2UsIDApOyB9CmV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGludCB3Y3N0
b3VsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlKSB0
aHJvdyAoKQp7IHJldHVybiBfX3djc3RvdWxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9f
YmFzZSwgMCk7IH0KCgpleHRlcm4gX19pbmxpbmUgZmxvYXQgd2NzdG9mIChfX2NvbnN0IHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hh
cl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkKeyByZXR1cm4gX193Y3N0b2ZfaW50
ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOyB9CmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJs
ZSB3Y3N0b2xkIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIp
IHRocm93ICgpCnsgcmV0dXJuIF9fd2NzdG9sZF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwg
MCk7IH0KCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50IHdjc3Rv
cSAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7IHJl
dHVybiBfX3djc3RvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7IH0K
X19leHRlbnNpb25fXwpleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGludCB3Y3N0
b3VxIChfX2NvbnN0IHdjaGFyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2Up
IHRocm93ICgpCnsgcmV0dXJuIF9fd2NzdG91bGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIs
IF9fYmFzZSwgMCk7IH0KCgoKCgoKCmV4dGVybiB3Y2hhcl90ICp3Y3BjcHkgKHdjaGFyX3QgKl9f
ZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3NyYykgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90
ICp3Y3BuY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMsIHNpemVf
dCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGZ3aWRlIChfX0ZJTEUgKl9f
ZnAsIGludCBfX21vZGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZ3cHJpbnRmIChfX0ZJTEUg
Kl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJf
dCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQg
d3ByaW50ZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAg
dGhyb3cgKCkgOwoKZXh0ZXJuIGludCBzd3ByaW50ZiAod2NoYXJfdCAqX19yZXN0cmljdCBfX3Ms
IHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0
cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCgpleHRlcm4gaW50IHZmd3ByaW50
ZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
d2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgIF9fZ251
Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgdndwcmludGYgKF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAg
X19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKCmV4dGVybiBpbnQgdnN3cHJp
bnRmICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAg
ICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgoKZXh0ZXJu
IGludCBmd3NjYW5mIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhy
b3cgKCkgOwoKZXh0ZXJuIGludCB3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf
X2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgc3dzY2FuZiAoX19jb25z
dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgoKCgpleHRl
cm4gaW50IHZmd3NjYW5mIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAg
ICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQg
dndzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAg
ICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBp
bnQgdnN3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAg
ICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKCgoKZXh0
ZXJuIHdpbnRfdCBmZ2V0d2MgKF9fRklMRSAqX19zdHJlYW0pOwpleHRlcm4gd2ludF90IGdldHdj
IChfX0ZJTEUgKl9fc3RyZWFtKTsKCgpleHRlcm4gd2ludF90IGdldHdjaGFyICh2b2lkKTsKCgoK
ZXh0ZXJuIHdpbnRfdCBmcHV0d2MgKHdjaGFyX3QgX193YywgX19GSUxFICpfX3N0cmVhbSk7CmV4
dGVybiB3aW50X3QgcHV0d2MgKHdjaGFyX3QgX193YywgX19GSUxFICpfX3N0cmVhbSk7CgoKZXh0
ZXJuIHdpbnRfdCBwdXR3Y2hhciAod2NoYXJfdCBfX3djKTsKCgoKCmV4dGVybiB3Y2hhcl90ICpm
Z2V0d3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywgaW50IF9fbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKTsKCgpleHRlcm4gaW50IGZwdXR3
cyAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsCiAgICAgICAgICAgICAgICAgICBf
X0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pOwoKCgpleHRlcm4gd2ludF90IHVuZ2V0d2MgKHdp
bnRfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKTsKCgoKCgpleHRlcm4gd2ludF90IGdldHdjX3Vu
bG9ja2VkIChfX0ZJTEUgKl9fc3RyZWFtKTsKZXh0ZXJuIHdpbnRfdCBnZXR3Y2hhcl91bmxvY2tl
ZCAodm9pZCk7CgoKZXh0ZXJuIHdpbnRfdCBmZ2V0d2NfdW5sb2NrZWQgKF9fRklMRSAqX19zdHJl
YW0pOwoKCmV4dGVybiB3aW50X3QgZnB1dHdjX3VubG9ja2VkICh3Y2hhcl90IF9fd2MsIF9fRklM
RSAqX19zdHJlYW0pOwoKCgpleHRlcm4gd2ludF90IHB1dHdjX3VubG9ja2VkICh3Y2hhcl90IF9f
d2MsIF9fRklMRSAqX19zdHJlYW0pOwpleHRlcm4gd2ludF90IHB1dHdjaGFyX3VubG9ja2VkICh3
Y2hhcl90IF9fd2MpOwoKCgpleHRlcm4gd2NoYXJfdCAqZmdldHdzX3VubG9ja2VkICh3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fd3MsIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSk7CgoKZXh0ZXJuIGludCBmcHV0d3NfdW5s
b2NrZWQgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKTsKCgoKCgoKZXh0ZXJuIHNp
emVfdCB3Y3NmdGltZSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heHNpemUs
CiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zv
cm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJp
Y3QgX190cCk7CiMgNjgxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwp9CiMgNDMgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDIgMwojIDU3ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHVz
aW5nIDo6bWJzdGF0ZV90Owp9CiMgMTIxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2N3Y2hhci5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6d2ludF90OwoKICB1c2lu
ZyA6OmJ0b3djOwogIHVzaW5nIDo6ZmdldHdjOwogIHVzaW5nIDo6ZmdldHdzOwogIHVzaW5nIDo6
ZnB1dHdjOwogIHVzaW5nIDo6ZnB1dHdzOwogIHVzaW5nIDo6ZndpZGU7CiAgdXNpbmcgOjpmd3By
aW50ZjsKICB1c2luZyA6OmZ3c2NhbmY7CiAgdXNpbmcgOjpnZXR3YzsKICB1c2luZyA6OmdldHdj
aGFyOwogIHVzaW5nIDo6bWJybGVuOwogIHVzaW5nIDo6bWJydG93YzsKICB1c2luZyA6Om1ic2lu
aXQ7CiAgdXNpbmcgOjptYnNydG93Y3M7CiAgdXNpbmcgOjpwdXR3YzsKICB1c2luZyA6OnB1dHdj
aGFyOwogIHVzaW5nIDo6c3dwcmludGY7CiAgdXNpbmcgOjpzd3NjYW5mOwogIHVzaW5nIDo6dW5n
ZXR3YzsKICB1c2luZyA6OnZmd3ByaW50ZjsKICB1c2luZyA6OnZmd3NjYW5mOwogIHVzaW5nIDo6
dnN3cHJpbnRmOwogIHVzaW5nIDo6dnN3c2NhbmY7CiAgdXNpbmcgOjp2d3ByaW50ZjsKICB1c2lu
ZyA6OnZ3c2NhbmY7CiAgdXNpbmcgOjp3Y3J0b21iOwogIHVzaW5nIDo6d2NzY2F0OwogIHVzaW5n
IDo6d2NzY21wOwogIHVzaW5nIDo6d2NzY29sbDsKICB1c2luZyA6Ondjc2NweTsKICB1c2luZyA6
Ondjc2NzcG47CiAgdXNpbmcgOjp3Y3NmdGltZTsKICB1c2luZyA6Ondjc2xlbjsKICB1c2luZyA6
Ondjc25jYXQ7CiAgdXNpbmcgOjp3Y3NuY21wOwogIHVzaW5nIDo6d2NzbmNweTsKICB1c2luZyA6
Ondjc3J0b21iczsKICB1c2luZyA6Ondjc3NwbjsKICB1c2luZyA6Ondjc3RvZDsKICB1c2luZyA6
Ondjc3RvZjsKICB1c2luZyA6Ondjc3RvazsKICB1c2luZyA6Ondjc3RvbDsKICB1c2luZyA6Ondj
c3RvdWw7CiAgdXNpbmcgOjp3Y3N4ZnJtOwogIHVzaW5nIDo6d2N0b2I7CiAgdXNpbmcgOjp3bWVt
Y21wOwogIHVzaW5nIDo6d21lbWNweTsKICB1c2luZyA6OndtZW1tb3ZlOwogIHVzaW5nIDo6d21l
bXNldDsKICB1c2luZyA6OndwcmludGY7CiAgdXNpbmcgOjp3c2NhbmY7CgogIHVzaW5nIDo6d2Nz
Y2hyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NjaHIod2NoYXJfdCogX19wLCB3Y2hhcl90IF9f
YykKICB7IHJldHVybiB3Y3NjaHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19j
KTsgfQoKICB1c2luZyA6Ondjc3Bicms7CgogIGlubGluZSB3Y2hhcl90KgogIHdjc3Bicmsod2No
YXJfdCogX19zMSwgd2NoYXJfdCogX19zMikKICB7IHJldHVybiB3Y3NwYnJrKGNvbnN0X2Nhc3Q8
Y29uc3Qgd2NoYXJfdCo+KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6Ondjc3JjaHI7CgogIGlu
bGluZSB3Y2hhcl90KgogIHdjc3JjaHIod2NoYXJfdCogX19wLCB3Y2hhcl90IF9fYykKICB7IHJl
dHVybiB3Y3NyY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYyk7IH0KCiAg
dXNpbmcgOjp3Y3NzdHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdjc3N0cih3Y2hhcl90KiBfX3Mx
LCB3Y2hhcl90KiBfX3MyKQogIHsgcmV0dXJuIHdjc3N0cihjb25zdF9jYXN0PGNvbnN0IHdjaGFy
X3QqPihfX3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjp3bWVtY2hyOwoKICBpbmxpbmUgd2NoYXJf
dCoKICB3bWVtY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pCiAgeyBy
ZXR1cm4gd21lbWNocihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBfX2MsIF9fbik7
IH0KfQoKCgoKCgoKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdXNpbmcgOjp3Y3N0b2xkOwogIHVz
aW5nIDo6d2NzdG9sbDsKICB1c2luZyA6Ondjc3RvdWxsOwp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1
c2luZyBfX2dudV9jeHg6Ondjc3RvbGQ7CiAgdXNpbmcgX19nbnVfY3h4Ojp3Y3N0b2xsOwogIHVz
aW5nIF9fZ251X2N4eDo6d2NzdG91bGw7Cn0KIyA0MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL2Zwb3MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfU3RhdGVUPgogICAgY2xhc3MgZnBvcwogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRl
ZiBfU3RhdGVUIF9fc3RhdGVfdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBzdHJlYW1vZmYgX01f
b2ZmOwogICAgICBfX3N0YXRlX3R5cGUgX01fc3Q7CgogICAgcHVibGljOgogICAgICBfX3N0YXRl
X3R5cGUKICAgICAgc3RhdGUoKSBjb25zdCB7IHJldHVybiBfTV9zdDsgfQoKICAgICAgdm9pZAog
ICAgICBzdGF0ZShfX3N0YXRlX3R5cGUgX19zdCkgeyBfTV9zdCA9IF9fc3Q7IH0KCgoKICAgICAg
ZnBvcygpOiBfTV9vZmYoc3RyZWFtb2ZmKCkpLCBfTV9zdChfX3N0YXRlX3R5cGUoKSkgeyB9Cgog
ICAgICBmcG9zKHN0cmVhbW9mZiBfX29mZiwgX19zdGF0ZV90eXBlIF9fc3QgPSBfX3N0YXRlX3R5
cGUoKSkKICAgICAgOiBfTV9vZmYoX19vZmYpLCBfTV9zdChfX3N0KSB7IH0KCiAgICAgIG9wZXJh
dG9yIHN0cmVhbW9mZigpIGNvbnN0IHsgcmV0dXJuIF9NX29mZjsgfQoKICAgICAgZnBvcyYKICAg
ICAgb3BlcmF0b3IrPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmICs9IF9fb2ZmOyByZXR1cm4g
KnRoaXM7IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9yLT0oc3RyZWFtb2ZmIF9fb2ZmKSB7
IF9NX29mZiAtPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBmcG9zCiAgICAgIG9wZXJh
dG9yKyhzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBmcG9zIF9fdCgqdGhpcyk7CiAg
ICAgICAgX190ICs9IF9fb2ZmOwogICAgICAgIHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAgIGZw
b3MKICAgICAgb3BlcmF0b3ItKHN0cmVhbW9mZiBfX29mZikKICAgICAgewogICAgICAgIGZwb3Mg
X190KCp0aGlzKTsKICAgICAgICBfX3QgLT0gX19vZmY7CiAgICAgICAgcmV0dXJuIF9fdDsKICAg
ICAgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvcj09KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25z
dAogICAgICB7IHJldHVybiBfTV9vZmYgPT0gX19wb3MuX01fb2ZmOyB9CgogICAgICBib29sCiAg
ICAgIG9wZXJhdG9yIT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9N
X29mZiAhPSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAgIHN0cmVhbW9mZgogICAgICBfTV9wb3NpdGlv
bigpIGNvbnN0IHsgcmV0dXJuIF9NX29mZjsgfQoKICAgICAgdm9pZAogICAgICBfTV9wb3NpdGlv
bihzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmID0gX19vZmY7IH0KICAgIH07CgoKICB0eXBlZGVm
IGZwb3M8bWJzdGF0ZV90PiBzdHJlYW1wb3M7CgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHdz
dHJlYW1wb3M7Cgp9CiMgNDIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9z
ZndkLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2Vw
dC5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0
LmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgi
IDEgMwojIDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIg
MiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lk
KTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93
X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAg
dm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9f
dGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2lu
dmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3Ro
X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShj
b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7
CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv
aWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAog
IF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDQzICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRz
PF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaW9zOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJh
c2ljX3N0cmVhbWJ1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtOwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxf
Q2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29zdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mg
YmFzaWNfaW9zdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9
IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZ2J1ZjsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJU
PiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBj
bGFzcyBiYXNpY19pc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1l
IF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29zdHJpbmdzdHJl
YW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJf
dHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9D
aGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNs
YXNzIGJhc2ljX2ZpbGVidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaWZzdHJlYW07
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJh
aXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAg
Y2xhc3MgYmFzaWNfZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0
ZXJhdG9yOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBj
aGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3I7CgoKCiAg
Y2xhc3MgaW9zX2Jhc2U7CgoKICB0eXBlZGVmIGJhc2ljX2lvczxjaGFyPiBpb3M7CiAgdHlwZWRl
ZiBiYXNpY19zdHJlYW1idWY8Y2hhcj4gc3RyZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVh
bTxjaGFyPiBpc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyPiBvc3RyZWFtOwog
IHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hhcj4gaW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19z
dHJpbmdidWY8Y2hhcj4gc3RyaW5nYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmluZ3N0cmVhbTxj
aGFyPiBpc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyPiBv
c3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPGNoYXI+IHN0cmluZ3N0
cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcj4gZmlsZWJ1ZjsKICB0eXBlZGVmIGJh
c2ljX2lmc3RyZWFtPGNoYXI+IGlmc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08Y2hh
cj4gb2ZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19mc3RyZWFtPGNoYXI+IGZzdHJlYW07CgoKICB0
eXBlZGVmIGJhc2ljX2lvczx3Y2hhcl90PiB3aW9zOwogIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVm
PHdjaGFyX3Q+IHdzdHJlYW1idWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+IHdp
c3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTx3Y2hhcl90PiB3b3N0cmVhbTsKICB0eXBl
ZGVmIGJhc2ljX2lvc3RyZWFtPHdjaGFyX3Q+IHdpb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0
cmluZ2J1Zjx3Y2hhcl90PiB3c3RyaW5nYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmluZ3N0cmVh
bTx3Y2hhcl90PiB3aXN0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJpbmdzdHJlYW08
d2NoYXJfdD4gd29zdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdzdHJlYW08d2No
YXJfdD4gd3N0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8d2NoYXJfdD4gd2Zp
bGVidWY7CiAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTx3Y2hhcl90PiB3aWZzdHJlYW07CiAgdHlw
ZWRlZiBiYXNpY19vZnN0cmVhbTx3Y2hhcl90PiB3b2ZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19m
c3RyZWFtPHdjaGFyX3Q+IHdmc3RyZWFtOwoKfQojIDQwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2V4
Y2VwdGlvbiIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAz
CmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKICBjbGFzcyBleGNlcHRpb24KICB7CiAg
cHVibGljOgogICAgZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmV4Y2VwdGlv
bigpIHRocm93KCk7CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCB0aHJvdygp
OwogIH07CgogIGNsYXNzIGJhZF9leGNlcHRpb24gOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1
YmxpYzoKICAgIGJhZF9leGNlcHRpb24oKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+YmFkX2V4
Y2VwdGlvbigpIHRocm93KCk7CiAgfTsKCiAgdHlwZWRlZiB2b2lkICgqdGVybWluYXRlX2hhbmRs
ZXIpICgpOwogIHR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikgKCk7CgogIHRlcm1p
bmF0ZV9oYW5kbGVyIHNldF90ZXJtaW5hdGUodGVybWluYXRlX2hhbmRsZXIpIHRocm93KCk7CiAg
dm9pZCB0ZXJtaW5hdGUoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgogIHVuZXhw
ZWN0ZWRfaGFuZGxlciBzZXRfdW5leHBlY3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7
CiAgdm9pZCB1bmV4cGVjdGVkKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKICBi
b29sIHVuY2F1Z2h0X2V4Y2VwdGlvbigpIHRocm93KCk7Cn0KCn0KIyA0MSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvY2hhcl90cmFpdHMuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfY3N0cmluZy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2NzdHJpbmcuaCIgMiAzCiMgNDAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfY3N0cmluZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyAyNiAi
L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEg
MwojIDI3ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgojIDEg
Ii91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3Rk
ZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCgpleHRlcm4gdm9p
ZCAqbWVtY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpl
eHRlcm4gdm9pZCAqbWVtbW92ZSAodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBz
aXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkICptZW1jY3B5ICh2b2lk
ICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLAogICAg
ICAgICAgICAgICAgICAgICAgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoK
CmV4dGVybiB2b2lkICptZW1zZXQgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBtZW1jbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2
b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19j
LCBzaXplX3QgX19uKQogICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CgoKCmV4dGVybiB2b2lkICpyYXdtZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtcmNo
ciAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNweSAoY2hh
ciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAg
ICB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVz
dCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywg
c2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cmNhdCAoY2hhciAqX19yZXN0
cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAo
KTsKCmV4dGVybiBjaGFyICpzdHJuY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9f
bikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzdHJjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19j
b25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKZXh0ZXJuIGludCBzdHJuY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAq
X19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCgpleHRlcm4gaW50IHN0cmNvbGwgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFy
ICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJu
IHNpemVfdCBzdHJ4ZnJtIChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93
ICgpOwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMgMTA5ICIvdXNyL2lu
Y2x1ZGUvc3RyaW5nLmgiIDIgMwoKCmV4dGVybiBpbnQgX19zdHJjb2xsX2wgKF9fY29uc3QgY2hh
ciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBfX2xvY2FsZV90IF9fbCkKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3QgX19zdHJ4ZnJtX2wg
KGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFyICpfX3NyYywgc2l6ZV90IF9fbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNo
YXIgKnN0cmR1cCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X21hbGxvY19fKSk7CgoKCgoKCmV4dGVybiBjaGFyICpzdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9f
c3RyaW5nLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxv
Y19fKSk7CiMgMTU1ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cmNo
ciAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQg
X19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFy
ICpzdHJjaHJudWwgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAoX19jb25zdCBj
aGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hhciAq
X19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBf
X2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBf
X2NvbnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKCgpleHRlcm4gY2hhciAqc3RyY2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0
YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKCgpleHRlcm4gY2hhciAqc3RydG9rIChjaGFyICpfX3Jlc3RyaWN0IF9f
cywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4
dGVybiBjaGFyICpfX3N0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7Cgpl
eHRlcm4gY2hhciAqc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0
cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgKm1lbW1lbSAoX19j
b25zdCB2b2lkICpfX2hheXN0YWNrLCBzaXplX3QgX19oYXlzdGFja2xlbiwKICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCB2b2lkICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlbGVuKQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gdm9pZCAqX19t
ZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0
ZXJuIHZvaWQgKm1lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RybGVuIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cm5sZW4g
KF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX21heGxlbikKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50
IF9fZXJybnVtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGludCBfX2Vy
cm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4g
dm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4g
dm9pZCBiY29weSAoX19jb25zdCB2b2lkICpfX3NyYywgdm9pZCAqX19kZXN0LCBzaXplX3QgX19u
KSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBiemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2
b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2Mp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpyaW5k
ZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChjb25zdCkpOwoKCgoKZXh0ZXJuIGludCBmZnNsIChsb25nIGludCBfX2wpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChjb25zdCkpOwoKX19leHRlbnNpb25fXyBleHRlcm4gaW50IGZm
c2xsIChsb25nIGxvbmcgaW50IF9fbGwpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKGNv
bnN0KSk7CgoKCgpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19j
b25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKCmV4dGVybiBpbnQgc3RybmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBj
aGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKCgoKCmV4dGVybiBpbnQgX19zdHJjYXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19z
MSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2Fs
ZV90IF9fbG9jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBp
bnQgX19zdHJuY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19z
MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19s
b2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJu
IGNoYXIgKnN0cnNlcCAoY2hhciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLAogICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gaW50IHN0cnZlcnNjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpf
X3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBj
aGFyICpzdHJzaWduYWwgKGludCBfX3NpZykgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKl9fc3Rw
Y3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
c3JjKQogICAgIHRocm93ICgpOwpleHRlcm4gY2hhciAqc3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0
IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoK
CgpleHRlcm4gY2hhciAqX19zdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3Qg
X19uKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19k
ZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3Jj
LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyZnJ5IChjaGFyICpfX3N0
cmluZykgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbWZyb2IgKHZvaWQgKl9fcywgc2l6ZV90
IF9fbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpiYXNlbmFtZSAoX19jb25zdCBjaGFy
ICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKIyAzNjMgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwp9
CiMgNDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAyIDMK
IyA2NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDMKbmFt
ZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjptZW1jcHk7CiAgdXNpbmcgOjptZW1tb3ZlOwogIHVzaW5n
IDo6c3RyY3B5OwogIHVzaW5nIDo6c3RybmNweTsKICB1c2luZyA6OnN0cmNhdDsKICB1c2luZyA6
OnN0cm5jYXQ7CiAgdXNpbmcgOjptZW1jbXA7CiAgdXNpbmcgOjpzdHJjbXA7CiAgdXNpbmcgOjpz
dHJjb2xsOwogIHVzaW5nIDo6c3RybmNtcDsKICB1c2luZyA6OnN0cnhmcm07CiAgdXNpbmcgOjpz
dHJjc3BuOwogIHVzaW5nIDo6c3Ryc3BuOwogIHVzaW5nIDo6c3RydG9rOwogIHVzaW5nIDo6bWVt
c2V0OwogIHVzaW5nIDo6c3RyZXJyb3I7CiAgdXNpbmcgOjpzdHJsZW47CgogIHVzaW5nIDo6bWVt
Y2hyOwoKICBpbmxpbmUgdm9pZCoKICBtZW1jaHIodm9pZCogX19wLCBpbnQgX19jLCBzaXplX3Qg
X19uKQogIHsgcmV0dXJuIG1lbWNocihjb25zdF9jYXN0PGNvbnN0IHZvaWQqPihfX3ApLCBfX2Ms
IF9fbik7IH0KCiAgdXNpbmcgOjpzdHJjaHI7CgogIGlubGluZSBjaGFyKgogIHN0cmNocihjaGFy
KiBfX3MxLCBpbnQgX19uKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJjaHIoY29uc3RfY2FzdDxj
b25zdCBjaGFyKj4oX19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJwYnJrOwoKICBpbmxpbmUg
Y2hhcioKICBzdHJwYnJrKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpCiAgeyByZXR1cm4g
X19idWlsdGluX3N0cnBicmsoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIpOyB9
CgogIHVzaW5nIDo6c3RycmNocjsKCiAgaW5saW5lIGNoYXIqCiAgc3RycmNocihjaGFyKiBfX3Mx
LCBpbnQgX19uKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJyY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qg
Y2hhcio+KF9fczEpLCBfX24pOyB9CgogIHVzaW5nIDo6c3Ryc3RyOwoKICBpbmxpbmUgY2hhcioK
ICBzdHJzdHIoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKICB7IHJldHVybiBfX2J1aWx0
aW5fc3Ryc3RyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX3MyKTsgfQp9CiMgNDAg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAyIDMKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnBvcy5oIiAxIDMKIyA0MSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7
CgoKCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgogICAgc3RydWN0IGNoYXJfdHJhaXRzCiAgICB7
CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIHR5cGVkZWYgdW5zaWduZWQg
bG9uZyBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1wb3MgcG9zX3R5cGU7CiAgICAgIHR5
cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90
eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgYXNzaWduKGNoYXJfdHlwZSYgX19jMSwgY29u
c3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IF9fYzEgPSBfX2MyOyB9CgogICAgICBzdGF0aWMg
Ym9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19j
MikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAg
ICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAg
eyByZXR1cm4gX19jMSA8IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnQKICAgICAgY29tcGFyZShj
b25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikK
ICAgICAgewogICAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbjsgKytfX2kpCiAg
ICAgICAgICBpZiAoIWVxKF9fczFbX19pXSwgX19zMltfX2ldKSkKICAgICAgICAgICAgcmV0dXJu
IGx0KF9fczFbX19pXSwgX19zMltfX2ldKSA/IC0xIDogMTsKICAgICAgICByZXR1cm4gMDsKICAg
ICAgfQoKICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBf
X3MpCiAgICAgIHsKICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fcCA9IF9fczsKICAgICAgICB3
aGlsZSAoKl9fcCkgKytfX3A7CiAgICAgICAgcmV0dXJuIChfX3AgLSBfX3MpOwogICAgICB9Cgog
ICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKgogICAgICBmaW5kKGNvbnN0IGNoYXJfdHlwZSog
X19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkKICAgICAgewogICAgICAgIGZv
ciAoY29uc3QgY2hhcl90eXBlKiBfX3AgPSBfX3M7IHNpemVfdChfX3AgLSBfX3MpIDwgX19uOyAr
K19fcCkKICAgICAgICAgIGlmICgqX19wID09IF9fYSkgcmV0dXJuIF9fcDsKICAgICAgICByZXR1
cm4gMDsKICAgICAgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgbW92ZShjaGFyX3R5
cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1
cm4gKGNoYXJfdHlwZSopIG1lbW1vdmUoX19zMSwgX19zMiwgX19uICogc2l6ZW9mKGNoYXJfdHlw
ZSkpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJfdHlwZSogX19z
MSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiAoY2hh
cl90eXBlKikgbWVtY3B5KF9fczEsIF9fczIsIF9fbiAqIHNpemVvZihjaGFyX3R5cGUpKTsgfQoK
ICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19zLCBzaXpl
X3QgX19uLCBjaGFyX3R5cGUgX19hKQogICAgICB7CiAgICAgICAgZm9yIChjaGFyX3R5cGUqIF9f
cCA9IF9fczsgX19wIDwgX19zICsgX19uOyArK19fcCkKICAgICAgICAgIGFzc2lnbigqX19wLCBf
X2EpOwogICAgICAgIHJldHVybiBfX3M7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUK
ICAgICAgdG9fY2hhcl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIGNo
YXJfdHlwZShfX2MpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgdG9faW50X3R5cGUo
Y29uc3QgY2hhcl90eXBlJiBfX2MpIHsgcmV0dXJuIGludF90eXBlKF9fYyk7IH0KCiAgICAgIHN0
YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBp
bnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0
aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KC0x
KTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUm
IF9fYykKICAgICAgeyByZXR1cm4gZXFfaW50X3R5cGUoX19jLCBlb2YoKSkgPyBpbnRfdHlwZSgw
KSA6IF9fYzsgfQogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM8
Y2hhcj4KICAgIHsKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBp
bnQgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtcG9zIHBvc190eXBlOwogICAgICB0eXBl
ZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlw
ZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0
IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoKICAgICAgc3RhdGljIGJv
b2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIp
CiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAg
bHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsg
cmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUoY29u
c3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAg
ICAgIHsgcmV0dXJuIG1lbWNtcChfX3MxLCBfX3MyLCBfX24pOyB9CgogICAgICBzdGF0aWMgc2l6
ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKICAgICAgeyByZXR1cm4gc3Ry
bGVuKF9fcyk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGZpbmQoY29u
c3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKQogICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBjaGFyX3R5cGUqPihtZW1jaHIoX19zLCBfX2Es
IF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBtb3ZlKGNoYXJfdHlwZSog
X19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1tb3ZlKF9fczEsIF9fczIsIF9fbikpOyB9CgogICAg
ICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hh
cl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFy
X3R5cGUqPihtZW1jcHkoX19zMSwgX19zMiwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5
cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9f
YSkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtc2V0KF9fcywgX19h
LCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUoY29u
c3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlPihf
X2MpOyB9CgoKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19pbnRfdHlwZShjb25zdCBj
aGFyX3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYykpOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBl
cV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5cGUmIF9fYzIpCiAg
ICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAg
IGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigoLTEpKTsgfQoKICAgICAgc3Rh
dGljIGludF90eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyBy
ZXR1cm4gKF9fYyA9PSBlb2YoKSkgPyAwIDogX19jOyB9CiAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAg
ICBzdHJ1Y3QgY2hhcl90cmFpdHM8d2NoYXJfdD4KICAgIHsKICAgICAgdHlwZWRlZiB3Y2hhcl90
IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB3aW50X3QgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYg
c3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBlZGVmIHdzdHJlYW1wb3MgcG9zX3R5cGU7CiAg
ICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAg
ICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsg
X19jMSA9IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxKGNvbnN0IGNoYXJfdHlw
ZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9f
YzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwg
Y29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQoKICAg
ICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3Qg
Y2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiB3bWVtY21wKF9fczEs
IF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0IGNo
YXJfdHlwZSogX19zKQogICAgICB7IHJldHVybiB3Y3NsZW4oX19zKTsgfQoKICAgICAgc3RhdGlj
IGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90
IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsgcmV0dXJuIHdtZW1jaHIoX19zLCBf
X2EsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIG1vdmUoY2hhcl90eXBl
KiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIGludF90eXBlIF9fbikKICAgICAgeyByZXR1
cm4gd21lbW1vdmUoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoK
ICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90
IF9fbikKICAgICAgeyByZXR1cm4gd21lbWNweShfX3MxLCBfX3MyLCBfX24pOyB9CgogICAgICBz
dGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24s
IGNoYXJfdHlwZSBfX2EpCiAgICAgIHsgcmV0dXJuIHdtZW1zZXQoX19zLCBfX2EsIF9fbik7IH0K
CiAgICAgIHN0YXRpYyBjaGFyX3R5cGUKICAgICAgdG9fY2hhcl90eXBlKGNvbnN0IGludF90eXBl
JiBfX2MpIHsgcmV0dXJuIGNoYXJfdHlwZShfX2MpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUK
ICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpIHsgcmV0dXJuIGludF90eXBl
KF9fYyk7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90
eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBf
X2MyOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50X3R5cGU+KCgweGZmZmZmZmZmdSkpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUK
ICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBlcV9pbnRf
dHlwZShfX2MsIGVvZigpKSA/IDAgOiBfX2M7IH0KICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9DaGFyX3RyYWl0c19tYXRjaAog
ICAgewogICAgICBfQ2hhclQgX01fYzsKICAgICAgX0NoYXJfdHJhaXRzX21hdGNoKF9DaGFyVCBj
b25zdCYgX19jKSA6IF9NX2MoX19jKSB7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IoKShf
Q2hhclQgY29uc3QmIF9fYSkgeyByZXR1cm4gX1RyYWl0czo6ZXEoX01fYywgX19hKTsgfQogICAg
fTsKfQojIDQyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMK
IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAxIDMKIyA0
MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMKIyAzOCAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAzCgojIDEgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMg
NDAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2xvY2Fs
ZS5oIiAxIDMKIyAzNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdu
dS9iaXRzL2MrK2xvY2FsZS5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHR5cGVkZWYgaW50KiBfX2Nf
bG9jYWxlOwp9CiMgNDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2Qu
aCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jbGltaXRzLmgi
IDEgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NsaW1pdHMuaCIg
MwojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1
ZGUvbGltaXRzLmgiIDEgMwojIDExICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMC9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMSAzCgoKCgoKCiMg
MSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9s
aW1pdHMuaCIgMSAzCiMgMTMwICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzMuMC9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAx
IDMKIyAyNiAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1
cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDE0NCAiL3Vzci9p
bmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAx
IDMKIyAxMjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxf
bGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvbGltaXRzLmgiIDEgMwojIDM3ICIvdXNy
L2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMiAzCiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9w
b3NpeDFfbGltLmgiIDIgMwojIDE0NSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDJfbGltLmgiIDEgMwojIDE0OSAiL3Vzci9pbmNsdWRl
L2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMSAz
CiMgMzQgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0u
aCIgMiAzCiMgMTM2ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMwojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEgMwojIDEzNyAiL3Vzci9pbmNsdWRlL2JpdHMveG9w
ZW5fbGltLmgiIDIgMwojIDE1MyAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyAxMzEgIi91
c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvbGltaXRz
LmgiIDIgMwojIDggIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w
L2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMwojIDEyICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyAzOSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jbGltaXRzLmgiIDIgMwojIDQyICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgNDAgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDEgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdHJpbmdmd2QuaCIgMSAzCiMgNDEgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAxIDMKIyA0MiAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAxIDMKIyAzMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzMiAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMKIyAxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgMzMgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDEgMwojIDQwICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIg
MwoKbmFtZXNwYWNlIHN0ZAp7CgpzdHJ1Y3QgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3Qg
b3V0cHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGZvcndhcmRfaXRlcmF0b3JfdGFnIDogcHVi
bGljIGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf
dGFnIDogcHVibGljIGZvcndhcmRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3QgcmFuZG9tX2FjY2Vz
c19pdGVyYXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcge307CgoK
CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGlucHV0X2l0
ZXJhdG9yIHsKICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsK
ICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2Vf
dHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9
OwoKc3RydWN0IG91dHB1dF9pdGVyYXRvciB7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFn
IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYg
dm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2
b2lkIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4g
c3RydWN0IGZvcndhcmRfaXRlcmF0b3IgewogIHR5cGVkZWYgZm9yd2FyZF9pdGVyYXRvcl90YWcg
aXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9E
aXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRl
ZiBfVHAmIHJlZmVyZW5jZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFu
Y2U+IHN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yIHsKICB0eXBlZGVmIGJpZGlyZWN0aW9u
YWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5
cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBw
b2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yIHsKICB0eXBl
ZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVk
ZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwog
IHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0NhdGVnb3J5LCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZSA9IHB0cmRp
ZmZfdCwKICAgICAgICAgIGNsYXNzIF9Qb2ludGVyID0gX1RwKiwgY2xhc3MgX1JlZmVyZW5jZSA9
IF9UcCY+CnN0cnVjdCBpdGVyYXRvciB7CiAgdHlwZWRlZiBfQ2F0ZWdvcnkgaXRlcmF0b3JfY2F0
ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZm
ZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfUG9pbnRlciBwb2ludGVyOwogIHR5cGVkZWYgX1JlZmVy
ZW5jZSByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgpzdHJ1Y3QgaXRl
cmF0b3JfdHJhaXRzIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0
ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnZh
bHVlX3R5cGUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6ZGlmZmVy
ZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6
cG9pbnRlciBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpyZWZlcmVuY2Ug
cmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0
czxfVHAqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9j
YXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRp
ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVm
ZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxj
b25zdCBfVHAqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRv
cl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90
IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0IF9UcCogcG9pbnRlcjsKICB0eXBlZGVm
IGNvbnN0IF9UcCYgcmVmZXJlbmNlOwp9OwojIDE0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9JdGVy
PgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdv
cnkKX19pdGVyYXRvcl9jYXRlZ29yeShjb25zdCBfSXRlciYpCnsKICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9DYXRlZ29yeTsKICBy
ZXR1cm4gX0NhdGVnb3J5KCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSoKX19kaXN0YW5jZV90
eXBlKGNvbnN0IF9JdGVyJikKewogIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqPigwKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlw
ZSoKX192YWx1ZV90eXBlKGNvbnN0IF9JdGVyJikKewogIHJldHVybiBzdGF0aWNfY2FzdDx0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKj4oMCk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0
ZXJhdG9yX2NhdGVnb3J5Cml0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0
dXJuIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19pKTsgfQoKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4K
aW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSoK
ZGlzdGFuY2VfdHlwZShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX2Rpc3RhbmNlX3R5cGUo
X19pKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoKdmFsdWVfdHlwZShjb25zdCBfSXRlciYgX19pKSB7
IHJldHVybiBfX3ZhbHVlX3R5cGUoX19pKTsgfQoKfQojIDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMKIyA0MCAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAxIDMKIyAzNCAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMwoKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmln
LmgiIDEgMwojIDM2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVj
ay5oIiAyIDMKIyA0MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRv
cl9iYXNlX2Z1bmNzLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fZGlzdGFuY2Uo
X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgIF9EaXN0YW5jZSYgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCnsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgeyArK19fZmlyc3Q7ICsrX19uOyB9
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5j
ZT4KaW5saW5lIHZvaWQgX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwK
ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSYgX19uLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9y
X3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBfX24gKz0gX19sYXN0IC0gX19m
aXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+
CmlubGluZSB2b2lkIGRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX0Rpc3RhbmNlJiBfX24pCnsKCiAgX19k
aXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0YW5jZShf
SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJh
dG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1
dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgd2hpbGUgKF9fZmlyc3QgIT0g
X19sYXN0KSB7CiAgICArK19fZmlyc3Q7ICsrX19uOwogIH0KICByZXR1cm4gX19uOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3Rh
bmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
X19sYXN0LAogICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogIHJldHVybiBfX2xhc3QgLSBfX2ZpcnN0Owp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKZGlzdGFuY2UoX0lucHV0SXRlcmF0b3Ig
X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQp7CgogIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgIF9DYXRl
Z29yeTsKICByZXR1cm4gX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9DYXRlZ29yeSgpKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZv
aWQgX19hZHZhbmNlKF9JbnB1dEl0ZXImIF9faSwgX0Rpc3RhbmNlIF9fbiwgaW5wdXRfaXRlcmF0
b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogIHdoaWxlIChfX24tLSkgKytfX2k7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lk
IF9fYWR2YW5jZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAg
ICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKICBpZiAoX19uID4gMCkKICAgIHdoaWxlIChfX24tLSkgKytf
X2k7CiAgZWxzZQogICAgd2hpbGUgKF9fbisrKSAtLV9faTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9S
YW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFu
Y2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAg
ICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICBfX2kgKz0gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgYWR2YW5jZShfSW5wdXRJdGVyYXRvciYg
X19pLCBfRGlzdGFuY2UgX19uKQp7CgogIF9fYWR2YW5jZShfX2ksIF9fbiwgaXRlcmF0b3JfY2F0
ZWdvcnkoX19pKSk7Cn0KCn0KIyAzNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9pdGVyYXRvci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2l0ZXJhdG9yLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2l0ZXJhdG9yLmgiIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5l
cj4KY2xhc3MgYmFja19pbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciog
Y29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwog
IHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVm
IHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVk
ZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIGV4cGxpY2l0IGJh
Y2tfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkge30K
ICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlw
ZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgewogICAgY29udGFpbmVyLT5w
dXNoX2JhY2soX192YWx1ZSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGJhY2tfaW5zZXJ0X2l0
ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGJhY2tf
aW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7
IH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsg
cmV0dXJuICp0aGlzOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5lIGJh
Y2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYg
X194KSB7CiAgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBmcm9udF9pbnNlcnRfaXRlcmF0b3Ig
ewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBf
Q29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBp
dGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZv
aWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9p
ZCByZWZlcmVuY2U7CgogIGV4cGxpY2l0IGZyb250X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVy
JiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHt9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250
YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBl
JiBfX3ZhbHVlKSB7CiAgICBjb250YWluZXItPnB1c2hfZnJvbnQoX192YWx1ZSk7CiAgICByZXR1
cm4gKnRoaXM7CiAgfQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0
b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l
cj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIGZyb250X2luc2VydF9pdGVyYXRv
cjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9Cn07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5lIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29u
dGFpbmVyPiBmcm9udF9pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gpIHsKICByZXR1cm4gZnJvbnRf
aW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29u
dGFpbmVyPgpjbGFzcyBpbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciog
Y29udGFpbmVyOwogIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIGl0ZXI7CnB1YmxpYzoK
ICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRl
cmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwog
IHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAg
dHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9f
eCwgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pKQogICAgOiBjb250YWluZXIoJl9f
eCksIGl0ZXIoX19pKSB7fQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRv
cj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgewogICAg
aXRlciA9IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIsIF9fdmFsdWUpOwogICAgKytpdGVyOwogICAg
cmV0dXJuICp0aGlzOwogIH0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9y
KigpIHsgcmV0dXJuICp0aGlzOyB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVy
YXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4m
IG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9D
b250YWluZXIsIGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lCmluc2VydF9pdGVyYXRvcjxfQ29udGFp
bmVyPiBpbnNlcnRlcihfQ29udGFpbmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpCnsKICB0eXBlZGVm
IHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faXRlcjsKICByZXR1cm4gaW5zZXJ0X2l0
ZXJhdG9yPF9Db250YWluZXI+KF9feCwgX19pdGVyKF9faSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfUmVmZXJlbmNlID0gX1Rw
JiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSA9IHB0cmRpZmZfdD4KY2xhc3MgcmV2ZXJzZV9i
aWRpcmVjdGlvbmFsX2l0ZXJhdG9yIHsKICB0eXBlZGVmIHJldmVyc2VfYmlkaXJlY3Rpb25hbF9p
dGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBfVHAsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1JlZmVyZW5jZSwgX0Rpc3RhbmNlPiBfU2VsZjsKcHJvdGVj
dGVkOgogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgY3VycmVudDsKcHVibGljOgogIHR5cGVkZWYg
YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBf
VHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlw
ZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5jZTsKCiAgcmV2
ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKCkge30KICBleHBsaWNpdCByZXZlcnNlX2JpZGly
ZWN0aW9uYWxfaXRlcmF0b3IoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3gpCiAgICA6IGN1cnJl
bnQoX194KSB7fQogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgYmFzZSgpIGNvbnN0IHsgcmV0dXJu
IGN1cnJlbnQ7IH0KICBfUmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIF9CaWRpcmVj
dGlvbmFsSXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAgcmV0dXJuICotLV9fdG1wOwogIH0K
ICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQog
IF9TZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwog
IH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAg
IC0tY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7
CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0o
aW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKytjdXJyZW50OwogICAgcmV0dXJu
IF9fdG1wOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNz
IF9SZWYsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PSgKICAgIGNvbnN0
IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0
YW5jZT4mIF9feCwKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJ
dGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feSkKewogIHJldHVybiBfX3guYmFzZSgpID09
IF9feS5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNz
IF9SZWYsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPSgKICAgIGNvbnN0
IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0
YW5jZT4mIF9feCwKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJ
dGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feSkKewogIHJldHVybiAhKF9feCA9PSBfX3kp
Owp9CiMgMTkzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgi
IDMKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KY2xhc3MgcmV2ZXJzZV9pdGVyYXRvcgp7CnBy
b3RlY3RlZDoKICBfSXRlcmF0b3IgY3VycmVudDsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICAgICAgICBp
dGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRl
cmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAg
ZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy
YXRvcj46OnBvaW50ZXIKICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlCiAgICAgICAgICByZWZlcmVuY2U7Cgog
IHR5cGVkZWYgX0l0ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJh
dG9yPF9JdGVyYXRvcj4gX1NlbGY7CgpwdWJsaWM6CiAgcmV2ZXJzZV9pdGVyYXRvcigpIHt9CiAg
ZXhwbGljaXQgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRvcl90eXBlIF9feCkgOiBjdXJyZW50KF9f
eCkge30KCiAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCBfU2VsZiYgX194KSA6IGN1cnJlbnQoX194
LmN1cnJlbnQpIHt9CiAgdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgogIHJldmVyc2VfaXRlcmF0b3Io
Y29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcj4mIF9feCkKICAgIDogY3VycmVudChfX3guYmFz
ZSgpKSB7fQoKICBpdGVyYXRvcl90eXBlIGJhc2UoKSBjb25zdCB7IHJldHVybiBjdXJyZW50OyB9
CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIF9JdGVyYXRvciBfX3RtcCA9IGN1
cnJlbnQ7CiAgICByZXR1cm4gKi0tX190bXA7CiAgfQogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNv
bnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogIF9TZWxmJiBvcGVyYXRvcisrKCkgewog
ICAgLS1jdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvcisrKGlu
dCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiBf
X3RtcDsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1
cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9
ICp0aGlzOwogICAgKytjdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KCiAgX1NlbGYgb3Bl
cmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsKICAgIHJldHVybiBfU2VsZihjdXJy
ZW50IC0gX19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9fbikg
ewogICAgY3VycmVudCAtPSBfX247CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJh
dG9yLShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7CiAgICByZXR1cm4gX1NlbGYoY3VycmVu
dCArIF9fbik7CiAgfQogIF9TZWxmJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX24pIHsK
ICAgIGN1cnJlbnQgKz0gX19uOwogICAgcmV0dXJuICp0aGlzOwogIH0KICByZWZlcmVuY2Ugb3Bl
cmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKCp0aGlzICsgX19u
KTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVy
biBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+
CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m
IF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh
dG9yPiYgX195KSB7CiAgcmV0dXJuIF9feS5iYXNlKCkgPCBfX3guYmFzZSgpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHJldmVyc2Vf
aXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25z
dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuIF9feSA8
IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8
PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVy
biAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29s
IG9wZXJhdG9yPj0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkg
ewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+Cmlu
bGluZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlw
ZQpvcGVyYXRvci0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAg
ICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBf
X3kuYmFzZSgpIC0gX194LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5s
aW5lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPgpvcGVyYXRvcisodHlwZW5hbWUgcmV2ZXJz
ZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgY29u
c3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gpIHsKICByZXR1cm4gcmV2ZXJzZV9p
dGVyYXRvcjxfSXRlcmF0b3I+KF9feC5iYXNlKCkgLSBfX24pOwp9CgoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwKICAgICAgICAgIGNsYXNzIF9DaGFyVCA9IGNoYXIsIGNsYXNzIF9UcmFpdHMgPSBjaGFy
X3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgY2xhc3MgX0Rpc3QgPSBwdHJkaWZmX3Q+CmNsYXNz
IGlzdHJlYW1faXRlcmF0b3IgewpwdWJsaWM6CiAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwog
IHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiBpc3RyZWFtX3R5cGU7CgogIHR5cGVkZWYgaW5wdXRfaXRlcmF0b3JfdGFn
IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBf
RGlzdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7CiAgdHlw
ZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5jZTsKCiAgaXN0cmVhbV9pdGVyYXRvcigpIDogX01fc3Ry
ZWFtKDApLCBfTV9vayhmYWxzZSkge30KICBpc3RyZWFtX2l0ZXJhdG9yKGlzdHJlYW1fdHlwZSYg
X19zKSA6IF9NX3N0cmVhbSgmX19zKSB7IF9NX3JlYWQoKTsgfQoKICByZWZlcmVuY2Ugb3BlcmF0
b3IqKCkgY29uc3QgeyByZXR1cm4gX01fdmFsdWU7IH0KICBwb2ludGVyIG9wZXJhdG9yLT4oKSBj
b25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICBpc3RyZWFtX2l0ZXJhdG9yJiBvcGVy
YXRvcisrKCkgewogICAgX01fcmVhZCgpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpc3RyZWFt
X2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBpc3RyZWFtX2l0ZXJhdG9yIF9fdG1wID0g
KnRoaXM7CiAgICBfTV9yZWFkKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQoKICBib29sIF9NX2Vx
dWFsKGNvbnN0IGlzdHJlYW1faXRlcmF0b3ImIF9feCkgY29uc3QKICAgIHsgcmV0dXJuIChfTV9v
ayA9PSBfX3guX01fb2spICYmICghX01fb2sgfHwgX01fc3RyZWFtID09IF9feC5fTV9zdHJlYW0p
OyB9Cgpwcml2YXRlOgogIGlzdHJlYW1fdHlwZSogX01fc3RyZWFtOwogIF9UcCBfTV92YWx1ZTsK
ICBib29sIF9NX29rOwoKICB2b2lkIF9NX3JlYWQoKSB7CiAgICBfTV9vayA9IChfTV9zdHJlYW0g
JiYgKl9NX3N0cmVhbSkgPyB0cnVlIDogZmFsc2U7CiAgICBpZiAoX01fb2spIHsKICAgICAgKl9N
X3N0cmVhbSA+PiBfTV92YWx1ZTsKICAgICAgX01fb2sgPSAqX01fc3RyZWFtID8gdHJ1ZSA6IGZh
bHNlOwogICAgfQogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9DaGFyVCwgY2xh
c3MgX1RyYWl0cywgY2xhc3MgX0Rpc3Q+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29uc3QgaXN0
cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3gsCiAgICAgICAg
ICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBf
X3kpIHsKICByZXR1cm4gX194Ll9NX2VxdWFsKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0Rpc3Q+CmlubGluZSBib29sCm9w
ZXJhdG9yIT0oY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rp
c3Q+JiBfX3gsCiAgICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwg
X1RyYWl0cywgX0Rpc3Q+JiBfX3kpIHsKICByZXR1cm4gIV9feC5fTV9lcXVhbChfX3kpOwp9CgoK
dGVtcGxhdGUgPGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9DaGFyVCA9IGNoYXIsIGNsYXNz
IF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KY2xhc3Mgb3N0cmVhbV9pdGVyYXRvciB7
CnB1YmxpYzoKICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgdHlwZWRlZiBfVHJhaXRzIHRy
YWl0c190eXBlOwogIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IG9zdHJl
YW1fdHlwZTsKCiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5
OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5
cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAg
b3N0cmVhbV9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcykgOiBfTV9zdHJlYW0oJl9fcyksIF9N
X3N0cmluZygwKSB7fQogIG9zdHJlYW1faXRlcmF0b3Iob3N0cmVhbV90eXBlJiBfX3MsIGNvbnN0
IF9DaGFyVCogX19jKQogICAgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZyhfX2MpIHt9CiAg
b3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX3ZhbHVlKSB7CiAg
ICAqX01fc3RyZWFtIDw8IF9fdmFsdWU7CiAgICBpZiAoX01fc3RyaW5nKSAqX01fc3RyZWFtIDw8
IF9NX3N0cmluZzsKICAgIHJldHVybiAqdGhpczsKICB9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+
JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYg
b3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBv
cGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KcHJpdmF0ZToKICBvc3RyZWFtX3R5cGUq
IF9NX3N0cmVhbTsKICBjb25zdCBfQ2hhclQqIF9NX3N0cmluZzsKfTsKIyA0MTcgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CmNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9y
CiAgOiBwdWJsaWMgaXRlcmF0b3I8aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9y
X2NhdGVnb3J5LAogICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+
Ojp2YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0
b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3JfdHJhaXRz
PF9JdGVyYXRvcj46OnBvaW50ZXIsCiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3JfdHJhaXRz
PF9JdGVyYXRvcj46OnJlZmVyZW5jZT4KewoKcHJvdGVjdGVkOgogIF9JdGVyYXRvciBfTV9jdXJy
ZW50OwoKcHVibGljOgogIHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29u
dGFpbmVyPiBub3JtYWxfaXRlcmF0b3JfdHlwZTsKICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxf
SXRlcmF0b3I+IF9fdHJhaXRzX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBl
OjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHR5cGVuYW1l
IF9fdHJhaXRzX3R5cGU6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1l
IF9fdHJhaXRzX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBl
bmFtZSBfX3RyYWl0c190eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwoKICBfX25vcm1hbF9pdGVy
YXRvcigpIDogX01fY3VycmVudChfSXRlcmF0b3IoKSkgeyB9CgogIGV4cGxpY2l0IF9fbm9ybWFs
X2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRvciYgX19pKSA6IF9NX2N1cnJlbnQoX19pKSB7IH0KCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogIGlubGluZSBfX25vcm1hbF9pdGVyYXRvcihjb25z
dCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlciwgX0NvbnRhaW5lcj4mIF9faSkKICAgIDogX01fY3Vy
cmVudChfX2kuYmFzZSgpKSB7IH0KCgogIHJlZmVyZW5jZQogIG9wZXJhdG9yKigpIGNvbnN0IHsg
cmV0dXJuICpfTV9jdXJyZW50OyB9CgogIHBvaW50ZXIKICBvcGVyYXRvci0+KCkgY29uc3QgeyBy
ZXR1cm4gX01fY3VycmVudDsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvcisr
KCkgeyArK19NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlw
ZQogIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50
KyspOyB9CgoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvci0tKCkgeyAtLV9NX2N1
cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9y
LS0oaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50LS0pOyB9CgoKICBy
ZWZlcmVuY2UKICBvcGVyYXRvcltdKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAog
IHsgcmV0dXJuIF9NX2N1cnJlbnRbX19uXTsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYKICBv
cGVyYXRvcis9KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKQogIHsgX01fY3VycmVudCArPSBf
X247IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yKyhj
b25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICB7IHJldHVybiBfX25vcm1hbF9pdGVy
YXRvcihfTV9jdXJyZW50ICsgX19uKTsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVy
YXRvci09KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKQogIHsgX01fY3VycmVudCAtPSBfX247
IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yLShjb25z
dCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRv
cihfTV9jdXJyZW50IC0gX19uKTsgfQoKICBkaWZmZXJlbmNlX3R5cGUKICBvcGVyYXRvci0oY29u
c3Qgbm9ybWFsX2l0ZXJhdG9yX3R5cGUmIF9faSkgY29uc3QKICB7IHJldHVybiBfTV9jdXJyZW50
IC0gX19pLl9NX2N1cnJlbnQ7IH0KCiAgY29uc3QgX0l0ZXJhdG9yJgogIGJhc2UoKSBjb25zdCB7
IHJldHVybiBfTV9jdXJyZW50OyB9Cn07CgoKCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckws
IHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBib29sCm9w
ZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4m
IF9fbGhzLAogICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9D
b250YWluZXI+JiBfX3JocykKeyByZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2UoKTsg
fQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlw
ZW5hbWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPShjb25zdCBfX25vcm1hbF9p
dGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgY29uc3Qg
X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVy
biAhKF9fbGhzID09IF9fcmhzKTsgfQoKCgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0
eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgppbmxpbmUgYm9vbApvcGVy
YXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9f
bGhzLAogICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRh
aW5lcj4mIF9fcmhzKQp7IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7IH0KCnRl
bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1l
IF9Db250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRv
cjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICBjb25zdCBfX25vcm1h
bF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCnsgcmV0dXJuIF9fcmhz
IDwgX19saHM7IH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVy
YXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9yPD0oY29uc3Qg
X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAg
ICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3Jo
cykKeyByZXR1cm4gIShfX3JocyA8IF9fbGhzKTsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJh
dG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5saW5lIGJv
b2wKb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFp
bmVyPiYgX19saHMsCiAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y
UiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiAhKF9fbGhzIDwgX19yaHMpOyB9Cgp0ZW1w
bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBfX25v
cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+Cm9wZXJhdG9yKyhfX25vcm1hbF9p
dGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAg
ICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19p
KQp7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+KF9faS5i
YXNlKCkgKyBfX24pOyB9Cgp9CiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfaXRlcmF0b3IuaCIgMiAzCiMgNDMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfc3RyaW5nLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
bWVtb3J5LmgiIDEgMwojIDE5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21l
bW9yeS5oIiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jh
c2UuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jh
c2UuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUv
Yml0cy9jKytjb25maWcuaCIgMSAzCiMgMzYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfcGFpci5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9wYWlyLmgiIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBf
VDI+CnN0cnVjdCBwYWlyIHsKICB0eXBlZGVmIF9UMSBmaXJzdF90eXBlOwogIHR5cGVkZWYgX1Qy
IHNlY29uZF90eXBlOwoKICBfVDEgZmlyc3Q7CiAgX1QyIHNlY29uZDsKCgogIHBhaXIoKSA6IGZp
cnN0KCksIHNlY29uZCgpIHt9CgoKCiAgcGFpcihjb25zdCBfVDEmIF9fYSwgY29uc3QgX1QyJiBf
X2IpIDogZmlyc3QoX19hKSwgc2Vjb25kKF9fYikge30KCiAgdGVtcGxhdGUgPGNsYXNzIF9VMSwg
Y2xhc3MgX1UyPgogIHBhaXIoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9fcCkgOiBmaXJzdChfX3Au
Zmlyc3QpLCBzZWNvbmQoX19wLnNlY29uZCkge30KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNs
YXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194
LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA9PSBfX3ku
Zmlyc3QgJiYgX194LnNlY29uZCA9PSBfX3kuc2Vjb25kOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Qx
LCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYg
X194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA8IF9f
eS5maXJzdCB8fAogICAgICAgICAoIShfX3kuZmlyc3QgPCBfX3guZmlyc3QpICYmIF9feC5zZWNv
bmQgPCBfX3kuc2Vjb25kKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8
X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgcGFpcjxfVDEs
IF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiBfX3kgPCBf
X3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0
b3I8PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195
KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3Mg
X1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNv
bnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CgoKaW5saW5lIHBhaXI8X1QxLCBfVDI+IG1ha2Vf
cGFpcihfVDEgX194LCBfVDIgX195KQoKCgp7CiAgcmV0dXJuIHBhaXI8X1QxLCBfVDI+KF9feCwg
X195KTsKfQoKfQojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29i
YXNlLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3R5cGVfdHJh
aXRzLmgiIDEgMwojIDE5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFp
dHMuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251
L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDIxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvdHlwZV90cmFpdHMuaCIgMiAzCiMgNTcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy90eXBlX3RyYWl0cy5oIiAzCnRlbXBsYXRlIDxib29sIF9UcnV0aD4gc3RydWN0IF9Cb29sIHt9
Owp0eXBlZGVmIF9Cb29sPHRydWU+IF9fdHJ1ZV90eXBlOwp0eXBlZGVmIF9Cb29sPGZhbHNlPiBf
X2ZhbHNlX3R5cGU7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgdGhpc19kdW1teV9tZW1iZXJfbXVzdF9iZV9maXJzdDsK
IyA4MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKICAg
dHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw
ZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2Zh
bHNlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJh
aXRzPGJvb2w+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190
eXBlX3RyYWl0czxjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVm
YXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5
X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1l
bnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3Ry
dWN0IF9fdHlwZV90cmFpdHM8c2lnbmVkIGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoK
dGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBjaGFyPiB7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBp
c19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8d2NoYXJfdD4g
ewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRz
PHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlw
ZV90cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k
ZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxh
dGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoK
dGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBpbnQ+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz
X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nPiB7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5z
aWduZWQgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w
ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBsYXRlPD4gc3RydWN0
IF9fdHlwZV90cmFpdHM8bG9uZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBs
YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBp
c19QT0RfdHlwZTsKfTsKCgoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxmbG9hdD4g
ewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRz
PGRvdWJsZT4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJh
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5
cGVfdHJhaXRzPGxvbmcgZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fz
c2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVz
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzPF9UcCo+IHsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90
eXBlOwp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBfSXNfaW50ZWdlciB7CiAg
dHlwZWRlZiBfX2ZhbHNlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lz
X2ludGVnZXI8Ym9vbD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVt
cGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Y2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg
X0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2lnbmVkIGNoYXI+
IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0
IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRl
Z3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHdjaGFyX3Q+IHsKICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRl
Z2VyPHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0
ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBzaG9ydD4gewogIHR5cGVkZWYgX190cnVl
X3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8aW50PiB7
CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBf
SXNfaW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3Jh
bDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGxvbmc+IHsKICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVu
c2lnbmVkIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVt
cGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVf
dHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25l
ZCBsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPiBzdHJ1Y3QgX0lzX25vcm1hbF9pdGVyYXRvciB7CiAgIHR5cGVk
ZWYgX19mYWxzZV90eXBlIF9Ob3JtYWw7Cn07CgoKbmFtZXNwYWNlIHN0ZCB7CiAgIHRlbXBsYXRl
PHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4gY2xhc3MgX19ub3JtYWxf
aXRlcmF0b3I7Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250
YWluZXI+CnN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yPCBzdGQ6Ol9fbm9ybWFsX2l0ZXJhdG9y
PF9JdGVyYXRvciwgX0NvbnRhaW5lcj4gPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgX05vcm1h
bDsKfTsKIyA0MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5o
IiAyIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgi
IDEgMwojIDQzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgi
IDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2xpbWl0cy5oIiAx
IDMKIyA0NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAy
IDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMSAz
CiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAzCiMg
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2Nv
bmZpZy5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3Rk
bGliLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRl
Zi5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGli
LmgiIDIgMwojIDQxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9z
dGRsaWIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNiAiL3Vzci9p
bmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5j
bHVkZS9zdGRsaWIuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy93YWl0ZmxhZ3MuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRl
L2JpdHMvd2FpdHN0YXR1cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAy
MiAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgi
IDEgMwojIDIzICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIgMwojIDM3ICIvdXNyL2luY2x1ZGUv
ZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMgMzggIi91
c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgNjQgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRzdGF0
dXMuaCIgMiAzCgp1bmlvbiB3YWl0CiAgewogICAgaW50IHdfc3RhdHVzOwogICAgc3RydWN0CiAg
ICAgIHsKCiAgICAgICAgdW5zaWduZWQgaW50IF9fd190ZXJtc2lnOjc7CiAgICAgICAgdW5zaWdu
ZWQgaW50IF9fd19jb3JlZHVtcDoxOwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfcmV0Y29kZTo4
OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsKCgoKCgoKCiAgICAgIH0gX193YWl0X3Rlcm1pbmF0
ZWQ7CiAgICBzdHJ1Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3B2YWw6
ODsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3BzaWc6ODsKICAgICAgICB1bnNpZ25lZCBp
bnQ6MTY7CgoKCgoKCiAgICAgIH0gX193YWl0X3N0b3BwZWQ7CiAgfTsKIyA0NCAiL3Vzci9pbmNs
dWRlL3N0ZGxpYi5oIiAyIDMKIyA5NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCnR5cGVkZWYg
c3RydWN0CiAgewogICAgaW50IHF1b3Q7CiAgICBpbnQgcmVtOwogIH0gZGl2X3Q7CgoKCnR5cGVk
ZWYgc3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgaW50IHJlbTsKICB9IGxk
aXZfdDsKCgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBsb25n
IGludCBxdW90OwogICAgbG9uZyBsb25nIGludCByZW07CiAgfSBsbGRpdl90OwojIDEzMyAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21h
eCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpf
X25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBh
dG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBs
b25nIGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq
X19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBzdHJ0b2YgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBzdHJ0
b2xkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgpleHRlcm4g
bG9uZyBpbnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkg
dGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bCAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgpf
X2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4
dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgoKCgpf
X2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvbGwgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18K
ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKIyAy
MTEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgi
IDEgMwojIDIxMiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKZXh0ZXJuIGxvbmcgaW50
IF9fc3RydG9sX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK
ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9sIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25f
XwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1
bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgp
OwoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IF9fc3RydG9m
X2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cg
KCk7CgpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2wgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVf
dCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfaW50ZXJuYWwg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0
aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGxv
bmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBfX2dyb3VwKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCmV4
dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7
CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9pbnRlcm5h
bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkg
dGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQg
X19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKIyAyOTQgIi91
c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91YmxlCnN0cnRvZCAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIp
IHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2RfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIs
IDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludApzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgIGludCBf
X2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xfaW50ZXJuYWwgKF9fbnB0ciwgX19l
bmRwdHIsIF9fYmFzZSwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgaW50CnN0
cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3Ry
dG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCmV4dGVybiBf
X2lubGluZSBmbG9hdApzdHJ0b2YgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNo
YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9mX2lu
dGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBkb3Vi
bGUKc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xkX2ludGVybmFsIChf
X25wdHIsIF9fZW5kcHRyLCAwKTsKfQoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBs
b25nIGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewog
IHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7
Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGludApz
dHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0
cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKCl9fZXh0
ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9sbCAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAg
ICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xsX2ludGVybmFsIChf
X25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5s
aW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91bGwgKF9fY29uc3QgY2hhciAqIF9fcmVz
dHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgIGludCBf
X2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19ucHRyLCBf
X2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCmV4dGVybiBfX2lubGluZSBkb3VibGUKYXRvZiAoX19j
b25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9kIChfX25wdHIsIChj
aGFyICoqKSBfX251bGwpOwp9CmV4dGVybiBfX2lubGluZSBpbnQKYXRvaSAoX19jb25zdCBjaGFy
ICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gKGludCkgc3RydG9sIChfX25wdHIsIChjaGFy
ICoqKSBfX251bGwsIDEwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKYXRvbCAoX19jb25z
dCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9sIChfX25wdHIsIChjaGFy
ICoqKSBfX251bGwsIDEwKTsKfQoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcg
bG9uZyBpbnQKYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJu
IHN0cnRvbGwgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwgMTApOwp9CiMgMzg1ICIvdXNyL2lu
Y2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikgdGhyb3cg
KCk7CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu
aCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVk
ZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCmV4
dGVybiAiQyIgewoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAzMSAiL3Vz
ci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIF9fdV9jaGFyIHVfY2hhcjsKdHlw
ZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVfaW50Owp0eXBlZGVmIF9f
dV9sb25nIHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYgX191X3F1YWRf
dCB1X3F1YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBs
b2ZmX3Q7CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKCgoKCgoKdHlwZWRlZiBfX2lubzY0X3Qg
aW5vNjRfdDsKCgoKCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoKCnR5cGVkZWYgX19naWRfdCBn
aWRfdDsKCgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoKCgoKdHlwZWRlZiBfX25saW5rX3Qg
bmxpbmtfdDsKCgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsKCgoKCgp0eXBlZGVmIF9fb2ZmX3Qg
b2ZmX3Q7CgoKCgoKCnR5cGVkZWYgX19vZmY2NF90IG9mZjY0X3Q7CgoKCgp0eXBlZGVmIF9fcGlk
X3QgcGlkX3Q7CgoKCgp0eXBlZGVmIF9faWRfdCBpZF90OwoKCgoKdHlwZWRlZiBfX3NzaXplX3Qg
c3NpemVfdDsKCgoKCnR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5cGVkZWYgX19jYWRkcl90
IGNhZGRyX3Q7CgoKCnR5cGVkZWYgX19rZXlfdCBrZXlfdDsKIyAxMjYgIi91c3IvaW5jbHVkZS9z
eXMvdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDU2ICIvdXNyL2lu
Y2x1ZGUvdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgNTcg
Ii91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCnR5cGVkZWYgX19jbG9ja190IGNsb2NrX3Q7CgoK
CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1
ZGUvdGltZS5oIiAyIDMKCgp0eXBlZGVmIF9fdGltZV90IHRpbWVfdDsKIyA3OSAiL3Vzci9pbmNs
dWRlL3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDgwICIv
dXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgp0eXBlZGVmIF9fY2xvY2tpZF90IGNsb2NraWRfdDsK
IyA5MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz
LmgiIDEgMwojIDkyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgp0eXBlZGVmIF9fdGltZXJf
dCB0aW1lcl90OwojIDEyNyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKdHlwZWRl
ZiBfX3VzZWNvbmRzX3QgdXNlY29uZHNfdDsKCgoKdHlwZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vj
b25kc190OwoKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz
LmgiIDIgMwoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVmIHVuc2ln
bmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMgMTg0ICIv
dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRl
X18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRl
X18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRl
X18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRl
X18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90
IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGlu
dCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYg
dW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykp
KTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVf
XyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19t
b2RlX18gKF9fd29yZF9fKSkpOwojIDIwNiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAyMDcgIi91c3IvaW5jbHVkZS9zeXMvdHlw
ZXMuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMKIyAyNSAiL3Vz
ci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAx
IDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAz
CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVk
ZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEg
MwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMwp0eXBlZGVmIGludCBfX3NpZ19h
dG9taWNfdDsKCgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQgbG9uZyBpbnQgX192
YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSldOwogIH0gX19zaWdz
ZXRfdDsKIyAzNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKCnR5cGVkZWYgX19z
aWdzZXRfdCBzaWdzZXRfdDsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMTA2
ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnN0cnVjdCB0aW1lc3BlYwogIHsKICAgIGxvbmcgaW50
IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZWM7CiAgfTsKIyA0NCAiL3Vzci9pbmNsdWRlL3N5
cy9zZWxlY3QuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiMgNjMg
Ii91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz
LmgiIDEgMwojIDY0ICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDIgMwoKCgpzdHJ1Y3QgdGlt
ZXZhbAogIHsKICAgIF9fdGltZV90IHR2X3NlYzsKICAgIF9fc3VzZWNvbmRzX3QgdHZfdXNlYzsK
ICB9OwojIDQ2ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgoKdHlwZWRlZiBsb25n
IGludCBfX2ZkX21hc2s7CgoKCgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKCgoKICAgIF9fZmRfbWFz
ayBmZHNfYml0c1sxMDI0IC8gKDggKiBzaXplb2YgKF9fZmRfbWFzaykpXTsKCgoKCgogIH0gZmRf
c2V0OwoKCgoKCgp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwojIDg5ICIvdXNyL2luY2x1ZGUv
c3lzL3NlbGVjdC5oIiAzCmV4dGVybiAiQyIgewoKCgoKCgpleHRlcm4gaW50IHNlbGVjdCAoaW50
IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAg
IGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0
ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2
YWwgKl9fcmVzdHJpY3QgX190aW1lb3V0KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHBzZWxl
Y3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCiAgICAgICAgICAg
ICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAgICAgICAgICAg
ICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdCBfX3RpbWVvdXQsCiAgICAgICAgICAgICAg
ICAgICAgY29uc3QgX19zaWdzZXRfdCAqX19yZXN0cmljdCBfX3NpZ21hc2spIHRocm93ICgpOwoK
Cn0KIyAyMTAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1
ZGUvc3lzL3N5c21hY3Jvcy5oIiAxIDMKIyAyMTMgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIg
MiAzCgoKCgp0eXBlZGVmIF9fYmxrc2l6ZV90IGJsa3NpemVfdDsKCgoKCgoKdHlwZWRlZiBfX2Js
a2NudF90IGJsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNibGtjbnRfdCBmc2Jsa2NudF90OwoKCgp0
eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2ZpbGNudF90OwojIDI1MSAiL3Vzci9pbmNsdWRlL3N5cy90
eXBlcy5oIiAzCnR5cGVkZWYgX19ibGtjbnQ2NF90IGJsa2NudDY0X3Q7CnR5cGVkZWYgX19mc2Js
a2NudDY0X3QgZnNibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNmaWxjbnQ2NF90IGZzZmlsY250NjRf
dDsKCgp9CiMgMzkyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKCgpleHRlcm4gbG9u
ZyBpbnQgcmFuZG9tICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZG9tICh1bnNp
Z25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqaW5pdHN0YXRlICh1
bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgX19zdGF0ZWxlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpzZXRzdGF0
ZSAoY2hhciAqX19zdGF0ZWJ1ZikgdGhyb3cgKCk7CgoKCgoKCgpzdHJ1Y3QgcmFuZG9tX2RhdGEK
ICB7CiAgICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAqcnB0cjsKICAgIGludDMyX3QgKnN0
YXRlOwogICAgaW50IHJhbmRfdHlwZTsKICAgIGludCByYW5kX2RlZzsKICAgIGludCByYW5kX3Nl
cDsKICAgIGludDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVybiBpbnQgcmFuZG9tX3IgKHN0cnVj
dCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgaW50
MzJfdCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNyYW5kb21f
ciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgdGhyb3cg
KCk7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpf
X3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0
YXRlbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVz
dHJpY3QgX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzZXRzdGF0ZV9yIChjaGFyICpfX3Jl
c3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9k
YXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHJhbmQgKHZv
aWQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2lnbmVkIGludCBfX3NlZWQpIHRo
cm93ICgpOwoKCgpleHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50ICpfX3NlZWQpIHRocm93
ICgpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJu
IGRvdWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gbG9uZyBp
bnQgbnJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4
dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IGpy
YW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4g
dm9pZCBzcmFuZDQ4IChsb25nIGludCBfX3NlZWR2YWwpIHRocm93ICgpOwpleHRlcm4gdW5zaWdu
ZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10pIHRo
cm93ICgpOwpleHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3
XSkgdGhyb3cgKCk7CgoKCgoKc3RydWN0IGRyYW5kNDhfZGF0YQogIHsKICAgIHVuc2lnbmVkIHNo
b3J0IGludCBfX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19vbGRfeFszXTsKICAgIHVu
c2lnbmVkIHNob3J0IGludCBfX2M7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19pbml0OwogICAg
dW5zaWduZWQgbG9uZyBsb25nIGludCBfX2E7CiAgfTsKCgpleHRlcm4gaW50IGRyYW5kNDhfciAo
c3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg
ZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAg
ICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgbHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVm
ZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQp
IHRocm93ICgpOwpleHRlcm4gaW50IG5yYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1
YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3Ry
aWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3Qg
X19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0
OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBp
bnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGpyYW5kNDhfciAo
dW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAg
ICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
c3JhbmQ0OF9yIChsb25nIGludCBfX3NlZWR2YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVm
ZmVyKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQg
aW50IF9fc2VlZDE2dlszXSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0
YSAqX19idWZmZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNo
b3J0IGludCBfX3BhcmFtWzddLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhf
ZGF0YSAqX19idWZmZXIpIHRocm93ICgpOwojIDUyOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAz
CmV4dGVybiB2b2lkICptYWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCAqY2FsbG9jIChzaXplX3QgX19ubWVtYiwg
c2l6ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykp
OwoKCgoKCmV4dGVybiB2b2lkICpyZWFsbG9jICh2b2lkICpfX3B0ciwgc2l6ZV90IF9fc2l6ZSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lkIGZyZWUg
KHZvaWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2ZyZWUgKHZvaWQgKl9fcHRy
KSB0aHJvdyAoKTsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDEgMwojIDIyICIvdXNy
L2luY2x1ZGUvYWxsb2NhLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMg
MjMgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyNiAiL3Vz
ci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoKCmV4dGVybiB2b2lkICph
bGxvY2EgKHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCgoKCn0KIyA1NDggIi91c3IvaW5jbHVk
ZS9zdGRsaWIuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCAqdmFsbG9jIChzaXplX3QgX19zaXplKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKZXh0ZXJuIGludCBwb3Np
eF9tZW1hbGlnbiAodm9pZCAqKl9fbWVtcHRyLCBzaXplX3QgX19hbGlnbm1lbnQsIHNpemVfdCBf
X3NpemUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKZXh0
ZXJuIHZvaWQgYWJvcnQgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJu
X18pKTsKCgoKZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2b2lkKSkgdGhyb3cg
KCk7CgoKCgpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMs
IHZvaWQgKl9fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZv
aWQgZXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVy
bl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfRXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gY2hhciAqZ2V0ZW52IChfX2Nv
bnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3NlY3VyZV9nZXRl
bnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB1dGVu
diAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgc2V0ZW52IChfX2Nv
bnN0IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLCBpbnQgX19yZXBsYWNlKQog
ICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdW5zZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1l
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkgdGhyb3cgKCk7CiMg
NjI0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rdGVtcCAoY2hhciAq
X190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IG1rc3RlbXAgKGNoYXIgKl9f
dGVtcGxhdGUpIHRocm93ICgpOwojIDY0MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVy
biBpbnQgbWtzdGVtcDY0IChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKIyA2NTEgIi91c3Iv
aW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWtkdGVtcCAoY2hhciAqX190ZW1wbGF0
ZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN5c3RlbSAoX19jb25zdCBjaGFyICpfX2NvbW1h
bmQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqY2Fub25pY2FsaXplX2ZpbGVfbmFtZSAo
X19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwojIDY3MyAiL3Vzci9pbmNsdWRlL3N0ZGxp
Yi5oIiAzCmV4dGVybiBjaGFyICpyZWFscGF0aCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fcmVzb2x2ZWQp
IHRocm93ICgpOwoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChfX2NvbnN0IHZv
aWQgKiwgX19jb25zdCB2b2lkICopOwoKCnR5cGVkZWYgX19jb21wYXJfZm5fdCBjb21wYXJpc29u
X2ZuX3Q7CgoKCgoKZXh0ZXJuIHZvaWQgKmJzZWFyY2ggKF9fY29uc3Qgdm9pZCAqX19rZXksIF9f
Y29uc3Qgdm9pZCAqX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbm1lbWIs
IHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgpleHRlcm4gdm9pZCBx
c29ydCAodm9pZCAqX19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwKICAgICAg
ICAgICAgICAgICAgIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgpleHRlcm4gaW50IGFicyAo
aW50IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbG9u
ZyBpbnQgbGFicyAobG9uZyBpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGxsYWJzIChsb25nIGxv
bmcgaW50IF9feCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK
CgoKCmV4dGVybiBkaXZfdCBkaXYgKGludCBfX251bWVyLCBpbnQgX19kZW5vbSkKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsZGl2X3QgbGRpdiAobG9u
ZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsbGRpdl90IGxsZGl2IChs
b25nIGxvbmcgaW50IF9fbnVtZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxvbmcgbG9uZyBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CiMgNzI5ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmVj
dnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0
LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoK
CgpleHRlcm4gY2hhciAqZmN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpf
X3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19z
aWduKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpnY3Z0IChkb3VibGUgX192YWx1ZSwgaW50
IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqcWVjdnQg
KGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBp
bnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7
CmV4dGVybiBjaGFyICpxZmN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAog
ICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJp
Y3QgX19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFnY3Z0IChsb25nIGRvdWJsZSBfX3Zh
bHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg
ZWN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19k
ZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9f
cmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIHRocm93ICgp
OwpleHRlcm4gaW50IGZjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpf
X3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19z
aWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgc2l6ZV90IF9f
bGVuKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcWVjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwg
aW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0
LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVz
dHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQgcWZjdnRfciAo
bG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGlu
dCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAgICAgICAg
ICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiBpbnQgbWJsZW4gKF9fY29uc3QgY2hhciAqX19zLCBzaXplX3QgX19uKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IG1idG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywK
ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBf
X24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193
Y2hhcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgbWJzdG93Y3MgKHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19wd2NzLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3Qgd2NzdG9tYnMg
KGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoK
CgoKZXh0ZXJuIGludCBycG1hdGNoIChfX2NvbnN0IGNoYXIgKl9fcmVzcG9uc2UpIHRocm93ICgp
OwojIDgwOSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgZ2V0c3Vib3B0IChj
aGFyICoqX19yZXN0cmljdCBfX29wdGlvbnAsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICpf
X2NvbnN0ICpfX3Jlc3RyaWN0IF9fdG9rZW5zLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAq
Kl9fcmVzdHJpY3QgX192YWx1ZXApIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIHNldGtleSAo
X19jb25zdCBjaGFyICpfX2tleSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHBvc2l4X29w
ZW5wdCAoaW50IF9fb2ZsYWcpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBncmFudHB0IChp
bnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5sb2NrcHQgKGludCBfX2ZkKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBjaGFyICpwdHNuYW1lIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgoK
CmV4dGVybiBpbnQgcHRzbmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1
ZmxlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRwdCAodm9pZCkgdGhyb3cgKCk7CgoKCgoK
CmV4dGVybiBpbnQgZ2V0bG9hZGF2ZyAoZG91YmxlIF9fbG9hZGF2Z1tdLCBpbnQgX19uZWxlbSkg
dGhyb3cgKCk7CgoKCgoKfQojIDQyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2NzdGRsaWIuaCIgMiAzCiMgNzMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
Y3N0ZGxpYi5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6ZGl2X3Q7CiAgdXNpbmcgOjps
ZGl2X3Q7CgogIHVzaW5nIDo6YWJvcnQ7CiAgdXNpbmcgOjphYnM7CiAgdXNpbmcgOjphdGV4aXQ7
CiAgdXNpbmcgOjphdG9mOwogIHVzaW5nIDo6YXRvaTsKICB1c2luZyA6OmF0b2w7CiAgdXNpbmcg
Ojpic2VhcmNoOwogIHVzaW5nIDo6Y2FsbG9jOwogIHVzaW5nIDo6ZGl2OwogIHVzaW5nIDo6ZXhp
dDsKICB1c2luZyA6OmZyZWU7CiAgdXNpbmcgOjpnZXRlbnY7CiAgdXNpbmcgOjpsYWJzOwogIHVz
aW5nIDo6bGRpdjsKICB1c2luZyA6Om1hbGxvYzsKICB1c2luZyA6Om1ibGVuOwogIHVzaW5nIDo6
bWJzdG93Y3M7CiAgdXNpbmcgOjptYnRvd2M7CiAgdXNpbmcgOjpxc29ydDsKICB1c2luZyA6OnJh
bmQ7CiAgdXNpbmcgOjpyZWFsbG9jOwogIHVzaW5nIDo6c3JhbmQ7CiAgdXNpbmcgOjpzdHJ0b2Q7
CiAgdXNpbmcgOjpzdHJ0b2w7CiAgdXNpbmcgOjpzdHJ0b3VsOwogIHVzaW5nIDo6c3lzdGVtOwog
IHVzaW5nIDo6d2NzdG9tYnM7CiAgdXNpbmcgOjp3Y3RvbWI7CgogIGlubGluZSBsb25nCiAgYWJz
KGxvbmcgX19pKSB7IHJldHVybiBsYWJzKF9faSk7IH0KCiAgaW5saW5lIGxkaXZfdAogIGRpdihs
b25nIF9faSwgbG9uZyBfX2opIHsgcmV0dXJuIGxkaXYoX19pLCBfX2opOyB9Cn0KIyAxMjUgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAzCm5hbWVzcGFjZSBf
X2dudV9jeHgKewogIHVzaW5nIDo6bGxkaXZfdDsKICB1c2luZyA6Ol9FeGl0OwoKICBpbmxpbmUg
bG9uZyBsb25nCiAgYWJzKGxvbmcgbG9uZyBfX3gpIHsgcmV0dXJuIF9feCA+PSAwID8gX194IDog
LV9feDsgfQoKICBpbmxpbmUgbG9uZyBsb25nCiAgbGxhYnMobG9uZyBsb25nIF9feCkgeyByZXR1
cm4gX194ID49IDAgPyBfX3ggOiAtX194OyB9CgogIGlubGluZSBsbGRpdl90CiAgZGl2KGxvbmcg
bG9uZyBfX24sIGxvbmcgbG9uZyBfX2QpCiAgeyBsbGRpdl90IF9fcTsgX19xLnF1b3QgPSBfX24g
LyBfX2Q7IF9fcS5yZW0gPSBfX24gJSBfX2Q7IHJldHVybiBfX3E7IH0KCiAgaW5saW5lIGxsZGl2
X3QKICBsbGRpdihsb25nIGxvbmcgX19uLCBsb25nIGxvbmcgX19kKQogIHsgbGxkaXZfdCBfX3E7
IF9fcS5xdW90ID0gX19uIC8gX19kOyBfX3EucmVtID0gX19uICUgX19kOyByZXR1cm4gX19xOyB9
CgogIHVzaW5nIDo6YXRvbGw7CiAgdXNpbmcgOjpzdHJ0b2Y7CiAgdXNpbmcgOjpzdHJ0b2xsOwog
IHVzaW5nIDo6c3RydG91bGw7CiAgdXNpbmcgOjpzdHJ0b2xkOwp9CgpuYW1lc3BhY2Ugc3RkCnsK
ICB1c2luZyBfX2dudV9jeHg6OmxsZGl2X3Q7CiAgdXNpbmcgX19nbnVfY3h4OjpfRXhpdDsKICB1
c2luZyBfX2dudV9jeHg6OmFiczsKICB1c2luZyBfX2dudV9jeHg6OmxsYWJzOwogIHVzaW5nIF9f
Z251X2N4eDo6ZGl2OwogIHVzaW5nIF9fZ251X2N4eDo6bGxkaXY7CiAgdXNpbmcgX19nbnVfY3h4
OjphdG9sbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvZjsKICB1c2luZyBfX2dudV9jeHg6OnN0
cnRvbGw7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b3VsbDsKICB1c2luZyBfX2dudV9jeHg6OnN0
cnRvbGQ7Cn0KIyA0NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFz
ZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYu
aCIgMSAzCiMgNDYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2Uu
aCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9uZXciIDEgMwojIDM0ICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL25ldyIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvY3N0ZGRlZiIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvbmV3IiAyIDMK
IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIgMSAzCiMgMzYgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvbmV3IiAyIDMKCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ug
c3RkCnsKICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoK
ICAgIGJhZF9hbGxvYygpIHRocm93KCkgeyB9CiAgICB2aXJ0dWFsIH5iYWRfYWxsb2MoKSB0aHJv
dygpOwogIH07CgogIHN0cnVjdCBub3Rocm93X3QgeyB9OwogIGV4dGVybiBjb25zdCBub3Rocm93
X3Qgbm90aHJvdzsKICB0eXBlZGVmIHZvaWQgKCpuZXdfaGFuZGxlcikoKTsKICBuZXdfaGFuZGxl
ciBzZXRfbmV3X2hhbmRsZXIobmV3X2hhbmRsZXIpOwp9CgoKdm9pZCAqb3BlcmF0b3IgbmV3KHN0
ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lkICpvcGVyYXRvciBuZXdbXShz
dGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCBvcGVyYXRvciBkZWxldGUo
dm9pZCAqKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQgKikgdGhyb3coKTsK
dm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRo
cm93KCk7CnZvaWQgKm9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhy
b3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQgKiwgY29uc3Qgc3RkOjpu
b3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQgKiwgY29uc3Qg
c3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwoKCmlubGluZSB2b2lkICpvcGVyYXRvciBuZXcoc3Rk
OjpzaXplX3QsIHZvaWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9CmlubGluZSB2
b2lkICpvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgdm9pZCAqcGxhY2UpIHRocm93KCkgeyBy
ZXR1cm4gcGxhY2U7IH0KfQojIDQ3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2lvc2Z3ZC5oIiAxIDMKIyA0OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9h
bGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0
ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMgNTAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDEgMwojIDUxICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMSAzCiMgNTIgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgNTMgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsIGNsYXNzIF9U
cD4KaW5saW5lIHZvaWQgX19pdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRl
cjIgX19iLCBfVHAqKQp7CiAgX1RwIF9fdG1wID0gKl9fYTsKICAqX19hID0gKl9fYjsKICAqX19i
ID0gX190bXA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2Fy
ZEl0ZXIyPgppbmxpbmUgdm9pZCBpdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJk
SXRlcjIgX19iKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCgoKICBfX2l0ZXJfc3dhcChfX2EsIF9fYiwgX192YWx1ZV90eXBlKF9f
YSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgdm9pZCBzd2FwKF9UcCYgX19hLCBf
VHAmIF9fYikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwoKICBfVHAgX190bXAgPSBfX2E7CiAgX19hID0gX19iOwogIF9fYiA9IF9f
dG1wOwp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBtaW4o
Y29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgaWYgKF9fYiA8IF9f
YSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5l
IGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikgewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgogIGlmIChfX2EgPCBfX2IpIHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3QgX1Rw
JiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKCiAgaWYgKF9fY29tcChf
X2IsIF9fYSkpIHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBtYXgoY29uc3QgX1RwJiBfX2EsIGNv
bnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKCiAgaWYgKF9fY29tcChfX2EsIF9fYikp
IHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0KIyAxMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh
c3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29w
eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAg
IGlucHV0X2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikKewogIGZvciAoIDsgX19maXJzdCAhPSBf
X2xhc3Q7ICsrX19yZXN1bHQsICsrX19maXJzdCkKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Owog
IHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj
bGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX091dHB1dEl0ZXIKX19j
b3B5KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwK
ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywg
X0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9f
biA+IDA7IC0tX19uKSB7CiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICsrX19maXJzdDsK
ICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4KaW5saW5lIF9UcCoKX19jb3B5X3RyaXZpYWwoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25z
dCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKewogIG1lbW1vdmUoX19yZXN1bHQsIF9fZmly
c3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICByZXR1cm4gX19yZXN1bHQg
KyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh
c3MgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfYXV4MihfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKewogIHJldHVybiBfX2NvcHko
X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0
ZWdvcnkoX19maXJzdCksCiAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGlu
ZSBfT3V0cHV0SXRlciBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQsIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
dWx0LAogICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSwKICAgICAg
ICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CmlubGluZSBfVHAqIF9fY29weV9hdXgyKF9UcCogX19maXJzdCwgX1RwKiBfX2xhc3QsIF9U
cCogX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQp7CiAgcmV0
dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgppbmxpbmUgX1RwKiBfX2NvcHlfYXV4Mihjb25zdCBfVHAqIF9fZmlyc3Qs
IGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
ICBfX3RydWVfdHlwZSkKewogIHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3Qs
IF9fcmVzdWx0KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0
SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X2F1eChfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBl
X3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBf
VHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwg
X1RyaXZpYWwoKSk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9P
dXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIF9PdXRwdXRJdGVyKF9f
Y29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdC5iYXNlKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpKSk7Cn0KCnRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0
ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90
eXBlKQp7CiAgcmV0dXJuIF9fY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX192
YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlw
ZW5hbWUgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfbmkxKF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCnsKICB0eXBlZGVmIHR5cGVu
YW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwog
IHJldHVybiBfX2NvcHlfbmkyKF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpLCBfX3Jlc3Vs
dCwgX19Ob3JtYWwoKSk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l
IF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X25pMShfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKewogIHR5cGVkZWYgdHlwZW5hbWUg
X0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgcmV0
dXJuIF9fY29weV9uaTIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIF9P
dXRwdXRJdGVyIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgoKICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9JbnB1dEl0ZXI+Ojpf
Tm9ybWFsIF9fTm9ybWFsOwogICByZXR1cm4gX19jb3B5X25pMShfX2ZpcnN0LCBfX2xhc3QsIF9f
cmVzdWx0LCBfX05vcm1hbCgpKTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFs
SXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlzdGFu
Y2U+CmlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rp
b25hbEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
X3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j
ZSopCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAqLS1fX3Jlc3VsdCA9ICotLV9f
bGFzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz
SXRlciwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19jb3B5X2JhY2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNl
IF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKQogICAgKi0tX19yZXN1bHQg
PSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAg
IGNsYXNzIF9Cb29sVHlwZT4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaAp7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyMT46Oml0ZXJh
dG9yX2NhdGVnb3J5CiAgICAgICAgICBfQ2F0OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcjE+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9E
aXN0YW5jZTsKCiAgc3RhdGljIF9CaWRpcmVjdGlvbmFsSXRlcjIgY29weShfQmlkaXJlY3Rpb25h
bEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQpIHsKICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmQo
X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0NhdCgpLCAoX0Rpc3RhbmNlKikgMCk7CiAgfQp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxf
VHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBf
X2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogICAgY29uc3QgcHRy
ZGlmZl90IF9OdW0gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgbWVtbW92ZShfX3Jlc3VsdCAtIF9O
dW0sIF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7CiAgICByZXR1cm4gX19yZXN1bHQgLSBf
TnVtOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX2NvcHlfYmFja3dhcmRf
ZGlzcGF0Y2g8Y29uc3QgX1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CnsKICBzdGF0aWMgX1RwKiBj
b3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQp
IHsKICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVl
X3R5cGU+CiAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0JJMSwgY2xhc3MgX0JJMj4KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3
YXJkX2F1eChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KSB7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkky
Pjo6dmFsdWVfdHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgOjpoYXNfdHJpdmlhbF9hc3Np
Z25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2JhY2t3
YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9Ucml2aWFsPgogICAgICAgICAgICAgIDo6Y29weShf
X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5
cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0
ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKSB7
CiAgcmV0dXJuIF9CSTIoX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
dWx0LmJhc2UoKSkpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4K
aW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBf
X2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKXsKICByZXR1cm4gX19j
b3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUg
PHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2Fy
ZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0
LCBfX3RydWVfdHlwZSkgewogIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxf
QkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1dF9u
b3JtYWxfaXRlcmF0b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LCBfX05vcm1hbCgp
KTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkky
IF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkx
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19u
b3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgcmV0dXJuIF9fY29weV9i
YWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFs
KCkpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KaW5saW5lIF9C
STIgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0
KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHR5cGVkZWYgdHlwZW5hbWUgX0lz
X25vcm1hbF9pdGVyYXRvcjxfQkkxPjo6X05vcm1hbCBfX05vcm1hbDsKICByZXR1cm4gX19jb3B5
X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFs
KCkpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNz
IF9PdXRwdXRJdGVyPgpwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPiBfX2NvcHlfbihfSW5w
dXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICBmb3IgKCA7IF9fY291bnQg
PiAwOyAtLV9fY291bnQpIHsKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0
OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0
ZXI+KF9fZmlyc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SQUl0ZXIsIGNsYXNz
IF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X1JBSXRlciwgX091dHB1dEl0
ZXI+Cl9fY29weV9uKF9SQUl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7
CiAgX1JBSXRlciBfX2xhc3QgPSBfX2ZpcnN0ICsgX19jb3VudDsKICByZXR1cm4gcGFpcjxfUkFJ
dGVyLCBfT3V0cHV0SXRlcj4oX19sYXN0LCBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQp
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0
cHV0SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+Cl9fY29weV9uKF9J
bnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsK
ICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAgICAgICAg
ICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgcGFpcjxf
SW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4KY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUg
X19jb3VudCwgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4g
X19jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQpOwp9CgoKCgoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lkIGZpbGwoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAg
Kl9fZmlyc3QgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX091dHB1dEl0ZXIsIGNsYXNz
IF9TaXplLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIGZpbGxfbihfT3V0cHV0SXRlciBfX2ZpcnN0
LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9y
ICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwog
IHJldHVybiBfX2ZpcnN0Owp9CgoKCmlubGluZSB2b2lkIGZpbGwodW5zaWduZWQgY2hhciogX19m
aXJzdCwgdW5zaWduZWQgY2hhciogX19sYXN0LAogICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXImIF9fYykKewogIHVuc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAgbWVtc2V0KF9f
Zmlyc3QsIF9fdG1wLCBfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKaW5saW5lIHZvaWQgZmlsbChzaWdu
ZWQgY2hhciogX19maXJzdCwgc2lnbmVkIGNoYXIqIF9fbGFzdCwKICAgICAgICAgICAgICAgICBj
b25zdCBzaWduZWQgY2hhciYgX19jKQp7CiAgc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAgbWVt
c2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0g
X19maXJzdCk7Cn0KCmlubGluZSB2b2lkIGZpbGwoY2hhciogX19maXJzdCwgY2hhciogX19sYXN0
LCBjb25zdCBjaGFyJiBfX2MpCnsKICBjaGFyIF9fdG1wID0gX19jOwogIG1lbXNldChfX2ZpcnN0
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3QpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1NpemU+CmlubGluZSB1bnNpZ25lZCBjaGFyKiBmaWxsX24odW5z
aWduZWQgY2hhciogX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykKewogIGZpbGwoX19maXJzdCwgX19maXJzdCAr
IF9fbiwgX19jKTsKICByZXR1cm4gX19maXJzdCArIF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9T
aXplPgppbmxpbmUgc2lnbmVkIGNoYXIqIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCnsKICBm
aWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgcmV0dXJuIF9fZmlyc3QgKyBfX247
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4KaW5saW5lIGNoYXIqIGZpbGxfbihjaGFyKiBfX2Zp
cnN0LCBfU2l6ZSBfX24sIGNvbnN0IGNoYXImIF9fYykKewogIGZpbGwoX19maXJzdCwgX19maXJz
dCArIF9fbiwgX19jKTsKICByZXR1cm4gX19maXJzdCArIF9fbjsKfQoKCgoKCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CnBhaXI8X0lucHV0SXRlcjEsIF9J
bnB1dEl0ZXIyPiBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg
JiYgKl9fZmlyc3QxID09ICpfX2ZpcnN0MikgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJz
dDI7CiAgfQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEs
IF9fZmlyc3QyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJ
dGVyMiwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRl
cjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVk
KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm
IF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICArK19fZmlyc3QxOwog
ICAgKytfX2ZpcnN0MjsKICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIy
PihfX2ZpcnN0MSwgX19maXJzdDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNs
YXNzIF9JbnB1dEl0ZXIyPgppbmxpbmUgYm9vbCBlcXVhbChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwg
X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz
dDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBf
X2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCEoKl9fZmlyc3QxID09ICpf
X2ZpcnN0MikpCiAgICAgIHJldHVybiBmYWxzZTsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWRp
Y2F0ZT4KaW5saW5lIGJvb2wgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfQmluYXJ5
UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9yICgg
OyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCFf
X2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgcmV0dXJuIGZhbHNlOwog
IHJldHVybiB0cnVlOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBf
SW5wdXRJdGVyMj4KYm9vbCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2Zp
cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
SW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikKewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmly
c3QyICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgIGlm
ICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKCpfX2Zp
cnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gX19maXJz
dDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBsZXhp
Y29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19s
YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg
X0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFy
ZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBf
X2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19m
aXJzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICByZXR1
cm4gdHJ1ZTsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICByZXR1
cm4gZmFsc2U7CiAgfQogIHJldHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9
IF9fbGFzdDI7Cn0KCmlubGluZSBib29sCmxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IHVu
c2lnbmVkIGNoYXIqIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyKiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg
Y2hhciogX19sYXN0MikKewogIGNvbnN0IHNpemVfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJz
dDE7CiAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBjb25zdCBp
bnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xl
bjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0IDwgMCA6IF9fbGVuMSA8IF9f
bGVuMjsKfQoKaW5saW5lIGJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgY2hhciog
X19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBfX2xhc3QyKQp7Cgog
IHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZSgoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2Zp
cnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFy
KikgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25l
ZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25z
dCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbnQgX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8z
d2F5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVy
MiBfX2xhc3QyKQp7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0g
X19sYXN0MikgewogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgcmV0dXJuIC0x
OwogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIDE7CiAgICArK19f
Zmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpIHsK
ICAgIHJldHVybiAhKF9fZmlyc3QxID09IF9fbGFzdDEpOwogIH0KICBlbHNlIHsKICAgIHJldHVy
biAtMTsKICB9Cn0KCmlubGluZSBpbnQKX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNv
bnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKewogIGNvbnN0IHB0cmRp
ZmZfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CiAgY29uc3QgcHRyZGlmZl90IF9fbGVu
MiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19m
aXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICByZXR1cm4gX19yZXN1bHQg
IT0gMCA/IF9fcmVzdWx0CiAgICAgICAgICAgICAgICAgICAgICAgOiAoX19sZW4xID09IF9fbGVu
MiA/IDAgOiAoX19sZW4xIDwgX19sZW4yID8gLTEgOiAxKSk7Cn0KCmlubGluZSBpbnQKX19sZXhp
Y29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFy
KiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19m
aXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIpCnsKCiAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2Fs
X2NvbXBhcmVfM3dheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2ln
bmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29u
c3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbnQgbGV4aWNvZ3JhcGhpY2Fs
X2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J
bnB1dEl0ZXIyIF9fbGFzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHJl
dHVybiBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX19maXJzdDEsIF9fbGFzdDEsIF9f
Zmlyc3QyLCBfX2xhc3QyKTsKfQoKfQojIDIxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX21lbW9yeS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX2FsbG9jLmgiIDEgMwojIDI4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2FsbG9jLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNl
cHQuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2Vw
dC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9leGNlcHRpb25fZGVmaW5lcy5o
IiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0Lmgi
IDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9p
ZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJv
d19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgog
IHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf
X3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19p
bnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0
aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2Uo
Y29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBj
aGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3Mp
OwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2
b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQK
ICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyAyOSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDEgMwojIDMxICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfY3N0cmluZy5oIiAxIDMKIyAzMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2Nhc3NlcnQuaCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfY2Fzc2VydC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMKIyAzNiAi
L3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEg
MwojIDM3ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDIgMwojIDY1ICIvdXNyL2luY2x1ZGUvYXNz
ZXJ0LmgiIDMKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfZmFpbCAoX19jb25z
dCBjaGFyICpfX2Fzc2VydGlvbiwgX19jb25zdCBjaGFyICpfX2ZpbGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsIF9fY29uc3QgY2hhciAqX19mdW5jdGlv
bikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKZXh0ZXJu
IHZvaWQgX19hc3NlcnRfcGVycm9yX2ZhaWwgKGludCBfX2Vycm51bSwgX19jb25zdCBjaGFyICpf
X2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19s
aW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2Z1
bmN0aW9uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoK
CmV4dGVybiB2b2lkIF9fYXNzZXJ0IChjb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgY29uc3QgY2hh
ciAqX19maWxlLCBpbnQgX19saW5lKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25v
cmV0dXJuX18pKTsKCgp9CiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
Y2Fzc2VydC5oIiAyIDMKIyAzMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9h
bGxvYy5oIiAyIDMKCgoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
dGhyZWFkcy5oIiAxIDMKIyAzMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90
aHJlYWRzLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgt
Z251L2JpdHMvZ3Roci5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF90aHJlYWRzLmgiIDIgMwojIDUxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX3RocmVhZHMuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKIyA2NiAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMKc3RydWN0IF9SZWZjb3VudF9CYXNlCnsKCgoK
CiAgdHlwZWRlZiBzaXplX3QgX1JDX3Q7CgoKCiAgIHZvbGF0aWxlIF9SQ190IF9NX3JlZl9jb3Vu
dDsKCgoKCiAgX19ndGhyZWFkX211dGV4X3QgX01fcmVmX2NvdW50X2xvY2s7CiAgX1JlZmNvdW50
X0Jhc2UoX1JDX3QgX19uKSA6IF9NX3JlZl9jb3VudChfX24pCiAgICB7CgogICAgICBfX2d0aHJl
YWRfbXV0ZXhfdCBfX3RtcCA9IDA7CiAgICAgIF9NX3JlZl9jb3VudF9sb2NrID0gX190bXA7CgoK
CgoKICAgIH0KIyAxMTIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFk
cy5oIiAzCiAgdm9pZCBfTV9pbmNyKCkgewogICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX3Jl
Zl9jb3VudF9sb2NrKTsKICAgICsrX01fcmVmX2NvdW50OwogICAgX19ndGhyZWFkX211dGV4X3Vu
bG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogIH0KICBfUkNfdCBfTV9kZWNyKCkgewogICAgX19n
dGhyZWFkX211dGV4X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgIHZvbGF0aWxlIF9SQ190
IF9fdG1wID0gLS1fTV9yZWZfY291bnQ7CiAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9y
ZWZfY291bnRfbG9jayk7CiAgICByZXR1cm4gX190bXA7CiAgfQojIDE2MyAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMKfTsKIyAyODQgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCnRlbXBsYXRlIDxpbnQgX19pbnN0
PgpzdHJ1Y3QgX1NUTF9tdXRleF9zcGluIHsKICBlbnVtIHsgX19sb3dfbWF4ID0gMzAsIF9faGln
aF9tYXggPSAxMDAwIH07CgoKICBzdGF0aWMgdW5zaWduZWQgX19tYXg7CiAgc3RhdGljIHVuc2ln
bmVkIF9fbGFzdDsKfTsKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp1bnNpZ25lZCBfU1RMX211dGV4
X3NwaW48X19pbnN0Pjo6X19tYXggPSBfU1RMX211dGV4X3NwaW48X19pbnN0Pjo6X19sb3dfbWF4
OwoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnVuc2lnbmVkIF9TVExfbXV0ZXhfc3BpbjxfX2luc3Q+
OjpfX2xhc3QgPSAwOwojIDMxMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90
aHJlYWRzLmgiIDMKc3RydWN0IF9TVExfbXV0ZXhfbG9jawp7CgoKCgoKCgogIF9fZ3RocmVhZF9t
dXRleF90IF9NX2xvY2s7CiAgdm9pZCBfTV9pbml0aWFsaXplKCkgewojIDM0MiAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICB9CiAgdm9pZCBfTV9hY3F1
aXJlX2xvY2soKSB7CgoKCiAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fbG9jayk7CiAgfQog
IHZvaWQgX01fcmVsZWFzZV9sb2NrKCkgewoKCgogICAgX19ndGhyZWFkX211dGV4X3VubG9jaygm
X01fbG9jayk7CiAgfQojIDQ1MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90
aHJlYWRzLmgiIDMKfTsKIyA0OTIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
dGhyZWFkcy5oIiAzCnN0cnVjdCBfU1RMX2F1dG9fbG9jawp7CiAgX1NUTF9tdXRleF9sb2NrJiBf
TV9sb2NrOwoKICBfU1RMX2F1dG9fbG9jayhfU1RMX211dGV4X2xvY2smIF9fbG9jaykgOiBfTV9s
b2NrKF9fbG9jaykKICAgIHsgX01fbG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQogIH5fU1RMX2F1
dG9fbG9jaygpIHsgX01fbG9jay5fTV9yZWxlYXNlX2xvY2soKTsgfQoKcHJpdmF0ZToKICB2b2lk
IG9wZXJhdG9yPShjb25zdCBfU1RMX2F1dG9fbG9jayYpOwogIF9TVExfYXV0b19sb2NrKGNvbnN0
IF9TVExfYXV0b19sb2NrJik7Cn07Cgp9CiMgMzkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgNjggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfYWxsb2MuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUgPGludCBfX2luc3Q+
CmNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlIHsKCnByaXZhdGU6CgogIHN0YXRpYyB2b2lk
KiBfU19vb21fbWFsbG9jKHNpemVfdCk7CiAgc3RhdGljIHZvaWQqIF9TX29vbV9yZWFsbG9jKHZv
aWQqLCBzaXplX3QpOwogIHN0YXRpYyB2b2lkICgqIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVy
KSgpOwoKcHVibGljOgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAg
ICB2b2lkKiBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgaWYgKDAgPT0gX19yZXN1bHQpIF9f
cmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24pOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KCiAg
c3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCApCiAgewogICAgZnJlZShf
X3ApOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgLCBz
aXplX3QgX19uZXdfc3opCiAgewogICAgdm9pZCogX19yZXN1bHQgPSByZWFsbG9jKF9fcCwgX19u
ZXdfc3opOwogICAgaWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX3JlYWxsb2Mo
X19wLCBfX25ld19zeik7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBzdGF0aWMgdm9pZCAo
KiBfX3NldF9tYWxsb2NfaGFuZGxlcih2b2lkICgqX19mKSgpKSkoKQogIHsKICAgIHZvaWQgKCog
X19vbGQpKCkgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgIF9fbWFsbG9jX2FsbG9j
X29vbV9oYW5kbGVyID0gX19mOwogICAgcmV0dXJuKF9fb2xkKTsKICB9Cgp9OwoKCgp0ZW1wbGF0
ZSA8aW50IF9faW5zdD4Kdm9pZCAoKiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+Ojpf
X21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7Cgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4K
dm9pZCoKX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX21hbGxvYyhzaXpl
X3QgX19uKQp7CiAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICB2b2lkKiBf
X3Jlc3VsdDsKCiAgICBmb3IgKDs7KSB7CiAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9f
bWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hh
bmRsZXIpIHsgc3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOyB9CiAgICAgICAgKCpfX215X21hbGxv
Y19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAgaWYg
KF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQpOwogICAgfQp9Cgp0ZW1wbGF0ZSA8aW50IF9faW5z
dD4Kdm9pZCogX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX3JlYWxsb2Mo
dm9pZCogX19wLCBzaXplX3QgX19uKQp7CiAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIp
KCk7CiAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICBmb3IgKDs7KSB7CiAgICAgICAgX19teV9tYWxs
b2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgIGlmICgwID09
IF9fbXlfbWFsbG9jX2hhbmRsZXIpIHsgc3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOyB9CiAgICAg
ICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVzdWx0ID0gcmVhbGxvYyhf
X3AsIF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQpOwogICAgfQp9
Cgp0eXBlZGVmIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPDA+IG1hbGxvY19hbGxvYzsKCnRlbXBs
YXRlPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBzaW1wbGVfYWxsb2MgewoKcHVibGlj
OgogICAgc3RhdGljIF9UcCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gMCA9
PSBfX24gPyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mIChfVHApKTsg
fQogICAgc3RhdGljIF9UcCogYWxsb2NhdGUodm9pZCkKICAgICAgeyByZXR1cm4gKF9UcCopIF9B
bGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0
ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgICAgeyBpZiAoMCAhPSBfX24pIF9BbGxvYzo6ZGVh
bGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KICAgIHN0YXRpYyB2b2lkIGRlYWxs
b2NhdGUoX1RwKiBfX3ApCiAgICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9mIChf
VHApKTsgfQp9OwoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBkZWJ1Z19hbGxv
YyB7Cgpwcml2YXRlOgoKICBlbnVtIHtfU19leHRyYSA9IDh9OwoKCgpwdWJsaWM6CgogIHN0YXRp
YyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNo
YXIqKV9BbGxvYzo6YWxsb2NhdGUoX19uICsgKGludCkgX1NfZXh0cmEpOwogICAgKihzaXplX3Qq
KV9fcmVzdWx0ID0gX19uOwogICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAg
fQoKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICB7CiAg
ICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19leHRyYTsKICAgIChzdGF0
aWNfY2FzdDx2b2lkPiAoKCooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24pID8gMCA6IChfX2Fzc2Vy
dF9mYWlsICgiKihzaXplX3QqKV9fcmVhbF9wID09IF9fbiIsICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiLCAxOTAsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkp
OwogICAgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcmVhbF9wLCBfX24gKyAoaW50KSBfU19leHRyYSk7
CiAgfQoKICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9z
eiwgc2l6ZV90IF9fbmV3X3N6KQogIHsKICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAt
IChpbnQpIF9TX2V4dHJhOwogICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoKihzaXplX3QqKV9fcmVh
bF9wID09IF9fb2xkX3N6KSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiooc2l6ZV90KilfX3JlYWxf
cCA9PSBfX29sZF9zeiIsICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9j
LmgiLCAxOTcsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgY2hhciogX19yZXN1bHQg
PSAoY2hhciopCiAgICAgIF9BbGxvYzo6cmVhbGxvY2F0ZShfX3JlYWxfcCwgX19vbGRfc3ogKyAo
aW50KSBfU19leHRyYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19z
eiArIChpbnQpIF9TX2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbmV3X3N6Owog
ICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAgfQoKfTsKIyAyNDEgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8Ym9vbCB0
aHJlYWRzLCBpbnQgaW5zdD4KY2xhc3MgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlIHsKCnByaXZh
dGU6CgoKICBlbnVtIHtfQUxJR04gPSA4fTsKICBlbnVtIHtfTUFYX0JZVEVTID0gMTI4fTsKICBl
bnVtIHtfTkZSRUVMSVNUUyA9IDE2fTsKICBzdGF0aWMgc2l6ZV90CiAgX1Nfcm91bmRfdXAoc2l6
ZV90IF9fYnl0ZXMpCiAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3QpIF9BTElHTi0x
KSAmIH4oKHNpemVfdCkgX0FMSUdOIC0gMSkpOyB9CgogIHVuaW9uIF9PYmogewogICAgICAgIHVu
aW9uIF9PYmoqIF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgIGNoYXIgX01fY2xpZW50X2RhdGFb
MV07CiAgfTsKCiAgc3RhdGljIF9PYmoqIHZvbGF0aWxlIF9TX2ZyZWVfbGlzdFtdOwoKICBzdGF0
aWMgc2l6ZV90IF9TX2ZyZWVsaXN0X2luZGV4KHNpemVfdCBfX2J5dGVzKSB7CiAgICAgICAgcmV0
dXJuICgoKF9fYnl0ZXMpICsgKHNpemVfdClfQUxJR04tMSkvKHNpemVfdClfQUxJR04gLSAxKTsK
ICB9CgoKICBzdGF0aWMgdm9pZCogX1NfcmVmaWxsKHNpemVfdCBfX24pOwoKCiAgc3RhdGljIGNo
YXIqIF9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsIGludCYgX19ub2Jqcyk7CgoKICBzdGF0
aWMgY2hhciogX1Nfc3RhcnRfZnJlZTsKICBzdGF0aWMgY2hhciogX1NfZW5kX2ZyZWU7CiAgc3Rh
dGljIHNpemVfdCBfU19oZWFwX3NpemU7CgoKICAgIHN0YXRpYyBfU1RMX211dGV4X2xvY2sgX1Nf
bm9kZV9hbGxvY2F0b3JfbG9jazsKCgoKCgogICAgY2xhc3MgX0xvY2s7CiAgICBmcmllbmQgY2xh
c3MgX0xvY2s7CiAgICBjbGFzcyBfTG9jayB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICBf
TG9jaygpIHsgeyBpZiAodGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9hY3F1aXJl
X2xvY2soKTsgfTsgfQogICAgICAgICAgICB+X0xvY2soKSB7IHsgaWYgKHRocmVhZHMpIF9TX25v
ZGVfYWxsb2NhdG9yX2xvY2suX01fcmVsZWFzZV9sb2NrKCk7IH07IH0KICAgIH07CgpwdWJsaWM6
CgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAgICB2b2lkKiBfX3Jl
dCA9IDA7CgogICAgaWYgKF9fbiA+IChzaXplX3QpIF9NQVhfQllURVMpIHsKICAgICAgX19yZXQg
PSBtYWxsb2NfYWxsb2M6OmFsbG9jYXRlKF9fbik7CiAgICB9CiAgICBlbHNlIHsKICAgICAgX09i
aiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0CiAgICAgICAgICA9IF9TX2ZyZWVfbGlzdCArIF9T
X2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKCgoKICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwoK
ICAgICAgX09iaiogX19yZXN1bHQgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgIGlmIChfX3Jlc3Vs
dCA9PSAwKQogICAgICAgIF9fcmV0ID0gX1NfcmVmaWxsKF9TX3JvdW5kX3VwKF9fbikpOwogICAg
ICBlbHNlIHsKICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3Jlc3VsdCAtPiBfTV9mcmVlX2xp
c3RfbGluazsKICAgICAgICBfX3JldCA9IF9fcmVzdWx0OwogICAgICB9CiAgICB9CgogICAgcmV0
dXJuIF9fcmV0OwogIH07CgoKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6
ZV90IF9fbikKICB7CiAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykKICAgICAgbWFs
bG9jX2FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uKTsKICAgIGVsc2UgewogICAgICBfT2JqKiB2
b2xhdGlsZSogX19teV9mcmVlX2xpc3QKICAgICAgICAgID0gX1NfZnJlZV9saXN0ICsgX1NfZnJl
ZWxpc3RfaW5kZXgoX19uKTsKICAgICAgX09iaiogX19xID0gKF9PYmoqKV9fcDsKCgoKCiAgICAg
IF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKCiAgICAgIF9fcSAtPiBfTV9mcmVlX2xpc3RfbGluayA9
ICpfX215X2ZyZWVfbGlzdDsKICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19xOwoKICAgIH0KICB9
CgogIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBz
aXplX3QgX19uZXdfc3opOwoKfSA7Cgp0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0
cnVlLCAwPiBhbGxvYzsKdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8ZmFsc2UsIDA+
IHNpbmdsZV9jbGllbnRfYWxsb2M7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2lu
c3Q+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl
PF9fdGhyZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWZh
dWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCnsKICByZXR1cm4gdHJ1ZTsK
fQoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4m
LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxf
X3RocmVhZHMsIF9faW5zdD4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9CgoKCgoKCgp0ZW1wbGF0ZSA8
Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0
ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCYgX19ub2JqcykKewogICAgY2hhciogX19yZXN1bHQ7CiAgICBzaXplX3QgX190b3RhbF9ieXRl
cyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICBzaXplX3QgX19ieXRlc19sZWZ0ID0gX1NfZW5kX2Zy
ZWUgLSBfU19zdGFydF9mcmVlOwoKICAgIGlmIChfX2J5dGVzX2xlZnQgPj0gX190b3RhbF9ieXRl
cykgewogICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICBfU19zdGFydF9m
cmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0gZWxz
ZSBpZiAoX19ieXRlc19sZWZ0ID49IF9fc2l6ZSkgewogICAgICAgIF9fbm9ianMgPSAoaW50KShf
X2J5dGVzX2xlZnQvX19zaXplKTsKICAgICAgICBfX3RvdGFsX2J5dGVzID0gX19zaXplICogX19u
b2JqczsKICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgX1Nfc3RhcnRf
ZnJlZSArPSBfX3RvdGFsX2J5dGVzOwogICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICB9IGVs
c2UgewogICAgICAgIHNpemVfdCBfX2J5dGVzX3RvX2dldCA9CiAgICAgICAgICAyICogX190b3Rh
bF9ieXRlcyArIF9TX3JvdW5kX3VwKF9TX2hlYXBfc2l6ZSA+PiA0KTsKCiAgICAgICAgaWYgKF9f
Ynl0ZXNfbGVmdCA+IDApIHsKICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9s
aXN0ID0KICAgICAgICAgICAgICAgICAgICAgICAgX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3Rf
aW5kZXgoX19ieXRlc19sZWZ0KTsKCiAgICAgICAgICAgICgoX09iaiopX1Nfc3RhcnRfZnJlZSkg
LT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICpfX215
X2ZyZWVfbGlzdCA9IChfT2JqKilfU19zdGFydF9mcmVlOwogICAgICAgIH0KICAgICAgICBfU19z
dGFydF9mcmVlID0gKGNoYXIqKW1hbGxvYyhfX2J5dGVzX3RvX2dldCk7CiAgICAgICAgaWYgKDAg
PT0gX1Nfc3RhcnRfZnJlZSkgewogICAgICAgICAgICBzaXplX3QgX19pOwogICAgICAgICAgICBf
T2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgIF9PYmoqIF9fcDsKCgoK
ICAgICAgICAgICAgZm9yIChfX2kgPSBfX3NpemU7CiAgICAgICAgICAgICAgICAgX19pIDw9IChz
aXplX3QpIF9NQVhfQllURVM7CiAgICAgICAgICAgICAgICAgX19pICs9IChzaXplX3QpIF9BTElH
TikgewogICAgICAgICAgICAgICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19m
cmVlbGlzdF9pbmRleChfX2kpOwogICAgICAgICAgICAgICAgX19wID0gKl9fbXlfZnJlZV9saXN0
OwogICAgICAgICAgICAgICAgaWYgKDAgIT0gX19wKSB7CiAgICAgICAgICAgICAgICAgICAgKl9f
bXlfZnJlZV9saXN0ID0gX19wIC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgICAgICAgICAg
ICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopX19wOwogICAgICAgICAgICAgICAgICAgIF9TX2Vu
ZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9faTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4o
X1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CgoKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgfQogICAgICAgICAgICBfU19lbmRfZnJlZSA9IDA7CiAgICAgICAgICAgIF9TX3N0
YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jX2FsbG9jOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7
CgoKCiAgICAgICAgfQogICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVzX3RvX2dldDsKICAg
ICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2J5dGVzX3RvX2dldDsKICAgICAg
ICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CiAgICB9Cn0KCgoKCgp0
ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnZvaWQqCl9fZGVmYXVsdF9hbGxv
Y190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3JlZmlsbChzaXplX3QgX19uKQp7CiAg
ICBpbnQgX19ub2JqcyA9IDIwOwogICAgY2hhciogX19jaHVuayA9IF9TX2NodW5rX2FsbG9jKF9f
biwgX19ub2Jqcyk7CiAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICBfT2Jq
KiBfX3Jlc3VsdDsKICAgIF9PYmoqIF9fY3VycmVudF9vYmo7CiAgICBfT2JqKiBfX25leHRfb2Jq
OwogICAgaW50IF9faTsKCiAgICBpZiAoMSA9PSBfX25vYmpzKSByZXR1cm4oX19jaHVuayk7CiAg
ICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7
CgoKICAgICAgX19yZXN1bHQgPSAoX09iaiopX19jaHVuazsKICAgICAgKl9fbXlfZnJlZV9saXN0
ID0gX19uZXh0X29iaiA9IChfT2JqKikoX19jaHVuayArIF9fbik7CiAgICAgIGZvciAoX19pID0g
MTsgOyBfX2krKykgewogICAgICAgIF9fY3VycmVudF9vYmogPSBfX25leHRfb2JqOwogICAgICAg
IF9fbmV4dF9vYmogPSAoX09iaiopKChjaGFyKilfX25leHRfb2JqICsgX19uKTsKICAgICAgICBp
ZiAoX19ub2JqcyAtIDEgPT0gX19pKSB7CiAgICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01f
ZnJlZV9saXN0X2xpbmsgPSAwOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gX19uZXh0X29i
ajsKICAgICAgICB9CiAgICAgIH0KICAgIHJldHVybihfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxi
b29sIHRocmVhZHMsIGludCBpbnN0Pgp2b2lkKgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dGhy
ZWFkcywgaW5zdD46OnJlYWxsb2NhdGUodm9pZCogX19wLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fb2xkX3N6LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbmV3X3N6
KQp7CiAgICB2b2lkKiBfX3Jlc3VsdDsKICAgIHNpemVfdCBfX2NvcHlfc3o7CgogICAgaWYgKF9f
b2xkX3N6ID4gKHNpemVfdCkgX01BWF9CWVRFUyAmJiBfX25ld19zeiA+IChzaXplX3QpIF9NQVhf
QllURVMpIHsKICAgICAgICByZXR1cm4ocmVhbGxvYyhfX3AsIF9fbmV3X3N6KSk7CiAgICB9CiAg
ICBpZiAoX1Nfcm91bmRfdXAoX19vbGRfc3opID09IF9TX3JvdW5kX3VwKF9fbmV3X3N6KSkgcmV0
dXJuKF9fcCk7CiAgICBfX3Jlc3VsdCA9IGFsbG9jYXRlKF9fbmV3X3N6KTsKICAgIF9fY29weV9z
eiA9IF9fbmV3X3N6ID4gX19vbGRfc3o/IF9fb2xkX3N6IDogX19uZXdfc3o7CiAgICBtZW1jcHko
X19yZXN1bHQsIF9fcCwgX19jb3B5X3N6KTsKICAgIGRlYWxsb2NhdGUoX19wLCBfX29sZF9zeik7
CiAgICByZXR1cm4oX19yZXN1bHQpOwp9CgoKICAgIHRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywg
aW50IF9faW5zdD4KICAgIF9TVExfbXV0ZXhfbG9jawogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBs
YXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nfbm9kZV9hbGxvY2F0b3JfbG9jawogICAgICAgID0g
eyAwIH07CgoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KY2hhciogX19k
ZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nfc3RhcnRfZnJlZSA9
IDA7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqIF9fZGVmYXVs
dF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2VuZF9mcmVlID0gMDsKCnRl
bXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kc2l6ZV90IF9fZGVmYXVsdF9hbGxv
Y190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2hlYXBfc2l6ZSA9IDA7Cgp0ZW1wbGF0
ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnR5cGVuYW1lIF9fZGVmYXVsdF9hbGxvY190
ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9PYmoqIHZvbGF0aWxlCl9fZGVmYXVsdF9hbGxv
Y190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gOjpfU19mcmVlX2xpc3RbCiAgICBfX2RlZmF1
bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfTkZSRUVMSVNUUwpdID0gezAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIH07CiMgNTI2ICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUgPGNs
YXNzIF9UcD4KY2xhc3MgYWxsb2NhdG9yIHsKICB0eXBlZGVmIGFsbG9jIF9BbGxvYzsKcHVibGlj
OgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJl
bmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNv
bnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9U
cCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRl
IDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+
IG90aGVyOwogIH07CgogIGFsbG9jYXRvcigpIHRocm93KCkge30KICBhbGxvY2F0b3IoY29uc3Qg
YWxsb2NhdG9yJikgdGhyb3coKSB7fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhbGxvY2F0b3Io
Y29uc3QgYWxsb2NhdG9yPF9UcDE+JikgdGhyb3coKSB7fQogIH5hbGxvY2F0b3IoKSB0aHJvdygp
IHt9CgogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194
OyB9CiAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsg
cmV0dXJuICZfX3g7IH0KCgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZv
aWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwID8gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9j
OjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAgICAgICAgICAgICAgOiAwOwog
IH0KCgogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsg
X0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlw
ZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXpl
b2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3Zh
bCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7
IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZTw+CmNsYXNzIGFsbG9jYXRvcjx2b2lkPiB7CnB1
YmxpYzoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlm
ZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZv
aWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRl
IDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+
IG90aGVyOwogIH07Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9U
Mj4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4K
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9j
YXRvcjxfVDI+JikKewogIHJldHVybiBmYWxzZTsKfQojIDYwMiAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
bGxvYz4Kc3RydWN0IF9fYWxsb2NhdG9yIHsKICBfQWxsb2MgX191bmRlcmx5aW5nX2FsbG9jOwoK
ICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5j
ZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25z
dF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAm
IGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8
Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEs
IF9BbGxvYz4gb3RoZXI7CiAgfTsKCiAgX19hbGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgX19hbGxv
Y2F0b3IoY29uc3QgX19hbGxvY2F0b3ImIF9fYSkgdGhyb3coKQogICAgOiBfX3VuZGVybHlpbmdf
YWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4K
ICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+JiBfX2EpIHRocm93
KCkKICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CiAg
fl9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9f
eCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9y
ZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgoKICBfVHAqIGFsbG9jYXRlKHNp
emVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwCiAgICAg
ICAgPyBzdGF0aWNfY2FzdDxfVHAqPihfX3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19uICog
c2l6ZW9mKF9UcCkpKQogICAgICAgIDogMDsKICB9CgoKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRl
ciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICB7IF9fdW5kZXJseWluZ19hbGxvYy5kZWFsbG9jYXRl
KF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0
IHRocm93KCkKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lk
IGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAo
X192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBfX2FsbG9jYXRvcjx2b2lkLCBfQWxsb2M+
IHsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVy
ZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQq
IGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxj
bGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwg
X0FsbG9jPiBvdGhlcjsKICB9Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j
PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYg
X19hMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxv
Yz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxsb2MgPT0gX19hMi5fX3Vu
ZGVybHlpbmdfYWxsb2M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEs
CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBf
X2EyKQp7CiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9jICE9IF9fYTIuX191bmRlcmx5
aW5nX2FsbG9jOwp9CgoKCgoKdGVtcGxhdGUgPGludCBpbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JiwKICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0PiYpCnsKICByZXR1cm4g
dHJ1ZTsKfQoKdGVtcGxhdGUgPGludCBfX2luc3Q+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29u
c3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiYpCnsKICByZXR1cm4gZmFs
c2U7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29u
c3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVi
dWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9B
bGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JiwK
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJl
dHVybiBmYWxzZTsKfQojIDczMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9h
bGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CnN0cnVjdCBf
QWxsb2NfdHJhaXRzCnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSBmYWxz
ZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6OnRlbXBsYXRlIHJlYmluZDxfVHA+Ojpv
dGhlciBhbGxvY2F0b3JfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv
Y2F0b3I+CmNvbnN0IGJvb2wgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjpfU19pbnN0
YW5jZWxlc3M7CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CnN0cnVjdCBfQWxs
b2NfdHJhaXRzPF9UcCwgYWxsb2NhdG9yPF9UcDE+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9T
X2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBhbGxvYz4g
X0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwPiBhbGxvY2F0b3JfdHlwZTsKfTsK
CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8
X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4KewogIHN0YXRpYyBjb25zdCBi
b29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBf
X21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBf
X2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0
b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBib29sIF9fdGhyZWFkcywgaW50IF9f
aW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8
X190aHJlYWRzLCBfX2luc3Q+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVz
cyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVt
cGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVk
ZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBf
X2luc3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBkZWJ1Z19hbGxvYzxf
QWxsb2M+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAg
dHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5
cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxv
Y2F0b3JfdHlwZTsKfTsKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGludCBf
X2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAgICAgICAgICAgICAgICAgICAgX19h
bGxvY2F0b3I8X1RwMSwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+ID4KewogIHN0
YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVf
YWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7
CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5z
dD4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAx
LCBib29sIF9fdGhyLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsCiAgICAg
ICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLCBfX2luc3Q+ID4gPgp7
CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNp
bXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocixfX2luc3Q+ID4K
ICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1
bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBhbGxvY2F0b3JfdHlw
ZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBjbGFzcyBfQWxsb2M+CnN0
cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxvY2F0b3I8X1RwMSwgZGVidWdfYWxsb2M8X0Fs
bG9jPiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAg
dHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5
cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxv
Y2F0b3JfdHlwZTsKfTsKCn0KIyAyMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9tZW1vcnkuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9j
b25zdHJ1Y3QuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
Y29uc3RydWN0LmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL25ldyIgMSAzCiMg
MzUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0LmgiIDIgMwoK
bmFtZXNwYWNlIHN0ZAp7CiMgNDcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
Y29uc3RydWN0LmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgdm9p
ZCBfQ29uc3RydWN0KF9UMSogX19wLCBjb25zdCBfVDImIF9fdmFsdWUpIHsKbmV3ICgodm9pZCop
IF9fcCkgX1QxKF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxPgppbmxpbmUgdm9pZCBf
Q29uc3RydWN0KF9UMSogX19wKSB7CiAgbmV3ICgodm9pZCopIF9fcCkgX1QxKCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CmlubGluZSB2b2lkIF9EZXN0cm95KF9UcCogX19wb2ludGVyKSB7CiAg
X19wb2ludGVyLT5+X1RwKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgp2
b2lkCl9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJh
dG9yIF9fbGFzdCwgX19mYWxzZV90eXBlKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg
KytfX2ZpcnN0KQogICAgZGVzdHJveSgmKl9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9y
LCBfRm9yd2FyZEl0ZXJhdG9yLCBfX3RydWVfdHlwZSkge30KCnRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fZGVzdHJveShfRm9yd2FyZEl0
ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfVHAqKQp7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2Rlc3RydWN0b3IKICAg
ICAgICAgIF9Ucml2aWFsX2Rlc3RydWN0b3I7CiAgX19kZXN0cm95X2F1eChfX2ZpcnN0LCBfX2xh
c3QsIF9Ucml2aWFsX2Rlc3RydWN0b3IoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXJhdG9yPgppbmxpbmUgdm9pZCBfRGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9G
b3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CiAgX19kZXN0cm95KF9fZmlyc3QsIF9fbGFzdCwgX192
YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKaW5saW5lIHZvaWQgX0Rlc3Ryb3koY2hhciosIGNoYXIq
KSB7fQppbmxpbmUgdm9pZCBfRGVzdHJveShpbnQqLCBpbnQqKSB7fQppbmxpbmUgdm9pZCBfRGVz
dHJveShsb25nKiwgbG9uZyopIHt9CmlubGluZSB2b2lkIF9EZXN0cm95KGZsb2F0KiwgZmxvYXQq
KSB7fQppbmxpbmUgdm9pZCBfRGVzdHJveShkb3VibGUqLCBkb3VibGUqKSB7fQppbmxpbmUgdm9p
ZCBfRGVzdHJveSh3Y2hhcl90Kiwgd2NoYXJfdCopIHt9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Qx
LCBjbGFzcyBfVDI+CmlubGluZSB2b2lkIGNvbnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBf
X3ZhbHVlKSB7CiAgX0NvbnN0cnVjdChfX3AsIF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1QxPgppbmxpbmUgdm9pZCBjb25zdHJ1Y3QoX1QxKiBfX3ApIHsKICBfQ29uc3RydWN0KF9fcCk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSB2b2lkIGRlc3Ryb3koX1RwKiBfX3BvaW50
ZXIpIHsKICBfRGVzdHJveShfX3BvaW50ZXIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyYXRvcj4KaW5saW5lIHZvaWQgZGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9G
b3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CiAgX0Rlc3Ryb3koX19maXJzdCwgX19sYXN0KTsKfQoK
fQojIDIzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAyIDMK
IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlw
ZXMuaCIgMSAzCiMgMjQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5
LmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGVtcGJ1Zi5o
IiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90ZW1wYnVmLmgi
IDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpwYWlyPF9UcCosIHB0cmRp
ZmZfdD4KX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCopCnsKICBp
ZiAoX19sZW4gPiBwdHJkaWZmX3QoMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApKSkKICAgIF9fbGVu
ID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApOwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBf
VHAqIF9fdG1wID0gKF9UcCopIG1hbGxvYygoc2l6ZV90KV9fbGVuICogc2l6ZW9mKF9UcCkpOwog
ICAgaWYgKF9fdG1wICE9IDApCiAgICAgIHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oX190
bXAsIF9fbGVuKTsKICAgIF9fbGVuIC89IDI7CiAgfQoKICByZXR1cm4gcGFpcjxfVHAqLCBwdHJk
aWZmX3Q+KChfVHAqKTAsIDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgcGFpcjxf
VHAqLCBwdHJkaWZmX3Q+IGdldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbikgewog
IHJldHVybiBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKF9fbGVuLCAoX1RwKikgMCk7Cn0KCgoKCgoK
dGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHBhaXI8X1RwKiwgcHRyZGlmZl90PiBnZXRfdGVt
cG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCopIHsKICByZXR1cm4gX19nZXRfdGVt
cG9yYXJ5X2J1ZmZlcihfX2xlbiwgKF9UcCopIDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgp2
b2lkIHJldHVybl90ZW1wb3JhcnlfYnVmZmVyKF9UcCogX19wKSB7CiAgZnJlZShfX3ApOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgpjbGFzcyBfVGVtcG9y
YXJ5X2J1ZmZlciB7CnByaXZhdGU6CiAgcHRyZGlmZl90IF9NX29yaWdpbmFsX2xlbjsKICBwdHJk
aWZmX3QgX01fbGVuOwogIF9UcCogX01fYnVmZmVyOwoKICB2b2lkIF9NX2FsbG9jYXRlX2J1ZmZl
cigpIHsKICAgIF9NX29yaWdpbmFsX2xlbiA9IF9NX2xlbjsKICAgIF9NX2J1ZmZlciA9IDA7Cgog
ICAgaWYgKF9NX2xlbiA+IChwdHJkaWZmX3QpKDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAg
ICAgIF9NX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgICB3aGlsZSAoX01fbGVu
ID4gMCkgewogICAgICBfTV9idWZmZXIgPSAoX1RwKikgbWFsbG9jKF9NX2xlbiAqIHNpemVvZihf
VHApKTsKICAgICAgaWYgKF9NX2J1ZmZlcikKICAgICAgICBicmVhazsKICAgICAgX01fbGVuIC89
IDI7CiAgICB9CiAgfQoKICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYsIF9f
dHJ1ZV90eXBlKSB7fQogIHZvaWQgX01faW5pdGlhbGl6ZV9idWZmZXIoY29uc3QgX1RwJiB2YWws
IF9fZmFsc2VfdHlwZSkgewogICAgdW5pbml0aWFsaXplZF9maWxsX24oX01fYnVmZmVyLCBfTV9s
ZW4sIHZhbCk7CiAgfQoKcHVibGljOgogIHB0cmRpZmZfdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
X01fbGVuOyB9CiAgcHRyZGlmZl90IHJlcXVlc3RlZF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01f
b3JpZ2luYWxfbGVuOyB9CiAgX1RwKiBiZWdpbigpIHsgcmV0dXJuIF9NX2J1ZmZlcjsgfQogIF9U
cCogZW5kKCkgeyByZXR1cm4gX01fYnVmZmVyICsgX01fbGVuOyB9CgogIF9UZW1wb3JhcnlfYnVm
ZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpIHsK
CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfZGVm
YXVsdF9jb25zdHJ1Y3RvcgogICAgICAgICAgICBfVHJpdmlhbDsKCiAgICB0cnkgewogICAgICBf
TV9sZW4gPSAwOwogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9NX2xlbik7CiAgICAg
IF9NX2FsbG9jYXRlX2J1ZmZlcigpOwogICAgICBpZiAoX01fbGVuID4gMCkKICAgICAgICBfTV9p
bml0aWFsaXplX2J1ZmZlcigqX19maXJzdCwgX1RyaXZpYWwoKSk7CiAgICB9CiAgICBjYXRjaCgu
Li4pIHsgZnJlZShfTV9idWZmZXIpOyBfTV9idWZmZXIgPSAwOyBfTV9sZW4gPSAwOyB0aHJvdzsg
fTsKICB9CgogIH5fVGVtcG9yYXJ5X2J1ZmZlcigpIHsKICAgIGRlc3Ryb3koX01fYnVmZmVyLCBf
TV9idWZmZXIgKyBfTV9sZW4pOwogICAgZnJlZShfTV9idWZmZXIpOwogIH0KCnByaXZhdGU6Cgog
IF9UZW1wb3JhcnlfYnVmZmVyKGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30KICB2b2lkIG9w
ZXJhdG9yPShjb25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9Cn07CgoKCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXJhdG9yLAogICAgICAgICAgY2xhc3MgX1RwCiAgICAgICAgICAgICAgICAg
ICAgPSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVlX3R5
cGUKICAgICAgICAgPgpzdHJ1Y3QgdGVtcG9yYXJ5X2J1ZmZlciA6IHB1YmxpYyBfVGVtcG9yYXJ5
X2J1ZmZlcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+CnsKICB0ZW1wb3JhcnlfYnVmZmVyKF9Gb3J3
YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCiAgICA6IF9UZW1w
b3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4oX19maXJzdCwgX19sYXN0KSB7fQog
IH50ZW1wb3JhcnlfYnVmZmVyKCkge30KfTsKCn0KIyAyNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoK
CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5l
IF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl
ciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQp7CiAgcmV0
dXJuIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6
ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fZmFsc2VfdHlwZSkKewogIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0
OwogIHRyeSB7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19j
dXIpCiAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOwogICAgcmV0dXJuIF9fY3Vy
OwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fY3VyKTsgdGhyb3c7IH07
Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz
cyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyIF9fcmVzdWx0LCBfVHAqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRz
PF9UcD46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5
X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXNfUE9EKCkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVy
CiAgdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKewogIHJldHVy
biBfX3VuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19yZXN1bHQpKTsKfQoKaW5saW5l
IGNoYXIqIHVuaW5pdGlhbGl6ZWRfY29weShjb25zdCBjaGFyKiBfX2ZpcnN0LCBjb25zdCBjaGFy
KiBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogX19yZXN1bHQp
IHsKICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKICByZXR1
cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCmlubGluZSB3Y2hhcl90Kgp1bmlu
aXRpYWxpemVkX2NvcHkoY29uc3Qgd2NoYXJfdCogX19maXJzdCwgY29uc3Qgd2NoYXJfdCogX19s
YXN0LAogICAgICAgICAgICAgICAgICAgd2NoYXJfdCogX19yZXN1bHQpCnsKICBtZW1tb3ZlKF9f
cmVzdWx0LCBfX2ZpcnN0LCBzaXplb2Yod2NoYXJfdCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwog
IHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KcGFpcjxfSW5w
dXRJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0SXRlciBf
X2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl
ciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsK
ICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsKICB0cnkgewogICAgZm9yICggOyBfX2Nv
dW50ID4gMCA7IC0tX19jb3VudCwgKytfX2ZpcnN0LCArK19fY3VyKQogICAgICBfQ29uc3RydWN0
KCYqX19jdXIsICpfX2ZpcnN0KTsKICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJk
SXRlcj4oX19maXJzdCwgX19jdXIpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1
bHQsIF9fY3VyKTsgdGhyb3c7IH07Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
ciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8X1JhbmRvbUFj
Y2Vzc0l0ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlfbihfUmFuZG9tQWNj
ZXNzSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgIF9G
b3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNz
X2l0ZXJhdG9yX3RhZykgewogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCA9IF9fZmlyc3QgKyBf
X2NvdW50OwogIHJldHVybiBwYWlyPF9SYW5kb21BY2Nlc3NJdGVyLCBfRm9yd2FyZEl0ZXI+KAog
ICAgICAgICAgICAgICAgIF9fbGFzdCwKICAgICAgICAgICAgICAgICB1bmluaXRpYWxpemVkX2Nv
cHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8X0lucHV0
SXRlciwgX0ZvcndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19m
aXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9f
cmVzdWx0KSB7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX19maXJzdCwgX19jb3Vu
dCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9j
YXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBf
U2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2Fy
ZEl0ZXI+CnVuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19j
b3VudCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0
dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0
KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUg
dm9pZApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwg
X190cnVlX3R5cGUpCnsKICBmaWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lkCl9fdW5pbml0aWFsaXplZF9maWxs
X2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCnsKICBfRm9yd2Fy
ZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogIHRyeSB7CiAgICBmb3IgKCA7IF9fY3VyICE9IF9fbGFz
dDsgKytfX2N1cikKICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogIH0KICBjYXRjaCgu
Li4pIHsgX0Rlc3Ryb3koX19maXJzdCwgX19jdXIpOyB0aHJvdzsgfTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfVHAxPgppbmxpbmUgdm9pZCBfX3Vu
aW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3gsIF9UcDEq
KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcDE+Ojppc19QT0RfdHlwZSBf
SXNfUE9EOwogIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9feCwg
X0lzX1BPRCgpKTsKCn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4K
aW5saW5lIHZvaWQgdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQp7CiAgX191bmluaXRpYWxpemVk
X2ZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCgoK
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KaW5s
aW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIg
X19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAm
IF9feCwgX190cnVlX3R5cGUpCnsKICByZXR1cm4gZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194KTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4K
X0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194
LCBfX2ZhbHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogIHRyeSB7
CiAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fY3VyKQogICAgICBfQ29uc3RydWN0KCYq
X19jdXIsIF9feCk7CiAgICByZXR1cm4gX19jdXI7CiAgfQogIGNhdGNoKC4uLikgeyBfRGVzdHJv
eShfX2ZpcnN0LCBfX2N1cik7IHRocm93OyB9Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwLCBjbGFzcyBfVHAxPgppbmxpbmUgX0ZvcndhcmRJ
dGVyCl9fdW5pbml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9f
biwgY29uc3QgX1RwJiBfX3gsIF9UcDEqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJh
aXRzPF9UcDE+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRf
ZmlsbF9uX2F1eChfX2ZpcnN0LCBfX24sIF9feCwgX0lzX1BPRCgpKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJk
SXRlcgp1bmluaXRpYWxpemVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19u
LCBjb25zdCBfVHAmIF9feCkKewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uKF9fZmly
c3QsIF9fbiwgX194LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9CiMgMjMxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+Cmlu
bGluZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHlfY29weShfSW5wdXRJdGVyMSBf
X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBf
SW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCnsKICBfRm9yd2FyZEl0ZXIgX19taWQg
PSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICB0cnkg
ewogICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0MiwgX19taWQp
OwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsgdGhyb3c7IH07
Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0lu
cHV0SXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9jb3B5KF9G
b3J3YXJkSXRlciBfX3Jlc3VsdCwgX0ZvcndhcmRJdGVyIF9fbWlkLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9UcCYgX194LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QpCnsKICB1bmluaXRpYWxpemVkX2ZpbGwo
X19yZXN1bHQsIF9fbWlkLCBfX3gpOwogIHRyeSB7CiAgICByZXR1cm4gdW5pbml0aWFsaXplZF9j
b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19taWQpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3ko
X19yZXN1bHQsIF9fbWlkKTsgdGhyb3c7IH07Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX191bmluaXRp
YWxpemVkX2NvcHlfZmlsbChfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkK
ewogIF9Gb3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9f
bGFzdDEsIF9fZmlyc3QyKTsKICB0cnkgewogICAgdW5pbml0aWFsaXplZF9maWxsKF9fbWlkMiwg
X19sYXN0MiwgX194KTsKICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9fZmlyc3QyLCBfX21p
ZDIpOyB0aHJvdzsgfTsKfQoKfQojIDI2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX21lbW9yeS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X3Jhd19zdG9yYWdlX2l0ZXIuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfcmF3X3N0b3JhZ2VfaXRlci5oIiAzCm5hbWVzcGFjZSBzdGQKewoKdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KY2xhc3MgcmF3X3N0b3JhZ2VfaXRl
cmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0ZvcndhcmRJdGVyYXRvciBfTV9pdGVyOwpwdWJsaWM6CiAg
dHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYg
dm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRl
ZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgZXhwbGljaXQgcmF3
X3N0b3JhZ2VfaXRlcmF0b3IoX0ZvcndhcmRJdGVyYXRvciBfX3gpIDogX01faXRlcihfX3gpIHt9
CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAg
cmF3X3N0b3JhZ2VfaXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBfVHAmIF9fZWxlbWVudCkgewog
ICAgY29uc3RydWN0KCYqX01faXRlciwgX19lbGVtZW50KTsKICAgIHJldHVybiAqdGhpczsKICB9
CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiYgb3BlcmF0b3Ir
KygpIHsKICAgICsrX01faXRlcjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgcmF3X3N0b3JhZ2Vf
aXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiBvcGVyYXRvcisrKGludCkgewogICAgcmF3
X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiBfX3RtcCA9ICp0aGlzOwog
ICAgKytfTV9pdGVyOwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKCgp9CiMgMjcgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7
CgogdGVtcGxhdGU8Y2xhc3MgX1RwMT4gc3RydWN0IGF1dG9fcHRyX3JlZiB7CiAgIF9UcDEqIF9N
X3B0cjsKICAgYXV0b19wdHJfcmVmKF9UcDEqIF9fcCkgOiBfTV9wdHIoX19wKSB7fQp9OwoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4gY2xhc3MgYXV0b19wdHIgewpwcml2YXRlOgogIF9UcCogX01fcHRy
OwoKcHVibGljOgogIHR5cGVkZWYgX1RwIGVsZW1lbnRfdHlwZTsKCiAgZXhwbGljaXQgYXV0b19w
dHIoX1RwKiBfX3AgPSAwKSB0aHJvdygpIDogX01fcHRyKF9fcCkge30KICBhdXRvX3B0cihhdXRv
X3B0ciYgX19hKSB0aHJvdygpIDogX01fcHRyKF9fYS5yZWxlYXNlKCkpIHt9CgogIHRlbXBsYXRl
IDxjbGFzcyBfVHAxPiBhdXRvX3B0cihhdXRvX3B0cjxfVHAxPiYgX19hKSB0aHJvdygpCiAgICA6
IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7fQoKICBhdXRvX3B0ciYgb3BlcmF0b3I9KGF1dG9fcHRy
JiBfX2EpIHRocm93KCkgewogICAgcmVzZXQoX19hLnJlbGVhc2UoKSk7CiAgICByZXR1cm4gKnRo
aXM7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBhdXRvX3B0ciYgb3BlcmF0b3I9KGF1
dG9fcHRyPF9UcDE+JiBfX2EpIHRocm93KCkgewogICAgcmVzZXQoX19hLnJlbGVhc2UoKSk7CiAg
ICByZXR1cm4gKnRoaXM7CiAgfQoKCgoKCiAgfmF1dG9fcHRyKCkgeyBkZWxldGUgX01fcHRyOyB9
CgogIF9UcCYgb3BlcmF0b3IqKCkgY29uc3QgdGhyb3coKSB7CiAgICByZXR1cm4gKl9NX3B0cjsK
ICB9CiAgX1RwKiBvcGVyYXRvci0+KCkgY29uc3QgdGhyb3coKSB7CiAgICByZXR1cm4gX01fcHRy
OwogIH0KICBfVHAqIGdldCgpIGNvbnN0IHRocm93KCkgewogICAgcmV0dXJuIF9NX3B0cjsKICB9
CiAgX1RwKiByZWxlYXNlKCkgdGhyb3coKSB7CiAgICBfVHAqIF9fdG1wID0gX01fcHRyOwogICAg
X01fcHRyID0gMDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgdm9pZCByZXNldChfVHAqIF9fcCA9
IDApIHRocm93KCkgewogICAgaWYgKF9fcCAhPSBfTV9wdHIpIHsKICAgICAgZGVsZXRlIF9NX3B0
cjsKICAgICAgX01fcHRyID0gX19wOwogICAgfQogIH0KCgoKCgpwdWJsaWM6CiAgYXV0b19wdHIo
YXV0b19wdHJfcmVmPF9UcD4gX19yZWYpIHRocm93KCkKICAgIDogX01fcHRyKF9fcmVmLl9NX3B0
cikge30KCiAgYXV0b19wdHImIG9wZXJhdG9yPShhdXRvX3B0cl9yZWY8X1RwPiBfX3JlZikgdGhy
b3coKSB7CiAgICBpZiAoX19yZWYuX01fcHRyICE9IHRoaXMtPmdldCgpKSB7CiAgICAgIGRlbGV0
ZSBfTV9wdHI7CiAgICAgIF9NX3B0ciA9IF9fcmVmLl9NX3B0cjsKICAgIH0KICAgIHJldHVybiAq
dGhpczsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBvcGVyYXRvciBhdXRvX3B0cl9yZWY8
X1RwMT4oKSB0aHJvdygpCiAgICB7IHJldHVybiBhdXRvX3B0cl9yZWY8X1RwPih0aGlzLT5yZWxl
YXNlKCkpOyB9CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IG9wZXJhdG9yIGF1dG9fcHRyPF9UcDE+
KCkgdGhyb3coKQogICAgeyByZXR1cm4gYXV0b19wdHI8X1RwMT4odGhpcy0+cmVsZWFzZSgpKTsg
fQp9OwoKfQojIDQ0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5o
IiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIg
MSAzCiMgNDUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIg
MwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDEgMwoj
IDQ2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMKIyAx
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDEgMwojIDM4
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKCiMgMSAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2F0b21pY2l0
eS5oIiAxIDMKIyAzMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdu
dS9iaXRzL2F0b21pY2l0eS5oIiAzCnR5cGVkZWYgaW50IF9BdG9taWNfd29yZDsKCnN0YXRpYyBp
bmxpbmUgX0F0b21pY193b3JkCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKX19leGNoYW5n
ZV9hbmRfYWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQgKl9fbWVtLCBpbnQgX192YWwpCnsKICBy
ZWdpc3RlciBfQXRvbWljX3dvcmQgX19yZXN1bHQ7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJs
b2NrOyB4YWRkbCAlMCwlMiIKICAgICAgICAgICAgICAgICAgICAgICAgOiAiPXIiIChfX3Jlc3Vs
dCkKICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKF9fdmFsKSwgIm0iICgqX19tZW0pCiAg
ICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOwogIHJldHVybiBfX3Jlc3VsdDsKfQoK
c3RhdGljIGlubGluZSB2b2lkCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKX19hdG9taWNf
YWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQqIF9fbWVtLCBpbnQgX192YWwpCnsKICBfX2FzbV9f
IF9fdm9sYXRpbGVfXyAoImxvY2s7IGFkZGwgJTAsJTEiCiAgICAgICAgICAgICAgICAgICAgICAg
IDogOiAiaXIiIChfX3ZhbCksICJtIiAoKl9fbWVtKSA6ICJtZW1vcnkiKTsKfQoKc3RhdGljIGlu
bGluZSBjaGFyCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKX19jb21wYXJlX2FuZF9zd2Fw
ICh2b2xhdGlsZSBsb25nKiBfX3AsIGxvbmcgX19vbGR2YWwsIGxvbmcgX19uZXd2YWwpCnsKICBj
aGFyIF9fcmV0OwogIGxvbmcgX19yZWFkdmFsOwoKICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxv
Y2s7IGNtcHhjaGdsICUzLCAlMTsgc2V0ZSAlMCIKICAgICAgICAgICAgICAgICAgICAgICAgOiAi
PXEiIChfX3JldCksICI9bSIgKCpfX3ApLCAiPWEiIChfX3JlYWR2YWwpCiAgICAgICAgICAgICAg
ICAgICAgICAgIDogInIiIChfX25ld3ZhbCksICJtIiAoKl9fcCksICJhIiAoX19vbGR2YWwpKTsK
ICByZXR1cm4gX19yZXQ7Cn0KIyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Jh
c2ljX3N0cmluZy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDgzICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGJhc2ljX3N0
cmluZwogICAgewoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZSB2YWx1ZV90eXBlOwog
ICAgICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfQWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Fs
bG9jOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIF9BbGxvYzo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
QWxsb2M6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX0FsbG9jOjpwb2ludGVyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Fs
bG9jOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX19ub3JtYWxf
aXRlcmF0b3I8cG9pbnRlciwgYmFzaWNfc3RyaW5nPiBpdGVyYXRvcjsKICAgICAgdHlwZWRlZiBf
X25vcm1hbF9pdGVyYXRvcjxjb25zdF9wb2ludGVyLCBiYXNpY19zdHJpbmc+IGNvbnN0X2l0ZXJh
dG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0
X3JldmVyc2VfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRv
cj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICBwcml2YXRlOgojIDExOCAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCiAgICAgIHN0cnVjdCBfUmVwCiAgICAg
IHsKCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnJlYmluZDxjaGFyPjo6b3RoZXIg
X1Jhd19ieXRlc19hbGxvYzsKIyAxMzYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9i
YXNpY19zdHJpbmcuaCIgMwogICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgX1NfbWF4X3Np
emU7CiAgICAgICAgc3RhdGljIGNvbnN0IF9DaGFyVCBfU190ZXJtaW5hbDsKCiAgICAgICAgc2l6
ZV90eXBlIF9NX2xlbmd0aDsKICAgICAgICBzaXplX3R5cGUgX01fY2FwYWNpdHk7CiAgICAgICAg
X0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7CgogICAgICAgIGJvb2wKICAgICAgICBfTV9pc19s
ZWFrZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMgPCAwOyB9CgogICAg
ICAgIGJvb2wKICAgICAgICBfTV9pc19zaGFyZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9N
X3JlZmVyZW5jZXMgPiAwOyB9CgogICAgICAgIHZvaWQKICAgICAgICBfTV9zZXRfbGVha2VkKCkK
ICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAtMTsgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01f
c2V0X3NoYXJhYmxlKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAwOyB9CgogICAgICAgIF9D
aGFyVCoKICAgICAgICBfTV9yZWZkYXRhKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8X0NoYXJUKj4gKHRoaXMgKyAxKTsgfQoKICAgICAgICBfQ2hhclQmCiAgICAg
ICAgb3BlcmF0b3JbXShzaXplX3QgX19zKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gX01fcmVm
ZGF0YSgpIFtfX3NdOyB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9ncmFiKGNvbnN0IF9B
bGxvYyYgX19hbGxvYzEsIGNvbnN0IF9BbGxvYyYgX19hbGxvYzIpCiAgICAgICAgeyByZXR1cm4g
KCFfTV9pc19sZWFrZWQoKSAmJiBfX2FsbG9jMSA9PSBfX2FsbG9jMikgPwogICAgICAgICAgICBf
TV9yZWZjb3B5KCkgOiBfTV9jbG9uZShfX2FsbG9jMSk7IH0KCgogICAgICAgIHN0YXRpYyBfUmVw
KgogICAgICAgIF9TX2NyZWF0ZShzaXplX3QsIGNvbnN0IF9BbGxvYyYpOwoKICAgICAgICB2b2lk
CiAgICAgICAgX01fZGlzcG9zZShjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICB7CiAgICAgICAg
ICBpZiAoX19leGNoYW5nZV9hbmRfYWRkKCZfTV9yZWZlcmVuY2VzLCAtMSkgPD0gMCkKICAgICAg
ICAgICAgX01fZGVzdHJveShfX2EpOwogICAgICAgIH0KCiAgICAgICAgdm9pZAogICAgICAgIF9N
X2Rlc3Ryb3koY29uc3QgX0FsbG9jJikgdGhyb3coKTsKCiAgICAgICAgX0NoYXJUKgogICAgICAg
IF9NX3JlZmNvcHkoKSB0aHJvdygpCiAgICAgICAgewogICAgICAgICAgX19hdG9taWNfYWRkKCZf
TV9yZWZlcmVuY2VzLCAxKTsKICAgICAgICAgIHJldHVybiBfTV9yZWZkYXRhKCk7CiAgICAgICAg
fQoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fY2xvbmUoY29uc3QgX0FsbG9jJiwgc2l6ZV90
eXBlIF9fcmVzID0gMCk7CiMgMjA4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFz
aWNfc3RyaW5nLmgiIDMKICAgICAgICBpbmxpbmUgc3RhdGljIGJvb2wKICAgICAgICBfU19leGNl
c3Nfc2xvcChzaXplX3QsIHNpemVfdCk7CgogICAgICB9OwoKCiAgICAgIHN0cnVjdCBfQWxsb2Nf
aGlkZXIgOiBfQWxsb2MKICAgICAgewogICAgICAgIF9BbGxvY19oaWRlcihfQ2hhclQqIF9fZGF0
LCBjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICA6IF9BbGxvYyhfX2EpLCBfTV9wKF9fZGF0KSB7
IH0KCiAgICAgICAgX0NoYXJUKiBfTV9wOwogICAgICB9OwoKICAgIHB1YmxpYzoKCgoKICAgICAg
c3RhdGljIGNvbnN0IHNpemVfdHlwZSBucG9zID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPigtMSk7
CgogICAgcHJpdmF0ZToKCiAgICAgIG11dGFibGUgX0FsbG9jX2hpZGVyIF9NX2RhdGFwbHVzOwoK
CgogICAgICBzdGF0aWMgc2l6ZV90eXBlIF9TX2VtcHR5X3JlcF9zdG9yYWdlWyhzaXplb2YoX1Jl
cCkgKyBzaXplb2YoX0NoYXJUKSArIHNpemVvZihzaXplX3R5cGUpIC0gMSkvc2l6ZW9mKHNpemVf
dHlwZSldOwoKICAgICAgX0NoYXJUKgogICAgICBfTV9kYXRhKCkgY29uc3QKICAgICAgeyByZXR1
cm4gX01fZGF0YXBsdXMuX01fcDsgfQoKICAgICAgX0NoYXJUKgogICAgICBfTV9kYXRhKF9DaGFy
VCogX19wKQogICAgICB7IHJldHVybiAoX01fZGF0YXBsdXMuX01fcCA9IF9fcCk7IH0KCiAgICAg
IF9SZXAqCiAgICAgIF9NX3JlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuICYoKHJlaW50ZXJwcmV0
X2Nhc3Q8X1JlcCo+IChfTV9kYXRhKCkpKVstMV0pOyB9CgoKCiAgICAgIGl0ZXJhdG9yCiAgICAg
IF9NX2liZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSk7IH0KCiAgICAg
IGl0ZXJhdG9yCiAgICAgIF9NX2llbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihfTV9kYXRh
KCkgKyB0aGlzLT5zaXplKCkpOyB9CgogICAgICB2b2lkCiAgICAgIF9NX2xlYWsoKQogICAgICB7
CiAgICAgICAgaWYgKCFfTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAgICAgICBfTV9sZWFr
X2hhcmQoKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgX01fY2hlY2soc2l6ZV90eXBl
IF9fcG9zKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQog
ICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6X01fY2hlY2siKTsK
ICAgICAgICByZXR1cm4gX01faWJlZ2luKCkgKyBfX3BvczsKICAgICAgfQoKCiAgICAgIGl0ZXJh
dG9yCiAgICAgIF9NX2ZvbGQoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19vZmYpIGNvbnN0
CiAgICAgIHsKICAgICAgICBib29sIF9fdGVzdG9mZiA9IF9fb2ZmIDwgdGhpcy0+c2l6ZSgpIC0g
X19wb3M7CiAgICAgICAgc2l6ZV90eXBlIF9fbmV3b2ZmID0gX190ZXN0b2ZmID8gX19vZmYgOiB0
aGlzLT5zaXplKCkgLSBfX3BvczsKICAgICAgICByZXR1cm4gKF9NX2liZWdpbigpICsgX19wb3Mg
KyBfX25ld29mZik7CiAgICAgIH0KCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0l0ZXJhdG9yPgog
ICAgICAgIHN0YXRpYyB2b2lkCiAgICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgX0l0
ZXJhdG9yIF9fazEsIF9JdGVyYXRvciBfX2syKQogICAgICAgIHsKICAgICAgICAgIGZvciAoOyBf
X2sxICE9IF9fazI7ICsrX19rMSwgKytfX3ApCiAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3Np
Z24oKl9fcCwgKl9fazEpOwogICAgICAgIH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2Nv
cHlfY2hhcnMoX0NoYXJUKiBfX3AsIGl0ZXJhdG9yIF9fazEsIGl0ZXJhdG9yIF9fazIpCiAgICAg
IHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEuYmFzZSgpLCBfX2syLmJhc2UoKSk7IH0KCiAgICAg
IHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGNvbnN0X2l0ZXJh
dG9yIF9fazEsIGNvbnN0X2l0ZXJhdG9yIF9fazIpCiAgICAgIHsgX1NfY29weV9jaGFycyhfX3As
IF9fazEuYmFzZSgpLCBfX2syLmJhc2UoKSk7IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9T
X2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9DaGFyVCogX19rMSwgX0NoYXJUKiBfX2syKQogICAg
ICB7IHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICBz
dGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBjb25zdCBfQ2hhclQq
IF9fazEsIGNvbnN0IF9DaGFyVCogX19rMikKICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3As
IF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgdm9pZAogICAgICBfTV9tdXRhdGUoc2l6ZV90
eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXplX3R5cGUgX19sZW4yKTsKCiAgICAgIHZv
aWQKICAgICAgX01fbGVha19oYXJkKCk7CgogICAgICBzdGF0aWMgX1JlcCYKICAgICAgX1NfZW1w
dHlfcmVwKCkKICAgICAgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8X1JlcCo+KCZfU19lbXB0
eV9yZXBfc3RvcmFnZSk7IH0KCiAgICBwdWJsaWM6CgoKCgogICAgICBpbmxpbmUKICAgICAgYmFz
aWNfc3RyaW5nKCk7CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0Fs
bG9jJiBfX2EpOwoKCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3Ry
KTsKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlw
ZSBfX3BvcywKICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24gPSBucG9zKTsKICAgICAg
YmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywK
ICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKTsKCiAg
ICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwKICAgICAg
ICAgICAgICAgICAgIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwogICAgICBiYXNpY19z
dHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwog
ICAgICBiYXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9j
JiBfX2EgPSBfQWxsb2MoKSk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K
ICAgICAgICBiYXNpY19zdHJpbmcoX0lucHV0SXRlcmF0b3IgX19iZWdpbiwgX0lucHV0SXRlcmF0
b3IgX19lbmQsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9j
KCkpOwoKICAgICAgfmJhc2ljX3N0cmluZygpCiAgICAgIHsgX01fcmVwKCktPl9NX2Rpc3Bvc2Uo
dGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVy
YXRvcj0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9f
c3RyKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcj0oY29uc3QgX0NoYXJU
KiBfX3MpIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MpOyB9CgogICAgICBiYXNpY19zdHJpbmcm
CiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKSB7IHJldHVybiB0aGlzLT5hc3NpZ24oMSwgX19j
KTsgfQoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGJlZ2luKCkKICAgICAgewogICAgICAgIF9NX2xl
YWsoKTsKICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpKTsKICAgICAgfQoKICAgICAg
Y29uc3RfaXRlcmF0b3IKICAgICAgYmVnaW4oKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9p
dGVyYXRvcihfTV9kYXRhKCkpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBlbmQoKQogICAgICB7
CiAgICAgICAgIF9NX2xlYWsoKTsKICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSAr
IHRoaXMtPnNpemUoKSk7CiAgICAgIH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGVuZCgp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNp
emUoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkKICAgICAgeyBy
ZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAgICAgIGNvbnN0X3JldmVy
c2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfcmV2
ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAg
ICAgcmVuZCgpCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVnaW4oKSk7
IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmVuZCgpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVnaW4oKSk7IH0KCiAgICBw
dWJsaWM6CgogICAgICBzaXplX3R5cGUKICAgICAgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Jl
cCgpLT5fTV9sZW5ndGg7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBsZW5ndGgoKSBjb25zdCB7
IHJldHVybiBfTV9yZXAoKS0+X01fbGVuZ3RoOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbWF4
X3NpemUoKSBjb25zdCB7IHJldHVybiBfUmVwOjpfU19tYXhfc2l6ZTsgfQoKICAgICAgdm9pZAog
ICAgICByZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAgICB2b2lkCiAgICAg
IHJlc2l6ZShzaXplX3R5cGUgX19uKSB7IHRoaXMtPnJlc2l6ZShfX24sIF9DaGFyVCgpKTsgfQoK
ICAgICAgc2l6ZV90eXBlCiAgICAgIGNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gX01fcmVwKCkt
Pl9NX2NhcGFjaXR5OyB9CgogICAgICB2b2lkCiAgICAgIHJlc2VydmUoc2l6ZV90eXBlIF9fcmVz
X2FyZyA9IDApOwoKICAgICAgdm9pZAogICAgICBjbGVhcigpIHsgX01fbXV0YXRlKDAsIHRoaXMt
PnNpemUoKSwgMCk7IH0KCiAgICAgIGJvb2wKICAgICAgZW1wdHkoKSBjb25zdCB7IHJldHVybiB0
aGlzLT5zaXplKCkgPT0gMDsgfQoKCiAgICAgIGNvbnN0X3JlZmVyZW5jZQogICAgICBvcGVyYXRv
cltdIChzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RhdGEoKVtfX3Bv
c107IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX3BvcykK
ICAgICAgewogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fcG9z
XTsKICAgICAgfQoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAgIGF0KHNpemVfdHlwZSBfX24p
IGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkKICAgICAgICAg
IF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmF0Iik7CiAgICAgICAgcmV0dXJu
IF9NX2RhdGEoKVtfX25dOwogICAgICB9CgogICAgICByZWZlcmVuY2UKICAgICAgYXQoc2l6ZV90
eXBlIF9fbikKICAgICAgewogICAgICAgIGlmIChfX24gPj0gc2l6ZSgpKQogICAgICAgICAgX190
aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXQiKTsKICAgICAgICBfTV9sZWFrKCk7
CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOwogICAgICB9CgoKICAgICAgYmFzaWNfc3Ry
aW5nJgogICAgICBvcGVyYXRvcis9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIHsgcmV0dXJu
IHRoaXMtPmFwcGVuZChfX3N0cik7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0
b3IrPShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fcyk7IH0KCiAg
ICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShfQ2hhclQgX19jKSB7IHJldHVybiB0
aGlzLT5hcHBlbmQoc2l6ZV90eXBlKDEpLCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAg
ICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKCiAgICAgIGJhc2ljX3N0cmlu
ZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bv
cywgc2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25z
dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg
IGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9f
cywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg
ICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAgICB0ZW1wbGF0ZTxjbGFz
cyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXBwZW5kKF9J
bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7IHJl
dHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX2ZpcnN0LCBfX2xhc3Qp
OyB9CgogICAgICB2b2lkCiAgICAgIHB1c2hfYmFjayhfQ2hhclQgX19jKQogICAgICB7IHRoaXMt
PnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIDEsIF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0
cmluZyYKICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpOwoKICAgICAgYmFz
aWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90
eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPmFz
c2lnbihfX3N0ci5fTV9jaGVjayhfX3BvcyksIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbikpOwog
ICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBfQ2hhclQqIF9f
cywgc2l6ZV90eXBlIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcywgX19zICsg
X19uKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBf
X3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MsIF9fcyArIHRyYWl0c190eXBlOjps
ZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKHNpemVfdHlw
ZSBfX24sIF9DaGFyVCBfX2MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2lu
KCksIF9NX2llbmQoKSwgX19uLCBfX2MpOyB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJ
dGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJh
dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7IHJldHVybiB0aGlz
LT5yZXBsYWNlKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAg
ICAgIHZvaWQKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgc2l6ZV90eXBlIF9fbiwgX0NoYXJU
IF9fYykKICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX24sIF9fYyk7IH0KCiAgICAg
IHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIHZvaWQgaW5zZXJ0KGl0ZXJh
dG9yIF9fcCwgX0lucHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kKQogICAg
ICAgIHsgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19iZWcsIF9fZW5kKTsgfQoKICAgICAgYmFz
aWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNfc3Ry
aW5nJiBfX3N0cikKICAgICAgewogICAgICAgIGl0ZXJhdG9yIF9fcCA9IF9NX2NoZWNrKF9fcG9z
MSk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19zdHIuX01faWJlZ2luKCksIF9f
c3RyLl9NX2llbmQoKSk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBiYXNp
Y19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBiYXNpY19zdHJp
bmcmIF9fc3RyLAogICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbikK
ICAgICAgewogICAgICAgIGl0ZXJhdG9yIF9fcCA9IF9NX2NoZWNrKF9fcG9zMSk7CiAgICAgICAg
dGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19zdHIuX01fY2hlY2soX19wb3MyKSwKICAgICAgICAg
ICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MyLCBfX24pKTsKICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlw
ZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAg
ICBpdGVyYXRvciBfX3AgPSBfTV9jaGVjayhfX3Bvcyk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShf
X3AsIF9fcCwgX19zLCBfX3MgKyBfX24pOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoK
ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBf
Q2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zLCBfX3MsIHRyYWl0
c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0
KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgewogICAg
ICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIF9fbiwgX19jKTsKICAgICAgICByZXR1
cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydChpdGVyYXRvciBf
X3AsIF9DaGFyVCBfX2MgPSBfQ2hhclQoKSkKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX3Bv
cyA9IF9fcCAtIF9NX2liZWdpbigpOwogICAgICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3Bv
cyksIHNpemVfdHlwZSgxKSwgX19jKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgp
OwogICAgICAgIHJldHVybiB0aGlzLT5fTV9pYmVnaW4oKSArIF9fcG9zOwogICAgICB9CgogICAg
ICBiYXNpY19zdHJpbmcmCiAgICAgIGVyYXNlKHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlw
ZSBfX24gPSBucG9zKQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hl
Y2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24pLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAg
ZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2kg
PSBfX3Bvc2l0aW9uIC0gX01faWJlZ2luKCk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3Bvc2l0
aW9uLCBfX3Bvc2l0aW9uICsgMSwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICAgIF9NX3Jl
cCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19pOwog
ICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVy
YXRvciBfX2xhc3QpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19pID0gX19maXJzdCAtIF9N
X2liZWdpbigpOwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19maXJzdCwgX19sYXN0LCBfTV9kYXRh
KCksIF9NX2RhdGEoKSk7CiAgICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAg
IHJldHVybiBfTV9pYmVnaW4oKSArIF9faTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgog
ICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNf
c3RyaW5nJiBfX3N0cikKICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2No
ZWNrKF9fcG9zKSwgX01fZm9sZChfX3BvcywgX19uKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19zdHIuYmVnaW4oKSwgX19zdHIuZW5kKCkpOwogICAgICB9CgogICAgICBiYXNpY19z
dHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNv
bnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwg
c2l6ZV90eXBlIF9fbjIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVf
dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAogICAgICAgICAg
ICAgIHNpemVfdHlwZSBfX24yKQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2Uo
X01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24xKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3MsIF9fcyArIF9fbjIpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcm
CiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0No
YXJUKiBfX3MpCiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhf
X3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbjEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fcywgX19zICsgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsKICAgICAgfQoKICAgICAgYmFz
aWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEs
IHNpemVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMt
PnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24xKSwgX19uMiwgX19j
KTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9f
aTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICAgIHsgcmV0
dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zdHIuYmVnaW4oKSwgX19zdHIuZW5kKCkp
OyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRl
cmF0b3IgX19pMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3Ms
IHNpemVfdHlwZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwg
X19zLCBfX3MgKyBfX24pOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRl
cmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0
dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0
cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXplX3R5
cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
PgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0
ZXJhdG9yIF9faTIsCiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2sxLCBfSW5wdXRJ
dGVyYXRvciBfX2syKQogICAgICAgIHsgcmV0dXJuIF9NX3JlcGxhY2UoX19pMSwgX19pMiwgX19r
MSwgX19rMiwKICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVy
YXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOyB9CgogICAgcHJpdmF0ZToKICAgICAgdGVtcGxh
dGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIF9N
X3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRlcmF0b3IgX19r
MSwKICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fazIsIGlucHV0X2l0ZXJhdG9y
X3RhZyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndkSXRlcmF0b3I+CiAgICAgICAgYmFzaWNf
c3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwg
X0Z3ZEl0ZXJhdG9yIF9fazEsCiAgICAgICAgICAgICAgICAgICBfRndkSXRlcmF0b3IgX19rMiwg
Zm9yd2FyZF9pdGVyYXRvcl90YWcpOwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgog
ICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0X2F1eChfSW5JdGVyIF9f
YmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fZmFsc2VfdHlwZSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSW5JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX1RhZzsKICAgICAg
ICAgIHJldHVybiBfU19jb25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EsIF9UYWcoKSk7CiAgICAg
ICAgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJU
KgogICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwg
Y29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkK
ICAgICAgICB7CiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0KHN0YXRpY19jYXN0PHNpemVf
dHlwZT4oX19iZWcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2
YWx1ZV90eXBlPihfX2VuZCksIF9fYSk7CiAgICAgICAgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3Mg
X0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChfSW5J
dGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICB7CiAg
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9Jbkl0ZXI+OjpfSW50ZWdyYWwg
X0ludGVncmFsOwogICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdF9hdXgoX19iZWcsIF9fZW5k
LCBfX2EsIF9JbnRlZ3JhbCgpKTsKICAgICAgICB9CgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lu
SXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRl
ciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAg
ICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndk
SXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChfRndkSXRl
ciBfX2VuZCwgX0Z3ZEl0ZXIgX19iZWcsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAg
ICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgogICAgICBzdGF0aWMgX0NoYXJUKgogICAg
ICBfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlIF9fcmVxLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2Mm
IF9fYSk7CgogICAgcHVibGljOgoKICAgICAgc2l6ZV90eXBlCiAgICAgIGNvcHkoX0NoYXJUKiBf
X3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0OwoKICAgICAgdm9p
ZAogICAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcyk7
CgoKICAgICAgY29uc3QgX0NoYXJUKgogICAgICBjX3N0cigpIGNvbnN0CiAgICAgIHsKCiAgICAg
ICAgc2l6ZV90eXBlIF9fbiA9IHRoaXMtPnNpemUoKTsKICAgICAgICB0cmFpdHNfdHlwZTo6YXNz
aWduKF9NX2RhdGEoKVtfX25dLCBfUmVwOjpfU190ZXJtaW5hbCk7CiAgICAgICAgcmV0dXJuIF9N
X2RhdGEoKTsKICAgICAgfQoKICAgICAgY29uc3QgX0NoYXJUKgogICAgICBkYXRhKCkgY29uc3Qg
eyByZXR1cm4gX01fZGF0YSgpOyB9CgogICAgICBhbGxvY2F0b3JfdHlwZQogICAgICBnZXRfYWxs
b2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YXBsdXM7IH0KCiAgICAgIHNpemVfdHlwZQog
ICAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf
X24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgYmFzaWNfc3RyaW5n
JiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+
ZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5
cGUKICAgICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVu
Z3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChfQ2hhclQgX19jLCBzaXpl
X3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChjb25z
dCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5yZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkp
OyB9CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf
dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAg
cmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgo
X19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5
cGUgX19wb3MgPSBucG9zKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0
X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3Bvcywg
X19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29u
c3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7Cgog
ICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6
ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9v
ZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5
cGUKICAgICAgZmluZF9maXJzdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fYywgX19wb3MpOyB9CgogICAgICBzaXpl
X3R5cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVf
dHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9v
ZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUK
ICAgICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNp
emVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihj
b25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgo
X19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoX0NoYXJUIF9fYywg
c2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQo
X19jLCBfX3Bvcyk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihj
b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBf
X3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2Yo
Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJz
dF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190
eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25v
dF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVf
dHlwZQogICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNp
emVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFz
dF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6
ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw
ZSBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uKSBjb25zdDsKICAg
ICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNp
emVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFz
dF9ub3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAg
c2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9f
cG9zID0gbnBvcykgY29uc3Q7CgogICAgICBiYXNpY19zdHJpbmcKICAgICAgc3Vic3RyKHNpemVf
dHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKSBjb25zdAogICAgICB7CiAgICAg
ICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFu
Z2UoImJhc2ljX3N0cmluZzo6c3Vic3RyIik7CiAgICAgICAgcmV0dXJuIGJhc2ljX3N0cmluZygq
dGhpcywgX19wb3MsIF9fbik7CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJlKGNvbnN0
IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0CiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19z
aXplID0gdGhpcy0+c2l6ZSgpOwogICAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6
ZSgpOwogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3NpemUsIF9fb3NpemUpOwoKICAg
ICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpLCBfX3N0ci5kYXRh
KCksIF9fbGVuKTsKICAgICAgICBpZiAoIV9fcikKICAgICAgICAgIF9fciA9IF9fc2l6ZSAtIF9f
b3NpemU7CiAgICAgICAgcmV0dXJuIF9fcjsKICAgICAgfQoKICAgICAgaW50CiAgICAgIGNvbXBh
cmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9f
c3RyKSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNp
emVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICAgIHNp
emVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdDsKCiAgICAgIGludAogICAgICBj
b21wYXJlKGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKCgoKICAgICAgaW50CiAgICAgIGNvbXBh
cmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNv
bnN0OwoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUg
X19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNv
bnN0OwoKICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoKQogICAgOiBfTV9kYXRhcGx1cyhfU19lbXB0
eV9yZXAoKS5fTV9yZWZjb3B5KCksIF9BbGxvYygpKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKICAg
ICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoY29u
c3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU
LF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
X1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNpY19z
dHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAg
ICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgewogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsK
ICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsIF9DaGFyVCBfX3JocykKICAgIHsKICAg
ICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5n
X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9f
c2l6ZV90eXBlOwogICAgICBfX3N0cmluZ190eXBlIF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIu
YXBwZW5kKF9fc2l6ZV90eXBlKDEpLCBfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0K
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4g
X19saHMuY29tcGFyZShfX3JocykgPT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBv
cGVyYXRvcj09KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19y
aHMuY29tcGFyZShfX2xocykgPT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVy
YXRvcj09KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhz
LAogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMu
Y29tcGFyZShfX3JocykgPT0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0
b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywK
ICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAg
ICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19y
aHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSAhPSAwOyB9CgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJl
KF9fcmhzKSA8IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAg
ICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhz
KSA8IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IF9DaGFy
VCogX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+IDA7
IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJu
IF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBv
cGVyYXRvcj4oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19s
aHMsCiAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhz
LmNvbXBhcmUoX19yaHMpID4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv
cj4oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBh
cmUoX19saHMpIDwgMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShj
b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAg
ICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19y
aHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMp
CiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s
aW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAg
ICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAg
eyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPj0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUg
Ym9vbAogICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhz
KSA+PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAg
IGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+
PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgX0NoYXJU
KiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPD0gMDsg
fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBpbmxpbmUgdm9pZAogICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IF9fbGhzLnN3YXAoX19yaHMpOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAgICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYgX19vcywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
IF9faXMsCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m
IF9fc3RyLCBfQ2hhclQgX19kZWxpbSk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08
X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mIF9faXMsCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz4mIF9fc3RyKTsKfQojIDQ3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0
cmluZy5oIiAyIDMKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfYWxn
b3JpdGhtLmgiIDEgMwojIDMxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Fs
Z29yaXRobS5oIiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxn
b2Jhc2UuaCIgMSAzCiMgMzMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfYWxn
b3JpdGhtLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29u
c3RydWN0LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Fs
Z29yaXRobS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3Vu
aW5pdGlhbGl6ZWQuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfYWxnb3JpdGhtLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfdGVtcGJ1Zi5oIiAxIDMKIyAzNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9hbGdvcml0aG0uaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9hbGdvLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Fs
Z28uaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaGVhcC5oIiAx
IDMKIyAzMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9oZWFwLmgiIDMKbmFt
ZXNwYWNlIHN0ZAp7CgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNs
YXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgp2b2lkCl9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICBfRGlzdGFuY2UgX19ob2xlSW5kZXgsIF9EaXN0
YW5jZSBfX3RvcEluZGV4LCBfVHAgX192YWx1ZSkKewogIF9EaXN0YW5jZSBfX3BhcmVudCA9IChf
X2hvbGVJbmRleCAtIDEpIC8gMjsKICB3aGlsZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYm
ICooX19maXJzdCArIF9fcGFyZW50KSA8IF9fdmFsdWUpIHsKICAgICooX19maXJzdCArIF9faG9s
ZUluZGV4KSA9ICooX19maXJzdCArIF9fcGFyZW50KTsKICAgIF9faG9sZUluZGV4ID0gX19wYXJl
bnQ7CiAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICB9CiAgKihfX2ZpcnN0
ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fcHVz
aF9oZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9EaXN0YW5jZSosIF9UcCopCnsKICBfX3B1
c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0
YW5jZSgwKSwKICAgICAgICAgICAgICBfVHAoKihfX2xhc3QgLSAxKSkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgppbmxpbmUgdm9pZApwdXNoX2hlYXAoX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX3B1
c2hfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNl
X3R5cGUoX19maXJzdCksIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwLAogICAg
ICAgICAgY2xhc3MgX0NvbXBhcmU+CnZvaWQKX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAgX0Rpc3RhbmNl
IF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCnsKICBfRGlzdGFuY2Ug
X19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgd2hpbGUgKF9faG9sZUluZGV4ID4g
X190b3BJbmRleCAmJiBfX2NvbXAoKihfX2ZpcnN0ICsgX19wYXJlbnQpLCBfX3ZhbHVlKSkgewog
ICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOwogICAg
X19ob2xlSW5kZXggPSBfX3BhcmVudDsKICAgIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkg
LyAyOwogIH0KICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZSwKICAgICAgICAg
IGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX3B1c2hfaGVhcF9hdXgo
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXAsCiAgICAgICAgICAgICAgICBfRGlz
dGFuY2UqLCBfVHAqKQp7CiAgX19wdXNoX2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKChfX2xhc3Qg
LSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2UoMCksCiAgICAgICAgICAgICAgX1RwKCooX19sYXN0
IC0gMSkpLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
LCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQKcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVy
YXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgX0Nv
bXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19w
dXNoX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wLAogICAgICAgICAgICAgICAgICBf
X2Rpc3RhbmNlX3R5cGUoX19maXJzdCksIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3Mg
X1RwPgp2b2lkCl9fYWRqdXN0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9E
aXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBf
X3ZhbHVlKQp7CiAgX0Rpc3RhbmNlIF9fdG9wSW5kZXggPSBfX2hvbGVJbmRleDsKICBfRGlzdGFu
Y2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRleCArIDI7CiAgd2hpbGUgKF9fc2Vjb25k
Q2hpbGQgPCBfX2xlbikgewogICAgaWYgKCooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpIDwgKihf
X2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpCiAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAg
ICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwog
ICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkOwogICAgX19zZWNvbmRDaGlsZCA9IDIgKiAo
X19zZWNvbmRDaGlsZCArIDEpOwogIH0KICBpZiAoX19zZWNvbmRDaGlsZCA9PSBfX2xlbikgewog
ICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQg
LSAxKSk7CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOwogIH0KICBfX3B1c2hf
aGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3Rh
bmNlPgppbmxpbmUgdm9pZApfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0
LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUsIF9EaXN0YW5jZSopCnsKICAqX19yZXN1bHQg
PSAqX19maXJzdDsKICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3Rh
bmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX3BvcF9oZWFwX2F1eChf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFz
dCwKICAgICAgICAgICAgICAgX1RwKikKewogIF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0IC0g
MSwgX19sYXN0IC0gMSwKICAgICAgICAgICAgIF9UcCgqKF9fbGFzdCAtIDEpKSwgX19kaXN0YW5j
ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRv
cj4KaW5saW5lIHZvaWQgcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCnsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX3BvcF9oZWFw
X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAg
IGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQKX19hZGp1c3RfaGVhcChfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAg
IF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKewogIF9EaXN0
YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7CiAgX0Rpc3RhbmNlIF9fc2Vjb25kQ2hpbGQg
PSAyICogX19ob2xlSW5kZXggKyAyOwogIHdoaWxlIChfX3NlY29uZENoaWxkIDwgX19sZW4pIHsK
ICAgIGlmIChfX2NvbXAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCksICooX19maXJzdCArIChf
X3NlY29uZENoaWxkIC0gMSkpKSkKICAgICAgX19zZWNvbmRDaGlsZC0tOwogICAgKihfX2ZpcnN0
ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCk7CiAgICBfX2hvbGVJ
bmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICBfX3NlY29uZENoaWxkID0gMiAqIChfX3NlY29uZENo
aWxkICsgMSk7CiAgfQogIGlmIChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7CiAgICAqKF9fZmly
c3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKTsKICAg
IF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7CiAgfQogIF9fcHVzaF9oZWFwKF9fZmly
c3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlLCBfX2NvbXApOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJl
LAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZApfX3BvcF9oZWFwKF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAog
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUsIF9D
b21wYXJlIF9fY29tcCwKICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgKl9fcmVzdWx0ID0gKl9f
Zmlyc3Q7CiAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShf
X2xhc3QgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgIF9fdmFsdWUsIF9fY29tcCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX0Nv
bXBhcmU+CmlubGluZSB2b2lkCl9fcG9wX2hlYXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2ZpcnN0LAogICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfVHAq
LCBfQ29tcGFyZSBfX2NvbXApCnsKICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9f
bGFzdCAtIDEsIF9UcCgqKF9fbGFzdCAtIDEpKSwgX19jb21wLAogICAgICAgICAgICAgX19kaXN0
YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
YXRvciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkCnBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2ZpcnN0LAogICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBf
Q29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBf
X3BvcF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19j
b21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1Rw
LCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQKX19tYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fZmlyc3QsCiAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9UcCos
IF9EaXN0YW5jZSopCnsKICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDIpIHJldHVybjsKICBfRGlz
dGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogIF9EaXN0YW5jZSBfX3BhcmVudCA9IChf
X2xlbiAtIDIpLzI7CgogIHdoaWxlICh0cnVlKSB7CiAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3Qs
IF9fcGFyZW50LCBfX2xlbiwgX1RwKCooX19maXJzdCArIF9fcGFyZW50KSkpOwogICAgaWYgKF9f
cGFyZW50ID09IDApIHJldHVybjsKICAgIF9fcGFyZW50LS07CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgppbmxpbmUgdm9pZAptYWtlX2hlYXAoX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCnsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX21ha2Vf
aGVhcChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3Qp
LCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZSwKICAgICAgICAgIGNsYXNzIF9UcCwgY2xhc3Mg
X0Rpc3RhbmNlPgp2b2lkCl9fbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0
LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICBfQ29tcGFyZSBfX2Nv
bXAsIF9UcCosIF9EaXN0YW5jZSopCnsKICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDIpIHJldHVy
bjsKICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogIF9EaXN0YW5jZSBfX3Bh
cmVudCA9IChfX2xlbiAtIDIpLzI7CgogIHdoaWxlICh0cnVlKSB7CiAgICBfX2FkanVzdF9oZWFw
KF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwgX1RwKCooX19maXJzdCArIF9fcGFyZW50KSksCiAg
ICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOwog
ICAgX19wYXJlbnQtLTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZAptYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBf
Q29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBf
X21ha2VfaGVhcChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCwKICAgICAgICAgICAgICBfX3ZhbHVl
X3R5cGUoX19maXJzdCksIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CnZvaWQgc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fbGFz
dCAtIF9fZmlyc3QgPiAxKQogICAgcG9wX2hlYXAoX19maXJzdCwgX19sYXN0LS0pOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZApz
b3J0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDEpCiAgICBw
b3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSwgX19jb21wKTsKfQoKfQojIDM1ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMiAzCgoKCm5hbWVzcGFjZSBzdGQKewoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBfX21lZGlhbihjb25zdCBf
VHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0IF9UcCYgX19jKQp7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBpZiAo
X19hIDwgX19iKQogICAgaWYgKF9fYiA8IF9fYykKICAgICAgcmV0dXJuIF9fYjsKICAgIGVsc2Ug
aWYgKF9fYSA8IF9fYykKICAgICAgcmV0dXJuIF9fYzsKICAgIGVsc2UKICAgICAgcmV0dXJuIF9f
YTsKICBlbHNlIGlmIChfX2EgPCBfX2MpCiAgICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fYiA8
IF9fYykKICAgIHJldHVybiBfX2M7CiAgZWxzZQogICAgcmV0dXJuIF9fYjsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSBjb25zdCBfVHAmCl9fbWVkaWFuKGNv
bnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MsIF9Db21wYXJlIF9f
Y29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBpZiAoX19jb21wKF9fYSwgX19iKSkK
ICAgIGlmIChfX2NvbXAoX19iLCBfX2MpKQogICAgICByZXR1cm4gX19iOwogICAgZWxzZSBpZiAo
X19jb21wKF9fYSwgX19jKSkKICAgICAgcmV0dXJuIF9fYzsKICAgIGVsc2UKICAgICAgcmV0dXJu
IF9fYTsKICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAgcmV0dXJuIF9fYTsKICBlbHNl
IGlmIChfX2NvbXAoX19iLCBfX2MpKQogICAgcmV0dXJuIF9fYzsKICBlbHNlCiAgICByZXR1cm4g
X19iOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9GdW5jdGlvbj4KX0Z1
bmN0aW9uIGZvcl9lYWNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9G
dW5jdGlvbiBfX2YpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf
X2ZpcnN0KQogICAgX19mKCpfX2ZpcnN0KTsKICByZXR1cm4gX19mOwp9CgoKCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfSW5wdXRJdGVyIGZpbmQoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3Rh
ZykKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhKCpfX2ZpcnN0ID09IF9fdmFsKSkK
ICAgICsrX19maXJzdDsKICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBfSW5wdXRJdGVyIGZpbmRfaWYoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVy
YXRvcl90YWcpCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgIV9fcHJlZCgqX19maXJz
dCkpCiAgICArK19fZmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgpfUmFuZG9tQWNjZXNzSXRlciBmaW5kKF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgIHJh
bmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S
YW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgPSAoX19s
YXN0IC0gX19maXJzdCkgPj4gMjsKCiAgZm9yICggOyBfX3RyaXBfY291bnQgPiAwIDsgLS1fX3Ry
aXBfY291bnQpIHsKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAg
ICArK19fZmlyc3Q7CgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsK
ICAgICsrX19maXJzdDsKCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0
OwogICAgKytfX2ZpcnN0OwoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmly
c3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgewogIGNh
c2UgMzoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19f
Zmlyc3Q7CiAgY2FzZSAyOgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJz
dDsKICAgICsrX19maXJzdDsKICBjYXNlIDE6CiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJl
dHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMDoKICBkZWZhdWx0OgogICAgcmV0
dXJuIF9fbGFzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xh
c3MgX1ByZWRpY2F0ZT4KX1JhbmRvbUFjY2Vzc0l0ZXIgZmluZF9pZihfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9t
X2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv
bUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAgICA9IChfX2xhc3Qg
LSBfX2ZpcnN0KSA+PiAyOwoKICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9j
b3VudCkgewogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytf
X2ZpcnN0OwoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsr
X19maXJzdDsKCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAr
K19fZmlyc3Q7CgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAg
KytfX2ZpcnN0OwogIH0KCiAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsKICBjYXNlIDM6CiAg
ICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAg
Y2FzZSAyOgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytf
X2ZpcnN0OwogIGNhc2UgMToKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJz
dDsKICAgICsrX19maXJzdDsKICBjYXNlIDA6CiAgZGVmYXVsdDoKICAgIHJldHVybiBfX2xhc3Q7
CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX0lu
cHV0SXRlciBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCiAgcmV0dXJuIGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19pdGVyYXRvcl9jYXRl
Z29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJl
ZGljYXRlPgppbmxpbmUgX0lucHV0SXRlciBmaW5kX2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3By
ZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIGZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBf
X3ByZWQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciBhZGphY2VudF9maW5kKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBpZiAo
X19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gX19sYXN0OwogIF9Gb3J3YXJkSXRlciBfX25l
eHQgPSBfX2ZpcnN0OwogIHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgaWYgKCpfX2Zp
cnN0ID09ICpfX25leHQpCiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgX19maXJzdCA9IF9fbmV4
dDsKICB9CiAgcmV0dXJuIF9fbGFzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyIGFkamFjZW50X2ZpbmQoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBfX2xhc3Q7CiAgX0Zvcndh
cmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KSB7CiAg
ICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkpCiAgICAgIHJldHVybiBfX2Zp
cnN0OwogICAgX19maXJzdCA9IF9fbmV4dDsKICB9CiAgcmV0dXJuIF9fbGFzdDsKfQoKCgoKCgoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1NpemU+CnZvaWQg
Y291bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBf
X3ZhbHVlLAogICAgICAgICAgIF9TaXplJiBfX24pCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKCpfX2ZpcnN0ID09
IF9fdmFsdWUpCiAgICAgICsrX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh
c3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1NpemU+CnZvaWQgY291bnRfaWYoX0lucHV0SXRlciBfX2Zp
cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAg
X1NpemUmIF9fbikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg
KytfX2ZpcnN0KQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICsrX19uOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwPgp0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQpjb3VudChfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpCnsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNl
X3R5cGUgX19uID0gMDsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAg
ICBpZiAoKl9fZmlyc3QgPT0gX192YWx1ZSkKICAgICAgKytfX247CiAgcmV0dXJuIF9fbjsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+CnR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCmNvdW50X2lmKF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkKQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZl
cmVuY2VfdHlwZSBfX24gPSAwOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz
dCkKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICArK19fbjsKICByZXR1cm4gX19uOwp9
CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4K
X0ZvcndhcmRJdGVyMSBzZWFyY2goX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVy
MSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBf
Rm9yd2FyZEl0ZXIyIF9fbGFzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKCgoKICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9PSBfX2xhc3QyKQog
ICAgcmV0dXJuIF9fZmlyc3QxOwoKCiAgX0ZvcndhcmRJdGVyMiBfX3RtcChfX2ZpcnN0Mik7CiAg
KytfX3RtcDsKICBpZiAoX190bXAgPT0gX19sYXN0MikKICAgIHJldHVybiBmaW5kKF9fZmlyc3Qx
LCBfX2xhc3QxLCAqX19maXJzdDIpOwoKCgogIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOwoKICBf
X3AxID0gX19maXJzdDI7ICsrX19wMTsKCiAgX0ZvcndhcmRJdGVyMSBfX2N1cnJlbnQgPSBfX2Zp
cnN0MTsKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgIF9fZmlyc3QxID0gZmlu
ZChfX2ZpcnN0MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsKICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xh
c3QxKQogICAgICByZXR1cm4gX19sYXN0MTsKCiAgICBfX3AgPSBfX3AxOwogICAgX19jdXJyZW50
ID0gX19maXJzdDE7CiAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAgICAgcmV0dXJu
IF9fbGFzdDE7CgogICAgd2hpbGUgKCpfX2N1cnJlbnQgPT0gKl9fcCkgewogICAgICBpZiAoKytf
X3AgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgIGlmICgrK19fY3Vy
cmVudCA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgfQoKICAgICsrX19m
aXJzdDE7CiAgfQogIHJldHVybiBfX2ZpcnN0MTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsIGNsYXNzIF9CaW5hcnlQcmVkPgpfRm9yd2FyZEl0
ZXIxIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEs
CiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRl
cjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWQgX19wcmVkaWNhdGUp
CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKICBpZiAoX19maXJzdDEg
PT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIF9fZmlyc3QxOwoK
CiAgX0ZvcndhcmRJdGVyMiBfX3RtcChfX2ZpcnN0Mik7CiAgKytfX3RtcDsKICBpZiAoX190bXAg
PT0gX19sYXN0MikgewogICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGlj
YXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgKytfX2ZpcnN0MTsKICAgIHJldHVybiBf
X2ZpcnN0MTsKICB9CgoKCiAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7CgogIF9fcDEgPSBfX2Zp
cnN0MjsgKytfX3AxOwoKICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9fZmlyc3QxOwoKICB3
aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz
dDEpIHsKICAgICAgaWYgKF9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAg
ICBicmVhazsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0KICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBf
X2xhc3QxICYmICFfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICsrX19m
aXJzdDE7CiAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgcmV0dXJuIF9fbGFzdDE7
CgogICAgX19wID0gX19wMTsKICAgIF9fY3VycmVudCA9IF9fZmlyc3QxOwogICAgaWYgKCsrX19j
dXJyZW50ID09IF9fbGFzdDEpIHJldHVybiBfX2xhc3QxOwoKICAgIHdoaWxlIChfX3ByZWRpY2F0
ZSgqX19jdXJyZW50LCAqX19wKSkgewogICAgICBpZiAoKytfX3AgPT0gX19sYXN0MikKICAgICAg
ICByZXR1cm4gX19maXJzdDE7CiAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAg
ICAgIHJldHVybiBfX2xhc3QxOwogICAgfQoKICAgICsrX19maXJzdDE7CiAgfQogIHJldHVybiBf
X2ZpcnN0MTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfSW50ZWdl
ciwgY2xhc3MgX1RwPgpfRm9yd2FyZEl0ZXIgc2VhcmNoX24oX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfSW50ZWdlciBfX2Nv
dW50LCBjb25zdCBfVHAmIF9fdmFsKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIGlm
IChfX2NvdW50IDw9IDApCiAgICByZXR1cm4gX19maXJzdDsKICBlbHNlIHsKICAgIF9fZmlyc3Qg
PSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOwogICAgd2hpbGUgKF9fZmlyc3QgIT0gX19s
YXN0KSB7CiAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAgICBfRm9yd2FyZEl0
ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0
ICYmIF9fbiAhPSAwICYmICpfX2kgPT0gX192YWwpIHsKICAgICAgICArK19faTsKICAgICAgICAt
LV9fbjsKICAgICAgfQogICAgICBpZiAoX19uID09IDApCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7
CiAgICAgIGVsc2UKICAgICAgICBfX2ZpcnN0ID0gZmluZChfX2ksIF9fbGFzdCwgX192YWwpOwog
ICAgfQogICAgcmV0dXJuIF9fbGFzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXIsIGNsYXNzIF9JbnRlZ2VyLCBjbGFzcyBfVHAsIGNsYXNzIF9CaW5hcnlQcmVkPgpfRm9yd2Fy
ZEl0ZXIgc2VhcmNoX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25zdCBfVHAmIF9fdmFs
LAogICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWQgX19iaW5hcnlfcHJlZCkKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fY291bnQgPD0gMCkKICAgIHJldHVybiBfX2Zp
cnN0OwogIGVsc2UgewogICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgIGlmIChf
X2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCBfX3ZhbCkpCiAgICAgICAgYnJlYWs7CiAgICAgICsrX19m
aXJzdDsKICAgIH0KICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICBfSW50ZWdl
ciBfX24gPSBfX2NvdW50IC0gMTsKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAg
ICAgICsrX19pOwogICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24gIT0gMCAmJiBfX2Jp
bmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkgewogICAgICAgICsrX19pOwogICAgICAgIC0tX19uOwog
ICAgICB9CiAgICAgIGlmIChfX24gPT0gMCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAg
ZWxzZSB7CiAgICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QpIHsKICAgICAgICAgIGlmIChfX2Jp
bmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICArK19f
aTsKICAgICAgICB9CiAgICAgICAgX19maXJzdCA9IF9faTsKICAgICAgfQogICAgfQogICAgcmV0
dXJuIF9fbGFzdDsKICB9Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNz
IF9Gb3J3YXJkSXRlcjI+Cl9Gb3J3YXJkSXRlcjIgc3dhcF9yYW5nZXMoX0ZvcndhcmRJdGVyMSBf
X2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg
IF9Gb3J3YXJkSXRlcjIgX19maXJzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGZvciAoIDsgX19maXJzdDEgIT0gX19s
YXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgIGl0ZXJfc3dhcChfX2ZpcnN0MSwgX19m
aXJzdDIpOwogIHJldHVybiBfX2ZpcnN0MjsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9VbmFyeU9wZXJhdGlvbj4KX091dHB1dEl0ZXIg
dHJhbnNmb3JtKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1VuYXJ5T3BlcmF0aW9uIF9fdW5h
cnlfb3ApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKCgoKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf
X2ZpcnN0LCArK19fcmVzdWx0KQogICAgKl9fcmVzdWx0ID0gX191bmFyeV9vcCgqX19maXJzdCk7
CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNz
IF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlP
cGVyYXRpb24+Cl9PdXRwdXRJdGVyIHRyYW5zZm9ybShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu
cHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly
c3QyLCBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlP
cGVyYXRpb24gX19iaW5hcnlfb3ApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCgoKICBmb3Ig
KCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIsICsrX19yZXN1
bHQpCiAgICAqX19yZXN1bHQgPSBfX2JpbmFyeV9vcCgqX19maXJzdDEsICpfX2ZpcnN0Mik7CiAg
cmV0dXJuIF9fcmVzdWx0Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
IF9UcD4Kdm9pZCByZXBsYWNlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25l
d192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBmb3Ig
KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoKl9fZmlyc3QgPT0gX19v
bGRfdmFsdWUpCiAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9UcD4Kdm9pZCByZXBsYWNl
X2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCnsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7
ICsrX19maXJzdCkKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAqX19maXJzdCA9IF9f
bmV3X3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0
ZXIsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgcmVwbGFjZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJz
dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFs
dWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBm
b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAqX19y
ZXN1bHQgPSAqX19maXJzdCA9PSBfX29sZF92YWx1ZSA/IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7
CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg
X091dHB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgcmVw
bGFjZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVl
KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m
aXJzdCwgKytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9IF9fcHJlZCgqX19maXJzdCkgPyBfX25l
d192YWx1ZSA6ICpfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfR2VuZXJhdG9yPgp2b2lkIGdlbmVyYXRlKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBfR2VuZXJhdG9yIF9fZ2VuKQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0
KQogICAgKl9fZmlyc3QgPSBfX2dlbigpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX091dHB1dEl0ZXIs
IGNsYXNzIF9TaXplLCBjbGFzcyBfR2VuZXJhdG9yPgpfT3V0cHV0SXRlciBnZW5lcmF0ZV9uKF9P
dXRwdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgX0dlbmVyYXRvciBfX2dlbikKewoKCgoKCgog
IGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19maXJzdCkKICAgICpfX2ZpcnN0ID0gX19nZW4o
KTsKICByZXR1cm4gX19maXJzdDsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh
c3MgX091dHB1dEl0ZXIsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgcmVtb3ZlX2NvcHkoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
X091dHB1dEl0ZXIgX19yZXN1bHQsIGNvbnN0IF9UcCYgX192YWx1ZSkKewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlm
ICghKCpfX2ZpcnN0ID09IF9fdmFsdWUpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0Owog
ICAgICArK19fcmVzdWx0OwogICAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfT3V0
cHV0SXRlciByZW1vdmVfY29weV9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1By
ZWRpY2F0ZSBfX3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKCFfX3ByZWQoKl9fZmlyc3QpKSB7CiAgICAgICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICArK19fcmVzdWx0OwogICAgfQogIHJldHVybiBfX3Jl
c3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgpfRm9yd2Fy
ZEl0ZXIgcmVtb3ZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWx1ZSkKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgoKICBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBfX2xhc3Qs
IF9fdmFsdWUpOwogIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogIHJldHVybiBfX2ZpcnN0
ID09IF9fbGFzdCA/IF9fZmlyc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVf
Y29weSgrK19faSwgX19sYXN0LCBfX2ZpcnN0LCBfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyIHJlbW92ZV9pZihf
Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CiAgX19maXJzdCA9IGZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQpOwogIF9Gb3J3YXJk
SXRlciBfX2kgPSBfX2ZpcnN0OwogIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVfY29weV9pZigrK19faSwgX19sYXN0
LCBfX2ZpcnN0LCBfX3ByZWQpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz
cyBfT3V0cHV0SXRlciwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciBfX3VuaXF1ZV9jb3B5KF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9UcCopCnsKCiAgX1RwIF9fdmFsdWUgPSAqX19maXJz
dDsKICAqX19yZXN1bHQgPSBfX3ZhbHVlOwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQog
ICAgaWYgKCEoX192YWx1ZSA9PSAqX19maXJzdCkpIHsKICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0
OwogICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICB9CiAgcmV0dXJuICsrX19yZXN1bHQ7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5l
IF9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y
ZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9pdGVyYXRvcl90
YWcpCnsKCiAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwg
X192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zv
cndhcmRJdGVyIF9fcmVzdWx0LCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewoKICAqX19yZXN1bHQg
PSAqX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmICghKCpfX3Jl
c3VsdCA9PSAqX19maXJzdCkpCiAgICAgICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgcmV0dXJu
ICsrX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0
SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0
SXRlciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xh
c3QpIHJldHVybiBfX3Jlc3VsdDsKICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xh
c3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnko
X19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJ
dGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlLAogICAgICAgICAgY2xhc3MgX1RwPgpfT3V0cHV0
SXRlciBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLCBfVHAqKQp7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBfVHAgX192YWx1ZSA9ICpfX2ZpcnN0Owog
ICpfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBp
ZiAoIV9fYmluYXJ5X3ByZWQoX192YWx1ZSwgKl9fZmlyc3QpKSB7CiAgICAgIF9fdmFsdWUgPSAq
X19maXJzdDsKICAgICAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgfQogIHJldHVybiArK19f
cmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIs
IGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CmlubGluZSBfT3V0cHV0SXRlciBfX3VuaXF1ZV9jb3B5
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9pdGVyYXRvcl90YWcpCnsKCiAgcmV0dXJuIF9f
dW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19iaW5hcnlfcHJlZCwKICAg
ICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGlj
YXRlPgpfRm9yd2FyZEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19y
ZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5h
cnlfcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcp
CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgoKCiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBf
X2xhc3QpCiAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fcmVzdWx0LCAqX19maXJzdCkpICorK19f
cmVzdWx0ID0gKl9fZmlyc3Q7CiAgcmV0dXJuICsrX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4K
aW5saW5lIF9PdXRwdXRJdGVyIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf
X3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUg
X19iaW5hcnlfcHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkg
cmV0dXJuIF9fcmVzdWx0OwogIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwg
X19yZXN1bHQsIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRv
cl9jYXRlZ29yeShfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgpf
Rm9yd2FyZEl0ZXIgdW5pcXVlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX2ZpcnN0ID0gYWRqYWNlbnRf
ZmluZChfX2ZpcnN0LCBfX2xhc3QpOwogIHJldHVybiB1bmlxdWVfY29weShfX2ZpcnN0LCBfX2xh
c3QsIF9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQmlu
YXJ5UHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIgdW5pcXVlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUg
X19iaW5hcnlfcHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIF9fZmlyc3Qg
PSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCwgX19iaW5hcnlfcHJlZCk7CiAgcmV0dXJu
IHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCwgX19iaW5hcnlfcHJlZCk7Cn0K
CgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcj4Kdm9pZCBfX3JldmVyc2UoX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKSB7CiAgd2hpbGUgKHRydWUpCiAg
ICBpZiAoX19maXJzdCA9PSBfX2xhc3QgfHwgX19maXJzdCA9PSAtLV9fbGFzdCkKICAgICAgcmV0
dXJuOwogICAgZWxzZQogICAgICBpdGVyX3N3YXAoX19maXJzdCsrLCBfX2xhc3QpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CnZvaWQgX19yZXZlcnNlKF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpIHsKICB3aGlsZSAoX19maXJzdCA8IF9fbGFzdCkK
ICAgIGl0ZXJfc3dhcChfX2ZpcnN0KyssIC0tX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9C
aWRpcmVjdGlvbmFsSXRlcj4KaW5saW5lIHZvaWQgcmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXIg
X19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCiAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRl
Z29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNs
YXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciByZXZlcnNlX2NvcHkoX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdCAh
PSBfX2xhc3QpIHsKICAgIC0tX19sYXN0OwogICAgKl9fcmVzdWx0ID0gKl9fbGFzdDsKICAgICsr
X19yZXN1bHQ7CiAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0V1
Y2xpZGVhblJpbmdFbGVtZW50PgpfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19nY2QoX0V1Y2xpZGVh
blJpbmdFbGVtZW50IF9fbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9FdWNsaWRlYW5S
aW5nRWxlbWVudCBfX24pCnsKICB3aGlsZSAoX19uICE9IDApIHsKICAgIF9FdWNsaWRlYW5SaW5n
RWxlbWVudCBfX3QgPSBfX20gJSBfX247CiAgICBfX20gPSBfX247CiAgICBfX24gPSBfX3Q7CiAg
fQogIHJldHVybiBfX207Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9E
aXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9fcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAg
ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j
ZSosCiAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewogIGlmIChf
X2ZpcnN0ID09IF9fbWlkZGxlKQogICAgcmV0dXJuIF9fbGFzdDsKICBpZiAoX19sYXN0ID09IF9f
bWlkZGxlKQogICAgcmV0dXJuIF9fZmlyc3Q7CgogIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiA9IF9f
bWlkZGxlOwogIGRvIHsKICAgIHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgaWYg
KF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICAgIF9fbWlkZGxlID0gX19maXJzdDI7CiAgfSB3aGls
ZSAoX19maXJzdDIgIT0gX19sYXN0KTsKCiAgX0ZvcndhcmRJdGVyIF9fbmV3X21pZGRsZSA9IF9f
Zmlyc3Q7CgogIF9fZmlyc3QyID0gX19taWRkbGU7CgogIHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xh
c3QpIHsKICAgIHN3YXAgKCpfX2ZpcnN0KyssICpfX2ZpcnN0MisrKTsKICAgIGlmIChfX2ZpcnN0
ID09IF9fbWlkZGxlKQogICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOwogICAgZWxzZSBpZiAoX19m
aXJzdDIgPT0gX19sYXN0KQogICAgICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwogIH0KCiAgcmV0dXJu
IF9fbmV3X21pZGRsZTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNs
YXNzIF9EaXN0YW5jZT4KX0JpZGlyZWN0aW9uYWxJdGVyIF9fcm90YXRlKF9CaWRpcmVjdGlvbmFs
SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSosCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQog
ICAgcmV0dXJuIF9fbGFzdDsKICBpZiAoX19sYXN0ID09IF9fbWlkZGxlKQogICAgcmV0dXJuIF9f
Zmlyc3Q7CgogIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVy
YXRvcl90YWcoKSk7CiAgX19yZXZlcnNlKF9fbWlkZGxlLCBfX2xhc3QsIGJpZGlyZWN0aW9uYWxf
aXRlcmF0b3JfdGFnKCkpOwoKICB3aGlsZSAoX19maXJzdCAhPSBfX21pZGRsZSAmJiBfX21pZGRs
ZSAhPSBfX2xhc3QpCiAgICBzd2FwICgqX19maXJzdCsrLCAqLS1fX2xhc3QpOwoKICBpZiAoX19m
aXJzdCA9PSBfX21pZGRsZSkgewogICAgX19yZXZlcnNlKF9fbWlkZGxlLCBfX2xhc3QsIGJpZGly
ZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogICAgcmV0dXJuIF9fbGFzdDsKICB9CiAgZWxzZSB7
CiAgICBfX3JldmVyc2UoX19maXJzdCwgX19taWRkbGUsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf
dGFnKCkpOwogICAgcmV0dXJuIF9fZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgpfUmFuZG9tQWNjZXNzSXRl
ciBfX3JvdGF0ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBfRGlzdGFuY2UgKiwgX1RwICopCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgog
IF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OwogIF9EaXN0YW5jZSBfX2sgPSBfX21p
ZGRsZSAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9fbCA9IF9fbiAtIF9fazsKICBfUmFuZG9tQWNj
ZXNzSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19taWRkbGUpOwoKICBpZiAo
X19rID09IDApCiAgICByZXR1cm4gX19sYXN0OwoKICBlbHNlIGlmIChfX2sgPT0gX19sKSB7CiAg
ICBzd2FwX3JhbmdlcyhfX2ZpcnN0LCBfX21pZGRsZSwgX19taWRkbGUpOwogICAgcmV0dXJuIF9f
cmVzdWx0OwogIH0KCiAgX0Rpc3RhbmNlIF9fZCA9IF9fZ2NkKF9fbiwgX19rKTsKCiAgZm9yIChf
RGlzdGFuY2UgX19pID0gMDsgX19pIDwgX19kOyBfX2krKykgewogICAgX1RwIF9fdG1wID0gKl9f
Zmlyc3Q7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3AgPSBfX2ZpcnN0OwoKICAgIGlmIChfX2sg
PCBfX2wpIHsKICAgICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19sL19fZDsgX19q
KyspIHsKICAgICAgICBpZiAoX19wID4gX19maXJzdCArIF9fbCkgewogICAgICAgICAgKl9fcCA9
ICooX19wIC0gX19sKTsKICAgICAgICAgIF9fcCAtPSBfX2w7CiAgICAgICAgfQoKICAgICAgICAq
X19wID0gKihfX3AgKyBfX2spOwogICAgICAgIF9fcCArPSBfX2s7CiAgICAgIH0KICAgIH0KCiAg
ICBlbHNlIHsKICAgICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19rL19fZCAtIDE7
IF9faiArKykgewogICAgICAgIGlmIChfX3AgPCBfX2xhc3QgLSBfX2spIHsKICAgICAgICAgICpf
X3AgPSAqKF9fcCArIF9fayk7CiAgICAgICAgICBfX3AgKz0gX19rOwogICAgICAgIH0KCiAgICAg
ICAgKl9fcCA9ICogKF9fcCAtIF9fbCk7CiAgICAgICAgX19wIC09IF9fbDsKICAgICAgfQogICAg
fQoKICAgICpfX3AgPSBfX3RtcDsKICAgICsrX19maXJzdDsKICB9CgogIHJldHVybiBfX3Jlc3Vs
dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlciBy
b3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCiAgcmV0dXJuIF9fcm90YXRlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAg
ICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciByb3RhdGVfY29weShfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAg
ICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCgogIHJldHVybiBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBjb3B5KF9f
bWlkZGxlLCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfRGlzdGFu
Y2U+CmlubGluZSBfRGlzdGFuY2UgX19yYW5kb21fbnVtYmVyKF9EaXN0YW5jZSBfX24pIHsKCiAg
cmV0dXJuIGxyYW5kNDgoKSAlIF9fbjsKCgoKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXI+CmlubGluZSB2b2lkIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19s
YXN0KSByZXR1cm47CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsg
X19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5k
b21fbnVtYmVyKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyLCBjbGFzcyBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgp2b2lkIHJhbmRvbV9z
aHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkg
cmV0dXJuOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAh
PSBfX2xhc3Q7ICsrX19pKQogICAgaXRlcl9zd2FwKF9faSwgX19maXJzdCArIF9fcmFuZCgoX19p
IC0gX19maXJzdCkgKyAxKSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh
c3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KX091dHB1dEl0ZXIgcmFuZG9tX3NhbXBs
ZV9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19vdXQsIGNvbnN0IF9EaXN0YW5jZSBfX24p
CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgoKICBfRGlzdGFuY2UgX19yZW1haW5pbmcgPSAwOwogIGRp
c3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19yZW1haW5pbmcpOwogIF9EaXN0YW5jZSBfX20gPSBt
aW4oX19uLCBfX3JlbWFpbmluZyk7CgogIHdoaWxlIChfX20gPiAwKSB7CiAgICBpZiAoX19yYW5k
b21fbnVtYmVyKF9fcmVtYWluaW5nKSA8IF9fbSkgewogICAgICAqX19vdXQgPSAqX19maXJzdDsK
ICAgICAgKytfX291dDsKICAgICAgLS1fX207CiAgICB9CgogICAgLS1fX3JlbWFpbmluZzsKICAg
ICsrX19maXJzdDsKICB9CiAgcmV0dXJuIF9fb3V0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlLAogICAgICAgICAgY2xh
c3MgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4KX091dHB1dEl0ZXIgcmFuZG9tX3NhbXBsZV9uKF9G
b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19vdXQsIGNvbnN0IF9EaXN0YW5jZSBfX24sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKICBfRGlzdGFuY2UgX19yZW1haW5pbmcgPSAwOwogIGRpc3Rh
bmNlKF9fZmlyc3QsIF9fbGFzdCwgX19yZW1haW5pbmcpOwogIF9EaXN0YW5jZSBfX20gPSBtaW4o
X19uLCBfX3JlbWFpbmluZyk7CgogIHdoaWxlIChfX20gPiAwKSB7CiAgICBpZiAoX19yYW5kKF9f
cmVtYWluaW5nKSA8IF9fbSkgewogICAgICAqX19vdXQgPSAqX19maXJzdDsKICAgICAgKytfX291
dDsKICAgICAgLS1fX207CiAgICB9CgogICAgLS1fX3JlbWFpbmluZzsKICAgICsrX19maXJzdDsK
ICB9CiAgcmV0dXJuIF9fb3V0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KX1JhbmRvbUFjY2Vzc0l0ZXIgX19y
YW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX291dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9EaXN0YW5jZSBfX24pCnsKICBf
RGlzdGFuY2UgX19tID0gMDsKICBfRGlzdGFuY2UgX190ID0gX19uOwogIGZvciAoIDsgX19maXJz
dCAhPSBfX2xhc3QgJiYgX19tIDwgX19uOyArK19fbSwgKytfX2ZpcnN0KQogICAgX19vdXRbX19t
XSA9ICpfX2ZpcnN0OwoKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICsrX190Owog
ICAgX0Rpc3RhbmNlIF9fTSA9IF9fcmFuZG9tX251bWJlcihfX3QpOwogICAgaWYgKF9fTSA8IF9f
bikKICAgICAgX19vdXRbX19NXSA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIH0KCiAgcmV0
dXJuIF9fb3V0ICsgX19tOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1Jh
bmRvbUFjY2Vzc0l0ZXIsCiAgICAgICAgICBjbGFzcyBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCBj
bGFzcyBfRGlzdGFuY2U+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcmFuZG9tX3NhbXBsZShfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBfRGlzdGFuY2UgX19uKQp7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfRGlzdGFuY2Ug
X19tID0gMDsKICBfRGlzdGFuY2UgX190ID0gX19uOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xh
c3QgJiYgX19tIDwgX19uOyArK19fbSwgKytfX2ZpcnN0KQogICAgX19vdXRbX19tXSA9ICpfX2Zp
cnN0OwoKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICsrX190OwogICAgX0Rpc3Rh
bmNlIF9fTSA9IF9fcmFuZChfX3QpOwogICAgaWYgKF9fTSA8IF9fbikKICAgICAgX19vdXRbX19N
XSA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIH0KCiAgcmV0dXJuIF9fb3V0ICsgX19tOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+Cmlu
bGluZSBfUmFuZG9tQWNjZXNzSXRlcgpyYW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXRf
Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0X2xhc3QpCnsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCgogIHJldHVybiBfX3JhbmRvbV9zYW1wbGUoX19maXJzdCwg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfZmlyc3QsIF9fb3V0X2xhc3Qg
LSBfX291dF9maXJzdCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1Jh
bmRvbUFjY2Vzc0l0ZXIsCiAgICAgICAgICBjbGFzcyBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgpp
bmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXIKcmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0
X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX291dF9sYXN0LAogICAgICAgICAgICAgIF9SYW5k
b21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKCiAgcmV0dXJuIF9fcmFuZG9tX3NhbXBsZShfX2ZpcnN0LCBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfX291dF9maXJzdCwgX19yYW5kLAogICAgICAgICAgICAg
ICAgICAgICAgICAgX19vdXRfbGFzdCAtIF9fb3V0X2ZpcnN0KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIgX19wYXJ0aXRp
b24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQs
CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewogIGlmIChf
X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CgogIHdoaWxlIChfX3ByZWQoKl9fZmly
c3QpKQogICAgaWYgKCsrX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwoKICBfRm9y
d2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKCiAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkK
ICAgIGlmIChfX3ByZWQoKl9fbmV4dCkpIHsKICAgICAgc3dhcCgqX19maXJzdCwgKl9fbmV4dCk7
CiAgICAgICsrX19maXJzdDsKICAgIH0KCiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cl9CaWRpcmVjdGlvbmFs
SXRlciBfX3BhcnRpdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQp7CiAgd2hpbGUgKHRydWUp
IHsKICAgIHdoaWxlICh0cnVlKQogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAg
cmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICAg
KytfX2ZpcnN0OwogICAgICBlbHNlCiAgICAgICAgYnJlYWs7CiAgICAtLV9fbGFzdDsKICAgIHdo
aWxlICh0cnVlKQogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIF9f
Zmlyc3Q7CiAgICAgIGVsc2UgaWYgKCFfX3ByZWQoKl9fbGFzdCkpCiAgICAgICAgLS1fX2xhc3Q7
CiAgICAgIGVsc2UKICAgICAgICBicmVhazsKICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3Qp
OwogICAgKytfX2ZpcnN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh
c3MgX1ByZWRpY2F0ZT4KaW5saW5lIF9Gb3J3YXJkSXRlciBwYXJ0aXRpb24oX0ZvcndhcmRJdGVy
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4gX19wYXJ0aXRpb24oX19maXJzdCwg
X19sYXN0LCBfX3ByZWQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9CgoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3MgX0Rpc3RhbmNl
PgpfRm9yd2FyZEl0ZXIgX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRp
Y2F0ZSBfX3ByZWQsIF9EaXN0YW5jZSBfX2xlbikKewogIGlmIChfX2xlbiA9PSAxKQogICAgcmV0
dXJuIF9fcHJlZCgqX19maXJzdCkgPyBfX2xhc3QgOiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBf
X21pZGRsZSA9IF9fZmlyc3Q7CiAgYWR2YW5jZShfX21pZGRsZSwgX19sZW4gLyAyKTsKICByZXR1
cm4gcm90YXRlKF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fZmlyc3QsIF9fbWlkZGxlLCBf
X3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAv
IDIpLAogICAgICAgICAgICAgICAgX19taWRkbGUsCiAgICAgICAgICAgICAgICBfX2lucGxhY2Vf
c3RhYmxlX3BhcnRpdGlvbihfX21pZGRsZSwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAtIF9fbGVuIC8gMikpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX1ByZWRpY2F0
ZSwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9fc3RhYmxlX3BhcnRp
dGlvbl9hZGFwdGl2ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19s
ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19i
dWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNl
IF9fYnVmZmVyX3NpemUpCnsKICBpZiAoX19sZW4gPD0gX19idWZmZXJfc2l6ZSkgewogICAgX0Zv
cndhcmRJdGVyIF9fcmVzdWx0MSA9IF9fZmlyc3Q7CiAgICBfUG9pbnRlciBfX3Jlc3VsdDIgPSBf
X2J1ZmZlcjsKICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgOyArK19fZmlyc3QpCiAgICAg
IGlmIChfX3ByZWQoKl9fZmlyc3QpKSB7CiAgICAgICAgKl9fcmVzdWx0MSA9ICpfX2ZpcnN0Owog
ICAgICAgICsrX19yZXN1bHQxOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgICpfX3Jlc3Vs
dDIgPSAqX19maXJzdDsKICAgICAgICArK19fcmVzdWx0MjsKICAgICAgfQogICAgY29weShfX2J1
ZmZlciwgX19yZXN1bHQyLCBfX3Jlc3VsdDEpOwogICAgcmV0dXJuIF9fcmVzdWx0MTsKICB9CiAg
ZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShf
X21pZGRsZSwgX19sZW4gLyAyKTsKICAgIHJldHVybiByb3RhdGUoX19zdGFibGVfcGFydGl0aW9u
X2FkYXB0aXZlKAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3QsIF9fbWlkZGxlLCBf
X3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLyAyLCBfX2J1ZmZlciwgX19i
dWZmZXJfc2l6ZSksCiAgICAgICAgICAgICAgICAgICAgX19taWRkbGUsCiAgICAgICAgICAgICAg
ICAgICAgX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKAogICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fbWlkZGxlLCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2xlbiAtIF9fbGVuIC8gMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpKTsKICB9Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9UcCwgY2xh
c3MgX0Rpc3RhbmNlPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fc3RhYmxlX3BhcnRpdGlvbl9hdXgo
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9UcCosIF9EaXN0YW5jZSopCnsKICBfVGVtcG9y
YXJ5X2J1ZmZlcjxfRm9yd2FyZEl0ZXIsIF9UcD4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICBp
ZiAoX19idWYuc2l6ZSgpID4gMCkKICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRp
dmUoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9EaXN0YW5jZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX19idWYuc2l6ZSgpKTsK
ICBlbHNlCiAgICByZXR1cm4gX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19maXJzdCwgX19s
YXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh
bmNlKF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIF9Gb3J3YXJkSXRlciBzdGFibGVfcGFydGl0
aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK
ICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gX19maXJzdDsKICBlbHNlCiAgICBy
ZXR1cm4gX19zdGFibGVfcGFydGl0aW9uX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgpfUmFuZG9t
QWNjZXNzSXRlciBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCBf
X3Bpdm90KQp7CiAgd2hpbGUgKHRydWUpIHsKICAgIHdoaWxlICgqX19maXJzdCA8IF9fcGl2b3Qp
CiAgICAgICsrX19maXJzdDsKICAgIC0tX19sYXN0OwogICAgd2hpbGUgKF9fcGl2b3QgPCAqX19s
YXN0KQogICAgICAtLV9fbGFzdDsKICAgIGlmICghKF9fZmlyc3QgPCBfX2xhc3QpKQogICAgICBy
ZXR1cm4gX19maXJzdDsKICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAgKytfX2Zp
cnN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAs
IGNsYXNzIF9Db21wYXJlPgpfUmFuZG9tQWNjZXNzSXRlciBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24o
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90LCBfQ29tcGFyZSBfX2NvbXApCnsKICB3aGls
ZSAodHJ1ZSkgewogICAgd2hpbGUgKF9fY29tcCgqX19maXJzdCwgX19waXZvdCkpCiAgICAgICsr
X19maXJzdDsKICAgIC0tX19sYXN0OwogICAgd2hpbGUgKF9fY29tcChfX3Bpdm90LCAqX19sYXN0
KSkKICAgICAgLS1fX2xhc3Q7CiAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKICAgICAgcmV0
dXJuIF9fZmlyc3Q7CiAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAgICsrX19maXJz
dDsKICB9Cn0KCmNvbnN0IGludCBfX3N0bF90aHJlc2hvbGQgPSAxNjsKCgoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+CnZvaWQgX191bmd1YXJkZWRfbGluZWFy
X2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCkKewogIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbmV4dCA9IF9fbGFzdDsKICAtLV9fbmV4dDsKICB3aGlsZSAoX192YWwgPCAq
X19uZXh0KSB7CiAgICAqX19sYXN0ID0gKl9fbmV4dDsKICAgIF9fbGFzdCA9IF9fbmV4dDsKICAg
IC0tX19uZXh0OwogIH0KICAqX19sYXN0ID0gX192YWw7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX3VuZ3VhcmRl
ZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFsLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CiAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogIC0tX19uZXh0OwogIHdoaWxlIChfX2NvbXAoX192
YWwsICpfX25leHQpKSB7CiAgICAqX19sYXN0ID0gKl9fbmV4dDsKICAgIF9fbGFzdCA9IF9fbmV4
dDsKICAgIC0tX19uZXh0OwogIH0KICAqX19sYXN0ID0gX192YWw7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZCBfX2xpbmVhcl9pbnNl
cnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKikKewogIF9UcCBfX3ZhbCA9ICpfX2xhc3Q7
CiAgaWYgKF9fdmFsIDwgKl9fZmlyc3QpIHsKICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19s
YXN0LCBfX2xhc3QgKyAxKTsKICAgICpfX2ZpcnN0ID0gX192YWw7CiAgfQogIGVsc2UKICAgIF9f
dW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19sYXN0LCBfX3ZhbCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZv
aWQgX19saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCosIF9Db21wYXJl
IF9fY29tcCkKewogIF9UcCBfX3ZhbCA9ICpfX2xhc3Q7CiAgaWYgKF9fY29tcChfX3ZhbCwgKl9f
Zmlyc3QpKSB7CiAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0ICsgMSk7
CiAgICAqX19maXJzdCA9IF9fdmFsOwogIH0KICBlbHNlCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJf
aW5zZXJ0KF9fbGFzdCwgX192YWwsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlcj4Kdm9pZCBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkg
cmV0dXJuOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAh
PSBfX2xhc3Q7ICsrX19pKQogICAgX19saW5lYXJfaW5zZXJ0KF9fZmlyc3QsIF9faSwgX192YWx1
ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj
bGFzcyBfQ29tcGFyZT4Kdm9pZCBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9D
b21wYXJlIF9fY29tcCkKewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogIGZvciAo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19p
KQogICAgX19saW5lYXJfaW5zZXJ0KF9fZmlyc3QsIF9faSwgX192YWx1ZV90eXBlKF9fZmlyc3Qp
LCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9U
cD4Kdm9pZCBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0LCBfVHAqKQp7CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2Zp
cnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQo
X19pLCBfVHAoKl9faSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+Cmlu
bGluZSB2b2lkIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0KSB7CiAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFz
dCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fdW5ndWFyZGVkX2luc2Vy
dGlvbl9zb3J0X2F1eChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCosIF9Db21wYXJlIF9fY29tcCkKewogIGZvciAo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAg
ICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1RwKCpfX2kpLCBfX2NvbXApOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUg
dm9pZCBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJl
IF9fY29tcCkKewogIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0X2F1eChfX2ZpcnN0LCBfX2xh
c3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9f
ZmluYWxfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKewogIGlmIChfX2xh
c3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9f
Zmlyc3QsIF9fZmlyc3QgKyBfX3N0bF90aHJlc2hvbGQpOwogICAgX191bmd1YXJkZWRfaW5zZXJ0
aW9uX3NvcnQoX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCwgX19sYXN0KTsKICB9CiAgZWxzZQog
ICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fZmluYWxfaW5zZXJ0aW9u
X3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CiAgaWYgKF9f
bGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJlc2hvbGQpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQo
X19maXJzdCwgX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCwgX19jb21wKTsKICAgIF9fdW5ndWFy
ZGVkX2luc2VydGlvbl9zb3J0KF9fZmlyc3QgKyBfX3N0bF90aHJlc2hvbGQsIF9fbGFzdCwgX19j
b21wKTsKICB9CiAgZWxzZQogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9f
Y29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4KaW5saW5lIF9TaXplIF9fbGcoX1NpemUg
X19uKQp7CiAgX1NpemUgX19rOwogIGZvciAoX19rID0gMDsgX19uICE9IDE7IF9fbiA+Pj0gMSkg
KytfX2s7CiAgcmV0dXJuIF9fazsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
LCBjbGFzcyBfVHAsIGNsYXNzIF9TaXplPgp2b2lkIF9faW50cm9zb3J0X2xvb3AoX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCwgX1RwKiwKICAgICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQp
CnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9fc3RsX3RocmVzaG9sZCkgewogICAgaWYg
KF9fZGVwdGhfbGltaXQgPT0gMCkgewogICAgICBwYXJ0aWFsX3NvcnQoX19maXJzdCwgX19sYXN0
LCBfX2xhc3QpOwogICAgICByZXR1cm47CiAgICB9CiAgICAtLV9fZGVwdGhfbGltaXQ7CiAgICBf
UmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2Zp
cnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAoX19tZWRpYW4oKl9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0
ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7CiAgICBfX2ludHJvc29ydF9sb29wKF9fY3V0LCBf
X2xhc3QsIChfVHAqKSAwLCBfX2RlcHRoX2xpbWl0KTsKICAgIF9fbGFzdCA9IF9fY3V0OwogIH0K
fQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9T
aXplLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QsIF9UcCosCiAgICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0LCBfQ29t
cGFyZSBfX2NvbXApCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9fc3RsX3RocmVzaG9s
ZCkgewogICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgewogICAgICBwYXJ0aWFsX3NvcnQoX19m
aXJzdCwgX19sYXN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC0t
X19kZXB0aF9saW1pdDsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgX191bmd1
YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9UcChfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwgX19jb21wKSksCiAg
ICAgICBfX2NvbXApOwogICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCAoX1RwKikg
MCwgX19kZXB0aF9saW1pdCwgX19jb21wKTsKICAgIF9fbGFzdCA9IF9fY3V0OwogIH0KfQoKdGVt
cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9pZCBzb3J0KF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCAhPSBfX2xhc3Qp
IHsKICAgIF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgIF9fbGcoX19s
YXN0IC0gX19maXJzdCkgKiAyKTsKICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwg
X19sYXN0KTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3Mg
X0NvbXBhcmU+CmlubGluZSB2b2lkIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkK
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgaWYgKF9fZmly
c3QgIT0gX19sYXN0KSB7CiAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAg
ICAgICBfX2xnKF9fbGFzdCAtIF9fZmlyc3QpICogMiwKICAgICAgICAgICAgICAgICAgICAgX19j
b21wKTsKICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXAp
OwogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CnZvaWQgX19pbnBs
YWNlX3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKewogIGlmIChfX2xhc3QgLSBf
X2ZpcnN0IDwgMTUpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAg
IHJldHVybjsKICB9CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9f
bGFzdCAtIF9fZmlyc3QpIC8gMjsKICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19t
aWRkbGUpOwogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwgX19sYXN0KTsKICBfX21l
cmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2xhc3QgLSBfX21pZGRsZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
ciwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAx
NSkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICBy
ZXR1cm47CiAgfQogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIChfX2xh
c3QgLSBfX2ZpcnN0KSAvIDI7CiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX2NvbXApOwogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwgX19sYXN0LCBf
X2NvbXApOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlIC0gX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyMSwgY2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXIyLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9fbWVy
Z2Vfc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVwX3NpemUpCnsKICBf
RGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsKCiAgd2hpbGUgKF9fbGFzdCAt
IF9fZmlyc3QgPj0gX190d29fc3RlcCkgewogICAgX19yZXN1bHQgPSBtZXJnZShfX2ZpcnN0LCBf
X2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0
ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAgICAgICAgIF9fcmVz
dWx0KTsKICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsKICB9CgogIF9fc3RlcF9zaXplID0gbWlu
KF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwogIG1lcmdlKF9fZmly
c3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3Qs
CiAgICAgICAgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIx
LCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNs
YXNzIF9Db21wYXJlPgp2b2lkIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyMSBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlz
dGFuY2UgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w
KQp7CiAgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7CgogIHdoaWxlIChf
X2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApIHsKICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19m
aXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICBfX2ZpcnN0
ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3R3b19zdGVwLAogICAgICAgICAgICAgICAgICAg
ICBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIF9fZmlyc3QgKz0g
X190d29fc3RlcDsKICB9CiAgX19zdGVwX3NpemUgPSBtaW4oX0Rpc3RhbmNlKF9fbGFzdCAtIF9f
Zmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CgogIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBf
c2l6ZSwKICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAgICAgICBfX3Jl
c3VsdCwKICAgICAgICBfX2NvbXApOwp9Cgpjb25zdCBpbnQgX19zdGxfY2h1bmtfc2l6ZSA9IDc7
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZT4Kdm9p
ZCBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9EaXN0YW5j
ZSBfX2NodW5rX3NpemUpCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5rX3Np
emUpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6
ZSk7CiAgICBfX2ZpcnN0ICs9IF9fY2h1bmtfc2l6ZTsKICB9CiAgX19pbnNlcnRpb25fc29ydChf
X2ZpcnN0LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs
YXNzIF9EaXN0YW5jZSwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19jaHVua19pbnNlcnRpb25fc29y
dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rp
c3RhbmNlIF9fY2h1bmtfc2l6ZSwgX0NvbXBhcmUgX19jb21wKQp7CiAgd2hpbGUgKF9fbGFzdCAt
IF9fZmlyc3QgPj0gX19jaHVua19zaXplKSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qs
IF9fZmlyc3QgKyBfX2NodW5rX3NpemUsIF9fY29tcCk7CiAgICBfX2ZpcnN0ICs9IF9fY2h1bmtf
c2l6ZTsKICB9CiAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNz
IF9EaXN0YW5jZT4Kdm9pZCBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZl
ciwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAg
X1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47CgogIF9EaXN0YW5jZSBf
X3N0ZXBfc2l6ZSA9IF9fc3RsX2NodW5rX3NpemU7CiAgX19jaHVua19pbnNlcnRpb25fc29ydChf
X2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXplKTsKCiAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19s
ZW4pIHsKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19idWZmZXIsIF9f
c3RlcF9zaXplKTsKICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICBfX21lcmdlX3NvcnRfbG9vcChf
X2J1ZmZlciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUpOwogICAgX19zdGVw
X3NpemUgKj0gMjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xh
c3MgX1BvaW50ZXIsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgp2
b2lkIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Q
b2ludGVyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Uq
LCBfQ29tcGFyZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0
OwogIF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOwoKICBfRGlzdGFu
Y2UgX19zdGVwX3NpemUgPSBfX3N0bF9jaHVua19zaXplOwogIF9fY2h1bmtfaW5zZXJ0aW9uX3Nv
cnQoX19maXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKCiAgd2hpbGUgKF9fc3Rl
cF9zaXplIDwgX19sZW4pIHsKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwg
X19idWZmZXIsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgX19zdGVwX3NpemUgKj0gMjsKICAg
IF9fbWVyZ2Vfc29ydF9sb29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0
ZXBfc2l6ZSwgX19jb21wKTsKICAgIF9fc3RlcF9zaXplICo9IDI7CiAgfQp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlzdGFuY2U+
CnZvaWQgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfUG9p
bnRlciBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1
ZmZlcl9zaXplKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAxKSAv
IDI7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgX19sZW47CiAgaWYg
KF9fbGVuID4gX19idWZmZXJfc2l6ZSkgewogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2Zp
cnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19zdGFibGVfc29y
dF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAg
fQogIGVsc2UgewogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxl
LCBfX2J1ZmZlciwgKF9EaXN0YW5jZSopMCk7CiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIo
X19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIChfRGlzdGFuY2UqKTApOwogIH0KICBfX21lcmdl
X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAt
IF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxl
KSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFz
cyBfQ29tcGFyZT4Kdm9pZCBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QsIF9Qb2ludGVyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rp
c3RhbmNlIF9fYnVmZmVyX3NpemUsIF9Db21wYXJlIF9fY29tcCkKewogIF9EaXN0YW5jZSBfX2xl
biA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlk
ZGxlID0gX19maXJzdCArIF9fbGVuOwogIGlmIChfX2xlbiA+IF9fYnVmZmVyX3NpemUpIHsKICAg
IF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1
ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgX19zdGFi
bGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICB9CiAgZWxzZSB7CiAgICBf
X21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCAoX0Rp
c3RhbmNlKikwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIF9f
bWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgKF9EaXN0
YW5jZSopMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgfQogIF9f
bWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9fbWlk
ZGxlIC0gX19maXJzdCksCiAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0gX19t
aWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgIF9fY29t
cCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFz
cyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fc3RhYmxlX3NvcnRfYXV4KF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwgX1RwKiwgX0Rpc3RhbmNlKikKewogIF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5k
b21BY2Nlc3NJdGVyLCBfVHA+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChidWYuYmVnaW4o
KSA9PSAwKQogICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgZWxz
ZQogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoYnVmLnNpemUoKSkpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3Rh
bmNlLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgX19zdGFibGVfc29ydF9hdXgoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9t
QWNjZXNzSXRlciwgX1RwPiBidWYoX19maXJzdCwgX19sYXN0KTsKICBpZiAoYnVmLmJlZ2luKCkg
PT0gMCkKICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7
CiAgZWxzZQogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5i
ZWdpbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoYnVmLnNpemUoKSks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
UmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9fc3Rh
YmxlX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfX3ZhbHVl
X3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmly
c3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFy
ZT4KaW5saW5lIHZvaWQgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBf
X2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIF9f
c3RhYmxlX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfX3Zh
bHVlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9f
Zmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+CnZvaWQgX19wYXJ0aWFsX3NvcnQoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKQp7CiAgbWFrZV9oZWFw
KF9fZmlyc3QsIF9fbWlkZGxlKTsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlk
ZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAgaWYgKCpfX2kgPCAqX19maXJzdCkKICAgICAg
X19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVHAoKl9faSksCiAgICAgICAgICAg
ICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKICBzb3J0X2hlYXAoX19maXJzdCwgX19t
aWRkbGUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lk
IHBhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKCiAgX19wYXJ0aWFsX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9f
bGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fcGFydGlhbF9zb3J0
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAog
ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0NvbXBh
cmUgX19jb21wKQp7CiAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwogIGZv
ciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kp
CiAgICBpZiAoX19jb21wKCpfX2ksICpfX2ZpcnN0KSkKICAgICAgX19wb3BfaGVhcChfX2ZpcnN0
LCBfX21pZGRsZSwgX19pLCBfVHAoKl9faSksIF9fY29tcCwKICAgICAgICAgICAgICAgICBfX2Rp
c3RhbmNlX3R5cGUoX19maXJzdCkpOwogIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19j
b21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFy
ZT4KaW5saW5lIHZvaWQgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19j
b21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBfX3Bh
cnRpYWxfc29ydChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJz
dCksIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLAogICAgICAgICAgY2xhc3MgX1RwPgpfUmFuZG9t
QWNjZXNzSXRlciBfX3BhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3Vs
dF9maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlciBfX3Jlc3VsdF9sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9EaXN0YW5jZSosIF9UcCopCnsKICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRf
bGFzdCkgcmV0dXJuIF9fcmVzdWx0X2xhc3Q7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRf
cmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3QgJiYg
X19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICpfX3Jlc3VsdF9yZWFs
X2xhc3QgPSAqX19maXJzdDsKICAgICsrX19yZXN1bHRfcmVhbF9sYXN0OwogICAgKytfX2ZpcnN0
OwogIH0KICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7CiAg
d2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBpZiAoKl9fZmlyc3QgPCAqX19yZXN1bHRf
Zmlyc3QpCiAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZSgwKSwK
ICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19yZXN1bHRfcmVhbF9sYXN0IC0gX19yZXN1
bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9UcCgqX19maXJzdCkpOwogICAgKytfX2Zp
cnN0OwogIH0KICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7
CiAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXIKcGFy
dGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QpCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHJldHVybiBfX3BhcnRpYWxfc29ydF9jb3B5KF9f
Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fcmVzdWx0X2ZpcnN0KSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21w
YXJlLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJ
dGVyIF9fcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqLCBfVHAqKQp7CiAgaWYgKF9fcmVz
dWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBfX3Jlc3VsdF9sYXN0OwogIF9SYW5k
b21BY2Nlc3NJdGVyIF9fcmVzdWx0X3JlYWxfbGFzdCA9IF9fcmVzdWx0X2ZpcnN0OwogIHdoaWxl
KF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jlc3VsdF9sYXN0
KSB7CiAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9fZmlyc3Q7CiAgICArK19fcmVzdWx0X3Jl
YWxfbGFzdDsKICAgICsrX19maXJzdDsKICB9CiAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBf
X3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29tcCk7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7
CiAgICBpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHRfZmlyc3QpKQogICAgICBfX2FkanVz
dF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2UoMCksCiAgICAgICAgICAgICAgICAgICAg
X0Rpc3RhbmNlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0KSwKICAgICAgICAg
ICAgICAgICAgICBfVHAoKl9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAg
ICArK19fZmlyc3Q7CiAgfQogIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVh
bF9sYXN0LCBfX2NvbXApOwogIHJldHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBh
cmU+CmlubGluZSBfUmFuZG9tQWNjZXNzSXRlcgpwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19yZXN1bHRfbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICByZXR1cm4gX19w
YXJ0aWFsX3NvcnRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3Vs
dF9sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19yZXN1bHRfZmlyc3QpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+CnZvaWQgX19udGhfZWxlbWVu
dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAg
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKikKewogIHdoaWxl
IChfX2xhc3QgLSBfX2ZpcnN0ID4gMykgewogICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQog
ICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpKSkp
OwogICAgaWYgKF9fY3V0IDw9IF9fbnRoKQogICAgICBfX2ZpcnN0ID0gX19jdXQ7CiAgICBlbHNl
CiAgICAgIF9fbGFzdCA9IF9fY3V0OwogIH0KICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9f
bGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQg
bnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19udGgsCiAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkK
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX250aF9lbGVt
ZW50KF9fZmlyc3QsIF9fbnRoLCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFy
ZT4Kdm9pZCBfX250aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LCBfVHAqLCBfQ29tcGFyZSBfX2NvbXApCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+
IDMpIHsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgX191bmd1YXJkZWRfcGFy
dGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcChf
X21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbXApKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29tcCk7CiAgICBpZiAoX19jdXQgPD0gX19udGgpCiAgICAgIF9fZmlyc3QgPSBfX2N1dDsK
ICAgIGVsc2UKICAgICAgX19sYXN0ID0gX19jdXQ7CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQoX19m
aXJzdCwgX19sYXN0LCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIF9fbnRoX2VsZW1lbnQoX19m
aXJzdCwgX19udGgsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2NvbXApOwp9CgoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5j
ZT4KX0ZvcndhcmRJdGVyIF9fbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192
YWwsIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmly
c3QsIF9fbGFzdCwgX19sZW4pOwogIF9EaXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9f
bWlkZGxlOwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwog
ICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAg
IGlmICgqX19taWRkbGUgPCBfX3ZhbCkgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAg
ICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgICBl
bHNlCiAgICAgIF9fbGVuID0gX19oYWxmOwogIH0KICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX0ZvcndhcmRJdGVyIGxv
d2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCnsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9fbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0
LCBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21w
YXJlLCBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX2xvd2VyX2JvdW5kKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXAsIF9EaXN0YW5jZSopCnsK
ICBfRGlzdGFuY2UgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4p
OwogIF9EaXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICB3aGlsZSAo
X19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgX19taWRkbGUgPSBfX2Zp
cnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgIGlmIChfX2NvbXAoKl9fbWlk
ZGxlLCBfX3ZhbCkpIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7
CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogICAgZWxzZQogICAgICBf
X2xlbiA9IF9faGFsZjsKICB9CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSBfRm9yd2FyZEl0
ZXIgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBh
cmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHJl
dHVybiBfX2xvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCwKICAgICAg
ICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJ
dGVyIF9fdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9EaXN0YW5j
ZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwg
X19sZW4pOwogIF9EaXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICB3
aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgX19taWRkbGUg
PSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgIGlmIChfX3ZhbCA8
ICpfX21pZGRsZSkKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICBlbHNlIHsKICAgICAgX19maXJz
dCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hh
bGYgLSAxOwogICAgfQogIH0KICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX0ZvcndhcmRJdGVyIHVwcGVyX2JvdW5kKF9G
b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCiAgcmV0dXJuIF9fdXBwZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwKICAg
ICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBf
RGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX3VwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf
VHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXAsIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19s
ZW4gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogIF9EaXN0YW5jZSBf
X2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAg
ICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5j
ZShfX21pZGRsZSwgX19oYWxmKTsKICAgIGlmIChfX2NvbXAoX192YWwsICpfX21pZGRsZSkpCiAg
ICAgIF9fbGVuID0gX19oYWxmOwogICAgZWxzZSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsK
ICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0K
ICB9CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs
YXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSBfRm9yd2FyZEl0ZXIgdXBwZXJfYm91bmQo
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHJldHVybiBfX3VwcGVyX2Jv
dW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCwKICAgICAgICAgICAgICAgICAgICAg
ICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3
YXJkSXRlcj4KX19lcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy
IF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAg
X0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsK
ICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3Jp
Z2h0OwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAg
X19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgIGlm
ICgqX19taWRkbGUgPCBfX3ZhbCkgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICsr
X19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgICBlbHNl
IGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICBlbHNlIHsK
ICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsIF9fdmFsKTsKICAg
ICAgYWR2YW5jZShfX2ZpcnN0LCBfX2xlbik7CiAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgr
K19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCk7CiAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRl
ciwgX0ZvcndhcmRJdGVyPihfX2xlZnQsIF9fcmlnaHQpOwogICAgfQogIH0KICByZXR1cm4gcGFp
cjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHBhaXI8X0ZvcndhcmRJ
dGVyLCBfRm9yd2FyZEl0ZXI+CmVxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsKQp7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgogIHJldHVybiBfX2VxdWFsX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsCiAg
ICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3Mg
X0Rpc3RhbmNlPgpwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgpfX2VxdWFsX3Jhbmdl
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9f
dmFsLAogICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKikKewogIF9EaXN0
YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rp
c3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVmdCwgX19yaWdodDsK
CiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlk
ZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoX19j
b21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAg
KytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVs
c2UgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgX19sZW4gPSBfX2hhbGY7CiAg
ICBlbHNlIHsKICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsIF9f
dmFsLCBfX2NvbXApOwogICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAgICAgX19yaWdo
dCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3QsIF9fdmFsLCBfX2NvbXApOwogICAg
ICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0
KTsKICAgIH0KICB9CiAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9f
Zmlyc3QsIF9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf
VHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRl
cj4KZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
IGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gX19lcXVhbF9yYW5nZShf
X2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXAsCiAgICAgICAgICAgICAgICAgICAgICAgX19k
aXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX1RwPgpib29sIGJpbmFyeV9zZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgogIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9ib3Vu
ZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhKF9f
dmFsIDwgKl9faSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwg
Y2xhc3MgX0NvbXBhcmU+CmJvb2wgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19maXJzdCwg
X0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWws
CiAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCiAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9f
Zmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCk7CiAgcmV0dXJuIF9faSAhPSBfX2xhc3QgJiYg
IV9fY29tcChfX3ZhbCwgKl9faSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBj
bGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIG1lcmdlKF9J
bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg
ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAg
ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9f
bGFzdDIpIHsKICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgKl9fcmVzdWx0
ID0gKl9fZmlyc3QyOwogICAgICArK19fZmlyc3QyOwogICAgfQogICAgZWxzZSB7CiAgICAgICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0KICAgICsrX19yZXN1
bHQ7CiAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBf
X2xhc3QxLCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNz
IF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJl
PgpfT3V0cHV0SXRlciBtZXJnZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19s
YXN0MSwKICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIy
IF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFy
ZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICB3aGls
ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICBpZiAo
X19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJz
dDI7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0g
Kl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgfQogICAgKytfX3Jlc3VsdDsKICB9CiAg
cmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9f
cmVzdWx0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3Mg
X0Rpc3RhbmNlPgp2b2lkIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVy
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rp
c3RhbmNlIF9fbGVuMikKewogIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKICAgIHJl
dHVybjsKICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAgIGlmICgqX19taWRkbGUgPCAq
X19maXJzdCkKICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgIHJldHVybjsK
ICB9CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgX0Rpc3RhbmNlIF9fbGVuMTEg
PSAwOwogIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAg
ICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEp
OwogICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmly
c3RfY3V0KTsKICAgIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwog
IH0KICBlbHNlIHsKICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgYWR2YW5jZShfX3NlY29u
ZF9jdXQsIF9fbGVuMjIpOwogICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBf
X21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1
dCwgX19sZW4xMSk7CiAgfQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUKICAgID0g
cm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICBfX21lcmdlX3dp
dGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2xlbjExLCBfX2xlbjIyKTsKICBfX21lcmdlX3dpdGhvdXRfYnVm
ZmVyKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEs
CiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFy
ZT4Kdm9pZCBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBf
X2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKICBp
ZiAoX19sZW4xID09IDAgfHwgX19sZW4yID09IDApCiAgICByZXR1cm47CiAgaWYgKF9fbGVuMSAr
IF9fbGVuMiA9PSAyKSB7CiAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgKl9fZmlyc3QpKQogICAg
ICBpdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUpOwogICAgcmV0dXJuOwogIH0KICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogIF9CaWRpcmVjdGlvbmFsSXRlciBf
X3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgX0Rpc3Rh
bmNlIF9fbGVuMjIgPSAwOwogIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgIF9fbGVuMTEgPSBf
X2xlbjEgLyAyOwogICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICBfX3NlY29u
ZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQsIF9fY29t
cCk7CiAgICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICB9CiAg
ZWxzZSB7CiAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0
LCBfX2xlbjIyKTsKICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRk
bGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0
X2N1dCwgX19sZW4xMSk7CiAgfQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUKICAg
ID0gcm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICBfX21lcmdl
X3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVu
MTEsIF9fbGVuMjIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogIF9fbWVyZ2Vf
d2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4x
IC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9f
Y29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlk
aXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgpfQmlkaXJlY3Rpb25h
bEl0ZXIxIF9fcm90YXRlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f
bWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9E
aXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKewogIF9C
aWRpcmVjdGlvbmFsSXRlcjIgX19idWZmZXJfZW5kOwogIGlmIChfX2xlbjEgPiBfX2xlbjIgJiYg
X19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRk
bGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRs
ZSwgX19sYXN0KTsKICAgIHJldHVybiBjb3B5KF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fZmly
c3QpOwogIH0KICBlbHNlIGlmIChfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX19idWZm
ZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgY29weShfX21p
ZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fYnVmZmVy
LCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCk7CiAgfQogIGVsc2UKICAgIHJldHVybiByb3RhdGUoX19m
aXJzdCwgX19taWRkbGUsIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25h
bEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0JpZGly
ZWN0aW9uYWxJdGVyMz4KX0JpZGlyZWN0aW9uYWxJdGVyMyBfX21lcmdlX2JhY2t3YXJkKF9CaWRp
cmVjdGlvbmFsSXRlcjEgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jl
c3VsdCkKewogIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgcmV0dXJuIGNvcHlfYmFja3dh
cmQoX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsKICBpZiAoX19maXJzdDIgPT0gX19sYXN0
MikKICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7
CiAgLS1fX2xhc3QxOwogIC0tX19sYXN0MjsKICB3aGlsZSAodHJ1ZSkgewogICAgaWYgKCpfX2xh
c3QyIDwgKl9fbGFzdDEpIHsKICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsKICAgICAgaWYg
KF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJz
dDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDE7CiAgICB9CiAgICBlbHNl
IHsKICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MjsKICAgICAgaWYgKF9fZmlyc3QyID09IF9f
bGFzdDIpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwg
X19yZXN1bHQpOwogICAgICAtLV9fbGFzdDI7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAg
IGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjMsIGNsYXNzIF9Db21wYXJlPgpfQmlkaXJlY3Rpb25h
bEl0ZXIzIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19s
YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlcjIgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CiAgaWYgKF9fZmlyc3QxID09IF9fbGFz
dDEpCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQp
OwogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19m
aXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAtLV9fbGFzdDE7CiAgLS1fX2xhc3QyOwogIHdo
aWxlICh0cnVlKSB7CiAgICBpZiAoX19jb21wKCpfX2xhc3QyLCAqX19sYXN0MSkpIHsKICAgICAg
Ki0tX19yZXN1bHQgPSAqX19sYXN0MTsKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAg
ICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsICsrX19sYXN0MiwgX19yZXN1bHQp
OwogICAgICAtLV9fbGFzdDE7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKi0tX19yZXN1bHQgPSAq
X19sYXN0MjsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIGNv
cHlfYmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFz
dDI7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFz
cyBfRGlzdGFuY2UsIGNsYXNzIF9Qb2ludGVyPgp2b2lkIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGly
ZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNl
IF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFu
Y2UgX19idWZmZXJfc2l6ZSkKewogIGlmIChfX2xlbjEgPD0gX19sZW4yICYmIF9fbGVuMSA8PSBf
X2J1ZmZlcl9zaXplKSB7CiAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICBtZXJnZShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBf
X21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICB9CiAgZWxzZSBpZiAoX19sZW4yIDw9IF9fYnVm
ZmVyX3NpemUpIHsKICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9f
bGFzdCwgX19idWZmZXIpOwogICAgX19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwg
X19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICB9CiAgZWxzZSB7CiAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogICAg
X0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgICBf
X2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7
CiAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2Zp
cnN0X2N1dCk7CiAgICAgIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMjIp
OwogICAgfQogICAgZWxzZSB7CiAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICBhZHZh
bmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91
bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQpOwogICAgICBkaXN0YW5jZShfX2Zp
cnN0LCBfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICB9CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19uZXdfbWlkZGxlID0KICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlk
ZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAg
ICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIF9fbWVyZ2VfYWRhcHRp
dmUoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwKICAgICAgICAg
ICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19tZXJn
ZV9hZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBf
X2xlbjExLAogICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwg
X19idWZmZXJfc2l6ZSk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVy
LCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Qb2ludGVyLAogICAgICAgICAgY2xhc3MgX0NvbXBh
cmU+CnZvaWQgX19tZXJnZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAg
ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAg
ICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplLAogICAgICAg
ICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CiAgaWYgKF9fbGVuMSA8PSBfX2xlbjIg
JiYgX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9
IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgIG1lcmdlKF9fYnVmZmVyLCBf
X2J1ZmZlcl9lbmQsIF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QsIF9fY29tcCk7CiAgfQogIGVs
c2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfUG9pbnRlciBfX2J1ZmZlcl9l
bmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgIF9fbWVyZ2VfYmFja3dh
cmQoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgX19jb21wKTsKICB9CiAgZWxzZSB7CiAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vj
b25kX2N1dCA9IF9fbWlkZGxlOwogICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogICAgX0Rpc3Rh
bmNlIF9fbGVuMjIgPSAwOwogICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgICBfX2xlbjEx
ID0gX19sZW4xIC8gMjsKICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAg
IF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1
dCwgX19jb21wKTsKICAgICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4y
Mik7CiAgICB9CiAgICBlbHNlIHsKICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgIGFk
dmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9i
b3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19jb21wKTsKICAgICAgZGlz
dGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgfQogICAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9CiAgICAgIF9fcm90YXRlX2FkYXB0aXZlKF9fZmlyc3Rf
Y3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAg
ICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICBfX21l
cmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEs
CiAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBf
X2NvbXApOwogICAgX19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwg
X19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBf
X2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsKICB9Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgpp
bmxpbmUgdm9pZCBfX2lucGxhY2VfbWVyZ2VfYXV4KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21p
ZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuMSA9IDA7CiAgZGlz
dGFuY2UoX19maXJzdCwgX19taWRkbGUsIF9fbGVuMSk7CiAgX0Rpc3RhbmNlIF9fbGVuMiA9IDA7
CiAgZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCwgX19sZW4yKTsKCiAgX1RlbXBvcmFyeV9idWZm
ZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVHA+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYg
KF9fYnVmLmJlZ2luKCkgPT0gMCkKICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwg
X19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIpOwogIGVsc2UKICAgIF9fbWVyZ2VfYWRh
cHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAg
ICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZShfX2J1Zi5zaXplKCkpKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX1RwLAogICAgICAgICAg
Y2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgX19pbnBsYWNlX21l
cmdlX2F1eChfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwgX1RwKiwgX0Rpc3RhbmNl
KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKICBf
RGlzdGFuY2UgX19sZW4xID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sZW4x
KTsKICBfRGlzdGFuY2UgX19sZW4yID0gMDsKICBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0LCBf
X2xlbjIpOwoKICBfVGVtcG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0ZXIsIF9UcD4gX19i
dWYoX19maXJzdCwgX19sYXN0KTsKICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAgX19tZXJn
ZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVu
MiwgX19jb21wKTsKICBlbHNlCiAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxl
LCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdp
bigpLCBfRGlzdGFuY2UoX19idWYuc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgX19jb21w
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcj4KaW5saW5lIHZvaWQgaW5w
bGFjZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbWlk
ZGxlID09IF9fbGFzdCkKICAgIHJldHVybjsKICBfX2lucGxhY2VfbWVyZ2VfYXV4KF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19m
aXJzdCksIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlk
aXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBpbnBsYWNlX21lcmdl
KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUg
fHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgcmV0dXJuOwogIF9faW5wbGFjZV9tZXJnZV9hdXgo
X19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVf
dHlwZShfX2ZpcnN0KSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAg
ICAgICAgX19jb21wKTsKfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNz
IF9JbnB1dEl0ZXIyPgpib29sIGluY2x1ZGVzKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ
dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJ
dGVyMiBfX2xhc3QyKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUg
KF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmICgqX19m
aXJzdDIgPCAqX19maXJzdDEpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGVsc2UgaWYoKl9fZmly
c3QxIDwgKl9fZmlyc3QyKQogICAgICArK19fZmlyc3QxOwogICAgZWxzZQogICAgICArK19fZmly
c3QxLCArK19fZmlyc3QyOwoKICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0NvbXBhcmU+
CmJvb2wgaW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEs
CiAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIs
IF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICB3
aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYg
KF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGVs
c2UgaWYoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgKytfX2ZpcnN0MTsKICAg
IGVsc2UKICAgICAgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsKCiAgcmV0dXJuIF9fZmlyc3QyID09
IF9fbGFzdDI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRl
cjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBzZXRfdW5pb24oX0lucHV0SXRlcjEg
X19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICBfSW5w
dXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xh
c3QyKSB7CiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICpfX3Jlc3VsdCA9
ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0KICAgIGVsc2UgaWYgKCpfX2ZpcnN0
MiA8ICpfX2ZpcnN0MSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19m
aXJzdDI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAg
ICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogICAgKytfX3Jlc3VsdDsKICB9
CiAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEs
IF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0
SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+Cl9PdXRw
dXRJdGVyIHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0
MSwKICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVy
MiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9D
b21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgog
IHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAg
IGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpf
X2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0KICAgIGVsc2UgaWYgKF9fY29tcCgqX19m
aXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAr
K19fZmlyc3QyOwogICAgfQogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsK
ICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgICsrX19yZXN1bHQ7
CiAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xh
c3QxLCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9J
bnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIgc2V0X2ludGVyc2VjdGlv
bihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0
MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fZmlyc3QxICE9
IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmICgqX19maXJzdDEgPCAqX19m
aXJzdDIpCiAgICAgICsrX19maXJzdDE7CiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJz
dDEpCiAgICAgICsrX19maXJzdDI7CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmly
c3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgICArK19fcmVzdWx0
OwogICAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIx
LCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBf
Q29tcGFyZT4KX091dHB1dEl0ZXIgc2V0X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0
MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5w
dXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9f
bGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAq
X19maXJzdDIpKQogICAgICArK19fZmlyc3QxOwogICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0
MiwgKl9fZmlyc3QxKSkKICAgICAgKytfX2ZpcnN0MjsKICAgIGVsc2UgewogICAgICAqX19yZXN1
bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICAg
ICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1
dEl0ZXIgc2V0X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9f
bGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBf
SW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hp
bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmICgq
X19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAg
ICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSBpZiAoKl9fZmly
c3QyIDwgKl9fZmlyc3QxKQogICAgICArK19fZmlyc3QyOwogICAgZWxzZSB7CiAgICAgICsrX19m
aXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9f
bGFzdDEsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBf
SW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4K
X091dHB1dEl0ZXIgc2V0X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0
ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly
c3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0
cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz
dDIgIT0gX19sYXN0MikKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAg
ICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX3Jl
c3VsdDsKICAgIH0KICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAg
ICAgICsrX19maXJzdDI7CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2Zp
cnN0MjsKICAgIH0KICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBf
T3V0cHV0SXRlcj4KX091dHB1dEl0ZXIKc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0
ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz
dDIgIT0gX19sYXN0MikKICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgKl9f
cmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0Owog
ICAgfQogICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICpfX3Jlc3Vs
dCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0K
ICAgIGVsc2UgewogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogIHJl
dHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jl
c3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIy
LCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRl
cgpzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0
ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0
MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ
dGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgd2hpbGUgKF9fZmlyc3Qx
ICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmIChfX2NvbXAoKl9fZmly
c3QxLCAqX19maXJzdDIpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytf
X2ZpcnN0MTsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICAgIGVsc2UgaWYgKF9fY29tcCgqX19m
aXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAr
K19fZmlyc3QyOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSB7CiAgICAgICsrX19m
aXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9f
bGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0KCgoKCnRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciBtYXhfZWxlbWVudChfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgog
IGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9f
cmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmICgq
X19yZXN1bHQgPCAqX19maXJzdCkKICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHJldHVybiBf
X3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0NvbXBhcmU+
Cl9Gb3J3YXJkSXRlciBtYXhfZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2Zp
cnN0OwogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJz
dCAhPSBfX2xhc3QpCiAgICBpZiAoX19jb21wKCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSBfX3Jlc3Vs
dCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyPgpfRm9yd2FyZEl0ZXIgbWluX2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G
b3J3YXJkSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9
PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmly
c3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoKl9fZmlyc3QgPCAqX19y
ZXN1bHQpCiAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9Db21wYXJlPgpfRm9yd2FyZEl0ZXIg
bWluX2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CgoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICBfRm9yd2Fy
ZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQog
ICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0KSkKICAgICAgX19yZXN1bHQgPSBfX2Zp
cnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv
bmFsSXRlcj4KYm9vbCBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0
LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwog
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICsrX19pOwogIGlmIChfX2kgPT0g
X19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9faSA9IF9fbGFzdDsKICAtLV9faTsKCiAgZm9y
KDs7KSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgIC0tX19pOwogICAg
aWYgKCpfX2kgPCAqX19paSkgewogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0
OwogICAgICB3aGlsZSAoISgqX19pIDwgKi0tX19qKSkKICAgICAgICB7fQogICAgICBpdGVyX3N3
YXAoX19pLCBfX2opOwogICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgIHJldHVybiB0
cnVlOwogICAgfQogICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgIHJldmVyc2UoX19maXJz
dCwgX19sYXN0KTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNs
YXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0NvbXBhcmU+CmJvb2wgbmV4dF9wZXJtdXRh
dGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICBy
ZXR1cm4gZmFsc2U7CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgKytfX2k7
CiAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX19pID0gX19sYXN0Owog
IC0tX19pOwoKICBmb3IoOzspIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwog
ICAgLS1fX2k7CiAgICBpZiAoX19jb21wKCpfX2ksICpfX2lpKSkgewogICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICB3aGlsZSAoIV9fY29tcCgqX19pLCAqLS1fX2op
KQogICAgICAgIHt9CiAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgIHJldmVyc2UoX19p
aSwgX19sYXN0KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoX19pID09IF9fZmly
c3QpIHsKICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICByZXR1cm4gZmFsc2U7
CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgpib29sIHBy
ZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFs
SXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBp
ZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9faSA9IF9fZmlyc3Q7CiAgKytfX2k7CiAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICByZXR1
cm4gZmFsc2U7CiAgX19pID0gX19sYXN0OwogIC0tX19pOwoKICBmb3IoOzspIHsKICAgIF9CaWRp
cmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgLS1fX2k7CiAgICBpZiAoKl9faWkgPCAqX19p
KSB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgIHdoaWxlICgh
KCotLV9faiA8ICpfX2kpKQogICAgICAgIHt9CiAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAg
ICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBp
ZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAg
ICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9u
YWxJdGVyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlv
bmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICArK19faTsKICBpZiAoX19pID09IF9f
bGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBfX2xhc3Q7CiAgLS1fX2k7CgogIGZvcig7
OykgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAtLV9faTsKICAgIGlm
IChfX2NvbXAoKl9faWksICpfX2kpKSB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBf
X2xhc3Q7CiAgICAgIHdoaWxlICghX19jb21wKCotLV9faiwgKl9faSkpCiAgICAgICAge30KICAg
ICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAg
ICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICByZXZl
cnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Cn0KCgoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0lucHV0SXRl
ciBmaW5kX2ZpcnN0X29mKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJ
dGVyIF9fbGFzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgZm9yICggOyBf
X2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxKQogICAgZm9yIChfRm9yd2FyZEl0ZXIgX19p
dGVyID0gX19maXJzdDI7IF9faXRlciAhPSBfX2xhc3QyOyArK19faXRlcikKICAgICAgaWYgKCpf
X2ZpcnN0MSA9PSAqX19pdGVyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICByZXR1cm4gX19s
YXN0MTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0lucHV0SXRlciBmaW5kX2ZpcnN0X29mKF9JbnB1dEl0
ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg
IF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19f
Zmlyc3QxKQogICAgZm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRlciAh
PSBfX2xhc3QyOyArK19faXRlcikKICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2l0ZXIp
KQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICByZXR1cm4gX19sYXN0MTsKfQojIDMzOTAgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgpfRm9yd2FyZEl0ZXIxIF9fZmlu
ZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVy
MiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcs
IGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICBy
ZXR1cm4gX19sYXN0MTsKICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlcjEgX19yZXN1bHQgPSBfX2xh
c3QxOwogICAgd2hpbGUgKDEpIHsKICAgICAgX0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQKICAg
ICAgICA9IHNlYXJjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwogICAg
ICBpZiAoX19uZXdfcmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fcmVzdWx0Owog
ICAgICBlbHNlIHsKICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICBfX2Zp
cnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICArK19fZmlyc3QxOwogICAgICB9CiAgICB9CiAg
fQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwK
ICAgICAgICAgIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlcjEgX19maW5kX2Vu
ZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9f
bGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZywgZm9y
d2FyZF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGlj
YXRlIF9fY29tcCkKewogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIF9fbGFz
dDE7CiAgZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgIHdo
aWxlICgxKSB7CiAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgPSBzZWFy
Y2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOwogICAgICBp
ZiAoX19uZXdfcmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAg
ICBlbHNlIHsKICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICBfX2ZpcnN0
MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICArK19fZmlyc3QxOwogICAgICB9CiAgICB9CiAgfQp9
CgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlv
bmFsSXRlcjI+Cl9CaWRpcmVjdGlvbmFsSXRlcjEKX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0
ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAog
ICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIxPiBf
UmV2SXRlcjE7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+
IF9SZXZJdGVyMjsKCiAgX1Jldkl0ZXIxIF9fcmxhc3QxKF9fZmlyc3QxKTsKICBfUmV2SXRlcjIg
X19ybGFzdDIoX19maXJzdDIpOwogIF9SZXZJdGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0
ZXIxKF9fbGFzdDEpLCBfX3JsYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S
ZXZJdGVyMihfX2xhc3QyKSwgX19ybGFzdDIpOwoKICBpZiAoX19ycmVzdWx0ID09IF9fcmxhc3Qx
KQogICAgcmV0dXJuIF9fbGFzdDE7CiAgZWxzZSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f
cmVzdWx0ID0gX19ycmVzdWx0LmJhc2UoKTsKICAgIGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0YW5j
ZShfX2ZpcnN0MiwgX19sYXN0MikpOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KfQoKdGVtcGxh
dGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIs
CiAgICAgICAgICBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpfQmlkaXJlY3Rpb25hbEl0ZXIxCl9f
ZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVy
MSBfX2xhc3QxLAogICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRp
cmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
X3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgX0JpbmFyeVByZWRp
Y2F0ZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVy
MT4gX1Jldkl0ZXIxOwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0
ZXIyPiBfUmV2SXRlcjI7CgogIF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAgX1Jldkl0
ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9S
ZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfUmV2SXRlcjIoX19sYXN0MiksIF9fcmxhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19jb21wKTsKCiAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgIHJldHVybiBf
X2xhc3QxOwogIGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9IF9fcnJl
c3VsdC5iYXNlKCk7CiAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19maXJzdDIsIF9f
bGFzdDIpKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+CmlubGluZSBfRm9yd2FyZEl0ZXIxCmZp
bmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAg
ICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyKQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICByZXR1cm4gX19maW5kX2VuZChf
X2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAg
X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSksCiAgICAgICAgICAgICAgICAgICAgX19pdGVy
YXRvcl9jYXRlZ29yeShfX2ZpcnN0MikpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
MSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+
CmlubGluZSBfRm9yd2FyZEl0ZXIxCmZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9G
b3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0Zv
cndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgcmV0dXJuIF9fZmluZF9lbmQo
X19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAg
IF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAogICAgICAgICAgICAgICAgICAgIF9faXRl
cmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpLAogICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0K
CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZT4K
Ym9vbCBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX0Rpc3RhbmNlIF9fbikK
ewogIF9EaXN0YW5jZSBfX3BhcmVudCA9IDA7CiAgZm9yIChfRGlzdGFuY2UgX19jaGlsZCA9IDE7
IF9fY2hpbGQgPCBfX247ICsrX19jaGlsZCkgewogICAgaWYgKF9fZmlyc3RbX19wYXJlbnRdIDwg
X19maXJzdFtfX2NoaWxkXSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKChfX2NoaWxkICYg
MSkgPT0gMCkKICAgICAgKytfX3BhcmVudDsKICB9CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfU3RyaWN0
V2Vha09yZGVyaW5nPgpib29sIF9faXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf
U3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCwKICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbikK
ewogIF9EaXN0YW5jZSBfX3BhcmVudCA9IDA7CiAgZm9yIChfRGlzdGFuY2UgX19jaGlsZCA9IDE7
IF9fY2hpbGQgPCBfX247ICsrX19jaGlsZCkgewogICAgaWYgKF9fY29tcChfX2ZpcnN0W19fcGFy
ZW50XSwgX19maXJzdFtfX2NoaWxkXSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICgoX19j
aGlsZCAmIDEpID09IDApCiAgICAgICsrX19wYXJlbnQ7CiAgfQogIHJldHVybiB0cnVlOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSBib29sIGlzX2hlYXAoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgcmV0dXJuIF9faXNfaGVhcChfX2ZpcnN0
LCBfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
ciwgY2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4KaW5saW5lIGJvb2wgaXNfaGVhcChfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgoKCiAgcmV0dXJuIF9faXNfaGVhcChfX2ZpcnN0LCBfX2NvbXAsIF9f
bGFzdCAtIF9fZmlyc3QpOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KYm9v
bCBpc19zb3J0ZWQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4g
dHJ1ZTsKCiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgZm9yICgrK19fbmV4dDsg
X19uZXh0ICE9IF9fbGFzdDsgX19maXJzdCA9IF9fbmV4dCwgKytfX25leHQpIHsKICAgIGlmICgq
X19uZXh0IDwgKl9fZmlyc3QpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CgogIHJldHVybiB0cnVl
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU3RyaWN0V2Vha09yZGVy
aW5nPgpib29sIGlzX3NvcnRlZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCnsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIHRydWU7
CgogIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogIGZvciAoKytfX25leHQ7IF9fbmV4
dCAhPSBfX2xhc3Q7IF9fZmlyc3QgPSBfX25leHQsICsrX19uZXh0KSB7CiAgICBpZiAoX19jb21w
KCpfX25leHQsICpfX2ZpcnN0KSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgcmV0dXJuIHRy
dWU7Cn0KCn0KIyAzNyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9hbGdvcml0
aG0uaCIgMiAzCiMgNTAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5n
LmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcu
dGNjIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmlu
Zy50Y2MiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjb25zdCBfQ2hhclQKICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX1JlcDo6X1NfdGVybWluYWwg
PSBfQ2hhclQoKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjb25zdCB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OgogICAgX1JlcDo6X1NfbWF4X3NpemUgPSAoKChucG9zIC0gc2l6ZW9m
KF9SZXApKS9zaXplb2YoX0NoYXJUKSkgLSAxKSAvIDQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29uc3QgdHlwZW5h
bWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpucG9zOwoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
dHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBl
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfU19lbXB0eV9yZXBf
c3RvcmFnZVsKICAgIChzaXplb2YoX1JlcCkgKyBzaXplb2YoX0NoYXJUKSArIHNpemVvZihzaXpl
X3R5cGUpIC0gMSkvc2l6ZW9mKHNpemVfdHlwZSldOwoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5JdGVyPgogICAgICBfQ2hhclQqCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0lu
SXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICBpbnB1dF9p
dGVyYXRvcl90YWcpCiAgICAgIHsKICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQgJiYgX19hID09
IF9BbGxvYygpKQogICAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsK
CiAgICAgICAgX0NoYXJUIF9fYnVmWzEwMF07CiAgICAgICAgc2l6ZV90eXBlIF9faSA9IDA7CiAg
ICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kICYmIF9faSA8IHNpemVvZihfX2J1ZikgLyBzaXpl
b2YoX0NoYXJUKSkKICAgICAgICAgIHsKICAgICAgICAgICAgX19idWZbX19pKytdID0gKl9fYmVn
OwogICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgfQogICAgICAgIF9SZXAqIF9fciA9IF9S
ZXA6Ol9TX2NyZWF0ZShfX2ksIF9fYSk7CiAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5f
TV9yZWZkYXRhKCksIF9fYnVmLCBfX2kpOwogICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19pOwog
ICAgICAgIHRyeQogICAgICAgICAgewoKCgogICAgICAgICAgICBmb3IgKDs7KQogICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgIF9DaGFyVCogX19wID0gX19yLT5fTV9yZWZkYXRhKCkgKyBf
X3ItPl9NX2xlbmd0aDsKICAgICAgICAgICAgICAgIF9DaGFyVCogX19sYXN0ID0gX19yLT5fTV9y
ZWZkYXRhKCkgKyBfX3ItPl9NX2NhcGFjaXR5OwogICAgICAgICAgICAgICAgZm9yICg7OykKICAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkK
ICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgX19yLT5fTV9s
ZW5ndGggPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
Kl9fcCA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
X19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgaWYgKF9fcCA9PSBfX2xhc3QpCiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAqX19wKysgPSAqX19iZWc7CiAgICAgICAgICAgICAgICAgICAgKytf
X2JlZzsKICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX2xl
biA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAgICAgICAgICAgX1JlcCogX19hbm90
aGVyID0gX1JlcDo6X1NfY3JlYXRlKF9fbGVuICsgMSwgX19hKTsKICAgICAgICAgICAgICAgIHRy
YWl0c190eXBlOjpjb3B5KF9fYW5vdGhlci0+X01fcmVmZGF0YSgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19yLT5fTV9yZWZkYXRhKCksIF9fbGVuKTsKICAgICAgICAgICAg
ICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgICAgICAgX19yID0gX19hbm90aGVy
OwogICAgICAgICAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2xlbjsKICAgICAgICAgICAgICB9
CiAgICAgICAgICB9CiAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgewogICAgICAgICAgICBf
X3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICB9CiAgICAg
ICAgcmV0dXJuIDA7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0luSXRlcj4K
ICAgICAgX0NoYXJUKgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6
CiAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBf
QWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAg
ICB7CiAgICAgICAgc2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oZGlz
dGFuY2UoX19iZWcsIF9fZW5kKSk7CgogICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCAmJiBfX2Eg
PT0gX0FsbG9jKCkpCiAgICAgICAgICByZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgp
OwoKCiAgICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fZG5ldywgX19hKTsKICAg
ICAgICB0cnkKICAgICAgICAgIHsgX1NfY29weV9jaGFycyhfX3ItPl9NX3JlZmRhdGEoKSwgX19i
ZWcsIF9fZW5kKTsgfQogICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgIHsKICAgICAgICAgICAg
X19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAgIHRocm93OwogICAgICAgICAgfQogICAg
ICAgIF9fci0+X01fbGVuZ3RoID0gX19kbmV3OwoKICAgICAgICBfX3ItPl9NX3JlZmRhdGEoKVtf
X2RuZXddID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0
YSgpOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgX0NoYXJUKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxf
VHJhaXRzLCBfQWxsb2M+OjoKICAgIF9TX2NvbnN0cnVjdChzaXplX3R5cGUgX19uLCBfQ2hhclQg
X19jLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIHsKICAgICAgaWYgKF9fbiA9PSAwICYmIF9fYSA9
PSBfQWxsb2MoKSkKICAgICAgICByZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOwoK
CiAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX24sIF9fYSk7CiAgICAgIHRyeQog
ICAgICAgIHsKICAgICAgICAgIGlmIChfX24pCiAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3Np
Z24oX19yLT5fTV9yZWZkYXRhKCksIF9fbiwgX19jKTsKICAgICAgICB9CiAgICAgIGNhdGNoKC4u
LikKICAgICAgICB7CiAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgIHRo
cm93OwogICAgICAgIH0KICAgICAgX19yLT5fTV9sZW5ndGggPSBfX247CiAgICAgIF9fci0+X01f
cmVmZGF0YSgpW19fbl0gPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgcmV0dXJuIF9fci0+X01f
cmVmZGF0YSgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAg
ICA6IF9NX2RhdGFwbHVzKF9fc3RyLl9NX3JlcCgpLT5fTV9ncmFiKF9BbGxvYygpLCBfX3N0ci5n
ZXRfYWxsb2NhdG9yKCkpLAogICAgICAgICAgICAgICAgIF9fc3RyLmdldF9hbGxvY2F0b3IoKSkK
ICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhf
U19jb25zdHJ1Y3Qoc2l6ZV90eXBlKCksIF9DaGFyVCgpLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2lj
X3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVf
dHlwZSBfX24pCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3N0ci5fTV9jaGVjayhf
X3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xkKF9fcG9z
LCBfX24pLCBfQWxsb2MoKSksIF9BbGxvYygpKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFz
aWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgIHNpemVf
dHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1
Y3QoX19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19zdHIuX01fZm9sZChfX3BvcywgX19uKSwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmco
Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKQogICAg
OiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zLCBfX3MgKyBfX24sIF9fYSksIF9fYSkKICAg
IHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog
ICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBjb25zdCBfQWxsb2MmIF9fYSkKICAg
IDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fcywgX19zICsgdHJhaXRzX3R5cGU6Omxlbmd0
aChfX3MpLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hh
clQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0
KF9fbiwgX19jLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
CiAgICBiYXNpY19zdHJpbmcoX0lucHV0SXRlciBfX2JlZywgX0lucHV0SXRlciBfX2VuZCwgY29u
c3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX2JlZywgX19l
bmQsIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
Ojphc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIHsKICAgICAgaWYgKF9NX3Jl
cCgpICE9IF9fc3RyLl9NX3JlcCgpKQogICAgICAgIHsKCiAgICAgICAgICBhbGxvY2F0b3JfdHlw
ZSBfX2EgPSB0aGlzLT5nZXRfYWxsb2NhdG9yKCk7CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0g
X19zdHIuX01fcmVwKCktPl9NX2dyYWIoX19hLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpOwogICAg
ICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX190bXAp
OwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX01fZGVz
dHJveShjb25zdCBfQWxsb2MmIF9fYSkgdGhyb3cgKCkKICAgIHsKICAgICAgc2l6ZV90eXBlIF9f
c2l6ZSA9IHNpemVvZihfUmVwKSArIChfTV9jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCk7
CiAgICAgIF9SYXdfYnl0ZXNfYWxsb2MoX19hKS5kZWFsbG9jYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHRoaXMpLCBfX3NpemUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9NX2xlYWtfaGFyZCgpCiAgICB7CiAgICAg
IGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCiAgICAgICAgX01fbXV0YXRlKDAsIDAsIDAp
OwogICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQK
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX01fbXV0YXRl
KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgc2l6ZV90eXBlIF9fbGVuMikKICAg
IHsKICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGNvbnN0
IHNpemVfdHlwZSBfX25ld19zaXplID0gX19vbGRfc2l6ZSArIF9fbGVuMiAtIF9fbGVuMTsKICAg
ICAgY29uc3QgX0NoYXJUKiBfX3NyYyA9IF9NX2RhdGEoKSArIF9fcG9zICsgX19sZW4xOwogICAg
ICBjb25zdCBzaXplX3R5cGUgX19ob3dfbXVjaCA9IF9fb2xkX3NpemUgLSBfX3BvcyAtIF9fbGVu
MTsKCiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgX19uZXdfc2l6ZSA+IGNh
cGFjaXR5KCkpCiAgICAgICAgewoKICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9IGdldF9h
bGxvY2F0b3IoKTsKICAgICAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX25ld19z
aXplLCBfX2EpOwogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAo
X19wb3MpCiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEo
KSwgX01fZGF0YSgpLCBfX3Bvcyk7CiAgICAgICAgICAgICAgaWYgKF9faG93X211Y2gpCiAgICAg
ICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSArIF9fcG9zICsg
X19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zcmMsIF9faG93X211
Y2gpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBfX3ItPl9NX2Rpc3Bvc2UoZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19h
KTsKICAgICAgICAgIF9NX2RhdGEoX19yLT5fTV9yZWZkYXRhKCkpOwogICAgICB9CiAgICAgIGVs
c2UgaWYgKF9faG93X211Y2ggJiYgX19sZW4xICE9IF9fbGVuMikKICAgICAgICB7CgogICAgICAg
ICAgdHJhaXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsIF9fc3JjLCBf
X2hvd19tdWNoKTsKICAgICAgICB9CiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsK
ICAgICAgX01fcmVwKCktPl9NX2xlbmd0aCA9IF9fbmV3X3NpemU7CiAgICAgIF9NX2RhdGEoKVtf
X25ld19zaXplXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwoKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNlcnZlKHNpemVfdHlw
ZSBfX3JlcykKICAgIHsKICAgICAgaWYgKF9fcmVzID4gdGhpcy0+Y2FwYWNpdHkoKSB8fCBfTV9y
ZXAoKS0+X01faXNfc2hhcmVkKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKF9fcmVzID4gdGhp
cy0+bWF4X3NpemUoKSkKICAgICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0
cmluZzo6cmVzZXJ2ZSIpOwogICAgICAgICAgYWxsb2NhdG9yX3R5cGUgX19hID0gZ2V0X2FsbG9j
YXRvcigpOwogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9NX3JlcCgpLT5fTV9jbG9uZShfX2Es
IF9fcmVzIC0gdGhpcy0+c2l6ZSgpKTsKICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9f
YSk7CiAgICAgICAgICBfTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
dm9pZCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpzd2FwKGJhc2ljX3N0
cmluZyYgX19zKQogICAgewogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAg
ICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgaWYgKF9fcy5fTV9yZXAoKS0+
X01faXNfbGVha2VkKCkpCiAgICAgICAgX19zLl9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsK
ICAgICAgaWYgKHRoaXMtPmdldF9hbGxvY2F0b3IoKSA9PSBfX3MuZ2V0X2FsbG9jYXRvcigpKQog
ICAgICAgIHsKICAgICAgICAgIF9DaGFyVCogX190bXAgPSBfTV9kYXRhKCk7CiAgICAgICAgICBf
TV9kYXRhKF9fcy5fTV9kYXRhKCkpOwogICAgICAgICAgX19zLl9NX2RhdGEoX190bXApOwogICAg
ICAgIH0KCiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBiYXNpY19zdHJpbmcgX190bXAx
KF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fcy5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAg
YmFzaWNfc3RyaW5nIF9fdG1wMihfX3MuX01faWJlZ2luKCksIF9fcy5fTV9pZW5kKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAg
ICAqdGhpcyA9IF9fdG1wMjsKICAgICAgICAgIF9fcyA9IF9fdG1wMTsKICAgICAgICB9CiAgICB9
CiMgMzU2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLnRjYyIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcCoK
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX1Nf
Y3JlYXRlKHNpemVfdCBfX2NhcGFjaXR5LCBjb25zdCBfQWxsb2MmIF9fYWxsb2MpCiAgICB7CiAg
ICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmlu
Z190eXBlOwoKCiAgICAgIGlmIChfX2NhcGFjaXR5ID4gX1NfbWF4X3NpemUpCgoKCiAgICAgICAg
X190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6X1NfY3JlYXRlIik7CgoKCgogICAg
ICBzaXplX3QgX19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6
ZW9mKF9SZXApOwoKCiAgICAgIHZvaWQqIF9fcGxhY2UgPSBfUmF3X2J5dGVzX2FsbG9jKF9fYWxs
b2MpLmFsbG9jYXRlKF9fc2l6ZSk7CiAgICAgIF9SZXAgKl9fcCA9IG5ldyAoX19wbGFjZSkgX1Jl
cDsKICAgICAgX19wLT5fTV9jYXBhY2l0eSA9IF9fY2FwYWNpdHk7CiAgICAgIF9fcC0+X01fc2V0
X3NoYXJhYmxlKCk7CiAgICAgIF9fcC0+X01fbGVuZ3RoID0gMDsKICAgICAgcmV0dXJuIF9fcDsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBfQ2hhclQqCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjpfUmVwOjoKICAgIF9NX2Nsb25lKGNvbnN0IF9BbGxvYyYgX19hbGxvYywgc2l6
ZV90eXBlIF9fcmVzKQogICAgewogICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX01f
bGVuZ3RoICsgX19yZXMsIF9fYWxsb2MpOwogICAgICBpZiAoX01fbGVuZ3RoKQogICAgICAgIHsK
ICAgICAgICAgIHRyeQogICAgICAgICAgICB7IHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVm
ZGF0YSgpLCBfTV9yZWZkYXRhKCksIF9NX2xlbmd0aCk7IH0KICAgICAgICAgIGNhdGNoKC4uLikK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2FsbG9jKTsKICAg
ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgX19yLT5fTV9s
ZW5ndGggPSBfTV9sZW5ndGg7CiAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgaW5saW5lIGJvb2wKCgoKCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjpfUmVwOjoKICAgIF9TX2V4Y2Vzc19zbG9wKHNpemVfdCBfX3MsIHNpemVfdCBf
X3IpCgogICAgewogICAgICByZXR1cm4gMiAqIChfX3MgPD0gMTYgPyAxNiA6IF9fcykgPCBfX3I7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6cmVzaXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIGlm
IChfX24gPiBtYXhfc2l6ZSgpKQogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19z
dHJpbmc6OnJlc2l6ZSIpOwogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwog
ICAgICBpZiAoX19zaXplIDwgX19uKQogICAgICAgIHRoaXMtPmFwcGVuZChfX24gLSBfX3NpemUs
IF9fYyk7CiAgICAgIGVsc2UgaWYgKF9fbiA8IF9fc2l6ZSkKICAgICAgICB0aGlzLT5lcmFzZShf
X24pOwoKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01fcmVwbGFjZShpdGVyYXRvciBf
X2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVyIF9fazEsCiAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlciBfX2syLCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAgIHsKICAgICAgICBiYXNpY19z
dHJpbmcgX19zKF9fazEsIF9fazIpOwogICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEs
IF9faTIsIF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSk7CiAgICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OgogICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIs
IF9Gb3J3YXJkSXRlciBfX2sxLAogICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2syLCBm
b3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2RvbGQgPSBf
X2kyIC0gX19pMTsKICAgICAgICBzaXplX3R5cGUgX19kbWF4ID0gdGhpcy0+bWF4X3NpemUoKTsK
ICAgICAgICBzaXplX3R5cGUgX19kbmV3ID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihkaXN0YW5j
ZShfX2sxLCBfX2syKSk7CgogICAgICAgIGlmIChfX2RtYXggPD0gX19kbmV3KQogICAgICAgICAg
X190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6X01fcmVwbGFjZSIpOwogICAgICAg
IHNpemVfdHlwZSBfX29mZiA9IF9faTEgLSBfTV9pYmVnaW4oKTsKICAgICAgICBfTV9tdXRhdGUo
X19vZmYsIF9fZG9sZCwgX19kbmV3KTsKCiAgICAgICAgaWYgKF9fZG5ldykKICAgICAgICAgIF9T
X2NvcHlfY2hhcnMoX01fZGF0YSgpICsgX19vZmYsIF9fazEsIF9fazIpOwoKICAgICAgICByZXR1
cm4gKnRoaXM7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg
ICByZXBsYWNlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19z
dHJpbmcmIF9fc3RyLAogICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19u
MikKICAgIHsKICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MxKSwgX01f
Zm9sZChfX3BvczEsIF9fbjEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9j
aGVjayhfX3BvczIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xkKF9f
cG9zMiwgX19uMikpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0
cyxfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46OgogICAg
YXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICB7CgoKCiAgICAgIHNpemVfdHlw
ZSBfX3NpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fc2l6ZSAr
IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAg
ICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVu
ZCgpLCBfTV9pZW5kKCksIF9fc3RyLl9NX2liZWdpbigpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3N0ci5fTV9pZW5kKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsX1RyYWl0cyxfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxv
Yz46OgogICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bv
cywgc2l6ZV90eXBlIF9fbikKICAgIHsKCgoKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9f
c3RyLnNpemUoKSAtIF9fcG9zLCBfX24pICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4g
PiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICBy
ZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIuX01fY2hlY2so
X19wb3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xkKF9fcG9zLCBf
X24pKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9j
PiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+OjoKICAgIGFwcGVuZChj
b25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgIHsKICAgICAgc2l6ZV90eXBlIF9f
bGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0
eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICByZXR1cm4gdGhpcy0+cmVw
bGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zLCBfX3MgKyBfX24pOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46OgogICAgYXBwZW5kKHNpemVfdHlwZSBfX24sIF9DaGFy
VCBfX2MpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fbiArIHRoaXMtPnNpemUoKTsK
ICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZl
KF9fbGVuKTsKICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgp
LCBfX24sIF9fYyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRz
LF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAg
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fcmhzKQogICAgewog
ICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+IF9fc3RyaW5n
X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9f
c2l6ZV90eXBlOwogICAgICBfX3NpemVfdHlwZSBfX2xlbiA9IF9UcmFpdHM6Omxlbmd0aChfX2xo
cyk7CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHI7CiAgICAgIF9fc3RyLnJlc2VydmUoX19sZW4g
KyBfX3Jocy5zaXplKCkpOwogICAgICBfX3N0ci5hcHBlbmQoX19saHMsIF9fbGhzICsgX19sZW4p
OwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4KICAgIG9wZXJhdG9y
KyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+
JiBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMs
X0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5
cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cjsKICAg
ICAgX19zaXplX3R5cGUgX19sZW4gPSBfX3Jocy5zaXplKCk7CiAgICAgIF9fc3RyLnJlc2VydmUo
X19sZW4gKyAxKTsKICAgICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90eXBlKDEpLCBfX2xocyk7CiAg
ICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEs
IGl0ZXJhdG9yIF9faTIsIHNpemVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQogICAgewogICAgICBz
aXplX3R5cGUgX19uMSA9IF9faTIgLSBfX2kxOwogICAgICBzaXplX3R5cGUgX19vZmYxID0gX19p
MSAtIF9NX2liZWdpbigpOwogICAgICBpZiAobWF4X3NpemUoKSAtICh0aGlzLT5zaXplKCkgLSBf
X24xKSA8PSBfX24yKQogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6
OnJlcGxhY2UiKTsKICAgICAgX01fbXV0YXRlIChfX29mZjEsIF9fbjEsIF9fbjIpOwoKICAgICAg
aWYgKF9fbjIpCiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9kYXRhKCkgKyBfX29mZjEs
IF9fbjIsIF9fYyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29weShfQ2hhclQqIF9fcywgc2l6ZV90
eXBlIF9fbiwgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBpZiAoX19wb3MgPiB0
aGlzLT5zaXplKCkpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6
Y29weSIpOwoKICAgICAgaWYgKF9fbiA+IHRoaXMtPnNpemUoKSAtIF9fcG9zKQogICAgICAgIF9f
biA9IHRoaXMtPnNpemUoKSAtIF9fcG9zOwoKICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCBf
TV9kYXRhKCkgKyBfX3BvcywgX19uKTsKCiAgICAgIHJldHVybiBfX247CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmQoY29uc3QgX0No
YXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAg
ICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90IF9feHBvcyA9
IF9fcG9zOwogICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAgZm9y
ICg7IF9feHBvcyArIF9fbiA8PSBfX3NpemU7ICsrX194cG9zKQogICAgICAgIGlmICh0cmFpdHNf
dHlwZTo6Y29tcGFyZShfX2RhdGEgKyBfX3hwb3MsIF9fcywgX19uKSA9PSAwKQogICAgICAgICAg
cmV0dXJuIF9feHBvczsKICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90
eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6
ZSgpOwogICAgICBzaXplX3R5cGUgX19yZXQgPSBucG9zOwogICAgICBpZiAoX19wb3MgPCBfX3Np
emUpCiAgICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7
CiAgICAgICAgICBzaXplX3R5cGUgX19uID0gX19zaXplIC0gX19wb3M7CiAgICAgICAgICBjb25z
dCBfQ2hhclQqIF9fcCA9IHRyYWl0c190eXBlOjpmaW5kKF9fZGF0YSArIF9fcG9zLCBfX24sIF9f
Yyk7CiAgICAgICAgICBpZiAoX19wKQogICAgICAgICAgICBfX3JldCA9IF9fcCAtIF9fZGF0YTsK
ICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBz
aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlw
ZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX24gPD0gX19zaXplKQogICAgICAg
IHsKICAgICAgICAgIF9fcG9zID0gc3RkOjptaW4oX19zaXplIC0gX19uICxfX3Bvcyk7CiAgICAg
ICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAgICAgIGRvCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19kYXRhICsg
X19wb3MsIF9fcywgX19uKSA9PSAwKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fcG9zOwogICAg
ICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19wb3MtLSA+IDApOwogICAgICAgIH0KICAgICAg
cmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjoKICAgIHJmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAg
IHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6
ZSkKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX194cG9zID0gX19zaXplIC0gMTsKICAgICAg
ICAgIGlmIChfX3hwb3MgPiBfX3BvcykKICAgICAgICAgICAgX194cG9zID0gX19wb3M7CgogICAg
ICAgICAgZm9yICgrK19feHBvczsgX194cG9zLS0gPiAwOyApCiAgICAgICAgICAgIGlmICh0cmFp
dHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBvc10sIF9fYykpCiAgICAgICAgICAgICAgcmV0dXJu
IF9feHBvczsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X29mKGNvbnN0
IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7
CiAgICAgIGZvciAoOyBfX24gJiYgX19wb3MgPCB0aGlzLT5zaXplKCk7ICsrX19wb3MpCiAgICAg
ICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6ZmluZChfX3Ms
IF9fbiwgX01fZGF0YSgpW19fcG9zXSk7CiAgICAgICAgICBpZiAoX19wKQogICAgICAgICAgICBy
ZXR1cm4gX19wb3M7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9sYXN0X29mKGNv
bnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAg
ICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3Np
emUgJiYgX19uKQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQogICAg
ICAgICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3NpemVd
KSkKICAgICAgICAgICAgICAgIHJldHVybiBfX3NpemU7CiAgICAgICAgICAgIH0KICAgICAgICAg
IHdoaWxlIChfX3NpemUtLSAhPSAwKTsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVf
dHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5k
X2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5
cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGZv
ciAoOyBfX24gJiYgX194cG9zIDwgdGhpcy0+c2l6ZSgpOyArK19feHBvcykKICAgICAgICBpZiAo
IXRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX194cG9zXSkpCiAgICAgICAg
ICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9ub3Rfb2YoX0No
YXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3QgX194cG9z
ID0gX19wb3M7CiAgICAgIGZvciAoOyBfX3hwb3MgPCB0aGlzLT5zaXplKCk7ICsrX194cG9zKQog
ICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3hwb3NdLCBfX2MpKQogICAg
ICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2Yo
Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QK
ICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9f
c2l6ZSAmJiBfX24pCiAgICAgICAgewogICAgICAgICAgaWYgKC0tX19zaXplID4gX19wb3MpCiAg
ICAgICAgICAgIF9fc2l6ZSA9IF9fcG9zOwogICAgICAgICAgZG8KICAgICAgICAgICAgewogICAg
ICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3Np
emVdKSkKICAgICAgICAgICAgICAgIHJldHVybiBfX3NpemU7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIHdoaWxlIChfX3NpemUtLSk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5
cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9s
YXN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAg
IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUpCiAgICAg
ICAgewogICAgICAgICAgaWYgKC0tX19zaXplID4gX19wb3MpCiAgICAgICAgICAgIF9fc2l6ZSA9
IF9fcG9zOwogICAgICAgICAgZG8KICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICghdHJh
aXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3NpemVdLCBfX2MpKQogICAgICAgICAgICAgICAgcmV0
dXJuIF9fc2l6ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tKTsKICAg
ICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKHNpemVfdHlwZSBf
X3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3QKICAg
IHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90eXBl
IF9fb3NpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAg
ICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAgICBz
aXplX3R5cGUgX19yc2l6ZT0gbWluKF9fc2l6ZSAtIF9fcG9zLCBfX24pOwogICAgICBzaXplX3R5
cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNf
dHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zdHIuZGF0YSgpLCBfX2xlbik7CiAg
ICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXplOwogICAgICByZXR1
cm4gX19yOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBf
X24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICBzaXplX3R5cGUgX19w
b3MyLCBzaXplX3R5cGUgX19uMikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9
IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBfX3N0ci5zaXplKCk7CiAg
ICAgIGlmIChfX3BvczEgPiBfX3NpemUgfHwgX19wb3MyID4gX19vc2l6ZSkKICAgICAgICBfX3Ro
cm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAgICBzaXplX3R5
cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBfX3BvczEsIF9fbjEpOwogICAgICBzaXplX3R5cGUg
X19yb3NpemUgPSBtaW4oX19vc2l6ZSAtIF9fcG9zMiwgX19uMik7CiAgICAgIHNpemVfdHlwZSBf
X2xlbiA9IG1pbihfX3JzaXplLCBfX3Jvc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlw
ZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvczEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3N0ci5kYXRhKCkgKyBfX3BvczIsIF9fbGVuKTsKICAgICAgaWYgKCFfX3Ip
CiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fcm9zaXplOwogICAgICByZXR1cm4gX19yOwogICAg
fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OgogICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fcykgY29uc3QKICAgIHsKICAgICAgc2l6
ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBl
Ojpjb21wYXJlKF9NX2RhdGEoKSwgX19zLCBfX3NpemUpOwogICAgICBpZiAoIV9fcikKICAgICAg
ICBfX3IgPSBfX3NpemUgLSB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7CiAgICAgIHJldHVybiBf
X3I7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nIDxfQ2hhclQsX1RyYWl0
cyxfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwg
Y29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0
aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICBfX3Rocm93X291
dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAgICBzaXplX3R5cGUgX19v
c2l6ZSA9IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKICAgICAgc2l6ZV90eXBlIF9fcnNpemUg
PSBtaW4oX19zaXplIC0gX19wb3MsIF9fbjEpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4o
X19yc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShf
TV9kYXRhKCkgKyBfX3BvcywgX19zLCBfX2xlbik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9f
ciA9IF9fcnNpemUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19yOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGludAogICAgYmFzaWNfc3RyaW5nIDxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+OjoKICAgIGNvbXBh
cmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAg
ICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19z
aXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgX190
aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90
eXBlIF9fb3NpemUgPSBtaW4odHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpLCBfX24yKTsKICAgICAg
c2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19wb3MsIF9fbjEpOwogICAgICBzaXpl
X3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFp
dHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zLCBfX2xlbik7CiAgICAgIGlm
ICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19y
OwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBf
QWxsb2M+CiAgICB2b2lkCiAgICBfU19zdHJpbmdfY29weShjb25zdCBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0ciwKICAgICAgICAgICAgICAgICAgIF9DaGFyVCog
X19idWYsIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIF9fYnVmc2l6KQogICAgewogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgICAgc2l6ZV90
eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fYnl0ZXMgPSBt
aW4oX19zdHJzaXplLCBfX2J1ZnNpeiAtIDEpOwogICAgICBfVHJhaXRzOjpjb3B5KF9fYnVmLCBf
X3N0ci5kYXRhKCksIF9fYnl0ZXMpOwogICAgICBfX2J1ZltfX2J5dGVzXSA9IF9DaGFyVCgpOwog
ICAgfQp9CiMgNTEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgi
IDIgMwojIDQzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDIg
MwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2N0eXBlLmgiIDEgMwoj
IDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NjdHlwZS5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2N0eXBlLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2N0eXBl
LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI4ICIvdXNyL2lu
Y2x1ZGUvY3R5cGUuaCIgMiAzCgpleHRlcm4gIkMiIHsKIyA0MCAiL3Vzci9pbmNsdWRlL2N0eXBl
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMwojIDQxICIvdXNyL2luY2x1ZGUv
Y3R5cGUuaCIgMiAzCgoKCgoKCmVudW0KewogIF9JU3VwcGVyID0gKCgwKSA8IDggPyAoKDEgPDwg
KDApKSA8PCA4KSA6ICgoMSA8PCAoMCkpID4+IDgpKSwKICBfSVNsb3dlciA9ICgoMSkgPCA4ID8g
KCgxIDw8ICgxKSkgPDwgOCkgOiAoKDEgPDwgKDEpKSA+PiA4KSksCiAgX0lTYWxwaGEgPSAoKDIp
IDwgOCA/ICgoMSA8PCAoMikpIDw8IDgpIDogKCgxIDw8ICgyKSkgPj4gOCkpLAogIF9JU2RpZ2l0
ID0gKCgzKSA8IDggPyAoKDEgPDwgKDMpKSA8PCA4KSA6ICgoMSA8PCAoMykpID4+IDgpKSwKICBf
SVN4ZGlnaXQgPSAoKDQpIDwgOCA/ICgoMSA8PCAoNCkpIDw8IDgpIDogKCgxIDw8ICg0KSkgPj4g
OCkpLAogIF9JU3NwYWNlID0gKCg1KSA8IDggPyAoKDEgPDwgKDUpKSA8PCA4KSA6ICgoMSA8PCAo
NSkpID4+IDgpKSwKICBfSVNwcmludCA9ICgoNikgPCA4ID8gKCgxIDw8ICg2KSkgPDwgOCkgOiAo
KDEgPDwgKDYpKSA+PiA4KSksCiAgX0lTZ3JhcGggPSAoKDcpIDwgOCA/ICgoMSA8PCAoNykpIDw8
IDgpIDogKCgxIDw8ICg3KSkgPj4gOCkpLAogIF9JU2JsYW5rID0gKCg4KSA8IDggPyAoKDEgPDwg
KDgpKSA8PCA4KSA6ICgoMSA8PCAoOCkpID4+IDgpKSwKICBfSVNjbnRybCA9ICgoOSkgPCA4ID8g
KCgxIDw8ICg5KSkgPDwgOCkgOiAoKDEgPDwgKDkpKSA+PiA4KSksCiAgX0lTcHVuY3QgPSAoKDEw
KSA8IDggPyAoKDEgPDwgKDEwKSkgPDwgOCkgOiAoKDEgPDwgKDEwKSkgPj4gOCkpLAogIF9JU2Fs
bnVtID0gKCgxMSkgPCA4ID8gKCgxIDw8ICgxMSkpIDw8IDgpIDogKCgxIDw8ICgxMSkpID4+IDgp
KQp9OwojIDc1ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gX19jb25zdCB1bnNpZ25l
ZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90ICpfX2N0eXBl
X3RvbG93ZXI7CmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqX19jdHlwZV90b3VwcGVyOwojIDkx
ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gaW50IGlzYWxudW0gKGludCkgdGhyb3cg
KCk7CmV4dGVybiBpbnQgaXNhbHBoYSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2NudHJs
IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzZGlnaXQgKGludCkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgaXNsb3dlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2dyYXBoIChpbnQpIHRo
cm93ICgpOwpleHRlcm4gaW50IGlzcHJpbnQgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNw
dW5jdCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3NwYWNlIChpbnQpIHRocm93ICgpOwpl
eHRlcm4gaW50IGlzdXBwZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN4ZGlnaXQgKGlu
dCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBpc2JsYW5rIChpbnQpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGludCB0b2xvd2VyIChpbnQgX19jKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRvdXBwZXIg
KGludCBfX2MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGlzYXNjaWkgKGludCBfX2MpIHRo
cm93ICgpOwoKCgpleHRlcm4gaW50IHRvYXNjaWkgKGludCBfX2MpIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IF90b3VwcGVyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IF90b2xvd2VyIChpbnQp
IHRocm93ICgpOwojIDIxMSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUveGxvY2FsZS5oIiAxIDMKIyAyMTIgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKIyAyMjQg
Ii91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBpbnQgX19pc2FsbnVtX2wgKGludCwgX19s
b2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2FscGhhX2wgKGludCwgX19sb2NhbGVf
dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2NudHJsX2wgKGludCwgX19sb2NhbGVfdCkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgX19pc2RpZ2l0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7
CmV4dGVybiBpbnQgX19pc2xvd2VyX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgX19pc2dyYXBoX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg
X19pc3ByaW50X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3B1
bmN0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3NwYWNlX2wg
KGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3VwcGVyX2wgKGludCwg
X19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3hkaWdpdF9sIChpbnQsIF9fbG9j
YWxlX3QpIHRocm93ICgpOwoKZXh0ZXJuIGludCBfX2lzYmxhbmtfbCAoaW50LCBfX2xvY2FsZV90
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX3RvbG93ZXJfbCAoaW50IF9fYywgX19sb2NhbGVf
dCBfX2wpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX190b3VwcGVyX2wgKGludCBfX2MsIF9fbG9j
YWxlX3QgX19sKSB0aHJvdyAoKTsKIyAyNzcgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCn0KIyAz
OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jY3R5cGUuaCIgMiAzCiMgNTUg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2N0eXBlLmgiIDMKbmFtZXNwYWNl
IHN0ZAp7CiAgdXNpbmcgOjppc2FsbnVtOwogIHVzaW5nIDo6aXNhbHBoYTsKICB1c2luZyA6Omlz
Y250cmw7CiAgdXNpbmcgOjppc2RpZ2l0OwogIHVzaW5nIDo6aXNncmFwaDsKICB1c2luZyA6Omlz
bG93ZXI7CiAgdXNpbmcgOjppc3ByaW50OwogIHVzaW5nIDo6aXNwdW5jdDsKICB1c2luZyA6Omlz
c3BhY2U7CiAgdXNpbmcgOjppc3VwcGVyOwogIHVzaW5nIDo6aXN4ZGlnaXQ7CiAgdXNpbmcgOjp0
b2xvd2VyOwogIHVzaW5nIDo6dG91cHBlcjsKfQojIDQ0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2JpdHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2V4Y2Vw
dGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
ZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFk
X2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgog
IHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlw
ZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19z
KTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv
aWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog
IF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93
X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1l
X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNv
bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBf
X3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQoj
IDQ1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDIgMwoKbmFt
ZXNwYWNlIHN0ZAp7CiMgNTYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVm
d2QuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xh
c3MgdmVjdG9yOwogIGNsYXNzIGxvY2FsZTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIGlubGluZSBib29sCiAgICBpc3NwYWNlKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3ByaW50KF9DaGFy
VCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGlu
ZSBib29sCiAgICBpc2NudHJsKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3VwcGVyKF9DaGFyVCwgY29uc3Qg
bG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAg
ICBpc2xvd2VyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FscGhhKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2RpZ2l0
KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IGlubGluZSBib29sCiAgICBpc3B1bmN0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3hkaWdpdChfQ2hhclQs
IGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUg
Ym9vbAogICAgaXNhbG51bShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNncmFwaChfQ2hhclQsIGNvbnN0IGxv
Y2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAg
ICB0b3VwcGVyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvbG93ZXIoX0NoYXJULCBjb25zdCBsb2NhbGUm
KTsKCgoKICBjbGFzcyBjdHlwZV9iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IGNsYXNzIGN0eXBlOwogIHRlbXBsYXRlPD4gY2xhc3MgY3R5cGU8Y2hhcj47CgogIHRlbXBsYXRl
PD4gY2xhc3MgY3R5cGU8d2NoYXJfdD47CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IGNsYXNzIGN0eXBlX2J5bmFtZTsKCgogIGNsYXNzIGNvZGVjdnRfYmFzZTsKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAg
ICBjbGFzcyBjb2RlY3Z0OwogIHRlbXBsYXRlPD4gY2xhc3MgY29kZWN2dDxjaGFyLCBjaGFyLCBt
YnN0YXRlX3Q+OwoKICB0ZW1wbGF0ZTw+IGNsYXNzIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJz
dGF0ZV90PjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5U
LCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dF9ieW5hbWU7CgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9y
PF9DaGFyVD4gPgogICAgY2xhc3MgbnVtX2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNs
YXNzIG51bV9wdXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcyBudW1wdW5jdDsK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0X2J5bmFtZTsKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGNvbGxhdGU7CiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPiBjbGFzcwogICAgY29sbGF0ZV9ieW5hbWU7CgoKICBjbGFzcyB0aW1lX2Jh
c2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVh
bWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfZ2V0OwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0No
YXJUPiA+CiAgICBjbGFzcyB0aW1lX2dldF9ieW5hbWU7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAg
ICBjbGFzcyB0aW1lX3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9P
dXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfcHV0
X2J5bmFtZTsKCgogIGNsYXNzIG1vbmV5X2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNs
YXNzIG1vbmV5X2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJ
dGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1vbmV5X3B1dDsK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGwgPSBmYWxzZT4KICAgIGNsYXNz
IG1vbmV5cHVuY3Q7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsID0gZmFs
c2U+CiAgICBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTsKCgogIGNsYXNzIG1lc3NhZ2VzX2Jhc2U7
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXM7CiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXNfYnluYW1lOwoKCiAgY2xhc3Mg
bG9jYWxlCiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIHVuc2lnbmVkIGludCBjYXRlZ29yeTsK
CgogICAgY2xhc3MgZmFjZXQ7CiAgICBjbGFzcyBpZDsKICAgIGNsYXNzIF9JbXBsOwoKICAgIGZy
aWVuZCBjbGFzcyBmYWNldDsKICAgIGZyaWVuZCBjbGFzcyBfSW1wbDsKCiAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVzZV9mYWNl
dChjb25zdCBsb2NhbGUmKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZy
aWVuZCBib29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdygpOwoKCgogICAg
c3RhdGljIGNvbnN0IGNhdGVnb3J5IG5vbmUgPSAwOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5
IGN0eXBlID0gMUwgPDwgMDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBudW1lcmljID0gMUwg
PDwgMTsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjb2xsYXRlID0gMUwgPDwgMjsKICAgIHN0
YXRpYyBjb25zdCBjYXRlZ29yeSB0aW1lID0gMUwgPDwgMzsKICAgIHN0YXRpYyBjb25zdCBjYXRl
Z29yeSBtb25ldGFyeSA9IDFMIDw8IDQ7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbWVzc2Fn
ZXMgPSAxTCA8PCA1OwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGFsbCA9IChjb2xsYXRlIHwg
Y3R5cGUgfCBtb25ldGFyeSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBudW1lcmljIHwgdGltZSB8IG1lc3NhZ2VzKTsKCgogICAgbG9jYWxlKCkgdGhyb3coKTsK
CiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyKSB0aHJvdygpOwoKICAgIGV4cGxpY2l0
CiAgICBsb2NhbGUoY29uc3QgY2hhciogX19zdGRfbmFtZSk7CgogICAgbG9jYWxlKGNvbnN0IGxv
Y2FsZSYgX19iYXNlLCBjb25zdCBjaGFyKiBfX3MsIGNhdGVnb3J5IF9fY2F0KTsKCiAgICBsb2Nh
bGUoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGxvY2FsZSYgX19hZGQsIGNhdGVnb3J5IF9f
Y2F0KTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGxvY2FsZShjb25zdCBs
b2NhbGUmIF9fb3RoZXIsIF9GYWNldCogX19mKTsKCiAgICB+bG9jYWxlKCkgdGhyb3coKTsKCiAg
ICBjb25zdCBsb2NhbGUmCiAgICBvcGVyYXRvcj0oY29uc3QgbG9jYWxlJiBfX290aGVyKSB0aHJv
dygpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgbG9jYWxlCiAgICAgIGNv
bWJpbmUoY29uc3QgbG9jYWxlJiBfX290aGVyKTsKCgogICAgc3RyaW5nCiAgICBuYW1lKCkgY29u
c3Q7CgogICAgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0
IHRocm93ICgpOwoKICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGxvY2FsZSYg
X19vdGhlcikgY29uc3QgdGhyb3cgKCkKICAgIHsgcmV0dXJuICEodGhpcy0+b3BlcmF0b3I9PShf
X290aGVyKSk7IH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgICBib29sCiAgICAgIG9wZXJhdG9yKCkoY29uc3QgYmFz
aWNfc3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MxLAogICAgICAgICAgICAgICAg
IGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhciwgX1RyYWl0cywgX0FsbG9jPiYgX19zMikgY29uc3Q7
CgoKICAgIHN0YXRpYyBsb2NhbGUKICAgIGdsb2JhbChjb25zdCBsb2NhbGUmKTsKCiAgICBzdGF0
aWMgY29uc3QgbG9jYWxlJgogICAgY2xhc3NpYygpOwoKICBwcml2YXRlOgoKICAgIF9JbXBsKiBf
TV9pbXBsOwoKCiAgICBzdGF0aWMgX0ltcGwqIF9TX2NsYXNzaWM7CgoKICAgIHN0YXRpYyBfSW1w
bCogX1NfZ2xvYmFsOwoKICAgIHN0YXRpYyBjb25zdCBzaXplX3QgX1NfbnVtX2NhdGVnb3JpZXMg
PSA2OwogICAgc3RhdGljIGNvbnN0IHNpemVfdCBfU19udW1fZmFjZXRzID0gMjY7CgogICAgZXhw
bGljaXQKICAgIGxvY2FsZShfSW1wbCopIHRocm93KCk7CgogICAgc3RhdGljIGlubGluZSB2b2lk
CiAgICBfU19pbml0aWFsaXplKCkKICAgIHsgaWYgKCFfU19jbGFzc2ljKSBjbGFzc2ljKCk7IH0K
CiAgICBzdGF0aWMgY2F0ZWdvcnkKICAgIF9TX25vcm1hbGl6ZV9jYXRlZ29yeShjYXRlZ29yeSk7
CgogICAgdm9pZAogICAgX01fY29hbGVzY2UoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGxv
Y2FsZSYgX19hZGQsIGNhdGVnb3J5IF9fY2F0KTsKICB9OwoKCgogIGNsYXNzIGxvY2FsZTo6X0lt
cGwKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgdmVjdG9yPGZhY2V0KiwgYWxsb2NhdG9yPGZh
Y2V0Kj4gPiBfX3ZlY19mYWNldDsKCgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVu
ZCBjbGFzcyBsb2NhbGU6OmZhY2V0OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAg
ICAgZnJpZW5kIGNvbnN0IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwoK
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAgICAgaGFz
X2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93KCk7CgogIHByaXZhdGU6CgogICAgc2l6ZV90IF9N
X3JlZmVyZW5jZXM7CiAgICBfX3ZlY19mYWNldCogX01fZmFjZXRzOwogICAgc3RyaW5nIF9NX25h
bWVzW19TX251bV9jYXRlZ29yaWVzXTsKICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGU7CiAgICBz
dGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfY3R5cGVbXTsKICAgIHN0YXRpYyBj
b25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9udW1lcmljW107CiAgICBzdGF0aWMgY29uc3Qg
bG9jYWxlOjppZCogY29uc3QgX1NfaWRfY29sbGF0ZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2Fs
ZTo6aWQqIGNvbnN0IF9TX2lkX3RpbWVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBj
b25zdCBfU19pZF9tb25ldGFyeVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0
IF9TX2lkX21lc3NhZ2VzW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QqIGNv
bnN0IF9TX2ZhY2V0X2NhdGVnb3JpZXNbXTsKCiAgICBpbmxpbmUgdm9pZAogICAgX01fYWRkX3Jl
ZmVyZW5jZSgpIHRocm93KCkKICAgIHsgKytfTV9yZWZlcmVuY2VzOyB9CgogICAgaW5saW5lIHZv
aWQKICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB0aHJvdygpCiAgICB7CiAgICAgIGlmIChfTV9y
ZWZlcmVuY2VzLS0gPT0gMCkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBk
ZWxldGUgdGhpczsgfQogICAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7IH0KICAgICAg
ICB9CiAgICB9CgogICAgX0ltcGwoY29uc3QgX0ltcGwmLCBzaXplX3QpOwogICAgX0ltcGwoc3Ry
aW5nIF9fbmFtZSwgc2l6ZV90KTsKICAgfl9JbXBsKCkgdGhyb3coKTsKCiAgICBib29sCiAgICBf
TV9jaGVja19zYW1lX25hbWUoKQogICAgewogICAgICBib29sIF9fcmV0ID0gdHJ1ZTsKICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBfU19udW1fY2F0ZWdvcmllcyAtIDE7ICsraSkKICAgICAg
ICBfX3JldCAmPSBfTV9uYW1lc1tpXSA9PSBfTV9uYW1lc1tpICsgMV07CiAgICAgIHJldHVybiBf
X3JldDsKICAgIH0KICAgIHZvaWQKICAgIF9NX3JlcGxhY2VfY2F0ZWdvcmllcyhjb25zdCBfSW1w
bCosIGNhdGVnb3J5KTsKCiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2NhdGVnb3J5KGNvbnN0IF9J
bXBsKiwgY29uc3QgbG9jYWxlOjppZCogY29uc3QqKTsKCiAgICB2b2lkCiAgICBfTV9yZXBsYWNl
X2ZhY2V0KGNvbnN0IF9JbXBsKiwgY29uc3QgbG9jYWxlOjppZCopOwoKICAgIHZvaWQKICAgIF9N
X2luc3RhbGxfZmFjZXQoY29uc3QgbG9jYWxlOjppZCosIGZhY2V0Kik7CgogICAgdGVtcGxhdGU8
dHlwZW5hbWUgX0ZhY2V0PgogICAgICBpbmxpbmUgdm9pZAogICAgICBfTV9pbml0X2ZhY2V0KF9G
YWNldCogX19mYWNldCkKICAgICAgeyBfTV9pbnN0YWxsX2ZhY2V0KCZfRmFjZXQ6OmlkLCBfX2Zh
Y2V0KTsgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGxvY2FsZTo6bG9j
YWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlciwgX0ZhY2V0KiBfX2YpCiAgICB7CiAgICAgIF9NX2lt
cGwgPSBuZXcgX0ltcGwoKl9fb3RoZXIuX01faW1wbCwgMSk7CiAgICAgIF9NX2ltcGwtPl9NX2lu
c3RhbGxfZmFjZXQoJl9GYWNldDo6aWQsIF9fZik7CiAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7
IF9faSA8IF9TX251bV9jYXRlZ29yaWVzOyArK19faSkKICAgICAgICBfTV9pbXBsLT5fTV9uYW1l
c1tfX2ldID0gIioiOwogICAgfQoKCiAgY2xhc3MgbG9jYWxlOjpmYWNldAogIHsKICAgIGZyaWVu
ZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpfSW1wbDsKCiAgcHJvdGVj
dGVkOgogICAgZXhwbGljaXQKICAgIGZhY2V0KHNpemVfdCBfX3JlZnMgPSAwKSB0aHJvdygpOwoK
ICAgIHZpcnR1YWwKICAgIH5mYWNldCgpIHsgfTsKCiAgICBzdGF0aWMgdm9pZAogICAgX1NfY3Jl
YXRlX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYywgY29uc3QgY2hhciogX19zKTsKCiAgICBz
dGF0aWMgdm9pZAogICAgX1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpOwoK
ICBwcml2YXRlOgogICAgc2l6ZV90IF9NX3JlZmVyZW5jZXM7CgogICAgdm9pZAogICAgX01fYWRk
X3JlZmVyZW5jZSgpIHRocm93KCk7CgogICAgdm9pZAogICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgp
IHRocm93KCk7CgogICAgZmFjZXQoY29uc3QgZmFjZXQmKTsKCiAgICB2b2lkCiAgICBvcGVyYXRv
cj0oY29uc3QgZmFjZXQmKTsKICB9OwoKCgogIGNsYXNzIGxvY2FsZTo6aWQKICB7CiAgcHJpdmF0
ZToKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpfSW1w
bDsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNl
dCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwogICAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ZhY2V0PgogICAgICBmcmllbmQgYm9vbAogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikg
dGhyb3cgKCk7CgoKCgogICAgbXV0YWJsZSBzaXplX3QgX01faW5kZXg7CgoKICAgIHN0YXRpYyBz
aXplX3QgX1NfaGlnaHdhdGVyOwoKICAgIHZvaWQKICAgIG9wZXJhdG9yPShjb25zdCBpZCYpOwoK
ICAgIGlkKGNvbnN0IGlkJik7CgogIHB1YmxpYzoKCgoKICAgIGlkKCkgeyB9CiAgfTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgY29uc3QgX0ZhY2V0JgogICAgdXNlX2ZhY2V0KGNv
bnN0IGxvY2FsZSYgX19sb2MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBib29s
CiAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3coKTsKfQojIDQ0ICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyAxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvaW9zX2Jhc2UuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvaW5j
bHVkZS9nKystdjMvYml0cy9pb3NfYmFzZS5oIiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgZW51
bSBfSW9zX0ZtdGZsYWdzIHsgX01faW9zX2ZtdGZsYWdzX2VuZCA9IDFMIDw8IDE2IH07CgogIGlu
bGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3ImKF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0Zt
dGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKHN0YXRpY19jYXN0PGludD4oX19h
KSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBv
cGVyYXRvcnwoX0lvc19GbXRmbGFncyBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJu
IF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50Pihf
X2IpKTsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yXihfSW9zX0ZtdGZsYWdz
IF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNf
Y2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9z
X0ZtdGZsYWdzCiAgb3BlcmF0b3J8PShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3Mg
X19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFn
cwogIG9wZXJhdG9yJj0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7
IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVy
YXRvcl49KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4g
X19hID0gX19hIF4gX19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J+KF9J
b3NfRm10ZmxhZ3MgX19hKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3MofnN0YXRpY19jYXN0PGlu
dD4oX19hKSk7IH0KCgogIGVudW0gX0lvc19PcGVubW9kZSB7IF9NX2lvc19vcGVubW9kZV9lbmQg
PSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yJihfSW9zX09w
ZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShz
dGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGlu
ZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3J8KF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5t
b2RlIF9fYikKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4oX19hKSB8
IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVy
YXRvcl4oX0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9J
b3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2Ip
KTsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yfD0oX0lvc19PcGVubW9kZSYg
X19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAg
aW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvciY9KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lv
c19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9CgogIGlubGluZSBf
SW9zX09wZW5tb2RlCiAgb3BlcmF0b3JePShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1v
ZGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19PcGVu
bW9kZQogIG9wZXJhdG9yfihfSW9zX09wZW5tb2RlIF9fYSkKICB7IHJldHVybiBfSW9zX09wZW5t
b2RlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CgoKICBlbnVtIF9Jb3NfSW9zdGF0ZSB7IF9N
X2lvc19pb3N0YXRlX2VuZCA9IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBv
cGVyYXRvciYoX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBf
SW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2Ip
KTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J8KF9Jb3NfSW9zdGF0ZSBfX2Es
IF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGlu
dD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0
ZQogIG9wZXJhdG9yXihfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0
dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+
KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcnw9KF9Jb3NfSW9zdGF0
ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoK
ICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3ImPShfSW9zX0lvc3RhdGUmIF9fYSwgX0lv
c19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0KCiAgaW5saW5lIF9J
b3NfSW9zdGF0ZQogIG9wZXJhdG9yXj0oX0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBf
X2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUK
ICBvcGVyYXRvcn4oX0lvc19Jb3N0YXRlIF9fYSkKICB7IHJldHVybiBfSW9zX0lvc3RhdGUofnN0
YXRpY19jYXN0PGludD4oX19hKSk7IH0KCiAgZW51bSBfSW9zX1NlZWtkaXIgeyBfTV9pb3Nfc2Vl
a2Rpcl9lbmQgPSAxTCA8PCAxNiB9OwoKCiAgY2xhc3MgaW9zX2Jhc2UKICB7CiAgcHVibGljOgoK
CiAgICBjbGFzcyBmYWlsdXJlIDogcHVibGljIGV4Y2VwdGlvbgogICAgewogICAgcHVibGljOgoK
CiAgICAgIGV4cGxpY2l0CiAgICAgIGZhaWx1cmUoY29uc3Qgc3RyaW5nJiBfX3N0cikgdGhyb3co
KTsKCiAgICAgIHZpcnR1YWwKICAgICAgfmZhaWx1cmUoKSB0aHJvdygpOwoKICAgICAgdmlydHVh
bCBjb25zdCBjaGFyKgogICAgICB3aGF0KCkgY29uc3QgdGhyb3coKTsKCiAgICBwcml2YXRlOgog
ICAgICBlbnVtIHsgX01fYnVmc2l6ZSA9IDI1NiB9OwogICAgICBjaGFyIF9NX25hbWVbX01fYnVm
c2l6ZV07CgogICAgfTsKCgogICAgdHlwZWRlZiBfSW9zX0ZtdGZsYWdzIGZtdGZsYWdzOwoKICAg
IHN0YXRpYyBjb25zdCBmbXRmbGFncyBib29sYWxwaGEgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6
X1NfYm9vbGFscGhhKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBkZWMgPSBmbXRmbGFncyhf
X2lvc19mbGFnczo6X1NfZGVjKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBmaXhlZCA9IGZt
dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19maXhlZCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mg
aGV4ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2hleCk7CiAgICBzdGF0aWMgY29uc3QgZm10
ZmxhZ3MgaW50ZXJuYWwgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfaW50ZXJuYWwpOwogICAg
c3RhdGljIGNvbnN0IGZtdGZsYWdzIGxlZnQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfbGVm
dCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgb2N0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6
Ol9TX29jdCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgcmlnaHQgPSBmbXRmbGFncyhfX2lv
c19mbGFnczo6X1NfcmlnaHQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNjaWVudGlmaWMg
PSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2NpZW50aWZpYyk7CiAgICBzdGF0aWMgY29uc3Qg
Zm10ZmxhZ3Mgc2hvd2Jhc2UgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd2Jhc2UpOwog
ICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3dwb2ludCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdz
OjpfU19zaG93cG9pbnQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3dwb3MgPSBmbXRm
bGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd3Bvcyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mg
c2tpcHdzID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3NraXB3cyk7CiAgICBzdGF0aWMgY29u
c3QgZm10ZmxhZ3MgdW5pdGJ1ZiA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU191bml0YnVmKTsK
ICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyB1cHBlcmNhc2UgPSBmbXRmbGFncyhfX2lvc19mbGFn
czo6X1NfdXBwZXJjYXNlKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBhZGp1c3RmaWVsZCA9
IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19hZGp1c3RmaWVsZCk7CiAgICBzdGF0aWMgY29uc3Qg
Zm10ZmxhZ3MgYmFzZWZpZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Jhc2VmaWVsZCk7
CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZmxvYXRmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2Zs
YWdzOjpfU19mbG9hdGZpZWxkKTsKCgogICAgdHlwZWRlZiBfSW9zX0lvc3RhdGUgaW9zdGF0ZTsK
ICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGJhZGJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9T
X2JhZGJpdCk7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBlb2ZiaXQgPSBpb3N0YXRlKF9faW9z
X2ZsYWdzOjpfU19lb2ZiaXQpOwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZmFpbGJpdCA9IGlv
c3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2ZhaWxiaXQpOwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUg
Z29vZGJpdCA9IGlvc3RhdGUoMCk7CgoKICAgIHR5cGVkZWYgX0lvc19PcGVubW9kZSBvcGVubW9k
ZTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBhcHAgPSBvcGVubW9kZShfX2lvc19mbGFnczo6
X1NfYXBwKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBhdGUgPSBvcGVubW9kZShfX2lvc19m
bGFnczo6X1NfYXRlKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBiaW5hcnkgPSBvcGVubW9k
ZShfX2lvc19mbGFnczo6X1NfYmluKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBpbiA9IG9w
ZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19pbik7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgb3V0
ID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX291dCk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1v
ZGUgdHJ1bmMgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfdHJ1bmMpOwoKCiAgICB0eXBlZGVm
IF9Jb3NfU2Vla2RpciBzZWVrZGlyOwogICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgYmVnID0gc2Vl
a2RpcigwKTsKICAgIHN0YXRpYyBjb25zdCBzZWVrZGlyIGN1ciA9IHNlZWtkaXIoMSk7CiAgICBz
dGF0aWMgY29uc3Qgc2Vla2RpciBlbmQgPSBzZWVrZGlyKDIpOwojIDIxNiAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL2lvc19iYXNlLmgiIDMKICAgIGVudW0gZXZlbnQKICAgIHsKICAg
ICAgZXJhc2VfZXZlbnQsCiAgICAgIGltYnVlX2V2ZW50LAogICAgICBjb3B5Zm10X2V2ZW50CiAg
ICB9OwoKICAgIHR5cGVkZWYgdm9pZCAoKmV2ZW50X2NhbGxiYWNrKSAoZXZlbnQsIGlvc19iYXNl
JiwgaW50KTsKCiAgICB2b2lkCiAgICByZWdpc3Rlcl9jYWxsYmFjayhldmVudF9jYWxsYmFjayBf
X2ZuLCBpbnQgX19pbmRleCk7CgogIHByb3RlY3RlZDoKCiAgICBzdHJlYW1zaXplIF9NX3ByZWNp
c2lvbjsKICAgIHN0cmVhbXNpemUgX01fd2lkdGg7CiAgICBmbXRmbGFncyBfTV9mbGFnczsKCgoK
ICAgIHN0cnVjdCBfQ2FsbGJhY2tfbGlzdAogICAgewoKICAgICAgX0NhbGxiYWNrX2xpc3QqIF9N
X25leHQ7CiAgICAgIGlvc19iYXNlOjpldmVudF9jYWxsYmFjayBfTV9mbjsKICAgICAgaW50IF9N
X2luZGV4OwogICAgICBpbnQgX01fcmVmY291bnQ7CgogICAgICBfQ2FsbGJhY2tfbGlzdChpb3Nf
YmFzZTo6ZXZlbnRfY2FsbGJhY2sgX19mbiwgaW50IF9faW5kZXgsCiAgICAgICAgICAgICAgICAg
ICAgIF9DYWxsYmFja19saXN0KiBfX2NiKQogICAgICA6IF9NX25leHQoX19jYiksIF9NX2ZuKF9f
Zm4pLCBfTV9pbmRleChfX2luZGV4KSwgX01fcmVmY291bnQoMCkgeyB9CgogICAgICB2b2lkCiAg
ICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB7ICsrX01fcmVmY291bnQ7IH0KCiAgICAgIGludAogICAg
ICBfTV9yZW1vdmVfcmVmZXJlbmNlKCkgeyByZXR1cm4gX01fcmVmY291bnQtLTsgfQogICAgfTsK
CiAgICAgX0NhbGxiYWNrX2xpc3QqIF9NX2NhbGxiYWNrczsKCiAgICB2b2lkCiAgICBfTV9jYWxs
X2NhbGxiYWNrcyhldmVudCBfX2V2KSB0aHJvdygpOwoKICAgIHZvaWQKICAgIF9NX2Rpc3Bvc2Vf
Y2FsbGJhY2tzKHZvaWQpOwoKCiAgICBzdHJ1Y3QgX1dvcmRzCiAgICB7CiAgICAgIHZvaWQqIF9N
X3B3b3JkOwogICAgICBsb25nIF9NX2l3b3JkOwogICAgfTsKCiAgICBzdGF0aWMgY29uc3QgaW50
IF9TX2xvY2FsX3dvcmRzID0gODsKICAgIF9Xb3JkcyBfTV93b3JkX2FycmF5W19TX2xvY2FsX3dv
cmRzXTsKICAgIF9Xb3JkcyBfTV9kdW1teTsKICAgIF9Xb3JkcyogX01fd29yZHM7CiAgICBpbnQg
X01fd29yZF9saW1pdDsKCiAgICBfV29yZHMmCiAgICBfTV9ncm93X3dvcmRzKGludCBfX2luZGV4
KTsKCgogICAgbG9jYWxlIF9NX2lvc19sb2NhbGU7CgogICAgdm9pZAogICAgX01faW5pdCgpOwoK
ICBwdWJsaWM6CgoKCgoKICAgIGNsYXNzIEluaXQKICAgIHsKICAgICAgZnJpZW5kIGNsYXNzIGlv
c19iYXNlOwogICAgcHVibGljOgogICAgICBJbml0KCk7CiAgICAgIH5Jbml0KCk7CgogICAgICBz
dGF0aWMgdm9pZAogICAgICBfU19pb3NfY3JlYXRlKGJvb2wgX19zeW5jKTsKCiAgICAgIHN0YXRp
YyB2b2lkCiAgICAgIF9TX2lvc19kZXN0cm95KCk7CgogICAgcHJpdmF0ZToKICAgICAgc3RhdGlj
IGludCBfU19pb3NfYmFzZV9pbml0OwogICAgICBzdGF0aWMgYm9vbCBfU19zeW5jZWRfd2l0aF9z
dGRpbzsKICAgIH07CgoKICAgIGlubGluZSBmbXRmbGFncwogICAgZmxhZ3MoKSBjb25zdCB7IHJl
dHVybiBfTV9mbGFnczsgfQoKICAgIGlubGluZSBmbXRmbGFncwogICAgZmxhZ3MoZm10ZmxhZ3Mg
X19mbXRmbCkKICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAgX01f
ZmxhZ3MgPSBfX2ZtdGZsOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5lIGZt
dGZsYWdzCiAgICBzZXRmKGZtdGZsYWdzIF9fZm10ZmwpCiAgICB7CiAgICAgIGZtdGZsYWdzIF9f
b2xkID0gX01fZmxhZ3M7CiAgICAgIF9NX2ZsYWdzIHw9IF9fZm10Zmw7CiAgICAgIHJldHVybiBf
X29sZDsKICAgIH0KCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIHNldGYoZm10ZmxhZ3MgX19mbXRm
bCwgZm10ZmxhZ3MgX19tYXNrKQogICAgewogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdz
OwogICAgICBfTV9mbGFncyAmPSB+X19tYXNrOwogICAgICBfTV9mbGFncyB8PSAoX19mbXRmbCAm
IF9fbWFzayk7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBpbmxpbmUgdm9pZAogICAg
dW5zZXRmKGZtdGZsYWdzIF9fbWFzaykgeyBfTV9mbGFncyAmPSB+X19tYXNrOyB9CgogICAgaW5s
aW5lIHN0cmVhbXNpemUKICAgIHByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIF9NX3ByZWNpc2lv
bjsgfQoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICBwcmVjaXNpb24oc3RyZWFtc2l6ZSBfX3By
ZWMpCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19vbGQgPSBfTV9wcmVjaXNpb247CiAgICAgIF9N
X3ByZWNpc2lvbiA9IF9fcHJlYzsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGlu
ZSBzdHJlYW1zaXplCiAgICB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIF9NX3dpZHRoOyB9CgogICAg
aW5saW5lIHN0cmVhbXNpemUKICAgIHdpZHRoKHN0cmVhbXNpemUgX193aWRlKQogICAgewogICAg
ICBzdHJlYW1zaXplIF9fb2xkID0gX01fd2lkdGg7CiAgICAgIF9NX3dpZHRoID0gX193aWRlOwog
ICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgc3RhdGljIGJvb2wKICAgIHN5bmNfd2l0aF9z
dGRpbyhib29sIF9fc3luYyA9IHRydWUpOwoKCiAgICBsb2NhbGUKICAgIGltYnVlKGNvbnN0IGxv
Y2FsZSYgX19sb2MpOwoKICAgIGlubGluZSBsb2NhbGUKICAgIGdldGxvYygpIGNvbnN0IHsgcmV0
dXJuIF9NX2lvc19sb2NhbGU7IH0KCgogICAgc3RhdGljIGludAogICAgeGFsbG9jKCkgdGhyb3co
KTsKCiAgICBpbmxpbmUgbG9uZyYKICAgIGl3b3JkKGludCBfX2l4KQogICAgewogICAgICBfV29y
ZHMmIF9fd29yZCA9IChfX2l4IDwgX01fd29yZF9saW1pdCkKICAgICAgICAgICAgICAgICAgICAg
ICAgPyBfTV93b3Jkc1tfX2l4XSA6IF9NX2dyb3dfd29yZHMoX19peCk7CiAgICAgIHJldHVybiBf
X3dvcmQuX01faXdvcmQ7CiAgICB9CgogICAgaW5saW5lIHZvaWQqJgogICAgcHdvcmQoaW50IF9f
aXgpCiAgICB7CiAgICAgIF9Xb3JkcyYgX193b3JkID0gKF9faXggPCBfTV93b3JkX2xpbWl0KQog
ICAgICAgICAgICAgICAgICAgICAgICA/IF9NX3dvcmRzW19faXhdIDogX01fZ3Jvd193b3Jkcyhf
X2l4KTsKICAgICAgcmV0dXJuIF9fd29yZC5fTV9wd29yZDsKICAgIH0KCgogICAgfmlvc19iYXNl
KCk7CgogIHByb3RlY3RlZDoKICAgIGlvc19iYXNlKCk7CgoKICBwcml2YXRlOgogICAgaW9zX2Jh
c2UoY29uc3QgaW9zX2Jhc2UmKTsKCiAgICBpb3NfYmFzZSYKICAgIG9wZXJhdG9yPShjb25zdCBp
b3NfYmFzZSYpOwoKICB9OwoKCiAgaW5saW5lIGlvc19iYXNlJgogIGJvb2xhbHBoYShpb3NfYmFz
ZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpib29sYWxwaGEpOwogICAg
cmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub2Jvb2xhbHBoYShpb3Nf
YmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OmJvb2xhbHBoYSk7
CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNob3diYXNlKGlv
c19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3diYXNlKTsK
ICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9zaG93YmFzZShp
b3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3diYXNl
KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2hvd3BvaW50
KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3dwb2lu
dCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2hvd3Bv
aW50KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hv
d3BvaW50KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2hv
d3Bvcyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzaG93
cG9zKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9zaG93
cG9zKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hv
d3Bvcyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNraXB3
cyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpza2lwd3Mp
OwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3NraXB3cyhp
b3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNraXB3cyk7
CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHVwcGVyY2FzZShp
b3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjp1cHBlcmNhc2Up
OwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3VwcGVyY2Fz
ZShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnVwcGVy
Y2FzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHVuaXRi
dWYoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnVuaXRi
dWYpOwogICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm91bml0
YnVmKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnVu
aXRidWYpOwogICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIGlu
dGVybmFsKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpp
bnRlcm5hbCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKICAgICByZXR1cm4gX19iYXNlOwogIH0K
CiAgaW5saW5lIGlvc19iYXNlJgogIGxlZnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jh
c2Uuc2V0Zihpb3NfYmFzZTo6bGVmdCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKICAgIHJldHVy
biBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgcmlnaHQoaW9zX2Jhc2UmIF9fYmFz
ZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6cmlnaHQsIGlvc19iYXNlOjphZGp1c3Rm
aWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBkZWMo
aW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6ZGVjLCBpb3Nf
YmFzZTo6YmFzZWZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jh
c2UmCiAgaGV4KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6
OmhleCwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5s
aW5lIGlvc19iYXNlJgogIG9jdChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRm
KGlvc19iYXNlOjpvY3QsIGlvc19iYXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsK
ICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgZml4ZWQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAg
ICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6Zml4ZWQsIGlvc19iYXNlOjpmbG9hdGZpZWxkKTsKICAg
IHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2NpZW50aWZpYyhpb3Nf
YmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzY2llbnRpZmljLCBp
b3NfYmFzZTo6ZmxvYXRmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCn0KIyA0NSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzCiMgMSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMSAzCiMgMzggIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDMKCiMgMSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMK
IyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMiAz
CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMSAzCiMg
NDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDIgMwoj
IDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGlvLmgiIDEgMwojIDQy
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMKIyAx
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDEgMwojIDQzICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvaW9zX2Jhc2UuaCIgMSAzCiMgNDQgIi91c3Iv
bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDIgMwoKbmFtZXNwYWNl
IHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
c3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0
cz4mIF9pb3MsCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf
VHJhaXRzPiogX19zYmluLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9D
aGFyVCwgX1RyYWl0cz4qIF9fc2JvdXQpOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfc3RyZWFtYnVmCiAgICB7CiAgICBwdWJs
aWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0
cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5
cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBl
IHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZfdHlwZSBv
ZmZfdHlwZTsKCgogICAgICB0eXBlZGVmIGN0eXBlPGNoYXJfdHlwZT4gX19jdHlwZV90eXBlOwog
ICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX3N0
cmVhbWJ1Zl90eXBlOwoKICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX2lvczxjaGFyX3R5cGUsIHRy
YWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX2lzdHJlYW08Y2hhcl90eXBlLCB0
cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19vc3RyZWFtPGNoYXJfdHlwZSwg
dHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFy
X3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0
b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CgogICAgICBmcmllbmQgc3RyZWFtc2l6ZQogICAg
ICBfX2NvcHlfc3RyZWFtYnVmczw+KGJhc2ljX2lvczxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiYg
X19pb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYmlu
LF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQpOwoKICAgIHByb3RlY3RlZDoKCgoKCgoKICAgICAg
Y2hhcl90eXBlKiBfTV9idWY7CgoKICAgICAgaW50X3R5cGUgX01fYnVmX3NpemU7CgoKICAgICAg
aW50X3R5cGUgX01fYnVmX3NpemVfb3B0OwoKCgogICAgICBib29sIF9NX2J1Zl91bmlmaWVkOwoK
CgoKCgogICAgICBjaGFyX3R5cGUqIF9NX2luX2JlZzsKICAgICAgY2hhcl90eXBlKiBfTV9pbl9j
dXI7CiAgICAgIGNoYXJfdHlwZSogX01faW5fZW5kOwogICAgICBjaGFyX3R5cGUqIF9NX291dF9i
ZWc7CiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2N1cjsKICAgICAgY2hhcl90eXBlKiBfTV9vdXRf
ZW5kOwoKCiAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfTV9tb2RlOwoKCiAgICAgIGxvY2FsZSBf
TV9idWZfbG9jYWxlOwoKCiAgICAgIGJvb2wgX01fYnVmX2xvY2FsZV9pbml0OwoKCgoKCgogICAg
ICBpbnRfdHlwZSBfTV9wYmFja19zaXplOwogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrOwogICAg
ICBjaGFyX3R5cGUqIF9NX3BiYWNrX2N1cl9zYXZlOwogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNr
X2VuZF9zYXZlOwogICAgICBib29sIF9NX3BiYWNrX2luaXQ7CgoKCgogICAgICB2b2lkCiAgICAg
IF9NX3BiYWNrX2NyZWF0ZSgpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX3BiYWNrX2luaXQpCiAg
ICAgICAgICB7CiAgICAgICAgICAgIGludF90eXBlIF9fZGlzdCA9IF9NX2luX2VuZCAtIF9NX2lu
X2N1cjsKICAgICAgICAgICAgaW50X3R5cGUgX19sZW4gPSBtaW4oX01fcGJhY2tfc2l6ZSwgX19k
aXN0KTsKICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fcGJhY2ssIF9NX2luX2N1ciwg
X19sZW4pOwogICAgICAgICAgICBfTV9wYmFja19jdXJfc2F2ZSA9IF9NX2luX2N1cjsKICAgICAg
ICAgICAgX01fcGJhY2tfZW5kX3NhdmUgPSBfTV9pbl9lbmQ7CiAgICAgICAgICAgIHRoaXMtPnNl
dGcoX01fcGJhY2ssIF9NX3BiYWNrLCBfTV9wYmFjayArIF9fbGVuKTsKICAgICAgICAgICAgX01f
cGJhY2tfaW5pdCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgIH0KCgoKCiAgICAgIHZvaWQKICAg
ICAgX01fcGJhY2tfZGVzdHJveSgpCiAgICAgIHsKICAgICAgICBpZiAoX01fcGJhY2tfaW5pdCkK
ICAgICAgICAgIHsKCiAgICAgICAgICAgIGludF90eXBlIF9fb2ZmX2N1ciA9IF9NX2luX2N1ciAt
IF9NX3BiYWNrOwoKCiAgICAgICAgICAgIGludF90eXBlIF9fb2ZmX2VuZCA9IDA7CiAgICAgICAg
ICAgIGludF90eXBlIF9fcGJhY2tfbGVuID0gX01faW5fZW5kIC0gX01fcGJhY2s7CiAgICAgICAg
ICAgIGludF90eXBlIF9fc2F2ZV9sZW4gPSBfTV9wYmFja19lbmRfc2F2ZSAtIF9NX2J1ZjsKICAg
ICAgICAgICAgaWYgKF9fcGJhY2tfbGVuID4gX19zYXZlX2xlbikKICAgICAgICAgICAgICBfX29m
Zl9lbmQgPSBfX3BiYWNrX2xlbiAtIF9fc2F2ZV9sZW47CgogICAgICAgICAgICB0aGlzLT5zZXRn
KF9NX2J1ZiwgX01fcGJhY2tfY3VyX3NhdmUgKyBfX29mZl9jdXIsCiAgICAgICAgICAgICAgICAg
ICAgICAgX01fcGJhY2tfZW5kX3NhdmUgKyBfX29mZl9lbmQpOwogICAgICAgICAgICBfTV9wYmFj
a19jdXJfc2F2ZSA9IF9fbnVsbDsKICAgICAgICAgICAgX01fcGJhY2tfZW5kX3NhdmUgPSBfX251
bGw7CiAgICAgICAgICAgIF9NX3BiYWNrX2luaXQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAg
fQoKCgogICAgICB2b2lkCiAgICAgIF9NX2luX2N1cl9tb3ZlKG9mZl90eXBlIF9fbikKICAgICAg
ewogICAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fb3V0X2N1cjsKICAgICAgICBfTV9pbl9jdXIg
Kz0gX19uOwogICAgICAgIGlmIChfX3Rlc3RvdXQgJiYgX01fYnVmX3VuaWZpZWQpCiAgICAgICAg
ICBfTV9vdXRfY3VyICs9IF9fbjsKICAgICAgfQojIDE5MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMwogICAgICB2b2lkCiAgICAgIF9NX291dF9jdXJf
bW92ZShvZmZfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBib29sIF9fdGVzdGluID0gX01faW5f
Y3VyOwoKICAgICAgICBfTV9vdXRfY3VyICs9IF9fbjsKICAgICAgICBpZiAoX190ZXN0aW4gJiYg
X01fYnVmX3VuaWZpZWQpCiAgICAgICAgICBfTV9pbl9jdXIgKz0gX19uOwogICAgICAgIGlmIChf
TV9vdXRfY3VyID4gX01fb3V0X2VuZCkKICAgICAgICAgIHsKICAgICAgICAgICAgX01fb3V0X2Vu
ZCA9IF9NX291dF9jdXI7CgogICAgICAgICAgICBpZiAoX190ZXN0aW4pCiAgICAgICAgICAgICAg
X01faW5fZW5kICs9IF9fbjsKICAgICAgICAgIH0KICAgICAgfQoKCgoKICAgICAgb2ZmX3R5cGUK
ICAgICAgX01fb3V0X2J1Zl9zaXplKCkKICAgICAgewogICAgICAgIG9mZl90eXBlIF9fcmV0ID0g
MDsKICAgICAgICBpZiAoX01fb3V0X2N1cikKICAgICAgICAgIHsKCiAgICAgICAgICAgIGlmIChf
TV9vdXRfYmVnID09IF9NX2J1ZikKICAgICAgICAgICAgICBfX3JldCA9IF9NX291dF9iZWcgKyBf
TV9idWZfc2l6ZSAtIF9NX291dF9jdXI7CgogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
X19yZXQgPSBfTV9vdXRfZW5kIC0gX01fb3V0X2N1cjsKICAgICAgICAgIH0KICAgICAgICByZXR1
cm4gX19yZXQ7CiAgICAgIH0KIyAyMzYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfc3RyZWFtYnVmLmgiIDMKICAgICAgdm9pZAogICAgICBfTV9zZXRfaW5kZXRlcm1pbmF0ZSh2
b2lkKQogICAgICB7CiAgICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6aW4pCiAgICAgICAg
ICB0aGlzLT5zZXRnKF9NX2J1ZiwgX01fYnVmLCBfTV9idWYpOwogICAgICAgIGlmIChfTV9tb2Rl
ICYgaW9zX2Jhc2U6Om91dCkKICAgICAgICAgIHRoaXMtPnNldHAoX01fYnVmLCBfTV9idWYpOwog
ICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX3NldF9kZXRlcm1pbmF0ZShvZmZfdHlwZSBfX29m
ZikKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jhc2U6Omlu
OwogICAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CiAgICAg
ICAgaWYgKF9fdGVzdGluKQogICAgICAgICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9NX2J1ZiwgX01f
YnVmICsgX19vZmYpOwogICAgICAgIGlmIChfX3Rlc3RvdXQpCiAgICAgICAgICB0aGlzLT5zZXRw
KF9NX2J1ZiwgX01fYnVmICsgX19vZmYpOwogICAgICB9CgogICAgICBib29sCiAgICAgIF9NX2lz
X2luZGV0ZXJtaW5hdGUodm9pZCkKICAgICAgewogICAgICAgIGJvb2wgX19yZXQgPSBmYWxzZTsK
CiAgICAgICAgaWYgKF9NX2J1ZikKICAgICAgICAgIHsKICAgICAgICAgICAgaWYgKF9NX21vZGUg
JiBpb3NfYmFzZTo6aW4pCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9pbl9iZWcgPT0gX01faW5f
Y3VyICYmIF9NX2luX2N1ciA9PSBfTV9pbl9lbmQ7CiAgICAgICAgICAgIGlmIChfTV9tb2RlICYg
aW9zX2Jhc2U6Om91dCkKICAgICAgICAgICAgICBfX3JldCA9IF9NX291dF9iZWcgPT0gX01fb3V0
X2N1ciAmJiBfTV9vdXRfY3VyID09IF9NX291dF9lbmQ7CiAgICAgICAgICB9CiAgICAgICAgcmV0
dXJuIF9fcmV0OwogICAgICB9CgogIHB1YmxpYzoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNf
c3RyZWFtYnVmKCkKICAgICAgewogICAgICAgIF9NX2J1Zl91bmlmaWVkID0gZmFsc2U7CiAgICAg
ICAgX01fYnVmX3NpemUgPSAwOwogICAgICAgIF9NX2J1Zl9zaXplX29wdCA9IDA7CiAgICAgICAg
X01fbW9kZSA9IGlvc19iYXNlOjpvcGVubW9kZSgwKTsKICAgICAgICBfTV9idWZfbG9jYWxlX2lu
aXQgPSBmYWxzZTsKICAgICAgfQoKCiAgICAgIGxvY2FsZQogICAgICBwdWJpbWJ1ZShjb25zdCBs
b2NhbGUgJl9fbG9jKQogICAgICB7CiAgICAgICAgbG9jYWxlIF9fdG1wKHRoaXMtPmdldGxvYygp
KTsKICAgICAgICB0aGlzLT5pbWJ1ZShfX2xvYyk7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAg
ICB9CgogICAgICBsb2NhbGUKICAgICAgZ2V0bG9jKCkgY29uc3QKICAgICAgewogICAgICAgIGlm
IChfTV9idWZfbG9jYWxlX2luaXQpCiAgICAgICAgICByZXR1cm4gX01fYnVmX2xvY2FsZTsKICAg
ICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gbG9jYWxlKCk7CiAgICAgIH0KCgogICAgICBfX3N0
cmVhbWJ1Zl90eXBlKgogICAgICBwdWJzZXRidWYoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUg
X19uKQogICAgICB7IHJldHVybiB0aGlzLT5zZXRidWYoX19zLCBfX24pOyB9CgogICAgICBwb3Nf
dHlwZQogICAgICBwdWJzZWVrb2ZmKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBf
X3dheSwKICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jh
c2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gdGhpcy0+c2Vla29mZihfX29m
ZiwgX193YXksIF9fbW9kZSk7IH0KCiAgICAgIHBvc190eXBlCiAgICAgIHB1YnNlZWtwb3MocG9z
X3R5cGUgX19zcCwKICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0g
aW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gdGhpcy0+c2Vla3Bv
cyhfX3NwLCBfX21vZGUpOyB9CgogICAgICBpbnQKICAgICAgcHVic3luYygpIHsgcmV0dXJuIHRo
aXMtPnN5bmMoKTsgfQoKCgogICAgICBzdHJlYW1zaXplCiAgICAgIGluX2F2YWlsKCkKICAgICAg
ewogICAgICAgIHN0cmVhbXNpemUgX19yZXQ7CiAgICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9p
bl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmIChfTV9wYmFja19p
bml0KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGludF90eXBlIF9fc2F2ZV9sZW4g
PSBfTV9wYmFja19lbmRfc2F2ZSAtIF9NX3BiYWNrX2N1cl9zYXZlOwogICAgICAgICAgICAgICAg
aW50X3R5cGUgX19wYmFja19sZW4gPSBfTV9pbl9jdXIgLSBfTV9wYmFjazsKICAgICAgICAgICAg
ICAgIF9fcmV0ID0gX19zYXZlX2xlbiAtIF9fcGJhY2tfbGVuOwogICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fcmV0ID0gdGhpcy0+ZWdwdHIoKSAtIHRoaXMt
PmdwdHIoKTsKICAgICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX3JldCA9IHRoaXMt
PnNob3dtYW55YygpOwogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKICAgICAgaW50X3R5
cGUKICAgICAgc25leHRjKCkKICAgICAgewogICAgICAgIGludF90eXBlIF9fZW9mID0gdHJhaXRz
X3R5cGU6OmVvZigpOwogICAgICAgIHJldHVybiAodGhpcy0+c2J1bXBjKCkgPT0gX19lb2YgPyBf
X2VvZiA6IHRoaXMtPnNnZXRjKCkpOwogICAgICB9CgogICAgICBpbnRfdHlwZQogICAgICBzYnVt
cGMoKTsKCiAgICAgIGludF90eXBlCiAgICAgIHNnZXRjKCkKICAgICAgewogICAgICAgIGludF90
eXBlIF9fcmV0OwogICAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5k
KQogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKih0aGlzLT5ncHRy
KCkpKTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3JldCA9IHRoaXMtPnVuZGVyZmxvdygpOwog
ICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKICAgICAgc3RyZWFtc2l6ZQogICAgICBzZ2V0
bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnhz
Z2V0bihfX3MsIF9fbik7IH0KCgogICAgICBpbnRfdHlwZQogICAgICBzcHV0YmFja2MoY2hhcl90
eXBlIF9fYyk7CgogICAgICBpbnRfdHlwZQogICAgICBzdW5nZXRjKCk7CgoKICAgICAgaW50X3R5
cGUKICAgICAgc3B1dGMoY2hhcl90eXBlIF9fYyk7CgogICAgICBzdHJlYW1zaXplCiAgICAgIHNw
dXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4g
dGhpcy0+eHNwdXRuKF9fcywgX19uKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgYmFzaWNfc3Ry
ZWFtYnVmKCkKICAgICAgOiBfTV9idWYoX19udWxsKSwgX01fYnVmX3NpemUoMCksCiAgICAgIF9N
X2J1Zl9zaXplX29wdChzdGF0aWNfY2FzdDxpbnRfdHlwZT4oODE5MikpLCBfTV9idWZfdW5pZmll
ZChmYWxzZSksCiAgICAgIF9NX2luX2JlZygwKSwgX01faW5fY3VyKDApLCBfTV9pbl9lbmQoMCks
IF9NX291dF9iZWcoMCksIF9NX291dF9jdXIoMCksCiAgICAgIF9NX291dF9lbmQoMCksIF9NX21v
ZGUoaW9zX2Jhc2U6Om9wZW5tb2RlKDApKSwgX01fYnVmX2xvY2FsZShsb2NhbGUoKSksCiAgICAg
IF9NX2J1Zl9sb2NhbGVfaW5pdChmYWxzZSksIF9NX3BiYWNrX3NpemUoMSksIF9NX3BiYWNrKF9f
bnVsbCksCiAgICAgIF9NX3BiYWNrX2N1cl9zYXZlKF9fbnVsbCksIF9NX3BiYWNrX2VuZF9zYXZl
KF9fbnVsbCksIF9NX3BiYWNrX2luaXQoZmFsc2UpCiAgICAgIHsgfQoKCiAgICAgIGNoYXJfdHlw
ZSoKICAgICAgZWJhY2soKSBjb25zdCB7IHJldHVybiBfTV9pbl9iZWc7IH0KCiAgICAgIGNoYXJf
dHlwZSoKICAgICAgZ3B0cigpIGNvbnN0IHsgcmV0dXJuIF9NX2luX2N1cjsgfQoKICAgICAgY2hh
cl90eXBlKgogICAgICBlZ3B0cigpIGNvbnN0IHsgcmV0dXJuIF9NX2luX2VuZDsgfQoKICAgICAg
dm9pZAogICAgICBnYnVtcChpbnQgX19uKSB7IF9NX2luX2N1ciArPSBfX247IH0KCiAgICAgIHZv
aWQKICAgICAgc2V0ZyhjaGFyX3R5cGUqIF9fZ2JlZywgY2hhcl90eXBlKiBfX2duZXh0LCBjaGFy
X3R5cGUqIF9fZ2VuZCkKICAgICAgewogICAgICAgIF9NX2luX2JlZyA9IF9fZ2JlZzsKICAgICAg
ICBfTV9pbl9jdXIgPSBfX2duZXh0OwogICAgICAgIF9NX2luX2VuZCA9IF9fZ2VuZDsKICAgICAg
ICBpZiAoIShfTV9tb2RlICYgaW9zX2Jhc2U6OmluKSAmJiBfX2diZWcgJiYgX19nbmV4dCAmJiBf
X2dlbmQpCiAgICAgICAgICBfTV9tb2RlID0gX01fbW9kZSB8IGlvc19iYXNlOjppbjsKICAgICAg
fQoKCiAgICAgIGNoYXJfdHlwZSoKICAgICAgcGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9vdXRf
YmVnOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIHBwdHIoKSBjb25zdCB7IHJldHVybiBfTV9v
dXRfY3VyOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGVwcHRyKCkgY29uc3QgeyByZXR1cm4g
X01fb3V0X2VuZDsgfQoKICAgICAgdm9pZAogICAgICBwYnVtcChpbnQgX19uKSB7IF9NX291dF9j
dXIgKz0gX19uOyB9CgogICAgICB2b2lkCiAgICAgIHNldHAoY2hhcl90eXBlKiBfX3BiZWcsIGNo
YXJfdHlwZSogX19wZW5kKQogICAgICB7CiAgICAgICAgX01fb3V0X2JlZyA9IF9NX291dF9jdXIg
PSBfX3BiZWc7CiAgICAgICAgX01fb3V0X2VuZCA9IF9fcGVuZDsKICAgICAgICBpZiAoIShfTV9t
b2RlICYgaW9zX2Jhc2U6Om91dCkgJiYgX19wYmVnICYmIF9fcGVuZCkKICAgICAgICAgIF9NX21v
ZGUgPSBfTV9tb2RlIHwgaW9zX2Jhc2U6Om91dDsKICAgICAgfQoKCgogICAgICB2aXJ0dWFsIHZv
aWQKICAgICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgICAgewogICAgICAgIF9NX2J1
Zl9sb2NhbGVfaW5pdCA9IHRydWU7CiAgICAgICAgaWYgKF9NX2J1Zl9sb2NhbGUgIT0gX19sb2Mp
CiAgICAgICAgICBfTV9idWZfbG9jYWxlID0gX19sb2M7CiAgICAgIH0KCgogICAgICB2aXJ0dWFs
IGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsX1RyYWl0cz4qCiAgICAgIHNldGJ1ZihjaGFyX3R5
cGUqLCBzdHJlYW1zaXplKQogICAgICB7IHJldHVybiB0aGlzOyB9CgogICAgICB2aXJ0dWFsIHBv
c190eXBlCiAgICAgIHNlZWtvZmYob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyLAogICAgICAg
ICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQp
CiAgICAgIHsgcmV0dXJuIHBvc190eXBlKG9mZl90eXBlKC0xKSk7IH0KCiAgICAgIHZpcnR1YWwg
cG9zX3R5cGUKICAgICAgc2Vla3Bvcyhwb3NfdHlwZSwKICAgICAgICAgICAgICBpb3NfYmFzZTo6
b3Blbm1vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVybiBw
b3NfdHlwZShvZmZfdHlwZSgtMSkpOyB9CgogICAgICB2aXJ0dWFsIGludAogICAgICBzeW5jKCkg
eyByZXR1cm4gMDsgfQoKCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICBzaG93bWFueWMo
KSB7IHJldHVybiAwOyB9CgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgeHNnZXRuKGNo
YXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAg
ICAgIHVuZGVyZmxvdygpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQoKICAg
ICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1ZmxvdygpCiAgICAgIHsKICAgICAgICBpbnRfdHlw
ZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICBib29sIF9fdGVzdGVvZiA9IHRo
aXMtPnVuZGVyZmxvdygpID09IF9fcmV0OwogICAgICAgIGJvb2wgX190ZXN0cGVuZGluZyA9IF9N
X2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQ7CiAgICAgICAgaWYgKCFfX3Rlc3Rlb2Yg
JiYgX190ZXN0cGVuZGluZykKICAgICAgICAgIHsKICAgICAgICAgICAgX19yZXQgPSB0cmFpdHNf
dHlwZTo6dG9faW50X3R5cGUoKl9NX2luX2N1cik7CiAgICAgICAgICAgICsrX01faW5fY3VyOwog
ICAgICAgICAgICBpZiAoX01fYnVmX3VuaWZpZWQgJiYgX01fbW9kZSAmIGlvc19iYXNlOjpvdXQp
CiAgICAgICAgICAgICAgKytfTV9vdXRfY3VyOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBf
X3JldDsKICAgICAgfQoKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgcGJhY2tmYWlsKGlu
dF90eXBlID0gdHJhaXRzX3R5cGU6OmVvZigpKQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6
ZW9mKCk7IH0KCgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgeHNwdXRuKGNvbnN0IGNo
YXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAg
ICAgIG92ZXJmbG93KGludF90eXBlID0gdHJhaXRzX3R5cGU6OmVvZigpKQogICAgICB7IHJldHVy
biB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KIyA1MTYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfc3RyZWFtYnVmLmgiIDMKICAgIHByaXZhdGU6CiAgICAgIGJhc2ljX3N0cmVhbWJ1
Zihjb25zdCBfX3N0cmVhbWJ1Zl90eXBlJik7CgogICAgICBfX3N0cmVhbWJ1Zl90eXBlJgogICAg
ICBvcGVyYXRvcj0oY29uc3QgX19zdHJlYW1idWZfdHlwZSYpOwoKICAgIH07Cgp9CgoKCgojIDEg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdHJlYW1idWYudGNjIiAxIDMKIyAzNyAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0cmVhbWJ1Zi50Y2MiIDMKbmFtZXNwYWNl
IHN0ZCB7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3Ry
ZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2J1bXBjKCkKICAgIHsKICAgICAgaW50X3R5
cGUgX19yZXQ7CiAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQog
ICAgICAgIHsKICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSAqZ3B0cigpOwogICAgICAgICAgX01f
aW5fY3VyX21vdmUoMSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlw
ZShfX2MpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gdGhpcy0+dWZsb3co
KTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6
aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNwdXRi
YWNrYyhjaGFyX3R5cGUgX19jKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgYm9v
bCBfX3Rlc3Rwb3MgPSBfTV9pbl9jdXIgJiYgX01faW5fYmVnIDwgX01faW5fY3VyOwogICAgICBi
b29sIF9fdGVzdG5lID0gX01faW5fY3VyICYmICF0cmFpdHNfdHlwZTo6ZXEoX19jLCB0aGlzLT5n
cHRyKClbLTFdKTsKICAgICAgaWYgKCFfX3Rlc3Rwb3MgfHwgX190ZXN0bmUpCiAgICAgICAgX19y
ZXQgPSBwYmFja2ZhaWwodHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykpOwogICAgICBlbHNl
CiAgICAgICAgewogICAgICAgICAgX01faW5fY3VyX21vdmUoLTEpOwogICAgICAgICAgX19yZXQg
PSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKnRoaXMtPmdwdHIoKSk7CiAgICAgICAgfQogICAg
ICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlw
ZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3VuZ2V0YygpCiAg
ICB7CiAgICAgIGludF90eXBlIF9fcmV0OwogICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2Jl
ZyA8IF9NX2luX2N1cikKICAgICAgICB7CiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgtMSk7CiAg
ICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsKICAg
ICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMtPnBiYWNrZmFpbCgpOwogICAg
ICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46Omlu
dF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzcHV0Yyhj
aGFyX3R5cGUgX19jKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX291
dF9idWZfc2l6ZSgpKQogICAgICAgIHsKICAgICAgICAgICpfTV9vdXRfY3VyID0gX19jOwogICAg
ICAgICAgX01fb3V0X2N1cl9tb3ZlKDEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6
dG9faW50X3R5cGUoX19jKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRo
aXMtPm92ZXJmbG93KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKTsKICAgICAgcmV0dXJu
IF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBzdHJlYW1zaXplCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6
CiAgICB4c2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBz
dHJlYW1zaXplIF9fcmV0ID0gMDsKICAgICAgd2hpbGUgKF9fcmV0IDwgX19uKQogICAgICAgIHsK
ICAgICAgICAgIHNpemVfdCBfX2J1Zl9sZW4gPSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiAgICAg
ICAgICBpZiAoX19idWZfbGVuID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNpemVf
dCBfX3JlbWFpbmluZyA9IF9fbiAtIF9fcmV0OwogICAgICAgICAgICAgIHNpemVfdCBfX2xlbiA9
IG1pbihfX2J1Zl9sZW4sIF9fcmVtYWluaW5nKTsKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6
Y29weShfX3MsIF9NX2luX2N1ciwgX19sZW4pOwogICAgICAgICAgICAgIF9fcmV0ICs9IF9fbGVu
OwogICAgICAgICAgICAgIF9fcyArPSBfX2xlbjsKICAgICAgICAgICAgICBfTV9pbl9jdXJfbW92
ZShfX2xlbik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSB0aGlzLT51ZmxvdygpOwogICAg
ICAgICAgICAgIGlmIChfX2MgIT0gdHJhaXRzX3R5cGU6OmVvZigpKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX3MrKywgdHJhaXRzX3R5
cGU6OnRvX2NoYXJfdHlwZShfX2MpKTsKICAgICAgICAgICAgICAgICAgKytfX3JldDsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUK
ICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHhzcHV0bihjb25zdCBj
aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19y
ZXQgPSAwOwogICAgICB3aGlsZSAoX19yZXQgPCBfX24pCiAgICAgICAgewogICAgICAgICAgb2Zm
X3R5cGUgX19idWZfbGVuID0gX01fb3V0X2J1Zl9zaXplKCk7CiAgICAgICAgICBpZiAoX19idWZf
bGVuID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIG9mZl90eXBlIF9fcmVtYWluaW5n
ID0gX19uIC0gX19yZXQ7CiAgICAgICAgICAgICAgb2ZmX3R5cGUgX19sZW4gPSBtaW4oX19idWZf
bGVuLCBfX3JlbWFpbmluZyk7CiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fb3V0
X2N1ciwgX19zLCBfX2xlbik7CiAgICAgICAgICAgICAgX19yZXQgKz0gX19sZW47CiAgICAgICAg
ICAgICAgX19zICs9IF9fbGVuOwogICAgICAgICAgICAgIF9NX291dF9jdXJfbW92ZShfX2xlbik7
CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSB0aGlzLT5vdmVyZmxvdyh0cmFpdHNfdHlwZTo6
dG9faW50X3R5cGUoKl9fcykpOwogICAgICAgICAgICAgIGlmIChfX2MgIT0gdHJhaXRzX3R5cGU6
OmVvZigpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICArK19fcmV0OwogICAg
ICAgICAgICAgICAgICArK19fczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0
dXJuIF9fcmV0OwogICAgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9z
PF9DaGFyVCwgX1RyYWl0cz4mIF9faW9zLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3Ry
ZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JpbiwKICAgICAgICAgICAgICAgICAgICAgIGJh
c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0KQogIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKCiAgICAgIHN0cmVhbXNpemUg
X19yZXQgPSAwOwogICAgICBzdHJlYW1zaXplIF9fYnVmc2l6ZSA9IF9fc2Jpbi0+aW5fYXZhaWwo
KTsKICAgICAgc3RyZWFtc2l6ZSBfX3h0cmN0OwogICAgICBib29sIF9fdGVzdHB1dCA9IF9fc2Jv
dXQtPl9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OwogICAgICB0cnkgewogICAgICAgIHdoaWxlIChf
X3Rlc3RwdXQgJiYgX19idWZzaXplICE9IC0xKQogICAgICAgICAgewogICAgICAgICAgICBfX3h0
cmN0ID0gX19zYm91dC0+c3B1dG4oX19zYmluLT5ncHRyKCksIF9fYnVmc2l6ZSk7CiAgICAgICAg
ICAgIF9fcmV0ICs9IF9feHRyY3Q7CiAgICAgICAgICAgIF9fc2Jpbi0+X01faW5fY3VyX21vdmUo
X194dHJjdCk7CiAgICAgICAgICAgIGlmIChfX3h0cmN0ID09IF9fYnVmc2l6ZSkKICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiaW4tPnNnZXRjKCk7CiAg
ICAgICAgICAgICAgICBpZiAoX19jID09IF9UcmFpdHM6OmVvZigpKQogICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgX19pb3Muc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7
CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgIF9fYnVmc2l6ZSA9IF9fc2Jpbi0+aW5fYXZhaWwoKTsKICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgfQog
ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkgewogICAgICAgIGlmICgoX19pb3MuZXhjZXB0
aW9ucygpICYgaW9zX2Jhc2U6OmZhaWxiaXQpICE9IDApCiAgICAgICAgICB0aHJvdzsKICAgICAg
fQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9Cn0KIyA1MzAgIi91c3IvbG9jYWwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDIgMwojIDQ2ICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz
L2JpdHMvYmFzaWNfaW9zLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvYmFzaWNfaW9zLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3Ni
dWZfaXRlci5oIiAxIDMKIyAzNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3NidWZf
aXRlci5oIiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yCiAgICA6IHB1Ymxp
YyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgog
ICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0
eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVm
PF9DaGFyVCwgX1RyYWl0cz4gc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+IG9zdHJlYW1fdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBz
dHJlYW1idWZfdHlwZSogX01fc2J1ZjsKICAgICAgYm9vbCBfTV9mYWlsZWQ7CgogICAgcHVibGlj
OgogICAgICBpbmxpbmUKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9f
cykgdGhyb3cgKCkKICAgICAgOiBfTV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01fZmFpbGVkKCFfTV9z
YnVmKSB7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5cGUqIF9fcykg
dGhyb3cgKCkKICAgICAgOiBfTV9zYnVmKF9fcyksIF9NX2ZhaWxlZCghX01fc2J1ZikgeyB9Cgog
ICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYyk7Cgog
ICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVy
YXRvcisrKGludCkgdGhyb3coKQogICAgICB7IHJldHVybiAqdGhpczsgfQoKICAgICAgb3N0cmVh
bWJ1Zl9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHRocm93KCkKICAgICAgeyByZXR1cm4g
KnRoaXM7IH0KCiAgICAgIGJvb2wKICAgICAgZmFpbGVkKCkgY29uc3QgdGhyb3coKQogICAgICB7
IHJldHVybiBfTV9mYWlsZWQ7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwg
X1RyYWl0cz4mCiAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJh
dG9yPShfQ2hhclQgX19jKQogICAgewogICAgICBpZiAoIV9NX2ZhaWxlZCAmJgogICAgICAgICAg
X1RyYWl0czo6ZXFfaW50X3R5cGUoX01fc2J1Zi0+c3B1dGMoX19jKSxfVHJhaXRzOjplb2YoKSkp
CiAgICAgIF9NX2ZhaWxlZCA9IHRydWU7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBpc3Ry
ZWFtYnVmX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxpbnB1dF9pdGVyYXRvcl90YWcs
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUsCiAgICAgICAgICAgICAgICAgICAg
ICBfQ2hhclQqLCBfQ2hhclQmPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hh
clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYg
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5
cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IGlzdHJlYW1fdHlwZTsKCiAgICAg
IHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbWJ1
Zml0ZXJfdHlwZTsKCiAgICBwcml2YXRlOgoKCgoKCgoKICAgICAgc3RyZWFtYnVmX3R5cGUqIF9N
X3NidWY7CiAgICAgIGludF90eXBlIF9NX2M7CgogICAgcHVibGljOgogICAgICBpc3RyZWFtYnVm
X2l0ZXJhdG9yKCkgdGhyb3coKQogICAgICA6IF9NX3NidWYoX19udWxsKSwgX01fYygtMikgeyB9
CgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKGlzdHJlYW1fdHlwZSYgX19zKSB0aHJvdygpCiAg
ICAgIDogX01fc2J1ZihfX3MucmRidWYoKSksIF9NX2MoLTIpIHsgfQoKICAgICAgaXN0cmVhbWJ1
Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19zKSB0aHJvdygpCiAgICAgIDogX01fc2J1Zihf
X3MpLCBfTV9jKC0yKSB7IH0KCgoKCiAgICAgIGNoYXJfdHlwZQogICAgICBvcGVyYXRvciooKSBj
b25zdAogICAgICB7CgogICAgICAgIGNoYXJfdHlwZSBfX3JldDsKICAgICAgICBpZiAoX01fc2J1
ZiAmJiBfTV9jICE9IHN0YXRpY19jYXN0PGludF90eXBlPigtMikpCiAgICAgICAgICBfX3JldCA9
IF9NX2M7CiAgICAgICAgZWxzZSBpZiAoX01fc2J1ZikKICAgICAgICAgIF9fcmV0ID0gdHJhaXRz
X3R5cGU6OnRvX2NoYXJfdHlwZShfTV9zYnVmLT5zZ2V0YygpKTsKICAgICAgICBlbHNlCiAgICAg
ICAgICBfX3JldCA9IHN0YXRpY19jYXN0PGNoYXJfdHlwZT4odHJhaXRzX3R5cGU6OmVvZigpKTsK
ICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgICAgIF9faXN0cmVhbWJ1Zml0ZXJfdHlw
ZSYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsKICAgICAgICBpZiAoX01fc2J1ZikKICAgICAg
ICAgIF9NX3NidWYtPnNidW1wYygpOwogICAgICAgIF9NX2MgPSAtMjsKICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgIH0KCiAgICAgIF9faXN0cmVhbWJ1Zml0ZXJfdHlwZQogICAgICBvcGVyYXRv
cisrKGludCkKICAgICAgewogICAgICAgIF9faXN0cmVhbWJ1Zml0ZXJfdHlwZSBfX29sZCA9ICp0
aGlzOwogICAgICAgIGlmIChfTV9zYnVmKQogICAgICAgICAgX19vbGQuX01fYyA9IF9NX3NidWYt
PnNidW1wYygpOwogICAgICAgIF9NX2MgPSAtMjsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAg
IH0KCiAgICAgIGJvb2wKICAgICAgZXF1YWwoY29uc3QgX19pc3RyZWFtYnVmaXRlcl90eXBlJiBf
X2IpCiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsK
ICAgICAgICBib29sIF9fdGhpc2VvZiA9ICFfTV9zYnVmIHx8IF9NX3NidWYtPnNnZXRjKCkgPT0g
X19lb2Y7CiAgICAgICAgYm9vbCBfX2Jlb2YgPSAhX19iLl9NX3NidWYKICAgICAgICAgICAgICAg
ICAgICAgIHx8IF9fYi5fTV9zYnVmLT5zZ2V0YygpID09IF9fZW9mOwogICAgICAgIHJldHVybiAo
X190aGlzZW9mICYmIF9fYmVvZiB8fCAoIV9fdGhpc2VvZiAmJiAhX19iZW9mKSk7CiAgICAgIH0K
CgoKCiAgICAgIGJvb2wKICAgICAgZXF1YWwoY29uc3QgX19pc3RyZWFtYnVmaXRlcl90eXBlJiBf
X2IpIGNvbnN0CiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjpl
b2YoKTsKICAgICAgICBib29sIF9fdGhpc2VvZiA9ICFfTV9zYnVmIHx8IF9NX3NidWYtPnNnZXRj
KCkgPT0gX19lb2Y7CiAgICAgICAgYm9vbCBfX2Jlb2YgPSAhX19iLl9NX3NidWYKICAgICAgICAg
ICAgICAgICAgICAgIHx8IF9fYi5fTV9zYnVmLT5zZ2V0YygpID09IF9fZW9mOwogICAgICAgIHJl
dHVybiAoX190aGlzZW9mICYmIF9fYmVvZiB8fCAoIV9fdGhpc2VvZiAmJiAhX19iZW9mKSk7CiAg
ICAgIH0KCiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBpc3RyZWFtYnVmX2l0ZXJh
dG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYSwKICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbWJ1
Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2IpCiAgICB7IHJldHVybiBfX2EuZXF1YWwo
X19iKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9D
aGFyVCwgX1RyYWl0cz4mIF9fYSwKICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVy
YXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2IpCiAgICB7IHJldHVybiAhX19hLmVxdWFsKF9fYik7
IH0KfQojIDM2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfaW9zLmgiIDIg
MwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDEg
MwojIDQwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAz
CgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3RpbWUuaCIgMSAzCiMg
MzcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3RpbWUuaCIgMwojIDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzOCAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAyIDMKIyA0MCAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L3RpbWUuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKZXh0ZXJu
ICJDIiB7CgoKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAy
IDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDQzICIvdXNyL2luY2x1
ZGUvdGltZS5oIiAyIDMKIyAxMTggIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKc3RydWN0IHRtCnsK
ICBpbnQgdG1fc2VjOwogIGludCB0bV9taW47CiAgaW50IHRtX2hvdXI7CiAgaW50IHRtX21kYXk7
CiAgaW50IHRtX21vbjsKICBpbnQgdG1feWVhcjsKICBpbnQgdG1fd2RheTsKICBpbnQgdG1feWRh
eTsKICBpbnQgdG1faXNkc3Q7CgoKICBsb25nIGludCB0bV9nbXRvZmY7CiAgX19jb25zdCBjaGFy
ICp0bV96b25lOwoKCgoKfTsKCgoKCnN0cnVjdCBpdGltZXJzcGVjCiAgewogICAgc3RydWN0IHRp
bWVzcGVjIGl0X2ludGVydmFsOwogICAgc3RydWN0IHRpbWVzcGVjIGl0X3ZhbHVlOwogIH07CgoK
c3RydWN0IHNpZ2V2ZW50OwojIDE2MyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gY2xv
Y2tfdCBjbG9jayAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lICh0aW1lX3Qg
Kl9fdGltZXIpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZGlmZnRpbWUgKHRpbWVfdCBfX3Rp
bWUxLCB0aW1lX3QgX190aW1lMCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgoKZXh0ZXJuIHRpbWVfdCBta3RpbWUgKHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIHNpemVfdCBzdHJmdGltZSAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVf
dCBfX21heHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdG0g
Kl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RycHRpbWUgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBzdHJ1Y3QgdG0gKl9fdHApCiAgICAgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikg
dGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZSAoX19jb25zdCB0aW1lX3Qg
Kl9fdGltZXIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lX3IgKF9fY29u
c3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3Qg
dG0gKmxvY2FsdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWUgKF9fY29uc3Qgc3RydWN0IHRtICpfX3Rw
KSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqY3RpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVy
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWVfciAoX19jb25zdCBzdHJ1Y3Qg
dG0gKl9fcmVzdHJpY3QgX190cCwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0
cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKmN0aW1lX3IgKF9fY29uc3QgdGlt
ZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jl
c3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpfX3R6bmFtZVsyXTsKZXh0
ZXJuIGludCBfX2RheWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQgX190aW1lem9uZTsKCgoKCmV4dGVy
biBjaGFyICp0em5hbWVbMl07CgoKCmV4dGVybiB2b2lkIHR6c2V0ICh2b2lkKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGludCBkYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50IHRpbWV6b25lOwoKCgoKCmV4
dGVybiBpbnQgc3RpbWUgKF9fY29uc3QgdGltZV90ICpfX3doZW4pIHRocm93ICgpOwojIDI3MSAi
L3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gdGltZV90IHRpbWVnbSAoc3RydWN0IHRtICpf
X3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWVsb2NhbCAoc3RydWN0IHRtICpfX3Rw
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGR5c2l6ZSAoaW50IF9feWVhcikgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVybiBpbnQgbmFub3NsZWVwIChfX2Nv
bnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXF1ZXN0ZWRfdGltZSwKICAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCB0aW1lc3BlYyAqX19yZW1haW5pbmcpIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IGNsb2NrX2dldHJlcyAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIHN0cnVjdCB0aW1lc3BlYyAqX19y
ZXMpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0dGltZSAoY2xvY2tpZF90IF9fY2xv
Y2tfaWQsIHN0cnVjdCB0aW1lc3BlYyAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBjbG9j
a19zZXR0aW1lIChjbG9ja2lkX3QgX19jbG9ja19pZCwgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMg
Kl9fdHApCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgY2xvY2tfbmFub3NsZWVwIChjbG9j
a2lkX3QgX19jbG9ja19pZCwgaW50IF9fZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2Nr
X2dldGNwdWNsb2NraWQgKHBpZF90IF9fcGlkLCBjbG9ja2lkX3QgKl9fY2xvY2tfaWQpIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGludCB0aW1lcl9jcmVhdGUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLAog
ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNpZ2V2ZW50ICpfX3Jlc3RyaWN0IF9fZXZw
LAogICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfdCAqX19yZXN0cmljdCBfX3RpbWVyaWQp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfZGVsZXRlICh0aW1lcl90IF9fdGltZXJpZCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9zZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwg
aW50IF9fZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgaXRp
bWVyc3BlYyAqX19yZXN0cmljdCBfX3ZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0IF9fb3ZhbHVlKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHRpbWVyX2dldHRpbWUgKHRpbWVyX3QgX190aW1lcmlkLCBzdHJ1Y3QgaXRpbWVyc3BlYyAq
X192YWx1ZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX2dldG92ZXJydW4gKHRp
bWVyX3QgX190aW1lcmlkKSB0aHJvdyAoKTsKIyAzNDIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMK
ZXh0ZXJuIGludCBnZXRkYXRlX2VycjsKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnZXRkYXRlIChf
X2NvbnN0IGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKIyAzNTcgIi91c3IvaW5jbHVkZS90aW1l
LmgiIDMKZXh0ZXJuIGludCBnZXRkYXRlX3IgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3N0
cmluZywKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3Jlc2J1
ZnApIHRocm93ICgpOwoKCgp9CiMgNDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfY3RpbWUuaCIgMiAzCiMgNTMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
Y3RpbWUuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmNsb2NrX3Q7CiAgdXNpbmcgOjp0
aW1lX3Q7CiAgdXNpbmcgOjp0bTsKCiAgdXNpbmcgOjpjbG9jazsKICB1c2luZyA6OmRpZmZ0aW1l
OwogIHVzaW5nIDo6bWt0aW1lOwogIHVzaW5nIDo6dGltZTsKICB1c2luZyA6OmFzY3RpbWU7CiAg
dXNpbmcgOjpjdGltZTsKICB1c2luZyA6OmdtdGltZTsKICB1c2luZyA6OmxvY2FsdGltZTsKICB1
c2luZyA6OnN0cmZ0aW1lOwp9CiMgNDIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9s
b2NhbGVfZmFjZXRzLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfaW9zLmgiIDEgMwojIDQzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxl
X2ZhY2V0cy5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDEgMwojIDI0ICIv
dXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9ubF90eXBlcy5oIiAx
IDMKIyAyMiAiL3Vzci9pbmNsdWRlL25sX3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVh
dHVyZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9ubF90eXBlcy5oIiAyIDMKIyAzMSAiL3Vz
ci9pbmNsdWRlL25sX3R5cGVzLmgiIDMKZXh0ZXJuICJDIiB7CgoKdHlwZWRlZiB2b2lkICpubF9j
YXRkOwoKCnR5cGVkZWYgaW50IG5sX2l0ZW07CgoKZXh0ZXJuIG5sX2NhdGQgY2F0b3BlbiAoX19j
b25zdCBjaGFyICpfX2NhdF9uYW1lLCBpbnQgX19mbGFnKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNo
YXIgKmNhdGdldHMgKG5sX2NhdGQgX19jYXRhbG9nLCBpbnQgX19zZXQsIGludCBfX251bWJlciwK
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgY2F0Y2xvc2UgKG5sX2NhdGQgX19jYXRhbG9nKSB0aHJvdyAoKTsKCn0KIyAy
NSAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9s
b2NhbGUuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsZS5oIiAzCmVudW0Kewog
IF9fTENfQ1RZUEUgPSAwLAogIF9fTENfTlVNRVJJQyA9IDEsCiAgX19MQ19USU1FID0gMiwKICBf
X0xDX0NPTExBVEUgPSAzLAogIF9fTENfTU9ORVRBUlkgPSA0LAogIF9fTENfTUVTU0FHRVMgPSA1
LAogIF9fTENfQUxMID0gNiwKICBfX0xDX1BBUEVSID0gNywKICBfX0xDX05BTUUgPSA4LAogIF9f
TENfQUREUkVTUyA9IDksCiAgX19MQ19URUxFUEhPTkUgPSAxMCwKICBfX0xDX01FQVNVUkVNRU5U
ID0gMTEsCiAgX19MQ19JREVOVElGSUNBVElPTiA9IDEyCn07CiMgMjcgIi91c3IvaW5jbHVkZS9s
YW5naW5mby5oIiAyIDMKCgpleHRlcm4gIkMiIHsKIyA0MyAiL3Vzci9pbmNsdWRlL2xhbmdpbmZv
LmgiIDMKZW51bQp7CgoKCiAgQUJEQVlfMSA9ICgoKF9fTENfVElNRSkgPDwgMTYpIHwgKDApKSwK
CiAgQUJEQVlfMiwKCiAgQUJEQVlfMywKCiAgQUJEQVlfNCwKCiAgQUJEQVlfNSwKCiAgQUJEQVlf
NiwKCiAgQUJEQVlfNywKCgoKICBEQVlfMSwKCiAgREFZXzIsCgogIERBWV8zLAoKICBEQVlfNCwK
CiAgREFZXzUsCgogIERBWV82LAoKICBEQVlfNywKCgoKICBBQk1PTl8xLAoKICBBQk1PTl8yLAoK
ICBBQk1PTl8zLAoKICBBQk1PTl80LAoKICBBQk1PTl81LAoKICBBQk1PTl82LAoKICBBQk1PTl83
LAoKICBBQk1PTl84LAoKICBBQk1PTl85LAoKICBBQk1PTl8xMCwKCiAgQUJNT05fMTEsCgogIEFC
TU9OXzEyLAoKCgogIE1PTl8xLAoKICBNT05fMiwKCiAgTU9OXzMsCgogIE1PTl80LAoKICBNT05f
NSwKCiAgTU9OXzYsCgogIE1PTl83LAoKICBNT05fOCwKCiAgTU9OXzksCgogIE1PTl8xMCwKCiAg
TU9OXzExLAoKICBNT05fMTIsCgoKICBBTV9TVFIsCgogIFBNX1NUUiwKCgogIERfVF9GTVQsCgog
IERfRk1ULAoKICBUX0ZNVCwKCiAgVF9GTVRfQU1QTSwKCgogIEVSQSwKCiAgX19FUkFfWUVBUiwK
CgoKICBFUkFfRF9GTVQsCgogIEFMVF9ESUdJVFMsCgogIEVSQV9EX1RfRk1ULAoKICBFUkFfVF9G
TVQsCgoKICBfTkxfVElNRV9FUkFfTlVNX0VOVFJJRVMsCiAgX05MX1RJTUVfRVJBX0VOVFJJRVMs
CgogIF9OTF9XQUJEQVlfMSwKICBfTkxfV0FCREFZXzIsCiAgX05MX1dBQkRBWV8zLAogIF9OTF9X
QUJEQVlfNCwKICBfTkxfV0FCREFZXzUsCiAgX05MX1dBQkRBWV82LAogIF9OTF9XQUJEQVlfNywK
CgogIF9OTF9XREFZXzEsCiAgX05MX1dEQVlfMiwKICBfTkxfV0RBWV8zLAogIF9OTF9XREFZXzQs
CiAgX05MX1dEQVlfNSwKICBfTkxfV0RBWV82LAogIF9OTF9XREFZXzcsCgoKICBfTkxfV0FCTU9O
XzEsCiAgX05MX1dBQk1PTl8yLAogIF9OTF9XQUJNT05fMywKICBfTkxfV0FCTU9OXzQsCiAgX05M
X1dBQk1PTl81LAogIF9OTF9XQUJNT05fNiwKICBfTkxfV0FCTU9OXzcsCiAgX05MX1dBQk1PTl84
LAogIF9OTF9XQUJNT05fOSwKICBfTkxfV0FCTU9OXzEwLAogIF9OTF9XQUJNT05fMTEsCiAgX05M
X1dBQk1PTl8xMiwKCgogIF9OTF9XTU9OXzEsCiAgX05MX1dNT05fMiwKICBfTkxfV01PTl8zLAog
IF9OTF9XTU9OXzQsCiAgX05MX1dNT05fNSwKICBfTkxfV01PTl82LAogIF9OTF9XTU9OXzcsCiAg
X05MX1dNT05fOCwKICBfTkxfV01PTl85LAogIF9OTF9XTU9OXzEwLAogIF9OTF9XTU9OXzExLAog
IF9OTF9XTU9OXzEyLAoKICBfTkxfV0FNX1NUUiwKICBfTkxfV1BNX1NUUiwKCiAgX05MX1dEX1Rf
Rk1ULAogIF9OTF9XRF9GTVQsCiAgX05MX1dUX0ZNVCwKICBfTkxfV1RfRk1UX0FNUE0sCgogIF9O
TF9XRVJBX1lFQVIsCiAgX05MX1dFUkFfRF9GTVQsCiAgX05MX1dBTFRfRElHSVRTLAogIF9OTF9X
RVJBX0RfVF9GTVQsCiAgX05MX1dFUkFfVF9GTVQsCgogIF9OTF9USU1FX1dFRUtfTkRBWVMsCiAg
X05MX1RJTUVfV0VFS18xU1REQVksCiAgX05MX1RJTUVfV0VFS18xU1RXRUVLLAogIF9OTF9USU1F
X0ZJUlNUX1dFRUtEQVksCiAgX05MX1RJTUVfRklSU1RfV09SS0RBWSwKICBfTkxfVElNRV9DQUxf
RElSRUNUSU9OLAogIF9OTF9USU1FX1RJTUVaT05FLAoKICBfREFURV9GTVQsCgogIF9OTF9XX0RB
VEVfRk1ULAoKICBfTkxfTlVNX0xDX1RJTUUsCgoKCgogIF9OTF9DT0xMQVRFX05SVUxFUyA9ICgo
KF9fTENfQ09MTEFURSkgPDwgMTYpIHwgKDApKSwKICBfTkxfQ09MTEFURV9SVUxFU0VUUywKICBf
TkxfQ09MTEFURV9UQUJMRU1CLAogIF9OTF9DT0xMQVRFX1dFSUdIVE1CLAogIF9OTF9DT0xMQVRF
X0VYVFJBTUIsCiAgX05MX0NPTExBVEVfSU5ESVJFQ1RNQiwKICBfTkxfQ09MTEFURV9HQVAxLAog
IF9OTF9DT0xMQVRFX0dBUDIsCiAgX05MX0NPTExBVEVfR0FQMywKICBfTkxfQ09MTEFURV9UQUJM
RVdDLAogIF9OTF9DT0xMQVRFX1dFSUdIVFdDLAogIF9OTF9DT0xMQVRFX0VYVFJBV0MsCiAgX05M
X0NPTExBVEVfSU5ESVJFQ1RXQywKICBfTkxfQ09MTEFURV9TWU1CX0hBU0hfU0laRU1CLAogIF9O
TF9DT0xMQVRFX1NZTUJfVEFCTEVNQiwKICBfTkxfQ09MTEFURV9TWU1CX0VYVFJBTUIsCiAgX05M
X0NPTExBVEVfQ09MTFNFUU1CLAogIF9OTF9DT0xMQVRFX0NPTExTRVFXQywKICBfTkxfTlVNX0xD
X0NPTExBVEUsCgoKCgogIF9OTF9DVFlQRV9DTEFTUyA9ICgoKF9fTENfQ1RZUEUpIDw8IDE2KSB8
ICgwKSksCiAgX05MX0NUWVBFX1RPVVBQRVIsCiAgX05MX0NUWVBFX0dBUDEsCiAgX05MX0NUWVBF
X1RPTE9XRVIsCiAgX05MX0NUWVBFX0dBUDIsCiAgX05MX0NUWVBFX0NMQVNTMzIsCiAgX05MX0NU
WVBFX0dBUDMsCiAgX05MX0NUWVBFX0dBUDQsCiAgX05MX0NUWVBFX0dBUDUsCiAgX05MX0NUWVBF
X0dBUDYsCiAgX05MX0NUWVBFX0NMQVNTX05BTUVTLAogIF9OTF9DVFlQRV9NQVBfTkFNRVMsCiAg
X05MX0NUWVBFX1dJRFRILAogIF9OTF9DVFlQRV9NQl9DVVJfTUFYLAogIF9OTF9DVFlQRV9DT0RF
U0VUX05BTUUsCiAgQ09ERVNFVCA9IF9OTF9DVFlQRV9DT0RFU0VUX05BTUUsCgogIF9OTF9DVFlQ
RV9UT1VQUEVSMzIsCiAgX05MX0NUWVBFX1RPTE9XRVIzMiwKICBfTkxfQ1RZUEVfQ0xBU1NfT0ZG
U0VULAogIF9OTF9DVFlQRV9NQVBfT0ZGU0VULAogIF9OTF9DVFlQRV9JTkRJR0lUU19NQl9MRU4s
CiAgX05MX0NUWVBFX0lORElHSVRTMF9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMxX01CLAogIF9O
TF9DVFlQRV9JTkRJR0lUUzJfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTM19NQiwKICBfTkxfQ1RZ
UEVfSU5ESUdJVFM0X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzVfTUIsCiAgX05MX0NUWVBFX0lO
RElHSVRTNl9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM3X01CLAogIF9OTF9DVFlQRV9JTkRJR0lU
UzhfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTOV9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFNfV0Nf
TEVOLAogIF9OTF9DVFlQRV9JTkRJR0lUUzBfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTMV9XQywK
ICBfTkxfQ1RZUEVfSU5ESUdJVFMyX1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzNfV0MsCiAgX05M
X0NUWVBFX0lORElHSVRTNF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM1X1dDLAogIF9OTF9DVFlQ
RV9JTkRJR0lUUzZfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTN19XQywKICBfTkxfQ1RZUEVfSU5E
SUdJVFM4X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzlfV0MsCiAgX05MX0NUWVBFX09VVERJR0lU
MF9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQxX01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDJfTUIs
CiAgX05MX0NUWVBFX09VVERJR0lUM19NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ0X01CLAogIF9O
TF9DVFlQRV9PVVRESUdJVDVfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUNl9NQiwKICBfTkxfQ1RZ
UEVfT1VURElHSVQ3X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDhfTUIsCiAgX05MX0NUWVBFX09V
VERJR0lUOV9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQwX1dDLAogIF9OTF9DVFlQRV9PVVRESUdJ
VDFfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUMl9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQzX1dD
LAogIF9OTF9DVFlQRV9PVVRESUdJVDRfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUNV9XQywKICBf
TkxfQ1RZUEVfT1VURElHSVQ2X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDdfV0MsCiAgX05MX0NU
WVBFX09VVERJR0lUOF9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ5X1dDLAogIF9OTF9DVFlQRV9U
UkFOU0xJVF9UQUJfU0laRSwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfRlJPTV9JRFgsCiAgX05MX0NU
WVBFX1RSQU5TTElUX0ZST01fVEJMLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9UT19JRFgsCiAgX05M
X0NUWVBFX1RSQU5TTElUX1RPX1RCTCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfREVGQVVMVF9NSVNT
SU5HX0xFTiwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfREVGQVVMVF9NSVNTSU5HLAogIF9OTF9DVFlQ
RV9UUkFOU0xJVF9JR05PUkVfTEVOLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9JR05PUkUsCiAgX05M
X0NUWVBFX0VYVFJBX01BUF8xLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMiwKICBfTkxfQ1RZUEVf
RVhUUkFfTUFQXzMsCiAgX05MX0NUWVBFX0VYVFJBX01BUF80LAogIF9OTF9DVFlQRV9FWFRSQV9N
QVBfNSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzYsCiAgX05MX0NUWVBFX0VYVFJBX01BUF83LAog
IF9OTF9DVFlQRV9FWFRSQV9NQVBfOCwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzksCiAgX05MX0NU
WVBFX0VYVFJBX01BUF8xMCwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzExLAogIF9OTF9DVFlQRV9F
WFRSQV9NQVBfMTIsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xMywKICBfTkxfQ1RZUEVfRVhUUkFf
TUFQXzE0LAogIF9OTF9OVU1fTENfQ1RZUEUsCgoKCgogIF9fSU5UX0NVUlJfU1lNQk9MID0gKCgo
X19MQ19NT05FVEFSWSkgPDwgMTYpIHwgKDApKSwKCgoKICBfX0NVUlJFTkNZX1NZTUJPTCwKCgoK
ICBfX01PTl9ERUNJTUFMX1BPSU5ULAoKCgogIF9fTU9OX1RIT1VTQU5EU19TRVAsCgoKCiAgX19N
T05fR1JPVVBJTkcsCgoKCiAgX19QT1NJVElWRV9TSUdOLAoKCgogIF9fTkVHQVRJVkVfU0lHTiwK
CgoKICBfX0lOVF9GUkFDX0RJR0lUUywKCgoKICBfX0ZSQUNfRElHSVRTLAoKCgogIF9fUF9DU19Q
UkVDRURFUywKCgoKICBfX1BfU0VQX0JZX1NQQUNFLAoKCgogIF9fTl9DU19QUkVDRURFUywKCgoK
ICBfX05fU0VQX0JZX1NQQUNFLAoKCgogIF9fUF9TSUdOX1BPU04sCgoKCiAgX19OX1NJR05fUE9T
TiwKCgoKICBfTkxfTU9ORVRBUllfQ1JOQ1lTVFIsCgogIF9fSU5UX1BfQ1NfUFJFQ0VERVMsCgoK
CiAgX19JTlRfUF9TRVBfQllfU1BBQ0UsCgoKCiAgX19JTlRfTl9DU19QUkVDRURFUywKCgoKICBf
X0lOVF9OX1NFUF9CWV9TUEFDRSwKCgoKICBfX0lOVF9QX1NJR05fUE9TTiwKCgoKICBfX0lOVF9O
X1NJR05fUE9TTiwKCgoKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9DVVJSX1NZTUJPTCwKICBfTkxf
TU9ORVRBUllfRFVPX0NVUlJFTkNZX1NZTUJPTCwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9GUkFD
X0RJR0lUUywKICBfTkxfTU9ORVRBUllfRFVPX0ZSQUNfRElHSVRTLAogIF9OTF9NT05FVEFSWV9E
VU9fUF9DU19QUkVDRURFUywKICBfTkxfTU9ORVRBUllfRFVPX1BfU0VQX0JZX1NQQUNFLAogIF9O
TF9NT05FVEFSWV9EVU9fTl9DU19QUkVDRURFUywKICBfTkxfTU9ORVRBUllfRFVPX05fU0VQX0JZ
X1NQQUNFLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX1BfQ1NfUFJFQ0VERVMsCiAgX05MX01PTkVU
QVJZX0RVT19JTlRfUF9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19JTlRfTl9DU19Q
UkVDRURFUywKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9O
RVRBUllfRFVPX1BfU0lHTl9QT1NOLAogIF9OTF9NT05FVEFSWV9EVU9fTl9TSUdOX1BPU04sCiAg
X05MX01PTkVUQVJZX0RVT19JTlRfUF9TSUdOX1BPU04sCiAgX05MX01PTkVUQVJZX0RVT19JTlRf
Tl9TSUdOX1BPU04sCiAgX05MX01PTkVUQVJZX1VOT19WQUxJRF9GUk9NLAogIF9OTF9NT05FVEFS
WV9VTk9fVkFMSURfVE8sCiAgX05MX01PTkVUQVJZX0RVT19WQUxJRF9GUk9NLAogIF9OTF9NT05F
VEFSWV9EVU9fVkFMSURfVE8sCiAgX05MX01PTkVUQVJZX0NPTlZFUlNJT05fUkFURSwKICBfTkxf
TU9ORVRBUllfREVDSU1BTF9QT0lOVF9XQywKICBfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9X
QywKICBfTkxfTlVNX0xDX01PTkVUQVJZLAoKCgogIF9fREVDSU1BTF9QT0lOVCA9ICgoKF9fTENf
TlVNRVJJQykgPDwgMTYpIHwgKDApKSwKCgoKICBSQURJWENIQVIgPSBfX0RFQ0lNQUxfUE9JTlQs
CgogIF9fVEhPVVNBTkRTX1NFUCwKCgoKICBUSE9VU0VQID0gX19USE9VU0FORFNfU0VQLAoKICBf
X0dST1VQSU5HLAoKCgogIF9OTF9OVU1FUklDX0RFQ0lNQUxfUE9JTlRfV0MsCiAgX05MX05VTUVS
SUNfVEhPVVNBTkRTX1NFUF9XQywKICBfTkxfTlVNX0xDX05VTUVSSUMsCgogIF9fWUVTRVhQUiA9
ICgoKF9fTENfTUVTU0FHRVMpIDw8IDE2KSB8ICgwKSksCgogIF9fTk9FWFBSLAoKICBfX1lFU1NU
UiwKCgoKICBfX05PU1RSLAoKCgogIF9OTF9OVU1fTENfTUVTU0FHRVMsCgogIF9OTF9QQVBFUl9I
RUlHSFQgPSAoKChfX0xDX1BBUEVSKSA8PCAxNikgfCAoMCkpLAogIF9OTF9QQVBFUl9XSURUSCwK
ICBfTkxfTlVNX0xDX1BBUEVSLAoKICBfTkxfTkFNRV9OQU1FX0ZNVCA9ICgoKF9fTENfTkFNRSkg
PDwgMTYpIHwgKDApKSwKICBfTkxfTkFNRV9OQU1FX0dFTiwKICBfTkxfTkFNRV9OQU1FX01SLAog
IF9OTF9OQU1FX05BTUVfTVJTLAogIF9OTF9OQU1FX05BTUVfTUlTUywKICBfTkxfTkFNRV9OQU1F
X01TLAogIF9OTF9OVU1fTENfTkFNRSwKCiAgX05MX0FERFJFU1NfUE9TVEFMX0ZNVCA9ICgoKF9f
TENfQUREUkVTUykgPDwgMTYpIHwgKDApKSwKICBfTkxfQUREUkVTU19DT1VOVFJZX05BTUUsCiAg
X05MX0FERFJFU1NfQ09VTlRSWV9QT1NULAogIF9OTF9BRERSRVNTX0NPVU5UUllfQUIyLAogIF9O
TF9BRERSRVNTX0NPVU5UUllfQUIzLAogIF9OTF9BRERSRVNTX0NPVU5UUllfQ0FSLAogIF9OTF9B
RERSRVNTX0NPVU5UUllfTlVNLAogIF9OTF9BRERSRVNTX0NPVU5UUllfSVNCTiwKICBfTkxfQURE
UkVTU19MQU5HX05BTUUsCiAgX05MX0FERFJFU1NfTEFOR19BQiwKICBfTkxfQUREUkVTU19MQU5H
X1RFUk0sCiAgX05MX0FERFJFU1NfTEFOR19MSUIsCiAgX05MX05VTV9MQ19BRERSRVNTLAoKICBf
TkxfVEVMRVBIT05FX1RFTF9JTlRfRk1UID0gKCgoX19MQ19URUxFUEhPTkUpIDw8IDE2KSB8ICgw
KSksCiAgX05MX1RFTEVQSE9ORV9URUxfRE9NX0ZNVCwKICBfTkxfVEVMRVBIT05FX0lOVF9TRUxF
Q1QsCiAgX05MX1RFTEVQSE9ORV9JTlRfUFJFRklYLAogIF9OTF9OVU1fTENfVEVMRVBIT05FLAoK
ICBfTkxfTUVBU1VSRU1FTlRfTUVBU1VSRU1FTlQgPSAoKChfX0xDX01FQVNVUkVNRU5UKSA8PCAx
NikgfCAoMCkpLAogIF9OTF9OVU1fTENfTUVBU1VSRU1FTlQsCgogIF9OTF9JREVOVElGSUNBVElP
Tl9USVRMRSA9ICgoKF9fTENfSURFTlRJRklDQVRJT04pIDw8IDE2KSB8ICgwKSksCiAgX05MX0lE
RU5USUZJQ0FUSU9OX1NPVVJDRSwKICBfTkxfSURFTlRJRklDQVRJT05fQUREUkVTUywKICBfTkxf
SURFTlRJRklDQVRJT05fQ09OVEFDVCwKICBfTkxfSURFTlRJRklDQVRJT05fRU1BSUwsCiAgX05M
X0lERU5USUZJQ0FUSU9OX1RFTCwKICBfTkxfSURFTlRJRklDQVRJT05fRkFYLAogIF9OTF9JREVO
VElGSUNBVElPTl9MQU5HVUFHRSwKICBfTkxfSURFTlRJRklDQVRJT05fVEVSUklUT1JZLAogIF9O
TF9JREVOVElGSUNBVElPTl9BVURJRU5DRSwKICBfTkxfSURFTlRJRklDQVRJT05fQVBQTElDQVRJ
T04sCiAgX05MX0lERU5USUZJQ0FUSU9OX0FCQlJFVklBVElPTiwKICBfTkxfSURFTlRJRklDQVRJ
T05fUkVWSVNJT04sCiAgX05MX0lERU5USUZJQ0FUSU9OX0RBVEUsCiAgX05MX0lERU5USUZJQ0FU
SU9OX0NBVEVHT1JZLAogIF9OTF9OVU1fTENfSURFTlRJRklDQVRJT04sCgoKICBfTkxfTlVNCn07
CiMgNTYzICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMwpleHRlcm4gY2hhciAqbmxfbGFuZ2lu
Zm8gKG5sX2l0ZW0gX19pdGVtKSB0aHJvdyAoKTsKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3hs
b2NhbGUuaCIgMSAzCiMgNTcyICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMiAzCgoKZXh0ZXJu
IGNoYXIgKl9fbmxfbGFuZ2luZm9fbCAobmxfaXRlbSBfX2l0ZW0sIF9fbG9jYWxlX3QgbCk7CgoK
fQojIDQ1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAy
IDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y3R5cGUuaCIgMSAz
CiMgMzggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djdHlwZS5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3djdHlwZS5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUv
d2N0eXBlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI4ICIv
dXNyL2luY2x1ZGUvd2N0eXBlLmgiIDIgMwoKCgoKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNiAiL3Vz
ci9pbmNsdWRlL3djdHlwZS5oIiAyIDMKIyA2MSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCnR5
cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgd2N0eXBlX3Q7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRl
L2VuZGlhbi5oIiAxIDMKIyA2OSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAyIDMKIyA3OSAiL3Vz
ci9pbmNsdWRlL3djdHlwZS5oIiAzCmVudW0KewogIF9fSVN3dXBwZXIgPSAwLAogIF9fSVN3bG93
ZXIgPSAxLAogIF9fSVN3YWxwaGEgPSAyLAogIF9fSVN3ZGlnaXQgPSAzLAogIF9fSVN3eGRpZ2l0
ID0gNCwKICBfX0lTd3NwYWNlID0gNSwKICBfX0lTd3ByaW50ID0gNiwKICBfX0lTd2dyYXBoID0g
NywKICBfX0lTd2JsYW5rID0gOCwKICBfX0lTd2NudHJsID0gOSwKICBfX0lTd3B1bmN0ID0gMTAs
CiAgX19JU3dhbG51bSA9IDExLAoKICBfSVN3dXBwZXIgPSAoKF9fSVN3dXBwZXIpIDwgOCA/IChp
bnQpICgoMVVMIDw8IChfX0lTd3VwcGVyKSkgPDwgMjQpIDogKChfX0lTd3VwcGVyKSA8IDE2ID8g
KGludCkgKCgxVUwgPDwgKF9fSVN3dXBwZXIpKSA8PCA4KSA6ICgoX19JU3d1cHBlcikgPCAyNCA/
IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVyKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19J
U3d1cHBlcikpID4+IDI0KSkpKSwKICBfSVN3bG93ZXIgPSAoKF9fSVN3bG93ZXIpIDwgOCA/IChp
bnQpICgoMVVMIDw8IChfX0lTd2xvd2VyKSkgPDwgMjQpIDogKChfX0lTd2xvd2VyKSA8IDE2ID8g
KGludCkgKCgxVUwgPDwgKF9fSVN3bG93ZXIpKSA8PCA4KSA6ICgoX19JU3dsb3dlcikgPCAyNCA/
IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2VyKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19J
U3dsb3dlcikpID4+IDI0KSkpKSwKICBfSVN3YWxwaGEgPSAoKF9fSVN3YWxwaGEpIDwgOCA/IChp
bnQpICgoMVVMIDw8IChfX0lTd2FscGhhKSkgPDwgMjQpIDogKChfX0lTd2FscGhhKSA8IDE2ID8g
KGludCkgKCgxVUwgPDwgKF9fSVN3YWxwaGEpKSA8PCA4KSA6ICgoX19JU3dhbHBoYSkgPCAyNCA/
IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhhKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19J
U3dhbHBoYSkpID4+IDI0KSkpKSwKICBfSVN3ZGlnaXQgPSAoKF9fSVN3ZGlnaXQpIDwgOCA/IChp
bnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0KSkgPDwgMjQpIDogKChfX0lTd2RpZ2l0KSA8IDE2ID8g
KGludCkgKCgxVUwgPDwgKF9fSVN3ZGlnaXQpKSA8PCA4KSA6ICgoX19JU3dkaWdpdCkgPCAyNCA/
IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19J
U3dkaWdpdCkpID4+IDI0KSkpKSwKICBfSVN3eGRpZ2l0ID0gKChfX0lTd3hkaWdpdCkgPCA4ID8g
KGludCkgKCgxVUwgPDwgKF9fSVN3eGRpZ2l0KSkgPDwgMjQpIDogKChfX0lTd3hkaWdpdCkgPCAx
NiA/IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpIDw8IDgpIDogKChfX0lTd3hkaWdpdCkg
PCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpID4+IDgpIDogKGludCkgKCgxVUwg
PDwgKF9fSVN3eGRpZ2l0KSkgPj4gMjQpKSkpLAogIF9JU3dzcGFjZSA9ICgoX19JU3dzcGFjZSkg
PCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3c3BhY2UpKSA8PCAyNCkgOiAoKF9fSVN3c3BhY2Up
IDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dzcGFjZSkpIDw8IDgpIDogKChfX0lTd3NwYWNl
KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3c3BhY2UpKSA+PiA4KSA6IChpbnQpICgoMVVM
IDw8IChfX0lTd3NwYWNlKSkgPj4gMjQpKSkpLAogIF9JU3dwcmludCA9ICgoX19JU3dwcmludCkg
PCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHJpbnQpKSA8PCAyNCkgOiAoKF9fSVN3cHJpbnQp
IDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dwcmludCkpIDw8IDgpIDogKChfX0lTd3ByaW50
KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHJpbnQpKSA+PiA4KSA6IChpbnQpICgoMVVM
IDw8IChfX0lTd3ByaW50KSkgPj4gMjQpKSkpLAogIF9JU3dncmFwaCA9ICgoX19JU3dncmFwaCkg
PCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Z3JhcGgpKSA8PCAyNCkgOiAoKF9fSVN3Z3JhcGgp
IDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dncmFwaCkpIDw8IDgpIDogKChfX0lTd2dyYXBo
KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Z3JhcGgpKSA+PiA4KSA6IChpbnQpICgoMVVM
IDw8IChfX0lTd2dyYXBoKSkgPj4gMjQpKSkpLAogIF9JU3dibGFuayA9ICgoX19JU3dibGFuaykg
PCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YmxhbmspKSA8PCAyNCkgOiAoKF9fSVN3Ymxhbmsp
IDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dibGFuaykpIDw8IDgpIDogKChfX0lTd2JsYW5r
KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YmxhbmspKSA+PiA4KSA6IChpbnQpICgoMVVM
IDw8IChfX0lTd2JsYW5rKSkgPj4gMjQpKSkpLAogIF9JU3djbnRybCA9ICgoX19JU3djbnRybCkg
PCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Y250cmwpKSA8PCAyNCkgOiAoKF9fSVN3Y250cmwp
IDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3djbnRybCkpIDw8IDgpIDogKChfX0lTd2NudHJs
KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Y250cmwpKSA+PiA4KSA6IChpbnQpICgoMVVM
IDw8IChfX0lTd2NudHJsKSkgPj4gMjQpKSkpLAogIF9JU3dwdW5jdCA9ICgoX19JU3dwdW5jdCkg
PCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHVuY3QpKSA8PCAyNCkgOiAoKF9fSVN3cHVuY3Qp
IDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dwdW5jdCkpIDw8IDgpIDogKChfX0lTd3B1bmN0
KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHVuY3QpKSA+PiA4KSA6IChpbnQpICgoMVVM
IDw8IChfX0lTd3B1bmN0KSkgPj4gMjQpKSkpLAogIF9JU3dhbG51bSA9ICgoX19JU3dhbG51bSkg
PCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YWxudW0pKSA8PCAyNCkgOiAoKF9fSVN3YWxudW0p
IDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbG51bSkpIDw8IDgpIDogKChfX0lTd2FsbnVt
KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YWxudW0pKSA+PiA4KSA6IChpbnQpICgoMVVM
IDw8IChfX0lTd2FsbnVtKSkgPj4gMjQpKSkpCn07CgoKCmV4dGVybiAiQyIgewoKCgoKCgoKZXh0
ZXJuIGludCBpc3dhbG51bSAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQg
aXN3YWxwaGEgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzd2NudHJsICh3
aW50X3QgX193YykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaXN3ZGlnaXQgKHdpbnRfdCBfX3dj
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc3dncmFwaCAod2ludF90IF9fd2MpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCBpc3dsb3dlciAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgaXN3cHJpbnQgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3
cHVuY3QgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3c3BhY2UgKHdp
bnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3dXBwZXIgKHdpbnRfdCBfX3dj
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3eGRpZ2l0ICh3aW50X3QgX193YykgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGludCBpc3dibGFuayAod2ludF90IF9fd2MpIHRocm93ICgpOwojIDE3
OCAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCmV4dGVybiB3Y3R5cGVfdCB3Y3R5cGUgKF9fY29u
c3QgY2hhciAqX19wcm9wZXJ0eSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaXN3Y3R5cGUgKHdp
bnRfdCBfX3djLCB3Y3R5cGVfdCBfX2Rlc2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHVuc2lnbmVk
IGludCAqX19jdHlwZTMyX2I7CiMgMjQ5ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKdHlwZWRl
ZiBfX2NvbnN0IF9faW50MzJfdCAqd2N0cmFuc190OwoKCmV4dGVybiB3aW50X3QgdG93bG93ZXIg
KHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IHRvd3VwcGVyICh3aW50X3Qg
X193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY29uc3Qgd2ludF90ICpfX2N0eXBlMzJfdG9sb3dl
cjsKZXh0ZXJuIGNvbnN0IHdpbnRfdCAqX19jdHlwZTMyX3RvdXBwZXI7CiMgMjc1ICIvdXNyL2lu
Y2x1ZGUvd2N0eXBlLmgiIDMKfQojIDI4OCAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCmV4dGVy
biAiQyIgewoKCgpleHRlcm4gd2N0cmFuc190IHdjdHJhbnMgKF9fY29uc3QgY2hhciAqX19wcm9w
ZXJ0eSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCB0b3djdHJhbnMgKHdpbnRfdCBfX3djLCB3
Y3RyYW5zX3QgX19kZXNjKSB0aHJvdyAoKTsKCgoKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5o
IiAxIDMKIyAzMDAgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMiAzCgoKCmV4dGVybiBpbnQgX19p
c3dhbG51bV9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIGludCBfX2lzd2FscGhhX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9j
YWxlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9faXN3Y250cmxfbCAod2ludF90IF9fd2MsIF9f
bG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9faXN3ZGlnaXRfbCAo
d2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IF9faXN3Z3JhcGhfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCBfX2lzd2xvd2VyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9f
bG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9faXN3cHJpbnRfbCAod2ludF90IF9fd2Ms
IF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd3B1bmN0
X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBpbnQgX19pc3dzcGFjZV9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3dXBwZXJfbCAod2ludF90IF9fd2MsIF9fbG9jYWxl
X3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd3hkaWdpdF9sICh3aW50
X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9f
aXN3YmxhbmtfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoK
CgpleHRlcm4gd2N0eXBlX3QgX193Y3R5cGVfbCAoX19jb25zdCBjaGFyICpfX3Byb3BlcnR5LCBf
X2xvY2FsZV90IF9fbG9jYWxlKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9faXN3Y3R5
cGVfbCAod2ludF90IF9fd2MsIHdjdHlwZV90IF9fZGVzYywgX19sb2NhbGVfdCBfX2xvY2FsZSkK
ICAgICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiB3aW50X3QgX190b3dsb3dlcl9sICh3aW50X3Qg
X193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBfX3Rv
d3VwcGVyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIHdjdHJhbnNfdCBfX3djdHJhbnNfbCAoX19jb25zdCBjaGFyICpfX3Byb3BlcnR5LCBf
X2xvY2FsZV90IF9fbG9jYWxlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgX190b3dj
dHJhbnNfbCAod2ludF90IF9fd2MsIHdjdHJhbnNfdCBfX2Rlc2MsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCn0KIyAzOSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2N0eXBlLmgiIDIgMwojIDYwICIvdXNy
L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y3R5cGUuaCIgMwpuYW1lc3BhY2Ugc3Rk
CnsKICB1c2luZyA6OndpbnRfdDsKCiAgdXNpbmcgOjp3Y3R5cGVfdDsKICB1c2luZyA6OndjdHJh
bnNfdDsKCiAgdXNpbmcgOjppc3dhbG51bTsKICB1c2luZyA6Omlzd2FscGhhOwogIHVzaW5nIDo6
aXN3Ymxhbms7CiAgdXNpbmcgOjppc3djbnRybDsKICB1c2luZyA6Omlzd2RpZ2l0OwogIHVzaW5n
IDo6aXN3Z3JhcGg7CiAgdXNpbmcgOjppc3dsb3dlcjsKICB1c2luZyA6Omlzd3ByaW50OwogIHVz
aW5nIDo6aXN3cHJpbnQ7CiAgdXNpbmcgOjppc3dwdW5jdDsKICB1c2luZyA6Omlzd3NwYWNlOwog
IHVzaW5nIDo6aXN3dXBwZXI7CiAgdXNpbmcgOjppc3d4ZGlnaXQ7CiAgdXNpbmcgOjppc3djdHlw
ZTsKICB1c2luZyA6OnRvd2xvd2VyOwogIHVzaW5nIDo6dG93dXBwZXI7CiAgdXNpbmcgOjp0b3dj
dHJhbnM7CiAgdXNpbmcgOjp3Y3RyYW5zOwp9CiMgNDYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9pY29udi5oIiAx
IDMKIyAyMiAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVy
ZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9pY29udi5oIiAyIDMKCiMgMSAiL3Vzci9sb2Nh
bC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAz
CiMgMjUgIi91c3IvaW5jbHVkZS9pY29udi5oIiAyIDMKCgpleHRlcm4gIkMiIHsKCgp0eXBlZGVm
IHZvaWQgKmljb252X3Q7CgoKCgpleHRlcm4gaWNvbnZfdCBpY29udl9vcGVuIChfX2NvbnN0IGNo
YXIgKl9fdG9jb2RlLCBfX2NvbnN0IGNoYXIgKl9fZnJvbWNvZGUpCiAgICAgdGhyb3cgKCk7CgoK
CgpleHRlcm4gc2l6ZV90IGljb252IChpY29udl90IF9fY2QsIGNoYXIgKipfX3Jlc3RyaWN0IF9f
aW5idWYsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX2luYnl0ZXNs
ZWZ0LAogICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX291dGJ1ZiwKICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fb3V0Ynl0ZXNsZWZ0KTsKCgpl
eHRlcm4gaW50IGljb252X2Nsb3NlIChpY29udl90IF9fY2QpIHRocm93ICgpOwoKfQojIDQ3ICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgpuYW1l
c3BhY2Ugc3RkCnsKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51
eC1nbnUvYml0cy9jdHlwZV9iYXNlLmgiIDEgMwojIDUwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvY3R5cGVfYmFzZS5oIiAzCiAgc3RydWN0IGN0eXBl
X2Jhc2UKICB7CgogICAgdHlwZWRlZiBjb25zdCBpbnQqIF9fdG9fdHlwZTsKCgoKICAgIHR5cGVk
ZWYgdW5zaWduZWQgc2hvcnQgbWFzazsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHVwcGVyID0gX0lT
dXBwZXI7CiAgICBzdGF0aWMgY29uc3QgbWFzayBsb3dlciA9IF9JU2xvd2VyOwogICAgc3RhdGlj
IGNvbnN0IG1hc2sgYWxwaGEgPSBfSVNhbHBoYTsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGRpZ2l0
ID0gX0lTZGlnaXQ7CiAgICBzdGF0aWMgY29uc3QgbWFzayB4ZGlnaXQgPSBfSVN4ZGlnaXQ7CiAg
ICBzdGF0aWMgY29uc3QgbWFzayBzcGFjZSA9IF9JU3NwYWNlOwogICAgc3RhdGljIGNvbnN0IG1h
c2sgcHJpbnQgPSBfSVNwcmludDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGdyYXBoID0gX0lTZ3Jh
cGg7CiAgICBzdGF0aWMgY29uc3QgbWFzayBjbnRybCA9IF9JU2NudHJsOwogICAgc3RhdGljIGNv
bnN0IG1hc2sgcHVuY3QgPSBfSVNwdW5jdDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGFsbnVtID0g
X0lTYWxudW07CiAgfTsKIyA1NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2Fs
ZV9mYWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBf
X2N0eXBlX2Fic3RyYWN0X2Jhc2UgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGN0eXBl
X2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsK
CiAgICAgIGJvb2wKICAgICAgaXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbSwgX19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBl
KgogICAgICBpcyhjb25zdCBjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlwZSAqX19oaSwg
bWFzayAqX192ZWMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbG8sIF9faGks
IF9fdmVjKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBzY2FuX2lzKG1hc2sgX19t
LCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9pcyhfX20sIF9fbG8sIF9faGkpOyB9CgogICAgICBj
b25zdCBjaGFyX3R5cGUqCiAgICAgIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUq
IF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+
ZG9fc2Nhbl9ub3QoX19tLCBfX2xvLCBfX2hpKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRv
dXBwZXIoY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBl
cihfX2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHRvdXBwZXIoY2hhcl90eXBl
ICpfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt
PmRvX3RvdXBwZXIoX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0b2xvd2Vy
KGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19j
KTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICB0b2xvd2VyKGNoYXJfdHlwZSogX19s
bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190
b2xvd2VyKF9fbG8sIF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgd2lkZW4oY2hhciBf
X2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3dpZGVuKF9fYyk7IH0KCiAgICAgIGNv
bnN0IGNoYXIqCiAgICAgIHdpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGks
IGNoYXJfdHlwZSogX190bykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fd2lkZW4oX19s
bywgX19oaSwgX190byk7IH0KCiAgICAgIGNoYXIKICAgICAgbmFycm93KGNoYXJfdHlwZSBfX2Ms
IGNoYXIgX19kZmF1bHQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25hcnJvdyhfX2Ms
IF9fZGZhdWx0KTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBuYXJyb3coY29uc3Qg
Y2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgY2hh
ciBfX2RmYXVsdCwgY2hhciAqX190bykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmFy
cm93KF9fbG8sIF9faGksIF9fZGZhdWx0LCBfX3RvKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAg
ZXhwbGljaXQKICAgICAgX19jdHlwZV9hYnN0cmFjdF9iYXNlKHNpemVfdCBfX3JlZnMgPSAwKTog
bG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+X19jdHlwZV9h
YnN0cmFjdF9iYXNlKCkgeyB9CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9faXMobWFzayBf
X20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90
eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSog
X19oaSwKICAgICAgICAgICAgbWFzayogX192ZWMpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwg
Y29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5
cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9
IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFz
ayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
cl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBk
b190b3VwcGVyKGNoYXJfdHlwZSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFy
X3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUq
IF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93
ZXIoY2hhcl90eXBlKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoK
ICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkg
Y29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhcikg
Y29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25z
dCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLAogICAgICAgICAgICAgICBjaGFyX3R5cGUq
IF9fZGVzdCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJvdyhj
aGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3Qg
Y2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBj
aGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19k
ZXN0KSBjb25zdCA9IDA7CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
Y2xhc3MgY3R5cGUgOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPF9DaGFyVD4KICAgIHsK
ICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBjdHlwZTo6bWFzayBtYXNrOwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGUo
c2l6ZV90IF9fcmVmcyA9IDApIDogX19jdHlwZV9hYnN0cmFjdF9iYXNlPF9DaGFyVD4oX19yZWZz
KSB7IH0KCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgcHJvdGVjdGVkOgogICAgICB2
aXJ0dWFsCiAgICAgIH5jdHlwZSgpIHsgfQoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lz
KG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdAogICAgICB7IHJldHVybiBmYWxzZTsgfQoK
ICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlw
ZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3QKICAgICAg
eyByZXR1cm4gX19oaTsgfQoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRv
X3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBl
KiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiBfX2hpOyB9CgogICAgICB2aXJ0dWFsIGNvbnN0
IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSog
X19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAg
ICB7IHJldHVybiBfX2hpOyB9CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b3Vw
cGVyKGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fYzsgfQoKICAgICAgdmly
dHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBj
b25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9faGk7IH0KCiAgICAg
IHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlIF9fYykgY29uc3QK
ICAgICAgeyByZXR1cm4gX19jOyB9CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAg
ICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29u
c3QKICAgICAgeyByZXR1cm4gX19oaTsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAg
ZG9fd2lkZW4oY2hhciBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNoYXJfdHlwZSgpOyB9Cgog
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8s
IGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdAogICAgICB7IHJldHVy
biBfX2hpOyB9CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwg
Y2hhciBfX2RmYXVsdCkgY29uc3QKICAgICAgeyByZXR1cm4gX19kZmF1bHQ7IH0KCiAgICAgIHZp
cnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBf
X2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0
LCBjaGFyKiBfX2Rlc3QpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9faGk7IH0KICAgIH07CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgY3R5cGU8X0NoYXJUPjo6aWQ7
CgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjdHlwZTxjaGFyPiA6IHB1YmxpYyBfX2N0eXBlX2Fi
c3RyYWN0X2Jhc2U8Y2hhcj4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY2hhciBj
aGFyX3R5cGU7CgogICAgcHJpdmF0ZToKCiAgICAgIGJvb2wgX01fZGVsOwogICAgICBfX3RvX3R5
cGUgY29uc3QmIF9NX3RvdXBwZXI7CiAgICAgIF9fdG9fdHlwZSBjb25zdCYgX01fdG9sb3dlcjsK
ICAgICAgY29uc3QgbWFzayogY29uc3QmIF9NX2N0YWJsZTsKICAgICAgY29uc3QgbWFzayogX01f
dGFibGU7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKICAgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCB0YWJsZV9zaXplID0gMSArIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KC0xKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlKGNvbnN0IG1hc2sqIF9fdGFibGUg
PSAwLCBib29sIF9fZGVsID0gZmFsc2UsIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIGlubGlu
ZSBib29sCiAgICAgIGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3Q7CgogICAgICBpbmxpbmUg
Y29uc3QgY2hhcioKICAgICAgaXMoY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwg
bWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIHNjYW5f
aXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0OwoK
ICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBj
aGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBjb25zdDsKCiAgICBwcm90ZWN0ZWQ6CiAgICAg
IHZpcnR1YWwKICAgICAgfmN0eXBlKCk7CgogICAgICBjb25zdCBtYXNrKgogICAgICB0YWJsZSgp
IGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gX01fdGFibGU7IH0KCiAgICAgIGNvbnN0IG1h
c2sqCiAgICAgIGNsYXNzaWNfdGFibGUoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9NX2N0YWJs
ZTsgfQoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUg
X19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhj
b25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMp
IGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMo
bWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdCht
YXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9f
dG91cHBlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUq
CiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkp
IGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5
cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvbG93
ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAg
dmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhcikgY29uc3Q7CgogICAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNo
YXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcgog
ICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBf
X2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICAgY2hhciBfX2RmYXVs
dCwgY2hhciogX19kZXN0KSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IGN0
eXBlPGNoYXI+JgogICAgdXNlX2ZhY2V0PGN0eXBlPGNoYXI+ID4oY29uc3QgbG9jYWxlJiBfX2xv
Yyk7CgoKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY3R5cGU8d2NoYXJfdD4gOiBwdWJsaWMgX19j
dHlwZV9hYnN0cmFjdF9iYXNlPHdjaGFyX3Q+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBl
ZGVmIHdjaGFyX3QgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHdjdHlwZV90IF9fd21hc2tfdHlw
ZTsKCgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0
eXBlKHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9fd21hc2tfdHlw
ZQogICAgICBfTV9jb252ZXJ0X3RvX3dtYXNrKGNvbnN0IG1hc2sgX19tKSBjb25zdDsKCiAgICAg
IHZpcnR1YWwKICAgICAgfmN0eXBlKCk7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9faXMo
bWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFy
X3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBl
KiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlw
ZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25z
dCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUq
CiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFs
IGNoYXJfdHlwZQogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSkgY29uc3Q7CgogICAgICB2aXJ0
dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUqIF9fbG8sIGNv
bnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAg
ICBkb190b2xvd2VyKGNoYXJfdHlwZSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf
dHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSog
X19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb193aWRlbihjaGFy
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAgZG9fd2lkZW4oY29uc3Qg
Y2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBfX2Rlc3QpIGNvbnN0OwoK
ICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1
bHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX25hcnJv
dyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAg
ICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0OwoKICAgIH07CgogIHRl
bXBsYXRlPD4KICAgIGNvbnN0IGN0eXBlPHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PGN0eXBlPHdj
aGFyX3Q+ID4oY29uc3QgbG9jYWxlJiBfX2xvYyk7CgoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2N0eXBlX2lubGluZS5oIiAxIDMKIyAzNyAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2N0eXBlX2lu
bGluZS5oIiAzCiAgYm9vbAogIGN0eXBlPGNoYXI+OjoKICBpcyhtYXNrIF9fbSwgY2hhciBfX2Mp
IGNvbnN0CiAgeyByZXR1cm4gX01fdGFibGVbX19jXSAmIF9fbTsgfQoKICBjb25zdCBjaGFyKgog
IGN0eXBlPGNoYXI+OjoKICBpcyhjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdo
LCBtYXNrKiBfX3ZlYykgY29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2gpCiAgICAg
ICpfX3ZlYysrID0gX01fdGFibGVbKl9fbG93KytdOwogICAgcmV0dXJuIF9faGlnaDsKICB9Cgog
IGNvbnN0IGNoYXIqCiAgY3R5cGU8Y2hhcj46OgogIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNo
YXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gpIGNvbnN0CiAgewogICAgd2hpbGUgKF9fbG93
IDwgX19oaWdoICYmICEoX01fdGFibGVbKl9fbG93XSAmIF9fbSkpCiAgICAgICsrX19sb3c7CiAg
ICByZXR1cm4gX19sb3c7CiAgfQoKICBjb25zdCBjaGFyKgogIGN0eXBlPGNoYXI+OjoKICBzY2Fu
X25vdChtYXNrIF9fbSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29u
c3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2gKICAgICAgICAgICAmJiAoX01fdGFibGVb
Kl9fbG93XSAmIF9fbSkgIT0gMCkKICAgICAgKytfX2xvdzsKICAgIHJldHVybiBfX2xvdzsKICB9
CiMgMzkzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAy
IDMKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlX2J5bmFtZSA6
IHB1YmxpYyBjdHlwZTxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0No
YXJUIGNoYXJfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlX2J5bmFtZShjb25zdCBj
aGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAog
ICAgICB+Y3R5cGVfYnluYW1lKCkgeyB9CiAgICB9OwoKCiAgdGVtcGxhdGU8PgogICAgY3R5cGVf
YnluYW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzKTsKCgoK
IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29kZWN2dC5oIiAxIDMKIyA0MiAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NvZGVjdnQuaCIgMwojIDU3ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29kZWN2dC5oIiAzCiAgY2xhc3MgX19lbmNfdHJhaXRz
CiAgewogIHB1YmxpYzoKCgoKICAgIHR5cGVkZWYgaWNvbnZfdCBfX2Rlc2NfdHlwZTsKCiAgcHJv
dGVjdGVkOgoKCiAgICBzdGF0aWMgY29uc3QgaW50IF9TX21heF9zaXplID0gMzI7CgogICAgY2hh
ciBfTV9pbnRfZW5jW19TX21heF9zaXplXTsKCiAgICBjaGFyIF9NX2V4dF9lbmNbX1NfbWF4X3Np
emVdOwoKCiAgICBfX2Rlc2NfdHlwZSBfTV9pbl9kZXNjOwoKICAgIF9fZGVzY190eXBlIF9NX291
dF9kZXNjOwoKCiAgICBpbnQgX01fZXh0X2JvbTsKCgogICAgaW50IF9NX2ludF9ib207CgogIHB1
YmxpYzoKICAgIF9fZW5jX3RyYWl0cygpCiAgICA6IF9NX2luX2Rlc2MoMCksIF9NX291dF9kZXNj
KDApLCBfTV9leHRfYm9tKDApLCBfTV9pbnRfYm9tKDApCiAgICB7CgoKCgogICAgICBzdHJjcHko
X01faW50X2VuYywgIlVDUzQiKTsKCgogICAgICBzdHJjcHkoX01fZXh0X2VuYywgbmxfbGFuZ2lu
Zm8oQ09ERVNFVCkpOwogICAgfQoKICAgIF9fZW5jX3RyYWl0cyhjb25zdCBjaGFyKiBfX2ludCwg
Y29uc3QgY2hhciogX19leHQsIGludCBfX2lib20gPSAwLAogICAgICAgICAgICAgICAgIGludCBf
X2Vib20gPSAwKQogICAgOiBfTV9pbl9kZXNjKDApLCBfTV9vdXRfZGVzYygwKSwgX01fZXh0X2Jv
bSgwKSwgX01faW50X2JvbSgwKQogICAgewogICAgICBzdHJuY3B5KF9NX2ludF9lbmMsIF9faW50
LCBfU19tYXhfc2l6ZSk7CiAgICAgIHN0cm5jcHkoX01fZXh0X2VuYywgX19leHQsIF9TX21heF9z
aXplKTsKICAgIH0KCgoKCgoKICAgIF9fZW5jX3RyYWl0cyhjb25zdCBfX2VuY190cmFpdHMmIF9f
b2JqKQogICAgewogICAgICBzdHJuY3B5KF9NX2ludF9lbmMsIF9fb2JqLl9NX2ludF9lbmMsIF9T
X21heF9zaXplKTsKICAgICAgc3RybmNweShfTV9leHRfZW5jLCBfX29iai5fTV9leHRfZW5jLCBf
U19tYXhfc2l6ZSk7CiAgICAgIF9NX2V4dF9ib20gPSBfX29iai5fTV9leHRfYm9tOwogICAgICBf
TV9pbnRfYm9tID0gX19vYmouX01faW50X2JvbTsKICAgIH0KCiAgICB+X19lbmNfdHJhaXRzKCkK
ICAgIHsKICAgICAgaWNvbnZfY2xvc2UoX01faW5fZGVzYyk7CiAgICAgIGljb252X2Nsb3NlKF9N
X291dF9kZXNjKTsKICAgIH0KCgogICAgdm9pZAogICAgX01faW5pdCgpCiAgICB7CiAgICAgIF9N
X2luX2Rlc2MgPSBpY29udl9vcGVuKF9NX2ludF9lbmMsIF9NX2V4dF9lbmMpOwogICAgICBfTV9v
dXRfZGVzYyA9IGljb252X29wZW4oX01fZXh0X2VuYywgX01faW50X2VuYyk7CiAgICAgIGlmIChf
TV9vdXRfZGVzYyA9PSBpY29udl90KC0xKSB8fCBfTV9pbl9kZXNjID09IGljb252X3QoLTEpKQog
ICAgICAgIHsKCiAgICAgICAgfQogICAgfQoKICAgIGJvb2wKICAgIF9NX2dvb2QoKQogICAgewog
ICAgICByZXR1cm4gX01fb3V0X2Rlc2MgJiYgX01faW5fZGVzYwogICAgICAgICAgICAgJiYgX01f
b3V0X2Rlc2MgIT0gaWNvbnZfdCgtMSkgJiYgX01faW5fZGVzYyAhPSBpY29udl90KC0xKTsKICAg
IH0KCiAgICBjb25zdCBfX2Rlc2NfdHlwZSoKICAgIF9NX2dldF9pbl9kZXNjcmlwdG9yKCkKICAg
IHsgcmV0dXJuICZfTV9pbl9kZXNjOyB9CgogICAgY29uc3QgX19kZXNjX3R5cGUqCiAgICBfTV9n
ZXRfb3V0X2Rlc2NyaXB0b3IoKQogICAgeyByZXR1cm4gJl9NX291dF9kZXNjOyB9CgogICBjb25z
dCBjaGFyKgogICAgX01fZ2V0X2ludGVybmFsX2VuYygpCiAgICB7IHJldHVybiBfTV9pbnRfZW5j
OyB9CgogICAgY29uc3QgY2hhcioKICAgIF9NX2dldF9leHRlcm5hbF9lbmMoKQogICAgeyByZXR1
cm4gX01fZXh0X2VuYzsgfQoKICAgIGludAogICAgX01fZ2V0X2V4dGVybmFsX2JvbSgpCiAgICB7
IHJldHVybiBfTV9leHRfYm9tOyB9CgogICAgaW50CiAgICBfTV9nZXRfaW50ZXJuYWxfYm9tKCkK
ICAgIHsgcmV0dXJuIF9NX2ludF9ib207IH0KICB9OwoKCgoKICBjbGFzcyBjb2RlY3Z0X2Jhc2UK
ICB7CiAgcHVibGljOgogICAgZW51bSByZXN1bHQKICAgIHsKICAgICAgb2ssCiAgICAgIHBhcnRp
YWwsCiAgICAgIGVycm9yLAogICAgICBub2NvbnYKICAgIH07CiAgfTsKCgoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4K
ICAgIGNsYXNzIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlCiAgICA6IHB1YmxpYyBsb2NhbGU6OmZh
Y2V0LCBwdWJsaWMgY29kZWN2dF9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVm
IGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsKICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRl
cm5fdHlwZTsKICAgICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRl
ZiBfU3RhdGVUIHN0YXRlX3R5cGU7CgoKICAgICAgcmVzdWx0CiAgICAgIG91dChzdGF0ZV90eXBl
JiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgY29uc3QgaW50
ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAg
ICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAg
ICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsKICAgICAgICByZXR1cm4g
dGhpcy0+ZG9fb3V0KF9fc3RhdGUsIF9fZnJvbSwgX19mcm9tX2VuZCwgX19mcm9tX25leHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RvLCBfX3RvX2VuZCwgX190b19uZXh0KTsKICAg
ICAgfQoKICAgICAgcmVzdWx0CiAgICAgIHVuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0
ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgICBleHRl
cm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdW5zaGlm
dChfX3N0YXRlLCBfX3RvLF9fdG9fZW5kLF9fdG9fbmV4dCk7IH0KCiAgICAgIHJlc3VsdAogICAg
ICBpbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAg
ICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBf
X2Zyb21fbmV4dCwKICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3Rv
X2VuZCwKICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsKICAg
ICAgICByZXR1cm4gdGhpcy0+ZG9faW4oX19zdGF0ZSwgX19mcm9tLCBfX2Zyb21fZW5kLCBfX2Zy
b21fbmV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX190bywgX190b19lbmQsIF9fdG9f
bmV4dCk7CiAgICAgIH0KCiAgICAgIGludAogICAgICBlbmNvZGluZygpIGNvbnN0IHRocm93KCkK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZW5jb2RpbmcoKTsgfQoKICAgICAgYm9vbAogICAgICBh
bHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiB0aGlzLT5kb19hbHdh
eXNfbm9jb252KCk7IH0KCiAgICAgIGludAogICAgICBsZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYg
X19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGV4
dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdAogICAgICB7IHJldHVybiB0aGlz
LT5kb19sZW5ndGgoX19zdGF0ZSwgX19mcm9tLCBfX2VuZCwgX19tYXgpOyB9CgogICAgICBpbnQK
ICAgICAgbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
bWF4X2xlbmd0aCgpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBleHBsaWNpdAogICAgICBfX2Nv
ZGVjdnRfYWJzdHJhY3RfYmFzZShzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9f
cmVmcykgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5fX2NvZGVjdnRfYWJzdHJhY3RfYmFzZSgp
IHsgfQoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3Rh
dGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBpbnRlcm5f
dHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAg
ICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAg
ICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBy
ZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSog
X190bywKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBl
KiYgX190b19uZXh0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19p
bihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAg
ICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBf
X2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBf
X3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsK
CiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKSA9IDA7
CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93
KCkgPSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5
cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAgY29uc3QgZXh0
ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwg
aW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpID0gMDsKICAgIH07CgoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBf
U3RhdGVUPgogICAgY2xhc3MgY29kZWN2dAogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0
X2Jhc2U8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPgogICAgewogICAgcHVibGljOgoKICAg
ICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAgICAgIHR5cGVkZWYgX0lu
dGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7CiAg
ICAgIHR5cGVkZWYgX1N0YXRlVCBzdGF0ZV90eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6Omlk
IGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCkKICAg
ICAgOiBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50ZXJuVCxfRXh0ZXJuVCxfU3RhdGVUPiAo
X19yZWZzKSB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnQo
KSB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0
ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGxvY2FsZTo6aWQgY29kZWN2dDxfSW50ZXJuVCwg
X0V4dGVyblQsIF9TdGF0ZVQ+OjppZDsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5U
LCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGNsYXNzIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5U
LCBfX2VuY190cmFpdHM+CiAgICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50
ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5
cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQgcmVzdWx0OwogICAgICB0eXBlZGVmIF9JbnRlcm5U
IGludGVybl90eXBlOwogICAgICB0eXBlZGVmIF9FeHRlcm5UIGV4dGVybl90eXBlOwogICAgICB0
eXBlZGVmIF9fZW5jX3RyYWl0cyBzdGF0ZV90eXBlOwogICAgICB0eXBlZGVmIF9fZW5jX3RyYWl0
czo6X19kZXNjX3R5cGUgX19kZXNjX3R5cGU7CiAgICAgIHR5cGVkZWYgX19lbmNfdHJhaXRzIF9f
ZW5jX3R5cGU7CgoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAog
ICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IF9fY29kZWN2dF9hYnN0cmFj
dF9iYXNlPGludGVybl90eXBlLCBleHRlcm5fdHlwZSwgc3RhdGVfdHlwZT4oX19yZWZzKQogICAg
ICB7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQoX19lbmNfdHlwZSogX19lbmMsIHNp
emVfdCBfX3JlZnMgPSAwKQogICAgICA6IF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPGludGVybl90
eXBlLCBleHRlcm5fdHlwZSwgc3RhdGVfdHlwZT4oX19yZWZzKQogICAgICB7IH0KCiAgICBwcm90
ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnQoKSB7IH0KCiAgICAgIHZpcnR1YWwg
cmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlw
ZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNv
bnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSog
X190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBf
X3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChz
dGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAgICAgICAgICBl
eHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0
IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zy
b21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICBpbnRl
cm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICBpbnRlcm5f
dHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19lbmNv
ZGluZygpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3YXlz
X25vY29udigpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19sZW5n
dGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAg
ICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKTsKICAg
IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAg
IGxvY2FsZTo6aWQKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+
OjppZDsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UPgogICAgaW5saW5lIHNpemVfdAogICAg
X19pY29udl9hZGFwdG9yKHNpemVfdCgqaWNvbnZfZnVuYykoaWNvbnZfdCwgX1QsIHNpemVfdCos
IGNoYXIqKiwgc2l6ZV90KiksCiAgICAgICAgICAgICAgICAgICAgaWNvbnZfdCBjZCwgY2hhcioq
IGluYnVmLCBzaXplX3QqIGluYnl0ZXNsZWZ0LAogICAgICAgICAgICAgICAgICAgIGNoYXIqKiBv
dXRidWYsIHNpemVfdCogb3V0Ynl0ZXNsZWZ0KQogICAgewogICAgICByZXR1cm4gaWNvbnZfZnVu
YyhjZCwgKF9UKWluYnVmLCBpbmJ5dGVzbGVmdCwgb3V0YnVmLCBvdXRieXRlc2xlZnQpOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBj
b2RlY3Z0X2Jhc2U6OnJlc3VsdAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5j
X3RyYWl0cz46OgogICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90
eXBlKiBfX2Zyb20sCiAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNv
bnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9f
dG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9f
bmV4dCkgY29uc3QKICAgIHsKICAgICAgcmVzdWx0IF9fcmV0ID0gZXJyb3I7CiAgICAgIGlmIChf
X3N0YXRlLl9NX2dvb2QoKSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHN0YXRlX3R5cGU6
Ol9fZGVzY190eXBlIF9fZGVzY190eXBlOwogICAgICAgICAgY29uc3QgX19kZXNjX3R5cGUqIF9f
ZGVzYyA9IF9fc3RhdGUuX01fZ2V0X291dF9kZXNjcmlwdG9yKCk7CiAgICAgICAgICBjb25zdCBz
aXplX3QgX19mbXVsdGlwbGUgPSBzaXplb2YoaW50ZXJuX3R5cGUpIC8gc2l6ZW9mKGNoYXIpOwog
ICAgICAgICAgc2l6ZV90IF9fZmxlbiA9IF9fZm11bHRpcGxlICogKF9fZnJvbV9lbmQgLSBfX2Zy
b20pOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fdG11bHRpcGxlID0gc2l6ZW9mKGV4dGVybl90
eXBlKSAvIHNpemVvZihjaGFyKTsKICAgICAgICAgIHNpemVfdCBfX3RsZW4gPSBfX3RtdWx0aXBs
ZSAqIChfX3RvX2VuZCAtIF9fdG8pOwoKCgogICAgICAgICAgY2hhciogX19jdG8gPSByZWludGVy
cHJldF9jYXN0PGNoYXIqPihfX3RvKTsKICAgICAgICAgIGNoYXIqIF9fY2Zyb207CiAgICAgICAg
ICBzaXplX3QgX19jb252OwoKCgoKCgogICAgICAgICAgaW50IF9faW50X2JvbSA9IF9fc3RhdGUu
X01fZ2V0X2ludGVybmFsX2JvbSgpOwogICAgICAgICAgaWYgKF9faW50X2JvbSkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIHNpemVfdCBfX3NpemUgPSBfX2Zyb21fZW5kIC0gX19mcm9tOwog
ICAgICAgICAgICAgIGludGVybl90eXBlKiBfX2NmaXhlZCA9IHN0YXRpY19jYXN0PGludGVybl90
eXBlKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoaW50ZXJuX3R5cGUpICogKF9fc2l6ZSArIDEp
KSk7CiAgICAgICAgICAgICAgX19jZml4ZWRbMF0gPSBzdGF0aWNfY2FzdDxpbnRlcm5fdHlwZT4o
X19pbnRfYm9tKTsKICAgICAgICAgICAgICBjaGFyX3RyYWl0czxpbnRlcm5fdHlwZT46OmNvcHko
X19jZml4ZWQgKyAxLCBfX2Zyb20sIF9fc2l6ZSk7CiAgICAgICAgICAgICAgX19jZnJvbSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsKICAgICAgICAgICAgICBfX2NvbnYgPSBf
X2ljb252X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2MsICZfX2Nmcm9tLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJl9fZmxlbiwgJl9fY3RvLCAmX190bGVuKTsKICAgICAg
ICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW50ZXJu
X3R5cGUqIF9fY2ZpeGVkID0gY29uc3RfY2FzdDxpbnRlcm5fdHlwZSo+KF9fZnJvbSk7CiAgICAg
ICAgICAgICAgX19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsKICAg
ICAgICAgICAgICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2MsICZfX2Nm
cm9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19mbGVuLCAmX19j
dG8sICZfX3RsZW4pOwogICAgICAgICAgICB9CgogICAgICAgICAgaWYgKF9fY29udiAhPSBzaXpl
X3QoLTEpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19mcm9tX25leHQgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IGludGVybl90eXBlKj4oX19jZnJvbSk7CiAgICAgICAgICAgICAgX190
b19uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxleHRlcm5fdHlwZSo+KF9fY3RvKTsKICAgICAgICAg
ICAgICBfX3JldCA9IG9rOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBpZiAoX19mbGVuIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihfX2Zyb21f
ZW5kIC0gX19mcm9tKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19mcm9t
X25leHQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGludGVybl90eXBlKj4oX19jZnJvbSk7CiAg
ICAgICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZXh0ZXJuX3R5cGUq
PihfX2N0byk7CiAgICAgICAgICAgICAgICAgIF9fcmV0ID0gcGFydGlhbDsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3JldCA9IGVycm9yOwog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGNvZGVjdnRfYmFz
ZTo6cmVzdWx0CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6
CiAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAog
ICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19u
ZXh0KSBjb25zdAogICAgewogICAgICByZXN1bHQgX19yZXQgPSBlcnJvcjsKICAgICAgaWYgKF9f
c3RhdGUuX01fZ29vZCgpKQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgc3RhdGVfdHlwZTo6
X19kZXNjX3R5cGUgX19kZXNjX3R5cGU7CiAgICAgICAgICBjb25zdCBfX2Rlc2NfdHlwZSogX19k
ZXNjID0gX19zdGF0ZS5fTV9nZXRfaW5fZGVzY3JpcHRvcigpOwogICAgICAgICAgY29uc3Qgc2l6
ZV90IF9fdG11bHRpcGxlID0gc2l6ZW9mKGludGVybl90eXBlKSAvIHNpemVvZihjaGFyKTsKICAg
ICAgICAgIHNpemVfdCBfX3RsZW4gPSBfX3RtdWx0aXBsZSAqIChfX3RvX2VuZCAtIF9fdG8pOwoK
CgogICAgICAgICAgY2hhciogX19jdG8gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3RvKTsK
ICAgICAgICAgIHNpemVfdCBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsKl9fZGVzYywg
X19udWxsLCBfX251bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZfX2N0bywgJl9fdGxlbik7CgogICAgICAgICAgaWYgKF9fY29udiAhPSBzaXplX3QoLTEpKQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgX190b19uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxl
eHRlcm5fdHlwZSo+KF9fY3RvKTsKICAgICAgICAgICAgICBpZiAoX190bGVuID09IF9fdG11bHRp
cGxlICogKF9fdG9fZW5kIC0gX190bykpCiAgICAgICAgICAgICAgICBfX3JldCA9IG5vY29udjsK
ICAgICAgICAgICAgICBlbHNlIGlmIChfX3RsZW4gPT0gMCkKICAgICAgICAgICAgICAgIF9fcmV0
ID0gb2s7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19yZXQgPSBwYXJ0aWFs
OwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fcmV0ID0gZXJyb3I7
CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CiAg
ICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb19pbihz
dGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAg
Y29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9t
X25leHQsCiAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5k
LAogICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICB7CiAgICAgIHJl
c3VsdCBfX3JldCA9IGVycm9yOwogICAgICBpZiAoX19zdGF0ZS5fTV9nb29kKCkpCiAgICAgICAg
ewogICAgICAgICAgdHlwZWRlZiBzdGF0ZV90eXBlOjpfX2Rlc2NfdHlwZSBfX2Rlc2NfdHlwZTsK
ICAgICAgICAgIGNvbnN0IF9fZGVzY190eXBlKiBfX2Rlc2MgPSBfX3N0YXRlLl9NX2dldF9pbl9k
ZXNjcmlwdG9yKCk7CiAgICAgICAgICBjb25zdCBzaXplX3QgX19mbXVsdGlwbGUgPSBzaXplb2Yo
ZXh0ZXJuX3R5cGUpIC8gc2l6ZW9mKGNoYXIpOwogICAgICAgICAgc2l6ZV90IF9fZmxlbiA9IF9f
Zm11bHRpcGxlICogKF9fZnJvbV9lbmQgLSBfX2Zyb20pOwogICAgICAgICAgY29uc3Qgc2l6ZV90
IF9fdG11bHRpcGxlID0gc2l6ZW9mKGludGVybl90eXBlKSAvIHNpemVvZihjaGFyKTsKICAgICAg
ICAgIHNpemVfdCBfX3RsZW4gPSBfX3RtdWx0aXBsZSAqIChfX3RvX2VuZCAtIF9fdG8pOwoKCgog
ICAgICAgICAgY2hhciogX19jdG8gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3RvKTsKICAg
ICAgICAgIGNoYXIqIF9fY2Zyb207CiAgICAgICAgICBzaXplX3QgX19jb252OwoKCgoKCgogICAg
ICAgICAgaW50IF9fZXh0X2JvbSA9IF9fc3RhdGUuX01fZ2V0X2V4dGVybmFsX2JvbSgpOwogICAg
ICAgICAgaWYgKF9fZXh0X2JvbSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNpemVfdCBf
X3NpemUgPSBfX2Zyb21fZW5kIC0gX19mcm9tOwogICAgICAgICAgICAgIGV4dGVybl90eXBlKiBf
X2NmaXhlZCA9IHN0YXRpY19jYXN0PGV4dGVybl90eXBlKj4oX19idWlsdGluX2FsbG9jYShzaXpl
b2YoZXh0ZXJuX3R5cGUpICogKF9fc2l6ZSArIDEpKSk7CiAgICAgICAgICAgICAgX19jZml4ZWRb
MF0gPSBzdGF0aWNfY2FzdDxleHRlcm5fdHlwZT4oX19leHRfYm9tKTsKICAgICAgICAgICAgICBj
aGFyX3RyYWl0czxleHRlcm5fdHlwZT46OmNvcHkoX19jZml4ZWQgKyAxLCBfX2Zyb20sIF9fc2l6
ZSk7CiAgICAgICAgICAgICAgX19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2Zp
eGVkKTsKICAgICAgICAgICAgICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsICpfX2Rl
c2MsICZfX2Nmcm9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19m
bGVuLCAmX19jdG8sICZfX3RsZW4pOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX19jZml4ZWQgPSBjb25zdF9jYXN0
PGV4dGVybl90eXBlKj4oX19mcm9tKTsKICAgICAgICAgICAgICBfX2Nmcm9tID0gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oX19jZml4ZWQpOwogICAgICAgICAgICAgIF9fY29udiA9IF9faWNvbnZf
YWRhcHRvcihpY29udiwgKl9fZGVzYywgJl9fY2Zyb20sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZfX2ZsZW4sICZfX2N0bywgJl9fdGxlbik7CiAgICAgICAgICAgIH0K
CgogICAgICAgICAgaWYgKF9fY29udiAhPSBzaXplX3QoLTEpKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgX19mcm9tX25leHQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGV4dGVybl90eXBl
Kj4oX19jZnJvbSk7CiAgICAgICAgICAgICAgX190b19uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxp
bnRlcm5fdHlwZSo+KF9fY3RvKTsKICAgICAgICAgICAgICBfX3JldCA9IG9rOwogICAgICAgICAg
ICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19mbGVu
IDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihfX2Zyb21fZW5kIC0gX19mcm9tKSkKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgX19mcm9tX25leHQgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IGV4dGVybl90eXBlKj4oX19jZnJvbSk7CiAgICAgICAgICAgICAgICAgIF9fdG9fbmV4dCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8aW50ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgICAg
IF9fcmV0ID0gcGFydGlhbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICBfX3JldCA9IGVycm9yOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBl
bmFtZSBfRXh0ZXJuVD4KICAgIGludAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9f
ZW5jX3RyYWl0cz46OgogICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpCiAgICB7IHJldHVy
biAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4K
ICAgIGJvb2wKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoK
ICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpCiAgICB7IHJldHVybiBmYWxzZTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBp
bnQKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRv
X2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAg
ICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3QK
ICAgIHsgcmV0dXJuIG1pbihfX21heCwgc3RhdGljX2Nhc3Q8c2l6ZV90PihfX2VuZCAtIF9fZnJv
bSkpOyB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5U
PgogICAgaW50CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6
CiAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKQogICAgeyByZXR1cm4gMTsgfQoKCgoK
ICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4KICAg
IDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4K
ICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY2hhciBpbnRlcm5fdHlwZTsKICAgICAg
dHlwZWRlZiBjaGFyIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90
eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAg
Y29kZWN2dChzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFs
CiAgICAgIH5jb2RlY3Z0KCk7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3Rh
dGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAg
IGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJv
bV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3Rv
X2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAg
IHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0
ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBl
eHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAg
ICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAog
ICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5
cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90
eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0
OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoK
ICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygp
OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBj
b25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5
cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAg
ZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBj
bGFzcyBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4KICAgIDogcHVibGljIF9fY29k
ZWN2dF9hYnN0cmFjdF9iYXNlPHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4KICAgIHsKICAgIHB1
YmxpYzoKCiAgICAgIHR5cGVkZWYgd2NoYXJfdCBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBj
aGFyIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKCiAg
ICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChz
aXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5j
b2RlY3Z0KCk7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYg
X19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGlu
dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAog
ICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAg
ICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwg
cmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwKICAgICAgICAgICAg
ICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAg
ICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVz
dWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsCiAgICAgICAgICAgICBjb25zdCBl
eHRlcm5fdHlwZSogX19mcm9tLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwKICAgICAg
ICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBpbnRl
cm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgaW50ZXJu
X3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbAogICAgICBpbnQgZG9fZW5j
b2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAgICBib29sIGRvX2Fsd2F5
c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAgICBpbnQgZG9fbGVu
Z3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25z
dDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygp
OwogICAgfTsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVy
blQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0X2J5bmFtZSA6IHB1YmxpYyBj
b2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4KICAgIHsKICAgIHB1YmxpYzoKICAg
ICAgZXhwbGljaXQKICAgICAgY29kZWN2dF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3Jl
ZnMgPSAwKQogICAgICA6IGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPihfX3Jl
ZnMpIHsgfQogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0X2J5bmFt
ZSgpIHsgfQogICAgfTsKIyA0MTYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2Nh
bGVfZmFjZXRzLmgiIDIgMwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J
bkl0ZXI+CiAgICBjbGFzcyBfTnVtZXJpY19nZXQ7CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgogICAgY2xhc3MgX0Zvcm1hdF9jYWNoZQogICAgewogICAgcHVibGljOgoKICAgICAg
dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFy
VD4gdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5n
X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBzaXpl
X3R5cGU7CgoKICAgICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICAgICAgZnJpZW5kIGNsYXNzIF9OdW1lcmlj
X2dldDsKICAgICAgZnJpZW5kIGNsYXNzIG51bV9nZXQ8X0NoYXJUPjsKICAgICAgZnJpZW5kIGNs
YXNzIG51bV9wdXQ8X0NoYXJUPjsKICAgICAgZnJpZW5kIGNsYXNzIHRpbWVfZ2V0PF9DaGFyVD47
CiAgICAgIGZyaWVuZCBjbGFzcyBtb25leV9nZXQ8X0NoYXJUPjsKICAgICAgZnJpZW5kIGNsYXNz
IHRpbWVfcHV0PF9DaGFyVD47CiAgICAgIGZyaWVuZCBjbGFzcyBtb25leV9wdXQ8X0NoYXJUPjsK
CgoKCiAgICAgIHN0YXRpYyBpbnQgX1NfcHdvcmRfaXg7CgoKCiAgICAgIGJvb2wgX01fdmFsaWQ7
CgoKCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyIF9TX2xpdGVyYWxzW107CgoKCgogICAgICBlbnVt
CiAgICAgIHsKICAgICAgICBfU19taW51cywKICAgICAgICBfU19wbHVzLAogICAgICAgIF9TX3gs
CiAgICAgICAgX1NfWCwKICAgICAgICBfU19kaWdpdHMsCiAgICAgICAgX1NfZGlnaXRzX2VuZCA9
IF9TX2RpZ2l0cyArIDE2LAogICAgICAgIF9TX3VkaWdpdHMgPSBfU19kaWdpdHNfZW5kLAogICAg
ICAgIF9TX3VkaWdpdHNfZW5kID0gX1NfdWRpZ2l0cyArIDE2LAogICAgICAgIF9TX2VlID0gX1Nf
ZGlnaXRzICsgMTQsCiAgICAgICAgX1NfRWUgPSBfU191ZGlnaXRzICsgMTQKICAgICAgfTsKCgoK
CiAgICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFsX3BvaW50OwoKCgoKCiAgICAgIGNoYXJfdHlwZSBf
TV90aG91c2FuZHNfc2VwOwoKCgogICAgICBzdHJpbmdfdHlwZSBfTV90cnVlbmFtZTsKICAgICAg
c3RyaW5nX3R5cGUgX01fZmFsc2VuYW1lOwoKCgogICAgICBib29sIF9NX3VzZV9ncm91cGluZzsK
CgoKICAgICAgc3RyaW5nIF9NX2dyb3VwaW5nOwoKICAgICAgX0Zvcm1hdF9jYWNoZSgpOwoKICAg
ICAgfl9Gb3JtYXRfY2FjaGUoKSB0aHJvdygpIHsgfQoKCgoKICAgICAgc3RhdGljIF9Gb3JtYXRf
Y2FjaGU8X0NoYXJUPioKICAgICAgX1NfZ2V0KGlvc19iYXNlJiBfX2lvcyk7CgogICAgICB2b2lk
CiAgICAgIF9NX3BvcHVsYXRlKGlvc19iYXNlJik7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBf
U19jYWxsYmFjayhpb3NfYmFzZTo6ZXZlbnQgX19ldmVudCwgaW9zX2Jhc2UmIF9faW9zLCBpbnQg
X19peCkgdGhyb3coKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlu
dCBfRm9ybWF0X2NhY2hlPF9DaGFyVD46Ol9TX3B3b3JkX2l4OwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBjb25zdCBjaGFyIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6CiAgICBfU19s
aXRlcmFsc1tdID0gIi0reFgwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OUFCQ0RFRiI7CgogICB0
ZW1wbGF0ZTw+IF9Gb3JtYXRfY2FjaGU8Y2hhcj46Ol9Gb3JtYXRfY2FjaGUoKTsKCiAgIHRlbXBs
YXRlPD4gX0Zvcm1hdF9jYWNoZTx3Y2hhcl90Pjo6X0Zvcm1hdF9jYWNoZSgpOwoKCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyBfTnVtZXJp
Y19nZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsK
ICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+CiAgICAgIGZyaWVuZCBjbGFzcyBudW1fZ2V0Owog
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+CiAgICAgIGZy
aWVuZCBjbGFzcyB0aW1lX2dldDsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVu
YW1lIF9Jbkl0ZXJUPgogICAgICBmcmllbmQgY2xhc3MgbW9uZXlfZ2V0OwogICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+CiAgICAgIGZyaWVuZCBjbGFzcyBu
dW1fcHV0OwogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+
CiAgICAgIGZyaWVuZCBjbGFzcyB0aW1lX3B1dDsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPgogICAgICBmcmllbmQgY2xhc3MgbW9uZXlfcHV0OwoKICAg
IHByaXZhdGU6CiAgICAgIGV4cGxpY2l0CiAgICAgIF9OdW1lcmljX2dldCgpIHsgfQoKICAgICAg
dmlydHVhbAogICAgICB+X051bWVyaWNfZ2V0KCkgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAg
X01fZ2V0X2RpZ2l0cyhpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kKSBjb25zdDsKICAg
IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNs
YXNzIG51bV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgoKICAg
ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90
eXBlOwogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKCiAg
ICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbnVtX2dldChz
aXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVy
X3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNl
JiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBib29sJiBfX3YpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7
IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUg
X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LCBzaG9ydCYgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9f
aW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBf
X2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLCBpbnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9f
aW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBn
ZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyBy
ZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0
ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh
c2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgbG9uZyYg
X192KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJy
LCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRl
cl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VyciwgdW5zaWduZWQgc2hvcnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0
KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAg
IGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JiBfX3YpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0K
CiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2Vu
ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVu
c2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5k
LCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90
eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAg
ICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgoKICAg
ICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBp
b3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZmxvYXQm
IF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2Vy
ciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRl
cl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VyciwgZG91YmxlJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBf
X2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRl
cl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0
ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh
c2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHZvaWQqJiBfX3Yp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9f
dik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgfm51bV9nZXQoKSB7IH0KCgoKCgog
ICAgICB2b2lkCiAgICAgIF9NX2V4dHJhY3QoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19l
bmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf
X2VyciwgY2hhciogX194dHJjLAogICAgICAgICAgICAgICAgIGludCYgX19iYXNlLCBib29sIF9f
ZnAgPSB0cnVlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChp
dGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsIGJvb2wm
KSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBl
LCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBzaG9ydCYpIGNvbnN0
OwogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5
cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBpbnQmKSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldCAoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19i
YXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBsb25nJikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0
ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgbG9uZyBsb25nJikgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUs
IGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgIHVuc2ln
bmVkIHNob3J0JikgY29uc3Q7CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChp
dGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLAogICAgICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JikgY29uc3Q7CiAgICAgIHZpcnR1YWwgaXRlcl90
eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLAogICAgICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYpIGNvbnN0OwoK
ICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBl
LCBpb3NfYmFzZSYsCiAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2ln
bmVkIGxvbmcgbG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f
Z2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBf
X2VyciwKICAgICAgICAgICAgIGZsb2F0JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw
ZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgZG91YmxlJikgY29uc3Q7CgogICAgICB2aXJ0
dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNl
JiwKICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmKSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0
ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAg
ICB2b2lkKiYpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Omlk
OwoKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbnVtX2dldDxjaGFyLCBpc3RyZWFtYnVmX2l0
ZXJhdG9yPGNoYXI+ID46OgogICAgX01fZXh0cmFjdChpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+
IF9fYmVnLAogICAgICAgICAgICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+IF9fZW5kLCBp
b3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBj
aGFyKiBfX3h0cmMsCiAgICAgICAgICAgICAgIGludCYgX19iYXNlLCBib29sIF9fZnApIGNvbnN0
OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBj
bGFzcyBfTnVtZXJpY19wdXQKICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQg
Y2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsKICAgIHByb3RlY3Rl
ZDoKICAgICAgZXhwbGljaXQKICAgICAgX051bWVyaWNfcHV0KCkgeyB9CgogICAgICB2aXJ0dWFs
CiAgICAgIH5fTnVtZXJpY19wdXQoKSB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyBudW1fcHV0IDogcHVibGljIGxvY2Fs
ZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw
ZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxl
OjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bV9wdXQoc2l6ZV90IF9fcmVmcyA9IDAp
IDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChp
dGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikg
Y29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAg
ICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hh
cl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3Ms
IF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlw
ZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICB1bnNpZ25l
ZCBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGws
IF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19i
YXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUK
ICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGws
CiAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiBk
b19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBw
dXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgZG91Ymxl
IF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7
IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9f
ZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIGxvbmcgZG91YmxlIF9fdikgY29uc3QKICAg
ICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJf
dHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9f
ZmlsbCwKICAgICAgICAgIGNvbnN0IHZvaWQqIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9f
cHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1
YWwKICAgICAgfm51bV9wdXQoKSB7IH07CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBk
b19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wgX192KSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlv
c19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0OwoKCiAgICAgIHZpcnR1
YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBl
IF9fZmlsbCwgbG9uZyBsb25nIF9fdikgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK
ICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCB1bnNp
Z25lZCBsb25nKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQo
aXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIHVuc2lnbmVkIGxvbmcgbG9u
ZykgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlw
ZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBjb25zdDsKCiAgICAg
IHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hh
cl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRl
cl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmls
bCwgY29uc3Qgdm9pZCogX192KSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxlOjppZCBudW1fcHV0PF9DaGFyVCwg
X091dEl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbnVt
cHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgoKICAgICAgdHlw
ZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+
IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgcHJpdmF0ZToK
ICAgICAgY2hhcl90eXBlIF9NX2RlY2ltYWxfcG9pbnQ7CiAgICAgIGNoYXJfdHlwZSBfTV90aG91
c2FuZHNfc2VwOwogICAgICBzdHJpbmcgX01fZ3JvdXBpbmc7CiAgICAgIHN0cmluZ190eXBlIF9N
X3RydWVuYW1lOwogICAgICBzdHJpbmdfdHlwZSBfTV9mYWxzZW5hbWU7CgogICAgcHVibGljOgog
ICAgICBleHBsaWNpdAogICAgICBudW1wdW5jdChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6
OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX251bXB1bmN0KCk7IH0KCiAgICAg
IGV4cGxpY2l0CiAgICAgIG51bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZz
ID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX251bXB1
bmN0KF9fY2xvYyk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICBkZWNpbWFsX3BvaW50KCkgY29u
c3QKICAgICAgeyByZXR1cm4gZG9fZGVjaW1hbF9wb2ludCgpOyB9CgogICAgICBjaGFyX3R5cGUK
ICAgICAgdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3Rob3VzYW5kc19z
ZXAoKTsgfQoKICAgICAgc3RyaW5nCiAgICAgIGdyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1
cm4gZG9fZ3JvdXBpbmcoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgdHJ1ZW5hbWUoKSBj
b25zdAogICAgICB7IHJldHVybiBkb190cnVlbmFtZSgpOyB9CgogICAgICBzdHJpbmdfdHlwZQog
ICAgICBmYWxzZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBkb19mYWxzZW5hbWUoKTsgfQoK
ICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bnVtcHVuY3QoKSB7IH0KCiAgICAg
IHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX2RlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7
IHJldHVybiBfTV9kZWNpbWFsX3BvaW50OyB9CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAg
ICBkb190aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fdGhvdXNhbmRzX3Nl
cDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmcKICAgICAgZG9fZ3JvdXBpbmcoKSBjb25zdAogICAg
ICB7IHJldHVybiBfTV9ncm91cGluZzsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAg
ICBkb190cnVlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3RydWVuYW1lOyB9CgogICAg
ICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX2ZhbHNlbmFtZSgpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIF9NX2ZhbHNlbmFtZTsgfQoKCiAgICAgIHZvaWQKICAgICAgX01faW5pdGlhbGl6ZV9u
dW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9IF9fbnVsbCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIG51bXB1bmN0PF9DaGFyVD46OmlkOwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB2b2lkCiAgICBudW1wdW5jdDxfQ2hhclQ+Ojpf
TV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgKQogICAgewoKICAgIH0KCiAgdGVtcGxh
dGU8PgogICAgdm9pZAogICAgbnVtcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3Qo
X19jX2xvY2FsZSBfX2Nsb2MpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBudW1wdW5jdDx3
Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CgoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbnVtcHVuY3RfYnluYW1lIDogcHVi
bGljIG51bXB1bmN0PF9DaGFyVD4KICAgIHsKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9u
dW1wdW5jdDsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAg
ICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgZXhwbGlj
aXQKICAgICAgbnVtcHVuY3RfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9
IDApCiAgICAgIDogbnVtcHVuY3Q8X0NoYXJUPihfX3JlZnMpCiAgICAgIHsKICAgICAgICBfU19j
cmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3QsIF9fcyk7CiAgICAgICAgX01faW5p
dGlhbGl6ZV9udW1wdW5jdChfTV9jX2xvY2FsZV9udW1wdW5jdCk7CiAgICAgIH0KCiAgICBwcm90
ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm51bXB1bmN0X2J5bmFtZSgpCiAgICAgIHsgX1Nf
ZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9udW1wdW5jdCk7IH0KICAgIH07CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjb2xsYXRlIDogcHVibGljIGxvY2FsZTo6
ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsK
ICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0
YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29sbGF0ZShzaXplX3Qg
X19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpbnQKICAgICAg
Y29tcGFyZShjb25zdCBfQ2hhclQqIF9fbG8xLCBjb25zdCBfQ2hhclQqIF9faGkxLAogICAgICAg
ICAgICAgIGNvbnN0IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmRvX2NvbXBhcmUoX19sbzEsIF9faGkxLCBfX2xvMiwgX19oaTIp
OyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICB0cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBfX2xv
LCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RyYW5z
Zm9ybShfX2xvLCBfX2hpKTsgfQoKICAgICAgbG9uZwogICAgICBoYXNoKGNvbnN0IF9DaGFyVCog
X19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19o
YXNoKF9fbG8sIF9faGkpOyB9CgogIHByb3RlY3RlZDoKICAgICAgfmNvbGxhdGUoKSB7IH0KCiAg
ICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2NvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29u
c3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBj
b25zdCBfQ2hhclQqIF9faGkyKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAg
ICAgZG9fdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgbG9uZwogICAgICBkb19oYXNoKGNvbnN0IF9DaGFyVCogX19s
bywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgY29sbGF0ZTxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRl
PD4KICAgIGludAogICAgY29sbGF0ZTxjaGFyPjo6ZG9fY29tcGFyZShjb25zdCBjaGFyKiBfX2xv
MSwgY29uc3QgY2hhciogX19oaTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqIF9fbG8yLCBjb25zdCBjaGFyKiBfX2hpMikgY29uc3Q7CgogIHRlbXBsYXRlPD4KICAg
IHN0cmluZwogICAgY29sbGF0ZTxjaGFyPjo6ZG9fdHJhbnNmb3JtKGNvbnN0IGNoYXIqIF9fbG8s
IGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAgICBsb25nCiAgICBjb2xs
YXRlPGNoYXI+Ojpkb19oYXNoKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkpIGNv
bnN0OwoKICB0ZW1wbGF0ZTw+CiAgICBpbnQKICAgIGNvbGxhdGU8d2NoYXJfdD46OmRvX2NvbXBh
cmUoY29uc3Qgd2NoYXJfdCogX19sbzEsIGNvbnN0IHdjaGFyX3QqIF9faGkxLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90KiBfX2xvMiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCogX19oaTIpIGNvbnN0OwoKICB0ZW1w
bGF0ZTw+CiAgICB3c3RyaW5nCiAgICBjb2xsYXRlPHdjaGFyX3Q+Ojpkb190cmFuc2Zvcm0oY29u
c3Qgd2NoYXJfdCogX19sbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB3Y2hhcl90KiBfX2hpKSBjb25zdDsKCiAgdGVtcGxhdGU8PgogICAgbG9uZwogICAgY29sbGF0
ZTx3Y2hhcl90Pjo6ZG9faGFzaChjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBf
X2hpKSBjb25zdDsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGNvbGxh
dGVfYnluYW1lIDogcHVibGljIGNvbGxhdGU8X0NoYXJUPgogICAgewogICAgcHVibGljOgoKICAg
ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxf
Q2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgY29sbGF0ZV9ieW5hbWUo
Y29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZp
cnR1YWwKICAgICAgfmNvbGxhdGVfYnluYW1lKCkgeyB9CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAg
ICBjb2xsYXRlX2J5bmFtZTxjaGFyPjo6Y29sbGF0ZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVf
dCBfX3JlZnMpOwoKICB0ZW1wbGF0ZTw+CiAgICBjb2xsYXRlX2J5bmFtZTx3Y2hhcl90Pjo6Y29s
bGF0ZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMpOwoKCiAgY2xhc3MgdGltZV9i
YXNlCiAgewogIHB1YmxpYzoKICAgIGVudW0gZGF0ZW9yZGVyIHsgbm9fb3JkZXIsIGRteSwgbWR5
LCB5bWQsIHlkbSB9OwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X0luSXRlcj4KICAgIGNsYXNzIHRpbWVfZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1Ymxp
YyB0aW1lX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf
dHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2Nh
bGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9nZXQoc2l6ZV90IF9fcmVmcyA9
IDApCiAgICAgIDogbG9jYWxlOjpmYWNldCAoX19yZWZzKSwgX01fZGF5bmFtZXMoMCksIF9NX21v
bnRobmFtZXMoMCkgeyB9CgogICAgICBkYXRlb3JkZXIKICAgICAgZGF0ZV9vcmRlcigpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIGRvX2RhdGVfb3JkZXIoKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAg
IGdldF90aW1lKGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9fZiwK
ICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190KSBjb25zdAog
ICAgICB7IHJldHVybiBkb19nZXRfdGltZShfX3MsIF9fZW5kLCBfX2YsIF9fZXJyLCBfX3QpOyB9
CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X2RhdGUoaXRlcl90eXBlIF9fcywgaXRlcl90eXBl
IF9fZW5kLCBpb3NfYmFzZSYgX19mLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg
X19lcnIsIHRtKiBfX3QpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldF9kYXRlKF9fcywgX19l
bmQsIF9fZiwgX19lcnIsIF9fdCk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfd2Vla2Rh
eShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2YsCiAgICAgICAg
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3QKICAgICAg
eyByZXR1cm4gZG9fZ2V0X3dlZWtkYXkoX19zLF9fZW5kLF9fZixfX2VycixfX3QpOyB9CgogICAg
ICBpdGVyX3R5cGUKICAgICAgZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUg
X19lbmQsIGlvc19iYXNlJiBfX2YsCiAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLCB0bSogX190KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXRfbW9udGhuYW1l
KF9fcyxfX2VuZCxfX2YsX19lcnIsX190KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF95
ZWFyKGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9fZiwKICAgICAg
ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190KSBjb25zdAogICAgICB7
IHJldHVybiBkb19nZXRfeWVhcihfX3MsX19lbmQsX19mLF9fZXJyLF9fdCk7IH0KCiAgICBwcm90
ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfZ2V0KCkKICAgICAgewogICAgICAgIGRl
bGV0ZSBbXSBfTV9tb250aG5hbWVzOwogICAgICAgIGRlbGV0ZSBbXSBfTV9kYXluYW1lczsKICAg
ICAgfQoKICAgICAgdmlydHVhbCBkYXRlb3JkZXIKICAgICAgZG9fZGF0ZV9vcmRlcigpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRpbWVfYmFzZTo6eW1kOyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw
ZQogICAgICBkb19nZXRfdGltZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgLCBpb3NfYmFzZSYs
CiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiAsIHRtKiApIGNvbnN0CiAgICAg
IHsgcmV0dXJuIF9fczsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X2Rh
dGUoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlICwgaW9zX2Jhc2UmLAogICAgICAgICAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSYgLCB0bSogKSBjb25zdAogICAgICB7IHJldHVybiBfX3M7IH0K
CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF93ZWVrZGF5KGl0ZXJfdHlwZSBf
X3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmLAogICAgICAgICAgICAgICAgICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVy
X3R5cGUKICAgICAgZG9fZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19l
bmQsIGlvc19iYXNlJiwKICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg
X19lcnIsIHRtKiBfX3QpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f
Z2V0X3llYXIoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlICwgaW9zX2Jhc2UmLAogICAgICAgICAg
ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmICwgdG0qICkgY29uc3QKICAgICAgeyByZXR1cm4g
X19zOyB9CgogICAgICBtdXRhYmxlIGJhc2ljX3N0cmluZzxfQ2hhclQ+KiBfTV9kYXluYW1lczsK
ICAgICAgbXV0YWJsZSBiYXNpY19zdHJpbmc8X0NoYXJUPiogX01fbW9udGhuYW1lczsKICAgIH07
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGxvY2Fs
ZTo6aWQgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZSA6IHB1
YmxpYyB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5
cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsK
CiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfZ2V0X2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90
IF9fcmVmcyA9IDApCiAgICAgIDogdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPihfX3JlZnMpIHsg
fQogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX2dldF9ieW5hbWUoKSB7
IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+
CiAgICBjbGFzcyB0aW1lX3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgdGltZV9i
YXNlCiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAg
ICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBp
ZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfcHV0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxv
Y2FsZTo6ZmFjZXQgKF9fcmVmcykgeyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVy
X3R5cGUgX19zLCBpb3NfYmFzZSYgLCBjaGFyX3R5cGUgLAogICAgICAgICAgY29uc3QgdG0qICwg
Y29uc3QgX0NoYXJUKiAsCiAgICAgICAgICBjb25zdCBfQ2hhclQqICkgY29uc3QKICAgICAgeyBy
ZXR1cm4gX19zOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlv
c19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICBjb25zdCB0bSogX190bWIs
IGNoYXIgX19mb3JtYXQsIGNoYXIgX19tb2RpZmllciA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJu
IGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3RtYiwgX19mb3JtYXQsIF9fbW9kaWZpZXIpOyB9
CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX3B1dCgpIHsgfQoKICAg
ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNl
JiwgY2hhcl90eXBlLCBjb25zdCB0bSogLAogICAgICAgICAgICAgY2hhciAsIGNoYXIgKSBjb25z
dAogICAgICB7IHJldHVybiBfX3M7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBsb2NhbGU6OmlkIHRpbWVfcHV0PF9DaGFyVCwgX091
dEl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRl
cj4KICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFtZSA6IHB1YmxpYyB0aW1lX3B1dDxfQ2hhclQsIF9P
dXRJdGVyPgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7
CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAg
dGltZV9wdXRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiB0
aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPiAoX19yZWZzKSB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAg
ICAgIHZpcnR1YWwKICAgICAgfnRpbWVfcHV0X2J5bmFtZSgpIHsgfQogICAgfTsKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIG1vbmV5X2dl
dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYg
X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKICAgICAg
dHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBs
b2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlfZ2V0KHNpemVfdCBfX3Jl
ZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAg
ICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwKICAgICAg
ICAgIGlvc19iYXNlJiBfX2YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUm
IF9fdW5pdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX3MsIF9fZW5kLCBfX2ludGws
IF9fZiwgX19lcnIsIF9fdW5pdHMpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJf
dHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2YsCiAg
ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdfdHlwZSYgX19kaWdpdHMp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX3MsIF9fZW5kLCBfX2ludGwsIF9fZiwgX19l
cnIsIF9fZGlnaXRzKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bW9u
ZXlfZ2V0KCkgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90
eXBlIF9fcywgaXRlcl90eXBlICwgYm9vbCAsCiAgICAgICAgICAgICBpb3NfYmFzZSYgLCBpb3Nf
YmFzZTo6aW9zdGF0ZSYgLAogICAgICAgICAgICAgbG9uZyBkb3VibGUmICkgY29uc3QKICAgICAg
eyByZXR1cm4gX19zOyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRl
cl90eXBlIF9fcywgaXRlcl90eXBlICwgYm9vbCAsCiAgICAgICAgICAgICBpb3NfYmFzZSYgLCBp
b3NfYmFzZTo6aW9zdGF0ZSYgLAogICAgICAgICAgICAgc3RyaW5nX3R5cGUmICkgY29uc3QKICAg
ICAgeyByZXR1cm4gX19zOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIG1vbmV5X2dldDxfQ2hhclQsIF9Jbkl0ZXI+
OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAg
IGNsYXNzIG1vbmV5X3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6
CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBp
dGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7
CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5
X3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAg
ICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFz
ZSYgX19mLAogICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX191bml0cykg
Y29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19pbnRsLCBfX2YsIF9fZmlsbCwgX191
bml0cyk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgYm9vbCBf
X2ludGwsIGlvc19iYXNlJiBfX2YsCiAgICAgICAgICBjaGFyX3R5cGUgX19maWxsLCBjb25zdCBz
dHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9f
aW50bCwgX19mLCBfX2ZpbGwsIF9fZGlnaXRzKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmly
dHVhbAogICAgICB+bW9uZXlfcHV0KCkgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg
ICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCwgaW9zX2Jhc2UmICwgY2hhcl90eXBlICwKICAg
ICAgICAgICAgIGxvbmcgZG91YmxlICkgY29uc3QKICAgICAgeyByZXR1cm4gX19zOyB9CgogICAg
ICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCwgaW9z
X2Jhc2UmICwgY2hhcl90eXBlICwKICAgICAgICAgICAgIGNvbnN0IHN0cmluZ190eXBlJiApIGNv
bnN0CiAgICAgIHsgcmV0dXJuIF9fczsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgbW9uZXlfcHV0PF9DaGFyVCwg
X091dEl0ZXI+OjppZDsKCiAgc3RydWN0IG1vbmV5X2Jhc2UKICB7CiAgICBlbnVtIHBhcnQgeyBu
b25lLCBzcGFjZSwgc3ltYm9sLCBzaWduLCB2YWx1ZSB9OwogICAgc3RydWN0IHBhdHRlcm4geyBj
aGFyIGZpZWxkWzRdOyB9OwoKICAgIHN0YXRpYyBjb25zdCBwYXR0ZXJuIF9TX2RlZmF1bHRfcGF0
dGVybjsKCgoKICAgIHN0YXRpYyBwYXR0ZXJuCiAgICBfU19jb25zdHJ1Y3RfcGF0dGVybihjaGFy
IF9fcHJlY2VlZHMsIGNoYXIgX19zcGFjZSwgY2hhciBfX3Bvc24pOwogIH07CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNsYXNzIG1vbmV5cHVuY3QgOiBwdWJs
aWMgbG9jYWxlOjpmYWNldCwgcHVibGljIG1vbmV5X2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAg
ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8
X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGludGwgPSBfSW50
bDsKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgcHJpdmF0ZToKICAgICAgY2hhcl90
eXBlIF9NX2RlY2ltYWxfcG9pbnQ7CiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2FuZHNfc2VwOwog
ICAgICBzdHJpbmcgX01fZ3JvdXBpbmc7CiAgICAgIHN0cmluZ190eXBlIF9NX2N1cnJfc3ltYm9s
OwogICAgICBzdHJpbmdfdHlwZSBfTV9wb3NpdGl2ZV9zaWduOwogICAgICBzdHJpbmdfdHlwZSBf
TV9uZWdhdGl2ZV9zaWduOwogICAgICBpbnQgX01fZnJhY19kaWdpdHM7CiAgICAgIHBhdHRlcm4g
X01fcG9zX2Zvcm1hdDsKICAgICAgcGF0dGVybiBfTV9uZWdfZm9ybWF0OwoKICAgIHB1YmxpYzoK
ICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlwdW5jdChzaXplX3QgX19yZWZzID0gMCkgOiBsb2Nh
bGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoKTsgfQoK
ICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90
IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6
ZV9tb25leXB1bmN0KF9fY2xvYyk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICBkZWNpbWFsX3Bv
aW50KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZGVjaW1hbF9wb2ludCgpOyB9Cgog
ICAgICBjaGFyX3R5cGUKICAgICAgdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IHRoaXMtPmRvX3Rob3VzYW5kc19zZXAoKTsgfQoKICAgICAgc3RyaW5nCiAgICAgIGdyb3VwaW5n
KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ3JvdXBpbmcoKTsgfQoKICAgICAgc3Ry
aW5nX3R5cGUKICAgICAgY3Vycl9zeW1ib2woKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k
b19jdXJyX3N5bWJvbCgpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBwb3NpdGl2ZV9zaWdu
KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcG9zaXRpdmVfc2lnbigpOyB9CgogICAg
ICBzdHJpbmdfdHlwZQogICAgICBuZWdhdGl2ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4g
dGhpcy0+ZG9fbmVnYXRpdmVfc2lnbigpOyB9CgogICAgICBpbnQKICAgICAgZnJhY19kaWdpdHMo
KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19mcmFjX2RpZ2l0cygpOyB9CgogICAgICBw
YXR0ZXJuCiAgICAgIHBvc19mb3JtYXQoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19w
b3NfZm9ybWF0KCk7IH0KCiAgICAgIHBhdHRlcm4KICAgICAgbmVnX2Zvcm1hdCgpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmRvX25lZ19mb3JtYXQoKTsgfQoKICAgIHByb3RlY3RlZDoKICAg
ICAgdmlydHVhbAogICAgICB+bW9uZXlwdW5jdCgpIHsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5
cGUKICAgICAgZG9fZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RlY2lt
YWxfcG9pbnQ7IH0KCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3Rob3VzYW5kc19z
ZXAoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90aG91c2FuZHNfc2VwOyB9CgogICAgICB2aXJ0
dWFsIHN0cmluZwogICAgICBkb19ncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2dy
b3VwaW5nOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX2N1cnJfc3ltYm9s
KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fY3Vycl9zeW1ib2w7IH0KCiAgICAgIHZpcnR1YWwg
c3RyaW5nX3R5cGUKICAgICAgZG9fcG9zaXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IF9NX3Bvc2l0aXZlX3NpZ247IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9f
bmVnYXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX25lZ2F0aXZlX3NpZ247IH0K
CiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2ZyYWNfZGlnaXRzKCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gX01fZnJhY19kaWdpdHM7IH0KCiAgICAgIHZpcnR1YWwgcGF0dGVybgogICAgICBkb19w
b3NfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fcG9zX2Zvcm1hdDsgfQoKICAgICAg
dmlydHVhbCBwYXR0ZXJuCiAgICAgIGRvX25lZ19mb3JtYXQoKSBjb25zdAogICAgICB7IHJldHVy
biBfTV9uZWdfZm9ybWF0OyB9CgoKICAgICAgdm9pZAogICAgICBfTV9pbml0aWFsaXplX21vbmV5
cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfX251bGwpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgbG9jYWxlOjppZCBtb25leXB1bmN0PF9DaGFy
VCwgX0ludGw+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgog
ICAgY29uc3QgYm9vbCBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+OjppbnRsOwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PF9D
aGFyVCwgX0ludGw+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSApCiAgICB7
CgogICAgfQoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PGNoYXI+OjpfTV9p
bml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKICB0ZW1wbGF0ZTw+CiAg
ICB2b2lkCiAgICBtb25leXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3Qo
X19jX2xvY2FsZSBfX2Nsb2MpOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9J
bnRsPgogICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWUgOiBwdWJsaWMgbW9uZXlwdW5jdDxfQ2hh
clQsIF9JbnRsPgogICAgewogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX21vbmV5cHVuY3Q7
CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRl
ZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGludGwgPSBfSW50bDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3RfYnluYW1l
KGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbW9uZXlwdW5jdDxf
Q2hhclQsIF9JbnRsPihfX3JlZnMpCiAgICAgIHsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUo
X01fY19sb2NhbGVfbW9uZXlwdW5jdCwgX19zKTsKICAgICAgICBfTV9pbml0aWFsaXplX21vbmV5
cHVuY3QoX01fY19sb2NhbGVfbW9uZXlwdW5jdCk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAg
ICAgIHZpcnR1YWwKICAgICAgfm1vbmV5cHVuY3RfYnluYW1lKCkKICAgICAgeyBfU19kZXN0cm95
X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21vbmV5cHVuY3QpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjb25zdCBib29sIG1vbmV5cHVuY3RfYnlu
YW1lPF9DaGFyVCwgX0ludGw+OjppbnRsOwoKCiAgc3RydWN0IG1lc3NhZ2VzX2Jhc2UKICB7CiAg
ICB0eXBlZGVmIGludCBjYXRhbG9nOwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIGNsYXNzIG1lc3NhZ2VzIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBtZXNzYWdl
c19iYXNlCiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsK
ICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0
YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbWVzc2FnZXMoc2l6ZV90
IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgY2F0YWxvZwog
ICAgICBvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLCBjb25zdCBsb2NhbGUmIF9f
bG9jKSBjb25zdAogICAgICB7IHJldHVybiBkb19vcGVuKF9fcywgX19sb2MpOyB9CgogICAgICBz
dHJpbmdfdHlwZQogICAgICBnZXQoY2F0YWxvZyBfX2MsIGludCBfX3NldCwgaW50IF9fbXNnaWQs
IGNvbnN0IHN0cmluZ190eXBlJiBfX3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2Ms
X19zZXQsX19tc2dpZCxfX3MpOyB9CgogICAgICB2b2lkCiAgICAgIGNsb3NlKGNhdGFsb2cgX19j
KSBjb25zdAogICAgICB7IHJldHVybiBkb19jbG9zZShfX2MpOyB9CgogICAgcHJvdGVjdGVkOgog
ICAgICB2aXJ0dWFsCiAgICAgIH5tZXNzYWdlcygpIHsgfQoKCgogICAgICB2aXJ0dWFsIGNhdGFs
b2cKICAgICAgZG9fb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUm
KSBjb25zdAogICAgICB7IHJldHVybiAwOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAg
ICAgIGRvX2dldChjYXRhbG9nLCBpbnQsIGludCAsIGNvbnN0IHN0cmluZ190eXBlJiBfX2RmYXVs
dCkgY29uc3QKICAgICAgeyByZXR1cm4gX19kZmF1bHQ7IH0KCiAgICAgIHZpcnR1YWwgdm9pZAog
ICAgICBkb19jbG9zZShjYXRhbG9nKSBjb25zdCB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgbWVzc2FnZXM8X0NoYXJUPjo6aWQ7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZSA6IHB1YmxpYyBt
ZXNzYWdlczxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
YXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsK
CiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90
IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bWVzc2Fn
ZXNfYnluYW1lKCkgeyB9CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBtZXNzYWdlc19ieW5hbWU8
Y2hhcj46Om1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyk7CgogIHRl
bXBsYXRlPD4KICAgIG1lc3NhZ2VzX2J5bmFtZTx3Y2hhcl90Pjo6bWVzc2FnZXNfYnluYW1lKGNv
bnN0IGNoYXIqLCBzaXplX3QgX19yZWZzKTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNzcGFjZShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUm
IF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMo
Y3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog
ICAgaW5saW5lIGJvb2wKICAgIGlzcHJpbnQoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xv
YykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBl
X2Jhc2U6OnByaW50LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlu
bGluZSBib29sCiAgICBpc2NudHJsKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAg
ICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNl
OjpjbnRybCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUg
Ym9vbAogICAgaXN1cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyBy
ZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6dXBw
ZXIsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wg
aXNsb3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNl
X2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6bG93ZXIsIF9fYyk7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxw
aGEoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNl
dDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmFscGhhLCBfX2MpOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2RpZ2l0KF9D
aGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5
cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwdW5jdChfQ2hhclQg
X19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9D
aGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6cHVuY3QsIF9fYyk7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzeGRpZ2l0KF9DaGFyVCBfX2Ms
IGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJU
PiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjp4ZGlnaXQsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxudW0oX0NoYXJUIF9fYywgY29u
c3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4o
X19sb2MpLmlzKGN0eXBlX2Jhc2U6OmFsbnVtLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2dyYXBoKF9DaGFyVCBfX2MsIGNvbnN0IGxv
Y2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9j
KS5pcyhjdHlwZV9iYXNlOjpncmFwaCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b3VwcGVyKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2Fs
ZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS50
b3VwcGVyKF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9D
aGFyVAogICAgdG9sb3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyBy
ZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG9sb3dlcihfX2MpOyB9Cn0K
IyAzNyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMKCm5h
bWVzcGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBjbGFzcyBiYXNpY19pb3MgOiBwdWJsaWMgaW9zX2Jhc2UKICAgIHsKICAgIHB1Ymxp
YzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJh
aXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpv
ZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCiAg
ICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgb3N0
cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbWJ1Zl9pdGVyOwogICAg
ICB0eXBlZGVmIG51bV9wdXQ8X0NoYXJULCBfX29zdHJlYW1idWZfaXRlcj4gX19udW1wdXRfdHlw
ZTsKICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19p
c3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX2dldDxfQ2hhclQsIF9faXN0cmVhbWJ1
Zl9pdGVyPiBfX251bWdldF90eXBlOwoKCiAgICBwcml2YXRlOgogICAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4qIF9NX3RpZTsKICAgICAgY2hhcl90eXBlIF9NX2ZpbGw7CiAgICAg
IGlvc3RhdGUgX01fZXhjZXB0aW9uOwoKICAgIHByb3RlY3RlZDoKICAgICAgYmFzaWNfc3RyZWFt
YnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9NX3N0cmVhbWJ1ZjsKICAgICAgaW9zdGF0ZSBfTV9zdHJl
YW1idWZfc3RhdGU7CgoKICAgICAgY29uc3QgX19jdHlwZV90eXBlKiBfTV9pb3NfZmN0eXBlOwoK
ICAgICAgY29uc3QgX19udW1wdXRfdHlwZSogX01fZm51bXB1dDsKCiAgICAgIGNvbnN0IF9fbnVt
Z2V0X3R5cGUqIF9NX2ZudW1nZXQ7CgogICAgcHVibGljOgogICAgICBpbmxpbmUgY29uc3QgX19j
dHlwZV90eXBlKgogICAgICBfTV9nZXRfZmN0eXBlX2lvcyh2b2lkKQogICAgICB7IHJldHVybiBf
TV9pb3NfZmN0eXBlOyB9CgogICAgICBvcGVyYXRvciB2b2lkKigpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRoaXMtPmZhaWwoKSA/IDAgOiBjb25zdF9jYXN0PGJhc2ljX2lvcyo+KHRoaXMpOyB9Cgog
ICAgICBpbmxpbmUgYm9vbAogICAgICBvcGVyYXRvciEoKSBjb25zdAogICAgICB7IHJldHVybiB0
aGlzLT5mYWlsKCk7IH0KCiAgICAgIGlubGluZSBpb3N0YXRlCiAgICAgIHJkc3RhdGUoKSBjb25z
dAogICAgICB7IHJldHVybiBfTV9zdHJlYW1idWZfc3RhdGU7IH0KCiAgICAgIGlubGluZSB2b2lk
CiAgICAgIGNsZWFyKGlvc3RhdGUgX19zdGF0ZSA9IGdvb2RiaXQpCiAgICAgIHsKICAgICAgICBp
ZiAodGhpcy0+cmRidWYoKSkKICAgICAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc3RhdGU7
CiAgICAgICAgZWxzZQogICAgICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZSB8IGJh
ZGJpdDsKICAgICAgICBpZiAoKHRoaXMtPnJkc3RhdGUoKSAmIHRoaXMtPmV4Y2VwdGlvbnMoKSkp
CiAgICAgICAgICBfX3Rocm93X2lvc19mYWlsdXJlKCJiYXNpY19pb3M6OmNsZWFyKGlvc3RhdGUp
IGNhdXNlZCBleGNlcHRpb24iKTsKICAgICAgfQoKICAgICAgaW5saW5lIHZvaWQKICAgICAgc2V0
c3RhdGUoaW9zdGF0ZSBfX3N0YXRlKQogICAgICB7IHRoaXMtPmNsZWFyKHRoaXMtPnJkc3RhdGUo
KSB8IF9fc3RhdGUpOyB9CgogICAgICBpbmxpbmUgYm9vbAogICAgICBnb29kKCkgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+cmRzdGF0ZSgpID09IDA7IH0KCiAgICAgIGlubGluZSBib29sCiAg
ICAgIGVvZigpIGNvbnN0CiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiBlb2ZiaXQp
ICE9IDA7IH0KCiAgICAgIGlubGluZSBib29sCiAgICAgIGZhaWwoKSBjb25zdAogICAgICB7IHJl
dHVybiAodGhpcy0+cmRzdGF0ZSgpICYgKGJhZGJpdCB8IGZhaWxiaXQpKSAhPSAwOyB9CgogICAg
ICBpbmxpbmUgYm9vbAogICAgICBiYWQoKSBjb25zdAogICAgICB7IHJldHVybiAodGhpcy0+cmRz
dGF0ZSgpICYgYmFkYml0KSAhPSAwOyB9CgogICAgICBpbmxpbmUgaW9zdGF0ZQogICAgICBleGNl
cHRpb25zKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZXhjZXB0aW9uOyB9CgogICAgICBpbmxp
bmUgdm9pZAogICAgICBleGNlcHRpb25zKGlvc3RhdGUgX19leGNlcHQpCiAgICAgIHsKICAgICAg
ICBfTV9leGNlcHRpb24gPSBfX2V4Y2VwdDsKICAgICAgICB0aGlzLT5jbGVhcihfTV9zdHJlYW1i
dWZfc3RhdGUpOwogICAgICB9CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfaW9zKGJhc2lj
X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKSA6IGlvc19iYXNlKCkKICAgICAgeyB0
aGlzLT5pbml0KF9fc2IpOyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19pb3MoKSB7IH0K
CgogICAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KgogICAgICB0aWUo
KSBjb25zdAogICAgICB7IHJldHVybiBfTV90aWU7IH0KCiAgICAgIGlubGluZSBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHRpZShiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4qIF9fdGllc3RyKQogICAgICB7CiAgICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+KiBfX29sZCA9IF9NX3RpZTsKICAgICAgICBfTV90aWUgPSBfX3RpZXN0cjsKICAgICAg
ICByZXR1cm4gX19vbGQ7CiAgICAgIH0KCiAgICAgIGlubGluZSBiYXNpY19zdHJlYW1idWY8X0No
YXJULCBfVHJhaXRzPioKICAgICAgcmRidWYoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJl
YW1idWY7IH0KCiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KgogICAgICBy
ZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYik7CgogICAgICBiYXNp
Y19pb3MmCiAgICAgIGNvcHlmbXQoY29uc3QgYmFzaWNfaW9zJiBfX3Jocyk7CgogICAgICBpbmxp
bmUgY2hhcl90eXBlCiAgICAgIGZpbGwoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9maWxsOyB9
CgogICAgICBpbmxpbmUgY2hhcl90eXBlCiAgICAgIGZpbGwoY2hhcl90eXBlIF9fY2gpCiAgICAg
IHsKICAgICAgICBjaGFyX3R5cGUgX19vbGQgPSBfTV9maWxsOwogICAgICAgIF9NX2ZpbGwgPSBf
X2NoOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKCiAgICAgIGxvY2FsZQogICAgICBp
bWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKTsKCiAgICAgIGNoYXIKICAgICAgbmFycm93KGNoYXJf
dHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0OwoKICAgICAgY2hhcl90eXBlCiAgICAgIHdp
ZGVuKGNoYXIgX19jKSBjb25zdDsKCiAgICBwcm90ZWN0ZWQ6CgogICAgICBiYXNpY19pb3MoKSA6
IGlvc19iYXNlKCkKICAgICAgeyB9CgogICAgICB2b2lkCiAgICAgIGluaXQoYmFzaWNfc3RyZWFt
YnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOwoKICAgICAgYm9vbAogICAgICBfTV9jaGVja19m
YWNldChjb25zdCBsb2NhbGU6OmZhY2V0KiBfX2YpCiAgICAgIHsKICAgICAgICBib29sIF9fcmV0
ID0gZmFsc2U7CiAgICAgICAgaWYgKF9fZikKICAgICAgICAgIF9fcmV0ID0gdHJ1ZTsKICAgICAg
ICBlbHNlCiAgICAgICAgICBfX3Rocm93X2JhZF9jYXN0KCk7CiAgICAgICAgcmV0dXJuIF9fcmV0
OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX2NhY2hlX2ZhY2V0cyhjb25zdCBsb2NhbGUm
IF9fbG9jKTsKICAgIH07Cn0KCgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
YmFzaWNfaW9zLnRjYyIgMSAzCiMgMzMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9i
YXNpY19pb3MudGNjIiAzCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+
KgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OnJkYnVmKGJhc2ljX3N0cmVhbWJ1Zjxf
Q2hhclQsIF9UcmFpdHM+KiBfX3NiKQogICAgewogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJU
LCBfVHJhaXRzPiogX19vbGQgPSBfTV9zdHJlYW1idWY7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9IF9f
c2I7CiAgICAgIHRoaXMtPmNsZWFyKCk7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaW9zPF9D
aGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6Y29weWZtdChj
b25zdCBiYXNpY19pb3MmIF9fcmhzKQogICAgewoKCgoKICAgICAgX1dvcmRzKiBfX3dvcmRzID0g
KF9fcmhzLl9NX3dvcmRfbGltaXQgPD0gX1NfbG9jYWxfd29yZHMpID8KICAgICAgICBfTV93b3Jk
X2FycmF5IDogbmV3IF9Xb3Jkc1tfX3Jocy5fTV93b3JkX2xpbWl0XTsKIyA2MyAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lvcy50Y2MiIDMKICAgICAgX0NhbGxiYWNrX2xp
c3QqIF9fY2IgPSBfX3Jocy5fTV9jYWxsYmFja3M7CiAgICAgIGlmIChfX2NiKQogICAgICAgIF9f
Y2ItPl9NX2FkZF9yZWZlcmVuY2UoKTsKICAgICAgX01fY2FsbF9jYWxsYmFja3MoZXJhc2VfZXZl
bnQpOwogICAgICBpZiAoX01fd29yZHMgIT0gX01fd29yZF9hcnJheSkKICAgICAgICBkZWxldGUg
W10gX01fd29yZHM7CiAgICAgIF9NX2Rpc3Bvc2VfY2FsbGJhY2tzKCk7CgogICAgICBfTV9jYWxs
YmFja3MgPSBfX2NiOwogICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCBfX3Jocy5fTV93b3Jk
X2xpbWl0OyArK19faSkKICAgICAgICBfX3dvcmRzW19faV0gPSBfX3Jocy5fTV93b3Jkc1tfX2ld
OwogICAgICBpZiAoX01fd29yZHMgIT0gX01fd29yZF9hcnJheSkKICAgICAgICBkZWxldGUgW10g
X01fd29yZHM7CiAgICAgIF9NX3dvcmRzID0gX193b3JkczsKICAgICAgX01fd29yZF9saW1pdCA9
IF9fcmhzLl9NX3dvcmRfbGltaXQ7CgogICAgICB0aGlzLT5mbGFncyhfX3Jocy5mbGFncygpKTsK
ICAgICAgdGhpcy0+d2lkdGgoX19yaHMud2lkdGgoKSk7CiAgICAgIHRoaXMtPnByZWNpc2lvbihf
X3Jocy5wcmVjaXNpb24oKSk7CiAgICAgIHRoaXMtPnRpZShfX3Jocy50aWUoKSk7CiAgICAgIHRo
aXMtPmZpbGwoX19yaHMuZmlsbCgpKTsKCiAgICAgIHRoaXMtPmV4Y2VwdGlvbnMoX19yaHMuZXhj
ZXB0aW9ucygpKTsKCiAgICAgIF9NX2NhbGxfY2FsbGJhY2tzKGNvcHlmbXRfZXZlbnQpOwogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGNoYXIKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjpuYXJy
b3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3QKICAgIHsgcmV0dXJuIF9NX2lv
c19mY3R5cGUtPm5hcnJvdyhfX2MsIF9fZGZhdWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBfQ2hhclQKICAgIGJhc2ljX2lvczxfQ2hhclQs
IF9UcmFpdHM+Ojp3aWRlbihjaGFyIF9fYykgY29uc3QKICAgIHsgcmV0dXJuIF9NX2lvc19mY3R5
cGUtPndpZGVuKF9fYyk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGxvY2FsZQogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmltYnVl
KGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7CiAgICAgIGxvY2FsZSBfX29sZCh0aGlzLT5nZXRs
b2MoKSk7CiAgICAgIGlvc19iYXNlOjppbWJ1ZShfX2xvYyk7CiAgICAgIF9NX2NhY2hlX2ZhY2V0
cyhfX2xvYyk7CiAgICAgIGlmICh0aGlzLT5yZGJ1ZigpICE9IDApCiAgICAgICAgdGhpcy0+cmRi
dWYoKS0+cHViaW1idWUoX19sb2MpOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2lj
X2lvczxfQ2hhclQsIF9UcmFpdHM+Ojppbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp
dHM+KiBfX3NiKQogICAgewoKICAgICAgaW9zX2Jhc2U6Ol9NX2luaXQoKTsKICAgICAgX01fY2Fj
aGVfZmFjZXRzKF9NX2lvc19sb2NhbGUpOwogICAgICBfTV90aWUgPSAwOwogICAgICBfTV9maWxs
ID0gdGhpcy0+d2lkZW4oJyAnKTsKICAgICAgX01fZXhjZXB0aW9uID0gZ29vZGJpdDsKICAgICAg
X01fc3RyZWFtYnVmID0gX19zYjsKICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zYiA/IGdv
b2RiaXQgOiBiYWRiaXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjpfTV9j
YWNoZV9mYWNldHMoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsKICAgICAgaWYgKGhhc19mYWNl
dDxfX2N0eXBlX3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9pb3NfZmN0eXBlID0gJnVzZV9mYWNl
dDxfX2N0eXBlX3R5cGU+KF9fbG9jKTsKCiAgICAgIGlmIChoYXNfZmFjZXQ8X19udW1wdXRfdHlw
ZT4oX19sb2MpKQogICAgICAgIF9NX2ZudW1wdXQgPSAmdXNlX2ZhY2V0PF9fbnVtcHV0X3R5cGU+
KF9fbG9jKTsKICAgICAgaWYgKGhhc19mYWNldDxfX251bWdldF90eXBlPihfX2xvYykpCiAgICAg
ICAgX01fZm51bWdldCA9ICZ1c2VfZmFjZXQ8X19udW1nZXRfdHlwZT4oX19sb2MpOwogICAgfQp9
CiMgMjE0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfaW9zLmgiIDIgMwoj
IDQ3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyA0MCAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9vc3RyZWFtLmgiIDIgMwoKbmFtZXNw
YWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGNsYXNzIGJhc2ljX29zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBiYXNpY19pb3M8X0NoYXJU
LCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf
dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRl
ZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9D
aGFyVCwgX1RyYWl0cz4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pb3M8
X0NoYXJULCBfVHJhaXRzPiBfX2lvc190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBvc3RyZWFtYnVm
X2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVk
ZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9pdGVyPiBfX251bXB1dF90eXBlOwogICAg
ICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwoKCiAgICAgIGV4cGxpY2l0CiAg
ICAgIGJhc2ljX29zdHJlYW0oX19zdHJlYW1idWZfdHlwZSogX19zYikKICAgICAgeyB0aGlzLT5p
bml0KF9fc2IpOyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19vc3RyZWFtKCkgeyB9CgoK
ICAgICAgY2xhc3Mgc2VudHJ5OwogICAgICBmcmllbmQgY2xhc3Mgc2VudHJ5OwoKCgogICAgICBf
X29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChfX29zdHJlYW1fdHlwZSYgKCpfX3BmKShf
X29zdHJlYW1fdHlwZSYpKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8
KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlwZSYpKTsKCiAgICAgIF9fb3N0cmVhbV90eXBl
JgogICAgICBvcGVyYXRvcjw8KGlvc19iYXNlJiAoKl9fcGYpIChpb3NfYmFzZSYpKTsKCgogICAg
ICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChsb25nIF9fbik7CgogICAgICBfX29z
dHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIF9fbik7CgogICAgICBf
X29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChib29sIF9fbik7CgogICAgICBfX29zdHJl
YW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChzaG9ydCBfX24pCiAgICAgIHsKICAgICAgICBpb3Nf
YmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVs
ZDsKICAgICAgICBpZiAoX19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6
OmhleCkKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8
dW5zaWduZWQgc2hvcnQ+KF9fbikpKTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gdGhp
cy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDxsb25nPihfX24pKTsKICAgICAgfQoKICAgICAgX19v
c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgc2hvcnQgX19uKQogICAgICB7
IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KF9fbikp
OyB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChpbnQgX19uKQogICAg
ICB7CiAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlv
c19iYXNlOjpiYXNlZmllbGQ7CiAgICAgICAgaWYgKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCB8fCBf
X2ZtdCAmIGlvc19iYXNlOjpoZXgpCiAgICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChz
dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oX19uKSkpOwogICAgICAgIGVsc2UKICAgICAg
ICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGxvbmc+KF9fbikpOwogICAg
ICB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBpbnQg
X19uKQogICAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmc+KF9fbikpOyB9CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwo
bG9uZyBsb25nIF9fbik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1
bnNpZ25lZCBsb25nIGxvbmcgX19uKTsKCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3Bl
cmF0b3I8PChkb3VibGUgX19mKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRv
cjw8KGZsb2F0IF9fZikKICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2Fz
dDxkb3VibGU+KF9fZikpOyB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8
PChsb25nIGRvdWJsZSBfX2YpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9y
PDwoY29uc3Qgdm9pZCogX19wKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRv
cjw8KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAg
ICBwdXQoY2hhcl90eXBlIF9fYyk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgd3JpdGUo
Y29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90
eXBlJgogICAgICBmbHVzaCgpOwoKCiAgICAgIHBvc190eXBlCiAgICAgIHRlbGxwKCk7CgogICAg
ICBfX29zdHJlYW1fdHlwZSYKICAgICAgc2Vla3AocG9zX3R5cGUpOwoKICAgICAgX19vc3RyZWFt
X3R5cGUmCiAgICAgIHNlZWtwKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vla2Rpcik7CgogICAgcHJp
dmF0ZToKCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9fb3N0
cmVhbV90eXBlJik7CgogICAgICBiYXNpY19vc3RyZWFtKGNvbnN0IF9fb3N0cmVhbV90eXBlJik7
CgogICAgfTsKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBjbGFzcyBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQogICAgewoK
ICAgICAgYm9vbCBfTV9vazsKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9N
X29zOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgc2VudHJ5KGJhc2ljX29zdHJl
YW08X0NoYXJULF9UcmFpdHM+JiBfX29zKTsKCiAgICAgIH5zZW50cnkoKQogICAgICB7CgogICAg
ICAgIGlmIChfTV9vcy5mbGFncygpICYgaW9zX2Jhc2U6OnVuaXRidWYgJiYgIXVuY2F1Z2h0X2V4
Y2VwdGlvbigpKQogICAgICAgICAgewoKICAgICAgICAgICAgaWYgKF9NX29zLnJkYnVmKCkgJiYg
X01fb3MucmRidWYoKS0+cHVic3luYygpID09IC0xKQogICAgICAgICAgICAgIF9NX29zLnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgfQogICAgICB9CgogICAgICBvcGVyYXRv
ciBib29sKCkKICAgICAgeyByZXR1cm4gX01fb2s7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBf
X291dCwgX0NoYXJUIF9fYyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9y
PDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpCiAgICB7
IHJldHVybiAoX19vdXQgPDwgX19vdXQud2lkZW4oX19jKSk7IH0KCgogIHRlbXBsYXRlIDxjbGFz
cyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9y
PDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKTsKCgogIHRl
bXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jgog
ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgc2lnbmVk
IGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9fYykp
OyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9U
cmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291
dCwgdW5zaWduZWQgY2hhciBfX2MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgc3RhdGljX2Nhc3Q8
Y2hhcj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9fcyk7
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAmCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcyk7CgoKICB0ZW1wbGF0ZTxj
bGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJh
dG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9f
cyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBf
VHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19v
dXQsIGNvbnN0IHNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oX19zKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0
cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4gJgogICAgb3BlcmF0b3I8PChiYXNp
Y19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgdW5zaWduZWQgY2hhciogX19z
KQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9f
cykpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBlbmRsKGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIGZsdXNoKF9fb3MucHV0KF9fb3Mu
d2lkZW4oJ1xuJykpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBlbmRzKGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIF9fb3MucHV0KF9D
aGFyVCgpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBmbHVzaChiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBfX29zLmZsdXNoKCk7IH0K
Cn0KCgoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL29zdHJlYW0udGNjIiAx
IDMKIyAzMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL29zdHJlYW0udGNjIiAzCiMg
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMSAzCiMgMzgg
Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbG9jYWxlLmgiIDMKCiMgMSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMKIyA0MCAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMSAzCiMgNDEgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbG9jYWxlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMSAzCiMgMzUgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwojIDEgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Vycm5vLmgiIDEgMwojIDM4ICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NlcnJuby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Vy
cm5vLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwojIDEgIi91c3IvaW5jbHVk
ZS9mZWF0dXJlcy5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDIgMwoKCmV4dGVy
biAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDEgMwojIDI1ICIvdXNy
L2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgi
IDEgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vZXJybm8uaCIgMSAzCiMgNSAiL3Vzci9pbmNs
dWRlL2xpbnV4L2Vycm5vLmgiIDIgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAy
IDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMwpleHRlcm4gaW50IGVycm5vOwoK
CmV4dGVybiBpbnQgKl9fZXJybm9fbG9jYXRpb24gKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKIyAzNyAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDIgMwojIDU1ICIv
dXNyL2luY2x1ZGUvZXJybm8uaCIgMwpleHRlcm4gY2hhciAqcHJvZ3JhbV9pbnZvY2F0aW9uX25h
bWUsICpwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZTsKCgoKfQojIDY5ICIvdXNyL2luY2x1
ZGUvZXJybm8uaCIgMwp0eXBlZGVmIGludCBlcnJvcl90OwojIDM5ICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX2NlcnJuby5oIiAyIDMKIyAzNiAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX2Nsb2NhbGUuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfY2xvY2FsZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5o
IiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Zl
YXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIgMwoKCiMgMSAiL3Vz
ci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2JpdHMvbG9jYWxlLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIgMwoKZXh0
ZXJuICJDIiB7CiMgNTIgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwpzdHJ1Y3QgbGNvbnYKewoK
CiAgY2hhciAqZGVjaW1hbF9wb2ludDsKICBjaGFyICp0aG91c2FuZHNfc2VwOwoKCgoKCiAgY2hh
ciAqZ3JvdXBpbmc7CgoKCgoKICBjaGFyICppbnRfY3Vycl9zeW1ib2w7CiAgY2hhciAqY3VycmVu
Y3lfc3ltYm9sOwogIGNoYXIgKm1vbl9kZWNpbWFsX3BvaW50OwogIGNoYXIgKm1vbl90aG91c2Fu
ZHNfc2VwOwogIGNoYXIgKm1vbl9ncm91cGluZzsKICBjaGFyICpwb3NpdGl2ZV9zaWduOwogIGNo
YXIgKm5lZ2F0aXZlX3NpZ247CiAgY2hhciBpbnRfZnJhY19kaWdpdHM7CiAgY2hhciBmcmFjX2Rp
Z2l0czsKCiAgY2hhciBwX2NzX3ByZWNlZGVzOwoKICBjaGFyIHBfc2VwX2J5X3NwYWNlOwoKICBj
aGFyIG5fY3NfcHJlY2VkZXM7CgogIGNoYXIgbl9zZXBfYnlfc3BhY2U7CgoKCgoKCiAgY2hhciBw
X3NpZ25fcG9zbjsKICBjaGFyIG5fc2lnbl9wb3NuOwoKCiAgY2hhciBpbnRfcF9jc19wcmVjZWRl
czsKCiAgY2hhciBpbnRfcF9zZXBfYnlfc3BhY2U7CgogIGNoYXIgaW50X25fY3NfcHJlY2VkZXM7
CgogIGNoYXIgaW50X25fc2VwX2J5X3NwYWNlOwoKCgoKCgogIGNoYXIgaW50X3Bfc2lnbl9wb3Nu
OwogIGNoYXIgaW50X25fc2lnbl9wb3NuOwojIDExOSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAz
Cn07CgoKCmV4dGVybiBjaGFyICpzZXRsb2NhbGUgKGludCBfX2NhdGVnb3J5LCBfX2NvbnN0IGNo
YXIgKl9fbG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4gc3RydWN0IGxjb252ICpsb2NhbGVjb252
ICh2b2lkKSB0aHJvdyAoKTsKIyAxNDEgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDE0MiAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAy
IDMKCgoKCgoKCmV4dGVybiBfX2xvY2FsZV90IF9fbmV3bG9jYWxlIChpbnQgX19jYXRlZ29yeV9t
YXNrLCBfX2NvbnN0IGNoYXIgKl9fbG9jYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19sb2NhbGVfdCBfX2Jhc2UpIHRocm93ICgpOwoKCgpleHRlcm4gX19sb2NhbGVfdCBfX2R1
cGxvY2FsZSAoX19sb2NhbGVfdCBfX2RhdGFzZXQpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBf
X2ZyZWVsb2NhbGUgKF9fbG9jYWxlX3QgX19kYXRhc2V0KSB0aHJvdyAoKTsKCgp9CiMgMzkgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2xvY2FsZS5oIiAyIDMKCgoKCgpuYW1l
c3BhY2Ugc3RkCnsKICB1c2luZyA6Omxjb252OwogIHVzaW5nIDo6c2V0bG9jYWxlOwogIHVzaW5n
IDo6bG9jYWxlY29udjsKfQojIDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9j
YWxlX2ZhY2V0cy50Y2MiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfY3N0ZGxpYi5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xv
Y2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2k2ODYt
cGMtbGludXgtZ251L2JpdHMvc3RkX2xpbWl0cy5oIiAxIDMKIyA0NSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL3N0ZF9saW1pdHMuaCIgMwojIDEgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcu
aCIgMSAzCiMgNDYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUv
Yml0cy9zdGRfbGltaXRzLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfY2Zsb2F0LmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2NmbG9hdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjAvaW5jbHVkZS9mbG9hdC5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9jZmxvYXQuaCIgMiAzCiMgNDcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst
djMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9zdGRfbGltaXRzLmgiIDIgMwoKbmFtZXNwYWNlIHN0
ZCB7CgogICAgZW51bSBmbG9hdF9yb3VuZF9zdHlsZSB7CiAgICAgICAgcm91bmRfaW5kZXRlcm1p
bmF0ZSA9IC0xLAogICAgICAgIHJvdW5kX3Rvd2FyZF96ZXJvID0gMCwKICAgICAgICByb3VuZF90
b19uZWFyZXN0ID0gMSwKICAgICAgICByb3VuZF90b3dhcmRfaW5maW5pdHkgPSAyLAogICAgICAg
IHJvdW5kX3Rvd2FyZF9uZWdfaW5maW5pdHkgPSAzCiAgICB9OwoKICAgIGVudW0gZmxvYXRfZGVu
b3JtX3N0eWxlIHsKICAgICAgICBkZW5vcm1faW5kZXRlcm1pbmF0ZSA9IC0xLAogICAgICAgIGRl
bm9ybV9hYnNlbnQgPSAwLAogICAgICAgIGRlbm9ybV9wcmVzZW50ID0gMQogICAgfTsKCiAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0cnVjdCBudW1lcmljX2xpbWl0cyB7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIF9U
cCBtaW4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgICBz
dGF0aWMgX1RwIG1heCgpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQoK
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0
IGludCBkaWdpdHMxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0g
ZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNv
bnN0IGludCByYWRpeCA9IDA7CgogICAgICAgIHN0YXRpYyBfVHAgZXBzaWxvbigpIHRocm93KCkg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICAgIHN0YXRpYyBfVHAgcm91bmRf
ZXJyb3IoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KCiAgICAgICAg
c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u
ZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZs
b2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIF9U
cCBpbmZpbml0eSgpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAg
ICAgIHN0YXRpYyBfVHAgcXVpZXRfTmFOKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxf
VHA+KDApOyB9CiAgICAgICAgc3RhdGljIF9UcCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKSB7IHJl
dHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgICAgc3RhdGljIF9UcCBkZW5vcm1fbWlu
KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CgogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2JvdW5kZWQgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8g
PSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0
aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVy
bzsKICAgIH07CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgX19saW1pdHNfaW5maW5p
dHkoKTsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIF9fbGltaXRzX3F1aWV0X05hTigp
OwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgX19saW1pdHNfc2lnbmFsaW5nX05hTigp
OwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgX19saW1pdHNfZGVub3JtX21pbigpOwoK
ICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPGJvb2w+IHsKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAgIHN0YXRpYyBib29s
IG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICAgIHN0YXRpYyBi
b29sIG1heCgpIHRocm93KCkKICAgICAgICB7IHJldHVybiB0cnVlOyB9CgogICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgZGlnaXRzID0gODsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEw
ID0gMjsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9
IDI7CiAgICAgICAgc3RhdGljIGJvb2wgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVy
biAwOyB9CiAgICAgICAgc3RhdGljIGJvb2wgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAg
eyByZXR1cm4gMDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7
CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5p
dHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFs
c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsK
ICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5v
cm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh
bHNlOwoKICAgICAgICBzdGF0aWMgYm9vbCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgICB7IHJl
dHVybiBzdGF0aWNfY2FzdDxib29sPigwKTsgfQogICAgICAgIHN0YXRpYyBib29sIHF1aWV0X05h
TigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPigwKTsgfQogICAg
ICAgIHN0YXRpYyBib29sIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Ym9vbD4oMCk7IH0KICAgICAgICBzdGF0aWMgYm9vbCBkZW5vcm1fbWluKCkg
dGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KDApOyB9CgogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k
dWxvID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0
YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96
ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxjaGFyPiB7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAg
ICBzdGF0aWMgY2hhciBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gKC0xMjgpOyB9CiAg
ICAgICAgc3RhdGljIGNoYXIgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEyNzsgfQoK
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDc7CiAgICAgICAgc3RhdGljIGNvbnN0
IGludCBkaWdpdHMxMCA9IDI7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0g
dHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0
IGludCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGljIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAg
ICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJv
dygpCiAgICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l
eHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7
CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVp
ZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19O
YU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19k
ZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5v
cm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgY2hhciBpbmZpbml0eSgpIHRocm93KCkK
ICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyPigwKTsgfQogICAgICAgIHN0YXRpYyBj
aGFyIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFy
PigwKTsgfQogICAgICAgIHN0YXRpYyBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAg
ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcj4oMCk7IH0KICAgICAgICBzdGF0aWMgY2hhciBk
ZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDAp
OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFw
cyA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFs
c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0g
cm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNf
bGltaXRzPHNpZ25lZCBjaGFyPiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lh
bGl6ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgbWluKCkgdGhyb3coKQog
ICAgICAgIHsgcmV0dXJuICgtMTI4KTsgfQogICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBtYXgo
KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMTI3OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgZGlnaXRzID0gNzsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMjsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X2V4YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAg
ICBzdGF0aWMgc2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAw
OyB9CiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAg
ICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQg
PSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2lu
ZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9
IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFs
c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0g
ZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3Mg
PSBmYWxzZTsKCiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGluZmluaXR5KCkgdGhyb3coKQog
ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICAgIHN0
YXRpYyBzaWduZWQgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHNp
Z25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVk
IGNoYXI+KDApOyB9CiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGRlbm9ybV9taW4oKSB0aHJv
dygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9CgogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X21vZHVsbyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93
YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPHVu
c2lnbmVkIGNoYXI+IHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9
IHRydWU7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbigpIHRocm93KCkKICAgICAg
ICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgbWF4KCkgdGhyb3co
KQogICAgICAgIHsgcmV0dXJuIDI1NTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0
cyA9IDg7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDI7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3Qg
PSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQog
ICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAg
IHsgcmV0dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAw
OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50
IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmlu
aXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZh
bHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7
CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVu
b3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBm
YWxzZTsKCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAg
ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgICBz
dGF0aWMgdW5zaWduZWQgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQg
Y2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXI+KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZGVub3Jt
X21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
PigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0
cmFwcyA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0g
ZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxl
ID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVy
aWNfbGltaXRzPHdjaGFyX3Q+IHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFs
aXplZCA9IHRydWU7CgogICAgICAgIHN0YXRpYyB3Y2hhcl90IG1pbigpIHRocm93KCkKICAgICAg
ICB7IHJldHVybiAoLTIxNDc0ODM2NDdsIC0gMWwpOyB9CiAgICAgICAgc3RhdGljIHdjaGFyX3Qg
bWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuICgyMTQ3NDgzNjQ3bCk7IH0KCiAgICAgICAg
c3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRp
Z2l0czEwID0gOTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJh
ZGl4ID0gMjsKICAgICAgICBzdGF0aWMgd2NoYXJfdCBlcHNpbG9uKCkgdGhyb3coKQogICAgICAg
IHsgcmV0dXJuIDA7IH0KICAgICAgICBzdGF0aWMgd2NoYXJfdCByb3VuZF9lcnJvcigpIHRocm93
KCkKICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4
cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsK
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWll
dF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05h
TiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rl
bm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9y
bV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyB3Y2hhcl90IGluZmluaXR5KCkgdGhyb3co
KQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHdjaGFyX3Q+KDApOyB9CiAgICAgICAgc3Rh
dGljIHdjaGFyX3QgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PHdjaGFyX3Q+KDApOyB9CiAgICAgICAgc3RhdGljIHdjaGFyX3Qgc2lnbmFsaW5nX05hTigp
IHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx3Y2hhcl90PigwKTsgfQogICAg
ICAgIHN0YXRpYyB3Y2hhcl90IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8d2NoYXJfdD4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
aWVjNTU5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRy
dWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91
bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVt
cGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8c2hvcnQ+IHsKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAgIHN0YXRpYyBzaG9ydCBtaW4o
KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gKC0zMjc2Ny0xKTsgfQogICAgICAgIHN0YXRpYyBz
aG9ydCBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMzI3Njc7IH0KCiAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBkaWdpdHMgPSAxNTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0
czEwID0gNDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4
ID0gMjsKICAgICAgICBzdGF0aWMgc2hvcnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJl
dHVybiAwOyB9CiAgICAgICAgc3RhdGljIHNob3J0IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAg
ICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQg
PSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2lu
ZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9
IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFs
c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0g
ZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3Mg
PSBmYWxzZTsKCiAgICAgICAgc3RhdGljIHNob3J0IGluZmluaXR5KCkgdGhyb3coKQogICAgICAg
IHsgcmV0dXJuIHN0YXRpY19jYXN0PHNob3J0PigwKTsgfQogICAgICAgIHN0YXRpYyBzaG9ydCBx
dWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2hvcnQ+KDAp
OyB9CiAgICAgICAgc3RhdGljIHNob3J0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8c2hvcnQ+KDApOyB9CiAgICAgICAgc3RhdGljIHNob3J0IGRl
bm9ybV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2hvcnQ+KDAp
OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFw
cyA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFs
c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0g
cm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNf
bGltaXRzPHVuc2lnbmVkIHNob3J0PiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3Bl
Y2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWluKCkgdGhy
b3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQg
bWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDY1NTM1OyB9CgogICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgZGlnaXRzID0gMTY7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9
IDQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAy
OwogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBlcHNpbG9uKCkgdGhyb3coKQogICAgICAg
IHsgcmV0dXJuIDA7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgcm91bmRfZXJyb3Io
KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50
IG1pbl9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQx
MCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25h
bGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxl
IGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgaW5m
aW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hv
cnQ+KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHF1aWV0X05hTigpIHRocm93
KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KICAg
ICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KICAgICAgICBzdGF0
aWMgdW5zaWduZWQgc2hvcnQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRl
ZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9h
dF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAg
ICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxpbnQ+IHsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAgIHN0YXRpYyBpbnQgbWlu
KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuICgtMjE0NzQ4MzY0Ny0xKTsgfQogICAgICAgIHN0
YXRpYyBpbnQgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDIxNDc0ODM2NDc7IH0KCiAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IGRpZ2l0czEwID0gOTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0
cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IHJhZGl4ID0gMjsKICAgICAgICBzdGF0aWMgaW50IGVwc2lsb24oKSB0aHJvdygpCiAgICAg
ICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyBpbnQgcm91bmRfZXJyb3IoKSB0aHJvdygp
CiAgICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv
bmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRf
TmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4g
PSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5v
cm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1f
bG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgaW50IGluZmluaXR5KCkgdGhyb3coKQogICAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KICAgICAgICBzdGF0aWMgaW50IHF1
aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9
CiAgICAgICAgc3RhdGljIGludCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KICAgICAgICBzdGF0aWMgaW50IGRlbm9ybV9taW4o
KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQoKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21v
ZHVsbyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAg
c3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJk
X3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2ln
bmVkIGludD4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1
ZTsKCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBtaW4oKSB0aHJvdygpCiAgICAgICAgeyBy
ZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWF4KCkgdGhyb3coKQogICAg
ICAgIHsgcmV0dXJuICgyMTQ3NDgzNjQ3ICogMlUgKyAxKTsgfQoKICAgICAgICBzdGF0aWMgY29u
c3QgaW50IGRpZ2l0cyA9IDMyOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5
OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsK
ICAgICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyBy
ZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgcm91bmRfZXJyb3IoKSB0aHJv
dygpCiAgICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l
eHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7
CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVp
ZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19O
YU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19k
ZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5v
cm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGluZmluaXR5KCkg
dGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0K
ICAgICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CiAgICAgICAgc3RhdGljIHVu
c2lnbmVkIGludCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGRl
bm9ybV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
aW50PigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IHRyYXBzID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUg
PSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5
bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVt
ZXJpY19saW1pdHM8bG9uZz4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxp
emVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGxvbmcgbWluKCkgdGhyb3coKQogICAgICAgIHsg
cmV0dXJuICgtMjE0NzQ4MzY0N0wtMSk7IH0KICAgICAgICBzdGF0aWMgbG9uZyBtYXgoKSB0aHJv
dygpCiAgICAgICAgeyByZXR1cm4gMjE0NzQ4MzY0N0w7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0
IGludCBkaWdpdHMgPSAzMTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAg
ICAgICBzdGF0aWMgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0K
ICAgICAgICBzdGF0aWMgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7IHJldHVy
biAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgICBzdGF0aWMgY29u
c3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhw
b25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZh
bHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAg
IHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNl
bnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7Cgog
ICAgICAgIHN0YXRpYyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PGxvbmc+KDApOyB9CiAgICAgICAgc3RhdGljIGxvbmcgcXVpZXRfTmFOKCkgdGhy
b3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CiAgICAgICAgc3Rh
dGljIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDxsb25nPigwKTsgfQogICAgICAgIHN0YXRpYyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygp
CiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KCiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBm
YWxzZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj
b25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwog
ICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25n
PiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAg
ICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g
MDsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1heCgpIHRocm93KCkKICAgICAgICB7
IHJldHVybiAoMjE0NzQ4MzY0N0wgKiAyVUwgKyAxKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IGRpZ2l0cyA9IDMyOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5Owog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAg
ICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0
dXJuIDA7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyByb3VuZF9lcnJvcigpIHRocm93
KCkKICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4
cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsK
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWll
dF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05h
TiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rl
bm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9y
bV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGluZmluaXR5KCkg
dGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9
CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAg
IHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CiAgICAgICAgc3RhdGlj
IHVuc2lnbmVkIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBs
b25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZz4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0g
dHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3Nf
YmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJv
dW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3Ry
dWN0IG51bWVyaWNfbGltaXRzPGxvbmcgbG9uZz4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGxvbmcgbG9uZyBtaW4oKSB0
aHJvdygpCiAgICAgICAgeyByZXR1cm4gKC05MjIzMzcyMDM2ODU0Nzc1ODA3TEwtMSk7IH0KICAg
ICAgICBzdGF0aWMgbG9uZyBsb25nIG1heCgpIHRocm93KCkKICAgICAgICB7IHJldHVybiA5MjIz
MzcyMDM2ODU0Nzc1ODA3TEw7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA2
MzsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTg7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRy
dWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGljIGxv
bmcgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgICBz
dGF0aWMgbG9uZyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7
IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu
dDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAg
ICAgc3RhdGljIGxvbmcgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgICAgc3RhdGljIGxvbmcgbG9uZyBxdWll
dF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigw
KTsgfQogICAgICAgIHN0YXRpYyBsb25nIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAg
ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgICAgc3RhdGlj
IGxvbmcgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PGxvbmcgbG9uZz4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5
ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnlu
ZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHls
ZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+
IHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAgIHN0YXRpYyB1bnNp
Z25lZCBsb25nIGxvbmcgbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAg
ICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG1heCgpIHRocm93KCkKICAgICAgICB7IHJldHVy
biAoOTIyMzM3MjAzNjg1NDc3NTgwN0xMICogMlVMTCArIDEpOyB9CgogICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgZGlnaXRzID0gNjQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9
IDE5OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0g
MjsKICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAg
ICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgcm91
bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5f
ZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAw
OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVu
b3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgdW5zaWduZWQg
bG9uZyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBs
b25nIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBsb25nIGxvbmc+KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBz
aWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmcgbG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGRl
bm9ybV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZyBsb25nPigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0
cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19i
ZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91
bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1
Y3QgbnVtZXJpY19saW1pdHM8ZmxvYXQ+IHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z
cGVjaWFsaXplZCA9IHRydWU7CgogICAgICAgIHN0YXRpYyBmbG9hdCBtaW4oKSB0aHJvdygpCiAg
ICAgICAgeyByZXR1cm4gMS4xNzU0OTQzNWUtMzhGOyB9CiAgICAgICAgc3RhdGljIGZsb2F0IG1h
eCgpIHRocm93KCkKICAgICAgICB7IHJldHVybiAzLjQwMjgyMzQ3ZSszOEY7IH0KCiAgICAgICAg
c3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAyNDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRp
Z2l0czEwID0gNzsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
cmFkaXggPSAyOwogICAgICAgIHN0YXRpYyBmbG9hdCBlcHNpbG9uKCkgdGhyb3coKQogICAgICAg
IHsgcmV0dXJuIDEuMTkyMDkyOTBlLTA3RjsgfQogICAgICAgIHN0YXRpYyBmbG9hdCByb3VuZF9l
cnJvcigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAxLjBmOyB9CgogICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWluX2V4cG9uZW50ID0gLTEyNTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1p
bl9leHBvbmVudDEwID0gLTM3OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50
ID0gMTI4OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAzODsKCiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZs
b2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGZs
b2F0IGluZmluaXR5KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0
PigwKTsgfQogICAgICAgIHN0YXRpYyBmbG9hdCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KDApOyB9CiAgICAgICAgc3RhdGljIGZsb2F0IHNp
Z25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KDApOyB9CiAgICAgICAgc3RhdGljIGZsb2F0IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgICAg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KDApOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5k
ZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBm
bG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsK
CiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxkb3VibGU+IHsKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAgIHN0YXRpYyBk
b3VibGUgbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDIuMjI1MDczODU4NTA3MjAxNGUt
MzA4OyB9CiAgICAgICAgc3RhdGljIGRvdWJsZSBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1
cm4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBk
aWdpdHMgPSA1MzsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTU7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
ZXhhY3QgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAg
ICBzdGF0aWMgZG91YmxlIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMi4yMjA0
NDYwNDkyNTAzMTMxZS0xNjsgfQogICAgICAgIHN0YXRpYyBkb3VibGUgcm91bmRfZXJyb3IoKSB0
aHJvdygpCiAgICAgICAgeyByZXR1cm4gMS4wOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWluX2V4cG9uZW50ID0gLTEwMjE7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25l
bnQxMCA9IC0zMDc7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAxMDI0
OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAzMDg7CgogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9k
ZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBkb3VibGUg
aW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPigw
KTsgfQogICAgICAgIHN0YXRpYyBkb3VibGUgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4oMCk7IH0KICAgICAgICBzdGF0aWMgZG91YmxlIHNp
Z25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91Ymxl
PigwKTsgfQogICAgICAgIHN0YXRpYyBkb3VibGUgZGVub3JtX21pbigpIHRocm93KCkKICAgICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KDApOyB9CgogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2Jv
dW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNl
OwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25z
dCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAg
fTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25nIGRvdWJsZT4gewog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAg
c3RhdGljIGxvbmcgZG91YmxlIG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAzLjM2MjEw
MzE0MzExMjA5MzUwNjI2ZS00OTMyTDsgfQogICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBtYXgo
KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMS4xODk3MzE0OTUzNTcyMzE3NjUwMmUrNDkzMkw7
IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA2NDsKICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IGRpZ2l0czEwID0gMTk7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2ln
bmVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAgICAgICBzdGF0
aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgZXBzaWxv
bigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAxLjA4NDIwMjE3MjQ4NTUwNDQzNDAxZS0xOUw7
IH0KICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAg
ICAgeyByZXR1cm4gMS4wTDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVu
dCA9IC0xNjM4MTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gLTQ5
MzE7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAxNjM4NDsKICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gNDkzMjsKCiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19z
aWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9z
dHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGlu
ZmluaXR5KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgZG91Ymxl
PigwKTsgfQogICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBxdWlldF9OYU4oKSB0aHJvdygpCiAg
ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBkb3VibGU+KDApOyB9CiAgICAgICAgc3Rh
dGljIGxvbmcgZG91YmxlIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8bG9uZyBkb3VibGU+KDApOyB9CiAgICAgICAgc3RhdGljIGxvbmcgZG91Ymxl
IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBk
b3VibGU+KDApOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNl
OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB0cmFwcyA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2Jl
Zm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3Vu
ZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCn0KIyAzOSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvc2J1Zl9pdGVyLmgiIDEgMwojIDQxICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwojIDEgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2N0eXBlLmgiIDEgMwojIDQyICIvdXNyL2xvY2FsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwojIDEgIi91c3IvbG9jYWwv
aW5jbHVkZS9nKystdjMvdHlwZWluZm8iIDEgMwojIDMzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr
LXYzL3R5cGVpbmZvIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9leGNlcHRpb24i
IDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAyIDMKCmV4dGVy
biAiQysrIiB7CgpuYW1lc3BhY2UgX19jeHhhYml2MQp7CiAgY2xhc3MgX19jbGFzc190eXBlX2lu
Zm87Cn0KIyA1MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My90eXBlaW5mbyIgMwpuYW1lc3Bh
Y2Ugc3RkCnsKICBjbGFzcyB0eXBlX2luZm8KICB7CiAgcHVibGljOgoKCgoKICAgIHZpcnR1YWwg
fnR5cGVfaW5mbygpOwoKICBwcml2YXRlOgoKICAgIHR5cGVfaW5mbyYgb3BlcmF0b3I9KGNvbnN0
IHR5cGVfaW5mbyYpOwogICAgdHlwZV9pbmZvKGNvbnN0IHR5cGVfaW5mbyYpOwoKICBwcm90ZWN0
ZWQ6CiAgICBjb25zdCBjaGFyICpfX25hbWU7CgogIHByb3RlY3RlZDoKICAgIGV4cGxpY2l0IHR5
cGVfaW5mbyhjb25zdCBjaGFyICpfX24pOiBfX25hbWUoX19uKSB7IH0KCiAgcHVibGljOgoKICAg
IGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdAogICAgeyByZXR1cm4gX19uYW1lOyB9CiMgODYgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvdHlwZWluZm8iIDMKICAgIGJvb2wgYmVmb3JlKGNvbnN0
IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0CiAgICB7IHJldHVybiBfX25hbWUgPCBfX2FyZy5fX25h
bWU7IH0KICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdAog
ICAgeyByZXR1cm4gX19uYW1lID09IF9fYXJnLl9fbmFtZTsgfQoKICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdAogICAgeyByZXR1cm4gIW9wZXJhdG9yPT0o
X19hcmcpOyB9CgoKICBwdWJsaWM6CgogICAgdmlydHVhbCBib29sIF9faXNfcG9pbnRlcl9wKCkg
Y29uc3Q7CgogICAgdmlydHVhbCBib29sIF9faXNfZnVuY3Rpb25fcCgpIGNvbnN0OwoKCgoKCgoK
ICAgIHZpcnR1YWwgYm9vbCBfX2RvX2NhdGNoKGNvbnN0IHR5cGVfaW5mbyAqX190aHJfdHlwZSwg
dm9pZCAqKl9fdGhyX29iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIF9f
b3V0ZXIpIGNvbnN0OwoKCiAgICB2aXJ0dWFsIGJvb2wgX19kb191cGNhc3QoY29uc3QgX19jeHhh
Yml2MTo6X19jbGFzc190eXBlX2luZm8gKl9fdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZvaWQgKipfX29ial9wdHIpIGNvbnN0OwogIH07CgogIGNsYXNzIGJhZF9jYXN0IDog
cHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfY2FzdCgpIHRocm93KCkgeyB9
CiAgICB2aXJ0dWFsIH5iYWRfY2FzdCgpIHRocm93KCk7CiAgfTsKCiAgY2xhc3MgYmFkX3R5cGVp
ZCA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFkX3R5cGVpZCAoKSB0aHJv
dygpIHsgfQogICAgdmlydHVhbCB+YmFkX3R5cGVpZCAoKSB0aHJvdygpOwogIH07Cn0KCn0KIyA0
MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMK
IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAxIDMKIyAz
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMwoKIyAxICIv
dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91
c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0
ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190
aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsK
CiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xv
Z2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJv
cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNv
bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFy
KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsK
CiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk
CiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv
d19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRl
cmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWls
dXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyAzMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF9hbGdvYmFzZS5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9hbGxvYy5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92
ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25z
dHJ1Y3QuaCIgMSAzCiMgMzYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVj
dG9yLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdW5pbml0
aWFsaXplZC5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92
ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0
b3IuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9y
LmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jh
c2VfZnVuY3MuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
dmVjdG9yLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4
Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhj
ZXB0LmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVz
LmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQu
aCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2
b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Ro
cm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoK
CiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog
IF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93
X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVu
Z3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5n
ZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0
IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9f
cyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7Cgog
IHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9p
ZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDM2ICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAxIDMKIyAzNyAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsK
IyA0OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMwp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yLCBib29sIF9Jc1N0YXRpYz4KY2xhc3Mg
X1ZlY3Rvcl9hbGxvY19iYXNlIHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3Ry
YWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9y
X3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9N
X2RhdGFfYWxsb2NhdG9yOyB9CgogIF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3Jf
dHlwZSYgX19hKQogICAgOiBfTV9kYXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgwKSwgX01f
ZmluaXNoKDApLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKQogIHt9Cgpwcm90ZWN0ZWQ6CiAgYWxsb2Nh
dG9yX3R5cGUgX01fZGF0YV9hbGxvY2F0b3I7CiAgX1RwKiBfTV9zdGFydDsKICBfVHAqIF9NX2Zp
bmlzaDsKICBfVHAqIF9NX2VuZF9vZl9zdG9yYWdlOwoKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVf
dCBfX24pCiAgICB7IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZShfX24pOyB9CiAg
dm9pZCBfTV9kZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBpZiAoX19wKSBf
TV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgX19uKTsgfQp9OwoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1Rw
LCBfQWxsb2NhdG9yLCB0cnVlPiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190
cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRv
cl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBh
bGxvY2F0b3JfdHlwZSgpOyB9CgogIF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3Jf
dHlwZSYpCiAgICA6IF9NX3N0YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdl
KDApCiAge30KCnByb3RlY3RlZDoKICBfVHAqIF9NX3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwog
IF9UcCogX01fZW5kX29mX3N0b3JhZ2U7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0
czxfVHAsIF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZSBfQWxsb2NfdHlwZTsKICBfVHAqIF9NX2Fs
bG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoX19u
KTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsgX0Fs
bG9jX3R5cGU6OmRlYWxsb2NhdGUoX19wLCBfX24pO30KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9WZWN0b3JfYmFzZQogIDogcHVibGljIF9WZWN0b3JfYWxs
b2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9j
X3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX1ZlY3Rv
cl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9B
bGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFz
ZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlw
ZTsKCiAgX1ZlY3Rvcl9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19h
KSB7fQogIF9WZWN0b3JfYmFzZShzaXplX3QgX19uLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19h
KSA6IF9CYXNlKF9fYSkgewogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01f
ZmluaXNoID0gX01fc3RhcnQ7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19u
OwogIH0KCiAgfl9WZWN0b3JfYmFzZSgpIHsgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5k
X29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2MgPSBhbGxvY2F0b3I8X1RwPiA+CmNsYXNzIHZlY3RvciA6IHByb3RlY3RlZCBfVmVj
dG9yX2Jhc2U8X1RwLCBfQWxsb2M+CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCnByaXZhdGU6CiAgdHlwZWRlZiBfVmVjdG9yX2Jhc2U8
X1RwLCBfQWxsb2M+IF9CYXNlOwogIHR5cGVkZWYgdmVjdG9yPF9UcCwgX0FsbG9jPiB2ZWN0b3Jf
dHlwZTsKcHVibGljOgogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2YWx1ZV90
eXBlKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsK
ICB0eXBlZGVmIF9fbm9ybWFsX2l0ZXJhdG9yPHBvaW50ZXIsIHZlY3Rvcl90eXBlPiBpdGVyYXRv
cjsKICB0eXBlZGVmIF9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0X3BvaW50ZXIsIHZlY3Rvcl90eXBl
PiBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICB0eXBl
ZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHNpemVfdCBz
aXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICB0eXBlZGVm
IHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0
b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0
b3IoKTsgfQoKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0
X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiBy
ZXZlcnNlX2l0ZXJhdG9yOwoKcHJvdGVjdGVkOgogIHVzaW5nIF9CYXNlOjpfTV9hbGxvY2F0ZTsK
ICB1c2luZyBfQmFzZTo6X01fZGVhbGxvY2F0ZTsKICB1c2luZyBfQmFzZTo6X01fc3RhcnQ7CiAg
dXNpbmcgX0Jhc2U6Ol9NX2ZpbmlzaDsKICB1c2luZyBfQmFzZTo6X01fZW5kX29mX3N0b3JhZ2U7
Cgpwcm90ZWN0ZWQ6CiAgdm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNv
bnN0IF9UcCYgX194KTsKICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbik7
CgpwdWJsaWM6CiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBpdGVyYXRvciAoX01fc3RhcnQp
OyB9CiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfaXRl
cmF0b3IgKF9NX3N0YXJ0KTsgfQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9yIChf
TV9maW5pc2gpOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3Rf
aXRlcmF0b3IgKF9NX2ZpbmlzaCk7IH0KCiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKQogICAg
eyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJh
dG9yIHJiZWdpbigpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVu
ZCgpKTsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpCiAgICB7IHJldHVybiByZXZlcnNlX2l0
ZXJhdG9yKGJlZ2luKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QK
ICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCiAgc2l6ZV90
eXBlIHNpemUoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7
IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90eXBlKC0x
KSAvIHNpemVvZihfVHApOyB9CiAgc2l6ZV90eXBlIGNhcGFjaXR5KCkgY29uc3QKICAgIHsgcmV0
dXJuIHNpemVfdHlwZShjb25zdF9pdGVyYXRvcihfTV9lbmRfb2Zfc3RvcmFnZSkgLSBiZWdpbigp
KTsgfQogIGJvb2wgZW1wdHkoKSBjb25zdAogICAgeyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsg
fQoKICByZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSB7IHJldHVybiAqKGJlZ2lu
KCkgKyBfX24pOyB9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikg
Y29uc3QgeyByZXR1cm4gKihiZWdpbigpICsgX19uKTsgfQoKICB2b2lkIF9NX3JhbmdlX2NoZWNr
KHNpemVfdHlwZSBfX24pIGNvbnN0IHsKICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQogICAg
ICBfX3Rocm93X291dF9vZl9yYW5nZSgidmVjdG9yIik7CiAgfQoKICByZWZlcmVuY2UgYXQoc2l6
ZV90eXBlIF9fbikKICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19u
XTsgfQogIGNvbnN0X3JlZmVyZW5jZSBhdChzaXplX3R5cGUgX19uKSBjb25zdAogICAgeyBfTV9y
YW5nZV9jaGVjayhfX24pOyByZXR1cm4gKCp0aGlzKVtfX25dOyB9CgogIGV4cGxpY2l0IHZlY3Rv
cihjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jh
c2UoX19hKSB7fQoKICB2ZWN0b3Ioc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlLAog
ICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAg
IDogX0Jhc2UoX19uLCBfX2EpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9u
KF9NX3N0YXJ0LCBfX24sIF9fdmFsdWUpOyB9CgogIGV4cGxpY2l0IHZlY3RvcihzaXplX3R5cGUg
X19uKQogICAgOiBfQmFzZShfX24sIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IF9NX2ZpbmlzaCA9
IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0LCBfX24sIF9UcCgpKTsgfQoKICB2ZWN0b3Io
Y29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KQogICAgOiBfQmFzZShfX3guc2l6ZSgpLCBf
X3guZ2V0X2FsbG9jYXRvcigpKQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHko
X194LmJlZ2luKCksIF9feC5lbmQoKSwgX01fc3RhcnQpOyB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcmF0b3I+CiAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0
ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9j
YXRvcl90eXBlKCkpIDogX0Jhc2UoX19hKSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRl
Z2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2luaXRpYWxp
emVfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNs
YXNzIF9JbnRlZ2VyPgogIHZvaWQgX01faW5pdGlhbGl6ZV9hdXgoX0ludGVnZXIgX19uLCBfSW50
ZWdlciBfX3ZhbHVlLCBfX3RydWVfdHlwZSkgewogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShf
X24pOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgIF9NX2Zpbmlz
aCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0LCBfX24sIF9fdmFsdWUpOwogIH0KCiAg
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01faW5pdGlhbGl6ZV9hdXgo
X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICBfTV9yYW5nZV9pbml0aWFsaXplKF9f
Zmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgfQoKICB+dmVj
dG9yKCkgeyBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOyB9CgogIHZlY3RvcjxfVHAsIF9B
bGxvYz4mIG9wZXJhdG9yPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpOwogIHZvaWQg
cmVzZXJ2ZShzaXplX3R5cGUgX19uKSB7CiAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAg
ICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgICAgcG9pbnRlciBfX3Rt
cCA9IF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbiwgX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAg
IGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3Rh
cnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fdG1w
OwogICAgICBfTV9maW5pc2ggPSBfX3RtcCArIF9fb2xkX3NpemU7CiAgICAgIF9NX2VuZF9vZl9z
dG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgICB9CiAgfQoKCgoKCgogIHZvaWQgYXNzaWduKHNp
emVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpIHsgX01fZmlsbF9hc3NpZ24oX19uLCBfX3Zh
bCk7IH0KICB2b2lkIF9NX2ZpbGxfYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192
YWwpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBhc3NpZ24oX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVm
IHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3Jh
bDsKICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsK
ICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRj
aChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgIHsgX01fZmls
bF9hc3NpZ24oKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7IH0KCiAgdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXI+CiAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2Zp
cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAgeyBfTV9hc3NpZ25fYXV4
KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfSW5wdXRJ
dGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJh
dG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9y
X3RhZyk7CgogIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9CiAgY29uc3Rf
cmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KICByZWZlcmVuY2Ug
YmFjaygpIHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkg
Y29uc3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CgogIHZvaWQgcHVzaF9iYWNrKGNvbnN0IF9U
cCYgX194KSB7CiAgICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICAg
IGNvbnN0cnVjdChfTV9maW5pc2gsIF9feCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAg
ZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gpOwogIH0KICB2b2lkIHB1c2hfYmFj
aygpIHsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgY29u
c3RydWN0KF9NX2ZpbmlzaCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAg
ICBfTV9pbnNlcnRfYXV4KGVuZCgpKTsKICB9CiAgdm9pZCBzd2FwKHZlY3RvcjxfVHAsIF9BbGxv
Yz4mIF9feCkgewogICAgc3RkOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwogICAgc3Rk
Ojpzd2FwKF9NX2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7CiAgICBzdGQ6OnN3YXAoX01fZW5kX29m
X3N0b3JhZ2UsIF9feC5fTV9lbmRfb2Zfc3RvcmFnZSk7CiAgfQoKICBpdGVyYXRvciBpbnNlcnQo
aXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpIHsKICAgIHNpemVfdHlwZSBfX24g
PSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0
b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkgewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNo
LCBfX3gpOwogICAgICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0
X2F1eChpdGVyYXRvcihfX3Bvc2l0aW9uKSwgX194KTsKICAgIHJldHVybiBiZWdpbigpICsgX19u
OwogIH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgc2l6ZV90
eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9l
bmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKSB7CiAgICAgIGNvbnN0cnVjdChf
TV9maW5pc2gpOwogICAgICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5z
ZXJ0X2F1eChpdGVyYXRvcihfX3Bvc2l0aW9uKSk7CiAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsK
ICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChpdGVy
YXRvciBfX3BvcywgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0
KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0lu
dGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19maXJzdCwg
X19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAg
dm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0lu
dGVnZXIgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCiAgICB7
IF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCAoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFsKTsgfQoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0
Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0
b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fZmFsc2VfdHlwZSkgewogICAgX01fcmFuZ2VfaW5zZXJ0KF9fcG9zLCBfX2ZpcnN0LCBf
X2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogIH0KCiAgdm9pZCBpbnNlcnQg
KGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCkKICAgIHsgX01f
ZmlsbF9pbnNlcnQoX19wb3MsIF9fbiwgX194KTsgfQoKICB2b2lkIF9NX2ZpbGxfaW5zZXJ0IChp
dGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpOwoKICB2b2lkIHBv
cF9iYWNrKCkgewogICAgLS1fTV9maW5pc2g7CiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7CiAgfQog
IGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAgIGlmIChfX3Bvc2l0aW9u
ICsgMSAhPSBlbmQoKSkKICAgICAgY29weShfX3Bvc2l0aW9uICsgMSwgZW5kKCksIF9fcG9zaXRp
b24pOwogICAgLS1fTV9maW5pc2g7CiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7CiAgICByZXR1cm4g
X19wb3NpdGlvbjsKICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0
b3IgX19sYXN0KSB7CiAgICBpdGVyYXRvciBfX2koY29weShfX2xhc3QsIGVuZCgpLCBfX2ZpcnN0
KSk7CiAgICBkZXN0cm95KF9faSwgZW5kKCkpOwogICAgX01fZmluaXNoID0gX01fZmluaXNoIC0g
KF9fbGFzdCAtIF9fZmlyc3QpOwogICAgcmV0dXJuIF9fZmlyc3Q7CiAgfQoKICB2b2lkIHJlc2l6
ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29uc3QgX1RwJiBfX3gpIHsKICAgIGlmIChfX25ld19z
aXplIDwgc2l6ZSgpKQogICAgICBlcmFzZShiZWdpbigpICsgX19uZXdfc2l6ZSwgZW5kKCkpOwog
ICAgZWxzZQogICAgICBpbnNlcnQoZW5kKCksIF9fbmV3X3NpemUgLSBzaXplKCksIF9feCk7CiAg
fQogIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplKSB7IHJlc2l6ZShfX25ld19zaXpl
LCBfVHAoKSk7IH0KICB2b2lkIGNsZWFyKCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7IH0KCnBy
b3RlY3RlZDoKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgcG9pbnRlciBf
TV9hbGxvY2F0ZV9hbmRfY29weShzaXplX3R5cGUgX19uLCBfRm9yd2FyZEl0ZXJhdG9yIF9fZmly
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyYXRvciBfX2xhc3QpCiAgewogICAgcG9pbnRlciBfX3Jlc3VsdCA9IF9NX2FsbG9jYXRl
KF9fbik7CiAgICB0cnkgewogICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0
LCBfX3Jlc3VsdCk7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KICAgIGNhdGNoKC4uLikg
eyBfTV9kZWFsbG9jYXRlKF9fcmVzdWx0LCBfX24pOyB0aHJvdzsgfTsKICB9CgogIHRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0lucHV0
SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0
b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgewogICAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICBwdXNoX2JhY2soKl9fZmlyc3QpOwogIH0KCgogIHRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5pdGlhbGl6
ZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9G
b3J3YXJkSXRlcmF0b3IgX19sYXN0LCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICB7CiAgICBzaXpl
X3R5cGUgX19uID0gMDsKICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAgIF9N
X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3Rh
cnQgKyBfX247CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19s
YXN0LCBfTV9zdGFydCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAg
dm9pZCBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAg
ICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAog
ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJ
dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90
YWcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApv
cGVyYXRvcj09KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9U
cCwgX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIF9feC5zaXplKCkgPT0gX195LnNpemUoKSAmJgog
ICAgICAgICBlcXVhbChfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfX3kuYmVnaW4oKSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I8KGNv
bnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYg
X195KQp7CiAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3gu
ZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3ku
ZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lk
IHN3YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kp
CnsKICBfX3guc3dhcChfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+
CmlubGluZSBib29sCm9wZXJhdG9yIT0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBj
b25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRv
cj4oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxs
b2M+JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPD0oY29uc3QgdmVjdG9yPF9UcCwgX0Fs
bG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShf
X3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBi
b29sCm9wZXJhdG9yPj0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0
b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZlY3RvcjxfVHAsX0FsbG9jPiYKdmVjdG9yPF9U
cCxfQWxsb2M+OjpvcGVyYXRvcj0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KQp7CiAg
aWYgKCZfX3ggIT0gdGhpcykgewogICAgY29uc3Qgc2l6ZV90eXBlIF9feGxlbiA9IF9feC5zaXpl
KCk7CiAgICBpZiAoX194bGVuID4gY2FwYWNpdHkoKSkgewogICAgICBwb2ludGVyIF9fdG1wID0g
X01fYWxsb2NhdGVfYW5kX2NvcHkoX194bGVuLCBfX3guYmVnaW4oKSwgX194LmVuZCgpKTsKICAg
ICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9z
dGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX190
bXA7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX3hsZW47CiAgICB9CiAg
ICBlbHNlIGlmIChzaXplKCkgPj0gX194bGVuKSB7CiAgICAgIGl0ZXJhdG9yIF9faShjb3B5KF9f
eC5iZWdpbigpLCBfX3guZW5kKCksIGJlZ2luKCkpKTsKICAgICAgZGVzdHJveShfX2ksIGVuZCgp
KTsKICAgIH0KICAgIGVsc2UgewogICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guYmVnaW4oKSAr
IHNpemUoKSwgX01fc3RhcnQpOwogICAgICB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCkg
KyBzaXplKCksIF9feC5lbmQoKSwgX01fZmluaXNoKTsKICAgIH0KICAgIF9NX2ZpbmlzaCA9IF9N
X3N0YXJ0ICsgX194bGVuOwogIH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9maWxsX2Fzc2ln
bihzaXplX3QgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3ZhbCkKewogIGlmIChfX24gPiBjYXBh
Y2l0eSgpKSB7CiAgICB2ZWN0b3I8X1RwLCBfQWxsb2M+IF9fdG1wKF9fbiwgX192YWwsIGdldF9h
bGxvY2F0b3IoKSk7CiAgICBfX3RtcC5zd2FwKCp0aGlzKTsKICB9CiAgZWxzZSBpZiAoX19uID4g
c2l6ZSgpKSB7CiAgICBmaWxsKGJlZ2luKCksIGVuZCgpLCBfX3ZhbCk7CiAgICBfTV9maW5pc2gg
PSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9maW5pc2gsIF9fbiAtIHNpemUoKSwgX192YWwpOwog
IH0KICBlbHNlCiAgICBlcmFzZShmaWxsX24oYmVnaW4oKSwgX19uLCBfX3ZhbCksIGVuZCgpKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcj4Kdm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fYXV4KF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICBpdGVyYXRvciBfX2N1cihiZWdp
bigpKTsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fY3VyICE9IGVuZCgpOyArK19f
Y3VyLCArK19fZmlyc3QpCiAgICAqX19jdXIgPSAqX19maXJzdDsKICBpZiAoX19maXJzdCA9PSBf
X2xhc3QpCiAgICBlcmFzZShfX2N1ciwgZW5kKCkpOwogIGVsc2UKICAgIGluc2VydChlbmQoKSwg
X19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9N
X2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsK
ICBzaXplX3R5cGUgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4p
OwoKICBpZiAoX19sZW4gPiBjYXBhY2l0eSgpKSB7CiAgICBwb2ludGVyIF9fdG1wKF9NX2FsbG9j
YXRlX2FuZF9jb3B5KF9fbGVuLCBfX2ZpcnN0LCBfX2xhc3QpKTsKICAgIGRlc3Ryb3koX01fc3Rh
cnQsIF9NX2ZpbmlzaCk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3Rv
cmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICBfTV9lbmRfb2Zfc3Rv
cmFnZSA9IF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgX19sZW47CiAgfQogIGVsc2UgaWYgKHNpemUo
KSA+PSBfX2xlbikgewogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKGNvcHkoX19maXJzdCwgX19s
YXN0LCBfTV9zdGFydCkpOwogICAgZGVzdHJveShfX25ld19maW5pc2gsIGVuZCgpKTsKICAgIF9N
X2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaC5iYXNlKCk7CiAgfQogIGVsc2UgewogICAgX0ZvcndhcmRJ
dGVyIF9fbWlkID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWQsIHNpemUoKSk7CiAgICBjb3B5
KF9fZmlyc3QsIF9fbWlkLCBfTV9zdGFydCk7CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVk
X2NvcHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNoKTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9BbGxvYz4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4
KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KQp7CiAgaWYgKF9NX2ZpbmlzaCAh
PSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5p
c2ggLSAxKSk7CiAgICArK19NX2ZpbmlzaDsKICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgIGNv
cHlfYmFja3dhcmQoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoIC0gMiksIGl0ZXJhdG9y
KF9NX2ZpbmlzaC0gMSkpOwogICAgKl9fcG9zaXRpb24gPSBfX3hfY29weTsKICB9CiAgZWxzZSB7
CiAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgIGNvbnN0IHNpemVf
dHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgIT0gMCA/IDIgKiBfX29sZF9zaXplIDogMTsKICAgIGl0
ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7CiAgICBpdGVyYXRvciBfX25l
d19maW5pc2goX19uZXdfc3RhcnQpOwogICAgdHJ5IHsKICAgICAgX19uZXdfZmluaXNoID0gdW5p
bml0aWFsaXplZF9jb3B5KGl0ZXJhdG9yKF9NX3N0YXJ0KSwgX19wb3NpdGlvbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N0YXJ0KTsKICAgICAgY29uc3Ry
dWN0KF9fbmV3X2ZpbmlzaC5iYXNlKCksIF9feCk7CiAgICAgICsrX19uZXdfZmluaXNoOwogICAg
ICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3Io
X01fZmluaXNoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3
X2ZpbmlzaCk7CiAgICB9CiAgICBjYXRjaCguLi4pIHsgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19u
ZXdfZmluaXNoKSwgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydC5iYXNlKCksX19sZW4pKTsgdGhy
b3c7IH07CgogICAgZGVzdHJveShiZWdpbigpLCBlbmQoKSk7CiAgICBfTV9kZWFsbG9jYXRlKF9N
X3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX19u
ZXdfc3RhcnQuYmFzZSgpOwogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAg
IF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQuYmFzZSgpICsgX19sZW47CiAgfQp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9j
Pjo6X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uKQp7CiAgaWYgKF9NX2ZpbmlzaCAh
PSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5p
c2ggLSAxKSk7CiAgICArK19NX2ZpbmlzaDsKICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwg
aXRlcmF0b3IoX01fZmluaXNoIC0gMiksCiAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKF9NX2Zp
bmlzaCAtIDEpKTsKICAgICpfX3Bvc2l0aW9uID0gX1RwKCk7CiAgfQogIGVsc2UgewogICAgY29u
c3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICBjb25zdCBzaXplX3R5cGUgX19s
ZW4gPSBfX29sZF9zaXplICE9IDAgPyAyICogX19vbGRfc2l6ZSA6IDE7CiAgICBwb2ludGVyIF9f
bmV3X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19sZW4pOwogICAgcG9pbnRlciBfX25ld19maW5pc2gg
PSBfX25ld19zdGFydDsKICAgIHRyeSB7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6
ZWRfY29weShpdGVyYXRvcihfTV9zdGFydCksIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zdGFydCk7CiAgICAgIGNvbnN0cnVjdChfX25l
d19maW5pc2gpOwogICAgICArK19fbmV3X2ZpbmlzaDsKICAgICAgX19uZXdfZmluaXNoID0gdW5p
bml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19maW5pc2gpOwogICAgfQogICAg
Y2F0Y2goLi4uKSB7IChkZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIF9NX2RlYWxs
b2NhdGUoX19uZXdfc3RhcnQsX19sZW4pKTsgdGhyb3c7IH07CgogICAgZGVzdHJveShiZWdpbigp
LCBlbmQoKSk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAt
IF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICBfTV9maW5pc2ggPSBf
X25ld19maW5pc2g7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47
CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgdmVjdG9yPF9U
cCwgX0FsbG9jPjo6X01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBl
IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAm
IF9feCkKewogIGlmIChfX24gIT0gMCkgewogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3Rv
cmFnZSAtIF9NX2ZpbmlzaCkgPj0gX19uKSB7CiAgICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAg
ICAgY29uc3Qgc2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRpb247CiAg
ICAgIGl0ZXJhdG9yIF9fb2xkX2ZpbmlzaChfTV9maW5pc2gpOwogICAgICBpZiAoX19lbGVtc19h
ZnRlciA+IF9fbikgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24s
IF9NX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAg
IGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5p
c2gpOwogICAgICAgIGZpbGwoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIF9fbiwgX194X2NvcHkp
OwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2Zp
bmlzaCwgX19uIC0gX19lbGVtc19hZnRlciwgX194X2NvcHkpOwogICAgICAgIF9NX2ZpbmlzaCAr
PSBfX24gLSBfX2VsZW1zX2FmdGVyOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0
aW9uLCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fZWxl
bXNfYWZ0ZXI7CiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9feF9jb3B5
KTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9z
aXplID0gc2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICsg
bWF4KF9fb2xkX3NpemUsIF9fbik7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9j
YXRlKF9fbGVuKSk7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAg
ICAgIHRyeSB7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGJlZ2lu
KCksIF9fcG9zaXRpb24sIF9fbmV3X3N0YXJ0KTsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmlu
aXRpYWxpemVkX2ZpbGxfbihfX25ld19maW5pc2gsIF9fbiwgX194KTsKICAgICAgICBfX25ld19m
aW5pc2gKICAgICAgICAgID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBf
X25ld19maW5pc2gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikgeyAoZGVzdHJveShfX25ld19z
dGFydCxfX25ld19maW5pc2gpLCBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSxfX2xl
bikpOyB0aHJvdzsgfTsKCiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAg
IF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwog
ICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0LmJhc2UoKTsKICAgICAgX01fZmluaXNoID0gX19u
ZXdfZmluaXNoLmJhc2UoKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5i
YXNlKCkgKyBfX2xlbjsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B
bGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgp2b2lkCnZlY3RvcjxfVHAsIF9B
bGxvYz46Ol9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBmb3IgKCA7
IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpIHsKICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9z
LCAqX19maXJzdCk7CiAgICArK19fcG9zOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kdm9pZAp2ZWN0b3I8
X1RwLCBfQWxsb2M+OjpfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRv
cl90YWcpCnsKICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIHNpemVfdHlwZSBfX24gPSAw
OwogICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24pOwogICAgaWYgKHNpemVfdHlwZShf
TV9lbmRfb2Zfc3RvcmFnZSAtIF9NX2ZpbmlzaCkgPj0gX19uKSB7CiAgICAgIGNvbnN0IHNpemVf
dHlwZSBfX2VsZW1zX2FmdGVyID0gZW5kKCkgLSBfX3Bvc2l0aW9uOwogICAgICBpdGVyYXRvciBf
X29sZF9maW5pc2goX01fZmluaXNoKTsKICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIgPiBfX24pIHsK
ICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gsIF9N
X2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fbjsKICAgICAgICBjb3B5X2JhY2t3YXJk
KF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCAtIF9fbiwgX19vbGRfZmluaXNoKTsKICAgICAgICBj
b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3NpdGlvbik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAg
ICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShf
X21pZCwgX19lbGVtc19hZnRlcik7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fbWlkLCBf
X2xhc3QsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0
ZXI7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwg
X01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsKICAgICAgICBj
b3B5KF9fZmlyc3QsIF9fbWlkLCBfX3Bvc2l0aW9uKTsKICAgICAgfQogICAgfQogICAgZWxzZSB7
CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgICBjb25zdCBz
aXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9fbik7CiAgICAg
IGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7CiAgICAgIGl0ZXJhdG9y
IF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICAgIHRyeSB7CiAgICAgICAgX19uZXdfZmlu
aXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0ZXJhdG9yKF9NX3N0YXJ0KSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwog
ICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3Qs
IF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgX19uZXdfZmluaXNoCiAgICAgICAgICA9IHVuaW5pdGlh
bGl6ZWRfY29weShfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2gpLCBfX25ld19maW5pc2gp
OwogICAgICB9CiAgICAgIGNhdGNoKC4uLikgeyAoZGVzdHJveShfX25ld19zdGFydCxfX25ld19m
aW5pc2gpLCBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSxfX2xlbikpOyB0aHJvdzsg
fTsKCiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2Nh
dGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFy
dCA9IF9fbmV3X3N0YXJ0LmJhc2UoKTsKICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJh
c2UoKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xl
bjsKICAgIH0KICB9Cn0KCn0KIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9i
dmVjdG9yLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2J2
ZWN0b3IuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCnN0YXRpYyBjb25zdCBpbnQgX19XT1JEX0JJVCA9
IGludCg4KnNpemVvZih1bnNpZ25lZCBpbnQpKTsKCnN0cnVjdCBfQml0X3JlZmVyZW5jZSB7CiAg
dW5zaWduZWQgaW50KiBfTV9wOwogIHVuc2lnbmVkIGludCBfTV9tYXNrOwogIF9CaXRfcmVmZXJl
bmNlKHVuc2lnbmVkIGludCogX194LCB1bnNpZ25lZCBpbnQgX195KQogICAgOiBfTV9wKF9feCks
IF9NX21hc2soX195KSB7fQoKcHVibGljOgogIF9CaXRfcmVmZXJlbmNlKCkgOiBfTV9wKDApLCBf
TV9tYXNrKDApIHt9CiAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEoISgqX01fcCAm
IF9NX21hc2spKTsgfQogIF9CaXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0oYm9vbCBfX3gpCiAgewog
ICAgaWYgKF9feCkgKl9NX3AgfD0gX01fbWFzazsKICAgIGVsc2UgKl9NX3AgJj0gfl9NX21hc2s7
CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9CaXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0oY29uc3Qg
X0JpdF9yZWZlcmVuY2UmIF9feCkKICAgIHsgcmV0dXJuICp0aGlzID0gYm9vbChfX3gpOyB9CiAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpIGNvbnN0CiAgICB7IHJl
dHVybiBib29sKCp0aGlzKSA9PSBib29sKF9feCk7IH0KICBib29sIG9wZXJhdG9yPChjb25zdCBf
Qml0X3JlZmVyZW5jZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gIWJvb2woKnRoaXMpICYmIGJv
b2woX194KTsKICB9CiAgdm9pZCBmbGlwKCkgeyAqX01fcCBePSBfTV9tYXNrOyB9Cn07Cgppbmxp
bmUgdm9pZCBzd2FwKF9CaXRfcmVmZXJlbmNlIF9feCwgX0JpdF9yZWZlcmVuY2UgX195KQp7CiAg
Ym9vbCBfX3RtcCA9IF9feDsKICBfX3ggPSBfX3k7CiAgX195ID0gX190bXA7Cn0KCnN0cnVjdCBf
Qml0X2l0ZXJhdG9yX2Jhc2UgOiBwdWJsaWMgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcjxib29sLCBw
dHJkaWZmX3Q+CnsKICB1bnNpZ25lZCBpbnQqIF9NX3A7CiAgdW5zaWduZWQgaW50IF9NX29mZnNl
dDsKCiAgX0JpdF9pdGVyYXRvcl9iYXNlKHVuc2lnbmVkIGludCogX194LCB1bnNpZ25lZCBpbnQg
X195KQogICAgOiBfTV9wKF9feCksIF9NX29mZnNldChfX3kpIHt9CgogIHZvaWQgX01fYnVtcF91
cCgpIHsKICAgIGlmIChfTV9vZmZzZXQrKyA9PSBfX1dPUkRfQklUIC0gMSkgewogICAgICBfTV9v
ZmZzZXQgPSAwOwogICAgICArK19NX3A7CiAgICB9CiAgfQogIHZvaWQgX01fYnVtcF9kb3duKCkg
ewogICAgaWYgKF9NX29mZnNldC0tID09IDApIHsKICAgICAgX01fb2Zmc2V0ID0gX19XT1JEX0JJ
VCAtIDE7CiAgICAgIC0tX01fcDsKICAgIH0KICB9CgogIHZvaWQgX01faW5jcihwdHJkaWZmX3Qg
X19pKSB7CiAgICBkaWZmZXJlbmNlX3R5cGUgX19uID0gX19pICsgX01fb2Zmc2V0OwogICAgX01f
cCArPSBfX24gLyBfX1dPUkRfQklUOwogICAgX19uID0gX19uICUgX19XT1JEX0JJVDsKICAgIGlm
IChfX24gPCAwKSB7CiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbiArIF9fV09S
RF9CSVQ7CiAgICAgIC0tX01fcDsKICAgIH0gZWxzZQogICAgICBfTV9vZmZzZXQgPSAodW5zaWdu
ZWQgaW50KSBfX247CiAgfQoKICBib29sIG9wZXJhdG9yPT0oY29uc3QgX0JpdF9pdGVyYXRvcl9i
YXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wID09IF9faS5fTV9wICYmIF9NX29mZnNl
dCA9PSBfX2kuX01fb2Zmc2V0OwogIH0KICBib29sIG9wZXJhdG9yPChjb25zdCBfQml0X2l0ZXJh
dG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9NX3AgPCBfX2kuX01fcCB8fCAoX01f
cCA9PSBfX2kuX01fcCAmJiBfTV9vZmZzZXQgPCBfX2kuX01fb2Zmc2V0KTsKICB9CiAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1
cm4gISgqdGhpcyA9PSBfX2kpOwogIH0KICBib29sIG9wZXJhdG9yPihjb25zdCBfQml0X2l0ZXJh
dG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9faSA8ICp0aGlzOwogIH0KICBib29s
IG9wZXJhdG9yPD0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJl
dHVybiAhKF9faSA8ICp0aGlzKTsKICB9CiAgYm9vbCBvcGVyYXRvcj49KGNvbnN0IF9CaXRfaXRl
cmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gISgqdGhpcyA8IF9faSk7CiAgfQp9
OwoKaW5saW5lIHB0cmRpZmZfdApvcGVyYXRvci0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBf
X3gsIGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX195KSB7CiAgcmV0dXJuIF9fV09SRF9CSVQg
KiAoX194Ll9NX3AgLSBfX3kuX01fcCkgKyBfX3guX01fb2Zmc2V0IC0gX195Ll9NX29mZnNldDsK
fQoKCnN0cnVjdCBfQml0X2l0ZXJhdG9yIDogcHVibGljIF9CaXRfaXRlcmF0b3JfYmFzZQp7CiAg
dHlwZWRlZiBfQml0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiBfQml0X3JlZmVyZW5j
ZSogcG9pbnRlcjsKICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgaXRlcmF0b3I7CgogIF9CaXRfaXRl
cmF0b3IoKSA6IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7fQogIF9CaXRfaXRlcmF0b3IodW5z
aWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9CaXRfaXRlcmF0b3JfYmFz
ZShfX3gsIF9feSkge30KCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIHJl
ZmVyZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQpOyB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yKyso
KSB7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9w
ZXJhdG9yKysoaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF91
cCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3ItLSgpIHsKICAg
IF9NX2J1bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBvcGVyYXRv
ci0tKGludCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfZG93bigp
OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNl
X3R5cGUgX19pKSB7CiAgICBfTV9pbmNyKF9faSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0
ZXJhdG9yJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgICp0aGlzICs9IC1f
X2k7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNl
X3R5cGUgX19pKSBjb25zdCB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJu
IF9fdG1wICs9IF9faTsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBf
X2kpIGNvbnN0IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAg
LT0gX19pOwogIH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkg
eyByZXR1cm4gKigqdGhpcyArIF9faSk7IH0KfTsKCmlubGluZSBfQml0X2l0ZXJhdG9yCm9wZXJh
dG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfQml0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9f
eCArIF9fbjsgfQoKCnN0cnVjdCBfQml0X2NvbnN0X2l0ZXJhdG9yIDogcHVibGljIF9CaXRfaXRl
cmF0b3JfYmFzZQp7CiAgdHlwZWRlZiBib29sIHJlZmVyZW5jZTsKICB0eXBlZGVmIGJvb2wgY29u
c3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgYm9vbCogcG9pbnRlcjsKICB0eXBlZGVmIF9C
aXRfY29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CgogIF9CaXRfY29uc3RfaXRlcmF0b3Io
KSA6IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7fQogIF9CaXRfY29uc3RfaXRlcmF0b3IodW5z
aWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9CaXRfaXRlcmF0b3JfYmFz
ZShfX3gsIF9feSkge30KICBfQml0X2NvbnN0X2l0ZXJhdG9yKGNvbnN0IF9CaXRfaXRlcmF0b3Im
IF9feCkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feC5fTV9wLCBfX3guX01fb2Zmc2V0KSB7
fQoKICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAgcmV0dXJuIF9CaXRf
cmVmZXJlbmNlKF9NX3AsIDFVIDw8IF9NX29mZnNldCk7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBv
cGVyYXRvcisrKCkgewogICAgX01fYnVtcF91cCgpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBj
b25zdF9pdGVyYXRvciBvcGVyYXRvcisrKGludCkgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAg
PSAqdGhpczsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgY29uc3Rf
aXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJldHVybiAq
dGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpIHsKICAgIGNvbnN0X2l0
ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJldHVybiBfX3Rt
cDsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9faSkg
ewogICAgX01faW5jcihfX2kpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRv
ciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICAqdGhpcyArPSAtX19pOwog
ICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvcisoZGlmZmVyZW5j
ZV90eXBlIF9faSkgY29uc3QgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAg
IHJldHVybiBfX3RtcCArPSBfX2k7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yLShkaWZm
ZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlz
OwogICAgcmV0dXJuIF9fdG1wIC09IF9faTsKICB9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9y
W10oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgcmV0dXJuICooKnRoaXMgKyBfX2kpOwogIH0K
fTsKCmlubGluZSBfQml0X2NvbnN0X2l0ZXJhdG9yCm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBj
b25zdCBfQml0X2NvbnN0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9feCArIF9fbjsgfQoKCgoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jYXRvciwgYm9vbCBfX2lzX3N0YXRpYz4KY2xhc3MgX0J2
ZWN0b3JfYWxsb2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFp
dHM8Ym9vbCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0b3Jf
dHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01f
ZGF0YV9hbGxvY2F0b3I7IH0KCiAgX0J2ZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3Jf
dHlwZSYgX19hKQogICAgOiBfTV9kYXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgpLCBfTV9m
aW5pc2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnByb3RlY3RlZDoKICB1bnNpZ25lZCBp
bnQqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKQogICAgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0
b3IuYWxsb2NhdGUoKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUKTsgfQogIHZvaWQg
X01fZGVhbGxvY2F0ZSgpIHsKICAgIGlmIChfTV9zdGFydC5fTV9wKQogICAgICBfTV9kYXRhX2Fs
bG9jYXRvci5kZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9wKTsKICB9CgogIHR5
cGVuYW1lIF9BbGxvY190cmFpdHM8dW5zaWduZWQgaW50LCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9y
X3R5cGUKICAgICAgICAgIF9NX2RhdGFfYWxsb2NhdG9yOwogIF9CaXRfaXRlcmF0b3IgX01fc3Rh
cnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5pc2g7CiAgdW5zaWduZWQgaW50KiBfTV9lbmRfb2Zf
c3RvcmFnZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jYXRvcj4KY2xhc3MgX0J2ZWN0b3Jf
YWxsb2NfYmFzZTxfQWxsb2NhdG9yLCB0cnVlPiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1l
IF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAg
ICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3Qg
eyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoKICBfQnZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0
IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01fc3RhcnQoKSwgX01fZmluaXNoKCksIF9NX2VuZF9v
Zl9zdG9yYWdlKDApIHt9Cgpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJh
aXRzPHVuc2lnbmVkIGludCwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlCiAgICAgICAgICBfQWxs
b2NfdHlwZTsKCiAgdW5zaWduZWQgaW50KiBfTV9iaXRfYWxsb2Moc2l6ZV90IF9fbikKICAgIHsg
cmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09S
RF9CSVQpOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKCkgewogICAgaWYgKF9NX3N0YXJ0Ll9NX3Ap
CiAgICAgIF9BbGxvY190eXBlOjpkZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQuX01fcCk7CiAg
fQoKICBfQml0X2l0ZXJhdG9yIF9NX3N0YXJ0OwogIF9CaXRfaXRlcmF0b3IgX01fZmluaXNoOwog
IHVuc2lnbmVkIGludCogX01fZW5kX29mX3N0b3JhZ2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Fs
bG9jPgpjbGFzcyBfQnZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMgX0J2ZWN0b3JfYWxsb2NfYmFzZTxf
QWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPGJvb2ws
IF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX0J2ZWN0b3JfYWxsb2NfYmFz
ZTxfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8Ym9v
bCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgICAgICAgX0Jhc2U7CnB1YmxpYzoKICB0
eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAg
X0J2ZWN0b3JfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkge30K
ICB+X0J2ZWN0b3JfYmFzZSgpIHsgX0Jhc2U6Ol9NX2RlYWxsb2NhdGUoKTsgfQp9OwoKfQoKCiMg
MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMSAzCiMgMzE4
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMiAzCm5hbWVz
cGFjZSBzdGQKewoKdGVtcGxhdGUgPHR5cGVuYW1lIF9BbGxvYz4KICBjbGFzcyB2ZWN0b3I8Ym9v
bCwgX0FsbG9jPiA6IHB1YmxpYyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4KICB7CiAgcHVibGljOgog
ICAgdHlwZWRlZiBib29sIHZhbHVlX3R5cGU7CiAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7
CiAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICB0eXBlZGVmIF9CaXRf
cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIHR5cGVkZWYgYm9vbCBjb25zdF9yZWZlcmVuY2U7CiAg
ICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOwogICAgdHlwZWRlZiBjb25zdCBib29s
KiBjb25zdF9wb2ludGVyOwoKICAgIHR5cGVkZWYgX0JpdF9pdGVyYXRvciBpdGVyYXRvcjsKICAg
IHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAgICB0eXBlZGVm
IHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7
CiAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7
CgogICAgdHlwZWRlZiB0eXBlbmFtZSBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46OmFsbG9jYXRvcl90
eXBlIGFsbG9jYXRvcl90eXBlOwogICAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNv
bnN0IHsKICAgICAgcmV0dXJuIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6Z2V0X2FsbG9jYXRvcigp
OwogICAgfQoKICBwcm90ZWN0ZWQ6CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9N
X2JpdF9hbGxvYzsKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fZGVhbGxvY2F0
ZTsKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fc3RhcnQ7CiAgICB1c2luZyBf
QnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2ZpbmlzaDsKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8
X0FsbG9jPjo6X01fZW5kX29mX3N0b3JhZ2U7CgogIHByb3RlY3RlZDoKICAgIHZvaWQgX01faW5p
dGlhbGl6ZShzaXplX3R5cGUgX19uKSB7CiAgICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0
X2FsbG9jKF9fbik7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbiArIF9fV09S
RF9CSVQgLSAxKS9fX1dPUkRfQklUOwogICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7
CiAgICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICB9
CiAgICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgYm9vbCBfX3gpIHsK
ICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgICAg
Y29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCArIDEpOwogICAg
ICAgICpfX3Bvc2l0aW9uID0gX194OwogICAgICAgICsrX01fZmluaXNoOwogICAgICB9CiAgICAg
IGVsc2UgewogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSA/IDIgKiBzaXplKCkgOiBf
X1dPUkRfQklUOwogICAgICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbGVu
KTsKICAgICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIGl0ZXJh
dG9yKF9fcSwgMCkpOwogICAgICAgICpfX2krKyA9IF9feDsKICAgICAgICBfTV9maW5pc2ggPSBj
b3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kpOwogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAg
ICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9fV09SRF9CSVQgLSAxKS9f
X1dPUkRfQklUOwogICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgfQog
ICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5p
dGlhbGl6ZV9yYW5nZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAg
ICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoKTsKICAgICAgX01fZmluaXNoID0gaXRlcmF0b3IoKTsK
ICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSAwOwogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0OyArK19fZmlyc3QpCiAgICAgICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsKICAgIH0KCiAgICB0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5pdGlhbGl6ZV9y
YW5nZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICAg
IHNpemVfdHlwZSBfX24gPSAwOwogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7
CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9N
X3N0YXJ0KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2
b2lkIF9NX2luc2VydF9yYW5nZShpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgICBmb3IgKCA7IF9f
Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpIHsKICAgICAgICBfX3BvcyA9IGluc2VydChfX3Bv
cywgKl9fZmlyc3QpOwogICAgICAgICsrX19wb3M7CiAgICAgIH0KICAgIH0KCiAgICB0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5zZXJ0X3JhbmdlKGl0ZXJh
dG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9y
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICAgICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7
CiAgICAgICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19s
YXN0LCBfX24pOwogICAgICAgIGlmIChjYXBhY2l0eSgpIC0gc2l6ZSgpID49IF9fbikgewogICAg
ICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsgZGlmZmVy
ZW5jZV90eXBlKF9fbikpOwogICAgICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcG9zaXRp
b24pOwogICAgICAgICAgX01fZmluaXNoICs9IGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgICAg
IH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSArIG1h
eChzaXplKCksIF9fbik7CiAgICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxv
YyhfX2xlbik7CiAgICAgICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KGJlZ2luKCksIF9fcG9zaXRp
b24sIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAgICAgX19pID0gY29weShfX2ZpcnN0LCBfX2xh
c3QsIF9faSk7CiAgICAgICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBf
X2kpOwogICAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgICAgX01fZW5kX29mX3N0b3Jh
Z2UgPSBfX3EgKyAoX19sZW4gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgICAgICAg
IF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAg
cHVibGljOgogICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV9zdGFydDsgfQogICAgY29u
c3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV9zdGFydDsgfQogICAgaXRlcmF0
b3IgZW5kKCkgeyByZXR1cm4gX01fZmluaXNoOyB9CiAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBj
b25zdCB7IHJldHVybiBfTV9maW5pc2g7IH0KCiAgICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigp
IHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgICBjb25zdF9yZXZlcnNlX2l0
ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsKICAgICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0
b3IoZW5kKCkpOwogICAgfQogICAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gcmV2
ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5k
KCkgY29uc3QgewogICAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsK
ICAgIH0KCiAgICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZShlbmQo
KSAtIGJlZ2luKCkpOyB9CiAgICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBz
aXplX3R5cGUoLTEpOyB9CiAgICBzaXplX3R5cGUgY2FwYWNpdHkoKSBjb25zdCB7CiAgICAgIHJl
dHVybiBzaXplX3R5cGUoY29uc3RfaXRlcmF0b3IoX01fZW5kX29mX3N0b3JhZ2UsIDApIC0gYmVn
aW4oKSk7CiAgICB9CiAgICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gYmVnaW4oKSA9PSBl
bmQoKTsgfQoKICAgIHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pCiAgICAgIHsg
cmV0dXJuICooYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsgfQogICAgY29uc3RfcmVm
ZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gKihi
ZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOyB9CgogICAgdm9pZCBfTV9yYW5nZV9jaGVj
ayhzaXplX3R5cGUgX19uKSBjb25zdCB7CiAgICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQog
ICAgICAgIF9fdGhyb3dfcmFuZ2VfZXJyb3IoInZlY3Rvcjxib29sPiIpOwogICAgfQoKICAgIHJl
ZmVyZW5jZSBhdChzaXplX3R5cGUgX19uKQogICAgICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7IHJl
dHVybiAoKnRoaXMpW19fbl07IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBhdChzaXplX3R5cGUgX19u
KSBjb25zdAogICAgICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07
IH0KCiAgICBleHBsaWNpdCB2ZWN0b3IoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9j
YXRvcl90eXBlKCkpCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkge30KCiAgICB2
ZWN0b3Ioc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3ZhbHVlLAogICAgICAgICAgICAgIGNvbnN0IGFs
bG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9CdmVjdG9yX2Jh
c2U8X0FsbG9jPihfX2EpCiAgICB7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAgICAgZmls
bChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX192YWx1ZSA/IH4wIDogMCk7CiAg
ICB9CgogICAgZXhwbGljaXQgdmVjdG9yKHNpemVfdHlwZSBfX24pCiAgICAgIDogX0J2ZWN0b3Jf
YmFzZTxfQWxsb2M+KGFsbG9jYXRvcl90eXBlKCkpCiAgICB7CiAgICAgIF9NX2luaXRpYWxpemUo
X19uKTsKICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgMCk7CiAg
ICB9CgogICAgdmVjdG9yKGNvbnN0IHZlY3RvciYgX194KSA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9j
PihfX3guZ2V0X2FsbG9jYXRvcigpKSB7CiAgICAgIF9NX2luaXRpYWxpemUoX194LnNpemUoKSk7
CiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX01fc3RhcnQpOwogICAgfQoKCgog
ICAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogICAgdm9pZCBfTV9pbml0aWFsaXplX2Rpc3Bh
dGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194LCBfX3RydWVfdHlwZSkgewogICAgICBfTV9p
bml0aWFsaXplKF9fbik7CiAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3Jh
Z2UsIF9feCA/IH4wIDogMCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgogICAgdm9pZCBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9JbnB1dEl0ZXJhdG9yIF9fZmly
c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2ZhbHNlX3R5cGUpIHsKICAgICAgX01faW5pdGlhbGl6ZV9yYW5nZShfX2ZpcnN0LCBfX2xh
c3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQoKICAgIHRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZlY3RvcihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf
SW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYg
X19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oX19h
KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9y
Pjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfX2Zp
cnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgICB+dmVjdG9yKCkgeyB9CgogICAg
dmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgdmVjdG9yJiBfX3gpIHsKICAgICAgaWYgKCZfX3ggPT0g
dGhpcykgcmV0dXJuICp0aGlzOwogICAgICBpZiAoX194LnNpemUoKSA+IGNhcGFjaXR5KCkpIHsK
ICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgX01faW5pdGlhbGl6ZShfX3guc2l6ZSgp
KTsKICAgICAgfQogICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIGJlZ2luKCkpOwog
ICAgICBfTV9maW5pc2ggPSBiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9feC5zaXplKCkpOwog
ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKCgoKCiAgICB2b2lkIF9NX2ZpbGxfYXNzaWduKHNp
emVfdCBfX24sIGJvb2wgX194KSB7CiAgICAgIGlmIChfX24gPiBzaXplKCkpIHsKICAgICAgICBm
aWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOwogICAg
ICAgIGluc2VydChlbmQoKSwgX19uIC0gc2l6ZSgpLCBfX3gpOwogICAgICB9CiAgICAgIGVsc2Ug
ewogICAgICAgIGVyYXNlKGJlZ2luKCkgKyBfX24sIGVuZCgpKTsKICAgICAgICBmaWxsKF9NX3N0
YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOwogICAgICB9CiAgICB9
CgogICAgdm9pZCBhc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsgX01fZmlsbF9hc3NpZ24o
X19uLCBfX3gpOyB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9p
ZCBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50
ZWdyYWwgX0ludGVncmFsOwogICAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX19maXJzdCwgX19sYXN0
LCBfSW50ZWdyYWwoKSk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogICAg
dm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190
cnVlX3R5cGUpCiAgICAgIHsgX01fZmlsbF9hc3NpZ24oKHNpemVfdCkgX19uLCAoYm9vbCkgX192
YWwpOyB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CiAgICB2b2lkIF9NX2Fzc2ln
bl9kaXNwYXRjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfX2ZhbHNl
X3R5cGUpCiAgICAgIHsgX01fYXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3Jf
Y2F0ZWdvcnkoX19maXJzdCkpOyB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
PgogICAgdm9pZCBfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0
ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcp
IHsKICAgICAgaXRlcmF0b3IgX19jdXIgPSBiZWdpbigpOwogICAgICBmb3IgKCA7IF9fZmlyc3Qg
IT0gX19sYXN0ICYmIF9fY3VyICE9IGVuZCgpOyArK19fY3VyLCArK19fZmlyc3QpCiAgICAgICAg
Kl9fY3VyID0gKl9fZmlyc3Q7CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICBl
cmFzZShfX2N1ciwgZW5kKCkpOwogICAgICBlbHNlCiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX2Zp
cnN0LCBfX2xhc3QpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y
PgogICAgdm9pZCBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0Zvcndh
cmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRv
cl90YWcpIHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gMDsKICAgICAgZGlzdGFuY2UoX19maXJz
dCwgX19sYXN0LCBfX2xlbik7CiAgICAgIGlmIChfX2xlbiA8IHNpemUoKSkKICAgICAgICBlcmFz
ZShjb3B5KF9fZmlyc3QsIF9fbGFzdCwgYmVnaW4oKSksIGVuZCgpKTsKICAgICAgZWxzZSB7CiAg
ICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShf
X21pZCwgc2l6ZSgpKTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBiZWdpbigpKTsKICAg
ICAgICBpbnNlcnQoZW5kKCksIF9fbWlkLCBfX2xhc3QpOwogICAgICB9CiAgICB9CgogICAgdm9p
ZCByZXNlcnZlKHNpemVfdHlwZSBfX24pIHsKICAgICAgaWYgKGNhcGFjaXR5KCkgPCBfX24pIHsK
ICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX24pOwogICAgICAgIF9N
X2ZpbmlzaCA9IGNvcHkoYmVnaW4oKSwgZW5kKCksIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAg
IF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAg
ICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19uICsgX19XT1JEX0JJVCAtIDEpL19f
V09SRF9CSVQ7CiAgICAgIH0KICAgIH0KCiAgICByZWZlcmVuY2UgZnJvbnQoKSB7IHJldHVybiAq
YmVnaW4oKTsgfQogICAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4gKmJl
Z2luKCk7IH0KICAgIHJlZmVyZW5jZSBiYWNrKCkgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAg
ICBjb25zdF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0IHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQog
ICAgdm9pZCBwdXNoX2JhY2soYm9vbCBfX3gpIHsKICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9
IF9NX2VuZF9vZl9zdG9yYWdlKQogICAgICAgICpfTV9maW5pc2grKyA9IF9feDsKICAgICAgZWxz
ZQogICAgICAgIF9NX2luc2VydF9hdXgoZW5kKCksIF9feCk7CiAgICB9CiAgICB2b2lkIHN3YXAo
dmVjdG9yPGJvb2wsIF9BbGxvYz4mIF9feCkgewogICAgICBzdGQ6OnN3YXAoX01fc3RhcnQsIF9f
eC5fTV9zdGFydCk7CiAgICAgIHN0ZDo6c3dhcChfTV9maW5pc2gsIF9feC5fTV9maW5pc2gpOwog
ICAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2UsIF9feC5fTV9lbmRfb2Zfc3RvcmFnZSk7
CiAgICB9CiAgICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgYm9vbCBfX3gg
PSBib29sKCkpIHsKICAgICAgZGlmZmVyZW5jZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdp
bigpOwogICAgICBpZiAoX01fZmluaXNoLl9NX3AgIT0gX01fZW5kX29mX3N0b3JhZ2UgJiYgX19w
b3NpdGlvbiA9PSBlbmQoKSkKICAgICAgICAqX01fZmluaXNoKysgPSBfX3g7CiAgICAgIGVsc2UK
ICAgICAgICBfTV9pbnNlcnRfYXV4KF9fcG9zaXRpb24sIF9feCk7CiAgICAgIHJldHVybiBiZWdp
bigpICsgX19uOwogICAgfQoKCgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogICAgdm9p
ZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVn
ZXIgX194LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpIHsKICAgICAg
X01fZmlsbF9pbnNlcnQoX19wb3MsIF9fbiwgX194KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBf
X3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs
IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFs
c2VfdHlwZSkgewogICAgICBfTV9pbnNlcnRfcmFuZ2UoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwg
X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz
dCkgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6
X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zaXRpb24s
IF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgfQoKICAgIHZvaWQgX01fZmlsbF9p
bnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3gpIHsKICAg
ICAgaWYgKF9fbiA9PSAwKSByZXR1cm47CiAgICAgIGlmIChjYXBhY2l0eSgpIC0gc2l6ZSgpID49
IF9fbikgewogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgZW5kKCksIF9NX2Zpbmlz
aCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAgICAgICBmaWxsKF9fcG9zaXRpb24sIF9fcG9z
aXRpb24gKyBkaWZmZXJlbmNlX3R5cGUoX19uKSwgX194KTsKICAgICAgICBfTV9maW5pc2ggKz0g
ZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgc2l6ZV90
eXBlIF9fbGVuID0gc2l6ZSgpICsgbWF4KHNpemUoKSwgX19uKTsKICAgICAgICB1bnNpZ25lZCBp
bnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAgICAgaXRlcmF0b3IgX19pID0gY29w
eShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgICBmaWxsX24o
X19pLCBfX24sIF9feCk7CiAgICAgICAgX01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQo
KSwgX19pICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsK
ICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9fV09SRF9CSVQgLSAx
KS9fX1dPUkRfQklUOwogICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAg
fQogICAgfQoKICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBf
X24sIGJvb2wgX194KSB7CiAgICAgIF9NX2ZpbGxfaW5zZXJ0KF9fcG9zaXRpb24sIF9fbiwgX194
KTsKICAgIH0KCiAgICB2b2lkIHBvcF9iYWNrKCkgeyAtLV9NX2ZpbmlzaDsgfQogICAgaXRlcmF0
b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgICBpZiAoX19wb3NpdGlvbiArIDEg
IT0gZW5kKCkpCiAgICAgICAgY29weShfX3Bvc2l0aW9uICsgMSwgZW5kKCksIF9fcG9zaXRpb24p
OwogICAgICAgIC0tX01fZmluaXNoOwogICAgICByZXR1cm4gX19wb3NpdGlvbjsKICAgIH0KICAg
IGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAg
ICBfTV9maW5pc2ggPSBjb3B5KF9fbGFzdCwgZW5kKCksIF9fZmlyc3QpOwogICAgICByZXR1cm4g
X19maXJzdDsKICAgIH0KICAgIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBib29s
IF9feCA9IGJvb2woKSkgewogICAgICBpZiAoX19uZXdfc2l6ZSA8IHNpemUoKSkKICAgICAgICBl
cmFzZShiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9fbmV3X3NpemUpLCBlbmQoKSk7CiAgICAg
IGVsc2UKICAgICAgICBpbnNlcnQoZW5kKCksIF9fbmV3X3NpemUgLSBzaXplKCksIF9feCk7CiAg
ICB9CiAgICB2b2lkIGZsaXAoKSB7CiAgICAgIGZvciAodW5zaWduZWQgaW50KiBfX3AgPSBfTV9z
dGFydC5fTV9wOyBfX3AgIT0gX01fZW5kX29mX3N0b3JhZ2U7ICsrX19wKQogICAgICAgICpfX3Ag
PSB+Kl9fcDsKICAgIH0KCiAgICB2b2lkIGNsZWFyKCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7
IH0KICB9OwoKCnR5cGVkZWYgdmVjdG9yPGJvb2wsIGFsbG9jPiBiaXRfdmVjdG9yOwoKfQojIDM5
ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyA0NCAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCgpu
YW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBsb2NhbGUKICAg
IGxvY2FsZTo6Y29tYmluZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpCiAgICB7CiAgICAgIGxvY2Fs
ZSBfX2NvcHkoKnRoaXMpOwogICAgICBfX2NvcHkuX01faW1wbC0+X01fcmVwbGFjZV9mYWNldChf
X290aGVyLl9NX2ltcGwsICZfRmFjZXQ6OmlkKTsKICAgICAgcmV0dXJuIF9fY29weTsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBib29sCiAgICBsb2NhbGU6Om9wZXJhdG9yKCkoY29uc3QgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwKICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MyKSBjb25zdAog
ICAgewogICAgICB0eXBlZGVmIHN0ZDo6Y29sbGF0ZTxfQ2hhclQ+IF9fY29sbGF0ZV90eXBlOwog
ICAgICBjb25zdCBfX2NvbGxhdGVfdHlwZSogX19mY29sbCA9ICZ1c2VfZmFjZXQ8X19jb2xsYXRl
X3R5cGU+KCp0aGlzKTsKICAgICAgcmV0dXJuIChfX2Zjb2xsLT5jb21wYXJlKF9fczEuZGF0YSgp
LCBfX3MxLmRhdGEoKSArIF9fczEubGVuZ3RoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3MyLmRhdGEoKSwgX19zMi5kYXRhKCkgKyBfX3MyLmxlbmd0aCgpKSA8IDApOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBjb25zdCBfRmFjZXQmCiAgICB1c2Vf
ZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsKICAgICAgdHlwZWRlZiBsb2NhbGU6Ol9J
bXBsOjpfX3ZlY19mYWNldCBfX3ZlY19mYWNldDsKICAgICAgc2l6ZV90IF9faSA9IF9GYWNldDo6
aWQuX01faW5kZXg7CiAgICAgIF9fdmVjX2ZhY2V0KiBfX2ZhY2V0ID0gX19sb2MuX01faW1wbC0+
X01fZmFjZXRzOwogICAgICBjb25zdCBsb2NhbGU6OmZhY2V0KiBfX2ZwID0gKCpfX2ZhY2V0KVtf
X2ldOwogICAgICBpZiAoX19mcCA9PSAwIHx8IF9faSA+PSBfX2ZhY2V0LT5zaXplKCkpCiAgICAg
ICAgX190aHJvd19iYWRfY2FzdCgpOwogICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgX0Zh
Y2V0Jj4oKl9fZnApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBib29s
CiAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3coKQogICAgewogICAgICB0
eXBlZGVmIGxvY2FsZTo6X0ltcGw6Ol9fdmVjX2ZhY2V0IF9fdmVjX2ZhY2V0OwogICAgICBzaXpl
X3QgX19pID0gX0ZhY2V0OjppZC5fTV9pbmRleDsKICAgICAgX192ZWNfZmFjZXQqIF9fZmFjZXQg
PSBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHM7CiAgICAgIHJldHVybiAoX19pIDwgX19mYWNldC0+
c2l6ZSgpICYmICgqX19mYWNldClbX19pXSAhPSAwKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0luSXRlciwgdHlwZW5hbWUgX0NoYXJUPgogICAgX0luSXRlcgogICAgX19tYXRj
aF9wYXJhbGxlbChfSW5JdGVyIF9fcywgX0luSXRlciBfX2VuZCwgaW50IF9fbnRhcmdzLAogICAg
ICAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJUPiogX190YXJnZXRzLAog
ICAgICAgICAgICAgICAgICAgICBpbnQqIF9fbWF0Y2hlcywgaW50JiBfX3JlbWFpbiwgYm9vbCYg
X19lb2YpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdf
dHlwZTsKICAgICAgX19lb2YgPSBmYWxzZTsKICAgICAgZm9yIChpbnQgX190aSA9IDA7IF9fdGkg
PCBfX250YXJnczsgKytfX3RpKQogICAgICAgIF9fbWF0Y2hlc1tfX3RpXSA9IF9fdGk7CiAgICAg
IF9fcmVtYWluID0gX19udGFyZ3M7CiAgICAgIHNpemVfdCBfX3BvcyA9IDA7CiAgICAgIGRvCiAg
ICAgICAgewogICAgICAgICAgaW50IF9fdGkgPSAwOwogICAgICAgICAgd2hpbGUgKF9fdGkgPCBf
X3JlbWFpbiAmJiBfX3BvcyA9PSBfX3RhcmdldHNbX19tYXRjaGVzW19fdGldXS5zaXplKCkpCiAg
ICAgICAgICAgICsrX190aTsKICAgICAgICAgIGlmIChfX3RpID09IF9fcmVtYWluKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fcG9zID09IDApIF9fcmVtYWluID0gMDsKICAgICAg
ICAgICAgICByZXR1cm4gX19zOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19zID09IF9f
ZW5kKQogICAgICAgICAgICBfX2VvZiA9IHRydWU7CiAgICAgICAgICBib29sIF9fbWF0Y2hlZCA9
IGZhbHNlOwogICAgICAgICAgZm9yIChpbnQgX190aTIgPSAwOyBfX3RpMiA8IF9fcmVtYWluOyAp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBfX3N0cmluZ190eXBlJiBfX3Rhcmdl
dCA9IF9fdGFyZ2V0c1tfX21hdGNoZXNbX190aTJdXTsKICAgICAgICAgICAgICBpZiAoX19wb3Mg
PCBfX3RhcmdldC5zaXplKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlm
IChfX2VvZiB8fCBfX3RhcmdldFtfX3Bvc10gIT0gKl9fcykKICAgICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgICBfX21hdGNoZXNbX190aTJdID0gX19tYXRjaGVzWy0tX19y
ZW1haW5dOwogICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICBfX21hdGNoZWQgPSB0cnVlOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICsrX190aTI7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX21h
dGNoZWQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICArK19fczsKICAgICAgICAgICAgICAr
K19fcG9zOwogICAgICAgICAgICB9CiAgICAgICAgICBmb3IgKGludCBfX3RpMyA9IDA7IF9fdGkz
IDwgX19yZW1haW47KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fcG9zID4gX190
YXJnZXRzW19fbWF0Y2hlc1tfX3RpM11dLnNpemUoKSkKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgX19tYXRjaGVzW19fdGkzXSA9IF9fbWF0Y2hlc1stLV9fcmVtYWluXTsKICAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
KytfX3RpMzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgd2hpbGUgKF9fcmVtYWluKTsK
ICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
X0Zvcm1hdF9jYWNoZTxfQ2hhclQ+OjpfRm9ybWF0X2NhY2hlKCkKICAgIDogX01fdmFsaWQodHJ1
ZSksIF9NX3VzZV9ncm91cGluZyhmYWxzZSkKICAgIHsgfQoKICB0ZW1wbGF0ZTw+CiAgICBfRm9y
bWF0X2NhY2hlPGNoYXI+OjpfRm9ybWF0X2NhY2hlKCk7CgogIHRlbXBsYXRlPD4KICAgIF9Gb3Jt
YXRfY2FjaGU8d2NoYXJfdD46Ol9Gb3JtYXRfY2FjaGUoKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgogICAgdm9pZAogICAgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+OjpfTV9wb3B1bGF0ZShp
b3NfYmFzZSYgX19pbykKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MgKCk7
CiAgICAgIG51bXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8
X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX01fdHJ1ZW5hbWUgPSBfX25wLnRydWVuYW1lKCk7CiAg
ICAgIF9NX2ZhbHNlbmFtZSA9IF9fbnAuZmFsc2VuYW1lKCk7CiAgICAgIF9NX3Rob3VzYW5kc19z
ZXAgPSBfX25wLnRob3VzYW5kc19zZXAoKTsKICAgICAgX01fZGVjaW1hbF9wb2ludCA9IF9fbnAu
ZGVjaW1hbF9wb2ludCgpOwogICAgICBfTV9ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsKICAg
ICAgX01fdXNlX2dyb3VwaW5nID0gX01fZ3JvdXBpbmcuc2l6ZSgpICE9IDAgJiYgX01fZ3JvdXBp
bmcuZGF0YSgpWzBdICE9IDA7CiAgICAgIF9NX3ZhbGlkID0gdHJ1ZTsKICAgIH0KCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB2b2lkCiAgICBfRm9ybWF0X2NhY2hlPF9DaGFyVD46
OgogICAgX1NfY2FsbGJhY2soaW9zX2Jhc2U6OmV2ZW50IF9fZXYsIGlvc19iYXNlJiBfX2lvcywg
aW50IF9faXgpIHRocm93KCkKICAgIHsKICAgICAgdm9pZComIF9fcCA9IF9faW9zLnB3b3JkKF9f
aXgpOwogICAgICBzd2l0Y2ggKF9fZXYpCiAgICAgICAgewogICAgICAgIGNhc2UgaW9zX2Jhc2U6
OmVyYXNlX2V2ZW50OgogICAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PF9Gb3JtYXRfY2FjaGU8
X0NoYXJUPio+KF9fcCk7CiAgICAgICAgICBfX3AgPSAwOwogICAgICAgICAgYnJlYWs7CiAgICAg
ICAgY2FzZSBpb3NfYmFzZTo6Y29weWZtdF9ldmVudDoKCiAgICAgICAgICB0cnkKICAgICAgICAg
ICAgeyBfX3AgPSBuZXcgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+OyB9CiAgICAgICAgICBjYXRjaCgu
Li4pCiAgICAgICAgICAgIHsgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBpb3NfYmFz
ZTo6aW1idWVfZXZlbnQ6CiAgICAgICAgICBzdGF0aWNfY2FzdDxfRm9ybWF0X2NhY2hlPF9DaGFy
VD4qPihfX3ApLT5fTV92YWxpZCA9IGZhbHNlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBfRm9ybWF0X2NhY2hlPF9DaGFy
VD4qCiAgICBfRm9ybWF0X2NhY2hlPF9DaGFyVD46Ol9TX2dldChpb3NfYmFzZSYgX19pb3MpCiAg
ICB7CiAgICAgIGlmICghX1NfcHdvcmRfaXgpCiAgICAgICAgX1NfcHdvcmRfaXggPSBpb3NfYmFz
ZTo6eGFsbG9jKCk7CiAgICAgIHZvaWQqJiBfX3AgPSBfX2lvcy5wd29yZChfU19wd29yZF9peCk7
CgoKICAgICAgaWYgKF9fcCA9PSAwKQogICAgICAgIHsKICAgICAgICAgIGF1dG9fcHRyPF9Gb3Jt
YXRfY2FjaGU8X0NoYXJUPiA+IF9fYXAobmV3IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPik7CiAgICAg
ICAgICBfX2lvcy5yZWdpc3Rlcl9jYWxsYmFjaygmX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+OjpfU19j
YWxsYmFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX3B3b3JkX2l4KTsK
ICAgICAgICAgIF9fcCA9IF9fYXAucmVsZWFzZSgpOwogICAgICAgIH0KICAgICAgX0Zvcm1hdF9j
YWNoZTxfQ2hhclQ+KiBfX25jcCA9IHN0YXRpY19jYXN0PF9Gb3JtYXRfY2FjaGU8X0NoYXJUPio+
KF9fcCk7CiAgICAgIGlmICghX19uY3AtPl9NX3ZhbGlkKQogICAgICAgIF9fbmNwLT5fTV9wb3B1
bGF0ZShfX2lvcyk7CgogICAgICByZXR1cm4gX19uY3A7CiAgICB9CiMgMjUwICIvdXNyL2xvY2Fs
L2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICB2b2lkCiAgICBudW1fZ2V0PF9DaGFy
VCwgX0luSXRlcj46OgogICAgX01fZXh0cmFjdChfSW5JdGVyICwgX0luSXRlciAsIGlvc19iYXNl
JiAsCiAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiAsIGNoYXIqICwKICAgICAgICAg
ICAgICAgaW50JiAsIGJvb2wgKSBjb25zdAogICAgewoKICAgIH0KCiAgdGVtcGxhdGU8PgogICAg
dm9pZAogICAgbnVtX2dldDxjaGFyLCBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+ID46OgogICAg
X01fZXh0cmFjdChpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+IF9fYmVnLAogICAgICAgICAgICAg
ICBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAg
ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBjaGFyKiBfX3h0cmMsIGludCYgX19i
YXNlLAogICAgICAgICAgICAgICBib29sIF9fZnApIGNvbnN0OwoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0No
YXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19l
bmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg
Ym9vbCYgX192KSBjb25zdAogICAgewoKICAgICAgaWYgKCEoX19pby5mbGFncygpICYgaW9zX2Jh
c2U6OmJvb2xhbHBoYSkpCiAgICAgICAgewoKCgoKCgogICAgICAgICAgY2hhciBfX3h0cmNbMzJd
ID0geydcMCd9OwogICAgICAgICAgaW50IF9fYmFzZTsKICAgICAgICAgIF9NX2V4dHJhY3QoX19i
ZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsKCgogICAgICAg
ICAgY2hhciogX19zYW5pdHk7CiAgICAgICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsK
ICAgICAgICAgIGxvbmcgX19sID0gc3RydG9sKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpOwog
ICAgICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICAgICAm
JiBfX2wgPD0gMQogICAgICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5p
dHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDApCiAgICAgICAgICAgIF9f
diA9IF9fbDsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZh
aWxiaXQ7CiAgICAgICAgfQoKCiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVm
IF9Gb3JtYXRfY2FjaGU8Y2hhcl90eXBlPiBfX2ZjYWNoZV90eXBlOwogICAgICAgICAgX19mY2Fj
aGVfdHlwZSogX19mbXQgPSBfX2ZjYWNoZV90eXBlOjpfU19nZXQoX19pbyk7CiAgICAgICAgICBj
b25zdCBjaGFyX3R5cGUqIF9fdHJ1ZSA9IF9fZm10LT5fTV90cnVlbmFtZS5jX3N0cigpOwogICAg
ICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2ZhbHNlID0gX19mbXQtPl9NX2ZhbHNlbmFtZS5jX3N0
cigpOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fdHJ1ZWxlbiA9IF9fdHJhaXRzX3R5cGU6Omxl
bmd0aChfX3RydWUpIC0gMTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2ZhbHNlbGVuID0gX190
cmFpdHNfdHlwZTo6bGVuZ3RoKF9fZmFsc2UpIC0gMTsKCiAgICAgICAgICBmb3IgKHNpemVfdCBf
X3BvcyA9IDA7IF9fYmVnICE9IF9fZW5kOyArK19fcG9zKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZysrOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0
ZiA9IF9fYyA9PSBfX2ZhbHNlW19fcG9zXTsKICAgICAgICAgICAgICBib29sIF9fdGVzdHQgPSBf
X2MgPT0gX190cnVlW19fcG9zXTsKICAgICAgICAgICAgICBpZiAoIShfX3Rlc3RmIHx8IF9fdGVz
dHQpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFz
ZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0ZiAmJiBfX3BvcyA9PSBfX2ZhbHNlbGVuKQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3YgPSAwOwogICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIGlmIChfX3Rlc3R0
ICYmIF9fcG9zID09IF9fdHJ1ZWxlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgX192ID0gMTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICAgICAgX19l
cnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgICB9CgogICAgICByZXR1cm4gX19iZWc7CiAg
ICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAg
X0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5
cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzaG9ydCYgX192KSBjb25zdAogICAgewoKCgogICAgICBj
aGFyIF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFj
dChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAg
ICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsKICAg
ICAgbG9uZyBfX2wgPSBzdHJ0b2woX194dHJjLCAmX19zYW5pdHksIF9fYmFzZSk7CiAgICAgIGlm
ICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBf
X3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAw
CiAgICAgICAgICAmJiBfX2wgPj0gKC0zMjc2Ny0xKSAmJiBfX2wgPD0gMzI3NjcpCiAgICAgICAg
X192ID0gc3RhdGljX2Nhc3Q8c2hvcnQ+KF9fbCk7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8
PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVt
X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJf
dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyLCBpbnQmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNbMzJdID0g
eydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwg
X19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgY2hhciogX19zYW5p
dHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICBsb25nIF9fbCA9IHN0
cnRvbChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3Nf
YmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5p
dHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDAKICAgICAgICAgICYmIF9f
bCA+PSAoLTIxNDc0ODM2NDcgLTEpICYmIF9fbCA8PSAyMTQ3NDgzNjQ3KQogICAgICAgIF9fdiA9
IHN0YXRpY19jYXN0PGludD4oX19sKTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19i
YXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxf
Q2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBf
X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LCBsb25nJiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIgX194dHJjWzMyXT0geydcMCd9
OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywg
X19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgY2hhciogX19zYW5pdHk7CiAg
ICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICBsb25nIF9fbCA9IHN0cnRvbChf
X3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6
ZmFpbGJpdCkKICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0g
J1wwJyAmJiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDApCiAgICAgICAgX192ID0gX19sOwog
ICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1
cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J
bkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9f
Z2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgbG9uZyYgX192KSBjb25zdAog
ICAgewoKCgogICAgICBjaGFyIF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsK
ICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFz
ZSwgZmFsc2UpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRp
b24gKCkpID0gMDsKICAgICAgbG9uZyBsb25nIF9fbGwgPSBzdHJ0b2xsKF9feHRyYywgJl9fc2Fu
aXR5LCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAg
ICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgqX19l
cnJub19sb2NhdGlvbiAoKSkgPT0gMCkKICAgICAgICBfX3YgPSBfX2xsOwogICAgICBlbHNlCiAg
ICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAg
ICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBf
SW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlw
ZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIHNob3J0JiBfX3YpIGNvbnN0CiAgICB7CgoK
CiAgICAgIGNoYXIgX194dHJjWzMyXT0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBf
TV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxz
ZSk7CgoKICAgICAgY2hhciogX19zYW5pdHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkg
PSAwOwogICAgICB1bnNpZ25lZCBsb25nIF9fdWwgPSBzdHJ0b3VsKF9feHRyYywgJl9fc2FuaXR5
LCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAg
ICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgqX19lcnJu
b19sb2NhdGlvbiAoKSkgPT0gMAogICAgICAgICAgJiYgX191bCA8PSA2NTUzNSkKICAgICAgICBf
X3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX191bCk7CiAgICAgIGVsc2UKICAgICAg
ICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRl
cgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19i
ZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBpbnQmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAg
Y2hhciBfX3h0cmNbMzJdPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJh
Y3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsKCgog
ICAgICBjaGFyKiBfX3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAg
ICAgIHVuc2lnbmVkIGxvbmcgX191bCA9IHN0cnRvdWwoX194dHJjLCAmX19zYW5pdHksIF9fYmFz
ZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBf
X3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5vX2xvY2F0
aW9uICgpKSA9PSAwCiAgICAgICAgICAmJiBfX3VsIDw9ICgyMTQ3NDgzNjQ3ICogMlUgKyAxKSkK
ICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fdWwpOwogICAgICBlbHNl
CiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAg
IF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90
eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYgX192KSBjb25zdAogICAgewoK
CgogICAgICBjaGFyIF9feHRyY1szMl0gPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAg
IF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZh
bHNlKTsKCgogICAgICBjaGFyKiBfX3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgp
KSA9IDA7CiAgICAgIHVuc2lnbmVkIGxvbmcgX191bCA9IHN0cnRvdWwoX194dHJjLCAmX19zYW5p
dHksIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAg
ICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vy
cm5vX2xvY2F0aW9uICgpKSA9PSAwKQogICAgICAgIF9fdiA9IF9fdWw7CiAgICAgIGVsc2UKICAg
ICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAgIHJldHVybiBfX2JlZzsKICAg
IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9J
bkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBl
IF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19i
YXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICB7
CgoKCiAgICAgIGNoYXIgX194dHJjWzMyXT0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAg
ICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBm
YWxzZSk7CgoKICAgICAgY2hhciogX19zYW5pdHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAo
KSkgPSAwOwogICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX191bGwgPSBzdHJ0b3VsbChfX3h0cmMs
ICZfX3Nhbml0eSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJp
dCkKICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAm
JiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDApCiAgICAgICAgX192ID0gX191bGw7CiAgICAg
IGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAgIHJldHVybiBf
X2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl
cj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQo
aXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZmxvYXQmIF9fdikgY29uc3QKICAgIHsKCgoK
ICAgICAgY2hhciBfX3h0cmNbMzJdPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9N
X2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIHRydWUp
OwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0g
MDsKCiAgICAgIGZsb2F0IF9fZiA9IHN0cnRvZihfX3h0cmMsICZfX3Nhbml0eSk7CgoKCiAgICAg
IGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3Nhbml0eSAh
PSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9
PSAwKQogICAgICAgIF9fdiA9IF9fZjsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19i
YXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9D
aGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9f
ZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs
IGRvdWJsZSYgX192KSBjb25zdAogICAgewoKCgogICAgICBjaGFyIF9feHRyY1szMl09IHsnXDAn
fTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8s
IF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgdHJ1ZSk7CgoKICAgICAgY2hhciogX19zYW5pdHk7CiAg
ICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICBkb3VibGUgX19kID0gc3RydG9k
KF9feHRyYywgJl9fc2FuaXR5KTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJp
dCkKICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAm
JiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDApCiAgICAgICAgX192ID0gX19kOwogICAgICBl
bHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19i
ZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+
CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0
ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0CiAgICB7
CgoKCiAgICAgIGNoYXIgX194dHJjWzMyXT0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAg
ICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCB0
cnVlKTsKCgogICAgICBjaGFyKiBfX3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgp
KSA9IDA7CiAgICAgIGxvbmcgZG91YmxlIF9fbGQgPSBzdHJ0b2xkKF9feHRyYywgJl9fc2FuaXR5
KTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9f
c2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9fbG9jYXRp
b24gKCkpID09IDApCiAgICAgICAgX192ID0gX19sZDsKICAgICAgZWxzZQogICAgICAgIF9fZXJy
IHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQojIDY3OCAi
L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAg
bnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0
ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLCB2b2lkKiYgX192KSBjb25zdAogICAgewoKICAgICAgdHlwZWRlZiBpb3NfYmFz
ZTo6Zm10ZmxhZ3MgZm10ZmxhZ3M7CiAgICAgIGZtdGZsYWdzIF9fZm10ID0gX19pby5mbGFncygp
OwogICAgICBmbXRmbGFncyBfX2ZtdG1hc2sgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jh
c2U6OmJhc2VmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW9zX2Jhc2U6OnVw
cGVyY2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxhZ3MoX19mbXQgJiBf
X2ZtdG1hc2sgfCAoaW9zX2Jhc2U6OmhleCB8IGlvc19iYXNlOjpzaG93YmFzZSkpOwoKCgoKICAg
ICAgY2hhciBfX3h0cmNbMzJdPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4
dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsK
CgogICAgICBjaGFyKiBfX3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7
CiAgICAgIHZvaWQqIF9fdnAgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzdHJ0b3VsKF9feHRy
YywgJl9fc2FuaXR5LCBfX2Jhc2UpKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFp
bGJpdCkKICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1ww
JyAmJiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDApCiAgICAgICAgX192ID0gX192cDsKICAg
ICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKCiAgICAgIF9faW8u
ZmxhZ3MoX19mbXQpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGlubGluZSBfT3V0SXRlcgogICAg
X19wYWQoX091dEl0ZXIgX19zLCBfQ2hhclQgX19maWxsLCBpbnQgX19wYWRkaW5nKTsKCiAgdGVt
cGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1JhSXRlcj4KICAgIF9SYUl0ZXIKICAg
IF9fcGFkKF9SYUl0ZXIgX19zLCBfQ2hhclQgX19maWxsLCBpbnQgX19wYWRkaW5nLAogICAgICAg
ICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGZpbGxfbihfX3MsIF9f
ZmlsbCk7CiAgICAgIHJldHVybiBfX3MgKyBfX3BhZGRpbmc7CiAgICB9CgogIHRlbXBsYXRlIDx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyLCB0eXBlbmFtZSBfVGFnPgogICAgX091
dEl0ZXIKICAgIF9fcGFkKF9PdXRJdGVyIF9fcywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGlu
ZywgX1RhZykKICAgIHsKICAgICAgd2hpbGUgKC0tX19wYWRkaW5nID49IDApIHsgKl9fcyA9IF9f
ZmlsbDsgKytfX3M7IH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBpbmxpbmUgX091dEl0ZXIKICAgIF9f
cGFkKF9PdXRJdGVyIF9fcywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZykKICAgIHsKICAg
ICAgcmV0dXJuIF9fcGFkKF9fcywgX19maWxsLCBfX3BhZGRpbmcsCiAgICAgICAgICAgICAgICAg
ICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X091dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSgp
KTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+
CiAgICBfT3V0SXRlcgogICAgX19wYWRfbnVtZXJpYyhfT3V0SXRlciBfX3MsIGlvc19iYXNlOjpm
bXRmbGFncyAsCiAgICAgICAgICAgICAgICAgIF9DaGFyVCAsIGludCAsCiAgICAgICAgICAgICAg
ICAgIF9DaGFyVCBjb25zdCogLCBfQ2hhclQgY29uc3QqICwKICAgICAgICAgICAgICAgICAgX0No
YXJUIGNvbnN0KiApCiAgewoKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgogIHRlbXBsYXRlIDx0
eXBlbmFtZSBfQ2hhclQ+CiAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4KICAgIF9fcGFk
X251bWVyaWMob3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+IF9fcywgaW9zX2Jhc2U6OmZtdGZs
YWdzIF9fZmxhZ3MsCiAgICAgICAgICAgICAgICAgIF9DaGFyVCBfX2ZpbGwsIGludCBfX3dpZHRo
LCBfQ2hhclQgY29uc3QqIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgIF9DaGFyVCBjb25zdCog
X19taWRkbGUsIF9DaGFyVCBjb25zdCogX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIG9zdHJl
YW1idWZfaXRlcmF0b3I8X0NoYXJUPiBfX291dF9pdGVyOwogICAgICBpbnQgX19wYWRkaW5nID0g
X193aWR0aCAtIChfX2xhc3QgLSBfX2ZpcnN0KTsKICAgICAgaWYgKF9fcGFkZGluZyA8IDApCiAg
ICAgICAgX19wYWRkaW5nID0gMDsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYWZsYWdzID0g
X19mbGFncyAmIGlvc19iYXNlOjphZGp1c3RmaWVsZDsKICAgICAgYm9vbCBfX3Rlc3RmaWVsZCA9
IF9fcGFkZGluZyA9PSAwIHx8IF9fYWZsYWdzID09IGlvc19iYXNlOjpsZWZ0CiAgICAgICAgICAg
ICAgICAgICAgICAgICB8fCBfX2FmbGFncyA9PSBpb3NfYmFzZTo6aW50ZXJuYWw7CgoKICAgICAg
aWYgKF9fZmlyc3QgIT0gX19taWRkbGUpCiAgICAgICAgewogICAgICAgICAgaWYgKCFfX3Rlc3Rm
aWVsZCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fcGFkKF9fcywgX19maWxsLCBfX3Bh
ZGRpbmcpOwogICAgICAgICAgICAgIF9fcGFkZGluZyA9IDA7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fcyk7CiAgICAgICAgfQogICAgICBfX291dF9p
dGVyIF9fczIgPSBfX3M7CgogICAgICBpZiAoX19wYWRkaW5nICYmIF9fYWZsYWdzICE9IGlvc19i
YXNlOjpsZWZ0KQogICAgICAgIHsKICAgICAgICAgIF9fcGFkKF9fczIsIF9fZmlsbCwgX19wYWRk
aW5nKTsKICAgICAgICAgIF9fcGFkZGluZyA9IDA7CiAgICAgICAgfQogICAgICBfX291dF9pdGVy
IF9fczMgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fczIpOwogICAgICBpZiAoX19wYWRkaW5n
KQogICAgICAgIF9fcGFkKF9fczMsIF9fZmlsbCwgX19wYWRkaW5nKTsKICAgICAgcmV0dXJuIF9f
czM7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy
PgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0
KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9f
dikgY29uc3QKICAgIHsKICAgICAgY29uc3QgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KiBfX2ZtdCA9
IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6X1NfZ2V0KF9faW8pOwogICAgICBpb3NfYmFzZTo6Zm10
ZmxhZ3MgX19mbGFncyA9IF9faW8uZmxhZ3MoKTsKCiAgICAgIGlmICgoX19mbGFncyAmIGlvc19i
YXNlOjpib29sYWxwaGEpID09IDApCiAgICAgICAgewogICAgICAgICAgdW5zaWduZWQgbG9uZyBf
X3V2ID0gX192OwogICAgICAgICAgcmV0dXJuIF9fb3V0cHV0X2ludGVnZXIoX19zLCBfX2lvLCBf
X2ZpbGwsIGZhbHNlLCBfX3V2KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAg
ICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZmlyc3Q7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUq
IF9fbGFzdDsKICAgICAgICAgIGlmIChfX3YpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBf
X2ZpcnN0ID0gX19mbXQtPl9NX3RydWVuYW1lLmRhdGEoKTsKICAgICAgICAgICAgICBfX2xhc3Qg
PSBfX2ZpcnN0ICsgX19mbXQtPl9NX3RydWVuYW1lLnNpemUoKTsKICAgICAgICAgICAgfQogICAg
ICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19maXJzdCA9IF9fZm10LT5f
TV9mYWxzZW5hbWUuZGF0YSgpOwogICAgICAgICAgICAgIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2Zt
dC0+X01fZmFsc2VuYW1lLnNpemUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgY29weShfX2Zp
cnN0LCBfX2xhc3QsIF9fcyk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19zOwogICAgfQoKCgoK
CiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9DaGFyVCoKICAgIF9fZ3JvdXBfZGln
aXRzKF9DaGFyVCogX19zLCBfQ2hhclQgX19ncnNlcCwgY2hhciBjb25zdCogX19ncm91cGluZywK
ICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0KiBfX2dyZW5kLCBfQ2hhclQgY29uc3QqIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgX0NoYXJUIGNvbnN0KiBfX2xhc3QpCiAgICB7CiAg
ICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gKl9fZ3JvdXBpbmcpCiAgICAgICAgewogICAgICAg
ICAgX19zID0gX19ncm91cF9kaWdpdHMoX19zLCBfX2dyc2VwLAogICAgICAgICAgICAgIChfX2dy
b3VwaW5nICsgMSA9PSBfX2dyZW5kID8gX19ncm91cGluZyA6IF9fZ3JvdXBpbmcgKyAxKSwKICAg
ICAgICAgICAgICBfX2dyZW5kLCBfX2ZpcnN0LCBfX2xhc3QgLSAqX19ncm91cGluZyk7CiAgICAg
ICAgICBfX2ZpcnN0ID0gX19sYXN0IC0gKl9fZ3JvdXBpbmc7CiAgICAgICAgICAqX19zKysgPSBf
X2dyc2VwOwogICAgICAgIH0KICAgICAgZG8KICAgICAgICB7CiAgICAgICAgICAqX19zKysgPSAq
X19maXJzdCsrOwogICAgICAgIH0KICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KTsKICAg
ICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX091dEl0ZXIsIHR5cGVuYW1lIF9WYWx1ZVQ+CiAgICBfT3V0SXRlcgogICAgX19vdXRwdXRf
aW50ZWdlcihfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBib29s
IF9fbmVnLAogICAgICAgICAgICAgIF9WYWx1ZVQgX192KQogICAgewoKICAgICAgY29uc3QgbG9u
ZyBfTV9yb29tID0gbnVtZXJpY19saW1pdHM8X1ZhbHVlVD46OmRpZ2l0czEwICogMiArIDQ7CiAg
ICAgIF9DaGFyVCBfX2RpZ2l0c1tfTV9yb29tXTsKICAgICAgX0NoYXJUKiBfX2Zyb250ID0gX19k
aWdpdHMgKyBfTV9yb29tOwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faW8u
ZmxhZ3MoKTsKICAgICAgY29uc3QgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KiBfX2ZtdCA9IF9Gb3Jt
YXRfY2FjaGU8X0NoYXJUPjo6X1NfZ2V0KF9faW8pOwogICAgICBjaGFyIGNvbnN0KiBfX3RhYmxl
ID0gX19mbXQtPl9TX2xpdGVyYWxzICsgX19mbXQtPl9TX2RpZ2l0czsKCiAgICAgIGlvc19iYXNl
OjpmbXRmbGFncyBfX2Jhc2VmaWVsZCA9IChfX2ZsYWdzICYgX19pby5iYXNlZmllbGQpOwogICAg
ICBfQ2hhclQqIF9fc2lnbl9lbmQgPSBfX2Zyb250OwogICAgICBpZiAoX19iYXNlZmllbGQgPT0g
aW9zX2Jhc2U6OmhleCkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19mbGFncyAmIGlvc19iYXNl
Ojp1cHBlcmNhc2UpCiAgICAgICAgICAgIF9fdGFibGUgKz0gMTY7CiAgICAgICAgICBkbwogICAg
ICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVtfX3YgJiAxNV07CiAgICAgICAgICB3aGlsZSAo
KF9fdiA+Pj0gNCkgIT0gMCk7CiAgICAgICAgICBfX3NpZ25fZW5kID0gX19mcm9udDsKICAgICAg
ICAgIGlmIChfX2ZsYWdzICYgaW9zX2Jhc2U6OnNob3diYXNlKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgKi0tX19mcm9udCA9IF9fZm10LT5fU19saXRlcmFsc1tfX2ZtdC0+X1NfeCArCiAg
ICAgICAgICAgICAgICAgICAgICAgKChfX2ZsYWdzICYgaW9zX2Jhc2U6OnVwcGVyY2FzZSkgPyAx
IDogMCldOwogICAgICAgICAgICAgICotLV9fZnJvbnQgPSBfX3RhYmxlWzBdOwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6b2N0
KQogICAgICAgIHsKICAgICAgICAgIGRvCiAgICAgICAgICAgICotLV9fZnJvbnQgPSBfX3RhYmxl
W19fdiAmIDddOwogICAgICAgICAgd2hpbGUgKChfX3YgPj49IDMpICE9IDApOwogICAgICAgICAg
aWYgKF9fZmxhZ3MgJiBpb3NfYmFzZTo6c2hvd2Jhc2UKICAgICAgICAgICAgICAmJiBzdGF0aWNf
Y2FzdDxjaGFyPigqX19mcm9udCkgIT0gX190YWJsZVswXSkKICAgICAgICAgICAgKi0tX19mcm9u
dCA9IF9fdGFibGVbMF07CiAgICAgICAgICBfX3NpZ25fZW5kID0gX19mcm9udDsKICAgICAgICB9
CiAgICAgIGVsc2UKICAgICAgICB7CgogICAgICAgICAgZG8KICAgICAgICAgICAgKi0tX19mcm9u
dCA9IF9fdGFibGVbX192ICUgMTBdOwogICAgICAgICAgd2hpbGUgKChfX3YgLz0gMTApICE9IDAp
OwogICAgICAgICAgX19zaWduX2VuZCA9IF9fZnJvbnQ7CgogICAgICAgICAgaWYgKF9fbmVnIHx8
IChfX2ZsYWdzICYgaW9zX2Jhc2U6OnNob3dwb3MpKQogICAgICAgICAgICAqLS1fX2Zyb250ID0g
X19mbXQtPl9TX2xpdGVyYWxzW19fZm10LT5fU19wbHVzIC0gX19uZWddOwogICAgICAgIH0KCgog
ICAgICBpZiAoIV9fZm10LT5fTV91c2VfZ3JvdXBpbmcgJiYgIV9faW8ud2lkdGgoKSkKICAgICAg
ICByZXR1cm4gY29weShfX2Zyb250LCBfX2RpZ2l0cyArIF9NX3Jvb20sIF9fcyk7CgogICAgICBp
ZiAoIV9fZm10LT5fTV91c2VfZ3JvdXBpbmcpCiAgICAgICAgcmV0dXJuIF9fcGFkX251bWVyaWMo
X19zLCBfX2ZsYWdzLCBfX2ZpbGwsIF9faW8ud2lkdGgoMCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19mcm9udCwgX19zaWduX2VuZCwgX19kaWdpdHMgKyBfTV9yb29tKTsKCiAgICAg
IF9DaGFyVCogX19wID0gX19kaWdpdHM7CiAgICAgIHdoaWxlIChfX2Zyb250IDwgX19zaWduX2Vu
ZCkKICAgICAgICAqX19wKysgPSAqX19mcm9udCsrOwogICAgICBjb25zdCBjaGFyKiBfX2dyID0g
X19mbXQtPl9NX2dyb3VwaW5nLmRhdGEoKTsKICAgICAgX19mcm9udCA9IF9fZ3JvdXBfZGlnaXRz
KF9fcCwgX19mbXQtPl9NX3Rob3VzYW5kc19zZXAsIF9fZ3IsCiAgICAgICAgX19nciArIF9fZm10
LT5fTV9ncm91cGluZy5zaXplKCksIF9fc2lnbl9lbmQsIF9fZGlnaXRzICsgX01fcm9vbSk7CiAg
ICAgIHJldHVybiBfX3BhZF9udW1lcmljKF9fcywgX19mbGFncywgX19maWxsLCBfX2lvLndpZHRo
KDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RpZ2l0cywgX19wLCBfX2Zyb250KTsK
ICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAg
ICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRl
cl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBj
b25zdAogICAgewogICAgICB1bnNpZ25lZCBsb25nIF9fdXYgPSBfX3Y7CiAgICAgIGJvb2wgX19u
ZWcgPSBmYWxzZTsKICAgICAgaWYgKF9fdiA8IDApCiAgICAgICAgewogICAgICAgICAgX19uZWcg
PSB0cnVlOwogICAgICAgICAgX191diA9IC1fX3V2OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9f
b3V0cHV0X2ludGVnZXIoX19zLCBfX2lvLCBfX2ZpbGwsIF9fbmVnLCBfX3V2KTsKICAgIH0KCiAg
dGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRl
cgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9f
cywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgdW5zaWduZWQg
bG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfX291dHB1dF9pbnRlZ2VyKF9fcywgX19pbywg
X19maWxsLCBmYWxzZSwgX192KTsgfQoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVy
Pjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fYiwgY2hhcl90eXBlIF9f
ZmlsbCwgbG9uZyBsb25nIF9fdikgY29uc3QKICAgIHsKICAgICAgdW5zaWduZWQgbG9uZyBsb25n
IF9fdXYgPSBfX3Y7CiAgICAgIGJvb2wgX19uZWcgPSBmYWxzZTsKICAgICAgaWYgKF9fdiA8IDAp
CiAgICAgICAgewogICAgICAgICAgX19uZWcgPSB0cnVlOwogICAgICAgICAgX191diA9IC1fX3V2
OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0cHV0X2ludGVnZXIoX19zLCBfX2IsIF9fZmls
bCwgX19uZWcsIF9fdXYpOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+
OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9f
ZmlsbCwKICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX192KSBjb25zdAogICAgeyByZXR1
cm4gX19vdXRwdXRfaW50ZWdlcihfX3MsIF9faW8sIF9fZmlsbCwgZmFsc2UsIF9fdik7IH0KCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9P
dXRJdGVyPgogICAgX091dEl0ZXIKICAgIF9fb3V0cHV0X2Zsb2F0KF9PdXRJdGVyIF9fcywgaW9z
X2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciogX19zcHRyLCBzaXplX3QgX19zbGVuKQogICAgewoKICAgICAgcmV0dXJuIF9fczsKICAgIH0K
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIG9zdHJl
YW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPgogICAgX19vdXRwdXRfZmxvYXQob3N0cmVh
bWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9fcywgaW9zX2Jhc2UmIF9faW8sCiAgICAg
ICAgICAgICAgICAgICBfQ2hhclQgX19maWxsLCBjb25zdCBjaGFyKiBfX3NwdHIsIHNpemVfdCBf
X3NsZW4pCiAgICB7CiAgICAgIHNpemVfdCBfX3BhZGRpbmcgPSBfX2lvLndpZHRoKCkgPiBzdHJl
YW1zaXplKF9fc2xlbikgPwogICAgICAgICAgICAgICAgICAgICAgICAgX19pby53aWR0aCgpIC1f
X3NsZW4gOiAwOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlw
ZTxfQ2hhclQ+IGNvbnN0JiBfX2N0ID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7
CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2FkamZpZWxkID0gX19pby5mbGFncygpICYgaW9z
X2Jhc2U6OmFkanVzdGZpZWxkOwogICAgICBjb25zdCBjaGFyKiBjb25zdCBfX2VwdHIgPSBfX3Nw
dHIgKyBfX3NsZW47CgogICAgICBpZiAoX19hZGpmaWVsZCA9PSBpb3NfYmFzZTo6aW50ZXJuYWwp
CiAgICAgICB7CgogICAgICAgICBpZiAoX19zcHRyIDwgX19lcHRyICYmICgqX19zcHRyID09ICcr
JyB8fCAqX19zcHRyID09ICctJykpCiAgICAgICAgICAgewogICAgICAgICAgICAgX19zID0gX19j
dC53aWRlbigqX19zcHRyKTsKICAgICAgICAgICAgICsrX19zOwogICAgICAgICAgICAgKytfX3Nw
dHI7CiAgICAgICAgICAgfQogICAgICAgICBfX3MgPSBfX3BhZChfX3MsIF9fZmlsbCwgX19wYWRk
aW5nKTsKICAgICAgICAgX19wYWRkaW5nID0gMDsKICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19h
ZGpmaWVsZCAhPSBpb3NfYmFzZTo6bGVmdCkKICAgICAgICB7CiAgICAgICAgICBfX3MgPSBfX3Bh
ZChfX3MsIF9fZmlsbCwgX19wYWRkaW5nKTsKICAgICAgICAgIF9fcGFkZGluZyA9IDA7CiAgICAg
ICAgfQoKICAgICAgY2hhciBfX2RlY2ltYWxfcG9pbnQgPSAqKGxvY2FsZWNvbnYoKS0+ZGVjaW1h
bF9wb2ludCk7CiAgICAgIGNvbnN0IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPiogX19mbXQgPSBfRm9y
bWF0X2NhY2hlPF9DaGFyVD46Ol9TX2dldChfX2lvKTsKICAgICAgZm9yICg7IF9fc3B0ciAhPSBf
X2VwdHI7ICsrX19zLCArK19fc3B0cikKICAgICAgIHsKCiAgICAgICAgIGlmICgqX19zcHRyID09
IF9fZGVjaW1hbF9wb2ludCkKICAgICAgICAgICBfX3MgPSBfX2ZtdC0+X01fZGVjaW1hbF9wb2lu
dDsKCiAgICAgICAgIGVsc2UKICAgICAgICAgICBfX3MgPSBfX2N0LndpZGVuKCpfX3NwdHIpOwog
ICAgICAgfQoKICAgICAgaWYgKF9fcGFkZGluZykKICAgICAgICBfX3BhZChfX3MsIF9fZmlsbCwg
X19wYWRkaW5nKTsKICAgICAgX19pby53aWR0aCgwKTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0K
CiAgYm9vbAogIF9fYnVpbGRfZmxvYXRfZm9ybWF0KGlvc19iYXNlJiBfX2lvLCBjaGFyKiBfX2Zw
dHIsIGNoYXIgX19tb2RpZmllciwKICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1zaXplIF9f
cHJlYyk7CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgog
ICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0
ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192
KSBjb25zdAogICAgewogICAgICBjb25zdCBzdHJlYW1zaXplIF9fbWF4X3ByZWMgPSBudW1lcmlj
X2xpbWl0czxkb3VibGU+OjpkaWdpdHMxMCArIDM7CiAgICAgIHN0cmVhbXNpemUgX19wcmVjID0g
X19pby5wcmVjaXNpb24oKTsKCiAgICAgIGlmIChfX3ByZWMgPiBfX21heF9wcmVjKQogICAgICAg
IF9fcHJlYyA9IF9fbWF4X3ByZWM7CgogICAgICBjaGFyIF9fc2J1ZltfX21heF9wcmVjICogMl07
CiAgICAgIHNpemVfdCBfX3NsZW47CgogICAgICBjaGFyIF9fZmJ1ZlsxNl07CiAgICAgIGlmIChf
X2J1aWxkX2Zsb2F0X2Zvcm1hdChfX2lvLCBfX2ZidWYsIDAsIF9fcHJlYykpCiAgICAgICAgX19z
bGVuID0gc3ByaW50ZihfX3NidWYsIF9fZmJ1ZiwgX19wcmVjLCBfX3YpOwogICAgICBlbHNlCiAg
ICAgICAgX19zbGVuID0gc3ByaW50ZihfX3NidWYsIF9fZmJ1ZiwgX192KTsKCiAgICAgIHJldHVy
biBfX291dHB1dF9mbG9hdChfX3MsIF9faW8sIF9fZmlsbCwgX19zYnVmLCBfX3NsZW4pOwogICAg
fQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9P
dXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5
cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICBsb25n
IGRvdWJsZSBfX3YpIGNvbnN0CiAgICB7CiAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19tYXhfcHJl
YyA9IG51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPjo6ZGlnaXRzMTAgKyAzOwogICAgICBzdHJl
YW1zaXplIF9fcHJlYyA9IF9faW8ucHJlY2lzaW9uKCk7CgogICAgICBpZiAoX19wcmVjID4gX19t
YXhfcHJlYykKICAgICAgICBfX3ByZWMgPSBfX21heF9wcmVjOwoKICAgICAgY2hhciBfX3NidWZb
X19tYXhfcHJlYyAqIDJdOwogICAgICBzaXplX3QgX19zbGVuOwoKICAgICAgY2hhciBfX2ZidWZb
MTZdOwoKICAgICAgaWYgKF9fYnVpbGRfZmxvYXRfZm9ybWF0KF9faW8sIF9fZmJ1ZiwgJ0wnLCBf
X3ByZWMpKQogICAgICAgIF9fc2xlbiA9IHNwcmludGYoX19zYnVmLCBfX2ZidWYsIF9fcHJlYywg
X192KTsKICAgICAgZWxzZQogICAgICAgIF9fc2xlbiA9IHNwcmludGYoX19zYnVmLCBfX2ZidWYs
IF9fdik7CgogICAgICByZXR1cm4gX19vdXRwdXRfZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9f
c2J1ZiwgX19zbGVuKTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6
CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2Zp
bGwsCiAgICAgICAgICAgY29uc3Qgdm9pZCogX192KSBjb25zdAogICAgewogICAgICB0eXBlZGVm
IGlvc19iYXNlOjpmbXRmbGFncyBmbXRmbGFnczsKICAgICAgZm10ZmxhZ3MgX19mbXQgPSBfX2lv
LmZsYWdzKCk7CiAgICAgIGZtdGZsYWdzIF9fZm10bWFzayA9IH4oaW9zX2Jhc2U6OnNob3dwb3Mg
fCBpb3NfYmFzZTo6YmFzZWZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpb3Nf
YmFzZTo6dXBwZXJjYXNlIHwgaW9zX2Jhc2U6OmludGVybmFsKTsKICAgICAgX19pby5mbGFncyhf
X2ZtdCAmIF9fZm10bWFzayB8IChpb3NfYmFzZTo6aGV4IHwgaW9zX2Jhc2U6OnNob3diYXNlKSk7
CiAgICAgIHRyeSB7CiAgICAgICAgX091dEl0ZXIgX19zMiA9IF9fb3V0cHV0X2ludGVnZXIoX19z
LCBfX2lvLCBfX2ZpbGwsIGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBsb25nPihfX3YpKTsKICAgICAgICBfX2lvLmZsYWdz
KF9fZm10KTsKICAgICAgICByZXR1cm4gX19zMjsKICAgICAgfQogICAgICBjYXRjaCAoLi4uKSB7
CiAgICAgICAgX19pby5mbGFncyhfX2ZtdCk7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICAgIH0K
CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0R1bW15ID0gaW50Pgog
ICAgc3RydWN0IF9XZWVrZGF5bmFtZXM7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9EdW1teT4KICAg
IHN0cnVjdCBfV2Vla2RheW5hbWVzPGNoYXIsIF9EdW1teT4KICAgIHsgc3RhdGljIGNvbnN0IGNo
YXIqIGNvbnN0IF9TX25hbWVzWzE0XTsgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15Pgog
ICAgY29uc3QgY2hhciogY29uc3QKICAgIF9XZWVrZGF5bmFtZXM8Y2hhciwgX0R1bW15Pjo6X1Nf
bmFtZXNbMTRdID0KICAgIHsKICAgICAgIlN1biIsICJTdW5kYXkiLAogICAgICAiTW9uIiwgIk1v
bmRheSIsICJUdWUiLCAiVHVlc2RheSIsICJXZWQiLCAiV2VkbmVzZGF5IiwKICAgICAgIlRodSIs
ICJUaHVyc2RheSIsICJGcmkiLCAiRnJpZGF5IiwgIlNhdCIsICJTYXR1cmRheSIKICAgIH07CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRHVtbXk+CiAgICBzdHJ1Y3QgX1dlZWtkYXluYW1lczx3Y2hh
cl90LCBfRHVtbXk+CiAgICB7IHN0YXRpYyBjb25zdCB3Y2hhcl90KiBjb25zdCBfU19uYW1lc1sx
NF07IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9EdW1teT4KICAgIGNvbnN0IHdjaGFyX3QqIGNv
bnN0CiAgICBfV2Vla2RheW5hbWVzPHdjaGFyX3QsIF9EdW1teT46Ol9TX25hbWVzWzE0XSA9CiAg
ICB7CiAgICAgIEwiU3VuIiwgTCJTdW5kYXkiLAogICAgICBMIk1vbiIsIEwiTW9uZGF5IiwgTCJU
dWUiLCBMIlR1ZXNkYXkiLCBMIldlZCIsIEwiV2VkbmVzZGF5IiwKICAgICAgTCJUaHUiLCBMIlRo
dXJzZGF5IiwgTCJGcmkiLCBMIkZyaWRheSIsIEwiU2F0IiwgTCJTYXR1cmRheSIKICAgIH07CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9EdW1teSA9IGludD4KICAgIHN0
cnVjdCBfTW9udGhuYW1lczsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15PgogICAgc3RydWN0
IF9Nb250aG5hbWVzPGNoYXIsX0R1bW15PgogICAgeyBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qg
X1NfbmFtZXNbMjRdOyB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRHVtbXk+CiAgICBjb25zdCBj
aGFyKiBjb25zdAogICAgX01vbnRobmFtZXM8Y2hhcixfRHVtbXk+OjpfU19uYW1lc1syNF0gPQog
ICAgewogICAgICAiSmFuIiwgIkphbnVhcnkiLCAiRmViIiwgIkZlYnJ1YXJ5IiwgIk1hciIsICJN
YXJjaCIsCiAgICAgICJBcHIiLCAiQXByaWwiLCAiTWF5IiwgIk1heSIsICJKdW4iLCAiSnVuZSIs
CiAgICAgICJKdWwiLCAiSnVseSIsICJBdWciLCAiQXVndXN0IiwgIlNlcCIsICJTZXB0ZW1iZXIi
LAogICAgICAiT2N0IiwgIk9jdG9iZXIiLCAiTm92IiwgIk5vdmVtYmVyIiwgIkRlYyIsICJEZWNl
bWJlciIKICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRHVtbXk+CiAgICBzdHJ1Y3QgX01v
bnRobmFtZXM8d2NoYXJfdCwgX0R1bW15PgogICAgeyBzdGF0aWMgY29uc3Qgd2NoYXJfdCogY29u
c3QgX1NfbmFtZXNbMjRdOyB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRHVtbXk+CiAgICBjb25z
dCB3Y2hhcl90KiBjb25zdAogICAgX01vbnRobmFtZXM8d2NoYXJfdCxfRHVtbXk+OjpfU19uYW1l
c1syNF0gPQogICAgewogICAgICBMIkphbiIsIEwiSmFudWFyeSIsIEwiRmViIiwgTCJGZWJydWFy
eSIsIEwiTWFyIiwgTCJNYXJjaCIsCiAgICAgIEwiQXByIiwgTCJBcHJpbCIsIEwiTWF5IiwgTCJN
YXkiLCBMIkp1biIsIEwiSnVuZSIsCiAgICAgIEwiSnVsIiwgTCJKdWx5IiwgTCJBdWciLCBMIkF1
Z3VzdCIsIEwiU2VwIiwgTCJTZXB0ZW1iZXIiLAogICAgICBMIk9jdCIsIEwiT2N0b2JlciIsIEwi
Tm92IiwgTCJOb3ZlbWJlciIsIEwiRGVjIiwgTCJEZWNlbWJlciIKICAgIH07CgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1l
X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX3Ms
IGl0ZXJfdHlwZSBfX2VuZCwKICAgICAgICAgICAgICAgICAgIGlvc19iYXNlJiBfX2lvLCBpb3Nf
YmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0CiAgICB7CiAgICAgIGlmICghX01f
ZGF5bmFtZXMpCiAgICAgICAgewogICAgICAgICAgX01fZGF5bmFtZXMgPSBuZXcgYmFzaWNfc3Ry
aW5nPF9DaGFyVD5bMTRdOwogICAgICAgICAgZm9yIChpbnQgX19pID0gMDsgX19pIDwgMTQ7ICsr
X19pKQogICAgICAgICAgICBfTV9kYXluYW1lc1tfX2ldID0gX1dlZWtkYXluYW1lczxfQ2hhclQ+
OjpfU19uYW1lc1tfX2ldOwogICAgICAgIH0KICAgICAgYm9vbCBfX2F0X2VvZiA9IGZhbHNlOwog
ICAgICBpbnQgX19yZW1haW4gPSAwOwogICAgICBpbnQgX19tYXRjaGVzWzE0XTsKICAgICAgaXRl
cl90eXBlIF9fb3V0ID0gX19tYXRjaF9wYXJhbGxlbChfX3MsIF9fZW5kLCAxNCwgX01fZGF5bmFt
ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYXRjaGVzLCBf
X3JlbWFpbiwgX19hdF9lb2YpOwogICAgICBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKDApOwog
ICAgICBpZiAoX19hdF9lb2YpIF9fZXJyIHw9IF9faW8uZW9mYml0OwogICAgICBpZiAoX19yZW1h
aW4gPT0gMSB8fAogICAgICAgICAgX19yZW1haW4gPT0gMiAmJiAoX19tYXRjaGVzWzBdPj4xKSA9
PSAoX19tYXRjaGVzWzFdPj4xKSkKICAgICAgICBfX3QtPnRtX3dkYXkgPSAoX19tYXRjaGVzWzBd
Pj4xKTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IF9faW8uZmFpbGJpdDsKICAgICAgcmV0
dXJuIF9fb3V0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J
bkl0ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRv
X2dldF9tb250aG5hbWUoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLAogICAgICAgICAg
ICAgICAgICAgICBpb3NfYmFzZSYgX19pbywgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSog
X190KSBjb25zdAogICAgewogICAgICBpZiAoIV9NX21vbnRobmFtZXMpCiAgICAgICAgewogICAg
ICAgICAgX01fbW9udGhuYW1lcyA9IG5ldyBiYXNpY19zdHJpbmc8X0NoYXJUPlsyNF07CiAgICAg
ICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCAyNDsgKytfX2kpCiAgICAgICAgICAgIF9NX21v
bnRobmFtZXNbX19pXSA9IF9Nb250aG5hbWVzPF9DaGFyVD46Ol9TX25hbWVzW19faV07CiAgICAg
ICAgfQogICAgICBib29sIF9fYXRfZW9mID0gZmFsc2U7CiAgICAgIGludCBfX3JlbWFpbiA9IDA7
CiAgICAgIGludCBfX21hdGNoZXNbMjRdOwogICAgICBpdGVyX3R5cGUgX19vdXQgPSBfX21hdGNo
X3BhcmFsbGVsKCBfX3MsIF9fZW5kLCAyNCwgX01fbW9udGhuYW1lcywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYXRjaGVzLCBfX3JlbWFpbiwgX19hdF9lb2Yp
OwogICAgICBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKDApOwogICAgICBpZiAoX19hdF9lb2Yp
IF9fZXJyIHw9IF9faW8uZW9mYml0OwogICAgICBpZiAoX19yZW1haW4gPT0gMSB8fAogICAgICAg
ICAgX19yZW1haW4gPT0gMiAmJiAoX19tYXRjaGVzWzBdPj4xKSA9PSAoX19tYXRjaGVzWzFdPj4x
KSkKICAgICAgICBfX3QtPnRtX21vbiA9IChfX21hdGNoZXNbMF0+PjEpOwogICAgICBlbHNlCiAg
ICAgICAgX19lcnIgfD0gX19pby5mYWlsYml0OwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9Cn0K
IyA0MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMiAzCiMg
MzMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9vc3RyZWFtLnRjYyIgMiAzCgpuYW1l
c3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeTo6CiAgICBzZW50cnko
YmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3MpCiAgICA6IF9NX29rKF9fb3MuZ29v
ZCgpKSwgX01fb3MoX19vcykKICAgIHsKCiAgICAgIGlmIChfTV9vayAmJiBfX29zLnRpZSgpKQog
ICAgICAgIF9fb3MudGllKCktPmZsdXNoKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8KF9f
b3N0cmVhbV90eXBlJiAoKl9fcGYpKF9fb3N0cmVhbV90eXBlJikpCiAgICB7CiAgICAgIHNlbnRy
eSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy
eQogICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m
IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z
X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp
b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9y
PDwoX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpCiAgICB7CiAgICAgIHNlbnRyeSBf
X2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog
ICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f
ZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf
YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPDwo
aW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigq
dGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg
ICAgIHsgX19wZigqdGhpcyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog
ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoYm9vbCBfX24pCiAg
ICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg
IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNr
X2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgq
dGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46Om9wZXJhdG9yPDwobG9uZyBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo
aXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYyA9IHRoaXMtPmZpbGwoKTsKICAgICAgICAg
ICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6
OmJhc2VmaWVsZDsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkp
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGJvb2wgX19iID0gZmFsc2U7CiAg
ICAgICAgICAgICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3Nf
YmFzZTo6aGV4KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGxvbmcgX19sID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKTsKICAgICAg
ICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywg
X19sKS5mYWlsZWQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlz
LCBfX2MsIF9fbikuZmFpbGVkKCk7CiAgICAgICAgICAgICAgICAgIGlmIChfX2IpCiAgICAgICAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog
ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwodW5zaWduZWQgbG9u
ZyBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJi
KQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYg
KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1w
dXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg
IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg
ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg
ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0
aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGxvbmcgbG9uZyBfX24pCiAgICB7CiAgICAgIHNl
bnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg
IHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYyA9IHRoaXMtPmZp
bGwoKTsKICAgICAgICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFn
cygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFj
ZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGJvb2wg
X19iID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3Qg
fHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX2w7CiAgICAgICAgICAgICAgICAgICAg
ICBfX2wgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KF9fbik7CiAgICAgICAgICAg
ICAgICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbCku
ZmFpbGVkKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19j
LCBfX24pLmZhaWxlZCgpOwogICAgICAgICAgICAgICAgICBpZiAoX19iKQogICAgICAgICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg
ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0
KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9u
ZyBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJi
KQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYg
KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1w
dXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg
IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg
ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg
ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0
aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGRvdWJsZSBfX24pCiAgICB7CiAgICAgIHNlbnRy
eSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy
eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1w
dXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRo
aXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo
KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9y
PDwobG9uZyBkb3VibGUgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAg
ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAg
IGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFp
bGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg
ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0
KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGNvbnN0IHZvaWQqIF9fbikK
ICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg
ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hl
Y2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0
KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAg
ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo
dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg
ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPjo6b3BlcmF0b3I8PChfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4pCiAgICB7CiAgICAg
IHN0cmVhbXNpemUgX194dHJjdCA9IDA7CiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQg
PSB0aGlzLT5yZGJ1ZigpOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9f
c2JpbiAmJiBfX2NlcmIpCiAgICAgICAgX194dHJjdCA9IF9fY29weV9zdHJlYW1idWZzKCp0aGlz
LCBfX3NiaW4sIF9fc2JvdXQpOwogICAgICBpZiAoIV9fc2JpbiB8fCAhX194dHJjdCkKICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+OjpwdXQoY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigq
dGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaW50X3R5cGUgX19w
dXQgPSByZGJ1ZigpLT5zcHV0YyhfX2MpOwogICAgICAgICAgaWYgKF9fcHV0ICE9IHRyYWl0c190
eXBlOjp0b19pbnRfdHlwZShfX2MpKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojp3cml0
ZShjb25zdCBfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBf
X2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHN0cmVh
bXNpemUgX19wdXQgPSB0aGlzLT5yZGJ1ZigpLT5zcHV0bihfX3MsIF9fbik7CiAgICAgICAgICBp
ZiAoIF9fcHV0ICE9IF9fbikKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6Zmx1c2goKQog
ICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICBpZiAodGhpcy0+cmRidWYoKSAmJiB0aGlzLT5yZGJ1ZigpLT5wdWJzeW5j
KCkgPT0gLTEpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OnBvc190eXBlCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46
OnRlbGxwKCkKICAgIHsKICAgICAgcG9zX3R5cGUgX19yZXQgPSBwb3NfdHlwZSgtMSk7CiAgICAg
IGJvb2wgX190ZXN0b2sgPSB0aGlzLT5mYWlsKCkgIT0gdHJ1ZTsKCiAgICAgIGlmIChfX3Rlc3Rv
aykKICAgICAgICBfX3JldCA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoMCwgaW9zX2Jhc2U6
OmN1ciwgaW9zX2Jhc2U6Om91dCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2Vl
a3AocG9zX3R5cGUgX19wb3MpCiAgICB7CiAgICAgIGJvb2wgX190ZXN0b2sgPSB0aGlzLT5mYWls
KCkgIT0gdHJ1ZTsKCiAgICAgIGlmIChfX3Rlc3RvaykKICAgICAgICB7CgoKICAgICAgICAgIHBv
c190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla3BvcyhfX3BvcywgaW9zX2Jhc2U6
Om91dCk7CgoKICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQog
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShmYWlsYml0KTsKCiAgICAgICAgfQogICAgICByZXR1
cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzZWVrcChvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6
OnNlZWtkaXIgX19kKQogICAgewogICAgICBib29sIF9fdGVzdG9rID0gdGhpcy0+ZmFpbCgpICE9
IHRydWU7CgogICAgICBpZiAoX190ZXN0b2spCiAgICAgICAgewoKCiAgICAgICAgICBwb3NfdHlw
ZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoX19vZmYsIF9fZCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3V0
KTsKCgogICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGZhaWxiaXQpOwogICAgICAgIH0KCiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KIyA0NTcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9vc3RyZWFt
LnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IHZvaWQKICAgIF9fcGFkX2NoYXIoYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4mIF9faW9zLAog
ICAgICAgICAgICAgICBfQ2hhclQqIF9fbmV3cywgY29uc3QgX0NoYXJUKiBfX29sZHMsCiAgICAg
ICAgICAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19uZXdsZW4sIGNvbnN0IHN0cmVhbXNpemUgX19v
bGRsZW4pCiAgICB7CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRl
ZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBl
OjppbnRfdHlwZSBpbnRfdHlwZTsKCiAgICAgIGludF90eXBlIF9fcGxlbiA9IHN0YXRpY19jYXN0
PHNpemVfdD4oX19uZXdsZW4gLSBfX29sZGxlbik7CiAgICAgIGNoYXJfdHlwZSogX19wYWRzID0g
c3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoY2hhcl90eXBl
KSAqIF9fcGxlbikpOwogICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9fcGFkcywgX19wbGVuLCBf
X2lvcy5maWxsKCkpOwoKICAgICAgY2hhcl90eXBlKiBfX2JlZzsKICAgICAgY2hhcl90eXBlKiBf
X2VuZDsKICAgICAgc2l6ZV90IF9fbW9kID0gMDsKICAgICAgc2l6ZV90IF9fYmVnbGVuOwogICAg
ICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSBfX2lvcy5mbGFncygpICYgaW9zX2Jhc2U6OmFk
anVzdGZpZWxkOwoKICAgICAgaWYgKF9fZm10ID09IGlvc19iYXNlOjpsZWZ0KQogICAgICAgIHsK
CiAgICAgICAgICBfX2JlZyA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX19vbGRzKTsKICAgICAg
ICAgIF9fYmVnbGVuID0gX19vbGRsZW47CiAgICAgICAgICBfX2VuZCA9IF9fcGFkczsKICAgICAg
ICB9CiAgICAgIGVsc2UgaWYgKF9fZm10ID09IGlvc19iYXNlOjppbnRlcm5hbCkKICAgICAgICB7
CgoKCiAgICAgICAgICB0eXBlZGVmIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPiBfX2NhY2hlX3R5cGU7
CiAgICAgICAgICBfX2NhY2hlX3R5cGUgY29uc3QqIF9fZm10ID0gX19jYWNoZV90eXBlOjpfU19n
ZXQoX19pb3MpOwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX21pbnVzID0gdHJhaXRzX3R5
cGU6OmZpbmQoX19vbGRzLCBfX29sZGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZm10LT5fU19taW51cyk7CiAgICAgICAgICBjb25z
dCBjaGFyX3R5cGUqIF9fcGx1cyA9IHRyYWl0c190eXBlOjpmaW5kKF9fb2xkcywgX19vbGRsZW4s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Zm10LT5fU19wbHVzKTsKICAgICAgICAgIGJvb2wgX190ZXN0c2lnbiA9IF9fbWludXMgfHwgX19w
bHVzOwogICAgICAgICAgYm9vbCBfX3Rlc3RoZXggPSBfX29sZHNbMF0gPT0gJzAnCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICYmIChfX29sZHNbMV0gPT0gJ3gnIHx8IF9fb2xkc1sxXSA9PSAn
WCcpOwoKICAgICAgICAgIGlmIChfX3Rlc3RoZXgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBfX25ld3NbMF0gPSBfX29sZHNbMF07CiAgICAgICAgICAgICAgX19uZXdzWzFdID0gX19vbGRz
WzFdOwogICAgICAgICAgICAgIF9fbW9kICs9IDI7CiAgICAgICAgICAgICAgX19iZWcgPSBjb25z
dF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xkcyArIF9fbW9kKTsKICAgICAgICAgICAgICBfX2JlZ2xl
biA9IF9fb2xkbGVuIC0gX19tb2Q7CiAgICAgICAgICAgICAgX19lbmQgPSBfX3BhZHM7CiAgICAg
ICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdHNpZ24pCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBfX21vZCArPSBfX3BsZW47CiAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBl
KiBfX3NpZ24gPSBfX21pbnVzID8gX19taW51cyArIDE6IF9fcGx1cyArIDE7CiAgICAgICAgICAg
ICAgX19iZWcgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xkcyk7CiAgICAgICAgICAgICAg
X19iZWdsZW4gPSBfX3NpZ24gLSBfX29sZHM7CiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9j
YXN0PGNoYXJfdHlwZSo+KF9fc2lnbiArIF9fcGxlbik7CiAgICAgICAgICAgICAgdHJhaXRzX3R5
cGU6OmNvcHkoX19uZXdzICsgX19iZWdsZW4sIF9fcGFkcywgX19wbGVuKTsKICAgICAgICAgICAg
fQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIF9fYmVnID0gX19w
YWRzOwogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVuOwogICAgICAgICAgICAgIF9fZW5k
ID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29sZHMpOwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICBlbHNlCiAgICAgICAgewoKICAgICAgICAgIF9fYmVnID0gX19wYWRzOwogICAgICAg
ICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8Y2hhcl90
eXBlKj4oX19vbGRzKTsKICAgICAgICB9CgogICAgICB0cmFpdHNfdHlwZTo6Y29weShfX25ld3Ms
IF9fYmVnLCBfX2JlZ2xlbik7CiAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fbmV3cyArIF9fYmVn
bGVuLCBfX2VuZCwgX19uZXdsZW4gLSBfX2JlZ2xlbiAtIF9fbW9kKTsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mIF9fb3V0LCBfQ2hhclQgX19jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3Ry
ZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg
IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBf
X3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGlj
X2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fdykpOwog
ICAgICAgICAgICAgIF9fcGFkc1swXSA9IF9fYzsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9f
bGVuID0gMTsKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgIF9fcGFkX2NoYXIoX19vdXQsIF9fcGFkcywgJl9fYywgX193LCBf
X2xlbik7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcGFkcywgX19sZW4pOwogICAgICAgICAgICAgIF9f
b3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f
ZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3Nf
YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgogIHRlbXBsYXRlIDxjbGFzcyBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwo
YmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKQogICAgewogICAg
ICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAg
ICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAg
aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBjaGFy
KiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX3cgKyAxKSk7
CiAgICAgICAgICAgICAgX19wYWRzWzBdID0gX19jOwogICAgICAgICAgICAgIHN0cmVhbXNpemUg
X19sZW4gPSAxOwogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgX19wYWRfY2hhcihfX291dCwgX19wYWRzLCAmX19jLCBfX3cs
IF9fbGVuKTsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19wYWRzLCBfX2xlbik7CiAgICAgICAgICAgICAg
X19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg
X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlv
c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg
fQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9f
b3V0LCBjb25zdCBfQ2hhclQqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVh
bV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7
CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193
ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19j
YXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKICAg
ICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX1Ry
YWl0czo6bGVuZ3RoKF9fcykpOwogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWRfY2hhcihfX291dCwgX19wYWRzLCBf
X3MsIF9fdywgX19sZW4pOwogICAgICAgICAgICAgICAgICBfX3MgPSBfX3BhZHM7CiAgICAgICAg
ICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9f
b3V0LndyaXRlKF9fcywgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAg
ICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAg
ewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw
KQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl
dHVybiBfX291dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8
PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3Mp
CiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0
cmVhbV90eXBlOwoKCiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8Y2hhcj4gX19jdHJhaXRzX3R5
cGU7CgogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7
CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fY2xlbiA9IF9f
Y3RyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKICAgICAgICAgIF9DaGFyVCogX193cyA9IHN0YXRp
Y19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiAoX19jbGVu
ICsgMSkpKTsKICAgICAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8PSBfX2NsZW47ICsr
X19pKQogICAgICAgICAgICBfX3dzW19faV0gPSBfX291dC53aWRlbihfX3NbX19pXSk7CiAgICAg
ICAgICBfQ2hhclQqIF9fc3RyID0gX193czsKCiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihf
X2NsZW4pOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAg
ICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRp
bl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKCiAgICAgICAgICAgICAgaWYgKF9fdyA+
IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3BhZF9jaGFyKF9f
b3V0LCBfX3BhZHMsIF9fd3MsIF9fdywgX19sZW4pOwogICAgICAgICAgICAgICAgICBfX3N0ciA9
IF9fcGFkczsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zdHIsIF9fbGVuKTsKICAgICAgICAgICAgICBf
X291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf
X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9z
X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTxjbGFzcyBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwo
YmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcykKICAg
IHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+IF9fb3N0cmVhbV90
eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7
CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAg
ICAgY2hhciogX19wYWRzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX193
KSk7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNp
emU+KF9UcmFpdHM6Omxlbmd0aChfX3MpKTsKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4p
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkX2NoYXIoX19vdXQsIF9f
cGFkcywgX19zLCBfX3csIF9fbGVuKTsKICAgICAgICAgICAgICAgICAgX19zID0gX19wYWRzOwog
ICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICBfX291dC53cml0ZShfX3MsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgw
KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg
ICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp
dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JiBfX291dCwKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYgX19zdHIpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlw
ZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg
ICAgICAgY29uc3QgX0NoYXJUKiBfX3MgPSBfX3N0ci5kYXRhKCk7CiAgICAgICAgICBzdHJlYW1z
aXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRp
Y19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsK
ICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX3N0
ci5zaXplKCkpOwoKCgogICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgX19wYWRfY2hhcihfX291dCwgX19wYWRzLCBfX3MsIF9fdywgX19sZW4pOwog
ICAgICAgICAgICAgIF9fcyA9IF9fcGFkczsKICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAg
ICAgICAgICAgfQogICAgICAgICAgc3RyZWFtc2l6ZSBfX3JlcyA9IF9fb3V0LnJkYnVmKCktPnNw
dXRuKF9fcywgX19sZW4pOwogICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICBpZiAo
X19yZXMgIT0gX19sZW4pCiAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpmYWls
Yml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KfQojIDI3OSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9vc3RyZWFtLmgiIDIgMwojIDQxICIvdXNyL2xv
Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc3RyZWFtLmgiIDIgMwojIDEgIi91c3IvbG9j
YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAxIDMKIyAzOCAiL3Vzci9sb2Nh
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pc3RyZWFtLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMSAzCiMgNDAgIi91c3IvbG9jYWwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv
ZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvc3RkX2xpbWl0cy5oIiAxIDMKIyA0MSAiL3Vz
ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pc3RyZWFtLmgiIDIgMwoKbmFtZXNwYWNl
IHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGNsYXNzIGJhc2ljX2lzdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBiYXNpY19pb3M8X0NoYXJULCBf
VHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9U
cmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJU
LCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hh
clQsIF9UcmFpdHM+IF9faW9zX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRl
cmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBu
dW1fZ2V0PF9DaGFyVCwgX19pc3RyZWFtYnVmX2l0ZXI+IF9fbnVtZ2V0X3R5cGU7CiAgICAgIHR5
cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CgogICAgcHJvdGVjdGVkOgoKICAgICAg
c3RyZWFtc2l6ZSBfTV9nY291bnQ7CgogICAgcHVibGljOgoKICAgICAgZXhwbGljaXQKICAgICAg
YmFzaWNfaXN0cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQogICAgICB7CiAgICAgICAgdGhp
cy0+aW5pdChfX3NiKTsKICAgICAgICBfTV9nY291bnQgPSBzdHJlYW1zaXplKDApOwogICAgICB9
CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19pc3RyZWFtKCkKICAgICAgeyBfTV9nY291bnQg
PSBzdHJlYW1zaXplKDApOyB9CgoKICAgICAgY2xhc3Mgc2VudHJ5OwogICAgICBmcmllbmQgY2xh
c3Mgc2VudHJ5OwoKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihfX2lz
dHJlYW1fdHlwZSYgKCpfX3BmKShfX2lzdHJlYW1fdHlwZSYpKTsKCiAgICAgIF9faXN0cmVhbV90
eXBlJgogICAgICBvcGVyYXRvcj4+KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlwZSYpKTsK
CiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGlvc19iYXNlJiAoKl9fcGYp
KGlvc19iYXNlJikpOwoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGJv
b2wmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihzaG9ydCYg
X19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIHNo
b3J0JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oaW50JiBf
X24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgaW50
JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4obG9uZyYgX19u
KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcm
IF9fbik7CgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4obG9uZyBsb25n
JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQg
bG9uZyBsb25nJiBfX24pOwoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+
KGZsb2F0JiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oZG91
YmxlJiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4obG9uZyBk
b3VibGUmIF9fZik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih2b2lk
KiYgX19wKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KF9fc3RyZWFt
YnVmX3R5cGUqIF9fc2IpOwoKCiAgICAgIGlubGluZSBzdHJlYW1zaXplCiAgICAgIGdjb3VudCh2
b2lkKSBjb25zdAogICAgICB7IHJldHVybiBfTV9nY291bnQ7IH0KCiAgICAgIGludF90eXBlCiAg
ICAgIGdldCh2b2lkKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoY2hhcl90eXBl
JiBfX2MpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChjaGFyX3R5cGUqIF9fcywg
c3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJl
YW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAg
eyByZXR1cm4gZ2V0KF9fcywgX19uLCB0aGlzLT53aWRlbignXG4nKSk7IH0KCiAgICAgIF9faXN0
cmVhbV90eXBlJgogICAgICBnZXQoX19zdHJlYW1idWZfdHlwZSYgX19zYiwgY2hhcl90eXBlIF9f
ZGVsaW0pOwoKICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoX19zdHJlYW1i
dWZfdHlwZSYgX19zYikKICAgICAgeyByZXR1cm4gZ2V0KF9fc2IsIHRoaXMtPndpZGVuKCdcbicp
KTsgfQoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldGxpbmUoY2hhcl90eXBlKiBfX3Ms
IHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSk7CgogICAgICBpbmxpbmUgX19pc3Ry
ZWFtX3R5cGUmCiAgICAgIGdldGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQog
ICAgICB7IHJldHVybiBnZXRsaW5lKF9fcywgX19uLCB0aGlzLT53aWRlbignXG4nKSk7IH0KCiAg
ICAgIF9faXN0cmVhbV90eXBlJgogICAgICBpZ25vcmUoc3RyZWFtc2l6ZSBfX24gPSAxLCBpbnRf
dHlwZSBfX2RlbGltID0gdHJhaXRzX3R5cGU6OmVvZigpKTsKCiAgICAgIGludF90eXBlCiAgICAg
IHBlZWsodm9pZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgcmVhZChjaGFyX3R5cGUq
IF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgc3RyZWFtc2l6ZQogICAgICByZWFkc29tZShj
aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAg
ICAgIHB1dGJhY2soY2hhcl90eXBlIF9fYyk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAg
dW5nZXQodm9pZCk7CgogICAgICBpbnQKICAgICAgc3luYyh2b2lkKTsKCiAgICAgIHBvc190eXBl
CiAgICAgIHRlbGxnKHZvaWQpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtnKHBv
c190eXBlKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBzZWVrZyhvZmZfdHlwZSwgaW9z
X2Jhc2U6OnNlZWtkaXIpOwoKICAgIHByaXZhdGU6CgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAg
ICAgIG9wZXJhdG9yPShjb25zdCBfX2lzdHJlYW1fdHlwZSYpOwoKICAgICAgYmFzaWNfaXN0cmVh
bShjb25zdCBfX2lzdHJlYW1fdHlwZSYpOwoKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPjo6c2VudHJ5CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0
cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz
PiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBfX2lzdHJlYW1fdHlwZTo6X19j
dHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpp
bnRfdHlwZSBfX2ludF90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgc2VudHJ5KGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywgYm9vbCBfX25vc2tpcHdzID0gZmFsc2UpOwoK
ICAgICAgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuIF9NX29rOyB9CgogICAgcHJpdmF0ZToKICAg
ICAgYm9vbCBfTV9vazsKICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVy
YXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUJiBfX2Mp
OwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJh
aXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19pbiwg
dW5zaWduZWQgY2hhciYgX19jKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyJj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lz
dHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhciwg
X1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyJiBfX2MpCiAgICB7IHJldHVybiAoX19pbiA+PiBy
ZWludGVycHJldF9jYXN0PGNoYXImPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0No
YXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxj
aGFyLF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4m
IF9faW4sIHVuc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBi
YXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08
Y2hhcixfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX2lu
ID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pb3N0cmVhbQogICAg
OiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+LAogICAgICBwdWJsaWMgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBl
ZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAg
dHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7Cgog
ICAgICBleHBsaWNpdAogICAgICBiYXNpY19pb3N0cmVhbShiYXNpY19zdHJlYW1idWY8X0NoYXJU
LCBfVHJhaXRzPiogX19zYikKICAgICAgOiBfX2lzdHJlYW1fdHlwZShfX3NiKSwgX19vc3RyZWFt
X3R5cGUoX19zYikKICAgICAgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19pb3N0cmVh
bSgpIHsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIHdzKGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcyk7Cn0KCgoKCiMgMSAiL3Vzci9sb2NhbC9pbmNs
dWRlL2crKy12My9iaXRzL2lzdHJlYW0udGNjIiAxIDMKIyAzMiAiL3Vzci9sb2NhbC9pbmNsdWRl
L2crKy12My9iaXRzL2lzdHJlYW0udGNjIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9sb2NhbGUuaCIgMSAzCiMgMzMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv
Yml0cy9pc3RyZWFtLnRjYyIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9vc3RyZWFtLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv
aXN0cmVhbS50Y2MiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjpzZW50cnk6OgogICAgc2VudHJ5KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19p
biwgYm9vbCBfX25vc2tpcHdzKQogICAgewogICAgICBpZiAoX19pbi5nb29kKCkpCiAgICAgICAg
ewogICAgICAgICAgaWYgKF9faW4udGllKCkpCiAgICAgICAgICAgIF9faW4udGllKCktPmZsdXNo
KCk7CiAgICAgICAgICBpZiAoIV9fbm9za2lwd3MgJiYgKF9faW4uZmxhZ3MoKSAmIGlvc19iYXNl
Ojpza2lwd3MpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBf
X2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBjb25zdCBfX2N0eXBlX3R5
cGUqIF9fY3R5cGUgPSBfX2luLl9NX2dldF9mY3R5cGVfaW9zKCk7CiAgICAgICAgICAgICAgX19z
dHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgICAgICAgICBfX2ludF90
eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAgICAgIHdoaWxlIChfX2MgIT0gX19l
b2YgJiYgX19jdHlwZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYykpCiAgICAgICAgICAgICAg
ICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKCgoKICAgICAgICAgICAgICBpZiAoX19jID09IF9fZW9m
KQogICAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKCiAgICAg
ICAgICAgIH0KICAgICAgICB9CgogICAgICBpZiAoX19pbi5nb29kKCkpCiAgICAgICAgX01fb2sg
PSB0cnVlOwogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX01fb2sgPSBmYWxzZTsKICAg
ICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgIH0KICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+OjoKICAgIG9wZXJhdG9yPj4oX19pc3RyZWFtX3R5cGUmICgqX19wZikoX19pc3RyZWFtX3R5
cGUmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+OjoKICAgIG9wZXJhdG9yPj4oX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpCiAg
ICB7CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg
ICBvcGVyYXRvcj4+KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikpCiAgICB7CiAgICAgIF9f
cGYoKnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+
KGJvb2wmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAg
ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3Nf
YmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1n
ZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19l
cnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAg
ICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg
ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg
ICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oc2hvcnQmIF9fbikKICAgIHsKICAgICAg
c2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK
ICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01f
Zm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl
cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z
KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9w
ZXJhdG9yPj4odW5zaWduZWQgc2hvcnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigq
dGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3Nf
YmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2No
ZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0
aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
X19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK
ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6
YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oaW50JiBf
X24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9f
Y2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdv
b2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAg
ICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24p
OwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAg
ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo
dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg
ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYgX19uKQogICAgewogICAgICBz
ZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog
ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAg
ICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9m
bnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo
KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3Bl
cmF0b3I+Pihsb25nJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNl
KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3Rh
dGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChf
TV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRo
aXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAg
ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg
IHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcmIF9f
bikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19j
ZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29v
ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAg
ICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAg
ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0
aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg
ICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAg
IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGxvbmcgbG9uZyYgX19uKQogICAgewogICAgICBzZW50
cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg
ICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBf
X2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAg
ICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVt
Z2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv
biYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAm
IGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9y
Pj4odW5zaWduZWQgbG9uZyBsb25nJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo
aXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jh
c2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVj
a19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhp
cywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9f
ZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg
ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi
aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihmbG9hdCYg
X19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChf
X2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpn
b29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAg
ICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19u
KTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAg
ICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo
KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg
ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihkb3VibGUmIF9fbikKICAgIHsKICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19l
cnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAg
aWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdl
dC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m
IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z
X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp
b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9y
Pj4obG9uZyBkb3VibGUmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFs
c2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9z
dGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0
KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAq
dGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwog
ICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg
ICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg
ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh
PSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg
IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odm9pZComIF9fbikKICAg
IHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQog
ICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jh
c2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7
CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAg
ICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAg
ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBj
YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l
eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy
b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjoKICAgIG9wZXJhdG9yPj4oX19zdHJlYW1idWZfdHlwZSogX19zYm91dCkKICAgIHsKICAgICAg
c3RyZWFtc2l6ZSBfX3h0cmN0ID0gMDsKICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYmluID0g
dGhpcy0+cmRidWYoKTsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBp
ZiAoX19zYm91dCAmJiBfX2NlcmIpCiAgICAgICAgX194dHJjdCA9IF9fY29weV9zdHJlYW1idWZz
KCp0aGlzLCBfX3NiaW4sIF9fc2JvdXQpOwogICAgICBpZiAoIV9fc2JvdXQgfHwgIV9feHRyY3Qp
CiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4g
KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXQodm9pZCkKICAgIHsKICAgICAgY29u
c3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIGludF90eXBlIF9f
YyA9IF9fZW9mOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlz
LCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIF9fYyA9IHRoaXMtPnJkYnVmKCktPnNidW1wYygpOwoKICAg
ICAgICAgICAgICBpZiAoX19jICE9IF9fZW9mKQogICAgICAgICAgICAgICAgX01fZ2NvdW50ID0g
MTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICB9CiAgICAgICAg
ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz
LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg
dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX2M7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6CiAgICBnZXQoY2hhcl90eXBlJiBfX2MpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAg
ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg
IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5
cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19i
dWZ2YWwgPSB0aGlzLT5yZGJ1ZigpLT5zYnVtcGMoKTsKCiAgICAgICAgICAgICAgaWYgKF9fYnVm
dmFsICE9IF9fZW9mKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfTV9nY291
bnQgPSAxOwogICAgICAgICAgICAgICAgICBfX2MgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBl
KF9fYnVmdmFsKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxi
aXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAg
ICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk
Yml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldChjaGFyX3R5cGUqIF9fcywg
c3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQogICAgewogICAgICBfTV9nY291bnQg
PSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYiAm
JiBfX24gPiAxKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUo
X19kZWxpbSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlw
ZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJk
YnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAg
ICAgICAgICAgYm9vbCBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAgICAg
ICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKCiAgICAgICAgICAgICAgd2hpbGUgKF9N
X2djb3VudCA8IF9fbiAtIDEgJiYgIV9fdGVzdGVvZiAmJiAhX190ZXN0ZGVsaW0pCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19jaGFy
X3R5cGUoX19jKTsKICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAg
ICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgICAgICBfX3Rlc3Rlb2YgPSBf
X2MgPT0gX19lb2Y7CiAgICAgICAgICAgICAgICAgIF9fdGVzdGRlbGltID0gX19jID09IF9faWRl
bGltOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChfX3Rlc3RkZWxpbSB8fCBf
TV9nY291bnQgPT0gX19uIC0gMSkKICAgICAgICAgICAgICAgIF9fc2ItPnNwdXRiYWNrYyhfX2Mp
OwogICAgICAgICAgICAgIGlmIChfX3Rlc3Rlb2YpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj
ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u
cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgICAqX19zID0gY2hhcl90eXBlKCk7CiAgICAgIGlmICgh
X01fZ2NvdW50KQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAg
ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9f
c2IsIGNoYXJfdHlwZSBfX2RlbGltKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBz
ZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICBpbnRfdHlwZSBfX2M7CiAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3RoaXNf
c2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShf
X2RlbGltKTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBl
Ojplb2YoKTsKICAgICAgICAgICAgICBfX2MgPSBfX3RoaXNfc2ItPnNidW1wYygpOwogICAgICAg
ICAgICAgIGJvb2wgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07CiAgICAgICAgICAgICAg
Ym9vbCBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3Rw
dXQgPSB0cnVlOwoKICAgICAgICAgICAgICB3aGlsZSAoIV9fdGVzdGVvZiAmJiAhX190ZXN0ZGVs
aW0KICAgICAgICAgICAgICAgICAgICAmJiAoX190ZXN0cHV0ID0gX19zYi5zcHV0Yyh0cmFpdHNf
dHlwZTo6dG9fY2hhcl90eXBlKF9fYykpCiAgICAgICAgICAgICAgICAgICAgICAgICAhPSBfX2Vv
ZikpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAg
ICAgICAgICAgICAgICBfX2MgPSBfX3RoaXNfc2ItPnNidW1wYygpOwogICAgICAgICAgICAgICAg
ICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CiAgICAgICAgICAgICAgICAgIF9fdGVzdGRlbGlt
ID0gX19jID09IF9faWRlbGltOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChf
X3Rlc3RkZWxpbSB8fCAhX190ZXN0cHV0KQogICAgICAgICAgICAgICAgX190aGlzX3NiLT5zcHV0
YmFja2ModHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKTsKICAgICAgICAgICAgICBpZiAo
X190ZXN0ZW9mKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJp
dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAg
ICAgICAgICB7CgogICAgICAgICAgICAgIF9fdGhpc19zYi0+c3B1dGJhY2tjKHRyYWl0c190eXBl
Ojp0b19jaGFyX3R5cGUoX19jKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGlmICgh
X01fZ2NvdW50KQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAg
ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywg
c3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQogICAgewogICAgICBfTV9nY291bnQg
PSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikK
ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fc3Ry
ZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGludF90eXBl
IF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAg
ICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBl
KF9fZGVsaW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5
cGU6OmVvZigpOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVs
aW07CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CgogICAgICAg
ICAgICAgIHdoaWxlIChfTV9nY291bnQgPCBfX24gJiYgIV9fdGVzdGVvZiAmJiAhX190ZXN0ZGVs
aW0pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0c190
eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1
bXBjKCk7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgICBf
X3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CiAgICAgICAgICAgICAgICAgIF9fdGVzdGRlbGltID0g
X19jID09IF9faWRlbGltOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBpZiAoX190
ZXN0ZW9mKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAtLV9NX2djb3VudDsK
ICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoIV9fdGVzdGRlbGltKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAtLV9NX2djb3VudDsKICAgICAgICAgICAgICAg
ICAgX19zYi0+c3B1dGJhY2tjKHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7CiAgICAg
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp
CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6
OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgICAqX19zID0gY2hhcl90eXBlKCk7CiAgICAgIGlmICghX01fZ2NvdW50KQogICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OgogICAgaWdub3JlKHN0cmVhbXNpemUgX19uLCBpbnRfdHlwZSBfX2RlbGlt
KQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0
cnVlKTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX24gPiAwKQogICAgICAgIHsKICAgICAgICAgIHRy
eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0
cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29uc3QgaW50
X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1i
dWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19j
ID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RkZWxpbSA9IF9fYyA9
PSBfX2lkZWxpbTsKICAgICAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsK
CiAgICAgICAgICAgICAgX19uID0gbWluKF9fbiwgbnVtZXJpY19saW1pdHM8c3RyZWFtc2l6ZT46
Om1heCgpKTsKICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50IDwgX19uIC0gMSAmJiAhX190
ZXN0ZW9mICYmICFfX3Rlc3RkZWxpbSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwog
ICAgICAgICAgICAgICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CiAgICAgICAgICAgICAg
ICAgIF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGltOwogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgIGlmICgoX01fZ2NvdW50ID09IF9fbiAtIDEgJiYgIV9fdGVzdGVvZikgfHwgX190
ZXN0ZGVsaW0pCiAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICBpZiAo
X190ZXN0ZW9mKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJp
dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAg
ICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0
KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi
aXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmludF90
eXBlCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcGVlayh2b2lkKQog
ICAgewogICAgICBpbnRfdHlwZSBfX2MgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIF9NX2dj
b3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19j
ZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fYyA9IHRoaXMtPnJk
YnVmKCktPnNnZXRjKCk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAg
ICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0
KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi
aXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgICAgcmV0dXJuIF9fYzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHJlYWQoY2hhcl90eXBlKiBfX3MsIHN0
cmVhbXNpemUgX19uKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19j
ZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBp
ZiAoX19uID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBl
Ojplb2YoKTsKICAgICAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMt
PnJkYnVmKCk7CiAgICAgICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygp
OwogICAgICAgICAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKCiAgICAg
ICAgICAgICAgICAgIHdoaWxlIChfTV9nY291bnQgPCBfX24gLSAxICYmICFfX3Rlc3Rlb2YpCiAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgKl9fcysrID0gdHJhaXRz
X3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICAgICAgICAgKytfTV9nY291
bnQ7CiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAg
ICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgIGlmIChfX3Rlc3Rlb2YpCiAgICAgICAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsKICAg
ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAg
ICAgICAgICAqX19zKysgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAg
ICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg
ICAgICAgICB7CgoKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh
c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXpl
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcmVhZHNvbWUoY2hhcl90
eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBjb25zdCBpbnRfdHlwZSBfX2Vv
ZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg
ICAgaWYgKF9fbiA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0cnkKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX251bSA9IHRoaXMtPnJkYnVm
KCktPmluX2F2YWlsKCk7CiAgICAgICAgICAgICAgICAgIGlmIChfX251bSAhPSBzdGF0aWNfY2Fz
dDxzdHJlYW1zaXplPihfX2VvZikpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgX19udW0gPSBtaW4oX19udW0sIF9fbik7CiAgICAgICAgICAgICAgICAgICAgICBf
TV9nY291bnQgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0bihfX3MsIF9fbnVtKTsKICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgICAgIHsKCgogICAgICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg
ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog
ICAgICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZh
aWxiaXQpOwogICAgICByZXR1cm4gX01fZ2NvdW50OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcHV0YmFjayhj
aGFyX3R5cGUgX19jKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAg
ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAg
ICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAg
ICAgICAgIGlmICghX19zYiB8fCBfX3NiLT5zcHV0YmFja2MoX19jKSA9PSBfX2VvZikKICAgICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9
CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAg
ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAg
aWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAg
ICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+OjoKICAgIHVuZ2V0KHZvaWQpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAg
ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg
IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5
cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZf
dHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaWYgKCFfX3NiIHx8IF9f
ZW9mID09IF9fc2ItPnN1bmdldGMoKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m
IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z
X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp
b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW50CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OgogICAgc3luYyh2b2lkKQogICAgewogICAgICBpbnQgX19yZXQgPSB0cmFp
dHNfdHlwZTo6ZW9mKCk7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIo
KnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMt
PnJkYnVmKCk7CiAgICAgICAgICAgICAgaWYgKCFfX3NiIHx8IF9fcmV0ID09IF9fc2ItPnB1YnN5
bmMoKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fcmV0ID0gMDsKICAgICAgICAgICAg
fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg
IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg
ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19y
ZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIHR5cGVuYW1lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5cGUKICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICB0ZWxsZyh2b2lkKQogICAgewog
ICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKC0xKTsKICAgICAgX01fZ2NvdW50ID0gMDsK
ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg
ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgIF9fcmV0ID0gdGhp
cy0+cmRidWYoKS0+cHVic2Vla29mZigwLCBpb3NfYmFzZTo6Y3VyLCBpb3NfYmFzZTo6aW4pOwog
ICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg
ICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg
ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh
PSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg
IHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzZWVrZyhwb3NfdHlwZSBfX3BvcykKICAg
IHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7
CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK
CgogICAgICAgICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla3Bv
cyhfX3BvcywgaW9zX2Jhc2U6OmluKTsKCgogICAgICAgICAgICAgIGlmIChfX2VyciA9PSBwb3Nf
dHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoZmFpbGJp
dCk7CgogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAg
ICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk
Yml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNlZWtnKG9mZl90eXBlIF9fb2Zm
LCBpb3NfYmFzZTo6c2Vla2RpciBfX2RpcikKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAg
ICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAg
ewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHBvc190eXBlIF9f
ZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZihfX29mZiwgX19kaXIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpp
bik7CgoKICAgICAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkK
ICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGZhaWxiaXQpOwoKICAgICAgICAgICAgfQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg
ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpCiAgICB7CiAgICAgIHR5
cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAg
ICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7CiAg
ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19p
bi5nZXQoX19jKTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg
ICAgIHsKCgogICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg
ICAgICAgICAgICAgaWYgKChfX2luLmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9
IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAg
ZWxzZQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1
cm4gX19pbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+Pihi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCogX19zKQogICAgewog
ICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlw
ZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90
eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVk
ZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CiAgICAgIHN0cmVhbXNpemUgX19leHRyYWN0
ZWQgPSAwOwoKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19p
biwgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAg
ICAgICAgICB7CgogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19udW0gPSBfX2luLndpZHRoKCk7
CiAgICAgICAgICAgICAgaWYgKF9fbnVtID09IDApCiAgICAgICAgICAgICAgICBfX251bSA9IG51
bWVyaWNfbGltaXRzPHN0cmVhbXNpemU+OjptYXgoKTsKCiAgICAgICAgICAgICAgX19zdHJlYW1i
dWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgICAgICAgICBjb25zdCBfX2N0eXBl
X3R5cGUqIF9fY3R5cGUgPSBfX2luLl9NX2dldF9mY3R5cGVfaW9zKCk7CiAgICAgICAgICAgICAg
aW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5
cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAgICAgICAgICBib29sIF9fdGVzdHNwID0g
X19jdHlwZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7CiAgICAgICAgICAgICAgYm9vbCBf
X3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CgogICAgICAgICAgICAgIHdoaWxlIChfX2V4dHJhY3Rl
ZCA8IF9fbnVtIC0gMSAmJiAhX190ZXN0ZW9mICYmICFfX3Rlc3RzcCkKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgKl9fcysrID0gX19jOwogICAgICAgICAgICAgICAgICArK19f
ZXh0cmFjdGVkOwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAg
ICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAgICAgICBf
X3Rlc3RzcCA9IF9fY3R5cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOwogICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICBpZiAoIV9fdGVzdGVvZikKICAgICAgICAgICAgICAgIF9f
c2ItPnNwdXRiYWNrYyhfX2MpOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9f
aW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CgoKCiAgICAgICAgICAgICAgKl9fcyA9IGNo
YXJfdHlwZSgpOwoKICAgICAgICAgICAgICBfX2luLndpZHRoKDApOwogICAgICAgICAgICB9CiAg
ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAg
ICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo
KF9faW4uZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg
ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBpZiAoIV9fZXh0cmFjdGVk
KQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4g
X19pbjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgd3MoYmFzaWNfaXN0cmVh
bTxfQ2hhclQsX1RyYWl0cz4mIF9faW4pCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50
X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmNoYXJfdHlwZSBf
X2NoYXJfdHlwZTsKCiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7
CiAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX19jdHlwZSA9IF9faW4uX01fZ2V0X2ZjdHlwZV9p
b3MoKTsKICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAg
ICBfX2ludF90eXBlIF9fYzsKICAgICAgYm9vbCBfX3Rlc3Rlb2Y7CiAgICAgIGJvb2wgX190ZXN0
c3A7CgogICAgICBkbwogICAgICAgIHsKICAgICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwog
ICAgICAgICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgX190ZXN0c3AgPSBf
X2N0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKTsKICAgICAgICB9CiAgICAgIHdoaWxl
ICghX190ZXN0ZW9mICYmIF9fdGVzdHNwKTsKCiAgICAgIGlmICghX190ZXN0ZW9mICYmICFfX3Rl
c3RzcCkKICAgICAgICBfX3NiLT5zcHV0YmFja2MoX19jKTsKICAgICAgZWxzZQogICAgICAgIF9f
aW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CgogICAgICByZXR1cm4gX19pbjsKICAgIH0K
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+
PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAgICAgICAgICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKQogICAgewogICAgICB0
eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBf
X3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpf
X2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc2l6ZV90eXBl
IF9fZXh0cmFjdGVkID0gMDsKCiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkg
X19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAg
ICBfX3N0ci5lcmFzZSgpOwogICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX2luLndpZHRoKCk7
CiAgICAgICAgICBfX3NpemVfdHlwZSBfX247CiAgICAgICAgICBfX24gPSBfX3cgPiAwID8gc3Rh
dGljX2Nhc3Q8X19zaXplX3R5cGU+KF9fdykgOiBfX3N0ci5tYXhfc2l6ZSgpOwoKICAgICAgICAg
IF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICBjb25zdCBf
X2N0eXBlX3R5cGUqIF9fY3R5cGUgPSBfX2luLl9NX2dldF9mY3R5cGVfaW9zKCk7CiAgICAgICAg
ICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgY29uc3QgX19pbnRf
dHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICAgICAgYm9vbCBfX3Rlc3RzcCA9IF9f
Y3R5cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOwogICAgICAgICAgYm9vbCBfX3Rlc3Rl
b2YgPSBfX2MgPT0gX19lb2Y7CgogICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwgX19uICYm
ICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdHNwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19z
dHIgKz0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgKytfX2V4dHJh
Y3RlZDsKICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICBf
X3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CiAgICAgICAgICAgICAgX190ZXN0c3AgPSBfX2N0eXBl
LT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYg
KCFfX3Rlc3Rlb2YpCiAgICAgICAgICAgIF9fc2ItPnNwdXRiYWNrYyhfX2MpOwogICAgICAgICAg
ZWxzZQogICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAg
ICAgX19pbi53aWR0aCgwKTsKICAgICAgICB9CgoKICAgICAgaWYgKCFfX2V4dHJhY3RlZCkKICAg
ICAgICBfX2luLnNldHN0YXRlIChpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICByZXR1cm4gX19p
bjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBn
ZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKICAgICAgICAgICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsIF9DaGFyVCBfX2Rl
bGltKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBf
X2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50
X3R5cGUgX19pbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6
X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVm
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7
CgogICAgICBfX3NpemVfdHlwZSBfX2V4dHJhY3RlZCA9IDA7CiAgICAgIGJvb2wgX190ZXN0ZGVs
aW0gPSBmYWxzZTsKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIo
X19pbiwgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgX19zdHIu
ZXJhc2UoKTsKICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbiA9IF9fc3RyLm1heF9zaXplKCk7Cgog
ICAgICAgICAgX19pbnRfdHlwZSBfX2lkZWxpbSA9IF9UcmFpdHM6OnRvX2ludF90eXBlKF9fZGVs
aW0pOwogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAg
ICAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICBjb25zdCBf
X2ludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgICAgICBfX3Rlc3RkZWxpbSA9
IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9m
OwoKICAgICAgICAgIHdoaWxlIChfX2V4dHJhY3RlZCA8PSBfX24gJiYgIV9fdGVzdGVvZiAmJiAh
X190ZXN0ZGVsaW0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0ciArPSBfVHJhaXRz
Ojp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOwogICAgICAg
ICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9f
YyA9PSBfX2VvZjsKICAgICAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsK
ICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9fdGVzdGVvZikKICAgICAgICAgICAgX19pbi5z
ZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICB9CiAgICAgIGlmICghX19leHRyYWN0
ZWQgJiYgIV9fdGVzdGRlbGltKQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxi
aXQpOwogICAgICByZXR1cm4gX19pbjsKICAgIH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBj
bGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYg
X19pbiwKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9f
c3RyKQogICAgeyByZXR1cm4gZ2V0bGluZShfX2luLCBfX3N0ciwgX19pbi53aWRlbignXG4nKSk7
IH0KfQojIDI5MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pc3RyZWFtLmgi
IDIgMwojIDQyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc3RyZWFtLmgi
IDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgZXh0ZXJuIGlzdHJlYW0gY2luOwogIGV4dGVybiBvc3Ry
ZWFtIGNvdXQ7CiAgZXh0ZXJuIG9zdHJlYW0gY2VycjsKICBleHRlcm4gb3N0cmVhbSBjbG9nOwoK
ICBleHRlcm4gd2lzdHJlYW0gd2NpbjsKICBleHRlcm4gd29zdHJlYW0gd2NvdXQ7CiAgZXh0ZXJu
IHdvc3RyZWFtIHdjZXJyOwogIGV4dGVybiB3b3N0cmVhbSB3Y2xvZzsKCgoKICBzdGF0aWMgaW9z
X2Jhc2U6OkluaXQgX19pb2luaXQ7Cn0KIyAzMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9p
b3N0cmVhbSIgMiAzCiMgMiAicHJvYmxlbS5jYyIgMgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmRv
dWJsZSB2YWxzW10gPSB7IDAuMjQ0OTEwMDY1NTY2MDUzNDkxOTgsCiAgICAgICAgICAgICAgICAg
IDAuMjQ2MzI4MDI0OTEwNTY1NDkwNjYsCiAgICAgICAgICAgICAgICAgIDAuMjUxNDEzMTI2MTY3
OTYyNjg2MDksCiAgICAgICAgICAgICAgICAgIDAuMjI5OTMwODk3MTcwODQzNTAxMjEgfTsKCnZv
aWQgYmVsb3dfb3JfZXF1YWwoIGRvdWJsZSBEaXN0YW5jZSApewogIGNlcnIgPDwgIiAgIGJlbG93
IG9yIGVxdWFsICIgPDwgRGlzdGFuY2UgPDwgZW5kbDsKfQoKdm9pZCBhYm92ZSggZG91YmxlIERp
c3RhbmNlLCBkb3VibGUgVHJlc2hvbGQgKXsKICBjZXJyIDw8ICJhYm92ZSAiIDw8IERpc3RhbmNl
IDw8IGVuZGw7CiAgaWYgKCBEaXN0YW5jZSA8PSBUcmVzaG9sZCApewogICAgY2VyciA8PCAiYnV0
IFdPVywgdGhhdHMgYSBMSUU/IiA8PCBlbmRsOwogIH0KfQoKaW50IG1haW4oKXsKICBkb3VibGUg
RGlzdGFuY2UgPSAwLjA7CiAgZG91YmxlIFRyZXNob2xkID0gMS4wOwogIGNlcnIucHJlY2lzaW9u
KDgwKTsKICBpbnQgbWF4ID0gNDsKICB3aGlsZSAoIC0tbWF4ICl7CiAgICBEaXN0YW5jZSA9IDAu
MDsKICAgIGZvciAoIGludCBpID0gMDsgaSA8IDQ7IGkrKykgewogICAgICBEaXN0YW5jZSArPSB2
YWxzW2ldOwogICAgfQogICAgaWYgKCBEaXN0YW5jZSA8PSBUcmVzaG9sZCApewogICAgICBiZWxv
d19vcl9lcXVhbCggRGlzdGFuY2UgKTsKICAgICAgVHJlc2hvbGQgPSBEaXN0YW5jZTsKICAgIH0K
ICAgIGVsc2UKICAgICAgYWJvdmUoIERpc3RhbmNlLCBUcmVzaG9sZCApOwogIH0KICBleGl0KCAw
ICk7Cn0K


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

* Re: optimization/4358: optimized code produces incorrect results
@ 2001-09-28 21:33 aoliva
  0 siblings, 0 replies; 2+ messages in thread
From: aoliva @ 2001-09-28 21:33 UTC (permalink / raw)
  To: Ko.vanderSloot, gcc-bugs, gcc-prs, nobody

Synopsis: optimized code produces incorrect results

State-Changed-From-To: open->closed
State-Changed-By: aoliva
State-Changed-When: Fri Sep 28 21:33:29 2001
State-Changed-Why:
    You're falling prey of the excess precision of the x86 floating point registers.  Try -ffloat-store.

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view&pr=4358&database=gcc


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

end of thread, other threads:[~2001-09-28 21:33 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-09-19  4:36 optimization/4358: optimized code produces incorrect results Ko.vanderSloot
2001-09-28 21:33 aoliva

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).