public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
From: jcownie@etnus.com
To: gcc-gnats@gcc.gnu.org
Cc: <chan1@llnl.gov>
Subject: debug/2714: Stabs truncated on AIX
Date: Wed, 02 May 2001 09:36:00 -0000	[thread overview]
Message-ID: <20010502163540.11449.qmail@sourceware.cygnus.com> (raw)

>Number:         2714
>Category:       debug
>Synopsis:       Stabs truncated on AIX
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed May 02 09:36:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Bor Chan
>Release:        2.95.2
>Organization:
>Environment:
AIX 
>Description:
gcc believes that it can emit arbitrarily long stab strings
on AIX (xcoffout.h contains  #define DBX_CONTIN_LENGTH 0).
Howeverm the assembler truncates stabs trings after 32767
characters.

In C++ code using the STL it is possible to exceed this limit.
>How-To-Repeat:
Compile the code -g and then objdump --syms the .o file.
Observe that the stabs for _Rb_tree<basic_string<char,string_char_traits<char>,
etc... is truncated after 32767 characters.
>Fix:
Turn on stab continuations in xcoff.
You might also need to worry about the fact that IBM use
? as the continuation marker, rather than \ as the last
character of a continued stab.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="tv2737.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="tv2737.ii"

IyAxICJ0djI3MzcuY3h4IgojIDEgIi9ob21lL3R2L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUu
Mi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjIuMS4wLzIuOTUuMi8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL2lvc3RyZWFtIiAxIDMKIAogCgoKCiMgMSAiL2hvbWUvdHYvdG9vbHMvZ251
L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45
NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaW9zdHJlYW0uaCIgMSAzCiAKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCiMgMSAiL2hvbWUvdHYvdG9vbHMv
Z251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAv
Mi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDEgMwogCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKI3ByYWdtYSBpbnRlcmZhY2UKCgogICAKCgoKZXh0ZXJuICJD
IiB7CiMgMSAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGli
L3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv
bGliaW8uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL2hvbWUvdHYv
dG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQu
Mi4xLjAvMi45NS4yLy4uLy4uLy4uLy4uL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvaW5jbHVkZS9f
R19jb25maWcuaCIgMSAzIDQKICAKCgoKCgoKCgoKdHlwZWRlZiAgICAgICAgICBpbnQgICBfR19p
bnQ4X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVk
IGludCAgX0dfdWludDhfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX1FJX18pKSk7CnR5cGVk
ZWYgICAgICAgICAgaW50ICBfR19pbnQxNl90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fSElf
XykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1dGVfXygoX19t
b2RlX18oX19ISV9fKSkpOwp0eXBlZGVmICAgICAgICAgIGludCAgX0dfaW50MzJfdCBfX2F0dHJp
YnV0ZV9fKChfX21vZGVfXyhfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQz
Ml90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fU0lfXykpKTsKdHlwZWRlZiAgICAgICAgICBp
bnQgIF9HX2ludDY0X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19ESV9fKSkpOwp0eXBlZGVm
IHVuc2lnbmVkIGludCBfR191aW50NjRfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0RJX18p
KSk7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIF9HX2xsb25nOwpfX2V4dGVuc2lv
bl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9HX3VsbG9uZzsKCgoKCgoKCgp0eXBlZGVm
IGludCBfR19jbG9ja190Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX0dfZGV2X3Q7CnR5cGVkZWYg
bG9uZyBfR19mcG9zX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfR19naWRfdDsKdHlwZWRlZiB1
bnNpZ25lZCBsb25nIF9HX2lub190Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX0dfbW9kZV90Owp0
eXBlZGVmIHNob3J0IF9HX25saW5rX3Q7CnR5cGVkZWYgbG9uZyBfR19vZmZfdDsKdHlwZWRlZiBp
bnQgX0dfcGlkX3Q7CgoKCnR5cGVkZWYgaW50IF9HX3B0cmRpZmZfdDsKdHlwZWRlZiBpbnQgICBf
R19zaWdzZXRfdDsKCgoKdHlwZWRlZiBsb25nIHVuc2lnbmVkIGludCBfR19zaXplX3Q7CnR5cGVk
ZWYgbG9uZyBfR190aW1lX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfR191aWRfdDsKdHlwZWRl
ZiBzaG9ydCB1bnNpZ25lZCBpbnQgX0dfd2NoYXJfdDsKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBz
aWduZWQgaW50IF9HX3NzaXplX3Q7CnR5cGVkZWYgaW50IF9HX3dpbnRfdDsKdHlwZWRlZiBjaGFy
ICogX0dfdmFfbGlzdDsKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi9ob21lL3R2L3Rvb2xzL2dudS9y
czYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjIuMS4wLzIuOTUu
Mi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAoKCgoKCgogCgoKIyAxOSAiL2hvbWUvdHYvdG9vbHMv
Z251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAv
Mi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvaG9t
ZS90di90b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0t
YWl4NC4yLjEuMC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CgoKIAoKCgoKCiAKCgoKCgoK
CgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMgMTMxICIvaG9tZS90di90b29scy9nbnUvcnM2MDAw
L2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvaW5j
bHVkZS9zdGRkZWYuaCIgMyA0CgoKIAoKIAoKIyAxOTAgIi9ob21lL3R2L3Rvb2xzL2dudS9yczYw
MDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjIuMS4wLzIuOTUuMi9p
bmNsdWRlL3N0ZGRlZi5oIiAzIDQKCgoKIAoKCgoKIAoKIyAyNzEgIi9ob21lL3R2L3Rvb2xzL2du
dS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjIuMS4wLzIu
OTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKCgojIDI4MyAiL2hvbWUvdHYvdG9vbHMvZ251L3Jz
NjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4y
L2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoKCiAKCiAKCiMgMzE3ICIvaG9tZS90di90b29scy9nbnUv
cnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1
LjIvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgODYg
Ii9ob21lL3R2L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dlcnBj
LWlibS1haXg0LjIuMS4wLzIuOTUuMi8uLi8uLi8uLi8uLi9wb3dlcnBjLWlibS1haXg0LjIuMS4w
L2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMyA0CgoKIyAzMCAiL2hvbWUvdHYvdG9vbHMvZ251L3Jz
NjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4y
Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGliaW8uaCIgMiAzCgoKCgoKCgoKCgoKCgoKCgoK
IyA1NSAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bv
d2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGli
aW8uaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgojIDEwNCAiL2hv
bWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJt
LWFpeDQuMi4xLjAvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGliaW8uaCIgMwoK
CgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
c3RydWN0IF9JT19qdW1wX3Q7ICBzdHJ1Y3QgX0lPX0ZJTEU7CgogCiMgMTc0ICIvaG9tZS90di90
b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4y
LjEuMC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9saWJpby5oIiAzCgoKCgoKCgoK
CiAgICB0eXBlZGVmIHZvaWQgX0lPX2xvY2tfdDsKCgoKCgogCgpzdHJ1Y3QgX0lPX21hcmtlciB7
CiAgc3RydWN0IF9JT19tYXJrZXIgKl9uZXh0OwogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CiAg
IAoKICAgCiAgaW50IF9wb3M7CiMgMjA3ICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2djYy0y
Ljk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvLi4vLi4vLi4v
Li4vaW5jbHVkZS9nKystMy9saWJpby5oIiAzCgp9OwoKc3RydWN0IF9JT19GSUxFIHsKICBpbnQg
X2ZsYWdzOwkJIAoKCiAgIAogICAKICBjaGFyKiBfSU9fcmVhZF9wdHI7CSAKICBjaGFyKiBfSU9f
cmVhZF9lbmQ7CSAKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwkgCiAgY2hhciogX0lPX3dyaXRlX2Jh
c2U7CSAKICBjaGFyKiBfSU9fd3JpdGVfcHRyOwkgCiAgY2hhciogX0lPX3dyaXRlX2VuZDsJIAog
IGNoYXIqIF9JT19idWZfYmFzZTsJIAogIGNoYXIqIF9JT19idWZfZW5kOwkgCiAgIAogIGNoYXIg
Kl9JT19zYXZlX2Jhc2U7ICAKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7ICAgCiAgY2hhciAqX0lP
X3NhdmVfZW5kOyAgCgogIHN0cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9J
T19GSUxFICpfY2hhaW47CgogIGludCBfZmlsZW5vOwogIGludCBfYmxrc2l6ZTsKCgoKICBfR19v
ZmZfdCAgX29mZnNldDsKCgoKICAgCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgY2hh
ciBfdW51c2VkOwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKICAgCgoKCgoKCgoKfTsKCgoKCgoKCgoK
CgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT19z
dGRpbl8sIF9JT19zdGRvdXRfLCBfSU9fc3RkZXJyXzsKCgoKCgogCnR5cGVkZWYgc3RydWN0CnsK
ICBfR19zc2l6ZV90ICAoKnJlYWQpICAoc3RydWN0IF9JT19GSUxFICosIHZvaWQgKiwgX0dfc3Np
emVfdCApICA7CiAgX0dfc3NpemVfdCAgKCp3cml0ZSkgIChzdHJ1Y3QgX0lPX0ZJTEUgKiwgY29u
c3Qgdm9pZCAqLCBfR19zc2l6ZV90ICkgIDsKICBfR19mcG9zX3QgICgqc2VlaykgIChzdHJ1Y3Qg
X0lPX0ZJTEUgKiwgX0dfb2ZmX3QgLCBpbnQpICA7CiAgaW50ICgqY2xvc2UpICAoc3RydWN0IF9J
T19GSUxFICopICA7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdDsKCiAKc3RydWN0IF9JT19j
b29raWVfZmlsZQp7CiAgc3RydWN0IF9JT19GSUxFIGZpbGU7CiAgY29uc3Qgdm9pZCAqdnRhYmxl
OwogIHZvaWQgKmNvb2tpZTsKICBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IGlvX2Z1bmN0aW9u
czsKfTsKCgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAgKF9JT19GSUxF
ICopICA7CmV4dGVybiBpbnQgX191ZmxvdyAgKF9JT19GSUxFICopICA7CmV4dGVybiBpbnQgX19v
dmVyZmxvdyAgKF9JT19GSUxFICosIGludCkgIDsKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gaW50
IF9JT19nZXRjICAoX0lPX0ZJTEUgKl9fZnApICA7CmV4dGVybiBpbnQgX0lPX3B1dGMgIChpbnQg
X19jLCBfSU9fRklMRSAqX19mcCkgIDsKZXh0ZXJuIGludCBfSU9fZmVvZiAgKF9JT19GSUxFICpf
X2ZwKSAgOwpleHRlcm4gaW50IF9JT19mZXJyb3IgIChfSU9fRklMRSAqX19mcCkgIDsKCmV4dGVy
biBpbnQgX0lPX3BlZWtjX2xvY2tlZCAgKF9JT19GSUxFICpfX2ZwKSAgOwoKIAoKCgpleHRlcm4g
dm9pZCBfSU9fZmxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxv
Y2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlICAoX0lP
X0ZJTEUgKikgIDsKCgoKCgoKCgoKCgoKCmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYgIChfSU9fRklM
RSAqLCBjb25zdCBjaGFyICosIF9HX3ZhX2xpc3QgLCBpbnQgKikgIDsKZXh0ZXJuIGludCBfSU9f
dmZwcmludGYgIChfSU9fRklMRSAqLCBjb25zdCBjaGFyICosIF9HX3ZhX2xpc3QgKSAgOwpleHRl
cm4gX0dfc3NpemVfdCAgX0lPX3BhZG4gIChfSU9fRklMRSAqLCBpbnQsIF9HX3NzaXplX3QgKSAg
OwpleHRlcm4gX0dfc2l6ZV90ICBfSU9fc2dldG4gIChfSU9fRklMRSAqLCB2b2lkICosIF9HX3Np
emVfdCApICA7CgoKCgoKZXh0ZXJuIF9HX2Zwb3NfdCAgX0lPX3NlZWtvZmYgIChfSU9fRklMRSAq
LCBfR19vZmZfdCAsIGludCwgaW50KSAgOwpleHRlcm4gX0dfZnBvc190ICBfSU9fc2Vla3BvcyAg
KF9JT19GSUxFICosIF9HX2Zwb3NfdCAsIGludCkgIDsKCgpleHRlcm4gdm9pZCBfSU9fZnJlZV9i
YWNrdXBfYXJlYSAgKF9JT19GSUxFICopICA7CgoKfQoKCgojIDM2ICIvaG9tZS90di90b29scy9n
bnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8y
Ljk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMiAzCgp9CiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gIkMrKyIgewpjbGFzcyBpc3RyZWFtOyAgCmNs
YXNzIG9zdHJlYW07IGNsYXNzIHN0cmVhbWJ1ZjsKCiAKCgoKCgoKCnR5cGVkZWYgX0dfb2ZmX3Qg
IHN0cmVhbW9mZjsKdHlwZWRlZiBfR19mcG9zX3QgIHN0cmVhbXBvczsKCnR5cGVkZWYgX0dfc3Np
emVfdCAgc3RyZWFtc2l6ZTsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX2ZtdGZsYWdzOwp0eXBl
ZGVmIHVuc2lnbmVkIGNoYXIgX19pb3N0YXRlOwoKc3RydWN0IF9pb3NfZmllbGRzCnsgIAogICAg
c3RyZWFtYnVmICpfc3RyYnVmOwogICAgb3N0cmVhbSogX3RpZTsKICAgIGludCBfd2lkdGg7CiAg
ICBfX2ZtdGZsYWdzIF9mbGFnczsKICAgIHNob3J0ICBfZmlsbDsKICAgIF9faW9zdGF0ZSBfc3Rh
dGU7CiAgICBfX2lvc3RhdGUgX2V4Y2VwdGlvbnM7CiAgICBpbnQgX3ByZWNpc2lvbjsKCiAgICB2
b2lkICpfYXJyYXlzOyAgCn07CgoKCgoKCgoKCgoKCgoKCiMgMTI0ICIvaG9tZS90di90b29scy9n
bnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8y
Ljk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMwoKCmNsYXNzIGlv
cyA6IHB1YmxpYyBfaW9zX2ZpZWxkcyB7CiAgaW9zJiBvcGVyYXRvcj0oaW9zJik7ICAgCiAgaW9z
IChjb25zdCBpb3MmKTsgIAogIHB1YmxpYzoKICAgIHR5cGVkZWYgX19mbXRmbGFncyBmbXRmbGFn
czsKICAgIHR5cGVkZWYgaW50IGlvc3RhdGU7CiAgICB0eXBlZGVmIGludCBvcGVubW9kZTsKICAg
IHR5cGVkZWYgX0dfc3NpemVfdCAgc3RyZWFtc2l6ZTsKICAgIGVudW0gaW9fc3RhdGUgewoJZ29v
ZGJpdCA9IDAgLAoJZW9mYml0ID0gMSAsCglmYWlsYml0ID0gMiAsCgliYWRiaXQgPSA0ICB9Owog
ICAgZW51bSBvcGVuX21vZGUgewoJaW4gPSAxICwKCW91dCA9IDIgLAoJYXRlID0gNCAsCglhcHAg
PSA4ICwKCXRydW5jID0gMTYgLAoJbm9jcmVhdGUgPSAzMiAsCglub3JlcGxhY2UgPSA2NCAsCgli
aW4gPSAxMjggLCAgCgliaW5hcnkgPSAxMjggIH07CiAgICBlbnVtIHNlZWtfZGlyIHsgYmVnLCBj
dXIsIGVuZH07CiAgICB0eXBlZGVmIGVudW0gc2Vla19kaXIgc2Vla2RpcjsKICAgICAKICAgIGVu
dW0geyBza2lwd3M9IDAxICwKCSAgIGxlZnQ9IDAyICwgcmlnaHQ9IDA0ICwgaW50ZXJuYWw9IDAx
MCAsCgkgICBkZWM9IDAyMCAsIG9jdD0gMDQwICwgaGV4PSAwMTAwICwKCSAgIHNob3diYXNlPSAw
MjAwICwgc2hvd3BvaW50PSAwNDAwICwKCSAgIHVwcGVyY2FzZT0gMDEwMDAgLCBzaG93cG9zPSAw
MjAwMCAsCgkgICBzY2llbnRpZmljPSAwNDAwMCAsIGZpeGVkPSAwMTAwMDAgLAoJICAgdW5pdGJ1
Zj0gMDIwMDAwICwgc3RkaW89IDA0MDAwMCAKCgoKCSAgIH07CiAgICBlbnVtIHsgIAoJYmFzZWZp
ZWxkPWRlYytvY3QraGV4LAoJZmxvYXRmaWVsZCA9IHNjaWVudGlmaWMrZml4ZWQsCglhZGp1c3Rm
aWVsZCA9IGxlZnQrcmlnaHQraW50ZXJuYWwKICAgIH07CgojIDE3NyAiL2hvbWUvdHYvdG9vbHMv
Z251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAv
Mi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDMKCgogICAgb3N0
cmVhbSogdGllKCkgY29uc3QgeyByZXR1cm4gX3RpZTsgfQogICAgb3N0cmVhbSogdGllKG9zdHJl
YW0qIHZhbCkgeyBvc3RyZWFtKiBzYXZlPV90aWU7IF90aWU9dmFsOyByZXR1cm4gc2F2ZTsgfQoK
ICAgICAKICAgIHNob3J0ICBmaWxsKCkgY29uc3QgeyByZXR1cm4gX2ZpbGw7IH0KICAgIHNob3J0
ICBmaWxsKHNob3J0ICBuZXdmKQoJe3Nob3J0ICBvbGRmID0gX2ZpbGw7IF9maWxsID0gbmV3Zjsg
cmV0dXJuIG9sZGY7fQogICAgZm10ZmxhZ3MgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBfZmxhZ3M7
IH0KICAgIGZtdGZsYWdzIGZsYWdzKGZtdGZsYWdzIG5ld192YWwpIHsKCWZtdGZsYWdzIG9sZF92
YWwgPSBfZmxhZ3M7IF9mbGFncyA9IG5ld192YWw7IHJldHVybiBvbGRfdmFsOyB9CiAgICBpbnQg
cHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gX3ByZWNpc2lvbjsgfQogICAgaW50IHByZWNpc2lv
bihpbnQgbmV3cCkgewoJdW5zaWduZWQgc2hvcnQgb2xkcCA9IF9wcmVjaXNpb247IF9wcmVjaXNp
b24gPSAodW5zaWduZWQgc2hvcnQpbmV3cDsKCXJldHVybiBvbGRwOyB9CiAgICBmbXRmbGFncyBz
ZXRmKGZtdGZsYWdzIHZhbCkgewoJZm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFnczsKCV9mbGFncyB8
PSB2YWw7IHJldHVybiBvbGRiaXRzOyB9CiAgICBmbXRmbGFncyBzZXRmKGZtdGZsYWdzIHZhbCwg
Zm10ZmxhZ3MgbWFzaykgewoJZm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFnczsKCV9mbGFncyA9IChf
ZmxhZ3MgJiB+bWFzaykgfCAodmFsICYgbWFzayk7IHJldHVybiBvbGRiaXRzOyB9CiAgICBmbXRm
bGFncyB1bnNldGYoZm10ZmxhZ3MgbWFzaykgewoJZm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFnczsK
CV9mbGFncyAmPSB+bWFzazsgcmV0dXJuIG9sZGJpdHM7IH0KICAgIGludCB3aWR0aCgpIGNvbnN0
IHsgcmV0dXJuIF93aWR0aDsgfQogICAgaW50IHdpZHRoKGludCB2YWwpIHsgaW50IHNhdmUgPSBf
d2lkdGg7IF93aWR0aCA9IHZhbDsgcmV0dXJuIHNhdmU7IH0KCgoKCiAgICB2b2lkIF90aHJvd19m
YWlsdXJlKCkgY29uc3QgeyB9CgogICAgdm9pZCBjbGVhcihpb3N0YXRlIHN0YXRlID0gMCkgewoJ
X3N0YXRlID0gX3N0cmJ1ZiA/IHN0YXRlIDogc3RhdGV8YmFkYml0OwoJaWYgKF9zdGF0ZSAmIF9l
eGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAgICB2b2lkIHNldChpb3N0YXRlIGZsYWcp
IHsgX3N0YXRlIHw9IGZsYWc7CglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWls
dXJlKCk7IH0KICAgIHZvaWQgc2V0c3RhdGUoaW9zdGF0ZSBmbGFnKSB7IF9zdGF0ZSB8PSBmbGFn
OyAgCglpZiAoX3N0YXRlICYgX2V4Y2VwdGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KICAgIGlu
dCBnb29kKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlID09IDA7IH0KICAgIGludCBlb2YoKSBjb25z
dCB7IHJldHVybiBfc3RhdGUgJiBpb3M6OmVvZmJpdDsgfQogICAgaW50IGZhaWwoKSBjb25zdCB7
IHJldHVybiBfc3RhdGUgJiAoaW9zOjpiYWRiaXR8aW9zOjpmYWlsYml0KTsgfQogICAgaW50IGJh
ZCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSAmIGlvczo6YmFkYml0OyB9CiAgICBpb3N0YXRlIHJk
c3RhdGUoKSBjb25zdCB7IHJldHVybiBfc3RhdGU7IH0KICAgIG9wZXJhdG9yIHZvaWQqKCkgY29u
c3QgeyByZXR1cm4gZmFpbCgpID8gKHZvaWQqKTAgOiAodm9pZCopKC0xKTsgfQogICAgaW50IG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIGZhaWwoKTsgfQogICAgaW9zdGF0ZSBleGNlcHRpb25z
KCkgY29uc3QgeyByZXR1cm4gX2V4Y2VwdGlvbnM7IH0KICAgIHZvaWQgZXhjZXB0aW9ucyhpb3N0
YXRlIGVuYWJsZSkgewoJX2V4Y2VwdGlvbnMgPSBlbmFibGU7CglpZiAoX3N0YXRlICYgX2V4Y2Vw
dGlvbnMpIF90aHJvd19mYWlsdXJlKCk7IH0KCiAgICBzdHJlYW1idWYqIHJkYnVmKCkgY29uc3Qg
eyByZXR1cm4gX3N0cmJ1ZjsgfQogICAgc3RyZWFtYnVmKiByZGJ1ZihzdHJlYW1idWYgKl9zKSB7
CiAgICAgIHN0cmVhbWJ1ZiAqX29sZCA9IF9zdHJidWY7IF9zdHJidWYgPSBfczsgY2xlYXIgKCk7
IHJldHVybiBfb2xkOyB9CgogICAgc3RhdGljIGludCBzeW5jX3dpdGhfc3RkaW8oaW50IG9uKTsK
ICAgIHN0YXRpYyB2b2lkIHN5bmNfd2l0aF9zdGRpbygpIHsgc3luY193aXRoX3N0ZGlvKDEpOyB9
CiAgICBzdGF0aWMgZm10ZmxhZ3MgYml0YWxsb2MoKTsKICAgIHN0YXRpYyBpbnQgeGFsbG9jKCk7
CiAgICB2b2lkKiYgcHdvcmQoaW50KTsKICAgIHZvaWQqIHB3b3JkKGludCkgY29uc3Q7CiAgICBs
b25nJiBpd29yZChpbnQpOwogICAgbG9uZyBpd29yZChpbnQpIGNvbnN0OwoKCgoKCgoKCgogICAg
IAogICAgY2xhc3MgSW5pdCB7CiAgICBwdWJsaWM6CiAgICAgIEluaXQgKCkgeyB9CiAgICB9OwoK
ICBwcm90ZWN0ZWQ6CiAgICBpbmxpbmUgaW9zKHN0cmVhbWJ1Ziogc2IgPSAwLCBvc3RyZWFtKiB0
aWVfdG8gPSAwKTsKICAgIGlubGluZSB2aXJ0dWFsIH5pb3MoKTsKICAgIGlubGluZSB2b2lkIGlu
aXQoc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllID0gMCk7Cn07CgoKCgp0eXBlZGVmIGlvczo6
c2Vla19kaXIgX3NlZWtfZGlyOwoKCiAKIAogCiAKIAoKIAogCmNsYXNzIHN0cmVhbW1hcmtlciA6
IHByaXZhdGUgX0lPX21hcmtlciB7CiAgICBmcmllbmQgY2xhc3Mgc3RyZWFtYnVmOwogICAgdm9p
ZCBzZXRfb2Zmc2V0KGludCBvZmZzZXQpIHsgX3BvcyA9IG9mZnNldDsgfQogIHB1YmxpYzoKICAg
IHN0cmVhbW1hcmtlcihzdHJlYW1idWYgKnNiKTsKICAgIH5zdHJlYW1tYXJrZXIoKTsKICAgIGlu
dCBzYXZpbmcoKSB7IHJldHVybiAgMTsgfQogICAgaW50IGRlbHRhKHN0cmVhbW1hcmtlciYpOwog
ICAgaW50IGRlbHRhKCk7Cn07CgpzdHJ1Y3Qgc3RyZWFtYnVmIDogcHVibGljIF9JT19GSUxFIHsg
IAogICAgZnJpZW5kIGNsYXNzIGlvczsKICAgIGZyaWVuZCBjbGFzcyBpc3RyZWFtOwogICAgZnJp
ZW5kIGNsYXNzIG9zdHJlYW07CiAgICBmcmllbmQgY2xhc3Mgc3RyZWFtbWFya2VyOwogICAgY29u
c3Qgdm9pZCAqJl92dGFibGUoKSB7IHJldHVybiAqKGNvbnN0IHZvaWQqKikoKF9JT19GSUxFKil0
aGlzICsgMSk7IH0KICBwcm90ZWN0ZWQ6CiAgICBzdGF0aWMgc3RyZWFtYnVmKiBfbGlzdF9hbGw7
ICAKICAgIF9JT19GSUxFKiYgeGNoYWluKCkgeyByZXR1cm4gX2NoYWluOyB9CiAgICB2b2lkIF91
bl9saW5rKCk7CiAgICB2b2lkIF9saW5rX2luKCk7CiAgICBjaGFyKiBncHRyKCkgY29uc3QKICAg
ICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9w
dHI7IH0KICAgIGNoYXIqIHBwdHIoKSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfcHRyOyB9CiAg
ICBjaGFyKiBlZ3B0cigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9mbGFncyAgJiAweDEwMCAgPyBf
SU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAgIGNoYXIqIGVwcHRyKCkgY29uc3QgeyBy
ZXR1cm4gX0lPX3dyaXRlX2VuZDsgfQogICAgY2hhciogcGJhc2UoKSBjb25zdCB7IHJldHVybiBf
SU9fd3JpdGVfYmFzZTsgfQogICAgY2hhciogZWJhY2soKSBjb25zdAogICAgICB7IHJldHVybiBf
ZmxhZ3MgICYgMHgxMDAgID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX2Jhc2U7fQogICAgY2hh
ciogYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZfYmFzZTsgfQogICAgY2hhciogZWJ1Zigp
IGNvbnN0IHsgcmV0dXJuIF9JT19idWZfZW5kOyB9CiAgICBpbnQgYmxlbigpIGNvbnN0IHsgcmV0
dXJuIF9JT19idWZfZW5kIC0gX0lPX2J1Zl9iYXNlOyB9CiAgICB2b2lkIHhwdXRfY2hhcihjaGFy
IGMpIHsgKl9JT193cml0ZV9wdHIrKyA9IGM7IH0KICAgIGludCB4ZmxhZ3MoKSB7IHJldHVybiBf
ZmxhZ3MgOyB9CiAgICBpbnQgeGZsYWdzKGludCBmKSB7aW50IGZsID0gX2ZsYWdzIDsgX2ZsYWdz
ICA9IGY7IHJldHVybiBmbDt9CiAgICB2b2lkIHhzZXRmbGFncyhpbnQgZikgeyBfZmxhZ3MgIHw9
IGY7IH0KICAgIHZvaWQgeHNldGZsYWdzKGludCBmLCBpbnQgbWFzaykKICAgICAgeyBfZmxhZ3Mg
ID0gKF9mbGFncyAgJiB+bWFzaykgfCAoZiAmIG1hc2spOyB9CiAgICB2b2lkIGdidW1wKGludCBu
KQogICAgICB7IF9mbGFncyAgJiAweDEwMCAgPyAoX0lPX3NhdmVfYmFzZSs9bik6KF9JT19yZWFk
X3B0cis9bik7fQogICAgdm9pZCBwYnVtcChpbnQgbikgeyBfSU9fd3JpdGVfcHRyICs9IG47IH0K
ICAgIHZvaWQgc2V0YihjaGFyKiBiLCBjaGFyKiBlYiwgaW50IGE9MCk7CiAgICB2b2lkIHNldHAo
Y2hhciogcCwgY2hhciogZXApCiAgICAgIHsgX0lPX3dyaXRlX2Jhc2U9X0lPX3dyaXRlX3B0cj1w
OyBfSU9fd3JpdGVfZW5kPWVwOyB9CiAgICB2b2lkIHNldGcoY2hhciogZWIsIGNoYXIqIGcsIGNo
YXIgKmVnKSB7CiAgICAgIGlmIChfZmxhZ3MgICYgMHgxMDAgKSBfSU9fZnJlZV9iYWNrdXBfYXJl
YSh0aGlzKTsgCiAgICAgIF9JT19yZWFkX2Jhc2UgPSBlYjsgX0lPX3JlYWRfcHRyID0gZzsgX0lP
X3JlYWRfZW5kID0gZWc7IH0KICAgIGNoYXIgKnNob3J0YnVmKCkgeyByZXR1cm4gX3Nob3J0YnVm
OyB9CgogICAgaW50IGluX2JhY2t1cCgpIHsgcmV0dXJuIF9mbGFncyAmIDB4MTAwIDsgfQogICAg
IAogICAgY2hhciAqR2Jhc2UoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19zYXZlX2Jhc2Ug
OiBfSU9fcmVhZF9iYXNlOyB9CiAgICAgCiAgICBjaGFyICplR3B0cigpIHsgcmV0dXJuIGluX2Jh
Y2t1cCgpID8gX0lPX3NhdmVfZW5kIDogX0lPX3JlYWRfZW5kOyB9CiAgICAgCiAgICBjaGFyICpC
YmFzZSgpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3JlYWRfYmFzZSA6IF9JT19zYXZlX2Jh
c2U7IH0KICAgIGNoYXIgKkJwdHIoKSB7IHJldHVybiBfSU9fYmFja3VwX2Jhc2U7IH0KICAgICAK
ICAgIGNoYXIgKmVCcHRyKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fcmVhZF9lbmQgOiBf
SU9fc2F2ZV9lbmQ7IH0KICAgIGNoYXIgKk5iYXNlKCkgeyByZXR1cm4gX0lPX3NhdmVfYmFzZTsg
fQogICAgY2hhciAqZU5wdHIoKSB7IHJldHVybiBfSU9fc2F2ZV9lbmQ7IH0KICAgIGludCBoYXZl
X2JhY2t1cCgpIHsgcmV0dXJuIF9JT19zYXZlX2Jhc2UgIT0gX19udWxsIDsgfQogICAgaW50IGhh
dmVfbWFya2VycygpIHsgcmV0dXJuIF9tYXJrZXJzICE9IF9fbnVsbCA7IH0KICAgIHZvaWQgZnJl
ZV9iYWNrdXBfYXJlYSgpOwogICAgdm9pZCB1bnNhdmVfbWFya2VycygpOyAgCiAgICBpbnQgcHV0
X21vZGUoKSB7IHJldHVybiBfZmxhZ3MgJiAweDgwMCA7IH0KICAgIGludCBzd2l0Y2hfdG9fZ2V0
X21vZGUoKTsKICAgIAogICAgc3RyZWFtYnVmKGludCBmbGFncz0wKTsKICBwdWJsaWM6CiAgICBz
dGF0aWMgaW50IGZsdXNoX2FsbCgpOwogICAgc3RhdGljIHZvaWQgZmx1c2hfYWxsX2xpbmVidWZm
ZXJlZCgpOyAgCiAgICB2aXJ0dWFsIH5zdHJlYW1idWYoKTsKICAgIHZpcnR1YWwgaW50IG92ZXJm
bG93KGludCBjID0gKC0xKSApOyAgCiAgICB2aXJ0dWFsIGludCB1bmRlcmZsb3coKTsgIAogICAg
dmlydHVhbCBpbnQgdWZsb3coKTsgIAogICAgdmlydHVhbCBpbnQgcGJhY2tmYWlsKGludCBjKTsK
IAogICAgdmlydHVhbCBzdHJlYW1zaXplIHhzcHV0bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXpl
IG4pOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHhzZ2V0bihjaGFyKiBzLCBzdHJlYW1zaXplIG4p
OwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vla29mZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50
IG1vZGU9aW9zOjppbnxpb3M6Om91dCk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrcG9zKHN0
cmVhbXBvcyBwb3MsIGludCBtb2RlID0gaW9zOjppbnxpb3M6Om91dCk7CgogICAgc3RyZWFtcG9z
IHB1YnNlZWtvZmYoc3RyZWFtb2ZmIG8sIF9zZWVrX2RpciBkLCBpbnQgbW9kZT1pb3M6OmlufGlv
czo6b3V0KQogICAgICB7IHJldHVybiBfSU9fc2Vla29mZiAodGhpcywgbywgZCwgbW9kZSk7IH0K
ICAgIHN0cmVhbXBvcyBwdWJzZWVrcG9zKHN0cmVhbXBvcyBwb3MsIGludCBtb2RlID0gaW9zOjpp
bnxpb3M6Om91dCkKICAgICAgeyByZXR1cm4gX0lPX3NlZWtwb3MgKHRoaXMsIHBvcywgbW9kZSk7
IH0KICAgIHN0cmVhbXBvcyBzc2Vla29mZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9
aW9zOjppbnxpb3M6Om91dCk7CiAgICBzdHJlYW1wb3Mgc3NlZWtwb3Moc3RyZWFtcG9zIHBvcywg
aW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtYnVmKiBzZXRi
dWYoY2hhciogcCwgaW50IGxlbik7CiAgICB2aXJ0dWFsIGludCBzeW5jKCk7CiAgICB2aXJ0dWFs
IGludCBkb2FsbG9jYXRlKCk7CgogICAgaW50IHNlZWttYXJrKHN0cmVhbW1hcmtlciYgbWFyaywg
aW50IGRlbHRhID0gMCk7CiAgICBpbnQgc3B1dGJhY2tjKGNoYXIgYyk7CiAgICBpbnQgc3VuZ2V0
YygpOwogICAgaW50IHVuYnVmZmVyZWQoKSB7IHJldHVybiBfZmxhZ3MgJiAyICA/IDEgOiAwOyB9
CiAgICBpbnQgbGluZWJ1ZmZlcmVkKCkgeyByZXR1cm4gX2ZsYWdzICYgMHgyMDAgID8gMSA6IDA7
IH0KICAgIHZvaWQgdW5idWZmZXJlZChpbnQgaSkKCXsgaWYgKGkpIF9mbGFncyB8PSAyIDsgZWxz
ZSBfZmxhZ3MgJj0gfjIgOyB9CiAgICB2b2lkIGxpbmVidWZmZXJlZChpbnQgaSkKCXsgaWYgKGkp
IF9mbGFncyB8PSAweDIwMCA7IGVsc2UgX2ZsYWdzICY9IH4weDIwMCA7IH0KICAgIGludCBhbGxv
Y2F0ZSgpIHsgIAoJaWYgKGJhc2UoKSB8fCB1bmJ1ZmZlcmVkKCkpIHJldHVybiAwOwoJZWxzZSBy
ZXR1cm4gZG9hbGxvY2F0ZSgpOyB9CiAgICAgCiAgICB2b2lkIGFsbG9jYnVmKCkgeyBpZiAoYmFz
ZSgpID09IF9fbnVsbCApIGRvYWxsb2NidWYoKTsgfQogICAgdm9pZCBkb2FsbG9jYnVmKCk7CiAg
ICBpbnQgaW5fYXZhaWwoKSB7IHJldHVybiBfSU9fcmVhZF9lbmQgLSBfSU9fcmVhZF9wdHI7IH0K
ICAgIGludCBvdXRfd2FpdGluZygpIHsgcmV0dXJuIF9JT193cml0ZV9wdHIgLSBfSU9fd3JpdGVf
YmFzZTsgfQogICAgc3RyZWFtc2l6ZSBzcHV0bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXplIG4p
IHsgcmV0dXJuIHhzcHV0bihzLCBuKTsgfQogICAgc3RyZWFtc2l6ZSBwYWRuKGNoYXIgcGFkLCBz
dHJlYW1zaXplIG4pIHsgcmV0dXJuIF9JT19wYWRuKHRoaXMsIHBhZCwgbik7IH0KICAgIHN0cmVh
bXNpemUgc2dldG4oY2hhciogcywgc3RyZWFtc2l6ZSBuKSB7IHJldHVybiBfSU9fc2dldG4odGhp
cywgcywgbik7IH0KICAgIGludCBpZ25vcmUoaW50KTsKICAgIGludCBnZXRfY29sdW1uKCk7CiAg
ICBpbnQgc2V0X2NvbHVtbihpbnQpOwogICAgbG9uZyBzZ2V0bGluZShjaGFyKiBidWYsIF9HX3Np
emVfdCAgbiwgY2hhciBkZWxpbSwgaW50IHB1dGJhY2tfZGVsaW0pOwogICAgaW50IHNwdXRjKGlu
dCBjKSB7IHJldHVybiBfSU9fcHV0YyhjLCB0aGlzKTsgfQogICAgaW50IHNidW1wYygpIHsgcmV0
dXJuIF9JT19nZXRjKHRoaXMpOyB9CiAgICBpbnQgc2dldGMoKSB7IHJldHVybiAoKCAgdGhpcyAg
KS0+X0lPX3JlYWRfcHRyID49ICggIHRoaXMgICktPl9JT19yZWFkX2VuZCAmJiBfX3VuZGVyZmxv
dyAoICB0aGlzICApID09ICgtMSkgID8gKC0xKSAgOiAqKHVuc2lnbmVkIGNoYXIgKikgKCAgdGhp
cyAgKS0+X0lPX3JlYWRfcHRyKSAgOyB9CiAgICBpbnQgc25leHRjKCkgewoJaWYgKF9JT19yZWFk
X3B0ciA+PSBfSU9fcmVhZF9lbmQgJiYgX191bmRlcmZsb3codGhpcykgPT0gKC0xKSApCgkgIHJl
dHVybiAoLTEpIDsKCWVsc2UgcmV0dXJuIF9JT19yZWFkX3B0cisrLCBzZ2V0YygpOyB9CiAgICB2
b2lkIHN0b3NzYygpIHsgaWYgKF9JT19yZWFkX3B0ciA8IF9JT19yZWFkX2VuZCkgX0lPX3JlYWRf
cHRyKys7IH0KICAgIGludCB2c2NhbihjaGFyIGNvbnN0ICpmbXQwLCBfR192YV9saXN0ICBhcCwg
aW9zKiBzdHJlYW0gPSBfX251bGwgKTsKICAgIGludCBzY2FuKGNoYXIgY29uc3QgKmZtdDAgLi4u
KTsKICAgIGludCB2Zm9ybShjaGFyIGNvbnN0ICpmbXQwLCBfR192YV9saXN0ICBhcCk7CiAgICBp
bnQgZm9ybShjaGFyIGNvbnN0ICpmbXQwIC4uLik7CgoKCgogICAgdmlydHVhbCBzdHJlYW1zaXpl
IHN5c19yZWFkKGNoYXIqIGJ1Ziwgc3RyZWFtc2l6ZSBzaXplKTsKICAgIHZpcnR1YWwgc3RyZWFt
c2l6ZSBzeXNfd3JpdGUoY29uc3QgY2hhciosIHN0cmVhbXNpemUpOwogICAgdmlydHVhbCBzdHJl
YW1wb3Mgc3lzX3NlZWsoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgdmlydHVhbCBpbnQgc3lz
X2Nsb3NlKCk7CiAgICB2aXJ0dWFsIGludCBzeXNfc3RhdCh2b2lkKik7ICAKCgoKCn07CgogCiAK
CmNsYXNzIGZpbGVidWYgOiBwdWJsaWMgc3RyZWFtYnVmIHsKICBwcm90ZWN0ZWQ6CiAgICB2b2lk
IGluaXQoKTsKICBwdWJsaWM6CiAgICBzdGF0aWMgY29uc3QgaW50IG9wZW5wcm90OyAgCiAgICBm
aWxlYnVmKCk7CiAgICBmaWxlYnVmKGludCBmZCk7CiAgICBmaWxlYnVmKGludCBmZCwgY2hhciog
cCwgaW50IGxlbik7CgoKCiAgICB+ZmlsZWJ1ZigpOwogICAgZmlsZWJ1ZiogYXR0YWNoKGludCBm
ZCk7CiAgICBmaWxlYnVmKiBvcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpt
b2RlKTsKICAgIGZpbGVidWYqIG9wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGlvczo6b3Blbm1v
ZGUgbW9kZSwgaW50IHByb3QgPSAwNjY0KTsKICAgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygpOwog
ICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50IGMgPSAoLTEpICk7CiAgICBpbnQgaXNfb3Blbigp
IGNvbnN0IHsgcmV0dXJuIF9maWxlbm8gPj0gMDsgfQogICAgaW50IGZkKCkgY29uc3QgeyByZXR1
cm4gaXNfb3BlbigpID8gX2ZpbGVubyA6ICgtMSkgOyB9CiAgICBmaWxlYnVmKiBjbG9zZSgpOwog
ICAgdmlydHVhbCBpbnQgZG9hbGxvY2F0ZSgpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vla29m
ZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCk7CiAgICB2
aXJ0dWFsIHN0cmVhbWJ1Ziogc2V0YnVmKGNoYXIqIHAsIGludCBsZW4pOwogICAgc3RyZWFtc2l6
ZSB4c3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHN0cmVhbXNpemUgeHNn
ZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2aXJ0dWFsIGludCBzeW5jKCk7CiAgcHJv
dGVjdGVkOiAgCiAKICAgIGludCBpc19yZWFkaW5nKCkgeyByZXR1cm4gZWJhY2soKSAhPSBlZ3B0
cigpOyB9CiAgICBjaGFyKiBjdXJfcHRyKCkgeyByZXR1cm4gaXNfcmVhZGluZygpID8gIGdwdHIo
KSA6IHBwdHIoKTsgfQogICAgIAogICAgY2hhciogZmlsZV9wdHIoKSB7IHJldHVybiBlR3B0cigp
OyB9CiAgICAgCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3JlYWQoY2hhciogYnVmLCBzdHJl
YW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc3lzX3NlZWsoc3RyZWFtb2ZmLCBf
c2Vla19kaXIpOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c193cml0ZShjb25zdCBjaGFyKiwg
c3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIGludCBzeXNfc3RhdCh2b2lkKik7ICAKICAgIHZpcnR1
YWwgaW50IHN5c19jbG9zZSgpOwoKCgoKfTsKCmlubGluZSB2b2lkIGlvczo6aW5pdChzdHJlYW1i
dWYqIHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsKCQlfc3RhdGUgPSBzYiA/IGlvczo6Z29vZGJpdCA6
IGlvczo6YmFkYml0OyBfZXhjZXB0aW9ucz0wOwoJCV9zdHJidWY9c2I7IF90aWUgPSB0aWVfdG87
IF93aWR0aD0wOyBfZmlsbD0nICc7CgoJCV9mbGFncz1pb3M6OnNraXB3c3xpb3M6OmRlYzsKCgoK
CQlfcHJlY2lzaW9uPTY7IF9hcnJheXMgPSAwOyB9CgppbmxpbmUgaW9zOjppb3Moc3RyZWFtYnVm
KiBzYiwgb3N0cmVhbSogdGllX3RvKSB7IGluaXQoc2IsIHRpZV90byk7IH0KCmlubGluZSBpb3M6
On5pb3MoKSB7CgoKCiAgICAgCiAgICAgCiAgICBvcGVyYXRvciBkZWxldGVbXSAoX2FycmF5cyk7
Cn0KfSAgCgojIDMxICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2dj
Yy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9n
KystMy9pb3N0cmVhbS5oIiAyIDMKCgpleHRlcm4gIkMrKyIgewpjbGFzcyBpc3RyZWFtOyBjbGFz
cyBvc3RyZWFtOwp0eXBlZGVmIGlvcyYgKCpfX21hbmlwKShpb3MmKTsKdHlwZWRlZiBpc3RyZWFt
JiAoKl9faW1hbmlwKShpc3RyZWFtJik7CnR5cGVkZWYgb3N0cmVhbSYgKCpfX29tYW5pcCkob3N0
cmVhbSYpOwoKZXh0ZXJuIGlzdHJlYW0mIHdzKGlzdHJlYW0mIGlucyk7CmV4dGVybiBvc3RyZWFt
JiBmbHVzaChvc3RyZWFtJiBvdXRzKTsKZXh0ZXJuIG9zdHJlYW0mIGVuZGwob3N0cmVhbSYgb3V0
cyk7CmV4dGVybiBvc3RyZWFtJiBlbmRzKG9zdHJlYW0mIG91dHMpOwoKY2xhc3Mgb3N0cmVhbSA6
IHZpcnR1YWwgcHVibGljIGlvcwp7CiAgICAgCiAgICB2b2lkIGRvX29zZngoKTsKICBwdWJsaWM6
CiAgICBvc3RyZWFtKCkgeyB9CiAgICBvc3RyZWFtKHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRp
ZWQ9IF9fbnVsbCApOwogICAgaW50IG9wZngoKSB7CglpZiAoIWdvb2QoKSkgcmV0dXJuIDA7Cgll
bHNlIHsgaWYgKF90aWUpIF90aWUtPmZsdXNoKCk7ICA7IHJldHVybiAxO30gfQogICAgdm9pZCBv
c2Z4KCkgeyAgOwoJCSAgaWYgKGZsYWdzKCkgJiAoaW9zOjp1bml0YnVmfGlvczo6c3RkaW8pKQoJ
CSAgICAgIGRvX29zZngoKTsgfQogICAgb3N0cmVhbSYgZmx1c2goKTsKICAgIG9zdHJlYW0mIHB1
dChjaGFyIGMpIHsgX3N0cmJ1Zi0+c3B1dGMoYyk7IHJldHVybiAqdGhpczsgfQoKCgoKCiAgICBv
c3RyZWFtJiB3cml0ZShjb25zdCBjaGFyICpzLCBzdHJlYW1zaXplIG4pOwogICAgb3N0cmVhbSYg
d3JpdGUoY29uc3QgdW5zaWduZWQgY2hhciAqcywgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVy
biB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0cmVhbSYgd3JpdGUoY29uc3Qgc2ln
bmVkIGNoYXIgKnMsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNo
YXIqKXMsIG4pO30KICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHZvaWQgKnMsIHN0cmVhbXNpemUg
bikKICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMsIG4pO30KICAgIG9zdHJlYW0m
IHNlZWtwKHN0cmVhbXBvcyk7CiAgICBvc3RyZWFtJiBzZWVrcChzdHJlYW1vZmYsIF9zZWVrX2Rp
cik7CiAgICBzdHJlYW1wb3MgdGVsbHAoKTsKICAgIG9zdHJlYW0mIGZvcm0oY29uc3QgY2hhciAq
Zm9ybWF0IC4uLik7CiAgICBvc3RyZWFtJiB2Zm9ybShjb25zdCBjaGFyICpmb3JtYXQsIF9HX3Zh
X2xpc3QgIGFyZ3MpOwoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY2hhciBjKTsKICAgIG9zdHJl
YW0mIG9wZXJhdG9yPDwodW5zaWduZWQgY2hhciBjKSB7IHJldHVybiAoKnRoaXMpIDw8IChjaGFy
KWM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc2lnbmVkIGNoYXIgYykgeyByZXR1cm4gKCp0
aGlzKSA8PCAoY2hhciljOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IGNoYXIgKnMp
OwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCB1bnNpZ25lZCBjaGFyICpzKQoJeyByZXR1
cm4gKCp0aGlzKSA8PCAoY29uc3QgY2hhciopczsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChj
b25zdCBzaWduZWQgY2hhciAqcykKCXsgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0IGNoYXIqKXM7
IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgdm9pZCAqcCk7CiAgICBvc3RyZWFtJiBv
cGVyYXRvcjw8KGludCBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgaW50IG4p
OwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8
PCh1bnNpZ25lZCBsb25nIG4pOwoKICAgIF9fZXh0ZW5zaW9uX18gb3N0cmVhbSYgb3BlcmF0b3I8
PChsb25nIGxvbmcgbik7CiAgICBfX2V4dGVuc2lvbl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5z
aWduZWQgbG9uZyBsb25nIG4pOwoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc2hvcnQgbikge3Jl
dHVybiBvcGVyYXRvcjw8KChpbnQpbik7fQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25l
ZCBzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKHVuc2lnbmVkIGludCluKTt9CgogICAgb3N0
cmVhbSYgb3BlcmF0b3I8PChib29sIGIpIHsgcmV0dXJuIG9wZXJhdG9yPDwoKGludCliKTsgfQoK
ICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoZG91YmxlIG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8
PChmbG9hdCBuKSB7IHJldHVybiBvcGVyYXRvcjw8KChkb3VibGUpbik7IH0KCgoKICAgIG9zdHJl
YW0mIG9wZXJhdG9yPDwobG9uZyBkb3VibGUgbikgeyByZXR1cm4gb3BlcmF0b3I8PCgoZG91Ymxl
KW4pOyB9CgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChfX29tYW5pcCBmdW5jKSB7IHJldHVybiAo
KmZ1bmMpKCp0aGlzKTsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChfX21hbmlwIGZ1bmMpIHso
KmZ1bmMpKCp0aGlzKTsgcmV0dXJuICp0aGlzO30KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc3Ry
ZWFtYnVmKik7CgoKCn07CgpjbGFzcyBpc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgaW9zCnsKICAg
ICAKcHJvdGVjdGVkOgogICAgX0dfc2l6ZV90ICBfZ2NvdW50OwoKICAgIGludCBfc2tpcF93cygp
OwogIHB1YmxpYzoKICAgIGlzdHJlYW0oKTogX2djb3VudCAoMCkgeyB9CiAgICBpc3RyZWFtKHN0
cmVhbWJ1Ziogc2IsIG9zdHJlYW0qdGllZD0gX19udWxsICk7CiAgICBpc3RyZWFtJiBnZXQoY2hh
ciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJyk7CiAgICBpc3RyZWFtJiBnZXQodW5z
aWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJykKCXsgcmV0dXJuIGdl
dCgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgZ2V0KGNoYXImIGMpOwog
ICAgaXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXImIGMpIHsgcmV0dXJuIGdldCgoY2hhciYpYyk7
IH0KICAgIGlzdHJlYW0mIGdldGxpbmUoY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0g
J1xuJyk7CiAgICBpc3RyZWFtJiBnZXRsaW5lKHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwg
Y2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXRsaW5lKChjaGFyKilwdHIsIGxlbiwgZGVs
aW0pOyB9CiAgICBpc3RyZWFtJiBnZXQoc2lnbmVkIGNoYXImIGMpICB7IHJldHVybiBnZXQoKGNo
YXImKWMpOyB9CiAgICBpc3RyZWFtJiBnZXQoc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hh
ciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXQoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0K
ICAgIGlzdHJlYW0mIGdldGxpbmUoc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxp
bSA9ICdcbicpCgl7IHJldHVybiBnZXRsaW5lKChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAg
ICBpc3RyZWFtJiByZWFkKGNoYXIgKnB0ciwgc3RyZWFtc2l6ZSBuKTsKICAgIGlzdHJlYW0mIHJl
YWQodW5zaWduZWQgY2hhciAqcHRyLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHJlYWQo
KGNoYXIqKXB0ciwgbik7IH0KICAgIGlzdHJlYW0mIHJlYWQoc2lnbmVkIGNoYXIgKnB0ciwgc3Ry
ZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9CiAgICBpc3Ry
ZWFtJiByZWFkKHZvaWQgKnB0ciwgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiByZWFkKChj
aGFyKilwdHIsIG4pOyB9CiAgICBpc3RyZWFtJiBnZXQoc3RyZWFtYnVmJiBzYiwgY2hhciBkZWxp
bSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0cyhjaGFyICoqcywgY2hhciBkZWxpbSA9ICdcbicp
OwogICAgaW50IGlwZngoaW50IG5lZWQgPSAwKSB7CglpZiAoIWdvb2QoKSkgeyBzZXQoaW9zOjpm
YWlsYml0KTsgcmV0dXJuIDA7IH0KCWVsc2UgewoJICAgOwoJICBpZiAoX3RpZSAmJiAobmVlZCA9
PSAwIHx8IHJkYnVmKCktPmluX2F2YWlsKCkgPCBuZWVkKSkgX3RpZS0+Zmx1c2goKTsKCSAgaWYg
KCFuZWVkICYmIChmbGFncygpICYgaW9zOjpza2lwd3MpKSByZXR1cm4gX3NraXBfd3MoKTsKCSAg
ZWxzZSByZXR1cm4gMTsKCX0KICAgIH0KICAgIGludCBpcGZ4MCgpIHsgIAoJaWYgKCFnb29kKCkp
IHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90
aWUpIF90aWUtPmZsdXNoKCk7CgkgIGlmIChmbGFncygpICYgaW9zOjpza2lwd3MpIHJldHVybiBf
c2tpcF93cygpOwoJICBlbHNlIHJldHVybiAxOwoJfQogICAgfQogICAgaW50IGlwZngxKCkgeyAg
CglpZiAoIWdvb2QoKSkgeyBzZXQoaW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7IH0KCWVsc2UgewoJ
ICAgOwoJICBpZiAoX3RpZSAmJiByZGJ1ZigpLT5pbl9hdmFpbCgpID09IDApIF90aWUtPmZsdXNo
KCk7CgkgIHJldHVybiAxOwoJfQogICAgfQogICAgdm9pZCBpc2Z4KCkgeyAgOyB9CiAgICBpbnQg
Z2V0KCkgeyBpZiAoIWlwZngxKCkpIHJldHVybiAoLTEpIDsKCQllbHNlIHsgaW50IGNoID0gX3N0
cmJ1Zi0+c2J1bXBjKCk7CgkJICAgICAgIGlmIChjaCA9PSAoLTEpICkgc2V0KGlvczo6ZW9mYml0
KTsKCQkgICAgICAgaXNmeCgpOwoJCSAgICAgICByZXR1cm4gY2g7CgkJICAgICB9IH0KICAgIGlu
dCBwZWVrKCk7CiAgICBfR19zaXplX3QgIGdjb3VudCgpIHsgcmV0dXJuIF9nY291bnQ7IH0KICAg
IGlzdHJlYW0mIGlnbm9yZShpbnQgbj0xLCBpbnQgZGVsaW0gPSAoLTEpICk7CiAgICBpbnQgc3lu
YyAoKTsKICAgIGlzdHJlYW0mIHNlZWtnKHN0cmVhbXBvcyk7CiAgICBpc3RyZWFtJiBzZWVrZyhz
dHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICBzdHJlYW1wb3MgdGVsbGcoKTsKICAgIGlzdHJlYW0m
IHB1dGJhY2soY2hhciBjaCkgewoJaWYgKGdvb2QoKSAmJiBfc3RyYnVmLT5zcHV0YmFja2MoY2gp
ID09ICgtMSkgKSBjbGVhcihpb3M6OmJhZGJpdCk7CglyZXR1cm4gKnRoaXM7fQogICAgaXN0cmVh
bSYgdW5nZXQoKSB7CglpZiAoZ29vZCgpICYmIF9zdHJidWYtPnN1bmdldGMoKSA9PSAoLTEpICkg
Y2xlYXIoaW9zOjpiYWRiaXQpOwoJcmV0dXJuICp0aGlzO30KICAgIGlzdHJlYW0mIHNjYW4oY29u
c3QgY2hhciAqZm9ybWF0IC4uLik7CiAgICBpc3RyZWFtJiB2c2Nhbihjb25zdCBjaGFyICpmb3Jt
YXQsIF9HX3ZhX2xpc3QgIGFyZ3MpOwoKCgoKCgogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihjaGFy
Kik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGNoYXIqIHApIHsgcmV0dXJuIG9w
ZXJhdG9yPj4oKGNoYXIqKXApOyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNpZ25lZCBjaGFy
KnApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9CiAgICBpc3RyZWFtJiBvcGVyYXRv
cj4+KGNoYXImIGMpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBjaGFyJiBjKSB7
cmV0dXJuIG9wZXJhdG9yPj4oKGNoYXImKWMpO30KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oc2ln
bmVkIGNoYXImIGMpIHtyZXR1cm4gb3BlcmF0b3I+PigoY2hhciYpYyk7fQogICAgaXN0cmVhbSYg
b3BlcmF0b3I+PihpbnQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4obG9uZyYpOwoKICAgIF9f
ZXh0ZW5zaW9uX18gaXN0cmVhbSYgb3BlcmF0b3I+Pihsb25nIGxvbmcmKTsKICAgIF9fZXh0ZW5z
aW9uX18gaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcmKTsKCiAgICBpc3Ry
ZWFtJiBvcGVyYXRvcj4+KHNob3J0Jik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVk
IGludCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJik7CiAgICBpc3Ry
ZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0Jik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+
Pihib29sJik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihmbG9hdCYpOwogICAgaXN0cmVhbSYg
b3BlcmF0b3I+Pihkb3VibGUmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4obG9uZyBkb3VibGUm
KTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oIF9fbWFuaXAgZnVuYykgeygqZnVuYykoKnRoaXMp
OyByZXR1cm4gKnRoaXM7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihfX2ltYW5pcCBmdW5jKSB7
IHJldHVybiAoKmZ1bmMpKCp0aGlzKTsgfQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzdHJlYW1i
dWYqKTsKfTsKCmNsYXNzIGlvc3RyZWFtIDogcHVibGljIGlzdHJlYW0sIHB1YmxpYyBvc3RyZWFt
CnsKICBwdWJsaWM6CiAgICBpb3N0cmVhbSgpIHsgfQogICAgaW9zdHJlYW0oc3RyZWFtYnVmKiBz
Yiwgb3N0cmVhbSp0aWVkPSBfX251bGwgKTsKfTsKCmNsYXNzIF9JT19pc3RyZWFtX3dpdGhhc3Np
Z24gOiBwdWJsaWMgaXN0cmVhbSB7CnB1YmxpYzoKICBfSU9faXN0cmVhbV93aXRoYXNzaWduJiBv
cGVyYXRvcj0oaXN0cmVhbSYpOwogIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShf
SU9faXN0cmVhbV93aXRoYXNzaWduJiByaHMpCiAgICB7IHJldHVybiBvcGVyYXRvcj0gKHN0YXRp
Y19jYXN0PGlzdHJlYW0mPiAocmhzKSk7IH0KfTsKCmNsYXNzIF9JT19vc3RyZWFtX3dpdGhhc3Np
Z24gOiBwdWJsaWMgb3N0cmVhbSB7CnB1YmxpYzoKICBfSU9fb3N0cmVhbV93aXRoYXNzaWduJiBv
cGVyYXRvcj0ob3N0cmVhbSYpOwogIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIG9wZXJhdG9yPShf
SU9fb3N0cmVhbV93aXRoYXNzaWduJiByaHMpCiAgICB7IHJldHVybiBvcGVyYXRvcj0gKHN0YXRp
Y19jYXN0PG9zdHJlYW0mPiAocmhzKSk7IH0KfTsKCmV4dGVybiBfSU9faXN0cmVhbV93aXRoYXNz
aWduIGNpbjsKIApleHRlcm4gX0lPX29zdHJlYW1fd2l0aGFzc2lnbiBjb3V0LCBjZXJyOwoKZXh0
ZXJuIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24gY2xvZwoKCgo7CgpleHRlcm4gaXN0cmVhbSYgbG9j
ayhpc3RyZWFtJiBpbnMpOwpleHRlcm4gaXN0cmVhbSYgdW5sb2NrKGlzdHJlYW0mIGlucyk7CmV4
dGVybiBvc3RyZWFtJiBsb2NrKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgdW5sb2Nr
KG9zdHJlYW0mIG91dHMpOwoKc3RydWN0IElvc3RyZWFtX2luaXQgeyB9IDsgICAKCmlubGluZSBp
b3MmIGRlYyhpb3MmIGkpCnsgaS5zZXRmKGlvczo6ZGVjLCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6
Om9jdCk7IHJldHVybiBpOyB9CmlubGluZSBpb3MmIGhleChpb3MmIGkpCnsgaS5zZXRmKGlvczo6
aGV4LCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9CmlubGluZSBpb3Mm
IG9jdChpb3MmIGkpCnsgaS5zZXRmKGlvczo6b2N0LCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9j
dCk7IHJldHVybiBpOyB9Cn0gIAoKCiMgNiAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2Mt
Mi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yLy4uLy4uLy4u
Ly4uL2luY2x1ZGUvZysrLTMvaW9zdHJlYW0iIDIgMwoKCiMgMSAidHYyNzM3LmN4eCIgMgoKIyAx
ICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJw
Yy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJpbmci
IDEgMwogCgoKCgojIDEgIi9ob21lL3R2L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIv
Z2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjIuMS4wLzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL3N0ZC9iYXN0cmluZy5oIiAxIDMKIAogCgogCiAKIAogCiAKCiAKIAogCiAKCiAKIAog
CgogCiAKIAogCiAKCiAKIAoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKIyAxICIvaG9tZS90di90
b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4y
LjEuMC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9jc3RkZGVmIiAxIDMKIAogCgoK
CiMgMSAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bv
d2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CgoKCgoK
CiAKCgoKCgoKCiAKCiAKCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi9ob21lL3R2L3Rvb2xzL2du
dS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjIuMS4wLzIu
OTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgog
CgoKCgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIGludCBwdHJkaWZmX3Q7CgoK
CgoKCgoKCiAKCgoKCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVk
ZWYgbG9uZyB1bnNpZ25lZCBpbnQgc2l6ZV90OwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgIHdpbnRfdDsK
CgoKCiAKCiAKCiMgMzE3ICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGli
L2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIg
MyA0CgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoKCgojIDYgIi9ob21lL3R2L3Rvb2xzL2dudS9y
czYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjIuMS4wLzIuOTUu
Mi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NzdGRkZWYiIDIgMwoKCiMgMzUgIi9ob21lL3R2
L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0
LjIuMS4wLzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAy
IDMKCiMgMSAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGli
L3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv
c3RkL3N0cmFpdHMuaCIgMSAzCiAKIAoKIAogCiAKIAogCgogCiAKIAogCgogCiAKIAoKIAogCiAK
IAogCgogCiAKCgoKCgogCiNwcmFnbWEgaW50ZXJmYWNlICJzdGQvc3RyYWl0cy5oIgoKCgoKZXh0
ZXJuICJDKysiIHsKdGVtcGxhdGUgPGNsYXNzIGNoYXJUPgpzdHJ1Y3Qgc3RyaW5nX2NoYXJfdHJh
aXRzIHsKICB0eXBlZGVmIGNoYXJUIGNoYXJfdHlwZTsgIAoKICAgCgogIHN0YXRpYyB2b2lkIGFz
c2lnbiAoY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgYzEgPSBjMjsg
fQogIHN0YXRpYyBib29sIGVxIChjb25zdCBjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUm
IGMyKQogICAgeyByZXR1cm4gKGMxID09IGMyKTsgfQogIHN0YXRpYyBib29sIG5lIChjb25zdCBj
aGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAgeyByZXR1cm4gIShjMSA9PSBj
Mik7IH0KICBzdGF0aWMgYm9vbCBsdCAoY29uc3QgY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90
eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSA8IGMyKTsgfQogIHN0YXRpYyBjaGFyX3R5cGUgZW9z
ICgpIHsgcmV0dXJuIGNoYXJfdHlwZSgpOyB9ICAKICBzdGF0aWMgYm9vbCBpc19kZWwoY2hhcl90
eXBlIGEpIHsgcmV0dXJuIDA7IH0KICAgCiAgCiAgIAoKICBzdGF0aWMgaW50IGNvbXBhcmUgKGNv
bnN0IGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAgewog
ICAgICBzaXplX3QgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkKCWlmIChuZSAoczFb
aV0sIHMyW2ldKSkKCSAgcmV0dXJuIGx0IChzMVtpXSwgczJbaV0pID8gLTEgOiAxOwoKICAgICAg
cmV0dXJuIDA7CiAgICB9CiAgICAKICBzdGF0aWMgc2l6ZV90IGxlbmd0aCAoY29uc3QgY2hhcl90
eXBlKiBzKQogICAgewogICAgICBzaXplX3QgbCA9IDA7CiAgICAgIHdoaWxlIChuZSAoKnMrKywg
ZW9zICgpKSkKCSsrbDsKICAgICAgcmV0dXJuIGw7CiAgICB9CgogIHN0YXRpYyBjaGFyX3R5cGUq
IGNvcHkgKGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAg
ewogICAgICBmb3IgKDsgbi0tOyApCglhc3NpZ24gKHMxW25dLCBzMltuXSk7CiAgICAgIHJldHVy
biBzMTsKICAgIH0KCiAgc3RhdGljIGNoYXJfdHlwZSogbW92ZSAoY2hhcl90eXBlKiBzMSwgY29u
c3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAgICB7CiAgICAgIGNoYXJfdHlwZSBhW25dOwog
ICAgICBzaXplX3QgaTsKICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkKCWFzc2lnbiAoYVtp
XSwgczJbaV0pOwogICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQoJYXNzaWduIChzMVtpXSwg
YVtpXSk7CiAgICAgIHJldHVybiBzMTsKICAgIH0KCiAgc3RhdGljIGNoYXJfdHlwZSogc2V0IChj
aGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUmIGMsIHNpemVfdCBuKQogICAgewogICAgICBm
b3IgKDsgbi0tOyApCglhc3NpZ24gKHMxW25dLCBjKTsKICAgICAgcmV0dXJuIHMxOwogICAgfQp9
OwoKY2xhc3MgaXN0cmVhbTsKY2xhc3Mgb3N0cmVhbTsKIyAxICIvaG9tZS90di90b29scy9nbnUv
cnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1
LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9jY3R5cGUiIDEgMwogCiAKCgoKIyAxICIvdXNy
L2luY2x1ZGUvY3R5cGUuaCIgMSAzIDQKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0YW5kYXJkcy5oIiAxIDMgNAog
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiMgNzYgIi91c3IvaW5jbHVkZS9zdGFuZGFyZHMuaCIgMyA0CgoKCgoK
CgoKCgoKCgoKCgoKCiMgMzcgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMgNAoKCgoKCgoKCgoK
CgoKCgoKCgojIDY5ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CgoJZXh0ZXJuIGludAlpc2Fs
cGhhKGludCk7CglleHRlcm4gaW50CWlzYWxudW0oaW50KTsKCWV4dGVybiBpbnQJaXNjbnRybChp
bnQpOwoJZXh0ZXJuIGludAlpc2RpZ2l0KGludCk7CglleHRlcm4gaW50CWlzZ3JhcGgoaW50KTsK
CWV4dGVybiBpbnQJaXNsb3dlcihpbnQpOwoJZXh0ZXJuIGludAlpc3ByaW50KGludCk7CglleHRl
cm4gaW50CWlzcHVuY3QoaW50KTsKCWV4dGVybiBpbnQJaXNzcGFjZShpbnQpOwoJZXh0ZXJuIGlu
dAlpc3VwcGVyKGludCk7CglleHRlcm4gaW50CWlzeGRpZ2l0KGludCk7CglleHRlcm4gaW50CXRv
dXBwZXIoaW50KTsKCWV4dGVybiBpbnQJdG9sb3dlcihpbnQpOwoKCgoKCgoKCgoKCgoKCXR5cGVk
ZWYgdW5zaWduZWQgaW50CXdjdHlwZV90OwoKCgoKCgoKCgoKCglleHRlcm4gaW50CWlzYXNjaWko
aW50KTsKCWV4dGVybiBpbnQJdG9hc2NpaShpbnQpOwoKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1
ZGUvc3lzL2xvY2FsZWRlZi5oIiAxIDMgNAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvbGltaXRzLmgiIDEg
MyA0CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IAoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKCgoK
CgoKCgoKCgogCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKIAoKCgoKCgoK
IAoKCgoKCgoKCgoKCgoKCiAKCiAKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCiAKCgoKCgojIDEg
Ii91c3IvaW5jbHVkZS9mbG9hdC5oIiAxIDMgNAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK
IAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
IAoKCgoKCgogCgoKCgoKCgoKCgogCgoKCgoKCgoKCgogCgoKCgoKCgoKIyAxNzYgIi91c3IvaW5j
bHVkZS9mbG9hdC5oIiAzIDQKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCglleHRlcm4g
IHVuc2lnbmVkICAgaW50IFNJTkZJTklUWTsKCWV4dGVybiAgdW5zaWduZWQgICBpbnQgX0RCTElO
RlsyXTsKCWV4dGVybiAgdW5zaWduZWQgICBpbnQgU1FOQU47CglleHRlcm4gIHVuc2lnbmVkICAg
aW50IERRTkFOWzJdOwoJZXh0ZXJuICB1bnNpZ25lZCAgIGludCBTU05BTjsKCWV4dGVybiAgdW5z
aWduZWQgICBpbnQgRFNOQU5bMl07CgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKdHlwZWRlZgl1
bnNpZ25lZCBzaG9ydCBmcHJuZF90OwoKCgoKCgoKCmZwcm5kX3QgZnBfcmVhZF9ybmQodm9pZCk7
CmZwcm5kX3QgZnBfc3dhcF9ybmQoZnBybmRfdCBybmQpOwoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCiMgMTkyICIvdXNyL2luY2x1ZGUvc3lzL2xpbWl0cy5oIiAyIDMgNAoKCgkJCSAKIyAy
MjEgIi91c3IvaW5jbHVkZS9zeXMvbGltaXRzLmgiIDMgNAoKCiAKCgoKCgoKCgogCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgkJCQkJIAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIAoK
CgoKIAoKCgoKCgoKCgoKIAoKCgoKCiAgCgoKCgojIDM5ICIvdXNyL2luY2x1ZGUvc3lzL2xvY2Fs
ZWRlZi5oIiAyIDMgNAoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2xjX2NvcmUuaCIgMSAzIDQKIAog
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvaG9t
ZS90di90b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0t
YWl4NC4yLjEuMC8yLjk1LjIvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzIDQKIAogCiAKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIAoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgogCgoKCgoK
CgoKCgoKIAoKCgoKCgoKCgoKCiMgNzggIi9ob21lL3R2L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIu
OTUuMi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjIuMS4wLzIuOTUuMi9pbmNsdWRlL3N5
cy90eXBlcy5oIiAzIDQKCgoKCgoKCgoKCgoKCnR5cGVkZWYgbG9uZwlmcG9zX3Q7CgoKCnR5cGVk
ZWYgbG9uZyBsb25nIGZwb3M2NF90OwoKCgoKCgp0eXBlZGVmCWxvbmcJCXRpbWVfdDsKCgoKCnR5
cGVkZWYgaW50CQljbG9ja190OwoKCiMgMTE5ICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2dj
Yy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvaW5jbHVk
ZS9zeXMvdHlwZXMuaCIgMyA0CgoKCgoKIAoKCnR5cGVkZWYJdW5zaWduZWQgY2hhcgl1Y2hhcl90
Owp0eXBlZGVmCXVuc2lnbmVkIHNob3J0CXVzaG9ydF90Owp0eXBlZGVmCXVuc2lnbmVkIGludAl1
aW50X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZwl1bG9uZ190Owp0eXBlZGVmIHNpZ25lZCBpbnQJ
c3NpemVfdDsKCiAKCgp0eXBlZGVmIGxvbmcJCWxldmVsX3Q7CnR5cGVkZWYJbG9uZwkJZGFkZHJf
dDsJIAp0eXBlZGVmCWNoYXIgKgkJY2FkZHJfdDsJIAp0eXBlZGVmCXVsb25nX3QJCWlub190OwkJ
IAp0eXBlZGVmIHNob3J0CQljbnRfdDsKdHlwZWRlZiB1bG9uZ190CQlkZXZfdDsJCSAKdHlwZWRl
Zglsb25nCQljaGFuX3Q7CQkgCgoKCgp0eXBlZGVmIGxvbmcJCW9mZl90OwkJIAogCgoKdHlwZWRl
ZiBsb25nIGxvbmcgCW9mZjY0X3Q7CgoKdHlwZWRlZglsb25nCQlwYWRkcl90Owp0eXBlZGVmCWxv
bmcJCWtleV90Owp0eXBlZGVmIGxvbmcJCXRpbWVyX3Q7CSAKdHlwZWRlZglzaG9ydAkJbmxpbmtf
dDsKdHlwZWRlZgl1bG9uZ190CQltb2RlX3Q7CQkgCnR5cGVkZWYgdWxvbmdfdAkJdWlkX3Q7CQkg
CnR5cGVkZWYgdWxvbmdfdAkJZ2lkX3Q7CQkgCnR5cGVkZWYJdm9pZCAqCQltaWRfdDsJCSAKdHlw
ZWRlZglpbnQJCXBpZF90OwkJIAp0eXBlZGVmIGludCAgICAgICAgICAgICB0aWRfdDsgICAgICAg
ICAgIAp0eXBlZGVmIGNoYXIJCXNsYWJfdFsxMl07CSAKdHlwZWRlZiBsb25nICAgICAgICAgICAg
bXR5cF90OwkJIAp0eXBlZGVmIGludCAgICAgICAgICAgICBib29sZWFuX3Q7CnR5cGVkZWYgbG9u
ZwkJYmxrY250X3Q7CSAKdHlwZWRlZiB1bG9uZ190IAlmc2Jsa2NudF90OwkgCnR5cGVkZWYgdWxv
bmdfdAkJZnNmaWxjbnRfdDsJIAoKCgoKCgoKdHlwZWRlZiB1bG9uZ190CQlpZF90OwkJIAp0eXBl
ZGVmIHVuc2lnbmVkIGludAl1c2Vjb25kc190OwkgCgoKIAogCnR5cGVkZWYgc3RydWN0IHNpZ3Nl
dF90CXsKCgl1bnNpZ25lZCBsb25nIGxvc2lnczsKCXVuc2lnbmVkIGxvbmcgaGlzaWdzOwoKCgoK
fSBzaWdzZXRfdDsKCnR5cGVkZWYgaW50IHNpZ25hbF90OwoKIAoKCnR5cGVkZWYgc3RydWN0IGZz
aWRfdCB7CgoJdWxvbmdfdAl2YWxbMl07CgoKCn0gZnNpZF90OwoKCgoKCgojIDEgIi91c3IvaW5j
bHVkZS9zeXMvbV90eXBlcy5oIiAxIDMgNAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKCmxhYmVsX3QKCnsJ
CSAKCglzdHJ1Y3QgbGFiZWxfdCAgICpwcmV2OwkJIAoJdWxvbmdfdCAgICAgICAgICAgaWFyOwkJ
IAoJdWxvbmdfdCAgICAgICAgICAgc3RhY2s7CSAKCXVsb25nX3QgICAgICAgICAgIHRvYzsJCSAK
CXVsb25nX3QgICAgICAgICAgIGNyOyAgICAgICAgICAgIAoJdWxvbmdfdCAgICAgICAgICAgaW50
cHJpOwkgCgl1bG9uZ190ICAgICAgICAgICByZWdbMTldOwkgCiMgNjYgIi91c3IvaW5jbHVkZS9z
eXMvbV90eXBlcy5oIiAzIDQKCn0gbGFiZWxfdDsKCnR5cGVkZWYgbG9uZwkJdm1pZF90OwkJIAp0
eXBlZGVmIHVsb25nX3QJCXZtaGFuZGxlX3Q7CSAKCnR5cGVkZWYgc3RydWN0Cgp2bWFkZHJfdAoK
ewkJIAoKCXZtaGFuZGxlX3QJc3J2YWw7CQkgCgljYWRkcl90CQlvZmZzZXQ7CQkgCgoKCgp9IHZt
YWRkcl90OwoKdHlwZWRlZiBzdHJ1Y3QKCmFkc3BhY2VfdAoKewkJIAoKCXVsb25nX3QJCWFsbG9j
OwkJIAoJdm1oYW5kbGVfdAlzcnZhbFsxNl07CSAKCgoKCn0gYWRzcGFjZV90OwoKCgojIDIxMSAi
L2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMt
aWJtLWFpeDQuMi4xLjAvMi45NS4yL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CgoKCgoKdHlw
ZWRlZiBjaGFyICoJCXZhX2xpc3Q7CgoKCgoKCgoKCgoKCgogCgoKdHlwZWRlZiB1c2hvcnRfdAlV
bmlDaGFyOwoKIAoKCnR5cGVkZWYJdWNoYXJfdAkJdWNoYXI7CnR5cGVkZWYJdXNob3J0X3QJdXNo
b3J0Owp0eXBlZGVmCXVpbnRfdAkJdWludDsKdHlwZWRlZiB1bG9uZ190CQl1bG9uZzsKCnR5cGVk
ZWYJc3RydWN0IHsgaW50IHJbMV07IH0gKglwaHlzYWRyX3Q7CnR5cGVkZWYJcGh5c2Fkcl90CXBo
eXNhZHI7CgogCnR5cGVkZWYJdW5zaWduZWQgY2hhcgl1X2NoYXI7CnR5cGVkZWYJdW5zaWduZWQg
c2hvcnQJdV9zaG9ydDsKdHlwZWRlZgl1bnNpZ25lZCBpbnQJdV9pbnQ7CnR5cGVkZWYJdW5zaWdu
ZWQgbG9uZwl1X2xvbmc7Cgp0eXBlZGVmCXN0cnVjdAlfcXVhZCB7IGxvbmcgdmFsWzJdOyB9IHF1
YWQ7CnR5cGVkZWYJbG9uZwlzd2Jsa190OwoKCgogCnN0cnVjdCBzaWdzZXQJewoJdW5zaWduZWQg
bG9uZyBsb3NpZ3M7Cgl1bnNpZ25lZCBsb25nIGhpc2lnczsKfTsKCiAKc3RydWN0IGZzaWQgewoJ
dW5zaWduZWQgbG9uZwl2YWxbMl07Cn07CgoKCgoKIAoKCgpzdHJ1Y3QgZmlsZWlkIHsgICAgICAg
ICAgICAgICAgICAKCXVpbnRfdCAgZmlkX2xlbjsKCWlub190ICAgZmlkX2lubzsKCXVpbnRfdCAg
ZmlkX2dlbjsKCWNoYXIgICAgZmlkX3hbKDMyICAtIHNpemVvZihmc2lkX3QpIC0gc2l6ZW9mKHVp
bnRfdCkpICAtIChzaXplb2YoaW5vX3QpICsgMikgLSBzaXplb2YodWludF90KV07Cn07CgojIDI5
NSAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2Vy
cGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAoKCnN0cnVj
dCBmaWQgewoJdWludF90CWZpZF9sZW47CgljaGFyCWZpZF9kYXRhWygzMiAgLSBzaXplb2YoZnNp
ZF90KSAtIHNpemVvZih1aW50X3QpKSBdOwp9Owp0eXBlZGVmIHN0cnVjdCBmaWQgZmlkX3Q7Cgog
CnN0cnVjdCBmaGFuZGxlIHsKCWNoYXIgeFszMiBdOwkJIAp9OwpzdHJ1Y3QgZmlsZWhhbmRsZSB7
CQkJIAoJZnNpZF90CQlmaF9mc2lkOwkJIAoJc3RydWN0IGZpbGVpZAlmaF9maWQ7CQkJIAp9Owp0
eXBlZGVmIHN0cnVjdCBmaGFuZGxlIGZoYW5kbGVfdDsKCgoKCgoKIApzdHJ1Y3QgdW5pcXVlX2lk
IHsKICAgICAgIHVuc2lnbmVkIGxvbmcgd29yZDE7CiAgICAgICB1bnNpZ25lZCBsb25nIHdvcmQy
OwogICAgICAgdW5zaWduZWQgbG9uZyB3b3JkMzsKICAgICAgIHVuc2lnbmVkIGxvbmcgd29yZDQ7
Cn07CnR5cGVkZWYgc3RydWN0IHVuaXF1ZV9pZCB1bmlxdWVfaWRfdDsKCiMgMzQ3ICIvaG9tZS90
di90b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4
NC4yLjEuMC8yLjk1LjIvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CgoKCnR5cGVkZWYJbG9uZyBs
b25nICBvZmZzZXRfdDsJCSAKCgoKCnR5cGVkZWYgbG9uZyBzb2ZmX3Q7CQkJIAoKCnR5cGVkZWYg
bG9uZyBsb25nIGxvbmdsb25nX3Q7ICAgICAgICAgCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25n
IHVfbG9uZ2xvbmdfdDsKCgoKCiMgMzYgIi91c3IvaW5jbHVkZS9zeXMvbGNfY29yZS5oIiAyIDMg
NAoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewoKICAgIHVuc2lnbmVkIHNob3J0CglfX3R5cGVf
aWQsCglfX21hZ2ljOwogICAgdW5zaWduZWQgbG9uZwoJX192ZXJzaW9uOwogICAgCiAgICBzaXpl
X3QgIF9fc2l6ZTsKCn0gX0xDX29iamVjdF90OwoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgoK
CgoKCgogCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogIAogICAgX0xDX29iamVjdF90ICBfX2hk
cjsKCQogICAgIAoKICAgIGludCAgIF9fY2F0Z2V0cyAgOwogICAgaW50ICAgICAgICAgICAgICBf
X2NhdGNsb3NlICA7CiAgICAKICAgICAKICAgIGludCAgIF9fY29tcHJlc3MgIDsKICAgIGludCAg
IF9fZGVjb21wcmVzcyAgOwogICAgaW50ICAgICAgX19zdGFydF9jb21wcmVzcyAgOwogICAgaW50
ICAgICAgX19lbmRfY29tcHJlc3MgIDsKICAgIAogICAgIAogICAgaW50ICAgICAgX19pbml0ICA7
CiAgICB2b2lkICAgICpfX2RhdGE7Cn0gX0xDX2NvcmVfY2FyX3Q7Cgp0eXBlZGVmIHN0cnVjdCB7
CgogICAgX0xDX29iamVjdF90ICBfX2hkcjsKCiAgICAgCiAgICBpbnQgICAgX19ubF9sYW5naW5m
byAgOwogICAgCiAgICAgCiAgICBpbnQgICAgX19tYnRvd2MgIDsKICAgIGludCAgICBfX21ic3Rv
d2NzICA7CiAgICBpbnQgICAgICAgX193Y3RvbWIgIDsKICAgIGludCAgICBfX3djc3RvbWJzICA7
CiAgICAKICAgICAKICAgIGludCAgICAgICBfX21ibGVuICA7CiAgICAKICAgICAKICAgIGludCAg
ICBfX3djc3dpZHRoICA7CiAgICBpbnQgICAgX193Y3dpZHRoICA7CiAgICAKICAgICAKICAgIGlu
dCAgICAgICBfX21idG9wYyAgOwogICAgaW50ICAgICAgIF9fbWJzdG9wY3MgIDsKICAgIGludCAg
ICAgICBfX3BjdG9tYiAgOwogICAgaW50ICAgICAgIF9fcGNzdG9tYnMgIDsKICAgIAogICAgIAog
ICAgaW50ICAgIF9fY3NpZCAgOwogICAgaW50ICAgIF9fd2NzaWQgIDsKICAgIAogICAgIAogICAg
aW50ICAgICAgIF9faW5pdCAgOwogICAgdm9pZCAgICAgKl9fZGF0YTsKfSBfTENfY29yZV9jaGFy
bWFwX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogCiAgICBfTENfb2JqZWN0X3QgIF9faGRyOyAKICAg
IAogICAgIAogICAgaW50ICAgICAgX190b3d1cHBlciAgOwogICAgaW50ICAgICAgX190b3dsb3dl
ciAgOwogICAgCiAgICAgCiAgICBpbnQgICAgX19nZXRfd2N0eXBlICA7CiAgICBpbnQgICAgICAg
ICAgICAgX19pc193Y3R5cGUgIDsKICAgIAogICAgIAogICAgaW50ICAgICAgICAgIF9faW5pdCAg
OwogICAgdm9pZCAgICAgKl9fZGF0YTsKfSBfTENfY29yZV9jdHlwZV90OwoKdHlwZWRlZiBzdHJ1
Y3QgewoKICAgIF9MQ19vYmplY3RfdCAgX19oZHI7CgogICAgIAogICAgaW50ICAgICAgICBfX3N0
cmNvbGwgIDsKICAgIGludCAgICAgX19zdHJ4ZnJtICA7CiAgICAKICAgICAKICAgIGludCAgICAg
ICAgX193Y3Njb2xsICA7CiAgICBpbnQgICAgIF9fd2NzeGZybSAgOwogICAgCiAgICAgCiAgICBp
bnQgICAgICAgIF9fZm5tYXRjaCAgOwogICAgCiAgICAgCiAgICBpbnQgICAgICAgIF9fcmVnY29t
cCAgOwogICAgaW50ICAgICBfX3JlZ2Vycm9yICA7CiAgICBpbnQgICAgICAgIF9fcmVnZXhlYyAg
OwogICAgaW50ICAgICAgIF9fcmVnZnJlZSAgOwogICAgCiAgICAgCiAgICBpbnQgICAgICAgIF9f
aW5pdCAgOwogICAgdm9pZCAgICAgKl9fZGF0YTsKfSBfTENfY29yZV9jb2xsYXRlX3Q7CgoKdHlw
ZWRlZiBzdHJ1Y3QgewoKICAgIF9MQ19vYmplY3RfdCAgX19oZHI7CiAgICAKICAgICAKICAgIGlu
dCAgICAgX19ubF9sYW5naW5mbyAgOwogICAgCiAgICAgCiAgICBpbnQgICAgIF9fc3RyZnRpbWUg
IDsKICAgIGludCAgICAgX19zdHJwdGltZSAgOwogICAgCiAgICAgCiAgICBpbnQgICAgIF9fd2Nz
ZnRpbWUgIDsKICAgIAogICAgIAogICAgaW50ICAgICAgICBfX2luaXQgIDsKICAgIHZvaWQgICAg
ICpfX2RhdGE7Cn0gX0xDX2NvcmVfdGltZV90OwoKCnR5cGVkZWYgc3RydWN0IHsKCiAgICBfTENf
b2JqZWN0X3QgIF9faGRyOwoKICAgICAKICAgIGludCAgICAgX19ubF9sYW5naW5mbyAgOwogICAg
CiAgICAgCiAgICBpbnQgICAgIF9fc3RyZm1vbiAgOwogICAgCiAgICAgCiAgICBpbnQgICAgICAg
IF9faW5pdCAgOwogICAgdm9pZCAgICAgKl9fZGF0YTsKfSBfTENfY29yZV9tb25ldGFyeV90OwoK
CnR5cGVkZWYgc3RydWN0IHsKCiAgICBfTENfb2JqZWN0X3QgIF9faGRyOwoKICAgICAKICAgIGlu
dCAgICAgX19ubF9sYW5naW5mbyAgOwogICAgCiAgICAgCiAgICBpbnQgICAgICAgIF9faW5pdCAg
OwogICAgdm9pZCAgICAgKl9fZGF0YTsKfSBfTENfY29yZV9udW1lcmljX3Q7CgoKdHlwZWRlZiBz
dHJ1Y3QgewoKICAgIF9MQ19vYmplY3RfdCAgX19oZHI7CiAgICAKICAgICAKICAgIGludCAgICBf
X25sX2xhbmdpbmZvICA7CiAgICAKICAgICAKICAgIGludCAgICBfX3JwbWF0Y2ggIDsKICAgIAog
ICAgIAogICAgaW50ICAgICAgIF9faW5pdCAgOwogICAgdm9pZCAgICAgICAgKl9fZGF0YTsKfSBf
TENfY29yZV9yZXNwX3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CgogICAgX0xDX29iamVjdF90IF9faGRy
OwoKICAgICAKICAgIGludCAgICAgICAgICAgX19ubF9sYW5naW5mbyAgOwogICAgaW50ICAgX19s
b2NhbGVjb252ICA7CiAgICAKICAgICAKICAgIGludCAgICAgX19pbml0ICA7CiAgICB2b2lkICAg
ICAgICAgKl9fZGF0YTsKfSBfTENfY29yZV9sb2NhbGVfdDsKCgoKCiMgNDAgIi91c3IvaW5jbHVk
ZS9zeXMvbG9jYWxlZGVmLmgiIDIgMyA0CgojIDEgIi9ob21lL3R2L3Rvb2xzL2dudS9yczYwMDAv
Z2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjIuMS4wLzIuOTUuMi9pbmNs
dWRlL2xvY2FsZS5oIiAxIDMgNAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKIAoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpzdHJ1Y3QgbGNvbnYgewogICBjaGFyICpkZWNpbWFsX3Bv
aW50OwkJIAogICBjaGFyICp0aG91c2FuZHNfc2VwOwkJIAogICBjaGFyICpncm91cGluZzsJCSAK
ICAgY2hhciAqaW50X2N1cnJfc3ltYm9sOwkgCiAgIGNoYXIgKmN1cnJlbmN5X3N5bWJvbDsJIAog
ICBjaGFyICptb25fZGVjaW1hbF9wb2ludDsJIAogICBjaGFyICptb25fdGhvdXNhbmRzX3NlcDsJ
IAogICBjaGFyICptb25fZ3JvdXBpbmc7CQkgCiAgIGNoYXIgKnBvc2l0aXZlX3NpZ247CQkgCiAg
IGNoYXIgKm5lZ2F0aXZlX3NpZ247CQkgCiAgIGNoYXIgaW50X2ZyYWNfZGlnaXRzOwkgCiAgIGNo
YXIgZnJhY19kaWdpdHM7CQkgCiAgIGNoYXIgcF9jc19wcmVjZWRlczsJCSAKICAgY2hhciBwX3Nl
cF9ieV9zcGFjZTsJCSAKICAgY2hhciBuX2NzX3ByZWNlZGVzOwkJIAogICBjaGFyIG5fc2VwX2J5
X3NwYWNlOwkJIAogICBjaGFyIHBfc2lnbl9wb3NuOwkJIAogICBjaGFyIG5fc2lnbl9wb3NuOwkJ
IAoKCiAgIGNoYXIgKmxlZnRfcGFyZW50aGVzaXM7CSAKICAgY2hhciAqcmlnaHRfcGFyZW50aGVz
aXM7CSAKCgoKCgp9IDsKCgoKCgoKCgoKCgoKCgoKc3RydWN0IGxjb252ICpsb2NhbGVjb252KHZv
aWQpOwpjaGFyICAgKnNldGxvY2FsZShpbnQsIGNvbnN0IGNoYXIgKik7CgoKCgoKdHlwZWRlZiBz
dHJ1Y3QgbGNvbnYgbGNvbnY7CgoKCiMgNDEgIi91c3IvaW5jbHVkZS9zeXMvbG9jYWxlZGVmLmgi
IDIgMyA0CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2xvY2FsZWRlZjMxLmgiIDEgMyA0CiAKIAog
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCgoKIAoKCgoKCgoKCgoKCgoKCiAKCgogCgoKdHlwZWRl
ZiBzdHJ1Y3QgIGNvbGRlc2MgIHsgICAgICAgICAgICAgICAgICAgICAgCglzaG9ydCAgICAgY2Rf
c3Ryb2ZmOyAgICAgICAgICAgICAgICAgICAgCglzaG9ydAkgIGNkX3JlcG9mZjsKCXNob3J0ICAg
ICBjZF9jdmFsOwoJc2hvcnQJICBjZF9jdW5pcTsKfSBjb2xkZXNjX3Q7CgogCgoKdHlwZWRlZiBz
dHJ1Y3QgY29sbGF0aW9uX3RhYmxlIHsgICAgICAgICAgICAgICAgIAoJc2hvcnQgICAgbGNfdmVy
c2lvbjsgICAgICAgICAgICAgICAgICAgICAKCXNob3J0CSBsY19sZW5ndGg7CQkJIAoJY2hhciAg
ICAgKmxjX2xvY2FsZV9uYW1lOwkJIAoJaW50ICAgICAgbGVuX2NvbGxhdGU7CglzaG9ydCAgICAq
bGNfY29sbGF0ZTsgICAgICAgICAgICAgICAgICAgIAoJaW50ICAgICAgbGVuX2NvbHVuaXE7Cglz
aG9ydCAgICAqbGNfY29sdW5pcTsgICAgICAgICAgICAgICAgICAgIAoJaW50ICAgICAgbGVuX2Nv
bGRlc2M7Cgljb2xkZXNjX3QgKmxjX2NvbGRlc2M7ICAgICAgICAgICAgICAgICAgIAoJaW50CSBs
ZW5fc3RyaW5nczsJCQkKCXdjaGFyX3QgICpsY19zdHJpbmdzOwkJCSAKCWludAkgaGlnaF9jdmFs
dWU7CQkJIAp9IGNvbF90OwoKIAoKCgoKCnR5cGVkZWYgc3RydWN0IGNoYXJfY2xhc3NpZmljYXRp
b25fdGFibGUgeyAgICAgICAKCXNob3J0ICAgICAgbGNfdmVyc2lvbjsgCQkgCglzaG9ydAkgICBs
Y19sZW5ndGg7ICAJCSAKCXNob3J0ICAgICAgbGNfY29kZV90eXBlOyAJIAoJc2hvcnQgICAgICBt
Yl9jdXJfbWF4OyAgIAkgCglzaG9ydCAgICAgIG1iX2N1cl9taW47ICAgCSAKCXNob3J0ICAgICAg
bGNfZHNwX3dpZHRoOyAgICAgICAgICAgICAgICAgIAoJY2hhciAgICAgICAqbGNfbG9jYWxlX25h
bWU7IAkgCglpbnQgICAgICAgIGxlbl9jYXNlY29udjsgICAJIAoJd2NoYXJfdCAgICAqbGNfY2Fz
ZWNvbnY7ICAgCSAKCWludAkgICBsZW5fY3R5cGU7Cgl1bnNpZ25lZCBzaG9ydCAqbGNfY3R5cGU7
CSAJCn0gY3R5cGVfdDsKCiAKCgoKdHlwZWRlZglzdHJ1Y3QgbGNfbW9uZXRhcnlfdGFibGUgewoJ
c2hvcnQgIAlsY192ZXJzaW9uOwoJc2hvcnQgCWxjX2xlbmd0aDsJCSAKCWNoYXIgICAJKmxjX2xv
Y2FsZV9uYW1lOwkgCgljaGFyIAkqaW50X2N1cnJfc3ltYm9sOwkgCgljaGFyIAkqY3VycmVuY3lf
c3ltYm9sOwkgCgljaGFyIAkqbW9uX2RlY2ltYWxfcG9pbnQ7CSAKCWNoYXIgCSptb25fdGhvdXNh
bmRzX3NlcDsJIAoJY2hhciAJKm1vbl9ncm91cGluZzsJCSAKCWNoYXIgCSpwb3NpdGl2ZV9zaWdu
OwkJIAoJY2hhciAJKm5lZ2F0aXZlX3NpZ247CQkgCgljaGFyIAlpbnRfZnJhY19kaWdpdHM7CSAK
CWNoYXIgCWZyYWNfZGlnaXRzOwkJIAoJY2hhciAJcF9jc19wcmVjZWRlczsJCSAKCWNoYXIgCXBf
c2VwX2J5X3NwYWNlOwkJIAoJY2hhciAJbl9jc19wcmVjZWRlczsJCSAKCWNoYXIgCW5fc2VwX2J5
X3NwYWNlOwkJIAoJY2hhciAJcF9zaWduX3Bvc247CQkgCgljaGFyIAluX3NpZ25fcG9zbjsJCSAK
fSBtb25fdDsKCiAKCgoKdHlwZWRlZiBzdHJ1Y3QgbnVtZXJpY190YWJsZSB7ICAgICAgICAgICAg
ICAgICAgIAoJc2hvcnQJbGNfdmVyc2lvbjsKCXNob3J0CWxjX2xlbmd0aDsJCSAKCWNoYXIgICAg
KmxjX2xvY2FsZV9uYW1lOwkgCgljaGFyIAkqZGVjaW1hbF9wb2ludDsKCWNoYXIgCSp0aG91c2Fu
ZHNfc2VwOwoJY2hhcgkqZ3JvdXBpbmc7Cn0gbnVtX3Q7CgogCgoKCnR5cGVkZWYgc3RydWN0IGxj
X21lc3NhZ2VzX3RhYmxlIHsKCXNob3J0CWxjX3ZlcnNpb247CglzaG9ydAlsY19sZW5ndGg7CQkg
CgljaGFyICAgICpsY19sb2NhbGVfbmFtZTsJIAoJY2hhciAJKm1lc3NhZ2VzOwkJIAoJY2hhciAJ
Knllc19zdHJpbmc7CQkgCgljaGFyIAkqbm9fc3RyaW5nOwkJIAp9IG1zZ190OwoKIAoKCgp0eXBl
ZGVmIHN0cnVjdCBsY190aW1lX3RhYmxlIHsKCXNob3J0ICAgbGNfdmVyc2lvbjsKCXNob3J0CWxj
X2xlbmd0aDsJICAKCWNoYXIgICAgKmxjX2xvY2FsZV9uYW1lOyAgCgljaGFyICAgICp0X2ZtdDsg
ICAgICAgICAgCgljaGFyICAgICpkX2ZtdDsgICAgICAgICAgCgljaGFyICAgICpubGxkYXRlOyAg
ICAgICAgCgljaGFyICAgICpkX3RfZm10OyAgICAgICAgCgljaGFyICAgICphYmRheTsgICAgICAg
ICAgCgljaGFyICAgICpkYXk7ICAgICAgICAgICAgCgljaGFyICAgICphYm1vbjsgICAgICAgICAg
CgljaGFyICAgICptb247ICAgICAgICAgICAgCiAKCgoKCWNoYXIgICAgKm1pc2M7ICAgICAgICAg
ICAKCWNoYXIgICAgKnRzdHJzOyAgICAgICAgICAKCWNoYXIgICAgKnR1bml0czsgICAgICAgICAK
IAoKCgljaGFyCSp5ZWFyOwkJIAoJY2hhciAgICAqYW1fcG07ICAgICAgICAgIAp9IHRpbV90OwoK
IAoKCgoKdHlwZWRlZiBzdHJ1Y3Qgd2NoYXJfbWFwcGluZ190YWJsZSB7ICAgICAgICAgICAgIAoJ
c2hvcnQgICAgbGNfdmVyc2lvbjsKCXNob3J0CSBsY19sZW5ndGg7CQkJIAoJY2hhciAgICAgKmxj
X2lkZW50aWZpZXI7Cn0gbWFwX3Q7CgoKIAoKCgoKCnR5cGVkZWYgc3RydWN0IGxvY2FsZWluZm9f
dGFibGUgeyAgICAgICAgICAgCgljaGFyICAgICBsY19tYWcwLCBsY19tYWcxOyAgICAgICAKCXNo
b3J0ICAgIGxjX3ZlcnNpb247ICAgICAgICAgICAgIAoJc2hvcnQgICAgbGNfY29kZV90eXBlOyAg
ICAgICAgICAgICAgICAgCglzaG9ydAkgbGNfbGVuZ3RoOwkJIAoJY29sX3QgICAgKmxjX2NvbHRi
bDsJCSAKCWN0eXBlX3QgICpsY19jaHJ0Ymw7CQkgCgltb25fdCAgICAqbGNfbW9udGJsOwkJIAoJ
bnVtX3QgICAgKmxjX251bXRibDsJCSAKCXRpbV90ICAgICpsY190aW10Ymw7CQkgCgltc2dfdCAg
ICAqbGNfbXNndGJsOwkJIAoJbWFwX3QgICAgKmxjX21hcHRibDsJCSAKfSBsb2NfdDsKCiMgNDMg
Ii91c3IvaW5jbHVkZS9zeXMvbG9jYWxlZGVmLmgiIDIgMyA0CgoKCgoKCgoKCgoKCgoKCiAKCgoK
CnR5cGVkZWYgc3RydWN0IHsKCiAgICBfTENfY29yZV9jaGFybWFwX3QgY29yZTsKICAgIAogICAg
Y2hhciAgICAgKmNtX2NzbmFtZTsJIAogICAgCiAgICBzaXplX3QgICBjbV9tYl9jdXJfbWF4OyAg
ICAgIAogICAgc2l6ZV90ICAgY21fbWJfY3VyX21pbjsJIAoKICAgIHVuc2lnbmVkIGNoYXIKCSAg
ICAgY21fbWF4X2Rpc3Bfd2lkdGg7ICAKCQkJCSAKCiAgICB1bnNpZ25lZCAKCWNoYXIgKmNtX2Nz
dGFiOwkJIAoKICAgIHN0cnVjdCBfX0xDX2xvY2FsZSAJCSAKICAgICAgICAgICAgICpsb2NfcmVj
OwoKICAgIHZvaWQgICAgICpfX21ldGhfcHRyOwkgCiAgICB2b2lkICAgICAqX19kYXRhX3B0cjsJ
IAogICAgCn0gX0xDX2NoYXJtYXBfdDsKCnR5cGVkZWYgc3RydWN0IF9MQ19jaGFybWFwX29iamhk
bCBfTENfY2hhcm1hcF9vYmpoZGxfdDsKCnN0cnVjdCBfTENfY2hhcm1hcF9vYmpoZGwgewoJX0xD
X2NoYXJtYXBfdCAqb2JqOwoKCgl2b2lkICooKiptZXRoKSgpOwoKCnN0cnVjdCBfTENfbG9jYWxl
X29iamhkbCAqbG9jX2hkbDsJIAoJCQkJCSAKCQkJCQkgCn07CgoKIAoKCgoKdHlwZWRlZglzdHJ1
Y3QgewoKICAgIF9MQ19jb3JlX21vbmV0YXJ5X3QgICBjb3JlOwogICAgCiAgICBjaGFyICppbnRf
Y3Vycl9zeW1ib2w7CSAgICAKICAgIGNoYXIgKmN1cnJlbmN5X3N5bWJvbDsJICAgIAogICAgY2hh
ciAqbW9uX2RlY2ltYWxfcG9pbnQ7CSAgICAKICAgIGNoYXIgKm1vbl90aG91c2FuZHNfc2VwOwkg
ICAgCiAgICBjaGFyICptb25fZ3JvdXBpbmc7CQkgICAgCiAgICBjaGFyICpwb3NpdGl2ZV9zaWdu
OwkgICAgCiAgICBjaGFyICpuZWdhdGl2ZV9zaWduOwkgICAgCiAgICBzaWduZWQgY2hhciBpbnRf
ZnJhY19kaWdpdHM7ICAgIAogICAgc2lnbmVkIGNoYXIgZnJhY19kaWdpdHM7CSAgICAKICAgIHNp
Z25lZCBjaGFyIHBfY3NfcHJlY2VkZXM7CSAgICAKICAgIHNpZ25lZCBjaGFyIHBfc2VwX2J5X3Nw
YWNlOwkgICAgCiAgICBzaWduZWQgY2hhciBuX2NzX3ByZWNlZGVzOwkgICAgCiAgICBzaWduZWQg
Y2hhciBuX3NlcF9ieV9zcGFjZTsJICAgIAogICAgc2lnbmVkIGNoYXIgcF9zaWduX3Bvc247CSAg
ICAKICAgIHNpZ25lZCBjaGFyIG5fc2lnbl9wb3NuOwkgICAgCiAgICBjaGFyICpkZWJpdF9zaWdu
OwkJICAgIAogICAgY2hhciAqY3JlZGl0X3NpZ247CQkgICAgCiAgICBjaGFyICpsZWZ0X3BhcmVu
dGhlc2lzOwkgICAgCiAgICBjaGFyICpyaWdodF9wYXJlbnRoZXNpczsJICAgIAogICAgCiAgICBz
dHJ1Y3QgX19MQ19sb2NhbGUgCQkgICAgCiAgICAgICAgICAgICAqbG9jX3JlYzsJCSAgICAKCiAg
ICB2b2lkICAgICAqX19tZXRoX3B0cjsJICAgIAogICAgdm9pZCAgICAgKl9fZGF0YV9wdHI7CSAg
ICAKICAgIAp9IF9MQ19tb25ldGFyeV90OwoKdHlwZWRlZiBzdHJ1Y3QgX0xDX21vbmV0YXJ5X29i
amhkbCBfTENfbW9uZXRhcnlfb2JqaGRsX3Q7CnN0cnVjdCBfTENfbW9uZXRhcnlfb2JqaGRsIHsK
CV9MQ19tb25ldGFyeV90ICpvYmo7CgoKCXZvaWQgKigqKm1ldGgpKCk7CgoKc3RydWN0IF9MQ19s
b2NhbGVfb2JqaGRsICpsb2NfaGRsOwkgCgkJCQkJIAoJCQkJCSAKfTsKCiAKCgoKCnR5cGVkZWYg
c3RydWN0IHsKCiAgICBfTENfY29yZV9udW1lcmljX3QgY29yZTsKICAgIAogICAgY2hhciAgICAg
KmRlY2ltYWxfcG9pbnQ7CiAgICBjaGFyICAgICAqdGhvdXNhbmRzX3NlcDsKICAgIHVuc2lnbmVk
CgljaGFyICpncm91cGluZzsKICAgIAogICAgc3RydWN0IF9fTENfbG9jYWxlIAkJICAgIAogICAg
ICAgICAgICAgKmxvY19yZWM7CQkgICAgCgogICAgdm9pZCAgICAgKl9fbWV0aF9wdHI7CSAgICAK
ICAgIHZvaWQgICAgICpfX2RhdGFfcHRyOwkgICAgCiAgICAKfSBfTENfbnVtZXJpY190OwoKdHlw
ZWRlZiBzdHJ1Y3QgX0xDX251bWVyaWNfb2JqaGRsIF9MQ19udW1lcmljX29iamhkbF90OwpzdHJ1
Y3QgX0xDX251bWVyaWNfb2JqaGRsIHsKCV9MQ19udW1lcmljX3QgKm9iajsKCgoJdm9pZCAqKCoq
bWV0aCkoKTsKCgpzdHJ1Y3QgX0xDX2xvY2FsZV9vYmpoZGwgKmxvY19oZGw7CSAKCQkJCQkgCgkJ
CQkJIAp9OwoKCiAKCgoKCnR5cGVkZWYgc3RydWN0ICB7CgogICAgX0xDX2NvcmVfcmVzcF90IGNv
cmU7CgogICAgY2hhciAgICAgKnllc2V4cHI7CSAgICAgIAogICAgY2hhciAgICAgKm5vZXhwcjsJ
ICAgICAgCiAgICBjaGFyICAgICAqeWVzc3RyOwkgICAgICAKICAgIGNoYXIgICAgICpub3N0cjsJ
ICAgICAgCgogICAgc3RydWN0IF9fTENfbG9jYWxlCSAgICAgIAogICAgICAgICAgICAgKmxvY19y
ZWM7CSAgICAgIAoKICAgIHZvaWQgICAgICpfX21ldGhfcHRyOyAgICAgCiAgICB2b2lkICAgICAq
X19kYXRhX3B0cjsgICAgIAogICAgCn0gX0xDX3Jlc3BfdDsKCnR5cGVkZWYgc3RydWN0IF9MQ19y
ZXNwX29iamhkbCBfTENfcmVzcF9vYmpoZGxfdDsKc3RydWN0IF9MQ19yZXNwX29iamhkbCB7Cglf
TENfcmVzcF90ICpvYmo7CgoKCXZvaWQgKigqKm1ldGgpKCk7CgoKc3RydWN0IF9MQ19sb2NhbGVf
b2JqaGRsICpsb2NfaGRsOwkgCgkJCQkJIAoJCQkJCSAKfTsKCgogCgoKCgp0eXBlZGVmIHN0cnVj
dCB7CgogICAgX0xDX2NvcmVfdGltZV90IGNvcmU7CiAgICAKICAgIGNoYXIgKmRfZm10OyAgCiAg
ICBjaGFyICp0X2ZtdDsgIAogICAgY2hhciAqZF90X2ZtdDsKICAgIGNoYXIgKnRfZm10X2FtcG07
CiAgICBjaGFyICphYmRheVs3XTsgIAogICAgY2hhciAqZGF5WzddOyAgICAKICAgIGNoYXIgKmFi
bW9uWzEyXTsgIAogICAgY2hhciAqbW9uWzEyXTsgICAgCiAgICBjaGFyICphbV9wbVsyXTsKICAg
IGNoYXIgKmVyYTsKICAgIGNoYXIgKmVyYV95ZWFyOwogICAgY2hhciAqZXJhX2RfZm10OwogICAg
Y2hhciAqYWx0X2RpZ2l0czsKICAgIGNoYXIgKmVyYV9kX3RfZm10OwogICAgY2hhciAqZXJhX3Rf
Zm10OwogICAgIAogICAgc3RydWN0IF9fTENfbG9jYWxlCSAgICAgIAogICAgICAgICAgICAgKmxv
Y19yZWM7CSAgICAgIAoKICAgIHZvaWQgICAgICpfX21ldGhfcHRyOyAgICAgCiAgICB2b2lkICAg
ICAqX19kYXRhX3B0cjsgICAgIAoKfSBfTENfdGltZV90OwoKdHlwZWRlZiBzdHJ1Y3QgX0xDX3Rp
bWVfb2JqaGRsIF9MQ190aW1lX29iamhkbF90OwpzdHJ1Y3QgX0xDX3RpbWVfb2JqaGRsIHsKCV9M
Q190aW1lX3QgKm9iajsKCgoJdm9pZCAqKCoqbWV0aCkoKTsKCgpzdHJ1Y3QgX0xDX2xvY2FsZV9v
YmpoZGwgKmxvY19oZGw7CSAKCQkJCQkgCgkJCQkJIAp9OwoKCiAKCgoKdHlwZWRlZiBzdHJ1Y3Qg
ewogICAgdW5zaWduZWQKCXNob3J0ICBuWzQgICsxXTsKfSBfTENfd2VpZ2h0X3Q7ICAgIAoKICAK
IAoKCgp0eXBlZGVmIHN0cnVjdCB7CgogICAgY2hhciAgICAgICAgICpjZV9zeW07CSAKICAgIF9M
Q193ZWlnaHRfdCBjZV93Z3Q7CSAKCQkJCSAKfSBfTENfY29sbGVsX3Q7CgoKIAoKCgp0eXBlZGVm
IHN0cnVjdCB7CiAgICBfTENfd2VpZ2h0X3QgICBjdF93Z3Q7ICAgICAKCQkJICAgICAgIAoKICAg
IF9MQ19jb2xsZWxfdCAgICpjdF9jb2xsZWw7IAoKfSBfTENfY29sdGJsX3Q7CgoKIAogCiAKCgoK
IAoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICBjaGFyICp0Z3Rfd2d0X3N0cls0ICArMV07CiAgICAg
CiAgICAgCn0gX0xDX3N1YnNfdDsKCgogCgoKCgp0eXBlZGVmIHN0cnVjdCB7CgogICAgX0xDX2Nv
cmVfY29sbGF0ZV90IGNvcmU7CiAgICAKICAgIHVuc2lnbmVkCQkJICAgICAgICAgICAgIAoJY2hh
ciAgICBjb19ub3JkOwkgICAgICAgICAgICAgCiAgICAKICAgIF9MQ193ZWlnaHRfdCBjb19zb3J0
OwkgICAgICAgICAgICAgCgkJCQkJICAgICAKICAgIAogICAgd2NoYXJfdCAgICAgY29fd2NfbWlu
OwkJICAgICAKICAgIHdjaGFyX3QgICAgIGNvX3djX21heDsJCSAgICAgCiAgICAKICAgIHdjaGFy
X3QgICAgIGNvX2NvbF9taW47CQkgICAgIAogICAgd2NoYXJfdCAgICAgY29fY29sX21heDsJCSAg
ICAgCiAgICAKICAgIF9MQ19jb2x0YmxfdCAqY29fY29sdGJsOwkJICAgICAKCQkJCSAgICAgICAg
ICAgICAKICAgIHVuc2lnbmVkCgljaGFyICAgIGNvX25zdWJzOwkJICAgICAKICAgIF9MQ19zdWJz
X3QgICpjb19zdWJzOwkJICAgICAKICAgIAogICAgdW5zaWduZWQKCXNob3J0CWNvX3NwZWNpYWw7
CQkgICAgIAoJCQkJCSAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAoJCQkJCSAgICAgCgogICAgc3RydWN0IF9fTENfbG9jYWxlCSAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgKmxvY19yZWM7CSAgICAgICAgICAgICAKCiAgICB2b2lk
ICAgICAgICAqX19tZXRoX3B0cjsgICAgICAgICAgICAgICAgIAogICAgdm9pZCAgICAgICAgKl9f
ZGF0YV9wdHI7ICAgICAgICAgICAgICAgICAKCn0gX0xDX2NvbGxhdGVfdDsKCnR5cGVkZWYgc3Ry
dWN0IF9MQ19jb2xsYXRlX29iamhkbCBfTENfY29sbGF0ZV9vYmpoZGxfdDsKc3RydWN0IF9MQ19j
b2xsYXRlX29iamhkbCB7CglfTENfY29sbGF0ZV90ICpvYmo7CgoKCXZvaWQgKigqKm1ldGgpKCk7
CgoKc3RydWN0IF9MQ19sb2NhbGVfb2JqaGRsICpsb2NfaGRsOwkgCgkJCQkJIAoJCQkJCSAKfTsK
CiAKCgoKCgoKCiAKCgoKdHlwZWRlZiBzdHJ1Y3QgewoKICAgIGNoYXIgICAgKm5hbWU7CiAgICB1
bnNpZ25lZAoJaW50IG1hc2s7Cgp9IF9MQ19jbGFzc25tX3Q7CgoKIAoKCgoKdHlwZWRlZiBzdHJ1
Y3QgewoKICBfTENfY29yZV9jdHlwZV90IGNvcmU7CiAKICAgCiAgd2NoYXJfdCAgICAgIG1pbl93
YzsKICB3Y2hhcl90ICAgICAgbWF4X3djOwoKICAgCiAgd2NoYXJfdCAgICAgICp1cHBlcjsKICB3
Y2hhcl90ICAgICAgKmxvd2VyOwogIAogICAKICB1bnNpZ25lZAogICAgICBpbnQgICAgICAqbWFz
azsgICAgICAgICAKICB1bnNpZ25lZAogICAgICBpbnQgICAgICAqcW1hc2s7CSAgICAgIAogIHVu
c2lnbmVkCiAgICAgIGNoYXIgICAgICpxaWR4OwkgICAgICAKCiAgIAogIHVuc2lnbmVkCiAgICAg
IGNoYXIgICAgIG5jbGFzc2VzOwogX0xDX2NsYXNzbm1fdCAqY2xhc3NubXM7CiAgCiAgICBzdHJ1
Y3QgX19MQ19sb2NhbGUJICAgICAgCiAgICAgICAgICAgICAgICpsb2NfcmVjOyAgICAgIAoKICAg
IHZvaWQgICAgICAgKl9fbWV0aF9wdHI7ICAgCiAgICB2b2lkICAgICAgICpfX2RhdGFfcHRyOyAg
IAoKfSBfTENfY3R5cGVfdDsKCnR5cGVkZWYgc3RydWN0IF9MQ19jdHlwZV9vYmpoZGwgX0xDX2N0
eXBlX29iamhkbF90OwpzdHJ1Y3QgX0xDX2N0eXBlX29iamhkbCB7CglfTENfY3R5cGVfdCAqb2Jq
OwoKCgl2b2lkICooKiptZXRoKSgpOwoKCnN0cnVjdCBfTENfbG9jYWxlX29iamhkbCAqbG9jX2hk
bDsJIAoJCQkJCSAKCQkJCQkgCn07CgoKIAoKCgoKCiAKCgoKCgp0eXBlZGVmIHN0cnVjdCBfX0xD
X2xvY2FsZSB7CgogICAgX0xDX2NvcmVfbG9jYWxlX3QgY29yZTsKICAgIAogICAgY2hhciAgICAg
ICAgICAgKm5sX2luZm9bNjMgXTsKICAgIHN0cnVjdCBsY29udiAgICpubF9sY29udjsKICAgIAog
ICAgX0xDX2NoYXJtYXBfb2JqaGRsX3QgIGxjX2NoYXJtYXA7CiAgICBfTENfY29sbGF0ZV9vYmpo
ZGxfdCAgbGNfY29sbGF0ZTsKICAgIF9MQ19jdHlwZV9vYmpoZGxfdCAgICBsY19jdHlwZTsKICAg
IF9MQ19tb25ldGFyeV9vYmpoZGxfdCBsY19tb25ldGFyeTsKICAgIF9MQ19udW1lcmljX29iamhk
bF90ICBsY19udW1lcmljOwogICAgX0xDX3Jlc3Bfb2JqaGRsX3QgICAgIGxjX3Jlc3A7CiAgICBf
TENfdGltZV9vYmpoZGxfdCAgICAgbGNfdGltZTsKICAgIAogICAgc3RydWN0IF9fTENfbG9jYWxl
ICAgICpsb2NfcmVjOyAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAJICAgICAgICAgICAg
ICAgICAgIAoKICAgIHZvaWQgICAgICAgICAgICAgICAgICAqX19tZXRoX3B0cjsgICAgIAogICAg
dm9pZCAgICAgICAgICAgICAgICAgICpfX2RhdGFfcHRyOyAgICAgCgogICAgY2hhcgkJICAqX19u
bF95ZXNzdHI7ICAgIAogICAgY2hhcgkJICAqX19ubF9ub3N0cjsgICAgIAogICAgY2hhcgkJICAq
X19ubF9jcm5jeXN0cjsgIAoKfSBfTENfbG9jYWxlX3Q7Cgp0eXBlZGVmIHN0cnVjdCBfTENfbG9j
YWxlX29iamhkbCBfTENfbG9jYWxlX29iamhkbF90OwpzdHJ1Y3QgX0xDX2xvY2FsZV9vYmpoZGwg
ewoJX0xDX2xvY2FsZV90ICpvYmo7CgoKCXZvaWQgKigqKm1ldGgpKCk7CgoKc3RydWN0IF9MQ19s
b2NhbGVfb2JqaGRsICpsb2NfaGRsOwkgCgkJCQkJIAoJCQkJCSAKfTsKCgogCgoKCgoKdHlwZWRl
ZiBzdHJ1Y3QgX0xDX29iamVjdF9oYW5kbGUgX0xDX29iamVjdF9oYW5kbGVfdDsKc3RydWN0IF9M
Q19vYmplY3RfaGFuZGxlIHsKICAgIHVuaW9uIHsKCV9MQ19vYmplY3RfdAkgICAgICBsY19vYmpl
Y3Q7CglfTENfbG9jYWxlX29iamhkbF90ICAgbGNfbG9jYWxlOwogICAgICAgIF9MQ19jaGFybWFw
X29iamhkbF90ICBsY19jaGFybWFwOwogICAgICAgIF9MQ19jb2xsYXRlX29iamhkbF90ICBsY19j
b2xsYXRlOwogICAgICAgIF9MQ19jdHlwZV9vYmpoZGxfdCAgICBsY19jdHlwZTsKICAgICAgICBf
TENfbW9uZXRhcnlfb2JqaGRsX3QgbGNfbW9uZXRhcnk7CiAgICAgICAgX0xDX251bWVyaWNfb2Jq
aGRsX3QgIGxjX251bWVyaWM7CiAgICAgICAgX0xDX3Jlc3Bfb2JqaGRsX3QgICAgIGxjX3Jlc3A7
CiAgICAgICAgX0xDX3RpbWVfb2JqaGRsX3QgICAgIGxjX3RpbWU7CiAgICB9IG9iajsKCgogICAg
dm9pZCAgICAqKCoqbWV0aCkoKTsKCgpzdHJ1Y3QgX0xDX2xvY2FsZV9vYmpoZGwgKmxvY19oZGw7
CSAKCQkJCQkgCgkJCQkJIAp9OwoKCnR5cGVkZWYgc3RydWN0IHsKICAgIF9MQ19vYmplY3RfdAlo
ZHI7CQkgICAKICAgIF9MQ19sb2NhbGVfb2JqaGRsX3QgaGFuZGxlOwkJICAgCn0gX0xDX2xvYWRf
b2JqZWN0X3Q7CgoKCgogCgoKZXh0ZXJuIF9MQ19jaGFybWFwX29iamhkbF90ICBfX2xjX2NoYXJt
YXA7CmV4dGVybiBfTENfY29sbGF0ZV9vYmpoZGxfdCAgX19sY19jb2xsYXRlOwpleHRlcm4gX0xD
X2N0eXBlX29iamhkbF90ICAgIF9fbGNfY3R5cGU7CmV4dGVybiBfTENfbW9uZXRhcnlfb2JqaGRs
X3QgX19sY19tb25ldGFyeTsKZXh0ZXJuIF9MQ19udW1lcmljX29iamhkbF90ICBfX2xjX251bWVy
aWM7CmV4dGVybiBfTENfcmVzcF9vYmpoZGxfdCAgICAgX19sY19yZXNwOwpleHRlcm4gX0xDX3Rp
bWVfb2JqaGRsX3QgICAgIF9fbGNfdGltZTsKZXh0ZXJuIF9MQ19sb2NhbGVfb2JqaGRsX3QgICBf
X2xjX2xvY2FsZTsKCgojIDEyMCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIgMyA0CgoKCgoKCgoJ
ZXh0ZXJuIGludAlpc193Y3R5cGUod2ludF90LCB3Y3R5cGVfdCk7CglleHRlcm4gd2N0eXBlX3QJ
Z2V0X3djdHlwZShjaGFyICopOwoKCiMgMTc3ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CgoK
CgoKCgoKCgoKIyA2ICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2dj
Yy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9n
KystMy9jY3R5cGUiIDIgMwoKCiMgMTA1ICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2djYy0y
Ljk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvLi4vLi4vLi4v
Li4vaW5jbHVkZS9nKystMy9zdGQvc3RyYWl0cy5oIiAyIDMKCiMgMSAiL2hvbWUvdHYvdG9vbHMv
Z251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAv
Mi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY3N0cmluZyIgMSAzCiAKIAoKCgoKIyAx
ICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJw
Yy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvaW5jbHVkZS9zdHJpbmcuaCIgMSAzIDQKIAogCiAKIAog
CiAKIAogCiAKIAogCiAKIAogCiAKIAoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKIyA4NiAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9n
Y2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yL2luY2x1
ZGUvc3RyaW5nLmgiIDMgNAoKICAgICAgICBleHRlcm4gdm9pZCAgICAgKm1lbWNocihjb25zdCB2
b2lkICosIGludCwgc2l6ZV90KTsKICAgICAgICBleHRlcm4gdm9pZCAgICAgKm1lbWNweSh2b2lk
ICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKICAgICAgICBleHRlcm4gdm9pZCAgICAgKm1lbXNl
dCh2b2lkICosIGludCwgc2l6ZV90KTsKICAgICAgICBleHRlcm4gc2l6ZV90ICAgc3RyY3Nwbihj
b25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiAgICAgICAgZXh0ZXJuIHNpemVfdCAgIHN0cmxl
bihjb25zdCBjaGFyICopOwogICAgICAgIGV4dGVybiBzaXplX3QgICBzdHJzcG4oY29uc3QgY2hh
ciAqLCBjb25zdCBjaGFyICopOwoKCiMgMTE4ICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2dj
Yy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvaW5jbHVk
ZS9zdHJpbmcuaCIgMyA0CgogICAgICAgIGV4dGVybiB2b2lkICAgICAqbWVtbW92ZSh2b2lkICos
IGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKICAgICAgICBleHRlcm4gY2hhciAgICAgKnN0cmNweShj
aGFyICosIGNvbnN0IGNoYXIgKik7CiAgICAgICAgZXh0ZXJuIGNoYXIgICAgICpzdHJuY3B5KGNo
YXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwogICAgICAgIGV4dGVybiBjaGFyICAgICAqc3Ry
Y2F0KGNoYXIgKiwgY29uc3QgY2hhciAqKTsKICAgICAgICBleHRlcm4gY2hhciAgICAgKnN0cm5j
YXQoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CiAgICAgICAgZXh0ZXJuIGludCAgICAg
IG1lbWNtcChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKixzaXplX3QpOwogICAgICAgIGV4dGVy
biBpbnQgICAgICBzdHJjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogICAgICAgIGV4
dGVybiBpbnQgICAgICBzdHJuY21wKGNvbnN0IGNoYXIgKixjb25zdCBjaGFyICosc2l6ZV90KTsK
ICAgICAgICBleHRlcm4gaW50ICAgICAgc3RybmNvbGxlbihjb25zdCBjaGFyICosIGNvbnN0IGlu
dCApOwogICAgICAgIGV4dGVybiBjaGFyICAgICAqc3RyY2hyKGNvbnN0IGNoYXIgKiwgaW50KTsK
ICAgICAgICBleHRlcm4gY2hhciAgICAgKnN0cnBicmsoY29uc3QgY2hhciAqLCBjb25zdCBjaGFy
ICopOwogICAgICAgIGV4dGVybiBjaGFyICAgICAqc3RycmNocihjb25zdCBjaGFyICosIGludCk7
CiAgICAgICAgZXh0ZXJuIGNoYXIgICAgICpzdHJzdHIoY29uc3QgY2hhciAqLCBjb25zdCBjaGFy
ICopOwogICAgICAgIGV4dGVybiBjaGFyICAgICAqc3RydG9rKGNoYXIgKiwgY29uc3QgY2hhciAq
KTsKICAgICAgICBleHRlcm4gY2hhciAgICAgKnN0cmVycm9yKGludCk7CiAgICAgICAgZXh0ZXJu
IGludCAgICAgIHN0cmNvbGwoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogICAgICAgIGV4
dGVybiBzaXplX3Qgc3RyeGZybShjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKCgoKCgoK
CgoKCgoKCgogICAgICAgIGV4dGVybiB2b2lkICAgICAqbWVtY2NweSh2b2lkICosIGNvbnN0IHZv
aWQgKiwgaW50LCBzaXplX3QpOwoKCgoKCgoKCmV4dGVybiBjaGFyICpzdHJkdXAoY29uc3QgY2hh
ciAqKTsKCgoKCgoKCiMgMTkzICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIv
bGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvaW5jbHVkZS9zdHJpbmcu
aCIgMyA0CgogICAgICAgIGV4dGVybiBjaGFyICAgICAqaW5kZXgoY29uc3QgY2hhciAqLCBpbnQp
OwogICAgICAgIGV4dGVybiBjaGFyICAgICAqcmluZGV4KGNvbnN0IGNoYXIgKiwgaW50KTsKICAg
ICAgICBleHRlcm4gdm9pZCAgICAgc3dhYihjb25zdCB2b2lkICosIHZvaWQgKiwgc3NpemVfdCk7
IAogICAgICAgIGV4dGVybiB3Y2hhcl90ICAqd2NzY2F0KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJf
dCAqKTsKICAgICAgICBleHRlcm4gd2NoYXJfdCAgKndjc2Nocihjb25zdCB3Y2hhcl90ICosIHdj
aGFyX3QpOwogICAgICAgIGV4dGVybiBpbnQgICAgICB3Y3NjbXAoY29uc3Qgd2NoYXJfdCAqLCBj
b25zdCB3Y2hhcl90ICopOwogICAgICAgIGV4dGVybiB3Y2hhcl90ICAqd2NzY3B5KHdjaGFyX3Qg
KiwgY29uc3Qgd2NoYXJfdCAqKTsKICAgICAgICBleHRlcm4gc2l6ZV90ICAgd2NzY3Nwbihjb25z
dCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CiAgICAgICAgZXh0ZXJuIHNpemVfdCAgIHdj
c2xlbihjb25zdCB3Y2hhcl90ICopOwogICAgICAgIGV4dGVybiB3Y2hhcl90ICAqd2NzbmNhdCh3
Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKICAgICAgICBleHRlcm4gaW50ICAg
ICAgd2NzbmNtcChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKICAg
ICAgICBleHRlcm4gd2NoYXJfdCAgKndjc25jcHkod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICos
IHNpemVfdCk7CiAgICAgICAgZXh0ZXJuIHdjaGFyX3QgICp3Y3NwYnJrKGNvbnN0IHdjaGFyX3Qg
KiwgY29uc3Qgd2NoYXJfdCAqKTsKICAgICAgICBleHRlcm4gd2NoYXJfdCAgKndjc3JjaHIoY29u
c3Qgd2NoYXJfdCAqLCB3Y2hhcl90KTsKICAgICAgICBleHRlcm4gc2l6ZV90ICAgd2Nzc3BuKGNv
bnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKICAgICAgICBleHRlcm4gd2NoYXJfdCAg
Kndjc3Rvayh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CiAgICAgICAgZXh0ZXJuIHdjaGFy
X3QgICp3Y3N3Y3MoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwogICAgICAgIGV4
dGVybiBpbnQgICAgICB3Y3N3aWR0aChjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CiAgICAgICAg
ZXh0ZXJuIGludCAgICAgIHdjd2lkdGgod2NoYXJfdCk7CiAgICAgICAgZXh0ZXJuIGludCAgICAg
IHdjc2NvbGwoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwogICAgICAgIGV4dGVy
biBzaXplX3Qgd2NzeGZybSh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKCgoK
CgoKCgoKCgoKCgoKIAoKCgogCiMgMjYwICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2djYy0y
Ljk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvaW5jbHVkZS9z
dHJpbmcuaCIgMyA0CgoKCiMgNyAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4y
L2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yLy4uLy4uLy4uLy4uL2lu
Y2x1ZGUvZysrLTMvY3N0cmluZyIgMiAzCgoKIyA5NCAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAw
MC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvY3N0cmluZyIgMwoKCgojIDEwNiAiL2hvbWUvdHYvdG9v
bHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4x
LjAvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL3N0cmFpdHMuaCIgMiAzCgoK
c3RydWN0IHN0cmluZ19jaGFyX3RyYWl0cyA8Y2hhcj4gewogIHR5cGVkZWYgY2hhciBjaGFyX3R5
cGU7CgogIHN0YXRpYyB2b2lkIGFzc2lnbiAoY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBl
JiBjMikKICAgIHsgYzEgPSBjMjsgfQogIHN0YXRpYyBib29sIGVxIChjb25zdCBjaGFyX3R5cGUg
JiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSA9PSBjMik7IH0KICBz
dGF0aWMgYm9vbCBuZSAoY29uc3QgY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikK
ICAgIHsgcmV0dXJuIChjMSAhPSBjMik7IH0KICBzdGF0aWMgYm9vbCBsdCAoY29uc3QgY2hhcl90
eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSA8IGMyKTsgfQog
IHN0YXRpYyBjaGFyX3R5cGUgZW9zICgpIHsgcmV0dXJuIDA7IH0KICBzdGF0aWMgYm9vbCBpc19k
ZWwoY2hhcl90eXBlIGEpIHsgcmV0dXJuIGlzc3BhY2UoYSk7IH0KCiAgc3RhdGljIGludCBjb21w
YXJlIChjb25zdCBjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbikK
ICAgIHsgcmV0dXJuIG1lbWNtcCAoczEsIHMyLCBuKTsgfQogIHN0YXRpYyBzaXplX3QgbGVuZ3Ro
IChjb25zdCBjaGFyX3R5cGUqIHMpCiAgICB7IHJldHVybiBzdHJsZW4gKHMpOyB9CiAgc3RhdGlj
IGNoYXJfdHlwZSogY29weSAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6
ZV90IG4pCiAgICB7IHJldHVybiAoY2hhcl90eXBlKikgbWVtY3B5IChzMSwgczIsIG4pOyB9CiAg
c3RhdGljIGNoYXJfdHlwZSogbW92ZSAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBz
Miwgc2l6ZV90IG4pCiAgICB7IHJldHVybiAoY2hhcl90eXBlKikgbWVtbW92ZSAoczEsIHMyLCBu
KTsgfQogIHN0YXRpYyBjaGFyX3R5cGUqIHNldCAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90
eXBlJiBjLCBzaXplX3QgbikKICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1zZXQgKHMxLCBj
LCBuKTsgfQp9OwoKIyAxNTkgIi9ob21lL3R2L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUuMi9s
aWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjIuMS4wLzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNs
dWRlL2crKy0zL3N0ZC9zdHJhaXRzLmgiIDMKCn0gIAoKIyAzNiAiL2hvbWUvdHYvdG9vbHMvZ251
L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45
NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDIgMwoKCiAKIyAx
ICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJw
Yy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9hbGxvYy5o
IiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKIyAxICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2dj
Yy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCiAKIAogCiAKIAog
CiAKIAogCiAKIAoKCiAKCiAKIAogCiAKIAogCiAKCgoKCgoKCgojIDE0OCAiL2hvbWUvdHYvdG9v
bHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4x
LjAvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2NvbmZpZy5oIiAzCgoKCgoK
CgoKCgoKCgoKCgoKCgoKIyAxNzggIi9ob21lL3R2L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUu
Mi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjIuMS4wLzIuOTUuMi8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCiMgMjM0ICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1s
aWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst
My9zdGxfY29uZmlnLmgiIDMKCgojIDI0OCAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2Mt
Mi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yLy4uLy4uLy4u
Ly4uL2luY2x1ZGUvZysrLTMvc3RsX2NvbmZpZy5oIiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIAogCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgogCiAKIyAzMTYgIi9ob21lL3R2
L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0
LjIuMS4wLzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMwoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAogCiMgMTggIi9ob21lL3R2
L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0
LjIuMS4wLzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2FsbG9jLmgiIDIgMwoKCgoj
IDEgIi9ob21lL3R2L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dl
cnBjLWlibS1haXg0LjIuMS4wLzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9h
bGxvYy5oIiAxIDMKIAoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKIAogCiAK
IAoKCgoKCgoKCgoKCgoKIyAxICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIv
bGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzIDQKIyAzNDIgIi9ob21lL3R2L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIv
Z2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjIuMS4wLzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAz
IDQKCiMgNTMgIi9ob21lL3R2L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxp
Yi9wb3dlcnBjLWlibS1haXg0LjIuMS4wLzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L3N0bF9hbGxvYy5oIiAyIDMKCiMgMSAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45
NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yL2luY2x1ZGUvc3Rk
bGliLmgiIDEgMyA0CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgogCgoKCgoKCgoKCgoK
CgoKIAoKCgoKCgoKCgoKCiAKCgoKCgogCgoKIAoKCgoKCgoKCiMgNzEgIi9ob21lL3R2L3Rvb2xz
L2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjIuMS4w
LzIuOTUuMi9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKCgojIDgxICIvaG9tZS90di90b29scy9nbnUv
cnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1
LjIvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CgoKdHlwZWRlZiBzdHJ1Y3QgZGl2X3QgIHsJICAgICAg
ICAgCglpbnQgcXVvdDsgICAgICAgICAgICAgICAgCglpbnQgcmVtOyAgICAgICAgICAgICAgICAg
Cn0gZGl2X3Q7Cgp0eXBlZGVmIHN0cnVjdCBsZGl2X3QgIHsJIAoJbG9uZyBpbnQgcXVvdDsgICAg
ICAgICAgIAoJbG9uZyBpbnQgcmVtOyAgICAgICAgICAgIAp9IGxkaXZfdDsKCgoKCgoKZXh0ZXJu
IGludCBfX2dldG1iY3VybWF4ICh2b2lkKTsKZXh0ZXJuIGludCBfX2dldG1heGRpc3B3aWR0aCAo
dm9pZCk7CgoKCgogCgoKCgoKCgoKCglleHRlcm4gaW50CSAJbWJsZW4oY29uc3QgY2hhciAqLCBz
aXplX3QpOwoJZXh0ZXJuIHNpemVfdCAJbWJzdG93Y3Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICos
IHNpemVfdCk7CglleHRlcm4gaW50CQltYnRvd2Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNp
emVfdCk7CglleHRlcm4gc2l6ZV90CXdjc3RvbWJzKGNoYXIgKiwgY29uc3Qgd2NoYXJfdCAqLCBz
aXplX3QpOwoJZXh0ZXJuIGludAkJd2N0b21iKGNoYXIgKiwgY29uc3Qgd2NoYXJfdCk7CgoKIAoK
CiMgMTY1ICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIv
cG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CgogCgoK
CglleHRlcm4gZG91YmxlIAlhdG9mKGNvbnN0IGNoYXIgKik7CglleHRlcm4gaW50IAlhdG9pKGNv
bnN0IGNoYXIgKik7CglleHRlcm4gbG9uZyBpbnQgYXRvbChjb25zdCBjaGFyICopOwoJZXh0ZXJu
IGRvdWJsZSAJc3RydG9kKGNvbnN0IGNoYXIgKiwgY2hhciAqICopOwoJZXh0ZXJuIGxvbmcgaW50
IHN0cnRvbChjb25zdCBjaGFyICosIGNoYXIgKiAqLCBpbnQpOwoJZXh0ZXJuIHVuc2lnbmVkIGxv
bmcgaW50IHN0cnRvdWwoY29uc3QgY2hhciAqLCBjaGFyICogKiwgaW50KTsKCWV4dGVybiBpbnQg
CXJhbmQodm9pZCk7CglleHRlcm4gdm9pZAlzcmFuZCh1bnNpZ25lZCBpbnQpOwoJZXh0ZXJuIHZv
aWQgCSpjYWxsb2Moc2l6ZV90LCBzaXplX3QpOwoJZXh0ZXJuIHZvaWQJZnJlZSh2b2lkICopOwoJ
ZXh0ZXJuIHZvaWQJKm1hbGxvYyhzaXplX3QpOwoJZXh0ZXJuIHZvaWQgCSpyZWFsbG9jKHZvaWQg
Kiwgc2l6ZV90KTsKCWV4dGVybiB2b2lkCWFib3J0KHZvaWQpOwoJZXh0ZXJuIGludAlhdGV4aXQo
dm9pZCAoKikodm9pZCkpOwoJZXh0ZXJuIHZvaWQJZXhpdChpbnQpOwoJZXh0ZXJuIGNoYXIJKmdl
dGVudihjb25zdCBjaGFyICopOwoJZXh0ZXJuIGludCAJc3lzdGVtKGNvbnN0IGNoYXIgKik7Cgll
eHRlcm4gdm9pZCAJKmJzZWFyY2goY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCwg
c2l6ZV90LCBpbnQoKikoY29uc3Qgdm9pZCAqLGNvbnN0IHZvaWQgKikpOwoJZXh0ZXJuIHZvaWQg
CXFzb3J0KHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIGludCgqKShjb25zdCB2b2lkICosY29uc3Qg
dm9pZCAqKSk7CgogCgoKCgoKCgoJCglleHRlcm4gaW50IAlhYnMoaW50KTsKCWV4dGVybiBzdHJ1
Y3QgZGl2X3QJZGl2KGludCwgaW50KTsKCWV4dGVybiBsb25nIGludAlsYWJzKGxvbmcgaW50KTsK
CWV4dGVybiBzdHJ1Y3QgbGRpdl90IAlsZGl2KGxvbmcgaW50LCBsb25nIGludCk7CgoKCgoKCgoK
CgoKCgoKIAoKCgoKCiMgMSAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xp
Yi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yL2luY2x1ZGUvc3lzL3dhaXQu
aCIgMSAzIDQKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCiAKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDEgMyA0CiAKIAog
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAxIDMgNAogCiAKIAogCiAKIAogCiAK
IAogCiAKIAogCiAKIAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK
CiAKCgoKCgoKIAoKCgoKCiAKCgoKCnN0cnVjdCB0aW1ldmFsIHsKCXRpbWVfdAkJdHZfc2VjOwkJ
IAoJbG9uZwkJdHZfdXNlYzsJIAp9OwoKIAoKCnN0cnVjdAlpdGltZXJ2YWwgewoJc3RydWN0CQl0
aW1ldmFsIGl0X2ludGVydmFsOyAgCglzdHJ1Y3QJCXRpbWV2YWwgaXRfdmFsdWU7ICAKfTsKCgoK
CgoKCmV4dGVybiBpbnQgZ2V0aXRpbWVyKGludCwgc3RydWN0IGl0aW1lcnZhbCAqKTsKZXh0ZXJu
IGludCBzZXRpdGltZXIoaW50LCBjb25zdCBzdHJ1Y3QgaXRpbWVydmFsICosIHN0cnVjdCBpdGlt
ZXJ2YWwgKik7CmV4dGVybiBpbnQgZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICosIHZvaWQg
Kik7CmV4dGVybiBpbnQgdXRpbWVzKGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHRpbWV2YWwg
Kik7CgoKIAoKCgoKCgoKCgogCgogCgoKdHlwZWRlZiBzdHJ1Y3QgCgpmZF9zZXQKCnsKICAgICAg
ICBsb25nIGZkc19iaXRzWygyMDAwIC8gKHNpemVvZihsb25nKSAqIDgpICsxKSBdOyAgIAp9IGZk
X3NldDsKCgoKCgogCgoKZXh0ZXJuIGludCBzZWxlY3QoaW50LCBmZF9zZXQgKiwgZmRfc2V0ICos
IGZkX3NldCAqLCBzdHJ1Y3QgdGltZXZhbCAqKTsKCgoKCgojIDE1MyAiL3Vzci9pbmNsdWRlL3N5
cy90aW1lLmgiIDMgNAoKCgoKCgogCgoKCgoKIAoKCgkKIAoKCgoKCgoKCgoKIAoKCgoKCgoKCgoK
CgoKCgoKCgoKCgogCgoKCgoKIAoKCgoKCgoJCQkJCSAKCgkJCQkJIAoJCQkJCSAKCgoKCgoKCiAK
CgpzdHJ1Y3QgdGltZXN0cnVjX3QgewogICAgICAgIHVuc2lnbmVkIGxvbmcJdHZfc2VjOyAgICAg
ICAgICAKICAgICAgICAJIGxvbmcJdHZfbnNlYzsgICAgICAgICAKfTsKCiAKCgpzdHJ1Y3QgaXRp
bWVyc3RydWNfdCB7CiAgICAgICAgc3RydWN0ICB0aW1lc3RydWNfdCBpdF9pbnRlcnZhbDsgIAog
ICAgICAgIHN0cnVjdCAgdGltZXN0cnVjX3QgaXRfdmFsdWU7ICAgICAKfTsKCnR5cGVkZWYgc3Ry
dWN0IHRpbWViYXNlc3RydWN0IHsKCWludAkJZmxhZzsgICAgIAoJdW5zaWduZWQgbG9uZwl0Yl9o
aWdoOyAgCgl1bnNpZ25lZCBsb25nCXRiX2xvdzsJICAKCX0gdGltZWJhc2VzdHJ1Y3RfdDsJCgpp
bnQgcmVhZF9yZWFsX3RpbWUodGltZWJhc2VzdHJ1Y3RfdCAqLCBzaXplX3QpOwppbnQgdGltZV9i
YXNlX3RvX3RpbWUodGltZWJhc2VzdHJ1Y3RfdCAqLCBzaXplX3QpOwoKCiMgMjYxICIvdXNyL2lu
Y2x1ZGUvc3lzL3RpbWUuaCIgMyA0CgoKIAoKCgoKCgoKCgoKCiMgMjg0ICIvdXNyL2luY2x1ZGUv
c3lzL3RpbWUuaCIgMyA0CgojIDMxMCAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNAoKIAoK
CgoKCgoKCgoKCiAKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoK
CgoKIAoKCgpzdHJ1Y3QgdGltZXpvbmUgewoJaW50CQl0el9taW51dGVzd2VzdDsJIAoJaW50CQl0
el9kc3R0aW1lOwkgCn07CgoKCgoKCgoKCgoKCgoKCiMgNTIgIi91c3IvaW5jbHVkZS9zeXMvcmVz
b3VyY2UuaCIgMiAzIDQKCgoKCgoKCgogCgoKCgoKIAoKCgp0eXBlZGVmIHVsb25nX3QgcmxpbV90
OwoKCgoKCgoKCnN0cnVjdCBybGltaXQgewoJcmxpbV90CXJsaW1fY3VyOwkJIAoJcmxpbV90CXJs
aW1fbWF4OwkJIAp9OwoKc3RydWN0CXJ1c2FnZSB7CglzdHJ1Y3QgdGltZXZhbCBydV91dGltZTsJ
IAoJc3RydWN0IHRpbWV2YWwgcnVfc3RpbWU7CSAKCWxvbmcJcnVfbWF4cnNzOwoKCWxvbmcJcnVf
aXhyc3M7CQkgCglsb25nCXJ1X2lkcnNzOwkJIAoJbG9uZwlydV9pc3JzczsJCSAKCWxvbmcJcnVf
bWluZmx0OwkJIAoJbG9uZwlydV9tYWpmbHQ7CQkgCglsb25nCXJ1X25zd2FwOwkJIAoJbG9uZwly
dV9pbmJsb2NrOwkJIAoJbG9uZwlydV9vdWJsb2NrOwkJIAoJbG9uZwlydV9tc2dzbmQ7CQkgCgls
b25nCXJ1X21zZ3JjdjsJCSAKCWxvbmcJcnVfbnNpZ25hbHM7CQkgCglsb25nCXJ1X252Y3N3OwkJ
IAoJbG9uZwlydV9uaXZjc3c7CQkgCgp9OwoKIAoKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gaW50
IGdldHByaW9yaXR5KGludCwgaWRfdCk7CmV4dGVybiBpbnQgc2V0cHJpb3JpdHkoaW50LCBpZF90
LCBpbnQpOwpleHRlcm4gaW50IGdldHJsaW1pdChpbnQsIHN0cnVjdCBybGltaXQgKik7CmV4dGVy
biBpbnQgZ2V0cnVzYWdlKGludCwgc3RydWN0IHJ1c2FnZSAqKTsKZXh0ZXJuIGludCBzZXRybGlt
aXQoaW50LCBjb25zdCBzdHJ1Y3QgcmxpbWl0ICopOwoKCgoKCiMgNDUgIi9ob21lL3R2L3Rvb2xz
L2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjIuMS4w
LzIuOTUuMi9pbmNsdWRlL3N5cy93YWl0LmgiIDIgMyA0CgoKCgojIDEgIi9ob21lL3R2L3Rvb2xz
L2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjIuMS4w
LzIuOTUuMi9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMSAzIDQKIAogCiAKIAogCiAKIAogCiAKIAog
CiAKIAogCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgogCgoKCgoK
CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gdm9pZCAoKnNpZ25hbChp
bnQsIHZvaWQgKCopKGludCkpKShpbnQpOwoKCgoKCgoKZXh0ZXJuIGludCByYWlzZShpbnQpOwoK
CnR5cGVkZWYgaW50IHNpZ19hdG9taWNfdDsgIAogCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgoKIAoKCgogCgoKCgoKCgoKCgoKCgoK
CgoKCiAKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKIAoKCnR5cGVkZWYgc3RydWN0IHsKCWludCBz
aV9zaWdubzsJCSAKCWludCBzaV9lcnJubzsJCSAKCWludCBzaV9jb2RlOwkJIAoJcGlkX3Qgc2lf
cGlkOwkJIAoJdWlkX3Qgc2lfdWlkOwkJIAoJdm9pZCAqc2lfYWRkcjsJCSAKCWludCBzaV9zdGF0
dXM7CQkgCglsb25nIHNpX2JhbmQ7CQkgCglpbnQgX19wYWRbOF07CQkgCn0gc2lnaW5mb190OwoK
CiAKCgpzdHJ1Y3Qgc2lnYWN0aW9uIHsKICAgdW5pb24gewoKCgoKCgoJdm9pZAkoKl9fc3VfaGFu
ZGxlcikoaW50KTsJIAoKCgoJdm9pZCAgICAoKl9fc3Vfc2lnYWN0aW9uKSAoaW50LCBzaWdpbmZv
X3QgKiwgdm9pZCAqKTsKCgoKICAgIH0gc2FfdW5pb247CglzaWdzZXRfdCBzYV9tYXNrOwkJIAoJ
aW50CXNhX2ZsYWdzOwkJIAp9OwoKCgoKCgogCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lz
L2NvbnRleHQuaCIgMSAzIDQKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL21fcGFyYW0uaCIgMSAzIDQKIAog
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoK
CgoKIAoKCgoKCgoKCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAzOSAiL3Vzci9pbmNs
dWRlL3N5cy9jb250ZXh0LmgiIDIgMyA0CgojIDEgIi91c3IvaW5jbHVkZS9zeXMvbXN0c2F2ZS5o
IiAxIDMgNAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgoKCgoKCgoKCgoKCgogCgoK
CgoKCgoKCgoKIAoKCgoKCgoKCgoKCgogCgoKCgoKc3RydWN0Cgptc3RzYXZlCgoKCnsKCglzdHJ1
Y3QgbXN0c2F2ZSAqcHJldjsJCSAKCWxhYmVsX3QJCSpram1wYnVmOwkgCgljaGFyCQkqc3RhY2tm
aXg7CSAKCWNoYXIJCWludHByaTsgCSAKCWNoYXIJCWJhY2t0OwkJIAoJY2hhcgkJcnN2ZFsyXTsJ
IAoJcGlkX3QJCWN1cmlkOwkJIAoKCWludAkJZXhjcF90eXBlOwkgCgl1bG9uZ190CQlpYXI7CQkg
Cgl1bG9uZ190CQltc3I7CQkgCgl1bG9uZ190CQljcjsJCSAKCXVsb25nX3QJCWxyOwkJIAoJdWxv
bmdfdAkJY3RyOwkJIAoJdWxvbmdfdAkJeGVyOwkJIAoJdWxvbmdfdAkJbXE7CQkgCiAJdWxvbmdf
dAkJdGlkOwkJIAoJdWxvbmdfdAkJZnBzY3I7CQkgCgljaGFyCQlmcGV1OwkJIAoJY2hhciAgICAg
ICAgICAgIGZwaW5mbzsgICAgICAgICAgCgljaGFyICAgICAgICAgICAgcGFkWzJdOyAgICAgICAg
ICAKCQkJCQkgCgl1bG9uZ190ICAgICAgICAgZXhjZXB0WzVdOwkgCgljaGFyICAgICAgICAgICAg
cGFkMVs0XTsgICAgICAgICAKCXVsb25nX3QgICAgICAgICBvX2lhcjsgICAgICAgICAgIAogICAg
ICAgIHVsb25nX3QgICAgICAgICBvX3RvYzsgICAgICAgICAgIAoJdWxvbmdfdCAgICAgICAgIG9f
YXJnMTsgICAgICAgICAgCgl1bG9uZ190CQlleGNicmFuY2g7CSAKCgoKCXVsb25nX3QgICAgICAg
ICBmcHNjcng7ICAgICAgICAgIAoJdWxvbmdfdCAgICAgICAgIG9fdmFkZHI7ICAgICAgICAgCgl1
bG9uZ190CQljYWNoZWFsaWduWzddOwkgCglhZHNwYWNlX3QJYXM7CQkgCgl1bG9uZ190CQlncHJb
MzIgXTsJIAoJZG91YmxlCQlmcHJbMzIgXTsJIAojIDE0NCAiL3Vzci9pbmNsdWRlL3N5cy9tc3Rz
YXZlLmgiIDMgNAoKfTsKCgogCgoKCgoKCiAKCgoKCgoKIAoKCgogCgoKCgoKIAoKCgoKCiAKCgoK
CgoKCgoKZXh0ZXJuIGNoYXIgX19wbWFwX3N0YWNrW107CgoKCgoKCgoKCgoKCgoKCgoKCgojIDI5
NCAiL3Vzci9pbmNsdWRlL3N5cy9tc3RzYXZlLmgiIDMgNAoKCQoKCgojIDQwICIvdXNyL2luY2x1
ZGUvc3lzL2NvbnRleHQuaCIgMiAzIDQKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKIyAxMTgg
Ii91c3IvaW5jbHVkZS9zeXMvY29udGV4dC5oIiAzIDQKCiAKIAoKCgogCgoKCgoKCnN0cnVjdAlf
X2ptcGJ1ZiB7CgoJc3RydWN0CW1zdHNhdmUgam1wX2NvbnRleHQ7CgoKCn07IAoKIyAxNDcgIi91
c3IvaW5jbHVkZS9zeXMvY29udGV4dC5oIiAzIDQKCgogCgoKCgpzdHJ1Y3QJX19zaWdjb250ZXh0
IHsKCglpbnQJCXNjX29uc3RhY2s7CSAKCXNpZ3NldF90CXNjX21hc2s7CSAKCWludAkJc2NfdWVy
cm9yOwkgCglzdHJ1Y3QgX19qbXBidWYgc2Nfam1wYnVmOwkgCgoKCgoKCn07CgoKCgoKCiAKCgp0
eXBlZGVmIHN0cnVjdCB7Cgl2b2lkICAqc3Nfc3A7CQkgCglzaXplX3Qgc3Nfc2l6ZTsJCSAKCWlu
dCAgICBzc19mbGFnczsJIAoJaW50ICAgIF9fcGFkWzRdOwkgCn0gc3RhY2tfdDsKCiAKCgoKCgp0
eXBlZGVmIHN0cnVjdCBfX2ptcGJ1ZiAgIG1jb250ZXh0X3Q7CnR5cGVkZWYgc3RydWN0IF9fdWNv
bnRleHQgdWNvbnRleHRfdDsKCnN0cnVjdCBfX3Vjb250ZXh0IHsKCWludAkgICAgX19zY19vbnN0
YWNrOyAgCiAgICAgICAgc2lnc2V0X3QgICAgdWNfc2lnbWFzazsgICAKCiAgICAgICAgaW50CSAg
ICBfX3NjX3VlcnJvcjsgIAoJbWNvbnRleHRfdCAgdWNfbWNvbnRleHQ7ICAKCXVjb250ZXh0X3Qg
KnVjX2xpbms7ICAgICAgCglzdGFja190ICAgICB1Y19zdGFjazsgICAgIAoJaW50CSAgICBfX3Bh
ZFs0XTsJICAKfTsKCgojIDI2OCAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4y
L2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yL2luY2x1ZGUvc3lzL3Np
Z25hbC5oIiAyIDMgNAoKCiAKCgpzdHJ1Y3QJc2lnc3RhY2sgewoJdm9pZAkqc3Nfc3A7CQkJIAoJ
aW50CXNzX29uc3RhY2s7CQkgCn07CgoKCgoKCgoKCgoKCgoKCgogCgoKCgogCgoKCiAKCgoKCgoK
IAoKCgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCgoKIAoKCiAKCgoKCgoKZXh0ZXJuIGludCBzaWdt
YXNrKGludCk7CgogCgoKCgoKCgojIDQyNCAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2Mt
Mi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yL2luY2x1ZGUv
c3lzL3NpZ25hbC5oIiAzIDQKCgoKCgoKCgoKCgoKCiAKCgpzdHJ1Y3Qgc2lnZXZlbnQgewoJdm9p
ZAkgICAgICAgKnNldnRfdmFsdWU7CglzaWduYWxfdAlzZXZ0X3NpZ25vOwp9OwoKIAoKCgoKIAoK
CgogIAoKCgoKIAoKCgoKCgoKCiAKCgogICAgICAgCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgpzdHJ1Y3QJc2lndmVjIHsKICAgdW5pb24g
ewoKCgkKCgoKCXZvaWQgICAgKCpzdl9oYW5kbGVyKShpbnQpOwkgCgoKICAgICAgICAgCiAgICAg
ICAgdm9pZCAgICAoKnN2X3NpZ2FjdGlvbikgKGludCwgc2lnaW5mb190ICosIHZvaWQgKik7CiAg
IH0gc3ZfdW5pb247CglpbnQgICAgIHN2X21hc2s7ICAgICAgICAgCglpbnQgICAgIHN2X2ZsYWdz
Owp9OyAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgojIDU4NiAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGli
L3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yL2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAzIDQK
CgogCgoKCgoKCgoKCgoKCmV4dGVybiBpbnQgc2lnd2FpdChjb25zdCBzaWdzZXRfdCAqLCBpbnQg
Kik7CgpleHRlcm4gaW50IHNpZ2Jsb2NrKGludCk7CmV4dGVybiBpbnQgc2lnbG9jYWxtYXNrKGlu
dCwgY29uc3Qgc2lnc2V0X3QgKik7CmV4dGVybiBpbnQgc2lndmVjKGludCwgc3RydWN0IHNpZ3Zl
YyAqLCBzdHJ1Y3Qgc2lndmVjICopOwoKCgoKCgpleHRlcm4gaW50IHNpZ3NldG1hc2soaW50KTsK
CgoKCgoKCiMgNjQ5ICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2dj
Yy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvaW5jbHVkZS9zeXMvc2lnbmFsLmgi
IDMgNAoKCmV4dGVybiBpbnQga2lsbChwaWRfdCwgaW50KTsKZXh0ZXJuIGludCBzaWdwcm9jbWFz
ayhpbnQsIGNvbnN0IHNpZ3NldF90ICosIHNpZ3NldF90ICopOwpleHRlcm4gaW50IHNpZ3N1c3Bl
bmQoY29uc3Qgc2lnc2V0X3QgKik7CgpleHRlcm4gaW50IHNpZ2FjdGlvbihpbnQsIGNvbnN0IHN0
cnVjdCBzaWdhY3Rpb24gKiwgc3RydWN0IHNpZ2FjdGlvbiAqKTsKCmV4dGVybiBpbnQgc2lnZW1w
dHlzZXQoc2lnc2V0X3QgKik7CmV4dGVybiBpbnQgc2lnZmlsbHNldChzaWdzZXRfdCAqKTsKZXh0
ZXJuIGludCBzaWdhZGRzZXQoc2lnc2V0X3QgKiwgaW50KTsKZXh0ZXJuIGludCBzaWdkZWxzZXQo
c2lnc2V0X3QgKiwgaW50KTsKZXh0ZXJuIGludCBzaWdpc21lbWJlcihjb25zdCBzaWdzZXRfdCAq
LCBpbnQpOwpleHRlcm4gaW50IHNpZ3BlbmRpbmcoc2lnc2V0X3QgKik7CgoKZXh0ZXJuIHZvaWQg
KCpic2Rfc2lnbmFsIChpbnQsIHZvaWQgKCopKGludCkpKShpbnQpOyAKZXh0ZXJuIGludCBraWxs
cGcocGlkX3QsIGludCk7CmV4dGVybiBpbnQgc2lnaG9sZChpbnQpOwpleHRlcm4gaW50IHNpZ2ln
bm9yZShpbnQpOwpleHRlcm4gaW50IHNpZ2ludGVycnVwdChpbnQsIGludCk7CmV4dGVybiBpbnQg
c2lncGF1c2UoaW50KTsKZXh0ZXJuIGludCBzaWdyZWxzZShpbnQpOwpleHRlcm4gdm9pZCAoKnNp
Z3NldChpbnQsIHZvaWQoKikoaW50KSkpKGludCk7CgpleHRlcm4gaW50IHNpZ2FsdHN0YWNrKGNv
bnN0IHN0YWNrX3QgKiwgc3RhY2tfdCAqKTsKZXh0ZXJuIGludCBzaWdzdGFjayhzdHJ1Y3Qgc2ln
c3RhY2sgKiwgc3RydWN0IHNpZ3N0YWNrICopOwoKCgoKCgoKCiMgNDkgIi9ob21lL3R2L3Rvb2xz
L2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjIuMS4w
LzIuOTUuMi9pbmNsdWRlL3N5cy93YWl0LmgiIDIgMyA0CgoKCgogCgoKCgoKCgogCgoKCgoKCgoK
IAoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK
CgogCgoKdHlwZWRlZiBlbnVtIHtQX0FMTCwgUF9QSUQsIFBfUEdJRH0gaWR0eXBlX3Q7CgoKCgoK
CgoKCgoKCgoKCgpleHRlcm4gcGlkX3Qgd2FpdChpbnQgKik7CgpleHRlcm4gcGlkX3Qgd2FpdHBp
ZChwaWRfdCwgaW50ICosIGludCk7CgoKCgoKCgoKCgpleHRlcm4gaW50IHdhaXRpZChpZHR5cGVf
dCwgaWRfdCwgc2lnaW5mb190ICosIGludCk7CgoKCmV4dGVybiBwaWRfdCB3YWl0MyhpbnQgKiwg
aW50LCBzdHJ1Y3QgcnVzYWdlICopOwoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIyAyMjMgIi9ob21l
L3R2L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1h
aXg0LjIuMS4wLzIuOTUuMi9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMgNAoKCgojIDIzOCAiL2hvbWUv
dHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFp
eDQuMi4xLjAvMi45NS4yL2luY2x1ZGUvc3RkbGliLmgiIDMgNAoKCiMgMjg3ICIvaG9tZS90di90
b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4y
LjEuMC8yLjk1LjIvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CgoJZXh0ZXJuIGRvdWJsZSAJCWRyYW5k
NDgodm9pZCk7CglleHRlcm4gZG91YmxlIAkJZXJhbmQ0OCh1bnNpZ25lZCBzaG9ydFtdKTsKCWV4
dGVybiBsb25nIAkJanJhbmQ0OCh1bnNpZ25lZCBzaG9ydFtdKTsKCWV4dGVybiB2b2lkIAkJbGNv
bmc0OCh1bnNpZ25lZCBzaG9ydCBpbnQgKik7CglleHRlcm4gbG9uZyAJCWxyYW5kNDgodm9pZCk7
CglleHRlcm4gbG9uZyAJCW1yYW5kNDgodm9pZCk7CglleHRlcm4gbG9uZyAJCW5yYW5kNDgodW5z
aWduZWQgc2hvcnRbXSk7CglleHRlcm4gdW5zaWduZWQgc2hvcnQgCSpzZWVkNDgodW5zaWduZWQg
c2hvcnRbXSk7CglleHRlcm4gdm9pZCAJCXNldGtleShjb25zdCBjaGFyICopOwoJZXh0ZXJuIHZv
aWQgCQlzcmFuZDQ4KGxvbmcpOwoJZXh0ZXJuIGludCAJCXB1dGVudihjb25zdCBjaGFyICopOwoj
IDMzMSAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bv
d2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yL2luY2x1ZGUvc3RkbGliLmgiIDMgNAoKCglleHRl
cm4gbG9uZyBhNjRsKGNvbnN0IGNoYXIgKik7CglleHRlcm4gY2hhciAqZWN2dChkb3VibGUsIGlu
dCwgaW50ICosIGludCAqKTsKCWV4dGVybiBjaGFyICpmY3Z0KGRvdWJsZSwgaW50LCBpbnQgKiwg
aW50ICopOwoJZXh0ZXJuIGNoYXIgKmdjdnQoZG91YmxlLCBpbnQsIGNoYXIgKik7CglleHRlcm4g
aW50ICBnZXRzdWJvcHQoY2hhciAqKiwgY2hhciAqY29uc3QgKiwgY2hhciAqKik7CglleHRlcm4g
aW50ICBncmFudHB0KGludCk7CglleHRlcm4gY2hhciAqaW5pdHN0YXRlKHVuc2lnbmVkLCBjaGFy
ICosIHNpemVfdCk7CglleHRlcm4gY2hhciAqbDY0YShsb25nKTsKCWV4dGVybiBjaGFyICpta3Rl
bXAoY2hhciAqKTsKCWV4dGVybiBpbnQgIG1rc3RlbXAoY2hhciAqKTsKCWV4dGVybiBjaGFyICpw
dHNuYW1lKGludCk7CglleHRlcm4gbG9uZyByYW5kb20odm9pZCk7CglleHRlcm4gY2hhciAqcmVh
bHBhdGgoY29uc3QgY2hhciAqLCBjaGFyICopOwoJZXh0ZXJuIGNoYXIgKnNldHN0YXRlKGNoYXIg
Kik7CglleHRlcm4gdm9pZCBzcmFuZG9tKHVuc2lnbmVkKTsKCWV4dGVybiBpbnQgIHR0eXNsb3Qo
dm9pZCk7CglleHRlcm4gaW50ICB1bmxvY2twdChpbnQpOwoJZXh0ZXJuIHZvaWQgKnZhbGxvYyhz
aXplX3QpOwoKCgoKCgogCgoKCiAKIAoKCgoKCgoKCgoKCgoKCiAKCgoKIyA0MDggIi9ob21lL3R2
L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0
LjIuMS4wLzIuOTUuMi9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKCgogCgoKCgoKCgoKCgoKCgoKCiAK
CgoKCgoKCgoKZXh0ZXJuIGNoYXIgKm9wdGFyZzsKZXh0ZXJuIGludCBvcHRpbmQ7CmV4dGVybiBp
bnQgb3B0ZXJyOwoKIAoKCgoKCgoKCgoKCglleHRlcm4gZmxvYXQgICAgYXRvZmYoY2hhciAqKTsK
CWV4dGVybiBmbG9hdCAgICBzdHJ0b2YoY2hhciAqLCBjaGFyICoqKTsKCWV4dGVybiB2b2lkICAg
ICBpbXVsX2RibChsb25nLCBsb25nLCBsb25nICopOwoJZXh0ZXJuIHZvaWQgICAgIHVtdWxfZGJs
KHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcgKik7CgoKCgoKCgoj
IDQ3NSAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bv
d2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yL2luY2x1ZGUvc3RkbGliLmgiIDMgNAoKCWV4dGVy
biBkb3VibGUJIHdjc3RvZChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiopOwoJZXh0ZXJuIGxv
bmcgaW50CSB3Y3N0b2woY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqLCBpbnQpOwoJZXh0ZXJu
IHVuc2lnbmVkIGxvbmcgaW50IHdjc3RvdWwoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqLCBp
bnQpOwoKCWV4dGVybiBpbnQJCXJwbWF0Y2goY29uc3QgY2hhciAqKTsKCWV4dGVybiBpbnQJCWNs
ZWFyZW52KHZvaWQpOwoJZXh0ZXJuIGludAkJZ2V0b3B0KGludCwgY2hhciogY29uc3QqLCBjb25z
dCBjaGFyKik7CglleHRlcm4gY2hhcgkJKmdldHBhc3MoY29uc3QgY2hhciAqKTsKCgoKCiAKCgoK
CgoKCgoKIAoKCgogCnR5cGVkZWYgc3RydWN0IGxsZGl2X3QgewogICAgIGxvbmcgbG9uZyBpbnQg
cXVvdDsgIAogICAgIGxvbmcgbG9uZyBpbnQgcmVtIDsgIAp9IGxsZGl2X3Q7CiAKCgoKCgoKCgog
CmV4dGVybiBsb25nIGxvbmcgaW50IGxsYWJzKCBsb25nIGxvbmcgaW50ICk7CmV4dGVybiBsbGRp
dl90IGxsZGl2KCBsb25nIGxvbmcgaW50LCBsb25nIGxvbmcgaW50ICk7ICAKZXh0ZXJuIGxvbmcg
bG9uZyBpbnQgc3RydG9sbCgKICAgICBjb25zdCBjaGFyICosCSAKICAgICBjaGFyICoqLAkJIAog
ICAgIGludCApOwkJIApleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCgKICAg
ICBjb25zdCBjaGFyICosCSAKICAgICBjaGFyICoqLAkJIAogICAgIGludCApOwkJIAogCgogCgoK
CiAKCgoKIyA1NCAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2Mt
bGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvc3RsX2FsbG9jLmgiIDIgMwoKCiMgMSAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2Mt
Mi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yLy4uLy4uLy4u
Ly4uL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvaW5jbHVkZS9hc3NlcnQuaCIgMSAzIDQKIAoKCgoK
CgoKCiMgMTkgIi9ob21lL3R2L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxp
Yi9wb3dlcnBjLWlibS1haXg0LjIuMS4wLzIuOTUuMi8uLi8uLi8uLi8uLi9wb3dlcnBjLWlibS1h
aXg0LjIuMS4wL2luY2x1ZGUvYXNzZXJ0LmgiIDMgNAoKCgoKIAoKZXh0ZXJuICJDIiB7CmV4dGVy
biB2b2lkIF9fZXByaW50ZiAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHVuc2lnbmVkLCBj
b25zdCBjaGFyICopCiAgICBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKfQoKCgoKCgoKCgoK
CgojIDUyICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIv
cG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvLi4vLi4vLi4vLi4vcG93ZXJwYy1pYm0tYWl4
NC4yLjEuMC9pbmNsdWRlL2Fzc2VydC5oIiAzIDQKCgoKIyA1NiAiL2hvbWUvdHYvdG9vbHMvZ251
L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45
NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDIgMwoKCgoKCgoKCgoK
CiMgNzggIi9ob21lL3R2L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9w
b3dlcnBjLWlibS1haXg0LjIuMS4wLzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0
bF9hbGxvYy5oIiAzCgojIDg3ICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIv
bGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5j
bHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwoKIyA5NyAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAw
MC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMKCiMgMTE1ICIvaG9tZS90di90
b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4y
LjEuMC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwoKCiAK
CgoKCgoKIAoKCgoKCiAKIAoKCgoKCgoKCgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4KY2xhc3MgX19t
YWxsb2NfYWxsb2NfdGVtcGxhdGUgewoKcHJpdmF0ZToKCiAgc3RhdGljIHZvaWQqIF9TX29vbV9t
YWxsb2Moc2l6ZV90KTsKICBzdGF0aWMgdm9pZCogX1Nfb29tX3JlYWxsb2Modm9pZCosIHNpemVf
dCk7CgoKICBzdGF0aWMgdm9pZCAoKiBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKTsKCgpw
dWJsaWM6CgogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIHZvaWQq
IF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQg
PSBfU19vb21fbWFsbG9jKF9fbik7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBzdGF0aWMg
dm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICApCiAgewogICAgZnJlZShfX3ApOwog
IH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgICwgc2l6ZV90
IF9fbmV3X3N6KQogIHsKICAgIHZvaWQqIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbmV3X3N6
KTsKICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9yZWFsbG9jKF9fcCwg
X19uZXdfc3opOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KCiAgc3RhdGljIHZvaWQgKCogX19z
ZXRfbWFsbG9jX2hhbmRsZXIodm9pZCAoKl9fZikoKSkpKCkKICB7CiAgICB2b2lkICgqIF9fb2xk
KSgpID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICBfX21hbGxvY19hbGxvY19vb21f
aGFuZGxlciA9IF9fZjsKICAgIHJldHVybihfX29sZCk7CiAgfQoKfTsKCiAKCgp0ZW1wbGF0ZSA8
aW50IF9faW5zdD4Kdm9pZCAoKiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfX21h
bGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7CgoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZv
aWQqCl9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9tYWxsb2Moc2l6ZV90
IF9fbikKewogICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgdm9pZCogX19y
ZXN1bHQ7CgogICAgZm9yICg7OykgewogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21h
bGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5k
bGVyKSB7IGNlcnIgPDwgIm91dCBvZiBtZW1vcnkiIDw8IGVuZGw7IGV4aXQoMSkgOyB9CiAgICAg
ICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9f
bik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQpOwogICAgfQp9Cgp0ZW1w
bGF0ZSA8aW50IF9faW5zdD4Kdm9pZCogX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6
X1Nfb29tX3JlYWxsb2Modm9pZCogX19wLCBzaXplX3QgX19uKQp7CiAgICB2b2lkICgqIF9fbXlf
bWFsbG9jX2hhbmRsZXIpKCk7CiAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICBmb3IgKDs7KSB7CiAg
ICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwog
ICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpIHsgY2VyciA8PCAib3V0IG9mIG1l
bW9yeSIgPDwgZW5kbDsgZXhpdCgxKSA7IH0KICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIp
KCk7CiAgICAgICAgX19yZXN1bHQgPSByZWFsbG9jKF9fcCwgX19uKTsKICAgICAgICBpZiAoX19y
ZXN1bHQpIHJldHVybihfX3Jlc3VsdCk7CiAgICB9Cn0KCnR5cGVkZWYgX19tYWxsb2NfYWxsb2Nf
dGVtcGxhdGU8MD4gbWFsbG9jX2FsbG9jOwoKdGVtcGxhdGU8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs
b2M+CmNsYXNzIHNpbXBsZV9hbGxvYyB7CgpwdWJsaWM6CiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0
ZShzaXplX3QgX19uKQogICAgICB7IHJldHVybiAwID09IF9fbiA/IDAgOiAoX1RwKikgX0FsbG9j
OjphbGxvY2F0ZShfX24gKiBzaXplb2YgKF9UcCkpOyB9CiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0
ZSh2b2lkKQogICAgICB7IHJldHVybiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShzaXplb2YgKF9U
cCkpOyB9CiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQog
ICAgICB7IGlmICgwICE9IF9fbikgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9m
IChfVHApKTsgfQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCkKICAgICAgeyBf
QWxsb2M6OmRlYWxsb2NhdGUoX19wLCBzaXplb2YgKF9UcCkpOyB9Cn07CgogCiAKIAogCiAKdGVt
cGxhdGUgPGNsYXNzIF9BbGxvYz4KY2xhc3MgZGVidWdfYWxsb2MgewoKcHJpdmF0ZToKCiAgZW51
bSB7X1NfZXh0cmEgPSA4fTsgICAKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgCgpwdWJsaWM6CgogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3Qg
X19uKQogIHsKICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKV9BbGxvYzo6YWxsb2NhdGUoX19u
ICsgX1NfZXh0cmEpOwogICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uOwogICAgcmV0dXJuIF9f
cmVzdWx0ICsgX1NfZXh0cmE7CiAgfQoKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9f
cCwgc2l6ZV90IF9fbikKICB7CiAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSBfU19l
eHRyYTsKICAgICgodm9pZCkgKCggKihzaXplX3QqKV9fcmVhbF9wID09IF9fbiApID8gMCA6IChf
X2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLAkgICIvaG9tZS90di90
b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4y
LjEuMC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgLCAgIDI2
MyAsICAiKihzaXplX3QqKV9fcmVhbF9wID09IF9fbiIgKSwgMCkgKSkgOwogICAgX0FsbG9jOjpk
ZWFsbG9jYXRlKF9fcmVhbF9wLCBfX24gKyBfU19leHRyYSk7CiAgfQoKICBzdGF0aWMgdm9pZCog
cmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KQog
IHsKICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIF9TX2V4dHJhOwogICAgKCh2b2lk
KSAoKCAqKHNpemVfdCopX19yZWFsX3AgPT0gX19vbGRfc3ogKSA/IDAgOiAoX19lcHJpbnRmICgi
JXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xuIiwJICAiL2hvbWUvdHYvdG9vbHMvZ251L3Jz
NjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4y
Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiICwgICAyNzAgLCAgIiooc2l6
ZV90KilfX3JlYWxfcCA9PSBfX29sZF9zeiIgKSwgMCkgKSkgOwogICAgY2hhciogX19yZXN1bHQg
PSAoY2hhciopCiAgICAgIF9BbGxvYzo6cmVhbGxvY2F0ZShfX3JlYWxfcCwgX19vbGRfc3ogKyBf
U19leHRyYSwgX19uZXdfc3ogKyBfU19leHRyYSk7CiAgICAqKHNpemVfdCopX19yZXN1bHQgPSBf
X25ld19zejsKICAgIHJldHVybiBfX3Jlc3VsdCArIF9TX2V4dHJhOwogIH0KCn07CgoKCgoKCgoK
CgogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCiAKIAogCiAKIAogCiAKIAogCgoKCgoKCgp0
ZW1wbGF0ZSA8Ym9vbCB0aHJlYWRzLCBpbnQgaW5zdD4KY2xhc3MgX19kZWZhdWx0X2FsbG9jX3Rl
bXBsYXRlIHsKCnByaXZhdGU6CiAgIAogICAKCiAgICBlbnVtIHtfQUxJR04gPSA4fTsKICAgIGVu
dW0ge19NQVhfQllURVMgPSAxMjh9OwogICAgZW51bSB7X05GUkVFTElTVFMgPSBfTUFYX0JZVEVT
L19BTElHTn07CgogIHN0YXRpYyBzaXplX3QKICBfU19yb3VuZF91cChzaXplX3QgX19ieXRlcykK
ICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMpICsgX0FMSUdOLTEpICYgfihfQUxJR04gLSAxKSk7IH0K
CnByaXZhdGUgOgogIHVuaW9uIF9PYmogewogICAgICAgIHVuaW9uIF9PYmoqIF9NX2ZyZWVfbGlz
dF9saW5rOwogICAgICAgIGNoYXIgX01fY2xpZW50X2RhdGFbMV07ICAgICAKICB9Owpwcml2YXRl
OgoKCgoKICAgIHN0YXRpYyBfT2JqKiAgIF9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNUU107CgogIHN0
YXRpYyAgc2l6ZV90IF9TX2ZyZWVsaXN0X2luZGV4KHNpemVfdCBfX2J5dGVzKSB7CiAgICAgICAg
cmV0dXJuICgoKF9fYnl0ZXMpICsgX0FMSUdOLTEpL19BTElHTiAtIDEpOwogIH0KCiAgIAogIHN0
YXRpYyB2b2lkKiBfU19yZWZpbGwoc2l6ZV90IF9fbik7CiAgIAogICAKICBzdGF0aWMgY2hhciog
X1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKCiAgIAogIHN0YXRp
YyBjaGFyKiBfU19zdGFydF9mcmVlOwogIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsKICBzdGF0
aWMgc2l6ZV90IF9TX2hlYXBfc2l6ZTsKCgoKCgoKCgoKCgoKCgoKIyAzODkgIi9ob21lL3R2L3Rv
b2xzL2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjIu
MS4wLzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCgoKICAg
IGNsYXNzIF9Mb2NrIHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIF9Mb2NrKCkgeyAgOyB9
CiAgICAgICAgICAgIH5fTG9jaygpIHsgIDsgfQogICAgfTsKICAgIGZyaWVuZCBjbGFzcyBfTG9j
azsKCnB1YmxpYzoKCiAgIAogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsK
ICAgIF9PYmoqICAqIF9fbXlfZnJlZV9saXN0OwogICAgX09iaiogICBfX3Jlc3VsdDsKCiAgICBp
ZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykgewogICAgICAgIHJldHVybihtYWxsb2NfYWxs
b2M6OmFsbG9jYXRlKF9fbikpOwogICAgfQogICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xp
c3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwogICAgIAogICAgIAogICAgIAoKCgoKICAgIF9f
cmVzdWx0ID0gKl9fbXlfZnJlZV9saXN0OwogICAgaWYgKF9fcmVzdWx0ID09IDApIHsKICAgICAg
ICB2b2lkKiBfX3IgPSBfU19yZWZpbGwoX1Nfcm91bmRfdXAoX19uKSk7CiAgICAgICAgcmV0dXJu
IF9fcjsKICAgIH0KICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcmVzdWx0IC0+IF9NX2ZyZWVfbGlz
dF9saW5rOwogICAgcmV0dXJuIChfX3Jlc3VsdCk7CiAgfTsKCiAgIAogIHN0YXRpYyB2b2lkIGRl
YWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogIHsKICAgIF9PYmoqIF9fcSA9IChfT2Jq
KilfX3A7CiAgICBfT2JqKiAgKiBfX215X2ZyZWVfbGlzdDsKCiAgICBpZiAoX19uID4gKHNpemVf
dCkgX01BWF9CWVRFUykgewogICAgICAgIG1hbGxvY19hbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9f
bik7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xp
c3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwogICAgIAoKCgoKICAgIF9fcSAtPiBfTV9mcmVl
X2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcTsK
ICAgICAKICB9CgogIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9f
b2xkX3N6LCBzaXplX3QgX19uZXdfc3opOwoKfSA7Cgp0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190
ZW1wbGF0ZTwgZmFsc2UgLCAwPiBhbGxvYzsKdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGU8ZmFsc2UsIDA+IHNpbmdsZV9jbGllbnRfYWxsb2M7CgoKCiAKIAogCiAKdGVtcGxhdGUgPGJv
b2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpjaGFyKgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8
X190aHJlYWRzLCBfX2luc3Q+OjpfU19jaHVua19hbGxvYyhzaXplX3QgX19zaXplLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQm
IF9fbm9ianMpCnsKICAgIGNoYXIqIF9fcmVzdWx0OwogICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMg
PSBfX3NpemUgKiBfX25vYmpzOwogICAgc2l6ZV90IF9fYnl0ZXNfbGVmdCA9IF9TX2VuZF9mcmVl
IC0gX1Nfc3RhcnRfZnJlZTsKCiAgICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMp
IHsKICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgX1Nfc3RhcnRfZnJl
ZSArPSBfX3RvdGFsX2J5dGVzOwogICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICB9IGVsc2Ug
aWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3NpemUpIHsKICAgICAgICBfX25vYmpzID0gKGludCkoX19i
eXRlc19sZWZ0L19fc2l6ZSk7CiAgICAgICAgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9i
anM7CiAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgIF9TX3N0YXJ0X2Zy
ZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfSBlbHNl
IHsKICAgICAgICBzaXplX3QgX19ieXRlc190b19nZXQgPQoJICAyICogX190b3RhbF9ieXRlcyAr
IF9TX3JvdW5kX3VwKF9TX2hlYXBfc2l6ZSA+PiA0KTsKICAgICAgICAgCiAgICAgICAgaWYgKF9f
Ynl0ZXNfbGVmdCA+IDApIHsKICAgICAgICAgICAgX09iaiogICogX19teV9mcmVlX2xpc3QgPQog
ICAgICAgICAgICAgICAgICAgICAgICBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChf
X2J5dGVzX2xlZnQpOwoKICAgICAgICAgICAgKChfT2JqKilfU19zdGFydF9mcmVlKSAtPiBfTV9m
cmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgKl9fbXlfZnJlZV9s
aXN0ID0gKF9PYmoqKV9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgfQogICAgICAgIF9TX3N0YXJ0X2Zy
ZWUgPSAoY2hhciopbWFsbG9jKF9fYnl0ZXNfdG9fZ2V0KTsKICAgICAgICBpZiAoMCA9PSBfU19z
dGFydF9mcmVlKSB7CiAgICAgICAgICAgIHNpemVfdCBfX2k7CiAgICAgICAgICAgIF9PYmoqICAq
IF9fbXlfZnJlZV9saXN0OwoJICAgIF9PYmoqIF9fcDsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgZm9yIChfX2kgPSBfX3NpemU7IF9faSA8PSBf
TUFYX0JZVEVTOyBfX2kgKz0gX0FMSUdOKSB7CiAgICAgICAgICAgICAgICBfX215X2ZyZWVfbGlz
dCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9faSk7CiAgICAgICAgICAgICAg
ICBfX3AgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgICBpZiAoMCAhPSBfX3ApIHsK
ICAgICAgICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3AgLT4gX01fZnJlZV9saXN0
X2xpbms7CiAgICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX3A7CiAg
ICAgICAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19pOwogICAg
ICAgICAgICAgICAgICAgIHJldHVybihfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpKTsK
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICB9CgkgICAgX1NfZW5kX2ZyZWUgPSAwOwkgCiAgICAgICAgICAgIF9T
X3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jX2FsbG9jOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dl
dCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgfQog
ICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVzX3RvX2dldDsKICAgICAgICBfU19lbmRfZnJl
ZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2J5dGVzX3RvX2dldDsKICAgICAgICByZXR1cm4oX1NfY2h1
bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CiAgICB9Cn0KCgogCiAKIAp0ZW1wbGF0ZSA8Ym9v
bCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnZvaWQqCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxf
X3RocmVhZHMsIF9faW5zdD46Ol9TX3JlZmlsbChzaXplX3QgX19uKQp7CiAgICBpbnQgX19ub2Jq
cyA9IDIwOwogICAgY2hhciogX19jaHVuayA9IF9TX2NodW5rX2FsbG9jKF9fbiwgX19ub2Jqcyk7
CiAgICBfT2JqKiAgKiBfX215X2ZyZWVfbGlzdDsKICAgIF9PYmoqIF9fcmVzdWx0OwogICAgX09i
aiogX19jdXJyZW50X29iajsKICAgIF9PYmoqIF9fbmV4dF9vYmo7CiAgICBpbnQgX19pOwoKICAg
IGlmICgxID09IF9fbm9ianMpIHJldHVybihfX2NodW5rKTsKICAgIF9fbXlfZnJlZV9saXN0ID0g
X1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKCiAgICAgCiAgICAgIF9fcmVz
dWx0ID0gKF9PYmoqKV9fY2h1bms7CiAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fbmV4dF9vYmog
PSAoX09iaiopKF9fY2h1bmsgKyBfX24pOwogICAgICBmb3IgKF9faSA9IDE7IDsgX19pKyspIHsK
ICAgICAgICBfX2N1cnJlbnRfb2JqID0gX19uZXh0X29iajsKICAgICAgICBfX25leHRfb2JqID0g
KF9PYmoqKSgoY2hhciopX19uZXh0X29iaiArIF9fbik7CiAgICAgICAgaWYgKF9fbm9ianMgLSAx
ID09IF9faSkgewogICAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5r
ID0gMDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX19j
dXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IF9fbmV4dF9vYmo7CiAgICAgICAgfQog
ICAgICB9CiAgICByZXR1cm4oX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Ym9vbCB0aHJlYWRzLCBp
bnQgaW5zdD4Kdm9pZCoKX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVhZHMsIGluc3Q+Ojpy
ZWFsbG9jYXRlKHZvaWQqIF9fcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBfX29sZF9zeiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25ld19zeikKewogICAgdm9pZCog
X19yZXN1bHQ7CiAgICBzaXplX3QgX19jb3B5X3N6OwoKICAgIGlmIChfX29sZF9zeiA+IChzaXpl
X3QpIF9NQVhfQllURVMgJiYgX19uZXdfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAg
ICAgcmV0dXJuKHJlYWxsb2MoX19wLCBfX25ld19zeikpOwogICAgfQogICAgaWYgKF9TX3JvdW5k
X3VwKF9fb2xkX3N6KSA9PSBfU19yb3VuZF91cChfX25ld19zeikpIHJldHVybihfX3ApOwogICAg
X19yZXN1bHQgPSBhbGxvY2F0ZShfX25ld19zeik7CiAgICBfX2NvcHlfc3ogPSBfX25ld19zeiA+
IF9fb2xkX3N6PyBfX29sZF9zeiA6IF9fbmV3X3N6OwogICAgbWVtY3B5KF9fcmVzdWx0LCBfX3As
IF9fY29weV9zeik7CiAgICBkZWFsbG9jYXRlKF9fcCwgX19vbGRfc3opOwogICAgcmV0dXJuKF9f
cmVzdWx0KTsKfQoKCgoKCgoKCgoKCgoKCgojIDYwMiAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAw
MC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yLy4u
Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMKCgojIDY4OSAiL2hvbWUvdHYv
dG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQu
Mi4xLjAvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMKCgp0
ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqIF9fZGVmYXVsdF9hbGxv
Y190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3N0YXJ0X2ZyZWUgPSAwOwoKdGVtcGxh
dGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpjaGFyKiBfX2RlZmF1bHRfYWxsb2NfdGVt
cGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19lbmRfZnJlZSA9IDA7Cgp0ZW1wbGF0ZSA8Ym9v
bCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnNpemVfdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8
X190aHJlYWRzLCBfX2luc3Q+OjpfU19oZWFwX3NpemUgPSAwOwoKdGVtcGxhdGUgPGJvb2wgX190
aHJlYWRzLCBpbnQgX19pbnN0PgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBf
X2luc3Q+OjpfT2JqKiAgCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5z
dD4gOjpfU19mcmVlX2xpc3RbCiAgICBfTkZSRUVMSVNUUwpdID0gezAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIH07CiAKIAogCgoKCgoKCgoKCgogCiAKIAog
CiAKIAogCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGFsbG9jYXRvciB7CiAgdHlwZWRl
ZiBhbGxvYyBfQWxsb2M7ICAgICAgICAgICAKcHVibGljOgogIHR5cGVkZWYgc2l6ZV90ICAgICBz
aXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVm
IF9UcCogICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3RfcG9pbnRlcjsK
ICB0eXBlZGVmIF9UcCYgICAgICAgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgX1RwJiBjb25z
dF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBfVHAgICAgICAgIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRl
IDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+
IG90aGVyOwogIH07CgogIGFsbG9jYXRvcigpIHRocm93KCkgIHt9CiAgYWxsb2NhdG9yKGNvbnN0
IGFsbG9jYXRvciYpIHRocm93KCkgIHt9CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IGFsbG9jYXRv
cihjb25zdCBhbGxvY2F0b3I8X1RwMT4mKSB0aHJvdygpICB7fQogIH5hbGxvY2F0b3IoKSB0aHJv
dygpICB7fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4g
Jl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25z
dCB7IHJldHVybiAmX194OyB9CgogICAKICAgCiAgX1RwKiBhbGxvY2F0ZShzaXplX3R5cGUgX19u
LCBjb25zdCB2b2lkKiA9IDApIHsKICAgIHJldHVybiBfX24gIT0gMCA/IHN0YXRpY19jYXN0PF9U
cCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAgICAgICAgICAgICAg
ICAgIDogMDsKICB9CgogICAKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlw
ZSBfX24pCiAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsg
fQoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpIAogICAgeyByZXR1cm4gc2l6
ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CgogIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBj
b25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICB2b2lkIGRlc3Ryb3ko
cG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KfTsKCnRlbXBsYXRlPD4KY2xhc3MgYWxsb2Nh
dG9yPHZvaWQ+IHsKICB0eXBlZGVmIHNpemVfdCAgICAgIHNpemVfdHlwZTsKICB0eXBlZGVmIHB0
cmRpZmZfdCAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQqICAgICAgIHBvaW50ZXI7
CiAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAg
ICAgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewog
ICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsKfTsKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgYWxsb2NhdG9y
PF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCnsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGFs
bG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9
CgogCiAKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3Qg
X19hbGxvY2F0b3IgewogIF9BbGxvYyBfX3VuZGVybHlpbmdfYWxsb2M7CgogIHR5cGVkZWYgc2l6
ZV90ICAgIHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAg
dHlwZWRlZiBfVHAqICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3Bv
aW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9U
cCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1RwICAgICAgICB2YWx1ZV90eXBlOwoKICB0
ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIF9fYWxsb2Nh
dG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAgfTsKCiAgX19hbGxvY2F0b3IoKSB0aHJvdygpICB7
fQogIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yJiBfX2EpIHRocm93KCkgCiAgICA6IF9f
dW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQogIHRlbXBsYXRlIDxj
bGFzcyBfVHAxPgogIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4m
IF9fYSkgdGhyb3coKSAKICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdf
YWxsb2MpIHt9CiAgfl9fYWxsb2NhdG9yKCkgdGhyb3coKSAge30KCiAgcG9pbnRlciBhZGRyZXNz
KHJlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KICBjb25zdF9wb2ludGVyIGFk
ZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoKICAgCiAg
X1RwKiBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApIHsKICAgIHJldHVy
biBfX24gIT0gMAogICAgICAgID8gc3RhdGljX2Nhc3Q8X1RwKj4oX191bmRlcmx5aW5nX2FsbG9j
LmFsbG9jYXRlKF9fbiAqIHNpemVvZihfVHApKSkKICAgICAgICA6IDA7CiAgfQoKICAgCiAgdm9p
ZCBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQogICAgeyBfX3VuZGVybHlp
bmdfYWxsb2MuZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsgfQoKICBzaXplX3R5
cGUgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpIAogICAgeyByZXR1cm4gc2l6ZV90KC0xKSAvIHNp
emVvZihfVHApOyB9CgogIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9f
dmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICB2b2lkIGRlc3Ryb3kocG9pbnRlciBfX3Ap
IHsgX19wLT5+X1RwKCk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIF9fYWxs
b2NhdG9yPHZvaWQsIF9BbGxvYz4gewogIHR5cGVkZWYgc2l6ZV90ICAgICAgc2l6ZV90eXBlOwog
IHR5cGVkZWYgcHRyZGlmZl90ICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCogICAg
ICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRl
ZiB2b2lkICAgICAgICB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0
IHJlYmluZCB7CiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAg
fTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7CiAgcmV0
dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9jID09IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOwp9
CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4g
X19hMS5fX3VuZGVybHlpbmdfYWxsb2MgIT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCgog
CiAKIAoKdGVtcGxhdGUgPGludCBpbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9f
bWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0PiYpCnsKICByZXR1cm4gdHJ1ZTsKfQoKCnRl
bXBsYXRlIDxpbnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fbWFsbG9j
X2FsbG9jX3RlbXBsYXRlPF9faW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9f
bWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9CgoKCnRl
bXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JiwKICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJl
YWRzLCBfX2luc3Q+JikKewogIHJldHVybiB0cnVlOwp9CgoKdGVtcGxhdGUgPGJvb2wgX190aHJl
YWRzLCBpbnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fZGVmYXVsdF9h
bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mKQp7CiAg
cmV0dXJuIGZhbHNlOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9w
ZXJhdG9yPT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gdHJ1ZTsKfQoKCnRlbXBs
YXRlIDxjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgZGVidWdfYWxs
b2M8X0FsbG9jPiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVidWdfYWxsb2M8X0Fs
bG9jPiYpIHsKICByZXR1cm4gZmFsc2U7Cn0KCgogCiAKIAogCiAKIAoKIAogCiAKIAogCiAKCiAK
IAogCiAKIAogCiAKIAogCiAKIAoKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j
YXRvcj4Kc3RydWN0IF9BbGxvY190cmFpdHMKewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3Rh
bmNlbGVzcyA9IGZhbHNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jYXRvcjo6ICAgcmViaW5k
PF9UcD46Om90aGVyCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CmNvbnN0IGJvb2wgX0FsbG9jX3RyYWl0czxfVHAsIF9B
bGxvY2F0b3I+OjpfU19pbnN0YW5jZWxlc3M7CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfVHAxPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIGFsbG9jYXRvcjxfVHAxPiA+CnsKICBz
dGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxl
X2FsbG9jPF9UcCwgYWxsb2M+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgYWxsb2NhdG9yPF9UcD4g
YWxsb2NhdG9yX3R5cGU7Cn07CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBpbnQgX19pbnN0Pgpz
dHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4g
Pgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVm
IHNpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBfQWxs
b2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxh
dGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGJv
b2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fZGVm
YXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0
IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAs
IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgICAgICAg
X0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVsdF9hbGxvY190
ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7Cn07
CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0
czxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5z
dGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGRlYnVnX2FsbG9j
PF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgZGVidWdf
YWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKIAogCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfVHAxLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsCiAg
ICAgICAgICAgICAgICAgICAgIF9fYWxsb2NhdG9yPF9UcDEsIF9fbWFsbG9jX2FsbG9jX3RlbXBs
YXRlPF9faW5zdD4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0
cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8
X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxv
Y19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgYm9vbCBfX3RociwgaW50IF9faW5zdD4Kc3RydWN0IF9B
bGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0
ZTxfX3RociwgX19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVz
cyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVt
cGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9f
YWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPgog
ICAgICAgICAgYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X1RwMSwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fYWxsb2NhdG9y
PF9UcDEsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19p
bnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgZGVidWdfYWxs
b2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBkZWJ1
Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCgoKCgoKIAoKCgoKCiAKIAog
CiMgMjEgIi9ob21lL3R2L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9w
b3dlcnBjLWlibS1haXg0LjIuMS4wLzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2Fs
bG9jLmgiIDIgMwoKCgojIDQwICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIv
bGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5j
bHVkZS9nKystMy9hbGxvYy5oIiAzCgoKCgogCiAKIAojIDM5ICIvaG9tZS90di90b29scy9nbnUv
cnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1
LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgMiAzCgoKZXh0ZXJu
ICJDKysiIHsKY2xhc3MgaXN0cmVhbTsgY2xhc3Mgb3N0cmVhbTsKCiMgMSAiL2hvbWUvdHYvdG9v
bHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4x
LjAvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaXRlcmF0b3IiIDEgMwogCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2dj
Yy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfcmVsb3BzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgogCgoKCgoKCiAKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7CiAgcmV0dXJuICEoX194ID09
IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25z
dCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IF9UcCYgX194LCBj
b25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVHA+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYg
X195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKIAoKCgogCiAKIAojIDMxICIvaG9tZS90
di90b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4
NC4yLjEuMC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9pdGVyYXRvciIgMiAzCgoj
IDEgIi9ob21lL3R2L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dl
cnBjLWlibS1haXg0LjIuMS4wLzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDM0MiAi
L2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMt
aWJtLWFpeDQuMi4xLjAvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoKIyAzMiAiL2hvbWUv
dHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFp
eDQuMi4xLjAvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaXRlcmF0b3IiIDIgMwoK
CgoKCgojIDEgIi9ob21lL3R2L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxp
Yi9wb3dlcnBjLWlibS1haXg0LjIuMS4wLzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L3N0bF9pdGVyYXRvci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgog
CgpzdHJ1Y3QgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9yX3Rh
ZyB7fTsKc3RydWN0IGZvcndhcmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlucHV0X2l0ZXJhdG9y
X3RhZyB7fTsKc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIDogcHVibGljIGZvcndh
cmRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgOiBw
dWJsaWMgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcge307CgogCiAKIAogCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBpbnB1dF9pdGVyYXRvciB7CiAgdHlw
ZWRlZiBpbnB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAg
ICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSAgICAgICAgICBk
aWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0
eXBlZGVmIF9UcCYgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07CgpzdHJ1Y3Qgb3V0cHV0X2l0
ZXJhdG9yIHsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7
CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lk
ICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAg
ICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgZm9yd2FyZF9p
dGVyYXRvciB7CiAgdHlwZWRlZiBmb3J3YXJkX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29y
eTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBf
RGlzdGFuY2UgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAg
ICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgcmVmZXJl
bmNlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGJp
ZGlyZWN0aW9uYWxfaXRlcmF0b3IgewogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90
YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlICAgICAgICAgICAgICAgICAgZGlmZmVy
ZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsK
ICB0eXBlZGVmIF9UcCYgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRl
cmF0b3IgewogIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0
ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwog
IHR5cGVkZWYgX0Rpc3RhbmNlICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5
cGVkZWYgX1RwKiAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYg
ICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKCiMgOTggIi9ob21lL3R2L3Rvb2xz
L2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjIuMS4w
LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzIHsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdv
cnk7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnZhbHVlX3R5cGUgICAgICAgIHZhbHVl
X3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSAgIGRp
ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciAgICAg
ICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlICAg
ICAgICAgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGl0ZXJhdG9y
X3RyYWl0czxfVHAqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVy
YXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1
ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90ICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2Vf
dHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5
cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8Y29uc3QgX1RwKj4gewogIHR5cGVk
ZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRl
ZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHB0cmRp
ZmZfdCAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBjb25zdCBf
VHAqICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCYgICAgICAg
ICAgICAgICAgICByZWZlcmVuY2U7Cn07CgogCiAKIAogCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0
ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRl
Z29yeQpfX2l0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVyJikKewogIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0NhdGVnb3J5Owog
IHJldHVybiBfQ2F0ZWdvcnkoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90eXBlKgpfX2Rpc3RhbmNl
X3R5cGUoY29uc3QgX0l0ZXImKQp7CiAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSo+KDApOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90
eXBlKgpfX3ZhbHVlX3R5cGUoY29uc3QgX0l0ZXImKQp7CiAgcmV0dXJuIHN0YXRpY19jYXN0PHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUqPigwKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6
aXRlcmF0b3JfY2F0ZWdvcnkKaXRlcmF0b3JfY2F0ZWdvcnkoY29uc3QgX0l0ZXImIF9faSkgeyBy
ZXR1cm4gX19pdGVyYXRvcl9jYXRlZ29yeShfX2kpOyB9CgoKdGVtcGxhdGUgPGNsYXNzIF9JdGVy
PgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90eXBl
KgpkaXN0YW5jZV90eXBlKGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9fZGlzdGFuY2VfdHlw
ZShfX2kpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKgp2YWx1ZV90eXBlKGNvbnN0IF9JdGVyJiBfX2kp
IHsgcmV0dXJuIF9fdmFsdWVfdHlwZShfX2kpOyB9CgoKCgoKIyAyNTkgIi9ob21lL3R2L3Rvb2xz
L2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjIuMS4w
LzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lk
IF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSYgX19uLCBpbnB1dF9pdGVyYXRvcl90
YWcpCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsgKytfX2ZpcnN0OyArK19fbjsgfQp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+
CmlubGluZSB2b2lkIF9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIAog
ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIAogICAg
ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSYgX19uLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9y
X3RhZykKewogIF9fbiArPSBfX2xhc3QgLSBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgZGlzdGFuY2UoX0lucHV0
SXRlcmF0b3IgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9f
bGFzdCwgX0Rpc3RhbmNlJiBfX24pCnsKICBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19u
LCBpdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9y
Pjo6ZGlmZmVyZW5jZV90eXBlCl9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu
cHV0SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICB3
aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICsrX19maXJzdDsgKytfX247CiAgfQogIHJl
dHVybiBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CmlubGlu
ZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVy
ZW5jZV90eXBlCl9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRv
cl90YWcpIHsKICByZXR1cm4gX19sYXN0IC0gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJh
dG9yPjo6ZGlmZmVyZW5jZV90eXBlCmRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkgCiAgICBfQ2F0ZWdvcnk7CiAgcmV0
dXJuIF9fZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfQ2F0ZWdvcnkoKSk7Cn0KCgoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZh
bmNlKF9JbnB1dEl0ZXImIF9faSwgX0Rpc3RhbmNlIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKSB7
CiAgd2hpbGUgKF9fbi0tKSArK19faTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rp
b25hbEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfQmlk
aXJlY3Rpb25hbEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sIAogICAgICAgICAgICAgICAg
ICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpIHsKICBpZiAoX19uID49IDApCiAgICB3
aGlsZSAoX19uLS0pICsrX19pOwogIGVsc2UKICAgIHdoaWxlIChfX24rKykgLS1fX2k7Cn0KCgoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+
CmlubGluZSB2b2lkIF9fYWR2YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3Rh
bmNlIF9fbiwgCiAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh
ZykgewogIF9faSArPSBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xh
c3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBhZHZhbmNlKF9JbnB1dEl0ZXJhdG9yJiBfX2ksIF9E
aXN0YW5jZSBfX24pIHsKICBfX2FkdmFuY2UoX19pLCBfX24sIGl0ZXJhdG9yX2NhdGVnb3J5KF9f
aSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KY2xhc3MgYmFja19pbnNlcnRfaXRl
cmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAgdHlw
ZWRlZiBfQ29udGFpbmVyICAgICAgICAgIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0cHV0
X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAg
ICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5j
ZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYg
dm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7CgogIGV4cGxpY2l0IGJhY2tfaW5zZXJ0X2l0
ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkge30KICBiYWNrX2luc2Vy
dF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRh
aW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgeyAKICAgIGNvbnRhaW5lci0+cHVzaF9iYWNrKF9f
dmFsdWUpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29u
dGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBiYWNrX2luc2VydF9pdGVy
YXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgYmFja19p
bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhp
czsgfQp9OwoKIyAzNzggIi9ob21lL3R2L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIv
Z2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjIuMS4wLzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRl
L2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+Cmlu
bGluZSBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBiYWNrX2luc2VydGVyKF9Db250
YWluZXImIF9feCkgewogIHJldHVybiBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihf
X3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KY2xhc3MgZnJvbnRfaW5zZXJ0X2l0
ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250YWluZXIqIGNvbnRhaW5lcjsKcHVibGljOgogIHR5
cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBjb250YWluZXJfdHlwZTsKICB0eXBlZGVmIG91dHB1
dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkICAgICAgICAg
ICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVu
Y2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVm
IHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwoKICBleHBsaWNpdCBmcm9udF9pbnNlcnRf
aXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7fQogIGZyb250X2lu
c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0Nv
bnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgeyAKICAgIGNvbnRhaW5lci0+cHVzaF9mcm9u
dChfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9y
PF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGZyb250X2luc2Vy
dF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAg
ZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1
cm4gKnRoaXM7IH0KfTsKCiMgNDE3ICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2djYy0yLjk1
LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvLi4vLi4vLi4vLi4v
aW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFp
bmVyPgppbmxpbmUgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGZyb250X2luc2Vy
dGVyKF9Db250YWluZXImIF9feCkgewogIHJldHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0Nv
bnRhaW5lcj4oX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGluc2Vy
dF9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAgdHlwZW5h
bWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgaXRlcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5l
ciAgICAgICAgICBjb250YWluZXJfdHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcg
aXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5
cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBl
ZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgICAg
ICAgICAgcmVmZXJlbmNlOwoKICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBl
bmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBfX2kpIAogICAgOiBjb250YWluZXIoJl9feCksIGl0
ZXIoX19pKSB7fQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29u
c3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgeyAKICAgIGl0ZXIg
PSBjb250YWluZXItPmluc2VydChpdGVyLCBfX3ZhbHVlKTsKICAgICsraXRlcjsKICAgIHJldHVy
biAqdGhpczsKICB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7
IHJldHVybiAqdGhpczsgfQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3Ir
KygpIHsgcmV0dXJuICp0aGlzOyB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVy
YXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCiMgNDU5ICIvaG9tZS90di90b29scy9n
bnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8y
Ljk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwoKCnRlbXBs
YXRlIDxjbGFzcyBfQ29udGFpbmVyLCBjbGFzcyBfSXRlcmF0b3I+CmlubGluZSAKaW5zZXJ0X2l0
ZXJhdG9yPF9Db250YWluZXI+IGluc2VydGVyKF9Db250YWluZXImIF9feCwgX0l0ZXJhdG9yIF9f
aSkKewogIHR5cGVkZWYgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pdGVyOwogIHJl
dHVybiBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194LCBfX2l0ZXIoX19pKSk7Cn0KCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBf
UmVmZXJlbmNlID0gX1RwJiwgCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UgPSBwdHJkaWZmX3Q+
IAoKCgoKY2xhc3MgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yIHsKICB0eXBlZGVmIHJl
dmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBfVHAs
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZWZlcmVuY2UsIF9E
aXN0YW5jZT4gIF9TZWxmOwpwcm90ZWN0ZWQ6CiAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBjdXJy
ZW50OwpwdWJsaWM6CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRv
cl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5
cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7
CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYg
X1JlZmVyZW5jZSAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwoKICByZXZlcnNlX2JpZGlyZWN0
aW9uYWxfaXRlcmF0b3IoKSB7fQogIGV4cGxpY2l0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVy
YXRvcihfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9feCkKICAgIDogY3VycmVudChfX3gpIHt9CiAg
X0JpZGlyZWN0aW9uYWxJdGVyYXRvciBiYXNlKCkgY29uc3QgeyByZXR1cm4gY3VycmVudDsgfQog
IF9SZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRv
ciBfX3RtcCA9IGN1cnJlbnQ7CiAgICByZXR1cm4gKi0tX190bXA7CiAgfQoKICBwb2ludGVyIG9w
ZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICBfU2VsZiYgb3Bl
cmF0b3IrKygpIHsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYg
b3BlcmF0b3IrKyhpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAtLWN1cnJlbnQ7
CiAgICByZXR1cm4gX190bXA7CiAgfQogIF9TZWxmJiBvcGVyYXRvci0tKCkgewogICAgKytjdXJy
ZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvci0tKGludCkgewogICAg
X1NlbGYgX190bXAgPSAqdGhpczsKICAgICsrY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9
Cn07CgojIDU1MCAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2Mt
bGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr
LTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpSXRlciwgY2xhc3MgX1Rw
LCBjbGFzcyBfUmVmLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgYm9vbCBvcGVy
YXRvcj09KAogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIs
IF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX194LCAKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rp
b25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feSkKewogIHJl
dHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCgoKIAogCiAKIAogCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0l0ZXJhdG9yPgpjbGFzcyByZXZlcnNlX2l0ZXJhdG9yIAp7CnByb3RlY3RlZDoKICBf
SXRlcmF0b3IgY3VycmVudDsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICAgICAgICBpdGVyYXRvcl9jYXRl
Z29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1
ZV90eXBlCiAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgZGlmZmVyZW5jZV90
eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50
ZXIKICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0l0ZXJhdG9yPjo6cmVmZXJlbmNlCiAgICAgICAgICByZWZlcmVuY2U7CgogIHR5cGVkZWYgX0l0
ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRv
cj4gX1NlbGY7CgpwdWJsaWM6CiAgcmV2ZXJzZV9pdGVyYXRvcigpIHt9CiAgZXhwbGljaXQgcmV2
ZXJzZV9pdGVyYXRvcihpdGVyYXRvcl90eXBlIF9feCkgOiBjdXJyZW50KF9feCkge30KCiAgcmV2
ZXJzZV9pdGVyYXRvcihjb25zdCBfU2VsZiYgX194KSA6IGN1cnJlbnQoX194LmN1cnJlbnQpIHt9
CgogIHRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVy
c2VfaXRlcmF0b3I8X0l0ZXI+JiBfX3gpCiAgICA6IGN1cnJlbnQoX194LmJhc2UoKSkge30KCiAg
ICAKICBpdGVyYXRvcl90eXBlIGJhc2UoKSBjb25zdCB7IHJldHVybiBjdXJyZW50OyB9CiAgcmVm
ZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIF9JdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7
CiAgICByZXR1cm4gKi0tX190bXA7CiAgfQoKICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7
IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7CiAgICAt
LWN1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7
CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgLS1jdXJyZW50OwogICAgcmV0dXJuIF9fdG1w
OwogIH0KICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsKICAgICsrY3VycmVudDsKICAgIHJldHVybiAq
dGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRo
aXM7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQoKICBfU2VsZiBvcGVyYXRv
cisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgewogICAgcmV0dXJuIF9TZWxmKGN1cnJlbnQg
LSBfX24pOwogIH0KICBfU2VsZiYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19uKSB7CiAg
ICBjdXJyZW50IC09IF9fbjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3It
KGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsKICAgIHJldHVybiBfU2VsZihjdXJyZW50ICsg
X19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9fbikgewogICAg
Y3VycmVudCArPSBfX247CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIHJlZmVyZW5jZSBvcGVyYXRv
cltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooKnRoaXMgKyBfX24pOyB9
ICAKfTsgCiAKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwgCiAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1
cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9y
PgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+
JiBfX3gsIAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl
cmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX195LmJhc2UoKSA8IF9feC5iYXNlKCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9J
dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpvcGVyYXRvci0oY29uc3QgcmV2ZXJzZV9pdGVyYXRv
cjxfSXRlcmF0b3I+JiBfX3gsIAogICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl
cmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX195LmJhc2UoKSAtIF9feC5iYXNlKCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4g
Cm9wZXJhdG9yKyh0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVu
Y2VfdHlwZSBfX24sCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m
IF9feCkgewogIHJldHVybiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4oX194LmJhc2UoKSAt
IF9fbik7Cn0KCiMgODA1ICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGli
L2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwoKCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0Rpc3QgPSBwdHJkaWZmX3Q+IApjbGFzcyBpc3RyZWFtX2l0ZXJhdG9yIHsKICBmcmllbmQg
Ym9vbCBvcGVyYXRvcj09IDw+ICAoY29uc3QgaXN0cmVhbV9pdGVyYXRvciYsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRv
ciYpOwpwcm90ZWN0ZWQ6CiAgaXN0cmVhbSogX01fc3RyZWFtOwogIF9UcCBfTV92YWx1ZTsKICBi
b29sIF9NX2VuZF9tYXJrZXI7CiAgdm9pZCBfTV9yZWFkKCkgewogICAgX01fZW5kX21hcmtlciA9
ICgqX01fc3RyZWFtKSA/IHRydWUgOiBmYWxzZTsKICAgIGlmIChfTV9lbmRfbWFya2VyKSAqX01f
c3RyZWFtID4+IF9NX3ZhbHVlOwogICAgX01fZW5kX21hcmtlciA9ICgqX01fc3RyZWFtKSA/IHRy
dWUgOiBmYWxzZTsKICB9CnB1YmxpYzoKICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyAgaXRl
cmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7
CiAgdHlwZWRlZiBfRGlzdCAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVm
IGNvbnN0IF9UcCogICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCYgICAgICAg
ICAgcmVmZXJlbmNlOwoKICBpc3RyZWFtX2l0ZXJhdG9yKCkgOiBfTV9zdHJlYW0oJmNpbiksIF9N
X2VuZF9tYXJrZXIoZmFsc2UpIHt9CiAgaXN0cmVhbV9pdGVyYXRvcihpc3RyZWFtJiBfX3MpIDog
X01fc3RyZWFtKCZfX3MpIHsgX01fcmVhZCgpOyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNv
bnN0IHsgcmV0dXJuIF9NX3ZhbHVlOyB9CgogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsg
cmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogIGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdD4m
IG9wZXJhdG9yKysoKSB7IAogICAgX01fcmVhZCgpOyAKICAgIHJldHVybiAqdGhpczsKICB9CiAg
aXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0PiBvcGVyYXRvcisrKGludCkgIHsKICAgIGlzdHJl
YW1faXRlcmF0b3I8X1RwLCBfRGlzdD4gX190bXAgPSAqdGhpczsKICAgIF9NX3JlYWQoKTsKICAg
IHJldHVybiBfX3RtcDsKICB9Cn07CgojIDg2NCAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9n
Y2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yLy4uLy4u
Ly4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgaXN0cmVh
bV9pdGVyYXRvcjxfVHAsIF9EaXN0YW5jZT4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3RhbmNlPiYgX195KSB7CiAgcmV0dXJuIChf
X3guX01fc3RyZWFtID09IF9feS5fTV9zdHJlYW0gJiYKICAgICAgICAgIF9feC5fTV9lbmRfbWFy
a2VyID09IF9feS5fTV9lbmRfbWFya2VyKSB8fAogICAgICAgICBfX3guX01fZW5kX21hcmtlciA9
PSBmYWxzZSAmJiBfX3kuX01fZW5kX21hcmtlciA9PSBmYWxzZTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4KY2xhc3Mgb3N0cmVhbV9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBvc3RyZWFtKiBfTV9z
dHJlYW07CiAgY29uc3QgY2hhciogX01fc3RyaW5nOwpwdWJsaWM6CiAgdHlwZWRlZiBvdXRwdXRf
aXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAg
ICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNl
X3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB2
b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKCiAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFt
JiBfX3MpIDogX01fc3RyZWFtKCZfX3MpLCBfTV9zdHJpbmcoMCkge30KICBvc3RyZWFtX2l0ZXJh
dG9yKG9zdHJlYW0mIF9fcywgY29uc3QgY2hhciogX19jKSAKICAgIDogX01fc3RyZWFtKCZfX3Mp
LCBfTV9zdHJpbmcoX19jKSAge30KICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yPShj
b25zdCBfVHAmIF9fdmFsdWUpIHsgCiAgICAqX01fc3RyZWFtIDw8IF9fdmFsdWU7CiAgICBpZiAo
X01fc3RyaW5nKSAqX01fc3RyZWFtIDw8IF9NX3N0cmluZzsKICAgIHJldHVybiAqdGhpczsKICB9
CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQog
IG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9IAog
IG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9
IAp9OwoKIyA5MDcgIi9ob21lL3R2L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2Nj
LWxpYi9wb3dlcnBjLWlibS1haXg0LjIuMS4wLzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr
Ky0zL3N0bF9pdGVyYXRvci5oIiAzCgoKIAoKCgogCiAKIAojIDM4ICIvaG9tZS90di90b29scy9n
bnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8y
Ljk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9pdGVyYXRvciIgMiAzCgoKCgogCiAKIAoj
IDQ0ICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93
ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQv
YmFzdHJpbmcuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCBfX291dF9vZl9yYW5nZSAoY29uc3QgY2hh
ciAqKTsKZXh0ZXJuIHZvaWQgX19sZW5ndGhfZXJyb3IgKGNvbnN0IGNoYXIgKik7CgoKCgoKCgoK
CgoKCgoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMgPSBzdHJpbmdfY2hhcl90
cmFpdHM8Y2hhclQ+LAoJICBjbGFzcyBBbGxvY2F0b3IgPSBhbGxvYyA+CmNsYXNzIGJhc2ljX3N0
cmluZwp7CnByaXZhdGU6CiAgc3RydWN0IFJlcCB7CiAgICBzaXplX3QgbGVuLCByZXMsIHJlZjsK
ICAgIGJvb2wgc2VsZmlzaDsKCiAgICBjaGFyVCogZGF0YSAoKSB7IHJldHVybiByZWludGVycHJl
dF9jYXN0PGNoYXJUICo+KHRoaXMgKyAxKTsgfQogICAgY2hhclQmIG9wZXJhdG9yW10gKHNpemVf
dCBzKSB7IHJldHVybiBkYXRhICgpIFtzXTsgfQogICAgY2hhclQqIGdyYWIgKCkgeyBpZiAoc2Vs
ZmlzaCkgcmV0dXJuIGNsb25lICgpOyArK3JlZjsgcmV0dXJuIGRhdGEgKCk7IH0KIyAxMDggIi9o
b21lL3R2L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dlcnBjLWli
bS1haXg0LjIuMS4wLzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmlu
Zy5oIiAzCgogICAgdm9pZCByZWxlYXNlICgpIHsgaWYgKC0tcmVmID09IDApIGRlbGV0ZSB0aGlz
OyB9CgoKICAgIGlubGluZSBzdGF0aWMgdm9pZCAqIG9wZXJhdG9yIG5ldyAoc2l6ZV90LCBzaXpl
X3QpOwogICAgaW5saW5lIHN0YXRpYyB2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqKTsKICAg
IGlubGluZSBzdGF0aWMgUmVwKiBjcmVhdGUgKHNpemVfdCk7CiAgICBjaGFyVCogY2xvbmUgKCk7
CgogICAgaW5saW5lIHZvaWQgY29weSAoc2l6ZV90LCBjb25zdCBjaGFyVCAqLCBzaXplX3QpOwog
ICAgaW5saW5lIHZvaWQgbW92ZSAoc2l6ZV90LCBjb25zdCBjaGFyVCAqLCBzaXplX3QpOwogICAg
aW5saW5lIHZvaWQgc2V0ICAoc2l6ZV90LCBjb25zdCBjaGFyVCwgICBzaXplX3QpOwoKICAgIGlu
bGluZSBzdGF0aWMgYm9vbCBleGNlc3Nfc2xvcCAoc2l6ZV90LCBzaXplX3QpOwogICAgaW5saW5l
IHN0YXRpYyBzaXplX3QgZnJvYl9zaXplIChzaXplX3QpOwoKICBwcml2YXRlOgogICAgUmVwICZv
cGVyYXRvcj0gKGNvbnN0IFJlcCAmKTsKICB9OwoKcHVibGljOgogCiAgdHlwZWRlZgkgICB0cmFp
dHMJCXRyYWl0c190eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzOjpjaGFyX3R5cGUJdmFs
dWVfdHlwZTsKICB0eXBlZGVmCSAgIEFsbG9jYXRvcgkJYWxsb2NhdG9yX3R5cGU7CgogIHR5cGVk
ZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7
CiAgdHlwZWRlZiBjaGFyVCYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgY2hhclQmIGNvbnN0
X3JlZmVyZW5jZTsKICB0eXBlZGVmIGNoYXJUKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgY2hh
clQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBwb2ludGVyIGl0ZXJhdG9yOwogIHR5cGVkZWYg
Y29uc3RfcG9pbnRlciBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIDo6cmV2ZXJzZV9pdGVyYXRv
cjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIDo6cmV2ZXJzZV9pdGVyYXRv
cjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICBzdGF0aWMgY29uc3Qg
c2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KC0xKTsKCnByaXZhdGU6CiAg
UmVwICpyZXAgKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxSZXAgKj4oZGF0KSAt
IDE7IH0KICB2b2lkIHJlcHVwIChSZXAgKnApIHsgcmVwICgpLT5yZWxlYXNlICgpOyBkYXQgPSBw
LT5kYXRhICgpOyB9CgpwdWJsaWM6CiAgY29uc3QgY2hhclQqIGRhdGEgKCkgY29uc3QKICAgIHsg
cmV0dXJuIHJlcCAoKS0+ZGF0YSgpOyB9CiAgc2l6ZV90eXBlIGxlbmd0aCAoKSBjb25zdAogICAg
eyByZXR1cm4gcmVwICgpLT5sZW47IH0KICBzaXplX3R5cGUgc2l6ZSAoKSBjb25zdAogICAgeyBy
ZXR1cm4gcmVwICgpLT5sZW47IH0KICBzaXplX3R5cGUgY2FwYWNpdHkgKCkgY29uc3QKICAgIHsg
cmV0dXJuIHJlcCAoKS0+cmVzOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplICgpIGNvbnN0CiAgICB7
IHJldHVybiAobnBvcyAtIDEpL3NpemVvZiAoY2hhclQpOyB9CQkgCiAgYm9vbCBlbXB0eSAoKSBj
b25zdAogICAgeyByZXR1cm4gc2l6ZSAoKSA9PSAwOyB9CgogCiAgYmFzaWNfc3RyaW5nJiBvcGVy
YXRvcj0gKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyKQogICAgewogICAgICBpZiAoJnN0ciAhPSB0
aGlzKSB7IHJlcCAoKS0+cmVsZWFzZSAoKTsgZGF0ID0gc3RyLnJlcCAoKS0+Z3JhYiAoKTsgfQog
ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIGV4cGxpY2l0IGJhc2ljX3N0cmluZyAoKTogZGF0
IChuaWxSZXAuZ3JhYiAoKSkgeyB9CiAgYmFzaWNfc3RyaW5nIChjb25zdCBiYXNpY19zdHJpbmcm
IHN0cik6IGRhdCAoc3RyLnJlcCAoKS0+Z3JhYiAoKSkgeyB9CiAgYmFzaWNfc3RyaW5nIChjb25z
dCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4gPSBucG9zKQog
ICAgOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFzc2lnbiAoc3RyLCBwb3MsIG4pOyB9CiAgYmFz
aWNfc3RyaW5nIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4pCiAgICA6IGRhdCAobmlsUmVw
LmdyYWIgKCkpIHsgYXNzaWduIChzLCBuKTsgfQogIGJhc2ljX3N0cmluZyAoY29uc3QgY2hhclQq
IHMpCiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNzaWduIChzKTsgfQogIGJhc2ljX3N0
cmluZyAoc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsg
YXNzaWduIChuLCBjKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9yPgogICAgYmFz
aWNfc3RyaW5nKElucHV0SXRlcmF0b3IgYmVnaW4sIElucHV0SXRlcmF0b3IgZW5kKQoKCgogICAg
OiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFzc2lnbiAoYmVnaW4sIGVuZCk7IH0KCiAgfmJhc2lj
X3N0cmluZyAoKQogICAgeyByZXAgKCktPnJlbGVhc2UgKCk7IH0KCiAgdm9pZCBzd2FwIChiYXNp
Y19zdHJpbmcgJnMpIHsgY2hhclQgKmQgPSBkYXQ7IGRhdCA9IHMuZGF0OyBzLmRhdCA9IGQ7IH0K
CiAgYmFzaWNfc3RyaW5nJiBhcHBlbmQgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5
cGUgcG9zID0gMCwKCQkJc2l6ZV90eXBlIG4gPSBucG9zKQogICAgeyByZXR1cm4gcmVwbGFjZSAo
bGVuZ3RoICgpLCAwLCBzdHIsIHBvcywgbik7IH0KICBiYXNpY19zdHJpbmcmIGFwcGVuZCAoY29u
c3QgY2hhclQqIHMsIHNpemVfdHlwZSBuKQogICAgeyByZXR1cm4gcmVwbGFjZSAobGVuZ3RoICgp
LCAwLCBzLCBuKTsgfQogIGJhc2ljX3N0cmluZyYgYXBwZW5kIChjb25zdCBjaGFyVCogcykKICAg
IHsgcmV0dXJuIGFwcGVuZCAocywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIGJhc2ljX3N0cmlu
ZyYgYXBwZW5kIChzaXplX3R5cGUgbiwgY2hhclQgYykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGxl
bmd0aCAoKSwgMCwgbiwgYyk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KICAg
IGJhc2ljX3N0cmluZyYgYXBwZW5kKElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3Ig
bGFzdCkKCgoKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGllbmQgKCksIGllbmQgKCksIGZpcnN0LCBs
YXN0KTsgfQoKICBiYXNpY19zdHJpbmcmIGFzc2lnbiAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIs
IHNpemVfdHlwZSBwb3MgPSAwLAoJCQlzaXplX3R5cGUgbiA9IG5wb3MpCiAgICB7IHJldHVybiBy
ZXBsYWNlICgwLCBucG9zLCBzdHIsIHBvcywgbik7IH0KICBiYXNpY19zdHJpbmcmIGFzc2lnbiAo
Y29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBuKQogICAgeyByZXR1cm4gcmVwbGFjZSAoMCwgbnBv
cywgcywgbik7IH0KICBiYXNpY19zdHJpbmcmIGFzc2lnbiAoY29uc3QgY2hhclQqIHMpCiAgICB7
IHJldHVybiBhc3NpZ24gKHMsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBiYXNpY19zdHJpbmcm
IGFzc2lnbiAoc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICB7IHJldHVybiByZXBsYWNlICgwLCBu
cG9zLCBuLCBjKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9yPgogICAgYmFzaWNf
c3RyaW5nJiBhc3NpZ24oSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0KQoK
CgogICAgeyByZXR1cm4gcmVwbGFjZSAoaWJlZ2luICgpLCBpZW5kICgpLCBmaXJzdCwgbGFzdCk7
IH0KCiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcj0gKGNvbnN0IGNoYXJUKiBzKQogICAgeyByZXR1
cm4gYXNzaWduIChzKTsgfQogIGJhc2ljX3N0cmluZyYgb3BlcmF0b3I9IChjaGFyVCBjKQogICAg
eyByZXR1cm4gYXNzaWduICgxLCBjKTsgfQoKICBiYXNpY19zdHJpbmcmIG9wZXJhdG9yKz0gKGNv
bnN0IGJhc2ljX3N0cmluZyYgcmhzKQogICAgeyByZXR1cm4gYXBwZW5kIChyaHMpOyB9CiAgYmFz
aWNfc3RyaW5nJiBvcGVyYXRvcis9IChjb25zdCBjaGFyVCogcykKICAgIHsgcmV0dXJuIGFwcGVu
ZCAocyk7IH0KICBiYXNpY19zdHJpbmcmIG9wZXJhdG9yKz0gKGNoYXJUIGMpCiAgICB7IHJldHVy
biBhcHBlbmQgKDEsIGMpOyB9CgogIGJhc2ljX3N0cmluZyYgaW5zZXJ0IChzaXplX3R5cGUgcG9z
MSwgY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsCgkJCXNpemVfdHlwZSBwb3MyID0gMCwgc2l6ZV90
eXBlIG4gPSBucG9zKQogICAgeyByZXR1cm4gcmVwbGFjZSAocG9zMSwgMCwgc3RyLCBwb3MyLCBu
KTsgfQogIGJhc2ljX3N0cmluZyYgaW5zZXJ0IChzaXplX3R5cGUgcG9zLCBjb25zdCBjaGFyVCog
cywgc2l6ZV90eXBlIG4pCiAgICB7IHJldHVybiByZXBsYWNlIChwb3MsIDAsIHMsIG4pOyB9CiAg
YmFzaWNfc3RyaW5nJiBpbnNlcnQgKHNpemVfdHlwZSBwb3MsIGNvbnN0IGNoYXJUKiBzKQogICAg
eyByZXR1cm4gaW5zZXJ0IChwb3MsIHMsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBiYXNpY19z
dHJpbmcmIGluc2VydCAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICB7
IHJldHVybiByZXBsYWNlIChwb3MsIDAsIG4sIGMpOyB9CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJh
dG9yIHAsIGNoYXJUIGMpCiAgICB7IHNpemVfdHlwZSBfX28gPSBwIC0gaWJlZ2luICgpOwogICAg
ICBpbnNlcnQgKHAgLSBpYmVnaW4gKCksIDEsIGMpOyBzZWxmaXNoICgpOwogICAgICByZXR1cm4g
aWJlZ2luICgpICsgX19vOyB9CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIHAsIHNpemVfdHlw
ZSBuLCBjaGFyVCBjKQogICAgeyBzaXplX3R5cGUgX19vID0gcCAtIGliZWdpbiAoKTsKICAgICAg
aW5zZXJ0IChwIC0gaWJlZ2luICgpLCBuLCBjKTsgc2VsZmlzaCAoKTsKICAgICAgcmV0dXJuIGli
ZWdpbiAoKSArIF9fbzsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9yPgogICAgdm9p
ZCBpbnNlcnQoaXRlcmF0b3IgcCwgSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBs
YXN0KQoKCgogICAgeyByZXBsYWNlIChwLCBwLCBmaXJzdCwgbGFzdCk7IH0KCiAgYmFzaWNfc3Ry
aW5nJiBlcmFzZSAoc2l6ZV90eXBlIHBvcyA9IDAsIHNpemVfdHlwZSBuID0gbnBvcykKICAgIHsg
cmV0dXJuIHJlcGxhY2UgKHBvcywgbiwgKHNpemVfdHlwZSkwLCAoY2hhclQpMCk7IH0KICBpdGVy
YXRvciBlcmFzZShpdGVyYXRvciBwKQogICAgeyBzaXplX3R5cGUgX19vID0gcCAtIGJlZ2luKCk7
CiAgICAgIHJlcGxhY2UgKF9fbywgMSwgKHNpemVfdHlwZSkwLCAoY2hhclQpMCk7IHNlbGZpc2gg
KCk7CiAgICAgIHJldHVybiBpYmVnaW4oKSArIF9fbzsgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJh
dG9yIGYsIGl0ZXJhdG9yIGwpCiAgICB7IHNpemVfdHlwZSBfX28gPSBmIC0gaWJlZ2luKCk7CiAg
ICAgIHJlcGxhY2UgKF9fbywgbC1mLCAoc2l6ZV90eXBlKTAsIChjaGFyVCkwKTtzZWxmaXNoICgp
OwogICAgICByZXR1cm4gaWJlZ2luKCkgKyBfX287IH0KCiAgYmFzaWNfc3RyaW5nJiByZXBsYWNl
IChzaXplX3R5cGUgcG9zMSwgc2l6ZV90eXBlIG4xLCBjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwK
CQkJIHNpemVfdHlwZSBwb3MyID0gMCwgc2l6ZV90eXBlIG4yID0gbnBvcyk7CiAgYmFzaWNfc3Ry
aW5nJiByZXBsYWNlIChzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbjEsIGNvbnN0IGNoYXJUKiBz
LAoJCQkgc2l6ZV90eXBlIG4yKTsKICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKHNpemVfdHlwZSBw
b3MsIHNpemVfdHlwZSBuMSwgY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiByZXBsYWNlIChw
b3MsIG4xLCBzLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNl
IChzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbjEsIHNpemVfdHlwZSBuMiwgY2hhclQgYyk7CiAg
YmFzaWNfc3RyaW5nJiByZXBsYWNlIChzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbiwgY2hhclQg
YykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKHBvcywgbiwgMSwgYyk7IH0KICBiYXNpY19zdHJpbmcm
IHJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVyYXRvciBpMiwgY29uc3QgYmFzaWNfc3RyaW5nJiBz
dHIpCiAgICB7IHJldHVybiByZXBsYWNlIChpMSAtIGliZWdpbiAoKSwgaTIgLSBpMSwgc3RyKTsg
fQogIGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoaXRlcmF0b3IgaTEsIGl0ZXJhdG9yIGkyLCBjb25z
dCBjaGFyVCogcywgc2l6ZV90eXBlIG4pCiAgICB7IHJldHVybiByZXBsYWNlIChpMSAtIGliZWdp
biAoKSwgaTIgLSBpMSwgcywgbik7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9y
IGkxLCBpdGVyYXRvciBpMiwgY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiByZXBsYWNlIChp
MSAtIGliZWdpbiAoKSwgaTIgLSBpMSwgcyk7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0
ZXJhdG9yIGkxLCBpdGVyYXRvciBpMiwgc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICB7IHJldHVy
biByZXBsYWNlIChpMSAtIGliZWdpbiAoKSwgaTIgLSBpMSwgbiwgYyk7IH0KCiAgdGVtcGxhdGU8
Y2xhc3MgSW5wdXRJdGVyYXRvcj4KICAgIGJhc2ljX3N0cmluZyYgcmVwbGFjZShpdGVyYXRvciBp
MSwgaXRlcmF0b3IgaTIsCgkJCSAgSW5wdXRJdGVyYXRvciBqMSwgSW5wdXRJdGVyYXRvciBqMik7
CgoKCgoKcHJpdmF0ZToKICBzdGF0aWMgY2hhclQgZW9zICgpIHsgcmV0dXJuIHRyYWl0czo6ZW9z
ICgpOyB9CiAgdm9pZCB1bmlxdWUgKCkgeyBpZiAocmVwICgpLT5yZWYgPiAxKSBhbGxvYyAobGVu
Z3RoICgpLCB0cnVlKTsgfQogIHZvaWQgc2VsZmlzaCAoKSB7IHVuaXF1ZSAoKTsgcmVwICgpLT5z
ZWxmaXNoID0gdHJ1ZTsgfQoKcHVibGljOgogIGNoYXJUIG9wZXJhdG9yW10gKHNpemVfdHlwZSBw
b3MpIGNvbnN0CiAgICB7CiAgICAgIGlmIChwb3MgPT0gbGVuZ3RoICgpKQoJcmV0dXJuIGVvcyAo
KTsKICAgICAgcmV0dXJuIGRhdGEgKClbcG9zXTsKICAgIH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9y
W10gKHNpemVfdHlwZSBwb3MpCiAgICB7IHNlbGZpc2ggKCk7IHJldHVybiAoKnJlcCAoKSlbcG9z
XTsgfQoKICByZWZlcmVuY2UgYXQgKHNpemVfdHlwZSBwb3MpCiAgICB7CiAgICAgIGRvIHsgaWYg
KCBwb3MgPj0gbGVuZ3RoICgpICkgX19vdXRfb2ZfcmFuZ2UgKCJwb3MgPj0gbGVuZ3RoICgpIik7
IH0gd2hpbGUgKDApIDsKICAgICAgcmV0dXJuICgqdGhpcylbcG9zXTsKICAgIH0KICBjb25zdF9y
ZWZlcmVuY2UgYXQgKHNpemVfdHlwZSBwb3MpIGNvbnN0CiAgICB7CiAgICAgIGRvIHsgaWYgKCBw
b3MgPj0gbGVuZ3RoICgpICkgX19vdXRfb2ZfcmFuZ2UgKCJwb3MgPj0gbGVuZ3RoICgpIik7IH0g
d2hpbGUgKDApIDsKICAgICAgcmV0dXJuIGRhdGEgKClbcG9zXTsKICAgIH0KCnByaXZhdGU6CiAg
dm9pZCB0ZXJtaW5hdGUgKCkgY29uc3QKICAgIHsgdHJhaXRzOjphc3NpZ24gKCgqcmVwICgpKVts
ZW5ndGggKCldLCBlb3MgKCkpOyB9CgpwdWJsaWM6CiAgY29uc3QgY2hhclQqIGNfc3RyICgpIGNv
bnN0CiAgICB7IGlmIChsZW5ndGggKCkgPT0gMCkgcmV0dXJuICIiOyB0ZXJtaW5hdGUgKCk7IHJl
dHVybiBkYXRhICgpOyB9CiAgdm9pZCByZXNpemUgKHNpemVfdHlwZSBuLCBjaGFyVCBjKTsKICB2
b2lkIHJlc2l6ZSAoc2l6ZV90eXBlIG4pCiAgICB7IHJlc2l6ZSAobiwgZW9zICgpKTsgfQogIHZv
aWQgcmVzZXJ2ZSAoc2l6ZV90eXBlKSB7IH0KCiAgc2l6ZV90eXBlIGNvcHkgKGNoYXJUKiBzLCBz
aXplX3R5cGUgbiwgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0OwoKICBzaXplX3R5cGUgZmluZCAo
Y29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyBy
ZXR1cm4gZmluZCAoc3RyLmRhdGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9CiAgc2l6ZV90eXBl
IGZpbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3Q7
CiAgc2l6ZV90eXBlIGZpbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gMCkgY29u
c3QKICAgIHsgcmV0dXJuIGZpbmQgKHMsIHBvcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIHNp
emVfdHlwZSBmaW5kIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3Q7CgogIHNpemVf
dHlwZSByZmluZCAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSBucG9z
KSBjb25zdAogICAgeyByZXR1cm4gcmZpbmQgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxlbmd0aCgp
KTsgfQogIHNpemVfdHlwZSByZmluZCAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNp
emVfdHlwZSBuKSBjb25zdDsKICBzaXplX3R5cGUgcmZpbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXpl
X3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIHJmaW5kIChzLCBwb3MsIHRyYWl0
czo6bGVuZ3RoIChzKSk7IH0KICBzaXplX3R5cGUgcmZpbmQgKGNoYXJUIGMsIHNpemVfdHlwZSBw
b3MgPSBucG9zKSBjb25zdDsKCiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfb2YgKGNvbnN0IGJhc2lj
X3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGZpbmRf
Zmlyc3Rfb2YgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlwZSBm
aW5kX2ZpcnN0X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4p
IGNvbnN0OwogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90
eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVybiBmaW5kX2ZpcnN0X29mIChzLCBwb3MsIHRy
YWl0czo6bGVuZ3RoIChzKSk7IH0KICBzaXplX3R5cGUgZmluZF9maXJzdF9vZiAoY2hhclQgYywg
c2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVybiBmaW5kIChjLCBwb3MpOyB9Cgog
IHNpemVfdHlwZSBmaW5kX2xhc3Rfb2YgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5
cGUgcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIGZpbmRfbGFzdF9vZiAoc3RyLmRhdGEo
KSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9CiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9vZiAoY29uc3Qg
Y2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsKICBzaXplX3R5cGUg
ZmluZF9sYXN0X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0
CiAgICB7IHJldHVybiBmaW5kX2xhc3Rfb2YgKHMsIHBvcywgdHJhaXRzOjpsZW5ndGggKHMpKTsg
fQogIHNpemVfdHlwZSBmaW5kX2xhc3Rfb2YgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MgPSBucG9z
KSBjb25zdAogICAgeyByZXR1cm4gcmZpbmQgKGMsIHBvcyk7IH0KCiAgc2l6ZV90eXBlIGZpbmRf
Zmlyc3Rfbm90X29mIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDAp
IGNvbnN0CiAgICB7IHJldHVybiBmaW5kX2ZpcnN0X25vdF9vZiAoc3RyLmRhdGEoKSwgcG9zLCBz
dHIubGVuZ3RoKCkpOyB9CiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfbm90X29mIChjb25zdCBjaGFy
VCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIHNpemVfdHlwZSBmaW5k
X2ZpcnN0X25vdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAog
ICAgeyByZXR1cm4gZmluZF9maXJzdF9ub3Rfb2YgKHMsIHBvcywgdHJhaXRzOjpsZW5ndGggKHMp
KTsgfQogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X25vdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBv
cyA9IDApIGNvbnN0OwoKICBzaXplX3R5cGUgZmluZF9sYXN0X25vdF9vZiAoY29uc3QgYmFzaWNf
c3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gZmlu
ZF9sYXN0X25vdF9vZiAoc3RyLmRhdGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9CiAgc2l6ZV90
eXBlIGZpbmRfbGFzdF9ub3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXpl
X3R5cGUgbikgY29uc3Q7CiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9ub3Rfb2YgKGNvbnN0IGNoYXJU
KiBzLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIGZpbmRfbGFzdF9u
b3Rfb2YgKHMsIHBvcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSBmaW5kX2xh
c3Rfbm90X29mIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3Q7CgogIGJhc2lj
X3N0cmluZyBzdWJzdHIgKHNpemVfdHlwZSBwb3MgPSAwLCBzaXplX3R5cGUgbiA9IG5wb3MpIGNv
bnN0CiAgICB7IHJldHVybiBiYXNpY19zdHJpbmcgKCp0aGlzLCBwb3MsIG4pOyB9CgogIGludCBj
b21wYXJlIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDAsIHNpemVf
dHlwZSBuID0gbnBvcykgY29uc3Q7CiAgIAogIGludCBjb21wYXJlIChjb25zdCBjaGFyVCogcywg
c2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIGludCBjb21wYXJlIChjb25zdCBj
aGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVybiBjb21wYXJlIChz
LCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KCiAgaXRlcmF0b3IgYmVnaW4gKCkgeyBzZWxm
aXNoICgpOyByZXR1cm4gJigqdGhpcylbMF07IH0KICBpdGVyYXRvciBlbmQgKCkgeyBzZWxmaXNo
ICgpOyByZXR1cm4gJigqdGhpcylbbGVuZ3RoICgpXTsgfQoKcHJpdmF0ZToKICBpdGVyYXRvciBp
YmVnaW4gKCkgY29uc3QgeyByZXR1cm4gJigqcmVwICgpKVswXTsgfQogIGl0ZXJhdG9yIGllbmQg
KCkgY29uc3QgeyByZXR1cm4gJigqcmVwICgpKVtsZW5ndGggKCldOyB9CgpwdWJsaWM6CiAgY29u
c3RfaXRlcmF0b3IgYmVnaW4gKCkgY29uc3QgeyByZXR1cm4gaWJlZ2luICgpOyB9CiAgY29uc3Rf
aXRlcmF0b3IgZW5kICgpIGNvbnN0IHsgcmV0dXJuIGllbmQgKCk7IH0KCiAgcmV2ZXJzZV9pdGVy
YXRvciAgICAgICByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yIChlbmQgKCkpOyB9
CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdAogICAgeyByZXR1cm4gY29u
c3RfcmV2ZXJzZV9pdGVyYXRvciAoZW5kICgpKTsgfQogIHJldmVyc2VfaXRlcmF0b3IgICAgICAg
cmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IgKGJlZ2luICgpKTsgfQogIGNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0
ZXJhdG9yIChiZWdpbiAoKSk7IH0KCnByaXZhdGU6CiAgdm9pZCBhbGxvYyAoc2l6ZV90eXBlIHNp
emUsIGJvb2wgc2F2ZSk7CiAgc3RhdGljIHNpemVfdHlwZSBfZmluZCAoY29uc3QgY2hhclQqIHB0
ciwgY2hhclQgYywgc2l6ZV90eXBlIHhwb3MsIHNpemVfdHlwZSBsZW4pOwogIGlubGluZSBib29s
IGNoZWNrX3JlYWxsb2MgKHNpemVfdHlwZSBzKSBjb25zdDsKCiAgc3RhdGljIFJlcCBuaWxSZXA7
CiAgY2hhclQgKmRhdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywg
Y2xhc3MgQWxsb2NhdG9yPiB0ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KYmFzaWNfc3Ry
aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp
dHMsIEFsbG9jYXRvcj46OgpyZXBsYWNlIChpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIElucHV0
SXRlcmF0b3IgajEsIElucHV0SXRlcmF0b3IgajIpCgoKCgoKewogIGNvbnN0IHNpemVfdHlwZSBs
ZW4gPSBsZW5ndGggKCk7CiAgc2l6ZV90eXBlIHBvcyA9IGkxIC0gaWJlZ2luICgpOwogIHNpemVf
dHlwZSBuMSA9IGkyIC0gaTE7CiAgc2l6ZV90eXBlIG4yID0gajIgLSBqMTsKCiAgZG8geyBpZiAo
IHBvcyA+IGxlbiApIF9fb3V0X29mX3JhbmdlICgicG9zID4gbGVuIik7IH0gd2hpbGUgKDApIDsK
ICBpZiAobjEgPiBsZW4gLSBwb3MpCiAgICBuMSA9IGxlbiAtIHBvczsKICBkbyB7IGlmICggbGVu
IC0gbjEgPiBtYXhfc2l6ZSAoKSAtIG4yICkgX19sZW5ndGhfZXJyb3IgKCJsZW4gLSBuMSA+IG1h
eF9zaXplICgpIC0gbjIiKTsgfSB3aGlsZSAoMCkgOwogIHNpemVfdCBuZXdsZW4gPSBsZW4gLSBu
MSArIG4yOwoKICBpZiAoY2hlY2tfcmVhbGxvYyAobmV3bGVuKSkKICAgIHsKICAgICAgUmVwICpw
ID0gUmVwOjpjcmVhdGUgKG5ld2xlbik7CiAgICAgIHAtPmNvcHkgKDAsIGRhdGEgKCksIHBvcyk7
CiAgICAgIHAtPmNvcHkgKHBvcyArIG4yLCBkYXRhICgpICsgcG9zICsgbjEsIGxlbiAtIChwb3Mg
KyBuMSkpOwogICAgICBmb3IgKDsgajEgIT0gajI7ICsrajEsICsrcG9zKQoJdHJhaXRzOjphc3Np
Z24gKCgqcClbcG9zXSwgKmoxKTsKICAgICAgcmVwdXAgKHApOwogICAgfQogIGVsc2UKICAgIHsK
ICAgICAgcmVwICgpLT5tb3ZlIChwb3MgKyBuMiwgZGF0YSAoKSArIHBvcyArIG4xLCBsZW4gLSAo
cG9zICsgbjEpKTsKICAgICAgZm9yICg7IGoxICE9IGoyOyArK2oxLCArK3BvcykKCXRyYWl0czo6
YXNzaWduICgoKnJlcCAoKSlbcG9zXSwgKmoxKTsKICAgIH0KICByZXAgKCktPmxlbiA9IG5ld2xl
bjsKCiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0
cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB
bGxvY2F0b3I+Cm9wZXJhdG9yKyAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB
bGxvY2F0b3I+JiBsaHMsCgkgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs
bG9jYXRvcj4mIHJocykKewogIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y
PiBzdHIgKGxocyk7CiAgc3RyLmFwcGVuZCAocmhzKTsKICByZXR1cm4gc3RyOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYmFz
aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Cm9wZXJhdG9yKyAoY29uc3QgY2hh
clQqIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBy
aHMpCnsKICBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4gc3RyIChsaHMp
OwogIHN0ci5hcHBlbmQgKHJocyk7CiAgcmV0dXJuIHN0cjsKfQoKdGVtcGxhdGUgPGNsYXNzIGNo
YXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2ljX3N0cmluZyA8
Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPgpvcGVyYXRvcisgKGNoYXJUIGxocywgY29uc3QgYmFz
aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICBiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4gc3RyICgxLCBsaHMpOwogIHN0ci5hcHBlbmQg
KHJocyk7CiAgcmV0dXJuIHN0cjsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp
dHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg
QWxsb2NhdG9yPgpvcGVyYXRvcisgKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg
QWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAgYmFzaWNfc3RyaW5nIDxjaGFy
VCwgdHJhaXRzLCBBbGxvY2F0b3I+IHN0ciAobGhzKTsKICBzdHIuYXBwZW5kIChyaHMpOwogIHJl
dHVybiBzdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB
bGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4K
b3BlcmF0b3IrIChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4m
IGxocywgY2hhclQgcmhzKQp7CiAgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+IHN0ciAobGhzKTsKICBzdHIuYXBwZW5kICgxLCByaHMpOwogIHJldHVybiBzdHI7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGlu
ZSBib29sCm9wZXJhdG9yPT0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPiYgbGhzLAoJICAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA9PSAwKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5l
IGJvb2wKb3BlcmF0b3I9PSAoY29uc3QgY2hhclQqIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKHJocy5jb21wYXJlIChs
aHMpID09IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg
QWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj09IChjb25zdCBiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVy
biAobGhzLmNvbXBhcmUgKHJocykgPT0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xh
c3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yIT0gKGNvbnN0
IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y
PiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFyZSAobGhzKSAhPSAwKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wK
b3BlcmF0b3IhPSAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMpCnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpICE9
IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh
dG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjwgKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPiYgbGhzLAoJICAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA8IDAp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y
PgppbmxpbmUgYm9vbApvcGVyYXRvcjwgKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29t
cGFyZSAobGhzKSA+IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywg
Y2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjwgKGNvbnN0IGJhc2ljX3N0cmlu
ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAg
cmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA8IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQs
IGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj4gKGNv
bnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh
dG9yPiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFyZSAobGhzKSA8IDApOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9v
bApvcGVyYXRvcj4gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y
PiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA+
IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh
dG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjw9IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNp
Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAocmhz
LmNvbXBhcmUgKGxocykgPj0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJh
aXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPD0gKGNvbnN0IGJhc2lj
X3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhz
KQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA8PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0
b3I+PSAoY29uc3QgY2hhclQqIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz
LCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKHJocy5jb21wYXJlIChsaHMpIDw9IDApOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpp
bmxpbmUgYm9vbApvcGVyYXRvcj49IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs
IEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBh
cmUgKHJocykgPj0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBj
bGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yIT0gKGNvbnN0IGJhc2ljX3N0cmlu
ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAoJICAgIGNvbnN0IGJhc2ljX3N0cmlu
ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFy
ZSAocmhzKSAhPSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNs
YXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+IChjb25zdCBiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgIGNvbnN0IGJhc2ljX3N0cmluZyA8
Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAo
cmhzKSA+IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg
QWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjw9IChjb25zdCBiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJo
cykgPD0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB
bGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPj0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hh
clQsIHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAoJICAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hh
clQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhz
KSA+PSAwKTsKfQoKY2xhc3MgaXN0cmVhbTsgY2xhc3Mgb3N0cmVhbTsKdGVtcGxhdGUgPGNsYXNz
IGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4gaXN0cmVhbSYKb3BlcmF0b3I+
PiAoaXN0cmVhbSYsIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYpOwp0
ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPiBvc3Ry
ZWFtJgpvcGVyYXRvcjw8IChvc3RyZWFtJiwgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh
aXRzLCBBbGxvY2F0b3I+Jik7CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBj
bGFzcyBBbGxvY2F0b3I+IGlzdHJlYW0mCmdldGxpbmUgKGlzdHJlYW0mLCBiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mLCBjaGFyVCBkZWxpbSA9ICdcbicpOwoKfSAgCgoj
IDEgIi9ob21lL3R2L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dl
cnBjLWlibS1haXg0LjIuMS4wLzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9i
YXN0cmluZy5jYyIgMSAzCiAKIAoKIAogCiAKIAogCgogCiAKIAogCgogCiAKIAoKIAogCiAKIAog
CgogCiAKCmV4dGVybiAiQysrIiB7CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRz
LCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSB2b2lkICogYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh
aXRzLCBBbGxvY2F0b3I+OjpSZXA6OgpvcGVyYXRvciBuZXcgKHNpemVfdCBzLCBzaXplX3QgZXh0
cmEpCnsKICByZXR1cm4gQWxsb2NhdG9yOjphbGxvY2F0ZShzICsgZXh0cmEgKiBzaXplb2YgKGNo
YXJUKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxv
Y2F0b3I+CmlubGluZSB2b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y
Pjo6UmVwOjoKb3BlcmF0b3IgZGVsZXRlICh2b2lkICogcHRyKQp7CiAgQWxsb2NhdG9yOjpkZWFs
bG9jYXRlKHB0ciwgc2l6ZW9mKFJlcCkgKwoJCQlyZWludGVycHJldF9jYXN0PFJlcCAqPihwdHIp
LT5yZXMgKgoJCQlzaXplb2YgKGNoYXJUKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xh
c3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBzaXplX3QgYmFzaWNfc3RyaW5nIDxj
aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6Ogpmcm9iX3NpemUgKHNpemVfdCBzKQp7CiAg
c2l6ZV90IGkgPSAxNjsKICB3aGlsZSAoaSA8IHMpIGkgKj0gMjsKICByZXR1cm4gaTsKfQoKdGVt
cGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5l
IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwICoKYmFzaWNfc3Ry
aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6OgpjcmVhdGUgKHNpemVfdCBleHRy
YSkKewogIGV4dHJhID0gZnJvYl9zaXplIChleHRyYSArIDEpOwogIFJlcCAqcCA9IG5ldyAoZXh0
cmEpIFJlcDsKICBwLT5yZXMgPSBleHRyYTsKICBwLT5yZWYgPSAxOwogIHAtPnNlbGZpc2ggPSBm
YWxzZTsKICByZXR1cm4gcDsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMs
IGNsYXNzIEFsbG9jYXRvcj4KY2hhclQgKiBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs
bG9jYXRvcj46OlJlcDo6CmNsb25lICgpCnsKICBSZXAgKnAgPSBSZXA6OmNyZWF0ZSAobGVuKTsK
ICBwLT5jb3B5ICgwLCBkYXRhICgpLCBsZW4pOwogIHAtPmxlbiA9IGxlbjsKICByZXR1cm4gcC0+
ZGF0YSAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs
bG9jYXRvcj4KaW5saW5lIGJvb2wgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+OjpSZXA6OgpleGNlc3Nfc2xvcCAoc2l6ZV90IHMsIHNpemVfdCByKQp7CiAgcmV0dXJuIDIg
KiAocyA8PSAxNiA/IDE2IDogcykgPCByOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNz
IHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbCBiYXNpY19zdHJpbmcgPGNoYXJU
LCB0cmFpdHMsIEFsbG9jYXRvcj46OgpjaGVja19yZWFsbG9jIChiYXNpY19zdHJpbmc6OnNpemVf
dHlwZSBzKSBjb25zdAp7CiAgcyArPSBzaXplb2YgKGNoYXJUKTsKICByZXAgKCktPnNlbGZpc2gg
PSBmYWxzZTsKICByZXR1cm4gKHJlcCAoKS0+cmVmID4gMQoJICB8fCBzID4gY2FwYWNpdHkgKCkK
CSAgfHwgUmVwOjpleGNlc3Nfc2xvcCAocywgY2FwYWNpdHkgKCkpKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4Kdm9pZCBiYXNpY19zdHJp
bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgphbGxvYyAoYmFzaWNfc3RyaW5nOjpzaXpl
X3R5cGUgc2l6ZSwgYm9vbCBzYXZlKQp7CiAgaWYgKCEgY2hlY2tfcmVhbGxvYyAoc2l6ZSkpCiAg
ICByZXR1cm47CgogIFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChzaXplKTsKCiAgaWYgKHNhdmUpCiAg
ICB7CiAgICAgIHAtPmNvcHkgKDAsIGRhdGEgKCksIGxlbmd0aCAoKSk7CiAgICAgIHAtPmxlbiA9
IGxlbmd0aCAoKTsKICAgIH0KICBlbHNlCiAgICBwLT5sZW4gPSAwOwoKICByZXB1cCAocCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJh
c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYKYmFzaWNfc3RyaW5nIDxjaGFy
VCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmVwbGFjZSAoc2l6ZV90eXBlIHBvczEsIHNpemVfdHlw
ZSBuMSwKCSBjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvczIsIHNpemVfdHlw
ZSBuMikKewogIGNvbnN0IHNpemVfdCBsZW4yID0gc3RyLmxlbmd0aCAoKTsKCiAgaWYgKHBvczEg
PT0gMCAmJiBuMSA+PSBsZW5ndGggKCkgJiYgcG9zMiA9PSAwICYmIG4yID49IGxlbjIpCiAgICBy
ZXR1cm4gb3BlcmF0b3I9IChzdHIpOwoKICBkbyB7IGlmICggcG9zMiA+IGxlbjIgKSBfX291dF9v
Zl9yYW5nZSAoInBvczIgPiBsZW4yIik7IH0gd2hpbGUgKDApIDsKCiAgaWYgKG4yID4gbGVuMiAt
IHBvczIpCiAgICBuMiA9IGxlbjIgLSBwb3MyOwoKICByZXR1cm4gcmVwbGFjZSAocG9zMSwgbjEs
IHN0ci5kYXRhICgpICsgcG9zMiwgbjIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNz
IHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgdm9pZCBiYXNpY19zdHJpbmcgPGNoYXJU
LCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CmNvcHkgKHNpemVfdCBwb3MsIGNvbnN0IGNoYXJU
ICpzLCBzaXplX3QgbikKewogIGlmIChuKQogICAgdHJhaXRzOjpjb3B5IChkYXRhICgpICsgcG9z
LCBzLCBuKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs
bG9jYXRvcj4KaW5saW5lIHZvaWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0
b3I+OjpSZXA6Ogptb3ZlIChzaXplX3QgcG9zLCBjb25zdCBjaGFyVCAqcywgc2l6ZV90IG4pCnsK
ICBpZiAobikKICAgIHRyYWl0czo6bW92ZSAoZGF0YSAoKSArIHBvcywgcywgbik7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0
cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh
aXRzLCBBbGxvY2F0b3I+OjoKcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBj
b25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4yKQp7CiAgY29uc3Qgc2l6ZV90eXBlIGxlbiA9IGxl
bmd0aCAoKTsKICBkbyB7IGlmICggcG9zID4gbGVuICkgX19vdXRfb2ZfcmFuZ2UgKCJwb3MgPiBs
ZW4iKTsgfSB3aGlsZSAoMCkgOwogIGlmIChuMSA+IGxlbiAtIHBvcykKICAgIG4xID0gbGVuIC0g
cG9zOwogIGRvIHsgaWYgKCBsZW4gLSBuMSA+IG1heF9zaXplICgpIC0gbjIgKSBfX2xlbmd0aF9l
cnJvciAoImxlbiAtIG4xID4gbWF4X3NpemUgKCkgLSBuMiIpOyB9IHdoaWxlICgwKSA7CiAgc2l6
ZV90IG5ld2xlbiA9IGxlbiAtIG4xICsgbjI7CgogIGlmIChjaGVja19yZWFsbG9jIChuZXdsZW4p
KQogICAgewogICAgICBSZXAgKnAgPSBSZXA6OmNyZWF0ZSAobmV3bGVuKTsKICAgICAgcC0+Y29w
eSAoMCwgZGF0YSAoKSwgcG9zKTsKICAgICAgcC0+Y29weSAocG9zICsgbjIsIGRhdGEgKCkgKyBw
b3MgKyBuMSwgbGVuIC0gKHBvcyArIG4xKSk7CiAgICAgIHAtPmNvcHkgKHBvcywgcywgbjIpOwog
ICAgICByZXB1cCAocCk7CiAgICB9CiAgZWxzZQogICAgewogICAgICByZXAgKCktPm1vdmUgKHBv
cyArIG4yLCBkYXRhICgpICsgcG9zICsgbjEsIGxlbiAtIChwb3MgKyBuMSkpOwogICAgICByZXAg
KCktPmNvcHkgKHBvcywgcywgbjIpOwogICAgfQogIHJlcCAoKS0+bGVuID0gbmV3bGVuOwoKICBy
ZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFz
cyBBbGxvY2F0b3I+CmlubGluZSB2b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPjo6UmVwOjoKc2V0IChzaXplX3QgcG9zLCBjb25zdCBjaGFyVCBjLCBzaXplX3QgbikK
ewogIHRyYWl0czo6c2V0ICAoZGF0YSAoKSArIHBvcywgYywgbik7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hh
clQsIHRyYWl0cywgQWxsb2NhdG9yPiYgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxv
Y2F0b3I+OjoKcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBzaXplX3R5cGUg
bjIsIGNoYXJUIGMpCnsKICBjb25zdCBzaXplX3QgbGVuID0gbGVuZ3RoICgpOwogIGRvIHsgaWYg
KCBwb3MgPiBsZW4gKSBfX291dF9vZl9yYW5nZSAoInBvcyA+IGxlbiIpOyB9IHdoaWxlICgwKSA7
CiAgaWYgKG4xID4gbGVuIC0gcG9zKQogICAgbjEgPSBsZW4gLSBwb3M7CiAgZG8geyBpZiAoIGxl
biAtIG4xID4gbWF4X3NpemUgKCkgLSBuMiApIF9fbGVuZ3RoX2Vycm9yICgibGVuIC0gbjEgPiBt
YXhfc2l6ZSAoKSAtIG4yIik7IH0gd2hpbGUgKDApIDsKICBzaXplX3QgbmV3bGVuID0gbGVuIC0g
bjEgKyBuMjsKCiAgaWYgKGNoZWNrX3JlYWxsb2MgKG5ld2xlbikpCiAgICB7CiAgICAgIFJlcCAq
cCA9IFJlcDo6Y3JlYXRlIChuZXdsZW4pOwogICAgICBwLT5jb3B5ICgwLCBkYXRhICgpLCBwb3Mp
OwogICAgICBwLT5jb3B5IChwb3MgKyBuMiwgZGF0YSAoKSArIHBvcyArIG4xLCBsZW4gLSAocG9z
ICsgbjEpKTsKICAgICAgcC0+c2V0ICAocG9zLCBjLCBuMik7CiAgICAgIHJlcHVwIChwKTsKICAg
IH0KICBlbHNlCiAgICB7CiAgICAgIHJlcCAoKS0+bW92ZSAocG9zICsgbjIsIGRhdGEgKCkgKyBw
b3MgKyBuMSwgbGVuIC0gKHBvcyArIG4xKSk7CiAgICAgIHJlcCAoKS0+c2V0ICAocG9zLCBjLCBu
Mik7CiAgICB9CiAgcmVwICgpLT5sZW4gPSBuZXdsZW47CgogIHJldHVybiAqdGhpczsKfQoKdGVt
cGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4Kdm9pZCBi
YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpyZXNpemUgKHNpemVfdHlw
ZSBuLCBjaGFyVCBjKQp7CiAgZG8geyBpZiAoIG4gPiBtYXhfc2l6ZSAoKSApIF9fbGVuZ3RoX2Vy
cm9yICgibiA+IG1heF9zaXplICgpIik7IH0gd2hpbGUgKDApIDsKCiAgaWYgKG4gPiBsZW5ndGgg
KCkpCiAgICBhcHBlbmQgKG4gLSBsZW5ndGggKCksIGMpOwogIGVsc2UKICAgIGVyYXNlIChuKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4K
YmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNf
c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKY29weSAoY2hhclQqIHMsIHNpemVf
dHlwZSBuLCBzaXplX3R5cGUgcG9zKSBjb25zdAp7CiAgZG8geyBpZiAoIHBvcyA+IGxlbmd0aCAo
KSApIF9fb3V0X29mX3JhbmdlICgicG9zID4gbGVuZ3RoICgpIik7IH0gd2hpbGUgKDApIDsKCiAg
aWYgKG4gPiBsZW5ndGggKCkgLSBwb3MpCiAgICBuID0gbGVuZ3RoICgpIC0gcG9zOwoKICB0cmFp
dHM6OmNvcHkgKHMsIGRhdGEgKCkgKyBwb3MsIG4pOwogIHJldHVybiBuOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJU
LCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBv
cywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBzaXplX3QgeHBvcyA9IHBvczsKICBmb3IgKDsgeHBv
cyArIG4gPD0gbGVuZ3RoICgpOyArK3hwb3MpCiAgICBpZiAodHJhaXRzOjplcSAoZGF0YSAoKSBb
eHBvc10sICpzKQoJJiYgdHJhaXRzOjpjb21wYXJlIChkYXRhICgpICsgeHBvcywgcywgbikgPT0g
MCkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBj
aGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcg
PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJU
LCB0cmFpdHMsIEFsbG9jYXRvcj46OgpfZmluZCAoY29uc3QgY2hhclQqIHB0ciwgY2hhclQgYywg
c2l6ZV90eXBlIHhwb3MsIHNpemVfdHlwZSBsZW4pCnsKICBmb3IgKDsgeHBvcyA8IGxlbjsgKyt4
cG9zKQogICAgaWYgKHRyYWl0czo6ZXEgKHB0ciBbeHBvc10sIGMpKQogICAgICByZXR1cm4geHBv
czsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMs
IGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+
OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmlu
ZCAoY2hhclQgYywgc2l6ZV90eXBlIHBvcykgY29uc3QKewogIHJldHVybiBfZmluZCAoZGF0YSAo
KSwgYywgcG9zLCBsZW5ndGggKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRy
YWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j
YXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46
OgpyZmluZCAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25z
dAp7CiAgaWYgKG4gPiBsZW5ndGggKCkpCiAgICByZXR1cm4gbnBvczsKCiAgc2l6ZV90IHhwb3Mg
PSBsZW5ndGggKCkgLSBuOwogIGlmICh4cG9zID4gcG9zKQogICAgeHBvcyA9IHBvczsKCiAgZm9y
ICgrK3hwb3M7IHhwb3MtLSA+IDA7ICkKICAgIGlmICh0cmFpdHM6OmVxIChkYXRhICgpIFt4cG9z
XSwgKnMpCgkmJiB0cmFpdHM6OmNvbXBhcmUgKGRhdGEgKCkgKyB4cG9zLCBzLCBuKSA9PSAwKQog
ICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJU
LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh
aXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB
bGxvY2F0b3I+OjoKcmZpbmQgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MpIGNvbnN0CnsKICBpZiAo
MSA+IGxlbmd0aCAoKSkKICAgIHJldHVybiBucG9zOwoKICBzaXplX3QgeHBvcyA9IGxlbmd0aCAo
KSAtIDE7CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9zOwoKICBmb3IgKCsreHBvczsg
eHBvcy0tID4gMDsgKQogICAgaWYgKHRyYWl0czo6ZXEgKGRhdGEgKCkgW3hwb3NdLCBjKSkKICAg
ICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwg
Y2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0
cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs
b2NhdG9yPjo6CmZpbmRfZmlyc3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBz
aXplX3R5cGUgbikgY29uc3QKewogIHNpemVfdCB4cG9zID0gcG9zOwogIGZvciAoOyB4cG9zIDwg
bGVuZ3RoICgpOyArK3hwb3MpCiAgICBpZiAoX2ZpbmQgKHMsIGRhdGEgKCkgW3hwb3NdLCAwLCBu
KSAhPSBucG9zKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUg
PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5n
IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFy
VCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZF9sYXN0X29mIChjb25zdCBjaGFyVCogcywgc2l6
ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBpZiAobGVuZ3RoKCkgPT0gMCkKICAg
IHJldHVybiBucG9zOwogIHNpemVfdCB4cG9zID0gbGVuZ3RoICgpIC0gMTsKICBpZiAoeHBvcyA+
IHBvcykKICAgIHhwb3MgPSBwb3M7CiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7KQogICAgaWYg
KF9maW5kIChzLCBkYXRhICgpIFt4cG9zXSwgMCwgbikgIT0gbnBvcykKICAgICAgcmV0dXJuIHhw
b3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRz
LCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y
Pjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZp
bmRfZmlyc3Rfbm90X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBl
IG4pIGNvbnN0CnsKICBzaXplX3QgeHBvcyA9IHBvczsKICBmb3IgKDsgeHBvcyA8IGxlbmd0aCAo
KTsgKyt4cG9zKQogICAgaWYgKF9maW5kIChzLCBkYXRhICgpIFt4cG9zXSwgMCwgbikgPT0gbnBv
cykKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBj
aGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQs
IHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0
cywgQWxsb2NhdG9yPjo6CmZpbmRfZmlyc3Rfbm90X29mIChjaGFyVCBjLCBzaXplX3R5cGUgcG9z
KSBjb25zdAp7CiAgc2l6ZV90IHhwb3MgPSBwb3M7CiAgZm9yICg7IHhwb3MgPCBsZW5ndGggKCk7
ICsreHBvcykKICAgIGlmICh0cmFpdHM6Om5lIChkYXRhICgpIFt4cG9zXSwgYykpCiAgICAgIHJl
dHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNz
IHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs
bG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv
cj46OgpmaW5kX2xhc3Rfbm90X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6
ZV90eXBlIG4pIGNvbnN0CnsKICBpZiAobGVuZ3RoKCkgPT0gMCkKICAgIHJldHVybiBucG9zOwog
IHNpemVfdCB4cG9zID0gbGVuZ3RoICgpIC0gMTsKICBpZiAoeHBvcyA+IHBvcykKICAgIHhwb3Mg
PSBwb3M7CiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7KQogICAgaWYgKF9maW5kIChzLCBkYXRh
ICgpIFt4cG9zXSwgMCwgbikgPT0gbnBvcykKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5w
b3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0
b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJh
c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZpbmRfbGFzdF9ub3Rfb2Yg
KGNoYXJUIGMsIHNpemVfdHlwZSBwb3MpIGNvbnN0CnsKICBpZiAobGVuZ3RoKCkgPT0gMCkKICAg
IHJldHVybiBucG9zOwogIHNpemVfdCB4cG9zID0gbGVuZ3RoICgpIC0gMTsKICBpZiAoeHBvcyA+
IHBvcykKICAgIHhwb3MgPSBwb3M7CiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7KQogICAgaWYg
KHRyYWl0czo6bmUgKGRhdGEgKCkgW3hwb3NdLCBjKSkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0
dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB
bGxvY2F0b3I+CmludCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46Ogpj
b21wYXJlIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBl
IG4pIGNvbnN0CnsKICBkbyB7IGlmICggcG9zID4gbGVuZ3RoICgpICkgX19vdXRfb2ZfcmFuZ2Ug
KCJwb3MgPiBsZW5ndGggKCkiKTsgfSB3aGlsZSAoMCkgOwoKICBzaXplX3QgcmxlbiA9IGxlbmd0
aCAoKSAtIHBvczsKICBpZiAocmxlbiA+IG4pCiAgICBybGVuID0gbjsKICBpZiAocmxlbiA+IHN0
ci5sZW5ndGggKCkpCiAgICBybGVuID0gc3RyLmxlbmd0aCAoKTsKICBpbnQgciA9IHRyYWl0czo6
Y29tcGFyZSAoZGF0YSAoKSArIHBvcywgc3RyLmRhdGEgKCksIHJsZW4pOwogIGlmIChyICE9IDAp
CiAgICByZXR1cm4gcjsKICBpZiAocmxlbiA9PSBuKQogICAgcmV0dXJuIDA7CiAgcmV0dXJuIChs
ZW5ndGggKCkgLSBwb3MpIC0gc3RyLmxlbmd0aCAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJU
LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW50IGJhc2ljX3N0cmluZyA8Y2hhclQs
IHRyYWl0cywgQWxsb2NhdG9yPjo6CmNvbXBhcmUgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUg
cG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogIGRvIHsgaWYgKCBwb3MgPiBsZW5ndGggKCkgKSBf
X291dF9vZl9yYW5nZSAoInBvcyA+IGxlbmd0aCAoKSIpOyB9IHdoaWxlICgwKSA7CgogIHNpemVf
dCBybGVuID0gbGVuZ3RoICgpIC0gcG9zOwogIGlmIChybGVuID4gbikKICAgIHJsZW4gPSBuOwog
IGludCByID0gdHJhaXRzOjpjb21wYXJlIChkYXRhICgpICsgcG9zLCBzLCBybGVuKTsKICBpZiAo
ciAhPSAwKQogICAgcmV0dXJuIHI7CiAgcmV0dXJuIChsZW5ndGggKCkgLSBwb3MpIC0gbjsKfQoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpp
c3RyZWFtICYKb3BlcmF0b3I+PiAoaXN0cmVhbSAmaXMsIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy
YWl0cywgQWxsb2NhdG9yPiAmcykKewogIGludCB3ID0gaXMud2lkdGggKDApOwogIGlmIChpcy5p
cGZ4MCAoKSkKICAgIHsKICAgICAgcmVnaXN0ZXIgc3RyZWFtYnVmICpzYiA9IGlzLnJkYnVmICgp
OwogICAgICBzLnJlc2l6ZSAoMCk7CiAgICAgIHdoaWxlICgxKQoJewoJICBpbnQgY2ggPSBzYi0+
c2J1bXBjICgpOwoJICBpZiAoY2ggPT0gKC0xKSApCgkgICAgewoJICAgICAgaXMuc2V0c3RhdGUg
KGlvczo6ZW9mYml0KTsKCSAgICAgIGJyZWFrOwoJICAgIH0KCSAgZWxzZSBpZiAodHJhaXRzOjpp
c19kZWwgKGNoKSkKCSAgICB7CgkgICAgICBzYi0+c3VuZ2V0YyAoKTsKCSAgICAgIGJyZWFrOwoJ
ICAgIH0KCSAgcyArPSBzdGF0aWNfY2FzdDxjaGFyVD4gKGNoKTsKCSAgaWYgKC0tdyA9PSAxKQoJ
ICAgIGJyZWFrOwoJfQogICAgfQoKICBpcy5pc2Z4ICgpOwogIGlmIChzLmxlbmd0aCAoKSA9PSAw
KQogICAgaXMuc2V0c3RhdGUgKGlvczo6ZmFpbGJpdCk7CgogIHJldHVybiBpczsKfQoKdGVtcGxh
dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4Kb3N0cmVhbSAm
Cm9wZXJhdG9yPDwgKG9zdHJlYW0gJm8sIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0
cywgQWxsb2NhdG9yPiYgcykKewogIHJldHVybiBvLndyaXRlIChzLmRhdGEgKCksIHMubGVuZ3Ro
ICgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j
YXRvcj4KaXN0cmVhbSYKZ2V0bGluZSAoaXN0cmVhbSAmaXMsIGJhc2ljX3N0cmluZyA8Y2hhclQs
IHRyYWl0cywgQWxsb2NhdG9yPiYgcywgY2hhclQgZGVsaW0pCnsKICBpZiAoaXMuaXBmeDEgKCkp
CiAgICB7CiAgICAgIF9HX3NpemVfdCAgY291bnQgPSAwOwogICAgICBzdHJlYW1idWYgKnNiID0g
aXMucmRidWYgKCk7CiAgICAgIHMucmVzaXplICgwKTsKCiAgICAgIHdoaWxlICgxKQoJewoJICBp
bnQgY2ggPSBzYi0+c2J1bXBjICgpOwoJICBpZiAoY2ggPT0gKC0xKSApCgkgICAgewoJICAgICAg
aXMuc2V0c3RhdGUgKGNvdW50ID09IDAKCQkJICAgPyAoaW9zOjpmYWlsYml0fGlvczo6ZW9mYml0
KQoJCQkgICA6IGlvczo6ZW9mYml0KTsKCSAgICAgIGJyZWFrOwoJICAgIH0KCgkgICsrY291bnQ7
CgoJICBpZiAoY2ggPT0gZGVsaW0pCgkgICAgYnJlYWs7CgoJICBzICs9IHN0YXRpY19jYXN0PGNo
YXJUPiAoY2gpOwoKCSAgaWYgKHMubGVuZ3RoICgpID09IHMubnBvcyAtIDEpCgkgICAgewoJICAg
ICAgaXMuc2V0c3RhdGUgKGlvczo6ZmFpbGJpdCk7CgkgICAgICBicmVhazsKCSAgICB9Cgl9CiAg
ICB9CgogICAKICAgCiAgaXMuaXNmeCAoKTsKCiAgcmV0dXJuIGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNo
YXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcApiYXNpY19zdHJpbmc8Y2hhclQsIHRyYWl0cywg
QWxsb2NhdG9yPjo6bmlsUmVwID0geyAwLCAwLCAxLCBmYWxzZSB9OwoKdGVtcGxhdGUgPGNsYXNz
IGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KY29uc3QgYmFzaWNfc3RyaW5n
IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFy
VCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpucG9zOwoKfSAgCiMgNjUyICIvaG9tZS90di90b29scy9n
bnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8y
Ljk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgMiAzCgoKCiMg
NiAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2Vy
cGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyaW5n
IiAyIDMKCgpleHRlcm4gIkMrKyIgewp0eXBlZGVmIGJhc2ljX3N0cmluZyA8Y2hhcj4gc3RyaW5n
OwogCn0gIAoKCiMgMiAidHYyNzM3LmN4eCIgMgoKIyAxICIvaG9tZS90di90b29scy9nbnUvcnM2
MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIv
Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9tYXAiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKIyAxICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2dj
Yy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9n
KystMy9zdGxfdHJlZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2Mt
Mi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yLy4uLy4uLy4u
Ly4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKIyAxICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2dj
Yy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfcGFpci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKIAoKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBw
YWlyIHsKICB0eXBlZGVmIF9UMSBmaXJzdF90eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90eXBl
OwoKICBfVDEgZmlyc3Q7CiAgX1QyIHNlY29uZDsKICBwYWlyKCkgOiBmaXJzdChfVDEoKSksIHNl
Y29uZChfVDIoKSkge30KICBwYWlyKGNvbnN0IF9UMSYgX19hLCBjb25zdCBfVDImIF9fYikgOiBm
aXJzdChfX2EpLCBzZWNvbmQoX19iKSB7fQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9VMSwgY2xhc3Mg
X1UyPgogIHBhaXIoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9fcCkgOiBmaXJzdChfX3AuZmlyc3Qp
LCBzZWNvbmQoX19wLnNlY29uZCkge30KCn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBf
VDI+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29u
c3QgcGFpcjxfVDEsIF9UMj4mIF9feSkKeyAKICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJz
dCAmJiBfX3guc2Vjb25kID09IF9feS5zZWNvbmQ7IAp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBj
bGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194
LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7IAogIHJldHVybiBfX3guZmlyc3QgPCBfX3ku
Zmlyc3QgfHwgCiAgICAgICAgICghKF9feS5maXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNlY29u
ZCA8IF9feS5zZWNvbmQpOyAKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxp
bmUgcGFpcjxfVDEsIF9UMj4gbWFrZV9wYWlyKGNvbnN0IF9UMSYgX194LCBjb25zdCBfVDImIF9f
eSkKewogIHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCiAKCgoKIAogCiAKIyA0
MiAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2Vy
cGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2Fs
Z29iYXNlLmgiIDIgMwoKCgojIDEgIi9ob21lL3R2L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUu
Mi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjIuMS4wLzIuOTUuMi8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL3R5cGVfdHJhaXRzLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnN0cnVjdCBfX3RydWVfdHlwZSB7Cn07Cgpz
dHJ1Y3QgX19mYWxzZV90eXBlIHsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX3R5
cGVfdHJhaXRzIHsgCiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgIHRoaXNfZHVtbXlfbWVtYmVy
X211c3RfYmVfZmlyc3Q7CiAgICAgICAgICAgICAgICAgICAgCgoKCgoKICAgIAoKCgoKCgoKCiAK
CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl
cmF0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7
CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKCgogCiAKIAoKCgp0
ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxib29sPiB7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSAgICBpc19QT0RfdHlwZTsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8
Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50
X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+
ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
ICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNp
Z25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVs
dF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5
X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2ln
bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVz
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCgoKdGVt
cGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8d2NoYXJfdD4gewogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgICAgaXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRz
PHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1l
bnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRl
PD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIHNob3J0PiB7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRz
PGludD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50
X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+
ICBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
ICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8bG9u
Zz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w
ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBz
dHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAg
ICBpc19QT0RfdHlwZTsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8bG9u
ZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1l
bnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRl
PD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4gewogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVf
dHJhaXRzPGZsb2F0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVm
YXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9j
b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fz
c2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxf
ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRl
bXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGRvdWJsZT4gewogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxs
b25nIGRvdWJsZT4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1
bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29w
eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3Np
Z25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rl
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CgoKCnRl
bXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzPF9UcCo+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKIyAyOTUgIi9ob21lL3R2L3Rvb2xzL2dudS9y
czYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjIuMS4wLzIuOTUu
Mi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3R5cGVfdHJhaXRzLmgiIDMKCgoKIAogCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPiBzdHJ1Y3QgX0lzX2ludGVnZXIgewogIHR5cGVkZWYgX19mYWxzZV90
eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPGJvb2w+
IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiAgc3Ry
dWN0IF9Jc19pbnRlZ2VyPGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK
fTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxzaWduZWQgY2hhcj4gewogIHR5cGVk
ZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRl
Z2VyPHVuc2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsK
CgoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHdjaGFyX3Q+IHsKICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2Vy
PHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+
ICBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgc2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxpbnQ+IHsK
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBf
SXNfaW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3Jh
bDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxsb25nPiB7CiAgdHlwZWRlZiBf
X3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8
dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0
ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5z
aWduZWQgbG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07CgoK
CgoKIAogCiAKIyA0NSAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9n
Y2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUv
ZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCgoKIyAxICIvaG9tZS90di90b29scy9nbnUvcnM2
MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIv
aW5jbHVkZS9saW1pdHMuaCIgMSAzIDQKIAoKCiAKCgoKCgogCiMgMSAiL2hvbWUvdHYvdG9vbHMv
Z251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAv
Mi45NS4yL2luY2x1ZGUvc3lzbGltaXRzLmgiIDEgMyA0CiAKCgoKCgojIDEgIi9ob21lL3R2L3Rv
b2xzL2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjIu
MS4wLzIuOTUuMi9pbmNsdWRlL2xpbWl0cy5oIiAxIDMgNAogCgoKIAoKIyAxMTQgIi9ob21lL3R2
L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0
LjIuMS4wLzIuOTUuMi9pbmNsdWRlL2xpbWl0cy5oIiAzIDQKCgoKIyAxICIvdXNyL2luY2x1ZGUv
bGltaXRzLmgiIDEgMyA0CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCgoKCgoKCgoK
CgoKCgojIDExNyAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2Mt
bGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yL2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0
CgoKCgojIDcgIi9ob21lL3R2L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxp
Yi9wb3dlcnBjLWlibS1haXg0LjIuMS4wLzIuOTUuMi9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMg
NAoKCiMgMTEgIi9ob21lL3R2L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxp
Yi9wb3dlcnBjLWlibS1haXg0LjIuMS4wLzIuOTUuMi9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAoK
CgoKCiAKCgoKIAoKCgogCgoKCgogCgoKCgoKIAoKCgogCgoKCgoKCgoKCgoKCiAKCiAKCgoKCiAK
CgoKIAoKCgoKCgoKCiAKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgoKCgoKCiAKCgoKCgoK
IAoKCgoKCgoKCgojIDQ5ICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGli
L2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKIyAxICIvaG9tZS90di90b29scy9nbnUvcnM2
MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIv
aW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzNDIgIi9ob21lL3R2L3Rvb2xzL2dudS9yczYwMDAv
Z2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjIuMS4wLzIuOTUuMi9pbmNs
dWRlL3N0ZGRlZi5oIiAzIDQKCiMgNTEgIi9ob21lL3R2L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIu
OTUuMi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjIuMS4wLzIuOTUuMi8uLi8uLi8uLi8u
Li9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL2hvbWUvdHYvdG9vbHMv
Z251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAv
Mi45NS4yL2luY2x1ZGUvbmV3LmgiIDEgMyA0CiAKCgoKCiMgMSAiL2hvbWUvdHYvdG9vbHMvZ251
L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45
NS4yL2luY2x1ZGUvbmV3IiAxIDMgNAogCiAKCgoKCiNwcmFnbWEgaW50ZXJmYWNlICJuZXciCiMg
MSAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2Vy
cGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzQyICIv
aG9tZS90di90b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1p
Ym0tYWl4NC4yLjEuMC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CgojIDggIi9ob21lL3R2
L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0
LjIuMS4wLzIuOTUuMi9pbmNsdWRlL25ldyIgMiAzIDQKCiMgMSAiL2hvbWUvdHYvdG9vbHMvZ251
L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45
NS4yL2luY2x1ZGUvZXhjZXB0aW9uIiAxIDMgNAogCiAKCgoKCiNwcmFnbWEgaW50ZXJmYWNlICJl
eGNlcHRpb24iCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZCB7CgpjbGFzcyBleGNlcHRp
b24gewpwdWJsaWM6CiAgZXhjZXB0aW9uICgpIHsgfQogIHZpcnR1YWwgfmV4Y2VwdGlvbiAoKSB7
IH0KICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQgKCkgY29uc3Q7Cn07CgpjbGFzcyBiYWRfZXhj
ZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbiB7CnB1YmxpYzoKICBiYWRfZXhjZXB0aW9uICgpIHsg
fQogIHZpcnR1YWwgfmJhZF9leGNlcHRpb24gKCkgeyB9Cn07Cgp0eXBlZGVmIHZvaWQgKCp0ZXJt
aW5hdGVfaGFuZGxlcikgKCk7CnR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikgKCk7
Cgp0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWluYXRlICh0ZXJtaW5hdGVfaGFuZGxlcik7CnZv
aWQgdGVybWluYXRlICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKdW5leHBlY3Rl
ZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkICh1bmV4cGVjdGVkX2hhbmRsZXIpOwp2b2lkIHVuZXhw
ZWN0ZWQgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwpib29sIHVuY2F1Z2h0X2V4
Y2VwdGlvbiAoKTsKCn0gIAoKfSAgCgoKIyA5ICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2dj
Yy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvaW5jbHVk
ZS9uZXciIDIgMyA0CgoKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQgewoKICBjbGFzcyBi
YWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIHdoYXQoKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuICJiYWRfYWxsb2MiOyB9CiAgfTsK
CiAgc3RydWN0IG5vdGhyb3dfdCB7fTsKICBleHRlcm4gY29uc3Qgbm90aHJvd190IG5vdGhyb3c7
CiAgdHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7CiAgbmV3X2hhbmRsZXIgc2V0X25ld19o
YW5kbGVyIChuZXdfaGFuZGxlcik7Cgp9ICAKCiAKdm9pZCAqb3BlcmF0b3IgbmV3IChzaXplX3Qp
IHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgKm9wZXJhdG9yIG5ld1tdIChzaXplX3QpIHRo
cm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlICh2b2lkICopIHRocm93
KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10gKHZvaWQgKikgdGhyb3coKTsKdm9pZCAqb3BlcmF0
b3IgbmV3IChzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCAqb3Bl
cmF0b3IgbmV3W10gKHNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lk
IG9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7
CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10gKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0
aHJvdygpOwoKIAppbmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3KHNpemVfdCwgdm9pZCAqcGxhY2Up
IHRocm93KCkgeyByZXR1cm4gcGxhY2U7IH0KaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ld1tdKHNp
emVfdCwgdm9pZCAqcGxhY2UpIHRocm93KCkgeyByZXR1cm4gcGxhY2U7IH0KfSAgCgoKIyA2ICIv
aG9tZS90di90b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1p
Ym0tYWl4NC4yLjEuMC8yLjk1LjIvaW5jbHVkZS9uZXcuaCIgMiAzIDQKCgp1c2luZyBzdGQ6Om5l
d19oYW5kbGVyOwp1c2luZyBzdGQ6OnNldF9uZXdfaGFuZGxlcjsKCgojIDUyICIvaG9tZS90di90
b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4y
LjEuMC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAz
CgoKCgoKCgogCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0Zvcndh
cmRJdGVyMiwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZCBfX2l0ZXJfc3dhcChfRm9yd2FyZEl0ZXIx
IF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IsIF9UcCopIHsKICBfVHAgX190bXAgPSAqX19hOwogICpf
X2EgPSAqX19iOwogICpfX2IgPSBfX3RtcDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
cjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+CmlubGluZSB2b2lkIGl0ZXJfc3dhcChfRm9yd2FyZEl0
ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IpIHsKICBfX2l0ZXJfc3dhcChfX2EsIF9fYiwgX192
YWx1ZV90eXBlKCBfX2EgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgdm9pZCBz
d2FwKF9UcCYgX19hLCBfVHAmIF9fYikgewogIF9UcCBfX3RtcCA9IF9fYTsKICBfX2EgPSBfX2I7
CiAgX19iID0gX190bXA7Cn0KCiAKIAoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUg
Y29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7CiAgcmV0dXJu
IF9fYiA8IF9fYSA/IF9fYiA6IF9fYTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGNv
bnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikgewogIHJldHVybiAg
X19hIDwgX19iID8gX19iIDogX19hOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9D
b21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYg
X19iLCBfQ29tcGFyZSBfX2NvbXApIHsKICByZXR1cm4gX19jb21wKF9fYiwgX19hKSA/IF9fYiA6
IF9fYTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSBjb25z
dCBfVHAmIG1heChjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29t
cCkgewogIHJldHVybiBfX2NvbXAoX19hLCBfX2IpID8gX19iIDogX19hOwp9CgogCiAKCiAKIAog
CiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwg
Y2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5KF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1
dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3Jf
dGFnLCBfRGlzdGFuY2UqKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX3Jlc3Vs
dCwgKytfX2ZpcnN0KQogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9PdXRwdXRJdGVy
LCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfT3V0cHV0SXRlcgpfX2NvcHkoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgX091dHB1dEl0
ZXIgX19yZXN1bHQsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCBfRGlzdGFuY2UqKQp7CiAg
Zm9yIChfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pIHsK
ICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogICAgKytfX3Jlc3VsdDsK
ICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgX1Rw
KgpfX2NvcHlfdHJpdmlhbChjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBf
VHAqIF9fcmVzdWx0KSB7CiAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9mKF9UcCkg
KiAoX19sYXN0IC0gX19maXJzdCkpOwogIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2Zp
cnN0KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIs
IGNsYXNzIF9Cb29sVHlwZT4Kc3RydWN0IF9fY29weV9kaXNwYXRjaCB7CiAgc3RhdGljIF9PdXRw
dXRJdGVyIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9D
YXRlZ29yeTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+
OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwogICAgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBf
X2xhc3QsIF9fcmVzdWx0LCBfQ2F0ZWdvcnkoKSwgKF9EaXN0YW5jZSopIDApOwogIH0KfTsKCnRl
bXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX2NvcHlfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190
cnVlX3R5cGU+CnsKICBzdGF0aWMgX1RwKiBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3Qg
X1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpIHsKICAgIHJldHVybiBfX2NvcHlfdHJpdmlhbChf
X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpz
dHJ1Y3QgX19jb3B5X2Rpc3BhdGNoPGNvbnN0IF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgp7CiAg
c3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBf
VHAqIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gX19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0
LCBfX3Jlc3VsdCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9P
dXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl
c3VsdCkgewogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2
YWx1ZV90eXBlIF9UcDsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFz
X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcgogICAgICAgICAgX1RyaXZpYWw7CiAgcmV0dXJu
IF9fY29weV9kaXNwYXRjaDxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlciwgX1RyaXZpYWw+CiAgICA6
OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7Cn0KCiMgMjEzICIvaG9tZS90di90b29s
cy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEu
MC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMwoKCiAK
IAoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlv
bmFsSXRlcjIsIAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0JpZGlyZWN0aW9u
YWxJdGVyMiBfX2NvcHlfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LCAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
cjEgX19sYXN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSopCnsKICB3aGlsZSAoX19maXJz
dCAhPSBfX2xhc3QpCiAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICByZXR1cm4gX19yZXN1
bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0JpZGlyZWN0
aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIgX19j
b3B5X2JhY2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRv
bV9hY2Nlc3NfaXRlcmF0b3JfdGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfRGlzdGFuY2UqKQp7CiAgZm9yIChfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19m
aXJzdDsgX19uID4gMDsgLS1fX24pCiAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICByZXR1
cm4gX19yZXN1bHQ7Cn0KCgoKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFs
SXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfQm9vbFR5
cGU+CnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2gKewogIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcjE+OjppdGVyYXRvcl9jYXRlZ29yeSAK
ICAgICAgICAgIF9DYXQ7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGly
ZWN0aW9uYWxJdGVyMT46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlOwoKICBz
dGF0aWMgX0JpZGlyZWN0aW9uYWxJdGVyMiBjb3B5KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJz
dCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIx
IF9fbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIyIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9f
bGFzdCwgX19yZXN1bHQsIF9DYXQoKSwgKF9EaXN0YW5jZSopIDApOwogIH0KfTsKCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwg
X190cnVlX3R5cGU+CnsKICBzdGF0aWMgX1RwKiBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29u
c3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpIHsKICAgIGNvbnN0IHB0cmRpZmZfdCBfTnVt
ID0gX19sYXN0IC0gX19maXJzdDsKICAgIG1lbW1vdmUoX19yZXN1bHQgLSBfTnVtLCBfX2ZpcnN0
LCBzaXplb2YoX1RwKSAqIF9OdW0pOwogICAgcmV0dXJuIF9fcmVzdWx0IC0gX051bTsKICB9Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPGNv
bnN0IF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBf
VHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICByZXR1
cm4gIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAg
ICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogIH0KfTsKCnRlbXBsYXRlIDxj
bGFzcyBfQkkxLCBjbGFzcyBfQkkyPgppbmxpbmUgX0JJMiBjb3B5X2JhY2t3YXJkKF9CSTEgX19m
aXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9f
dHlwZV90cmFpdHM8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CSTI+Ojp2YWx1ZV90eXBlPgog
ICAgICAgICAgICAgICAgICAgICAgICA6Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IK
ICAgICAgICAgIF9Ucml2aWFsOwogIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X0JJ
MSwgX0JJMiwgX1RyaXZpYWw+CiAgICAgICAgICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwg
X19yZXN1bHQpOwp9CgojIDMwMyAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4y
L2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yLy4uLy4uLy4uLy4uL2lu
Y2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDMKCgogCiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CnBhaXI8X0lucHV0SXRlciwg
X091dHB1dEl0ZXI+IF9fY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9y
X3RhZykgewogIGZvciAoIDsgX19jb3VudCA+IDA7IC0tX19jb3VudCkgewogICAgKl9fcmVzdWx0
ID0gKl9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgICArK19fcmVzdWx0OwogIH0KICByZXR1cm4g
cGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4oX19maXJzdCwgX19yZXN1bHQpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JBSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxp
bmUgcGFpcjxfUkFJdGVyLCBfT3V0cHV0SXRlcj4KX19jb3B5X24oX1JBSXRlciBfX2ZpcnN0LCBf
U2l6ZSBfX2NvdW50LAogICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgcmFu
ZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpIHsKICBfUkFJdGVyIF9fbGFzdCA9IF9fZmlyc3QgKyBf
X2NvdW50OwogIHJldHVybiBwYWlyPF9SQUl0ZXIsIF9PdXRwdXRJdGVyPihfX2xhc3QsIGNvcHko
X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVy
LCBfT3V0cHV0SXRlcj4KX19jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50
LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIHJldHVybiBfX2NvcHlfbihfX2ZpcnN0LCBfX2Nv
dW50LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeSggX19m
aXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xh
c3MgX091dHB1dEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPgpjb3B5
X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LCBfT3V0cHV0SXRlciBfX3Jlc3Vs
dCkgewogIHJldHVybiBfX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jlc3VsdCk7Cn0KCiAK
IAoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4Kdm9pZCBmaWxsKF9G
b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFs
dWUpIHsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAqX19maXJz
dCA9IF9fdmFsdWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1NpemUs
IGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgZmlsbF9uKF9PdXRwdXRJdGVyIF9fZmlyc3QsIF9TaXpl
IF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlKSB7CiAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytf
X2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogIHJldHVybiBfX2ZpcnN0Owp9CgogCiAK
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CnBhaXI8X0lu
cHV0SXRlcjEsIF9JbnB1dEl0ZXIyPiBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIxIF9fbGFzdDEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp
cnN0MikgewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICpfX2ZpcnN0MSA9PSAqX19m
aXJzdDIpIHsKICAgICsrX19maXJzdDE7CiAgICArK19fZmlyc3QyOwogIH0KICByZXR1cm4gcGFp
cjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9CaW5hcnlQ
cmVkaWNhdGU+CnBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPiBtaXNtYXRjaChfSW5wdXRJ
dGVyMSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkgewogIHdoaWxlIChfX2ZpcnN0
MSAhPSBfX2xhc3QxICYmIF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAg
ICArK19fZmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRl
cjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbmxpbmUgYm9vbCBlcXVhbChfSW5wdXRJ
dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlcjIgX19maXJzdDIpIHsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19m
aXJzdDEsICsrX19maXJzdDIpCiAgICBpZiAoKl9fZmlyc3QxICE9ICpfX2ZpcnN0MikKICAgICAg
cmV0dXJuIGZhbHNlOwogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgppbmxpbmUgYm9v
bCBlcXVhbChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg
ICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5h
cnlfcHJlZCkgewogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytf
X2ZpcnN0MikKICAgIGlmICghX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAg
ICAgIHJldHVybiBmYWxzZTsKICByZXR1cm4gdHJ1ZTsKfQoKIAogCiAKCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmJvb2wgbGV4aWNvZ3JhcGhpY2FsX2Nv
bXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9f
bGFzdDIpIHsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19s
YXN0MgogICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgaWYgKCpfX2ZpcnN0
MSA8ICpfX2ZpcnN0MikKICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAoKl9fZmlyc3QyIDwgKl9f
Zmlyc3QxKQogICAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiBfX2ZpcnN0MSA9PSBfX2xh
c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
MSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9Db21wYXJlPgpib29sIGxleGljb2dyYXBoaWNh
bF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVy
MiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkg
ewogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAg
ICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICBpZiAoX19jb21wKCpfX2ZpcnN0
MSwgKl9fZmlyc3QyKSkKICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAoX19jb21wKCpfX2ZpcnN0
MiwgKl9fZmlyc3QxKSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gX19maXJzdDEg
PT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwp9CgppbmxpbmUgYm9vbCAKbGV4aWNv
Z3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QyLAogICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QyKQp7CiAgY29uc3Qgc2l6ZV90
IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsKICBjb25zdCBzaXplX3QgX19sZW4yID0gX19s
YXN0MiAtIF9fZmlyc3QyOwogIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2ZpcnN0MSwg
X19maXJzdDIsIG1pbihfX2xlbjEsIF9fbGVuMikpOwogIHJldHVybiBfX3Jlc3VsdCAhPSAwID8g
X19yZXN1bHQgPCAwIDogX19sZW4xIDwgX19sZW4yOwp9CgppbmxpbmUgYm9vbCBsZXhpY29ncmFw
aGljYWxfY29tcGFyZShjb25zdCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgY2hhciogX19sYXN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19maXJzdDIs
IGNvbnN0IGNoYXIqIF9fbGFzdDIpCnsKCgoKCgoKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2Nv
bXBhcmUoKGNvbnN0IHVuc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciopIF9fZmlyc3QyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciopIF9f
bGFzdDIpOwoKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVy
Mj4KaW50IF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBfX2ZpcnN0
MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikKewogIHdoaWxlIChf
X2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlmICgqX19m
aXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiAtMTsKICAgIGlmICgqX19maXJzdDIgPCAq
X19maXJzdDEpCiAgICAgIHJldHVybiAxOwogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7
CiAgfQogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKSB7CiAgICByZXR1cm4gIShfX2ZpcnN0MSA9
PSBfX2xhc3QxKTsKICB9CiAgZWxzZSB7CiAgICByZXR1cm4gLTE7CiAgfQp9CgppbmxpbmUgaW50
Cl9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2Zp
cnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIq
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBj
aGFyKiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIqIF9fbGFzdDIpCnsKICBjb25zdCBwdHJkaWZmX3QgX19sZW4xID0gX19sYXN0MSAt
IF9fZmlyc3QxOwogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7
CiAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmlyc3QxLCBfX2ZpcnN0MiwgbWluKF9f
bGVuMSwgX19sZW4yKSk7CiAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCAKICAgICAg
ICAgICAgICAgICAgICAgICA6IChfX2xlbjEgPT0gX19sZW4yID8gMCA6IChfX2xlbjEgPCBfX2xl
bjIgPyAtMSA6IDEpKTsKfQoKaW5saW5lIGludCAKX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8z
d2F5KGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNoYXIqIF9f
bGFzdDIpCnsKCgoKCgoKCiAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheSgo
Y29uc3QgdW5zaWduZWQgY2hhciopIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKSBfX2Zp
cnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNp
Z25lZCBjaGFyKikgX19sYXN0Mik7Cgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNs
YXNzIF9JbnB1dEl0ZXIyPgppbnQgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJ
dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCnsK
ICByZXR1cm4gX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9fZmlyc3QxLCBfX2xhc3Qx
LCBfX2ZpcnN0MiwgX19sYXN0Mik7Cn0KCiAKCgoKIAogCiAKIyA1NiAiL2hvbWUvdHYvdG9vbHMv
Z251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAv
Mi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3RyZWUuaCIgMiAzCgoKIyAxICIv
aG9tZS90di90b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1p
Ym0tYWl4NC4yLjEuMC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uc3Ry
dWN0LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIAoKIAogCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgdm9pZCBkZXN0cm95KF9UcCogX19wb2ludGVyKSB7
CiAgX19wb2ludGVyLT5+X1RwKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4K
aW5saW5lIHZvaWQgY29uc3RydWN0KF9UMSogX19wLCBjb25zdCBfVDImIF9fdmFsdWUpIHsKICBu
ZXcgKF9fcCkgX1QxKF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxPgppbmxpbmUgdm9p
ZCBjb25zdHJ1Y3QoX1QxKiBfX3ApIHsKICBuZXcgKF9fcCkgX1QxKCk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgdm9pZApfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJk
SXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkK
ewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGRlc3Ryb3koJipf
X2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGluZSB2b2lk
IF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvciwgX190cnVl
X3R5cGUpIHt9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgpp
bmxpbmUgdm9pZApfX2Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXJhdG9yIF9fbGFzdCwgX1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxf
VHA+OjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yCiAgICAgICAgICBfVHJpdmlhbF9kZXN0cnVjdG9y
OwogIF9fZGVzdHJveV9hdXgoX19maXJzdCwgX19sYXN0LCBfVHJpdmlhbF9kZXN0cnVjdG9yKCkp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQgZGVzdHJv
eShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CiAg
X19kZXN0cm95KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoK
aW5saW5lIHZvaWQgZGVzdHJveShjaGFyKiwgY2hhciopIHt9CmlubGluZSB2b2lkIGRlc3Ryb3ko
d2NoYXJfdCosIHdjaGFyX3QqKSB7fQoKIAoKCgogCiAKIAojIDU4ICIvaG9tZS90di90b29scy9n
bnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8y
Ljk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfdHJlZS5oIiAyIDMKCiMgMSAiL2hv
bWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJt
LWFpeDQuMi4xLjAvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2Z1bmN0aW9u
LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCnRlbXBsYXRlIDxj
bGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24gewogIHR5cGVk
ZWYgX0FyZyBhcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsK
CnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CnN0cnVj
dCBiaW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZzEgZmlyc3RfYXJndW1lbnRfdHlwZTsK
ICB0eXBlZGVmIF9BcmcyIHNlY29uZF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCBy
ZXN1bHRfdHlwZTsKfTsgICAgICAKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBwbHVzIDog
cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNv
bnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICsgX195OyB9
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbWludXMgOiBwdWJsaWMgYmluYXJ5X2Z1
bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNv
bnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBtdWx0aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAs
X1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9f
eSkgY29uc3QgeyByZXR1cm4gX194ICogX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpz
dHJ1Y3QgZGl2aWRlcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBf
VHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0
dXJuIF9feCAvIF9feTsgfQp9OwoKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gaW5saW5lIF9UcCBp
ZGVudGl0eV9lbGVtZW50KHBsdXM8X1RwPikgewogIHJldHVybiBfVHAoMCk7Cn0KdGVtcGxhdGUg
PGNsYXNzIF9UcD4gaW5saW5lIF9UcCBpZGVudGl0eV9lbGVtZW50KG11bHRpcGxpZXM8X1RwPikg
ewogIHJldHVybiBfVHAoMSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtb2R1bHVz
IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gCnsKICBfVHAgb3BlcmF0b3Io
KShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAlIF9f
eTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG5lZ2F0ZSA6IHB1YmxpYyB1bmFy
eV9mdW5jdGlvbjxfVHAsX1RwPiAKewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBj
b25zdCB7IHJldHVybiAtX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZXF1
YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4gCnsKICBib29sIG9w
ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBf
X3ggPT0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qgbm90X2VxdWFsX3Rv
IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+IAp7CiAgYm9vbCBvcGVyYXRv
cigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICE9
IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXIgOiBwdWJsaWMg
YmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4gCnsKICBib29sIG9wZXJhdG9yKCkoY29uc3Qg
X1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPiBfX3k7IH0KfTsK
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzIDogcHVibGljIGJpbmFyeV9mdW5jdGlv
bjxfVHAsX1RwLGJvb2w+IAp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25z
dCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDwgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgpzdHJ1Y3QgZ3JlYXRlcl9lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw
LF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAm
IF9feSkgY29uc3QgeyByZXR1cm4gX194ID49IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4Kc3RydWN0IGxlc3NfZXF1YWwgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9v
bD4gCnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBj
b25zdCB7IHJldHVybiBfX3ggPD0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1
Y3QgbG9naWNhbF9hbmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4Kewog
IGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsg
cmV0dXJuIF9feCAmJiBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dp
Y2FsX29yIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9w
ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBf
X3ggfHwgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9ub3Qg
OiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29u
c3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuICFfX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBf
UHJlZGljYXRlPgpjbGFzcyB1bmFyeV9uZWdhdGUKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0
eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1bWVudF90eXBlLCBib29sPiB7CnByb3RlY3RlZDoKICBf
UHJlZGljYXRlIF9NX3ByZWQ7CnB1YmxpYzoKICBleHBsaWNpdCB1bmFyeV9uZWdhdGUoY29uc3Qg
X1ByZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25z
dCB0eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJl
dHVybiAhX01fcHJlZChfX3gpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgpp
bmxpbmUgdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+IApub3QxKGNvbnN0IF9QcmVkaWNhdGUmIF9f
cHJlZCkKewogIHJldHVybiB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+IApjbGFzcyBiaW5hcnlfbmVnYXRlIAogIDogcHVibGlj
IGJpbmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfUHJlZGljYXRlOjpzZWNvbmRf
YXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbD4gewpwcm90ZWN0
ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgYmluYXJ5X25lZ2F0
ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVyYXRv
cigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCwg
CiAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1
bWVudF90eXBlJiBfX3kpIGNvbnN0CiAgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCwgX195KTsg
CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBiaW5hcnlfbmVnYXRl
PF9QcmVkaWNhdGU+IApub3QyKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkKewogIHJldHVybiBi
aW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3Bl
cmF0aW9uPiAKY2xhc3MgYmluZGVyMXN0CiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5h
bWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9P
cGVyYXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSB2
YWx1ZTsKcHVibGljOgogIGJpbmRlcjFzdChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAg
ICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feSkK
ICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVz
dWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9h
cmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcCh2YWx1ZSwgX194KTsgCiAg
fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24sIGNsYXNzIF9UcD4KaW5saW5lIGJpbmRl
cjFzdDxfT3BlcmF0aW9uPiAKYmluZDFzdChjb25zdCBfT3BlcmF0aW9uJiBfX29wZXIsIGNvbnN0
IF9UcCYgX194KSAKewogIHR5cGVkZWYgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1l
bnRfdHlwZSBfQXJnMV90eXBlOwogIHJldHVybiBiaW5kZXIxc3Q8X09wZXJhdGlvbj4oX19vcGVy
LCBfQXJnMV90eXBlKF9feCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4gCmNsYXNz
IGJpbmRlcjJuZAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb246
OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUg
X09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24gb3A7CiAg
dHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgdmFsdWU7CnB1YmxpYzoK
ICBiaW5kZXIybmQoY29uc3QgX09wZXJhdGlvbiYgX194LAogICAgICAgICAgICBjb25zdCB0eXBl
bmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX195KSAKICAgICAgOiBvcChf
X3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBv
cGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUm
IF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKF9feCwgdmFsdWUpOyAKICB9Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMm5kPF9PcGVyYXRp
b24+IApiaW5kMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9fb3BlciwgY29uc3QgX1RwJiBfX3gpIAp7
CiAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSBfQXJn
Ml90eXBlOwogIHJldHVybiBiaW5kZXIybmQ8X09wZXJhdGlvbj4oX19vcGVyLCBfQXJnMl90eXBl
KF9feCkpOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRp
b24yPgpjbGFzcyB1bmFyeV9jb21wb3NlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5h
bWUgX09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBlPiAKewpwcm90ZWN0ZWQ6CiAgX09wZXJh
dGlvbjEgX19vcDE7CiAgX09wZXJhdGlvbjIgX19vcDI7CnB1YmxpYzoKICB1bmFyeV9jb21wb3Nl
KGNvbnN0IF9PcGVyYXRpb24xJiBfX3gsIGNvbnN0IF9PcGVyYXRpb24yJiBfX3kpIAogICAgOiBf
X29wMShfX3gpLCBfX29wMihfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90
eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlw
ZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX19vcDEoX19vcDIoX194KSk7CiAgfQp9OwoKdGVt
cGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMj4KaW5saW5lIHVuYXJ5
X2NvbXBvc2U8X09wZXJhdGlvbjEsX09wZXJhdGlvbjI+IApjb21wb3NlMShjb25zdCBfT3BlcmF0
aW9uMSYgX19vcDEsIGNvbnN0IF9PcGVyYXRpb24yJiBfX29wMikKewogIHJldHVybiB1bmFyeV9j
b21wb3NlPF9PcGVyYXRpb24xLF9PcGVyYXRpb24yPihfX29wMSwgX19vcDIpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24yLCBjbGFzcyBfT3BlcmF0aW9u
Mz4KY2xhc3MgYmluYXJ5X2NvbXBvc2UKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFt
ZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0
eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRp
b24xIF9NX29wMTsKICBfT3BlcmF0aW9uMiBfTV9vcDI7CiAgX09wZXJhdGlvbjMgX01fb3AzOwpw
dWJsaWM6CiAgYmluYXJ5X2NvbXBvc2UoY29uc3QgX09wZXJhdGlvbjEmIF9feCwgY29uc3QgX09w
ZXJhdGlvbjImIF9feSwgCiAgICAgICAgICAgICAgICAgY29uc3QgX09wZXJhdGlvbjMmIF9feikg
CiAgICA6IF9NX29wMShfX3gpLCBfTV9vcDIoX195KSwgX01fb3AzKF9feikgeyB9CiAgdHlwZW5h
bWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBf
T3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fb3Ax
KF9NX29wMihfX3gpLCBfTV9vcDMoX194KSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVy
YXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMiwgY2xhc3MgX09wZXJhdGlvbjM+CmlubGluZSBiaW5h
cnlfY29tcG9zZTxfT3BlcmF0aW9uMSwgX09wZXJhdGlvbjIsIF9PcGVyYXRpb24zPiAKY29tcG9z
ZTIoY29uc3QgX09wZXJhdGlvbjEmIF9fb3AxLCBjb25zdCBfT3BlcmF0aW9uMiYgX19vcDIsIAog
ICAgICAgICBjb25zdCBfT3BlcmF0aW9uMyYgX19vcDMpCnsKICByZXR1cm4gYmluYXJ5X2NvbXBv
c2U8X09wZXJhdGlvbjEsX09wZXJhdGlvbjIsX09wZXJhdGlvbjM+CiAgICAoX19vcDEsIF9fb3Ay
LCBfX29wMyk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBw
b2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9S
ZXN1bHQ+IHsKcHJvdGVjdGVkOgogIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcpOwpwdWJsaWM6CiAg
cG9pbnRlcl90b191bmFyeV9mdW5jdGlvbigpIHt9CiAgZXhwbGljaXQgcG9pbnRlcl90b191bmFy
eV9mdW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJnKSkgOiBfTV9wdHIoX194KSB7fQogIF9SZXN1
bHQgb3BlcmF0b3IoKShfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gX01fcHRyKF9feCk7IH0KfTsK
CnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b191
bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PiBwdHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9Bcmcp
KQp7CiAgcmV0dXJuIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4oX194
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4K
Y2xhc3MgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24gOiAKICBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgogICAgX1Jlc3VsdCAoKl9NX3B0
cikoX0FyZzEsIF9BcmcyKTsKcHVibGljOgogICAgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24o
KSB7fQogICAgZXhwbGljaXQgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9f
eCkoX0FyZzEsIF9BcmcyKSkgCiAgICAgIDogX01fcHRyKF9feCkge30KICAgIF9SZXN1bHQgb3Bl
cmF0b3IoKShfQXJnMSBfX3gsIF9BcmcyIF9feSkgY29uc3QgewogICAgICByZXR1cm4gX01fcHRy
KF9feCwgX195KTsKICAgIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIs
IGNsYXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxf
QXJnMixfUmVzdWx0PiAKcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIpKSB7CiAg
cmV0dXJuIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+KF9f
eCk7Cn0KCiAKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9JZGVudGl0eSA6IHB1YmxpYyB1
bmFyeV9mdW5jdGlvbjxfVHAsX1RwPiB7CiAgY29uc3QgX1RwJiBvcGVyYXRvcigpKGNvbnN0IF9U
cCYgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0
cnVjdCBpZGVudGl0eSA6IHB1YmxpYyBfSWRlbnRpdHk8X1RwPiB7fTsKCiAKdGVtcGxhdGUgPGNs
YXNzIF9QYWlyPgpzdHJ1Y3QgX1NlbGVjdDFzdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFp
ciwgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGU+IHsKICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6
Zmlyc3RfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1
cm4gX194LmZpcnN0OwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4Kc3RydWN0IF9TZWxl
Y3QybmQgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1lIF9QYWlyOjpzZWNv
bmRfdHlwZT4KewogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYgb3BlcmF0b3Io
KShjb25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LnNlY29uZDsKICB9Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+IHN0cnVjdCBzZWxlY3Qxc3QgOiBwdWJsaWMgX1NlbGVj
dDFzdDxfUGFpcj4ge307CnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4gc3RydWN0IHNlbGVjdDJuZCA6
IHB1YmxpYyBfU2VsZWN0Mm5kPF9QYWlyPiB7fTsKCiAKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBj
bGFzcyBfQXJnMj4Kc3RydWN0IF9Qcm9qZWN0MXN0IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf
QXJnMSwgX0FyZzIsIF9BcmcxPiB7CiAgX0FyZzEgb3BlcmF0b3IoKShjb25zdCBfQXJnMSYgX194
LCBjb25zdCBfQXJnMiYpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9BcmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IF9Qcm9qZWN0Mm5kIDogcHVibGljIGJpbmFyeV9m
dW5jdGlvbjxfQXJnMSwgX0FyZzIsIF9BcmcyPiB7CiAgX0FyZzIgb3BlcmF0b3IoKShjb25zdCBf
QXJnMSYsIGNvbnN0IF9BcmcyJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feTsgfQp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4gCnN0cnVjdCBwcm9qZWN0MXN0IDogcHVibGlj
IF9Qcm9qZWN0MXN0PF9BcmcxLCBfQXJnMj4ge307Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNs
YXNzIF9BcmcyPgpzdHJ1Y3QgcHJvamVjdDJuZCA6IHB1YmxpYyBfUHJvamVjdDJuZDxfQXJnMSwg
X0FyZzI+IHt9OwoKIAogCiAKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBjb25zdGFu
dF92b2lkX2Z1bgp7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwogIHJlc3VsdF90eXBl
IF9fdmFsOwogIGNvbnN0YW50X3ZvaWRfZnVuKGNvbnN0IHJlc3VsdF90eXBlJiBfX3YpIDogX192
YWwoX192KSB7fQogIGNvbnN0IHJlc3VsdF90eXBlJiBvcGVyYXRvcigpKCkgY29uc3QgeyByZXR1
cm4gX192YWw7IH0KfTsgIAoKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LCBjbGFzcyBfQXJndW1l
bnQgPSBfUmVzdWx0PgoKCgpzdHJ1Y3QgY29uc3RhbnRfdW5hcnlfZnVuIDogcHVibGljIHVuYXJ5
X2Z1bmN0aW9uPF9Bcmd1bWVudCwgX1Jlc3VsdD4gewogIF9SZXN1bHQgX01fdmFsOwogIGNvbnN0
YW50X3VuYXJ5X2Z1bihjb25zdCBfUmVzdWx0JiBfX3YpIDogX01fdmFsKF9fdikge30KICBjb25z
dCBfUmVzdWx0JiBvcGVyYXRvcigpKGNvbnN0IF9Bcmd1bWVudCYpIGNvbnN0IHsgcmV0dXJuIF9N
X3ZhbDsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LCBjbGFzcyBfQXJnMSA9IF9SZXN1
bHQsIGNsYXNzIF9BcmcyID0gX0FyZzE+CgoKCnN0cnVjdCBjb25zdGFudF9iaW5hcnlfZnVuIDog
cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSwgX0FyZzIsIF9SZXN1bHQ+IHsKICBfUmVzdWx0
IF9NX3ZhbDsKICBjb25zdGFudF9iaW5hcnlfZnVuKGNvbnN0IF9SZXN1bHQmIF9fdikgOiBfTV92
YWwoX192KSB7fQogIGNvbnN0IF9SZXN1bHQmIG9wZXJhdG9yKCkoY29uc3QgX0FyZzEmLCBjb25z
dCBfQXJnMiYpIGNvbnN0IHsKICAgIHJldHVybiBfTV92YWw7CiAgfQp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9SZXN1bHQ+CmlubGluZSBjb25zdGFudF92b2lkX2Z1bjxfUmVzdWx0PiBjb25zdGFudDAo
Y29uc3QgX1Jlc3VsdCYgX192YWwpCnsKICByZXR1cm4gY29uc3RhbnRfdm9pZF9mdW48X1Jlc3Vs
dD4oX192YWwpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4KaW5saW5lIGNvbnN0YW50X3Vu
YXJ5X2Z1bjxfUmVzdWx0LF9SZXN1bHQ+IGNvbnN0YW50MShjb25zdCBfUmVzdWx0JiBfX3ZhbCkK
ewogIHJldHVybiBjb25zdGFudF91bmFyeV9mdW48X1Jlc3VsdCxfUmVzdWx0PihfX3ZhbCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgppbmxpbmUgY29uc3RhbnRfYmluYXJ5X2Z1bjxfUmVz
dWx0LF9SZXN1bHQsX1Jlc3VsdD4gCmNvbnN0YW50Mihjb25zdCBfUmVzdWx0JiBfX3ZhbCkKewog
IHJldHVybiBjb25zdGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdCxfUmVzdWx0PihfX3Zh
bCk7Cn0KCiAKIApjbGFzcyBzdWJ0cmFjdGl2ZV9ybmcgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248
dW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQ+IHsKcHJpdmF0ZToKICB1bnNpZ25lZCBpbnQgX01f
dGFibGVbNTVdOwogIHNpemVfdCBfTV9pbmRleDE7CiAgc2l6ZV90IF9NX2luZGV4MjsKcHVibGlj
OgogIHVuc2lnbmVkIGludCBvcGVyYXRvcigpKHVuc2lnbmVkIGludCBfX2xpbWl0KSB7CiAgICBf
TV9pbmRleDEgPSAoX01faW5kZXgxICsgMSkgJSA1NTsKICAgIF9NX2luZGV4MiA9IChfTV9pbmRl
eDIgKyAxKSAlIDU1OwogICAgX01fdGFibGVbX01faW5kZXgxXSA9IF9NX3RhYmxlW19NX2luZGV4
MV0gLSBfTV90YWJsZVtfTV9pbmRleDJdOwogICAgcmV0dXJuIF9NX3RhYmxlW19NX2luZGV4MV0g
JSBfX2xpbWl0OwogIH0KCiAgdm9pZCBfTV9pbml0aWFsaXplKHVuc2lnbmVkIGludCBfX3NlZWQp
CiAgewogICAgdW5zaWduZWQgaW50IF9fayA9IDE7CiAgICBfTV90YWJsZVs1NF0gPSBfX3NlZWQ7
CiAgICBzaXplX3QgX19pOwogICAgZm9yIChfX2kgPSAwOyBfX2kgPCA1NDsgX19pKyspIHsKICAg
ICAgICBzaXplX3QgX19paSA9ICgyMSAqIChfX2kgKyAxKSAlIDU1KSAtIDE7CiAgICAgICAgX01f
dGFibGVbX19paV0gPSBfX2s7CiAgICAgICAgX19rID0gX19zZWVkIC0gX19rOwogICAgICAgIF9f
c2VlZCA9IF9NX3RhYmxlW19faWldOwogICAgfQogICAgZm9yIChpbnQgX19sb29wID0gMDsgX19s
b29wIDwgNDsgX19sb29wKyspIHsKICAgICAgICBmb3IgKF9faSA9IDA7IF9faSA8IDU1OyBfX2kr
KykKICAgICAgICAgICAgX01fdGFibGVbX19pXSA9IF9NX3RhYmxlW19faV0gLSBfTV90YWJsZVso
MSArIF9faSArIDMwKSAlIDU1XTsKICAgIH0KICAgIF9NX2luZGV4MSA9IDA7CiAgICBfTV9pbmRl
eDIgPSAzMTsKICB9CgogIHN1YnRyYWN0aXZlX3JuZyh1bnNpZ25lZCBpbnQgX19zZWVkKSB7IF9N
X2luaXRpYWxpemUoX19zZWVkKTsgfQogIHN1YnRyYWN0aXZlX3JuZygpIHsgX01faW5pdGlhbGl6
ZSgxNjE4MDMzOTh1KTsgfQp9OwoKCiAKCiAKIAogCiAKIAogCiAKCiAKIAogCiAKIAoKIAogCiAK
IAogCgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90IDog
cHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVt
X2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0
b3IoKShfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToK
ICBfUmV0IChfVHA6OipfTV9mKSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U
cD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9U
cCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KF9SZXQgKF9UcDo6
Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBf
VHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0
IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf
VHA+CmNsYXNzIG1lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+
IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSkg
OiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IHJldHVy
biAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsKCnRl
bXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3Qg
OiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNv
bnN0X21lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYp
IHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19y
LipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCnRl
bXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4x
X3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBl
eHBsaWNpdCBtZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikg
e30KICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAo
X19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29u
c3RfbWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLF9S
ZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19w
ZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBf
VHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0CiAgICB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsg
fQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfcmVmX3Qg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxp
Y2l0IG1lbV9mdW4xX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikg
e30KICBfUmV0IG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAo
X19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZyk7Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25z
dF9tZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4g
ewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19w
ZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBf
VHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJp
dmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgoKdGVtcGxhdGUgPGNs
YXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rp
b248X1RwKix2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3Qodm9pZCAoX1RwOjoq
X19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25z
dCB7IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsK
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdDx2b2lkLCBfVHA+IDog
cHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGlj
aXQgY29uc3RfbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3Bm
KSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01f
ZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5h
cnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3Qo
dm9pZCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9U
cCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6Oipf
TV9mKSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZf
dDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoK
ICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3Qp
IDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fcikgY29uc3Qg
eyAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKSBjb25zdDsK
fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3Q8dm9p
ZCwgX1RwLCBfQXJnPiA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLHZvaWQ+IHsK
cHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDog
X01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0
IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJn
KTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9m
dW4xX3Q8dm9pZCwgX1RwLCBfQXJnPiAKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3Qg
X1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3Qodm9p
ZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0
b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7
IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwg
X0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6
CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01f
ZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsg
KF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFf
cmVmX3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0Fy
Zyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV9yZWZfdCh2b2lkIChf
VHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigp
KGNvbnN0IF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyAoX19yLipfTV9mKShfX3gpOyB9CnBy
aXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07CgoKCiAKIAogCiAKCnRl
bXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBtZW1fZnVuX3Q8X1JldCxfVHA+
IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpKQogIHsgcmV0dXJuIG1lbV9mdW5fdDxfUmV0LF9U
cD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0
X21lbV9mdW5fdDxfUmV0LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkgY29uc3QpCiAg
eyByZXR1cm4gY29uc3RfbWVtX2Z1bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1
bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpKSAKICB7IHJldHVybiBtZW1fZnVuX3JlZl90PF9SZXQs
X1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29u
c3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgp
IGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0K
CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1f
ZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7
IHJldHVybiBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFz
cyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9S
ZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJl
dHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxj
bGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxf
UmV0LF9UcCxfQXJnPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0
dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFz
cyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZf
dDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0
KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0K
CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1f
ZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4xKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAg
eyByZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfdDxf
UmV0LF9UcCxfQXJnPiBtZW1fZnVuMShfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsg
cmV0dXJuIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUg
PGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3JlZl90
PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4xX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsg
cmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxj
bGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9y
ZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuMV9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSBj
b25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2Yp
OyB9CgogCgoKCiAKIAogCiMgNTkgIi9ob21lL3R2L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUu
Mi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXg0LjIuMS4wLzIuOTUuMi8uLi8uLi8uLi8uLi9p
bmNsdWRlL2crKy0zL3N0bF90cmVlLmgiIDIgMwoKCiAgCgoKCgoKdHlwZWRlZiBib29sIF9SYl90
cmVlX0NvbG9yX3R5cGU7CmNvbnN0IF9SYl90cmVlX0NvbG9yX3R5cGUgX1NfcmJfdHJlZV9yZWQg
PSBmYWxzZTsKY29uc3QgX1JiX3RyZWVfQ29sb3JfdHlwZSBfU19yYl90cmVlX2JsYWNrID0gdHJ1
ZTsKCnN0cnVjdCBfUmJfdHJlZV9ub2RlX2Jhc2UKewogIHR5cGVkZWYgX1JiX3RyZWVfQ29sb3Jf
dHlwZSBfQ29sb3JfdHlwZTsKICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZSogX0Jhc2VfcHRy
OwoKICBfQ29sb3JfdHlwZSBfTV9jb2xvcjsgCiAgX0Jhc2VfcHRyIF9NX3BhcmVudDsKICBfQmFz
ZV9wdHIgX01fbGVmdDsKICBfQmFzZV9wdHIgX01fcmlnaHQ7CgogIHN0YXRpYyBfQmFzZV9wdHIg
X1NfbWluaW11bShfQmFzZV9wdHIgX194KQogIHsKICAgIHdoaWxlIChfX3gtPl9NX2xlZnQgIT0g
MCkgX194ID0gX194LT5fTV9sZWZ0OwogICAgcmV0dXJuIF9feDsKICB9CgogIHN0YXRpYyBfQmFz
ZV9wdHIgX1NfbWF4aW11bShfQmFzZV9wdHIgX194KQogIHsKICAgIHdoaWxlIChfX3gtPl9NX3Jp
Z2h0ICE9IDApIF9feCA9IF9feC0+X01fcmlnaHQ7CiAgICByZXR1cm4gX194OwogIH0KfTsKCnRl
bXBsYXRlIDxjbGFzcyBfVmFsdWU+CnN0cnVjdCBfUmJfdHJlZV9ub2RlIDogcHVibGljIF9SYl90
cmVlX25vZGVfYmFzZQp7CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWx1ZT4qIF9MaW5rX3R5
cGU7CiAgX1ZhbHVlIF9NX3ZhbHVlX2ZpZWxkOwp9OwoKCnN0cnVjdCBfUmJfdHJlZV9iYXNlX2l0
ZXJhdG9yCnsKICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZTo6X0Jhc2VfcHRyIF9CYXNlX3B0
cjsKICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5
OwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICBfQmFzZV9wdHIgX01fbm9k
ZTsKCiAgdm9pZCBfTV9pbmNyZW1lbnQoKQogIHsKICAgIGlmIChfTV9ub2RlLT5fTV9yaWdodCAh
PSAwKSB7CiAgICAgIF9NX25vZGUgPSBfTV9ub2RlLT5fTV9yaWdodDsKICAgICAgd2hpbGUgKF9N
X25vZGUtPl9NX2xlZnQgIT0gMCkKICAgICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fbGVmdDsK
ICAgIH0KICAgIGVsc2UgewogICAgICBfQmFzZV9wdHIgX195ID0gX01fbm9kZS0+X01fcGFyZW50
OwogICAgICB3aGlsZSAoX01fbm9kZSA9PSBfX3ktPl9NX3JpZ2h0KSB7CiAgICAgICAgX01fbm9k
ZSA9IF9feTsKICAgICAgICBfX3kgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgfQogICAgICBpZiAo
X01fbm9kZS0+X01fcmlnaHQgIT0gX195KQogICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICB9CiAg
fQoKICB2b2lkIF9NX2RlY3JlbWVudCgpCiAgewogICAgaWYgKF9NX25vZGUtPl9NX2NvbG9yID09
IF9TX3JiX3RyZWVfcmVkICYmCiAgICAgICAgX01fbm9kZS0+X01fcGFyZW50LT5fTV9wYXJlbnQg
PT0gX01fbm9kZSkKICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9NX3JpZ2h0OwogICAgZWxzZSBp
ZiAoX01fbm9kZS0+X01fbGVmdCAhPSAwKSB7CiAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2Rl
LT5fTV9sZWZ0OwogICAgICB3aGlsZSAoX195LT5fTV9yaWdodCAhPSAwKQogICAgICAgIF9feSA9
IF9feS0+X01fcmlnaHQ7CiAgICAgIF9NX25vZGUgPSBfX3k7CiAgICB9CiAgICBlbHNlIHsKICAg
ICAgX0Jhc2VfcHRyIF9feSA9IF9NX25vZGUtPl9NX3BhcmVudDsKICAgICAgd2hpbGUgKF9NX25v
ZGUgPT0gX195LT5fTV9sZWZ0KSB7CiAgICAgICAgX01fbm9kZSA9IF9feTsKICAgICAgICBfX3kg
PSBfX3ktPl9NX3BhcmVudDsKICAgICAgfQogICAgICBfTV9ub2RlID0gX195OwogICAgfQogIH0K
fTsKCnRlbXBsYXRlIDxjbGFzcyBfVmFsdWUsIGNsYXNzIF9SZWYsIGNsYXNzIF9QdHI+CnN0cnVj
dCBfUmJfdHJlZV9pdGVyYXRvciA6IHB1YmxpYyBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yCnsKICB0
eXBlZGVmIF9WYWx1ZSB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX1JlZiByZWZlcmVuY2U7CiAgdHlw
ZWRlZiBfUHRyIHBvaW50ZXI7CiAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIF9W
YWx1ZSYsIF9WYWx1ZSo+ICAgICAgICAgICAgIAogICAgaXRlcmF0b3I7CiAgdHlwZWRlZiBfUmJf
dHJlZV9pdGVyYXRvcjxfVmFsdWUsIGNvbnN0IF9WYWx1ZSYsIGNvbnN0IF9WYWx1ZSo+IAogICAg
Y29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIF9SZWYs
IF9QdHI+ICAgICAgICAgICAgICAgICAgIAogICAgX1NlbGY7CiAgdHlwZWRlZiBfUmJfdHJlZV9u
b2RlPF9WYWx1ZT4qIF9MaW5rX3R5cGU7CgogIF9SYl90cmVlX2l0ZXJhdG9yKCkge30KICBfUmJf
dHJlZV9pdGVyYXRvcihfTGlua190eXBlIF9feCkgeyBfTV9ub2RlID0gX194OyB9CiAgX1JiX3Ry
ZWVfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIF9faXQpIHsgX01fbm9kZSA9IF9faXQuX01fbm9k
ZTsgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX0xpbmtfdHlwZShf
TV9ub2RlKS0+X01fdmFsdWVfZmllbGQ7IH0KCiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3Qg
eyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCgogIF9TZWxmJiBvcGVyYXRvcisrKCkgeyBfTV9p
bmNyZW1lbnQoKTsgcmV0dXJuICp0aGlzOyB9CiAgX1NlbGYgb3BlcmF0b3IrKyhpbnQpIHsKICAg
IF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICBfTV9pbmNyZW1lbnQoKTsKICAgIHJldHVybiBfX3Rt
cDsKICB9CiAgICAKICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsgX01fZGVjcmVtZW50KCk7IHJldHVy
biAqdGhpczsgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0
aGlzOwogICAgX01fZGVjcmVtZW50KCk7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwoKaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yJiBfX3gsCiAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfYmFzZV9pdGVyYXRvciYgX195KSB7CiAg
cmV0dXJuIF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlOwp9CgppbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IF9SYl90cmVlX2Jhc2VfaXRlcmF0b3ImIF9feCwKICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yJiBfX3kpIHsKICByZXR1cm4gX194Ll9N
X25vZGUgIT0gX195Ll9NX25vZGU7Cn0KCiMgMjE0ICIvaG9tZS90di90b29scy9nbnUvcnM2MDAw
L2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvLi4v
Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfdHJlZS5oIiAzCgoKaW5saW5lIHZvaWQgCl9SYl90
cmVlX3JvdGF0ZV9sZWZ0KF9SYl90cmVlX25vZGVfYmFzZSogX194LCBfUmJfdHJlZV9ub2RlX2Jh
c2UqJiBfX3Jvb3QpCnsKICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9feC0+X01fcmlnaHQ7
CiAgX194LT5fTV9yaWdodCA9IF9feS0+X01fbGVmdDsKICBpZiAoX195LT5fTV9sZWZ0ICE9MCkK
ICAgIF9feS0+X01fbGVmdC0+X01fcGFyZW50ID0gX194OwogIF9feS0+X01fcGFyZW50ID0gX194
LT5fTV9wYXJlbnQ7CgogIGlmIChfX3ggPT0gX19yb290KQogICAgX19yb290ID0gX195OwogIGVs
c2UgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCkKICAgIF9feC0+X01fcGFyZW50
LT5fTV9sZWZ0ID0gX195OwogIGVsc2UKICAgIF9feC0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9f
eTsKICBfX3ktPl9NX2xlZnQgPSBfX3g7CiAgX194LT5fTV9wYXJlbnQgPSBfX3k7Cn0KCmlubGlu
ZSB2b2lkIApfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gsIF9S
Yl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKewogIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0g
X194LT5fTV9sZWZ0OwogIF9feC0+X01fbGVmdCA9IF9feS0+X01fcmlnaHQ7CiAgaWYgKF9feS0+
X01fcmlnaHQgIT0gMCkKICAgIF9feS0+X01fcmlnaHQtPl9NX3BhcmVudCA9IF9feDsKICBfX3kt
Pl9NX3BhcmVudCA9IF9feC0+X01fcGFyZW50OwoKICBpZiAoX194ID09IF9fcm9vdCkKICAgIF9f
cm9vdCA9IF9feTsKICBlbHNlIGlmIChfX3ggPT0gX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0KQog
ICAgX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX195OwogIGVsc2UKICAgIF9feC0+X01fcGFy
ZW50LT5fTV9sZWZ0ID0gX195OwogIF9feS0+X01fcmlnaHQgPSBfX3g7CiAgX194LT5fTV9wYXJl
bnQgPSBfX3k7Cn0KCmlubGluZSB2b2lkIApfUmJfdHJlZV9yZWJhbGFuY2UoX1JiX3RyZWVfbm9k
ZV9iYXNlKiBfX3gsIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKewogIF9feC0+X01fY29s
b3IgPSBfU19yYl90cmVlX3JlZDsKICB3aGlsZSAoX194ICE9IF9fcm9vdCAmJiBfX3gtPl9NX3Bh
cmVudC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgIGlmIChfX3gtPl9NX3BhcmVu
dCA9PSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9sZWZ0KSB7CiAgICAgIF9SYl90cmVl
X25vZGVfYmFzZSogX195ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fcmlnaHQ7CiAg
ICAgIGlmIChfX3kgJiYgX195LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkgewogICAgICAg
IF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgX195
LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9N
X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICBfX3ggPSBfX3gtPl9N
X3BhcmVudC0+X01fcGFyZW50OwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIGlmIChfX3gg
PT0gX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0KSB7CiAgICAgICAgICBfX3ggPSBfX3gtPl9NX3Bh
cmVudDsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feCwgX19yb290KTsKICAgICAg
ICB9CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsK
ICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVf
cmVkOwogICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3gtPl9NX3BhcmVudC0+X01fcGFy
ZW50LCBfX3Jvb3QpOwogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgX1JiX3RyZWVfbm9k
ZV9iYXNlKiBfX3kgPSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9sZWZ0OwogICAgICBp
ZiAoX195ICYmIF9feS0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgICAgICBfX3gt
Pl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feS0+X01f
Y29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJl
bnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgX194ID0gX194LT5fTV9wYXJl
bnQtPl9NX3BhcmVudDsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBpZiAoX194ID09IF9f
eC0+X01fcGFyZW50LT5fTV9sZWZ0KSB7CiAgICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudDsK
ICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3gsIF9fcm9vdCk7CiAgICAgICAgfQog
ICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAg
ICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsK
ICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LCBf
X3Jvb3QpOwogICAgICB9CiAgICB9CiAgfQogIF9fcm9vdC0+X01fY29sb3IgPSBfU19yYl90cmVl
X2JsYWNrOwp9CgppbmxpbmUgX1JiX3RyZWVfbm9kZV9iYXNlKgpfUmJfdHJlZV9yZWJhbGFuY2Vf
Zm9yX2VyYXNlKF9SYl90cmVlX25vZGVfYmFzZSogX196LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX2xlZnRtb3N0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcmlnaHRtb3N0KQp7CiAgX1JiX3Ry
ZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3o7CiAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3ggPSAwOwog
IF9SYl90cmVlX25vZGVfYmFzZSogX194X3BhcmVudCA9IDA7CiAgaWYgKF9feS0+X01fbGVmdCA9
PSAwKSAgICAgIAogICAgX194ID0gX195LT5fTV9yaWdodDsgICAgICAKICBlbHNlCiAgICBpZiAo
X195LT5fTV9yaWdodCA9PSAwKSAgIAogICAgICBfX3ggPSBfX3ktPl9NX2xlZnQ7ICAgICAKICAg
IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgCiAgICAgIF9feSA9IF9feS0+X01fcmlnaHQ7ICAg
IAogICAgICB3aGlsZSAoX195LT5fTV9sZWZ0ICE9IDApCiAgICAgICAgX195ID0gX195LT5fTV9s
ZWZ0OwogICAgICBfX3ggPSBfX3ktPl9NX3JpZ2h0OwogICAgfQogIGlmIChfX3kgIT0gX196KSB7
ICAgICAgICAgICAKICAgIF9fei0+X01fbGVmdC0+X01fcGFyZW50ID0gX195OyAKICAgIF9feS0+
X01fbGVmdCA9IF9fei0+X01fbGVmdDsKICAgIGlmIChfX3kgIT0gX196LT5fTV9yaWdodCkgewog
ICAgICBfX3hfcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgIGlmIChfX3gpIF9feC0+X01f
cGFyZW50ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgIF9feS0+X01fcGFyZW50LT5fTV9sZWZ0ID0g
X194OyAgICAgICAKICAgICAgX195LT5fTV9yaWdodCA9IF9fei0+X01fcmlnaHQ7CiAgICAgIF9f
ei0+X01fcmlnaHQtPl9NX3BhcmVudCA9IF9feTsKICAgIH0KICAgIGVsc2UKICAgICAgX194X3Bh
cmVudCA9IF9feTsgIAogICAgaWYgKF9fcm9vdCA9PSBfX3opCiAgICAgIF9fcm9vdCA9IF9feTsK
ICAgIGVsc2UgaWYgKF9fei0+X01fcGFyZW50LT5fTV9sZWZ0ID09IF9feikKICAgICAgX196LT5f
TV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7CiAgICBlbHNlIAogICAgICBfX3otPl9NX3BhcmVudC0+
X01fcmlnaHQgPSBfX3k7CiAgICBfX3ktPl9NX3BhcmVudCA9IF9fei0+X01fcGFyZW50OwogICAg
IDo6c3dhcChfX3ktPl9NX2NvbG9yLCBfX3otPl9NX2NvbG9yKTsKICAgIF9feSA9IF9fejsKICAg
ICAKICB9CiAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgX194X3BhcmVudCA9
IF9feS0+X01fcGFyZW50OwogICAgaWYgKF9feCkgX194LT5fTV9wYXJlbnQgPSBfX3ktPl9NX3Bh
cmVudDsgICAKICAgIGlmIChfX3Jvb3QgPT0gX196KQogICAgICBfX3Jvb3QgPSBfX3g7CiAgICBl
bHNlIAogICAgICBpZiAoX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPT0gX196KQogICAgICAgIF9f
ei0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX194OwogICAgICBlbHNlCiAgICAgICAgX196LT5fTV9w
YXJlbnQtPl9NX3JpZ2h0ID0gX194OwogICAgaWYgKF9fbGVmdG1vc3QgPT0gX196KSAKICAgICAg
aWYgKF9fei0+X01fcmlnaHQgPT0gMCkgICAgICAgICAKICAgICAgICBfX2xlZnRtb3N0ID0gX196
LT5fTV9wYXJlbnQ7CiAgICAgCiAgICAgIGVsc2UKICAgICAgICBfX2xlZnRtb3N0ID0gX1JiX3Ry
ZWVfbm9kZV9iYXNlOjpfU19taW5pbXVtKF9feCk7CiAgICBpZiAoX19yaWdodG1vc3QgPT0gX196
KSAgCiAgICAgIGlmIChfX3otPl9NX2xlZnQgPT0gMCkgICAgICAgICAgCiAgICAgICAgX19yaWdo
dG1vc3QgPSBfX3otPl9NX3BhcmVudDsgIAogICAgIAogICAgICBlbHNlICAgICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICBfX3JpZ2h0bW9zdCA9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWF4
aW11bShfX3gpOwogIH0KICBpZiAoX195LT5fTV9jb2xvciAhPSBfU19yYl90cmVlX3JlZCkgeyAK
ICAgIHdoaWxlIChfX3ggIT0gX19yb290ICYmIChfX3ggPT0gMCB8fCBfX3gtPl9NX2NvbG9yID09
IF9TX3JiX3RyZWVfYmxhY2spKQogICAgICBpZiAoX194ID09IF9feF9wYXJlbnQtPl9NX2xlZnQp
IHsKICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fdyA9IF9feF9wYXJlbnQtPl9NX3JpZ2h0
OwogICAgICAgIGlmIChfX3ctPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfcmVkKSB7CiAgICAgICAg
ICBfX3ctPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICAgIF9feF9wYXJlbnQt
Pl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVm
dChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fcmln
aHQ7CiAgICAgICAgfQogICAgICAgIGlmICgoX193LT5fTV9sZWZ0ID09IDAgfHwgCiAgICAgICAg
ICAgICBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spICYmCiAgICAg
ICAgICAgIChfX3ctPl9NX3JpZ2h0ID09IDAgfHwgCiAgICAgICAgICAgICBfX3ctPl9NX3JpZ2h0
LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNrKSkgewogICAgICAgICAgX193LT5fTV9jb2xv
ciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgICAgX194ID0gX194X3BhcmVudDsKICAgICAgICAg
IF9feF9wYXJlbnQgPSBfX3hfcGFyZW50LT5fTV9wYXJlbnQ7CiAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgIGlmIChfX3ctPl9NX3JpZ2h0ID09IDAgfHwgCiAgICAgICAgICAgICAgX193LT5fTV9y
aWdodC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjaykgewogICAgICAgICAgICBpZiAoX193
LT5fTV9sZWZ0KSBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAg
ICAgICAgICAgX193LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgICAgICBfUmJf
dHJlZV9yb3RhdGVfcmlnaHQoX193LCBfX3Jvb3QpOwogICAgICAgICAgICBfX3cgPSBfX3hfcGFy
ZW50LT5fTV9yaWdodDsKICAgICAgICAgIH0KICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfX3hf
cGFyZW50LT5fTV9jb2xvcjsKICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJf
dHJlZV9ibGFjazsKICAgICAgICAgIGlmIChfX3ctPl9NX3JpZ2h0KSBfX3ctPl9NX3JpZ2h0LT5f
TV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVm
dChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9
IGVsc2UgeyAgICAgICAgICAgICAgICAgICAKICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9f
dyA9IF9feF9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgICAgaWYgKF9fdy0+X01fY29sb3IgPT0gX1Nf
cmJfdHJlZV9yZWQpIHsKICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNr
OwogICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAg
ICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAg
X193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAgICAgICB9CiAgICAgICAgaWYgKChfX3ctPl9N
X3JpZ2h0ID09IDAgfHwgCiAgICAgICAgICAgICBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9PSBf
U19yYl90cmVlX2JsYWNrKSAmJgogICAgICAgICAgICAoX193LT5fTV9sZWZ0ID09IDAgfHwgCiAg
ICAgICAgICAgICBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spKSB7
CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgICBfX3gg
PSBfX3hfcGFyZW50OwogICAgICAgICAgX194X3BhcmVudCA9IF9feF9wYXJlbnQtPl9NX3BhcmVu
dDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCA9PSAwIHx8IAog
ICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjaykg
ewogICAgICAgICAgICBpZiAoX193LT5fTV9yaWdodCkgX193LT5fTV9yaWdodC0+X01fY29sb3Ig
PSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJfdHJl
ZV9yZWQ7CiAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9fdywgX19yb290KTsKICAg
ICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAgICAgICAgIH0KICAgICAgICAg
IF9fdy0+X01fY29sb3IgPSBfX3hfcGFyZW50LT5fTV9jb2xvcjsKICAgICAgICAgIF9feF9wYXJl
bnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICAgIGlmIChfX3ctPl9NX2xl
ZnQpIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAg
X1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICBicmVh
azsKICAgICAgICB9CiAgICAgIH0KICAgIGlmIChfX3gpIF9feC0+X01fY29sb3IgPSBfU19yYl90
cmVlX2JsYWNrOwogIH0KICByZXR1cm4gX195Owp9CgogCiAKIAogCgoKCiAKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jLCBib29sIF9TX2luc3RhbmNlbGVzcz4KY2xhc3MgX1JiX3Ry
ZWVfYWxsb2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8
X1RwLCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3Jf
dHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3I7IH0K
CiAgX1JiX3RyZWVfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBf
TV9ub2RlX2FsbG9jYXRvcihfX2EpLCBfTV9oZWFkZXIoMCkge30KCnByb3RlY3RlZDoKICB0eXBl
bmFtZSBfQWxsb2NfdHJhaXRzPF9SYl90cmVlX25vZGU8X1RwPiwgX0FsbG9jPjo6YWxsb2NhdG9y
X3R5cGUKICAgICAgICAgICBfTV9ub2RlX2FsbG9jYXRvcjsKICBfUmJfdHJlZV9ub2RlPF9UcD4q
IF9NX2hlYWRlcjsKCiAgX1JiX3RyZWVfbm9kZTxfVHA+KiBfTV9nZXRfbm9kZSgpIAogICAgeyBy
ZXR1cm4gX01fbm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7IH0KICB2b2lkIF9NX3B1dF9ub2Rl
KF9SYl90cmVlX25vZGU8X1RwPiogX19wKSAKICAgIHsgX01fbm9kZV9hbGxvY2F0b3IuZGVhbGxv
Y2F0ZShfX3AsIDEpOyB9Cn07CgogCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K
Y2xhc3MgX1JiX3RyZWVfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywgdHJ1ZT4gewpwdWJsaWM6CiAg
dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6YWxsb2NhdG9yX3R5
cGUgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0
IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgX1JiX3RyZWVfYWxsb2NfYmFzZShjb25z
dCBhbGxvY2F0b3JfdHlwZSYpIDogX01faGVhZGVyKDApIHt9Cgpwcm90ZWN0ZWQ6CiAgX1JiX3Ry
ZWVfbm9kZTxfVHA+KiBfTV9oZWFkZXI7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0
czxfUmJfdHJlZV9ub2RlPF9UcD4sIF9BbGxvYz46Ol9BbGxvY190eXBlCiAgICAgICAgICBfQWxs
b2NfdHlwZTsKCiAgX1JiX3RyZWVfbm9kZTxfVHA+KiBfTV9nZXRfbm9kZSgpCiAgICB7IHJldHVy
biBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoMSk7IH0KICB2b2lkIF9NX3B1dF9ub2RlKF9SYl90cmVl
X25vZGU8X1RwPiogX19wKQogICAgeyBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIDEpOyB9
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfUmJfdHJlZV9i
YXNlCiAgOiBwdWJsaWMgX1JiX3RyZWVfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0
YW5jZWxlc3M+CnsKICB0eXBlZGVmIF9SYl90cmVlX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+Ojpf
U19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNl
OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX1JiX3RyZWVfYmFzZShjb25zdCBh
bGxvY2F0b3JfdHlwZSYgX19hKSAKICAgIDogX0Jhc2UoX19hKSB7IF9NX2hlYWRlciA9IF9NX2dl
dF9ub2RlKCk7IH0KICB+X1JiX3RyZWVfYmFzZSgpIHsgX01fcHV0X25vZGUoX01faGVhZGVyKTsg
fQoKfTsKCiMgNTE5ICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2dj
Yy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9n
KystMy9zdGxfdHJlZS5oIiAzCgoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwg
Y2xhc3MgX0tleU9mVmFsdWUsIGNsYXNzIF9Db21wYXJlLAogICAgICAgICAgY2xhc3MgX0FsbG9j
ID0gYWxsb2NhdG9yPCBfVmFsdWUgPiAgPgpjbGFzcyBfUmJfdHJlZSA6IHByb3RlY3RlZCBfUmJf
dHJlZV9iYXNlPF9WYWx1ZSwgX0FsbG9jPiB7CiAgdHlwZWRlZiBfUmJfdHJlZV9iYXNlPF9WYWx1
ZSwgX0FsbG9jPiBfQmFzZTsKcHJvdGVjdGVkOgogIHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9iYXNl
KiBfQmFzZV9wdHI7CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWx1ZT4gX1JiX3RyZWVfbm9k
ZTsKICB0eXBlZGVmIF9SYl90cmVlX0NvbG9yX3R5cGUgX0NvbG9yX3R5cGU7CnB1YmxpYzoKICB0
eXBlZGVmIF9LZXkga2V5X3R5cGU7CiAgdHlwZWRlZiBfVmFsdWUgdmFsdWVfdHlwZTsKICB0eXBl
ZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25z
dF9wb2ludGVyOwogIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29u
c3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1JiX3RyZWVfbm9kZSog
X0xpbmtfdHlwZTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZm
X3QgZGlmZmVyZW5jZV90eXBlOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3Jf
dHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29u
c3QgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKcHJvdGVjdGVkOgoKCgoKCgpw
cm90ZWN0ZWQ6CgogIF9MaW5rX3R5cGUgX01fY3JlYXRlX25vZGUoY29uc3QgdmFsdWVfdHlwZSYg
X194KQogIHsKICAgIF9MaW5rX3R5cGUgX190bXAgPSBfTV9nZXRfbm9kZSgpOwogICAgdHJ5ICB7
CiAgICAgIGNvbnN0cnVjdCgmX190bXAtPl9NX3ZhbHVlX2ZpZWxkLCBfX3gpOwogICAgfQogICAg
Y2F0Y2goLi4uKSB7ICBfTV9wdXRfbm9kZShfX3RtcCkgOyB0aHJvdzsgfSA7CiAgICByZXR1cm4g
X190bXA7CiAgfQoKICBfTGlua190eXBlIF9NX2Nsb25lX25vZGUoX0xpbmtfdHlwZSBfX3gpCiAg
ewogICAgX0xpbmtfdHlwZSBfX3RtcCA9IF9NX2NyZWF0ZV9ub2RlKF9feC0+X01fdmFsdWVfZmll
bGQpOwogICAgX190bXAtPl9NX2NvbG9yID0gX194LT5fTV9jb2xvcjsKICAgIF9fdG1wLT5fTV9s
ZWZ0ID0gMDsKICAgIF9fdG1wLT5fTV9yaWdodCA9IDA7CiAgICByZXR1cm4gX190bXA7CiAgfQoK
ICB2b2lkIGRlc3Ryb3lfbm9kZShfTGlua190eXBlIF9fcCkKICB7CiAgICBkZXN0cm95KCZfX3At
Pl9NX3ZhbHVlX2ZpZWxkKTsKICAgIF9NX3B1dF9ub2RlKF9fcCk7CiAgfQoKcHJvdGVjdGVkOgog
IHNpemVfdHlwZSBfTV9ub2RlX2NvdW50OyAgCiAgX0NvbXBhcmUgX01fa2V5X2NvbXBhcmU7Cgog
IF9MaW5rX3R5cGUmIF9NX3Jvb3QoKSBjb25zdCAKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikg
X01faGVhZGVyLT5fTV9wYXJlbnQ7IH0KICBfTGlua190eXBlJiBfTV9sZWZ0bW9zdCgpIGNvbnN0
IAogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKSBfTV9oZWFkZXItPl9NX2xlZnQ7IH0KICBfTGlu
a190eXBlJiBfTV9yaWdodG1vc3QoKSBjb25zdCAKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikg
X01faGVhZGVyLT5fTV9yaWdodDsgfQoKICBzdGF0aWMgX0xpbmtfdHlwZSYgX1NfbGVmdChfTGlu
a190eXBlIF9feCkKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9sZWZ0KTsgfQog
IHN0YXRpYyBfTGlua190eXBlJiBfU19yaWdodChfTGlua190eXBlIF9feCkKICAgIHsgcmV0dXJu
IChfTGlua190eXBlJikoX194LT5fTV9yaWdodCk7IH0KICBzdGF0aWMgX0xpbmtfdHlwZSYgX1Nf
cGFyZW50KF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9N
X3BhcmVudCk7IH0KICBzdGF0aWMgcmVmZXJlbmNlIF9TX3ZhbHVlKF9MaW5rX3R5cGUgX194KQog
ICAgeyByZXR1cm4gX194LT5fTV92YWx1ZV9maWVsZDsgfQogIHN0YXRpYyBjb25zdCBfS2V5JiBf
U19rZXkoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiBfS2V5T2ZWYWx1ZSgpKF9TX3ZhbHVl
KF9feCkpOyB9CiAgc3RhdGljIF9Db2xvcl90eXBlJiBfU19jb2xvcihfTGlua190eXBlIF9feCkK
ICAgIHsgcmV0dXJuIChfQ29sb3JfdHlwZSYpKF9feC0+X01fY29sb3IpOyB9CgogIHN0YXRpYyBf
TGlua190eXBlJiBfU19sZWZ0KF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiAoX0xpbmtfdHlw
ZSYpKF9feC0+X01fbGVmdCk7IH0KICBzdGF0aWMgX0xpbmtfdHlwZSYgX1NfcmlnaHQoX0Jhc2Vf
cHRyIF9feCkKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9yaWdodCk7IH0KICBz
dGF0aWMgX0xpbmtfdHlwZSYgX1NfcGFyZW50KF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiAo
X0xpbmtfdHlwZSYpKF9feC0+X01fcGFyZW50KTsgfQogIHN0YXRpYyByZWZlcmVuY2UgX1NfdmFs
dWUoX0Jhc2VfcHRyIF9feCkKICAgIHsgcmV0dXJuICgoX0xpbmtfdHlwZSlfX3gpLT5fTV92YWx1
ZV9maWVsZDsgfQogIHN0YXRpYyBjb25zdCBfS2V5JiBfU19rZXkoX0Jhc2VfcHRyIF9feCkKICAg
IHsgcmV0dXJuIF9LZXlPZlZhbHVlKCkoX1NfdmFsdWUoX0xpbmtfdHlwZShfX3gpKSk7fSAKICBz
dGF0aWMgX0NvbG9yX3R5cGUmIF9TX2NvbG9yKF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiAo
X0NvbG9yX3R5cGUmKShfTGlua190eXBlKF9feCktPl9NX2NvbG9yKTsgfQoKICBzdGF0aWMgX0xp
bmtfdHlwZSBfU19taW5pbXVtKF9MaW5rX3R5cGUgX194KSAKICAgIHsgcmV0dXJuIChfTGlua190
eXBlKSAgX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19taW5pbXVtKF9feCk7IH0KCiAgc3RhdGljIF9M
aW5rX3R5cGUgX1NfbWF4aW11bShfTGlua190eXBlIF9feCkKICAgIHsgcmV0dXJuIChfTGlua190
eXBlKSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX194KTsgfQoKcHVibGljOgogIHR5
cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8dmFsdWVfdHlwZSwgcmVmZXJlbmNlLCBwb2ludGVyPiBp
dGVyYXRvcjsKICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPHZhbHVlX3R5cGUsIGNvbnN0X3Jl
ZmVyZW5jZSwgY29uc3RfcG9pbnRlcj4gCiAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKCgogIHR5
cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVy
YXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0
b3I7CgoKCgoKCgogCgpwcml2YXRlOgogIGl0ZXJhdG9yIF9NX2luc2VydChfQmFzZV9wdHIgX194
LCBfQmFzZV9wdHIgX195LCBjb25zdCB2YWx1ZV90eXBlJiBfX3YpOwogIF9MaW5rX3R5cGUgX01f
Y29weShfTGlua190eXBlIF9feCwgX0xpbmtfdHlwZSBfX3ApOwogIHZvaWQgX01fZXJhc2UoX0xp
bmtfdHlwZSBfX3gpOwoKcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
ICBfUmJfdHJlZSgpCiAgICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkpLCBfTV9ub2RlX2NvdW50
KDApLCBfTV9rZXlfY29tcGFyZSgpCiAgICB7IF9NX2VtcHR5X2luaXRpYWxpemUoKTsgfQoKICBf
UmJfdHJlZShjb25zdCBfQ29tcGFyZSYgX19jb21wKQogICAgOiBfQmFzZShhbGxvY2F0b3JfdHlw
ZSgpKSwgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBhcmUoX19jb21wKSAKICAgIHsgX01f
ZW1wdHlfaW5pdGlhbGl6ZSgpOyB9CgogIF9SYl90cmVlKGNvbnN0IF9Db21wYXJlJiBfX2NvbXAs
IGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9CYXNlKF9fYSksIF9NX25vZGVfY291
bnQoMCksIF9NX2tleV9jb21wYXJlKF9fY29tcCkgCiAgICB7IF9NX2VtcHR5X2luaXRpYWxpemUo
KTsgfQoKICBfUmJfdHJlZShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxf
Q29tcGFyZSxfQWxsb2M+JiBfX3gpIAogICAgOiBfQmFzZShfX3guZ2V0X2FsbG9jYXRvcigpKSwK
ICAgICAgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBhcmUoX194Ll9NX2tleV9jb21wYXJl
KQogIHsgCiAgICBpZiAoX194Ll9NX3Jvb3QoKSA9PSAwKQogICAgICBfTV9lbXB0eV9pbml0aWFs
aXplKCk7CiAgICBlbHNlIHsKICAgICAgX1NfY29sb3IoX01faGVhZGVyKSA9IF9TX3JiX3RyZWVf
cmVkOwogICAgICBfTV9yb290KCkgPSBfTV9jb3B5KF9feC5fTV9yb290KCksIF9NX2hlYWRlcik7
CiAgICAgIF9NX2xlZnRtb3N0KCkgPSBfU19taW5pbXVtKF9NX3Jvb3QoKSk7CiAgICAgIF9NX3Jp
Z2h0bW9zdCgpID0gX1NfbWF4aW11bShfTV9yb290KCkpOwogICAgfQogICAgX01fbm9kZV9jb3Vu
dCA9IF9feC5fTV9ub2RlX2NvdW50OwogIH0KICB+X1JiX3RyZWUoKSB7IGNsZWFyKCk7IH0KICBf
UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiAKICBvcGVy
YXRvcj0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs
bG9jPiYgX194KTsKCnByaXZhdGU6CiAgdm9pZCBfTV9lbXB0eV9pbml0aWFsaXplKCkgewogICAg
X1NfY29sb3IoX01faGVhZGVyKSA9IF9TX3JiX3RyZWVfcmVkOyAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIF9NX3Jvb3QoKSA9IDA7CiAgICBfTV9sZWZ0
bW9zdCgpID0gX01faGVhZGVyOwogICAgX01fcmlnaHRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgfQoK
cHVibGljOiAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgX0NvbXBhcmUg
a2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV9rZXlfY29tcGFyZTsgfQogIGl0ZXJhdG9yIGJl
Z2luKCkgeyByZXR1cm4gX01fbGVmdG1vc3QoKTsgfQogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gX01fbGVmdG1vc3QoKTsgfQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJu
IF9NX2hlYWRlcjsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX2hl
YWRlcjsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVy
YXRvcihlbmQoKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsg
CiAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IAogIH0KICByZXZlcnNl
X2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CiAg
Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyAKICAgIHJldHVybiBjb25zdF9y
ZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOwogIH0gCiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIF9NX25vZGVfY291bnQgPT0gMDsgfQogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1
cm4gX01fbm9kZV9jb3VudDsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IHNpemVfdHlwZSgtMSk7IH0KCiAgdm9pZCBzd2FwKF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlP
ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9fdCkgewogICAgIDo6c3dhcChfTV9oZWFkZXIsIF9f
dC5fTV9oZWFkZXIpOwogICAgIDo6c3dhcChfTV9ub2RlX2NvdW50LCBfX3QuX01fbm9kZV9jb3Vu
dCk7CiAgICAgOjpzd2FwKF9NX2tleV9jb21wYXJlLCBfX3QuX01fa2V5X2NvbXBhcmUpOwogIH0K
ICAgIApwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIHBhaXI8aXRl
cmF0b3IsYm9vbD4gaW5zZXJ0X3VuaXF1ZShjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwogIGl0ZXJh
dG9yIGluc2VydF9lcXVhbChjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwoKICBpdGVyYXRvciBpbnNl
cnRfdW5pcXVlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CiAg
aXRlcmF0b3IgaW5zZXJ0X2VxdWFsKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5
cGUmIF9feCk7CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNl
cnRfdW5pcXVlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCk7
CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0X2VxdWFsKF9J
bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCk7CgoKCgoKCgogIHZv
aWQgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbik7CiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IGtl
eV90eXBlJiBfX3gpOwogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19s
YXN0KTsKICB2b2lkIGVyYXNlKGNvbnN0IGtleV90eXBlKiBfX2ZpcnN0LCBjb25zdCBrZXlfdHlw
ZSogX19sYXN0KTsKICB2b2lkIGNsZWFyKCkgewogICAgaWYgKF9NX25vZGVfY291bnQgIT0gMCkg
ewogICAgICBfTV9lcmFzZShfTV9yb290KCkpOwogICAgICBfTV9sZWZ0bW9zdCgpID0gX01faGVh
ZGVyOwogICAgICBfTV9yb290KCkgPSAwOwogICAgICBfTV9yaWdodG1vc3QoKSA9IF9NX2hlYWRl
cjsKICAgICAgX01fbm9kZV9jb3VudCA9IDA7CiAgICB9CiAgfSAgICAgIAoKcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90
eXBlJiBfX3gpOwogIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29u
c3Q7CiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwogIGl0ZXJh
dG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpOwogIGNvbnN0X2l0ZXJhdG9yIGxv
d2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwogIGl0ZXJhdG9yIHVwcGVyX2Jv
dW5kKGNvbnN0IGtleV90eXBlJiBfX3gpOwogIGNvbnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5kKGNv
bnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwogIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFs
X3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpOwogIHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0
X2l0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsKCnB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgYm9vbCBfX3JiX3ZlcmlmeSgp
IGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tl
eU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5l
IGJvb2wgCm9wZXJhdG9yPT0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPiYgX194LCAKICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9W
YWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gX194LnNp
emUoKSA9PSBfX3kuc2l6ZSgpICYmCiAgICAgICAgIGVxdWFsKF9feC5iZWdpbigpLCBfX3guZW5k
KCksIF9feS5iZWdpbigpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwg
Y2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxv
Yz4KaW5saW5lIGJvb2wgCm9wZXJhdG9yPChjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5
T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsIAogICAgICAgICAgY29uc3QgX1JiX3RyZWU8
X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQp7CiAgcmV0dXJu
IGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsKfQoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAg
ICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCAKc3dhcChf
UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsIAog
ICAgIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9f
eSkKewogIF9feC5zd2FwKF9feSk7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf
VmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFz
cyBfQWxsb2M+Cl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz4mIApfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAg
OjpvcGVyYXRvcj0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBh
cmUsX0FsbG9jPiYgX194KQp7CiAgaWYgKHRoaXMgIT0gJl9feCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKICAgIGNsZWFyKCk7CiAgICBfTV9ub2RlX2NvdW50ID0gMDsKICAg
IF9NX2tleV9jb21wYXJlID0gX194Ll9NX2tleV9jb21wYXJlOyAgICAgICAgCiAgICBpZiAoX194
Ll9NX3Jvb3QoKSA9PSAwKSB7CiAgICAgIF9NX3Jvb3QoKSA9IDA7CiAgICAgIF9NX2xlZnRtb3N0
KCkgPSBfTV9oZWFkZXI7CiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01faGVhZGVyOwogICAgfQog
ICAgZWxzZSB7CiAgICAgIF9NX3Jvb3QoKSA9IF9NX2NvcHkoX194Ll9NX3Jvb3QoKSwgX01faGVh
ZGVyKTsKICAgICAgX01fbGVmdG1vc3QoKSA9IF9TX21pbmltdW0oX01fcm9vdCgpKTsKICAgICAg
X01fcmlnaHRtb3N0KCkgPSBfU19tYXhpbXVtKF9NX3Jvb3QoKSk7CiAgICAgIF9NX25vZGVfY291
bnQgPSBfX3guX01fbm9kZV9jb3VudDsKICAgIH0KICB9CiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAg
ICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5
LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgpfUmJfdHJlZTxf
S2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjpfTV9pbnNlcnQoX0Jh
c2VfcHRyIF9feF8sIF9CYXNlX3B0ciBfX3lfLCBjb25zdCBfVmFsdWUmIF9fdikKewogIF9MaW5r
X3R5cGUgX194ID0gKF9MaW5rX3R5cGUpIF9feF87CiAgX0xpbmtfdHlwZSBfX3kgPSAoX0xpbmtf
dHlwZSkgX195XzsKICBfTGlua190eXBlIF9fejsKCiAgaWYgKF9feSA9PSBfTV9oZWFkZXIgfHwg
X194ICE9IDAgfHwgCiAgICAgIF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nf
a2V5KF9feSkpKSB7CiAgICBfX3ogPSBfTV9jcmVhdGVfbm9kZShfX3YpOwogICAgX1NfbGVmdChf
X3kpID0gX196OyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICBpZiAoX195ID09IF9NX2hlYWRlcikgewogICAgICBfTV9yb290KCkgPSBf
X3o7CiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX196OwogICAgfQogICAgZWxzZSBpZiAoX195ID09
IF9NX2xlZnRtb3N0KCkpCiAgICAgIF9NX2xlZnRtb3N0KCkgPSBfX3o7ICAgIAogIH0KICBlbHNl
IHsKICAgIF9feiA9IF9NX2NyZWF0ZV9ub2RlKF9fdik7CiAgICBfU19yaWdodChfX3kpID0gX196
OwogICAgaWYgKF9feSA9PSBfTV9yaWdodG1vc3QoKSkKICAgICAgX01fcmlnaHRtb3N0KCkgPSBf
X3o7ICAgCiAgfQogIF9TX3BhcmVudChfX3opID0gX195OwogIF9TX2xlZnQoX196KSA9IDA7CiAg
X1NfcmlnaHQoX196KSA9IDA7CiAgX1JiX3RyZWVfcmViYWxhbmNlKF9feiwgX01faGVhZGVyLT5f
TV9wYXJlbnQpOwogICsrX01fbm9kZV9jb3VudDsKICByZXR1cm4gaXRlcmF0b3IoX196KTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAog
ICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8
X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3Ry
ZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6aW5zZXJ0X2Vx
dWFsKGNvbnN0IF9WYWx1ZSYgX192KQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAg
X0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CiAgd2hpbGUgKF9feCAhPSAwKSB7CiAgICBfX3kg
PSBfX3g7CiAgICBfX3ggPSBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tl
eShfX3gpKSA/IAogICAgICAgICAgICBfU19sZWZ0KF9feCkgOiBfU19yaWdodChfX3gpOwogIH0K
ICByZXR1cm4gX01faW5zZXJ0KF9feCwgX195LCBfX3YpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9L
ZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0Nv
bXBhcmUsIGNsYXNzIF9BbGxvYz4KcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvciwgCiAgICAgYm9vbD4KX1JiX3Ry
ZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6aW5zZXJ0X3Vu
aXF1ZShjb25zdCBfVmFsdWUmIF9fdikKewogIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwog
IF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwogIGJvb2wgX19jb21wID0gdHJ1ZTsKICB3aGls
ZSAoX194ICE9IDApIHsKICAgIF9feSA9IF9feDsKICAgIF9fY29tcCA9IF9NX2tleV9jb21wYXJl
KF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9feCkpOwogICAgX194ID0gX19jb21wID8gX1Nf
bGVmdChfX3gpIDogX1NfcmlnaHQoX194KTsKICB9CiAgaXRlcmF0b3IgX19qID0gaXRlcmF0b3Io
X195KTsgICAKICBpZiAoX19jb21wKQogICAgaWYgKF9faiA9PSBiZWdpbigpKSAgICAgCiAgICAg
IHJldHVybiBwYWlyPGl0ZXJhdG9yLGJvb2w+KF9NX2luc2VydChfX3gsIF9feSwgX192KSwgdHJ1
ZSk7CiAgICBlbHNlCiAgICAgIC0tX19qOwogIGlmIChfTV9rZXlfY29tcGFyZShfU19rZXkoX19q
Ll9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgcmV0dXJuIHBhaXI8aXRlcmF0b3Is
Ym9vbD4oX01faW5zZXJ0KF9feCwgX195LCBfX3YpLCB0cnVlKTsKICByZXR1cm4gcGFpcjxpdGVy
YXRvcixib29sPihfX2osIGZhbHNlKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf
VmFsLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3Mg
X0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBh
cmUsIF9BbGxvYz46Oml0ZXJhdG9yIApfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwg
X0NvbXBhcmUsIF9BbGxvYz4KICA6Omluc2VydF91bmlxdWUoaXRlcmF0b3IgX19wb3NpdGlvbiwg
Y29uc3QgX1ZhbCYgX192KQp7CiAgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXIt
Pl9NX2xlZnQpIHsgIAogICAgaWYgKHNpemUoKSA+IDAgJiYgCiAgICAgICAgX01fa2V5X2NvbXBh
cmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSkpCiAgICAg
IHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUs
IF9fdik7CiAgICAgCiAgICBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfdW5pcXVlKF9fdikuZmly
c3Q7CiAgfSBlbHNlIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyKSB7ICAKICAg
IGlmIChfTV9rZXlfY29tcGFyZShfU19rZXkoX01fcmlnaHRtb3N0KCkpLCBfS2V5T2ZWYWx1ZSgp
KF9fdikpKQogICAgICByZXR1cm4gX01faW5zZXJ0KDAsIF9NX3JpZ2h0bW9zdCgpLCBfX3YpOwog
ICAgZWxzZQogICAgICByZXR1cm4gaW5zZXJ0X3VuaXF1ZShfX3YpLmZpcnN0OwogIH0gZWxzZSB7
CiAgICBpdGVyYXRvciBfX2JlZm9yZSA9IF9fcG9zaXRpb247CiAgICAtLV9fYmVmb3JlOwogICAg
aWYgKF9NX2tleV9jb21wYXJlKF9TX2tleShfX2JlZm9yZS5fTV9ub2RlKSwgX0tleU9mVmFsdWUo
KShfX3YpKSAKICAgICAgICAmJiBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9T
X2tleShfX3Bvc2l0aW9uLl9NX25vZGUpKSkgewogICAgICBpZiAoX1NfcmlnaHQoX19iZWZvcmUu
X01fbm9kZSkgPT0gMCkKICAgICAgICByZXR1cm4gX01faW5zZXJ0KDAsIF9fYmVmb3JlLl9NX25v
ZGUsIF9fdik7IAogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9u
Ll9NX25vZGUsIF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsKICAgICAKICAgIH0gZWxzZQogICAg
ICByZXR1cm4gaW5zZXJ0X3VuaXF1ZShfX3YpLmZpcnN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNz
IF9LZXksIGNsYXNzIF9WYWwsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9D
b21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW
YWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvciAKX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlP
ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6Omluc2VydF9lcXVhbChpdGVyYXRvciBfX3Bvc2l0
aW9uLCBjb25zdCBfVmFsJiBfX3YpCnsKICBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hl
YWRlci0+X01fbGVmdCkgeyAgCiAgICBpZiAoc2l6ZSgpID4gMCAmJiAKICAgICAgICBfTV9rZXlf
Y29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpKSkK
ICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01f
bm9kZSwgX192KTsKICAgICAKICAgIGVsc2UKICAgICAgcmV0dXJuIGluc2VydF9lcXVhbChfX3Yp
OwogIH0gZWxzZSBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hlYWRlcikgeyAKICAgIGlm
ICghX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX01fcmlnaHRtb3N0
KCkpKSkKICAgICAgcmV0dXJuIF9NX2luc2VydCgwLCBfTV9yaWdodG1vc3QoKSwgX192KTsKICAg
IGVsc2UKICAgICAgcmV0dXJuIGluc2VydF9lcXVhbChfX3YpOwogIH0gZWxzZSB7CiAgICBpdGVy
YXRvciBfX2JlZm9yZSA9IF9fcG9zaXRpb247CiAgICAtLV9fYmVmb3JlOwogICAgaWYgKCFfTV9r
ZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX2JlZm9yZS5fTV9ub2RlKSkK
ICAgICAgICAmJiAhX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSksIF9L
ZXlPZlZhbHVlKCkoX192KSkpIHsKICAgICAgaWYgKF9TX3JpZ2h0KF9fYmVmb3JlLl9NX25vZGUp
ID09IDApCiAgICAgICAgcmV0dXJuIF9NX2luc2VydCgwLCBfX2JlZm9yZS5fTV9ub2RlLCBfX3Yp
OyAKICAgICAgZWxzZQogICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2Rl
LCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CiAgICAgCiAgICB9IGVsc2UKICAgICAgcmV0dXJu
IGluc2VydF9lcXVhbChfX3YpOwogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3Mg
X1ZhbCwgY2xhc3MgX0tvViwgY2xhc3MgX0NtcCwgY2xhc3MgX0FsbG9jPgogIHRlbXBsYXRlPGNs
YXNzIF9JST4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tvVixfQ21wLF9BbGxvYz4KICA6Omlu
c2VydF9lcXVhbChfSUkgX19maXJzdCwgX0lJIF9fbGFzdCkKewogIGZvciAoIDsgX19maXJzdCAh
PSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGluc2VydF9lcXVhbCgqX19maXJzdCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsLCBjbGFzcyBfS29WLCBjbGFzcyBfQ21wLCBjbGFz
cyBfQWxsb2M+IAogIHRlbXBsYXRlPGNsYXNzIF9JST4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWws
X0tvVixfQ21wLF9BbGxvYz4KICA6Omluc2VydF91bmlxdWUoX0lJIF9fZmlyc3QsIF9JSSBfX2xh
c3QpIHsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpbnNlcnRf
dW5pcXVlKCpfX2ZpcnN0KTsKfQoKIyAxMDIxICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2dj
Yy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvLi4vLi4v
Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfdHJlZS5oIiAzCgogICAgICAgICAKdGVtcGxhdGUgPGNs
YXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xh
c3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgX1JiX3RyZWU8X0tleSxfVmFs
dWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6ZXJhc2UoaXRlcmF0b3IgX19wb3Np
dGlvbikKewogIF9MaW5rX3R5cGUgX195ID0gCiAgICAoX0xpbmtfdHlwZSkgX1JiX3RyZWVfcmVi
YWxhbmNlX2Zvcl9lcmFzZShfX3Bvc2l0aW9uLl9NX25vZGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9oZWFkZXItPl9NX3BhcmVudCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2hlYWRlci0+X01fbGVmdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2hlYWRlci0+
X01fcmlnaHQpOwogIGRlc3Ryb3lfbm9kZShfX3kpOwogIC0tX01fbm9kZV9jb3VudDsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAg
ICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tl
eSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6c2l6ZV90eXBlIApfUmJfdHJl
ZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjplcmFzZShjb25zdCBf
S2V5JiBfX3gpCnsKICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBfX3AgPSBlcXVhbF9yYW5nZShf
X3gpOwogIHNpemVfdHlwZSBfX24gPSAwOwogIGRpc3RhbmNlKF9fcC5maXJzdCwgX19wLnNlY29u
ZCwgX19uKTsKICBlcmFzZShfX3AuZmlyc3QsIF9fcC5zZWNvbmQpOwogIHJldHVybiBfX247Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsLCBjbGFzcyBfS29WLCBjbGFzcyBfQ29t
cGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS29WLCBf
Q29tcGFyZSwgX0FsbG9jPjo6X0xpbmtfdHlwZSAKX1JiX3RyZWU8X0tleSxfVmFsLF9Lb1YsX0Nv
bXBhcmUsX0FsbG9jPgogIDo6X01fY29weShfTGlua190eXBlIF9feCwgX0xpbmtfdHlwZSBfX3Ap
CnsKICAgICAgICAgICAgICAgICAgICAgICAgIAogIF9MaW5rX3R5cGUgX190b3AgPSBfTV9jbG9u
ZV9ub2RlKF9feCk7CiAgX190b3AtPl9NX3BhcmVudCA9IF9fcDsKIAogIHRyeSAgewogICAgaWYg
KF9feC0+X01fcmlnaHQpCiAgICAgIF9fdG9wLT5fTV9yaWdodCA9IF9NX2NvcHkoX1NfcmlnaHQo
X194KSwgX190b3ApOwogICAgX19wID0gX190b3A7CiAgICBfX3ggPSBfU19sZWZ0KF9feCk7Cgog
ICAgd2hpbGUgKF9feCAhPSAwKSB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01fY2xvbmVfbm9k
ZShfX3gpOwogICAgICBfX3AtPl9NX2xlZnQgPSBfX3k7CiAgICAgIF9feS0+X01fcGFyZW50ID0g
X19wOwogICAgICBpZiAoX194LT5fTV9yaWdodCkKICAgICAgICBfX3ktPl9NX3JpZ2h0ID0gX01f
Y29weShfU19yaWdodChfX3gpLCBfX3kpOwogICAgICBfX3AgPSBfX3k7CiAgICAgIF9feCA9IF9T
X2xlZnQoX194KTsKICAgIH0KICB9CiAgY2F0Y2goLi4uKSB7ICBfTV9lcmFzZShfX3RvcCkgOyB0
aHJvdzsgfSA7CgogIHJldHVybiBfX3RvcDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNz
IF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNs
YXNzIF9BbGxvYz4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+CiAgOjpfTV9lcmFzZShfTGlua190eXBlIF9feCkKewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKICB3aGlsZSAoX194ICE9IDApIHsKICAgIF9NX2VyYXNlKF9TX3Jp
Z2h0KF9feCkpOwogICAgX0xpbmtfdHlwZSBfX3kgPSBfU19sZWZ0KF9feCk7CiAgICBkZXN0cm95
X25vZGUoX194KTsKICAgIF9feCA9IF9feTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj
bGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJl
LCBjbGFzcyBfQWxsb2M+CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPgogIDo6ZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0
KQp7CiAgaWYgKF9fZmlyc3QgPT0gYmVnaW4oKSAmJiBfX2xhc3QgPT0gZW5kKCkpCiAgICBjbGVh
cigpOwogIGVsc2UKICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgZXJhc2UoX19maXJzdCsr
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFs
dWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4Kdm9pZCBfUmJfdHJl
ZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjplcmFzZShjb25z
dCBfS2V5KiBfX2ZpcnN0LCBjb25zdCBfS2V5KiBfX2xhc3QpIAp7CiAgd2hpbGUgKF9fZmlyc3Qg
IT0gX19sYXN0KSBlcmFzZSgqX19maXJzdCsrKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNs
YXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUs
IGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IgCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZh
bHVlLF9Db21wYXJlLF9BbGxvYz46OmZpbmQoY29uc3QgX0tleSYgX19rKQp7CiAgX0xpbmtfdHlw
ZSBfX3kgPSBfTV9oZWFkZXI7ICAgICAgIAogIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOyAg
ICAgICAKCiAgd2hpbGUgKF9feCAhPSAwKSAKICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5
KF9feCksIF9faykpCiAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgZWxz
ZQogICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICBpdGVyYXRvciBfX2ogPSBpdGVyYXRvcihf
X3kpOyAgIAogIHJldHVybiAoX19qID09IGVuZCgpIHx8IF9NX2tleV9jb21wYXJlKF9faywgX1Nf
a2V5KF9fai5fTV9ub2RlKSkpID8gCiAgICAgZW5kKCkgOiBfX2o7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNz
IF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9L
ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yIApfUmJfdHJlZTxfS2V5
LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpmaW5kKGNvbnN0IF9LZXkmIF9f
aykgY29uc3QKewogIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOyAgCiAgX0xpbmtfdHlwZSBf
X3ggPSBfTV9yb290KCk7ICAKCiAgd2hpbGUgKF9feCAhPSAwKSB7CiAgICBpZiAoIV9NX2tleV9j
b21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQo
X194KTsKICAgIGVsc2UKICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKICB9CiAgY29uc3RfaXRl
cmF0b3IgX19qID0gY29uc3RfaXRlcmF0b3IoX195KTsgICAKICByZXR1cm4gKF9faiA9PSBlbmQo
KSB8fCBfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX2ouX01fbm9kZSkpKSA/CiAgICBlbmQo
KSA6IF9fajsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tl
eU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5h
bWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6c2l6
ZV90eXBlIApfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
CiAgOjpjb3VudChjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICBwYWlyPGNvbnN0X2l0ZXJhdG9y
LCBjb25zdF9pdGVyYXRvcj4gX19wID0gZXF1YWxfcmFuZ2UoX19rKTsKICBzaXplX3R5cGUgX19u
ID0gMDsKICBkaXN0YW5jZShfX3AuZmlyc3QsIF9fcC5zZWNvbmQsIF9fbik7CiAgcmV0dXJuIF9f
bjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFs
dWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1Ji
X3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3Ig
Cl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6Omxv
d2VyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykKewogIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVy
OyAgCiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7ICAKCiAgd2hpbGUgKF9feCAhPSAwKSAK
ICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCiAgICAgIF9feSA9IF9f
eCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgZWxzZQogICAgICBfX3ggPSBfU19yaWdodChfX3gp
OwoKICByZXR1cm4gaXRlcmF0b3IoX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNz
IF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNs
YXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IgCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlP
ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6Omxvd2VyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykg
Y29uc3QKewogIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOyAgCiAgX0xpbmtfdHlwZSBfX3gg
PSBfTV9yb290KCk7ICAKCiAgd2hpbGUgKF9feCAhPSAwKSAKICAgIGlmICghX01fa2V5X2NvbXBh
cmUoX1Nfa2V5KF9feCksIF9faykpCiAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gp
OwogICAgZWxzZQogICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICByZXR1cm4gY29uc3RfaXRl
cmF0b3IoX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3Mg
X0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlw
ZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6
aXRlcmF0b3IgCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz4KICA6OnVwcGVyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykKewogIF9MaW5rX3R5cGUgX195ID0g
X01faGVhZGVyOyAgCiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7ICAKCiAgIHdoaWxlIChf
X3ggIT0gMCkgCiAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9feCkpKQogICAg
ICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAgZWxzZQogICAgICAgX194ID0g
X1NfcmlnaHQoX194KTsKCiAgIHJldHVybiBpdGVyYXRvcihfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFz
cyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpjb25zdF9pdGVyYXRvciAKX1JiX3RyZWU8X0tl
eSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6dXBwZXJfYm91bmQoY29u
c3QgX0tleSYgX19rKSBjb25zdAp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7ICAKICBf
TGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsgIAoKICAgd2hpbGUgKF9feCAhPSAwKSAKICAgICBp
ZiAoX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX194KSkpCiAgICAgICBfX3kgPSBfX3gsIF9f
eCA9IF9TX2xlZnQoX194KTsKICAgICBlbHNlCiAgICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoK
ICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj
bGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJl
LCBjbGFzcyBfQWxsb2M+CmlubGluZSAKcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1
ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvciwKICAgICB0eXBlbmFtZSBf
UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRv
cj4KX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6
ZXF1YWxfcmFuZ2UoY29uc3QgX0tleSYgX19rKQp7CiAgcmV0dXJuIHBhaXI8aXRlcmF0b3IsIGl0
ZXJhdG9yPihsb3dlcl9ib3VuZChfX2spLCB1cHBlcl9ib3VuZChfX2spKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tvViwgY2xhc3MgX0NvbXBhcmUsIGNs
YXNzIF9BbGxvYz4KaW5saW5lIApwYWlyPHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWx1ZSwg
X0tvViwgX0NvbXBhcmUsIF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yLAogICAgIHR5cGVuYW1lIF9S
Yl90cmVlPF9LZXksIF9WYWx1ZSwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46OmNvbnN0X2l0ZXJh
dG9yPgpfUmJfdHJlZTxfS2V5LCBfVmFsdWUsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+CiAgOjpl
cXVhbF9yYW5nZShjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICByZXR1cm4gcGFpcjxjb25zdF9p
dGVyYXRvcixjb25zdF9pdGVyYXRvcj4obG93ZXJfYm91bmQoX19rKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJfYm91bmQoX19rKSk7Cn0KCmlubGlu
ZSBpbnQgCl9fYmxhY2tfY291bnQoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX25vZGUsIF9SYl90cmVl
X25vZGVfYmFzZSogX19yb290KQp7CiAgaWYgKF9fbm9kZSA9PSAwKQogICAgcmV0dXJuIDA7CiAg
ZWxzZSB7CiAgICBpbnQgX19iYyA9IF9fbm9kZS0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFj
ayA/IDEgOiAwOwogICAgaWYgKF9fbm9kZSA9PSBfX3Jvb3QpCiAgICAgIHJldHVybiBfX2JjOwog
ICAgZWxzZQogICAgICByZXR1cm4gX19iYyArIF9fYmxhY2tfY291bnQoX19ub2RlLT5fTV9wYXJl
bnQsIF9fcm9vdCk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBj
bGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9j
Pgpib29sIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46
Ol9fcmJfdmVyaWZ5KCkgY29uc3QKewogIGlmIChfTV9ub2RlX2NvdW50ID09IDAgfHwgYmVnaW4o
KSA9PSBlbmQoKSkKICAgIHJldHVybiBfTV9ub2RlX2NvdW50ID09IDAgJiYgYmVnaW4oKSA9PSBl
bmQoKSAmJgogICAgICBfTV9oZWFkZXItPl9NX2xlZnQgPT0gX01faGVhZGVyICYmIF9NX2hlYWRl
ci0+X01fcmlnaHQgPT0gX01faGVhZGVyOwogIAogIGludCBfX2xlbiA9IF9fYmxhY2tfY291bnQo
X01fbGVmdG1vc3QoKSwgX01fcm9vdCgpKTsKICBmb3IgKGNvbnN0X2l0ZXJhdG9yIF9faXQgPSBi
ZWdpbigpOyBfX2l0ICE9IGVuZCgpOyArK19faXQpIHsKICAgIF9MaW5rX3R5cGUgX194ID0gKF9M
aW5rX3R5cGUpIF9faXQuX01fbm9kZTsKICAgIF9MaW5rX3R5cGUgX19MID0gX1NfbGVmdChfX3gp
OwogICAgX0xpbmtfdHlwZSBfX1IgPSBfU19yaWdodChfX3gpOwoKICAgIGlmIChfX3gtPl9NX2Nv
bG9yID09IF9TX3JiX3RyZWVfcmVkKQogICAgICBpZiAoKF9fTCAmJiBfX0wtPl9NX2NvbG9yID09
IF9TX3JiX3RyZWVfcmVkKSB8fAogICAgICAgICAgKF9fUiAmJiBfX1ItPl9NX2NvbG9yID09IF9T
X3JiX3RyZWVfcmVkKSkKICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgaWYgKF9fTCAmJiBfTV9r
ZXlfY29tcGFyZShfU19rZXkoX194KSwgX1Nfa2V5KF9fTCkpKQogICAgICByZXR1cm4gZmFsc2U7
CiAgICBpZiAoX19SICYmIF9NX2tleV9jb21wYXJlKF9TX2tleShfX1IpLCBfU19rZXkoX194KSkp
CiAgICAgIHJldHVybiBmYWxzZTsKCiAgICBpZiAoIV9fTCAmJiAhX19SICYmIF9fYmxhY2tfY291
bnQoX194LCBfTV9yb290KCkpICE9IF9fbGVuKQogICAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBp
ZiAoX01fbGVmdG1vc3QoKSAhPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX01fcm9v
dCgpKSkKICAgIHJldHVybiBmYWxzZTsKICBpZiAoX01fcmlnaHRtb3N0KCkgIT0gX1JiX3RyZWVf
bm9kZV9iYXNlOjpfU19tYXhpbXVtKF9NX3Jvb3QoKSkpCiAgICByZXR1cm4gZmFsc2U7CgogIHJl
dHVybiB0cnVlOwp9CgogCiAKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNs
YXNzIF9LZXlPZlZhbHVlLCBjbGFzcyBfQ29tcGFyZSwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9
IGFsbG9jYXRvcjwgX1ZhbHVlID4gID4Kc3RydWN0IHJiX3RyZWUgOiBwdWJsaWMgX1JiX3RyZWU8
X0tleSwgX1ZhbHVlLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4KewogIHR5cGVkZWYg
X1JiX3RyZWU8X0tleSwgX1ZhbHVlLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4gX0Jh
c2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5
cGU7CgogIHJiX3RyZWUoY29uc3QgX0NvbXBhcmUmIF9fY29tcCA9IF9Db21wYXJlKCksCiAgICAg
ICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDog
X0Jhc2UoX19jb21wLCBfX2EpIHt9CiAgCiAgfnJiX3RyZWUoKSB7fQp9OwoKCgoKCiAgCgoKCiAK
IAogCiMgMzEgIi9ob21lL3R2L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxp
Yi9wb3dlcnBjLWlibS1haXg0LjIuMS4wLzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z
L21hcCIgMiAzCgoKIyAxICIvaG9tZS90di90b29scy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGli
L2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEuMC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVk
ZS9nKystMy9zdGxfbWFwLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK
CiAKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJl
ID0gbGVzczxfS2V5PiwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjwgX1RwID4g
ID4KCgoKCmNsYXNzIG1hcCB7CnB1YmxpYzoKCiAKCiAgdHlwZWRlZiBfS2V5ICAgICAgICAgICAg
ICAgICAga2V5X3R5cGU7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgZGF0YV90eXBl
OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgIG1hcHBlZF90eXBlOwogIHR5cGVkZWYg
cGFpcjxjb25zdCBfS2V5LCBfVHA+IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfQ29tcGFyZSAgICAg
ICAgICAgICAga2V5X2NvbXBhcmU7CiAgICAKICBjbGFzcyB2YWx1ZV9jb21wYXJlCiAgICA6IHB1
YmxpYyBiaW5hcnlfZnVuY3Rpb248dmFsdWVfdHlwZSwgdmFsdWVfdHlwZSwgYm9vbD4gewogIGZy
aWVuZCBjbGFzcyBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPjsKICBwcm90ZWN0ZWQgOgog
ICAgX0NvbXBhcmUgX01fY29tcDsKICAgIHZhbHVlX2NvbXBhcmUoX0NvbXBhcmUgX19jKSA6IF9N
X2NvbXAoX19jKSB7fQogIHB1YmxpYzoKICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCB2YWx1ZV90
eXBlJiBfX3gsIGNvbnN0IHZhbHVlX3R5cGUmIF9feSkgY29uc3QgewogICAgICByZXR1cm4gX01f
Y29tcChfX3guZmlyc3QsIF9feS5maXJzdCk7CiAgICB9CiAgfTsKCnByaXZhdGU6CiAgdHlwZWRl
ZiBfUmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVfdHlwZSwgCiAgICAgICAgICAgICAgICAgICBfU2Vs
ZWN0MXN0PHZhbHVlX3R5cGU+LCBrZXlfY29tcGFyZSwgX0FsbG9jPiBfUmVwX3R5cGU7CiAgX1Jl
cF90eXBlIF9NX3Q7ICAgCnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cG9p
bnRlciBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9wb2ludGVy
IGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJlZmVyZW5jZSBy
ZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBj
b25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIGl0
ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9pdGVyYXRvciBjb25z
dF9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cmV2ZXJzZV9pdGVyYXRv
ciByZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9y
ZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBfUmVwX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVw
X3R5cGU6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBfUmVwX3R5cGU6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICAgCgogIG1hcCgp
IDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7fQogIGV4cGxpY2l0IG1hcChj
b25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlw
ZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkge30KCgog
IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBtYXAoX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgOiBfTV90KF9Db21wYXJlKCksIGFsbG9j
YXRvcl90eXBlKCkpCiAgICB7IF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9
CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBtYXAoX0lucHV0SXRlcmF0b3Ig
X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBjb25zdCBfQ29tcGFyZSYgX19jb21wLAog
ICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDog
X01fdChfX2NvbXAsIF9fYSkgeyBfTV90Lmluc2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0KTsg
fQojIDEyMyAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGli
L3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv
c3RsX21hcC5oIiAzCgoKICBtYXAoY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4m
IF9feCkgOiBfTV90KF9feC5fTV90KSB7fQogIG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+
JgogIG9wZXJhdG9yPShjb25zdCBtYXA8X0tleSwgX1RwLCBfQ29tcGFyZSwgX0FsbG9jPiYgX194
KQogIHsKICAgIF9NX3QgPSBfX3guX01fdDsKICAgIHJldHVybiAqdGhpczsgCiAgfQoKICAgCgog
IGtleV9jb21wYXJlIGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9
CiAgdmFsdWVfY29tcGFyZSB2YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gdmFsdWVfY29tcGFy
ZShfTV90LmtleV9jb21wKCkpOyB9CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNv
bnN0IHsgcmV0dXJuIF9NX3QuZ2V0X2FsbG9jYXRvcigpOyB9CgogIGl0ZXJhdG9yIGJlZ2luKCkg
eyByZXR1cm4gX01fdC5iZWdpbigpOyB9CiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7
IHJldHVybiBfTV90LmJlZ2luKCk7IH0KICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV90LmVu
ZCgpOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5lbmQoKTsg
fQogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQog
IGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5yYmVn
aW4oKTsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9
CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5yZW5k
KCk7IH0KICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01fdC5lbXB0eSgpOyB9CiAgc2l6
ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV90LnNpemUoKTsgfQogIHNpemVfdHlwZSBt
YXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QubWF4X3NpemUoKTsgfQogIF9UcCYgb3BlcmF0
b3JbXShjb25zdCBrZXlfdHlwZSYgX19rKSB7CiAgICBpdGVyYXRvciBfX2kgPSBsb3dlcl9ib3Vu
ZChfX2spOwogICAgIAogICAgaWYgKF9faSA9PSBlbmQoKSB8fCBrZXlfY29tcCgpKF9faywgKCpf
X2kpLmZpcnN0KSkKICAgICAgX19pID0gaW5zZXJ0KF9faSwgdmFsdWVfdHlwZShfX2ssIF9UcCgp
KSk7CiAgICByZXR1cm4gKCpfX2kpLnNlY29uZDsKICB9CiAgdm9pZCBzd2FwKG1hcDxfS2V5LF9U
cCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsgX01fdC5zd2FwKF9feC5fTV90KTsgfQoKICAgCgog
IHBhaXI8aXRlcmF0b3IsYm9vbD4gaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgCiAgICB7
IHJldHVybiBfTV90Lmluc2VydF91bmlxdWUoX194KTsgfQogIGl0ZXJhdG9yIGluc2VydChpdGVy
YXRvciBwb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KQogICAgeyByZXR1cm4gX01fdC5p
bnNlcnRfdW5pcXVlKHBvc2l0aW9uLCBfX3gpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyYXRvcj4KICB2b2lkIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy
YXRvciBfX2xhc3QpIHsKICAgIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOwog
IH0KCgoKCgoKCgoKICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsgX01fdC5lcmFz
ZShfX3Bvc2l0aW9uKTsgfQogIHNpemVfdHlwZSBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194KSB7
IHJldHVybiBfTV90LmVyYXNlKF9feCk7IH0KICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3Qs
IGl0ZXJhdG9yIF9fbGFzdCkKICAgIHsgX01fdC5lcmFzZShfX2ZpcnN0LCBfX2xhc3QpOyB9CiAg
dm9pZCBjbGVhcigpIHsgX01fdC5jbGVhcigpOyB9CgogICAKCiAgaXRlcmF0b3IgZmluZChjb25z
dCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQogIGNvbnN0X2l0ZXJh
dG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgeyByZXR1cm4gX01fdC5maW5kKF9f
eCk7IH0KICBzaXplX3R5cGUgY291bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgeyByZXR1
cm4gX01fdC5jb3VudChfX3gpOyB9CiAgaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5
cGUmIF9feCkge3JldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7IH0KICBjb25zdF9pdGVyYXRv
ciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01f
dC5sb3dlcl9ib3VuZChfX3gpOyAKICB9CiAgaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5
X3R5cGUmIF9feCkge3JldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IH0KICBjb25zdF9pdGVy
YXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4g
X01fdC51cHBlcl9ib3VuZChfX3gpOyAKICB9CiAgCiAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4g
ZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3QuZXF1YWxf
cmFuZ2UoX194KTsKICB9CiAgcGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4gZXF1
YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QuZXF1
YWxfcmFuZ2UoX194KTsKICB9CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSA8PiAgKGNvbnN0IG1h
cCYsIGNvbnN0IG1hcCYpOwogIGZyaWVuZCBib29sIG9wZXJhdG9yPCA8PiAgKGNvbnN0IG1hcCYs
IGNvbnN0IG1hcCYpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3Mg
X0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBtYXA8
X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LCAKICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5f
TV90ID09IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFz
cyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgbWFw
PF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwgCiAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5f
TV90IDwgX195Ll9NX3Q7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xh
c3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcChtYXA8X0tleSxfVHAs
X0NvbXBhcmUsX0FsbG9jPiYgX194LCAKICAgICAgICAgICAgICAgICBtYXA8X0tleSxfVHAsX0Nv
bXBhcmUsX0FsbG9jPiYgX195KSB7CiAgX194LnN3YXAoX195KTsKfQoKCgoKCgoKCiAKCgoKIAog
CiAKIyAzMyAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9nY2MtbGli
L3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv
bWFwIiAyIDMKCiMgMSAiL2hvbWUvdHYvdG9vbHMvZ251L3JzNjAwMC9nY2MtMi45NS4yL2xpYi9n
Y2MtbGliL3Bvd2VycGMtaWJtLWFpeDQuMi4xLjAvMi45NS4yLy4uLy4uLy4uLy4uL2luY2x1ZGUv
ZysrLTMvc3RsX211bHRpbWFwLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoK
CgoKCiAKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21w
YXJlID0gbGVzczxfS2V5PiwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjwgX1Rw
ID4gID4KCgoKCmNsYXNzIG11bHRpbWFwIHsKcHVibGljOgoKIAoKICB0eXBlZGVmIF9LZXkgICAg
ICAgICAgICAgICAgICBrZXlfdHlwZTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICBk
YXRhX3R5cGU7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgbWFwcGVkX3R5cGU7CiAg
dHlwZWRlZiBwYWlyPGNvbnN0IF9LZXksIF9UcD4gdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9Db21w
YXJlICAgICAgICAgICAgICBrZXlfY29tcGFyZTsKCiAgY2xhc3MgdmFsdWVfY29tcGFyZSA6IHB1
YmxpYyBiaW5hcnlfZnVuY3Rpb248dmFsdWVfdHlwZSwgdmFsdWVfdHlwZSwgYm9vbD4gewogIGZy
aWVuZCBjbGFzcyBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+OwogIHByb3RlY3Rl
ZDoKICAgIF9Db21wYXJlIF9NX2NvbXA7CiAgICB2YWx1ZV9jb21wYXJlKF9Db21wYXJlIF9fYykg
OiBfTV9jb21wKF9fYykge30KICBwdWJsaWM6CiAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgdmFs
dWVfdHlwZSYgX194LCBjb25zdCB2YWx1ZV90eXBlJiBfX3kpIGNvbnN0IHsKICAgICAgcmV0dXJu
IF9NX2NvbXAoX194LmZpcnN0LCBfX3kuZmlyc3QpOwogICAgfQogIH07Cgpwcml2YXRlOgogIHR5
cGVkZWYgX1JiX3RyZWU8a2V5X3R5cGUsIHZhbHVlX3R5cGUsIAogICAgICAgICAgICAgICAgICBf
U2VsZWN0MXN0PHZhbHVlX3R5cGU+LCBrZXlfY29tcGFyZSwgX0FsbG9jPiBfUmVwX3R5cGU7CiAg
X1JlcF90eXBlIF9NX3Q7ICAgCnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6
cG9pbnRlciBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9wb2lu
dGVyIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJlZmVyZW5j
ZSByZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JlZmVyZW5j
ZSBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9y
IGl0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9pdGVyYXRvciBj
b25zdF9pdGVyYXRvcjsgCiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJldmVyc2VfaXRl
cmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29u
c3RfcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlw
ZW5hbWUgX1JlcF90eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUg
X1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlw
ZW5hbWUgX1JlcF90eXBlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAKCiAgbXVs
dGltYXAoKSA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkgeyB9CiAgZXhwbGlj
aXQgbXVsdGltYXAoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgICAgICAgICAgICAgICBj
b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChf
X2NvbXAsIF9fYSkgeyB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgbXVs
dGltYXAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAg
OiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IF9NX3QuaW5zZXJ0X2Vx
dWFsKF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
PgogIG11bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz
dCwKICAgICAgICAgICBjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICAgICAgIGNvbnN0IGFs
bG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29tcCwg
X19hKSB7IF9NX3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7IH0KIyAxMjEgIi9ob21l
L3R2L3Rvb2xzL2dudS9yczYwMDAvZ2NjLTIuOTUuMi9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1h
aXg0LjIuMS4wLzIuOTUuMi8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9tdWx0aW1hcC5o
IiAzCgoKICBtdWx0aW1hcChjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+
JiBfX3gpIDogX01fdChfX3guX01fdCkgeyB9CiAgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUs
X0FsbG9jPiYKICBvcGVyYXRvcj0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0Fs
bG9jPiYgX194KSB7CiAgICBfTV90ID0gX194Ll9NX3Q7CiAgICByZXR1cm4gKnRoaXM7IAogIH0K
CiAgIAoKICBrZXlfY29tcGFyZSBrZXlfY29tcCgpIGNvbnN0IHsgcmV0dXJuIF9NX3Qua2V5X2Nv
bXAoKTsgfQogIHZhbHVlX2NvbXBhcmUgdmFsdWVfY29tcCgpIGNvbnN0IHsgcmV0dXJuIHZhbHVl
X2NvbXBhcmUoX01fdC5rZXlfY29tcCgpKTsgfQogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0
b3IoKSBjb25zdCB7IHJldHVybiBfTV90LmdldF9hbGxvY2F0b3IoKTsgfQoKICBpdGVyYXRvciBi
ZWdpbigpIHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CiAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4g
X01fdC5lbmQoKTsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX3Qu
ZW5kKCk7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJuIF9NX3QucmJlZ2lu
KCk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9N
X3QucmJlZ2luKCk7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiBfTV90LnJl
bmQoKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIF9N
X3QucmVuZCgpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZW1wdHkoKTsg
fQogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5zaXplKCk7IH0KICBzaXpl
X3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV90Lm1heF9zaXplKCk7IH0KICB2b2lk
IHN3YXAobXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSB7IF9NX3Quc3dh
cChfX3guX01fdCk7IH0KCiAgIAoKICBpdGVyYXRvciBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYg
X194KSB7IHJldHVybiBfTV90Lmluc2VydF9lcXVhbChfX3gpOyB9CiAgaXRlcmF0b3IgaW5zZXJ0
KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewogICAgcmV0dXJu
IF9NX3QuaW5zZXJ0X2VxdWFsKF9fcG9zaXRpb24sIF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwg
X0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBf
X2xhc3QpOwogIH0KCgoKCgoKCgogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgeyBf
TV90LmVyYXNlKF9fcG9zaXRpb24pOyB9CiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBl
JiBfX3gpIHsgcmV0dXJuIF9NX3QuZXJhc2UoX194KTsgfQogIHZvaWQgZXJhc2UoaXRlcmF0b3Ig
X19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAgeyBfTV90LmVyYXNlKF9fZmlyc3QsIF9fbGFz
dCk7IH0KICB2b2lkIGNsZWFyKCkgeyBfTV90LmNsZWFyKCk7IH0KCiAgIAoKICBpdGVyYXRvciBm
aW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CiAgY29u
c3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90
LmZpbmQoX194KTsgfQogIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25z
dCB7IHJldHVybiBfTV90LmNvdW50KF9feCk7IH0KICBpdGVyYXRvciBsb3dlcl9ib3VuZChjb25z
dCBrZXlfdHlwZSYgX194KSB7cmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsgfQogIGNvbnN0
X2l0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJl
dHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7IAogIH0KICBpdGVyYXRvciB1cHBlcl9ib3VuZChj
b25zdCBrZXlfdHlwZSYgX194KSB7cmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsgfQogIGNv
bnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAg
IHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IAogIH0KICAgcGFpcjxpdGVyYXRvcixpdGVy
YXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3Qu
ZXF1YWxfcmFuZ2UoX194KTsKICB9CiAgcGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRv
cj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9N
X3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSA8PiAgKGNv
bnN0IG11bHRpbWFwJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBtdWx0aW1hcCYpOwogIGZyaWVuZCBib29sIG9wZXJhdG9yPCA8PiAgKGNvbnN0
IG11bHRpbWFwJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IG11bHRpbWFwJik7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBj
bGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwgCiAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7
CiAgcmV0dXJuIF9feC5fTV90ID09IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwg
Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVy
YXRvcjwoY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LCAKICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxv
Yz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA8IF9feS5fTV90Owp9CgoKCnRlbXBsYXRlIDxj
bGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGlu
ZSB2b2lkIHN3YXAobXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LCAKICAg
ICAgICAgICAgICAgICBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsK
ICBfX3guc3dhcChfX3kpOwp9CgoKCgoKCgoKIAoKCgogCiAKIAojIDM0ICIvaG9tZS90di90b29s
cy9nbnUvcnM2MDAwL2djYy0yLjk1LjIvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4NC4yLjEu
MC8yLjk1LjIvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9tYXAiIDIgMwoKCgoKIAogCiAKIyAz
ICJ0djI3MzcuY3h4IiAyCgojIDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzIDQKIAogCiAK
IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNCAidHYyNzM3
LmN4eCIgMgoKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIGVuYWJsZV9jb3JlXyAoKQp7CiAg
c3RydWN0IHNpZ2FjdGlvbiBzYTsKCiAgc2lnYWN0aW9uICgxMSAsIDAsICZzYSk7CiAgc2Euc2Ff
ZmxhZ3MgfD0gMHgwMDAwMDA0MCA7CiAgc2lnYWN0aW9uICgxMSAsICZzYSwgMCk7CgogIHNpZ2Fj
dGlvbiAoMTAgLCAwLCAmc2EpOwogIHNhLnNhX2ZsYWdzIHw9IDB4MDAwMDAwNDAgOwogIHNpZ2Fj
dGlvbiAoMTAgLCAmc2EsIDApOwp9Cgp2b2lkIG1hcF9kZW1vKCk7CgppbnQgbWFpbigpCnsKICBl
bmFibGVfY29yZV8gKCk7CiAgbWFwX2RlbW8oKTsKfQoKdm9pZCBtYXBfZGVtbygpCnsKICAgdHlw
ZWRlZiBtYXA8c3RyaW5nLCBmbG9hdD4gU3RyaW5nRmxvYXRNYXA7CiAgIFN0cmluZ0Zsb2F0TWFw
IGNvbGw7CiAgIFN0cmluZ0Zsb2F0TWFwOjppdGVyYXRvciBwb3M7CiAgIAogICAgCiAgIGNvbGxb
IlZBVCJdID0gMC4xNzU7CiAgIGNvbGxbIlBpIl0gID0gMy4xNDE1OTI2NTM1OwogICBjb2xsWyJh
biBhcmJpdHJhcnkgbnVtYmVyIl0gPSA0OTgzLjIyMzsKICAgY29sbFsiTnVsbCJdID0gMDsKICAg
CiAgICAKICAgZm9yIChwb3MgPSBjb2xsLmJlZ2luKCk7IHBvcyAhPSBjb2xsLmVuZCgpOyArK3Bv
cykgewogICAgIGNvdXQgPDwgImtleTogXCIiIDw8IHBvcy0+Zmlyc3QgPDwgIlwiICIKICAgICAg
ICAgIDw8ICJ2YWx1ZTogIiA8PCBwb3MtPnNlY29uZCA8PGVuZGw7CiAgIH0gCiAgIAogICAqKGlu
dCAqKTAgPSAxOwp9Cg==


             reply	other threads:[~2001-05-02  9:36 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-05-02  9:36 jcownie [this message]
2001-08-10 15:20 dje
2001-12-02 15:54 rodrigc
2001-12-02 15:56 rodrigc

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20010502163540.11449.qmail@sourceware.cygnus.com \
    --to=jcownie@etnus.com \
    --cc=chan1@llnl.gov \
    --cc=gcc-gnats@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).