This is the mail archive of the gcc-prs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

c++/9133: g++ exits with segmetation violation


>Number:         9133
>Category:       c++
>Synopsis:       g++ exits with segmetation violation
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Thu Jan 02 08:26:05 PST 2003
>Closed-Date:
>Last-Modified:
>Originator:     Bala Swaminathan
>Release:        gcc 3.2.1
>Organization:
>Environment:
SunOS 5.8
identical results in Linux 2.4
>Description:
The bimap.h compiles fine under VC++, and I volunteered to test it under g++. After fixing several syntax errors, I wasn't able to proceed further because of the internal error. This happens under both SunOS and Linux.

booby:~/c++/bimap> alias g3
alias g3='/usr/local/products/gcc/3.2.1/bin/g++'
booby:~/c++/bimap> g3 -v
Reading specs from /usr/local/products/gcc/3.2.1/lib/gcc-lib/sparc-sun-solaris2.8/3.2.1/specs
Configured with: ../gcc-3.2.1/configure --with-gnu-as --with-as=/usr/local/products/binutils/2.11.2/bin/gnu-as --with-gnu-ld --with-ld=/usr/local/products/binutils/2.11.2/bin/gnu-ld --disable-nls --enable-languages=c,c++ --disable-libgcj --disable-shared --prefix=/usr/local/products/gcc/3.2.1
Thread model: posix
gcc version 3.2.1
booby:~/c++/bimap> g3 -I. -save-temps -E tstbimap.cc > tstbimap.i 
booby:~/c++/bimap> cp tstbimap.i /tmp/tst.cc
booby:~/c++/bimap> g3 /tmp/tst.cc
In file included from tstbimap.cc:2:
bimap.h:1491: internal error: Segmentation Fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
booby:~/c++/bimap> 
>How-To-Repeat:
Compile tstbimap.i using g++ 3.2.1 (or 3.2).
>Fix:

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

IyAxICJ0c3RiaW1hcC5jYyIKIyAxICI8YnVpbHQtaW4+IgojIDEgIjxjb21tYW5kIGxpbmU+Igoj
IDEgInRzdGJpbWFwLmNjIgoKIyAxICJiaW1hcC5oIiAxCiMgMjggImJpbWFwLmgiCiNwcmFnbWEg
d2FybmluZyhkaXNhYmxlOjQ3ODYpCgojIDEgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4x
L2luY2x1ZGUvYysrLzMuMi4xL2FsZ29yaXRobSIgMSAzCiMgNjUgIi91c3IvbG9jYWwvcHJvZHVj
dHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2FsZ29yaXRobSIgMwoKIyAxICIvdXNyL2xv
Y2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvYmFz
ZS5oIiAxIDMKIyA2NCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysv
My4yLjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwojIDEgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2Nj
LzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvYysrY29u
ZmlnLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2Mr
Ky8zLjIuMS9zcGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL2MrK2NvbmZpZy5oIiAzCiMgMSAiL3Vz
ci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvc3BhcmMtc3VuLXNv
bGFyaXMyLjgvYml0cy9vc19kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL3Byb2R1Y3Rz
L2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9zcGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL2Mr
K2NvbmZpZy5oIiAyIDMKIyA2NSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVk
ZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9wcm9k
dWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvY3N0cmluZyIgMSAzCiMgNDggIi91c3Iv
bG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2NzdHJpbmciIDMKCiMg
MSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvY3N0ZGRl
ZiIgMSAzCiMgNDcgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMu
Mi4xL2NzdGRkZWYiIDMKCiMgMSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4yLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQK
IyAxNDcgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9nY2MtbGliL3NwYXJjLXN1
bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAp0eXBlZGVmIGludCBwdHJk
aWZmX3Q7CiMgMjAxICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9saWIvZ2NjLWxpYi9z
cGFyYy1zdW4tc29sYXJpczIuOC8zLjIuMS9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgc2l6ZV90OwojIDQ5ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9p
bmNsdWRlL2MrKy8zLjIuMS9jc3RkZGVmIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6
cHRyZGlmZl90OwogIHVzaW5nIDo6c2l6ZV90Owp9CiMgNTAgIi91c3IvbG9jYWwvcHJvZHVjdHMv
Z2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2NzdHJpbmciIDIgMwoKIyAxICIvdXNyL2luY2x1
ZGUvc3RyaW5nLmgiIDEgMyA0CiMgMTYgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMyA0CiNwcmFn
bWEgaWRlbnQgIkAoIylzdHJpbmcuaAkxLjI0CTk5LzA4LzEwIFNNSSIgCgojIDEgIi91c3IvaW5j
bHVkZS9pc28vc3RyaW5nX2lzby5oIiAxIDMgNAojIDI4ICIvdXNyL2luY2x1ZGUvaXNvL3N0cmlu
Z19pc28uaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylzdHJpbmdfaXNvLmgJMS4yCTk5LzExLzA5
IFNNSSIKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDEz
ICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAo
IylmZWF0dXJlX3Rlc3RzLmgJMS4xOAk5OS8wNy8yNiBTTUkiCgojIDEgIi91c3IvaW5jbHVkZS9z
eXMvaXNhX2RlZnMuaCIgMSAzIDQKIyA5ICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDMg
NAojcHJhZ21hIGlkZW50ICJAKCMpaXNhX2RlZnMuaAkxLjIwCTk5LzA1LzA0IFNNSSIKIyAxNTgg
Ii91c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIgMyA0CmV4dGVybiAiQyIgewojIDM4MCAiL3Vz
ci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAzIDQKfQojIDE2ICIvdXNyL2luY2x1ZGUvc3lzL2Zl
YXR1cmVfdGVzdHMuaCIgMiAzIDQKCgpleHRlcm4gIkMiIHsKIyAxODEgIi91c3IvaW5jbHVkZS9z
eXMvZmVhdHVyZV90ZXN0cy5oIiAzIDQKfQojIDMyICIvdXNyL2luY2x1ZGUvaXNvL3N0cmluZ19p
c28uaCIgMiAzIDQKCgpleHRlcm4gIkMiIHsKIyA2MCAiL3Vzci9pbmNsdWRlL2lzby9zdHJpbmdf
aXNvLmgiIDMgNApleHRlcm4gaW50IG1lbWNtcChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwg
c2l6ZV90KTsKZXh0ZXJuIHZvaWQgKm1lbWNweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90
KTsKZXh0ZXJuIHZvaWQgKm1lbW1vdmUodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CmV4
dGVybiB2b2lkICptZW1zZXQodm9pZCAqLCBpbnQsIHNpemVfdCk7CmV4dGVybiBjaGFyICpzdHJj
YXQoY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHN0cmNtcChjb25zdCBjaGFyICos
IGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpzdHJjcHkoY2hhciAqLCBjb25zdCBjaGFyICop
OwpleHRlcm4gaW50IHN0cmNvbGwoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4g
c2l6ZV90IHN0cmNzcG4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAq
c3RyZXJyb3IoaW50KTsKZXh0ZXJuIHNpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqKTsKZXh0ZXJu
IGNoYXIgKnN0cm5jYXQoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBpbnQg
c3RybmNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGNoYXIg
KnN0cm5jcHkoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBzaXplX3Qgc3Ry
c3BuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnN0cnRvayhjaGFy
ICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBzaXplX3Qgc3RyeGZybShjaGFyICosIGNvbnN0IGNo
YXIgKiwgc2l6ZV90KTsKIyAxMTIgIi91c3IvaW5jbHVkZS9pc28vc3RyaW5nX2lzby5oIiAzIDQK
ZXh0ZXJuIHZvaWQgKm1lbWNocihjb25zdCB2b2lkICosIGludCwgc2l6ZV90KTsKZXh0ZXJuIGNo
YXIgKnN0cmNocihjb25zdCBjaGFyICosIGludCk7CmV4dGVybiBjaGFyICpzdHJwYnJrKGNvbnN0
IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnN0cnJjaHIoY29uc3QgY2hhciAq
LCBpbnQpOwpleHRlcm4gY2hhciAqc3Ryc3RyKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsK
IyAxNTEgIi91c3IvaW5jbHVkZS9pc28vc3RyaW5nX2lzby5oIiAzIDQKfQojIDE5ICIvdXNyL2lu
Y2x1ZGUvc3RyaW5nLmgiIDIgMyA0CiMgNTEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMyA0CmV4
dGVybiAiQyIgewoKCgoKCgpleHRlcm4gY2hhciAqc3RydG9rX3IoY2hhciAqLCBjb25zdCBjaGFy
ICosIGNoYXIgKiopOwoKCgoKZXh0ZXJuIHZvaWQgKm1lbWNjcHkodm9pZCAqLCBjb25zdCB2b2lk
ICosIGludCwgc2l6ZV90KTsKCgoKCmV4dGVybiBjaGFyICpzdHJzaWduYWwoaW50KTsKZXh0ZXJu
IGludCBmZnMoaW50KTsKZXh0ZXJuIGludCBzdHJjYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3Qg
Y2hhciAqKTsKZXh0ZXJuIGludCBzdHJuY2FzZWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIg
Kiwgc2l6ZV90KTsKZXh0ZXJuIHNpemVfdCBzdHJsY3B5KGNoYXIgKiwgY29uc3QgY2hhciAqLCBz
aXplX3QpOwpleHRlcm4gc2l6ZV90IHN0cmxjYXQoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVf
dCk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cmR1cChjb25zdCBjaGFyICopOwojIDExMyAiL3Vzci9p
bmNsdWRlL3N0cmluZy5oIiAzIDQKfQojIDUyICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIu
MS9pbmNsdWRlL2MrKy8zLjIuMS9jc3RyaW5nIiAyIDMKIyA3NyAiL3Vzci9sb2NhbC9wcm9kdWN0
cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvY3N0cmluZyIgMwpuYW1lc3BhY2Ugc3RkCnsK
ICB1c2luZyA6Om1lbWNweTsKICB1c2luZyA6Om1lbW1vdmU7CiAgdXNpbmcgOjpzdHJjcHk7CiAg
dXNpbmcgOjpzdHJuY3B5OwogIHVzaW5nIDo6c3RyY2F0OwogIHVzaW5nIDo6c3RybmNhdDsKICB1
c2luZyA6Om1lbWNtcDsKICB1c2luZyA6OnN0cmNtcDsKICB1c2luZyA6OnN0cmNvbGw7CiAgdXNp
bmcgOjpzdHJuY21wOwogIHVzaW5nIDo6c3RyeGZybTsKICB1c2luZyA6OnN0cmNzcG47CiAgdXNp
bmcgOjpzdHJzcG47CiAgdXNpbmcgOjpzdHJ0b2s7CiAgdXNpbmcgOjptZW1zZXQ7CiAgdXNpbmcg
OjpzdHJlcnJvcjsKICB1c2luZyA6OnN0cmxlbjsKCiAgdXNpbmcgOjptZW1jaHI7CgogIGlubGlu
ZSB2b2lkKgogIG1lbWNocih2b2lkKiBfX3AsIGludCBfX2MsIHNpemVfdCBfX24pCiAgeyByZXR1
cm4gbWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgdm9pZCo+KF9fcCksIF9fYywgX19uKTsgfQoKICB1
c2luZyA6OnN0cmNocjsKCiAgaW5saW5lIGNoYXIqCiAgc3RyY2hyKGNoYXIqIF9fczEsIGludCBf
X24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cmNocihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihf
X3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0cnBicms7CgogIGlubGluZSBjaGFyKgogIHN0cnBi
cmsoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKICB7IHJldHVybiBfX2J1aWx0aW5fc3Ry
cGJyayhjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjpz
dHJyY2hyOwoKICBpbmxpbmUgY2hhcioKICBzdHJyY2hyKGNoYXIqIF9fczEsIGludCBfX24pCiAg
eyByZXR1cm4gX19idWlsdGluX3N0cnJjaHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSks
IF9fbik7IH0KCiAgdXNpbmcgOjpzdHJzdHI7CgogIGlubGluZSBjaGFyKgogIHN0cnN0cihjaGFy
KiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJzdHIoY29u
c3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIpOyB9Cn0KIyA2NiAiL3Vzci9sb2NhbC9w
cm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIg
MiAzCiMgMSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEv
Y2xpbWl0cyIgMSAzCiMgNDggIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUv
YysrLzMuMi4xL2NsaW1pdHMiIDMKCiMgMSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEv
bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4yLjEvaW5jbHVkZS9saW1pdHMuaCIg
MSAzIDQKIyAxMSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLjgvMy4yLjEvaW5jbHVkZS9saW1pdHMuaCIgMyA0CiMgMSAiL3Vzci9s
b2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv
My4yLjEvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMSAzIDQKIyAyNSAiL3Vzci9sb2NhbC9wcm9kdWN0
cy9nY2MvMy4yLjEvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4yLjEvaW5jbHVk
ZS9zeXNsaW1pdHMuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylsaW1pdHMuaAkxLjUxCTk5LzEw
LzA4IFNNSSIgCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2lzby9saW1pdHNfaXNvLmgiIDEgMyA0CiMg
MjggIi91c3IvaW5jbHVkZS9pc28vbGltaXRzX2lzby5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgj
KWxpbWl0c19pc28uaAkxLjEJOTkvMDgvMDkgU01JIiAKCgpleHRlcm4gIkMiIHsKIyA3NSAiL3Vz
ci9pbmNsdWRlL2lzby9saW1pdHNfaXNvLmgiIDMgNAp9CiMgMzAgIi91c3IvbG9jYWwvcHJvZHVj
dHMvZ2NjLzMuMi4xL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1
ZGUvc3lzbGltaXRzLmgiIDIgMyA0CiMgNDEgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4x
L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvc3lzbGltaXRz
LmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zeXMvaW50X2xpbWl0cy5oIiAxIDMgNAojIDkgIi91
c3IvaW5jbHVkZS9zeXMvaW50X2xpbWl0cy5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKWludF9s
aW1pdHMuaAkxLjYJOTkvMDgvMDYgU01JIgojIDQ3ICIvdXNyL2luY2x1ZGUvc3lzL2ludF9saW1p
dHMuaCIgMyA0CmV4dGVybiAiQyIgewojIDE2MiAiL3Vzci9pbmNsdWRlL3N5cy9pbnRfbGltaXRz
LmgiIDMgNAp9CiMgNDIgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9nY2MtbGli
L3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMyA0CgoK
CmV4dGVybiAiQyIgewojIDI0MyAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4yLjEvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMyA0
CnR5cGVkZWYgbG9uZyBjbG9ja190OwoKCmV4dGVybiBsb25nIF9zeXNjb25mKGludCk7CiMgMjY4
ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s
YXJpczIuOC8zLjIuMS9pbmNsdWRlL3N5c2xpbWl0cy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUv
c3lzL3VuaXN0ZC5oIiAxIDMgNAojIDI1ICIvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5oIiAzIDQK
I3ByYWdtYSBpZGVudCAiQCgjKXVuaXN0ZC5oCTEuMzcJOTgvMTAvMjggU01JIiAKCgoKCmV4dGVy
biAiQyIgewojIDI2NSAiL3Vzci9pbmNsdWRlL3N5cy91bmlzdGQuaCIgMyA0Cn0KIyAyNjkgIi91
c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz
Mi44LzMuMi4xL2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMyA0CiMgMjc5ICIvdXNyL2xvY2FsL3By
b2R1Y3RzL2djYy8zLjIuMS9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjIuMS9p
bmNsdWRlL3N5c2xpbWl0cy5oIiAzIDQKZXh0ZXJuIGxvbmcgX3N5c2NvbmYoaW50KTsKIyAyODkg
Ii91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh
cmlzMi44LzMuMi4xL2luY2x1ZGUvc3lzbGltaXRzLmgiIDMgNAp9CiMgMTIgIi91c3IvbG9jYWwv
cHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMi4x
L2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0CiMgNTAgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMu
Mi4xL2luY2x1ZGUvYysrLzMuMi4xL2NsaW1pdHMiIDIgMwojIDY3ICIvdXNyL2xvY2FsL3Byb2R1
Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMK
IyAxICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9jc3Rk
bGliIiAxIDMKIyA0OCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysv
My4yLjEvY3N0ZGxpYiIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDEgMyA0CiMg
MTYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylzdGRsaWIu
aAkxLjQ3CTk5LzExLzAzIFNNSSIgCgojIDEgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4x
L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvaXNvL3N0ZGxp
Yl9pc28uaCIgMSAzIDQKIyAzNyAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4yLjEvaW5jbHVkZS9pc28vc3RkbGliX2lzby5o
IiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXN0ZGxpYl9pc28uaAkxLjIJOTkvMTIvMjEgU01JIiAK
CgoKCmV4dGVybiAiQyIgewoKCgpleHRlcm4gdW5zaWduZWQgY2hhciBfX2N0eXBlW107CiMgNTcg
Ii91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh
cmlzMi44LzMuMi4xL2luY2x1ZGUvaXNvL3N0ZGxpYl9pc28uaCIgMyA0CnR5cGVkZWYgc3RydWN0
IHsKICAgICAgICBpbnQgcXVvdDsKICAgICAgICBpbnQgcmVtOwp9IGRpdl90OwoKdHlwZWRlZiBz
dHJ1Y3QgewogICAgICAgIGxvbmcgcXVvdDsKICAgICAgICBsb25nIHJlbTsKfSBsZGl2X3Q7CiMg
MTAzICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
c29sYXJpczIuOC8zLjIuMS9pbmNsdWRlL2lzby9zdGRsaWJfaXNvLmgiIDMgNApleHRlcm4gdm9p
ZCBhYm9ydCh2b2lkKTsKZXh0ZXJuIGludCBhYnMoaW50KTsKZXh0ZXJuIGludCBhdGV4aXQodm9p
ZCAoKikodm9pZCkpOwpleHRlcm4gZG91YmxlIGF0b2YoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGlu
dCBhdG9pKGNvbnN0IGNoYXIgKik7CmV4dGVybiBsb25nIGludCBhdG9sKGNvbnN0IGNoYXIgKik7
CmV4dGVybiB2b2lkICpic2VhcmNoKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3Qs
IHNpemVfdCwKICAgICAgICBpbnQgKCopKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CmV4
dGVybiB2b2lkICpjYWxsb2Moc2l6ZV90LCBzaXplX3QpOwpleHRlcm4gZGl2X3QgZGl2KGludCwg
aW50KTsKZXh0ZXJuIHZvaWQgZXhpdChpbnQpOwpleHRlcm4gdm9pZCBmcmVlKHZvaWQgKik7CmV4
dGVybiBjaGFyICpnZXRlbnYoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMobG9u
Zyk7CmV4dGVybiBsZGl2X3QgbGRpdihsb25nLCBsb25nKTsKZXh0ZXJuIHZvaWQgKm1hbGxvYyhz
aXplX3QpOwpleHRlcm4gaW50IG1ibGVuKGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIHNp
emVfdCBtYnN0b3djcyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGlu
dCBtYnRvd2Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVybiB2b2lkIHFz
b3J0KHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsCiAgICAgICAgaW50ICgqKShjb25zdCB2b2lkICos
IGNvbnN0IHZvaWQgKikpOwpleHRlcm4gaW50IHJhbmQodm9pZCk7CmV4dGVybiB2b2lkICpyZWFs
bG9jKHZvaWQgKiwgc2l6ZV90KTsKZXh0ZXJuIHZvaWQgc3JhbmQodW5zaWduZWQgaW50KTsKZXh0
ZXJuIGRvdWJsZSBzdHJ0b2QoY29uc3QgY2hhciAqLCBjaGFyICoqKTsKZXh0ZXJuIGxvbmcgaW50
IHN0cnRvbChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CmV4dGVybiB1bnNpZ25lZCBsb25n
IGludCBzdHJ0b3VsKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKZXh0ZXJuIGludCBzeXN0
ZW0oY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCB3Y3RvbWIoY2hhciAqLCB3Y2hhcl90KTsKZXh0
ZXJuIHNpemVfdCB3Y3N0b21icyhjaGFyICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKIyAx
NzIgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z
b2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvaXNvL3N0ZGxpYl9pc28uaCIgMyA0Cn0KIyAxOSAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMgNAoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5o
IiAxIDMgNAojIDE2ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMyA0CiNwcmFnbWEgaWRlbnQg
IkAoIyl3YWl0LmgJMS4yMQk5Ny8wNC8wOCBTTUkiIAoKCgojIDEgIi91c3IvbG9jYWwvcHJvZHVj
dHMvZ2NjLzMuMi4xL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1
ZGUvc3lzL3R5cGVzLmgiIDEgMyA0CiMgMjUgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4x
L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvc3lzL3R5cGVz
LmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpdHlwZXMuaAkxLjY3CTAxLzA3LzA3IFNNSSIKCgoK
CgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9tYWNodHlwZXMuaCIgMSAzIDQKIyAxNiAiL3Vzci9p
bmNsdWRlL3N5cy9tYWNodHlwZXMuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIyltYWNodHlwZXMu
aAkxLjEzCTk5LzA1LzA0IFNNSSIKCgoKCmV4dGVybiAiQyIgewojIDMzICIvdXNyL2luY2x1ZGUv
c3lzL21hY2h0eXBlcy5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QgX2xhYmVsX3QgeyBsb25nIHZhbFsy
XTsgfSBsYWJlbF90OwoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgbG9ja190OwoKCn0KIyAzNCAi
L3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy
aXMyLjgvMy4yLjEvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKIyA0NSAiL3Vzci9sb2NhbC9w
cm9kdWN0cy9nY2MvMy4yLjEvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4yLjEv
aW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9pbnRfdHlwZXMu
aCIgMSAzIDQKIyA5ICIvdXNyL2luY2x1ZGUvc3lzL2ludF90eXBlcy5oIiAzIDQKI3ByYWdtYSBp
ZGVudCAiQCgjKWludF90eXBlcy5oCTEuNgk5Ny8wOC8yMCBTTUkiCiMgNDUgIi91c3IvaW5jbHVk
ZS9zeXMvaW50X3R5cGVzLmgiIDMgNApleHRlcm4gIkMiIHsKIyA2MiAiL3Vzci9pbmNsdWRlL3N5
cy9pbnRfdHlwZXMuaCIgMyA0CnR5cGVkZWYgY2hhciBpbnQ4X3Q7CgoKCgoKdHlwZWRlZiBzaG9y
dCBpbnQxNl90Owp0eXBlZGVmIGludCBpbnQzMl90OwoKCgoKdHlwZWRlZiBsb25nIGxvbmcgaW50
NjRfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQg
c2hvcnQgdWludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQzMl90OwoKCgoKdHlwZWRl
ZiB1bnNpZ25lZCBsb25nIGxvbmcgdWludDY0X3Q7CiMgOTQgIi91c3IvaW5jbHVkZS9zeXMvaW50
X3R5cGVzLmgiIDMgNAp0eXBlZGVmIGludDY0X3QgaW50bWF4X3Q7CnR5cGVkZWYgdWludDY0X3Qg
dWludG1heF90OwojIDExMCAiL3Vzci9pbmNsdWRlL3N5cy9pbnRfdHlwZXMuaCIgMyA0CnR5cGVk
ZWYgaW50IGludHB0cl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50cHRyX3Q7CgoKCgoKCgp0
eXBlZGVmIGNoYXIgaW50X2xlYXN0OF90OwoKCgoKCnR5cGVkZWYgc2hvcnQgaW50X2xlYXN0MTZf
dDsKdHlwZWRlZiBpbnQgaW50X2xlYXN0MzJfdDsKCgoKCnR5cGVkZWYgbG9uZyBsb25nIGludF9s
ZWFzdDY0X3Q7CgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50X2xlYXN0OF90Owp0eXBlZGVm
IHVuc2lnbmVkIHNob3J0IHVpbnRfbGVhc3QxNl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50
X2xlYXN0MzJfdDsKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVpbnRfbGVhc3Q2NF90
OwoKCgoKfQojIDQ2ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9saWIvZ2NjLWxpYi9z
cGFyYy1zdW4tc29sYXJpczIuOC8zLjIuMS9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAoKCgoK
CgoKZXh0ZXJuICJDIiB7CiMgNjIgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMg
NAp0eXBlZGVmIGxvbmcgbG9uZyBsb25nbG9uZ190Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9u
ZyB1X2xvbmdsb25nX3Q7CiMgODUgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMg
NAp0eXBlZGVmIGxvbmcgdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHRfdXNjYWxh
cl90OwoKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1Y2hhcl90Owp0eXBlZGVmIHVuc2lnbmVk
IHNob3J0IHVzaG9ydF90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50X3Q7CnR5cGVkZWYgdW5z
aWduZWQgbG9uZyB1bG9uZ190OwoKdHlwZWRlZiBjaGFyICpjYWRkcl90Owp0eXBlZGVmIGxvbmcg
ZGFkZHJfdDsKdHlwZWRlZiBzaG9ydCBjbnRfdDsKCgp0eXBlZGVmIHVsb25nX3QgcGFkZHJfdDsK
IyAxMjcgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9nY2MtbGliL3NwYXJjLXN1
bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIHVsb25n
X3QgcGZuX3Q7CnR5cGVkZWYgdWxvbmdfdCBwZ2NudF90Owp0eXBlZGVmIGxvbmcgc3BnY250X3Q7
Cgp0eXBlZGVmIHVjaGFyX3QgdXNlX3Q7CnR5cGVkZWYgc2hvcnQgc3lzaWRfdDsKdHlwZWRlZiBz
aG9ydCBpbmRleF90Owp0eXBlZGVmIHZvaWQgKnRpbWVvdXRfaWRfdDsKdHlwZWRlZiB2b2lkICpi
dWZjYWxsX2lkX3Q7CiMgMTQ5ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9saWIvZ2Nj
LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjIuMS9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQK
dHlwZWRlZiBsb25nIG9mZl90OwojIDE1OCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEv
bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4yLjEvaW5jbHVkZS9zeXMvdHlwZXMu
aCIgMyA0CnR5cGVkZWYgbG9uZ2xvbmdfdCBvZmY2NF90OwoKCgoKCgp0eXBlZGVmIHVsb25nX3Qg
aW5vX3Q7CnR5cGVkZWYgbG9uZyBibGtjbnRfdDsKdHlwZWRlZiB1bG9uZ190IGZzYmxrY250X3Q7
CnR5cGVkZWYgdWxvbmdfdCBmc2ZpbGNudF90OwojIDE4MyAiL3Vzci9sb2NhbC9wcm9kdWN0cy9n
Y2MvMy4yLjEvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4yLjEvaW5jbHVkZS9z
eXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgdV9sb25nbG9uZ190IGlubzY0X3Q7CnR5cGVkZWYgbG9u
Z2xvbmdfdCBibGtjbnQ2NF90Owp0eXBlZGVmIHVfbG9uZ2xvbmdfdCBmc2Jsa2NudDY0X3Q7CnR5
cGVkZWYgdV9sb25nbG9uZ190IGZzZmlsY250NjRfdDsKCgoKCgoKdHlwZWRlZiBsb25nIGJsa3Np
emVfdDsKCgoKdHlwZWRlZiBlbnVtIHsgX0JfRkFMU0UsIF9CX1RSVUUgfSBib29sZWFuX3Q7CiMg
MjEwICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t
c29sYXJpczIuOC8zLjIuMS9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBpbnQ2NF90
IHBhZDY0X3Q7CnR5cGVkZWYgdWludDY0X3QgdXBhZDY0X3Q7CiMgMjIzICIvdXNyL2xvY2FsL3By
b2R1Y3RzL2djYy8zLjIuMS9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjIuMS9p
bmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBsb25nbG9uZ190IG9mZnNldF90Owp0eXBl
ZGVmIHVfbG9uZ2xvbmdfdCB1X29mZnNldF90Owp0eXBlZGVmIHVfbG9uZ2xvbmdfdCBsZW5fdDsK
dHlwZWRlZiBsb25nbG9uZ190IGRpc2thZGRyX3Q7CiMgMjQ0ICIvdXNyL2xvY2FsL3Byb2R1Y3Rz
L2djYy8zLjIuMS9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjIuMS9pbmNsdWRl
L3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiB1bmlvbiB7CiAgICAgICAgb2Zmc2V0X3QgX2Y7CiAg
ICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIGludDMyX3QgX3U7CiAgICAgICAgICAgICAg
ICBpbnQzMl90IF9sOwogICAgICAgIH0gX3A7Cn0gbGxvZmZfdDsKIyAyNjQgIi91c3IvbG9jYWwv
cHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMi4x
L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIHVuaW9uIHsKICAgICAgICBkaXNrYWRk
cl90IF9mOwogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICBpbnQzMl90IF91OwogICAg
ICAgICAgICAgICAgaW50MzJfdCBfbDsKICAgICAgICB9IF9wOwp9IGxsZGFkZHJfdDsKCgp0eXBl
ZGVmIHVpbnRfdCBrX2ZsdHNldF90OwojIDI4NyAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4y
LjEvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4yLjEvaW5jbHVkZS9zeXMvdHlw
ZXMuaCIgMyA0CnR5cGVkZWYgbG9uZyBpZF90OwoKCgoKCgp0eXBlZGVmIHVpbnRfdCB1c2Vjb25k
c190OwoKCgp0eXBlZGVmIGxvbmcgc3VzZWNvbmRzX3Q7CiMgMzA4ICIvdXNyL2xvY2FsL3Byb2R1
Y3RzL2djYy8zLjIuMS9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjIuMS9pbmNs
dWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiB1bG9uZ190IG1ham9yX3Q7CnR5cGVkZWYgdWxv
bmdfdCBtaW5vcl90OwoKCgoKCnR5cGVkZWYgc2hvcnQgcHJpX3Q7CiMgMzI4ICIvdXNyL2xvY2Fs
L3Byb2R1Y3RzL2djYy8zLjIuMS9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjIu
MS9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiB1c2hvcnRfdCBvX21vZGVfdDsKdHlw
ZWRlZiBzaG9ydCBvX2Rldl90Owp0eXBlZGVmIHVzaG9ydF90IG9fdWlkX3Q7CnR5cGVkZWYgb191
aWRfdCBvX2dpZF90Owp0eXBlZGVmIHNob3J0IG9fbmxpbmtfdDsKdHlwZWRlZiBzaG9ydCBvX3Bp
ZF90Owp0eXBlZGVmIHVzaG9ydF90IG9faW5vX3Q7CgoKCgoKdHlwZWRlZiBpbnQga2V5X3Q7CgoK
CnR5cGVkZWYgdWxvbmdfdCBtb2RlX3Q7CgoKCgoKCgp0eXBlZGVmIGxvbmcgdWlkX3Q7CgoKCnR5
cGVkZWYgdWlkX3QgZ2lkX3Q7Cgp0eXBlZGVmIGlkX3QgdGFza2lkX3Q7CnR5cGVkZWYgaWRfdCBw
cm9qaWRfdDsKCgoKCgoKdHlwZWRlZiB1aW50X3QgcHRocmVhZF90Owp0eXBlZGVmIHVpbnRfdCBw
dGhyZWFkX2tleV90OwoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfbXV0ZXggewogICAgICAgIHN0
cnVjdCB7CiAgICAgICAgICAgICAgICB1aW50MTZfdCBfX3B0aHJlYWRfbXV0ZXhfZmxhZzE7CiAg
ICAgICAgICAgICAgICB1aW50OF90IF9fcHRocmVhZF9tdXRleF9mbGFnMjsKICAgICAgICAgICAg
ICAgIHVpbnQ4X3QgX19wdGhyZWFkX211dGV4X2NlaWxpbmc7CiAgICAgICAgICAgICAgICB1aW50
MTZfdCBfX3B0aHJlYWRfbXV0ZXhfdHlwZTsKICAgICAgICAgICAgICAgIHVpbnQxNl90IF9fcHRo
cmVhZF9tdXRleF9tYWdpYzsKICAgICAgICB9IF9fcHRocmVhZF9tdXRleF9mbGFnczsKICAgICAg
ICB1bmlvbiB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAg
ICB1aW50OF90IF9fcHRocmVhZF9tdXRleF9wYWRbOF07CiAgICAgICAgICAgICAgICB9IF9fcHRo
cmVhZF9tdXRleF9sb2NrNjQ7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAg
ICAgICAgICAgICB1aW50MzJfdCBfX3B0aHJlYWRfb3duZXJwaWQ7CiAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IF9fcHRocmVhZF9sb2Nrd29yZDsKICAgICAgICAgICAgICAgIH0gX19w
dGhyZWFkX211dGV4X2xvY2szMjsKICAgICAgICAgICAgICAgIHVwYWQ2NF90IF9fcHRocmVhZF9t
dXRleF9vd25lcjY0OwogICAgICAgIH0gX19wdGhyZWFkX211dGV4X2xvY2s7CiAgICAgICAgdXBh
ZDY0X3QgX19wdGhyZWFkX211dGV4X2RhdGE7Cn0gcHRocmVhZF9tdXRleF90OwoKdHlwZWRlZiBz
dHJ1Y3QgX3B0aHJlYWRfY29uZCB7CiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVp
bnQ4X3QgX19wdGhyZWFkX2NvbmRfZmxhZ1s0XTsKICAgICAgICAgICAgICAgIHVpbnQxNl90IF9f
cHRocmVhZF9jb25kX3R5cGU7CiAgICAgICAgICAgICAgICB1aW50MTZfdCBfX3B0aHJlYWRfY29u
ZF9tYWdpYzsKICAgICAgICB9IF9fcHRocmVhZF9jb25kX2ZsYWdzOwogICAgICAgIHVwYWQ2NF90
IF9fcHRocmVhZF9jb25kX2RhdGE7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCgp0eXBlZGVmIHN0cnVj
dCBfcHRocmVhZF9yd2xvY2sgewogICAgICAgIGludDMyX3QgX19wdGhyZWFkX3J3bG9ja19yZWFk
ZXJzOwogICAgICAgIHVpbnQxNl90IF9fcHRocmVhZF9yd2xvY2tfdHlwZTsKICAgICAgICB1aW50
MTZfdCBfX3B0aHJlYWRfcndsb2NrX21hZ2ljOwogICAgICAgIHVwYWQ2NF90IF9fcHRocmVhZF9y
d2xvY2tfcGFkMVszXTsKICAgICAgICB1cGFkNjRfdCBfX3B0aHJlYWRfcndsb2NrX3BhZDJbMl07
CiAgICAgICAgdXBhZDY0X3QgX19wdGhyZWFkX3J3bG9ja19wYWQzWzJdOwp9IHB0aHJlYWRfcnds
b2NrX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgdm9pZCAqX19wdGhyZWFkX2F0dHJw
Owp9IHB0aHJlYWRfYXR0cl90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIHZvaWQgKl9f
cHRocmVhZF9tdXRleGF0dHJwOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCgp0eXBlZGVmIHN0
cnVjdCB7CiAgICAgICAgdm9pZCAqX19wdGhyZWFkX2NvbmRhdHRycDsKfSBwdGhyZWFkX2NvbmRh
dHRyX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgdXBhZDY0X3QgX19wdGhyZWFkX29u
Y2VfcGFkWzRdOwp9IHB0aHJlYWRfb25jZV90OwoKCgoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAg
ICB2b2lkICpfX3B0aHJlYWRfcndsb2NrYXR0cnA7Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7Cgp0
eXBlZGVmIHVsb25nX3QgZGV2X3Q7CgoKCgoKdHlwZWRlZiB1bG9uZ190IG5saW5rX3Q7CnR5cGVk
ZWYgbG9uZyBwaWRfdDsKIyA0NzkgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMg
NAp0eXBlZGVmIGludCBzc2l6ZV90OwoKCgoKCnR5cGVkZWYgbG9uZyB0aW1lX3Q7CiMgNDk1ICIv
dXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuOC8zLjIuMS9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBpbnQgY2xvY2tpZF90
OwoKCgoKdHlwZWRlZiBpbnQgdGltZXJfdDsKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVu
Y2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50
IHVpbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyB1bG9uZzsKIyA1NjEgIi91c3IvbG9jYWwvcHJv
ZHVjdHMvZ2NjLzMuMi4xL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMi4xL2lu
Y2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdV9jaGFyOwp0eXBl
ZGVmIHVuc2lnbmVkIHNob3J0IHVfc2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50Owp0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgdV9sb25nOwp0eXBlZGVmIHN0cnVjdCBfcXVhZCB7IGludCB2
YWxbMl07IH0gcXVhZF90Owp0eXBlZGVmIHF1YWRfdCBxdWFkOwoKCgoKCgojIDEgIi91c3IvaW5j
bHVkZS9zeXMvc2VsZWN0LmgiIDEgMyA0CiMgMTIgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0Lmgi
IDMgNAojcHJhZ21hIGlkZW50ICJAKCMpc2VsZWN0LmgJMS4xNgk5OC8wNC8yNyBTTUkiIAoKCgoK
IyAxICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMSAzIDQKIyAyMiAiL3Vzci9pbmNsdWRlL3N5
cy90aW1lLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpdGltZS5oCTIuNjYJMDEvMDEvMTcgU01J
IiAKIyAzMiAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNApleHRlcm4gIkMiIHsKIyA0OSAi
L3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNApzdHJ1Y3QgdGltZXZhbCB7CiAgICAgICAgdGlt
ZV90IHR2X3NlYzsKICAgICAgICBzdXNlY29uZHNfdCB0dl91c2VjOwp9OwojIDgyICIvdXNyL2lu
Y2x1ZGUvc3lzL3RpbWUuaCIgMyA0CnN0cnVjdCB0aW1lem9uZSB7CiAgICAgICAgaW50IHR6X21p
bnV0ZXN3ZXN0OwogICAgICAgIGludCB0el9kc3R0aW1lOwp9OwoKCgoKCn0KIyAxMDAgIi91c3Iv
aW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKIyAxICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIu
MS9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjIuMS9pbmNsdWRlL3N5cy90eXBl
cy5oIiAxIDMgNAojIDEwMSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDIgMyA0CgoKCmV4dGVy
biAiQyIgewojIDE1NSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNApzdHJ1Y3QgaXRpbWVy
dmFsIHsKICAgICAgICBzdHJ1Y3QgdGltZXZhbCBpdF9pbnRlcnZhbDsKICAgICAgICBzdHJ1Y3Qg
dGltZXZhbCBpdF92YWx1ZTsKfTsKIyAyMDMgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQK
dHlwZWRlZiBsb25nbG9uZ190IGhydGltZV90OwojIDMyMCAiL3Vzci9pbmNsdWRlL3N5cy90aW1l
LmgiIDMgNAppbnQgYWRqdGltZShzdHJ1Y3QgdGltZXZhbCAqLCBzdHJ1Y3QgdGltZXZhbCAqKTsK
IyAzMzEgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKaW50IGdldGl0aW1lcihpbnQsIHN0
cnVjdCBpdGltZXJ2YWwgKik7CmludCB1dGltZXMoY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3Qg
dGltZXZhbCAqKTsKCmludCBzZXRpdGltZXIoaW50LCBjb25zdCBzdHJ1Y3QgaXRpbWVydmFsICos
IHN0cnVjdCBpdGltZXJ2YWwgKik7CiMgMzY5ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0
CmludCBzZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKiwgdm9pZCAqKTsKCmhydGltZV90IGdl
dGhydGltZSh2b2lkKTsKaHJ0aW1lX3QgZ2V0aHJ2dGltZSh2b2lkKTsKIyAzODkgIi91c3IvaW5j
bHVkZS9zeXMvdGltZS5oIiAzIDQKaW50IGdldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqLCB2
b2lkICopOwojIDQxMCAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNAojIDEgIi91c3IvaW5j
bHVkZS90aW1lLmgiIDEgMyA0CiMgMTYgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAojcHJhZ21h
IGlkZW50ICJAKCMpdGltZS5oCTEuMzkJOTkvMDgvMTAgU01JIiAKCgoKIyAxICIvdXNyL2luY2x1
ZGUvaXNvL3RpbWVfaXNvLmgiIDEgMyA0CiMgMjggIi91c3IvaW5jbHVkZS9pc28vdGltZV9pc28u
aCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIyl0aW1lX2lzby5oCTEuMQk5OS8wOC8wOSBTTUkiIAoK
CgoKZXh0ZXJuICJDIiB7CiMgNjkgIi91c3IvaW5jbHVkZS9pc28vdGltZV9pc28uaCIgMyA0CnN0
cnVjdCB0bSB7CiAgICAgICAgaW50IHRtX3NlYzsKICAgICAgICBpbnQgdG1fbWluOwogICAgICAg
IGludCB0bV9ob3VyOwogICAgICAgIGludCB0bV9tZGF5OwogICAgICAgIGludCB0bV9tb247CiAg
ICAgICAgaW50IHRtX3llYXI7CiAgICAgICAgaW50IHRtX3dkYXk7CiAgICAgICAgaW50IHRtX3lk
YXk7CiAgICAgICAgaW50IHRtX2lzZHN0Owp9OwoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWUoY29u
c3Qgc3RydWN0IHRtICopOwpleHRlcm4gY2xvY2tfdCBjbG9jayh2b2lkKTsKZXh0ZXJuIGNoYXIg
KmN0aW1lKGNvbnN0IHRpbWVfdCAqKTsKZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSh0aW1lX3QsIHRp
bWVfdCk7CmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZShjb25zdCB0aW1lX3QgKik7CmV4dGVybiBz
dHJ1Y3QgdG0gKmxvY2FsdGltZShjb25zdCB0aW1lX3QgKik7CmV4dGVybiB0aW1lX3QgbWt0aW1l
KHN0cnVjdCB0bSAqKTsKZXh0ZXJuIHRpbWVfdCB0aW1lKHRpbWVfdCAqKTsKZXh0ZXJuIHNpemVf
dCBzdHJmdGltZShjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgdG0g
Kik7CiMgMTEzICIvdXNyL2luY2x1ZGUvaXNvL3RpbWVfaXNvLmgiIDMgNAp9CiMgMjEgIi91c3Iv
aW5jbHVkZS90aW1lLmgiIDIgMyA0CiMgNDMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNApleHRl
cm4gIkMiIHsKIyA2MCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0CmV4dGVybiBzdHJ1Y3QgdG0g
KmdtdGltZV9yKGNvbnN0IHRpbWVfdCAqLCBzdHJ1Y3QgdG0gKik7CmV4dGVybiBzdHJ1Y3QgdG0g
KmxvY2FsdGltZV9yKGNvbnN0IHRpbWVfdCAqLCBzdHJ1Y3QgdG0gKik7CgoKCgoKZXh0ZXJuIGNo
YXIgKnN0cnB0aW1lKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzdHJ1Y3QgdG0gKik7CiMg
ODMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zeXMvdGltZV9p
bXBsLmgiIDEgMyA0CiMgMTUgIi91c3IvaW5jbHVkZS9zeXMvdGltZV9pbXBsLmgiIDMgNAojcHJh
Z21hIGlkZW50ICJAKCMpdGltZV9pbXBsLmgJMS41CTk5LzEwLzA1IFNNSSIKCgoKCmV4dGVybiAi
QyIgewojIDM2ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVfaW1wbC5oIiAzIDQKdHlwZWRlZiBzdHJ1
Y3QgdGltZXNwZWMgewogICAgICAgIHRpbWVfdCB0dl9zZWM7CiAgICAgICAgbG9uZyB0dl9uc2Vj
Owp9IHRpbWVzcGVjX3Q7CiMgNjAgIi91c3IvaW5jbHVkZS9zeXMvdGltZV9pbXBsLmgiIDMgNAp0
eXBlZGVmIHN0cnVjdCB0aW1lc3BlYyB0aW1lc3RydWNfdDsKIyA3OSAiL3Vzci9pbmNsdWRlL3N5
cy90aW1lX2ltcGwuaCIgMyA0CnR5cGVkZWYgc3RydWN0IGl0aW1lcnNwZWMgewogICAgICAgIHN0
cnVjdCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsKICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfdmFs
dWU7Cn0gaXRpbWVyc3BlY190OwojIDEzNiAiL3Vzci9pbmNsdWRlL3N5cy90aW1lX2ltcGwuaCIg
MyA0Cn0KIyA4NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzIDQKIyA5OCAiL3Vzci9pbmNsdWRl
L3RpbWUuaCIgMyA0CnVuaW9uIHNpZ3ZhbCB7CiAgICAgICAgaW50IHNpdmFsX2ludDsKICAgICAg
ICB2b2lkICpzaXZhbF9wdHI7Cn07CgoKCgpzdHJ1Y3Qgc2lnZXZlbnQgewogICAgICAgIGludCBz
aWdldl9ub3RpZnk7CiAgICAgICAgaW50IHNpZ2V2X3NpZ25vOwogICAgICAgIHVuaW9uIHNpZ3Zh
bCBzaWdldl92YWx1ZTsKICAgICAgICB2b2lkICgqc2lnZXZfbm90aWZ5X2Z1bmN0aW9uKSh1bmlv
biBzaWd2YWwpOwogICAgICAgIHB0aHJlYWRfYXR0cl90ICpzaWdldl9ub3RpZnlfYXR0cmlidXRl
czsKICAgICAgICBpbnQgX19zaWdldl9wYWQyOwp9OwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0cmVz
KGNsb2NraWRfdCwgc3RydWN0IHRpbWVzcGVjICopOwpleHRlcm4gaW50IGNsb2NrX2dldHRpbWUo
Y2xvY2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMgKik7CmV4dGVybiBpbnQgY2xvY2tfc2V0dGltZShj
bG9ja2lkX3QsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqKTsKZXh0ZXJuIGludCB0aW1lcl9jcmVh
dGUoY2xvY2tpZF90LCBzdHJ1Y3Qgc2lnZXZlbnQgKiwgdGltZXJfdCAqKTsKZXh0ZXJuIGludCB0
aW1lcl9kZWxldGUodGltZXJfdCk7CmV4dGVybiBpbnQgdGltZXJfZ2V0b3ZlcnJ1bih0aW1lcl90
KTsKZXh0ZXJuIGludCB0aW1lcl9nZXR0aW1lKHRpbWVyX3QsIHN0cnVjdCBpdGltZXJzcGVjICop
OwpleHRlcm4gaW50IHRpbWVyX3NldHRpbWUodGltZXJfdCwgaW50LCBjb25zdCBzdHJ1Y3QgaXRp
bWVyc3BlYyAqLAogICAgICAgICAgICAgICAgc3RydWN0IGl0aW1lcnNwZWMgKik7CmV4dGVybiBp
bnQgbmFub3NsZWVwKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqLCBzdHJ1Y3QgdGltZXNwZWMgKik7
CgoKCgpleHRlcm4gdm9pZCB0enNldCh2b2lkKTsKCmV4dGVybiBjaGFyICp0em5hbWVbMl07CiMg
MTQyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKZXh0ZXJuIGxvbmcgdGltZXpvbmU7CmV4dGVy
biBpbnQgZGF5bGlnaHQ7CiMgMTU2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKZXh0ZXJuIHN0
cnVjdCB0bSAqZ2V0ZGF0ZShjb25zdCBjaGFyICopOwoKCgoKCgpleHRlcm4gaW50IGdldGRhdGVf
ZXJyOwojIDI1MCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0CmV4dGVybiBjaGFyICphc2N0aW1l
X3IoY29uc3Qgc3RydWN0IHRtICosIGNoYXIgKik7CmV4dGVybiBjaGFyICpjdGltZV9yKGNvbnN0
IHRpbWVfdCAqLCBjaGFyICopOwojcHJhZ21hIHJlZGVmaW5lX2V4dG5hbWUgY3RpbWVfciBfX3Bv
c2l4X2N0aW1lX3IKI3ByYWdtYSByZWRlZmluZV9leHRuYW1lIGFzY3RpbWVfciBfX3Bvc2l4X2Fz
Y3RpbWVfcgojIDMxOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0Cn0KIyA0MTEgIi91c3IvaW5j
bHVkZS9zeXMvdGltZS5oIiAyIDMgNAojIDQyMyAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMg
NAojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEgMyA0CiMgNDI0ICIvdXNyL2luY2x1
ZGUvc3lzL3RpbWUuaCIgMiAzIDQKCgoKCgp9CiMgMTggIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0
LmgiIDIgMyA0CgoKCmV4dGVybiAiQyIgewojIDQ1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5o
IiAzIDQKdHlwZWRlZiBsb25nIGZkX21hc2s7Cgp0eXBlZGVmIGxvbmcgZmRzX21hc2s7CiMgNzMg
Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBmZF9zZXQgewoK
CgogICAgICAgIGxvbmcgZmRzX2JpdHNbKCgoMTAyNCkrKCgoc2l6ZW9mIChmZHNfbWFzaykgKiA4
KSktMSkpLygoc2l6ZW9mIChmZHNfbWFzaykgKiA4KSkpXTsKfSBmZF9zZXQ7CiMgOTcgIi91c3Iv
aW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMgNApleHRlcm4gaW50IHNlbGVjdChpbnQsIGZkX3NldCAq
LCBmZF9zZXQgKiwgZmRfc2V0ICosIHN0cnVjdCB0aW1ldmFsICopOwoKCgoKCgp9CiMgNTc0ICIv
dXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuOC8zLjIuMS9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAojIDU5MCAiL3Vzci9sb2NhbC9w
cm9kdWN0cy9nY2MvMy4yLjEvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4yLjEv
aW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0Cn0KIyAyMSAiL3Vzci9pbmNsdWRlL3N5cy93YWl0Lmgi
IDIgMyA0CgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAxIDMgNAojIDE2ICIv
dXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpcmVzb3Vy
Y2UuaAkxLjI1CTk4LzA2LzMwIFNNSSIgCgoKCgoKCgpleHRlcm4gIkMiIHsKIyA2NyAiL3Vzci9p
bmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAzIDQKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHJsaW1fdDsK
IyAxMDIgIi91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMyA0CnN0cnVjdCBybGltaXQgewog
ICAgICAgIHJsaW1fdCBybGltX2N1cjsKICAgICAgICBybGltX3QgcmxpbV9tYXg7Cn07CgoKCgp0
eXBlZGVmIHVfbG9uZ2xvbmdfdCBybGltNjRfdDsKCgoKCgpzdHJ1Y3QgcmxpbWl0NjQgewogICAg
ICAgIHJsaW02NF90IHJsaW1fY3VyOwogICAgICAgIHJsaW02NF90IHJsaW1fbWF4Owp9OwojIDE0
MyAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAzIDQKc3RydWN0IHJ1c2FnZSB7CiAgICAg
ICAgc3RydWN0IHRpbWV2YWwgcnVfdXRpbWU7CiAgICAgICAgc3RydWN0IHRpbWV2YWwgcnVfc3Rp
bWU7CiAgICAgICAgbG9uZyBydV9tYXhyc3M7CiAgICAgICAgbG9uZyBydV9peHJzczsKICAgICAg
ICBsb25nIHJ1X2lkcnNzOwogICAgICAgIGxvbmcgcnVfaXNyc3M7CiAgICAgICAgbG9uZyBydV9t
aW5mbHQ7CiAgICAgICAgbG9uZyBydV9tYWpmbHQ7CiAgICAgICAgbG9uZyBydV9uc3dhcDsKICAg
ICAgICBsb25nIHJ1X2luYmxvY2s7CiAgICAgICAgbG9uZyBydV9vdWJsb2NrOwogICAgICAgIGxv
bmcgcnVfbXNnc25kOwogICAgICAgIGxvbmcgcnVfbXNncmN2OwogICAgICAgIGxvbmcgcnVfbnNp
Z25hbHM7CiAgICAgICAgbG9uZyBydV9udmNzdzsKICAgICAgICBsb25nIHJ1X25pdmNzdzsKfTsK
IyAxOTMgIi91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMyA0CmV4dGVybiBpbnQgc2V0cmxp
bWl0KGludCwgY29uc3Qgc3RydWN0IHJsaW1pdCAqKTsKZXh0ZXJuIGludCBnZXRybGltaXQoaW50
LCBzdHJ1Y3QgcmxpbWl0ICopOwoKCgoKZXh0ZXJuIGludCBzZXRybGltaXQ2NChpbnQsIGNvbnN0
IHN0cnVjdCBybGltaXQ2NCAqKTsKZXh0ZXJuIGludCBnZXRybGltaXQ2NChpbnQsIHN0cnVjdCBy
bGltaXQ2NCAqKTsKCgpleHRlcm4gaW50IGdldHByaW9yaXR5KGludCwgaWRfdCk7CmV4dGVybiBp
bnQgc2V0cHJpb3JpdHkoaW50LCBpZF90LCBpbnQpOwpleHRlcm4gaW50IGdldHJ1c2FnZShpbnQs
IHN0cnVjdCBydXNhZ2UgKik7CiMgMjI4ICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMg
NAp9CiMgMjUgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAyIDMgNAojIDEgIi91c3IvaW5jbHVk
ZS9zeXMvc2lnaW5mby5oIiAxIDMgNAojIDE2ICIvdXNyL2luY2x1ZGUvc3lzL3NpZ2luZm8uaCIg
MyA0CiNwcmFnbWEgaWRlbnQgIkAoIylzaWdpbmZvLmgJMS41NAk5OC8wMy8yNyBTTUkiIAoKCgoK
CmV4dGVybiAiQyIgewojIDEyNiAiL3Vzci9pbmNsdWRlL3N5cy9zaWdpbmZvLmgiIDMgNAojIDEg
Ii91c3IvaW5jbHVkZS9zeXMvbWFjaHNpZy5oIiAxIDMgNAojIDE2ICIvdXNyL2luY2x1ZGUvc3lz
L21hY2hzaWcuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIyltYWNoc2lnLmgJMS4xNQk5OS8wOC8x
NSBTTUkiCgoKCgpleHRlcm4gIkMiIHsKIyAxMDcgIi91c3IvaW5jbHVkZS9zeXMvbWFjaHNpZy5o
IiAzIDQKfQojIDEyNyAiL3Vzci9pbmNsdWRlL3N5cy9zaWdpbmZvLmgiIDIgMyA0CiMgMjIxICIv
dXNyL2luY2x1ZGUvc3lzL3NpZ2luZm8uaCIgMyA0CnR5cGVkZWYgc3RydWN0IHNpZ2luZm8gewoK
CgogICAgICAgIGludCBzaV9zaWdubzsKICAgICAgICBpbnQgc2lfY29kZTsKICAgICAgICBpbnQg
c2lfZXJybm87CgoKCiAgICAgICAgdW5pb24gewoKICAgICAgICAgICAgICAgIGludCBfX3BhZFso
KDEyOCAvIHNpemVvZiAoaW50KSkgLSAzKV07CgogICAgICAgICAgICAgICAgc3RydWN0IHsKICAg
ICAgICAgICAgICAgICAgICAgICAgcGlkX3QgX19waWQ7CiAgICAgICAgICAgICAgICAgICAgICAg
IHVuaW9uIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlkX3QgX191aWQ7CgoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIHNpZ3ZhbCBfX3ZhbHVlOwoKCgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gX19raWxsOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjbG9ja190IF9fdXRpbWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgX19zdGF0dXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbG9ja190IF9fc3RpbWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBf
X2NsZDsKICAgICAgICAgICAgICAgICAgICAgICAgfSBfX3BkYXRhOwogICAgICAgICAgICAgICAg
fSBfX3Byb2M7CgogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAg
ICAgdm9pZCAqX19hZGRyOwogICAgICAgICAgICAgICAgICAgICAgICBpbnQgX190cmFwbm87CiAg
ICAgICAgICAgICAgICAgICAgICAgIGNhZGRyX3QgX19wYzsKICAgICAgICAgICAgICAgIH0gX19m
YXVsdDsKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewoKICAgICAgICAgICAgICAgICAgICAgICAg
aW50IF9fZmQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgX19iYW5kOwogICAgICAgICAg
ICAgICAgfSBfX2ZpbGU7CgogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAg
ICAgICAgICAgY2FkZHJfdCBfX2ZhZGRyOwoKCiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVz
dHJ1Y190IF9fdHN0YW1wOwoKCgogICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBfX3N5c2Nh
bGw7CiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19uc3lzYXJnOwogICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyIF9fZmF1bHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgX19z
eXNhcmdbOF07CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX21zdGF0ZVsxMF07CiAgICAg
ICAgICAgICAgICB9IF9fcHJvZjsKCiAgICAgICAgfSBfX2RhdGE7Cgp9IHNpZ2luZm9fdDsKIyAz
NTQgIi91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3Qga19zaWdp
bmZvIHsKICAgICAgICBpbnQgc2lfc2lnbm87CiAgICAgICAgaW50IHNpX2NvZGU7CiAgICAgICAg
aW50IHNpX2Vycm5vOwoKCgogICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIHN0cnVjdCB7
CiAgICAgICAgICAgICAgICAgICAgICAgIHBpZF90IF9fcGlkOwogICAgICAgICAgICAgICAgICAg
ICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZF90IF9fdWlkOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gc2lndmFsIF9fdmFsdWU7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBfX2tpbGw7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNsb2NrX3QgX191dGltZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBfX3N0YXR1czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNsb2NrX3QgX19zdGltZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF9f
Y2xkOwogICAgICAgICAgICAgICAgICAgICAgICB9IF9fcGRhdGE7CiAgICAgICAgICAgICAgICB9
IF9fcHJvYzsKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAg
ICB2b2lkICpfX2FkZHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3RyYXBubzsKICAg
ICAgICAgICAgICAgICAgICAgICAgY2FkZHJfdCBfX3BjOwogICAgICAgICAgICAgICAgfSBfX2Zh
dWx0OwoKICAgICAgICAgICAgICAgIHN0cnVjdCB7CgogICAgICAgICAgICAgICAgICAgICAgICBp
bnQgX19mZDsKICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBfX2JhbmQ7CiAgICAgICAgICAg
ICAgICB9IF9fZmlsZTsKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAg
ICAgICAgICBjYWRkcl90IF9fZmFkZHI7CgoKCiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVz
dHJ1Y190IF9fdHN0YW1wOwoKCgogICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBfX3N5c2Nh
bGw7CiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19uc3lzYXJnOwogICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyIF9fZmF1bHQ7CgoKCiAgICAgICAgICAgICAgICB9IF9fcHJvZjsKCiAg
ICAgICAgfSBfX2RhdGE7Cgp9IGtfc2lnaW5mb190OwoKdHlwZWRlZiBzdHJ1Y3Qgc2lncXVldWUg
ewogICAgICAgIHN0cnVjdCBzaWdxdWV1ZSAqc3FfbmV4dDsKICAgICAgICBrX3NpZ2luZm9fdCBz
cV9pbmZvOwogICAgICAgIHZvaWQgKCpzcV9mdW5jKShzdHJ1Y3Qgc2lncXVldWUgKik7CiAgICAg
ICAgdm9pZCAqc3FfYmFja3B0cjsKCn0gc2lncXVldWVfdDsKIyA0NTQgIi91c3IvaW5jbHVkZS9z
eXMvc2lnaW5mby5oIiAzIDQKfQojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzIDQK
IyAxICIvdXNyL2luY2x1ZGUvc3lzL3Byb2NzZXQuaCIgMSAzIDQKIyAxNiAiL3Vzci9pbmNsdWRl
L3N5cy9wcm9jc2V0LmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpcHJvY3NldC5oCTEuMjAJMDAv
MDIvMTQgU01JIiAKCgpleHRlcm4gIkMiIHsKIyA0MSAiL3Vzci9pbmNsdWRlL3N5cy9wcm9jc2V0
LmgiIDMgNAp0eXBlZGVmIGVudW0KCiAgICAgICAgaWR0eXBlCgogICAgICAgICAgICAgICAgewog
ICAgICAgIFBfUElELAogICAgICAgIFBfUFBJRCwKICAgICAgICBQX1BHSUQsCgogICAgICAgIFBf
U0lELAogICAgICAgIFBfQ0lELAogICAgICAgIFBfVUlELAogICAgICAgIFBfR0lELAogICAgICAg
IFBfQUxMLAogICAgICAgIFBfTFdQSUQsCiAgICAgICAgUF9UQVNLSUQsCiAgICAgICAgUF9QUk9K
SUQKfSBpZHR5cGVfdDsKIyA2NyAiL3Vzci9pbmNsdWRlL3N5cy9wcm9jc2V0LmgiIDMgNAp0eXBl
ZGVmIGVudW0gaWRvcCB7CiAgICAgICAgUE9QX0RJRkYsCgoKICAgICAgICBQT1BfQU5ELAoKCiAg
ICAgICAgUE9QX09SLAoKCiAgICAgICAgUE9QX1hPUgoKCn0gaWRvcF90OwoKCgoKCgoKdHlwZWRl
ZiBzdHJ1Y3QgcHJvY3NldCB7CiAgICAgICAgaWRvcF90IHBfb3A7CgoKCgogICAgICAgIGlkdHlw
ZV90IHBfbGlkdHlwZTsKCgogICAgICAgIGlkX3QgcF9saWQ7CgogICAgICAgIGlkdHlwZV90IHBf
cmlkdHlwZTsKCgogICAgICAgIGlkX3QgcF9yaWQ7Cn0gcHJvY3NldF90OwojIDEzMiAiL3Vzci9p
bmNsdWRlL3N5cy9wcm9jc2V0LmgiIDMgNAp9CiMgMjcgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5o
IiAyIDMgNAoKCgpleHRlcm4gIkMiIHsKIyA4NiAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDMg
NApleHRlcm4gcGlkX3Qgd2FpdChpbnQgKik7CmV4dGVybiBwaWRfdCB3YWl0cGlkKHBpZF90LCBp
bnQgKiwgaW50KTsKCgpleHRlcm4gaW50IHdhaXRpZChpZHR5cGVfdCwgaWRfdCwgc2lnaW5mb190
ICosIGludCk7CmV4dGVybiBwaWRfdCB3YWl0MyhpbnQgKiwgaW50LCBzdHJ1Y3QgcnVzYWdlICop
OwoKCgoKZXh0ZXJuIHBpZF90IHdhaXQ0KHBpZF90LCBpbnQgKiwgaW50LCBzdHJ1Y3QgcnVzYWdl
ICopOwojIDExOCAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDMgNAp9CiMgMjMgIi91c3IvaW5j
bHVkZS9zdGRsaWIuaCIgMiAzIDQKIyA2NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0
ZXJuICJDIiB7CgoKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBsb25nIGxvbmcgcXVvdDsKICAg
ICAgICBsb25nIGxvbmcgcmVtOwp9IGxsZGl2X3Q7CiMgMTA5ICIvdXNyL2luY2x1ZGUvc3RkbGli
LmgiIDMgNApleHRlcm4gaW50IHJhbmRfcih1bnNpZ25lZCBpbnQgKik7CgoKZXh0ZXJuIHZvaWQg
X2V4aXRoYW5kbGUodm9pZCk7CgoKCgpleHRlcm4gZG91YmxlIGRyYW5kNDgodm9pZCk7CmV4dGVy
biBkb3VibGUgZXJhbmQ0OCh1bnNpZ25lZCBzaG9ydCAqKTsKZXh0ZXJuIGxvbmcganJhbmQ0OCh1
bnNpZ25lZCBzaG9ydCAqKTsKZXh0ZXJuIHZvaWQgbGNvbmc0OCh1bnNpZ25lZCBzaG9ydCAqKTsK
ZXh0ZXJuIGxvbmcgbHJhbmQ0OCh2b2lkKTsKZXh0ZXJuIGxvbmcgbXJhbmQ0OCh2b2lkKTsKZXh0
ZXJuIGxvbmcgbnJhbmQ0OCh1bnNpZ25lZCBzaG9ydCAqKTsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0
ICpzZWVkNDgodW5zaWduZWQgc2hvcnQgKik7CmV4dGVybiB2b2lkIHNyYW5kNDgobG9uZyk7CmV4
dGVybiBpbnQgcHV0ZW52KGNoYXIgKik7CmV4dGVybiB2b2lkIHNldGtleShjb25zdCBjaGFyICop
OwojIDE1MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIGludCBta3N0ZW1wKGNo
YXIgKik7CgoKCgpleHRlcm4gaW50IG1rc3RlbXA2NChjaGFyICopOwoKCgoKCmV4dGVybiBsb25n
IGE2NGwoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKmVjdnQoZG91YmxlLCBpbnQsIGludCAq
LCBpbnQgKik7CmV4dGVybiBjaGFyICpmY3Z0KGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICopOwpl
eHRlcm4gY2hhciAqZ2N2dChkb3VibGUsIGludCwgY2hhciAqKTsKZXh0ZXJuIGludCBnZXRzdWJv
cHQoY2hhciAqKiwgY2hhciAqY29uc3QgKiwgY2hhciAqKik7CmV4dGVybiBpbnQgZ3JhbnRwdChp
bnQpOwpleHRlcm4gY2hhciAqaW5pdHN0YXRlKHVuc2lnbmVkLCBjaGFyICosIHNpemVfdCk7CmV4
dGVybiBjaGFyICpsNjRhKGxvbmcpOwpleHRlcm4gY2hhciAqbWt0ZW1wKGNoYXIgKik7CmV4dGVy
biBjaGFyICpwdHNuYW1lKGludCk7CmV4dGVybiBsb25nIHJhbmRvbSh2b2lkKTsKZXh0ZXJuIGNo
YXIgKnJlYWxwYXRoKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnNldHN0YXRl
KGNvbnN0IGNoYXIgKik7CmV4dGVybiB2b2lkIHNyYW5kb20odW5zaWduZWQpOwpleHRlcm4gaW50
IHR0eXNsb3Qodm9pZCk7CmV4dGVybiBpbnQgdW5sb2NrcHQoaW50KTsKZXh0ZXJuIHZvaWQgKnZh
bGxvYyhzaXplX3QpOwoKCgoKZXh0ZXJuIGludCBkdXAyKGludCwgaW50KTsKZXh0ZXJuIGNoYXIg
KnFlY3Z0KGxvbmcgZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKik7CmV4dGVybiBjaGFyICpxZmN2
dChsb25nIGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICopOwpleHRlcm4gY2hhciAqcWdjdnQobG9u
ZyBkb3VibGUsIGludCwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKmdldGN3ZChjaGFyICosIHNpemVf
dCk7CmV4dGVybiBjb25zdCBjaGFyICpnZXRleGVjbmFtZSh2b2lkKTsKZXh0ZXJuIGNoYXIgKmdl
dGxvZ2luKHZvaWQpOwpleHRlcm4gaW50IGdldG9wdChpbnQsIGNoYXIgKmNvbnN0ICosIGNvbnN0
IGNoYXIgKik7CmV4dGVybiBjaGFyICpvcHRhcmc7CmV4dGVybiBpbnQgb3B0aW5kLCBvcHRlcnIs
IG9wdG9wdDsKZXh0ZXJuIGNoYXIgKmdldHBhc3MoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIg
KmdldHBhc3NwaHJhc2UoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBnZXRwdyh1aWRfdCwgY2hh
ciAqKTsKZXh0ZXJuIGludCBpc2F0dHkoaW50KTsKZXh0ZXJuIHZvaWQgKm1lbWFsaWduKHNpemVf
dCwgc2l6ZV90KTsKZXh0ZXJuIGNoYXIgKnR0eW5hbWUoaW50KTsKCgpleHRlcm4gbG9uZyBsb25n
IGF0b2xsKGNvbnN0IGNoYXIgKik7CmV4dGVybiBsb25nIGxvbmcgbGxhYnMobG9uZyBsb25nKTsK
ZXh0ZXJuIGxsZGl2X3QgbGxkaXYobG9uZyBsb25nLCBsb25nIGxvbmcpOwpleHRlcm4gY2hhciAq
bGx0b3N0cihsb25nIGxvbmcsIGNoYXIgKik7CmV4dGVybiBsb25nIGxvbmcgc3RydG9sbChjb25z
dCBjaGFyICosIGNoYXIgKiosIGludCk7CmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgc3RydG91
bGwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwpleHRlcm4gY2hhciAqdWxsdG9zdHIodW5z
aWduZWQgbG9uZyBsb25nLCBjaGFyICopOwojIDMwOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAz
IDQKfQojIDUzICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIu
MS9jc3RkbGliIiAyIDMKIyA4NCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVk
ZS9jKysvMy4yLjEvY3N0ZGxpYiIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmRpdl90Owog
IHVzaW5nIDo6bGRpdl90OwoKICB1c2luZyA6OmFib3J0OwogIHVzaW5nIDo6YWJzOwogIHVzaW5n
IDo6YXRleGl0OwogIHVzaW5nIDo6YXRvZjsKICB1c2luZyA6OmF0b2k7CiAgdXNpbmcgOjphdG9s
OwogIHVzaW5nIDo6YnNlYXJjaDsKICB1c2luZyA6OmNhbGxvYzsKICB1c2luZyA6OmRpdjsKICB1
c2luZyA6OmV4aXQ7CiAgdXNpbmcgOjpmcmVlOwogIHVzaW5nIDo6Z2V0ZW52OwogIHVzaW5nIDo6
bGFiczsKICB1c2luZyA6OmxkaXY7CiAgdXNpbmcgOjptYWxsb2M7CiAgdXNpbmcgOjptYmxlbjsK
ICB1c2luZyA6Om1ic3Rvd2NzOwogIHVzaW5nIDo6bWJ0b3djOwogIHVzaW5nIDo6cXNvcnQ7CiAg
dXNpbmcgOjpyYW5kOwogIHVzaW5nIDo6cmVhbGxvYzsKICB1c2luZyA6OnNyYW5kOwogIHVzaW5n
IDo6c3RydG9kOwogIHVzaW5nIDo6c3RydG9sOwogIHVzaW5nIDo6c3RydG91bDsKICB1c2luZyA6
OnN5c3RlbTsKICB1c2luZyA6Ondjc3RvbWJzOwogIHVzaW5nIDo6d2N0b21iOwoKICBpbmxpbmUg
bG9uZwogIGFicyhsb25nIF9faSkgeyByZXR1cm4gbGFicyhfX2kpOyB9CgogIGlubGluZSBsZGl2
X3QKICBkaXYobG9uZyBfX2ksIGxvbmcgX19qKSB7IHJldHVybiBsZGl2KF9faSwgX19qKTsgfQp9
CiMgNjggIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2Jp
dHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIu
MS9pbmNsdWRlL2MrKy8zLjIuMS9uZXciIDEgMwojIDQyICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2dj
Yy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9uZXciIDMKIyAxICIvdXNyL2xvY2FsL3Byb2R1Y3Rz
L2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9leGNlcHRpb24iIDEgMwojIDQwICIvdXNyL2xv
Y2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9leGNlcHRpb24iIDMKZXh0
ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewoKCgoKCgogIGNsYXNzIGV4Y2VwdGlvbgogIHsK
ICBwdWJsaWM6CiAgICBleGNlcHRpb24oKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+ZXhjZXB0
aW9uKCkgdGhyb3coKTsKCgogICAgdmlydHVhbCBjb25zdCBjaGFyKiB3aGF0KCkgY29uc3QgdGhy
b3coKTsKICB9OwoKCgogIGNsYXNzIGJhZF9leGNlcHRpb24gOiBwdWJsaWMgZXhjZXB0aW9uCiAg
ewogIHB1YmxpYzoKICAgIGJhZF9leGNlcHRpb24oKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFs
IH5iYWRfZXhjZXB0aW9uKCkgdGhyb3coKTsKICB9OwoKCiAgdHlwZWRlZiB2b2lkICgqdGVybWlu
YXRlX2hhbmRsZXIpICgpOwoKICB0eXBlZGVmIHZvaWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIpICgp
OwoKCiAgdGVybWluYXRlX2hhbmRsZXIgc2V0X3Rlcm1pbmF0ZSh0ZXJtaW5hdGVfaGFuZGxlcikg
dGhyb3coKTsKCgogIHZvaWQgdGVybWluYXRlKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5f
XykpOwoKCiAgdW5leHBlY3RlZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkKHVuZXhwZWN0ZWRfaGFu
ZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdW5leHBlY3RlZCgpIF9fYXR0cmlidXRlX18gKChfX25v
cmV0dXJuX18pKTsKIyA5OCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9j
KysvMy4yLjEvZXhjZXB0aW9uIiAzCiAgYm9vbCB1bmNhdWdodF9leGNlcHRpb24oKSB0aHJvdygp
Owp9CgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKIyAxMTEgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2Nj
LzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2V4Y2VwdGlvbiIgMwogIHZvaWQgX192ZXJib3NlX3Rl
cm1pbmF0ZV9oYW5kbGVyICgpOwp9Cgp9CiMgNDMgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMu
Mi4xL2luY2x1ZGUvYysrLzMuMi4xL25ldyIgMiAzCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNl
IHN0ZAp7CgoKICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1Ymxp
YzoKICAgIGJhZF9hbGxvYygpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF9hbGxvYygp
IHRocm93KCk7CiAgfTsKCiAgc3RydWN0IG5vdGhyb3dfdCB7IH07CiAgZXh0ZXJuIGNvbnN0IG5v
dGhyb3dfdCBub3Rocm93OwoKCiAgdHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7CgogIG5l
d19oYW5kbGVyIHNldF9uZXdfaGFuZGxlcihuZXdfaGFuZGxlcikgdGhyb3coKTsKfQojIDc5ICIv
dXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9uZXciIDMKdm9p
ZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lk
KiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9p
ZCBvcGVyYXRvciBkZWxldGUodm9pZCopIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10o
dm9pZCopIHRocm93KCk7CnZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgY29uc3Qgc3Rk
Ojpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwg
Y29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lk
KiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtd
KHZvaWQqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CgoKaW5saW5lIHZvaWQqIG9w
ZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgdm9pZCogX19wKSB0aHJvdygpIHsgcmV0dXJuIF9fcDsg
fQppbmxpbmUgdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIHZvaWQqIF9fcCkgdGhy
b3coKSB7IHJldHVybiBfX3A7IH0KCgppbmxpbmUgdm9pZCBvcGVyYXRvciBkZWxldGUgKHZvaWQq
LCB2b2lkKikgdGhyb3coKSB7IH07CmlubGluZSB2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQq
LCB2b2lkKikgdGhyb3coKSB7IH07Cgp9CiMgNzAgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMu
Mi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3Iv
bG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2lvc2Z3ZCIgMSAzCiMg
NDMgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2lvc2Z3
ZCIgMwoKCiMgMSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4y
LjEvYml0cy9zdHJpbmdmd2QuaCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMu
Mi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RyaW5nZndkLmgiIDMKCgoKbmFtZXNwYWNlIHN0
ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYWxsb2NhdG9yOwoKICB0
ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM7CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4s
CiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xh
c3MgYmFzaWNfc3RyaW5nOwoKICB0ZW1wbGF0ZTw+IHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPjsK
CiAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hhcj4gc3RyaW5nOwoKCgoKCgp9CiMgNDYgIi91c3Iv
bG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2lvc2Z3ZCIgMiAzCiMg
MSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9m
cG9zLmgiIDEgMwojIDQzICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2Mr
Ky8zLjIuMS9iaXRzL2Zwb3MuaCIgMwoKIyAxICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIu
MS9pbmNsdWRlL2MrKy8zLjIuMS9zcGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL2MrK2lvLmgiIDEg
MwojIDM1ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9z
cGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL2MrK2lvLmgiIDMKIyAxICIvdXNyL2xvY2FsL3Byb2R1
Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9jc3RkaW8iIDEgMwojIDQ4ICIvdXNyL2xv
Y2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9jc3RkaW8iIDMKCgoKCiMg
MSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
bGFyaXMyLjgvMy4yLjEvaW5jbHVkZS9zdGRpby5oIiAxIDMgNAojIDE0ICIvdXNyL2xvY2FsL3By
b2R1Y3RzL2djYy8zLjIuMS9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjIuMS9p
bmNsdWRlL3N0ZGlvLmgiIDMgNAojIDEgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xp
Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvc3RkYXJnLmgiIDEg
MyA0CiMgNDMgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9nY2MtbGliL3NwYXJj
LXN1bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvc3RkYXJnLmgiIDMgNAp0eXBlZGVmIF9fYnVp
bHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OwojIDE1ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2dj
Yy8zLjIuMS9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjIuMS9pbmNsdWRlL3N0
ZGlvLmgiIDIgMyA0CiMgMzQgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9nY2Mt
bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvc3RkaW8uaCIgMyA0CiNwcmFn
bWEgaWRlbnQgIkAoIylzdGRpby5oCTEuNzgJOTkvMTIvMDggU01JIiAKCiMgMSAiL3Vzci9pbmNs
dWRlL2lzby9zdGRpb19pc28uaCIgMSAzIDQKIyAzMiAiL3Vzci9pbmNsdWRlL2lzby9zdGRpb19p
c28uaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylzdGRpb19pc28uaAkxLjIJOTkvMTAvMjUgU01J
IgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdmFfbGlzdC5oIiAxIDMgNAojIDkgIi91c3IvaW5j
bHVkZS9zeXMvdmFfbGlzdC5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXZhX2xpc3QuaAkxLjEy
CTk5LzA1LzA0IFNNSSIKIyAyMiAiL3Vzci9pbmNsdWRlL3N5cy92YV9saXN0LmgiIDMgNApleHRl
cm4gIkMiIHsKCgoKdHlwZWRlZiB2b2lkICpfX3ZhX2xpc3Q7CgoKCgoKfQojIDM3ICIvdXNyL2lu
Y2x1ZGUvaXNvL3N0ZGlvX2lzby5oIiAyIDMgNAojIDEgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2Nj
LzMuMi4xL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvc3Rk
aW9fdGFnLmgiIDEgMyA0CiMgMTggIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvc3RkaW9fdGFnLmgiIDMg
NAojcHJhZ21hIGlkZW50ICJAKCMpc3RkaW9fdGFnLmgJMS4zCTk4LzA0LzIwIFNNSSIKCgpleHRl
cm4gIkMiIHsKIyAzMCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvbGliL2djYy1saWIv
c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4yLjEvaW5jbHVkZS9zdGRpb190YWcuaCIgMyA0CnR5cGVk
ZWYgc3RydWN0IF9fRklMRSBfX0ZJTEU7CgoKCn0KIyAzOCAiL3Vzci9pbmNsdWRlL2lzby9zdGRp
b19pc28uaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW9faW1wbC5oIiAxIDMgNAojIDkg
Ii91c3IvaW5jbHVkZS9zdGRpb19pbXBsLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpc3RkaW9f
aW1wbC5oCTEuOAk5OS8wNi8xMCBTTUkiCgoKCgpleHRlcm4gIkMiIHsKIyAzOCAiL3Vzci9pbmNs
dWRlL3N0ZGlvX2ltcGwuaCIgMyA0CnN0cnVjdCBfX0ZJTEUKewoKCgoKICAgICAgICBzc2l6ZV90
IF9jbnQ7CiAgICAgICAgdW5zaWduZWQgY2hhciAqX3B0cjsKCiAgICAgICAgdW5zaWduZWQgY2hh
ciAqX2Jhc2U7CiAgICAgICAgdW5zaWduZWQgY2hhciBfZmxhZzsKICAgICAgICB1bnNpZ25lZCBj
aGFyIF9maWxlOwogICAgICAgIHVuc2lnbmVkIF9fb3JpZW50YXRpb246MjsKICAgICAgICB1bnNp
Z25lZCBfX2lvbm9sb2NrOjE7CiAgICAgICAgdW5zaWduZWQgX19maWxsZXI6NTsKfTsKCgoKCn0K
IyAzOSAiL3Vzci9pbmNsdWRlL2lzby9zdGRpb19pc28uaCIgMiAzIDQKIyA0OSAiL3Vzci9pbmNs
dWRlL2lzby9zdGRpb19pc28uaCIgMyA0CmV4dGVybiAiQyIgewojIDU5ICIvdXNyL2luY2x1ZGUv
aXNvL3N0ZGlvX2lzby5oIiAzIDQKdHlwZWRlZiBsb25nIGxvbmcgX19sb25nbG9uZ190OwojIDc1
ICIvdXNyL2luY2x1ZGUvaXNvL3N0ZGlvX2lzby5oIiAzIDQKdHlwZWRlZiBfX0ZJTEUgRklMRTsK
IyA4OCAiL3Vzci9pbmNsdWRlL2lzby9zdGRpb19pc28uaCIgMyA0CnR5cGVkZWYgbG9uZyBmcG9z
X3Q7CiMgMTQ3ICIvdXNyL2luY2x1ZGUvaXNvL3N0ZGlvX2lzby5oIiAzIDQKZXh0ZXJuIF9fRklM
RSBfX2lvYlsyMF07CiMgMTY0ICIvdXNyL2luY2x1ZGUvaXNvL3N0ZGlvX2lzby5oIiAzIDQKZXh0
ZXJuIGludCByZW1vdmUoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCByZW5hbWUoY29uc3QgY2hh
ciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gRklMRSAqdG1wZmlsZSh2b2lkKTsKZXh0ZXJuIGNo
YXIgKnRtcG5hbShjaGFyICopOwpleHRlcm4gaW50IGZjbG9zZShGSUxFICopOwpleHRlcm4gaW50
IGZmbHVzaChGSUxFICopOwpleHRlcm4gRklMRSAqZm9wZW4oY29uc3QgY2hhciAqLCBjb25zdCBj
aGFyICopOwpleHRlcm4gRklMRSAqZnJlb3Blbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwg
RklMRSAqKTsKZXh0ZXJuIHZvaWQgc2V0YnVmKEZJTEUgKiwgY2hhciAqKTsKZXh0ZXJuIGludCBz
ZXR2YnVmKEZJTEUgKiwgY2hhciAqLCBpbnQsIHNpemVfdCk7CgpleHRlcm4gaW50IGZwcmludGYo
RklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7CgpleHRlcm4gaW50IGZzY2FuZihGSUxFICosIGNv
bnN0IGNoYXIgKiwgLi4uKTsKCmV4dGVybiBpbnQgcHJpbnRmKGNvbnN0IGNoYXIgKiwgLi4uKTsK
CmV4dGVybiBpbnQgc2NhbmYoY29uc3QgY2hhciAqLCAuLi4pOwoKZXh0ZXJuIGludCBzcHJpbnRm
KGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwoKZXh0ZXJuIGludCBzc2NhbmYoY29uc3QgY2hh
ciAqLCBjb25zdCBjaGFyICosIC4uLik7CmV4dGVybiBpbnQgdmZwcmludGYoRklMRSAqLCBjb25z
dCBjaGFyICosIF9fdmFfbGlzdCk7CmV4dGVybiBpbnQgdnByaW50Zihjb25zdCBjaGFyICosIF9f
dmFfbGlzdCk7CmV4dGVybiBpbnQgdnNwcmludGYoY2hhciAqLCBjb25zdCBjaGFyICosIF9fdmFf
bGlzdCk7CmV4dGVybiBpbnQgZmdldGMoRklMRSAqKTsKZXh0ZXJuIGNoYXIgKmZnZXRzKGNoYXIg
KiwgaW50LCBGSUxFICopOwpleHRlcm4gaW50IGZwdXRjKGludCwgRklMRSAqKTsKZXh0ZXJuIGlu
dCBmcHV0cyhjb25zdCBjaGFyICosIEZJTEUgKik7CgoKZXh0ZXJuIGludCBnZXRjKEZJTEUgKik7
CmV4dGVybiBpbnQgcHV0YyhpbnQsIEZJTEUgKik7CgoKCmV4dGVybiBpbnQgZ2V0Y2hhcih2b2lk
KTsKZXh0ZXJuIGludCBwdXRjaGFyKGludCk7CgpleHRlcm4gY2hhciAqZ2V0cyhjaGFyICopOwpl
eHRlcm4gaW50IHB1dHMoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCB1bmdldGMoaW50LCBGSUxF
ICopOwpleHRlcm4gc2l6ZV90IGZyZWFkKHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIEZJTEUgKik7
CmV4dGVybiBzaXplX3QgZndyaXRlKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIEZJTEUg
Kik7CmV4dGVybiBpbnQgZmdldHBvcyhGSUxFICosIGZwb3NfdCAqKTsKZXh0ZXJuIGludCBmc2Vl
ayhGSUxFICosIGxvbmcsIGludCk7CmV4dGVybiBpbnQgZnNldHBvcyhGSUxFICosIGNvbnN0IGZw
b3NfdCAqKTsKZXh0ZXJuIGxvbmcgZnRlbGwoRklMRSAqKTsKZXh0ZXJuIHZvaWQgcmV3aW5kKEZJ
TEUgKik7CgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnIoRklMRSAqKTsKZXh0ZXJuIGludCBmZW9mKEZJ
TEUgKik7CmV4dGVybiBpbnQgZmVycm9yKEZJTEUgKik7CgpleHRlcm4gdm9pZCBwZXJyb3IoY29u
c3QgY2hhciAqKTsKCgpleHRlcm4gaW50IF9fZmlsYnVmKEZJTEUgKik7CmV4dGVybiBpbnQgX19m
bHNidWYoaW50LCBGSUxFICopOwojIDMzNiAiL3Vzci9pbmNsdWRlL2lzby9zdGRpb19pc28uaCIg
MyA0Cn0KIyAzNyAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLjgvMy4yLjEvaW5jbHVkZS9zdGRpby5oIiAyIDMgNAojIDk4ICIvdXNy
L2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu
OC8zLjIuMS9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gIkMiIHsKIyAxMjMgIi91c3IvbG9j
YWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMu
Mi4xL2luY2x1ZGUvc3RkaW8uaCIgMyA0CnR5cGVkZWYgX19sb25nbG9uZ190IGZwb3M2NF90Owoj
IDEzNCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLjgvMy4yLjEvaW5jbHVkZS9zdGRpby5oIiAzIDQKdHlwZWRlZiBfX3ZhX2xpc3Qg
X19ub3RfdmFfbGlzdF9fOwojIDE1MSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvbGli
L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4yLjEvaW5jbHVkZS9zdGRpby5oIiAzIDQK
ZXh0ZXJuIHVuc2lnbmVkIGNoYXIgX3NpYnVmW10sIF9zb2J1ZltdOwojIDE5MyAiL3Vzci9sb2Nh
bC9wcm9kdWN0cy9nY2MvMy4yLjEvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4y
LjEvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIHVuc2lnbmVkIGNoYXIgKl9idWZlbmR0YWJb
XTsKZXh0ZXJuIEZJTEUgKl9sYXN0YnVmOwojIDIyNSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2Mv
My4yLjEvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4yLjEvaW5jbHVkZS9zdGRp
by5oIiAzIDQKZXh0ZXJuIGNoYXIgKnRtcG5hbV9yKGNoYXIgKik7CgoKCmV4dGVybiB2b2lkIHNl
dGJ1ZmZlcihGSUxFICosIGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGludCBzZXRsaW5lYnVmKEZJ
TEUgKik7CgoKCgoKZXh0ZXJuIGludCBzbnByaW50ZihjaGFyICosIHNpemVfdCwgY29uc3QgY2hh
ciAqLCAuLi4pOwoKCgoKZXh0ZXJuIGludCB2c25wcmludGYoY2hhciAqLCBzaXplX3QsIGNvbnN0
IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwojIDI1MCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2Mv
My4yLjEvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4yLjEvaW5jbHVkZS9zdGRp
by5oIiAzIDQKZXh0ZXJuIEZJTEUgKmZkb3BlbihpbnQsIGNvbnN0IGNoYXIgKik7CmV4dGVybiBj
aGFyICpjdGVybWlkKGNoYXIgKik7CmV4dGVybiBpbnQgZmlsZW5vKEZJTEUgKik7CiMgMjYxICIv
dXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp
czIuOC8zLjIuMS9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gdm9pZCBmbG9ja2ZpbGUoRklM
RSAqKTsKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUoRklMRSAqKTsKZXh0ZXJuIHZvaWQgZnVubG9j
a2ZpbGUoRklMRSAqKTsKZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkKEZJTEUgKik7CmV4dGVybiBp
bnQgZ2V0Y2hhcl91bmxvY2tlZCh2b2lkKTsKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkKGludCwg
RklMRSAqKTsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkKGludCk7CiMgMjc2ICIvdXNyL2xv
Y2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8z
LjIuMS9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gRklMRSAqcG9wZW4oY29uc3QgY2hhciAq
LCBjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqY3VzZXJpZChjaGFyICopOwpleHRlcm4gY2hh
ciAqdGVtcG5hbShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgZ2V0b3B0
KGludCwgY2hhciAqY29uc3QgKiwgY29uc3QgY2hhciAqKTsKCgoKZXh0ZXJuIGNoYXIgKm9wdGFy
ZzsKZXh0ZXJuIGludCBvcHRpbmQsIG9wdGVyciwgb3B0b3B0OwpleHRlcm4gaW50IGdldHcoRklM
RSAqKTsKZXh0ZXJuIGludCBwdXR3KGludCwgRklMRSAqKTsKZXh0ZXJuIGludCBwY2xvc2UoRklM
RSAqKTsKCgoKCgoKCmV4dGVybiBpbnQgZnNlZWtvKEZJTEUgKiwgb2ZmX3QsIGludCk7CmV4dGVy
biBvZmZfdCBmdGVsbG8oRklMRSAqKTsKIyAzMDUgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMu
Mi4xL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvc3RkaW8u
aCIgMyA0CmV4dGVybiBGSUxFICpmb3BlbjY0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsK
ZXh0ZXJuIEZJTEUgKmZyZW9wZW42NChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgRklMRSAq
KTsKZXh0ZXJuIEZJTEUgKnRtcGZpbGU2NCh2b2lkKTsKZXh0ZXJuIGludCBmZ2V0cG9zNjQoRklM
RSAqLCBmcG9zNjRfdCAqKTsKZXh0ZXJuIGludCBmc2V0cG9zNjQoRklMRSAqLCBjb25zdCBmcG9z
NjRfdCAqKTsKZXh0ZXJuIGludCBmc2Vla282NChGSUxFICosIG9mZjY0X3QsIGludCk7CmV4dGVy
biBvZmY2NF90IGZ0ZWxsbzY0KEZJTEUgKik7CiMgNDEyICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2dj
Yy8zLjIuMS9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjIuMS9pbmNsdWRlL3N0
ZGlvLmgiIDMgNAp9CiMgNTMgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUv
YysrLzMuMi4xL2NzdGRpbyIgMiAzCiMgOTcgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4x
L2luY2x1ZGUvYysrLzMuMi4xL2NzdGRpbyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OkZJ
TEU7CiAgdXNpbmcgOjpmcG9zX3Q7CgogIHVzaW5nIDo6Y2xlYXJlcnI7CiAgdXNpbmcgOjpmY2xv
c2U7CiAgdXNpbmcgOjpmZW9mOwogIHVzaW5nIDo6ZmVycm9yOwogIHVzaW5nIDo6ZmZsdXNoOwog
IHVzaW5nIDo6ZmdldGM7CiAgdXNpbmcgOjpmZ2V0cG9zOwogIHVzaW5nIDo6ZmdldHM7CiAgdXNp
bmcgOjpmb3BlbjsKICB1c2luZyA6OmZwcmludGY7CiAgdXNpbmcgOjpmcHV0YzsKICB1c2luZyA6
OmZwdXRzOwogIHVzaW5nIDo6ZnJlYWQ7CiAgdXNpbmcgOjpmcmVvcGVuOwogIHVzaW5nIDo6ZnNj
YW5mOwogIHVzaW5nIDo6ZnNlZWs7CiAgdXNpbmcgOjpmc2V0cG9zOwogIHVzaW5nIDo6ZnRlbGw7
CiAgdXNpbmcgOjpmd3JpdGU7CiAgdXNpbmcgOjpnZXRjOwogIHVzaW5nIDo6Z2V0Y2hhcjsKICB1
c2luZyA6OmdldHM7CiAgdXNpbmcgOjpwZXJyb3I7CiAgdXNpbmcgOjpwcmludGY7CiAgdXNpbmcg
OjpwdXRjOwogIHVzaW5nIDo6cHV0Y2hhcjsKICB1c2luZyA6OnB1dHM7CiAgdXNpbmcgOjpyZW1v
dmU7CiAgdXNpbmcgOjpyZW5hbWU7CiAgdXNpbmcgOjpyZXdpbmQ7CiAgdXNpbmcgOjpzY2FuZjsK
ICB1c2luZyA6OnNldGJ1ZjsKICB1c2luZyA6OnNldHZidWY7CiAgdXNpbmcgOjpzcHJpbnRmOwog
IHVzaW5nIDo6c3NjYW5mOwogIHVzaW5nIDo6dG1wZmlsZTsKICB1c2luZyA6OnRtcG5hbTsKICB1
c2luZyA6OnVuZ2V0YzsKICB1c2luZyA6OnZmcHJpbnRmOwogIHVzaW5nIDo6dnByaW50ZjsKICB1
c2luZyA6OnZzcHJpbnRmOwp9CiMgMzYgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2lu
Y2x1ZGUvYysrLzMuMi4xL3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvYysraW8uaCIgMiAzCgoj
IDEgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL3NwYXJj
LXN1bi1zb2xhcmlzMi44L2JpdHMvZ3Roci5oIiAxIDMKIyA5OCAiL3Vzci9sb2NhbC9wcm9kdWN0
cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvc3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0cy9n
dGhyLmgiIDMKIyAxICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8z
LjIuMS9zcGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL2d0aHItZGVmYXVsdC5oIiAxIDMKIyAzNyAi
L3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvc3BhcmMtc3Vu
LXNvbGFyaXMyLjgvYml0cy9ndGhyLWRlZmF1bHQuaCIgMwojIDEgIi91c3IvbG9jYWwvcHJvZHVj
dHMvZ2NjLzMuMi4xL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1
ZGUvcHRocmVhZC5oIiAxIDMgNAojIDE4ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9s
aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjIuMS9pbmNsdWRlL3B0aHJlYWQuaCIg
MyA0CiNwcmFnbWEgaWRlbnQgIkAoIylwdGhyZWFkLmgJMS4yOQkwMS8wNy8wNyBTTUkiCgoKCgoj
IDEgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAxIDMgNAojIDExICIvdXNyL2luY2x1ZGUvc2NoZWQu
aCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylzY2hlZC5oCTEuOQk5OC8wMS8xNiBTTUkiCgoKCgoK
ZXh0ZXJuICJDIiB7CgoKc3RydWN0IHNjaGVkX3BhcmFtIHsKICAgICAgICBpbnQgc2NoZWRfcHJp
b3JpdHk7CiAgICAgICAgaW50IHNjaGVkX25pY2VsaW07CiAgICAgICAgaW50IHNjaGVkX25pY2U7
CiAgICAgICAgaW50IHNjaGVkX3BhZFs2XTsKCgoKfTsKIyA0NCAiL3Vzci9pbmNsdWRlL3NjaGVk
LmgiIDMgNAppbnQgc2NoZWRfZ2V0cGFyYW0ocGlkX3QgcGlkLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0g
KnBhcmFtKTsKaW50IHNjaGVkX3NldHBhcmFtKHBpZF90IHBpZCwgY29uc3Qgc3RydWN0IHNjaGVk
X3BhcmFtICpwYXJhbSk7CmludCBzY2hlZF9nZXRzY2hlZHVsZXIocGlkX3QgcGlkKTsKaW50IHNj
aGVkX3NldHNjaGVkdWxlcihwaWRfdCBwaWQsIGludCBwb2xpY3ksCiAgICAgICAgICAgICAgICBj
b25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFtKTsKaW50IHNjaGVkX3lpZWxkKHZvaWQpOwpp
bnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21heChpbnQgcG9saWN5KTsKaW50IHNjaGVkX2dldF9wcmlv
cml0eV9taW4oaW50IHBvbGljeSk7CmludCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwocGlkX3QgcGlk
LCBzdHJ1Y3QgdGltZXNwZWMgKmludGVydmFsKTsKIyA2NSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgi
IDMgNAp9CiMgMjQgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9nY2MtbGliL3Nw
YXJjLXN1bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMgNAoKCgpleHRl
cm4gIkMiIHsKIyAxMjUgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9nY2MtbGli
L3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKdHlwZWRl
ZiBzdHJ1Y3QgX2NsZWFudXAgewogICAgICAgIHVpbnRwdHJfdCBwdGhyZWFkX2NsZWFudXBfcGFk
WzRdOwp9IF9jbGVhbnVwX3Q7CgoKCnZvaWQgX19wdGhyZWFkX2NsZWFudXBfcHVzaCh2b2lkICgq
cm91dGluZSkodm9pZCAqKSwgdm9pZCAqYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhZGRyX3QgZnAsIF9jbGVhbnVwX3QgKmluZm8pOwp2b2lkIF9fcHRocmVh
ZF9jbGVhbnVwX3BvcChpbnQgZXgsIF9jbGVhbnVwX3QgKmluZm8pOwpjYWRkcl90IF9nZXRmcCh2
b2lkKTsKIyAxNDUgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9nY2MtbGliL3Nw
YXJjLXN1bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKZXh0ZXJuICJD
IiB7CgoKdHlwZWRlZiB2b2lkICgqX1ZvaWRmcCkodm9pZCopOwoKCn0KIyAxNjkgIi91c3IvbG9j
YWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMu
Mi4xL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfaW5pdChw
dGhyZWFkX2F0dHJfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZGVzdHJveShwdGhyZWFk
X2F0dHJfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2tzaXplKHB0aHJlYWRf
YXR0cl90ICosIHNpemVfdCk7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrc2l6ZShj
b25zdCBwdGhyZWFkX2F0dHJfdCAqLCBzaXplX3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
X3NldHN0YWNrYWRkcihwdGhyZWFkX2F0dHJfdCAqLCB2b2lkICopOwpleHRlcm4gaW50IHB0aHJl
YWRfYXR0cl9nZXRzdGFja2FkZHIoY29uc3QgcHRocmVhZF9hdHRyX3QgKiwgdm9pZCAqKik7CmV4
dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKHB0aHJlYWRfYXR0cl90ICosIGlu
dCk7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGRldGFjaHN0YXRlKGNvbnN0IHB0aHJlYWRf
YXR0cl90ICosIGludCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NvcGUocHRocmVh
ZF9hdHRyX3QgKiwgaW50KTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUoY29uc3Qg
cHRocmVhZF9hdHRyX3QgKiwgaW50ICopOwpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRpbmhl
cml0c2NoZWQocHRocmVhZF9hdHRyX3QgKiwgaW50KTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf
Z2V0aW5oZXJpdHNjaGVkKGNvbnN0IHB0aHJlYWRfYXR0cl90ICosIGludCAqKTsKZXh0ZXJuIGlu
dCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwb2xpY3kocHRocmVhZF9hdHRyX3QgKiwgaW50KTsKZXh0
ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwb2xpY3koY29uc3QgcHRocmVhZF9hdHRyX3Qg
KiwgaW50ICopOwpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBhcmFtKHB0aHJlYWRf
YXR0cl90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dHJ1Y3Qgc2NoZWRfcGFyYW0gKik7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcGFy
YW0oY29uc3QgcHRocmVhZF9hdHRyX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2NyZWF0
ZShwdGhyZWFkX3QgKiwgY29uc3QgcHRocmVhZF9hdHRyX3QgKiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2b2lkICogKCopKHZvaWQgKiksIHZvaWQgKik7CmV4dGVybiBpbnQgcHRo
cmVhZF9vbmNlKHB0aHJlYWRfb25jZV90ICosIHZvaWQgKCopKHZvaWQpKTsKZXh0ZXJuIGludCBw
dGhyZWFkX2pvaW4ocHRocmVhZF90LCB2b2lkICoqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2RldGFj
aChwdGhyZWFkX3QpOwpleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQodm9pZCAqKTsKZXh0ZXJuIGlu
dCBwdGhyZWFkX2NhbmNlbChwdGhyZWFkX3QpOwpleHRlcm4gaW50IHB0aHJlYWRfc2V0c2NoZWRw
YXJhbShwdGhyZWFkX3QsIGludCwgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICopOwpleHRlcm4g
aW50IHB0aHJlYWRfZ2V0c2NoZWRwYXJhbShwdGhyZWFkX3QsIGludCAqLCBzdHJ1Y3Qgc2NoZWRf
cGFyYW0gKik7CmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWxzdGF0ZShpbnQsIGludCAqKTsK
ZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHR5cGUoaW50LCBpbnQgKik7CmV4dGVybiB2b2lk
IHB0aHJlYWRfdGVzdGNhbmNlbCh2b2lkKTsKZXh0ZXJuIGludCBwdGhyZWFkX2VxdWFsKHB0aHJl
YWRfdCwgcHRocmVhZF90KTsKZXh0ZXJuIGludCBwdGhyZWFkX2tleV9jcmVhdGUocHRocmVhZF9r
ZXlfdCAqLCB2b2lkICgqKSh2b2lkICopKTsKZXh0ZXJuIGludCBwdGhyZWFkX2tleV9kZWxldGUo
cHRocmVhZF9rZXlfdCk7CmV4dGVybiBpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyhwdGhyZWFkX2tl
eV90LCBjb25zdCB2b2lkICopOwpleHRlcm4gdm9pZCAqcHRocmVhZF9nZXRzcGVjaWZpYyhwdGhy
ZWFkX2tleV90KTsKZXh0ZXJuIHB0aHJlYWRfdCBwdGhyZWFkX3NlbGYodm9pZCk7CgoKCgpleHRl
cm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQocHRocmVhZF9tdXRleGF0dHJfdCAqKTsKZXh0
ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKik7
CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cHNoYXJlZChwdGhyZWFkX211dGV4YXR0
cl90ICosIGludCk7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0cHNoYXJlZChjb25z
dCBwdGhyZWFkX211dGV4YXR0cl90ICosIGludCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4
YXR0cl9zZXRwcm90b2NvbChwdGhyZWFkX211dGV4YXR0cl90ICosIGludCk7CmV4dGVybiBpbnQg
cHRocmVhZF9tdXRleGF0dHJfZ2V0cHJvdG9jb2woY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAq
LCBpbnQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cHJpb2NlaWxpbmcocHRo
cmVhZF9tdXRleGF0dHJfdCAqLCBpbnQpOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dl
dHByaW9jZWlsaW5nKGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50ICopOwpleHRlcm4g
aW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHJvYnVzdF9ucChwdGhyZWFkX211dGV4YXR0cl90ICos
IGludCk7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0cm9idXN0X25wKGNvbnN0IHB0
aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50ICopOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfaW5p
dChwdGhyZWFkX211dGV4X3QgKiwgY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqKTsKZXh0ZXJu
IGludCBwdGhyZWFkX211dGV4X2NvbnNpc3RlbnRfbnAocHRocmVhZF9tdXRleF90ICopOwpleHRl
cm4gaW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveShwdGhyZWFkX211dGV4X3QgKik7CmV4dGVybiBp
bnQgcHRocmVhZF9tdXRleF9sb2NrKHB0aHJlYWRfbXV0ZXhfdCAqKTsKZXh0ZXJuIGludCBwdGhy
ZWFkX211dGV4X3VubG9jayhwdGhyZWFkX211dGV4X3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9t
dXRleF90cnlsb2NrKHB0aHJlYWRfbXV0ZXhfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4
X3NldHByaW9jZWlsaW5nKHB0aHJlYWRfbXV0ZXhfdCAqLCBpbnQsIGludCAqKTsKZXh0ZXJuIGlu
dCBwdGhyZWFkX211dGV4X2dldHByaW9jZWlsaW5nKGNvbnN0IHB0aHJlYWRfbXV0ZXhfdCAqLCBp
bnQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9pbml0KHB0aHJlYWRfY29uZGF0dHJf
dCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2Rlc3Ryb3kocHRocmVhZF9jb25kYXR0
cl90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfc2V0cHNoYXJlZChwdGhyZWFkX2Nv
bmRhdHRyX3QgKiwgaW50KTsKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2dldHBzaGFyZWQo
Y29uc3QgcHRocmVhZF9jb25kYXR0cl90ICosIGludCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2Nv
bmRfaW5pdChwdGhyZWFkX2NvbmRfdCAqLCBjb25zdCBwdGhyZWFkX2NvbmRhdHRyX3QgKik7CmV4
dGVybiBpbnQgcHRocmVhZF9jb25kX2Rlc3Ryb3kocHRocmVhZF9jb25kX3QgKik7CmV4dGVybiBp
bnQgcHRocmVhZF9jb25kX2Jyb2FkY2FzdChwdGhyZWFkX2NvbmRfdCAqKTsKZXh0ZXJuIGludCBw
dGhyZWFkX2NvbmRfc2lnbmFsKHB0aHJlYWRfY29uZF90ICopOwpleHRlcm4gaW50IHB0aHJlYWRf
Y29uZF93YWl0KHB0aHJlYWRfY29uZF90ICosIHB0aHJlYWRfbXV0ZXhfdCAqKTsKZXh0ZXJuIGlu
dCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0KHB0aHJlYWRfY29uZF90ICosIHB0aHJlYWRfbXV0ZXhf
dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0
IHRpbWVzcGVjICopOwpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9yZWx0aW1lZHdhaXRfbnAocHRo
cmVhZF9jb25kX3QgKiwgcHRocmVhZF9tdXRleF90ICosCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKik7CmV4dGVybiBpbnQgcHRo
cmVhZF9hdHRyX2dldGd1YXJkc2l6ZShjb25zdCBwdGhyZWFkX2F0dHJfdCAqLCBzaXplX3QgKik7
CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGd1YXJkc2l6ZShwdGhyZWFkX2F0dHJfdCAqLCBz
aXplX3QpOwpleHRlcm4gaW50IHB0aHJlYWRfZ2V0Y29uY3VycmVuY3kodm9pZCk7CmV4dGVybiBp
bnQgcHRocmVhZF9zZXRjb25jdXJyZW5jeShpbnQgbmV3dmFsKTsKZXh0ZXJuIGludCBwdGhyZWFk
X211dGV4YXR0cl9zZXR0eXBlKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50KTsKZXh0ZXJuIGlu
dCBwdGhyZWFkX211dGV4YXR0cl9nZXR0eXBlKGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwg
aW50ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2luaXQocHRocmVhZF9yd2xvY2tfdCAq
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHB0aHJlYWRfcndsb2NrYXR0
cl90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2Rlc3Ryb3kocHRocmVhZF9yd2xvY2tf
dCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19yZGxvY2socHRocmVhZF9yd2xvY2tfdCAq
KTsKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnlyZGxvY2socHRocmVhZF9yd2xvY2tfdCAq
KTsKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja193cmxvY2socHRocmVhZF9yd2xvY2tfdCAqKTsK
ZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnl3cmxvY2socHRocmVhZF9yd2xvY2tfdCAqKTsK
ZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja191bmxvY2socHRocmVhZF9yd2xvY2tfdCAqKTsKZXh0
ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfaW5pdChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqKTsK
ZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZGVzdHJveShwdGhyZWFkX3J3bG9ja2F0dHJf
dCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZ2V0cHNoYXJlZChjb25zdCBwdGhy
ZWFkX3J3bG9ja2F0dHJfdCAqLCBpbnQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRy
X3NldHBzaGFyZWQocHRocmVhZF9yd2xvY2thdHRyX3QgKiwgaW50KTsKIyAzNTMgIi91c3IvbG9j
YWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMu
Mi4xL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKfQojIDM4ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2dj
Yy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9zcGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL2d0aHIt
ZGVmYXVsdC5oIiAyIDMKCnR5cGVkZWYgcHRocmVhZF9rZXlfdCBfX2d0aHJlYWRfa2V5X3Q7CnR5
cGVkZWYgcHRocmVhZF9vbmNlX3QgX19ndGhyZWFkX29uY2VfdDsKdHlwZWRlZiBwdGhyZWFkX211
dGV4X3QgX19ndGhyZWFkX211dGV4X3Q7CgoKCgoKCiNwcmFnbWEgd2VhayBwdGhyZWFkX29uY2UK
I3ByYWdtYSB3ZWFrIHB0aHJlYWRfa2V5X2NyZWF0ZQojcHJhZ21hIHdlYWsgcHRocmVhZF9rZXlf
ZGVsZXRlCiNwcmFnbWEgd2VhayBwdGhyZWFkX2dldHNwZWNpZmljCiNwcmFnbWEgd2VhayBwdGhy
ZWFkX3NldHNwZWNpZmljCiNwcmFnbWEgd2VhayBwdGhyZWFkX2NyZWF0ZQoKI3ByYWdtYSB3ZWFr
IHB0aHJlYWRfbXV0ZXhfbG9jayAKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAK
I3ByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhfdW5sb2NrIAojIDgwICIvdXNyL2xvY2FsL3Byb2R1
Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9zcGFyYy1zdW4tc29sYXJpczIuOC9iaXRz
L2d0aHItZGVmYXVsdC5oIiAzCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9hY3RpdmVfcCAo
dm9pZCkKewogIHN0YXRpYyB2b2lkICpjb25zdCBfX2d0aHJlYWRfYWN0aXZlX3B0ciA9ICh2b2lk
ICopICZwdGhyZWFkX2NyZWF0ZTsKICByZXR1cm4gX19ndGhyZWFkX2FjdGl2ZV9wdHIgIT0gMDsK
fQojIDQzNyAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEv
c3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0cy9ndGhyLWRlZmF1bHQuaCIgMwpzdGF0aWMgaW5saW5l
IGludApfX2d0aHJlYWRfb25jZSAoX19ndGhyZWFkX29uY2VfdCAqb25jZSwgdm9pZCAoKmZ1bmMp
ICh2b2lkKSkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVh
ZF9vbmNlIChvbmNlLCBmdW5jKTsKICBlbHNlCiAgICByZXR1cm4gLTE7Cn0KCnN0YXRpYyBpbmxp
bmUgaW50Cl9fZ3RocmVhZF9rZXlfY3JlYXRlIChfX2d0aHJlYWRfa2V5X3QgKmtleSwgdm9pZCAo
KmR0b3IpICh2b2lkICopKQp7CiAgcmV0dXJuIHB0aHJlYWRfa2V5X2NyZWF0ZSAoa2V5LCBkdG9y
KTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX2tleV9kdG9yIChfX2d0aHJlYWRfa2V5
X3Qga2V5LCB2b2lkICpwdHIpCnsKCiAgaWYgKHB0cikKICAgIHJldHVybiBwdGhyZWFkX3NldHNw
ZWNpZmljIChrZXksIDApOwogIGVsc2UKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGlu
dApfX2d0aHJlYWRfa2V5X2RlbGV0ZSAoX19ndGhyZWFkX2tleV90IGtleSkKewogIHJldHVybiBw
dGhyZWFkX2tleV9kZWxldGUgKGtleSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCAqCl9fZ3RocmVh
ZF9nZXRzcGVjaWZpYyAoX19ndGhyZWFkX2tleV90IGtleSkKewogIHJldHVybiBwdGhyZWFkX2dl
dHNwZWNpZmljIChrZXkpOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfc2V0c3BlY2lm
aWMgKF9fZ3RocmVhZF9rZXlfdCBrZXksIGNvbnN0IHZvaWQgKnB0cikKewogIHJldHVybiBwdGhy
ZWFkX3NldHNwZWNpZmljIChrZXksIHB0cik7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVh
ZF9tdXRleF9sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCnsKICBpZiAoX19ndGhyZWFk
X2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfbG9jayAobXV0ZXgpOwogIGVs
c2UKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfdHJ5
bG9jayAoX19ndGhyZWFkX211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVf
cCAoKSkKICAgIHJldHVybiBwdGhyZWFkX211dGV4X3RyeWxvY2sgKG11dGV4KTsKICBlbHNlCiAg
ICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X3VubG9jayAo
X19ndGhyZWFkX211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkK
ICAgIHJldHVybiBwdGhyZWFkX211dGV4X3VubG9jayAobXV0ZXgpOwogIGVsc2UKICAgIHJldHVy
biAwOwp9CiMgOTkgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMu
Mi4xL3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvZ3Roci5oIiAyIDMKIyAzOCAiL3Vzci9sb2Nh
bC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvc3BhcmMtc3VuLXNvbGFyaXMy
LjgvYml0cy9jKytpby5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB0eXBlZGVmIGxvbmcgc3Ry
ZWFtb2ZmOwogIHR5cGVkZWYgcHRyZGlmZl90IHN0cmVhbXNpemU7CgoKCiAgdHlwZWRlZiBmcG9z
X3QgX19jX3N0cmVhbXBvczsKCiAgdHlwZWRlZiBfX2d0aHJlYWRfbXV0ZXhfdCBfX2NfbG9jazsK
CgogIHR5cGVkZWYgRklMRSBfX2NfZmlsZTsKCgogIHN0cnVjdCBfX2lvc19mbGFncwogIHsKICAg
IHR5cGVkZWYgc2hvcnQgX19pbnRfdHlwZTsKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBf
U19ib29sYWxwaGEgPSAweDAwMDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19kZWMg
PSAweDAwMDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19maXhlZCA9IDB4MDAwNDsK
ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2hleCA9IDB4MDAwODsKICAgIHN0YXRpYyBj
b25zdCBfX2ludF90eXBlIF9TX2ludGVybmFsID0gMHgwMDEwOwogICAgc3RhdGljIGNvbnN0IF9f
aW50X3R5cGUgX1NfbGVmdCA9IDB4MDAyMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X29jdCA9IDB4MDA0MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3JpZ2h0ID0gMHgw
MDgwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2NpZW50aWZpYyA9IDB4MDEwMDsK
ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3diYXNlID0gMHgwMjAwOwogICAgc3Rh
dGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvaW50ID0gMHgwNDAwOwogICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1Nfc2hvd3BvcyA9IDB4MDgwMDsKICAgIHN0YXRpYyBjb25zdCBfX2lu
dF90eXBlIF9TX3NraXB3cyA9IDB4MTAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X3VuaXRidWYgPSAweDIwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU191cHBlcmNh
c2UgPSAweDQwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hZGp1c3RmaWVsZCA9
IDB4MDAyMCB8IDB4MDA4MCB8IDB4MDAxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X2Jhc2VmaWVsZCA9IDB4MDAwMiB8IDB4MDA0MCB8IDB4MDAwODsKICAgIHN0YXRpYyBjb25zdCBf
X2ludF90eXBlIF9TX2Zsb2F0ZmllbGQgPSAweDAxMDAgfCAweDAwMDQ7CgoKICAgIHN0YXRpYyBj
b25zdCBfX2ludF90eXBlIF9TX2JhZGJpdCA9IDB4MDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRf
dHlwZSBfU19lb2ZiaXQgPSAweDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZmFp
bGJpdCA9IDB4MDQ7CgoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FwcCA9IDB4MDE7
CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hdGUgPSAweDAyOwogICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1NfYmluID0gMHgwNDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl
IF9TX2luID0gMHgwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX291dCA9IDB4MTA7
CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU190cnVuYyA9IDB4MjA7CiAgfTsKfQojIDQ1
ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2Zw
b3MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysv
My4yLjEvY3djaGFyIiAxIDMKIyA0OCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5j
bHVkZS9jKysvMy4yLjEvY3djaGFyIiAzCgoKCiMgMSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2Mv
My4yLjEvaW5jbHVkZS9jKysvMy4yLjEvY3RpbWUiIDEgMwojIDQ4ICIvdXNyL2xvY2FsL3Byb2R1
Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9jdGltZSIgMwojIDY0ICIvdXNyL2xvY2Fs
L3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9jdGltZSIgMwpuYW1lc3BhY2Ug
c3RkCnsKICB1c2luZyA6OmNsb2NrX3Q7CiAgdXNpbmcgOjp0aW1lX3Q7CiAgdXNpbmcgOjp0bTsK
CiAgdXNpbmcgOjpjbG9jazsKICB1c2luZyA6OmRpZmZ0aW1lOwogIHVzaW5nIDo6bWt0aW1lOwog
IHVzaW5nIDo6dGltZTsKICB1c2luZyA6OmFzY3RpbWU7CiAgdXNpbmcgOjpjdGltZTsKICB1c2lu
ZyA6OmdtdGltZTsKICB1c2luZyA6OmxvY2FsdGltZTsKICB1c2luZyA6OnN0cmZ0aW1lOwp9CiMg
NTIgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2N3Y2hh
ciIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzIDQKIyA5ICIvdXNyL2luY2x1
ZGUvd2NoYXIuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIyl3Y2hhci5oCTEuMzMJOTkvMDgvMzAg
U01JIgoKIyAxICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9saWIvZ2NjLWxpYi9zcGFy
Yy1zdW4tc29sYXJpczIuOC8zLjIuMS9pbmNsdWRlL2lzby93Y2hhcl9pc28uaCIgMSAzIDQKIyAz
MCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv
bGFyaXMyLjgvMy4yLjEvaW5jbHVkZS9pc28vd2NoYXJfaXNvLmgiIDMgNAojcHJhZ21hIGlkZW50
ICJAKCMpd2NoYXJfaXNvLmgJMS4yCTk5LzExLzEwIFNNSSIKCgoKIyAxICIvdXNyL2luY2x1ZGUv
d2NoYXJfaW1wbC5oIiAxIDMgNAojIDkgIi91c3IvaW5jbHVkZS93Y2hhcl9pbXBsLmgiIDMgNAoj
cHJhZ21hIGlkZW50ICJAKCMpd2NoYXJfaW1wbC5oCTEuMwk5OS8wNy8yNiBTTUkiCgoKCgpleHRl
cm4gIkMiIHsKCgoKCnR5cGVkZWYgc3RydWN0IF9fbWJzdGF0ZV90IHsKCgoKICAgICAgICBpbnQg
X19maWxsZXJbNl07Cgp9IF9fbWJzdGF0ZV90OwoKCgp9CiMgMzUgIi91c3IvbG9jYWwvcHJvZHVj
dHMvZ2NjLzMuMi4xL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1
ZGUvaXNvL3djaGFyX2lzby5oIiAyIDMgNAojIDQ0ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8z
LjIuMS9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjIuMS9pbmNsdWRlL2lzby93
Y2hhcl9pc28uaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDEgMyA0CiMgMTYgIi91
c3IvaW5jbHVkZS9jdHlwZS5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKWN0eXBlLmgJMS4zMwk5
OS8wOC8xMCBTTUkiIAoKIyAxICIvdXNyL2luY2x1ZGUvaXNvL2N0eXBlX2lzby5oIiAxIDMgNAoj
IDI4ICIvdXNyL2luY2x1ZGUvaXNvL2N0eXBlX2lzby5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgj
KWN0eXBlX2lzby5oCTEuMQk5OS8wOC8wOSBTTUkiIAoKCgoKZXh0ZXJuICJDIiB7CiMgNjMgIi91
c3IvaW5jbHVkZS9pc28vY3R5cGVfaXNvLmgiIDMgNApleHRlcm4gaW50IGlzYWxudW0oaW50KTsK
ZXh0ZXJuIGludCBpc2FscGhhKGludCk7CmV4dGVybiBpbnQgaXNjbnRybChpbnQpOwpleHRlcm4g
aW50IGlzZGlnaXQoaW50KTsKZXh0ZXJuIGludCBpc2dyYXBoKGludCk7CmV4dGVybiBpbnQgaXNs
b3dlcihpbnQpOwpleHRlcm4gaW50IGlzcHJpbnQoaW50KTsKZXh0ZXJuIGludCBpc3B1bmN0KGlu
dCk7CmV4dGVybiBpbnQgaXNzcGFjZShpbnQpOwpleHRlcm4gaW50IGlzdXBwZXIoaW50KTsKZXh0
ZXJuIGludCBpc3hkaWdpdChpbnQpOwoKCgoKCgoKZXh0ZXJuIGludCB0b2xvd2VyKGludCk7CmV4
dGVybiBpbnQgdG91cHBlcihpbnQpOwoKCgoKCmV4dGVybiB1bnNpZ25lZCBjaGFyIF9fY3R5cGVb
XTsKZXh0ZXJuIHVuc2lnbmVkIGludCAqX19jdHlwZV9tYXNrOwpleHRlcm4gaW50ICpfX3RyYW5z
X3VwcGVyOwpleHRlcm4gaW50ICpfX3RyYW5zX2xvd2VyOwojIDE4NiAiL3Vzci9pbmNsdWRlL2lz
by9jdHlwZV9pc28uaCIgMyA0Cn0KIyAxOSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIgMyA0CiMg
NDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKCgoKCgpleHRlcm4g
aW50IGlzYXNjaWkoaW50KTsKZXh0ZXJuIGludCB0b2FzY2lpKGludCk7CmV4dGVybiBpbnQgX3Rv
bG93ZXIoaW50KTsKZXh0ZXJuIGludCBfdG91cHBlcihpbnQpOwojIDkwICIvdXNyL2luY2x1ZGUv
Y3R5cGUuaCIgMyA0Cn0KIyA0NSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvbGliL2dj
Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4yLjEvaW5jbHVkZS9pc28vd2NoYXJfaXNvLmgi
IDIgMyA0CiMgMSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLjgvMy4yLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyA0NiAiL3Vz
ci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy
LjgvMy4yLjEvaW5jbHVkZS9pc28vd2NoYXJfaXNvLmgiIDIgMyA0CgoKCgoKZXh0ZXJuICJDIiB7
CiMgNzYgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9nY2MtbGliL3NwYXJjLXN1
bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvaXNvL3djaGFyX2lzby5oIiAzIDQKdHlwZWRlZiBs
b25nIHdpbnRfdDsKIyAxMTMgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9nY2Mt
bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvaXNvL3djaGFyX2lzby5oIiAz
IDQKdHlwZWRlZiBfX21ic3RhdGVfdCBtYnN0YXRlX3Q7CiMgMTI0ICIvdXNyL2xvY2FsL3Byb2R1
Y3RzL2djYy8zLjIuMS9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjIuMS9pbmNs
dWRlL2lzby93Y2hhcl9pc28uaCIgMyA0CmV4dGVybiB3aW50X3QgZmdldHdjKF9fRklMRSAqKTsK
ZXh0ZXJuIHdjaGFyX3QgKmZnZXR3cyh3Y2hhcl90ICosIGludCwgX19GSUxFICopOwpleHRlcm4g
d2ludF90IGZwdXR3Yyh3aW50X3QsIF9fRklMRSAqKTsKZXh0ZXJuIGludCBmcHV0d3MoY29uc3Qg
d2NoYXJfdCAqLCBfX0ZJTEUgKik7CmV4dGVybiB3aW50X3QgdW5nZXR3Yyh3aW50X3QsIF9fRklM
RSAqKTsKZXh0ZXJuIHdpbnRfdCBnZXR3YyhfX0ZJTEUgKik7CmV4dGVybiB3aW50X3QgZ2V0d2No
YXIodm9pZCk7CmV4dGVybiB3aW50X3QgcHV0d2Mod2ludF90LCBfX0ZJTEUgKik7CmV4dGVybiB3
aW50X3QgcHV0d2NoYXIod2ludF90KTsKZXh0ZXJuIGRvdWJsZSB3Y3N0b2QoY29uc3Qgd2NoYXJf
dCAqLCB3Y2hhcl90ICoqKTsKZXh0ZXJuIGxvbmcgd2NzdG9sKGNvbnN0IHdjaGFyX3QgKiwgd2No
YXJfdCAqKiwgaW50KTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgd2NzdG91bChjb25zdCB3Y2hhcl90
ICosIHdjaGFyX3QgKiosIGludCk7CmV4dGVybiB3Y2hhcl90ICp3Y3NjYXQod2NoYXJfdCAqLCBj
b25zdCB3Y2hhcl90ICopOwpleHRlcm4gaW50IHdjc2NtcChjb25zdCB3Y2hhcl90ICosIGNvbnN0
IHdjaGFyX3QgKik7CmV4dGVybiBpbnQgd2NzY29sbChjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdj
aGFyX3QgKik7CmV4dGVybiB3Y2hhcl90ICp3Y3NjcHkod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90
ICopOwpleHRlcm4gc2l6ZV90IHdjc2NzcG4oY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90
ICopOwpleHRlcm4gc2l6ZV90IHdjc2xlbihjb25zdCB3Y2hhcl90ICopOwpleHRlcm4gd2NoYXJf
dCAqd2NzbmNhdCh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKZXh0ZXJuIGlu
dCB3Y3NuY21wKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwpleHRl
cm4gd2NoYXJfdCAqd2NzbmNweSh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsK
ZXh0ZXJuIHNpemVfdCB3Y3NzcG4oY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwpl
eHRlcm4gc2l6ZV90IHdjc3hmcm0od2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7
CiMgMTY3ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9saWIvZ2NjLWxpYi9zcGFyYy1z
dW4tc29sYXJpczIuOC8zLjIuMS9pbmNsdWRlL2lzby93Y2hhcl9pc28uaCIgMyA0CmV4dGVybiB3
Y2hhcl90ICp3Y3NjaHIoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90KTsKZXh0ZXJuIHdjaGFyX3Qg
Kndjc3BicmsoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOwpleHRlcm4gd2NoYXJf
dCAqd2NzcmNocihjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QpOwojIDE3OCAiL3Vzci9sb2NhbC9w
cm9kdWN0cy9nY2MvMy4yLjEvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4yLjEv
aW5jbHVkZS9pc28vd2NoYXJfaXNvLmgiIDMgNApleHRlcm4gd2NoYXJfdCAqd2NzdG9rKHdjaGFy
X3QgKiwgY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqKTsKZXh0ZXJuIHNpemVfdCB3Y3NmdGlt
ZSh3Y2hhcl90ICosIHNpemVfdCwgY29uc3Qgd2NoYXJfdCAqLCBjb25zdCBzdHJ1Y3QgdG0gKik7
CiNwcmFnbWEgcmVkZWZpbmVfZXh0bmFtZSB3Y3N0b2sgX193Y3N0b2tfeHBnNQojcHJhZ21hIHJl
ZGVmaW5lX2V4dG5hbWUgd2NzZnRpbWUgX193Y3NmdGltZV94cGc1CiMgMTk0ICIvdXNyL2xvY2Fs
L3Byb2R1Y3RzL2djYy8zLjIuMS9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjIu
MS9pbmNsdWRlL2lzby93Y2hhcl9pc28uaCIgMyA0CmV4dGVybiB3aW50X3QgYnRvd2MoaW50KTsK
ZXh0ZXJuIGludCBmd3ByaW50ZihfX0ZJTEUgKiwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pOwpleHRl
cm4gaW50IGZ3c2NhbmYoX19GSUxFICosIGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsKZXh0ZXJuIGlu
dCBmd2lkZShfX0ZJTEUgKiwgaW50KTsKZXh0ZXJuIGludCBtYnNpbml0KGNvbnN0IG1ic3RhdGVf
dCAqKTsKZXh0ZXJuIHNpemVfdCBtYnJsZW4oY29uc3QgY2hhciAqLCBzaXplX3QsIG1ic3RhdGVf
dCAqKTsKZXh0ZXJuIHNpemVfdCBtYnJ0b3djKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXpl
X3QsIG1ic3RhdGVfdCAqKTsKZXh0ZXJuIHNpemVfdCBtYnNydG93Y3Mod2NoYXJfdCAqLCBjb25z
dCBjaGFyICoqLCBzaXplX3QsIG1ic3RhdGVfdCAqKTsKZXh0ZXJuIGludCBzd3ByaW50Zih3Y2hh
cl90ICosIHNpemVfdCwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pOwpleHRlcm4gaW50IHN3c2NhbmYo
Y29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIC4uLik7CmV4dGVybiBpbnQgdmZ3cHJp
bnRmKF9fRklMRSAqLCBjb25zdCB3Y2hhcl90ICosIF9fdmFfbGlzdCk7CmV4dGVybiBpbnQgdndw
cmludGYoY29uc3Qgd2NoYXJfdCAqLCBfX3ZhX2xpc3QpOwpleHRlcm4gaW50IHZzd3ByaW50Zih3
Y2hhcl90ICosIHNpemVfdCwgY29uc3Qgd2NoYXJfdCAqLCBfX3ZhX2xpc3QpOwpleHRlcm4gc2l6
ZV90IHdjcnRvbWIoY2hhciAqLCB3Y2hhcl90LCBtYnN0YXRlX3QgKik7CmV4dGVybiBzaXplX3Qg
d2NzcnRvbWJzKGNoYXIgKiwgY29uc3Qgd2NoYXJfdCAqKiwgc2l6ZV90LCBtYnN0YXRlX3QgKik7
CmV4dGVybiBpbnQgd2N0b2Iod2ludF90KTsKZXh0ZXJuIGludCB3bWVtY21wKGNvbnN0IHdjaGFy
X3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwpleHRlcm4gd2NoYXJfdCAqd21lbWNweSh3
Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKZXh0ZXJuIHdjaGFyX3QgKndtZW1t
b3ZlKHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwpleHRlcm4gd2NoYXJfdCAq
d21lbXNldCh3Y2hhcl90ICosIHdjaGFyX3QsIHNpemVfdCk7CmV4dGVybiBpbnQgd3ByaW50Zihj
b25zdCB3Y2hhcl90ICosIC4uLik7CmV4dGVybiBpbnQgd3NjYW5mKGNvbnN0IHdjaGFyX3QgKiwg
Li4uKTsKIyAyMzAgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9nY2MtbGliL3Nw
YXJjLXN1bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvaXNvL3djaGFyX2lzby5oIiAzIDQKZXh0
ZXJuIHdjaGFyX3QgKndjc3N0cihjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CmV4
dGVybiB3Y2hhcl90ICp3bWVtY2hyKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCwgc2l6ZV90KTsK
IyAzMTggIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9nY2MtbGliL3NwYXJjLXN1
bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvaXNvL3djaGFyX2lzby5oIiAzIDQKI3ByYWdtYSBy
ZWRlZmluZV9leHRuYW1lIGZnZXR3YyBfX2ZnZXR3Y194cGc1CiNwcmFnbWEgcmVkZWZpbmVfZXh0
bmFtZSBnZXR3YyBfX2dldHdjX3hwZzUKI3ByYWdtYSByZWRlZmluZV9leHRuYW1lIGdldHdjaGFy
IF9fZ2V0d2NoYXJfeHBnNQojcHJhZ21hIHJlZGVmaW5lX2V4dG5hbWUgZnB1dHdjIF9fZnB1dHdj
X3hwZzUKI3ByYWdtYSByZWRlZmluZV9leHRuYW1lIHB1dHdjIF9fcHV0d2NfeHBnNQojcHJhZ21h
IHJlZGVmaW5lX2V4dG5hbWUgcHV0d2NoYXIgX19wdXR3Y2hhcl94cGc1CiNwcmFnbWEgcmVkZWZp
bmVfZXh0bmFtZSBmZ2V0d3MgX19mZ2V0d3NfeHBnNQojcHJhZ21hIHJlZGVmaW5lX2V4dG5hbWUg
ZnB1dHdzIF9fZnB1dHdzX3hwZzUKI3ByYWdtYSByZWRlZmluZV9leHRuYW1lIHVuZ2V0d2MgX191
bmdldHdjX3hwZzUKIyAzNjcgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9nY2Mt
bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvaXNvL3djaGFyX2lzby5oIiAz
IDQKfQojIDEyICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQKIyA4MSAiL3Vzci9pbmNsdWRl
L3djaGFyLmgiIDMgNApleHRlcm4gIkMiIHsKCgoKCgp0eXBlZGVmIGludCB3Y3R5cGVfdDsKCgoK
CgoKZXh0ZXJuIGludCBpc3dhbHBoYSh3aW50X3QpOwpleHRlcm4gaW50IGlzd3VwcGVyKHdpbnRf
dCk7CmV4dGVybiBpbnQgaXN3bG93ZXIod2ludF90KTsKZXh0ZXJuIGludCBpc3dkaWdpdCh3aW50
X3QpOwpleHRlcm4gaW50IGlzd3hkaWdpdCh3aW50X3QpOwpleHRlcm4gaW50IGlzd2FsbnVtKHdp
bnRfdCk7CmV4dGVybiBpbnQgaXN3c3BhY2Uod2ludF90KTsKZXh0ZXJuIGludCBpc3dwdW5jdCh3
aW50X3QpOwpleHRlcm4gaW50IGlzd3ByaW50KHdpbnRfdCk7CmV4dGVybiBpbnQgaXN3Z3JhcGgo
d2ludF90KTsKZXh0ZXJuIGludCBpc3djbnRybCh3aW50X3QpOwpleHRlcm4gaW50IGlzd2N0eXBl
KHdpbnRfdCwgd2N0eXBlX3QpOwpleHRlcm4gd2ludF90IHRvd2xvd2VyKHdpbnRfdCk7CmV4dGVy
biB3aW50X3QgdG93dXBwZXIod2ludF90KTsKZXh0ZXJuIHdjaGFyX3QgKndjc3djcyhjb25zdCB3
Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CmV4dGVybiBpbnQgd2Nzd2lkdGgoY29uc3Qgd2No
YXJfdCAqLCBzaXplX3QpOwpleHRlcm4gaW50IHdjd2lkdGgoY29uc3Qgd2NoYXJfdCk7CmV4dGVy
biB3Y3R5cGVfdCB3Y3R5cGUoY29uc3QgY2hhciAqKTsKIyAxNDAgIi91c3IvaW5jbHVkZS93Y2hh
ci5oIiAzIDQKfQojIDU1ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2Mr
Ky8zLjIuMS9jd2NoYXIiIDIgMwojIDY5ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9p
bmNsdWRlL2MrKy8zLjIuMS9jd2NoYXIiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjptYnN0
YXRlX3Q7Cn0KIyA0NiAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysv
My4yLjEvYml0cy9mcG9zLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGZwb3MKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5
cGVkZWYgX1N0YXRlVCBfX3N0YXRlX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgc3RyZWFtb2Zm
IF9NX29mZjsKICAgICAgX19zdGF0ZV90eXBlIF9NX3N0OwoKICAgIHB1YmxpYzoKICAgICAgX19z
dGF0ZV90eXBlCiAgICAgIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX01fc3Q7IH0KCiAgICAgIHZv
aWQKICAgICAgc3RhdGUoX19zdGF0ZV90eXBlIF9fc3QpIHsgX01fc3QgPSBfX3N0OyB9CgoKCiAg
ICAgIGZwb3MoKTogX01fb2ZmKHN0cmVhbW9mZigpKSwgX01fc3QoX19zdGF0ZV90eXBlKCkpIHsg
fQoKICAgICAgZnBvcyhzdHJlYW1vZmYgX19vZmYsIF9fc3RhdGVfdHlwZSBfX3N0ID0gX19zdGF0
ZV90eXBlKCkpCiAgICAgIDogX01fb2ZmKF9fb2ZmKSwgX01fc3QoX19zdCkgeyB9CgogICAgICBv
cGVyYXRvciBzdHJlYW1vZmYoKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIGZwb3Mm
CiAgICAgIG9wZXJhdG9yKz0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiArPSBfX29mZjsgcmV0
dXJuICp0aGlzOyB9CgogICAgICBmcG9zJgogICAgICBvcGVyYXRvci09KHN0cmVhbW9mZiBfX29m
ZikgeyBfTV9vZmYgLT0gX19vZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBvcwogICAgICBv
cGVyYXRvcisoc3RyZWFtb2ZmIF9fb2ZmKQogICAgICB7CiAgICAgICAgZnBvcyBfX3QoKnRoaXMp
OwogICAgICAgIF9fdCArPSBfX29mZjsKICAgICAgICByZXR1cm4gX190OwogICAgICB9CgogICAg
ICBmcG9zCiAgICAgIG9wZXJhdG9yLShzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBm
cG9zIF9fdCgqdGhpcyk7CiAgICAgICAgX190IC09IF9fb2ZmOwogICAgICAgIHJldHVybiBfX3Q7
CiAgICAgIH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3I9PShjb25zdCBmcG9zJiBfX3Bvcykg
Y29uc3QKICAgICAgeyByZXR1cm4gX01fb2ZmID09IF9fcG9zLl9NX29mZjsgfQoKICAgICAgYm9v
bAogICAgICBvcGVyYXRvciE9KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVy
biBfTV9vZmYgIT0gX19wb3MuX01fb2ZmOyB9CgogICAgICBzdHJlYW1vZmYKICAgICAgX01fcG9z
aXRpb24oKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIHZvaWQKICAgICAgX01fcG9z
aXRpb24oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiA9IF9fb2ZmOyB9CiAgICB9OwoKCiAgdHlw
ZWRlZiBmcG9zPG1ic3RhdGVfdD4gc3RyZWFtcG9zOwoKCgp9CiMgNDcgIi91c3IvbG9jYWwvcHJv
ZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2lvc2Z3ZCIgMiAzCiMgMSAiL3Vzci9s
b2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9mdW5jdGV4Y2Vw
dC5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysv
My4yLjEvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2Mv
My4yLjEvaW5jbHVkZS9jKysvMy4yLjEvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91
c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvZnVuY3Rl
eGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2Vw
dGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQK
ICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZv
aWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg
dm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf
X3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9v
Zl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9y
KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9f
cyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK
CiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDQ4ICIv
dXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9pb3Nmd2QiIDIg
MwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pb3M7CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9D
aGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyZWFtYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNz
IGJhc2ljX2lzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8
X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pb3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAg
ICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNf
c3RyaW5nYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMg
PSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9j
YXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lzdHJpbmdzdHJlYW07CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4s
CiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xh
c3MgYmFzaWNfb3N0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBf
QWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmdzdHJlYW07
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJh
aXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfZmlsZWJ1ZjsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBj
bGFzcyBiYXNpY19pZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vZnN0cmVh
bTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90
cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAg
IGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0b3I7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mgb3N0cmVh
bWJ1Zl9pdGVyYXRvcjsKCgoKICBjbGFzcyBpb3NfYmFzZTsKCgogIHR5cGVkZWYgYmFzaWNfaW9z
PGNoYXI+IGlvczsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPiBzdHJlYW1idWY7CiAg
dHlwZWRlZiBiYXNpY19pc3RyZWFtPGNoYXI+IGlzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3Ry
ZWFtPGNoYXI+IG9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTxjaGFyPiBpb3N0cmVh
bTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1ZjxjaGFyPiBzdHJpbmdidWY7CiAgdHlwZWRlZiBi
YXNpY19pc3RyaW5nc3RyZWFtPGNoYXI+IGlzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19v
c3RyaW5nc3RyZWFtPGNoYXI+IG9zdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdz
dHJlYW08Y2hhcj4gc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyPiBm
aWxlYnVmOwogIHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08Y2hhcj4gaWZzdHJlYW07CiAgdHlwZWRl
ZiBiYXNpY19vZnN0cmVhbTxjaGFyPiBvZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08
Y2hhcj4gZnN0cmVhbTsKIyAxMzQgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1
ZGUvYysrLzMuMi4xL2lvc2Z3ZCIgMwp9CiMgNzEgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMu
Mi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3Iv
bG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX3BhaXIu
aCIgMSAzCiMgNjQgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMu
Mi4xL2JpdHMvc3RsX3BhaXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBwYWlyIHsKICB0eXBlZGVmIF9UMSBmaXJzdF90eXBlOwog
IHR5cGVkZWYgX1QyIHNlY29uZF90eXBlOwoKICBfVDEgZmlyc3Q7CiAgX1QyIHNlY29uZDsKCgoK
CiAgcGFpcigpIDogZmlyc3QoKSwgc2Vjb25kKCkge30KCgoKCiAgcGFpcihjb25zdCBfVDEmIF9f
YSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3QoX19hKSwgc2Vjb25kKF9fYikge30KCgogIHRlbXBs
YXRlIDxjbGFzcyBfVTEsIGNsYXNzIF9VMj4KICBwYWlyKGNvbnN0IHBhaXI8X1UxLCBfVTI+JiBf
X3ApIDogZmlyc3QoX19wLmZpcnN0KSwgc2Vjb25kKF9fcC5zZWNvbmQpIHt9Cn07CgoKdGVtcGxh
dGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBh
aXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1cm4g
X194LmZpcnN0ID09IF9feS5maXJzdCAmJiBfX3guc2Vjb25kID09IF9feS5zZWNvbmQ7Cn0KCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25z
dCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0
dXJuIF9feC5maXJzdCA8IF9feS5maXJzdCB8fAogICAgICAgICAoIShfX3kuZmlyc3QgPCBfX3gu
Zmlyc3QpICYmIF9feC5zZWNvbmQgPCBfX3kuc2Vjb25kKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBf
VDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBwYWlyPF9UMSwgX1Qy
PiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9f
eSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJh
dG9yPihjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195
KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9U
Mj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25z
dCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKCnRlbXBs
YXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBw
YWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJu
ICEoX194IDwgX195KTsKfQojIDE0MCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5j
bHVkZS9jKysvMy4yLjEvYml0cy9zdGxfcGFpci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNs
YXNzIF9UMj4KCgppbmxpbmUgcGFpcjxfVDEsIF9UMj4gbWFrZV9wYWlyKF9UMSBfX3gsIF9UMiBf
X3kpCgoKCnsKICByZXR1cm4gcGFpcjxfVDEsIF9UMj4oX194LCBfX3kpOwp9Cgp9CiMgNzIgIi91
c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2Fs
Z29iYXNlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUv
YysrLzMuMi4xL2JpdHMvdHlwZV90cmFpdHMuaCIgMSAzCiMgNTMgIi91c3IvbG9jYWwvcHJvZHVj
dHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvdHlwZV90cmFpdHMuaCIgMwojIDkw
ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3R5
cGVfdHJhaXRzLmgiIDMKc3RydWN0IF9fdHJ1ZV90eXBlIHt9OwpzdHJ1Y3QgX19mYWxzZV90eXBl
IHt9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHMgewogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIHRoaXNfZHVtbXlfbWVtYmVyX211c3RfYmVfZmlyc3Q7CiMgMTEzICIv
dXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3R5cGVf
dHJhaXRzLmgiIDMKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v
cGVyYXRvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZTw+IHN0
cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k
ZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxh
dGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK
CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2lnbmVkIGNoYXI+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz
X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBj
aGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90
cmFpdHM8d2NoYXJfdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1
bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50
X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj
dCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fz
c2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVz
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRl
PD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90
eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxpbnQ+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz
X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBp
bnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3Ry
YWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl
cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9f
dHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1w
bGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5
cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmcgbG9u
Zz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJh
aXRzPGZsb2F0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl
cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9f
dHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j
b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln
bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4g
c3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IF9Jc19p
bnRlZ2VyIHsKICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+
IHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdy
YWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxjaGFyPiB7CiAgdHlwZWRlZiBf
X3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxz
aWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxh
dGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVl
X3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8d2NoYXJf
dD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1
Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK
fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIHNob3J0PiB7CiAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50
ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRl
PD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gewogIHR5cGVkZWYgX190cnVlX3R5
cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZz4gewog
IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lz
X2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFs
Owp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBsb25nPiB7CiAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl
cjx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK
fTsKCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3Igewog
ICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfTm9ybWFsOwp9OwoKCm5hbWVzcGFjZSBfX2dudV9jeHgK
ewogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4gY2xh
c3MgX19ub3JtYWxfaXRlcmF0b3I7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlw
ZW5hbWUgX0NvbnRhaW5lcj4Kc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3I8IF9fZ251X2N4eDo6
X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiA+IHsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBfTm9ybWFsOwp9OwojIDczICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIu
MS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xv
Y2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9pdGVyYXRv
cl9iYXNlX3R5cGVzLmgiIDEgMwojIDY4ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9p
bmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKCm5hbWVz
cGFjZSBzdGQKewojIDgwICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2Mr
Ky8zLjIuMS9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKICBzdHJ1Y3QgaW5wdXRf
aXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3Ry
dWN0IGZvcndhcmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsK
CiAgc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIDogcHVibGljIGZvcndhcmRfaXRl
cmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgOiBwdWJs
aWMgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcge307CiMgMTAwICIvdXNyL2xvY2FsL3Byb2R1
Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5
cGVzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2F0ZWdvcnksIHR5cGVuYW1lIF9UcCwgdHlw
ZW5hbWUgX0Rpc3RhbmNlID0gcHRyZGlmZl90LAogICAgICAgICAgIHR5cGVuYW1lIF9Qb2ludGVy
ID0gX1RwKiwgdHlwZW5hbWUgX1JlZmVyZW5jZSA9IF9UcCY+CiAgICBzdHJ1Y3QgaXRlcmF0b3Ig
ewoKICAgICAgdHlwZWRlZiBfQ2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CgogICAgICB0eXBl
ZGVmIF9UcCB2YWx1ZV90eXBlOwoKICAgICAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90
eXBlOwoKICAgICAgdHlwZWRlZiBfUG9pbnRlciBwb2ludGVyOwoKICAgICAgdHlwZWRlZiBfUmVm
ZXJlbmNlIHJlZmVyZW5jZTsKICAgIH07CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVy
YXRvcj4KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHMgewogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciBwb2ludGVyOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIH07
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHM8X1Rw
Kj4gewogICAgICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2Nh
dGVnb3J5OwogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRp
ZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogICAgICB0
eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog
ICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxjb25zdCBfVHAqPiB7CiAgICAgIHR5cGVkZWYgcmFu
ZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYg
X1RwIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsK
ICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3QgX1Rw
JiByZWZlcmVuY2U7CiAgICB9OwoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAg
IGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29y
eQogICAgX19pdGVyYXRvcl9jYXRlZ29yeShjb25zdCBfSXRlciYpCiAgICB7IHJldHVybiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSgpOyB9Cgp9CiMg
NzQgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMv
c3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2lu
Y2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMSAzCiMgNjgg
Ii91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3Rs
X2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMwojIDEgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMu
Mi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvY29uY2VwdF9jaGVjay5oIiAxIDMKIyAzOSAiL3Vz
ci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9jb25jZXB0
X2NoZWNrLmgiIDMKIyA2OSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9j
KysvMy4yLjEvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAyIDMKCgoKCm5hbWVzcGFj
ZSBzdGQKewp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICBpbmxpbmUgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgX19k
aXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlu
cHV0X2l0ZXJhdG9yX3RhZykKICB7CgogICAKCiAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgIHdoaWxlIChfX2Zp
cnN0ICE9IF9fbGFzdCkgewogICAgICArK19fZmlyc3Q7ICsrX19uOwogICAgfQogICAgcmV0dXJu
IF9fbjsKICB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgaW5s
aW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZm
ZXJlbmNlX3R5cGUKICBfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19p
dGVyYXRvcl90YWcpCiAgewoKICAgCiAgICByZXR1cm4gX19sYXN0IC0gX19maXJzdDsKICB9CiMg
MTExICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRz
L3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
cmF0b3I+CiAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46
OmRpZmZlcmVuY2VfdHlwZQogIGRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1
dEl0ZXJhdG9yIF9fbGFzdCkKICB7CgogICAgcmV0dXJuIF9fZGlzdGFuY2UoX19maXJzdCwgX19s
YXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICB9Cgp0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgaW5saW5lIHZvaWQKICBfX2FkdmFu
Y2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCiAg
ewoKICAgCiAgICB3aGlsZSAoX19uLS0pICsrX19pOwogIH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9C
aWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICBpbmxpbmUgdm9pZAog
IF9fYWR2YW5jZShfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAg
ICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogIHsKCiAgIAoKICAgIGlmIChf
X24gPiAwKQogICAgICB3aGlsZSAoX19uLS0pICsrX19pOwogICAgZWxzZQogICAgICB3aGlsZSAo
X19uKyspIC0tX19pOwogIH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogIGlubGluZSB2b2lkCiAgX19hZHZhbmNlKF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICByYW5kb21fYWNj
ZXNzX2l0ZXJhdG9yX3RhZykKICB7CgogICAKICAgIF9faSArPSBfX247CiAgfQojIDE2NCAiL3Vz
ci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfaXRl
cmF0b3JfYmFzZV9mdW5jcy5oIiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yLCB0
eXBlbmFtZSBfRGlzdGFuY2U+CiAgaW5saW5lIHZvaWQKICBhZHZhbmNlKF9JbnB1dEl0ZXJhdG9y
JiBfX2ksIF9EaXN0YW5jZSBfX24pCiAgewoKICAgIF9fYWR2YW5jZShfX2ksIF9fbiwgX19pdGVy
YXRvcl9jYXRlZ29yeShfX2kpKTsKICB9Cgp9CiMgNzUgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2Nj
LzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91
c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2l0
ZXJhdG9yLmgiIDEgMwojIDY4ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRl
L2MrKy8zLjIuMS9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDg5ICIv
dXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9p
dGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgY2xhc3MgcmV2
ZXJzZV9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8dHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5LAogICAgICAgICAgICAgICAgICAgICAg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAg
ICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVy
ZW5jZV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JdGVyYXRvcj46OnBvaW50ZXIsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgogICAgewogICAgcHJvdGVjdGVkOgog
ICAgICBfSXRlcmF0b3IgY3VycmVudDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0l0ZXJh
dG9yIGl0ZXJhdG9yX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZSBy
ZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRv
cj46OnBvaW50ZXIgcG9pbnRlcjsKCiAgICBwdWJsaWM6CgoKCiAgICAgIHJldmVyc2VfaXRlcmF0
b3IoKSB7IH0KCgoKCiAgICAgIGV4cGxpY2l0CiAgICAgIHJldmVyc2VfaXRlcmF0b3IoaXRlcmF0
b3JfdHlwZSBfX3gpIDogY3VycmVudChfX3gpIHsgfQoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRv
cihjb25zdCByZXZlcnNlX2l0ZXJhdG9yJiBfX3gpCiAgICAgIDogY3VycmVudChfX3guY3VycmVu
dCkgeyB9CgoKCgoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+CiAgICAgICAgcmV2ZXJz
ZV9pdGVyYXRvcihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194KQogICAgICAgIDog
Y3VycmVudChfX3guYmFzZSgpKSB7IH0KCgoKCiAgICAgIGl0ZXJhdG9yX3R5cGUKICAgICAgYmFz
ZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KCgoKCgoKICAgICAgcmVmZXJlbmNlCiAgICAg
IG9wZXJhdG9yKigpIGNvbnN0CiAgICAgIHsKICAgICAgICBfSXRlcmF0b3IgX190bXAgPSBjdXJy
ZW50OwogICAgICAgIHJldHVybiAqLS1fX3RtcDsKICAgICAgfQoKCgoKCgogICAgICBwb2ludGVy
CiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKCgoK
CgogICAgICByZXZlcnNlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAg
ICAgIC0tY3VycmVudDsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAg
cmV2ZXJzZV9pdGVyYXRvcgogICAgICBvcGVyYXRvcisrKGludCkKICAgICAgewogICAgICAgIHJl
dmVyc2VfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgICAgICAtLWN1cnJlbnQ7CiAgICAgICAg
cmV0dXJuIF9fdG1wOwogICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAg
IG9wZXJhdG9yLS0oKQogICAgICB7CiAgICAgICAgKytjdXJyZW50OwogICAgICAgIHJldHVybiAq
dGhpczsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yIG9wZXJhdG9yLS0oaW50
KQogICAgICB7CiAgICAgICAgcmV2ZXJzZV9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgICAg
ICsrY3VycmVudDsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2
ZXJzZV9pdGVyYXRvcgogICAgICBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QK
ICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihjdXJyZW50IC0gX19uKTsgfQoKCgoKCgog
ICAgICByZXZlcnNlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBf
X24pCiAgICAgIHsKICAgICAgICBjdXJyZW50IC09IF9fbjsKICAgICAgICByZXR1cm4gKnRoaXM7
CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICBvcGVyYXRvci0oZGlm
ZmVyZW5jZV90eXBlIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihj
dXJyZW50ICsgX19uKTsgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yJgogICAgICBvcGVy
YXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjdXJyZW50ICs9IF9f
bjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmVmZXJlbmNlCiAg
ICAgIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKigqdGhp
cyArIF9fbik7IH0KICAgIH07CiMgMjY5ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9p
bmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgcmV2ZXJz
ZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2Vf
aXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX194LmJhc2UoKSA9PSBfX3ku
YmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29s
CiAgICBvcGVyYXRvcjwoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAg
ICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7
IHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVy
YXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4o
Y29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29u
c3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kgPCBf
X3g7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yPD0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAg
ICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsg
cmV0dXJuICEoX195IDwgX194KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAg
ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy
YXRvcj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0
b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh
dG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBvcGVyYXRvci0oY29uc3QgcmV2ZXJzZV9pdGVyYXRv
cjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf
SXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgcmV2ZXJzZV9pdGVyYXRv
cjxfSXRlcmF0b3I+CiAgICBvcGVyYXRvcisodHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl
cmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2Vf
aXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194KQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxf
SXRlcmF0b3I+KF9feC5iYXNlKCkgLSBfX24pOyB9CiMgMzI3ICIvdXNyL2xvY2FsL3Byb2R1Y3Rz
L2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGJhY2tfaW5zZXJ0X2l0ZXJhdG9y
CiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2
b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfQ29udGFpbmVyKiBjb250YWlu
ZXI7CgogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBl
OwoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXIm
IF9feCkgOiBjb250YWluZXIoJl9feCkgeyB9CiMgMzUzICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2dj
Yy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgICAgIGJh
Y2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0odHlwZW5hbWUgX0NvbnRhaW5lcjo6
Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsKICAgICAgICBjb250YWluZXItPnB1c2hf
YmFjayhfX3ZhbHVlKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgogICAgICBiYWNr
X2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KCgog
ICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0
aGlzOyB9CgoKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQp
IHsgcmV0dXJuICp0aGlzOyB9CiAgICB9OwojIDM4NCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2Mv
My4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgYmFja19pbnNlcnRfaXRlcmF0b3I8X0Nv
bnRhaW5lcj4KICAgIGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KQogICAgeyByZXR1cm4g
YmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsgfQojIDM5NyAiL3Vzci9sb2Nh
bC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfaXRlcmF0b3Iu
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBmcm9udF9pbnNl
cnRfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZv
aWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250YWlu
ZXIqIGNvbnRhaW5lcjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29u
dGFpbmVyX3R5cGU7CgoKICAgICAgZXhwbGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yKF9Db250
YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkgeyB9CiMgNDIyICIvdXNyL2xvY2FsL3Byb2R1
Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAg
ICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KHR5cGVuYW1lIF9Db250
YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3ZhbHVlKQogICAgICB7CiAgICAgICAgY29udGFpbmVy
LT5wdXNoX2Zyb250KF9fdmFsdWUpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCiAg
ICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRo
aXM7IH0KCgogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7
IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvcgogICAgICBvcGVy
YXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgNDUzICIvdXNyL2xvY2FsL3By
b2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9pdGVyYXRvci5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGlubGluZSBmcm9udF9pbnNlcnRf
aXRlcmF0b3I8X0NvbnRhaW5lcj4KICAgIGZyb250X2luc2VydGVyKF9Db250YWluZXImIF9feCkK
ICAgIHsgcmV0dXJuIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOyB9CiMg
NDcwICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRz
L3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNs
YXNzIGluc2VydF9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9y
X3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAg
X0NvbnRhaW5lciogY29udGFpbmVyOwogICAgICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRv
ciBpdGVyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJf
dHlwZTsKCgoKCgogICAgICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFt
ZSBfQ29udGFpbmVyOjppdGVyYXRvciBfX2kpCiAgICAgIDogY29udGFpbmVyKCZfX3gpLCBpdGVy
KF9faSkge30KIyA1MTIgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysr
LzMuMi4xL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAg
ICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9f
dmFsdWUpCiAgICAgIHsKICAgICAgICBpdGVyID0gY29udGFpbmVyLT5pbnNlcnQoaXRlciwgX192
YWx1ZSk7CiAgICAgICAgKytpdGVyOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCiAg
ICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0K
CgogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhp
czsgfQoKCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0
dXJuICp0aGlzOyB9CiAgICB9OwojIDU0NCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEv
aW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9Db250YWluZXIsIHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBpbnNlcnRfaXRl
cmF0b3I8X0NvbnRhaW5lcj4KICAgIGluc2VydGVyKF9Db250YWluZXImIF9feCwgX0l0ZXJhdG9y
IF9faSkKICAgIHsKICAgICAgcmV0dXJuIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX0NvbnRh
aW5lcjo6aXRlcmF0b3IoX19pKSk7CiAgICB9Cn0KCm5hbWVzcGFjZSBfX2dudV9jeHgKewoKCgoK
CgoKICB1c2luZyBzdGQ6Oml0ZXJhdG9yX3RyYWl0czsKICB1c2luZyBzdGQ6Oml0ZXJhdG9yOwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNs
YXNzIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIDogcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5
cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRl
cmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgogICAg
ewogICAgcHJvdGVjdGVkOgogICAgICBfSXRlcmF0b3IgX01fY3VycmVudDsKCiAgICBwdWJsaWM6
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZl
cmVuY2VfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIgcG9pbnRl
cjsKCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKCkgOiBfTV9jdXJyZW50KF9JdGVyYXRvcigpKSB7
IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRv
ciYgX19pKSA6IF9NX2N1cnJlbnQoX19pKSB7IH0KCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SXRlcj4KICAgICAgaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9fbm9ybWFsX2l0ZXJh
dG9yPF9JdGVyLCBfQ29udGFpbmVyPiYgX19pKQogICAgICAgIDogX01fY3VycmVudChfX2kuYmFz
ZSgpKSB7IH0KCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1
cm4gKl9NX2N1cnJlbnQ7IH0KCiAgICAgIHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0
IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBv
cGVyYXRvcisrKCkgeyArK19NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3Jt
YWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJh
dG9yKF9NX2N1cnJlbnQrKyk7IH0KCgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3Bl
cmF0b3ItLSgpIHsgLS1fTV9jdXJyZW50OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFs
X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLS0oaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRv
cihfTV9jdXJyZW50LS0pOyB9CgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oY29u
c3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJlbnRb
X19uXTsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKz0oY29uc3Qg
ZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVudCArPSBfX247IHJldHVybiAq
dGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKGNvbnN0IGRp
ZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRv
cihfTV9jdXJyZW50ICsgX19uKTsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9w
ZXJhdG9yLT0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVudCAt
PSBfX247IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3Bl
cmF0b3ItKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBf
X25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50IC0gX19uKTsgfQoKICAgICAgY29uc3QgX0l0ZXJh
dG9yJgogICAgICBiYXNlKCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQogICAgfTsKIyA2
NDUgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMv
c3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFt
ZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0
b3I9PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19s
aHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29u
dGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2UoKTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAg
aW5saW5lIGJvb2wKICBvcGVyYXRvcj09KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv
ciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0
b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgp
ID09IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBl
bmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3Bl
cmF0b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYg
X19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBf
Q29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpICE9IF9fcmhzLmJhc2Uo
KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+
CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvciE9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy
YXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRl
cmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFz
ZSgpICE9IF9fcmhzLmJhc2UoKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwg
dHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAog
IG9wZXJhdG9yPChjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVy
PiYgX19saHMsCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIs
IF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNl
KCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVy
PgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy
YXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRl
cmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFz
ZSgpIDwgX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5
cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBv
cGVyYXRvcj4oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4m
IF9fbGhzLAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBf
Q29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID4gX19yaHMuYmFzZSgp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4K
ICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0
b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0
b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgp
ID4gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVu
YW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVy
YXRvcjw9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBf
X2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9D
b250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPD0gX19yaHMuYmFzZSgp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4K
ICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh
dG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVy
YXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNl
KCkgPD0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5
cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBv
cGVyYXRvcj49KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+
JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIs
IF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPj0gX19yaHMuYmFz
ZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5l
cj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9p
dGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5i
YXNlKCkgPj0gX19yaHMuYmFzZSgpOyB9CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0
b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSB0
eXBlbmFtZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPjo6ZGlmZmVy
ZW5jZV90eXBlCiAgb3BlcmF0b3ItKGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckws
IF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9y
PF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkg
LSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFt
ZSBfQ29udGFpbmVyPgogIGlubGluZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250
YWluZXI+CiAgb3BlcmF0b3IrKHR5cGVuYW1lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwg
X0NvbnRhaW5lcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sCiAgICAgICAgICAgIGNvbnN0IF9fbm9y
bWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9faSkKICB7IHJldHVybiBfX25v
cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+KF9faS5iYXNlKCkgKyBfX24pOyB9
Cn0KIyA3NiAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEv
Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7CiMgOTEgIi91c3IvbG9j
YWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ29iYXNl
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2Fy
ZEl0ZXIyPgogICAgaW5saW5lIHZvaWQKICAgIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwg
X0ZvcndhcmRJdGVyMiBfX2IpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9Gb3J3YXJkSXRlcjE+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUxOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZSBf
VmFsdWVUeXBlMjsKCgogICAgIAogICAgIAogICAgIAogICAgIAoKICAgICAgX1ZhbHVlVHlwZTEg
X190bXAgPSAqX19hOwogICAgICAqX19hID0gKl9fYjsKICAgICAgKl9fYiA9IF9fdG1wOwogICAg
fQojIDExOCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEv
Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGlu
ZSB2b2lkCiAgICBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgogICAgICBf
VHAgX190bXAgPSBfX2E7CiAgICAgIF9fYSA9IF9fYjsKICAgICAgX19iID0gX190bXA7CiAgICB9
CiMgMTQ2ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9i
aXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5l
IGNvbnN0IF9UcCYKICAgIG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpCiAgICB7
CgogICAgIAoKICAgICAgaWYgKF9fYiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKICAg
IH0KIyAxNjYgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4x
L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxp
bmUgY29uc3QgX1RwJgogICAgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikKICAg
IHsKCiAgICAgCgogICAgICBpZiAoX19hIDwgX19iKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwog
ICAgfQojIDE4NiAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4y
LjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5h
bWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWluKGNvbnN0IF9UcCYgX19h
LCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAgaWYgKF9fY29t
cChfX2IsIF9fYSkpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CiMgMjA0ICIvdXNyL2xv
Y2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvYmFz
ZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlu
bGluZSBjb25zdCBfVHAmCiAgICBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBf
Q29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgICBpZiAoX19jb21wKF9fYSwgX19iKSkgcmV0dXJu
IF9fYjsgcmV0dXJuIF9fYTsKICAgIH0KIyAyMjEgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMu
Mi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0
cHV0SXRlcgogICAgX19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
CiAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgaW5wdXRfaXRlcmF0
b3JfdGFnKQogICAgewogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fcmVzdWx0
LCArK19fZmlyc3QpCiAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiBf
X3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5
cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHkoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0
b3JfdGFnKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu
ZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlOwogICAg
ICBmb3IgKF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikg
ewogICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAg
ICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV90cml2aWFsKGNv
bnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICB7
CiAgICAgIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICogKF9fbGFzdCAt
IF9fZmlyc3QpKTsKICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRl
cj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2Zp
cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz
dWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBf
X3Jlc3VsdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1
dEl0ZXIKICAgIF9fY29weV9hdXgyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAg
ICB7IHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRvcl9j
YXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5l
IF9UcCoKICAgIF9fY29weV9hdXgyKF9UcCogX19maXJzdCwgX1RwKiBfX2xhc3QsCiAgICAgICAg
ICAgICAgICBfVHAqIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV90
cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4KICAgIGlubGluZSBfVHAqCiAgICBfX2NvcHlfYXV4Mihjb25zdCBfVHAqIF9fZmlyc3Qs
IGNvbnN0IF9UcCogX19sYXN0LAogICAgICAgICAgICAgICAgX1RwKiBfX3Jlc3VsdCwgX190cnVl
X3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
dWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0
SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl
c3VsdCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46Omhhc190cml2aWFs
X2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9Ucml2aWFsOwogICAgICByZXR1cm4gX091
dHB1dEl0ZXIoX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19yZXN1bHQuYmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1RyaXZpYWwoKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgog
ICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlw
ZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJh
aXRzPF9WYWx1ZVR5cGU+OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAg
ICBfVHJpdmlhbDsKICAgICAgcmV0dXJuIF9fY29weV9hdXgyKF9fZmlyc3QsIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAg
X1RyaXZpYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVu
YW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkxKF9J
bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRw
dXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAg
ICAgcmV0dXJuIF9fY29weV9uaTIoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksIF9fcmVz
dWx0LCBfX05vcm1hbCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg
dHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9u
aTEoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
X091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1h
bDsKICAgICAgcmV0dXJuIF9fY29weV9uaTIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19O
b3JtYWwoKSk7CiAgICB9CiMgMzM5ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNs
dWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIK
ICAgIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX091dHB1dEl0
ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9Jc19ub3JtYWxfaXRlcmF0b3I8X0lucHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAg
ICByZXR1cm4gX19jb3B5X25pMShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1hbCgp
KTsKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlw
ZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMj4KICAgIGlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIy
CiAgICBfX2NvcHlfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LCBfQmlkaXJl
Y3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf
dGFnKQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgKi0tX19y
ZXN1bHQgPSAqLS1fX2xhc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRl
cj4KICAgIGlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIKICAgIF9fY29weV9iYWNrd2FyZChfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAg
ICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uOwogICAg
ICBmb3IgKF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKQogICAgICAgICot
LV9fcmVzdWx0ID0gKi0tX19sYXN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgoKCgoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRp
cmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Jvb2xUeXBlPgogICAgc3RydWN0
IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaAogICAgewogICAgICBzdGF0aWMgX0JpZGlyZWN0aW9u
YWxJdGVyMgogICAgICBjb3B5KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwgX0JpZGlyZWN0
aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3Vs
dCkKICAgICAgewogICAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgICAgfQog
ICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IF9fY29weV9iYWNrd2Fy
ZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgIHsKICAgICAgc3RhdGljIF9U
cCoKICAgICAgY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAq
IF9fcmVzdWx0KQogICAgICB7CiAgICAgICAgY29uc3QgcHRyZGlmZl90IF9OdW0gPSBfX2xhc3Qg
LSBfX2ZpcnN0OwogICAgICAgIG1lbW1vdmUoX19yZXN1bHQgLSBfTnVtLCBfX2ZpcnN0LCBzaXpl
b2YoX1RwKSAqIF9OdW0pOwogICAgICAgIHJldHVybiBfX3Jlc3VsdCAtIF9OdW07CiAgICAgIH0K
ICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfX2NvcHlfYmFja3dh
cmRfZGlzcGF0Y2g8Y29uc3QgX1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICB7CiAgICAgIHN0
YXRpYyBfVHAqCiAgICAgIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFz
dCwgX1RwKiBfX3Jlc3VsdCkKICAgICAgewogICAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRf
ZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICAgICAgICA6OmNvcHkoX19maXJz
dCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJk
X2F1eChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KQogICAgewogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9CSTI+Ojp2YWx1ZV90eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgOjpoYXNfdHJp
dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yIF9Ucml2aWFsOwogICAgICByZXR1cm4gX19jb3B5X2Jh
Y2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9Ucml2aWFsPgogICAgICAgICAgICAgICAgICA6
OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBl
bmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNr
d2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBf
X3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9CSTIoX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0
LCBfX2xhc3QsIF9fcmVzdWx0LmJhc2UoKSkpOyB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkx
LCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9vdXRw
dXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5
cGUpCiAgICB7IHJldHVybiBfX2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19y
ZXN1bHQpOyB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAg
aW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJ
MSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICAg
ICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3Qu
YmFzZSgpLCBfX2xhc3QuYmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBfX2Nv
cHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1
bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFs
X2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2Jh
Y2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTm9y
bWFsKCkpOwogICAgfQojIDQ3NyAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVk
ZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlIDx0eXBlbmFtZSBf
QkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIGNvcHlfYmFja3dhcmQoX0JJ
MSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAg
CiAgICAgCgoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkx
Pjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9pbnB1dF9u
b3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19Ob3JtYWwoKSk7CiAgICB9CiMg
NTA5ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRz
L3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBl
bmFtZSBfVHA+CiAgICB2b2lkCiAgICBmaWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAoKICAgICAgZm9y
ICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX192
YWx1ZTsKICAgIH0KIyA1MzEgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUv
YysrLzMuMi4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0
cHV0SXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIF9PdXRwdXRJdGVyCiAg
ICBmaWxsX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9fdmFs
dWUpCiAgICB7CgogICAgIAoKICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0
KQogICAgICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9
CgoKCiAgaW5saW5lIHZvaWQKICBmaWxsKHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHVuc2lnbmVk
IGNoYXIqIF9fbGFzdCwgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQogIHsKICAgIHVuc2lnbmVk
IGNoYXIgX190bXAgPSBfX2M7CiAgICBtZW1zZXQoX19maXJzdCwgX190bXAsIF9fbGFzdCAtIF9f
Zmlyc3QpOwogIH0KCiAgaW5saW5lIHZvaWQKICBmaWxsKHNpZ25lZCBjaGFyKiBfX2ZpcnN0LCBz
aWduZWQgY2hhciogX19sYXN0LCBjb25zdCBzaWduZWQgY2hhciYgX19jKQogIHsKICAgIHNpZ25l
ZCBjaGFyIF9fdG1wID0gX19jOwogICAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICBpbmxpbmUgdm9pZAog
IGZpbGwoY2hhciogX19maXJzdCwgY2hhciogX19sYXN0LCBjb25zdCBjaGFyJiBfX2MpCiAgewog
ICAgY2hhciBfX3RtcCA9IF9fYzsKICAgIG1lbXNldChfX2ZpcnN0LCBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1NpemU+CiAgICBpbmxpbmUgdW5zaWduZWQgY2hhcioKICAgIGZpbGxfbih1bnNpZ25l
ZCBjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykKICAg
IHsKICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBfX2MpOwogICAgICByZXR1cm4g
X19maXJzdCArIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpemU+CiAgICBpbmxp
bmUgc2lnbmVkIGNoYXIqCiAgICBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19uLCBjb25z
dCBzaWduZWQgY2hhciYgX19jKQogICAgewogICAgICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBf
X24sIF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBjaGFyKgogICAgZmlsbF9uKGNoYXIqIF9fZmlyc3Qs
IF9TaXplIF9fbiwgY29uc3QgY2hhciYgX19jKQogICAgewogICAgICBmaWxsKF9fZmlyc3QsIF9f
Zmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19uOwogICAgfQojIDYw
NiAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9z
dGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFt
ZSBfSW5wdXRJdGVyMj4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPgogICAgbWlz
bWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg
ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAg
IAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICpfX2ZpcnN0MSA9PSAqX19m
aXJzdDIpIHsKICAgICAgICArK19fZmlyc3QxOwogICAgICAgICsrX19maXJzdDI7CiAgICAgIH0K
ICAgICAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19m
aXJzdDIpOwogICAgfQojIDY0MCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVk
ZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9J
bnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0
ZT4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPgogICAgbWlzbWF0Y2goX0lucHV0
SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJ
dGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJl
ZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm
JiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAgICsrX19maXJz
dDE7CiAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgfQogICAgICByZXR1cm4gcGFpcjxfSW5wdXRJ
dGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgICB9CiMgNjY4ICIvdXNy
L2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdv
YmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1
dEl0ZXIyPgogICAgaW5saW5lIGJvb2wKICAgIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBf
SW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpCiAgICB7
CgogICAgIAogICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7
ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICAgICAgaWYgKCEoKl9fZmlyc3QxID09ICpfX2Zp
cnN0MikpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoj
IDY5OSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0
cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBl
bmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBi
b29sCiAgICBlcXVhbChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwK
ICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgX0JpbmFyeVByZWRpY2F0
ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgIGZvciAoIDsgX19maXJz
dDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICAgICBpZiAoIV9fYmlu
YXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KIyA3MzIgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMu
Mi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBib29sCiAgICBs
ZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg
X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy
LCBfSW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoK
ICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIK
ICAgICAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICAgICAgaWYgKCpfX2Zp
cnN0MSA8ICpfX2ZpcnN0MikKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmICgqX19m
aXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAg
cmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKICAgIH0K
IyA3NjcgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2Jp
dHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlw
ZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgbGV4aWNv
Z3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz
dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lu
cHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f
Y29tcCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFz
dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MgogICAgICAgICAgICA7ICsrX19maXJzdDEsICsrX19m
aXJzdDIpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEp
KQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0MSA9
PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7CiAgICB9CgogIGlubGluZSBib29sCiAg
bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDEsIGNv
bnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgdW5zaWduZWQgY2hhciogX19maXJzdDIsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIp
CiAgewogICAgY29uc3Qgc2l6ZV90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsKICAgIGNv
bnN0IHNpemVfdCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7CiAgICBjb25zdCBpbnQgX19y
ZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsK
ICAgIHJldHVybiBfX3Jlc3VsdCAhPSAwID8gX19yZXN1bHQgPCAwIDogX19sZW4xIDwgX19sZW4y
OwogIH0KCiAgaW5saW5lIGJvb2wKICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCBjaGFy
KiBfX2ZpcnN0MSwgY29uc3QgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0MikKICB7CgogICAgcmV0
dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3Qx
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciop
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25l
ZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNv
bnN0IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7CgoKCgoKCiAgfQoKfQojIDY3ICIvdXNyL2xvY2Fs
L3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9hbGdvcml0aG0iIDIgMwojIDEg
Ii91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3Rs
X2NvbnN0cnVjdC5oIiAxIDMKIyA2NyAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5j
bHVkZS9jKysvMy4yLjEvYml0cy9zdGxfY29uc3RydWN0LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoK
CgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgogICAgaW5saW5lIHZvaWQKICAg
IF9Db25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1ZSkKICAgIHsgbmV3IChzdGF0
aWNfY2FzdDx2b2lkKj4oX19wKSkgX1QxKF9fdmFsdWUpOyB9CgoKCgoKCgogIHRlbXBsYXRlIDxj
bGFzcyBfVDE+CiAgICBpbmxpbmUgdm9pZAogICAgX0NvbnN0cnVjdChfVDEqIF9fcCkKICAgIHsg
bmV3IChzdGF0aWNfY2FzdDx2b2lkKj4oX19wKSkgX1QxKCk7IH0KIyA5OCAiL3Vzci9sb2NhbC9w
cm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfY29uc3RydWN0Lmgi
IDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAg
ICBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRv
ciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgIHsgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg
KytfX2ZpcnN0KSBfRGVzdHJveSgmKl9fZmlyc3QpOyB9CiMgMTEyICIvdXNyL2xvY2FsL3Byb2R1
Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwog
IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIF9f
ZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvciwgX190cnVlX3R5
cGUpCiAgICB7IH0KCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgogICAgaW5saW5lIHZvaWQK
ICAgIF9EZXN0cm95KF9UcCogX19wb2ludGVyKQogICAgeyBfX3BvaW50ZXItPn5fVHAoKTsgfQoj
IDEzNCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0
cy9zdGxfY29uc3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4K
ICAgIGlubGluZSB2b2lkCiAgICBfRGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9G
b3J3YXJkSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgICAgICAg
ICAgICAgIF9WYWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8
X1ZhbHVlX3R5cGU+OjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yCiAgICAgICAgICAgICAgICAgICAg
ICAgX0hhc190cml2aWFsX2Rlc3RydWN0b3I7CgogICAgICBfX2Rlc3Ryb3lfYXV4KF9fZmlyc3Qs
IF9fbGFzdCwgX0hhc190cml2aWFsX2Rlc3RydWN0b3IoKSk7CiAgICB9Cn0KIyA2OCAiL3Vzci9s
b2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYWxnb3JpdGhtIiAyIDMK
IyAxICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRz
L3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDY2ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8z
LjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKbmFtZXNw
YWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0Zv
cndhcmRJdGVyPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2Nv
cHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1cm4gY29weShfX2ZpcnN0LCBfX2xh
c3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9jb3B5
X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9
IF9fcmVzdWx0OwogICAgICB0cnkgewogICAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7
ICsrX19maXJzdCwgKytfX2N1cikKICAgICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgKl9fZmly
c3QpOwogICAgICAgIHJldHVybiBfX2N1cjsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAg
ICAgewogICAgICAgICAgX0Rlc3Ryb3koX19yZXN1bHQsIF9fY3VyKTsKICAgICAgICAgIHRocm93
OwogICAgICAgIH0KICAgIH0KIyAxMDYgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2lu
Y2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIGlubGluZSBfRm9y
d2FyZEl0ZXIKICAgIHVuaW5pdGlhbGl6ZWRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LCBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCiAgICB7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVl
VHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+Ojpp
c19QT0RfdHlwZSBfSXNfUE9EOwogICAgICByZXR1cm4gX191bmluaXRpYWxpemVkX2NvcHlfYXV4
KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9Jc19QT0QoKSk7CiAgICB9CgogIGlubGluZSBj
aGFyKgogIHVuaW5pdGlhbGl6ZWRfY29weShjb25zdCBjaGFyKiBfX2ZpcnN0LCBjb25zdCBjaGFy
KiBfX2xhc3QsIGNoYXIqIF9fcmVzdWx0KQogIHsKICAgIG1lbW1vdmUoX19yZXN1bHQsIF9fZmly
c3QsIF9fbGFzdCAtIF9fZmlyc3QpOwogICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9f
Zmlyc3QpOwogIH0KCiAgaW5saW5lIHdjaGFyX3QqCiAgdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0
IHdjaGFyX3QqIF9fZmlyc3QsIGNvbnN0IHdjaGFyX3QqIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgd2NoYXJfdCogX19yZXN1bHQpCiAgewogICAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJz
dCwgc2l6ZW9mKHdjaGFyX3QpICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICAgIHJldHVybiBfX3Jl
c3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv
cndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgX191bmluaXRpYWxp
emVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX3RydWVfdHlwZSkK
ICAgIHsgZmlsbChfX2ZpcnN0LCBfX2xhc3QsIF9feCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRf
ZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkKICAg
IHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsKICAgICAgdHJ5IHsKICAgICAg
ICBmb3IgKCA7IF9fY3VyICE9IF9fbGFzdDsgKytfX2N1cikKICAgICAgICAgIF9Db25zdHJ1Y3Qo
JipfX2N1ciwgX194KTsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAg
ICAgX0Rlc3Ryb3koX19maXJzdCwgX19jdXIpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQog
ICAgfQojIDE2NCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4y
LjEvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh
cmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgdW5pbml0aWFsaXplZF9m
aWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAm
IF9feCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zvcndh
cmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f
dHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIF9fdW5p
bml0aWFsaXplZF9maWxsX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsKICAg
IH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0
eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRf
ZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQogICAgewogICAg
ICByZXR1cm4gZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX0Zv
cndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1Rw
JiBfX3gsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19m
aXJzdDsKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fY3Vy
KQogICAgICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogICAgICAgIHJldHVybiBfX2N1
cjsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3ko
X19maXJzdCwgX19jdXIpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQojIDIxMCAi
L3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxf
dW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBl
bmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgdW5p
bml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3Qg
X1RwJiBfX3gpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9G
b3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogICAgICBy
ZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX19maXJzdCwgX19uLCBfX3gsIF9Jc19Q
T0QoKSk7CiAgICB9CiMgMjI3ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRl
L2MrKy8zLjIuMS9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRl
cj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2NvcHko
X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCiAg
ICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0
MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgICB0cnkgewogICAgICAgIHJldHVybiB1bmluaXRp
YWxpemVkX2NvcHkoX19maXJzdDIsIF9fbGFzdDIsIF9fbWlkKTsKICAgICAgfQogICAgICBjYXRj
aCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsKICAg
ICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv
cndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICBpbmxpbmUg
X0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9jb3B5KF9Gb3J3YXJkSXRlciBf
X3Jlc3VsdCwgX0ZvcndhcmRJdGVyIF9fbWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfVHAmIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdW5pbml0aWFsaXplZF9m
aWxsKF9fcmVzdWx0LCBfX21pZCwgX194KTsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gdW5p
bml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19taWQpOwogICAgICB9CiAgICAgIGNh
dGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX3Jlc3VsdCwgX19taWQpOwog
ICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGlu
ZSB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9maWxsKF9JbnB1dEl0ZXIgX19maXJzdDEs
IF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21p
ZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyKTsKICAg
ICAgdHJ5IHsKICAgICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19taWQyLCBfX2xhc3QyLCBfX3gp
OwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShf
X2ZpcnN0MiwgX19taWQyKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KCn0KIyA2
OSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYWxnb3Jp
dGhtIiAyIDMKIyAxICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8z
LjIuMS9iaXRzL3N0bF9hbGdvLmgiIDEgMwojIDY0ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8z
LjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKIyAxICIvdXNyL2xvY2Fs
L3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9oZWFwLmgiIDEg
MwojIDYzICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9i
aXRzL3N0bF9oZWFwLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9UcD4K
ICAgIHZvaWQKICAgIF9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9faG9sZUluZGV4LCBfRGlzdGFuY2UgX190b3BJbmRl
eCwgX1RwIF9fdmFsdWUpCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJ
bmRleCAtIDEpIC8gMjsKICAgICAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiAq
KF9fZmlyc3QgKyBfX3BhcmVudCkgPCBfX3ZhbHVlKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19o
b2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOwogICAgICAgIF9faG9sZUluZGV4ID0g
X19wYXJlbnQ7CiAgICAgICAgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAg
IH0KICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAg
IHB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAg
CgogICAgIAoKICAgICAgX19wdXNoX2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlVHlwZSgoX19sYXN0
IC0gX19maXJzdCkgLSAxKSwgX0Rpc3RhbmNlVHlwZSgwKSwKICAgICAgICAgICAgICAgICAgX1Zh
bHVlVHlwZSgqKF9fbGFzdCAtIDEpKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5k
b21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHAsCiAgICAg
ICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19wdXNoX2hlYXAoX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAg
ICAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21w
KQogICAgewogICAgICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7
CiAgICAgIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYgX19jb21wKCooX19maXJz
dCArIF9fcGFyZW50KSwgX192YWx1ZSkpIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRl
eCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3BhcmVu
dDsKICAgICAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAgICAgfQogICAg
ICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfX3ZhbHVlOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5s
aW5lIHZvaWQKICAgIHB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAp
CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nl
c3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZl
cmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKCiAgICAgIF9fcHVz
aF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZVR5cGUoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9E
aXN0YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAx
KSksIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVy
YXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBfX2Fk
anVzdF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xl
SW5kZXgsCiAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUpCiAg
ICB7CiAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7CiAgICAgIF9EaXN0
YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICAgICAgd2hpbGUgKF9f
c2Vjb25kQ2hpbGQgPCBfX2xlbikgewogICAgICAgIGlmICgqKF9fZmlyc3QgKyBfX3NlY29uZENo
aWxkKSA8ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKQogICAgICAgICAgX19zZWNv
bmRDaGlsZC0tOwogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCAr
IF9fc2Vjb25kQ2hpbGQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKICAg
ICAgICBfX3NlY29uZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7CiAgICAgIH0KICAg
ICAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hv
bGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKTsKICAgICAgICBfX2hv
bGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOwogICAgICB9CiAgICAgIF9fcHVzaF9oZWFwKF9f
Zmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlKTsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxp
bmUgdm9pZAogICAgX19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192YWx1ZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBl
IF9EaXN0YW5jZTsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIF9fYWRqdXN0X2hl
YXAoX19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9f
dmFsdWUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+
CiAgICBpbmxpbmUgdm9pZAogICAgcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUg
X1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19s
YXN0IC0gMSwgX19sYXN0IC0gMSwgX1ZhbHVlVHlwZSgqKF9fbGFzdCAtIDEpKSk7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3Rh
bmNlLAogICAgICAgICAgIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lk
CiAgICBfX2FkanVzdF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFu
Y2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9f
dmFsdWUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXgg
PSBfX2hvbGVJbmRleDsKICAgICAgX0Rpc3RhbmNlIF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xl
SW5kZXggKyAyOwogICAgICB3aGlsZSAoX19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7CiAgICAgICAg
aWYgKF9fY29tcCgqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKSwgKihfX2ZpcnN0ICsgKF9fc2Vj
b25kQ2hpbGQgLSAxKSkpKQogICAgICAgICAgX19zZWNvbmRDaGlsZC0tOwogICAgICAgICooX19m
aXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgICAg
IF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKICAgICAgICBfX3NlY29uZENoaWxkID0gMiAq
IChfX3NlY29uZENoaWxkICsgMSk7CiAgICAgIH0KICAgICAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0g
X19sZW4pIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAo
X19zZWNvbmRDaGlsZCAtIDEpKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQg
LSAxOwogICAgICB9CiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3Rv
cEluZGV4LCBfX3ZhbHVlLCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBp
bmxpbmUgdm9pZAogICAgX19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwg
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0
b3I+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwogICAgICAqX19yZXN1bHQgPSAqX19maXJz
dDsKICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShf
X2xhc3QgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlLCBfX2NvbXApOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1l
IF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVy
YXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwg
X0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5
cGU7CiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwgX1Zh
bHVlVHlwZSgqKF9fbGFzdCAtIDEpKSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgdm9pZAogICAgbWFrZV9oZWFwKF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAg
ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl
cmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNl
X3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAo
X19sYXN0IC0gX19maXJzdCA8IDIpIHJldHVybjsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9
IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19wYXJlbnQgPSAoX19sZW4g
LSAyKS8yOwoKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBfX2FkanVzdF9oZWFwKF9fZmly
c3QsIF9fcGFyZW50LCBfX2xlbiwgX1ZhbHVlVHlwZSgqKF9fZmlyc3QgKyBfX3BhcmVudCkpKTsK
ICAgICAgICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOwogICAgICAgIF9fcGFyZW50LS07CiAg
ICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0
eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBtYWtlX2hlYXAoX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAg
ICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAg
ICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu
ZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5
cGU7CgoKICAgICAKCgogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDIpIHJldHVybjsKICAg
ICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5j
ZVR5cGUgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOwoKICAgICAgd2hpbGUgKHRydWUpIHsKICAg
ICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwKICAgICAgICAgICAg
ICAgICAgICAgIF9WYWx1ZVR5cGUoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSwgX19jb21wKTsKICAg
ICAgICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOwogICAgICAgIF9fcGFyZW50LS07CiAgICAg
IH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAg
dm9pZAogICAgc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewoKICAgICAKCiAgICAgCgoKICAgICAgd2hpbGUg
KF9fbGFzdCAtIF9fZmlyc3QgPiAxKQogICAgICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0t
KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBl
bmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICBf
Q29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAoKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2Zp
cnN0ID4gMSkKICAgICAgICBwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSwgX19jb21wKTsKICAg
IH0KCn0KIyA2NSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4y
LjEvYml0cy9zdGxfYWxnby5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIu
MS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF90ZW1wYnVmLmgiIDEgMwojIDY0ICIvdXNyL2xv
Y2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF90ZW1wYnVm
LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgNzQgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4x
L2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX3RlbXBidWYuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgogIGNsYXNzIF9UZW1wb3JhcnlfYnVmZmVyCnsK
CiAKCiAgcHRyZGlmZl90IF9NX29yaWdpbmFsX2xlbjsKICBwdHJkaWZmX3QgX01fbGVuOwogIF9U
cCogX01fYnVmZmVyOwoKCiAgdm9pZCBfTV9hbGxvY2F0ZV9idWZmZXIoKSB7CiAgICBfTV9vcmln
aW5hbF9sZW4gPSBfTV9sZW47CiAgICBfTV9idWZmZXIgPSAwOwoKICAgIGlmIChfTV9sZW4gPiAo
cHRyZGlmZl90KSgyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQogICAgICBfTV9sZW4gPSAyMTQ3
NDgzNjQ3IC8gc2l6ZW9mKF9UcCk7CgogICAgd2hpbGUgKF9NX2xlbiA+IDApIHsKICAgICAgX01f
YnVmZmVyID0gKF9UcCopIG1hbGxvYyhfTV9sZW4gKiBzaXplb2YoX1RwKSk7CiAgICAgIGlmIChf
TV9idWZmZXIpCiAgICAgICAgYnJlYWs7CiAgICAgIF9NX2xlbiAvPSAyOwogICAgfQogIH0KCiAg
dm9pZCBfTV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAmLCBfX3RydWVfdHlwZSkge30KICB2
b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYgdmFsLCBfX2ZhbHNlX3R5cGUpIHsK
ICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2J1ZmZlciwgX01fbGVuLCB2YWwpOwogIH0KCnB1
YmxpYzoKCiAgcHRyZGlmZl90IHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9sZW47IH0KCiAgcHRy
ZGlmZl90IHJlcXVlc3RlZF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01fb3JpZ2luYWxfbGVuOyB9
CgogIF9UcCogYmVnaW4oKSB7IHJldHVybiBfTV9idWZmZXI7IH0KCiAgX1RwKiBlbmQoKSB7IHJl
dHVybiBfTV9idWZmZXIgKyBfTV9sZW47IH0KCiAgX1RlbXBvcmFyeV9idWZmZXIoX0ZvcndhcmRJ
dGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkgewoKICAgIHR5cGVkZWYg
dHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj
dG9yCiAgICAgICAgICAgIF9Ucml2aWFsOwoKICAgIHRyeSB7CiAgICAgIF9NX2xlbiA9IGRpc3Rh
bmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9NX2FsbG9jYXRlX2J1ZmZlcigpOwogICAgICBp
ZiAoX01fbGVuID4gMCkKICAgICAgICBfTV9pbml0aWFsaXplX2J1ZmZlcigqX19maXJzdCwgX1Ry
aXZpYWwoKSk7CiAgICB9CiAgICBjYXRjaCguLi4pCiAgICAgIHsKICAgICAgICBmcmVlKF9NX2J1
ZmZlcik7CiAgICAgICAgX01fYnVmZmVyID0gMDsKICAgICAgICBfTV9sZW4gPSAwOwogICAgICAg
IHRocm93OwogICAgICB9CiAgfQoKICB+X1RlbXBvcmFyeV9idWZmZXIoKSB7CiAgICBfRGVzdHJv
eShfTV9idWZmZXIsIF9NX2J1ZmZlciArIF9NX2xlbik7CiAgICBmcmVlKF9NX2J1ZmZlcik7CiAg
fQoKcHJpdmF0ZToKCiAgX1RlbXBvcmFyeV9idWZmZXIoY29uc3QgX1RlbXBvcmFyeV9idWZmZXIm
KSB7fQogIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30KfTsKCn0K
IyA2NiAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0
cy9zdGxfYWxnby5oIiAyIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiMgODQgIi91c3IvbG9jYWwvcHJv
ZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICBpbmxpbmUgY29uc3QgX1RwJgogICAgX19tZWRpYW4oY29u
c3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25zdCBfVHAmIF9fYykKICAgIHsKCiAgICAg
CiAgICAgIGlmIChfX2EgPCBfX2IpCiAgICAgICAgaWYgKF9fYiA8IF9fYykKICAgICAgICAgIHJl
dHVybiBfX2I7CiAgICAgICAgZWxzZSBpZiAoX19hIDwgX19jKQogICAgICAgICAgcmV0dXJuIF9f
YzsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlmIChfX2Eg
PCBfX2MpCiAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19iIDwgX19jKQogICAg
ICAgIHJldHVybiBfX2M7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gX19iOwogICAgfQojIDEx
OCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9z
dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4K
ICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBfX21lZGlhbihjb25zdCBfVHAmIF9fYSwgY29uc3Qg
X1RwJiBfX2IsIGNvbnN0IF9UcCYgX19jLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAog
ICAgICBpZiAoX19jb21wKF9fYSwgX19iKSkKICAgICAgICBpZiAoX19jb21wKF9fYiwgX19jKSkK
ICAgICAgICAgIHJldHVybiBfX2I7CiAgICAgICAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkK
ICAgICAgICAgIHJldHVybiBfX2M7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9fYTsK
ICAgICAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkKICAgICAgICByZXR1cm4gX19hOwogICAg
ICBlbHNlIGlmIChfX2NvbXAoX19iLCBfX2MpKQogICAgICAgIHJldHVybiBfX2M7CiAgICAgIGVs
c2UKICAgICAgICByZXR1cm4gX19iOwogICAgfQojIDE1MCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9n
Y2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0Z1bmN0aW9uPgogICAgX0Z1bmN0aW9uCiAg
ICBmb3JfZWFjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfRnVuY3Rp
b24gX19mKQogICAgewoKICAgICAKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf
X2ZpcnN0KQogICAgICAgIF9fZigqX19maXJzdCk7CiAgICAgIHJldHVybiBfX2Y7CiAgICB9CgoK
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5s
aW5lIF9JbnB1dEl0ZXIKICAgIGZpbmQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwKICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgaW5wdXRfaXRlcmF0b3Jf
dGFnKQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgISgqX19maXJzdCA9
PSBfX3ZhbCkpCiAgICAgICAgKytfX2ZpcnN0OwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0K
CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRl
PgogICAgaW5saW5lIF9JbnB1dEl0ZXIKICAgIGZpbmRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAg
ICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19s
YXN0ICYmICFfX3ByZWQoKl9fZmlyc3QpKQogICAgICAgICsrX19maXJzdDsKICAgICAgcmV0dXJu
IF9fZmlyc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0
ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBmaW5kKF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgY29u
c3QgX1RwJiBfX3ZhbCwKICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7
CiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZl
cmVuY2VfdHlwZSBfX3RyaXBfY291bnQKICAgICAgICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAy
OwoKICAgICAgZm9yICggOyBfX3RyaXBfY291bnQgPiAwIDsgLS1fX3RyaXBfY291bnQpIHsKICAg
ICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19m
aXJzdDsKCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAg
ICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9f
Zmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwp
IHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgfQoKICAgICAgc3dpdGNo
KF9fbGFzdCAtIF9fZmlyc3QpIHsKICAgICAgY2FzZSAzOgogICAgICAgIGlmICgqX19maXJzdCA9
PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDI6
CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICAr
K19fZmlyc3Q7CiAgICAgIGNhc2UgMToKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJl
dHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAwOgogICAgICBkZWZh
dWx0OgogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9S
YW5kb21BY2Nlc3NJdGVyCiAgICBmaW5kX2lmKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAg
ICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190
cmlwX2NvdW50CiAgICAgICAgPSAoX19sYXN0IC0gX19maXJzdCkgPj4gMjsKCiAgICAgIGZvciAo
IDsgX190cmlwX2NvdW50ID4gMCA7IC0tX190cmlwX2NvdW50KSB7CiAgICAgICAgaWYgKF9fcHJl
ZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAg
aWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsK
CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsr
X19maXJzdDsKCiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0Owog
ICAgICAgICsrX19maXJzdDsKICAgICAgfQoKICAgICAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3Qp
IHsKICAgICAgY2FzZSAzOgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19m
aXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMjoKICAgICAgICBpZiAoX19wcmVk
KCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNl
IDE6CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAg
ICsrX19maXJzdDsKICAgICAgY2FzZSAwOgogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBf
X2xhc3Q7CiAgICAgIH0KICAgIH0KIyAyODkgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4x
L2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5k
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgIGNvbnN0IF9U
cCYgX192YWwpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgcmV0dXJuIGZpbmQoX19maXJzdCwg
X19sYXN0LCBfX3ZhbCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CiMgMzA5
ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0
bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUHJl
ZGljYXRlPgogICAgaW5saW5lIF9JbnB1dEl0ZXIKICAgIGZpbmRfaWYoX0lucHV0SXRlciBfX2Zp
cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAg
ICB7CgogICAgIAogICAgIAoKICAgICAgcmV0dXJuIGZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBf
X3ByZWQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQojIDMyOSAiL3Vzci9s
b2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAg
ICBhZGphY2VudF9maW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0
KQogICAgewoKICAgICAKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAg
ICByZXR1cm4gX19sYXN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICAg
ICAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09ICpf
X25leHQpCiAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBfX2ZpcnN0ID0gX19uZXh0
OwogICAgICB9CiAgICAgIHJldHVybiBfX2xhc3Q7CiAgICB9CiMgMzU4ICIvdXNyL2xvY2FsL3By
b2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+
CiAgICBfRm9yd2FyZEl0ZXIKICAgIGFkamFjZW50X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUg
X19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0g
X19sYXN0KQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX25leHQg
PSBfX2ZpcnN0OwogICAgICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgICAgICBpZiAo
X19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkpCiAgICAgICAgICByZXR1cm4gX19maXJz
dDsKICAgICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgICB9CiAgICAgIHJldHVybiBfX2xhc3Q7
CiAgICB9CiMgMzg3ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8z
LjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0
eXBlbmFtZSBfVHA+CiAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRp
ZmZlcmVuY2VfdHlwZQogICAgY291bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCiAgICAg
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9f
biA9IDA7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAg
ICBpZiAoKl9fZmlyc3QgPT0gX192YWx1ZSkKICAgICAgICAgICsrX19uOwogICAgICByZXR1cm4g
X19uOwogICAgfQojIDQxMSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9j
KysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
ciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5w
dXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBjb3VudF9pZihfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAg
CgogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2Vf
dHlwZSBfX24gPSAwOwogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qp
CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICAgICArK19fbjsKICAgICAgcmV0
dXJuIF9fbjsKICAgIH0KIyA0NTAgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1
ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3
YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBz
ZWFyY2goX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAg
ICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKICAg
IHsKCiAgICAgCiAgICAgCiAgICAgCgoKCgogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSB8
fCBfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKCgogICAgICBf
Rm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICAgICAgKytfX3RtcDsKICAgICAgaWYgKF9f
dG1wID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpf
X2ZpcnN0Mik7CgoKCiAgICAgIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOwoKICAgICAgX19wMSA9
IF9fZmlyc3QyOyArK19fcDE7CgogICAgICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9fZmly
c3QxOwoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgICAgICBfX2ZpcnN0
MSA9IGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CiAgICAgICAgaWYgKF9fZmly
c3QxID09IF9fbGFzdDEpCiAgICAgICAgICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAgX19wID0g
X19wMTsKICAgICAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKICAgICAgICBpZiAoKytfX2N1cnJl
bnQgPT0gX19sYXN0MSkKICAgICAgICAgIHJldHVybiBfX2xhc3QxOwoKICAgICAgICB3aGlsZSAo
Kl9fY3VycmVudCA9PSAqX19wKSB7CiAgICAgICAgICBpZiAoKytfX3AgPT0gX19sYXN0MikKICAg
ICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9f
bGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICAgIH0KCiAgICAgICAgKytf
X2ZpcnN0MTsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDE7CiAgICB9CiMgNTIyICIvdXNy
L2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2Fy
ZEl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZD4KICAgIF9Gb3J3YXJkSXRlcjEKICAgIHNlYXJj
aChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg
ICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAg
ICAgIF9CaW5hcnlQcmVkIF9fcHJlZGljYXRlKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoK
CiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9fbGFzdDIpCiAg
ICAgICAgcmV0dXJuIF9fZmlyc3QxOwoKCiAgICAgIF9Gb3J3YXJkSXRlcjIgX190bXAoX19maXJz
dDIpOwogICAgICArK19fdG1wOwogICAgICBpZiAoX190bXAgPT0gX19sYXN0MikgewogICAgICAg
IHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICFfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpf
X2ZpcnN0MikpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIHJldHVybiBfX2ZpcnN0MTsK
ICAgICAgfQoKCgogICAgICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgICAgIF9fcDEgPSBf
X2ZpcnN0MjsgKytfX3AxOwoKICAgICAgX0ZvcndhcmRJdGVyMSBfX2N1cnJlbnQgPSBfX2ZpcnN0
MTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICAgICAgd2hpbGUgKF9f
Zmlyc3QxICE9IF9fbGFzdDEpIHsKICAgICAgICAgIGlmIChfX3ByZWRpY2F0ZSgqX19maXJzdDEs
ICpfX2ZpcnN0MikpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAg
ICAgICB9CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGljYXRl
KCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgaWYg
KF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAg
X19wID0gX19wMTsKICAgICAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKICAgICAgICBpZiAoKytf
X2N1cnJlbnQgPT0gX19sYXN0MSkgcmV0dXJuIF9fbGFzdDE7CgogICAgICAgIHdoaWxlIChfX3By
ZWRpY2F0ZSgqX19jdXJyZW50LCAqX19wKSkgewogICAgICAgICAgaWYgKCsrX19wID09IF9fbGFz
dDIpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgICAgIGlmICgrK19fY3VycmVu
dCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgICB9CgogICAg
ICAgICsrX19maXJzdDE7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgfQojIDU5
NiAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9z
dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBf
SW50ZWdlciwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICBzZWFyY2hfbihfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgIF9JbnRl
Z2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CgogICAgIAogICAgIAoKICAgICAK
CiAgICAgIGlmIChfX2NvdW50IDw9IDApCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVs
c2UgewogICAgICAgIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOwogICAg
ICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgICAgX0ludGVnZXIgX19uID0g
X19jb3VudCAtIDE7CiAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAg
ICAgICsrX19pOwogICAgICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYg
Kl9faSA9PSBfX3ZhbCkgewogICAgICAgICAgICArK19faTsKICAgICAgICAgICAgLS1fX247CiAg
ICAgICAgICB9CiAgICAgICAgICBpZiAoX19uID09IDApCiAgICAgICAgICAgIHJldHVybiBfX2Zp
cnN0OwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX2ZpcnN0ID0gZmluZChfX2ksIF9fbGFz
dCwgX192YWwpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9
CiMgNjQzICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9i
aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVu
YW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBfVHAsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVBy
ZWQ+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29uc3Qg
X1RwJiBfX3ZhbCwKICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fYmluYXJ5X3ByZWQpCiAgICB7
CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2NvdW50IDw9IDApCiAgICAgICAgcmV0dXJuIF9f
Zmlyc3Q7CiAgICAgIGVsc2UgewogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewog
ICAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkKICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChfX2Zp
cnN0ICE9IF9fbGFzdCkgewogICAgICAgICAgX0ludGVnZXIgX19uID0gX19jb3VudCAtIDE7CiAg
ICAgICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgICAgICsrX19pOwogICAg
ICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgX19iaW5hcnlfcHJlZCgq
X19pLCBfX3ZhbCkpIHsKICAgICAgICAgICAgKytfX2k7CiAgICAgICAgICAgIC0tX19uOwogICAg
ICAgICAgfQogICAgICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgICAgICByZXR1cm4gX19maXJz
dDsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCkgewog
ICAgICAgICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkKICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICsrX19pOwogICAgICAgICAgICB9CiAgICAgICAgICAg
IF9fZmlyc3QgPSBfX2k7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBfX2xh
c3Q7CiAgICAgIH0KICAgIH0KIyA2OTcgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2lu
Y2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9G
b3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBfRm9yd2FyZEl0ZXIyCiAg
ICBzd2FwX3JhbmdlcyhfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFz
dDEsCiAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyKQogICAgewoKICAgICAK
ICAgICAKICAgICAKCgogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7
ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QxLCBfX2Zp
cnN0Mik7CiAgICAgIHJldHVybiBfX2ZpcnN0MjsKICAgIH0KIyA3MzIgIi91c3IvbG9jYWwvcHJv
ZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFt
ZSBfVW5hcnlPcGVyYXRpb24+CiAgICBfT3V0cHV0SXRlcgogICAgdHJhbnNmb3JtKF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgX091dHB1dEl0ZXIg
X19yZXN1bHQsIF9VbmFyeU9wZXJhdGlvbiBfX3VuYXJ5X29wKQogICAgewoKICAgICAKICAgICAK
CgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0
KQogICAgICAgICpfX3Jlc3VsdCA9IF9fdW5hcnlfb3AoKl9fZmlyc3QpOwogICAgICByZXR1cm4g
X19yZXN1bHQ7CiAgICB9CiMgNzY1ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNs
dWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w
dXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAg
ICAgICAgIHR5cGVuYW1lIF9CaW5hcnlPcGVyYXRpb24+CiAgICBfT3V0cHV0SXRlcgogICAgdHJh
bnNmb3JtKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAg
ICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAg
ICAgICAgICBfQmluYXJ5T3BlcmF0aW9uIF9fYmluYXJ5X29wKQogICAgewoKICAgICAKICAgICAK
ICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCAr
K19fZmlyc3QyLCArK19fcmVzdWx0KQogICAgICAgICpfX3Jlc3VsdCA9IF9fYmluYXJ5X29wKCpf
X2ZpcnN0MSwgKl9fZmlyc3QyKTsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDc5NiAi
L3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxf
YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+
CiAgICB2b2lkCiAgICByZXBsYWNlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg
X19sYXN0LAogICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25zdCBfVHAmIF9f
bmV3X3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2Zp
cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmICgqX19maXJzdCA9PSBfX29sZF92
YWx1ZSkKICAgICAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7CiAgICB9CiMgODI1ICIvdXNy
L2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNh
dGUsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIHJlcGxhY2VfaWYoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19w
cmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoK
ICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmIChf
X3ByZWQoKl9fZmlyc3QpKQogICAgICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsKICAgIH0K
IyA4NTYgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2Jp
dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l
IF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfT3V0cHV0SXRlcgogICAgcmVwbGFjZV9j
b3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX29s
ZF92YWx1ZSwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAg
IAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3Vs
dCkKICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdCA9PSBfX29sZF92YWx1ZSA/IF9fbmV3X3Zh
bHVlIDogKl9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA4ODggIi91c3Iv
bG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28u
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy
LCB0eXBlbmFtZSBfUHJlZGljYXRlLAogICAgICAgICAgIHR5cGVuYW1lIF9UcD4KICAgIF9PdXRw
dXRJdGVyCiAgICByZXBsYWNlX2NvcHlfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAg
ICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkK
ICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xh
c3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSBfX3ByZWQoKl9f
Zmlyc3QpID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0Owog
ICAgfQojIDkxOCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4y
LjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0
eXBlbmFtZSBfR2VuZXJhdG9yPgogICAgdm9pZAogICAgZ2VuZXJhdGUoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIF9HZW5lcmF0b3IgX19nZW4pCiAgICB7CgogICAg
IAogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAg
ICAgICAqX19maXJzdCA9IF9fZ2VuKCk7CiAgICB9CiMgOTQyICIvdXNyL2xvY2FsL3Byb2R1Y3Rz
L2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9HZW5lcmF0
b3I+CiAgICBfT3V0cHV0SXRlcgogICAgZ2VuZXJhdGVfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBf
U2l6ZSBfX24sIF9HZW5lcmF0b3IgX19nZW4pCiAgICB7CgogICAgIAoKCgogICAgICBmb3IgKCA7
IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3QgPSBfX2dlbigpOwog
ICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyA5NjkgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2Nj
LzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAg
ICBfT3V0cHV0SXRlcgogICAgcmVtb3ZlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBjb25zdCBf
VHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9f
Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCEoKl9fZmlyc3QgPT0gX192
YWx1ZSkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICAgICAgKytfX3Jl
c3VsdDsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyAxMDAzICIvdXNy
L2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRl
ciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9PdXRwdXRJdGVyCiAgICByZW1vdmVfY29weV9p
ZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAK
ICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0
KQogICAgICAgIGlmICghX19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAgICAgKl9fcmVzdWx0ID0g
Kl9fZmlyc3Q7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9f
cmVzdWx0OwogICAgfQojIDEwMzkgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1
ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3
YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICByZW1vdmUoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgY29uc3QgX1Rw
JiBfX3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgX19maXJzdCA9IGZp
bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlKTsKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9f
Zmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHkoKytfX2ksIF9fbGFzdCwgX19maXJz
dCwgX192YWx1ZSk7CiAgICB9CiMgMTA3MyAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEv
aW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBy
ZW1vdmVfaWYoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIF9f
Zmlyc3QgPSBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkKTsKICAgICAgX0ZvcndhcmRJ
dGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmly
c3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHlfaWYoKytfX2ks
IF9fbGFzdCwgX19maXJzdCwgX19wcmVkKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAg
X191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgb3V0
cHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICpfX3Jlc3Vs
dCA9IF9fdmFsdWU7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlm
ICghKF9fdmFsdWUgPT0gKl9fZmlyc3QpKSB7CiAgICAgICAgICBfX3ZhbHVlID0gKl9fZmlyc3Q7
CiAgICAgICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICAgICAgfQogICAgICByZXR1cm4g
KytfX3Jlc3VsdDsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg
dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaXF1ZV9jb3B5
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
IF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRv
cl90YWcpCiAgICB7CgogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgd2hpbGUgKCsr
X19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCEoKl9fcmVzdWx0ID09ICpfX2ZpcnN0KSkK
ICAgICAgICAgICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiArK19fcmVzdWx0
OwogICAgfQojIDExNDUgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysr
LzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIs
IHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICB1bmlxdWVf
Y29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfT3V0cHV0SXRlcj46Oml0ZXJhdG9y
X2NhdGVnb3J5IF9JdGVyVHlwZTsKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJu
IF9fcmVzdWx0OwogICAgICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9f
cmVzdWx0LCBfSXRlclR5cGUoKSk7CiAgICB9CiMgMTE3MCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9n
Y2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9CaW5h
cnlQcmVkaWNhdGU+CiAgICBfT3V0cHV0SXRlcgogICAgX191bmlxdWVfY29weShfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9w
cmVkLAogICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAK
CgoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBl
IF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgd2hp
bGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCFfX2JpbmFyeV9wcmVkKF9fdmFs
dWUsICpfX2ZpcnN0KSkgewogICAgICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAgICAg
KisrX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgICAgIH0KICAgICAgcmV0dXJuICsrX19yZXN1bHQ7
CiAgICB9CiMgMTE5OSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysv
My4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg
dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0Zv
cndhcmRJdGVyCiAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAg
ICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAg
ICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgoKCiAgICAgICpfX3Jlc3Vs
dCA9ICpfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBp
ZiAoIV9fYmluYXJ5X3ByZWQoKl9fcmVzdWx0LCAqX19maXJzdCkpICorK19fcmVzdWx0ID0gKl9f
Zmlyc3Q7CiAgICAgIHJldHVybiArK19fcmVzdWx0OwogICAgfQojIDEyMzIgIi91c3IvbG9jYWwv
cHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBl
bmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICB1bmlxdWVf
Y29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRl
IF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9PdXRwdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJU
eXBlOwoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgICAg
IHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwKX19yZXN1bHQsIF9fYmluYXJ5
X3ByZWQsIF9JdGVyVHlwZSgpKTsKICAgIH0KIyAxMjYzICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2dj
Yy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVuaXF1ZShfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgICAgIAogICAg
ICAgICAKCgogICAgICAgICAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19sYXN0
KTsKICAgICAgICAgIHJldHVybiB1bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3Qp
OwogICAgfQojIDEyOTAgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysr
LzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl
ciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgdW5pcXVl
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgIF9C
aW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAg
IF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCwgX19iaW5hcnlfcHJlZCk7
CiAgICAgIHJldHVybiB1bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3QsIF9fYmlu
YXJ5X3ByZWQpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h
bEl0ZXI+CiAgICB2b2lkCiAgICBfX3JldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3Qs
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYmlk
aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgICAgICB3aGlsZSAodHJ1ZSkKICAg
ICAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0IHx8IF9fZmlyc3QgPT0gLS1fX2xhc3QpCiAg
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICBpdGVyX3N3YXAoX19maXJzdCsrLCBfX2xhc3QpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9fcmV2ZXJzZShfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgICAg
ICB3aGlsZSAoX19maXJzdCA8IF9fbGFzdCkKICAgICAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3Qr
KywgLS1fX2xhc3QpOwogICAgfQojIDEzNDkgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4x
L2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICByZXZlcnNlKF9CaWRpcmVj
dGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQogICAgewoKICAg
ICAgICAgCgogICAgICAgICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9j
YXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CiMgMTM3NCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2Mv
My4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRw
dXRJdGVyCiAgICByZXZlcnNlX2NvcHkoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRp
cmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1
dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0
ICE9IF9fbGFzdCkgewogICAgICAgIC0tX19sYXN0OwogICAgICAgICpfX3Jlc3VsdCA9ICpfX2xh
c3Q7CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAg
ICB9CiMgMTM5OSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4y
LjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0V1Y2xpZGVhblJpbmdF
bGVtZW50PgogICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50CiAgICBfX2djZChfRXVjbGlkZWFuUmlu
Z0VsZW1lbnQgX19tLCBfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19uKQogICAgewogICAgICB3aGls
ZSAoX19uICE9IDApIHsKICAgICAgICBfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX190ID0gX19tICUg
X19uOwogICAgICAgIF9fbSA9IF9fbjsKICAgICAgICBfX24gPSBfX3Q7CiAgICAgIH0KICAgICAg
cmV0dXJuIF9fbTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+
CiAgICB2b2lkCiAgICBfX3JvdGF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAg
IF9Gb3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmICgoX19m
aXJzdCA9PSBfX21pZGRsZSkgfHwgKF9fbGFzdCA9PSBfX21pZGRsZSkpCiAgICAgICAgcmV0dXJu
OwoKICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyID0gX19taWRkbGU7CiAgICAgIGRvIHsKICAg
ICAgICBzd2FwKCpfX2ZpcnN0KyssICpfX2ZpcnN0MisrKTsKICAgICAgICBpZiAoX19maXJzdCA9
PSBfX21pZGRsZSkKICAgICAgICAgIF9fbWlkZGxlID0gX19maXJzdDI7CiAgICAgIH0gd2hpbGUg
KF9fZmlyc3QyICE9IF9fbGFzdCk7CgogICAgICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwoKICAgICAg
d2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCkgewogICAgICAgIHN3YXAoKl9fZmlyc3QrKywgKl9f
Zmlyc3QyKyspOwogICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgICAgICAgX19t
aWRkbGUgPSBfX2ZpcnN0MjsKICAgICAgICBlbHNlIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QpCiAg
ICAgICAgICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgdm9pZAogICAgX19yb3RhdGUoX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19taWRkbGUsCiAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgogICAgICBp
ZiAoKF9fZmlyc3QgPT0gX19taWRkbGUpIHx8IChfX2xhc3QgPT0gX19taWRkbGUpKQogICAgICAg
IHJldHVybjsKCiAgICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25h
bF9pdGVyYXRvcl90YWcoKSk7CiAgICAgIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRp
cmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbWlk
ZGxlICYmIF9fbWlkZGxlICE9IF9fbGFzdCkKICAgICAgICBzd2FwICgqX19maXJzdCsrLCAqLS1f
X2xhc3QpOwoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpIHsKICAgICAgICBfX3JldmVy
c2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICAg
IH0KICAgICAgZWxzZSB7CiAgICAgICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRp
cmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19yb3RhdGUoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlk
ZGxlLAogICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAg
cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAoKCiAgICAgIGlmICgoX19m
aXJzdCA9PSBfX21pZGRsZSkgfHwgKF9fbGFzdCA9PSBfX21pZGRsZSkpCiAgICAgICAgcmV0dXJu
OwoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0
ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsK
CiAgICAgIF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2Ug
X19rID0gX19taWRkbGUgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2UgX19sID0gX19uIC0gX19r
OwoKICAgICAgaWYgKF9fayA9PSBfX2wpIHsKICAgICAgICBzd2FwX3JhbmdlcyhfX2ZpcnN0LCBf
X21pZGRsZSwgX19taWRkbGUpOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgX0Rpc3Rh
bmNlIF9fZCA9IF9fZ2NkKF9fbiwgX19rKTsKCiAgICAgIGZvciAoX0Rpc3RhbmNlIF9faSA9IDA7
IF9faSA8IF9fZDsgX19pKyspIHsKICAgICAgICBfVmFsdWVUeXBlIF9fdG1wID0gKl9fZmlyc3Q7
CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19wID0gX19maXJzdDsKCiAgICAgICAgaWYgKF9f
ayA8IF9fbCkgewogICAgICAgICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19sL19f
ZDsgX19qKyspIHsKICAgICAgICAgICAgaWYgKF9fcCA+IF9fZmlyc3QgKyBfX2wpIHsKICAgICAg
ICAgICAgICAqX19wID0gKihfX3AgLSBfX2wpOwogICAgICAgICAgICAgIF9fcCAtPSBfX2w7CiAg
ICAgICAgICAgIH0KCiAgICAgICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAgICAgICAgICAg
IF9fcCArPSBfX2s7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBlbHNlIHsKICAgICAg
ICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9fay9fX2QgLSAxOyBfX2ogKyspIHsK
ICAgICAgICAgICAgaWYgKF9fcCA8IF9fbGFzdCAtIF9faykgewogICAgICAgICAgICAgICpfX3Ag
PSAqKF9fcCArIF9fayk7CiAgICAgICAgICAgICAgX19wICs9IF9fazsKICAgICAgICAgICAgfQoK
ICAgICAgICAgICAgKl9fcCA9ICogKF9fcCAtIF9fbCk7CiAgICAgICAgICAgIF9fcCAtPSBfX2w7
CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAqX19wID0gX190bXA7CiAgICAgICAgKytf
X2ZpcnN0OwogICAgICB9CiAgICB9CiMgMTU2MSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4y
LjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHJvdGF0ZShfRm9yd2FyZEl0ZXIg
X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfRm9yd2FyZEl0ZXIgX19sYXN0KQogICAg
ewoKICAgICAKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJk
SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyVHlwZTsKICAgICAgX19yb3RhdGUoX19maXJz
dCwgX19taWRkbGUsIF9fbGFzdCwgX0l0ZXJUeXBlKCkpOwogICAgfQojIDE1ODkgIi91c3IvbG9j
YWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+
CiAgICBfT3V0cHV0SXRlcgogICAgcm90YXRlX2NvcHkoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G
b3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
IF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKCgogICAgICByZXR1cm4g
Y29weShfX2ZpcnN0LCBfX21pZGRsZSwgY29weShfX21pZGRsZSwgX19sYXN0LCBfX3Jlc3VsdCkp
OwogICAgfQojIDE2MTIgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysr
LzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9EaXN0YW5jZT4K
ICAgIGlubGluZSBfRGlzdGFuY2UKICAgIF9fcmFuZG9tX251bWJlcihfRGlzdGFuY2UgX19uKQog
ICAgewoKICAgICAgcmV0dXJuIGxyYW5kNDgoKSAlIF9fbjsKCgoKICAgIH0KIyAxNjM0ICIvdXNy
L2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2
b2lkCiAgICByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t
QWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9f
bGFzdCkgcmV0dXJuOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Qg
KyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0
ICsgX19yYW5kb21fbnVtYmVyKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKICAgIH0KIyAxNjYwICIv
dXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9h
bGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUg
X1JhbmRvbU51bWJlckdlbmVyYXRvcj4KICAgIHZvaWQKICAgIHJhbmRvbV9zaHVmZmxlKF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKICAgIHsKCiAgICAgCgoK
ICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgICAgIGZvciAoX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAg
IGl0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBfX3JhbmQoKF9faSAtIF9fZmlyc3QpICsgMSkpOwog
ICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9Q
cmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBf
X3ByZWQsCiAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAg
aWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgICAgIHdoaWxlIChfX3By
ZWQoKl9fZmlyc3QpKQogICAgICAgIGlmICgrK19fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19m
aXJzdDsKCiAgICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwoKICAgICAgd2hpbGUg
KCsrX19uZXh0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoX19wcmVkKCpfX25leHQpKSB7CiAgICAg
ICAgICBzd2FwKCpfX2ZpcnN0LCAqX19uZXh0KTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAg
ICB9CgogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIKICAgIF9fcGFydGl0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQs
CiAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAg
d2hpbGUgKHRydWUpIHsKICAgICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICAgIGlmIChfX2ZpcnN0
ID09IF9fbGFzdCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlIGlm
IChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBlbHNl
CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIC0tX19sYXN0OwogICAgICAgIHdoaWxlICh0cnVl
KQogICAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgICAgICByZXR1cm4gX19m
aXJzdDsKICAgICAgICAgIGVsc2UgaWYgKCFfX3ByZWQoKl9fbGFzdCkpCiAgICAgICAgICAgIC0t
X19sYXN0OwogICAgICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsKICAgICAgICBpdGVyX3N3
YXAoX19maXJzdCwgX19sYXN0KTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KIyAx
NzQ4ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l
IF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBwYXJ0aXRpb24oX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgX1ByZWRp
Y2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIHJldHVybiBfX3BhcnRpdGlv
bihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7
CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUg
X1ByZWRpY2F0ZSwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX2lu
cGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVk
LCBfRGlzdGFuY2UgX19sZW4pCiAgICB7CiAgICAgIGlmIChfX2xlbiA9PSAxKQogICAgICAgIHJl
dHVybiBfX3ByZWQoKl9fZmlyc3QpID8gX19sYXN0IDogX19maXJzdDsKICAgICAgX0ZvcndhcmRJ
dGVyIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19sZW4gLyAy
KTsKICAgICAgX0ZvcndhcmRJdGVyIF9fYmVnaW4gPSBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlv
bihfX2ZpcnN0LCBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLyAyKTsKICAgICAgX0ZvcndhcmRJdGVy
IF9fZW5kID0gX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19taWRkbGUsIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmVk
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2xlbiAtIF9fbGVuIC8gMik7CiAgICAgIHJvdGF0ZShfX2JlZ2luLCBfX21pZGRsZSwgX19lbmQp
OwogICAgICBhZHZhbmNlKF9fYmVnaW4sIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2VuZCkpOwogICAg
ICByZXR1cm4gX19iZWdpbjsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy
ZEl0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLAogICAgICAgICAg
IHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgX19zdGFibGVfcGFydGl0
aW9uX2FkYXB0aXZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFu
Y2UgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZm
ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3Np
emUpCiAgICB7CiAgICAgIGlmIChfX2xlbiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX0Zv
cndhcmRJdGVyIF9fcmVzdWx0MSA9IF9fZmlyc3Q7CiAgICAgICAgX1BvaW50ZXIgX19yZXN1bHQy
ID0gX19idWZmZXI7CiAgICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCA7ICsrX19maXJz
dCkKICAgICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSB7CiAgICAgICAgICAgICpfX3Jlc3Vs
dDEgPSAqX19maXJzdDsKICAgICAgICAgICAgKytfX3Jlc3VsdDE7CiAgICAgICAgICB9CiAgICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgKl9fcmVzdWx0MiA9ICpfX2ZpcnN0OwogICAgICAgICAg
ICArK19fcmVzdWx0MjsKICAgICAgICAgIH0KICAgICAgICBjb3B5KF9fYnVmZmVyLCBfX3Jlc3Vs
dDIsIF9fcmVzdWx0MSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0MTsKICAgICAgfQogICAgICBl
bHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFk
dmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fYmVnaW4g
PSBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmVk
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fbGVuIC8gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgX0Zvcndh
cmRJdGVyIF9fZW5kID0gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKCBfX21pZGRsZSwgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAvIDIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZlciwgX19idWZmZXJfc2l6
ZSk7CiAgICAgICAgcm90YXRlKF9fYmVnaW4sIF9fbWlkZGxlLCBfX2VuZCk7CiAgICAgICAgYWR2
YW5jZShfX2JlZ2luLCBkaXN0YW5jZShfX21pZGRsZSwgX19lbmQpKTsKICAgICAgICByZXR1cm4g
X19iZWdpbjsKICAgICAgfQogICAgfQojIDE4NDggIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMu
Mi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgog
ICAgc3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAg
IAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19m
aXJzdDsKICAgICAgZWxzZQogICAgICB7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2Vf
dHlwZSBfRGlzdGFuY2VUeXBlOwoKICAgICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfRm9yd2FyZEl0
ZXIsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgaWYgKF9fYnVm
LnNpemUoKSA+IDApCiAgICAgICAgICByZXR1cm4gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZl
KF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRGlzdGFuY2VUeXBlKF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBf
X2J1Zi5zaXplKCkpOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBfX2lucGxhY2Vfc3Rh
YmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2VUeXBlKF9fYnVmLnJlcXVlc3RlZF9z
aXplKCkpKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B
Y2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgX191bmd1
YXJkZWRfcGFydGl0aW9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAgX19waXZvdCkKICAgIHsK
ICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICB3aGlsZSAoKl9fZmlyc3QgPCBfX3Bpdm90KQog
ICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgIC0tX19sYXN0OwogICAgICAgIHdoaWxlIChfX3Bp
dm90IDwgKl9fbGFzdCkKICAgICAgICAgIC0tX19sYXN0OwogICAgICAgIGlmICghKF9fZmlyc3Qg
PCBfX2xhc3QpKQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgaXRlcl9zd2FwKF9f
Zmlyc3QsIF9fbGFzdCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9CgoKCgoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5h
bWUgX0NvbXBhcmU+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgX191bmd1YXJkZWRfcGFydGl0
aW9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAgX19waXZvdCwgX0NvbXBhcmUgX19jb21wKQog
ICAgewogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIHdoaWxlIChfX2NvbXAoKl9fZmlyc3Qs
IF9fcGl2b3QpKQogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgIC0tX19sYXN0OwogICAgICAg
IHdoaWxlIChfX2NvbXAoX19waXZvdCwgKl9fbGFzdCkpCiAgICAgICAgICAtLV9fbGFzdDsKICAg
ICAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKICAgICAgICAgIHJldHVybiBfX2ZpcnN0Owog
ICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICsrX19maXJzdDsKICAg
ICAgfQogICAgfQojIDE5MjkgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUv
YysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIGVudW0geyBfTV90aHJlc2hvbGQgPSAxNiB9
OwoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBf
VHA+CiAgICB2b2lkCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwgX1RwIF9fdmFsKQogICAgewogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX25l
eHQgPSBfX2xhc3Q7CiAgICAgIC0tX19uZXh0OwogICAgICB3aGlsZSAoX192YWwgPCAqX19uZXh0
KSB7CiAgICAgICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICAgICAgX19sYXN0ID0gX19uZXh0Owog
ICAgICAgIC0tX19uZXh0OwogICAgICB9CiAgICAgICpfX2xhc3QgPSBfX3ZhbDsKICAgIH0KCgoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwLCB0
eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAg
IHsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogICAgICAtLV9fbmV4
dDsKICAgICAgd2hpbGUgKF9fY29tcChfX3ZhbCwgKl9fbmV4dCkpIHsKICAgICAgICAqX19sYXN0
ID0gKl9fbmV4dDsKICAgICAgICBfX2xhc3QgPSBfX25leHQ7CiAgICAgICAgLS1fX25leHQ7CiAg
ICAgIH0KICAgICAgKl9fbGFzdCA9IF9fdmFsOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19pbnNlcnRpb25fc29ydChfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAg
ICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwoKICAgICAgZm9yIChfUmFuZG9tQWNj
ZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgIHsK
ICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1
ZV90eXBlIF9fdmFsID0gKl9faTsKICAgICAgICBpZiAoX192YWwgPCAqX19maXJzdCkgewogICAg
ICAgICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2ksIF9faSArIDEpOwogICAgICAgICAgKl9f
Zmlyc3QgPSBfX3ZhbDsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX191bmd1YXJk
ZWRfbGluZWFyX2luc2VydChfX2ksIF9fdmFsKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZv
aWQKICAgIF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAp
CiAgICB7CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwoKICAgICAgZm9yIChf
UmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kp
CiAgICAgIHsKICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0
ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsID0gKl9faTsKICAgICAgICBpZiAoX19jb21wKF9fdmFsLCAq
X19maXJzdCkpIHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19pLCBfX2kgKyAx
KTsKICAgICAgICAgICpfX2ZpcnN0ID0gX192YWw7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAg
ICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfX3ZhbCwgX19jb21wKTsKICAg
ICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgog
ICAgaW5saW5lIHZvaWQKICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90
eXBlIF9WYWx1ZVR5cGU7CgogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmly
c3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNl
cnQoX19pLCBfVmFsdWVUeXBlKCpfX2kpKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAog
ICAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIGZv
ciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kp
CiAgICAgICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9WYWx1ZVR5cGUoKl9faSks
IF9fY29tcCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0
ZXI+CiAgICB2b2lkCiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFz
dCAtIF9fZmlyc3QgPiBfTV90aHJlc2hvbGQpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9f
Zmlyc3QsIF9fZmlyc3QgKyBfTV90aHJlc2hvbGQpOwogICAgICAgIF9fdW5ndWFyZGVkX2luc2Vy
dGlvbl9zb3J0KF9fZmlyc3QgKyBfTV90aHJlc2hvbGQsIF9fbGFzdCk7CiAgICAgIH0KICAgICAg
ZWxzZQogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgIH0KCgoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBh
cmU+CiAgICB2b2lkCiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA+
IF9NX3RocmVzaG9sZCkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJz
dCArIF9NX3RocmVzaG9sZCwgX19jb21wKTsKICAgICAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25f
c29ydChfX2ZpcnN0ICsgX01fdGhyZXNob2xkLCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIH0KICAg
ICAgZWxzZQogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXAp
OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5lIF9TaXpl
CiAgICBfX2xnKF9TaXplIF9fbikKICAgIHsKICAgICAgX1NpemUgX19rOwogICAgICBmb3IgKF9f
ayA9IDA7IF9fbiAhPSAxOyBfX24gPj49IDEpICsrX19rOwogICAgICByZXR1cm4gX19rOwogICAg
fQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBf
U2l6ZT4KICAgIHZvaWQKICAgIF9faW50cm9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m
aXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfU2l6
ZSBfX2RlcHRoX2xpbWl0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIHdo
aWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAgICAgaWYgKF9fZGVw
dGhfbGltaXQgPT0gMCkgewogICAgICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwg
X19sYXN0KTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLS1fX2RlcHRoX2xp
bWl0OwogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFy
ZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2Zp
cnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICooX19sYXN0IC0gMSkpKSk7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19s
YXN0LCBfX2RlcHRoX2xpbWl0KTsKICAgICAgICBfX2xhc3QgPSBfX2N1dDsKICAgICAgfQogICAg
fQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBf
U2l6ZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2ludHJvc29ydF9sb29wKF9S
YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCwgX0NvbXBhcmUgX19jb21wKQogICAg
ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl
cj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0
ID4gX01fdGhyZXNob2xkKSB7CiAgICAgICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgewogICAg
ICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0LCBfX2NvbXApOwogICAg
ICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAtLV9fZGVwdGhfbGltaXQ7CiAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9u
KF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVU
eXBlKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3Qg
LSAxKSwgX19jb21wKSksCiAgICAgICAgICAgX19jb21wKTsKICAgICAgICBfX2ludHJvc29ydF9s
b29wKF9fY3V0LCBfX2xhc3QsIF9fZGVwdGhfbGltaXQsIF9fY29tcCk7CiAgICAgICAgX19sYXN0
ID0gX19jdXQ7CiAgICAgIH0KICAgIH0KIyAyMTY2ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8z
LjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBzb3J0KF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1
ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAoX19maXJzdCAhPSBf
X2xhc3QpIHsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19sZyhf
X2xhc3QgLSBfX2ZpcnN0KSAqIDIpOwogICAgICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19m
aXJzdCwgX19sYXN0KTsKICAgICAgfQogICAgfQojIDIxOTcgIi91c3IvbG9jYWwvcHJvZHVjdHMv
Z2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGlu
ZSB2b2lkCiAgICBzb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlw
ZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAg
IF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2xnKF9fbGFzdCAtIF9fZmlyc3Qp
ICogMiwgX19jb21wKTsKICAgICAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9f
bGFzdCwgX19jb21wKTsKICAgICAgfQogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
UmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAg
ICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMTUpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0
KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KSAvIDI7CiAg
ICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgIF9faW5w
bGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwgX19sYXN0KTsKICAgICAgX19tZXJnZV93aXRob3V0
X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fbWlkZGxlIC0gX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2xhc3QgLSBfX21pZGRsZSk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv
bUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19pbnBsYWNlX3N0
YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAg
ICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMTUpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0
KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3Qp
IC8gMjsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2Nv
bXApOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9fbGFzdCwgX19jb21w
KTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlIC0gX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2xhc3QgLSBfX21pZGRsZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlcjEsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMiwKICAgICAgICAgICB0eXBl
bmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBfX21lcmdlX3NvcnRfbG9vcChfUmFuZG9tQWNj
ZXNzSXRlcjEgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9z
aXplKQogICAgewogICAgICBfRGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsK
CiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApIHsKICAgICAgICBf
X3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdvX3N0
ZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCk7CiAgICAgICAgX19maXJzdCAr
PSBfX3R3b19zdGVwOwogICAgICB9CgogICAgICBfX3N0ZXBfc2l6ZSA9IG1pbihfRGlzdGFuY2Uo
X19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsKICAgICAgbWVyZ2UoX19maXJzdCwgX19m
aXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAgICAg
ICAgICAgX19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz
SXRlcjEsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBf
RGlzdGFuY2UsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19tZXJnZV9zb3J0X2xv
b3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIgX19yZXN1bHQsIF9EaXN0
YW5jZSBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkK
ICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7CgogICAg
ICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7CiAgICAgICAgX19yZXN1
bHQgPSBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3R3b19zdGVwLAog
ICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbXApOwogICAgICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsKICAgICAgfQogICAgICBf
X3N0ZXBfc2l6ZSA9IG1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXpl
KTsKCiAgICAgIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICAg
ICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3QsCiAgICAgICAgICAgIF9fcmVzdWx0LAog
ICAgICAgICAgICBfX2NvbXApOwogICAgfQoKICBlbnVtIHsgX01fY2h1bmtfc2l6ZSA9IDcgfTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9EaXN0YW5j
ZT4KICAgIHZvaWQKICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBfRGlzdGFuY2UgX19jaHVua19zaXplKQogICAgewogICAgICB3aGlsZSAoX19sYXN0IC0g
X19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmly
c3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUpOwogICAgICAgIF9fZmlyc3QgKz0gX19jaHVua19z
aXplOwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9EaXN0
YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2NodW5rX2luc2VydGlvbl9z
b3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSwgX0NvbXBh
cmUgX19jb21wKQogICAgewogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5r
X3NpemUpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2No
dW5rX3NpemUsIF9fY29tcCk7CiAgICAgICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CiAgICAg
IH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRl
cj4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0
YW5jZTsKCiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9Q
b2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOwoKICAgICAgX0Rpc3RhbmNl
IF9fc3RlcF9zaXplID0gX01fY2h1bmtfc2l6ZTsKICAgICAgX19jaHVua19pbnNlcnRpb25fc29y
dChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXplKTsKCiAgICAgIHdoaWxlIChfX3N0ZXBfc2l6
ZSA8IF9fbGVuKSB7CiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBf
X2J1ZmZlciwgX19zdGVwX3NpemUpOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAgICAg
X19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3Rl
cF9zaXplKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICB9CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5h
bWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfQ29tcGFyZSBfX2NvbXApCiAg
ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ
dGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKCiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9
IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZl
ciArIF9fbGVuOwoKICAgICAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX01fY2h1bmtfc2l6ZTsK
ICAgICAgX19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXpl
LCBfX2NvbXApOwoKICAgICAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsKICAgICAgICBf
X21lcmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSwg
X19jb21wKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICAgIF9fbWVyZ2Vfc29ydF9s
b29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6ZSwgX19jb21w
KTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX0Rp
c3RhbmNlPgogICAgdm9pZAogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKICAg
IHsKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAxKSAvIDI7CiAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOwogICAgICBp
ZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2
ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAgIF9f
c3RhYmxlX3NvcnRfYWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fYnVmZmVy
X3NpemUpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1
ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgIF9fbWVyZ2Vfc29ydF93
aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAgIH0KICAgICAgX19t
ZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRk
bGUgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0g
X19taWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX0Rp
c3RhbmNlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19zdGFi
bGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVy
LCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Nv
bXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX19sZW4gPSAoX19sYXN0IC0gX19m
aXJzdCArIDEpIC8gMjsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0
ICsgX19sZW47CiAgICAgIGlmIChfX2xlbiA+IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICBfX3N0
YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJf
c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgX19z
dGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJf
c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgIH0KICAg
ICAgZWxzZSB7CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX2J1ZmZlciwgX19jb21wKTsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIo
X19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fY29tcCk7CiAgICAgIH0KICAgICAgX19tZXJn
ZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUg
LSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0gX19t
aWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbXApOwogICAgfQojIDI0MzAgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1
ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5k
b21BY2Nlc3NJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90
eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S
YW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAK
CiAgICAgCgogICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwgX1ZhbHVl
VHlwZT4gYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChidWYuYmVnaW4oKSA9PSAwKQog
ICAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBlbHNl
CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdp
bigpLCBfRGlzdGFuY2VUeXBlKGJ1Zi5zaXplKCkpKTsKICAgIH0KIyAyNDY2ICIvdXNyL2xvY2Fs
L3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+
CiAgICBpbmxpbmUgdm9pZAogICAgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFs
dWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAg
ICAgCgogICAgIAoKCiAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBf
VmFsdWVUeXBlPiBidWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgaWYgKGJ1Zi5iZWdpbigpID09
IDApCiAgICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21w
KTsKICAgICAgZWxzZQogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19s
YXN0LCBidWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShidWYuc2l6ZSgpKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CiMgMjUwMiAiL3Vzci9sb2NhbC9wcm9k
dWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBwYXJ0aWFsX3Nv
cnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B
Y2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAg
bWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRl
ciBfX2kgPSBfX21pZGRsZTsgX19pIDwgX19sYXN0OyArK19faSkKICAgICAgICBpZiAoKl9faSA8
ICpfX2ZpcnN0KQogICAgICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBf
VmFsdWVUeXBlKCpfX2kpKTsKICAgICAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAg
IH0KIyAyNTQwICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIu
MS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl
ciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21p
ZGRsZSwKICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsK
CgogICAgIAoKICAgICAKCgogICAgICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29t
cCk7CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9f
bGFzdDsgKytfX2kpCiAgICAgICAgaWYgKF9fY29tcCgqX19pLCAqX19maXJzdCkpCiAgICAgICAg
ICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9WYWx1ZVR5cGUoKl9faSksIF9f
Y29tcCk7CiAgICAgIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKICAgIH0K
IyAyNTc5ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9i
aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt
ZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBwYXJ0aWFsX3Nv
cnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0KQogICAgewogICAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBf
SW5wdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S
YW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfT3V0cHV0VmFsdWVUeXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVu
Y2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCgogICAgICBp
ZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkgcmV0dXJuIF9fcmVzdWx0X2xhc3Q7
CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3JlYWxfbGFzdCA9IF9fcmVzdWx0X2Zp
cnN0OwogICAgICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3Qg
IT0gX19yZXN1bHRfbGFzdCkgewogICAgICAgICpfX3Jlc3VsdF9yZWFsX2xhc3QgPSAqX19maXJz
dDsKICAgICAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAg
IH0KICAgICAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwog
ICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBpZiAoKl9fZmlyc3QgPCAq
X19yZXN1bHRfZmlyc3QpCiAgICAgICAgICBfX2FkanVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBf
RGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2VUeXBlKF9f
cmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAg
ICAgX0lucHV0VmFsdWVUeXBlKCpfX2ZpcnN0KSk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9
CiAgICAgIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0KTsKICAg
ICAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKICAgIH0KIyAyNjMzICIvdXNyL2xvY2FsL3By
b2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwg
dHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgcGFydGlhbF9zb3J0
X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgX0lucHV0VmFsdWVUeXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZh
bHVlX3R5cGUgX091dHB1dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlw
ZTsKCgogICAgIAogICAgIAogICAgIAogICAgIAoKCiAgICAgIGlmIChfX3Jlc3VsdF9maXJzdCA9
PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFzdDsKICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgICAgIHdoaWxlKF9f
Zmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jlc3VsdF9sYXN0KSB7
CiAgICAgICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAgICAgICsrX19yZXN1
bHRfcmVhbF9sYXN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgICBtYWtlX2hlYXAo
X19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsKICAgICAgd2hpbGUg
KF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVz
dWx0X2ZpcnN0KSkKICAgICAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0
YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19yZXN1
bHRfcmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICBf
SW5wdXRWYWx1ZVR5cGUoKl9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXAp
OwogICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgICBzb3J0X2hlYXAoX19yZXN1bHRfZmly
c3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsKICAgICAgcmV0dXJuIF9fcmVzdWx0X3Jl
YWxfbGFzdDsKICAgIH0KIyAyNjg2ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNs
dWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu
ZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9W
YWx1ZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4g
MykgewogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFy
ZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2Zp
cnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICooX19sYXN0IC0gMSkpKSk7CiAgICAgICAgaWYgKF9fY3V0IDw9IF9fbnRoKQogICAgICAg
ICAgX19maXJzdCA9IF9fY3V0OwogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGFzdCA9IF9fY3V0
OwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgIH0K
IyAyNzI4ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9i
aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwg
dHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAg
ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBl
OwoKCiAgICAgCiAgICAgCgoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAzKSB7CiAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICAgICAgX191bmd1YXJkZWRfcGFy
dGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
VmFsdWVUeXBlKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihf
X2xhc3QgLSAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29tcCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7
CiAgICAgICAgaWYgKF9fY3V0IDw9IF9fbnRoKQogICAgICAgICAgX19maXJzdCA9IF9fY3V0Owog
ICAgICAgIGVsc2UKICAgICAgICAgIF9fbGFzdCA9IF9fY3V0OwogICAgICB9CiAgICAgIF9faW5z
ZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgfQojIDI3NjggIi91c3Iv
bG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28u
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAg
X0ZvcndhcmRJdGVyCiAgICBsb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh
cmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojpk
aWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgoKCgoKICAgICAKICAgICAKICAgICAKCiAg
ICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAg
ICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAg
ICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAg
ICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7
CiAgICAgICAgaWYgKCpfX21pZGRsZSA8IF9fdmFsKSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19t
aWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19o
YWxmIC0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7
CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgMjgxNiAiL3Vzci9sb2NhbC9w
cm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBsb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192
YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5
cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xl
biA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxm
OwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7
CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7
CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX19jb21wKCpf
X21pZGRsZSwgX192YWwpKSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAg
ICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAg
ICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgIH0KICAgICAg
cmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgMjg1NiAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4y
LjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVwcGVy
X2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBf
VHAmIF9fdmFsKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
Rm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFu
Y2VUeXBlOwoKCgogICAgIAogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9
IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwog
ICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAg
ICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAg
ICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX192YWwgPCAqX19t
aWRkbGUpCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAg
IF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVu
ID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gX19m
aXJzdDsKICAgIH0KIyAyOTAxICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRl
L2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy
ZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfRm9yd2FyZEl0ZXIK
ICAgIHVwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKQogICAg
ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2
YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAg
CiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19s
YXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21p
ZGRsZTsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+
PiAxOwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxl
LCBfX2hhbGYpOwogICAgICAgIGlmIChfX2NvbXAoX192YWwsICpfX21pZGRsZSkpCiAgICAgICAg
ICBfX2xlbiA9IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21p
ZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hh
bGYgLSAxOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAy
OTQ4ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l
IF9UcD4KICAgIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+CiAgICBlcXVhbF9yYW5n
ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBf
X3ZhbCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zvcndh
cmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlw
ZTsKCgoKICAgICAKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0
YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAg
X0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7CgogICAgICB3aGlsZSAoX19s
ZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9
IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAo
Kl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAg
ICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAg
ICAgIH0KICAgICAgICBlbHNlIGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKICAgICAgICAgIF9fbGVu
ID0gX19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQo
X19maXJzdCwgX19taWRkbGUsIF9fdmFsKTsKICAgICAgICAgIGFkdmFuY2UoX19maXJzdCwgX19s
ZW4pOwogICAgICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3Qs
IF9fdmFsKTsKICAgICAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVy
PihfX2xlZnQsIF9fcmlnaHQpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcGFpcjxf
Rm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7CiAgICB9CiMgMzAw
MyAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9z
dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBf
VHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRl
cj4KICAgIGVxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0LCBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQog
ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+
Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAg
ICAgCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19m
aXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJk
SXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkg
ewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0
OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9fY29tcCgq
X19taWRkbGUsIF9fdmFsKSkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAg
ICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAg
ICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgICAg
IF9fbGVuID0gX19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAgICAgX19sZWZ0ID0gbG93ZXJf
Ym91bmQoX19maXJzdCwgX19taWRkbGUsIF9fdmFsLCBfX2NvbXApOwogICAgICAgICAgYWR2YW5j
ZShfX2ZpcnN0LCBfX2xlbik7CiAgICAgICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21p
ZGRsZSwgX19maXJzdCwgX192YWwsIF9fY29tcCk7CiAgICAgICAgICByZXR1cm4gcGFpcjxfRm9y
d2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgICAgICB9CiAgICAg
IH0KICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3Qs
IF9fZmlyc3QpOwogICAgfQojIDMwNTIgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2lu
Y2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9G
b3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgYm9vbAogICAgYmluYXJ5X3NlYXJjaChfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
Y29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKCgogICAgIAogICAgIAoKICAgICAKCiAgICAgIF9Gb3J3
YXJkSXRlciBfX2kgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKICAgICAg
cmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIShfX3ZhbCA8ICpfX2kpOwogICAgfQojIDMwODMgIi91
c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2Fs
Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0
eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIGJpbmFyeV9zZWFyY2goX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIGNvbnN0IF9U
cCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAg
ICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFs
LCBfX2NvbXApOwogICAgICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhX19jb21wKF9fdmFsLCAq
X19pKTsKICAgIH0KIyAzMTE1ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRl
L2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ
dGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091
dHB1dEl0ZXIKICAgIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xh
c3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIs
CiAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAg
CgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19m
aXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsK
ICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAg
ICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwog
ICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAg
fQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19s
YXN0MSwgX19yZXN1bHQpKTsKICAgIH0KIyAzMTY2ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8z
LjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJ
dGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIG1l
cmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAg
X0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICBfT3V0
cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAg
ICAKCgogICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYg
X19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19m
aXJzdDEpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19f
Zmlyc3QyOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpf
X2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgfQogICAgICAgICsrX19yZXN1
bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19m
aXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBf
X21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIpCiAgICB7
CiAgICAgIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKICAgICAgICByZXR1cm47CiAg
ICAgIGlmIChfX2xlbjEgKyBfX2xlbjIgPT0gMikgewogICAgICAgIGlmICgqX19taWRkbGUgPCAq
X19maXJzdCkKICAgICAgICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUpOwogICAg
ICAgIHJldHVybjsKICAgICAgfQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQg
PSBfX2ZpcnN0OwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRk
bGU7CiAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAgX0Rpc3RhbmNlIF9fbGVuMjIg
PSAwOwogICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgICAgX19sZW4xMSA9IF9fbGVu
MSAvIDI7CiAgICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAgICAgX19z
ZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0KTsK
ICAgICAgICBfX2xlbjIyID0gZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAg
IH0KICAgICAgZWxzZSB7CiAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgICAgYWR2
YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJf
Ym91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQpOwogICAgICAgIF9fbGVuMTEg
PSBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAgICAgIH0KICAgICAgcm90YXRlKF9f
Zmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fbmV3X21pZGRsZSA9IF9fZmlyc3RfY3V0OwogICAgICBhZHZhbmNlKF9fbmV3X21pZGRs
ZSwgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCkpOwogICAgICBfX21lcmdlX3dpdGhv
dXRfYnVmZmVyKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19sZW4xMSwgX19sZW4yMik7CiAgICAgIF9fbWVyZ2Vfd2l0aG91
dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIgLSBfX2xlbjIyKTsKICAg
IH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1l
IF9EaXN0YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX21lcmdlX3dpdGhv
dXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fbGVuMSA9PSAwIHx8
IF9fbGVuMiA9PSAwKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKF9fbGVuMSArIF9fbGVuMiA9
PSAyKSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUsICpfX2ZpcnN0KSkKICAgICAgICAg
ICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUpOwogICAgICAgIHJldHVybjsKICAgICAg
fQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICAgIF9EaXN0YW5j
ZSBfX2xlbjExID0gMDsKICAgICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgICBpZiAoX19s
ZW4xID4gX19sZW4yKSB7CiAgICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgICAgYWR2
YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJf
Ym91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2NvbXApOwogICAgICAgIF9f
bGVuMjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgfQogICAgICBl
bHNlIHsKICAgICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICBhZHZhbmNlKF9fc2Vj
b25kX2N1dCwgX19sZW4yMik7CiAgICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2Zp
cnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19jb21wKTsKICAgICAgICBfX2xlbjExID0g
ZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOwogICAgICB9CiAgICAgIHJvdGF0ZShfX2Zp
cnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX25ld19taWRkbGUgPSBfX2ZpcnN0X2N1dDsKICAgICAgYWR2YW5jZShfX25ld19taWRkbGUs
IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpKTsKICAgICAgX19tZXJnZV93aXRob3V0
X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fbGVuMTEsIF9fbGVuMjIsIF9fY29tcCk7CiAgICAgIF9fbWVyZ2Vf
d2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIgLSBfX2xlbjIy
LCBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFs
SXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUg
X0Rpc3RhbmNlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMQogICAgX19yb3RhdGVfYWRhcHRpdmUo
X0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyMSBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwg
X0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
cjIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6
ZSkKICAgIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlcl9lbmQ7CiAgICAgIGlm
IChfX2xlbjEgPiBfX2xlbjIgJiYgX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICBf
X2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgICAgICBj
b3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOwogICAgICAgIHJldHVybiBj
b3B5KF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fZmlyc3QpOwogICAgICB9CiAgICAgIGVsc2Ug
aWYgKF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19idWZmZXJfZW5kID0gY29w
eShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgIGNvcHkoX19taWRkbGUsIF9f
bGFzdCwgX19maXJzdCk7CiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19idWZmZXIsIF9f
YnVmZmVyX2VuZCwgX19sYXN0KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICByb3RhdGUo
X19maXJzdCwgX19taWRkbGUsIF9fbGFzdCk7CiAgICAgICAgYWR2YW5jZShfX2ZpcnN0LCBkaXN0
YW5jZShfX21pZGRsZSwgX19sYXN0KSk7CiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIH0K
ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBl
bmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaWRpcmVjdGlv
bmFsSXRlcjM+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzCiAgICBfX21lcmdlX2JhY2t3YXJkKF9C
aWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwK
ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGly
ZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIzIF9fcmVzdWx0KQogICAgewogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAg
ICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOwog
ICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gY29weV9iYWNrd2Fy
ZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDE7CiAgICAgIC0t
X19sYXN0MjsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBpZiAoKl9fbGFzdDIgPCAqX19s
YXN0MSkgewogICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsKICAgICAgICAgIGlmIChf
X2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2Zp
cnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgICAgICAtLV9fbGFzdDE7CiAgICAgICAg
fQogICAgICAgIGVsc2UgewogICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MjsKICAgICAg
ICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgICAgICByZXR1cm4gY29weV9iYWNr
d2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgICAgICAtLV9fbGFzdDI7
CiAgICAgICAgfQogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly
ZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0
eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIzLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9CaWRp
cmVjdGlvbmFsSXRlcjMKICAgIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBf
X2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFz
dDIsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19yZXN1bHQsCiAg
ICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fZmly
c3QxID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsIF9f
bGFzdDIsIF9fcmVzdWx0KTsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAg
cmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAg
LS1fX2xhc3QxOwogICAgICAtLV9fbGFzdDI7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAg
aWYgKF9fY29tcCgqX19sYXN0MiwgKl9fbGFzdDEpKSB7CiAgICAgICAgICAqLS1fX3Jlc3VsdCA9
ICpfX2xhc3QxOwogICAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgICAg
IHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19fbGFzdDIsIF9fcmVzdWx0KTsKICAg
ICAgICAgIC0tX19sYXN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqLS1f
X3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAg
ICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCArK19fbGFzdDEsIF9fcmVz
dWx0KTsKICAgICAgICAgIC0tX19sYXN0MjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCgoKCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5j
ZSwgdHlwZW5hbWUgX1BvaW50ZXI+CiAgICB2b2lkCiAgICBfX21lcmdlX2FkYXB0aXZlKF9CaWRp
cmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBf
X2xlbjIsCiAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2Ug
X19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAgICAgIGlmIChfX2xlbjEgPD0gX19sZW4yICYmIF9f
bGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2Vu
ZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgICAgICAgICAgbWVyZ2Uo
X19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCk7CiAgICAg
ICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAg
ICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9f
YnVmZmVyKTsKICAgICAgICAgICAgX19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwg
X19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICAgICAgICAgIH0KICAgICAgICAgIGVs
c2UgewogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0
OwogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7
CiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAgICAgICAgX0Rpc3RhbmNl
IF9fbGVuMjIgPSAwOwogICAgICAgICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgICAg
ICAgICAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgICAgICAgICAgICBhZHZhbmNl
KF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICAgICAgICAgICAgX19zZWNvbmRfY3V0ID0g
bG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0KTsKICAgICAgICAgICAg
ICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICAg
ICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICBfX2xlbjIyID0gX19s
ZW4yIC8gMjsKICAgICAgICAgICAgICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIp
OwogICAgICAgICAgICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9f
bWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IGRpc3Rh
bmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0KICAgICAgICAgICAgICAgICAgX19yb3RhdGVf
YWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMjIsIF9fYnVm
ZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZlcl9zaXplKTsK
ICAgICAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdf
bWlkZGxlLCBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9f
YnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX25l
d19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZl
cl9zaXplKTsKICAgICAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlk
aXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1BvaW50ZXIsCiAg
ICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX21lcmdlX2FkYXB0aXZl
KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0
YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlz
dGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w
KQogICAgewogICAgICAgICAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9IF9fYnVm
ZmVyX3NpemUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2Zp
cnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgICAgICBtZXJnZShfX2J1ZmZlciwgX19i
dWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0LCBfX2NvbXApOwogICAgICAgICAg
fQogICAgICAgICAgZWxzZSBpZiAoX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICAg
ICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZl
cik7CiAgICAgICAgICAgIF9fbWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fYnVm
ZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICAgICAg
ICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMjIg
PSAwOwogICAgICAgICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgICAgICAgICAgICAg
IF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgICAgICAgICAgICBhZHZhbmNlKF9fZmlyc3Rf
Y3V0LCBfX2xlbjExKTsKICAgICAgICAgICAgICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91
bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2NvbXApOwogICAgICAgICAgICAg
ICAgICBfX2xlbjIyID0gZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgICAg
ICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBfX2xl
bjIgLyAyOwogICAgICAgICAgICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7
CiAgICAgICAgICAgICAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19t
aWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICAgICAgICAgICAgICAgIF9fbGVuMTEg
PSBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAg
ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9CiAgICAgICAgICAgICAgICAgIF9f
cm90YXRlX2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIy
LCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWZmZXJf
c2l6ZSk7CiAgICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19maXJzdF9jdXQs
IF9fbmV3X21pZGRsZSwgX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xl
bjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsKICAgICAgICAgICAgX19tZXJn
ZV9hZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBf
X2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9f
YnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOwogICAgICAgICAgfQogICAgfQojIDM1MDgg
Ii91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3Rs
X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIHZv
aWQKICAgIGlucGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAg
ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAg
X1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGly
ZWN0aW9uYWxJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoK
CiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUgfHwgX19taWRkbGUg
PT0gX19sYXN0KQogICAgICAgIHJldHVybjsKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4xID0g
ZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUpOwogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMiA9
IGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpOwoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X0Jp
ZGlyZWN0aW9uYWxJdGVyLCBfVmFsdWVUeXBlPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAg
ICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIo
X19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIpOwogICAgICBlbHNlCiAg
ICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEs
IF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5j
ZVR5cGUoX19idWYuc2l6ZSgpKSk7CiAgICB9CiMgMzU1OSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9n
Y2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQK
ICAgIGlucGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAg
ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w
KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rp
b25hbEl0ZXI+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+OjpkaWZmZXJlbmNl
X3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgaWYg
KF9fZmlyc3QgPT0gX19taWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgICAgIHJldHVy
bjsKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4xID0gZGlzdGFuY2UoX19maXJzdCwgX19taWRk
bGUpOwogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xh
c3QpOwoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVmFsdWVU
eXBlPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoX19idWYuYmVnaW4oKSA9PSAw
KQogICAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFz
dCwgX19sZW4xLCBfX2xlbjIsIF9fY29tcCk7CiAgICAgIGVsc2UKICAgICAgICBfX21lcmdlX2Fk
YXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAg
ICAgICAgICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXpl
KCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBib29s
CiAgICBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwK
ICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQog
ICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAh
PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8
ICpfX2ZpcnN0MSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBlbHNlIGlmKCpfX2Zp
cnN0MSA8ICpfX2ZpcnN0MikKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZQogICAg
ICAgICAgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsKCiAgICAgIHJldHVybiBfX2ZpcnN0MiA9PSBf
X2xhc3QyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUg
X0lucHV0SXRlcjIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgaW5jbHVkZXMoX0lu
cHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5w
dXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwgX0NvbXBhcmUgX19jb21wKQog
ICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEg
IT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAoKl9f
Zmlyc3QyLCAqX19maXJzdDEpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGVsc2Ug
aWYoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAg
ICAgICAgZWxzZQogICAgICAgICAgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsKCiAgICAgIHJldHVy
biBfX2ZpcnN0MiA9PSBfX2xhc3QyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ
dGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091
dHB1dEl0ZXIKICAgIHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg
X19sYXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIg
X19sYXN0MiwKICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAg
CiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9f
bGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmICgqX19maXJzdDEgPCAq
X19maXJzdDIpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsr
X19maXJzdDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0
MSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0
MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJz
dDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9
CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0Miwg
X19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFt
ZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJ
dGVyCiAgICBzZXRfdW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz
dDEsCiAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFz
dDIsCiAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkK
ICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChf
X2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAo
X19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9f
Zmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAo
X19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9f
Zmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAg
ICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQog
ICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0
MSwgX19yZXN1bHQpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5
cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVy
CiAgICBzZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf
X2xhc3QxLAogICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0
SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQp
CiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChf
X2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpf
X2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZSBp
ZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICBl
bHNlIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJz
dDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9
CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0
SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAg
ICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfaW50ZXJzZWN0
aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAg
ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAg
ICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkK
ICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChf
X2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9f
Y29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAg
IGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICArK19fZmly
c3QyOwogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAg
ICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVz
dWx0OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRw
dXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9f
Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRl
cjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICBfT3V0
cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAg
CgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0
MikKICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICAgICAqX19yZXN1
bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3Vs
dDsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAg
ICAgICAgKytfX2ZpcnN0MjsKICAgICAgICBlbHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAg
ICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDEs
IF9fbGFzdDEsIF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
cjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAg
ICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfZGlmZmVyZW5jZShf
SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg
ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAg
ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAg
ICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAh
PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19m
aXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAg
ICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAg
ICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICAgICAgKytfX2Zp
cnN0MjsKICAgICAgICBlbHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19f
Zmlyc3QyOwogICAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9f
cmVzdWx0KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1l
IF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBz
ZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz
dDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAg
IAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFz
dDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAgICAgKl9fcmVz
dWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19yZXN1
bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewog
ICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAg
ICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKytf
X2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gY29w
eShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0
ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4K
ICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEg
X19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgog
ICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz
dDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkg
ewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsK
ICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29tcCgq
X19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsK
ICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAg
ICAgICBlbHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwog
ICAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJz
dDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9G
b3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAg
IGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRl
ciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQog
ICAgICAgIGlmICgqX19yZXN1bHQgPCAqX19maXJzdCkKICAgICAgICAgIF9fcmVzdWx0ID0gX19m
aXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBtYXhf
ZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlm
IChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBf
X3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAg
ICAgIGlmIChfX2NvbXAoKl9fcmVzdWx0LCAqX19maXJzdCkpIF9fcmVzdWx0ID0gX19maXJzdDsK
ICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy
ZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAo
X19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19y
ZXN1bHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAg
ICBpZiAoKl9fZmlyc3QgPCAqX19yZXN1bHQpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7
CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh
cmRJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWluX2VsZW1l
bnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAoX19m
aXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1
bHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBp
ZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHQpKQogICAgICAgICAgX19yZXN1bHQgPSBfX2Zp
cnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIGJvb2wKICAgIG5leHRfcGVybXV0YXRpb24oX0JpZGly
ZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7Cgog
ICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19f
aTsKICAgICAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBf
X2kgPSBfX2xhc3Q7CiAgICAgIC0tX19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKCpfX2kg
PCAqX19paSkgewogICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAg
ICAgICAgIHdoaWxlICghKCpfX2kgPCAqLS1fX2opKQogICAgICAgICAgICB7fQogICAgICAgICAg
aXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3Qp
IHsKICAgICAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly
ZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIG5leHRfcGVybXV0
YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAg
ICAgCgoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAg
ICAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBf
X2xhc3Q7CiAgICAgIC0tX19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyIF9faWkgPSBfX2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKF9fY29tcCgqX19p
LCAqX19paSkpIHsKICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAg
ICAgICAgICB3aGlsZSAoIV9fY29tcCgqX19pLCAqLS1fX2opKQogICAgICAgICAgICB7fQogICAg
ICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0
KTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9f
Zmlyc3QpIHsKICAgICAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0JpZGlyZWN0aW9uYWxJdGVyPgogICAgYm9vbAogICAgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKCiAg
ICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19p
OwogICAgICBpZiAoX19pID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9f
aSA9IF9fbGFzdDsKICAgICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoKl9faWkg
PCAqX19pKSB7CiAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAg
ICAgICAgd2hpbGUgKCEoKi0tX19qIDwgKl9faSkpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBp
dGVyX3N3YXAoX19pLCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkg
ewogICAgICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJl
Y3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgcHJldl9wZXJtdXRh
dGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAg
ICAKCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAg
ICBpZiAoX19pID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9f
bGFzdDsKICAgICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19paSA9IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoX19jb21wKCpfX2lp
LCAqX19pKSkgewogICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAg
ICAgICAgIHdoaWxlICghX19jb21wKCotLV9faiwgKl9faSkpCiAgICAgICAgICAgIHt9CiAgICAg
ICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3Qp
OwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19m
aXJzdCkgewogICAgICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9JbnB1dEl0ZXIKICAgIGZp
bmRfZmlyc3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAg
ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3Qy
KQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBf
X2xhc3QxOyArK19fZmlyc3QxKQogICAgICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9f
Zmlyc3QyOyBfX2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgICAgICBpZiAoKl9fZmly
c3QxID09ICpfX2l0ZXIpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgcmV0dXJu
IF9fbGFzdDE7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l
IF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9JbnB1dEl0ZXIK
ICAgIGZpbmRfZmlyc3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3Qx
LAogICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBf
X2xhc3QyLAogICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKICAgIHsK
CiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBf
X2xhc3QxOyArK19fZmlyc3QxKQogICAgICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9f
Zmlyc3QyOyBfX2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgICAgICBpZiAoX19jb21w
KCpfX2ZpcnN0MSwgKl9faXRlcikpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAg
cmV0dXJuIF9fbGFzdDE7CiAgICB9CiMgNDIwMSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4y
LjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIF9Gb3J3YXJkSXRl
cjEKICAgIF9fZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBf
X2xhc3QxLAogICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0
ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJk
X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAg
ICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcjEgX19y
ZXN1bHQgPSBfX2xhc3QxOwogICAgICAgIHdoaWxlICgxKSB7CiAgICAgICAgICBfRm9yd2FyZEl0
ZXIxIF9fbmV3X3Jlc3VsdAogICAgICAgICAgICA9IHNlYXJjaChfX2ZpcnN0MSwgX19sYXN0MSwg
X19maXJzdDIsIF9fbGFzdDIpOwogICAgICAgICAgaWYgKF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3Qx
KQogICAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgIF9fZmlyc3QxID0gX19uZXdf
cmVzdWx0OwogICAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBf
Rm9yd2FyZEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBf
Rm9yd2FyZEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3
YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0Miwg
X0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3Rh
ZywgZm9yd2FyZF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUg
X19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1
cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9
IF9fbGFzdDE7CiAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgIF9Gb3J3YXJkSXRlcjEgX19u
ZXdfcmVzdWx0CiAgICAgICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0
MiwgX19sYXN0MiwgX19jb21wKTsKICAgICAgICAgIGlmIChfX25ld19yZXN1bHQgPT0gX19sYXN0
MSkKICAgICAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgIF9fcmVzdWx0ID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICBfX2ZpcnN0MSA9IF9fbmV3
X3Jlc3VsdDsKICAgICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgIH0KICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5
cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjI+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxCiAgICBf
X2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0Miwg
X0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFs
X2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAog
ICAgIAoKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjE+
IF9SZXZJdGVyMTsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFs
SXRlcjI+IF9SZXZJdGVyMjsKCiAgICAgIF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAg
ICAgIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7CiAgICAgIF9SZXZJdGVyMSBfX3JyZXN1
bHQgPSBzZWFyY2goX1Jldkl0ZXIxKF9fbGFzdDEpLCBfX3JsYXN0MSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9fcmxhc3QyKTsKCiAgICAg
IGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAg
IGVsc2UgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1bHQu
YmFzZSgpOwogICAgICAgIGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0YW5jZShfX2ZpcnN0MiwgX19s
YXN0MikpOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0
ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9C
aWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAg
ICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcs
CiAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAgewoKICAgICAKICAg
ICAKCiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIxPiBf
UmV2SXRlcjE7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0
ZXIyPiBfUmV2SXRlcjI7CgogICAgICBfUmV2SXRlcjEgX19ybGFzdDEoX19maXJzdDEpOwogICAg
ICBfUmV2SXRlcjIgX19ybGFzdDIoX19maXJzdDIpOwogICAgICBfUmV2SXRlcjEgX19ycmVzdWx0
ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBfX3JsYXN0MiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwoKICAgICAgaWYgKF9fcnJlc3VsdCA9
PSBfX3JsYXN0MSkKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9IF9fcnJlc3VsdC5iYXNlKCk7CiAgICAgICAg
YWR2YW5jZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAgICAgICAg
cmV0dXJuIF9fcmVzdWx0OwogICAgICB9CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv
cndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIGlubGluZSBfRm9yd2FyZEl0
ZXIxCiAgICBmaW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9f
bGFzdDEsCiAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIy
IF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAgICByZXR1cm4gX19maW5k
X2VuZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAgICAgICAgICAgICAg
ICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAogICAgICAgICAgICAgICAg
ICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSk7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAg
ICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIxCiAg
ICBmaW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEs
CiAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFz
dDIsCiAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKICAgIHsKCiAgICAgCiAg
ICAgCiAgICAgCgoKCiAgICAgIHJldHVybiBfX2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBf
X2ZpcnN0MiwgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRl
Z29yeShfX2ZpcnN0MSksCiAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdv
cnkoX19maXJzdDIpLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgfQoKfQoj
IDcwICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9hbGdv
cml0aG0iIDIgMwojIDMxICJiaW1hcC5oIiAyCiMgMSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2Mv
My4yLjEvaW5jbHVkZS9jKysvMy4yLjEvZnVuY3Rpb25hbCIgMSAzCiMgNTMgIi91c3IvbG9jYWwv
cHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2Z1bmN0aW9uYWwiIDMKCgojIDEg
Ii91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3Rs
X2Z1bmN0aW9uLmgiIDEgMwojIDY0ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNs
dWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDEw
MSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9z
dGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4Kc3Ry
dWN0IHVuYXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcgYXJndW1lbnRfdHlwZTsKICB0eXBl
ZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNs
YXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgYmluYXJ5X2Z1bmN0aW9uIHsKICB0eXBl
ZGVmIF9BcmcxIGZpcnN0X2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfQXJnMiBzZWNvbmRfYXJn
dW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07CiMgMTI3ICIvdXNy
L2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9mdW5j
dGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBwbHVzIDogcHVibGljIGJpbmFy
eV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194
LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICsgX195OyB9Cn07CgoKdGVtcGxh
dGUgPGNsYXNzIF9UcD4Kc3RydWN0IG1pbnVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAs
X1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9f
eSkgY29uc3QgeyByZXR1cm4gX194IC0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K
c3RydWN0IG11bHRpcGxpZXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7
CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7
IHJldHVybiBfX3ggKiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZGl2
aWRlcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0
b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAv
IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtb2R1bHVzIDogcHVibGlj
IGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9U
cCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICUgX195OyB9Cn07CgoK
dGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG5lZ2F0ZSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlv
bjxfVHAsX1RwPgp7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0
dXJuIC1fX3g7IH0KfTsKIyAxNzMgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1
ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4K
c3RydWN0IGVxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsK
ICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7
IHJldHVybiBfX3ggPT0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG5v
dF9lcXVhbF90byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9v
bCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1
cm4gX194ICE9IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVy
IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9y
KCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPiBf
X3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzcyA6IHB1YmxpYyBiaW5h
cnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYg
X194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDwgX195OyB9Cn07CgoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXJfZXF1YWwgOiBwdWJsaWMgYmluYXJ5X2Z1
bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwg
Y29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA+PSBfX3k7IH0KfTsKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzc19lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248
X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBf
VHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDw9IF9feTsgfQp9OwojIDIyMiAiL3Vzci9sb2Nh
bC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfZnVuY3Rpb24u
aCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9hbmQgOiBwdWJsaWMgYmlu
YXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAm
IF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAmJiBfX3k7IH0KfTsKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9vciA6IHB1YmxpYyBiaW5hcnlfZnVu
Y3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBj
b25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IHx8IF9feTsgfQp9OwoKCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX25vdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxf
VHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1
cm4gIV9feDsgfQp9OwojIDI3MSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVk
ZS9jKysvMy4yLjEvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRp
Y2F0ZT4KY2xhc3MgdW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5h
bWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSwgYm9vbD4gewpwcm90ZWN0ZWQ6CiAgX1ByZWRp
Y2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgdW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVk
aWNhdGUmIF9feCkgOiBfTV9wcmVkKF9feCkge30KICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlw
ZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4g
IV9NX3ByZWQoX194KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGlu
ZSB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4Kbm90MShjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQp
CnsKICByZXR1cm4gdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7Cn0KCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3MgYmluYXJ5X25lZ2F0ZQogIDogcHVibGljIGJpbmFy
eV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1l
bnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbD4gewpwcm90ZWN0ZWQ6CiAg
X1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgYmluYXJ5X25lZ2F0ZShjb25z
dCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNv
bnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCwKICAgICAg
ICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5
cGUmIF9feSkgY29uc3QKICB7CiAgICByZXR1cm4gIV9NX3ByZWQoX194LCBfX3kpOwogIH0KfTsK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIGJpbmFyeV9uZWdhdGU8X1ByZWRp
Y2F0ZT4Kbm90Mihjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsKICByZXR1cm4gYmluYXJ5X25l
Z2F0ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9CiMgMzQ5ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2dj
Yy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRl
IDxjbGFzcyBfT3BlcmF0aW9uPgpjbGFzcyBiaW5kZXIxc3QKICA6IHB1YmxpYyB1bmFyeV9mdW5j
dGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90
ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1
bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMXN0KGNvbnN0IF9PcGVyYXRpb24mIF9f
eCwKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRf
dHlwZSYgX195KQogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFtZSBfT3Bl
cmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlv
bjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKHZhbHVl
LCBfX3gpOwogIH0KCgogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0
b3IoKSh0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX194KSBjb25z
dCB7CiAgICByZXR1cm4gb3AodmFsdWUsIF9feCk7CiAgfQoKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X09wZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMXN0PF9PcGVyYXRpb24+CmJpbmQx
c3QoY29uc3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5
cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUgX0FyZzFfdHlwZTsKICByZXR1
cm4gYmluZGVyMXN0PF9PcGVyYXRpb24+KF9fZm4sIF9BcmcxX3R5cGUoX194KSk7Cn0KCgp0ZW1w
bGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4KY2xhc3MgYmluZGVyMm5kCiAgOiBwdWJsaWMgdW5hcnlf
ZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpw
cm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRf
YXJndW1lbnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRlcjJuZChjb25zdCBfT3BlcmF0aW9u
JiBfX3gsCiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1
bWVudF90eXBlJiBfX3kpCiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1l
IF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3Bl
cmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcChf
X3gsIHZhbHVlKTsKICB9CgoKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9w
ZXJhdG9yKCkodHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194KSBj
b25zdCB7CiAgICByZXR1cm4gb3AoX194LCB2YWx1ZSk7CiAgfQoKfTsKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMm5kPF9PcGVyYXRpb24+CmJp
bmQybmQoY29uc3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVm
IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIF9BcmcyX3R5cGU7CiAg
cmV0dXJuIGJpbmRlcjJuZDxfT3BlcmF0aW9uPihfX2ZuLCBfQXJnMl90eXBlKF9feCkpOwp9CiMg
NDM4ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRz
L3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0Pgpj
bGFzcyBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9B
cmcsIF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgogIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcpOwpwdWJs
aWM6CiAgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbigpIHt9CiAgZXhwbGljaXQgcG9pbnRlcl90
b191bmFyeV9mdW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJnKSkgOiBfTV9wdHIoX194KSB7fQog
IF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gX01fcHRyKF9feCk7
IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50
ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gcHRyX2Z1bihfUmVzdWx0ICgqX194
KShfQXJnKSkKewogIHJldHVybiBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1
bHQ+KF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBf
UmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbiA6CiAgcHVibGljIGJpbmFy
eV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PiB7CnByb3RlY3RlZDoKICAgIF9SZXN1bHQg
KCpfTV9wdHIpKF9BcmcxLCBfQXJnMik7CnB1YmxpYzoKICAgIHBvaW50ZXJfdG9fYmluYXJ5X2Z1
bmN0aW9uKCkge30KICAgIGV4cGxpY2l0IHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKF9SZXN1
bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpCiAgICAgIDogX01fcHRyKF9feCkge30KICAgIF9SZXN1
bHQgb3BlcmF0b3IoKShfQXJnMSBfX3gsIF9BcmcyIF9feSkgY29uc3QgewogICAgICByZXR1cm4g
X01fcHRyKF9feCwgX195KTsKICAgIH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNz
IF9BcmcyLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248
X0FyZzEsX0FyZzIsX1Jlc3VsdD4KcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIp
KSB7CiAgcmV0dXJuIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1
bHQ+KF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX0lkZW50aXR5IDogcHVi
bGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+IHsKICBfVHAmIG9wZXJhdG9yKCkoX1RwJiBfX3gp
IGNvbnN0IHsgcmV0dXJuIF9feDsgfQogIGNvbnN0IF9UcCYgb3BlcmF0b3IoKShjb25zdCBfVHAm
IF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0
cnVjdCBfU2VsZWN0MXN0IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBf
UGFpcjo6Zmlyc3RfdHlwZT4gewogIHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVyYXRv
cigpKF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQogIGNvbnN0
IHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBfX3gp
IGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9Q
YWlyPgpzdHJ1Y3QgX1NlbGVjdDJuZCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlw
ZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlPgp7CiAgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBl
JiBvcGVyYXRvcigpKF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guc2Vjb25kOwog
IH0KICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoY29uc3Qg
X1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5zZWNvbmQ7CiAgfQp9OwojIDUyOCAi
L3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxf
ZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1f
ZnVuX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwKixfUmV0PiB7CnB1YmxpYzoKICBleHBs
aWNpdCBtZW1fZnVuX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1Jl
dCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoKTsgfQpw
cml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQs
IGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PGNvbnN0IF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KF9S
ZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3Io
KShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0
ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0
LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248
X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoq
X19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25z
dCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZiko
KTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1f
ZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBl
eHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDog
X01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fcikgY29uc3QgeyBy
ZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCkgY29u
c3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xh
c3MgbWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLF9SZXQ+IHsK
cHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykpIDog
X01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0
IHsgcmV0dXJuIChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01f
ZikoX0FyZyk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0Fy
Zz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3Qg
X1RwKixfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3QoX1Jl
dCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0
b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0CiAgICB7IHJldHVybiAoX19wLT4q
X01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9
OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1l
bV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyxfUmV0PiB7CnB1
YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSkg
OiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yLCBfQXJnIF9feCkgY29u
c3QgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9N
X2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9B
cmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf
VHAsX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV9yZWZfdChf
UmV0IChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVy
YXRvcigpKGNvbnN0IF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01f
ZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoK
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGlj
IHVuYXJ5X2Z1bmN0aW9uPF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90
KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShf
VHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6
Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90
PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKix2b2lkPiB7CnB1
YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3Qodm9pZCAoX1RwOjoqX19wZikoKSBjb25z
dCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wKSBjb25z
dCB7IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKSBjb25z
dDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90PHZvaWQsIF9U
cD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0
IG1lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9p
ZCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToK
ICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNv
bnN0X21lbV9mdW5fcmVmX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAs
dm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6
OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3Qg
X1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6
Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xh
c3MgbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf
VHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdCh2b2lkIChfVHA6
OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19w
LCBfQXJnIF9feCkgY29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQg
KF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+
CmNsYXNzIGNvbnN0X21lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFy
eV9mdW5jdGlvbjxjb25zdCBfVHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29u
c3RfbWVtX2Z1bjFfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYp
IHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyAo
X19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNv
bnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4x
X3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9B
cmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoq
X19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fciwg
X0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9U
cDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNs
YXNzIGNvbnN0X21lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5h
cnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVt
X2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7
fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9f
ci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0
Owp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBtZW1fZnVu
X3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpKQogIHsgcmV0dXJuIG1lbV9m
dW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4K
aW5saW5lIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2Yp
KCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl9yZWZfdDxfUmV0
LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpKQogIHsgcmV0dXJuIG1lbV9mdW5f
cmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+
CmlubGluZSBjb25zdF9tZW1fZnVuX3JlZl90PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihfUmV0IChf
VHA6OipfX2YpKCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9U
cD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4K
aW5saW5lIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2Yp
KF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVt
cGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNvbnN0X21l
bV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNv
bnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoK
dGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9m
dW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0Fy
ZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVt
cGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNvbnN0X21l
bV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+Cm1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZiko
X0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0Fy
Zz4oX19mKTsgfQoKCgp9CiMgNTYgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1
ZGUvYysrLzMuMi4xL2Z1bmN0aW9uYWwiIDIgMwojIDMyICJiaW1hcC5oIiAyCiMgMSAiL3Vzci9s
b2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvaXRlcmF0b3IiIDEgMwoj
IDY1ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9pdGVy
YXRvciIgMwoKCgoKCiMgMSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9j
KysvMy4yLjEvb3N0cmVhbSIgMSAzCiMgNDQgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4x
L2luY2x1ZGUvYysrLzMuMi4xL29zdHJlYW0iIDMKCiMgMSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9n
Y2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvaW9zIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9wcm9k
dWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvaW9zIiAzCgoKCiMgMSAiL3Vzci9sb2Nh
bC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9jaGFyX3RyYWl0cy5o
IiAxIDMKIyA0NCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4y
LjEvYml0cy9jaGFyX3RyYWl0cy5oIiAzCgoKCgpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0
ZTxjbGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHMKICAgIHsKICAgICAgdHlwZWRl
ZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludF90eXBl
OwogICAgICB0eXBlZGVmIHN0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1v
ZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBz
dGF0aWMgdm9pZAogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUm
IF9fYzIpOwoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2Mx
LCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29u
c3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGlj
IGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBl
KiBfX3MyLCBzaXplX3QgX19uKTsKCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNv
bnN0IGNoYXJfdHlwZSogX19zKTsKCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAg
IGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYg
X19hKTsKCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3Mx
LCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pOwoKICAgICAgc3RhdGljIGNoYXJf
dHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwg
c2l6ZV90IF9fbik7CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90
eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpOwoKICAgICAgc3RhdGljIGNoYXJf
dHlwZQogICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYyk7CgogICAgICBzdGF0
aWMgaW50X3R5cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpOwoKICAg
ICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNv
bnN0IGludF90eXBlJiBfX2MyKTsKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKTsK
CiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2Mp
OwogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj4KICAg
IHsKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBpbnQgaW50X3R5
cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtcG9zIHBvc190eXBlOwogICAgICB0eXBlZGVmIHN0cmVh
bW9mZiBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAg
IHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlw
ZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAg
ZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsg
cmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29uc3Qg
Y2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9f
YzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgY2hhcl90
eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0
dXJuIG1lbWNtcChfX3MxLCBfX3MyLCBfX24pOyB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAg
IGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKICAgICAgeyByZXR1cm4gc3RybGVuKF9fcyk7
IH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGZpbmQoY29uc3QgY2hhcl90
eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBjaGFyX3R5cGUqPihtZW1jaHIoX19zLCBfX2EsIF9fbikpOyB9
CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29u
c3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDxjaGFyX3R5cGUqPihtZW1tb3ZlKF9fczEsIF9fczIsIF9fbikpOyB9CgogICAgICBzdGF0aWMg
Y2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBf
X3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPiht
ZW1jcHkoX19zMSwgX19zMiwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAg
IGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkKICAgICAg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtc2V0KF9fcywgX19hLCBfX24pKTsg
fQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5
cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlPihfX2MpOyB9CgoK
CiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUm
IF9fYykKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXI+KF9fYykpOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcV9pbnRfdHlw
ZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0
dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIGVvZigpIHsg
cmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigoLTEpKTsgfQoKICAgICAgc3RhdGljIGludF90
eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gKF9f
YyA9PSBlb2YoKSkgPyAwIDogX19jOyB9CiAgfTsKIyAyNDEgIi91c3IvbG9jYWwvcHJvZHVjdHMv
Z2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvY2hhcl90cmFpdHMuaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cnVjdCBfQ2hhcl90
cmFpdHNfbWF0Y2gKICAgIHsKICAgICAgX0NoYXJUIF9NX2M7CiAgICAgIF9DaGFyX3RyYWl0c19t
YXRjaChfQ2hhclQgY29uc3QmIF9fYykgOiBfTV9jKF9fYykgeyB9CgogICAgICBib29sCiAgICAg
IG9wZXJhdG9yKCkoX0NoYXJUIGNvbnN0JiBfX2EpIHsgcmV0dXJuIF9UcmFpdHM6OmVxKF9NX2Ms
IF9fYSk7IH0KICAgIH07Cn0KIyA0NyAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5j
bHVkZS9jKysvMy4yLjEvaW9zIiAyIDMKCiMgMSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4y
LjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9sb2NhbGVmd2QuaCIgMSAzCiMgNDQgIi91c3IvbG9j
YWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvbG9jYWxlZndkLmgi
IDMKCgojIDEgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4x
L3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvYysrbG9jYWxlLmgiIDEgMwojIDM2ICIvdXNyL2xv
Y2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9zcGFyYy1zdW4tc29sYXJp
czIuOC9iaXRzL2MrK2xvY2FsZS5oIiAzCiMgMSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4y
LjEvaW5jbHVkZS9jKysvMy4yLjEvY2xvY2FsZSIgMSAzCiMgNDggIi91c3IvbG9jYWwvcHJvZHVj
dHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2Nsb2NhbGUiIDMKCiMgMSAiL3Vzci9pbmNs
dWRlL2xvY2FsZS5oIiAxIDMgNAojIDkgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMyA0CiNwcmFn
bWEgaWRlbnQgIkAoIylsb2NhbGUuaAkxLjE5CTk5LzA4LzEwIFNNSSIKIyA0NiAiL3Vzci9pbmNs
dWRlL2xvY2FsZS5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvaXNvL2xvY2FsZV9pc28uaCIgMSAz
IDQKIyA0NSAiL3Vzci9pbmNsdWRlL2lzby9sb2NhbGVfaXNvLmgiIDMgNAojcHJhZ21hIGlkZW50
ICJAKCMpbG9jYWxlX2lzby5oCTEuMQk5OS8wOC8wOSBTTUkiCgoKCgpleHRlcm4gIkMiIHsKCgoK
CgoKc3RydWN0IGxjb252IHsKICAgICAgICBjaGFyICpkZWNpbWFsX3BvaW50OwogICAgICAgIGNo
YXIgKnRob3VzYW5kc19zZXA7CiAgICAgICAgY2hhciAqZ3JvdXBpbmc7CiAgICAgICAgY2hhciAq
aW50X2N1cnJfc3ltYm9sOwogICAgICAgIGNoYXIgKmN1cnJlbmN5X3N5bWJvbDsKICAgICAgICBj
aGFyICptb25fZGVjaW1hbF9wb2ludDsKICAgICAgICBjaGFyICptb25fdGhvdXNhbmRzX3NlcDsK
ICAgICAgICBjaGFyICptb25fZ3JvdXBpbmc7CiAgICAgICAgY2hhciAqcG9zaXRpdmVfc2lnbjsK
ICAgICAgICBjaGFyICpuZWdhdGl2ZV9zaWduOwogICAgICAgIGNoYXIgaW50X2ZyYWNfZGlnaXRz
OwogICAgICAgIGNoYXIgZnJhY19kaWdpdHM7CiAgICAgICAgY2hhciBwX2NzX3ByZWNlZGVzOwog
ICAgICAgIGNoYXIgcF9zZXBfYnlfc3BhY2U7CiAgICAgICAgY2hhciBuX2NzX3ByZWNlZGVzOwog
ICAgICAgIGNoYXIgbl9zZXBfYnlfc3BhY2U7CiAgICAgICAgY2hhciBwX3NpZ25fcG9zbjsKICAg
ICAgICBjaGFyIG5fc2lnbl9wb3NuOwp9OwojIDk1ICIvdXNyL2luY2x1ZGUvaXNvL2xvY2FsZV9p
c28uaCIgMyA0CmV4dGVybiBjaGFyICpzZXRsb2NhbGUoaW50LCBjb25zdCBjaGFyICopOwpleHRl
cm4gc3RydWN0IGxjb252ICpsb2NhbGVjb252KHZvaWQpOwojIDEwNyAiL3Vzci9pbmNsdWRlL2lz
by9sb2NhbGVfaXNvLmgiIDMgNAp9CiMgNDcgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzIDQK
CgoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2xpYmludGwuaCIgMSAzIDQKIyAyMSAiL3Vzci9s
b2NhbC9pbmNsdWRlL2xpYmludGwuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAx
IDMgNAojIDIyICIvdXNyL2xvY2FsL2luY2x1ZGUvbGliaW50bC5oIiAyIDMgNAojIDUzICIvdXNy
L2xvY2FsL2luY2x1ZGUvbGliaW50bC5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJuIGNo
YXIgKmdldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQpOwoKCgpleHRlcm4gY2hhciAqZGdldHRl
eHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCk7CgoKCmV4
dGVybiBjaGFyICpkY2dldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hh
ciAqX19tc2dpZCwgaW50IF9fY2F0ZWdvcnkpOwoKCgoKCmV4dGVybiBjaGFyICpuZ2V0dGV4dCAo
Y29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLCB1bnNpZ25lZCBsb25n
IGludCBfX24pOwoKCgoKZXh0ZXJuIGNoYXIgKmRuZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21h
aW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsIHVuc2ln
bmVkIGxvbmcgaW50IF9fbik7CgoKCgpleHRlcm4gY2hhciAqZGNuZ2V0dGV4dCAoY29uc3QgY2hh
ciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dp
ZDIsIHVuc2lnbmVkIGxvbmcgaW50IF9fbiwgaW50IF9fY2F0ZWdvcnkpOwoKCgoKCgoKZXh0ZXJu
IGNoYXIgKnRleHRkb21haW4gKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSk7CgoKCmV4dGVybiBj
aGFyICpiaW5kdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFy
ICpfX2Rpcm5hbWUpOwoKCgoKZXh0ZXJuIGNoYXIgKmJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IChj
b25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fY29kZXNldCk7CiMgMTI0ICIv
dXNyL2xvY2FsL2luY2x1ZGUvbGliaW50bC5oIiAzIDQKfQojIDUyICIvdXNyL2luY2x1ZGUvbG9j
YWxlLmgiIDIgMyA0CiMgNjUgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMyA0CmV4dGVybiAiQyIg
ewojIDc1ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMgNAp9CiMgNTAgIi91c3IvbG9jYWwvcHJv
ZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2Nsb2NhbGUiIDIgMwoKCgoKCm5hbWVz
cGFjZSBzdGQKewogIHVzaW5nIDo6bGNvbnY7CiAgdXNpbmcgOjpzZXRsb2NhbGU7CiAgdXNpbmcg
Ojpsb2NhbGVjb252Owp9CiMgMzcgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1
ZGUvYysrLzMuMi4xL3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvYysrbG9jYWxlLmgiIDIgMwoK
CgpuYW1lc3BhY2Ugc3RkCnsKICB0eXBlZGVmIGludCogX19jX2xvY2FsZTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1R2PgogICAgaW50CiAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LCBj
b25zdCBpbnQgX19zaXplLCBjb25zdCBjaGFyKiBfX2ZtdCwKICAgICAgICAgICAgICAgICAgICAg
X1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMgPSAtMSkKICAgIHsKICAgICAg
Y2hhciogX19vbGQgPSBzZXRsb2NhbGUoNiwgX19udWxsKTsKICAgICAgY2hhciogX19zYXYgPSBz
dGF0aWNfY2FzdDxjaGFyKj4obWFsbG9jKHN0cmxlbihfX29sZCkgKyAxKSk7CiAgICAgIGlmIChf
X3NhdikKICAgICAgICBzdHJjcHkoX19zYXYsIF9fb2xkKTsKICAgICAgc2V0bG9jYWxlKDYsICJD
Iik7CgogICAgICBpbnQgX19yZXQ7CgoKCgoKCiAgICAgIGlmIChfX3ByZWMgPj0gMCkKICAgICAg
ICBfX3JldCA9IHNwcmludGYoX19vdXQsIF9fZm10LCBfX3ByZWMsIF9fdik7CiAgICAgIGVsc2UK
ICAgICAgICBfX3JldCA9IHNwcmludGYoX19vdXQsIF9fZm10LCBfX3YpOwoKICAgICAgc2V0bG9j
YWxlKDYsIF9fc2F2KTsKICAgICAgZnJlZShfX3Nhdik7CiAgICAgIHJldHVybiBfX3JldDsKICAg
IH0KfQojIDQ3ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIu
MS9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKCiMgMSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4y
LjEvaW5jbHVkZS9jKysvMy4yLjEvY2N0eXBlIiAxIDMKIyA0NyAiL3Vzci9sb2NhbC9wcm9kdWN0
cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvY2N0eXBlIiAzCiMgNjYgIi91c3IvbG9jYWwv
cHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2NjdHlwZSIgMwpuYW1lc3BhY2Ug
c3RkCnsKICB1c2luZyA6OmlzYWxudW07CiAgdXNpbmcgOjppc2FscGhhOwogIHVzaW5nIDo6aXNj
bnRybDsKICB1c2luZyA6OmlzZGlnaXQ7CiAgdXNpbmcgOjppc2dyYXBoOwogIHVzaW5nIDo6aXNs
b3dlcjsKICB1c2luZyA6OmlzcHJpbnQ7CiAgdXNpbmcgOjppc3B1bmN0OwogIHVzaW5nIDo6aXNz
cGFjZTsKICB1c2luZyA6OmlzdXBwZXI7CiAgdXNpbmcgOjppc3hkaWdpdDsKICB1c2luZyA6OnRv
bG93ZXI7CiAgdXNpbmcgOjp0b3VwcGVyOwp9CiMgNDkgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2Nj
LzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi91c3Iv
bG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL3N0cmluZyIgMSAzCiMg
NDQgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL3N0cmlu
ZyIgMwoKCgoKIyAxICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8z
LjIuMS9tZW1vcnkiIDEgMwojIDUzICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNs
dWRlL2MrKy8zLjIuMS9tZW1vcnkiIDMKCgojIDEgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMu
Mi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDg0ICIvdXNyL2xv
Y2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGxvYy5o
IiAzCiMgMSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEv
Y2Fzc2VydCIgMSAzCiMgNDcgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUv
YysrLzMuMi4xL2Nhc3NlcnQiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMgNAoj
IDExICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpYXNzZXJ0
LmgJMS45CTkyLzA3LzE0IFNNSSIgCgoKZXh0ZXJuICJDIiB7CgoKCmV4dGVybiB2b2lkIF9fYXNz
ZXJ0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOwoKCgoKCn0KIyA0OSAiL3Vzci9s
b2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvY2Fzc2VydCIgMiAzCiMg
ODUgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMv
c3RsX2FsbG9jLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1
ZGUvYysrLzMuMi4xL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvcHJv
ZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvZnVuY3RleGNlcHQuaCIgMwoj
IDEgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2V4Y2Vw
dGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9p
bmNsdWRlL2MrKy8zLjIuMS9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7
CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJv
d19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAg
dm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2lj
X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihj
b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0
IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBf
X3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAg
dm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg
X190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19v
dmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZs
b3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJl
KGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA4NiAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEv
aW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9w
cm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfdGhyZWFkcy5oIiAx
IDMKIyA1NCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEv
Yml0cy9zdGxfdGhyZWFkcy5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgoKICBzdHJ1Y3QgX1JlZmNv
dW50X0Jhc2UKICB7CgogICAgdHlwZWRlZiBzaXplX3QgX1JDX3Q7CgoKICAgIHZvbGF0aWxlIF9S
Q190IF9NX3JlZl9jb3VudDsKCgogICAgX19ndGhyZWFkX211dGV4X3QgX01fcmVmX2NvdW50X2xv
Y2s7CgogICAgX1JlZmNvdW50X0Jhc2UoX1JDX3QgX19uKSA6IF9NX3JlZl9jb3VudChfX24pCiAg
ICB7CgogICAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfX3RtcCA9IHt7MCwgMCwgMCwgMCwgMH0sIHt7
ezB9fX0sIDB9OwogICAgICBfTV9yZWZfY291bnRfbG9jayA9IF9fdG1wOwoKCgoKCiAgICB9Cgog
ICAgdm9pZAogICAgX01faW5jcigpCiAgICB7CiAgICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZf
TV9yZWZfY291bnRfbG9jayk7CiAgICAgICsrX01fcmVmX2NvdW50OwogICAgICBfX2d0aHJlYWRf
bXV0ZXhfdW5sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICB9CgogICAgX1JDX3QKICAgIF9N
X2RlY3IoKQogICAgewogICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xv
Y2spOwogICAgICB2b2xhdGlsZSBfUkNfdCBfX3RtcCA9IC0tX01fcmVmX2NvdW50OwogICAgICBf
X2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICAgIHJldHVybiBf
X3RtcDsKICAgIH0KICB9OwojIDEwOSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5j
bHVkZS9jKysvMy4yLjEvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgdGVtcGxhdGU8aW50IF9fZHVt
bXk+CiAgICBzdHJ1Y3QgX1N3YXBfbG9ja19zdHJ1Y3QKICAgIHsgc3RhdGljIF9fZ3RocmVhZF9t
dXRleF90IF9TX3N3YXBfbG9jazsgfTsKCiAgdGVtcGxhdGU8aW50IF9fZHVtbXk+CiAgICBfX2d0
aHJlYWRfbXV0ZXhfdAogICAgX1N3YXBfbG9ja19zdHJ1Y3Q8X19kdW1teT46Ol9TX3N3YXBfbG9j
ayA9IHt7MCwgMCwgMCwgMCwgMH0sIHt7ezB9fX0sIDB9OwoKCgogIGlubGluZSB1bnNpZ25lZCBs
b25nCiAgX0F0b21pY19zd2FwKHVuc2lnbmVkIGxvbmcgKiBfX3AsIHVuc2lnbmVkIGxvbmcgX19x
KQogIHsKICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfU3dhcF9sb2NrX3N0cnVjdDwwPjo6X1Nf
c3dhcF9sb2NrKTsKICAgIHVuc2lnbmVkIGxvbmcgX19yZXN1bHQgPSAqX19wOwogICAgKl9fcCA9
IF9fcTsKICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9Td2FwX2xvY2tfc3RydWN0PDA+Ojpf
U19zd2FwX2xvY2spOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KIyAxNTEgIi91c3IvbG9jYWwv
cHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX3RocmVhZHMuaCIg
MwogIHN0cnVjdCBfU1RMX211dGV4X2xvY2sKICB7CgoKCgoKICAgIF9fZ3RocmVhZF9tdXRleF90
IF9NX2xvY2s7CgogICAgdm9pZAogICAgX01faW5pdGlhbGl6ZSgpCiAgICB7CiMgMTg0ICIvdXNy
L2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF90aHJl
YWRzLmgiIDMKICAgIH0KCiAgICB2b2lkCiAgICBfTV9hY3F1aXJlX2xvY2soKQogICAgewoKCgog
ICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fbG9jayk7CiAgICB9CgogICAgdm9pZAogICAg
X01fcmVsZWFzZV9sb2NrKCkKICAgIHsKCgoKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygm
X01fbG9jayk7CiAgICB9CiAgfTsKIyAyMjAgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4x
L2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHN0cnVjdCBfU1RMX2F1
dG9fbG9jawogIHsKICAgIF9TVExfbXV0ZXhfbG9jayYgX01fbG9jazsKCiAgICBfU1RMX2F1dG9f
bG9jayhfU1RMX211dGV4X2xvY2smIF9fbG9jaykgOiBfTV9sb2NrKF9fbG9jaykKICAgIHsgX01f
bG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQoKICAgIH5fU1RMX2F1dG9fbG9jaygpIHsgX01fbG9j
ay5fTV9yZWxlYXNlX2xvY2soKTsgfQoKICBwcml2YXRlOgogICAgdm9pZCBvcGVyYXRvcj0oY29u
c3QgX1NUTF9hdXRvX2xvY2smKTsKICAgIF9TVExfYXV0b19sb2NrKGNvbnN0IF9TVExfYXV0b19s
b2NrJik7CiAgfTsKCn0KIyA4NyAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVk
ZS9jKysvMy4yLjEvYml0cy9zdGxfYWxsb2MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA5OCAi
L3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxf
YWxsb2MuaCIgMwogIGNsYXNzIF9fbmV3X2FsbG9jCiAgewogIHB1YmxpYzoKICAgIHN0YXRpYyB2
b2lkKgogICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIDo6b3BlcmF0b3IgbmV3
KF9fbik7IH0KCiAgICBzdGF0aWMgdm9pZAogICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVf
dCkKICAgIHsgOjpvcGVyYXRvciBkZWxldGUoX19wKTsgfQogIH07CiMgMTIxICIvdXNyL2xvY2Fs
L3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGxvYy5oIiAz
CiAgdGVtcGxhdGUgPGludCBfX2luc3Q+CiAgICBjbGFzcyBfX21hbGxvY19hbGxvY190ZW1wbGF0
ZQogICAgewogICAgcHJpdmF0ZToKICAgICAgc3RhdGljIHZvaWQqIF9TX29vbV9tYWxsb2Moc2l6
ZV90KTsKICAgICAgc3RhdGljIHZvaWQqIF9TX29vbV9yZWFsbG9jKHZvaWQqLCBzaXplX3QpOwog
ICAgICBzdGF0aWMgdm9pZCAoKiBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKTsKCiAgICBw
dWJsaWM6CiAgICAgIHN0YXRpYyB2b2lkKgogICAgICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAg
ICB7CiAgICAgICAgdm9pZCogX19yZXN1bHQgPSBtYWxsb2MoX19uKTsKICAgICAgICBpZiAoMCA9
PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19vb21fbWFsbG9jKF9fbik7CiAgICAgICAgcmV0dXJu
IF9fcmVzdWx0OwogICAgICB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBkZWFsbG9jYXRlKHZv
aWQqIF9fcCwgc2l6ZV90ICkKICAgICAgeyBmcmVlKF9fcCk7IH0KCiAgICAgIHN0YXRpYyB2b2lk
KgogICAgICByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICwgc2l6ZV90IF9fbmV3X3N6KQog
ICAgICB7CiAgICAgICAgdm9pZCogX19yZXN1bHQgPSByZWFsbG9jKF9fcCwgX19uZXdfc3opOwog
ICAgICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9yZWFsbG9jKF9fcCwg
X19uZXdfc3opOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQoKICAgICAgc3RhdGlj
IHZvaWQgKCogX19zZXRfbWFsbG9jX2hhbmRsZXIodm9pZCAoKl9fZikoKSkpKCkKICAgICAgewog
ICAgICAgIHZvaWQgKCogX19vbGQpKCkgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAg
ICAgICBfX21hbGxvY19hbGxvY19vb21faGFuZGxlciA9IF9fZjsKICAgICAgICByZXR1cm4oX19v
bGQpOwogICAgICB9CiAgICB9OwoKCiAgdGVtcGxhdGUgPGludCBfX2luc3Q+CiAgICB2b2lkICgq
IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9fbWFsbG9jX2FsbG9jX29vbV9oYW5k
bGVyKSgpID0gMDsKCiAgdGVtcGxhdGUgPGludCBfX2luc3Q+CiAgICB2b2lkKgogICAgX19tYWxs
b2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX21hbGxvYyhzaXplX3QgX19uKQogICAg
ewogICAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgIHZvaWQqIF9fcmVz
dWx0OwoKICAgICAgZm9yICg7OykKICAgICAgICB7CiAgICAgICAgICBfX215X21hbGxvY19oYW5k
bGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICAgICAgICBpZiAoMCA9PSBfX215
X21hbGxvY19oYW5kbGVyKQogICAgICAgICAgICBzdGQ6Ol9fdGhyb3dfYmFkX2FsbG9jKCk7CiAg
ICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgICAgICBfX3Jlc3VsdCA9IG1h
bGxvYyhfX24pOwogICAgICAgICAgaWYgKF9fcmVzdWx0KQogICAgICAgICAgICByZXR1cm4oX19y
ZXN1bHQpOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGUgPGludCBfX2luc3Q+CiAgICB2b2lk
KgogICAgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX3JlYWxsb2Modm9p
ZCogX19wLCBzaXplX3QgX19uKQogICAgewogICAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRs
ZXIpKCk7CiAgICAgIHZvaWQqIF9fcmVzdWx0OwoKICAgICAgZm9yICg7OykKICAgICAgICB7CiAg
ICAgICAgICBfX215X21hbGxvY19oYW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7
CiAgICAgICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKQogICAgICAgICAgICBzdGQ6
Ol9fdGhyb3dfYmFkX2FsbG9jKCk7CiAgICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7
CiAgICAgICAgICBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX24pOwogICAgICAgICAgaWYgKF9f
cmVzdWx0KQogICAgICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgICAgIH0KICAgIH0KCgoK
CgoKICB0eXBlZGVmIF9fbmV3X2FsbG9jIF9fbWVtX2ludGVyZmFjZTsKIyAyMTkgIi91c3IvbG9j
YWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsbG9jLmgi
IDMKICB0ZW1wbGF0ZTxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KICBjbGFzcyBfX3NpbXBsZV9h
bGxvYwogIHsKICBwdWJsaWM6CiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0ZShzaXplX3QgX19uKQog
ICAgeyByZXR1cm4gMCA9PSBfX24gPyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoX19uICog
c2l6ZW9mIChfVHApKTsgfQoKICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRlKCkKICAgIHsgcmV0dXJu
IChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKHNpemVvZiAoX1RwKSk7IH0KCiAgICBzdGF0aWMgdm9p
ZCBkZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBpZiAoMCAhPSBfX24pIF9B
bGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KCiAgICBzdGF0aWMg
dm9pZCBkZWFsbG9jYXRlKF9UcCogX19wKQogICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBz
aXplb2YgKF9UcCkpOyB9CiAgfTsKIyAyNTEgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4x
L2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0FsbG9jPgogIGNsYXNzIF9fZGVidWdfYWxsb2MKICB7CiAgcHJpdmF0ZToKICAgIGVudW0ge19T
X2V4dHJhID0gOH07CgoKICBwdWJsaWM6CgogICAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVf
dCBfX24pCiAgICB7CiAgICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKV9BbGxvYzo6YWxsb2Nh
dGUoX19uICsgKGludCkgX1NfZXh0cmEpOwogICAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX247
CiAgICAgIHJldHVybiBfX3Jlc3VsdCArIChpbnQpIF9TX2V4dHJhOwogICAgfQoKICAgIHN0YXRp
YyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogICAgewogICAgICBjaGFy
KiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19leHRyYTsKICAgICAgKHZvaWQpKCgq
KHNpemVfdCopX19yZWFsX3AgPT0gX19uKSB8fCAoX19hc3NlcnQoIiooc2l6ZV90KilfX3JlYWxf
cCA9PSBfX24iLCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4y
LjEvYml0cy9zdGxfYWxsb2MuaCIsIDI3MCksIDApKTsKICAgICAgX0FsbG9jOjpkZWFsbG9jYXRl
KF9fcmVhbF9wLCBfX24gKyAoaW50KSBfU19leHRyYSk7CiAgICB9CgogICAgc3RhdGljIHZvaWQq
IHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeikK
ICAgIHsKICAgICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gKGludCkgX1NfZXh0cmE7
CiAgICAgICh2b2lkKSgoKihzaXplX3QqKV9fcmVhbF9wID09IF9fb2xkX3N6KSB8fCAoX19hc3Nl
cnQoIiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29sZF9zeiIsICIvdXNyL2xvY2FsL3Byb2R1Y3Rz
L2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGxvYy5oIiwgMjc3KSwgMCkp
OwogICAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKikKICAgICAgICBfQWxsb2M6OnJlYWxsb2Nh
dGUoX19yZWFsX3AsIF9fb2xkX3N6ICsgKGludCkgX1NfZXh0cmEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX25ld19zeiArIChpbnQpIF9TX2V4dHJhKTsKICAgICAgKihz
aXplX3QqKV9fcmVzdWx0ID0gX19uZXdfc3o7CiAgICAgIHJldHVybiBfX3Jlc3VsdCArIChpbnQp
IF9TX2V4dHJhOwogICAgfQogIH07CiMgMzI0ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIu
MS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlPGJvb2wgX190
aHJlYWRzLCBpbnQgX19pbnN0PgogIGNsYXNzIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZQogIHsK
ICBwcml2YXRlOgogICAgZW51bSB7X0FMSUdOID0gOH07CiAgICBlbnVtIHtfTUFYX0JZVEVTID0g
MTI4fTsKICAgIGVudW0ge19ORlJFRUxJU1RTID0gX01BWF9CWVRFUyAvIF9BTElHTn07CgogICAg
dW5pb24gX09iagogICAgewogICAgICB1bmlvbiBfT2JqKiBfTV9mcmVlX2xpc3RfbGluazsKICAg
ICAgY2hhciBfTV9jbGllbnRfZGF0YVsxXTsKICAgIH07CgogICAgc3RhdGljIF9PYmoqIHZvbGF0
aWxlIF9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNUU107CgoKICAgIHN0YXRpYyBjaGFyKiBfU19zdGFy
dF9mcmVlOwogICAgc3RhdGljIGNoYXIqIF9TX2VuZF9mcmVlOwogICAgc3RhdGljIHNpemVfdCBf
U19oZWFwX3NpemU7CgogICAgc3RhdGljIF9TVExfbXV0ZXhfbG9jayBfU19ub2RlX2FsbG9jYXRv
cl9sb2NrOwoKICAgIHN0YXRpYyBzaXplX3QKICAgIF9TX3JvdW5kX3VwKHNpemVfdCBfX2J5dGVz
KQogICAgeyByZXR1cm4gKCgoX19ieXRlcykgKyAoc2l6ZV90KSBfQUxJR04tMSkgJiB+KChzaXpl
X3QpIF9BTElHTiAtIDEpKTsgfQoKICAgIHN0YXRpYyBzaXplX3QKICAgIF9TX2ZyZWVsaXN0X2lu
ZGV4KHNpemVfdCBfX2J5dGVzKQogICAgeyByZXR1cm4gKCgoX19ieXRlcykgKyAoc2l6ZV90KV9B
TElHTi0xKS8oc2l6ZV90KV9BTElHTiAtIDEpOyB9CgoKCiAgICBzdGF0aWMgdm9pZCoKICAgIF9T
X3JlZmlsbChzaXplX3QgX19uKTsKCgoKICAgIHN0YXRpYyBjaGFyKgogICAgX1NfY2h1bmtfYWxs
b2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKCgoKICAgIGNsYXNzIF9Mb2NrCiAgICB7
CiAgICBwdWJsaWM6CiAgICAgIF9Mb2NrKCkgeyBpZiAoX190aHJlYWRzKSBfU19ub2RlX2FsbG9j
YXRvcl9sb2NrLl9NX2FjcXVpcmVfbG9jaygpOyB9CiAgICAgIH5fTG9jaygpIHsgaWYgKF9fdGhy
ZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9yZWxlYXNlX2xvY2soKTsgfQogICAgfSBf
X2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpOwogICAgZnJpZW5kIGNsYXNzIF9Mb2NrOwoKICBw
dWJsaWM6CgogICAgc3RhdGljIHZvaWQqCiAgICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgewog
ICAgICB2b2lkKiBfX3JldCA9IDA7CgogICAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRF
UykKICAgICAgICBfX3JldCA9IF9fbWVtX2ludGVyZmFjZTo6YWxsb2NhdGUoX19uKTsKICAgICAg
ZWxzZQogICAgICAgIHsKICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdCA9
IF9TX2ZyZWVfbGlzdAogICAgICAgICAgICArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKCiAg
ICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7CiAgICAgICAgICBfT2JqKiBfX3Jlc3RyaWN0
X18gX19yZXN1bHQgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICBpZiAoX19yZXN1bHQgPT0g
MCkKICAgICAgICAgICAgX19yZXQgPSBfU19yZWZpbGwoX1Nfcm91bmRfdXAoX19uKSk7CiAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBf
X3Jlc3VsdCAtPiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICAgICAgICBfX3JldCA9IF9fcmVz
dWx0OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9OwoK
CiAgICBzdGF0aWMgdm9pZAogICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAg
ICB7CiAgICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKQogICAgICAgIF9fbWVtX2lu
dGVyZmFjZTo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAg
ICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QKICAgICAgICAgICAgPSBfU19mcmVl
X2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwogICAgICAgICAgX09iaiogX19xID0gKF9P
YmoqKV9fcDsKCgoKICAgICAgICAgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKICAgICAgICAgIF9f
cSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICpfX215
X2ZyZWVfbGlzdCA9IF9fcTsKICAgICAgICB9CiAgICB9CgogICAgc3RhdGljIHZvaWQqCiAgICBy
ZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opOwog
IH07CgoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGlubGluZSBi
b29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVh
ZHMsIF9faW5zdD4mLAogICAgICAgICAgICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGU8X190aHJlYWRzLCBfX2luc3Q+JikKICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8
Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3Ih
PShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JiwKICAg
ICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19p
bnN0PiYpCiAgICB7IHJldHVybiBmYWxzZTsgfQoKCgoKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVh
ZHMsIGludCBfX2luc3Q+CiAgICBjaGFyKgogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f
dGhyZWFkcywgX19pbnN0Pjo6X1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCYgX19ub2JqcykKICAgIHsKICAgICAgY2hhciogX19yZXN1bHQ7CiAgICAgIHNpemVfdCBfX3Rv
dGFsX2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAgICAgc2l6ZV90IF9fYnl0ZXNfbGVmdCA9
IF9TX2VuZF9mcmVlIC0gX1Nfc3RhcnRfZnJlZTsKCiAgICAgIGlmIChfX2J5dGVzX2xlZnQgPj0g
X190b3RhbF9ieXRlcykKICAgICAgewogICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsK
ICAgICAgICBfU19zdGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgcmV0dXJuKF9f
cmVzdWx0KTsKICAgICAgfQogICAgICBlbHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXplKQog
ICAgICAgIHsKICAgICAgICAgIF9fbm9ianMgPSAoaW50KShfX2J5dGVzX2xlZnQvX19zaXplKTsK
ICAgICAgICAgIF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOwogICAgICAgICAgX19y
ZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFs
X2J5dGVzOwogICAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgICAgICB9CiAgICAgIGVsc2UK
ICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19ieXRlc190b19nZXQgPQogICAgICAgICAgICAy
ICogX190b3RhbF9ieXRlcyArIF9TX3JvdW5kX3VwKF9TX2hlYXBfc2l6ZSA+PiA0KTsKCiAgICAg
ICAgICBpZiAoX19ieXRlc19sZWZ0ID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9P
YmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdCA9CiAgICAgICAgICAgICAgICBfU19mcmVlX2xp
c3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2J5dGVzX2xlZnQpOwoKICAgICAgICAgICAgICAoKF9P
YmoqKV9TX3N0YXJ0X2ZyZWUpIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0
OwogICAgICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IChfT2JqKilfU19zdGFydF9mcmVlOwog
ICAgICAgICAgICB9CiAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKSBfX21lbV9pbnRl
cmZhY2U6OmFsbG9jYXRlKF9fYnl0ZXNfdG9fZ2V0KTsKICAgICAgICAgIGlmICgwID09IF9TX3N0
YXJ0X2ZyZWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzaXplX3QgX19pOwogICAgICAg
ICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICBfT2Jq
KiBfX3A7CgoKCiAgICAgICAgICAgICAgX19pID0gX19zaXplOwogICAgICAgICAgICAgIGZvciAo
OyBfX2kgPD0gKHNpemVfdCkgX01BWF9CWVRFUzsgX19pICs9IChzaXplX3QpIF9BTElHTikKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVl
X2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2kpOwogICAgICAgICAgICAgICAgICBfX3AgPSAq
X19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgICAgIGlmICgwICE9IF9fcCkKICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3Ag
LT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAgICAgICAgICAgICBfU19zdGFydF9mcmVl
ID0gKGNoYXIqKV9fcDsKICAgICAgICAgICAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3Rh
cnRfZnJlZSArIF9faTsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybihfU19jaHVua19hbGxv
YyhfX3NpemUsIF9fbm9ianMpKTsKCgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICBfU19lbmRfZnJlZSA9IDA7CiAgICAgICAgICAgICAgX1Nfc3Rh
cnRfZnJlZSA9IChjaGFyKilfX21lbV9pbnRlcmZhY2U6OmFsbG9jYXRlKF9fYnl0ZXNfdG9fZ2V0
KTsKCgogICAgICAgICAgICB9CiAgICAgICAgICBfU19oZWFwX3NpemUgKz0gX19ieXRlc190b19n
ZXQ7CiAgICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2J5dGVzX3RvX2dl
dDsKICAgICAgICAgIHJldHVybihfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpKTsKICAg
ICAgICB9CiAgICB9CgoKCgoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4K
ICAgIHZvaWQqCiAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+
OjpfU19yZWZpbGwoc2l6ZV90IF9fbikKICAgIHsKICAgICAgaW50IF9fbm9ianMgPSAyMDsKICAg
ICAgY2hhciogX19jaHVuayA9IF9TX2NodW5rX2FsbG9jKF9fbiwgX19ub2Jqcyk7CiAgICAgIF9P
YmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsKICAgICAgX09iaiogX19yZXN1bHQ7CiAgICAg
IF9PYmoqIF9fY3VycmVudF9vYmo7CiAgICAgIF9PYmoqIF9fbmV4dF9vYmo7CiAgICAgIGludCBf
X2k7CgogICAgICBpZiAoMSA9PSBfX25vYmpzKSByZXR1cm4oX19jaHVuayk7CiAgICAgIF9fbXlf
ZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKCgogICAg
ICBfX3Jlc3VsdCA9IChfT2JqKilfX2NodW5rOwogICAgICAqX19teV9mcmVlX2xpc3QgPSBfX25l
eHRfb2JqID0gKF9PYmoqKShfX2NodW5rICsgX19uKTsKICAgICAgZm9yIChfX2kgPSAxOyA7IF9f
aSsrKSB7CiAgICAgICAgX19jdXJyZW50X29iaiA9IF9fbmV4dF9vYmo7CiAgICAgICAgX19uZXh0
X29iaiA9IChfT2JqKikoKGNoYXIqKV9fbmV4dF9vYmogKyBfX24pOwogICAgICAgIGlmIChfX25v
YmpzIC0gMSA9PSBfX2kpIHsKICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0
X2xpbmsgPSAwOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF9f
Y3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSBfX25leHRfb2JqOwogICAgICAgIH0K
ICAgICAgfQogICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfQoKCiAgdGVtcGxhdGU8Ym9vbCB0
aHJlYWRzLCBpbnQgaW5zdD4KICAgIHZvaWQqCiAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8
dGhyZWFkcywgaW5zdD46OnJlYWxsb2NhdGUodm9pZCogX19wLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX29sZF9zeiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgX19uZXdfc3opCiAgICB7CiAgICAgIHZvaWQqIF9fcmVzdWx0OwogICAgICBzaXplX3QgX19j
b3B5X3N6OwoKICAgICAgaWYgKF9fb2xkX3N6ID4gKHNpemVfdCkgX01BWF9CWVRFUyAmJiBfX25l
d19zeiA+IChzaXplX3QpIF9NQVhfQllURVMpIHsKICAgICAgICByZXR1cm4ocmVhbGxvYyhfX3As
IF9fbmV3X3N6KSk7CiAgICAgIH0KICAgICAgaWYgKF9TX3JvdW5kX3VwKF9fb2xkX3N6KSA9PSBf
U19yb3VuZF91cChfX25ld19zeikpIHJldHVybihfX3ApOwogICAgICBfX3Jlc3VsdCA9IGFsbG9j
YXRlKF9fbmV3X3N6KTsKICAgICAgX19jb3B5X3N6ID0gX19uZXdfc3ogPiBfX29sZF9zej8gX19v
bGRfc3ogOiBfX25ld19zejsKICAgICAgbWVtY3B5KF9fcmVzdWx0LCBfX3AsIF9fY29weV9zeik7
CiAgICAgIGRlYWxsb2NhdGUoX19wLCBfX29sZF9zeik7CiAgICAgIHJldHVybihfX3Jlc3VsdCk7
CiAgICB9CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogIF9TVExfbXV0
ZXhfbG9jawogIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9T
X25vZGVfYWxsb2NhdG9yX2xvY2sKICA9IHsge3swLCAwLCAwLCAwLCAwfSwge3t7MH19fSwgMH0g
fTsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgY2hhciogX19kZWZh
dWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nfc3RhcnRfZnJlZSA9IDA7
CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogIGNoYXIqIF9fZGVmYXVs
dF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2VuZF9mcmVlID0gMDsKCiAg
dGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgc2l6ZV90IF9fZGVmYXVsdF9h
bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2hlYXBfc2l6ZSA9IDA7CgogIHRl
bXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogIHR5cGVuYW1lIF9fZGVmYXVsdF9h
bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9PYmoqIHZvbGF0aWxlCiAgX19kZWZh
dWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfZnJlZV9saXN0W19ORlJF
RUxJU1RTXTsKCiAgdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwgMD4gX19h
bGxvYzsKICB0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxmYWxzZSwgMD4gX19zaW5n
bGVfY2xpZW50X2FsbG9jOwojIDYxMyAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5j
bHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpj
bGFzcyBhbGxvY2F0b3IKewogIHR5cGVkZWYgX19hbGxvYyBfQWxsb2M7CnB1YmxpYzoKICB0eXBl
ZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBl
OwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2lu
dGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0
X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsK
ICB9OwoKICBhbGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRv
ciYpIHRocm93KCkge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gYWxsb2NhdG9yKGNvbnN0IGFs
bG9jYXRvcjxfVHAxPiYpIHRocm93KCkge30KICB+YWxsb2NhdG9yKCkgdGhyb3coKSB7fQoKICBw
b2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNv
bnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAm
X194OyB9CgoKCiAgX1RwKiBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDAp
IHsKICAgIHJldHVybiBfX24gIT0gMCA/IHN0YXRpY19jYXN0PF9UcCo+KF9BbGxvYzo6YWxsb2Nh
dGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAgICAgICAgICAgICAgICAgIDogMDsKICB9CgoKICB2
b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICB7IF9BbGxvYzo6
ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsgfQoKICBzaXplX3R5cGUgbWF4X3Np
emUoKSBjb25zdCB0aHJvdygpCiAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7
IH0KCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3
KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5f
VHAoKTsgfQp9OwoKdGVtcGxhdGU8PgpjbGFzcyBhbGxvY2F0b3I8dm9pZD4gewpwdWJsaWM6CiAg
dHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2Vf
dHlwZTsKICB0eXBlZGVmIHZvaWQqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25z
dF9wb2ludGVyOwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsK
ICB9Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKewog
IHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBi
b29sIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1Qy
PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KIyA2OTUgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMu
Mi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX19hbGxvY2F0b3IKewogIF9BbGxvYyBfX3VuZGVy
bHlpbmdfYWxsb2M7CgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRp
ZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBj
b25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICB0eXBl
ZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7
CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgX19h
bGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9OwoKICBfX2FsbG9jYXRvcigpIHRocm93
KCkge30KICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvciYgX19hKSB0aHJvdygpCiAgICA6
IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQogIHRlbXBsYXRl
IDxjbGFzcyBfVHAxPgogIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxv
Yz4mIF9fYSkgdGhyb3coKQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWlu
Z19hbGxvYykge30KICB+X19hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogIHBvaW50ZXIgYWRkcmVz
cyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29uc3RfcG9pbnRlciBh
ZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCgogIF9U
cCogYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9pZCogPSAwKSB7CiAgICByZXR1cm4g
X19uICE9IDAKICAgICAgICA/IHN0YXRpY19jYXN0PF9UcCo+KF9fdW5kZXJseWluZ19hbGxvYy5h
bGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAgOiAwOwogIH0KCgogIHZvaWQgZGVh
bGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX191bmRlcmx5aW5nX2Fs
bG9jLmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YoX1RwKSk7IH0KCiAgc2l6ZV90eXBlIG1h
eF9zaXplKCkgY29uc3QgdGhyb3coKQogICAgeyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihf
VHApOyB9CgogIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSB7
IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICB2b2lkIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsgX19w
LT5+X1RwKCk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIF9fYWxsb2NhdG9y
PHZvaWQsIF9BbGxvYz4gewogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0
cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkKiBwb2ludGVyOwogIHR5cGVk
ZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsK
CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRlZiBfX2Fs
bG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOwogIH07Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19hbGxvY2F0b3I8
X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2Nh
dG9yPF9UcCwgX0FsbG9jPiYgX19hMikKewogIHJldHVybiBfX2ExLl9fdW5kZXJseWluZ19hbGxv
YyA9PSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwg
X0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxf
VHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxsb2MgIT0g
X19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCgoKCgoKCnRlbXBsYXRlIDxpbnQgaW5zdD4KaW5s
aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0PiYs
CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8aW5z
dD4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxpbnQgX19pbnN0PgppbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4mLAogICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4m
KQp7CiAgcmV0dXJuIGZhbHNlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVybiB0cnVlOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9f
ZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWJ1
Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVybiBmYWxzZTsKfQojIDg0MCAiL3Vzci9sb2NhbC9w
cm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfYWxsb2MuaCIgMwp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0
cwp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwPjo6b3RoZXIgYWxsb2Nh
dG9yX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpjb25z
dCBib29sIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X1NfaW5zdGFuY2VsZXNzOwoK
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9U
cCwgYWxsb2NhdG9yPF9UcDE+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVz
cyA9IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fYWxsb2M+IF9BbGxvY190
eXBlOwogIHR5cGVkZWYgYWxsb2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9f
bWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1Nf
aW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxs
b2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxv
Y2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5
cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgYm9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+
CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy
ZWFkcywgX19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0
cnVlOwogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYg
X19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2lu
c3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlYnVnX2FsbG9jPF9B
bGxvYz4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0
eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9j
X3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+
IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwg
aW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAg
ICBfX2FsbG9jYXRvcjxfVHAxLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gPgp7
CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9f
c2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxv
Y190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0
ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX1RwMSwgYm9vbCBfX3RociwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1Rw
LAogICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RociwgX19pbnN0
PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlw
ZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Rocixf
X2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1Rw
LCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBhbGxv
Y2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBjbGFzcyBf
QWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxvY2F0b3I8X1RwMSwgX19kZWJ1
Z19hbGxvYzxfQWxsb2M+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNz
ID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxs
b2M+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxs
b2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNs
YXNzIGFsbG9jYXRvcjxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYWxsb2NhdG9yPHdj
aGFyX3Q+OwoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGU8dHJ1ZSwgMD47Cgp9CiMgNTYgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1
ZGUvYysrLzMuMi4xL21lbW9yeSIgMiAzCgoKCiMgMSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2Mv
My4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfcmF3X3N0b3JhZ2VfaXRlci5oIiAxIDMK
IyA2NCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0
cy9zdGxfcmF3X3N0b3JhZ2VfaXRlci5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgoKICB0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgogIGNsYXNzIHJhd19zdG9yYWdl
X2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lk
LCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfRm9yd2FyZEl0
ZXJhdG9yIF9NX2l0ZXI7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICByYXdfc3Rv
cmFnZV9pdGVyYXRvcihfRm9yd2FyZEl0ZXJhdG9yIF9feCkgOiBfTV9pdGVyKF9feCkge30KCiAg
ICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhp
czsgfQoKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShjb25zdCBf
VHAmIF9fZWxlbWVudCkKICAgICAgewogICAgICAgIF9Db25zdHJ1Y3QoJipfTV9pdGVyLCBfX2Vs
ZW1lbnQpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgcmF3X3N0b3JhZ2Vf
aXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiYKICAgICAgb3BlcmF0b3IrKygpCiAgICAg
IHsKICAgICAgICArK19NX2l0ZXI7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAg
ICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+CiAgICAgIG9wZXJh
dG9yKysoaW50KQogICAgICB7CiAgICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJ
dGVyYXRvciwgX1RwPiBfX3RtcCA9ICp0aGlzOwogICAgICAgICsrX01faXRlcjsKICAgICAgICBy
ZXR1cm4gX190bXA7CiAgICAgIH0KICAgIH07Cn0KIyA2MCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9n
Y2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvbWVtb3J5IiAyIDMKCgoKCm5hbWVzcGFjZSBzdGQK
ewojIDc0ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9t
ZW1vcnkiIDMKdGVtcGxhdGUgPHR5cGVuYW1lIF9UcD4KcGFpcjxfVHAqLCBwdHJkaWZmX3Q+Cl9f
Z2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuLCBfVHAqKQp7CiAgaWYgKF9fbGVu
ID4gcHRyZGlmZl90KDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAgICBfX2xlbiA9IDIxNDc0
ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX1RwKiBfX3Rt
cCA9IChfVHAqKSBzdGQ6Om1hbGxvYygoc3RkOjpzaXplX3QpX19sZW4gKiBzaXplb2YoX1RwKSk7
CiAgICBpZiAoX190bXAgIT0gMCkKICAgICAgcmV0dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90Pihf
X3RtcCwgX19sZW4pOwogICAgX19sZW4gLz0gMjsKICB9CgogIHJldHVybiBwYWlyPF9UcCosIHB0
cmRpZmZfdD4oKF9UcCopMCwgMCk7Cn0KIyAxMDYgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMu
Mi4xL2luY2x1ZGUvYysrLzMuMi4xL21lbW9yeSIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg
aW5saW5lIHBhaXI8X1RwKixwdHJkaWZmX3Q+CiAgZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlm
Zl90IF9fbGVuKQogIHsKICAgIHJldHVybiBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKF9fbGVuLCAo
X1RwKikgMCk7CiAgfQojIDEyMCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVk
ZS9jKysvMy4yLjEvbWVtb3J5IiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICB2b2lkCiAgcmV0
dXJuX3RlbXBvcmFyeV9idWZmZXIoX1RwKiBfX3ApCiAgewogICAgc3RkOjpmcmVlKF9fcCk7CiAg
fQojIDEzNSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEv
bWVtb3J5IiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgc3RydWN0IGF1dG9fcHRyX3JlZgp7
CiAgIF9UcDEqIF9NX3B0cjsKCiAgIGV4cGxpY2l0CiAgIGF1dG9fcHRyX3JlZihfVHAxKiBfX3Ap
CiAgIDogX01fcHRyKF9fcCkge30KfTsKIyAxNzUgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMu
Mi4xL2luY2x1ZGUvYysrLzMuMi4xL21lbW9yeSIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg
Y2xhc3MgYXV0b19wdHIKewpwcml2YXRlOgogIF9UcCogX01fcHRyOwoKcHVibGljOgoKICB0eXBl
ZGVmIF9UcCBlbGVtZW50X3R5cGU7CgoKCgoKCgogIGV4cGxpY2l0CiAgYXV0b19wdHIoZWxlbWVu
dF90eXBlKiBfX3AgPSAwKSB0aHJvdygpCiAgOiBfTV9wdHIoX19wKSB7IH0KIyAyMDIgIi91c3Iv
bG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL21lbW9yeSIgMwogIGF1
dG9fcHRyKGF1dG9fcHRyJiBfX2EpIHRocm93KCkKICA6IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7
IH0KIyAyMTQgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4x
L21lbW9yeSIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICBhdXRvX3B0cihhdXRvX3B0
cjxfVHAxPiYgX19hKSB0aHJvdygpCiAgICA6IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7IH0KIyAy
MjYgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL21lbW9y
eSIgMwogIGF1dG9fcHRyJgogIG9wZXJhdG9yPShhdXRvX3B0ciYgX19hKSB0aHJvdygpCiAgICB7
CiAgICAgIHJlc2V0KF9fYS5yZWxlYXNlKCkpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiMg
MjQzICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9tZW1v
cnkiIDMKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwMT4KICAgIGF1dG9fcHRyJgogICAgb3BlcmF0
b3I9KGF1dG9fcHRyPF9UcDE+JiBfX2EpIHRocm93KCkKICAgIHsKICAgICAgcmVzZXQoX19hLnJl
bGVhc2UoKSk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KIyAyNjMgIi91c3IvbG9jYWwvcHJv
ZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL21lbW9yeSIgMwogIH5hdXRvX3B0cigp
IHsgZGVsZXRlIF9NX3B0cjsgfQojIDI3MyAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEv
aW5jbHVkZS9jKysvMy4yLjEvbWVtb3J5IiAzCiAgZWxlbWVudF90eXBlJgogIG9wZXJhdG9yKigp
IGNvbnN0IHRocm93KCkgeyByZXR1cm4gKl9NX3B0cjsgfQoKCgoKCgoKICBlbGVtZW50X3R5cGUq
CiAgb3BlcmF0b3ItPigpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gX01fcHRyOyB9CiMgMjk1ICIv
dXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9tZW1vcnkiIDMK
ICBlbGVtZW50X3R5cGUqCiAgZ2V0KCkgY29uc3QgdGhyb3coKSB7IHJldHVybiBfTV9wdHI7IH0K
IyAzMDkgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL21l
bW9yeSIgMwogIGVsZW1lbnRfdHlwZSoKICByZWxlYXNlKCkgdGhyb3coKQogICAgewogICAgICBl
bGVtZW50X3R5cGUqIF9fdG1wID0gX01fcHRyOwogICAgICBfTV9wdHIgPSAwOwogICAgICByZXR1
cm4gX190bXA7CiAgICB9CiMgMzI0ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNs
dWRlL2MrKy8zLjIuMS9tZW1vcnkiIDMKICB2b2lkCiAgcmVzZXQoZWxlbWVudF90eXBlKiBfX3Ag
PSAwKSB0aHJvdygpCiAgICB7CiAgICAgIGlmIChfX3AgIT0gX01fcHRyKQogICAgICAgIHsKICAg
ICAgICAgIGRlbGV0ZSBfTV9wdHI7CiAgICAgICAgICBfTV9wdHIgPSBfX3A7CiAgICAgICAgfQog
ICAgfQojIDM0NSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4y
LjEvbWVtb3J5IiAzCiAgYXV0b19wdHIoYXV0b19wdHJfcmVmPGVsZW1lbnRfdHlwZT4gX19yZWYp
IHRocm93KCkKICAgIDogX01fcHRyKF9fcmVmLl9NX3B0cikge30KCiAgYXV0b19wdHImCiAgb3Bl
cmF0b3I9KGF1dG9fcHRyX3JlZjxlbGVtZW50X3R5cGU+IF9fcmVmKSB0aHJvdygpCiAgICB7CiAg
ICAgIGlmIChfX3JlZi5fTV9wdHIgIT0gdGhpcy0+Z2V0KCkpCiAgICAgICAgewogICAgICAgICAg
ZGVsZXRlIF9NX3B0cjsKICAgICAgICAgIF9NX3B0ciA9IF9fcmVmLl9NX3B0cjsKICAgICAgICB9
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAg
IG9wZXJhdG9yIGF1dG9fcHRyX3JlZjxfVHAxPigpIHRocm93KCkKICAgICAgeyByZXR1cm4gYXV0
b19wdHJfcmVmPF9UcDE+KHRoaXMtPnJlbGVhc2UoKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwMT4KICAgIG9wZXJhdG9yIGF1dG9fcHRyPF9UcDE+KCkgdGhyb3coKQogICAgICB7IHJldHVy
biBhdXRvX3B0cjxfVHAxPih0aGlzLT5yZWxlYXNlKCkpOyB9Cgp9OwoKfQojIDQ5ICIvdXNyL2xv
Y2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9zdHJpbmciIDIgMwoKCgoK
IyAxICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRz
L2Jhc2ljX3N0cmluZy5oIiAxIDMKIyA0NCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEv
aW5jbHVkZS9jKysvMy4yLjEvYml0cy9iYXNpY19zdHJpbmcuaCIgMwoKIyAxICIvdXNyL2xvY2Fs
L3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9zcGFyYy1zdW4tc29sYXJpczIu
OC9iaXRzL2F0b21pY2l0eS5oIiAxIDMKIyA3NCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4y
LjEvaW5jbHVkZS9jKysvMy4yLjEvc3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0cy9hdG9taWNpdHku
aCIgMwp0eXBlZGVmIGludCBfQXRvbWljX3dvcmQ7Cgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kc3Ry
dWN0IF9fQXRvbWljaXR5X2xvY2sKewogIHN0YXRpYyB1bnNpZ25lZCBjaGFyIF9TX2F0b21pY2l0
eV9sb2NrOwp9OwoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnVuc2lnbmVkIGNoYXIgX19BdG9taWNp
dHlfbG9jazxfX2luc3Q+OjpfU19hdG9taWNpdHlfbG9jayA9IDA7Cgp0ZW1wbGF0ZSB1bnNpZ25l
ZCBjaGFyIF9fQXRvbWljaXR5X2xvY2s8MD46Ol9TX2F0b21pY2l0eV9sb2NrOwoKc3RhdGljIGlu
dApfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCl9fZXhjaGFuZ2VfYW5kX2FkZCAodm9sYXRp
bGUgX0F0b21pY193b3JkKiBfX21lbSwgaW50IF9fdmFsKQp7CiAgX0F0b21pY193b3JkIF9fcmVz
dWx0LCBfX3RtcDsKCiAgX19hc21fXyBfX3ZvbGF0aWxlX18oIjE6CWxkc3R1YglbJTFdLCAlMFxu
XHQiCiAgICAgICAgICAgICAgICAgICAgICAgIgljbXAJJTAsIDBcblx0IgogICAgICAgICAgICAg
ICAgICAgICAgICIJYm5lCTFiXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAiCSBub3AiCiAg
ICAgICAgICAgICAgICAgICAgICAgOiAiPSZyIiAoX190bXApCiAgICAgICAgICAgICAgICAgICAg
ICAgOiAiciIgKCZfX0F0b21pY2l0eV9sb2NrPDA+OjpfU19hdG9taWNpdHlfbG9jaykKICAgICAg
ICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKICBfX3Jlc3VsdCA9ICpfX21lbTsKICAqX19t
ZW0gKz0gX192YWw7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YgklJWcwLCBbJTBdIgogICAg
ICAgICAgICAgICAgICAgICAgIDoKICAgICAgICAgICAgICAgICAgICAgICA6ICJyIiAoJl9fQXRv
bWljaXR5X2xvY2s8MD46Ol9TX2F0b21pY2l0eV9sb2NrKQogICAgICAgICAgICAgICAgICAgICAg
IDogIm1lbW9yeSIpOwogIHJldHVybiBfX3Jlc3VsdDsKfQoKc3RhdGljIHZvaWQKX19hdHRyaWJ1
dGVfXyAoKF9fdW51c2VkX18pKQpfX2F0b21pY19hZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCog
X19tZW0sIGludCBfX3ZhbCkKewogIF9BdG9taWNfd29yZCBfX3RtcDsKCiAgX19hc21fXyBfX3Zv
bGF0aWxlX18oIjE6CWxkc3R1YglbJTFdLCAlMFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAg
IgljbXAJJTAsIDBcblx0IgogICAgICAgICAgICAgICAgICAgICAgICIJYm5lCTFiXG5cdCIKICAg
ICAgICAgICAgICAgICAgICAgICAiCSBub3AiCiAgICAgICAgICAgICAgICAgICAgICAgOiAiPSZy
IiAoX190bXApCiAgICAgICAgICAgICAgICAgICAgICAgOiAiciIgKCZfX0F0b21pY2l0eV9sb2Nr
PDA+OjpfU19hdG9taWNpdHlfbG9jaykKICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnki
KTsKICAqX19tZW0gKz0gX192YWw7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YgklJWcwLCBb
JTBdIgogICAgICAgICAgICAgICAgICAgICAgIDoKICAgICAgICAgICAgICAgICAgICAgICA6ICJy
IiAoJl9fQXRvbWljaXR5X2xvY2s8MD46Ol9TX2F0b21pY2l0eV9sb2NrKQogICAgICAgICAgICAg
ICAgICAgICAgIDogIm1lbW9yeSIpOwp9CiMgNDYgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMu
Mi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDIgMwoKbmFtZXNwYWNl
IHN0ZAp7CiMgODggIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMu
Mi4xL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGJhc2ljX3N0cmluZwog
ICAgewoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZSB2YWx1ZV90eXBlOwogICAgICB0
eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxs
b2M6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpk
aWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9B
bGxvYzo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6
OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X0FsbG9jOjpwb2ludGVyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpj
b25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX25v
cm1hbF9pdGVyYXRvcjxwb2ludGVyLCBiYXNpY19zdHJpbmc+IGl0ZXJhdG9yOwogICAgICB0eXBl
ZGVmIF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwgYmFzaWNfc3Ry
aW5nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdF9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNv
bnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVy
c2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgogICAgcHJpdmF0ZToKIyAx
MjMgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMv
YmFzaWNfc3RyaW5nLmgiIDMKICAgICAgc3RydWN0IF9SZXAKICAgICAgewoKICAgICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPGNoYXI+OjpvdGhlciBfUmF3X2J5
dGVzX2FsbG9jOwojIDE0MSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9j
KysvMy4yLjEvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICAgIHN0YXRpYyBjb25zdCBzaXpl
X3R5cGUgX1NfbWF4X3NpemU7CiAgICAgICAgc3RhdGljIGNvbnN0IF9DaGFyVCBfU190ZXJtaW5h
bDsKCiAgICAgICAgc2l6ZV90eXBlIF9NX2xlbmd0aDsKICAgICAgICBzaXplX3R5cGUgX01fY2Fw
YWNpdHk7CiAgICAgICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7CgogICAgICAgIGJvb2wK
ICAgICAgICBfTV9pc19sZWFrZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5j
ZXMgPCAwOyB9CgogICAgICAgIGJvb2wKICAgICAgICBfTV9pc19zaGFyZWQoKSBjb25zdAogICAg
ICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMgPiAwOyB9CgogICAgICAgIHZvaWQKICAgICAgICBf
TV9zZXRfbGVha2VkKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAtMTsgfQoKICAgICAgICB2
b2lkCiAgICAgICAgX01fc2V0X3NoYXJhYmxlKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAw
OyB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9yZWZkYXRhKCkgdGhyb3coKQogICAgICAg
IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8X0NoYXJUKj4odGhpcyArIDEpOyB9CgogICAgICAg
IF9DaGFyVCYKICAgICAgICBvcGVyYXRvcltdKHNpemVfdCBfX3MpIHRocm93KCkKICAgICAgICB7
IHJldHVybiBfTV9yZWZkYXRhKCkgW19fc107IH0KCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9N
X2dyYWIoY29uc3QgX0FsbG9jJiBfX2FsbG9jMSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jMikKICAg
ICAgICB7CiAgICAgICAgICByZXR1cm4gKCFfTV9pc19sZWFrZWQoKSAmJiBfX2FsbG9jMSA9PSBf
X2FsbG9jMikKICAgICAgICAgICAgICAgICAgPyBfTV9yZWZjb3B5KCkgOiBfTV9jbG9uZShfX2Fs
bG9jMSk7CiAgICAgICAgfQoKCiAgICAgICAgc3RhdGljIF9SZXAqCiAgICAgICAgX1NfY3JlYXRl
KHNpemVfdCwgY29uc3QgX0FsbG9jJik7CgogICAgICAgIHZvaWQKICAgICAgICBfTV9kaXNwb3Nl
KGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX2V4Y2hhbmdlX2Fu
ZF9hZGQoJl9NX3JlZmVyZW5jZXMsIC0xKSA8PSAwKQogICAgICAgICAgICBfTV9kZXN0cm95KF9f
YSk7CiAgICAgICAgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01fZGVzdHJveShjb25zdCBfQWxs
b2MmKSB0aHJvdygpOwoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fcmVmY29weSgpIHRocm93
KCkKICAgICAgICB7CiAgICAgICAgICBfX2F0b21pY19hZGQoJl9NX3JlZmVyZW5jZXMsIDEpOwog
ICAgICAgICAgcmV0dXJuIF9NX3JlZmRhdGEoKTsKICAgICAgICB9CgogICAgICAgIF9DaGFyVCoK
ICAgICAgICBfTV9jbG9uZShjb25zdCBfQWxsb2MmLCBzaXplX3R5cGUgX19yZXMgPSAwKTsKICAg
ICAgfTsKCgogICAgICBzdHJ1Y3QgX0FsbG9jX2hpZGVyIDogX0FsbG9jCiAgICAgIHsKICAgICAg
ICBfQWxsb2NfaGlkZXIoX0NoYXJUKiBfX2RhdCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAg
OiBfQWxsb2MoX19hKSwgX01fcChfX2RhdCkgeyB9CgogICAgICAgIF9DaGFyVCogX01fcDsKICAg
ICAgfTsKCiAgICBwdWJsaWM6CgoKCiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgbnBvcyA9
IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpOwoKICAgIHByaXZhdGU6CgogICAgICBtdXRhYmxl
IF9BbGxvY19oaWRlciBfTV9kYXRhcGx1czsKCgoKICAgICAgc3RhdGljIHNpemVfdHlwZSBfU19l
bXB0eV9yZXBfc3RvcmFnZVsoc2l6ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yo
c2l6ZV90eXBlKSAtIDEpL3NpemVvZihzaXplX3R5cGUpXTsKCiAgICAgIF9DaGFyVCoKICAgICAg
X01fZGF0YSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RhdGFwbHVzLl9NX3A7IH0KCiAgICAg
IF9DaGFyVCoKICAgICAgX01fZGF0YShfQ2hhclQqIF9fcCkKICAgICAgeyByZXR1cm4gKF9NX2Rh
dGFwbHVzLl9NX3AgPSBfX3ApOyB9CgogICAgICBfUmVwKgogICAgICBfTV9yZXAoKSBjb25zdAog
ICAgICB7IHJldHVybiAmKChyZWludGVycHJldF9jYXN0PF9SZXAqPiAoX01fZGF0YSgpKSlbLTFd
KTsgfQoKCgogICAgICBpdGVyYXRvcgogICAgICBfTV9pYmVnaW4oKSBjb25zdCB7IHJldHVybiBp
dGVyYXRvcihfTV9kYXRhKCkpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBfTV9pZW5kKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAg
dm9pZAogICAgICBfTV9sZWFrKCkKICAgICAgewogICAgICAgIGlmICghX01fcmVwKCktPl9NX2lz
X2xlYWtlZCgpKQogICAgICAgICAgX01fbGVha19oYXJkKCk7CiAgICAgIH0KCiAgICAgIGl0ZXJh
dG9yCiAgICAgIF9NX2NoZWNrKHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgICAgewogICAgICAg
IGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3Jhbmdl
KCJiYXNpY19zdHJpbmc6Ol9NX2NoZWNrIik7CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsg
X19wb3M7CiAgICAgIH0KCgogICAgICBpdGVyYXRvcgogICAgICBfTV9mb2xkKHNpemVfdHlwZSBf
X3Bvcywgc2l6ZV90eXBlIF9fb2ZmKSBjb25zdAogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3Rv
ZmYgPSBfX29mZiA8IHRoaXMtPnNpemUoKSAtIF9fcG9zOwogICAgICAgIHNpemVfdHlwZSBfX25l
d29mZiA9IF9fdGVzdG9mZiA/IF9fb2ZmIDogdGhpcy0+c2l6ZSgpIC0gX19wb3M7CiAgICAgICAg
cmV0dXJuIChfTV9pYmVnaW4oKSArIF9fcG9zICsgX19uZXdvZmYpOwogICAgICB9CgoKCiAgICAg
IHRlbXBsYXRlPGNsYXNzIF9JdGVyYXRvcj4KICAgICAgICBzdGF0aWMgdm9pZAogICAgICAgIF9T
X2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9JdGVyYXRvciBfX2sxLCBfSXRlcmF0b3IgX19rMikK
ICAgICAgICB7CiAgICAgICAgICBmb3IgKDsgX19rMSAhPSBfX2syOyArK19fazEsICsrX19wKQog
ICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX3AsICpfX2sxKTsKICAgICAgICB9Cgog
ICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBpdGVyYXRv
ciBfX2sxLCBpdGVyYXRvciBfX2syKQogICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJh
c2UoKSwgX19rMi5iYXNlKCkpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2No
YXJzKF9DaGFyVCogX19wLCBjb25zdF9pdGVyYXRvciBfX2sxLCBjb25zdF9pdGVyYXRvciBfX2sy
KQogICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9
CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBfQ2hh
clQqIF9fazEsIF9DaGFyVCogX19rMikKICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9f
azEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFy
cyhfQ2hhclQqIF9fcCwgY29uc3QgX0NoYXJUKiBfX2sxLCBjb25zdCBfQ2hhclQqIF9fazIpCiAg
ICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0KCiAgICAg
IHZvaWQKICAgICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwg
c2l6ZV90eXBlIF9fbGVuMik7CgogICAgICB2b2lkCiAgICAgIF9NX2xlYWtfaGFyZCgpOwoKICAg
ICAgc3RhdGljIF9SZXAmCiAgICAgIF9TX2VtcHR5X3JlcCgpCiAgICAgIHsgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PF9SZXAqPigmX1NfZW1wdHlfcmVwX3N0b3JhZ2UpOyB9CgogICAgcHVibGlj
OgoKCgoKICAgICAgaW5saW5lCiAgICAgIGJhc2ljX3N0cmluZygpOwoKICAgICAgZXhwbGljaXQK
ICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9BbGxvYyYgX19hKTsKCgogICAgICBiYXNpY19zdHJp
bmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBi
YXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICBz
aXplX3R5cGUgX19uID0gbnBvcyk7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJp
bmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUg
X19uLCBjb25zdCBfQWxsb2MmIF9fYSk7CgogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJU
KiBfX3MsIHNpemVfdHlwZSBfX24sCiAgICAgICAgICAgICAgICAgICBjb25zdCBfQWxsb2MmIF9f
YSA9IF9BbGxvYygpKTsKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBjb25z
dCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKICAgICAgYmFzaWNfc3RyaW5nKHNpemVfdHlwZSBf
X24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwoKICAgICAgdGVt
cGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0
ZXJhdG9yIF9fYmVnLCBfSW5wdXRJdGVyYXRvciBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CgogICAgICB+YmFzaWNfc3RyaW5nKCkKICAg
ICAgeyBfTV9yZXAoKS0+X01fZGlzcG9zZSh0aGlzLT5nZXRfYWxsb2NhdG9yKCkpOyB9CgogICAg
ICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3Ry
KSB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zdHIpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAg
ICAgIG9wZXJhdG9yPShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9f
cyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2MpIHsg
cmV0dXJuIHRoaXMtPmFzc2lnbigxLCBfX2MpOyB9CgoKICAgICAgaXRlcmF0b3IKICAgICAgYmVn
aW4oKQogICAgICB7CiAgICAgICAgX01fbGVhaygpOwogICAgICAgIHJldHVybiBpdGVyYXRvcihf
TV9kYXRhKCkpOwogICAgICB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBiZWdpbigpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSk7IH0KCiAgICAgIGl0
ZXJhdG9yCiAgICAgIGVuZCgpCiAgICAgIHsKICAgICAgICAgX01fbGVhaygpOwogICAgICAgICBy
ZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsKICAgICAgfQoKICAgICAg
Y29uc3RfaXRlcmF0b3IKICAgICAgZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfaXRl
cmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRv
cgogICAgICByYmVnaW4oKQogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVu
ZCgpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKSBjb25z
dAogICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsgfQoK
ICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkKICAgICAgeyByZXR1cm4gcmV2ZXJz
ZV9pdGVyYXRvcih0aGlzLT5iZWdpbigpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRv
cgogICAgICByZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRv
cih0aGlzLT5iZWdpbigpKTsgfQoKICAgIHB1YmxpYzoKCiAgICAgIHNpemVfdHlwZQogICAgICBz
aXplKCkgY29uc3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2xlbmd0aDsgfQoKICAgICAgc2l6ZV90
eXBlCiAgICAgIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0K
CiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9SZXA6Ol9T
X21heF9zaXplOyB9CgogICAgICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hh
clQgX19jKTsKCiAgICAgIHZvaWQKICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24pIHsgdGhpcy0+
cmVzaXplKF9fbiwgX0NoYXJUKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgY2FwYWNpdHko
KSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01fY2FwYWNpdHk7IH0KCiAgICAgIHZvaWQKICAg
ICAgcmVzZXJ2ZShzaXplX3R5cGUgX19yZXNfYXJnID0gMCk7CgogICAgICB2b2lkCiAgICAgIGNs
ZWFyKCkgeyBfTV9tdXRhdGUoMCwgdGhpcy0+c2l6ZSgpLCAwKTsgfQoKICAgICAgYm9vbAogICAg
ICBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPnNpemUoKSA9PSAwOyB9CgoKICAgICAgY29u
c3RfcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10gKHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAg
ICAgeyByZXR1cm4gX01fZGF0YSgpW19fcG9zXTsgfQoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9w
ZXJhdG9yW10oc2l6ZV90eXBlIF9fcG9zKQogICAgICB7CiAgICAgICAgX01fbGVhaygpOwogICAg
ICAgIHJldHVybiBfTV9kYXRhKClbX19wb3NdOwogICAgICB9CgogICAgICBjb25zdF9yZWZlcmVu
Y2UKICAgICAgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX24g
Pj0gdGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0
cmluZzo6YXQiKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fbl07CiAgICAgIH0KCiAgICAg
IHJlZmVyZW5jZQogICAgICBhdChzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgaWYgKF9f
biA+PSBzaXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5n
OjphdCIpOwogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fbl07
CiAgICAgIH0KCgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgYmFz
aWNfc3RyaW5nJiBfX3N0cikgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fc3RyKTsgfQoKICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KGNvbnN0IF9DaGFyVCogX19zKSB7IHJldHVy
biB0aGlzLT5hcHBlbmQoX19zKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRv
cis9KF9DaGFyVCBfX2MpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChzaXplX3R5cGUoMSksIF9fYyk7
IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYg
X19zdHIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3Ry
aW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKTsKCiAgICAgIGJhc2lj
X3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKTsK
CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zKQogICAg
ICB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9
CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChzaXplX3R5cGUgX19uLCBfQ2hhclQg
X19jKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2lj
X3N0cmluZyYKICAgICAgICBhcHBlbmQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl
cmF0b3IgX19sYXN0KQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBf
TV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIHZvaWQKICAgICAgcHVzaF9iYWNr
KF9DaGFyVCBfX2MpCiAgICAgIHsgdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwg
MSwgX19jKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNf
c3RyaW5nJiBfX3N0cik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBi
YXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICAg
IHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAg
ICAgIGlmIChfX3BvcyA+IF9fc3Ryc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3Jhbmdl
KCJiYXNpY19zdHJpbmc6OmFzc2lnbiIpOwogICAgICAgIGNvbnN0IGJvb2wgX190ZXN0biA9IF9f
biA8IF9fc3Ryc2l6ZSAtIF9fcG9zOwogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld3NpemUg
PSBfX3Rlc3RuID8gX19uIDogX19zdHJzaXplIC0gX19wb3M7CiAgICAgICAgcmV0dXJuIHRoaXMt
PmFzc2lnbihfX3N0ci5fTV9kYXRhKCkgKyBfX3BvcywgX19uZXdzaXplKTsKICAgICAgfQoKICAg
ICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw
ZSBfX24pCiAgICAgIHsKICAgICAgICBpZiAoX19uID4gdGhpcy0+bWF4X3NpemUoKSkKICAgICAg
ICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OmFzc2lnbiIpOwogICAgICAg
IGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9f
cywgX01fZGF0YSgpKQogICAgICAgICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0
YSgpICsgdGhpcy0+c2l6ZSgpLCBfX3MpKQogICAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2Fm
ZShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX3MsIF9fcyArIF9fbik7CiAgICAgICAgZWxzZQog
ICAgICAgICAgewoKICAgICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcG9zID0gX19zIC0gX01f
ZGF0YSgpOwogICAgICAgICAgICBpZiAoX19wb3MgPj0gX19uKQogICAgICAgICAgICAgIHRyYWl0
c190eXBlOjpjb3B5KF9NX2RhdGEoKSwgX19zLCBfX24pOwogICAgICAgICAgICBlbHNlIGlmIChf
X3BvcykKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6bW92ZShfTV9kYXRhKCksIF9fcywgX19u
KTsKICAgICAgICAgICAgX01fcmVwKCktPl9NX2xlbmd0aCA9IF9fbjsKICAgICAgICAgICAgX01f
ZGF0YSgpW19fbl0gPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgICAgICAgfQogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihj
b25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcywgdHJhaXRz
X3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24o
c2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShf
TV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX24sIF9fYyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBhc3NpZ24oX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsgcmV0
dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19maXJzdCwgX19sYXN0
KTsgfQoKICAgICAgdm9pZAogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBzaXplX3R5cGUgX19u
LCBfQ2hhclQgX19jKQogICAgICB7IHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fbiwgX19jKTsg
fQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgdm9pZCBpbnNl
cnQoaXRlcmF0b3IgX19wLCBfSW5wdXRJdGVyYXRvciBfX2JlZywgX0lucHV0SXRlcmF0b3IgX19l
bmQpCiAgICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX2JlZywgX19lbmQpOyB9Cgog
ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBi
YXNpY19zdHJpbmcmIF9fc3RyKQogICAgICB7IHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MxLCBf
X3N0ciwgMCwgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNl
cnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAg
ICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjb25z
dCBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICAgIGlmIChfX3BvczIg
PiBfX3N0cnNpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5n
OjppbnNlcnQiKTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4gPSBfX24gPCBfX3N0cnNpemUg
LSBfX3BvczI7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3c2l6ZSA9IF9fdGVzdG4gPyBf
X24gOiBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAgICAgcmV0dXJuIHRoaXMtPmluc2VydChfX3Bv
czEsIF9fc3RyLl9NX2RhdGEoKSArIF9fcG9zMiwgX19uZXdzaXplKTsKICAgICAgfQoKICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQq
IF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3Np
emUgPSB0aGlzLT5zaXplKCk7CiAgICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgICAg
X190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6aW5zZXJ0Iik7CiAgICAgICAgaWYg
KF9fc2l6ZSA+IHRoaXMtPm1heF9zaXplKCkgLSBfX24pCiAgICAgICAgICBfX3Rocm93X2xlbmd0
aF9lcnJvcigiYmFzaWNfc3RyaW5nOjppbnNlcnQiKTsKICAgICAgICBpZiAoX01fcmVwKCktPl9N
X2lzX3NoYXJlZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAg
ICAgICAgICAgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIF9fc2l6ZSwgX19z
KSkKICAgICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCkgKyBfX3Bvcywg
X01faWJlZ2luKCkgKyBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19z
LCBfX3MgKyBfX24pOwogICAgICAgIGVsc2UKICAgICAgICAgIHsKCgoKICAgICAgICAgICAgY29u
c3Qgc2l6ZV90eXBlIF9fb2ZmID0gX19zIC0gX01fZGF0YSgpOwogICAgICAgICAgICBfTV9tdXRh
dGUoX19wb3MsIDAsIF9fbik7CiAgICAgICAgICAgIF9fcyA9IF9NX2RhdGEoKSArIF9fb2ZmOwog
ICAgICAgICAgICBfQ2hhclQqIF9fcCA9IF9NX2RhdGEoKSArIF9fcG9zOwogICAgICAgICAgICBp
ZiAoX19zICsgX19uIDw9IF9fcCkKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3As
IF9fcywgX19uKTsKICAgICAgICAgICAgZWxzZSBpZiAoX19zID49IF9fcCkKICAgICAgICAgICAg
ICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcyArIF9fbiwgX19uKTsKICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCwg
X19zLCBfX3AgLSBfX3MpOwogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wICsg
KF9fcCAtIF9fcyksIF9fcCArIF9fbiwgX19uIC0gKF9fcCAtIF9fcykpOwogICAgICAgICAgICAg
IH0KICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICAgfQogICAgICAgfQoKICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQq
IF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zLCBfX3MsIHRyYWl0c190eXBl
OjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVf
dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgewogICAgICAgIHRo
aXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIF9fbiwgX19jKTsKICAgICAgICByZXR1cm4gKnRo
aXM7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9D
aGFyVCBfX2MgPSBfQ2hhclQoKSkKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX3BvcyA9IF9f
cCAtIF9NX2liZWdpbigpOwogICAgICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIHNp
emVfdHlwZSgxKSwgX19jKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAg
ICAgIHJldHVybiB0aGlzLT5fTV9pYmVnaW4oKSArIF9fcG9zOwogICAgICB9CgogICAgICBiYXNp
Y19zdHJpbmcmCiAgICAgIGVyYXNlKHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24g
PSBucG9zKQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19w
b3MpLCBfTV9mb2xkKF9fcG9zLCBfX24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9N
X2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZXJhc2Uo
aXRlcmF0b3IgX19wb3NpdGlvbikKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX3Bv
c2l0aW9uIC0gX01faWJlZ2luKCk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3Bvc2l0aW9uLCBf
X3Bvc2l0aW9uICsgMSwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICAgIF9NX3JlcCgpLT5f
TV9zZXRfbGVha2VkKCk7CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19pOwogICAgICB9
CgogICAgICBpdGVyYXRvcgogICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBf
X2xhc3QpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19pID0gX19maXJzdCAtIF9NX2liZWdp
bigpOwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19maXJzdCwgX19sYXN0LCBfTV9kYXRhKCksIF9N
X2RhdGEoKSk7CiAgICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgIHJldHVy
biBfTV9pYmVnaW4oKSArIF9faTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBy
ZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5n
JiBfX3N0cikKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3BvcywgX19uLCBfX3N0ci5f
TV9kYXRhKCksIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVw
bGFjZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5n
JiBfX3N0ciwKICAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMik7
CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXpl
X3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9f
bjIpCiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgp
OwogICAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3Jh
bmdlKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4x
ID0gX19uMSA8IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2ZvbGRu
MSA9IF9fdGVzdG4xID8gX19uMSA6IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgIGlmIChfX3NpemUg
LSBfX2ZvbGRuMSA+IHRoaXMtPm1heF9zaXplKCkgLSBfX24yKQogICAgICAgICAgX190aHJvd19s
ZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAgICAgIGlmIChfTV9yZXAo
KS0+X01faXNfc2hhcmVkKCkgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9fcywgX01fZGF0YSgp
KQogICAgICAgICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsgX19zaXpl
LCBfX3MpKQogICAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pYmVnaW4oKSArIF9f
cG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9pYmVnaW4oKSArIF9fcG9z
ICsgX19mb2xkbjEsIF9fcywgX19zICsgX19uMik7CgogICAgICAgIGVsc2UgcmV0dXJuCiAgICAg
ICAgICAgICAgIF9NX3JlcGxhY2UoX01faWJlZ2luKCkgKyBfX3BvcywgX01faWJlZ2luKCkgKyBf
X3BvcyArIF9fZm9sZG4xLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgX19u
MiwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8Y29u
c3QgX0NoYXJUKj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOwogICAgICB9CgogICAgICBiYXNpY19z
dHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29u
c3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MsIF9fbjEs
IF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgog
ICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIHNpemVfdHlwZSBf
X24yLCBfQ2hhclQgX19jKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9f
cG9zKSwgX01fZm9sZChfX3BvcywgX19uMSksIF9fbjIsIF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0
cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdCBi
YXNpY19zdHJpbmcmIF9fc3RyKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9f
aTIsIF9fc3RyLl9NX2RhdGEoKSwgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5n
JgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgICB7
IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsIF9f
cywgX19uKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9f
aTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlz
LT5yZXBsYWNlKF9faTEsIF9faTIsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoK
ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9y
IF9faTIsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3Mg
X0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIHJlcGxhY2UoaXRl
cmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwKICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9y
IF9fazEsIF9JbnB1dEl0ZXJhdG9yIF9fazIpCiAgICAgICAgeyByZXR1cm4gX01fcmVwbGFjZShf
X2kxLCBfX2kyLCBfX2sxLCBfX2syLAogICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSk7IH0KCgoKICAgICAgYmFz
aWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9D
aGFyVCogX19rMSwgX0NoYXJUKiBfX2syKQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2Uo
X19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBy
ZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IF9DaGFyVCogX19rMSwg
Y29uc3QgX0NoYXJUKiBfX2syKQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAt
IF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNl
KGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGl0ZXJhdG9yIF9fazEsIGl0ZXJhdG9yIF9f
azIpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9f
aTIgLSBfX2kxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19rMS5iYXNlKCksIF9f
azIgLSBfX2sxKTsKICAgICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uo
aXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3RfaXRlcmF0b3IgX19rMSwgY29uc3Rf
aXRlcmF0b3IgX19rMikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9p
YmVnaW4oKSwgX19pMiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sx
LmJhc2UoKSwgX19rMiAtIF9fazEpOwogICAgICAgIH0KCiAgICBwcml2YXRlOgogICAgICB0ZW1w
bGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAg
X01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVyYXRvciBf
X2sxLAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19rMiwgaW5wdXRfaXRlcmF0
b3JfdGFnKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2Vfc2FmZShpdGVyYXRvciBfX2kxLCBpdGVy
YXRvciBfX2kyLCBfRm9yd2FyZEl0ZXJhdG9yIF9fazEsCiAgICAgICAgICAgICAgICAgICBfRm9y
d2FyZEl0ZXJhdG9yIF9fazIpOwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAg
ICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0X2F1eChfSW5JdGVyIF9fYmVn
LCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fZmFsc2VfdHlwZSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSW5JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX1RhZzsKICAgICAgICAg
IHJldHVybiBfU19jb25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EsIF9UYWcoKSk7CiAgICAgICAg
fQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgog
ICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29u
c3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKICAg
ICAgICB7CiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0KHN0YXRpY19jYXN0PHNpemVfdHlw
ZT4oX19iZWcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2YWx1
ZV90eXBlPihfX2VuZCksIF9fYSk7CiAgICAgICAgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lu
SXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVy
IF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICB7CiAgICAg
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9Jbkl0ZXI+OjpfSW50ZWdyYWwgX0lu
dGVncmFsOwogICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdF9hdXgoX19iZWcsIF9fZW5kLCBf
X2EsIF9JbnRlZ3JhbCgpKTsKICAgICAgICB9CgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRl
cj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBf
X2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAg
ICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndkSXRl
cj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChfRndkSXRlciBf
X2JlZywgX0Z3ZEl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAg
ICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgogICAgICBzdGF0aWMgX0NoYXJUKgogICAgICBf
U19jb25zdHJ1Y3Qoc2l6ZV90eXBlIF9fcmVxLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9f
YSk7CgogICAgcHVibGljOgoKICAgICAgc2l6ZV90eXBlCiAgICAgIGNvcHkoX0NoYXJUKiBfX3Ms
IHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0OwoKICAgICAgdm9pZAog
ICAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcyk7CgoK
ICAgICAgY29uc3QgX0NoYXJUKgogICAgICBjX3N0cigpIGNvbnN0CiAgICAgIHsKCiAgICAgICAg
c2l6ZV90eXBlIF9fbiA9IHRoaXMtPnNpemUoKTsKICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWdu
KF9NX2RhdGEoKVtfX25dLCBfUmVwOjpfU190ZXJtaW5hbCk7CiAgICAgICAgcmV0dXJuIF9NX2Rh
dGEoKTsKICAgICAgfQoKICAgICAgY29uc3QgX0NoYXJUKgogICAgICBkYXRhKCkgY29uc3QgeyBy
ZXR1cm4gX01fZGF0YSgpOyB9CgogICAgICBhbGxvY2F0b3JfdHlwZQogICAgICBnZXRfYWxsb2Nh
dG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YXBsdXM7IH0KCiAgICAgIHNpemVfdHlwZQogICAg
ICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24p
IGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBf
X3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+Zmlu
ZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUK
ICAgICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3Ro
KF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5
cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChjb25zdCBi
YXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5yZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9
CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw
ZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgcmZp
bmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19z
KSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUg
X19wb3MgPSBucG9zKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29m
KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19z
dHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3Qg
X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAg
ICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90
eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihf
X3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUK
ICAgICAgZmluZF9maXJzdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fYywgX19wb3MpOyB9CgogICAgICBzaXplX3R5
cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlw
ZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihf
X3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAg
ICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVf
dHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25z
dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19z
KSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoX0NoYXJUIF9fYywgc2l6
ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19j
LCBfX3Bvcyk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25z
dCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0
ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29u
c3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9u
b3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBl
OjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9v
ZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlw
ZQogICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVf
dHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9u
b3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90
eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf
X3BvcywKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uKSBjb25zdDsKICAgICAg
c2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf
dHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9u
b3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6
ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9z
ID0gbnBvcykgY29uc3Q7CgogICAgICBiYXNpY19zdHJpbmcKICAgICAgc3Vic3RyKHNpemVfdHlw
ZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKSBjb25zdAogICAgICB7CiAgICAgICAg
aWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2Uo
ImJhc2ljX3N0cmluZzo6c3Vic3RyIik7CiAgICAgICAgcmV0dXJuIGJhc2ljX3N0cmluZygqdGhp
cywgX19wb3MsIF9fbik7CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJlKGNvbnN0IGJh
c2ljX3N0cmluZyYgX19zdHIpIGNvbnN0CiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19zaXpl
ID0gdGhpcy0+c2l6ZSgpOwogICAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgp
OwogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3NpemUsIF9fb3NpemUpOwoKICAgICAg
ICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpLCBfX3N0ci5kYXRhKCks
IF9fbGVuKTsKICAgICAgICBpZiAoIV9fcikKICAgICAgICAgIF9fciA9IF9fc2l6ZSAtIF9fb3Np
emU7CiAgICAgICAgcmV0dXJuIF9fcjsKICAgICAgfQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUo
c2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3Ry
KSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVf
dHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICAgIHNpemVf
dHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21w
YXJlKGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKCgoKICAgICAgaW50CiAgICAgIGNvbXBhcmUo
c2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0
OwoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u
MSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0
OwogIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZygpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2VtcHR5X3Jl
cCgpLl9NX3JlZmNvcHkoKSwgX0FsbG9jKCkpIHsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHIoX19saHMpOwogICAgICBf
X3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBf
Q2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1Ry
YWl0cyxfQWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJh
aXRzLF9BbGxvYz4KICAgIG9wZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmlu
ZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgIGNv
bnN0IF9DaGFyVCogX19yaHMpCiAgICB7CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4gX19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAg
ICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywgX0NoYXJUIF9fcmhzKQogICAgewogICAgICB0
eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXpl
X3R5cGU7CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBl
bmQoX19zaXplX3R5cGUoMSksIF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xo
cy5jb21wYXJlKF9fcmhzKSA9PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh
dG9yPT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5j
b21wYXJlKF9fbGhzKSA9PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y
PT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAg
ICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21w
YXJlKF9fcmhzKSA9PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9
KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAg
ICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
X3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAg
ICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3Jo
cykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp
bmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykK
ICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpICE9IDA7IH0KCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s
aW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19y
aHMpIDwgMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAg
Y29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwg
MDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgX0NoYXJUKiBf
X2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID4gMDsgfQoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19s
aHMuY29tcGFyZShfX3JocykgPiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh
dG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywK
ICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29t
cGFyZShfX3JocykgPiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihj
b25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShf
X2xocykgPCAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAg
ICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykK
ICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp
bmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAg
IHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUg
Ym9vbAogICAgb3BlcmF0b3I8PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgICBj
b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICB7IHJl
dHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29s
CiAgICBvcGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49
IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29u
c3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBfQ2hhclQqIF9f
bGhzLAogICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA8PSAwOyB9CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JiBfX3JocykKICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAgICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JiBfX29zLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
X1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19p
cywKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19z
dHIsIF9DaGFyVCBfX2RlbGltKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYg
X19pcywKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19zdHIpOwp9CiMgNTQgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysr
LzMuMi4xL3N0cmluZyIgMiAzCgoKCiMgMSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEv
aW5jbHVkZS9jKysvMy4yLjEvYml0cy9iYXNpY19zdHJpbmcudGNjIiAxIDMKIyA0NSAiL3Vzci9s
b2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9iYXNpY19zdHJp
bmcudGNjIiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0IHR5cGVuYW1lIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfUmVwOjpfU19tYXhfc2l6ZSA9ICgo
KG5wb3MgLSBzaXplb2YoX1JlcCkpL3NpemVvZihfQ2hhclQpKSAtIDEpIC8gNDsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBjb25zdCBfQ2hhclQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OgogICAgX1JlcDo6X1NfdGVybWluYWwgPSBfQ2hhclQoKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjb25zdCB0eXBl
bmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Om5wb3M7CgoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5
cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9TX2VtcHR5X3Jl
cF9zdG9yYWdlWwogICAgKHNpemVvZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKHNp
emVfdHlwZSkgLSAxKS9zaXplb2Yoc2l6ZV90eXBlKV07CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRl
PHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICAgIF9DaGFyVCoKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBf
SW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgIGlucHV0
X2l0ZXJhdG9yX3RhZykKICAgICAgewogICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCAmJiBfX2Eg
PT0gX0FsbG9jKCkpCiAgICAgICAgICByZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgp
OwoKICAgICAgICBfQ2hhclQgX19idWZbMTAwXTsKICAgICAgICBzaXplX3R5cGUgX19pID0gMDsK
ICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQgJiYgX19pIDwgc2l6ZW9mKF9fYnVmKSAvIHNp
emVvZihfQ2hhclQpKQogICAgICAgICAgewogICAgICAgICAgICBfX2J1ZltfX2krK10gPSAqX19i
ZWc7CiAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICB9CiAgICAgICAgX1JlcCogX19yID0g
X1JlcDo6X1NfY3JlYXRlKF9faSwgX19hKTsKICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3It
Pl9NX3JlZmRhdGEoKSwgX19idWYsIF9faSk7CiAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2k7
CiAgICAgICAgdHJ5CiAgICAgICAgICB7CgoKCiAgICAgICAgICAgIGZvciAoOzspCiAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgX0NoYXJUKiBfX3AgPSBfX3ItPl9NX3JlZmRhdGEoKSAr
IF9fci0+X01fbGVuZ3RoOwogICAgICAgICAgICAgICAgX0NoYXJUKiBfX2xhc3QgPSBfX3ItPl9N
X3JlZmRhdGEoKSArIF9fci0+X01fY2FwYWNpdHk7CiAgICAgICAgICAgICAgICBmb3IgKDs7KQog
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYgKF9fYmVnID09IF9fZW5k
KQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBfX3ItPl9N
X2xlbmd0aCA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAg
ICAqX19wID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICBpZiAoX19wID09IF9fbGFzdCkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICpfX3ArKyA9ICpfX2JlZzsKICAgICAgICAgICAgICAgICAgICAr
K19fYmVnOwogICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9f
bGVuID0gX19wIC0gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAgICBfUmVwKiBfX2Fu
b3RoZXIgPSBfUmVwOjpfU19jcmVhdGUoX19sZW4gKyAxLCBfX2EpOwogICAgICAgICAgICAgICAg
dHJhaXRzX3R5cGU6OmNvcHkoX19hbm90aGVyLT5fTV9yZWZkYXRhKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3ItPl9NX3JlZmRhdGEoKSwgX19sZW4pOwogICAgICAgICAg
ICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAgICAgICBfX3IgPSBfX2Fub3Ro
ZXI7CiAgICAgICAgICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fbGVuOwogICAgICAgICAgICAg
IH0KICAgICAgICAgIH0KICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICB7CiAgICAgICAgICAg
IF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgICB0aHJvdzsKICAgICAgICAgIH0KICAg
ICAgICByZXR1cm4gMDsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5JdGVy
PgogICAgICBfQ2hhclQqCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OgogICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29u
c3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykK
ICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2RuZXcgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+
KGRpc3RhbmNlKF9fYmVnLCBfX2VuZCkpOwoKICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQgJiYg
X19hID09IF9BbGxvYygpKQogICAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNv
cHkoKTsKCgogICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fYmVnID09IF9Jbkl0ZXIoKSwg
MCkpCiAgICAgICAgICBfX3Rocm93X2xvZ2ljX2Vycm9yKCJhdHRlbXB0IHRvIGNyZWF0ZSBzdHJp
bmcgd2l0aCBudWxsIHBvaW50ZXIiKTsKCgogICAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2Ny
ZWF0ZShfX2RuZXcsIF9fYSk7CiAgICAgICAgdHJ5CiAgICAgICAgICB7IF9TX2NvcHlfY2hhcnMo
X19yLT5fTV9yZWZkYXRhKCksIF9fYmVnLCBfX2VuZCk7IH0KICAgICAgICBjYXRjaCguLi4pCiAg
ICAgICAgICB7CiAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgICB0
aHJvdzsKICAgICAgICAgIH0KICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fZG5ldzsKCiAgICAg
ICAgX19yLT5fTV9yZWZkYXRhKClbX19kbmV3XSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICAg
IHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIF9DaGFyVCoKICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX1NfY29uc3RydWN0
KHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgewogICAg
ICBpZiAoX19uID09IDAgJiYgX19hID09IF9BbGxvYygpKQogICAgICAgIHJldHVybiBfU19lbXB0
eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgoKICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRl
KF9fbiwgX19hKTsKICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgaWYgKF9fbikKICAgICAg
ICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfX3ItPl9NX3JlZmRhdGEoKSwgX19uLCBfX2MpOwog
ICAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9fci0+X01fZGVz
dHJveShfX2EpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICBfX3ItPl9NX2xlbmd0
aCA9IF9fbjsKICAgICAgX19yLT5fTV9yZWZkYXRhKClbX19uXSA9IF9SZXA6Ol9TX3Rlcm1pbmFs
OwogICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3Qg
YmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIDogX01fZGF0YXBsdXMoX19zdHIuX01fcmVwKCktPl9N
X2dyYWIoX0FsbG9jKCksIF9fc3RyLmdldF9hbGxvY2F0b3IoKSksCiAgICAgICAgICAgICAgICAg
X19zdHIuZ2V0X2FsbG9jYXRvcigpKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0FsbG9jJiBf
X2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChzaXplX3R5cGUoKSwgX0NoYXJUKCks
IF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs
IHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAgIDogX01fZGF0YXBsdXMoX1NfY29u
c3RydWN0KF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9BbGxvYygpKSwgX0FsbG9jKCkpCiAgICB7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg
IGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3Ms
CiAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6
IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xkKF9fcG9zLCBfX24pLCBfX2EpLCBf
X2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwg
Y29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3MsIF9f
cyArIF9fbiwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3Ms
IGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zLCBf
X3MgPyBfX3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykgOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19zICsgbnBvcywgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoc2l6
ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFw
bHVzKF9TX2NvbnN0cnVjdChfX24sIF9fYywgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXIgX19iZWcsIF9JbnB1
dEl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25z
dHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6YXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICB7
CiAgICAgIGlmIChfTV9yZXAoKSAhPSBfX3N0ci5fTV9yZXAoKSkKICAgICAgICB7CgogICAgICAg
ICAgYWxsb2NhdG9yX3R5cGUgX19hID0gdGhpcy0+Z2V0X2FsbG9jYXRvcigpOwogICAgICAgICAg
X0NoYXJUKiBfX3RtcCA9IF9fc3RyLl9NX3JlcCgpLT5fTV9ncmFiKF9fYSwgX19zdHIuZ2V0X2Fs
bG9jYXRvcigpKTsKICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAg
ICBfTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpf
UmVwOjoKICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJiBfX2EpIHRocm93ICgpCiAgICB7CiAg
ICAgIHNpemVfdHlwZSBfX3NpemUgPSBzaXplb2YoX1JlcCkgKyAoX01fY2FwYWNpdHkgKyAxKSAq
IHNpemVvZihfQ2hhclQpOwogICAgICBfUmF3X2J5dGVzX2FsbG9jKF9fYSkuZGVhbGxvY2F0ZShy
ZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSwgX19zaXplKTsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2
b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfTV9sZWFrX2hh
cmQoKQogICAgewogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpKQogICAgICAgIF9N
X211dGF0ZSgwLCAwLCAwKTsKICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgIH0K
CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjoKICAgIF9NX211dGF0ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEs
IHNpemVfdHlwZSBfX2xlbjIpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX29sZF9zaXplID0gdGhp
cy0+c2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdfc2l6ZSA9IF9fb2xkX3NpemUg
KyBfX2xlbjIgLSBfX2xlbjE7CiAgICAgIGNvbnN0IF9DaGFyVCogX19zcmMgPSBfTV9kYXRhKCkg
KyBfX3BvcyArIF9fbGVuMTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9faG93X211Y2ggPSBfX29s
ZF9zaXplIC0gX19wb3MgLSBfX2xlbjE7CgogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJl
ZCgpIHx8IF9fbmV3X3NpemUgPiBjYXBhY2l0eSgpKQogICAgICAgIHsKCiAgICAgICAgICBhbGxv
Y2F0b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7CgoKICAgICAgICAgIGNvbnN0IHNpemVf
dHlwZSBfX3BhZ2VzaXplID0gNDA5NjsKICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX21hbGxv
Y19oZWFkZXJfc2l6ZSA9IDQgKiBzaXplb2YgKHZvaWQqKTsKCiAgICAgICAgICBjb25zdCBzaXpl
X3R5cGUgX19wYWdlX2NhcGFjaXR5ID0gKF9fcGFnZXNpemUgLSBfX21hbGxvY19oZWFkZXJfc2l6
ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHNpemVvZihf
UmVwKSAtIHNpemVvZihfQ2hhclQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvIHNpemVvZihfQ2hhclQpOwogICAgICAgICAgX1JlcCogX19yOwogICAgICAg
ICAgaWYgKF9fbmV3X3NpemUgPiBjYXBhY2l0eSgpICYmIF9fbmV3X3NpemUgPiBfX3BhZ2VfY2Fw
YWNpdHkpCgogICAgICAgICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19uZXdfc2l6ZSA+IDIq
Y2FwYWNpdHkoKSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zaXpl
IDogMipjYXBhY2l0eSgpLCBfX2EpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3IgPSBf
UmVwOjpfU19jcmVhdGUoX19uZXdfc2l6ZSwgX19hKTsKICAgICAgICAgIHRyeQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgaWYgKF9fcG9zKQogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6
OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX2RhdGEoKSwgX19wb3MpOwogICAgICAgICAgICAg
IGlmIChfX2hvd19tdWNoKQogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5f
TV9yZWZkYXRhKCkgKyBfX3BvcyArIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fc3JjLCBfX2hvd19tdWNoKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go
Li4uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19yLT5fTV9kaXNwb3NlKGdldF9hbGxv
Y2F0b3IoKSk7CiAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICAgIF9N
X3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRhKF9fci0+X01fcmVmZGF0
YSgpKTsKICAgICAgfQogICAgICBlbHNlIGlmIChfX2hvd19tdWNoICYmIF9fbGVuMSAhPSBfX2xl
bjIpCiAgICAgICAgewoKICAgICAgICAgIHRyYWl0c190eXBlOjptb3ZlKF9NX2RhdGEoKSArIF9f
cG9zICsgX19sZW4yLCBfX3NyYywgX19ob3dfbXVjaCk7CiAgICAgICAgfQogICAgICBfTV9yZXAo
KS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIF9NX3JlcCgpLT5fTV9sZW5ndGggPSBfX25ld19z
aXplOwogICAgICBfTV9kYXRhKClbX19uZXdfc2l6ZV0gPSBfUmVwOjpfU190ZXJtaW5hbDsKCiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6cmVzZXJ2ZShzaXplX3R5cGUgX19yZXMpCiAgICB7CiAgICAgIGlmIChfX3JlcyA+IHRo
aXMtPmNhcGFjaXR5KCkgfHwgX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpKQogICAgICAgIHsKICAg
ICAgICAgIGlmIChfX3JlcyA+IHRoaXMtPm1heF9zaXplKCkpCiAgICAgICAgICAgIF9fdGhyb3df
bGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlc2VydmUiKTsKCiAgICAgICAgICBpZiAoX19y
ZXMgPCB0aGlzLT5zaXplKCkpCiAgICAgICAgICAgIF9fcmVzID0gdGhpcy0+c2l6ZSgpOwogICAg
ICAgICAgYWxsb2NhdG9yX3R5cGUgX19hID0gZ2V0X2FsbG9jYXRvcigpOwogICAgICAgICAgX0No
YXJUKiBfX3RtcCA9IF9NX3JlcCgpLT5fTV9jbG9uZShfX2EsIF9fcmVzIC0gdGhpcy0+c2l6ZSgp
KTsKICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRh
KF9fdG1wKTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZCBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpzd2FwKGJhc2ljX3N0cmluZyYgX19zKQogICAgewogICAg
ICBpZiAoX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRf
c2hhcmFibGUoKTsKICAgICAgaWYgKF9fcy5fTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAg
ICAgX19zLl9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgaWYgKHRoaXMtPmdldF9h
bGxvY2F0b3IoKSA9PSBfX3MuZ2V0X2FsbG9jYXRvcigpKQogICAgICAgIHsKICAgICAgICAgIF9D
aGFyVCogX190bXAgPSBfTV9kYXRhKCk7CiAgICAgICAgICBfTV9kYXRhKF9fcy5fTV9kYXRhKCkp
OwogICAgICAgICAgX19zLl9NX2RhdGEoX190bXApOwogICAgICAgIH0KCiAgICAgIGVsc2UKICAg
ICAgICB7CiAgICAgICAgICBiYXNpY19zdHJpbmcgX190bXAxKF9NX2liZWdpbigpLCBfTV9pZW5k
KCksIF9fcy5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgYmFzaWNfc3RyaW5nIF9fdG1wMihf
X3MuX01faWJlZ2luKCksIF9fcy5fTV9pZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICAqdGhpcyA9IF9fdG1wMjsKICAg
ICAgICAgIF9fcyA9IF9fdG1wMTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcCoKICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX1NfY3JlYXRlKHNpemVf
dCBfX2NhcGFjaXR5LCBjb25zdCBfQWxsb2MmIF9fYWxsb2MpCiAgICB7CiAgICAgIHR5cGVkZWYg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwoKCiAg
ICAgIGlmIChfX2NhcGFjaXR5ID4gX1NfbWF4X3NpemUpCgoKCiAgICAgICAgX190aHJvd19sZW5n
dGhfZXJyb3IoImJhc2ljX3N0cmluZzo6X1NfY3JlYXRlIik7CgoKCgogICAgICBzaXplX3QgX19z
aXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOwoj
IDQyMSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0
cy9iYXNpY19zdHJpbmcudGNjIiAzCiAgICAgIGNvbnN0IHNpemVfdCBfX3BhZ2VzaXplID0gNDA5
NjsKICAgICAgY29uc3Qgc2l6ZV90IF9fc3VicGFnZXNpemUgPSAxMjg7CiAgICAgIGNvbnN0IHNp
emVfdCBfX21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBzaXplb2YgKHZvaWQqKTsKICAgICAgaWYg
KChfX3NpemUgKyBfX21hbGxvY19oZWFkZXJfc2l6ZSkgPiBfX3BhZ2VzaXplKQogICAgICAgIHsK
ICAgICAgICAgIHNpemVfdCBfX2V4dHJhID0KICAgICAgICAgICAgKF9fcGFnZXNpemUgLSAoKF9f
c2l6ZSArIF9fbWFsbG9jX2hlYWRlcl9zaXplKSAlIF9fcGFnZXNpemUpKQogICAgICAgICAgICAl
IF9fcGFnZXNpemU7CiAgICAgICAgICBfX2NhcGFjaXR5ICs9IF9fZXh0cmEgLyBzaXplb2YoX0No
YXJUKTsKICAgICAgICAgIF9fc2l6ZSA9IChfX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJU
KSArIHNpemVvZihfUmVwKTsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fc2l6ZSA+IF9fc3Vi
cGFnZXNpemUpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fZXh0cmEgPQogICAgICAgICAg
ICAoX19zdWJwYWdlc2l6ZSAtICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVyX3NpemUpICUgX19z
dWJwYWdlc2l6ZSkpCiAgICAgICAgICAgICUgX19zdWJwYWdlc2l6ZTsKICAgICAgICAgIF9fY2Fw
YWNpdHkgKz0gX19leHRyYSAvIHNpemVvZihfQ2hhclQpOwogICAgICAgICAgX19zaXplID0gKF9f
Y2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOwogICAgICAgIH0K
CgoKICAgICAgdm9pZCogX19wbGFjZSA9IF9SYXdfYnl0ZXNfYWxsb2MoX19hbGxvYykuYWxsb2Nh
dGUoX19zaXplKTsKICAgICAgX1JlcCAqX19wID0gbmV3IChfX3BsYWNlKSBfUmVwOwogICAgICBf
X3AtPl9NX2NhcGFjaXR5ID0gX19jYXBhY2l0eTsKICAgICAgX19wLT5fTV9zZXRfc2hhcmFibGUo
KTsKICAgICAgX19wLT5fTV9sZW5ndGggPSAwOwogICAgICByZXR1cm4gX19wOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIF9DaGFyVCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
Ol9SZXA6OgogICAgX01fY2xvbmUoY29uc3QgX0FsbG9jJiBfX2FsbG9jLCBzaXplX3R5cGUgX19y
ZXMpCiAgICB7CgogICAgICBjb25zdCBzaXplX3R5cGUgX19yZXF1ZXN0ZWRfY2FwID0gX01fbGVu
Z3RoICsgX19yZXM7CgogICAgICBjb25zdCBzaXplX3R5cGUgX19wYWdlc2l6ZSA9IDQwOTY7CiAg
ICAgIGNvbnN0IHNpemVfdHlwZSBfX21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBzaXplb2YgKHZv
aWQqKTsKCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VfY2FwYWNpdHkgPQogICAgICAgIChf
X3BhZ2VzaXplIC0gX19tYWxsb2NfaGVhZGVyX3NpemUgLSBzaXplb2YoX1JlcCkgLSBzaXplb2Yo
X0NoYXJUKSkKICAgICAgICAvIHNpemVvZihfQ2hhclQpOwogICAgICBfUmVwKiBfX3I7CiAgICAg
IGlmIChfX3JlcXVlc3RlZF9jYXAgPiBfTV9jYXBhY2l0eSAmJiBfX3JlcXVlc3RlZF9jYXAgPiBf
X3BhZ2VfY2FwYWNpdHkpCgogICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX3JlcXVlc3Rl
ZF9jYXAgPiAyKl9NX2NhcGFjaXR5ID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19y
ZXF1ZXN0ZWRfY2FwIDogMipfTV9jYXBhY2l0eSwgX19hbGxvYyk7CiAgICAgIGVsc2UKICAgICAg
ICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19yZXF1ZXN0ZWRfY2FwLCBfX2FsbG9jKTsKCiAgICAg
IGlmIChfTV9sZW5ndGgpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgdHJh
aXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX3JlZmRhdGEoKSwgX01fbGVuZ3Ro
KTsgfQogICAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19y
LT5fTV9kZXN0cm95KF9fYWxsb2MpOwogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICBfX3ItPl9NX2xlbmd0aCA9IF9NX2xlbmd0aDsKICAgICAgcmV0dXJu
IF9fci0+X01fcmVmZGF0YSgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hhclQg
X19jKQogICAgewogICAgICBpZiAoX19uID4gbWF4X3NpemUoKSkKICAgICAgICBfX3Rocm93X2xl
bmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXNpemUiKTsKICAgICAgc2l6ZV90eXBlIF9fc2l6
ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSA8IF9fbikKICAgICAgICB0aGlzLT5h
cHBlbmQoX19uIC0gX19zaXplLCBfX2MpOwogICAgICBlbHNlIGlmIChfX24gPCBfX3NpemUpCiAg
ICAgICAgdGhpcy0+ZXJhc2UoX19uKTsKCiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlcj4KICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPiYKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAg
IF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRlciBfX2sx
LAogICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19rMiwgaW5wdXRfaXRlcmF0b3JfdGFnKQog
ICAgICB7CgogICAgICAgIGJhc2ljX3N0cmluZyBfX3MoX19rMSwgX19rMik7CiAgICAgICAgcmV0
dXJuIF9NX3JlcGxhY2Vfc2FmZShfX2kxLCBfX2kyLCBfX3MuX01faWJlZ2luKCksIF9fcy5fTV9p
ZW5kKCkpOwogICAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ
dGVyPgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01fcmVwbGFjZV9z
YWZlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9Gb3J3YXJkSXRlciBfX2sxLAogICAg
ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fazIpCiAgICAgIHsKICAgICAgICBzaXpl
X3R5cGUgX19kbmV3ID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihkaXN0YW5jZShfX2sxLCBfX2sy
KSk7CiAgICAgICAgc2l6ZV90eXBlIF9fZG9sZCA9IF9faTIgLSBfX2kxOwogICAgICAgIHNpemVf
dHlwZSBfX2RtYXggPSB0aGlzLT5tYXhfc2l6ZSgpOwoKICAgICAgICBpZiAoX19kbWF4IDw9IF9f
ZG5ldykKICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6Ol9NX3Jl
cGxhY2UiKTsKICAgICAgICBzaXplX3R5cGUgX19vZmYgPSBfX2kxIC0gX01faWJlZ2luKCk7CiAg
ICAgICAgX01fbXV0YXRlKF9fb2ZmLCBfX2RvbGQsIF9fZG5ldyk7CgoKICAgICAgICBpZiAoX19k
bmV3KQogICAgICAgICAgX1NfY29weV9jaGFycyhfTV9kYXRhKCkgKyBfX29mZiwgX19rMSwgX19r
Mik7CgogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjoKICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9f
bjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3Bv
czIsIHNpemVfdHlwZSBfX24yKQogICAgewogICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXpl
ID0gX19zdHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MyID4gX19zdHJzaXplKQogICAgICAgIF9f
dGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgY29uc3Qg
Ym9vbCBfX3Rlc3RuMiA9IF9fbjIgPCBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAgIGNvbnN0IHNp
emVfdHlwZSBfX2ZvbGRuMiA9IF9fdGVzdG4yID8gX19uMiA6IF9fc3Ryc2l6ZSAtIF9fcG9zMjsK
ICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MxLCBfX24xLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3N0ci5fTV9kYXRhKCkgKyBfX3BvczIsIF9fZm9sZG4yKTsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBhcHBlbmQoY29uc3QgYmFzaWNf
c3RyaW5nJiBfX3N0cikKICAgIHsKCgoKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IF9fc3RyLnNp
emUoKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zaXplICsgdGhpcy0+c2l6ZSgpOwogICAg
ICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19s
ZW4pOwogICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2llbmQoKSwgX01faWVuZCgpLCBf
X3N0ci5fTV9pYmVnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9p
ZW5kKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFw
cGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlw
ZSBfX24pCiAgICB7CgoKCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3N0ci5zaXplKCkg
LSBfX3BvcywgX19uKSArIHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2Fw
YWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0dXJuIF9NX3Jl
cGxhY2Vfc2FmZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIuX01fY2hlY2soX19wb3MpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbikpOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChjb25z
dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbGVu
ID0gX19uICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgp
KQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICByZXR1cm4gX01fcmVwbGFjZV9z
YWZlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3MsIF9fcyArIF9fbik7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKHNpemVfdHlwZSBfX24sIF9D
aGFyVCBfX2MpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fbiArIHRoaXMtPnNpemUo
KTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNl
cnZlKF9fbGVuKTsKICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVu
ZCgpLCBfX24sIF9fYyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAg
ICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMp
CiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNp
emVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfVHJhaXRzOjps
ZW5ndGgoX19saHMpOwogICAgICBfX3N0cmluZ190eXBlIF9fc3RyOwogICAgICBfX3N0ci5yZXNl
cnZlKF9fbGVuICsgX19yaHMuc2l6ZSgpKTsKICAgICAgX19zdHIuYXBwZW5kKF9fbGhzLCBfX2xo
cyArIF9fbGVuKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3Ry
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4K
ICAgIG9wZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc3RyaW5n
X3R5cGUgX19zdHI7CiAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX19yaHMuc2l6ZSgpOwogICAg
ICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgMSk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3NpemVfdHlw
ZSgxKSwgX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19z
dHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmVwbGFj
ZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9f
YykKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbjEgPSBfX2kyIC0gX19pMTsKICAgICAgc2l6ZV90
eXBlIF9fb2ZmMSA9IF9faTEgLSBfTV9pYmVnaW4oKTsKICAgICAgaWYgKG1heF9zaXplKCkgLSAo
dGhpcy0+c2l6ZSgpIC0gX19uMSkgPD0gX19uMikKICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJv
cigiYmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAgIF9NX211dGF0ZSAoX19vZmYxLCBfX24x
LCBfX24yKTsKCiAgICAgIGlmIChfX24yKQogICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX01f
ZGF0YSgpICsgX19vZmYxLCBfX24yLCBfX2MpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg
IGNvcHkoX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcykgY29uc3QK
ICAgIHsKICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgIF9fdGhyb3dfb3V0
X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvcHkiKTsKCiAgICAgIGlmIChfX24gPiB0aGlzLT5z
aXplKCkgLSBfX3BvcykKICAgICAgICBfX24gPSB0aGlzLT5zaXplKCkgLSBfX3BvczsKCiAgICAg
IHRyYWl0c190eXBlOjpjb3B5KF9fcywgX01fZGF0YSgpICsgX19wb3MsIF9fbik7CgogICAgICBy
ZXR1cm4gX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19w
b3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0
aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgY29uc3QgX0No
YXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgIGZvciAoOyBfX3hwb3MgKyBfX24gPD0gX19z
aXplOyArK19feHBvcykKICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19kYXRhICsg
X194cG9zLCBfX3MsIF9fbikgPT0gMCkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJl
dHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29u
c3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6
ZV90eXBlIF9fcmV0ID0gbnBvczsKICAgICAgaWYgKF9fcG9zIDwgX19zaXplKQogICAgICAgIHsK
ICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOwogICAgICAgICAgc2l6
ZV90eXBlIF9fbiA9IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3Ag
PSB0cmFpdHNfdHlwZTo6ZmluZChfX2RhdGEgKyBfX3BvcywgX19uLCBfX2MpOwogICAgICAgICAg
aWYgKF9fcCkKICAgICAgICAgICAgX19yZXQgPSBfX3AgLSBfX2RhdGE7CiAgICAgICAgfQogICAg
ICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90
eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19z
aXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19uIDw9IF9fc2l6ZSkKICAgICAgICB7CiAg
ICAgICAgICBfX3BvcyA9IHN0ZDo6bWluKF9fc2l6ZSAtIF9fbiwgX19wb3MpOwogICAgICAgICAg
Y29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgICAgICBkbwogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9fcG9z
LCBfX3MsIF9fbikgPT0gMCkKICAgICAgICAgICAgICAgIHJldHVybiBfX3BvczsKICAgICAgICAg
ICAgfQogICAgICAgICAgd2hpbGUgKF9fcG9zLS0gPiAwKTsKICAgICAgICB9CiAgICAgIHJldHVy
biBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6CiAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0
CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChf
X3NpemUpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9feHBvcyA9IF9fc2l6ZSAtIDE7CiAg
ICAgICAgICBpZiAoX194cG9zID4gX19wb3MpCiAgICAgICAgICAgIF9feHBvcyA9IF9fcG9zOwoK
ICAgICAgICAgIGZvciAoKytfX3hwb3M7IF9feHBvcy0tID4gMDsgKQogICAgICAgICAgICBpZiAo
dHJhaXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3hwb3NdLCBfX2MpKQogICAgICAgICAgICAgIHJl
dHVybiBfX3hwb3M7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5
cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9m
aXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u
KSBjb25zdAogICAgewogICAgICBmb3IgKDsgX19uICYmIF9fcG9zIDwgdGhpcy0+c2l6ZSgpOyAr
K19fcG9zKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5
cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3Bvc10pOwogICAgICAgICAgaWYgKF9fcCkK
ICAgICAgICAgICAgcmV0dXJuIF9fcG9zOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBz
aXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+
c2l6ZSgpOwogICAgICBpZiAoX19zaXplICYmIF9fbikKICAgICAgICB7CiAgICAgICAgICBpZiAo
LS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBk
bwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpmaW5kKF9fcywg
X19uLCBfTV9kYXRhKClbX19zaXplXSkpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwog
ICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0gIT0gMCk7CiAgICAgICAgfQog
ICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJU
KiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAg
c2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBmb3IgKDsgX194cG9zIDwgdGhpcy0+c2l6ZSgp
OyArK19feHBvcykKICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9k
YXRhKClbX194cG9zXSkpCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBv
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OgogICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9z
KSBjb25zdAogICAgewogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGZvciAoOyBf
X3hwb3MgPCB0aGlzLT5zaXplKCk7ICsrX194cG9zKQogICAgICAgIGlmICghdHJhaXRzX3R5cGU6
OmVxKF9NX2RhdGEoKVtfX3hwb3NdLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9feHBvczsKICAg
ICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBf
X3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6
ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7
CiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19w
b3M7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNf
dHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAgICAgICAgICAg
cmV0dXJuIF9fc2l6ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tKTsK
ICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfbm90X29mKF9D
aGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9f
c2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAg
ICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAg
ICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEo
X01fZGF0YSgpW19fc2l6ZV0sIF9fYykpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwog
ICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAgIH0KICAgICAg
cmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5
cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAogICAgewogICAgICBzaXpl
X3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9f
c3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0
X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3Jz
aXplPSBtaW4oX19zaXplIC0gX19wb3MsIF9fbik7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1p
bihfX3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJl
KF9NX2RhdGEoKSArIF9fcG9zLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsKICAgICAgaWYgKCFfX3Ip
CiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJh
c2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlw
ZSBfX24yKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgp
OwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9z
MSA+IF9fc2l6ZSB8fCBfX3BvczIgPiBfX29zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3Jh
bmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0g
bWluKF9fc2l6ZSAtIF9fcG9zMSwgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX3Jvc2l6ZSA9IG1p
bihfX29zaXplIC0gX19wb3MyLCBfX24yKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9f
cnNpemUsIF9fcm9zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9N
X2RhdGEoKSArIF9fcG9zMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
c3RyLmRhdGEoKSArIF9fcG9zMiwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3Ig
PSBfX3JzaXplIC0gX19yb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGludAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21w
YXJlKGNvbnN0IF9DaGFyVCogX19zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXpl
ID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IHRyYWl0c190eXBlOjps
ZW5ndGgoX19zKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fc2l6ZSwgX19vc2l6ZSk7
CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fcywgX19s
ZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3NpemUgLSBfX29zaXplOwogICAg
ICByZXR1cm4gX19yOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZyA8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXpl
X3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlw
ZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAg
ICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAgICBz
aXplX3R5cGUgX19vc2l6ZSA9IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKICAgICAgc2l6ZV90
eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19wb3MsIF9fbjEpOwogICAgICBzaXplX3R5cGUg
X19sZW4gPSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlw
ZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zLCBfX2xlbik7CiAgICAgIGlmICghX19y
KQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19yOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nIDxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBf
Q2hhclQqIF9fcywKICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CiAgICB7CiAgICAg
IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6
ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7
CgogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IG1pbih0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyks
IF9fbjIpOwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBfX3BvcywgX19u
MSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsKICAgICAg
aW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9f
bGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAg
ICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9U
cmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIHZvaWQKICAgIF9TX3N0cmluZ19jb3B5KGNvbnN0IGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLAogICAgICAgICAgICAg
ICAgICAgX0NoYXJUKiBfX2J1ZiwgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgX19idWZzaXop
CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90eXBl
OwogICAgICBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBzaXplX3R5
cGUgX19ieXRlcyA9IG1pbihfX3N0cnNpemUsIF9fYnVmc2l6IC0gMSk7CiAgICAgIF9UcmFpdHM6
OmNvcHkoX19idWYsIF9fc3RyLmRhdGEoKSwgX19ieXRlcyk7CiAgICAgIF9fYnVmW19fYnl0ZXNd
ID0gX0NoYXJUKCk7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJp
bmc8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgogICAg
b3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBs
YXRlCiAgICBiYXNpY19vc3RyZWFtPGNoYXI+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFt
PGNoYXI+JiwgY29uc3Qgc3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3Ry
ZWFtPGNoYXI+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJiwgY2hh
cik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPGNoYXI+JgogICAgZ2V0bGlu
ZShiYXNpY19pc3RyZWFtPGNoYXI+Jiwgc3RyaW5nJik7CiMgOTc3ICIvdXNyL2xvY2FsL3Byb2R1
Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMK
fQojIDU4ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9z
dHJpbmciIDIgMwojIDUwICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2Mr
Ky8zLjIuMS9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2dj
Yy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIv
dXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2Z1bmN0
ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2Mr
Ky8zLjIuMS9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9wcm9kdWN0
cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5h
bWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAg
dm9pZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nh
c3Qodm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAg
X190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19k
b21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9h
cmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3Io
Y29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19z
KTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9p
ZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9f
dGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJv
d19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNTEgIi91c3IvbG9jYWwvcHJvZHVj
dHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvbG9jYWxlZndkLmgiIDIgMwoKCm5h
bWVzcGFjZSBzdGQKewoKICBjbGFzcyBsb2NhbGU7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNzcGFjZShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwcmludChf
Q2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp
bmxpbmUgYm9vbAogICAgaXNjbnRybChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN1cHBlcihfQ2hhclQsIGNv
bnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9v
bAogICAgaXNsb3dlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNhbHBoYShfQ2hhclQsIGNvbnN0IGxvY2Fs
ZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNk
aWdpdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
CiAgICBpbmxpbmUgYm9vbAogICAgaXNwdW5jdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN4ZGlnaXQoX0No
YXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5s
aW5lIGJvb2wKICAgIGlzYWxudW0oX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzZ3JhcGgoX0NoYXJULCBjb25z
dCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFy
VAogICAgdG91cHBlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b2xvd2VyKF9DaGFyVCwgY29uc3QgbG9j
YWxlJik7CgoKCiAgY2xhc3MgY3R5cGVfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
CiAgICBjbGFzcyBjdHlwZTsKICB0ZW1wbGF0ZTw+IGNsYXNzIGN0eXBlPGNoYXI+OwoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlX2J5bmFtZTsKCgogIGNsYXNz
IGNvZGVjdnRfYmFzZTsKICBjbGFzcyBfX2VuY190cmFpdHM7CiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3Mg
Y29kZWN2dDsKICB0ZW1wbGF0ZTw+IGNsYXNzIGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90
PjsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5
cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0X2J5bmFtZTsKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0No
YXJUPiA+CiAgICBjbGFzcyBudW1fZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3Mg
bnVtX3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0OwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xhc3MgbnVtcHVuY3RfYnluYW1lOwoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZTsKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+IGNsYXNzCiAgICBjb2xsYXRlX2J5bmFtZTsKCgogIGNsYXNzIHRpbWVfYmFzZTsK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVm
X2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9nZXQ7CiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+
ID4KICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNs
YXNzIHRpbWVfcHV0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0
ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9wdXRfYnlu
YW1lOwoKCiAgY2xhc3MgbW9uZXlfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3Mg
bW9uZXlfZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIg
PSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbW9uZXlfcHV0OwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bCA9IGZhbHNlPgogICAgY2xhc3MgbW9u
ZXlwdW5jdDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGwgPSBmYWxzZT4K
ICAgIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lOwoKCiAgY2xhc3MgbWVzc2FnZXNfYmFzZTsKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlczsKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlc19ieW5hbWU7CgoKICBjbGFzcyBsb2Nh
bGUKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IGNhdGVnb3J5OwoKCiAg
ICBjbGFzcyBmYWNldDsKICAgIGNsYXNzIGlkOwogICAgY2xhc3MgX0ltcGw7CgogICAgZnJpZW5k
IGNsYXNzIGZhY2V0OwogICAgZnJpZW5kIGNsYXNzIF9JbXBsOwoKICAgIHRlbXBsYXRlPHR5cGVu
YW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0KGNv
bnN0IGxvY2FsZSYpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5k
IGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93KCk7CgoKCiAgICBzdGF0
aWMgY29uc3QgY2F0ZWdvcnkgbm9uZSA9IDA7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgY3R5
cGUgPSAxTCA8PCAwOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG51bWVyaWMgPSAxTCA8PCAx
OwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGNvbGxhdGUgPSAxTCA8PCAyOwogICAgc3RhdGlj
IGNvbnN0IGNhdGVnb3J5IHRpbWUgPSAxTCA8PCAzOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5
IG1vbmV0YXJ5ID0gMUwgPDwgNDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBtZXNzYWdlcyA9
IDFMIDw8IDU7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgYWxsID0gKGN0eXBlIHwgbnVtZXJp
YyB8IGNvbGxhdGUgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGltZSB8IG1vbmV0YXJ5IHwgbWVzc2FnZXMpOwoKCiAgICBsb2NhbGUoKSB0aHJvdygpOwoKICAg
IGxvY2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIHRocm93KCk7CgogICAgZXhwbGljaXQKICAg
IGxvY2FsZShjb25zdCBjaGFyKiBfX3MpOwoKICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fYmFz
ZSwgY29uc3QgY2hhciogX19zLCBjYXRlZ29yeSBfX2NhdCk7CgogICAgbG9jYWxlKGNvbnN0IGxv
Y2FsZSYgX19iYXNlLCBjb25zdCBsb2NhbGUmIF9fYWRkLCBjYXRlZ29yeSBfX2NhdCk7CgogICAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290
aGVyLCBfRmFjZXQqIF9fZik7CgogICAgfmxvY2FsZSgpIHRocm93KCk7CgogICAgY29uc3QgbG9j
YWxlJgogICAgb3BlcmF0b3I9KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgdGhyb3coKTsKCiAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGxvY2FsZQogICAgICBjb21iaW5lKGNvbnN0
IGxvY2FsZSYgX19vdGhlcikgY29uc3Q7CgoKICAgIHN0cmluZwogICAgbmFtZSgpIGNvbnN0OwoK
ICAgIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdCB0aHJv
dyAoKTsKCiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBsb2NhbGUmIF9fb3Ro
ZXIpIGNvbnN0IHRocm93ICgpCiAgICB7IHJldHVybiAhKHRoaXMtPm9wZXJhdG9yPT0oX19vdGhl
cikpOyB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgICAgYm9vbAogICAgICBvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0
cmluZzxfQ2hhciwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwKICAgICAgICAgICAgICAgICBjb25z
dCBiYXNpY19zdHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0OwoKCiAg
ICBzdGF0aWMgbG9jYWxlCiAgICBnbG9iYWwoY29uc3QgbG9jYWxlJik7CgogICAgc3RhdGljIGNv
bnN0IGxvY2FsZSYKICAgIGNsYXNzaWMoKTsKCiAgcHJpdmF0ZToKCiAgICBfSW1wbCogX01faW1w
bDsKCgogICAgc3RhdGljIF9JbXBsKiBfU19jbGFzc2ljOwoKCiAgICBzdGF0aWMgX0ltcGwqIF9T
X2dsb2JhbDsKCgoKCgoKICAgIHN0YXRpYyBjb25zdCBzaXplX3QgX1NfY2F0ZWdvcmllc19zaXpl
ID0gNjsKCgoKCgoKICAgIHN0YXRpYyBjb25zdCBzaXplX3QgX1NfZXh0cmFfY2F0ZWdvcmllc19z
aXplID0gMDsKCgoKCgogICAgc3RhdGljIGNvbnN0IGNoYXIqIF9TX2NhdGVnb3JpZXNbX1NfY2F0
ZWdvcmllc19zaXplCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBfU19l
eHRyYV9jYXRlZ29yaWVzX3NpemVdOwoKICAgIGV4cGxpY2l0CiAgICBsb2NhbGUoX0ltcGwqKSB0
aHJvdygpOwoKICAgIHN0YXRpYyBpbmxpbmUgdm9pZAogICAgX1NfaW5pdGlhbGl6ZSgpCiAgICB7
CiAgICAgIGlmICghX1NfY2xhc3NpYykKICAgICAgICBjbGFzc2ljKCk7CiAgICB9CgogICAgc3Rh
dGljIGNhdGVnb3J5CiAgICBfU19ub3JtYWxpemVfY2F0ZWdvcnkoY2F0ZWdvcnkpOwoKICAgIHZv
aWQKICAgIF9NX2NvYWxlc2NlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBsb2NhbGUmIF9f
YWRkLCBjYXRlZ29yeSBfX2NhdCk7CiAgfTsKCgoKICBjbGFzcyBsb2NhbGU6Ol9JbXBsCiAgewog
IHB1YmxpYzoKCiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOwogICAgZnJpZW5kIGNsYXNzIGxvY2Fs
ZTo6ZmFjZXQ7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgY29u
c3QgX0ZhY2V0JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7CgogICAgdGVtcGxhdGU8
dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgYm9vbAogICAgICBoYXNfZmFjZXQoY29uc3Qg
bG9jYWxlJikgdGhyb3coKTsKCiAgcHJpdmF0ZToKCiAgICBfQXRvbWljX3dvcmQgX01fcmVmZXJl
bmNlczsKICAgIGZhY2V0KiogX01fZmFjZXRzOwogICAgc2l6ZV90IF9NX2ZhY2V0c19zaXplOwoK
ICAgIGNoYXIqIF9NX25hbWVzW19TX2NhdGVnb3JpZXNfc2l6ZQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBfU19leHRyYV9jYXRlZ29yaWVzX3NpemVd
OwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX2N0eXBlW107CiAgICBz
dGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbnVtZXJpY1tdOwogICAgc3RhdGlj
IGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX2NvbGxhdGVbXTsKICAgIHN0YXRpYyBjb25z
dCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF90aW1lW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxl
OjppZCogY29uc3QgX1NfaWRfbW9uZXRhcnlbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6Omlk
KiBjb25zdCBfU19pZF9tZXNzYWdlc1tdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNv
bnN0KiBjb25zdCBfU19mYWNldF9jYXRlZ29yaWVzW107CgogICAgaW5saW5lIHZvaWQKICAgIF9N
X2FkZF9yZWZlcmVuY2UoKSB0aHJvdygpCiAgICB7IF9fYXRvbWljX2FkZCgmX01fcmVmZXJlbmNl
cywgMSk7IH0KCiAgICBpbmxpbmUgdm9pZAogICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIHRocm93
KCkKICAgIHsKICAgICAgaWYgKF9fZXhjaGFuZ2VfYW5kX2FkZCgmX01fcmVmZXJlbmNlcywgLTEp
ID09IDEpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgZGVsZXRlIHRoaXM7
IH0KICAgICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgICAgeyB9CiAgICAgICAgfQogICAgfQoK
ICAgIF9JbXBsKGNvbnN0IF9JbXBsJiwgc2l6ZV90KTsKICAgIF9JbXBsKGNvbnN0IGNoYXIqLCBz
aXplX3QpOwogICAgX0ltcGwoZmFjZXQqKiwgc2l6ZV90LCBib29sKTsKCiAgIH5fSW1wbCgpIHRo
cm93KCk7CgogICAgX0ltcGwoY29uc3QgX0ltcGwmKTsKCiAgICB2b2lkCiAgICBvcGVyYXRvcj0o
Y29uc3QgX0ltcGwmKTsKCiAgICBpbmxpbmUgYm9vbAogICAgX01fY2hlY2tfc2FtZV9uYW1lKCkK
ICAgIHsKICAgICAgYm9vbCBfX3JldCA9IHRydWU7CiAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7
CiAgICAgICAgICAgX19yZXQgJiYgX19pIDwgX1NfY2F0ZWdvcmllc19zaXplICsgX1NfZXh0cmFf
Y2F0ZWdvcmllc19zaXplIC0gMTsKICAgICAgICAgICArK19faSkKICAgICAgICBfX3JldCAmPSAo
c3RyY21wKF9NX25hbWVzW19faV0sIF9NX25hbWVzW19faSArIDFdKSA9PSAwKTsKICAgICAgcmV0
dXJuIF9fcmV0OwogICAgfQoKICAgIHZvaWQKICAgIF9NX3JlcGxhY2VfY2F0ZWdvcmllcyhjb25z
dCBfSW1wbCosIGNhdGVnb3J5KTsKCiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2NhdGVnb3J5KGNv
bnN0IF9JbXBsKiwgY29uc3QgbG9jYWxlOjppZCogY29uc3QqKTsKCiAgICB2b2lkCiAgICBfTV9y
ZXBsYWNlX2ZhY2V0KGNvbnN0IF9JbXBsKiwgY29uc3QgbG9jYWxlOjppZCopOwoKICAgIHZvaWQK
ICAgIF9NX2luc3RhbGxfZmFjZXQoY29uc3QgbG9jYWxlOjppZCosIGZhY2V0Kik7CgogICAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBpbmxpbmUgdm9pZAogICAgICBfTV9pbml0X2Zh
Y2V0KF9GYWNldCogX19mYWNldCkKICAgICAgeyBfTV9pbnN0YWxsX2ZhY2V0KCZfRmFjZXQ6Omlk
LCBfX2ZhY2V0KTsgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGxvY2Fs
ZTo6bG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlciwgX0ZhY2V0KiBfX2YpCiAgICB7CiAgICAg
IF9NX2ltcGwgPSBuZXcgX0ltcGwoKl9fb3RoZXIuX01faW1wbCwgMSk7CiAgICAgIF9NX2ltcGwt
Pl9NX2luc3RhbGxfZmFjZXQoJl9GYWNldDo6aWQsIF9fZik7CiAgICAgIGZvciAoc2l6ZV90IF9f
aSA9IDA7CiAgICAgICAgICAgX19pIDwgX1NfY2F0ZWdvcmllc19zaXplICsgX1NfZXh0cmFfY2F0
ZWdvcmllc19zaXplOyArK19faSkKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgW10gX01faW1w
bC0+X01fbmFtZXNbX19pXTsKICAgICAgICAgIGNoYXIqIF9fbmV3ID0gbmV3IGNoYXJbMl07CiAg
ICAgICAgICBzdHJjcHkoX19uZXcsICIqIik7CiAgICAgICAgICBfTV9pbXBsLT5fTV9uYW1lc1tf
X2ldID0gX19uZXc7CiAgICAgICAgfQogICAgfQoKCiAgY2xhc3MgbG9jYWxlOjpmYWNldAogIHsK
ICBwcml2YXRlOgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBsb2Nh
bGU6Ol9JbXBsOwoKICAgIF9BdG9taWNfd29yZCBfTV9yZWZlcmVuY2VzOwoKICBwcm90ZWN0ZWQ6
CgoKICAgIHN0YXRpYyBfX2NfbG9jYWxlIF9TX2NfbG9jYWxlOwoKICAgIGV4cGxpY2l0CiAgICBm
YWNldChzaXplX3QgX19yZWZzID0gMCkgdGhyb3coKTsKCiAgICB2aXJ0dWFsCiAgICB+ZmFjZXQo
KTsKCiAgICBzdGF0aWMgdm9pZAogICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9f
Y2xvYywgY29uc3QgY2hhciogX19zLAogICAgICAgICAgICAgICAgICAgICAgIF9fY19sb2NhbGUg
X19vbGQgPSAwKTsKCiAgICBzdGF0aWMgX19jX2xvY2FsZQogICAgX1NfY2xvbmVfY19sb2NhbGUo
X19jX2xvY2FsZSYgX19jbG9jKTsKCiAgICBzdGF0aWMgdm9pZAogICAgX1NfZGVzdHJveV9jX2xv
Y2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpOwoKICBwcml2YXRlOgogICAgdm9pZAogICAgX01fYWRk
X3JlZmVyZW5jZSgpIHRocm93KCk7CgogICAgdm9pZAogICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgp
IHRocm93KCk7CgogICAgZmFjZXQoY29uc3QgZmFjZXQmKTsKCiAgICB2b2lkCiAgICBvcGVyYXRv
cj0oY29uc3QgZmFjZXQmKTsKICB9OwoKCgogIGNsYXNzIGxvY2FsZTo6aWQKICB7CiAgcHJpdmF0
ZToKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpfSW1w
bDsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNl
dCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwogICAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ZhY2V0PgogICAgICBmcmllbmQgYm9vbAogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikg
dGhyb3cgKCk7CgoKCgogICAgbXV0YWJsZSBzaXplX3QgX01faW5kZXg7CgoKICAgIHN0YXRpYyBf
QXRvbWljX3dvcmQgX1NfaGlnaHdhdGVyOwoKICAgIHZvaWQKICAgIG9wZXJhdG9yPShjb25zdCBp
ZCYpOwoKICAgIGlkKGNvbnN0IGlkJik7CgogIHB1YmxpYzoKCgogICAgaWQoKTsKCiAgICBpbmxp
bmUgc2l6ZV90CiAgICBfTV9pZCgpIGNvbnN0CiAgICB7CiAgICAgIGlmICghX01faW5kZXgpCiAg
ICAgICAgX01faW5kZXggPSAxICsgX19leGNoYW5nZV9hbmRfYWRkKCZfU19oaWdod2F0ZXIsIDEp
OwogICAgICByZXR1cm4gX01faW5kZXggLSAxOwogICAgfQogIH07CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9GYWNldD4KICAgIGNvbnN0IF9GYWNldCYKICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUm
IF9fbG9jKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgYm9vbAogICAgaGFzX2Zh
Y2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpIHRocm93KCk7Cn0KIyA0OSAiL3Vzci9sb2NhbC9wcm9k
dWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvaW9zIiAyIDMKIyAxICIvdXNyL2xvY2Fs
L3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2lvc19iYXNlLmgiIDEg
MwojIDQ0ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9i
aXRzL2lvc19iYXNlLmgiIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CgoKCgogIGVudW0gX0lvc19GbXRm
bGFncyB7IF9NX2lvc19mbXRmbGFnc19lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19G
bXRmbGFncwogIG9wZXJhdG9yJihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2Ip
CiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNf
Y2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J8KF9J
b3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9zX0ZtdGZs
YWdzKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAg
aW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcl4oX0lvc19GbXRmbGFncyBfX2EsIF9Jb3Nf
Rm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50Pihf
X2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwog
IG9wZXJhdG9yfD0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJl
dHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRv
ciY9KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX19h
ID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3JePShfSW9z
X0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSBe
IF9fYjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yfihfSW9zX0ZtdGZsYWdz
IF9fYSkKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9
CgoKICBlbnVtIF9Jb3NfT3Blbm1vZGUgeyBfTV9pb3Nfb3Blbm1vZGVfZW5kID0gMUwgPDwgMTYg
fTsKCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvciYoX0lvc19PcGVubW9kZSBfX2Es
IF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8
aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19PcGVu
bW9kZQogIG9wZXJhdG9yfChfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAg
eyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2Fz
dDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3JeKF9Jb3Nf
T3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9zX09wZW5tb2Rl
KHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5s
aW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcnw9KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19P
cGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9CgogIGlubGluZSBfSW9z
X09wZW5tb2RlCiAgb3BlcmF0b3ImPShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUg
X19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9k
ZQogIG9wZXJhdG9yXj0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7
IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVy
YXRvcn4oX0lvc19PcGVubW9kZSBfX2EpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZSh+c3RhdGlj
X2Nhc3Q8aW50PihfX2EpKTsgfQoKCiAgZW51bSBfSW9zX0lvc3RhdGUgeyBfTV9pb3NfaW9zdGF0
ZV9lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3ImKF9J
b3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRl
KHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5s
aW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yfChfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3Rh
dGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBz
dGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRv
cl4oX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lv
c3RhdGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoK
ICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J8PShfSW9zX0lvc3RhdGUmIF9fYSwgX0lv
c19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9J
b3NfSW9zdGF0ZQogIG9wZXJhdG9yJj0oX0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBf
X2IpCiAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUK
ICBvcGVyYXRvcl49KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0
dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J+
KF9Jb3NfSW9zdGF0ZSBfX2EpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKH5zdGF0aWNfY2FzdDxp
bnQ+KF9fYSkpOyB9CgogIGVudW0gX0lvc19TZWVrZGlyIHsgX01faW9zX3NlZWtkaXJfZW5kID0g
MUwgPDwgMTYgfTsKCgogIGNsYXNzIGlvc19iYXNlCiAgewogIHB1YmxpYzoKCgogICAgY2xhc3Mg
ZmFpbHVyZSA6IHB1YmxpYyBleGNlcHRpb24KICAgIHsKICAgIHB1YmxpYzoKCgogICAgICBleHBs
aWNpdAogICAgICBmYWlsdXJlKGNvbnN0IHN0cmluZyYgX19zdHIpIHRocm93KCk7CgoKCiAgICAg
IHZpcnR1YWwKICAgICAgfmZhaWx1cmUoKSB0aHJvdygpOwoKICAgICAgdmlydHVhbCBjb25zdCBj
aGFyKgogICAgICB3aGF0KCkgY29uc3QgdGhyb3coKTsKCiAgICBwcml2YXRlOgogICAgICBlbnVt
IHsgX01fYnVmc2l6ZSA9IDI1NiB9OwogICAgICBjaGFyIF9NX25hbWVbX01fYnVmc2l6ZV07Cgog
ICAgfTsKCgogICAgdHlwZWRlZiBfSW9zX0ZtdGZsYWdzIGZtdGZsYWdzOwoKICAgIHN0YXRpYyBj
b25zdCBmbXRmbGFncyBib29sYWxwaGEgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYm9vbGFs
cGhhKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBkZWMgPSBmbXRmbGFncyhfX2lvc19mbGFn
czo6X1NfZGVjKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBmaXhlZCA9IGZtdGZsYWdzKF9f
aW9zX2ZsYWdzOjpfU19maXhlZCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgaGV4ID0gZm10
ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2hleCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgaW50
ZXJuYWwgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfaW50ZXJuYWwpOwogICAgc3RhdGljIGNv
bnN0IGZtdGZsYWdzIGxlZnQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfbGVmdCk7CiAgICBz
dGF0aWMgY29uc3QgZm10ZmxhZ3Mgb2N0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX29jdCk7
CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgcmlnaHQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6
X1NfcmlnaHQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNjaWVudGlmaWMgPSBmbXRmbGFn
cyhfX2lvc19mbGFnczo6X1Nfc2NpZW50aWZpYyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mg
c2hvd2Jhc2UgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd2Jhc2UpOwogICAgc3RhdGlj
IGNvbnN0IGZtdGZsYWdzIHNob3dwb2ludCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93
cG9pbnQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3dwb3MgPSBmbXRmbGFncyhfX2lv
c19mbGFnczo6X1Nfc2hvd3Bvcyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2tpcHdzID0g
Zm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3NraXB3cyk7CiAgICBzdGF0aWMgY29uc3QgZm10Zmxh
Z3MgdW5pdGJ1ZiA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU191bml0YnVmKTsKICAgIHN0YXRp
YyBjb25zdCBmbXRmbGFncyB1cHBlcmNhc2UgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfdXBw
ZXJjYXNlKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBhZGp1c3RmaWVsZCA9IGZtdGZsYWdz
KF9faW9zX2ZsYWdzOjpfU19hZGp1c3RmaWVsZCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mg
YmFzZWZpZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Jhc2VmaWVsZCk7CiAgICBzdGF0
aWMgY29uc3QgZm10ZmxhZ3MgZmxvYXRmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19m
bG9hdGZpZWxkKTsKCgogICAgdHlwZWRlZiBfSW9zX0lvc3RhdGUgaW9zdGF0ZTsKICAgIHN0YXRp
YyBjb25zdCBpb3N0YXRlIGJhZGJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2JhZGJpdCk7
CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBlb2ZiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpf
U19lb2ZiaXQpOwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZmFpbGJpdCA9IGlvc3RhdGUoX19p
b3NfZmxhZ3M6Ol9TX2ZhaWxiaXQpOwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZ29vZGJpdCA9
IGlvc3RhdGUoMCk7CgoKICAgIHR5cGVkZWYgX0lvc19PcGVubW9kZSBvcGVubW9kZTsKICAgIHN0
YXRpYyBjb25zdCBvcGVubW9kZSBhcHAgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYXBwKTsK
ICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBhdGUgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1Nf
YXRlKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBiaW5hcnkgPSBvcGVubW9kZShfX2lvc19m
bGFnczo6X1NfYmluKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBpbiA9IG9wZW5tb2RlKF9f
aW9zX2ZsYWdzOjpfU19pbik7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgb3V0ID0gb3Blbm1v
ZGUoX19pb3NfZmxhZ3M6Ol9TX291dCk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgdHJ1bmMg
PSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfdHJ1bmMpOwoKCiAgICB0eXBlZGVmIF9Jb3NfU2Vl
a2RpciBzZWVrZGlyOwogICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgYmVnID0gc2Vla2RpcigwKTsK
ICAgIHN0YXRpYyBjb25zdCBzZWVrZGlyIGN1ciA9IHNlZWtkaXIoMSk7CiAgICBzdGF0aWMgY29u
c3Qgc2Vla2RpciBlbmQgPSBzZWVrZGlyKDIpOwojIDIyOSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9n
Y2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9pb3NfYmFzZS5oIiAzCiAgICBlbnVtIGV2
ZW50CiAgICB7CiAgICAgIGVyYXNlX2V2ZW50LAogICAgICBpbWJ1ZV9ldmVudCwKICAgICAgY29w
eWZtdF9ldmVudAogICAgfTsKCiAgICB0eXBlZGVmIHZvaWQgKCpldmVudF9jYWxsYmFjaykgKGV2
ZW50LCBpb3NfYmFzZSYsIGludCk7CgogICAgdm9pZAogICAgcmVnaXN0ZXJfY2FsbGJhY2soZXZl
bnRfY2FsbGJhY2sgX19mbiwgaW50IF9faW5kZXgpOwoKICBwcm90ZWN0ZWQ6CgogICAgc3RyZWFt
c2l6ZSBfTV9wcmVjaXNpb247CiAgICBzdHJlYW1zaXplIF9NX3dpZHRoOwogICAgZm10ZmxhZ3Mg
X01fZmxhZ3M7CiAgICBpb3N0YXRlIF9NX2V4Y2VwdGlvbjsKICAgIGlvc3RhdGUgX01fc3RyZWFt
YnVmX3N0YXRlOwoKCgogICAgc3RydWN0IF9DYWxsYmFja19saXN0CiAgICB7CgogICAgICBfQ2Fs
bGJhY2tfbGlzdCogX01fbmV4dDsKICAgICAgaW9zX2Jhc2U6OmV2ZW50X2NhbGxiYWNrIF9NX2Zu
OwogICAgICBpbnQgX01faW5kZXg7CiAgICAgIF9BdG9taWNfd29yZCBfTV9yZWZjb3VudDsKCiAg
ICAgIF9DYWxsYmFja19saXN0KGlvc19iYXNlOjpldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQgX19p
bmRleCwKICAgICAgICAgICAgICAgICAgICAgX0NhbGxiYWNrX2xpc3QqIF9fY2IpCiAgICAgIDog
X01fbmV4dChfX2NiKSwgX01fZm4oX19mbiksIF9NX2luZGV4KF9faW5kZXgpLCBfTV9yZWZjb3Vu
dCgwKSB7IH0KCiAgICAgIHZvaWQKICAgICAgX01fYWRkX3JlZmVyZW5jZSgpIHsgX19hdG9taWNf
YWRkKCZfTV9yZWZjb3VudCwgMSk7IH0KCgogICAgICBpbnQKICAgICAgX01fcmVtb3ZlX3JlZmVy
ZW5jZSgpIHsgcmV0dXJuIF9fZXhjaGFuZ2VfYW5kX2FkZCgmX01fcmVmY291bnQsIC0xKTsgfQog
ICAgfTsKCiAgICAgX0NhbGxiYWNrX2xpc3QqIF9NX2NhbGxiYWNrczsKCiAgICB2b2lkCiAgICBf
TV9jYWxsX2NhbGxiYWNrcyhldmVudCBfX2V2KSB0aHJvdygpOwoKICAgIHZvaWQKICAgIF9NX2Rp
c3Bvc2VfY2FsbGJhY2tzKHZvaWQpOwoKCiAgICBzdHJ1Y3QgX1dvcmRzCiAgICB7CiAgICAgIHZv
aWQqIF9NX3B3b3JkOwogICAgICBsb25nIF9NX2l3b3JkOwogICAgICBfV29yZHMoKSA6IF9NX3B3
b3JkKDApLCBfTV9pd29yZCgwKSB7IH0KICAgIH07CgoKICAgIF9Xb3JkcyBfTV93b3JkX3plcm87
CgoKICAgIHN0YXRpYyBjb25zdCBpbnQgX1NfbG9jYWxfd29yZF9zaXplID0gODsKICAgIF9Xb3Jk
cyBfTV9sb2NhbF93b3JkW19TX2xvY2FsX3dvcmRfc2l6ZV07CgoKICAgIGludCBfTV93b3JkX3Np
emU7CiAgICBfV29yZHMqIF9NX3dvcmQ7CgogICAgX1dvcmRzJgogICAgX01fZ3Jvd193b3Jkcyhp
bnQgX19pbmRleCk7CgoKICAgIGxvY2FsZSBfTV9pb3NfbG9jYWxlOwoKICAgIHZvaWQKICAgIF9N
X2luaXQoKTsKCiAgcHVibGljOgoKCgoKCiAgICBjbGFzcyBJbml0CiAgICB7CiAgICAgIGZyaWVu
ZCBjbGFzcyBpb3NfYmFzZTsKICAgIHB1YmxpYzoKICAgICAgSW5pdCgpOwogICAgICB+SW5pdCgp
OwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfaW9zX2NyZWF0ZShib29sIF9fc3luYyk7Cgog
ICAgICBzdGF0aWMgdm9pZAogICAgICBfU19pb3NfZGVzdHJveSgpOwoKICAgIHByaXZhdGU6CiAg
ICAgIHN0YXRpYyBpbnQgX1NfaW9zX2Jhc2VfaW5pdDsKICAgICAgc3RhdGljIGJvb2wgX1Nfc3lu
Y2VkX3dpdGhfc3RkaW87CiAgICB9OwoKCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIGZsYWdzKCkg
Y29uc3QgeyByZXR1cm4gX01fZmxhZ3M7IH0KCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIGZsYWdz
KGZtdGZsYWdzIF9fZm10ZmwpCiAgICB7CiAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7
CiAgICAgIF9NX2ZsYWdzID0gX19mbXRmbDsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAg
IGlubGluZSBmbXRmbGFncwogICAgc2V0ZihmbXRmbGFncyBfX2ZtdGZsKQogICAgewogICAgICBm
bXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFncyB8PSBfX2ZtdGZsOwogICAg
ICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBzZXRmKGZtdGZs
YWdzIF9fZm10ZmwsIGZtdGZsYWdzIF9fbWFzaykKICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQg
PSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgJj0gfl9fbWFzazsKICAgICAgX01fZmxhZ3MgfD0g
KF9fZm10ZmwgJiBfX21hc2spOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5l
IHZvaWQKICAgIHVuc2V0ZihmbXRmbGFncyBfX21hc2spIHsgX01fZmxhZ3MgJj0gfl9fbWFzazsg
fQoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICBwcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiBf
TV9wcmVjaXNpb247IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgcHJlY2lzaW9uKHN0cmVh
bXNpemUgX19wcmVjKQogICAgewogICAgICBzdHJlYW1zaXplIF9fb2xkID0gX01fcHJlY2lzaW9u
OwogICAgICBfTV9wcmVjaXNpb24gPSBfX3ByZWM7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0K
CiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgd2lkdGgoKSBjb25zdCB7IHJldHVybiBfTV93aWR0
aDsgfQoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICB3aWR0aChzdHJlYW1zaXplIF9fd2lkZSkK
ICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX29sZCA9IF9NX3dpZHRoOwogICAgICBfTV93aWR0aCA9
IF9fd2lkZTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIHN0YXRpYyBib29sCiAgICBz
eW5jX3dpdGhfc3RkaW8oYm9vbCBfX3N5bmMgPSB0cnVlKTsKCgogICAgbG9jYWxlCiAgICBpbWJ1
ZShjb25zdCBsb2NhbGUmIF9fbG9jKTsKCiAgICBpbmxpbmUgbG9jYWxlCiAgICBnZXRsb2MoKSBj
b25zdCB7IHJldHVybiBfTV9pb3NfbG9jYWxlOyB9CgoKICAgIHN0YXRpYyBpbnQKICAgIHhhbGxv
YygpIHRocm93KCk7CgogICAgaW5saW5lIGxvbmcmCiAgICBpd29yZChpbnQgX19peCkKICAgIHsK
ICAgICAgX1dvcmRzJiBfX3dvcmQgPSAoX19peCA8IF9NX3dvcmRfc2l6ZSkKICAgICAgICAgICAg
ICAgICAgICAgICAgPyBfTV93b3JkW19faXhdIDogX01fZ3Jvd193b3JkcyhfX2l4KTsKICAgICAg
cmV0dXJuIF9fd29yZC5fTV9pd29yZDsKICAgIH0KCiAgICBpbmxpbmUgdm9pZComCiAgICBwd29y
ZChpbnQgX19peCkKICAgIHsKICAgICAgX1dvcmRzJiBfX3dvcmQgPSAoX19peCA8IF9NX3dvcmRf
c2l6ZSkKICAgICAgICAgICAgICAgICAgICAgICAgPyBfTV93b3JkW19faXhdIDogX01fZ3Jvd193
b3JkcyhfX2l4KTsKICAgICAgcmV0dXJuIF9fd29yZC5fTV9wd29yZDsKICAgIH0KCgogICAgfmlv
c19iYXNlKCk7CgogIHByb3RlY3RlZDoKICAgIGlvc19iYXNlKCk7CgoKCiAgcHJpdmF0ZToKICAg
IGlvc19iYXNlKGNvbnN0IGlvc19iYXNlJik7CgogICAgaW9zX2Jhc2UmCiAgICBvcGVyYXRvcj0o
Y29uc3QgaW9zX2Jhc2UmKTsKCiAgfTsKCgogIGlubGluZSBpb3NfYmFzZSYKICBib29sYWxwaGEo
aW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6Ym9vbGFscGhh
KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9ib29sYWxw
aGEoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpib29s
YWxwaGEpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzaG93
YmFzZShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzaG93
YmFzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2hv
d2Jhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpz
aG93YmFzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNo
b3dwb2ludChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpz
aG93cG9pbnQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBu
b3Nob3dwb2ludChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jh
c2U6OnNob3dwb2ludCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNl
JgogIHNob3dwb3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFz
ZTo6c2hvd3Bvcyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgog
IG5vc2hvd3Bvcyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jh
c2U6OnNob3dwb3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYK
ICBza2lwd3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6
c2tpcHdzKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9z
a2lwd3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpz
a2lwd3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICB1cHBl
cmNhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6dXBw
ZXJjYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm91
cHBlcmNhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNl
Ojp1cHBlcmNhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYK
ICB1bml0YnVmKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgIF9fYmFzZS5zZXRmKGlvc19iYXNl
Ojp1bml0YnVmKTsKICAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgog
IG5vdW5pdGJ1Zihpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jhc2UudW5zZXRmKGlvc19i
YXNlOjp1bml0YnVmKTsKICAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFz
ZSYKICBpbnRlcm5hbChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jhc2Uuc2V0Zihpb3Nf
YmFzZTo6aW50ZXJuYWwsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CiAgICAgcmV0dXJuIF9fYmFz
ZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBsZWZ0KGlvc19iYXNlJiBfX2Jhc2UpCiAgewog
ICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmxlZnQsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CiAg
ICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHJpZ2h0KGlvc19iYXNl
JiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnJpZ2h0LCBpb3NfYmFzZTo6
YWRqdXN0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jhc2Um
CiAgZGVjKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmRl
YywgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5l
IGlvc19iYXNlJgogIGhleChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlv
c19iYXNlOjpoZXgsIGlvc19iYXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9
CgogIGlubGluZSBpb3NfYmFzZSYKICBvY3QoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jh
c2Uuc2V0Zihpb3NfYmFzZTo6b2N0LCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgIHJldHVybiBf
X2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIGZpeGVkKGlvc19iYXNlJiBfX2Jhc2Up
CiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmZpeGVkLCBpb3NfYmFzZTo6ZmxvYXRmaWVs
ZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNjaWVudGlm
aWMoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2NpZW50
aWZpYywgaW9zX2Jhc2U6OmZsb2F0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9Cgp9CiMg
NTAgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2lvcyIg
MiAzCiMgMSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEv
c3RyZWFtYnVmIiAxIDMKIyA0NCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVk
ZS9jKysvMy4yLjEvc3RyZWFtYnVmIiAzCgoKCgoKCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBf
X2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYgX2lvcywKICAgICAg
ICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiaW4s
CiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiog
X19zYm91dCk7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWYKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVk
ZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9mZl90eXBlOwoKCiAgICAg
IHR5cGVkZWYgY3R5cGU8Y2hhcl90eXBlPiBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFz
aWNfc3RyZWFtYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fc3RyZWFtYnVmX3R5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnN0YXRlX3R5cGUgX19zdGF0ZV90eXBl
OwoKICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX2lvczxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsK
ICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX2lzdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47
CiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19vc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+
OwogICAgICBmcmllbmQgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0
c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3I8Y2hhcl90eXBl
LCB0cmFpdHNfdHlwZT47CgogICAgICBmcmllbmQgc3RyZWFtc2l6ZQogICAgICBfX2NvcHlfc3Ry
ZWFtYnVmczw+KGJhc2ljX2lvczxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiYgX19pb3MsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYmluLF9fc3RyZWFtYnVm
X3R5cGUqIF9fc2JvdXQpOwoKICAgIHByb3RlY3RlZDoKCgoKCgogICAgICBjaGFyX3R5cGUqIF9N
X2J1ZjsKCgogICAgICBzaXplX3QgX01fYnVmX3NpemU7CgoKICAgICAgc2l6ZV90IF9NX2J1Zl9z
aXplX29wdDsKCgoKICAgICAgYm9vbCBfTV9idWZfdW5pZmllZDsKCgoKCgoKICAgICAgY2hhcl90
eXBlKiBfTV9pbl9iZWc7CiAgICAgIGNoYXJfdHlwZSogX01faW5fY3VyOwogICAgICBjaGFyX3R5
cGUqIF9NX2luX2VuZDsKICAgICAgY2hhcl90eXBlKiBfTV9vdXRfYmVnOwogICAgICBjaGFyX3R5
cGUqIF9NX291dF9jdXI7CiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2VuZDsKCgogICAgICBpb3Nf
YmFzZTo6b3Blbm1vZGUgX01fbW9kZTsKCgogICAgICBsb2NhbGUgX01fYnVmX2xvY2FsZTsKCgog
ICAgICBib29sIF9NX2J1Zl9sb2NhbGVfaW5pdDsKCgoKCgoKICAgICAgc3RhdGljIGNvbnN0IHNp
emVfdCBfU19wYmFja19zaXplID0gMTsKICAgICAgY2hhcl90eXBlIF9NX3BiYWNrW19TX3BiYWNr
X3NpemVdOwogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrX2N1cl9zYXZlOwogICAgICBjaGFyX3R5
cGUqIF9NX3BiYWNrX2VuZF9zYXZlOwogICAgICBib29sIF9NX3BiYWNrX2luaXQ7CgoKICAgICAg
ZnBvczxfX3N0YXRlX3R5cGU+IF9NX3BvczsKCgoKCiAgICAgIHZvaWQKICAgICAgX01fcGJhY2tf
Y3JlYXRlKCkKICAgICAgewogICAgICAgIGlmICghX01fcGJhY2tfaW5pdCkKICAgICAgICAgIHsK
ICAgICAgICAgICAgc2l6ZV90IF9fZGlzdCA9IF9NX2luX2VuZCAtIF9NX2luX2N1cjsKICAgICAg
ICAgICAgc2l6ZV90IF9fbGVuID0gbWluKF9TX3BiYWNrX3NpemUsIF9fZGlzdCk7CiAgICAgICAg
ICAgIHRyYWl0c190eXBlOjpjb3B5KF9NX3BiYWNrLCBfTV9pbl9jdXIsIF9fbGVuKTsKICAgICAg
ICAgICAgX01fcGJhY2tfY3VyX3NhdmUgPSBfTV9pbl9jdXI7CiAgICAgICAgICAgIF9NX3BiYWNr
X2VuZF9zYXZlID0gX01faW5fZW5kOwogICAgICAgICAgICB0aGlzLT5zZXRnKF9NX3BiYWNrLCBf
TV9wYmFjaywgX01fcGJhY2sgKyBfX2xlbik7CiAgICAgICAgICAgIF9NX3BiYWNrX2luaXQgPSB0
cnVlOwogICAgICAgICAgfQogICAgICB9CgoKCgogICAgICB2b2lkCiAgICAgIF9NX3BiYWNrX2Rl
c3Ryb3koKQogICAgICB7CiAgICAgICAgaWYgKF9NX3BiYWNrX2luaXQpCiAgICAgICAgICB7Cgog
ICAgICAgICAgICBzaXplX3QgX19vZmZfY3VyID0gX01faW5fY3VyIC0gX01fcGJhY2s7CgoKICAg
ICAgICAgICAgc2l6ZV90IF9fb2ZmX2VuZCA9IDA7CiAgICAgICAgICAgIHNpemVfdCBfX3BiYWNr
X2xlbiA9IF9NX2luX2VuZCAtIF9NX3BiYWNrOwogICAgICAgICAgICBzaXplX3QgX19zYXZlX2xl
biA9IF9NX3BiYWNrX2VuZF9zYXZlIC0gX01fYnVmOwogICAgICAgICAgICBpZiAoX19wYmFja19s
ZW4gPiBfX3NhdmVfbGVuKQogICAgICAgICAgICAgIF9fb2ZmX2VuZCA9IF9fcGJhY2tfbGVuIC0g
X19zYXZlX2xlbjsKCiAgICAgICAgICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9wYmFja19jdXJf
c2F2ZSArIF9fb2ZmX2N1ciwKICAgICAgICAgICAgICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2
ZSArIF9fb2ZmX2VuZCk7CiAgICAgICAgICAgIF9NX3BiYWNrX2N1cl9zYXZlID0gX19udWxsOwog
ICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSA9IF9fbnVsbDsKICAgICAgICAgICAgX01fcGJh
Y2tfaW5pdCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICB9CgoKCiAgICAgIHZvaWQKICAgICAg
X01faW5fY3VyX21vdmUob2ZmX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3Rv
dXQgPSBfTV9vdXRfY3VyOwogICAgICAgIF9NX2luX2N1ciArPSBfX247CiAgICAgICAgaWYgKF9f
dGVzdG91dCAmJiBfTV9idWZfdW5pZmllZCkKICAgICAgICAgIF9NX291dF9jdXIgKz0gX19uOwog
ICAgICB9CiMgMjAyICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8z
LjIuMS9zdHJlYW1idWYiIDMKICAgICAgdm9pZAogICAgICBfTV9vdXRfY3VyX21vdmUob2ZmX3R5
cGUgX19uKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX2luX2N1cjsKCiAgICAg
ICAgX01fb3V0X2N1ciArPSBfX247CiAgICAgICAgaWYgKF9fdGVzdGluICYmIF9NX2J1Zl91bmlm
aWVkKQogICAgICAgICAgX01faW5fY3VyICs9IF9fbjsKICAgICAgICBpZiAoX01fb3V0X2N1ciA+
IF9NX291dF9lbmQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9NX291dF9lbmQgPSBfTV9vdXRf
Y3VyOwoKICAgICAgICAgICAgaWYgKF9fdGVzdGluKQogICAgICAgICAgICAgIF9NX2luX2VuZCAr
PSBfX247CiAgICAgICAgICB9CiAgICAgIH0KCgoKCiAgICAgIG9mZl90eXBlCiAgICAgIF9NX291
dF9idWZfc2l6ZSgpCiAgICAgIHsKICAgICAgICBvZmZfdHlwZSBfX3JldCA9IDA7CiAgICAgICAg
aWYgKF9NX291dF9jdXIpCiAgICAgICAgICB7CgogICAgICAgICAgICBpZiAoX01fb3V0X2JlZyA9
PSBfTV9idWYpCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfYmVnICsgX01fYnVmX3NpemUg
LSBfTV9vdXRfY3VyOwoKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fcmV0ID0gX01f
b3V0X2VuZCAtIF9NX291dF9jdXI7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0Owog
ICAgICB9CgogIHB1YmxpYzoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfc3RyZWFtYnVmKCkK
ICAgICAgewogICAgICAgIF9NX2J1Zl91bmlmaWVkID0gZmFsc2U7CiAgICAgICAgX01fYnVmX3Np
emUgPSAwOwogICAgICAgIF9NX2J1Zl9zaXplX29wdCA9IDA7CiAgICAgICAgX01fbW9kZSA9IGlv
c19iYXNlOjpvcGVubW9kZSgwKTsKICAgICAgICBfTV9idWZfbG9jYWxlX2luaXQgPSBmYWxzZTsK
ICAgICAgfQoKCiAgICAgIGxvY2FsZQogICAgICBwdWJpbWJ1ZShjb25zdCBsb2NhbGUgJl9fbG9j
KQogICAgICB7CiAgICAgICAgbG9jYWxlIF9fdG1wKHRoaXMtPmdldGxvYygpKTsKICAgICAgICB0
aGlzLT5pbWJ1ZShfX2xvYyk7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgogICAgICBs
b2NhbGUKICAgICAgZ2V0bG9jKCkgY29uc3QKICAgICAgewogICAgICAgIGlmIChfTV9idWZfbG9j
YWxlX2luaXQpCiAgICAgICAgICByZXR1cm4gX01fYnVmX2xvY2FsZTsKICAgICAgICBlbHNlCiAg
ICAgICAgICByZXR1cm4gbG9jYWxlKCk7CiAgICAgIH0KCgogICAgICBfX3N0cmVhbWJ1Zl90eXBl
KgogICAgICBwdWJzZXRidWYoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7
IHJldHVybiB0aGlzLT5zZXRidWYoX19zLCBfX24pOyB9CgogICAgICBwb3NfdHlwZQogICAgICBw
dWJzZWVrb2ZmKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwKICAgICAg
ICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9z
X2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gdGhpcy0+c2Vla29mZihfX29mZiwgX193YXksIF9f
bW9kZSk7IH0KCiAgICAgIHBvc190eXBlCiAgICAgIHB1YnNlZWtwb3MocG9zX3R5cGUgX19zcCwK
ICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6Omlu
IHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gdGhpcy0+c2Vla3BvcyhfX3NwLCBfX21v
ZGUpOyB9CgogICAgICBpbnQKICAgICAgcHVic3luYygpIHsgcmV0dXJuIHRoaXMtPnN5bmMoKTsg
fQoKCgogICAgICBzdHJlYW1zaXplCiAgICAgIGluX2F2YWlsKCkKICAgICAgewogICAgICAgIHN0
cmVhbXNpemUgX19yZXQ7CiAgICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9p
bl9lbmQpCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmIChfTV9wYmFja19pbml0KQogICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgIHNpemVfdCBfX3NhdmVfbGVuID0gX01fcGJhY2tfZW5k
X3NhdmUgLSBfTV9wYmFja19jdXJfc2F2ZTsKICAgICAgICAgICAgICAgIHNpemVfdCBfX3BiYWNr
X2xlbiA9IF9NX2luX2N1ciAtIF9NX3BiYWNrOwogICAgICAgICAgICAgICAgX19yZXQgPSBfX3Nh
dmVfbGVuIC0gX19wYmFja19sZW47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgX19yZXQgPSB0aGlzLT5lZ3B0cigpIC0gdGhpcy0+Z3B0cigpOwogICAgICAg
ICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fcmV0ID0gdGhpcy0+c2hvd21hbnljKCk7CiAg
ICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogICAgICBpbnRfdHlwZQogICAgICBzbmV4dGMo
KQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAg
ICAgICAgcmV0dXJuICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUodGhpcy0+c2J1bXBjKCksIF9f
ZW9mKQogICAgICAgICAgICAgICAgPyBfX2VvZiA6IHRoaXMtPnNnZXRjKCkpOwogICAgICB9Cgog
ICAgICBpbnRfdHlwZQogICAgICBzYnVtcGMoKTsKCiAgICAgIGludF90eXBlCiAgICAgIHNnZXRj
KCkKICAgICAgewogICAgICAgIGludF90eXBlIF9fcmV0OwogICAgICAgIGlmIChfTV9pbl9jdXIg
JiYgX01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6
dG9faW50X3R5cGUoKih0aGlzLT5ncHRyKCkpKTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3Jl
dCA9IHRoaXMtPnVuZGVyZmxvdygpOwogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKICAg
ICAgc3RyZWFtc2l6ZQogICAgICBzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24p
CiAgICAgIHsgcmV0dXJuIHRoaXMtPnhzZ2V0bihfX3MsIF9fbik7IH0KCgogICAgICBpbnRfdHlw
ZQogICAgICBzcHV0YmFja2MoY2hhcl90eXBlIF9fYyk7CgogICAgICBpbnRfdHlwZQogICAgICBz
dW5nZXRjKCk7CgoKICAgICAgaW50X3R5cGUKICAgICAgc3B1dGMoY2hhcl90eXBlIF9fYyk7Cgog
ICAgICBzdHJlYW1zaXplCiAgICAgIHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1z
aXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+eHNwdXRuKF9fcywgX19uKTsgfQoKICAgIHBy
b3RlY3RlZDoKICAgICAgYmFzaWNfc3RyZWFtYnVmKCkKICAgICAgOiBfTV9idWYoX19udWxsKSwg
X01fYnVmX3NpemUoMCksIF9NX2J1Zl9zaXplX29wdCgxMDI0KSwKICAgICAgX01fYnVmX3VuaWZp
ZWQoZmFsc2UpLCBfTV9pbl9iZWcoMCksIF9NX2luX2N1cigwKSwgX01faW5fZW5kKDApLAogICAg
ICBfTV9vdXRfYmVnKDApLCBfTV9vdXRfY3VyKDApLCBfTV9vdXRfZW5kKDApLAogICAgICBfTV9t
b2RlKGlvc19iYXNlOjpvcGVubW9kZSgwKSksIF9NX2J1Zl9sb2NhbGUobG9jYWxlKCkpLAogICAg
ICBfTV9idWZfbG9jYWxlX2luaXQoZmFsc2UpLCBfTV9wYmFja19jdXJfc2F2ZSgwKSwgX01fcGJh
Y2tfZW5kX3NhdmUoMCksCiAgICAgIF9NX3BiYWNrX2luaXQoZmFsc2UpCiAgICAgIHsgfQoKCiAg
ICAgIGNoYXJfdHlwZSoKICAgICAgZWJhY2soKSBjb25zdCB7IHJldHVybiBfTV9pbl9iZWc7IH0K
CiAgICAgIGNoYXJfdHlwZSoKICAgICAgZ3B0cigpIGNvbnN0IHsgcmV0dXJuIF9NX2luX2N1cjsg
fQoKICAgICAgY2hhcl90eXBlKgogICAgICBlZ3B0cigpIGNvbnN0IHsgcmV0dXJuIF9NX2luX2Vu
ZDsgfQoKICAgICAgdm9pZAogICAgICBnYnVtcChpbnQgX19uKSB7IF9NX2luX2N1ciArPSBfX247
IH0KCiAgICAgIHZvaWQKICAgICAgc2V0ZyhjaGFyX3R5cGUqIF9fZ2JlZywgY2hhcl90eXBlKiBf
X2duZXh0LCBjaGFyX3R5cGUqIF9fZ2VuZCkKICAgICAgewogICAgICAgIF9NX2luX2JlZyA9IF9f
Z2JlZzsKICAgICAgICBfTV9pbl9jdXIgPSBfX2duZXh0OwogICAgICAgIF9NX2luX2VuZCA9IF9f
Z2VuZDsKICAgICAgICBpZiAoIShfTV9tb2RlICYgaW9zX2Jhc2U6OmluKSAmJiBfX2diZWcgJiYg
X19nbmV4dCAmJiBfX2dlbmQpCiAgICAgICAgICBfTV9tb2RlID0gX01fbW9kZSB8IGlvc19iYXNl
OjppbjsKICAgICAgfQoKCiAgICAgIGNoYXJfdHlwZSoKICAgICAgcGJhc2UoKSBjb25zdCB7IHJl
dHVybiBfTV9vdXRfYmVnOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIHBwdHIoKSBjb25zdCB7
IHJldHVybiBfTV9vdXRfY3VyOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGVwcHRyKCkgY29u
c3QgeyByZXR1cm4gX01fb3V0X2VuZDsgfQoKICAgICAgdm9pZAogICAgICBwYnVtcChpbnQgX19u
KSB7IF9NX291dF9jdXIgKz0gX19uOyB9CgogICAgICB2b2lkCiAgICAgIHNldHAoY2hhcl90eXBl
KiBfX3BiZWcsIGNoYXJfdHlwZSogX19wZW5kKQogICAgICB7CiAgICAgICAgX01fb3V0X2JlZyA9
IF9NX291dF9jdXIgPSBfX3BiZWc7CiAgICAgICAgX01fb3V0X2VuZCA9IF9fcGVuZDsKICAgICAg
ICBpZiAoIShfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkgJiYgX19wYmVnICYmIF9fcGVuZCkKICAg
ICAgICAgIF9NX21vZGUgPSBfTV9tb2RlIHwgaW9zX2Jhc2U6Om91dDsKICAgICAgfQoKCgogICAg
ICB2aXJ0dWFsIHZvaWQKICAgICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgICAgewog
ICAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdCA9IHRydWU7CiAgICAgICAgaWYgKF9NX2J1Zl9sb2Nh
bGUgIT0gX19sb2MpCiAgICAgICAgICBfTV9idWZfbG9jYWxlID0gX19sb2M7CiAgICAgIH0KCgog
ICAgICB2aXJ0dWFsIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsX1RyYWl0cz4qCiAgICAgIHNl
dGJ1ZihjaGFyX3R5cGUqLCBzdHJlYW1zaXplKQogICAgICB7IHJldHVybiB0aGlzOyB9CgogICAg
ICB2aXJ0dWFsIHBvc190eXBlCiAgICAgIHNlZWtvZmYob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVr
ZGlyLAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8IGlv
c19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHBvc190eXBlKG9mZl90eXBlKC0xKSk7IH0KCiAg
ICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla3Bvcyhwb3NfdHlwZSwKICAgICAgICAgICAg
ICBpb3NfYmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAg
ICB7IHJldHVybiBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOyB9CgogICAgICB2aXJ0dWFsIGludAog
ICAgICBzeW5jKCkgeyByZXR1cm4gMDsgfQoKCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAg
ICBzaG93bWFueWMoKSB7IHJldHVybiAwOyB9CgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAg
ICAgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICB2aXJ0dWFs
IGludF90eXBlCiAgICAgIHVuZGVyZmxvdygpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjpl
b2YoKTsgfQoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1ZmxvdygpCiAgICAgIHsKICAg
ICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICBib29sIF9f
dGVzdGVvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZSh0aGlzLT51bmRlcmZsb3coKSwgX19y
ZXQpOwogICAgICAgIGJvb2wgX190ZXN0cGVuZGluZyA9IF9NX2luX2N1ciAmJiBfTV9pbl9jdXIg
PCBfTV9pbl9lbmQ7CiAgICAgICAgaWYgKCFfX3Rlc3Rlb2YgJiYgX190ZXN0cGVuZGluZykKICAg
ICAgICAgIHsKICAgICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKl9N
X2luX2N1cik7CiAgICAgICAgICAgICsrX01faW5fY3VyOwogICAgICAgICAgICBpZiAoX01fYnVm
X3VuaWZpZWQgJiYgX01fbW9kZSAmIGlvc19iYXNlOjpvdXQpCiAgICAgICAgICAgICAgKytfTV9v
dXRfY3VyOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKCiAgICAg
IHZpcnR1YWwgaW50X3R5cGUKICAgICAgcGJhY2tmYWlsKGludF90eXBlID0gdHJhaXRzX3R5cGU6
OmVvZigpKQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KCgogICAgICB2aXJ0
dWFsIHN0cmVhbXNpemUKICAgICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1z
aXplIF9fbik7CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIG92ZXJmbG93KGludF90eXBl
ID0gdHJhaXRzX3R5cGU6OmVvZigpKQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7
IH0KIyA0ODUgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4x
L3N0cmVhbWJ1ZiIgMwogICAgcHJpdmF0ZToKICAgICAgYmFzaWNfc3RyZWFtYnVmKGNvbnN0IF9f
c3RyZWFtYnVmX3R5cGUmKSB7IH07CgogICAgICBfX3N0cmVhbWJ1Zl90eXBlJgogICAgICBvcGVy
YXRvcj0oY29uc3QgX19zdHJlYW1idWZfdHlwZSYpIHsgcmV0dXJuICp0aGlzOyB9OwoKICAgIH07
Cn0KCgoKCgojIDEgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMu
Mi4xL2JpdHMvc3RyZWFtYnVmLnRjYyIgMSAzCiMgMzkgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2Nj
LzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RyZWFtYnVmLnRjYyIgMwoKbmFtZXNwYWNl
IHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
Y29uc3Qgc2l6ZV90CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGJh
Y2tfc2l6ZTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAg
ICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzYnVtcGMoKQogICAgewog
ICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBf
TV9pbl9lbmQpCiAgICAgICAgewogICAgICAgICAgY2hhcl90eXBlIF9fYyA9ICoodGhpcy0+Z3B0
cigpKTsKICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKDEpOwogICAgICAgICAgX19yZXQgPSB0cmFp
dHNfdHlwZTo6dG9faW50X3R5cGUoX19jKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBf
X3JldCA9IHRoaXMtPnVmbG93KCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNf
c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8
X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzcHV0YmFja2MoY2hhcl90eXBlIF9fYykKICAgIHsKICAg
ICAgaW50X3R5cGUgX19yZXQ7CiAgICAgIGJvb2wgX190ZXN0cG9zID0gX01faW5fY3VyICYmIF9N
X2luX2JlZyA8IF9NX2luX2N1cjsKICAgICAgYm9vbCBfX3Rlc3RuZSA9IF9NX2luX2N1ciAmJiAh
dHJhaXRzX3R5cGU6OmVxKF9fYywgdGhpcy0+Z3B0cigpWy0xXSk7CiAgICAgIGlmICghX190ZXN0
cG9zIHx8IF9fdGVzdG5lKQogICAgICAgIF9fcmV0ID0gcGJhY2tmYWlsKHRyYWl0c190eXBlOjp0
b19pbnRfdHlwZShfX2MpKTsKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9NX2luX2N1
cl9tb3ZlKC0xKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCp0
aGlzLT5ncHRyKCkpOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNp
Y19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1
ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHN1bmdldGMoKQogICAgewogICAgICBpbnRfdHlwZSBf
X3JldDsKICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9jdXIpCiAgICAg
ICAgewogICAgICAgICAgX01faW5fY3VyX21vdmUoLTEpOwogICAgICAgICAgX19yZXQgPSB0cmFp
dHNfdHlwZTo6dG9faW50X3R5cGUoKl9NX2luX2N1cik7CiAgICAgICAgfQogICAgICBlbHNlCiAg
ICAgICAgX19yZXQgPSB0aGlzLT5wYmFja2ZhaWwoKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAg
fQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAg
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3B1dGMoY2hhcl90eXBlIF9f
YykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgIGlmIChfTV9vdXRfYnVmX3NpemUo
KSkKICAgICAgICB7CiAgICAgICAgICAqX01fb3V0X2N1ciA9IF9fYzsKICAgICAgICAgIF9NX291
dF9jdXJfbW92ZSgxKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBl
KF9fYyk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19yZXQgPSB0aGlzLT5vdmVyZmxv
dyh0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKSk7CiAgICAgIHJldHVybiBfX3JldDsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3Ry
ZWFtc2l6ZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgeHNnZXRu
KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBf
X3JldCA9IDA7CiAgICAgIHdoaWxlIChfX3JldCA8IF9fbikKICAgICAgICB7CiAgICAgICAgICBz
aXplX3QgX19idWZfbGVuID0gX01faW5fZW5kIC0gX01faW5fY3VyOwogICAgICAgICAgaWYgKF9f
YnVmX2xlbiA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzaXplX3QgX19yZW1haW5p
bmcgPSBfX24gLSBfX3JldDsKICAgICAgICAgICAgICBzaXplX3QgX19sZW4gPSBtaW4oX19idWZf
bGVuLCBfX3JlbWFpbmluZyk7CiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCBf
TV9pbl9jdXIsIF9fbGVuKTsKICAgICAgICAgICAgICBfX3JldCArPSBfX2xlbjsKICAgICAgICAg
ICAgICBfX3MgKz0gX19sZW47CiAgICAgICAgICAgICAgX01faW5fY3VyX21vdmUoX19sZW4pOwog
ICAgICAgICAgICB9CgogICAgICAgICAgaWYgKF9fcmV0IDwgX19uKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgaW50X3R5cGUgX19jID0gdGhpcy0+dWZsb3coKTsKICAgICAgICAgICAgICBp
ZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIHRyYWl0c190eXBlOjplb2YoKSkpCiAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9f
cysrLCB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpOwogICAgICAgICAgICAgICAgICAr
K19fcmV0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAg
ICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAg
eHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAg
c3RyZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAgIHdoaWxlIChfX3JldCA8IF9fbikKICAgICAgICB7
CiAgICAgICAgICBvZmZfdHlwZSBfX2J1Zl9sZW4gPSBfTV9vdXRfYnVmX3NpemUoKTsKICAgICAg
ICAgIGlmIChfX2J1Zl9sZW4gPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgb2ZmX3R5
cGUgX19yZW1haW5pbmcgPSBfX24gLSBfX3JldDsKICAgICAgICAgICAgICBvZmZfdHlwZSBfX2xl
biA9IG1pbihfX2J1Zl9sZW4sIF9fcmVtYWluaW5nKTsKICAgICAgICAgICAgICB0cmFpdHNfdHlw
ZTo6Y29weShfTV9vdXRfY3VyLCBfX3MsIF9fbGVuKTsKICAgICAgICAgICAgICBfX3JldCArPSBf
X2xlbjsKICAgICAgICAgICAgICBfX3MgKz0gX19sZW47CiAgICAgICAgICAgICAgX01fb3V0X2N1
cl9tb3ZlKF9fbGVuKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlmIChfX3JldCA8IF9fbikK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IHRoaXMtPm92ZXJmbG93
KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX19zKSk7CiAgICAgICAgICAgICAgaWYgKCF0cmFp
dHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCB0cmFpdHNfdHlwZTo6ZW9mKCkpKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICArK19fcmV0OwogICAgICAgICAgICAgICAgICArK19f
czsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoK
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3Ry
ZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4m
IF9faW9zLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
YWl0cz4qIF9fc2JpbiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh
clQsIF9UcmFpdHM+KiBfX3Nib3V0KQogIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRz
OjppbnRfdHlwZSBpbnRfdHlwZTsKCiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAwOwogICAgICBz
dHJlYW1zaXplIF9fYnVmc2l6ZSA9IF9fc2Jpbi0+aW5fYXZhaWwoKTsKICAgICAgc3RyZWFtc2l6
ZSBfX3h0cmN0OwogICAgICBib29sIF9fdGVzdHB1dCA9IF9fc2JvdXQtPl9NX21vZGUgJiBpb3Nf
YmFzZTo6b3V0OwogICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICB3aGlsZSAoX190ZXN0cHV0
ICYmIF9fYnVmc2l6ZSAhPSAtMSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfX2J1
ZnNpemUgIT0gMCAmJiBfX3NiaW4tPmdwdHIoKSAhPSBfX251bGwpCiAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgIF9feHRyY3QgPSBfX3Nib3V0LT5zcHV0bihfX3NiaW4tPmdwdHIo
KSwgX19idWZzaXplKTsKICAgICAgICAgICAgICAgICAgX19yZXQgKz0gX194dHJjdDsKICAgICAg
ICAgICAgICAgICAgX19zYmluLT5fTV9pbl9jdXJfbW92ZShfX3h0cmN0KTsKICAgICAgICAgICAg
ICAgICAgaWYgKF9feHRyY3QgIT0gX19idWZzaXplKQogICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgX0NoYXJUIF9fYnVmWzI1Nl07CiAgICAgICAgICAgICAgICAgIHN0
cmVhbXNpemUgX19jaGFyc3JlYWQgPSBfX3NiaW4tPnNnZXRuKF9fYnVmLCBzaXplb2YoX19idWYp
KTsKICAgICAgICAgICAgICAgICAgX194dHJjdCA9IF9fc2JvdXQtPnNwdXRuKF9fYnVmLCBfX2No
YXJzcmVhZCk7CiAgICAgICAgICAgICAgICAgIF9fcmV0ICs9IF9feHRyY3Q7CiAgICAgICAgICAg
ICAgICAgIGlmIChfX3h0cmN0ICE9IF9fY2hhcnNyZWFkKQogICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChfVHJhaXRzOjplcV9pbnRf
dHlwZShfX3NiaW4tPnNnZXRjKCksIF9UcmFpdHM6OmVvZigpKSkKICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgIF9fYnVmc2l6ZSA9IF9fc2Jpbi0+aW5fYXZhaWwoKTsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg
ewogICAgICAgICAgX19pb3Muc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAg
aWYgKChfX2lvcy5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6ZmFpbGJpdCkgIT0gMCkKICAgICAg
ICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgogIGV4
dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJlYW1idWY8Y2hhcj47CiAgZXh0ZXJuIHRlbXBs
YXRlCiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8Y2hhcj4m
LCBiYXNpY19zdHJlYW1idWY8Y2hhcj4qLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3Ry
ZWFtYnVmPGNoYXI+Kik7CiMgMjU5ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNs
dWRlL2MrKy8zLjIuMS9iaXRzL3N0cmVhbWJ1Zi50Y2MiIDMKfQojIDQ5OSAiL3Vzci9sb2NhbC9w
cm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvc3RyZWFtYnVmIiAyIDMKIyA1MSAi
L3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvaW9zIiAyIDMK
IyAxICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRz
L2Jhc2ljX2lvcy5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5j
bHVkZS9jKysvMy4yLjEvYml0cy9iYXNpY19pb3MuaCIgMwoKIyAxICIvdXNyL2xvY2FsL3Byb2R1
Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0cmVhbWJ1Zl9pdGVyYXRvci5o
IiAxIDMKIyA0MiAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4y
LjEvYml0cy9zdHJlYW1idWZfaXRlcmF0b3IuaCIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGlzdHJlYW1i
dWZfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPGlucHV0X2l0ZXJhdG9yX3RhZywgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIF9D
aGFyVCosIF9DaGFyVCY+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBj
aGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNp
Y19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRl
ZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gaXN0cmVhbV90eXBlOwoKICAgIHByaXZh
dGU6CgoKCgoKCgogICAgICBtdXRhYmxlIHN0cmVhbWJ1Zl90eXBlKiBfTV9zYnVmOwogICAgICBp
bnRfdHlwZSBfTV9jOwoKICAgIHB1YmxpYzoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcigpIHRo
cm93KCkKICAgICAgOiBfTV9zYnVmKDApLCBfTV9jKHRyYWl0c190eXBlOjplb2YoKSkgeyB9Cgog
ICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKGlzdHJlYW1fdHlwZSYgX19zKSB0aHJvdygpCiAgICAg
IDogX01fc2J1ZihfX3MucmRidWYoKSksIF9NX2ModHJhaXRzX3R5cGU6OmVvZigpKSB7IH0KCiAg
ICAgIGlzdHJlYW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5cGUqIF9fcykgdGhyb3coKQogICAg
ICA6IF9NX3NidWYoX19zKSwgX01fYyh0cmFpdHNfdHlwZTo6ZW9mKCkpIHsgfQoKCiAgICAgIGNo
YXJfdHlwZQogICAgICBvcGVyYXRvciooKSBjb25zdAogICAgICB7IHJldHVybiB0cmFpdHNfdHlw
ZTo6dG9fY2hhcl90eXBlKF9NX2dldCgpKTsgfQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvciYK
ICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsKICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9
IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICBpZiAoX01fc2J1ZiAmJiB0cmFpdHNfdHlwZTo6
ZXFfaW50X3R5cGUoX01fc2J1Zi0+c2J1bXBjKCksIF9fZW9mKSkKICAgICAgICAgIF9NX3NidWYg
PSAwOwogICAgICAgIGVsc2UKICAgICAgICAgIF9NX2MgPSBfX2VvZjsKICAgICAgICByZXR1cm4g
KnRoaXM7CiAgICAgIH0KCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IKICAgICAgb3BlcmF0b3Ir
KyhpbnQpCiAgICAgIHsKICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBl
Ojplb2YoKTsKICAgICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yIF9fb2xkID0gKnRoaXM7CiAgICAg
ICAgaWYgKF9NX3NidWYKICAgICAgICAgICAgJiYgdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKChf
X29sZC5fTV9jID0gX01fc2J1Zi0+c2J1bXBjKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19lb2YpKQogICAgICAgICAgX01fc2J1ZiA9IDA7CiAgICAgICAgZWxz
ZQogICAgICAgICAgX01fYyA9IF9fZW9mOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoK
CgoKICAgICAgYm9vbAogICAgICBlcXVhbChjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yJiBfX2Ip
IGNvbnN0CiAgICAgIHsKICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBl
Ojplb2YoKTsKICAgICAgICBib29sIF9fdGhpc2VvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlw
ZShfTV9nZXQoKSwgX19lb2YpOwogICAgICAgIGJvb2wgX19iZW9mID0gdHJhaXRzX3R5cGU6OmVx
X2ludF90eXBlKF9fYi5fTV9nZXQoKSwgX19lb2YpOwogICAgICAgIHJldHVybiAoX190aGlzZW9m
ICYmIF9fYmVvZiB8fCAoIV9fdGhpc2VvZiAmJiAhX19iZW9mKSk7CiAgICAgIH0KCgogICAgcHJp
dmF0ZToKICAgICAgaW50X3R5cGUKICAgICAgX01fZ2V0KCkgY29uc3QKICAgICAgewogICAgICAg
IGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIGludF90
eXBlIF9fcmV0ID0gX19lb2Y7CiAgICAgICAgaWYgKF9NX3NidWYpCiAgICAgICAgICB7CiAgICAg
ICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9NX2MsIF9fZW9mKSkKICAgICAg
ICAgICAgICBfX3JldCA9IF9NX2M7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBpZiAo
dHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKChfX3JldCA9IF9NX3NidWYtPnNnZXRjKCkpLCBfX2Vv
ZikpCiAgICAgICAgICAgICAgICBfTV9zYnVmID0gMDsKICAgICAgICAgIH0KICAgICAgICByZXR1
cm4gX19yZXQ7CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGlzdHJl
YW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBjb25z
dCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJu
IF9fYS5lcXVhbChfX2IpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGlzdHJlYW1idWZf
aXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3Ry
ZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuICFfX2Eu
ZXF1YWwoX19iKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxv
dXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHVi
bGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFp
dHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
YWl0cz4gc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+IG9zdHJlYW1fdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBzdHJlYW1idWZfdHlw
ZSogX01fc2J1ZjsKICAgICAgYm9vbCBfTV9mYWlsZWQ7CgogICAgcHVibGljOgogICAgICBpbmxp
bmUKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcykgdGhyb3cgKCkK
ICAgICAgOiBfTV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01fZmFpbGVkKCFfTV9zYnVmKSB7IH0KCiAg
ICAgIG9zdHJlYW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5cGUqIF9fcykgdGhyb3cgKCkKICAg
ICAgOiBfTV9zYnVmKF9fcyksIF9NX2ZhaWxlZCghX01fc2J1ZikgeyB9CgogICAgICBvc3RyZWFt
YnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYyk7CgogICAgICBvc3RyZWFt
YnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICp0
aGlzOyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKGludCkg
dGhyb3coKQogICAgICB7IHJldHVybiAqdGhpczsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRv
ciYKICAgICAgb3BlcmF0b3IrKygpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRoaXM7IH0KCiAg
ICAgIGJvb2wKICAgICAgZmFpbGVkKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiBfTV9m
YWlsZWQ7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGlubGluZSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPShfQ2hhclQg
X19jKQogICAgewogICAgICBpZiAoIV9NX2ZhaWxlZCAmJgogICAgICAgICAgX1RyYWl0czo6ZXFf
aW50X3R5cGUoX01fc2J1Zi0+c3B1dGMoX19jKSwgX1RyYWl0czo6ZW9mKCkpKQogICAgICAgIF9N
X2ZhaWxlZCA9IHRydWU7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KfQojIDQxICIvdXNyL2xv
Y2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2Jhc2ljX2lvcy5o
IiAyIDMKIyAxICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIu
MS9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMSAzCiMgNDQgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2Nj
LzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCgoKIyAxICIv
dXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9jd2N0eXBlIiAx
IDMKIyA0OCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEv
Y3djdHlwZSIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDEgMyA0CiMgMTMgIi91
c3IvaW5jbHVkZS93Y3R5cGUuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIyl3Y3R5cGUuaAkxLjE4
CTk5LzA4LzEwIFNNSSIKCiMgMSAiL3Vzci9pbmNsdWRlL2lzby93Y3R5cGVfaXNvLmgiIDEgMyA0
CiMgMjUgIi91c3IvaW5jbHVkZS9pc28vd2N0eXBlX2lzby5oIiAzIDQKI3ByYWdtYSBpZGVudCAi
QCgjKXdjdHlwZV9pc28uaAkxLjEJOTkvMDgvMDkgU01JIgoKCgoKZXh0ZXJuICJDIiB7CiMgNTEg
Ii91c3IvaW5jbHVkZS9pc28vd2N0eXBlX2lzby5oIiAzIDQKdHlwZWRlZiB1bnNpZ25lZCBpbnQg
d2N0cmFuc190OwojIDYxICIvdXNyL2luY2x1ZGUvaXNvL3djdHlwZV9pc28uaCIgMyA0CmV4dGVy
biBpbnQgaXN3YWxudW0od2ludF90KTsKZXh0ZXJuIGludCBpc3dhbHBoYSh3aW50X3QpOwpleHRl
cm4gaW50IGlzd2NudHJsKHdpbnRfdCk7CmV4dGVybiBpbnQgaXN3ZGlnaXQod2ludF90KTsKZXh0
ZXJuIGludCBpc3dncmFwaCh3aW50X3QpOwpleHRlcm4gaW50IGlzd2xvd2VyKHdpbnRfdCk7CmV4
dGVybiBpbnQgaXN3cHJpbnQod2ludF90KTsKZXh0ZXJuIGludCBpc3dwdW5jdCh3aW50X3QpOwpl
eHRlcm4gaW50IGlzd3NwYWNlKHdpbnRfdCk7CmV4dGVybiBpbnQgaXN3dXBwZXIod2ludF90KTsK
ZXh0ZXJuIGludCBpc3d4ZGlnaXQod2ludF90KTsKCmV4dGVybiB3aW50X3QgdG93bG93ZXIod2lu
dF90KTsKZXh0ZXJuIHdpbnRfdCB0b3d1cHBlcih3aW50X3QpOwpleHRlcm4gd2N0cmFuc190IHdj
dHJhbnMoY29uc3QgY2hhciAqKTsKZXh0ZXJuIHdpbnRfdCB0b3djdHJhbnMod2ludF90LCB3Y3Ry
YW5zX3QpOwpleHRlcm4gaW50IGlzd2N0eXBlKHdpbnRfdCwgd2N0eXBlX3QpOwpleHRlcm4gd2N0
eXBlX3Qgd2N0eXBlKGNvbnN0IGNoYXIgKik7CiMgMTMzICIvdXNyL2luY2x1ZGUvaXNvL3djdHlw
ZV9pc28uaCIgMyA0Cn0KIyAxNiAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAyIDMgNAojIDUwICIv
dXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMgNApleHRlcm4gIkMiIHsKIyA2MiAiL3Vzci9pbmNsdWRl
L3djdHlwZS5oIiAzIDQKc3RydWN0IF93Y3R5cGUgewogICAgICAgIHdjaGFyX3QgdG1pbjsKICAg
ICAgICB3Y2hhcl90IHRtYXg7CiAgICAgICAgdW5zaWduZWQgY2hhciAqaW5kZXg7CiAgICAgICAg
dW5zaWduZWQgaW50ICp0eXBlOwogICAgICAgIHdjaGFyX3QgY21pbjsKICAgICAgICB3Y2hhcl90
IGNtYXg7CiAgICAgICAgd2NoYXJfdCAqY29kZTsKfTsKIyA4MCAiL3Vzci9pbmNsdWRlL3djdHlw
ZS5oIiAzIDQKZXh0ZXJuIHVuc2lnbmVkIF9pc3djdHlwZSh3Y2hhcl90LCBpbnQpOwpleHRlcm4g
d2NoYXJfdCBfdHJ3Y3R5cGUod2NoYXJfdCwgaW50KTsKCmV4dGVybiBpbnQgaXNwaG9ub2dyYW0o
d2ludF90KTsKZXh0ZXJuIGludCBpc2lkZW9ncmFtKHdpbnRfdCk7CmV4dGVybiBpbnQgaXNlbmds
aXNoKHdpbnRfdCk7CmV4dGVybiBpbnQgaXNudW1iZXIod2ludF90KTsKZXh0ZXJuIGludCBpc3Nw
ZWNpYWwod2ludF90KTsKIyAxMDggIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMyA0Cn0KIyA1MyAi
L3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvY3djdHlwZSIg
MiAzCiMgNDcgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4x
L2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8z
LjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9pb3MiIDEgMwojIDQ4ICIvdXNyL2xvY2FsL3Byb2R1Y3Rz
L2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgpu
YW1lc3BhY2Ugc3RkCnsKCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgc3RydWN0IF9fcGFkOwoKCgojIDEgIi91c3IvbG9jYWwvcHJvZHVjdHMv
Z2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvY3R5
cGVfYmFzZS5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVk
ZS9jKysvMy4yLjEvc3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0cy9jdHlwZV9iYXNlLmgiIDMKICBz
dHJ1Y3QgY3R5cGVfYmFzZQogIHsKCiAgICB0eXBlZGVmIGludCogX190b190eXBlOwoKCgogICAg
dHlwZWRlZiB1bnNpZ25lZCBpbnQgbWFzazsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHVwcGVyID0g
MHgwMDAwMDAwMTsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGxvd2VyID0gMHgwMDAwMDAwMjsKICAg
IHN0YXRpYyBjb25zdCBtYXNrIGFscGhhID0gMHgwMDAwNDAwMDsKICAgIHN0YXRpYyBjb25zdCBt
YXNrIGRpZ2l0ID0gMHgwMDAwMDAwNDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHhkaWdpdCA9IDB4
MDAwMDAwODA7CiAgICBzdGF0aWMgY29uc3QgbWFzayBzcGFjZSA9IDB4MDAwMDAwMDg7CiAgICBz
dGF0aWMgY29uc3QgbWFzayBwcmludCA9IDB4MDAwMDgwMDA7CiAgICBzdGF0aWMgY29uc3QgbWFz
ayBncmFwaCA9IDB4MDAwMDIwMDA7CiAgICBzdGF0aWMgY29uc3QgbWFzayBjbnRybCA9IDB4MDAw
MDAwMjA7CiAgICBzdGF0aWMgY29uc3QgbWFzayBwdW5jdCA9IDB4MDAwMDAwMTA7CiAgICBzdGF0
aWMgY29uc3QgbWFzayBhbG51bSA9ICgweDAwMDA0MDAwIHwgMHgwMDAwMDAwNCk7CiAgfTsKIyA2
NCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9s
b2NhbGVfZmFjZXRzLmgiIDIgMwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xh
c3MgX19jdHlwZV9hYnN0cmFjdF9iYXNlIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBj
dHlwZV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5
cGU7CgogICAgICBib29sCiAgICAgIGlzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5kb19pcyhfX20sIF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXJf
dHlwZSoKICAgICAgaXMoY29uc3QgY2hhcl90eXBlICpfX2xvLCBjb25zdCBjaGFyX3R5cGUgKl9f
aGksIG1hc2sgKl9fdmVjKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19pcyhfX2xvLCBf
X2hpLCBfX3ZlYyk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgc2Nhbl9pcyhtYXNr
IF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3NjYW5faXMoX19tLCBfX2xvLCBfX2hpKTsgfQoKICAg
ICAgY29uc3QgY2hhcl90eXBlKgogICAgICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90
eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmRvX3NjYW5fbm90KF9fbSwgX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAg
ICB0b3VwcGVyKGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Rv
dXBwZXIoX19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICB0b3VwcGVyKGNoYXJf
dHlwZSAqX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0
aGlzLT5kb190b3VwcGVyKF9fbG8sIF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgdG9s
b3dlcihjaGFyX3R5cGUgX19jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190b2xvd2Vy
KF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgdG9sb3dlcihjaGFyX3R5cGUq
IF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+
ZG9fdG9sb3dlcihfX2xvLCBfX2hpKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHdpZGVuKGNo
YXIgX19jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb193aWRlbihfX2MpOyB9CgogICAg
ICBjb25zdCBjaGFyKgogICAgICB3aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBf
X2hpLCBjaGFyX3R5cGUqIF9fdG8pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3dpZGVu
KF9fbG8sIF9faGksIF9fdG8pOyB9CgogICAgICBjaGFyCiAgICAgIG5hcnJvdyhjaGFyX3R5cGUg
X19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19uYXJyb3co
X19jLCBfX2RmYXVsdCk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgbmFycm93KGNv
bnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAg
IGNoYXIgX19kZmF1bHQsIGNoYXIgKl9fdG8pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X25hcnJvdyhfX2xvLCBfX2hpLCBfX2RmYXVsdCwgX190byk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAg
ICAgIGV4cGxpY2l0CiAgICAgIF9fY3R5cGVfYWJzdHJhY3RfYmFzZShzaXplX3QgX19yZWZzID0g
MCk6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfl9fY3R5
cGVfYWJzdHJhY3RfYmFzZSgpIHsgfQoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1h
c2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNo
YXJfdHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5
cGUqIF9faGksCiAgICAgICAgICAgIG1hc2sqIF9fdmVjKSBjb25zdCA9IDA7CgogICAgICB2aXJ0
dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hh
cl90eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29u
c3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5fbm90
KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAg
ICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3Qg
Y2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90
eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190
b2xvd2VyKGNoYXJfdHlwZSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5
cGUqCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9f
aGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNo
YXIpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAgZG9fd2lkZW4o
Y29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwKICAgICAgICAgICAgICAgY2hhcl90
eXBlKiBfX2Rlc3QpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJy
b3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNv
bnN0IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29u
c3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgIGNoYXIgX19kZmF1bHQsIGNoYXIq
IF9fZGVzdCkgY29uc3QgPSAwOwogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIGNsYXNzIGN0eXBlIDogcHVibGljIF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxfQ2hhclQ+CiAg
ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgY3R5cGU6Om1hc2sgbWFzazsKCiAgICAgIHN0YXRpYyBsb2NhbGU6Omlk
IGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGUoc2l6ZV90IF9fcmVmcyA9IDApIDogX19j
dHlwZV9hYnN0cmFjdF9iYXNlPF9DaGFyVD4oX19yZWZzKSB7IH0KCiAgIHByb3RlY3RlZDoKICAg
ICAgdmlydHVhbAogICAgICB+Y3R5cGUoKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19p
cyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNo
YXJfdHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5
cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90
eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNv
bnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlw
ZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1
YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUqIF9f
bG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlw
ZQogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSBfX2MpIGNvbnN0OwoKICAgICAgdmlydHVhbCBj
b25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBj
aGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9f
d2lkZW4oY2hhciBfX2MpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBk
b193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9f
ZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlw
ZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoK
ICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBf
X2hpLAogICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsK
ICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgY3R5cGU8
X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjdHlwZTxjaGFyPiA6IHB1Ymxp
YyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8Y2hhcj4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5
cGVkZWYgY2hhciBjaGFyX3R5cGU7CgogICAgcHJvdGVjdGVkOgoKICAgICAgX19jX2xvY2FsZSBf
TV9jX2xvY2FsZV9jdHlwZTsKICAgICAgYm9vbCBfTV9kZWw7CiAgICAgIF9fdG9fdHlwZSBfTV90
b3VwcGVyOwogICAgICBfX3RvX3R5cGUgX01fdG9sb3dlcjsKICAgICAgY29uc3QgbWFzayogX01f
dGFibGU7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKICAgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCB0YWJsZV9zaXplID0gMSArIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KC0xKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlKGNvbnN0IG1hc2sqIF9fdGFibGUg
PSAwLCBib29sIF9fZGVsID0gZmFsc2UsIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIGV4cGxp
Y2l0CiAgICAgIGN0eXBlKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBtYXNrKiBfX3RhYmxlID0g
MCwgYm9vbCBfX2RlbCA9IGZhbHNlLAogICAgICAgICAgICBzaXplX3QgX19yZWZzID0gMCk7Cgog
ICAgICBpbmxpbmUgYm9vbAogICAgICBpcyhtYXNrIF9fbSwgY2hhciBfX2MpIGNvbnN0OwoKICAg
ICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIGlzKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNo
YXIqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIGlubGluZSBjb25zdCBjaGFyKgog
ICAgICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hp
KSBjb25zdDsKCiAgICAgIGlubGluZSBjb25zdCBjaGFyKgogICAgICBzY2FuX25vdChtYXNrIF9f
bSwgY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7CgogICAgcHJvdGVj
dGVkOgogICAgICBjb25zdCBtYXNrKgogICAgICB0YWJsZSgpIGNvbnN0IHRocm93KCkKICAgICAg
eyByZXR1cm4gX01fdGFibGU7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBtYXNrKgogICAgICBjbGFz
c2ljX3RhYmxlKCkgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBlKCk7CgogICAg
ICB2aXJ0dWFsIGJvb2wKICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0
OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJf
dHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwg
Y29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAg
ICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBj
b25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog
X19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b3VwcGVyKGNo
YXJfdHlwZSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9f
dG91cHBlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSkgY29uc3Q7
CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5
cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNo
YXJfdHlwZQogICAgICBkb193aWRlbihjaGFyKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3Qg
Y2hhcioKICAgICAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwg
Y2hhcl90eXBlKiBfX2Rlc3QpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25h
cnJvdyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25z
dCBjaGFyX3R5cGUqCiAgICAgIGRvX25hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0
IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgICAgIGNoYXIgX19kZmF1bHQsIGNoYXIqIF9f
ZGVzdCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBjb25zdCBjdHlwZTxjaGFyPiYK
ICAgIHVzZV9mYWNldDxjdHlwZTxjaGFyPiA+KGNvbnN0IGxvY2FsZSYgX19sb2MpOwojIDQwMCAi
L3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9sb2Nh
bGVfZmFjZXRzLmgiIDMKIyAxICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRl
L2MrKy8zLjIuMS9zcGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL2N0eXBlX2lubGluZS5oIiAxIDMK
IyAzNyAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvc3Bh
cmMtc3VuLXNvbGFyaXMyLjgvYml0cy9jdHlwZV9pbmxpbmUuaCIgMwogIGJvb2wKICBjdHlwZTxj
aGFyPjo6CiAgaXMobWFzayBfX20sIGNoYXIgX19jKSBjb25zdAogIHsgcmV0dXJuIF9NX3RhYmxl
W3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldICYgX19tOyB9CgogIGNvbnN0IGNoYXIq
CiAgY3R5cGU8Y2hhcj46OgogIGlzKGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hp
Z2gsIG1hc2sqIF9fdmVjKSBjb25zdAogIHsKICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaCkKICAg
ICAgKl9fdmVjKysgPSBfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sb3cr
KyldOwogICAgcmV0dXJuIF9faGlnaDsKICB9CgogIGNvbnN0IGNoYXIqCiAgY3R5cGU8Y2hhcj46
OgogIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hp
Z2gpIGNvbnN0CiAgewogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoCiAgICAgICAgICAgJiYgIShf
TV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sb3cpXSAmIF9fbSkpCiAgICAg
ICsrX19sb3c7CiAgICByZXR1cm4gX19sb3c7CiAgfQoKICBjb25zdCBjaGFyKgogIGN0eXBlPGNo
YXI+OjoKICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIq
IF9faGlnaCkgY29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2gKICAgICAgICAgICAm
JiAoX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KV0gJiBfX20pICE9
IDApCiAgICAgICsrX19sb3c7CiAgICByZXR1cm4gX19sb3c7CiAgfQojIDQwMSAiL3Vzci9sb2Nh
bC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9sb2NhbGVfZmFjZXRz
LmgiIDIgMwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGVfYnlu
YW1lIDogcHVibGljIGN0eXBlPF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRl
ZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGVfYnluYW1lKGNv
bnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAg
dmlydHVhbAogICAgICB+Y3R5cGVfYnluYW1lKCkgeyB9OwogICAgfTsKCgogIHRlbXBsYXRlPD4K
ICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3Qg
cmVmcyk7CgogIHRlbXBsYXRlPD4KICAgIGN0eXBlX2J5bmFtZTx3Y2hhcl90Pjo6Y3R5cGVfYnlu
YW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyk7CgoKIyAxICIvdXNyL2xvY2FsL3Byb2R1Y3Rz
L2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2NvZGVjdnQuaCIgMSAzCiMgNDUgIi91
c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvY29kZWN2
dC5oIiAzCgoKICBjbGFzcyBjb2RlY3Z0X2Jhc2UKICB7CiAgcHVibGljOgogICAgZW51bSByZXN1
bHQKICAgIHsKICAgICAgb2ssCiAgICAgIHBhcnRpYWwsCiAgICAgIGVycm9yLAogICAgICBub2Nv
bnYKICAgIH07CiAgfTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFt
ZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIF9fY29kZWN2dF9hYnN0cmFj
dF9iYXNlCiAgICA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgY29kZWN2dF9iYXNlCiAg
ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3Vs
dDsKICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfRXh0
ZXJuVCBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfU3RhdGVUIHN0YXRlX3R5cGU7CgoKICAg
ICAgcmVzdWx0CiAgICAgIG91dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlw
ZSogX19mcm9tLAogICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0
IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICBleHRlcm5fdHlwZSogX190bywg
ZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQp
IGNvbnN0CiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+ZG9fb3V0KF9fc3RhdGUsIF9fZnJv
bSwgX19mcm9tX2VuZCwgX19mcm9tX25leHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X3RvLCBfX3RvX2VuZCwgX190b19uZXh0KTsKICAgICAgfQoKICAgICAgcmVzdWx0CiAgICAgIHVu
c2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBl
KiBfX3RvX2VuZCwKICAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdW5zaGlmdChfX3N0YXRlLCBfX3RvLF9fdG9fZW5kLF9f
dG9fbmV4dCk7IH0KCiAgICAgIHJlc3VsdAogICAgICBpbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBj
b25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19m
cm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgaW50ZXJu
X3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgaW50ZXJuX3R5cGUq
JiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+ZG9faW4oX19z
dGF0ZSwgX19mcm9tLCBfX2Zyb21fZW5kLCBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX190bywgX190b19lbmQsIF9fdG9fbmV4dCk7CiAgICAgIH0KCiAgICAgIGludAog
ICAgICBlbmNvZGluZygpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZW5j
b2RpbmcoKTsgfQoKICAgICAgYm9vbAogICAgICBhbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3co
KQogICAgICB7IHJldHVybiB0aGlzLT5kb19hbHdheXNfbm9jb252KCk7IH0KCiAgICAgIGludAog
ICAgICBsZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUq
IF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9f
bWF4KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19sZW5ndGgoX19zdGF0ZSwgX19mcm9t
LCBfX2VuZCwgX19tYXgpOyB9CgogICAgICBpbnQKICAgICAgbWF4X2xlbmd0aCgpIGNvbnN0IHRo
cm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbWF4X2xlbmd0aCgpOyB9CgogICAgcHJvdGVj
dGVkOgogICAgICBleHBsaWNpdAogICAgICBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZShzaXplX3Qg
X19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICB2aXJ0dWFsCiAg
ICAgIH5fX2NvZGVjdnRfYWJzdHJhY3RfYmFzZSgpIHsgfQoKICAgICAgdmlydHVhbCByZXN1bHQK
ICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zy
b20sCiAgICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50
ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBl
eHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4
dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0
ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAgICAgICAgICBleHRl
cm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7Cgog
ICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25z
dCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19m
cm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50
ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJu
X3R5cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRv
X2VuY29kaW5nKCkgY29uc3QgdGhyb3coKSA9IDA7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAg
ZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCkgPSAwOwoKICAgICAgdmlydHVhbCBpbnQK
ICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19m
cm9tLAogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19t
YXgpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBj
b25zdCB0aHJvdygpID0gMDsKICAgIH07CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQs
IHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dAog
ICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsIF9FeHRlcm5ULCBf
U3RhdGVUPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJl
c3VsdCByZXN1bHQ7CiAgICAgIHR5cGVkZWYgX0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5
cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX1N0YXRlVCBzdGF0ZV90
eXBlOwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBs
aWNpdAogICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IF9fY29kZWN2dF9h
YnN0cmFjdF9iYXNlPF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4gKF9fcmVmcykgeyB9Cgog
ICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCkgeyB9CgogICAgICB2
aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50
ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21f
ZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJu
X3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90
eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vu
c2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAg
ICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29u
c3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRl
LCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlw
ZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAg
ICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAg
aW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAg
ZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRv
X2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAg
ZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAog
ICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNv
bnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93
KCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVy
blQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBsb2NhbGU6OmlkIGNvZGVjdnQ8X0ludGVyblQsIF9F
eHRlcm5ULCBfU3RhdGVUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjb2RlY3Z0PGNo
YXIsIGNoYXIsIG1ic3RhdGVfdD4KICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNl
PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg
Y2hhciBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBjaGFyIGV4dGVybl90eXBlOwogICAgICB0
eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxv
Y2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMg
PSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnQoKTsKCiAg
ICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25z
dCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9f
ZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBl
eHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0
ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAg
ZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAg
ICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9f
c3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgIGNvbnN0IGV4dGVy
bl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAg
ICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAg
ICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAog
ICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGJvb2wKICAg
ICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGludAog
ICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zy
b20sCiAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21h
eCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3Qg
dGhyb3coKTsKICB9OwojIDMxOCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVk
ZS9jKysvMy4yLjEvYml0cy9jb2RlY3Z0LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJu
VCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0
X2J5bmFtZSA6IHB1YmxpYyBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4KICAg
IHsKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dF9ieW5hbWUoY29uc3Qg
Y2hhciosIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGNvZGVjdnQ8X0ludGVyblQsIF9FeHRl
cm5ULCBfU3RhdGVUPihfX3JlZnMpIHsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAog
ICAgICB+Y29kZWN2dF9ieW5hbWUoKSB7IH0KICAgIH07CiMgNDI2ICIvdXNyL2xvY2FsL3Byb2R1
Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAz
CgoKCiAgY2xhc3MgX19udW1fYmFzZQogIHsKICBwcm90ZWN0ZWQ6CgoKICAgIHN0YXRpYyBjb25z
dCBjaGFyIF9TX2F0b21zW107CgogICAgZW51bQogICAgewogICAgICBfTV96ZXJvLAogICAgICBf
TV9lID0gX01femVybyArIDEwLAogICAgICBfTV9FID0gX01femVybyArIDExLAogICAgICBfTV9z
aXplID0gMjEgKyAxCiAgICB9OwoKCgogICAgc3RhdGljIGJvb2wKICAgIF9TX2Zvcm1hdF9mbG9h
dChjb25zdCBpb3NfYmFzZSYgX19pbywgY2hhciogX19mcHRyLCBjaGFyIF9fbW9kLAogICAgICAg
ICAgICAgICAgICAgIHN0cmVhbXNpemUgX19wcmVjKTsKCgogICAgc3RhdGljIHZvaWQKICAgIF9T
X2Zvcm1hdF9pbnQoY29uc3QgaW9zX2Jhc2UmIF9faW8sIGNoYXIqIF9fZnB0ciwgY2hhciBfX21v
ZCwgY2hhciBfX21vZGwpOwogIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBj
bGFzcyBudW1wdW5jdCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6Cgog
ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5n
PF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICBw
cml2YXRlOgogICAgICBjaGFyX3R5cGUgX01fZGVjaW1hbF9wb2ludDsKICAgICAgY2hhcl90eXBl
IF9NX3Rob3VzYW5kc19zZXA7CiAgICAgIGNvbnN0IGNoYXIqIF9NX2dyb3VwaW5nOwogICAgICBj
b25zdCBjaGFyX3R5cGUqIF9NX3RydWVuYW1lOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX2Zh
bHNlbmFtZTsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIG51bXB1bmN0KHNpemVf
dCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2luaXRpYWxp
emVfbnVtcHVuY3QoKTsgfQoKICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3QoX19jX2xvY2Fs
ZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAg
ICB7IF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jbG9jKTsgfQoKICAgICAgY2hhcl90eXBlCiAg
ICAgIGRlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19kZWNpbWFs
X3BvaW50KCk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0aG91c2FuZHNfc2VwKCkgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdGhvdXNhbmRzX3NlcCgpOyB9CgogICAgICBzdHJpbmcK
ICAgICAgZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19ncm91cGluZygp
OyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICB0cnVlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRoaXMtPmRvX3RydWVuYW1lKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIGZhbHNl
bmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2ZhbHNlbmFtZSgpOyB9CgogICAg
cHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5udW1wdW5jdCgpOwoKICAgICAgdmlydHVh
bCBjaGFyX3R5cGUKICAgICAgZG9fZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IF9NX2RlY2ltYWxfcG9pbnQ7IH0KCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3Ro
b3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90aG91c2FuZHNfc2VwOyB9Cgog
ICAgICB2aXJ0dWFsIHN0cmluZwogICAgICBkb19ncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIF9NX2dyb3VwaW5nOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX3Ry
dWVuYW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fdHJ1ZW5hbWU7IH0KCiAgICAgIHZpcnR1
YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fZmFsc2VuYW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4g
X01fZmFsc2VuYW1lOyB9CgoKICAgICAgdm9pZAogICAgICBfTV9pbml0aWFsaXplX251bXB1bmN0
KF9fY19sb2NhbGUgX19jbG9jID0gX19udWxsKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgbnVtcHVuY3Q8X0NoYXJUPjo6aWQ7CgogIHRlbXBsYXRl
PD4KICAgIG51bXB1bmN0PGNoYXI+Ojp+bnVtcHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgdm9p
ZAogICAgbnVtcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBf
X2Nsb2MpOwojIDU1MCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysv
My4yLjEvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
CiAgICBjbGFzcyBudW1wdW5jdF9ieW5hbWUgOiBwdWJsaWMgbnVtcHVuY3Q8X0NoYXJUPgogICAg
ewoKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9udW1wdW5jdDsKCiAgICBwdWJsaWM6CiAg
ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8
X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bXB1bmN0X2J5bmFt
ZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IG51bXB1bmN0PF9D
aGFyVD4oX19yZWZzKQogICAgICB7CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9j
YWxlX251bXB1bmN0LCBfX3MpOwogICAgICAgIF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX01fY19s
b2NhbGVfbnVtcHVuY3QpOwogICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAg
ICAgIH5udW1wdW5jdF9ieW5hbWUoKQogICAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19s
b2NhbGVfbnVtcHVuY3QpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyBudW1fZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQs
IHB1YmxpYyBfX251bV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFy
VCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0
aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bV9nZXQoc2l6ZV90IF9f
cmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAg
ICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywK
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgYm9vbCYgX192KSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9
CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19l
bmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBs
b25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwg
X19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBl
IF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIHNob3J0JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAg
IGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9z
X2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVk
IGludCYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQs
IF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlw
ZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jh
c2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCgogICAg
ICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlv
c19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGxv
bmcmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBf
X2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUg
X19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCgog
ICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQs
IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBmbG9h
dCYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9f
aW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBf
X2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLCBkb3VibGUmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+
ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBl
CiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p
bywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdikg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2Vy
ciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRl
cl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
JiBfX2Vyciwgdm9pZComIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9f
aW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmly
dHVhbCB+bnVtX2dldCgpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIF9NX2V4dHJhY3RfZmxv
YXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLAog
ICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyYgX194dHJjKSBjb25zdDsKCiAgICAgIGl0ZXJf
dHlwZQogICAgICBfTV9leHRyYWN0X2ludChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2Um
LCBpb3NfYmFzZTo6aW9zdGF0ZSYsCiAgICAgICAgICAgICAgICAgICAgIHN0cmluZyYgX194dHJj
LCBpbnQmIF9fYmFzZSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19n
ZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBi
b29sJikgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJf
dHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgbG9uZyYpIGNv
bnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRl
cl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAg
ICB1bnNpZ25lZCBzaG9ydCYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAg
ZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VyciwKICAgICAgICAgICAgIHVuc2lnbmVkIGludCYpIGNvbnN0OwoKICAgICAgdmlydHVh
bCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYs
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcmKSBj
b25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBp
dGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAg
ICAgbG9uZyBsb25nJikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19n
ZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
ZXJyLAogICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nJikgY29uc3Q7CgoKICAgICAgdmly
dHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFz
ZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIGZsb2F0JikgY29uc3Q7
CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5
cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgZG91
YmxlJikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90
eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAg
ICAgICAgICAgbG9uZyBkb3VibGUmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAg
ICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9z
dGF0ZSYgX19lcnIsCiAgICAgICAgICAgICB2b2lkKiYpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCBudW1f
Z2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOwojIDcyMSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2Mv
My4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgbnVtX3B1dCA6
IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgX19udW1fYmFzZQogICAgewogICAgcHVibGlj
OgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVy
IGl0ZXJfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQK
ICAgICAgbnVtX3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykg
eyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBf
X2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlz
LT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAg
IHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBsb25n
IF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGws
IF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jh
c2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX192KSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsg
fQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9f
ZiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4g
dGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQog
ICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwK
ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAg
ICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBk
b3VibGUgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9f
ZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBp
b3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgbG9uZyBkb3VibGUgX192
KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192
KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYg
X19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgY29uc3Qgdm9pZCogX192KSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAg
IHByb3RlY3RlZDoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4KICAgICAgICBpdGVy
X3R5cGUKICAgICAgICBfTV9jb252ZXJ0X2Zsb2F0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8s
IGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fbW9kLCBf
VmFsdWVUIF9fdikgY29uc3Q7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWVUPgogICAg
ICAgIGl0ZXJfdHlwZQogICAgICAgIF9NX2NvbnZlcnRfaW50KGl0ZXJfdHlwZSwgaW9zX2Jhc2Um
IF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciBfX21v
ZCwgY2hhciBfX21vZGwsIF9WYWx1ZVQgX192KSBjb25zdDsKCiAgICAgIGl0ZXJfdHlwZQogICAg
ICBfTV93aWRlbl9mbG9hdChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19m
aWxsLCBjaGFyKiBfX2NzLAogICAgICAgICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0OwoK
ICAgICAgaXRlcl90eXBlCiAgICAgIF9NX3dpZGVuX2ludChpdGVyX3R5cGUsIGlvc19iYXNlJiBf
X2lvLCBjaGFyX3R5cGUgX19maWxsLCBjaGFyKiBfX2NzLAogICAgICAgICAgICAgICAgICAgaW50
IF9fbGVuKSBjb25zdDsKCiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV9pbnNlcnQoaXRlcl90eXBl
LCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXJfdHlwZSogX193cywgaW50IF9fbGVuKSBjb25zdDsKCiAgICAgIHZpcnR1YWwKICAgICAg
fm51bV9wdXQoKSB7IH07CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRl
cl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wgX192KSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwg
Y2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5
cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCB1
bnNpZ25lZCBsb25nKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19w
dXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3Yp
IGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwg
aW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCB1bnNpZ25lZCBsb25nIGxvbmcpIGNvbnN0OwoK
CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNl
JiwgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0
ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2Zp
bGwsIGxvbmcgZG91YmxlIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg
ICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHZv
aWQqIF9fdikgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6
aWQ7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjb2xsYXRlIDogcHVi
bGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJU
IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlw
ZTsKCiAgICBwcm90ZWN0ZWQ6CgoKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9jb2xsYXRl
OwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNp
dAogICAgICBjb2xsYXRlKHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQo
X19yZWZzKQogICAgICB7IF9NX2NfbG9jYWxlX2NvbGxhdGUgPSBfU19jX2xvY2FsZTsgfQoKICAg
ICAgZXhwbGljaXQKICAgICAgY29sbGF0ZShfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVm
cyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01fY19sb2NhbGVf
Y29sbGF0ZSA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7IH0KCiAgICAgIGludAogICAgICBj
b21wYXJlKGNvbnN0IF9DaGFyVCogX19sbzEsIGNvbnN0IF9DaGFyVCogX19oaTEsCiAgICAgICAg
ICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fY29tcGFyZShfX2xvMSwgX19oaTEsIF9fbG8yLCBfX2hpMik7
IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIHRyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8s
IGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdHJhbnNm
b3JtKF9fbG8sIF9faGkpOyB9CgogICAgICBsb25nCiAgICAgIGhhc2goY29uc3QgX0NoYXJUKiBf
X2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2hh
c2goX19sbywgX19oaSk7IH0KCgogICAgICBpbnQKICAgICAgX01fY29tcGFyZShjb25zdCBfQ2hh
clQqLCBjb25zdCBfQ2hhclQqKSBjb25zdDsKCiAgICAgIHNpemVfdAogICAgICBfTV90cmFuc2Zv
cm0oX0NoYXJUKiwgY29uc3QgX0NoYXJUKiwgc2l6ZV90KSBjb25zdDsKCiAgcHJvdGVjdGVkOgog
ICAgICB2aXJ0dWFsCiAgICAgIH5jb2xsYXRlKCkKICAgICAgeyBfU19kZXN0cm95X2NfbG9jYWxl
KF9NX2NfbG9jYWxlX2NvbGxhdGUpOyB9CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19jb21w
YXJlKGNvbnN0IF9DaGFyVCogX19sbzEsIGNvbnN0IF9DaGFyVCogX19oaTEsCiAgICAgICAgICAg
ICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQq
IF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGxvbmcKICAg
ICAgZG9faGFzaChjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3Q7
CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIGNvbGxh
dGU8X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBpbnQKICAgIGNvbGxhdGU8Y2hhcj46
Ol9NX2NvbXBhcmUoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKSBjb25zdDsKCiAgdGVtcGxhdGU8
PgogICAgc2l6ZV90CiAgICBjb2xsYXRlPGNoYXI+OjpfTV90cmFuc2Zvcm0oY2hhciosIGNvbnN0
IGNoYXIqLCBzaXplX3QpIGNvbnN0OwojIDkxMyAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4y
LjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjb2xsYXRlX2J5bmFtZSA6IHB1YmxpYyBjb2xsYXRl
PF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBl
OwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAg
ZXhwbGljaXQKICAgICAgY29sbGF0ZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19y
ZWZzID0gMCkKICAgICAgOiBjb2xsYXRlPF9DaGFyVD4oX19yZWZzKQogICAgICB7CiAgICAgICAg
X1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9jb2xsYXRlKTsKICAgICAgICBfU19jcmVh
dGVfY19sb2NhbGUoX01fY19sb2NhbGVfY29sbGF0ZSwgX19zKTsKICAgICAgfQoKICAgIHByb3Rl
Y3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29sbGF0ZV9ieW5hbWUoKSB7IH0KICAgIH07CgoK
ICBjbGFzcyB0aW1lX2Jhc2UKICB7CiAgcHVibGljOgogICAgZW51bSBkYXRlb3JkZXIgeyBub19v
cmRlciwgZG15LCBtZHksIHltZCwgeWRtIH07CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgY2xhc3MgX190aW1lcHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewog
ICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgX19jaGFyX3R5cGU7CiAgICAgIHR5cGVk
ZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2Nh
bGU6OmlkIGlkOwoKCiAgICAgIHN0YXRpYyBjb25zdCBfQ2hhclQqIF9TX3RpbWV6b25lc1sxNF07
CgogICAgcHJvdGVjdGVkOgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX3RpbWVwdW5jdDsK
ICAgICAgY2hhciogX01fbmFtZV90aW1lcHVuY3Q7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF0
ZV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF0ZV9lcmFfZm9ybWF0OwogICAgICBj
b25zdCBfQ2hhclQqIF9NX3RpbWVfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX3RpbWVf
ZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXRlX3RpbWVfZm9ybWF0OwogICAg
ICBjb25zdCBfQ2hhclQqIF9NX2RhdGVfdGltZV9lcmFfZm9ybWF0OwogICAgICBjb25zdCBfQ2hh
clQqIF9NX2FtOwogICAgICBjb25zdCBfQ2hhclQqIF9NX3BtOwogICAgICBjb25zdCBfQ2hhclQq
IF9NX2FtX3BtX2Zvcm1hdDsKCgogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTE7CiAgICAgIGNv
bnN0IF9DaGFyVCogX01fZGF5MjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXkzOwogICAgICBj
b25zdCBfQ2hhclQqIF9NX2RheTQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5NTsKICAgICAg
Y29uc3QgX0NoYXJUKiBfTV9kYXk2OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTc7CgoKICAg
ICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2Ey
OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hMzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9k
YXlfYTQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2E1OwogICAgICBjb25zdCBfQ2hhclQq
IF9NX2RheV9hNjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTc7CgoKICAgICAgY29uc3Qg
X0NoYXJUKiBfTV9tb250aDAxOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDI7CiAgICAg
IGNvbnN0IF9DaGFyVCogX01fbW9udGgwMzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA0
OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01f
bW9udGgwNjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA3OwogICAgICBjb25zdCBfQ2hh
clQqIF9NX21vbnRoMDg7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwOTsKICAgICAgY29u
c3QgX0NoYXJUKiBfTV9tb250aDEwOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMTE7CiAg
ICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgxMjsKCgogICAgICBjb25zdCBfQ2hhclQqIF9NX21v
bnRoX2EwMTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDI7CiAgICAgIGNvbnN0IF9D
aGFyVCogX01fbW9udGhfYTAzOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwNDsKICAg
ICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9u
dGhfYTA2OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwNzsKICAgICAgY29uc3QgX0No
YXJUKiBfTV9tb250aF9hMDg7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA5OwogICAg
ICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2ExMDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250
aF9hMTE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTEyOwoKICAgIHB1YmxpYzoKICAg
ICAgZXhwbGljaXQKICAgICAgX190aW1lcHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDog
bG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsKICAgICAgICBfTV9uYW1lX3RpbWVwdW5jdCA9
IG5ldyBjaGFyWzJdOwogICAgICAgIHN0cmNweShfTV9uYW1lX3RpbWVwdW5jdCwgIkMiKTsKICAg
ICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOwogICAgICB9CgogICAgICBleHBsaWNpdAog
ICAgICBfX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLCBzaXpl
X3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgewogICAg
ICAgIF9NX25hbWVfdGltZXB1bmN0ID0gbmV3IGNoYXJbc3RybGVuKF9fcykgKyAxXTsKICAgICAg
ICBzdHJjcHkoX01fbmFtZV90aW1lcHVuY3QsIF9fcyk7CiAgICAgICAgX01faW5pdGlhbGl6ZV90
aW1lcHVuY3QoX19jbG9jKTsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9wdXQoX0NoYXJU
KiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3QgX0NoYXJUKiBfX2Zvcm1hdCwKICAgICAgICAg
ICAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdDsKCiAgICAgIHZvaWQKICAgICAgX01fZGF0ZV9mb3Jt
YXRzKGNvbnN0IF9DaGFyVCoqIF9fZGF0ZSkgY29uc3QKICAgICAgewoKICAgICAgICBfX2RhdGVb
MF0gPSBfTV9kYXRlX2Zvcm1hdDsKICAgICAgICBfX2RhdGVbMV0gPSBfTV9kYXRlX2VyYV9mb3Jt
YXQ7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fdGltZV9mb3JtYXRzKGNvbnN0IF9DaGFy
VCoqIF9fdGltZSkgY29uc3QKICAgICAgewoKICAgICAgICBfX3RpbWVbMF0gPSBfTV90aW1lX2Zv
cm1hdDsKICAgICAgICBfX3RpbWVbMV0gPSBfTV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIH0KCiAg
ICAgIHZvaWQKICAgICAgX01fYW1wbShjb25zdCBfQ2hhclQqKiBfX2FtcG0pIGNvbnN0CiAgICAg
IHsKICAgICAgICBfX2FtcG1bMF0gPSBfTV9hbTsKICAgICAgICBfX2FtcG1bMV0gPSBfTV9wbTsK
ICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9kYXRlX3RpbWVfZm9ybWF0cyhjb25zdCBfQ2hh
clQqKiBfX2R0KSBjb25zdAogICAgICB7CgogICAgICAgIF9fZHRbMF0gPSBfTV9kYXRlX3RpbWVf
Zm9ybWF0OwogICAgICAgIF9fZHRbMV0gPSBfTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdDsKICAgICAg
fQoKICAgICAgdm9pZAogICAgICBfTV9kYXlzKGNvbnN0IF9DaGFyVCoqIF9fZGF5cykgY29uc3QK
ICAgICAgewogICAgICAgIF9fZGF5c1swXSA9IF9NX2RheTE7CiAgICAgICAgX19kYXlzWzFdID0g
X01fZGF5MjsKICAgICAgICBfX2RheXNbMl0gPSBfTV9kYXkzOwogICAgICAgIF9fZGF5c1szXSA9
IF9NX2RheTQ7CiAgICAgICAgX19kYXlzWzRdID0gX01fZGF5NTsKICAgICAgICBfX2RheXNbNV0g
PSBfTV9kYXk2OwogICAgICAgIF9fZGF5c1s2XSA9IF9NX2RheTc7CiAgICAgIH0KCiAgICAgIHZv
aWQKICAgICAgX01fZGF5c19hYmJyZXZpYXRlZChjb25zdCBfQ2hhclQqKiBfX2RheXMpIGNvbnN0
CiAgICAgIHsKICAgICAgICBfX2RheXNbMF0gPSBfTV9kYXlfYTE7CiAgICAgICAgX19kYXlzWzFd
ID0gX01fZGF5X2EyOwogICAgICAgIF9fZGF5c1syXSA9IF9NX2RheV9hMzsKICAgICAgICBfX2Rh
eXNbM10gPSBfTV9kYXlfYTQ7CiAgICAgICAgX19kYXlzWzRdID0gX01fZGF5X2E1OwogICAgICAg
IF9fZGF5c1s1XSA9IF9NX2RheV9hNjsKICAgICAgICBfX2RheXNbNl0gPSBfTV9kYXlfYTc7CiAg
ICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fbW9udGhzKGNvbnN0IF9DaGFyVCoqIF9fbW9udGhz
KSBjb25zdAogICAgICB7CiAgICAgICAgX19tb250aHNbMF0gPSBfTV9tb250aDAxOwogICAgICAg
IF9fbW9udGhzWzFdID0gX01fbW9udGgwMjsKICAgICAgICBfX21vbnRoc1syXSA9IF9NX21vbnRo
MDM7CiAgICAgICAgX19tb250aHNbM10gPSBfTV9tb250aDA0OwogICAgICAgIF9fbW9udGhzWzRd
ID0gX01fbW9udGgwNTsKICAgICAgICBfX21vbnRoc1s1XSA9IF9NX21vbnRoMDY7CiAgICAgICAg
X19tb250aHNbNl0gPSBfTV9tb250aDA3OwogICAgICAgIF9fbW9udGhzWzddID0gX01fbW9udGgw
ODsKICAgICAgICBfX21vbnRoc1s4XSA9IF9NX21vbnRoMDk7CiAgICAgICAgX19tb250aHNbOV0g
PSBfTV9tb250aDEwOwogICAgICAgIF9fbW9udGhzWzEwXSA9IF9NX21vbnRoMTE7CiAgICAgICAg
X19tb250aHNbMTFdID0gX01fbW9udGgxMjsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9t
b250aHNfYWJicmV2aWF0ZWQoY29uc3QgX0NoYXJUKiogX19tb250aHMpIGNvbnN0CiAgICAgIHsK
ICAgICAgICBfX21vbnRoc1swXSA9IF9NX21vbnRoX2EwMTsKICAgICAgICBfX21vbnRoc1sxXSA9
IF9NX21vbnRoX2EwMjsKICAgICAgICBfX21vbnRoc1syXSA9IF9NX21vbnRoX2EwMzsKICAgICAg
ICBfX21vbnRoc1szXSA9IF9NX21vbnRoX2EwNDsKICAgICAgICBfX21vbnRoc1s0XSA9IF9NX21v
bnRoX2EwNTsKICAgICAgICBfX21vbnRoc1s1XSA9IF9NX21vbnRoX2EwNjsKICAgICAgICBfX21v
bnRoc1s2XSA9IF9NX21vbnRoX2EwNzsKICAgICAgICBfX21vbnRoc1s3XSA9IF9NX21vbnRoX2Ew
ODsKICAgICAgICBfX21vbnRoc1s4XSA9IF9NX21vbnRoX2EwOTsKICAgICAgICBfX21vbnRoc1s5
XSA9IF9NX21vbnRoX2ExMDsKICAgICAgICBfX21vbnRoc1sxMF0gPSBfTV9tb250aF9hMTE7CiAg
ICAgICAgX19tb250aHNbMTFdID0gX01fbW9udGhfYTEyOwogICAgICB9CgogICAgcHJvdGVjdGVk
OgogICAgICB2aXJ0dWFsCiAgICAgIH5fX3RpbWVwdW5jdCgpCiAgICAgIHsKICAgICAgICBkZWxl
dGUgW10gX01fbmFtZV90aW1lcHVuY3Q7CiAgICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9j
X2xvY2FsZV90aW1lcHVuY3QpOwogICAgICB9CgoKICAgICAgdm9pZAogICAgICBfTV9pbml0aWFs
aXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9IF9fbnVsbCk7CiAgICB9OwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIF9fdGltZXB1bmN0PF9DaGFyVD46
OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgY29uc3QgY2hhcioKICAgIF9fdGltZXB1bmN0PGNoYXI+
OjpfU190aW1lem9uZXNbMTRdOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBfX3RpbWVwdW5j
dDxjaGFyPjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKICB0
ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01fcHV0KGNoYXIqLCBz
aXplX3QsIGNvbnN0IGNoYXIqLCBjb25zdCB0bSopIGNvbnN0OwojIDExNjkgIi91c3IvbG9jYWwv
cHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvbG9jYWxlX2ZhY2V0cy5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY29uc3QgX0NoYXJUKiBfX3RpbWVw
dW5jdDxfQ2hhclQ+OjpfU190aW1lem9uZXNbMTRdOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgdGltZV9nZXQgOiBwdWJsaWMgbG9jYWxl
OjpmYWNldCwgcHVibGljIHRpbWVfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRl
ZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwogICAg
ICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IF9fc3RyaW5nX3R5cGU7CgogICAgICBzdGF0
aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfZ2V0KHNpemVfdCBf
X3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQgKF9fcmVmcykgeyB9CgogICAgICBkYXRl
b3JkZXIKICAgICAgZGF0ZV9vcmRlcigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2Rh
dGVfb3JkZXIoKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF90aW1lKGl0ZXJfdHlwZSBf
X2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZG9fZ2V0X3RpbWUoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KCiAgICAg
IGl0ZXJfdHlwZQogICAgICBnZXRfZGF0ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2Vu
ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgdG0qIF9fdG0pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF9kYXRlKF9fYmVn
LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0
X3dlZWtkYXkoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lv
LAogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfd2Vla2RheShfX2JlZywgX19lbmQsIF9f
aW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF9tb250aG5hbWUo
aXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg
ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF9tb250aG5hbWUoX19iZWcsIF9fZW5kLCBfX2lvLCBf
X2VyciwgX190bSk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfeWVhcihpdGVyX3R5cGUg
X19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmRvX2dldF95ZWFyKF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9CgogICAg
cHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX2dldCgpIHsgfQoKICAgICAgdmly
dHVhbCBkYXRlb3JkZXIKICAgICAgZG9fZGF0ZV9vcmRlcigpIGNvbnN0OwoKICAgICAgdmlydHVh
bCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X3RpbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg
X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAg
IGRvX2dldF9kYXRlKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg
X19pbywKICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190
bSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfd2Vla2RheShp
dGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmLAogICAgICAgICAgICAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsKCiAgICAg
IHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF9tb250aG5hbWUoaXRlcl90eXBlIF9fYmVn
LCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiwKICAgICAgICAgICAgICAgICAgICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRl
cl90eXBlCiAgICAgIGRvX2dldF95ZWFyKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5k
LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
ZXJyLCB0bSogX190bSkgY29uc3Q7CgoKICAgICAgdm9pZAogICAgICBfTV9leHRyYWN0X251bShp
dGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpbnQmIF9fbWVtYmVyLAogICAgICAg
ICAgICAgICAgICAgICBpbnQgX19taW4sIGludCBfX21heCwgc2l6ZV90IF9fbGVuLAogICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlLAogICAgICAgICAgICAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0OwoKCgogICAgICB2b2lkCiAg
ICAgIF9NX2V4dHJhY3RfbmFtZShpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBp
bnQmIF9fbWVtYmVyLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiogX19uYW1l
cywgc2l6ZV90IF9faW5kZXhsZW4sCiAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9z
dGF0ZSYgX19lcnIpIGNvbnN0OwoKCiAgICAgIHZvaWQKICAgICAgX01fZXh0cmFjdF92aWFfZm9y
bWF0KGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGlvc19iYXNlJiBfX2lvLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSog
X190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19mb3JtYXQp
IGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J
dGVyPgogICAgbG9jYWxlOjppZCB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjppZDsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgdGltZV9n
ZXRfYnluYW1lIDogcHVibGljIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj4KICAgIHsKICAgIHB1
YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5J
dGVyIGl0ZXJfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfZ2V0X2J5bmFtZShjb25z
dCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogdGltZV9nZXQ8X0NoYXJULCBfSW5J
dGVyPihfX3JlZnMpIHsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+dGlt
ZV9nZXRfYnluYW1lKCkgeyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgdGltZV9wdXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNl
dCwgcHVibGljIHRpbWVfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hh
clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsKCiAgICAgIHN0
YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9wdXQoc2l6ZV90
IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRl
cl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBl
IF9fZmlsbCwgY29uc3QgdG0qIF9fdG0sCiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fYmVnLCBj
b25zdCBfQ2hhclQqIF9fZW5kKSBjb25zdDsKCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRl
cl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICBj
b25zdCB0bSogX190bSwgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21vZCA9IDApIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW8sIF9fZmlsbCwgX190bSwgX19mb3JtYXQs
IF9fbW9kKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+dGltZV9wdXQo
KQogICAgICB7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5
cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgY29uc3QgdG0qIF9fdG0s
CiAgICAgICAgICAgICBjaGFyIF9fZm9ybWF0LCBjaGFyIF9fbW9kKSBjb25zdDsKICAgIH07Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBsb2NhbGU6
OmlkIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFtZSA6IHB1
YmxpYyB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPgogICAgewogICAgcHVibGljOgoKICAgICAg
dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlw
ZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfcHV0X2J5bmFtZShjb25zdCBjaGFyKiAsIHNp
emVfdCBfX3JlZnMgPSAwKQogICAgICA6IHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+KF9fcmVm
cykKICAgICAgeyB9OwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+dGltZV9w
dXRfYnluYW1lKCkgeyB9CiAgICB9OwoKCiAgY2xhc3MgbW9uZXlfYmFzZQogIHsKICBwdWJsaWM6
CiAgICBlbnVtIHBhcnQgeyBub25lLCBzcGFjZSwgc3ltYm9sLCBzaWduLCB2YWx1ZSB9OwogICAg
c3RydWN0IHBhdHRlcm4geyBjaGFyIGZpZWxkWzRdOyB9OwoKICAgIHN0YXRpYyBjb25zdCBwYXR0
ZXJuIF9TX2RlZmF1bHRfcGF0dGVybjsKCgoKICAgIHN0YXRpYyBwYXR0ZXJuCiAgICBfU19jb25z
dHJ1Y3RfcGF0dGVybihjaGFyIF9fcHJlY2VkZXMsIGNoYXIgX19zcGFjZSwgY2hhciBfX3Bvc24p
OwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNsYXNz
IG1vbmV5cHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIG1vbmV5X2Jhc2UKICAg
IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw
ZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGludGwgPSBfSW50bDsKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgcHJp
dmF0ZToKICAgICAgY29uc3QgY2hhciogX01fZ3JvdXBpbmc7CiAgICAgIGNoYXJfdHlwZSBfTV9k
ZWNpbWFsX3BvaW50OwogICAgICBjaGFyX3R5cGUgX01fdGhvdXNhbmRzX3NlcDsKICAgICAgY29u
c3QgY2hhcl90eXBlKiBfTV9jdXJyX3N5bWJvbDsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfTV9w
b3NpdGl2ZV9zaWduOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX25lZ2F0aXZlX3NpZ247CiAg
ICAgIGludCBfTV9mcmFjX2RpZ2l0czsKICAgICAgcGF0dGVybiBfTV9wb3NfZm9ybWF0OwogICAg
ICBwYXR0ZXJuIF9NX25lZ19mb3JtYXQ7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAg
ICBtb25leXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQog
ICAgICB7IF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdCgpOyB9CgogICAgICBleHBsaWNpdAogICAg
ICBtb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBf
X3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2luaXRp
YWxpemVfbW9uZXlwdW5jdChfX2Nsb2MsIF9fcyk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICBk
ZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZGVjaW1hbF9wb2lu
dCgpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmRvX3Rob3VzYW5kc19zZXAoKTsgfQoKICAgICAgc3RyaW5nCiAgICAg
IGdyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ3JvdXBpbmcoKTsgfQoK
ICAgICAgc3RyaW5nX3R5cGUKICAgICAgY3Vycl9zeW1ib2woKSBjb25zdAogICAgICB7IHJldHVy
biB0aGlzLT5kb19jdXJyX3N5bWJvbCgpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBwb3Np
dGl2ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcG9zaXRpdmVfc2lnbigp
OyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBuZWdhdGl2ZV9zaWduKCkgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9fbmVnYXRpdmVfc2lnbigpOyB9CgogICAgICBpbnQKICAgICAgZnJh
Y19kaWdpdHMoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19mcmFjX2RpZ2l0cygpOyB9
CgogICAgICBwYXR0ZXJuCiAgICAgIHBvc19mb3JtYXQoKSBjb25zdAogICAgICB7IHJldHVybiB0
aGlzLT5kb19wb3NfZm9ybWF0KCk7IH0KCiAgICAgIHBhdHRlcm4KICAgICAgbmVnX2Zvcm1hdCgp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25lZ19mb3JtYXQoKTsgfQoKICAgIHByb3Rl
Y3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bW9uZXlwdW5jdCgpOwoKICAgICAgdmlydHVhbCBj
aGFyX3R5cGUKICAgICAgZG9fZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9N
X2RlY2ltYWxfcG9pbnQ7IH0KCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3Rob3Vz
YW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90aG91c2FuZHNfc2VwOyB9CgogICAg
ICB2aXJ0dWFsIHN0cmluZwogICAgICBkb19ncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IF9NX2dyb3VwaW5nOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX2N1cnJf
c3ltYm9sKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fY3Vycl9zeW1ib2w7IH0KCiAgICAgIHZp
cnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fcG9zaXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIF9NX3Bvc2l0aXZlX3NpZ247IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAg
ICAgZG9fbmVnYXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX25lZ2F0aXZlX3Np
Z247IH0KCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2ZyYWNfZGlnaXRzKCkgY29uc3QKICAg
ICAgeyByZXR1cm4gX01fZnJhY19kaWdpdHM7IH0KCiAgICAgIHZpcnR1YWwgcGF0dGVybgogICAg
ICBkb19wb3NfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fcG9zX2Zvcm1hdDsgfQoK
ICAgICAgdmlydHVhbCBwYXR0ZXJuCiAgICAgIGRvX25lZ19mb3JtYXQoKSBjb25zdAogICAgICB7
IHJldHVybiBfTV9uZWdfZm9ybWF0OyB9CgoKICAgICAgIHZvaWQKICAgICAgIF9NX2luaXRpYWxp
emVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9IF9fbnVsbCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX25hbWUgPSBfX251bGwpOwogICAgfTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgbG9jYWxlOjppZCBtb25l
eXB1bmN0PF9DaGFyVCwgX0ludGw+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBi
b29sIF9JbnRsPgogICAgY29uc3QgYm9vbCBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+OjppbnRs
OwoKICB0ZW1wbGF0ZTw+CiAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+Ojp+bW9uZXlwdW5jdCgp
OwoKICB0ZW1wbGF0ZTw+CiAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6fm1vbmV5cHVuY3Qo
KTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6X01f
aW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUsIGNvbnN0IGNoYXIqKTsKCiAgdGVtcGxh
dGU8PgogICAgdm9pZAogICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46Ol9NX2luaXRpYWxpemVf
bW9uZXlwdW5jdChfX2NfbG9jYWxlLCBjb25zdCBjaGFyKik7CiMgMTUwNiAiL3Vzci9sb2NhbC9w
cm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9sb2NhbGVfZmFjZXRzLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjbGFzcyBtb25l
eXB1bmN0X2J5bmFtZSA6IHB1YmxpYyBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+CiAgICB7CiAg
ICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfbW9uZXlwdW5jdDsKCiAgICBwdWJsaWM6CiAgICAg
IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0No
YXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGludGwgPSBfSW50bDsK
CiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3RfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywg
c2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPihfX3Jl
ZnMpCiAgICAgIHsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfbW9uZXlw
dW5jdCwgX19zKTsKICAgICAgICBfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX01fY19sb2NhbGVf
bW9uZXlwdW5jdCk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAg
fm1vbmV5cHVuY3RfYnluYW1lKCkKICAgICAgeyBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9j
YWxlX21vbmV5cHVuY3QpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJv
b2wgX0ludGw+CiAgICBjb25zdCBib29sIG1vbmV5cHVuY3RfYnluYW1lPF9DaGFyVCwgX0ludGw+
OjppbnRsOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAg
ICBjbGFzcyBtb25leV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGlj
OgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIg
aXRlcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBl
OwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBtb25l
eV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAg
ICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGJv
b2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf
X2VyciwgbG9uZyBkb3VibGUmIF9fdW5pdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X2dldChfX3MsIF9fZW5kLCBfX2ludGwsIF9faW8sIF9fZXJyLCBfX3VuaXRzKTsgfQoKICAgICAg
aXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wg
X19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19n
ZXQoX19zLCBfX2VuZCwgX19pbnRsLCBfX2lvLCBfX2VyciwgX19kaWdpdHMpOyB9CgogICAgcHJv
dGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leV9nZXQoKSB7IH0KCiAgICAgIHZpcnR1
YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQs
IGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0
YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdW5pdHMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBp
dGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9v
bCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyLCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCBtb25leV9n
ZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyBtb25leV9wdXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNl
dAogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg
IHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxf
Q2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBl
eHBsaWNpdAogICAgICBtb25leV9wdXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNl
dChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBi
b29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBjaGFyX3R5cGUgX19maWxsLCBs
b25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19z
LCBfX2ludGwsIF9faW8sIF9fZmlsbCwgX191bml0cyk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAg
ICBwdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAg
ICAgY2hhcl90eXBlIF9fZmlsbCwgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2ludGwsIF9faW8sIF9fZmlsbCwgX19k
aWdpdHMpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leV9wdXQo
KSB7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19z
LCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAg
ICAgICBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBl
CiAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8s
IGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlwZSYgX19kaWdp
dHMpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
T3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgbW9uZXlfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjppZDsK
CgogIHN0cnVjdCBtZXNzYWdlc19iYXNlCiAgewogICAgdHlwZWRlZiBpbnQgY2F0YWxvZzsKICB9
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlcyA6IHB1Ymxp
YyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbWVzc2FnZXNfYmFzZQogICAgewogICAgcHVibGljOgoK
ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmlu
ZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgIHByb3RlY3RlZDoKCgogICAgICBfX2NfbG9jYWxl
IF9NX2NfbG9jYWxlX21lc3NhZ2VzOwoKCiAgICAgIGNoYXIqIF9NX25hbWVfbWVzc2FnZXM7CgoK
ICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAog
ICAgICBtZXNzYWdlcyhzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9f
cmVmcykKICAgICAgewogICAgICAgIF9NX25hbWVfbWVzc2FnZXMgPSBuZXcgY2hhclsyXTsKICAg
ICAgICBzdHJjcHkoX01fbmFtZV9tZXNzYWdlcywgIkMiKTsKICAgICAgICBfTV9jX2xvY2FsZV9t
ZXNzYWdlcyA9IF9TX2NfbG9jYWxlOwogICAgICB9CgoKICAgICAgZXhwbGljaXQKICAgICAgbWVz
c2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9
IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsKICAgICAgICBfTV9uYW1l
X21lc3NhZ2VzID0gbmV3IGNoYXJbc3RybGVuKF9fcykgKyAxXTsKICAgICAgICBzdHJjcHkoX01f
bmFtZV9tZXNzYWdlcywgX19zKTsKICAgICAgICBfTV9jX2xvY2FsZV9tZXNzYWdlcyA9IF9TX2Ns
b25lX2NfbG9jYWxlKF9fY2xvYyk7CiAgICAgIH0KCiAgICAgIGNhdGFsb2cKICAgICAgb3Blbihj
b25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYykgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsgfQoKCiAgICAgIGNhdGFs
b2cKICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmLCBj
b25zdCBjaGFyKikgY29uc3Q7CgogICAgICBzdHJpbmdfdHlwZQogICAgICBnZXQoY2F0YWxvZyBf
X2MsIGludCBfX3NldCwgaW50IF9fbXNnaWQsIGNvbnN0IHN0cmluZ190eXBlJiBfX3MpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2MsIF9fc2V0LCBfX21zZ2lkLCBfX3MpOyB9
CgogICAgICB2b2lkCiAgICAgIGNsb3NlKGNhdGFsb2cgX19jKSBjb25zdAogICAgICB7IHJldHVy
biB0aGlzLT5kb19jbG9zZShfX2MpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAg
ICAgIH5tZXNzYWdlcygpCiAgICAgICB7CiAgICAgICAgIGRlbGV0ZSBbXSBfTV9uYW1lX21lc3Nh
Z2VzOwogICAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsK
ICAgICAgIH0KCiAgICAgIHZpcnR1YWwgY2F0YWxvZwogICAgICBkb19vcGVuKGNvbnN0IGJhc2lj
X3N0cmluZzxjaGFyPiYsIGNvbnN0IGxvY2FsZSYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBzdHJp
bmdfdHlwZQogICAgICBkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHN0cmluZ190eXBl
JiBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHZvaWQKICAgICAgZG9fY2xvc2UoY2F0
YWxvZykgY29uc3Q7CgoKICAgICAgY2hhcioKICAgICAgX01fY29udmVydF90b19jaGFyKGNvbnN0
IHN0cmluZ190eXBlJiBfX21zZykgY29uc3QKICAgICAgewoKICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oY29uc3RfY2FzdDxfQ2hhclQqPihfX21zZy5jX3N0cigpKSk7CiAg
ICAgIH0KCgogICAgICBzdHJpbmdfdHlwZQogICAgICBfTV9jb252ZXJ0X2Zyb21fY2hhcihjaGFy
KiBfX21zZykgY29uc3QKICAgICAgewoKICAgICAgICBzaXplX3QgX19sZW4gPSBjaGFyX3RyYWl0
czxjaGFyPjo6bGVuZ3RoKF9fbXNnKSAtIDE7CiMgMTczNiAiL3Vzci9sb2NhbC9wcm9kdWN0cy9n
Y2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKICAgICAg
ICByZXR1cm4gc3RyaW5nX3R5cGUoKTsKICAgICAgfQogICAgIH07CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgbWVzc2FnZXM8X0NoYXJUPjo6aWQ7CgoKICB0ZW1w
bGF0ZTw+CiAgICBzdHJpbmcKICAgIG1lc3NhZ2VzPGNoYXI+Ojpkb19nZXQoY2F0YWxvZywgaW50
LCBpbnQsIGNvbnN0IHN0cmluZyYpIGNvbnN0OwojIDE3NTUgIi91c3IvbG9jYWwvcHJvZHVjdHMv
Z2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCiMgMSAi
L3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvc3BhcmMtc3Vu
LXNvbGFyaXMyLjgvYml0cy9tZXNzYWdlc19tZW1iZXJzLmgiIDEgMwojIDM3ICIvdXNyL2xvY2Fs
L3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9zcGFyYy1zdW4tc29sYXJpczIu
OC9iaXRzL21lc3NhZ2VzX21lbWJlcnMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cKICAgIG1lc3NhZ2VzPF9DaGFy
VD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19s
b2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKSBjb25zdAogICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgogICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZwogICAgbWVzc2Fn
ZXM8X0NoYXJUPjo6ZG9fb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2Nh
bGUmKSBjb25zdAogICAgeyByZXR1cm4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
CiAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpzdHJpbmdfdHlwZQogICAgbWVzc2FnZXM8
X0NoYXJUPjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0cmluZ190eXBlJiBfX2RmYXVsdCkgY29uc3QKICAgIHsgcmV0dXJuIF9f
ZGZhdWx0OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHZvaWQKICAgIG1lc3Nh
Z2VzPF9DaGFyVD46OmRvX2Nsb3NlKGNhdGFsb2cpIGNvbnN0CiAgICB7IH0KIyAxNzU2ICIvdXNy
L2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2xvY2FsZV9m
YWNldHMuaCIgMiAzCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3Nh
Z2VzX2J5bmFtZSA6IHB1YmxpYyBtZXNzYWdlczxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAg
ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8
X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzX2J5bmFt
ZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IG1lc3NhZ2VzPF9D
aGFyVD4oX19yZWZzKQogICAgICB7CiAgICAgICAgZGVsZXRlIFtdIF9NX25hbWVfbWVzc2FnZXM7
CiAgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IG5ldyBjaGFyW3N0cmxlbihfX3MpICsgMV07CiAg
ICAgICAgc3RyY3B5KF9NX25hbWVfbWVzc2FnZXMsIF9fcyk7CiAgICAgICAgX1NfZGVzdHJveV9j
X2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxl
KF9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfX3MpOwogICAgICB9CgogICAgcHJvdGVjdGVkOgogICAg
ICB2aXJ0dWFsCiAgICAgIH5tZXNzYWdlc19ieW5hbWUoKQogICAgICB7IH0KICAgIH07CgoKCgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzc3BhY2Uo
X0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxj
dHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3ByaW50KF9DaGFy
VCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8
X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpwcmludCwgX19jKTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNjbnRybChfQ2hhclQgX19j
LCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFy
VD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6Y250cmwsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzdXBwZXIoX0NoYXJUIF9fYywgY29u
c3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4o
X19sb2MpLmlzKGN0eXBlX2Jhc2U6OnVwcGVyLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVD4KICAgIGlubGluZSBib29sIGlzbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxl
JiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlz
KGN0eXBlX2Jhc2U6Omxvd2VyLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIGlubGluZSBib29sCiAgICBpc2FscGhhKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19s
b2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlw
ZV9iYXNlOjphbHBoYSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp
bmxpbmUgYm9vbAogICAgaXNkaWdpdChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQog
ICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFz
ZTo6ZGlnaXQsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5l
IGJvb2wKICAgIGlzcHVuY3QoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsg
cmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnB1
bmN0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29s
CiAgICBpc3hkaWdpdChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1
cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6eGRpZ2l0
LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAg
ICBpc2FsbnVtKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1
c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjphbG51bSwgX19j
KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNn
cmFwaChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2Zh
Y2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6Z3JhcGgsIF9fYyk7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG91cHBl
cihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0
PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG91cHBlcihfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvbG93ZXIoX0NoYXJUIF9fYywgY29u
c3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4o
X19sb2MpLnRvbG93ZXIoX19jKTsgfQp9CiMgNDIgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMu
Mi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvYmFzaWNfaW9zLmgiIDIgMwoKbmFtZXNwYWNlIHN0
ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNs
YXNzIGJhc2ljX2lvcyA6IHB1YmxpYyBpb3NfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAg
dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6
OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190
eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9m
Zl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRl
ZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBvc3RyZWFtYnVmX2l0
ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYg
bnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9pdGVyPiBfX251bXB1dF90eXBlOwogICAgICB0
eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1idWZf
aXRlcjsKICAgICAgdHlwZWRlZiBudW1fZ2V0PF9DaGFyVCwgX19pc3RyZWFtYnVmX2l0ZXI+IF9f
bnVtZ2V0X3R5cGU7CgoKICAgIHByb3RlY3RlZDoKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+KiBfTV90aWU7CiAgICAgIG11dGFibGUgY2hhcl90eXBlIF9NX2ZpbGw7CiAgICAg
IG11dGFibGUgYm9vbCBfTV9maWxsX2luaXQ7CiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs
IF9UcmFpdHM+KiBfTV9zdHJlYW1idWY7CgoKICAgICAgY29uc3QgX19jdHlwZV90eXBlKiBfTV9m
Y3R5cGU7CgogICAgICBjb25zdCBfX251bXB1dF90eXBlKiBfTV9mbnVtcHV0OwoKICAgICAgY29u
c3QgX19udW1nZXRfdHlwZSogX01fZm51bWdldDsKCiAgICBwdWJsaWM6CiAgICAgIG9wZXJhdG9y
IHZvaWQqKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpID8gMCA6IGNvbnN0X2Nh
c3Q8YmFzaWNfaW9zKj4odGhpcyk7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IhKCkgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpOyB9CgogICAgICBpb3N0YXRlCiAgICAgIHJk
c3RhdGUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJlYW1idWZfc3RhdGU7IH0KCiAgICAg
IHZvaWQKICAgICAgY2xlYXIoaW9zdGF0ZSBfX3N0YXRlID0gZ29vZGJpdCk7CgogICAgICB2b2lk
CiAgICAgIHNldHN0YXRlKGlvc3RhdGUgX19zdGF0ZSkKICAgICAgeyB0aGlzLT5jbGVhcih0aGlz
LT5yZHN0YXRlKCkgfCBfX3N0YXRlKTsgfQoKICAgICAgYm9vbAogICAgICBnb29kKCkgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+cmRzdGF0ZSgpID09IDA7IH0KCiAgICAgIGJvb2wKICAgICAg
ZW9mKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIGVvZmJpdCkgIT0g
MDsgfQoKICAgICAgYm9vbAogICAgICBmYWlsKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRoaXMt
PnJkc3RhdGUoKSAmIChiYWRiaXQgfCBmYWlsYml0KSkgIT0gMDsgfQoKICAgICAgYm9vbAogICAg
ICBiYWQoKSBjb25zdAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgYmFkYml0KSAh
PSAwOyB9CgogICAgICBpb3N0YXRlCiAgICAgIGV4Y2VwdGlvbnMoKSBjb25zdAogICAgICB7IHJl
dHVybiBfTV9leGNlcHRpb247IH0KCiAgICAgIHZvaWQKICAgICAgZXhjZXB0aW9ucyhpb3N0YXRl
IF9fZXhjZXB0KQogICAgICB7CiAgICAgICAgX01fZXhjZXB0aW9uID0gX19leGNlcHQ7CiAgICAg
ICAgdGhpcy0+Y2xlYXIoX01fc3RyZWFtYnVmX3N0YXRlKTsKICAgICAgfQoKCiAgICAgIGV4cGxp
Y2l0CiAgICAgIGJhc2ljX2lvcyhiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19z
YikgOiBpb3NfYmFzZSgpCiAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsgfQoKICAgICAgdmlydHVh
bAogICAgICB+YmFzaWNfaW9zKCkgeyB9CgoKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+KgogICAgICB0aWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90aWU7IH0KCiAgICAg
IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPioKICAgICAgdGllKGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiogX190aWVzdHIpCiAgICAgIHsKICAgICAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01fdGllOwogICAgICAgIF9NX3RpZSA9IF9fdGll
c3RyOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyZWFtYnVm
PF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHJkYnVmKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01f
c3RyZWFtYnVmOyB9CgogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAg
ICAgcmRidWYoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOwoKICAgICAg
YmFzaWNfaW9zJgogICAgICBjb3B5Zm10KGNvbnN0IGJhc2ljX2lvcyYgX19yaHMpOwoKICAgICAg
Y2hhcl90eXBlCiAgICAgIGZpbGwoKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKCFfTV9maWxs
X2luaXQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9NX2ZpbGwgPSB0aGlzLT53aWRlbignICcp
OwogICAgICAgICAgICBfTV9maWxsX2luaXQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIHJl
dHVybiBfTV9maWxsOwogICAgICB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZmlsbChjaGFyX3R5
cGUgX19jaCkKICAgICAgewogICAgICAgIGNoYXJfdHlwZSBfX29sZCA9IHRoaXMtPmZpbGwoKTsK
ICAgICAgICBfTV9maWxsID0gX19jaDsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAgIH0KCgog
ICAgICBsb2NhbGUKICAgICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogICAgICBjaGFy
CiAgICAgIG5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAg
IGNoYXJfdHlwZQogICAgICB3aWRlbihjaGFyIF9fYykgY29uc3Q7CgogICAgcHJvdGVjdGVkOgoK
ICAgICAgYmFzaWNfaW9zKCkgOiBpb3NfYmFzZSgpCiAgICAgIHsgfQoKICAgICAgdm9pZAogICAg
ICBpbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKTsKCiAgICAgIGJv
b2wKICAgICAgX01fY2hlY2tfZmFjZXQoY29uc3QgbG9jYWxlOjpmYWNldCogX19mKSBjb25zdAog
ICAgICB7CiAgICAgICAgaWYgKCFfX2YpCiAgICAgICAgICBfX3Rocm93X2JhZF9jYXN0KCk7CiAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fY2FjaGVfZmFj
ZXRzKGNvbnN0IGxvY2FsZSYgX19sb2MpOwogICAgfTsKfQoKCgojIDEgIi91c3IvbG9jYWwvcHJv
ZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvYmFzaWNfaW9zLnRjYyIgMSAz
CiMgMzQgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2Jp
dHMvYmFzaWNfaW9zLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9zPF9DaGFyVCwg
X1RyYWl0cz46OmNsZWFyKGlvc3RhdGUgX19zdGF0ZSkKICAgIHsKICAgICAgaWYgKHRoaXMtPnJk
YnVmKCkpCiAgICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZTsKICAgICAgZWxzZQog
ICAgICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZSB8IGJhZGJpdDsKICAgICAgaWYg
KCh0aGlzLT5yZHN0YXRlKCkgJiB0aGlzLT5leGNlcHRpb25zKCkpKQogICAgICAgIF9fdGhyb3df
aW9zX2ZhaWx1cmUoImJhc2ljX2lvczo6Y2xlYXIoaW9zdGF0ZSkgY2F1c2VkIGV4Y2VwdGlvbiIp
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgIGJhc2ljX2lvczxfQ2hhclQs
IF9UcmFpdHM+OjpyZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikK
ICAgIHsKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01f
c3RyZWFtYnVmOwogICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOwogICAgICB0aGlzLT5jbGVhcigp
OwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz
aWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmNvcHlmbXQoY29uc3QgYmFzaWNfaW9zJiBfX3JocykK
ICAgIHsKCgoKCiAgICAgIF9Xb3JkcyogX193b3JkcyA9IChfX3Jocy5fTV93b3JkX3NpemUgPD0g
X1NfbG9jYWxfd29yZF9zaXplKSA/CiAgICAgICAgX01fbG9jYWxfd29yZCA6IG5ldyBfV29yZHNb
X19yaHMuX01fd29yZF9zaXplXTsKCgogICAgICBfQ2FsbGJhY2tfbGlzdCogX19jYiA9IF9fcmhz
Ll9NX2NhbGxiYWNrczsKICAgICAgaWYgKF9fY2IpCiAgICAgICAgX19jYi0+X01fYWRkX3JlZmVy
ZW5jZSgpOwogICAgICBfTV9jYWxsX2NhbGxiYWNrcyhlcmFzZV9ldmVudCk7CiAgICAgIGlmIChf
TV93b3JkICE9IF9NX2xvY2FsX3dvcmQpCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIFtdIF9N
X3dvcmQ7CiAgICAgICAgICBfTV93b3JkID0gMDsKICAgICAgICB9CiAgICAgIF9NX2Rpc3Bvc2Vf
Y2FsbGJhY2tzKCk7CgogICAgICBfTV9jYWxsYmFja3MgPSBfX2NiOwogICAgICBmb3IgKGludCBf
X2kgPSAwOyBfX2kgPCBfX3Jocy5fTV93b3JkX3NpemU7ICsrX19pKQogICAgICAgIF9fd29yZHNb
X19pXSA9IF9fcmhzLl9NX3dvcmRbX19pXTsKICAgICAgaWYgKF9NX3dvcmQgIT0gX01fbG9jYWxf
d29yZCkKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgW10gX01fd29yZDsKICAgICAgICAgIF9N
X3dvcmQgPSAwOwogICAgICAgIH0KICAgICAgX01fd29yZCA9IF9fd29yZHM7CiAgICAgIF9NX3dv
cmRfc2l6ZSA9IF9fcmhzLl9NX3dvcmRfc2l6ZTsKCiAgICAgIHRoaXMtPmZsYWdzKF9fcmhzLmZs
YWdzKCkpOwogICAgICB0aGlzLT53aWR0aChfX3Jocy53aWR0aCgpKTsKICAgICAgdGhpcy0+cHJl
Y2lzaW9uKF9fcmhzLnByZWNpc2lvbigpKTsKICAgICAgdGhpcy0+dGllKF9fcmhzLnRpZSgpKTsK
ICAgICAgdGhpcy0+ZmlsbChfX3Jocy5maWxsKCkpOwoKICAgICAgdGhpcy0+ZXhjZXB0aW9ucyhf
X3Jocy5leGNlcHRpb25zKCkpOwoKICAgICAgX01fY2FsbF9jYWxsYmFja3MoY29weWZtdF9ldmVu
dCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2hhcgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0
cz46Om5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdAogICAgewogICAg
ICBjaGFyIF9fcmV0ID0gX19kZmF1bHQ7CiAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mY3R5
cGUpKQogICAgICAgIF9fcmV0ID0gX01fZmN0eXBlLT5uYXJyb3coX19jLCBfX2RmYXVsdCk7CiAg
ICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgX0NoYXJUCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6
d2lkZW4oY2hhciBfX2MpIGNvbnN0CiAgICB7CiAgICAgIGNoYXJfdHlwZSBfX3JldCA9IGNoYXJf
dHlwZSgpOwogICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZmN0eXBlKSkKICAgICAgICBfX3Jl
dCA9IF9NX2ZjdHlwZS0+d2lkZW4oX19jKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgbG9jYWxlCiAg
ICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6aW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykK
ICAgIHsKICAgICAgbG9jYWxlIF9fb2xkKHRoaXMtPmdldGxvYygpKTsKICAgICAgaW9zX2Jhc2U6
OmltYnVlKF9fbG9jKTsKICAgICAgX01fY2FjaGVfZmFjZXRzKF9fbG9jKTsKICAgICAgaWYgKHRo
aXMtPnJkYnVmKCkgIT0gMCkKICAgICAgICB0aGlzLT5yZGJ1ZigpLT5wdWJpbWJ1ZShfX2xvYyk7
CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46
OmluaXQoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpCiAgICB7CgogICAg
ICBpb3NfYmFzZTo6X01faW5pdCgpOwogICAgICBfTV9jYWNoZV9mYWNldHMoX01faW9zX2xvY2Fs
ZSk7CiAgICAgIF9NX3RpZSA9IDA7CiMgMTU5ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIu
MS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2Jhc2ljX2lvcy50Y2MiIDMKICAgICAgX01fZmlsbCA9
IF9DaGFyVCgpOwogICAgICBfTV9maWxsX2luaXQgPSBmYWxzZTsKCiAgICAgIF9NX2V4Y2VwdGlv
biA9IGdvb2RiaXQ7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9IF9fc2I7CiAgICAgIF9NX3N0cmVhbWJ1
Zl9zdGF0ZSA9IF9fc2IgPyBnb29kYml0IDogYmFkYml0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19pb3M8X0No
YXJULCBfVHJhaXRzPjo6X01fY2FjaGVfZmFjZXRzKGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7
CiAgICAgIGlmIChoYXNfZmFjZXQ8X19jdHlwZV90eXBlPihfX2xvYykpCiAgICAgICAgX01fZmN0
eXBlID0gJnVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9fbG9jKTsKICAgICAgZWxzZQogICAgICAg
IF9NX2ZjdHlwZSA9IDA7CgogICAgICBpZiAoaGFzX2ZhY2V0PF9fbnVtcHV0X3R5cGU+KF9fbG9j
KSkKICAgICAgICBfTV9mbnVtcHV0ID0gJnVzZV9mYWNldDxfX251bXB1dF90eXBlPihfX2xvYyk7
CiAgICAgIGVsc2UKICAgICAgICBfTV9mbnVtcHV0ID0gMDsKICAgICAgaWYgKGhhc19mYWNldDxf
X251bWdldF90eXBlPihfX2xvYykpCiAgICAgICAgX01fZm51bWdldCA9ICZ1c2VfZmFjZXQ8X19u
dW1nZXRfdHlwZT4oX19sb2MpOwogICAgICBlbHNlCiAgICAgICAgX01fZm51bWdldCA9IDA7CiAg
ICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pb3M8Y2hhcj47CgoKCgp9CiMg
MjA4ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRz
L2Jhc2ljX2lvcy5oIiAyIDMKIyA1MiAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5j
bHVkZS9jKysvMy4yLjEvaW9zIiAyIDMKIyA0NiAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4y
LjEvaW5jbHVkZS9jKysvMy4yLjEvb3N0cmVhbSIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNf
b3N0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+CiAgICB7
CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNf
dHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IF9f
c3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4g
X19pb3NfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4g
X19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQs
IF9UcmFpdHM+IF9fb3N0cmVhbWJ1Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9wdXQ8X0NoYXJU
LCBfX29zdHJlYW1idWZfaXRlcj4gX19udW1wdXRfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlwZTxf
Q2hhclQ+IF9fY3R5cGVfdHlwZTsKCgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19vc3RyZWFt
KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpCiAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsgfQoKICAg
ICAgdmlydHVhbAogICAgICB+YmFzaWNfb3N0cmVhbSgpIHsgfQoKCiAgICAgIGNsYXNzIHNlbnRy
eTsKICAgICAgZnJpZW5kIGNsYXNzIHNlbnRyeTsKCgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAg
ICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19wZikoX19vc3RyZWFtX3R5cGUmKSk7
CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChfX2lvc190eXBlJiAoKl9f
cGYpKF9faW9zX3R5cGUmKSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8
PChpb3NfYmFzZSYgKCpfX3BmKSAoaW9zX2Jhc2UmKSk7CgoKICAgICAgX19vc3RyZWFtX3R5cGUm
CiAgICAgIG9wZXJhdG9yPDwobG9uZyBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAg
IG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAg
ICAgIG9wZXJhdG9yPDwoYm9vbCBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9w
ZXJhdG9yPDwoc2hvcnQgX19uKQogICAgICB7CiAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9f
Zm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgICAgaWYgKF9f
Zm10ICYgaW9zX2Jhc2U6Om9jdCB8fCBfX2ZtdCAmIGlvc19iYXNlOjpoZXgpCiAgICAgICAgICBy
ZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pihf
X24pKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3Rh
dGljX2Nhc3Q8bG9uZz4oX19uKSk7CiAgICAgIH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAg
ICBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+b3Bl
cmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24pKTsgfQoKICAgICAgX19vc3Ry
ZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoaW50IF9fbikKICAgICAgewogICAgICAgIGlvc19i
YXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxk
OwogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6
aGV4KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgbG9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1
bnNpZ25lZCBpbnQ+KF9fbikpKTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gdGhpcy0+
b3BlcmF0b3I8PChzdGF0aWNfY2FzdDxsb25nPihfX24pKTsKICAgICAgfQoKICAgICAgX19vc3Ry
ZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgaW50IF9fbikKICAgICAgeyByZXR1
cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24pKTsgfQoK
CiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgbG9uZyBfX24pOwoK
ICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25n
IF9fbik7CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoZG91YmxlIF9f
Zik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChmbG9hdCBfX2YpCiAg
ICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX2YpKTsg
fQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwobG9uZyBkb3VibGUgX19m
KTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGNvbnN0IHZvaWQqIF9f
cCk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChfX3N0cmVhbWJ1Zl90
eXBlKiBfX3NiKTsKCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgcHV0KGNoYXJfdHlwZSBf
X2MpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHdyaXRlKGNvbnN0IGNoYXJfdHlwZSog
X19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgZmx1c2go
KTsKCgogICAgICBwb3NfdHlwZQogICAgICB0ZWxscCgpOwoKICAgICAgX19vc3RyZWFtX3R5cGUm
CiAgICAgIHNlZWtwKHBvc190eXBlKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBzZWVr
cChvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIpOwogICAgfTsKCgogIHRlbXBsYXRlIDx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz46OnNlbnRyeQogICAgewoKICAgICAgYm9vbCBfTV9vazsKICAgICAgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9NX29zOwoKICAgIHB1YmxpYzoKICAgICAgZXhw
bGljaXQKICAgICAgc2VudHJ5KGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29zKTsK
CiAgICAgIH5zZW50cnkoKQogICAgICB7CgogICAgICAgIGlmIChfTV9vcy5mbGFncygpICYgaW9z
X2Jhc2U6OnVuaXRidWYgJiYgIXVuY2F1Z2h0X2V4Y2VwdGlvbigpKQogICAgICAgICAgewoKICAg
ICAgICAgICAgaWYgKF9NX29zLnJkYnVmKCkgJiYgX01fb3MucmRidWYoKS0+cHVic3luYygpID09
IC0xKQogICAgICAgICAgICAgIF9NX29zLnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgfQogICAgICB9CgogICAgICBvcGVyYXRvciBib29sKCkKICAgICAgeyByZXR1cm4gX01f
b2s7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgX0NoYXJUIF9fYyk7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JiBfX291dCwgY2hhciBfX2MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgX19vdXQud2lk
ZW4oX19jKSk7IH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh
bTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJh
aXRzPiYgX19vdXQsIGNoYXIgX19jKTsKCgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBi
YXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFt
PGNoYXIsIF9UcmFpdHM+JiBfX291dCwgc2lnbmVkIGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9f
b3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFp
dHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNp
Y19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgdW5zaWduZWQgY2hhciBfX2MpCiAgICB7
IHJldHVybiAoX19vdXQgPDwgc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9fcyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAm
CiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNv
bnN0IGNoYXIqIF9fcyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0
cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBf
VHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJh
aXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFz
aWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IHNpZ25lZCBjaGFyKiBfX3Mp
CiAgICB7IHJldHVybiAoX19vdXQgPDwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oX19z
KSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwg
X1RyYWl0cz4gJgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBf
X291dCwgY29uc3QgdW5zaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBlbmRsKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAg
IHsgcmV0dXJuIGZsdXNoKF9fb3MucHV0KF9fb3Mud2lkZW4oJ1xuJykpKTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mCiAgICBlbmRzKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYg
X19vcykKICAgIHsgcmV0dXJuIF9fb3MucHV0KF9DaGFyVCgpKTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mCiAgICBmbHVzaChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3Mp
CiAgICB7IHJldHVybiBfX29zLmZsdXNoKCk7IH0KCn0KCgoKCgojIDEgIi91c3IvbG9jYWwvcHJv
ZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvb3N0cmVhbS50Y2MiIDEgMwoj
IDM2ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRz
L29zdHJlYW0udGNjIiAzCgojIDEgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1
ZGUvYysrLzMuMi4xL2xvY2FsZSIgMSAzCiMgNDMgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMu
Mi4xL2luY2x1ZGUvYysrLzMuMi4xL2xvY2FsZSIgMwoKCgojIDEgIi91c3IvbG9jYWwvcHJvZHVj
dHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDEg
MwojIDM3ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9i
aXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCgojIDEgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMu
Mi4xL2luY2x1ZGUvYysrLzMuMi4xL2NlcnJubyIgMSAzCiMgNDcgIi91c3IvbG9jYWwvcHJvZHVj
dHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2NlcnJubyIgMwoKIyAxICIvdXNyL2luY2x1
ZGUvZXJybm8uaCIgMSAzIDQKIyAxNyAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDMgNAojcHJhZ21h
IGlkZW50ICJAKCMpZXJybm8uaAkxLjE2CTk5LzA3LzI2IFNNSSIgCgoKCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvc3lzL2Vycm5vLmgiIDEgMyA0CiMgMTEgIi91c3IvaW5jbHVkZS9zeXMvZXJybm8uaCIg
MyA0CiNwcmFnbWEgaWRlbnQgIkAoIyllcnJuby5oCTEuMjAJMDAvMDIvMTQgU01JIiAKIyAzNSAi
L3Vzci9pbmNsdWRlL3N5cy9lcnJuby5oIiAzIDQKZXh0ZXJuICJDIiB7CiMgMTkyICIvdXNyL2lu
Y2x1ZGUvc3lzL2Vycm5vLmgiIDMgNAp9CiMgMjQgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAyIDMg
NAoKCmV4dGVybiAiQyIgewojIDM4ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMyA0CmV4dGVybiBp
bnQgKl9fX2Vycm5vKCk7CiMgNDkgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzIDQKfQojIDQ5ICIv
dXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9jZXJybm8iIDIg
MwojIDM5ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9i
aXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCgojIDEgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2Nj
LzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2NtYXRoIiAxIDMKIyA0OCAiL3Vzci9sb2NhbC9wcm9k
dWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvY21hdGgiIDMKCgoKIyAxICIvdXNyL2xv
Y2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8z
LjIuMS9pbmNsdWRlL21hdGguaCIgMSAzIDQKIyAyMyAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2Mv
My4yLjEvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4yLjEvaW5jbHVkZS9tYXRo
LmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpbWF0aC5oCTIuMTAJOTkvMDcvMjkgU01JIgoKIyAx
ICIvdXNyL2luY2x1ZGUvaXNvL21hdGhfaXNvLmgiIDEgMyA0CgoKCgoKCgojcHJhZ21hIGlkZW50
ICJAKCMpbWF0aF9pc28uaAkxLjEJOTkvMDcvMzAgU01JIgoKCmV4dGVybiAiQyIgewojIDIwICIv
dXNyL2luY2x1ZGUvaXNvL21hdGhfaXNvLmgiIDMgNAp0eXBlZGVmIHVuaW9uIF9oX3ZhbCB7CiAg
ICAgICAgdW5zaWduZWQgbG9uZyBfaVtzaXplb2YoZG91YmxlKSAvIHNpemVvZih1bnNpZ25lZCBs
b25nKV07CiAgICAgICAgZG91YmxlIF9kOwp9IF9oX3ZhbDsKCgpleHRlcm4gY29uc3QgX2hfdmFs
IF9faHVnZV92YWw7CiMgMzcgIi91c3IvaW5jbHVkZS9pc28vbWF0aF9pc28uaCIgMyA0CmV4dGVy
biBkb3VibGUgYWNvcyAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBhc2luIChkb3VibGUpOwpleHRl
cm4gZG91YmxlIGF0YW4gKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgYXRhbjIgKGRvdWJsZSwgZG91
YmxlKTsKZXh0ZXJuIGRvdWJsZSBjb3MgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgc2luIChkb3Vi
bGUpOwpleHRlcm4gZG91YmxlIHRhbiAoZG91YmxlKTsKCmV4dGVybiBkb3VibGUgY29zaCAoZG91
YmxlKTsKZXh0ZXJuIGRvdWJsZSBzaW5oIChkb3VibGUpOwpleHRlcm4gZG91YmxlIHRhbmggKGRv
dWJsZSk7CgpleHRlcm4gZG91YmxlIGV4cCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBmcmV4cCAo
ZG91YmxlLCBpbnQgKik7CmV4dGVybiBkb3VibGUgbGRleHAgKGRvdWJsZSwgaW50KTsKZXh0ZXJu
IGRvdWJsZSBsb2cgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgbG9nMTAgKGRvdWJsZSk7CmV4dGVy
biBkb3VibGUgbW9kZiAoZG91YmxlLCBkb3VibGUgKik7CgpleHRlcm4gZG91YmxlIHBvdyAoZG91
YmxlLCBkb3VibGUpOwpleHRlcm4gZG91YmxlIHNxcnQgKGRvdWJsZSk7CgpleHRlcm4gZG91Ymxl
IGNlaWwgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgZmFicyAoZG91YmxlKTsKZXh0ZXJuIGRvdWJs
ZSBmbG9vciAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBmbW9kIChkb3VibGUsIGRvdWJsZSk7CiMg
OTMgIi91c3IvaW5jbHVkZS9pc28vbWF0aF9pc28uaCIgMyA0Cn0KIyAyNiAiL3Vzci9sb2NhbC9w
cm9kdWN0cy9nY2MvMy4yLjEvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4yLjEv
aW5jbHVkZS9tYXRoLmgiIDIgMyA0CiMgNTMgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4x
L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvbWF0aC5oIiAz
IDQKZXh0ZXJuICJDIiB7CiMgODkgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvbWF0aC5oIiAzIDQKZXh0
ZXJuIGludCBzaWduZ2FtOwoKCgoKCgoKZW51bSB2ZXJzaW9uIHtsaWJtX2llZWUgPSAtMSwgY19p
c3N1ZV80LCBhbnNpXzEsIHN0cmljdF9hbnNpfTsKCgpleHRlcm4gY29uc3QgZW51bSB2ZXJzaW9u
IF9saWJfdmVyc2lvbjsKCgoKCnN0cnVjdCBfX21hdGhfZXhjZXB0aW9uIHsKICAgICAgICBpbnQg
dHlwZTsKICAgICAgICBjaGFyICpuYW1lOwogICAgICAgIGRvdWJsZSBhcmcxOwogICAgICAgIGRv
dWJsZSBhcmcyOwogICAgICAgIGRvdWJsZSByZXR2YWw7Cn07CiMgMTQ1ICIvdXNyL2xvY2FsL3By
b2R1Y3RzL2djYy8zLjIuMS9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjIuMS9p
bmNsdWRlL21hdGguaCIgMyA0CmV4dGVybiBkb3VibGUgZXJmIChkb3VibGUpOwpleHRlcm4gZG91
YmxlIGVyZmMgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgZ2FtbWEgKGRvdWJsZSk7CmV4dGVybiBk
b3VibGUgaHlwb3QgKGRvdWJsZSwgZG91YmxlKTsKZXh0ZXJuIGludCBpc25hbiAoZG91YmxlKTsK
ZXh0ZXJuIGRvdWJsZSBqMCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBqMSAoZG91YmxlKTsKZXh0
ZXJuIGRvdWJsZSBqbiAoaW50LCBkb3VibGUpOwpleHRlcm4gZG91YmxlIGxnYW1tYSAoZG91Ymxl
KTsKZXh0ZXJuIGRvdWJsZSB5MCAoZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSB5MSAoZG91YmxlKTsK
ZXh0ZXJuIGRvdWJsZSB5biAoaW50LCBkb3VibGUpOwojIDE3MiAiL3Vzci9sb2NhbC9wcm9kdWN0
cy9nY2MvMy4yLjEvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4yLjEvaW5jbHVk
ZS9tYXRoLmgiIDMgNApleHRlcm4gZG91YmxlIGFjb3NoIChkb3VibGUpOwpleHRlcm4gZG91Ymxl
IGFzaW5oIChkb3VibGUpOwpleHRlcm4gZG91YmxlIGF0YW5oIChkb3VibGUpOwpleHRlcm4gZG91
YmxlIGNicnQgKGRvdWJsZSk7CmV4dGVybiBkb3VibGUgbG9nYiAoZG91YmxlKTsKZXh0ZXJuIGRv
dWJsZSBuZXh0YWZ0ZXIgKGRvdWJsZSwgZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSByZW1haW5kZXIg
KGRvdWJsZSwgZG91YmxlKTsKZXh0ZXJuIGRvdWJsZSBzY2FsYiAoZG91YmxlLCBkb3VibGUpOwoj
IDE5MiAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvbGliL2djYy1saWIvc3BhcmMtc3Vu
LXNvbGFyaXMyLjgvMy4yLjEvaW5jbHVkZS9tYXRoLmgiIDMgNApleHRlcm4gZG91YmxlIGV4cG0x
IChkb3VibGUpOwpleHRlcm4gaW50IGlsb2diIChkb3VibGUpOwpleHRlcm4gZG91YmxlIGxvZzFw
IChkb3VibGUpOwpleHRlcm4gZG91YmxlIHJpbnQgKGRvdWJsZSk7CiMgMjA4ICIvdXNyL2xvY2Fs
L3Byb2R1Y3RzL2djYy8zLjIuMS9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjIu
MS9pbmNsdWRlL21hdGguaCIgMyA0CmV4dGVybiBpbnQgbWF0aGVyciAoc3RydWN0IF9fbWF0aF9l
eGNlcHRpb24gKik7CgoKCgpleHRlcm4gZG91YmxlIHNpZ25pZmljYW5kIChkb3VibGUpOwoKCgoK
ZXh0ZXJuIGRvdWJsZSBjb3B5c2lnbiAoZG91YmxlLCBkb3VibGUpOwpleHRlcm4gZG91YmxlIHNj
YWxibiAoZG91YmxlLCBpbnQpOwojIDI0MyAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEv
bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4yLjEvaW5jbHVkZS9tYXRoLmgiIDMg
NApleHRlcm4gZmxvYXQgbW9kZmYgKGZsb2F0LCBmbG9hdCAqKTsKCgoKCgoKIyAxICIvdXNyL2xv
Y2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8z
LjIuMS9pbmNsdWRlL2Zsb2F0aW5ncG9pbnQuaCIgMSAzIDQKIyAyMCAiL3Vzci9sb2NhbC9wcm9k
dWN0cy9nY2MvMy4yLjEvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4yLjEvaW5j
bHVkZS9mbG9hdGluZ3BvaW50LmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpZmxvYXRpbmdwb2lu
dC5oCTIuNQk5OS8wNi8yMiBTTUkiCgoKCgojIDEgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMu
Mi4xL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvc3lzL2ll
ZWVmcC5oIiAxIDMgNAojIDE3ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9saWIvZ2Nj
LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjIuMS9pbmNsdWRlL3N5cy9pZWVlZnAuaCIgMyA0
CiNwcmFnbWEgaWRlbnQgIkAoIylpZWVlZnAuaAkyLjggOTkvMTAvMjkiCgoKZXh0ZXJuICJDIiB7
CgoKCgoKCmVudW0gZnBfZGlyZWN0aW9uX3R5cGUgewogICAgICAgIGZwX25lYXJlc3QgPSAwLAog
ICAgICAgIGZwX3RvemVybyA9IDEsCiAgICAgICAgZnBfcG9zaXRpdmUgPSAyLAogICAgICAgIGZw
X25lZ2F0aXZlID0gMwp9OwoKZW51bSBmcF9wcmVjaXNpb25fdHlwZSB7CiAgICAgICAgZnBfZXh0
ZW5kZWQgPSAwLAogICAgICAgIGZwX3NpbmdsZSA9IDEsCiAgICAgICAgZnBfZG91YmxlID0gMiwK
ICAgICAgICBmcF9wcmVjaXNpb25fMyA9IDMKfTsKCmVudW0gZnBfZXhjZXB0aW9uX3R5cGUgewog
ICAgICAgIGZwX2luZXhhY3QgPSAwLAogICAgICAgIGZwX2RpdmlzaW9uID0gMSwKICAgICAgICBm
cF91bmRlcmZsb3cgPSAyLAogICAgICAgIGZwX292ZXJmbG93ID0gMywKICAgICAgICBmcF9pbnZh
bGlkID0gNAp9OwoKZW51bSBmcF90cmFwX2VuYWJsZV90eXBlIHsKICAgICAgICBmcF90cmFwX2lu
ZXhhY3QgPSAwLAogICAgICAgIGZwX3RyYXBfZGl2aXNpb24gPSAxLAogICAgICAgIGZwX3RyYXBf
dW5kZXJmbG93ID0gMiwKICAgICAgICBmcF90cmFwX292ZXJmbG93ID0gMywKICAgICAgICBmcF90
cmFwX2ludmFsaWQgPSA0Cn07CiMgMTMzICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9s
aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjIuMS9pbmNsdWRlL3N5cy9pZWVlZnAu
aCIgMyA0CmVudW0gZnBfY2xhc3NfdHlwZSB7CiAgICAgICAgZnBfemVybyA9IDAsCiAgICAgICAg
ZnBfc3Vibm9ybWFsID0gMSwKICAgICAgICBmcF9ub3JtYWwgPSAyLAogICAgICAgIGZwX2luZmlu
aXR5ID0gMywKICAgICAgICBmcF9xdWlldCA9IDQsCiAgICAgICAgZnBfc2lnbmFsaW5nID0gNQp9
OwoKCn0KIyAyNiAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvbGliL2djYy1saWIvc3Bh
cmMtc3VuLXNvbGFyaXMyLjgvMy4yLjEvaW5jbHVkZS9mbG9hdGluZ3BvaW50LmgiIDIgMyA0CgoK
ZXh0ZXJuICJDIiB7CiMgNjIgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9nY2Mt
bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvZmxvYXRpbmdwb2ludC5oIiAz
IDQKdHlwZWRlZiBpbnQgc2lnZnBlX2NvZGVfdHlwZTsKCnR5cGVkZWYgdm9pZCAoKnNpZ2ZwZV9o
YW5kbGVyX3R5cGUpKCk7CgoKCgoKZXh0ZXJuIHNpZ2ZwZV9oYW5kbGVyX3R5cGUgc2lnZnBlIChz
aWdmcGVfY29kZV90eXBlLCBzaWdmcGVfaGFuZGxlcl90eXBlKTsKCgoKCnR5cGVkZWYgZmxvYXQg
c2luZ2xlOwoKCgp0eXBlZGVmIHVuc2lnbmVkIGV4dGVuZGVkWzNdOwoKCnR5cGVkZWYgbG9uZyBk
b3VibGUgcXVhZHJ1cGxlOwoKdHlwZWRlZiB1bnNpZ25lZCBmcF9leGNlcHRpb25fZmllbGRfdHlw
ZTsKIyA5NCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvbGliL2djYy1saWIvc3BhcmMt
c3VuLXNvbGFyaXMyLjgvMy4yLjEvaW5jbHVkZS9mbG9hdGluZ3BvaW50LmgiIDMgNAp0eXBlZGVm
IGNoYXIgZGVjaW1hbF9zdHJpbmdbNTEyXTsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgZW51
bSBmcF9jbGFzc190eXBlIGZwY2xhc3M7CiAgICAgICAgaW50IHNpZ247CiAgICAgICAgaW50IGV4
cG9uZW50OwogICAgICAgIGRlY2ltYWxfc3RyaW5nIGRzOwoKCiAgICAgICAgaW50IG1vcmU7CgoK
ICAgICAgICBpbnQgbmRpZ2l0czsKCgp9IGRlY2ltYWxfcmVjb3JkOwoKZW51bSBkZWNpbWFsX2Zv
cm0gewogICAgICAgIGZpeGVkX2Zvcm0sCgoKICAgICAgICBmbG9hdGluZ19mb3JtCgp9OwoKdHlw
ZWRlZiBzdHJ1Y3QgewogICAgICAgIGVudW0gZnBfZGlyZWN0aW9uX3R5cGUgcmQ7CgogICAgICAg
IGVudW0gZGVjaW1hbF9mb3JtIGRmOwoKICAgICAgICBpbnQgbmRpZ2l0czsKfSBkZWNpbWFsX21v
ZGU7CgplbnVtIGRlY2ltYWxfc3RyaW5nX2Zvcm0gewogICAgICAgIGludmFsaWRfZm9ybSwKICAg
ICAgICB3aGl0ZXNwYWNlX2Zvcm0sCiAgICAgICAgZml4ZWRfaW50X2Zvcm0sCiAgICAgICAgZml4
ZWRfaW50ZG90X2Zvcm0sCiAgICAgICAgZml4ZWRfZG90ZnJhY19mb3JtLAogICAgICAgIGZpeGVk
X2ludGRvdGZyYWNfZm9ybSwKICAgICAgICBmbG9hdGluZ19pbnRfZm9ybSwKICAgICAgICBmbG9h
dGluZ19pbnRkb3RfZm9ybSwKICAgICAgICBmbG9hdGluZ19kb3RmcmFjX2Zvcm0sCiAgICAgICAg
ZmxvYXRpbmdfaW50ZG90ZnJhY19mb3JtLAogICAgICAgIGluZl9mb3JtLAogICAgICAgIGluZmlu
aXR5X2Zvcm0sCiAgICAgICAgbmFuX2Zvcm0sCiAgICAgICAgbmFuc3RyaW5nX2Zvcm0KfTsKCmV4
dGVybiB2b2lkIHNpbmdsZV90b19kZWNpbWFsIChzaW5nbGUgKiwgZGVjaW1hbF9tb2RlICosIGRl
Y2ltYWxfcmVjb3JkICosIGZwX2V4Y2VwdGlvbl9maWVsZF90eXBlICopOwoKZXh0ZXJuIHZvaWQg
ZG91YmxlX3RvX2RlY2ltYWwgKGRvdWJsZSAqLCBkZWNpbWFsX21vZGUgKiwgZGVjaW1hbF9yZWNv
cmQgKiwgZnBfZXhjZXB0aW9uX2ZpZWxkX3R5cGUgKik7CgpleHRlcm4gdm9pZCBleHRlbmRlZF90
b19kZWNpbWFsIChleHRlbmRlZCAqLCBkZWNpbWFsX21vZGUgKiwgZGVjaW1hbF9yZWNvcmQgKiwg
ZnBfZXhjZXB0aW9uX2ZpZWxkX3R5cGUgKik7CgpleHRlcm4gdm9pZCBxdWFkcnVwbGVfdG9fZGVj
aW1hbCAocXVhZHJ1cGxlICosIGRlY2ltYWxfbW9kZSAqLCBkZWNpbWFsX3JlY29yZCAqLCBmcF9l
eGNlcHRpb25fZmllbGRfdHlwZSAqKTsKCgpleHRlcm4gdm9pZCBkZWNpbWFsX3RvX3NpbmdsZSAo
c2luZ2xlICosIGRlY2ltYWxfbW9kZSAqLCBkZWNpbWFsX3JlY29yZCAqLCBmcF9leGNlcHRpb25f
ZmllbGRfdHlwZSAqKTsKCmV4dGVybiB2b2lkIGRlY2ltYWxfdG9fZG91YmxlIChkb3VibGUgKiwg
ZGVjaW1hbF9tb2RlICosIGRlY2ltYWxfcmVjb3JkICosIGZwX2V4Y2VwdGlvbl9maWVsZF90eXBl
ICopOwoKZXh0ZXJuIHZvaWQgZGVjaW1hbF90b19leHRlbmRlZCAoZXh0ZW5kZWQgKiwgZGVjaW1h
bF9tb2RlICosIGRlY2ltYWxfcmVjb3JkICosIGZwX2V4Y2VwdGlvbl9maWVsZF90eXBlICopOwoK
ZXh0ZXJuIHZvaWQgZGVjaW1hbF90b19xdWFkcnVwbGUgKHF1YWRydXBsZSAqLCBkZWNpbWFsX21v
ZGUgKiwgZGVjaW1hbF9yZWNvcmQgKiwgZnBfZXhjZXB0aW9uX2ZpZWxkX3R5cGUgKik7CgoKZXh0
ZXJuIHZvaWQgc3RyaW5nX3RvX2RlY2ltYWwgKGNoYXIgKiosIGludCwgaW50LCBkZWNpbWFsX3Jl
Y29yZCAqLCBlbnVtIGRlY2ltYWxfc3RyaW5nX2Zvcm0gKiwgY2hhciAqKik7CgpleHRlcm4gdm9p
ZCBmdW5jX3RvX2RlY2ltYWwgKGNoYXIgKiosIGludCwgaW50LCBkZWNpbWFsX3JlY29yZCAqLCBl
bnVtIGRlY2ltYWxfc3RyaW5nX2Zvcm0gKiwgY2hhciAqKiwgaW50ICgqKSh2b2lkKSwgaW50ICos
IGludCAoKikoaW50KSk7CgoKZXh0ZXJuIHZvaWQgZmlsZV90b19kZWNpbWFsIChjaGFyICoqLCBp
bnQsIGludCwgZGVjaW1hbF9yZWNvcmQgKiwgZW51bSBkZWNpbWFsX3N0cmluZ19mb3JtICosIGNo
YXIgKiosIEZJTEUgKiwgaW50ICopOwoKCgpleHRlcm4gY2hhciAqc2Vjb252ZXJ0IChzaW5nbGUg
KiwgaW50LCBpbnQgKiwgaW50ICosIGNoYXIgKik7CmV4dGVybiBjaGFyICpzZmNvbnZlcnQgKHNp
bmdsZSAqLCBpbnQsIGludCAqLCBpbnQgKiwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnNnY29udmVy
dCAoc2luZ2xlICosIGludCwgaW50LCBjaGFyICopOwpleHRlcm4gY2hhciAqZWNvbnZlcnQgKGRv
dWJsZSwgaW50LCBpbnQgKiwgaW50ICosIGNoYXIgKik7CmV4dGVybiBjaGFyICpmY29udmVydCAo
ZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKiwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKmdjb252ZXJ0
IChkb3VibGUsIGludCwgaW50LCBjaGFyICopOwpleHRlcm4gY2hhciAqcWVjb252ZXJ0IChxdWFk
cnVwbGUgKiwgaW50LCBpbnQgKiwgaW50ICosIGNoYXIgKik7CmV4dGVybiBjaGFyICpxZmNvbnZl
cnQgKHF1YWRydXBsZSAqLCBpbnQsIGludCAqLCBpbnQgKiwgY2hhciAqKTsKZXh0ZXJuIGNoYXIg
KnFnY29udmVydCAocXVhZHJ1cGxlICosIGludCwgaW50LCBjaGFyICopOwoKZXh0ZXJuIGNoYXIg
KmVjdnQgKGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICopOwpleHRlcm4gY2hhciAqZmN2dCAoZG91
YmxlLCBpbnQsIGludCAqLCBpbnQgKik7CmV4dGVybiBjaGFyICpnY3Z0IChkb3VibGUsIGludCwg
Y2hhciAqKTsKCgoKCgpleHRlcm4gZG91YmxlIGF0b2YgKGNvbnN0IGNoYXIgKik7CmV4dGVybiBk
b3VibGUgc3RydG9kIChjb25zdCBjaGFyICosIGNoYXIgKiopOwoKCn0KIyAyNTEgIi91c3IvbG9j
YWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMu
Mi4xL2luY2x1ZGUvbWF0aC5oIiAyIDMgNAoKCgoKCn0KIyA1MiAiL3Vzci9sb2NhbC9wcm9kdWN0
cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvY21hdGgiIDIgMwojIDc5ICIvdXNyL2xvY2Fs
L3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9jbWF0aCIgMwpuYW1lc3BhY2Ug
c3RkCnsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIF9fY21hdGhfcG93ZXIoX1RwLCB1
bnNpZ25lZCBpbnQpOwoKICBpbmxpbmUgZG91YmxlCiAgYWJzKGRvdWJsZSBfX3gpCiAgeyByZXR1
cm4gX19idWlsdGluX2ZhYnMoX194KTsgfQoKICBpbmxpbmUgZmxvYXQKICBhYnMoZmxvYXQgX194
KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJs
ZQogIGFicyhsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnNsKF9feCk7
IH0KCgoKCgogIGlubGluZSBmbG9hdAogIGFjb3MoZmxvYXQgX194KSB7IHJldHVybiA6OmFjb3Mo
c3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQoKCiAgdXNpbmcgOjphY29zOwoKCgoKCiAgaW5s
aW5lIGxvbmcgZG91YmxlCiAgYWNvcyhsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YWNvcyhz
dGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9CgoKICB1c2luZyA6OmFzaW47CgoKCgoKICBpbmxp
bmUgZmxvYXQKICBhc2luKGZsb2F0IF9feCkgeyByZXR1cm4gOjphc2luKHN0YXRpY19jYXN0PGRv
dWJsZT4oX194KSk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBhc2luKGxvbmcgZG91
YmxlIF9feCkgeyByZXR1cm4gOjphc2luKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0KCgog
IHVzaW5nIDo6YXRhbjsKCgoKCgogIGlubGluZSBmbG9hdAogIGF0YW4oZmxvYXQgX194KSB7IHJl
dHVybiA6OmF0YW4oc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQoKCgoKCgogIGlubGluZSBs
b25nIGRvdWJsZQogIGF0YW4obG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmF0YW4oc3RhdGlj
X2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQoKCiAgdXNpbmcgOjphdGFuMjsKCgoKCgogIGlubGluZSBm
bG9hdAogIGF0YW4yKGZsb2F0IF9feSwgZmxvYXQgX194KQogIHsgcmV0dXJuIDo6YXRhbjIoc3Rh
dGljX2Nhc3Q8ZG91YmxlPihfX3kpLCBzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9CgoKCgoK
CiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXRhbjIobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJs
ZSBfX3gpCiAgeyByZXR1cm4gOjphdGFuMihzdGF0aWNfY2FzdDxkb3VibGU+KF9feSksIHN0YXRp
Y19jYXN0PGRvdWJsZT4oX194KSk7IH0KCgogIHVzaW5nIDo6Y2VpbDsKCgoKCgogIGlubGluZSBm
bG9hdAogIGNlaWwoZmxvYXQgX194KSB7IHJldHVybiA6OmNlaWwoc3RhdGljX2Nhc3Q8ZG91Ymxl
PihfX3gpKTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGNlaWwobG9uZyBkb3VibGUg
X194KSB7IHJldHVybiA6OmNlaWwoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQoKCiAgdXNp
bmcgOjpjb3M7CgogIGlubGluZSBmbG9hdAogIGNvcyhmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19i
dWlsdGluX2Nvc2YoX194KTsgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBjb3MobG9uZyBkb3Vi
bGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9jb3NsKF9feCk7IH0KCiAgdXNpbmcgOjpjb3No
OwoKCgoKCiAgaW5saW5lIGZsb2F0CiAgY29zaChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6Y29zaChz
dGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAg
Y29zaChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Y29zaChzdGF0aWNfY2FzdDxkb3VibGU+
KF9feCkpOyB9CgoKICB1c2luZyA6OmV4cDsKCgoKCgogIGlubGluZSBmbG9hdAogIGV4cChmbG9h
dCBfX3gpIHsgcmV0dXJuIDo6ZXhwKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0KCgoKCgoK
ICBpbmxpbmUgbG9uZyBkb3VibGUKICBleHAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmV4
cChzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9CgoKICB1c2luZyA6OmZhYnM7CgogIGlubGlu
ZSBmbG9hdAogIGZhYnMoZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gp
OyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGZhYnMobG9uZyBkb3VibGUgX194KQogIHsgcmV0
dXJuIF9fYnVpbHRpbl9mYWJzbChfX3gpOyB9CgogIHVzaW5nIDo6Zmxvb3I7CgoKCgoKICBpbmxp
bmUgZmxvYXQKICBmbG9vcihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6Zmxvb3Ioc3RhdGljX2Nhc3Q8
ZG91YmxlPihfX3gpKTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGZsb29yKGxvbmcg
ZG91YmxlIF9feCkgeyByZXR1cm4gOjpmbG9vcihzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9
CgoKICB1c2luZyA6OmZtb2Q7CgoKCgoKICBpbmxpbmUgZmxvYXQKICBmbW9kKGZsb2F0IF9feCwg
ZmxvYXQgX195KQogIHsgcmV0dXJuIDo6Zm1vZChzdGF0aWNfY2FzdDxkb3VibGU+KF9feCksIHN0
YXRpY19jYXN0PGRvdWJsZT4oX195KSk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBm
bW9kKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KQogIHsgcmV0dXJuIDo6Zm1vZChz
dGF0aWNfY2FzdDxkb3VibGU+KF9feCksIHN0YXRpY19jYXN0PGRvdWJsZT4oX195KSk7IH0KCgog
IHVzaW5nIDo6ZnJleHA7CgoKCgoKICBpbmxpbmUgZmxvYXQKICBmcmV4cChmbG9hdCBfX3gsIGlu
dCogX19leHApIHsgcmV0dXJuIDo6ZnJleHAoX194LCBfX2V4cCk7IH0KCgoKCgoKICBpbmxpbmUg
bG9uZyBkb3VibGUKICBmcmV4cChsb25nIGRvdWJsZSBfX3gsIGludCogX19leHApCiAgeyByZXR1
cm4gOjpmcmV4cChzdGF0aWNfY2FzdDxkb3VibGU+KF9feCksIF9fZXhwKTsgfQoKCiAgdXNpbmcg
OjpsZGV4cDsKCgoKCgogIGlubGluZSBmbG9hdAogIGxkZXhwKGZsb2F0IF9feCwgaW50IF9fZXhw
KQogIHsgcmV0dXJuIDo6bGRleHAoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpLCBfX2V4cCk7IH0K
CgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBsZGV4cChsb25nIGRvdWJsZSBfX3gsIGludCBf
X2V4cCkKICB7IHJldHVybiA6OmxkZXhwKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSwgX19leHAp
OyB9CgoKICB1c2luZyA6OmxvZzsKCgoKCgogIGlubGluZSBmbG9hdCBsb2coZmxvYXQgX194KQog
IHsgcmV0dXJuIDo6bG9nKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0KCgoKCgoKICBpbmxp
bmUgbG9uZyBkb3VibGUKICBsb2cobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmxvZyhzdGF0
aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9CgoKICB1c2luZyA6OmxvZzEwOwoKCgoKCiAgaW5saW5l
IGZsb2F0CiAgbG9nMTAoZmxvYXQgX194KSB7IHJldHVybiA6OmxvZzEwKHN0YXRpY19jYXN0PGRv
dWJsZT4oX194KSk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBsb2cxMChsb25nIGRv
dWJsZSBfX3gpIHsgcmV0dXJuIDo6bG9nMTAoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQoK
CiAgdXNpbmcgOjptb2RmOwoKCiAgaW5saW5lIGZsb2F0CiAgbW9kZihmbG9hdCBfX3gsIGZsb2F0
KiBfX2lwdHIpIHsgcmV0dXJuIDo6bW9kZmYoX194LCBfX2lwdHIpOyB9CiMgMzc4ICIvdXNyL2xv
Y2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9jbWF0aCIgMwogIGlubGlu
ZSBsb25nIGRvdWJsZQogIG1vZGYobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSogX19pcHRy
KQogIHsKICAgIGRvdWJsZSBfX3RtcDsKICAgIGRvdWJsZSBfX3JlcyA9IDo6bW9kZihzdGF0aWNf
Y2FzdDxkb3VibGU+KF9feCksICZfX3RtcCk7CiAgICAqIF9faXB0ciA9IHN0YXRpY19jYXN0PGxv
bmcgZG91YmxlPihfX3RtcCk7CiAgICByZXR1cm4gX19yZXM7CiAgfQoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcAogICAgX19wb3dfaGVscGVyKF9UcCBfX3gsIGludCBf
X24pCiAgICB7CiAgICAgIHJldHVybiBfX24gPCAwCiAgICAgICAgPyBfVHAoMSkvX19jbWF0aF9w
b3dlcihfX3gsIC1fX24pCiAgICAgICAgOiBfX2NtYXRoX3Bvd2VyKF9feCwgX19uKTsKICAgIH0K
CiAgdXNpbmcgOjpwb3c7CgoKCgoKICBpbmxpbmUgZmxvYXQKICBwb3coZmxvYXQgX194LCBmbG9h
dCBfX3kpCiAgeyByZXR1cm4gOjpwb3coc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpLCBzdGF0aWNf
Y2FzdDxkb3VibGU+KF9feSkpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgcG93KGxv
bmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KQogIHsgcmV0dXJuIDo6cG93KHN0YXRpY19j
YXN0PGRvdWJsZT4oX194KSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3kpKTsgfQoKCiAgaW5saW5l
IGRvdWJsZQogIHBvdyhkb3VibGUgX194LCBpbnQgX19pKQogIHsgcmV0dXJuIF9fcG93X2hlbHBl
cihfX3gsIF9faSk7IH0KCiAgaW5saW5lIGZsb2F0CiAgcG93KGZsb2F0IF9feCwgaW50IF9fbikK
ICB7IHJldHVybiBfX3Bvd19oZWxwZXIoX194LCBfX24pOyB9CgogIGlubGluZSBsb25nIGRvdWJs
ZQogIHBvdyhsb25nIGRvdWJsZSBfX3gsIGludCBfX24pCiAgeyByZXR1cm4gX19wb3dfaGVscGVy
KF9feCwgX19uKTsgfQoKICB1c2luZyA6OnNpbjsKCiAgaW5saW5lIGZsb2F0CiAgc2luKGZsb2F0
IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fc2luZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRv
dWJsZQogIHNpbihsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX3NpbmwoX194
KTsgfQoKICB1c2luZyA6OnNpbmg7CgoKCgoKICBpbmxpbmUgZmxvYXQKICBzaW5oKGZsb2F0IF9f
eCkgeyByZXR1cm4gOjpzaW5oKHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0KCgoKCgoKICBp
bmxpbmUgbG9uZyBkb3VibGUKICBzaW5oKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpzaW5o
KHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0KCgogIHVzaW5nIDo6c3FydDsKCiAgaW5saW5l
IGZsb2F0CiAgc3FydChmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX3NxcnRmKF9feCk7
IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgc3FydChsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1
cm4gX19idWlsdGluX3NxcnRsKF9feCk7IH0KCiAgdXNpbmcgOjp0YW47CgoKCgoKICBpbmxpbmUg
ZmxvYXQKICB0YW4oZmxvYXQgX194KSB7IHJldHVybiA6OnRhbihzdGF0aWNfY2FzdDxkb3VibGU+
KF9feCkpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgdGFuKGxvbmcgZG91YmxlIF9f
eCkgeyByZXR1cm4gOjp0YW4oc3RhdGljX2Nhc3Q8ZG91YmxlPihfX3gpKTsgfQoKCiAgdXNpbmcg
Ojp0YW5oOwoKCgoKCiAgaW5saW5lIGZsb2F0CiAgdGFuaChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6
dGFuaChzdGF0aWNfY2FzdDxkb3VibGU+KF9feCkpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91
YmxlCiAgdGFuaChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6dGFuaChzdGF0aWNfY2FzdDxk
b3VibGU+KF9feCkpOyB9Cgp9CiMgNjU0ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9p
bmNsdWRlL2MrKy8zLjIuMS9jbWF0aCIgMwojIDEgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMu
Mi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvY21hdGgudGNjIiAxIDMKIyAzNSAiL3Vzci9sb2Nh
bC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9jbWF0aC50Y2MiIDMK
bmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgX1RwCiAgICBfX2Nt
YXRoX3Bvd2VyKF9UcCBfX3gsIHVuc2lnbmVkIGludCBfX24pCiAgICB7CiAgICAgIF9UcCBfX3kg
PSBfX24gJSAyID8gX194IDogMTsKCiAgICAgIHdoaWxlIChfX24gPj49IDEpCiAgICAgICAgewog
ICAgICAgICAgX194ID0gX194ICogX194OwogICAgICAgICAgaWYgKF9fbiAlIDIpCiAgICAgICAg
ICAgIF9feSA9IF9feSAqIF9feDsKICAgICAgICB9CgogICAgICByZXR1cm4gX195OwogICAgfQp9
CiMgNjU1ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9j
bWF0aCIgMiAzCiMgNDIgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysr
LzMuMi4xL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoKIyAxICIvdXNyL2xvY2FsL3Byb2R1
Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9saW1pdHMiIDEgMwojIDQ3ICIvdXNyL2xv
Y2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9saW1pdHMiIDMKCiMgMSAi
L3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvc3BhcmMtc3Vu
LXNvbGFyaXMyLjgvYml0cy9jcHVfbGltaXRzLmgiIDEgMwojIDQ5ICIvdXNyL2xvY2FsL3Byb2R1
Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9saW1pdHMiIDIgMwojIDg4NyAiL3Vzci9s
b2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvbGltaXRzIiAzCm5hbWVz
cGFjZSBzdGQKewogIGVudW0gZmxvYXRfcm91bmRfc3R5bGUKICB7CiAgICByb3VuZF9pbmRldGVy
bWluYXRlID0gLTEsCiAgICByb3VuZF90b3dhcmRfemVybyA9IDAsCiAgICByb3VuZF90b19uZWFy
ZXN0ID0gMSwKICAgIHJvdW5kX3Rvd2FyZF9pbmZpbml0eSA9IDIsCiAgICByb3VuZF90b3dhcmRf
bmVnX2luZmluaXR5ID0gMwogIH07CgogIGVudW0gZmxvYXRfZGVub3JtX3N0eWxlCiAgewogICAg
ZGVub3JtX2luZGV0ZXJtaW5hdGUgPSAtMSwKICAgIGRlbm9ybV9hYnNlbnQgPSAwLAogICAgZGVu
b3JtX3ByZXNlbnQgPSAxCiAgfTsKCgoKCiAgc3RydWN0IF9fbnVtZXJpY19saW1pdHNfYmFzZQog
IHsKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gZmFsc2U7CgogICAgc3Rh
dGljIGNvbnN0IGludCBkaWdpdHMgPSAwOwogICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9
IDA7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4
YWN0ID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMDsKCiAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv
bmVudDEwID0gMDsKICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05h
TiA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxz
ZTsKICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9y
bV9hYnNlbnQ7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsK
CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2JvdW5kZWQgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVs
byA9IGZhbHNlOwoKICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICBzdGF0
aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBm
bG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogIH07Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0cyA6IHB1Ymxp
YyBfX251bWVyaWNfbGltaXRzX2Jhc2UKICAgIHsKICAgICAgc3RhdGljIF9UcCBtaW4oKSB0aHJv
dygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCBtYXgo
KSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9U
cCBlcHNpbG9uKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAg
IHN0YXRpYyBfVHAgcm91bmRfZXJyb3IoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9U
cD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCBpbmZpbml0eSgpIHRocm93KCkgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIHF1aWV0X05hTigpIHRocm93KCkg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIHNpZ25hbGlu
Z19OYU4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3Rh
dGljIF9UcCBkZW5vcm1fbWluKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDAp
OyB9CiAgICB9OwoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxib29s
PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7Cgog
ICAgICBzdGF0aWMgYm9vbCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9Cgog
ICAgICBzdGF0aWMgYm9vbCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRydWU7IH0KCiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBk
aWdpdHMxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0g
MjsKICAgICAgc3RhdGljIGJvb2wgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFs
c2U7IH0KICAgICAgc3RhdGljIGJvb2wgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIGZhbHNlOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29u
c3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u
ZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNv
bnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMg
Ym9vbCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3Rh
dGljIGJvb2wgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAg
ICBzdGF0aWMgYm9vbCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxz
ZTsgfQogICAgICBzdGF0aWMgYm9vbCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy
biBmYWxzZTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCgoKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRy
YXBzID0gdHJ1ZQogICAgICAgICAgICAgICB8fCB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5k
X3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKCgogIHRlbXBs
YXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxjaGFyPgogICAgewogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgY2hhciBtaW4o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIChjaGFyKSgtMTI3IC0gMSk7IH0KICAgICAgc3RhdGlj
IGNoYXIgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoY2hhcikxMjc7IH0KCiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNzsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMx
MCA9IDI7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAg
ICBzdGF0aWMgY2hhciBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7IH0K
ICAgICAgc3RhdGljIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNo
YXIoKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBz
dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEw
ID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBm
bG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNoYXIg
aW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQogICAgICBzdGF0aWMg
Y2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQogICAgICBz
dGF0aWMgY2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7
IH0KICAgICAgc3RhdGljIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Y2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1
OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVm
b3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9z
dHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxMDcxICIvdXNyL2xvY2FsL3Byb2R1
Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAg
ICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8c2lnbmVkIGNoYXI+CiAgICB7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBzaWduZWQgY2hh
ciBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgtMTI3IC0gMSk7IH0KICAgICAgc3RhdGlj
IHNpZ25lZCBjaGFyIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMTI3OyB9CgogICAgICBz
dGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDc7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz
MTAgPSAyOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAg
ICAgc3RhdGljIHNpZ25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7
IH0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7
IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29u
c3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u
ZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNv
bnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMg
c2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcXVpZXRfTmFOKCkg
dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KICAg
ICAgc3RhdGljIHNpZ25lZCBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNo
YXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVk
IGNoYXI+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFw
cyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3Vu
ZF90b3dhcmRfemVybzsKICAgIH07CiMgMTEyOCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4y
LjEvaW5jbHVkZS9jKysvMy4yLjEvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51
bWVyaWNfbGltaXRzPHVuc2lnbmVkIGNoYXI+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBt
YXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgxMjcgKiAyICsgMSk7IH0KCiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgZGlnaXRzID0gODsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9
IDI7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAg
c3RhdGljIHVuc2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsg
fQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwog
ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNv
bnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv
bmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGlj
IHVuc2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHF1aWV0
X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o
MCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3Rh
dGljIHVuc2lnbmVkIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRp
YyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5l
c3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSBy
b3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+
CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8d2NoYXJfdD4KICAgIHsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHdjaGFyX3QgbWlu
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAod2NoYXJfdCkoLTIxNDc0ODM2NDdMIC0gMSk7IH0K
ICAgICAgc3RhdGljIHdjaGFyX3QgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAod2NoYXJf
dCkyMTQ3NDgzNjQ3TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAg
ICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0
cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgd2NoYXJfdCBlcHNpbG9uKCkgdGhy
b3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHJvdW5kX2Vycm9y
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1p
bl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAw
OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4g
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVu
b3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFs
c2U7CgogICAgICBzdGF0aWMgd2NoYXJfdCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1
cm4gd2NoYXJfdCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHF1aWV0X05hTigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gd2NoYXJfdCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHNpZ25hbGlu
Z19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAgICBzdGF0aWMg
d2NoYXJfdCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0K
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
bW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRp
YyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJv
OwogICAgfTsKIyAxMjQxICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2Mr
Ky8zLjIuMS9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8
c2hvcnQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1
ZTsKCiAgICAgIHN0YXRpYyBzaG9ydCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgtMzI3
NjcgLSAxKTsgfQogICAgICBzdGF0aWMgc2hvcnQgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVy
biAzMjc2NzsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAxNTsKICAgICAgc3Rh
dGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3Np
Z25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgc2hvcnQgZXBzaWxvbigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgc2hvcnQgcm91bmRfZXJyb3IoKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50
ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkg
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAg
IHN0YXRpYyBzaG9ydCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsg
fQogICAgICBzdGF0aWMgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBz
aG9ydCgpOyB9CiAgICAgIHN0YXRpYyBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiBzaG9ydCgpOyB9CiAgICAgIHN0YXRpYyBzaG9ydCBkZW5vcm1fbWluKCkgdGhy
b3coKQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRp
YyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5l
c3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSBy
b3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxMjk4ICIvdXNyL2xvY2Fs
L3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9saW1pdHMiIDMKICB0ZW1wbGF0
ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hvcnQ+CiAgICB7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1
bnNpZ25lZCBzaG9ydCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3Rh
dGljIHVuc2lnbmVkIHNob3J0IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKDMyNzY3ICog
MiArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDE2OwogICAgICBzdGF0
aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2ln
bmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZXBzaWxvbigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgcm91
bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25l
bnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAg
c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1
aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05h
TiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5v
cm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xv
c3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbmZpbml0eSgpIHRocm93
KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAg
IHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQg
c2hvcnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBkZW5vcm1f
bWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4o
MCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJk
X3plcm87CiAgICB9OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0
czxpbnQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1
ZTsKCiAgICAgIHN0YXRpYyBpbnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoaW50KSgt
MjE0NzQ4MzY0N0wgLSAxKTsgfQogICAgICBzdGF0aWMgaW50IG1heCgpIHRocm93KCkKICAgICAg
eyByZXR1cm4gKGludCkyMTQ3NDgzNjQ3TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdp
dHMgPSAzMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgaW50IGVwc2ls
b24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIGludCByb3VuZF9l
cnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEw
ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0
aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRf
TmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0g
ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9
IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9
IGZhbHNlOwoKICAgICAgc3RhdGljIGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50IHF1aWV0X05hTigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBzdGF0aWMg
aW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dD4oMCk7IH0KICAgICAgc3RhdGljIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p
ZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBj
b25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3Nf
YmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3Vu
ZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxNDEwICIvdXNyL2xvY2FsL3By
b2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+
CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50PgogICAgewogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWdu
ZWQgaW50IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgICAgc3RhdGlj
IHVuc2lnbmVkIGludCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICh1bnNpZ25lZCkoMjE0
NzQ4MzY0N0wgKiAyVSArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMy
OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVn
ZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGVw
c2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVk
IGludCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3Rh
dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1p
bl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAw
OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu
YWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUg
aGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19k
ZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBpbmZpbml0eSgp
IHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQog
ICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQg
aW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGludD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBkZW5vcm1fbWluKCkg
dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9Cgog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k
dWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwog
ICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZz4K
ICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAg
ICAgc3RhdGljIGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoLTIxNDc0ODM2NDdM
IC0gMSk7IH0KICAgICAgc3RhdGljIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAy
MTQ3NDgzNjQ3TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAgICAg
c3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3co
KQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVu
dCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBz
dGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2Vu
dDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAg
ICBzdGF0aWMgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8bG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBzaWdu
YWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsg
fQogICAgICBzdGF0aWMgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDxsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9y
ZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5
bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTUyMiAiL3Vzci9sb2NhbC9wcm9kdWN0
cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAg
c3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+CiAgICB7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBs
b25nIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWdu
ZWQgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgyMTQ3NDgzNjQ3TCAqIDJVICsg
MSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzI7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgZGlnaXRzMTAgPSA5OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQg
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVwc2lsb24oKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgcm91bmRfZXJy
b3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9
IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGlj
IGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05h
TiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBk
ZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBm
YWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAgICBzdGF0aWMg
dW5zaWduZWQgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNpZ25h
bGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
bmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CgogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0g
dHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBm
bG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsK
CgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZyBsb25nPgog
ICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAg
ICBzdGF0aWMgbG9uZyBsb25nIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKC05MjIzMzcy
MDM2ODU0Nzc1ODA3TEwgLSAxKTsgfQogICAgICBzdGF0aWMgbG9uZyBsb25nIG1heCgpIHRocm93
KCkKICAgICAgeyByZXR1cm4gOTIyMzM3MjAzNjg1NDc3NTgwN0xMOyB9CgogICAgICBzdGF0aWMg
Y29uc3QgaW50IGRpZ2l0cyA9IDYzOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0g
MTg7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBz
dGF0aWMgbG9uZyBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAg
ICAgc3RhdGljIGxvbmcgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
MDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0
aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0g
MDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9h
dF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGxvbmcgbG9u
ZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25n
PigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBsb25nIHF1aWV0X05hTigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBs
b25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxv
bmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3co
KQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CgogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1
ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9h
dF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAx
NjM0ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9saW1p
dHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9u
ZyBsb25nPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRy
dWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG1pbigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG1heCgpIHRocm93
KCkKICAgICAgeyByZXR1cm4gKDkyMjMzNzIwMzY4NTQ3NzU4MDdMTCAqIDJVTEwgKyAxKTsgfQoK
ICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA2NDsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBkaWdpdHMxMCA9IDE5OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRp
eCA9IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZXBzaWxvbigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHJvdW5k
X2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3Qg
aW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50
MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWll
dF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4g
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3Jt
ID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3Nz
ID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGluZmluaXR5KCkgdGhy
b3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9
CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0
YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMg
dW5zaWduZWQgbG9uZyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQg
PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0
aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0
eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKCgoKCgogIHRlbXBs
YXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxmbG9hdD4KICAgIHsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGZsb2F0IG1p
bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4xNzU0OTQzNWUtMzhGOyB9CiAgICAgIHN0YXRp
YyBmbG9hdCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDMuNDAyODIzNDdlKzM4RjsgfQoK
ICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAyNDsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBkaWdpdHMxMCA9IDY7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRp
eCA9IDI7CiAgICAgIHN0YXRpYyBmbG9hdCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVy
biAxLjE5MjA5MjkwZS0wN0Y7IH0KICAgICAgc3RhdGljIGZsb2F0IHJvdW5kX2Vycm9yKCkgdGhy
b3coKQogICAgICB7IHJldHVybiAxLjBGOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l
eHBvbmVudCA9IC0xMjU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAt
Mzc7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTI4OwogICAgICBzdGF0
aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMzg7CgogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0
X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0g
PSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3Mg
PSBmYWxzZTsKCiAgICAgIHN0YXRpYyBmbG9hdCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gMC4wRjsgfQogICAgICBzdGF0aWMgZmxvYXQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiAwLjBGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBzaWduYWxpbmdfTmFOKCkgdGhy
b3coKQogICAgICB7IHJldHVybiAwLjBGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBkZW5vcm1fbWlu
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBGOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9
IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
dGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9z
dHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxNzY1ICIvdXNy
L2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9saW1pdHMiIDMKICB0
ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8ZG91YmxlPgogICAgewogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgZG91
YmxlIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDg7
IH0KICAgICAgc3RhdGljIGRvdWJsZSBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuNzk3
NjkzMTM0ODYyMzE1N2UrMzA4OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDUz
OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTU7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVn
ZXIgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAg
ICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBkb3VibGUgZXBzaWxv
bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMi4yMjA0NDYwNDkyNTAzMTMxZS0xNjsgfQogICAg
ICBzdGF0aWMgZG91YmxlIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjA7
IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gLTEwMjE7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtMzA3OwogICAgICBzdGF0aWMgY29uc3Qg
aW50IG1heF9leHBvbmVudCA9IDEwMjQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u
ZW50MTAgPSAzMDg7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPQogICAgICAgICAgICAgIGRlbm9y
bV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNl
OwoKICAgICAgc3RhdGljIGRvdWJsZSBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4g
MC4wOyB9CiAgICAgIHN0YXRpYyBkb3VibGUgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJl
dHVybiAwLjA7IH0KICAgICAgc3RhdGljIGRvdWJsZSBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAwLjA7IH0KICAgICAgc3RhdGljIGRvdWJsZSBkZW5vcm1fbWluKCkgdGhy
b3coKQogICAgICB7IHJldHVybiAwLjA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ll
YzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVz
c19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJv
dW5kX3N0eWxlID0KICAgICAgICAgICAgICByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTg0
NCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvbGltaXRz
IiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPgog
ICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAg
ICBzdGF0aWMgbG9uZyBkb3VibGUgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAzLjM2MjEw
MzE0MzExMjA5MzUwNjI2MjY3NzgxNzMyMTc1MjYwM0UtNDkzMkw7IH0KICAgICAgc3RhdGljIGxv
bmcgZG91YmxlIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4xODk3MzE0OTUzNTcyMzE3
NjUwODU3NTkzMjY2MjgwMDcwMTZFKzQ5MzJMOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRp
Z2l0cyA9IDExMzsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDMzOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0g
ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgbG9u
ZyBkb3VibGUgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS45MjU5Mjk5NDQzODcy
MzU4NTMwNTU5Nzc5NDI1ODQ5MjczMTlFLTM0TDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUg
cm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMEw7IH0KCiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gLTE2MzgxOwogICAgICBzdGF0aWMgY29uc3QgaW50
IG1pbl9leHBvbmVudDEwID0gLTQ5MzE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u
ZW50ID0gMTYzODQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSA0OTMy
OwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPQogICAgICAgICAgICAgICAgZmFsc2U7CiAgICAgIHN0
YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9CiAgICAgICAgICAgICAg
ICBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3Mg
PQogICAgICAgICAgICAgICAgZmFsc2U7CgogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgaW5maW5p
dHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEw7IH0KICAgICAgc3RhdGljIGxvbmcgZG91
YmxlIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wTDsgfQogICAgICBzdGF0
aWMgbG9uZyBkb3VibGUgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4w
TDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgZGVub3JtX21pbigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gMC4wTDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29s
IHRyYXBzID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUg
PQogICAgICAgIHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxOTI0ICIvdXNyL2xvY2FsL3By
b2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9saW1pdHMiIDMKfQojIDQ0ICIvdXNy
L2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2xvY2FsZV9m
YWNldHMudGNjIiAyIDMKCiMgMSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVk
ZS9jKysvMy4yLjEvdHlwZWluZm8iIDEgMwojIDQwICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8z
LjIuMS9pbmNsdWRlL2MrKy8zLjIuMS90eXBlaW5mbyIgMwpleHRlcm4gIkMrKyIgewoKbmFtZXNw
YWNlIF9fY3h4YWJpdjEKewogIGNsYXNzIF9fY2xhc3NfdHlwZV9pbmZvOwp9CiMgNTUgIi91c3Iv
bG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL3R5cGVpbmZvIiAzCm5h
bWVzcGFjZSBzdGQKewoKCgogIGNsYXNzIHR5cGVfaW5mbwogIHsKICBwdWJsaWM6CgoKCgogICAg
dmlydHVhbCB+dHlwZV9pbmZvKCk7CgogIHByaXZhdGU6CgogICAgdHlwZV9pbmZvJiBvcGVyYXRv
cj0oY29uc3QgdHlwZV9pbmZvJik7CiAgICB0eXBlX2luZm8oY29uc3QgdHlwZV9pbmZvJik7Cgog
IHByb3RlY3RlZDoKICAgIGNvbnN0IGNoYXIgKl9fbmFtZTsKCiAgcHJvdGVjdGVkOgogICAgZXhw
bGljaXQgdHlwZV9pbmZvKGNvbnN0IGNoYXIgKl9fbik6IF9fbmFtZShfX24pIHsgfQoKICBwdWJs
aWM6CgoKCiAgICBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZTsg
fQojIDk4ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS90
eXBlaW5mbyIgMwogICAgYm9vbCBiZWZvcmUoY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QK
ICAgIHsgcmV0dXJuIF9fbmFtZSA8IF9fYXJnLl9fbmFtZTsgfQogICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0CiAgICB7IHJldHVybiBfX25hbWUgPT0gX19h
cmcuX19uYW1lOyB9CgogICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHR5cGVfaW5mbyYgX19hcmcp
IGNvbnN0CiAgICB7IHJldHVybiAhb3BlcmF0b3I9PShfX2FyZyk7IH0KCgogIHB1YmxpYzoKCiAg
ICB2aXJ0dWFsIGJvb2wgX19pc19wb2ludGVyX3AoKSBjb25zdDsKCiAgICB2aXJ0dWFsIGJvb2wg
X19pc19mdW5jdGlvbl9wKCkgY29uc3Q7CgoKCgoKCgogICAgdmlydHVhbCBib29sIF9fZG9fY2F0
Y2goY29uc3QgdHlwZV9pbmZvICpfX3Rocl90eXBlLCB2b2lkICoqX190aHJfb2JqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgX19vdXRlcikgY29uc3Q7CgoKICAgIHZpcnR1
YWwgYm9vbCBfX2RvX3VwY2FzdChjb25zdCBfX2N4eGFiaXYxOjpfX2NsYXNzX3R5cGVfaW5mbyAq
X190YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKl9fb2JqX3B0cikg
Y29uc3Q7CiAgfTsKCgoKICBjbGFzcyBiYWRfY2FzdCA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAg
cHVibGljOgogICAgYmFkX2Nhc3QoKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfY2Fz
dCgpIHRocm93KCk7CiAgfTsKCgogIGNsYXNzIGJhZF90eXBlaWQgOiBwdWJsaWMgZXhjZXB0aW9u
CiAgewogIHB1YmxpYzoKICAgIGJhZF90eXBlaWQgKCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVh
bCB+YmFkX3R5cGVpZCgpIHRocm93KCk7CiAgfTsKfQoKfQojIDQ2ICIvdXNyL2xvY2FsL3Byb2R1
Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAy
IDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGxvY2Fs
ZQogICAgbG9jYWxlOjpjb21iaW5lKGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3QKICAgIHsK
ICAgICAgX0ltcGwqIF9fdG1wID0gbmV3IF9JbXBsKCpfTV9pbXBsLCAxKTsKICAgICAgX190bXAt
Pl9NX3JlcGxhY2VfZmFjZXQoX19vdGhlci5fTV9pbXBsLCAmX0ZhY2V0OjppZCk7CiAgICAgIHJl
dHVybiBsb2NhbGUoX190bXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJvb2wKICAgIGxvY2FsZTo6b3Bl
cmF0b3IoKShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3Mx
LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgc3RkOjpjb2xsYXRl
PF9DaGFyVD4gX19jb2xsYXRlX3R5cGU7CiAgICAgIGNvbnN0IF9fY29sbGF0ZV90eXBlJiBfX2Nv
bGxhdGUgPSB1c2VfZmFjZXQ8X19jb2xsYXRlX3R5cGU+KCp0aGlzKTsKICAgICAgcmV0dXJuIChf
X2NvbGxhdGUuY29tcGFyZShfX3MxLmRhdGEoKSwgX19zMS5kYXRhKCkgKyBfX3MxLmxlbmd0aCgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fczIuZGF0YSgpLCBfX3MyLmRhdGEo
KSArIF9fczIubGVuZ3RoKCkpIDwgMCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNl
dD4KICAgIGNvbnN0IF9GYWNldCYKICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmIF9fbG9jKQog
ICAgewogICAgICBzaXplX3QgX19pID0gX0ZhY2V0OjppZC5fTV9pZCgpOwogICAgICBsb2NhbGU6
OmZhY2V0KiogX19mYWNldHMgPSBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHM7CiAgICAgIGlmICgh
KF9faSA8IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0c19zaXplICYmIF9fZmFjZXRzW19faV0pKQog
ICAgICAgIF9fdGhyb3dfYmFkX2Nhc3QoKTsKICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IF9GYWNldCY+KCpfX2ZhY2V0c1tfX2ldKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zh
Y2V0PgogICAgYm9vbAogICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpIHRocm93KCkK
ICAgIHsKICAgICAgc2l6ZV90IF9faSA9IF9GYWNldDo6aWQuX01faWQoKTsKICAgICAgbG9jYWxl
OjpmYWNldCoqIF9fZmFjZXRzID0gX19sb2MuX01faW1wbC0+X01fZmFjZXRzOwogICAgICByZXR1
cm4gKF9faSA8IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0c19zaXplICYmIF9fZmFjZXRzW19faV0p
OwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K
ICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0
X2Zsb2F0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAg
ICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZyYgX194dHJj
KSBjb25zdAogICAgewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNf
dHlwZTsKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29u
c3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19s
b2MpOwogICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1
bmN0PF9DaGFyVD4gPihfX2xvYyk7CgoKICAgICAgY29uc3QgY2hhcl90eXBlIF9fcGx1cyA9IF9f
Y3R5cGUud2lkZW4oJysnKTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fbWludXMgPSBfX2N0eXBl
LndpZGVuKCctJyk7CiAgICAgIGludCBfX3BvcyA9IDA7CiAgICAgIGNoYXJfdHlwZSBfX2MgPSAq
X19iZWc7CiAgICAgIGlmICgoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3BsdXMpIHx8IF9fdHJh
aXRzX3R5cGU6OmVxKF9fYywgX19taW51cykpCiAgICAgICAgICAmJiBfX2JlZyAhPSBfX2VuZCkK
ICAgICAgICB7CiAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFyKCkp
OwogICAgICAgICAgKytfX3BvczsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAg
fQoKCiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3plcm8gPSBfX2N0eXBlLndpZGVuKF9TX2F0b21z
W19NX3plcm9dKTsKICAgICAgYm9vbCBfX2ZvdW5kX3plcm8gPSBmYWxzZTsKICAgICAgd2hpbGUg
KF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX196ZXJvKSAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAg
ICB7CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgX19mb3VuZF96ZXJvID0g
dHJ1ZTsKICAgICAgICB9CiAgICAgIGlmIChfX2ZvdW5kX3plcm8pCiAgICAgICAgewogICAgICAg
ICAgX194dHJjICs9IF9TX2F0b21zW19NX3plcm9dOwogICAgICAgICAgKytfX3BvczsKICAgICAg
ICB9CgoKICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX01fRSAtIF9NX3plcm8gKyAxOwogICAg
ICBjaGFyX3R5cGUgX193YXRvbXNbX19sZW5dOwogICAgICBfX2N0eXBlLndpZGVuKF9TX2F0b21z
LCBfU19hdG9tcyArIF9fbGVuLCBfX3dhdG9tcyk7CiAgICAgIGJvb2wgX19mb3VuZF9kZWMgPSBm
YWxzZTsKICAgICAgYm9vbCBfX2ZvdW5kX3NjaSA9IGZhbHNlOwogICAgICBjb25zdCBjaGFyX3R5
cGUgX19kZWMgPSBfX25wLmRlY2ltYWxfcG9pbnQoKTsKCiAgICAgIHN0cmluZyBfX2ZvdW5kX2dy
b3VwaW5nOwogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsK
ICAgICAgYm9vbCBfX2NoZWNrX2dyb3VwaW5nID0gX19ncm91cGluZy5zaXplKCk7CiAgICAgIGlu
dCBfX3NlcF9wb3MgPSAwOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX25wLnRob3Vz
YW5kc19zZXAoKTsKCiAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CgogICAg
ICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3AgPSBfX3RyYWl0c190eXBlOjpmaW5kKF9fd2F0b21z
LCAxMCwgX19jKTsKCgogICAgICAgICAgaWYgKF9fcCAmJiAhX190cmFpdHNfdHlwZTo6ZXEoX19j
LCBjaGFyX3R5cGUoKSkpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgKytfX3BvczsKICAg
ICAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX19wIC0gX193YXRvbXNdOwogICAgICAgICAg
ICAgICsrX19zZXBfcG9zOwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19zZXApCiAg
ICAgICAgICAgICAgICAgICAmJiBfX2NoZWNrX2dyb3VwaW5nICYmICFfX2ZvdW5kX2RlYykKICAg
ICAgICAgICAgewoKCiAgICAgICAgICAgICAgaWYgKF9fc2VwX3BvcykKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxjaGFy
PihfX3NlcF9wb3MpOwogICAgICAgICAgICAgICAgICBfX3NlcF9wb3MgPSAwOwogICAgICAgICAg
ICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jh
c2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9f
ZGVjKSAmJiAhX19mb3VuZF9kZWMpCiAgICAgICAgICAgIHsKCgoKICAgICAgICAgICAgICBpZiAo
X19mb3VuZF9ncm91cGluZy5zaXplKCkpCiAgICAgICAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5n
ICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAgICAgKytfX3BvczsK
ICAgICAgICAgICAgICBfX3h0cmMgKz0gJy4nOwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2Jl
Zyk7CiAgICAgICAgICAgICAgX19mb3VuZF9kZWMgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAg
ICAgICBlbHNlIGlmICgoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3dhdG9tc1tfTV9lXSkKICAg
ICAgICAgICAgICAgICAgICB8fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fd2F0b21zW19NX0Vd
KSkKICAgICAgICAgICAgICAgICAgICYmICFfX2ZvdW5kX3NjaSAmJiBfX3BvcykKICAgICAgICAg
ICAgewoKICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgIF9feHRyYyArPSBfX2N0
eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsK
CgogICAgICAgICAgICAgIGlmIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fcGx1cykKICAgICAg
ICAgICAgICAgICAgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX21pbnVzKSkKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICAgICAgX194
dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICAgICAgICAgX19j
ID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX2ZvdW5kX3Nj
aSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKCiAgICAgICAgICAgIGJyZWFr
OwogICAgICAgIH0KCgoKICAgICAgaWYgKF9fY2hlY2tfZ3JvdXBpbmcgJiYgX19mb3VuZF9ncm91
cGluZy5zaXplKCkpCiAgICAgICAgewoKICAgICAgICAgIGlmICghX19mb3VuZF9kZWMpCiAgICAg
ICAgICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsK
ICAgICAgICAgIGlmICghX192ZXJpZnlfZ3JvdXBpbmcoX19ncm91cGluZywgX19mb3VuZF9ncm91
cGluZykpCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgIH0K
CgogICAgICBfX3h0cmMgKz0gY2hhcigpOwogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAg
ICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRl
cgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9NX2V4dHJhY3RfaW50KF9Jbkl0
ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmcmIF9feHRyYywgaW50JiBfX2Jhc2Up
IGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190
eXBlOwogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25z
dCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xv
Yyk7CiAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVu
Y3Q8X0NoYXJUPiA+KF9fbG9jKTsKCgogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19iYXNlZmll
bGQgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICBpZiAoX19iYXNl
ZmllbGQgPT0gaW9zX2Jhc2U6Om9jdCkKICAgICAgICBfX2Jhc2UgPSA4OwogICAgICBlbHNlIGlm
IChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6aGV4KQogICAgICAgIF9fYmFzZSA9IDE2OwogICAg
ICBlbHNlCiAgICAgICAgX19iYXNlID0gMTA7CgoKICAgICAgaW50IF9fcG9zID0gMDsKICAgICAg
Y2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fcGx1cyA9IF9f
Y3R5cGUud2lkZW4oJysnKTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fbWludXMgPSBfX2N0eXBl
LndpZGVuKCctJyk7CgogICAgICBpZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19wbHVzKSB8
fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fbWludXMpKQogICAgICAgICAgJiYgX19iZWcgIT0g
X19lbmQpCiAgICAgICAgewogICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywg
Y2hhcigpKTsKICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwog
ICAgICAgIH0KCgogICAgICBjb25zdCBjaGFyX3R5cGUgX196ZXJvID0gX19jdHlwZS53aWRlbihf
U19hdG9tc1tfTV96ZXJvXSk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3ggPSBfX2N0eXBlLndp
ZGVuKCd4Jyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX1ggPSBfX2N0eXBlLndpZGVuKCdYJyk7
CiAgICAgIGlmIChfX2Jhc2UgPT0gMTApCiAgICAgICAgewogICAgICAgICAgYm9vbCBfX2ZvdW5k
X3plcm8gPSBmYWxzZTsKICAgICAgICAgIHdoaWxlIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9f
emVybykgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2Mg
PSAqKCsrX19iZWcpOwogICAgICAgICAgICAgIF9fZm91bmRfemVybyA9IHRydWU7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGlmIChfX2ZvdW5kX3plcm8pCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX01femVyb107CiAgICAgICAgICAgICAgKytfX3BvczsK
ICAgICAgICAgICAgICBpZiAoX19iYXNlZmllbGQgPT0gMCkKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9feCkKICAgICAgICAg
ICAgICAgICAgICAgICB8fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fWCkpCiAgICAgICAgICAg
ICAgICAgICAgICAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFyKCkpOwog
ICAgICAgICAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICAgICAgICAgIF9fYyA9
ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAgICBfX2Jhc2UgPSAxNjsKICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBf
X2Jhc2UgPSA4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICBlbHNlIGlmIChfX2Jhc2UgPT0gMTYpCiAgICAgICAgewogICAgICAgICAgaWYgKF9fdHJhaXRz
X3R5cGU6OmVxKF9fYywgX196ZXJvKSAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tfTV96ZXJvXTsKICAgICAgICAgICAgICAr
K19fcG9zOwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgaWYg
KChfX3RyYWl0c190eXBlOjplcShfX2MsIF9feCkgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBf
X1gpKQogICAgICAgICAgICAgICAgICAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigp
KTsKICAgICAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICAgICAgX19jID0gKigr
K19fYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCgoKICAg
ICAgc2l6ZV90IF9fbGVuOwogICAgICBpZiAoX19iYXNlID09IDE2KQogICAgICAgIF9fbGVuID0g
X01fc2l6ZTsKICAgICAgZWxzZQogICAgICAgIF9fbGVuID0gX19iYXNlOwoKCiAgICAgIGNoYXJf
dHlwZSBfX3dhdG9tc1tfTV9zaXplXTsKICAgICAgX19jdHlwZS53aWRlbihfU19hdG9tcywgX1Nf
YXRvbXMgKyBfX2xlbiwgX193YXRvbXMpOwogICAgICBzdHJpbmcgX19mb3VuZF9ncm91cGluZzsK
ICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIGJv
b2wgX19jaGVja19ncm91cGluZyA9IF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgICBpbnQgX19zZXBf
cG9zID0gMDsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fc2VwID0gX19ucC50aG91c2FuZHNfc2Vw
KCk7CiAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CiAgICAgICAgICBjb25z
dCBjaGFyX3R5cGUqIF9fcCA9IF9fdHJhaXRzX3R5cGU6OmZpbmQoX193YXRvbXMsIF9fbGVuLCBf
X2MpOwoKCiAgICAgICAgICBpZiAoX19wICYmICFfX3RyYWl0c190eXBlOjplcShfX2MsIGNoYXJf
dHlwZSgpKSkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRvbXNb
X19wIC0gX193YXRvbXNdOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgKytf
X3NlcF9wb3M7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgfQog
ICAgICAgICAgZWxzZSBpZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3NlcCkgJiYgX19jaGVj
a19ncm91cGluZykKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgaWYgKF9fc2VwX3BvcykK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBz
dGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgICAgICAgICBfX3NlcF9wb3Mg
PSAwOwogICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
X19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCgogICAgICAgICAgICBi
cmVhazsKICAgICAgICB9CgoKCiAgICAgIGlmIChfX2NoZWNrX2dyb3VwaW5nICYmIF9fZm91bmRf
Z3JvdXBpbmcuc2l6ZSgpKQogICAgICAgIHsKCiAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9
IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICBpZiAoIV9fdmVyaWZ5X2dy
b3VwaW5nKF9fZ3JvdXBpbmcsIF9fZm91bmRfZ3JvdXBpbmcpKQogICAgICAgICAgICBfX2VyciB8
PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICB9CgoKICAgICAgX194dHJjICs9IGNoYXIoKTsK
ICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2Zi
aXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0lu
SXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3Nf
YmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9f
dikgY29uc3QKICAgIHsKCiAgICAgIGlmICghKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpib29s
YWxwaGEpKQogICAgICAgIHsKCgogICAgICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgICAgIGlu
dCBfX2Jhc2U7CiAgICAgICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwg
X19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKCiAgICAgICAgICB1bnNpZ25lZCBsb25nIF9f
dWw7CiAgICAgICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIs
IF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6
ZmFpbGJpdCkgJiYgX191bCA8PSAxKQogICAgICAgICAgICBfX3YgPSBfX3VsOwogICAgICAgICAg
ZWxzZQogICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICB9CgoK
ICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJU
PiBfX3RyYWl0c190eXBlOwogICAgICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBf
X3N0cmluZ190eXBlOwoKICAgICAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAg
ICAgICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0
PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgICAgICBjb25zdCBfX3N0cmluZ190eXBlIF9fdHJ1ZSA9
IF9fbnAudHJ1ZW5hbWUoKTsKICAgICAgICAgIGNvbnN0IF9fc3RyaW5nX3R5cGUgX19mYWxzZSA9
IF9fbnAuZmFsc2VuYW1lKCk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fdHJ1ZXMgPSBf
X3RydWUuY19zdHIoKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19mYWxzZXMgPSBfX2Zh
bHNlLmNfc3RyKCk7CiAgICAgICAgICBjb25zdCBzaXplX3QgX190cnVlbiA9IF9fdHJ1ZS5zaXpl
KCkgLSAxOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fZmFsc2VuID0gX19mYWxzZS5zaXplKCkg
LSAxOwoKICAgICAgICAgIGZvciAoc2l6ZV90IF9fbiA9IDA7IF9fYmVnICE9IF9fZW5kOyArK19f
bikKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWcrKzsK
ICAgICAgICAgICAgICBib29sIF9fdGVzdGYgPSBfX24gPD0gX19mYWxzZW4KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA/IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19mYWxzZXNbX19uXSkg
OiBmYWxzZTsKICAgICAgICAgICAgICBib29sIF9fdGVzdHQgPSBfX24gPD0gX190cnVlbgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgID8gX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3RydWVz
W19fbl0pIDogZmFsc2U7CiAgICAgICAgICAgICAgaWYgKCEoX190ZXN0ZiB8fCBfX3Rlc3R0KSkK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZh
aWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgIGVsc2UgaWYgKF9fdGVzdGYgJiYgX19uID09IF9fZmFsc2VuKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICBfX3YgPSAwOwogICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIGlmIChfX3Rlc3R0ICYmIF9fbiA9
PSBfX3RydWVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3YgPSAxOwog
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQog
ICAgICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFz
ZTo6ZW9mYml0OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVt
X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJf
dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyLCBsb25nJiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAg
IGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBf
X2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMu
Y19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIHJldHVybiBf
X2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVy
PgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChp
dGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdAog
ICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9
IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNl
KTsKICAgICAgdW5zaWduZWQgbG9uZyBfX3VsOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMu
Y19zdHIoKSwgX191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICBpZiAoIShf
X2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX191bCA8PSBudW1lcmljX2xp
bWl0czx1bnNpZ25lZCBzaG9ydD46Om1heCgpKQogICAgICAgIF9fdiA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIHNob3J0PihfX3VsKTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNl
OjpmYWlsYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJU
LCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQs
IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5z
aWduZWQgaW50JiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGlu
dCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lv
LCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICB1bnNpZ25lZCBsb25nIF9fdWw7CiAgICAg
IF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3VsLCBfX2VyciwgX1NfY19sb2NhbGUs
IF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAg
ICAmJiBfX3VsIDw9IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpKQogICAgICAg
IF9fdiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oX191bCk7CiAgICAgIGVsc2UKICAgICAg
ICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVy
CiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2Jl
ZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3Ry
aW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2lu
dChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29u
dmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNl
KTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0
ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh
c2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGxvbmcm
IF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsK
ICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBf
X3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3Ys
IF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVy
CiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2Jl
ZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgewogICAg
ICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJh
Y3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKICAgICAg
X19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlLCBf
X2Jhc2UpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwg
X0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBp
b3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGZsb2F0
JiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIF9feHRyYy5yZXNl
cnZlKDMyKTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2Zsb2F0KF9fYmVnLCBfX2VuZCwgX19p
bywgX19lcnIsIF9feHRyYyk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBf
X3YsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAg
bnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0
ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLCBkb3VibGUmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsK
ICAgICAgX194dHJjLnJlc2VydmUoMzIpOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfZmxvYXQo
X19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjKTsKICAgICAgX19jb252ZXJ0X3RvX3Yo
X194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlKTsKICAgICAgcmV0dXJuIF9f
YmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+
CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0
ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0CiAgICB7
CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIF9feHRyYy5yZXNlcnZlKDMyKTsKICAgICAgX19i
ZWcgPSBfTV9leHRyYWN0X2Zsb2F0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYyk7
CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xv
Y2FsZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9J
bkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9z
X2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB2b2lkKiYg
X192KSBjb25zdAogICAgewoKICAgICAgdHlwZWRlZiBpb3NfYmFzZTo6Zm10ZmxhZ3MgZm10Zmxh
Z3M7CiAgICAgIGZtdGZsYWdzIF9fZm10ID0gX19pby5mbGFncygpOwogICAgICBmbXRmbGFncyBf
X2ZtdG1hc2sgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6OmJhc2VmaWVsZAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW9zX2Jhc2U6OnVwcGVyY2FzZSB8IGlvc19iYXNl
OjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxhZ3MoX19mbXQgJiBfX2ZtdG1hc2sgfCAoaW9zX2Jh
c2U6OmhleCB8IGlvc19iYXNlOjpzaG93YmFzZSkpOwoKICAgICAgc3RyaW5nIF9feHRyYzsKICAg
ICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQs
IF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CgoKICAgICAgX19pby5mbGFncyhfX2ZtdCk7
CgogICAgICB1bnNpZ25lZCBsb25nIF9fdWw7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5j
X3N0cigpLCBfX3VsLCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIGlmICghKF9f
ZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQogICAgICAgIF9fdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KF9fdWwpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxi
aXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KIyA2MTggIi91c3IvbG9jYWwvcHJvZHVjdHMv
Z2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgdGVtcGxhdGU8
dHlwZW5hbWUgX1ZhbHVlVD4KICAgICAgX091dEl0ZXIKICAgICAgbnVtX3B1dDxfQ2hhclQsIF9P
dXRJdGVyPjo6CiAgICAgIF9NX2NvbnZlcnRfZmxvYXQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYg
X19pbywgX0NoYXJUIF9fZmlsbCwgY2hhciBfX21vZCwKICAgICAgICAgICAgICAgICAgICAgICBf
VmFsdWVUIF9fdikgY29uc3QKICAgICAgewoKCiAgICAgICAgY29uc3QgaW50IF9fbWF4X2RpZ2l0
cyA9IG51bWVyaWNfbGltaXRzPF9WYWx1ZVQ+OjpkaWdpdHMxMCArIDE7CiAgICAgICAgc3RyZWFt
c2l6ZSBfX3ByZWMgPSBfX2lvLnByZWNpc2lvbigpOwoKICAgICAgICBpZiAoX19wcmVjID4gc3Rh
dGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19tYXhfZGlnaXRzKSkKICAgICAgICAgIF9fcHJlYyA9IHN0
YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbWF4X2RpZ2l0cyk7CgoKICAgICAgICBjaGFyIF9fZmJ1
ZlsxNl07CgoKICAgICAgICBpbnQgX19sZW47CiMgNjY1ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2dj
Yy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgICAg
ICAgY29uc3QgYm9vbCBfX2ZpeGVkID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmZpeGVkOwog
ICAgICAgIGNvbnN0IGludCBfX21heF9leHAgPSBudW1lcmljX2xpbWl0czxfVmFsdWVUPjo6bWF4
X2V4cG9uZW50MTA7CgoKCgoKICAgICAgICBjb25zdCBpbnQgX19jc19zaXplID0gX19maXhlZCA/
IF9fbWF4X2V4cCArIF9fbWF4X2RpZ2l0cyArIDQKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA6IF9fbWF4X2RpZ2l0cyAqIDM7CiAgICAgICAgY2hhciogX19jcyA9IHN0YXRp
Y19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwoKICAgICAgICBpZiAo
X1NfZm9ybWF0X2Zsb2F0KF9faW8sIF9fZmJ1ZiwgX19tb2QsIF9fcHJlYykpCiAgICAgICAgICBf
X2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgMCwgX19mYnVmLCBfX3YsIF9TX2NfbG9jYWxl
LCBfX3ByZWMpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21f
dihfX2NzLCAwLCBfX2ZidWYsIF9fdiwgX1NfY19sb2NhbGUpOwoKICAgICAgICByZXR1cm4gX01f
d2lkZW5fZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fY3MsIF9fbGVuKTsKICAgICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgdGVtcGxhdGU8
dHlwZW5hbWUgX1ZhbHVlVD4KICAgICAgX091dEl0ZXIKICAgICAgbnVtX3B1dDxfQ2hhclQsIF9P
dXRJdGVyPjo6CiAgICAgIF9NX2NvbnZlcnRfaW50KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9f
aW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIgX19tb2QsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIg
X19tb2RsLCBfVmFsdWVUIF9fdikgY29uc3QKICAgICAgewoKCgogICAgICAgIGNoYXIgX19mYnVm
WzE2XTsKICAgICAgICBfU19mb3JtYXRfaW50KF9faW8sIF9fZmJ1ZiwgX19tb2QsIF9fbW9kbCk7
CiMgNzEzICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9i
aXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgICAgICAgY2hhciBfX2NzWzEyOF07CiAgICAgICAg
aW50IF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCAwLCBfX2ZidWYsIF9fdiwgX1NfY19s
b2NhbGUpOwoKICAgICAgICByZXR1cm4gX01fd2lkZW5faW50KF9fcywgX19pbywgX19maWxsLCBf
X2NzLCBfX2xlbik7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoK
ICAgIF9NX3dpZGVuX2Zsb2F0KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBf
X2ZpbGwsIGNoYXIqIF9fY3MsCiAgICAgICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0CiAg
ICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwoKCiAg
ICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBl
PF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAg
ICAgX0NoYXJUKiBfX3dzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShz
aXplb2YoX0NoYXJUKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICogX19sZW4pKTsKCgogICAgICBfQ2hhclQqIF9fd3MyID0gc3RhdGlj
X2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIF9fbGVu
ICogMikpOwogICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyBfX2xlbiwgX193cyk7CgoK
ICAgICAgY29uc3QgX0NoYXJUKiBfX3A7CiAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9f
bnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgaWYgKF9fcCA9
IF9fdHJhaXRzX3R5cGU6OmZpbmQoX193cywgX19sZW4sIF9fY3R5cGUud2lkZW4oJy4nKSkpCiAg
ICAgICAgX193c1tfX3AgLSBfX3dzXSA9IF9fbnAuZGVjaW1hbF9wb2ludCgpOwoKCgoKICAgICAg
Y29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIGlvc19iYXNl
OjpmbXRmbGFncyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmll
bGQ7CiAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSkKICAgICAgICB7CiAgICAgICAgICBfQ2hh
clQqIF9fcDI7CiAgICAgICAgICBpbnQgX19kZWNsZW4gPSBfX3AgPyBfX3AgLSBfX3dzIDogX19s
ZW47CiAgICAgICAgICBfX3AyID0gX19hZGRfZ3JvdXBpbmcoX193czIsIF9fbnAudGhvdXNhbmRz
X3NlcCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBpbmcuY19zdHIo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCkgKyBf
X2dyb3VwaW5nLnNpemUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3dzLCBf
X3dzICsgX19kZWNsZW4pOwogICAgICAgICAgaW50IF9fbmV3bGVuID0gX19wMiAtIF9fd3MyOwoK
CiAgICAgICAgICBpZiAoX19wKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX190cmFpdHNf
dHlwZTo6Y29weShfX3AyLCBfX3AsIF9fbGVuIC0gX19kZWNsZW4pOwogICAgICAgICAgICAgIF9f
bmV3bGVuICs9IF9fbGVuIC0gX19kZWNsZW47CiAgICAgICAgICAgIH0KCgogICAgICAgICAgX193
cyA9IF9fd3MyOwogICAgICAgICAgX19sZW4gPSBfX25ld2xlbjsKICAgICAgICB9CgogICAgICBy
ZXR1cm4gX01faW5zZXJ0KF9fcywgX19pbywgX19maWxsLCBfX3dzLCBfX2xlbik7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRl
cgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBfTV93aWRlbl9pbnQoX091dEl0
ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY2hhciogX19jcywKICAgICAg
ICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0CiAgICB7CgoKICAgICAgY29uc3QgbG9jYWxlIF9f
bG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9
IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfQ2hhclQqIF9fd3MgPSBz
dGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBf
X2xlbikpOwoKCiAgICAgIF9DaGFyVCogX193czIgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1
aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX19sZW4gKiAyKSk7CiAgICAgIF9fY3R5
cGUud2lkZW4oX19jcywgX19jcyArIF9fbGVuLCBfX3dzKTsKCgogICAgICBjb25zdCBudW1wdW5j
dDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAg
ICAgIGNvbnN0IHN0cmluZyBfX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBjb25z
dCBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19iYXNlZmllbGQgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFz
ZTo6YmFzZWZpZWxkOwogICAgICBpZiAoX19ncm91cGluZy5zaXplKCkpCiAgICAgICAgewoKCgoK
CiAgICAgICAgICBzdHJlYW1zaXplIF9fb2ZmID0gMDsKICAgICAgICAgIGlmICgoX19pby5mbGFn
cygpICYgaW9zX2Jhc2U6OnNob3diYXNlKSAmJiBfX2xlbiA+IDEpCiAgICAgICAgICAgIGlmIChf
X2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6b2N0KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgIF9fb2ZmID0gMTsKICAgICAgICAgICAgICAgICpfX3dzMiA9ICpfX3dzOwogICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6OmhleCkK
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfX29mZiA9IDI7CiAgICAgICAgICAgICAg
ICAqX193czIgPSAqX193czsKICAgICAgICAgICAgICAgICooX193czIgKyAxKSA9ICooX193cyAr
IDEpOwogICAgICAgICAgICAgIH0KICAgICAgICAgIF9DaGFyVCogX19wOwogICAgICAgICAgX19w
ID0gX19hZGRfZ3JvdXBpbmcoX193czIgKyBfX29mZiwgX19ucC50aG91c2FuZHNfc2VwKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCkgKyBfX2dyb3VwaW5nLnNp
emUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd3MgKyBfX29mZiwgX193cyAr
IF9fbGVuKTsKICAgICAgICAgIF9fbGVuID0gX19wIC0gX193czI7CgogICAgICAgICAgX193cyA9
IF9fd3MyOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9NX2luc2VydChfX3MsIF9faW8sIF9fZmls
bCwgX193cywgX19sZW4pOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVy
Pjo6CiAgICBfTV9pbnNlcnQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9f
ZmlsbCwgY29uc3QgX0NoYXJUKiBfX3dzLAogICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QK
ICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7Cgog
ICAgICBzdHJlYW1zaXplIF9fdyA9IF9faW8ud2lkdGgoKTsKICAgICAgX0NoYXJUKiBfX3dzMiA9
IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KiBfX3cpKTsKICAgICAgaWYgKF9fdyA+IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbGVuKSkK
ICAgICAgICB7CiAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9fdHJhaXRzX3R5cGU+OjpfU19wYWQo
X19pbywgX19maWxsLCBfX3dzMiwgX193cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX3csIF9fbGVuLCB0cnVlKTsKICAgICAgICAgIF9fbGVuID0gc3Rh
dGljX2Nhc3Q8aW50PihfX3cpOwoKICAgICAgICAgIF9fd3MgPSBfX3dzMjsKICAgICAgICB9CiAg
ICAgIF9faW8ud2lkdGgoMCk7CgoKCiAgICAgIGZvciAoaW50IF9faiA9IDA7IF9faiA8IF9fbGVu
OyArK19faiwgKytfX3MpCiAgICAgICAgKl9fcyA9IF9fd3NbX19qXTsKICAgICAgcmV0dXJuIF9f
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4K
ICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChp
dGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3Yp
IGNvbnN0CiAgICB7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFn
cygpOwogICAgICBpZiAoKF9fZmxhZ3MgJiBpb3NfYmFzZTo6Ym9vbGFscGhhKSA9PSAwKQogICAg
ICAgIHsKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191diA9IF9fdjsKICAgICAgICAgIF9fcyA9
IF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCAndScsIGNoYXIoKSwgX191dik7CiAg
ICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBiYXNpY19zdHJp
bmc8X0NoYXJUPiBfX3N0cmluZ190eXBlOwogICAgICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5n
ZXRsb2MoKTsKICAgICAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFj
ZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgICAgIF9fc3RyaW5nX3R5cGUgX19u
YW1lOwogICAgICAgICAgaWYgKF9fdikKICAgICAgICAgICAgX19uYW1lID0gX19ucC50cnVlbmFt
ZSgpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX25hbWUgPSBfX25wLmZhbHNlbmFtZSgp
OwogICAgICAgICAgX19zID0gX01faW5zZXJ0KF9fcywgX19pbywgX19maWxsLCBfX25hbWUuY19z
dHIoKSwgX19uYW1lLnNpemUoKSk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19zOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0
ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBf
X3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29uc3QKICAg
IHsgcmV0dXJuIF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCAnZCcsIGNoYXIoKSwg
X192KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgog
ICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0
ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAg
IHVuc2lnbmVkIGxvbmcgX192KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9pbnQoX19z
LCBfX2lvLCBfX2ZpbGwsICd1JywgY2hhcigpLCBfX3YpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0No
YXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2Is
IGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9j
b252ZXJ0X2ludChfX3MsIF9fYiwgX19maWxsLCAnZCcsICdsJywgX192KTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51
bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19i
YXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9u
ZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmls
bCwgJ3UnLCAnbCcsIF9fdik7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6
CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2Zp
bGwsIGRvdWJsZSBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2Zsb2F0KF9fcywg
X19pbywgX19maWxsLCBjaGFyKCksIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091
dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90
eXBlIF9fZmlsbCwKICAgICAgICAgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CiAgICB7IHJldHVy
biBfTV9jb252ZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCAnTCcsIF9fdik7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAg
ICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBp
b3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICBjb25zdCB2b2lkKiBf
X3YpIGNvbnN0CiAgICB7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5m
bGFncygpOwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB+KGlvc19iYXNlOjpzaG93
cG9zIHwgaW9zX2Jhc2U6OmJhc2VmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgaW9zX2Jhc2U6OnVwcGVyY2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9f
aW8uZmxhZ3MoX19mbGFncyAmIF9fZm10IHwgKGlvc19iYXNlOjpoZXggfCBpb3NfYmFzZTo6c2hv
d2Jhc2UpKTsKICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgX19zID0gX01fY29udmVydF9p
bnQoX19zLCBfX2lvLCBfX2ZpbGwsICd1JywgY2hhcigpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBsb25nPihfX3YpKTsKICAgICAgICAg
IF9faW8uZmxhZ3MoX19mbGFncyk7CiAgICAgICAgfQogICAgICBjYXRjaCAoLi4uKQogICAgICAg
IHsKICAgICAgICAgIF9faW8uZmxhZ3MoX19mbGFncyk7CiAgICAgICAgICB0aHJvdzsKICAgICAg
ICB9CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBtb25leV9nZXQ8X0NoYXJULCBfSW5J
dGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wg
X19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsIGxvbmcgZG91YmxlJiBfX3VuaXRzKSBjb25zdAogICAgewogICAgICBzdHJpbmdfdHlwZSBf
X3N0cjsKICAgICAgX19iZWcgPSB0aGlzLT5kb19nZXQoX19iZWcsIF9fZW5kLCBfX2ludGwsIF9f
aW8sIF9fZXJyLCBfX3N0cik7CgogICAgICBjb25zdCBpbnQgX19uID0gbnVtZXJpY19saW1pdHM8
bG9uZyBkb3VibGU+OjpkaWdpdHMxMDsKICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNo
YXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fbikpOwogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBf
X2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2Zh
Y2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IF9DaGFyVCogX193Y3MgPSBf
X3N0ci5jX3N0cigpOwogICAgICBfX2N0eXBlLm5hcnJvdyhfX3djcywgX193Y3MgKyBfX3N0ci5z
aXplKCkgKyAxLCBjaGFyKCksIF9fY3MpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX2NzLCBfX3Vu
aXRzLCBfX2VyciwgX1NfY19sb2NhbGUpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAg
IG1vbmV5X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcs
IGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fdW5pdHMpIGNvbnN0CiAg
ICB7CgogICAgICB0eXBlZGVmIG1vbmV5cHVuY3Q8X0NoYXJULCB0cnVlPiBfX21vbmV5X3RydWU7
CiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQsIGZhbHNlPiBfX21vbmV5X2ZhbHNlOwog
ICAgICB0eXBlZGVmIG1vbmV5X2Jhc2U6OnBhcnQgcGFydDsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBzdHJpbmdfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKCiAgICAgIGNvbnN0IGxvY2FsZSBf
X2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IF9fbW9uZXlfdHJ1ZSYgX19tcHQgPSB1
c2VfZmFjZXQ8X19tb25leV90cnVlPihfX2xvYyk7CiAgICAgIGNvbnN0IF9fbW9uZXlfZmFsc2Um
IF9fbXBmID0gdXNlX2ZhY2V0PF9fbW9uZXlfZmFsc2U+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5
cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoK
ICAgICAgY29uc3QgbW9uZXlfYmFzZTo6cGF0dGVybiBfX3AgPSBfX2ludGwgPyBfX21wdC5uZWdf
Zm9ybWF0KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBf
X21wZi5uZWdfZm9ybWF0KCk7CgogICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3Bvc19zaWduID1f
X2ludGwgPyBfX21wdC5wb3NpdGl2ZV9zaWduKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDogX19tcGYucG9zaXRpdmVfc2lnbigpOwogICAgICBjb25zdCBzdHJp
bmdfdHlwZSBfX25lZ19zaWduID1fX2ludGwgPyBfX21wdC5uZWdhdGl2ZV9zaWduKCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYubmVnYXRpdmVfc2ln
bigpOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19kID0gX19pbnRsID8gX19tcHQuZGVjaW1hbF9w
b2ludCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFs
X3BvaW50KCk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9faW50bCA/IF9fbXB0LnRo
b3VzYW5kc19zZXAoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21w
Zi50aG91c2FuZHNfc2VwKCk7CgogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9faW50
bCA/IF9fbXB0Lmdyb3VwaW5nKCkgOiBfX21wZi5ncm91cGluZygpOwoKCiAgICAgIHN0cmluZ190
eXBlIF9fc2lnbjsKCiAgICAgIHN0cmluZyBfX2dyb3VwaW5nX3RtcDsKCiAgICAgIGludCBfX3Nl
cF9wb3MgPSAwOwoKICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CgogICAgICBib29sIF9f
dGVzdGRlY2ZvdW5kID0gZmFsc2U7CgoKICAgICAgc3RyaW5nX3R5cGUgX190ZW1wX3VuaXRzOwoK
ICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgY2hhcl90eXBlIF9fZW9mID0gc3Rh
dGljX2Nhc3Q8Y2hhcl90eXBlPihjaGFyX3RyYWl0czxjaGFyX3R5cGU+Ojplb2YoKSk7CiAgICAg
IGZvciAoaW50IF9faSA9IDA7IF9fYmVnICE9IF9fZW5kICYmIF9faSA8IDQgJiYgX190ZXN0dmFs
aWQ7ICsrX19pKQogICAgICAgIHsKICAgICAgICAgIHBhcnQgX193aGljaCA9IHN0YXRpY19jYXN0
PHBhcnQ+KF9fcC5maWVsZFtfX2ldKTsKICAgICAgICAgIHN3aXRjaCAoX193aGljaCkKICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOgogICAg
ICAgICAgICAgICAgICBpZiAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlCiAgICAg
ICAgICAgICAgICAgICAgICB8fCBfX2kgPCAyIHx8IF9fc2lnbi5zaXplKCkgPiAxCiAgICAgICAg
ICAgICAgICAgICAgICB8fCAoKHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFszXSkgIT0gbW9u
ZXlfYmFzZTo6bm9uZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBfX2kgPT0gMikpCiAg
ICAgICAgICAgICAgICAgICAgewoKCgoKCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJp
bmdfdHlwZSBfX3N5bWJvbCA9IF9faW50bCA/IF9fbXB0LmN1cnJfc3ltYm9sKCkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5j
dXJyX3N5bWJvbCgpOwogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19z
eW1ib2wuc2l6ZSgpOwogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9faiA9IDA7CiAg
ICAgICAgICAgICAgICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmJiBfX2ogPCBfX2xlbiAmJiBfX3N5bWJvbFtfX2pdID09IF9fYykKICAg
ICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICoo
KytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgKytfX2o7CiAgICAgICAgICAgICAg
ICAgICAgICAgIH0KCgogICAgICAgICAgICAgICAgICAgICAgaWYgKF9faiAhPSBfX2xlbiAmJiAo
X19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzaWduOgoKICAg
ICAgICAgICAgICAgICAgaWYgKF9fcG9zX3NpZ24uc2l6ZSgpICYmIF9fbmVnX3NpZ24uc2l6ZSgp
KQogICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX19w
b3Nfc2lnblswXSkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgX19zaWduID0gX19wb3Nfc2lnbjsKICAgICAgICAgICAgICAgICAgICAgICAgX19jID0gKigr
K19fYmVnKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNl
IGlmIChfX2MgPT0gX19uZWdfc2lnblswXSkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgX19zaWduID0gX19uZWdfc2lnbjsKICAgICAgICAgICAgICAgICAg
ICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNl
OwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9fcG9zX3Np
Z24uc2l6ZSgpICYmIF9fYyA9PSBfX3Bvc19zaWduWzBdKQogICAgICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgIF9fc2lnbiA9IF9fcG9zX3NpZ247CiAgICAgICAgICAgICAg
ICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoX19uZWdfc2lnbi5zaXplKCkgJiYgX19jID09IF9fbmVnX3NpZ25b
MF0pCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgX19zaWduID0g
X19uZWdfc2lnbjsKICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
IGNhc2UgbW9uZXlfYmFzZTo6dmFsdWU6CgoKICAgICAgICAgICAgICAgICAgd2hpbGUgKF9fYmVn
ICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX19jdHlwZS5pcyhjdHlwZV9i
YXNlOjpkaWdpdCwgX19jKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChfX2MgPT0g
X19kICYmICFfX3Rlc3RkZWNmb3VuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBf
X2MgPT0gX19zZXApKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
IGlmIChfX2MgPT0gX19kKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19ncm91cGluZ190bXAgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9z
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NlcF9wb3MgPSAwOwogICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fdGVzdGRlY2ZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX19jID09IF9fc2VwKQogICAgICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9fZ3JvdXBp
bmcuc2l6ZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19ncm91cGluZ190bXAgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBf
cG9zKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3RlbXBfdW5pdHMgKz0gX19jOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICsrX19zZXBfcG9zOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6
OnNwYWNlOgogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpub25lOgoKICAgICAgICAg
ICAgICAgICAgaWYgKF9faSAhPSAzKQogICAgICAgICAgICAgICAgICAgIHdoaWxlIChfX2JlZyAh
PSBfX2VuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jh
c2U6OnNwYWNlLCBfX2MpKQogICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsK
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKCiAg
ICAgIGlmIChfX3NpZ24uc2l6ZSgpID4gMSkKICAgICAgICB7CiAgICAgICAgICBzaXplX3R5cGUg
X19sZW4gPSBfX3NpZ24uc2l6ZSgpOwogICAgICAgICAgc2l6ZV90eXBlIF9faSA9IDE7CiAgICAg
ICAgICBmb3IgKDsgX19jICE9IF9fZW9mICYmIF9faSA8IF9fbGVuOyArK19faSkKICAgICAgICAg
ICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kICYmIF9fYyAhPSBfX3NpZ25bX19pXSkKICAgICAgICAg
ICAgICBfX2MgPSAqKCsrX19iZWcpOwoKICAgICAgICAgIGlmIChfX2kgIT0gX19sZW4pCiAgICAg
ICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQoKCiAgICAgIHdoaWxlIChfX3Rl
bXBfdW5pdHNbMF0gPT0gX19jdHlwZS53aWRlbignMCcpKQogICAgICAgIF9fdGVtcF91bml0cy5l
cmFzZShfX3RlbXBfdW5pdHMuYmVnaW4oKSk7CgogICAgICBpZiAoX19zaWduLnNpemUoKSAmJiBf
X3NpZ24gPT0gX19uZWdfc2lnbikKICAgICAgICBfX3RlbXBfdW5pdHMuaW5zZXJ0KF9fdGVtcF91
bml0cy5iZWdpbigpLCBfX2N0eXBlLndpZGVuKCctJykpOwoKCiAgICAgIGlmIChfX2dyb3VwaW5n
LnNpemUoKSAmJiBfX2dyb3VwaW5nX3RtcC5zaXplKCkpCiAgICAgICAgewogICAgICAgICAgaWYg
KCFfX3ZlcmlmeV9ncm91cGluZyhfX2dyb3VwaW5nLCBfX2dyb3VwaW5nX3RtcCkpCiAgICAgICAg
ICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQoKCiAgICAgIGlmIChfX2MgPT0gX19l
b2YpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKCgogICAgICBpZiAoIV9fdGVz
dHZhbGlkIHx8ICFfX3RlbXBfdW5pdHMuc2l6ZSgpKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNl
OjpmYWlsYml0OwogICAgICBlbHNlCgogICAgICAgIF9fdGVtcF91bml0cy5zd2FwKF9fdW5pdHMp
OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG1vbmV5X3B1dDxfQ2hhclQsIF9P
dXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNl
JiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIGxvbmcgZG91YmxlIF9fdW5pdHMp
IGNvbnN0CiAgICB7CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAg
ICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJU
PiA+KF9fbG9jKTsKIyAxMTkwICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRl
L2MrKy8zLjIuMS9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgICAgIGNvbnN0IGludCBfX2Nz
X3NpemUgPSBudW1lcmljX2xpbWl0czxsb25nIGRvdWJsZT46Om1heF9leHBvbmVudDEwICsgNTsK
ICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9f
Y3Nfc2l6ZSkpOwogICAgICBpbnQgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIDAsICIl
LjAxTGYiLCBfX3VuaXRzLCBfU19jX2xvY2FsZSk7CgogICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0
aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX19jc19z
aXplKSk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIF9fbGVuLCBfX3dzKTsKICAg
ICAgc3RyaW5nX3R5cGUgX19kaWdpdHMoX193cyk7CiAgICAgIHJldHVybiB0aGlzLT5kb19wdXQo
X19zLCBfX2ludGwsIF9faW8sIF9fZmlsbCwgX19kaWdpdHMpOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG1vbmV5
X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCBf
X2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIGNvbnN0
IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBzdHJpbmdfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBtb25leV9i
YXNlOjpwYXJ0IHBhcnQ7CgogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygp
OwogICAgICBjb25zdCBzaXplX3R5cGUgX193aWR0aCA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4o
X19pby53aWR0aCgpKTsKCgogICAgICB0eXBlZGVmIG1vbmV5cHVuY3Q8X0NoYXJULCB0cnVlPiBf
X21vbmV5X3RydWU7CiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQsIGZhbHNlPiBfX21v
bmV5X2ZhbHNlOwogICAgICBjb25zdCBfX21vbmV5X3RydWUmIF9fbXB0ID0gdXNlX2ZhY2V0PF9f
bW9uZXlfdHJ1ZT4oX19sb2MpOwogICAgICBjb25zdCBfX21vbmV5X2ZhbHNlJiBfX21wZiA9IHVz
ZV9mYWNldDxfX21vbmV5X2ZhbHNlPihfX2xvYyk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4m
IF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKCgoKICAgICAgY29u
c3QgY2hhcl90eXBlKiBfX2JlZyA9IF9fZGlnaXRzLmRhdGEoKTsKICAgICAgY29uc3QgY2hhcl90
eXBlKiBfX2VuZCA9IF9fYmVnICsgX19kaWdpdHMuc2l6ZSgpOwogICAgICBtb25leV9iYXNlOjpw
YXR0ZXJuIF9fcDsKICAgICAgc3RyaW5nX3R5cGUgX19zaWduOwogICAgICBpZiAoKl9fYmVnICE9
IF9fY3R5cGUud2lkZW4oJy0nKSkKICAgICAgICB7CiAgICAgICAgICBfX3AgPSBfX2ludGwgPyBf
X21wdC5wb3NfZm9ybWF0KCkgOiBfX21wZi5wb3NfZm9ybWF0KCk7CiAgICAgICAgICBfX3NpZ24g
PV9faW50bCA/IF9fbXB0LnBvc2l0aXZlX3NpZ24oKSA6IF9fbXBmLnBvc2l0aXZlX3NpZ24oKTsK
ICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfX3AgPSBfX2ludGwgPyBf
X21wdC5uZWdfZm9ybWF0KCkgOiBfX21wZi5uZWdfZm9ybWF0KCk7CiAgICAgICAgICBfX3NpZ24g
PV9faW50bCA/IF9fbXB0Lm5lZ2F0aXZlX3NpZ24oKSA6IF9fbXBmLm5lZ2F0aXZlX3NpZ24oKTsK
ICAgICAgICAgICsrX19iZWc7CiAgICAgICAgfQoKCiAgICAgIF9fZW5kID0gX19jdHlwZS5zY2Fu
X25vdChjdHlwZV9iYXNlOjpkaWdpdCwgX19iZWcsIF9fZW5kKTsKICAgICAgaWYgKF9fYmVnICE9
IF9fZW5kKQogICAgICAgIHsKCgoKICAgICAgICAgIHN0cmluZ190eXBlIF9fcmVzOwogICAgICAg
ICAgc3RyaW5nX3R5cGUgX192YWx1ZTsKICAgICAgICAgIGNvbnN0IHN0cmluZ190eXBlIF9fc3lt
Ym9sID0gX19pbnRsID8gX19tcHQuY3Vycl9zeW1ib2woKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5jdXJyX3N5bWJvbCgpOwoKCiAgICAgICAg
ICBjb25zdCBpbnQgX19mcmFjID0gX19pbnRsID8gX19tcHQuZnJhY19kaWdpdHMoKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmZyYWNfZGlnaXRzKCk7CiAgICAg
ICAgICBpZiAoX19mcmFjID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGNo
YXJfdHlwZSBfX2QgPSBfX2ludGwgPyBfX21wdC5kZWNpbWFsX3BvaW50KCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuZGVjaW1hbF9wb2ludCgpOwog
ICAgICAgICAgICAgIGlmIChfX2VuZCAtIF9fYmVnID49IF9fZnJhYykKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgX192YWx1ZSA9IHN0cmluZ190eXBlKF9fZW5kIC0gX19mcmFj
LCBfX2VuZCk7CiAgICAgICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0KF9fdmFsdWUuYmVnaW4o
KSwgX19kKTsKICAgICAgICAgICAgICAgICAgX19lbmQgLT0gX19mcmFjOwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAg
ICAgIF9fdmFsdWUgPSBzdHJpbmdfdHlwZShfX2JlZywgX19lbmQpOwogICAgICAgICAgICAgICAg
ICBpbnQgX19wYWRkZWMgPSBfX2ZyYWMgLSAoX19lbmQgLSBfX2JlZyk7CiAgICAgICAgICAgICAg
ICAgIGNoYXJfdHlwZSBfX3plcm8gPSBfX2N0eXBlLndpZGVuKCcwJyk7CiAgICAgICAgICAgICAg
ICAgIF9fdmFsdWUuaW5zZXJ0KF9fdmFsdWUuYmVnaW4oKSwgX19wYWRkZWMsIF9femVybyk7CiAg
ICAgICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0KF9fdmFsdWUuYmVnaW4oKSwgX19kKTsKICAg
ICAgICAgICAgICAgICAgX19iZWcgPSBfX2VuZDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgfQoKCgogICAgICAgICAgaWYgKF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX2ludGwgPyBfX21wdC5ncm91cGlu
ZygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21w
Zi5ncm91cGluZygpOwogICAgICAgICAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSkKICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlIF9fc2VwID0gX19p
bnRsID8gX19tcHQudGhvdXNhbmRzX3NlcCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLnRob3VzYW5kc19zZXAoKTsKICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogX19nYmVnID0gX19ncm91cGluZy5jX3N0cigpOwogICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBfX2dlbmQgPSBfX2diZWcgKyBfX2dyb3VwaW5nLnNpemUoKTsK
ICAgICAgICAgICAgICAgICAgY29uc3QgaW50IF9fbiA9IChfX2VuZCAtIF9fYmVnKSAqIDI7CiAg
ICAgICAgICAgICAgICAgIF9DaGFyVCogX193czIgPQogICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX24pKTsK
ICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX3dzX2VuZCA9IF9fYWRkX2dyb3VwaW5nKF9fd3My
LCBfX3NlcCwgX19nYmVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19nZW5kLCBfX2JlZywgX19lbmQpOwogICAgICAgICAgICAgICAgICBfX3Zh
bHVlLmluc2VydCgwLCBfX3dzMiwgX193c19lbmQgLSBfX3dzMik7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoMCwgc3Ry
aW5nX3R5cGUoX19iZWcsIF9fZW5kKSk7CiAgICAgICAgICAgIH0KCgogICAgICAgICAgaW9zX2Jh
c2U6OmZtdGZsYWdzIF9fZiA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3RmaWVsZDsK
ICAgICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fdmFsdWUuc2l6ZSgpICsgX19zaWduLnNpemUo
KTsKICAgICAgICAgIF9fbGVuICs9IChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2Up
ID8gX19zeW1ib2wuc2l6ZSgpIDogMDsKICAgICAgICAgIGJvb2wgX190ZXN0aXBhZCA9IF9fZiA9
PSBpb3NfYmFzZTo6aW50ZXJuYWwgJiYgX19sZW4gPCBfX3dpZHRoOwoKCiAgICAgICAgICBmb3Ig
KGludCBfX2kgPSAwOyBfX2kgPCA0OyArK19faSkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IHBhcnQgX193aGljaCA9IHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFtfX2ldKTsKICAgICAg
ICAgICAgICBzd2l0Y2ggKF9fd2hpY2gpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICBjYXNlIG1vbmV5X2Jhc2U6OnN5bWJvbDoKICAgICAgICAgICAgICAgICAgaWYgKF9faW8uZmxh
Z3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZSkKICAgICAgICAgICAgICAgICAgICBfX3JlcyArPSBf
X3N5bWJvbDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1v
bmV5X2Jhc2U6OnNpZ246CgoKCiAgICAgICAgICAgICAgICAgIGlmIChfX3NpZ24uc2l6ZSgpKQog
ICAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9fc2lnblswXTsKICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnZhbHVlOgogICAgICAgICAg
ICAgICAgICBfX3JlcyArPSBfX3ZhbHVlOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3BhY2U6CgoKCiAgICAgICAgICAgICAgICAgIGlm
IChfX3Rlc3RpcGFkKQogICAgICAgICAgICAgICAgICAgIF9fcmVzICs9IHN0cmluZ190eXBlKF9f
d2lkdGggLSBfX2xlbiwgX19maWxsKTsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICAgIF9fcmVzICs9IF9fY3R5cGUud2lkZW4oX19maWxsKTsKICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6Om5vbmU6CiAgICAgICAg
ICAgICAgICAgIGlmIChfX3Rlc3RpcGFkKQogICAgICAgICAgICAgICAgICAgIF9fcmVzICs9IHN0
cmluZ190eXBlKF9fd2lkdGggLSBfX2xlbiwgX19maWxsKTsKICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCgogICAgICAgICAgaWYgKF9fc2ln
bi5zaXplKCkgPiAxKQogICAgICAgICAgICBfX3JlcyArPSBzdHJpbmdfdHlwZShfX3NpZ24uYmVn
aW4oKSArIDEsIF9fc2lnbi5lbmQoKSk7CgoKICAgICAgICAgIF9fbGVuID0gX19yZXMuc2l6ZSgp
OwogICAgICAgICAgaWYgKF9fd2lkdGggPiBfX2xlbikKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGlmIChfX2YgPT0gaW9zX2Jhc2U6OmxlZnQpCgogICAgICAgICAgICAgICAgX19yZXMuYXBw
ZW5kKF9fd2lkdGggLSBfX2xlbiwgX19maWxsKTsKICAgICAgICAgICAgICBlbHNlCgogICAgICAg
ICAgICAgICAgX19yZXMuaW5zZXJ0KDAsIHN0cmluZ190eXBlKF9fd2lkdGggLSBfX2xlbiwgX19m
aWxsKSk7CiAgICAgICAgICAgICAgX19sZW4gPSBfX3dpZHRoOwogICAgICAgICAgICB9CgoKICAg
ICAgICAgIGZvciAoc2l6ZV90eXBlIF9faiA9IDA7IF9faiA8IF9fbGVuOyArK19faiwgKytfX3Mp
CiAgICAgICAgICAgICpfX3MgPSBfX3Jlc1tfX2pdOwogICAgICAgIH0KICAgICAgX19pby53aWR0
aCgwKTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIHRpbWVfYmFzZTo6ZGF0ZW9yZGVyCiAgICB0aW1l
X2dldDxfQ2hhclQsIF9Jbkl0ZXI+Ojpkb19kYXRlX29yZGVyKCkgY29uc3QKICAgIHsgcmV0dXJu
IHRpbWVfYmFzZTo6bm9fb3JkZXI7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfSW5JdGVyPgogICAgdm9pZAogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAg
ICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2Vu
ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUmIF9fZXJyLCB0bSogX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf
Q2hhclQqIF9fZm9ybWF0KSBjb25zdAogICAgewogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdl
dGxvYygpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBfX3RwID0gdXNlX2ZhY2V0
PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4m
IF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgc2l6ZV90
IF9fbGVuID0gY2hhcl90cmFpdHM8X0NoYXJUPjo6bGVuZ3RoKF9fZm9ybWF0KTsKCiAgICAgIGZv
ciAoc2l6ZV90IF9faSA9IDA7IF9fYmVnICE9IF9fZW5kICYmIF9faSA8IF9fbGVuICYmICFfX2Vy
cjsgKytfX2kpCiAgICAgICAgewogICAgICAgICAgY2hhciBfX2MgPSBfX2Zvcm1hdFtfX2ldOwog
ICAgICAgICAgaWYgKF9fYyA9PSAnJScpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgX19j
ID0gX19mb3JtYXRbKytfX2ldOwogICAgICAgICAgICAgIGNoYXIgX19tb2QgPSAwOwogICAgICAg
ICAgICAgIGludCBfX21lbSA9IDA7CiAgICAgICAgICAgICAgaWYgKF9fYyA9PSAnRScgfHwgX19j
ID09ICdPJykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19tb2QgPSBfX2M7
CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fZm9ybWF0WysrX19pXTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICBzd2l0Y2ggKF9fYykKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogX19jczsKICAgICAgICAgICAgICAgICAgX0NoYXJUIF9fd2Nz
WzEwXTsKICAgICAgICAgICAgICAgIGNhc2UgJ2EnOgoKICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhcl90eXBlKiBfX2RheXMxWzddOwogICAgICAgICAgICAgICAgICBfX3RwLl9NX2RheXNfYWJi
cmV2aWF0ZWQoX19kYXlzMSk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2Jl
ZywgX19lbmQsIF9fdG0tPnRtX3dkYXksIF9fZGF5czEsIDcsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgY2FzZSAnQSc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5
czJbN107CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fZGF5cyhfX2RheXMyKTsKICAgICAgICAg
ICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fd2RheSwgX19k
YXlzMiwgNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJyKTsKICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdoJzoKICAgICAgICAgICAg
ICAgIGNhc2UgJ2InOgoKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX21vbnRo
czFbMTJdOwogICAgICAgICAgICAgICAgICBfX3RwLl9NX21vbnRoc19hYmJyZXZpYXRlZChfX21v
bnRoczEpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBf
X3RtLT50bV9tb24sIF9fbW9udGhzMSwgMTIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2Fz
ZSAnQic6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhzMlsxMl07
CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fbW9udGhzKF9fbW9udGhzMik7CiAgICAgICAgICAg
ICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG0tPnRtX21vbiwgX19tb250
aHMyLCAxMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJyKTsKICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdjJzoKCiAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kdFsyXTsKICAgICAgICAgICAgICAgICAgX190cC5f
TV9kYXRlX3RpbWVfZm9ybWF0cyhfX2R0KTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92
aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2R0WzBdKTsKICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICBjYXNlICdkJzoKCiAgICAgICAgICAgICAgICAgIF9NX2V4dHJh
Y3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbWRheSwgMSwgMzEsIDIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdEJzoKCiAgICAgICAgICAgICAgICAgIF9fY3Mg
PSAiJW0vJWQvJXkiOwogICAgICAgICAgICAgICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3Mg
KyA5LCBfX3djcyk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2Jl
ZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX193Y3MpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgIGNhc2UgJ0gnOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9f
ZW5kLCBfX3RtLT50bV9ob3VyLCAwLCAyMywgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgIGNhc2UgJ0knOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcs
IF9fZW5kLCBfX3RtLT50bV9ob3VyLCAxLCAxMiwgMiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgIGNhc2UgJ20nOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19i
ZWcsIF9fZW5kLCBfX21lbSwgMSwgMTIsIDIsIF9fY3R5cGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgaWYgKCFfX2VycikKICAgICAg
ICAgICAgICAgICAgICBfX3RtLT50bV9tb24gPSBfX21lbSAtIDE7CiAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnTSc6CgogICAgICAgICAgICAgICAgICBfTV9l
eHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX21pbiwgMCwgNTksIDIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICduJzoKICAgICAgICAgICAgICAgICAgaWYg
KF9fY3R5cGUubmFycm93KCpfX2JlZywgMCkgPT0gJ1xuJykKICAgICAgICAgICAgICAgICAgICAr
K19fYmVnOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19lcnIg
fD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgY2FzZSAnUic6CgogICAgICAgICAgICAgICAgICBfX2NzID0gIiVIOiVNIjsKICAgICAg
ICAgICAgICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgNiwgX193Y3MpOwogICAgICAg
ICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2Vy
ciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd2NzKTsK
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdTJzoKCiAgICAg
ICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fc2VjLCAw
LCA1OSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIp
OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3QnOgogICAg
ICAgICAgICAgICAgICBpZiAoX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKSA9PSAnXHQnKQogICAg
ICAgICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgIGNhc2UgJ1QnOgoKICAgICAgICAgICAgICAgICAgX19jcyA9ICIl
SDolTTolUyI7CiAgICAgICAgICAgICAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIDks
IF9fd2NzKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBf
X2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX3djcyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
Y2FzZSAneCc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZGF0ZXNbMl07
CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fZGF0ZV9mb3JtYXRzKF9fZGF0ZXMpOwogICAgICAg
ICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2Vy
ciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGF0ZXNb
MF0pOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1gnOgoK
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3RpbWVzWzJdOwogICAgICAgICAg
ICAgICAgICBfX3RwLl9NX3RpbWVfZm9ybWF0cyhfX3RpbWVzKTsKICAgICAgICAgICAgICAgICAg
X01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RpbWVzWzBdKTsKICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICd5JzoKCiAgICAgICAgICAg
ICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1feWVhciwgMCwgOTks
IDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdZJzoKCiAgICAgICAg
ICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX19tZW0sIDAsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWNfbGltaXRzPGludD46Om1heCgpLCA0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAg
ICAgICAgICAgIGlmICghX19lcnIpCiAgICAgICAgICAgICAgICAgICAgX190bS0+dG1feWVhciA9
IF9fbWVtIC0gMTkwMDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBj
YXNlICdaJzoKCiAgICAgICAgICAgICAgICAgIGlmIChfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnVw
cGVyLCAqX19iZWcpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
IGludCBfX3RtcDsKICAgICAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywg
X19lbmQsIF9fdG1wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGlt
ZXB1bmN0PF9DaGFyVD46Ol9TX3RpbWV6b25lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAxNCwgX19lcnIpOwoKCiAgICAgICAgICAgICAgICAgICAgICBjaGFyX3R5cGUg
X19jID0gKl9fYmVnOwogICAgICAgICAgICAgICAgICAgICAgaWYgKCFfX2VyciAmJiBfX3RtcCA9
PSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKF9fYyA9PSBfX2N0eXBlLndpZGVuKCct
JykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgX19jID09IF9fY3R5cGUud2lkZW4o
JysnKSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG1wLCAwLCAyMywgMiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bXAsIDAs
IDU5LCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBl
LCBfX2Vycik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAg
IF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKCiAgICAgICAgICAgICAgICAgICAgICBfX2Vy
ciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAg
ICAgICAgaWYgKF9fYyA9PSBfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApKQogICAgICAgICAgICAg
ICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAg
IHZvaWQKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgX01fZXh0cmFjdF9udW0o
aXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwKICAgICAg
ICAgICAgICAgICAgIGludCBfX21pbiwgaW50IF9fbWF4LCBzaXplX3QgX19sZW4sCiAgICAgICAg
ICAgICAgICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlLAogICAgICAgICAgICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdAogICAgewogICAgICBzaXplX3QgX19p
ID0gMDsKICAgICAgc3RyaW5nIF9fZGlnaXRzOwogICAgICBib29sIF9fdGVzdHZhbGlkID0gdHJ1
ZTsKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgd2hpbGUgKF9fYmVnICE9IF9f
ZW5kICYmIF9faSA8IF9fbGVuCiAgICAgICAgICAgICAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6
OmRpZ2l0LCBfX2MpKQogICAgICAgIHsKICAgICAgICAgIF9fZGlnaXRzICs9IF9fY3R5cGUubmFy
cm93KF9fYywgMCk7CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgKytfX2k7
CiAgICAgICAgfQogICAgICBpZiAoX19pID09IF9fbGVuKQogICAgICAgIHsKICAgICAgICAgIGlu
dCBfX3ZhbHVlID0gYXRvaShfX2RpZ2l0cy5jX3N0cigpKTsKICAgICAgICAgIGlmIChfX21pbiA8
PSBfX3ZhbHVlICYmIF9fdmFsdWUgPD0gX19tYXgpCiAgICAgICAgICAgIF9fbWVtYmVyID0gX192
YWx1ZTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAg
ICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICBpZiAo
IV9fdGVzdHZhbGlkKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgfQoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIHZvaWQK
ICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgX01fZXh0cmFjdF9uYW1lKGl0ZXJf
dHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGludCYgX19tZW1iZXIsCiAgICAgICAgICAg
ICAgICAgICAgY29uc3QgX0NoYXJUKiogX19uYW1lcywgc2l6ZV90IF9faW5kZXhsZW4sCiAgICAg
ICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdAogICAgewogICAg
ICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAgICAgaW50KiBf
X21hdGNoZXMgPSBzdGF0aWNfY2FzdDxpbnQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihpbnQp
ICogX19pbmRleGxlbikpOwogICAgICBzaXplX3QgX19ubWF0Y2hlcyA9IDA7CiAgICAgIHNpemVf
dCBfX3BvcyA9IDA7CiAgICAgIGJvb2wgX190ZXN0dmFsaWQgPSB0cnVlOwogICAgICBjb25zdCBj
aGFyX3R5cGUqIF9fbmFtZTsKCiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CgogICAgICBm
b3IgKHNpemVfdCBfX2kxID0gMDsgX19pMSA8IF9faW5kZXhsZW47ICsrX19pMSkKICAgICAgICBp
ZiAoX19jID09IF9fbmFtZXNbX19pMV1bMF0pCiAgICAgICAgICBfX21hdGNoZXNbX19ubWF0Y2hl
cysrXSA9IF9faTE7CgogICAgICB3aGlsZShfX25tYXRjaGVzID4gMSkKICAgICAgICB7CgogICAg
ICAgICAgc2l6ZV90IF9fbWlubGVuID0gMTA7CiAgICAgICAgICBmb3IgKHNpemVfdCBfX2kyID0g
MDsgX19pMiA8IF9fbm1hdGNoZXM7ICsrX19pMikKICAgICAgICAgICAgX19taW5sZW4gPSBtaW4o
X19taW5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJhaXRzX3R5cGU6Omxlbmd0
aChfX25hbWVzW19fbWF0Y2hlc1tfX2kyXV0pKTsKCiAgICAgICAgICBpZiAoX19wb3MgPCBfX21p
bmxlbiAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICsrX19w
b3M7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBfX2kzID0gMDsgX19pMyA8IF9fbm1hdGNoZXM7ICsrX19pMykKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgX19uYW1lID0gX19uYW1lc1tfX21hdGNoZXNbX19pM11dOwog
ICAgICAgICAgICAgICAgICBpZiAoX19uYW1lW19fcG9zXSAhPSBfX2MpCiAgICAgICAgICAgICAg
ICAgICAgX19tYXRjaGVzW19faTNdID0gX19tYXRjaGVzWy0tX19ubWF0Y2hlc107CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgfQoKICAgICAgaWYgKF9fbm1hdGNoZXMgPT0gMSkKICAgICAgICB7CgogICAgICAg
ICAgX19uYW1lID0gX19uYW1lc1tfX21hdGNoZXNbMF1dOwogICAgICAgICAgY29uc3Qgc2l6ZV90
IF9fbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZSk7CiAgICAgICAgICB3aGlsZSAo
X19wb3MgPCBfX2xlbiAmJiBfX2JlZyAhPSBfX2VuZCAmJiBfX25hbWVbX19wb3NdID09ICpfX2Jl
ZykKICAgICAgICAgICAgKytfX2JlZywgKytfX3BvczsKCiAgICAgICAgICBpZiAoX19sZW4gPT0g
X19wb3MpCiAgICAgICAgICAgIF9fbWVtYmVyID0gX19tYXRjaGVzWzBdOwogICAgICAgICAgZWxz
ZQogICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgZWxzZQog
ICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgIGlmICghX190ZXN0dmFsaWQpCiAgICAg
ICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFy
VCwgX0luSXRlcj46OgogICAgZG9fZ2V0X3RpbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg
X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgIHsKICAgICAgX0NoYXJUIF9fd2NzWzNdOwogICAg
ICBjb25zdCBjaGFyKiBfX2NzID0gIiVYIjsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRs
b2MoKTsKICAgICAgY3R5cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlw
ZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyAzLCBf
X3djcyk7CiAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9f
ZXJyLCBfX3RtLCBfX3djcyk7CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2Vy
ciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIHRp
bWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X2RhdGUoaXRlcl90eXBlIF9fYmVn
LCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgaW9zX2Jh
c2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgIHsKICAgICAgX0NoYXJUIF9f
d2NzWzNdOwogICAgICBjb25zdCBjaGFyKiBfX2NzID0gIiV4IjsKICAgICAgbG9jYWxlIF9fbG9j
ID0gX19pby5nZXRsb2MoKTsKICAgICAgY3R5cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVz
ZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfX2N0eXBlLndpZGVuKF9fY3Ms
IF9fY3MgKyAzLCBfX3djcyk7CiAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19l
bmQsIF9faW8sIF9fZXJyLCBfX3RtLCBfX3djcyk7CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkK
ICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9J
bkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X3dlZWtkYXko
aXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg
ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAg
IHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CiAgICAg
IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIF9fdGltZXB1bmN0PF9DaGFyVD4g
Y29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAg
ICAgY29uc3QgY2hhcl90eXBlKiBfX2RheXNbN107CiAgICAgIF9fdHAuX01fZGF5c19hYmJyZXZp
YXRlZChfX2RheXMpOwogICAgICBpbnQgX190bXB3ZGF5OwogICAgICBfTV9leHRyYWN0X25hbWUo
X19iZWcsIF9fZW5kLCBfX3RtcHdkYXksIF9fZGF5cywgNywgX19lcnIpOwoKCgoKCgoKICAgICAg
aWYgKCFfX2VycikKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19wb3MgPSBfX3RyYWl0c190
eXBlOjpsZW5ndGgoX19kYXlzW19fdG1wd2RheV0pOwogICAgICAgICAgX190cC5fTV9kYXlzKF9f
ZGF5cyk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbmFtZSA9IF9fZGF5c1tfX3RtcHdk
YXldOwogICAgICAgICAgaWYgKF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQogICAgICAgICAgICB7
CgogICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0
aChfX25hbWUpOwogICAgICAgICAgICAgIHdoaWxlIChfX3BvcyA8IF9fbGVuICYmIF9fYmVnICE9
IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICYmIF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQog
ICAgICAgICAgICAgICAgKytfX2JlZywgKytfX3BvczsKICAgICAgICAgICAgICBpZiAoX19sZW4g
IT0gX19wb3MpCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAg
ICAgICAgICAgfQogICAgICAgICAgaWYgKCFfX2VycikKICAgICAgICAgICAgX190bS0+dG1fd2Rh
eSA9IF9fdG1wd2RheTsKICAgICAgICB9CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAg
ICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVy
CiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF9tb250aG5hbWUoaXRl
cl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsCiAgICAgICAgICAgICAgICAgICAgIGlvc19i
YXNlJiBfX2lvLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAg
ewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAgICAg
bG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPiBj
b25zdCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAg
ICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhzWzEyXTsKICAgICAgX190cC5fTV9tb250aHNfYWJi
cmV2aWF0ZWQoX19tb250aHMpOwogICAgICBpbnQgX190bXBtb247CiAgICAgIF9NX2V4dHJhY3Rf
bmFtZShfX2JlZywgX19lbmQsIF9fdG1wbW9uLCBfX21vbnRocywgMTIsIF9fZXJyKTsKCgoKCgoK
CiAgICAgIGlmICghX19lcnIpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fcG9zID0gX190
cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbW9udGhzW19fdG1wbW9uXSk7CiAgICAgICAgICBfX3RwLl9N
X21vbnRocyhfX21vbnRocyk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbmFtZSA9IF9f
bW9udGhzW19fdG1wbW9uXTsKICAgICAgICAgIGlmIChfX25hbWVbX19wb3NdID09ICpfX2JlZykK
ICAgICAgICAgICAgewoKICAgICAgICAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3RyYWl0
c190eXBlOjpsZW5ndGgoX19uYW1lKTsKICAgICAgICAgICAgICB3aGlsZSAoX19wb3MgPCBfX2xl
biAmJiBfX2JlZyAhPSBfX2VuZAogICAgICAgICAgICAgICAgICAgICAmJiBfX25hbWVbX19wb3Nd
ID09ICpfX2JlZykKICAgICAgICAgICAgICAgICsrX19iZWcsICsrX19wb3M7CiAgICAgICAgICAg
ICAgaWYgKF9fbGVuICE9IF9fcG9zKQogICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6
OmZhaWxiaXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmICghX19lcnIpCiAgICAgICAgICAg
IF9fdG0tPnRtX21vbiA9IF9fdG1wbW9uOwogICAgICAgIH0KCiAgICAgIGlmIChfX2JlZyA9PSBf
X2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19i
ZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K
ICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X3ll
YXIoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAg
ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAg
IHsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8
X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoKICAg
ICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgc2l6ZV90IF9faSA9IDA7CiAgICAgIHN0
cmluZyBfX2RpZ2l0czsKICAgICAgd2hpbGUgKF9faSA8IDQgJiYgX19iZWcgIT0gX19lbmQgJiYg
X19jdHlwZS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKSkKICAgICAgICB7CiAgICAgICAgICBf
X2RpZ2l0cyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIDApOwogICAgICAgICAgX19jID0gKigrK19f
YmVnKTsKICAgICAgICAgICsrX19pOwogICAgICAgIH0KICAgICAgaWYgKF9faSA9PSAyIHx8IF9f
aSA9PSA0KQogICAgICAgIHsKICAgICAgICAgIGxvbmcgX19sOwogICAgICAgICAgX19jb252ZXJ0
X3RvX3YoX19kaWdpdHMuY19zdHIoKSwgX19sLCBfX2VyciwgX1NfY19sb2NhbGUpOwogICAgICAg
ICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkgJiYgX19sIDw9IDIxNDc0ODM2NDcp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2wgPSBfX2kgPT0gMiA/IF9fbCA6IF9fbCAt
IDE5MDA7CiAgICAgICAgICAgICAgX190bS0+dG1feWVhciA9IHN0YXRpY19jYXN0PGludD4oX19s
KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlv
c19iYXNlOjpmYWlsYml0OwogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIg
fD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIHRp
bWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFz
ZSYgX19pbywgY2hhcl90eXBlLCBjb25zdCB0bSogX190bSwKICAgICAgICBjb25zdCBfQ2hhclQq
IF9fYmVnLCBjb25zdCBfQ2hhclQqIF9fZW5kKSBjb25zdAogICAgewogICAgICBsb2NhbGUgX19s
b2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0g
dXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIHdoaWxlIChfX2JlZyAhPSBf
X2VuZCkKICAgICAgICB7CiAgICAgICAgICBjaGFyIF9fYyA9IF9fY3R5cGUubmFycm93KCpfX2Jl
ZywgMCk7CiAgICAgICAgICArK19fYmVnOwogICAgICAgICAgaWYgKF9fYyA9PSAnJScpCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBjaGFyIF9fZm9ybWF0OwogICAgICAgICAgICAgIGNoYXIg
X19tb2QgPSAwOwogICAgICAgICAgICAgIHNpemVfdCBfX2xlbiA9IDE7CiAgICAgICAgICAgICAg
X19jID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKTsKICAgICAgICAgICAgICArK19fYmVnOwog
ICAgICAgICAgICAgIGlmIChfX2MgPT0gJ0UnIHx8IF9fYyA9PSAnTycpCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgIF9fbW9kID0gX19jOwogICAgICAgICAgICAgICAgICBfX2Zv
cm1hdCA9IF9fY3R5cGUubmFycm93KCpfX2JlZywgMCk7CiAgICAgICAgICAgICAgICAgICsrX19i
ZWc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
X19mb3JtYXQgPSBfX2M7CiAgICAgICAgICAgICAgX19zID0gdGhpcy0+ZG9fcHV0KF9fcywgX19p
bywgY2hhcl90eXBlKCksIF9fdG0sIF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX21vZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ewogICAgICAgICAgICAgICpfX3MgPSBfX2M7CiAgICAgICAgICAgICAgKytfX3M7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgdGltZV9wdXQ8
X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBf
X2lvLCBjaGFyX3R5cGUsIGNvbnN0IHRtKiBfX3RtLAogICAgICAgICAgIGNoYXIgX19mb3JtYXQs
IGNoYXIgX19tb2QpIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9j
KCk7CiAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3QmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8
X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPiBjb25zdCYgX190cCA9
IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwoKCgogICAgICBjb25zdCBz
aXplX3QgX19tYXhsZW4gPSA2NDsKICAgICAgY2hhcl90eXBlKiBfX3JlcyA9CiAgICAgICAgc3Rh
dGljX2Nhc3Q8Y2hhcl90eXBlKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoY2hhcl90eXBlKSAq
IF9fbWF4bGVuKSk7CgoKCgoKCiAgICAgIGNoYXJfdHlwZSBfX2ZtdFs0XTsKICAgICAgX19mbXRb
MF0gPSBfX2N0eXBlLndpZGVuKCclJyk7CiAgICAgIGlmICghX19tb2QpCiAgICAgICAgewogICAg
ICAgICAgX19mbXRbMV0gPSBfX2Zvcm1hdDsKICAgICAgICAgIF9fZm10WzJdID0gY2hhcl90eXBl
KCk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX19mbXRbMV0gPSBf
X21vZDsKICAgICAgICAgIF9fZm10WzJdID0gX19mb3JtYXQ7CiAgICAgICAgICBfX2ZtdFszXSA9
IGNoYXJfdHlwZSgpOwogICAgICAgIH0KCiAgICAgIF9fdHAuX01fcHV0KF9fcmVzLCBfX21heGxl
biwgX19mbXQsIF9fdG0pOwoKCiAgICAgIHNpemVfdCBfX2xlbiA9IGNoYXJfdHJhaXRzPGNoYXJf
dHlwZT46Omxlbmd0aChfX3Jlcyk7CiAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9f
bGVuOyArK19faSwgKytfX3MpCiAgICAgICAgKl9fcyA9IF9fcmVzW19faV07CiAgICAgIHJldHVy
biBfX3M7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW50CiAgICBj
b2xsYXRlPF9DaGFyVD46Ol9NX2NvbXBhcmUoY29uc3QgX0NoYXJUKiwgY29uc3QgX0NoYXJUKikg
Y29uc3QKICAgIHsgcmV0dXJuIDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IHNpemVfdAogICAgY29sbGF0ZTxfQ2hhclQ+OjpfTV90cmFuc2Zvcm0oX0NoYXJUKiwgY29uc3Qg
X0NoYXJUKiwgc2l6ZV90KSBjb25zdAogICAgeyByZXR1cm4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICBpbnQKICAgIGNvbGxhdGU8X0NoYXJUPjo6CiAgICBkb19jb21wYXJl
KGNvbnN0IF9DaGFyVCogX19sbzEsIGNvbnN0IF9DaGFyVCogX19oaTEsCiAgICAgICAgICAgICAg
IGNvbnN0IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNvbnN0CiAgICB7CiAg
ICAgIGNvbnN0IHN0cmluZ190eXBlIF9fb25lKF9fbG8xLCBfX2hpMSk7CiAgICAgIGNvbnN0IHN0
cmluZ190eXBlIF9fdHdvKF9fbG8yLCBfX2hpMik7CiAgICAgIHJldHVybiBfTV9jb21wYXJlKF9f
b25lLmNfc3RyKCksIF9fdHdvLmNfc3RyKCkpOwogICAgfQoKIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIHR5cGVuYW1lIGNvbGxhdGU8X0NoYXJUPjo6c3RyaW5nX3R5cGUKICAgIGNvbGxh
dGU8X0NoYXJUPjo6CiAgICBkb190cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBf
Q2hhclQqIF9faGkpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX2xlbiA9IChfX2hpIC0gX19s
bykgKiAyOwoKICAgICAgX0NoYXJUKiBfX2MgPQogICAgICAgIHN0YXRpY19jYXN0PF9DaGFyVCo+
KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX2xlbikpOwogICAgICBzaXplX3Qg
X19yZXMgPSBfTV90cmFuc2Zvcm0oX19jLCBfX2xvLCBfX2xlbik7CgogICAgICBpZiAoX19yZXMg
Pj0gX19sZW4pCiAgICAgICAgewogICAgICAgICAgX19jID0KICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIChfX3JlcyArIDEp
KSk7CiAgICAgICAgICBfTV90cmFuc2Zvcm0oX19jLCBfX2xvLCBfX3JlcyArIDEpOwogICAgICAg
IH0KICAgICAgcmV0dXJuIHN0cmluZ190eXBlKF9fYyk7CiAgICB9CgogdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgbG9uZwogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAgIGRvX2hhc2goY29u
c3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0CiAgICB7CiAgICAgIHVu
c2lnbmVkIGxvbmcgX192YWwgPSAwOwogICAgICBmb3IgKDsgX19sbyA8IF9faGk7ICsrX19sbykK
ICAgICAgICBfX3ZhbCA9ICpfX2xvICsgKChfX3ZhbCA8PCA3KSB8CiAgICAgICAgICAgICAgICAg
ICAgICAgKF9fdmFsID4+IChudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nPjo6ZGlnaXRzIC0g
NykpKTsKICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KF9fdmFsKTsKICAgIH0KCgoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1R2PgogICAgdm9pZAogICAgX19jb252ZXJ0X3RvX3YoY29uc3Qg
Y2hhciogX19pbiwgX1R2JiBfX291dCwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAg
ICAgICAgICAgICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jLCBpbnQgX19iYXNlID0gMTApOwoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CiAgICBpbnQKICAgIF9fY29udmVydF9mcm9tX3Yo
Y2hhciogX19vdXQsIGNvbnN0IGludCBfX3NpemUsIGNvbnN0IGNoYXIqIF9fZm10LAogICAgICAg
ICAgICAgICAgICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYyA9IC0x
KTsKIyAxOTkwICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIu
MS9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9fcGFkCiAgICB7CiAgICAgIHN0YXRpYyB2b2lk
CiAgICAgIF9TX3BhZChpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgX0NoYXJUKiBfX25l
d3MsCiAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fb2xkcywgY29uc3Qgc3RyZWFtc2l6ZSBf
X25ld2xlbiwKICAgICAgICAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19vbGRsZW4sIGNvbnN0IGJv
b2wgX19udW0pOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgdm9pZAogICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKGlvc19i
YXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9DaGFyVCogX19uZXdzLCBjb25zdCBfQ2hhclQqIF9fb2xkcywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJlYW1zaXplIF9fbmV3bGVuLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19vbGRsZW4sIGNvbnN0
IGJvb2wgX19udW0pCiAgICB7CiAgICAgIHNpemVfdCBfX3BsZW4gPSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KF9fbmV3bGVuIC0gX19vbGRsZW4pOwogICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19j
YXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3BsZW4pKTsK
ICAgICAgX1RyYWl0czo6YXNzaWduKF9fcGFkcywgX19wbGVuLCBfX2ZpbGwpOwoKICAgICAgX0No
YXJUKiBfX2JlZzsKICAgICAgX0NoYXJUKiBfX2VuZDsKICAgICAgc2l6ZV90IF9fbW9kID0gMDsK
ICAgICAgc2l6ZV90IF9fYmVnbGVuOwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19hZGp1c3Qg
PSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YWRqdXN0ZmllbGQ7CgogICAgICBpZiAoX19hZGp1
c3QgPT0gaW9zX2Jhc2U6OmxlZnQpCiAgICAgICAgewoKICAgICAgICAgIF9fYmVnID0gY29uc3Rf
Y2FzdDxfQ2hhclQqPihfX29sZHMpOwogICAgICAgICAgX19iZWdsZW4gPSBfX29sZGxlbjsKICAg
ICAgICAgIF9fZW5kID0gX19wYWRzOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19hZGp1c3Qg
PT0gaW9zX2Jhc2U6OmludGVybmFsICYmIF9fbnVtKQogICAgICAgIHsKCgoKICAgICAgICAgIGxv
Y2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+
JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgICAgICBj
b25zdCBfQ2hhclQgX19taW51cyA9IF9fY3R5cGUud2lkZW4oJy0nKTsKICAgICAgICAgIGNvbnN0
IF9DaGFyVCBfX3BsdXMgPSBfX2N0eXBlLndpZGVuKCcrJyk7CiAgICAgICAgICBib29sIF9fdGVz
dHNpZ24gPSBfVHJhaXRzOjplcShfX29sZHNbMF0sIF9fbWludXMpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8fCBfVHJhaXRzOjplcShfX29sZHNbMF0sIF9fcGx1cyk7CgogICAgICAgICAg
Ym9vbCBfX3Rlc3RoZXggPSBfVHJhaXRzOjplcShfX2N0eXBlLndpZGVuKCcwJyksIF9fb2xkc1sw
XSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKF9UcmFpdHM6OmVxKF9fY3R5cGUud2lk
ZW4oJ3gnKSwgX19vbGRzWzFdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgX1Ry
YWl0czo6ZXEoX19jdHlwZS53aWRlbignWCcpLCBfX29sZHNbMV0pKTsKICAgICAgICAgIGlmIChf
X3Rlc3RoZXgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX25ld3NbMF0gPSBfX29sZHNb
MF07CiAgICAgICAgICAgICAgX19uZXdzWzFdID0gX19vbGRzWzFdOwogICAgICAgICAgICAgIF9f
bW9kICs9IDI7CiAgICAgICAgICAgICAgX19uZXdzICs9IDI7CiAgICAgICAgICAgICAgX19iZWcg
PSBfX3BhZHM7CiAgICAgICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICAgICAg
X19lbmQgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyArIF9fbW9kKTsKICAgICAgICAgICAg
fQogICAgICAgICAgZWxzZSBpZiAoX190ZXN0c2lnbikKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIF9UcmFpdHM6OmVxKChfX25ld3NbMF0gPSBfX29sZHNbMF0pLCBfX3BsdXMpID8gX19wbHVz
IDogX19taW51czsKICAgICAgICAgICAgICArK19fbW9kOwogICAgICAgICAgICAgICsrX19uZXdz
OwogICAgICAgICAgICAgIF9fYmVnID0gX19wYWRzOwogICAgICAgICAgICAgIF9fYmVnbGVuID0g
X19wbGVuOwogICAgICAgICAgICAgIF9fZW5kID0gY29uc3RfY2FzdDxfQ2hhclQqPihfX29sZHMg
KyBfX21vZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewoKICAg
ICAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAgICAgICAgICBfX2JlZ2xlbiA9IF9fcGxl
bjsKICAgICAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19vbGRzKTsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKCiAgICAgICAgICBfX2Jl
ZyA9IF9fcGFkczsKICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVuOwogICAgICAgICAgX19lbmQg
PSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyk7CiAgICAgICAgfQogICAgICBfVHJhaXRzOjpj
b3B5KF9fbmV3cywgX19iZWcsIF9fYmVnbGVuKTsKICAgICAgX1RyYWl0czo6Y29weShfX25ld3Mg
KyBfX2JlZ2xlbiwgX19lbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdsZW4gLSBf
X2JlZ2xlbiAtIF9fbW9kKTsKICAgIH0KIyAyMDg1ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8z
LjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgYm9vbAogICAgX192ZXJpZnlfZ3JvdXBpbmcoY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyVD4mIF9fZ3JvdXBpbmcsCiAgICAgICAgICAgICAgICAgICAgICBi
YXNpY19zdHJpbmc8X0NoYXJUPiYgX19ncm91cGluZ190bXApCiAgICB7CiAgICAgIGludCBfX2kg
PSAwOwogICAgICBpbnQgX19qID0gMDsKICAgICAgY29uc3QgaW50IF9fbGVuID0gX19ncm91cGlu
Zy5zaXplKCk7CiAgICAgIGNvbnN0IGludCBfX24gPSBfX2dyb3VwaW5nX3RtcC5zaXplKCk7CiAg
ICAgIGJvb2wgX190ZXN0ID0gdHJ1ZTsKCgoKCiAgICAgIHdoaWxlIChfX3Rlc3QgJiYgX19pIDwg
X19uIC0gMSkKICAgICAgICBmb3IgKF9faiA9IDA7IF9fdGVzdCAmJiBfX2ogPCBfX2xlbiAmJiBf
X2kgPCBfX24gLSAxOyArK19faiwrK19faSkKICAgICAgICAgIF9fdGVzdCAmPSBfX2dyb3VwaW5n
W19fal0gPT0gX19ncm91cGluZ190bXBbX19uIC0gX19pIC0gMV07CgoKICAgICAgX19qID09IF9f
bGVuID8gX19qID0gMCA6IF9fajsKICAgICAgX190ZXN0ICY9IF9fZ3JvdXBpbmdbX19qXSA+PSBf
X2dyb3VwaW5nX3RtcFtfX24gLSBfX2kgLSAxXTsKICAgICAgcmV0dXJuIF9fdGVzdDsKICAgIH0K
CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBfQ2hhclQqCiAgICBfX2FkZF9n
cm91cGluZyhfQ2hhclQqIF9fcywgX0NoYXJUIF9fc2VwLAogICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciogX19nYmVnLCBjb25zdCBjaGFyKiBfX2dlbmQsCiAgICAgICAgICAgICAgICAgICBj
b25zdCBfQ2hhclQqIF9fZmlyc3QsIGNvbnN0IF9DaGFyVCogX19sYXN0KQogICAgewogICAgICBp
ZiAoX19sYXN0IC0gX19maXJzdCA+ICpfX2diZWcpCiAgICAgICAgewogICAgICAgICAgX19zID0g
X19hZGRfZ3JvdXBpbmcoX19zLCBfX3NlcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChfX2diZWcgKyAxID09IF9fZ2VuZCA/IF9fZ2JlZyA6IF9fZ2JlZyArIDEpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19nZW5kLCBfX2ZpcnN0LCBfX2xhc3QgLSAqX19nYmVnKTsK
ICAgICAgICAgIF9fZmlyc3QgPSBfX2xhc3QgLSAqX19nYmVnOwogICAgICAgICAgKl9fcysrID0g
X19zZXA7CiAgICAgICAgfQogICAgICBkbwogICAgICAgICpfX3MrKyA9ICpfX2ZpcnN0Kys7CiAg
ICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCk7CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgoK
CgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjsKICBleHRl
cm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjsKICBleHRlcm4gdGVtcGxh
dGUgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU8Y2hhciwgZmFsc2U+OwogIGV4dGVybiB0ZW1wbGF0
ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTxjaGFyLCB0cnVlPjsKICBleHRlcm4gdGVtcGxhdGUg
Y2xhc3MgbW9uZXlfZ2V0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leV9wdXQ8
Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0PGNoYXI+OwogIGV4dGVybiB0
ZW1wbGF0ZSBjbGFzcyBudW1wdW5jdF9ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs
YXNzIG51bV9nZXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9wdXQ8Y2hhcj47
CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9fdGltZXB1bmN0PGNoYXI+OwogIGV4dGVybiB0ZW1w
bGF0ZSBjbGFzcyB0aW1lX3B1dDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9w
dXRfYnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldDxjaGFyPjsK
ICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9nZXRfYnluYW1lPGNoYXI+OwogIGV4dGVybiB0
ZW1wbGF0ZSBjbGFzcyBtZXNzYWdlczxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVz
c2FnZXNfYnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjdHlwZV9ieW5hbWU8
Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvZGVjdnRfYnluYW1lPGNoYXIsIGNoYXIs
IG1ic3RhdGVfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvbGxhdGU8Y2hhcj47CiAgZXh0
ZXJuIHRlbXBsYXRlIGNsYXNzIGNvbGxhdGVfYnluYW1lPGNoYXI+OwoKICBleHRlcm4gdGVtcGxh
dGUKICAgIGNvbnN0IGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PiYKICAgIHVzZV9mYWNl
dDxjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0
ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBjb2xsYXRlPGNoYXI+JgogICAgdXNlX2ZhY2V0PGNvbGxh
dGU8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBu
dW1wdW5jdDxjaGFyPiYKICAgIHVzZV9mYWNldDxudW1wdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2Fs
ZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bV9wdXQ8Y2hhcj4mCiAgICB1c2Vf
ZmFjZXQ8bnVtX3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUK
ICAgIGNvbnN0IG51bV9nZXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bnVtX2dldDxjaGFyPiA+KGNv
bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5cHVuY3Q8Y2hh
ciwgdHJ1ZT4mCiAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDxjaGFyLCB0cnVlPiA+KGNvbnN0IGxv
Y2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5cHVuY3Q8Y2hhciwgZmFs
c2U+JgogICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+ID4oY29uc3QgbG9jYWxl
Jik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlfcHV0PGNoYXI+JgogICAgdXNl
X2ZhY2V0PG1vbmV5X3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxh
dGUKICAgIGNvbnN0IG1vbmV5X2dldDxjaGFyPiYKICAgIHVzZV9mYWNldDxtb25leV9nZXQ8Y2hh
cj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBfX3RpbWVw
dW5jdDxjaGFyPiYKICAgIHVzZV9mYWNldDxfX3RpbWVwdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2Fs
ZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IHRpbWVfcHV0PGNoYXI+JgogICAgdXNl
X2ZhY2V0PHRpbWVfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0
ZQogICAgY29uc3QgdGltZV9nZXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8dGltZV9nZXQ8Y2hhcj4g
Pihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtZXNzYWdlczxj
aGFyPiYKICAgIHVzZV9mYWNldDxtZXNzYWdlczxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl
eHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjdHlwZTxjaGFyPiA+KGNvbnN0
IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjb2Rl
Y3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRl
bXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8Y29sbGF0ZTxjaGFyPiA+KGNvbnN0IGxvY2Fs
ZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxudW1wdW5jdDxj
aGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhh
c19mYWNldDxudW1fcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0
ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsK
CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlwdW5jdDxjaGFy
PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19m
YWNldDxtb25leV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRl
CiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7
CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PF9fdGltZXB1bmN0PGNo
YXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFz
X2ZhY2V0PHRpbWVfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0
ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PHRpbWVfZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7
CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1lc3NhZ2VzPGNoYXI+
ID4oY29uc3QgbG9jYWxlJik7CiMgMjM5MCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEv
aW5jbHVkZS9jKysvMy4yLjEvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwp9CiMgNDcgIi91c3Iv
bG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2xvY2FsZSIgMiAzCiMg
MzggIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMv
b3N0cmVhbS50Y2MiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjpzZW50cnk6OgogICAgc2VudHJ5KGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29z
KQogICAgOiBfTV9vayhfX29zLmdvb2QoKSksIF9NX29zKF9fb3MpCiAgICB7CgogICAgICBpZiAo
X01fb2sgJiYgX19vcy50aWUoKSkKICAgICAgICBfX29zLnRpZSgpLT5mbHVzaCgpOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46OgogICAgb3BlcmF0b3I8PChfX29zdHJlYW1fdHlwZSYgKCpfX3BmKShfX29zdHJlYW1fdHlw
ZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikK
ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsgfQogICAg
ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo
dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg
ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlwZSYp
KQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAg
ICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsgfQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhp
cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg
IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6CiAgICBvcGVyYXRvcjw8KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikpCiAgICB7
CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK
ICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9CiAgICAgICAgICBjYXRj
aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNl
cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpv
cGVyYXRvcjw8KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbikKICAgIHsKICAgICAgc2VudHJ5IF9f
Y2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19zYmluKQogICAgICAgIHsKICAgICAg
ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCFfX2NvcHlfc3RyZWFtYnVm
cygqdGhpcywgX19zYmluLCB0aGlzLT5yZGJ1ZigpKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0
aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlmICghX19zYmluKQogICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6b3BlcmF0b3I8PChib29sIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp
cyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAg
ICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBf
X24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp
CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6
OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK
ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChsb25nIF9fbikK
ICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg
ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjaGFyX3R5cGUg
X19jID0gdGhpcy0+ZmlsbCgpOwogICAgICAgICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2Zt
dCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgICAgICAgIGlm
IChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgYm9vbCBfX2IgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgaWYgKChfX2ZtdCAm
IGlvc19iYXNlOjpvY3QpIHx8IChfX2ZtdCAmIGlvc19iYXNlOjpoZXgpKQogICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX19sID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKTsKICAgICAgICAgICAgICAgICAgICAgIF9fYiA9IF9N
X2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19sKS5mYWlsZWQoKTsKICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBf
X2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbikuZmFpbGVkKCk7CiAg
ICAgICAgICAgICAgICAgIGlmIChfX2IpCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAg
ICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo
KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg
ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz46Om9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBfX24pCiAgICB7CiAgICAgIHNlbnRy
eSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy
eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1w
dXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRo
aXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo
KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRv
cjw8KGxvbmcgbG9uZyBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAg
ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgY2hhcl90eXBlIF9fYyA9IHRoaXMtPmZpbGwoKTsKICAgICAgICAgICAgICBpb3Nf
YmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVs
ZDsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGJvb2wgX19iID0gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgIGlmICgoX19mbXQgJiBpb3NfYmFzZTo6b2N0KSB8fCAoX19mbXQgJiBpb3NfYmFzZTo6
aGV4KSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgX19sOwogICAgICAgICAgICAgICAgICAgICAgX19sID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgbG9uZyBsb25nPihfX24pOwogICAgICAgICAgICAgICAgICAgICAgX19iID0gX01f
Zm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX2wpLmZhaWxlZCgpOwogICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIF9f
YiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19uKS5mYWlsZWQoKTsKICAg
ICAgICAgICAgICAgICAgaWYgKF9fYikKICAgICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAg
ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo
dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg
ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPjo6b3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIGxvbmcgX19uKQogICAgewogICAgICBz
ZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAg
ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9m
bnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlz
LCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl
eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp
b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3Bl
cmF0b3I8PChkb3VibGUgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAg
ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAg
IGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFp
bGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg
ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0
KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGxvbmcgZG91YmxlIF9fbikK
ICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg
ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hl
Y2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0
KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAg
ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo
dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg
ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPjo6b3BlcmF0b3I8PChjb25zdCB2b2lkKiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBf
X2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQp
KQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMt
PmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv
biYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAm
IGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnB1dChjaGFyX3R5
cGUgX19jKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2Vy
YikKICAgICAgICB7CiAgICAgICAgICBpbnRfdHlwZSBfX3B1dCA9IHJkYnVmKCktPnNwdXRjKF9f
Yyk7CiAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fcHV0LCB0cmFpdHNf
dHlwZTo6ZW9mKCkpKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0
KTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojp3cml0ZShjb25zdCBf
Q2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo
aXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHN0cmVhbXNpemUgX19w
dXQgPSB0aGlzLT5yZGJ1ZigpLT5zcHV0bihfX3MsIF9fbik7CiAgICAgICAgICBpZiAoIF9fcHV0
ICE9IF9fbikKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg
ICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6Zmx1c2goKQogICAgewogICAg
ICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAg
ICAgICBpZiAodGhpcy0+cmRidWYoKSAmJiB0aGlzLT5yZGJ1ZigpLT5wdWJzeW5jKCkgPT0gLTEp
CiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgIH0K
ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46OnBvc190eXBlCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnRlbGxwKCkK
ICAgIHsKICAgICAgcG9zX3R5cGUgX19yZXQgPSBwb3NfdHlwZSgtMSk7CiAgICAgIGlmICghdGhp
cy0+ZmFpbCgpKQogICAgICAgIF9fcmV0ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZigwLCBp
b3NfYmFzZTo6Y3VyLCBpb3NfYmFzZTo6b3V0KTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+OjpzZWVrcChwb3NfdHlwZSBfX3BvcykKICAgIHsKICAgICAgaWYgKCF0aGlzLT5mYWlsKCkp
CiAgICAgICAgewoKCiAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1
YnNlZWtwb3MoX19wb3MsIGlvc19iYXNlOjpvdXQpOwoKCiAgICAgICAgICBpZiAoX19lcnIgPT0g
cG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmZhaWxiaXQpOwoKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK
ICAgIHNlZWtwKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2QpCiAgICB7CiAg
ICAgIGlmICghdGhpcy0+ZmFpbCgpKQogICAgICAgIHsKCgogICAgICAgICAgcG9zX3R5cGUgX19l
cnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKF9fb2ZmLCBfX2QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om91dCk7CgoK
ICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICAgIH0KICAgICAgcmV0
dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8
PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBfQ2hhclQgX19jKQogICAg
ewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1f
dHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQp
OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAg
ICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9j
YShzaXplb2YoX0NoYXJUKSAqIChfX3cgKyAxKSkpOwogICAgICAgICAgICAgIF9fcGFkc1swXSA9
IF9fYzsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gMTsKICAgICAgICAgICAgICBp
ZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFk
PF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19jLCBfX3cs
IF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcGFkcywgX19sZW4pOwogICAgICAg
ICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl
cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25z
KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgogIHRlbXBsYXRl
IDxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9w
ZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKQog
ICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4gX19vc3RyZWFt
X3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0
KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAg
ICAgICBjaGFyKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShf
X3cgKyAxKSk7CiAgICAgICAgICAgICAgX19wYWRzWzBdID0gX19jOwogICAgICAgICAgICAgIHN0
cmVhbXNpemUgX19sZW4gPSAxOwogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQ8Y2hhciwgX1RyYWl0cz46Ol9TX3Bh
ZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJl9fYywgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAg
ICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291
dC53cml0ZShfX3BhZHMsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAg
ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg
IHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBy
ZXR1cm4gX19vdXQ7CiAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRv
cjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IF9DaGFyVCog
X19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBf
X29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2Nl
cmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiICYmIF9fcykKICAgICAgICB7CiAgICAgICAgICB0
cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lk
dGgoKTsKICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+
KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKICAgICAgICAgICAgICBz
dHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX1RyYWl0czo6bGVuZ3Ro
KF9fcykpOwogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBf
X291dC5maWxsKCksIF9fcGFkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fcywgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICBf
X3MgPSBfX3BhZHM7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19sZW4pOwogICAgICAgICAgICAg
IF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m
IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9z
X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBp
b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIGVsc2UgaWYgKCFfX3MpCiAgICAgICAgX19vdXQuc2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwoKCgogICAgICB0eXBlZGVmIGNo
YXJfdHJhaXRzPGNoYXI+IF9fdHJhaXRzX3R5cGU7CgogICAgICB0eXBlbmFtZSBfX29zdHJlYW1f
dHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19zKQogICAg
ICAgIHsKICAgICAgICAgIHNpemVfdCBfX2NsZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19z
KTsKICAgICAgICAgIF9DaGFyVCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRp
bl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiAoX19jbGVuICsgMSkpKTsKICAgICAgICAgIGZvciAo
c2l6ZV90IF9faSA9IDA7IF9faSA8IF9fY2xlbjsgKytfX2kpCiAgICAgICAgICAgIF9fd3NbX19p
XSA9IF9fb3V0LndpZGVuKF9fc1tfX2ldKTsKICAgICAgICAgIF9DaGFyVCogX19zdHIgPSBfX3dz
OwoKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBf
X2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fY2xlbik7CiAgICAgICAgICAgICAgc3Ry
ZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIF9DaGFyVCogX19wYWRz
ID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAq
IF9fdykpOwoKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwg
X19vdXQuZmlsbCgpLCBfX3BhZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3dzLCBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAg
IF9fc3RyID0gX19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3N0ciwgX19sZW4pOwogICAgICAg
ICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl
cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25z
KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UgaWYgKCFfX3MpCiAgICAgICAgX19vdXQuc2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgogIHRl
bXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jgog
ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3Qg
Y2hhciogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0
cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkg
X19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX3MpCiAgICAgICAgewogICAgICAg
ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0
LndpZHRoKCk7CiAgICAgICAgICAgICAgY2hhciogX19wYWRzID0gc3RhdGljX2Nhc3Q8Y2hhcio+
KF9fYnVpbHRpbl9hbGxvY2EoX193KSk7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9
IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0aChfX3MpKTsKCiAgICAgICAg
ICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICBfX3BhZDxjaGFyLCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFk
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywg
X193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICBfX3MgPSBfX3BhZHM7CiAgICAg
ICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
IF9fb3V0LndyaXRlKF9fcywgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwog
ICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg
ICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg
ICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh
PSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg
IGVsc2UgaWYgKCFfX3MpCiAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mIF9fb3V0LAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+JiBfX3N0cikKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90
eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICBjb25zdCBfQ2hhclQqIF9fcyA9IF9fc3RyLmRhdGEoKTsKICAgICAgICAgIHN0cmVh
bXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3Rh
dGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fdykp
OwogICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9f
c3RyLnNpemUoKSk7CgoKCiAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQsIF9fb3V0
LmZpbGwoKSwgX19wYWRzLCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICBfX3MgPSBfX3BhZHM7
CiAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgIH0KICAgICAgICAgIHN0cmVh
bXNpemUgX19yZXMgPSBfX291dC5yZGJ1ZigpLT5zcHV0bihfX3MsIF9fbGVuKTsKICAgICAgICAg
IF9fb3V0LndpZHRoKDApOwogICAgICAgICAgaWYgKF9fcmVzICE9IF9fbGVuKQogICAgICAgICAg
ICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgfQogICAgICByZXR1
cm4gX19vdXQ7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19vc3RyZWFt
PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBlbmRsKG9zdHJlYW0mKTsKICBleHRl
cm4gdGVtcGxhdGUgb3N0cmVhbSYgZW5kcyhvc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9z
dHJlYW0mIGZsdXNoKG9zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0
b3I8PChvc3RyZWFtJiwgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9y
PDwob3N0cmVhbSYsIHVuc2lnbmVkIGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBv
cGVyYXRvcjw8KG9zdHJlYW0mLCBzaWduZWQgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJl
YW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IGNoYXIqKTsKICBleHRlcm4gdGVtcGxhdGUg
b3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3QgdW5zaWduZWQgY2hhciopOwogIGV4
dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjb25zdCBzaWduZWQg
Y2hhciopOwojIDcxMyAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysv
My4yLjEvYml0cy9vc3RyZWFtLnRjYyIgMwp9CiMgMjc2ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2dj
Yy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9vc3RyZWFtIiAyIDMKIyA3MSAiL3Vzci9sb2NhbC9w
cm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvaXRlcmF0b3IiIDIgMwojIDEgIi91
c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2lzdHJlYW0iIDEg
MwojIDQzICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9p
c3RyZWFtIiAzCgoKCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfaXN0cmVhbSA6IHZpcnR1YWwgcHVi
bGljIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0
eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6
aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5
cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgb2Zm
X3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBlZGVm
IGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAg
IHR5cGVkZWYgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4gX19pb3NfdHlwZTsKICAgICAgdHlw
ZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAg
IHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbWJ1
Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9nZXQ8X0NoYXJULCBfX2lzdHJlYW1idWZfaXRlcj4g
X19udW1nZXRfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsK
CiAgICBwcm90ZWN0ZWQ6CgogICAgICBzdHJlYW1zaXplIF9NX2djb3VudDsKCiAgICBwdWJsaWM6
CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pc3RyZWFtKF9fc3RyZWFtYnVmX3R5cGUqIF9f
c2IpCiAgICAgIHsKICAgICAgICB0aGlzLT5pbml0KF9fc2IpOwogICAgICAgIF9NX2djb3VudCA9
IHN0cmVhbXNpemUoMCk7CiAgICAgIH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX2lzdHJl
YW0oKQogICAgICB7IF9NX2djb3VudCA9IHN0cmVhbXNpemUoMCk7IH0KCgogICAgICBjbGFzcyBz
ZW50cnk7CiAgICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7CgoKCiAgICAgIF9faXN0cmVhbV90eXBl
JgogICAgICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBlJiAoKl9fcGYpKF9faXN0cmVhbV90eXBl
JikpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19pb3NfdHlwZSYg
KCpfX3BmKShfX2lvc190eXBlJikpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh
dG9yPj4oaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSk7CgoKICAgICAgX19pc3RyZWFtX3R5
cGUmCiAgICAgIG9wZXJhdG9yPj4oYm9vbCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgog
ICAgICBvcGVyYXRvcj4+KHNob3J0JiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAg
IG9wZXJhdG9yPj4odW5zaWduZWQgc2hvcnQmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYK
ICAgICAgb3BlcmF0b3I+PihpbnQmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAg
b3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAg
ICAgb3BlcmF0b3I+Pihsb25nJiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9w
ZXJhdG9yPj4odW5zaWduZWQgbG9uZyYgX19uKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAg
ICAgb3BlcmF0b3I+Pihsb25nIGxvbmcmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAg
ICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcmIF9fbik7CgoKICAgICAgX19pc3RyZWFt
X3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oZmxvYXQmIF9fZik7CgogICAgICBfX2lzdHJlYW1fdHlw
ZSYKICAgICAgb3BlcmF0b3I+Pihkb3VibGUmIF9fZik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYK
ICAgICAgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYgX19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBl
JgogICAgICBvcGVyYXRvcj4+KHZvaWQqJiBfX3ApOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAg
ICAgIG9wZXJhdG9yPj4oX19zdHJlYW1idWZfdHlwZSogX19zYik7CgoKICAgICAgaW5saW5lIHN0
cmVhbXNpemUKICAgICAgZ2NvdW50KHZvaWQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2djb3Vu
dDsgfQoKICAgICAgaW50X3R5cGUKICAgICAgZ2V0KHZvaWQpOwoKICAgICAgX19pc3RyZWFtX3R5
cGUmCiAgICAgIGdldChjaGFyX3R5cGUmIF9fYyk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAg
ICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0p
OwoKICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoY2hhcl90eXBlKiBfX3Ms
IHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT5nZXQoX19zLCBfX24sIHRoaXMt
PndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChfX3N0cmVh
bWJ1Zl90eXBlJiBfX3NiLCBjaGFyX3R5cGUgX19kZWxpbSk7CgogICAgICBpbmxpbmUgX19pc3Ry
ZWFtX3R5cGUmCiAgICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiKQogICAgICB7IHJldHVy
biB0aGlzLT5nZXQoX19zYiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lzdHJlYW1f
dHlwZSYKICAgICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJf
dHlwZSBfX2RlbGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0bGlu
ZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPmdl
dGxpbmUoX19zLCBfX24sIHRoaXMtPndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3RyZWFtX3R5
cGUmCiAgICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbiA9IDEsIGludF90eXBlIF9fZGVsaW0gPSB0
cmFpdHNfdHlwZTo6ZW9mKCkpOwoKICAgICAgaW50X3R5cGUKICAgICAgcGVlayh2b2lkKTsKCiAg
ICAgIF9faXN0cmVhbV90eXBlJgogICAgICByZWFkKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXpl
IF9fbik7CgogICAgICBzdHJlYW1zaXplCiAgICAgIHJlYWRzb21lKGNoYXJfdHlwZSogX19zLCBz
dHJlYW1zaXplIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgcHV0YmFjayhjaGFy
X3R5cGUgX19jKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICB1bmdldCh2b2lkKTsKCiAg
ICAgIGludAogICAgICBzeW5jKHZvaWQpOwoKICAgICAgcG9zX3R5cGUKICAgICAgdGVsbGcodm9p
ZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgc2Vla2cocG9zX3R5cGUpOwoKICAgICAg
X19pc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtnKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vla2Rpcik7
CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBjbGFzcyBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQogICAgewogICAg
cHVibGljOgogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYg
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gX19zdHJlYW1idWZfdHlwZTsKICAgICAg
dHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBl
X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgX19pbnRfdHlw
ZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHNlbnRyeShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mIF9faXMsIGJvb2wgX19ub3NraXB3cyA9IGZhbHNlKTsKCiAgICAgIG9wZXJhdG9yIGJv
b2woKSB7IHJldHVybiBfTV9vazsgfQoKICAgIHByaXZhdGU6CiAgICAgIGJvb2wgX01fb2s7CiAg
ICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKTsKCiAgdGVtcGxhdGU8Y2xh
c3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRv
cj4+KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXImIF9f
YykKICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciY+KF9fYykpOyB9
CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFp
dHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX2luLCBz
aWduZWQgY2hhciYgX19jKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxj
aGFyJj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+Pihi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCogX19zKTsKCiAgdGVt
cGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYKICAg
IG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JiBfX2luLCB1bnNpZ25lZCBj
aGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXIqPihf
X3MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxjaGFy
LF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mIF9f
aW4sIHNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9j
YXN0PGNoYXIqPihfX3MpKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW0KICAgIDogcHVibGljIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiwKICAgICAgcHVibGljIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKCgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFy
X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVk
ZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgoKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAg
YmFzaWNfaW9zdHJlYW0oYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpCiAg
ICAgIDogX19pc3RyZWFtX3R5cGUoX19zYiksIF9fb3N0cmVhbV90eXBlKF9fc2IpCiAgICAgIHsg
fQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfaW9zdHJlYW0oKSB7IH0KICAgIH07CgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICB3cyhiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mIF9faXMpOwp9CgoKCgoKIyAxICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNs
dWRlL2MrKy8zLjIuMS9iaXRzL2lzdHJlYW0udGNjIiAxIDMKIyAzNiAiL3Vzci9sb2NhbC9wcm9k
dWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9pc3RyZWFtLnRjYyIgMwoKCgoK
bmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnk6OgogICAgc2Vu
dHJ5KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgYm9vbCBfX25vc2tpcHdz
KQogICAgewogICAgICBpZiAoX19pbi5nb29kKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKF9f
aW4udGllKCkpCiAgICAgICAgICAgIF9faW4udGllKCktPmZsdXNoKCk7CiAgICAgICAgICBpZiAo
IV9fbm9za2lwd3MgJiYgKF9faW4uZmxhZ3MoKSAmIGlvc19iYXNlOjpza2lwd3MpKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBl
Ojplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1
ZigpOwogICAgICAgICAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAg
ICAgICAgICAgaWYgKF9faW4uX01fY2hlY2tfZmFjZXQoX19pbi5fTV9mY3R5cGUpKQogICAgICAg
ICAgICAgICAgd2hpbGUgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAg
ICAgICAgICAgICAgICAgICAgICAmJiBfX2luLl9NX2ZjdHlwZS0+aXMoY3R5cGVfYmFzZTo6c3Bh
Y2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWl0c190
eXBlOjp0b19jaGFyX3R5cGUoX19jKSkpCiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNu
ZXh0YygpOwoKCgogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19j
LCBfX2VvZikpCiAgICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQp
OwoKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgIGlmIChfX2luLmdvb2QoKSkKICAgICAg
ICBfTV9vayA9IHRydWU7CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfTV9vayA9IGZh
bHNlOwogICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAg
fQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihfX2lzdHJlYW1fdHlwZSYgKCpfX3BmKShfX2lz
dHJlYW1fdHlwZSYpKQogICAgewogICAgICBfX3BmKCp0aGlzKTsKICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5
cGUmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+OjoKICAgIG9wZXJhdG9yPj4oaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSkKICAgIHsK
ICAgICAgX19wZigqdGhpcyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9w
ZXJhdG9yPj4oYm9vbCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxz
ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0
YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQo
X01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0
aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAg
ICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAg
ICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg
ICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9
IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAg
cmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihzaG9ydCYgX19uKQogICAg
ewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAg
ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsK
ICAgICAgICAgICAgICBsb25nIF9fbDsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQo
X01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0
aGlzLCBfX2VyciwgX19sKTsKCgogICAgICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6
OmZhaWxiaXQpCiAgICAgICAgICAgICAgICAgICYmIChudW1lcmljX2xpbWl0czxzaG9ydD46Om1p
bigpIDw9IF9fbAogICAgICAgICAgICAgICAgICAgICAgJiYgX19sIDw9IG51bWVyaWNfbGltaXRz
PHNob3J0Pjo6bWF4KCkpKQogICAgICAgICAgICAgICAgX19uID0gX19sOwogICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNh
dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4
Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv
dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46
OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYgX19uKQogICAgewogICAgICBzZW50cnkg
X19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg
ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2Vy
ciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBp
ZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0
LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg
X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv
c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg
fQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+
PihpbnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAg
ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3Nf
YmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgbG9uZyBfX2w7CiAgICAgICAgICAgICAgaWYg
KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+
Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbCk7CgoKICAgICAgICAgICAgICBpZiAoIShf
X2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgICAgICAgICAmJiAobnVtZXJpY19s
aW1pdHM8aW50Pjo6bWluKCkgPD0gX19sCiAgICAgICAgICAgICAgICAgICAgICAmJiBfX2wgPD0g
bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQogICAgICAgICAgICAgICAgX19uID0gX19sOwog
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWls
Yml0OwoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp
ZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg
ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmIF9fbikKICAgIHsKICAg
ICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg
IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAg
X01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl
eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp
b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAg
IG9wZXJhdG9yPj4obG9uZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBm
YWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpp
b3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFj
ZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAs
ICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7
CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg
ICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK
ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp
ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25n
JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYg
KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6
Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkK
ICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBf
X24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg
ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihsb25nIGxvbmcmIF9fbikKICAgIHsKICAgICAg
c2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK
ICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01f
Zm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl
cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z
KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgIHRocm93OwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVy
YXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJi
KCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlv
c19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01f
Y2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQo
KnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWls
KQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl
OjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oZmxv
YXQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBp
ZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFz
ZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQp
KQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIs
IF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9
CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAg
ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAg
aWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAg
ICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oZG91YmxlJiBfX24pCiAgICB7CiAgICAgIHNl
bnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
IF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAg
ICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2Zu
dW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0
aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygp
ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVy
YXRvcj4+KGxvbmcgZG91YmxlJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMs
IGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6
Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19m
YWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywg
MCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJy
KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg
ICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp
dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHZvaWQqJiBfX24p
CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2Vy
YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2Ri
aXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAg
ICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwog
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhp
cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg
IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6CiAgICBvcGVyYXRvcj4+KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQpCiAgICB7CiAg
ICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgICBpZiAoX19jZXJiKQogICAg
ICAgICB7CiAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHN0cmVh
bXNpemUgX194dHJjdCA9IDA7CiAgICAgICAgICAgICAgIGlmIChfX3Nib3V0KQogICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbiA9IHRo
aXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgICAgICBfX3h0cmN0ID0gX19jb3B5X3N0cmVhbWJ1
ZnMoKnRoaXMsIF9fc2JpbiwgX19zYm91dCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICBpZiAoIV9fc2JvdXQgfHwgIV9feHRyY3QpCiAgICAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICAgfQogICAgICAgICAgIGNhdGNo
KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4
Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICAgdGhy
b3c7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5h
bWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldCh2b2lkKQogICAgewogICAgICBjb25zdCBp
bnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgaW50X3R5cGUgX19jID0g
X19lb2Y7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRy
dWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgX19jID0gdGhpcy0+cmRidWYoKS0+c2J1bXBjKCk7CgogICAgICAg
ICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAg
ICAgICAgICAgX01fZ2NvdW50ID0gMTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOwog
ICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg
ICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg
ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh
PSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg
IHJldHVybiBfX2M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXQoY2hhcl90eXBlJiBfX2MpCiAgICB7CiAg
ICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAg
ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAg
ICAgICAgICAgaW50X3R5cGUgX19idWZ2YWwgPSB0aGlzLT5yZGJ1ZigpLT5zYnVtcGMoKTsKCiAg
ICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19idWZ2YWwsIF9fZW9m
KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX01fZ2NvdW50ID0gMTsKICAg
ICAgICAgICAgICAgICAgX19jID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2J1ZnZhbCk7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAg
ICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsK
CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg
ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK
ICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1
cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUg
X19uLCBjaGFyX3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAg
c2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog
ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBf
X2lkZWxpbSA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgICAg
ICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAg
ICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBp
bnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAgICB3aGlsZSAoX01fZ2Nv
dW50ICsgMSA8IF9fbgogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2lu
dF90eXBlKF9fYywgX19lb2YpCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6
ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAg
ICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CiAgICAgICAgICAgICAgICAgICsrX01fZ2Nv
dW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFf
aW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf
X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z
X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICAqX19zID0gY2hhcl90eXBlKCk7CiAgICAgIGlmICghX01fZ2NvdW50
KQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNoYXJf
dHlwZSBfX2RlbGltKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19j
ZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0
cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0g
dHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgICAgIGNvbnN0IGlu
dF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFt
YnVmX3R5cGUqIF9fdGhpc19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5
cGUgX19jID0gX190aGlzX3NiLT5zZ2V0YygpOwogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2My
ID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwoKICAgICAgICAgICAgICB3aGlsZSAo
IXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICAg
ICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pCiAgICAgICAgICAg
ICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19zYi5zcHV0YyhfX2MyKSwg
X19lb2YpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsK
ICAgICAgICAgICAgICAgICAgX19jID0gX190aGlzX3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAg
ICAgICAgX19jMiA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19l
b2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAg
ICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAg
ICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg
ICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9
IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAg
aWYgKCFfTV9nY291bnQpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQp
OwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXRsaW5lKGNoYXJfdHlwZSog
X19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2dj
b3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19j
ZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
Y29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxp
bSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9m
KCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7
CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICAg
ICAgd2hpbGUgKF9NX2djb3VudCArIDEgPCBfX24KICAgICAgICAgICAgICAgICAgICAgJiYgIXRy
YWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICAgICAm
JiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAqX19zKysgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBl
KF9fYyk7CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAg
ICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAo
dHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBl
KF9fYywgX19pZGVsaW0pKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgIF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg
ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0
KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgICpfX3MgPSBjaGFyX3R5cGUoKTsKICAgICAgaWYgKCFfTV9nY291bnQpCiAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6CiAgICBpZ25vcmUoc3RyZWFtc2l6ZSBfX24sIGludF90eXBlIF9fZGVsaW0pCiAgICB7
CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwog
ICAgICBpZiAoX19jZXJiICYmIF9fbiA+IDApCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBl
Ojplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRi
dWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2M7CgogICAgICAgICAgICAgIF9fbiA9IG1p
bihfX24sIG51bWVyaWNfbGltaXRzPHN0cmVhbXNpemU+OjptYXgoKSk7CiAgICAgICAgICAgICAg
d2hpbGUgKF9NX2djb3VudCA8IF9fbgogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5
cGU6OmVxX2ludF90eXBlKF9fYyA9IF9fc2ItPnNidW1wYygpLCBfX2VvZikpCiAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgICBp
ZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19kZWxpbSkpCiAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190
eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl
cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z
KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+OjoKICAgIHBlZWsodm9pZCkKICAgIHsKICAgICAgaW50X3R5cGUgX19jID0gdHJh
aXRzX3R5cGU6OmVvZigpOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJi
KCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkK
ICAgICAgICAgICAgeyBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0YygpOyB9CiAgICAgICAgICBj
YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l
eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy
b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX2M7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
CiAgICByZWFkKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgX01f
Z2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChf
X2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBfTV9nY291bnQgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0bihfX3MsIF9fbik7CiAgICAgICAgICAg
ICAgaWYgKF9NX2djb3VudCAhPSBfX24pCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICB9CiAgICAg
ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0
aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg
ICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFt
c2l6ZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHJlYWRzb21lKGNo
YXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsK
ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg
ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgc3RyZWFtc2l6
ZSBfX251bSA9IHRoaXMtPnJkYnVmKCktPmluX2F2YWlsKCk7CiAgICAgICAgICAgICAgaWYgKF9f
bnVtID49IDApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fbnVtID0gbWlu
KF9fbnVtLCBfX24pOwogICAgICAgICAgICAgICAgICBpZiAoX19udW0pCiAgICAgICAgICAgICAg
ICAgICAgX01fZ2NvdW50ID0gdGhpcy0+cmRidWYoKS0+c2dldG4oX19zLCBfX251bSk7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4
Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv
bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9NX2djb3VudDsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAg
IHB1dGJhY2soY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywg
dHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjpl
b2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYo
KTsKICAgICAgICAgICAgICBpZiAoIV9fc2IKICAgICAgICAgICAgICAgICAgfHwgdHJhaXRzX3R5
cGU6OmVxX2ludF90eXBlKF9fc2ItPnNwdXRiYWNrYyhfX2MpLCBfX2VvZikpCiAgICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAg
ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo
dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg
ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6CiAgICB1bmdldCh2b2lkKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBz
ZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9f
ZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUq
IF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGlmICghX19zYgogICAgICAgICAg
ICAgICAgICB8fCB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19zYi0+c3VuZ2V0YygpLCBfX2Vv
ZikpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg
ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg
IHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBl
bHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1
cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGludAogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHN5
bmModm9pZCkKICAgIHsKICAgICAgaW50IF9fcmV0ID0gLTE7CiAgICAgIF9NX2djb3VudCA9IDA7
CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAg
ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19zdHJlYW1i
dWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaWYgKF9fc2IpCiAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmIChfX3NiLT5wdWJzeW5jKCkgPT0g
LTEpCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX3JldCA9IDA7CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg
X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv
c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg
fQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz46OnBvc190eXBlCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46OgogICAgdGVsbGcodm9pZCkKICAgIHsKICAgICAgcG9zX3R5cGUgX19yZXQgPSBwb3NfdHlw
ZSgtMSk7CiAgICAgIGlmICghdGhpcy0+ZmFpbCgpKQogICAgICAgIF9fcmV0ID0gdGhpcy0+cmRi
dWYoKS0+cHVic2Vla29mZigwLCBpb3NfYmFzZTo6Y3VyLCBpb3NfYmFzZTo6aW4pOwogICAgICBy
ZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vla2cocG9zX3R5cGUgX19wb3MpCiAgICB7
CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIGlmICghdGhpcy0+ZmFpbCgpKQogICAgICAgIHsK
CgogICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrcG9zKF9f
cG9zLCBpb3NfYmFzZTo6aW4pOwoKCiAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2Zm
X3R5cGUoLTEpKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQp
OwoKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNlZWtnKG9m
Zl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2RpcikKICAgIHsKICAgICAgX01fZ2Nv
dW50ID0gMDsKICAgICAgaWYgKCF0aGlzLT5mYWlsKCkpCiAgICAgICAgewoKCiAgICAgICAgICBw
b3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoX19vZmYsIF9fZGlyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19i
YXNlOjppbik7CgoKICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkp
KQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICAg
IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFy
VCYgX19jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBf
X2NlcmIoX19pbiwgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg
IHRyeQogICAgICAgICAgICB7IF9faW4uZ2V0KF9fYyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX2luLnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19pbi5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNl
OjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lu
LCBfQ2hhclQqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFt
X3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBfQ2hhclQg
Y2hhcl90eXBlOwogICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwogICAg
ICBzdHJlYW1zaXplIF9fZXh0cmFjdGVkID0gMDsKCiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90
eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBzdHJlYW1zaXpl
IF9fbnVtID0gX19pbi53aWR0aCgpOwogICAgICAgICAgICAgIGlmIChfX251bSA9PSAwKQogICAg
ICAgICAgICAgICAgX19udW0gPSBudW1lcmljX2xpbWl0czxzdHJlYW1zaXplPjo6bWF4KCk7Cgog
ICAgICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9mYWNldDxfX2N0
eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9f
ZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19z
YiA9IF9faW4ucmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0
YygpOwoKICAgICAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPCBfX251bSAtIDEKICAgICAg
ICAgICAgICAgICAgICAgJiYgIV9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCiAgICAg
ICAgICAgICAgICAgICAgICYmICFfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAqX19zKysgPSBfX2M7CiAgICAgICAg
ICAgICAgICAgICsrX19leHRyYWN0ZWQ7CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNu
ZXh0YygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChfVHJhaXRzOjplcV9p
bnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jh
c2U6OmVvZmJpdCk7CgoKCiAgICAgICAgICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOwoKICAgICAg
ICAgICAgICBfX2luLndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl
cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19pbi5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9faW4uZXhjZXB0aW9ucygp
ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICBpZiAoIV9fZXh0cmFjdGVkKQogICAgICAgIF9faW4uc2V0
c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gX19pbjsKICAgIH0KCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULF9UcmFpdHM+JgogICAgd3MoYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4m
IF9faW4pCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpf
X3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7CgogICAgICBjb25z
dCBfX2N0eXBlX3R5cGUmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8X19jdHlwZV90eXBlPihfX2luLmdl
dGxvYygpKTsKICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwog
ICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICBfX2ludF90
eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICB3aGlsZSAoIV9UcmFpdHM6OmVxX2ludF90
eXBlKF9fYywgX19lb2YpCiAgICAgICAgICAgICAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNw
YWNlLCBfX2MpKQogICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwoKICAgICAgIGlmIChfVHJh
aXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19i
YXNlOjplb2ZiaXQpOwoKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JiBfX2luLAogICAgICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cikKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5
cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6
c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3NpemVfdHlwZSBfX2V4dHJhY3RlZCA9IDA7
CgogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxz
ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgX19zdHIuZXJhc2UoKTsK
ICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19pbi53aWR0aCgpOwogICAgICAgICAgX19zaXpl
X3R5cGUgX19uOwogICAgICAgICAgX19uID0gX193ID4gMCA/IHN0YXRpY19jYXN0PF9fc2l6ZV90
eXBlPihfX3cpIDogX19zdHIubWF4X3NpemUoKTsKCiAgICAgICAgICBjb25zdCBfX2N0eXBlX3R5
cGUmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8X19jdHlwZV90eXBlPihfX2luLmdldGxvYygpKTsKICAg
ICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAgICAg
IF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICBfX2ludF90
eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwg
X19uCiAgICAgICAgICAgICAgICAgJiYgIV9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2Yp
CiAgICAgICAgICAgICAgICAgJiYgIV9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYykp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0ciArPSBfVHJhaXRzOjp0b19jaGFyX3R5
cGUoX19jKTsKICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOwogICAgICAgICAgICAgIF9fYyA9
IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX1RyYWl0czo6ZXFf
aW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6
OmVvZmJpdCk7CiAgICAgICAgICBfX2luLndpZHRoKDApOwogICAgICAgIH0KCgogICAgICBpZiAo
IV9fZXh0cmFjdGVkKQogICAgICAgIF9faW4uc2V0c3RhdGUgKGlvc19iYXNlOjpmYWlsYml0KTsK
CiAgICAgIHJldHVybiBfX2luOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBf
X2luLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
X3N0ciwgX0NoYXJUIF9fZGVsaW0pCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f
aXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5
cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBf
X3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVf
dHlwZSBfX3NpemVfdHlwZTsKCiAgICAgIF9fc2l6ZV90eXBlIF9fZXh0cmFjdGVkID0gMDsKICAg
ICAgYm9vbCBfX3Rlc3RkZWxpbSA9IGZhbHNlOwogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlw
ZTo6c2VudHJ5IF9fY2VyYihfX2luLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7
CiAgICAgICAgICBfX3N0ci5lcmFzZSgpOwogICAgICAgICAgX19zaXplX3R5cGUgX19uID0gX19z
dHIubWF4X3NpemUoKTsKCiAgICAgICAgICBfX2ludF90eXBlIF9faWRlbGltID0gX1RyYWl0czo6
dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0g
X19pbi5yZGJ1ZigpOwogICAgICAgICAgX19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsK
ICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAg
ICAgIF9fdGVzdGRlbGltID0gX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSk7Cgog
ICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDw9IF9fbgogICAgICAgICAgICAgICAgICYmICFf
VHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICYmICFfX3Rl
c3RkZWxpbSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fc3RyICs9IF9UcmFpdHM6OnRv
X2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7CiAgICAgICAgICAg
ICAgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgX190ZXN0ZGVsaW0gPSBfVHJh
aXRzOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKTsKICAgICAgICAgICAgfQogICAgICAgICAg
aWYgKF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICBfX2luLnNl
dHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgIH0KICAgICAgaWYgKCFfX2V4dHJhY3Rl
ZCAmJiAhX190ZXN0ZGVsaW0pCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJp
dCk7CiAgICAgIHJldHVybiBfX2luOwogICAgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNs
YXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19pc3RyZWFtPF9DaGFy
VCxfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBf
X2luLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19z
dHIpCiAgICB7IHJldHVybiBnZXRsaW5lKF9faW4sIF9fc3RyLCBfX2luLndpZGVuKCdcbicpKTsg
fQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfaXN0cmVhbTxjaGFyPjsKICBleHRl
cm4gdGVtcGxhdGUgaXN0cmVhbSYgd3MoaXN0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3Ry
ZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBjaGFyJik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJl
YW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIGNoYXIqKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVh
bSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgdW5zaWduZWQgY2hhciYpOwogIGV4dGVybiB0ZW1wbGF0
ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBzaWduZWQgY2hhciYpOwogIGV4dGVybiB0
ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCB1bnNpZ25lZCBjaGFyKik7CiAg
ZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIHNpZ25lZCBjaGFy
Kik7CgoKCgoKCgp9CiMgMjk4ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRl
L2MrKy8zLjIuMS9pc3RyZWFtIiAyIDMKIyA3MiAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4y
LjEvaW5jbHVkZS9jKysvMy4yLjEvaXRlcmF0b3IiIDIgMwojIDEgIi91c3IvbG9jYWwvcHJvZHVj
dHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RyZWFtX2l0ZXJhdG9yLmgiIDEg
MwojIDM5ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9i
aXRzL3N0cmVhbV9pdGVyYXRvci5oIiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHAsIHR5cGVuYW1lIF9DaGFyVCA9IGNoYXIsCiAgICAgICAgICAgdHlwZW5hbWUgX1Ry
YWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sIHR5cGVuYW1lIF9EaXN0ID0gcHRyZGlmZl90Pgog
ICAgY2xhc3MgaXN0cmVhbV9pdGVyYXRvcgogICAgICA6IHB1YmxpYyBpdGVyYXRvcjxpbnB1dF9p
dGVyYXRvcl90YWcsIF9UcCwgX0Rpc3QsIGNvbnN0IF9UcCosIGNvbnN0IF9UcCY+CiAgICB7CiAg
ICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBf
VHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiBpc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgaXN0cmVhbV90eXBlKiBf
TV9zdHJlYW07CiAgICAgIF9UcCBfTV92YWx1ZTsKICAgICAgYm9vbCBfTV9vazsKCiAgICBwdWJs
aWM6CiAgICAgIGlzdHJlYW1faXRlcmF0b3IoKSA6IF9NX3N0cmVhbSgwKSwgX01fb2soZmFsc2Up
IHt9CgogICAgICBpc3RyZWFtX2l0ZXJhdG9yKGlzdHJlYW1fdHlwZSYgX19zKSA6IF9NX3N0cmVh
bSgmX19zKSB7IF9NX3JlYWQoKTsgfQoKICAgICAgaXN0cmVhbV9pdGVyYXRvcihjb25zdCBpc3Ry
ZWFtX2l0ZXJhdG9yJiBfX29iaikKICAgICAgOiBfTV9zdHJlYW0oX19vYmouX01fc3RyZWFtKSwg
X01fdmFsdWUoX19vYmouX01fdmFsdWUpLAogICAgICAgIF9NX29rKF9fb2JqLl9NX29rKQogICAg
ICB7IH0KCiAgICAgIGNvbnN0IF9UcCYKICAgICAgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4g
X01fdmFsdWU7IH0KCiAgICAgIGNvbnN0IF9UcCoKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsg
cmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogICAgICBpc3RyZWFtX2l0ZXJhdG9yJgogICAgICBv
cGVyYXRvcisrKCkKICAgICAgeyBfTV9yZWFkKCk7IHJldHVybiAqdGhpczsgfQoKICAgICAgaXN0
cmVhbV9pdGVyYXRvcgogICAgICBvcGVyYXRvcisrKGludCkKICAgICAgewogICAgICAgIGlzdHJl
YW1faXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgICAgICBfTV9yZWFkKCk7CiAgICAgICAgcmV0
dXJuIF9fdG1wOwogICAgICB9CgogICAgICBib29sCiAgICAgIF9NX2VxdWFsKGNvbnN0IGlzdHJl
YW1faXRlcmF0b3ImIF9feCkgY29uc3QKICAgICAgeyByZXR1cm4gKF9NX29rID09IF9feC5fTV9v
aykgJiYgKCFfTV9vayB8fCBfTV9zdHJlYW0gPT0gX194Ll9NX3N0cmVhbSk7fQoKICAgIHByaXZh
dGU6CiAgICAgIHZvaWQKICAgICAgX01fcmVhZCgpCiAgICAgIHsKICAgICAgICBfTV9vayA9IChf
TV9zdHJlYW0gJiYgKl9NX3N0cmVhbSkgPyB0cnVlIDogZmFsc2U7CiAgICAgICAgaWYgKF9NX29r
KQogICAgICAgICAgewogICAgICAgICAgICAqX01fc3RyZWFtID4+IF9NX3ZhbHVlOwogICAgICAg
ICAgICBfTV9vayA9ICpfTV9zdHJlYW0gPyB0cnVlIDogZmFsc2U7CiAgICAgICAgICB9CiAgICAg
IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfRGlzdD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv
cj09KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYg
X194LAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0NoYXJULCBf
VHJhaXRzLCBfRGlzdD4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5fTV9lcXVhbChfX3kpOyB9Cgog
IHRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3Mg
X0Rpc3Q+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBpc3RyZWFtX2l0ZXJh
dG9yPF9UcCwgX0NoYXJULCBfVHJhaXRzLCBfRGlzdD4mIF9feCwKICAgICAgICAgICAgICAgY29u
c3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9DaGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3kpCiAg
ICB7IHJldHVybiAhX194Ll9NX2VxdWFsKF9feSk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cCwgdHlwZW5hbWUgX0NoYXJUID0gY2hhciwKICAgICAgICAgICB0eXBlbmFtZSBfVHJhaXRzID0g
Y2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBvc3RyZWFtX2l0ZXJhdG9yCiAgICAgIDog
cHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZv
aWQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAg
ICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiBvc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgb3N0
cmVhbV90eXBlKiBfTV9zdHJlYW07CiAgICAgIGNvbnN0IF9DaGFyVCogX01fc3RyaW5nOwoKICAg
IHB1YmxpYzoKICAgICAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcykgOiBfTV9z
dHJlYW0oJl9fcyksIF9NX3N0cmluZygwKSB7fQoKICAgICAgb3N0cmVhbV9pdGVyYXRvcihvc3Ry
ZWFtX3R5cGUmIF9fcywgY29uc3QgX0NoYXJUKiBfX2MpCiAgICAgIDogX01fc3RyZWFtKCZfX3Mp
LCBfTV9zdHJpbmcoX19jKSB7IH0KCiAgICAgIG9zdHJlYW1faXRlcmF0b3IoY29uc3Qgb3N0cmVh
bV9pdGVyYXRvciYgX19vYmopCiAgICAgIDogX01fc3RyZWFtKF9fb2JqLl9NX3N0cmVhbSksIF9N
X3N0cmluZyhfX29iai5fTV9zdHJpbmcpIHsgfQoKICAgICAgb3N0cmVhbV9pdGVyYXRvciYKICAg
ICAgb3BlcmF0b3I9KGNvbnN0IF9UcCYgX192YWx1ZSkKICAgICAgewogICAgICAgICpfTV9zdHJl
YW0gPDwgX192YWx1ZTsKICAgICAgICBpZiAoX01fc3RyaW5nKSAqX01fc3RyZWFtIDw8IF9NX3N0
cmluZzsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIG9zdHJlYW1faXRlcmF0
b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBvc3RyZWFtX2l0
ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIG9zdHJl
YW1faXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQogICAg
fTsKfQojIDczICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIu
MS9pdGVyYXRvciIgMiAzCiMgMzMgImJpbWFwLmgiIDIKIyAxICIvdXNyL2xvY2FsL3Byb2R1Y3Rz
L2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9zZXQiIDEgMwojIDY1ICIvdXNyL2xvY2FsL3By
b2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9zZXQiIDMKCiMgMSAiL3Vzci9sb2Nh
bC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfdHJlZS5oIiAx
IDMKIyA5MSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEv
Yml0cy9zdGxfdHJlZS5oIiAzCm5hbWVzcGFjZSBzdGQKewogIGVudW0gX1JiX3RyZWVfY29sb3Ig
eyBfTV9yZWQgPSBmYWxzZSwgX01fYmxhY2sgPSB0cnVlIH07CgogIHN0cnVjdCBfUmJfdHJlZV9u
b2RlX2Jhc2UKICB7CiAgICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZSogX0Jhc2VfcHRyOwoK
ICAgIF9SYl90cmVlX2NvbG9yIF9NX2NvbG9yOwogICAgX0Jhc2VfcHRyIF9NX3BhcmVudDsKICAg
IF9CYXNlX3B0ciBfTV9sZWZ0OwogICAgX0Jhc2VfcHRyIF9NX3JpZ2h0OwoKICAgIHN0YXRpYyBf
QmFzZV9wdHIKICAgIF9TX21pbmltdW0oX0Jhc2VfcHRyIF9feCkKICAgIHsKICAgICAgd2hpbGUg
KF9feC0+X01fbGVmdCAhPSAwKSBfX3ggPSBfX3gtPl9NX2xlZnQ7CiAgICAgIHJldHVybiBfX3g7
CiAgICB9CgogICAgc3RhdGljIF9CYXNlX3B0cgogICAgX1NfbWF4aW11bShfQmFzZV9wdHIgX194
KQogICAgewogICAgICB3aGlsZSAoX194LT5fTV9yaWdodCAhPSAwKSBfX3ggPSBfX3gtPl9NX3Jp
Z2h0OwogICAgICByZXR1cm4gX194OwogICAgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9W
YWw+CiAgICBzdHJ1Y3QgX1JiX3RyZWVfbm9kZSA6IHB1YmxpYyBfUmJfdHJlZV9ub2RlX2Jhc2UK
ICAgIHsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWw+KiBfTGlua190eXBlOwogICAg
ICBfVmFsIF9NX3ZhbHVlX2ZpZWxkOwogICAgfTsKCiAgc3RydWN0IF9SYl90cmVlX2Jhc2VfaXRl
cmF0b3IKICB7CiAgICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZTo6X0Jhc2VfcHRyIF9CYXNl
X3B0cjsKICAgIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0
ZWdvcnk7CiAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgogICAgX0Jhc2Vf
cHRyIF9NX25vZGU7CgogICAgdm9pZAogICAgX01faW5jcmVtZW50KCkKICAgIHsKICAgICAgaWYg
KF9NX25vZGUtPl9NX3JpZ2h0ICE9IDApCiAgICAgICAgewogICAgICAgICAgX01fbm9kZSA9IF9N
X25vZGUtPl9NX3JpZ2h0OwogICAgICAgICAgd2hpbGUgKF9NX25vZGUtPl9NX2xlZnQgIT0gMCkK
ICAgICAgICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9NX2xlZnQ7CiAgICAgICAgfQogICAgICBl
bHNlCiAgICAgICAgewogICAgICAgICAgX0Jhc2VfcHRyIF9feSA9IF9NX25vZGUtPl9NX3BhcmVu
dDsKICAgICAgICAgIHdoaWxlIChfTV9ub2RlID09IF9feS0+X01fcmlnaHQpCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBfTV9ub2RlID0gX195OwogICAgICAgICAgICAgIF9feSA9IF9feS0+
X01fcGFyZW50OwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX01fbm9kZS0+X01fcmlnaHQg
IT0gX195KQogICAgICAgICAgICBfTV9ub2RlID0gX195OwogICAgICAgIH0KICAgIH0KCiAgICB2
b2lkCiAgICBfTV9kZWNyZW1lbnQoKQogICAgewogICAgICBpZiAoX01fbm9kZS0+X01fY29sb3Ig
PT0gX01fcmVkCiAgICAgICAgICAmJiBfTV9ub2RlLT5fTV9wYXJlbnQtPl9NX3BhcmVudCA9PSBf
TV9ub2RlKQogICAgICAgIF9NX25vZGUgPSBfTV9ub2RlLT5fTV9yaWdodDsKICAgICAgZWxzZSBp
ZiAoX01fbm9kZS0+X01fbGVmdCAhPSAwKQogICAgICAgIHsKICAgICAgICAgIF9CYXNlX3B0ciBf
X3kgPSBfTV9ub2RlLT5fTV9sZWZ0OwogICAgICAgICAgd2hpbGUgKF9feS0+X01fcmlnaHQgIT0g
MCkKICAgICAgICAgICAgX195ID0gX195LT5fTV9yaWdodDsKICAgICAgICAgIF9NX25vZGUgPSBf
X3k7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX0Jhc2VfcHRyIF9f
eSA9IF9NX25vZGUtPl9NX3BhcmVudDsKICAgICAgICAgIHdoaWxlIChfTV9ub2RlID09IF9feS0+
X01fbGVmdCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICAg
ICAgICAgICAgX195ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIF9N
X25vZGUgPSBfX3k7CiAgICAgICAgfQogICAgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9W
YWwsIHR5cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9QdHI+CiAgICBzdHJ1Y3QgX1JiX3RyZWVfaXRl
cmF0b3IgOiBwdWJsaWMgX1JiX3RyZWVfYmFzZV9pdGVyYXRvcgogICAgewogICAgICB0eXBlZGVm
IF9WYWwgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBfUmVmIHJlZmVyZW5jZTsKICAgICAgdHlw
ZWRlZiBfUHRyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwg
X1ZhbCYsIF9WYWwqPiBpdGVyYXRvcjsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxf
VmFsLCBjb25zdCBfVmFsJiwgY29uc3QgX1ZhbCo+CiAgICAgIGNvbnN0X2l0ZXJhdG9yOwogICAg
ICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9SZWYsIF9QdHI+IF9TZWxmOwogICAg
ICB0eXBlZGVmIF9SYl90cmVlX25vZGU8X1ZhbD4qIF9MaW5rX3R5cGU7CgogICAgICBfUmJfdHJl
ZV9pdGVyYXRvcigpIHt9CiAgICAgIF9SYl90cmVlX2l0ZXJhdG9yKF9MaW5rX3R5cGUgX194KSB7
IF9NX25vZGUgPSBfX3g7IH0KICAgICAgX1JiX3RyZWVfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3Im
IF9faXQpIHsgX01fbm9kZSA9IF9faXQuX01fbm9kZTsgfQoKICAgICAgcmVmZXJlbmNlCiAgICAg
IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIF9MaW5rX3R5cGUoX01fbm9kZSktPl9NX3ZhbHVl
X2ZpZWxkOyB9CgogICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVy
biAmKG9wZXJhdG9yKigpKTsgfQoKICAgICAgX1NlbGYmCiAgICAgIG9wZXJhdG9yKysoKQogICAg
ICB7CiAgICAgICAgX01faW5jcmVtZW50KCk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9
CgogICAgICBfU2VsZgogICAgICBvcGVyYXRvcisrKGludCkKICAgICAgewogICAgICAgIF9TZWxm
IF9fdG1wID0gKnRoaXM7CiAgICAgICAgX01faW5jcmVtZW50KCk7CiAgICAgICAgcmV0dXJuIF9f
dG1wOwogICAgICB9CgogICAgICBfU2VsZiYKICAgICAgb3BlcmF0b3ItLSgpIHsgX01fZGVjcmVt
ZW50KCk7IHJldHVybiAqdGhpczsgfQoKICAgICAgX1NlbGYKICAgICAgb3BlcmF0b3ItLShpbnQp
CiAgICAgIHsKICAgICAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgICAgIF9NX2RlY3JlbWVu
dCgpOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQogIH07CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9WYWwsIHR5cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9QdHI+CiAgICBpbmxpbmUgYm9vbAog
ICAgb3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfUmVmLCBfUHRyPiYg
X194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfUmVmLCBf
UHRyPiYgX195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1ZhbD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNv
bnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIGNvbnN0IF9WYWwmLCBjb25zdCBfVmFsKj4mIF9f
eCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1ZhbCYsIF9W
YWwqPiYgX195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1ZhbD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNv
bnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9WYWwmLCBfVmFsKj4mIF9feCwKICAgICAgICAg
ICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29uc3QgX1ZhbCYsIGNvbnN0IF9W
YWwqPiYgX195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX1JlZiwgdHlwZW5hbWUgX1B0cj4KICAg
IGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWws
IF9SZWYsIF9QdHI+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9y
PF9WYWwsIF9SZWYsIF9QdHI+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSAhPSBfX3ku
X01fbm9kZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29uc3QgX1ZhbCYsIGNv
bnN0IF9WYWwqPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxf
VmFsLCBfVmFsJiwgX1ZhbCo+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSAhPSBfX3ku
X01fbm9kZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1ZhbCYsIF9WYWwqPiYg
X194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBjb25zdCBf
VmFsJiwgY29uc3QgX1ZhbCo+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSAhPSBfX3ku
X01fbm9kZTsgfQoKICBpbmxpbmUgdm9pZAogIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9SYl90cmVl
X25vZGVfYmFzZSogX194LCBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QpCiAgewogICAgX1Ji
X3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX3JpZ2h0OwogICAgX194LT5fTV9yaWdodCA9
IF9feS0+X01fbGVmdDsKICAgIGlmIChfX3ktPl9NX2xlZnQgIT0wKQogICAgICBfX3ktPl9NX2xl
ZnQtPl9NX3BhcmVudCA9IF9feDsKICAgIF9feS0+X01fcGFyZW50ID0gX194LT5fTV9wYXJlbnQ7
CgogICAgaWYgKF9feCA9PSBfX3Jvb3QpCiAgICAgIF9fcm9vdCA9IF9feTsKICAgIGVsc2UgaWYg
KF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCkKICAgICAgX194LT5fTV9wYXJlbnQtPl9N
X2xlZnQgPSBfX3k7CiAgICBlbHNlCiAgICAgIF9feC0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9f
eTsKICAgIF9feS0+X01fbGVmdCA9IF9feDsKICAgIF9feC0+X01fcGFyZW50ID0gX195OwogIH0K
CiAgaW5saW5lIHZvaWQKICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX1JiX3RyZWVfbm9kZV9iYXNl
KiBfX3gsIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKICB7CiAgICBfUmJfdHJlZV9ub2Rl
X2Jhc2UqIF9feSA9IF9feC0+X01fbGVmdDsKICAgIF9feC0+X01fbGVmdCA9IF9feS0+X01fcmln
aHQ7CiAgICBpZiAoX195LT5fTV9yaWdodCAhPSAwKQogICAgICBfX3ktPl9NX3JpZ2h0LT5fTV9w
YXJlbnQgPSBfX3g7CiAgICBfX3ktPl9NX3BhcmVudCA9IF9feC0+X01fcGFyZW50OwoKICAgIGlm
IChfX3ggPT0gX19yb290KQogICAgICBfX3Jvb3QgPSBfX3k7CiAgICBlbHNlIGlmIChfX3ggPT0g
X194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0KQogICAgICBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQg
PSBfX3k7CiAgICBlbHNlCiAgICAgIF9feC0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX195OwogICAg
X195LT5fTV9yaWdodCA9IF9feDsKICAgIF9feC0+X01fcGFyZW50ID0gX195OwogIH0KCiAgaW5s
aW5lIHZvaWQKICBfUmJfdHJlZV9yZWJhbGFuY2UoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gsIF9S
Yl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKICB7CiAgICBfX3gtPl9NX2NvbG9yID0gX01fcmVk
OwogICAgd2hpbGUgKF9feCAhPSBfX3Jvb3QKICAgICAgICAgICAmJiBfX3gtPl9NX3BhcmVudC0+
X01fY29sb3IgPT0gX01fcmVkKQogICAgICB7CiAgICAgICAgaWYgKF9feC0+X01fcGFyZW50ID09
IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2xlZnQpCiAgICAgICAgICB7CiAgICAgICAg
ICAgIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+
X01fcmlnaHQ7CiAgICAgICAgICAgIGlmIChfX3kgJiYgX195LT5fTV9jb2xvciA9PSBfTV9yZWQp
CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9y
ID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICBfX3ktPl9NX2NvbG9yID0gX01fYmxhY2s7CiAg
ICAgICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX3Jl
ZDsKICAgICAgICAgICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQ7CiAgICAg
ICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQpCiAgICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudDsKICAgICAgICAgICAg
ICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3gsIF9fcm9vdCk7CiAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX2JsYWNr
OwogICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBf
TV9yZWQ7CiAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX194LT5fTV9wYXJl
bnQtPl9NX3BhcmVudCwgX19yb290KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAg
ICAgZWxzZQogICAgICAgICAgewogICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9
IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgICAgICAgIGlmIChfX3kg
JiYgX195LT5fTV9jb2xvciA9PSBfTV9yZWQpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICBf
X3ktPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+
X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgIF9feCA9IF9feC0+
X01fcGFyZW50LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+
X01fbGVmdCkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIF9feCA9IF9f
eC0+X01fcGFyZW50OwogICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChf
X3gsIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF9feC0+X01f
cGFyZW50LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgX194LT5fTV9wYXJl
bnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICBfUmJfdHJl
ZV9yb3RhdGVfbGVmdChfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LCBfX3Jvb3QpOwogICAgICAg
ICAgICAgIH0KICAgICAgICAgIH0KICAgICAgfQogICAgX19yb290LT5fTV9jb2xvciA9IF9NX2Js
YWNrOwogIH0KCiAgaW5saW5lIF9SYl90cmVlX25vZGVfYmFzZSoKICBfUmJfdHJlZV9yZWJhbGFu
Y2VfZm9yX2VyYXNlKF9SYl90cmVlX25vZGVfYmFzZSogX196LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19sZWZ0bW9zdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcmlnaHRtb3N0KQog
IHsKICAgIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX196OwogICAgX1JiX3RyZWVfbm9kZV9i
YXNlKiBfX3ggPSAwOwogICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3hfcGFyZW50ID0gMDsKICAg
IGlmIChfX3ktPl9NX2xlZnQgPT0gMCkKICAgICAgX194ID0gX195LT5fTV9yaWdodDsKICAgIGVs
c2UKICAgICAgaWYgKF9feS0+X01fcmlnaHQgPT0gMCkKICAgICAgICBfX3ggPSBfX3ktPl9NX2xl
ZnQ7CiAgICAgIGVsc2UKICAgICAgICB7CgogICAgICAgICAgX195ID0gX195LT5fTV9yaWdodDsK
ICAgICAgICAgIHdoaWxlIChfX3ktPl9NX2xlZnQgIT0gMCkKICAgICAgICAgICAgX195ID0gX195
LT5fTV9sZWZ0OwogICAgICAgICAgX194ID0gX195LT5fTV9yaWdodDsKICAgICAgICB9CiAgICBp
ZiAoX195ICE9IF9feikKICAgICAgewoKICAgICAgICBfX3otPl9NX2xlZnQtPl9NX3BhcmVudCA9
IF9feTsKICAgICAgICBfX3ktPl9NX2xlZnQgPSBfX3otPl9NX2xlZnQ7CiAgICAgICAgaWYgKF9f
eSAhPSBfX3otPl9NX3JpZ2h0KQogICAgICAgICAgewogICAgICAgICAgICBfX3hfcGFyZW50ID0g
X195LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgIGlmIChfX3gpIF9feC0+X01fcGFyZW50ID0gX195
LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgIF9feS0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX194Owog
ICAgICAgICAgICBfX3ktPl9NX3JpZ2h0ID0gX196LT5fTV9yaWdodDsKICAgICAgICAgICAgX196
LT5fTV9yaWdodC0+X01fcGFyZW50ID0gX195OwogICAgICAgICAgfQogICAgICAgIGVsc2UKICAg
ICAgICAgIF9feF9wYXJlbnQgPSBfX3k7CiAgICAgICAgaWYgKF9fcm9vdCA9PSBfX3opCiAgICAg
ICAgICBfX3Jvb3QgPSBfX3k7CiAgICAgICAgZWxzZSBpZiAoX196LT5fTV9wYXJlbnQtPl9NX2xl
ZnQgPT0gX196KQogICAgICAgICAgX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7CiAgICAg
ICAgZWxzZQogICAgICAgICAgX196LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX195OwogICAgICAg
IF9feS0+X01fcGFyZW50ID0gX196LT5fTV9wYXJlbnQ7CiAgICAgICAgc3RkOjpzd2FwKF9feS0+
X01fY29sb3IsIF9fei0+X01fY29sb3IpOwogICAgICAgIF9feSA9IF9fejsKCiAgICAgIH0KICAg
IGVsc2UKICAgICAgewogICAgICAgIF9feF9wYXJlbnQgPSBfX3ktPl9NX3BhcmVudDsKICAgICAg
ICBpZiAoX194KQogICAgICAgICAgX194LT5fTV9wYXJlbnQgPSBfX3ktPl9NX3BhcmVudDsKICAg
ICAgICBpZiAoX19yb290ID09IF9feikKICAgICAgICAgIF9fcm9vdCA9IF9feDsKICAgICAgICBl
bHNlCiAgICAgICAgICBpZiAoX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPT0gX196KQogICAgICAg
ICAgICBfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feDsKICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgX196LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX194OwogICAgICAgIGlmIChfX2xlZnRt
b3N0ID09IF9feikKICAgICAgICAgIGlmIChfX3otPl9NX3JpZ2h0ID09IDApCiAgICAgICAgICAg
IF9fbGVmdG1vc3QgPSBfX3otPl9NX3BhcmVudDsKCiAgICAgICAgICBlbHNlCiAgICAgICAgICAg
IF9fbGVmdG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX194KTsKICAgICAg
ICBpZiAoX19yaWdodG1vc3QgPT0gX196KQogICAgICAgICAgaWYgKF9fei0+X01fbGVmdCA9PSAw
KQogICAgICAgICAgICBfX3JpZ2h0bW9zdCA9IF9fei0+X01fcGFyZW50OwoKICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgX19yaWdodG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGlt
dW0oX194KTsKICAgICAgfQogICAgaWYgKF9feS0+X01fY29sb3IgIT0gX01fcmVkKQogICAgICB7
CiAgICAgICAgd2hpbGUgKF9feCAhPSBfX3Jvb3QgJiYgKF9feCA9PSAwIHx8IF9feC0+X01fY29s
b3IgPT0gX01fYmxhY2spKQogICAgICAgICAgaWYgKF9feCA9PSBfX3hfcGFyZW50LT5fTV9sZWZ0
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3cgPSBf
X3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICAgICAgICBpZiAoX193LT5fTV9jb2xvciA9PSBf
TV9yZWQpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3Ig
PSBfTV9ibGFjazsKICAgICAgICAgICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfTV9y
ZWQ7CiAgICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feF9wYXJlbnQsIF9f
cm9vdCk7CiAgICAgICAgICAgICAgICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX3JpZ2h0OwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICgoX193LT5fTV9sZWZ0ID09IDAgfHwKICAg
ICAgICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPT0gX01fYmxhY2spICYmCiAg
ICAgICAgICAgICAgICAgIChfX3ctPl9NX3JpZ2h0ID09IDAgfHwKICAgICAgICAgICAgICAgICAg
IF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9NX2JsYWNrKSkKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAg
ICAgX194ID0gX194X3BhcmVudDsKICAgICAgICAgICAgICAgICAgX194X3BhcmVudCA9IF9feF9w
YXJlbnQtPl9NX3BhcmVudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmIChfX3ctPl9NX3JpZ2h0ID09IDAK
ICAgICAgICAgICAgICAgICAgICAgIHx8IF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9NX2Js
YWNrKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChfX3ct
Pl9NX2xlZnQpIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAg
ICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICAgICAgICBf
UmJfdHJlZV9yb3RhdGVfcmlnaHQoX193LCBfX3Jvb3QpOwogICAgICAgICAgICAgICAgICAgICAg
X193ID0gX194X3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX194X3BhcmVudC0+X01fY29sb3I7CiAgICAgICAg
ICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAg
ICAgIGlmIChfX3ctPl9NX3JpZ2h0KQogICAgICAgICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQt
Pl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9s
ZWZ0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKCiAg
ICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3cgPSBfX3hfcGFyZW50LT5fTV9sZWZ0
OwogICAgICAgICAgICAgIGlmIChfX3ctPl9NX2NvbG9yID09IF9NX3JlZCkKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAg
ICAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAg
ICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICAg
ICAgICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgaWYgKChfX3ctPl9NX3JpZ2h0ID09IDAgfHwKICAgICAgICAgICAgICAgICAgIF9f
dy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9NX2JsYWNrKSAmJgogICAgICAgICAgICAgICAgICAo
X193LT5fTV9sZWZ0ID09IDAgfHwKICAgICAgICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01f
Y29sb3IgPT0gX01fYmxhY2spKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBf
X3ctPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAgICAgICBfX3ggPSBfX3hfcGFyZW50
OwogICAgICAgICAgICAgICAgICBfX3hfcGFyZW50ID0gX194X3BhcmVudC0+X01fcGFyZW50Owog
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCA9PSAwIHx8IF9fdy0+X01fbGVmdC0+X01f
Y29sb3IgPT0gX01fYmxhY2spCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgaWYgKF9fdy0+X01fcmlnaHQpIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID0gX01fYmxh
Y2s7CiAgICAgICAgICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAg
ICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX193LCBfX3Jvb3QpOwogICAgICAg
ICAgICAgICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfX3hfcGFyZW50LT5fTV9j
b2xvcjsKICAgICAgICAgICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfTV9ibGFjazsK
ICAgICAgICAgICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCkKICAgICAgICAgICAgICAgICAgICBf
X3ctPl9NX2xlZnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICAgIF9SYl90
cmVlX3JvdGF0ZV9yaWdodChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIGlmIChfX3gpIF9f
eC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgfQogICAgcmV0dXJuIF9feTsKICB9CgoKCgoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jLCBib29sIF9TX2luc3Rh
bmNlbGVzcz4KICAgIGNsYXNzIF9SYl90cmVlX2FsbG9jX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoK
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46OmFsbG9jYXRv
cl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAgZ2V0X2Fs
bG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yOyB9CgogICAgICBfUmJf
dHJlZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICAgIDogX01fbm9k
ZV9hbGxvY2F0b3IoX19hKSwgX01faGVhZGVyKDApIHt9CgogICAgcHJvdGVjdGVkOgogICAgICB0
eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9SYl90cmVlX25vZGU8X1RwPiwgX0FsbG9jPjo6YWxsb2Nh
dG9yX3R5cGUKICAgICAgX01fbm9kZV9hbGxvY2F0b3I7CgogICAgICBfUmJfdHJlZV9ub2RlPF9U
cD4qIF9NX2hlYWRlcjsKCiAgICAgIF9SYl90cmVlX25vZGU8X1RwPioKICAgICAgX01fZ2V0X25v
ZGUoKSB7IHJldHVybiBfTV9ub2RlX2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsgfQoKICAgICAgdm9p
ZAogICAgICBfTV9wdXRfbm9kZShfUmJfdHJlZV9ub2RlPF9UcD4qIF9fcCkKICAgICAgeyBfTV9u
b2RlX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgMSk7IH0KICAgIH07CgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIF9SYl90cmVlX2FsbG9jX2Jh
c2U8X1RwLCBfQWxsb2MsIHRydWU+CiAgICB7CiAgICBwdWJsaWM6CiAgICB0eXBlZGVmIHR5cGVu
YW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3Jf
dHlwZTsKICAgICAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJu
IGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgICAgIF9SYl90cmVlX2FsbG9jX2Jhc2UoY29uc3QgYWxs
b2NhdG9yX3R5cGUmKSA6IF9NX2hlYWRlcigwKSB7fQoKICAgIHByb3RlY3RlZDoKICAgICAgX1Ji
X3RyZWVfbm9kZTxfVHA+KiBfTV9oZWFkZXI7CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxv
Y190cmFpdHM8X1JiX3RyZWVfbm9kZTxfVHA+LCBfQWxsb2M+OjpfQWxsb2NfdHlwZQogICAgICBf
QWxsb2NfdHlwZTsKCiAgICAgIF9SYl90cmVlX25vZGU8X1RwPioKICAgICAgX01fZ2V0X25vZGUo
KSB7IHJldHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoMSk7IH0KCiAgICAgIHZvaWQKICAgICAg
X01fcHV0X25vZGUoX1JiX3RyZWVfbm9kZTxfVHA+KiBfX3ApIHsgX0FsbG9jX3R5cGU6OmRlYWxs
b2NhdGUoX19wLCAxKTsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBzdHJ1Y3QgX1JiX3RyZWVfYmFzZSA6IHB1YmxpYyBfUmJfdHJlZV9hbGxv
Y19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Fs
bG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgIHsKICAgICAgdHlw
ZWRlZiBfUmJfdHJlZV9hbGxvY19iYXNlPF9UcCwKICAgICAgICBfQWxsb2MsIF9BbGxvY190cmFp
dHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+IF9CYXNlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgICAgIF9SYl90
cmVlX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgICAgOiBfQmFzZShfX2EpIHsg
X01faGVhZGVyID0gX01fZ2V0X25vZGUoKTsgfQogICAgICB+X1JiX3RyZWVfYmFzZSgpIHsgX01f
cHV0X25vZGUoX01faGVhZGVyKTsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXks
IHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1l
IF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X1ZhbD4gPgogICAgY2xhc3Mg
X1JiX3RyZWUgOiBwcm90ZWN0ZWQgX1JiX3RyZWVfYmFzZTxfVmFsLCBfQWxsb2M+CiAgICB7CiAg
ICAgIHR5cGVkZWYgX1JiX3RyZWVfYmFzZTxfVmFsLCBfQWxsb2M+IF9CYXNlOwoKICAgIHByb3Rl
Y3RlZDoKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9CYXNlX3B0cjsKICAgICAg
dHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWw+IF9SYl90cmVlX25vZGU7CgogICAgcHVibGljOgog
ICAgICB0eXBlZGVmIF9LZXkga2V5X3R5cGU7CiAgICAgIHR5cGVkZWYgX1ZhbCB2YWx1ZV90eXBl
OwogICAgICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3Qg
dmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZl
cmVuY2U7CiAgICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwog
ICAgICB0eXBlZGVmIF9SYl90cmVlX25vZGUqIF9MaW5rX3R5cGU7CiAgICAgIHR5cGVkZWYgc2l6
ZV90IHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5
cGU7CiAgICAgIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBf
QmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB1c2luZyBfQmFz
ZTo6X01fZ2V0X25vZGU7CiAgICAgIHVzaW5nIF9CYXNlOjpfTV9wdXRfbm9kZTsKICAgICAgdXNp
bmcgX0Jhc2U6Ol9NX2hlYWRlcjsKCiAgICAgIF9MaW5rX3R5cGUKICAgICAgX01fY3JlYXRlX25v
ZGUoY29uc3QgdmFsdWVfdHlwZSYgX194KQogICAgICB7CiAgICAgICAgX0xpbmtfdHlwZSBfX3Rt
cCA9IF9NX2dldF9ub2RlKCk7CiAgICAgICAgdHJ5CiAgICAgICAgICB7IF9Db25zdHJ1Y3QoJl9f
dG1wLT5fTV92YWx1ZV9maWVsZCwgX194KTsgfQogICAgICAgIGNhdGNoKC4uLikKICAgICAgICAg
IHsKICAgICAgICAgIF9NX3B1dF9ub2RlKF9fdG1wKTsKICAgICAgICAgIHRocm93OwogICAgICAg
ICAgfQogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKICAgICAgX0xpbmtfdHlwZQogICAg
ICBfTV9jbG9uZV9ub2RlKF9MaW5rX3R5cGUgX194KQogICAgICB7CiAgICAgICAgX0xpbmtfdHlw
ZSBfX3RtcCA9IF9NX2NyZWF0ZV9ub2RlKF9feC0+X01fdmFsdWVfZmllbGQpOwogICAgICAgIF9f
dG1wLT5fTV9jb2xvciA9IF9feC0+X01fY29sb3I7CiAgICAgICAgX190bXAtPl9NX2xlZnQgPSAw
OwogICAgICAgIF9fdG1wLT5fTV9yaWdodCA9IDA7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAg
ICB9CgogICAgICB2b2lkCiAgICAgIGRlc3Ryb3lfbm9kZShfTGlua190eXBlIF9fcCkKICAgICAg
ewogICAgICAgIF9EZXN0cm95KCZfX3AtPl9NX3ZhbHVlX2ZpZWxkKTsKICAgICAgICBfTV9wdXRf
bm9kZShfX3ApOwogICAgICB9CgogICAgICBzaXplX3R5cGUgX01fbm9kZV9jb3VudDsKICAgICAg
X0NvbXBhcmUgX01fa2V5X2NvbXBhcmU7CgogICAgICBfTGlua190eXBlJgogICAgICBfTV9yb290
KCkgY29uc3QgeyByZXR1cm4gKF9MaW5rX3R5cGUmKSBfTV9oZWFkZXItPl9NX3BhcmVudDsgfQoK
ICAgICAgX0xpbmtfdHlwZSYKICAgICAgX01fbGVmdG1vc3QoKSBjb25zdCB7IHJldHVybiAoX0xp
bmtfdHlwZSYpIF9NX2hlYWRlci0+X01fbGVmdDsgfQoKICAgICAgX0xpbmtfdHlwZSYKICAgICAg
X01fcmlnaHRtb3N0KCkgY29uc3QgeyByZXR1cm4gKF9MaW5rX3R5cGUmKSBfTV9oZWFkZXItPl9N
X3JpZ2h0OyB9CgogICAgICBzdGF0aWMgX0xpbmtfdHlwZSYKICAgICAgX1NfbGVmdChfTGlua190
eXBlIF9feCkgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX2xlZnQpOyB9CgogICAgICBz
dGF0aWMgX0xpbmtfdHlwZSYKICAgICAgX1NfcmlnaHQoX0xpbmtfdHlwZSBfX3gpIHsgcmV0dXJu
IChfTGlua190eXBlJikoX194LT5fTV9yaWdodCk7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBl
JgogICAgICBfU19wYXJlbnQoX0xpbmtfdHlwZSBfX3gpIHsgcmV0dXJuIChfTGlua190eXBlJiko
X194LT5fTV9wYXJlbnQpOyB9CgogICAgICBzdGF0aWMgcmVmZXJlbmNlCiAgICAgIF9TX3ZhbHVl
KF9MaW5rX3R5cGUgX194KSB7IHJldHVybiBfX3gtPl9NX3ZhbHVlX2ZpZWxkOyB9CgogICAgICBz
dGF0aWMgY29uc3QgX0tleSYKICAgICAgX1Nfa2V5KF9MaW5rX3R5cGUgX194KSB7IHJldHVybiBf
S2V5T2ZWYWx1ZSgpKF9TX3ZhbHVlKF9feCkpOyB9CgogICAgICBzdGF0aWMgX1JiX3RyZWVfY29s
b3ImCiAgICAgIF9TX2NvbG9yKF9MaW5rX3R5cGUgX194KSB7IHJldHVybiBfX3gtPl9NX2NvbG9y
OyB9CgogICAgICBzdGF0aWMgX0xpbmtfdHlwZSYKICAgICAgX1NfbGVmdChfQmFzZV9wdHIgX194
KSB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fbGVmdCk7IH0KCiAgICAgIHN0YXRpYyBf
TGlua190eXBlJgogICAgICBfU19yaWdodChfQmFzZV9wdHIgX194KSB7IHJldHVybiAoX0xpbmtf
dHlwZSYpKF9feC0+X01fcmlnaHQpOyB9CgogICAgICBzdGF0aWMgX0xpbmtfdHlwZSYKICAgICAg
X1NfcGFyZW50KF9CYXNlX3B0ciBfX3gpIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9w
YXJlbnQpOyB9CgogICAgICBzdGF0aWMgcmVmZXJlbmNlCiAgICAgIF9TX3ZhbHVlKF9CYXNlX3B0
ciBfX3gpIHsgcmV0dXJuICgoX0xpbmtfdHlwZSlfX3gpLT5fTV92YWx1ZV9maWVsZDsgfQoKICAg
ICAgc3RhdGljIGNvbnN0IF9LZXkmCiAgICAgIF9TX2tleShfQmFzZV9wdHIgX194KSB7IHJldHVy
biBfS2V5T2ZWYWx1ZSgpKF9TX3ZhbHVlKF9MaW5rX3R5cGUoX194KSkpO30KCiAgICAgIHN0YXRp
YyBfUmJfdHJlZV9jb2xvciYKICAgICAgX1NfY29sb3IoX0Jhc2VfcHRyIF9feCkgeyByZXR1cm4g
KF9MaW5rX3R5cGUoX194KS0+X01fY29sb3IpOyB9CgogICAgICBzdGF0aWMgX0xpbmtfdHlwZQog
ICAgICBfU19taW5pbXVtKF9MaW5rX3R5cGUgX194KQogICAgICB7IHJldHVybiAoX0xpbmtfdHlw
ZSkgX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19taW5pbXVtKF9feCk7IH0KCiAgICAgIHN0YXRpYyBf
TGlua190eXBlCiAgICAgIF9TX21heGltdW0oX0xpbmtfdHlwZSBfX3gpCiAgICAgIHsgcmV0dXJu
IChfTGlua190eXBlKSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX194KTsgfQoKICAg
IHB1YmxpYzoKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjx2YWx1ZV90eXBlLCByZWZl
cmVuY2UsIHBvaW50ZXI+IGl0ZXJhdG9yOwogICAgICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9y
PHZhbHVlX3R5cGUsIGNvbnN0X3JlZmVyZW5jZSwgY29uc3RfcG9pbnRlcj4KICAgICAgY29uc3Rf
aXRlcmF0b3I7CgogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+
IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxp
dGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICBwcml2YXRlOgogICAgICBpdGVyYXRvcgog
ICAgICBfTV9pbnNlcnQoX0Jhc2VfcHRyIF9feCwgX0Jhc2VfcHRyIF9feSwgY29uc3QgdmFsdWVf
dHlwZSYgX192KTsKCiAgICAgIF9MaW5rX3R5cGUKICAgICAgX01fY29weShfTGlua190eXBlIF9f
eCwgX0xpbmtfdHlwZSBfX3ApOwoKICAgICAgdm9pZAogICAgICBfTV9lcmFzZShfTGlua190eXBl
IF9feCk7CgogICAgcHVibGljOgoKICAgICAgX1JiX3RyZWUoKQogICAgICAgIDogX0Jhc2UoYWxs
b2NhdG9yX3R5cGUoKSksIF9NX25vZGVfY291bnQoMCksIF9NX2tleV9jb21wYXJlKCkKICAgICAg
eyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0KCiAgICAgIF9SYl90cmVlKGNvbnN0IF9Db21wYXJl
JiBfX2NvbXApCiAgICAgICAgOiBfQmFzZShhbGxvY2F0b3JfdHlwZSgpKSwgX01fbm9kZV9jb3Vu
dCgwKSwgX01fa2V5X2NvbXBhcmUoX19jb21wKQogICAgICB7IF9NX2VtcHR5X2luaXRpYWxpemUo
KTsgfQoKICAgICAgX1JiX3RyZWUoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwgY29uc3QgYWxsb2Nh
dG9yX3R5cGUmIF9fYSkKICAgICAgICA6IF9CYXNlKF9fYSksIF9NX25vZGVfY291bnQoMCksIF9N
X2tleV9jb21wYXJlKF9fY29tcCkKICAgICAgeyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0KCiAg
ICAgIF9SYl90cmVlKGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+JiBfX3gpCiAgICAgICAgOiBfQmFzZShfX3guZ2V0X2FsbG9jYXRvcigpKSwgX01f
bm9kZV9jb3VudCgwKSwKICAgICAgICAgICAgICAgICBfTV9rZXlfY29tcGFyZShfX3guX01fa2V5
X2NvbXBhcmUpCiAgICAgIHsKICAgICAgICBpZiAoX194Ll9NX3Jvb3QoKSA9PSAwKQogICAgICAg
ICAgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOwogICAgICAgIGVsc2UKICAgICAgICAgIHsKICAgICAg
ICAgICAgX1NfY29sb3IoX01faGVhZGVyKSA9IF9NX3JlZDsKICAgICAgICAgICAgX01fcm9vdCgp
ID0gX01fY29weShfX3guX01fcm9vdCgpLCBfTV9oZWFkZXIpOwogICAgICAgICAgICBfTV9sZWZ0
bW9zdCgpID0gX1NfbWluaW11bShfTV9yb290KCkpOwogICAgICAgICAgICBfTV9yaWdodG1vc3Qo
KSA9IF9TX21heGltdW0oX01fcm9vdCgpKTsKICAgICAgICAgIH0KICAgICAgICBfTV9ub2RlX2Nv
dW50ID0gX194Ll9NX25vZGVfY291bnQ7CiAgICAgIH0KCiAgICAgIH5fUmJfdHJlZSgpIHsgY2xl
YXIoKTsgfQoKICAgICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B
bGxvYz4mCiAgICAgIG9wZXJhdG9yPShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFs
dWUsX0NvbXBhcmUsX0FsbG9jPiYgX194KTsKCiAgICBwcml2YXRlOgogICAgICB2b2lkIF9NX2Vt
cHR5X2luaXRpYWxpemUoKQogICAgICB7CiAgICAgICAgX1NfY29sb3IoX01faGVhZGVyKSA9IF9N
X3JlZDsKCiAgICAgICAgX01fcm9vdCgpID0gMDsKICAgICAgICBfTV9sZWZ0bW9zdCgpID0gX01f
aGVhZGVyOwogICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01faGVhZGVyOwogICAgICB9CgogICAg
cHVibGljOgoKICAgICAgX0NvbXBhcmUKICAgICAga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBf
TV9rZXlfY29tcGFyZTsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgYmVnaW4oKSB7IHJldHVybiBf
TV9sZWZ0bW9zdCgpOyB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIF9NX2xlZnRtb3N0KCk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVuZCgpIHsg
cmV0dXJuIF9NX2hlYWRlcjsgfQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgZW5kKCkgY29u
c3QgeyByZXR1cm4gX01faGVhZGVyOyB9CgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJi
ZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CgogICAgICBjb25zdF9y
ZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X3JldmVy
c2VfaXRlcmF0b3IoZW5kKCkpOyB9CgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQo
KSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CgogICAgICBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQoKSBjb25zdCB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0
ZXJhdG9yKGJlZ2luKCkpOyB9CgogICAgICBib29sCiAgICAgIGVtcHR5KCkgY29uc3QgeyByZXR1
cm4gX01fbm9kZV9jb3VudCA9PSAwOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIF9NX25vZGVfY291bnQ7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBtYXhf
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZSgtMSk7IH0KCiAgICAgIHZvaWQKICAgICAg
c3dhcChfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX190
KQogICAgICB7CiAgICAgICAgc3RkOjpzd2FwKF9NX2hlYWRlciwgX190Ll9NX2hlYWRlcik7CiAg
ICAgICAgc3RkOjpzd2FwKF9NX25vZGVfY291bnQsIF9fdC5fTV9ub2RlX2NvdW50KTsKICAgICAg
ICBzdGQ6OnN3YXAoX01fa2V5X2NvbXBhcmUsIF9fdC5fTV9rZXlfY29tcGFyZSk7CiAgICAgIH0K
CgogICAgICBwYWlyPGl0ZXJhdG9yLGJvb2w+CiAgICAgIGluc2VydF91bmlxdWUoY29uc3QgdmFs
dWVfdHlwZSYgX194KTsKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydF9lcXVhbChjb25zdCB2
YWx1ZV90eXBlJiBfX3gpOwoKICAgICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0X3VuaXF1ZShpdGVy
YXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwoKICAgICAgaXRlcmF0b3IK
ICAgICAgaW5zZXJ0X2VxdWFsKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUm
IF9feCk7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgdm9p
ZAogICAgICBpbnNlcnRfdW5pcXVlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh
dG9yIF9fbGFzdCk7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAg
ICAgdm9pZAogICAgICBpbnNlcnRfZXF1YWwoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0
SXRlcmF0b3IgX19sYXN0KTsKCiAgICAgIHZvaWQKICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3Np
dGlvbik7CgogICAgICBzaXplX3R5cGUKICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCk7
CgogICAgICB2b2lkCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFz
dCk7CgogICAgICB2b2lkCiAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlKiBfX2ZpcnN0LCBjb25z
dCBrZXlfdHlwZSogX19sYXN0KTsKCiAgICAgIHZvaWQKICAgICAgY2xlYXIoKQogICAgICB7CiAg
ICAgICAgaWYgKF9NX25vZGVfY291bnQgIT0gMCkKICAgICAgICAgIHsKICAgICAgICAgICAgX01f
ZXJhc2UoX01fcm9vdCgpKTsKICAgICAgICAgICAgX01fbGVmdG1vc3QoKSA9IF9NX2hlYWRlcjsK
ICAgICAgICAgICAgX01fcm9vdCgpID0gMDsKICAgICAgICAgICAgX01fcmlnaHRtb3N0KCkgPSBf
TV9oZWFkZXI7CiAgICAgICAgICAgIF9NX25vZGVfY291bnQgPSAwOwogICAgICAgICAgfQogICAg
ICB9CgoKICAgICAgaXRlcmF0b3IKICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KTsKCiAg
ICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7
CgogICAgICBzaXplX3R5cGUKICAgICAgY291bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7
CgogICAgICBpdGVyYXRvcgogICAgICBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KTsK
CiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBf
X3gpIGNvbnN0OwoKICAgICAgaXRlcmF0b3IKICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5
cGUmIF9feCk7CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICB1cHBlcl9ib3VuZChjb25zdCBr
ZXlfdHlwZSYgX194KSBjb25zdDsKCiAgICAgIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+CiAgICAg
IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpOwoKICAgICAgcGFpcjxjb25zdF9pdGVy
YXRvciwgY29uc3RfaXRlcmF0b3I+CiAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBf
X3gpIGNvbnN0OwoKCiAgICAgIGJvb2wKICAgICAgX19yYl92ZXJpZnkoKSBjb25zdDsKICAgIH07
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlP
ZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tl
eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJf
dHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgewog
ICAgICByZXR1cm4gX194LnNpemUoKSA9PSBfX3kuc2l6ZSgpICYmCiAgICAgICAgZXF1YWwoX194
LmJlZ2luKCksIF9feC5lbmQoKSwgX195LmJlZ2luKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAg
ICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yPChjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUs
X0FsbG9jPiYgX194LAogICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5
T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7CiAgICAgIHJldHVybiBsZXhpY29n
cmFwaGljYWxfY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVl
LAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp
bmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFs
dWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxf
S2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4g
IShfX3ggPT0gX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFs
LCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlw
ZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBfUmJfdHJl
ZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAg
ICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
JiBfX3kpCiAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tl
eSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5h
bWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv
cjw9KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1
ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVl
LAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp
bmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFs
dWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxf
S2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogIHsgcmV0dXJuICEo
X194IDwgX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0
eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5h
bWUgX0FsbG9jPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAoX1JiX3RyZWU8X0tleSxfVmFsLF9L
ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgX1JiX3RyZWU8X0tleSxf
VmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsgX194LnN3YXAoX195
KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBf
S2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9j
PgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mCiAg
ICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBv
cGVyYXRvcj0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B
bGxvYz4mIF9feCkKICAgIHsKICAgICAgaWYgKHRoaXMgIT0gJl9feCkKICAgICAgICB7CgogICAg
ICAgICAgY2xlYXIoKTsKICAgICAgICAgIF9NX25vZGVfY291bnQgPSAwOwogICAgICAgICAgX01f
a2V5X2NvbXBhcmUgPSBfX3guX01fa2V5X2NvbXBhcmU7CiAgICAgICAgICBpZiAoX194Ll9NX3Jv
b3QoKSA9PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fcm9vdCgpID0gMDsKICAg
ICAgICAgICAgICBfTV9sZWZ0bW9zdCgpID0gX01faGVhZGVyOwogICAgICAgICAgICAgIF9NX3Jp
Z2h0bW9zdCgpID0gX01faGVhZGVyOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBfTV9yb290KCkgPSBfTV9jb3B5KF9feC5fTV9yb290KCks
IF9NX2hlYWRlcik7CiAgICAgICAgICAgICAgX01fbGVmdG1vc3QoKSA9IF9TX21pbmltdW0oX01f
cm9vdCgpKTsKICAgICAgICAgICAgICBfTV9yaWdodG1vc3QoKSA9IF9TX21heGltdW0oX01fcm9v
dCgpKTsKICAgICAgICAgICAgICBfTV9ub2RlX2NvdW50ID0gX194Ll9NX25vZGVfY291bnQ7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAg
ICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1l
IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRv
cgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Ogog
ICAgX01faW5zZXJ0KF9CYXNlX3B0ciBfX3hfLCBfQmFzZV9wdHIgX195XywgY29uc3QgX1ZhbCYg
X192KQogICAgewogICAgICBfTGlua190eXBlIF9feCA9IChfTGlua190eXBlKSBfX3hfOwogICAg
ICBfTGlua190eXBlIF9feSA9IChfTGlua190eXBlKSBfX3lfOwogICAgICBfTGlua190eXBlIF9f
ejsKCiAgICAgIGlmIChfX3kgPT0gX01faGVhZGVyIHx8IF9feCAhPSAwIHx8CiAgICAgICAgICBf
TV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3kpKSkKICAgICAgICB7
CiAgICAgICAgICBfX3ogPSBfTV9jcmVhdGVfbm9kZShfX3YpOwogICAgICAgICAgX1NfbGVmdChf
X3kpID0gX196OwoKICAgICAgICAgIGlmIChfX3kgPT0gX01faGVhZGVyKQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgX01fcm9vdCgpID0gX196OwogICAgICAgICAgICAgIF9NX3JpZ2h0bW9z
dCgpID0gX196OwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX3kgPT0gX01fbGVm
dG1vc3QoKSkKICAgICAgICAgICAgX01fbGVmdG1vc3QoKSA9IF9fejsKICAgICAgICB9CiAgICAg
IGVsc2UKICAgICAgICB7CiAgICAgICAgICBfX3ogPSBfTV9jcmVhdGVfbm9kZShfX3YpOwogICAg
ICAgICAgX1NfcmlnaHQoX195KSA9IF9fejsKCiAgICAgICAgICBpZiAoX195ID09IF9NX3JpZ2h0
bW9zdCgpKQogICAgICAgICAgICBfTV9yaWdodG1vc3QoKSA9IF9fejsKICAgICAgICB9CiAgICAg
IF9TX3BhcmVudChfX3opID0gX195OwogICAgICBfU19sZWZ0KF9feikgPSAwOwogICAgICBfU19y
aWdodChfX3opID0gMDsKICAgICAgX1JiX3RyZWVfcmViYWxhbmNlKF9feiwgX01faGVhZGVyLT5f
TV9wYXJlbnQpOwogICAgICArK19NX25vZGVfY291bnQ7CiAgICAgIHJldHVybiBpdGVyYXRvcihf
X3opOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBl
bmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUg
X0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21w
YXJlLF9BbGxvYz46Oml0ZXJhdG9yCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPjo6CiAgICBpbnNlcnRfZXF1YWwoY29uc3QgX1ZhbCYgX192KQogICAg
ewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICAgICAgX0xpbmtfdHlwZSBfX3gg
PSBfTV9yb290KCk7CiAgICAgIHdoaWxlIChfX3ggIT0gMCkKICAgICAgICB7CiAgICAgICAgICBf
X3kgPSBfX3g7CiAgICAgICAgICBfX3ggPSBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9f
diksIF9TX2tleShfX3gpKSA/CiAgICAgICAgICAgIF9TX2xlZnQoX194KSA6IF9TX3JpZ2h0KF9f
eCk7CiAgICAgICAgfQogICAgICByZXR1cm4gX01faW5zZXJ0KF9feCwgX195LCBfX3YpOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5
T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgog
ICAgcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUs
X0FsbG9jPjo6aXRlcmF0b3IsCiAgICBib29sPgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlP
ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgaW5zZXJ0X3VuaXF1ZShjb25zdCBfVmFsJiBf
X3YpCiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogICAgICBfTGlua190
eXBlIF9feCA9IF9NX3Jvb3QoKTsKICAgICAgYm9vbCBfX2NvbXAgPSB0cnVlOwogICAgICB3aGls
ZSAoX194ICE9IDApCiAgICAgICAgewogICAgICAgICAgX195ID0gX194OwogICAgICAgICAgX19j
b21wID0gX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX194KSk7CiAg
ICAgICAgICBfX3ggPSBfX2NvbXAgPyBfU19sZWZ0KF9feCkgOiBfU19yaWdodChfX3gpOwogICAg
ICAgIH0KICAgICAgaXRlcmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsKICAgICAgaWYgKF9fY29t
cCkKICAgICAgICBpZiAoX19qID09IGJlZ2luKCkpCiAgICAgICAgICByZXR1cm4gcGFpcjxpdGVy
YXRvcixib29sPihfTV9pbnNlcnQoX194LCBfX3ksIF9fdiksIHRydWUpOwogICAgICAgIGVsc2UK
ICAgICAgICAgIC0tX19qOwogICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fai5fTV9u
b2RlKSwgX0tleU9mVmFsdWUoKShfX3YpKSkKICAgICAgICByZXR1cm4gcGFpcjxpdGVyYXRvcixi
b29sPihfTV9pbnNlcnQoX194LCBfX3ksIF9fdiksIHRydWUpOwogICAgICByZXR1cm4gcGFpcjxp
dGVyYXRvcixib29sPihfX2osIGZhbHNlKTsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9L
ZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVu
YW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5
LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46Oml0ZXJhdG9yCiAgICBfUmJf
dHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgogICAgaW5z
ZXJ0X3VuaXF1ZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVmFsJiBfX3YpCiAgICB7CiAg
ICAgIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyLT5fTV9sZWZ0KQogICAgICAg
IHsKCiAgICAgICAgICBpZiAoc2l6ZSgpID4gMCAmJgogICAgICAgICAgICAgIF9NX2tleV9jb21w
YXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSkpKQogICAg
ICAgICAgICByZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5f
TV9ub2RlLCBfX3YpOwoKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIGluc2VydF91
bmlxdWUoX192KS5maXJzdDsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fcG9zaXRpb24uX01f
bm9kZSA9PSBfTV9oZWFkZXIpCiAgICAgICAgewoKICAgICAgICAgIGlmIChfTV9rZXlfY29tcGFy
ZShfU19rZXkoX01fcmlnaHRtb3N0KCkpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgICAgICAg
ICByZXR1cm4gX01faW5zZXJ0KDAsIF9NX3JpZ2h0bW9zdCgpLCBfX3YpOwogICAgICAgICAgZWxz
ZQogICAgICAgICAgICByZXR1cm4gaW5zZXJ0X3VuaXF1ZShfX3YpLmZpcnN0OwogICAgICAgIH0K
ICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIGl0ZXJhdG9yIF9fYmVmb3JlID0gX19wb3Np
dGlvbjsKICAgICAgICAgIC0tX19iZWZvcmU7CiAgICAgICAgICBpZiAoX01fa2V5X2NvbXBhcmUo
X1Nfa2V5KF9fYmVmb3JlLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpCiAgICAgICAgICAg
ICAgJiYgX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLF9TX2tleShfX3Bvc2l0aW9u
Ll9NX25vZGUpKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfU19yaWdodChfX2Jl
Zm9yZS5fTV9ub2RlKSA9PSAwKQogICAgICAgICAgICAgICAgcmV0dXJuIF9NX2luc2VydCgwLCBf
X2JlZm9yZS5fTV9ub2RlLCBfX3YpOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
IHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUs
IF9fdik7CgogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBp
bnNlcnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAg
ICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3Ry
ZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCiAgICBf
UmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBpbnNl
cnRfZXF1YWwoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1ZhbCYgX192KQogICAgewogICAg
ICBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hlYWRlci0+X01fbGVmdCkKICAgICAgICB7
CgogICAgICAgICAgaWYgKHNpemUoKSA+IDAgJiYKICAgICAgICAgICAgICAhX01fa2V5X2NvbXBh
cmUoX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSksIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAg
ICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9N
X25vZGUsIF9fdik7CgogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gaW5zZXJ0X2Vx
dWFsKF9fdik7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0g
X01faGVhZGVyKQogICAgICAgIHsKCiAgICAgICAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9LZXlP
ZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9NX3JpZ2h0bW9zdCgpKSkpCiAgICAgICAgICAgIHJldHVy
biBfTV9pbnNlcnQoMCwgX01fcmlnaHRtb3N0KCksIF9fdik7CiAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwoX192KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAg
ICAgICB7CiAgICAgICAgICBpdGVyYXRvciBfX2JlZm9yZSA9IF9fcG9zaXRpb247CiAgICAgICAg
ICAtLV9fYmVmb3JlOwogICAgICAgICAgaWYgKCFfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgp
KF9fdiksIF9TX2tleShfX2JlZm9yZS5fTV9ub2RlKSkKICAgICAgICAgICAgICAmJiAhX01fa2V5
X2NvbXBhcmUoX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBpZiAoX1NfcmlnaHQoX19iZWZvcmUuX01fbm9kZSkgPT0gMCkKICAgICAgICAgICAgICAg
IHJldHVybiBfTV9pbnNlcnQoMCwgX19iZWZvcmUuX01fbm9kZSwgX192KTsKICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICByZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9k
ZSwgX19wb3NpdGlvbi5fTV9ub2RlLCBfX3YpOwoKICAgICAgICAgICAgfQogICAgICAgICAgZWxz
ZQogICAgICAgICAgICByZXR1cm4gaW5zZXJ0X2VxdWFsKF9fdik7CiAgICAgICAgfQogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS29WLAog
ICAgICAgICAgIHR5cGVuYW1lIF9DbXAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPGNs
YXNzIF9JST4KICAgICAgdm9pZAogICAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tvVixfQ21wLF9B
bGxvYz46OgogICAgICBpbnNlcnRfZXF1YWwoX0lJIF9fZmlyc3QsIF9JSSBfX2xhc3QpCiAgICAg
IHsKICAgICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAg
ICBpbnNlcnRfZXF1YWwoKl9fZmlyc3QpOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9L
ZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9Lb1YsCiAgICAgICAgICAgdHlwZW5hbWUgX0Nt
cCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8Y2xhc3MgX0lJPgogICAgdm9pZAogICAg
X1JiX3RyZWU8X0tleSxfVmFsLF9Lb1YsX0NtcCxfQWxsb2M+OjoKICAgIGluc2VydF91bmlxdWUo
X0lJIF9fZmlyc3QsIF9JSSBfX2xhc3QpCiAgICB7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBf
X2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpbnNlcnRfdW5pcXVlKCpfX2ZpcnN0KTsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9m
VmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGlubGluZSB2b2lkCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUs
X0FsbG9jPjo6ZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKICAgIHsKICAgICAgX0xpbmtfdHlw
ZSBfX3kgPQogICAgICAgIChfTGlua190eXBlKSBfUmJfdHJlZV9yZWJhbGFuY2VfZm9yX2VyYXNl
KF9fcG9zaXRpb24uX01fbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfTV9oZWFkZXItPl9NX3BhcmVudCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9oZWFkZXItPl9NX2xlZnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01faGVhZGVyLT5fTV9y
aWdodCk7CiAgICAgIGRlc3Ryb3lfbm9kZShfX3kpOwogICAgICAtLV9NX25vZGVfY291bnQ7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9L
ZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs
bG9jPjo6c2l6ZV90eXBlCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBh
cmUsX0FsbG9jPjo6ZXJhc2UoY29uc3QgX0tleSYgX194KQogICAgewogICAgICBwYWlyPGl0ZXJh
dG9yLGl0ZXJhdG9yPiBfX3AgPSBlcXVhbF9yYW5nZShfX3gpOwogICAgICBzaXplX3R5cGUgX19u
ID0gZGlzdGFuY2UoX19wLmZpcnN0LCBfX3Auc2Vjb25kKTsKICAgICAgZXJhc2UoX19wLmZpcnN0
LCBfX3Auc2Vjb25kKTsKICAgICAgcmV0dXJuIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tvViwKICAgICAgICAgICB0eXBlbmFt
ZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwg
X1ZhbCwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46Ol9MaW5rX3R5cGUKICAgIF9SYl90cmVlPF9L
ZXksX1ZhbCxfS29WLF9Db21wYXJlLF9BbGxvYz46OgogICAgX01fY29weShfTGlua190eXBlIF9f
eCwgX0xpbmtfdHlwZSBfX3ApCiAgICB7CgogICAgICBfTGlua190eXBlIF9fdG9wID0gX01fY2xv
bmVfbm9kZShfX3gpOwogICAgICBfX3RvcC0+X01fcGFyZW50ID0gX19wOwoKICAgICAgdHJ5CiAg
ICAgICAgewogICAgICAgICAgaWYgKF9feC0+X01fcmlnaHQpCiAgICAgICAgICAgIF9fdG9wLT5f
TV9yaWdodCA9IF9NX2NvcHkoX1NfcmlnaHQoX194KSwgX190b3ApOwogICAgICAgICAgX19wID0g
X190b3A7CiAgICAgICAgICBfX3ggPSBfU19sZWZ0KF9feCk7CgogICAgICAgICAgd2hpbGUgKF9f
eCAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9j
bG9uZV9ub2RlKF9feCk7CiAgICAgICAgICAgICAgX19wLT5fTV9sZWZ0ID0gX195OwogICAgICAg
ICAgICAgIF9feS0+X01fcGFyZW50ID0gX19wOwogICAgICAgICAgICAgIGlmIChfX3gtPl9NX3Jp
Z2h0KQogICAgICAgICAgICAgICAgX195LT5fTV9yaWdodCA9IF9NX2NvcHkoX1NfcmlnaHQoX194
KSwgX195KTsKICAgICAgICAgICAgICBfX3AgPSBfX3k7CiAgICAgICAgICAgICAgX194ID0gX1Nf
bGVmdChfX3gpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAg
ICAgewogICAgICAgICAgX01fZXJhc2UoX190b3ApOwogICAgICAgICAgdGhyb3c7CiAgICAgICAg
fQogICAgICByZXR1cm4gX190b3A7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5
cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9D
b21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBfUmJfdHJlZTxfS2V5LF9WYWws
X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6X01fZXJhc2UoX0xpbmtfdHlwZSBfX3gpCiAg
ICB7CgogICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgewogICAgICAgICAgX01fZXJhc2Uo
X1NfcmlnaHQoX194KSk7CiAgICAgICAgICBfTGlua190eXBlIF9feSA9IF9TX2xlZnQoX194KTsK
ICAgICAgICAgIGRlc3Ryb3lfbm9kZShfX3gpOwogICAgICAgICAgX194ID0gX195OwogICAgICAg
IH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5h
bWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIHZvaWQKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+OjoKICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkK
ICAgIHsKICAgICAgaWYgKF9fZmlyc3QgPT0gYmVnaW4oKSAmJiBfX2xhc3QgPT0gZW5kKCkpCiAg
ICAgICAgY2xlYXIoKTsKICAgICAgZWxzZQogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFz
dCkgZXJhc2UoX19maXJzdCsrKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlw
ZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0Nv
bXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGVyYXNlKGNvbnN0IF9LZXkqIF9fZmly
c3QsIGNvbnN0IF9LZXkqIF9fbGFzdCkKICAgIHsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19s
YXN0KQogICAgICAgIGVyYXNlKCpfX2ZpcnN0KyspOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0
eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8
X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCiAgICBfUmJf
dHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6ZmluZChjb25zdCBf
S2V5JiBfX2spCiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogICAgICBf
TGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgICAgIHdoaWxlIChfX3ggIT0gMCkKICAgICAg
ICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAgICAgICAgX195ID0g
X194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAgICAgZWxzZQogICAgICAgICAgX194ID0gX1Nf
cmlnaHQoX194KTsKCiAgICAgIGl0ZXJhdG9yIF9faiA9IGl0ZXJhdG9yKF9feSk7CiAgICAgIHJl
dHVybiAoX19qID09IGVuZCgpIHx8IF9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9fai5fTV9u
b2RlKSkpID8KICAgICAgICBlbmQoKSA6IF9fajsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlw
ZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9L
ZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcgogICAg
X1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgZmlu
ZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01f
aGVhZGVyOwogICAgICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgICAgd2hpbGUgKF9f
eCAhPSAwKQogICAgICAgewogICAgICAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gp
LCBfX2spKQogICAgICAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKICAgICAgIH0KICAgICBjb25z
dF9pdGVyYXRvciBfX2ogPSBjb25zdF9pdGVyYXRvcihfX3kpOwogICAgIHJldHVybiAoX19qID09
IGVuZCgpIHx8IF9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9fai5fTV9ub2RlKSkpID8KICAg
ICAgIGVuZCgpIDogX19qOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFt
ZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFy
ZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlP
ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OnNpemVfdHlwZQogICAgX1JiX3RyZWU8X0tleSxfVmFs
LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgY291bnQoY29uc3QgX0tleSYgX19r
KSBjb25zdAogICAgewogICAgICBwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4g
X19wID0gZXF1YWxfcmFuZ2UoX19rKTsKICAgICAgc2l6ZV90eXBlIF9fbiA9IGRpc3RhbmNlKF9f
cC5maXJzdCwgX19wLnNlY29uZCk7CiAgICAgIHJldHVybiBfX247CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAg
ICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBf
UmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IK
ICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAg
IGxvd2VyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kg
PSBfTV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAgICAgd2hp
bGUgKF9feCAhPSAwKQogICAgICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9f
aykpCiAgICAgICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICAgICBlbHNl
CiAgICAgICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9f
eSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVu
YW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBh
cmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW
YWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGxvd2VyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykg
Y29uc3QKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5r
X3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIGlm
ICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCiAgICAgICAgICBfX3kgPSBfX3gs
IF9feCA9IF9TX2xlZnQoX194KTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3ggPSBfU19yaWdo
dChfX3gpOwoKICAgICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9feSk7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAog
ICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFt
ZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0
b3IKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoK
ICAgIHVwcGVyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykKICAgIHsKICAgICAgX0xpbmtfdHlwZSBf
X3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAgICAg
d2hpbGUgKF9feCAhPSAwKQogICAgICAgIGlmIChfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShf
X3gpKSkKICAgICAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgICAgIGVs
c2UKICAgICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CgogICAgICByZXR1cm4gaXRlcmF0b3Io
X195KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlw
ZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29t
cGFyZSxfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlP
ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgdXBwZXJfYm91bmQoY29uc3QgX0tleSYgX19r
KSBjb25zdAogICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICAgICAgX0xp
bmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAg
aWYgKF9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9feCkpKQogICAgICAgICAgX195ID0gX194
LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAgICAgZWxzZQogICAgICAgICAgX194ID0gX1Nfcmln
aHQoX194KTsKCiAgICAgIHJldHVybiBjb25zdF9pdGVyYXRvcihfX3kpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwK
ICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l
CiAgICBwYWlyPHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+OjppdGVyYXRvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1Zh
bCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcj4KICAgIF9SYl90cmVlPF9L
ZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGVxdWFsX3JhbmdlKGNv
bnN0IF9LZXkmIF9faykKICAgIHsgcmV0dXJuIHBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPihsb3dl
cl9ib3VuZChfX2spLCB1cHBlcl9ib3VuZChfX2spKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
S2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS29WLAogICAgICAgICAgIHR5cGVuYW1lIF9D
b21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgaW5saW5lCiAgcGFpcjx0eXBlbmFtZSBfUmJfdHJl
ZTxfS2V5LCBfVmFsLCBfS29WLCBfQ29tcGFyZSwgX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS29WLCBfQ29tcGFyZSwgX0FsbG9j
Pjo6Y29uc3RfaXRlcmF0b3I+CiAgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tvViwgX0NvbXBhcmUs
IF9BbGxvYz4KICA6OmVxdWFsX3JhbmdlKGNvbnN0IF9LZXkmIF9faykgY29uc3QKICB7CiAgICBy
ZXR1cm4gcGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4obG93ZXJfYm91bmQoX19r
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cHBlcl9i
b3VuZChfX2spKTsKICB9CgogIGlubGluZSBpbnQKICBfX2JsYWNrX2NvdW50KF9SYl90cmVlX25v
ZGVfYmFzZSogX19ub2RlLCBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fcm9vdCkKICB7CiAgICBpZiAo
X19ub2RlID09IDApCiAgICAgIHJldHVybiAwOwogICAgaW50IF9fc3VtID0gMDsKICAgIGRvCiAg
ICAgIHsKICAgICAgICBpZiAoX19ub2RlLT5fTV9jb2xvciA9PSBfTV9ibGFjaykKICAgICAgICAg
ICsrX19zdW07CiAgICAgICAgaWYgKF9fbm9kZSA9PSBfX3Jvb3QpCiAgICAgICAgICBicmVhazsK
ICAgICAgICBfX25vZGUgPSBfX25vZGUtPl9NX3BhcmVudDsKICAgICAgfQogICAgd2hpbGUgKDEp
OwogICAgcmV0dXJuIF9fc3VtOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5h
bWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBh
cmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJvb2wKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5
T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpfX3JiX3ZlcmlmeSgpIGNvbnN0CiAgICB7CiAgICBp
ZiAoX01fbm9kZV9jb3VudCA9PSAwIHx8IGJlZ2luKCkgPT0gZW5kKCkpCiAgICAgIHJldHVybiBf
TV9ub2RlX2NvdW50ID09IDAgJiYgYmVnaW4oKSA9PSBlbmQoKSAmJgogICAgICAgIF9NX2hlYWRl
ci0+X01fbGVmdCA9PSBfTV9oZWFkZXIgJiYgX01faGVhZGVyLT5fTV9yaWdodCA9PSBfTV9oZWFk
ZXI7CgogICAgaW50IF9fbGVuID0gX19ibGFja19jb3VudChfTV9sZWZ0bW9zdCgpLCBfTV9yb290
KCkpOwogICAgZm9yIChjb25zdF9pdGVyYXRvciBfX2l0ID0gYmVnaW4oKTsgX19pdCAhPSBlbmQo
KTsgKytfX2l0KQogICAgICB7CiAgICAgICAgX0xpbmtfdHlwZSBfX3ggPSAoX0xpbmtfdHlwZSkg
X19pdC5fTV9ub2RlOwogICAgICAgIF9MaW5rX3R5cGUgX19MID0gX1NfbGVmdChfX3gpOwogICAg
ICAgIF9MaW5rX3R5cGUgX19SID0gX1NfcmlnaHQoX194KTsKCiAgICAgICAgaWYgKF9feC0+X01f
Y29sb3IgPT0gX01fcmVkKQogICAgICAgICAgaWYgKChfX0wgJiYgX19MLT5fTV9jb2xvciA9PSBf
TV9yZWQpCiAgICAgICAgICAgICAgfHwgKF9fUiAmJiBfX1ItPl9NX2NvbG9yID09IF9NX3JlZCkp
CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgaWYgKF9fTCAmJiBfTV9rZXlfY29t
cGFyZShfU19rZXkoX194KSwgX1Nfa2V5KF9fTCkpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgIGlmIChfX1IgJiYgX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fUiksIF9TX2tleShfX3gp
KSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgaWYgKCFfX0wgJiYgIV9fUiAmJiBf
X2JsYWNrX2NvdW50KF9feCwgX01fcm9vdCgpKSAhPSBfX2xlbikKICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgfQoKICAgIGlmIChfTV9sZWZ0bW9zdCgpICE9IF9SYl90cmVlX25vZGVfYmFz
ZTo6X1NfbWluaW11bShfTV9yb290KCkpKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoX01f
cmlnaHRtb3N0KCkgIT0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9NX3Jvb3QoKSkp
CiAgICAgIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0cnVlOwogICAgfQp9CiMgNjcgIi91c3Iv
bG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL3NldCIgMiAzCiMgMSAi
L3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxf
c2V0LmgiIDEgMwojIDY2ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2Mr
Ky8zLjIuMS9iaXRzL3N0bF9zZXQuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUgPGNs
YXNzIF9LZXksIGNsYXNzIF9Db21wYXJlID0gbGVzczxfS2V5PiwKICAgICAgICAgIGNsYXNzIF9B
bGxvYyA9IGFsbG9jYXRvcjxfS2V5PiA+CmNsYXNzIHNldDsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5
LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpOwoKdGVtcGxhdGUgPGNsYXNz
IF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9y
PChjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpOwoKCnRlbXBsYXRlIDxj
bGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgpjbGFzcyBzZXQKewoKIAog
IDsKCnB1YmxpYzoKCiAgdHlwZWRlZiBfS2V5IGtleV90eXBlOwogIHR5cGVkZWYgX0tleSB2YWx1
ZV90eXBlOwogIHR5cGVkZWYgX0NvbXBhcmUga2V5X2NvbXBhcmU7CiAgdHlwZWRlZiBfQ29tcGFy
ZSB2YWx1ZV9jb21wYXJlOwpwcml2YXRlOgogIHR5cGVkZWYgX1JiX3RyZWU8a2V5X3R5cGUsIHZh
bHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgIF9JZGVudGl0eTx2YWx1ZV90eXBlPiwga2V5X2Nv
bXBhcmUsIF9BbGxvYz4gX1JlcF90eXBlOwogIF9SZXBfdHlwZSBfTV90OwpwdWJsaWM6CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3BvaW50ZXIgcG9pbnRlcjsKICB0eXBlZGVm
IHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogIHR5cGVk
ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVk
ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwog
IHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKICB0
eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7
CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmV2
ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJz
ZV9pdGVyYXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1Jl
cF90eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBl
OjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1Jl
cF90eXBlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCgoKICBzZXQoKSA6IF9NX3Qo
X0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KICBleHBsaWNpdCBzZXQoY29uc3QgX0Nv
bXBhcmUmIF9fY29tcCwKICAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9
IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHt9CgogIHRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBzZXQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu
cHV0SXRlcmF0b3IgX19sYXN0KQogICAgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBl
KCkpCiAgICB7IF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9CgogIHRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBzZXQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwg
X0lucHV0SXRlcmF0b3IgX19sYXN0LCBjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICBjb25z
dCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2Nv
bXAsIF9fYSkgeyBfTV90Lmluc2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0KTsgfQoKICBzZXQo
Y29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194KSA6IF9NX3QoX194Ll9NX3QpIHt9
CiAgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgb3BlcmF0b3I9KGNvbnN0IHNldDxfS2V5LCBf
Q29tcGFyZSwgX0FsbG9jPiYgX194KQogIHsKICAgIF9NX3QgPSBfX3guX01fdDsKICAgIHJldHVy
biAqdGhpczsKICB9CgoKCiAga2V5X2NvbXBhcmUga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBf
TV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9jb21wYXJlIHZhbHVlX2NvbXAoKSBjb25zdCB7IHJl
dHVybiBfTV90LmtleV9jb21wKCk7IH0KICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkg
Y29uc3QgeyByZXR1cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7IH0KCiAgaXRlcmF0b3IgYmVnaW4o
KSBjb25zdCB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KICBpdGVyYXRvciBlbmQoKSBjb25zdCB7
IHJldHVybiBfTV90LmVuZCgpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7
IHJldHVybiBfTV90LnJiZWdpbigpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3Qg
eyByZXR1cm4gX01fdC5yZW5kKCk7IH0KICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01f
dC5lbXB0eSgpOyB9CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV90LnNpemUo
KTsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QubWF4X3NpemUo
KTsgfQogIHZvaWQgc3dhcChzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsgX01fdC5z
d2FwKF9feC5fTV90KTsgfQoKCiAgcGFpcjxpdGVyYXRvcixib29sPiBpbnNlcnQoY29uc3QgdmFs
dWVfdHlwZSYgX194KSB7CiAgICBwYWlyPHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IsIGJv
b2w+IF9fcCA9IF9NX3QuaW5zZXJ0X3VuaXF1ZShfX3gpOwogICAgcmV0dXJuIHBhaXI8aXRlcmF0
b3IsIGJvb2w+KF9fcC5maXJzdCwgX19wLnNlY29uZCk7CiAgfQogIGl0ZXJhdG9yIGluc2VydChp
dGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpIHsKICAgIHR5cGVkZWYg
dHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRvciBfUmVwX2l0ZXJhdG9yOwogICAgcmV0dXJuIF9N
X3QuaW5zZXJ0X3VuaXF1ZSgoX1JlcF9pdGVyYXRvciYpX19wb3NpdGlvbiwgX194KTsKICB9CiAg
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KF9JbnB1dEl0ZXJh
dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgX01fdC5pbnNlcnRfdW5p
cXVlKF9fZmlyc3QsIF9fbGFzdCk7CiAgfQogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlv
bikgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIF9SZXBfaXRlcmF0
b3I7CiAgICBfTV90LmVyYXNlKChfUmVwX2l0ZXJhdG9yJilfX3Bvc2l0aW9uKTsKICB9CiAgc2l6
ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBfTV90LmVyYXNl
KF9feCk7CiAgfQogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0
KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgX1JlcF9pdGVyYXRv
cjsKICAgIF9NX3QuZXJhc2UoKF9SZXBfaXRlcmF0b3ImKV9fZmlyc3QsIChfUmVwX2l0ZXJhdG9y
JilfX2xhc3QpOwogIH0KICB2b2lkIGNsZWFyKCkgeyBfTV90LmNsZWFyKCk7IH0KCgoKICBzaXpl
X3R5cGUgY291bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3Qu
ZmluZChfX3gpID09IF9NX3QuZW5kKCkgPyAwIDogMTsKICB9CgoKCiAgaXRlcmF0b3IgZmluZChj
b25zdCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQogIGNvbnN0X2l0
ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgeyByZXR1cm4gX01fdC5maW5k
KF9feCk7IH0KICBpdGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSB7CiAg
ICByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOwogIH0KICBjb25zdF9pdGVyYXRvciBsb3dl
cl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC5sb3dl
cl9ib3VuZChfX3gpOwogIH0KICBpdGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYg
X194KSB7CiAgICByZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOwogIH0KICBjb25zdF9pdGVy
YXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4g
X01fdC51cHBlcl9ib3VuZChfX3gpOwogIH0KICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBlcXVh
bF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSB7CiAgICByZXR1cm4gX01fdC5lcXVhbF9yYW5n
ZShfX3gpOwogIH0KICBwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPiBlcXVhbF9y
YW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC5lcXVhbF9y
YW5nZShfX3gpOwogIH0KIyAyMjAgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1
ZGUvYysrLzMuMi4xL2JpdHMvc3RsX3NldC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9LMSwgY2xh
c3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSAoY29uc3Qgc2V0PF9L
MSxfQzEsX0ExPiYsIGNvbnN0IHNldDxfSzEsX0MxLF9BMT4mKTsKICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0sxLCBjbGFzcyBfQzEsIGNsYXNzIF9BMT4KICBmcmllbmQgYm9vbCBvcGVyYXRvcjwgKGNvbnN0
IHNldDxfSzEsX0MxLF9BMT4mLCBjb25zdCBzZXQ8X0sxLF9DMSxfQTE+Jik7Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAg
cmV0dXJuIF9feC5fTV90ID09IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xh
c3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHNl
dDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA8IF9f
eS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9B
bGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxs
b2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUs
X0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRv
cj4oY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9f
eSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBf
QWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0Fs
bG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNldDxfS2V5LF9Db21wYXJl
LF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRv
cj49KGNvbnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4g
IShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNs
YXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcChzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBf
X3gsCiAgICAgICAgICAgICAgICAgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAg
X194LnN3YXAoX195KTsKfQoKfQojIDY4ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9p
bmNsdWRlL2MrKy8zLjIuMS9zZXQiIDIgMwojIDEgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMu
Mi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX211bHRpc2V0LmgiIDEgMwojIDY2ICIvdXNy
L2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9iaXRzL3N0bF9tdWx0
aXNldC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3Mg
X0NvbXBhcmUgPSBsZXNzPF9LZXk+LAogICAgICAgICAgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9y
PF9LZXk+ID4KY2xhc3MgbXVsdGlzZXQ7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0Nv
bXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBtdWx0aXNl
dDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSk7Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8
KGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpOwoKdGVt
cGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmNsYXNzIG11
bHRpc2V0CnsKCiAKICA7CgpwdWJsaWM6CgoKCiAgdHlwZWRlZiBfS2V5IGtleV90eXBlOwogIHR5
cGVkZWYgX0tleSB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0NvbXBhcmUga2V5X2NvbXBhcmU7CiAg
dHlwZWRlZiBfQ29tcGFyZSB2YWx1ZV9jb21wYXJlOwpwcml2YXRlOgogIHR5cGVkZWYgX1JiX3Ry
ZWU8a2V5X3R5cGUsIHZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgIF9JZGVudGl0eTx2YWx1
ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1JlcF90eXBlOwogIF9SZXBfdHlwZSBfTV90
OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3BvaW50ZXIgcG9p
bnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9w
b2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2UgcmVm
ZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2UgY29u
c3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9pdGVyYXRv
ciBpdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0b3Ig
Y29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JldmVy
c2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlw
ZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVk
ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlw
ZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVk
ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCgoK
ICBtdWx0aXNldCgpIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7fQogIGV4
cGxpY2l0IG11bHRpc2V0KGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgICAgICAgICAgICAg
ICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9N
X3QoX19jb21wLCBfX2EpIHt9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBt
dWx0aXNldChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAg
ICA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01fdC5pbnNlcnRf
ZXF1YWwoX19maXJzdCwgX19sYXN0KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CiAgbXVsdGlzZXQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s
YXN0LAogICAgICAgICAgIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgICAgICAgY29uc3Qg
YWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21w
LCBfX2EpIHsgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsgfQoKICBtdWx0aXNl
dChjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCkgOiBfTV90KF9feC5f
TV90KSB7fQoKICBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mCiAgb3BlcmF0b3I9KGNv
bnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194KSB7CiAgICBfTV90ID0gX194
Ll9NX3Q7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCgogIGtleV9jb21wYXJlIGtleV9jb21wKCkg
Y29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgdmFsdWVfY29tcGFyZSB2YWx1ZV9j
b21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgYWxsb2NhdG9yX3R5cGUg
Z2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZ2V0X2FsbG9jYXRvcigpOyB9Cgog
IGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CiAgaXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5lbmQoKTsgfQogIHJldmVyc2VfaXRlcmF0b3Ig
cmJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQogIHJldmVyc2VfaXRlcmF0
b3IgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CiAgYm9vbCBlbXB0eSgpIGNv
bnN0IHsgcmV0dXJuIF9NX3QuZW1wdHkoKTsgfQogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gX01fdC5zaXplKCk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVy
biBfTV90Lm1heF9zaXplKCk7IH0KICB2b2lkIHN3YXAobXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxf
QWxsb2M+JiBfX3gpIHsgX01fdC5zd2FwKF9feC5fTV90KTsgfQoKCiAgaXRlcmF0b3IgaW5zZXJ0
KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3QuaW5zZXJ0X2VxdWFsKF9f
eCk7CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1
ZV90eXBlJiBfX3gpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRvciBf
UmVwX2l0ZXJhdG9yOwogICAgcmV0dXJuIF9NX3QuaW5zZXJ0X2VxdWFsKChfUmVwX2l0ZXJhdG9y
JilfX3Bvc2l0aW9uLCBfX3gpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
PgogIHZvaWQgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f
bGFzdCkgewogICAgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsKICB9CiAgdm9p
ZCBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBf
dHlwZTo6aXRlcmF0b3IgX1JlcF9pdGVyYXRvcjsKICAgIF9NX3QuZXJhc2UoKF9SZXBfaXRlcmF0
b3ImKV9fcG9zaXRpb24pOwogIH0KICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9f
eCkgewogICAgcmV0dXJuIF9NX3QuZXJhc2UoX194KTsKICB9CiAgdm9pZCBlcmFzZShpdGVyYXRv
ciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90
eXBlOjppdGVyYXRvciBfUmVwX2l0ZXJhdG9yOwogICAgX01fdC5lcmFzZSgoX1JlcF9pdGVyYXRv
ciYpX19maXJzdCwgKF9SZXBfaXRlcmF0b3ImKV9fbGFzdCk7CiAgfQogIHZvaWQgY2xlYXIoKSB7
IF9NX3QuY2xlYXIoKTsgfQoKCgogIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX194
KSBjb25zdCB7IHJldHVybiBfTV90LmNvdW50KF9feCk7IH0KCgoKICBpdGVyYXRvciBmaW5kKGNv
bnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CiAgY29uc3RfaXRl
cmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmZpbmQo
X194KTsgfQogIGl0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsKICAg
IHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIGxvd2Vy
X2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90Lmxvd2Vy
X2JvdW5kKF9feCk7CiAgfQogIGl0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBf
X3gpIHsKICAgIHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7CiAgfQogIGNvbnN0X2l0ZXJh
dG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBf
TV90LnVwcGVyX2JvdW5kKF9feCk7CiAgfQogIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFs
X3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBfTV90LmVxdWFsX3Jhbmdl
KF9feCk7CiAgfQogIHBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0b3I+IGVxdWFsX3Jh
bmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90LmVxdWFsX3Jh
bmdlKF9feCk7CiAgfQojIDIyMSAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVk
ZS9jKysvMy4yLjEvYml0cy9zdGxfbXVsdGlzZXQuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBfSzEs
IGNsYXNzIF9DMSwgY2xhc3MgX0ExPgogIGZyaWVuZCBib29sIG9wZXJhdG9yPT0gKGNvbnN0IG11
bHRpc2V0PF9LMSxfQzEsX0ExPiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVs
dGlzZXQ8X0sxLF9DMSxfQTE+Jik7CiAgdGVtcGxhdGUgPGNsYXNzIF9LMSwgY2xhc3MgX0MxLCBj
bGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8IChjb25zdCBtdWx0aXNldDxfSzEsX0Mx
LF9BMT4mLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGlzZXQ8X0sxLF9DMSxf
QTE+Jik7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9B
bGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJl
LF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aXNldDxfS2V5
LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA9PSBfX3kuX01fdDsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+Cmlu
bGluZSBib29sIG9wZXJhdG9yPChjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4m
IF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUs
X0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90IDwgX195Ll9NX3Q7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYg
X195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj
bGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3Qg
bXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBf
X3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3Mg
X0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBh
cmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpc2V0PF9L
ZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBi
b29sIG9wZXJhdG9yPj0oY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gs
CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxs
b2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tl
eSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcChtdWx0aXNl
dDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICBtdWx0aXNldDxf
S2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIF9feC5zd2FwKF9feSk7Cn0KCn0KIyA2OSAi
L3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvc2V0IiAyIDMK
IyAzNCAiYmltYXAuaCIgMgojIDEgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2xpYi9n
Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMi4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0
CiMgMzUgImJpbWFwLmgiIDIKIyAxICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNs
dWRlL2MrKy8zLjIuMS9zdGRleGNlcHQiIDEgMwojIDQzICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2dj
Yy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS9zdGRleGNlcHQiIDMKCgoKCm5hbWVzcGFjZSBzdGQK
ewoKCgoKCiAgY2xhc3MgbG9naWNfZXJyb3IgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogICAgc3Ry
aW5nIF9NX21zZzsKCiAgcHVibGljOgoKICAgIGV4cGxpY2l0CiAgICBsb2dpY19lcnJvcihjb25z
dCBzdHJpbmcmIF9fYXJnKTsKCiAgICB2aXJ0dWFsCiAgICB+bG9naWNfZXJyb3IoKSB0aHJvdygp
OwoKCgogICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgd2hhdCgpIGNvbnN0IHRocm93KCk7CiAg
fTsKCgoKICBjbGFzcyBkb21haW5fZXJyb3IgOiBwdWJsaWMgbG9naWNfZXJyb3IKICB7CiAgcHVi
bGljOgogICAgZXhwbGljaXQgZG9tYWluX2Vycm9yKGNvbnN0IHN0cmluZyYgX19hcmcpOwogIH07
CgoKICBjbGFzcyBpbnZhbGlkX2FyZ3VtZW50IDogcHVibGljIGxvZ2ljX2Vycm9yCiAgewogIHB1
YmxpYzoKICAgIGV4cGxpY2l0IGludmFsaWRfYXJndW1lbnQoY29uc3Qgc3RyaW5nJiBfX2FyZyk7
CiAgfTsKCgoKICBjbGFzcyBsZW5ndGhfZXJyb3IgOiBwdWJsaWMgbG9naWNfZXJyb3IKICB7CiAg
cHVibGljOgogICAgZXhwbGljaXQgbGVuZ3RoX2Vycm9yKGNvbnN0IHN0cmluZyYgX19hcmcpOwog
IH07CgoKCiAgY2xhc3Mgb3V0X29mX3JhbmdlIDogcHVibGljIGxvZ2ljX2Vycm9yCiAgewogIHB1
YmxpYzoKICAgIGV4cGxpY2l0IG91dF9vZl9yYW5nZShjb25zdCBzdHJpbmcmIF9fYXJnKTsKICB9
OwoKCgoKCgogIGNsYXNzIHJ1bnRpbWVfZXJyb3IgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogICAg
c3RyaW5nIF9NX21zZzsKCiAgcHVibGljOgoKICAgIGV4cGxpY2l0CiAgICBydW50aW1lX2Vycm9y
KGNvbnN0IHN0cmluZyYgX19hcmcpOwoKICAgIHZpcnR1YWwKICAgIH5ydW50aW1lX2Vycm9yKCkg
dGhyb3coKTsKCgoKICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgIHdoYXQoKSBjb25zdCB0aHJv
dygpOwogIH07CgoKICBjbGFzcyByYW5nZV9lcnJvciA6IHB1YmxpYyBydW50aW1lX2Vycm9yCiAg
ewogIHB1YmxpYzoKICAgIGV4cGxpY2l0IHJhbmdlX2Vycm9yKGNvbnN0IHN0cmluZyYgX19hcmcp
OwogIH07CgoKICBjbGFzcyBvdmVyZmxvd19lcnJvciA6IHB1YmxpYyBydW50aW1lX2Vycm9yCiAg
ewogIHB1YmxpYzoKICAgIGV4cGxpY2l0IG92ZXJmbG93X2Vycm9yKGNvbnN0IHN0cmluZyYgX19h
cmcpOwogIH07CgoKICBjbGFzcyB1bmRlcmZsb3dfZXJyb3IgOiBwdWJsaWMgcnVudGltZV9lcnJv
cgogIHsKICBwdWJsaWM6CiAgICBleHBsaWNpdCB1bmRlcmZsb3dfZXJyb3IoY29uc3Qgc3RyaW5n
JiBfX2FyZyk7CiAgfTsKfQojIDM2ICJiaW1hcC5oIiAyCiMgMSAiL3Vzci9sb2NhbC9wcm9kdWN0
cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvdXRpbGl0eSIgMSAzCiMgNjUgIi91c3IvbG9j
YWwvcHJvZHVjdHMvZ2NjLzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL3V0aWxpdHkiIDMKCiMgMSAi
L3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxf
cmVsb3BzLmgiIDEgMwojIDc0ICIvdXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRl
L2MrKy8zLjIuMS9iaXRzL3N0bF9yZWxvcHMuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICBuYW1lc3Bh
Y2UgcmVsX29wcwogIHsKIyA5MCAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4yLjEvaW5jbHVk
ZS9jKysvMy4yLjEvYml0cy9zdGxfcmVsb3BzLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICBy
ZXR1cm4gIShfX3ggPT0gX195KTsKfQojIDEwMyAiL3Vzci9sb2NhbC9wcm9kdWN0cy9nY2MvMy4y
LjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfcmVsb3BzLmgiIDMKdGVtcGxhdGUgPGNsYXNz
IF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9f
eSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KIyAxMTYgIi91c3IvbG9jYWwvcHJvZHVjdHMvZ2Nj
LzMuMi4xL2luY2x1ZGUvYysrLzMuMi4xL2JpdHMvc3RsX3JlbG9wcy5oIiAzCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9U
cCYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQojIDEyOSAiL3Vzci9sb2NhbC9wcm9k
dWN0cy9nY2MvMy4yLjEvaW5jbHVkZS9jKysvMy4yLjEvYml0cy9zdGxfcmVsb3BzLmgiIDMKdGVt
cGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBfVHAmIF9feCwg
Y29uc3QgX1RwJiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9CgogIH0KfQojIDY3ICIv
dXNyL2xvY2FsL3Byb2R1Y3RzL2djYy8zLjIuMS9pbmNsdWRlL2MrKy8zLjIuMS91dGlsaXR5IiAy
IDMKIyAzNyAiYmltYXAuaCIgMgoKbmFtZXNwYWNlIGNvZGVwcm9qZWN0ewoKbmFtZXNwYWNlIGJp
bWFwX3V0aWxzewojIDUwICJiaW1hcC5oIgp0eXBlZGVmIGNoYXIgZXF1YWxfdHlwZXNfeWVzOwpz
dHJ1Y3QgZXF1YWxfdHlwZXNfbm8ge2NoYXIgbVsyXTt9OwpzdGF0aWMgZXF1YWxfdHlwZXNfbm8g
ZXF1YWxfdHlwZXNfaGVscGVyKC4uLik7CnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnN0YXRpYyBlcXVh
bF90eXBlc195ZXMgZXF1YWxfdHlwZXNfaGVscGVyKGNvbnN0IFQmLGNvbnN0IFQmKTsKCnRlbXBs
YXRlPHR5cGVuYW1lIFQsdHlwZW5hbWUgVT4gc3RydWN0IGVxdWFsX3R5cGVzCnsKICBzdGF0aWMg
Y29uc3QgVCYgbWFrZV9UKCk7CiAgc3RhdGljIGNvbnN0IFUmIG1ha2VfVSgpOwoKICBlbnVte3Zh
bHVlPXNpemVvZihlcXVhbF90eXBlc19oZWxwZXIobWFrZV9UKCksbWFrZV9VKCkpKT09c2l6ZW9m
KGVxdWFsX3R5cGVzX3llcyl9Owp9OwojIDczICJiaW1hcC5oIgpzdHJ1Y3Qgc2VsZWN0X3RoZW4K
ewogIHRlbXBsYXRlPGNsYXNzIHRoZW4sY2xhc3MgZWxzPiBzdHJ1Y3QgcmVzdWx0CiAgewogICAg
dHlwZWRlZiB0aGVuIHR5cGU7CiAgfTsKfTsKCnN0cnVjdCBzZWxlY3RfZWxzZQp7CiAgdGVtcGxh
dGU8Y2xhc3MgdGhlbixjbGFzcyBlbHM+IHN0cnVjdCByZXN1bHQKICB7CiAgICB0eXBlZGVmIGVs
cyB0eXBlOwogIH07Cn07Cgp0ZW1wbGF0ZTxib29sIHRlc3Q+IHN0cnVjdCBzZWxlY3Rvcl9zd2l0
Y2gKewogIHR5cGVkZWYgc2VsZWN0X3RoZW4gcmVzdWx0Owp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg
c2VsZWN0b3Jfc3dpdGNoPGZhbHNlPgp7CiAgdHlwZWRlZiBzZWxlY3RfZWxzZSByZXN1bHQ7Cn07
Cgp0ZW1wbGF0ZTxib29sIHRlc3QsdHlwZW5hbWUgdGhlbiwgdHlwZW5hbWUgZWxzPgpzdHJ1Y3Qg
c2VsZWN0CnsKICB0eXBlZGVmIHR5cGVuYW1lIHNlbGVjdG9yX3N3aXRjaDx0ZXN0Pjo6cmVzdWx0
IHNlbDsKICB0eXBlZGVmIHR5cGVuYW1lIHNlbDo6cmVzdWx0PHRoZW4sZWxzPjo6dHlwZSByZXN1
bHQ7Cn07Cgp9CiMgMTE3ICJiaW1hcC5oIgojcHJhZ21hIHdhcm5pbmcocHVzaCkKI3ByYWdtYSB3
YXJuaW5nKGRpc2FibGU6NDUxMikKCgp0ZW1wbGF0ZTx0eXBlbmFtZSBmaXJzdF90eXBlLHR5cGVu
YW1lIHNlY29uZF90eXBlPgpzdHJ1Y3QgZGlyZWN0X3BhaXI7Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBU
RiwgdHlwZW5hbWUgVFM+CnN0cnVjdCBpbnZfcGFpcgp7CiAgdHlwZWRlZiBURiBmaXJzdF90eXBl
OwogIHR5cGVkZWYgVFMgc2Vjb25kX3R5cGU7CgogIHNlY29uZF90eXBlIHNlY29uZDsKICBmaXJz
dF90eXBlIGZpcnN0OwoKICBpbnZfcGFpcigpOnNlY29uZChzZWNvbmRfdHlwZSgpKSxmaXJzdChm
aXJzdF90eXBlKCkpe30KICBpbnZfcGFpcihjb25zdCBmaXJzdF90eXBlJiBmaXJzdCxjb25zdCBz
ZWNvbmRfdHlwZSYgc2Vjb25kKTpzZWNvbmQoc2Vjb25kKSxmaXJzdChmaXJzdCl7fQogIGludl9w
YWlyKGNvbnN0IHN0ZDo6cGFpcjxmaXJzdF90eXBlLHNlY29uZF90eXBlPiYgcik6c2Vjb25kKHIu
c2Vjb25kKSxmaXJzdChyLmZpcnN0KXt9CiAgdGVtcGxhdGU8dHlwZW5hbWUgRix0eXBlbmFtZSBT
PgogIGludl9wYWlyKGNvbnN0IGludl9wYWlyPEYsUz4mIHIpOnNlY29uZChyLnNlY29uZCksZmly
c3Qoci5maXJzdCl7fQoKICBvcGVyYXRvciBkaXJlY3RfcGFpcjxzZWNvbmRfdHlwZSxmaXJzdF90
eXBlPiYoKQogIHsKICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxkaXJlY3RfcGFpcjxzZWNv
bmRfdHlwZSxmaXJzdF90eXBlPiAqPih0aGlzKTsKICB9CgogIG9wZXJhdG9yIGNvbnN0IGRpcmVj
dF9wYWlyPHNlY29uZF90eXBlLGZpcnN0X3R5cGU+JigpY29uc3QKICB7CiAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZGlyZWN0X3BhaXI8c2Vjb25kX3R5cGUsZmlyc3RfdHlwZT4g
Kj4odGhpcyk7CiAgfQp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgZmlyc3RfdHlwZSx0eXBlbmFtZSBz
ZWNvbmRfdHlwZT4Kc3RydWN0IGRpcmVjdF9wYWlyOnB1YmxpYyBzdGQ6OnBhaXI8Zmlyc3RfdHlw
ZSxzZWNvbmRfdHlwZT4Kewpwcml2YXRlOgogIHR5cGVkZWYgc3RkOjpwYWlyPGZpcnN0X3R5cGUs
c2Vjb25kX3R5cGU+IHN1cGVyOwoKcHVibGljOgogIGRpcmVjdF9wYWlyKCk6c3VwZXIoZmlyc3Rf
dHlwZSgpLHNlY29uZF90eXBlKCkpe30KICBkaXJlY3RfcGFpcihjb25zdCBmaXJzdF90eXBlJiBm
aXJzdCxjb25zdCBzZWNvbmRfdHlwZSYgc2Vjb25kKTpzdXBlcihmaXJzdCxzZWNvbmQpe30KICBk
aXJlY3RfcGFpcihjb25zdCBpbnZfcGFpcjxmaXJzdF90eXBlLHNlY29uZF90eXBlPiYgcik6c3Vw
ZXIoci5maXJzdCxyLnNlY29uZCl7fQogIHRlbXBsYXRlPHR5cGVuYW1lIEYsdHlwZW5hbWUgUz4K
ICAgIGRpcmVjdF9wYWlyKGNvbnN0IHN0ZDo6cGFpcjxGLFM+JiByKTpzdXBlcihyLmZpcnN0LHIu
c2Vjb25kKXt9CgogIG9wZXJhdG9yIGludl9wYWlyPHNlY29uZF90eXBlLGZpcnN0X3R5cGU+Jigp
CiAgewogICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PGludl9wYWlyPHNlY29uZF90eXBlLGZp
cnN0X3R5cGU+ICo+KHRoaXMpOwogIH0KCiAgb3BlcmF0b3IgY29uc3QgaW52X3BhaXI8c2Vjb25k
X3R5cGUsZmlyc3RfdHlwZT4mKCljb25zdAogIHsKICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBpbnZfcGFpcjxzZWNvbmRfdHlwZSxmaXJzdF90eXBlPiAqPih0aGlzKTsKICB9Cn07
CgojcHJhZ21hIHdhcm5pbmcocG9wKQoKdGVtcGxhdGU8dHlwZW5hbWUgZmlyc3RfdHlwZSx0eXBl
bmFtZSBzZWNvbmRfdHlwZT4KaW52X3BhaXI8Zmlyc3RfdHlwZSxzZWNvbmRfdHlwZT4gbWFrZV9p
bnZfcGFpcigKICAgIGNvbnN0IGZpcnN0X3R5cGUmIGZpcnN0LAogICAgY29uc3Qgc2Vjb25kX3R5
cGUmIHNlY29uZCkKewogIHJldHVybiBpbnZfcGFpcjxmaXJzdF90eXBlLHNlY29uZF90eXBlPihm
aXJzdCxzZWNvbmQpOwp9CgoKCgoKdGVtcGxhdGU8dHlwZW5hbWUgZmlyc3RfdHlwZSx0eXBlbmFt
ZSBzZWNvbmRfdHlwZT4KYm9vbCBvcGVyYXRvcj09KAogIGNvbnN0IGludl9wYWlyPGZpcnN0X3R5
cGUsc2Vjb25kX3R5cGU+JiB4LAogIGNvbnN0IGludl9wYWlyPGZpcnN0X3R5cGUsc2Vjb25kX3R5
cGU+JiB5KQp7CiAgcmV0dXJuIHguZmlyc3Q9PXkuZmlyc3QmJnguc2Vjb25kPT15LnNlY29uZDsK
fQoKdGVtcGxhdGU8dHlwZW5hbWUgZmlyc3RfdHlwZSx0eXBlbmFtZSBzZWNvbmRfdHlwZT4KYm9v
bCBvcGVyYXRvcj09KAogIGNvbnN0IGludl9wYWlyPGZpcnN0X3R5cGUsc2Vjb25kX3R5cGU+JiB4
LAogIGNvbnN0IHN0ZDo6cGFpcjxmaXJzdF90eXBlLHNlY29uZF90eXBlPiYgeSkKewogIHJldHVy
biB4LmZpcnN0PT15LmZpcnN0JiZ4LnNlY29uZD09eS5zZWNvbmQ7Cn0KCnRlbXBsYXRlPHR5cGVu
YW1lIGZpcnN0X3R5cGUsdHlwZW5hbWUgc2Vjb25kX3R5cGU+CmJvb2wgb3BlcmF0b3I9PSgKICBj
b25zdCBzdGQ6OnBhaXI8Zmlyc3RfdHlwZSxzZWNvbmRfdHlwZT4mIHgsCiAgY29uc3QgaW52X3Bh
aXI8Zmlyc3RfdHlwZSxzZWNvbmRfdHlwZT4mIHkpCnsKICByZXR1cm4geC5maXJzdD09eS5maXJz
dCYmeC5zZWNvbmQ9PXkuc2Vjb25kOwp9CgoKCnRlbXBsYXRlPHR5cGVuYW1lIGZpcnN0X3R5cGUs
dHlwZW5hbWUgc2Vjb25kX3R5cGU+CmJvb2wgb3BlcmF0b3IhPSgKICBjb25zdCBpbnZfcGFpcjxm
aXJzdF90eXBlLHNlY29uZF90eXBlPiYgeCwKICBjb25zdCBpbnZfcGFpcjxmaXJzdF90eXBlLHNl
Y29uZF90eXBlPiYgeSkKewogIHJldHVybiAhKHg9PXkpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBm
aXJzdF90eXBlLHR5cGVuYW1lIHNlY29uZF90eXBlPgpib29sIG9wZXJhdG9yIT0oCiAgY29uc3Qg
aW52X3BhaXI8Zmlyc3RfdHlwZSxzZWNvbmRfdHlwZT4mIHgsCiAgY29uc3Qgc3RkOjpwYWlyPGZp
cnN0X3R5cGUsc2Vjb25kX3R5cGU+JiB5KQp7CiAgcmV0dXJuICEoeD09eSk7Cn0KCnRlbXBsYXRl
PHR5cGVuYW1lIGZpcnN0X3R5cGUsdHlwZW5hbWUgc2Vjb25kX3R5cGU+CmJvb2wgb3BlcmF0b3Ih
PSgKICBjb25zdCBzdGQ6OnBhaXI8Zmlyc3RfdHlwZSxzZWNvbmRfdHlwZT4mIHgsCiAgY29uc3Qg
aW52X3BhaXI8Zmlyc3RfdHlwZSxzZWNvbmRfdHlwZT4mIHkpCnsKICByZXR1cm4gISh4PT15KTsK
fQoKCgp0ZW1wbGF0ZTx0eXBlbmFtZSBmaXJzdF90eXBlLHR5cGVuYW1lIHNlY29uZF90eXBlPgpi
b29sIG9wZXJhdG9yPCgKICBjb25zdCBpbnZfcGFpcjxmaXJzdF90eXBlLHNlY29uZF90eXBlPiYg
eCwKICBjb25zdCBpbnZfcGFpcjxmaXJzdF90eXBlLHNlY29uZF90eXBlPiYgeSkKewogIHJldHVy
biB4LmZpcnN0PHkuZmlyc3R8fHguZmlyc3Q9PXkuZmlyc3QmJnguc2Vjb25kPHkuc2Vjb25kOwp9
Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBmaXJzdF90eXBlLHR5cGVuYW1lIHNlY29uZF90eXBlPgpib29s
IG9wZXJhdG9yPCgKICBjb25zdCBpbnZfcGFpcjxmaXJzdF90eXBlLHNlY29uZF90eXBlPiYgeCwK
ICBjb25zdCBzdGQ6OnBhaXI8Zmlyc3RfdHlwZSxzZWNvbmRfdHlwZT4mIHkpCnsKICByZXR1cm4g
eC5maXJzdDx5LmZpcnN0fHx4LmZpcnN0PT15LmZpcnN0JiZ4LnNlY29uZDx5LnNlY29uZDsKfQoK
dGVtcGxhdGU8dHlwZW5hbWUgZmlyc3RfdHlwZSx0eXBlbmFtZSBzZWNvbmRfdHlwZT4KYm9vbCBv
cGVyYXRvcjwoCiAgY29uc3Qgc3RkOjpwYWlyPGZpcnN0X3R5cGUsc2Vjb25kX3R5cGU+JiB4LAog
IGNvbnN0IGludl9wYWlyPGZpcnN0X3R5cGUsc2Vjb25kX3R5cGU+JiB5KQp7CiAgcmV0dXJuIHgu
Zmlyc3Q8eS5maXJzdHx8eC5maXJzdD09eS5maXJzdCYmeC5zZWNvbmQ8eS5zZWNvbmQ7Cn0KCgoK
dGVtcGxhdGU8dHlwZW5hbWUgZmlyc3RfdHlwZSx0eXBlbmFtZSBzZWNvbmRfdHlwZT4KYm9vbCBv
cGVyYXRvcj4oCiAgY29uc3QgaW52X3BhaXI8Zmlyc3RfdHlwZSxzZWNvbmRfdHlwZT4mIHgsCiAg
Y29uc3QgaW52X3BhaXI8Zmlyc3RfdHlwZSxzZWNvbmRfdHlwZT4mIHkpCnsKICByZXR1cm4geTx4
Owp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBmaXJzdF90eXBlLHR5cGVuYW1lIHNlY29uZF90eXBlPgpi
b29sIG9wZXJhdG9yPigKICBjb25zdCBpbnZfcGFpcjxmaXJzdF90eXBlLHNlY29uZF90eXBlPiYg
eCwKICBjb25zdCBzdGQ6OnBhaXI8Zmlyc3RfdHlwZSxzZWNvbmRfdHlwZT4mIHkpCnsKICByZXR1
cm4geTx4Owp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBmaXJzdF90eXBlLHR5cGVuYW1lIHNlY29uZF90
eXBlPgpib29sIG9wZXJhdG9yPigKICBjb25zdCBzdGQ6OnBhaXI8Zmlyc3RfdHlwZSxzZWNvbmRf
dHlwZT4mIHgsCiAgY29uc3QgaW52X3BhaXI8Zmlyc3RfdHlwZSxzZWNvbmRfdHlwZT4mIHkpCnsK
ICByZXR1cm4geTx4Owp9CgoKCnRlbXBsYXRlPHR5cGVuYW1lIGZpcnN0X3R5cGUsdHlwZW5hbWUg
c2Vjb25kX3R5cGU+CmJvb2wgb3BlcmF0b3I8PSgKICBjb25zdCBpbnZfcGFpcjxmaXJzdF90eXBl
LHNlY29uZF90eXBlPiYgeCwKICBjb25zdCBpbnZfcGFpcjxmaXJzdF90eXBlLHNlY29uZF90eXBl
PiYgeSkKewogIHJldHVybiAhKHk8eCk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIGZpcnN0X3R5cGUs
dHlwZW5hbWUgc2Vjb25kX3R5cGU+CmJvb2wgb3BlcmF0b3I8PSgKICBjb25zdCBpbnZfcGFpcjxm
aXJzdF90eXBlLHNlY29uZF90eXBlPiYgeCwKICBjb25zdCBzdGQ6OnBhaXI8Zmlyc3RfdHlwZSxz
ZWNvbmRfdHlwZT4mIHkpCnsKICByZXR1cm4gISh5PHgpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBm
aXJzdF90eXBlLHR5cGVuYW1lIHNlY29uZF90eXBlPgpib29sIG9wZXJhdG9yPD0oCiAgY29uc3Qg
c3RkOjpwYWlyPGZpcnN0X3R5cGUsc2Vjb25kX3R5cGU+JiB4LAogIGNvbnN0IGludl9wYWlyPGZp
cnN0X3R5cGUsc2Vjb25kX3R5cGU+JiB5KQp7CiAgcmV0dXJuICEoeTx4KTsKfQoKCgp0ZW1wbGF0
ZTx0eXBlbmFtZSBmaXJzdF90eXBlLHR5cGVuYW1lIHNlY29uZF90eXBlPgpib29sIG9wZXJhdG9y
Pj0oCiAgY29uc3QgaW52X3BhaXI8Zmlyc3RfdHlwZSxzZWNvbmRfdHlwZT4mIHgsCiAgY29uc3Qg
aW52X3BhaXI8Zmlyc3RfdHlwZSxzZWNvbmRfdHlwZT4mIHkpCnsKICByZXR1cm4gISh4PHkpOwp9
Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBmaXJzdF90eXBlLHR5cGVuYW1lIHNlY29uZF90eXBlPgpib29s
IG9wZXJhdG9yPj0oCiAgY29uc3QgaW52X3BhaXI8Zmlyc3RfdHlwZSxzZWNvbmRfdHlwZT4mIHgs
CiAgY29uc3Qgc3RkOjpwYWlyPGZpcnN0X3R5cGUsc2Vjb25kX3R5cGU+JiB5KQp7CiAgcmV0dXJu
ICEoeDx5KTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgZmlyc3RfdHlwZSx0eXBlbmFtZSBzZWNvbmRf
dHlwZT4KYm9vbCBvcGVyYXRvcj49KAogIGNvbnN0IHN0ZDo6cGFpcjxmaXJzdF90eXBlLHNlY29u
ZF90eXBlPiYgeCwKICBjb25zdCBpbnZfcGFpcjxmaXJzdF90eXBlLHNlY29uZF90eXBlPiYgeSkK
ewogIHJldHVybiAhKHg8eSk7Cn0KCgoKc3RydWN0IGJpbWFwX2Jhc2UKewogIGNsYXNzIHZhbHVl
X25vdF9mb3VuZDpwdWJsaWMgc3RkOjpsb2dpY19lcnJvcgogIHsKICBwdWJsaWM6CiAgICB2YWx1
ZV9ub3RfZm91bmQoKTpsb2dpY19lcnJvcigidmFsdWUgbm90IGZvdW5kIil7fQogICAgdmFsdWVf
bm90X2ZvdW5kKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpOmxvZ2ljX2Vycm9yKHN0cil7fQogIH07
CgogIGNsYXNzIGR1cGxpY2F0ZV92YWx1ZTpwdWJsaWMgc3RkOjpsb2dpY19lcnJvcgogIHsKICBw
dWJsaWM6CiAgICBkdXBsaWNhdGVfdmFsdWUoKTpsb2dpY19lcnJvcigiZHVwbGljYXRlIHZhbHVl
Iil7fQogICAgZHVwbGljYXRlX3ZhbHVlKGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpOmxvZ2ljX2Vy
cm9yKHN0cil7fQogIH07Cgpwcm90ZWN0ZWQ6CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgYmlt
YXBfdHlwZT4KICBjbGFzcyBmcm9tX2JpbmRpbmcKICB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGJp
bWFwX3R5cGU6OmZyb21fdHlwZSBmcm9tX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGJpbWFw
X3R5cGU6OnRvX3R5cGUgdG9fdHlwZTsKICBwdWJsaWM6CiAgICBmcm9tX2JpbmRpbmcoYmltYXBf
dHlwZSYgYm0sY29uc3QgZnJvbV90eXBlJiBmKTpibShibSksZihmKXt9CgogICAgY29uc3QgdG9f
dHlwZSYgZ2V0KCkgY29uc3QKICAgIHsKICAgICAgdHlwZW5hbWUgYmltYXBfdHlwZTo6ZnJvbV9z
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0PWJtLmZzZXQuZmluZCgmZik7CiAgICAgIGlmKGl0PT1ibS5m
c2V0LmVuZCgpKXRocm93IHZhbHVlX25vdF9mb3VuZCgpOwogICAgICByZXR1cm4gYmltYXBfdHlw
ZTo6ZWxlbWVudF9ieV9mcm9tKCppdCktPnNlY29uZDsKICAgIH0KCiAgICBvcGVyYXRvciBjb25z
dCB0b190eXBlJigpIGNvbnN0CiAgICB7CiAgICAgIHJldHVybiBnZXQoKTsKICAgIH0KCiAgICBm
cm9tX2JpbmRpbmcmIG9wZXJhdG9yPShjb25zdCB0b190eXBlJiB0KQogICAgewogICAgICB0eXBl
bmFtZSBiaW1hcF90eXBlOjpmc2V0X2l0ZXJhdG9yIGZpdD1ibS5mc2V0LmZpbmQoJmYpOwogICAg
ICB0eXBlbmFtZSBiaW1hcF90eXBlOjp0c2V0X2l0ZXJhdG9yIHRpdD1ibS50c2V0LmZpbmQoJnQp
OwogICAgICBpZih0aXQhPWJtLnRzZXQuZW5kKCkpewoKICAgICAgICBpZihmaXQhPWJtLmZzZXQu
ZW5kKCkmJgogICAgICAgICAgIGJpbWFwX3R5cGU6OmVsZW1lbnRfYnlfZnJvbSgqZml0KT09Ymlt
YXBfdHlwZTo6ZWxlbWVudF9ieV90bygqdGl0KSl7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAg
ICAgICAgfQogICAgICAgIGVsc2UgdGhyb3cgZHVwbGljYXRlX3ZhbHVlKCk7CiAgICAgIH0KCiAg
ICAgIHR5cGVuYW1lIGJpbWFwX3R5cGU6OmVsZW1lbnQgKiBwbmU9MDsKICAgICAgdHlwZW5hbWUg
YmltYXBfdHlwZTo6dHNldF9pdGVyYXRvciB0bml0PWJtLnRzZXQuZW5kKCk7CiAgICAgIHRyeXsK
ICAgICAgICBwbmU9Ym0ubmV3X2VsZW1lbnQoYmltYXBfdHlwZTo6ZWxlbWVudChmLHQpKTsKICAg
ICAgICB0bml0PWJtLnRzZXQuaW5zZXJ0KCZwbmUtPnNlY29uZCkuZmlyc3Q7CiAgICAgICAgaWYo
Zml0PT1ibS5mc2V0LmVuZCgpKXsKICAgICAgICAgIGJtLmZzZXQuaW5zZXJ0KCZwbmUtPmZpcnN0
KTsKICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAgZWxzZXsKICAgICAg
ICAgIHR5cGVuYW1lIGJpbWFwX3R5cGU6OmVsZW1lbnQgKiBwZT1iaW1hcF90eXBlOjplbGVtZW50
X2J5X2Zyb20oKmZpdCk7CiAgICAgICAgICBibS50c2V0LmVyYXNlKGJtLnRzZXQuZmluZCgmcGUt
PnNlY29uZCkpOwogICAgICAgICAgYm0uZGVsZXRlX2VsZW1lbnQocGUpOwogICAgICAgICAgY29u
c3RfY2FzdDxmcm9tX3R5cGUgKiY+KCpmaXQpPQogICAgICAgICAgICAmY29uc3RfY2FzdDxmcm9t
X3R5cGUgJj4ocG5lLT5maXJzdCk7CiAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQog
ICAgICB9Y2F0Y2goLi4uKXsKICAgICAgICBpZih0bml0IT1ibS50c2V0LmVuZCgpKWJtLnRzZXQu
ZXJhc2UodG5pdCk7CiAgICAgICAgaWYocG5lKWJtLmRlbGV0ZV9lbGVtZW50KHBuZSk7CiAgICAg
ICAgdGhyb3c7CiAgICAgIH0KICAgIH0KCiAgcHJpdmF0ZToKICAgIGZyb21fYmluZGluZyYgb3Bl
cmF0b3I9KGNvbnN0IGZyb21fYmluZGluZyYpOwoKICAgIGJpbWFwX3R5cGUmIGJtOwogICAgY29u
c3QgZnJvbV90eXBlIGY7CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgYmltYXBfdHlwZT4KICBj
bGFzcyBjb25zdF9mcm9tX2JpbmRpbmcKICB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGJpbWFwX3R5
cGU6OmZyb21fdHlwZSBmcm9tX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGJpbWFwX3R5cGU6
OnRvX3R5cGUgdG9fdHlwZTsKICBwdWJsaWM6CiAgICBjb25zdF9mcm9tX2JpbmRpbmcoY29uc3Qg
YmltYXBfdHlwZSYgYm0sY29uc3QgZnJvbV90eXBlJiBmKTpibShibSksZihmKXt9CgogICAgY29u
c3QgdG9fdHlwZSYgZ2V0KCkgY29uc3QKICAgIHsKICAgICAgdHlwZW5hbWUgYmltYXBfdHlwZTo6
ZnJvbV9zZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0PWJtLmZzZXQuZmluZCgmZik7CiAgICAgIGlmKGl0
PT1ibS5mc2V0LmVuZCgpKXRocm93IHZhbHVlX25vdF9mb3VuZCgpOwogICAgICByZXR1cm4gYmlt
YXBfdHlwZTo6ZWxlbWVudF9ieV9mcm9tKCppdCktPnNlY29uZDsKICAgIH0KCiAgICBvcGVyYXRv
ciBjb25zdCB0b190eXBlJigpIGNvbnN0CiAgICB7CiAgICAgIHJldHVybiBnZXQoKTsKICAgIH0K
CiAgcHJpdmF0ZToKICAgIGNvbnN0X2Zyb21fYmluZGluZyYgb3BlcmF0b3I9KGNvbnN0IGNvbnN0
X2Zyb21fYmluZGluZyYpOwoKICAgIGNvbnN0IGJpbWFwX3R5cGUmIGJtOwogICAgY29uc3QgZnJv
bV90eXBlIGY7CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgYmltYXBfdHlwZT4KICBjbGFzcyB0
b19iaW5kaW5nCiAgewogICAgdHlwZWRlZiB0eXBlbmFtZSBiaW1hcF90eXBlOjpmcm9tX3R5cGUg
ZnJvbV90eXBlOwogICAgdHlwZWRlZiB0eXBlbmFtZSBiaW1hcF90eXBlOjp0b190eXBlIHRvX3R5
cGU7CiAgcHVibGljOgogICAgdG9fYmluZGluZyhiaW1hcF90eXBlJiBibSxjb25zdCB0b190eXBl
JiB0KTpibShibSksdCh0KXt9CgogICAgY29uc3QgZnJvbV90eXBlJiBnZXQoKSBjb25zdAogICAg
ewogICAgICB0eXBlbmFtZSBiaW1hcF90eXBlOjp0b19zZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0PWJt
LnRzZXQuZmluZCgmdCk7CiAgICAgIGlmKGl0PT1ibS50c2V0LmVuZCgpKXRocm93IHZhbHVlX25v
dF9mb3VuZCgpOwogICAgICByZXR1cm4gYmltYXBfdHlwZTo6ZWxlbWVudF9ieV90bygqaXQpLT5m
aXJzdDsKICAgIH0KCiAgICBvcGVyYXRvciBjb25zdCBmcm9tX3R5cGUmKCkgY29uc3QKICAgIHsK
ICAgICAgcmV0dXJuIGdldCgpOwogICAgfQoKICAgIHRvX2JpbmRpbmcmIG9wZXJhdG9yPShjb25z
dCBmcm9tX3R5cGUmIGYpCiAgICB7CiAgICAgIHR5cGVuYW1lIGJpbWFwX3R5cGU6OnRzZXRfaXRl
cmF0b3IgdGl0PWJtLnRzZXQuZmluZCgmdCk7CiAgICAgIHR5cGVuYW1lIGJpbWFwX3R5cGU6OmZz
ZXRfaXRlcmF0b3IgZml0PWJtLmZzZXQuZmluZCgmZik7CiAgICAgIGlmKGZpdCE9Ym0uZnNldC5l
bmQoKSl7CgogICAgICAgIGlmKHRpdCE9Ym0udHNldC5lbmQoKSYmCiAgICAgICAgICAgYmltYXBf
dHlwZTo6ZWxlbWVudF9ieV90bygqdGl0KT09YmltYXBfdHlwZTo6ZWxlbWVudF9ieV9mcm9tKCpm
aXQpKXsKICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAgZWxzZSB0aHJv
dyBkdXBsaWNhdGVfdmFsdWUoKTsKICAgICAgfQoKICAgICAgdHlwZW5hbWUgYmltYXBfdHlwZTo6
ZWxlbWVudCAqIHBuZT0wOwogICAgICB0eXBlbmFtZSBiaW1hcF90eXBlOjpmc2V0X2l0ZXJhdG9y
IGZuaXQ9Ym0uZnNldC5lbmQoKTsKICAgICAgdHJ5ewogICAgICAgIHBuZT1ibS5uZXdfZWxlbWVu
dChiaW1hcF90eXBlOjplbGVtZW50KGYsdCkpOwogICAgICAgIGZuaXQ9Ym0uZnNldC5pbnNlcnQo
JnBuZS0+Zmlyc3QpLmZpcnN0OwogICAgICAgIGlmKHRpdD09Ym0udHNldC5lbmQoKSl7CiAgICAg
ICAgICBibS50c2V0Lmluc2VydCgmcG5lLT5zZWNvbmQpOwogICAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICB0eXBlbmFtZSBiaW1hcF90eXBlOjpl
bGVtZW50ICogcGU9YmltYXBfdHlwZTo6ZWxlbWVudF9ieV90bygqdGl0KTsKICAgICAgICAgIGJt
LmZzZXQuZXJhc2UoYm0uZnNldC5maW5kKCZwZS0+Zmlyc3QpKTsKICAgICAgICAgIGJtLmRlbGV0
ZV9lbGVtZW50KHBlKTsKICAgICAgICAgIGNvbnN0X2Nhc3Q8dG9fdHlwZSAqJj4oKnRpdCk9CiAg
ICAgICAgICAgICZjb25zdF9jYXN0PHRvX3R5cGUgJj4ocG5lLT5zZWNvbmQpOwogICAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgICAgIH0KICAgICAgfWNhdGNoKC4uLil7CiAgICAgICAgaWYoZm5p
dCE9Ym0uZnNldC5lbmQoKSlibS5mc2V0LmVyYXNlKGZuaXQpOwogICAgICAgIGlmKHBuZSlibS5k
ZWxldGVfZWxlbWVudChwbmUpOwogICAgICAgIHRocm93OwogICAgICB9CiAgICB9CgogIHByaXZh
dGU6CiAgICB0b19iaW5kaW5nJiBvcGVyYXRvcj0oY29uc3QgdG9fYmluZGluZyYpOwoKICAgIGJp
bWFwX3R5cGUmIGJtOwogICAgY29uc3QgdG9fdHlwZSB0OwogIH07CgogIHRlbXBsYXRlPHR5cGVu
YW1lIGJpbWFwX3R5cGU+CiAgY2xhc3MgY29uc3RfdG9fYmluZGluZwogIHsKICAgIHR5cGVkZWYg
dHlwZW5hbWUgYmltYXBfdHlwZTo6ZnJvbV90eXBlIGZyb21fdHlwZTsKICAgIHR5cGVkZWYgdHlw
ZW5hbWUgYmltYXBfdHlwZTo6dG9fdHlwZSB0b190eXBlOwogIHB1YmxpYzoKICAgIGNvbnN0X3Rv
X2JpbmRpbmcoY29uc3QgYmltYXBfdHlwZSYgYm0sY29uc3QgdG9fdHlwZSYgdCk6Ym0oYm0pLHQo
dCl7fQoKICAgIGNvbnN0IGZyb21fdHlwZSYgZ2V0KCkgY29uc3QKICAgIHsKICAgICAgdHlwZW5h
bWUgYmltYXBfdHlwZTo6dG9fc2V0Ojpjb25zdF9pdGVyYXRvciBpdD1ibS50c2V0LmZpbmQoJnQp
OwogICAgICBpZihpdD09Ym0udHNldC5lbmQoKSl0aHJvdyB2YWx1ZV9ub3RfZm91bmQoKTsKICAg
ICAgcmV0dXJuIGJpbWFwX3R5cGU6OmVsZW1lbnRfYnlfdG8oKml0KS0+Zmlyc3Q7CiAgICB9Cgog
ICAgb3BlcmF0b3IgY29uc3QgZnJvbV90eXBlJigpIGNvbnN0CiAgICB7CiAgICAgIHJldHVybiBn
ZXQoKTsKICAgIH0KCiAgcHJpdmF0ZToKICAgIGNvbnN0X3RvX2JpbmRpbmcmIG9wZXJhdG9yPShj
b25zdCBjb25zdF90b19iaW5kaW5nJik7CgogICAgY29uc3QgYmltYXBfdHlwZSYgYm07CiAgICBj
b25zdCB0b190eXBlIHQ7CiAgfTsKfTsKCgoKCgoKdGVtcGxhdGU8CiAgdHlwZW5hbWUgRlRZUEUs
IHR5cGVuYW1lIFRUWVBFLAogIHR5cGVuYW1lIGZyb21fY29tcGFyZSx0eXBlbmFtZSB0b19jb21w
YXJlLAogIHR5cGVuYW1lIGFsbG9jX3R5cGU+CmNsYXNzIHByZWJpbWFwOnB1YmxpYyBiaW1hcF9i
YXNlCnsKcHJpdmF0ZToKCgoKCgogIHR5cGVkZWYgRlRZUEUgZnJvbV90eXBlOwogIHR5cGVkZWYg
VFRZUEUgdG9fdHlwZTsKCiAgdGVtcGxhdGU8CiAgICB0eXBlbmFtZSB0eXBlLAogICAgdHlwZW5h
bWUgY29tcGFyZT1zdGQ6Omxlc3M8dHlwZT4gPgogIHN0cnVjdCBwX2NvbXBhcmUKICB7CiAgICBw
X2NvbXBhcmUoY29uc3QgY29tcGFyZSYgYz1jb21wYXJlKCkpOmMoYyl7fQogICAgYm9vbCBvcGVy
YXRvcigpKGNvbnN0IHR5cGUqIHAxLGNvbnN0IHR5cGUqIHAyKWNvbnN0e3JldHVybiBjKCpwMSwq
cDIpO30KICAgIGNvbXBhcmUgZ2V0X2NvbXBhcmUoKSBjb25zdHtyZXR1cm4gYzt9CiAgcHJpdmF0
ZToKICAgIGNvbXBhcmUgYzsKICB9OwoKICB0eXBlZGVmIHN0ZDo6c2V0PAogICAgY29uc3QgZnJv
bV90eXBlKiwKICAgIHBfY29tcGFyZTwKICAgICAgZnJvbV90eXBlLAogICAgICBmcm9tX2NvbXBh
cmU+LAogICAgICBhbGxvY190eXBlPiBmcm9tX3NldDsKICB0eXBlZGVmIHN0ZDo6c2V0PAogICAg
Y29uc3QgdG9fdHlwZSosCiAgICBwX2NvbXBhcmU8CiAgICAgIHRvX3R5cGUsCiAgICAgIHRvX2Nv
bXBhcmU+LAogICAgICBhbGxvY190eXBlPiB0b19zZXQ7CiAgdHlwZWRlZiB0eXBlbmFtZSBmcm9t
X3NldDo6aXRlcmF0b3IgZnNldF9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIGZyb21fc2V0
Ojpjb25zdF9pdGVyYXRvciBjb25zdF9mc2V0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUg
dG9fc2V0OjppdGVyYXRvciB0c2V0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgdG9fc2V0
Ojpjb25zdF9pdGVyYXRvciBjb25zdF90c2V0X2l0ZXJhdG9yOwogIHR5cGVkZWYgZGlyZWN0X3Bh
aXI8Y29uc3QgZnJvbV90eXBlLCBjb25zdCB0b190eXBlPiBlbGVtZW50OwoKICBmcm9tX3NldCBm
c2V0OwogIHRvX3NldCB0c2V0OwoKcHJvdGVjdGVkOgoKCgoKICBhbGxvY190eXBlIGFsbG9jYXRv
cjsKCnByaXZhdGU6CgoKCgoKCiAgZWxlbWVudCAqIG5ld19lbGVtZW50KGNvbnN0IGVsZW1lbnQm
IGUpCiAgewogICAgZWxlbWVudCAqIHBlPWFsbG9jYXRvci5hbGxvY2F0ZShzaXplb2YoZWxlbWVu
dCksMCk7CiAgICB0cnl7CiAgICAgIGFsbG9jYXRvci5jb25zdHJ1Y3QocGUsZSk7CiAgICB9Y2F0
Y2goLi4uKXsKICAgICAgYWxsb2NhdG9yLmRlc3Ryb3kocGUpOwogICAgICB0aHJvdzsKICAgIH0K
ICAgIHJldHVybiBwZTsKICB9CgogIHZvaWQgZGVsZXRlX2VsZW1lbnQoZWxlbWVudCAqcGUpCiAg
ewogICAgYWxsb2NhdG9yLmRlc3Ryb3kocGUpOwogICAgYWxsb2NhdG9yLmRlYWxsb2NhdGUocGUs
c2l6ZW9mKGVsZW1lbnQpKTsKICB9CgogIHN0YXRpYyBlbGVtZW50ICogZWxlbWVudF9ieV9mcm9t
KGNvbnN0IGZyb21fdHlwZSogcGYpCiAgewogICAgcmV0dXJuCiAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8ZWxlbWVudCo+KAogICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KAogICAgICAgICAg
Y29uc3RfY2FzdDxmcm9tX3R5cGUgKj4ocGYpKS0KICAgICAgICAgICgoc2l6ZV90KSAmKChlbGVt
ZW50ICopMCktPmZpcnN0KSk7CiAgfQoKICBzdGF0aWMgZWxlbWVudCAqIGVsZW1lbnRfYnlfdG8o
Y29uc3QgdG9fdHlwZSogcHQpCiAgewogICAgcmV0dXJuCiAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
ZWxlbWVudCAqPigKICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIqPigKICAgICAgICAgIGNv
bnN0X2Nhc3Q8dG9fdHlwZSAqPihwdCkpLQogICAgICAgICAgKChzaXplX3QpICYoKGVsZW1lbnQg
KikwKS0+c2Vjb25kKSk7CiAgfQoKcHVibGljOgoKCiAgY2xhc3MgZnJvbQogIHsKICAgIGZyaWVu
ZCBjbGFzcyBwcmViaW1hcDsKICBwdWJsaWM6CgoKCiAgICBmcm9tJiBvcGVyYXRvcj0oY29uc3Qg
ZnJvbSYgcikKICAgIHsKICAgICAgcHJlYmltYXAgdG1wKHIub3duZXIoKSk7CiAgICAgIHN3YXAo
dG1wLmZyb20pOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKCiAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgZnJvbSYgciljb25zdAogICAgewogICAgICByZXR1cm4gc2l6ZSgpPT1yLnNpemUo
KSYmc3RkOjplcXVhbChiZWdpbigpLGVuZCgpLHIuYmVnaW4oKSk7CiAgICB9CgogICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IGZyb20mIHIpY29uc3QKICAgIHsKICAgICAgcmV0dXJuICEoKnRoaXM9
PXIpOwogICAgfQoKICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGZyb20mIHIpY29uc3QKICAgIHsK
ICAgICAgcmV0dXJuCiAgICAgICAgc3RkOjpsZXhpY29ncmFwaGljYWxfY29tcGFyZSgKICAgICAg
ICAgIGJlZ2luKCksZW5kKCksci5iZWdpbigpLHIuZW5kKCkpOwogICAgfQoKICAgIGJvb2wgb3Bl
cmF0b3I+KGNvbnN0IGZyb20mIHIpY29uc3QKICAgIHsKICAgICAgcmV0dXJuIHI8KnRoaXM7CiAg
ICB9CgogICAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IGZyb20mIHIpY29uc3QKICAgIHsKICAgICAg
cmV0dXJuICEocjwqdGhpcyk7CiAgICB9CgogICAgYm9vbCBvcGVyYXRvcj49KGNvbnN0IGZyb20m
IHIpY29uc3QKICAgIHsKICAgICAgcmV0dXJuICEoKnRoaXM8cik7CiAgICB9CgoKCiAgICB0eXBl
ZGVmIGZyb21fdHlwZSBrZXlfdHlwZTsKICAgIHR5cGVkZWYgdG9fdHlwZSBtYXBwZWRfdHlwZTsK
ICAgIHR5cGVkZWYgdG9fdHlwZSByZWZlcmVudF90eXBlOwogICAgdHlwZWRlZiB0b190eXBlIGRh
dGFfdHlwZTsKICAgIHR5cGVkZWYgZnJvbV9jb21wYXJlIGtleV9jb21wYXJlOwogICAgdHlwZWRl
ZiBhbGxvY190eXBlIGFsbG9jYXRvcl90eXBlOwogICAgdHlwZWRlZgogICAgICBkaXJlY3RfcGFp
cjwKICAgICAgICBjb25zdCBmcm9tX3R5cGUsCiAgICAgICAgY29uc3QgdG9fdHlwZT4gdmFsdWVf
dHlwZTsKCgoKCgogICAgY2xhc3MgdmFsdWVfY29tcGFyZTpwdWJsaWMgc3RkOjpiaW5hcnlfZnVu
Y3Rpb248dmFsdWVfdHlwZSx2YWx1ZV90eXBlLGJvb2w+CiAgICB7CiAgICBwdWJsaWM6CiAgICAg
IGJvb2wgb3BlcmF0b3IoKShjb25zdCB2YWx1ZV90eXBlJiB4LGNvbnN0IHZhbHVlX3R5cGUmIHkp
CiAgICAgIHsKICAgICAgICBpZihrY29tcCh4LmZpcnN0LHkuZmlyc3QpKXJldHVybiB0cnVlOwog
ICAgICAgIGlmKGtjb21wKHkuZmlyc3QseC5maXJzdCkpcmV0dXJuIGZhbHNlOwogICAgICAgIHJl
dHVybiB0Y29tcCh4LnNlY29uZCx5LnNlY29uZCk7CiAgICAgIH0KICAgIHByb3RlY3RlZDoKICAg
ICAgdmFsdWVfY29tcGFyZShrZXlfY29tcGFyZSBrY29tcCx0b19jb21wYXJlIHRjb21wKTprY29t
cChrY29tcCksdGNvbXAodGNvbXApe30KICAgICAga2V5X2NvbXBhcmUga2NvbXA7CiAgICAgIHRv
X2NvbXBhcmUgdGNvbXA7CiAgICB9OwoKICAgIHR5cGVkZWYgdHlwZW5hbWUgYWxsb2NhdG9yX3R5
cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGFsbG9jYXRvcl90
eXBlOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgdHlwZWRlZiB2YWx1ZV90
eXBlICogcG9pbnRlcjsKICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSAqIGNvbnN0X3BvaW50
ZXI7CiAgICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICAgIHR5cGVkZWYgY29uc3Qg
dmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwoKCgogICAgY2xhc3MgY29uc3RfaXRlcmF0b3I7
CiAgICBjbGFzcyBpdGVyYXRvciA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPAogICAgICBzdGQ6OmJp
ZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBjb25zdCB2YWx1ZV90eXBlLCBkaWZmZXJlbmNlX3R5
cGU+CiAgICB7CiAgICAgIGZyaWVuZCBjbGFzcyBmcm9tOwogICAgICBmcmllbmQgY2xhc3MgY29u
c3RfaXRlcmF0b3I7CiAgICAgIGZyaWVuZCBjbGFzcyBwcmViaW1hcDsKICAgIHB1YmxpYzoKICAg
ICAgaXRlcmF0b3IoKXt9CiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yOjpyZWZlcmVuY2Ugb3BlcmF0
b3IqKCljb25zdHtyZXR1cm4gKmVsZW1lbnRfYnlfZnJvbSgqZml0KTt9CiAgICAgIHR5cGVuYW1l
IGl0ZXJhdG9yOjp2YWx1ZV90eXBlICogb3BlcmF0b3ItPigpY29uc3R7cmV0dXJuICZvcGVyYXRv
ciooKTt9CiAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCl7KytmaXQ7cmV0dXJuICp0aGlzO30K
ICAgICAgY29uc3QgaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpe2NvbnN0IGl0ZXJhdG9yIHRtcD0q
dGhpczsrKyp0aGlzO3JldHVybiB0bXA7fQogICAgICBpdGVyYXRvciYgb3BlcmF0b3ItLSgpey0t
Zml0O3JldHVybiAqdGhpczt9CiAgICAgIGNvbnN0IGl0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KXtj
b25zdCBpdGVyYXRvciB0bXA9KnRoaXM7LS0qdGhpcztyZXR1cm4gdG1wO30KICAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBpdCljb25zdHtyZXR1cm4gZml0PT1pdC5maXQ7fQog
ICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIGl0KWNvbnN0e3JldHVybiAhKCp0
aGlzPT1pdCk7fQogICAgcHJpdmF0ZToKICAgICAgaXRlcmF0b3IoY29uc3QgZnNldF9pdGVyYXRv
ciYgZml0KTpmaXQoZml0KXt9CiAgICAgIGZzZXRfaXRlcmF0b3IgZml0OwogICAgfTsKCiAgICBj
bGFzcyBjb25zdF9pdGVyYXRvcjpwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6OmJpZGlyZWN0aW9u
YWxfaXRlcmF0b3JfdGFnLGNvbnN0IHZhbHVlX3R5cGU+CiAgICB7CiAgICAgIGZyaWVuZCBjbGFz
cyBmcm9tOwogICAgICBmcmllbmQgY2xhc3MgcHJlYmltYXA7CiAgICBwdWJsaWM6CiAgICAgIGNv
bnN0X2l0ZXJhdG9yKCl7fQogICAgICBjb25zdF9pdGVyYXRvcihjb25zdCBpdGVyYXRvciYgaXQp
OmZpdChpdC5maXQpe30KICAgICAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yKigpY29uc3R7cmV0
dXJuICplbGVtZW50X2J5X2Zyb20oKmZpdCk7fQogICAgICB0eXBlbmFtZSBjb25zdF9pdGVyYXRv
cjo6IHZhbHVlX3R5cGUgKiBvcGVyYXRvci0+KCljb25zdHtyZXR1cm4gJm9wZXJhdG9yKigpO30K
ICAgICAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKysoKXsrK2ZpdDtyZXR1cm4gKnRoaXM7fQog
ICAgICBjb25zdCBjb25zdF9pdGVyYXRvciBvcGVyYXRvcisrKGludCl7Y29uc3QgY29uc3RfaXRl
cmF0b3IgdG1wPSp0aGlzOysrKnRoaXM7cmV0dXJuIHRtcDt9CiAgICAgIGNvbnN0X2l0ZXJhdG9y
JiBvcGVyYXRvci0tKCl7LS1maXQ7cmV0dXJuICp0aGlzO30KICAgICAgY29uc3QgY29uc3RfaXRl
cmF0b3Igb3BlcmF0b3ItLShpbnQpe2NvbnN0IGNvbnN0X2l0ZXJhdG9yIHRtcD0qdGhpczstLSp0
aGlzO3JldHVybiB0bXA7fQogICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgY29uc3RfaXRlcmF0
b3ImIGl0KWNvbnN0e3JldHVybiBmaXQ9PWl0LmZpdDt9CiAgICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBjb25zdF9pdGVyYXRvciYgaXQpY29uc3R7cmV0dXJuICEoKnRoaXM9PWl0KTt9CiAgICBw
cml2YXRlOgogICAgICBjb25zdF9pdGVyYXRvcihjb25zdCBjb25zdF9mc2V0X2l0ZXJhdG9yJiBm
aXQpOmZpdChmaXQpe30KICAgICAgY29uc3RfZnNldF9pdGVyYXRvciBmaXQ7CiAgICB9OwoKICAg
IHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiByZXZlcnNlX2l0
ZXJhdG9yOwogICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0
b3I7CgoKCiAgICBpdGVyYXRvciBiZWdpbigpe3JldHVybiBpdGVyYXRvcihvd25lcigpLmZzZXQu
YmVnaW4oKSk7fQogICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKWNvbnN0e3JldHVybiBjb25zdF9p
dGVyYXRvcihvd25lcigpLmZzZXQuYmVnaW4oKSk7fQogICAgaXRlcmF0b3IgZW5kKCl7cmV0dXJu
IGl0ZXJhdG9yKG93bmVyKCkuZnNldC5lbmQoKSk7fQogICAgY29uc3RfaXRlcmF0b3IgZW5kKClj
b25zdHtyZXR1cm4gY29uc3RfaXRlcmF0b3Iob3duZXIoKS5mc2V0LmVuZCgpKTt9CgogICAgcmV2
ZXJzZV9pdGVyYXRvciByYmVnaW4oKXtyZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7fQog
ICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKWNvbnN0e3JldHVybiBjb25zdF9yZXZl
cnNlX2l0ZXJhdG9yKGVuZCgpKTt9CiAgICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKXtyZXR1cm4g
cmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTt9CiAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJl
bmQoKWNvbnN0e3JldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpO30KCgoKICAg
IHNpemVfdHlwZSBzaXplKCljb25zdHtyZXR1cm4gb3duZXIoKS5mc2V0LnNpemUoKTt9CiAgICBz
aXplX3R5cGUgbWF4X3NpemUoKWNvbnN0e3JldHVybiBvd25lcigpLmZzZXQubWF4X3NpemUoKTt9
CiAgICBib29sIGVtcHR5KCljb25zdHtyZXR1cm4gb3duZXIoKS5mc2V0LmVtcHR5KCk7fQogICAg
YWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpY29uc3R7cmV0dXJuIG93bmVyKCkuYWxsb2Nh
dG9yO30KCgoKICAgIGZyb21fYmluZGluZzxwcmViaW1hcDxmcm9tX3R5cGUsdG9fdHlwZSxmcm9t
X2NvbXBhcmUsdG9fY29tcGFyZSxhbGxvY2F0b3JfdHlwZT4gPgogICAgb3BlcmF0b3JbXShjb25z
dCBmcm9tX3R5cGUmIGYpCiAgICB7CiAgICAgIHJldHVybgogICAgICAgIGZyb21fYmluZGluZzxw
cmViaW1hcDxmcm9tX3R5cGUsdG9fdHlwZSxmcm9tX2NvbXBhcmUsdG9fY29tcGFyZSxhbGxvY2F0
b3JfdHlwZT4gPgogICAgICAgICAgKG93bmVyKCksZik7CiAgICB9CgogICAgY29uc3RfZnJvbV9i
aW5kaW5nPHByZWJpbWFwPGZyb21fdHlwZSx0b190eXBlLGZyb21fY29tcGFyZSx0b19jb21wYXJl
LGFsbG9jYXRvcl90eXBlPiA+CiAgICBvcGVyYXRvcltdKGNvbnN0IGZyb21fdHlwZSYgZikgY29u
c3QKICAgIHsKICAgICAgcmV0dXJuCiAgICAgICAgY29uc3RfZnJvbV9iaW5kaW5nPHByZWJpbWFw
PGZyb21fdHlwZSx0b190eXBlLGZyb21fY29tcGFyZSx0b19jb21wYXJlLGFsbG9jYXRvcl90eXBl
PiA+CiAgICAgICAgICAob3duZXIoKSxmKTsKICAgIH0KCgoKICAgIHN0ZDo6cGFpcjxpdGVyYXRv
ciwgYm9vbD4gaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIHgpCiAgICB7CiAgICAgIGZzZXRfaXRl
cmF0b3IgZml0PW93bmVyKCkuZnNldC5maW5kKCZ4LmZpcnN0KTsKICAgICAgaWYoZml0IT1vd25l
cigpLmZzZXQuZW5kKCkpewogICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihpdGVyYXRvcihm
aXQpLGZhbHNlKTsKICAgICAgfQogICAgICB0c2V0X2l0ZXJhdG9yIHRpdD1vd25lcigpLnRzZXQu
ZmluZCgmeC5zZWNvbmQpOwogICAgICBpZih0aXQhPW93bmVyKCkudHNldC5lbmQoKSl0aHJvdyBk
dXBsaWNhdGVfdmFsdWUoKTsKCiAgICAgIGVsZW1lbnQgKiBwZT0wOwogICAgICB0c2V0X2l0ZXJh
dG9yIHRuaXQ9b3duZXIoKS50c2V0LmVuZCgpOwogICAgICBmc2V0X2l0ZXJhdG9yIGZuaXQ9b3du
ZXIoKS5mc2V0LmVuZCgpOwogICAgICB0cnl7CiAgICAgICAgcGU9b3duZXIoKS5uZXdfZWxlbWVu
dCh4KTsKICAgICAgICB0bml0PW93bmVyKCkudHNldC5pbnNlcnQoJnBlLT5zZWNvbmQpLmZpcnN0
OwogICAgICAgIGZuaXQ9b3duZXIoKS5mc2V0Lmluc2VydCgmcGUtPmZpcnN0KS5maXJzdDsKICAg
ICAgfWNhdGNoKC4uLil7CiAgICAgICAgaWYodG5pdCE9b3duZXIoKS50c2V0LmVuZCgpKW93bmVy
KCkudHNldC5lcmFzZSh0bml0KTsKICAgICAgICBpZihwZSlvd25lcigpLmRlbGV0ZV9lbGVtZW50
KHBlKTsKICAgICAgICB0aHJvdzsKICAgICAgfQogICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIo
aXRlcmF0b3IoZm5pdCksdHJ1ZSk7CiAgICB9CgogICAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9y
IGl0LCBjb25zdCB2YWx1ZV90eXBlJiB4KQogICAgewogICAgICBpZighYWRqYWNlbnQoaXQuZml0
LHguZmlyc3QpKXJldHVybiBpbnNlcnQoeCkuZmlyc3Q7CgogICAgICB0c2V0X2l0ZXJhdG9yIHRp
dD1vd25lcigpLnRzZXQuZmluZCgmeC5zZWNvbmQpOwogICAgICBpZih0aXQhPW93bmVyKCkudHNl
dC5lbmQoKSl0aHJvdyBkdXBsaWNhdGVfdmFsdWUoKTsKCiAgICAgIGVsZW1lbnQgKiBwZT0wOwog
ICAgICB0c2V0X2l0ZXJhdG9yIHRuaXQ9b3duZXIoKS50c2V0LmVuZCgpOwogICAgICBmc2V0X2l0
ZXJhdG9yIGZuaXQ9b3duZXIoKS5mc2V0LmVuZCgpOwogICAgICB0cnl7CiAgICAgICAgcGU9b3du
ZXIoKS5uZXdfZWxlbWVudCh4KTsKICAgICAgICB0bml0PW93bmVyKCkudHNldC5pbnNlcnQoJnBl
LT5zZWNvbmQpLmZpcnN0OwogICAgICAgIGZuaXQ9b3duZXIoKS5mc2V0Lmluc2VydChpdC5maXQs
JnBlLT5maXJzdCk7CiAgICAgIH1jYXRjaCguLi4pewogICAgICAgIGlmKHRuaXQhPW93bmVyKCku
dHNldC5lbmQoKSlvd25lcigpLnRzZXQuZXJhc2UodG5pdCk7CiAgICAgICAgaWYocGUpb3duZXIo
KS5kZWxldGVfZWxlbWVudChwZSk7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICAgICAgcmV0dXJu
IGl0ZXJhdG9yKGZuaXQpOwogICAgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIGl0X3R5cGU+CiAg
ICB2b2lkIGluc2VydChpdF90eXBlIGZpcnN0LGl0X3R5cGUgbGFzdCkKICAgIHsKICAgICAgd2hp
bGUoZmlyc3QhPWxhc3QpewogICAgICAgIGluc2VydCgqZmlyc3QpOwogICAgICAgICsrZmlyc3Q7
CiAgICAgIH0KICAgIH0KCiAgICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBpdCkKICAgIHsKICAg
ICAgZnNldF9pdGVyYXRvciYgZml0PWl0LmZpdDsKICAgICAgZWxlbWVudCAqIHBlPWVsZW1lbnRf
YnlfZnJvbSgqZml0KTsKICAgICAgdHNldF9pdGVyYXRvciB0aXQ9b3duZXIoKS50c2V0LmZpbmQo
JnBlLT5zZWNvbmQpOwogICAgICBvd25lcigpLmRlbGV0ZV9lbGVtZW50KHBlKTsKICAgICAgb3du
ZXIoKS50c2V0LmVyYXNlKHRpdCk7CiAgICAgIHJldHVybihpdGVyYXRvcihvd25lcigpLmZzZXQu
ZXJhc2UoZml0KSkpOwogICAgfQoKCgoKCgogICAgdm9pZCBlcmFzZShpdGVyYXRvciBmaXJzdCwg
aXRlcmF0b3IgbGFzdCkKICAgIHsKICAgICAgd2hpbGUoZmlyc3QhPWxhc3QpZXJhc2UoZmlyc3Qr
Kyk7CiAgICB9CgogICAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBlJiBrZXkpCiAgICB7
CiAgICAgIGZzZXRfaXRlcmF0b3IgZml0PW93bmVyKCkuZnNldC5maW5kKCZrZXkpOwogICAgICBp
ZihmaXQ9PW93bmVyKCkuZnNldC5lbmQoKSlyZXR1cm4gMDsKICAgICAgZWxlbWVudCAqIHBlPWVs
ZW1lbnRfYnlfZnJvbSgqZml0KTsKICAgICAgb3duZXIoKS50c2V0LmVyYXNlKG93bmVyKCkudHNl
dC5maW5kKCZwZS0+c2Vjb25kKSk7CiAgICAgIG93bmVyKCkuZnNldC5lcmFzZShmaXQpOwogICAg
ICBvd25lcigpLmRlbGV0ZV9lbGVtZW50KHBlKTsKICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAg
dm9pZCBjbGVhcigpCiAgICB7CiAgICAgIGVyYXNlKGJlZ2luKCksZW5kKCkpOwogICAgfQoKICAg
IHZvaWQgc3dhcChmcm9tJiB4KQogICAgewoKCiAgICAgIG93bmVyKCkuZnNldC5zd2FwKHgub3du
ZXIoKS5mc2V0KTsKICAgICAgb3duZXIoKS50c2V0LnN3YXAoeC5vd25lcigpLnRzZXQpOwogICAg
fQoKICAgIGZyaWVuZCB2b2lkIHN3YXAoZnJvbSYgeCwgZnJvbSYgeSkKICAgIHsKICAgICAgeC5z
d2FwKHkpOwogICAgfQoKCgogICAga2V5X2NvbXBhcmUga2V5X2NvbXAoKWNvbnN0CiAgICB7CiAg
ICAgIHJldHVybiBvd25lcigpLmZzZXQua2V5X2NvbXAoKS5nZXRfY29tcGFyZSgpOwogICAgfQoK
ICAgIHZhbHVlX2NvbXBhcmUgdmFsdWVfY29tcCgpY29uc3QKICAgIHsKICAgICAgcmV0dXJuCiAg
ICAgICAgdmFsdWVfY29tcGFyZSgKICAgICAgICAgIG93bmVyKCkuZnNldC5rZXlfY29tcCgpLmdl
dF9jb21wYXJlKCksCiAgICAgICAgICBvd25lcigpLnRzZXQua2V5X2NvbXAoKS5nZXRfY29tcGFy
ZSgpKTsKICAgIH0KCiAgICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBrZXkpCiAgICB7
CiAgICAgIHJldHVybiBpdGVyYXRvcihvd25lcigpLmZzZXQuZmluZCgma2V5KSk7CiAgICB9Cgog
ICAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYga2V5KWNvbnN0CiAgICB7CiAg
ICAgIHJldHVybiBjb25zdF9pdGVyYXRvcihvd25lcigpLmZzZXQuZmluZCgma2V5KSk7CiAgICB9
CgogICAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtleV90eXBlJiBrZXkpY29uc3QKICAgIHsKICAg
ICAgcmV0dXJuIG93bmVyKCkuZnNldC5jb3VudCgma2V5KTsKICAgIH0KCiAgICBpdGVyYXRvciBs
b3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYga2V5KQogICAgewogICAgICByZXR1cm4gaXRlcmF0
b3Iob3duZXIoKS5mc2V0Lmxvd2VyX2JvdW5kKCZrZXkpKTsKICAgIH0KCiAgICBjb25zdF9pdGVy
YXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYga2V5KWNvbnN0CiAgICB7CiAgICAgIHJl
dHVybiBjb25zdF9pdGVyYXRvcihvd25lcigpLmZzZXQubG93ZXJfYm91bmQoJmtleSkpOwogICAg
fQoKICAgIGl0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBrZXkpCiAgICB7CiAg
ICAgIHJldHVybiBpdGVyYXRvcihvd25lcigpLmZzZXQudXBwZXJfYm91bmQoJmtleSkpOwogICAg
fQoKICAgIGNvbnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBrZXkpY29u
c3QKICAgIHsKICAgICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKG93bmVyKCkuZnNldC51cHBlcl9i
b3VuZCgma2V5KSk7CiAgICB9CgogICAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4gZXF1
YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIGtleSkKICAgIHsKICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV9wYWlyKGxvd2VyX2JvdW5kKGtleSksdXBwZXJfYm91bmQoa2V5KSk7CiAgICB9CgogICAgc3Rk
OjpwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qg
a2V5X3R5cGUmIGtleSljb25zdAogICAgewogICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobG93
ZXJfYm91bmQoa2V5KSx1cHBlcl9ib3VuZChrZXkpKTsKICAgIH0KCiAgcHJpdmF0ZToKICAgIGZy
b20oKXt9CiAgICBmcm9tKGNvbnN0IGZyb20mKTsKCiAgICBwcmViaW1hcCYgb3duZXIoKQogICAg
ewogICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8cHJlYmltYXAqPigKICAgICAgICByZWlu
dGVycHJldF9jYXN0PGNoYXIqPih0aGlzKS0oKHNpemVfdCkgJigocHJlYmltYXAgKikwKS0+ZnJv
bSkpOwogICAgfTsKICAgIGNvbnN0IHByZWJpbWFwJiBvd25lcigpY29uc3QKICAgIHsKICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PGNvbnN0IHByZWJpbWFwKj4oCiAgICAgICAgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4odGhpcyktKChzaXplX3QpICYoKHByZWJpbWFwICopMCkt
PmZyb20pKTsKICAgIH07CgogICAgYm9vbCBhZGphY2VudChjb25zdF9mc2V0X2l0ZXJhdG9yIGZp
dCxjb25zdCBmcm9tX3R5cGUmIGYpY29uc3QKICAgIHsKICAgICAgaWYoZml0PT1vd25lcigpLmZz
ZXQuZW5kKCkpewogICAgICAgIGlmKG93bmVyKCkuZnNldC5zaXplKCk9PTApcmV0dXJuIHRydWU7
CiAgICAgICAgY29uc3RfZnNldF9pdGVyYXRvciBmaXQyPWZpdDsKICAgICAgICAtLWZpdDI7CiAg
ICAgICAgcmV0dXJuIG93bmVyKCkuZnNldC5rZXlfY29tcCgpKCpmaXQyLCZmKTsKICAgICAgfQog
ICAgICBlbHNlIGlmKG93bmVyKCkuZnNldC5rZXlfY29tcCgpKCZmLCpmaXQpKXsKICAgICAgICBp
ZihmaXQ9PW93bmVyKCkuZnNldC5iZWdpbigpKXJldHVybiB0cnVlOwogICAgICAgIGNvbnN0X2Zz
ZXRfaXRlcmF0b3IgZml0Mj1maXQ7CiAgICAgICAgLS1maXQyOwogICAgICAgIHJldHVybiBvd25l
cigpLmZzZXQua2V5X2NvbXAoKSgqZml0MiwmZik7CgogICAgICB9CiAgICAgIGVsc2UgaWYob3du
ZXIoKS5mc2V0LmtleV9jb21wKCkoKmZpdCwmZikpewogICAgICAgIGNvbnN0X2ZzZXRfaXRlcmF0
b3IgZml0Mj1maXQ7CiAgICAgICAgKytmaXQyOwogICAgICAgIGlmKGZpdDI9PW93bmVyKCkuZnNl
dC5lbmQoKSlyZXR1cm4gdHJ1ZTsKICAgICAgICByZXR1cm4gb3duZXIoKS5mc2V0LmtleV9jb21w
KCkoJmYsKmZpdDIpOwogICAgICB9CiAgICAgIGVsc2UgcmV0dXJuIGZhbHNlOwogICAgfQogIH1m
cm9tOwogIGZyaWVuZCBjbGFzcyBmcm9tOwogIGZyaWVuZCB0eXBlbmFtZSBmcm9tOjppdGVyYXRv
cjsKICBmcmllbmQgdHlwZW5hbWUgZnJvbTo6Y29uc3RfaXRlcmF0b3I7CiAgZnJpZW5kIGNsYXNz
IGZyb21fYmluZGluZzxwcmViaW1hcD47CiAgZnJpZW5kIGNsYXNzIGNvbnN0X2Zyb21fYmluZGlu
ZzxwcmViaW1hcD47CgoKCiAgY2xhc3MgdG8KICB7CiAgICBmcmllbmQgY2xhc3MgcHJlYmltYXA7
CiAgcHVibGljOgoKICAgIHRvJiBvcGVyYXRvcj0oY29uc3QgdG8mIHIpCiAgICB7CiAgICAgIHBy
ZWJpbWFwIHRtcChyLm93bmVyKCkpOwogICAgICBzd2FwKHRtcC50byk7CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCgoKICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCB0byYgciljb25zdAogICAg
ewogICAgICByZXR1cm4gc2l6ZSgpPT1yLnNpemUoKSYmc3RkOjplcXVhbChiZWdpbigpLGVuZCgp
LHIuYmVnaW4oKSk7CiAgICB9CgogICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHRvJiByKWNvbnN0
CiAgICB7CiAgICAgIHJldHVybiAhKCp0aGlzPT1yKTsKICAgIH0KCiAgICBib29sIG9wZXJhdG9y
PChjb25zdCB0byYgciljb25zdAogICAgewogICAgICByZXR1cm4KICAgICAgICBzdGQ6OmxleGlj
b2dyYXBoaWNhbF9jb21wYXJlKAogICAgICAgICAgYmVnaW4oKSxlbmQoKSxyLmJlZ2luKCksci5l
bmQoKSk7CiAgICB9CgogICAgYm9vbCBvcGVyYXRvcj4oY29uc3QgdG8mIHIpY29uc3QKICAgIHsK
ICAgICAgcmV0dXJuIHI8KnRoaXM7CiAgICB9CgogICAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IHRv
JiByKWNvbnN0CiAgICB7CiAgICAgIHJldHVybiAhKHI8KnRoaXMpOwogICAgfQoKICAgIGJvb2wg
b3BlcmF0b3I+PShjb25zdCB0byYgciljb25zdAogICAgewogICAgICByZXR1cm4gISgqdGhpczxy
KTsKICAgIH0KCgoKICAgIHR5cGVkZWYgdG9fdHlwZSBrZXlfdHlwZTsKICAgIHR5cGVkZWYgZnJv
bV90eXBlIG1hcHBlZF90eXBlOwogICAgdHlwZWRlZiBmcm9tX3R5cGUgcmVmZXJlbnRfdHlwZTsK
ICAgIHR5cGVkZWYgZnJvbV90eXBlIGRhdGFfdHlwZTsKICAgIHR5cGVkZWYgdG9fY29tcGFyZSBr
ZXlfY29tcGFyZTsKICAgIHR5cGVkZWYgYWxsb2NfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICAgIHR5
cGVkZWYKICAgICAgaW52X3BhaXI8CiAgICAgICAgY29uc3QgdG9fdHlwZSwKICAgICAgICBjb25z
dCBmcm9tX3R5cGU+IHZhbHVlX3R5cGU7CgogICAgY2xhc3MgdmFsdWVfY29tcGFyZTpwdWJsaWMg
c3RkOjpiaW5hcnlfZnVuY3Rpb248dmFsdWVfdHlwZSx2YWx1ZV90eXBlLGJvb2w+CiAgICB7CiAg
ICBwdWJsaWM6CiAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCB2YWx1ZV90eXBlJiB4LGNvbnN0
IHZhbHVlX3R5cGUmIHkpCiAgICAgIHsKICAgICAgICBpZihrY29tcCh4LmZpcnN0LHkuZmlyc3Qp
KXJldHVybiB0cnVlOwogICAgICAgIGlmKGtjb21wKHkuZmlyc3QseC5maXJzdCkpcmV0dXJuIGZh
bHNlOwogICAgICAgIHJldHVybiBmY29tcCh4LnNlY29uZCx5LnNlY29uZCk7CiAgICAgIH0KICAg
IHByb3RlY3RlZDoKICAgICAgdmFsdWVfY29tcGFyZShrZXlfY29tcGFyZSBrY29tcCxmcm9tX2Nv
bXBhcmUgZmNvbXApOmtjb21wKGtjb21wKSxmY29tcChmY29tcCl7fQogICAgICBrZXlfY29tcGFy
ZSBrY29tcDsKICAgICAgZnJvbV9jb21wYXJlIGZjb21wOwogICAgfTsKCiAgICB0eXBlZGVmIHR5
cGVuYW1lIGFsbG9jYXRvcl90eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAgdHlwZWRlZiB0
eXBlbmFtZSBhbGxvY2F0b3JfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsK
ICAgIHR5cGVkZWYgdmFsdWVfdHlwZSAqIHBvaW50ZXI7CiAgICB0eXBlZGVmIGNvbnN0IHZhbHVl
X3R5cGUgKiBjb25zdF9wb2ludGVyOwogICAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7
CiAgICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKCgoKICAgIGNs
YXNzIGNvbnN0X2l0ZXJhdG9yOwogICAgY2xhc3MgaXRlcmF0b3I6cHVibGljIHN0ZDo6aXRlcmF0
b3I8c3RkOjpiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyxjb25zdCB2YWx1ZV90eXBlPgogICAg
ewogICAgICBmcmllbmQgY2xhc3MgdG87CiAgICAgIGZyaWVuZCBjbGFzcyBjb25zdF9pdGVyYXRv
cjsKICAgICAgZnJpZW5kIGNsYXNzIHByZWJpbWFwOwogICAgcHVibGljOgogICAgICBpdGVyYXRv
cigpe30KICAgICAgdHlwZW5hbWUgaXRlcmF0b3I6OnJlZmVyZW5jZSBvcGVyYXRvciooKWNvbnN0
e3JldHVybiAqZWxlbWVudF9ieV90bygqdGl0KTt9CiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yOjp2
YWx1ZV90eXBlICogb3BlcmF0b3ItPigpY29uc3R7cmV0dXJuICZvcGVyYXRvciooKTt9CiAgICAg
IGl0ZXJhdG9yJiBvcGVyYXRvcisrKCl7Kyt0aXQ7cmV0dXJuICp0aGlzO30KICAgICAgY29uc3Qg
aXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpe2NvbnN0IGl0ZXJhdG9yIHRtcD0qdGhpczsrKyp0aGlz
O3JldHVybiB0bXA7fQogICAgICBpdGVyYXRvciYgb3BlcmF0b3ItLSgpey0tdGl0O3JldHVybiAq
dGhpczt9CiAgICAgIGNvbnN0IGl0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KXtjb25zdCBpdGVyYXRv
ciB0bXA9KnRoaXM7LS0qdGhpcztyZXR1cm4gdG1wO30KICAgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IGl0ZXJhdG9yJiBpdCljb25zdHtyZXR1cm4gdGl0PT1pdC50aXQ7fQogICAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIGl0KWNvbnN0e3JldHVybiAhKCp0aGlzPT1pdCk7fQog
ICAgcHJpdmF0ZToKICAgICAgaXRlcmF0b3IoY29uc3QgdHNldF9pdGVyYXRvciYgdGl0KTp0aXQo
dGl0KXt9CiAgICAgIHRzZXRfaXRlcmF0b3IgdGl0OwogICAgfTsKCiAgICBjbGFzcyBjb25zdF9p
dGVyYXRvcjpwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6OmJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf
dGFnLGNvbnN0IHZhbHVlX3R5cGU+CiAgICB7CiAgICAgIGZyaWVuZCBjbGFzcyB0bzsKICAgICAg
ZnJpZW5kIGNsYXNzIHByZWJpbWFwOwogICAgcHVibGljOgogICAgICBjb25zdF9pdGVyYXRvcigp
e30KICAgICAgY29uc3RfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIGl0KTp0aXQoaXQudGl0KXt9
CiAgICAgIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvciooKWNvbnN0e3JldHVybiAqZWxlbWVudF9i
eV90bygqdGl0KTt9CiAgICAgIHR5cGVuYW1lIGNvbnN0X2l0ZXJhdG9yOjp2YWx1ZV90eXBlICog
b3BlcmF0b3ItPigpY29uc3R7cmV0dXJuICZvcGVyYXRvciooKTt9CiAgICAgIGNvbnN0X2l0ZXJh
dG9yJiBvcGVyYXRvcisrKCl7Kyt0aXQ7cmV0dXJuICp0aGlzO30KICAgICAgY29uc3QgY29uc3Rf
aXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpe2NvbnN0IGNvbnN0X2l0ZXJhdG9yIHRtcD0qdGhpczsr
Kyp0aGlzO3JldHVybiB0bXA7fQogICAgICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3ItLSgpey0t
dGl0O3JldHVybiAqdGhpczt9CiAgICAgIGNvbnN0IGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yLS0o
aW50KXtjb25zdCBjb25zdF9pdGVyYXRvciB0bXA9KnRoaXM7LS0qdGhpcztyZXR1cm4gdG1wO30K
ICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBpdCljb25zdHtyZXR1
cm4gdGl0PT1pdC50aXQ7fQogICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0
b3ImIGl0KWNvbnN0e3JldHVybiAhKCp0aGlzPT1pdCk7fQogICAgcHJpdmF0ZToKICAgICAgY29u
c3RfaXRlcmF0b3IoY29uc3QgY29uc3RfdHNldF9pdGVyYXRvciYgdGl0KTp0aXQodGl0KXt9CiAg
ICAgIGNvbnN0X3RzZXRfaXRlcmF0b3IgdGl0OwogICAgfTsKCiAgICB0eXBlZGVmIHN0ZDo6cmV2
ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKICAgIHR5cGVk
ZWYgcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwoKCgogICAgaXRlcmF0
b3IgYmVnaW4oKXtyZXR1cm4gaXRlcmF0b3Iob3duZXIoKS50c2V0LmJlZ2luKCkpO30KICAgIGNv
bnN0X2l0ZXJhdG9yIGJlZ2luKCljb25zdHtyZXR1cm4gY29uc3RfaXRlcmF0b3Iob3duZXIoKS50
c2V0LmJlZ2luKCkpO30KICAgIGl0ZXJhdG9yIGVuZCgpe3JldHVybiBpdGVyYXRvcihvd25lcigp
LnRzZXQuZW5kKCkpO30KICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpY29uc3R7cmV0dXJuIGNvbnN0
X2l0ZXJhdG9yKG93bmVyKCkudHNldC5lbmQoKSk7fQoKICAgIHJldmVyc2VfaXRlcmF0b3IgcmJl
Z2luKCl7cmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpO30KICAgIGNvbnN0X3JldmVyc2Vf
aXRlcmF0b3IgcmJlZ2luKCljb25zdHtyZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQo
KSk7fQogICAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCl7cmV0dXJuIHJldmVyc2VfaXRlcmF0b3Io
YmVnaW4oKSk7fQogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCljb25zdHtyZXR1cm4g
Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTt9CgoKCiAgICBzaXplX3R5cGUgc2l6ZSgp
Y29uc3R7cmV0dXJuIG93bmVyKCkudHNldC5zaXplKCk7fQogICAgc2l6ZV90eXBlIG1heF9zaXpl
KCljb25zdHtyZXR1cm4gb3duZXIoKS50c2V0Lm1heF9zaXplKCk7fQogICAgYm9vbCBlbXB0eSgp
Y29uc3R7cmV0dXJuIG93bmVyKCkudHNldC5lbXB0eSgpO30KICAgIGFsbG9jYXRvcl90eXBlIGdl
dF9hbGxvY2F0b3IoKWNvbnN0e3JldHVybiBvd25lcigpLmFsbG9jYXRvcjt9CgoKCiAgICB0b19i
aW5kaW5nPHByZWJpbWFwPGZyb21fdHlwZSx0b190eXBlLGZyb21fY29tcGFyZSx0b19jb21wYXJl
LGFsbG9jYXRvcl90eXBlPiA+CiAgICBvcGVyYXRvcltdKGNvbnN0IHRvX3R5cGUmIHQpCiAgICB7
CiAgICAgIHJldHVybgogICAgICAgIHRvX2JpbmRpbmc8cHJlYmltYXA8ZnJvbV90eXBlLHRvX3R5
cGUsZnJvbV9jb21wYXJlLHRvX2NvbXBhcmUsYWxsb2NhdG9yX3R5cGU+ID4KICAgICAgICAgIChv
d25lcigpLHQpOwogICAgfQoKICAgIGNvbnN0X3RvX2JpbmRpbmc8cHJlYmltYXA8ZnJvbV90eXBl
LHRvX3R5cGUsZnJvbV9jb21wYXJlLHRvX2NvbXBhcmUsYWxsb2NhdG9yX3R5cGU+ID4KICAgIG9w
ZXJhdG9yW10oY29uc3QgdG9fdHlwZSYgdCkgY29uc3QKICAgIHsKICAgICAgcmV0dXJuCiAgICAg
ICAgY29uc3RfdG9fYmluZGluZzxwcmViaW1hcDxmcm9tX3R5cGUsdG9fdHlwZSxmcm9tX2NvbXBh
cmUsdG9fY29tcGFyZSxhbGxvY2F0b3JfdHlwZT4gPgogICAgICAgICAgKG93bmVyKCksdCk7CiAg
ICB9CgoKCiAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+IGluc2VydChjb25zdCB2YWx1ZV90
eXBlJiB4KQogICAgewogICAgICB0c2V0X2l0ZXJhdG9yIHRpdD1vd25lcigpLnRzZXQuZmluZCgm
eC5maXJzdCk7CiAgICAgIGlmKHRpdCE9b3duZXIoKS50c2V0LmVuZCgpKXsKICAgICAgICByZXR1
cm4gc3RkOjptYWtlX3BhaXIoaXRlcmF0b3IodGl0KSxmYWxzZSk7CiAgICAgIH0KICAgICAgZnNl
dF9pdGVyYXRvciBmaXQ9b3duZXIoKS5mc2V0LmZpbmQoJnguc2Vjb25kKTsKICAgICAgaWYoZml0
IT1vd25lcigpLmZzZXQuZW5kKCkpdGhyb3cgZHVwbGljYXRlX3ZhbHVlKCk7CgogICAgICBlbGVt
ZW50ICogcGU9MDsKICAgICAgZnNldF9pdGVyYXRvciBmbml0PW93bmVyKCkuZnNldC5lbmQoKTsK
ICAgICAgdHNldF9pdGVyYXRvciB0bml0PW93bmVyKCkudHNldC5lbmQoKTsKICAgICAgdHJ5ewog
ICAgICAgIHBlPW93bmVyKCkubmV3X2VsZW1lbnQoeCk7CiAgICAgICAgZm5pdD1vd25lcigpLmZz
ZXQuaW5zZXJ0KCZwZS0+Zmlyc3QpLmZpcnN0OwogICAgICAgIHRuaXQ9b3duZXIoKS50c2V0Lmlu
c2VydCgmcGUtPnNlY29uZCkuZmlyc3Q7CiAgICAgIH1jYXRjaCguLi4pewogICAgICAgIGlmKGZu
aXQhPW93bmVyKCkuZnNldC5lbmQoKSlvd25lcigpLmZzZXQuZXJhc2UoZm5pdCk7CiAgICAgICAg
aWYocGUpb3duZXIoKS5kZWxldGVfZWxlbWVudChwZSk7CiAgICAgICAgdGhyb3c7CiAgICAgIH0K
ICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGl0ZXJhdG9yKHRuaXQpLHRydWUpOwogICAgfQoK
ICAgIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBpdCwgY29uc3QgdmFsdWVfdHlwZSYgeCkKICAg
IHsKICAgICAgaWYoIWFkamFjZW50KGl0LnRpdCx4LmZpcnN0KSlyZXR1cm4gaW5zZXJ0KHgpLmZp
cnN0OwoKICAgICAgZnNldF9pdGVyYXRvciBmaXQ9b3duZXIoKS5mc2V0LmZpbmQoJnguc2Vjb25k
KTsKICAgICAgaWYoZml0IT1vd25lcigpLmZzZXQuZW5kKCkpdGhyb3cgZHVwbGljYXRlX3ZhbHVl
KCk7CgogICAgICBlbGVtZW50ICogcGU9MDsKICAgICAgZnNldF9pdGVyYXRvciBmbml0PW93bmVy
KCkuZnNldC5lbmQoKTsKICAgICAgdHNldF9pdGVyYXRvciB0bml0PW93bmVyKCkudHNldC5lbmQo
KTsKICAgICAgdHJ5ewogICAgICAgIHBlPW93bmVyKCkubmV3X2VsZW1lbnQoeCk7CiAgICAgICAg
Zm5pdD1vd25lcigpLmZzZXQuaW5zZXJ0KCZwZS0+Zmlyc3QpLmZpcnN0OwogICAgICAgIHRuaXQ9
b3duZXIoKS50c2V0Lmluc2VydChpdC50aXQsJnBlLT5zZWNvbmQpOwogICAgICB9Y2F0Y2goLi4u
KXsKICAgICAgICBpZihmbml0IT1vd25lcigpLmZzZXQuZW5kKCkpb3duZXIoKS5mc2V0LmVyYXNl
KGZuaXQpOwogICAgICAgIGlmKHBlKW93bmVyKCkuZGVsZXRlX2VsZW1lbnQocGUpOwogICAgICAg
IHRocm93OwogICAgICB9CiAgICAgIHJldHVybiBpdGVyYXRvcih0bml0KTsKICAgIH0KCiAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBpdF90eXBlPgogICAgdm9pZCBpbnNlcnQoaXRfdHlwZSBmaXJzdCxp
dF90eXBlIGxhc3QpCiAgICB7CiAgICAgIHdoaWxlKGZpcnN0IT1sYXN0KXsKICAgICAgICBpbnNl
cnQoKmZpcnN0KTsKICAgICAgICArK2ZpcnN0OwogICAgICB9CiAgICB9CgogICAgaXRlcmF0b3Ig
ZXJhc2UoaXRlcmF0b3IgaXQpCiAgICB7CiAgICAgIHRzZXRfaXRlcmF0b3ImIHRpdD1pdC50aXQ7
CiAgICAgIGVsZW1lbnQgKiBwZT1lbGVtZW50X2J5X3RvKCp0aXQpOwogICAgICBmc2V0X2l0ZXJh
dG9yIGZpdD1vd25lcigpLmZzZXQuZmluZCgmcGUtPmZpcnN0KTsKICAgICAgb3duZXIoKS5kZWxl
dGVfZWxlbWVudChwZSk7CiAgICAgIG93bmVyKCkuZnNldC5lcmFzZShmaXQpOwogICAgICByZXR1
cm4oaXRlcmF0b3Iob3duZXIoKS50c2V0LmVyYXNlKHRpdCkpKTsKICAgIH0KCiAgICB2b2lkIGVy
YXNlKGl0ZXJhdG9yIGZpcnN0LCBpdGVyYXRvciBsYXN0KQogICAgewogICAgICB3aGlsZShmaXJz
dCE9bGFzdCllcmFzZShmaXJzdCsrKTsKICAgIH0KCiAgICBzaXplX3R5cGUgZXJhc2UoY29uc3Qg
a2V5X3R5cGUmIGtleSkKICAgIHsKICAgICAgdHNldF9pdGVyYXRvciB0aXQ9b3duZXIoKS50c2V0
LmZpbmQoJmtleSk7CiAgICAgIGlmKHRpdD09b3duZXIoKS50c2V0LmVuZCgpKXJldHVybiAwOwog
ICAgICBlbGVtZW50ICogcGU9ZWxlbWVudF9ieV90bygqdGl0KTsKICAgICAgb3duZXIoKS5mc2V0
LmVyYXNlKG93bmVyKCkuZnNldC5maW5kKCZwZS0+Zmlyc3QpKTsKICAgICAgb3duZXIoKS50c2V0
LmVyYXNlKHRpdCk7CiAgICAgIG93bmVyKCkuZGVsZXRlX2VsZW1lbnQocGUpOwogICAgICByZXR1
cm4gMTsKICAgIH0KCiAgICB2b2lkIGNsZWFyKCkKICAgIHsKICAgICAgZXJhc2UoYmVnaW4oKSxl
bmQoKSk7CiAgICB9CgogICAgdm9pZCBzd2FwKHRvJiB4KQogICAgewoKCiAgICAgIG93bmVyKCku
dHNldC5zd2FwKHgub3duZXIoKS50c2V0KTsKICAgICAgb3duZXIoKS5mc2V0LnN3YXAoeC5vd25l
cigpLmZzZXQpOwogICAgfQoKICAgIGZyaWVuZCB2b2lkIHN3YXAodG8mIHgsIHRvJiB5KQogICAg
ewogICAgICB4LnN3YXAoeSk7CiAgICB9CgoKCiAgICBrZXlfY29tcGFyZSBrZXlfY29tcCgpY29u
c3QKICAgIHsKICAgICAgcmV0dXJuIG93bmVyKCkudHNldC5rZXlfY29tcCgpLmdldF9jb21wYXJl
KCk7CiAgICB9CgogICAgdmFsdWVfY29tcGFyZSB2YWx1ZV9jb21wKCljb25zdAogICAgewogICAg
ICByZXR1cm4KICAgICAgICB2YWx1ZV9jb21wYXJlKAogICAgICAgICAgb3duZXIoKS50c2V0Lmtl
eV9jb21wKCkuZ2V0X2NvbXBhcmUoKSwKICAgICAgICAgIG93bmVyKCkuZnNldC5rZXlfY29tcCgp
LmdldF9jb21wYXJlKCkpOwogICAgfQoKICAgIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUm
IGtleSkKICAgIHsKICAgICAgcmV0dXJuIGl0ZXJhdG9yKG93bmVyKCkudHNldC5maW5kKCZrZXkp
KTsKICAgIH0KCiAgICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBrZXkpY29u
c3QKICAgIHsKICAgICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKG93bmVyKCkudHNldC5maW5kKCZr
ZXkpKTsKICAgIH0KCiAgICBzaXplX3R5cGUgY291bnQoY29uc3Qga2V5X3R5cGUmIGtleSljb25z
dAogICAgewogICAgICByZXR1cm4gb3duZXIoKS50c2V0LmNvdW50KCZrZXkpOwogICAgfQoKICAg
IGl0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBrZXkpCiAgICB7CiAgICAgIHJl
dHVybiBpdGVyYXRvcihvd25lcigpLnRzZXQubG93ZXJfYm91bmQoJmtleSkpOwogICAgfQoKICAg
IGNvbnN0X2l0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBrZXkpY29uc3QKICAg
IHsKICAgICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKG93bmVyKCkudHNldC5sb3dlcl9ib3VuZCgm
a2V5KSk7CiAgICB9CgogICAgaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIGtl
eSkKICAgIHsKICAgICAgcmV0dXJuIGl0ZXJhdG9yKG93bmVyKCkudHNldC51cHBlcl9ib3VuZCgm
a2V5KSk7CiAgICB9CgogICAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5
cGUmIGtleSljb25zdAogICAgewogICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3Iob3duZXIoKS50
c2V0LnVwcGVyX2JvdW5kKCZrZXkpKTsKICAgIH0KCiAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGl0
ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYga2V5KQogICAgewogICAgICByZXR1
cm4gc3RkOjptYWtlX3BhaXIobG93ZXJfYm91bmQoa2V5KSx1cHBlcl9ib3VuZChrZXkpKTsKICAg
IH0KCiAgICBzdGQ6OnBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPiBlcXVhbF9y
YW5nZShjb25zdCBrZXlfdHlwZSYga2V5KWNvbnN0CiAgICB7CiAgICAgIHJldHVybiBzdGQ6Om1h
a2VfcGFpcihsb3dlcl9ib3VuZChrZXkpLHVwcGVyX2JvdW5kKGtleSkpOwogICAgfQoKICBwcml2
YXRlOgogICAgdG8oKXt9CiAgICB0byhjb25zdCB0byYpOwoKICAgIHByZWJpbWFwJiBvd25lcigp
CiAgICB7CiAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxwcmViaW1hcCo+KAogICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpLSgoc2l6ZV90KSAmKChwcmViaW1hcCAqKTAp
LT50bykpOwogICAgfTsKICAgIGNvbnN0IHByZWJpbWFwJiBvd25lcigpY29uc3QKICAgIHsKICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PGNvbnN0IHByZWJpbWFwKj4oCiAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odGhpcyktKChzaXplX3QpICYoKHByZWJpbWFwICop
MCktPnRvKSk7CiAgICB9OwoKICAgIGJvb2wgYWRqYWNlbnQoY29uc3RfdHNldF9pdGVyYXRvciB0
aXQsY29uc3QgdG9fdHlwZSYgdCljb25zdAogICAgewogICAgICBpZih0aXQ9PW93bmVyKCkudHNl
dC5lbmQoKSl7CiAgICAgICAgaWYob3duZXIoKS50c2V0LnNpemUoKT09MClyZXR1cm4gdHJ1ZTsK
ICAgICAgICBjb25zdF90c2V0X2l0ZXJhdG9yIHRpdDI9dGl0OwogICAgICAgIC0tdGl0MjsKICAg
ICAgICByZXR1cm4gb3duZXIoKS50c2V0LmtleV9jb21wKCkoKnRpdDIsJnQpOwogICAgICB9CiAg
ICAgIGVsc2UgaWYob3duZXIoKS50c2V0LmtleV9jb21wKCkoJnQsKnRpdCkpewogICAgICAgIGlm
KHRpdD09b3duZXIoKS50c2V0LmJlZ2luKCkpcmV0dXJuIHRydWU7CiAgICAgICAgY29uc3RfdHNl
dF9pdGVyYXRvciB0aXQyPXRpdDsKICAgICAgICAtLXRpdDI7CiAgICAgICAgcmV0dXJuIG93bmVy
KCkudHNldC5rZXlfY29tcCgpKCp0aXQyLCZ0KTsKCiAgICAgIH0KICAgICAgZWxzZSBpZihvd25l
cigpLnRzZXQua2V5X2NvbXAoKSgqdGl0LCZ0KSl7CiAgICAgICAgY29uc3RfdHNldF9pdGVyYXRv
ciB0aXQyPXRpdDsKICAgICAgICArK3RpdDI7CiAgICAgICAgaWYodGl0Mj09b3duZXIoKS50c2V0
LmVuZCgpKXJldHVybiB0cnVlOwogICAgICAgIHJldHVybiBvd25lcigpLnRzZXQua2V5X2NvbXAo
KSgmdCwqdGl0Mik7CiAgICAgIH0KICAgICAgZWxzZSByZXR1cm4gZmFsc2U7CiAgICB9CiAgfXRv
OwogIGZyaWVuZCBjbGFzcyB0bzsKICBmcmllbmQgdHlwZW5hbWUgdG86Oml0ZXJhdG9yOwogIGZy
aWVuZCB0eXBlbmFtZSB0bzo6Y29uc3RfaXRlcmF0b3I7CiAgZnJpZW5kIGNsYXNzIHRvX2JpbmRp
bmc8cHJlYmltYXA+OwogIGZyaWVuZCBjbGFzcyBjb25zdF90b19iaW5kaW5nPHByZWJpbWFwPjsK
CgoKCgogIHN0ZDo6cGFpcjx0eXBlbmFtZSBmcm9tOjppdGVyYXRvciwgdHlwZW5hbWUgdG86Oml0
ZXJhdG9yPgogIGluc2VydCh0eXBlbmFtZSBmcm9tOjppdGVyYXRvciBmaXQsIHR5cGVuYW1lIHRv
OjppdGVyYXRvciB0aXQsCiAgICAgICAgIGNvbnN0IHR5cGVuYW1lIGZyb206OnZhbHVlX3R5cGUm
IHgpCiAgewogICAgaWYoIWZyb20uYWRqYWNlbnQoZml0LmZpdCx4LmZpcnN0KSl7CiAgICAgIGZp
dD1mc2V0LmZpbmQoJnguZmlyc3QpOwogICAgICBpZihmaXQhPWZzZXQuZW5kKCkpewogICAgICAg
IHRzZXRfaXRlcmF0b3IgdG5pdD10c2V0LmZpbmQoJnguc2Vjb25kKTsKICAgICAgICBpZih0bml0
IT10c2V0LmVuZCgpJiZlbGVtZW50X2J5X2Zyb20oKihmaXQuZml0KSk9PWVsZW1lbnRfYnlfdG8o
KnRuaXQpKXsKICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihmaXQsIHR5cGVuYW1lIHRv
OjppdGVyYXRvcih0bml0KSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgdGhyb3cgZHVwbGljYXRl
X3ZhbHVlKCk7CiAgICAgIH0KICAgIH0KCiAgICBpZighdG8uYWRqYWNlbnQodGl0LnRpdCx4LnNl
Y29uZCkpewogICAgICB0aXQ9dHNldC5maW5kKCZ4LnNlY29uZCk7CiAgICAgIGlmKHRpdCE9dHNl
dC5lbmQoKSkgdGhyb3cgZHVwbGljYXRlX3ZhbHVlKCk7CgogICAgfQoKICAgIGVsZW1lbnQgKiBw
ZT0wOwogICAgdHNldF9pdGVyYXRvciB0bml0PXRzZXQuYmVnaW4oKTsKICAgIGZzZXRfaXRlcmF0
b3IgZm5pdD1mc2V0LmJlZ2luKCk7CiAgICB0cnl7CiAgICAgIHBlPW5ld19lbGVtZW50KHgpOwog
ICAgICB0bml0PXRzZXQuaW5zZXJ0KHRpdC50aXQsJnBlLT5zZWNvbmQpOwogICAgICBmbml0PWZz
ZXQuaW5zZXJ0KGZpdC5maXQsJnBlLT5maXJzdCk7CiAgICB9Y2F0Y2goLi4uKXsKICAgICAgaWYo
dG5pdCE9dHNldC5lbmQoKSl0c2V0LmVyYXNlKHRuaXQpOwogICAgICBpZihwZSlkZWxldGVfZWxl
bWVudChwZSk7CiAgICAgIHRocm93OwogICAgfQogICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGZy
b206Oml0ZXJhdG9yKGZuaXQpLHRvOjppdGVyYXRvcih0bml0KSk7CiAgfQoKcHJvdGVjdGVkOgog
IHByZWJpbWFwKAogICAgICBjb25zdCBmcm9tX2NvbXBhcmUmIGZyb21fY29tcCwKICAgICAgY29u
c3QgdG9fY29tcGFyZSYgdG9fY29tcCwKICAgICAgY29uc3QgYWxsb2NfdHlwZSYgYWwpOgogICAg
ZnNldChwX2NvbXBhcmU8ZnJvbV90eXBlLGZyb21fY29tcGFyZT4oZnJvbV9jb21wKSxhbCksCiAg
ICB0c2V0KHBfY29tcGFyZTx0b190eXBlLHRvX2NvbXBhcmU+KHRvX2NvbXApLGFsKSwKICAgIGFs
bG9jYXRvcihhbCkKICB7fQoKICBwcmViaW1hcChjb25zdCBwcmViaW1hcCYgcikKICB7CiAgICB0
cnl7CiAgICAgIHR5cGVuYW1lIGZyb206Oml0ZXJhdG9yIGZoaW50PWZyb20uZW5kKCk7CiAgICAg
IHR5cGVuYW1lIHRvOjppdGVyYXRvciB0aGludD10by5lbmQoKTsKICAgICAgZm9yKHR5cGVuYW1l
IGZyb206OmNvbnN0X2l0ZXJhdG9yIGl0PXIuZnJvbS5iZWdpbigpO2l0IT1yLmZyb20uZW5kKCk7
KytpdCl7CiAgICAgICAgaW5zZXJ0KGZoaW50LHRoaW50LCppdCk7CiAgICAgIH0KICAgIH1jYXRj
aCguLi4pewogICAgICBmcm9tLmNsZWFyKCk7CiAgICAgIHRocm93OwogICAgfQogIH0KCiAgfnBy
ZWJpbWFwKCkKICB7CiAgICBmb3IoZnNldF9pdGVyYXRvciBpdD1mc2V0LmJlZ2luKCk7aXQhPWZz
ZXQuZW5kKCk7KytpdCl7CiAgICAgIGRlbGV0ZV9lbGVtZW50KGVsZW1lbnRfYnlfZnJvbSgqaXQp
KTsKICAgIH0KICB9Cn07CgoKCgp0ZW1wbGF0ZTwKICB0eXBlbmFtZSBmcm9tX3R5cGUsdHlwZW5h
bWUgdG9fdHlwZSwKICB0eXBlbmFtZSBmcm9tX2NvbXBhcmUsdHlwZW5hbWUgdG9fY29tcGFyZSwK
ICB0eXBlbmFtZSBhbGxvY2F0b3JfdHlwZT4KY2xhc3MgYmltYXBfZXF1YWxfdHlwZXM6CiAgcHVi
bGljIHByZWJpbWFwPGZyb21fdHlwZSx0b190eXBlLGZyb21fY29tcGFyZSx0b19jb21wYXJlLGFs
bG9jYXRvcl90eXBlPgp7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIGZyb206OmtleV90eXBl
IGtleV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgZnJvbTo6bWFwcGVkX3R5cGUgbWFwcGVkX3R5
cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBmcm9tOjpyZWZlcmVudF90eXBlIHJlZmVyZW50X3R5cGU7
CiAgdHlwZWRlZiB0eXBlbmFtZSBmcm9tOjpkYXRhX3R5cGUgZGF0YV90eXBlOwogIHR5cGVkZWYg
dHlwZW5hbWUgZnJvbTo6a2V5X2NvbXBhcmUga2V5X2NvbXBhcmU7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBmcm9tOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1l
IGZyb206OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIGZyb206OnZh
bHVlX2NvbXBhcmUgdmFsdWVfY29tcGFyZTsKICB0eXBlZGVmIHR5cGVuYW1lIGZyb206OnNpemVf
dHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBmcm9tOjpkaWZmZXJlbmNlX3R5cGUg
ZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgZnJvbTo6cG9pbnRlciBwb2ludGVy
OwogIHR5cGVkZWYgdHlwZW5hbWUgZnJvbTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwog
IHR5cGVkZWYgdHlwZW5hbWUgZnJvbTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIHR5
cGVuYW1lIGZyb206OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiB0
eXBlbmFtZSBmcm9tOjppdGVyYXRvciBpdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIGZyb206
OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgZnJvbTo6
cmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgZnJv
bTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwoKICBpdGVy
YXRvciBiZWdpbigpe3JldHVybiBmcm9tLmJlZ2luKCk7fQogIGNvbnN0X2l0ZXJhdG9yIGJlZ2lu
KCljb25zdHtyZXR1cm4gZnJvbS5iZWdpbigpO30KICBpdGVyYXRvciBlbmQoKXtyZXR1cm4gZnJv
bS5lbmQoKTt9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCljb25zdHtyZXR1cm4gZnJvbS5lbmQoKTt9
CiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKXtyZXR1cm4gZnJvbS5yYmVnaW4oKTt9CiAgY29u
c3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKWNvbnN0e3JldHVybiBmcm9tLnJiZWdpbigpO30K
ICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKXtyZXR1cm4gZnJvbS5yZW5kKCk7fQogIGNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3IgcmVuZCgpY29uc3R7cmV0dXJuIGZyb20ucmVuZCgpO30KICBzaXplX3R5
cGUgc2l6ZSgpY29uc3R7cmV0dXJuIGZyb20uc2l6ZSgpO30KICBzaXplX3R5cGUgbWF4X3NpemUo
KWNvbnN0e3JldHVybiBmcm9tLm1heF9zaXplKCk7fQogIGJvb2wgZW1wdHkoKWNvbnN0e3JldHVy
biBmcm9tLmVtcHR5KCk7fQogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKWNvbnN0e3Jl
dHVybiBmcm9tLmdldF9hbGxvY2F0b3IoKTt9CiAgZnJvbV9iaW5kaW5nPAogICAgcHJlYmltYXA8
CiAgICAgIGZyb21fdHlwZSx0b190eXBlLAogICAgICBmcm9tX2NvbXBhcmUsCiAgICAgIHRvX2Nv
bXBhcmUsCiAgICAgIGFsbG9jYXRvcl90eXBlPiA+IG9wZXJhdG9yW10oY29uc3Qga2V5X3R5cGUm
IGtleSl7cmV0dXJuIGZyb21ba2V5XTt9CiAgY29uc3RfZnJvbV9iaW5kaW5nPAogICAgcHJlYmlt
YXA8CiAgICAgIGZyb21fdHlwZSx0b190eXBlLAogICAgICBmcm9tX2NvbXBhcmUsCiAgICAgIHRv
X2NvbXBhcmUsCiAgICAgIGFsbG9jYXRvcl90eXBlPiA+IG9wZXJhdG9yW10oY29uc3Qga2V5X3R5
cGUmIGtleSkgY29uc3R7cmV0dXJuIGZyb21ba2V5XTt9CiAgdXNpbmcgcHJlYmltYXA8CiAgICBm
cm9tX3R5cGUsdG9fdHlwZSwKICAgIGZyb21fY29tcGFyZSwKICAgIHRvX2NvbXBhcmUsCiAgICBh
bGxvY2F0b3JfdHlwZT46OiBpbnNlcnQ7CiAgc3RkOjpwYWlyPGl0ZXJhdG9yLCBib29sPiBpbnNl
cnQoY29uc3QgdmFsdWVfdHlwZSYgeCl7cmV0dXJuIGZyb20uaW5zZXJ0KHgpO30KICBpdGVyYXRv
ciBpbnNlcnQoaXRlcmF0b3IgaXQsIGNvbnN0IHZhbHVlX3R5cGUmIHgpe3JldHVybiBmcm9tLmlu
c2VydChpdCx4KTt9CiAgdGVtcGxhdGU8CiAgICB0eXBlbmFtZSBpdF90eXBlPgogIHZvaWQgaW5z
ZXJ0KGl0X3R5cGUgZmlyc3QsaXRfdHlwZSBsYXN0KXtmcm9tLmluc2VydChmaXJzdCxsYXN0KTt9
CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgaXQpe3JldHVybiBmcm9tLmVyYXNlKGl0KTt9CiAg
dm9pZCBlcmFzZShpdGVyYXRvciBmaXJzdCwgaXRlcmF0b3IgbGFzdCl7ZnJvbS5lcmFzZShmaXJz
dCxsYXN0KTt9CiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBlJiBrZXkpe3JldHVybiBm
cm9tLmVyYXNlKGtleSk7fQogIHZvaWQgY2xlYXIoKXtmcm9tLmNsZWFyKCk7fQogIHZvaWQgc3dh
cChiaW1hcF9lcXVhbF90eXBlcyYgeCl7ZnJvbS5zd2FwKHguZnJvbSk7fQogIGZyaWVuZCB2b2lk
IHN3YXAoYmltYXBfZXF1YWxfdHlwZXMmIHgsIGJpbWFwX2VxdWFsX3R5cGVzJiB5KXt4LnN3YXAo
eSk7fQogIGtleV9jb21wYXJlIGtleV9jb21wKCljb25zdHtyZXR1cm4gZnJvbS5rZXlfY29tcCgp
O30KICB2YWx1ZV9jb21wYXJlIHZhbHVlX2NvbXAoKWNvbnN0e3JldHVybiBmcm9tLnZhbHVlX2Nv
bXAoKTt9CiAgaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYga2V5KXtyZXR1cm4gZnJvbS5m
aW5kKGtleSk7fQogIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIGtleSljb25z
dHtyZXR1cm4gZnJvbS5maW5kKGtleSk7fQogIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlw
ZSYga2V5KWNvbnN0e3JldHVybiBmcm9tLmNvdW50KGtleSk7fQogIGl0ZXJhdG9yIGxvd2VyX2Jv
dW5kKGNvbnN0IGtleV90eXBlJiBrZXkpe3JldHVybiBmcm9tLmxvd2VyX2JvdW5kKGtleSk7fQog
IGNvbnN0X2l0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBrZXkpY29uc3R7cmV0
dXJuIGZyb20ubG93ZXJfYm91bmQoa2V5KTt9CiAgaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qg
a2V5X3R5cGUmIGtleSl7cmV0dXJuIGZyb20udXBwZXJfYm91bmQoa2V5KTt9CiAgY29uc3RfaXRl
cmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIGtleSljb25zdHtyZXR1cm4gZnJvbS51
cHBlcl9ib3VuZChrZXkpO30KICBzdGQ6OnBhaXI8CiAgICBpdGVyYXRvciwKICAgIGl0ZXJhdG9y
PiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYga2V5KXtyZXR1cm4gZnJvbS5lcXVhbF9yYW5n
ZShrZXkpO30KICBzdGQ6OnBhaXI8CiAgICBjb25zdF9pdGVyYXRvciwKICAgIGNvbnN0X2l0ZXJh
dG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYga2V5KWNvbnN0e3JldHVybiBmcm9tLmVx
dWFsX3JhbmdlKGtleSk7fQoKCgogIHN0ZDo6cGFpcjwKICAgIHRvOjppdGVyYXRvciwKICAgIGJv
b2w+IGluc2VydChjb25zdCB0bzo6dmFsdWVfdHlwZSYgeCl7cmV0dXJuIHRvLmluc2VydCh4KTt9
CiAgdG86Oml0ZXJhdG9yIGluc2VydCh0bzo6aXRlcmF0b3IgaXQsIGNvbnN0IHRvOjp2YWx1ZV90
eXBlJiB4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAge3JldHVybiB0by5pbnNlcnQoaXQs
eCk7fQogIHZvaWQgaW5zZXJ0KGNvbnN0IHRvOjp2YWx1ZV90eXBlICpmaXJzdCxjb25zdCB0bzo6
dmFsdWVfdHlwZSAqbGFzdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0by5pbnNlcnQo
Zmlyc3QsbGFzdCk7fQogIHRvOjppdGVyYXRvciBlcmFzZSh0bzo6aXRlcmF0b3IgaXQpe3JldHVy
biB0by5lcmFzZShpdCk7fQogIHZvaWQgZXJhc2UodG86Oml0ZXJhdG9yIGZpcnN0LHRvOjppdGVy
YXRvciBsYXN0KXt0by5lcmFzZShmaXJzdCxsYXN0KTt9Cgpwcml2YXRlOgogIHR5cGVkZWYgcHJl
YmltYXA8ZnJvbV90eXBlLHRvX3R5cGUsZnJvbV9jb21wYXJlLHRvX2NvbXBhcmUsYWxsb2NhdG9y
X3R5cGU+IHN1cGVyOwoKcHJvdGVjdGVkOgogIGJpbWFwX2VxdWFsX3R5cGVzKAogICAgICBjb25z
dCBmcm9tX2NvbXBhcmUmIGZyb21fY29tcCwKICAgICAgY29uc3QgdG9fY29tcGFyZSYgdG9fY29t
cCwKICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIGFsKToKICAgIHN1cGVyKGZyb21fY29tcCx0
b19jb21wLGFsKQogIHsKICB9CgoKfTsKCgoKCgp0ZW1wbGF0ZTwKICB0eXBlbmFtZSBmcm9tX3R5
cGUsdHlwZW5hbWUgdG9fdHlwZSwKICB0eXBlbmFtZSBmcm9tX2NvbXBhcmUsdHlwZW5hbWUgdG9f
Y29tcGFyZSwKICB0eXBlbmFtZSBhbGxvY2F0b3JfdHlwZT4KY2xhc3MgYmltYXBfZGlmZmVyZW50
X3R5cGVzOgogIHB1YmxpYyBwcmViaW1hcDxmcm9tX3R5cGUsdG9fdHlwZSxmcm9tX2NvbXBhcmUs
dG9fY29tcGFyZSxhbGxvY2F0b3JfdHlwZT4KewpwdWJsaWM6CiAgdHlwZWRlZiBmcm9tOjprZXlf
dHlwZSBrZXlfdHlwZTsKICB0eXBlZGVmIGZyb206Om1hcHBlZF90eXBlIG1hcHBlZF90eXBlOwog
IHR5cGVkZWYgZnJvbTo6cmVmZXJlbnRfdHlwZSByZWZlcmVudF90eXBlOwogIHR5cGVkZWYgZnJv
bTo6ZGF0YV90eXBlIGRhdGFfdHlwZTsKICB0eXBlZGVmIGZyb206OmtleV9jb21wYXJlIGtleV9j
b21wYXJlOwogIHR5cGVkZWYgZnJvbTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAg
dHlwZWRlZiBmcm9tOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBmcm9tOjp2YWx1
ZV9jb21wYXJlIHZhbHVlX2NvbXBhcmU7CiAgdHlwZWRlZiBmcm9tOjpzaXplX3R5cGUgc2l6ZV90
eXBlOwogIHR5cGVkZWYgZnJvbTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0
eXBlZGVmIGZyb206OnBvaW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIGZyb206OmNvbnN0X3BvaW50
ZXIgY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIGZyb206OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAg
dHlwZWRlZiBmcm9tOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYg
ZnJvbTo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiBmcm9tOjpjb25zdF9pdGVyYXRvciBj
b25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIGZyb206OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9p
dGVyYXRvcjsKICB0eXBlZGVmIGZyb206OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2
ZXJzZV9pdGVyYXRvcjsKCiAgaXRlcmF0b3IgYmVnaW4oKXtyZXR1cm4gZnJvbS5iZWdpbigpO30K
ICBjb25zdF9pdGVyYXRvciBiZWdpbigpY29uc3R7cmV0dXJuIGZyb20uYmVnaW4oKTt9CiAgaXRl
cmF0b3IgZW5kKCl7cmV0dXJuIGZyb20uZW5kKCk7fQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpY29u
c3R7cmV0dXJuIGZyb20uZW5kKCk7fQogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCl7cmV0dXJu
IGZyb20ucmJlZ2luKCk7fQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCljb25zdHty
ZXR1cm4gZnJvbS5yYmVnaW4oKTt9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCl7cmV0dXJuIGZy
b20ucmVuZCgpO30KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKWNvbnN0e3JldHVybiBm
cm9tLnJlbmQoKTt9CiAgc2l6ZV90eXBlIHNpemUoKWNvbnN0e3JldHVybiBmcm9tLnNpemUoKTt9
CiAgc2l6ZV90eXBlIG1heF9zaXplKCljb25zdHtyZXR1cm4gZnJvbS5tYXhfc2l6ZSgpO30KICBi
b29sIGVtcHR5KCljb25zdHtyZXR1cm4gZnJvbS5lbXB0eSgpO30KICBhbGxvY2F0b3JfdHlwZSBn
ZXRfYWxsb2NhdG9yKCljb25zdHtyZXR1cm4gZnJvbS5nZXRfYWxsb2NhdG9yKCk7fQogIGZyb21f
YmluZGluZzwKICAgIHByZWJpbWFwPAogICAgICBmcm9tX3R5cGUsdG9fdHlwZSwKICAgICAgZnJv
bV9jb21wYXJlLAogICAgICB0b19jb21wYXJlLAogICAgICBhbGxvY2F0b3JfdHlwZT4gPiBvcGVy
YXRvcltdKGNvbnN0IGtleV90eXBlJiBrZXkpe3JldHVybiBmcm9tW2tleV07fQogIGNvbnN0X2Zy
b21fYmluZGluZzwKICAgIHByZWJpbWFwPAogICAgICBmcm9tX3R5cGUsdG9fdHlwZSwKICAgICAg
ZnJvbV9jb21wYXJlLAogICAgICB0b19jb21wYXJlLAogICAgICBhbGxvY2F0b3JfdHlwZT4gPiBv
cGVyYXRvcltdKGNvbnN0IGtleV90eXBlJiBrZXkpIGNvbnN0e3JldHVybiBmcm9tW2tleV07fQog
IHVzaW5nIHByZWJpbWFwPAogICAgZnJvbV90eXBlLHRvX3R5cGUsCiAgICBmcm9tX2NvbXBhcmUs
CiAgICB0b19jb21wYXJlLAogICAgYWxsb2NhdG9yX3R5cGU+OjogaW5zZXJ0OwogIHN0ZDo6cGFp
cjxpdGVyYXRvciwgYm9vbD4gaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIHgpe3JldHVybiBmcm9t
Lmluc2VydCh4KTt9CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIGl0LCBjb25zdCB2YWx1ZV90
eXBlJiB4KXtyZXR1cm4gZnJvbS5pbnNlcnQoaXQseCk7fQogIHRlbXBsYXRlPAogICAgdHlwZW5h
bWUgaXRfdHlwZT4KICB2b2lkIGluc2VydChpdF90eXBlIGZpcnN0LGl0X3R5cGUgbGFzdCl7ZnJv
bS5pbnNlcnQoZmlyc3QsbGFzdCk7fQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIGl0KXtyZXR1
cm4gZnJvbS5lcmFzZShpdCk7fQogIHZvaWQgZXJhc2UoaXRlcmF0b3IgZmlyc3QsIGl0ZXJhdG9y
IGxhc3Qpe2Zyb20uZXJhc2UoZmlyc3QsbGFzdCk7fQogIHNpemVfdHlwZSBlcmFzZShjb25zdCBr
ZXlfdHlwZSYga2V5KXtyZXR1cm4gZnJvbS5lcmFzZShrZXkpO30KICB2b2lkIGNsZWFyKCl7ZnJv
bS5jbGVhcigpO30KICB2b2lkIHN3YXAoYmltYXBfZGlmZmVyZW50X3R5cGVzJiB4KXtmcm9tLnN3
YXAoeC5mcm9tKTt9CiAgZnJpZW5kIHZvaWQgc3dhcChiaW1hcF9kaWZmZXJlbnRfdHlwZXMmIHgs
IGJpbWFwX2RpZmZlcmVudF90eXBlcyYgeSl7eC5zd2FwKHkpO30KICBrZXlfY29tcGFyZSBrZXlf
Y29tcCgpY29uc3R7cmV0dXJuIGZyb20ua2V5X2NvbXAoKTt9CiAgdmFsdWVfY29tcGFyZSB2YWx1
ZV9jb21wKCljb25zdHtyZXR1cm4gZnJvbS52YWx1ZV9jb21wKCk7fQogIGl0ZXJhdG9yIGZpbmQo
Y29uc3Qga2V5X3R5cGUmIGtleSl7cmV0dXJuIGZyb20uZmluZChrZXkpO30KICBjb25zdF9pdGVy
YXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBrZXkpY29uc3R7cmV0dXJuIGZyb20uZmluZChrZXkp
O30KICBzaXplX3R5cGUgY291bnQoY29uc3Qga2V5X3R5cGUmIGtleSljb25zdHtyZXR1cm4gZnJv
bS5jb3VudChrZXkpO30KICBpdGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYga2V5
KXtyZXR1cm4gZnJvbS5sb3dlcl9ib3VuZChrZXkpO30KICBjb25zdF9pdGVyYXRvciBsb3dlcl9i
b3VuZChjb25zdCBrZXlfdHlwZSYga2V5KWNvbnN0e3JldHVybiBmcm9tLmxvd2VyX2JvdW5kKGtl
eSk7fQogIGl0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBrZXkpe3JldHVybiBm
cm9tLnVwcGVyX2JvdW5kKGtleSk7fQogIGNvbnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0
IGtleV90eXBlJiBrZXkpY29uc3R7cmV0dXJuIGZyb20udXBwZXJfYm91bmQoa2V5KTt9CiAgc3Rk
OjpwYWlyPAogICAgaXRlcmF0b3IsCiAgICBpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5
X3R5cGUmIGtleSl7cmV0dXJuIGZyb20uZXF1YWxfcmFuZ2Uoa2V5KTt9CiAgc3RkOjpwYWlyPAog
ICAgY29uc3RfaXRlcmF0b3IsCiAgICBjb25zdF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qg
a2V5X3R5cGUmIGtleSljb25zdHtyZXR1cm4gZnJvbS5lcXVhbF9yYW5nZShrZXkpO30KCgoKICB0
b19iaW5kaW5nPAogICAgcHJlYmltYXA8CiAgICAgIGZyb21fdHlwZSx0b190eXBlLAogICAgICBm
cm9tX2NvbXBhcmUsCiAgICAgIHRvX2NvbXBhcmUsCiAgICAgIGFsbG9jYXRvcl90eXBlPiA+IG9w
ZXJhdG9yW10oY29uc3QgdG86OmtleV90eXBlJiBrZXkpe3JldHVybiB0b1trZXldO30KICBjb25z
dF90b19iaW5kaW5nPAogICAgcHJlYmltYXA8CiAgICAgIGZyb21fdHlwZSx0b190eXBlLAogICAg
ICBmcm9tX2NvbXBhcmUsCiAgICAgIHRvX2NvbXBhcmUsCiAgICAgIGFsbG9jYXRvcl90eXBlPiA+
IG9wZXJhdG9yW10oY29uc3QgdG86OmtleV90eXBlJiBrZXkpY29uc3R7cmV0dXJuIHRvW2tleV07
fQogIHN0ZDo6cGFpcjwKICAgIHRvOjppdGVyYXRvciwKICAgIGJvb2w+IGluc2VydChjb25zdCB0
bzo6dmFsdWVfdHlwZSYgeCl7cmV0dXJuIHRvLmluc2VydCh4KTt9CiAgdG86Oml0ZXJhdG9yIGlu
c2VydCh0bzo6aXRlcmF0b3IgaXQsIGNvbnN0IHRvOjp2YWx1ZV90eXBlJiB4KQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAge3JldHVybiB0by5pbnNlcnQoaXQseCk7fQogIHZvaWQgaW5zZXJ0
KGNvbnN0IHRvOjp2YWx1ZV90eXBlICpmaXJzdCxjb25zdCB0bzo6dmFsdWVfdHlwZSAqbGFzdCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0by5pbnNlcnQoZmlyc3QsbGFzdCk7fQogIHRv
OjppdGVyYXRvciBlcmFzZSh0bzo6aXRlcmF0b3IgaXQpe3JldHVybiB0by5lcmFzZShpdCk7fQog
IHRvOjppdGVyYXRvciBlcmFzZSh0bzo6aXRlcmF0b3IgZmlyc3QsdG86Oml0ZXJhdG9yIGxhc3Qp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmV0dXJuIHRvLmVyYXNlKGZpcnN0LGxhc3Qp
O30KICBzaXplX3R5cGUgZXJhc2UoY29uc3QgdG86OmtleV90eXBlJiBrZXkpe3JldHVybiB0by5l
cmFzZShrZXkpO30KICB0bzo6aXRlcmF0b3IgZmluZChjb25zdCB0bzo6a2V5X3R5cGUmIGtleSl7
cmV0dXJuIHRvLmZpbmQoa2V5KTt9CiAgdG86OmNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgdG86
OmtleV90eXBlJiBrZXkpY29uc3R7cmV0dXJuIHRvLmZpbmQoa2V5KTt9CiAgc2l6ZV90eXBlIGNv
dW50KGNvbnN0IHRvOjprZXlfdHlwZSYga2V5KWNvbnN0e3JldHVybiB0by5jb3VudChrZXkpO30K
ICB0bzo6aXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3QgdG86OmtleV90eXBlJiBrZXkpe3JldHVy
biB0by5sb3dlcl9ib3VuZChrZXkpO30KICB0bzo6Y29uc3RfaXRlcmF0b3IgbG93ZXJfYm91bmQo
Y29uc3QgdG86OmtleV90eXBlJiBrZXkpY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHtyZXR1cm4gdG8ubG93ZXJfYm91bmQoa2V5KTt9CiAgdG86Oml0ZXJhdG9yIHVwcGVyX2JvdW5k
KGNvbnN0IHRvOjprZXlfdHlwZSYga2V5KXtyZXR1cm4gdG8udXBwZXJfYm91bmQoa2V5KTt9CiAg
dG86OmNvbnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IHRvOjprZXlfdHlwZSYga2V5KWNv
bnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cmV0dXJuIHRvLnVwcGVyX2JvdW5kKGtl
eSk7fQogIHN0ZDo6cGFpcjwKICAgIHRvOjppdGVyYXRvciwKICAgIHRvOjppdGVyYXRvcj4gZXF1
YWxfcmFuZ2UoY29uc3QgdG86OmtleV90eXBlJiBrZXkpe3JldHVybiB0by5lcXVhbF9yYW5nZShr
ZXkpO30KICBzdGQ6OnBhaXI8CiAgICB0bzo6Y29uc3RfaXRlcmF0b3IsCiAgICB0bzo6Y29uc3Rf
aXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IHRvOjprZXlfdHlwZSYga2V5KWNvbnN0CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7cmV0dXJuIHRvLmVxdWFsX3JhbmdlKGtleSk7fQoKcHJp
dmF0ZToKICB0eXBlZGVmIHByZWJpbWFwPGZyb21fdHlwZSx0b190eXBlLGZyb21fY29tcGFyZSx0
b19jb21wYXJlLGFsbG9jYXRvcl90eXBlPiBzdXBlcjsKCnByb3RlY3RlZDoKICBiaW1hcF9kaWZm
ZXJlbnRfdHlwZXMoCiAgICAgIGNvbnN0IGZyb21fY29tcGFyZSYgZnJvbV9jb21wLAogICAgICBj
b25zdCB0b19jb21wYXJlJiB0b19jb21wLAogICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgYWwp
OgogICAgc3VwZXIoZnJvbV9jb21wLHRvX2NvbXAsYWwpCiAgewogIH0KCgp9OwoKCgoKCnRlbXBs
YXRlPAogIHR5cGVuYW1lIGZyb21fdHlwZSwgdHlwZW5hbWUgdG9fdHlwZSwKICB0eXBlbmFtZSBm
cm9tX2NvbXBhcmU9c3RkOjpsZXNzPGZyb21fdHlwZT4sCiAgdHlwZW5hbWUgdG9fY29tcGFyZT1z
dGQ6Omxlc3M8dG9fdHlwZT4sCiAgdHlwZW5hbWUgYWxsb2NhdG9yX3R5cGU9c3RkOjphbGxvY2F0
b3I8ZGlyZWN0X3BhaXI8Y29uc3QgZnJvbV90eXBlLGNvbnN0IHRvX3R5cGU+ID4gPgpjbGFzcyBi
aW1hcDoKICBwdWJsaWMKICAgIGJpbWFwX3V0aWxzOjpzZWxlY3Q8CiAgICAgIGJpbWFwX3V0aWxz
OjplcXVhbF90eXBlczxmcm9tX3R5cGUsdG9fdHlwZT46OnZhbHVlLAogICAgICBiaW1hcF9lcXVh
bF90eXBlczwKICAgICAgICBmcm9tX3R5cGUsdG9fdHlwZSwKICAgICAgICBmcm9tX2NvbXBhcmUs
dG9fY29tcGFyZSxhbGxvY2F0b3JfdHlwZT4sCiAgICAgIGJpbWFwX2RpZmZlcmVudF90eXBlczwK
ICAgICAgICBmcm9tX3R5cGUsdG9fdHlwZSwKICAgICAgICBmcm9tX2NvbXBhcmUsdG9fY29tcGFy
ZSxhbGxvY2F0b3JfdHlwZT4KICAgID46OnJlc3VsdAp7CnByb3RlY3RlZDoKICB0eXBlZGVmCiAg
ICBiaW1hcF91dGlsczo6c2VsZWN0PAogICAgICBiaW1hcF91dGlsczo6ZXF1YWxfdHlwZXM8ZnJv
bV90eXBlLHRvX3R5cGU+Ojp2YWx1ZSwKICAgICAgYmltYXBfZXF1YWxfdHlwZXM8CiAgICAgICAg
ZnJvbV90eXBlLHRvX3R5cGUsCiAgICAgICAgZnJvbV9jb21wYXJlLHRvX2NvbXBhcmUsYWxsb2Nh
dG9yX3R5cGU+LAogICAgICBiaW1hcF9kaWZmZXJlbnRfdHlwZXM8CiAgICAgICAgZnJvbV90eXBl
LHRvX3R5cGUsCiAgICAgICAgZnJvbV9jb21wYXJlLHRvX2NvbXBhcmUsYWxsb2NhdG9yX3R5cGU+
CiAgICA+OjpyZXN1bHQKICAgIHN1cGVyOwoKcHVibGljOgogIGV4cGxpY2l0IGJpbWFwKAogICAg
Y29uc3QgZnJvbV9jb21wYXJlJiBmcm9tX2NvbXA9ZnJvbV9jb21wYXJlKCksCiAgICBjb25zdCB0
b19jb21wYXJlJiB0b19jb21wPXRvX2NvbXBhcmUoKSwKICAgIGNvbnN0IGFsbG9jYXRvcl90eXBl
JiBhbD1hbGxvY2F0b3JfdHlwZSgpKToKICAgIHN1cGVyKGZyb21fY29tcCx0b19jb21wLGFsKQog
IHsKICB9CgoKCiAgYmltYXAmIG9wZXJhdG9yPShjb25zdCBiaW1hcCYgcikKICB7CiAgICBiaW1h
cCB0bXAocik7CiAgICBzd2FwKHRtcCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCgoKCgogIHR5
cGVkZWYKICAgIGJpbWFwPAogICAgICB0b190eXBlLGZyb21fdHlwZSwKICAgICAgdG9fY29tcGFy
ZSxmcm9tX2NvbXBhcmUsCiAgICAgIHN0ZDo6YWxsb2NhdG9yPGRpcmVjdF9wYWlyPGNvbnN0IHRv
X3R5cGUsY29uc3QgZnJvbV90eXBlPiA+ID4KICAgIGludl9iaW1hcDsKCiAgZXhwbGljaXQgYmlt
YXAoY29uc3QgaW52X2JpbWFwJiByKToKICAgIHN1cGVyKHIudG8ua2V5X2NvbXAoKSxyLmZyb20u
a2V5X2NvbXAoKSxhbGxvY2F0b3JfdHlwZSgpKQogIHsKICAgIHRyeXsKICAgICAgZnJvbTo6aXRl
cmF0b3IgZmhpbnQ9ZnJvbS5lbmQoKTsKICAgICAgdG86Oml0ZXJhdG9yIHRoaW50PXRvLmVuZCgp
OwogICAgICBmb3IoaW52X2JpbWFwOjp0bzo6Y29uc3RfaXRlcmF0b3IgaXQ9ci50by5iZWdpbigp
O2l0IT1yLnRvLmVuZCgpOysraXQpewogICAgICAgIGluc2VydChmaGludCx0aGludCwqaXQpOwog
ICAgICB9CiAgICB9Y2F0Y2goLi4uKXsKICAgICAgY2xlYXIoKTsKICAgICAgdGhyb3c7CiAgICB9
CiAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgaXRfdHlwZT4KICBiaW1hcCgKICAgIGl0X3R5cGUg
Zmlyc3QsaXRfdHlwZSBsYXN0LAogICAgY29uc3QgZnJvbV9jb21wYXJlJiBmcm9tX2NvbXA9ZnJv
bV9jb21wYXJlKCksCiAgICBjb25zdCB0b19jb21wYXJlJiB0b19jb21wPXRvX2NvbXBhcmUoKSwK
ICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBhbD1hbGxvY2F0b3JfdHlwZSgpKToKICAgIHN1cGVy
KGZyb21fY29tcCx0b19jb21wLGFsKQogIHsKICAgIHRyeXsKICAgICAgZnJvbTo6aXRlcmF0b3Ig
ZmhpbnQ9ZnJvbS5lbmQoKTsKICAgICAgdG86Oml0ZXJhdG9yIHRoaW50PXRvLmVuZCgpOwogICAg
ICB3aGlsZShmaXJzdCE9bGFzdCl7CiAgICAgICAgaW5zZXJ0KGZoaW50LHRoaW50LGZpcnN0Kysp
OwogICAgICB9CiAgICB9Y2F0Y2goLi4uKXsKICAgICAgY2xlYXIoKTsKICAgICAgdGhyb3c7CiAg
ICB9CiAgfQoKCgogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBiaW1hcCYgciljb25zdHtyZXR1cm4g
ZnJvbT09ci5mcm9tO30KICBib29sIG9wZXJhdG9yIT0oY29uc3QgYmltYXAmIHIpY29uc3R7cmV0
dXJuIGZyb20hPXIuZnJvbTt9CiAgYm9vbCBvcGVyYXRvcjwgKGNvbnN0IGJpbWFwJiByKWNvbnN0
e3JldHVybiBmcm9tPHIuZnJvbTt9CiAgYm9vbCBvcGVyYXRvcj4gKGNvbnN0IGJpbWFwJiByKWNv
bnN0e3JldHVybiBmcm9tPnIuZnJvbTt9CiAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IGJpbWFwJiBy
KWNvbnN0e3JldHVybiBmcm9tPD1yLmZyb207fQogIGJvb2wgb3BlcmF0b3I+PShjb25zdCBiaW1h
cCYgciljb25zdHtyZXR1cm4gZnJvbT49ci5mcm9tO30KfTsKCn0KIyAzICJ0c3RiaW1hcC5jYyIg
MgoKdXNpbmcgbmFtZXNwYWNlIGNvZGVwcm9qZWN0OwoKdHlwZWRlZiBiaW1hcDxjaGFyLCBpbnQ+
IEJDSV90OwoKaW50IG1haW4oaW50LCBjaGFyKiopCnsKICBCQ0lfdCBjaTsKICByZXR1cm4gMDsK
fQo=


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