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]

c/825: stage1 compiler segmentation faults on c-decl.c



>Number:         825
>Category:       c
>Synopsis:       stage1 compiler segmentation faults on c-decl.c
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Thu Nov 16 18:36:01 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     Bob McGowan
>Release:        2.97 20001116 (experimental)
>Organization:
>Environment:
Cygwin 1.1.5 and gcc 2.95.2-5 19991024 (cygwin experimental)
on NT 4.0 SP6a 686 pc, single Pent III, 128MB RAM
>Description:
Web page for gcc says that Cygwin/WinNT are not supported by
gcc at this time but I decided to try anyway.  A search of
the bug database for "segmentation fault" showed two similar
problems (PR 625 and PR 650).  There were a lot of "warning"
messages and 2 recoverable build errors (NLS support and
texinfo support) but nothing fatal until this.

Configuration done twice, added --disable-nls second time:
../gcc/configure --disable-nls --with-gnu-as --with-gnu-ld
    --enable-threads --enable-languages=c++,java

stage1/xgcc.exe -Bstage1/ -B/usr/local/i686-pc-cygwin/bin/ -c  -DIN_GCC
    -g -O2 -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes
    -Wtraditional -pedantic -Wno-long-long  -DHAVE_CONFIG_H    -I. -I.
    -I../../gcc/gcc -I../../gcc/gcc/. -I../../gcc/gcc/config
    -I../../gcc/gcc/../include ../../gcc/gcc/c-decl.c -o c-decl.o

../../gcc/gcc/c-decl.c: In function `init_decl_processing':
../../gcc/gcc/c-decl.c:3278: Internal error: Segmentation fault.
Please submit a full bug report.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
make[2]: *** [c-decl.o] Error 1
make[2]: Leaving directory `/usr/bob/src/c/gcc_build/gcc'
make[1]: *** [stage_c] Error 2
make[1]: Leaving directory `/usr/bob/src/c/gcc_build/gcc'
make: *** [bootstrap-lean] Error 2
>How-To-Repeat:
Use the stage1 compiler on the c-decl.c file.  I have not
tried this in any other configuration, yet.
>Fix:
None.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="c-decl.i"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="c-decl.i"

IyAxICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIgojIDI5ICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5j
IgojIDEgImNvbmZpZy5oIiAxCgojIDEgImF1dG8taG9zdC5oIiAxCiMgMyAiY29uZmlnLmgiIDIK
CiMgMSAiLi4vLi4vZ2NjL2djYy9nYW5zaWRlY2wuaCIgMQojIDI4ICIuLi8uLi9nY2MvZ2NjL2dh
bnNpZGVjbC5oIgojIDEgIi4uLy4uL2djYy9pbmNsdWRlL2Fuc2lkZWNsLmgiIDEKIyAyOSAiLi4v
Li4vZ2NjL2djYy9nYW5zaWRlY2wuaCIgMgojIDUgImNvbmZpZy5oIiAyCgoKIyAxICIuLi8uLi9n
Y2MvZ2NjL2NvbmZpZy9pMzg2L3htLWkzODYuaCIgMQojIDQzICIuLi8uLi9nY2MvZ2NjL2NvbmZp
Zy9pMzg2L3htLWkzODYuaCIKIyAxICJ0bS5oIiAxCgoKCgoKCiMgMSAiLi4vLi4vZ2NjL2djYy9j
b25maWcvaTM4Ni9jeWd3aW4uaCIgMQojIDMxICIuLi8uLi9nY2MvZ2NjL2NvbmZpZy9pMzg2L2N5
Z3dpbi5oIgojIDEgIi4uLy4uL2djYy9nY2MvY29uZmlnL2kzODYvZ2FzLmgiIDEKIyAyNCAiLi4v
Li4vZ2NjL2djYy9jb25maWcvaTM4Ni9nYXMuaCIKIyAxICIuLi8uLi9nY2MvZ2NjL2NvbmZpZy9p
Mzg2L2kzODYuaCIgMQojIDUzICIuLi8uLi9nY2MvZ2NjL2NvbmZpZy9pMzg2L2kzODYuaCIKc3Ry
dWN0IHByb2Nlc3Nvcl9jb3N0cyB7CiAgaW50IGFkZDsKICBpbnQgbGVhOwogIGludCBzaGlmdF92
YXI7CiAgaW50IHNoaWZ0X2NvbnN0OwogIGludCBtdWx0X2luaXQ7CiAgaW50IG11bHRfYml0Owog
IGludCBkaXZpZGU7CiAgaW50IGxhcmdlX2luc247CiAgaW50IG1vdmVfcmF0aW87CgogIGludCBt
b3Z6YmxfbG9hZDsKICBpbnQgaW50X2xvYWRbM107CgoKICBpbnQgaW50X3N0b3JlWzNdOwoKICBp
bnQgZnBfbW92ZTsKICBpbnQgZnBfbG9hZFszXTsKCiAgaW50IGZwX3N0b3JlWzNdOwoKfTsKCmV4
dGVybiBzdHJ1Y3QgcHJvY2Vzc29yX2Nvc3RzICppeDg2X2Nvc3Q7CgoKCmV4dGVybiBpbnQgdGFy
Z2V0X2ZsYWdzOwojIDE2OSAiLi4vLi4vZ2NjL2djYy9jb25maWcvaTM4Ni9pMzg2LmgiCmV4dGVy
biBjb25zdCBpbnQgeDg2X3VzZV9sZWF2ZSwgeDg2X3B1c2hfbWVtb3J5LCB4ODZfemVyb19leHRl
bmRfd2l0aF9hbmQ7CmV4dGVybiBjb25zdCBpbnQgeDg2X3VzZV9iaXRfdGVzdCwgeDg2X2Ntb3Zl
LCB4ODZfZGVlcF9icmFuY2g7CmV4dGVybiBjb25zdCBpbnQgeDg2X3Vucm9sbF9zdHJsZW4sIHg4
Nl91c2VfcV9yZWcsIHg4Nl91c2VfYW55X3JlZzsKZXh0ZXJuIGNvbnN0IGludCB4ODZfZG91Ymxl
X3dpdGhfYWRkLCB4ODZfcGFydGlhbF9yZWdfc3RhbGwsIHg4Nl9tb3Z4OwpleHRlcm4gY29uc3Qg
aW50IHg4Nl91c2VfbG9vcCwgeDg2X3VzZV9maW9wLCB4ODZfdXNlX21vdjA7CmV4dGVybiBjb25z
dCBpbnQgeDg2X3VzZV9jbHRkLCB4ODZfcmVhZF9tb2RpZnlfd3JpdGU7CmV4dGVybiBjb25zdCBp
bnQgeDg2X3JlYWRfbW9kaWZ5LCB4ODZfc3BsaXRfbG9uZ19tb3ZlczsKZXh0ZXJuIGNvbnN0IGlu
dCB4ODZfcHJvbW90ZV9RSW1vZGUsIHg4Nl9zaW5nbGVfc3RyaW5nb3A7CmV4dGVybiBjb25zdCBp
bnQgeDg2X2hpbW9kZV9tYXRoLCB4ODZfcWltb2RlX21hdGgsIHg4Nl9wcm9tb3RlX3FpX3JlZ3M7
CmV4dGVybiBjb25zdCBpbnQgeDg2X3Byb21vdGVfaGlfcmVncywgeDg2X2ludGVnZXJfREZtb2Rl
X21vdmVzOwpleHRlcm4gY29uc3QgaW50IHg4Nl9hZGRfZXNwXzQsIHg4Nl9hZGRfZXNwXzgsIHg4
Nl9zdWJfZXNwXzQsIHg4Nl9zdWJfZXNwXzg7CmV4dGVybiBjb25zdCBpbnQgeDg2X3BhcnRpYWxf
cmVnX2RlcGVuZGVuY3ksIHg4Nl9tZW1vcnlfbWlzbWF0Y2hfc3RhbGw7CiMgMzA0ICIuLi8uLi9n
Y2MvZ2NjL2NvbmZpZy9pMzg2L2kzODYuaCIKZW51bSBwcm9jZXNzb3JfdHlwZQp7CiAgUFJPQ0VT
U09SX0kzODYsCiAgUFJPQ0VTU09SX0k0ODYsCiAgUFJPQ0VTU09SX1BFTlRJVU0sCiAgUFJPQ0VT
U09SX1BFTlRJVU1QUk8sCiAgUFJPQ0VTU09SX0s2LAogIFBST0NFU1NPUl9BVEhMT04sCiAgUFJP
Q0VTU09SX21heAp9OwoKZXh0ZXJuIGVudW0gcHJvY2Vzc29yX3R5cGUgaXg4Nl9jcHU7CgpleHRl
cm4gaW50IGl4ODZfYXJjaDsKIyA5MDQgIi4uLy4uL2djYy9nY2MvY29uZmlnL2kzODYvaTM4Ni5o
IgplbnVtIHJlZ19jbGFzcwp7CiAgTk9fUkVHUywKICBBUkVHLCBEUkVHLCBDUkVHLCBCUkVHLCBT
SVJFRywgRElSRUcsCiAgQURfUkVHUywKICBRX1JFR1MsCiAgTk9OX1FfUkVHUywKICBJTkRFWF9S
RUdTLAogIEdFTkVSQUxfUkVHUywKICBGUF9UT1BfUkVHLCBGUF9TRUNPTkRfUkVHLAogIEZMT0FU
X1JFR1MsCiAgU1NFX1JFR1MsCiAgTU1YX1JFR1MsCiAgRkxPQVRfSU5UX1JFR1MsCiAgQUxMX1JF
R1MsIExJTV9SRUdfQ0xBU1NFUwp9OwojIDEyODAgIi4uLy4uL2djYy9nY2MvY29uZmlnL2kzODYv
aTM4Ni5oIgp0eXBlZGVmIHN0cnVjdCBpeDg2X2FyZ3MgewogIGludCB3b3JkczsKICBpbnQgbnJl
Z3M7CiAgaW50IHJlZ25vOwogIGludCBzc2Vfd29yZHM7CiAgaW50IHNzZV9ucmVnczsKICBpbnQg
c3NlX3JlZ25vOwp9IENVTVVMQVRJVkVfQVJHUzsKIyAxNzI4ICIuLi8uLi9nY2MvZ2NjL2NvbmZp
Zy9pMzg2L2kzODYuaCIKZW51bSBpeDg2X2J1aWx0aW5zCnsKICBJWDg2X0JVSUxUSU5fQUREUFMs
CiAgSVg4Nl9CVUlMVElOX0FERFNTLAogIElYODZfQlVJTFRJTl9ESVZQUywKICBJWDg2X0JVSUxU
SU5fRElWU1MsCiAgSVg4Nl9CVUlMVElOX01VTFBTLAogIElYODZfQlVJTFRJTl9NVUxTUywKICBJ
WDg2X0JVSUxUSU5fU1VCUFMsCiAgSVg4Nl9CVUlMVElOX1NVQlNTLAoKICBJWDg2X0JVSUxUSU5f
Q01QRVFQUywKICBJWDg2X0JVSUxUSU5fQ01QTFRQUywKICBJWDg2X0JVSUxUSU5fQ01QTEVQUywK
ICBJWDg2X0JVSUxUSU5fQ01QR1RQUywKICBJWDg2X0JVSUxUSU5fQ01QR0VQUywKICBJWDg2X0JV
SUxUSU5fQ01QTkVRUFMsCiAgSVg4Nl9CVUlMVElOX0NNUE5MVFBTLAogIElYODZfQlVJTFRJTl9D
TVBOTEVQUywKICBJWDg2X0JVSUxUSU5fQ01QTkdUUFMsCiAgSVg4Nl9CVUlMVElOX0NNUE5HRVBT
LAogIElYODZfQlVJTFRJTl9DTVBPUkRQUywKICBJWDg2X0JVSUxUSU5fQ01QVU5PUkRQUywKICBJ
WDg2X0JVSUxUSU5fQ01QTkVQUywKICBJWDg2X0JVSUxUSU5fQ01QRVFTUywKICBJWDg2X0JVSUxU
SU5fQ01QTFRTUywKICBJWDg2X0JVSUxUSU5fQ01QTEVTUywKICBJWDg2X0JVSUxUSU5fQ01QR1RT
UywKICBJWDg2X0JVSUxUSU5fQ01QR0VTUywKICBJWDg2X0JVSUxUSU5fQ01QTkVRU1MsCiAgSVg4
Nl9CVUlMVElOX0NNUE5MVFNTLAogIElYODZfQlVJTFRJTl9DTVBOTEVTUywKICBJWDg2X0JVSUxU
SU5fQ01QTkdUU1MsCiAgSVg4Nl9CVUlMVElOX0NNUE5HRVNTLAogIElYODZfQlVJTFRJTl9DTVBP
UkRTUywKICBJWDg2X0JVSUxUSU5fQ01QVU5PUkRTUywKICBJWDg2X0JVSUxUSU5fQ01QTkVTUywK
CiAgSVg4Nl9CVUlMVElOX0NPTUlFUVNTLAogIElYODZfQlVJTFRJTl9DT01JTFRTUywKICBJWDg2
X0JVSUxUSU5fQ09NSUxFU1MsCiAgSVg4Nl9CVUlMVElOX0NPTUlHVFNTLAogIElYODZfQlVJTFRJ
Tl9DT01JR0VTUywKICBJWDg2X0JVSUxUSU5fQ09NSU5FUVNTLAogIElYODZfQlVJTFRJTl9VQ09N
SUVRU1MsCiAgSVg4Nl9CVUlMVElOX1VDT01JTFRTUywKICBJWDg2X0JVSUxUSU5fVUNPTUlMRVNT
LAogIElYODZfQlVJTFRJTl9VQ09NSUdUU1MsCiAgSVg4Nl9CVUlMVElOX1VDT01JR0VTUywKICBJ
WDg2X0JVSUxUSU5fVUNPTUlORVFTUywKCiAgSVg4Nl9CVUlMVElOX0NWVFBJMlBTLAogIElYODZf
QlVJTFRJTl9DVlRQUzJQSSwKICBJWDg2X0JVSUxUSU5fQ1ZUU0kyU1MsCiAgSVg4Nl9CVUlMVElO
X0NWVFNTMlNJLAogIElYODZfQlVJTFRJTl9DVlRUUFMyUEksCiAgSVg4Nl9CVUlMVElOX0NWVFRT
UzJTSSwKICBJWDg2X0JVSUxUSU5fTV9GUk9NX0lOVCwKICBJWDg2X0JVSUxUSU5fTV9UT19JTlQs
CgogIElYODZfQlVJTFRJTl9NQVhQUywKICBJWDg2X0JVSUxUSU5fTUFYU1MsCiAgSVg4Nl9CVUlM
VElOX01JTlBTLAogIElYODZfQlVJTFRJTl9NSU5TUywKCiAgSVg4Nl9CVUlMVElOX0xPQURBUFMs
CiAgSVg4Nl9CVUlMVElOX0xPQURVUFMsCiAgSVg4Nl9CVUlMVElOX1NUT1JFQVBTLAogIElYODZf
QlVJTFRJTl9TVE9SRVVQUywKICBJWDg2X0JVSUxUSU5fTE9BRFNTLAogIElYODZfQlVJTFRJTl9T
VE9SRVNTLAogIElYODZfQlVJTFRJTl9NT1ZTUywKCiAgSVg4Nl9CVUlMVElOX01PVkhMUFMsCiAg
SVg4Nl9CVUlMVElOX01PVkxIUFMsCiAgSVg4Nl9CVUlMVElOX0xPQURIUFMsCiAgSVg4Nl9CVUlM
VElOX0xPQURMUFMsCiAgSVg4Nl9CVUlMVElOX1NUT1JFSFBTLAogIElYODZfQlVJTFRJTl9TVE9S
RUxQUywKCiAgSVg4Nl9CVUlMVElOX01BU0tNT1ZRLAogIElYODZfQlVJTFRJTl9NT1ZNU0tQUywK
ICBJWDg2X0JVSUxUSU5fUE1PVk1TS0IsCgogIElYODZfQlVJTFRJTl9NT1ZOVFBTLAogIElYODZf
QlVJTFRJTl9NT1ZOVFEsCgogIElYODZfQlVJTFRJTl9QQUNLU1NXQiwKICBJWDg2X0JVSUxUSU5f
UEFDS1NTRFcsCiAgSVg4Nl9CVUlMVElOX1BBQ0tVU1dCLAoKICBJWDg2X0JVSUxUSU5fUEFEREIs
CiAgSVg4Nl9CVUlMVElOX1BBRERXLAogIElYODZfQlVJTFRJTl9QQURERCwKICBJWDg2X0JVSUxU
SU5fUEFERFNCLAogIElYODZfQlVJTFRJTl9QQUREU1csCiAgSVg4Nl9CVUlMVElOX1BBRERVU0Is
CiAgSVg4Nl9CVUlMVElOX1BBRERVU1csCiAgSVg4Nl9CVUlMVElOX1BTVUJCLAogIElYODZfQlVJ
TFRJTl9QU1VCVywKICBJWDg2X0JVSUxUSU5fUFNVQkQsCiAgSVg4Nl9CVUlMVElOX1BTVUJTQiwK
ICBJWDg2X0JVSUxUSU5fUFNVQlNXLAogIElYODZfQlVJTFRJTl9QU1VCVVNCLAogIElYODZfQlVJ
TFRJTl9QU1VCVVNXLAoKICBJWDg2X0JVSUxUSU5fUEFORCwKICBJWDg2X0JVSUxUSU5fUEFORE4s
CiAgSVg4Nl9CVUlMVElOX1BPUiwKICBJWDg2X0JVSUxUSU5fUFhPUiwKCiAgSVg4Nl9CVUlMVElO
X1BBVkdCLAogIElYODZfQlVJTFRJTl9QQVZHVywKCiAgSVg4Nl9CVUlMVElOX1BDTVBFUUIsCiAg
SVg4Nl9CVUlMVElOX1BDTVBFUVcsCiAgSVg4Nl9CVUlMVElOX1BDTVBFUUQsCiAgSVg4Nl9CVUlM
VElOX1BDTVBHVEIsCiAgSVg4Nl9CVUlMVElOX1BDTVBHVFcsCiAgSVg4Nl9CVUlMVElOX1BDTVBH
VEQsCgogIElYODZfQlVJTFRJTl9QRVhUUlcsCiAgSVg4Nl9CVUlMVElOX1BJTlNSVywKCiAgSVg4
Nl9CVUlMVElOX1BNQUREV0QsCgogIElYODZfQlVJTFRJTl9QTUFYU1csCiAgSVg4Nl9CVUlMVElO
X1BNQVhVQiwKICBJWDg2X0JVSUxUSU5fUE1JTlNXLAogIElYODZfQlVJTFRJTl9QTUlOVUIsCgog
IElYODZfQlVJTFRJTl9QTVVMSFVXLAogIElYODZfQlVJTFRJTl9QTVVMSFcsCiAgSVg4Nl9CVUlM
VElOX1BNVUxMVywKCiAgSVg4Nl9CVUlMVElOX1BTQURCVywKICBJWDg2X0JVSUxUSU5fUFNIVUZX
LAoKICBJWDg2X0JVSUxUSU5fUFNMTFcsCiAgSVg4Nl9CVUlMVElOX1BTTExELAogIElYODZfQlVJ
TFRJTl9QU0xMUSwKICBJWDg2X0JVSUxUSU5fUFNSQVcsCiAgSVg4Nl9CVUlMVElOX1BTUkFELAog
IElYODZfQlVJTFRJTl9QU1JMVywKICBJWDg2X0JVSUxUSU5fUFNSTEQsCiAgSVg4Nl9CVUlMVElO
X1BTUkxRLAogIElYODZfQlVJTFRJTl9QU0xMV0ksCiAgSVg4Nl9CVUlMVElOX1BTTExESSwKICBJ
WDg2X0JVSUxUSU5fUFNMTFFJLAogIElYODZfQlVJTFRJTl9QU1JBV0ksCiAgSVg4Nl9CVUlMVElO
X1BTUkFESSwKICBJWDg2X0JVSUxUSU5fUFNSTFdJLAogIElYODZfQlVJTFRJTl9QU1JMREksCiAg
SVg4Nl9CVUlMVElOX1BTUkxRSSwKCiAgSVg4Nl9CVUlMVElOX1BVTlBDS0hCVywKICBJWDg2X0JV
SUxUSU5fUFVOUENLSFdELAogIElYODZfQlVJTFRJTl9QVU5QQ0tIRFEsCiAgSVg4Nl9CVUlMVElO
X1BVTlBDS0xCVywKICBJWDg2X0JVSUxUSU5fUFVOUENLTFdELAogIElYODZfQlVJTFRJTl9QVU5Q
Q0tMRFEsCgogIElYODZfQlVJTFRJTl9TSFVGUFMsCgogIElYODZfQlVJTFRJTl9SQ1BQUywKICBJ
WDg2X0JVSUxUSU5fUkNQU1MsCiAgSVg4Nl9CVUlMVElOX1JTUVJUUFMsCiAgSVg4Nl9CVUlMVElO
X1JTUVJUU1MsCiAgSVg4Nl9CVUlMVElOX1NRUlRQUywKICBJWDg2X0JVSUxUSU5fU1FSVFNTLAoK
ICBJWDg2X0JVSUxUSU5fVU5QQ0tIUFMsCiAgSVg4Nl9CVUlMVElOX1VOUENLTFBTLAoKICBJWDg2
X0JVSUxUSU5fQU5EUFMsCiAgSVg4Nl9CVUlMVElOX0FORE5QUywKICBJWDg2X0JVSUxUSU5fT1JQ
UywKICBJWDg2X0JVSUxUSU5fWE9SUFMsCgogIElYODZfQlVJTFRJTl9FTU1TLAogIElYODZfQlVJ
TFRJTl9MRE1YQ1NSLAogIElYODZfQlVJTFRJTl9TVE1YQ1NSLAogIElYODZfQlVJTFRJTl9TRkVO
Q0UsCiAgSVg4Nl9CVUlMVElOX1BSRUZFVENILAoKCiAgSVg4Nl9CVUlMVElOX1NFVFBTMSwKICBJ
WDg2X0JVSUxUSU5fU0VUUFMsCiAgSVg4Nl9CVUlMVElOX0NMUlBTLAogIElYODZfQlVJTFRJTl9T
RVRSUFMsCiAgSVg4Nl9CVUlMVElOX0xPQURQUzEsCiAgSVg4Nl9CVUlMVElOX0xPQURSUFMsCiAg
SVg4Nl9CVUlMVElOX1NUT1JFUFMxLAogIElYODZfQlVJTFRJTl9TVE9SRVJQUywKCiAgSVg4Nl9C
VUlMVElOX01NWF9aRVJPLAoKICBJWDg2X0JVSUxUSU5fTUFYCn07CiMgMjU3NiAiLi4vLi4vZ2Nj
L2djYy9jb25maWcvaTM4Ni9pMzg2LmgiCmV4dGVybiBpbnQgY29uc3QgZGJ4X3JlZ2lzdGVyX21h
cFszN107CmV4dGVybiBpbnQgY29uc3Qgc3ZyNF9kYnhfcmVnaXN0ZXJfbWFwWzM3XTsKIyAyODQ2
ICIuLi8uLi9nY2MvZ2NjL2NvbmZpZy9pMzg2L2kzODYuaCIKZXh0ZXJuIGNvbnN0IGNoYXIgKml4
ODZfY3B1X3N0cmluZzsKZXh0ZXJuIGNvbnN0IGNoYXIgKml4ODZfYXJjaF9zdHJpbmc7CmV4dGVy
biBjb25zdCBjaGFyICppeDg2X3JlZ19hbGxvY19vcmRlcjsKZXh0ZXJuIGNvbnN0IGNoYXIgKml4
ODZfcmVncGFybV9zdHJpbmc7CmV4dGVybiBjb25zdCBjaGFyICppeDg2X2FsaWduX2xvb3BzX3N0
cmluZzsKZXh0ZXJuIGNvbnN0IGNoYXIgKml4ODZfYWxpZ25fanVtcHNfc3RyaW5nOwpleHRlcm4g
Y29uc3QgY2hhciAqaXg4Nl9hbGlnbl9mdW5jc19zdHJpbmc7CmV4dGVybiBjb25zdCBjaGFyICpp
eDg2X3ByZWZlcnJlZF9zdGFja19ib3VuZGFyeV9zdHJpbmc7CmV4dGVybiBjb25zdCBjaGFyICpp
eDg2X2JyYW5jaF9jb3N0X3N0cmluZzsKZXh0ZXJuIGludCBpeDg2X3JlZ3Bhcm07CmV4dGVybiBp
bnQgaXg4Nl9hbGlnbl9sb29wczsKZXh0ZXJuIGludCBpeDg2X2FsaWduX2p1bXBzOwpleHRlcm4g
aW50IGl4ODZfYWxpZ25fZnVuY3M7CmV4dGVybiBpbnQgaXg4Nl9wcmVmZXJyZWRfc3RhY2tfYm91
bmRhcnk7CmV4dGVybiBpbnQgaXg4Nl9icmFuY2hfY29zdDsKZXh0ZXJuIGNvbnN0IGNoYXIgKiBj
b25zdCBoaV9yZWdfbmFtZVtdOwpleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IHFpX3JlZ19uYW1l
W107CmV4dGVybiBjb25zdCBjaGFyICogY29uc3QgcWlfaGlnaF9yZWdfbmFtZVtdOwpleHRlcm4g
ZW51bSByZWdfY2xhc3MgY29uc3QgcmVnY2xhc3NfbWFwW107CmV4dGVybiBzdHJ1Y3QgcnR4X2Rl
ZiAqaXg4Nl9jb21wYXJlX29wMDsKZXh0ZXJuIHN0cnVjdCBydHhfZGVmICppeDg2X2NvbXBhcmVf
b3AxOwojIDI1ICIuLi8uLi9nY2MvZ2NjL2NvbmZpZy9pMzg2L2dhcy5oIiAyCiMgNDcgIi4uLy4u
L2djYy9nY2MvY29uZmlnL2kzODYvZ2FzLmgiCiMgMSAiLi4vLi4vZ2NjL2djYy9jb25maWcvaTM4
Ni9ic2QuaCIgMQojIDI0ICIuLi8uLi9nY2MvZ2NjL2NvbmZpZy9pMzg2L2JzZC5oIgojIDEgIi4u
Ly4uL2djYy9nY2MvY29uZmlnL2kzODYvdW5peC5oIiAxCiMgMjUgIi4uLy4uL2djYy9nY2MvY29u
ZmlnL2kzODYvYnNkLmgiIDIKIyA0OCAiLi4vLi4vZ2NjL2djYy9jb25maWcvaTM4Ni9nYXMuaCIg
MgojIDMyICIuLi8uLi9nY2MvZ2NjL2NvbmZpZy9pMzg2L2N5Z3dpbi5oIiAyCiMgMSAiLi4vLi4v
Z2NjL2djYy9jb25maWcvZGJ4Y29mZi5oIiAxCiMgMzMgIi4uLy4uL2djYy9nY2MvY29uZmlnL2kz
ODYvY3lnd2luLmgiIDIKIyAxNjIgIi4uLy4uL2djYy9nY2MvY29uZmlnL2kzODYvY3lnd2luLmgi
CnVuaW9uIHRyZWVfbm9kZTsKCgoKCgpleHRlcm4gaW50IGkzODZfcGVfdmFsaWRfZGVjbF9hdHRy
aWJ1dGVfcCAodW5pb24gdHJlZV9ub2RlICosIHVuaW9uIHRyZWVfbm9kZSAqLCB1bmlvbiB0cmVl
X25vZGUgKiwgdW5pb24gdHJlZV9ub2RlICopOwojIDE3NyAiLi4vLi4vZ2NjL2djYy9jb25maWcv
aTM4Ni9jeWd3aW4uaCIKZXh0ZXJuIGludCBpMzg2X3BlX3ZhbGlkX3R5cGVfYXR0cmlidXRlX3Ag
KHVuaW9uIHRyZWVfbm9kZSAqLCB1bmlvbiB0cmVlX25vZGUgKiwgdW5pb24gdHJlZV9ub2RlICos
IHVuaW9uIHRyZWVfbm9kZSAqKTsKCmV4dGVybiB1bmlvbiB0cmVlX25vZGUgKmkzODZfcGVfbWVy
Z2VfZGVjbF9hdHRyaWJ1dGVzICh1bmlvbiB0cmVlX25vZGUgKiwgdW5pb24gdHJlZV9ub2RlICop
OwoKCmV4dGVybiB1bmlvbiB0cmVlX25vZGUgKiBpMzg2X3BlX21lcmdlX2RlY2xfYXR0cmlidXRl
cyAodW5pb24gdHJlZV9ub2RlICosIHVuaW9uIHRyZWVfbm9kZSAqKTsKIyAzMTEgIi4uLy4uL2dj
Yy9nY2MvY29uZmlnL2kzODYvY3lnd2luLmgiCmV4dGVybiB2b2lkIGkzODZfcGVfZW5jb2RlX3Nl
Y3Rpb25faW5mbyAodW5pb24gdHJlZV9ub2RlICopOwojIDQwMyAiLi4vLi4vZ2NjL2djYy9jb25m
aWcvaTM4Ni9jeWd3aW4uaCIKZXh0ZXJuIHZvaWQgaTM4Nl9wZV91bmlxdWVfc2VjdGlvbiAodW5p
b24gdHJlZV9ub2RlICosIGludCk7CiMgNTMzICIuLi8uLi9nY2MvZ2NjL2NvbmZpZy9pMzg2L2N5
Z3dpbi5oIgpleHRlcm4gdm9pZCBpMzg2X3BlX3JlY29yZF9leHRlcm5hbF9mdW5jdGlvbiAoY2hh
ciAqKTsKCmV4dGVybiB2b2lkIGkzODZfcGVfcmVjb3JkX2V4cG9ydGVkX3N5bWJvbCAoY2hhciAq
LCBpbnQpOwojIDggInRtLmgiIDIKIyA0NCAiLi4vLi4vZ2NjL2djYy9jb25maWcvaTM4Ni94bS1p
Mzg2LmgiIDIKIyA4ICJjb25maWcuaCIgMgoKCiMgMSAiLi4vLi4vZ2NjL2djYy9jb25maWcvaTM4
Ni94bS1jeWd3aW4uaCIgMQojIDExICJjb25maWcuaCIgMgoKCiMgMSAiLi4vLi4vZ2NjL2djYy9o
d2ludC5oIiAxCiMgMTQgImNvbmZpZy5oIiAyCiMgMzAgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMi
IDIKIyAxICIuLi8uLi9nY2MvZ2NjL3N5c3RlbS5oIiAxCiMgMzMgIi4uLy4uL2djYy9nY2Mvc3lz
dGVtLmgiCiMgMSAiaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDMgImluY2x1ZGUvc3RkYXJnLmgi
IDMKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKIyAxMTAgImluY2x1
ZGUvc3RkYXJnLmgiIDMKdHlwZWRlZiBfX2dudWNfdmFfbGlzdCB2YV9saXN0OwojIDM0ICIuLi8u
Li9nY2MvZ2NjL3N5c3RlbS5oIiAyCiMgNDYgIi4uLy4uL2djYy9nY2Mvc3lzdGVtLmgiCiMgMSAi
L3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9fYW5zaS5oIiAxIDMKIyAxNSAiL3Vzci9pbmNsdWRlL19hbnNpLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2NvbmZpZy5oIiAxIDMKIyAxMTMgIi91c3IvaW5jbHVk
ZS9zeXMvY29uZmlnLmgiIDMKdHlwZWRlZiBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVk
IGludCBfX3VpbnQzMl90OwojIDE2ICIvdXNyL2luY2x1ZGUvX2Fuc2kuaCIgMiAzCiMgMzMgIi91
c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKCiMgMSAiaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg
MTk5ICJpbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKIyAz
OCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwojIDQ4ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMSAzCiMgMTQgIi91c3IvaW5jbHVkZS9z
eXMvcmVlbnQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDIxICIvdXNyL2lu
Y2x1ZGUvdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL21hY2hpbmUvdGltZS5oIiAxIDMKIyAy
MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCiMgMzAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMK
IyAxICJpbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAz
CgoKIyAxICIvdXNyL2luY2x1ZGUvbWFjaGluZS90eXBlcy5oIiAxIDMKIyAzNCAiL3Vzci9pbmNs
dWRlL3RpbWUuaCIgMiAzCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGNsb2NrX3Q7CgoKCgp0eXBl
ZGVmIGxvbmcgdGltZV90OwoKCgpzdHJ1Y3QgdG0KewogIGludCB0bV9zZWM7CiAgaW50IHRtX21p
bjsKICBpbnQgdG1faG91cjsKICBpbnQgdG1fbWRheTsKICBpbnQgdG1fbW9uOwogIGludCB0bV95
ZWFyOwogIGludCB0bV93ZGF5OwogIGludCB0bV95ZGF5OwogIGludCB0bV9pc2RzdDsKfTsKCmNs
b2NrX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgY2xvY2sgKHZvaWQpOwpkb3VibGUgX19h
dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZGlmZnRpbWUgKHRpbWVfdCBfdGltZTIsIHRpbWVfdCBf
dGltZTEpOwp0aW1lX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbWt0aW1lIChzdHJ1Y3Qg
dG0gKl90aW1lcHRyKTsKdGltZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHRpbWUgKHRp
bWVfdCAqX3RpbWVyKTsKCmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGFzY3RpbWUg
KGNvbnN0IHN0cnVjdCB0bSAqX3RibG9jayk7CmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xf
XykpIGN0aW1lIChjb25zdCB0aW1lX3QgKl90aW1lKTsKc3RydWN0IHRtICpfX2F0dHJpYnV0ZV9f
KChfX2NkZWNsX18pKSBnbXRpbWUgKGNvbnN0IHRpbWVfdCAqX3RpbWVyKTsKc3RydWN0IHRtICpf
X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBsb2NhbHRpbWUgKGNvbnN0IHRpbWVfdCAqX3RpbWVy
KTsKCnNpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJmdGltZSAoY2hhciAqX3Ms
IHNpemVfdCBfbWF4c2l6ZSwgY29uc3QgY2hhciAqX2ZtdCwgY29uc3Qgc3RydWN0IHRtICpfdCk7
CgpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBhc2N0aW1lX3IgKGNvbnN0IHN0cnVj
dCB0bSAqLCBjaGFyICopOwpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBjdGltZV9y
IChjb25zdCB0aW1lX3QgKiwgY2hhciAqKTsKc3RydWN0IHRtICpfX2F0dHJpYnV0ZV9fKChfX2Nk
ZWNsX18pKSBnbXRpbWVfciAoY29uc3QgdGltZV90ICosIHN0cnVjdCB0bSAqKTsKc3RydWN0IHRt
ICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBsb2NhbHRpbWVfciAoY29uc3QgdGltZV90ICos
IHN0cnVjdCB0bSAqKTsKCgoKZXh0ZXJuIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIHRpbWVf
dCBfdGltZXpvbmU7CmV4dGVybiBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBpbnQgX2RheWxp
Z2h0OwpleHRlcm4gX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgY2hhciAqX3R6bmFtZVsyXTsK
CmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHRpbWV6b25lICh2b2lkKTsKdm9pZCBf
X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB0enNldCAodm9pZCk7CiMgMTUgIi91c3IvaW5jbHVk
ZS9zeXMvcmVlbnQuaCIgMiAzCiMgMjggIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMwp0eXBl
ZGVmIF9fdWludDMyX3QgX19VTG9uZzsKCgpzdHJ1Y3QgX2dsdWUKewogIHN0cnVjdCBfZ2x1ZSAq
X25leHQ7CiAgaW50IF9uaW9iczsKICBzdHJ1Y3QgX19zRklMRSAqX2lvYnM7Cn07CgpzdHJ1Y3Qg
X0JpZ2ludAp7CiAgc3RydWN0IF9CaWdpbnQgKl9uZXh0OwogIGludCBfaywgX21heHdkcywgX3Np
Z24sIF93ZHM7CiAgX19VTG9uZyBfeFsxXTsKfTsKCgoKCgoKCnN0cnVjdCBfYXRleGl0IHsKICAg
ICAgICBzdHJ1Y3QgX2F0ZXhpdCAqX25leHQ7CiAgICAgICAgaW50IF9pbmQ7CiAgICAgICAgdm9p
ZCAoKl9mbnNbMzJdKSh2b2lkKTsKfTsKIyA2NCAiL3Vzci9pbmNsdWRlL3N5cy9yZWVudC5oIiAz
CnN0cnVjdCBfX3NidWYgewogICAgICAgIHVuc2lnbmVkIGNoYXIgKl9iYXNlOwogICAgICAgIGlu
dCBfc2l6ZTsKfTsKCgoKCgoKdHlwZWRlZiBsb25nIF9mcG9zX3Q7CiMgMTAyICIvdXNyL2luY2x1
ZGUvc3lzL3JlZW50LmgiIDMKc3RydWN0IF9fc0ZJTEUgewogIHVuc2lnbmVkIGNoYXIgKl9wOwog
IGludCBfcjsKICBpbnQgX3c7CiAgc2hvcnQgX2ZsYWdzOwogIHNob3J0IF9maWxlOwogIHN0cnVj
dCBfX3NidWYgX2JmOwogIGludCBfbGJmc2l6ZTsKCgogIHZvaWQgKiBfY29va2llOwoKICBpbnQg
X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgKCpfcmVhZCkgKHZvaWQgKiBfY29va2llLCBjaGFy
ICpfYnVmLCBpbnQgX24pOwogIGludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSAoKl93cml0
ZSkgKHZvaWQgKiBfY29va2llLCBjb25zdCBjaGFyICpfYnVmLCBpbnQgX24pOwogIF9mcG9zX3Qg
X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgKCpfc2VlaykgKHZvaWQgKiBfY29va2llLCBfZnBv
c190IF9vZmZzZXQsIGludCBfd2hlbmNlKTsKICBpbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f
KSkgKCpfY2xvc2UpICh2b2lkICogX2Nvb2tpZSk7CgoKICBzdHJ1Y3QgX19zYnVmIF91YjsKICB1
bnNpZ25lZCBjaGFyICpfdXA7CiAgaW50IF91cjsKCgogIHVuc2lnbmVkIGNoYXIgX3VidWZbM107
CiAgdW5zaWduZWQgY2hhciBfbmJ1ZlsxXTsKCgogIHN0cnVjdCBfX3NidWYgX2xiOwoKCiAgaW50
IF9ibGtzaXplOwogIGludCBfb2Zmc2V0OwoKICBzdHJ1Y3QgX3JlZW50ICpfZGF0YTsKfTsKIyAx
NDYgIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMwpzdHJ1Y3QgX3JlZW50CnsKCiAgaW50IF9l
cnJubzsKCgoKCiAgc3RydWN0IF9fc0ZJTEUgKl9zdGRpbiwgKl9zdGRvdXQsICpfc3RkZXJyOwoK
ICBpbnQgX2luYzsKICBjaGFyIF9lbWVyZ2VuY3lbMjVdOwoKICBpbnQgX2N1cnJlbnRfY2F0ZWdv
cnk7CiAgY29uc3QgY2hhciAqX2N1cnJlbnRfbG9jYWxlOwoKICBpbnQgX19zZGlkaW5pdDsKCiAg
dm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSAoKl9fY2xlYW51cCkgKHN0cnVjdCBfcmVl
bnQgKik7CgoKICBzdHJ1Y3QgX0JpZ2ludCAqX3Jlc3VsdDsKICBpbnQgX3Jlc3VsdF9rOwogIHN0
cnVjdCBfQmlnaW50ICpfcDVzOwogIHN0cnVjdCBfQmlnaW50ICoqX2ZyZWVsaXN0OwoKCiAgaW50
IF9jdnRsZW47CiAgY2hhciAqX2N2dGJ1ZjsKCiAgdW5pb24KICAgIHsKICAgICAgc3RydWN0CiAg
ICAgICAgewogICAgICAgICAgdW5zaWduZWQgaW50IF91bnVzZWRfcmFuZDsKICAgICAgICAgIGNo
YXIgKiBfc3RydG9rX2xhc3Q7CiAgICAgICAgICBjaGFyIF9hc2N0aW1lX2J1ZlsyNl07CiAgICAg
ICAgICBzdHJ1Y3QgdG0gX2xvY2FsdGltZV9idWY7CiAgICAgICAgICBpbnQgX2dhbW1hX3NpZ25n
YW07CiAgICAgICAgICBfX2V4dGVuc2lvbl9fIHVuc2lnbmVkIGxvbmcgbG9uZyBfcmFuZF9uZXh0
OwoKICAgICAgICB9IF9yZWVudDsKCgoKICAgICAgc3RydWN0CiAgICAgICAgewoKICAgICAgICAg
IHVuc2lnbmVkIGNoYXIgKiBfbmV4dGZbMzBdOwogICAgICAgICAgdW5zaWduZWQgaW50IF9ubWFs
bG9jWzMwXTsKICAgICAgICB9IF91bnVzZWQ7CiAgICB9IF9uZXc7CgoKICBzdHJ1Y3QgX2F0ZXhp
dCAqX2F0ZXhpdDsKICBzdHJ1Y3QgX2F0ZXhpdCBfYXRleGl0MDsKCgogIHZvaWQgKCoqKF9zaWdf
ZnVuYykpKGludCk7CgoKCgogIHN0cnVjdCBfZ2x1ZSBfX3NnbHVlOwogIHN0cnVjdCBfX3NGSUxF
IF9fc2ZbM107Cn07CiMgMjI3ICIvdXNyL2luY2x1ZGUvc3lzL3JlZW50LmgiIDMKZXh0ZXJuIHN0
cnVjdCBfcmVlbnQgKl9pbXB1cmVfcHRyOwoKdm9pZCBfcmVjbGFpbV9yZWVudCAoc3RydWN0IF9y
ZWVudCAqKTsKIyA0OSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKdHlwZWRlZiBfZnBvc190
IGZwb3NfdDsKCnR5cGVkZWYgc3RydWN0IF9fc0ZJTEUgRklMRTsKIyAxMzEgIi91c3IvaW5jbHVk
ZS9zdGRpby5oIiAzCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSByZW1vdmUgKGNvbnN0
IGNoYXIgKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSByZW5hbWUgKGNvbnN0IGNo
YXIgKiwgY29uc3QgY2hhciAqKTsKCmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB0
ZW1wbmFtIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CkZJTEUgKiBfX2F0dHJpYnV0ZV9f
KChfX2NkZWNsX18pKSB0bXBmaWxlICh2b2lkKTsKY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2Rl
Y2xfXykpIHRtcG5hbSAoY2hhciAqKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZj
bG9zZSAoRklMRSAqKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZmbHVzaCAoRklM
RSAqKTsKRklMRSAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZyZW9wZW4gKGNvbnN0IGNo
YXIgKiwgY29uc3QgY2hhciAqLCBGSUxFICopOwp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xf
XykpIHNldGJ1ZiAoRklMRSAqLCBjaGFyICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f
KSkgc2V0dmJ1ZiAoRklMRSAqLCBjaGFyICosIGludCwgc2l6ZV90KTsKaW50IF9fYXR0cmlidXRl
X18oKF9fY2RlY2xfXykpIGZwcmludGYgKEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4pOwppbnQg
X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZnNjYW5mIChGSUxFICosIGNvbnN0IGNoYXIgKiwg
Li4uKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHByaW50ZiAoY29uc3QgY2hhciAq
LCAuLi4pOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc2NhbmYgKGNvbnN0IGNoYXIg
KiwgLi4uKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNzY2FuZiAoY29uc3QgY2hh
ciAqLCBjb25zdCBjaGFyICosIC4uLik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB2
ZnByaW50ZiAoRklMRSAqLCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKaW50IF9fYXR0
cmlidXRlX18oKF9fY2RlY2xfXykpIHZwcmludGYgKGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xp
c3QpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdnNwcmludGYgKGNoYXIgKiwgY29u
c3QgY2hhciAqLCBfX2dudWNfdmFfbGlzdCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p
KSB2c25wcmludGYgKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0
KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZnZXRjIChGSUxFICopOwpjaGFyICog
X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZmdldHMgKGNoYXIgKiwgaW50LCBGSUxFICopOwpp
bnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZnB1dGMgKGludCwgRklMRSAqKTsKaW50IF9f
YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZwdXRzIChjb25zdCBjaGFyICosIEZJTEUgKik7Cmlu
dCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBnZXRjIChGSUxFICopOwppbnQgX19hdHRyaWJ1
dGVfXygoX19jZGVjbF9fKSkgZ2V0Y2hhciAodm9pZCk7CmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChf
X2NkZWNsX18pKSBnZXRzIChjaGFyICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg
cHV0YyAoaW50LCBGSUxFICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcHV0Y2hh
ciAoaW50KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHB1dHMgKGNvbnN0IGNoYXIg
Kik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB1bmdldGMgKGludCwgRklMRSAqKTsK
c2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZyZWFkICh2b2lkICosIHNpemVfdCBf
c2l6ZSwgc2l6ZV90IF9uLCBGSUxFICopOwpzaXplX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f
KSkgZndyaXRlIChjb25zdCB2b2lkICogLCBzaXplX3QgX3NpemUsIHNpemVfdCBfbiwgRklMRSAq
KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZnZXRwb3MgKEZJTEUgKiwgZnBvc190
ICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZnNlZWsgKEZJTEUgKiwgbG9uZywg
aW50KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZzZXRwb3MgKEZJTEUgKiwgY29u
c3QgZnBvc190ICopOwpsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZ0ZWxsICggRklM
RSAqKTsKdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSByZXdpbmQgKEZJTEUgKik7CnZv
aWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgY2xlYXJlcnIgKEZJTEUgKik7CmludCBfX2F0
dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmZW9mIChGSUxFICopOwppbnQgX19hdHRyaWJ1dGVfXygo
X19jZGVjbF9fKSkgZmVycm9yIChGSUxFICopOwp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xf
XykpIHBlcnJvciAoY29uc3QgY2hhciAqKTsKCkZJTEUgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs
X18pKSBmb3BlbiAoY29uc3QgY2hhciAqX25hbWUsIGNvbnN0IGNoYXIgKl90eXBlKTsKaW50IF9f
YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNwcmludGYgKGNoYXIgKiwgY29uc3QgY2hhciAqLCAu
Li4pOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc25wcmludGYgKGNoYXIgKiwgc2l6
ZV90LCBjb25zdCBjaGFyICosIC4uLik7CgoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp
IHZmaXByaW50ZiAoRklMRSAqLCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKaW50IF9f
YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGlwcmludGYgKGNvbnN0IGNoYXIgKiwgLi4uKTsKaW50
IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZpcHJpbnRmIChGSUxFICosIGNvbnN0IGNoYXIg
KiwgLi4uKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNpcHJpbnRmIChjaGFyICos
IGNvbnN0IGNoYXIgKiwgLi4uKTsKIyAxOTEgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCkZJTEUg
KiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmZG9wZW4gKGludCwgY29uc3QgY2hhciAqKTsK
CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmaWxlbm8gKEZJTEUgKik7CmludCBfX2F0
dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBnZXR3IChGSUxFICopOwppbnQgX19hdHRyaWJ1dGVfXygo
X19jZGVjbF9fKSkgcGNsb3NlIChGSUxFICopOwpGSUxFICogX19hdHRyaWJ1dGVfXygoX19jZGVj
bF9fKSkgcG9wZW4gKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKaW50IF9fYXR0cmlidXRl
X18oKF9fY2RlY2xfXykpIHB1dHcgKGludCwgRklMRSAqKTsKdm9pZCBfX2F0dHJpYnV0ZV9fKChf
X2NkZWNsX18pKSBzZXRidWZmZXIgKEZJTEUgKiwgY2hhciAqLCBpbnQpOwppbnQgX19hdHRyaWJ1
dGVfXygoX19jZGVjbF9fKSkgc2V0bGluZWJ1ZiAoRklMRSAqKTsKCgoKCgoKRklMRSAqIF9fYXR0
cmlidXRlX18oKF9fY2RlY2xfXykpIF9mZG9wZW5fciAoc3RydWN0IF9yZWVudCAqLCBpbnQsIGNv
bnN0IGNoYXIgKik7CkZJTEUgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfZm9wZW5fciAo
c3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmludCBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSBfZ2V0Y2hhcl9yIChzdHJ1Y3QgX3JlZW50ICopOwpjaGFyICog
X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2dldHNfciAoc3RydWN0IF9yZWVudCAqLCBjaGFy
ICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2lwcmludGZfciAoc3RydWN0IF9y
ZWVudCAqLCBjb25zdCBjaGFyICosIC4uLik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p
KSBfbWtzdGVtcF9yIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKik7CmNoYXIgKiBfX2F0dHJpYnV0
ZV9fKChfX2NkZWNsX18pKSBfbWt0ZW1wX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAqKTsKdm9p
ZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfcGVycm9yX3IgKHN0cnVjdCBfcmVlbnQgKiwg
Y29uc3QgY2hhciAqKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9wcmludGZfciAo
c3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIC4uLik7CmludCBfX2F0dHJpYnV0ZV9fKChf
X2NkZWNsX18pKSBfcHV0Y2hhcl9yIChzdHJ1Y3QgX3JlZW50ICosIGludCk7CmludCBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSBfcHV0c19yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIg
Kik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfcmVtb3ZlX3IgKHN0cnVjdCBfcmVl
bnQgKiwgY29uc3QgY2hhciAqKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9yZW5h
bWVfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICpfb2xkLCBjb25zdCBjaGFyICpfbmV3
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfc2NhbmZfciAoc3RydWN0
IF9yZWVudCAqLCBjb25zdCBjaGFyICosIC4uLik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs
X18pKSBfc3ByaW50Zl9yIChzdHJ1Y3QgX3JlZW50ICosIGNoYXIgKiwgY29uc3QgY2hhciAqLCAu
Li4pOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3NucHJpbnRmX3IgKHN0cnVjdCBf
cmVlbnQgKiwgY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgLi4uKTsKY2hhciAqIF9fYXR0
cmlidXRlX18oKF9fY2RlY2xfXykpIF90ZW1wbmFtX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3Qg
Y2hhciAqLCBjb25zdCBjaGFyICopOwpGSUxFICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg
X3RtcGZpbGVfciAoc3RydWN0IF9yZWVudCAqKTsKY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2Rl
Y2xfXykpIF90bXBuYW1fciAoc3RydWN0IF9yZWVudCAqLCBjaGFyICopOwppbnQgX19hdHRyaWJ1
dGVfXygoX19jZGVjbF9fKSkgX3ZmcHJpbnRmX3IgKHN0cnVjdCBfcmVlbnQgKiwgRklMRSAqLCBj
b25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xf
XykpIF92cHJpbnRmX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqLCBfX2dudWNfdmFf
bGlzdCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfdnNwcmludGZfciAoc3RydWN0
IF9yZWVudCAqLCBjaGFyICosIGNvbnN0IGNoYXIgKiwgX19nbnVjX3ZhX2xpc3QpOwppbnQgX19h
dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3ZzbnByaW50Zl9yIChzdHJ1Y3QgX3JlZW50ICosIGNo
YXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKCgoKCgppbnQgX19h
dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX19zcmdldCAoRklMRSAqKTsKaW50IF9fYXR0cmlidXRl
X18oKF9fY2RlY2xfXykpIF9fc3didWYgKGludCwgRklMRSAqKTsKCgoKCgoKRklMRSAqX19hdHRy
aWJ1dGVfXygoX19jZGVjbF9fKSkgZnVub3BlbiAoY29uc3Qgdm9pZCAqIF9jb29raWUsIGludCAo
KnJlYWRmbikodm9pZCAqIF9jb29raWUsIGNoYXIgKl9idWYsIGludCBfbiksIGludCAoKndyaXRl
Zm4pKHZvaWQgKiBfY29va2llLCBjb25zdCBjaGFyICpfYnVmLCBpbnQgX24pLCBmcG9zX3QgKCpz
ZWVrZm4pKHZvaWQgKiBfY29va2llLCBmcG9zX3QgX29mZiwgaW50IF93aGVuY2UpLCBpbnQgKCpj
bG9zZWZuKSh2b2lkICogX2Nvb2tpZSkpCgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiMgMjYwICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpzdGF0aWMg
X19pbmxpbmVfXyBpbnQgX19zZ2V0YyhGSUxFICpfX3ApCiAgewogICAgaW50IF9fYyA9ICgtLShf
X3ApLT5fciA8IDAgPyBfX3NyZ2V0KF9fcCkgOiAoaW50KSgqKF9fcCktPl9wKyspKTsKICAgIGlm
ICgoX19wLT5fZmxhZ3MgJiAweDQwMDApICYmIChfX2MgPT0gJ1xyJykpCiAgICAgIHsKICAgICAg
aW50IF9fYzIgPSAoLS0oX19wKS0+X3IgPCAwID8gX19zcmdldChfX3ApIDogKGludCkoKihfX3Ap
LT5fcCsrKSk7CiAgICAgIGlmIChfX2MyID09ICdcbicpCiAgICAgICAgX19jID0gX19jMjsKICAg
ICAgZWxzZQogICAgICAgIHVuZ2V0YyhfX2MyLCBfX3ApOwogICAgICB9CiAgICByZXR1cm4gX19j
OwogIH0KIyA0NyAiLi4vLi4vZ2NjL2djYy9zeXN0ZW0uaCIgMgojIDc4ICIuLi8uLi9nY2MvZ2Nj
L3N5c3RlbS5oIgojIDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAxIDMKIyA5ICIvdXNyL2luY2x1
ZGUvY3R5cGUuaCIgMwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgaXNhbG51bSAoaW50
IF9fYyk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc2FscGhhIChpbnQgX19jKTsK
aW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGlzY250cmwgKGludCBfX2MpOwppbnQgX19h
dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgaXNkaWdpdCAoaW50IF9fYyk7CmludCBfX2F0dHJpYnV0
ZV9fKChfX2NkZWNsX18pKSBpc2dyYXBoIChpbnQgX19jKTsKaW50IF9fYXR0cmlidXRlX18oKF9f
Y2RlY2xfXykpIGlzbG93ZXIgKGludCBfX2MpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f
KSkgaXNwcmludCAoaW50IF9fYyk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc3B1
bmN0IChpbnQgX19jKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGlzc3BhY2UgKGlu
dCBfX2MpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgaXN1cHBlciAoaW50IF9fYyk7
CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpc3hkaWdpdCAoaW50IF9fYyk7CmludCBf
X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB0b2xvd2VyIChpbnQgX19jKTsKaW50IF9fYXR0cmli
dXRlX18oKF9fY2RlY2xfXykpIHRvdXBwZXIgKGludCBfX2MpOwoKCmludCBfX2F0dHJpYnV0ZV9f
KChfX2NkZWNsX18pKSBpc2FzY2lpIChpbnQgX19jKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2Rl
Y2xfXykpIHRvYXNjaWkgKGludCBfX2MpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg
X3RvbG93ZXIgKGludCBfX2MpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3RvdXBw
ZXIgKGludCBfX2MpOwojIDM5ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gX19hdHRy
aWJ1dGVfXygoZGxsaW1wb3J0KSkgY29uc3QgY2hhciBfY3R5cGVfW107CiMgNzkgIi4uLy4uL2dj
Yy9nY2Mvc3lzdGVtLmgiIDIKIyAxNjcgIi4uLy4uL2djYy9nY2Mvc3lzdGVtLmgiCiMgMSAiL3Vz
ci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5o
IiAzCiMgMSAiaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQ3ICJpbmNsdWRlL3N0ZGRlZi5oIiAz
CnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKIyAyODcgImluY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRl
ZiBzaG9ydCB1bnNpZ25lZCBpbnQgd2NoYXJfdDsKIyAzMiAiL3Vzci9pbmNsdWRlL3N5cy90eXBl
cy5oIiAyIDMKIyA1MyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgdW5zaWdu
ZWQgY2hhciB1X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyB1X2xvbmc7CgoKdHlwZWRl
ZiB1bnNpZ25lZCBzaG9ydCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CgoKCgoK
Cgp0eXBlZGVmIGxvbmcgZGFkZHJfdDsKdHlwZWRlZiBjaGFyICogY2FkZHJfdDsKCgp0eXBlZGVm
IHVuc2lnbmVkIGxvbmcgaW5vX3Q7CiMgODIgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgdm1fb2Zmc2V0X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyB2
bV9zaXplX3Q7CgoKCnR5cGVkZWYgY2hhciBpbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciB1
X2ludDhfdDsKdHlwZWRlZiBzaG9ydCBpbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVf
aW50MTZfdDsKdHlwZWRlZiBpbnQgaW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQz
Ml90Owp0eXBlZGVmIGxvbmcgbG9uZyBpbnQ2NF90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9u
ZyB1X2ludDY0X3Q7CnR5cGVkZWYgaW50MzJfdCByZWdpc3Rlcl90OwojIDEwNSAiL3Vzci9pbmNs
dWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgc2hvcnQgZGV2X3Q7Cgp0eXBlZGVmIGxvbmcgb2Zm
X3Q7Cgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVpZF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0
IGdpZF90Owp0eXBlZGVmIGludCBwaWRfdDsKdHlwZWRlZiBsb25nIGtleV90Owp0eXBlZGVmIGxv
bmcgc3NpemVfdDsKCgp0eXBlZGVmIGNoYXIgKiBhZGRyX3Q7CnR5cGVkZWYgaW50IG1vZGVfdDsK
IyAxMzAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0
IG5saW5rX3Q7CiMgMTUwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBsb25n
IGZkX21hc2s7CgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfdHlwZXNfZmRfc2V0IHsKICAgICAgICBm
ZF9tYXNrIGZkc19iaXRzWygoKDY0KSsoKChzaXplb2YgKGZkX21hc2spICogOCkpLTEpKS8oKHNp
emVvZiAoZmRfbWFzaykgKiA4KSkpXTsKfSBfdHlwZXNfZmRfc2V0OwojIDE2OCAiLi4vLi4vZ2Nj
L2djYy9zeXN0ZW0uaCIgMgoKIyAxICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMSAzCiMgMSAiL3Vz
ci9pbmNsdWRlL3N5cy9lcnJuby5oIiAxIDMKIyAxNSAiL3Vzci9pbmNsdWRlL3N5cy9lcnJuby5o
IiAzCmV4dGVybiBpbnQgKl9fZXJybm8gKHZvaWQpOwoKCmV4dGVybiBfX2F0dHJpYnV0ZV9fKChk
bGxpbXBvcnQpKSBjb25zdCBjaGFyICogY29uc3QgX3N5c19lcnJsaXN0W107CmV4dGVybiBfX2F0
dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBpbnQgX3N5c19uZXJyOwojIDIgIi91c3IvaW5jbHVkZS9l
cnJuby5oIiAyIDMKIyAxNzAgIi4uLy4uL2djYy9nY2Mvc3lzdGVtLmgiIDIKCgoKCgoKIyAxICIv
dXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDE4ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMK
IyAxICJpbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxOSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAy
IDMKCgoKCgp2b2lkICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbWVtY2hyIChjb25zdCB2
b2lkICosIGludCwgc2l6ZV90KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1lbWNt
cCAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CnZvaWQgKiBfX2F0dHJpYnV0
ZV9fKChfX2NkZWNsX18pKSBtZW1jcHkgKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwp2
b2lkICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbWVtbW92ZSAodm9pZCAqLCBjb25zdCB2
b2lkICosIHNpemVfdCk7CnZvaWQgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBtZW1zZXQg
KHZvaWQgKiwgaW50LCBzaXplX3QpOwpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBz
dHJjYXQgKGNoYXIgKiwgY29uc3QgY2hhciAqKTsKY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVj
bF9fKSkgc3RyY2hyIChjb25zdCBjaGFyICosIGludCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2Nk
ZWNsX18pKSBzdHJjbXAgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKaW50IF9fYXR0cmli
dXRlX18oKF9fY2RlY2xfXykpIHN0cmNvbGwgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsK
Y2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RyY3B5IChjaGFyICosIGNvbnN0IGNo
YXIgKik7CnNpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJjc3BuIChjb25zdCBj
aGFyICosIGNvbnN0IGNoYXIgKik7CmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0
cmVycm9yIChpbnQpOwpzaXplX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RybGVuIChj
b25zdCBjaGFyICopOwpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJuY2F0IChj
aGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xf
XykpIHN0cm5jbXAgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpjaGFyICpf
X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJuY3B5IChjaGFyICosIGNvbnN0IGNoYXIgKiwg
c2l6ZV90KTsKY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RycGJyayAoY29uc3Qg
Y2hhciAqLCBjb25zdCBjaGFyICopOwpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBz
dHJyY2hyIChjb25zdCBjaGFyICosIGludCk7CnNpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs
X18pKSBzdHJzcG4gKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKY2hhciAqX19hdHRyaWJ1
dGVfXygoX19jZGVjbF9fKSkgc3Ryc3RyIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CgoK
Y2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RydG9rIChjaGFyICosIGNvbnN0IGNo
YXIgKik7CgoKc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnhmcm0gKGNoYXIg
KiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwoKCmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xf
XykpIHN0cnRva19yIChjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqKik7CgppbnQgX19hdHRy
aWJ1dGVfXygoX19jZGVjbF9fKSkgYmNtcCAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNp
emVfdCk7CnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgYmNvcHkgKGNvbnN0IGNoYXIg
KiwgY2hhciAqLCBzaXplX3QpOwp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGJ6ZXJv
IChjaGFyICosIHNpemVfdCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmZnMgKGlu
dCk7CmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGluZGV4IChjb25zdCBjaGFyICos
IGludCk7CnZvaWQgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBtZW1jY3B5ICh2b2lkICos
IGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOwpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNs
X18pKSByaW5kZXggKGNvbnN0IGNoYXIgKiwgaW50KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2Rl
Y2xfXykpIHN0cmNhc2VjbXAgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKY2hhciAqX19h
dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RyZHVwIChjb25zdCBjaGFyICopOwpjaGFyICpfX2F0
dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfc3RyZHVwX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3Qg
Y2hhciAqKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cm5jYXNlY21wIChjb25z
dCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKY2hhciAqX19hdHRyaWJ1dGVfXygoX19j
ZGVjbF9fKSkgc3Ryc2VwIChjaGFyICoqLCBjb25zdCBjaGFyICopOwpjaGFyICpfX2F0dHJpYnV0
ZV9fKChfX2NkZWNsX18pKSBzdHJsd3IgKGNoYXIgKik7CmNoYXIgKl9fYXR0cmlidXRlX18oKF9f
Y2RlY2xfXykpIHN0cnVwciAoY2hhciAqKTsKCgpjb25zdCBjaGFyICpfX2F0dHJpYnV0ZV9fKChf
X2NkZWNsX18pKSBzdHJzaWduYWwgKGludCBfX3NpZ25vKTsKCmludCBfX2F0dHJpYnV0ZV9fKChf
X2NkZWNsX18pKSBzdHJ0b3NpZ25vIChjb25zdCBjaGFyICpfX25hbWUpOwojIDE3NyAiLi4vLi4v
Z2NjL2djYy9zeXN0ZW0uaCIgMgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmdzLmgiIDEgMwojIDE3
OCAiLi4vLi4vZ2NjL2djYy9zeXN0ZW0uaCIgMgojIDE4OSAiLi4vLi4vZ2NjL2djYy9zeXN0ZW0u
aCIKIyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDEgMwojIDE3ICIvdXNyL2luY2x1ZGUvc3Rk
bGliLmgiIDMKIyAxICJpbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxOCAiL3Vzci9pbmNsdWRlL3N0
ZGxpYi5oIiAyIDMKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBxdW90OwogIGludCByZW07Cn0g
ZGl2X3Q7Cgp0eXBlZGVmIHN0cnVjdAp7CiAgbG9uZyBxdW90OwogIGxvbmcgcmVtOwp9IGxkaXZf
dDsKIyA0MiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBfX2F0dHJpYnV0ZV9fKChk
bGxpbXBvcnQpKSBpbnQgX19tYl9jdXJfbWF4OwoKCgp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2Rl
Y2xfXykpIGFib3J0ICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKaW50IF9fYXR0
cmlidXRlX18oKF9fY2RlY2xfXykpIGFicyAoaW50KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2Rl
Y2xfXykpIGF0ZXhpdCAodm9pZCAoKl9fZnVuYykodm9pZCkpOwpkb3VibGUgX19hdHRyaWJ1dGVf
XygoX19jZGVjbF9fKSkgYXRvZiAoY29uc3QgY2hhciAqX19ucHRyKTsKCmZsb2F0IF9fYXR0cmli
dXRlX18oKF9fY2RlY2xfXykpIGF0b2ZmIChjb25zdCBjaGFyICpfX25wdHIpOwoKaW50IF9fYXR0
cmlidXRlX18oKF9fY2RlY2xfXykpIGF0b2kgKGNvbnN0IGNoYXIgKl9fbnB0cik7CmxvbmcgX19h
dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgYXRvbCAoY29uc3QgY2hhciAqX19ucHRyKTsKdm9pZCAq
IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGJzZWFyY2ggKGNvbnN0IHZvaWQgKiBfX2tleSwg
Y29uc3Qgdm9pZCAqIF9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsIGludCAo
KiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfY29tcGFyKSAoY29uc3Qgdm9pZCAqLCBjb25z
dCB2b2lkICopKQoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwp2b2lkICogX19hdHRyaWJ1dGVfXygoX19jZGVj
bF9fKSkgY2FsbG9jIChzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSk7CmRpdl90IF9fYXR0
cmlidXRlX18oKF9fY2RlY2xfXykpIGRpdiAoaW50IF9fbnVtZXIsIGludCBfX2Rlbm9tKTsKdm9p
ZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBleGl0IChpbnQgX19zdGF0dXMpIF9fYXR0cmli
dXRlX18gKChub3JldHVybikpOwp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZyZWUg
KHZvaWQgKik7CmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBnZXRlbnYgKGNvbnN0
IGNoYXIgKl9fc3RyaW5nKTsKY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9nZXRl
bnZfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICpfX3N0cmluZyk7CmNoYXIgKiBfX2F0
dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfZmluZGVudiAoY29uc3QgY2hhciAqLCBpbnQgKik7CmNo
YXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfZmluZGVudl9yIChzdHJ1Y3QgX3JlZW50
ICosIGNvbnN0IGNoYXIgKiwgaW50ICopOwpsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp
IGxhYnMgKGxvbmcpOwpsZGl2X3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbGRpdiAobG9u
ZyBfX251bWVyLCBsb25nIF9fZGVub20pOwp2b2lkICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f
KSkgbWFsbG9jIChzaXplX3QgX19zaXplKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp
IG1ibGVuIChjb25zdCBjaGFyICosIHNpemVfdCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs
X18pKSBfbWJsZW5fciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIHNpemVfdCwgaW50
ICopOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbWJ0b3djICh3Y2hhcl90ICosIGNv
bnN0IGNoYXIgKiwgc2l6ZV90KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9tYnRv
d2NfciAoc3RydWN0IF9yZWVudCAqLCB3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBp
bnQgKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB3Y3RvbWIgKGNoYXIgKiwgd2No
YXJfdCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfd2N0b21iX3IgKHN0cnVjdCBf
cmVlbnQgKiwgY2hhciAqLCB3Y2hhcl90LCBpbnQgKik7CnNpemVfdCBfX2F0dHJpYnV0ZV9fKChf
X2NkZWNsX18pKSBtYnN0b3djcyAod2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CnNp
emVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfbWJzdG93Y3NfciAoc3RydWN0IF9yZWVu
dCAqLCB3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBpbnQgKik7CnNpemVfdCBfX2F0
dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB3Y3N0b21icyAoY2hhciAqLCBjb25zdCB3Y2hhcl90ICos
IHNpemVfdCk7CnNpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfd2NzdG9tYnNfciAo
c3RydWN0IF9yZWVudCAqLCBjaGFyICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90LCBpbnQgKik7
CnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgcXNvcnQgKHZvaWQgKiBfX2Jhc2UsIHNp
emVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBpbnQoKl9jb21wYXIpKGNvbnN0IHZvaWQgKiwg
Y29uc3Qgdm9pZCAqKSk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSByYW5kICh2b2lk
KTsKdm9pZCAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHJlYWxsb2MgKHZvaWQgKiBfX3Is
IHNpemVfdCBfX3NpemUpOwp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNyYW5kICh1
bnNpZ25lZCBfX3NlZWQpOwpkb3VibGUgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RydG9k
IChjb25zdCBjaGFyICpfX24sIGNoYXIgKipfZW5kX1BUUik7CgpmbG9hdCBfX2F0dHJpYnV0ZV9f
KChfX2NkZWNsX18pKSBzdHJ0b2RmIChjb25zdCBjaGFyICpfX24sIGNoYXIgKipfZW5kX1BUUik7
Cgpsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnRvbCAoY29uc3QgY2hhciAqX19u
LCBjaGFyICoqX2VuZF9QVFIsIGludCBfX2Jhc2UpOwp1bnNpZ25lZCBsb25nIF9fYXR0cmlidXRl
X18oKF9fY2RlY2xfXykpIHN0cnRvdWwgKGNvbnN0IGNoYXIgKl9uX1BUUiwgY2hhciAqKl9lbmRf
UFRSLCBpbnQgX19iYXNlKTsKdW5zaWduZWQgbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p
KSBfc3RydG91bF9yIChzdHJ1Y3QgX3JlZW50ICosY29uc3QgY2hhciAqX25fUFRSLCBjaGFyICoq
X2VuZF9QVFIsIGludCBfX2Jhc2UpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3lz
dGVtIChjb25zdCBjaGFyICpfX3N0cmluZyk7CgoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xf
XykpIHB1dGVudiAoY29uc3QgY2hhciAqX19zdHJpbmcpOwppbnQgX19hdHRyaWJ1dGVfXygoX19j
ZGVjbF9fKSkgX3B1dGVudl9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKl9fc3RyaW5n
KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNldGVudiAoY29uc3QgY2hhciAqX19z
dHJpbmcsIGNvbnN0IGNoYXIgKl9fdmFsdWUsIGludCBfX292ZXJ3cml0ZSk7CmludCBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSBfc2V0ZW52X3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hh
ciAqX19zdHJpbmcsIGNvbnN0IGNoYXIgKl9fdmFsdWUsIGludCBfX292ZXJ3cml0ZSk7CgpjaGFy
ICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2N2dCAoZG91YmxlLGludCxjaGFyICopOwpj
aGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2N2dGYgKGZsb2F0LGludCxjaGFyICop
OwpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZmN2dCAoZG91YmxlLGludCxpbnQg
KixpbnQgKik7CmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmY3Z0ZiAoZmxvYXQs
aW50LGludCAqLGludCAqKTsKY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGVjdnQg
KGRvdWJsZSxpbnQsaW50ICosaW50ICopOwpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f
KSkgZWN2dGJ1ZiAoZG91YmxlLCBpbnQsIGludCosIGludCosIGNoYXIgKik7CmNoYXIgKiBfX2F0
dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmY3Z0YnVmIChkb3VibGUsIGludCwgaW50KiwgaW50Kiwg
Y2hhciAqKTsKY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGVjdnRmIChmbG9hdCxp
bnQsaW50ICosaW50ICopOwpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZHRvYSAo
ZG91YmxlLCBpbnQsIGludCwgaW50ICosIGludCosIGNoYXIqKik7CmludCBfX2F0dHJpYnV0ZV9f
KChfX2NkZWNsX18pKSByYW5kX3IgKHVuc2lnbmVkICpfX3NlZWQpOwoKCgoKY2hhciAqIF9fYXR0
cmlidXRlX18oKF9fY2RlY2xfXykpIHJlYWxwYXRoIChjb25zdCBjaGFyICosIGNoYXIgKik7CnZv
aWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdW5zZXRlbnYgKGNvbnN0IGNoYXIgKl9fc3Ry
aW5nKTsKdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfdW5zZXRlbnZfciAoc3RydWN0
IF9yZWVudCAqLCBjb25zdCBjaGFyICpfX3N0cmluZyk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2Nk
ZWNsX18pKSByYW5kb20gKHZvaWQpOwpsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNy
YW5kb20gKHVuc2lnbmVkIF9fc2VlZCk7CmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p
KSBwdHNuYW1lIChpbnQpOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ3JhbnRwdCAo
aW50KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHVubG9ja3B0IChpbnQpOwoKCgoK
Y2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9kdG9hX3IgKHN0cnVjdCBfcmVlbnQg
KiwgZG91YmxlLCBpbnQsIGludCwgaW50ICosIGludCosIGNoYXIqKik7CnZvaWQgKiBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSBfbWFsbG9jX3IgKHN0cnVjdCBfcmVlbnQgKiwgc2l6ZV90KTsK
dm9pZCAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9jYWxsb2NfciAoc3RydWN0IF9yZWVu
dCAqLCBzaXplX3QsIHNpemVfdCk7CnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2Zy
ZWVfciAoc3RydWN0IF9yZWVudCAqLCB2b2lkICopOwp2b2lkICogX19hdHRyaWJ1dGVfXygoX19j
ZGVjbF9fKSkgX3JlYWxsb2NfciAoc3RydWN0IF9yZWVudCAqLCB2b2lkICosIHNpemVfdCk7CnZv
aWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX21zdGF0c19yIChzdHJ1Y3QgX3JlZW50ICos
IGNoYXIgKik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfc3lzdGVtX3IgKHN0cnVj
dCBfcmVlbnQgKiwgY29uc3QgY2hhciAqKTsKCnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f
KSkgX19lcHJpbnRmIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50LCBj
b25zdCBjaGFyICopOwojIDE5MCAiLi4vLi4vZ2NjL2djYy9zeXN0ZW0uaCIgMgojIDE5OCAiLi4v
Li4vZ2NjL2djYy9zeXN0ZW0uaCIKIyAxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDEgMwoKCgoj
IDEgIi91c3IvaW5jbHVkZS9zeXMvdW5pc3RkLmgiIDEgMwojIDExICIvdXNyL2luY2x1ZGUvc3lz
L3VuaXN0ZC5oIiAzCiMgMSAiaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTIgIi91c3IvaW5jbHVk
ZS9zeXMvdW5pc3RkLmgiIDIgMwoKZXh0ZXJuIGNoYXIgKiplbnZpcm9uOwoKdm9pZCBfX2F0dHJp
YnV0ZV9fKChfX2NkZWNsX18pKSBfZXhpdCAoaW50IF9fc3RhdHVzICkgX19hdHRyaWJ1dGVfXyAo
KG5vcmV0dXJuKSk7CgppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgYWNjZXNzIChjb25z
dCBjaGFyICpfX3BhdGgsIGludCBfX2Ftb2RlICk7CnVuc2lnbmVkIF9fYXR0cmlidXRlX18oKF9f
Y2RlY2xfXykpIGFsYXJtICh1bnNpZ25lZCBfX3NlY3MgKTsKaW50IF9fYXR0cmlidXRlX18oKF9f
Y2RlY2xfXykpIGNoZGlyIChjb25zdCBjaGFyICpfX3BhdGggKTsKaW50IF9fYXR0cmlidXRlX18o
KF9fY2RlY2xfXykpIGNobW9kIChjb25zdCBjaGFyICpfX3BhdGgsIG1vZGVfdCBfX21vZGUgKTsK
aW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGNob3duIChjb25zdCBjaGFyICpfX3BhdGgs
IHVpZF90IF9fb3duZXIsIGdpZF90IF9fZ3JvdXAgKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2Rl
Y2xfXykpIGNsb3NlIChpbnQgX19maWxkZXMgKTsKY2hhciBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs
X18pKSAqY3Rlcm1pZCAoY2hhciAqX19zICk7CmNoYXIgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f
KSkgKmN1c2VyaWQgKGNoYXIgKl9fcyApOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg
ZHVwIChpbnQgX19maWxkZXMgKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGR1cDIg
KGludCBfX2ZpbGRlcywgaW50IF9fZmlsZGVzMiApOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVj
bF9fKSkgZXhlY2wgKGNvbnN0IGNoYXIgKl9fcGF0aCwgY29uc3QgY2hhciAqLCAuLi4gKTsKaW50
IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGV4ZWNsZSAoY29uc3QgY2hhciAqX19wYXRoLCBj
b25zdCBjaGFyICosIC4uLiApOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZXhlY2xw
IChjb25zdCBjaGFyICpfX2ZpbGUsIGNvbnN0IGNoYXIgKiwgLi4uICk7CmludCBfX2F0dHJpYnV0
ZV9fKChfX2NkZWNsX18pKSBleGVjdiAoY29uc3QgY2hhciAqX19wYXRoLCBjaGFyICogY29uc3Qg
X19hcmd2W10gKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGV4ZWN2ZSAoY29uc3Qg
Y2hhciAqX19wYXRoLCBjaGFyICogY29uc3QgX19hcmd2W10sIGNoYXIgKiBjb25zdCBfX2VudnBb
XSApOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZXhlY3ZwIChjb25zdCBjaGFyICpf
X2ZpbGUsIGNoYXIgKiBjb25zdCBfX2FyZ3ZbXSApOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVj
bF9fKSkgZmNobW9kIChpbnQgX19maWxkZXMsIG1vZGVfdCBfX21vZGUgKTsKaW50IF9fYXR0cmli
dXRlX18oKF9fY2RlY2xfXykpIGZjaG93biAoaW50IF9fZmlsZGVzLCB1aWRfdCBfX293bmVyLCBn
aWRfdCBfX2dyb3VwICk7CnBpZF90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZvcmsgKHZv
aWQgKTsKbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmcGF0aGNvbmYgKGludCBfX2Zk
LCBpbnQgX19uYW1lICk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmc3luYyAoaW50
IF9fZmQpOwpjaGFyIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpICpnZXRjd2QgKGNoYXIgKl9f
YnVmLCBzaXplX3QgX19zaXplICk7CmdpZF90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdl
dGVnaWQgKHZvaWQgKTsKdWlkX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0ZXVpZCAo
dm9pZCApOwpnaWRfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBnZXRnaWQgKHZvaWQgKTsK
aW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdldGdyb3VwcyAoaW50IF9fZ2lkc2V0c2l6
ZSwgZ2lkX3QgX19ncm91cGxpc3RbXSApOwpjaGFyIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykp
ICpnZXRsb2dpbiAodm9pZCApOwpjaGFyIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpICpnZXRw
YXNzIChfX2NvbnN0IGNoYXIgKl9fcHJvbXB0KTsKc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2Rl
Y2xfXykpIGdldHBhZ2VzaXplICh2b2lkKTsKcGlkX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f
KSkgZ2V0cGdycCAodm9pZCApOwpwaWRfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBnZXRw
aWQgKHZvaWQgKTsKcGlkX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0cHBpZCAodm9p
ZCApOwp1aWRfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBnZXR1aWQgKHZvaWQgKTsKaW50
IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGlzYXR0eSAoaW50IF9fZmlsZGVzICk7CmludCBf
X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBsY2hvd24gKGNvbnN0IGNoYXIgKl9fcGF0aCwgdWlk
X3QgX19vd25lciwgZ2lkX3QgX19ncm91cCApOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f
KSkgbGluayAoY29uc3QgY2hhciAqX19wYXRoMSwgY29uc3QgY2hhciAqX19wYXRoMiApOwppbnQg
X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbmljZSAoaW50IF9fbmljZV92YWx1ZSApOwpvZmZf
dCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBsc2VlayAoaW50IF9fZmlsZGVzLCBvZmZfdCBf
X29mZnNldCwgaW50IF9fd2hlbmNlICk7CmxvbmcgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg
cGF0aGNvbmYgKGNvbnN0IGNoYXIgKl9fcGF0aCwgaW50IF9fbmFtZSApOwppbnQgX19hdHRyaWJ1
dGVfXygoX19jZGVjbF9fKSkgcGF1c2UgKHZvaWQgKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2Rl
Y2xfXykpIHBpcGUgKGludCBfX2ZpbGRlc1syXSApOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVj
bF9fKSkgcmVhZCAoaW50IF9fZmlsZGVzLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGUgKTsK
aW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHJtZGlyIChjb25zdCBjaGFyICpfX3BhdGgg
KTsKdm9pZCAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNicmsgKHNpemVfdCBfX2luY3Ip
OwoKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNldGVnaWQgKGdpZF90IF9fZ2lkICk7
CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzZXRldWlkICh1aWRfdCBfX3VpZCApOwoK
aW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNldGdpZCAoZ2lkX3QgX19naWQgKTsKaW50
IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNldHBnaWQgKHBpZF90IF9fcGlkLCBwaWRfdCBf
X3BnaWQgKTsKcGlkX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc2V0c2lkICh2b2lkICk7
CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzZXR1aWQgKHVpZF90IF9fdWlkICk7CnVu
c2lnbmVkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNsZWVwICh1bnNpZ25lZCBpbnQgX19z
ZWNvbmRzICk7CnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3dhYiAoY29uc3Qgdm9p
ZCAqLCB2b2lkICosIHNzaXplX3QpOwpsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN5
c2NvbmYgKGludCBfX25hbWUgKTsKcGlkX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdGNn
ZXRwZ3JwIChpbnQgX19maWxkZXMgKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHRj
c2V0cGdycCAoaW50IF9fZmlsZGVzLCBwaWRfdCBfX3BncnBfaWQgKTsKY2hhciBfX2F0dHJpYnV0
ZV9fKChfX2NkZWNsX18pKSAqdHR5bmFtZSAoaW50IF9fZmlsZGVzICk7CmludCBfX2F0dHJpYnV0
ZV9fKChfX2NkZWNsX18pKSB1bmxpbmsgKGNvbnN0IGNoYXIgKl9fcGF0aCApOwppbnQgX19hdHRy
aWJ1dGVfXygoX19jZGVjbF9fKSkgd3JpdGUgKGludCBfX2ZpbGRlcywgY29uc3Qgdm9pZCAqX19i
dWYsIHNpemVfdCBfX25ieXRlICk7CgoKcGlkX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg
dmZvcmsgKHZvaWQgKTsKCgoKCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfY2xvc2Ug
KGludCBfX2ZpbGRlcyApOwpwaWRfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfZm9yayAo
dm9pZCApOwpwaWRfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfZ2V0cGlkICh2b2lkICk7
CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfbGluayAoY29uc3QgY2hhciAqX19wYXRo
MSwgY29uc3QgY2hhciAqX19wYXRoMiApOwpvZmZfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p
KSBfbHNlZWsgKGludCBfX2ZpbGRlcywgb2ZmX3QgX19vZmZzZXQsIGludCBfX3doZW5jZSApOwpp
bnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3JlYWQgKGludCBfX2ZpbGRlcywgdm9pZCAq
X19idWYsIHNpemVfdCBfX25ieXRlICk7CnZvaWQgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p
KSBfc2JyayAoc2l6ZV90IF9faW5jcik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBf
dW5saW5rIChjb25zdCBjaGFyICpfX3BhdGggKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xf
XykpIF93cml0ZSAoaW50IF9fZmlsZGVzLCBjb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5
dGUgKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9leGVjdmUgKGNvbnN0IGNoYXIg
Kl9fcGF0aCwgY2hhciAqIGNvbnN0IF9fYXJndltdLCBjaGFyICogY29uc3QgX19lbnZwW10gKTsK
CgppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0ZHRhYmxlc2l6ZSAodm9pZCk7CnZv
aWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc2V0ZHRhYmxlc2l6ZSAoaW50KTsKdW5zaWdu
ZWQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgdXNsZWVwICh1bnNpZ25lZCBpbnQgX191c2Vj
b25kcyk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmdHJ1bmNhdGUgKGludCBfX2Zk
LCBvZmZfdCBfX2xlbmd0aCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB0cnVuY2F0
ZSAoY29uc3QgY2hhciAqLCBvZmZfdCBfX2xlbmd0aCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2Nk
ZWNsX18pKSBnZXRob3N0bmFtZSAoY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pOwpjaGFyICog
X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbWt0ZW1wIChjaGFyICopOwppbnQgX19hdHRyaWJ1
dGVfXygoX19jZGVjbF9fKSkgc3luYyAodm9pZCk7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs
X18pKSByZWFkbGluayAoY29uc3QgY2hhciAqX19wYXRoLCBjaGFyICpfX2J1ZiwgaW50IF9fYnVm
bGVuKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN5bWxpbmsgKGNvbnN0IGNoYXIg
Kl9fbmFtZTEsIGNvbnN0IGNoYXIgKl9fbmFtZTIpOwojIDE0OSAiL3Vzci9pbmNsdWRlL3N5cy91
bmlzdGQuaCIgMwpsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN5c2NvbmYgKGludCBf
X25hbWUpOwojIDUgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCiMgMTk5ICIuLi8uLi9nY2Mv
Z2NjL3N5c3RlbS5oIiAyCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9wYXJhbS5oIiAxIDMKCgoK
CgojIDEgImluY2x1ZGUvbGltaXRzLmgiIDEgMwojIDExICJpbmNsdWRlL2xpbWl0cy5oIiAzCiMg
MSAiaW5jbHVkZS9zeXNsaW1pdHMuaCIgMSAzCgoKCgoKCiMgMSAiaW5jbHVkZS9saW1pdHMuaCIg
MSAzCiMgMTMwICJpbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5o
IiAxIDMKIyAxMzEgImluY2x1ZGUvbGltaXRzLmgiIDIgMwojIDggImluY2x1ZGUvc3lzbGltaXRz
LmgiIDIgMwojIDEyICJpbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyA3ICIvdXNyL2luY2x1ZGUvc3lz
L3BhcmFtLmgiIDIgMwojIDIwMyAiLi4vLi4vZ2NjL2djYy9zeXN0ZW0uaCIgMgoKCgojIDEgImlu
Y2x1ZGUvbGltaXRzLmgiIDEgMwojIDIwNyAiLi4vLi4vZ2NjL2djYy9zeXN0ZW0uaCIgMgojIDI1
NCAiLi4vLi4vZ2NjL2djYy9zeXN0ZW0uaCIKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIg
MSAzCiMgMTYgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzCnN0cnVjdCB0aW1ldmFsIHsKICBs
b25nIHR2X3NlYzsKICBsb25nIHR2X3VzZWM7Cn07CgpzdHJ1Y3QgdGltZXpvbmUgewogIGludCB0
el9taW51dGVzd2VzdDsKICBpbnQgdHpfZHN0dGltZTsKfTsKCgojIDEgIi91c3IvaW5jbHVkZS9z
eXMvc2VsZWN0LmgiIDEgMwojIDE3ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMKIyAxOCAiL3Vzci9pbmNsdWRlL3N5cy9zZWxl
Y3QuaCIgMiAzCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMSAzCiMgMjQgIi91
c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCgoKaW50IHNlbGVjdCAoaW50IF9fbiwgX3R5
cGVzX2ZkX3NldCAqX19yZWFkZmRzLCBfdHlwZXNfZmRfc2V0ICpfX3dyaXRlZmRzLCBfdHlwZXNf
ZmRfc2V0ICpfX2V4Y2VwdGZkcywgc3RydWN0IHRpbWV2YWwgKl9fdGltZW91dCkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiMgMjggIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMKIyAzNiAiL3Vzci9pbmNsdWRlL3N5
cy90aW1lLmgiIDMKc3RydWN0IGl0aW1lcnZhbCB7CiAgc3RydWN0IHRpbWV2YWwgaXRfaW50ZXJ2
YWw7CiAgc3RydWN0IHRpbWV2YWwgaXRfdmFsdWU7Cn07CgppbnQgX19hdHRyaWJ1dGVfXygoX19j
ZGVjbF9fKSkgZ2V0dGltZW9mZGF5IChzdHJ1Y3QgdGltZXZhbCAqX19wLCBzdHJ1Y3QgdGltZXpv
bmUgKl9feik7CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzZXR0aW1lb2ZkYXkgKGNv
bnN0IHN0cnVjdCB0aW1ldmFsICosIGNvbnN0IHN0cnVjdCB0aW1lem9uZSAqKTsKaW50IF9fYXR0
cmlidXRlX18oKF9fY2RlY2xfXykpIHV0aW1lcyAoY29uc3QgY2hhciAqX19wYXRoLCBzdHJ1Y3Qg
dGltZXZhbCAqX190dnApOwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2V0aXRpbWVy
IChpbnQgX193aGljaCwgc3RydWN0IGl0aW1lcnZhbCAqX192YWx1ZSk7CmludCBfX2F0dHJpYnV0
ZV9fKChfX2NkZWNsX18pKSBzZXRpdGltZXIgKGludCBfX3doaWNoLCBjb25zdCBzdHJ1Y3QgaXRp
bWVydmFsICpfX3ZhbHVlLCBzdHJ1Y3QgaXRpbWVydmFsICpfX292YWx1ZSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiMgMjU1ICIuLi8uLi9nY2MvZ2NjL3N5c3RlbS5oIiAyCiMgMjY3ICIuLi8uLi9nY2MvZ2NjL3N5
c3RlbS5oIgojIDEgIi91c3IvaW5jbHVkZS9mY250bC5oIiAxIDMKCgoKIyAxICIvdXNyL2luY2x1
ZGUvc3lzL2ZjbnRsLmgiIDEgMwojIDEzOSAiL3Vzci9pbmNsdWRlL3N5cy9mY250bC5oIiAzCnN0
cnVjdCBmbG9jayB7CiAgICAgICAgc2hvcnQgbF90eXBlOwogICAgICAgIHNob3J0IGxfd2hlbmNl
OwogICAgICAgIGxvbmcgbF9zdGFydDsKICAgICAgICBsb25nIGxfbGVuOwogICAgICAgIHNob3J0
IGxfcGlkOwogICAgICAgIHNob3J0IGxfeHh4Owp9OwoKCgpzdHJ1Y3QgZWZsb2NrIHsKICAgICAg
ICBzaG9ydCBsX3R5cGU7CiAgICAgICAgc2hvcnQgbF93aGVuY2U7CiAgICAgICAgbG9uZyBsX3N0
YXJ0OwogICAgICAgIGxvbmcgbF9sZW47CiAgICAgICAgc2hvcnQgbF9waWQ7CiAgICAgICAgc2hv
cnQgbF94eHg7CiAgICAgICAgbG9uZyBsX3JwaWQ7CiAgICAgICAgbG9uZyBsX3JzeXM7Cn07CgoK
CgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL3N5
cy9zdGF0LmgiIDMKc3RydWN0IHN0YXQKewogIGRldl90IHN0X2RldjsKICBpbm9fdCBzdF9pbm87
CiAgbW9kZV90IHN0X21vZGU7CiAgbmxpbmtfdCBzdF9ubGluazsKICB1aWRfdCBzdF91aWQ7CiAg
Z2lkX3Qgc3RfZ2lkOwogIGRldl90IHN0X3JkZXY7CiAgb2ZmX3Qgc3Rfc2l6ZTsKCgoKCgoKICB0
aW1lX3Qgc3RfYXRpbWU7CiAgbG9uZyBzdF9zcGFyZTE7CiAgdGltZV90IHN0X210aW1lOwogIGxv
bmcgc3Rfc3BhcmUyOwogIHRpbWVfdCBzdF9jdGltZTsKICBsb25nIHN0X3NwYXJlMzsKICBsb25n
IHN0X2Jsa3NpemU7CiAgbG9uZyBzdF9ibG9ja3M7CiAgbG9uZyBzdF9zcGFyZTRbMl07Cgp9Owoj
IDExOSAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMKaW50IF9fYXR0cmlidXRlX18oKF9fY2Rl
Y2xfXykpIGNobW9kICggY29uc3QgY2hhciAqX19wYXRoLCBtb2RlX3QgX19tb2RlICk7CmludCBf
X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmY2htb2QgKGludCBfX2ZkLCBtb2RlX3QgX19tb2Rl
KTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGZzdGF0ICggaW50IF9fZmQsIHN0cnVj
dCBzdGF0ICpfX3NidWYgKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1rZGlyICgg
Y29uc3QgY2hhciAqX3BhdGgsIG1vZGVfdCBfX21vZGUgKTsKaW50IF9fYXR0cmlidXRlX18oKF9f
Y2RlY2xfXykpIG1rZmlmbyAoIGNvbnN0IGNoYXIgKl9fcGF0aCwgbW9kZV90IF9fbW9kZSApOwpp
bnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RhdCAoIGNvbnN0IGNoYXIgKl9fcGF0aCwg
c3RydWN0IHN0YXQgKl9fc2J1ZiApOwptb2RlX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkg
dW1hc2sgKCBtb2RlX3QgX19tYXNrICk7CiMgMTM0ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIg
MwppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2ZzdGF0ICggaW50IF9fZmQsIHN0cnVj
dCBzdGF0ICpfX3NidWYgKTsKaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9zdGF0ICgg
Y29uc3QgY2hhciAqX19wYXRoLCBzdHJ1Y3Qgc3RhdCAqX19zYnVmICk7CgoKaW50IF9fYXR0cmli
dXRlX18oKF9fY2RlY2xfXykpIGxzdGF0ICggY29uc3QgY2hhciAqX19wYXRoLCBzdHJ1Y3Qgc3Rh
dCAqX19idWYgKTsKIyAxNjUgIi91c3IvaW5jbHVkZS9zeXMvZmNudGwuaCIgMiAzCgpleHRlcm4g
aW50IG9wZW4gKGNvbnN0IGNoYXIgKiwgaW50LCAuLi4pOwpleHRlcm4gaW50IGNyZWF0IChjb25z
dCBjaGFyICosIG1vZGVfdCk7CmV4dGVybiBpbnQgZmNudGwgKGludCwgaW50LCAuLi4pOwoKCgpl
eHRlcm4gaW50IF9vcGVuIChjb25zdCBjaGFyICosIGludCwgLi4uKTsKZXh0ZXJuIGludCBfZmNu
dGwgKGludCwgaW50LCAuLi4pOwojIDUgIi91c3IvaW5jbHVkZS9mY250bC5oIiAyIDMKIyAyNjgg
Ii4uLy4uL2djYy9nY2Mvc3lzdGVtLmgiIDIKIyAzMDUgIi4uLy4uL2djYy9nY2Mvc3lzdGVtLmgi
CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDEgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUv
c3lzL3Jlc291cmNlLmgiIDEgMwojIDEzICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMK
c3RydWN0IHJ1c2FnZSB7CiAgICAgICAgc3RydWN0IHRpbWV2YWwgcnVfdXRpbWU7CiAgICAgICAg
c3RydWN0IHRpbWV2YWwgcnVfc3RpbWU7CiAgICAgICAgbG9uZyBydV9tYXhyc3M7CiAgICAgICAg
bG9uZyBydV9peHJzczsKICAgICAgICBsb25nIHJ1X2lkcnNzOwogICAgICAgIGxvbmcgcnVfaXNy
c3M7CiAgICAgICAgbG9uZyBydV9taW5mbHQ7CiAgICAgICAgbG9uZyBydV9tYWpmbHQ7CiAgICAg
ICAgbG9uZyBydV9uc3dhcDsKICAgICAgICBsb25nIHJ1X2luYmxvY2s7CiAgICAgICAgbG9uZyBy
dV9vdWJsb2NrOwogICAgICAgIGxvbmcgcnVfbXNnc25kOwogICAgICAgIGxvbmcgcnVfbXNncmN2
OwogICAgICAgIGxvbmcgcnVfbnNpZ25hbHM7CiAgICAgICAgbG9uZyBydV9udmNzdzsKICAgICAg
ICBsb25nIHJ1X25pdmNzdzsKCn07CgppbnQgZ2V0cnVzYWdlIChpbnQgX193aG8sIHN0cnVjdCBy
dXNhZ2UgKl9fcnVzYWdlKTsKIyA2ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzCiMgMzAg
Ii91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAzCnBpZF90IHdhaXQgKGludCAqKTsKcGlkX3Qgd2Fp
dHBpZCAocGlkX3QsIGludCAqLCBpbnQpOwpwaWRfdCB3YWl0MyAoaW50ICpfX3N0YXR1cywgaW50
IF9fb3B0aW9ucywgc3RydWN0IHJ1c2FnZSAqX19ydXNhZ2UpOwpwaWRfdCB3YWl0NCAocGlkX3Qg
X19waWQsIGludCAqX19zdGF0dXMsIGludCBfX29wdGlvbnMsIHN0cnVjdCBydXNhZ2UgKl9fcnVz
YWdlKTsKCnVuaW9uIHdhaXQKICB7CiAgICBpbnQgd19zdGF0dXM7CiAgICBzdHJ1Y3QKICAgICAg
ewogICAgICAgIHVuc2lnbmVkIGludCBfX3dfdGVybXNpZzo3OwogICAgICAgIHVuc2lnbmVkIGlu
dCBfX3dfY29yZWR1bXA6MTsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3JldGNvZGU6ODsKICAg
ICAgICB1bnNpZ25lZCBpbnQ6MTY7CiAgICAgIH0gX193YWl0X3Rlcm1pbmF0ZWQ7CiAgICBzdHJ1
Y3QKICAgICAgewogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHZhbDo4OwogICAgICAgIHVu
c2lnbmVkIGludCBfX3dfc3RvcHNpZzo4OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsKICAgICAg
fSBfX3dhaXRfc3RvcHBlZDsKICB9OwojIDMwNiAiLi4vLi4vZ2NjL2djYy9zeXN0ZW0uaCIgMgoj
IDM2MCAiLi4vLi4vZ2NjL2djYy9zeXN0ZW0uaCIKZXh0ZXJuIGludCBnZXRvcHQgKGludCwgY2hh
ciAqKiwgY2hhciAqKTsKCgoKZXh0ZXJuIGNoYXIgKmdldHdkIChjaGFyICopOwojIDM3NiAiLi4v
Li4vZ2NjL2djYy9zeXN0ZW0uaCIKIyAxICIvdXNyL2luY2x1ZGUvbWFsbG9jLmgiIDEgMwojIDEw
ICIvdXNyL2luY2x1ZGUvbWFsbG9jLmgiIDMKIyAxICJpbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAx
MSAiL3Vzci9pbmNsdWRlL21hbGxvYy5oIiAyIDMKIyAxOSAiL3Vzci9pbmNsdWRlL21hbGxvYy5o
IiAzCnN0cnVjdCBtYWxsaW5mbyB7CiAgaW50IGFyZW5hOwogIGludCBvcmRibGtzOwogIGludCBz
bWJsa3M7CiAgaW50IGhibGtzOwogIGludCBoYmxraGQ7CiAgaW50IHVzbWJsa3M7CiAgaW50IGZz
bWJsa3M7CiAgaW50IHVvcmRibGtzOwogIGludCBmb3JkYmxrczsKICBpbnQga2VlcGNvc3Q7Cn07
CgoKCmV4dGVybiB2b2lkICogbWFsbG9jIChzaXplX3QpOwpleHRlcm4gdm9pZCAqIF9tYWxsb2Nf
ciAoc3RydWN0IF9yZWVudCAqLCBzaXplX3QpOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqKTsK
ZXh0ZXJuIHZvaWQgX2ZyZWVfciAoc3RydWN0IF9yZWVudCAqLCB2b2lkICopOwoKZXh0ZXJuIHZv
aWQgKiByZWFsbG9jICh2b2lkICosIHNpemVfdCk7CmV4dGVybiB2b2lkICogX3JlYWxsb2NfciAo
c3RydWN0IF9yZWVudCAqLCB2b2lkICosIHNpemVfdCk7CgpleHRlcm4gdm9pZCAqIGNhbGxvYyAo
c2l6ZV90LCBzaXplX3QpOwpleHRlcm4gdm9pZCAqIF9jYWxsb2NfciAoc3RydWN0IF9yZWVudCAq
LCBzaXplX3QsIHNpemVfdCk7CgpleHRlcm4gdm9pZCAqIG1lbWFsaWduIChzaXplX3QsIHNpemVf
dCk7CmV4dGVybiB2b2lkICogX21lbWFsaWduX3IgKHN0cnVjdCBfcmVlbnQgKiwgc2l6ZV90LCBz
aXplX3QpOwoKZXh0ZXJuIHN0cnVjdCBtYWxsaW5mbyBtYWxsaW5mbyAodm9pZCk7CmV4dGVybiBz
dHJ1Y3QgbWFsbGluZm8gX21hbGxpbmZvX3IgKHN0cnVjdCBfcmVlbnQgKik7CgpleHRlcm4gdm9p
ZCBtYWxsb2Nfc3RhdHMgKHZvaWQpOwpleHRlcm4gdm9pZCBfbWFsbG9jX3N0YXRzX3IgKHN0cnVj
dCBfcmVlbnQgKik7CgpleHRlcm4gaW50IG1hbGxvcHQgKGludCwgaW50KTsKZXh0ZXJuIGludCBf
bWFsbG9wdF9yIChzdHJ1Y3QgX3JlZW50ICosIGludCwgaW50KTsKCmV4dGVybiBzaXplX3QgbWFs
bG9jX3VzYWJsZV9zaXplICh2b2lkICopOwpleHRlcm4gc2l6ZV90IF9tYWxsb2NfdXNhYmxlX3Np
emVfciAoc3RydWN0IF9yZWVudCAqLCB2b2lkICopOwoKCgoKZXh0ZXJuIHZvaWQgKiB2YWxsb2Mg
KHNpemVfdCk7CmV4dGVybiB2b2lkICogX3ZhbGxvY19yIChzdHJ1Y3QgX3JlZW50ICosIHNpemVf
dCk7CgpleHRlcm4gdm9pZCAqIHB2YWxsb2MgKHNpemVfdCk7CmV4dGVybiB2b2lkICogX3B2YWxs
b2NfciAoc3RydWN0IF9yZWVudCAqLCBzaXplX3QpOwoKZXh0ZXJuIGludCBtYWxsb2NfdHJpbSAo
c2l6ZV90KTsKZXh0ZXJuIGludCBfbWFsbG9jX3RyaW1fciAoc3RydWN0IF9yZWVudCAqLCBzaXpl
X3QpOwoKCgpleHRlcm4gdm9pZCBtc3RhdHMgKGNoYXIgKik7CmV4dGVybiB2b2lkIF9tc3RhdHNf
ciAoc3RydWN0IF9yZWVudCAqLCBjaGFyICopOwojIDM3NyAiLi4vLi4vZ2NjL2djYy9zeXN0ZW0u
aCIgMgojIDU0NiAiLi4vLi4vZ2NjL2djYy9zeXN0ZW0uaCIKIyAxICIuLi8uLi9nY2MvaW5jbHVk
ZS9saWJpYmVydHkuaCIgMQojIDIyICIuLi8uLi9nY2MvaW5jbHVkZS9saWJpYmVydHkuaCIKZXh0
ZXJuIGNoYXIgKipidWlsZGFyZ3YgKGNoYXIgKikgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18p
KTsKCgoKZXh0ZXJuIHZvaWQgZnJlZWFyZ3YgKGNoYXIgKiopOwoKCgoKZXh0ZXJuIGNoYXIgKipk
dXBhcmd2IChjaGFyICoqKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDQ1ICIuLi8u
Li9nY2MvaW5jbHVkZS9saWJpYmVydHkuaCIKZXh0ZXJuIGNoYXIgKmJhc2VuYW1lIChjb25zdCBj
aGFyICopOwojIDU1ICIuLi8uLi9nY2MvaW5jbHVkZS9saWJpYmVydHkuaCIKZXh0ZXJuIGNoYXIg
KmNvbmNhdCAoY29uc3QgY2hhciAqLCAuLi4pIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7
CgoKCmV4dGVybiBpbnQgZmRtYXRjaCAoaW50IGZkMSwgaW50IGZkMik7CgoKCgpleHRlcm4gY2hh
ciAqIGdldHB3ZCAodm9pZCk7CgoKCmV4dGVybiBsb25nIGdldF9ydW5fdGltZSAodm9pZCk7CgoK
CmV4dGVybiBjaGFyICpjaG9vc2VfdGVtcF9iYXNlICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoX19t
YWxsb2NfXykpOwoKCgpleHRlcm4gY2hhciAqbWFrZV90ZW1wX2ZpbGUgKGNvbnN0IGNoYXIgKikg
X19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKZXh0ZXJuIGNvbnN0IGNoYXIgKnNwYWNl
cyAoaW50IGNvdW50KTsKCgoKCmV4dGVybiBpbnQgZXJybm9fbWF4ICh2b2lkKTsKCgoKCmV4dGVy
biBjb25zdCBjaGFyICpzdHJlcnJubyAoaW50KTsKCgoKZXh0ZXJuIGludCBzdHJ0b2Vycm5vIChj
b25zdCBjaGFyICopOwoKCgpleHRlcm4gY2hhciAqeHN0cmVycm9yIChpbnQpOwoKCgoKZXh0ZXJu
IGludCBzaWdub19tYXggKHZvaWQpOwojIDExNSAiLi4vLi4vZ2NjL2luY2x1ZGUvbGliaWJlcnR5
LmgiCmV4dGVybiBjb25zdCBjaGFyICpzdHJzaWdubyAoaW50KTsKCgoKZXh0ZXJuIGludCBzdHJ0
b3NpZ25vIChjb25zdCBjaGFyICopOwoKCgpleHRlcm4gaW50IHhhdGV4aXQgKHZvaWQgKCpmbikg
KHZvaWQpKTsKCgoKZXh0ZXJuIHZvaWQgeGV4aXQgKGludCBzdGF0dXMpIF9fYXR0cmlidXRlX18g
KChfX25vcmV0dXJuX18pKTsKCgoKZXh0ZXJuIHZvaWQgeG1hbGxvY19zZXRfcHJvZ3JhbV9uYW1l
IChjb25zdCBjaGFyICopOwoKCgoKCgoKIyAxICJpbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxNDAg
Ii4uLy4uL2djYy9pbmNsdWRlL2xpYmliZXJ0eS5oIiAyCgoKCmV4dGVybiB2b2lkICogeG1hbGxv
YyAoc2l6ZV90KSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCmV4dGVybiB2b2lk
ICogeHJlYWxsb2MgKHZvaWQgKiwgc2l6ZV90KTsKCgoKCmV4dGVybiB2b2lkICogeGNhbGxvYyAo
c2l6ZV90LCBzaXplX3QpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCmV4dGVybiBj
aGFyICp4c3RyZHVwIChjb25zdCBjaGFyICopIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7
CgoKCmV4dGVybiB2b2lkICogeG1lbWR1cCAoY29uc3Qgdm9pZCAqLCBzaXplX3QsIHNpemVfdCkg
X19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgpleHRlcm4gY2hhciBfaGV4X3ZhbHVl
WzI1Nl07CmV4dGVybiB2b2lkIGhleF9pbml0ICh2b2lkKTsKIyAxODUgIi4uLy4uL2djYy9pbmNs
dWRlL2xpYmliZXJ0eS5oIgpleHRlcm4gaW50IHBleGVjdXRlIChjb25zdCBjaGFyICosIGNoYXIg
KiBjb25zdCAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgY2hhciAqKiwg
aW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCgoKZXh0ZXJuIGludCBwd2FpdCAoaW50LCBpbnQgKiwgaW50KTsKCgoK
CmV4dGVybiBpbnQgYXNwcmludGYgKGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgLi4uKSBfX2F0dHJp
YnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgoKCmV4dGVybiBpbnQg
dmFzcHJpbnRmIChjaGFyICoqLCBjb25zdCBjaGFyICosIHZhX2xpc3QpCiAgX19hdHRyaWJ1dGVf
XyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CiMgNTQ3ICIuLi8uLi9nY2MvZ2Nj
L3N5c3RlbS5oIiAyCiMgNTkwICIuLi8uLi9nY2MvZ2NjL3N5c3RlbS5oIgpleHRlcm4gdm9pZCAq
YWxsb2NhICh1bnNpZ25lZCBpbnQpOwojIDMxICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiAyCiMg
MSAiLi4vLi4vZ2NjL2djYy9pbnRsLmgiIDEKIyAyMCAiLi4vLi4vZ2NjL2djYy9pbnRsLmgiCiMg
MSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2xvY2FsZS5o
IiAzCnN0cnVjdCBsY29udgp7CiAgY2hhciAqZGVjaW1hbF9wb2ludDsKICBjaGFyICp0aG91c2Fu
ZHNfc2VwOwogIGNoYXIgKmdyb3VwaW5nOwogIGNoYXIgKmludF9jdXJyX3N5bWJvbDsKICBjaGFy
ICpjdXJyZW5jeV9zeW1ib2w7CiAgY2hhciAqbW9uX2RlY2ltYWxfcG9pbnQ7CiAgY2hhciAqbW9u
X3Rob3VzYW5kc19zZXA7CiAgY2hhciAqbW9uX2dyb3VwaW5nOwogIGNoYXIgKnBvc2l0aXZlX3Np
Z247CiAgY2hhciAqbmVnYXRpdmVfc2lnbjsKICBjaGFyIGludF9mcmFjX2RpZ2l0czsKICBjaGFy
IGZyYWNfZGlnaXRzOwogIGNoYXIgcF9jc19wcmVjZWRlczsKICBjaGFyIHBfc2VwX2J5X3NwYWNl
OwogIGNoYXIgbl9jc19wcmVjZWRlczsKICBjaGFyIG5fc2VwX2J5X3NwYWNlOwogIGNoYXIgcF9z
aWduX3Bvc247CiAgY2hhciBuX3NpZ25fcG9zbjsKfTsKCgpjaGFyICpfX2F0dHJpYnV0ZV9fKChf
X2NkZWNsX18pKSBzZXRsb2NhbGUgKGludCBjYXRlZ29yeSwgY29uc3QgY2hhciAqbG9jYWxlKTsK
c3RydWN0IGxjb252ICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBsb2NhbGVjb252ICh2b2lk
KTsKCgpzdHJ1Y3QgX3JlZW50OwpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfc2V0
bG9jYWxlX3IgKHN0cnVjdCBfcmVlbnQgKiwgaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpsb2Nh
bGUpOwpzdHJ1Y3QgbGNvbnYgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9sb2NhbGVjb252
X3IgKHN0cnVjdCBfcmVlbnQgKik7CiMgMjEgIi4uLy4uL2djYy9nY2MvaW50bC5oIiAyCiMgMzIg
Ii4uLy4uL2djYy9nY2MvYy1kZWNsLmMiIDIKIyAxICIuLi8uLi9nY2MvZ2NjL3RyZWUuaCIgMQoj
IDIyICIuLi8uLi9nY2MvZ2NjL3RyZWUuaCIKIyAxICIuLi8uLi9nY2MvZ2NjL21hY2htb2RlLmgi
IDEKIyAyOSAiLi4vLi4vZ2NjL2djYy9tYWNobW9kZS5oIgplbnVtIG1hY2hpbmVfbW9kZSB7CiMg
MSAiLi4vLi4vZ2NjL2djYy9tYWNobW9kZS5kZWYiIDEKIyA2NyAiLi4vLi4vZ2NjL2djYy9tYWNo
bW9kZS5kZWYiClZPSURtb2RlLAoKQkltb2RlLApRSW1vZGUsCkhJbW9kZSwKU0ltb2RlLApESW1v
ZGUsClRJbW9kZSwKT0ltb2RlLAoKCgoKUFFJbW9kZSwKUEhJbW9kZSwKUFNJbW9kZSwKUERJbW9k
ZSwKClFGbW9kZSwKSEZtb2RlLApUUUZtb2RlLApTRm1vZGUsCkRGbW9kZSwKWEZtb2RlLApURm1v
ZGUsCgoKUUNtb2RlLApIQ21vZGUsClNDbW9kZSwKRENtb2RlLApYQ21vZGUsClRDbW9kZSwKCkNR
SW1vZGUsCkNISW1vZGUsCkNTSW1vZGUsCkNESW1vZGUsCkNUSW1vZGUsCkNPSW1vZGUsCgoKCgpW
MlFJbW9kZSwKVjJISW1vZGUsClYyU0ltb2RlLApWMkRJbW9kZSwKClY0UUltb2RlLApWNEhJbW9k
ZSwKVjRTSW1vZGUsClY0REltb2RlLAoKVjhRSW1vZGUsClY4SEltb2RlLApWOFNJbW9kZSwKVjhE
SW1vZGUsCgpWMTZRSW1vZGUsCgpWMlNGbW9kZSwKVjJERm1vZGUsCgpWNFNGbW9kZSwKVjRERm1v
ZGUsCgpWOFNGbW9kZSwKVjhERm1vZGUsCgoKCkJMS21vZGUsCiMgMTQ4ICIuLi8uLi9nY2MvZ2Nj
L21hY2htb2RlLmRlZiIKQ0Ntb2RlLAoKCkNDR0Ntb2RlLCBDQ0dPQ21vZGUsIENDTk9tb2RlLCBD
Q1ptb2RlLCBDQ0ZQbW9kZSwgQ0NGUFVtb2RlLAojIDMxICIuLi8uLi9nY2MvZ2NjL21hY2htb2Rl
LmgiIDIKTUFYX01BQ0hJTkVfTU9ERSB9OwojIDQxICIuLi8uLi9nY2MvZ2NjL21hY2htb2RlLmgi
CmV4dGVybiBjb25zdCBjaGFyICogY29uc3QgbW9kZV9uYW1lW107CgoKZW51bSBtb2RlX2NsYXNz
IHsgTU9ERV9SQU5ET00sIE1PREVfSU5ULCBNT0RFX0ZMT0FULCBNT0RFX1BBUlRJQUxfSU5ULCBN
T0RFX0NDLAogICAgICAgICAgICAgICAgICBNT0RFX0NPTVBMRVhfSU5ULCBNT0RFX0NPTVBMRVhf
RkxPQVQsCiAgICAgICAgICAgICAgICAgIE1PREVfVkVDVE9SX0lOVCwgTU9ERV9WRUNUT1JfRkxP
QVQsCiAgICAgICAgICAgICAgICAgIE1BWF9NT0RFX0NMQVNTfTsKCgoKCmV4dGVybiBjb25zdCBl
bnVtIG1vZGVfY2xhc3MgbW9kZV9jbGFzc1tdOwojIDgwICIuLi8uLi9nY2MvZ2NjL21hY2htb2Rl
LmgiCmV4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgbW9kZV9zaXplW107CgoKCgpleHRlcm4gY29u
c3QgdW5zaWduZWQgaW50IG1vZGVfdW5pdF9zaXplW107CiMgOTYgIi4uLy4uL2djYy9nY2MvbWFj
aG1vZGUuaCIKZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCBtb2RlX2JpdHNpemVbXTsKCgoKCgoK
CmV4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgbW9kZV9tYXNrX2FycmF5W107CgoKCgoKCgpleHRl
cm4gY29uc3QgdW5zaWduZWQgY2hhciBtb2RlX3dpZGVyX21vZGVbXTsKCgoKCgoKZXh0ZXJuIGVu
dW0gbWFjaGluZV9tb2RlIG1vZGVfZm9yX3NpemUgKHVuc2lnbmVkIGludCwgZW51bSBtb2RlX2Ns
YXNzLCBpbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgoKCmV4dGVybiBlbnVtIG1hY2hpbmVfbW9kZSBzbWFs
bGVzdF9tb2RlX2Zvcl9zaXplCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2ln
bmVkIGludCwgZW51bSBtb2RlX2NsYXNzKTsKCgoKCgpleHRlcm4gZW51bSBtYWNoaW5lX21vZGUg
aW50X21vZGVfZm9yX21vZGUgKGVudW0gbWFjaGluZV9tb2RlKTsKCgoKZXh0ZXJuIGVudW0gbWFj
aGluZV9tb2RlIGdldF9iZXN0X21vZGUgKGludCwgaW50LCB1bnNpZ25lZCBpbnQsIGVudW0gbWFj
aGluZV9tb2RlLCBpbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKZXh0ZXJuIHVuc2lnbmVkIGdldF9t
b2RlX2FsaWdubWVudCAoZW51bSBtYWNoaW5lX21vZGUpOwoKCgoKCmV4dGVybiBjb25zdCBlbnVt
IG1hY2hpbmVfbW9kZSBjbGFzc19uYXJyb3dlc3RfbW9kZVtdOwoKCgoKCmV4dGVybiBlbnVtIG1h
Y2hpbmVfbW9kZSBieXRlX21vZGU7CmV4dGVybiBlbnVtIG1hY2hpbmVfbW9kZSB3b3JkX21vZGU7
CmV4dGVybiBlbnVtIG1hY2hpbmVfbW9kZSBwdHJfbW9kZTsKIyAyMyAiLi4vLi4vZ2NjL2djYy90
cmVlLmgiIDIKIyAxICIuLi8uLi9nY2MvZ2NjL3ZlcnNpb24uaCIgMQoKCmV4dGVybiBjb25zdCBj
aGFyICpjb25zdCB2ZXJzaW9uX3N0cmluZzsKIyAyNCAiLi4vLi4vZ2NjL2djYy90cmVlLmgiIDIK
CgpzdHJ1Y3QgcnR4X2RlZjsKCgoKCgoKZW51bSB0cmVlX2NvZGUgewojIDEgIi4uLy4uL2djYy9n
Y2MvdHJlZS5kZWYiIDEKIyA0NSAiLi4vLi4vZ2NjL2djYy90cmVlLmRlZiIKRVJST1JfTUFSSywK
CgoKCgpJREVOVElGSUVSX05PREUsCgoKCgpPUF9JREVOVElGSUVSLAoKCgoKCgpUUkVFX0xJU1Qs
CgoKVFJFRV9WRUMsCiMgODggIi4uLy4uL2djYy9nY2MvdHJlZS5kZWYiCkJMT0NLLAojIDEzMyAi
Li4vLi4vZ2NjL2djYy90cmVlLmRlZiIKVk9JRF9UWVBFLAojIDE0MyAiLi4vLi4vZ2NjL2djYy90
cmVlLmRlZiIKSU5URUdFUl9UWVBFLAoKCgpSRUFMX1RZUEUsCgoKCkNPTVBMRVhfVFlQRSwKCgoK
VkVDVE9SX1RZUEUsCiMgMTY4ICIuLi8uLi9nY2MvZ2NjL3RyZWUuZGVmIgpFTlVNRVJBTF9UWVBF
LAoKCgpCT09MRUFOX1RZUEUsCgoKCkNIQVJfVFlQRSwKCgoKUE9JTlRFUl9UWVBFLAoKCgoKCk9G
RlNFVF9UWVBFLAoKCgpSRUZFUkVOQ0VfVFlQRSwKCgoKCgoKTUVUSE9EX1RZUEUsCgoKRklMRV9U
WVBFLAojIDIxMyAiLi4vLi4vZ2NjL2djYy90cmVlLmRlZiIKQVJSQVlfVFlQRSwKCgoKCgpTRVRf
VFlQRSwKIyAyMjkgIi4uLy4uL2djYy9nY2MvdHJlZS5kZWYiClJFQ09SRF9UWVBFLAoKCgoKClVO
SU9OX1RZUEUsCgoKCgoKUVVBTF9VTklPTl9UWVBFLAoKCgoKCgoKRlVOQ1RJT05fVFlQRSwKCgoK
CgpMQU5HX1RZUEUsCiMgMjY2ICIuLi8uLi9nY2MvZ2NjL3RyZWUuZGVmIgpJTlRFR0VSX0NTVCwK
CgpSRUFMX0NTVCwKCgoKCkNPTVBMRVhfQ1NULAoKCgpTVFJJTkdfQ1NULAojIDMzNyAiLi4vLi4v
Z2NjL2djYy90cmVlLmRlZiIKRlVOQ1RJT05fREVDTCwKTEFCRUxfREVDTCwKQ09OU1RfREVDTCwK
VFlQRV9ERUNMLApWQVJfREVDTCwKUEFSTV9ERUNMLApSRVNVTFRfREVDTCwKRklFTERfREVDTCwK
CgoKTkFNRVNQQUNFX0RFQ0wsCgoKCgoKCkNPTVBPTkVOVF9SRUYsCiMgMzY0ICIuLi8uLi9nY2Mv
Z2NjL3RyZWUuZGVmIgpCSVRfRklFTERfUkVGLAoKCklORElSRUNUX1JFRiwKCgpCVUZGRVJfUkVG
LAoKCgpBUlJBWV9SRUYsCiMgMzk4ICIuLi8uLi9nY2MvZ2NjL3RyZWUuZGVmIgpDT05TVFJVQ1RP
UiwKIyA0MDggIi4uLy4uL2djYy9nY2MvdHJlZS5kZWYiCkNPTVBPVU5EX0VYUFIsCgoKTU9ESUZZ
X0VYUFIsCgoKCklOSVRfRVhQUiwKCgoKCgoKVEFSR0VUX0VYUFIsCgoKCgoKCgpDT05EX0VYUFIs
CiMgNDUzICIuLi8uLi9nY2MvZ2NjL3RyZWUuZGVmIgpCSU5EX0VYUFIsCgoKCgpDQUxMX0VYUFIs
CgoKCgpNRVRIT0RfQ0FMTF9FWFBSLAojIDQ3NyAiLi4vLi4vZ2NjL2djYy90cmVlLmRlZiIKV0lU
SF9DTEVBTlVQX0VYUFIsCiMgNDk0ICIuLi8uLi9nY2MvZ2NjL3RyZWUuZGVmIgpDTEVBTlVQX1BP
SU5UX0VYUFIsCiMgNTQzICIuLi8uLi9nY2MvZ2NjL3RyZWUuZGVmIgpQTEFDRUhPTERFUl9FWFBS
LAoKCgoKCldJVEhfUkVDT1JEX0VYUFIsCgoKUExVU19FWFBSLApNSU5VU19FWFBSLApNVUxUX0VY
UFIsCgoKVFJVTkNfRElWX0VYUFIsCgoKQ0VJTF9ESVZfRVhQUiwKCgpGTE9PUl9ESVZfRVhQUiwK
CgpST1VORF9ESVZfRVhQUiwKCgpUUlVOQ19NT0RfRVhQUiwKQ0VJTF9NT0RfRVhQUiwKRkxPT1Jf
TU9EX0VYUFIsClJPVU5EX01PRF9FWFBSLAoKClJESVZfRVhQUiwKCgoKRVhBQ1RfRElWX0VYUFIs
CgoKCgoKCkZJWF9UUlVOQ19FWFBSLApGSVhfQ0VJTF9FWFBSLApGSVhfRkxPT1JfRVhQUiwKRklY
X1JPVU5EX0VYUFIsCgoKRkxPQVRfRVhQUiwKCgoKRVhQT05fRVhQUiwKCgpORUdBVEVfRVhQUiwK
Ck1JTl9FWFBSLApNQVhfRVhQUiwKQUJTX0VYUFIsCkZGU19FWFBSLAoKCgoKCgpMU0hJRlRfRVhQ
UiwKUlNISUZUX0VYUFIsCkxST1RBVEVfRVhQUiwKUlJPVEFURV9FWFBSLAoKCkJJVF9JT1JfRVhQ
UiwKQklUX1hPUl9FWFBSLApCSVRfQU5EX0VYUFIsCkJJVF9BTkRUQ19FWFBSLApCSVRfTk9UX0VY
UFIsCgoKCgoKClRSVVRIX0FORElGX0VYUFIsClRSVVRIX09SSUZfRVhQUiwKVFJVVEhfQU5EX0VY
UFIsClRSVVRIX09SX0VYUFIsClRSVVRIX1hPUl9FWFBSLApUUlVUSF9OT1RfRVhQUiwKCgoKCgoK
CkxUX0VYUFIsCkxFX0VYUFIsCkdUX0VYUFIsCkdFX0VYUFIsCkVRX0VYUFIsCk5FX0VYUFIsCgoK
VU5PUkRFUkVEX0VYUFIsCk9SREVSRURfRVhQUiwKCgpVTkxUX0VYUFIsClVOTEVfRVhQUiwKVU5H
VF9FWFBSLApVTkdFX0VYUFIsClVORVFfRVhQUiwKCgpJTl9FWFBSLApTRVRfTEVfRVhQUiwKQ0FS
RF9FWFBSLApSQU5HRV9FWFBSLAoKCgoKQ09OVkVSVF9FWFBSLAoKCk5PUF9FWFBSLAoKCk5PTl9M
VkFMVUVfRVhQUiwKCgoKCgpTQVZFX0VYUFIsCiMgNjg5ICIuLi8uLi9nY2MvZ2NjL3RyZWUuZGVm
IgpVTlNBVkVfRVhQUiwKIyA2OTggIi4uLy4uL2djYy9nY2MvdHJlZS5kZWYiClJUTF9FWFBSLAoK
CgpBRERSX0VYUFIsCgoKUkVGRVJFTkNFX0VYUFIsCgoKCkVOVFJZX1ZBTFVFX0VYUFIsCgoKCkNP
TVBMRVhfRVhQUiwKCgpDT05KX0VYUFIsCgoKClJFQUxQQVJUX0VYUFIsCklNQUdQQVJUX0VYUFIs
CgoKCgpQUkVERUNSRU1FTlRfRVhQUiwKUFJFSU5DUkVNRU5UX0VYUFIsClBPU1RERUNSRU1FTlRf
RVhQUiwKUE9TVElOQ1JFTUVOVF9FWFBSLAoKClZBX0FSR19FWFBSLAoKCgoKCgpUUllfQ0FUQ0hf
RVhQUiwKIyA3NTMgIi4uLy4uL2djYy9nY2MvdHJlZS5kZWYiClRSWV9GSU5BTExZX0VYUFIsCgoK
CgoKCkdPVE9fU1VCUk9VVElORV9FWFBSLAoKCgoKClBPUERIQ19FWFBSLAoKCgoKUE9QRENDX0VY
UFIsCgoKCgoKCgpMQUJFTF9FWFBSLAoKCgpHT1RPX0VYUFIsCgoKCgoKClJFVFVSTl9FWFBSLAoK
CgpFWElUX0VYUFIsCgoKCgpMT09QX0VYUFIsCgoKCgpMQUJFTEVEX0JMT0NLX0VYUFIsCgoKCgpF
WElUX0JMT0NLX0VYUFIsCiMgODE4ICIuLi8uLi9nY2MvZ2NjL3RyZWUuZGVmIgpFWFBSX1dJVEhf
RklMRV9MT0NBVElPTiwKCgoKCgpTV0lUQ0hfRVhQUiwKIyAzNSAiLi4vLi4vZ2NjL2djYy90cmVl
LmgiIDIKCiAgTEFTVF9BTkRfVU5VU0VEX1RSRUVfQ09ERQoKfTsKIyA1MyAiLi4vLi4vZ2NjL2dj
Yy90cmVlLmgiCmV4dGVybiBjaGFyIHRyZWVfY29kZV90eXBlWzI1Nl07CiMgNjQgIi4uLy4uL2dj
Yy9nY2MvdHJlZS5oIgpleHRlcm4gaW50IHRyZWVfY29kZV9sZW5ndGhbMjU2XTsKCgoKCmV4dGVy
biBjb25zdCBjaGFyICp0cmVlX2NvZGVfbmFtZVsyNTZdOwoKCgplbnVtIGJ1aWx0X2luX2NsYXNz
CnsKICBOT1RfQlVJTFRfSU4gPSAwLAogIEJVSUxUX0lOX0ZST05URU5ELAogIEJVSUxUX0lOX01E
LAogIEJVSUxUX0lOX05PUk1BTAp9OwoKCmV4dGVybiBjb25zdCBjaGFyICpjb25zdCBidWlsdF9p
bl9jbGFzc19uYW1lc1s0XTsKCgoKCgplbnVtIGJ1aWx0X2luX2Z1bmN0aW9uCnsKIyAxICIuLi8u
Li9nY2MvZ2NjL2J1aWx0aW5zLmRlZiIgMQojIDIyICIuLi8uLi9nY2MvZ2NjL2J1aWx0aW5zLmRl
ZiIKQlVJTFRfSU5fQUxMT0NBLApCVUlMVF9JTl9BQlMsCkJVSUxUX0lOX0ZBQlMsCkJVSUxUX0lO
X0xBQlMsCkJVSUxUX0lOX0xMQUJTLApCVUlMVF9JTl9GRlMsCkJVSUxUX0lOX0RJViwKQlVJTFRf
SU5fTERJViwKQlVJTFRfSU5fRkZMT09SLApCVUlMVF9JTl9GQ0VJTCwKQlVJTFRfSU5fRk1PRCwK
QlVJTFRfSU5fRlJFTSwKQlVJTFRfSU5fTUVNQ1BZLApCVUlMVF9JTl9NRU1DTVAsCkJVSUxUX0lO
X01FTVNFVCwKQlVJTFRfSU5fQlpFUk8sCkJVSUxUX0lOX0JDTVAsCkJVSUxUX0lOX0lOREVYLApC
VUlMVF9JTl9SSU5ERVgsCkJVSUxUX0lOX1NUUkNQWSwKQlVJTFRfSU5fU1RSQ01QLApCVUlMVF9J
Tl9TVFJMRU4sCkJVSUxUX0lOX1NUUlNUUiwKQlVJTFRfSU5fU1RSUEJSSywKQlVJTFRfSU5fU1RS
Q0hSLApCVUlMVF9JTl9TVFJSQ0hSLApCVUlMVF9JTl9GU1FSVCwKQlVJTFRfSU5fU0lOLApCVUlM
VF9JTl9DT1MsCkJVSUxUX0lOX0dFVEVYUCwKQlVJTFRfSU5fR0VUTUFOLApCVUlMVF9JTl9TQVZF
UkVHUywKQlVJTFRfSU5fQ0xBU1NJRllfVFlQRSwKQlVJTFRfSU5fTkVYVF9BUkcsCkJVSUxUX0lO
X0FSR1NfSU5GTywKQlVJTFRfSU5fQ09OU1RBTlRfUCwKQlVJTFRfSU5fRlJBTUVfQUREUkVTUywK
QlVJTFRfSU5fUkVUVVJOX0FERFJFU1MsCkJVSUxUX0lOX0FHR1JFR0FURV9JTkNPTUlOR19BRERS
RVNTLApCVUlMVF9JTl9BUFBMWV9BUkdTLApCVUlMVF9JTl9BUFBMWSwKQlVJTFRfSU5fUkVUVVJO
LApCVUlMVF9JTl9TRVRKTVAsCkJVSUxUX0lOX0xPTkdKTVAsCkJVSUxUX0lOX1RSQVAsCgoKQlVJ
TFRfSU5fUFVUQ0hBUiwKQlVJTFRfSU5fUFVUUywKQlVJTFRfSU5fUFJJTlRGLApCVUlMVF9JTl9G
UFVUQywKQlVJTFRfSU5fRlBVVFMsCkJVSUxUX0lOX0ZXUklURSwKCgpCVUlMVF9JTl9JU0dSRUFU
RVIsCkJVSUxUX0lOX0lTR1JFQVRFUkVRVUFMLApCVUlMVF9JTl9JU0xFU1MsCkJVSUxUX0lOX0lT
TEVTU0VRVUFMLApCVUlMVF9JTl9JU0xFU1NHUkVBVEVSLApCVUlMVF9JTl9JU1VOT1JERVJFRCwK
CgpCVUlMVF9JTl9VTldJTkRfSU5JVCwKQlVJTFRfSU5fRFdBUkZfQ0ZBLApCVUlMVF9JTl9EV0FS
Rl9GUF9SRUdOVU0sCkJVSUxUX0lOX0lOSVRfRFdBUkZfUkVHX1NJWkVTLApCVUlMVF9JTl9GUk9C
X1JFVFVSTl9BRERSLApCVUlMVF9JTl9FWFRSQUNUX1JFVFVSTl9BRERSLApCVUlMVF9JTl9FSF9S
RVRVUk4sCgpCVUlMVF9JTl9WQVJBUkdTX1NUQVJULApCVUlMVF9JTl9TVERBUkdfU1RBUlQsCkJV
SUxUX0lOX1ZBX0VORCwKQlVJTFRfSU5fVkFfQ09QWSwKQlVJTFRfSU5fRVhQRUNULAoKCkJVSUxU
X0lOX05FVywKQlVJTFRfSU5fVkVDX05FVywKQlVJTFRfSU5fREVMRVRFLApCVUlMVF9JTl9WRUNf
REVMRVRFLAojIDkxICIuLi8uLi9nY2MvZ2NjL3RyZWUuaCIgMgoKCiAgRU5EX0JVSUxUSU5TCn07
CgoKCmV4dGVybiBjb25zdCBjaGFyICpjb25zdCBidWlsdF9pbl9uYW1lc1soaW50KSBFTkRfQlVJ
TFRJTlNdOwoKCmV4dGVybiB1bmlvbiB0cmVlX25vZGUgKmJ1aWx0X2luX2RlY2xzWyhpbnQpIEVO
RF9CVUlMVElOU107CiMgMTIxICIuLi8uLi9nY2MvZ2NjL3RyZWUuaCIKdHlwZWRlZiB1bmlvbiB0
cmVlX25vZGUgKnRyZWU7CgoKCgoKCgpzdHJ1Y3QgdHJlZV9jb21tb24KewogIHVuaW9uIHRyZWVf
bm9kZSAqY2hhaW47CiAgdW5pb24gdHJlZV9ub2RlICp0eXBlOwogIGVudW0gdHJlZV9jb2RlIGNv
ZGUgOiA4OwogIHVuc2lnbmVkIHNpZGVfZWZmZWN0c19mbGFnIDogMTsKICB1bnNpZ25lZCBjb25z
dGFudF9mbGFnIDogMTsKICB1bnNpZ25lZCBhZGRyZXNzYWJsZV9mbGFnIDogMTsKICB1bnNpZ25l
ZCB2b2xhdGlsZV9mbGFnIDogMTsKICB1bnNpZ25lZCByZWFkb25seV9mbGFnIDogMTsKICB1bnNp
Z25lZCB1bnNpZ25lZF9mbGFnIDogMTsKICB1bnNpZ25lZCBhc21fd3JpdHRlbl9mbGFnOiAxOwoK
ICB1bnNpZ25lZCB1c2VkX2ZsYWcgOiAxOwogIHVuc2lnbmVkIG5vdGhyb3dfZmxhZyA6IDE7CiAg
dW5zaWduZWQgc3RhdGljX2ZsYWcgOiAxOwogIHVuc2lnbmVkIHB1YmxpY19mbGFnIDogMTsKICB1
bnNpZ25lZCBwcml2YXRlX2ZsYWcgOiAxOwogIHVuc2lnbmVkIHByb3RlY3RlZF9mbGFnIDogMTsK
ICB1bnNpZ25lZCBib3VuZGVkX2ZsYWcgOiAxOwoKICB1bnNpZ25lZCBsYW5nX2ZsYWdfMCA6IDE7
CiAgdW5zaWduZWQgbGFuZ19mbGFnXzEgOiAxOwogIHVuc2lnbmVkIGxhbmdfZmxhZ18yIDogMTsK
ICB1bnNpZ25lZCBsYW5nX2ZsYWdfMyA6IDE7CiAgdW5zaWduZWQgbGFuZ19mbGFnXzQgOiAxOwog
IHVuc2lnbmVkIGxhbmdfZmxhZ181IDogMTsKICB1bnNpZ25lZCBsYW5nX2ZsYWdfNiA6IDE7CgoK
CiAgdW5zaWduZWQgZHVtbXkgOiAxOwp9OwojIDMwOSAiLi4vLi4vZ2NjL2djYy90cmVlLmgiCmV4
dGVybiB2b2lkIHRyZWVfY2hlY2tfZmFpbGVkIChjb25zdCB0cmVlLCBlbnVtIHRyZWVfY29kZSwg
Y29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKikKCiAgICBfX2F0dHJpYnV0ZV9fICgoX19u
b3JldHVybl9fKSk7CmV4dGVybiB2b2lkIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChjb25zdCB0
cmVlLCBpbnQsIGNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICopCgogICAgX19hdHRyaWJ1
dGVfXyAoKF9fbm9yZXR1cm5fXykpOwojIDMyNSAiLi4vLi4vZ2NjL2djYy90cmVlLmgiCiMgMSAi
dHJlZS1jaGVjay5oIiAxCiMgMzI2ICIuLi8uLi9nY2MvZ2NjL3RyZWUuaCIgMgojIDY2OSAiLi4v
Li4vZ2NjL2djYy90cmVlLmgiCnN0cnVjdCB0cmVlX2ludF9jc3QKewogIHN0cnVjdCB0cmVlX2Nv
bW1vbiBjb21tb247CiAgc3RydWN0IHJ0eF9kZWYgKnJ0bDsKCgoKCiAgc3RydWN0IHsKICAgIHVu
c2lnbmVkIGludCBsb3c7CiAgICBpbnQgaGlnaDsKICB9IGludF9jc3Q7Cn07CiMgNjk2ICIuLi8u
Li9nY2MvZ2NjL3RyZWUuaCIKIyAxICIuLi8uLi9nY2MvZ2NjL3JlYWwuaCIgMQojIDkyICIuLi8u
Li9nY2MvZ2NjL3JlYWwuaCIKdHlwZWRlZiBzdHJ1Y3QgewogIGludCByWygxMSArIHNpemVvZiAo
aW50KSkvKHNpemVvZiAoaW50KSldOwp9IHJlYWx2YWx1ZXR5cGU7CiMgMTI3ICIuLi8uLi9nY2Mv
Z2NjL3JlYWwuaCIKZXh0ZXJuIHVuc2lnbmVkIGludCBzaWduaWZpY2FuZF9zaXplIChlbnVtIG1h
Y2hpbmVfbW9kZSk7CiMgMTQwICIuLi8uLi9nY2MvZ2NjL3JlYWwuaCIKZXh0ZXJuIHZvaWQgZWFy
aXRoIChyZWFsdmFsdWV0eXBlICosIGludCwgcmVhbHZhbHVldHlwZSAqLCByZWFsdmFsdWV0eXBl
ICopCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4gcmVhbHZhbHVldHlwZSBldHJ1bmNpIChy
ZWFsdmFsdWV0eXBlKTsKZXh0ZXJuIHJlYWx2YWx1ZXR5cGUgZXRydW5jdWkgKHJlYWx2YWx1ZXR5
cGUpOwpleHRlcm4gcmVhbHZhbHVldHlwZSBlcmVhbF9hdG9mIChjb25zdCBjaGFyICosIGVudW0g
bWFjaGluZV9tb2RlKTsKZXh0ZXJuIHJlYWx2YWx1ZXR5cGUgZXJlYWxfbmVnYXRlIChyZWFsdmFs
dWV0eXBlKTsKZXh0ZXJuIGludCBlZml4aSAocmVhbHZhbHVldHlwZSk7CmV4dGVybiB1bnNpZ25l
ZCBpbnQgZWZpeHVpIChyZWFsdmFsdWV0eXBlKTsKZXh0ZXJuIHZvaWQgZXJlYWxfZnJvbV9pbnQg
KHJlYWx2YWx1ZXR5cGUgKiwgaW50LCBpbnQsIGVudW0gbWFjaGluZV9tb2RlKQoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJu
IHZvaWQgZXJlYWxfZnJvbV91aW50IChyZWFsdmFsdWV0eXBlICosIHVuc2lnbmVkIGludCwgdW5z
aWduZWQgaW50LCBlbnVtIG1hY2hpbmVfbW9kZSkKCgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4gdm9pZCBlcmVhbF90b19p
bnQgKGludCAqLCBpbnQgKiwgcmVhbHZhbHVldHlwZSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CmV4dGVybiByZWFsdmFsdWV0eXBlIGVy
ZWFsX2xkZXhwIChyZWFsdmFsdWV0eXBlLCBpbnQpOwoKZXh0ZXJuIHZvaWQgZXRhcnRkb3VibGUg
KHJlYWx2YWx1ZXR5cGUsIGxvbmcgKik7CmV4dGVybiB2b2lkIGV0YXJsZG91YmxlIChyZWFsdmFs
dWV0eXBlLCBsb25nICopOwpleHRlcm4gdm9pZCBldGFyZG91YmxlIChyZWFsdmFsdWV0eXBlLCBs
b25nICopOwpleHRlcm4gbG9uZyBldGFyc2luZ2xlIChyZWFsdmFsdWV0eXBlKTsKZXh0ZXJuIHZv
aWQgZXJlYWxfdG9fZGVjaW1hbCAocmVhbHZhbHVldHlwZSwgY2hhciAqKTsKZXh0ZXJuIGludCBl
cmVhbF9jbXAgKHJlYWx2YWx1ZXR5cGUsIHJlYWx2YWx1ZXR5cGUpOwpleHRlcm4gaW50IGVyZWFs
X2lzbmVnIChyZWFsdmFsdWV0eXBlKTsKZXh0ZXJuIHJlYWx2YWx1ZXR5cGUgZXJlYWxfdW50b19m
bG9hdCAobG9uZyk7CmV4dGVybiByZWFsdmFsdWV0eXBlIGVyZWFsX3VudG9fZG91YmxlIChsb25n
ICopOwpleHRlcm4gcmVhbHZhbHVldHlwZSBlcmVhbF9mcm9tX2Zsb2F0IChpbnQpOwpleHRlcm4g
cmVhbHZhbHVldHlwZSBlcmVhbF9mcm9tX2RvdWJsZSAoaW50ICopOwojIDE3OSAiLi4vLi4vZ2Nj
L2djYy9yZWFsLmgiCmV4dGVybiByZWFsdmFsdWV0eXBlIHJlYWxfdmFsdWVfdHJ1bmNhdGUgKGVu
dW0gbWFjaGluZV9tb2RlLCByZWFsdmFsdWV0eXBlKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDQwOSAi
Li4vLi4vZ2NjL2djYy9yZWFsLmgiCmV4dGVybiByZWFsdmFsdWV0eXBlIHJlYWxfdmFsdWVfdHJ1
bmNhdGUgKGVudW0gbWFjaGluZV9tb2RlLCByZWFsdmFsdWV0eXBlKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDQz
MyAiLi4vLi4vZ2NjL2djYy9yZWFsLmgiCmV4dGVybiBpbnQgdGFyZ2V0X2lzbmFuIChyZWFsdmFs
dWV0eXBlKTsKZXh0ZXJuIGludCB0YXJnZXRfaXNpbmYgKHJlYWx2YWx1ZXR5cGUpOwpleHRlcm4g
aW50IHRhcmdldF9uZWdhdGl2ZSAocmVhbHZhbHVldHlwZSk7CiMgNDQ0ICIuLi8uLi9nY2MvZ2Nj
L3JlYWwuaCIKZXh0ZXJuIHJlYWx2YWx1ZXR5cGUgZGNvbnN0MDsKZXh0ZXJuIHJlYWx2YWx1ZXR5
cGUgZGNvbnN0MTsKZXh0ZXJuIHJlYWx2YWx1ZXR5cGUgZGNvbnN0MjsKZXh0ZXJuIHJlYWx2YWx1
ZXR5cGUgZGNvbnN0bTE7CgoKCgp1bmlvbiByZWFsX2V4dHJhY3QKewogIHJlYWx2YWx1ZXR5cGUg
ZDsKICBpbnQgaVtzaXplb2YgKHJlYWx2YWx1ZXR5cGUpIC8gc2l6ZW9mIChpbnQpXTsKfTsKCgoK
CnVuaW9uIHRyZWVfbm9kZTsKcmVhbHZhbHVldHlwZSByZWFsX3ZhbHVlX2Zyb21faW50X2NzdCAo
dW5pb24gdHJlZV9ub2RlICosIHVuaW9uIHRyZWVfbm9kZSAqKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDQ3MyAi
Li4vLi4vZ2NjL2djYy9yZWFsLmgiCmV4dGVybiBzdHJ1Y3QgcnR4X2RlZiAqaW1tZWRfcmVhbF9j
b25zdF8xIChyZWFsdmFsdWV0eXBlLCBlbnVtIG1hY2hpbmVfbW9kZSkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiMgNDg1ICIuLi8uLi9nY2MvZ2NjL3JlYWwuaCIKZXh0ZXJuIGludCBleGFjdF9yZWFsX2lu
dmVyc2UgKGVudW0gbWFjaGluZV9tb2RlLCByZWFsdmFsdWV0eXBlICopOwpleHRlcm4gaW50IHRh
cmdldF9pc25hbiAocmVhbHZhbHVldHlwZSk7CmV4dGVybiBpbnQgdGFyZ2V0X2lzaW5mIChyZWFs
dmFsdWV0eXBlKTsKZXh0ZXJuIGludCB0YXJnZXRfbmVnYXRpdmUgKHJlYWx2YWx1ZXR5cGUpOwpl
eHRlcm4gdm9pZCBkZWJ1Z19yZWFsIChyZWFsdmFsdWV0eXBlKTsKCgpleHRlcm4gdm9pZCBhc3Nl
bWJsZV9yZWFsIChyZWFsdmFsdWV0eXBlLCBlbnVtIG1hY2hpbmVfbW9kZSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwpl
eHRlcm4gdm9pZCBkZWJ1Z19yZWFsIChyZWFsdmFsdWV0eXBlKTsKCgpleHRlcm4gdm9pZCBhc3Nl
bWJsZV9yZWFsIChyZWFsdmFsdWV0eXBlLCBlbnVtIG1hY2hpbmVfbW9kZSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoj
IDY5NyAiLi4vLi4vZ2NjL2djYy90cmVlLmgiIDIKCnN0cnVjdCB0cmVlX3JlYWxfY3N0CnsKICBz
dHJ1Y3QgdHJlZV9jb21tb24gY29tbW9uOwogIHN0cnVjdCBydHhfZGVmICpydGw7CgogIHJlYWx2
YWx1ZXR5cGUgcmVhbF9jc3Q7Cn07CgoKCgoKc3RydWN0IHRyZWVfc3RyaW5nCnsKICBzdHJ1Y3Qg
dHJlZV9jb21tb24gY29tbW9uOwogIHN0cnVjdCBydHhfZGVmICpydGw7CgogIGludCBsZW5ndGg7
CiAgY2hhciAqcG9pbnRlcjsKfTsKCgoKCgpzdHJ1Y3QgdHJlZV9jb21wbGV4CnsKICBzdHJ1Y3Qg
dHJlZV9jb21tb24gY29tbW9uOwogIHN0cnVjdCBydHhfZGVmICpydGw7CgogIHVuaW9uIHRyZWVf
bm9kZSAqcmVhbDsKICB1bmlvbiB0cmVlX25vZGUgKmltYWc7Cn07CgoKCgoKCnN0cnVjdCB0cmVl
X2lkZW50aWZpZXIKewogIHN0cnVjdCB0cmVlX2NvbW1vbiBjb21tb247CiAgaW50IGxlbmd0aDsK
ICBjb25zdCBjaGFyICpwb2ludGVyOwp9OwoKCgoKCnN0cnVjdCB0cmVlX2xpc3QKewogIHN0cnVj
dCB0cmVlX2NvbW1vbiBjb21tb247CiAgdW5pb24gdHJlZV9ub2RlICpwdXJwb3NlOwogIHVuaW9u
IHRyZWVfbm9kZSAqdmFsdWU7Cn07CgoKCgoKCnN0cnVjdCB0cmVlX3ZlYwp7CiAgc3RydWN0IHRy
ZWVfY29tbW9uIGNvbW1vbjsKICBpbnQgbGVuZ3RoOwogIHVuaW9uIHRyZWVfbm9kZSAqYVsxXTsK
fTsKIyA4MTMgIi4uLy4uL2djYy9nY2MvdHJlZS5oIgpzdHJ1Y3QgdHJlZV9leHAKewogIHN0cnVj
dCB0cmVlX2NvbW1vbiBjb21tb247CiAgaW50IGNvbXBsZXhpdHk7CiAgdW5pb24gdHJlZV9ub2Rl
ICpvcGVyYW5kc1sxXTsKfTsKIyA4MzkgIi4uLy4uL2djYy9nY2MvdHJlZS5oIgpzdHJ1Y3QgdHJl
ZV9ibG9jawp7CiAgc3RydWN0IHRyZWVfY29tbW9uIGNvbW1vbjsKCiAgdW5zaWduZWQgaGFuZGxl
cl9ibG9ja19mbGFnIDogMTsKICB1bnNpZ25lZCBhYnN0cmFjdF9mbGFnIDogMTsKICB1bnNpZ25l
ZCBibG9ja19udW0gOiAzMDsKCiAgdW5pb24gdHJlZV9ub2RlICp2YXJzOwogIHVuaW9uIHRyZWVf
bm9kZSAqc3ViYmxvY2tzOwogIHVuaW9uIHRyZWVfbm9kZSAqc3VwZXJjb250ZXh0OwogIHVuaW9u
IHRyZWVfbm9kZSAqYWJzdHJhY3Rfb3JpZ2luOwp9OwojIDExMDcgIi4uLy4uL2djYy9nY2MvdHJl
ZS5oIgpzdHJ1Y3QgdHJlZV90eXBlCnsKICBzdHJ1Y3QgdHJlZV9jb21tb24gY29tbW9uOwogIHVu
aW9uIHRyZWVfbm9kZSAqdmFsdWVzOwogIHVuaW9uIHRyZWVfbm9kZSAqc2l6ZTsKICB1bmlvbiB0
cmVlX25vZGUgKnNpemVfdW5pdDsKICB1bmlvbiB0cmVlX25vZGUgKmF0dHJpYnV0ZXM7CiAgdW5z
aWduZWQgaW50IHVpZDsKCiAgdW5zaWduZWQgaW50IHByZWNpc2lvbiA6IDk7CiAgZW51bSBtYWNo
aW5lX21vZGUgbW9kZSA6IDc7CgogIHVuc2lnbmVkIHN0cmluZ19mbGFnIDogMTsKICB1bnNpZ25l
ZCBub19mb3JjZV9ibGtfZmxhZyA6IDE7CiAgdW5zaWduZWQgbmVlZHNfY29uc3RydWN0aW5nX2Zs
YWcgOiAxOwogIHVuc2lnbmVkIHRyYW5zcGFyZW50X3VuaW9uX2ZsYWcgOiAxOwogIHVuc2lnbmVk
IHBhY2tlZF9mbGFnIDogMTsKICB1bnNpZ25lZCByZXN0cmljdF9mbGFnIDogMTsKICB1bnNpZ25l
ZCBwb2ludGVyX2RlcHRoIDogMjsKCiAgdW5zaWduZWQgbGFuZ19mbGFnXzAgOiAxOwogIHVuc2ln
bmVkIGxhbmdfZmxhZ18xIDogMTsKICB1bnNpZ25lZCBsYW5nX2ZsYWdfMiA6IDE7CiAgdW5zaWdu
ZWQgbGFuZ19mbGFnXzMgOiAxOwogIHVuc2lnbmVkIGxhbmdfZmxhZ180IDogMTsKICB1bnNpZ25l
ZCBsYW5nX2ZsYWdfNSA6IDE7CiAgdW5zaWduZWQgbGFuZ19mbGFnXzYgOiAxOwogIHVuc2lnbmVk
IHVzZXJfYWxpZ24gOiAxOwoKICB1bnNpZ25lZCBpbnQgYWxpZ247CiAgdW5pb24gdHJlZV9ub2Rl
ICpwb2ludGVyX3RvOwogIHVuaW9uIHRyZWVfbm9kZSAqcmVmZXJlbmNlX3RvOwogIHVuaW9uIHtp
bnQgYWRkcmVzczsgY2hhciAqcG9pbnRlcjsgfSBzeW10YWI7CiAgdW5pb24gdHJlZV9ub2RlICpu
YW1lOwogIHVuaW9uIHRyZWVfbm9kZSAqbWludmFsOwogIHVuaW9uIHRyZWVfbm9kZSAqbWF4dmFs
OwogIHVuaW9uIHRyZWVfbm9kZSAqbmV4dF92YXJpYW50OwogIHVuaW9uIHRyZWVfbm9kZSAqbWFp
bl92YXJpYW50OwogIHVuaW9uIHRyZWVfbm9kZSAqYmluZm87CiAgdW5pb24gdHJlZV9ub2RlICpu
b25jb3BpZWRfcGFydHM7CiAgdW5pb24gdHJlZV9ub2RlICpjb250ZXh0OwogIGludCBhbGlhc19z
ZXQ7CgogIHN0cnVjdCBsYW5nX3R5cGUgKmxhbmdfc3BlY2lmaWM7Cn07CiMgMTU4OSAiLi4vLi4v
Z2NjL2djYy90cmVlLmgiCnN0cnVjdCB0cmVlX2RlY2wKewogIHN0cnVjdCB0cmVlX2NvbW1vbiBj
b21tb247CiAgY29uc3QgY2hhciAqZmlsZW5hbWU7CiAgaW50IGxpbmVudW07CiAgdW5zaWduZWQg
aW50IHVpZDsKICB1bmlvbiB0cmVlX25vZGUgKnNpemU7CiAgZW51bSBtYWNoaW5lX21vZGUgbW9k
ZSA6IDg7CgogIHVuc2lnbmVkIGV4dGVybmFsX2ZsYWcgOiAxOwogIHVuc2lnbmVkIG5vbmxvY2Fs
X2ZsYWcgOiAxOwogIHVuc2lnbmVkIHJlZ2RlY2xfZmxhZyA6IDE7CiAgdW5zaWduZWQgaW5saW5l
X2ZsYWcgOiAxOwogIHVuc2lnbmVkIGJpdF9maWVsZF9mbGFnIDogMTsKICB1bnNpZ25lZCB2aXJ0
dWFsX2ZsYWcgOiAxOwogIHVuc2lnbmVkIGlnbm9yZWRfZmxhZyA6IDE7CiAgdW5zaWduZWQgYWJz
dHJhY3RfZmxhZyA6IDE7CgogIHVuc2lnbmVkIGluX3N5c3RlbV9oZWFkZXJfZmxhZyA6IDE7CiAg
dW5zaWduZWQgY29tbW9uX2ZsYWcgOiAxOwogIHVuc2lnbmVkIGRlZmVyX291dHB1dCA6IDE7CiAg
dW5zaWduZWQgdHJhbnNwYXJlbnRfdW5pb24gOiAxOwogIHVuc2lnbmVkIHN0YXRpY19jdG9yX2Zs
YWcgOiAxOwogIHVuc2lnbmVkIHN0YXRpY19kdG9yX2ZsYWcgOiAxOwogIHVuc2lnbmVkIGFydGlm
aWNpYWxfZmxhZyA6IDE7CiAgdW5zaWduZWQgd2Vha19mbGFnIDogMTsKCiAgdW5zaWduZWQgbm9u
X2FkZHJfY29uc3RfcCA6IDE7CiAgdW5zaWduZWQgbm9faW5zdHJ1bWVudF9mdW5jdGlvbl9lbnRy
eV9leGl0IDogMTsKICB1bnNpZ25lZCBub19jaGVja19tZW1vcnlfdXNhZ2UgOiAxOwogIHVuc2ln
bmVkIGNvbWRhdF9mbGFnIDogMTsKICB1bnNpZ25lZCBtYWxsb2NfZmxhZyA6IDE7CiAgdW5zaWdu
ZWQgbm9fbGltaXRfc3RhY2sgOiAxOwogIGVudW0gYnVpbHRfaW5fY2xhc3MgYnVpbHRfaW5fY2xh
c3MgOiAyOwoKICB1bnNpZ25lZCBwdXJlX2ZsYWcgOiAxOwogIHVuc2lnbmVkIHBvaW50ZXJfZGVw
dGggOiAyOwogIHVuc2lnbmVkIG5vbl9hZGRyZXNzYWJsZSA6IDE7CiAgdW5zaWduZWQgdXNlcl9h
bGlnbiA6IDE7CgoKICB1bnNpZ25lZCBsYW5nX2ZsYWdfMCA6IDE7CiAgdW5zaWduZWQgbGFuZ19m
bGFnXzEgOiAxOwogIHVuc2lnbmVkIGxhbmdfZmxhZ18yIDogMTsKICB1bnNpZ25lZCBsYW5nX2Zs
YWdfMyA6IDE7CiAgdW5zaWduZWQgbGFuZ19mbGFnXzQgOiAxOwogIHVuc2lnbmVkIGxhbmdfZmxh
Z181IDogMTsKICB1bnNpZ25lZCBsYW5nX2ZsYWdfNiA6IDE7CiAgdW5zaWduZWQgbGFuZ19mbGFn
XzcgOiAxOwoKCgoKICB1bmlvbiB7CiAgICBpbnQgaTsKICAgIGVudW0gYnVpbHRfaW5fZnVuY3Rp
b24gZjsKICAgIHN0cnVjdCB7dW5zaWduZWQgaW50IGFsaWduIDogMjQ7IHVuc2lnbmVkIGludCBv
ZmZfYWxpZ24gOiA4O30gYTsKICB9IHUxOwoKICB1bmlvbiB0cmVlX25vZGUgKnNpemVfdW5pdDsK
ICB1bmlvbiB0cmVlX25vZGUgKm5hbWU7CiAgdW5pb24gdHJlZV9ub2RlICpjb250ZXh0OwogIHVu
aW9uIHRyZWVfbm9kZSAqYXJndW1lbnRzOwogIHVuaW9uIHRyZWVfbm9kZSAqcmVzdWx0OwogIHVu
aW9uIHRyZWVfbm9kZSAqaW5pdGlhbDsKICB1bmlvbiB0cmVlX25vZGUgKmFic3RyYWN0X29yaWdp
bjsKICB1bmlvbiB0cmVlX25vZGUgKmFzc2VtYmxlcl9uYW1lOwogIHVuaW9uIHRyZWVfbm9kZSAq
c2VjdGlvbl9uYW1lOwogIHVuaW9uIHRyZWVfbm9kZSAqbWFjaGluZV9hdHRyaWJ1dGVzOwogIHN0
cnVjdCBydHhfZGVmICpydGw7CiAgc3RydWN0IHJ0eF9kZWYgKmxpdmVfcmFuZ2VfcnRsOwoKCgoK
CgogIHVuaW9uIHsKICAgIHN0cnVjdCBmdW5jdGlvbiAqZjsKICAgIHN0cnVjdCBydHhfZGVmICpy
OwogICAgdW5pb24gdHJlZV9ub2RlICp0OwogICAgaW50IGk7CiAgfSB1MjsKCiAgdW5pb24gdHJl
ZV9ub2RlICp2aW5kZXg7CiAgaW50IHBvaW50ZXJfYWxpYXNfc2V0OwoKICBzdHJ1Y3QgbGFuZ19k
ZWNsICpsYW5nX3NwZWNpZmljOwp9OwoKCgoKCnVuaW9uIHRyZWVfbm9kZQp7CiAgc3RydWN0IHRy
ZWVfY29tbW9uIGNvbW1vbjsKICBzdHJ1Y3QgdHJlZV9pbnRfY3N0IGludF9jc3Q7CiAgc3RydWN0
IHRyZWVfcmVhbF9jc3QgcmVhbF9jc3Q7CiAgc3RydWN0IHRyZWVfc3RyaW5nIHN0cmluZzsKICBz
dHJ1Y3QgdHJlZV9jb21wbGV4IGNvbXBsZXg7CiAgc3RydWN0IHRyZWVfaWRlbnRpZmllciBpZGVu
dGlmaWVyOwogIHN0cnVjdCB0cmVlX2RlY2wgZGVjbDsKICBzdHJ1Y3QgdHJlZV90eXBlIHR5cGU7
CiAgc3RydWN0IHRyZWVfbGlzdCBsaXN0OwogIHN0cnVjdCB0cmVlX3ZlYyB2ZWM7CiAgc3RydWN0
IHRyZWVfZXhwIGV4cDsKICBzdHJ1Y3QgdHJlZV9ibG9jayBibG9jazsKIH07CgoKCmVudW0gdHJl
ZV9pbmRleAp7CiAgVElfRVJST1JfTUFSSywKICBUSV9JTlRRSV9UWVBFLAogIFRJX0lOVEhJX1RZ
UEUsCiAgVElfSU5UU0lfVFlQRSwKICBUSV9JTlRESV9UWVBFLAogIFRJX0lOVFRJX1RZUEUsCgog
IFRJX1VJTlRRSV9UWVBFLAogIFRJX1VJTlRISV9UWVBFLAogIFRJX1VJTlRTSV9UWVBFLAogIFRJ
X1VJTlRESV9UWVBFLAogIFRJX1VJTlRUSV9UWVBFLAoKICBUSV9JTlRFR0VSX1pFUk8sCiAgVElf
SU5URUdFUl9PTkUsCiAgVElfTlVMTF9QT0lOVEVSLAoKICBUSV9TSVpFX1pFUk8sCiAgVElfU0la
RV9PTkUsCgogIFRJX0JJVFNJWkVfWkVSTywKICBUSV9CSVRTSVpFX09ORSwKICBUSV9CSVRTSVpF
X1VOSVQsCgogIFRJX0NPTVBMRVhfSU5URUdFUl9UWVBFLAogIFRJX0NPTVBMRVhfRkxPQVRfVFlQ
RSwKICBUSV9DT01QTEVYX0RPVUJMRV9UWVBFLAogIFRJX0NPTVBMRVhfTE9OR19ET1VCTEVfVFlQ
RSwKCiAgVElfRkxPQVRfVFlQRSwKICBUSV9ET1VCTEVfVFlQRSwKICBUSV9MT05HX0RPVUJMRV9U
WVBFLAoKICBUSV9WT0lEX1RZUEUsCiAgVElfUFRSX1RZUEUsCiAgVElfQ09OU1RfUFRSX1RZUEUs
CiAgVElfUFRSRElGRl9UWVBFLAogIFRJX1ZBX0xJU1RfVFlQRSwKCiAgVElfVjRTRl9UWVBFLAog
IFRJX1Y0U0lfVFlQRSwKICBUSV9WOFFJX1RZUEUsCiAgVElfVjRISV9UWVBFLAogIFRJX1YyU0lf
VFlQRSwKCiAgVElfTUFJTl9JREVOVElGSUVSLAoKICBUSV9NQVgKfTsKCmV4dGVybiB0cmVlIGds
b2JhbF90cmVlc1tUSV9NQVhdOwojIDE4MDcgIi4uLy4uL2djYy9nY2MvdHJlZS5oIgplbnVtIGlu
dGVnZXJfdHlwZV9raW5kCnsKICBpdGtfY2hhciwKICBpdGtfc2lnbmVkX2NoYXIsCiAgaXRrX3Vu
c2lnbmVkX2NoYXIsCiAgaXRrX3Nob3J0LAogIGl0a191bnNpZ25lZF9zaG9ydCwKICBpdGtfaW50
LAogIGl0a191bnNpZ25lZF9pbnQsCiAgaXRrX2xvbmcsCiAgaXRrX3Vuc2lnbmVkX2xvbmcsCiAg
aXRrX2xvbmdfbG9uZywKICBpdGtfdW5zaWduZWRfbG9uZ19sb25nLAogIGl0a19ub25lCn07Cgp0
eXBlZGVmIGVudW0gaW50ZWdlcl90eXBlX2tpbmQgaW50ZWdlcl90eXBlX2tpbmQ7CgoKCmV4dGVy
biB0cmVlIGludGVnZXJfdHlwZXNbaXRrX25vbmVdOwojIDE4NTIgIi4uLy4uL2djYy9nY2MvdHJl
ZS5oIgpleHRlcm4gaW50IGV4YWN0X2xvZzJfd2lkZSAodW5zaWduZWQgaW50KTsKZXh0ZXJuIGlu
dCBmbG9vcl9sb2cyX3dpZGUgKHVuc2lnbmVkIGludCk7CgpleHRlcm4gY2hhciAqcGVybWFsbG9j
IChpbnQpOwpleHRlcm4gY2hhciAqZXhwcmFsbG9jIChpbnQpOwoKCgoKZXh0ZXJuIHNpemVfdCB0
cmVlX3NpemUgKHRyZWUpOwoKCgoKCmV4dGVybiB0cmVlIG1ha2Vfbm9kZSAoZW51bSB0cmVlX2Nv
ZGUpOwpleHRlcm4gdHJlZSBtYWtlX2xhbmdfdHlwZSAoZW51bSB0cmVlX2NvZGUpOwpleHRlcm4g
dHJlZSAoKm1ha2VfbGFuZ190eXBlX2ZuKSAoZW51bSB0cmVlX2NvZGUpOwoKCgoKCmV4dGVybiB0
cmVlIGNvcHlfbm9kZSAodHJlZSk7CgoKCmV4dGVybiB0cmVlIGNvcHlfbGlzdCAodHJlZSk7CgoK
CmV4dGVybiB0cmVlIG1ha2VfdHJlZV92ZWMgKGludCk7CgoKCgpleHRlcm4gdHJlZSBnZXRfaWRl
bnRpZmllciAoY29uc3QgY2hhciAqKTsKCgoKCgpleHRlcm4gdHJlZSBtYXliZV9nZXRfaWRlbnRp
ZmllciAoY29uc3QgY2hhciAqKTsKCgoKCgoKZXh0ZXJuIHRyZWUgYnVpbGQgKGVudW0gdHJlZV9j
b2RlLCB0cmVlLCAuLi4pOwpleHRlcm4gdHJlZSBidWlsZF9udCAoZW51bSB0cmVlX2NvZGUsIC4u
Lik7CmV4dGVybiB0cmVlIGJ1aWxkX3BhcnNlX25vZGUgKGVudW0gdHJlZV9jb2RlLCAuLi4pOwoK
ZXh0ZXJuIHRyZWUgYnVpbGRfaW50XzJfd2lkZSAodW5zaWduZWQgaW50LCBpbnQpOwpleHRlcm4g
dHJlZSBidWlsZF9yZWFsICh0cmVlLCByZWFsdmFsdWV0eXBlKTsKZXh0ZXJuIHRyZWUgYnVpbGRf
cmVhbF9mcm9tX2ludF9jc3QgKHRyZWUsIHRyZWUpOwpleHRlcm4gdHJlZSBidWlsZF9jb21wbGV4
ICh0cmVlLCB0cmVlLCB0cmVlKTsKZXh0ZXJuIHRyZWUgYnVpbGRfc3RyaW5nIChpbnQsIGNvbnN0
IGNoYXIgKik7CmV4dGVybiB0cmVlIGJ1aWxkMSAoZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUp
OwpleHRlcm4gdHJlZSBidWlsZF90cmVlX2xpc3QgKHRyZWUsIHRyZWUpOwpleHRlcm4gdHJlZSBi
dWlsZF9kZWNsIChlbnVtIHRyZWVfY29kZSwgdHJlZSwgdHJlZSk7CmV4dGVybiB0cmVlIGJ1aWxk
X2Jsb2NrICh0cmVlLCB0cmVlLCB0cmVlLCB0cmVlLCB0cmVlKTsKZXh0ZXJuIHRyZWUgYnVpbGRf
ZXhwcl93ZmwgKHRyZWUsIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQpOwoKCgpleHRlcm4gdHJlZSBt
YWtlX3NpZ25lZF90eXBlIChpbnQpOwpleHRlcm4gdHJlZSBtYWtlX3Vuc2lnbmVkX3R5cGUgKGlu
dCk7CmV4dGVybiB2b2lkIGluaXRpYWxpemVfc2l6ZXR5cGVzICh2b2lkKTsKZXh0ZXJuIHZvaWQg
c2V0X3NpemV0eXBlICh0cmVlKTsKZXh0ZXJuIHRyZWUgc2lnbmVkX29yX3Vuc2lnbmVkX3R5cGUg
KGludCwgdHJlZSk7CmV4dGVybiB2b2lkIGZpeHVwX3Vuc2lnbmVkX3R5cGUgKHRyZWUpOwpleHRl
cm4gdHJlZSBidWlsZF9wb2ludGVyX3R5cGUgKHRyZWUpOwpleHRlcm4gdHJlZSBidWlsZF9yZWZl
cmVuY2VfdHlwZSAodHJlZSk7CmV4dGVybiB0cmVlIGJ1aWxkX3R5cGVfbm9fcXVhbHMgKHRyZWUp
OwpleHRlcm4gdHJlZSBidWlsZF9pbmRleF90eXBlICh0cmVlKTsKZXh0ZXJuIHRyZWUgYnVpbGRf
aW5kZXhfMl90eXBlICh0cmVlLCB0cmVlKTsKZXh0ZXJuIHRyZWUgYnVpbGRfYXJyYXlfdHlwZSAo
dHJlZSwgdHJlZSk7CmV4dGVybiB0cmVlIGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKHRyZWUsIHRyZWUp
OwpleHRlcm4gdHJlZSBidWlsZF9tZXRob2RfdHlwZSAodHJlZSwgdHJlZSk7CmV4dGVybiB0cmVl
IGJ1aWxkX29mZnNldF90eXBlICh0cmVlLCB0cmVlKTsKZXh0ZXJuIHRyZWUgYnVpbGRfY29tcGxl
eF90eXBlICh0cmVlKTsKZXh0ZXJuIHRyZWUgYXJyYXlfdHlwZV9uZWx0cyAodHJlZSk7CgpleHRl
cm4gdHJlZSB2YWx1ZV9tZW1iZXIgKHRyZWUsIHRyZWUpOwpleHRlcm4gdHJlZSBwdXJwb3NlX21l
bWJlciAodHJlZSwgdHJlZSk7CmV4dGVybiB0cmVlIGJpbmZvX21lbWJlciAodHJlZSwgdHJlZSk7
CmV4dGVybiB1bnNpZ25lZCBpbnQgYXR0cmlidXRlX2hhc2hfbGlzdCAodHJlZSk7CmV4dGVybiBp
bnQgYXR0cmlidXRlX2xpc3RfZXF1YWwgKHRyZWUsIHRyZWUpOwpleHRlcm4gaW50IGF0dHJpYnV0
ZV9saXN0X2NvbnRhaW5lZCAodHJlZSwgdHJlZSk7CmV4dGVybiBpbnQgdHJlZV9pbnRfY3N0X2Vx
dWFsICh0cmVlLCB0cmVlKTsKZXh0ZXJuIGludCB0cmVlX2ludF9jc3RfbHQgKHRyZWUsIHRyZWUp
OwpleHRlcm4gaW50IHRyZWVfaW50X2NzdF9jb21wYXJlICh0cmVlLCB0cmVlKTsKZXh0ZXJuIGlu
dCBob3N0X2ludGVnZXJwICh0cmVlLCBpbnQpOwpleHRlcm4gaW50IHRyZWVfbG93X2NzdCAodHJl
ZSwgaW50KTsKZXh0ZXJuIGludCB0cmVlX2ludF9jc3RfbXNiICh0cmVlKTsKZXh0ZXJuIGludCB0
cmVlX2ludF9jc3Rfc2duICh0cmVlKTsKZXh0ZXJuIGludCB0cmVlX2V4cHJfbm9ubmVnYXRpdmVf
cCAodHJlZSk7CmV4dGVybiBpbnQgcnRsX2V4cHJfbm9ubmVnYXRpdmVfcCAoc3RydWN0IHJ0eF9k
ZWYgKik7CmV4dGVybiBpbnQgaW5kZXhfdHlwZV9lcXVhbCAodHJlZSwgdHJlZSk7CmV4dGVybiB0
cmVlIGdldF9pbm5lcl9hcnJheV90eXBlICh0cmVlKTsKCgoKCgpleHRlcm4gdHJlZSBtYWtlX3Ry
ZWUgKHRyZWUsIHN0cnVjdCBydHhfZGVmICopOwoKCgoKCgoKZXh0ZXJuIHRyZWUgYnVpbGRfdHlw
ZV9hdHRyaWJ1dGVfdmFyaWFudCAodHJlZSwgdHJlZSk7CmV4dGVybiB0cmVlIGJ1aWxkX2RlY2xf
YXR0cmlidXRlX3ZhcmlhbnQgKHRyZWUsIHRyZWUpOwoKZXh0ZXJuIHRyZWUgbWVyZ2VfbWFjaGlu
ZV9kZWNsX2F0dHJpYnV0ZXMgKHRyZWUsIHRyZWUpOwpleHRlcm4gdHJlZSBtZXJnZV9tYWNoaW5l
X3R5cGVfYXR0cmlidXRlcyAodHJlZSwgdHJlZSk7CgoKCmV4dGVybiB2b2lkIHNwbGl0X3NwZWNz
X2F0dHJzICh0cmVlLCB0cmVlICosIHRyZWUgKik7CgoKCmV4dGVybiB0cmVlIHN0cmlwX2F0dHJz
ICh0cmVlKTsKCgoKZXh0ZXJuIGludCB2YWxpZF9tYWNoaW5lX2F0dHJpYnV0ZSAodHJlZSwgdHJl
ZSwgdHJlZSwgdHJlZSk7CgoKCgpleHRlcm4gaW50IGlzX2F0dHJpYnV0ZV9wIChjb25zdCBjaGFy
ICosIHRyZWUpOwoKCgoKZXh0ZXJuIHRyZWUgbG9va3VwX2F0dHJpYnV0ZSAoY29uc3QgY2hhciAq
LCB0cmVlKTsKCgoKZXh0ZXJuIHRyZWUgbWVyZ2VfYXR0cmlidXRlcyAodHJlZSwgdHJlZSk7CiMg
MjAwNSAiLi4vLi4vZ2NjL2djYy90cmVlLmgiCmV4dGVybiB0cmVlIGJ1aWxkX3F1YWxpZmllZF90
eXBlICh0cmVlLCBpbnQpOwojIDIwMTkgIi4uLy4uL2djYy9nY2MvdHJlZS5oIgpleHRlcm4gdHJl
ZSBidWlsZF90eXBlX2NvcHkgKHRyZWUpOwoKCgoKCmV4dGVybiB2b2lkIGxheW91dF90eXBlICh0
cmVlKTsKIyAyMDM0ICIuLi8uLi9nY2MvZ2NjL3RyZWUuaCIKdHlwZWRlZiBzdHJ1Y3QgcmVjb3Jk
X2xheW91dF9pbmZvX3MKewoKICB0cmVlIHQ7CgoKICB0cmVlIG9mZnNldDsKCiAgdW5zaWduZWQg
aW50IG9mZnNldF9hbGlnbjsKCiAgdHJlZSBiaXRwb3M7CgogIHVuc2lnbmVkIGludCByZWNvcmRf
YWxpZ247CgogIHVuc2lnbmVkIGludCB1bnBhY2tlZF9hbGlnbjsKCgogIHRyZWUgcGVuZGluZ19z
dGF0aWNzOwogIGludCBwYWNrZWRfbWF5YmVfbmVjZXNzYXJ5Owp9ICpyZWNvcmRfbGF5b3V0X2lu
Zm87CgpleHRlcm4gcmVjb3JkX2xheW91dF9pbmZvIHN0YXJ0X3JlY29yZF9sYXlvdXQgKHRyZWUp
OwpleHRlcm4gdHJlZSBiaXRfZnJvbV9wb3MgKHRyZWUsIHRyZWUpOwpleHRlcm4gdHJlZSBieXRl
X2Zyb21fcG9zICh0cmVlLCB0cmVlKTsKZXh0ZXJuIHZvaWQgcG9zX2Zyb21fYnl0ZSAodHJlZSAq
LCB0cmVlICosIHVuc2lnbmVkIGludCwgdHJlZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJuIHZvaWQgcG9zX2Zyb21fYml0ICh0
cmVlICosIHRyZWUgKiwgdW5zaWduZWQgaW50LCB0cmVlKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4gdm9pZCBub3JtYWxpemVf
b2Zmc2V0ICh0cmVlICosIHRyZWUgKiwgdW5zaWduZWQgaW50KQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CmV4dGVybiB0cmVl
IHJsaV9zaXplX3VuaXRfc29fZmFyIChyZWNvcmRfbGF5b3V0X2luZm8pOwpleHRlcm4gdHJlZSBy
bGlfc2l6ZV9zb19mYXIgKHJlY29yZF9sYXlvdXRfaW5mbyk7CmV4dGVybiB2b2lkIG5vcm1hbGl6
ZV9ybGkgKHJlY29yZF9sYXlvdXRfaW5mbyk7CmV4dGVybiB2b2lkIHBsYWNlX2ZpZWxkIChyZWNv
cmRfbGF5b3V0X2luZm8sIHRyZWUpOwpleHRlcm4gdm9pZCBjb21wdXRlX3JlY29yZF9tb2RlICh0
cmVlKTsKZXh0ZXJuIHZvaWQgZmluaXNoX3JlY29yZF9sYXlvdXQgKHJlY29yZF9sYXlvdXRfaW5m
byk7CgoKCgoKCmV4dGVybiB0cmVlIHR5cGVfaGFzaF9jYW5vbiAodW5zaWduZWQgaW50LCB0cmVl
KTsKIyAyMDg2ICIuLi8uLi9nY2MvZ2NjL3RyZWUuaCIKZXh0ZXJuIHZvaWQgbGF5b3V0X2RlY2wg
KHRyZWUsIHVuc2lnbmVkKTsKCgoKCgoKZXh0ZXJuIGVudW0gbWFjaGluZV9tb2RlIG1vZGVfZm9y
X3NpemVfdHJlZSAodHJlZSwgZW51bSBtb2RlX2NsYXNzLCBpbnQpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCmV4dGVybiB0cmVl
IG5vbl9sdmFsdWUgKHRyZWUpOwpleHRlcm4gdHJlZSBwZWRhbnRpY19ub25fbHZhbHVlICh0cmVl
KTsKCmV4dGVybiB0cmVlIGNvbnZlcnQgKHRyZWUsIHRyZWUpOwpleHRlcm4gdW5zaWduZWQgaW50
IGV4cHJfYWxpZ24gKHRyZWUpOwpleHRlcm4gdHJlZSBzaXplX2luX2J5dGVzICh0cmVlKTsKZXh0
ZXJuIGludCBpbnRfc2l6ZV9pbl9ieXRlcyAodHJlZSk7CmV4dGVybiB0cmVlIGJpdF9wb3NpdGlv
biAodHJlZSk7CmV4dGVybiBpbnQgaW50X2JpdF9wb3NpdGlvbiAodHJlZSk7CmV4dGVybiB0cmVl
IGJ5dGVfcG9zaXRpb24gKHRyZWUpOwpleHRlcm4gaW50IGludF9ieXRlX3Bvc2l0aW9uICh0cmVl
KTsKCgoKCmVudW0gc2l6ZV90eXBlX2tpbmQKewogIFNJWkVUWVBFLAogIFNTSVpFVFlQRSwKICBV
U0laRVRZUEUsCiAgQklUU0laRVRZUEUsCiAgU0JJVFNJWkVUWVBFLAogIFVCSVRTSVpFVFlQRSwK
ICBUWVBFX0tJTkRfTEFTVH07CgpleHRlcm4gdHJlZSBzaXpldHlwZV90YWJbKGludCkgVFlQRV9L
SU5EX0xBU1RdOwojIDIxMzIgIi4uLy4uL2djYy9nY2MvdHJlZS5oIgpleHRlcm4gdHJlZSBzaXpl
X2Jpbm9wIChlbnVtIHRyZWVfY29kZSwgdHJlZSwgdHJlZSk7CmV4dGVybiB0cmVlIHNpemVfZGlm
Zm9wICh0cmVlLCB0cmVlKTsKZXh0ZXJuIHRyZWUgc2l6ZV9pbnRfd2lkZSAoaW50LCBlbnVtIHNp
emVfdHlwZV9raW5kKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4gdHJlZSBzaXplX2ludF90eXBlX3dp
ZGUgKGludCwgdHJlZSk7CgoKCgoKCgpleHRlcm4gdHJlZSByb3VuZF91cCAodHJlZSwgaW50KTsK
ZXh0ZXJuIHRyZWUgcm91bmRfZG93biAodHJlZSwgaW50KTsKZXh0ZXJuIHRyZWUgZ2V0X3BlbmRp
bmdfc2l6ZXMgKHZvaWQpOwpleHRlcm4gdm9pZCBwdXRfcGVuZGluZ19zaXplcyAodHJlZSk7CiMg
MjE1NyAiLi4vLi4vZ2NjL2djYy90cmVlLmgiCmV4dGVybiB1bnNpZ25lZCBpbnQgbWF4aW11bV9m
aWVsZF9hbGlnbm1lbnQ7CgoKZXh0ZXJuIHVuc2lnbmVkIGludCBzZXRfYWxpZ25tZW50OwoKCgoK
CmV4dGVybiB0cmVlIGNoYWlub24gKHRyZWUsIHRyZWUpOwoKCgpleHRlcm4gdHJlZSB0cmVlX2Nv
bnMgKHRyZWUsIHRyZWUsIHRyZWUpOwoKCgpleHRlcm4gdHJlZSB0cmVlX2xhc3QgKHRyZWUpOwoK
CgpleHRlcm4gdHJlZSBucmV2ZXJzZSAodHJlZSk7CgoKCgpleHRlcm4gaW50IGxpc3RfbGVuZ3Ro
ICh0cmVlKTsKCgoKZXh0ZXJuIGludCBmaWVsZHNfbGVuZ3RoICh0cmVlKTsKCgoKZXh0ZXJuIGlu
dCBpbnRlZ2VyX3plcm9wICh0cmVlKTsKCgoKZXh0ZXJuIGludCBpbnRlZ2VyX29uZXAgKHRyZWUp
OwoKCgoKZXh0ZXJuIGludCBpbnRlZ2VyX2FsbF9vbmVzcCAodHJlZSk7CgoKCgpleHRlcm4gaW50
IGludGVnZXJfcG93MnAgKHRyZWUpOwoKCgoKZXh0ZXJuIGludCBzdGF0aWNwICh0cmVlKTsKCgoK
CmV4dGVybiBpbnQgbHZhbHVlX29yX2Vsc2UgKHRyZWUsIGNvbnN0IGNoYXIgKik7CgoKCgoKZXh0
ZXJuIHRyZWUgc2F2ZV9leHByICh0cmVlKTsKCgoKCmV4dGVybiBpbnQgZmlyc3RfcnRsX29wIChl
bnVtIHRyZWVfY29kZSk7CgoKCgoKZXh0ZXJuIHRyZWUgdW5zYXZlX2V4cHIgKHRyZWUpOwoKCgoK
ZXh0ZXJuIHZvaWQgdW5zYXZlX2V4cHJfMSAodHJlZSk7CgoKCmV4dGVybiB0cmVlIHVuc2F2ZV9l
eHByX25vdyAodHJlZSk7CgoKCgoKCmV4dGVybiB2b2lkICgqbGFuZ191bnNhdmUpICh0cmVlICop
OwpleHRlcm4gdm9pZCAoKmxhbmdfdW5zYXZlX2V4cHJfbm93KSAodHJlZSk7CgoKCgpleHRlcm4g
aW50IHVuc2FmZV9mb3JfcmVldmFsICh0cmVlKTsKCgoKCgoKCmV4dGVybiBpbnQgY29udGFpbnNf
cGxhY2Vob2xkZXJfcCAodHJlZSk7CgoKCgpleHRlcm4gaW50IGhhc19jbGVhbnVwcyAodHJlZSk7
CgoKCgoKCmV4dGVybiB0cmVlIHN1YnN0aXR1dGVfaW5fZXhwciAodHJlZSwgdHJlZSwgdHJlZSk7
CgoKCgoKCgpleHRlcm4gdHJlZSB2YXJpYWJsZV9zaXplICh0cmVlKTsKCgoKCgpleHRlcm4gdHJl
ZSBzdGFiaWxpemVfcmVmZXJlbmNlICh0cmVlKTsKCgoKCgpleHRlcm4gdHJlZSBzdGFiaWxpemVf
cmVmZXJlbmNlXzEgKHRyZWUpOwoKCgoKCgpleHRlcm4gdHJlZSBnZXRfdW53aWRlbmVkICh0cmVl
LCB0cmVlKTsKCgoKCgoKZXh0ZXJuIHRyZWUgZ2V0X25hcnJvd2VyICh0cmVlLCBpbnQgKik7CgoK
CgoKCmV4dGVybiB0cmVlIHR5cGVfZm9yX21vZGUgKGVudW0gbWFjaGluZV9tb2RlLCBpbnQpOwoK
CgoKCgpleHRlcm4gdHJlZSB0eXBlX2Zvcl9zaXplICh1bnNpZ25lZCwgaW50KTsKCgoKCgoKZXh0
ZXJuIHRyZWUgdW5zaWduZWRfdHlwZSAodHJlZSk7CgoKCgoKCmV4dGVybiB0cmVlIHNpZ25lZF90
eXBlICh0cmVlKTsKCgoKCgpleHRlcm4gdHJlZSBtYXliZV9idWlsZF9jbGVhbnVwICh0cmVlKTsK
CgoKCgpleHRlcm4gdHJlZSBnZXRfaW5uZXJfcmVmZXJlbmNlICh0cmVlLCBpbnQgKiwgaW50ICos
IHRyZWUgKiwgZW51bSBtYWNoaW5lX21vZGUgKiwgaW50ICosIGludCAqLCB1bnNpZ25lZCBpbnQg
KikKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgoKCgpleHRlcm4gdHJlZSBnZXRfY29udGFpbmluZ19zY29w
ZSAodHJlZSk7CgoKCmV4dGVybiB0cmVlIGRlY2xfZnVuY3Rpb25fY29udGV4dCAodHJlZSk7CgoK
CmV4dGVybiB0cmVlIGRlY2xfdHlwZV9jb250ZXh0ICh0cmVlKTsKCgoKCgoKZXh0ZXJuIGNvbnN0
IGNoYXIgKmZ1bmN0aW9uX2Nhbm5vdF9pbmxpbmVfcCAodHJlZSk7CgoKZXh0ZXJuIGludCByZWFs
X3plcm9wICh0cmVlKTsKCgoKCgpleHRlcm4gY29uc3QgY2hhciAqaW5wdXRfZmlsZW5hbWU7CgoK
ZXh0ZXJuIGludCBsaW5lbm87CgoKCmV4dGVybiBpbnQgcGVkYW50aWM7CgoKCgpleHRlcm4gaW50
IHBlZGFudGljX2x2YWx1ZXM7CgoKCgpleHRlcm4gaW50IGltbWVkaWF0ZV9zaXplX2V4cGFuZDsK
CgoKZXh0ZXJuIHRyZWUgY3VycmVudF9mdW5jdGlvbl9kZWNsOwoKCmV4dGVybiB0cmVlIGN1cnJl
bnRfZnVuY3Rpb25fZnVuY19iZWdpbl9sYWJlbDsKCgoKZXh0ZXJuIGludCBhbGxfdHlwZXNfcGVy
bWFuZW50OwojIDI0MTggIi4uLy4uL2djYy9nY2MvdHJlZS5oIgpleHRlcm4gY29uc3QgY2hhciAq
KCpkZWNsX3ByaW50YWJsZV9uYW1lKSAodHJlZSwgaW50KTsKCgoKCmV4dGVybiB2b2lkICgqaW5j
b21wbGV0ZV9kZWNsX2ZpbmFsaXplX2hvb2spICh0cmVlKTsKCmV4dGVybiBjb25zdCBjaGFyICpp
bml0X3BhcnNlIChjb25zdCBjaGFyICopOwpleHRlcm4gdm9pZCBmaW5pc2hfcGFyc2UgKHZvaWQp
OwoKZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBsYW5ndWFnZV9zdHJpbmc7CgoKCmV4dGVybiB0
cmVlIGJ1aWx0aW5fZnVuY3Rpb24gKGNvbnN0IGNoYXIgKiwgdHJlZSwgaW50LCBlbnVtIGJ1aWx0
X2luX2NsYXNzLCBjb25zdCBjaGFyICopCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKZXh0ZXJuIGNoYXIgKnBl
cm1fY2FsbG9jIChpbnQsIGxvbmcpOwpleHRlcm4gdm9pZCBjbGVhbl9zeW1ib2xfbmFtZSAoY2hh
ciAqKTsKZXh0ZXJuIHRyZWUgZ2V0X2ZpbGVfZnVuY3Rpb25fbmFtZV9sb25nIChjb25zdCBjaGFy
ICopOwpleHRlcm4gdHJlZSBnZXRfc2V0X2NvbnN0cnVjdG9yX2JpdHMgKHRyZWUsIGNoYXIgKiwg
aW50KTsKZXh0ZXJuIHRyZWUgZ2V0X3NldF9jb25zdHJ1Y3Rvcl9ieXRlcyAodHJlZSwgdW5zaWdu
ZWQgY2hhciAqLCBpbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4gdHJlZSBnZXRfY2Fs
bGVlX2ZuZGVjbCAodHJlZSk7CgoKCmV4dGVybiBpbnQgaW5fY29udHJvbF96b25lX3AgKHZvaWQp
OwpleHRlcm4gdm9pZCBleHBhbmRfZml4dXBzIChzdHJ1Y3QgcnR4X2RlZiAqKTsKZXh0ZXJuIHRy
ZWUgZXhwYW5kX3N0YXJ0X3N0bXRfZXhwciAodm9pZCk7CmV4dGVybiB0cmVlIGV4cGFuZF9lbmRf
c3RtdF9leHByICh0cmVlKTsKZXh0ZXJuIHZvaWQgZXhwYW5kX2V4cHJfc3RtdCAodHJlZSk7CmV4
dGVybiBpbnQgd2Fybl9pZl91bnVzZWRfdmFsdWUgKHRyZWUpOwpleHRlcm4gdm9pZCBleHBhbmRf
ZGVjbF9pbml0ICh0cmVlKTsKZXh0ZXJuIHZvaWQgY2xlYXJfbGFzdF9leHByICh2b2lkKTsKZXh0
ZXJuIHZvaWQgZXhwYW5kX2xhYmVsICh0cmVlKTsKZXh0ZXJuIHZvaWQgZXhwYW5kX2dvdG8gKHRy
ZWUpOwpleHRlcm4gdm9pZCBleHBhbmRfYXNtICh0cmVlKTsKZXh0ZXJuIHZvaWQgZXhwYW5kX3N0
YXJ0X2NvbmQgKHRyZWUsIGludCk7CmV4dGVybiB2b2lkIGV4cGFuZF9lbmRfY29uZCAodm9pZCk7
CmV4dGVybiB2b2lkIGV4cGFuZF9zdGFydF9lbHNlICh2b2lkKTsKZXh0ZXJuIHZvaWQgZXhwYW5k
X3N0YXJ0X2Vsc2VpZiAodHJlZSk7CmV4dGVybiBzdHJ1Y3QgbmVzdGluZyAqZXhwYW5kX3N0YXJ0
X2xvb3AgKGludCk7CmV4dGVybiBzdHJ1Y3QgbmVzdGluZyAqZXhwYW5kX3N0YXJ0X2xvb3BfY29u
dGludWVfZWxzZXdoZXJlIChpbnQpOwpleHRlcm4gc3RydWN0IG5lc3RpbmcgKmV4cGFuZF9zdGFy
dF9udWxsX2xvb3AgKHZvaWQpOwpleHRlcm4gdm9pZCBleHBhbmRfbG9vcF9jb250aW51ZV9oZXJl
ICh2b2lkKTsKZXh0ZXJuIHZvaWQgZXhwYW5kX2VuZF9sb29wICh2b2lkKTsKZXh0ZXJuIHZvaWQg
ZXhwYW5kX2VuZF9udWxsX2xvb3AgKHZvaWQpOwpleHRlcm4gaW50IGV4cGFuZF9jb250aW51ZV9s
b29wIChzdHJ1Y3QgbmVzdGluZyAqKTsKZXh0ZXJuIGludCBleHBhbmRfZXhpdF9sb29wIChzdHJ1
Y3QgbmVzdGluZyAqKTsKZXh0ZXJuIGludCBleHBhbmRfZXhpdF9sb29wX2lmX2ZhbHNlIChzdHJ1
Y3QgbmVzdGluZyAqLCB0cmVlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4gaW50IGV4cGFuZF9leGl0X3NvbWV0aGlu
ZyAodm9pZCk7CgpleHRlcm4gdm9pZCBleHBhbmRfbnVsbF9yZXR1cm4gKHZvaWQpOwpleHRlcm4g
dm9pZCBleHBhbmRfcmV0dXJuICh0cmVlKTsKZXh0ZXJuIGludCBvcHRpbWl6ZV90YWlsX3JlY3Vy
c2lvbiAodHJlZSwgc3RydWN0IHJ0eF9kZWYgKik7CmV4dGVybiB2b2lkIGV4cGFuZF9zdGFydF9i
aW5kaW5nc19hbmRfYmxvY2sgKGludCwgdHJlZSk7CgoKZXh0ZXJuIHZvaWQgZXhwYW5kX2VuZF9i
aW5kaW5ncyAodHJlZSwgaW50LCBpbnQpOwpleHRlcm4gdm9pZCB3YXJuX2Fib3V0X3VudXNlZF92
YXJpYWJsZXMgKHRyZWUpOwpleHRlcm4gdm9pZCBzdGFydF9jbGVhbnVwX2RlZmVycmFsICh2b2lk
KTsKZXh0ZXJuIHZvaWQgZW5kX2NsZWFudXBfZGVmZXJyYWwgKHZvaWQpOwpleHRlcm4gaW50IGlz
X2JvZHlfYmxvY2sgKHRyZWUpOwoKZXh0ZXJuIHZvaWQgbWFya19ibG9ja19hc19laF9yZWdpb24g
KHZvaWQpOwpleHRlcm4gdm9pZCBtYXJrX2Jsb2NrX2FzX25vdF9laF9yZWdpb24gKHZvaWQpOwpl
eHRlcm4gaW50IGlzX2VoX3JlZ2lvbiAodm9pZCk7CmV4dGVybiBpbnQgY29uZGl0aW9uYWxfY29u
dGV4dCAodm9pZCk7CmV4dGVybiB0cmVlIGxhc3RfY2xlYW51cF90aGlzX2NvbnRvdXIgKHZvaWQp
OwpleHRlcm4gaW50IGV4cGFuZF9kaGNfY2xlYW51cCAodHJlZSk7CmV4dGVybiBpbnQgZXhwYW5k
X2RjY19jbGVhbnVwICh0cmVlKTsKZXh0ZXJuIHZvaWQgZXhwYW5kX3N0YXJ0X2Nhc2UgKGludCwg
dHJlZSwgdHJlZSwgY29uc3QgY2hhciAqKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CmV4dGVybiB2b2lkIGV4cGFu
ZF9lbmRfY2FzZSAodHJlZSk7CmV4dGVybiBpbnQgYWRkX2Nhc2Vfbm9kZSAodHJlZSwgdHJlZSwg
dHJlZSwgdHJlZSAqKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJuIGludCBwdXNoY2FzZSAodHJlZSwg
dHJlZSAoKikgKHRyZWUsIHRyZWUpLCB0cmVlLCB0cmVlICopCgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CmV4dGVy
biBpbnQgcHVzaGNhc2VfcmFuZ2UgKHRyZWUsIHRyZWUsIHRyZWUgKCopICh0cmVlLCB0cmVlKSwg
dHJlZSwgdHJlZSAqKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4gdm9pZCB1c2luZ19laF9mb3JfY2xl
YW51cHMgKHZvaWQpOwpleHRlcm4gaW50IHN0bXRfbG9vcF9uZXN0X2VtcHR5ICh2b2lkKTsKIyAy
NTE1ICIuLi8uLi9nY2MvZ2NjL3RyZWUuaCIKZXh0ZXJuIHRyZWUgZm9sZCAodHJlZSk7CgpleHRl
cm4gaW50IGZvcmNlX2ZpdF90eXBlICh0cmVlLCBpbnQpOwpleHRlcm4gaW50IGFkZF9kb3VibGUg
KHVuc2lnbmVkIGludCwgaW50LCB1bnNpZ25lZCBpbnQsIGludCwgdW5zaWduZWQgaW50ICosIGlu
dCAqKQoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CmV4dGVybiBpbnQgbmVnX2RvdWJsZSAodW5zaWduZWQgaW50LCBpbnQsIHVuc2ln
bmVkIGludCAqLCBpbnQgKikKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CmV4dGVybiBpbnQgbXVsX2RvdWJsZSAodW5zaWduZWQgaW50
LCBpbnQsIHVuc2lnbmVkIGludCwgaW50LCB1bnNpZ25lZCBpbnQgKiwgaW50ICopCgoKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CmV4
dGVybiB2b2lkIGxzaGlmdF9kb3VibGUgKHVuc2lnbmVkIGludCwgaW50LCBpbnQsIHVuc2lnbmVk
IGludCwgdW5zaWduZWQgaW50ICosIGludCAqLCBpbnQpCgoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4gdm9pZCBy
c2hpZnRfZG91YmxlICh1bnNpZ25lZCBpbnQsIGludCwgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2ln
bmVkIGludCAqLCBpbnQgKiwgaW50KQoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJuIHZvaWQgbHJvdGF0ZV9kb3Vi
bGUgKHVuc2lnbmVkIGludCwgaW50LCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50ICos
IGludCAqKQoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CmV4dGVybiB2b2lkIHJyb3RhdGVfZG91YmxlICh1bnNpZ25lZCBpbnQsIGlu
dCwgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCAqLCBpbnQgKikKCgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4g
aW50IG9wZXJhbmRfZXF1YWxfcCAodHJlZSwgdHJlZSwgaW50KTsKZXh0ZXJuIHRyZWUgaW52ZXJ0
X3RydXRodmFsdWUgKHRyZWUpOwoKCgoKCmV4dGVybiB0cmVlICgqbGFuZ190eXBlX3Byb21vdGVz
X3RvKSAodHJlZSk7CmV4dGVybiB0cmVlIGZvbGRfYnVpbHRpbiAodHJlZSk7CgoKCgpleHRlcm4g
dm9pZCBsYW5nX2luaXRfb3B0aW9ucyAodm9pZCk7CgoKZXh0ZXJuIHZvaWQgaW5pdF9sZXggKHZv
aWQpOwoKZXh0ZXJuIHZvaWQgaW5pdF9kZWNsX3Byb2Nlc3NpbmcgKHZvaWQpOwoKCgpleHRlcm4g
dm9pZCBsYW5nX2luaXQgKHZvaWQpOwpleHRlcm4gdm9pZCBsYW5nX2ZpbmlzaCAodm9pZCk7CgoK
ZXh0ZXJuIGNvbnN0IGNoYXIgKmxhbmdfaWRlbnRpZnkgKHZvaWQpOwoKCgpleHRlcm4gdm9pZCAo
KnByaW50X2Vycm9yX2Z1bmN0aW9uKSAoY29uc3QgY2hhciAqKTsKCgpleHRlcm4gdm9pZCBjb3B5
X2xhbmdfZGVjbCAodHJlZSk7CgoKZXh0ZXJuIGludCB5eXBhcnNlICh2b2lkKTsKCgoKZXh0ZXJu
IGludCBsYW5nX2RlY29kZV9vcHRpb24gKGludCwgY2hhciAqKik7CgoKCgpleHRlcm4gdm9pZCBw
dXNobGV2ZWwgKGludCk7CgoKCgoKZXh0ZXJuIHRyZWUgcG9wbGV2ZWwgKGludCwgaW50LCBpbnQp
OwoKZXh0ZXJuIHZvaWQgc2V0X2Jsb2NrICh0cmVlKTsKCgoKCmV4dGVybiB0cmVlIHB1c2hkZWNs
ICh0cmVlKTsKCmV4dGVybiB0cmVlIGdldGRlY2xzICh2b2lkKTsKCmV4dGVybiB0cmVlIGdldHRh
Z3MgKHZvaWQpOwoKZXh0ZXJuIHRyZWUgYnVpbGRfcmFuZ2VfdHlwZSAodHJlZSwgdHJlZSwgdHJl
ZSk7CgoKZXh0ZXJuIHZvaWQgcmVzdF9vZl90eXBlX2NvbXBpbGF0aW9uICh0cmVlLCBpbnQpOwoK
CmV4dGVybiB2b2lkIHJlY29yZF9jb21wb25lbnRfYWxpYXNlcyAodHJlZSk7CmV4dGVybiBpbnQg
Z2V0X2FsaWFzX3NldCAodHJlZSk7CgoKZXh0ZXJuIGludCBsYW5nX2dldF9hbGlhc19zZXQgKHRy
ZWUpOwoKc3RydWN0IG9ic3RhY2s7CgoKZXh0ZXJuIGludCByZWFsbHlfY29uc3RhbnRfcCAodHJl
ZSk7CmV4dGVybiB2b2lkIHNldF9pZGVudGlmaWVyX3NpemUgKGludCk7CmV4dGVybiBpbnQgaW50
X2ZpdHNfdHlwZV9wICh0cmVlLCB0cmVlKTsKZXh0ZXJuIGludCB0cmVlX2xvZzIgKHRyZWUpOwpl
eHRlcm4gaW50IHRyZWVfZmxvb3JfbG9nMiAodHJlZSk7CmV4dGVybiB2b2lkIHByZXNlcnZlX2Rh
dGEgKHZvaWQpOwpleHRlcm4gaW50IG9iamVjdF9wZXJtYW5lbnRfcCAodHJlZSk7CmV4dGVybiBp
bnQgdHlwZV9wcmVjaXNpb24gKHRyZWUpOwpleHRlcm4gaW50IHNpbXBsZV9jc3RfZXF1YWwgKHRy
ZWUsIHRyZWUpOwpleHRlcm4gaW50IGNvbXBhcmVfdHJlZV9pbnQgKHRyZWUsIHVuc2lnbmVkIGlu
dCk7CmV4dGVybiBpbnQgdHlwZV9saXN0X2VxdWFsICh0cmVlLCB0cmVlKTsKZXh0ZXJuIGludCBj
aGFpbl9tZW1iZXIgKHRyZWUsIHRyZWUpOwpleHRlcm4gaW50IGNoYWluX21lbWJlcl9wdXJwb3Nl
ICh0cmVlLCB0cmVlKTsKZXh0ZXJuIGludCBjaGFpbl9tZW1iZXJfdmFsdWUgKHRyZWUsIHRyZWUp
OwpleHRlcm4gdHJlZSBsaXN0aWZ5ICh0cmVlKTsKZXh0ZXJuIHRyZWUgdHlwZV9oYXNoX2xvb2t1
cCAodW5zaWduZWQgaW50LCB0cmVlKTsKZXh0ZXJuIHZvaWQgdHlwZV9oYXNoX2FkZCAodW5zaWdu
ZWQgaW50LCB0cmVlKTsKZXh0ZXJuIHVuc2lnbmVkIGludCB0eXBlX2hhc2hfbGlzdCAodHJlZSk7
CmV4dGVybiBpbnQgc2ltcGxlX2NzdF9saXN0X2VxdWFsICh0cmVlLCB0cmVlKTsKZXh0ZXJuIHZv
aWQgaW5pdF90cmVlX2NvZGVzICh2b2lkKTsKZXh0ZXJuIHZvaWQgZHVtcF90cmVlX3N0YXRpc3Rp
Y3MgKHZvaWQpOwpleHRlcm4gdm9pZCBwcmludF9vYnN0YWNrX3N0YXRpc3RpY3MgKGNvbnN0IGNo
YXIgKiwgc3RydWN0IG9ic3RhY2sgKikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKZXh0ZXJuIHZvaWQgcHJpbnRfb2Jz
dGFja19uYW1lIChjaGFyICosIEZJTEUgKiwgY29uc3QgY2hhciAqKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgpleHRlcm4g
dm9pZCBleHBhbmRfZnVuY3Rpb25fZW5kIChjb25zdCBjaGFyICosIGludCwgaW50KTsKZXh0ZXJu
IHZvaWQgZXhwYW5kX2Z1bmN0aW9uX3N0YXJ0ICh0cmVlLCBpbnQpOwoKZXh0ZXJuIGludCByZWFs
X29uZXAgKHRyZWUpOwpleHRlcm4gaW50IHJlYWxfdHdvcCAodHJlZSk7CmV4dGVybiB2b2lkIHN0
YXJ0X2lkZW50aWZpZXJfd2FybmluZ3MgKHZvaWQpOwpleHRlcm4gdm9pZCBnY2Nfb2JzdGFja19p
bml0IChzdHJ1Y3Qgb2JzdGFjayAqKTsKZXh0ZXJuIHZvaWQgaW5pdF9vYnN0YWNrcyAodm9pZCk7
CmV4dGVybiB2b2lkIGJ1aWxkX2NvbW1vbl90cmVlX25vZGVzIChpbnQpOwpleHRlcm4gdm9pZCBi
dWlsZF9jb21tb25fdHJlZV9ub2Rlc18yIChpbnQpOwoKCmV4dGVybiB2b2lkIHNldGptcF9wcm90
ZWN0X2FyZ3MgKHZvaWQpOwpleHRlcm4gdm9pZCBzZXRqbXBfcHJvdGVjdCAodHJlZSk7CmV4dGVy
biB2b2lkIGV4cGFuZF9tYWluX2Z1bmN0aW9uICh2b2lkKTsKZXh0ZXJuIHZvaWQgbWFya192YXJh
cmdzICh2b2lkKTsKZXh0ZXJuIHZvaWQgaW5pdF9kdW1teV9mdW5jdGlvbl9zdGFydCAodm9pZCk7
CmV4dGVybiB2b2lkIGV4cGFuZF9kdW1teV9mdW5jdGlvbl9lbmQgKHZvaWQpOwpleHRlcm4gdm9p
ZCBpbml0X2Z1bmN0aW9uX2Zvcl9jb21waWxhdGlvbiAodm9pZCk7CmV4dGVybiB2b2lkIGluaXRf
ZnVuY3Rpb25fc3RhcnQgKHRyZWUsIGNvbnN0IGNoYXIgKiwgaW50KTsKZXh0ZXJuIHZvaWQgYXNz
aWduX3Bhcm1zICh0cmVlKTsKZXh0ZXJuIHZvaWQgcHV0X3Zhcl9pbnRvX3N0YWNrICh0cmVlKTsK
ZXh0ZXJuIHZvaWQgZmx1c2hfYWRkcmVzc29mICh0cmVlKTsKZXh0ZXJuIHZvaWQgdW5pbml0aWFs
aXplZF92YXJzX3dhcm5pbmcgKHRyZWUpOwpleHRlcm4gdm9pZCBzZXRqbXBfYXJnc193YXJuaW5n
ICh2b2lkKTsKZXh0ZXJuIHZvaWQgbWFya19hbGxfdGVtcHNfdXNlZCAodm9pZCk7CmV4dGVybiB2
b2lkIGluaXRfdGVtcF9zbG90cyAodm9pZCk7CmV4dGVybiB2b2lkIGNvbWJpbmVfdGVtcF9zbG90
cyAodm9pZCk7CmV4dGVybiB2b2lkIGZyZWVfdGVtcF9zbG90cyAodm9pZCk7CmV4dGVybiB2b2lk
IHBvcF90ZW1wX3Nsb3RzICh2b2lkKTsKZXh0ZXJuIHZvaWQgcHVzaF90ZW1wX3Nsb3RzICh2b2lk
KTsKZXh0ZXJuIHZvaWQgcHJlc2VydmVfdGVtcF9zbG90cyAoc3RydWN0IHJ0eF9kZWYgKik7CmV4
dGVybiB2b2lkIHByZXNlcnZlX3J0bF9leHByX3RlbXBzICh0cmVlKTsKZXh0ZXJuIGludCBhZ2dy
ZWdhdGVfdmFsdWVfcCAodHJlZSk7CmV4dGVybiB2b2lkIGZyZWVfdGVtcHNfZm9yX3J0bF9leHBy
ICh0cmVlKTsKZXh0ZXJuIHZvaWQgaW5zdGFudGlhdGVfdmlydHVhbF9yZWdzICh0cmVlLCBzdHJ1
Y3QgcnR4X2RlZiAqKTsKZXh0ZXJuIHZvaWQgdW5zaGFyZV9hbGxfcnRsICh0cmVlLCBzdHJ1Y3Qg
cnR4X2RlZiAqKTsKZXh0ZXJuIGludCBtYXhfcGFybV9yZWdfbnVtICh2b2lkKTsKZXh0ZXJuIHZv
aWQgcHVzaF9mdW5jdGlvbl9jb250ZXh0ICh2b2lkKTsKZXh0ZXJuIHZvaWQgcG9wX2Z1bmN0aW9u
X2NvbnRleHQgKHZvaWQpOwpleHRlcm4gdm9pZCBwdXNoX2Z1bmN0aW9uX2NvbnRleHRfdG8gKHRy
ZWUpOwpleHRlcm4gdm9pZCBwb3BfZnVuY3Rpb25fY29udGV4dF9mcm9tICh0cmVlKTsKCgoKZXh0
ZXJuIHZvaWQgcHJpbnRfcnRsIChGSUxFICosIHN0cnVjdCBydHhfZGVmICopOwoKCgpleHRlcm4g
dm9pZCBkZWJ1Z190cmVlICh0cmVlKTsKCmV4dGVybiB2b2lkIHByaW50X25vZGUgKEZJTEUgKiwg
Y29uc3QgY2hhciAqLCB0cmVlLCBpbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJuIHZvaWQgcHJpbnRfbm9kZV9icmllZiAoRklM
RSAqLCBjb25zdCBjaGFyICosIHRyZWUsIGludCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4gdm9pZCBpbmRlbnRfdG8gKEZJTEUg
KiwgaW50KTsKCgoKZXh0ZXJuIHZvaWQgZW1pdF9xdWV1ZSAodm9pZCk7CmV4dGVybiBpbnQgYXBw
bHlfYXJnc19yZWdpc3Rlcl9vZmZzZXQgKGludCk7CmV4dGVybiBzdHJ1Y3QgcnR4X2RlZiAqZXhw
YW5kX2J1aWx0aW5fcmV0dXJuX2FkZHIKICAgICAgICAoZW51bSBidWlsdF9pbl9mdW5jdGlvbiwg
aW50LCBzdHJ1Y3QgcnR4X2RlZiAqKTsKZXh0ZXJuIHZvaWQgZG9fcGVuZGluZ19zdGFja19hZGp1
c3QgKHZvaWQpOwpleHRlcm4gc3RydWN0IHJ0eF9kZWYgKmV4cGFuZF9hc3NpZ25tZW50ICh0cmVl
LCB0cmVlLCBpbnQsIGludCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CmV4dGVybiBzdHJ1Y3QgcnR4X2RlZiAqc3RvcmVfZXhw
ciAodHJlZSwgc3RydWN0IHJ0eF9kZWYgKiwgaW50KQoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJuIHZvaWQgY2hlY2tf
bWF4X2ludGVnZXJfY29tcHV0YXRpb25fbW9kZSAodHJlZSk7CgoKZXh0ZXJuIHZvaWQgc3RhcnRf
c2VxdWVuY2VfZm9yX3J0bF9leHByICh0cmVlKTsKZXh0ZXJuIHN0cnVjdCBydHhfZGVmICplbWl0
X2xpbmVfbm90ZV9hZnRlciAoY29uc3QgY2hhciAqLCBpbnQsIHN0cnVjdCBydHhfZGVmICopCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKZXh0ZXJuIHN0cnVjdCBydHhfZGVmICplbWl0X2xpbmVfbm90ZSAo
Y29uc3QgY2hhciAqLCBpbnQpOwpleHRlcm4gc3RydWN0IHJ0eF9kZWYgKmVtaXRfbGluZV9ub3Rl
X2ZvcmNlIChjb25zdCBjaGFyICosIGludCk7CgoKCmV4dGVybiBpbnQgc2V0am1wX2NhbGxfcCAo
dHJlZSk7CgoKCmV4dGVybiBpbnQgbWFya19hZGRyZXNzYWJsZSAodHJlZSk7CmV4dGVybiB2b2lk
IGluY29tcGxldGVfdHlwZV9lcnJvciAodHJlZSwgdHJlZSk7CmV4dGVybiB2b2lkIHByaW50X2xh
bmdfc3RhdGlzdGljcyAodm9pZCk7CmV4dGVybiB0cmVlIHRydXRodmFsdWVfY29udmVyc2lvbiAo
dHJlZSk7CmV4dGVybiB2b2lkIHNwbGl0X3NwZWNzX2F0dHJzICh0cmVlLCB0cmVlICosIHRyZWUg
Kik7CgpleHRlcm4gdm9pZCBwcmludF9sYW5nX2RlY2wgKEZJTEUgKiwgdHJlZSwgaW50KTsKZXh0
ZXJuIHZvaWQgcHJpbnRfbGFuZ190eXBlIChGSUxFICosIHRyZWUsIGludCk7CmV4dGVybiB2b2lk
IHByaW50X2xhbmdfaWRlbnRpZmllciAoRklMRSAqLCB0cmVlLCBpbnQpOwoKZXh0ZXJuIGludCBn
bG9iYWxfYmluZGluZ3NfcCAodm9pZCk7CmV4dGVybiB2b2lkIGluc2VydF9ibG9jayAodHJlZSk7
CgoKZXh0ZXJuIHZvaWQgc2F2ZV9mb3JfaW5saW5lICh0cmVlKTsKZXh0ZXJuIHZvaWQgc2V0X2Rl
Y2xfYWJzdHJhY3RfZmxhZ3MgKHRyZWUsIGludCk7CmV4dGVybiB2b2lkIG91dHB1dF9pbmxpbmVf
ZnVuY3Rpb24gKHRyZWUpOwpleHRlcm4gdm9pZCBzZXRfZGVjbF9vcmlnaW5fc2VsZiAodHJlZSk7
CgoKZXh0ZXJuIHZvaWQgc2V0X3l5ZGVidWcgKGludCk7CgoKZXh0ZXJuIHZvaWQgZml4dXBfc2ln
bmVkX3R5cGUgKHRyZWUpOwoKCmV4dGVybiB2b2lkIG1ha2VfZGVjbF9ydGwgKHRyZWUsIGNvbnN0
IGNoYXIgKiwgaW50KTsKZXh0ZXJuIHZvaWQgbWFrZV9kZWNsX29uZV9vbmx5ICh0cmVlKTsKZXh0
ZXJuIGludCBzdXBwb3J0c19vbmVfb25seSAodm9pZCk7CmV4dGVybiB2b2lkIHZhcmlhYmxlX3Nl
Y3Rpb24gKHRyZWUsIGludCk7CgoKZXh0ZXJuIGludCBkaXZfYW5kX3JvdW5kX2RvdWJsZSAoZW51
bSB0cmVlX2NvZGUsIGludCwgdW5zaWduZWQgaW50LCBpbnQsIHVuc2lnbmVkIGludCwgaW50LCB1
bnNpZ25lZCBpbnQgKiwgaW50ICosIHVuc2lnbmVkIGludCAqLCBpbnQgKikKCgoKCgoKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCgpleHRlcm4gdm9pZCBlbWl0X25vcCAodm9pZCk7CmV4dGVybiB2b2lkIGV4cGFuZF9j
b21wdXRlZF9nb3RvICh0cmVlKTsKZXh0ZXJuIHN0cnVjdCBydHhfZGVmICpsYWJlbF9ydHggKHRy
ZWUpOwpleHRlcm4gdm9pZCBleHBhbmRfYXNtX29wZXJhbmRzICh0cmVlLCB0cmVlLCB0cmVlLCB0
cmVlLCBpbnQsIGNvbnN0IGNoYXIgKiwgaW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJuIGludCBhbnlf
cGVuZGluZ19jbGVhbnVwcyAoaW50KTsKZXh0ZXJuIHZvaWQgaW5pdF9zdG10ICh2b2lkKTsKZXh0
ZXJuIHZvaWQgaW5pdF9zdG10X2Zvcl9mdW5jdGlvbiAodm9pZCk7CmV4dGVybiBpbnQgZHJvcF90
aHJvdWdoX2F0X2VuZF9wICh2b2lkKTsKZXh0ZXJuIHZvaWQgZXhwYW5kX3N0YXJ0X3RhcmdldF90
ZW1wcyAodm9pZCk7CmV4dGVybiB2b2lkIGV4cGFuZF9lbmRfdGFyZ2V0X3RlbXBzICh2b2lkKTsK
ZXh0ZXJuIHZvaWQgZXhwYW5kX2Vsc2VpZiAodHJlZSk7CmV4dGVybiB2b2lkIHNhdmVfc3RhY2tf
cG9pbnRlciAodm9pZCk7CmV4dGVybiB2b2lkIGV4cGFuZF9kZWNsICh0cmVlKTsKZXh0ZXJuIGlu
dCBleHBhbmRfZGVjbF9jbGVhbnVwICh0cmVlLCB0cmVlKTsKZXh0ZXJuIHZvaWQgZXhwYW5kX2Fu
b25fdW5pb25fZGVjbCAodHJlZSwgdHJlZSwgdHJlZSk7CmV4dGVybiB2b2lkIG1vdmVfY2xlYW51
cHNfdXAgKHZvaWQpOwpleHRlcm4gdm9pZCBleHBhbmRfc3RhcnRfY2FzZV9kdW1teSAodm9pZCk7
CmV4dGVybiB2b2lkIGV4cGFuZF9lbmRfY2FzZV9kdW1teSAodm9pZCk7CmV4dGVybiB0cmVlIGNh
c2VfaW5kZXhfZXhwcl90eXBlICh2b2lkKTsKZXh0ZXJuIGludCBhbGxfY2FzZXNfY291bnQgKHRy
ZWUsIGludCAqKTsKZXh0ZXJuIHZvaWQgY2hlY2tfZm9yX2Z1bGxfZW51bWVyYXRpb25faGFuZGxp
bmcgKHRyZWUpOwpleHRlcm4gdm9pZCBkZWNsYXJlX25vbmxvY2FsX2xhYmVsICh0cmVlKTsKCmV4
dGVybiB2b2lkIGxhbmdfcHJpbnRfeG5vZGUgKEZJTEUgKiwgdHJlZSwgaW50KTsKCgoKCgpleHRl
cm4gdHJlZSBnZXRfZmlsZV9mdW5jdGlvbl9uYW1lIChpbnQpOwoKCgoKCgpleHRlcm4gaW50IGR3
YXJmMm91dF9kb19mcmFtZSAodm9pZCk7CgoKCmV4dGVybiBjaGFyICpkd2FyZjJvdXRfY2ZpX2xh
YmVsICh2b2lkKTsKCgoKZXh0ZXJuIHZvaWQgZHdhcmYyb3V0X2RlZl9jZmEgKGNvbnN0IGNoYXIg
KiwgdW5zaWduZWQsIGxvbmcpOwoKCgpleHRlcm4gdm9pZCBkd2FyZjJvdXRfd2luZG93X3NhdmUg
KGNvbnN0IGNoYXIgKik7CgoKCgpleHRlcm4gdm9pZCBkd2FyZjJvdXRfYXJnc19zaXplIChjb25z
dCBjaGFyICosIGxvbmcpOwoKCgpleHRlcm4gdm9pZCBkd2FyZjJvdXRfcmVnX3NhdmUgKGNvbnN0
IGNoYXIgKiwgdW5zaWduZWQsIGxvbmcpOwoKCgpleHRlcm4gdm9pZCBkd2FyZjJvdXRfcmV0dXJu
X3NhdmUgKGNvbnN0IGNoYXIgKiwgbG9uZyk7CgoKCmV4dGVybiB2b2lkIGR3YXJmMm91dF9yZXR1
cm5fcmVnIChjb25zdCBjaGFyICosIHVuc2lnbmVkKTsKCgoKCmV4dGVybiB2b2lkIGR3YXJmMm91
dF9iZWdpbl9wcm9sb2d1ZSAodm9pZCk7CgoKCgpleHRlcm4gdm9pZCBkd2FyZjJvdXRfZW5kX2Vw
aWxvZ3VlICh2b2lkKTsKCgoKCgoKCmV4dGVybiB2b2lkIGZhbmN5X2Fib3J0IChjb25zdCBjaGFy
ICosIGludCwgY29uc3QgY2hhciAqKQogICAgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykp
OwojIDMzICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiAyCiMgMSAiLi4vLi4vZ2NjL2djYy9ydGwu
aCIgMQojIDI1ICIuLi8uLi9nY2MvZ2NjL3J0bC5oIgpzdHJ1Y3QgZnVuY3Rpb247CiMgNDEgIi4u
Ly4uL2djYy9nY2MvcnRsLmgiCmVudW0gcnR4X2NvZGUgewoKCiMgMSAiLi4vLi4vZ2NjL2djYy9y
dGwuZGVmIiAxCiMgNzAgIi4uLy4uL2djYy9nY2MvcnRsLmRlZiIKVU5LTk9XTiAsCgoKCk5JTCAs
CgoKCgoKCkVYUFJfTElTVCAsCgoKCklOU05fTElTVCAsCiMgMTI0ICIuLi8uLi9nY2MvZ2NjL3J0
bC5kZWYiCk1BVENIX09QRVJBTkQgLAoKCgoKCgpNQVRDSF9TQ1JBVENIICwKCgoKCk1BVENIX0RV
UCAsCgoKCgoKCgpNQVRDSF9PUEVSQVRPUiAsCiMgMTUzICIuLi8uLi9nY2MvZ2NjL3J0bC5kZWYi
Ck1BVENIX1BBUkFMTEVMICwKCgoKCk1BVENIX09QX0RVUCAsCgoKCgpNQVRDSF9QQVJfRFVQICwK
CgoKCk1BVENIX0lOU04gLAojIDE4NyAiLi4vLi4vZ2NjL2djYy9ydGwuZGVmIgpERUZJTkVfSU5T
TiAsCgoKCgoKCgpERUZJTkVfUEVFUEhPTEUgLAojIDIwNSAiLi4vLi4vZ2NjL2djYy9ydGwuZGVm
IgpERUZJTkVfU1BMSVQgLAojIDIzMiAiLi4vLi4vZ2NjL2djYy9ydGwuZGVmIgpERUZJTkVfSU5T
Tl9BTkRfU1BMSVQgLAoKCgpERUZJTkVfUEVFUEhPTEUyICwKCgoKREVGSU5FX0NPTUJJTkUgLAoj
IDI1MiAiLi4vLi4vZ2NjL2djYy9ydGwuZGVmIgpERUZJTkVfRVhQQU5EICwKIyAyNjggIi4uLy4u
L2djYy9nY2MvcnRsLmRlZiIKREVGSU5FX0RFTEFZICwKIyAzMDkgIi4uLy4uL2djYy9nY2MvcnRs
LmRlZiIKREVGSU5FX0ZVTkNUSU9OX1VOSVQgLAoKCkRFRklORV9BU01fQVRUUklCVVRFUyAsCiMg
MzI1ICIuLi8uLi9nY2MvZ2NjL3J0bC5kZWYiCkRFRklORV9DT05EX0VYRUMgLAoKCgoKClNFUVVF
TkNFICwKCgpBRERSRVNTICwKIyAzNDUgIi4uLy4uL2djYy9nY2MvcnRsLmRlZiIKREVGSU5FX0FU
VFIgLAoKCkFUVFIgLAoKCgoKCgoKU0VUX0FUVFIgLAojIDM3MSAiLi4vLi4vZ2NjL2djYy9ydGwu
ZGVmIgpTRVRfQVRUUl9BTFRFUk5BVElWRSAsCgoKCgpFUV9BVFRSICwKIyAzODYgIi4uLy4uL2dj
Yy9nY2MvcnRsLmRlZiIKQVRUUl9GTEFHICwKIyAzOTkgIi4uLy4uL2djYy9nY2MvcnRsLmRlZiIK
SU5TTiAsCgoKCkpVTVBfSU5TTiAsCgoKCgoKCkNBTExfSU5TTiAsCgoKQkFSUklFUiAsCiMgNDIy
ICIuLi8uLi9nY2MvZ2NjL3J0bC5kZWYiCkNPREVfTEFCRUwgLAoKCgoKCgpOT1RFICwKIyA0NDIg
Ii4uLy4uL2djYy9nY2MvcnRsLmRlZiIKQ09ORF9FWEVDICwKCgpQQVJBTExFTCAsCgoKCgoKCgpB
U01fSU5QVVQgLAojIDQ2NyAiLi4vLi4vZ2NjL2djYy9ydGwuZGVmIgpBU01fT1BFUkFORFMgLAoj
IDQ3OCAiLi4vLi4vZ2NjL2djYy9ydGwuZGVmIgpVTlNQRUMgLAoKClVOU1BFQ19WT0xBVElMRSAs
CgoKCkFERFJfVkVDICwKIyA1MTAgIi4uLy4uL2djYy9nY2MvcnRsLmRlZiIKQUREUl9ESUZGX1ZF
QyAsCiMgNTIyICIuLi8uLi9nY2MvZ2NjL3J0bC5kZWYiClNFVCAsCgoKCgpVU0UgLAoKCgoKQ0xP
QkJFUiAsCgoKCgoKQ0FMTCAsCgoKClJFVFVSTiAsCgoKCgoKVFJBUF9JRiAsCgoKCgoKCkNPTlNU
X0lOVCAsCiMgNTY1ICIuLi8uLi9nY2MvZ2NjL3J0bC5kZWYiCkNPTlNUX0RPVUJMRSAsCgoKQ09O
U1RfU1RSSU5HICwKCgoKCgpDT05TVCAsCgoKClBDICwKCgpWQUxVRSAsCiMgNTkyICIuLi8uLi9n
Y2MvZ2NjL3J0bC5kZWYiClJFRyAsCgoKCgoKClNDUkFUQ0ggLAojIDYwOSAiLi4vLi4vZ2NjL2dj
Yy9ydGwuZGVmIgpTVUJSRUcgLAojIDYyMiAiLi4vLi4vZ2NjL2djYy9ydGwuZGVmIgpTVFJJQ1Rf
TE9XX1BBUlQgLAoKCgoKCkNPTkNBVCAsCgoKCgoKTUVNICwKCgoKCgpMQUJFTF9SRUYgLAoKCgoK
ClNZTUJPTF9SRUYgLAoKCgoKCgpDQzAgLAojIDY2MiAiLi4vLi4vZ2NjL2djYy9ydGwuZGVmIgpB
RERSRVNTT0YgLAojIDY4MCAiLi4vLi4vZ2NjL2djYy9ydGwuZGVmIgpRVUVVRUQgLAojIDY5MiAi
Li4vLi4vZ2NjL2djYy9ydGwuZGVmIgpJRl9USEVOX0VMU0UgLAojIDcwMSAiLi4vLi4vZ2NjL2dj
Yy9ydGwuZGVmIgpDT05EICwKCgpDT01QQVJFICwKCgpQTFVTICwKCgpNSU5VUyAsCgoKTkVHICwK
Ck1VTFQgLAoKCkRJViAsCgpNT0QgLAoKClVESVYgLApVTU9EICwKCgpBTkQgLAoKSU9SICwKClhP
UiAsCgpOT1QgLAoKCgoKQVNISUZUICwKUk9UQVRFICwKQVNISUZUUlQgLApMU0hJRlRSVCAsClJP
VEFURVJUICwKCgoKCgpTTUlOICwKU01BWCAsClVNSU4gLApVTUFYICwKIyA3NjAgIi4uLy4uL2dj
Yy9nY2MvcnRsLmRlZiIKUFJFX0RFQyAsClBSRV9JTkMgLApQT1NUX0RFQyAsClBPU1RfSU5DICwK
IyA3NzcgIi4uLy4uL2djYy9nY2MvcnRsLmRlZiIKUFJFX01PRElGWSAsClBPU1RfTU9ESUZZICwK
CgoKTkUgLApFUSAsCkdFICwKR1QgLApMRSAsCkxUICwKR0VVICwKR1RVICwKTEVVICwKTFRVICwK
CgpVTk9SREVSRUQgLApPUkRFUkVEICwKCgpVTkVRICwKVU5HRSAsClVOR1QgLApVTkxFICwKVU5M
VCAsCgoKTFRHVCAsCgoKCgpTSUdOX0VYVEVORCAsCgoKWkVST19FWFRFTkQgLAoKClRSVU5DQVRF
ICwKCgpGTE9BVF9FWFRFTkQgLApGTE9BVF9UUlVOQ0FURSAsCgoKRkxPQVQgLAoKCgoKCgoKRklY
ICwKCgpVTlNJR05FRF9GTE9BVCAsCgoKCgpVTlNJR05FRF9GSVggLAoKCkFCUyAsCgoKU1FSVCAs
CgoKCgpGRlMgLAojIDg2MSAiLi4vLi4vZ2NjL2djYy9ydGwuZGVmIgpTSUdOX0VYVFJBQ1QgLAoK
ClpFUk9fRVhUUkFDVCAsCgoKCgpISUdIICwKCgoKTE9fU1VNICwKIyA4ODYgIi4uLy4uL2djYy9n
Y2MvcnRsLmRlZiIKUkFOR0VfSU5GTyAsCiMgOTAxICIuLi8uLi9nY2MvZ2NjL3J0bC5kZWYiClJB
TkdFX1JFRyAsCgoKCgoKUkFOR0VfVkFSICwKCgoKUkFOR0VfTElWRSAsCgoKCgpDT05TVEFOVF9Q
X1JUWCAsCiMgOTM3ICIuLi8uLi9nY2MvZ2NjL3J0bC5kZWYiCkNBTExfUExBQ0VIT0xERVIgLAoK
CgoKCgpWRUNfTUVSR0UgLAoKCgoKClZFQ19TRUxFQ1QgLAoKCgoKVkVDX0NPTkNBVCAsCgoKClZF
Q19DT05TVCAsCgoKCgoKVkVDX0RVUExJQ0FURSAsCgoKU1NfUExVUyAsCgoKVVNfUExVUyAsCgoK
U1NfTUlOVVMgLAoKClVTX01JTlVTICwKCgpTU19UUlVOQ0FURSAsCgoKVVNfVFJVTkNBVEUgLAoj
IDk5NyAiLi4vLi4vZ2NjL2djYy9ydGwuZGVmIgpQSEkgLAojIDQ1ICIuLi8uLi9nY2MvZ2NjL3J0
bC5oIiAyCgoKICBMQVNUX0FORF9VTlVTRURfUlRYX0NPREV9OwoKCgoKCgpleHRlcm4gY29uc3Qg
aW50IHJ0eF9sZW5ndGhbXTsKCgpleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IHJ0eF9uYW1lW107
CgoKZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBydHhfZm9ybWF0W107CgoKZXh0ZXJuIGNvbnN0
IGNoYXIgcnR4X2NsYXNzW107CgoKCgp0eXBlZGVmIHN0cnVjdAp7CgogIHVuc2lnbmVkIG1pbl9h
bGlnbjogODsKCiAgdW5zaWduZWQgYmFzZV9hZnRlcl92ZWM6IDE7CiAgdW5zaWduZWQgbWluX2Fm
dGVyX3ZlYzogMTsKICB1bnNpZ25lZCBtYXhfYWZ0ZXJfdmVjOiAxOwogIHVuc2lnbmVkIG1pbl9h
ZnRlcl9iYXNlOiAxOwogIHVuc2lnbmVkIG1heF9hZnRlcl9iYXNlOiAxOwoKICB1bnNpZ25lZCBv
ZmZzZXRfdW5zaWduZWQ6IDE7CiAgdW5zaWduZWQgOiAyOwogIHVuc2lnbmVkIHNjYWxlIDogODsK
fSBhZGRyX2RpZmZfdmVjX2ZsYWdzOwoKCgp0eXBlZGVmIHVuaW9uIHJ0dW5pb25fZGVmCnsKICBp
bnQgcnR3aW50OwogIGludCBydGludDsKICB1bnNpZ25lZCBpbnQgcnR1aW50OwogIGNvbnN0IGNo
YXIgKnJ0c3RyOwogIHN0cnVjdCBydHhfZGVmICpydHg7CiAgc3RydWN0IHJ0dmVjX2RlZiAqcnR2
ZWM7CiAgZW51bSBtYWNoaW5lX21vZGUgcnR0eXBlOwogIGFkZHJfZGlmZl92ZWNfZmxhZ3MgcnRf
YWRkcl9kaWZmX3ZlY19mbGFnczsKICBzdHJ1Y3QgY3NlbGliX3ZhbF9zdHJ1Y3QgKnJ0X2NzZWxp
YjsKICBzdHJ1Y3QgYml0bWFwX2hlYWRfZGVmICpydGJpdDsKICB1bmlvbiB0cmVlX25vZGUgKnJ0
dHJlZTsKICBzdHJ1Y3QgYmFzaWNfYmxvY2tfZGVmICpiYjsKfSBydHVuaW9uOwoKCgp0eXBlZGVm
IHN0cnVjdCBydHhfZGVmCnsKCiAgZW51bSBydHhfY29kZSBjb2RlOiAxNjsKCgogIGVudW0gbWFj
aGluZV9tb2RlIG1vZGUgOiA4OwoKCgoKICB1bnNpZ25lZCBpbnQganVtcCA6IDE7CgoKICB1bnNp
Z25lZCBpbnQgY2FsbCA6IDE7CiMgMTI5ICIuLi8uLi9nY2MvZ2NjL3J0bC5oIgogIHVuc2lnbmVk
IGludCB1bmNoYW5naW5nIDogMTsKCgoKCgoKCiAgdW5zaWduZWQgaW50IHZvbGF0aWwgOiAxOwoj
IDE1NSAiLi4vLi4vZ2NjL2djYy9ydGwuaCIKICB1bnNpZ25lZCBpbnQgaW5fc3RydWN0IDogMTsK
CgoKCgoKICB1bnNpZ25lZCBpbnQgdXNlZCA6IDE7CgoKCiAgdW5zaWduZWQgaW50ZWdyYXRlZCA6
IDE7CgoKCgoKCgogIHVuc2lnbmVkIGZyYW1lX3JlbGF0ZWQgOiAxOwoKCgoKICBydHVuaW9uIGZs
ZFsxXTsKfSAqcnR4OwojIDIwMCAiLi4vLi4vZ2NjL2djYy9ydGwuaCIKdHlwZWRlZiBzdHJ1Y3Qg
cnR2ZWNfZGVmewogIGludCBudW1fZWxlbTsKICBzdHJ1Y3QgcnR4X2RlZiAqZWxlbVsxXTsKfSAq
cnR2ZWM7CiMgNDIwICIuLi8uLi9nY2MvZ2NjL3J0bC5oIgplbnVtIHJlZ19ub3RlCnsKCgoKICBS
RUdfREVBRCA9IDEsCgoKICBSRUdfSU5DLAojIDQzOSAiLi4vLi4vZ2NjL2djYy9ydGwuaCIKICBS
RUdfRVFVSVYsCgoKCgogIFJFR19FUVVBTCwKCgoKCgogIFJFR19XQVNfMCwKCgoKCgogIFJFR19S
RVRWQUwsCgoKCgogIFJFR19MSUJDQUxMLAoKCgoKCgogIFJFR19OT05ORUcsCgoKCiAgUkVHX05P
X0NPTkZMSUNULAoKCiAgUkVHX1VOVVNFRCwKIyA0ODQgIi4uLy4uL2djYy9nY2MvcnRsLmgiCiAg
UkVHX0NDX1NFVFRFUiwgUkVHX0NDX1VTRVIsCgoKCgogIFJFR19MQUJFTCwKCgoKCgogIFJFR19E
RVBfQU5USSwgUkVHX0RFUF9PVVRQVVQsCgoKCgoKICBSRUdfQlJfUFJPQiwKCgoKCiAgUkVHX0VY
RUNfQ09VTlQsCgoKCiAgUkVHX05PQUxJQVMsCgoKCiAgUkVHX1NBVkVfQVJFQSwKCgoKICBSRUdf
QlJfUFJFRCwKCgoKCiAgUkVHX0ZSQU1FX1JFTEFURURfRVhQUiwKCgoKCiAgUkVHX0VIX0NPTlRF
WFQsCgoKCgoKICBSRUdfRUhfUkVHSU9OLAoKCgoKICBSRUdfRUhfUkVUSFJPVywKCgogIFJFR19T
QVZFX05PVEUsCgoKCgoKICBSRUdfTUFZQkVfREVBRCwKCgogIFJFR19OT1JFVFVSTgp9OwojIDU2
MyAiLi4vLi4vZ2NjL2djYy9ydGwuaCIKZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCByZWdfbm90
ZV9uYW1lW107CiMgNjE5ICIuLi8uLi9nY2MvZ2NjL3J0bC5oIgplbnVtIGluc25fbm90ZQp7Cgog
IE5PVEVfSU5TTl9CSUFTID0gLTEwMCwKCgoKICBOT1RFX0lOU05fREVMRVRFRCwKCgoKICBOT1RF
X0lOU05fQkxPQ0tfQkVHLAogIE5PVEVfSU5TTl9CTE9DS19FTkQsCgoKICBOT1RFX0lOU05fTE9P
UF9CRUcsCiAgTk9URV9JTlNOX0xPT1BfRU5ELAoKCiAgTk9URV9JTlNOX0xPT1BfQ09OVCwKCiAg
Tk9URV9JTlNOX0xPT1BfVlRPUCwKCgoKCgoKICBOT1RFX0lOU05fRlVOQ1RJT05fRU5ELAoKCgog
IE5PVEVfSU5TTl9TRVRKTVAsCgoKICBOT1RFX0lOU05fUFJPTE9HVUVfRU5ELAoKCiAgTk9URV9J
TlNOX0VQSUxPR1VFX0JFRywKCgogIE5PVEVfSU5TTl9ERUxFVEVEX0xBQkVMLAoKCgoKICBOT1RF
X0lOU05fRlVOQ1RJT05fQkVHLAoKCgogIE5PVEVfSU5TTl9FSF9SRUdJT05fQkVHLAogIE5PVEVf
SU5TTl9FSF9SRUdJT05fRU5ELAoKCgoKICBOT1RFX0lOU05fUkVQRUFURURfTElORV9OVU1CRVIs
CgoKCiAgTk9URV9JTlNOX1JBTkdFX0JFRywKICBOT1RFX0lOU05fUkFOR0VfRU5ELAoKCiAgTk9U
RV9JTlNOX0xJVkUsCgoKICBOT1RFX0lOU05fQkFTSUNfQkxPQ0ssCgoKCiAgTk9URV9JTlNOX0VY
UEVDVEVEX1ZBTFVFLAoKICBOT1RFX0lOU05fTUFYCn07CgoKCmV4dGVybiBjb25zdCBjaGFyICog
Y29uc3Qgbm90ZV9pbnNuX25hbWVbTk9URV9JTlNOX01BWCAtIE5PVEVfSU5TTl9CSUFTXTsKIyAx
MTEzICIuLi8uLi9nY2MvZ2NjL3J0bC5oIgpleHRlcm4gaW50IHJ0eF9lcXVhbF9mdW5jdGlvbl92
YWx1ZV9tYXR0ZXJzOwoKCmV4dGVybiBpbnQgZ2VuZXJhdGluZ19jb25jYXRfcDsKIyAxMTI4ICIu
Li8uLi9nY2MvZ2NjL3J0bC5oIgpleHRlcm4gaW50IGV4YWN0X2xvZzJfd2lkZSAodW5zaWduZWQg
aW50KTsKZXh0ZXJuIGludCBmbG9vcl9sb2cyX3dpZGUgKHVuc2lnbmVkIGludCk7CgoKZXh0ZXJu
IGludCBjZWlsX2xvZzIgKHVuc2lnbmVkIGludCk7CgoKCgoKCgpleHRlcm4gdm9pZCBzZXRfc3Rh
Y2tfY2hlY2tfbGliZnVuYyAocnR4KTsKZXh0ZXJuIGludCB0cnVuY19pbnRfZm9yX21vZGUgKGlu
dCwgZW51bSBtYWNoaW5lX21vZGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJuIHJ0eCBwbHVzX2NvbnN0YW50
X3dpZGUgKHJ0eCwgaW50KTsKZXh0ZXJuIHJ0eCBwbHVzX2NvbnN0YW50X2Zvcl9vdXRwdXRfd2lk
ZSAocnR4LCBpbnQpOwpleHRlcm4gdm9pZCBvcHRpbWl6ZV9zYXZlX2FyZWFfYWxsb2NhIChydHgp
OwoKCmV4dGVybiBydHggZ2VuX3J0eCAoZW51bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21vZGUs
IC4uLikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJuIHJ0dmVjIGdlbl9ydHZlYyAoaW50LCAuLi4p
OwoKCmV4dGVybiBjaGFyICpwZXJtYWxsb2MgKGludCk7CmV4dGVybiBydHggcnR4X2FsbG9jIChl
bnVtIHJ0eF9jb2RlKTsKZXh0ZXJuIHJ0dmVjIHJ0dmVjX2FsbG9jIChpbnQpOwpleHRlcm4gcnR4
IGNvcHlfaW5zbl8xIChydHgpOwpleHRlcm4gcnR4IGNvcHlfaW5zbiAocnR4KTsKCgpleHRlcm4g
cnR4IGNvcHlfcnR4IChydHgpOwoKCmV4dGVybiBydHggY29weV9ydHhfaWZfc2hhcmVkIChydHgp
OwoKCmV4dGVybiBydHggY29weV9tb3N0X3J0eCAocnR4LCBydHgpOwpleHRlcm4gcnR4IHNoYWxs
b3dfY29weV9ydHggKHJ0eCk7CmV4dGVybiBpbnQgcnR4X2VxdWFsX3AgKHJ0eCwgcnR4KTsKCgpl
eHRlcm4gcnR2ZWMgZ2VuX3J0dmVjX3YgKGludCwgcnR4ICopOwpleHRlcm4gcnR4IGdlbl9yZWdf
cnR4IChlbnVtIG1hY2hpbmVfbW9kZSk7CmV4dGVybiBydHggZ2VuX2xhYmVsX3J0eCAodm9pZCk7
CmV4dGVybiBydHggZ2VuX2xvd3BhcnRfY29tbW9uIChlbnVtIG1hY2hpbmVfbW9kZSwgcnR4KTsK
ZXh0ZXJuIHJ0eCBnZW5fbG93cGFydCAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCk7CgoKZXh0ZXJu
IHJ0eCBnZW5fbG93cGFydF9pZl9wb3NzaWJsZSAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCk7CgoK
ZXh0ZXJuIHJ0eCBnZW5faGlnaHBhcnQgKGVudW0gbWFjaGluZV9tb2RlLCBydHgpOwpleHRlcm4g
cnR4IGdlbl9yZWFscGFydCAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCk7CmV4dGVybiBydHggZ2Vu
X2ltYWdwYXJ0IChlbnVtIG1hY2hpbmVfbW9kZSwgcnR4KTsKZXh0ZXJuIHJ0eCBvcGVyYW5kX3N1
YndvcmQgKHJ0eCwgdW5zaWduZWQgaW50LCBpbnQsIGVudW0gbWFjaGluZV9tb2RlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCgpleHRlcm4gcnR4IG9wZXJhbmRfc3Vid29yZF9mb3JjZSAocnR4LCB1bnNpZ25lZCBp
bnQsIGVudW0gbWFjaGluZV9tb2RlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJuIGludCBzdWJyZWdfbG93
cGFydF9wIChydHgpOwpleHRlcm4gcnR4IG1ha2Vfc2FmZV9mcm9tIChydHgsIHJ0eCk7CmV4dGVy
biBydHggY29udmVydF9tZW1vcnlfYWRkcmVzcyAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCk7CmV4
dGVybiBydHggbWVtb3J5X2FkZHJlc3MgKGVudW0gbWFjaGluZV9tb2RlLCBydHgpOwpleHRlcm4g
cnR4IGdldF9pbnNucyAodm9pZCk7CmV4dGVybiBjb25zdCBjaGFyICpnZXRfaW5zbl9uYW1lIChp
bnQpOwpleHRlcm4gcnR4IGdldF9sYXN0X2luc24gKHZvaWQpOwpleHRlcm4gcnR4IGdldF9sYXN0
X2luc25fYW55d2hlcmUgKHZvaWQpOwpleHRlcm4gdm9pZCBzdGFydF9zZXF1ZW5jZSAodm9pZCk7
CmV4dGVybiB2b2lkIHB1c2hfdG9fc2VxdWVuY2UgKHJ0eCk7CmV4dGVybiB2b2lkIGVuZF9zZXF1
ZW5jZSAodm9pZCk7CmV4dGVybiB2b2lkIHB1c2hfdG9fZnVsbF9zZXF1ZW5jZSAocnR4LCBydHgp
OwpleHRlcm4gdm9pZCBlbmRfZnVsbF9zZXF1ZW5jZSAocnR4KiwgcnR4Kik7CmV4dGVybiBydHgg
Z2VuX3NlcXVlbmNlICh2b2lkKTsKCgpleHRlcm4gcnR4IGltbWVkX2RvdWJsZV9jb25zdCAoaW50
LCBpbnQsIGVudW0gbWFjaGluZV9tb2RlKTsKZXh0ZXJuIHJ0eCBmb3JjZV9jb25zdF9tZW0gKGVu
dW0gbWFjaGluZV9tb2RlLCBydHgpOwoKCmV4dGVybiBydHggZm9yY2VfcmVnIChlbnVtIG1hY2hp
bmVfbW9kZSwgcnR4KTsKCgpleHRlcm4gcnR4IGdldF9wb29sX2NvbnN0YW50IChydHgpOwpleHRl
cm4gZW51bSBtYWNoaW5lX21vZGUgZ2V0X3Bvb2xfbW9kZSAocnR4KTsKZXh0ZXJuIHJ0eCBnZXRf
cG9vbF9jb25zdGFudF9mb3JfZnVuY3Rpb24gKHN0cnVjdCBmdW5jdGlvbiAqLCBydHgpOwpleHRl
cm4gZW51bSBtYWNoaW5lX21vZGUgZ2V0X3Bvb2xfbW9kZV9mb3JfZnVuY3Rpb24gKHN0cnVjdCBm
dW5jdGlvbiAqLCBydHgpOwpleHRlcm4gaW50IGdldF9wb29sX29mZnNldCAocnR4KTsKZXh0ZXJu
IHJ0eCBzaW1wbGlmeV9zdWJ0cmFjdGlvbiAocnR4KTsKCgpleHRlcm4gcnR4IGFzc2lnbl9zdGFj
a19sb2NhbCAoZW51bSBtYWNoaW5lX21vZGUsIGludCwgaW50KQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4g
cnR4IGFzc2lnbl9zdGFja190ZW1wIChlbnVtIG1hY2hpbmVfbW9kZSwgaW50LCBpbnQpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CmV4dGVybiBydHggYXNzaWduX3RlbXAgKHVuaW9uIHRyZWVfbm9kZSAqLCBpbnQsIGlu
dCwgaW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCmV4dGVybiBydHggcHJvdGVjdF9mcm9tX3F1ZXVlIChydHgsIGludCk7
CmV4dGVybiB2b2lkIGVtaXRfcXVldWUgKHZvaWQpOwpleHRlcm4gcnR4IGVtaXRfbW92ZV9pbnNu
IChydHgsIHJ0eCk7CgoKZXh0ZXJuIHJ0eCBlbWl0X2luc25fYmVmb3JlIChydHgsIHJ0eCk7CmV4
dGVybiBydHggZW1pdF9qdW1wX2luc25fYmVmb3JlIChydHgsIHJ0eCk7CmV4dGVybiBydHggZW1p
dF9jYWxsX2luc25fYmVmb3JlIChydHgsIHJ0eCk7CmV4dGVybiBydHggZW1pdF9iYXJyaWVyX2Jl
Zm9yZSAocnR4KTsKZXh0ZXJuIHJ0eCBlbWl0X2xhYmVsX2JlZm9yZSAocnR4LCBydHgpOwpleHRl
cm4gcnR4IGVtaXRfbm90ZV9iZWZvcmUgKGludCwgcnR4KTsKZXh0ZXJuIHJ0eCBlbWl0X2luc25f
YWZ0ZXIgKHJ0eCwgcnR4KTsKZXh0ZXJuIHJ0eCBlbWl0X2p1bXBfaW5zbl9hZnRlciAocnR4LCBy
dHgpOwpleHRlcm4gcnR4IGVtaXRfYmFycmllcl9hZnRlciAocnR4KTsKZXh0ZXJuIHJ0eCBlbWl0
X2xhYmVsX2FmdGVyIChydHgsIHJ0eCk7CmV4dGVybiBydHggZW1pdF9ub3RlX2FmdGVyIChpbnQs
IHJ0eCk7CmV4dGVybiBydHggZW1pdF9saW5lX25vdGVfYWZ0ZXIgKGNvbnN0IGNoYXIgKiwgaW50
LCBydHgpOwpleHRlcm4gcnR4IGVtaXRfaW5zbiAocnR4KTsKZXh0ZXJuIHJ0eCBlbWl0X2luc25z
IChydHgpOwpleHRlcm4gcnR4IGVtaXRfaW5zbnNfYmVmb3JlIChydHgsIHJ0eCk7CmV4dGVybiBy
dHggZW1pdF9pbnNuc19hZnRlciAocnR4LCBydHgpOwpleHRlcm4gcnR4IGVtaXRfanVtcF9pbnNu
IChydHgpOwpleHRlcm4gcnR4IGVtaXRfY2FsbF9pbnNuIChydHgpOwpleHRlcm4gcnR4IGVtaXRf
bGFiZWwgKHJ0eCk7CmV4dGVybiBydHggZW1pdF9iYXJyaWVyICh2b2lkKTsKZXh0ZXJuIHJ0eCBl
bWl0X2xpbmVfbm90ZSAoY29uc3QgY2hhciAqLCBpbnQpOwpleHRlcm4gcnR4IGVtaXRfbm90ZSAo
Y29uc3QgY2hhciAqLCBpbnQpOwpleHRlcm4gcnR4IGVtaXRfbGluZV9ub3RlX2ZvcmNlIChjb25z
dCBjaGFyICosIGludCk7CmV4dGVybiBydHggbWFrZV9pbnNuX3JhdyAocnR4KTsKZXh0ZXJuIHJ0
eCBwcmV2aW91c19pbnNuIChydHgpOwpleHRlcm4gcnR4IG5leHRfaW5zbiAocnR4KTsKZXh0ZXJu
IHJ0eCBwcmV2X25vbm5vdGVfaW5zbiAocnR4KTsKZXh0ZXJuIHJ0eCBuZXh0X25vbm5vdGVfaW5z
biAocnR4KTsKZXh0ZXJuIHJ0eCBwcmV2X3JlYWxfaW5zbiAocnR4KTsKZXh0ZXJuIHJ0eCBuZXh0
X3JlYWxfaW5zbiAocnR4KTsKZXh0ZXJuIHJ0eCBwcmV2X2FjdGl2ZV9pbnNuIChydHgpOwpleHRl
cm4gcnR4IG5leHRfYWN0aXZlX2luc24gKHJ0eCk7CmV4dGVybiBpbnQgYWN0aXZlX2luc25fcCAo
cnR4KTsKZXh0ZXJuIHJ0eCBwcmV2X2xhYmVsIChydHgpOwpleHRlcm4gcnR4IG5leHRfbGFiZWwg
KHJ0eCk7CmV4dGVybiBydHggbmV4dF9jYzBfdXNlciAocnR4KTsKZXh0ZXJuIHJ0eCBwcmV2X2Nj
MF9zZXR0ZXIgKHJ0eCk7CgoKZXh0ZXJuIHJ0eCBuZXh0X25vbmRlbGV0ZWRfaW5zbiAocnR4KTsK
ZXh0ZXJuIGVudW0gcnR4X2NvZGUgcmV2ZXJzZV9jb25kaXRpb24gKGVudW0gcnR4X2NvZGUpOwpl
eHRlcm4gZW51bSBydHhfY29kZSByZXZlcnNlX2NvbmRpdGlvbl9tYXliZV91bm9yZGVyZWQgKGVu
dW0gcnR4X2NvZGUpOwpleHRlcm4gZW51bSBydHhfY29kZSBzd2FwX2NvbmRpdGlvbiAoZW51bSBy
dHhfY29kZSk7CmV4dGVybiBlbnVtIHJ0eF9jb2RlIHVuc2lnbmVkX2NvbmRpdGlvbiAoZW51bSBy
dHhfY29kZSk7CmV4dGVybiBlbnVtIHJ0eF9jb2RlIHNpZ25lZF9jb25kaXRpb24gKGVudW0gcnR4
X2NvZGUpOwoKCmV4dGVybiBydHggZmluZF9lcXVpdl9yZWcgKHJ0eCwgcnR4LCBlbnVtIHJlZ19j
bGFzcywgaW50LCBzaG9ydCAqLCBpbnQsIGVudW0gbWFjaGluZV9tb2RlKTsKCgpleHRlcm4gcnR4
IHNxdWVlemVfbm90ZXMgKHJ0eCwgcnR4KTsKZXh0ZXJuIHJ0eCBkZWxldGVfaW5zbiAocnR4KTsK
ZXh0ZXJuIHZvaWQgZGVsZXRlX2p1bXAgKHJ0eCk7CmV4dGVybiB2b2lkIGRlbGV0ZV9iYXJyaWVy
IChydHgpOwpleHRlcm4gcnR4IGdldF9sYWJlbF9iZWZvcmUgKHJ0eCk7CmV4dGVybiBydHggZ2V0
X2xhYmVsX2FmdGVyIChydHgpOwpleHRlcm4gcnR4IGZvbGxvd19qdW1wcyAocnR4KTsKCgpleHRl
cm4gcnR4IGFkal9vZmZzZXR0YWJsZV9vcGVyYW5kIChydHgsIGludCk7CgoKZXh0ZXJuIHJ0eCB0
cnlfc3BsaXQgKHJ0eCwgcnR4LCBpbnQpOwoKCmV4dGVybiBydHggc3BsaXRfaW5zbnMgKHJ0eCwg
cnR4KTsKCgpleHRlcm4gcnR4IHNpbXBsaWZ5X3VuYXJ5X29wZXJhdGlvbiAoZW51bSBydHhfY29k
ZSwgZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOwpleHRlcm4gcnR4
IHNpbXBsaWZ5X2JpbmFyeV9vcGVyYXRpb24gKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9t
b2RlLCBydHgsIHJ0eCk7CmV4dGVybiBydHggc2ltcGxpZnlfdGVybmFyeV9vcGVyYXRpb24gKGVu
dW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSwgcnR4LCBy
dHgsIHJ0eCk7CmV4dGVybiBydHggc2ltcGxpZnlfcmVsYXRpb25hbF9vcGVyYXRpb24gKGVudW0g
cnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlLCBydHgsIHJ0eCk7CmV4dGVybiBydHggc2ltcGxp
ZnlfZ2VuX2JpbmFyeSAoZW51bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwgcnR4
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CmV4dGVybiBydHggc2ltcGxpZnlfcnR4IChydHgpOwoKCmV4dGVybiBydHggZ2VuX21vdmVf
aW5zbiAocnR4LCBydHgpOwoKZXh0ZXJuIHJ0eCBnZW5fanVtcCAocnR4KTsKZXh0ZXJuIHJ0eCBn
ZW5fYmVxIChydHgpOwpleHRlcm4gcnR4IGdlbl9iZ2UgKHJ0eCk7CmV4dGVybiBydHggZ2VuX2Js
ZSAocnR4KTsKCgpleHRlcm4gcnR4IGdlbl9tZW1fYWRkcmVzc29mIChydHgsIHVuaW9uIHRyZWVf
bm9kZSAqKTsKCgpleHRlcm4gcnR4IGVsaW1pbmF0ZV9jb25zdGFudF90ZXJtIChydHgsIHJ0eCAq
KTsKCgpleHRlcm4gcnR4IGV4cGFuZF9jb21wbGV4X2FicyAoZW51bSBtYWNoaW5lX21vZGUsIHJ0
eCwgcnR4LCBpbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCgpleHRlcm4gZW51bSBtYWNoaW5lX21vZGUgY2hvb3NlX2hhcmRfcmVnX21v
ZGUgKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKZXh0ZXJuIHZv
aWQgc2V0X3VuaXF1ZV9yZWdfbm90ZSAocnR4LCBlbnVtIHJlZ19ub3RlLCBydHgpOwojIDEzNDIg
Ii4uLy4uL2djYy9nY2MvcnRsLmgiCmV4dGVybiBpbnQgcnR4X3Vuc3RhYmxlX3AgKHJ0eCk7CmV4
dGVybiBpbnQgcnR4X3Zhcmllc19wIChydHgpOwpleHRlcm4gaW50IHJ0eF9hZGRyX3Zhcmllc19w
IChydHgpOwpleHRlcm4gaW50IGdldF9pbnRlZ2VyX3Rlcm0gKHJ0eCk7CmV4dGVybiBydHggZ2V0
X3JlbGF0ZWRfdmFsdWUgKHJ0eCk7CmV4dGVybiBpbnQgcmVnX21lbnRpb25lZF9wIChydHgsIHJ0
eCk7CmV4dGVybiBpbnQgY291bnRfb2NjdXJyZW5jZXMgKHJ0eCwgcnR4LCBpbnQpOwpleHRlcm4g
aW50IHJlZ19yZWZlcmVuY2VkX3AgKHJ0eCwgcnR4KTsKZXh0ZXJuIGludCByZWdfdXNlZF9iZXR3
ZWVuX3AgKHJ0eCwgcnR4LCBydHgpOwpleHRlcm4gaW50IHJlZ19yZWZlcmVuY2VkX2JldHdlZW5f
cCAocnR4LCBydHgsIHJ0eCk7CmV4dGVybiBpbnQgcmVnX3NldF9iZXR3ZWVuX3AgKHJ0eCwgcnR4
LCBydHgpOwpleHRlcm4gaW50IHJlZ3Nfc2V0X2JldHdlZW5fcCAocnR4LCBydHgsIHJ0eCk7CmV4
dGVybiBpbnQgbW9kaWZpZWRfYmV0d2Vlbl9wIChydHgsIHJ0eCwgcnR4KTsKZXh0ZXJuIGludCBu
b19sYWJlbHNfYmV0d2Vlbl9wIChydHgsIHJ0eCk7CmV4dGVybiBpbnQgbm9fanVtcHNfYmV0d2Vl
bl9wIChydHgsIHJ0eCk7CmV4dGVybiBpbnQgbW9kaWZpZWRfaW5fcCAocnR4LCBydHgpOwpleHRl
cm4gaW50IGluc25fZGVwZW5kZW50X3AgKHJ0eCwgcnR4KTsKZXh0ZXJuIGludCByZWdfc2V0X3Ag
KHJ0eCwgcnR4KTsKZXh0ZXJuIHJ0eCBzaW5nbGVfc2V0XzEgKHJ0eCk7CmV4dGVybiBpbnQgbXVs
dGlwbGVfc2V0cyAocnR4KTsKZXh0ZXJuIHJ0eCBmaW5kX2xhc3RfdmFsdWUgKHJ0eCwgcnR4ICos
IHJ0eCwgaW50KTsKZXh0ZXJuIGludCByZWZlcnNfdG9fcmVnbm9fcCAodW5zaWduZWQgaW50LCB1
bnNpZ25lZCBpbnQsIHJ0eCwgcnR4ICopCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CmV4dGVybiBpbnQgcmVnX292ZXJsYXBfbWVu
dGlvbmVkX3AgKHJ0eCwgcnR4KTsKZXh0ZXJuIHZvaWQgbm90ZV9zdG9yZXMgKHJ0eCwgdm9pZCAo
KikgKHJ0eCwgcnR4LCB2b2lkICopLCB2b2lkICopCgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CmV4dGVybiBydHggcmVnX3NldF9sYXN0
IChydHgsIHJ0eCk7CmV4dGVybiBpbnQgZGVhZF9vcl9zZXRfcCAocnR4LCBydHgpOwpleHRlcm4g
aW50IGRlYWRfb3Jfc2V0X3JlZ25vX3AgKHJ0eCwgdW5zaWduZWQgaW50KTsKZXh0ZXJuIHJ0eCBm
aW5kX3JlZ19ub3RlIChydHgsIGVudW0gcmVnX25vdGUsIHJ0eCk7CmV4dGVybiBydHggZmluZF9y
ZWdub19ub3RlIChydHgsIGVudW0gcmVnX25vdGUsIHVuc2lnbmVkIGludCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRl
cm4gaW50IGZpbmRfcmVnX2Z1c2FnZSAocnR4LCBlbnVtIHJ0eF9jb2RlLCBydHgpOwpleHRlcm4g
aW50IGZpbmRfcmVnbm9fZnVzYWdlIChydHgsIGVudW0gcnR4X2NvZGUsIHVuc2lnbmVkIGludCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwpleHRlcm4gdm9pZCByZW1vdmVfbm90ZSAocnR4LCBydHgpOwpleHRlcm4gaW50IHNp
ZGVfZWZmZWN0c19wIChydHgpOwpleHRlcm4gaW50IHZvbGF0aWxlX3JlZnNfcCAocnR4KTsKZXh0
ZXJuIGludCB2b2xhdGlsZV9pbnNuX3AgKHJ0eCk7CmV4dGVybiBpbnQgbWF5X3RyYXBfcCAocnR4
KTsKZXh0ZXJuIGludCBpbmVxdWFsaXR5X2NvbXBhcmlzb25zX3AgKHJ0eCk7CmV4dGVybiBydHgg
cmVwbGFjZV9ydHggKHJ0eCwgcnR4LCBydHgpOwpleHRlcm4gcnR4IHJlcGxhY2VfcmVncyAocnR4
LCBydHggKiwgdW5zaWduZWQgaW50LCBpbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJuIGludCBjb21wdXRlZF9qdW1wX3AgKHJ0
eCk7CnR5cGVkZWYgaW50ICgqcnR4X2Z1bmN0aW9uKSAocnR4ICosIHZvaWQgKik7CmV4dGVybiBp
bnQgZm9yX2VhY2hfcnR4IChydHggKiwgcnR4X2Z1bmN0aW9uLCB2b2lkICopOwpleHRlcm4gcnR4
IHJlZ25vX3VzZV9pbiAodW5zaWduZWQgaW50LCBydHgpOwpleHRlcm4gaW50IGF1dG9faW5jX3Ag
KHJ0eCk7CmV4dGVybiB2b2lkIHJlbW92ZV9ub2RlX2Zyb21fZXhwcl9saXN0IChydHgsIHJ0eCAq
KTsKZXh0ZXJuIGludCBpbnNuc19zYWZlX3RvX21vdmVfcCAocnR4LCBydHgsIHJ0eCAqKTsKZXh0
ZXJuIGludCBsb2NfbWVudGlvbmVkX2luX3AgKHJ0eCAqLCBydHgpOwoKCgpleHRlcm4gcnR4IGZp
bmRfdXNlX2FzX2FkZHJlc3MgKHJ0eCwgcnR4LCBpbnQpOwp2b2lkIGluaXRfRVhQUl9JTlNOX0xJ
U1RfY2FjaGUgKHZvaWQpOwp2b2lkIGZyZWVfRVhQUl9MSVNUX2xpc3QgKHJ0eCAqKTsKdm9pZCBm
cmVlX0lOU05fTElTVF9saXN0IChydHggKik7CnZvaWQgZnJlZV9FWFBSX0xJU1Rfbm9kZSAocnR4
KTsKdm9pZCBmcmVlX0lOU05fTElTVF9ub2RlIChydHgpOwpydHggYWxsb2NfSU5TTl9MSVNUIChy
dHgsIHJ0eCk7CnJ0eCBhbGxvY19FWFBSX0xJU1QgKGludCwgcnR4LCBydHgpOwp2b2lkIGNsZWFy
X2xvZ19saW5rcyAocnR4KTsKCgoKCgoKCmV4dGVybiBpbnQgbWF4X3BhcmFsbGVsOwoKCmV4dGVy
biB2b2lkIGZyZWVfcmVnX2luZm8gKHZvaWQpOwoKCmV4dGVybiBpbnQgYXNtX25vcGVyYW5kcyAo
cnR4KTsKZXh0ZXJuIGNvbnN0IGNoYXIgKmRlY29kZV9hc21fb3BlcmFuZHMgKHJ0eCwgcnR4ICos
IHJ0eCAqKiwgY29uc3QgY2hhciAqKiwgZW51bSBtYWNoaW5lX21vZGUgKikKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKZXh0ZXJuIGVudW0gcmVnX2NsYXNzIHJlZ19wcmVmZXJyZWRfY2xhc3MgKGludCk7CmV4dGVy
biBlbnVtIHJlZ19jbGFzcyByZWdfYWx0ZXJuYXRlX2NsYXNzIChpbnQpOwoKZXh0ZXJuIHJ0eCBn
ZXRfZmlyc3Rfbm9ucGFybV9pbnNuICh2b2lkKTsKCmV4dGVybiB2b2lkIHNwbGl0X2FsbF9pbnNu
cyAoaW50KTsKCgpleHRlcm4gcnR4IGNvbnN0X2ludF9ydHhbNjQgKiAyICsgMV07CgoKCgoKZXh0
ZXJuIHJ0eCBjb25zdF90cnVlX3J0eDsKCmV4dGVybiBydHggY29uc3RfdGlueV9ydHhbM11bKGlu
dCkgTUFYX01BQ0hJTkVfTU9ERV07CiMgMTQ2NCAiLi4vLi4vZ2NjL2djYy9ydGwuaCIKZW51bSBn
bG9iYWxfcnRsX2luZGV4CnsKICBHUl9QQywKICBHUl9DQzAsCiAgR1JfU1RBQ0tfUE9JTlRFUiwK
ICBHUl9GUkFNRV9QT0lOVEVSLAojIDE0NzkgIi4uLy4uL2djYy9nY2MvcnRsLmgiCiAgR1JfSEFS
RF9GUkFNRV9QT0lOVEVSLAoKCgoKCiAgR1JfQVJHX1BPSU5URVIsCgoKICBHUl9WSVJUVUFMX0lO
Q09NSU5HX0FSR1MsCiAgR1JfVklSVFVBTF9TVEFDS19BUkdTLAogIEdSX1ZJUlRVQUxfU1RBQ0tf
RFlOQU1JQywKICBHUl9WSVJUVUFMX09VVEdPSU5HX0FSR1MsCiAgR1JfVklSVFVBTF9DRkEsCgog
IEdSX01BWAp9OwoKCmV4dGVybiBydHggZ2xvYmFsX3J0bFtHUl9NQVhdOwojIDE1MTIgIi4uLy4u
L2djYy9nY2MvcnRsLmgiCmV4dGVybiBydHggcGljX29mZnNldF90YWJsZV9ydHg7CmV4dGVybiBy
dHggc3RydWN0X3ZhbHVlX3J0eDsKZXh0ZXJuIHJ0eCBzdHJ1Y3RfdmFsdWVfaW5jb21pbmdfcnR4
OwpleHRlcm4gcnR4IHN0YXRpY19jaGFpbl9ydHg7CmV4dGVybiBydHggc3RhdGljX2NoYWluX2lu
Y29taW5nX3J0eDsKZXh0ZXJuIHJ0eCByZXR1cm5fYWRkcmVzc19wb2ludGVyX3J0eDsKCgoKCiMg
MSAiZ2VucnRsLmgiIDEKCgpleHRlcm4gcnR4IGdlbl9ydHhfZm10X2VlIChlbnVtIHJ0eF9jb2Rl
LCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBydHggYXJnMCwgcnR4IGFyZzEpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4g
cnR4IGdlbl9ydHhfZm10X3VlIChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2Rl
LCBydHggYXJnMCwgcnR4IGFyZzEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4gcnR4IGdlbl9ydHhfZm10X2lzcyAoZW51
bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgaW50IGFyZzAsIGNvbnN0IGNoYXIg
KmFyZzEsIGNvbnN0IGNoYXIgKmFyZzIpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CmV4dGVybiBydHggZ2VuX3J0eF9mbXRfaXMgKGVu
dW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIGludCBhcmcwLCBjb25zdCBjaGFy
ICphcmcxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwpleHRlcm4gcnR4IGdlbl9ydHhfZm10X2kgKGVudW0gcnR4X2Nv
ZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIGludCBhcmcwKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4gcnR4IGdlbl9ydHhfZm10X2lz
RSAoZW51bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgaW50IGFyZzAsIGNvbnN0
IGNoYXIgKmFyZzEsIHJ0dmVjIGFyZzIpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CmV4dGVybiBydHggZ2VuX3J0eF9mbXRfaUUgKGVudW0gcnR4
X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIGludCBhcmcwLCBydHZlYyBhcmcxKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwpleHRlcm4gcnR4IGdlbl9ydHhfZm10X0VzcyAoZW51bSBydHhfY29kZSwgZW51bSBtYWNoaW5l
X21vZGUgbW9kZSwgcnR2ZWMgYXJnMCwgY29uc3QgY2hhciAqYXJnMSwgY29uc3QgY2hhciAqYXJn
MikKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9zRXNzIChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1h
Y2hpbmVfbW9kZSBtb2RlLCBjb25zdCBjaGFyICphcmcwLCBydHZlYyBhcmcxLCBjb25zdCBjaGFy
ICphcmcyLCBjb25zdCBjaGFyICphcmczKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4gcnR4
IGdlbl9ydHhfZm10X2VFIChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBy
dHggYXJnMCwgcnR2ZWMgYXJnMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9FIChlbnVt
IHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBydHZlYyBhcmcwKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CmV4dGVybiBydHggZ2Vu
X3J0eF9mbXRfZSAoZW51bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgcnR4IGFy
ZzApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CmV4
dGVybiBydHggZ2VuX3J0eF9mbXRfc3NlIChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9k
ZSBtb2RlLCBjb25zdCBjaGFyICphcmcwLCBjb25zdCBjaGFyICphcmcxLCBydHggYXJnMikKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CmV4dGVybiBy
dHggZ2VuX3J0eF9mbXRfcyAoZW51bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwg
Y29uc3QgY2hhciAqYXJnMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwpleHRlcm4gcnR4IGdlbl9ydHhfZm10X3NzIChlbnVtIHJ0eF9j
b2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBjb25zdCBjaGFyICphcmcwLCBjb25zdCBjaGFy
ICphcmcxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CmV4dGVybiBydHggZ2VuX3J0eF9mbXRfc0UgKGVu
dW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIGNvbnN0IGNoYXIgKmFyZzAsIHJ0
dmVjIGFyZzEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9pdXVlaWVlIChl
bnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBpbnQgYXJnMCwgcnR4IGFyZzEs
IHJ0eCBhcmcyLCBydHggYXJnMywgaW50IGFyZzQsIHJ0eCBhcmc1LCBydHggYXJnNikKCgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4gcnR4
IGdlbl9ydHhfZm10X2l1dWVpZWUwIChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBt
b2RlLCBpbnQgYXJnMCwgcnR4IGFyZzEsIHJ0eCBhcmcyLCBydHggYXJnMywgaW50IGFyZzQsIHJ0
eCBhcmc1LCBydHggYXJnNikKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwpleHRlcm4gcnR4IGdlbl9ydHhfZm10X2l1dWVpZWVlIChlbnVtIHJ0eF9j
b2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBpbnQgYXJnMCwgcnR4IGFyZzEsIHJ0eCBhcmcy
LCBydHggYXJnMywgaW50IGFyZzQsIHJ0eCBhcmc1LCBydHggYXJnNiwgcnR4IGFyZzcpCgoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CmV4dGVybiBydHggZ2VuX3J0eF9mbXRfaXV1IChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVf
bW9kZSBtb2RlLCBpbnQgYXJnMCwgcnR4IGFyZzEsIHJ0eCBhcmcyKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CmV4
dGVybiBydHggZ2VuX3J0eF9mbXRfaXV1MDBpc3MgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGlu
ZV9tb2RlIG1vZGUsIGludCBhcmcwLCBydHggYXJnMSwgcnR4IGFyZzIsIGludCBhcmczLCBjb25z
dCBjaGFyICphcmc0LCBjb25zdCBjaGFyICphcmc1KQoKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJuIHJ0eCBnZW5fcnR4X2Zt
dF9zc2lFRXNpIChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBjb25zdCBj
aGFyICphcmcwLCBjb25zdCBjaGFyICphcmcxLCBpbnQgYXJnMiwgcnR2ZWMgYXJnMywgcnR2ZWMg
YXJnNCwgY29uc3QgY2hhciAqYXJnNSwgaW50IGFyZzYpCgoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJuIHJ0
eCBnZW5fcnR4X2ZtdF9FaSAoZW51bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwg
cnR2ZWMgYXJnMCwgaW50IGFyZzEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CmV4dGVybiBydHggZ2VuX3J0eF9mbXRfZUVlZTAg
KGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIHJ0eCBhcmcwLCBydHZlYyBh
cmcxLCBydHggYXJnMiwgcnR4IGFyZzMpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwpleHRlcm4gcnR4IGdlbl9ydHhfZm10XyAoZW51bSBydHhfY29k
ZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSk7CmV4dGVybiBydHggZ2VuX3J0eF9mbXRfdyAoZW51
bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgaW50IGFyZzApCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4g
cnR4IGdlbl9ydHhfZm10X2Uwd3d3IChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBt
b2RlLCBydHggYXJnMCwgaW50IGFyZzEsIGludCBhcmcyLCBpbnQgYXJnMykKCgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJu
IHJ0eCBnZW5fcnR4X2ZtdF8wIChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2Rl
KTsKZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9pMCAoZW51bSBydHhfY29kZSwgZW51bSBtYWNoaW5l
X21vZGUgbW9kZSwgaW50IGFyZzApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CmV4dGVybiBydHggZ2VuX3J0eF9mbXRfZWkgKGVudW0gcnR4X2NvZGUs
IGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIHJ0eCBhcmcwLCBpbnQgYXJnMSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CmV4dGVybiBy
dHggZ2VuX3J0eF9mbXRfZTAgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUs
IHJ0eCBhcmcwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwpleHRlcm4gcnR4IGdlbl9ydHhfZm10X3UwMCAoZW51bSBydHhfY29kZSwgZW51bSBtYWNo
aW5lX21vZGUgbW9kZSwgcnR4IGFyZzApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CmV4dGVybiBydHggZ2VuX3J0eF9mbXRfZWl0IChlbnVtIHJ0eF9j
b2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBydHggYXJnMCwgaW50IGFyZzEsIHVuaW9uIHRy
ZWVfbm9kZSAqYXJnMikKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4gcnR4IGdlbl9ydHhfZm10X2VlZWVlIChlbnVt
IHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBydHggYXJnMCwgcnR4IGFyZzEsIHJ0
eCBhcmcyLCBydHggYXJnMywgcnR4IGFyZzQpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9l
ZWUgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIHJ0eCBhcmcwLCBydHgg
YXJnMSwgcnR4IGFyZzIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF9FZSAo
ZW51bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgcnR2ZWMgYXJnMCwgcnR4IGFy
ZzEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CmV4dGVybiBydHggZ2VuX3J0eF9mbXRfdXVFaWlpaWlpYmJpaSAoZW51bSBydHhf
Y29kZSwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwgcnR4IGFyZzAsIHJ0eCBhcmcxLCBydHZlYyBh
cmcyLCBpbnQgYXJnMywgaW50IGFyZzQsIGludCBhcmc1LCBpbnQgYXJnNiwgaW50IGFyZzcsIGlu
dCBhcmc4LCBzdHJ1Y3QgYml0bWFwX2hlYWRfZGVmICphcmc5LCBzdHJ1Y3QgYml0bWFwX2hlYWRf
ZGVmICphcmcxMCwgaW50IGFyZzExLCBpbnQgYXJnMTIpCgoKCgoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJuIHJ0eCBn
ZW5fcnR4X2ZtdF9paWlpaWlpaXR0IChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBt
b2RlLCBpbnQgYXJnMCwgaW50IGFyZzEsIGludCBhcmcyLCBpbnQgYXJnMywgaW50IGFyZzQsIGlu
dCBhcmc1LCBpbnQgYXJnNiwgaW50IGFyZzcsIHVuaW9uIHRyZWVfbm9kZSAqYXJnOCwgdW5pb24g
dHJlZV9ub2RlICphcmc5KQoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CmV4dGVybiBydHggZ2VuX3J0eF9mbXRfZXRpIChl
bnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBydHggYXJnMCwgdW5pb24gdHJl
ZV9ub2RlICphcmcxLCBpbnQgYXJnMikKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CmV4dGVybiBydHggZ2VuX3J0eF9mbXRfYmkgKGVudW0gcnR4X2Nv
ZGUsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsIHN0cnVjdCBiaXRtYXBfaGVhZF9kZWYgKmFyZzAs
IGludCBhcmcxKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKZXh0ZXJuIHJ0eCBnZW5fcnR4X2ZtdF91dXV1IChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1h
Y2hpbmVfbW9kZSBtb2RlLCBydHggYXJnMCwgcnR4IGFyZzEsIHJ0eCBhcmcyLCBydHggYXJnMykK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgMTUy
MyAiLi4vLi4vZ2NjL2djYy9ydGwuaCIgMgoKCgoKCgoKZXh0ZXJuIHJ0eCBnZW5fcnR4X0NPTlNU
X0RPVUJMRSAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwgaW50LCBpbnQpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ZXh0ZXJuIHJ0eCBnZW5fcnR4X0NPTlNUX0lOVCAoZW51bSBtYWNoaW5lX21vZGUsIGludCk7CmV4
dGVybiBydHggZ2VuX3J0eF9SRUcgKGVudW0gbWFjaGluZV9tb2RlLCBpbnQpOwpleHRlcm4gcnR4
IGdlbl9ydHhfTUVNIChlbnVtIG1hY2hpbmVfbW9kZSwgcnR4KTsKIyAxNTkyICIuLi8uLi9nY2Mv
Z2NjL3J0bC5oIgpleHRlcm4gcnR4IGZpbmRfbmV4dF9yZWYgKHJ0eCwgcnR4KTsKZXh0ZXJuIHJ0
eCAqZmluZF9zaW5nbGVfdXNlIChydHgsIHJ0eCwgcnR4ICopOwoKZXh0ZXJuIHJ0eCBvdXRwdXRf
Y29uc3RhbnRfZGVmICh1bmlvbiB0cmVlX25vZGUgKiwgaW50KTsKZXh0ZXJuIHJ0eCBpbW1lZF9y
ZWFsX2NvbnN0ICh1bmlvbiB0cmVlX25vZGUgKik7CmV4dGVybiB1bmlvbiB0cmVlX25vZGUgKm1h
a2VfdHJlZSAodW5pb24gdHJlZV9ub2RlICosIHJ0eCk7CiMgMTYwNyAiLi4vLi4vZ2NjL2djYy9y
dGwuaCIKZXh0ZXJuIGludCBmbG93Ml9jb21wbGV0ZWQ7CgoKCgpleHRlcm4gaW50IHJlbG9hZF9j
b21wbGV0ZWQ7CgoKCgpleHRlcm4gaW50IHJlbG9hZF9pbl9wcm9ncmVzczsKCgoKCgoKCmV4dGVy
biBpbnQgY3NlX25vdF9leHBlY3RlZDsKCgoKZXh0ZXJuIGludCBub19uZXdfcHNldWRvczsKCgoK
CgpleHRlcm4gaW50IHJ0eF90b190cmVlX2NvZGUgKGVudW0gcnR4X2NvZGUpOwoKCnN0cnVjdCBv
YnN0YWNrOwpleHRlcm4gdm9pZCBnY2Nfb2JzdGFja19pbml0IChzdHJ1Y3Qgb2JzdGFjayAqKTsK
CgpzdHJ1Y3QgY3NlX2Jhc2ljX2Jsb2NrX2RhdGE7CiMgMTY1MyAiLi4vLi4vZ2NjL2djYy9ydGwu
aCIKZXh0ZXJuIGludCBydHhfY29zdCAocnR4LCBlbnVtIHJ0eF9jb2RlKTsKZXh0ZXJuIGludCBh
ZGRyZXNzX2Nvc3QgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOwpleHRlcm4gdm9pZCBkZWxldGVf
dHJpdmlhbGx5X2RlYWRfaW5zbnMgKHJ0eCwgaW50KTsKCmV4dGVybiBpbnQgY3NlX21haW4gKHJ0
eCwgaW50LCBpbnQsIEZJTEUgKik7CgpleHRlcm4gdm9pZCBjc2VfZW5kX29mX2Jhc2ljX2Jsb2Nr
IChydHgsIHN0cnVjdCBjc2VfYmFzaWNfYmxvY2tfZGF0YSAqLCBpbnQsIGludCwgaW50KQoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKCmV4dGVybiBpbnQgY29tcGFyaXNvbl9kb21pbmF0ZXNfcCAoZW51bSBydHhfY29kZSwg
ZW51bSBydHhfY29kZSk7CmV4dGVybiBpbnQgY29uZGp1bXBfcCAocnR4KTsKZXh0ZXJuIGludCBh
bnlfY29uZGp1bXBfcCAocnR4KTsKZXh0ZXJuIGludCBhbnlfdW5jb25kanVtcF9wIChydHgpOwpl
eHRlcm4gaW50IHNhZmVfdG9fcmVtb3ZlX2p1bXBfcCAocnR4KTsKZXh0ZXJuIHJ0eCBwY19zZXQg
KHJ0eCk7CmV4dGVybiBydHggY29uZGp1bXBfbGFiZWwgKHJ0eCk7CmV4dGVybiBpbnQgc2ltcGxl
anVtcF9wIChydHgpOwpleHRlcm4gaW50IHJldHVybmp1bXBfcCAocnR4KTsKZXh0ZXJuIGludCBv
bmx5anVtcF9wIChydHgpOwpleHRlcm4gaW50IHNldHNfY2MwX3AgKHJ0eCk7CmV4dGVybiBpbnQg
aW52ZXJ0X2p1bXBfMSAocnR4LCBydHgpOwpleHRlcm4gaW50IGludmVydF9qdW1wIChydHgsIHJ0
eCwgaW50KTsKZXh0ZXJuIGludCBydHhfcmVudW1iZXJlZF9lcXVhbF9wIChydHgsIHJ0eCk7CmV4
dGVybiBpbnQgdHJ1ZV9yZWdudW0gKHJ0eCk7CmV4dGVybiBpbnQgcmVkaXJlY3RfanVtcF8xIChy
dHgsIHJ0eCk7CmV4dGVybiBpbnQgcmVkaXJlY3RfanVtcCAocnR4LCBydHgsIGludCk7CmV4dGVy
biB2b2lkIGp1bXBfb3B0aW1pemUgKHJ0eCwgaW50LCBpbnQsIGludCk7CmV4dGVybiB2b2lkIGp1
bXBfb3B0aW1pemVfbWluaW1hbCAocnR4KTsKZXh0ZXJuIHZvaWQgcmVidWlsZF9qdW1wX2xhYmVs
cyAocnR4KTsKZXh0ZXJuIHZvaWQgdGhyZWFkX2p1bXBzIChydHgsIGludCwgaW50KTsKZXh0ZXJu
IGludCBydHhfZXF1YWxfZm9yX3RocmVhZF9wIChydHgsIHJ0eCwgcnR4KTsKZXh0ZXJuIGludCBj
YW5fcmV2ZXJzZV9jb21wYXJpc29uX3AgKHJ0eCwgcnR4KTsKZXh0ZXJuIHZvaWQgZGVsZXRlX2Zv
cl9wZWVwaG9sZSAocnR4LCBydHgpOwpleHRlcm4gaW50IGNvbmRqdW1wX2luX3BhcmFsbGVsX3Ag
KHJ0eCk7CmV4dGVybiB2b2lkIG5ldmVyX3JlYWNoZWRfd2FybmluZyAocnR4KTsKIyAxNjk4ICIu
Li8uLi9nY2MvZ2NjL3J0bC5oIgpleHRlcm4gaW50IG1heF9yZWdfbnVtICh2b2lkKTsKZXh0ZXJu
IGludCBtYXhfbGFiZWxfbnVtICh2b2lkKTsKZXh0ZXJuIGludCBnZXRfZmlyc3RfbGFiZWxfbnVt
ICh2b2lkKTsKZXh0ZXJuIHZvaWQgZGVsZXRlX2luc25zX3NpbmNlIChydHgpOwpleHRlcm4gdm9p
ZCBtYXJrX3JlZ19wb2ludGVyIChydHgsIGludCk7CmV4dGVybiB2b2lkIG1hcmtfdXNlcl9yZWcg
KHJ0eCk7CmV4dGVybiB2b2lkIHJlc2V0X3VzZWRfZmxhZ3MgKHJ0eCk7CmV4dGVybiB2b2lkIHJl
b3JkZXJfaW5zbnMgKHJ0eCwgcnR4LCBydHgpOwpleHRlcm4gaW50IGdldF9tYXhfdWlkICh2b2lk
KTsKZXh0ZXJuIGludCBpbl9zZXF1ZW5jZV9wICh2b2lkKTsKZXh0ZXJuIHZvaWQgZm9yY2VfbmV4
dF9saW5lX25vdGUgKHZvaWQpOwpleHRlcm4gdm9pZCBjbGVhcl9lbWl0X2NhY2hlcyAodm9pZCk7
CmV4dGVybiB2b2lkIGluaXRfZW1pdCAodm9pZCk7CmV4dGVybiB2b2lkIGluaXRfZW1pdF9vbmNl
IChpbnQpOwpleHRlcm4gdm9pZCBwdXNoX3RvcG1vc3Rfc2VxdWVuY2UgKHZvaWQpOwpleHRlcm4g
dm9pZCBwb3BfdG9wbW9zdF9zZXF1ZW5jZSAodm9pZCk7CmV4dGVybiBpbnQgc3VicmVnX3JlYWxw
YXJ0X3AgKHJ0eCk7CmV4dGVybiB2b2lkIHJldmVyc2VfY29tcGFyaXNvbiAocnR4KTsKZXh0ZXJu
IHZvaWQgc2V0X25ld19maXJzdF9hbmRfbGFzdF9pbnNuIChydHgsIHJ0eCk7CmV4dGVybiB2b2lk
IHNldF9uZXdfZmlyc3RfYW5kX2xhc3RfbGFiZWxfbnVtIChpbnQsIGludCk7CmV4dGVybiB2b2lk
IHNldF9uZXdfbGFzdF9sYWJlbF9udW0gKGludCk7CmV4dGVybiB2b2lkIHVuc2hhcmVfYWxsX3J0
bF9hZ2FpbiAocnR4KTsKZXh0ZXJuIHZvaWQgc2V0X2xhc3RfaW5zbiAocnR4KTsKZXh0ZXJuIHZv
aWQgbGlua19jYzBfaW5zbnMgKHJ0eCk7CmV4dGVybiB2b2lkIGFkZF9pbnNuIChydHgpOwpleHRl
cm4gdm9pZCBhZGRfaW5zbl9iZWZvcmUgKHJ0eCwgcnR4KTsKZXh0ZXJuIHZvaWQgYWRkX2luc25f
YWZ0ZXIgKHJ0eCwgcnR4KTsKZXh0ZXJuIHZvaWQgcmVtb3ZlX2luc24gKHJ0eCk7CmV4dGVybiB2
b2lkIHJlb3JkZXJfaW5zbnNfd2l0aF9saW5lX25vdGVzIChydHgsIHJ0eCwgcnR4KTsKZXh0ZXJu
IHZvaWQgZW1pdF9pbnNuX2FmdGVyX3dpdGhfbGluZV9ub3RlcyAocnR4LCBydHgsIHJ0eCk7CmV4
dGVybiBlbnVtIHJ0eF9jb2RlIGNsYXNzaWZ5X2luc24gKHJ0eCk7CmV4dGVybiBydHggZW1pdCAo
cnR4KTsKCgoKaW50IGZvcmNlX2xpbmVfbnVtYmVycyAodm9pZCk7CnZvaWQgcmVzdG9yZV9saW5l
X251bWJlcl9zdGF0dXMgKGludCBvbGRfdmFsdWUpOwpleHRlcm4gdm9pZCByZW51bWJlcl9pbnNu
cyAoRklMRSAqKTsKZXh0ZXJuIHZvaWQgcmVtb3ZlX3VubmVjZXNzYXJ5X25vdGVzICh2b2lkKTsK
CgpleHRlcm4gdm9pZCBhZGRfY2xvYmJlcnMgKHJ0eCwgaW50KTsKCgpleHRlcm4gaW50IGNvbWJp
bmVfaW5zdHJ1Y3Rpb25zIChydHgsIHVuc2lnbmVkIGludCk7CmV4dGVybiB1bnNpZ25lZCBpbnQg
ZXh0ZW5kZWRfY291bnQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUsIGludCk7CmV4dGVybiBydHgg
cmVtb3ZlX2RlYXRoICh1bnNpZ25lZCBpbnQsIHJ0eCk7CgpleHRlcm4gdm9pZCBkdW1wX2NvbWJp
bmVfc3RhdHMgKEZJTEUgKik7CmV4dGVybiB2b2lkIGR1bXBfY29tYmluZV90b3RhbF9zdGF0cyAo
RklMRSAqKTsKCgoKCmV4dGVybiB2b2lkIHNjaGVkdWxlX2luc25zIChGSUxFICopOwoKZXh0ZXJu
IHZvaWQgZml4X3NjaGVkX3BhcmFtIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CgoKZXh0
ZXJuIGNvbnN0IGNoYXIgKnByaW50X3J0eF9oZWFkOwpleHRlcm4gdm9pZCBkZWJ1Z19ydHggKHJ0
eCk7CmV4dGVybiB2b2lkIGRlYnVnX3J0eF9saXN0IChydHgsIGludCk7CmV4dGVybiB2b2lkIGRl
YnVnX3J0eF9yYW5nZSAocnR4LCBydHgpOwpleHRlcm4gcnR4IGRlYnVnX3J0eF9maW5kIChydHgs
IGludCk7CgpleHRlcm4gdm9pZCBwcmludF9ydGwgKEZJTEUgKiwgcnR4KTsKZXh0ZXJuIGludCBw
cmludF9ydGxfc2luZ2xlIChGSUxFICosIHJ0eCk7CmV4dGVybiB2b2lkIHByaW50X2lubGluZV9y
dHggKEZJTEUgKiwgcnR4LCBpbnQpOwoKCgpleHRlcm4gdm9pZCBpbml0X2xvb3AgKHZvaWQpOwpl
eHRlcm4gcnR4IGxpYmNhbGxfb3RoZXJfcmVnIChydHgsIHJ0eCk7CgpleHRlcm4gdm9pZCBsb29w
X29wdGltaXplIChydHgsIEZJTEUgKiwgaW50KTsKCmV4dGVybiB2b2lkIHJlY29yZF9leGNlc3Nf
cmVncyAocnR4LCBydHgsIHJ0eCAqKTsKCgpleHRlcm4gdm9pZCByZXBvc2l0aW9uX3Byb2xvZ3Vl
X2FuZF9lcGlsb2d1ZV9ub3RlcyAocnR4KTsKZXh0ZXJuIHZvaWQgdGhyZWFkX3Byb2xvZ3VlX2Fu
ZF9lcGlsb2d1ZV9pbnNucyAocnR4KTsKZXh0ZXJuIGludCBwcm9sb2d1ZV9lcGlsb2d1ZV9jb250
YWlucyAocnR4KTsKZXh0ZXJuIGludCBzaWJjYWxsX2VwaWxvZ3VlX2NvbnRhaW5zIChydHgpOwpl
eHRlcm4gaW50IGdldF9mcmFtZV9zaXplICh2b2lkKTsKZXh0ZXJuIHZvaWQgcHJlc2VydmVfcnRs
X2V4cHJfcmVzdWx0IChydHgpOwpleHRlcm4gdm9pZCBtYXJrX3RlbXBfYWRkcl90YWtlbiAocnR4
KTsKZXh0ZXJuIHZvaWQgdXBkYXRlX3RlbXBfc2xvdF9hZGRyZXNzIChydHgsIHJ0eCk7CmV4dGVy
biB2b2lkIHB1cmdlX2FkZHJlc3NvZiAocnR4KTsKZXh0ZXJuIHZvaWQgcHVyZ2VfaGFyZF9zdWJy
ZWdfc2V0cyAocnR4KTsKCgpleHRlcm4gaW50IG9wZXJhbmRzX21hdGNoX3AgKHJ0eCwgcnR4KTsK
ZXh0ZXJuIGludCBzYWZlX2Zyb21fZWFybHljbG9iYmVyIChydHgsIHJ0eCk7CgoKZXh0ZXJuIHZv
aWQgc2V0X2ZpbGVfYW5kX2xpbmVfZm9yX3N0bXQgKGNvbnN0IGNoYXIgKiwgaW50KTsKZXh0ZXJu
IHZvaWQgZXhwYW5kX251bGxfcmV0dXJuICh2b2lkKTsKZXh0ZXJuIHZvaWQgZW1pdF9qdW1wIChy
dHgpOwpleHRlcm4gaW50IHByZXNlcnZlX3N1YmV4cHJlc3Npb25zX3AgKHZvaWQpOwoKCmV4dGVy
biB2b2lkIGluaXRfZXhwcl9vbmNlICh2b2lkKTsKZXh0ZXJuIHZvaWQgbW92ZV9ieV9waWVjZXMg
KHJ0eCwgcnR4LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCkKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgpleHRlcm4g
dm9pZCByZWNvbXB1dGVfcmVnX3VzYWdlIChydHgsIGludCk7CgpleHRlcm4gdm9pZCBwcmludF9y
dGxfd2l0aF9iYiAoRklMRSAqLCBydHgpOwpleHRlcm4gdm9pZCBkdW1wX2Zsb3dfaW5mbyAoRklM
RSAqKTsKCgoKZXh0ZXJuIHZvaWQgaW5pdF9leHBtZWQgKHZvaWQpOwpleHRlcm4gdm9pZCBleHBh
bmRfaW5jIChydHgsIHJ0eCk7CmV4dGVybiB2b2lkIGV4cGFuZF9kZWMgKHJ0eCwgcnR4KTsKZXh0
ZXJuIHJ0eCBleHBhbmRfbXVsdF9oaWdocGFydCAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwgdW5z
aWduZWQgaW50LCBydHgsIGludCwgaW50KQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKZXh0ZXJuIGludCBnY3NlX21haW4gKHJ0
eCwgRklMRSAqKTsKCgoKZXh0ZXJuIHZvaWQgbWFya19lbGltaW5hdGlvbiAoaW50LCBpbnQpOwoK
ZXh0ZXJuIGludCBnbG9iYWxfYWxsb2MgKEZJTEUgKik7CmV4dGVybiB2b2lkIGR1bXBfZ2xvYmFs
X3JlZ3MgKEZJTEUgKik7CgoKCgpleHRlcm4gdm9pZCBidWlsZF9pbnNuX2NoYWluIChydHgpOwoK
CmV4dGVybiBpbnQgcmVnX2NsYXNzZXNfaW50ZXJzZWN0X3AgKGVudW0gcmVnX2NsYXNzLCBlbnVt
IHJlZ19jbGFzcyk7CmV4dGVybiBpbnQgcmVnX2NsYXNzX3N1YnNldF9wIChlbnVtIHJlZ19jbGFz
cywgZW51bSByZWdfY2xhc3MpOwpleHRlcm4gdm9pZCBnbG9iYWxpemVfcmVnIChpbnQpOwpleHRl
cm4gdm9pZCBpbml0X3JlZ3MgKHZvaWQpOwpleHRlcm4gdm9pZCBpbml0X3JlZ19zZXRzICh2b2lk
KTsKZXh0ZXJuIHZvaWQgcmVnc2V0X3JlbGVhc2VfbWVtb3J5ICh2b2lkKTsKZXh0ZXJuIHZvaWQg
cmVnY2xhc3NfaW5pdCAodm9pZCk7CmV4dGVybiB2b2lkIHJlZ2NsYXNzIChydHgsIGludCwgRklM
RSAqKTsKZXh0ZXJuIHZvaWQgcmVnX3NjYW4gKHJ0eCwgdW5zaWduZWQgaW50LCBpbnQpOwpleHRl
cm4gdm9pZCByZWdfc2Nhbl91cGRhdGUgKHJ0eCwgcnR4LCB1bnNpZ25lZCBpbnQpOwpleHRlcm4g
dm9pZCBmaXhfcmVnaXN0ZXIgKGNvbnN0IGNoYXIgKiwgaW50LCBpbnQpOwoKZXh0ZXJuIHZvaWQg
ZGVsZXRlX251bGxfcG9pbnRlcl9jaGVja3MgKHJ0eCk7CgoKCmV4dGVybiB2b2lkIHJlZ21vdmVf
b3B0aW1pemUgKHJ0eCwgaW50LCBGSUxFICopOwoKZXh0ZXJuIHZvaWQgY29tYmluZV9zdGFja19h
ZGp1c3RtZW50cyAodm9pZCk7CgoKCmV4dGVybiB2b2lkIGRicl9zY2hlZHVsZSAocnR4LCBGSUxF
ICopOwoKCgpleHRlcm4gdm9pZCBpbml0X29wdGFicyAodm9pZCk7CgoKCmV4dGVybiB2b2lkIGR1
bXBfbG9jYWxfYWxsb2MgKEZJTEUgKik7CgpleHRlcm4gaW50IGxvY2FsX2FsbG9jICh2b2lkKTsK
ZXh0ZXJuIGludCBmdW5jdGlvbl9pbnZhcmlhbnRfcCAocnR4KTsKCgpleHRlcm4gdm9pZCByZWxv
YWRfY3NlX3JlZ3MgKHJ0eCk7CmV4dGVybiB2b2lkIGluaXRfcmVsb2FkICh2b2lkKTsKZXh0ZXJu
IHZvaWQgbWFya19ob21lX2xpdmUgKGludCk7CmV4dGVybiBpbnQgcmVsb2FkIChydHgsIGludCk7
CgoKZXh0ZXJuIHZvaWQgaW5pdF9jYWxsZXJfc2F2ZSAodm9pZCk7CgoKZXh0ZXJuIHZvaWQgaW5p
dF9icmFuY2hfcHJvYiAoY29uc3QgY2hhciAqKTsKZXh0ZXJuIHZvaWQgYnJhbmNoX3Byb2IgKHZv
aWQpOwpleHRlcm4gdm9pZCBlbmRfYnJhbmNoX3Byb2IgKHZvaWQpOwpleHRlcm4gdm9pZCBvdXRw
dXRfZnVuY19zdGFydF9wcm9maWxlciAodm9pZCk7CgoKCmV4dGVybiB2b2lkIHJlZ190b19zdGFj
ayAocnR4LCBGSUxFICopOwoKCgpleHRlcm4gaW50IGFkZF9kb3VibGUgKHVuc2lnbmVkIGludCwg
aW50LCB1bnNpZ25lZCBpbnQsIGludCwgdW5zaWduZWQgaW50ICosIGludCAqKQoKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CmV4dGVy
biBpbnQgbmVnX2RvdWJsZSAodW5zaWduZWQgaW50LCBpbnQsIHVuc2lnbmVkIGludCAqLCBpbnQg
KikKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CmV4dGVybiBpbnQgbXVsX2RvdWJsZSAodW5zaWduZWQgaW50LCBpbnQsIHVuc2lnbmVk
IGludCwgaW50LCB1bnNpZ25lZCBpbnQgKiwgaW50ICopCgoKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CmV4dGVybiB2b2lkIGxzaGlm
dF9kb3VibGUgKHVuc2lnbmVkIGludCwgaW50LCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQg
aW50ICosIGludCAqLCBpbnQpCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4gdm9pZCByc2hpZnRfZG91YmxlICh1
bnNpZ25lZCBpbnQsIGludCwgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCAqLCBpbnQg
KiwgaW50KQoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKZXh0ZXJuIHZvaWQgbHJvdGF0ZV9kb3VibGUgKHVuc2lnbmVkIGlu
dCwgaW50LCBpbnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50ICosIGludCAqKQoKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CmV4
dGVybiB2b2lkIHJyb3RhdGVfZG91YmxlICh1bnNpZ25lZCBpbnQsIGludCwgaW50LCB1bnNpZ25l
ZCBpbnQsIHVuc2lnbmVkIGludCAqLCBpbnQgKikKCgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCmVudW0gbGliY2FsbF90eXBlCnsK
ICBMQ1RfTk9STUFMID0gMCwKICBMQ1RfQ09OU1QgPSAxLAogIExDVF9QVVJFID0gMiwKICBMQ1Rf
Q09OU1RfTUFLRV9CTE9DSyA9IDMsCiAgTENUX1BVUkVfTUFLRV9CTE9DSyA9IDQKfTsKCmV4dGVy
biB2b2lkIGVtaXRfbGlicmFyeV9jYWxsIChydHgsIGVudW0gbGliY2FsbF90eXBlLCBlbnVtIG1h
Y2hpbmVfbW9kZSwgaW50LCAuLi4pCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CmV4dGVybiBydHggZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWUg
KHJ0eCwgcnR4LCBlbnVtIGxpYmNhbGxfdHlwZSwgZW51bSBtYWNoaW5lX21vZGUsIGludCwgLi4u
KQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKCmV4dGVybiBpbnQgc2V0X2RvbWluYXRlc191c2UgKGludCwgaW50LCBpbnQsIHJ0eCwgcnR4
KTsKCgpleHRlcm4gdm9pZCBic3Nfc2VjdGlvbiAodm9pZCk7CmV4dGVybiBpbnQgaW5fZGF0YV9z
ZWN0aW9uICh2b2lkKTsKZXh0ZXJuIGludCBzdXBwb3J0c19vbmVfb25seSAodm9pZCk7CmV4dGVy
biB2b2lkIGluaXRfdmFyYXNtX29uY2UgKHZvaWQpOwoKCmV4dGVybiB2b2lkIGluaXRfcnRsICh2
b2lkKTsKCgpleHRlcm4gaW50IHJlYWRfc2tpcF9zcGFjZXMgKEZJTEUgKik7CmV4dGVybiBydHgg
cmVhZF9ydHggKEZJTEUgKik7CgoKZXh0ZXJuIGNvbnN0IGNoYXIgKnJlYWRfcnR4X2ZpbGVuYW1l
OwpleHRlcm4gaW50IHJlYWRfcnR4X2xpbmVubzsKCgoKCgoKCmV4dGVybiB2b2lkIGZhbmN5X2Fi
b3J0IChjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqKQogICAgX19hdHRyaWJ1dGVfXyAo
KF9fbm9yZXR1cm5fXykpOwoKCgpleHRlcm4gcnR4IGNhbm9uX3J0eCAocnR4KTsKZXh0ZXJuIGlu
dCB0cnVlX2RlcGVuZGVuY2UgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwgaW50ICgqKShy
dHgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKZXh0ZXJuIGludCByZWFkX2RlcGVuZGVuY2UgKHJ0eCwgcnR4KTsKZXh0ZXJu
IGludCBhbnRpX2RlcGVuZGVuY2UgKHJ0eCwgcnR4KTsKZXh0ZXJuIGludCBvdXRwdXRfZGVwZW5k
ZW5jZSAocnR4LCBydHgpOwpleHRlcm4gdm9pZCBtYXJrX2NvbnN0YW50X2Z1bmN0aW9uICh2b2lk
KTsKZXh0ZXJuIHZvaWQgaW5pdF9hbGlhc19vbmNlICh2b2lkKTsKZXh0ZXJuIHZvaWQgaW5pdF9h
bGlhc19hbmFseXNpcyAodm9pZCk7CmV4dGVybiB2b2lkIGVuZF9hbGlhc19hbmFseXNpcyAodm9p
ZCk7CmV4dGVybiBydHggYWRkcl9zaWRlX2VmZmVjdF9ldmFsIChydHgsIGludCwgaW50KTsKCgp0
eXBlZGVmIGVudW0gewogIHNpYmNhbGxfdXNlX25vcm1hbCA9IDEsCiAgc2liY2FsbF91c2VfdGFp
bF9yZWN1cnNpb24sCiAgc2liY2FsbF91c2Vfc2liY2FsbAp9IHNpYmNhbGxfdXNlX3Q7CgpleHRl
cm4gdm9pZCBvcHRpbWl6ZV9zaWJsaW5nX2FuZF90YWlsX3JlY3Vyc2l2ZV9jYWxscyAodm9pZCk7
CmV4dGVybiB2b2lkIHJlcGxhY2VfY2FsbF9wbGFjZWhvbGRlciAocnR4LCBzaWJjYWxsX3VzZV90
KTsKCgpleHRlcm4gaW50IHN0YWNrX3JlZ3NfbWVudGlvbmVkIChydHggaW5zbik7CgoKCmV4dGVy
biBydHggc3RhY2tfbGltaXRfcnR4OwoKCmV4dGVybiB2b2lkIHJlZ3JlbmFtZV9vcHRpbWl6ZSAo
dm9pZCk7CgoKZXh0ZXJuIHZvaWQgaWZfY29udmVydCAoaW50KTsKIyAzNCAiLi4vLi4vZ2NjL2dj
Yy9jLWRlY2wuYyIgMgojIDEgIi4uLy4uL2djYy9nY2MvZmxhZ3MuaCIgMQojIDI2ICIuLi8uLi9n
Y2MvZ2NjL2ZsYWdzLmgiCmV4dGVybiBjb25zdCBjaGFyICptYWluX2lucHV0X2ZpbGVuYW1lOwoK
ZW51bSBkZWJ1Z19pbmZvX3R5cGUKewogIE5PX0RFQlVHLAogIERCWF9ERUJVRywKICBTREJfREVC
VUcsCiAgRFdBUkZfREVCVUcsCiAgRFdBUkYyX0RFQlVHLAogIFhDT0ZGX0RFQlVHCn07CgoKZXh0
ZXJuIGVudW0gZGVidWdfaW5mb190eXBlIHdyaXRlX3N5bWJvbHM7CgplbnVtIGRlYnVnX2luZm9f
bGV2ZWwKewogIERJTkZPX0xFVkVMX05PTkUsCiAgRElORk9fTEVWRUxfVEVSU0UsCiAgRElORk9f
TEVWRUxfTk9STUFMLAogIERJTkZPX0xFVkVMX1ZFUkJPU0UKfTsKCgpleHRlcm4gZW51bSBkZWJ1
Z19pbmZvX2xldmVsIGRlYnVnX2luZm9fbGV2ZWw7CgoKCmV4dGVybiBpbnQgdXNlX2dudV9kZWJ1
Z19pbmZvX2V4dGVuc2lvbnM7CgoKCmV4dGVybiBpbnQgb3B0aW1pemU7CgoKCmV4dGVybiBpbnQg
b3B0aW1pemVfc2l6ZTsKCgoKCmV4dGVybiBpbnQgcXVpZXRfZmxhZzsKCgoKZXh0ZXJuIGludCB0
aW1lX3JlcG9ydDsKCgoKCmV4dGVybiBpbnQgbWVtX3JlcG9ydDsKCgoKZXh0ZXJuIGludCBpbmhp
Yml0X3dhcm5pbmdzOwoKCgpleHRlcm4gaW50IHdhcm5fc3lzdGVtX2hlYWRlcnM7CgoKCmV4dGVy
biBpbnQgZXh0cmFfd2FybmluZ3M7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0X1d1bnVzZWQgKGludCBz
ZXR0aW5nKTsKCmV4dGVybiBpbnQgd2Fybl91bnVzZWRfZnVuY3Rpb247CmV4dGVybiBpbnQgd2Fy
bl91bnVzZWRfbGFiZWw7CmV4dGVybiBpbnQgd2Fybl91bnVzZWRfcGFyYW1ldGVyOwpleHRlcm4g
aW50IHdhcm5fdW51c2VkX3ZhcmlhYmxlOwpleHRlcm4gaW50IHdhcm5fdW51c2VkX3ZhbHVlOwoK
CgpleHRlcm4gaW50IHdhcm5fbm90cmVhY2hlZDsKCgoKZXh0ZXJuIGludCB3YXJuX2lubGluZTsK
CgoKZXh0ZXJuIGludCB3YXJuX3VuaW5pdGlhbGl6ZWQ7CgoKCgoKCgpleHRlcm4gaW50IHdhcm5f
dW5rbm93bl9wcmFnbWFzOwoKCgpleHRlcm4gaW50IHdhcm5fc2hhZG93OwoKCgpleHRlcm4gaW50
IHdhcm5fc3dpdGNoOwoKCgoKZXh0ZXJuIGludCB3YXJuX3JldHVybl90eXBlOwoKCgpleHRlcm4g
aW50IHdhcm5fbWlzc2luZ19ub3JldHVybjsKCgoKCgpleHRlcm4gaW50IHdhcm5fY2FzdF9hbGln
bjsKCgoKCmV4dGVybiBpbnQgd2Fybl9pZF9jbGFzaDsKZXh0ZXJuIGludCBpZF9jbGFzaF9sZW47
CgoKCgoKZXh0ZXJuIGludCB3YXJuX2xhcmdlcl90aGFuOwpleHRlcm4gaW50IGxhcmdlcl90aGFu
X3NpemU7CgoKCgpleHRlcm4gaW50IHdhcm5fYWdncmVnYXRlX3JldHVybjsKCgoKZXh0ZXJuIGlu
dCB3YXJuX3BhY2tlZDsKCgoKZXh0ZXJuIGludCB3YXJuX3BhZGRlZDsKCgoKZXh0ZXJuIGludCB3
YXJuX2Rpc2FibGVkX29wdGltaXphdGlvbjsKCgoKZXh0ZXJuIGludCBwcm9maWxlX2ZsYWc7CgoK
CmV4dGVybiBpbnQgcHJvZmlsZV9ibG9ja19mbGFnOwoKCgpleHRlcm4gaW50IHByb2ZpbGVfYXJj
X2ZsYWc7CgoKCmV4dGVybiBpbnQgZmxhZ190ZXN0X2NvdmVyYWdlOwoKCgpleHRlcm4gaW50IGZs
YWdfYnJhbmNoX3Byb2JhYmlsaXRpZXM7CgoKCgpleHRlcm4gaW50IHBlZGFudGljOwoKCgoKZXh0
ZXJuIGludCBpbl9zeXN0ZW1faGVhZGVyOwoKCgoKZXh0ZXJuIGludCBmbGFnX3ByaW50X2FzbV9u
YW1lOwoKCgoKCmV4dGVybiBpbnQgZmxhZ19zaWduZWRfY2hhcjsKCgoKZXh0ZXJuIGludCBmbGFn
X3Nob3J0X2VudW1zOwoKCgoKCmV4dGVybiBpbnQgZmxhZ19jYWxsZXJfc2F2ZXM7CgoKCmV4dGVy
biBpbnQgZmxhZ19wY2Nfc3RydWN0X3JldHVybjsKCgoKCmV4dGVybiBpbnQgZmxhZ19mb3JjZV9t
ZW07CgoKCgpleHRlcm4gaW50IGZsYWdfZm9yY2VfYWRkcjsKCgoKCmV4dGVybiBpbnQgZmxhZ19k
ZWZlcl9wb3A7CgoKCgpleHRlcm4gaW50IGZsYWdfZmxvYXRfc3RvcmU7CgoKCmV4dGVybiBpbnQg
ZmxhZ19zdHJlbmd0aF9yZWR1Y2U7CgoKCgoKCmV4dGVybiBpbnQgZmxhZ191bnJvbGxfbG9vcHM7
CgoKCgpleHRlcm4gaW50IGZsYWdfdW5yb2xsX2FsbF9sb29wczsKCgoKCmV4dGVybiBpbnQgZmxh
Z19tb3ZlX2FsbF9tb3ZhYmxlczsKCgoKCmV4dGVybiBpbnQgZmxhZ19yZWR1Y2VfYWxsX2dpdnM7
CgoKCgpleHRlcm4gaW50IGZsYWdfY3NlX2ZvbGxvd19qdW1wczsKCgoKCmV4dGVybiBpbnQgZmxh
Z19jc2Vfc2tpcF9ibG9ja3M7CgoKCmV4dGVybiBpbnQgZmxhZ19leHBlbnNpdmVfb3B0aW1pemF0
aW9uczsKCgoKCmV4dGVybiBpbnQgZmxhZ193cml0YWJsZV9zdHJpbmdzOwoKCgoKCmV4dGVybiBp
bnQgZmxhZ19ub19mdW5jdGlvbl9jc2U7CgoKCgpleHRlcm4gaW50IGZsYWdfb21pdF9mcmFtZV9w
b2ludGVyOwoKCgpleHRlcm4gaW50IGZsYWdfbm9fcGVlcGhvbGU7CgoKCmV4dGVybiBpbnQgZmxh
Z192b2xhdGlsZTsKCgoKZXh0ZXJuIGludCBmbGFnX3ZvbGF0aWxlX2dsb2JhbDsKCgoKZXh0ZXJu
IGludCBmbGFnX3ZvbGF0aWxlX3N0YXRpYzsKCgoKCgoKZXh0ZXJuIGludCBmbGFnX2Zhc3RfbWF0
aDsKCgoKZXh0ZXJuIGludCBmbGFnX29wdGltaXplX3NpYmxpbmdfY2FsbHM7CgoKCgpleHRlcm4g
aW50IGZsYWdfZXJybm9fbWF0aDsKCgoKCgpleHRlcm4gaW50IGZsYWdfY29tcGxleF9kaXZpZGVf
bWV0aG9kOwoKCgpleHRlcm4gaW50IGZsYWdfcmVydW5fbG9vcF9vcHQ7CgoKCgpleHRlcm4gaW50
IGZsYWdfaW5saW5lX2Z1bmN0aW9uczsKCgoKCgpleHRlcm4gaW50IGZsYWdfa2VlcF9pbmxpbmVf
ZnVuY3Rpb25zOwoKCgoKCgoKZXh0ZXJuIGludCBmbGFnX25vX2lubGluZTsKCgoKZXh0ZXJuIGlu
dCBmbGFnX3N5bnRheF9vbmx5OwoKCgpleHRlcm4gaW50IGZsYWdfZ2VuX2F1eF9pbmZvOwoKCgpl
eHRlcm4gaW50IGZsYWdfc2hhcmVkX2RhdGE7CgoKCgoKCmV4dGVybiBpbnQgZmxhZ19zY2hlZHVs
ZV9pbnNuczsKZXh0ZXJuIGludCBmbGFnX3NjaGVkdWxlX2luc25zX2FmdGVyX3JlbG9hZDsKIyAz
OTcgIi4uLy4uL2djYy9nY2MvZmxhZ3MuaCIKZXh0ZXJuIGludCBmbGFnX3NjaGVkdWxlX2ludGVy
YmxvY2s7CmV4dGVybiBpbnQgZmxhZ19zY2hlZHVsZV9zcGVjdWxhdGl2ZTsKZXh0ZXJuIGludCBm
bGFnX3NjaGVkdWxlX3NwZWN1bGF0aXZlX2xvYWQ7CmV4dGVybiBpbnQgZmxhZ19zY2hlZHVsZV9z
cGVjdWxhdGl2ZV9sb2FkX2Rhbmdlcm91czsKCgoKZXh0ZXJuIGludCBmbGFnX2JyYW5jaF9vbl9j
b3VudF9yZWc7CgoKCgoKZXh0ZXJuIGludCBmbGFnX3NpbmdsZV9wcmVjaXNpb25fY29uc3RhbnQ7
CgoKCmV4dGVybiBpbnQgZmxhZ19kZWxheWVkX2JyYW5jaDsKCgoKCmV4dGVybiBpbnQgZmxhZ19k
dW1wX3VubnVtYmVyZWQ7CgoKCgoKZXh0ZXJuIGludCBmbGFnX3ByZXRlbmRfZmxvYXQ7CgoKCgpl
eHRlcm4gaW50IGZsYWdfcGVkYW50aWNfZXJyb3JzOwoKCgoKZXh0ZXJuIGludCBmbGFnX3BpYzsK
CgoKCmV4dGVybiBpbnQgZmxhZ19leGNlcHRpb25zOwoKCgoKZXh0ZXJuIGludCBmbGFnX25ld19l
eGNlcHRpb25zOwoKCgpleHRlcm4gaW50IGZsYWdfdW53aW5kX3RhYmxlczsKCgoKCmV4dGVybiBp
bnQgZmxhZ19ub19jb21tb247CgoKCgoKZXh0ZXJuIGludCBmbGFnX2luaGliaXRfc2l6ZV9kaXJl
Y3RpdmU7CgoKCgpleHRlcm4gaW50IGZsYWdfZnVuY3Rpb25fc2VjdGlvbnM7CgoKCmV4dGVybiBp
bnQgZmxhZ19kYXRhX3NlY3Rpb25zOwojIDQ3OCAiLi4vLi4vZ2NjL2djYy9mbGFncy5oIgpleHRl
cm4gaW50IGZsYWdfdmVyYm9zZV9hc207CiMgNDg3ICIuLi8uLi9nY2MvZ2NjL2ZsYWdzLmgiCmV4
dGVybiBpbnQgZmxhZ19kZWJ1Z19hc207CgpleHRlcm4gaW50IGZsYWdfZHVtcF9ydGxfaW5fYXNt
OwoKCgpleHRlcm4gaW50IGZsYWdfZ251X2xpbmtlcjsKCgpleHRlcm4gaW50IGZsYWdfcGFja19z
dHJ1Y3Q7CiMgNTA1ICIuLi8uLi9nY2MvZ2NjL2ZsYWdzLmgiCmV4dGVybiBpbnQgZmxhZ19hcmd1
bWVudF9ub2FsaWFzOwoKCgoKCmV4dGVybiBpbnQgZmxhZ19zdHJpY3RfYWxpYXNpbmc7CgoKCmV4
dGVybiBpbnQgZmxhZ19zdGFja19jaGVjazsKCgpleHRlcm4gaW50IGZsYWdfcmVnbW92ZTsKCgpl
eHRlcm4gaW50IGZsYWdfaW5zdHJ1bWVudF9mdW5jdGlvbl9lbnRyeV9leGl0OwoKCmV4dGVybiBp
bnQgZmxhZ19wZWVwaG9sZTI7CgoKCgoKCmV4dGVybiBpbnQgZmxhZ19ib3VuZGVkX3BvaW50ZXJz
OwoKCgoKCgoKZXh0ZXJuIGludCBmbGFnX2JvdW5kc19jaGVjazsKCgoKCmV4dGVybiBpbnQgZmxh
Z19yZW51bWJlcl9pbnNuczsKCgoKCgoKCmV4dGVybiBpbnQgZnJhbWVfcG9pbnRlcl9uZWVkZWQ7
CgoKCmV4dGVybiBpbnQgZmxhZ19jaGVja19tZW1vcnlfdXNhZ2U7CgoKCmV4dGVybiBpbnQgZmxh
Z190cmFwdjsKCgoKCmV4dGVybiBpbnQgZmxhZ19wcmVmaXhfZnVuY3Rpb25fbmFtZTsKCgpleHRl
cm4gaW50IGdfc3dpdGNoX3ZhbHVlOwpleHRlcm4gaW50IGdfc3dpdGNoX3NldDsKCgoKZXh0ZXJu
IGludCBpbmxpbmVfbWF4X2luc25zOwoKCgoKCgpleHRlcm4gaW50IGFsaWduX2xvb3BzOwpleHRl
cm4gaW50IGFsaWduX2xvb3BzX2xvZzsKZXh0ZXJuIGludCBhbGlnbl9qdW1wczsKZXh0ZXJuIGlu
dCBhbGlnbl9qdW1wc19sb2c7CmV4dGVybiBpbnQgYWxpZ25fbGFiZWxzOwpleHRlcm4gaW50IGFs
aWduX2xhYmVsc19sb2c7CmV4dGVybiBpbnQgYWxpZ25fZnVuY3Rpb25zOwpleHRlcm4gaW50IGFs
aWduX2Z1bmN0aW9uc19sb2c7CgoKZXh0ZXJuIGludCBkdW1wX2Zvcl9ncmFwaDsKCgplbnVtIGdy
YXBoX2R1bXBfdHlwZXMKewogIG5vX2dyYXBoID0gMCwKICB2Y2cKfTsKZXh0ZXJuIGVudW0gZ3Jh
cGhfZHVtcF90eXBlcyBncmFwaF9kdW1wX2Zvcm1hdDsKCgoKCgpleHRlcm4gaW50IGZsYWdfbm9f
aWRlbnQ7CgoKCmV4dGVybiBpbnQgZmxhZ19lbGltaW5hdGVfZHdhcmYyX2R1cHM7CgoKCmV4dGVy
biBpbnQgZmxhZ19kZXRhaWxlZF9zdGF0aXN0aWNzOwojIDM1ICIuLi8uLi9nY2MvZ2NjL2MtZGVj
bC5jIiAyCiMgMSAiLi4vLi4vZ2NjL2djYy9mdW5jdGlvbi5oIiAxCiMgMzIgIi4uLy4uL2djYy9n
Y2MvZnVuY3Rpb24uaCIKc3RydWN0IHZhcl9yZWZzX3F1ZXVlCnsKICBydHggbW9kaWZpZWQ7CiAg
ZW51bSBtYWNoaW5lX21vZGUgcHJvbW90ZWRfbW9kZTsKICBpbnQgdW5zaWduZWRwOwogIHN0cnVj
dCB2YXJfcmVmc19xdWV1ZSAqbmV4dDsKfTsKCgoKCgoKc3RydWN0IHNlcXVlbmNlX3N0YWNrCnsK
CiAgcnR4IGZpcnN0LCBsYXN0OwogIHRyZWUgc2VxdWVuY2VfcnRsX2V4cHI7CiAgc3RydWN0IHNl
cXVlbmNlX3N0YWNrICpuZXh0Owp9OwoKZXh0ZXJuIHN0cnVjdCBzZXF1ZW5jZV9zdGFjayAqc2Vx
dWVuY2Vfc3RhY2s7CgoKCnN0cnVjdCBzaW1wbGVfb2JzdGFja19zdGFjawp7CiAgc3RydWN0IG9i
c3RhY2sgKm9ic3RhY2s7CiAgc3RydWN0IHNpbXBsZV9vYnN0YWNrX3N0YWNrICpuZXh0Owp9OwoK
c3RydWN0IGVtaXRfc3RhdHVzCnsKCgogIGludCB4X3JlZ19ydHhfbm87CgoKICBpbnQgeF9maXJz
dF9sYWJlbF9udW07CgoKCgoKCiAgcnR4IHhfZmlyc3RfaW5zbjsKICBydHggeF9sYXN0X2luc247
CgoKCgogIHRyZWUgc2VxdWVuY2VfcnRsX2V4cHI7CgoKCgoKICBzdHJ1Y3Qgc2VxdWVuY2Vfc3Rh
Y2sgKnNlcXVlbmNlX3N0YWNrOwoKCgogIGludCB4X2N1cl9pbnNuX3VpZDsKCgoKICBpbnQgeF9s
YXN0X2xpbmVudW07CiAgY29uc3QgY2hhciAqeF9sYXN0X2ZpbGVuYW1lOwoKCgoKCgogIGNoYXIg
KnJlZ25vX3BvaW50ZXJfZmxhZzsKICBpbnQgcmVnbm9fcG9pbnRlcl9mbGFnX2xlbmd0aDsKCgoK
CiAgdW5zaWduZWQgY2hhciAqcmVnbm9fcG9pbnRlcl9hbGlnbjsKCgoKICBydHggKnhfcmVnbm9f
cmVnX3J0eDsKfTsKIyAxMjcgIi4uLy4uL2djYy9nY2MvZnVuY3Rpb24uaCIKc3RydWN0IGV4cHJf
c3RhdHVzCnsKCgogIGludCB4X3BlbmRpbmdfc3RhY2tfYWRqdXN0OwojIDE0OCAiLi4vLi4vZ2Nj
L2djYy9mdW5jdGlvbi5oIgogIGludCB4X2luaGliaXRfZGVmZXJfcG9wOwoKCgoKCiAgaW50IHhf
c3RhY2tfcG9pbnRlcl9kZWx0YTsKCgoKCiAgcnR4IHhfc2F2ZXJlZ3NfdmFsdWU7CgoKICBydHgg
eF9hcHBseV9hcmdzX3ZhbHVlOwoKCiAgcnR4IHhfZm9yY2VkX2xhYmVsczsKCgogIHJ0eCB4X3Bl
bmRpbmdfY2hhaW47Cn07CiMgMTgyICIuLi8uLi9nY2MvZ2NjL2Z1bmN0aW9uLmgiCnN0cnVjdCBm
dW5jdGlvbgp7CiAgc3RydWN0IGZ1bmN0aW9uICpuZXh0X2dsb2JhbDsKICBzdHJ1Y3QgZnVuY3Rp
b24gKm5leHQ7CgogIHN0cnVjdCBlaF9zdGF0dXMgKmVoOwogIHN0cnVjdCBzdG10X3N0YXR1cyAq
c3RtdDsKICBzdHJ1Y3QgZXhwcl9zdGF0dXMgKmV4cHI7CiAgc3RydWN0IGVtaXRfc3RhdHVzICpl
bWl0OwogIHN0cnVjdCB2YXJhc21fc3RhdHVzICp2YXJhc207CgoKCgogIGNvbnN0IGNoYXIgKm5h
bWU7CgogIHRyZWUgZGVjbDsKCgoKCiAgaW50IHBvcHNfYXJnczsKCgoKICBpbnQgcmV0dXJuc19z
dHJ1Y3Q7CgoKCiAgaW50IHJldHVybnNfcGNjX3N0cnVjdDsKCgogIGludCByZXR1cm5zX3BvaW50
ZXI7CgoKICBpbnQgbmVlZHNfY29udGV4dDsKCgogIGludCBjYWxsc19zZXRqbXA7CgoKICBpbnQg
Y2FsbHNfbG9uZ2ptcDsKCgoKICBpbnQgY2FsbHNfYWxsb2NhOwoKCgoKICBpbnQgaGFzX25vbmxv
Y2FsX2xhYmVsOwoKCgogIGludCBoYXNfbm9ubG9jYWxfZ290bzsKCgogIGludCBjb250YWluc19m
dW5jdGlvbnM7CgoKICBpbnQgaGFzX2NvbXB1dGVkX2p1bXA7CgoKCgogIGludCBpc190aHVuazsK
CgoKCiAgaW50IGFyZ3Nfc2l6ZTsKCgoKCiAgaW50IHByZXRlbmRfYXJnc19zaXplOwoKCgogIGlu
dCBvdXRnb2luZ19hcmdzX3NpemU7CgoKCiAgcnR4IGFyZ19vZmZzZXRfcnR4OwoKCgogIGludCB2
YXJhcmdzOwoKCgogIGludCBzdGRhcmc7CgoKCiAgQ1VNVUxBVElWRV9BUkdTIGFyZ3NfaW5mbzsK
CgoKCgogIHJ0eCByZXR1cm5fcnR4OwoKCiAgcnR4IGludGVybmFsX2FyZ19wb2ludGVyOwoKCgog
IGNvbnN0IGNoYXIgKmNhbm5vdF9pbmxpbmU7CgoKCiAgaW50IGluc3RydW1lbnRfZW50cnlfZXhp
dDsKCgogIGludCBjaGVja19tZW1vcnlfdXNhZ2U7CgoKCiAgaW50IGxpbWl0X3N0YWNrOwoKCiAg
aW50IHhfZnVuY3Rpb25fY2FsbF9jb3VudDsKCgoKCgogIGludCB4X3dob2xlX2Z1bmN0aW9uX21v
ZGVfcDsKIyAzMTkgIi4uLy4uL2djYy9nY2MvZnVuY3Rpb24uaCIKICBpbnQgeF9kb250X3NhdmVf
cGVuZGluZ19zaXplc19wOwoKCgoKICB0cmVlIHhfbm9ubG9jYWxfbGFiZWxzOwoKCgoKCiAgcnR4
IHhfbm9ubG9jYWxfZ290b19oYW5kbGVyX3Nsb3RzOwoKCgogIHJ0eCB4X25vbmxvY2FsX2dvdG9f
aGFuZGxlcl9sYWJlbHM7CgoKCgogIHJ0eCB4X25vbmxvY2FsX2dvdG9fc3RhY2tfbGV2ZWw7CgoK
CgoKICBydHggeF9jbGVhbnVwX2xhYmVsOwoKCgoKICBydHggeF9yZXR1cm5fbGFiZWw7CgoKCiAg
cnR4IHhfc2F2ZV9leHByX3JlZ3M7CgoKCiAgcnR4IHhfc3RhY2tfc2xvdF9saXN0OwoKCiAgdHJl
ZSB4X3J0bF9leHByX2NoYWluOwoKCgogIHJ0eCB4X3RhaWxfcmVjdXJzaW9uX2xhYmVsOwoKCiAg
cnR4IHhfdGFpbF9yZWN1cnNpb25fcmVlbnRyeTsKCgoKCgogIHJ0eCB4X2FyZ19wb2ludGVyX3Nh
dmVfYXJlYTsKCgoKCiAgcnR4IHhfY2xvYmJlcl9yZXR1cm5faW5zbjsKCgoKCiAgaW50IHhfZnJh
bWVfb2Zmc2V0OwoKCgoKICB0cmVlIHhfY29udGV4dF9kaXNwbGF5OwojIDM5OCAiLi4vLi4vZ2Nj
L2djYy9mdW5jdGlvbi5oIgogIHRyZWUgeF90cmFtcG9saW5lX2xpc3Q7CgoKICBydHggeF9wYXJt
X2JpcnRoX2luc247CgoKCiAgcnR4IHhfbGFzdF9wYXJtX2luc247CgoKCiAgdW5zaWduZWQgaW50
IHhfbWF4X3Bhcm1fcmVnOwoKCgoKCiAgcnR4ICp4X3Bhcm1fcmVnX3N0YWNrX2xvYzsKCgogIHN0
cnVjdCB0ZW1wX3Nsb3QgKnhfdGVtcF9zbG90czsKCgogIGludCB4X3RlbXBfc2xvdF9sZXZlbDsK
CgogIGludCB4X3Zhcl90ZW1wX3Nsb3RfbGV2ZWw7CgoKCgoKICBpbnQgeF90YXJnZXRfdGVtcF9z
bG90X2xldmVsOwoKCgogIHN0cnVjdCB2YXJfcmVmc19xdWV1ZSAqZml4dXBfdmFyX3JlZnNfcXVl
dWU7CgoKICBpbnQgaW5saW5hYmxlOwogIGludCBub19kZWJ1Z2dpbmdfc3ltYm9sczsKCiAgdm9p
ZCAqb3JpZ2luYWxfYXJnX3ZlY3RvcjsKICB0cmVlIG9yaWdpbmFsX2RlY2xfaW5pdGlhbDsKCgog
IHJ0eCBpbmxfbGFzdF9wYXJtX2luc247CgogIGludCBpbmxfbWF4X2xhYmVsX251bTsKCgogIGlu
dCB1c2VzX2NvbnN0X3Bvb2w7CgoKCgogIGludCB1c2VzX3BpY19vZmZzZXRfdGFibGU7CgogIHN0
cnVjdCBtYWNoaW5lX2Z1bmN0aW9uICptYWNoaW5lOwoKICBpbnQgc3RhY2tfYWxpZ25tZW50X25l
ZWRlZDsKCiAgaW50IHByZWZlcnJlZF9zdGFja19ib3VuZGFyeTsKCgogIHN0cnVjdCBsYW5ndWFn
ZV9mdW5jdGlvbiAqbGFuZ3VhZ2U7CgoKCgoKICBydHggZXBpbG9ndWVfZGVsYXlfbGlzdDsKfTsK
CgpleHRlcm4gc3RydWN0IGZ1bmN0aW9uICpjZnVuOwoKCmV4dGVybiBzdHJ1Y3QgZnVuY3Rpb24g
KmFsbF9mdW5jdGlvbnM7CiMgNTM2ICIuLi8uLi9nY2MvZ2NjL2Z1bmN0aW9uLmgiCmV4dGVybiB0
cmVlIGlubGluZV9mdW5jdGlvbl9kZWNsOwoKCgpzdHJ1Y3QgZnVuY3Rpb24gKmZpbmRfZnVuY3Rp
b25fZGF0YSAodHJlZSk7CgoKZXh0ZXJuIHN0cnVjdCBmdW5jdGlvbiAqb3V0ZXJfZnVuY3Rpb25f
Y2hhaW47CgoKZXh0ZXJuIHZvaWQgaWRlbnRpZnlfYmxvY2tzICh2b2lkKTsKCgoKZXh0ZXJuIHZv
aWQgcmVvcmRlcl9ibG9ja3MgKHZvaWQpOwoKCmV4dGVybiB2b2lkIG51bWJlcl9ibG9ja3MgKHRy
ZWUpOwoKCgoKZXh0ZXJuIGludCBnZXRfZnJhbWVfc2l6ZSAodm9pZCk7CgpleHRlcm4gaW50IGdl
dF9mdW5jX2ZyYW1lX3NpemUgKHN0cnVjdCBmdW5jdGlvbiAqKTsKCgoKCmV4dGVybiB2b2lkICgq
aW5pdF9tYWNoaW5lX3N0YXR1cykgKHN0cnVjdCBmdW5jdGlvbiAqKTsKZXh0ZXJuIHZvaWQgKCpt
YXJrX21hY2hpbmVfc3RhdHVzKSAoc3RydWN0IGZ1bmN0aW9uICopOwpleHRlcm4gdm9pZCAoKnNh
dmVfbWFjaGluZV9zdGF0dXMpIChzdHJ1Y3QgZnVuY3Rpb24gKik7CmV4dGVybiB2b2lkICgqcmVz
dG9yZV9tYWNoaW5lX3N0YXR1cykgKHN0cnVjdCBmdW5jdGlvbiAqKTsKZXh0ZXJuIHZvaWQgKCpm
cmVlX21hY2hpbmVfc3RhdHVzKSAoc3RydWN0IGZ1bmN0aW9uICopOwoKCmV4dGVybiB2b2lkICgq
aW5pdF9sYW5nX3N0YXR1cykgKHN0cnVjdCBmdW5jdGlvbiAqKTsKZXh0ZXJuIHZvaWQgKCptYXJr
X2xhbmdfc3RhdHVzKSAoc3RydWN0IGZ1bmN0aW9uICopOwpleHRlcm4gdm9pZCAoKnNhdmVfbGFu
Z19zdGF0dXMpIChzdHJ1Y3QgZnVuY3Rpb24gKik7CmV4dGVybiB2b2lkICgqcmVzdG9yZV9sYW5n
X3N0YXR1cykgKHN0cnVjdCBmdW5jdGlvbiAqKTsKZXh0ZXJuIHZvaWQgKCpmcmVlX2xhbmdfc3Rh
dHVzKSAoc3RydWN0IGZ1bmN0aW9uICopOwoKCmV4dGVybiB2b2lkIHJlc3RvcmVfZW1pdF9zdGF0
dXMgKHN0cnVjdCBmdW5jdGlvbiAqKTsKZXh0ZXJuIHZvaWQgZnJlZV9hZnRlcl9wYXJzaW5nIChz
dHJ1Y3QgZnVuY3Rpb24gKik7CmV4dGVybiB2b2lkIGZyZWVfYWZ0ZXJfY29tcGlsYXRpb24gKHN0
cnVjdCBmdW5jdGlvbiAqKTsKCmV4dGVybiB2b2lkIGluaXRfdmFyYXNtX3N0YXR1cyAoc3RydWN0
IGZ1bmN0aW9uICopOwpleHRlcm4gdm9pZCBmcmVlX3ZhcmFzbV9zdGF0dXMgKHN0cnVjdCBmdW5j
dGlvbiAqKTsKZXh0ZXJuIHZvaWQgZnJlZV9lbWl0X3N0YXR1cyAoc3RydWN0IGZ1bmN0aW9uICop
OwpleHRlcm4gdm9pZCBmcmVlX3N0bXRfc3RhdHVzIChzdHJ1Y3QgZnVuY3Rpb24gKik7CmV4dGVy
biB2b2lkIGZyZWVfZWhfc3RhdHVzIChzdHJ1Y3QgZnVuY3Rpb24gKik7CmV4dGVybiB2b2lkIGZy
ZWVfZXhwcl9zdGF0dXMgKHN0cnVjdCBmdW5jdGlvbiAqKTsKCmV4dGVybiBydHggZ2V0X2ZpcnN0
X2Jsb2NrX2JlZyAodm9pZCk7CgoKZXh0ZXJuIHZvaWQgZGlkZGxlX3JldHVybl92YWx1ZSAodm9p
ZCAoKikocnR4LCB2b2lkKiksIHZvaWQqKTsKZXh0ZXJuIHZvaWQgY2xvYmJlcl9yZXR1cm5fcmVn
aXN0ZXIgKHZvaWQpOwpleHRlcm4gdm9pZCB1c2VfcmV0dXJuX3JlZ2lzdGVyICh2b2lkKTsKCgpl
eHRlcm4gdm9pZCBpbml0X3ZpcnR1YWxfcmVncyAoc3RydWN0IGVtaXRfc3RhdHVzICopOwoKCmV4
dGVybiB2b2lkIGluaXRfZnVuY3Rpb25fb25jZSAodm9pZCk7CiMgMzYgIi4uLy4uL2djYy9nY2Mv
Yy1kZWNsLmMiIDIKIyAxICIuLi8uLi9nY2MvZ2NjL291dHB1dC5oIiAxCiMgMjQgIi4uLy4uL2dj
Yy9nY2Mvb3V0cHV0LmgiCmV4dGVybiB2b2lkIGluaXRfZmluYWwgKGNvbnN0IGNoYXIgKik7CgoK
CmV4dGVybiB2b2lkIGVuZF9maW5hbCAoY29uc3QgY2hhciAqKTsKCgoKZXh0ZXJuIHZvaWQgYXBw
X2VuYWJsZSAodm9pZCk7CgoKCmV4dGVybiB2b2lkIGFwcF9kaXNhYmxlICh2b2lkKTsKCgoKCmV4
dGVybiBpbnQgZGJyX3NlcXVlbmNlX2xlbmd0aCAodm9pZCk7CgoKZXh0ZXJuIHZvaWQgaW5pdF9p
bnNuX2xlbmd0aHMgKHZvaWQpOwoKCgoKZXh0ZXJuIGludCBnZXRfYXR0cl9sZW5ndGggKHJ0eCk7
CgoKCmV4dGVybiB2b2lkIHNob3J0ZW5fYnJhbmNoZXMgKHJ0eCk7CgoKCgoKCmV4dGVybiB2b2lk
IGZpbmFsX3N0YXJ0X2Z1bmN0aW9uIChydHgsIEZJTEUgKiwgaW50KTsKCgoKCmV4dGVybiB2b2lk
IGZpbmFsX2VuZF9mdW5jdGlvbiAocnR4LCBGSUxFICosIGludCk7CgoKZXh0ZXJuIHZvaWQgZmlu
YWwgKHJ0eCwgRklMRSAqLCBpbnQsIGludCk7CgoKCgpleHRlcm4gcnR4IGZpbmFsX3NjYW5faW5z
biAocnR4LCBGSUxFICosIGludCwgaW50LCBpbnQpOwoKCgpleHRlcm4gcnR4IGFsdGVyX3N1YnJl
ZyAocnR4KTsKCgoKZXh0ZXJuIHZvaWQgb3V0cHV0X29wZXJhbmRfbG9zc2FnZSAoY29uc3QgY2hh
ciAqKTsKCgoKZXh0ZXJuIHZvaWQgb3V0cHV0X2FzbV9pbnNuIChjb25zdCBjaGFyICosIHJ0eCAq
KTsKCgoKCmV4dGVybiBpbnQgaW5zbl9jdXJyZW50X3JlZmVyZW5jZV9hZGRyZXNzIChydHgpOwoK
CgpleHRlcm4gaW50IGxhYmVsX3RvX2FsaWdubWVudCAocnR4KTsKCgpleHRlcm4gdm9pZCBvdXRw
dXRfYXNtX2xhYmVsIChydHgpOwoKCgpleHRlcm4gdm9pZCBvdXRwdXRfYWRkcmVzcyAocnR4KTsK
CgoKCmV4dGVybiB2b2lkIG91dHB1dF9hZGRyX2NvbnN0IChGSUxFICosIHJ0eCk7CgoKCmV4dGVy
biB2b2lkIGFzbV9mcHJpbnRmIChGSUxFICpmaWxlLCBjb25zdCBjaGFyICpwLCAuLi4pOwoKCgpl
eHRlcm4gdm9pZCBzcGxpdF9kb3VibGUgKHJ0eCwgcnR4ICosIHJ0eCAqKTsKCgpleHRlcm4gaW50
IGxlYWZfZnVuY3Rpb25fcCAodm9pZCk7CgoKCmV4dGVybiBpbnQgb25seV9sZWFmX3JlZ3NfdXNl
ZCAodm9pZCk7CgoKCmV4dGVybiB2b2lkIGxlYWZfcmVudW1iZXJfcmVnc19pbnNuIChydHgpOwoK
CmV4dGVybiBjb25zdCBjaGFyICpnZXRfaW5zbl90ZW1wbGF0ZSAoaW50LCBydHgpOwoKCmV4dGVy
biB2b2lkIGFsbG9jYXRlX2Zvcl9saWZlX2FuYWx5c2lzICh2b2lkKTsKZXh0ZXJuIGludCByZWdu
b191bmluaXRpYWxpemVkIChpbnQpOwpleHRlcm4gaW50IHJlZ25vX2Nsb2JiZXJlZF9hdF9zZXRq
bXAgKGludCk7CmV4dGVybiB2b2lkIGR1bXBfZmxvd19pbmZvIChGSUxFICopOwpleHRlcm4gdm9p
ZCBmaW5kX2Jhc2ljX2Jsb2NrcyAocnR4LCBpbnQsIEZJTEUgKik7CmV4dGVybiB2b2lkIGNsZWFu
dXBfY2ZnIChydHgpOwpleHRlcm4gdm9pZCBmcmVlX2Jhc2ljX2Jsb2NrX3ZhcnMgKGludCk7CmV4
dGVybiB2b2lkIHNldF9ibG9ja19udW0gKHJ0eCwgaW50KTsKZXh0ZXJuIHZvaWQgY2hlY2tfZnVu
Y3Rpb25fcmV0dXJuX3dhcm5pbmdzICh2b2lkKTsKCgoKCgpleHRlcm4gdm9pZCB0ZXh0X3NlY3Rp
b24gKHZvaWQpOwoKCmV4dGVybiB2b2lkIGRhdGFfc2VjdGlvbiAodm9pZCk7CgoKZXh0ZXJuIHZv
aWQgZm9yY2VfZGF0YV9zZWN0aW9uICh2b2lkKTsKCgoKZXh0ZXJuIHZvaWQgcmVhZG9ubHlfZGF0
YV9zZWN0aW9uICh2b2lkKTsKCgpleHRlcm4gaW50IGluX3RleHRfc2VjdGlvbiAodm9pZCk7CiMg
MTczICIuLi8uLi9nY2MvZ2NjL291dHB1dC5oIgpleHRlcm4gdm9pZCBic3Nfc2VjdGlvbiAodm9p
ZCk7CiMgMTk3ICIuLi8uLi9nY2MvZ2NjL291dHB1dC5oIgpleHRlcm4gdm9pZCBuYW1lZF9zZWN0
aW9uICh0cmVlLCBjb25zdCBjaGFyICosIGludCk7CgoKZXh0ZXJuIHZvaWQgZnVuY3Rpb25fc2Vj
dGlvbiAodHJlZSk7CgoKZXh0ZXJuIHZvaWQgZXhjZXB0aW9uX3NlY3Rpb24gKHZvaWQpOwoKCgoK
ZXh0ZXJuIHZvaWQgbWFrZV9mdW5jdGlvbl9ydGwgKHRyZWUpOwoKCmV4dGVybiB2b2lkIGRlY2xh
cmVfd2VhayAodHJlZSk7CgoKCmV4dGVybiB2b2lkIHdlYWtfZmluaXNoICh2b2lkKTsKIyAyMjQg
Ii4uLy4uL2djYy9nY2Mvb3V0cHV0LmgiCmV4dGVybiBpbnQgZGVjb2RlX3JlZ19uYW1lIChjb25z
dCBjaGFyICopOwojIDIzNCAiLi4vLi4vZ2NjL2djYy9vdXRwdXQuaCIKZXh0ZXJuIHZvaWQgbWFr
ZV9kZWNsX3J0bCAodHJlZSwgY29uc3QgY2hhciAqLCBpbnQpOwoKCgpleHRlcm4gdm9pZCBtYWtl
X3Zhcl92b2xhdGlsZSAodHJlZSk7CgoKZXh0ZXJuIHZvaWQgYXNzZW1ibGVfY29uc3RhbnRfYWxp
Z24gKHRyZWUpOwoKZXh0ZXJuIHZvaWQgYXNzZW1ibGVfYWxpYXMgKHRyZWUsIHRyZWUpOwoKCgpl
eHRlcm4gdm9pZCBhc3NlbWJsZV9hc20gKHRyZWUpOwoKCgoKCmV4dGVybiB2b2lkIGFzc2VtYmxl
X3N0YXJ0X2Z1bmN0aW9uICh0cmVlLCBjb25zdCBjaGFyICopOwoKCgpleHRlcm4gdm9pZCBhc3Nl
bWJsZV9lbmRfZnVuY3Rpb24gKHRyZWUsIGNvbnN0IGNoYXIgKik7CiMgMjY4ICIuLi8uLi9nY2Mv
Z2NjL291dHB1dC5oIgpleHRlcm4gdm9pZCBhc3NlbWJsZV92YXJpYWJsZSAodHJlZSwgaW50LCBp
bnQsIGludCk7CgoKCgpleHRlcm4gdm9pZCBhc3NlbWJsZV9leHRlcm5hbCAodHJlZSk7CiMgMjgy
ICIuLi8uLi9nY2MvZ2NjL291dHB1dC5oIgpleHRlcm4gdm9pZCBhc3NlbWJsZV9kZXN0cnVjdG9y
IChjb25zdCBjaGFyICopOwoKCmV4dGVybiB2b2lkIGFzc2VtYmxlX2NvbnN0cnVjdG9yIChjb25z
dCBjaGFyICopOwoKCgpleHRlcm4gdm9pZCBhc3NlbWJsZV9nY19lbnRyeSAoY29uc3QgY2hhciAq
KTsKCgpleHRlcm4gdm9pZCBhc3NlbWJsZV96ZXJvcyAoaW50KTsKCgpleHRlcm4gdm9pZCBhc3Nl
bWJsZV9hbGlnbiAoaW50KTsKZXh0ZXJuIHZvaWQgYXNzZW1ibGVfZWhfYWxpZ24gKGludCk7CgoK
ZXh0ZXJuIHZvaWQgYXNzZW1ibGVfc3RyaW5nIChjb25zdCBjaGFyICosIGludCk7CgoKCmV4dGVy
biB2b2lkIGFzc2VtYmxlX2V4dGVybmFsX2xpYmNhbGwgKHJ0eCk7CgoKCmV4dGVybiB2b2lkIGFz
c2VtYmxlX2dsb2JhbCAoY29uc3QgY2hhciAqKTsKCgpleHRlcm4gdm9pZCBhc3NlbWJsZV9sYWJl
bCAoY29uc3QgY2hhciAqKTsKZXh0ZXJuIHZvaWQgYXNzZW1ibGVfZWhfbGFiZWwgKGNvbnN0IGNo
YXIgKik7CgoKCgoKCmV4dGVybiB2b2lkIGFzc2VtYmxlX25hbWUgKEZJTEUgKiwgY29uc3QgY2hh
ciAqKTsKCgoKCgoKCmV4dGVybiBpbnQgYXNzZW1ibGVfaW50ZWdlciAocnR4LCBpbnQsIGludCk7
CmV4dGVybiBpbnQgYXNzZW1ibGVfZWhfaW50ZWdlciAocnR4LCBpbnQsIGludCk7CiMgMzM5ICIu
Li8uLi9nY2MvZ2NjL291dHB1dC5oIgpleHRlcm4gdm9pZCBjbGVhcl9jb25zdF9kb3VibGVfbWVt
ICh2b2lkKTsKCgpleHRlcm4gdm9pZCBkZWZlcl9hZGRyZXNzZWRfY29uc3RhbnRzICh2b2lkKTsK
CgoKZXh0ZXJuIHZvaWQgb3V0cHV0X2RlZmVycmVkX2FkZHJlc3NlZF9jb25zdGFudHMgKHZvaWQp
OwoKCmV4dGVybiBpbnQgZ2V0X3Bvb2xfc2l6ZSAodm9pZCk7CgoKCgoKCgpleHRlcm4gdm9pZCBv
dXRwdXRfY29uc3RhbnRfcG9vbCAoY29uc3QgY2hhciAqLCB0cmVlKTsKIyAzNjggIi4uLy4uL2dj
Yy9nY2Mvb3V0cHV0LmgiCmV4dGVybiB0cmVlIGluaXRpYWxpemVyX2NvbnN0YW50X3ZhbGlkX3Ag
KHRyZWUsIHRyZWUpOwoKCgoKCgoKZXh0ZXJuIHZvaWQgb3V0cHV0X2NvbnN0YW50ICh0cmVlLCBp
bnQpOwoKCgoKZXh0ZXJuIGludCB3aGljaF9hbHRlcm5hdGl2ZTsKIyAzOTAgIi4uLy4uL2djYy9n
Y2Mvb3V0cHV0LmgiCmV4dGVybiBydHggZmluYWxfc2VxdWVuY2U7CgoKCgoKZXh0ZXJuIGludCBm
bGFnX3BpYzsKCgoKCgpleHRlcm4gaW50IHNkYl9iZWdpbl9mdW5jdGlvbl9saW5lOwoKCgoKCmV4
dGVybiBGSUxFICphc21fb3V0X2ZpbGU7CgoKCmV4dGVybiBjb25zdCBjaGFyICpmaXJzdF9nbG9i
YWxfb2JqZWN0X25hbWU7CgoKZXh0ZXJuIGNvbnN0IGNoYXIgKndlYWtfZ2xvYmFsX29iamVjdF9u
YW1lOwoKCgoKCgpleHRlcm4gaW50IGN1cnJlbnRfZnVuY3Rpb25faXNfbGVhZjsKCgoKCmV4dGVy
biBpbnQgY3VycmVudF9mdW5jdGlvbl9ub3Rocm93OwoKCgoKCmV4dGVybiBpbnQgY3VycmVudF9m
dW5jdGlvbl9zcF9pc191bmNoYW5naW5nOwoKCgoKCmV4dGVybiBpbnQgY3VycmVudF9mdW5jdGlv
bl91c2VzX29ubHlfbGVhZl9yZWdzOwoKCgoKZXh0ZXJuIEZJTEUgKnJ0bF9kdW1wX2ZpbGU7CgoK
CmV4dGVybiBzdHJ1Y3QgcnR4X2RlZiAqY3VycmVudF9pbnNuX3ByZWRpY2F0ZTsKCgpleHRlcm4g
c3RydWN0IHJ0eF9kZWYgKmN1cnJlbnRfb3V0cHV0X2luc247CiMgNDY1ICIuLi8uLi9nY2MvZ2Nj
L291dHB1dC5oIgpleHRlcm4gY29uc3QgY2hhciAqdXNlcl9sYWJlbF9wcmVmaXg7CiMgMzcgIi4u
Ly4uL2djYy9nY2MvYy1kZWNsLmMiIDIKIyAxICIuLi8uLi9nY2MvZ2NjL2V4cHIuaCIgMQojIDUy
ICIuLi8uLi9nY2MvZ2NjL2V4cHIuaCIKZW51bSBleHBhbmRfbW9kaWZpZXIge0VYUEFORF9OT1JN
QUwsIEVYUEFORF9TVU0sCiAgICAgICAgICAgICAgICAgICAgICBFWFBBTkRfQ09OU1RfQUREUkVT
UywgRVhQQU5EX0lOSVRJQUxJWkVSLAogICAgICAgICAgICAgICAgICAgICAgRVhQQU5EX01FTU9S
WV9VU0VfV08sIEVYUEFORF9NRU1PUllfVVNFX1JXLAogICAgICAgICAgICAgICAgICAgICAgRVhQ
QU5EX01FTU9SWV9VU0VfQkFELCBFWFBBTkRfTUVNT1JZX1VTRV9ET05UfTsKIyA2OCAiLi4vLi4v
Z2NjL2djYy9leHByLmgiCmVudW0gbWVtb3J5X3VzZV9tb2RlIHtNRU1PUllfVVNFX0JBRCA9IDAs
IE1FTU9SWV9VU0VfUk8gPSAxLAogICAgICAgICAgICAgICAgICAgICAgTUVNT1JZX1VTRV9XTyA9
IDIsIE1FTU9SWV9VU0VfUlcgPSAzLAogICAgICAgICAgICAgICAgICAgICAgTUVNT1JZX1VTRV9U
VyA9IDYsIE1FTU9SWV9VU0VfRE9OVCA9IDk5fTsKIyA4NiAiLi4vLi4vZ2NjL2djYy9leHByLmgi
CnN0cnVjdCBhcmdzX3NpemUKewogIGludCBjb25zdGFudDsKICB0cmVlIHZhcjsKfTsKIyAxMjkg
Ii4uLy4uL2djYy9nY2MvZXhwci5oIgplbnVtIGRpcmVjdGlvbiB7bm9uZSwgdXB3YXJkLCBkb3du
d2FyZH07CiMgMjczICIuLi8uLi9nY2MvZ2NjL2V4cHIuaCIKIyAxICJpbnNuLWNvZGVzLmgiIDEK
CgoKCgplbnVtIGluc25fY29kZSB7CiAgQ09ERV9GT1JfY21wcWlfZXh0XzNfaW5zbiA9IDExLAog
IENPREVfRk9SX3g4Nl9mbnN0c3dfMSA9IDIzLAogIENPREVfRk9SX3g4Nl9zYWhmXzEgPSAyNCwK
ICBDT0RFX0ZPUl9wb3BzaTEgPSAzMCwKICBDT0RFX0ZPUl9zd2FweGYgPSA2OSwKICBDT0RFX0ZP
Ul96ZXJvX2V4dGVuZGhpc2kyX2FuZCA9IDcwLAogIENPREVfRk9SX3plcm9fZXh0ZW5kc2lkaTIg
PSA3OCwKICBDT0RFX0ZPUl9leHRlbmRzaWRpMiA9IDc5LAogIENPREVfRk9SX2V4dGVuZGhpc2ky
ID0gODAsCiAgQ09ERV9GT1JfZXh0ZW5kcWloaTIgPSA4MSwKICBDT0RFX0ZPUl9leHRlbmRxaXNp
MiA9IDgyLAogIENPREVfRk9SX3g4Nl9mbnN0Y3dfMSA9IDk4LAogIENPREVfRk9SX3g4Nl9mbGRj
d18xID0gOTksCiAgQ09ERV9GT1JfZmxvYXRoaXNmMiA9IDEwMCwKICBDT0RFX0ZPUl9mbG9hdHNp
c2YyID0gMTAxLAogIENPREVfRk9SX2Zsb2F0ZGlzZjIgPSAxMDIsCiAgQ09ERV9GT1JfZmxvYXRo
aWRmMiA9IDEwMywKICBDT0RFX0ZPUl9mbG9hdHNpZGYyID0gMTA0LAogIENPREVfRk9SX2Zsb2F0
ZGlkZjIgPSAxMDUsCiAgQ09ERV9GT1JfZmxvYXRoaXhmMiA9IDEwNiwKICBDT0RFX0ZPUl9mbG9h
dHNpeGYyID0gMTA3LAogIENPREVfRk9SX2Zsb2F0ZGl4ZjIgPSAxMDgsCiAgQ09ERV9GT1JfYWRk
ZGkzID0gMTA5LAogIENPREVfRk9SX2FkZHFpM19jYyA9IDExMiwKICBDT0RFX0ZPUl9hZGRxaV9l
eHRfMSA9IDEzNCwKICBDT0RFX0ZPUl9zdWJkaTMgPSAxMzYsCiAgQ09ERV9GT1Jfc3Vic2kzX2Nh
cnJ5ID0gMTM3LAogIENPREVfRk9SX211bHFpMyA9IDE0OSwKICBDT0RFX0ZPUl91bXVscWloaTMg
PSAxNTAsCiAgQ09ERV9GT1JfbXVscWloaTMgPSAxNTEsCiAgQ09ERV9GT1JfdW11bHNpZGkzID0g
MTUyLAogIENPREVfRk9SX211bHNpZGkzID0gMTUzLAogIENPREVfRk9SX2RpdnFpMyA9IDE1NiwK
ICBDT0RFX0ZPUl91ZGl2cWkzID0gMTU3LAogIENPREVfRk9SX2Rpdm1vZGhpNCA9IDE2MSwKICBD
T0RFX0ZPUl91ZGl2bW9kc2k0ID0gMTYyLAogIENPREVfRk9SX3Rlc3RzaV8xID0gMTY1LAogIENP
REVfRk9SX2FuZHFpX2V4dF8wID0gMTc4LAogIENPREVfRk9SX2FzaGxkaTNfMSA9IDIzMywKICBD
T0RFX0ZPUl94ODZfc2hsZF8xID0gMjM1LAogIENPREVfRk9SX2FzaHJkaTNfMSA9IDI0NCwKICBD
T0RFX0ZPUl94ODZfc2hyZF8xID0gMjQ2LAogIENPREVfRk9SX2FzaHJzaTNfMzEgPSAyNDcsCiAg
Q09ERV9GT1JfbHNocmRpM18xID0gMjYwLAogIENPREVfRk9SX3NldGNjXzIgPSAyODcsCiAgQ09E
RV9GT1JfanVtcCA9IDI5NiwKICBDT0RFX0ZPUl9pbmRpcmVjdF9qdW1wID0gMjk3LAogIENPREVf
Rk9SX3RhYmxlanVtcCA9IDI5OCwKICBDT0RFX0ZPUl9kb2xvb3BfZW5kX2ludGVybmFsID0gMzAw
LAogIENPREVfRk9SX2Jsb2NrYWdlID0gMzA1LAogIENPREVfRk9SX3JldHVybl9pbnRlcm5hbCA9
IDMwNiwKICBDT0RFX0ZPUl9yZXR1cm5fcG9wX2ludGVybmFsID0gMzA3LAogIENPREVfRk9SX3Jl
dHVybl9pbmRpcmVjdF9pbnRlcm5hbCA9IDMwOCwKICBDT0RFX0ZPUl9ub3AgPSAzMDksCiAgQ09E
RV9GT1JfcHJvbG9ndWVfc2V0X2dvdCA9IDMxMCwKICBDT0RFX0ZPUl9wcm9sb2d1ZV9nZXRfcGMg
PSAzMTEsCiAgQ09ERV9GT1JfbGVhdmUgPSAzMTIsCiAgQ09ERV9GT1JfZmZzc2lfMSA9IDMxMywK
ICBDT0RFX0ZPUl9zcXJ0c2YyID0gMzMyLAogIENPREVfRk9SX3NxcnRkZjIgPSAzMzMsCiAgQ09E
RV9GT1Jfc3FydHhmMiA9IDMzNSwKICBDT0RFX0ZPUl9zaW5kZjIgPSAzMzgsCiAgQ09ERV9GT1Jf
c2luc2YyID0gMzM5LAogIENPREVfRk9SX3NpbnhmMiA9IDM0MSwKICBDT0RFX0ZPUl9jb3NkZjIg
PSAzNDIsCiAgQ09ERV9GT1JfY29zc2YyID0gMzQzLAogIENPREVfRk9SX2Nvc3hmMiA9IDM0NSwK
ICBDT0RFX0ZPUl9jbGQgPSAzNDYsCiAgQ09ERV9GT1Jfc3RybW92c2lfMSA9IDM0NywKICBDT0RF
X0ZPUl9zdHJtb3ZoaV8xID0gMzQ4LAogIENPREVfRk9SX3N0cm1vdnFpXzEgPSAzNDksCiAgQ09E
RV9GT1JfcmVwX21vdnNpID0gMzUwLAogIENPREVfRk9SX3JlcF9tb3ZxaSA9IDM1MSwKICBDT0RF
X0ZPUl9zdHJzZXRzaV8xID0gMzUyLAogIENPREVfRk9SX3N0cnNldGhpXzEgPSAzNTMsCiAgQ09E
RV9GT1Jfc3Ryc2V0cWlfMSA9IDM1NCwKICBDT0RFX0ZPUl9yZXBfc3Rvc3NpID0gMzU1LAogIENP
REVfRk9SX3JlcF9zdG9zcWkgPSAzNTYsCiAgQ09ERV9GT1JfY21wc3Ryc2lfbnpfMSA9IDM1NywK
ICBDT0RFX0ZPUl9jbXBzdHJzaV8xID0gMzU4LAogIENPREVfRk9SX3N0cmxlbnNpXzEgPSAzNTks
CiAgQ09ERV9GT1JfeDg2X21vdnNpY2NfMF9tMSA9IDM2MCwKICBDT0RFX0ZPUl9wcm9fZXBpbG9n
dWVfYWRqdXN0X3N0YWNrID0gMzY2LAogIENPREVfRk9SX2FsbG9jYXRlX3N0YWNrX3dvcmtlciA9
IDM2NywKICBDT0RFX0ZPUl90cmFwID0gMzcyLAogIENPREVfRk9SX21vdnY0c2ZfaW50ZXJuYWwg
PSAzNzQsCiAgQ09ERV9GT1JfbW92djRzaV9pbnRlcm5hbCA9IDM3NSwKICBDT0RFX0ZPUl9tb3Z2
OHFpX2ludGVybmFsID0gMzc2LAogIENPREVfRk9SX21vdnY0aGlfaW50ZXJuYWwgPSAzNzcsCiAg
Q09ERV9GT1JfbW92djJzaV9pbnRlcm5hbCA9IDM3OCwKICBDT0RFX0ZPUl9tb3Z0aV9pbnRlcm5h
bCA9IDM4NSwKICBDT0RFX0ZPUl9zc2VfbW92YXBzID0gMzg2LAogIENPREVfRk9SX3NzZV9tb3Z1
cHMgPSAzODcsCiAgQ09ERV9GT1Jfc3NlX21vdm1za3BzID0gMzg4LAogIENPREVfRk9SX21teF9w
bW92bXNrYiA9IDM4OSwKICBDT0RFX0ZPUl9tbXhfbWFza21vdnEgPSAzOTAsCiAgQ09ERV9GT1Jf
c3NlX21vdm50djRzZiA9IDM5MSwKICBDT0RFX0ZPUl9zc2VfbW92bnRkaSA9IDM5MiwKICBDT0RF
X0ZPUl9zc2VfbW92aGxwcyA9IDM5MywKICBDT0RFX0ZPUl9zc2VfbW92bGhwcyA9IDM5NCwKICBD
T0RFX0ZPUl9zc2VfbW92aHBzID0gMzk1LAogIENPREVfRk9SX3NzZV9tb3ZscHMgPSAzOTYsCiAg
Q09ERV9GT1Jfc3NlX2xvYWRzcyA9IDM5NywKICBDT0RFX0ZPUl9zc2VfbW92c3MgPSAzOTgsCiAg
Q09ERV9GT1Jfc3NlX3N0b3Jlc3MgPSAzOTksCiAgQ09ERV9GT1Jfc3NlX3NodWZwcyA9IDQwMCwK
ICBDT0RFX0ZPUl9hZGR2NHNmMyA9IDQwMSwKICBDT0RFX0ZPUl92bWFkZHY0c2YzID0gNDAyLAog
IENPREVfRk9SX3N1YnY0c2YzID0gNDAzLAogIENPREVfRk9SX3Ztc3VidjRzZjMgPSA0MDQsCiAg
Q09ERV9GT1JfbXVsdjRzZjMgPSA0MDUsCiAgQ09ERV9GT1Jfdm1tdWx2NHNmMyA9IDQwNiwKICBD
T0RFX0ZPUl9kaXZ2NHNmMyA9IDQwNywKICBDT0RFX0ZPUl92bWRpdnY0c2YzID0gNDA4LAogIENP
REVfRk9SX3JjcHY0c2YyID0gNDA5LAogIENPREVfRk9SX3ZtcmNwdjRzZjIgPSA0MTAsCiAgQ09E
RV9GT1JfcnNxcnR2NHNmMiA9IDQxMSwKICBDT0RFX0ZPUl92bXJzcXJ0djRzZjIgPSA0MTIsCiAg
Q09ERV9GT1Jfc3FydHY0c2YyID0gNDEzLAogIENPREVfRk9SX3Ztc3FydHY0c2YyID0gNDE0LAog
IENPREVfRk9SX3NzZV9hbmR0aTMgPSA0MTUsCiAgQ09ERV9GT1Jfc3NlX25hbmR0aTMgPSA0MTYs
CiAgQ09ERV9GT1Jfc3NlX2lvcnRpMyA9IDQxNywKICBDT0RFX0ZPUl9zc2VfeG9ydGkzID0gNDE4
LAogIENPREVfRk9SX3NzZV9jbHJ0aSA9IDQxOSwKICBDT0RFX0ZPUl9tYXNrY21wdjRzZjMgPSA0
MjAsCiAgQ09ERV9GT1JfbWFza25jbXB2NHNmMyA9IDQyMSwKICBDT0RFX0ZPUl92bW1hc2tjbXB2
NHNmMyA9IDQyMiwKICBDT0RFX0ZPUl92bW1hc2tuY21wdjRzZjMgPSA0MjMsCiAgQ09ERV9GT1Jf
c3NlX2NvbWkgPSA0MjQsCiAgQ09ERV9GT1Jfc3NlX3Vjb21pID0gNDI1LAogIENPREVfRk9SX3Nz
ZV91bnBja2hwcyA9IDQyNiwKICBDT0RFX0ZPUl9zc2VfdW5wY2tscHMgPSA0MjcsCiAgQ09ERV9G
T1Jfc21heHY0c2YzID0gNDI4LAogIENPREVfRk9SX3Ztc21heHY0c2YzID0gNDI5LAogIENPREVf
Rk9SX3NtaW52NHNmMyA9IDQzMCwKICBDT0RFX0ZPUl92bXNtaW52NHNmMyA9IDQzMSwKICBDT0RF
X0ZPUl9jdnRwaTJwcyA9IDQzMiwKICBDT0RFX0ZPUl9jdnRwczJwaSA9IDQzMywKICBDT0RFX0ZP
Ul9jdnR0cHMycGkgPSA0MzQsCiAgQ09ERV9GT1JfY3Z0c2kyc3MgPSA0MzUsCiAgQ09ERV9GT1Jf
Y3Z0c3Myc2kgPSA0MzYsCiAgQ09ERV9GT1JfY3Z0dHNzMnNpID0gNDM3LAogIENPREVfRk9SX2Fk
ZHY4cWkzID0gNDM4LAogIENPREVfRk9SX2FkZHY0aGkzID0gNDM5LAogIENPREVfRk9SX2FkZHYy
c2kzID0gNDQwLAogIENPREVfRk9SX3NzYWRkdjhxaTMgPSA0NDEsCiAgQ09ERV9GT1Jfc3NhZGR2
NGhpMyA9IDQ0MiwKICBDT0RFX0ZPUl91c2FkZHY4cWkzID0gNDQzLAogIENPREVfRk9SX3VzYWRk
djRoaTMgPSA0NDQsCiAgQ09ERV9GT1Jfc3VidjhxaTMgPSA0NDUsCiAgQ09ERV9GT1Jfc3VidjRo
aTMgPSA0NDYsCiAgQ09ERV9GT1Jfc3VidjJzaTMgPSA0NDcsCiAgQ09ERV9GT1Jfc3NzdWJ2OHFp
MyA9IDQ0OCwKICBDT0RFX0ZPUl9zc3N1YnY0aGkzID0gNDQ5LAogIENPREVfRk9SX3Vzc3Vidjhx
aTMgPSA0NTAsCiAgQ09ERV9GT1JfdXNzdWJ2NGhpMyA9IDQ1MSwKICBDT0RFX0ZPUl9tdWx2NGhp
MyA9IDQ1MiwKICBDT0RFX0ZPUl9zbXVsdjRoaTNfaGlnaHBhcnQgPSA0NTMsCiAgQ09ERV9GT1Jf
dW11bHY0aGkzX2hpZ2hwYXJ0ID0gNDU0LAogIENPREVfRk9SX21teF9wbWFkZHdkID0gNDU1LAog
IENPREVfRk9SX21teF9pb3JkaTMgPSA0NTYsCiAgQ09ERV9GT1JfbW14X3hvcmRpMyA9IDQ1NywK
ICBDT0RFX0ZPUl9tbXhfY2xyZGkgPSA0NTgsCiAgQ09ERV9GT1JfbW14X2FuZGRpMyA9IDQ1OSwK
ICBDT0RFX0ZPUl9tbXhfbmFuZGRpMyA9IDQ2MCwKICBDT0RFX0ZPUl9tbXhfdWF2Z3Y4cWkzID0g
NDYxLAogIENPREVfRk9SX21teF91YXZndjRoaTMgPSA0NjIsCiAgQ09ERV9GT1JfbW14X3BzYWRi
dyA9IDQ2MywKICBDT0RFX0ZPUl9tbXhfcGluc3J3ID0gNDY0LAogIENPREVfRk9SX21teF9wZXh0
cncgPSA0NjUsCiAgQ09ERV9GT1JfbW14X3BzaHVmdyA9IDQ2NiwKICBDT0RFX0ZPUl9lcXY4cWkz
ID0gNDY3LAogIENPREVfRk9SX2VxdjRoaTMgPSA0NjgsCiAgQ09ERV9GT1JfZXF2MnNpMyA9IDQ2
OSwKICBDT0RFX0ZPUl9ndHY4cWkzID0gNDcwLAogIENPREVfRk9SX2d0djRoaTMgPSA0NzEsCiAg
Q09ERV9GT1JfZ3R2MnNpMyA9IDQ3MiwKICBDT0RFX0ZPUl91bWF4djhxaTMgPSA0NzMsCiAgQ09E
RV9GT1Jfc21heHY0aGkzID0gNDc0LAogIENPREVfRk9SX3VtaW52OHFpMyA9IDQ3NSwKICBDT0RF
X0ZPUl9zbWludjRoaTMgPSA0NzYsCiAgQ09ERV9GT1JfYXNocnY0aGkzID0gNDc3LAogIENPREVf
Rk9SX2FzaHJ2MnNpMyA9IDQ3OCwKICBDT0RFX0ZPUl9sc2hydjRoaTMgPSA0NzksCiAgQ09ERV9G
T1JfbHNocnYyc2kzID0gNDgwLAogIENPREVfRk9SX21teF9sc2hyZGkzID0gNDgxLAogIENPREVf
Rk9SX2FzaGx2NGhpMyA9IDQ4MiwKICBDT0RFX0ZPUl9hc2hsdjJzaTMgPSA0ODMsCiAgQ09ERV9G
T1JfbW14X2FzaGxkaTMgPSA0ODQsCiAgQ09ERV9GT1JfbW14X3BhY2tzc3diID0gNDg1LAogIENP
REVfRk9SX21teF9wYWNrc3NkdyA9IDQ4NiwKICBDT0RFX0ZPUl9tbXhfcGFja3Vzd2IgPSA0ODcs
CiAgQ09ERV9GT1JfbW14X3B1bnBja2hidyA9IDQ4OCwKICBDT0RFX0ZPUl9tbXhfcHVucGNraHdk
ID0gNDg5LAogIENPREVfRk9SX21teF9wdW5wY2toZHEgPSA0OTAsCiAgQ09ERV9GT1JfbW14X3B1
bnBja2xidyA9IDQ5MSwKICBDT0RFX0ZPUl9tbXhfcHVucGNrbHdkID0gNDkyLAogIENPREVfRk9S
X21teF9wdW5wY2tsZHEgPSA0OTMsCiAgQ09ERV9GT1JfZW1tcyA9IDQ5NCwKICBDT0RFX0ZPUl9s
ZG14Y3NyID0gNDk1LAogIENPREVfRk9SX3N0bXhjc3IgPSA0OTYsCiAgQ09ERV9GT1JfcHJlZmV0
Y2ggPSA0OTgsCiAgQ09ERV9GT1JfY21wZGkgPSA0OTksCiAgQ09ERV9GT1JfY21wc2kgPSA1MDAs
CiAgQ09ERV9GT1JfY21waGkgPSA1MDEsCiAgQ09ERV9GT1JfY21wcWkgPSA1MDIsCiAgQ09ERV9G
T1JfY21wc2lfMSA9IDUwMywKICBDT0RFX0ZPUl9jbXBxaV9leHRfMyA9IDUwNCwKICBDT0RFX0ZP
Ul9jbXB4ZiA9IDUwNSwKICBDT0RFX0ZPUl9jbXBkZiA9IDUwNiwKICBDT0RFX0ZPUl9jbXBzZiA9
IDUwNywKICBDT0RFX0ZPUl9tb3ZzaSA9IDUwOSwKICBDT0RFX0ZPUl9tb3ZoaSA9IDUxMCwKICBD
T0RFX0ZPUl9tb3ZzdHJpY3RoaSA9IDUxMSwKICBDT0RFX0ZPUl9tb3ZxaSA9IDUxMiwKICBDT0RF
X0ZPUl9yZWxvYWRfb3V0cWkgPSA1MTMsCiAgQ09ERV9GT1JfbW92c3RyaWN0cWkgPSA1MTQsCiAg
Q09ERV9GT1JfbW92ZGkgPSA1MTUsCiAgQ09ERV9GT1JfbW92c2YgPSA1MTgsCiAgQ09ERV9GT1Jf
bW92ZGYgPSA1MjIsCiAgQ09ERV9GT1JfbW92eGYgPSA1MjcsCiAgQ09ERV9GT1JfemVyb19leHRl
bmRoaXNpMiA9IDUzMiwKICBDT0RFX0ZPUl96ZXJvX2V4dGVuZHFpaGkyID0gNTM0LAogIENPREVf
Rk9SX3plcm9fZXh0ZW5kcWlzaTIgPSA1MzgsCiAgQ09ERV9GT1JfZXh0ZW5kc2ZkZjIgPSA1NTAs
CiAgQ09ERV9GT1JfZXh0ZW5kc2Z4ZjIgPSA1NTEsCiAgQ09ERV9GT1JfZXh0ZW5kZGZ4ZjIgPSA1
NTIsCiAgQ09ERV9GT1JfdHJ1bmNkZnNmMiA9IDU1MywKICBDT0RFX0ZPUl90cnVuY3hmc2YyID0g
NTU2LAogIENPREVfRk9SX3RydW5jeGZkZjIgPSA1NTksCiAgQ09ERV9GT1JfZml4X3RydW5jeGZk
aTIgPSA1NjIsCiAgQ09ERV9GT1JfZml4X3RydW5jZGZkaTIgPSA1NjMsCiAgQ09ERV9GT1JfZml4
X3RydW5jc2ZkaTIgPSA1NjQsCiAgQ09ERV9GT1JfZml4X3RydW5jeGZzaTIgPSA1NjYsCiAgQ09E
RV9GT1JfZml4X3RydW5jZGZzaTIgPSA1NjcsCiAgQ09ERV9GT1JfZml4X3RydW5jc2ZzaTIgPSA1
NjgsCiAgQ09ERV9GT1JfZml4X3RydW5jeGZoaTIgPSA1NzAsCiAgQ09ERV9GT1JfZml4X3RydW5j
ZGZoaTIgPSA1NzEsCiAgQ09ERV9GT1JfZml4X3RydW5jc2ZoaTIgPSA1NzIsCiAgQ09ERV9GT1Jf
YWRkc2kzID0gNTc4LAogIENPREVfRk9SX2FkZGhpMyA9IDU4MywKICBDT0RFX0ZPUl9hZGRxaTMg
PSA1ODQsCiAgQ09ERV9GT1JfYWRkeGYzID0gNTg1LAogIENPREVfRk9SX2FkZGRmMyA9IDU4NiwK
ICBDT0RFX0ZPUl9hZGRzZjMgPSA1ODcsCiAgQ09ERV9GT1Jfc3Vic2kzID0gNTg5LAogIENPREVf
Rk9SX3N1YmhpMyA9IDU5MCwKICBDT0RFX0ZPUl9zdWJxaTMgPSA1OTEsCiAgQ09ERV9GT1Jfc3Vi
eGYzID0gNTkyLAogIENPREVfRk9SX3N1YmRmMyA9IDU5MywKICBDT0RFX0ZPUl9zdWJzZjMgPSA1
OTQsCiAgQ09ERV9GT1JfbXVsc2kzID0gNTk1LAogIENPREVfRk9SX211bGhpMyA9IDU5NiwKICBD
T0RFX0ZPUl9tdWx4ZjMgPSA1OTcsCiAgQ09ERV9GT1JfbXVsZGYzID0gNTk4LAogIENPREVfRk9S
X211bHNmMyA9IDU5OSwKICBDT0RFX0ZPUl9kaXZ4ZjMgPSA2MDAsCiAgQ09ERV9GT1JfZGl2ZGYz
ID0gNjAxLAogIENPREVfRk9SX2RpdnNmMyA9IDYwMiwKICBDT0RFX0ZPUl9kaXZtb2RzaTQgPSA2
MDMsCiAgQ09ERV9GT1JfdWRpdm1vZGhpNCA9IDYwNiwKICBDT0RFX0ZPUl90ZXN0c2lfY2Nub18x
ID0gNjA3LAogIENPREVfRk9SX3Rlc3RxaV9jY3pfMSA9IDYwOCwKICBDT0RFX0ZPUl90ZXN0cWlf
ZXh0X2Njbm9fMCA9IDYwOSwKICBDT0RFX0ZPUl9hbmRzaTMgPSA2MTEsCiAgQ09ERV9GT1JfYW5k
aGkzID0gNjE1LAogIENPREVfRk9SX2FuZHFpMyA9IDYxNiwKICBDT0RFX0ZPUl9pb3JzaTMgPSA2
MTcsCiAgQ09ERV9GT1JfaW9yaGkzID0gNjE4LAogIENPREVfRk9SX2lvcnFpMyA9IDYxOSwKICBD
T0RFX0ZPUl94b3JzaTMgPSA2MjAsCiAgQ09ERV9GT1JfeG9yaGkzID0gNjIxLAogIENPREVfRk9S
X3hvcnFpMyA9IDYyMiwKICBDT0RFX0ZPUl94b3JxaV9jY19leHRfMSA9IDYyMywKICBDT0RFX0ZP
Ul9uZWdkaTIgPSA2MjQsCiAgQ09ERV9GT1JfbmVnc2kyID0gNjI2LAogIENPREVfRk9SX25lZ2hp
MiA9IDYyNywKICBDT0RFX0ZPUl9uZWdxaTIgPSA2MjgsCiAgQ09ERV9GT1JfbmVnc2YyID0gNjI5
LAogIENPREVfRk9SX25lZ2RmMiA9IDYzMywKICBDT0RFX0ZPUl9uZWd4ZjIgPSA2MzYsCiAgQ09E
RV9GT1JfYWJzc2YyID0gNjM5LAogIENPREVfRk9SX2Fic2RmMiA9IDY0MywKICBDT0RFX0ZPUl9h
YnN4ZjIgPSA2NDYsCiAgQ09ERV9GT1Jfb25lX2NtcGxzaTIgPSA2NDksCiAgQ09ERV9GT1Jfb25l
X2NtcGxoaTIgPSA2NTEsCiAgQ09ERV9GT1Jfb25lX2NtcGxxaTIgPSA2NTMsCiAgQ09ERV9GT1Jf
YXNobGRpMyA9IDY1NSwKICBDT0RFX0ZPUl94ODZfc2hpZnRfYWRqXzEgPSA2NTgsCiAgQ09ERV9G
T1JfeDg2X3NoaWZ0X2Fkal8yID0gNjU5LAogIENPREVfRk9SX2FzaGxzaTMgPSA2NjAsCiAgQ09E
RV9GT1JfYXNobGhpMyA9IDY2MiwKICBDT0RFX0ZPUl9hc2hscWkzID0gNjYzLAogIENPREVfRk9S
X2FzaHJkaTMgPSA2NjQsCiAgQ09ERV9GT1JfeDg2X3NoaWZ0X2Fkal8zID0gNjY3LAogIENPREVf
Rk9SX2FzaHJzaTMgPSA2NjgsCiAgQ09ERV9GT1JfYXNocmhpMyA9IDY2OSwKICBDT0RFX0ZPUl9h
c2hycWkzID0gNjcwLAogIENPREVfRk9SX2xzaHJkaTMgPSA2NzEsCiAgQ09ERV9GT1JfbHNocnNp
MyA9IDY3NCwKICBDT0RFX0ZPUl9sc2hyaGkzID0gNjc1LAogIENPREVfRk9SX2xzaHJxaTMgPSA2
NzYsCiAgQ09ERV9GT1Jfcm90bHNpMyA9IDY3NywKICBDT0RFX0ZPUl9yb3RsaGkzID0gNjc4LAog
IENPREVfRk9SX3JvdGxxaTMgPSA2NzksCiAgQ09ERV9GT1Jfcm90cnNpMyA9IDY4MCwKICBDT0RF
X0ZPUl9yb3RyaGkzID0gNjgxLAogIENPREVfRk9SX3JvdHJxaTMgPSA2ODIsCiAgQ09ERV9GT1Jf
ZXh0diA9IDY4MywKICBDT0RFX0ZPUl9leHR6diA9IDY4NCwKICBDT0RFX0ZPUl9pbnN2ID0gNjg1
LAogIENPREVfRk9SX3NlcSA9IDY4NiwKICBDT0RFX0ZPUl9zbmUgPSA2ODcsCiAgQ09ERV9GT1Jf
c2d0ID0gNjg4LAogIENPREVfRk9SX3NndHUgPSA2ODksCiAgQ09ERV9GT1Jfc2x0ID0gNjkwLAog
IENPREVfRk9SX3NsdHUgPSA2OTEsCiAgQ09ERV9GT1Jfc2dlID0gNjkyLAogIENPREVfRk9SX3Nn
ZXUgPSA2OTMsCiAgQ09ERV9GT1Jfc2xlID0gNjk0LAogIENPREVfRk9SX3NsZXUgPSA2OTUsCiAg
Q09ERV9GT1Jfc3Vub3JkZXJlZCA9IDY5NiwKICBDT0RFX0ZPUl9zb3JkZXJlZCA9IDY5NywKICBD
T0RFX0ZPUl9zdW5lcSA9IDY5OCwKICBDT0RFX0ZPUl9zdW5nZSA9IDY5OSwKICBDT0RFX0ZPUl9z
dW5ndCA9IDcwMCwKICBDT0RFX0ZPUl9zdW5sZSA9IDcwMSwKICBDT0RFX0ZPUl9zdW5sdCA9IDcw
MiwKICBDT0RFX0ZPUl9zbHRndCA9IDcwMywKICBDT0RFX0ZPUl9iZXEgPSA3MDQsCiAgQ09ERV9G
T1JfYm5lID0gNzA1LAogIENPREVfRk9SX2JndCA9IDcwNiwKICBDT0RFX0ZPUl9iZ3R1ID0gNzA3
LAogIENPREVfRk9SX2JsdCA9IDcwOCwKICBDT0RFX0ZPUl9ibHR1ID0gNzA5LAogIENPREVfRk9S
X2JnZSA9IDcxMCwKICBDT0RFX0ZPUl9iZ2V1ID0gNzExLAogIENPREVfRk9SX2JsZSA9IDcxMiwK
ICBDT0RFX0ZPUl9ibGV1ID0gNzEzLAogIENPREVfRk9SX2J1bm9yZGVyZWQgPSA3MTQsCiAgQ09E
RV9GT1JfYm9yZGVyZWQgPSA3MTUsCiAgQ09ERV9GT1JfYnVuZXEgPSA3MTYsCiAgQ09ERV9GT1Jf
YnVuZ2UgPSA3MTcsCiAgQ09ERV9GT1JfYnVuZ3QgPSA3MTgsCiAgQ09ERV9GT1JfYnVubGUgPSA3
MTksCiAgQ09ERV9GT1JfYnVubHQgPSA3MjAsCiAgQ09ERV9GT1JfYmx0Z3QgPSA3MjEsCiAgQ09E
RV9GT1JfY2FzZXNpID0gNzI0LAogIENPREVfRk9SX2RvbG9vcF9lbmQgPSA3MjUsCiAgQ09ERV9G
T1JfY2FsbF9wb3AgPSA3MjgsCiAgQ09ERV9GT1JfY2FsbCA9IDcyOSwKICBDT0RFX0ZPUl9jYWxs
X3ZhbHVlX3BvcCA9IDczMCwKICBDT0RFX0ZPUl9jYWxsX3ZhbHVlID0gNzMxLAogIENPREVfRk9S
X3VudHlwZWRfY2FsbCA9IDczMiwKICBDT0RFX0ZPUl9yZXR1cm4gPSA3MzMsCiAgQ09ERV9GT1Jf
cHJvbG9ndWUgPSA3MzQsCiAgQ09ERV9GT1JfZXBpbG9ndWUgPSA3MzUsCiAgQ09ERV9GT1Jfc2li
Y2FsbF9lcGlsb2d1ZSA9IDczNiwKICBDT0RFX0ZPUl9mZnNzaTIgPSA3MzcsCiAgQ09ERV9GT1Jf
bW92c3Ryc2kgPSA3NDAsCiAgQ09ERV9GT1Jfc3RybW92c2kgPSA3NDEsCiAgQ09ERV9GT1Jfc3Ry
bW92aGkgPSA3NDIsCiAgQ09ERV9GT1Jfc3RybW92cWkgPSA3NDMsCiAgQ09ERV9GT1JfY2xyc3Ry
c2kgPSA3NDQsCiAgQ09ERV9GT1Jfc3Ryc2V0c2kgPSA3NDUsCiAgQ09ERV9GT1Jfc3Ryc2V0aGkg
PSA3NDYsCiAgQ09ERV9GT1Jfc3Ryc2V0cWkgPSA3NDcsCiAgQ09ERV9GT1JfY21wc3Ryc2kgPSA3
NDgsCiAgQ09ERV9GT1JfY21waW50cWkgPSA3NDksCiAgQ09ERV9GT1Jfc3RybGVuc2kgPSA3NTAs
CiAgQ09ERV9GT1JfbW92c2ljYyA9IDc1MSwKICBDT0RFX0ZPUl9tb3ZoaWNjID0gNzUyLAogIENP
REVfRk9SX21vdnNmY2MgPSA3NTMsCiAgQ09ERV9GT1JfbW92ZGZjYyA9IDc1NCwKICBDT0RFX0ZP
Ul9tb3Z4ZmNjID0gNzU1LAogIENPREVfRk9SX2FsbG9jYXRlX3N0YWNrID0gNzU2LAogIENPREVf
Rk9SX2V4Y2VwdGlvbl9yZWNlaXZlciA9IDc1NywKICBDT0RFX0ZPUl9idWlsdGluX3NldGptcF9y
ZWNlaXZlciA9IDc1OCwKICBDT0RFX0ZPUl9jb25kaXRpb25hbF90cmFwID0gODA2LAogIENPREVf
Rk9SX21vdnRpID0gODA3LAogIENPREVfRk9SX21vdnY0c2YgPSA4MDgsCiAgQ09ERV9GT1JfbW92
djRzaSA9IDgwOSwKICBDT0RFX0ZPUl9tb3Z2MnNpID0gODEwLAogIENPREVfRk9SX21vdnY0aGkg
PSA4MTEsCiAgQ09ERV9GT1JfbW92djhxaSA9IDgxMiwKICBDT0RFX0ZPUl9zZmVuY2UgPSA4MTks
CiAgQ09ERV9GT1Jfbm90aGluZyA9IDgyMCB9OwojIDI3NCAiLi4vLi4vZ2NjL2djYy9leHByLmgi
IDIKCnR5cGVkZWYgc3RydWN0IG9wdGFiCnsKICBlbnVtIHJ0eF9jb2RlIGNvZGU7CiAgc3RydWN0
IHsKICAgIGVudW0gaW5zbl9jb2RlIGluc25fY29kZTsKICAgIHJ0eCBsaWJmdW5jOwogIH0gaGFu
ZGxlcnMgWyhpbnQpIE1BWF9NQUNISU5FX01PREVdOwp9ICogb3B0YWI7CiMgMjk4ICIuLi8uLi9n
Y2MvZ2NjL2V4cHIuaCIKZW51bSBvcHRhYl9pbmRleAp7CiAgT1RJX2FkZCwKICBPVElfYWRkdiwK
ICBPVElfc3ViLAogIE9USV9zdWJ2LAoKCiAgT1RJX3NtdWwsCiAgT1RJX3NtdWx2LAoKICBPVElf
c211bF9oaWdocGFydCwKICBPVElfdW11bF9oaWdocGFydCwKCiAgT1RJX3NtdWxfd2lkZW4sCiAg
T1RJX3VtdWxfd2lkZW4sCgoKICBPVElfc2RpdiwKICBPVElfc2RpdnYsCgogIE9USV9zZGl2bW9k
LAogIE9USV91ZGl2LAogIE9USV91ZGl2bW9kLAoKICBPVElfc21vZCwKICBPVElfdW1vZCwKCiAg
T1RJX2Zsb2RpdiwKCiAgT1RJX2Z0cnVuYywKCgogIE9USV9hbmQsCgogIE9USV9pb3IsCgogIE9U
SV94b3IsCgoKICBPVElfYXNobCwKCiAgT1RJX2xzaHIsCgogIE9USV9hc2hyLAoKICBPVElfcm90
bCwKCiAgT1RJX3JvdHIsCgogIE9USV9zbWluLAoKICBPVElfc21heCwKCiAgT1RJX3VtaW4sCgog
IE9USV91bWF4LAoKCiAgT1RJX21vdiwKCiAgT1RJX21vdnN0cmljdCwKCgoKICBPVElfbmVnLAog
IE9USV9uZWd2LAoKICBPVElfYWJzLAogIE9USV9hYnN2LAoKICBPVElfb25lX2NtcGwsCgogIE9U
SV9mZnMsCgogIE9USV9zcXJ0LAoKICBPVElfc2luLAoKICBPVElfY29zLAoKCiAgT1RJX2NtcCwK
CiAgT1RJX3VjbXAsCgogIE9USV90c3QsCgoKICBPVElfc3RybGVuLAoKCiAgT1RJX2NicmFuY2gs
CiAgT1RJX2Ntb3YsCiAgT1RJX2NzdG9yZSwKCiAgT1RJX01BWAp9OwoKZXh0ZXJuIG9wdGFiIG9w
dGFiX3RhYmxlW09USV9NQVhdOwojIDQ1NSAiLi4vLi4vZ2NjL2djYy9leHByLmgiCmV4dGVybiBl
bnVtIGluc25fY29kZSBleHRlbmR0YWJbTUFYX01BQ0hJTkVfTU9ERV1bTUFYX01BQ0hJTkVfTU9E
RV1bMl07CgoKZXh0ZXJuIGVudW0gaW5zbl9jb2RlIGZpeHRhYlsoaW50KSBNQVhfTUFDSElORV9N
T0RFXVsoaW50KSBNQVhfTUFDSElORV9NT0RFXVsyXTsKZXh0ZXJuIGVudW0gaW5zbl9jb2RlIGZp
eHRydW5jdGFiWyhpbnQpIE1BWF9NQUNISU5FX01PREVdWyhpbnQpIE1BWF9NQUNISU5FX01PREVd
WzJdOwpleHRlcm4gZW51bSBpbnNuX2NvZGUgZmxvYXR0YWJbKGludCkgTUFYX01BQ0hJTkVfTU9E
RV1bKGludCkgTUFYX01BQ0hJTkVfTU9ERV1bMl07CgoKZXh0ZXJuIG9wdGFiIGNvZGVfdG9fb3B0
YWJbKChpbnQpTEFTVF9BTkRfVU5VU0VEX1JUWF9DT0RFKSArIDFdOwoKCgoKCgoKZW51bSBvcHRh
Yl9tZXRob2RzCnsKICBPUFRBQl9ESVJFQ1QsCiAgT1BUQUJfTElCLAogIE9QVEFCX1dJREVOLAog
IE9QVEFCX0xJQl9XSURFTiwKICBPUFRBQl9NVVNUX1dJREVOCn07CgoKZW51bSBsaWJmdW5jX2lu
ZGV4CnsKICBMVElfZXh0ZW5kc2ZkZjIsCiAgTFRJX2V4dGVuZHNmeGYyLAogIExUSV9leHRlbmRz
ZnRmMiwKICBMVElfZXh0ZW5kZGZ4ZjIsCiAgTFRJX2V4dGVuZGRmdGYyLAoKICBMVElfdHJ1bmNk
ZnNmMiwKICBMVElfdHJ1bmN4ZnNmMiwKICBMVElfdHJ1bmN0ZnNmMiwKICBMVElfdHJ1bmN4ZmRm
MiwKICBMVElfdHJ1bmN0ZmRmMiwKCiAgTFRJX21lbWNweSwKICBMVElfYmNvcHksCiAgTFRJX21l
bWNtcCwKICBMVElfYmNtcCwKICBMVElfbWVtc2V0LAogIExUSV9iemVybywKCiAgTFRJX3Rocm93
LAogIExUSV9yZXRocm93LAogIExUSV9zanRocm93LAogIExUSV9zanBvcG50aHJvdywKICBMVElf
dGVybWluYXRlLAogIExUSV9zZXRqbXAsCiAgTFRJX2xvbmdqbXAsCiAgTFRJX2VoX3J0aW1lX21h
dGNoLAoKICBMVElfZXFoZjIsCiAgTFRJX25laGYyLAogIExUSV9ndGhmMiwKICBMVElfZ2VoZjIs
CiAgTFRJX2x0aGYyLAogIExUSV9sZWhmMiwKICBMVElfdW5vcmRoZjIsCgogIExUSV9lcXNmMiwK
ICBMVElfbmVzZjIsCiAgTFRJX2d0c2YyLAogIExUSV9nZXNmMiwKICBMVElfbHRzZjIsCiAgTFRJ
X2xlc2YyLAogIExUSV91bm9yZHNmMiwKCiAgTFRJX2VxZGYyLAogIExUSV9uZWRmMiwKICBMVElf
Z3RkZjIsCiAgTFRJX2dlZGYyLAogIExUSV9sdGRmMiwKICBMVElfbGVkZjIsCiAgTFRJX3Vub3Jk
ZGYyLAoKICBMVElfZXF4ZjIsCiAgTFRJX25leGYyLAogIExUSV9ndHhmMiwKICBMVElfZ2V4ZjIs
CiAgTFRJX2x0eGYyLAogIExUSV9sZXhmMiwKICBMVElfdW5vcmR4ZjIsCgogIExUSV9lcXRmMiwK
ICBMVElfbmV0ZjIsCiAgTFRJX2d0dGYyLAogIExUSV9nZXRmMiwKICBMVElfbHR0ZjIsCiAgTFRJ
X2xldGYyLAogIExUSV91bm9yZHRmMiwKCiAgTFRJX2Zsb2F0c2lzZiwKICBMVElfZmxvYXRkaXNm
LAogIExUSV9mbG9hdHRpc2YsCgogIExUSV9mbG9hdHNpZGYsCiAgTFRJX2Zsb2F0ZGlkZiwKICBM
VElfZmxvYXR0aWRmLAoKICBMVElfZmxvYXRzaXhmLAogIExUSV9mbG9hdGRpeGYsCiAgTFRJX2Zs
b2F0dGl4ZiwKCiAgTFRJX2Zsb2F0c2l0ZiwKICBMVElfZmxvYXRkaXRmLAogIExUSV9mbG9hdHRp
dGYsCgogIExUSV9maXhzZnNpLAogIExUSV9maXhzZmRpLAogIExUSV9maXhzZnRpLAoKICBMVElf
Zml4ZGZzaSwKICBMVElfZml4ZGZkaSwKICBMVElfZml4ZGZ0aSwKCiAgTFRJX2ZpeHhmc2ksCiAg
TFRJX2ZpeHhmZGksCiAgTFRJX2ZpeHhmdGksCgogIExUSV9maXh0ZnNpLAogIExUSV9maXh0ZmRp
LAogIExUSV9maXh0ZnRpLAoKICBMVElfZml4dW5zc2ZzaSwKICBMVElfZml4dW5zc2ZkaSwKICBM
VElfZml4dW5zc2Z0aSwKCiAgTFRJX2ZpeHVuc2Rmc2ksCiAgTFRJX2ZpeHVuc2RmZGksCiAgTFRJ
X2ZpeHVuc2RmdGksCgogIExUSV9maXh1bnN4ZnNpLAogIExUSV9maXh1bnN4ZmRpLAogIExUSV9m
aXh1bnN4ZnRpLAoKICBMVElfZml4dW5zdGZzaSwKICBMVElfZml4dW5zdGZkaSwKICBMVElfZml4
dW5zdGZ0aSwKCiAgTFRJX2Noa3JfY2hlY2tfYWRkciwKICBMVElfY2hrcl9zZXRfcmlnaHQsCiAg
TFRJX2Noa3JfY29weV9iaXRtYXAsCiAgTFRJX2Noa3JfY2hlY2tfZXhlYywKICBMVElfY2hrcl9j
aGVja19zdHIsCgogIExUSV9wcm9maWxlX2Z1bmN0aW9uX2VudHJ5LAogIExUSV9wcm9maWxlX2Z1
bmN0aW9uX2V4aXQsCgogIExUSV9NQVgKfTsKCgoKZXh0ZXJuIHJ0eCBsaWJmdW5jX3RhYmxlW0xU
SV9NQVhdOwojIDc0MSAiLi4vLi4vZ2NjL2djYy9leHByLmgiCnR5cGVkZWYgcnR4ICgqcnR4ZnVu
KSAocnR4KTsKCgoKCmV4dGVybiBydHhmdW4gYmNjX2dlbl9mY3RuWygoaW50KUxBU1RfQU5EX1VO
VVNFRF9SVFhfQ09ERSldOwoKCgoKCmV4dGVybiBlbnVtIGluc25fY29kZSBzZXRjY19nZW5fY29k
ZVsoKGludClMQVNUX0FORF9VTlVTRURfUlRYX0NPREUpXTsKIyA3NjIgIi4uLy4uL2djYy9nY2Mv
ZXhwci5oIgpleHRlcm4gZW51bSBpbnNuX2NvZGUgbW92c3RyX29wdGFiWyhpbnQpIE1BWF9NQUNI
SU5FX01PREVdOwoKCmV4dGVybiBlbnVtIGluc25fY29kZSBjbHJzdHJfb3B0YWJbKGludCkgTUFY
X01BQ0hJTkVfTU9ERV07CgoKCgpleHRlcm4gcnR4IGV4cGFuZF9iaW5vcCAoZW51bSBtYWNoaW5l
X21vZGUsIG9wdGFiLCBydHgsIHJ0eCwgcnR4LCBpbnQsIGVudW0gb3B0YWJfbWV0aG9kcykKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CgpleHRlcm4gcnR4IHNpZ25fZXhwYW5kX2Jpbm9wIChlbnVtIG1hY2hpbmVfbW9kZSwgb3B0YWIs
IG9wdGFiLCBydHgsIHJ0eCwgcnR4LCBpbnQsIGVudW0gb3B0YWJfbWV0aG9kcykKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCgpleHRlcm4gaW50IGV4cGFuZF90d292YWxfYmlub3AgKG9wdGFiLCBydHgsIHJ0
eCwgcnR4LCBydHgsIGludCk7CgoKZXh0ZXJuIHJ0eCBleHBhbmRfdW5vcCAoZW51bSBtYWNoaW5l
X21vZGUsIG9wdGFiLCBydHgsIHJ0eCwgaW50KTsKCgpleHRlcm4gcnR4IGV4cGFuZF9hYnMgKGVu
dW0gbWFjaGluZV9tb2RlLCBydHgsIHJ0eCwgaW50LCBpbnQpOwoKCmV4dGVybiBydHggZXhwYW5k
X2NvbXBsZXhfYWJzIChlbnVtIG1hY2hpbmVfbW9kZSwgcnR4LCBydHgsIGludCk7CgoKCmV4dGVy
biB2b2lkIGVtaXRfdW5vcF9pbnNuIChpbnQsIHJ0eCwgcnR4LCBlbnVtIHJ0eF9jb2RlKTsKCgoK
ZXh0ZXJuIHJ0eCBlbWl0X25vX2NvbmZsaWN0X2Jsb2NrIChydHgsIHJ0eCwgcnR4LCBydHgsIHJ0
eCk7CgoKZXh0ZXJuIHZvaWQgZW1pdF9saWJjYWxsX2Jsb2NrIChydHgsIHJ0eCwgcnR4LCBydHgp
OwoKCmV4dGVybiB2b2lkIGVtaXRfY2xyX2luc24gKHJ0eCk7CgoKZXh0ZXJuIHZvaWQgZW1pdF8w
X3RvXzFfaW5zbiAocnR4KTsKCgpleHRlcm4gdm9pZCBlbWl0X2NtcF9pbnNuIChydHgsIHJ0eCwg
ZW51bSBydHhfY29kZSwgcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwgaW50LCB1bnNpZ25lZCBpbnQp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKCmV4dGVybiB2b2lkIGVtaXRfY21wX2FuZF9qdW1wX2luc25z
IChydHgsIHJ0eCwgZW51bSBydHhfY29kZSwgcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwgaW50LCB1
bnNpZ25lZCBpbnQsIHJ0eCkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCmVudW0gY2FuX2NvbXBhcmVfcHVycG9zZQp7
CiAgY2NwX2p1bXAsCiAgY2NwX2Ntb3YsCiAgY2NwX3N0b3JlX2ZsYWcKfTsKCgoKZXh0ZXJuIGlu
dCBjYW5fY29tcGFyZV9wIChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSwgZW51bSBj
YW5fY29tcGFyZV9wdXJwb3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgpleHRlcm4gdm9pZCBwcmVwYXJlX2NtcF9pbnNuIChy
dHggKiwgcnR4ICosIGVudW0gcnR4X2NvZGUgKiwgcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSAqLCBp
bnQgKiwgaW50LCBlbnVtIGNhbl9jb21wYXJlX3B1cnBvc2UpCgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKZXh0ZXJuIHJ0
eCBwcmVwYXJlX29wZXJhbmQgKGludCwgcnR4LCBpbnQsIGVudW0gbWFjaGluZV9tb2RlLCBlbnVt
IG1hY2hpbmVfbW9kZSwgaW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgoKZXh0ZXJuIHZvaWQgZW1pdF9pbmRpcmVjdF9qdW1w
IChydHgpOwojIDg1NSAiLi4vLi4vZ2NjL2djYy9leHByLmgiCmV4dGVybiBydHggZ2VuX2FkZDJf
aW5zbiAocnR4LCBydHgpOwpleHRlcm4gcnR4IGdlbl9zdWIyX2luc24gKHJ0eCwgcnR4KTsKZXh0
ZXJuIHJ0eCBnZW5fbW92ZV9pbnNuIChydHgsIHJ0eCk7CmV4dGVybiBpbnQgaGF2ZV9hZGQyX2lu
c24gKGVudW0gbWFjaGluZV9tb2RlKTsKZXh0ZXJuIGludCBoYXZlX3N1YjJfaW5zbiAoZW51bSBt
YWNoaW5lX21vZGUpOwoKCmV4dGVybiBlbnVtIGluc25fY29kZSBjYW5fZXh0ZW5kX3AgKGVudW0g
bWFjaGluZV9tb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSwgaW50KQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKZXh0
ZXJuIHJ0eCBnZW5fZXh0ZW5kX2luc24gKHJ0eCwgcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwgZW51
bSBtYWNoaW5lX21vZGUsIGludCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgpleHRlcm4gdm9pZCBpbml0X2ZpeHRhYiAodm9p
ZCk7CmV4dGVybiB2b2lkIGluaXRfZmxvYXR0YWIgKHZvaWQpOwoKCmV4dGVybiB2b2lkIGV4cGFu
ZF9mbG9hdCAocnR4LCBydHgsIGludCk7CgoKZXh0ZXJuIHZvaWQgZXhwYW5kX2ZpeCAocnR4LCBy
dHgsIGludCk7CgoKZXh0ZXJuIHJ0eCBpbml0X29uZV9saWJmdW5jIChjb25zdCBjaGFyICopOwoK
CgpleHRlcm4gdm9pZCBpbml0X29wdGFicyAodm9pZCk7CgoKCgoKZXh0ZXJuIHJ0eCBuZWdhdGVf
cnR4IChlbnVtIG1hY2hpbmVfbW9kZSwgcnR4KTsKCgpleHRlcm4gcnR4IGV4cGFuZF9hbmQgKHJ0
eCwgcnR4LCBydHgpOwoKCmV4dGVybiBydHggZW1pdF9zdG9yZV9mbGFnIChydHgsIGVudW0gcnR4
X2NvZGUsIHJ0eCwgcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwgaW50LCBpbnQpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CmV4dGVybiBydHggZW1pdF9zdG9yZV9mbGFnX2ZvcmNlIChydHgsIGVudW0gcnR4X2NvZGUsIHJ0
eCwgcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwgaW50LCBpbnQpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoK
CmV4dGVybiBydHggY2Fub25pY2FsaXplX2NvbmRpdGlvbiAocnR4LCBydHgsIGludCwgcnR4ICos
IHJ0eCk7CgoKCmV4dGVybiBydHggZ2V0X2NvbmRpdGlvbiAocnR4LCBydHggKik7CgoKZXh0ZXJu
IHJ0eCBnZW5fY29uZF90cmFwIChlbnVtIHJ0eF9jb2RlLCBydHgsIHJ0eCwgcnR4KTsKCgoKZXh0
ZXJuIHJ0eCBleHBhbmRfYnVpbHRpbiAodHJlZSwgcnR4LCBydHgsIGVudW0gbWFjaGluZV9tb2Rl
LCBpbnQpOwpleHRlcm4gdHJlZSBleHBhbmRfdHJlZV9idWlsdGluICh0cmVlLCB0cmVlLCB0cmVl
KTsKZXh0ZXJuIHZvaWQgc3RkX2V4cGFuZF9idWlsdGluX3ZhX3N0YXJ0IChpbnQsIHRyZWUsIHJ0
eCk7CmV4dGVybiBydHggc3RkX2V4cGFuZF9idWlsdGluX3ZhX2FyZyAodHJlZSwgdHJlZSk7CmV4
dGVybiBydHggZXhwYW5kX2J1aWx0aW5fdmFfYXJnICh0cmVlLCB0cmVlKTsKCgpleHRlcm4gcnR4
IGV4cGFuZF9idWlsdGluX3NldGptcCAocnR4LCBydHgsIHJ0eCwgcnR4KTsKZXh0ZXJuIHZvaWQg
ZXhwYW5kX2J1aWx0aW5fbG9uZ2ptcCAocnR4LCBydHgpOwpleHRlcm4gcnR4IGV4cGFuZF9idWls
dGluX3NhdmVyZWdzICh2b2lkKTsKZXh0ZXJuIGludCBnZXRfdmFyYXJnc19hbGlhc19zZXQgKHZv
aWQpOwpleHRlcm4gaW50IGdldF9mcmFtZV9hbGlhc19zZXQgKHZvaWQpOwpleHRlcm4gdm9pZCBy
ZWNvcmRfYmFzZV92YWx1ZSAodW5zaWduZWQgaW50LCBydHgsIGludCk7CmV4dGVybiB2b2lkIHJl
Y29yZF9hbGlhc19zdWJzZXQgKGludCwgaW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4gaW50IG5ld19hbGlh
c19zZXQgKHZvaWQpOwoKCgoKCmV4dGVybiB2b2lkIGluaXRfZXhwcl9vbmNlICh2b2lkKTsKCgpl
eHRlcm4gdm9pZCBpbml0X2V4cHIgKHZvaWQpOwoKCgpleHRlcm4gdm9pZCBpbml0X3N0b3JfbGF5
b3V0X29uY2UgKHZvaWQpOwoKCmV4dGVybiB2b2lkIGZpbmlzaF9leHByX2Zvcl9mdW5jdGlvbiAo
dm9pZCk7CgoKCmV4dGVybiBydHggcHJvdGVjdF9mcm9tX3F1ZXVlIChydHgsIGludCk7CgoKZXh0
ZXJuIHZvaWQgZW1pdF9xdWV1ZSAodm9pZCk7CgoKZXh0ZXJuIGludCBxdWV1ZWRfc3ViZXhwX3Ag
KHJ0eCk7CgoKCmV4dGVybiB2b2lkIGNvbnZlcnRfbW92ZSAocnR4LCBydHgsIGludCk7CgoKZXh0
ZXJuIHJ0eCBjb252ZXJ0X3RvX21vZGUgKGVudW0gbWFjaGluZV9tb2RlLCBydHgsIGludCk7CgoK
ZXh0ZXJuIHJ0eCBjb252ZXJ0X21vZGVzIChlbnVtIG1hY2hpbmVfbW9kZSwgZW51bSBtYWNoaW5l
X21vZGUsIHJ0eCwgaW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCgpleHRlcm4gcnR4IGVtaXRfYmxvY2tfbW92ZSAocnR4LCBydHgsIHJ0eCwgdW5zaWdu
ZWQgaW50KTsKCgoKZXh0ZXJuIHZvaWQgbW92ZV9ibG9ja190b19yZWcgKGludCwgcnR4LCBpbnQs
IGVudW0gbWFjaGluZV9tb2RlKTsKCgoKZXh0ZXJuIHZvaWQgbW92ZV9ibG9ja19mcm9tX3JlZyAo
aW50LCBydHgsIGludCwgaW50KTsKCgoKZXh0ZXJuIHZvaWQgZW1pdF9ncm91cF9sb2FkIChydHgs
IHJ0eCwgaW50LCB1bnNpZ25lZCBpbnQpOwoKCgpleHRlcm4gdm9pZCBlbWl0X2dyb3VwX3N0b3Jl
IChydHgsIHJ0eCwgaW50LCB1bnNpZ25lZCBpbnQpOwoKCgpleHRlcm4gcnR4IGNvcHlfYmxrbW9k
ZV9mcm9tX3JlZyAocnR4LHJ0eCx0cmVlKTsKCgoKZXh0ZXJuIHZvaWQgdXNlX3JlZyAocnR4ICos
IHJ0eCk7CgoKCmV4dGVybiB2b2lkIHVzZV9yZWdzIChydHggKiwgaW50LCBpbnQpOwoKCmV4dGVy
biB2b2lkIHVzZV9ncm91cF9yZWdzIChydHggKiwgcnR4KTsKCgoKCmV4dGVybiBydHggY2xlYXJf
c3RvcmFnZSAocnR4LCBydHgsIHVuc2lnbmVkIGludCk7CgoKZXh0ZXJuIHJ0eCBlbWl0X21vdmVf
aW5zbiAocnR4LCBydHgpOwoKCmV4dGVybiBydHggZW1pdF9tb3ZlX2luc25fMSAocnR4LCBydHgp
OwoKCgpleHRlcm4gcnR4IHB1c2hfYmxvY2sgKHJ0eCwgaW50LCBpbnQpOwoKCmV4dGVybiBydHgg
Z2VuX3B1c2hfb3BlcmFuZCAodm9pZCk7CgoKCmV4dGVybiB2b2lkIGVtaXRfcHVzaF9pbnNuIChy
dHgsIGVudW0gbWFjaGluZV9tb2RlLCB0cmVlLCBydHgsIHVuc2lnbmVkIGludCwgaW50LCBydHgs
IGludCwgcnR4LCBydHgsIGludCwgcnR4KQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCgpleHRlcm4gcnR4IGV4cGFuZF9hc3NpZ25tZW50ICh0cmVlLCB0
cmVlLCBpbnQsIGludCk7CgoKCgoKZXh0ZXJuIHJ0eCBzdG9yZV9leHByICh0cmVlLCBydHgsIGlu
dCk7CgoKCgoKZXh0ZXJuIHJ0eCBmb3JjZV9vcGVyYW5kIChydHgsIHJ0eCk7CgoKCgoKZXh0ZXJu
IHJ0eCBleHBhbmRfZXhwciAodHJlZSwgcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwgZW51bSBleHBh
bmRfbW9kaWZpZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCgoKCmV4dGVybiB2b2lkIGluaXRfcGVuZGluZ19zdGFja19hZGp1c3QgKHZv
aWQpOwoKCgpleHRlcm4gdm9pZCBjbGVhcl9wZW5kaW5nX3N0YWNrX2FkanVzdCAodm9pZCk7CgoK
ZXh0ZXJuIHZvaWQgZG9fcGVuZGluZ19zdGFja19hZGp1c3QgKHZvaWQpOwoKCgoKZXh0ZXJuIHRy
ZWUgc3RyaW5nX2NvbnN0YW50ICh0cmVlLCB0cmVlICopOwoKCmV4dGVybiB2b2lkIGp1bXBpZm5v
dCAodHJlZSwgcnR4KTsKCgpleHRlcm4gdm9pZCBqdW1waWYgKHRyZWUsIHJ0eCk7CgoKCmV4dGVy
biB2b2lkIGRvX2p1bXAgKHRyZWUsIHJ0eCwgcnR4KTsKCgoKZXh0ZXJuIHJ0eCBjb21wYXJlX2Zy
b21fcnR4IChydHgsIHJ0eCwgZW51bSBydHhfY29kZSwgaW50LCBlbnVtIG1hY2hpbmVfbW9kZSwg
cnR4LCB1bnNpZ25lZCBpbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJuIHZvaWQgZG9fY29t
cGFyZV9ydHhfYW5kX2p1bXAgKHJ0eCwgcnR4LCBlbnVtIHJ0eF9jb2RlLCBpbnQsIGVudW0gbWFj
aGluZV9tb2RlLCBydHgsIHVuc2lnbmVkIGludCwgcnR4LCBydHgpCgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK
ZXh0ZXJuIHZvaWQgZG9fdGFibGVqdW1wIChydHgsIGVudW0gbWFjaGluZV9tb2RlLCBydHgsIHJ0
eCwgcnR4KTsKCgoKCmV4dGVybiBydHggZXhwcl9zaXplICh0cmVlKTsKCmV4dGVybiBydHggbG9v
a3VwX3N0YXRpY19jaGFpbiAodHJlZSk7CgoKCmV4dGVybiBydHggZml4X2xleGljYWxfYWRkciAo
cnR4LCB0cmVlKTsKCgpleHRlcm4gcnR4IHRyYW1wb2xpbmVfYWRkcmVzcyAodHJlZSk7CgoKCmV4
dGVybiBydHggaGFyZF9mdW5jdGlvbl92YWx1ZSAodHJlZSwgdHJlZSwgaW50KTsKCmV4dGVybiBy
dHggcHJlcGFyZV9jYWxsX2FkZHJlc3MgKHJ0eCwgdHJlZSwgcnR4ICosIGludCk7CgpleHRlcm4g
cnR4IGV4cGFuZF9jYWxsICh0cmVlLCBydHgsIGludCk7CgpleHRlcm4gcnR4IGV4cGFuZF9zaGlm
dCAoZW51bSB0cmVlX2NvZGUsIGVudW0gbWFjaGluZV9tb2RlLCBydHgsIHRyZWUsIHJ0eCwgaW50
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4gcnR4
IGV4cGFuZF9kaXZtb2QgKGludCwgZW51bSB0cmVlX2NvZGUsIGVudW0gbWFjaGluZV9tb2RlLCBy
dHgsIHJ0eCwgcnR4LCBpbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CmV4dGVybiB2b2lkIGxvY2F0ZV9hbmRfcGFkX3Bhcm0gKGVudW0gbWFjaGlu
ZV9tb2RlLCB0cmVlLCBpbnQsIHRyZWUsIHN0cnVjdCBhcmdzX3NpemUgKiwgc3RydWN0IGFyZ3Nf
c2l6ZSAqLCBzdHJ1Y3QgYXJnc19zaXplICosIHN0cnVjdCBhcmdzX3NpemUgKikKCgoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ZXh0ZXJuIHJ0eCBleHBhbmRfaW5saW5lX2Z1bmN0aW9uICh0cmVlLCB0cmVlLCBydHgsIGludCwg
dHJlZSwgcnR4KTsKCgpleHRlcm4gcnR4IGxhYmVsX3J0eCAodHJlZSk7CgoKCmV4dGVybiBydHgg
cHJvbW90ZWRfaW5wdXRfYXJnICh1bnNpZ25lZCBpbnQsIGVudW0gbWFjaGluZV9tb2RlICosIGlu
dCAqKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoK
ZXh0ZXJuIHJ0eCBlbGltaW5hdGVfY29uc3RhbnRfdGVybSAocnR4LCBydHggKik7CgoKCmV4dGVy
biBydHggbWVtb3J5X2FkZHJlc3MgKGVudW0gbWFjaGluZV9tb2RlLCBydHgpOwoKCmV4dGVybiBy
dHggbWVtb3J5X2FkZHJlc3Nfbm9mb3JjZSAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCk7CgoKCgoK
ZXh0ZXJuIHJ0eCBjaGFuZ2VfYWRkcmVzcyAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwgcnR4KTsK
CgoKZXh0ZXJuIHJ0eCB2YWxpZGl6ZV9tZW0gKHJ0eCk7CgoKCgoKZXh0ZXJuIHZvaWQgbWF5YmVf
c2V0X3VuY2hhbmdpbmcgKHJ0eCwgdHJlZSk7CgoKCgpleHRlcm4gdm9pZCBzZXRfbWVtX2F0dHJp
YnV0ZXMgKHJ0eCwgdHJlZSwgaW50KTsKCgoKZXh0ZXJuIHJ0eCBhc3NlbWJsZV90cmFtcG9saW5l
X3RlbXBsYXRlICh2b2lkKTsKCgpleHRlcm4gaW50IHJ0eF9lcXVhbF9wIChydHgsIHJ0eCk7CgoK
CmV4dGVybiBydHggc3RhYmlsaXplIChydHgpOwoKCgpleHRlcm4gcnR4IGNvcHlfYWxsX3JlZ3Mg
KHJ0eCk7CgoKZXh0ZXJuIHJ0eCBjb3B5X3RvX3JlZyAocnR4KTsKCgpleHRlcm4gcnR4IGNvcHlf
YWRkcl90b19yZWcgKHJ0eCk7CgoKZXh0ZXJuIHJ0eCBjb3B5X3RvX21vZGVfcmVnIChlbnVtIG1h
Y2hpbmVfbW9kZSwgcnR4KTsKCgpleHRlcm4gcnR4IGNvcHlfdG9fc3VnZ2VzdGVkX3JlZyAocnR4
LCBydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKCgoKZXh0ZXJuIHJ0eCBmb3JjZV9yZWcgKGVudW0g
bWFjaGluZV9tb2RlLCBydHgpOwoKCmV4dGVybiBydHggZm9yY2Vfbm90X21lbSAocnR4KTsKCgoK
ZXh0ZXJuIGVudW0gbWFjaGluZV9tb2RlIHByb21vdGVfbW9kZSAodHJlZSwgZW51bSBtYWNoaW5l
X21vZGUsIGludCAqLCBpbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKCgpleHRlcm4gdm9pZCBhZGp1c3Rfc3RhY2sgKHJ0eCk7
CgoKZXh0ZXJuIHZvaWQgYW50aV9hZGp1c3Rfc3RhY2sgKHJ0eCk7CgoKZW51bSBzYXZlX2xldmVs
IHtTQVZFX0JMT0NLLCBTQVZFX0ZVTkNUSU9OLCBTQVZFX05PTkxPQ0FMfTsKCgpleHRlcm4gdm9p
ZCBlbWl0X3N0YWNrX3NhdmUgKGVudW0gc2F2ZV9sZXZlbCwgcnR4ICosIHJ0eCk7CgoKZXh0ZXJu
IHZvaWQgZW1pdF9zdGFja19yZXN0b3JlIChlbnVtIHNhdmVfbGV2ZWwsIHJ0eCwgcnR4KTsKCgoK
ZXh0ZXJuIHJ0eCBhbGxvY2F0ZV9keW5hbWljX3N0YWNrX3NwYWNlIChydHgsIHJ0eCwgaW50KTsK
CgoKCgoKZXh0ZXJuIHZvaWQgcHJvYmVfc3RhY2tfcmFuZ2UgKGludCwgcnR4KTsKCgoKZXh0ZXJu
IHJ0eCBoYXJkX2xpYmNhbGxfdmFsdWUgKGVudW0gbWFjaGluZV9tb2RlKTsKCgoKZXh0ZXJuIHJ0
eCByb3VuZF9wdXNoIChydHgpOwoKZXh0ZXJuIHJ0eCBzdG9yZV9iaXRfZmllbGQgKHJ0eCwgdW5z
aWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIGVudW0gbWFjaGluZV9tb2RlLCBydHgsIHVuc2lnbmVk
IGludCwgaW50KQoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4gcnR4IGV4dHJhY3RfYml0X2ZpZWxkIChydHgs
IHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCBpbnQsIHJ0eCwgZW51bSBtYWNoaW5lX21vZGUs
IGVudW0gbWFjaGluZV9tb2RlLCB1bnNpZ25lZCBpbnQsIGludCkKCgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRl
cm4gcnR4IGV4cGFuZF9tdWx0IChlbnVtIG1hY2hpbmVfbW9kZSwgcnR4LCBydHgsIHJ0eCwgaW50
KTsKZXh0ZXJuIHJ0eCBleHBhbmRfbXVsdF9hZGQgKHJ0eCwgcnR4LCBydHgsIHJ0eCxlbnVtIG1h
Y2hpbmVfbW9kZSwgaW50KTsKZXh0ZXJuIHJ0eCBleHBhbmRfbXVsdF9oaWdocGFydF9hZGp1c3Qg
KGVudW0gbWFjaGluZV9tb2RlLCBydHgsIHJ0eCwgcnR4LCBydHgsIGludCk7CgpleHRlcm4gcnR4
IGFzc2VtYmxlX3N0YXRpY19zcGFjZSAoaW50KTsKCgoKCmV4dGVybiBydHggKCpsYW5nX2V4cGFu
ZF9leHByKSAodW5pb24gdHJlZV9ub2RlICosIHJ0eCwgZW51bSBtYWNoaW5lX21vZGUsIGVudW0g
ZXhwYW5kX21vZGlmaWVyIG1vZGlmaWVyKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKCmV4dGVybiB0
cmVlICgqbGFuZ19leHBhbmRfY29uc3RhbnQpICh0cmVlKTsKCmV4dGVybiBpbnQgc2FmZV9mcm9t
X3AgKHJ0eCwgdHJlZSwgaW50KTsKIyAxMjc3ICIuLi8uLi9nY2MvZ2NjL2V4cHIuaCIKZXh0ZXJu
IGludCAoKmxhbmdfc2FmZV9mcm9tX3ApIChydHgsIHRyZWUpOwoKCmV4dGVybiB2b2lkIGluaXRf
YWxsX29wdGFicyAodm9pZCk7CmV4dGVybiB2b2lkIGRvX2p1bXBfYnlfcGFydHNfZXF1YWxpdHlf
cnR4IChydHgsIHJ0eCwgcnR4KTsKZXh0ZXJuIHZvaWQgZG9fanVtcF9ieV9wYXJ0c19ncmVhdGVy
X3J0eCAoZW51bSBtYWNoaW5lX21vZGUsIGludCwgcnR4LCBydHgsIHJ0eCwgcnR4KQoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgoKZXh0ZXJuIHZvaWQgbWFya19zZWVuX2Nhc2VzICh0cmVlLCB1bnNpZ25lZCBjaGFyICosIGlu
dCwgaW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyAzOCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wu
YyIgMgojIDEgIi4uLy4uL2djYy9nY2MvYy10cmVlLmgiIDEKIyAyNSAiLi4vLi4vZ2NjL2djYy9j
LXRyZWUuaCIKIyAxICIuLi8uLi9nY2MvZ2NjL2MtY29tbW9uLmgiIDEKIyAyNSAiLi4vLi4vZ2Nj
L2djYy9jLWNvbW1vbi5oIgojIDEgIi4uLy4uL2djYy9pbmNsdWRlL3NwbGF5LXRyZWUuaCIgMQoj
IDQzICIuLi8uLi9nY2MvaW5jbHVkZS9zcGxheS10cmVlLmgiCnR5cGVkZWYgdW5zaWduZWQgbG9u
ZyBpbnQgc3BsYXlfdHJlZV9rZXk7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgc3BsYXlfdHJl
ZV92YWx1ZTsKCgp0eXBlZGVmIHN0cnVjdCBzcGxheV90cmVlX25vZGVfcyAqc3BsYXlfdHJlZV9u
b2RlOwoKCgp0eXBlZGVmIGludCAoKnNwbGF5X3RyZWVfY29tcGFyZV9mbikgKHNwbGF5X3RyZWVf
a2V5LCBzcGxheV90cmVlX2tleSk7CgoKCnR5cGVkZWYgdm9pZCAoKnNwbGF5X3RyZWVfZGVsZXRl
X2tleV9mbikgKHNwbGF5X3RyZWVfa2V5KTsKCgoKdHlwZWRlZiB2b2lkICgqc3BsYXlfdHJlZV9k
ZWxldGVfdmFsdWVfZm4pIChzcGxheV90cmVlX3ZhbHVlKTsKCgp0eXBlZGVmIGludCAoKnNwbGF5
X3RyZWVfZm9yZWFjaF9mbikgKHNwbGF5X3RyZWVfbm9kZSwgdm9pZCopOwoKCnN0cnVjdCBzcGxh
eV90cmVlX25vZGVfcwp7CgogIHNwbGF5X3RyZWVfa2V5IGtleTsKCgogIHNwbGF5X3RyZWVfdmFs
dWUgdmFsdWU7CgoKICBzcGxheV90cmVlX25vZGUgbGVmdDsKICBzcGxheV90cmVlX25vZGUgcmln
aHQ7Cn07CgoKdHlwZWRlZiBzdHJ1Y3Qgc3BsYXlfdHJlZV9zCnsKCiAgc3BsYXlfdHJlZV9ub2Rl
IHJvb3Q7CgoKICBzcGxheV90cmVlX2NvbXBhcmVfZm4gY29tcDsKCgogIHNwbGF5X3RyZWVfZGVs
ZXRlX2tleV9mbiBkZWxldGVfa2V5OwoKCiAgc3BsYXlfdHJlZV9kZWxldGVfdmFsdWVfZm4gZGVs
ZXRlX3ZhbHVlOwp9ICpzcGxheV90cmVlOwoKZXh0ZXJuIHNwbGF5X3RyZWUgc3BsYXlfdHJlZV9u
ZXcgKHNwbGF5X3RyZWVfY29tcGFyZV9mbiwgc3BsYXlfdHJlZV9kZWxldGVfa2V5X2ZuLCBzcGxh
eV90cmVlX2RlbGV0ZV92YWx1ZV9mbikKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CmV4dGVybiB2b2lk
IHNwbGF5X3RyZWVfZGVsZXRlIChzcGxheV90cmVlKTsKZXh0ZXJuIHNwbGF5X3RyZWVfbm9kZSBz
cGxheV90cmVlX2luc2VydAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHNwbGF5X3RyZWUsIHNwbGF5X3RyZWVfa2V5LCBzcGxheV90cmVlX3ZhbHVlKQoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwpleHRlcm4gdm9pZCBzcGxheV90cmVlX3JlbW92ZSAoc3BsYXlfdHJlZSwgc3BsYXlfdHJlZV9r
ZXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CmV4dGVybiBzcGxheV90cmVlX25vZGUgc3BsYXlfdHJlZV9sb29rdXAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzcGxheV90cmVlLCBzcGxheV90
cmVlX2tleSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKZXh0ZXJuIHNwbGF5X3RyZWVfbm9kZSBzcGxheV90cmVlX3ByZWRl
Y2Vzc29yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3BsYXlfdHJl
ZSwgc3BsYXlfdHJlZV9rZXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CmV4dGVybiBzcGxheV90cmVlX25vZGUgc3BsYXlf
dHJlZV9zdWNjZXNzb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChz
cGxheV90cmVlLCBzcGxheV90cmVlX2tleSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJuIGludCBzcGxheV90cmVl
X2ZvcmVhY2ggKHNwbGF5X3RyZWUsIHNwbGF5X3RyZWVfZm9yZWFjaF9mbiwgdm9pZCopCgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRl
cm4gaW50IHNwbGF5X3RyZWVfY29tcGFyZV9pbnRzIChzcGxheV90cmVlX2tleSwgc3BsYXlfdHJl
ZV9rZXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CmV4dGVybiBpbnQgc3BsYXlfdHJlZV9jb21wYXJlX3BvaW50ZXJzIChz
cGxheV90cmVlX2tleSwgc3BsYXlfdHJlZV9rZXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgMjYgIi4uLy4uL2djYy9n
Y2MvYy1jb21tb24uaCIgMgojIDQ3ICIuLi8uLi9nY2MvZ2NjL2MtY29tbW9uLmgiCmVudW0gcmlk
CnsKCgogIFJJRF9TVEFUSUMgPSAwLAogIFJJRF9VTlNJR05FRCwgUklEX0xPTkcsIFJJRF9DT05T
VCwgUklEX0VYVEVSTiwKICBSSURfUkVHSVNURVIsIFJJRF9UWVBFREVGLCBSSURfU0hPUlQsIFJJ
RF9JTkxJTkUsCiAgUklEX1ZPTEFUSUxFLCBSSURfU0lHTkVELCBSSURfQVVUTywgUklEX1JFU1RS
SUNULAoKCiAgUklEX0JPVU5ERUQsIFJJRF9VTkJPVU5ERUQsIFJJRF9DT01QTEVYLAoKCiAgUklE
X0ZSSUVORCwgUklEX1ZJUlRVQUwsIFJJRF9FWFBMSUNJVCwgUklEX0VYUE9SVCwgUklEX01VVEFC
TEUsCgoKICBSSURfSU4sIFJJRF9PVVQsIFJJRF9JTk9VVCwgUklEX0JZQ09QWSwgUklEX0JZUkVG
LCBSSURfT05FV0FZLAoKCiAgUklEX0lOVCwgUklEX0NIQVIsIFJJRF9GTE9BVCwgUklEX0RPVUJM
RSwgUklEX1ZPSUQsCiAgUklEX0VOVU0sIFJJRF9TVFJVQ1QsIFJJRF9VTklPTiwgUklEX0lGLCBS
SURfRUxTRSwKICBSSURfV0hJTEUsIFJJRF9ETywgUklEX0ZPUiwgUklEX1NXSVRDSCwgUklEX0NB
U0UsCiAgUklEX0RFRkFVTFQsIFJJRF9CUkVBSywgUklEX0NPTlRJTlVFLCBSSURfUkVUVVJOLCBS
SURfR09UTywKICBSSURfU0laRU9GLAoKCiAgUklEX0FTTSwgUklEX1RZUEVPRiwgUklEX0FMSUdO
T0YsIFJJRF9BVFRSSUJVVEUsIFJJRF9WQV9BUkcsCiAgUklEX0VYVEVOU0lPTiwgUklEX0lNQUdQ
QVJULCBSSURfUkVBTFBBUlQsIFJJRF9MQUJFTCwgUklEX1BUUkJBU0UsCiAgUklEX1BUUkVYVEVO
VCwgUklEX1BUUlZBTFVFLAoKCiAgUklEX0JPT0wsIFJJRF9XQ0hBUiwgUklEX0NMQVNTLAogIFJJ
RF9QVUJMSUMsIFJJRF9QUklWQVRFLCBSSURfUFJPVEVDVEVELAogIFJJRF9URU1QTEFURSwgUklE
X05VTEwsIFJJRF9DQVRDSCwKICBSSURfREVMRVRFLCBSSURfRkFMU0UsIFJJRF9OQU1FU1BBQ0Us
CiAgUklEX05FVywgUklEX09QRVJBVE9SLCBSSURfVEhJUywKICBSSURfVEhST1csIFJJRF9UUlVF
LCBSSURfVFJZLAogIFJJRF9UWVBFTkFNRSwgUklEX1RZUEVJRCwgUklEX1VTSU5HLAoKCiAgUklE
X0NPTlNUQ0FTVCwgUklEX0RZTkNBU1QsIFJJRF9SRUlOVENBU1QsIFJJRF9TVEFUQ0FTVCwKCgog
IFJJRF9BTkQsIFJJRF9BTkRfRVEsIFJJRF9OT1QsIFJJRF9OT1RfRVEsCiAgUklEX09SLCBSSURf
T1JfRVEsIFJJRF9YT1IsIFJJRF9YT1JfRVEsCiAgUklEX0JJVEFORCwgUklEX0JJVE9SLCBSSURf
Q09NUEwsCgoKICBSSURfSUQsIFJJRF9BVF9FTkNPREUsIFJJRF9BVF9FTkQsCiAgUklEX0FUX0NM
QVNTLCBSSURfQVRfQUxJQVMsIFJJRF9BVF9ERUZTLAogIFJJRF9BVF9QUklWQVRFLCBSSURfQVRf
UFJPVEVDVEVELCBSSURfQVRfUFVCTElDLAogIFJJRF9BVF9QUk9UT0NPTCwgUklEX0FUX1NFTEVD
VE9SLCBSSURfQVRfSU5URVJGQUNFLAogIFJJRF9BVF9JTVBMRU1FTlRBVElPTiwKCiAgUklEX01B
WCwKCiAgUklEX0ZJUlNUX01PRElGSUVSID0gUklEX1NUQVRJQywKICBSSURfTEFTVF9NT0RJRklF
UiA9IFJJRF9PTkVXQVkKfTsKCgoKZXh0ZXJuIHRyZWUgKnJpZHBvaW50ZXJzOwoKCgplbnVtIGNf
dHJlZV9pbmRleAp7CiAgICBDVElfV0NIQVJfVFlQRSwKICAgIENUSV9TSUdORURfV0NIQVJfVFlQ
RSwKICAgIENUSV9VTlNJR05FRF9XQ0hBUl9UWVBFLAogICAgQ1RJX1dJTlRfVFlQRSwKICAgIENU
SV9DX1NJWkVfVFlQRSwKCgoKICAgIENUSV9TSUdORURfU0laRV9UWVBFLAogICAgQ1RJX1VOU0lH
TkVEX1BUUkRJRkZfVFlQRSwKICAgIENUSV9JTlRNQVhfVFlQRSwKICAgIENUSV9VSU5UTUFYX1RZ
UEUsCiAgICBDVElfV0lERVNUX0lOVF9MSVRfVFlQRSwKICAgIENUSV9XSURFU1RfVUlOVF9MSVRf
VFlQRSwKCiAgICBDVElfQ0hBUl9BUlJBWV9UWVBFLAogICAgQ1RJX1dDSEFSX0FSUkFZX1RZUEUs
CiAgICBDVElfSU5UX0FSUkFZX1RZUEUsCiAgICBDVElfU1RSSU5HX1RZUEUsCiAgICBDVElfQ09O
U1RfU1RSSU5HX1RZUEUsCgoKICAgIENUSV9CT09MRUFOX1RZUEUsCiAgICBDVElfQk9PTEVBTl9U
UlVFLAogICAgQ1RJX0JPT0xFQU5fRkFMU0UsCgogICAgQ1RJX0NfQk9PTF9UWVBFLAogICAgQ1RJ
X0NfQk9PTF9UUlVFLAogICAgQ1RJX0NfQk9PTF9GQUxTRSwKICAgIENUSV9ERUZBVUxUX0ZVTkNU
SU9OX1RZUEUsCiAgICBDVElfVk9JRF9MSVNULAoKICAgIENUSV9WT0lEX0ZUWVBFLAogICAgQ1RJ
X1ZPSURfRlRZUEVfUFRSLAogICAgQ1RJX0lOVF9GVFlQRV9JTlQsCiAgICBDVElfUFRSX0ZUWVBF
X1NJWkVUWVBFLAoKICAgIENUSV9HNzdfSU5URUdFUl9UWVBFLAogICAgQ1RJX0c3N19VSU5URUdF
Ul9UWVBFLAogICAgQ1RJX0c3N19MT05HSU5UX1RZUEUsCiAgICBDVElfRzc3X1VMT05HSU5UX1RZ
UEUsCgoKICAgIENUSV9GVU5DVElPTl9JRCwKICAgIENUSV9QUkVUVFlfRlVOQ1RJT05fSUQsCiAg
ICBDVElfRlVOQ19JRCwKCiAgICBDVElfVk9JRF9aRVJPLAoKICAgIENUSV9NQVgKfTsKIyAyMTMg
Ii4uLy4uL2djYy9nY2MvYy1jb21tb24uaCIKZXh0ZXJuIHRyZWUgY19nbG9iYWxfdHJlZXNbQ1RJ
X01BWF07CgoKCgoKdHlwZWRlZiBlbnVtIGNfbGFuZ3VhZ2Vfa2luZAp7CiAgY2xrX2MsCgogIGNs
a19jcGx1c3BsdXMsCiAgY2xrX29iamVjdGl2ZV9jCn0KY19sYW5ndWFnZV9raW5kOwoKCgpzdHJ1
Y3Qgc3RtdF90cmVlX3MgewoKICB0cmVlIHhfbGFzdF9zdG10OwoKCiAgdHJlZSB4X2xhc3RfZXhw
cl90eXBlOwojIDI1MCAiLi4vLi4vZ2NjL2djYy9jLWNvbW1vbi5oIgogIGludCBzdG10c19hcmVf
ZnVsbF9leHByc19wOwp9OwoKdHlwZWRlZiBzdHJ1Y3Qgc3RtdF90cmVlX3MgKnN0bXRfdHJlZTsK
CgoKCnN0cnVjdCBsYW5ndWFnZV9mdW5jdGlvbiB7CgoKICBzdHJ1Y3Qgc3RtdF90cmVlX3MgeF9z
dG10X3RyZWU7CgogIHRyZWUgeF9zY29wZV9zdG10X3N0YWNrOwoKCiAgaW50IHhfZnVuY3Rpb25f
bmFtZV9kZWNsYXJlZF9wOwp9OwojIDI5MiAiLi4vLi4vZ2NjL2djYy9jLWNvbW1vbi5oIgpleHRl
cm4gaW50ICgqbGFuZ19zdGF0ZW1lbnRfY29kZV9wKSAoZW51bSB0cmVlX2NvZGUpOwpleHRlcm4g
dm9pZCAoKmxhbmdfZXhwYW5kX3N0bXQpICh0cmVlKTsKZXh0ZXJuIHZvaWQgKCpsYW5nX2V4cGFu
ZF9kZWNsX3N0bXQpICh0cmVlKTsKZXh0ZXJuIHZvaWQgKCpsYW5nX2V4cGFuZF9mdW5jdGlvbl9l
bmQpICh2b2lkKTsKCgoKdHlwZWRlZiB0cmVlICgqd2Fsa190cmVlX2ZuKSAodHJlZSAqLCBpbnQg
Kiwgdm9pZCAqKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgpleHRlcm4gc3RtdF90cmVlIGN1cnJlbnRfc3RtdF90cmVl
ICh2b2lkKTsKZXh0ZXJuIHRyZWUgKmN1cnJlbnRfc2NvcGVfc3RtdF9zdGFjayAodm9pZCk7CmV4
dGVybiB2b2lkIGJlZ2luX3N0bXRfdHJlZSAodHJlZSAqKTsKZXh0ZXJuIHRyZWUgYWRkX3N0bXQg
KHRyZWUpOwpleHRlcm4gdm9pZCBhZGRfZGVjbF9zdG10ICh0cmVlKTsKZXh0ZXJuIHRyZWUgYWRk
X3Njb3BlX3N0bXQgKGludCwgaW50KTsKZXh0ZXJuIHZvaWQgZmluaXNoX3N0bXRfdHJlZSAodHJl
ZSAqKTsKCmV4dGVybiBpbnQgc3RhdGVtZW50X2NvZGVfcCAoZW51bSB0cmVlX2NvZGUpOwpleHRl
cm4gdHJlZSB3YWxrX3N0bXRfdHJlZSAodHJlZSAqLCB3YWxrX3RyZWVfZm4sIHZvaWQgKikKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwpleHRlcm4gdm9pZCBwcmVwX3N0bXQgKHRyZWUpOwpleHRlcm4gdm9pZCBleHBhbmRf
c3RtdCAodHJlZSk7CmV4dGVybiB2b2lkIG1hcmtfc3RtdF90cmVlICh2b2lkICopOwoKCgoKCgpz
dHJ1Y3QgY19sYW5nX2RlY2wgewoKICB0cmVlIHNhdmVkX3RyZWU7Cn07CiMgMzM2ICIuLi8uLi9n
Y2MvZ2NjL2MtY29tbW9uLmgiCmV4dGVybiB2b2lkIGNfbWFya19sYW5nX2RlY2wgKHN0cnVjdCBj
X2xhbmdfZGVjbCAqKTsKCgoKCmV4dGVybiBjX2xhbmd1YWdlX2tpbmQgY19sYW5ndWFnZTsKCgoK
CmV4dGVybiBpbnQgZmxhZ19jb25zdF9zdHJpbmdzOwoKCgpleHRlcm4gaW50IHdhcm5fZm9ybWF0
OwoKCgpleHRlcm4gaW50IHdhcm5fc2VxdWVuY2VfcG9pbnQ7CgoKCmV4dGVybiBpbnQgd2Fybl9t
aXNzaW5nX2Zvcm1hdF9hdHRyaWJ1dGU7CgoKCmV4dGVybiBpbnQgZmxhZ190cmFkaXRpb25hbDsK
CgoKZXh0ZXJuIGludCBmbGFnX2lzb2M5NDsKCgoKZXh0ZXJuIGludCBmbGFnX2lzb2M5OTsKCgoK
ZXh0ZXJuIGludCBmbGFnX2RpZ3JhcGhzOwoKCgpleHRlcm4gaW50IGZsYWdfaG9zdGVkOwoKCgoK
ZXh0ZXJuIGludCBmbGFnX25vbmlzb19kZWZhdWx0X2Zvcm1hdF9hdHRyaWJ1dGVzOwoKCgpleHRl
cm4gaW50IGZsYWdfbm9fYnVpbHRpbjsKCgoKCmV4dGVybiBpbnQgZmxhZ19ub19ub25hbnNpX2J1
aWx0aW47CgoKCgpleHRlcm4gY29uc3QgY2hhciAqZmxhZ19kdW1wX3RyYW5zbGF0aW9uX3VuaXQ7
CgoKCmV4dGVybiBpbnQgd2Fybl9wYXJlbnRoZXNlczsKCgoKZXh0ZXJuIGludCB3YXJuX2NvbnZl
cnNpb247CiMgNDQwICIuLi8uLi9nY2MvZ2NjL2MtY29tbW9uLmgiCmV4dGVybiB0cmVlICgqbWFr
ZV9mbmFtZV9kZWNsKSAodHJlZSwgY29uc3QgY2hhciAqLCBpbnQpOwoKZXh0ZXJuIHZvaWQgZGVj
bGFyZV9mdW5jdGlvbl9uYW1lICh2b2lkKTsKZXh0ZXJuIHZvaWQgZGVjbF9hdHRyaWJ1dGVzICh0
cmVlLCB0cmVlLCB0cmVlKTsKZXh0ZXJuIHZvaWQgaW5pdF9mdW5jdGlvbl9mb3JtYXRfaW5mbyAo
dm9pZCk7CmV4dGVybiB2b2lkIGNoZWNrX2Z1bmN0aW9uX2Zvcm1hdCAoaW50ICosIHRyZWUsIHRy
ZWUsIHRyZWUpOwpleHRlcm4gdm9pZCBjX2FwcGx5X3R5cGVfcXVhbHNfdG9fZGVjbCAoaW50LCB0
cmVlKTsKCgpleHRlcm4gdm9pZCBiaW5hcnlfb3BfZXJyb3IgKGVudW0gdHJlZV9jb2RlKTsKZXh0
ZXJuIHZvaWQgY19leHBhbmRfZXhwcl9zdG10ICh0cmVlKTsKZXh0ZXJuIHZvaWQgY19leHBhbmRf
c3RhcnRfY29uZCAodHJlZSwgaW50KTsKZXh0ZXJuIHZvaWQgY19maW5pc2hfdGhlbiAodm9pZCk7
CmV4dGVybiB2b2lkIGNfZXhwYW5kX3N0YXJ0X2Vsc2UgKHZvaWQpOwpleHRlcm4gdm9pZCBjX2Zp
bmlzaF9lbHNlICh2b2lkKTsKZXh0ZXJuIHZvaWQgY19leHBhbmRfZW5kX2NvbmQgKHZvaWQpOwoK
ZXh0ZXJuIHRyZWUgY2hlY2tfY2FzZV92YWx1ZSAodHJlZSk7CgpleHRlcm4gdHJlZSBjb21iaW5l
X3N0cmluZ3MgKHRyZWUpOwpleHRlcm4gdm9pZCBjb25zdGFudF9leHByZXNzaW9uX3dhcm5pbmcg
KHRyZWUpOwpleHRlcm4gdHJlZSBjb252ZXJ0X2FuZF9jaGVjayAodHJlZSwgdHJlZSk7CmV4dGVy
biB2b2lkIG92ZXJmbG93X3dhcm5pbmcgKHRyZWUpOwpleHRlcm4gdm9pZCB1bnNpZ25lZF9jb252
ZXJzaW9uX3dhcm5pbmcgKHRyZWUsIHRyZWUpOwoKCgpleHRlcm4gY2hhciAqZ2V0X2RpcmVjdGl2
ZV9saW5lICh2b2lkKTsKIyA0NzcgIi4uLy4uL2djYy9nY2MvYy1jb21tb24uaCIKZXh0ZXJuIHRy
ZWUgc2hvcnRlbl9jb21wYXJlICh0cmVlICosIHRyZWUgKiwgdHJlZSAqLCBlbnVtIHRyZWVfY29k
ZSAqKTsKCgpleHRlcm4gdHJlZSB0cnV0aHZhbHVlX2NvbnZlcnNpb24gKHRyZWUpOwpleHRlcm4g
dHJlZSB0eXBlX2Zvcl9tb2RlIChlbnVtIG1hY2hpbmVfbW9kZSwgaW50KTsKZXh0ZXJuIHRyZWUg
dHlwZV9mb3Jfc2l6ZSAodW5zaWduZWQsIGludCk7CgpleHRlcm4gdW5zaWduZWQgaW50IG1pbl9w
cmVjaXNpb24gKHRyZWUsIGludCk7CgoKZXh0ZXJuIHRyZWUgY19idWlsZF9xdWFsaWZpZWRfdHlw
ZSAodHJlZSwgaW50KTsKCgoKZXh0ZXJuIHZvaWQgY19jb21tb25fbm9kZXNfYW5kX2J1aWx0aW5z
ICh2b2lkKTsKCmV4dGVybiB0cmVlIGJ1aWxkX3ZhX2FyZyAodHJlZSwgdHJlZSk7CiMgNTA2ICIu
Li8uLi9nY2MvZ2NjL2MtY29tbW9uLmgiCmV4dGVybiBpbnQgc2VsZl9wcm9tb3RpbmdfYXJnc19w
ICh0cmVlKTsKZXh0ZXJuIHRyZWUgc2ltcGxlX3R5cGVfcHJvbW90ZXNfdG8gKHRyZWUpOwpleHRl
cm4gdHJlZSBzdHJpcF9hcnJheV90eXBlcyAodHJlZSk7CiMgNjUxICIuLi8uLi9nY2MvZ2NjL2Mt
Y29tbW9uLmgiCmVudW0gY190cmVlX2NvZGUgewogIENfRFVNTVlfVFJFRV9DT0RFID0gTEFTVF9B
TkRfVU5VU0VEX1RSRUVfQ09ERSwKIyAxICIuLi8uLi9nY2MvZ2NjL2MtY29tbW9uLmRlZiIgMQoj
IDI5ICIuLi8uLi9nY2MvZ2NjL2MtY29tbW9uLmRlZiIKU1JDTE9DLAoKU0laRU9GX0VYUFIsCkFS
Uk9XX0VYUFIsCkFMSUdOT0ZfRVhQUiwKCgoKRVhQUl9TVE1ULAoKCgpDT01QT1VORF9TVE1ULAoK
CgpERUNMX1NUTVQsCgoKCklGX1NUTVQsCgoKCkZPUl9TVE1ULAoKCgpXSElMRV9TVE1ULAoKCgpE
T19TVE1ULAoKCgpSRVRVUk5fU1RNVCwKCgpCUkVBS19TVE1ULAoKCkNPTlRJTlVFX1NUTVQsCgoK
ClNXSVRDSF9TVE1ULAoKCkdPVE9fU1RNVCwKCgoKTEFCRUxfU1RNVCwKCgpBU01fU1RNVCwKCgoK
CgoKClNDT1BFX1NUTVQsCgoKCgoKQ0FTRV9MQUJFTCwKCgoKU1RNVF9FWFBSLAojIDY1NCAiLi4v
Li4vZ2NjL2djYy9jLWNvbW1vbi5oIiAyCiBMQVNUX0NfVFJFRV9DT0RFCn07CgoKCmV4dGVybiB2
b2lkIGFkZF9jX3RyZWVfY29kZXMgKHZvaWQpOwpleHRlcm4gdm9pZCBnZW5ydGxfZG9fcHVzaGxl
dmVsICh2b2lkKTsKZXh0ZXJuIHZvaWQgZ2VucnRsX2dvdG9fc3RtdCAodHJlZSk7CmV4dGVybiB2
b2lkIGdlbnJ0bF9leHByX3N0bXQgKHRyZWUpOwpleHRlcm4gdm9pZCBnZW5ydGxfZGVjbF9zdG10
ICh0cmVlKTsKZXh0ZXJuIHZvaWQgZ2VucnRsX2lmX3N0bXQgKHRyZWUpOwpleHRlcm4gdm9pZCBn
ZW5ydGxfd2hpbGVfc3RtdCAodHJlZSk7CmV4dGVybiB2b2lkIGdlbnJ0bF9kb19zdG10ICh0cmVl
KTsKZXh0ZXJuIHZvaWQgZ2VucnRsX3JldHVybl9zdG10ICh0cmVlKTsKZXh0ZXJuIHZvaWQgZ2Vu
cnRsX2Zvcl9zdG10ICh0cmVlKTsKZXh0ZXJuIHZvaWQgZ2VucnRsX2JyZWFrX3N0bXQgKHZvaWQp
OwpleHRlcm4gdm9pZCBnZW5ydGxfY29udGludWVfc3RtdCAodm9pZCk7CmV4dGVybiB2b2lkIGdl
bnJ0bF9zY29wZV9zdG10ICh0cmVlKTsKZXh0ZXJuIHZvaWQgZ2VucnRsX3N3aXRjaF9zdG10ICh0
cmVlKTsKZXh0ZXJuIHZvaWQgZ2VucnRsX2Nhc2VfbGFiZWwgKHRyZWUpOwpleHRlcm4gdm9pZCBn
ZW5ydGxfY29tcG91bmRfc3RtdCAodHJlZSk7CmV4dGVybiB2b2lkIGdlbnJ0bF9hc21fc3RtdCAo
dHJlZSwgdHJlZSwgdHJlZSwgdHJlZSwgdHJlZSkKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJuIHZvaWQgZ2VucnRs
X2RlY2xfY2xlYW51cCAodHJlZSwgdHJlZSk7CmV4dGVybiBpbnQgc3RtdHNfYXJlX2Z1bGxfZXhw
cnNfcCAodm9pZCk7CmV4dGVybiBpbnQgYW5vbl9hZ2dyX3R5cGVfcCAodHJlZSk7CiMgNjk0ICIu
Li8uLi9nY2MvZ2NjL2MtY29tbW9uLmgiCmV4dGVybiB2b2lkIGVtaXRfbG9jYWxfdmFyICh0cmVl
KTsKZXh0ZXJuIHZvaWQgbWFrZV9ydGxfZm9yX2xvY2FsX3N0YXRpYyAodHJlZSk7CmV4dGVybiB0
cmVlIGV4cGFuZF9jb25kICh0cmVlKTsKZXh0ZXJuIHZvaWQgY19leHBhbmRfcmV0dXJuICh0cmVl
KTsKZXh0ZXJuIHZvaWQgZG9fY2FzZSAodHJlZSwgdHJlZSk7CmV4dGVybiB0cmVlIGJ1aWxkX3N0
bXQgKGVudW0gdHJlZV9jb2RlLCAuLi4pOwpleHRlcm4gdHJlZSBidWlsZF9jYXNlX2xhYmVsICh0
cmVlLCB0cmVlLCB0cmVlKTsKZXh0ZXJuIHRyZWUgYnVpbGRfY29udGludWVfc3RtdCAodm9pZCk7
CmV4dGVybiB0cmVlIGJ1aWxkX2JyZWFrX3N0bXQgKHZvaWQpOwpleHRlcm4gdHJlZSBidWlsZF9y
ZXR1cm5fc3RtdCAodHJlZSk7CgoKCmV4dGVybiB2b2lkIGNfZXhwYW5kX2FzbV9vcGVyYW5kcyAo
dHJlZSwgdHJlZSwgdHJlZSwgdHJlZSwgaW50LCBjb25zdCBjaGFyICosIGludCk7CgoKCgpleHRl
cm4gdHJlZSBidWlsZF91bmFyeV9vcCAoZW51bSB0cmVlX2NvZGUsIHRyZWUsIGludCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CmV4dGVybiB0cmVlIGJ1aWxkX2JpbmFyeV9vcCAoZW51bSB0cmVlX2NvZGUsIHRyZWUs
IHRyZWUsIGludCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CmV4dGVybiBpbnQgbHZhbHVlX3AgKHRyZWUp
OwpleHRlcm4gdHJlZSBkZWZhdWx0X2NvbnZlcnNpb24gKHRyZWUpOwoKCgoKZXh0ZXJuIHRyZWUg
Y29tbW9uX3R5cGUgKHRyZWUsIHRyZWUpOwoKZXh0ZXJuIHRyZWUgZXhwYW5kX3RyZWVfYnVpbHRp
biAodHJlZSwgdHJlZSwgdHJlZSk7CgpleHRlcm4gdHJlZSBkZWNsX2NvbnN0YW50X3ZhbHVlICh0
cmVlKTsKCgpleHRlcm4gdHJlZSBib29sZWFuX2luY3JlbWVudCAoZW51bSB0cmVlX2NvZGUsIHRy
ZWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCgoKZXh0ZXJuIHZvaWQgZXh0cmFjdF9pbnRlcmZhY2VfaW5mbyAodm9pZCk7
CgpleHRlcm4gdm9pZCBtYXJrX2NfbGFuZ3VhZ2VfZnVuY3Rpb24gKHN0cnVjdCBsYW5ndWFnZV9m
dW5jdGlvbiAqKTsKCmV4dGVybiBpbnQgY2FzZV9jb21wYXJlIChzcGxheV90cmVlX2tleSwgc3Bs
YXlfdHJlZV9rZXkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgpleHRlcm4gdHJlZSBjX2FkZF9jYXNlX2xh
YmVsIChzcGxheV90cmVlLCB0cmVlLCB0cmVlLCB0cmVlKQoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKZXh0ZXJuIHRyZWUg
YnVpbGRfZnVuY3Rpb25fY2FsbCAodHJlZSwgdHJlZSk7CgoKCgoKZXh0ZXJuIHZvaWQgKCpiYWNr
X2VuZF9ob29rKSAodHJlZSk7CgoKCmV4dGVybiBzdHJ1Y3QgcnR4X2RlZiAqY19leHBhbmRfZXhw
ciAodHJlZSwgcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwgZW51bSBleHBhbmRfbW9kaWZpZXIpCgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKZXh0ZXJuIGludCBjX3NhZmVfZnJvbV9wIChydHgsIHRy
ZWUpOwoKCgoKCnR5cGVkZWYgc3RydWN0IGR1bXBfaW5mbyAqZHVtcF9pbmZvX3A7CgoKCgoKdHlw
ZWRlZiBpbnQgKCpkdW1wX3RyZWVfZm4pIChkdW1wX2luZm9fcCwgdHJlZSk7CgpleHRlcm4gZHVt
cF90cmVlX2ZuIGxhbmdfZHVtcF90cmVlOwoKZXh0ZXJuIHZvaWQgZHVtcF9ub2RlX3RvX2ZpbGUg
KHRyZWUsIGNvbnN0IGNoYXIgKik7CgoKCnN0cnVjdCBjX2ZpbGVpbmZvCnsKICBpbnQgdGltZTsK
ICBzaG9ydCBpbnRlcmZhY2Vfb25seTsKICBzaG9ydCBpbnRlcmZhY2VfdW5rbm93bjsKfTsKCnN0
cnVjdCBjX2ZpbGVpbmZvICpnZXRfZmlsZWluZm8gKGNvbnN0IGNoYXIgKik7CmV4dGVybiB2b2lk
IGR1bXBfdGltZV9zdGF0aXN0aWNzICh2b2lkKTsKIyAyNiAiLi4vLi4vZ2NjL2djYy9jLXRyZWUu
aCIgMgojIDM3ICIuLi8uLi9nY2MvZ2NjL2MtdHJlZS5oIgpzdHJ1Y3QgbGFuZ19pZGVudGlmaWVy
CnsKICBzdHJ1Y3QgdHJlZV9pZGVudGlmaWVyIGlnbm9yZTsKICB0cmVlIGdsb2JhbF92YWx1ZSwg
bG9jYWxfdmFsdWUsIGxhYmVsX3ZhbHVlLCBpbXBsaWNpdF9kZWNsOwogIHRyZWUgZXJyb3JfbG9j
dXMsIGxpbWJvX3ZhbHVlOwogIGVudW0gcmlkIHJpZF9jb2RlOwp9OwoKCgoKc3RydWN0IGxhbmdf
ZGVjbAp7CiAgc3RydWN0IGNfbGFuZ19kZWNsIGJhc2U7Cn07CiMgODcgIi4uLy4uL2djYy9nY2Mv
Yy10cmVlLmgiCmV4dGVybiBpbnQgcGVkYW50aWM7CiMgMTA4ICIuLi8uLi9nY2MvZ2NjL2MtdHJl
ZS5oIgpzdHJ1Y3QgbGFuZ190eXBlCnsKICBpbnQgbGVuOwogIHRyZWUgZWx0c1sxXTsKfTsKIyAx
NDUgIi4uLy4uL2djYy9nY2MvYy10cmVlLmgiCmV4dGVybiB0cmVlIGxvb2t1cF9pbnRlcmZhY2Ug
KHRyZWUpOwpleHRlcm4gdHJlZSBpc19jbGFzc19uYW1lICh0cmVlKTsKZXh0ZXJuIHZvaWQgbWF5
YmVfb2JqY19jaGVja19kZWNsICh0cmVlKTsKZXh0ZXJuIHZvaWQgZmluaXNoX2ZpbGUgKHZvaWQp
OwpleHRlcm4gaW50IG1heWJlX29iamNfY29tcHR5cGVzICh0cmVlLCB0cmVlLCBpbnQpOwpleHRl
cm4gdHJlZSBtYXliZV9idWlsZGluZ19vYmpjX21lc3NhZ2VfZXhwciAodm9pZCk7CmV4dGVybiB0
cmVlIG1heWJlX29iamNfbWV0aG9kX25hbWUgKHRyZWUpOwpleHRlcm4gaW50IHJlY29nbml6ZV9v
YmpjX2tleXdvcmQgKHZvaWQpOwpleHRlcm4gdHJlZSBsb29rdXBfb2JqY19pdmFyICh0cmVlKTsK
CgpleHRlcm4gdm9pZCBjX3BhcnNlX2luaXQgKHZvaWQpOwoKCmV4dGVybiB2b2lkIGdlbl9hdXhf
aW5mb19yZWNvcmQgKHRyZWUsIGludCwgaW50LCBpbnQpOwoKCmV4dGVybiB0cmVlIGNvbnZlcnQg
KHRyZWUsIHRyZWUpOwoKCmV4dGVybiB0cmVlIGJ1aWxkX2VudW1lcmF0b3IgKHRyZWUsIHRyZWUp
OwoKCgoKCmV4dGVybiBpbnQgY19kZWNvZGVfb3B0aW9uIChpbnQsIGNoYXIgKiopOwpleHRlcm4g
dm9pZCBjX21hcmtfdmFyYXJncyAodm9pZCk7CmV4dGVybiB0cmVlIGNoZWNrX2lkZW50aWZpZXIg
KHRyZWUsIHRyZWUpOwpleHRlcm4gdm9pZCBjbGVhcl9wYXJtX29yZGVyICh2b2lkKTsKZXh0ZXJu
IHRyZWUgY29tYmluZV9wYXJtX2RlY2xzICh0cmVlLCB0cmVlLCBpbnQpOwpleHRlcm4gaW50IGNv
bXBsZXRlX2FycmF5X3R5cGUgKHRyZWUsIHRyZWUsIGludCk7CmV4dGVybiB2b2lkIGRlY2xhcmVf
cGFybV9sZXZlbCAoaW50KTsKZXh0ZXJuIHRyZWUgZGVmaW5lX2xhYmVsIChjb25zdCBjaGFyICos
IGludCwgdHJlZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwpleHRlcm4gdm9pZCBkZWxldGVfYmxvY2sgKHRyZWUpOwpleHRl
cm4gdm9pZCBmaW5pc2hfZGVjbCAodHJlZSwgdHJlZSwgdHJlZSk7CmV4dGVybiB2b2lkIGZpbmlz
aF9kZWNsX3RvcF9sZXZlbCAodHJlZSwgdHJlZSwgdHJlZSk7CmV4dGVybiB0cmVlIGZpbmlzaF9l
bnVtICh0cmVlLCB0cmVlLCB0cmVlKTsKZXh0ZXJuIHZvaWQgZmluaXNoX2Z1bmN0aW9uIChpbnQp
OwpleHRlcm4gdHJlZSBmaW5pc2hfc3RydWN0ICh0cmVlLCB0cmVlLCB0cmVlKTsKZXh0ZXJuIHRy
ZWUgZ2V0X3Bhcm1faW5mbyAoaW50KTsKZXh0ZXJuIHRyZWUgZ2V0ZGVjbHMgKHZvaWQpOwpleHRl
cm4gdHJlZSBnZXR0YWdzICh2b2lkKTsKZXh0ZXJuIGludCBnbG9iYWxfYmluZGluZ3NfcCAodm9p
ZCk7CmV4dGVybiB0cmVlIGdyb2tmaWVsZCAoY29uc3QgY2hhciAqLCBpbnQsIHRyZWUsIHRyZWUs
IHRyZWUpOwpleHRlcm4gdHJlZSBncm9rdHlwZW5hbWUgKHRyZWUpOwpleHRlcm4gdHJlZSBncm9r
dHlwZW5hbWVfaW5fcGFybV9jb250ZXh0ICh0cmVlKTsKZXh0ZXJuIHRyZWUgaW1wbGljaXRseV9k
ZWNsYXJlICh0cmVlKTsKZXh0ZXJuIHZvaWQgaW1wbGljaXRfZGVjbF93YXJuaW5nICh0cmVlKTsK
ZXh0ZXJuIGludCBpbl9wYXJtX2xldmVsX3AgKHZvaWQpOwpleHRlcm4gdm9pZCBpbml0X2RlY2xf
cHJvY2Vzc2luZyAodm9pZCk7CmV4dGVybiB2b2lkIGluc2VydF9ibG9jayAodHJlZSk7CmV4dGVy
biB2b2lkIGtlZXBfbmV4dF9sZXZlbCAodm9pZCk7CmV4dGVybiBpbnQga2VwdF9sZXZlbF9wICh2
b2lkKTsKZXh0ZXJuIHRyZWUgbG9va3VwX2xhYmVsICh0cmVlKTsKZXh0ZXJuIHRyZWUgbG9va3Vw
X25hbWUgKHRyZWUpOwpleHRlcm4gdHJlZSBsb29rdXBfbmFtZV9jdXJyZW50X2xldmVsICh0cmVl
KTsKZXh0ZXJuIHRyZWUgbG9va3VwX25hbWVfY3VycmVudF9sZXZlbF9nbG9iYWwgKHRyZWUpOwpl
eHRlcm4gdHJlZSBtYXliZV9idWlsZF9jbGVhbnVwICh0cmVlKTsKZXh0ZXJuIHZvaWQgcGFybWxp
c3RfdGFnc193YXJuaW5nICh2b2lkKTsKZXh0ZXJuIHZvaWQgcGVuZGluZ194cmVmX2Vycm9yICh2
b2lkKTsKZXh0ZXJuIHZvaWQgbWFya19jX2Z1bmN0aW9uX2NvbnRleHQgKHN0cnVjdCBmdW5jdGlv
biAqKTsKZXh0ZXJuIHZvaWQgcHVzaF9jX2Z1bmN0aW9uX2NvbnRleHQgKHN0cnVjdCBmdW5jdGlv
biAqKTsKZXh0ZXJuIHZvaWQgcG9wX2NfZnVuY3Rpb25fY29udGV4dCAoc3RydWN0IGZ1bmN0aW9u
ICopOwpleHRlcm4gdm9pZCBwb3BfbGFiZWxfbGV2ZWwgKHZvaWQpOwpleHRlcm4gdHJlZSBwb3Bs
ZXZlbCAoaW50LCBpbnQsIGludCk7CmV4dGVybiB2b2lkIHByaW50X2xhbmdfZGVjbCAoRklMRSAq
LCB0cmVlLCBpbnQpOwpleHRlcm4gdm9pZCBwcmludF9sYW5nX2lkZW50aWZpZXIgKEZJTEUgKiwg
dHJlZSwgaW50KTsKZXh0ZXJuIHZvaWQgcHJpbnRfbGFuZ190eXBlIChGSUxFICosIHRyZWUsIGlu
dCk7CmV4dGVybiB2b2lkIHB1c2hfbGFiZWxfbGV2ZWwgKHZvaWQpOwpleHRlcm4gdm9pZCBwdXNo
X3Bhcm1fZGVjbCAodHJlZSk7CmV4dGVybiB0cmVlIHB1c2hkZWNsICh0cmVlKTsKZXh0ZXJuIHRy
ZWUgcHVzaGRlY2xfdG9wX2xldmVsICh0cmVlKTsKZXh0ZXJuIHZvaWQgcHVzaGxldmVsIChpbnQp
OwpleHRlcm4gdm9pZCBwdXNodGFnICh0cmVlLCB0cmVlKTsKZXh0ZXJuIHZvaWQgc2V0X2Jsb2Nr
ICh0cmVlKTsKZXh0ZXJuIHRyZWUgc2hhZG93X2xhYmVsICh0cmVlKTsKZXh0ZXJuIHZvaWQgc2hh
ZG93X3JlY29yZF9maWVsZHMgKHRyZWUpOwpleHRlcm4gdm9pZCBzaGFkb3dfdGFnICh0cmVlKTsK
ZXh0ZXJuIHZvaWQgc2hhZG93X3RhZ193YXJuZWQgKHRyZWUsIGludCk7CmV4dGVybiB0cmVlIHN0
YXJ0X2VudW0gKHRyZWUpOwpleHRlcm4gaW50IHN0YXJ0X2Z1bmN0aW9uICh0cmVlLCB0cmVlLCB0
cmVlLCB0cmVlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CmV4dGVybiB0cmVlIHN0YXJ0X2RlY2wgKHRyZWUsIHRyZWUsIGlu
dCwgdHJlZSwgdHJlZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4gdHJlZSBzdGFydF9zdHJ1Y3QgKGVu
dW0gdHJlZV9jb2RlLCB0cmVlKTsKZXh0ZXJuIHZvaWQgc3RvcmVfcGFybV9kZWNscyAodm9pZCk7
CmV4dGVybiB0cmVlIHhyZWZfdGFnIChlbnVtIHRyZWVfY29kZSwgdHJlZSk7CmV4dGVybiB0cmVl
IGNfYmVnaW5fY29tcG91bmRfc3RtdCAodm9pZCk7CmV4dGVybiB2b2lkIGNfZXhwYW5kX2RlY2xf
c3RtdCAodHJlZSk7CgoKZXh0ZXJuIHRyZWUgcmVxdWlyZV9jb21wbGV0ZV90eXBlICh0cmVlKTsK
ZXh0ZXJuIHZvaWQgaW5jb21wbGV0ZV90eXBlX2Vycm9yICh0cmVlLCB0cmVlKTsKZXh0ZXJuIGlu
dCBjb21wdHlwZXMgKHRyZWUsIHRyZWUpOwpleHRlcm4gdHJlZSBjX3NpemVvZiAodHJlZSk7CmV4
dGVybiB0cmVlIGNfc2l6ZW9mX25vd2FybiAodHJlZSk7CmV4dGVybiB0cmVlIGNfc2l6ZV9pbl9i
eXRlcyAodHJlZSk7CmV4dGVybiB0cmVlIGNfYWxpZ25vZiAodHJlZSk7CmV4dGVybiB0cmVlIGNf
YWxpZ25vZl9leHByICh0cmVlKTsKZXh0ZXJuIHRyZWUgYnVpbGRfY29tcG9uZW50X3JlZiAodHJl
ZSwgdHJlZSk7CmV4dGVybiB0cmVlIGJ1aWxkX2luZGlyZWN0X3JlZiAodHJlZSwgY29uc3QgY2hh
ciAqKTsKZXh0ZXJuIHRyZWUgYnVpbGRfYXJyYXlfcmVmICh0cmVlLCB0cmVlKTsKZXh0ZXJuIHRy
ZWUgYnVpbGRfZXh0ZXJuYWxfcmVmICh0cmVlLCBpbnQpOwpleHRlcm4gdHJlZSBidWlsZF9mdW5j
dGlvbl9jYWxsICh0cmVlLCB0cmVlKTsKZXh0ZXJuIHRyZWUgcGFyc2VyX2J1aWxkX2JpbmFyeV9v
cCAoZW51bSB0cmVlX2NvZGUsIHRyZWUsIHRyZWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJuIGludCBs
dmFsdWVfb3JfZWxzZSAodHJlZSwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIHZvaWQgcmVhZG9ubHlf
d2FybmluZyAodHJlZSwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBtYXJrX2FkZHJlc3NhYmxl
ICh0cmVlKTsKZXh0ZXJuIHRyZWUgYnVpbGRfY29uZGl0aW9uYWxfZXhwciAodHJlZSwgdHJlZSwg
dHJlZSk7CmV4dGVybiB0cmVlIGJ1aWxkX2NvbXBvdW5kX2V4cHIgKHRyZWUpOwpleHRlcm4gdHJl
ZSBidWlsZF9jX2Nhc3QgKHRyZWUsIHRyZWUpOwpleHRlcm4gdHJlZSBidWlsZF9tb2RpZnlfZXhw
ciAodHJlZSwgZW51bSB0cmVlX2NvZGUsIHRyZWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJuIHZvaWQgc3RvcmVf
aW5pdF92YWx1ZSAodHJlZSwgdHJlZSk7CmV4dGVybiB2b2lkIGVycm9yX2luaXQgKGNvbnN0IGNo
YXIgKik7CmV4dGVybiB2b2lkIHBlZHdhcm5faW5pdCAoY29uc3QgY2hhciAqKTsKZXh0ZXJuIHZv
aWQgc3RhcnRfaW5pdCAodHJlZSwgdHJlZSwgaW50KTsKZXh0ZXJuIHZvaWQgZmluaXNoX2luaXQg
KHZvaWQpOwpleHRlcm4gdm9pZCByZWFsbHlfc3RhcnRfaW5jcmVtZW50YWxfaW5pdCAodHJlZSk7
CmV4dGVybiB2b2lkIHB1c2hfaW5pdF9sZXZlbCAoaW50KTsKZXh0ZXJuIHRyZWUgcG9wX2luaXRf
bGV2ZWwgKGludCk7CmV4dGVybiB2b2lkIHNldF9pbml0X2luZGV4ICh0cmVlLCB0cmVlKTsKZXh0
ZXJuIHZvaWQgc2V0X2luaXRfbGFiZWwgKHRyZWUpOwpleHRlcm4gdm9pZCBwcm9jZXNzX2luaXRf
ZWxlbWVudCAodHJlZSk7CmV4dGVybiB2b2lkIHBlZHdhcm5fYzk5IChjb25zdCBjaGFyICosIC4u
LikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMSwgMikpKTsKZXh0ZXJu
IHRyZWUgY19zdGFydF9jYXNlICh0cmVlKTsKZXh0ZXJuIHZvaWQgY19maW5pc2hfY2FzZSAodm9p
ZCk7CgoKCgpleHRlcm4gaW50IGN1cnJlbnRfZnVuY3Rpb25fcmV0dXJuc192YWx1ZTsKCgoKCmV4
dGVybiBpbnQgY3VycmVudF9mdW5jdGlvbl9yZXR1cm5zX251bGw7CgoKCgpleHRlcm4gaW50IHNr
aXBfZXZhbHVhdGlvbjsKCgoKZXh0ZXJuIGludCBkb2xsYXJzX2luX2lkZW50OwoKCgoKZXh0ZXJu
IGludCBmbGFnX2NvbmRfbWlzbWF0Y2g7CgoKCmV4dGVybiBpbnQgZmxhZ19ub19hc207CgoKCmV4
dGVybiBpbnQgd2Fybl9pbXBsaWNpdDsKCgoKCmV4dGVybiBpbnQgd2Fybl9wb2ludGVyX2FyaXRo
OwoKCgpleHRlcm4gaW50IHdhcm5fc3RyaWN0X3Byb3RvdHlwZXM7CgoKCgpleHRlcm4gaW50IHdh
cm5fcmVkdW5kYW50X2RlY2xzOwoKCgoKCgoKZXh0ZXJuIGludCB3YXJuX25lc3RlZF9leHRlcm5z
OwoKCgoKZXh0ZXJuIGludCB3YXJuX2Nhc3RfcXVhbDsKCgoKCgpleHRlcm4gaW50IHdhcm5fYmFk
X2Z1bmN0aW9uX2Nhc3Q7CgoKCmV4dGVybiBpbnQgd2Fybl90cmFkaXRpb25hbDsKCgoKZXh0ZXJu
IGludCB3YXJuX2NoYXJfc3Vic2NyaXB0czsKCgoKZXh0ZXJuIGludCB3YXJuX21haW47CgoKCmV4
dGVybiBpbnQgZmxhZ19hbGxvd19zaW5nbGVfcHJlY2lzaW9uOwoKCgpleHRlcm4gaW50IHdhcm5f
bWlzc2luZ19icmFjZXM7CgoKCmV4dGVybiBpbnQgd2Fybl9zaWduX2NvbXBhcmU7CgoKCmV4dGVy
biBpbnQgd2Fybl9mbG9hdF9lcXVhbDsKCgoKZXh0ZXJuIGludCB3YXJuX211bHRpY2hhcjsKCgoK
ZXh0ZXJuIGludCB3YXJuX2xvbmdfbG9uZzsKCgoKZXh0ZXJuIGludCBzeXN0ZW1faGVhZGVyX3A7
CgoKZXh0ZXJuIGludCBtZXNnX2ltcGxpY2l0X2Z1bmN0aW9uX2RlY2xhcmF0aW9uOwoKCgoKCgoK
ZXh0ZXJuIHZvaWQgZmluaXNoX2luY29tcGxldGVfZGVjbCAodHJlZSk7CiMgMzkgIi4uLy4uL2dj
Yy9nY2MvYy1kZWNsLmMiIDIKIyAxICIuLi8uLi9nY2MvZ2NjL2MtbGV4LmgiIDEKIyAyNCAiLi4v
Li4vZ2NjL2djYy9jLWxleC5oIgpleHRlcm4gdHJlZSBtYWtlX3BvaW50ZXJfZGVjbGFyYXRvciAo
dHJlZSwgdHJlZSk7CmV4dGVybiB2b2lkIHBvc2l0aW9uX2FmdGVyX3doaXRlX3NwYWNlICh2b2lk
KTsKZXh0ZXJuIGludCBjaGVja19uZXdsaW5lICh2b2lkKTsKCmV4dGVybiBpbnQgY19sZXggKHRy
ZWUgKik7CmV4dGVybiBjb25zdCBjaGFyICppbml0X2NfbGV4IChjb25zdCBjaGFyICopOwoKZXh0
ZXJuIHZvaWQgZm9yZ2V0X3Byb3RvY29sX3F1YWxpZmllcnMgKHZvaWQpOwpleHRlcm4gdm9pZCBy
ZW1lbWJlcl9wcm90b2NvbF9xdWFsaWZpZXJzICh2b2lkKTsKZXh0ZXJuIHRyZWUgaXNfY2xhc3Nf
bmFtZSAodHJlZSk7CgpleHRlcm4gaW50IGluZGVudF9sZXZlbDsKIyA0MCAiLi4vLi4vZ2NjL2dj
Yy9jLWRlY2wuYyIgMgojIDEgIi4uLy4uL2djYy9nY2MvdG9wbGV2LmgiIDEKIyAyNSAiLi4vLi4v
Z2NjL2djYy90b3BsZXYuaCIKdW5pb24gdHJlZV9ub2RlOwpzdHJ1Y3QgcnR4X2RlZjsKCgoKCgoK
CmV4dGVybiBpbnQgcmVhZF9pbnRlZ3JhbF9wYXJhbWV0ZXIgKGNvbnN0IGNoYXIgKiwgY29uc3Qg
Y2hhciAqLCBjb25zdCBpbnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4gaW50IGNvdW50X2Vycm9yIChpbnQpOwpleHRl
cm4gdm9pZCBzdHJpcF9vZmZfZW5kaW5nIChjaGFyICosIGludCk7CmV4dGVybiBjaGFyICpmaWxl
X25hbWVfbm9uZGlyZWN0b3J5IChjb25zdCBjaGFyICopOwpleHRlcm4gdm9pZCBwcmludF90aW1l
IChjb25zdCBjaGFyICosIGxvbmcpOwpleHRlcm4gdm9pZCBkZWJ1Z19zdGFydF9zb3VyY2VfZmls
ZSAoY29uc3QgY2hhciAqKTsKZXh0ZXJuIHZvaWQgZGVidWdfZW5kX3NvdXJjZV9maWxlICh1bnNp
Z25lZCk7CmV4dGVybiB2b2lkIGRlYnVnX2RlZmluZSAodW5zaWduZWQsIGNoYXIgKik7CmV4dGVy
biB2b2lkIGRlYnVnX3VuZGVmICh1bnNpZ25lZCwgY2hhciAqKTsKZXh0ZXJuIGludCBkZWJ1Z19p
Z25vcmVfYmxvY2sgKHVuaW9uIHRyZWVfbm9kZSAqKTsKZXh0ZXJuIHZvaWQgZmF0YWwgKGNvbnN0
IGNoYXIgKiwgLi4uKQogIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAx
LCAyKSkpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKZXh0ZXJuIHZvaWQgZmF0YWxf
aW9fZXJyb3IgKGNvbnN0IGNoYXIgKikKICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7
CmV4dGVybiB2b2lkIHBmYXRhbF93aXRoX25hbWUgKGNvbnN0IGNoYXIgKikKICBfX2F0dHJpYnV0
ZV9fICgoX19ub3JldHVybl9fKSk7CmV4dGVybiB2b2lkIF9mYXRhbF9pbnNuX25vdF9mb3VuZCAo
c3RydWN0IHJ0eF9kZWYgKiwgY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKikKCgogIF9f
YXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKZXh0ZXJuIHZvaWQgX2ZhdGFsX2luc24gKGNv
bnN0IGNoYXIgKiwgc3RydWN0IHJ0eF9kZWYgKiwgY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNo
YXIgKikKCgoKICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgoKCmV4dGVybiB2
b2lkIHdhcm5pbmcgKGNvbnN0IGNoYXIgKiwgLi4uKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmlu
dGZfXywgMSwgMikpKTsKZXh0ZXJuIHZvaWQgZXJyb3IgKGNvbnN0IGNoYXIgKiwgLi4uKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHJpYnV0ZV9f
ICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMSwgMikpKTsKZXh0ZXJuIHZvaWQgcGVkd2FybiAo
Y29uc3QgY2hhciAqLCAuLi4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAxLCAyKSkp
OwpleHRlcm4gdm9pZCBwZWR3YXJuX3dpdGhfZmlsZV9hbmRfbGluZSAoY29uc3QgY2hhciAqLCBp
bnQsIGNvbnN0IGNoYXIgKiwgLi4uKQoKICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19w
cmludGZfXywgMywgNCkpKTsKZXh0ZXJuIHZvaWQgd2FybmluZ193aXRoX2ZpbGVfYW5kX2xpbmUg
KGNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICosIC4uLikKCiAgX19hdHRyaWJ1dGVfXyAo
KF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CmV4dGVybiB2b2lkIGVycm9yX3dpdGhf
ZmlsZV9hbmRfbGluZSAoY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgLi4uKQoKICBf
X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKZXh0ZXJuIHZv
aWQgc29ycnkgKGNvbnN0IGNoYXIgKiwgLi4uKQogIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9f
IChfX3ByaW50Zl9fLCAxLCAyKSkpOwpleHRlcm4gdm9pZCByZWFsbHlfc29ycnkgKGNvbnN0IGNo
YXIgKiwgLi4uKQogIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAxLCAy
KSkpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKZXh0ZXJuIHZvaWQgZGVmYXVsdF9w
cmludF9lcnJvcl9mdW5jdGlvbiAoY29uc3QgY2hhciAqKTsKZXh0ZXJuIHZvaWQgcmVwb3J0X2Vy
cm9yX2Z1bmN0aW9uIChjb25zdCBjaGFyICopOwoKZXh0ZXJuIHZvaWQgcmVzdF9vZl9kZWNsX2Nv
bXBpbGF0aW9uICh1bmlvbiB0cmVlX25vZGUgKiwgY29uc3QgY2hhciAqLCBpbnQsIGludCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwpleHRlcm4gdm9pZCByZXN0X29mX3R5cGVfY29tcGlsYXRpb24gKHVuaW9u
IHRyZWVfbm9kZSAqLCBpbnQpOwpleHRlcm4gdm9pZCByZXN0X29mX2NvbXBpbGF0aW9uICh1bmlv
biB0cmVlX25vZGUgKik7CgoKZXh0ZXJuIHZvaWQgcGVkd2Fybl93aXRoX2RlY2wgKHVuaW9uIHRy
ZWVfbm9kZSAqLCBjb25zdCBjaGFyICosIC4uLikKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4gdm9pZCB3
YXJuaW5nX3dpdGhfZGVjbCAodW5pb24gdHJlZV9ub2RlICosIGNvbnN0IGNoYXIgKiwgLi4uKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CmV4dGVybiB2b2lkIGVycm9yX3dpdGhfZGVjbCAodW5pb24gdHJlZV9ub2Rl
ICosIGNvbnN0IGNoYXIgKiwgLi4uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgpleHRlcm4gdm9pZCBhbm5vdW5j
ZV9mdW5jdGlvbiAodW5pb24gdHJlZV9ub2RlICopOwoKZXh0ZXJuIHZvaWQgZXJyb3JfZm9yX2Fz
bSAoc3RydWN0IHJ0eF9kZWYgKiwgY29uc3QgY2hhciAqLCAuLi4pCgogIF9fYXR0cmlidXRlX18g
KChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwpleHRlcm4gdm9pZCB3YXJuaW5nX2Zv
cl9hc20gKHN0cnVjdCBydHhfZGVmICosIGNvbnN0IGNoYXIgKiwgLi4uKQoKICBfX2F0dHJpYnV0
ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgoKCgpleHRlcm4gaW50IGRv
X2Zsb2F0X2hhbmRsZXIgKHZvaWQgKCopICh2b2lkICopLCB2b2lkICopOwoKCmV4dGVybiB2b2lk
IG91dHB1dF9xdW90ZWRfc3RyaW5nIChGSUxFICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiB2b2lk
IG91dHB1dF9maWxlX2RpcmVjdGl2ZSAoRklMRSAqLCBjb25zdCBjaGFyICopOwoKZXh0ZXJuIHZv
aWQgZG9fYWJvcnQgKHZvaWQpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKZXh0ZXJu
IHZvaWQgYm90Y2ggKGNvbnN0IGNoYXIgKikKICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9f
KSk7CgoKZXh0ZXJuIHZvaWQgZm5vdGljZSAoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLikKICBf
X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgpleHRlcm4g
aW50IHdyYXB1cF9nbG9iYWxfZGVjbGFyYXRpb25zICh1bmlvbiB0cmVlX25vZGUgKiosIGludCk7
CmV4dGVybiB2b2lkIGNoZWNrX2dsb2JhbF9kZWNsYXJhdGlvbnMgKHVuaW9uIHRyZWVfbm9kZSAq
KiwgaW50KTsKZXh0ZXJuIHZvaWQgbm90ZV9kZWZlcnJhbF9vZl9kZWZpbmVkX2lubGluZV9mdW5j
dGlvbiAodW5pb24gdHJlZV9ub2RlICopOwpleHRlcm4gaW50IGVycm9yY291bnQ7CmV4dGVybiBp
bnQgd2FybmluZ2NvdW50OwpleHRlcm4gaW50IHNvcnJ5Y291bnQ7CgpleHRlcm4gY29uc3QgY2hh
ciAqcHJvZ25hbWU7CiMgNDEgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiIDIKIyAxICIuLi8uLi9n
Y2MvZ2NjL2RlZmF1bHRzLmgiIDEKIyA0MiAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIgMgojIDEg
Ii4uLy4uL2djYy9nY2MvZ2djLmgiIDEKIyAyMiAiLi4vLi4vZ2NjL2djYy9nZ2MuaCIKIyAxICIu
Li8uLi9nY2MvZ2NjL3ZhcnJheS5oIiAxCiMgMzYgIi4uLy4uL2djYy9nY2MvdmFycmF5LmgiCnN0
cnVjdCBjb25zdF9lcXVpdl9kYXRhIHsKIyA1MCAiLi4vLi4vZ2NjL2djYy92YXJyYXkuaCIKICBz
dHJ1Y3QgcnR4X2RlZiAqcnR4OwoKCgogIHVuc2lnbmVkIGFnZTsKfTsKCgp0eXBlZGVmIHVuaW9u
IHZhcnJheV9kYXRhX3RhZyB7CiAgY2hhciBjWzFdOwogIHVuc2lnbmVkIGNoYXIgdWNbMV07CiAg
c2hvcnQgc1sxXTsKICB1bnNpZ25lZCBzaG9ydCB1c1sxXTsKICBpbnQgaVsxXTsKICB1bnNpZ25l
ZCBpbnQgdVsxXTsKICBsb25nIGxbMV07CiAgdW5zaWduZWQgbG9uZyB1bFsxXTsKICBpbnQgaGlu
dFsxXTsKICB1bnNpZ25lZCBpbnQgdWhpbnRbMV07CiAgdm9pZCAqIGdlbmVyaWNbMV07CiAgY2hh
ciAqY3B0clsxXTsKICBzdHJ1Y3QgcnR4X2RlZiAqcnR4WzFdOwogIHN0cnVjdCBydHZlY19kZWYg
KnJ0dmVjWzFdOwogIHVuaW9uIHRyZWVfbm9kZSAqdHJlZVsxXTsKICBzdHJ1Y3QgYml0bWFwX2hl
YWRfZGVmICpiaXRtYXBbMV07CiAgc3RydWN0IHNjaGVkX2luZm9fdGFnICpzY2hlZFsxXTsKICBz
dHJ1Y3QgcmVnX2luZm9fZGVmICpyZWdbMV07CiAgc3RydWN0IGNvbnN0X2VxdWl2X2RhdGEgY29u
c3RfZXF1aXZbMV07CiAgc3RydWN0IGJhc2ljX2Jsb2NrX2RlZiAqYmJbMV07CiAgc3RydWN0IGVs
dF9saXN0ICp0ZVsxXTsKfSB2YXJyYXlfZGF0YTsKCgp0eXBlZGVmIHN0cnVjdCB2YXJyYXlfaGVh
ZF90YWcgewogIHNpemVfdCBudW1fZWxlbWVudHM7CiAgc2l6ZV90IGVsZW1lbnRzX3VzZWQ7Cgog
IHNpemVfdCBlbGVtZW50X3NpemU7CiAgY29uc3QgY2hhciAqbmFtZTsKICB2YXJyYXlfZGF0YSBk
YXRhOwp9ICp2YXJyYXlfdHlwZTsKCgoKZXh0ZXJuIHZhcnJheV90eXBlIHZhcnJheV9pbml0IChz
aXplX3QsIHNpemVfdCwgY29uc3QgY2hhciAqKTsKIyAxNjUgIi4uLy4uL2djYy9nY2MvdmFycmF5
LmgiCmV4dGVybiB2YXJyYXlfdHlwZSB2YXJyYXlfZ3JvdyAodmFycmF5X3R5cGUsIHNpemVfdCk7
CiMgMTc2ICIuLi8uLi9nY2MvZ2NjL3ZhcnJheS5oIgpleHRlcm4gdm9pZCB2YXJyYXlfY2hlY2tf
ZmFpbGVkICh2YXJyYXlfdHlwZSwgc2l6ZV90LCBjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hh
ciAqKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKIyAyMyAiLi4vLi4vZ2NjL2djYy9n
Z2MuaCIgMgojIDMxICIuLi8uLi9nY2MvZ2NjL2dnYy5oIgpzdHJ1Y3QgZWhfc3RhdHVzOwpzdHJ1
Y3QgZW1pdF9zdGF0dXM7CnN0cnVjdCBleHByX3N0YXR1czsKc3RydWN0IGhhc2hfdGFibGU7CnN0
cnVjdCBsYWJlbF9ub2RlOwpzdHJ1Y3QgcnR4X2RlZjsKc3RydWN0IHJ0dmVjX2RlZjsKc3RydWN0
IHN0bXRfc3RhdHVzOwp1bmlvbiB0cmVlX25vZGU7CnN0cnVjdCB2YXJhc21fc3RhdHVzOwoKCmV4
dGVybiBjaGFyICplbXB0eV9zdHJpbmc7CgoKZXh0ZXJuIHZhcnJheV90eXBlIGdnY19wZW5kaW5n
X3RyZWVzOwoKCnZvaWQgZ2djX2FkZF9yb290ICh2b2lkICpiYXNlLCBpbnQgbmVsdCwgaW50IHNp
emUsIHZvaWQgKCopKHZvaWQgKikpOwp2b2lkIGdnY19hZGRfcnR4X3Jvb3QgKHN0cnVjdCBydHhf
ZGVmICoqLCBpbnQgbmVsdCk7CnZvaWQgZ2djX2FkZF90cmVlX3Jvb3QgKHVuaW9uIHRyZWVfbm9k
ZSAqKiwgaW50IG5lbHQpOwp2b2lkIGdnY19hZGRfc3RyaW5nX3Jvb3QgKGNoYXIgKiosIGludCBu
ZWx0KTsKdm9pZCBnZ2NfYWRkX3J0eF92YXJyYXlfcm9vdCAoc3RydWN0IHZhcnJheV9oZWFkX3Rh
ZyAqKiwgaW50IG5lbHQpOwp2b2lkIGdnY19hZGRfdHJlZV92YXJyYXlfcm9vdCAoc3RydWN0IHZh
cnJheV9oZWFkX3RhZyAqKiwgaW50IG5lbHQpOwp2b2lkIGdnY19hZGRfdHJlZV9oYXNoX3RhYmxl
X3Jvb3QgKHN0cnVjdCBoYXNoX3RhYmxlICoqLCBpbnQgbmVsdCk7CnZvaWQgZ2djX2RlbF9yb290
ICh2b2lkICpiYXNlKTsKCgoKZXh0ZXJuIHZvaWQgZ2djX21hcmtfcnR4X3ZhcnJheSAoc3RydWN0
IHZhcnJheV9oZWFkX3RhZyAqKTsKZXh0ZXJuIHZvaWQgZ2djX21hcmtfdHJlZV92YXJyYXkgKHN0
cnVjdCB2YXJyYXlfaGVhZF90YWcgKik7CmV4dGVybiB2b2lkIGdnY19tYXJrX3RyZWVfaGFzaF90
YWJsZSAoc3RydWN0IGhhc2hfdGFibGUgKik7CmV4dGVybiB2b2lkIGdnY19tYXJrX3Jvb3RzICh2
b2lkKTsKCmV4dGVybiB2b2lkIGdnY19tYXJrX3J0eF9jaGlsZHJlbiAoc3RydWN0IHJ0eF9kZWYg
Kik7CmV4dGVybiB2b2lkIGdnY19tYXJrX3J0dmVjX2NoaWxkcmVuIChzdHJ1Y3QgcnR2ZWNfZGVm
ICopOwojIDEwOSAiLi4vLi4vZ2NjL2djYy9nZ2MuaCIKZXh0ZXJuIHZvaWQgZ2djX21hcmtfaWZf
Z2NhYmxlIChjb25zdCB2b2lkICopOwoKCgoKZXh0ZXJuIHZvaWQgaW5pdF9nZ2MgKHZvaWQpOwoK
CgpleHRlcm4gdm9pZCBnZ2NfcHVzaF9jb250ZXh0ICh2b2lkKTsKCgoKZXh0ZXJuIHZvaWQgZ2dj
X3BvcF9jb250ZXh0ICh2b2lkKTsKCgoKCnZvaWQgKmdnY19hbGxvYyAoc2l6ZV90KTsKCnZvaWQg
KmdnY19hbGxvY19jbGVhcmVkIChzaXplX3QpOwojIDE0NSAiLi4vLi4vZ2NjL2djYy9nZ2MuaCIK
Y2hhciAqZ2djX2FsbG9jX3N0cmluZyAoY29uc3QgY2hhciAqY29udGVudHMsIGludCBsZW5ndGgp
OwoKCgoKCgp2b2lkIGdnY19jb2xsZWN0ICh2b2lkKTsKCgoKCgoKaW50IGdnY19zZXRfbWFyayAo
Y29uc3Qgdm9pZCAqKTsKCgoKCgp2b2lkIGxhbmdfbWFya190cmVlICh1bmlvbiB0cmVlX25vZGUg
Kik7CgoKCgoKZXh0ZXJuIHZvaWQgKCpsYW5nX21hcmtfZmFsc2VfbGFiZWxfc3RhY2spIChzdHJ1
Y3QgbGFiZWxfbm9kZSAqKTsKCgoKdm9pZCBtYXJrX2VoX3N0YXR1cyAoc3RydWN0IGVoX3N0YXR1
cyAqKTsKdm9pZCBtYXJrX2VtaXRfc3RhdHVzIChzdHJ1Y3QgZW1pdF9zdGF0dXMgKik7CnZvaWQg
bWFya19leHByX3N0YXR1cyAoc3RydWN0IGV4cHJfc3RhdHVzICopOwp2b2lkIG1hcmtfc3RtdF9z
dGF0dXMgKHN0cnVjdCBzdG10X3N0YXR1cyAqKTsKdm9pZCBtYXJrX3ZhcmFzbV9zdGF0dXMgKHN0
cnVjdCB2YXJhc21fc3RhdHVzICopOwp2b2lkIG1hcmtfb3B0YWIgKHZvaWQgKik7CgoKCgoKdHlw
ZWRlZiBzdHJ1Y3QgZ2djX3N0YXRpc3RpY3MKewoKICB1bnNpZ25lZCBudW1fdHJlZXNbMjU2XTsK
CgogIHNpemVfdCBzaXplX3RyZWVzWzI1Nl07CgogIHVuc2lnbmVkIG51bV9ydHhzWzI1Nl07CgoK
ICBzaXplX3Qgc2l6ZV9ydHhzWzI1Nl07CgogIHNpemVfdCB0b3RhbF9zaXplX3RyZWVzOwoKICBz
aXplX3QgdG90YWxfc2l6ZV9ydHhzOwoKICB1bnNpZ25lZCB0b3RhbF9udW1fdHJlZXM7CgogIHVu
c2lnbmVkIHRvdGFsX251bV9ydHhzOwp9IGdnY19zdGF0aXN0aWNzOwoKCnNpemVfdCBnZ2NfZ2V0
X3NpemUgKGNvbnN0IHZvaWQgKik7CgoKCnZvaWQgZ2djX3ByaW50X2NvbW1vbl9zdGF0aXN0aWNz
IChGSUxFICosIGdnY19zdGF0aXN0aWNzICopOwoKCmV4dGVybiB2b2lkIGdnY19wcmludF9zdGF0
aXN0aWNzICh2b2lkKTsKIyA0MyAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIgMgojIDEgInRtX3Au
aCIgMQoKCiMgMSAiLi4vLi4vZ2NjL2djYy9jb25maWcvaTM4Ni9pMzg2LXByb3Rvcy5oIiAxCiMg
MjMgIi4uLy4uL2djYy9nY2MvY29uZmlnL2kzODYvaTM4Ni1wcm90b3MuaCIKZXh0ZXJuIHZvaWQg
b3ZlcnJpZGVfb3B0aW9ucyAodm9pZCk7CmV4dGVybiB2b2lkIG9yZGVyX3JlZ3NfZm9yX2xvY2Fs
X2FsbG9jICh2b2lkKTsKZXh0ZXJuIHZvaWQgb3B0aW1pemF0aW9uX29wdGlvbnMgKGludCwgaW50
KTsKCmV4dGVybiBpbnQgaXg4Nl9jYW5fdXNlX3JldHVybl9pbnNuX3AgKHZvaWQpOwoKZXh0ZXJu
IHZvaWQgYXNtX291dHB1dF9mdW5jdGlvbl9wcmVmaXggKEZJTEUgKiwgY29uc3QgY2hhciAqKTsK
ZXh0ZXJuIHZvaWQgbG9hZF9waWNfcmVnaXN0ZXIgKHZvaWQpOwpleHRlcm4gaW50IGl4ODZfaW5p
dGlhbF9lbGltaW5hdGlvbl9vZmZzZXQgKGludCwgaW50KTsKZXh0ZXJuIHZvaWQgaXg4Nl9leHBh
bmRfcHJvbG9ndWUgKHZvaWQpOwpleHRlcm4gdm9pZCBpeDg2X2V4cGFuZF9lcGlsb2d1ZSAoaW50
KTsKCmV4dGVybiB2b2lkIGl4ODZfb3V0cHV0X2Z1bmN0aW9uX2Jsb2NrX3Byb2ZpbGVyIChGSUxF
ICosIGludCk7CmV4dGVybiB2b2lkIGl4ODZfb3V0cHV0X2Jsb2NrX3Byb2ZpbGVyIChGSUxFICos
IGludCk7CgoKZXh0ZXJuIGludCBpeDg2X2FsaWduZWRfcCAocnR4KTsKCmV4dGVybiBpbnQgc3Rh
bmRhcmRfODAzODdfY29uc3RhbnRfcCAocnR4KTsKZXh0ZXJuIGludCBzeW1ib2xpY19yZWZlcmVu
Y2VfbWVudGlvbmVkX3AgKHJ0eCk7CgpleHRlcm4gaW50IGNvbnN0X2ludF8xX29wZXJhbmQgKHJ0
eCwgZW51bSBtYWNoaW5lX21vZGUpOwpleHRlcm4gaW50IHN5bWJvbGljX29wZXJhbmQgKHJ0eCwg
ZW51bSBtYWNoaW5lX21vZGUpOwpleHRlcm4gaW50IHBpY19zeW1ib2xpY19vcGVyYW5kIChydHgs
IGVudW0gbWFjaGluZV9tb2RlKTsKZXh0ZXJuIGludCBjYWxsX2luc25fb3BlcmFuZCAocnR4LCBl
bnVtIG1hY2hpbmVfbW9kZSk7CmV4dGVybiBpbnQgY29uc3RhbnRfY2FsbF9hZGRyZXNzX29wZXJh
bmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOwpleHRlcm4gaW50IGNvbnN0MF9vcGVyYW5kIChy
dHgsIGVudW0gbWFjaGluZV9tb2RlKTsKZXh0ZXJuIGludCBjb25zdDFfb3BlcmFuZCAocnR4LCBl
bnVtIG1hY2hpbmVfbW9kZSk7CmV4dGVybiBpbnQgY29uc3QyNDhfb3BlcmFuZCAocnR4LCBlbnVt
IG1hY2hpbmVfbW9kZSk7CmV4dGVybiBpbnQgaW5jZGVjX29wZXJhbmQgKHJ0eCwgZW51bSBtYWNo
aW5lX21vZGUpOwpleHRlcm4gaW50IHJlZ19ub19zcF9vcGVyYW5kIChydHgsIGVudW0gbWFjaGlu
ZV9tb2RlKTsKZXh0ZXJuIGludCBtbXhfcmVnX29wZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21v
ZGUpOwpleHRlcm4gaW50IGdlbmVyYWxfbm9fZWxpbV9vcGVyYW5kIChydHgsIGVudW0gbWFjaGlu
ZV9tb2RlKTsKZXh0ZXJuIGludCBub25tZW1vcnlfbm9fZWxpbV9vcGVyYW5kIChydHgsIGVudW0g
bWFjaGluZV9tb2RlKTsKZXh0ZXJuIGludCBxX3JlZ3Nfb3BlcmFuZCAocnR4LCBlbnVtIG1hY2hp
bmVfbW9kZSk7CmV4dGVybiBpbnQgbm9uX3FfcmVnc19vcGVyYW5kIChydHgsIGVudW0gbWFjaGlu
ZV9tb2RlKTsKZXh0ZXJuIGludCBub19jb21wYXJpc29uX29wZXJhdG9yIChydHgsIGVudW0gbWFj
aGluZV9tb2RlKTsKZXh0ZXJuIGludCBzc2VfY29tcGFyaXNvbl9vcGVyYXRvciAocnR4LCBlbnVt
IG1hY2hpbmVfbW9kZSk7CmV4dGVybiBpbnQgZmNtb3ZfY29tcGFyaXNvbl9vcGVyYXRvciAocnR4
LCBlbnVtIG1hY2hpbmVfbW9kZSk7CmV4dGVybiBpbnQgY21wX2ZwX2V4cGFuZGVyX29wZXJhbmQg
KHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOwpleHRlcm4gaW50IGl4ODZfY29tcGFyaXNvbl9vcGVy
YXRvciAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CmV4dGVybiBpbnQgZXh0X3JlZ2lzdGVyX29w
ZXJhbmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOwpleHRlcm4gaW50IGJpbmFyeV9mcF9vcGVy
YXRvciAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CmV4dGVybiBpbnQgbXVsdF9vcGVyYXRvciAo
cnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CmV4dGVybiBpbnQgZGl2X29wZXJhdG9yIChydHgsIGVu
dW0gbWFjaGluZV9tb2RlKTsKZXh0ZXJuIGludCBhcml0aF9vcl9sb2dpY2FsX29wZXJhdG9yIChy
dHgsIGVudW0gbWFjaGluZV9tb2RlKTsKZXh0ZXJuIGludCBwcm9tb3RhYmxlX2JpbmFyeV9vcGVy
YXRvciAocnR4LCBlbnVtIG1hY2hpbmVfbW9kZSk7CmV4dGVybiBpbnQgbWVtb3J5X2Rpc3BsYWNl
bWVudF9vcGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKZXh0ZXJuIGludCBjbXBzaV9v
cGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKZXh0ZXJuIGludCBsb25nX21lbW9yeV9v
cGVyYW5kIChydHgsIGVudW0gbWFjaGluZV9tb2RlKTsKZXh0ZXJuIGludCBhbGlnbmVkX29wZXJh
bmQgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOwpleHRlcm4gZW51bSBtYWNoaW5lX21vZGUgaXg4
Nl9jY19tb2RlIChlbnVtIHJ0eF9jb2RlLCBydHgsIHJ0eCk7CgoKZXh0ZXJuIGludCBsZWdpdGlt
YXRlX3BpY19hZGRyZXNzX2Rpc3BfcCAocnR4KTsKZXh0ZXJuIGludCBsZWdpdGltYXRlX2FkZHJl
c3NfcCAoZW51bSBtYWNoaW5lX21vZGUsIHJ0eCwgaW50KTsKZXh0ZXJuIHJ0eCBsZWdpdGltaXpl
X3BpY19hZGRyZXNzIChydHgsIHJ0eCk7CmV4dGVybiBydHggbGVnaXRpbWl6ZV9hZGRyZXNzIChy
dHgsIHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOwoKZXh0ZXJuIHZvaWQgcHJpbnRfcmVnIChydHgs
IGludCwgRklMRSopOwpleHRlcm4gdm9pZCBwcmludF9vcGVyYW5kIChGSUxFKiwgcnR4LCBpbnQp
OwpleHRlcm4gdm9pZCBwcmludF9vcGVyYW5kX2FkZHJlc3MgKEZJTEUqLCBydHgpOwoKZXh0ZXJu
IHZvaWQgc3BsaXRfZGkgKHJ0eFtdLCBpbnQsIHJ0eFtdLCBydHhbXSk7CgpleHRlcm4gY29uc3Qg
Y2hhciAqb3V0cHV0XzM4N19iaW5hcnlfb3AgKHJ0eCwgcnR4Kik7CmV4dGVybiBjb25zdCBjaGFy
ICpvdXRwdXRfZml4X3RydW5jIChydHgsIHJ0eCopOwpleHRlcm4gY29uc3QgY2hhciAqb3V0cHV0
X2ZwX2NvbXBhcmUgKHJ0eCwgcnR4KiwgaW50LCBpbnQpOwoKZXh0ZXJuIHZvaWQgaTM4Nl9kd2Fy
Zl9vdXRwdXRfYWRkcl9jb25zdCAoRklMRSosIHJ0eCk7CmV4dGVybiBydHggaTM4Nl9zaW1wbGlm
eV9kd2FyZl9hZGRyIChydHgpOwoKZXh0ZXJuIHZvaWQgaXg4Nl9leHBhbmRfbW92ZSAoZW51bSBt
YWNoaW5lX21vZGUsIHJ0eFtdKTsKZXh0ZXJuIHZvaWQgaXg4Nl9leHBhbmRfYmluYXJ5X29wZXJh
dG9yIChlbnVtIHJ0eF9jb2RlLCBlbnVtIG1hY2hpbmVfbW9kZSwgcnR4W10pCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CmV4dGVybiBpbnQgaXg4Nl9iaW5hcnlfb3BlcmF0b3Jfb2sgKGVudW0gcnR4X2NvZGUs
IGVudW0gbWFjaGluZV9tb2RlLCBydHhbXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJuIHZvaWQgaXg4Nl9leHBhbmRfdW5hcnlfb3BlcmF0
b3IgKGVudW0gcnR4X2NvZGUsIGVudW0gbWFjaGluZV9tb2RlLCBydHhbXSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CmV4dGVybiBpbnQgaXg4
Nl91bmFyeV9vcGVyYXRvcl9vayAoZW51bSBydHhfY29kZSwgZW51bSBtYWNoaW5lX21vZGUsIHJ0
eFtdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CmV4
dGVybiBpbnQgaXg4Nl9tYXRjaF9jY21vZGUgKHJ0eCwgZW51bSBtYWNoaW5lX21vZGUpOwpleHRl
cm4gcnR4IGl4ODZfZXhwYW5kX2ZwX2NvbXBhcmUgKGVudW0gcnR4X2NvZGUsIHJ0eCwgcnR4LCBy
dHgpOwpleHRlcm4gcnR4IGl4ODZfZXhwYW5kX2NvbXBhcmUgKGVudW0gcnR4X2NvZGUpOwpleHRl
cm4gaW50IGl4ODZfdXNlX2Zjb21pX2NvbXBhcmUgKGVudW0gcnR4X2NvZGUpOwpleHRlcm4gdm9p
ZCBpeDg2X2V4cGFuZF9icmFuY2ggKGVudW0gcnR4X2NvZGUsIHJ0eCk7CmV4dGVybiBpbnQgaXg4
Nl9leHBhbmRfc2V0Y2MgKGVudW0gcnR4X2NvZGUsIHJ0eCk7CmV4dGVybiBpbnQgaXg4Nl9leHBh
bmRfaW50X21vdmNjIChydHhbXSk7CmV4dGVybiBpbnQgaXg4Nl9leHBhbmRfZnBfbW92Y2MgKHJ0
eFtdKTsKZXh0ZXJuIGludCBpeDg2X3NwbGl0X2xvbmdfbW92ZSAocnR4W10pOwpleHRlcm4gdm9p
ZCBpeDg2X3NwbGl0X2FzaGxkaSAocnR4ICosIHJ0eCk7CmV4dGVybiB2b2lkIGl4ODZfc3BsaXRf
YXNocmRpIChydHggKiwgcnR4KTsKZXh0ZXJuIHZvaWQgaXg4Nl9zcGxpdF9sc2hyZGkgKHJ0eCAq
LCBydHgpOwpleHRlcm4gdm9pZCBpeDg2X2V4cGFuZF9zdHJsZW5zaV91bnJvbGxfMSAocnR4LCBy
dHgsIHJ0eCk7CmV4dGVybiBpbnQgaXg4Nl9hZGRyZXNzX2Nvc3QgKHJ0eCk7CmV4dGVybiBydHgg
aXg4Nl9maW5kX2Jhc2VfdGVybSAocnR4KTsKCmV4dGVybiBydHggYXNzaWduXzM4Nl9zdGFja19s
b2NhbCAoZW51bSBtYWNoaW5lX21vZGUsIGludCk7CmV4dGVybiBpbnQgaXg4Nl9hdHRyX2xlbmd0
aF9pbW1lZGlhdGVfZGVmYXVsdCAocnR4LCBpbnQpOwpleHRlcm4gaW50IGl4ODZfYXR0cl9sZW5n
dGhfYWRkcmVzc19kZWZhdWx0IChydHgpOwoKZXh0ZXJuIGludCBpeDg2X2lzc3VlX3JhdGUgKHZv
aWQpOwpleHRlcm4gaW50IGl4ODZfYWRqdXN0X2Nvc3QgKHJ0eCwgcnR4LCBydHgsIGludCk7CmV4
dGVybiB2b2lkIGl4ODZfc2NoZWRfaW5pdCAoRklMRSAqLCBpbnQpOwpleHRlcm4gaW50IGl4ODZf
c2NoZWRfcmVvcmRlciAoRklMRSAqLCBpbnQsIHJ0eCAqLCBpbnQsIGludCk7CmV4dGVybiBpbnQg
aXg4Nl92YXJpYWJsZV9pc3N1ZSAoRklMRSAqLCBpbnQsIHJ0eCwgaW50KTsKZXh0ZXJuIGVudW0g
bWFjaGluZV9tb2RlIGl4ODZfZnBfY29tcGFyZV9tb2RlIChlbnVtIHJ0eF9jb2RlKTsKCgpleHRl
cm4gdm9pZCBpbml0X2N1bXVsYXRpdmVfYXJncyAoQ1VNVUxBVElWRV9BUkdTICosIHRyZWUsIHJ0
eCk7CmV4dGVybiBydHggZnVuY3Rpb25fYXJnIChDVU1VTEFUSVZFX0FSR1MgKiwgZW51bSBtYWNo
aW5lX21vZGUsIHRyZWUsIGludCk7CmV4dGVybiB2b2lkIGZ1bmN0aW9uX2FyZ19hZHZhbmNlIChD
VU1VTEFUSVZFX0FSR1MgKiwgZW51bSBtYWNoaW5lX21vZGUsIHRyZWUsIGludCkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4gdm9pZCBp
eDg2X2luaXRfYnVpbHRpbnMgKHZvaWQpOwpleHRlcm4gcnR4IGl4ODZfZXhwYW5kX2J1aWx0aW4g
KHRyZWUsIHJ0eCwgcnR4LCBlbnVtIG1hY2hpbmVfbW9kZSwgaW50KTsKCgoKCgpleHRlcm4gaW50
IGl4ODZfdmFsaWRfZGVjbF9hdHRyaWJ1dGVfcCAodHJlZSwgdHJlZSwgdHJlZSwgdHJlZSk7CmV4
dGVybiBpbnQgaXg4Nl92YWxpZF90eXBlX2F0dHJpYnV0ZV9wICh0cmVlLCB0cmVlLCB0cmVlLCB0
cmVlKTsKZXh0ZXJuIGludCBpeDg2X2NvbXBfdHlwZV9hdHRyaWJ1dGVzICh0cmVlLCB0cmVlKTsK
ZXh0ZXJuIGludCBpeDg2X3JldHVybl9wb3BzX2FyZ3MgKHRyZWUsIHRyZWUsIGludCk7CgpleHRl
cm4gaW50IGl4ODZfZGF0YV9hbGlnbm1lbnQgKHRyZWUsIGludCk7CmV4dGVybiBpbnQgaXg4Nl9s
b2NhbF9hbGlnbm1lbnQgKHRyZWUsIGludCk7CmV4dGVybiBpbnQgaXg4Nl9jb25zdGFudF9hbGln
bm1lbnQgKHRyZWUsIGludCk7CiMgNCAidG1fcC5oIiAyCiMgNDQgIi4uLy4uL2djYy9nY2MvYy1k
ZWNsLmMiIDIKCgojIDEgIi4uLy4uL2djYy9nY2MvY3BwbGliLmgiIDEKIyAzMyAiLi4vLi4vZ2Nj
L2djYy9jcHBsaWIuaCIKdHlwZWRlZiBzdHJ1Y3QgY3BwX3JlYWRlciBjcHBfcmVhZGVyOwoKdHlw
ZWRlZiBzdHJ1Y3QgY3BwX2J1ZmZlciBjcHBfYnVmZmVyOwp0eXBlZGVmIHN0cnVjdCBjcHBfb3B0
aW9ucyBjcHBfb3B0aW9uczsKdHlwZWRlZiBzdHJ1Y3QgY3BwX3Rva2VuIGNwcF90b2tlbjsKdHlw
ZWRlZiBzdHJ1Y3QgY3BwX3N0cmluZyBjcHBfc3RyaW5nOwp0eXBlZGVmIHN0cnVjdCBjcHBfaGFz
aG5vZGUgY3BwX2hhc2hub2RlOwp0eXBlZGVmIHN0cnVjdCBjcHBfcG9vbCBjcHBfcG9vbDsKdHlw
ZWRlZiBzdHJ1Y3QgY3BwX21hY3JvIGNwcF9tYWNybzsKdHlwZWRlZiBzdHJ1Y3QgY3BwX2xleGVy
X3BvcyBjcHBfbGV4ZXJfcG9zOwp0eXBlZGVmIHN0cnVjdCBjcHBfbG9va2FoZWFkIGNwcF9sb29r
YWhlYWQ7CgpzdHJ1Y3QgZGlyZWN0aXZlOwpzdHJ1Y3QgYW5zd2VyOwpzdHJ1Y3QgY3BwX21hY3Jv
OwpzdHJ1Y3QgbWFjcm9fYXJnczsKc3RydWN0IGNwcF9jaHVuazsKc3RydWN0IGZpbGVfbmFtZV9t
YXBfbGlzdDsKc3RydWN0IGh0YWI7CiMgMTQ3ICIuLi8uLi9nY2MvZ2NjL2NwcGxpYi5oIgplbnVt
IGNwcF90dHlwZQp7CiAgQ1BQX0VRID0gMCwgQ1BQX05PVCwgQ1BQX0dSRUFURVIsIENQUF9MRVNT
LCBDUFBfUExVUywgQ1BQX01JTlVTLCBDUFBfTVVMVCwgQ1BQX0RJViwgQ1BQX01PRCwgQ1BQX0FO
RCwgQ1BQX09SLCBDUFBfWE9SLCBDUFBfUlNISUZULCBDUFBfTFNISUZULCBDUFBfTUlOLCBDUFBf
TUFYLCBDUFBfQ09NUEwsIENQUF9BTkRfQU5ELCBDUFBfT1JfT1IsIENQUF9RVUVSWSwgQ1BQX0NP
TE9OLCBDUFBfQ09NTUEsIENQUF9PUEVOX1BBUkVOLCBDUFBfQ0xPU0VfUEFSRU4sIENQUF9FUV9F
USwgQ1BQX05PVF9FUSwgQ1BQX0dSRUFURVJfRVEsIENQUF9MRVNTX0VRLCBDUFBfUExVU19FUSwg
Q1BQX01JTlVTX0VRLCBDUFBfTVVMVF9FUSwgQ1BQX0RJVl9FUSwgQ1BQX01PRF9FUSwgQ1BQX0FO
RF9FUSwgQ1BQX09SX0VRLCBDUFBfWE9SX0VRLCBDUFBfUlNISUZUX0VRLCBDUFBfTFNISUZUX0VR
LCBDUFBfTUlOX0VRLCBDUFBfTUFYX0VRLCBDUFBfSEFTSCwgQ1BQX1BBU1RFLCBDUFBfT1BFTl9T
UVVBUkUsIENQUF9DTE9TRV9TUVVBUkUsIENQUF9PUEVOX0JSQUNFLCBDUFBfQ0xPU0VfQlJBQ0Us
IENQUF9TRU1JQ09MT04sIENQUF9FTExJUFNJUywgQ1BQX1BMVVNfUExVUywgQ1BQX01JTlVTX01J
TlVTLCBDUFBfREVSRUYsIENQUF9ET1QsIENQUF9TQ09QRSwgQ1BQX0RFUkVGX1NUQVIsIENQUF9E
T1RfU1RBUiwgQ1BQX05BTUUsIENQUF9JTlQsIENQUF9GTE9BVCwgQ1BQX05VTUJFUiwgQ1BQX0NI
QVIsIENQUF9XQ0hBUiwgQ1BQX09USEVSLCBDUFBfU1RSSU5HLCBDUFBfV1NUUklORywgQ1BQX09T
VFJJTkcsIENQUF9IRUFERVJfTkFNRSwgQ1BQX0NPTU1FTlQsIENQUF9NQUNST19BUkcsIENQUF9F
T0YsCiAgTl9UVFlQRVMKfTsKCgoKCmVudW0gbWlfc3RhdGUge01JX0ZBSUxFRCA9IDAsIE1JX09V
VFNJREV9OwplbnVtIG1pX2luZCB7TUlfSU5EX05PTkUgPSAwLCBNSV9JTkRfTk9UfTsKCgpzdHJ1
Y3QgY3BwX3N0cmluZwp7CiAgdW5zaWduZWQgaW50IGxlbjsKICBjb25zdCB1bnNpZ25lZCBjaGFy
ICp0ZXh0Owp9OwojIDE3NiAiLi4vLi4vZ2NjL2djYy9jcHBsaWIuaCIKc3RydWN0IGNwcF90b2tl
bgp7CiAgZW51bSBjcHBfdHR5cGUgdHlwZSA6IDg7CiAgdW5zaWduZWQgY2hhciBmbGFnczsKCiAg
dW5pb24KICB7CiAgICBzdHJ1Y3QgY3BwX2hhc2hub2RlICpub2RlOwogICAgc3RydWN0IGNwcF9z
dHJpbmcgc3RyOwogICAgdW5zaWduZWQgaW50IGFyZ19ubzsKICAgIHVuc2lnbmVkIGNoYXIgYzsK
ICB9IHZhbDsKfTsKCgpzdHJ1Y3QgY3BwX2xleGVyX3Bvcwp7CiAgdW5zaWduZWQgaW50IGxpbmU7
CiAgdW5zaWduZWQgaW50IG91dHB1dF9saW5lOwogIHVuc2lnbmVkIHNob3J0IGNvbDsKfTsKCnR5
cGVkZWYgc3RydWN0IGNwcF90b2tlbl93aXRoX3BvcyBjcHBfdG9rZW5fd2l0aF9wb3M7CnN0cnVj
dCBjcHBfdG9rZW5fd2l0aF9wb3MKewogIGNwcF90b2tlbiB0b2tlbjsKICBjcHBfbGV4ZXJfcG9z
IHBvczsKfTsKCgpzdHJ1Y3QgY3BwX2xvb2thaGVhZAp7CiAgc3RydWN0IGNwcF9sb29rYWhlYWQg
Km5leHQ7CiAgY3BwX3Rva2VuX3dpdGhfcG9zICp0b2tlbnM7CiAgY3BwX2xleGVyX3BvcyBwb3M7
CiAgdW5zaWduZWQgaW50IGN1ciwgY291bnQsIGNhcDsKfTsKCgpzdHJ1Y3QgY3BwX3Bvb2wKewog
IHN0cnVjdCBjcHBfY2h1bmsgKmN1ciwgKmxvY2tlZDsKICB1bnNpZ25lZCBjaGFyICpwb3M7CiAg
dW5zaWduZWQgaW50IGFsaWduOwogIHVuc2lnbmVkIGludCBsb2NrczsKfTsKCnR5cGVkZWYgc3Ry
dWN0IHRva2xpc3QgdG9rbGlzdDsKc3RydWN0IHRva2xpc3QKewogIGNwcF90b2tlbiAqZmlyc3Q7
CiAgY3BwX3Rva2VuICpsaW1pdDsKfTsKCnR5cGVkZWYgc3RydWN0IGNwcF9jb250ZXh0IGNwcF9j
b250ZXh0OwpzdHJ1Y3QgY3BwX2NvbnRleHQKewoKICBjcHBfY29udGV4dCAqbmV4dCwgKnByZXY7
CgoKCiAgc3RydWN0IHRva2xpc3QgbGlzdDsKCgogIGNwcF9tYWNybyAqbWFjcm87Cn07CgoKCnR5
cGVkZWYgaW50IGNwcGNoYXJfdDsKCnN0cnVjdCBjcHBfYnVmZmVyCnsKICBjb25zdCB1bnNpZ25l
ZCBjaGFyICpjdXI7CiAgY29uc3QgdW5zaWduZWQgY2hhciAqcmxpbWl0OwogIGNvbnN0IHVuc2ln
bmVkIGNoYXIgKmxpbmVfYmFzZTsKICBjcHBjaGFyX3QgcmVhZF9haGVhZDsKICBjcHBjaGFyX3Qg
ZXh0cmFfY2hhcjsKCiAgc3RydWN0IGNwcF9yZWFkZXIgKnBmaWxlOwogIHN0cnVjdCBjcHBfYnVm
ZmVyICpwcmV2OwoKICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWY7CgoKICBjb25zdCBjaGFyICpu
b21pbmFsX2ZuYW1lOwoKCiAgc3RydWN0IGZpbGVfbmFtZV9saXN0ICphY3R1YWxfZGlyOwoKCgog
IHN0cnVjdCBpbmNsdWRlX2ZpbGUgKmluYzsKCgoKICBzdHJ1Y3QgaWZfc3RhY2sgKmlmX3N0YWNr
OwoKCiAgdW5zaWduZWQgaW50IGNvbF9hZGp1c3Q7CgoKICB1bnNpZ25lZCBpbnQgbGluZW5vOwoK
CgoKCiAgdW5zaWduZWQgY2hhciB3YXJuZWRfY3BsdXNwbHVzX2NvbW1lbnRzOwoKCgoKICB1bnNp
Z25lZCBjaGFyIGZyb21fc3RhZ2UzOwoKCiAgdW5zaWduZWQgY2hhciB3YXNfc2tpcHBpbmc7Cn07
CiMgMzA3ICIuLi8uLi9nY2MvZ2NjL2NwcGxpYi5oIgplbnVtIHsgZHVtcF9ub25lID0gMCwgZHVt
cF9vbmx5LCBkdW1wX25hbWVzLCBkdW1wX2RlZmluaXRpb25zIH07CgoKCnN0cnVjdCBjcHBfb3B0
aW9ucwp7CgogIGNvbnN0IGNoYXIgKmluX2ZuYW1lOwogIGNvbnN0IGNoYXIgKm91dF9mbmFtZTsK
CgogIHVuc2lnbmVkIGludCB0YWJzdG9wOwoKCiAgc3RydWN0IGNwcF9wZW5kaW5nICpwZW5kaW5n
OwoKCgogIGNvbnN0IGNoYXIgKmRlcHNfZmlsZTsKCgogIGNoYXIgKmRlcHNfdGFyZ2V0OwoKCiAg
c3RydWN0IGZpbGVfbmFtZV9saXN0ICpxdW90ZV9pbmNsdWRlOwogIHN0cnVjdCBmaWxlX25hbWVf
bGlzdCAqYnJhY2tldF9pbmNsdWRlOwoKCgogIHN0cnVjdCBmaWxlX25hbWVfbWFwX2xpc3QgKm1h
cF9saXN0OwoKCgogIGNvbnN0IGNoYXIgKmluY2x1ZGVfcHJlZml4OwogIHVuc2lnbmVkIGludCBp
bmNsdWRlX3ByZWZpeF9sZW47CgoKICBjb25zdCBjaGFyICp1c2VyX2xhYmVsX3ByZWZpeDsKCgog
IHVuc2lnbmVkIGNoYXIgdmVyYm9zZTsKCgogIHVuc2lnbmVkIGNoYXIgY3BsdXNwbHVzOwoKCiAg
dW5zaWduZWQgY2hhciBjcGx1c3BsdXNfY29tbWVudHM7CgoKICB1bnNpZ25lZCBjaGFyIG9iamM7
CgoKCgoKICB1bnNpZ25lZCBjaGFyIGxhbmdfYXNtOwoKCiAgdW5zaWduZWQgY2hhciBkaXNjYXJk
X2NvbW1lbnRzOwoKCiAgdW5zaWduZWQgY2hhciB0cmlncmFwaHM7CgoKICB1bnNpZ25lZCBjaGFy
IGRpZ3JhcGhzOwoKCgoKICB1bnNpZ25lZCBjaGFyIHByaW50X2RlcHM7CgoKCiAgdW5zaWduZWQg
Y2hhciBwcmludF9kZXBzX21pc3NpbmdfZmlsZXM7CgoKICB1bnNpZ25lZCBjaGFyIHByaW50X2Rl
cHNfYXBwZW5kOwoKCiAgdW5zaWduZWQgY2hhciBwcmludF9pbmNsdWRlX25hbWVzOwoKCiAgdW5z
aWduZWQgY2hhciBwZWRhbnRpY19lcnJvcnM7CgoKICB1bnNpZ25lZCBjaGFyIGluaGliaXRfd2Fy
bmluZ3M7CgoKICB1bnNpZ25lZCBjaGFyIHdhcm5fc3lzdGVtX2hlYWRlcnM7CgoKCiAgdW5zaWdu
ZWQgY2hhciBpbmhpYml0X2Vycm9yczsKCgogIHVuc2lnbmVkIGNoYXIgd2Fybl9jb21tZW50czsK
CgogIHVuc2lnbmVkIGNoYXIgd2Fybl90cmlncmFwaHM7CgoKICB1bnNpZ25lZCBjaGFyIHdhcm5f
aW1wb3J0OwoKCgogIHVuc2lnbmVkIGNoYXIgd2Fybl90cmFkaXRpb25hbDsKCgoKICB1bnNpZ25l
ZCBjaGFyIHdhcm5fcGFzdGU7CgoKICB1bnNpZ25lZCBjaGFyIHdhcm5pbmdzX2FyZV9lcnJvcnM7
CgoKCiAgdW5zaWduZWQgY2hhciBub19vdXRwdXQ7CgoKCiAgdW5zaWduZWQgY2hhciByZW1hcDsK
CgogIHVuc2lnbmVkIGNoYXIgbm9fbGluZV9jb21tYW5kczsKCgoKICB1bnNpZ25lZCBjaGFyIGln
bm9yZV9zcmNkaXI7CgoKICB1bnNpZ25lZCBjaGFyIGRvbGxhcnNfaW5faWRlbnQ7CgoKICB1bnNp
Z25lZCBjaGFyIHdhcm5fdW5kZWY7CgoKICB1bnNpZ25lZCBjaGFyIGM4OTsKCgogIHVuc2lnbmVk
IGNoYXIgYzk5OwoKCiAgdW5zaWduZWQgY2hhciBwZWRhbnRpYzsKCgoKICB1bnNpZ25lZCBjaGFy
IHByZXByb2Nlc3NlZDsKCgogIHVuc2lnbmVkIGNoYXIgbm9fc3RhbmRhcmRfaW5jbHVkZXM7CgoK
ICB1bnNpZ25lZCBjaGFyIG5vX3N0YW5kYXJkX2NwbHVzcGx1c19pbmNsdWRlczsKCgogIHVuc2ln
bmVkIGNoYXIgZHVtcF9tYWNyb3M7CgoKCgoKCgogIHVuc2lnbmVkIGNoYXIgZGVidWdfb3V0cHV0
OwoKCiAgdW5zaWduZWQgY2hhciBkdW1wX2luY2x1ZGVzOwoKCiAgdW5zaWduZWQgY2hhciBzaG93
X2NvbHVtbjsKfTsKCnN0cnVjdCBsZXhlcl9zdGF0ZQp7CgogIHVuc2lnbmVkIGNoYXIgaW5fZGly
ZWN0aXZlOwoKCiAgdW5zaWduZWQgY2hhciBhbmdsZWRfaGVhZGVyczsKCgoKICB1bnNpZ25lZCBj
aGFyIHNhdmVfY29tbWVudHM7CgoKICB1bnNpZ25lZCBjaGFyIG5leHRfYm9sOwoKCiAgdW5zaWdu
ZWQgY2hhciBsZXhpbmdfY29tbWVudDsKCgogIHVuc2lnbmVkIGNoYXIgdmFfYXJnc19vazsKCgog
IHVuc2lnbmVkIGNoYXIgcG9pc29uZWRfb2s7CgoKICB1bnNpZ25lZCBjaGFyIHByZXZlbnRfZXhw
YW5zaW9uOwoKCiAgdW5zaWduZWQgY2hhciBwYXJzaW5nX2FyZ3M7Cn07CgoKc3RydWN0IHNwZWNf
bm9kZXMKewogIGNwcF9oYXNobm9kZSAqbl9MOwogIGNwcF9oYXNobm9kZSAqbl9kZWZpbmVkOwog
IGNwcF9oYXNobm9kZSAqbl9fUHJhZ21hOwogIGNwcF9oYXNobm9kZSAqbl9fU1RSSUNUX0FOU0lf
XzsKICBjcHBfaGFzaG5vZGUgKm5fX0NIQVJfVU5TSUdORURfXzsKICBjcHBfaGFzaG5vZGUgKm5f
X1ZBX0FSR1NfXzsKfTsKCgoKCgpzdHJ1Y3QgY3BwX3JlYWRlcgp7CgogIGNwcF9idWZmZXIgKmJ1
ZmZlcjsKCgogIHN0cnVjdCBsZXhlcl9zdGF0ZSBzdGF0ZTsKCgoKICBjcHBfbGV4ZXJfcG9zIGxl
eGVyX3BvczsKICBjcHBfbGV4ZXJfcG9zIG1hY3JvX3BvczsKICBjcHBfbGV4ZXJfcG9zIGRpcmVj
dGl2ZV9wb3M7CgoKICBjcHBfcG9vbCBpZGVudF9wb29sOwoKICBjcHBfcG9vbCB0ZW1wX3N0cmlu
Z19wb29sOwogIGNwcF9wb29sIG1hY3JvX3Bvb2w7CiAgY3BwX3Bvb2wgYXJndW1lbnRfcG9vbDsK
ICBjcHBfcG9vbCogc3RyaW5nX3Bvb2w7CgoKICBzdHJ1Y3QgY3BwX2NvbnRleHQgYmFzZV9jb250
ZXh0OwogIHN0cnVjdCBjcHBfY29udGV4dCAqY29udGV4dDsKCgogIGNvbnN0IHN0cnVjdCBkaXJl
Y3RpdmUgKmRpcmVjdGl2ZTsKCgogIGVudW0gbWlfc3RhdGUgbWlfc3RhdGU7CiAgZW51bSBtaV9p
bmQgbWlfaWZfbm90X2RlZmluZWQ7CiAgdW5zaWduZWQgaW50IG1pX2xleGVkOwogIGNvbnN0IGNw
cF9oYXNobm9kZSAqbWlfY21hY3JvOwogIGNvbnN0IGNwcF9oYXNobm9kZSAqbWlfaW5kX2NtYWNy
bzsKCgogIHN0cnVjdCBjcHBfbG9va2FoZWFkICpsYV9yZWFkOwogIHN0cnVjdCBjcHBfbG9va2Fo
ZWFkICpsYV93cml0ZTsKICBzdHJ1Y3QgY3BwX2xvb2thaGVhZCAqbGFfdW51c2VkOwogIHN0cnVj
dCBjcHBfbG9va2FoZWFkICpsYV9zYXZlZDsKCgogIHVuc2lnbmVkIGludCBlcnJvcnM7CgoKCiAg
Y3BwX2xleGVyX3BvcyBtbHN0cmluZ19wb3M7CgoKICB1bnNpZ25lZCBjaGFyICptYWNyb19idWZm
ZXI7CiAgdW5zaWduZWQgaW50IG1hY3JvX2J1ZmZlcl9sZW47CgoKICB1bnNpZ25lZCBpbnQgc3lz
dGVtX2luY2x1ZGVfZGVwdGg7CgoKICB1bnNpZ25lZCBpbnQgYnVmZmVyX3N0YWNrX2RlcHRoOwoK
CiAgdW5zaWduZWQgaW50IGluY2x1ZGVfZGVwdGg7CgoKICBzdHJ1Y3QgaHRhYiAqaGFzaHRhYjsK
CgogIHN0cnVjdCBzcGxheV90cmVlX3MgKmFsbF9pbmNsdWRlX2ZpbGVzOwoKCgogIHN0cnVjdCBm
aWxlX25hbWVfbGlzdCAqYWN0dWFsX2RpcnM7CgoKCiAgdW5zaWduZWQgaW50IG1heF9pbmNsdWRl
X2xlbjsKCgogIGNwcF90b2tlbiBkYXRlOwogIGNwcF90b2tlbiB0aW1lOwoKCiAgc3RydWN0IGRl
cHMgKmRlcHM7CgoKCiAgc3RydWN0IG9ic3RhY2sgKmhhc2hfb2I7CgoKCiAgc3RydWN0IG9ic3Rh
Y2sgKmJ1ZmZlcl9vYjsKCgoKICBzdHJ1Y3QgcHJhZ21hX2VudHJ5ICpwcmFnbWFzOwoKCiAgc3Ry
dWN0IHsKICAgIHZvaWQgKCplbnRlcl9maWxlKSAoY3BwX3JlYWRlciAqKTsKICAgIHZvaWQgKCps
ZWF2ZV9maWxlKSAoY3BwX3JlYWRlciAqKTsKICAgIHZvaWQgKCpyZW5hbWVfZmlsZSkgKGNwcF9y
ZWFkZXIgKik7CiAgICB2b2lkICgqaW5jbHVkZSkgKGNwcF9yZWFkZXIgKiwgY29uc3QgdW5zaWdu
ZWQgY2hhciAqLCBjb25zdCBjcHBfdG9rZW4gKikKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwogICAgdm9pZCAoKmRlZmluZSkgKGNwcF9yZWFkZXIgKiwg
Y3BwX2hhc2hub2RlICopOwogICAgdm9pZCAoKnVuZGVmKSAoY3BwX3JlYWRlciAqLCBjcHBfaGFz
aG5vZGUgKik7CiAgICB2b2lkICgqcG9pc29uKSAoY3BwX3JlYWRlciAqKTsKICAgIHZvaWQgKCpp
ZGVudCkgKGNwcF9yZWFkZXIgKiwgY29uc3QgY3BwX3N0cmluZyAqKTsKICAgIHZvaWQgKCpkZWZf
cHJhZ21hKSAoY3BwX3JlYWRlciAqKTsKICB9IGNiOwoKCiAgc3RydWN0IGNwcF9vcHRpb25zIG9w
dHM7CgoKCiAgc3RydWN0IHNwZWNfbm9kZXMgc3BlY19ub2RlczsKCgoKICB1bnNpZ25lZCBjaGFy
IGlucHV0X3N0YWNrX2xpc3RpbmdfY3VycmVudDsKCgogIHVuc2lnbmVkIGNoYXIgaW1wb3J0X3dh
cm5pbmc7CgoKCiAgdW5zaWduZWQgY2hhciBkb25lX2luaXRpYWxpemluZzsKCgogIHVuc2lnbmVk
IGNoYXIgc2tpcHBpbmc7Cn07CiMgNjY3ICIuLi8uLi9nY2MvZ2NjL2NwcGxpYi5oIgpleHRlcm4g
Y29uc3QgY2hhciAqcHJvZ25hbWU7CiMgNjg3ICIuLi8uLi9nY2MvZ2NjL2NwcGxpYi5oIgplbnVt
IG5vZGVfdHlwZQp7CiAgTlRfVk9JRCA9IDAsCiAgTlRfTUFDUk8sCiAgTlRfQVNTRVJUSU9OCn07
CgoKZW51bSBidWlsdGluX3R5cGUKewogIEJUX1NQRUNMSU5FID0gMCwKICBCVF9EQVRFLAogIEJU
X0ZJTEUsCiAgQlRfQkFTRV9GSUxFLAogIEJUX0lOQ0xVREVfTEVWRUwsCiAgQlRfVElNRSwKICBC
VF9TVERDCn07CgoKCgoKdW5pb24gdHJlZV9ub2RlOwoKc3RydWN0IGNwcF9oYXNobm9kZQp7CiAg
Y29uc3QgdW5zaWduZWQgY2hhciAqbmFtZTsKICB1bnNpZ25lZCBpbnQgaGFzaDsKICB1bnNpZ25l
ZCBzaG9ydCBsZW5ndGg7CiAgdW5zaWduZWQgc2hvcnQgYXJnX2luZGV4OwogIHVuc2lnbmVkIGNo
YXIgZGlyZWN0aXZlX2luZGV4OwogIGVudW0gbm9kZV90eXBlIHR5cGUgOiA4OwogIHVuc2lnbmVk
IGNoYXIgZmxhZ3M7CgogIHVuaW9uCiAgewogICAgY3BwX21hY3JvICptYWNybzsKICAgIHN0cnVj
dCBhbnN3ZXIgKmFuc3dlcnM7CiAgICBlbnVtIGNwcF90dHlwZSBvcGVyYXRvcjsKICAgIGVudW0g
YnVpbHRpbl90eXBlIGJ1aWx0aW47CiAgfSB2YWx1ZTsKCiAgdW5pb24gdHJlZV9ub2RlICpmZV92
YWx1ZTsKfTsKCmV4dGVybiB1bnNpZ25lZCBpbnQgY3BwX3Rva2VuX2xlbiAoY29uc3QgY3BwX3Rv
a2VuICopOwpleHRlcm4gdW5zaWduZWQgY2hhciAqY3BwX3Rva2VuX2FzX3RleHQgKGNwcF9yZWFk
ZXIgKiwgY29uc3QgY3BwX3Rva2VuICopOwpleHRlcm4gdW5zaWduZWQgY2hhciAqY3BwX3NwZWxs
X3Rva2VuIChjcHBfcmVhZGVyICosIGNvbnN0IGNwcF90b2tlbiAqLCB1bnNpZ25lZCBjaGFyICop
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CmV4dGVybiB2b2lkIGNwcF9pbml0ICh2b2lkKTsKZXh0ZXJuIGludCBjcHBfaGFu
ZGxlX29wdGlvbnMgKGNwcF9yZWFkZXIgKiwgaW50LCBjaGFyICoqKTsKZXh0ZXJuIGludCBjcHBf
aGFuZGxlX29wdGlvbiAoY3BwX3JlYWRlciAqLCBpbnQsIGNoYXIgKiopOwpleHRlcm4gdm9pZCBj
cHBfcmVhZGVyX2luaXQgKGNwcF9yZWFkZXIgKik7CgpleHRlcm4gdm9pZCBjcHBfcmVnaXN0ZXJf
cHJhZ21hIChjcHBfcmVhZGVyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB2b2lkICgq
KSAoY3BwX3JlYWRlciAqKSkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJuIHZvaWQgY3BwX3Jl
Z2lzdGVyX3ByYWdtYV9zcGFjZSAoY3BwX3JlYWRlciAqLCBjb25zdCBjaGFyICopOwoKZXh0ZXJu
IGludCBjcHBfc3RhcnRfcmVhZCAoY3BwX3JlYWRlciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4g
dm9pZCBjcHBfZmluaXNoIChjcHBfcmVhZGVyICopOwpleHRlcm4gdm9pZCBjcHBfY2xlYW51cCAo
Y3BwX3JlYWRlciAqKTsKZXh0ZXJuIGludCBjcHBfYXZvaWRfcGFzdGUgKGNwcF9yZWFkZXIgKiwg
Y29uc3QgY3BwX3Rva2VuICosIGNvbnN0IGNwcF90b2tlbiAqKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4gZW51bSBjcHBfdHR5
cGUgY3BwX2Nhbl9wYXN0ZSAoY3BwX3JlYWRlciAqLCBjb25zdCBjcHBfdG9rZW4gKiwgY29uc3Qg
Y3BwX3Rva2VuICosIGludCAqKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJuIHZvaWQgY3BwX2dldF90
b2tlbiAoY3BwX3JlYWRlciAqLCBjcHBfdG9rZW4gKik7CmV4dGVybiBjb25zdCBjcHBfbGV4ZXJf
cG9zICpjcHBfZ2V0X2xpbmUgKGNwcF9yZWFkZXIgKik7CmV4dGVybiBjb25zdCB1bnNpZ25lZCBj
aGFyICpjcHBfbWFjcm9fZGVmaW5pdGlvbiAoY3BwX3JlYWRlciAqLCBjb25zdCBjcHBfaGFzaG5v
ZGUgKikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKZXh0ZXJuIHZvaWQgY3BwX2RlZmluZSAoY3BwX3JlYWRl
ciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gdm9pZCBjcHBfYXNzZXJ0IChjcHBfcmVhZGVyICos
IGNvbnN0IGNoYXIgKik7CmV4dGVybiB2b2lkIGNwcF91bmRlZiAoY3BwX3JlYWRlciAqLCBjb25z
dCBjaGFyICopOwpleHRlcm4gdm9pZCBjcHBfdW5hc3NlcnQgKGNwcF9yZWFkZXIgKiwgY29uc3Qg
Y2hhciAqKTsKCmV4dGVybiBjcHBfYnVmZmVyICpjcHBfcHVzaF9idWZmZXIgKGNwcF9yZWFkZXIg
KiwgY29uc3QgdW5zaWduZWQgY2hhciAqLCBsb25nKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwpleHRlcm4g
Y3BwX2J1ZmZlciAqY3BwX3BvcF9idWZmZXIgKGNwcF9yZWFkZXIgKik7CmV4dGVybiBpbnQgY3Bw
X2RlZmluZWQgKGNwcF9yZWFkZXIgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLCBpbnQpOwoKCgoK
CgoKZXh0ZXJuIHZvaWQgY3BwX2ljZSAoY3BwX3JlYWRlciAqLCBjb25zdCBjaGFyICptc2dpZCwg
Li4uKQogIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwpl
eHRlcm4gdm9pZCBjcHBfZmF0YWwgKGNwcF9yZWFkZXIgKiwgY29uc3QgY2hhciAqbXNnaWQsIC4u
LikKICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0
ZXJuIHZvaWQgY3BwX2Vycm9yIChjcHBfcmVhZGVyICosIGNvbnN0IGNoYXIgKm1zZ2lkLCAuLi4p
CiAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CmV4dGVy
biB2b2lkIGNwcF93YXJuaW5nIChjcHBfcmVhZGVyICosIGNvbnN0IGNoYXIgKm1zZ2lkLCAuLi4p
CiAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CmV4dGVy
biB2b2lkIGNwcF9wZWR3YXJuIChjcHBfcmVhZGVyICosIGNvbnN0IGNoYXIgKm1zZ2lkLCAuLi4p
CiAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CmV4dGVy
biB2b2lkIGNwcF9ub3RpY2UgKGNwcF9yZWFkZXIgKiwgY29uc3QgY2hhciAqbXNnaWQsIC4uLikK
ICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJu
IHZvaWQgY3BwX2Vycm9yX3dpdGhfbGluZSAoY3BwX3JlYWRlciAqLCBpbnQsIGludCwgY29uc3Qg
Y2hhciAqbXNnaWQsIC4uLikKICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZf
XywgNCwgNSkpKTsKZXh0ZXJuIHZvaWQgY3BwX3dhcm5pbmdfd2l0aF9saW5lIChjcHBfcmVhZGVy
ICosIGludCwgaW50LCBjb25zdCBjaGFyICptc2dpZCwgLi4uKQogIF9fYXR0cmlidXRlX18gKChf
X2Zvcm1hdF9fIChfX3ByaW50Zl9fLCA0LCA1KSkpOwpleHRlcm4gdm9pZCBjcHBfcGVkd2Fybl93
aXRoX2xpbmUgKGNwcF9yZWFkZXIgKiwgaW50LCBpbnQsIGNvbnN0IGNoYXIgKm1zZ2lkLCAuLi4p
CiAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDQsIDUpKSk7CmV4dGVy
biB2b2lkIGNwcF9wZWR3YXJuX3dpdGhfZmlsZV9hbmRfbGluZSAoY3BwX3JlYWRlciAqLCBjb25z
dCBjaGFyICosIGludCwgaW50LCBjb25zdCBjaGFyICptc2dpZCwgLi4uKQogIF9fYXR0cmlidXRl
X18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCA1LCA2KSkpOwpleHRlcm4gdm9pZCBjcHBfZXJy
b3JfZnJvbV9lcnJubyAoY3BwX3JlYWRlciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gdm9pZCBj
cHBfbm90aWNlX2Zyb21fZXJybm8gKGNwcF9yZWFkZXIgKiwgY29uc3QgY2hhciAqKTsKCgpleHRl
cm4gaW50IGNwcF9pZGVxIChjb25zdCBjcHBfdG9rZW4gKiwgY29uc3QgY2hhciAqKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CmV4dGVybiB2b2lkIGNwcF9vdXRwdXRfbGluZSAoY3BwX3JlYWRlciAqLCBGSUxFICopOwpleHRl
cm4gdm9pZCBjcHBfb3V0cHV0X3Rva2VuIChjb25zdCBjcHBfdG9rZW4gKiwgRklMRSAqKTsKZXh0
ZXJuIGNvbnN0IGNoYXIgKmNwcF90eXBlMm5hbWUgKGVudW0gY3BwX3R0eXBlKTsKCgpleHRlcm4g
Y3BwX2hhc2hub2RlICpjcHBfbG9va3VwIChjcHBfcmVhZGVyICosIGNvbnN0IHVuc2lnbmVkIGNo
YXIgKiwgc2l6ZV90KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKZXh0ZXJuIHZvaWQgY3BwX2Zv
cmFsbF9pZGVudGlmaWVycyAoY3BwX3JlYWRlciAqLCBpbnQgKCopIChjcHBfcmVhZGVyICosIGNw
cF9oYXNobm9kZSAqLCB2b2lkICopLCB2b2lkICopCgoKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgpleHRlcm4gdm9pZCBjcHBfc2Nh
bl9idWZmZXJfbm9vdXRwdXQgKGNwcF9yZWFkZXIgKik7CmV4dGVybiB2b2lkIGNwcF9zdGFydF9s
b29rYWhlYWQgKGNwcF9yZWFkZXIgKik7CmV4dGVybiB2b2lkIGNwcF9zdG9wX2xvb2thaGVhZCAo
Y3BwX3JlYWRlciAqLCBpbnQpOwoKCmV4dGVybiBpbnQgY3BwX2luY2x1ZGVkIChjcHBfcmVhZGVy
ICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgY3BwX3JlYWRfZmlsZSAoY3BwX3JlYWRlciAq
LCBjb25zdCBjaGFyICopOwpleHRlcm4gdm9pZCBjcHBfbWFrZV9zeXN0ZW1faGVhZGVyIChjcHBf
cmVhZGVyICosIGNwcF9idWZmZXIgKiwgaW50KTsKZXh0ZXJuIGNvbnN0IGNoYXIgKmNwcF9zeXNo
ZHJfZmxhZ3MgKGNwcF9yZWFkZXIgKiwgY3BwX2J1ZmZlciAqKTsKCgoKdHlwZWRlZiB1bnNpZ25l
ZCBjaGFyIFVfQ0hBUjsKCgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgdXN0cmNtcCAoY29uc3QgVV9D
SEFSICosIGNvbnN0IFVfQ0hBUiAqKTsKc3RhdGljIF9faW5saW5lX18gaW50IHVzdHJuY21wIChj
b25zdCBVX0NIQVIgKiwgY29uc3QgVV9DSEFSICosIHNpemVfdCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKc3RhdGljIF9faW5saW5lX18gc2l6ZV90
IHVzdHJsZW4gKGNvbnN0IFVfQ0hBUiAqKTsKc3RhdGljIF9faW5saW5lX18gVV9DSEFSICp1eHN0
cmR1cCAoY29uc3QgVV9DSEFSICopOwpzdGF0aWMgX19pbmxpbmVfXyBVX0NIQVIgKnVzdHJjaHIg
KGNvbnN0IFVfQ0hBUiAqLCBpbnQpOwpzdGF0aWMgX19pbmxpbmVfXyBpbnQgdWZwdXRzIChjb25z
dCBVX0NIQVIgKiwgRklMRSAqKTsKCnN0YXRpYyBfX2lubGluZV9fIGludAp1c3RyY21wIChzMSwg
czIpCiAgICAgY29uc3QgVV9DSEFSICpzMSwgKnMyOwp7CiAgcmV0dXJuIHN0cmNtcCAoKGNvbnN0
IGNoYXIgKilzMSwgKGNvbnN0IGNoYXIgKilzMik7Cn0KCnN0YXRpYyBfX2lubGluZV9fIGludAp1
c3RybmNtcCAoczEsIHMyLCBuKQogICAgIGNvbnN0IFVfQ0hBUiAqczEsICpzMjsKICAgICBzaXpl
X3QgbjsKewogIHJldHVybiBzdHJuY21wICgoY29uc3QgY2hhciAqKXMxLCAoY29uc3QgY2hhciAq
KXMyLCBuKTsKfQoKc3RhdGljIF9faW5saW5lX18gc2l6ZV90CnVzdHJsZW4gKHMxKQogICAgIGNv
bnN0IFVfQ0hBUiAqczE7CnsKICByZXR1cm4gc3RybGVuICgoY29uc3QgY2hhciAqKXMxKTsKfQoK
c3RhdGljIF9faW5saW5lX18gVV9DSEFSICoKdXhzdHJkdXAgKHMxKQogICAgIGNvbnN0IFVfQ0hB
UiAqczE7CnsKICByZXR1cm4gKFVfQ0hBUiAqKSB4c3RyZHVwICgoY29uc3QgY2hhciAqKXMxKTsK
fQoKc3RhdGljIF9faW5saW5lX18gVV9DSEFSICoKdXN0cmNociAoczEsIGMpCiAgICAgY29uc3Qg
VV9DSEFSICpzMTsKICAgICBpbnQgYzsKewogIHJldHVybiAoVV9DSEFSICopIHN0cmNociAoKGNv
bnN0IGNoYXIgKilzMSwgYyk7Cn0KCnN0YXRpYyBfX2lubGluZV9fIGludAp1ZnB1dHMgKHMsIGYp
CiAgICAgY29uc3QgVV9DSEFSICpzOwogICAgIEZJTEUgKmY7CnsKICByZXR1cm4gZnB1dHMgKChj
b25zdCBjaGFyICopcywgZik7Cn0KIyA0NyAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIgMgpleHRl
cm4gY3BwX3JlYWRlciBwYXJzZV9pbjsKCgoKZW51bSBkZWNsX2NvbnRleHQKeyBOT1JNQUwsCiAg
RlVOQ0RFRiwKICBQQVJNLAogIEZJRUxELAogIEJJVEZJRUxELAogIFRZUEVOQU1FfTsKIyAxMDAg
Ii4uLy4uL2djYy9nY2MvYy1kZWNsLmMiCnRyZWUgcGVuZGluZ19pbnZhbGlkX3hyZWY7Cgpjb25z
dCBjaGFyICpwZW5kaW5nX2ludmFsaWRfeHJlZl9maWxlOwppbnQgcGVuZGluZ19pbnZhbGlkX3hy
ZWZfbGluZTsKCgoKCgoKCnN0YXRpYyB0cmVlIGVudW1fbmV4dF92YWx1ZTsKCgoKc3RhdGljIGlu
dCBlbnVtX292ZXJmbG93OwoKCgoKc3RhdGljIHRyZWUgbGFzdF9mdW5jdGlvbl9wYXJtczsKCgoK
CnN0YXRpYyB0cmVlIGxhc3RfZnVuY3Rpb25fcGFybV90YWdzOwoKCgoKCnN0YXRpYyB0cmVlIGN1
cnJlbnRfZnVuY3Rpb25fcGFybXM7CgoKc3RhdGljIHRyZWUgY3VycmVudF9mdW5jdGlvbl9wYXJt
X3RhZ3M7CgoKCnN0YXRpYyBjb25zdCBjaGFyICpjdXJyZW50X2Z1bmN0aW9uX3Byb3RvdHlwZV9m
aWxlOwpzdGF0aWMgaW50IGN1cnJlbnRfZnVuY3Rpb25fcHJvdG90eXBlX2xpbmU7CgoKCnN0YXRp
YyBzdHJ1Y3Qgc3RtdF90cmVlX3MgY19zdG10X3RyZWU7CgoKCnN0YXRpYyB0cmVlIGNfc2NvcGVf
c3RtdF9zdGFjazsKCgoKCnN0YXRpYyBpbnQgY19mdW5jdGlvbl9uYW1lX2RlY2xhcmVkX3A7CgoK
CgoKc3RhdGljIHRyZWUgbmFtZWRfbGFiZWxzOwoKCgpzdGF0aWMgdHJlZSBzaGFkb3dlZF9sYWJl
bHM7CgoKCgpzdGF0aWMgaW50IGNfZnVuY3Rpb25fdmFyYXJnczsKCgoKCmludCBjdXJyZW50X2Z1
bmN0aW9uX3JldHVybnNfdmFsdWU7CgoKCgppbnQgY3VycmVudF9mdW5jdGlvbl9yZXR1cm5zX251
bGw7CgoKCgpzdGF0aWMgaW50IHdhcm5fYWJvdXRfcmV0dXJuX3R5cGU7CgoKCnN0YXRpYyBpbnQg
Y3VycmVudF9leHRlcm5faW5saW5lOwojIDIwNCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIKc3Ry
dWN0IGJpbmRpbmdfbGV2ZWwKICB7CgoKCiAgICB0cmVlIG5hbWVzOwoKCgoKCgoKICAgIHRyZWUg
dGFnczsKCgoKCgogICAgdHJlZSBzaGFkb3dlZDsKCgoKCiAgICB0cmVlIGJsb2NrczsKCgoKICAg
IHRyZWUgdGhpc19ibG9jazsKCgogICAgc3RydWN0IGJpbmRpbmdfbGV2ZWwgKmxldmVsX2NoYWlu
OwoKCiAgICBjaGFyIHBhcm1fZmxhZzsKCgogICAgY2hhciB0YWdfdHJhbnNwYXJlbnQ7CgoKCgoK
ICAgIGNoYXIgc3ViYmxvY2tzX3RhZ190cmFuc3BhcmVudDsKCgogICAgY2hhciBrZWVwOwoKCiAg
ICBjaGFyIGtlZXBfaWZfc3ViYmxvY2tzOwoKCgogICAgaW50IG5faW5jb21wbGV0ZTsKCgoKCiAg
ICB0cmVlIHBhcm1fb3JkZXI7CiAgfTsKCgoKCgpzdGF0aWMgc3RydWN0IGJpbmRpbmdfbGV2ZWwg
KmN1cnJlbnRfYmluZGluZ19sZXZlbDsKCgoKc3RhdGljIHN0cnVjdCBiaW5kaW5nX2xldmVsICpm
cmVlX2JpbmRpbmdfbGV2ZWw7CgoKCgoKc3RhdGljIHN0cnVjdCBiaW5kaW5nX2xldmVsICpnbG9i
YWxfYmluZGluZ19sZXZlbDsKCgoKc3RhdGljIHN0cnVjdCBiaW5kaW5nX2xldmVsIGNsZWFyX2Jp
bmRpbmdfbGV2ZWwKICA9IHsoKHZvaWQgKikwKSwgKCh2b2lkICopMCksICgodm9pZCAqKTApLCAo
KHZvaWQgKikwKSwgKCh2b2lkICopMCksIChzdHJ1Y3QgYmluZGluZ19sZXZlbCAqKSAoKHZvaWQg
KikwKSwgMCwgMCwgMCwgMCwgMCwgMCwKICAgICAoKHZvaWQgKikwKX07CgoKCnN0YXRpYyBpbnQg
a2VlcF9uZXh0X2xldmVsX2ZsYWc7CgoKCgpzdGF0aWMgaW50IGtlZXBfbmV4dF9pZl9zdWJibG9j
a3M7CgoKCgoKCgpzdGF0aWMgc3RydWN0IGJpbmRpbmdfbGV2ZWwgKmxhYmVsX2xldmVsX2NoYWlu
OwoKCgp0cmVlIHN0YXRpY19jdG9ycywgc3RhdGljX2R0b3JzOwoKCgpzdGF0aWMgc3RydWN0IGJp
bmRpbmdfbGV2ZWwgKiBtYWtlX2JpbmRpbmdfbGV2ZWwgKHZvaWQpOwpzdGF0aWMgdm9pZCBtYXJr
X2JpbmRpbmdfbGV2ZWwgKHZvaWQgKik7CnN0YXRpYyB2b2lkIGNsZWFyX2xpbWJvX3ZhbHVlcyAo
dHJlZSk7CnN0YXRpYyBpbnQgZHVwbGljYXRlX2RlY2xzICh0cmVlLCB0cmVlLCBpbnQpOwpzdGF0
aWMgaW50IHJlZGVjbGFyYXRpb25fZXJyb3JfbWVzc2FnZSAodHJlZSwgdHJlZSk7CnN0YXRpYyB2
b2lkIHN0b3JlZGVjbHMgKHRyZWUpOwpzdGF0aWMgdm9pZCBzdG9yZXRhZ3MgKHRyZWUpOwpzdGF0
aWMgdHJlZSBsb29rdXBfdGFnIChlbnVtIHRyZWVfY29kZSwgdHJlZSwgc3RydWN0IGJpbmRpbmdf
bGV2ZWwgKiwgaW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CnN0YXRpYyB0cmVlIGxvb2t1cF90
YWdfcmV2ZXJzZSAodHJlZSk7CnN0YXRpYyB0cmVlIGdyb2tkZWNsYXJhdG9yICh0cmVlLCB0cmVl
LCBlbnVtIGRlY2xfY29udGV4dCwgaW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CnN0YXRpYyB0cmVlIGdyb2twYXJtcyAodHJlZSwgaW50
KTsKc3RhdGljIHZvaWQgbGF5b3V0X2FycmF5X3R5cGUgKHRyZWUpOwpzdGF0aWMgdHJlZSBjX21h
a2VfZm5hbWVfZGVjbCAodHJlZSwgY29uc3QgY2hhciAqLCBpbnQpOwpzdGF0aWMgdm9pZCBjX2V4
cGFuZF9ib2R5ICh0cmVlLCBpbnQpOwoKCgoKCgppbnQgZmxhZ19jb25kX21pc21hdGNoOwoKCgpp
bnQgZmxhZ19zaG9ydF9kb3VibGU7CgoKCmludCBmbGFnX3Nob3J0X3djaGFyOwoKCgppbnQgZmxh
Z19ub19hc207CgoKCmludCBmbGFnX3RyYWRpdGlvbmFsOwoKCgppbnQgZmxhZ19pc29jOTQgPSAw
OwoKCgppbnQgZmxhZ19pc29jOTkgPSAwOwoKCgppbnQgZmxhZ19kaWdyYXBocyA9IDE7CgoKCmlu
dCBmbGFnX2hvc3RlZCA9IDE7CgoKCgppbnQgZmxhZ19ub25pc29fZGVmYXVsdF9mb3JtYXRfYXR0
cmlidXRlcyA9IDE7CgoKCmludCBmbGFnX2FsbG93X3NpbmdsZV9wcmVjaXNpb24gPSAwOwoKCgpp
bnQgZmxhZ19zaWduZWRfYml0ZmllbGRzID0gMTsKaW50IGV4cGxpY2l0X2ZsYWdfc2lnbmVkX2Jp
dGZpZWxkcyA9IDA7CgoKCmludCB3YXJuX2ltcGxpY2l0X2ludDsKCgoKaW50IHdhcm5fbG9uZ19s
b25nID0gMTsKCgoKCmludCBtZXNnX2ltcGxpY2l0X2Z1bmN0aW9uX2RlY2xhcmF0aW9uID0gLTE7
CgoKCgoKaW50IGZsYWdfY29uc3Rfc3RyaW5nczsKCgoKCmludCB3YXJuX2Nhc3RfcXVhbDsKCgoK
CgppbnQgd2Fybl9iYWRfZnVuY3Rpb25fY2FzdDsKCgoKaW50IHdhcm5fbWlzc2luZ19mb3JtYXRf
YXR0cmlidXRlOwoKCgppbnQgd2Fybl90cmFkaXRpb25hbDsKCgoKCmludCB3YXJuX3BvaW50ZXJf
YXJpdGg7CgoKCgppbnQgd2Fybl9zdHJpY3RfcHJvdG90eXBlczsKCgoKCmludCB3YXJuX21pc3Np
bmdfcHJvdG90eXBlczsKCgoKCmludCB3YXJuX21pc3NpbmdfZGVjbGFyYXRpb25zOwoKCgoKaW50
IHdhcm5fcmVkdW5kYW50X2RlY2xzID0gMDsKCgoKCgoKCmludCB3YXJuX25lc3RlZF9leHRlcm5z
ID0gMDsKCgoKaW50IHdhcm5fZm9ybWF0OwoKCgppbnQgd2Fybl9jaGFyX3N1YnNjcmlwdHMgPSAw
OwoKCgppbnQgd2Fybl9jb252ZXJzaW9uOwoKCgppbnQgd2Fybl9wYXJlbnRoZXNlczsKCgoKaW50
IHdhcm5fbWlzc2luZ19icmFjZXM7CgoKCmludCB3YXJuX21haW47CgoKCmludCB3YXJuX3Vua25v
d25fcHJhZ21hcyA9IDA7CgoKCgppbnQgd2Fybl9zaWduX2NvbXBhcmUgPSAtMTsKCgoKaW50IHdh
cm5fZmxvYXRfZXF1YWwgPSAwOwoKCgppbnQgd2Fybl9tdWx0aWNoYXIgPSAxOwoKCgpjX2xhbmd1
YWdlX2tpbmQgY19sYW5ndWFnZSA9IGNsa19jOwoKCgoKCgppbnQgZG9sbGFyc19pbl9pZGVudCA9
IDE7CgoKCgoKaW50CmNfZGVjb2RlX29wdGlvbiAoYXJnYywgYXJndikKICAgICBpbnQgYXJnYyBf
X2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpOwogICAgIGNoYXIgKiphcmd2Owp7CiAgaW50IHN0
cmluZ3NfcHJvY2Vzc2VkOwogIGNvbnN0IGNoYXIgKm9wdGlvbl92YWx1ZSA9ICgodm9pZCAqKTAp
OwogIGNoYXIgKnAgPSBhcmd2WzBdOwoKICBzdHJpbmdzX3Byb2Nlc3NlZCA9IGNwcF9oYW5kbGVf
b3B0aW9uICgmcGFyc2VfaW4sIGFyZ2MsIGFyZ3YpOwoKCgoKICBpZiAoIXN0cmNtcCAocCwgIi1s
YW5nLW9iamMiKSkKICAgIGNfbGFuZ3VhZ2UgPSBjbGtfb2JqZWN0aXZlX2M7CiAgZWxzZSBpZiAo
IXN0cmNtcCAocCwgIi1mdHJhZGl0aW9uYWwiKSB8fCAhc3RyY21wIChwLCAiLXRyYWRpdGlvbmFs
IikpCiAgICB7CiAgICAgIGZsYWdfdHJhZGl0aW9uYWwgPSAxOwogICAgICBmbGFnX3dyaXRhYmxl
X3N0cmluZ3MgPSAxOwogICAgICBmbGFnX2RpZ3JhcGhzID0gMDsKICAgIH0KICBlbHNlIGlmICgh
c3RyY21wIChwLCAiLWZhbGxvdy1zaW5nbGUtcHJlY2lzaW9uIikpCiAgICBmbGFnX2FsbG93X3Np
bmdsZV9wcmVjaXNpb24gPSAxOwogIGVsc2UgaWYgKCFzdHJjbXAgKHAsICItZmhvc3RlZCIpIHx8
ICFzdHJjbXAgKHAsICItZm5vLWZyZWVzdGFuZGluZyIpKQogICAgewogICAgICBmbGFnX2hvc3Rl
ZCA9IDE7CiAgICAgIGZsYWdfbm9fYnVpbHRpbiA9IDA7CiAgICB9CiAgZWxzZSBpZiAoIXN0cmNt
cCAocCwgIi1mZnJlZXN0YW5kaW5nIikgfHwgIXN0cmNtcCAocCwgIi1mbm8taG9zdGVkIikpCiAg
ICB7CiAgICAgIGZsYWdfaG9zdGVkID0gMDsKICAgICAgZmxhZ19ub19idWlsdGluID0gMTsKCiAg
ICAgIGlmICh3YXJuX21haW4gPT0gMikKICAgICAgICB3YXJuX21haW4gPSAwOwogICAgfQogIGVs
c2UgaWYgKCFzdHJjbXAgKHAsICItZm5vdHJhZGl0aW9uYWwiKSB8fCAhc3RyY21wIChwLCAiLWZu
by10cmFkaXRpb25hbCIpKQogICAgewogICAgICBmbGFnX3RyYWRpdGlvbmFsID0gMDsKICAgICAg
ZmxhZ193cml0YWJsZV9zdHJpbmdzID0gMDsKICAgICAgZmxhZ19kaWdyYXBocyA9IDE7CiAgICB9
CiAgZWxzZSBpZiAoIXN0cm5jbXAgKHAsICItc3RkPSIsIDUpKQogICAgewojIDU2MiAiLi4vLi4v
Z2NjL2djYy9jLWRlY2wuYyIKICAgICAgY29uc3QgY2hhciAqYXJnc3RhcnQgPSAmcFs1XTsKCiAg
ICAgIGlmICghc3RyY21wIChhcmdzdGFydCwgImlzbzk4OTk6MTk5MCIpCiAgICAgICAgICB8fCAh
c3RyY21wIChhcmdzdGFydCwgImM4OSIpKQogICAgICAgIHsKICAgICAgICBpc29fMTk5MDoKICAg
ICAgICAgIGZsYWdfZGlncmFwaHMgPSAwOwogICAgICAgICAgZmxhZ19pc29jOTQgPSAwOwogICAg
ICAgIGlzb18xOTkwX2RpZ3JhcGhzOgogICAgICAgICAgZmxhZ190cmFkaXRpb25hbCA9IDA7CiAg
ICAgICAgICBmbGFnX3dyaXRhYmxlX3N0cmluZ3MgPSAwOwogICAgICAgICAgZmxhZ19ub19hc20g
PSAxOwogICAgICAgICAgZmxhZ19ub19ub25hbnNpX2J1aWx0aW4gPSAxOwogICAgICAgICAgZmxh
Z19ub25pc29fZGVmYXVsdF9mb3JtYXRfYXR0cmlidXRlcyA9IDA7CiAgICAgICAgICBmbGFnX2lz
b2M5OSA9IDA7CiAgICAgICAgfQogICAgICBlbHNlIGlmICghc3RyY21wIChhcmdzdGFydCwgImlz
bzk4OTk6MTk5NDA5IikpCiAgICAgICAgewogICAgICAgICAgZmxhZ19kaWdyYXBocyA9IDE7CiAg
ICAgICAgICBmbGFnX2lzb2M5NCA9IDE7CiAgICAgICAgICBnb3RvIGlzb18xOTkwX2RpZ3JhcGhz
OwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoYXJnc3RhcnQsICJpc285ODk5OjE5
OXgiKQogICAgICAgICAgICAgICB8fCAhc3RyY21wIChhcmdzdGFydCwgImlzbzk4OTk6MTk5OSIp
CiAgICAgICAgICAgICAgIHx8ICFzdHJjbXAgKGFyZ3N0YXJ0LCAiYzl4IikKICAgICAgICAgICAg
ICAgfHwgIXN0cmNtcCAoYXJnc3RhcnQsICJjOTkiKSkKICAgICAgICB7CiAgICAgICAgICBmbGFn
X3RyYWRpdGlvbmFsID0gMDsKICAgICAgICAgIGZsYWdfd3JpdGFibGVfc3RyaW5ncyA9IDA7CiAg
ICAgICAgICBmbGFnX25vX2FzbSA9IDE7CiAgICAgICAgICBmbGFnX25vX25vbmFuc2lfYnVpbHRp
biA9IDE7CiAgICAgICAgICBmbGFnX25vbmlzb19kZWZhdWx0X2Zvcm1hdF9hdHRyaWJ1dGVzID0g
MDsKICAgICAgICAgIGZsYWdfaXNvYzk5ID0gMTsKICAgICAgICAgIGZsYWdfZGlncmFwaHMgPSAx
OwogICAgICAgICAgZmxhZ19pc29jOTQgPSAxOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoIXN0
cmNtcCAoYXJnc3RhcnQsICJnbnU4OSIpKQogICAgICAgIHsKICAgICAgICAgIGZsYWdfdHJhZGl0
aW9uYWwgPSAwOwogICAgICAgICAgZmxhZ193cml0YWJsZV9zdHJpbmdzID0gMDsKICAgICAgICAg
IGZsYWdfbm9fYXNtID0gMDsKICAgICAgICAgIGZsYWdfbm9fbm9uYW5zaV9idWlsdGluID0gMDsK
ICAgICAgICAgIGZsYWdfbm9uaXNvX2RlZmF1bHRfZm9ybWF0X2F0dHJpYnV0ZXMgPSAxOwogICAg
ICAgICAgZmxhZ19pc29jOTkgPSAwOwogICAgICAgICAgZmxhZ19kaWdyYXBocyA9IDE7CiAgICAg
ICAgICBmbGFnX2lzb2M5NCA9IDA7CiAgICAgICAgfQogICAgICBlbHNlIGlmICghc3RyY21wIChh
cmdzdGFydCwgImdudTl4IikgfHwgIXN0cmNtcCAoYXJnc3RhcnQsICJnbnU5OSIpKQogICAgICAg
IHsKICAgICAgICAgIGZsYWdfdHJhZGl0aW9uYWwgPSAwOwogICAgICAgICAgZmxhZ193cml0YWJs
ZV9zdHJpbmdzID0gMDsKICAgICAgICAgIGZsYWdfbm9fYXNtID0gMDsKICAgICAgICAgIGZsYWdf
bm9fbm9uYW5zaV9idWlsdGluID0gMDsKICAgICAgICAgIGZsYWdfbm9uaXNvX2RlZmF1bHRfZm9y
bWF0X2F0dHJpYnV0ZXMgPSAxOwogICAgICAgICAgZmxhZ19pc29jOTkgPSAxOwogICAgICAgICAg
ZmxhZ19kaWdyYXBocyA9IDE7CiAgICAgICAgICBmbGFnX2lzb2M5NCA9IDE7CiAgICAgICAgfQog
ICAgICBlbHNlCiAgICAgICAgZXJyb3IgKCJ1bmtub3duIEMgc3RhbmRhcmQgYCVzJyIsIGFyZ3N0
YXJ0KTsKICAgIH0KICBlbHNlIGlmICghc3RyY21wIChwLCAiLWZkb2xsYXJzLWluLWlkZW50aWZp
ZXJzIikpCiAgICBkb2xsYXJzX2luX2lkZW50ID0gMTsKICBlbHNlIGlmICghc3RyY21wIChwLCAi
LWZuby1kb2xsYXJzLWluLWlkZW50aWZpZXJzIikpCiAgICBkb2xsYXJzX2luX2lkZW50ID0gMDsK
ICBlbHNlIGlmICghc3RyY21wIChwLCAiLWZzaWduZWQtY2hhciIpKQogICAgZmxhZ19zaWduZWRf
Y2hhciA9IDE7CiAgZWxzZSBpZiAoIXN0cmNtcCAocCwgIi1mdW5zaWduZWQtY2hhciIpKQogICAg
ZmxhZ19zaWduZWRfY2hhciA9IDA7CiAgZWxzZSBpZiAoIXN0cmNtcCAocCwgIi1mbm8tc2lnbmVk
LWNoYXIiKSkKICAgIGZsYWdfc2lnbmVkX2NoYXIgPSAwOwogIGVsc2UgaWYgKCFzdHJjbXAgKHAs
ICItZm5vLXVuc2lnbmVkLWNoYXIiKSkKICAgIGZsYWdfc2lnbmVkX2NoYXIgPSAxOwogIGVsc2Ug
aWYgKCFzdHJjbXAgKHAsICItZnNpZ25lZC1iaXRmaWVsZHMiKQogICAgICAgICAgIHx8ICFzdHJj
bXAgKHAsICItZm5vLXVuc2lnbmVkLWJpdGZpZWxkcyIpKQogICAgewogICAgICBmbGFnX3NpZ25l
ZF9iaXRmaWVsZHMgPSAxOwogICAgICBleHBsaWNpdF9mbGFnX3NpZ25lZF9iaXRmaWVsZHMgPSAx
OwogICAgfQogIGVsc2UgaWYgKCFzdHJjbXAgKHAsICItZnVuc2lnbmVkLWJpdGZpZWxkcyIpCiAg
ICAgICAgICAgfHwgIXN0cmNtcCAocCwgIi1mbm8tc2lnbmVkLWJpdGZpZWxkcyIpKQogICAgewog
ICAgICBmbGFnX3NpZ25lZF9iaXRmaWVsZHMgPSAwOwogICAgICBleHBsaWNpdF9mbGFnX3NpZ25l
ZF9iaXRmaWVsZHMgPSAxOwogICAgfQogIGVsc2UgaWYgKCFzdHJjbXAgKHAsICItZnNob3J0LWVu
dW1zIikpCiAgICBmbGFnX3Nob3J0X2VudW1zID0gMTsKICBlbHNlIGlmICghc3RyY21wIChwLCAi
LWZuby1zaG9ydC1lbnVtcyIpKQogICAgZmxhZ19zaG9ydF9lbnVtcyA9IDA7CiAgZWxzZSBpZiAo
IXN0cmNtcCAocCwgIi1mc2hvcnQtd2NoYXIiKSkKICAgIGZsYWdfc2hvcnRfd2NoYXIgPSAxOwog
IGVsc2UgaWYgKCFzdHJjbXAgKHAsICItZm5vLXNob3J0LXdjaGFyIikpCiAgICBmbGFnX3Nob3J0
X3djaGFyID0gMDsKICBlbHNlIGlmICghc3RyY21wIChwLCAiLWZjb25kLW1pc21hdGNoIikpCiAg
ICBmbGFnX2NvbmRfbWlzbWF0Y2ggPSAxOwogIGVsc2UgaWYgKCFzdHJjbXAgKHAsICItZm5vLWNv
bmQtbWlzbWF0Y2giKSkKICAgIGZsYWdfY29uZF9taXNtYXRjaCA9IDA7CiAgZWxzZSBpZiAoIXN0
cmNtcCAocCwgIi1mc2hvcnQtZG91YmxlIikpCiAgICBmbGFnX3Nob3J0X2RvdWJsZSA9IDE7CiAg
ZWxzZSBpZiAoIXN0cmNtcCAocCwgIi1mbm8tc2hvcnQtZG91YmxlIikpCiAgICBmbGFnX3Nob3J0
X2RvdWJsZSA9IDA7CiAgZWxzZSBpZiAoIXN0cmNtcCAocCwgIi1mYXNtIikpCiAgICBmbGFnX25v
X2FzbSA9IDA7CiAgZWxzZSBpZiAoIXN0cmNtcCAocCwgIi1mbm8tYXNtIikpCiAgICBmbGFnX25v
X2FzbSA9IDE7CiAgZWxzZSBpZiAoIXN0cmNtcCAocCwgIi1mYnVpbHRpbiIpKQogICAgZmxhZ19u
b19idWlsdGluID0gMDsKICBlbHNlIGlmICghc3RyY21wIChwLCAiLWZuby1idWlsdGluIikpCiAg
ICBmbGFnX25vX2J1aWx0aW4gPSAxOwogIGVsc2UgaWYgKChvcHRpb25fdmFsdWUKICAgICAgICAg
ICAgPSAoc3RybmNtcCAocCwgIi1mZHVtcC10cmFuc2xhdGlvbi11bml0LSIsIHN0cmxlbiAoIi1m
ZHVtcC10cmFuc2xhdGlvbi11bml0LSIpKSA/ICgodm9pZCAqKTApIDogcCArIHN0cmxlbiAoIi1m
ZHVtcC10cmFuc2xhdGlvbi11bml0LSIpKSkpCiAgICB7CiAgICAgIGlmIChwWzIyXSA9PSAnXDAn
KQogICAgICAgIGVycm9yICgibm8gZmlsZSBzcGVjaWZpZWQgd2l0aCAtZmR1bXAtdHJhbnNsYXRp
b24tdW5pdCIpOwogICAgICBlbHNlCiAgICAgICAgZmxhZ19kdW1wX3RyYW5zbGF0aW9uX3VuaXQg
PSBvcHRpb25fdmFsdWU7CiAgICB9CiAgZWxzZSBpZiAoIXN0cmNtcCAocCwgIi1hbnNpIikpCiAg
ICBnb3RvIGlzb18xOTkwOwogIGVsc2UgaWYgKCFzdHJjbXAgKHAsICItV2Vycm9yLWltcGxpY2l0
LWZ1bmN0aW9uLWRlY2xhcmF0aW9uIikpCiAgICBtZXNnX2ltcGxpY2l0X2Z1bmN0aW9uX2RlY2xh
cmF0aW9uID0gMjsKICBlbHNlIGlmICghc3RyY21wIChwLCAiLVdpbXBsaWNpdC1mdW5jdGlvbi1k
ZWNsYXJhdGlvbiIpKQogICAgbWVzZ19pbXBsaWNpdF9mdW5jdGlvbl9kZWNsYXJhdGlvbiA9IDE7
CiAgZWxzZSBpZiAoIXN0cmNtcCAocCwgIi1Xbm8taW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRp
b24iKSkKICAgIG1lc2dfaW1wbGljaXRfZnVuY3Rpb25fZGVjbGFyYXRpb24gPSAwOwogIGVsc2Ug
aWYgKCFzdHJjbXAgKHAsICItV2ltcGxpY2l0LWludCIpKQogICAgd2Fybl9pbXBsaWNpdF9pbnQg
PSAxOwogIGVsc2UgaWYgKCFzdHJjbXAgKHAsICItV25vLWltcGxpY2l0LWludCIpKQogICAgd2Fy
bl9pbXBsaWNpdF9pbnQgPSAwOwogIGVsc2UgaWYgKCFzdHJjbXAgKHAsICItV2ltcGxpY2l0Iikp
CiAgICB7CiAgICAgIHdhcm5faW1wbGljaXRfaW50ID0gMTsKICAgICAgaWYgKG1lc2dfaW1wbGlj
aXRfZnVuY3Rpb25fZGVjbGFyYXRpb24gIT0gMikKICAgICAgICBtZXNnX2ltcGxpY2l0X2Z1bmN0
aW9uX2RlY2xhcmF0aW9uID0gMTsKICAgIH0KICBlbHNlIGlmICghc3RyY21wIChwLCAiLVduby1p
bXBsaWNpdCIpKQogICAgd2Fybl9pbXBsaWNpdF9pbnQgPSAwLCBtZXNnX2ltcGxpY2l0X2Z1bmN0
aW9uX2RlY2xhcmF0aW9uID0gMDsKICBlbHNlIGlmICghc3RyY21wIChwLCAiLVdsb25nLWxvbmci
KSkKICAgIHdhcm5fbG9uZ19sb25nID0gMTsKICBlbHNlIGlmICghc3RyY21wIChwLCAiLVduby1s
b25nLWxvbmciKSkKICAgIHdhcm5fbG9uZ19sb25nID0gMDsKICBlbHNlIGlmICghc3RyY21wIChw
LCAiLVd3cml0ZS1zdHJpbmdzIikpCiAgICBmbGFnX2NvbnN0X3N0cmluZ3MgPSAxOwogIGVsc2Ug
aWYgKCFzdHJjbXAgKHAsICItV25vLXdyaXRlLXN0cmluZ3MiKSkKICAgIGZsYWdfY29uc3Rfc3Ry
aW5ncyA9IDA7CiAgZWxzZSBpZiAoIXN0cmNtcCAocCwgIi1XY2FzdC1xdWFsIikpCiAgICB3YXJu
X2Nhc3RfcXVhbCA9IDE7CiAgZWxzZSBpZiAoIXN0cmNtcCAocCwgIi1Xbm8tY2FzdC1xdWFsIikp
CiAgICB3YXJuX2Nhc3RfcXVhbCA9IDA7CiAgZWxzZSBpZiAoIXN0cmNtcCAocCwgIi1XYmFkLWZ1
bmN0aW9uLWNhc3QiKSkKICAgIHdhcm5fYmFkX2Z1bmN0aW9uX2Nhc3QgPSAxOwogIGVsc2UgaWYg
KCFzdHJjbXAgKHAsICItV25vLWJhZC1mdW5jdGlvbi1jYXN0IikpCiAgICB3YXJuX2JhZF9mdW5j
dGlvbl9jYXN0ID0gMDsKICBlbHNlIGlmICghc3RyY21wIChwLCAiLVdtaXNzaW5nLW5vcmV0dXJu
IikpCiAgICB3YXJuX21pc3Npbmdfbm9yZXR1cm4gPSAxOwogIGVsc2UgaWYgKCFzdHJjbXAgKHAs
ICItV25vLW1pc3Npbmctbm9yZXR1cm4iKSkKICAgIHdhcm5fbWlzc2luZ19ub3JldHVybiA9IDA7
CiAgZWxzZSBpZiAoIXN0cmNtcCAocCwgIi1XbWlzc2luZy1mb3JtYXQtYXR0cmlidXRlIikpCiAg
ICB3YXJuX21pc3NpbmdfZm9ybWF0X2F0dHJpYnV0ZSA9IDE7CiAgZWxzZSBpZiAoIXN0cmNtcCAo
cCwgIi1Xbm8tbWlzc2luZy1mb3JtYXQtYXR0cmlidXRlIikpCiAgICB3YXJuX21pc3NpbmdfZm9y
bWF0X2F0dHJpYnV0ZSA9IDA7CiAgZWxzZSBpZiAoIXN0cmNtcCAocCwgIi1XcG9pbnRlci1hcml0
aCIpKQogICAgd2Fybl9wb2ludGVyX2FyaXRoID0gMTsKICBlbHNlIGlmICghc3RyY21wIChwLCAi
LVduby1wb2ludGVyLWFyaXRoIikpCiAgICB3YXJuX3BvaW50ZXJfYXJpdGggPSAwOwogIGVsc2Ug
aWYgKCFzdHJjbXAgKHAsICItV3N0cmljdC1wcm90b3R5cGVzIikpCiAgICB3YXJuX3N0cmljdF9w
cm90b3R5cGVzID0gMTsKICBlbHNlIGlmICghc3RyY21wIChwLCAiLVduby1zdHJpY3QtcHJvdG90
eXBlcyIpKQogICAgd2Fybl9zdHJpY3RfcHJvdG90eXBlcyA9IDA7CiAgZWxzZSBpZiAoIXN0cmNt
cCAocCwgIi1XbWlzc2luZy1wcm90b3R5cGVzIikpCiAgICB3YXJuX21pc3NpbmdfcHJvdG90eXBl
cyA9IDE7CiAgZWxzZSBpZiAoIXN0cmNtcCAocCwgIi1Xbm8tbWlzc2luZy1wcm90b3R5cGVzIikp
CiAgICB3YXJuX21pc3NpbmdfcHJvdG90eXBlcyA9IDA7CiAgZWxzZSBpZiAoIXN0cmNtcCAocCwg
Ii1XbWlzc2luZy1kZWNsYXJhdGlvbnMiKSkKICAgIHdhcm5fbWlzc2luZ19kZWNsYXJhdGlvbnMg
PSAxOwogIGVsc2UgaWYgKCFzdHJjbXAgKHAsICItV25vLW1pc3NpbmctZGVjbGFyYXRpb25zIikp
CiAgICB3YXJuX21pc3NpbmdfZGVjbGFyYXRpb25zID0gMDsKICBlbHNlIGlmICghc3RyY21wIChw
LCAiLVdyZWR1bmRhbnQtZGVjbHMiKSkKICAgIHdhcm5fcmVkdW5kYW50X2RlY2xzID0gMTsKICBl
bHNlIGlmICghc3RyY21wIChwLCAiLVduby1yZWR1bmRhbnQtZGVjbHMiKSkKICAgIHdhcm5fcmVk
dW5kYW50X2RlY2xzID0gMDsKICBlbHNlIGlmICghc3RyY21wIChwLCAiLVduZXN0ZWQtZXh0ZXJu
cyIpKQogICAgd2Fybl9uZXN0ZWRfZXh0ZXJucyA9IDE7CiAgZWxzZSBpZiAoIXN0cmNtcCAocCwg
Ii1Xbm8tbmVzdGVkLWV4dGVybnMiKSkKICAgIHdhcm5fbmVzdGVkX2V4dGVybnMgPSAwOwogIGVs
c2UgaWYgKCFzdHJjbXAgKHAsICItV3RyYWRpdGlvbmFsIikpCiAgICB3YXJuX3RyYWRpdGlvbmFs
ID0gMTsKICBlbHNlIGlmICghc3RyY21wIChwLCAiLVduby10cmFkaXRpb25hbCIpKQogICAgd2Fy
bl90cmFkaXRpb25hbCA9IDA7CiAgZWxzZSBpZiAoIXN0cm5jbXAgKHAsICItV2Zvcm1hdD0iLCA5
KSkKICAgIHdhcm5fZm9ybWF0ID0gYXRvbCAocCArIDkpOwogIGVsc2UgaWYgKCFzdHJjbXAgKHAs
ICItV2Zvcm1hdCIpKQogICAgd2Fybl9mb3JtYXQgPSAxOwogIGVsc2UgaWYgKCFzdHJjbXAgKHAs
ICItV25vLWZvcm1hdCIpKQogICAgd2Fybl9mb3JtYXQgPSAwOwogIGVsc2UgaWYgKCFzdHJjbXAg
KHAsICItV2NoYXItc3Vic2NyaXB0cyIpKQogICAgd2Fybl9jaGFyX3N1YnNjcmlwdHMgPSAxOwog
IGVsc2UgaWYgKCFzdHJjbXAgKHAsICItV25vLWNoYXItc3Vic2NyaXB0cyIpKQogICAgd2Fybl9j
aGFyX3N1YnNjcmlwdHMgPSAwOwogIGVsc2UgaWYgKCFzdHJjbXAgKHAsICItV2NvbnZlcnNpb24i
KSkKICAgIHdhcm5fY29udmVyc2lvbiA9IDE7CiAgZWxzZSBpZiAoIXN0cmNtcCAocCwgIi1Xbm8t
Y29udmVyc2lvbiIpKQogICAgd2Fybl9jb252ZXJzaW9uID0gMDsKICBlbHNlIGlmICghc3RyY21w
IChwLCAiLVdwYXJlbnRoZXNlcyIpKQogICAgd2Fybl9wYXJlbnRoZXNlcyA9IDE7CiAgZWxzZSBp
ZiAoIXN0cmNtcCAocCwgIi1Xbm8tcGFyZW50aGVzZXMiKSkKICAgIHdhcm5fcGFyZW50aGVzZXMg
PSAwOwogIGVsc2UgaWYgKCFzdHJjbXAgKHAsICItV3JldHVybi10eXBlIikpCiAgICB3YXJuX3Jl
dHVybl90eXBlID0gMTsKICBlbHNlIGlmICghc3RyY21wIChwLCAiLVduby1yZXR1cm4tdHlwZSIp
KQogICAgd2Fybl9yZXR1cm5fdHlwZSA9IDA7CiAgZWxzZSBpZiAoIXN0cmNtcCAocCwgIi1Xc2Vx
dWVuY2UtcG9pbnQiKSkKICAgIHdhcm5fc2VxdWVuY2VfcG9pbnQgPSAxOwogIGVsc2UgaWYgKCFz
dHJjbXAgKHAsICItV25vLXNlcXVlbmNlLXBvaW50IikpCiAgICB3YXJuX3NlcXVlbmNlX3BvaW50
ID0gMDsKICBlbHNlIGlmICghc3RyY21wIChwLCAiLVdjb21tZW50IikpCiAgICA7CiAgZWxzZSBp
ZiAoIXN0cmNtcCAocCwgIi1Xbm8tY29tbWVudCIpKQogICAgOwogIGVsc2UgaWYgKCFzdHJjbXAg
KHAsICItV2NvbW1lbnRzIikpCiAgICA7CiAgZWxzZSBpZiAoIXN0cmNtcCAocCwgIi1Xbm8tY29t
bWVudHMiKSkKICAgIDsKICBlbHNlIGlmICghc3RyY21wIChwLCAiLVd0cmlncmFwaHMiKSkKICAg
IDsKICBlbHNlIGlmICghc3RyY21wIChwLCAiLVduby10cmlncmFwaHMiKSkKICAgIDsKICBlbHNl
IGlmICghc3RyY21wIChwLCAiLVd1bmRlZiIpKQogICAgOwogIGVsc2UgaWYgKCFzdHJjbXAgKHAs
ICItV25vLXVuZGVmIikpCiAgICA7CiAgZWxzZSBpZiAoIXN0cmNtcCAocCwgIi1XaW1wb3J0Iikp
CiAgICA7CiAgZWxzZSBpZiAoIXN0cmNtcCAocCwgIi1Xbm8taW1wb3J0IikpCiAgICA7CiAgZWxz
ZSBpZiAoIXN0cmNtcCAocCwgIi1XbWlzc2luZy1icmFjZXMiKSkKICAgIHdhcm5fbWlzc2luZ19i
cmFjZXMgPSAxOwogIGVsc2UgaWYgKCFzdHJjbXAgKHAsICItV25vLW1pc3NpbmctYnJhY2VzIikp
CiAgICB3YXJuX21pc3NpbmdfYnJhY2VzID0gMDsKICBlbHNlIGlmICghc3RyY21wIChwLCAiLVdt
YWluIikpCiAgICB3YXJuX21haW4gPSAxOwogIGVsc2UgaWYgKCFzdHJjbXAgKHAsICItV25vLW1h
aW4iKSkKICAgIHdhcm5fbWFpbiA9IC0xOwogIGVsc2UgaWYgKCFzdHJjbXAgKHAsICItV3NpZ24t
Y29tcGFyZSIpKQogICAgd2Fybl9zaWduX2NvbXBhcmUgPSAxOwogIGVsc2UgaWYgKCFzdHJjbXAg
KHAsICItV25vLXNpZ24tY29tcGFyZSIpKQogICAgd2Fybl9zaWduX2NvbXBhcmUgPSAwOwogIGVs
c2UgaWYgKCFzdHJjbXAgKHAsICItV2Zsb2F0LWVxdWFsIikpCiAgICB3YXJuX2Zsb2F0X2VxdWFs
ID0gMTsKICBlbHNlIGlmICghc3RyY21wIChwLCAiLVduby1mbG9hdC1lcXVhbCIpKQogICAgd2Fy
bl9mbG9hdF9lcXVhbCA9IDA7CiAgZWxzZSBpZiAoIXN0cmNtcCAocCwgIi1XbXVsdGljaGFyIikp
CiAgICB3YXJuX211bHRpY2hhciA9IDE7CiAgZWxzZSBpZiAoIXN0cmNtcCAocCwgIi1Xbm8tbXVs
dGljaGFyIikpCiAgICB3YXJuX211bHRpY2hhciA9IDA7CiAgZWxzZSBpZiAoIXN0cmNtcCAocCwg
Ii1XdW5rbm93bi1wcmFnbWFzIikpCgoKICAgIHdhcm5fdW5rbm93bl9wcmFnbWFzID0gMjsKICBl
bHNlIGlmICghc3RyY21wIChwLCAiLVduby11bmtub3duLXByYWdtYXMiKSkKICAgIHdhcm5fdW5r
bm93bl9wcmFnbWFzID0gMDsKICBlbHNlIGlmICghc3RyY21wIChwLCAiLVdhbGwiKSkKICAgIHsK
CgoKICAgICAgaWYgKHdhcm5fdW5pbml0aWFsaXplZCAhPSAxKQogICAgICAgIHdhcm5fdW5pbml0
aWFsaXplZCA9IDI7CiAgICAgIHdhcm5faW1wbGljaXRfaW50ID0gMTsKICAgICAgbWVzZ19pbXBs
aWNpdF9mdW5jdGlvbl9kZWNsYXJhdGlvbiA9IDE7CiAgICAgIHdhcm5fcmV0dXJuX3R5cGUgPSAx
OwogICAgICBzZXRfV3VudXNlZCAoMSk7CiAgICAgIHdhcm5fc3dpdGNoID0gMTsKICAgICAgd2Fy
bl9mb3JtYXQgPSAxOwogICAgICB3YXJuX2NoYXJfc3Vic2NyaXB0cyA9IDE7CiAgICAgIHdhcm5f
cGFyZW50aGVzZXMgPSAxOwogICAgICB3YXJuX3NlcXVlbmNlX3BvaW50ID0gMTsKICAgICAgd2Fy
bl9taXNzaW5nX2JyYWNlcyA9IDE7CgoKICAgICAgd2Fybl9tYWluID0gMjsKCiAgICAgIHdhcm5f
dW5rbm93bl9wcmFnbWFzID0gMTsKICAgIH0KICBlbHNlCiAgICByZXR1cm4gc3RyaW5nc19wcm9j
ZXNzZWQ7CgogIHJldHVybiAxOwp9CgoKCnZvaWQKcHJpbnRfbGFuZ19kZWNsIChmaWxlLCBub2Rl
LCBpbmRlbnQpCiAgICAgRklMRSAqZmlsZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpOwog
ICAgIHRyZWUgbm9kZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpOwogICAgIGludCBpbmRl
bnQgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKTsKewp9Cgp2b2lkCnByaW50X2xhbmdfdHlw
ZSAoZmlsZSwgbm9kZSwgaW5kZW50KQogICAgIEZJTEUgKmZpbGUgX19hdHRyaWJ1dGVfXyAoKF9f
dW51c2VkX18pKTsKICAgICB0cmVlIG5vZGUgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKTsK
ICAgICBpbnQgaW5kZW50IF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7CnsKfQoKdm9pZApw
cmludF9sYW5nX2lkZW50aWZpZXIgKGZpbGUsIG5vZGUsIGluZGVudCkKICAgICBGSUxFICpmaWxl
OwogICAgIHRyZWUgbm9kZTsKICAgICBpbnQgaW5kZW50Owp7CiAgcHJpbnRfbm9kZSAoZmlsZSwg
Imdsb2JhbCIsICgoKHN0cnVjdCBsYW5nX2lkZW50aWZpZXIgKikgKG5vZGUpKS0+Z2xvYmFsX3Zh
bHVlKSwgaW5kZW50ICsgNCk7CiAgcHJpbnRfbm9kZSAoZmlsZSwgImxvY2FsIiwgKCgoc3RydWN0
IGxhbmdfaWRlbnRpZmllciAqKSAobm9kZSkpLT5sb2NhbF92YWx1ZSksIGluZGVudCArIDQpOwog
IHByaW50X25vZGUgKGZpbGUsICJsYWJlbCIsICgoKHN0cnVjdCBsYW5nX2lkZW50aWZpZXIgKikg
KG5vZGUpKS0+bGFiZWxfdmFsdWUpLCBpbmRlbnQgKyA0KTsKICBwcmludF9ub2RlIChmaWxlLCAi
aW1wbGljaXQiLCAoKChzdHJ1Y3QgbGFuZ19pZGVudGlmaWVyICopIChub2RlKSktPmltcGxpY2l0
X2RlY2wpLCBpbmRlbnQgKyA0KTsKICBwcmludF9ub2RlIChmaWxlLCAiZXJyb3IgbG9jdXMiLCAo
KChzdHJ1Y3QgbGFuZ19pZGVudGlmaWVyICopIChub2RlKSktPmVycm9yX2xvY3VzKSwgaW5kZW50
ICsgNCk7CiAgcHJpbnRfbm9kZSAoZmlsZSwgImxpbWJvIHZhbHVlIiwgKCgoc3RydWN0IGxhbmdf
aWRlbnRpZmllciAqKSAobm9kZSkpLT5saW1ib192YWx1ZSksIGluZGVudCArIDQpOwogIGlmICgo
KG5vZGUpLT5jb21tb24ubGFuZ19mbGFnXzApKQogICAgewogICAgICB0cmVlIHJpZCA9IHJpZHBv
aW50ZXJzWygoKHN0cnVjdCBsYW5nX2lkZW50aWZpZXIgKikgKG5vZGUpKS0+cmlkX2NvZGUpXTsK
ICAgICAgaW5kZW50X3RvIChmaWxlLCBpbmRlbnQgKyA0KTsKICAgICAgZnByaW50ZiAoZmlsZSwg
InJpZCAiKTsKICAgICAgZnByaW50ZiAoZmlsZSwgIiVwIiwgKHZvaWQgKilyaWQpOwogICAgICBm
cHJpbnRmIChmaWxlLCAiIFwiJXNcIiIsIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190
ID0gcmlkOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoSURF
TlRJRklFUl9OT0RFKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgSURFTlRJRklFUl9OT0RFLCAi
Li4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDg4OCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+aWRl
bnRpZmllci5wb2ludGVyKSk7CiAgICB9Cn0KCgoKCnZvaWQKZmluaXNoX2luY29tcGxldGVfZGVj
bCAoZGVjbCkKICAgICB0cmVlIGRlY2w7CnsKICBpZiAoKChlbnVtIHRyZWVfY29kZSkgKGRlY2wp
LT5jb21tb24uY29kZSkgPT0gVkFSX0RFQ0wpCiAgICB7CiAgICAgIHRyZWUgdHlwZSA9ICgoZGVj
bCktPmNvbW1vbi50eXBlKTsKICAgICAgaWYgKHR5cGUgIT0gZ2xvYmFsX3RyZWVzW1RJX0VSUk9S
X01BUktdCiAgICAgICAgICAmJiAoKGVudW0gdHJlZV9jb2RlKSAodHlwZSktPmNvbW1vbi5jb2Rl
KSA9PSBBUlJBWV9UWVBFCiAgICAgICAgICAmJiAhIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRy
ZWUgX190ID0gZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2Rl
KSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVk
IChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA5MDQsIF9fRlVOQ1RJT05fXyk7
IF9fdDsgfSktPmRlY2wuZXh0ZXJuYWxfZmxhZykKICAgICAgICAgICYmIChfX2V4dGVuc2lvbl9f
ICh7IGNvbnN0IHRyZWUgX190ID0gdHlwZTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVu
dW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3Nf
Y2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA5MDUsIF9f
RlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUudmFsdWVzKSA9PSAwKQogICAgICAgIHsKICAgICAg
ICAgIHdhcm5pbmdfd2l0aF9kZWNsIChkZWNsLCAiYXJyYXkgYCVzJyBhc3N1bWVkIHRvIGhhdmUg
b25lIGVsZW1lbnQiKTsKCiAgICAgICAgICBjb21wbGV0ZV9hcnJheV90eXBlICh0eXBlLCAodHJl
ZSkgKCh2b2lkICopMCksIDEpOwoKICAgICAgICAgIGxheW91dF9kZWNsIChkZWNsLCAwKTsKICAg
ICAgICB9CiAgICB9Cn0KCgoKc3RhdGljIHN0cnVjdCBiaW5kaW5nX2xldmVsICoKbWFrZV9iaW5k
aW5nX2xldmVsICgpCnsKCiAgcmV0dXJuIChzdHJ1Y3QgYmluZGluZ19sZXZlbCAqKSB4bWFsbG9j
IChzaXplb2YgKHN0cnVjdCBiaW5kaW5nX2xldmVsKSk7Cn0KCgoKaW50Cmdsb2JhbF9iaW5kaW5n
c19wICgpCnsKICByZXR1cm4gY3VycmVudF9iaW5kaW5nX2xldmVsID09IGdsb2JhbF9iaW5kaW5n
X2xldmVsOwp9Cgp2b2lkCmtlZXBfbmV4dF9sZXZlbCAoKQp7CiAga2VlcF9uZXh0X2xldmVsX2Zs
YWcgPSAxOwp9CgoKCmludAprZXB0X2xldmVsX3AgKCkKewogIHJldHVybiAoKGN1cnJlbnRfYmlu
ZGluZ19sZXZlbC0+a2VlcF9pZl9zdWJibG9ja3MKICAgICAgICAgICAmJiBjdXJyZW50X2JpbmRp
bmdfbGV2ZWwtPmJsb2NrcyAhPSAwKQogICAgICAgICAgfHwgY3VycmVudF9iaW5kaW5nX2xldmVs
LT5rZWVwCiAgICAgICAgICB8fCBjdXJyZW50X2JpbmRpbmdfbGV2ZWwtPm5hbWVzICE9IDAKICAg
ICAgICAgIHx8IChjdXJyZW50X2JpbmRpbmdfbGV2ZWwtPnRhZ3MgIT0gMAogICAgICAgICAgICAg
ICYmICFjdXJyZW50X2JpbmRpbmdfbGV2ZWwtPnRhZ190cmFuc3BhcmVudCkpOwp9CgoKCgoKCnZv
aWQKZGVjbGFyZV9wYXJtX2xldmVsIChkZWZpbml0aW9uX2ZsYWcpCiAgICAgaW50IGRlZmluaXRp
b25fZmxhZyBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpOwp7CiAgY3VycmVudF9iaW5kaW5n
X2xldmVsLT5wYXJtX2ZsYWcgPSAxOwp9CgoKCmludAppbl9wYXJtX2xldmVsX3AgKCkKewogIHJl
dHVybiBjdXJyZW50X2JpbmRpbmdfbGV2ZWwtPnBhcm1fZmxhZzsKfQoKCgoKCnZvaWQKcHVzaGxl
dmVsICh0YWdfdHJhbnNwYXJlbnQpCiAgICAgaW50IHRhZ190cmFuc3BhcmVudDsKewogIHJlZ2lz
dGVyIHN0cnVjdCBiaW5kaW5nX2xldmVsICpuZXdsZXZlbCA9IChzdHJ1Y3QgYmluZGluZ19sZXZl
bCAqKSAoKHZvaWQgKikwKTsKCgoKCiAgaWYgKGN1cnJlbnRfYmluZGluZ19sZXZlbCA9PSBnbG9i
YWxfYmluZGluZ19sZXZlbCkKICAgIHsKICAgICAgbmFtZWRfbGFiZWxzID0gMDsKICAgIH0KCgoK
ICBpZiAoZnJlZV9iaW5kaW5nX2xldmVsKQogICAgewogICAgICBuZXdsZXZlbCA9IGZyZWVfYmlu
ZGluZ19sZXZlbDsKICAgICAgZnJlZV9iaW5kaW5nX2xldmVsID0gZnJlZV9iaW5kaW5nX2xldmVs
LT5sZXZlbF9jaGFpbjsKICAgIH0KICBlbHNlCiAgICB7CiAgICAgIG5ld2xldmVsID0gbWFrZV9i
aW5kaW5nX2xldmVsICgpOwogICAgfQoKCgoKICAqbmV3bGV2ZWwgPSBjbGVhcl9iaW5kaW5nX2xl
dmVsOwogIG5ld2xldmVsLT50YWdfdHJhbnNwYXJlbnQKICAgID0gKHRhZ190cmFuc3BhcmVudAog
ICAgICAgfHwgKGN1cnJlbnRfYmluZGluZ19sZXZlbAogICAgICAgICAgID8gY3VycmVudF9iaW5k
aW5nX2xldmVsLT5zdWJibG9ja3NfdGFnX3RyYW5zcGFyZW50CiAgICAgICAgICAgOiAwKSk7CiAg
bmV3bGV2ZWwtPmxldmVsX2NoYWluID0gY3VycmVudF9iaW5kaW5nX2xldmVsOwogIGN1cnJlbnRf
YmluZGluZ19sZXZlbCA9IG5ld2xldmVsOwogIG5ld2xldmVsLT5rZWVwID0ga2VlcF9uZXh0X2xl
dmVsX2ZsYWc7CiAga2VlcF9uZXh0X2xldmVsX2ZsYWcgPSAwOwogIG5ld2xldmVsLT5rZWVwX2lm
X3N1YmJsb2NrcyA9IGtlZXBfbmV4dF9pZl9zdWJibG9ja3M7CiAga2VlcF9uZXh0X2lmX3N1YmJs
b2NrcyA9IDA7Cn0KCgoKc3RhdGljIHZvaWQKY2xlYXJfbGltYm9fdmFsdWVzIChibG9jaykKICAg
ICB0cmVlIGJsb2NrOwp7CiAgdHJlZSB0ZW07CgogIGZvciAodGVtID0gKF9fZXh0ZW5zaW9uX18g
KHsgY29uc3QgdHJlZSBfX3QgPSBibG9jazsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5j
b21tb24uY29kZSkgIT0gKEJMT0NLKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgQkxPQ0ssICIu
Li8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTAyNywgX19GVU5DVElPTl9fKTsgX190OyB9KS0+Ymxv
Y2sudmFycyk7IHRlbTsgdGVtID0gKCh0ZW0pLT5jb21tb24uY2hhaW4pKQogICAgaWYgKChfX2V4
dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gdGVtOyBpZiAodHJlZV9jb2RlX3R5cGVbKGlu
dCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJl
ZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIs
IDEwMjgsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wubmFtZSkgIT0gMCkKICAgICAgKCgo
c3RydWN0IGxhbmdfaWRlbnRpZmllciAqKSAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBf
X3QgPSB0ZW07IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9f
dCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190
LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTAyOSwgX19GVU5DVElPTl9fKTsgX190
OyB9KS0+ZGVjbC5uYW1lKSkpLT5saW1ib192YWx1ZSkgPSAwOwoKICBmb3IgKHRlbSA9IChfX2V4
dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gYmxvY2s7IGlmICgoKGVudW0gdHJlZV9jb2Rl
KSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChCTE9DSykpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3Qs
IEJMT0NLLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDEwMzEsIF9fRlVOQ1RJT05fXyk7IF9f
dDsgfSktPmJsb2NrLnN1YmJsb2Nrcyk7IHRlbTsgdGVtID0gKCh0ZW0pLT5jb21tb24uY2hhaW4p
KQogICAgY2xlYXJfbGltYm9fdmFsdWVzICh0ZW0pOwp9CiMgMTA1MCAiLi4vLi4vZ2NjL2djYy9j
LWRlY2wuYyIKdHJlZQpwb3BsZXZlbCAoa2VlcCwgcmV2ZXJzZSwgZnVuY3Rpb25ib2R5KQogICAg
IGludCBrZWVwOwogICAgIGludCByZXZlcnNlOwogICAgIGludCBmdW5jdGlvbmJvZHk7CnsKICBy
ZWdpc3RlciB0cmVlIGxpbms7CgoKICB0cmVlIGRlY2xzOwogIHRyZWUgdGFncyA9IGN1cnJlbnRf
YmluZGluZ19sZXZlbC0+dGFnczsKICB0cmVlIHN1YmJsb2NrcyA9IGN1cnJlbnRfYmluZGluZ19s
ZXZlbC0+YmxvY2tzOwogIHRyZWUgYmxvY2sgPSAwOwogIHRyZWUgZGVjbDsKICBpbnQgYmxvY2tf
cHJldmlvdXNseV9jcmVhdGVkOwoKICBrZWVwIHw9IGN1cnJlbnRfYmluZGluZ19sZXZlbC0+a2Vl
cDsKIyAxMDk5ICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIgogIGlmIChyZXZlcnNlKQogICAgY3Vy
cmVudF9iaW5kaW5nX2xldmVsLT5uYW1lcwogICAgICA9IGRlY2xzID0gbnJldmVyc2UgKGN1cnJl
bnRfYmluZGluZ19sZXZlbC0+bmFtZXMpOwogIGVsc2UKICAgIGRlY2xzID0gY3VycmVudF9iaW5k
aW5nX2xldmVsLT5uYW1lczsKCgoKCiAgZm9yIChkZWNsID0gZGVjbHM7IGRlY2w7IGRlY2wgPSAo
KGRlY2wpLT5jb21tb24uY2hhaW4pKQogICAgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChkZWNsKS0+
Y29tbW9uLmNvZGUpID09IEZVTkNUSU9OX0RFQ0wKICAgICAgICAmJiAhICgoZGVjbCktPmNvbW1v
bi5hc21fd3JpdHRlbl9mbGFnKQogICAgICAgICYmIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRy
ZWUgX190ID0gZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2Rl
KSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVk
IChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxMTExLCBfX0ZVTkNUSU9OX18p
OyBfX3Q7IH0pLT5kZWNsLmluaXRpYWwpICE9IDAKICAgICAgICAmJiAoKGRlY2wpLT5jb21tb24u
YWRkcmVzc2FibGVfZmxhZykpCiAgICAgIHsKCgoKCgoKICAgICAgICBpZiAoKF9fZXh0ZW5zaW9u
X18gKHsgY29uc3QgdHJlZSBfX3QgPSBkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgo
ZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFz
c19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDExMjAs
IF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuYWJzdHJhY3Rfb3JpZ2luKSAhPSAwCiAgICAg
ICAgICAgICYmIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZGVjbDsgaWYgKHRy
ZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUp
KV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2dj
Yy9nY2MvYy1kZWNsLmMiLCAxMTIxLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmFic3Ry
YWN0X29yaWdpbikgIT0gZGVjbCkKICAgICAgICAgICgoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3Qg
dHJlZSBfX3QgPSBkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2Nv
ZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWls
ZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDExMjIsIF9fRlVOQ1RJT05f
Xyk7IF9fdDsgfSktPmRlY2wuYWJzdHJhY3Rfb3JpZ2luKSktPmNvbW1vbi5hZGRyZXNzYWJsZV9m
bGFnKSA9IDE7CiAgICAgIH0KCgoKCgogIHdhcm5fYWJvdXRfdW51c2VkX3ZhcmlhYmxlcyAoZ2V0
ZGVjbHMgKCkpOwoKCgoKCiAgYmxvY2sgPSAwOwogIGJsb2NrX3ByZXZpb3VzbHlfY3JlYXRlZCA9
IChjdXJyZW50X2JpbmRpbmdfbGV2ZWwtPnRoaXNfYmxvY2sgIT0gMCk7CiAgaWYgKGJsb2NrX3By
ZXZpb3VzbHlfY3JlYXRlZCkKICAgIGJsb2NrID0gY3VycmVudF9iaW5kaW5nX2xldmVsLT50aGlz
X2Jsb2NrOwogIGVsc2UgaWYgKGtlZXAgfHwgZnVuY3Rpb25ib2R5CiAgICAgICAgICAgfHwgKGN1
cnJlbnRfYmluZGluZ19sZXZlbC0+a2VlcF9pZl9zdWJibG9ja3MgJiYgc3ViYmxvY2tzICE9IDAp
KQogICAgYmxvY2sgPSBtYWtlX25vZGUgKEJMT0NLKTsKICBpZiAoYmxvY2sgIT0gMCkKICAgIHsK
ICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBibG9jazsgaWYgKCgoZW51
bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKEJMT0NLKSkgdHJlZV9jaGVja19m
YWlsZWQgKF9fdCwgQkxPQ0ssICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTE0NCwgX19GVU5D
VElPTl9fKTsgX190OyB9KS0+YmxvY2sudmFycykgPSBkZWNsczsKICAgICAgKF9fZXh0ZW5zaW9u
X18gKHsgY29uc3QgdHJlZSBfX3QgPSBibG9jazsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3Qp
LT5jb21tb24uY29kZSkgIT0gKEJMT0NLKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgQkxPQ0ss
ICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTE0NSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+
YmxvY2suc3ViYmxvY2tzKSA9IHN1YmJsb2NrczsKICAgIH0KCgoKICBmb3IgKGxpbmsgPSBzdWJi
bG9ja3M7IGxpbms7IGxpbmsgPSAoKGxpbmspLT5jb21tb24uY2hhaW4pKQogICAgKF9fZXh0ZW5z
aW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBsaW5rOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9f
dCktPmNvbW1vbi5jb2RlKSAhPSAoQkxPQ0spKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBCTE9D
SywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxMTUxLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0p
LT5ibG9jay5zdXBlcmNvbnRleHQpID0gYmxvY2s7CgoKCiAgZm9yIChsaW5rID0gZGVjbHM7IGxp
bms7IGxpbmsgPSAoKGxpbmspLT5jb21tb24uY2hhaW4pKQogICAgewogICAgICBpZiAoKF9fZXh0
ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBsaW5rOyBpZiAodHJlZV9jb2RlX3R5cGVbKGlu
dCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJl
ZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIs
IDExNTcsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wubmFtZSkgIT0gMCkKICAgICAgICB7
CgoKICAgICAgICAgIGlmICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGxpbms7
IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1v
bi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIu
Li8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTE2MSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVj
bC5leHRlcm5hbF9mbGFnKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICgoKGxpbmsp
LT5jb21tb24udXNlZF9mbGFnKSkKICAgICAgICAgICAgICAgICgoKF9fZXh0ZW5zaW9uX18gKHsg
Y29uc3QgdHJlZSBfX3QgPSBsaW5rOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0
cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVj
a19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDExNjQsIF9fRlVO
Q1RJT05fXyk7IF9fdDsgfSktPmRlY2wubmFtZSkpLT5jb21tb24udXNlZF9mbGFnKSA9IDE7CiAg
ICAgICAgICAgICAgaWYgKCgobGluayktPmNvbW1vbi5hZGRyZXNzYWJsZV9mbGFnKSkKICAgICAg
ICAgICAgICAgICgoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBsaW5rOyBpZiAo
dHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29k
ZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4v
Z2NjL2djYy9jLWRlY2wuYyIsIDExNjYsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuYXNz
ZW1ibGVyX25hbWUpKS0+Y29tbW9uLmFkZHJlc3NhYmxlX2ZsYWcpID0gMTsKICAgICAgICAgICAg
fQogICAgICAgICAgKCgoc3RydWN0IGxhbmdfaWRlbnRpZmllciAqKSAoKF9fZXh0ZW5zaW9uX18g
KHsgY29uc3QgdHJlZSBfX3QgPSBsaW5rOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51
bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19j
aGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDExNjgsIF9f
RlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wubmFtZSkpKS0+bG9jYWxfdmFsdWUpID0gMDsKICAg
ICAgICB9CiAgICB9CgoKCgogIGZvciAobGluayA9IGN1cnJlbnRfYmluZGluZ19sZXZlbC0+c2hh
ZG93ZWQ7IGxpbms7IGxpbmsgPSAoKGxpbmspLT5jb21tb24uY2hhaW4pKQogICAgKCgoc3RydWN0
IGxhbmdfaWRlbnRpZmllciAqKSAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBs
aW5rOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoVFJFRV9M
SVNUKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgVFJFRV9MSVNULCAiLi4vLi4vZ2NjL2djYy9j
LWRlY2wuYyIsIDExNzYsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmxpc3QucHVycG9zZSkpKS0+
bG9jYWxfdmFsdWUpID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBsaW5rOyBp
ZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoVFJFRV9MSVNUKSkg
dHJlZV9jaGVja19mYWlsZWQgKF9fdCwgVFJFRV9MSVNULCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wu
YyIsIDExNzYsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmxpc3QudmFsdWUpOwoKCgoKCiAgaWYg
KGZ1bmN0aW9uYm9keSkKICAgIHsKICAgICAgY2xlYXJfbGltYm9fdmFsdWVzIChibG9jayk7CgoK
CgoKCiAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gYmxvY2s7IGlmICgo
KGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChCTE9DSykpIHRyZWVfY2hl
Y2tfZmFpbGVkIChfX3QsIEJMT0NLLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDExOTEsIF9f
RlVOQ1RJT05fXyk7IF9fdDsgfSktPmJsb2NrLnZhcnMpID0gMDsKCgoKCgogICAgICBmb3IgKGxp
bmsgPSBuYW1lZF9sYWJlbHM7IGxpbms7IGxpbmsgPSAoKGxpbmspLT5jb21tb24uY2hhaW4pKQog
ICAgICAgIHsKICAgICAgICAgIHJlZ2lzdGVyIHRyZWUgbGFiZWwgPSAoX19leHRlbnNpb25fXyAo
eyBjb25zdCB0cmVlIF9fdCA9IGxpbms7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29t
bW9uLmNvZGUpICE9IChUUkVFX0xJU1QpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBUUkVFX0xJ
U1QsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTE5OSwgX19GVU5DVElPTl9fKTsgX190OyB9
KS0+bGlzdC52YWx1ZSk7CgogICAgICAgICAgaWYgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRy
ZWUgX190ID0gbGFiZWw7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29k
ZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxl
ZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTIwMSwgX19GVU5DVElPTl9f
KTsgX190OyB9KS0+ZGVjbC5pbml0aWFsKSA9PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgZXJyb3Jfd2l0aF9kZWNsIChsYWJlbCwgImxhYmVsIGAlcycgdXNlZCBidXQgbm90IGRlZmlu
ZWQiKTsKCiAgICAgICAgICAgICAgZGVmaW5lX2xhYmVsIChpbnB1dF9maWxlbmFtZSwgbGluZW5v
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJl
ZSBfX3QgPSBsYWJlbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2Rl
KSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVk
IChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxMjA2LCBfX0ZVTkNUSU9OX18p
OyBfX3Q7IH0pLT5kZWNsLm5hbWUpKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAo
d2Fybl91bnVzZWRfbGFiZWwgJiYgISgobGFiZWwpLT5jb21tb24udXNlZF9mbGFnKSkKICAgICAg
ICAgICAgd2FybmluZ193aXRoX2RlY2wgKGxhYmVsLCAibGFiZWwgYCVzJyBkZWZpbmVkIGJ1dCBu
b3QgdXNlZCIpOwogICAgICAgICAgKCgoc3RydWN0IGxhbmdfaWRlbnRpZmllciAqKSAoKF9fZXh0
ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBsYWJlbDsgaWYgKHRyZWVfY29kZV90eXBlWyhp
bnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRy
ZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMi
LCAxMjEwLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLm5hbWUpKSktPmxhYmVsX3ZhbHVl
KSA9IDA7CgoKCiAgICAgICAgICAoKGxhYmVsKS0+Y29tbW9uLmNoYWluKSA9IChfX2V4dGVuc2lv
bl9fICh7IGNvbnN0IHRyZWUgX190ID0gYmxvY2s7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190
KS0+Y29tbW9uLmNvZGUpICE9IChCTE9DSykpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIEJMT0NL
LCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDEyMTQsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSkt
PmJsb2NrLnZhcnMpOwogICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3Qg
PSBibG9jazsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKEJM
T0NLKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgQkxPQ0ssICIuLi8uLi9nY2MvZ2NjL2MtZGVj
bC5jIiwgMTIxNSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+YmxvY2sudmFycykgPSBsYWJlbDsK
ICAgICAgICB9CiAgICB9CgoKCiAgewogICAgcmVnaXN0ZXIgc3RydWN0IGJpbmRpbmdfbGV2ZWwg
KmxldmVsID0gY3VycmVudF9iaW5kaW5nX2xldmVsOwogICAgY3VycmVudF9iaW5kaW5nX2xldmVs
ID0gY3VycmVudF9iaW5kaW5nX2xldmVsLT5sZXZlbF9jaGFpbjsKCiAgICBsZXZlbC0+bGV2ZWxf
Y2hhaW4gPSBmcmVlX2JpbmRpbmdfbGV2ZWw7CiAgICBmcmVlX2JpbmRpbmdfbGV2ZWwgPSBsZXZl
bDsKICB9CgoKICBpZiAoZnVuY3Rpb25ib2R5KQogICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3Qg
dHJlZSBfX3QgPSBjdXJyZW50X2Z1bmN0aW9uX2RlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50
KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVl
X2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwg
MTIzMSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5pbml0aWFsKSA9IGJsb2NrOwogIGVs
c2UgaWYgKGJsb2NrKQogICAgewogICAgICBpZiAoIWJsb2NrX3ByZXZpb3VzbHlfY3JlYXRlZCkK
ICAgICAgICBjdXJyZW50X2JpbmRpbmdfbGV2ZWwtPmJsb2NrcwogICAgICAgICAgPSBjaGFpbm9u
IChjdXJyZW50X2JpbmRpbmdfbGV2ZWwtPmJsb2NrcywgYmxvY2spOwogICAgfQoKCgoKCiAgZWxz
ZSBpZiAoc3ViYmxvY2tzKQogICAgY3VycmVudF9iaW5kaW5nX2xldmVsLT5ibG9ja3MKICAgICAg
PSBjaGFpbm9uIChjdXJyZW50X2JpbmRpbmdfbGV2ZWwtPmJsb2Nrcywgc3ViYmxvY2tzKTsKIyAx
MjYxICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIgogIGlmIChmdW5jdGlvbmJvZHkpCiAgICBmb3Ig
KGxpbmsgPSB0YWdzOyBsaW5rOyBsaW5rID0gKChsaW5rKS0+Y29tbW9uLmNoYWluKSkKICAgICAg
KF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSAoX19leHRlbnNpb25fXyAoeyBjb25z
dCB0cmVlIF9fdCA9IGxpbms7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNv
ZGUpICE9IChUUkVFX0xJU1QpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBUUkVFX0xJU1QsICIu
Li8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTI2MywgX19GVU5DVElPTl9fKTsgX190OyB9KS0+bGlz
dC52YWx1ZSk7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9f
dCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190
LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTI2MywgX19GVU5DVElPTl9fKTsgX190
OyB9KS0+dHlwZS5jb250ZXh0KSA9IGN1cnJlbnRfZnVuY3Rpb25fZGVjbDsKICBlbHNlIGlmIChi
bG9jaykKICAgIGZvciAobGluayA9IHRhZ3M7IGxpbms7IGxpbmsgPSAoKGxpbmspLT5jb21tb24u
Y2hhaW4pKQogICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IChfX2V4dGVu
c2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gbGluazsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChf
X3QpLT5jb21tb24uY29kZSkgIT0gKFRSRUVfTElTVCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3Qs
IFRSRUVfTElTVCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxMjY2LCBfX0ZVTkNUSU9OX18p
OyBfX3Q7IH0pLT5saXN0LnZhbHVlKTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0g
dHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hl
Y2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxMjY2LCBfX0ZV
TkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLmNvbnRleHQpID0gYmxvY2s7CgogIGlmIChibG9jaykK
ICAgICgoYmxvY2spLT5jb21tb24udXNlZF9mbGFnKSA9IDE7CgogIHJldHVybiBibG9jazsKfQoK
CgoKCnZvaWQKZGVsZXRlX2Jsb2NrIChibG9jaykKICAgICB0cmVlIGJsb2NrOwp7CiAgdHJlZSB0
OwogIGlmIChjdXJyZW50X2JpbmRpbmdfbGV2ZWwtPmJsb2NrcyA9PSBibG9jaykKICAgIGN1cnJl
bnRfYmluZGluZ19sZXZlbC0+YmxvY2tzID0gKChibG9jayktPmNvbW1vbi5jaGFpbik7CiAgZm9y
ICh0ID0gY3VycmVudF9iaW5kaW5nX2xldmVsLT5ibG9ja3M7IHQ7KQogICAgewogICAgICBpZiAo
KCh0KS0+Y29tbW9uLmNoYWluKSA9PSBibG9jaykKICAgICAgICAoKHQpLT5jb21tb24uY2hhaW4p
ID0gKChibG9jayktPmNvbW1vbi5jaGFpbik7CiAgICAgIGVsc2UKICAgICAgICB0ID0gKCh0KS0+
Y29tbW9uLmNoYWluKTsKICAgIH0KICAoKGJsb2NrKS0+Y29tbW9uLmNoYWluKSA9ICgodm9pZCAq
KTApOwoKCiAgKChibG9jayktPmNvbW1vbi51c2VkX2ZsYWcpID0gMDsKfQoKCgoKCnZvaWQKaW5z
ZXJ0X2Jsb2NrIChibG9jaykKICAgICB0cmVlIGJsb2NrOwp7CiAgKChibG9jayktPmNvbW1vbi51
c2VkX2ZsYWcpID0gMTsKICBjdXJyZW50X2JpbmRpbmdfbGV2ZWwtPmJsb2NrcwogICAgPSBjaGFp
bm9uIChjdXJyZW50X2JpbmRpbmdfbGV2ZWwtPmJsb2NrcywgYmxvY2spOwp9CgoKCgp2b2lkCnNl
dF9ibG9jayAoYmxvY2spCiAgICAgcmVnaXN0ZXIgdHJlZSBibG9jazsKewogIGN1cnJlbnRfYmlu
ZGluZ19sZXZlbC0+dGhpc19ibG9jayA9IGJsb2NrOwp9Cgp2b2lkCnB1c2hfbGFiZWxfbGV2ZWwg
KCkKewogIHJlZ2lzdGVyIHN0cnVjdCBiaW5kaW5nX2xldmVsICpuZXdsZXZlbDsKCgoKICBpZiAo
ZnJlZV9iaW5kaW5nX2xldmVsKQogICAgewogICAgICBuZXdsZXZlbCA9IGZyZWVfYmluZGluZ19s
ZXZlbDsKICAgICAgZnJlZV9iaW5kaW5nX2xldmVsID0gZnJlZV9iaW5kaW5nX2xldmVsLT5sZXZl
bF9jaGFpbjsKICAgIH0KICBlbHNlCiAgICB7CiAgICAgIG5ld2xldmVsID0gbWFrZV9iaW5kaW5n
X2xldmVsICgpOwogICAgfQoKCgogIG5ld2xldmVsLT5sZXZlbF9jaGFpbiA9IGxhYmVsX2xldmVs
X2NoYWluOwogIGxhYmVsX2xldmVsX2NoYWluID0gbmV3bGV2ZWw7CgogIG5ld2xldmVsLT5uYW1l
cyA9IG5hbWVkX2xhYmVsczsKICBuZXdsZXZlbC0+c2hhZG93ZWQgPSBzaGFkb3dlZF9sYWJlbHM7
CiAgbmFtZWRfbGFiZWxzID0gMDsKICBzaGFkb3dlZF9sYWJlbHMgPSAwOwp9Cgp2b2lkCnBvcF9s
YWJlbF9sZXZlbCAoKQp7CiAgcmVnaXN0ZXIgc3RydWN0IGJpbmRpbmdfbGV2ZWwgKmxldmVsID0g
bGFiZWxfbGV2ZWxfY2hhaW47CiAgdHJlZSBsaW5rLCBwcmV2OwoKCgogIGZvciAobGluayA9IG5h
bWVkX2xhYmVscywgcHJldiA9IDA7IGxpbms7KQogICAgewogICAgICBpZiAoKCgoX19leHRlbnNp
b25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGxpbms7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190
KS0+Y29tbW9uLmNvZGUpICE9IChUUkVFX0xJU1QpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBU
UkVFX0xJU1QsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTM1OSwgX19GVU5DVElPTl9fKTsg
X190OyB9KS0+bGlzdC52YWx1ZSkpLT5jb21tb24ubGFuZ19mbGFnXzEpKQogICAgICAgIHsKICAg
ICAgICAgIGlmICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IChfX2V4dGVuc2lv
bl9fICh7IGNvbnN0IHRyZWUgX190ID0gbGluazsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3Qp
LT5jb21tb24uY29kZSkgIT0gKFRSRUVfTElTVCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIFRS
RUVfTElTVCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxMzYxLCBfX0ZVTkNUSU9OX18pOyBf
X3Q7IH0pLT5saXN0LnZhbHVlKTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJl
ZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tf
ZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxMzYxLCBfX0ZVTkNU
SU9OX18pOyBfX3Q7IH0pLT5kZWNsLmxpbmVudW0pID09IDApCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBlcnJvcl93aXRoX2RlY2wgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190
ID0gbGluazsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKFRS
RUVfTElTVCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIFRSRUVfTElTVCwgIi4uLy4uL2djYy9n
Y2MvYy1kZWNsLmMiLCAxMzYzLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5saXN0LnZhbHVlKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYWJlbCBgJXMnIHVzZWQgYnV0IG5vdCBk
ZWZpbmVkIik7CgogICAgICAgICAgICAgIGRlZmluZV9sYWJlbCAoaW5wdXRfZmlsZW5hbWUsIGxp
bmVubywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0
IHRyZWUgX190ID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBsaW5rOyBpZiAo
KChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoVFJFRV9MSVNUKSkgdHJl
ZV9jaGVja19mYWlsZWQgKF9fdCwgVFJFRV9MSVNULCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIs
IDEzNjcsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmxpc3QudmFsdWUpOyBpZiAodHJlZV9jb2Rl
X3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAo
J2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9j
LWRlY2wuYyIsIDEzNjcsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wubmFtZSkpOwogICAg
ICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmICh3YXJuX3VudXNlZF9sYWJlbCAmJiAhKCgoX19l
eHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGxpbms7IGlmICgoKGVudW0gdHJlZV9jb2Rl
KSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChUUkVFX0xJU1QpKSB0cmVlX2NoZWNrX2ZhaWxlZCAo
X190LCBUUkVFX0xJU1QsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTM2OSwgX19GVU5DVElP
Tl9fKTsgX190OyB9KS0+bGlzdC52YWx1ZSkpLT5jb21tb24udXNlZF9mbGFnKSkKICAgICAgICAg
ICAgd2FybmluZ193aXRoX2RlY2wgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0g
bGluazsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKFRSRUVf
TElTVCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIFRSRUVfTElTVCwgIi4uLy4uL2djYy9nY2Mv
Yy1kZWNsLmMiLCAxMzcwLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5saXN0LnZhbHVlKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYWJlbCBgJXMnIGRlZmluZWQgYnV0IG5vdCB1
c2VkIik7CiAgICAgICAgICAoKChzdHJ1Y3QgbGFuZ19pZGVudGlmaWVyICopICgoX19leHRlbnNp
b25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190
ID0gbGluazsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKFRS
RUVfTElTVCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIFRSRUVfTElTVCwgIi4uLy4uL2djYy9n
Y2MvYy1kZWNsLmMiLCAxMzcyLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5saXN0LnZhbHVlKTsg
aWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9u
LmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4u
Ly4uL2djYy9nY2MvYy1kZWNsLmMiLCAxMzcyLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNs
Lm5hbWUpKSktPmxhYmVsX3ZhbHVlKSA9IDA7CgoKICAgICAgICAgIGxpbmsgPSAoKGxpbmspLT5j
b21tb24uY2hhaW4pOwogICAgICAgICAgaWYgKHByZXYpCiAgICAgICAgICAgICgocHJldiktPmNv
bW1vbi5jaGFpbikgPSBsaW5rOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBuYW1lZF9sYWJl
bHMgPSBsaW5rOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIHByZXYg
PSBsaW5rOwogICAgICAgICAgbGluayA9ICgobGluayktPmNvbW1vbi5jaGFpbik7CiAgICAgICAg
fQogICAgfQoKCiAgZm9yIChsaW5rID0gc2hhZG93ZWRfbGFiZWxzOyBsaW5rOyBsaW5rID0gKChs
aW5rKS0+Y29tbW9uLmNoYWluKSkKICAgIGlmICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVl
IF9fdCA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gbGluazsgaWYgKCgoZW51
bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKFRSRUVfTElTVCkpIHRyZWVfY2hl
Y2tfZmFpbGVkIChfX3QsIFRSRUVfTElTVCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxMzkw
LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5saXN0LnZhbHVlKTsgaWYgKHRyZWVfY29kZV90eXBl
WyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykp
IHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNs
LmMiLCAxMzkwLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLm5hbWUpICE9IDApCiAgICAg
ICgoKHN0cnVjdCBsYW5nX2lkZW50aWZpZXIgKikgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRy
ZWUgX190ID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBsaW5rOyBpZiAoKChl
bnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoVFJFRV9MSVNUKSkgdHJlZV9j
aGVja19mYWlsZWQgKF9fdCwgVFJFRV9MSVNULCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDEz
OTEsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmxpc3QudmFsdWUpOyBpZiAodHJlZV9jb2RlX3R5
cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2Qn
KSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRl
Y2wuYyIsIDEzOTEsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wubmFtZSkpKS0+bGFiZWxf
dmFsdWUpCiAgICAgICAgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGxpbms7
IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChUUkVFX0xJU1Qp
KSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBUUkVFX0xJU1QsICIuLi8uLi9nY2MvZ2NjL2MtZGVj
bC5jIiwgMTM5MiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+bGlzdC52YWx1ZSk7CgogIG5hbWVk
X2xhYmVscyA9IGNoYWlub24gKG5hbWVkX2xhYmVscywgbGV2ZWwtPm5hbWVzKTsKICBzaGFkb3dl
ZF9sYWJlbHMgPSBsZXZlbC0+c2hhZG93ZWQ7CgoKICBsYWJlbF9sZXZlbF9jaGFpbiA9IGxhYmVs
X2xldmVsX2NoYWluLT5sZXZlbF9jaGFpbjsKICBsZXZlbC0+bGV2ZWxfY2hhaW4gPSBmcmVlX2Jp
bmRpbmdfbGV2ZWw7CiAgZnJlZV9iaW5kaW5nX2xldmVsID0gbGV2ZWw7Cn0KIyAxNDEwICIuLi8u
Li9nY2MvZ2NjL2MtZGVjbC5jIgp2b2lkCnB1c2h0YWcgKG5hbWUsIHR5cGUpCiAgICAgdHJlZSBu
YW1lLCB0eXBlOwp7CiAgcmVnaXN0ZXIgc3RydWN0IGJpbmRpbmdfbGV2ZWwgKmI7CgoKCiAgZm9y
IChiID0gY3VycmVudF9iaW5kaW5nX2xldmVsOyBiLT50YWdfdHJhbnNwYXJlbnQ7IGIgPSBiLT5s
ZXZlbF9jaGFpbikKICAgIGNvbnRpbnVlOwoKICBpZiAobmFtZSkKICAgIHsKCgogICAgICBpZiAo
KF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB0eXBlOyBpZiAodHJlZV9jb2RlX3R5
cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3Qn
KSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRl
Y2wuYyIsIDE0MjUsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUubmFtZSkgPT0gMCkKICAg
ICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHR5cGU7IGlmICh0cmVlX2Nv
ZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9
ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2Nj
L2MtZGVjbC5jIiwgMTQyNiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5uYW1lKSA9IG5h
bWU7CiAgICB9CgogIGItPnRhZ3MgPSB0cmVlX2NvbnMgKG5hbWUsIHR5cGUsIGItPnRhZ3MpOwoj
IDE0MzggIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiCiAgKCgodHlwZSktPmNvbW1vbi5jaGFpbikp
ID0gcHVzaGRlY2wgKGJ1aWxkX2RlY2wgKFRZUEVfREVDTCwgKHRyZWUpICgodm9pZCAqKTApLCB0
eXBlKSk7CgoKCiAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB0eXBlOyBpZiAo
dHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29k
ZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4v
Z2NjL2djYy9jLWRlY2wuYyIsIDE0NDIsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUuY29u
dGV4dCkgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9ICgoKHR5cGUpLT5jb21t
b24uY2hhaW4pKTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAo
X190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChf
X3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxNDQyLCBfX0ZVTkNUSU9OX18pOyBf
X3Q7IH0pLT5kZWNsLmNvbnRleHQpOwp9CiMgMTQ1NiAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIK
c3RhdGljIGludApkdXBsaWNhdGVfZGVjbHMgKG5ld2RlY2wsIG9sZGRlY2wsIGRpZmZlcmVudF9i
aW5kaW5nX2xldmVsKQogICAgIHJlZ2lzdGVyIHRyZWUgbmV3ZGVjbCwgb2xkZGVjbDsKICAgICBp
bnQgZGlmZmVyZW50X2JpbmRpbmdfbGV2ZWw7CnsKICBpbnQgdHlwZXNfbWF0Y2ggPSBjb21wdHlw
ZXMgKCgobmV3ZGVjbCktPmNvbW1vbi50eXBlKSwgKChvbGRkZWNsKS0+Y29tbW9uLnR5cGUpKTsK
ICBpbnQgbmV3X2lzX2RlZmluaXRpb24gPSAoKChlbnVtIHRyZWVfY29kZSkgKG5ld2RlY2wpLT5j
b21tb24uY29kZSkgPT0gRlVOQ1RJT05fREVDTAogICAgICAgICAgICAgICAgICAgICAgICAgICAm
JiAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG5ld2RlY2w7IGlmICh0cmVlX2Nv
ZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9
ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2Nj
L2MtZGVjbC5jIiwgMTQ2MywgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5pbml0aWFsKSAh
PSAwKTsKICB0cmVlIG9sZHR5cGUgPSAoKG9sZGRlY2wpLT5jb21tb24udHlwZSk7CiAgdHJlZSBu
ZXd0eXBlID0gKChuZXdkZWNsKS0+Y29tbW9uLnR5cGUpOwogIGludCBlcnJtc2cgPSAwOwoKICBp
ZiAoKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAob2xkZGVjbCktPmNv
bW1vbi5jb2RlKSldID09ICdkJykpCiAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9f
dCA9IG5ld2RlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkg
KF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAo
X190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTQ2OSwgX19GVU5DVElPTl9fKTsg
X190OyB9KS0+ZGVjbC5tYWNoaW5lX2F0dHJpYnV0ZXMpCiAgICAgID0gbWVyZ2VfbWFjaGluZV9k
ZWNsX2F0dHJpYnV0ZXMgKG9sZGRlY2wsIG5ld2RlY2wpOwoKICBpZiAoKChlbnVtIHRyZWVfY29k
ZSkgKG5ld3R5cGUpLT5jb21tb24uY29kZSkgPT0gRVJST1JfTUFSSwogICAgICB8fCAoKGVudW0g
dHJlZV9jb2RlKSAob2xkdHlwZSktPmNvbW1vbi5jb2RlKSA9PSBFUlJPUl9NQVJLKQogICAgdHlw
ZXNfbWF0Y2ggPSAwOwoKCgoKICBpZiAoKChlbnVtIHRyZWVfY29kZSkgKG9sZGRlY2wpLT5jb21t
b24uY29kZSkgIT0gKChlbnVtIHRyZWVfY29kZSkgKG5ld2RlY2wpLT5jb21tb24uY29kZSkpCiAg
ICB7CiAgICAgIGlmICgoKGVudW0gdHJlZV9jb2RlKSAob2xkZGVjbCktPmNvbW1vbi5jb2RlKSA9
PSBGVU5DVElPTl9ERUNMCiAgICAgICAgICAmJiAoKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRy
ZWUgX190ID0gb2xkZGVjbDsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29k
ZSkgIT0gKEZVTkNUSU9OX0RFQ0wpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBGVU5DVElPTl9E
RUNMLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE0ODIsIF9fRlVOQ1RJT05fXyk7IF9fdDsg
fSktPmRlY2wuYnVpbHRfaW5fY2xhc3MpICE9IE5PVF9CVUlMVF9JTikKICAgICAgICAgICAgICB8
fCAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG9sZGRlY2w7IGlmICgoKGVudW0g
dHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChGVU5DVElPTl9ERUNMKSkgdHJlZV9j
aGVja19mYWlsZWQgKF9fdCwgRlVOQ1RJT05fREVDTCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMi
LCAxNDgzLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5jb21tb24udW5zaWduZWRfZmxhZykpKQog
ICAgICAgIHsKCgoKICAgICAgICAgIGlmICghKChuZXdkZWNsKS0+Y29tbW9uLnB1YmxpY19mbGFn
KSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICghd2Fybl9zaGFkb3cpCiAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgZWxzZSBpZiAoKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0
IHRyZWUgX190ID0gb2xkZGVjbDsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24u
Y29kZSkgIT0gKEZVTkNUSU9OX0RFQ0wpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBGVU5DVElP
Tl9ERUNMLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE0OTIsIF9fRlVOQ1RJT05fXyk7IF9f
dDsgfSktPmRlY2wuYnVpbHRfaW5fY2xhc3MpICE9IE5PVF9CVUlMVF9JTikpCiAgICAgICAgICAg
ICAgICB3YXJuaW5nX3dpdGhfZGVjbCAobmV3ZGVjbCwgInNoYWRvd2luZyBidWlsdC1pbiBmdW5j
dGlvbiBgJXMnIik7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgd2FybmluZ193
aXRoX2RlY2wgKG5ld2RlY2wsICJzaGFkb3dpbmcgbGlicmFyeSBmdW5jdGlvbiBgJXMnIik7CiAg
ICAgICAgICAgIH0KCgogICAgICAgICAgZWxzZSBpZiAoISAoKF9fZXh0ZW5zaW9uX18gKHsgY29u
c3QgdHJlZSBfX3QgPSBvbGRkZWNsOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1v
bi5jb2RlKSAhPSAoRlVOQ1RJT05fREVDTCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIEZVTkNU
SU9OX0RFQ0wsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTQ5OSwgX19GVU5DVElPTl9fKTsg
X190OyB9KS0+ZGVjbC5idWlsdF9pbl9jbGFzcykgIT0gTk9UX0JVSUxUX0lOKSkKICAgICAgICAg
ICAgd2FybmluZ193aXRoX2RlY2wgKG5ld2RlY2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAibGlicmFyeSBmdW5jdGlvbiBgJXMnIGRlY2xhcmVkIGFzIG5vbi1mdW5jdGlvbiIpOwoK
ICAgICAgICAgIGVsc2UgaWYgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gb2xk
ZGVjbDsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKEZVTkNU
SU9OX0RFQ0wpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBGVU5DVElPTl9ERUNMLCAiLi4vLi4v
Z2NjL2djYy9jLWRlY2wuYyIsIDE1MDMsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmNvbW1vbi51
bnNpZ25lZF9mbGFnKSkKICAgICAgICAgICAgd2FybmluZ193aXRoX2RlY2wgKG5ld2RlY2wsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnVpbHQtaW4gZnVuY3Rpb24gYCVzJyBkZWNs
YXJlZCBhcyBub24tZnVuY3Rpb24iKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgd2Fybmlu
Z193aXRoX2RlY2wgKG5ld2RlY2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnVp
bHQtaW4gZnVuY3Rpb24gYCVzJyBkZWNsYXJlZCBhcyBub24tZnVuY3Rpb24iKTsKICAgICAgICB9
CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBlcnJvcl93aXRoX2RlY2wgKG5ld2RlY2ws
ICJgJXMnIHJlZGVjbGFyZWQgYXMgZGlmZmVyZW50IGtpbmQgb2Ygc3ltYm9sIik7CiAgICAgICAg
ICBlcnJvcl93aXRoX2RlY2wgKG9sZGRlY2wsICJwcmV2aW91cyBkZWNsYXJhdGlvbiBvZiBgJXMn
Iik7CiAgICAgICAgfQoKICAgICAgcmV0dXJuIDA7CiAgICB9CgoKCiAgaWYgKHR5cGVzX21hdGNo
ICYmICgoZW51bSB0cmVlX2NvZGUpIChuZXdkZWNsKS0+Y29tbW9uLmNvZGUpID09IFBBUk1fREVD
TAogICAgICAmJiAoKG9sZGRlY2wpLT5jb21tb24uYXNtX3dyaXR0ZW5fZmxhZykgJiYgISAoKG5l
d2RlY2wpLT5jb21tb24uYXNtX3dyaXR0ZW5fZmxhZykpCiAgICByZXR1cm4gMTsKCgoKCgoKICBp
ZiAoZmxhZ190cmFkaXRpb25hbCAmJiAoKGVudW0gdHJlZV9jb2RlKSAobmV3ZGVjbCktPmNvbW1v
bi5jb2RlKSA9PSBGVU5DVElPTl9ERUNMCiAgICAgICYmICgoKHN0cnVjdCBsYW5nX2lkZW50aWZp
ZXIgKikgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gbmV3ZGVjbDsgaWYgKHRy
ZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUp
KV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2dj
Yy9nY2MvYy1kZWNsLmMiLCAxNTMxLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLm5hbWUp
KSktPmltcGxpY2l0X2RlY2wpID09IG9sZGRlY2wKICAgICAgJiYgKF9fZXh0ZW5zaW9uX18gKHsg
Y29uc3QgdHJlZSBfX3QgPSBvbGRkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51
bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19j
aGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE1MzIsIF9f
RlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5pdGlhbCkgPT0gMCkKCgogICAgOwogIGVsc2Ug
aWYgKCgoZW51bSB0cmVlX2NvZGUpIChvbGRkZWNsKS0+Y29tbW9uLmNvZGUpID09IEZVTkNUSU9O
X0RFQ0wKICAgICAgICAgICAmJiAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBv
bGRkZWNsOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoRlVO
Q1RJT05fREVDTCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIEZVTkNUSU9OX0RFQ0wsICIuLi8u
Li9nY2MvZ2NjL2MtZGVjbC5jIiwgMTUzNywgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5i
dWlsdF9pbl9jbGFzcykgIT0gTk9UX0JVSUxUX0lOKSkKICAgIHsKCiAgICAgIGlmICghKChuZXdk
ZWNsKS0+Y29tbW9uLnB1YmxpY19mbGFnKSkKICAgICAgICB7CgoKCiAgICAgICAgICBpZiAod2Fy
bl9zaGFkb3cpCiAgICAgICAgICAgIHdhcm5pbmdfd2l0aF9kZWNsIChuZXdkZWNsLCAic2hhZG93
aW5nIGJ1aWx0LWluIGZ1bmN0aW9uIGAlcyciKTsKCiAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICB9CiAgICAgIGVsc2UgaWYgKCF0eXBlc19tYXRjaCkKICAgICAgICB7CgogICAgICAgICAgdHJl
ZSBvbGRyZXR1cm50eXBlID0gKChvbGR0eXBlKS0+Y29tbW9uLnR5cGUpOwogICAgICAgICAgdHJl
ZSBuZXdyZXR1cm50eXBlID0gKChuZXd0eXBlKS0+Y29tbW9uLnR5cGUpOwoKICAgICAgICAgIGlm
ICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG9sZHJldHVybnR5cGU7IGlmICh0
cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2Rl
KSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9n
Y2MvZ2NjL2MtZGVjbC5jIiwgMTU1NiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5tb2Rl
KSA9PSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG5ld3JldHVybnR5cGU7IGlm
ICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5j
b2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8u
Li9nY2MvZ2NjL2MtZGVjbC5jIiwgMTU1NiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5t
b2RlKSkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdHJlZSB0cnl0eXBlCiAgICAgICAg
ICAgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKG5ld3JldHVybnR5cGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUg
X190ID0gb2xkdHlwZTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2Rl
KSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVk
IChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxNTYyLCBfX0ZVTkNUSU9OX18p
OyBfX3Q7IH0pLT50eXBlLnZhbHVlcykpOwoKICAgICAgICAgICAgICB0eXBlc19tYXRjaCA9IGNv
bXB0eXBlcyAobmV3dHlwZSwgdHJ5dHlwZSk7CiAgICAgICAgICAgICAgaWYgKHR5cGVzX21hdGNo
KQogICAgICAgICAgICAgICAgb2xkdHlwZSA9IHRyeXR5cGU7CiAgICAgICAgICAgIH0KCgogICAg
ICAgICAgaWYgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gKChuZXdkZWNsKS0+
Y29tbW9uLnR5cGUpOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUp
IChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQg
KF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE1NzAsIF9fRlVOQ1RJT05fXyk7
IF9fdDsgfSktPnR5cGUudmFsdWVzKSAhPSAwCiAgICAgICAgICAgICAgJiYgKF9fZXh0ZW5zaW9u
X18gKHsgY29uc3QgdHJlZSBfX3QgPSBvbGR0eXBlOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkg
KCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9j
bGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE1
NzEsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUudmFsdWVzKSAhPSAwCiAgICAgICAgICAg
ICAgJiYgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSAoX19leHRlbnNpb25fXyAo
eyBjb25zdCB0cmVlIF9fdCA9IG5ld3R5cGU7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChl
bnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNz
X2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTU3Miwg
X19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS52YWx1ZXMpOyBpZiAoKChlbnVtIHRyZWVfY29k
ZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoVFJFRV9MSVNUKSkgdHJlZV9jaGVja19mYWlsZWQg
KF9fdCwgVFJFRV9MSVNULCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE1NzIsIF9fRlVOQ1RJ
T05fXyk7IF9fdDsgfSktPmxpc3QudmFsdWUpICE9IDAKICAgICAgICAgICAgICAmJiAoX19leHRl
bnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUg
X190ID0gb2xkdHlwZTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2Rl
KSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVk
IChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxNTczLCBfX0ZVTkNUSU9OX18p
OyBfX3Q7IH0pLT50eXBlLnZhbHVlcyk7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29t
bW9uLmNvZGUpICE9IChUUkVFX0xJU1QpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBUUkVFX0xJ
U1QsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTU3MywgX19GVU5DVElPTl9fKTsgX190OyB9
KS0+bGlzdC52YWx1ZSkgIT0gMAogICAgICAgICAgICAgICYmICgoX19leHRlbnNpb25fXyAoeyBj
b25zdCB0cmVlIF9fdCA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gKF9fZXh0
ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBuZXd0eXBlOyBpZiAodHJlZV9jb2RlX3R5cGVb
KGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkg
dHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wu
YyIsIDE1NzQsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUudmFsdWVzKTsgaWYgKCgoZW51
bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKFRSRUVfTElTVCkpIHRyZWVfY2hl
Y2tfZmFpbGVkIChfX3QsIFRSRUVfTElTVCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxNTc0
LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5saXN0LnZhbHVlKTsgaWYgKHRyZWVfY29kZV90eXBl
WyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0Jykp
IHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNs
LmMiLCAxNTc0LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLm1vZGUpCiAgICAgICAgICAg
ICAgICAgID09IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gKF9fZXh0ZW5zaW9u
X18gKHsgY29uc3QgdHJlZSBfX3QgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9
IG9sZHR5cGU7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9f
dCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190
LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTU3NSwgX19GVU5DVElPTl9fKTsgX190
OyB9KS0+dHlwZS52YWx1ZXMpOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5j
b2RlKSAhPSAoVFJFRV9MSVNUKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgVFJFRV9MSVNULCAi
Li4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE1NzUsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmxp
c3QudmFsdWUpOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChf
X3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9f
dCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE1NzUsIF9fRlVOQ1RJT05fXyk7IF9f
dDsgfSktPnR5cGUubW9kZSkpKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0cmVlIHRy
eXR5cGUKICAgICAgICAgICAgICAgID0gYnVpbGRfZnVuY3Rpb25fdHlwZSAoKChvbGR0eXBlKS0+
Y29tbW9uLnR5cGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmVl
X2NvbnMgKCh0cmVlKSAoKHZvaWQgKikwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IChf
X2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gbmV3dHlwZTsgaWYgKHRyZWVfY29kZV90
eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0
JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1k
ZWNsLmMiLCAxNTgyLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLnZhbHVlcyk7IGlmICgo
KGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChUUkVFX0xJU1QpKSB0cmVl
X2NoZWNrX2ZhaWxlZCAoX190LCBUUkVFX0xJU1QsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwg
MTU4MiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+bGlzdC52YWx1ZSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoX19leHRlbnNpb25fXyAoeyBj
b25zdCB0cmVlIF9fdCA9IG9sZHR5cGU7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVt
IHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2No
ZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTU4MywgX19G
VU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS52YWx1ZXMpKS0+Y29tbW9uLmNoYWluKSkpOwoKICAg
ICAgICAgICAgICB0eXBlc19tYXRjaCA9IGNvbXB0eXBlcyAobmV3dHlwZSwgdHJ5dHlwZSk7CiAg
ICAgICAgICAgICAgaWYgKHR5cGVzX21hdGNoKQogICAgICAgICAgICAgICAgb2xkdHlwZSA9IHRy
eXR5cGU7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmICghIGRpZmZlcmVudF9iaW5kaW5nX2xl
dmVsKQogICAgICAgICAgICAoKG9sZGRlY2wpLT5jb21tb24udHlwZSkgPSBvbGR0eXBlOwogICAg
ICAgIH0KICAgICAgaWYgKCF0eXBlc19tYXRjaCkKICAgICAgICB7CgogICAgICAgICAgd2Fybmlu
Z193aXRoX2RlY2wgKG5ld2RlY2wsICJjb25mbGljdGluZyB0eXBlcyBmb3IgYnVpbHQtaW4gZnVu
Y3Rpb24gYCVzJyIpOwogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgfQogIGVsc2Ug
aWYgKCgoZW51bSB0cmVlX2NvZGUpIChvbGRkZWNsKS0+Y29tbW9uLmNvZGUpID09IEZVTkNUSU9O
X0RFQ0wKICAgICAgICAgICAmJiAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG9s
ZGRlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCkt
PmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAn
ZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTYwMCwgX19GVU5DVElPTl9fKTsgX190OyB9
KS0+ZGVjbC5saW5lbnVtKSA9PSAwKQogICAgewoKCiAgICAgIGlmICghKChuZXdkZWNsKS0+Y29t
bW9uLnB1YmxpY19mbGFnKSkKICAgICAgICB7CgoKICAgICAgICAgIHJldHVybiAwOwogICAgICAg
IH0KICAgICAgZWxzZSBpZiAoIXR5cGVzX21hdGNoKQogICAgICAgIHsKCgoKICAgICAgICAgICgo
bmV3ZGVjbCktPmNvbW1vbi52b2xhdGlsZV9mbGFnKSB8PSAoKG9sZGRlY2wpLT5jb21tb24udm9s
YXRpbGVfZmxhZyk7CiAgICAgICAgfQogICAgfQoKCiAgZWxzZSBpZiAoIXR5cGVzX21hdGNoCiAg
ICAgICAgICAgJiYgKChlbnVtIHRyZWVfY29kZSkgKG9sZGRlY2wpLT5jb21tb24uY29kZSkgPT0g
RlVOQ1RJT05fREVDTAogICAgICAgICAgICYmICgoZW51bSB0cmVlX2NvZGUpIChuZXdkZWNsKS0+
Y29tbW9uLmNvZGUpID09IEZVTkNUSU9OX0RFQ0wKICAgICAgICAgICAmJiAoKGVudW0gdHJlZV9j
b2RlKSAoKChvbGR0eXBlKS0+Y29tbW9uLnR5cGUpKS0+Y29tbW9uLmNvZGUpID09IFBPSU5URVJf
VFlQRQogICAgICAgICAgICYmICgoZW51bSB0cmVlX2NvZGUpICgoKG5ld3R5cGUpLT5jb21tb24u
dHlwZSkpLT5jb21tb24uY29kZSkgPT0gUE9JTlRFUl9UWVBFCiAgICAgICAgICAgJiYgKChfX2V4
dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gb2xkZGVjbDsgaWYgKHRyZWVfY29kZV90eXBl
WyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykp
IHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNs
LmMiLCAxNjI1LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmluX3N5c3RlbV9oZWFkZXJf
ZmxhZykKICAgICAgICAgICAgICAgfHwgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3Qg
PSBuZXdkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChf
X3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9f
dCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE2MjYsIF9fRlVOQ1RJT05fXyk7IF9f
dDsgfSktPmRlY2wuaW5fc3lzdGVtX2hlYWRlcl9mbGFnKSkKICAgICAgICAgICAmJiAoKChfX2V4
dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gKCgoKG5ld3R5cGUpLT5jb21tb24udHlwZSkp
LT5jb21tb24udHlwZSk7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29k
ZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxl
ZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTYyNywgX19GVU5DVElPTl9f
KTsgX190OyB9KS0+dHlwZS5tYWluX3ZhcmlhbnQpID09IGdsb2JhbF90cmVlc1tUSV9WT0lEX1RZ
UEVdCiAgICAgICAgICAgICAgICAmJiAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9
IG9sZHR5cGU7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9f
dCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190
LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTYyOCwgX19GVU5DVElPTl9fKTsgX190
OyB9KS0+dHlwZS52YWx1ZXMpID09IDAKICAgICAgICAgICAgICAgICYmIHNlbGZfcHJvbW90aW5n
X2FyZ3NfcCAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBuZXd0eXBlOyBpZiAo
dHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29k
ZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4v
Z2NjL2djYy9jLWRlY2wuYyIsIDE2MjksIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUudmFs
dWVzKSkKICAgICAgICAgICAgICAgICYmICgoKChvbGR0eXBlKS0+Y29tbW9uLnR5cGUpKS0+Y29t
bW9uLnR5cGUpID09IGludGVnZXJfdHlwZXNbaXRrX2NoYXJdKQogICAgICAgICAgICAgICB8fAog
ICAgICAgICAgICAgICAoKCgoKG5ld3R5cGUpLT5jb21tb24udHlwZSkpLT5jb21tb24udHlwZSkg
PT0gaW50ZWdlcl90eXBlc1tpdGtfY2hhcl0KICAgICAgICAgICAgICAgICYmIChfX2V4dGVuc2lv
bl9fICh7IGNvbnN0IHRyZWUgX190ID0gbmV3dHlwZTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQp
ICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVf
Y2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAx
NjMzLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLnZhbHVlcykgPT0gMAogICAgICAgICAg
ICAgICAgJiYgc2VsZl9wcm9tb3RpbmdfYXJnc19wICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0
cmVlIF9fdCA9IG9sZHR5cGU7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVf
Y29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2Zh
aWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTYzNCwgX19GVU5DVElP
Tl9fKTsgX190OyB9KS0+dHlwZS52YWx1ZXMpKQogICAgICAgICAgICAgICAgJiYgKF9fZXh0ZW5z
aW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSAoKCgob2xkdHlwZSktPmNvbW1vbi50eXBlKSktPmNv
bW1vbi50eXBlKTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAo
X190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChf
X3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxNjM1LCBfX0ZVTkNUSU9OX18pOyBf
X3Q7IH0pLT50eXBlLm1haW5fdmFyaWFudCkgPT0gZ2xvYmFsX3RyZWVzW1RJX1ZPSURfVFlQRV0p
KSkKICAgIHsKICAgICAgaWYgKHBlZGFudGljKQogICAgICAgIHBlZHdhcm5fd2l0aF9kZWNsIChu
ZXdkZWNsLCAiY29uZmxpY3RpbmcgdHlwZXMgZm9yIGAlcyciKTsKCiAgICAgIGlmICgoX19leHRl
bnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9ICgoKChvbGR0eXBlKS0+Y29tbW9uLnR5cGUpKS0+
Y29tbW9uLnR5cGUpOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUp
IChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQg
KF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE2NDAsIF9fRlVOQ1RJT05fXyk7
IF9fdDsgfSktPnR5cGUubWFpbl92YXJpYW50KSA9PSBnbG9iYWxfdHJlZXNbVElfVk9JRF9UWVBF
XSkKICAgICAgICAoKG5ld2RlY2wpLT5jb21tb24udHlwZSkgPSBuZXd0eXBlID0gb2xkdHlwZTsK
CgoKICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBuZXdkZWNsOyBpZiAo
dHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29k
ZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4v
Z2NjL2djYy9jLWRlY2wuYyIsIDE2NDUsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5f
c3lzdGVtX2hlYWRlcl9mbGFnKSA9IDE7CiAgICB9CiAgZWxzZSBpZiAoIXR5cGVzX21hdGNoCgoK
ICAgICAgICAgICAmJiAhICgoKGVudW0gdHJlZV9jb2RlKSAob2xkZGVjbCktPmNvbW1vbi5jb2Rl
KSA9PSBGVU5DVElPTl9ERUNMCiAgICAgICAgICAgICAgICAgJiYgISBwZWRhbnRpYwoKICAgICAg
ICAgICAgICAgICAmJiBjb21wdHlwZXMgKCgob2xkdHlwZSktPmNvbW1vbi50eXBlKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICgobmV3dHlwZSktPmNvbW1vbi50eXBlKSkKICAgICAg
ICAgICAgICAgICAmJiAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG5ld3R5cGU7
IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1v
bi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIu
Li8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTY1NSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlw
ZS52YWx1ZXMpID09IDApKQogICAgewogICAgICBlcnJvcl93aXRoX2RlY2wgKG5ld2RlY2wsICJj
b25mbGljdGluZyB0eXBlcyBmb3IgYCVzJyIpOwoKCiAgICAgIGlmICgoKGVudW0gdHJlZV9jb2Rl
KSAob2xkZGVjbCktPmNvbW1vbi5jb2RlKSA9PSBGVU5DVElPTl9ERUNMCiAgICAgICAgICAmJiBj
b21wdHlwZXMgKCgob2xkdHlwZSktPmNvbW1vbi50eXBlKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgKChuZXd0eXBlKS0+Y29tbW9uLnR5cGUpKQogICAgICAgICAgJiYgKCgoX19leHRlbnNpb25f
XyAoeyBjb25zdCB0cmVlIF9fdCA9IG9sZHR5cGU7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAo
KChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2Ns
YXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTY2
MywgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS52YWx1ZXMpID09IDAKICAgICAgICAgICAg
ICAgJiYgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBvbGRkZWNsOyBpZiAodHJl
ZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkp
XSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2Nj
L2djYy9jLWRlY2wuYyIsIDE2NjQsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5pdGlh
bCkgPT0gMCkKICAgICAgICAgICAgICB8fAogICAgICAgICAgICAgICgoX19leHRlbnNpb25fXyAo
eyBjb25zdCB0cmVlIF9fdCA9IG5ld3R5cGU7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChl
bnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNz
X2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTY2Niwg
X19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS52YWx1ZXMpID09IDAKICAgICAgICAgICAgICAg
JiYgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBuZXdkZWNsOyBpZiAodHJlZV9j
b2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAh
PSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2dj
Yy9jLWRlY2wuYyIsIDE2NjcsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5pdGlhbCkg
PT0gMCkpKQogICAgICAgIHsKCiAgICAgICAgICByZWdpc3RlciB0cmVlIHQgPSAoX19leHRlbnNp
b25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG9sZHR5cGU7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50
KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVl
X2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwg
MTY3MCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS52YWx1ZXMpOwogICAgICAgICAgaWYg
KHQgPT0gMCkKICAgICAgICAgICAgdCA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190
ID0gbmV3dHlwZTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAo
X190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChf
X3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxNjcyLCBfX0ZVTkNUSU9OX18pOyBf
X3Q7IH0pLT50eXBlLnZhbHVlcyk7CiAgICAgICAgICBmb3IgKDsgdDsgdCA9ICgodCktPmNvbW1v
bi5jaGFpbikpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICByZWdpc3RlciB0cmVlIHR5cGUg
PSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHQ7IGlmICgoKGVudW0gdHJlZV9j
b2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChUUkVFX0xJU1QpKSB0cmVlX2NoZWNrX2ZhaWxl
ZCAoX190LCBUUkVFX0xJU1QsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTY3NSwgX19GVU5D
VElPTl9fKTsgX190OyB9KS0+bGlzdC52YWx1ZSk7CgogICAgICAgICAgICAgIGlmICgoKHQpLT5j
b21tb24uY2hhaW4pID09IDAKICAgICAgICAgICAgICAgICAgJiYgKF9fZXh0ZW5zaW9uX18gKHsg
Y29uc3QgdHJlZSBfX3QgPSB0eXBlOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0
cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVj
a19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE2NzgsIF9fRlVO
Q1RJT05fXyk7IF9fdDsgfSktPnR5cGUubWFpbl92YXJpYW50KSAhPSBnbG9iYWxfdHJlZXNbVElf
Vk9JRF9UWVBFXSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgZXJyb3IgKCJB
IHBhcmFtZXRlciBsaXN0IHdpdGggYW4gZWxsaXBzaXMgY2FuJ3QgbWF0Y2ggYW4gZW1wdHkgcGFy
YW1ldGVyIG5hbWUgbGlzdCBkZWNsYXJhdGlvbi4iKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIGlmIChzaW1wbGVfdHlwZV9wcm9tb3Rl
c190byAodHlwZSkgIT0gKHRyZWUpICgodm9pZCAqKTApKQogICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICBlcnJvciAoIkFuIGFyZ3VtZW50IHR5cGUgdGhhdCBoYXMgYSBkZWZhdWx0
IHByb21vdGlvbiBjYW4ndCBtYXRjaCBhbiBlbXB0eSBwYXJhbWV0ZXIgbmFtZSBsaXN0IGRlY2xh
cmF0aW9uLiIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgZXJyb3Jfd2l0aF9kZWNsIChvbGRkZWNsLCAicHJl
dmlvdXMgZGVjbGFyYXRpb24gb2YgYCVzJyIpOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgZXJy
bXNnID0gcmVkZWNsYXJhdGlvbl9lcnJvcl9tZXNzYWdlIChuZXdkZWNsLCBvbGRkZWNsKTsKICAg
ICAgaWYgKGVycm1zZykKICAgICAgICB7CiAgICAgICAgICBzd2l0Y2ggKGVycm1zZykKICAgICAg
ICAgICAgewogICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgZXJyb3Jfd2l0aF9kZWNs
IChuZXdkZWNsLCAicmVkZWZpbml0aW9uIG9mIGAlcyciKTsKICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIGVycm9yX3dpdGhfZGVjbCAobmV3ZGVj
bCwgInJlZGVjbGFyYXRpb24gb2YgYCVzJyIpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgZXJyb3Jfd2l0aF9kZWNsIChuZXdkZWNsLCAiY29u
ZmxpY3RpbmcgZGVjbGFyYXRpb25zIG9mIGAlcyciKTsKICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICBmYW5jeV9hYm9ydCAoIi4uLy4uL2djYy9n
Y2MvYy1kZWNsLmMiLCAxNzEwLCBfX0ZVTkNUSU9OX18pOwogICAgICAgICAgICB9CgogICAgICAg
ICAgZXJyb3Jfd2l0aF9kZWNsIChvbGRkZWNsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAo
KChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gb2xkZGVjbDsgaWYgKHRyZWVfY29k
ZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0g
KCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2Mv
Yy1kZWNsLmMiLCAxNzE0LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmluaXRpYWwpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY3VycmVudF9iaW5kaW5nX2xldmVsID09IGds
b2JhbF9iaW5kaW5nX2xldmVsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAiYCVzJyBw
cmV2aW91c2x5IGRlZmluZWQgaGVyZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogImAl
cycgcHJldmlvdXNseSBkZWNsYXJlZCBoZXJlIikpOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAo
KChlbnVtIHRyZWVfY29kZSkgKG5ld2RlY2wpLT5jb21tb24uY29kZSkgPT0gVFlQRV9ERUNMCiAg
ICAgICAgICAgICAgICYmICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG9sZGRl
Y2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNv
bW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcs
ICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTcyMCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+
ZGVjbC5pbl9zeXN0ZW1faGVhZGVyX2ZsYWcpCiAgICAgICAgICAgICAgICAgICB8fCAoX19leHRl
bnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG5ld2RlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVso
aW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0
cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5j
IiwgMTcyMSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5pbl9zeXN0ZW1faGVhZGVyX2Zs
YWcpKSkKICAgICAgICB7CiAgICAgICAgICB3YXJuaW5nX3dpdGhfZGVjbCAobmV3ZGVjbCwgInJl
ZGVmaW5pdGlvbiBvZiBgJXMnIik7CiAgICAgICAgICB3YXJuaW5nX3dpdGhfZGVjbAogICAgICAg
ICAgICAob2xkZGVjbCwKICAgICAgICAgICAgICgoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJl
ZSBfX3QgPSBvbGRkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2Nv
ZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWls
ZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE3MjYsIF9fRlVOQ1RJT05f
Xyk7IF9fdDsgfSktPmRlY2wuaW5pdGlhbCkKICAgICAgICAgICAgICAgJiYgY3VycmVudF9iaW5k
aW5nX2xldmVsID09IGdsb2JhbF9iaW5kaW5nX2xldmVsKQogICAgICAgICAgICAgID8gImAlcycg
cHJldmlvdXNseSBkZWZpbmVkIGhlcmUiCiAgICAgICAgICAgICAgOiAiYCVzJyBwcmV2aW91c2x5
IGRlY2xhcmVkIGhlcmUiKSk7CiAgICAgICAgfQogICAgICBlbHNlIGlmICgoKGVudW0gdHJlZV9j
b2RlKSAob2xkZGVjbCktPmNvbW1vbi5jb2RlKSA9PSBGVU5DVElPTl9ERUNMCiAgICAgICAgICAg
ICAgICYmIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gb2xkZGVjbDsgaWYgKHRy
ZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUp
KV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2dj
Yy9nY2MvYy1kZWNsLmMiLCAxNzMyLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmluaXRp
YWwpICE9IDAKICAgICAgICAgICAgICAgJiYgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBf
X3QgPSBvbGR0eXBlOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUp
IChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQg
KF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE3MzMsIF9fRlVOQ1RJT05fXyk7
IF9fdDsgfSktPnR5cGUudmFsdWVzKSA9PSAwCiAgICAgICAgICAgICAgICYmIChfX2V4dGVuc2lv
bl9fICh7IGNvbnN0IHRyZWUgX190ID0gbmV3dHlwZTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQp
ICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVf
Y2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAx
NzM0LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLnZhbHVlcykgIT0gMAogICAgICAgICAg
ICAgICAmJiAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG9sZHR5cGU7IGlmICh0
cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2Rl
KSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9n
Y2MvZ2NjL2MtZGVjbC5jIiwgMTczNSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5ub25j
b3BpZWRfcGFydHMpICE9IDApCiAgICAgICAgewogICAgICAgICAgcmVnaXN0ZXIgdHJlZSB0eXBl
LCBwYXJtOwogICAgICAgICAgcmVnaXN0ZXIgaW50IG5hcmdzOwoKCiAgICAgICAgICBmb3IgKHBh
cm0gPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG9sZHR5cGU7IGlmICh0cmVl
X2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSld
ICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2Mv
Z2NjL2MtZGVjbC5jIiwgMTc0MSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5ub25jb3Bp
ZWRfcGFydHMpLAogICAgICAgICAgICAgICB0eXBlID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3Qg
dHJlZSBfX3QgPSBuZXd0eXBlOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVl
X2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19m
YWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE3NDIsIF9fRlVOQ1RJ
T05fXyk7IF9fdDsgfSktPnR5cGUudmFsdWVzKSwKICAgICAgICAgICAgICAgbmFyZ3MgPSAxOwog
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgIHBhcm0gPSAoKHBhcm0pLT5jb21tb24uY2hh
aW4pLCB0eXBlID0gKCh0eXBlKS0+Y29tbW9uLmNoYWluKSwgbmFyZ3MrKykKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIGlmICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IChf
X2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gcGFybTsgaWYgKCgoZW51bSB0cmVlX2Nv
ZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKFRSRUVfTElTVCkpIHRyZWVfY2hlY2tfZmFpbGVk
IChfX3QsIFRSRUVfTElTVCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxNzQ3LCBfX0ZVTkNU
SU9OX18pOyBfX3Q7IH0pLT5saXN0LnZhbHVlKTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgo
KGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xh
c3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxNzQ3
LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLm1haW5fdmFyaWFudCkgPT0gZ2xvYmFsX3Ry
ZWVzW1RJX1ZPSURfVFlQRV0KICAgICAgICAgICAgICAgICAgJiYgKF9fZXh0ZW5zaW9uX18gKHsg
Y29uc3QgdHJlZSBfX3QgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHR5cGU7
IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChUUkVFX0xJU1Qp
KSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBUUkVFX0xJU1QsICIuLi8uLi9nY2MvZ2NjL2MtZGVj
bC5jIiwgMTc0OCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+bGlzdC52YWx1ZSk7IGlmICh0cmVl
X2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSld
ICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2Mv
Z2NjL2MtZGVjbC5jIiwgMTc0OCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5tYWluX3Zh
cmlhbnQpID09IGdsb2JhbF90cmVlc1tUSV9WT0lEX1RZUEVdKQogICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICB3YXJuaW5nX3dpdGhfZGVjbCAobmV3ZGVjbCwgInByb3RvdHlwZSBm
b3IgYCVzJyBmb2xsb3dzIik7CiAgICAgICAgICAgICAgICAgIHdhcm5pbmdfd2l0aF9kZWNsIChv
bGRkZWNsLCAibm9uLXByb3RvdHlwZSBkZWZpbml0aW9uIGhlcmUiKTsKICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKChfX2V4dGVuc2lv
bl9fICh7IGNvbnN0IHRyZWUgX190ID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3Qg
PSBwYXJtOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoVFJF
RV9MSVNUKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgVFJFRV9MSVNULCAiLi4vLi4vZ2NjL2dj
Yy9jLWRlY2wuYyIsIDE3NTQsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmxpc3QudmFsdWUpOyBp
ZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24u
Y29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4v
Li4vZ2NjL2djYy9jLWRlY2wuYyIsIDE3NTQsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUu
bWFpbl92YXJpYW50KSA9PSBnbG9iYWxfdHJlZXNbVElfVk9JRF9UWVBFXQogICAgICAgICAgICAg
ICAgICB8fCAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IChfX2V4dGVuc2lvbl9f
ICh7IGNvbnN0IHRyZWUgX190ID0gdHlwZTsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5j
b21tb24uY29kZSkgIT0gKFRSRUVfTElTVCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIFRSRUVf
TElTVCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxNzU1LCBfX0ZVTkNUSU9OX18pOyBfX3Q7
IH0pLT5saXN0LnZhbHVlKTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9j
b2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFp
bGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxNzU1LCBfX0ZVTkNUSU9O
X18pOyBfX3Q7IH0pLT50eXBlLm1haW5fdmFyaWFudCkgPT0gZ2xvYmFsX3RyZWVzW1RJX1ZPSURf
VFlQRV0pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGVycm9yX3dpdGhfZGVj
bCAobmV3ZGVjbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvdG90eXBl
IGZvciBgJXMnIGZvbGxvd3MgYW5kIG51bWJlciBvZiBhcmd1bWVudHMgZG9lc24ndCBtYXRjaCIp
OwogICAgICAgICAgICAgICAgICBlcnJvcl93aXRoX2RlY2wgKG9sZGRlY2wsICJub24tcHJvdG90
eXBlIGRlZmluaXRpb24gaGVyZSIpOwogICAgICAgICAgICAgICAgICBlcnJtc2cgPSAxOwogICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgIGlm
ICghIGNvbXB0eXBlcyAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBwYXJtOyBp
ZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoVFJFRV9MSVNUKSkg
dHJlZV9jaGVja19mYWlsZWQgKF9fdCwgVFJFRV9MSVNULCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wu
YyIsIDE3NjUsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmxpc3QudmFsdWUpLCAoX19leHRlbnNp
b25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHR5cGU7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190
KS0+Y29tbW9uLmNvZGUpICE9IChUUkVFX0xJU1QpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBU
UkVFX0xJU1QsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTc2NSwgX19GVU5DVElPTl9fKTsg
X190OyB9KS0+bGlzdC52YWx1ZSkpCgoKICAgICAgICAgICAgICAgICAgJiYgKCEgKGZsYWdfdHJh
ZGl0aW9uYWwKICAgICAgICAgICAgICAgICAgICAgICAgICYmIChfX2V4dGVuc2lvbl9fICh7IGNv
bnN0IHRyZWUgX190ID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBwYXJtOyBp
ZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoVFJFRV9MSVNUKSkg
dHJlZV9jaGVja19mYWlsZWQgKF9fdCwgVFJFRV9MSVNULCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wu
YyIsIDE3NjksIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmxpc3QudmFsdWUpOyBpZiAodHJlZV9j
b2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAh
PSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2dj
Yy9jLWRlY2wuYyIsIDE3NjksIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUubWFpbl92YXJp
YW50KSA9PSBpbnRlZ2VyX3R5cGVzW2l0a19pbnRdCiAgICAgICAgICAgICAgICAgICAgICAgICAm
JiAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IChfX2V4dGVuc2lvbl9fICh7IGNv
bnN0IHRyZWUgX190ID0gdHlwZTsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24u
Y29kZSkgIT0gKFRSRUVfTElTVCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIFRSRUVfTElTVCwg
Ii4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxNzcwLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5s
aXN0LnZhbHVlKTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAo
X190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChf
X3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxNzcwLCBfX0ZVTkNUSU9OX18pOyBf
X3Q7IH0pLT50eXBlLm1haW5fdmFyaWFudCkgPT0gaW50ZWdlcl90eXBlc1tpdGtfdW5zaWduZWRf
aW50XSkpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBlcnJvcl93aXRoX2Rl
Y2wgKG5ld2RlY2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3RvdHlw
ZSBmb3IgYCVzJyBmb2xsb3dzIGFuZCBhcmd1bWVudCAlZCBkb2Vzbid0IG1hdGNoIiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXJncyk7CiAgICAgICAgICAgICAgICAgIGVy
cm9yX3dpdGhfZGVjbCAob2xkZGVjbCwgIm5vbi1wcm90b3R5cGUgZGVmaW5pdGlvbiBoZXJlIik7
CiAgICAgICAgICAgICAgICAgIGVycm1zZyA9IDE7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgZWxzZQogICAg
ICAgIHsKCgogICAgICAgICAgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChvbGRkZWNsKS0+Y29tbW9u
LmNvZGUpID09IEZVTkNUSU9OX0RFQ0wKICAgICAgICAgICAgICAmJiAhIChfX2V4dGVuc2lvbl9f
ICh7IGNvbnN0IHRyZWUgX190ID0gb2xkZGVjbDsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3Qp
LT5jb21tb24uY29kZSkgIT0gKEZVTkNUSU9OX0RFQ0wpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190
LCBGVU5DVElPTl9ERUNMLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE3ODcsIF9fRlVOQ1RJ
T05fXyk7IF9fdDsgfSktPmRlY2wuaW5saW5lX2ZsYWcpICYmIChfX2V4dGVuc2lvbl9fICh7IGNv
bnN0IHRyZWUgX190ID0gbmV3ZGVjbDsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21t
b24uY29kZSkgIT0gKEZVTkNUSU9OX0RFQ0wpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBGVU5D
VElPTl9ERUNMLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE3ODcsIF9fRlVOQ1RJT05fXyk7
IF9fdDsgfSktPmRlY2wuaW5saW5lX2ZsYWcpCiAgICAgICAgICAgICAgJiYgKChvbGRkZWNsKS0+
Y29tbW9uLnVzZWRfZmxhZykpCiAgICAgICAgICAgIHdhcm5pbmdfd2l0aF9kZWNsIChuZXdkZWNs
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImAlcycgZGVjbGFyZWQgaW5saW5lIGFm
dGVyIGJlaW5nIGNhbGxlZCIpOwogICAgICAgICAgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChvbGRk
ZWNsKS0+Y29tbW9uLmNvZGUpID09IEZVTkNUSU9OX0RFQ0wKICAgICAgICAgICAgICAmJiAhIChf
X2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gb2xkZGVjbDsgaWYgKCgoZW51bSB0cmVl
X2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKEZVTkNUSU9OX0RFQ0wpKSB0cmVlX2NoZWNr
X2ZhaWxlZCAoX190LCBGVU5DVElPTl9ERUNMLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE3
OTIsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5saW5lX2ZsYWcpICYmIChfX2V4dGVu
c2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gbmV3ZGVjbDsgaWYgKCgoZW51bSB0cmVlX2NvZGUp
IChfX3QpLT5jb21tb24uY29kZSkgIT0gKEZVTkNUSU9OX0RFQ0wpKSB0cmVlX2NoZWNrX2ZhaWxl
ZCAoX190LCBGVU5DVElPTl9ERUNMLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE3OTIsIF9f
RlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5saW5lX2ZsYWcpCiAgICAgICAgICAgICAgJiYg
KF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBvbGRkZWNsOyBpZiAodHJlZV9jb2Rl
X3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAo
J2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9j
LWRlY2wuYyIsIDE3OTMsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5pdGlhbCkgIT0g
MCkKICAgICAgICAgICAgd2FybmluZ193aXRoX2RlY2wgKG5ld2RlY2wsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiYCVzJyBkZWNsYXJlZCBpbmxpbmUgYWZ0ZXIgaXRzIGRlZmluaXRp
b24iKTsKCgoKICAgICAgICAgIGlmICgocGVkYW50aWMgfHwgKChlbnVtIHRyZWVfY29kZSkgKG9s
ZGRlY2wpLT5jb21tb24uY29kZSkgPT0gRlVOQ1RJT05fREVDTCkKICAgICAgICAgICAgICAmJiAo
KG9sZGRlY2wpLT5jb21tb24ucHVibGljX2ZsYWcpCiAgICAgICAgICAgICAgJiYgISgobmV3ZGVj
bCktPmNvbW1vbi5wdWJsaWNfZmxhZykpCiAgICAgICAgICAgIHdhcm5pbmdfd2l0aF9kZWNsIChu
ZXdkZWNsLCAic3RhdGljIGRlY2xhcmF0aW9uIGZvciBgJXMnIGZvbGxvd3Mgbm9uLXN0YXRpYyIp
OwoKCgogICAgICAgICAgaWYgKHdhcm5fdHJhZGl0aW9uYWwgJiYgIWluX3N5c3RlbV9oZWFkZXIK
ICAgICAgICAgICAgICAmJiAoKGVudW0gdHJlZV9jb2RlKSAob2xkZGVjbCktPmNvbW1vbi5jb2Rl
KSA9PSBGVU5DVElPTl9ERUNMCiAgICAgICAgICAgICAgJiYgISgob2xkZGVjbCktPmNvbW1vbi5w
dWJsaWNfZmxhZykKICAgICAgICAgICAgICAmJiAoKG5ld2RlY2wpLT5jb21tb24ucHVibGljX2Zs
YWcpKQogICAgICAgICAgICB3YXJuaW5nX3dpdGhfZGVjbCAobmV3ZGVjbCwgIm5vbi1zdGF0aWMg
ZGVjbGFyYXRpb24gZm9yIGAlcycgZm9sbG93cyBzdGF0aWMiKTsKCgoKICAgICAgICAgIGlmICgo
KGVudW0gdHJlZV9jb2RlKSAob2xkZGVjbCktPmNvbW1vbi5jb2RlKSAhPSBGVU5DVElPTl9ERUNM
CiAgICAgICAgICAgICAgJiYgISgob2xkZGVjbCktPmNvbW1vbi5yZWFkb25seV9mbGFnKQogICAg
ICAgICAgICAgICYmICgobmV3ZGVjbCktPmNvbW1vbi5yZWFkb25seV9mbGFnKSkKICAgICAgICAg
ICAgd2FybmluZ193aXRoX2RlY2wgKG5ld2RlY2wsICJjb25zdCBkZWNsYXJhdGlvbiBmb3IgYCVz
JyBmb2xsb3dzIG5vbi1jb25zdCIpOwoKCgogICAgICAgICAgZWxzZSBpZiAocGVkYW50aWMgJiYg
KChlbnVtIHRyZWVfY29kZSkgKG9sZGRlY2wpLT5jb21tb24uY29kZSkgIT0gRlVOQ1RJT05fREVD
TAogICAgICAgICAgICAgICYmICgoKG5ld2RlY2wpLT5jb21tb24ucmVhZG9ubHlfZmxhZykgIT0g
KChvbGRkZWNsKS0+Y29tbW9uLnJlYWRvbmx5X2ZsYWcpCiAgICAgICAgICAgICAgICAgIHx8ICgo
bmV3ZGVjbCktPmNvbW1vbi52b2xhdGlsZV9mbGFnKSAhPSAoKG9sZGRlY2wpLT5jb21tb24udm9s
YXRpbGVfZmxhZykpKQogICAgICAgICAgICBwZWR3YXJuX3dpdGhfZGVjbCAobmV3ZGVjbCwgInR5
cGUgcXVhbGlmaWVycyBmb3IgYCVzJyBjb25mbGljdCB3aXRoIHByZXZpb3VzIGRlY2wiKTsKICAg
ICAgICB9CiAgICB9CgoKICBpZiAoZXJybXNnID09IDAgJiYgd2Fybl9yZWR1bmRhbnRfZGVjbHMg
JiYgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBvbGRkZWNsOyBpZiAodHJlZV9j
b2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAh
PSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2dj
Yy9jLWRlY2wuYyIsIDE4MjksIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wubGluZW51bSkg
IT0gMAoKCiAgICAgICYmICEoKChlbnVtIHRyZWVfY29kZSkgKG5ld2RlY2wpLT5jb21tb24uY29k
ZSkgPT0gRlVOQ1RJT05fREVDTCAmJiAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9
IG5ld2RlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9f
dCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190
LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTgzMiwgX19GVU5DVElPTl9fKTsgX190
OyB9KS0+ZGVjbC5pbml0aWFsKSAhPSAwCiAgICAgICAgICAgJiYgKF9fZXh0ZW5zaW9uX18gKHsg
Y29uc3QgdHJlZSBfX3QgPSBvbGRkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51
bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19j
aGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE4MzMsIF9f
RlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5pdGlhbCkgPT0gMCkKCiAgICAgICYmICEoKF9f
ZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBvbGRkZWNsOyBpZiAodHJlZV9jb2RlX3R5
cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2Qn
KSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRl
Y2wuYyIsIDE4MzUsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuZXh0ZXJuYWxfZmxhZykg
JiYgISAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG5ld2RlY2w7IGlmICh0cmVl
X2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSld
ICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2Mv
Z2NjL2MtZGVjbC5jIiwgMTgzNSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5leHRlcm5h
bF9mbGFnKSkpCiAgICB7CiAgICAgIHdhcm5pbmdfd2l0aF9kZWNsIChuZXdkZWNsLCAicmVkdW5k
YW50IHJlZGVjbGFyYXRpb24gb2YgYCVzJyBpbiBzYW1lIHNjb3BlIik7CiAgICAgIHdhcm5pbmdf
d2l0aF9kZWNsIChvbGRkZWNsLCAicHJldmlvdXMgZGVjbGFyYXRpb24gb2YgYCVzJyIpOwogICAg
fQoKCgoKCgoKICBpZiAodHlwZXNfbWF0Y2gpCiAgICB7CgoKCiAgICAgIHRyZWUgd3JpdGVfb2xk
ZGVjbCA9IGRpZmZlcmVudF9iaW5kaW5nX2xldmVsID8gbmV3ZGVjbCA6IG9sZGRlY2w7CgoKICAg
ICAgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChuZXdkZWNsKS0+Y29tbW9uLmNvZGUpICE9IEZVTkNU
SU9OX0RFQ0wgfHwgISgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG9sZGRlY2w7
IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChGVU5DVElPTl9E
RUNMKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgRlVOQ1RJT05fREVDTCwgIi4uLy4uL2djYy9n
Y2MvYy1kZWNsLmMiLCAxODU1LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmJ1aWx0X2lu
X2NsYXNzKSAhPSBOT1RfQlVJTFRfSU4pKQogICAgICAgIHsKICAgICAgICAgIGlmIChkaWZmZXJl
bnRfYmluZGluZ19sZXZlbCkKICAgICAgICAgICAgKChuZXdkZWNsKS0+Y29tbW9uLnR5cGUpCiAg
ICAgICAgICAgICAgPSBidWlsZF90eXBlX2F0dHJpYnV0ZV92YXJpYW50CiAgICAgICAgICAgICAg
ICAobmV3dHlwZSwKICAgICAgICAgICAgICAgICBtZXJnZV9hdHRyaWJ1dGVzICgoX19leHRlbnNp
b25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG5ld3R5cGU7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50
KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVl
X2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwg
MTg2MSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5hdHRyaWJ1dGVzKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9f
dCA9IG9sZHR5cGU7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkg
KF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAo
X190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTg2MiwgX19GVU5DVElPTl9fKTsg
X190OyB9KS0+dHlwZS5hdHRyaWJ1dGVzKSkpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICAo
KG5ld2RlY2wpLT5jb21tb24udHlwZSkKICAgICAgICAgICAgICA9ICgob2xkZGVjbCktPmNvbW1v
bi50eXBlKQogICAgICAgICAgICAgICAgPSBjb21tb25fdHlwZSAobmV3dHlwZSwgb2xkdHlwZSk7
CiAgICAgICAgfQoKCiAgICAgIGlmIChvbGR0eXBlICE9ICgobmV3ZGVjbCktPmNvbW1vbi50eXBl
KSkKICAgICAgICB7CiAgICAgICAgICBpZiAoKChuZXdkZWNsKS0+Y29tbW9uLnR5cGUpICE9IGds
b2JhbF90cmVlc1tUSV9FUlJPUl9NQVJLXSkKICAgICAgICAgICAgbGF5b3V0X3R5cGUgKCgobmV3
ZGVjbCktPmNvbW1vbi50eXBlKSk7CiAgICAgICAgICBpZiAoKChlbnVtIHRyZWVfY29kZSkgKG5l
d2RlY2wpLT5jb21tb24uY29kZSkgIT0gRlVOQ1RJT05fREVDTAogICAgICAgICAgICAgICYmICgo
ZW51bSB0cmVlX2NvZGUpIChuZXdkZWNsKS0+Y29tbW9uLmNvZGUpICE9IFRZUEVfREVDTAogICAg
ICAgICAgICAgICYmICgoZW51bSB0cmVlX2NvZGUpIChuZXdkZWNsKS0+Y29tbW9uLmNvZGUpICE9
IENPTlNUX0RFQ0wpCiAgICAgICAgICAgIGxheW91dF9kZWNsIChuZXdkZWNsLCAwKTsKICAgICAg
ICB9CiAgICAgIGVsc2UKICAgICAgICB7CgogICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29u
c3QgdHJlZSBfX3QgPSBuZXdkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0
cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVj
a19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE4ODIsIF9fRlVO
Q1RJT05fXyk7IF9fdDsgfSktPmRlY2wuc2l6ZSkgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0
cmVlIF9fdCA9IG9sZGRlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVf
Y29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2Zh
aWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTg4MiwgX19GVU5DVElP
Tl9fKTsgX190OyB9KS0+ZGVjbC5zaXplKTsKICAgICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNv
bnN0IHRyZWUgX190ID0gbmV3ZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0g
dHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hl
Y2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxODgzLCBfX0ZV
TkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLnNpemVfdW5pdCkgPSAoX19leHRlbnNpb25fXyAoeyBj
b25zdCB0cmVlIF9fdCA9IG9sZGRlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVt
IHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2No
ZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTg4MywgX19G
VU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5zaXplX3VuaXQpOwogICAgICAgICAgKF9fZXh0ZW5z
aW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBuZXdkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGlu
dCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJl
ZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIs
IDE4ODQsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wubW9kZSkgPSAoX19leHRlbnNpb25f
XyAoeyBjb25zdCB0cmVlIF9fdCA9IG9sZGRlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAo
KChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2Ns
YXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTg4
NCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5tb2RlKTsKICAgICAgICAgIGlmICgoKGVu
dW0gdHJlZV9jb2RlKSAob2xkZGVjbCktPmNvbW1vbi5jb2RlKSAhPSBGVU5DVElPTl9ERUNMKQog
ICAgICAgICAgICBpZiAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBvbGRkZWNs
OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21t
b24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAi
Li4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE4ODYsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRl
Y2wudTEuYS5hbGlnbikgPiAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG5ld2Rl
Y2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNv
bW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcs
ICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTg4NiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+
ZGVjbC51MS5hLmFsaWduKSkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAoX19leHRl
bnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG5ld2RlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVso
aW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0
cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5j
IiwgMTg4OCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC51MS5hLmFsaWduKSA9IChfX2V4
dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gb2xkZGVjbDsgaWYgKHRyZWVfY29kZV90eXBl
WyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykp
IHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNs
LmMiLCAxODg4LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLnUxLmEuYWxpZ24pOwogICAg
ICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBuZXdkZWNsOyBp
ZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24u
Y29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4v
Li4vZ2NjL2djYy9jLWRlY2wuYyIsIDE4ODksIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wu
dXNlcl9hbGlnbikgfD0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBvbGRkZWNs
OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21t
b24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAi
Li4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE4ODksIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRl
Y2wudTEuYS5hbGlnbik7CiAgICAgICAgICAgICAgfQogICAgICAgIH0KCgogICAgICAoX19leHRl
bnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG5ld2RlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVso
aW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0
cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5j
IiwgMTg5NCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5ydGwpID0gKF9fZXh0ZW5zaW9u
X18gKHsgY29uc3QgdHJlZSBfX3QgPSBvbGRkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkg
KCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9j
bGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE4
OTQsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wucnRsKTsKCgogICAgICBpZiAoKChlbnVt
IHRyZWVfY29kZSkgKG9sZGRlY2wpLT5jb21tb24uY29kZSkgPT0gRlVOQ1RJT05fREVDTAogICAg
ICAgICAgJiYgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBvbGRkZWNsOyBpZiAo
KChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoRlVOQ1RJT05fREVDTCkp
IHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIEZVTkNUSU9OX0RFQ0wsICIuLi8uLi9nY2MvZ2NjL2Mt
ZGVjbC5jIiwgMTg5OCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+Y29tbW9uLnVuc2lnbmVkX2Zs
YWcpICYmICgob2xkZGVjbCktPmNvbW1vbi52b2xhdGlsZV9mbGFnKQogICAgICAgICAgJiYgISAo
KG5ld2RlY2wpLT5jb21tb24udm9sYXRpbGVfZmxhZykpCiAgICAgICAgKCh3cml0ZV9vbGRkZWNs
KS0+Y29tbW9uLnZvbGF0aWxlX2ZsYWcpID0gMDsKCiAgICAgIGlmICgoKG5ld2RlY2wpLT5jb21t
b24ucmVhZG9ubHlfZmxhZykpCiAgICAgICAgKCh3cml0ZV9vbGRkZWNsKS0+Y29tbW9uLnJlYWRv
bmx5X2ZsYWcpID0gMTsKCiAgICAgIGlmICgoKG5ld2RlY2wpLT5jb21tb24udm9sYXRpbGVfZmxh
ZykpCiAgICAgICAgewogICAgICAgICAgKCh3cml0ZV9vbGRkZWNsKS0+Y29tbW9uLnZvbGF0aWxl
X2ZsYWcpID0gMTsKICAgICAgICAgIGlmICgoKGVudW0gdHJlZV9jb2RlKSAobmV3ZGVjbCktPmNv
bW1vbi5jb2RlKSA9PSBWQVJfREVDTAoKCgoKCgogICAgICAgICAgICAgICYmIGVycm1zZyA9PSAw
KQogICAgICAgICAgICBtYWtlX3Zhcl92b2xhdGlsZSAobmV3ZGVjbCk7CiAgICAgICAgfQoKCgoK
ICAgICAgaWYgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gbmV3ZGVjbDsgaWYg
KHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNv
ZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4u
L2djYy9nY2MvYy1kZWNsLmMiLCAxOTIyLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmlu
aXRpYWwpID09IDAgJiYgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBvbGRkZWNs
OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21t
b24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAi
Li4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE5MjIsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRl
Y2wuaW5pdGlhbCkgIT0gMAogICAgICAgICAgJiYgISBkaWZmZXJlbnRfYmluZGluZ19sZXZlbCkK
ICAgICAgICB7CiAgICAgICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG5l
d2RlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCkt
PmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAn
ZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTkyNSwgX19GVU5DVElPTl9fKTsgX190OyB9
KS0+ZGVjbC5saW5lbnVtKSA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gb2xk
ZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+
Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdk
JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxOTI1LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0p
LT5kZWNsLmxpbmVudW0pOwogICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBf
X3QgPSBuZXdkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUp
IChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQg
KF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE5MjYsIF9fRlVOQ1RJT05fXyk7
IF9fdDsgfSktPmRlY2wuZmlsZW5hbWUpID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBf
X3QgPSBvbGRkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUp
IChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQg
KF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE5MjYsIF9fRlVOQ1RJT05fXyk7
IF9fdDsgfSktPmRlY2wuZmlsZW5hbWUpOwogICAgICAgIH0KCgogICAgICBpZiAoKF9fZXh0ZW5z
aW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBvbGRkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGlu
dCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJl
ZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIs
IDE5MzAsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5fc3lzdGVtX2hlYWRlcl9mbGFn
KSkKICAgICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG5ld2RlY2w7IGlm
ICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5j
b2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8u
Li9nY2MvZ2NjL2MtZGVjbC5jIiwgMTkzMSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5p
bl9zeXN0ZW1faGVhZGVyX2ZsYWcpID0gMTsKICAgICAgZWxzZSBpZiAoKF9fZXh0ZW5zaW9uX18g
KHsgY29uc3QgdHJlZSBfX3QgPSBuZXdkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgo
ZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFz
c19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE5MzIs
IF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5fc3lzdGVtX2hlYWRlcl9mbGFnKSkKICAg
ICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHdyaXRlX29sZGRlY2w7IGlm
ICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5j
b2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8u
Li9nY2MvZ2NjL2MtZGVjbC5jIiwgMTkzMywgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5p
bl9zeXN0ZW1faGVhZGVyX2ZsYWcpID0gMTsKCgoKCgogICAgICBpZiAoKF9fZXh0ZW5zaW9uX18g
KHsgY29uc3QgdHJlZSBfX3QgPSBuZXdkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgo
ZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFz
c19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE5Mzks
IF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5pdGlhbCkgPT0gMCAmJiAhIGRpZmZlcmVu
dF9iaW5kaW5nX2xldmVsKQogICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190
ID0gbmV3ZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAo
X190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChf
X3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxOTQwLCBfX0ZVTkNUSU9OX18pOyBf
X3Q7IH0pLT5kZWNsLmluaXRpYWwpID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3Qg
PSBvbGRkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChf
X3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9f
dCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE5NDAsIF9fRlVOQ1RJT05fXyk7IF9f
dDsgfSktPmRlY2wuaW5pdGlhbCk7CgoKCgoKICAgICAgaWYgKChfX2V4dGVuc2lvbl9fICh7IGNv
bnN0IHRyZWUgX190ID0gbmV3ZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0g
dHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hl
Y2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxOTQ2LCBfX0ZV
TkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLnNlY3Rpb25fbmFtZSkgPT0gKHRyZWUpICgodm9pZCAq
KTApKQogICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gbmV3ZGVjbDsg
aWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9u
LmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4u
Ly4uL2djYy9nY2MvYy1kZWNsLmMiLCAxOTQ3LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNs
LnNlY3Rpb25fbmFtZSkgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG9sZGRl
Y2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNv
bW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcs
ICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTk0NywgX19GVU5DVElPTl9fKTsgX190OyB9KS0+
ZGVjbC5zZWN0aW9uX25hbWUpOwoKCgogICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVl
IF9fdCA9IG5ld2RlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29k
ZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxl
ZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTk1MSwgX19GVU5DVElPTl9f
KTsgX190OyB9KS0+ZGVjbC5hc3NlbWJsZXJfbmFtZSkgPSAoX19leHRlbnNpb25fXyAoeyBjb25z
dCB0cmVlIF9fdCA9IG9sZGRlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRy
ZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNr
X2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTk1MSwgX19GVU5D
VElPTl9fKTsgX190OyB9KS0+ZGVjbC5hc3NlbWJsZXJfbmFtZSk7CgogICAgICBpZiAoKChlbnVt
IHRyZWVfY29kZSkgKG5ld2RlY2wpLT5jb21tb24uY29kZSkgPT0gRlVOQ1RJT05fREVDTCkKICAg
ICAgICB7CiAgICAgICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG5ld2Rl
Y2w7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChGVU5DVElP
Tl9ERUNMKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgRlVOQ1RJT05fREVDTCwgIi4uLy4uL2dj
Yy9nY2MvYy1kZWNsLmMiLCAxOTU1LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLnN0YXRp
Y19jdG9yX2ZsYWcpIHw9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gb2xkZGVj
bDsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKEZVTkNUSU9O
X0RFQ0wpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBGVU5DVElPTl9ERUNMLCAiLi4vLi4vZ2Nj
L2djYy9jLWRlY2wuYyIsIDE5NTUsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuc3RhdGlj
X2N0b3JfZmxhZyk7CiAgICAgICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9
IG5ld2RlY2w7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChG
VU5DVElPTl9ERUNMKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgRlVOQ1RJT05fREVDTCwgIi4u
Ly4uL2djYy9nY2MvYy1kZWNsLmMiLCAxOTU2LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNs
LnN0YXRpY19kdG9yX2ZsYWcpIHw9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0g
b2xkZGVjbDsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKEZV
TkNUSU9OX0RFQ0wpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBGVU5DVElPTl9ERUNMLCAiLi4v
Li4vZ2NjL2djYy9jLWRlY2wuYyIsIDE5NTYsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wu
c3RhdGljX2R0b3JfZmxhZyk7CgogICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJl
ZSBfX3QgPSBuZXdkZWNsOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2Rl
KSAhPSAoRlVOQ1RJT05fREVDTCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIEZVTkNUSU9OX0RF
Q0wsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMTk1OCwgX19GVU5DVElPTl9fKTsgX190OyB9
KS0+ZGVjbC5ub19pbnN0cnVtZW50X2Z1bmN0aW9uX2VudHJ5X2V4aXQpCiAgICAgICAgICAgIHw9
IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gb2xkZGVjbDsgaWYgKCgoZW51bSB0
cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKEZVTkNUSU9OX0RFQ0wpKSB0cmVlX2No
ZWNrX2ZhaWxlZCAoX190LCBGVU5DVElPTl9ERUNMLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIs
IDE5NTksIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wubm9faW5zdHJ1bWVudF9mdW5jdGlv
bl9lbnRyeV9leGl0KTsKICAgICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190
ID0gbmV3ZGVjbDsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0g
KEZVTkNUSU9OX0RFQ0wpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBGVU5DVElPTl9ERUNMLCAi
Li4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE5NjAsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRl
Y2wubm9fY2hlY2tfbWVtb3J5X3VzYWdlKQogICAgICAgICAgICB8PSAoX19leHRlbnNpb25fXyAo
eyBjb25zdCB0cmVlIF9fdCA9IG9sZGRlY2w7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+
Y29tbW9uLmNvZGUpICE9IChGVU5DVElPTl9ERUNMKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwg
RlVOQ1RJT05fREVDTCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxOTYxLCBfX0ZVTkNUSU9O
X18pOyBfX3Q7IH0pLT5kZWNsLm5vX2NoZWNrX21lbW9yeV91c2FnZSk7CiAgICAgICAgICAoX19l
eHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG5ld2RlY2w7IGlmICgoKGVudW0gdHJlZV9j
b2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChGVU5DVElPTl9ERUNMKSkgdHJlZV9jaGVja19m
YWlsZWQgKF9fdCwgRlVOQ1RJT05fREVDTCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxOTYy
LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLm5vX2xpbWl0X3N0YWNrKQogICAgICAgICAg
ICB8PSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG9sZGRlY2w7IGlmICgoKGVu
dW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChGVU5DVElPTl9ERUNMKSkgdHJl
ZV9jaGVja19mYWlsZWQgKF9fdCwgRlVOQ1RJT05fREVDTCwgIi4uLy4uL2djYy9nY2MvYy1kZWNs
LmMiLCAxOTYzLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLm5vX2xpbWl0X3N0YWNrKTsK
ICAgICAgICB9CiAgICB9CgoKICBlbHNlIGlmICghIGRpZmZlcmVudF9iaW5kaW5nX2xldmVsKQog
ICAgewogICAgICAoKG9sZGRlY2wpLT5jb21tb24udHlwZSkgPSAoKG5ld2RlY2wpLT5jb21tb24u
dHlwZSk7CiAgICAgICgob2xkZGVjbCktPmNvbW1vbi5yZWFkb25seV9mbGFnKSA9ICgobmV3ZGVj
bCktPmNvbW1vbi5yZWFkb25seV9mbGFnKTsKICAgICAgKChvbGRkZWNsKS0+Y29tbW9uLnZvbGF0
aWxlX2ZsYWcpID0gKChuZXdkZWNsKS0+Y29tbW9uLnZvbGF0aWxlX2ZsYWcpOwogICAgICAoKG9s
ZGRlY2wpLT5jb21tb24uc2lkZV9lZmZlY3RzX2ZsYWcpID0gKChuZXdkZWNsKS0+Y29tbW9uLnNp
ZGVfZWZmZWN0c19mbGFnKTsKICAgIH0KCgogIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUg
X190ID0gbmV3ZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2Rl
KSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVk
IChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxOTc3LCBfX0ZVTkNUSU9OX18p
OyBfX3Q7IH0pLT5kZWNsLndlYWtfZmxhZykgfD0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJl
ZSBfX3QgPSBvbGRkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2Nv
ZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWls
ZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE5NzcsIF9fRlVOQ1RJT05f
Xyk7IF9fdDsgfSktPmRlY2wud2Vha19mbGFnKTsKCiAgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChu
ZXdkZWNsKS0+Y29tbW9uLmNvZGUpID09IEZVTkNUSU9OX0RFQ0wpCiAgICB7CiAgICAgICgobmV3
ZGVjbCktPmNvbW1vbi5wdWJsaWNfZmxhZykgJj0gKChvbGRkZWNsKS0+Y29tbW9uLnB1YmxpY19m
bGFnKTsKCgoKCiAgICAgICgob2xkZGVjbCktPmNvbW1vbi5wdWJsaWNfZmxhZykgPSAoKG5ld2Rl
Y2wpLT5jb21tb24ucHVibGljX2ZsYWcpOwoKICAgICAgaWYgKCEgKChvbGRkZWNsKS0+Y29tbW9u
LnB1YmxpY19mbGFnKSkKICAgICAgICAoKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190
ID0gb2xkZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAo
X190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChf
X3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxOTg5LCBfX0ZVTkNUSU9OX18pOyBf
X3Q7IH0pLT5kZWNsLm5hbWUpKS0+Y29tbW9uLnB1YmxpY19mbGFnKSA9IDA7CiAgICB9CiAgaWYg
KChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gbmV3ZGVjbDsgaWYgKHRyZWVfY29k
ZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0g
KCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2Mv
Yy1kZWNsLmMiLCAxOTkxLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmV4dGVybmFsX2Zs
YWcpKQogICAgewogICAgICBpZiAoISBkaWZmZXJlbnRfYmluZGluZ19sZXZlbCkKICAgICAgICB7
CgoKCiAgICAgICAgICAoKG5ld2RlY2wpLT5jb21tb24uc3RhdGljX2ZsYWcpID0gKChvbGRkZWNs
KS0+Y29tbW9uLnN0YXRpY19mbGFnKTsKICAgICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0
IHRyZWUgX190ID0gbmV3ZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJl
ZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tf
ZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAxOTk5LCBfX0ZVTkNU
SU9OX18pOyBfX3Q7IH0pLT5kZWNsLmV4dGVybmFsX2ZsYWcpID0gKF9fZXh0ZW5zaW9uX18gKHsg
Y29uc3QgdHJlZSBfX3QgPSBvbGRkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51
bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19j
aGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDE5OTksIF9f
RlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuZXh0ZXJuYWxfZmxhZyk7CiAgICAgICAgfQoKICAg
ICAgKChuZXdkZWNsKS0+Y29tbW9uLnB1YmxpY19mbGFnKSA9ICgob2xkZGVjbCktPmNvbW1vbi5w
dWJsaWNfZmxhZyk7CiAgICAgIGlmICghIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190
ID0gbmV3ZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAo
X190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChf
X3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAyMDAzLCBfX0ZVTkNUSU9OX18pOyBf
X3Q7IH0pLT5kZWNsLmV4dGVybmFsX2ZsYWcpKQogICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNv
bnN0IHRyZWUgX190ID0gbmV3ZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0g
dHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hl
Y2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAyMDA0LCBfX0ZV
TkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmNvbnRleHQpID0gKF9fZXh0ZW5zaW9uX18gKHsgY29u
c3QgdHJlZSBfX3QgPSBvbGRkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0
cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVj
a19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDIwMDQsIF9fRlVO
Q1RJT05fXyk7IF9fdDsgfSktPmRlY2wuY29udGV4dCk7CiAgICB9CiAgZWxzZQogICAgewogICAg
ICAoKG9sZGRlY2wpLT5jb21tb24uc3RhdGljX2ZsYWcpID0gKChuZXdkZWNsKS0+Y29tbW9uLnN0
YXRpY19mbGFnKTsKICAgICAgKChvbGRkZWNsKS0+Y29tbW9uLnB1YmxpY19mbGFnKSA9ICgobmV3
ZGVjbCktPmNvbW1vbi5wdWJsaWNfZmxhZyk7CiAgICB9CgogIGlmICgoKGVudW0gdHJlZV9jb2Rl
KSAobmV3ZGVjbCktPmNvbW1vbi5jb2RlKSA9PSBGVU5DVElPTl9ERUNMKQogICAgewoKCiAgICAg
IGlmICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG5ld2RlY2w7IGlmICgoKGVu
dW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChGVU5DVElPTl9ERUNMKSkgdHJl
ZV9jaGVja19mYWlsZWQgKF9fdCwgRlVOQ1RJT05fREVDTCwgIi4uLy4uL2djYy9nY2MvYy1kZWNs
LmMiLCAyMDE2LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmlubGluZV9mbGFnKSAmJiAo
X19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG9sZGRlY2w7IGlmICh0cmVlX2NvZGVf
dHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgn
ZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2Mt
ZGVjbC5jIiwgMjAxNiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5pbml0aWFsKSA9PSAw
KQogICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gb2xkZGVjbDsgaWYg
KCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKEZVTkNUSU9OX0RFQ0wp
KSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBGVU5DVElPTl9ERUNMLCAiLi4vLi4vZ2NjL2djYy9j
LWRlY2wuYyIsIDIwMTcsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5saW5lX2ZsYWcp
ID0gMTsKCiAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gbmV3ZGVjbDsg
aWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKEZVTkNUSU9OX0RF
Q0wpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBGVU5DVElPTl9ERUNMLCAiLi4vLi4vZ2NjL2dj
Yy9jLWRlY2wuYyIsIDIwMTksIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5saW5lX2Zs
YWcpID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBvbGRkZWNsOyBpZiAoKChl
bnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoRlVOQ1RJT05fREVDTCkpIHRy
ZWVfY2hlY2tfZmFpbGVkIChfX3QsIEZVTkNUSU9OX0RFQ0wsICIuLi8uLi9nY2MvZ2NjL2MtZGVj
bC5jIiwgMjAxOSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5pbmxpbmVfZmxhZyk7Cgog
ICAgICBpZiAoKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gb2xkZGVjbDsgaWYg
KCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKEZVTkNUSU9OX0RFQ0wp
KSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBGVU5DVElPTl9ERUNMLCAiLi4vLi4vZ2NjL2djYy9j
LWRlY2wuYyIsIDIwMjEsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuYnVpbHRfaW5fY2xh
c3MpICE9IE5PVF9CVUlMVF9JTikpCiAgICAgICAgewoKCiAgICAgICAgICBpZiAoISB0eXBlc19t
YXRjaCB8fCBuZXdfaXNfZGVmaW5pdGlvbikKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlm
ICghIGRpZmZlcmVudF9iaW5kaW5nX2xldmVsKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAoKG9sZGRlY2wpLT5jb21tb24udHlwZSkgPSAoKG5ld2RlY2wpLT5jb21tb24udHlw
ZSk7CiAgICAgICAgICAgICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0g
b2xkZGVjbDsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKEZV
TkNUSU9OX0RFQ0wpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBGVU5DVElPTl9ERUNMLCAiLi4v
Li4vZ2NjL2djYy9jLWRlY2wuYyIsIDIwMzAsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wu
YnVpbHRfaW5fY2xhc3MpID0gTk9UX0JVSUxUX0lOOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIChfX2V4
dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gbmV3ZGVjbDsgaWYgKCgoZW51bSB0cmVlX2Nv
ZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKEZVTkNUSU9OX0RFQ0wpKSB0cmVlX2NoZWNrX2Zh
aWxlZCAoX190LCBGVU5DVElPTl9ERUNMLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDIwMzcs
IF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuYnVpbHRfaW5fY2xhc3MpID0gKF9fZXh0ZW5z
aW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBvbGRkZWNsOyBpZiAoKChlbnVtIHRyZWVfY29kZSkg
KF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoRlVOQ1RJT05fREVDTCkpIHRyZWVfY2hlY2tfZmFpbGVk
IChfX3QsIEZVTkNUSU9OX0RFQ0wsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjAzNywgX19G
VU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5idWlsdF9pbl9jbGFzcyk7CiAgICAgICAgICAgICAg
KF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBuZXdkZWNsOyBpZiAoKChlbnVtIHRy
ZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoRlVOQ1RJT05fREVDTCkpIHRyZWVfY2hl
Y2tfZmFpbGVkIChfX3QsIEZVTkNUSU9OX0RFQ0wsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwg
MjAzOCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC51MS5mKSA9IChfX2V4dGVuc2lvbl9f
ICh7IGNvbnN0IHRyZWUgX190ID0gb2xkZGVjbDsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3Qp
LT5jb21tb24uY29kZSkgIT0gKEZVTkNUSU9OX0RFQ0wpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190
LCBGVU5DVElPTl9ERUNMLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDIwMzgsIF9fRlVOQ1RJ
T05fXyk7IF9fdDsgfSktPmRlY2wudTEuZik7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAg
ICBlbHNlIGlmICghIG5ld19pc19kZWZpbml0aW9uKQogICAgICAgIChfX2V4dGVuc2lvbl9fICh7
IGNvbnN0IHRyZWUgX190ID0gbmV3ZGVjbDsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5j
b21tb24uY29kZSkgIT0gKEZVTkNUSU9OX0RFQ0wpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBG
VU5DVElPTl9ERUNMLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDIwNDMsIF9fRlVOQ1RJT05f
Xyk7IF9fdDsgfSktPmRlY2wudTEuaSkgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9f
dCA9IG9sZGRlY2w7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9
IChGVU5DVElPTl9ERUNMKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgRlVOQ1RJT05fREVDTCwg
Ii4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAyMDQzLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5k
ZWNsLnUxLmkpOwogICAgICBpZiAoISBuZXdfaXNfZGVmaW5pdGlvbikKICAgICAgICB7CiAgICAg
ICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG5ld2RlY2w7IGlmICgoKGVu
dW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChGVU5DVElPTl9ERUNMKSkgdHJl
ZV9jaGVja19mYWlsZWQgKF9fdCwgRlVOQ1RJT05fREVDTCwgIi4uLy4uL2djYy9nY2MvYy1kZWNs
LmMiLCAyMDQ2LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLnJlc3VsdCkgPSAoX19leHRl
bnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG9sZGRlY2w7IGlmICgoKGVudW0gdHJlZV9jb2Rl
KSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChGVU5DVElPTl9ERUNMKSkgdHJlZV9jaGVja19mYWls
ZWQgKF9fdCwgRlVOQ1RJT05fREVDTCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAyMDQ2LCBf
X0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLnJlc3VsdCk7CgoKCiAgICAgICAgICBpZiAoISBk
aWZmZXJlbnRfYmluZGluZ19sZXZlbCkKICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29u
c3QgdHJlZSBfX3QgPSBuZXdkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0
cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVj
a19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDIwNTEsIF9fRlVO
Q1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5pdGlhbCkgPSAoX19leHRlbnNpb25fXyAoeyBjb25z
dCB0cmVlIF9fdCA9IG9sZGRlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRy
ZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNr
X2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjA1MSwgX19GVU5D
VElPTl9fKTsgX190OyB9KS0+ZGVjbC5pbml0aWFsKTsKICAgICAgICAgIChfX2V4dGVuc2lvbl9f
ICh7IGNvbnN0IHRyZWUgX190ID0gbmV3ZGVjbDsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3Qp
LT5jb21tb24uY29kZSkgIT0gKEZVTkNUSU9OX0RFQ0wpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190
LCBGVU5DVElPTl9ERUNMLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDIwNTIsIF9fRlVOQ1RJ
T05fXyk7IF9fdDsgfSktPmRlY2wudTIuZikgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVl
IF9fdCA9IG9sZGRlY2w7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUp
ICE9IChGVU5DVElPTl9ERUNMKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgRlVOQ1RJT05fREVD
TCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAyMDUyLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0p
LT5kZWNsLnUyLmYpOwogICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3Qg
PSBuZXdkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChf
X3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9f
dCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDIwNTMsIF9fRlVOQ1RJT05fXyk7IF9f
dDsgfSktPmRlY2wuYXJndW1lbnRzKSA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190
ID0gb2xkZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAo
X190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChf
X3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAyMDUzLCBfX0ZVTkNUSU9OX18pOyBf
X3Q7IH0pLT5kZWNsLmFyZ3VtZW50cyk7CiAgICAgICAgICBpZiAoKF9fZXh0ZW5zaW9uX18gKHsg
Y29uc3QgdHJlZSBfX3QgPSBuZXdkZWNsOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNv
bW1vbi5jb2RlKSAhPSAoRlVOQ1RJT05fREVDTCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIEZV
TkNUSU9OX0RFQ0wsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjA1NCwgX19GVU5DVElPTl9f
KTsgX190OyB9KS0+ZGVjbC5pbmxpbmVfZmxhZykpCiAgICAgICAgICAgIChfX2V4dGVuc2lvbl9f
ICh7IGNvbnN0IHRyZWUgX190ID0gbmV3ZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgo
KGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xh
c3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAyMDU1
LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmFic3RyYWN0X29yaWdpbikgPSAoX19leHRl
bnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG9sZGRlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVso
aW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0
cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5j
IiwgMjA1NSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5hYnN0cmFjdF9vcmlnaW4pOwog
ICAgICAgIH0KICAgIH0KICBpZiAoZGlmZmVyZW50X2JpbmRpbmdfbGV2ZWwpCiAgICByZXR1cm4g
MDsKCgoKICB7CiAgICByZWdpc3RlciB1bnNpZ25lZCBvbGRkZWNsX3VpZCA9IChfX2V4dGVuc2lv
bl9fICh7IGNvbnN0IHRyZWUgX190ID0gb2xkZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQp
ICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVf
Y2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAy
MDY0LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLnVpZCk7CgogICAgbWVtY3B5ICgoY2hh
ciAqKSBvbGRkZWNsICsgc2l6ZW9mIChzdHJ1Y3QgdHJlZV9jb21tb24pLAogICAgICAgICAgICAo
Y2hhciAqKSBuZXdkZWNsICsgc2l6ZW9mIChzdHJ1Y3QgdHJlZV9jb21tb24pLAogICAgICAgICAg
ICBzaXplb2YgKHN0cnVjdCB0cmVlX2RlY2wpIC0gc2l6ZW9mIChzdHJ1Y3QgdHJlZV9jb21tb24p
KTsKICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gb2xkZGVjbDsgaWYgKHRy
ZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUp
KV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2dj
Yy9nY2MvYy1kZWNsLmMiLCAyMDY5LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLnVpZCkg
PSBvbGRkZWNsX3VpZDsKICB9CgoKCiAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3Qg
PSBvbGRkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChf
X3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9f
dCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDIwNzQsIF9fRlVOQ1RJT05fXyk7IF9f
dDsgfSktPmRlY2wubWFjaGluZV9hdHRyaWJ1dGVzKSA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0
IHRyZWUgX190ID0gbmV3ZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJl
ZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tf
ZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAyMDc0LCBfX0ZVTkNU
SU9OX18pOyBfX3Q7IH0pLT5kZWNsLm1hY2hpbmVfYXR0cmlidXRlcyk7CgogIHJldHVybiAxOwp9
CiMgMjA4NyAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIKdHJlZQpwdXNoZGVjbCAoeCkKICAgICB0
cmVlIHg7CnsKICByZWdpc3RlciB0cmVlIHQ7CiAgcmVnaXN0ZXIgdHJlZSBuYW1lID0gKF9fZXh0
ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB4OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkg
KCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9j
bGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDIw
OTIsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wubmFtZSk7CiAgcmVnaXN0ZXIgc3RydWN0
IGJpbmRpbmdfbGV2ZWwgKmIgPSBjdXJyZW50X2JpbmRpbmdfbGV2ZWw7CgogIChfX2V4dGVuc2lv
bl9fICh7IGNvbnN0IHRyZWUgX190ID0geDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVu
dW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3Nf
Y2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAyMDk1LCBf
X0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmNvbnRleHQpID0gY3VycmVudF9mdW5jdGlvbl9k
ZWNsOwoKCgogIGlmICgoKChlbnVtIHRyZWVfY29kZSkgKHgpLT5jb21tb24uY29kZSkgPT0gRlVO
Q1RJT05fREVDTCB8fCAoKGVudW0gdHJlZV9jb2RlKSAoeCktPmNvbW1vbi5jb2RlKSA9PSBWQVJf
REVDTCkKICAgICAgJiYgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB4OyBpZiAo
dHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29k
ZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4v
Z2NjL2djYy9jLWRlY2wuYyIsIDIxMDAsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5p
dGlhbCkgPT0gMCAmJiAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHg7IGlmICh0
cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2Rl
KSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9n
Y2MvZ2NjL2MtZGVjbC5jIiwgMjEwMCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5leHRl
cm5hbF9mbGFnKSkKICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0geDsgaWYg
KHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNv
ZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4u
L2djYy9nY2MvYy1kZWNsLmMiLCAyMTAxLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmNv
bnRleHQpID0gMDsKCiAgaWYgKHdhcm5fbmVzdGVkX2V4dGVybnMgJiYgKF9fZXh0ZW5zaW9uX18g
KHsgY29uc3QgdHJlZSBfX3QgPSB4OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0
cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVj
a19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDIxMDMsIF9fRlVO
Q1RJT05fXyk7IF9fdDsgfSktPmRlY2wuZXh0ZXJuYWxfZmxhZykgJiYgYiAhPSBnbG9iYWxfYmlu
ZGluZ19sZXZlbAogICAgICAmJiB4ICE9ICgoKHN0cnVjdCBsYW5nX2lkZW50aWZpZXIgKikgKG5h
bWUpKS0+aW1wbGljaXRfZGVjbCkKCiAgICAgICYmICEoX19leHRlbnNpb25fXyAoeyBjb25zdCB0
cmVlIF9fdCA9IHg7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkg
KF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAo
X190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjEwNiwgX19GVU5DVElPTl9fKTsg
X190OyB9KS0+ZGVjbC5pbl9zeXN0ZW1faGVhZGVyX2ZsYWcpKQogICAgd2FybmluZyAoIm5lc3Rl
ZCBleHRlcm4gZGVjbGFyYXRpb24gb2YgYCVzJyIsIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRy
ZWUgX190ID0gbmFtZTsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkg
IT0gKElERU5USUZJRVJfTk9ERSkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIElERU5USUZJRVJf
Tk9ERSwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAyMTA3LCBfX0ZVTkNUSU9OX18pOyBfX3Q7
IH0pLT5pZGVudGlmaWVyLnBvaW50ZXIpKTsKCiAgaWYgKG5hbWUpCiAgICB7CiAgICAgIGNvbnN0
IGNoYXIgKmZpbGU7CiAgICAgIGludCBsaW5lOwogICAgICBpbnQgZGlmZmVyZW50X2JpbmRpbmdf
bGV2ZWwgPSAwOwoKICAgICAgdCA9IGxvb2t1cF9uYW1lX2N1cnJlbnRfbGV2ZWwgKG5hbWUpOwoK
CgogICAgICBpZiAoISB0ICYmIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0geDsg
aWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9u
LmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4u
Ly4uL2djYy9nY2MvYy1kZWNsLmMiLCAyMTE5LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNs
LmV4dGVybmFsX2ZsYWcpICYmICgoeCktPmNvbW1vbi5wdWJsaWNfZmxhZykgJiYgISBmbGFnX3Ry
YWRpdGlvbmFsKQogICAgICAgIHsKICAgICAgICAgIHQgPSAoKChzdHJ1Y3QgbGFuZ19pZGVudGlm
aWVyICopIChuYW1lKSktPmdsb2JhbF92YWx1ZSk7CgoKICAgICAgICAgIGlmICh0ICYmICgoZW51
bSB0cmVlX2NvZGUpICh0KS0+Y29tbW9uLmNvZGUpID09IFRZUEVfREVDTCkKICAgICAgICAgICAg
dCA9IDA7CiAgICAgICAgICBkaWZmZXJlbnRfYmluZGluZ19sZXZlbCA9IDE7CiAgICAgICAgfQog
ICAgICBpZiAodCAhPSAwICYmIHQgPT0gZ2xvYmFsX3RyZWVzW1RJX0VSUk9SX01BUktdKQoKICAg
ICAgICB7CiAgICAgICAgICB0ID0gMDsKICAgICAgICAgIGVycm9yX3dpdGhfZGVjbCAoeCwgImAl
cycgdXNlZCBwcmlvciB0byBkZWNsYXJhdGlvbiIpOwogICAgICAgIH0KCiAgICAgIGlmICh0ICE9
IDApCiAgICAgICAgewogICAgICAgICAgZmlsZSA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRy
ZWUgX190ID0gdDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAo
X190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChf
X3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAyMTM3LCBfX0ZVTkNUSU9OX18pOyBf
X3Q7IH0pLT5kZWNsLmZpbGVuYW1lKTsKICAgICAgICAgIGxpbmUgPSAoX19leHRlbnNpb25fXyAo
eyBjb25zdCB0cmVlIF9fdCA9IHQ7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRy
ZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNr
X2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjEzOCwgX19GVU5D
VElPTl9fKTsgX190OyB9KS0+ZGVjbC5saW5lbnVtKTsKICAgICAgICB9CgoKCgogICAgICBpZiAo
ISBmbGFnX3RyYWRpdGlvbmFsICYmICgobmFtZSktPmNvbW1vbi5wdWJsaWNfZmxhZykKCgogICAg
ICAgICAgJiYgISAoKHgpLT5jb21tb24ucHVibGljX2ZsYWcpCiAgICAgICAgICAmJiAoKChlbnVt
IHRyZWVfY29kZSkgKHgpLT5jb21tb24uY29kZSkgPT0gRlVOQ1RJT05fREVDTCB8fCBiID09IGds
b2JhbF9iaW5kaW5nX2xldmVsKQoKCiAgICAgICAgICAmJiAoKChzdHJ1Y3QgbGFuZ19pZGVudGlm
aWVyICopIChuYW1lKSktPmltcGxpY2l0X2RlY2wpICE9IDApCiAgICAgICAgewogICAgICAgICAg
cGVkd2FybiAoImAlcycgd2FzIGRlY2xhcmVkIGltcGxpY2l0bHkgYGV4dGVybicgYW5kIGxhdGVy
IGBzdGF0aWMnIiwKICAgICAgICAgICAgICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRy
ZWUgX190ID0gbmFtZTsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkg
IT0gKElERU5USUZJRVJfTk9ERSkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIElERU5USUZJRVJf
Tk9ERSwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAyMTU0LCBfX0ZVTkNUSU9OX18pOyBfX3Q7
IH0pLT5pZGVudGlmaWVyLnBvaW50ZXIpKTsKICAgICAgICAgIHBlZHdhcm5fd2l0aF9maWxlX2Fu
ZF9saW5lCiAgICAgICAgICAgICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9ICgo
KHN0cnVjdCBsYW5nX2lkZW50aWZpZXIgKikgKG5hbWUpKS0+aW1wbGljaXRfZGVjbCk7IGlmICh0
cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2Rl
KSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9n
Y2MvZ2NjL2MtZGVjbC5jIiwgMjE1NiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5maWxl
bmFtZSksCiAgICAgICAgICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9ICgo
KHN0cnVjdCBsYW5nX2lkZW50aWZpZXIgKikgKG5hbWUpKS0+aW1wbGljaXRfZGVjbCk7IGlmICh0
cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2Rl
KSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9n
Y2MvZ2NjL2MtZGVjbC5jIiwgMjE1NywgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5saW5l
bnVtKSwKICAgICAgICAgICAgICJwcmV2aW91cyBkZWNsYXJhdGlvbiBvZiBgJXMnIiwKICAgICAg
ICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gbmFtZTsgaWYgKCgoZW51
bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKElERU5USUZJRVJfTk9ERSkpIHRy
ZWVfY2hlY2tfZmFpbGVkIChfX3QsIElERU5USUZJRVJfTk9ERSwgIi4uLy4uL2djYy9nY2MvYy1k
ZWNsLmMiLCAyMTU5LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5pZGVudGlmaWVyLnBvaW50ZXIp
KTsKICAgICAgICAgICgobmFtZSktPmNvbW1vbi52b2xhdGlsZV9mbGFnKSA9IDE7CiAgICAgICAg
fQoKICAgICAgaWYgKHQgIT0gMCAmJiBkdXBsaWNhdGVfZGVjbHMgKHgsIHQsIGRpZmZlcmVudF9i
aW5kaW5nX2xldmVsKSkKICAgICAgICB7CiAgICAgICAgICBpZiAoKChlbnVtIHRyZWVfY29kZSkg
KHQpLT5jb21tb24uY29kZSkgPT0gUEFSTV9ERUNMKQogICAgICAgICAgICB7CgoKICAgICAgICAg
ICAgICAoKHQpLT5jb21tb24uYXNtX3dyaXR0ZW5fZmxhZykgPSAoKHgpLT5jb21tb24uYXNtX3dy
aXR0ZW5fZmxhZyk7CiAgICAgICAgICAgICAgcmV0dXJuIHQ7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIHJldHVybiB0OwogICAgICAgIH0KIyAyMjE4ICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIgog
ICAgICBpZiAoKChlbnVtIHRyZWVfY29kZSkgKHgpLT5jb21tb24uY29kZSkgPT0gVFlQRV9ERUNM
KQogICAgICAgIHsKICAgICAgICAgIGlmICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9f
dCA9IHg7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCkt
PmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAn
ZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjIyMCwgX19GVU5DVElPTl9fKTsgX190OyB9
KS0+ZGVjbC5saW5lbnVtKSA9PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKChf
X2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gKCh4KS0+Y29tbW9uLnR5cGUpOyBpZiAo
dHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29k
ZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4v
Z2NjL2djYy9jLWRlY2wuYyIsIDIyMjIsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUubmFt
ZSkgPT0gMCkKICAgICAgICAgICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190
ID0gKCh4KS0+Y29tbW9uLnR5cGUpOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0
cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVj
a19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDIyMjMsIF9fRlVO
Q1RJT05fXyk7IF9fdDsgfSktPnR5cGUubmFtZSkgPSB4OwogICAgICAgICAgICB9CiAgICAgICAg
ICBlbHNlIGlmICgoKHgpLT5jb21tb24udHlwZSkgIT0gZ2xvYmFsX3RyZWVzW1RJX0VSUk9SX01B
UktdCiAgICAgICAgICAgICAgICAgICAmJiAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9f
dCA9IHg7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChUWVBF
X0RFQ0wpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBUWVBFX0RFQ0wsICIuLi8uLi9nY2MvZ2Nj
L2MtZGVjbC5jIiwgMjIyNiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5yZXN1bHQpID09
ICh0cmVlKSAoKHZvaWQgKikwKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHRyZWUgdHQg
PSAoKHgpLT5jb21tb24udHlwZSk7CiAgICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29u
c3QgdHJlZSBfX3QgPSB4OyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2Rl
KSAhPSAoVFlQRV9ERUNMKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgVFlQRV9ERUNMLCAiLi4v
Li4vZ2NjL2djYy9jLWRlY2wuYyIsIDIyMjksIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wu
cmVzdWx0KSA9IHR0OwogICAgICAgICAgICAgIHR0ID0gYnVpbGRfdHlwZV9jb3B5ICh0dCk7CiAg
ICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB0dDsgaWYgKHRy
ZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUp
KV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2dj
Yy9nY2MvYy1kZWNsLmMiLCAyMjMxLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLm5hbWUp
ID0geDsKICAgICAgICAgICAgICAoKHR0KS0+Y29tbW9uLnVzZWRfZmxhZykgPSAoKHgpLT5jb21t
b24udXNlZF9mbGFnKTsKICAgICAgICAgICAgICAoKHgpLT5jb21tb24udHlwZSkgPSB0dDsKICAg
ICAgICAgICAgfQogICAgICAgIH0KCgoKCgoKCiAgICAgIGlmICgoKHgpLT5jb21tb24ucHVibGlj
X2ZsYWcpCiAgICAgICAgICAmJiAhICgoKGVudW0gdHJlZV9jb2RlKSAoeCktPmNvbW1vbi5jb2Rl
KSA9PSBGVU5DVElPTl9ERUNMICYmIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0g
eDsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKEZVTkNUSU9O
X0RFQ0wpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBGVU5DVElPTl9ERUNMLCAiLi4vLi4vZ2Nj
L2djYy9jLWRlY2wuYyIsIDIyNDQsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5saW5l
X2ZsYWcpKSkKICAgICAgICB7CiAgICAgICAgICB0cmVlIGRlY2w7CgogICAgICAgICAgaWYgKGZs
YWdfdHJhZGl0aW9uYWwgJiYgKCgoc3RydWN0IGxhbmdfaWRlbnRpZmllciAqKSAobmFtZSkpLT5n
bG9iYWxfdmFsdWUpICE9IDAKICAgICAgICAgICAgICAmJiAoKF9fZXh0ZW5zaW9uX18gKHsgY29u
c3QgdHJlZSBfX3QgPSAoKChzdHJ1Y3QgbGFuZ19pZGVudGlmaWVyICopIChuYW1lKSktPmdsb2Jh
bF92YWx1ZSk7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9f
dCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190
LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjI0OSwgX19GVU5DVElPTl9fKTsgX190
OyB9KS0+ZGVjbC5leHRlcm5hbF9mbGFnKQogICAgICAgICAgICAgICAgICB8fCAoKCgoKHN0cnVj
dCBsYW5nX2lkZW50aWZpZXIgKikgKG5hbWUpKS0+Z2xvYmFsX3ZhbHVlKSktPmNvbW1vbi5wdWJs
aWNfZmxhZykpKQogICAgICAgICAgICBkZWNsID0gKCgoc3RydWN0IGxhbmdfaWRlbnRpZmllciAq
KSAobmFtZSkpLT5nbG9iYWxfdmFsdWUpOwogICAgICAgICAgZWxzZSBpZiAoKCgoc3RydWN0IGxh
bmdfaWRlbnRpZmllciAqKSAobmFtZSkpLT5saW1ib192YWx1ZSkgIT0gMCkKCiAgICAgICAgICAg
IGRlY2wgPSAoKChzdHJ1Y3QgbGFuZ19pZGVudGlmaWVyICopIChuYW1lKSktPmxpbWJvX3ZhbHVl
KTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgZGVjbCA9IDA7CgogICAgICAgICAgaWYgKGRl
Y2wgJiYgISBjb21wdHlwZXMgKCgoeCktPmNvbW1vbi50eXBlKSwgKChkZWNsKS0+Y29tbW9uLnR5
cGUpKQoKICAgICAgICAgICAgICAmJiAhKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190
ID0gZGVjbDsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKEZV
TkNUSU9OX0RFQ0wpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBGVU5DVElPTl9ERUNMLCAiLi4v
Li4vZ2NjL2djYy9jLWRlY2wuYyIsIDIyNjAsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wu
YnVpbHRfaW5fY2xhc3MpICE9IE5PVF9CVUlMVF9JTikpCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBwZWR3YXJuX3dpdGhfZGVjbCAoeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInR5cGUgbWlzbWF0Y2ggd2l0aCBwcmV2aW91cyBleHRlcm5hbCBkZWNsIik7CiAgICAgICAg
ICAgICAgcGVkd2Fybl93aXRoX2RlY2wgKGRlY2wsICJwcmV2aW91cyBleHRlcm5hbCBkZWNsIG9m
IGAlcyciKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCgoKCiAgICAgIGlmICgoKChzdHJ1Y3Qg
bGFuZ19pZGVudGlmaWVyICopIChuYW1lKSktPmltcGxpY2l0X2RlY2wpICE9IDAKICAgICAgICAg
ICYmICgoKHN0cnVjdCBsYW5nX2lkZW50aWZpZXIgKikgKG5hbWUpKS0+Z2xvYmFsX3ZhbHVlKSA9
PSAwCiAgICAgICAgICAmJiAoKGVudW0gdHJlZV9jb2RlKSAoeCktPmNvbW1vbi5jb2RlKSA9PSBG
VU5DVElPTl9ERUNMCiAgICAgICAgICAmJiAhIGNvbXB0eXBlcyAoKCh4KS0+Y29tbW9uLnR5cGUp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICgoKCgoc3RydWN0IGxhbmdfaWRlbnRpZmllciAq
KSAobmFtZSkpLT5pbXBsaWNpdF9kZWNsKSktPmNvbW1vbi50eXBlKSkpCiAgICAgICAgewogICAg
ICAgICAgd2FybmluZ193aXRoX2RlY2wgKHgsICJ0eXBlIG1pc21hdGNoIHdpdGggcHJldmlvdXMg
aW1wbGljaXQgZGVjbGFyYXRpb24iKTsKICAgICAgICAgIHdhcm5pbmdfd2l0aF9kZWNsICgoKChz
dHJ1Y3QgbGFuZ19pZGVudGlmaWVyICopIChuYW1lKSktPmltcGxpY2l0X2RlY2wpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJwcmV2aW91cyBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZiBg
JXMnIik7CiAgICAgICAgfQoKCgogICAgICBpZiAoZmxhZ190cmFkaXRpb25hbCAmJiAoX19leHRl
bnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHg7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAo
KChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2Ns
YXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjI4
NCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5leHRlcm5hbF9mbGFnKQogICAgICAgICAg
JiYgbG9va3VwX25hbWUgKG5hbWUpID09IDApCiAgICAgICAgewogICAgICAgICAgdHJlZSB0eXBl
ID0gKCh4KS0+Y29tbW9uLnR5cGUpOwoKCiAgICAgICAgICB3aGlsZSAodHlwZSkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIGlmICh0eXBlID09IGdsb2JhbF90cmVlc1tUSV9FUlJPUl9NQVJL
XSkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGlmICgoX19leHRlbnNpb25f
XyAoeyBjb25zdCB0cmVlIF9fdCA9IHR5cGU7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChl
bnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNz
X2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjI5NCwg
X19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5jb250ZXh0KSkKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgd2FybmluZ193aXRoX2RlY2wgKHgsICJ0eXBlIG9mIGV4dGVybmFs
IGAlcycgaXMgbm90IGdsb2JhbCIpOwoKCiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UgaWYgKCgoZW51bSB0cmVlX2NvZGUpICh0eXBl
KS0+Y29tbW9uLmNvZGUpID09IEZVTkNUSU9OX1RZUEUKICAgICAgICAgICAgICAgICAgICAgICAm
JiAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHR5cGU7IGlmICh0cmVlX2NvZGVf
dHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgn
dCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2Mt
ZGVjbC5jIiwgMjMwMiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS52YWx1ZXMpICE9IDAp
CgoKCgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgdHlwZSA9ICgodHlwZSkt
PmNvbW1vbi50eXBlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlmICh0eXBlID09IDApCiAg
ICAgICAgICAgIGIgPSBnbG9iYWxfYmluZGluZ19sZXZlbDsKICAgICAgICB9CgoKCiAgICAgIGlm
IChiID09IGdsb2JhbF9iaW5kaW5nX2xldmVsKQogICAgICAgIHsKCgoKCiAgICAgICAgICBpZiAo
KCgoc3RydWN0IGxhbmdfaWRlbnRpZmllciAqKSAobmFtZSkpLT5nbG9iYWxfdmFsdWUpID09IDAg
JiYgKCh4KS0+Y29tbW9uLnB1YmxpY19mbGFnKSkKICAgICAgICAgICAgKChuYW1lKS0+Y29tbW9u
LnB1YmxpY19mbGFnKSA9IDE7CgogICAgICAgICAgKCgoc3RydWN0IGxhbmdfaWRlbnRpZmllciAq
KSAobmFtZSkpLT5nbG9iYWxfdmFsdWUpID0geDsKCgogICAgICAgICAgKCgoc3RydWN0IGxhbmdf
aWRlbnRpZmllciAqKSAobmFtZSkpLT5saW1ib192YWx1ZSkgPSAwOwoKCiAgICAgICAgICBpZiAo
KCgoc3RydWN0IGxhbmdfaWRlbnRpZmllciAqKSAobmFtZSkpLT5pbXBsaWNpdF9kZWNsKQogICAg
ICAgICAgICAgICYmICgoKCgoc3RydWN0IGxhbmdfaWRlbnRpZmllciAqKSAobmFtZSkpLT5pbXBs
aWNpdF9kZWNsKSktPmNvbW1vbi51c2VkX2ZsYWcpKQogICAgICAgICAgICAoKHgpLT5jb21tb24u
dXNlZF9mbGFnKSA9IDEsICgobmFtZSktPmNvbW1vbi51c2VkX2ZsYWcpID0gMTsKCgogICAgICAg
ICAgaWYgKCgoKHN0cnVjdCBsYW5nX2lkZW50aWZpZXIgKikgKG5hbWUpKS0+aW1wbGljaXRfZGVj
bCkKICAgICAgICAgICAgICAmJiAoKCgoKHN0cnVjdCBsYW5nX2lkZW50aWZpZXIgKikgKG5hbWUp
KS0+aW1wbGljaXRfZGVjbCkpLT5jb21tb24uYWRkcmVzc2FibGVfZmxhZykpCiAgICAgICAgICAg
ICgoeCktPmNvbW1vbi5hZGRyZXNzYWJsZV9mbGFnKSA9IDE7CgoKICAgICAgICAgIGlmICgoKChz
dHJ1Y3QgbGFuZ19pZGVudGlmaWVyICopIChuYW1lKSktPmltcGxpY2l0X2RlY2wpICE9IDAKCiAg
ICAgICAgICAgICAgJiYgISAoKChlbnVtIHRyZWVfY29kZSkgKHgpLT5jb21tb24uY29kZSkgPT0g
RlVOQ1RJT05fREVDTAogICAgICAgICAgICAgICAgICAgICYmICgoX19leHRlbnNpb25fXyAoeyBj
b25zdCB0cmVlIF9fdCA9ICgoKCh4KS0+Y29tbW9uLnR5cGUpKS0+Y29tbW9uLnR5cGUpOyBpZiAo
dHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29k
ZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4v
Z2NjL2djYy9jLWRlY2wuYyIsIDIzNDUsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUubWFp
bl92YXJpYW50KQogICAgICAgICAgICAgICAgICAgICAgICA9PSBpbnRlZ2VyX3R5cGVzW2l0a19p
bnRdKSkpCiAgICAgICAgICAgIHBlZHdhcm4gKCJgJXMnIHdhcyBwcmV2aW91c2x5IGltcGxpY2l0
bHkgZGVjbGFyZWQgdG8gcmV0dXJuIGBpbnQnIiwKICAgICAgICAgICAgICAgICAgICAgKF9fZXh0
ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBuYW1lOyBpZiAoKChlbnVtIHRyZWVfY29kZSkg
KF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoSURFTlRJRklFUl9OT0RFKSkgdHJlZV9jaGVja19mYWls
ZWQgKF9fdCwgSURFTlRJRklFUl9OT0RFLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDIzNDgs
IF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmlkZW50aWZpZXIucG9pbnRlcikpOwoKCgogICAgICAg
ICAgaWYgKCgobmFtZSktPmNvbW1vbi5wdWJsaWNfZmxhZykKICAgICAgICAgICAgICAmJiAhICgo
eCktPmNvbW1vbi5wdWJsaWNfZmxhZykgJiYgISAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVl
IF9fdCA9IHg7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9f
dCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190
LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjM1MywgX19GVU5DVElPTl9fKTsgX190
OyB9KS0+ZGVjbC5leHRlcm5hbF9mbGFnKSkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBp
ZiAodCAhPSAwICYmICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHQ7IGlmICgo
KGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChGVU5DVElPTl9ERUNMKSkg
dHJlZV9jaGVja19mYWlsZWQgKF9fdCwgRlVOQ1RJT05fREVDTCwgIi4uLy4uL2djYy9nY2MvYy1k
ZWNsLmMiLCAyMzU2LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmJ1aWx0X2luX2NsYXNz
KSAhPSBOT1RfQlVJTFRfSU4pKQogICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICBlbHNl
IGlmICh0ICE9IDAgJiYgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB0OyBpZiAo
KChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoRlVOQ1RJT05fREVDTCkp
IHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIEZVTkNUSU9OX0RFQ0wsICIuLi8uLi9nY2MvZ2NjL2Mt
ZGVjbC5jIiwgMjM1OSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+Y29tbW9uLnVuc2lnbmVkX2Zs
YWcpKQogICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgZWxzZSBpZiAoKChlbnVtIHRy
ZWVfY29kZSkgKHgpLT5jb21tb24uY29kZSkgPT0gVFlQRV9ERUNMKQogICAgICAgICAgICAgICAg
OwogICAgICAgICAgICAgIGVsc2UgaWYgKCgoKHN0cnVjdCBsYW5nX2lkZW50aWZpZXIgKikgKG5h
bWUpKS0+aW1wbGljaXRfZGVjbCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
IGlmICghICgobmFtZSktPmNvbW1vbi52b2xhdGlsZV9mbGFnKSkKICAgICAgICAgICAgICAgICAg
ICBwZWR3YXJuICgiYCVzJyB3YXMgZGVjbGFyZWQgaW1wbGljaXRseSBgZXh0ZXJuJyBhbmQgbGF0
ZXIgYHN0YXRpYyciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX2V4dGVuc2lvbl9f
ICh7IGNvbnN0IHRyZWUgX190ID0gbmFtZTsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5j
b21tb24uY29kZSkgIT0gKElERU5USUZJRVJfTk9ERSkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3Qs
IElERU5USUZJRVJfTk9ERSwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAyMzY5LCBfX0ZVTkNU
SU9OX18pOyBfX3Q7IH0pLT5pZGVudGlmaWVyLnBvaW50ZXIpKTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBwZWR3YXJuICgiYCVzJyB3YXMgZGVj
bGFyZWQgYGV4dGVybicgYW5kIGxhdGVyIGBzdGF0aWMnIiwKICAgICAgICAgICAgICAgICAgICAg
ICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gbmFtZTsgaWYgKCgoZW51bSB0
cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKElERU5USUZJRVJfTk9ERSkpIHRyZWVf
Y2hlY2tfZmFpbGVkIChfX3QsIElERU5USUZJRVJfTk9ERSwgIi4uLy4uL2djYy9nY2MvYy1kZWNs
LmMiLCAyMzczLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5pZGVudGlmaWVyLnBvaW50ZXIpKTsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKCiAgICAgICAgICB0
cmVlIG9sZGxvY2FsID0gKCgoc3RydWN0IGxhbmdfaWRlbnRpZmllciAqKSAobmFtZSkpLT5sb2Nh
bF92YWx1ZSk7CiAgICAgICAgICB0cmVlIG9sZGdsb2JhbCA9ICgoKHN0cnVjdCBsYW5nX2lkZW50
aWZpZXIgKikgKG5hbWUpKS0+Z2xvYmFsX3ZhbHVlKTsKCiAgICAgICAgICAoKChzdHJ1Y3QgbGFu
Z19pZGVudGlmaWVyICopIChuYW1lKSktPmxvY2FsX3ZhbHVlKSA9IHg7CgoKCiAgICAgICAgICBp
ZiAob2xkbG9jYWwgPT0gMAogICAgICAgICAgICAgICYmIG9sZGdsb2JhbCAhPSAwCiAgICAgICAg
ICAgICAgJiYgKChlbnVtIHRyZWVfY29kZSkgKHgpLT5jb21tb24uY29kZSkgPT0gRlVOQ1RJT05f
REVDTAogICAgICAgICAgICAgICYmICgoZW51bSB0cmVlX2NvZGUpIChvbGRnbG9iYWwpLT5jb21t
b24uY29kZSkgPT0gRlVOQ1RJT05fREVDTAogICAgICAgICAgICAgICYmIChfX2V4dGVuc2lvbl9f
ICh7IGNvbnN0IHRyZWUgX190ID0geDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0g
dHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hl
Y2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAyMzkwLCBfX0ZV
TkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmV4dGVybmFsX2ZsYWcpICYmICEgKF9fZXh0ZW5zaW9u
X18gKHsgY29uc3QgdHJlZSBfX3QgPSB4OyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNv
bW1vbi5jb2RlKSAhPSAoRlVOQ1RJT05fREVDTCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIEZV
TkNUSU9OX0RFQ0wsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjM5MCwgX19GVU5DVElPTl9f
KTsgX190OyB9KS0+ZGVjbC5pbmxpbmVfZmxhZykpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAg
ICAgaWYgKCEgY29tcHR5cGVzICgoKHgpLT5jb21tb24udHlwZSksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoKCgoKHN0cnVjdCBsYW5nX2lkZW50aWZpZXIgKikgKG5hbWUpKS0+Z2xv
YmFsX3ZhbHVlKSktPmNvbW1vbi50eXBlKSkpCiAgICAgICAgICAgICAgICBwZWR3YXJuX3dpdGhf
ZGVjbCAoeCwgImV4dGVybiBkZWNsYXJhdGlvbiBvZiBgJXMnIGRvZXNuJ3QgbWF0Y2ggZ2xvYmFs
IG9uZSIpOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKCgogICAgICAgICAg
ICAgICAgICBpZiAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBvbGRnbG9iYWw7
IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChGVU5DVElPTl9E
RUNMKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgRlVOQ1RJT05fREVDTCwgIi4uLy4uL2djYy9n
Y2MvYy1kZWNsLmMiLCAyNDAwLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmlubGluZV9m
bGFnKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAoX19leHRl
bnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHg7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190
KS0+Y29tbW9uLmNvZGUpICE9IChGVU5DVElPTl9ERUNMKSkgdHJlZV9jaGVja19mYWlsZWQgKF9f
dCwgRlVOQ1RJT05fREVDTCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAyNDAyLCBfX0ZVTkNU
SU9OX18pOyBfX3Q7IH0pLT5kZWNsLmlubGluZV9mbGFnKSA9IChfX2V4dGVuc2lvbl9fICh7IGNv
bnN0IHRyZWUgX190ID0gb2xkZ2xvYmFsOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNv
bW1vbi5jb2RlKSAhPSAoRlVOQ1RJT05fREVDTCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIEZV
TkNUSU9OX0RFQ0wsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjQwMiwgX19GVU5DVElPTl9f
KTsgX190OyB9KS0+ZGVjbC5pbmxpbmVfZmxhZyk7CiAgICAgICAgICAgICAgICAgICAgICAoX19l
eHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHg7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50
KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVl
X2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwg
MjQwMywgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5pbml0aWFsKSA9IChjdXJyZW50X2Z1
bmN0aW9uX2RlY2wgPT0gb2xkZ2xvYmFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgID8gMCA6IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gb2xkZ2xv
YmFsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5j
b21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2Qn
LCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDI0MDQsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSkt
PmRlY2wuaW5pdGlhbCkpOwogICAgICAgICAgICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsg
Y29uc3QgdHJlZSBfX3QgPSB4OyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5j
b2RlKSAhPSAoRlVOQ1RJT05fREVDTCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIEZVTkNUSU9O
X0RFQ0wsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjQwNSwgX19GVU5DVElPTl9fKTsgX190
OyB9KS0+ZGVjbC51Mi5mKSA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gb2xk
Z2xvYmFsOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoRlVO
Q1RJT05fREVDTCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIEZVTkNUSU9OX0RFQ0wsICIuLi8u
Li9nY2MvZ2NjL2MtZGVjbC5jIiwgMjQwNSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC51
Mi5mKTsKICAgICAgICAgICAgICAgICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUg
X190ID0geDsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKEZV
TkNUSU9OX0RFQ0wpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBGVU5DVElPTl9ERUNMLCAiLi4v
Li4vZ2NjL2djYy9jLWRlY2wuYyIsIDI0MDYsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wu
dTEuaSkgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG9sZGdsb2JhbDsgaWYg
KCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKEZVTkNUSU9OX0RFQ0wp
KSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBGVU5DVElPTl9ERUNMLCAiLi4vLi4vZ2NjL2djYy9j
LWRlY2wuYyIsIDI0MDYsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wudTEuaSk7CiAgICAg
ICAgICAgICAgICAgICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHg7IGlm
ICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5j
b2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8u
Li9nY2MvZ2NjL2MtZGVjbC5jIiwgMjQwNywgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5h
cmd1bWVudHMpID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBvbGRnbG9iYWw7
IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1v
bi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIu
Li8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjQwNywgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVj
bC5hcmd1bWVudHMpOwogICAgICAgICAgICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29u
c3QgdHJlZSBfX3QgPSB4OyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2Rl
KSAhPSAoRlVOQ1RJT05fREVDTCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIEZVTkNUSU9OX0RF
Q0wsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjQwOCwgX19GVU5DVElPTl9fKTsgX190OyB9
KS0+ZGVjbC5yZXN1bHQpID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBvbGRn
bG9iYWw7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChGVU5D
VElPTl9ERUNMKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgRlVOQ1RJT05fREVDTCwgIi4uLy4u
L2djYy9nY2MvYy1kZWNsLmMiLCAyNDA4LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLnJl
c3VsdCk7CiAgICAgICAgICAgICAgICAgICAgICAoKHgpLT5jb21tb24uYXNtX3dyaXR0ZW5fZmxh
ZykgPSAoKG9sZGdsb2JhbCktPmNvbW1vbi5hc21fd3JpdHRlbl9mbGFnKTsKICAgICAgICAgICAg
ICAgICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0geDsgaWYgKHRyZWVf
Y29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0g
IT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9n
Y2MvYy1kZWNsLmMiLCAyNDEwLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmFic3RyYWN0
X29yaWdpbikKICAgICAgICAgICAgICAgICAgICAgICAgPSAoX19leHRlbnNpb25fXyAoeyBjb25z
dCB0cmVlIF9fdCA9IG9sZGdsb2JhbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0g
dHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hl
Y2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAyNDExLCBfX0ZV
TkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmFic3RyYWN0X29yaWdpbik7CiAgICAgICAgICAgICAg
ICAgICAgfQoKICAgICAgICAgICAgICAgICAgaWYgKCgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0
cmVlIF9fdCA9IG9sZGdsb2JhbDsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24u
Y29kZSkgIT0gKEZVTkNUSU9OX0RFQ0wpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBGVU5DVElP
Tl9ERUNMLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDI0MTQsIF9fRlVOQ1RJT05fXyk7IF9f
dDsgfSktPmRlY2wuYnVpbHRfaW5fY2xhc3MpICE9IE5PVF9CVUlMVF9JTikpCiAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3Qg
dHJlZSBfX3QgPSB4OyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAh
PSAoRlVOQ1RJT05fREVDTCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIEZVTkNUSU9OX0RFQ0ws
ICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjQxNiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+
ZGVjbC5idWlsdF9pbl9jbGFzcykgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9
IG9sZGdsb2JhbDsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0g
KEZVTkNUSU9OX0RFQ0wpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBGVU5DVElPTl9ERUNMLCAi
Li4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDI0MTYsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRl
Y2wuYnVpbHRfaW5fY2xhc3MpOwogICAgICAgICAgICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18g
KHsgY29uc3QgdHJlZSBfX3QgPSB4OyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1v
bi5jb2RlKSAhPSAoRlVOQ1RJT05fREVDTCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIEZVTkNU
SU9OX0RFQ0wsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjQxNywgX19GVU5DVElPTl9fKTsg
X190OyB9KS0+ZGVjbC51MS5mKSA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0g
b2xkZ2xvYmFsOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAo
RlVOQ1RJT05fREVDTCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIEZVTkNUSU9OX0RFQ0wsICIu
Li8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjQxNywgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVj
bC51MS5mKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICBpZiAoKF9f
ZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSAoKG9sZGdsb2JhbCktPmNvbW1vbi50eXBl
KTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29t
bW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0Jywg
Ii4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAyNDIwLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50
eXBlLnZhbHVlcykgIT0gMAogICAgICAgICAgICAgICAgICAgICAgJiYgKF9fZXh0ZW5zaW9uX18g
KHsgY29uc3QgdHJlZSBfX3QgPSBvbGRnbG9iYWw7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAo
KChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2Ns
YXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjQy
MSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5pbml0aWFsKQogICAgICAgICAgICAgICAg
ICAgICAgJiYgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSAoKHgpLT5jb21tb24u
dHlwZSk7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCkt
PmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAn
dCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjQyMiwgX19GVU5DVElPTl9fKTsgX190OyB9
KS0+dHlwZS52YWx1ZXMpID09IDApCiAgICAgICAgICAgICAgICAgICAgKCh4KS0+Y29tbW9uLnR5
cGUpID0gKChvbGRnbG9iYWwpLT5jb21tb24udHlwZSk7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgIH0KIyAyNDQyICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIgogICAgICAgICAgaWYgKG9s
ZGxvY2FsID09IDAKICAgICAgICAgICAgICAmJiAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVl
IF9fdCA9IHg7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9f
dCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190
LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjQ0MywgX19GVU5DVElPTl9fKTsgX190
OyB9KS0+ZGVjbC5leHRlcm5hbF9mbGFnKQogICAgICAgICAgICAgICYmICgoeCktPmNvbW1vbi5w
dWJsaWNfZmxhZykpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAob2xkZ2xvYmFsID09
IDApCiAgICAgICAgICAgICAgICAoKG5hbWUpLT5jb21tb24ucHVibGljX2ZsYWcpID0gMTsKIyAy
NDU2ICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIgogICAgICAgICAgICAgIGlmICgoKChzdHJ1Y3Qg
bGFuZ19pZGVudGlmaWVyICopIChuYW1lKSktPmxpbWJvX3ZhbHVlKSA9PSAwKQogICAgICAgICAg
ICAgICAgKCgoc3RydWN0IGxhbmdfaWRlbnRpZmllciAqKSAobmFtZSkpLT5saW1ib192YWx1ZSkg
PSB4OwogICAgICAgICAgICB9CgoKICAgICAgICAgIGlmIChvbGRsb2NhbCAhPSAwICYmICEoX19l
eHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHg7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50
KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVl
X2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwg
MjQ2MSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5leHRlcm5hbF9mbGFnKQoKICAgICAg
ICAgICAgICAmJiAhIGN1cnJlbnRfYmluZGluZ19sZXZlbC0+cGFybV9mbGFnCgogICAgICAgICAg
ICAgICYmIGN1cnJlbnRfYmluZGluZ19sZXZlbC0+bGV2ZWxfY2hhaW4tPnBhcm1fZmxhZwoKCiAg
ICAgICAgICAgICAgJiYgY2hhaW5fbWVtYmVyIChvbGRsb2NhbCwgY3VycmVudF9iaW5kaW5nX2xl
dmVsLT5sZXZlbF9jaGFpbi0+bmFtZXMpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYg
KCgoZW51bSB0cmVlX2NvZGUpIChvbGRsb2NhbCktPmNvbW1vbi5jb2RlKSA9PSBQQVJNX0RFQ0wp
CiAgICAgICAgICAgICAgICBwZWR3YXJuICgiZGVjbGFyYXRpb24gb2YgYCVzJyBzaGFkb3dzIGEg
cGFyYW1ldGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNv
bnN0IHRyZWUgX190ID0gbmFtZTsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24u
Y29kZSkgIT0gKElERU5USUZJRVJfTk9ERSkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIElERU5U
SUZJRVJfTk9ERSwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAyNDcyLCBfX0ZVTkNUSU9OX18p
OyBfX3Q7IH0pLT5pZGVudGlmaWVyLnBvaW50ZXIpKTsKICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICBwZWR3YXJuICgiZGVjbGFyYXRpb24gb2YgYCVzJyBzaGFkb3dzIGEgc3ltYm9s
IGZyb20gdGhlIHBhcmFtZXRlciBsaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgIChfX2V4
dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gbmFtZTsgaWYgKCgoZW51bSB0cmVlX2NvZGUp
IChfX3QpLT5jb21tb24uY29kZSkgIT0gKElERU5USUZJRVJfTk9ERSkpIHRyZWVfY2hlY2tfZmFp
bGVkIChfX3QsIElERU5USUZJRVJfTk9ERSwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAyNDc1
LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5pZGVudGlmaWVyLnBvaW50ZXIpKTsKICAgICAgICAg
ICAgfQoKCiAgICAgICAgICBlbHNlIGlmICh3YXJuX3NoYWRvdyAmJiAhKF9fZXh0ZW5zaW9uX18g
KHsgY29uc3QgdHJlZSBfX3QgPSB4OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0
cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVj
a19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDI0NzksIF9fRlVO
Q1RJT05fXyk7IF9fdDsgfSktPmRlY2wuZXh0ZXJuYWxfZmxhZykKCiAgICAgICAgICAgICAgICAg
ICAmJiAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHg7IGlmICh0cmVlX2NvZGVf
dHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgn
ZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2Mt
ZGVjbC5jIiwgMjQ4MSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5saW5lbnVtKSAhPSAw
CgogICAgICAgICAgICAgICAgICAgJiYgISAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBf
X3QgPSB4OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3Qp
LT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwg
J2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDI0ODMsIF9fRlVOQ1RJT05fXyk7IF9fdDsg
fSktPmRlY2wuYWJzdHJhY3Rfb3JpZ2luKSAhPSAodHJlZSkgMCAmJiAoX19leHRlbnNpb25fXyAo
eyBjb25zdCB0cmVlIF9fdCA9IHg7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRy
ZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNr
X2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjQ4MywgX19GVU5D
VElPTl9fKTsgX190OyB9KS0+ZGVjbC5hYnN0cmFjdF9vcmlnaW4pICE9ICh4KSkpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBjb25zdCBjaGFyICppZCA9IChfX2V4dGVuc2lvbl9fICh7IGNv
bnN0IHRyZWUgX190ID0gbmFtZTsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24u
Y29kZSkgIT0gKElERU5USUZJRVJfTk9ERSkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIElERU5U
SUZJRVJfTk9ERSwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAyNDg1LCBfX0ZVTkNUSU9OX18p
OyBfX3Q7IH0pLT5pZGVudGlmaWVyLnBvaW50ZXIpOwoKICAgICAgICAgICAgICBpZiAoKChlbnVt
IHRyZWVfY29kZSkgKHgpLT5jb21tb24uY29kZSkgPT0gUEFSTV9ERUNMCiAgICAgICAgICAgICAg
ICAgICYmIGN1cnJlbnRfYmluZGluZ19sZXZlbC0+bGV2ZWxfY2hhaW4tPnBhcm1fZmxhZykKCgoK
CgogICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgIGVsc2UgaWYgKG9sZGxvY2FsICE9IDAg
JiYgKChlbnVtIHRyZWVfY29kZSkgKG9sZGxvY2FsKS0+Y29tbW9uLmNvZGUpID09IFBBUk1fREVD
TCkKICAgICAgICAgICAgICAgIHdhcm5pbmcgKCJkZWNsYXJhdGlvbiBvZiBgJXMnIHNoYWRvd3Mg
YSBwYXJhbWV0ZXIiLCBpZCk7CiAgICAgICAgICAgICAgZWxzZSBpZiAob2xkbG9jYWwgIT0gMCkK
ICAgICAgICAgICAgICAgIHdhcm5pbmcgKCJkZWNsYXJhdGlvbiBvZiBgJXMnIHNoYWRvd3MgcHJl
dmlvdXMgbG9jYWwiLCBpZCk7CiAgICAgICAgICAgICAgZWxzZSBpZiAoKCgoc3RydWN0IGxhbmdf
aWRlbnRpZmllciAqKSAobmFtZSkpLT5nbG9iYWxfdmFsdWUpICE9IDAKICAgICAgICAgICAgICAg
ICAgICAgICAmJiAoKChzdHJ1Y3QgbGFuZ19pZGVudGlmaWVyICopIChuYW1lKSktPmdsb2JhbF92
YWx1ZSkgIT0gZ2xvYmFsX3RyZWVzW1RJX0VSUk9SX01BUktdKQogICAgICAgICAgICAgICAgd2Fy
bmluZyAoImRlY2xhcmF0aW9uIG9mIGAlcycgc2hhZG93cyBnbG9iYWwgZGVjbGFyYXRpb24iLCBp
ZCk7CiAgICAgICAgICAgIH0KCgoKICAgICAgICAgIGlmIChvbGRsb2NhbCAhPSAwKQogICAgICAg
ICAgICBiLT5zaGFkb3dlZCA9IHRyZWVfY29ucyAobmFtZSwgb2xkbG9jYWwsIGItPnNoYWRvd2Vk
KTsKICAgICAgICB9CgoKCgoKICAgICAgaWYgKCgoeCktPmNvbW1vbi50eXBlKSAhPSBnbG9iYWxf
dHJlZXNbVElfRVJST1JfTUFSS10KICAgICAgICAgICYmICEoKF9fZXh0ZW5zaW9uX18gKHsgY29u
c3QgdHJlZSBfX3QgPSAoKHgpLT5jb21tb24udHlwZSk7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50
KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVl
X2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwg
MjUxNSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5zaXplKSAhPSAodHJlZSkgKCh2b2lk
ICopMCkpKQogICAgICAgICsrYi0+bl9pbmNvbXBsZXRlOwogICAgfQoKCgogICgoeCktPmNvbW1v
bi5jaGFpbikgPSBiLT5uYW1lczsKICBiLT5uYW1lcyA9IHg7CgogIHJldHVybiB4Owp9CgoKCnRy
ZWUKcHVzaGRlY2xfdG9wX2xldmVsICh4KQogICAgIHRyZWUgeDsKewogIHJlZ2lzdGVyIHRyZWUg
dDsKICByZWdpc3RlciBzdHJ1Y3QgYmluZGluZ19sZXZlbCAqYiA9IGN1cnJlbnRfYmluZGluZ19s
ZXZlbDsKCiAgY3VycmVudF9iaW5kaW5nX2xldmVsID0gZ2xvYmFsX2JpbmRpbmdfbGV2ZWw7CiAg
dCA9IHB1c2hkZWNsICh4KTsKICBjdXJyZW50X2JpbmRpbmdfbGV2ZWwgPSBiOwogIHJldHVybiB0
Owp9CgoKCgp0cmVlCmltcGxpY2l0bHlfZGVjbGFyZSAoZnVuY3Rpb25pZCkKICAgICB0cmVlIGZ1
bmN0aW9uaWQ7CnsKICByZWdpc3RlciB0cmVlIGRlY2w7CiAgaW50IHRyYWRpdGlvbmFsX3dhcm5p
bmcgPSAwOwoKICBpbnQgaW1wbGljaXRfd2FybmluZzsKIyAyNTYyICIuLi8uLi9nY2MvZ2NjL2Mt
ZGVjbC5jIgogICAgZGVjbCA9IGJ1aWxkX2RlY2wgKEZVTkNUSU9OX0RFQ0wsIGZ1bmN0aW9uaWQs
IGNfZ2xvYmFsX3RyZWVzW0NUSV9ERUZBVUxUX0ZVTkNUSU9OX1RZUEVdKTsKCgoKICBpZiAoKChm
dW5jdGlvbmlkKS0+Y29tbW9uLnB1YmxpY19mbGFnKSAmJiAoKChzdHJ1Y3QgbGFuZ19pZGVudGlm
aWVyICopIChmdW5jdGlvbmlkKSktPmdsb2JhbF92YWx1ZSkgPT0gMCkKICAgIHRyYWRpdGlvbmFs
X3dhcm5pbmcgPSAxOwoKCiAgaW1wbGljaXRfd2FybmluZyA9ICgoKChzdHJ1Y3QgbGFuZ19pZGVu
dGlmaWVyICopIChmdW5jdGlvbmlkKSktPmltcGxpY2l0X2RlY2wpID09IDApOwoKICAoX19leHRl
bnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGRlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50
KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVl
X2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwg
MjU3MiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5leHRlcm5hbF9mbGFnKSA9IDE7CiAg
KChkZWNsKS0+Y29tbW9uLnB1YmxpY19mbGFnKSA9IDE7CgoKICAoKChzdHJ1Y3QgbGFuZ19pZGVu
dGlmaWVyICopIChmdW5jdGlvbmlkKSktPmltcGxpY2l0X2RlY2wpID0gZGVjbDsKCgoKCiAgcHVz
aGRlY2wgKGRlY2wpOwoKCiAgbWF5YmVfb2JqY19jaGVja19kZWNsIChkZWNsKTsKCiAgcmVzdF9v
Zl9kZWNsX2NvbXBpbGF0aW9uIChkZWNsLCAoKHZvaWQgKikgMCksIDAsIDApOwoKICBpZiAoaW1w
bGljaXRfd2FybmluZykKICAgIGltcGxpY2l0X2RlY2xfd2FybmluZyAoZnVuY3Rpb25pZCk7CiAg
ZWxzZSBpZiAod2Fybl90cmFkaXRpb25hbCAmJiB0cmFkaXRpb25hbF93YXJuaW5nKQogICAgd2Fy
bmluZyAoImZ1bmN0aW9uIGAlcycgd2FzIHByZXZpb3VzbHkgZGVjbGFyZWQgd2l0aGluIGEgYmxv
Y2siLAogICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBmdW5j
dGlvbmlkOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoSURF
TlRJRklFUl9OT0RFKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgSURFTlRJRklFUl9OT0RFLCAi
Li4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDI1OTIsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmlk
ZW50aWZpZXIucG9pbnRlcikpOwoKCgoKICBnZW5fYXV4X2luZm9fcmVjb3JkIChkZWNsLCAwLCAx
LCAwKTsKCiAgcmV0dXJuIGRlY2w7Cn0KCnZvaWQKaW1wbGljaXRfZGVjbF93YXJuaW5nIChpZCkK
ICAgICB0cmVlIGlkOwp7CiAgY29uc3QgY2hhciAqbmFtZSA9IChfX2V4dGVuc2lvbl9fICh7IGNv
bnN0IHRyZWUgX190ID0gaWQ7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNv
ZGUpICE9IChJREVOVElGSUVSX05PREUpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBJREVOVElG
SUVSX05PREUsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjYwNiwgX19GVU5DVElPTl9fKTsg
X190OyB9KS0+aWRlbnRpZmllci5wb2ludGVyKTsKICBpZiAobWVzZ19pbXBsaWNpdF9mdW5jdGlv
bl9kZWNsYXJhdGlvbiA9PSAyKQogICAgZXJyb3IgKCJpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZiBm
dW5jdGlvbiBgJXMnIiwgbmFtZSk7CiAgZWxzZSBpZiAobWVzZ19pbXBsaWNpdF9mdW5jdGlvbl9k
ZWNsYXJhdGlvbiA9PSAxKQogICAgd2FybmluZyAoImltcGxpY2l0IGRlY2xhcmF0aW9uIG9mIGZ1
bmN0aW9uIGAlcyciLCBuYW1lKTsKfQoKCgoKCgoKc3RhdGljIGludApyZWRlY2xhcmF0aW9uX2Vy
cm9yX21lc3NhZ2UgKG5ld2RlY2wsIG9sZGRlY2wpCiAgICAgdHJlZSBuZXdkZWNsLCBvbGRkZWNs
Owp7CiAgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChuZXdkZWNsKS0+Y29tbW9uLmNvZGUpID09IFRZ
UEVfREVDTCkKICAgIHsKICAgICAgaWYgKGZsYWdfdHJhZGl0aW9uYWwgJiYgKChuZXdkZWNsKS0+
Y29tbW9uLnR5cGUpID09ICgob2xkZGVjbCktPmNvbW1vbi50eXBlKSkKICAgICAgICByZXR1cm4g
MDsKCgoKCgoKICAgICAgaWYgKGZsYWdfdHJhZGl0aW9uYWwKICAgICAgICAgICYmIChfX2V4dGVu
c2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gKChvbGRkZWNsKS0+Y29tbW9uLnR5cGUpOyBpZiAo
dHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29k
ZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4v
Z2NjL2djYy9jLWRlY2wuYyIsIDI2MzQsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUubWFp
bl92YXJpYW50KSA9PSAoKG5ld2RlY2wpLT5jb21tb24udHlwZSkpCiAgICAgICAgcmV0dXJuIDA7
CiAgICAgIGlmICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG9sZGRlY2w7IGlm
ICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5j
b2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8u
Li9nY2MvZ2NjL2MtZGVjbC5jIiwgMjYzNiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5p
bl9zeXN0ZW1faGVhZGVyX2ZsYWcpIHx8IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190
ID0gbmV3ZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAo
X190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChf
X3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAyNjM2LCBfX0ZVTkNUSU9OX18pOyBf
X3Q7IH0pLT5kZWNsLmluX3N5c3RlbV9oZWFkZXJfZmxhZykpCiAgICAgICAgcmV0dXJuIDA7CiAg
ICAgIHJldHVybiAxOwogICAgfQogIGVsc2UgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChuZXdkZWNs
KS0+Y29tbW9uLmNvZGUpID09IEZVTkNUSU9OX0RFQ0wpCiAgICB7CgoKCgogICAgICBpZiAoKF9f
ZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBvbGRkZWNsOyBpZiAodHJlZV9jb2RlX3R5
cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2Qn
KSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRl
Y2wuYyIsIDI2NDYsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5pdGlhbCkgIT0gMCAm
JiAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG5ld2RlY2w7IGlmICh0cmVlX2Nv
ZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9
ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2Nj
L2MtZGVjbC5jIiwgMjY0NiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5pbml0aWFsKSAh
PSAwCgoKICAgICAgICAgICYmICEgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0g
b2xkZGVjbDsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKEZV
TkNUSU9OX0RFQ0wpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBGVU5DVElPTl9ERUNMLCAiLi4v
Li4vZ2NjL2djYy9jLWRlY2wuYyIsIDI2NDksIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wu
aW5saW5lX2ZsYWcpICYmIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gb2xkZGVj
bDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29t
bW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywg
Ii4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAyNjQ5LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5k
ZWNsLmV4dGVybmFsX2ZsYWcpCiAgICAgICAgICAgICAgICYmICEgKChfX2V4dGVuc2lvbl9fICh7
IGNvbnN0IHRyZWUgX190ID0gbmV3ZGVjbDsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5j
b21tb24uY29kZSkgIT0gKEZVTkNUSU9OX0RFQ0wpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBG
VU5DVElPTl9ERUNMLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDI2NTAsIF9fRlVOQ1RJT05f
Xyk7IF9fdDsgfSktPmRlY2wuaW5saW5lX2ZsYWcpICYmIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0
IHRyZWUgX190ID0gbmV3ZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJl
ZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tf
ZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAyNjUwLCBfX0ZVTkNU
SU9OX18pOyBfX3Q7IH0pLT5kZWNsLmV4dGVybmFsX2ZsYWcpKSkpCiAgICAgICAgcmV0dXJuIDE7
CiAgICAgIHJldHVybiAwOwogICAgfQogIGVsc2UgaWYgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0
IHRyZWUgX190ID0gbmV3ZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJl
ZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tf
ZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAyNjU0LCBfX0ZVTkNU
SU9OX18pOyBfX3Q7IH0pLT5kZWNsLmNvbnRleHQpID09ICh0cmVlKSAoKHZvaWQgKikwKSkKICAg
IHsKCgogICAgICBpZiAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBuZXdkZWNs
OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21t
b24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAi
Li4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDI2NTgsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRl
Y2wuZXh0ZXJuYWxfZmxhZykgfHwgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBv
bGRkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3Qp
LT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwg
J2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDI2NTgsIF9fRlVOQ1RJT05fXyk7IF9fdDsg
fSktPmRlY2wuZXh0ZXJuYWxfZmxhZykpCiAgICAgICAgcmV0dXJuIDA7CgogICAgICBpZiAoKF9f
ZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBvbGRkZWNsOyBpZiAodHJlZV9jb2RlX3R5
cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2Qn
KSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRl
Y2wuYyIsIDI2NjEsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5pdGlhbCkgIT0gMCAm
JiAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG5ld2RlY2w7IGlmICh0cmVlX2Nv
ZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9
ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2Nj
L2MtZGVjbC5jIiwgMjY2MSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5pbml0aWFsKSAh
PSAwKQogICAgICAgIHJldHVybiAxOwoKCiAgICAgIGlmICgoKG9sZGRlY2wpLT5jb21tb24ucHVi
bGljX2ZsYWcpICE9ICgobmV3ZGVjbCktPmNvbW1vbi5wdWJsaWNfZmxhZykpCiAgICAgICAgcmV0
dXJuIDM7CiAgICAgIHJldHVybiAwOwogICAgfQogIGVsc2UgaWYgKGN1cnJlbnRfYmluZGluZ19s
ZXZlbC0+cGFybV9mbGFnCiAgICAgICAgICAgJiYgKChvbGRkZWNsKS0+Y29tbW9uLmFzbV93cml0
dGVuX2ZsYWcpICYmICEoKG5ld2RlY2wpLT5jb21tb24uYXNtX3dyaXR0ZW5fZmxhZykpCiAgICBy
ZXR1cm4gMDsKICBlbHNlCiAgICB7CgoKCgogICAgICBpZiAoISgoX19leHRlbnNpb25fXyAoeyBj
b25zdCB0cmVlIF9fdCA9IG5ld2RlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVt
IHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2No
ZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjY3OCwgX19G
VU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5leHRlcm5hbF9mbGFnKSAmJiAoX19leHRlbnNpb25f
XyAoeyBjb25zdCB0cmVlIF9fdCA9IG9sZGRlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAo
KChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2Ns
YXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjY3
OCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5leHRlcm5hbF9mbGFnKSkKICAgICAgICAg
ICYmIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gbmV3ZGVjbDsgaWYgKHRyZWVf
Y29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0g
IT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9n
Y2MvYy1kZWNsLmMiLCAyNjc5LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmNvbnRleHQp
ID09IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gb2xkZGVjbDsgaWYgKHRyZWVf
Y29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0g
IT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9n
Y2MvYy1kZWNsLmMiLCAyNjc5LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmNvbnRleHQp
KQogICAgICAgIHJldHVybiAyOwogICAgICByZXR1cm4gMDsKICAgIH0KfQoKCgoKCnRyZWUKbG9v
a3VwX2xhYmVsIChpZCkKICAgICB0cmVlIGlkOwp7CiAgcmVnaXN0ZXIgdHJlZSBkZWNsID0gKCgo
c3RydWN0IGxhbmdfaWRlbnRpZmllciAqKSAoaWQpKS0+bGFiZWxfdmFsdWUpOwoKICBpZiAoY3Vy
cmVudF9mdW5jdGlvbl9kZWNsID09IDApCiAgICB7CiAgICAgIGVycm9yICgibGFiZWwgJXMgcmVm
ZXJlbmNlZCBvdXRzaWRlIG9mIGFueSBmdW5jdGlvbiIsCiAgICAgICAgICAgICAoX19leHRlbnNp
b25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGlkOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCkt
PmNvbW1vbi5jb2RlKSAhPSAoSURFTlRJRklFUl9OT0RFKSkgdHJlZV9jaGVja19mYWlsZWQgKF9f
dCwgSURFTlRJRklFUl9OT0RFLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDI2OTgsIF9fRlVO
Q1RJT05fXyk7IF9fdDsgfSktPmlkZW50aWZpZXIucG9pbnRlcikpOwogICAgICByZXR1cm4gMDsK
ICAgIH0KCgogIGlmIChkZWNsICE9IDApCiAgICB7CgogICAgICBpZiAoKF9fZXh0ZW5zaW9uX18g
KHsgY29uc3QgdHJlZSBfX3QgPSBkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51
bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19j
aGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDI3MDYsIF9f
RlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuY29udGV4dCkgIT0gY3VycmVudF9mdW5jdGlvbl9k
ZWNsCiAgICAgICAgICAmJiAhICgoZGVjbCktPmNvbW1vbi5sYW5nX2ZsYWdfMSkpCiAgICAgICAg
cmV0dXJuIHNoYWRvd19sYWJlbCAoaWQpOwogICAgICByZXR1cm4gZGVjbDsKICAgIH0KCiAgZGVj
bCA9IGJ1aWxkX2RlY2wgKExBQkVMX0RFQ0wsIGlkLCBnbG9iYWxfdHJlZXNbVElfVk9JRF9UWVBF
XSk7CgoKICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGRlY2w7IGlmICh0cmVl
X2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSld
ICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2Mv
Z2NjL2MtZGVjbC5jIiwgMjcxNSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5jb250ZXh0
KSA9IGN1cnJlbnRfZnVuY3Rpb25fZGVjbDsKCiAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJl
ZSBfX3QgPSBkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUp
IChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQg
KF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDI3MTcsIF9fRlVOQ1RJT05fXyk7
IF9fdDsgfSktPmRlY2wubW9kZSkgPSBWT0lEbW9kZTsKCgoKICAoX19leHRlbnNpb25fXyAoeyBj
b25zdCB0cmVlIF9fdCA9IGRlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRy
ZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNr
X2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjcyMSwgX19GVU5D
VElPTl9fKTsgX190OyB9KS0+ZGVjbC5saW5lbnVtKSA9IGxpbmVubzsKICAoX19leHRlbnNpb25f
XyAoeyBjb25zdCB0cmVlIF9fdCA9IGRlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChl
bnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNz
X2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjcyMiwg
X19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5maWxlbmFtZSkgPSBpbnB1dF9maWxlbmFtZTsK
CiAgKCgoc3RydWN0IGxhbmdfaWRlbnRpZmllciAqKSAoaWQpKS0+bGFiZWxfdmFsdWUpID0gZGVj
bDsKCiAgbmFtZWRfbGFiZWxzID0gdHJlZV9jb25zICgodHJlZSkgKCh2b2lkICopMCksIGRlY2ws
IG5hbWVkX2xhYmVscyk7CgogIHJldHVybiBkZWNsOwp9CiMgMjczOSAiLi4vLi4vZ2NjL2djYy9j
LWRlY2wuYyIKdHJlZQpzaGFkb3dfbGFiZWwgKG5hbWUpCiAgICAgdHJlZSBuYW1lOwp7CiAgcmVn
aXN0ZXIgdHJlZSBkZWNsID0gKCgoc3RydWN0IGxhbmdfaWRlbnRpZmllciAqKSAobmFtZSkpLT5s
YWJlbF92YWx1ZSk7CgogIGlmIChkZWNsICE9IDApCiAgICB7CiAgICAgIHJlZ2lzdGVyIHRyZWUg
ZHVwOwoKCgogICAgICBmb3IgKGR1cCA9IG5hbWVkX2xhYmVsczsgZHVwOyBkdXAgPSAoKGR1cCkt
PmNvbW1vbi5jaGFpbikpCiAgICAgICAgaWYgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUg
X190ID0gZHVwOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAo
VFJFRV9MSVNUKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgVFJFRV9MSVNULCAiLi4vLi4vZ2Nj
L2djYy9jLWRlY2wuYyIsIDI3NTIsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmxpc3QudmFsdWUp
ID09IGRlY2wpCiAgICAgICAgICB7CiAgICAgICAgICAgIGVycm9yICgiZHVwbGljYXRlIGxhYmVs
IGRlY2xhcmF0aW9uIGAlcyciLAogICAgICAgICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsg
Y29uc3QgdHJlZSBfX3QgPSBuYW1lOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1v
bi5jb2RlKSAhPSAoSURFTlRJRklFUl9OT0RFKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgSURF
TlRJRklFUl9OT0RFLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDI3NTUsIF9fRlVOQ1RJT05f
Xyk7IF9fdDsgfSktPmlkZW50aWZpZXIucG9pbnRlcikpOwogICAgICAgICAgICBlcnJvcl93aXRo
X2RlY2wgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZHVwOyBpZiAoKChlbnVt
IHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoVFJFRV9MSVNUKSkgdHJlZV9jaGVj
a19mYWlsZWQgKF9fdCwgVFJFRV9MSVNULCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDI3NTYs
IF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmxpc3QudmFsdWUpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJ0aGlzIGlzIGEgcHJldmlvdXMgZGVjbGFyYXRpb24iKTsKCiAgICAgICAgICAg
IHJldHVybiBsb29rdXBfbGFiZWwgKG5hbWUpOwogICAgICAgICAgfQoKICAgICAgc2hhZG93ZWRf
bGFiZWxzID0gdHJlZV9jb25zICgodHJlZSkgKCh2b2lkICopMCksIGRlY2wsIHNoYWRvd2VkX2xh
YmVscyk7CiAgICAgICgoKHN0cnVjdCBsYW5nX2lkZW50aWZpZXIgKikgKG5hbWUpKS0+bGFiZWxf
dmFsdWUpID0gZGVjbCA9IDA7CiAgICB9CgogIHJldHVybiBsb29rdXBfbGFiZWwgKG5hbWUpOwp9
CgoKCgoKdHJlZQpkZWZpbmVfbGFiZWwgKGZpbGVuYW1lLCBsaW5lLCBuYW1lKQogICAgIGNvbnN0
IGNoYXIgKmZpbGVuYW1lOwogICAgIGludCBsaW5lOwogICAgIHRyZWUgbmFtZTsKewogIHRyZWUg
ZGVjbCA9IGxvb2t1cF9sYWJlbCAobmFtZSk7CgoKICBpZiAoZGVjbCAhPSAwICYmIChfX2V4dGVu
c2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQp
ICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVf
Y2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAy
NzgyLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmNvbnRleHQpICE9IGN1cnJlbnRfZnVu
Y3Rpb25fZGVjbCkKICAgIHsKICAgICAgc2hhZG93ZWRfbGFiZWxzID0gdHJlZV9jb25zICgodHJl
ZSkgKCh2b2lkICopMCksIGRlY2wsIHNoYWRvd2VkX2xhYmVscyk7CiAgICAgICgoKHN0cnVjdCBs
YW5nX2lkZW50aWZpZXIgKikgKG5hbWUpKS0+bGFiZWxfdmFsdWUpID0gMDsKICAgICAgZGVjbCA9
IGxvb2t1cF9sYWJlbCAobmFtZSk7CiAgICB9CgogIGlmICh3YXJuX3RyYWRpdGlvbmFsICYmICFp
bl9zeXN0ZW1faGVhZGVyICYmIGxvb2t1cF9uYW1lIChuYW1lKSkKICAgIHdhcm5pbmdfd2l0aF9m
aWxlX2FuZF9saW5lIChmaWxlbmFtZSwgbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAidHJhZGl0aW9uYWwgQyBsYWNrcyBhIHNlcGFyYXRlIG5hbWVzcGFjZSBmb3IgbGFiZWxz
LCBpZGVudGlmaWVyIGAlcycgY29uZmxpY3RzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IG5hbWU7IGlmICgoKGVudW0g
dHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChJREVOVElGSUVSX05PREUpKSB0cmVl
X2NoZWNrX2ZhaWxlZCAoX190LCBJREVOVElGSUVSX05PREUsICIuLi8uLi9nY2MvZ2NjL2MtZGVj
bC5jIiwgMjc5MiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+aWRlbnRpZmllci5wb2ludGVyKSk7
CgogIGlmICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGRlY2w7IGlmICh0cmVl
X2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSld
ICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2Mv
Z2NjL2MtZGVjbC5jIiwgMjc5NCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5pbml0aWFs
KSAhPSAwKQogICAgewogICAgICBlcnJvcl93aXRoX2ZpbGVfYW5kX2xpbmUgKGZpbGVuYW1lLCBs
aW5lLCAiZHVwbGljYXRlIGxhYmVsIGAlcyciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gbmFtZTsgaWYgKCgoZW51bSB0
cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKElERU5USUZJRVJfTk9ERSkpIHRyZWVf
Y2hlY2tfZmFpbGVkIChfX3QsIElERU5USUZJRVJfTk9ERSwgIi4uLy4uL2djYy9nY2MvYy1kZWNs
LmMiLCAyNzk3LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5pZGVudGlmaWVyLnBvaW50ZXIpKTsK
ICAgICAgcmV0dXJuIDA7CiAgICB9CiAgZWxzZQogICAgewoKICAgICAgKF9fZXh0ZW5zaW9uX18g
KHsgY29uc3QgdHJlZSBfX3QgPSBkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51
bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19j
aGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDI4MDMsIF9f
RlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5pdGlhbCkgPSBnbG9iYWxfdHJlZXNbVElfRVJS
T1JfTUFSS107CgogICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGRlY2w7
IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1v
bi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIu
Li8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjgwNSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVj
bC5maWxlbmFtZSkgPSBmaWxlbmFtZTsKICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJl
ZSBfX3QgPSBkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUp
IChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQg
KF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDI4MDYsIF9fRlVOQ1RJT05fXyk7
IF9fdDsgfSktPmRlY2wubGluZW51bSkgPSBsaW5lOwogICAgICByZXR1cm4gZGVjbDsKICAgIH0K
fQoKCgoKCgp0cmVlCmdldGRlY2xzICgpCnsKICByZXR1cm4gY3VycmVudF9iaW5kaW5nX2xldmVs
LT5uYW1lczsKfQoKCgp0cmVlCmdldHRhZ3MgKCkKewogIHJldHVybiBjdXJyZW50X2JpbmRpbmdf
bGV2ZWwtPnRhZ3M7Cn0KCgoKCgpzdGF0aWMgdm9pZApzdG9yZWRlY2xzIChkZWNscykKICAgICB0
cmVlIGRlY2xzOwp7CiAgY3VycmVudF9iaW5kaW5nX2xldmVsLT5uYW1lcyA9IGRlY2xzOwp9CgoK
CnN0YXRpYyB2b2lkCnN0b3JldGFncyAodGFncykKICAgICB0cmVlIHRhZ3M7CnsKICBjdXJyZW50
X2JpbmRpbmdfbGV2ZWwtPnRhZ3MgPSB0YWdzOwp9CiMgMjg2MCAiLi4vLi4vZ2NjL2djYy9jLWRl
Y2wuYyIKc3RhdGljIHRyZWUKbG9va3VwX3RhZyAoY29kZSwgbmFtZSwgYmluZGluZ19sZXZlbCwg
dGhpc2xldmVsX29ubHkpCiAgICAgZW51bSB0cmVlX2NvZGUgY29kZTsKICAgICBzdHJ1Y3QgYmlu
ZGluZ19sZXZlbCAqYmluZGluZ19sZXZlbDsKICAgICB0cmVlIG5hbWU7CiAgICAgaW50IHRoaXNs
ZXZlbF9vbmx5Owp7CiAgcmVnaXN0ZXIgc3RydWN0IGJpbmRpbmdfbGV2ZWwgKmxldmVsOwoKICBm
b3IgKGxldmVsID0gYmluZGluZ19sZXZlbDsgbGV2ZWw7IGxldmVsID0gbGV2ZWwtPmxldmVsX2No
YWluKQogICAgewogICAgICByZWdpc3RlciB0cmVlIHRhaWw7CiAgICAgIGZvciAodGFpbCA9IGxl
dmVsLT50YWdzOyB0YWlsOyB0YWlsID0gKCh0YWlsKS0+Y29tbW9uLmNoYWluKSkKICAgICAgICB7
CiAgICAgICAgICBpZiAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB0YWlsOyBp
ZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoVFJFRV9MSVNUKSkg
dHJlZV9jaGVja19mYWlsZWQgKF9fdCwgVFJFRV9MSVNULCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wu
YyIsIDI4NzQsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmxpc3QucHVycG9zZSkgPT0gbmFtZSkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICgoKGVudW0gdHJlZV9jb2RlKSAoKF9fZXh0
ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB0YWlsOyBpZiAoKChlbnVtIHRyZWVfY29kZSkg
KF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoVFJFRV9MSVNUKSkgdHJlZV9jaGVja19mYWlsZWQgKF9f
dCwgVFJFRV9MSVNULCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDI4NzYsIF9fRlVOQ1RJT05f
Xyk7IF9fdDsgfSktPmxpc3QudmFsdWUpKS0+Y29tbW9uLmNvZGUpICE9IGNvZGUpCiAgICAgICAg
ICAgICAgICB7CgogICAgICAgICAgICAgICAgICBwZW5kaW5nX2ludmFsaWRfeHJlZiA9IG5hbWU7
CiAgICAgICAgICAgICAgICAgIHBlbmRpbmdfaW52YWxpZF94cmVmX2ZpbGUgPSBpbnB1dF9maWxl
bmFtZTsKICAgICAgICAgICAgICAgICAgcGVuZGluZ19pbnZhbGlkX3hyZWZfbGluZSA9IGxpbmVu
bzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gKF9fZXh0ZW5zaW9uX18g
KHsgY29uc3QgdHJlZSBfX3QgPSB0YWlsOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNv
bW1vbi5jb2RlKSAhPSAoVFJFRV9MSVNUKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgVFJFRV9M
SVNULCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDI4ODMsIF9fRlVOQ1RJT05fXyk7IF9fdDsg
fSktPmxpc3QudmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBpZiAodGhpc2xl
dmVsX29ubHkgJiYgISBsZXZlbC0+dGFnX3RyYW5zcGFyZW50KQogICAgICAgIHJldHVybiAodHJl
ZSkgKCh2b2lkICopMCk7CiAgICB9CiAgcmV0dXJuICh0cmVlKSAoKHZvaWQgKikwKTsKfQoKCgoK
Cgp2b2lkCnBlbmRpbmdfeHJlZl9lcnJvciAoKQp7CiAgaWYgKHBlbmRpbmdfaW52YWxpZF94cmVm
ICE9IDApCiAgICBlcnJvcl93aXRoX2ZpbGVfYW5kX2xpbmUgKHBlbmRpbmdfaW52YWxpZF94cmVm
X2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdfaW52YWxpZF94cmVm
X2xpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJgJXMnIGRlZmluZWQgYXMgd3Jv
bmcga2luZCBvZiB0YWciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19leHRlbnNp
b25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHBlbmRpbmdfaW52YWxpZF94cmVmOyBpZiAoKChlbnVt
IHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoSURFTlRJRklFUl9OT0RFKSkgdHJl
ZV9jaGVja19mYWlsZWQgKF9fdCwgSURFTlRJRklFUl9OT0RFLCAiLi4vLi4vZ2NjL2djYy9jLWRl
Y2wuYyIsIDI5MDQsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmlkZW50aWZpZXIucG9pbnRlcikp
OwogIHBlbmRpbmdfaW52YWxpZF94cmVmID0gMDsKfQoKCgoKc3RhdGljIHRyZWUKbG9va3VwX3Rh
Z19yZXZlcnNlICh0eXBlKQogICAgIHRyZWUgdHlwZTsKewogIHJlZ2lzdGVyIHN0cnVjdCBiaW5k
aW5nX2xldmVsICpsZXZlbDsKCiAgZm9yIChsZXZlbCA9IGN1cnJlbnRfYmluZGluZ19sZXZlbDsg
bGV2ZWw7IGxldmVsID0gbGV2ZWwtPmxldmVsX2NoYWluKQogICAgewogICAgICByZWdpc3RlciB0
cmVlIHRhaWw7CiAgICAgIGZvciAodGFpbCA9IGxldmVsLT50YWdzOyB0YWlsOyB0YWlsID0gKCh0
YWlsKS0+Y29tbW9uLmNoYWluKSkKICAgICAgICB7CiAgICAgICAgICBpZiAoKF9fZXh0ZW5zaW9u
X18gKHsgY29uc3QgdHJlZSBfX3QgPSB0YWlsOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCkt
PmNvbW1vbi5jb2RlKSAhPSAoVFJFRV9MSVNUKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgVFJF
RV9MSVNULCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDI5MjIsIF9fRlVOQ1RJT05fXyk7IF9f
dDsgfSktPmxpc3QudmFsdWUpID09IHR5cGUpCiAgICAgICAgICAgIHJldHVybiAoX19leHRlbnNp
b25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHRhaWw7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190
KS0+Y29tbW9uLmNvZGUpICE9IChUUkVFX0xJU1QpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBU
UkVFX0xJU1QsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMjkyMywgX19GVU5DVElPTl9fKTsg
X190OyB9KS0+bGlzdC5wdXJwb3NlKTsKICAgICAgICB9CiAgICB9CiAgcmV0dXJuICh0cmVlKSAo
KHZvaWQgKikwKTsKfQoKCgoKCgp0cmVlCmxvb2t1cF9uYW1lIChuYW1lKQogICAgIHRyZWUgbmFt
ZTsKewogIHJlZ2lzdGVyIHRyZWUgdmFsOwoKICBpZiAoY3VycmVudF9iaW5kaW5nX2xldmVsICE9
IGdsb2JhbF9iaW5kaW5nX2xldmVsCiAgICAgICYmICgoKHN0cnVjdCBsYW5nX2lkZW50aWZpZXIg
KikgKG5hbWUpKS0+bG9jYWxfdmFsdWUpKQogICAgdmFsID0gKCgoc3RydWN0IGxhbmdfaWRlbnRp
ZmllciAqKSAobmFtZSkpLT5sb2NhbF92YWx1ZSk7CiAgZWxzZQogICAgdmFsID0gKCgoc3RydWN0
IGxhbmdfaWRlbnRpZmllciAqKSAobmFtZSkpLT5nbG9iYWxfdmFsdWUpOwogIHJldHVybiB2YWw7
Cn0KCgoKdHJlZQpsb29rdXBfbmFtZV9jdXJyZW50X2xldmVsIChuYW1lKQogICAgIHRyZWUgbmFt
ZTsKewogIHJlZ2lzdGVyIHRyZWUgdDsKCiAgaWYgKGN1cnJlbnRfYmluZGluZ19sZXZlbCA9PSBn
bG9iYWxfYmluZGluZ19sZXZlbCkKICAgIHJldHVybiAoKChzdHJ1Y3QgbGFuZ19pZGVudGlmaWVy
ICopIChuYW1lKSktPmdsb2JhbF92YWx1ZSk7CgogIGlmICgoKChzdHJ1Y3QgbGFuZ19pZGVudGlm
aWVyICopIChuYW1lKSktPmxvY2FsX3ZhbHVlKSA9PSAwKQogICAgcmV0dXJuIDA7CgogIGZvciAo
dCA9IGN1cnJlbnRfYmluZGluZ19sZXZlbC0+bmFtZXM7IHQ7IHQgPSAoKHQpLT5jb21tb24uY2hh
aW4pKQogICAgaWYgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gdDsgaWYgKHRy
ZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUp
KV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2dj
Yy9nY2MvYy1kZWNsLmMiLCAyOTYzLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLm5hbWUp
ID09IG5hbWUpCiAgICAgIGJyZWFrOwoKICByZXR1cm4gdDsKfQoKCgpzdGF0aWMgdm9pZAptYXJr
X2JpbmRpbmdfbGV2ZWwgKGFyZykKICAgICB2b2lkICphcmc7CnsKICBzdHJ1Y3QgYmluZGluZ19s
ZXZlbCAqbGV2ZWwgPSAqKHN0cnVjdCBiaW5kaW5nX2xldmVsICoqKSBhcmc7CgogIGZvciAoOyBs
ZXZlbCAhPSAwOyBsZXZlbCA9IGxldmVsLT5sZXZlbF9jaGFpbikKICAgIHsKICAgICAgZG8geyB0
cmVlIHRfXyA9IChsZXZlbC0+bmFtZXMpOyBpZiAoKCh0X18pICE9ICgodm9pZCAqKTApICYmICEg
Z2djX3NldF9tYXJrICh0X18pKSkgZG8geyBpZiAoKGdnY19wZW5kaW5nX3RyZWVzKS0+ZWxlbWVu
dHNfdXNlZCA+PSAoZ2djX3BlbmRpbmdfdHJlZXMpLT5udW1fZWxlbWVudHMpICgoKGdnY19wZW5k
aW5nX3RyZWVzKSkgPSB2YXJyYXlfZ3JvdyAoKGdnY19wZW5kaW5nX3RyZWVzKSwgMiAqIChnZ2Nf
cGVuZGluZ190cmVlcyktPm51bV9lbGVtZW50cykpOyAoZ2djX3BlbmRpbmdfdHJlZXMpLT5kYXRh
LnRyZWVbKGdnY19wZW5kaW5nX3RyZWVzKS0+ZWxlbWVudHNfdXNlZCsrXSA9ICh0X18pOyB9IHdo
aWxlICgwKTsgfSB3aGlsZSAoMCk7CiAgICAgIGRvIHsgdHJlZSB0X18gPSAobGV2ZWwtPnRhZ3Mp
OyBpZiAoKCh0X18pICE9ICgodm9pZCAqKTApICYmICEgZ2djX3NldF9tYXJrICh0X18pKSkgZG8g
eyBpZiAoKGdnY19wZW5kaW5nX3RyZWVzKS0+ZWxlbWVudHNfdXNlZCA+PSAoZ2djX3BlbmRpbmdf
dHJlZXMpLT5udW1fZWxlbWVudHMpICgoKGdnY19wZW5kaW5nX3RyZWVzKSkgPSB2YXJyYXlfZ3Jv
dyAoKGdnY19wZW5kaW5nX3RyZWVzKSwgMiAqIChnZ2NfcGVuZGluZ190cmVlcyktPm51bV9lbGVt
ZW50cykpOyAoZ2djX3BlbmRpbmdfdHJlZXMpLT5kYXRhLnRyZWVbKGdnY19wZW5kaW5nX3RyZWVz
KS0+ZWxlbWVudHNfdXNlZCsrXSA9ICh0X18pOyB9IHdoaWxlICgwKTsgfSB3aGlsZSAoMCk7CiAg
ICAgIGRvIHsgdHJlZSB0X18gPSAobGV2ZWwtPnNoYWRvd2VkKTsgaWYgKCgodF9fKSAhPSAoKHZv
aWQgKikwKSAmJiAhIGdnY19zZXRfbWFyayAodF9fKSkpIGRvIHsgaWYgKChnZ2NfcGVuZGluZ190
cmVlcyktPmVsZW1lbnRzX3VzZWQgPj0gKGdnY19wZW5kaW5nX3RyZWVzKS0+bnVtX2VsZW1lbnRz
KSAoKChnZ2NfcGVuZGluZ190cmVlcykpID0gdmFycmF5X2dyb3cgKChnZ2NfcGVuZGluZ190cmVl
cyksIDIgKiAoZ2djX3BlbmRpbmdfdHJlZXMpLT5udW1fZWxlbWVudHMpKTsgKGdnY19wZW5kaW5n
X3RyZWVzKS0+ZGF0YS50cmVlWyhnZ2NfcGVuZGluZ190cmVlcyktPmVsZW1lbnRzX3VzZWQrK10g
PSAodF9fKTsgfSB3aGlsZSAoMCk7IH0gd2hpbGUgKDApOwogICAgICBkbyB7IHRyZWUgdF9fID0g
KGxldmVsLT5ibG9ja3MpOyBpZiAoKCh0X18pICE9ICgodm9pZCAqKTApICYmICEgZ2djX3NldF9t
YXJrICh0X18pKSkgZG8geyBpZiAoKGdnY19wZW5kaW5nX3RyZWVzKS0+ZWxlbWVudHNfdXNlZCA+
PSAoZ2djX3BlbmRpbmdfdHJlZXMpLT5udW1fZWxlbWVudHMpICgoKGdnY19wZW5kaW5nX3RyZWVz
KSkgPSB2YXJyYXlfZ3JvdyAoKGdnY19wZW5kaW5nX3RyZWVzKSwgMiAqIChnZ2NfcGVuZGluZ190
cmVlcyktPm51bV9lbGVtZW50cykpOyAoZ2djX3BlbmRpbmdfdHJlZXMpLT5kYXRhLnRyZWVbKGdn
Y19wZW5kaW5nX3RyZWVzKS0+ZWxlbWVudHNfdXNlZCsrXSA9ICh0X18pOyB9IHdoaWxlICgwKTsg
fSB3aGlsZSAoMCk7CiAgICAgIGRvIHsgdHJlZSB0X18gPSAobGV2ZWwtPnRoaXNfYmxvY2spOyBp
ZiAoKCh0X18pICE9ICgodm9pZCAqKTApICYmICEgZ2djX3NldF9tYXJrICh0X18pKSkgZG8geyBp
ZiAoKGdnY19wZW5kaW5nX3RyZWVzKS0+ZWxlbWVudHNfdXNlZCA+PSAoZ2djX3BlbmRpbmdfdHJl
ZXMpLT5udW1fZWxlbWVudHMpICgoKGdnY19wZW5kaW5nX3RyZWVzKSkgPSB2YXJyYXlfZ3JvdyAo
KGdnY19wZW5kaW5nX3RyZWVzKSwgMiAqIChnZ2NfcGVuZGluZ190cmVlcyktPm51bV9lbGVtZW50
cykpOyAoZ2djX3BlbmRpbmdfdHJlZXMpLT5kYXRhLnRyZWVbKGdnY19wZW5kaW5nX3RyZWVzKS0+
ZWxlbWVudHNfdXNlZCsrXSA9ICh0X18pOyB9IHdoaWxlICgwKTsgfSB3aGlsZSAoMCk7CiAgICAg
IGRvIHsgdHJlZSB0X18gPSAobGV2ZWwtPnBhcm1fb3JkZXIpOyBpZiAoKCh0X18pICE9ICgodm9p
ZCAqKTApICYmICEgZ2djX3NldF9tYXJrICh0X18pKSkgZG8geyBpZiAoKGdnY19wZW5kaW5nX3Ry
ZWVzKS0+ZWxlbWVudHNfdXNlZCA+PSAoZ2djX3BlbmRpbmdfdHJlZXMpLT5udW1fZWxlbWVudHMp
ICgoKGdnY19wZW5kaW5nX3RyZWVzKSkgPSB2YXJyYXlfZ3JvdyAoKGdnY19wZW5kaW5nX3RyZWVz
KSwgMiAqIChnZ2NfcGVuZGluZ190cmVlcyktPm51bV9lbGVtZW50cykpOyAoZ2djX3BlbmRpbmdf
dHJlZXMpLT5kYXRhLnRyZWVbKGdnY19wZW5kaW5nX3RyZWVzKS0+ZWxlbWVudHNfdXNlZCsrXSA9
ICh0X18pOyB9IHdoaWxlICgwKTsgfSB3aGlsZSAoMCk7CiAgICB9Cn0KCgoKCgoKdm9pZAppbml0
X2RlY2xfcHJvY2Vzc2luZyAoKQp7CiAgcmVnaXN0ZXIgdHJlZSBlbmRsaW5rOwogIHRyZWUgcHRy
X2Z0eXBlX3ZvaWQsIHB0cl9mdHlwZV9wdHI7CiAgaW50IHdjaGFyX3R5cGVfc2l6ZTsKICB0cmVl
IGFycmF5X2RvbWFpbl90eXBlOwogIHRyZWUgdDsKCiAgY3VycmVudF9mdW5jdGlvbl9kZWNsID0g
KCh2b2lkICopMCk7CiAgbmFtZWRfbGFiZWxzID0gKCh2b2lkICopMCk7CiAgY3VycmVudF9iaW5k
aW5nX2xldmVsID0gKHN0cnVjdCBiaW5kaW5nX2xldmVsICopICgodm9pZCAqKTApOwogIGZyZWVf
YmluZGluZ19sZXZlbCA9IChzdHJ1Y3QgYmluZGluZ19sZXZlbCAqKSAoKHZvaWQgKikwKTsKCgog
IHB1c2hsZXZlbCAoMCk7CiAgZ2xvYmFsX2JpbmRpbmdfbGV2ZWwgPSBjdXJyZW50X2JpbmRpbmdf
bGV2ZWw7CgogIGJ1aWxkX2NvbW1vbl90cmVlX25vZGVzIChmbGFnX3NpZ25lZF9jaGFyKTsKCgog
IHB1c2hkZWNsIChidWlsZF9kZWNsIChUWVBFX0RFQ0wsIHJpZHBvaW50ZXJzWyhpbnQpIFJJRF9J
TlRdLAogICAgICAgICAgICAgICAgICAgICAgICBpbnRlZ2VyX3R5cGVzW2l0a19pbnRdKSk7CiAg
cHVzaGRlY2wgKGJ1aWxkX2RlY2wgKFRZUEVfREVDTCwgZ2V0X2lkZW50aWZpZXIgKCJjaGFyIiks
CiAgICAgICAgICAgICAgICAgICAgICAgIGludGVnZXJfdHlwZXNbaXRrX2NoYXJdKSk7CiAgcHVz
aGRlY2wgKGJ1aWxkX2RlY2wgKFRZUEVfREVDTCwgZ2V0X2lkZW50aWZpZXIgKCJsb25nIGludCIp
LAogICAgICAgICAgICAgICAgICAgICAgICBpbnRlZ2VyX3R5cGVzW2l0a19sb25nXSkpOwogIHB1
c2hkZWNsIChidWlsZF9kZWNsIChUWVBFX0RFQ0wsIGdldF9pZGVudGlmaWVyICgidW5zaWduZWQg
aW50IiksCiAgICAgICAgICAgICAgICAgICAgICAgIGludGVnZXJfdHlwZXNbaXRrX3Vuc2lnbmVk
X2ludF0pKTsKICBwdXNoZGVjbCAoYnVpbGRfZGVjbCAoVFlQRV9ERUNMLCBnZXRfaWRlbnRpZmll
ciAoImxvbmcgdW5zaWduZWQgaW50IiksCiAgICAgICAgICAgICAgICAgICAgICAgIGludGVnZXJf
dHlwZXNbaXRrX3Vuc2lnbmVkX2xvbmddKSk7CiAgcHVzaGRlY2wgKGJ1aWxkX2RlY2wgKFRZUEVf
REVDTCwgZ2V0X2lkZW50aWZpZXIgKCJsb25nIGxvbmcgaW50IiksCiAgICAgICAgICAgICAgICAg
ICAgICAgIGludGVnZXJfdHlwZXNbaXRrX2xvbmdfbG9uZ10pKTsKICBwdXNoZGVjbCAoYnVpbGRf
ZGVjbCAoVFlQRV9ERUNMLCBnZXRfaWRlbnRpZmllciAoImxvbmcgbG9uZyB1bnNpZ25lZCBpbnQi
KSwKICAgICAgICAgICAgICAgICAgICAgICAgaW50ZWdlcl90eXBlc1tpdGtfdW5zaWduZWRfbG9u
Z19sb25nXSkpOwogIHB1c2hkZWNsIChidWlsZF9kZWNsIChUWVBFX0RFQ0wsIGdldF9pZGVudGlm
aWVyICgic2hvcnQgaW50IiksCiAgICAgICAgICAgICAgICAgICAgICAgIGludGVnZXJfdHlwZXNb
aXRrX3Nob3J0XSkpOwogIHB1c2hkZWNsIChidWlsZF9kZWNsIChUWVBFX0RFQ0wsIGdldF9pZGVu
dGlmaWVyICgic2hvcnQgdW5zaWduZWQgaW50IiksCiAgICAgICAgICAgICAgICAgICAgICAgIGlu
dGVnZXJfdHlwZXNbaXRrX3Vuc2lnbmVkX3Nob3J0XSkpOwogIHB1c2hkZWNsIChidWlsZF9kZWNs
IChUWVBFX0RFQ0wsIGdldF9pZGVudGlmaWVyICgic2lnbmVkIGNoYXIiKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgaW50ZWdlcl90eXBlc1tpdGtfc2lnbmVkX2NoYXJdKSk7CiAgcHVzaGRlY2wg
KGJ1aWxkX2RlY2wgKFRZUEVfREVDTCwgZ2V0X2lkZW50aWZpZXIgKCJ1bnNpZ25lZCBjaGFyIiks
CiAgICAgICAgICAgICAgICAgICAgICAgIGludGVnZXJfdHlwZXNbaXRrX3Vuc2lnbmVkX2NoYXJd
KSk7CiAgcHVzaGRlY2wgKGJ1aWxkX2RlY2wgKFRZUEVfREVDTCwgKHRyZWUpICgodm9pZCAqKTAp
LCBnbG9iYWxfdHJlZXNbVElfSU5UUUlfVFlQRV0pKTsKICBwdXNoZGVjbCAoYnVpbGRfZGVjbCAo
VFlQRV9ERUNMLCAodHJlZSkgKCh2b2lkICopMCksIGdsb2JhbF90cmVlc1tUSV9JTlRISV9UWVBF
XSkpOwogIHB1c2hkZWNsIChidWlsZF9kZWNsIChUWVBFX0RFQ0wsICh0cmVlKSAoKHZvaWQgKikw
KSwgZ2xvYmFsX3RyZWVzW1RJX0lOVFNJX1RZUEVdKSk7CiAgcHVzaGRlY2wgKGJ1aWxkX2RlY2wg
KFRZUEVfREVDTCwgKHRyZWUpICgodm9pZCAqKTApLCBnbG9iYWxfdHJlZXNbVElfSU5URElfVFlQ
RV0pKTsKCgoKICBwdXNoZGVjbCAoYnVpbGRfZGVjbCAoVFlQRV9ERUNMLCAodHJlZSkgKCh2b2lk
ICopMCksIGdsb2JhbF90cmVlc1tUSV9VSU5UUUlfVFlQRV0pKTsKICBwdXNoZGVjbCAoYnVpbGRf
ZGVjbCAoVFlQRV9ERUNMLCAodHJlZSkgKCh2b2lkICopMCksIGdsb2JhbF90cmVlc1tUSV9VSU5U
SElfVFlQRV0pKTsKICBwdXNoZGVjbCAoYnVpbGRfZGVjbCAoVFlQRV9ERUNMLCAodHJlZSkgKCh2
b2lkICopMCksIGdsb2JhbF90cmVlc1tUSV9VSU5UU0lfVFlQRV0pKTsKICBwdXNoZGVjbCAoYnVp
bGRfZGVjbCAoVFlQRV9ERUNMLCAodHJlZSkgKCh2b2lkICopMCksIGdsb2JhbF90cmVlc1tUSV9V
SU5URElfVFlQRV0pKTsKIyAzMDU1ICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIgogIHQgPSAoKCgo
KHN0cnVjdCBsYW5nX2lkZW50aWZpZXIgKikgKGdldF9pZGVudGlmaWVyICgidW5zaWduZWQgaW50
IikpKS0+Z2xvYmFsX3ZhbHVlKSktPmNvbW1vbi50eXBlKTsKICBjX2dsb2JhbF90cmVlc1tDVElf
U0lHTkVEX1NJWkVfVFlQRV0gPSBzaWduZWRfdHlwZSAodCk7CiAgaWYgKGZsYWdfdHJhZGl0aW9u
YWwgJiYgKCh0KS0+Y29tbW9uLnVuc2lnbmVkX2ZsYWcpKQogICAgdCA9IHNpZ25lZF90eXBlICh0
KTsKCiAgY19nbG9iYWxfdHJlZXNbQ1RJX0NfU0laRV9UWVBFXSA9IHQ7CiAgc2V0X3NpemV0eXBl
ICh0KTsKCgogIGNfZ2xvYmFsX3RyZWVzW0NUSV9XSURFU1RfSU5UX0xJVF9UWVBFXQogICAgPSBt
YWtlX3NpZ25lZF90eXBlICgzMiAqIDIpOwogIGNfZ2xvYmFsX3RyZWVzW0NUSV9XSURFU1RfVUlO
VF9MSVRfVFlQRV0KICAgID0gbWFrZV91bnNpZ25lZF90eXBlICgzMiAqIDIpOwogIHB1c2hkZWNs
IChidWlsZF9kZWNsIChUWVBFX0RFQ0wsICh0cmVlKSAoKHZvaWQgKikwKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgY19nbG9iYWxfdHJlZXNbQ1RJX1dJREVTVF9JTlRfTElUX1RZUEVdKSk7CiAg
cHVzaGRlY2wgKGJ1aWxkX2RlY2wgKFRZUEVfREVDTCwgKHRyZWUpICgodm9pZCAqKTApLAogICAg
ICAgICAgICAgICAgICAgICAgICBjX2dsb2JhbF90cmVlc1tDVElfV0lERVNUX1VJTlRfTElUX1RZ
UEVdKSk7CgogIGJ1aWxkX2NvbW1vbl90cmVlX25vZGVzXzIgKGZsYWdfc2hvcnRfZG91YmxlKTsK
CiAgcHVzaGRlY2wgKGJ1aWxkX2RlY2wgKFRZUEVfREVDTCwgcmlkcG9pbnRlcnNbKGludCkgUklE
X0ZMT0FUXSwKICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsX3RyZWVzW1RJX0ZMT0FUX1RZ
UEVdKSk7CiAgcHVzaGRlY2wgKGJ1aWxkX2RlY2wgKFRZUEVfREVDTCwgcmlkcG9pbnRlcnNbKGlu
dCkgUklEX0RPVUJMRV0sCiAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9E
T1VCTEVfVFlQRV0pKTsKICBwdXNoZGVjbCAoYnVpbGRfZGVjbCAoVFlQRV9ERUNMLCBnZXRfaWRl
bnRpZmllciAoImxvbmcgZG91YmxlIiksCiAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbF90
cmVlc1tUSV9MT05HX0RPVUJMRV9UWVBFXSkpOwogIHB1c2hkZWNsIChidWlsZF9kZWNsIChUWVBF
X0RFQ0wsIGdldF9pZGVudGlmaWVyICgiY29tcGxleCBpbnQiKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgZ2xvYmFsX3RyZWVzW1RJX0NPTVBMRVhfSU5URUdFUl9UWVBFXSkpOwogIHB1c2hkZWNs
IChidWlsZF9kZWNsIChUWVBFX0RFQ0wsIGdldF9pZGVudGlmaWVyICgiY29tcGxleCBmbG9hdCIp
LAogICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxfdHJlZXNbVElfQ09NUExFWF9GTE9BVF9U
WVBFXSkpOwogIHB1c2hkZWNsIChidWlsZF9kZWNsIChUWVBFX0RFQ0wsIGdldF9pZGVudGlmaWVy
ICgiY29tcGxleCBkb3VibGUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsX3RyZWVz
W1RJX0NPTVBMRVhfRE9VQkxFX1RZUEVdKSk7CiAgcHVzaGRlY2wgKGJ1aWxkX2RlY2wgKFRZUEVf
REVDTCwgZ2V0X2lkZW50aWZpZXIgKCJjb21wbGV4IGxvbmcgZG91YmxlIiksCiAgICAgICAgICAg
ICAgICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9DT01QTEVYX0xPTkdfRE9VQkxFX1RZUEVdKSk7
CiAgcHVzaGRlY2wgKGJ1aWxkX2RlY2wgKFRZUEVfREVDTCwKICAgICAgICAgICAgICAgICAgICAg
ICAgcmlkcG9pbnRlcnNbKGludCkgUklEX1ZPSURdLCBnbG9iYWxfdHJlZXNbVElfVk9JRF9UWVBF
XSkpOwoKCiAgZG8geyBpZiAoKCh0YXJnZXRfZmxhZ3MgJiAweDAwMDEwMDAwKSAhPSAwKSkgaXg4
Nl9pbml0X2J1aWx0aW5zICgpOyB9IHdoaWxlICgwKTsKCgogIGNfZ2xvYmFsX3RyZWVzW0NUSV9X
Q0hBUl9UWVBFXSA9IGdldF9pZGVudGlmaWVyIChmbGFnX3Nob3J0X3djaGFyCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgID8gInNob3J0IHVuc2lnbmVkIGludCIKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAic2hvcnQgdW5zaWduZWQgaW50Iik7CiAgY19n
bG9iYWxfdHJlZXNbQ1RJX1dDSEFSX1RZUEVdID0gKCgoKChzdHJ1Y3QgbGFuZ19pZGVudGlmaWVy
ICopIChjX2dsb2JhbF90cmVlc1tDVElfV0NIQVJfVFlQRV0pKS0+Z2xvYmFsX3ZhbHVlKSktPmNv
bW1vbi50eXBlKTsKICB3Y2hhcl90eXBlX3NpemUgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0
cmVlIF9fdCA9IGNfZ2xvYmFsX3RyZWVzW0NUSV9XQ0hBUl9UWVBFXTsgaWYgKHRyZWVfY29kZV90
eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0
JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1k
ZWNsLmMiLCAzMTAwLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLnByZWNpc2lvbik7CiAg
Y19nbG9iYWxfdHJlZXNbQ1RJX1NJR05FRF9XQ0hBUl9UWVBFXSA9IHNpZ25lZF90eXBlIChjX2ds
b2JhbF90cmVlc1tDVElfV0NIQVJfVFlQRV0pOwogIGNfZ2xvYmFsX3RyZWVzW0NUSV9VTlNJR05F
RF9XQ0hBUl9UWVBFXSA9IHVuc2lnbmVkX3R5cGUgKGNfZ2xvYmFsX3RyZWVzW0NUSV9XQ0hBUl9U
WVBFXSk7CgogIGNfZ2xvYmFsX3RyZWVzW0NUSV9XSU5UX1RZUEVdID0KICAgICgoKCgoc3RydWN0
IGxhbmdfaWRlbnRpZmllciAqKSAoZ2V0X2lkZW50aWZpZXIgKCJ1bnNpZ25lZCBpbnQiKSkpLT5n
bG9iYWxfdmFsdWUpKS0+Y29tbW9uLnR5cGUpOwoKICBjX2dsb2JhbF90cmVlc1tDVElfSU5UTUFY
X1RZUEVdID0KICAgICgoKCgoc3RydWN0IGxhbmdfaWRlbnRpZmllciAqKSAoZ2V0X2lkZW50aWZp
ZXIgKCgoMzIgPT0gKDMyICogMikpID8gImludCIgOiAoKDMyID09ICgzMiAqIDIpKSA/ICJsb25n
IGludCIgOiAibG9uZyBsb25nIGludCIpKSkpKS0+Z2xvYmFsX3ZhbHVlKSktPmNvbW1vbi50eXBl
KTsKICBjX2dsb2JhbF90cmVlc1tDVElfVUlOVE1BWF9UWVBFXSA9CiAgICAoKCgoKHN0cnVjdCBs
YW5nX2lkZW50aWZpZXIgKikgKGdldF9pZGVudGlmaWVyICgoKDMyID09ICgzMiAqIDIpKSA/ICJ1
bnNpZ25lZCBpbnQiIDogKCgzMiA9PSAoMzIgKiAyKSkgPyAibG9uZyB1bnNpZ25lZCBpbnQiIDog
ImxvbmcgbG9uZyB1bnNpZ25lZCBpbnQiKSkpKSktPmdsb2JhbF92YWx1ZSkpLT5jb21tb24udHlw
ZSk7CgogIGNfZ2xvYmFsX3RyZWVzW0NUSV9CT09MRUFOX1RZUEVdID0gaW50ZWdlcl90eXBlc1tp
dGtfaW50XTsKICBjX2dsb2JhbF90cmVlc1tDVElfQk9PTEVBTl9UUlVFXSA9IGdsb2JhbF90cmVl
c1tUSV9JTlRFR0VSX09ORV07CiAgY19nbG9iYWxfdHJlZXNbQ1RJX0JPT0xFQU5fRkFMU0VdID0g
Z2xvYmFsX3RyZWVzW1RJX0lOVEVHRVJfWkVST107CgoKICBjX2dsb2JhbF90cmVlc1tDVElfQ19C
T09MX1RZUEVdID0gbWFrZV91bnNpZ25lZF90eXBlICg4KTsKICAoKGNfZ2xvYmFsX3RyZWVzW0NU
SV9DX0JPT0xfVFlQRV0pLT5jb21tb24uY29kZSA9IChpbnQpIChCT09MRUFOX1RZUEUpKTsKICAo
X19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGNfZ2xvYmFsX3RyZWVzW0NUSV9DX0JP
T0xfVFlQRV07IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9f
dCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190
LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMzExOSwgX19GVU5DVElPTl9fKTsgX190
OyB9KS0+dHlwZS5tYXh2YWwpID0gYnVpbGRfaW50XzJfd2lkZSAoKHVuc2lnbmVkIGludCkgKDEp
LCAoaW50KSAoMCkpOwogICgoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBjX2ds
b2JhbF90cmVlc1tDVElfQ19CT09MX1RZUEVdOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgo
ZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFz
c19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDMxMjAs
IF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUubWF4dmFsKSktPmNvbW1vbi50eXBlKSA9IGNf
Z2xvYmFsX3RyZWVzW0NUSV9DX0JPT0xfVFlQRV07CiAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3Qg
dHJlZSBfX3QgPSBjX2dsb2JhbF90cmVlc1tDVElfQ19CT09MX1RZUEVdOyBpZiAodHJlZV9jb2Rl
X3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAo
J3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9j
LWRlY2wuYyIsIDMxMjEsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUucHJlY2lzaW9uKSA9
IDE7CiAgcHVzaGRlY2wgKGJ1aWxkX2RlY2wgKFRZUEVfREVDTCwgZ2V0X2lkZW50aWZpZXIgKCJf
Qm9vbCIpLAogICAgICAgICAgICAgICAgICAgICAgICBjX2dsb2JhbF90cmVlc1tDVElfQ19CT09M
X1RZUEVdKSk7CiAgY19nbG9iYWxfdHJlZXNbQ1RJX0NfQk9PTF9GQUxTRV0gPSBidWlsZF9pbnRf
Ml93aWRlICgodW5zaWduZWQgaW50KSAoMCksIChpbnQpICgwKSk7CiAgKChjX2dsb2JhbF90cmVl
c1tDVElfQ19CT09MX0ZBTFNFXSktPmNvbW1vbi50eXBlKSA9IGNfZ2xvYmFsX3RyZWVzW0NUSV9D
X0JPT0xfVFlQRV07CiAgY19nbG9iYWxfdHJlZXNbQ1RJX0NfQk9PTF9UUlVFXSA9IGJ1aWxkX2lu
dF8yX3dpZGUgKCh1bnNpZ25lZCBpbnQpICgxKSwgKGludCkgKDApKTsKICAoKGNfZ2xvYmFsX3Ry
ZWVzW0NUSV9DX0JPT0xfVFJVRV0pLT5jb21tb24udHlwZSkgPSBjX2dsb2JhbF90cmVlc1tDVElf
Q19CT09MX1RZUEVdOwoKICBjX2dsb2JhbF90cmVlc1tDVElfU1RSSU5HX1RZUEVdID0gYnVpbGRf
cG9pbnRlcl90eXBlIChpbnRlZ2VyX3R5cGVzW2l0a19jaGFyXSk7CiAgY19nbG9iYWxfdHJlZXNb
Q1RJX0NPTlNUX1NUUklOR19UWVBFXQogICAgPSBidWlsZF9wb2ludGVyX3R5cGUgKGJ1aWxkX3F1
YWxpZmllZF90eXBlIChpbnRlZ2VyX3R5cGVzW2l0a19jaGFyXSwgKCgxKSA/IDB4MSA6IDApIHwg
KCgwKSA/IDB4MiA6IDApKSk7CgoKCgoKCiAgYXJyYXlfZG9tYWluX3R5cGUgPSBidWlsZF9pbmRl
eF90eXBlIChidWlsZF9pbnRfMl93aWRlICgodW5zaWduZWQgaW50KSAoMjAwKSwgKGludCkgKDAp
KSk7CgoKCgogIGNfZ2xvYmFsX3RyZWVzW0NUSV9DSEFSX0FSUkFZX1RZUEVdID0gYnVpbGRfYXJy
YXlfdHlwZSAoaW50ZWdlcl90eXBlc1tpdGtfY2hhcl0sIGFycmF5X2RvbWFpbl90eXBlKTsKCgog
IGNfZ2xvYmFsX3RyZWVzW0NUSV9JTlRfQVJSQVlfVFlQRV0KICAgID0gYnVpbGRfYXJyYXlfdHlw
ZSAoaW50ZWdlcl90eXBlc1tpdGtfaW50XSwgYXJyYXlfZG9tYWluX3R5cGUpOwoKCiAgY19nbG9i
YWxfdHJlZXNbQ1RJX1dDSEFSX0FSUkFZX1RZUEVdCiAgICA9IGJ1aWxkX2FycmF5X3R5cGUgKGNf
Z2xvYmFsX3RyZWVzW0NUSV9XQ0hBUl9UWVBFXSwgYXJyYXlfZG9tYWluX3R5cGUpOwoKICBjX2ds
b2JhbF90cmVlc1tDVElfVk9JRF9MSVNUXSA9IHRyZWVfY29ucyAoKHRyZWUpICgodm9pZCAqKTAp
LCBnbG9iYWxfdHJlZXNbVElfVk9JRF9UWVBFXSwgKHRyZWUpICgodm9pZCAqKTApKTsKCiAgY19n
bG9iYWxfdHJlZXNbQ1RJX0RFRkFVTFRfRlVOQ1RJT05fVFlQRV0gPSBidWlsZF9mdW5jdGlvbl90
eXBlIChpbnRlZ2VyX3R5cGVzW2l0a19pbnRdLCAodHJlZSkgKCh2b2lkICopMCkpOwogIGdsb2Jh
bF90cmVlc1tUSV9QVFJESUZGX1RZUEVdCiAgICA9ICgoKCgoc3RydWN0IGxhbmdfaWRlbnRpZmll
ciAqKSAoZ2V0X2lkZW50aWZpZXIgKCJpbnQiKSkpLT5nbG9iYWxfdmFsdWUpKS0+Y29tbW9uLnR5
cGUpOwogIGNfZ2xvYmFsX3RyZWVzW0NUSV9VTlNJR05FRF9QVFJESUZGX1RZUEVdID0gdW5zaWdu
ZWRfdHlwZSAoZ2xvYmFsX3RyZWVzW1RJX1BUUkRJRkZfVFlQRV0pOwoKICBjX2NvbW1vbl9ub2Rl
c19hbmRfYnVpbHRpbnMgKCk7CgogIGVuZGxpbmsgPSBjX2dsb2JhbF90cmVlc1tDVElfVk9JRF9M
SVNUXTsKICBwdHJfZnR5cGVfdm9pZCA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKGdsb2JhbF90cmVl
c1tUSV9QVFJfVFlQRV0sIGVuZGxpbmspOwogIHB0cl9mdHlwZV9wdHIKICAgID0gYnVpbGRfZnVu
Y3Rpb25fdHlwZSAoZ2xvYmFsX3RyZWVzW1RJX1BUUl9UWVBFXSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHJlZV9jb25zICgodHJlZSkgKCh2b2lkICopMCksIGdsb2JhbF90cmVlc1tUSV9Q
VFJfVFlQRV0sIGVuZGxpbmspKTsKCgoKCiAgaWYgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRy
ZWUgX190ID0gZ2xvYmFsX3RyZWVzW1RJX0ZMT0FUX1RZUEVdOyBpZiAodHJlZV9jb2RlX3R5cGVb
KGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkg
dHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wu
YyIsIDMxNzEsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUucHJlY2lzaW9uKQogICAgICA9
PSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGludGVnZXJfdHlwZXNbaXRrX2xv
bmddOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5j
b21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3Qn
LCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDMxNzIsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSkt
PnR5cGUucHJlY2lzaW9uKSkKICAgIHsKICAgICAgY19nbG9iYWxfdHJlZXNbQ1RJX0c3N19JTlRF
R0VSX1RZUEVdID0gaW50ZWdlcl90eXBlc1tpdGtfbG9uZ107CiAgICAgIGNfZ2xvYmFsX3RyZWVz
W0NUSV9HNzdfVUlOVEVHRVJfVFlQRV0gPSBpbnRlZ2VyX3R5cGVzW2l0a191bnNpZ25lZF9sb25n
XTsKICAgIH0KICBlbHNlIGlmICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGds
b2JhbF90cmVlc1tUSV9GTE9BVF9UWVBFXTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVu
dW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3Nf
Y2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAzMTc3LCBf
X0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLnByZWNpc2lvbikKICAgICAgICAgICA9PSAoX19l
eHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGludGVnZXJfdHlwZXNbaXRrX2ludF07IGlm
ICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5j
b2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8u
Li9nY2MvZ2NjL2MtZGVjbC5jIiwgMzE3OCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5w
cmVjaXNpb24pKQogICAgewogICAgICBjX2dsb2JhbF90cmVlc1tDVElfRzc3X0lOVEVHRVJfVFlQ
RV0gPSBpbnRlZ2VyX3R5cGVzW2l0a19pbnRdOwogICAgICBjX2dsb2JhbF90cmVlc1tDVElfRzc3
X1VJTlRFR0VSX1RZUEVdID0gaW50ZWdlcl90eXBlc1tpdGtfdW5zaWduZWRfaW50XTsKICAgIH0K
ICBlbHNlCiAgICBjX2dsb2JhbF90cmVlc1tDVElfRzc3X0lOVEVHRVJfVFlQRV0gPSBjX2dsb2Jh
bF90cmVlc1tDVElfRzc3X1VJTlRFR0VSX1RZUEVdID0gKHRyZWUpICgodm9pZCAqKTApOwoKICBp
ZiAoY19nbG9iYWxfdHJlZXNbQ1RJX0c3N19JTlRFR0VSX1RZUEVdICE9ICh0cmVlKSAoKHZvaWQg
KikwKSkKICAgIHsKICAgICAgcHVzaGRlY2wgKGJ1aWxkX2RlY2wgKFRZUEVfREVDTCwgZ2V0X2lk
ZW50aWZpZXIgKCJfX2c3N19pbnRlZ2VyIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
X2dsb2JhbF90cmVlc1tDVElfRzc3X0lOVEVHRVJfVFlQRV0pKTsKICAgICAgcHVzaGRlY2wgKGJ1
aWxkX2RlY2wgKFRZUEVfREVDTCwgZ2V0X2lkZW50aWZpZXIgKCJfX2c3N191aW50ZWdlciIpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY19nbG9iYWxfdHJlZXNbQ1RJX0c3N19VSU5URUdF
Ul9UWVBFXSkpOwogICAgfQoKICBpZiAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3Qg
PSBnbG9iYWxfdHJlZXNbVElfRkxPQVRfVFlQRV07IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAo
KChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2Ns
YXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMzE5
NCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5wcmVjaXNpb24pICogMgogICAgICA9PSAo
X19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGludGVnZXJfdHlwZXNbaXRrX2xvbmdd
OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21t
b24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAi
Li4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDMxOTUsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5
cGUucHJlY2lzaW9uKSkKICAgIHsKICAgICAgY19nbG9iYWxfdHJlZXNbQ1RJX0c3N19MT05HSU5U
X1RZUEVdID0gaW50ZWdlcl90eXBlc1tpdGtfbG9uZ107CiAgICAgIGNfZ2xvYmFsX3RyZWVzW0NU
SV9HNzdfVUxPTkdJTlRfVFlQRV0gPSBpbnRlZ2VyX3R5cGVzW2l0a191bnNpZ25lZF9sb25nXTsK
ICAgIH0KICBlbHNlIGlmICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGdsb2Jh
bF90cmVlc1tUSV9GTE9BVF9UWVBFXTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0g
dHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hl
Y2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAzMjAwLCBfX0ZV
TkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLnByZWNpc2lvbikgKiAyCiAgICAgICAgICAgPT0gKF9f
ZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBpbnRlZ2VyX3R5cGVzW2l0a19sb25nX2xv
bmddOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5j
b21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3Qn
LCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDMyMDEsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSkt
PnR5cGUucHJlY2lzaW9uKSkKICAgIHsKICAgICAgY19nbG9iYWxfdHJlZXNbQ1RJX0c3N19MT05H
SU5UX1RZUEVdID0gaW50ZWdlcl90eXBlc1tpdGtfbG9uZ19sb25nXTsKICAgICAgY19nbG9iYWxf
dHJlZXNbQ1RJX0c3N19VTE9OR0lOVF9UWVBFXSA9IGludGVnZXJfdHlwZXNbaXRrX3Vuc2lnbmVk
X2xvbmdfbG9uZ107CiAgICB9CiAgZWxzZQogICAgY19nbG9iYWxfdHJlZXNbQ1RJX0c3N19MT05H
SU5UX1RZUEVdID0gY19nbG9iYWxfdHJlZXNbQ1RJX0c3N19VTE9OR0lOVF9UWVBFXSA9ICh0cmVl
KSAoKHZvaWQgKikwKTsKCiAgaWYgKGNfZ2xvYmFsX3RyZWVzW0NUSV9HNzdfTE9OR0lOVF9UWVBF
XSAhPSAodHJlZSkgKCh2b2lkICopMCkpCiAgICB7CiAgICAgIHB1c2hkZWNsIChidWlsZF9kZWNs
IChUWVBFX0RFQ0wsIGdldF9pZGVudGlmaWVyICgiX19nNzdfbG9uZ2ludCIpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY19nbG9iYWxfdHJlZXNbQ1RJX0c3N19MT05HSU5UX1RZUEVdKSk7
CiAgICAgIHB1c2hkZWNsIChidWlsZF9kZWNsIChUWVBFX0RFQ0wsIGdldF9pZGVudGlmaWVyICgi
X19nNzdfdWxvbmdpbnQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNfZ2xvYmFsX3Ry
ZWVzW0NUSV9HNzdfVUxPTkdJTlRfVFlQRV0pKTsKICAgIH0KCiAgYnVpbHRpbl9mdW5jdGlvbiAo
Il9fYnVpbHRpbl9hZ2dyZWdhdGVfaW5jb21pbmdfYWRkcmVzcyIsCiAgICAgICAgICAgICAgICAg
ICAgYnVpbGRfZnVuY3Rpb25fdHlwZSAoZ2xvYmFsX3RyZWVzW1RJX1BUUl9UWVBFXSwgKHRyZWUp
ICgodm9pZCAqKTApKSwKICAgICAgICAgICAgICAgICAgICBCVUlMVF9JTl9BR0dSRUdBVEVfSU5D
T01JTkdfQUREUkVTUywKICAgICAgICAgICAgICAgICAgICBCVUlMVF9JTl9OT1JNQUwsICgodm9p
ZCAqKSAwKSk7CgoKICBidWlsdGluX2Z1bmN0aW9uICgiX19idWlsdGluX3Vud2luZF9pbml0IiwK
ICAgICAgICAgICAgICAgICAgICBidWlsZF9mdW5jdGlvbl90eXBlIChnbG9iYWxfdHJlZXNbVElf
Vk9JRF9UWVBFXSwgZW5kbGluayksCiAgICAgICAgICAgICAgICAgICAgQlVJTFRfSU5fVU5XSU5E
X0lOSVQsIEJVSUxUX0lOX05PUk1BTCwgKCh2b2lkICopIDApKTsKICBidWlsdGluX2Z1bmN0aW9u
ICgiX19idWlsdGluX2R3YXJmX2NmYSIsIHB0cl9mdHlwZV92b2lkLAogICAgICAgICAgICAgICAg
ICAgIEJVSUxUX0lOX0RXQVJGX0NGQSwgQlVJTFRfSU5fTk9STUFMLCAoKHZvaWQgKikgMCkpOwog
IGJ1aWx0aW5fZnVuY3Rpb24gKCJfX2J1aWx0aW5fZHdhcmZfZnBfcmVnbnVtIiwKICAgICAgICAg
ICAgICAgICAgICBidWlsZF9mdW5jdGlvbl90eXBlIChpbnRlZ2VyX3R5cGVzW2l0a191bnNpZ25l
ZF9pbnRdLCBlbmRsaW5rKSwKICAgICAgICAgICAgICAgICAgICBCVUlMVF9JTl9EV0FSRl9GUF9S
RUdOVU0sIEJVSUxUX0lOX05PUk1BTCwgKCh2b2lkICopIDApKTsKICBidWlsdGluX2Z1bmN0aW9u
ICgiX19idWlsdGluX2luaXRfZHdhcmZfcmVnX3NpemVfdGFibGUiLCBjX2dsb2JhbF90cmVlc1tD
VElfVk9JRF9GVFlQRV9QVFJdLAogICAgICAgICAgICAgICAgICAgIEJVSUxUX0lOX0lOSVRfRFdB
UkZfUkVHX1NJWkVTLCBCVUlMVF9JTl9OT1JNQUwsICgodm9pZCAqKSAwKSk7CiAgYnVpbHRpbl9m
dW5jdGlvbiAoIl9fYnVpbHRpbl9mcm9iX3JldHVybl9hZGRyIiwgcHRyX2Z0eXBlX3B0ciwKICAg
ICAgICAgICAgICAgICAgICBCVUlMVF9JTl9GUk9CX1JFVFVSTl9BRERSLCBCVUlMVF9JTl9OT1JN
QUwsICgodm9pZCAqKSAwKSk7CiAgYnVpbHRpbl9mdW5jdGlvbiAoIl9fYnVpbHRpbl9leHRyYWN0
X3JldHVybl9hZGRyIiwgcHRyX2Z0eXBlX3B0ciwKICAgICAgICAgICAgICAgICAgICBCVUlMVF9J
Tl9FWFRSQUNUX1JFVFVSTl9BRERSLCBCVUlMVF9JTl9OT1JNQUwsICgodm9pZCAqKSAwKSk7CiAg
YnVpbHRpbl9mdW5jdGlvbgogICAgKCJfX2J1aWx0aW5fZWhfcmV0dXJuIiwKICAgICBidWlsZF9m
dW5jdGlvbl90eXBlIChnbG9iYWxfdHJlZXNbVElfVk9JRF9UWVBFXSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICB0cmVlX2NvbnMgKCh0cmVlKSAoKHZvaWQgKikwKSwgZ2xvYmFsX3RyZWVzW1RJ
X1BUUl9UWVBFXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWVfY29u
cyAoKHRyZWUpICgodm9pZCAqKTApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0eXBlX2Zvcl9tb2RlIChwdHJfbW9kZSwgMCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWVfY29ucyAoKHRyZWUpICgodm9p
ZCAqKTApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsb2JhbF90cmVlc1tUSV9QVFJfVFlQRV0sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kbGluaykpKSksCiAgICAg
QlVJTFRfSU5fRUhfUkVUVVJOLCBCVUlMVF9JTl9OT1JNQUwsICgodm9pZCAqKSAwKSk7CgogIHBl
ZGFudGljX2x2YWx1ZXMgPSBwZWRhbnRpYzsKCgoKICBjX2dsb2JhbF90cmVlc1tDVElfRlVOQ1RJ
T05fSURdID0gZ2V0X2lkZW50aWZpZXIgKCJfX0ZVTkNUSU9OX18iKTsKICBjX2dsb2JhbF90cmVl
c1tDVElfUFJFVFRZX0ZVTkNUSU9OX0lEXSA9IGdldF9pZGVudGlmaWVyICgiX19QUkVUVFlfRlVO
Q1RJT05fXyIpOwogIGNfZ2xvYmFsX3RyZWVzW0NUSV9GVU5DX0lEXSA9IGdldF9pZGVudGlmaWVy
ICgiX19mdW5jX18iKTsKICBtYWtlX2ZuYW1lX2RlY2wgPSBjX21ha2VfZm5hbWVfZGVjbDsKICBk
ZWNsYXJlX2Z1bmN0aW9uX25hbWUgKCk7CgogIHN0YXJ0X2lkZW50aWZpZXJfd2FybmluZ3MgKCk7
CgoKICBpbml0X2Z1bmN0aW9uX2Zvcm1hdF9pbmZvICgpOwoKICBpbmNvbXBsZXRlX2RlY2xfZmlu
YWxpemVfaG9vayA9IGZpbmlzaF9pbmNvbXBsZXRlX2RlY2w7CgoKCiAgZ2djX2FkZF90cmVlX3Jv
b3QgKGNfZ2xvYmFsX3RyZWVzLCBDVElfTUFYKTsKICBnZ2NfYWRkX3Jvb3QgKCZjX3N0bXRfdHJl
ZSwgMSwgc2l6ZW9mIGNfc3RtdF90cmVlLCBtYXJrX3N0bXRfdHJlZSk7CiAgZ2djX2FkZF90cmVl
X3Jvb3QgKCZjX3Njb3BlX3N0bXRfc3RhY2ssIDEpOwogIGdnY19hZGRfdHJlZV9yb290ICgmbmFt
ZWRfbGFiZWxzLCAxKTsKICBnZ2NfYWRkX3RyZWVfcm9vdCAoJnNoYWRvd2VkX2xhYmVscywgMSk7
CiAgZ2djX2FkZF9yb290ICgmY3VycmVudF9iaW5kaW5nX2xldmVsLCAxLCBzaXplb2YgY3VycmVu
dF9iaW5kaW5nX2xldmVsLAogICAgICAgICAgICAgICAgbWFya19iaW5kaW5nX2xldmVsKTsKICBn
Z2NfYWRkX3Jvb3QgKCZsYWJlbF9sZXZlbF9jaGFpbiwgMSwgc2l6ZW9mIGxhYmVsX2xldmVsX2No
YWluLAogICAgICAgICAgICAgICAgbWFya19iaW5kaW5nX2xldmVsKTsKICBnZ2NfYWRkX3RyZWVf
cm9vdCAoJnN0YXRpY19jdG9ycywgMSk7CiAgZ2djX2FkZF90cmVlX3Jvb3QgKCZzdGF0aWNfZHRv
cnMsIDEpOwp9CiMgMzI4OCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIKc3RhdGljIHRyZWUKY19t
YWtlX2ZuYW1lX2RlY2wgKGlkLCBuYW1lLCB0eXBlX2RlcCkKICAgICB0cmVlIGlkOwogICAgIGNv
bnN0IGNoYXIgKm5hbWU7CiAgICAgaW50IHR5cGVfZGVwIF9fYXR0cmlidXRlX18gKChfX3VudXNl
ZF9fKSk7CnsKICB0cmVlIGRlY2wsIHR5cGUsIGluaXQ7CiAgc2l6ZV90IGxlbmd0aCA9IHN0cmxl
biAobmFtZSk7CgogIHR5cGUgPSBidWlsZF9hcnJheV90eXBlCiAgICAgICAgICAoYnVpbGRfcXVh
bGlmaWVkX3R5cGUgKGludGVnZXJfdHlwZXNbaXRrX2NoYXJdLCAweDEpLAogICAgICAgICAgIGJ1
aWxkX2luZGV4X3R5cGUgKGJ1aWxkX2ludF8yX3dpZGUgKCh1bnNpZ25lZCBpbnQpIChsZW5ndGgp
LCAoaW50KSAoMCkpKSk7CgogIGRlY2wgPSBidWlsZF9kZWNsIChWQVJfREVDTCwgaWQsIHR5cGUp
OwogICgoZGVjbCktPmNvbW1vbi5zdGF0aWNfZmxhZykgPSAxOwogICgoZGVjbCktPmNvbW1vbi5y
ZWFkb25seV9mbGFnKSA9IDE7CiAgKChkZWNsKS0+Y29tbW9uLmFzbV93cml0dGVuX2ZsYWcpID0g
MTsKICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGRlY2w7IGlmICh0cmVlX2Nv
ZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9
ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2Nj
L2MtZGVjbC5jIiwgMzMwNSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5saW5lbnVtKSA9
IDA7CiAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBkZWNsOyBpZiAodHJlZV9j
b2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAh
PSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2dj
Yy9jLWRlY2wuYyIsIDMzMDYsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuYXJ0aWZpY2lh
bF9mbGFnKSA9IDE7CiAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBkZWNsOyBp
ZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24u
Y29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4v
Li4vZ2NjL2djYy9jLWRlY2wuYyIsIDMzMDcsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wu
aW5fc3lzdGVtX2hlYWRlcl9mbGFnKSA9IDE7CiAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJl
ZSBfX3QgPSBkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUp
IChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQg
KF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDMzMDgsIF9fRlVOQ1RJT05fXyk7
IF9fdDsgfSktPmRlY2wuaWdub3JlZF9mbGFnKSA9IDE7CiAgaW5pdCA9IGJ1aWxkX3N0cmluZyAo
bGVuZ3RoICsgMSwgbmFtZSk7CiAgKChpbml0KS0+Y29tbW9uLnR5cGUpID0gdHlwZTsKICAoX19l
eHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGRlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVso
aW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0
cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5j
IiwgMzMxMSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5pbml0aWFsKSA9IGluaXQ7CiAg
ZmluaXNoX2RlY2wgKHB1c2hkZWNsIChkZWNsKSwgaW5pdCwgKHRyZWUpICgodm9pZCAqKTApKTsK
CiAgcmV0dXJuIGRlY2w7Cn0KIyAzMzI1ICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIgp0cmVlCmJ1
aWx0aW5fZnVuY3Rpb24gKG5hbWUsIHR5cGUsIGZ1bmN0aW9uX2NvZGUsIGNsYXNzLCBsaWJyYXJ5
X25hbWUpCiAgICAgY29uc3QgY2hhciAqbmFtZTsKICAgICB0cmVlIHR5cGU7CiAgICAgaW50IGZ1
bmN0aW9uX2NvZGU7CiAgICAgZW51bSBidWlsdF9pbl9jbGFzcyBjbGFzczsKICAgICBjb25zdCBj
aGFyICpsaWJyYXJ5X25hbWU7CnsKICB0cmVlIGRlY2wgPSBidWlsZF9kZWNsIChGVU5DVElPTl9E
RUNMLCBnZXRfaWRlbnRpZmllciAobmFtZSksIHR5cGUpOwogIChfX2V4dGVuc2lvbl9fICh7IGNv
bnN0IHRyZWUgX190ID0gZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJl
ZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tf
ZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAzMzM0LCBfX0ZVTkNU
SU9OX18pOyBfX3Q7IH0pLT5kZWNsLmV4dGVybmFsX2ZsYWcpID0gMTsKICAoKGRlY2wpLT5jb21t
b24ucHVibGljX2ZsYWcpID0gMTsKCgoKICBpZiAoZmxhZ190cmFkaXRpb25hbCAmJiBuYW1lWzBd
ICE9ICdfJykKICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZGVjbDsgaWYg
KCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKEZVTkNUSU9OX0RFQ0wp
KSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBGVU5DVElPTl9ERUNMLCAiLi4vLi4vZ2NjL2djYy9j
LWRlY2wuYyIsIDMzNDAsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmNvbW1vbi51bnNpZ25lZF9m
bGFnKSA9IDE7CiAgaWYgKGxpYnJhcnlfbmFtZSkKICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0
IHRyZWUgX190ID0gZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9j
b2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFp
bGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAzMzQyLCBfX0ZVTkNUSU9O
X18pOyBfX3Q7IH0pLT5kZWNsLmFzc2VtYmxlcl9uYW1lKSA9IGdldF9pZGVudGlmaWVyIChsaWJy
YXJ5X25hbWUpOwogIG1ha2VfZGVjbF9ydGwgKGRlY2wsICgodm9pZCAqKSAwKSwgMSk7CiAgcHVz
aGRlY2wgKGRlY2wpOwogIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZGVjbDsg
aWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKEZVTkNUSU9OX0RF
Q0wpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBGVU5DVElPTl9ERUNMLCAiLi4vLi4vZ2NjL2dj
Yy9jLWRlY2wuYyIsIDMzNDUsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuYnVpbHRfaW5f
Y2xhc3MpID0gY2xhc3M7CiAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBkZWNs
OyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoRlVOQ1RJT05f
REVDTCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIEZVTkNUSU9OX0RFQ0wsICIuLi8uLi9nY2Mv
Z2NjL2MtZGVjbC5jIiwgMzM0NiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC51MS5mKSA9
IGZ1bmN0aW9uX2NvZGU7CgoKCiAgaWYgKG5hbWVbMF0gIT0gJ18nIHx8IG5hbWVbMV0gIT0gJ18n
KQogICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSAoZGVjbCk7IGlmICh0cmVl
X2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSld
ICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2Mv
Z2NjL2MtZGVjbC5jIiwgMzM1MSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5sYW5nX2Zs
YWdfMykgPSAxOwoKICByZXR1cm4gZGVjbDsKfQojIDMzNjQgIi4uLy4uL2djYy9nY2MvYy1kZWNs
LmMiCnZvaWQKc2hhZG93X3RhZyAoZGVjbHNwZWNzKQogICAgIHRyZWUgZGVjbHNwZWNzOwp7CiAg
c2hhZG93X3RhZ193YXJuZWQgKGRlY2xzcGVjcywgMCk7Cn0KCnZvaWQKc2hhZG93X3RhZ193YXJu
ZWQgKGRlY2xzcGVjcywgd2FybmVkKQogICAgIHRyZWUgZGVjbHNwZWNzOwogICAgIGludCB3YXJu
ZWQ7CgoKewogIGludCBmb3VuZF90YWcgPSAwOwogIHJlZ2lzdGVyIHRyZWUgbGluazsKICB0cmVl
IHNwZWNzLCBhdHRyczsKCiAgcGVuZGluZ19pbnZhbGlkX3hyZWYgPSAwOwoKCgogIHNwbGl0X3Nw
ZWNzX2F0dHJzIChkZWNsc3BlY3MsICZzcGVjcywgJmF0dHJzKTsKCiAgZm9yIChsaW5rID0gc3Bl
Y3M7IGxpbms7IGxpbmsgPSAoKGxpbmspLT5jb21tb24uY2hhaW4pKQogICAgewogICAgICByZWdp
c3RlciB0cmVlIHZhbHVlID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBsaW5r
OyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoVFJFRV9MSVNU
KSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgVFJFRV9MSVNULCAiLi4vLi4vZ2NjL2djYy9jLWRl
Y2wuYyIsIDMzOTAsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmxpc3QudmFsdWUpOwogICAgICBy
ZWdpc3RlciBlbnVtIHRyZWVfY29kZSBjb2RlID0gKChlbnVtIHRyZWVfY29kZSkgKHZhbHVlKS0+
Y29tbW9uLmNvZGUpOwoKICAgICAgaWYgKGNvZGUgPT0gUkVDT1JEX1RZUEUgfHwgY29kZSA9PSBV
TklPTl9UWVBFIHx8IGNvZGUgPT0gRU5VTUVSQUxfVFlQRSkKCgogICAgICAgIHsKICAgICAgICAg
IHJlZ2lzdGVyIHRyZWUgbmFtZSA9IGxvb2t1cF90YWdfcmV2ZXJzZSAodmFsdWUpOwogICAgICAg
ICAgcmVnaXN0ZXIgdHJlZSB0OwoKICAgICAgICAgIGZvdW5kX3RhZysrOwoKICAgICAgICAgIGlm
IChuYW1lID09IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAod2FybmVkICE9IDEg
JiYgY29kZSAhPSBFTlVNRVJBTF9UWVBFKQoKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgcGVkd2FybiAoInVubmFtZWQgc3RydWN0L3VuaW9uIHRoYXQgZGVmaW5lcyBubyBpbnN0
YW5jZXMiKTsKICAgICAgICAgICAgICAgICAgd2FybmVkID0gMTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
dCA9IGxvb2t1cF90YWcgKGNvZGUsIG5hbWUsIGN1cnJlbnRfYmluZGluZ19sZXZlbCwgMSk7Cgog
ICAgICAgICAgICAgIGlmICh0ID09IDApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgIHQgPSBtYWtlX25vZGUgKGNvZGUpOwogICAgICAgICAgICAgICAgICBwdXNodGFnIChuYW1l
LCB0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxz
ZQogICAgICAgIHsKICAgICAgICAgIGlmICghd2FybmVkICYmICEgaW5fc3lzdGVtX2hlYWRlcikK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIHdhcm5pbmcgKCJ1c2VsZXNzIGtleXdvcmQgb3Ig
dHlwZSBuYW1lIGluIGVtcHR5IGRlY2xhcmF0aW9uIik7CiAgICAgICAgICAgICAgd2FybmVkID0g
MjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgaWYgKGZvdW5kX3RhZyA+IDEpCiAg
ICBlcnJvciAoInR3byB0eXBlcyBzcGVjaWZpZWQgaW4gb25lIGVtcHR5IGRlY2xhcmF0aW9uIik7
CgogIGlmICh3YXJuZWQgIT0gMSkKICAgIHsKICAgICAgaWYgKGZvdW5kX3RhZyA9PSAwKQogICAg
ICAgIHBlZHdhcm4gKCJlbXB0eSBkZWNsYXJhdGlvbiIpOwogICAgfQp9CgoKCnRyZWUKZ3Jva3R5
cGVuYW1lICh0eXBlbmFtZSkKICAgICB0cmVlIHR5cGVuYW1lOwp7CiAgaWYgKCgoZW51bSB0cmVl
X2NvZGUpICh0eXBlbmFtZSktPmNvbW1vbi5jb2RlKSAhPSBUUkVFX0xJU1QpCiAgICByZXR1cm4g
dHlwZW5hbWU7CiAgcmV0dXJuIGdyb2tkZWNsYXJhdG9yICgoX19leHRlbnNpb25fXyAoeyBjb25z
dCB0cmVlIF9fdCA9IHR5cGVuYW1lOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1v
bi5jb2RlKSAhPSAoVFJFRV9MSVNUKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgVFJFRV9MSVNU
LCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDM0NTAsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSkt
Pmxpc3QudmFsdWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsg
Y29uc3QgdHJlZSBfX3QgPSB0eXBlbmFtZTsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5j
b21tb24uY29kZSkgIT0gKFRSRUVfTElTVCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIFRSRUVf
TElTVCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAzNDUxLCBfX0ZVTkNUSU9OX18pOyBfX3Q7
IH0pLT5saXN0LnB1cnBvc2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgVFlQRU5BTUUsIDAp
Owp9CgoKCnRyZWUKZ3Jva3R5cGVuYW1lX2luX3Bhcm1fY29udGV4dCAodHlwZW5hbWUpCiAgICAg
dHJlZSB0eXBlbmFtZTsKewogIGlmICgoKGVudW0gdHJlZV9jb2RlKSAodHlwZW5hbWUpLT5jb21t
b24uY29kZSkgIT0gVFJFRV9MSVNUKQogICAgcmV0dXJuIHR5cGVuYW1lOwogIHJldHVybiBncm9r
ZGVjbGFyYXRvciAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB0eXBlbmFtZTsg
aWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKFRSRUVfTElTVCkp
IHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIFRSRUVfTElTVCwgIi4uLy4uL2djYy9nY2MvYy1kZWNs
LmMiLCAzNDYzLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5saXN0LnZhbHVlKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gdHlwZW5h
bWU7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChUUkVFX0xJ
U1QpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBUUkVFX0xJU1QsICIuLi8uLi9nY2MvZ2NjL2Mt
ZGVjbC5jIiwgMzQ2NCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+bGlzdC5wdXJwb3NlKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgIFBBUk0sIDApOwp9CiMgMzQ4MyAiLi4vLi4vZ2NjL2djYy9j
LWRlY2wuYyIKdHJlZQpzdGFydF9kZWNsIChkZWNsYXJhdG9yLCBkZWNsc3BlY3MsIGluaXRpYWxp
emVkLCBhdHRyaWJ1dGVzLCBwcmVmaXhfYXR0cmlidXRlcykKICAgICB0cmVlIGRlY2xhcmF0b3Is
IGRlY2xzcGVjczsKICAgICBpbnQgaW5pdGlhbGl6ZWQ7CiAgICAgdHJlZSBhdHRyaWJ1dGVzLCBw
cmVmaXhfYXR0cmlidXRlczsKewogIHJlZ2lzdGVyIHRyZWUgZGVjbCA9IGdyb2tkZWNsYXJhdG9y
IChkZWNsYXJhdG9yLCBkZWNsc3BlY3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5PUk1BTCwgaW5pdGlhbGl6ZWQpOwogIHJlZ2lzdGVyIHRyZWUgdGVtOwoKICBpZiAo
d2Fybl9tYWluID4gMCAmJiAoKGVudW0gdHJlZV9jb2RlKSAoZGVjbCktPmNvbW1vbi5jb2RlKSAh
PSBGVU5DVElPTl9ERUNMCiAgICAgICYmIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190
ID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBkZWNsOyBpZiAodHJlZV9jb2Rl
X3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAo
J2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9j
LWRlY2wuYyIsIDM0OTQsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wubmFtZSk7IGlmICgo
KGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChJREVOVElGSUVSX05PREUp
KSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBJREVOVElGSUVSX05PREUsICIuLi8uLi9nY2MvZ2Nj
L2MtZGVjbC5jIiwgMzQ5NCwgX19GVU5DVElPTl9fKTsgX190OyB9KSA9PSBnbG9iYWxfdHJlZXNb
VElfTUFJTl9JREVOVElGSUVSXSkpCiAgICB3YXJuaW5nX3dpdGhfZGVjbCAoZGVjbCwgImAlcycg
aXMgdXN1YWxseSBhIGZ1bmN0aW9uIik7CgogIGlmIChpbml0aWFsaXplZCkKCgoKICAgIHN3aXRj
aCAoKChlbnVtIHRyZWVfY29kZSkgKGRlY2wpLT5jb21tb24uY29kZSkpCiAgICAgIHsKICAgICAg
Y2FzZSBUWVBFX0RFQ0w6CgoKCiAgICAgICAgaWYgKHBlZGFudGljIHx8IGxpc3RfbGVuZ3RoIChk
ZWNsc3BlY3MpID4gMSkKICAgICAgICAgIHsKICAgICAgICAgICAgZXJyb3IgKCJ0eXBlZGVmIGAl
cycgaXMgaW5pdGlhbGl6ZWQiLAogICAgICAgICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsg
Y29uc3QgdHJlZSBfX3QgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGRlY2w7
IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1v
bi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIu
Li8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMzUxMCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVj
bC5uYW1lKTsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKElE
RU5USUZJRVJfTk9ERSkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIElERU5USUZJRVJfTk9ERSwg
Ii4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAzNTEwLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5p
ZGVudGlmaWVyLnBvaW50ZXIpKTsKICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSAwOwogICAgICAg
ICAgfQogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBGVU5DVElPTl9ERUNMOgogICAgICAgIGVy
cm9yICgiZnVuY3Rpb24gYCVzJyBpcyBpbml0aWFsaXplZCBsaWtlIGEgdmFyaWFibGUiLAogICAg
ICAgICAgICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IChfX2V4dGVuc2lv
bl9fICh7IGNvbnN0IHRyZWUgX190ID0gZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgo
KGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xh
c3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAzNTE3
LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLm5hbWUpOyBpZiAoKChlbnVtIHRyZWVfY29k
ZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoSURFTlRJRklFUl9OT0RFKSkgdHJlZV9jaGVja19m
YWlsZWQgKF9fdCwgSURFTlRJRklFUl9OT0RFLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDM1
MTcsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmlkZW50aWZpZXIucG9pbnRlcikpOwogICAgICAg
IGluaXRpYWxpemVkID0gMDsKICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgUEFSTV9ERUNMOgoK
ICAgICAgICBlcnJvciAoInBhcmFtZXRlciBgJXMnIGlzIGluaXRpYWxpemVkIiwKICAgICAgICAg
ICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSAoX19leHRlbnNpb25fXyAo
eyBjb25zdCB0cmVlIF9fdCA9IGRlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVt
IHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2No
ZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMzUyNCwgX19G
VU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5uYW1lKTsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChf
X3QpLT5jb21tb24uY29kZSkgIT0gKElERU5USUZJRVJfTk9ERSkpIHRyZWVfY2hlY2tfZmFpbGVk
IChfX3QsIElERU5USUZJRVJfTk9ERSwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAzNTI0LCBf
X0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5pZGVudGlmaWVyLnBvaW50ZXIpKTsKICAgICAgICBpbml0
aWFsaXplZCA9IDA7CiAgICAgICAgYnJlYWs7CgogICAgICBkZWZhdWx0OgoKCgoKCiAgICAgICAg
aWYgKCgoZGVjbCktPmNvbW1vbi50eXBlKSA9PSBnbG9iYWxfdHJlZXNbVElfRVJST1JfTUFSS10p
CiAgICAgICAgICBpbml0aWFsaXplZCA9IDA7CiAgICAgICAgZWxzZSBpZiAoKChfX2V4dGVuc2lv
bl9fICh7IGNvbnN0IHRyZWUgX190ID0gKChkZWNsKS0+Y29tbW9uLnR5cGUpOyBpZiAodHJlZV9j
b2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAh
PSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2dj
Yy9jLWRlY2wuYyIsIDM1MzYsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUuc2l6ZSkgIT0g
KHRyZWUpICgodm9pZCAqKTApKSkKICAgICAgICAgIHsKCgogICAgICAgICAgICBpZiAoKChlbnVt
IHRyZWVfY29kZSkgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gKChkZWNsKS0+
Y29tbW9uLnR5cGUpOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUp
IChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQg
KF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDM1NDAsIF9fRlVOQ1RJT05fXyk7
IF9fdDsgfSktPnR5cGUuc2l6ZSkpLT5jb21tb24uY29kZSkgIT0gSU5URUdFUl9DU1QKICAgICAg
ICAgICAgICAgIHx8IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZGVjbDsgaWYg
KHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNv
ZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4u
L2djYy9nY2MvYy1kZWNsLmMiLCAzNTQxLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmxh
bmdfZmxhZ18wKSkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBlcnJvciAoInZhcmlh
YmxlLXNpemVkIG9iamVjdCBtYXkgbm90IGJlIGluaXRpYWxpemVkIik7CiAgICAgICAgICAgICAg
ICBpbml0aWFsaXplZCA9IDA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIGVs
c2UgaWYgKCgoZW51bSB0cmVlX2NvZGUpICgoKGRlY2wpLT5jb21tb24udHlwZSkpLT5jb21tb24u
Y29kZSkgIT0gQVJSQVlfVFlQRSkKICAgICAgICAgIHsKICAgICAgICAgICAgZXJyb3IgKCJ2YXJp
YWJsZSBgJXMnIGhhcyBpbml0aWFsaXplciBidXQgaW5jb21wbGV0ZSB0eXBlIiwKICAgICAgICAg
ICAgICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gKF9fZXh0ZW5zaW9u
X18gKHsgY29uc3QgdHJlZSBfX3QgPSBkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgo
ZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFz
c19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDM1NTAs
IF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wubmFtZSk7IGlmICgoKGVudW0gdHJlZV9jb2Rl
KSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChJREVOVElGSUVSX05PREUpKSB0cmVlX2NoZWNrX2Zh
aWxlZCAoX190LCBJREVOVElGSUVSX05PREUsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMzU1
MCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+aWRlbnRpZmllci5wb2ludGVyKSk7CiAgICAgICAg
ICAgIGluaXRpYWxpemVkID0gMDsKICAgICAgICAgIH0KICAgICAgICBlbHNlIGlmICghKChfX2V4
dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gKCgoKGRlY2wpLT5jb21tb24udHlwZSkpLT5j
b21tb24udHlwZSk7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkg
KF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAo
X190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMzU1MywgX19GVU5DVElPTl9fKTsg
X190OyB9KS0+dHlwZS5zaXplKSAhPSAodHJlZSkgKCh2b2lkICopMCkpKQogICAgICAgICAgewog
ICAgICAgICAgICBlcnJvciAoImVsZW1lbnRzIG9mIGFycmF5IGAlcycgaGF2ZSBpbmNvbXBsZXRl
IHR5cGUiLAogICAgICAgICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBf
X3QgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGRlY2w7IGlmICh0cmVlX2Nv
ZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9
ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2Nj
L2MtZGVjbC5jIiwgMzU1NiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5uYW1lKTsgaWYg
KCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKElERU5USUZJRVJfTk9E
RSkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIElERU5USUZJRVJfTk9ERSwgIi4uLy4uL2djYy9n
Y2MvYy1kZWNsLmMiLCAzNTU2LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5pZGVudGlmaWVyLnBv
aW50ZXIpKTsKICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSAwOwogICAgICAgICAgfQogICAgICB9
CgogIGlmIChpbml0aWFsaXplZCkKICAgIHsKIyAzNTcxICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5j
IgogICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGRlY2w7IGlmICh0cmVl
X2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSld
ICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2Mv
Z2NjL2MtZGVjbC5jIiwgMzU3MSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5leHRlcm5h
bF9mbGFnKSA9IDA7CiAgICAgIGlmIChjdXJyZW50X2JpbmRpbmdfbGV2ZWwgPT0gZ2xvYmFsX2Jp
bmRpbmdfbGV2ZWwpCiAgICAgICAgKChkZWNsKS0+Y29tbW9uLnN0YXRpY19mbGFnKSA9IDE7CgoK
CgogICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGRlY2w7IGlmICh0cmVl
X2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSld
ICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2Mv
Z2NjL2MtZGVjbC5jIiwgMzU3OCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5pbml0aWFs
KSA9IGdsb2JhbF90cmVlc1tUSV9FUlJPUl9NQVJLXTsKICAgIH0KCgoKCiAgaWYgKCgoZW51bSB0
cmVlX2NvZGUpIChkZWNsKS0+Y29tbW9uLmNvZGUpID09IEZVTkNUSU9OX0RFQ0wpCiAgICBnZW5f
YXV4X2luZm9fcmVjb3JkIChkZWNsLCAwLCAwLCAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVl
IF9fdCA9ICgoZGVjbCktPmNvbW1vbi50eXBlKTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgo
KGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xh
c3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAzNTg1
LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLnZhbHVlcykgIT0gMCk7CgoKCgoKCiAgaWYg
KCEgZmxhZ19ub19jb21tb24gfHwgISAoKGRlY2wpLT5jb21tb24ucHVibGljX2ZsYWcpKQogICAg
KF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBkZWNsOyBpZiAodHJlZV9jb2RlX3R5
cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2Qn
KSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRl
Y2wuYyIsIDM1OTMsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuY29tbW9uX2ZsYWcpID0g
MTsKCgoKCgoKICBkZWNsX2F0dHJpYnV0ZXMgKGRlY2wsIGF0dHJpYnV0ZXMsIHByZWZpeF9hdHRy
aWJ1dGVzKTsKCgoKICB0ZW0gPSBwdXNoZGVjbCAoZGVjbCk7CgoKICBpZiAoY3VycmVudF9iaW5k
aW5nX2xldmVsICE9IGdsb2JhbF9iaW5kaW5nX2xldmVsCgoKCiAgICAgICYmIChfX2V4dGVuc2lv
bl9fICh7IGNvbnN0IHRyZWUgX190ID0gdGVtOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgo
ZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFz
c19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDM2MTEs
IF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wucnRsKSA9PSAwCiAgICAgICYmICEoX19leHRl
bnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHRlbTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQp
ICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVf
Y2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAz
NjEyLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmNvbnRleHQpKQogICAgewogICAgICBp
ZiAoKCh0ZW0pLT5jb21tb24udHlwZSkgIT0gZ2xvYmFsX3RyZWVzW1RJX0VSUk9SX01BUktdCiAg
ICAgICAgICAmJiAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSAoKHRlbSktPmNv
bW1vbi50eXBlKTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAo
X190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChf
X3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAzNjE1LCBfX0ZVTkNUSU9OX18pOyBf
X3Q7IH0pLT50eXBlLnNpemUpICE9ICh0cmVlKSAoKHZvaWQgKikwKSkpCiAgICAgICAgZXhwYW5k
X2RlY2wgKHRlbSk7CiAgICAgIGVsc2UgaWYgKCgoZW51bSB0cmVlX2NvZGUpICgoKHRlbSktPmNv
bW1vbi50eXBlKSktPmNvbW1vbi5jb2RlKSA9PSBBUlJBWV9UWVBFCiAgICAgICAgICAgICAgICYm
IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gdGVtOyBpZiAodHJlZV9jb2RlX3R5
cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2Qn
KSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRl
Y2wuYyIsIDM2MTgsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5pdGlhbCkgIT0gMCkK
ICAgICAgICBleHBhbmRfZGVjbCAodGVtKTsKICAgIH0KCiAgcmV0dXJuIHRlbTsKfQoKCgoKCgp2
b2lkCmZpbmlzaF9kZWNsIChkZWNsLCBpbml0LCBhc21zcGVjX3RyZWUpCiAgICAgdHJlZSBkZWNs
LCBpbml0OwogICAgIHRyZWUgYXNtc3BlY190cmVlOwp7CiAgcmVnaXN0ZXIgdHJlZSB0eXBlID0g
KChkZWNsKS0+Y29tbW9uLnR5cGUpOwogIGludCB3YXNfaW5jb21wbGV0ZSA9ICgoX19leHRlbnNp
b25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGRlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAo
KChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2Ns
YXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMzYz
NiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5zaXplKSA9PSAwKTsKICBjaGFyICphc21z
cGVjID0gMDsKCgogIGlmIChhc21zcGVjX3RyZWUpCiAgICBhc21zcGVjID0gKF9fZXh0ZW5zaW9u
X18gKHsgY29uc3QgdHJlZSBfX3QgPSBhc21zcGVjX3RyZWU7IGlmICgoKGVudW0gdHJlZV9jb2Rl
KSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChTVFJJTkdfQ1NUKSkgdHJlZV9jaGVja19mYWlsZWQg
KF9fdCwgU1RSSU5HX0NTVCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAzNjQxLCBfX0ZVTkNU
SU9OX18pOyBfX3Q7IH0pLT5zdHJpbmcucG9pbnRlcik7CgoKCiAgaWYgKGluaXQgIT0gMCAmJiAo
X19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGRlY2w7IGlmICh0cmVlX2NvZGVfdHlw
ZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcp
KSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVj
bC5jIiwgMzY0NSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5pbml0aWFsKSA9PSAwKQog
ICAgaW5pdCA9IDA7CgogIGlmICgoKGVudW0gdHJlZV9jb2RlKSAoZGVjbCktPmNvbW1vbi5jb2Rl
KSA9PSBQQVJNX0RFQ0wpCiAgICBpbml0ID0gMDsKCiAgaWYgKGluaXQpCiAgICB7CiAgICAgIGlm
ICgoKGVudW0gdHJlZV9jb2RlKSAoZGVjbCktPmNvbW1vbi5jb2RlKSAhPSBUWVBFX0RFQ0wpCiAg
ICAgICAgc3RvcmVfaW5pdF92YWx1ZSAoZGVjbCwgaW5pdCk7CiAgICAgIGVsc2UKICAgICAgICB7
CgogICAgICAgICAgKChkZWNsKS0+Y29tbW9uLnR5cGUpID0gKChpbml0KS0+Y29tbW9uLnR5cGUp
OwogICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBkZWNsOyBpZiAo
dHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29k
ZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4v
Z2NjL2djYy9jLWRlY2wuYyIsIDM2NTksIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5p
dGlhbCkgPSBpbml0ID0gMDsKICAgICAgICB9CiAgICB9CgoKCiAgaWYgKCgoZW51bSB0cmVlX2Nv
ZGUpICh0eXBlKS0+Y29tbW9uLmNvZGUpID09IEFSUkFZX1RZUEUKICAgICAgJiYgKF9fZXh0ZW5z
aW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB0eXBlOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkg
KCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9j
bGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDM2
NjYsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUudmFsdWVzKSA9PSAwCiAgICAgICYmICgo
ZW51bSB0cmVlX2NvZGUpIChkZWNsKS0+Y29tbW9uLmNvZGUpICE9IFRZUEVfREVDTCkKICAgIHsK
ICAgICAgaW50IGRvX2RlZmF1bHQKICAgICAgICA9ICgoKGRlY2wpLT5jb21tb24uc3RhdGljX2Zs
YWcpCgoKICAgICAgICAgICA/IHBlZGFudGljICYmICEoKGRlY2wpLT5jb21tb24ucHVibGljX2Zs
YWcpCiAgICAgICAgICAgOiAhKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBkZWNs
OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21t
b24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAi
Li4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDM2NzQsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRl
Y2wuZXh0ZXJuYWxfZmxhZykpOwogICAgICBpbnQgZmFpbHVyZQogICAgICAgID0gY29tcGxldGVf
YXJyYXlfdHlwZSAodHlwZSwgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBkZWNs
OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21t
b24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAi
Li4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDM2NzYsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRl
Y2wuaW5pdGlhbCksIGRvX2RlZmF1bHQpOwoKCiAgICAgIHR5cGUgPSAoKGRlY2wpLT5jb21tb24u
dHlwZSk7CgogICAgICBpZiAoZmFpbHVyZSA9PSAxKQogICAgICAgIGVycm9yX3dpdGhfZGVjbCAo
ZGVjbCwgImluaXRpYWxpemVyIGZhaWxzIHRvIGRldGVybWluZSBzaXplIG9mIGAlcyciKTsKCiAg
ICAgIGVsc2UgaWYgKGZhaWx1cmUgPT0gMikKICAgICAgICB7CiAgICAgICAgICBpZiAoZG9fZGVm
YXVsdCkKICAgICAgICAgICAgZXJyb3Jfd2l0aF9kZWNsIChkZWNsLCAiYXJyYXkgc2l6ZSBtaXNz
aW5nIGluIGAlcyciKTsKCgoKCgoKICAgICAgICAgIGVsc2UgaWYgKCFwZWRhbnRpYyAmJiAoKGRl
Y2wpLT5jb21tb24uc3RhdGljX2ZsYWcpICYmICEgKChkZWNsKS0+Y29tbW9uLnB1YmxpY19mbGFn
KSkKICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBkZWNsOyBp
ZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24u
Y29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4v
Li4vZ2NjL2djYy9jLWRlY2wuYyIsIDM2OTUsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wu
ZXh0ZXJuYWxfZmxhZykgPSAxOwogICAgICAgIH0KCgoKCiAgICAgIGVsc2UgaWYgKHBlZGFudGlj
ICYmIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gdHlwZTsgaWYgKHRyZWVfY29k
ZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0g
KCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2Mv
Yy1kZWNsLmMiLCAzNzAxLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLnZhbHVlcykgIT0g
MAogICAgICAgICAgICAgICYmIHRyZWVfaW50X2NzdF9zZ24gKChfX2V4dGVuc2lvbl9fICh7IGNv
bnN0IHRyZWUgX190ID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB0eXBlOyBp
ZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24u
Y29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4v
Li4vZ2NjL2djYy9jLWRlY2wuYyIsIDM3MDIsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUu
dmFsdWVzKTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190
KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3Qs
ICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAzNzAyLCBfX0ZVTkNUSU9OX18pOyBfX3Q7
IH0pLT50eXBlLm1heHZhbCkpIDwgMCkKICAgICAgICBlcnJvcl93aXRoX2RlY2wgKGRlY2wsICJ6
ZXJvIG9yIG5lZ2F0aXZlIHNpemUgYXJyYXkgYCVzJyIpOwoKICAgICAgbGF5b3V0X2RlY2wgKGRl
Y2wsIDApOwogICAgfQoKICBpZiAoKChlbnVtIHRyZWVfY29kZSkgKGRlY2wpLT5jb21tb24uY29k
ZSkgPT0gVkFSX0RFQ0wpCiAgICB7CiAgICAgIGlmICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0
cmVlIF9fdCA9IGRlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29k
ZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxl
ZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMzcxMCwgX19GVU5DVElPTl9f
KTsgX190OyB9KS0+ZGVjbC5zaXplKSA9PSAwICYmICgoZGVjbCktPmNvbW1vbi50eXBlKSAhPSBn
bG9iYWxfdHJlZXNbVElfRVJST1JfTUFSS10KICAgICAgICAgICYmICgoX19leHRlbnNpb25fXyAo
eyBjb25zdCB0cmVlIF9fdCA9ICgoZGVjbCktPmNvbW1vbi50eXBlKTsgaWYgKHRyZWVfY29kZV90
eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0
JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1k
ZWNsLmMiLCAzNzExLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLnNpemUpICE9ICh0cmVl
KSAoKHZvaWQgKikwKSkpCiAgICAgICAgbGF5b3V0X2RlY2wgKGRlY2wsIDApOwoKICAgICAgaWYg
KChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZGVjbDsgaWYgKHRyZWVfY29kZV90
eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdk
JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1k
ZWNsLmMiLCAzNzE0LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLnNpemUpID09IDAKCiAg
ICAgICAgICAmJiAoKGRlY2wpLT5jb21tb24udHlwZSkgIT0gZ2xvYmFsX3RyZWVzW1RJX0VSUk9S
X01BUktdCiAgICAgICAgICAmJiAoKChkZWNsKS0+Y29tbW9uLnN0YXRpY19mbGFnKQogICAgICAg
ICAgICAgID8KCgoKCgogICAgICAgICAgICAgICAgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRy
ZWUgX190ID0gZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2Rl
KSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVk
IChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAzNzI0LCBfX0ZVTkNUSU9OX18p
OyBfX3Q7IH0pLT5kZWNsLmluaXRpYWwpICE9IDAKICAgICAgICAgICAgICAgICB8fCAoX19leHRl
bnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGRlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50
KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVl
X2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwg
MzcyNSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5jb250ZXh0KSAhPSAwKQogICAgICAg
ICAgICAgIDoKCgogICAgICAgICAgICAgICAgIShfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUg
X190ID0gZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAo
X190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChf
X3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAzNzI5LCBfX0ZVTkNUSU9OX18pOyBf
X3Q7IH0pLT5kZWNsLmV4dGVybmFsX2ZsYWcpKSkKICAgICAgICB7CiAgICAgICAgICBlcnJvcl93
aXRoX2RlY2wgKGRlY2wsICJzdG9yYWdlIHNpemUgb2YgYCVzJyBpc24ndCBrbm93biIpOwogICAg
ICAgICAgKChkZWNsKS0+Y29tbW9uLnR5cGUpID0gZ2xvYmFsX3RyZWVzW1RJX0VSUk9SX01BUktd
OwogICAgICAgIH0KCiAgICAgIGlmICgoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3Qg
PSBkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3Qp
LT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwg
J2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDM3MzUsIF9fRlVOQ1RJT05fXyk7IF9fdDsg
fSktPmRlY2wuZXh0ZXJuYWxfZmxhZykgfHwgKChkZWNsKS0+Y29tbW9uLnN0YXRpY19mbGFnKSkK
ICAgICAgICAgICYmIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZGVjbDsgaWYg
KHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNv
ZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4u
L2djYy9nY2MvYy1kZWNsLmMiLCAzNzM2LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLnNp
emUpICE9IDApCiAgICAgICAgewogICAgICAgICAgaWYgKCgoZW51bSB0cmVlX2NvZGUpICgoX19l
eHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGRlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVso
aW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0
cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5j
IiwgMzczOCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5zaXplKSktPmNvbW1vbi5jb2Rl
KSA9PSBJTlRFR0VSX0NTVCkKICAgICAgICAgICAgY29uc3RhbnRfZXhwcmVzc2lvbl93YXJuaW5n
ICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGRlY2w7IGlmICh0cmVlX2NvZGVf
dHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgn
ZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2Mt
ZGVjbC5jIiwgMzczOSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5zaXplKSk7CiAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgIGVycm9yX3dpdGhfZGVjbCAoZGVjbCwgInN0b3JhZ2Ugc2l6
ZSBvZiBgJXMnIGlzbid0IGNvbnN0YW50Iik7CiAgICAgICAgfQoKICAgICAgaWYgKCgodHlwZSkt
PmNvbW1vbi51c2VkX2ZsYWcpKQogICAgICAgICgoZGVjbCktPmNvbW1vbi51c2VkX2ZsYWcpID0g
MTsKICAgIH0KCgoKCiAgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChkZWNsKS0+Y29tbW9uLmNvZGUp
ID09IEZVTkNUSU9OX0RFQ0wgJiYgYXNtc3BlYykKICAgIHsKICAgICAgKF9fZXh0ZW5zaW9uX18g
KHsgY29uc3QgdHJlZSBfX3QgPSBkZWNsOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNv
bW1vbi5jb2RlKSAhPSAoRlVOQ1RJT05fREVDTCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIEZV
TkNUSU9OX0RFQ0wsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMzc1MywgX19GVU5DVElPTl9f
KTsgX190OyB9KS0+ZGVjbC5idWlsdF9pbl9jbGFzcykgPSBOT1RfQlVJTFRfSU47CiAgICAgIChf
X2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZGVjbDsgaWYgKHRyZWVfY29kZV90eXBl
WyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykp
IHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNs
LmMiLCAzNzU0LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLnJ0bCkgPSAwOwogICAgICAo
X19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGRlY2w7IGlmICh0cmVlX2NvZGVfdHlw
ZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcp
KSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVj
bC5jIiwgMzc1NSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5hc3NlbWJsZXJfbmFtZSkg
PSBnZXRfaWRlbnRpZmllciAoYXNtc3BlYyk7CiAgICB9CgoKCgoKICBpZiAoKChlbnVtIHRyZWVf
Y29kZSkgKGRlY2wpLT5jb21tb24uY29kZSkgPT0gVkFSX0RFQ0wgfHwgKChlbnVtIHRyZWVfY29k
ZSkgKGRlY2wpLT5jb21tb24uY29kZSkgPT0gRlVOQ1RJT05fREVDTCkKICAgIHsKCiAgICAgIG1h
eWJlX29iamNfY2hlY2tfZGVjbCAoZGVjbCk7CgogICAgICBpZiAoIShfX2V4dGVuc2lvbl9fICh7
IGNvbnN0IHRyZWUgX190ID0gZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0g
dHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hl
Y2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAzNzY3LCBfX0ZV
TkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmNvbnRleHQpKQogICAgICAgIHJlc3Rfb2ZfZGVjbF9j
b21waWxhdGlvbiAoZGVjbCwgYXNtc3BlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGRlY2w7IGlmICh0cmVlX2Nv
ZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9
ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2Nj
L2MtZGVjbC5jIiwgMzc2OSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5jb250ZXh0KSA9
PSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChkZWNsKS0+Y29tbW9u
LmFzbV93cml0dGVuX2ZsYWcpKSwgMCk7CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBp
ZiAoYXNtc3BlYykKICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3Qg
PSBkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3Qp
LT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwg
J2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDM3NzQsIF9fRlVOQ1RJT05fXyk7IF9fdDsg
fSktPmRlY2wuYXNzZW1ibGVyX25hbWUpID0gZ2V0X2lkZW50aWZpZXIgKGFzbXNwZWMpOwogICAg
ICAgICAgYWRkX2RlY2xfc3RtdCAoZGVjbCk7CiAgICAgICAgfQoKICAgICAgaWYgKChfX2V4dGVu
c2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQp
ICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVf
Y2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAz
Nzc4LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmNvbnRleHQpICE9IDApCiAgICAgICAg
ewoKCiAgICAgICAgICBpZiAod2FzX2luY29tcGxldGUKICAgICAgICAgICAgICAmJiAhICgoZGVj
bCktPmNvbW1vbi5zdGF0aWNfZmxhZykgJiYgISAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVl
IF9fdCA9IGRlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkg
KF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAo
X190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMzc4MywgX19GVU5DVElPTl9fKTsg
X190OyB9KS0+ZGVjbC5leHRlcm5hbF9mbGFnKSkKICAgICAgICAgICAgewoKICAgICAgICAgICAg
ICAoKGRlY2wpLT5jb21tb24uYWRkcmVzc2FibGVfZmxhZykgPSAoKGRlY2wpLT5jb21tb24udXNl
ZF9mbGFnKTsKCiAgICAgICAgICAgICAgaWYgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUg
X190ID0gZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAo
X190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChf
X3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAzNzg4LCBfX0ZVTkNUSU9OX18pOyBf
X3Q7IH0pLT5kZWNsLnNpemUpID09IDApCiAgICAgICAgICAgICAgICAoX19leHRlbnNpb25fXyAo
eyBjb25zdCB0cmVlIF9fdCA9IGRlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVt
IHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2No
ZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMzc4OSwgX19G
VU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5pbml0aWFsKSA9IDA7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICB9CgogIGlmICgoKGVudW0gdHJlZV9jb2RlKSAoZGVjbCktPmNvbW1vbi5jb2Rl
KSA9PSBUWVBFX0RFQ0wpCiAgICB7CgogICAgICBtYXliZV9vYmpjX2NoZWNrX2RlY2wgKGRlY2wp
OwogICAgICByZXN0X29mX2RlY2xfY29tcGlsYXRpb24gKGRlY2wsICgodm9pZCAqKSAwKSwgKF9f
ZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVb
KGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkg
dHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wu
YyIsIDM3OTgsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuY29udGV4dCkgPT0gMCwgMCk7
CiAgICB9CgoKCgogIGlmIChjdXJyZW50X2JpbmRpbmdfbGV2ZWwgPT0gZ2xvYmFsX2JpbmRpbmdf
bGV2ZWwpCiAgICBnZXRfcGVuZGluZ19zaXplcyAoKTsKfQoKCgoKdHJlZQptYXliZV9idWlsZF9j
bGVhbnVwIChkZWNsKQogICAgIHRyZWUgZGVjbCBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykp
Owp7CgogIHJldHVybiAodHJlZSkgKCh2b2lkICopMCk7Cn0KCgoKCgoKdm9pZApwdXNoX3Bhcm1f
ZGVjbCAocGFybSkKICAgICB0cmVlIHBhcm07CnsKICB0cmVlIGRlY2w7CiAgaW50IG9sZF9pbW1l
ZGlhdGVfc2l6ZV9leHBhbmQgPSBpbW1lZGlhdGVfc2l6ZV9leHBhbmQ7CgogIGltbWVkaWF0ZV9z
aXplX2V4cGFuZCA9IDA7CgogIGRlY2wgPSBncm9rZGVjbGFyYXRvciAoKF9fZXh0ZW5zaW9uX18g
KHsgY29uc3QgdHJlZSBfX3QgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHBh
cm07IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChUUkVFX0xJ
U1QpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBUUkVFX0xJU1QsICIuLi8uLi9nY2MvZ2NjL2Mt
ZGVjbC5jIiwgMzgzMywgX19GVU5DVElPTl9fKTsgX190OyB9KS0+bGlzdC5wdXJwb3NlKTsgaWYg
KCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKFRSRUVfTElTVCkpIHRy
ZWVfY2hlY2tfZmFpbGVkIChfX3QsIFRSRUVfTElTVCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMi
LCAzODMzLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5saXN0LnZhbHVlKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gKF9fZXh0ZW5z
aW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBwYXJtOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9f
dCktPmNvbW1vbi5jb2RlKSAhPSAoVFJFRV9MSVNUKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwg
VFJFRV9MSVNULCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDM4MzQsIF9fRlVOQ1RJT05fXyk7
IF9fdDsgfSktPmxpc3QucHVycG9zZSk7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29t
bW9uLmNvZGUpICE9IChUUkVFX0xJU1QpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBUUkVFX0xJ
U1QsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMzgzNCwgX19GVU5DVElPTl9fKTsgX190OyB9
KS0+bGlzdC5wdXJwb3NlKSwgUEFSTSwgMCk7CiAgZGVjbF9hdHRyaWJ1dGVzIChkZWNsLCAoX19l
eHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRy
ZWUgX190ID0gcGFybTsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkg
IT0gKFRSRUVfTElTVCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIFRSRUVfTElTVCwgIi4uLy4u
L2djYy9nY2MvYy1kZWNsLmMiLCAzODM1LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5saXN0LnZh
bHVlKTsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKFRSRUVf
TElTVCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIFRSRUVfTElTVCwgIi4uLy4uL2djYy9nY2Mv
Yy1kZWNsLmMiLCAzODM1LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5saXN0LnZhbHVlKSwKICAg
ICAgICAgICAgICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gKF9fZXh0
ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBwYXJtOyBpZiAoKChlbnVtIHRyZWVfY29kZSkg
KF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoVFJFRV9MSVNUKSkgdHJlZV9jaGVja19mYWlsZWQgKF9f
dCwgVFJFRV9MSVNULCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDM4MzYsIF9fRlVOQ1RJT05f
Xyk7IF9fdDsgfSktPmxpc3QudmFsdWUpOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNv
bW1vbi5jb2RlKSAhPSAoVFJFRV9MSVNUKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgVFJFRV9M
SVNULCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDM4MzYsIF9fRlVOQ1RJT05fXyk7IF9fdDsg
fSktPmxpc3QucHVycG9zZSkpOwojIDM4NDkgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiCiAgZGVj
bCA9IHB1c2hkZWNsIChkZWNsKTsKCiAgaW1tZWRpYXRlX3NpemVfZXhwYW5kID0gb2xkX2ltbWVk
aWF0ZV9zaXplX2V4cGFuZDsKCiAgY3VycmVudF9iaW5kaW5nX2xldmVsLT5wYXJtX29yZGVyCiAg
ICA9IHRyZWVfY29ucyAoKHRyZWUpICgodm9pZCAqKTApLCBkZWNsLCBjdXJyZW50X2JpbmRpbmdf
bGV2ZWwtPnBhcm1fb3JkZXIpOwoKCiAgZmluaXNoX2RlY2wgKGRlY2wsICh0cmVlKSAoKHZvaWQg
KikwKSwgKHRyZWUpICgodm9pZCAqKTApKTsKfQoKCgoKCnZvaWQKY2xlYXJfcGFybV9vcmRlciAo
KQp7CiAgY3VycmVudF9iaW5kaW5nX2xldmVsLT5wYXJtX29yZGVyID0gKHRyZWUpICgodm9pZCAq
KTApOwp9CgoKCgoKaW50CmNvbXBsZXRlX2FycmF5X3R5cGUgKHR5cGUsIGluaXRpYWxfdmFsdWUs
IGRvX2RlZmF1bHQpCiAgICAgdHJlZSB0eXBlOwogICAgIHRyZWUgaW5pdGlhbF92YWx1ZTsKICAg
ICBpbnQgZG9fZGVmYXVsdDsKewogIHJlZ2lzdGVyIHRyZWUgbWF4aW5kZXggPSAodHJlZSkgKCh2
b2lkICopMCk7CiAgaW50IHZhbHVlID0gMDsKCiAgaWYgKGluaXRpYWxfdmFsdWUpCiAgICB7CgoK
ICAgICAgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChpbml0aWFsX3ZhbHVlKS0+Y29tbW9uLmNvZGUp
ID09IFNUUklOR19DU1QpCiAgICAgICAgewogICAgICAgICAgaW50IGVsdHNpemUKICAgICAgICAg
ICAgPSBpbnRfc2l6ZV9pbl9ieXRlcyAoKCgoKGluaXRpYWxfdmFsdWUpLT5jb21tb24udHlwZSkp
LT5jb21tb24udHlwZSkpOwogICAgICAgICAgbWF4aW5kZXggPSBidWlsZF9pbnRfMl93aWRlICgo
dW5zaWduZWQgaW50KSAoKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gaW5pdGlh
bF92YWx1ZTsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKFNU
UklOR19DU1QpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBTVFJJTkdfQ1NULCAiLi4vLi4vZ2Nj
L2djYy9jLWRlY2wuYyIsIDM4OTEsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnN0cmluZy5sZW5n
dGgpIC8gZWx0c2l6ZSkgLSAxKSwgKGludCkgKDApKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKCgo
ZW51bSB0cmVlX2NvZGUpIChpbml0aWFsX3ZhbHVlKS0+Y29tbW9uLmNvZGUpID09IENPTlNUUlVD
VE9SKQogICAgICAgIHsKICAgICAgICAgIHRyZWUgZWx0cyA9IChfX2V4dGVuc2lvbl9fICh7IGNv
bnN0IHRyZWUgX190ID0gaW5pdGlhbF92YWx1ZTsgY2hhciBfX2MgPSB0cmVlX2NvZGVfdHlwZVso
aW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldOyBpZiAoX19jICE9
ICdyJyAmJiBfX2MgIT0gJ3MnICYmIF9fYyAhPSAnPCcgJiYgX19jICE9ICcxJyAmJiBfX2MgIT0g
JzInICYmIF9fYyAhPSAnZScpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkKF9fdCwgJ2UnLCAiLi4v
Li4vZ2NjL2djYy9jLWRlY2wuYyIsIDM4OTYsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmV4cC5v
cGVyYW5kc1sxXSk7CiAgICAgICAgICBtYXhpbmRleCA9IGJ1aWxkX2ludF8yX3dpZGUgKCh1bnNp
Z25lZCBpbnQpICgtMSksIChpbnQpICgtMSkpOwogICAgICAgICAgZm9yICg7IGVsdHM7IGVsdHMg
PSAoKGVsdHMpLT5jb21tb24uY2hhaW4pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYg
KChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZWx0czsgaWYgKCgoZW51bSB0cmVl
X2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKFRSRUVfTElTVCkpIHRyZWVfY2hlY2tfZmFp
bGVkIChfX3QsIFRSRUVfTElTVCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCAzOTAwLCBfX0ZV
TkNUSU9OX18pOyBfX3Q7IH0pLT5saXN0LnB1cnBvc2UpKQogICAgICAgICAgICAgICAgbWF4aW5k
ZXggPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGVsdHM7IGlmICgoKGVudW0g
dHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChUUkVFX0xJU1QpKSB0cmVlX2NoZWNr
X2ZhaWxlZCAoX190LCBUUkVFX0xJU1QsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgMzkwMSwg
X19GVU5DVElPTl9fKTsgX190OyB9KS0+bGlzdC5wdXJwb3NlKTsKICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICBtYXhpbmRleCA9IGZvbGQgKGJ1aWxkIChQTFVTX0VYUFIsIGludGVn
ZXJfdHlwZXNbaXRrX2ludF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXhpbmRleCwgZ2xvYmFsX3RyZWVzW1RJX0lOVEVHRVJfT05FXSkpOwogICAgICAgICAgICB9
CiAgICAgICAgICBtYXhpbmRleCA9IGNvcHlfbm9kZSAobWF4aW5kZXgpOwogICAgICAgIH0KICAg
ICAgZWxzZQogICAgICAgIHsKCiAgICAgICAgICBpZiAoaW5pdGlhbF92YWx1ZSAhPSBnbG9iYWxf
dHJlZXNbVElfRVJST1JfTUFSS10pCiAgICAgICAgICAgIHZhbHVlID0gMTsKCgogICAgICAgICAg
bWF4aW5kZXggPSBidWlsZF9pbnRfMl93aWRlICgodW5zaWduZWQgaW50KSAoMCksIChpbnQpICgw
KSk7CiAgICAgICAgfQogICAgfQoKICBpZiAoIW1heGluZGV4KQogICAgewogICAgICBpZiAoZG9f
ZGVmYXVsdCkKICAgICAgICBtYXhpbmRleCA9IGJ1aWxkX2ludF8yX3dpZGUgKCh1bnNpZ25lZCBp
bnQpICgwKSwgKGludCkgKDApKTsKICAgICAgdmFsdWUgPSAyOwogICAgfQoKICBpZiAobWF4aW5k
ZXgpCiAgICB7CiAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gdHlwZTsg
aWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9u
LmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4u
Ly4uL2djYy9nY2MvYy1kZWNsLmMiLCAzOTI4LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBl
LnZhbHVlcykgPSBidWlsZF9pbmRleF90eXBlIChtYXhpbmRleCk7CiAgICAgIGlmICghKChtYXhp
bmRleCktPmNvbW1vbi50eXBlKSkKICAgICAgICAoKG1heGluZGV4KS0+Y29tbW9uLnR5cGUpID0g
KF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB0eXBlOyBpZiAodHJlZV9jb2RlX3R5
cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3Qn
KSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRl
Y2wuYyIsIDM5MzAsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUudmFsdWVzKTsKICAgIH0K
CgoKICBsYXlvdXRfdHlwZSAodHlwZSk7CgogIHJldHVybiB2YWx1ZTsKfQojIDM5NjkgIi4uLy4u
L2djYy9nY2MvYy1kZWNsLmMiCnN0YXRpYyB0cmVlCmdyb2tkZWNsYXJhdG9yIChkZWNsYXJhdG9y
LCBkZWNsc3BlY3MsIGRlY2xfY29udGV4dCwgaW5pdGlhbGl6ZWQpCiAgICAgdHJlZSBkZWNsc3Bl
Y3M7CiAgICAgdHJlZSBkZWNsYXJhdG9yOwogICAgIGVudW0gZGVjbF9jb250ZXh0IGRlY2xfY29u
dGV4dDsKICAgICBpbnQgaW5pdGlhbGl6ZWQ7CnsKICBpbnQgc3BlY2JpdHMgPSAwOwogIHRyZWUg
c3BlYzsKICB0cmVlIHR5cGUgPSAodHJlZSkgKCh2b2lkICopMCk7CiAgaW50IGxvbmdsb25nID0g
MDsKICBpbnQgY29uc3RwOwogIGludCByZXN0cmljdHA7CiAgaW50IHZvbGF0aWxlcDsKICBpbnQg
dHlwZV9xdWFscyA9IDB4MDsKICBpbnQgaW5saW5lcDsKICBpbnQgZXhwbGljaXRfaW50ID0gMDsK
ICBpbnQgZXhwbGljaXRfY2hhciA9IDA7CiAgaW50IGRlZmF1bHRlZF9pbnQgPSAwOwogIHRyZWUg
dHlwZWRlZl9kZWNsID0gMDsKICBjb25zdCBjaGFyICpuYW1lOwogIHRyZWUgdHlwZWRlZl90eXBl
ID0gMDsKICBpbnQgZnVuY2RlZl9mbGFnID0gMDsKICBlbnVtIHRyZWVfY29kZSBpbm5lcm1vc3Rf
Y29kZSA9IEVSUk9SX01BUks7CiAgaW50IGJpdGZpZWxkID0gMDsKICBpbnQgc2l6ZV92YXJpZXMg
PSAwOwogIHRyZWUgZGVjbF9tYWNoaW5lX2F0dHIgPSAodHJlZSkgKCh2b2lkICopMCk7CgogIGlm
IChkZWNsX2NvbnRleHQgPT0gQklURklFTEQpCiAgICBiaXRmaWVsZCA9IDEsIGRlY2xfY29udGV4
dCA9IEZJRUxEOwoKICBpZiAoZGVjbF9jb250ZXh0ID09IEZVTkNERUYpCiAgICBmdW5jZGVmX2Zs
YWcgPSAxLCBkZWNsX2NvbnRleHQgPSBOT1JNQUw7CgoKCiAgewogICAgcmVnaXN0ZXIgdHJlZSBk
ZWNsID0gZGVjbGFyYXRvcjsKICAgIG5hbWUgPSAwOwoKICAgIHdoaWxlIChkZWNsKQogICAgICBz
d2l0Y2ggKCgoZW51bSB0cmVlX2NvZGUpIChkZWNsKS0+Y29tbW9uLmNvZGUpKQogICAgICAgIHsK
ICAgICAgICBjYXNlIEFSUkFZX1JFRjoKICAgICAgICBjYXNlIElORElSRUNUX1JFRjoKICAgICAg
ICBjYXNlIENBTExfRVhQUjoKICAgICAgICAgIGlubmVybW9zdF9jb2RlID0gKChlbnVtIHRyZWVf
Y29kZSkgKGRlY2wpLT5jb21tb24uY29kZSk7CiAgICAgICAgICBkZWNsID0gKF9fZXh0ZW5zaW9u
X18gKHsgY29uc3QgdHJlZSBfX3QgPSBkZWNsOyBjaGFyIF9fYyA9IHRyZWVfY29kZV90eXBlWyhp
bnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV07IGlmIChfX2MgIT0g
J3InICYmIF9fYyAhPSAncycgJiYgX19jICE9ICc8JyAmJiBfX2MgIT0gJzEnICYmIF9fYyAhPSAn
MicgJiYgX19jICE9ICdlJykgdHJlZV9jbGFzc19jaGVja19mYWlsZWQoX190LCAnZScsICIuLi8u
Li9nY2MvZ2NjL2MtZGVjbC5jIiwgNDAxNiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZXhwLm9w
ZXJhbmRzWzBdKTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIElERU5USUZJRVJfTk9E
RToKICAgICAgICAgIG5hbWUgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGRl
Y2w7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChJREVOVElG
SUVSX05PREUpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBJREVOVElGSUVSX05PREUsICIuLi8u
Li9nY2MvZ2NjL2MtZGVjbC5jIiwgNDAyMCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+aWRlbnRp
Zmllci5wb2ludGVyKTsKICAgICAgICAgIGRlY2wgPSAwOwogICAgICAgICAgYnJlYWs7CgogICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICBmYW5jeV9hYm9ydCAoIi4uLy4uL2djYy9nY2MvYy1kZWNs
LmMiLCA0MDI1LCBfX0ZVTkNUSU9OX18pOwogICAgICAgIH0KICAgIGlmIChuYW1lID09IDApCiAg
ICAgIG5hbWUgPSAidHlwZSBuYW1lIjsKICB9CgoKCgogIGlmIChmdW5jZGVmX2ZsYWcgJiYgaW5u
ZXJtb3N0X2NvZGUgIT0gQ0FMTF9FWFBSKQogICAgcmV0dXJuIDA7CiMgNDA0NCAiLi4vLi4vZ2Nj
L2djYy9jLWRlY2wuYyIKICBpZiAoZGVjbF9jb250ZXh0ID09IE5PUk1BTCAmJiAhZnVuY2RlZl9m
bGFnCiAgICAgICYmIGN1cnJlbnRfYmluZGluZ19sZXZlbC0+cGFybV9mbGFnKQogICAgZGVjbF9j
b250ZXh0ID0gUEFSTTsKIyA0MDYyICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIgogIGZvciAoc3Bl
YyA9IGRlY2xzcGVjczsgc3BlYzsgc3BlYyA9ICgoc3BlYyktPmNvbW1vbi5jaGFpbikpCiAgICB7
CiAgICAgIHJlZ2lzdGVyIHRyZWUgaWQgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9f
dCA9IHNwZWM7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChU
UkVFX0xJU1QpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBUUkVFX0xJU1QsICIuLi8uLi9nY2Mv
Z2NjL2MtZGVjbC5jIiwgNDA2NCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+bGlzdC52YWx1ZSk7
CgogICAgICBpZiAoaWQgPT0gcmlkcG9pbnRlcnNbKGludCkgUklEX0lOVF0pCiAgICAgICAgZXhw
bGljaXRfaW50ID0gMTsKICAgICAgaWYgKGlkID09IHJpZHBvaW50ZXJzWyhpbnQpIFJJRF9DSEFS
XSkKICAgICAgICBleHBsaWNpdF9jaGFyID0gMTsKCiAgICAgIGlmICgoKGVudW0gdHJlZV9jb2Rl
KSAoaWQpLT5jb21tb24uY29kZSkgPT0gSURFTlRJRklFUl9OT0RFICYmICgoaWQpLT5jb21tb24u
bGFuZ19mbGFnXzApKQogICAgICAgIHsKICAgICAgICAgIGVudW0gcmlkIGkgPSAoKChzdHJ1Y3Qg
bGFuZ19pZGVudGlmaWVyICopIChpZCkpLT5yaWRfY29kZSk7CiAgICAgICAgICBpZiAoaSA8PSBS
SURfTEFTVF9NT0RJRklFUikKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChpID09IFJJ
RF9MT05HICYmIHNwZWNiaXRzICYgKDE8PGkpKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICBpZiAobG9uZ2xvbmcpCiAgICAgICAgICAgICAgICAgICAgZXJyb3IgKCJgbG9uZyBs
b25nIGxvbmcnIGlzIHRvbyBsb25nIGZvciBHQ0MiKTsKICAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChwZWRhbnRpYyAm
JiAhZmxhZ19pc29jOTkgJiYgISBpbl9zeXN0ZW1faGVhZGVyCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgJiYgd2Fybl9sb25nX2xvbmcpCiAgICAgICAgICAgICAgICAgICAgICAgIHBlZHdhcm4g
KCJJU08gQzg5IGRvZXMgbm90IHN1cHBvcnQgYGxvbmcgbG9uZyciKTsKICAgICAgICAgICAgICAg
ICAgICAgIGxvbmdsb25nID0gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoc3BlY2JpdHMgJiAoMSA8PCBpKSkKICAgICAgICAg
ICAgICAgIHBlZHdhcm4gKCJkdXBsaWNhdGUgYCVzJyIsIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0
IHRyZWUgX190ID0gaWQ7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUp
ICE9IChJREVOVElGSUVSX05PREUpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBJREVOVElGSUVS
X05PREUsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNDA4OSwgX19GVU5DVElPTl9fKTsgX190
OyB9KS0+aWRlbnRpZmllci5wb2ludGVyKSk7CiAgICAgICAgICAgICAgc3BlY2JpdHMgfD0gMSA8
PCBpOwogICAgICAgICAgICAgIGdvdG8gZm91bmQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgIGlmICh0eXBlKQogICAgICAgIGVycm9yICgidHdvIG9yIG1vcmUgZGF0YSB0eXBlcyBpbiBk
ZWNsYXJhdGlvbiBvZiBgJXMnIiwgbmFtZSk7CgogICAgICBlbHNlIGlmICgoKGVudW0gdHJlZV9j
b2RlKSAoaWQpLT5jb21tb24uY29kZSkgPT0gVFlQRV9ERUNMKQogICAgICAgIHsKICAgICAgICAg
IHR5cGUgPSAoKGlkKS0+Y29tbW9uLnR5cGUpOwogICAgICAgICAgZGVjbF9tYWNoaW5lX2F0dHIg
PSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGlkOyBpZiAodHJlZV9jb2RlX3R5
cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2Qn
KSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRl
Y2wuYyIsIDQxMDAsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wubWFjaGluZV9hdHRyaWJ1
dGVzKTsKICAgICAgICAgIHR5cGVkZWZfZGVjbCA9IGlkOwogICAgICAgIH0KCiAgICAgIGVsc2Ug
aWYgKCgoZW51bSB0cmVlX2NvZGUpIChpZCktPmNvbW1vbi5jb2RlKSA9PSBJREVOVElGSUVSX05P
REUpCiAgICAgICAgewogICAgICAgICAgcmVnaXN0ZXIgdHJlZSB0ID0gbG9va3VwX25hbWUgKGlk
KTsKICAgICAgICAgIGlmICgoKHQpLT5jb21tb24udHlwZSkgPT0gZ2xvYmFsX3RyZWVzW1RJX0VS
Uk9SX01BUktdKQogICAgICAgICAgICA7CiAgICAgICAgICBlbHNlIGlmICghdCB8fCAoKGVudW0g
dHJlZV9jb2RlKSAodCktPmNvbW1vbi5jb2RlKSAhPSBUWVBFX0RFQ0wpCiAgICAgICAgICAgIGVy
cm9yICgiYCVzJyBmYWlscyB0byBiZSBhIHR5cGVkZWYgb3IgYnVpbHQgaW4gdHlwZSIsCiAgICAg
ICAgICAgICAgICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGlkOyBpZiAo
KChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoSURFTlRJRklFUl9OT0RF
KSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgSURFTlRJRklFUl9OT0RFLCAiLi4vLi4vZ2NjL2dj
Yy9jLWRlY2wuYyIsIDQxMTEsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmlkZW50aWZpZXIucG9p
bnRlcikpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlwZSA9
ICgodCktPmNvbW1vbi50eXBlKTsKICAgICAgICAgICAgICB0eXBlZGVmX2RlY2wgPSB0OwogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlmICgoKGVudW0gdHJlZV9jb2RlKSAoaWQp
LT5jb21tb24uY29kZSkgIT0gRVJST1JfTUFSSykKICAgICAgICB0eXBlID0gaWQ7CgogICAgZm91
bmQ6CiAgICAgIDsKICAgIH0KCiAgdHlwZWRlZl90eXBlID0gdHlwZTsKICBpZiAodHlwZSkKICAg
IHNpemVfdmFyaWVzID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB0eXBlOyBp
ZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24u
Y29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4v
Li4vZ2NjL2djYy9jLWRlY2wuYyIsIDQxMjcsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUu
bGFuZ19mbGFnXzEpOwoKCgoKICBpZiAodHlwZSA9PSAwKQogICAgewogICAgICBpZiAoKCEgKHNw
ZWNiaXRzICYgKCgxIDw8IChpbnQpIFJJRF9MT05HKSB8ICgxIDw8IChpbnQpIFJJRF9TSE9SVCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgxIDw8IChpbnQpIFJJRF9TSUdORUQpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAoMSA8PCAoaW50KSBSSURfVU5TSUdORUQpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAoMSA8PCAoaW50KSBSSURfQ09NUExFWCkpKSkKCiAgICAgICAg
ICAmJiAhIChzcGVjYml0cyAmICgxIDw8IChpbnQpIFJJRF9UWVBFREVGKSAmJiBpbml0aWFsaXpl
ZCkKICAgICAgICAgICYmICEgaW5fc3lzdGVtX2hlYWRlcikKICAgICAgICB7CgoKCiAgICAgICAg
ICBpZiAoKHdhcm5faW1wbGljaXRfaW50IHx8IHdhcm5fcmV0dXJuX3R5cGUpICYmIGZ1bmNkZWZf
ZmxhZykKICAgICAgICAgICAgd2Fybl9hYm91dF9yZXR1cm5fdHlwZSA9IDE7CiAgICAgICAgICBl
bHNlIGlmICh3YXJuX2ltcGxpY2l0X2ludCB8fCBmbGFnX2lzb2M5OSkKICAgICAgICAgICAgcGVk
d2Fybl9jOTkgKCJ0eXBlIGRlZmF1bHRzIHRvIGBpbnQnIGluIGRlY2xhcmF0aW9uIG9mIGAlcyci
LAogICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7CiAgICAgICAgfQoKICAgICAgZGVmYXVs
dGVkX2ludCA9IDE7CiAgICAgIHR5cGUgPSBpbnRlZ2VyX3R5cGVzW2l0a19pbnRdOwogICAgfQoK
CgoKCgogIGlmICgoc3BlY2JpdHMgJiAxIDw8IChpbnQpIFJJRF9MT05HKSAmJiAhIGxvbmdsb25n
CiAgICAgICYmIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gdHlwZTsgaWYgKHRy
ZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUp
KV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2dj
Yy9nY2MvYy1kZWNsLmMiLCA0MTYyLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLm1haW5f
dmFyaWFudCkgPT0gZ2xvYmFsX3RyZWVzW1RJX0RPVUJMRV9UWVBFXSkKICAgIHsKICAgICAgc3Bl
Y2JpdHMgJj0gfigxIDw8IChpbnQpIFJJRF9MT05HKTsKICAgICAgdHlwZSA9IGdsb2JhbF90cmVl
c1tUSV9MT05HX0RPVUJMRV9UWVBFXTsKICAgIH0KCgoKICBpZiAoc3BlY2JpdHMgJiAoKDEgPDwg
KGludCkgUklEX0xPTkcpIHwgKDEgPDwgKGludCkgUklEX1NIT1JUKQogICAgICAgICAgICAgICAg
ICB8ICgxIDw8IChpbnQpIFJJRF9VTlNJR05FRCkgfCAoMSA8PCAoaW50KSBSSURfU0lHTkVEKSkp
CiAgICB7CiAgICAgIGludCBvayA9IDA7CgogICAgICBpZiAoKHNwZWNiaXRzICYgMSA8PCAoaW50
KSBSSURfTE9ORykKICAgICAgICAgICYmIChzcGVjYml0cyAmIDEgPDwgKGludCkgUklEX1NIT1JU
KSkKICAgICAgICBlcnJvciAoImJvdGggbG9uZyBhbmQgc2hvcnQgc3BlY2lmaWVkIGZvciBgJXMn
IiwgbmFtZSk7CiAgICAgIGVsc2UgaWYgKCgoc3BlY2JpdHMgJiAxIDw8IChpbnQpIFJJRF9MT05H
KQogICAgICAgICAgICAgICAgfHwgKHNwZWNiaXRzICYgMSA8PCAoaW50KSBSSURfU0hPUlQpKQog
ICAgICAgICAgICAgICAmJiBleHBsaWNpdF9jaGFyKQogICAgICAgIGVycm9yICgibG9uZyBvciBz
aG9ydCBzcGVjaWZpZWQgd2l0aCBjaGFyIGZvciBgJXMnIiwgbmFtZSk7CiAgICAgIGVsc2UgaWYg
KCgoc3BlY2JpdHMgJiAxIDw8IChpbnQpIFJJRF9MT05HKQogICAgICAgICAgICAgICAgfHwgKHNw
ZWNiaXRzICYgMSA8PCAoaW50KSBSSURfU0hPUlQpKQogICAgICAgICAgICAgICAmJiAoKGVudW0g
dHJlZV9jb2RlKSAodHlwZSktPmNvbW1vbi5jb2RlKSA9PSBSRUFMX1RZUEUpCiAgICAgICAgewog
ICAgICAgICAgc3RhdGljIGludCBhbHJlYWR5ID0gMDsKCiAgICAgICAgICBlcnJvciAoImxvbmcg
b3Igc2hvcnQgc3BlY2lmaWVkIHdpdGggZmxvYXRpbmcgdHlwZSBmb3IgYCVzJyIsIG5hbWUpOwog
ICAgICAgICAgaWYgKCEgYWxyZWFkeSAmJiAhIHBlZGFudGljKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgZXJyb3IgKCJ0aGUgb25seSB2YWxpZCBjb21iaW5hdGlvbiBpcyBgbG9uZyBkb3Vi
bGUnIik7CiAgICAgICAgICAgICAgYWxyZWFkeSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICAgIGVsc2UgaWYgKChzcGVjYml0cyAmIDEgPDwgKGludCkgUklEX1NJR05FRCkKICAgICAg
ICAgICAgICAgJiYgKHNwZWNiaXRzICYgMSA8PCAoaW50KSBSSURfVU5TSUdORUQpKQogICAgICAg
IGVycm9yICgiYm90aCBzaWduZWQgYW5kIHVuc2lnbmVkIHNwZWNpZmllZCBmb3IgYCVzJyIsIG5h
bWUpOwogICAgICBlbHNlIGlmICgoKGVudW0gdHJlZV9jb2RlKSAodHlwZSktPmNvbW1vbi5jb2Rl
KSAhPSBJTlRFR0VSX1RZUEUpCiAgICAgICAgZXJyb3IgKCJsb25nLCBzaG9ydCwgc2lnbmVkIG9y
IHVuc2lnbmVkIGludmFsaWQgZm9yIGAlcyciLCBuYW1lKTsKICAgICAgZWxzZQogICAgICAgIHsK
ICAgICAgICAgIG9rID0gMTsKICAgICAgICAgIGlmICghZXhwbGljaXRfaW50ICYmICFkZWZhdWx0
ZWRfaW50ICYmICFleHBsaWNpdF9jaGFyICYmIHBlZGFudGljKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgcGVkd2FybiAoImxvbmcsIHNob3J0LCBzaWduZWQgb3IgdW5zaWduZWQgdXNlZCBp
bnZhbGlkbHkgZm9yIGAlcyciLAogICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOwogICAgICAg
ICAgICAgIGlmIChmbGFnX3BlZGFudGljX2Vycm9ycykKICAgICAgICAgICAgICAgIG9rID0gMDsK
ICAgICAgICAgICAgfQogICAgICAgIH0KCgogICAgICBpZiAoISBvaykKICAgICAgICB7CiAgICAg
ICAgICBzcGVjYml0cyAmPSB+KCgxIDw8IChpbnQpIFJJRF9MT05HKSB8ICgxIDw8IChpbnQpIFJJ
RF9TSE9SVCkKICAgICAgICAgICAgICAgICAgICAgICAgfCAoMSA8PCAoaW50KSBSSURfVU5TSUdO
RUQpIHwgKDEgPDwgKGludCkgUklEX1NJR05FRCkpOwogICAgICAgICAgbG9uZ2xvbmcgPSAwOwog
ICAgICAgIH0KICAgIH0KCiAgaWYgKChzcGVjYml0cyAmICgxIDw8IChpbnQpIFJJRF9DT01QTEVY
KSkKICAgICAgJiYgKChlbnVtIHRyZWVfY29kZSkgKHR5cGUpLT5jb21tb24uY29kZSkgIT0gSU5U
RUdFUl9UWVBFICYmICgoZW51bSB0cmVlX2NvZGUpICh0eXBlKS0+Y29tbW9uLmNvZGUpICE9IFJF
QUxfVFlQRSkKICAgIHsKICAgICAgZXJyb3IgKCJjb21wbGV4IGludmFsaWQgZm9yIGAlcyciLCBu
YW1lKTsKICAgICAgc3BlY2JpdHMgJj0gfigxIDw8IChpbnQpIFJJRF9DT01QTEVYKTsKICAgIH0K
CgoKICBpZiAoc3BlY2JpdHMgJiAxIDw8IChpbnQpIFJJRF9VTlNJR05FRAoKICAgICAgfHwgKGJp
dGZpZWxkICYmIGZsYWdfdHJhZGl0aW9uYWwKICAgICAgICAgICYmICghIGV4cGxpY2l0X2ZsYWdf
c2lnbmVkX2JpdGZpZWxkcyB8fCAhZmxhZ19zaWduZWRfYml0ZmllbGRzKSkKICAgICAgfHwgKGJp
dGZpZWxkICYmICEgZmxhZ19zaWduZWRfYml0ZmllbGRzCiAgICAgICAgICAmJiAoZXhwbGljaXRf
aW50IHx8IGRlZmF1bHRlZF9pbnQgfHwgZXhwbGljaXRfY2hhcgoKCiAgICAgICAgICAgICAgfHwg
ISAodHlwZWRlZl9kZWNsICE9IDAKICAgICAgICAgICAgICAgICAgICAmJiAoX19leHRlbnNpb25f
XyAoeyBjb25zdCB0cmVlIF9fdCA9ICh0eXBlZGVmX2RlY2wpOyBpZiAodHJlZV9jb2RlX3R5cGVb
KGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkg
dHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wu
YyIsIDQyMzksIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wubGFuZ19mbGFnXzEpKSkKICAg
ICAgICAgICYmICgoZW51bSB0cmVlX2NvZGUpICh0eXBlKS0+Y29tbW9uLmNvZGUpICE9IEVOVU1F
UkFMX1RZUEUKICAgICAgICAgICYmICEoc3BlY2JpdHMgJiAxIDw8IChpbnQpIFJJRF9TSUdORUQp
KSkKICAgIHsKICAgICAgaWYgKGxvbmdsb25nKQogICAgICAgIHR5cGUgPSBpbnRlZ2VyX3R5cGVz
W2l0a191bnNpZ25lZF9sb25nX2xvbmddOwogICAgICBlbHNlIGlmIChzcGVjYml0cyAmIDEgPDwg
KGludCkgUklEX0xPTkcpCiAgICAgICAgdHlwZSA9IGludGVnZXJfdHlwZXNbaXRrX3Vuc2lnbmVk
X2xvbmddOwogICAgICBlbHNlIGlmIChzcGVjYml0cyAmIDEgPDwgKGludCkgUklEX1NIT1JUKQog
ICAgICAgIHR5cGUgPSBpbnRlZ2VyX3R5cGVzW2l0a191bnNpZ25lZF9zaG9ydF07CiAgICAgIGVs
c2UgaWYgKHR5cGUgPT0gaW50ZWdlcl90eXBlc1tpdGtfY2hhcl0pCiAgICAgICAgdHlwZSA9IGlu
dGVnZXJfdHlwZXNbaXRrX3Vuc2lnbmVkX2NoYXJdOwogICAgICBlbHNlIGlmICh0eXBlZGVmX2Rl
Y2wpCiAgICAgICAgdHlwZSA9IHVuc2lnbmVkX3R5cGUgKHR5cGUpOwogICAgICBlbHNlCiAgICAg
ICAgdHlwZSA9IGludGVnZXJfdHlwZXNbaXRrX3Vuc2lnbmVkX2ludF07CiAgICB9CiAgZWxzZSBp
ZiAoKHNwZWNiaXRzICYgMSA8PCAoaW50KSBSSURfU0lHTkVEKQogICAgICAgICAgICYmIHR5cGUg
PT0gaW50ZWdlcl90eXBlc1tpdGtfY2hhcl0pCiAgICB0eXBlID0gaW50ZWdlcl90eXBlc1tpdGtf
c2lnbmVkX2NoYXJdOwogIGVsc2UgaWYgKGxvbmdsb25nKQogICAgdHlwZSA9IGludGVnZXJfdHlw
ZXNbaXRrX2xvbmdfbG9uZ107CiAgZWxzZSBpZiAoc3BlY2JpdHMgJiAxIDw8IChpbnQpIFJJRF9M
T05HKQogICAgdHlwZSA9IGludGVnZXJfdHlwZXNbaXRrX2xvbmddOwogIGVsc2UgaWYgKHNwZWNi
aXRzICYgMSA8PCAoaW50KSBSSURfU0hPUlQpCiAgICB0eXBlID0gaW50ZWdlcl90eXBlc1tpdGtf
c2hvcnRdOwoKICBpZiAoc3BlY2JpdHMgJiAxIDw8IChpbnQpIFJJRF9DT01QTEVYKQogICAgewog
ICAgICBpZiAocGVkYW50aWMgJiYgIWZsYWdfaXNvYzk5KQogICAgICAgIHBlZHdhcm4gKCJJU08g
Qzg5IGRvZXMgbm90IHN1cHBvcnQgY29tcGxleCB0eXBlcyIpOwoKCgoKCiAgICAgIGlmIChkZWZh
dWx0ZWRfaW50ICYmICEgbG9uZ2xvbmcKICAgICAgICAgICYmICEgKHNwZWNiaXRzICYgKCgxIDw8
IChpbnQpIFJJRF9MT05HKSB8ICgxIDw8IChpbnQpIFJJRF9TSE9SVCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgKDEgPDwgKGludCkgUklEX1NJR05FRCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgKDEgPDwgKGludCkgUklEX1VOU0lHTkVEKSkpKQogICAgICAgIHsKICAgICAg
ICAgIGlmIChwZWRhbnRpYykKICAgICAgICAgICAgcGVkd2FybiAoIklTTyBDIGRvZXMgbm90IHN1
cHBvcnQgcGxhaW4gYGNvbXBsZXgnIG1lYW5pbmcgYGRvdWJsZSBjb21wbGV4JyIpOwogICAgICAg
ICAgdHlwZSA9IGdsb2JhbF90cmVlc1tUSV9DT01QTEVYX0RPVUJMRV9UWVBFXTsKICAgICAgICB9
CiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gaW50ZWdlcl90eXBlc1tpdGtfaW50XSkKICAgICAgICB7
CiAgICAgICAgICBpZiAocGVkYW50aWMpCiAgICAgICAgICAgIHBlZHdhcm4gKCJJU08gQyBkb2Vz
IG5vdCBzdXBwb3J0IGNvbXBsZXggaW50ZWdlciB0eXBlcyIpOwogICAgICAgICAgdHlwZSA9IGds
b2JhbF90cmVlc1tUSV9DT01QTEVYX0lOVEVHRVJfVFlQRV07CiAgICAgICAgfQogICAgICBlbHNl
IGlmICh0eXBlID09IGdsb2JhbF90cmVlc1tUSV9GTE9BVF9UWVBFXSkKICAgICAgICB0eXBlID0g
Z2xvYmFsX3RyZWVzW1RJX0NPTVBMRVhfRkxPQVRfVFlQRV07CiAgICAgIGVsc2UgaWYgKHR5cGUg
PT0gZ2xvYmFsX3RyZWVzW1RJX0RPVUJMRV9UWVBFXSkKICAgICAgICB0eXBlID0gZ2xvYmFsX3Ry
ZWVzW1RJX0NPTVBMRVhfRE9VQkxFX1RZUEVdOwogICAgICBlbHNlIGlmICh0eXBlID09IGdsb2Jh
bF90cmVlc1tUSV9MT05HX0RPVUJMRV9UWVBFXSkKICAgICAgICB0eXBlID0gZ2xvYmFsX3RyZWVz
W1RJX0NPTVBMRVhfTE9OR19ET1VCTEVfVFlQRV07CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAg
ICAgICBpZiAocGVkYW50aWMpCiAgICAgICAgICAgIHBlZHdhcm4gKCJJU08gQyBkb2VzIG5vdCBz
dXBwb3J0IGNvbXBsZXggaW50ZWdlciB0eXBlcyIpOwogICAgICAgICAgdHlwZSA9IGJ1aWxkX2Nv
bXBsZXhfdHlwZSAodHlwZSk7CiAgICAgICAgfQogICAgfQoKCgoKCgogIGNvbnN0cCA9ICEhIChz
cGVjYml0cyAmIDEgPDwgKGludCkgUklEX0NPTlNUKSArICgodHlwZSktPmNvbW1vbi5yZWFkb25s
eV9mbGFnKTsKICByZXN0cmljdHAgPSAhISAoc3BlY2JpdHMgJiAxIDw8IChpbnQpIFJJRF9SRVNU
UklDVCkgKyAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHR5cGU7IGlmICh0cmVl
X2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSld
ICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2Mv
Z2NjL2MtZGVjbC5jIiwgNDMxMCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5yZXN0cmlj
dF9mbGFnKTsKICB2b2xhdGlsZXAgPSAhISAoc3BlY2JpdHMgJiAxIDw8IChpbnQpIFJJRF9WT0xB
VElMRSkgKyAoKHR5cGUpLT5jb21tb24udm9sYXRpbGVfZmxhZyk7CiAgaW5saW5lcCA9ICEhIChz
cGVjYml0cyAmICgxIDw8IChpbnQpIFJJRF9JTkxJTkUpKTsKICBpZiAoY29uc3RwID4gMSAmJiAh
IGZsYWdfaXNvYzk5KQogICAgcGVkd2FybiAoImR1cGxpY2F0ZSBgY29uc3QnIik7CiAgaWYgKHJl
c3RyaWN0cCA+IDEgJiYgISBmbGFnX2lzb2M5OSkKICAgIHBlZHdhcm4gKCJkdXBsaWNhdGUgYHJl
c3RyaWN0JyIpOwogIGlmICh2b2xhdGlsZXAgPiAxICYmICEgZmxhZ19pc29jOTkpCiAgICBwZWR3
YXJuICgiZHVwbGljYXRlIGB2b2xhdGlsZSciKTsKICBpZiAoISBmbGFnX2dlbl9hdXhfaW5mbyAm
JiAoKCgoKHR5cGUpLT5jb21tb24ucmVhZG9ubHlfZmxhZykgKiAweDEpIHwgKCgodHlwZSktPmNv
bW1vbi52b2xhdGlsZV9mbGFnKSAqIDB4MikgfCAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJl
ZSBfX3QgPSB0eXBlOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUp
IChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQg
KF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDQzMTksIF9fRlVOQ1RJT05fXyk7
IF9fdDsgfSktPnR5cGUucmVzdHJpY3RfZmxhZykgKiAweDQpIHwgKCgoKGVudW0gdHJlZV9jb2Rl
KSAodHlwZSktPmNvbW1vbi5jb2RlKSA9PSBSRUNPUkRfVFlQRSAmJiAoKHR5cGUpLT5jb21tb24u
dHlwZSkpICogMHg4KSkpKQogICAgdHlwZSA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUg
X190ID0gdHlwZTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAo
X190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChf
X3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA0MzIwLCBfX0ZVTkNUSU9OX18pOyBf
X3Q7IH0pLT50eXBlLm1haW5fdmFyaWFudCk7CiAgdHlwZV9xdWFscyA9ICgoY29uc3RwID8gMHgx
IDogMCkKICAgICAgICAgICAgICAgIHwgKHJlc3RyaWN0cCA/IDB4NCA6IDApCiAgICAgICAgICAg
ICAgICB8ICh2b2xhdGlsZXAgPyAweDIgOiAwKSk7CgoKCiAgewogICAgaW50IG5jbGFzc2VzID0g
MDsKCiAgICBpZiAoc3BlY2JpdHMgJiAxIDw8IChpbnQpIFJJRF9BVVRPKSBuY2xhc3NlcysrOwog
ICAgaWYgKHNwZWNiaXRzICYgMSA8PCAoaW50KSBSSURfU1RBVElDKSBuY2xhc3NlcysrOwogICAg
aWYgKHNwZWNiaXRzICYgMSA8PCAoaW50KSBSSURfRVhURVJOKSBuY2xhc3NlcysrOwogICAgaWYg
KHNwZWNiaXRzICYgMSA8PCAoaW50KSBSSURfUkVHSVNURVIpIG5jbGFzc2VzKys7CiAgICBpZiAo
c3BlY2JpdHMgJiAxIDw8IChpbnQpIFJJRF9UWVBFREVGKSBuY2xhc3NlcysrOwoKCgoKICAgIGlm
IChuY2xhc3NlcyA+IDEpCiAgICAgIGVycm9yICgibXVsdGlwbGUgc3RvcmFnZSBjbGFzc2VzIGlu
IGRlY2xhcmF0aW9uIG9mIGAlcyciLCBuYW1lKTsKICAgIGVsc2UgaWYgKGZ1bmNkZWZfZmxhZwog
ICAgICAgICAgICAgJiYgKHNwZWNiaXRzCiAgICAgICAgICAgICAgICAgJiAoKDEgPDwgKGludCkg
UklEX1JFR0lTVEVSKQogICAgICAgICAgICAgICAgICAgIHwgKDEgPDwgKGludCkgUklEX0FVVE8p
CiAgICAgICAgICAgICAgICAgICAgfCAoMSA8PCAoaW50KSBSSURfVFlQRURFRikpKSkKICAgICAg
ewogICAgICAgIGlmIChzcGVjYml0cyAmIDEgPDwgKGludCkgUklEX0FVVE8KICAgICAgICAgICAg
JiYgKHBlZGFudGljIHx8IGN1cnJlbnRfYmluZGluZ19sZXZlbCA9PSBnbG9iYWxfYmluZGluZ19s
ZXZlbCkpCiAgICAgICAgICBwZWR3YXJuICgiZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWNsYXJlZCBg
YXV0byciKTsKICAgICAgICBpZiAoc3BlY2JpdHMgJiAxIDw8IChpbnQpIFJJRF9SRUdJU1RFUikK
ICAgICAgICAgIGVycm9yICgiZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWNsYXJlZCBgcmVnaXN0ZXIn
Iik7CiAgICAgICAgaWYgKHNwZWNiaXRzICYgMSA8PCAoaW50KSBSSURfVFlQRURFRikKICAgICAg
ICAgIGVycm9yICgiZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWNsYXJlZCBgdHlwZWRlZiciKTsKICAg
ICAgICBzcGVjYml0cyAmPSB+KCgxIDw8IChpbnQpIFJJRF9UWVBFREVGKSB8ICgxIDw8IChpbnQp
IFJJRF9SRUdJU1RFUikKICAgICAgICAgICAgICAgICAgICAgIHwgKDEgPDwgKGludCkgUklEX0FV
VE8pKTsKICAgICAgfQogICAgZWxzZSBpZiAoZGVjbF9jb250ZXh0ICE9IE5PUk1BTCAmJiBuY2xh
c3NlcyA+IDApCiAgICAgIHsKICAgICAgICBpZiAoZGVjbF9jb250ZXh0ID09IFBBUk0gJiYgc3Bl
Y2JpdHMgJiAxIDw8IChpbnQpIFJJRF9SRUdJU1RFUikKICAgICAgICAgIDsKICAgICAgICBlbHNl
CiAgICAgICAgICB7CiAgICAgICAgICAgIHN3aXRjaCAoZGVjbF9jb250ZXh0KQogICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBjYXNlIEZJRUxEOgogICAgICAgICAgICAgICAgZXJyb3IgKCJz
dG9yYWdlIGNsYXNzIHNwZWNpZmllZCBmb3Igc3RydWN0dXJlIGZpZWxkIGAlcyciLAogICAgICAg
ICAgICAgICAgICAgICAgIG5hbWUpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgY2FzZSBQQVJNOgogICAgICAgICAgICAgICAgZXJyb3IgKCJzdG9yYWdlIGNsYXNzIHNwZWNp
ZmllZCBmb3IgcGFyYW1ldGVyIGAlcyciLCBuYW1lKTsKICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBlcnJvciAoInN0b3JhZ2UgY2xh
c3Mgc3BlY2lmaWVkIGZvciB0eXBlbmFtZSIpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgfQogICAgICAgICAgICBzcGVjYml0cyAmPSB+KCgxIDw8IChpbnQpIFJJRF9UWVBF
REVGKSB8ICgxIDw8IChpbnQpIFJJRF9SRUdJU1RFUikKICAgICAgICAgICAgICAgICAgICAgICAg
ICB8ICgxIDw8IChpbnQpIFJJRF9BVVRPKSB8ICgxIDw8IChpbnQpIFJJRF9TVEFUSUMpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAoMSA8PCAoaW50KSBSSURfRVhURVJOKSk7CiAgICAgICAg
ICB9CiAgICAgIH0KICAgIGVsc2UgaWYgKHNwZWNiaXRzICYgMSA8PCAoaW50KSBSSURfRVhURVJO
ICYmIGluaXRpYWxpemVkICYmICEgZnVuY2RlZl9mbGFnKQogICAgICB7CgogICAgICAgIGlmIChj
dXJyZW50X2JpbmRpbmdfbGV2ZWwgPT0gZ2xvYmFsX2JpbmRpbmdfbGV2ZWwpCiAgICAgICAgICB3
YXJuaW5nICgiYCVzJyBpbml0aWFsaXplZCBhbmQgZGVjbGFyZWQgYGV4dGVybiciLCBuYW1lKTsK
ICAgICAgICBlbHNlCiAgICAgICAgICBlcnJvciAoImAlcycgaGFzIGJvdGggYGV4dGVybicgYW5k
IGluaXRpYWxpemVyIiwgbmFtZSk7CiAgICAgIH0KICAgIGVsc2UgaWYgKHNwZWNiaXRzICYgMSA8
PCAoaW50KSBSSURfRVhURVJOICYmIGZ1bmNkZWZfZmxhZwogICAgICAgICAgICAgJiYgY3VycmVu
dF9iaW5kaW5nX2xldmVsICE9IGdsb2JhbF9iaW5kaW5nX2xldmVsKQogICAgICBlcnJvciAoIm5l
c3RlZCBmdW5jdGlvbiBgJXMnIGRlY2xhcmVkIGBleHRlcm4nIiwgbmFtZSk7CiAgICBlbHNlIGlm
IChjdXJyZW50X2JpbmRpbmdfbGV2ZWwgPT0gZ2xvYmFsX2JpbmRpbmdfbGV2ZWwKICAgICAgICAg
ICAgICYmIHNwZWNiaXRzICYgKDEgPDwgKGludCkgUklEX0FVVE8pKQogICAgICBlcnJvciAoInRv
cC1sZXZlbCBkZWNsYXJhdGlvbiBvZiBgJXMnIHNwZWNpZmllcyBgYXV0byciLCBuYW1lKTsKICB9
CgoKCgoKICB3aGlsZSAoZGVjbGFyYXRvciAmJiAoKGVudW0gdHJlZV9jb2RlKSAoZGVjbGFyYXRv
ciktPmNvbW1vbi5jb2RlKSAhPSBJREVOVElGSUVSX05PREUpCiAgICB7CiAgICAgIGlmICh0eXBl
ID09IGdsb2JhbF90cmVlc1tUSV9FUlJPUl9NQVJLXSkKICAgICAgICB7CiAgICAgICAgICBkZWNs
YXJhdG9yID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBkZWNsYXJhdG9yOyBj
aGFyIF9fYyA9IHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+
Y29tbW9uLmNvZGUpKV07IGlmIChfX2MgIT0gJ3InICYmIF9fYyAhPSAncycgJiYgX19jICE9ICc8
JyAmJiBfX2MgIT0gJzEnICYmIF9fYyAhPSAnMicgJiYgX19jICE9ICdlJykgdHJlZV9jbGFzc19j
aGVja19mYWlsZWQoX190LCAnZScsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNDQwNSwgX19G
VU5DVElPTl9fKTsgX190OyB9KS0+ZXhwLm9wZXJhbmRzWzBdKTsKICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgIH0KIyA0NDIzICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIgogICAgICBpZiAoKChl
bnVtIHRyZWVfY29kZSkgKGRlY2xhcmF0b3IpLT5jb21tb24uY29kZSkgPT0gQVJSQVlfUkVGKQog
ICAgICAgIHsKICAgICAgICAgIHJlZ2lzdGVyIHRyZWUgaXR5cGUgPSAodHJlZSkgKCh2b2lkICop
MCk7CiAgICAgICAgICByZWdpc3RlciB0cmVlIHNpemUgPSAoX19leHRlbnNpb25fXyAoeyBjb25z
dCB0cmVlIF9fdCA9IGRlY2xhcmF0b3I7IGNoYXIgX19jID0gdHJlZV9jb2RlX3R5cGVbKGludCkg
KCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXTsgaWYgKF9fYyAhPSAncicg
JiYgX19jICE9ICdzJyAmJiBfX2MgIT0gJzwnICYmIF9fYyAhPSAnMScgJiYgX19jICE9ICcyJyAm
JiBfX2MgIT0gJ2UnKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZChfX3QsICdlJywgIi4uLy4uL2dj
Yy9nY2MvYy1kZWNsLmMiLCA0NDI2LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5leHAub3BlcmFu
ZHNbMV0pOwoKICAgICAgICAgIHRyZWUgaW5kZXhfdHlwZSA9IHNpZ25lZF90eXBlIChzaXpldHlw
ZV90YWJbKGludCkgU0laRVRZUEVdKTsKCiAgICAgICAgICBkZWNsYXJhdG9yID0gKF9fZXh0ZW5z
aW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBkZWNsYXJhdG9yOyBjaGFyIF9fYyA9IHRyZWVfY29k
ZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV07IGlm
IChfX2MgIT0gJ3InICYmIF9fYyAhPSAncycgJiYgX19jICE9ICc8JyAmJiBfX2MgIT0gJzEnICYm
IF9fYyAhPSAnMicgJiYgX19jICE9ICdlJykgdHJlZV9jbGFzc19jaGVja19mYWlsZWQoX190LCAn
ZScsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNDQzMCwgX19GVU5DVElPTl9fKTsgX190OyB9
KS0+ZXhwLm9wZXJhbmRzWzBdKTsKCgoKICAgICAgICAgIGlmICgoKChlbnVtIHRyZWVfY29kZSkg
KHR5cGUpLT5jb21tb24uY29kZSkgPT0gVk9JRF9UWVBFKSkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIGVycm9yICgiZGVjbGFyYXRpb24gb2YgYCVzJyBhcyBhcnJheSBvZiB2b2lkcyIsIG5h
bWUpOwogICAgICAgICAgICAgIHR5cGUgPSBnbG9iYWxfdHJlZXNbVElfRVJST1JfTUFSS107CiAg
ICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoKChlbnVtIHRyZWVfY29kZSkgKHR5cGUpLT5jb21t
b24uY29kZSkgPT0gRlVOQ1RJT05fVFlQRSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGVy
cm9yICgiZGVjbGFyYXRpb24gb2YgYCVzJyBhcyBhcnJheSBvZiBmdW5jdGlvbnMiLCBuYW1lKTsK
ICAgICAgICAgICAgICB0eXBlID0gZ2xvYmFsX3RyZWVzW1RJX0VSUk9SX01BUktdOwogICAgICAg
ICAgICB9CgogICAgICAgICAgaWYgKHNpemUgPT0gZ2xvYmFsX3RyZWVzW1RJX0VSUk9SX01BUktd
KQogICAgICAgICAgICB0eXBlID0gZ2xvYmFsX3RyZWVzW1RJX0VSUk9SX01BUktdOwoKICAgICAg
ICAgIGlmICh0eXBlID09IGdsb2JhbF90cmVlc1tUSV9FUlJPUl9NQVJLXSkKICAgICAgICAgICAg
Y29udGludWU7CgoKCgoKICAgICAgICAgIGlmIChzaXplKQogICAgICAgICAgICB7CgogICAgICAg
ICAgICAgIHdoaWxlICgoKChlbnVtIHRyZWVfY29kZSkgKHNpemUpLT5jb21tb24uY29kZSkgPT0g
Tk9QX0VYUFIgfHwgKChlbnVtIHRyZWVfY29kZSkgKHNpemUpLT5jb21tb24uY29kZSkgPT0gQ09O
VkVSVF9FWFBSIHx8ICgoZW51bSB0cmVlX2NvZGUpIChzaXplKS0+Y29tbW9uLmNvZGUpID09IE5P
Tl9MVkFMVUVfRVhQUikgJiYgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBzaXpl
OyBjaGFyIF9fYyA9IHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190
KS0+Y29tbW9uLmNvZGUpKV07IGlmIChfX2MgIT0gJ3InICYmIF9fYyAhPSAncycgJiYgX19jICE9
ICc8JyAmJiBfX2MgIT0gJzEnICYmIF9fYyAhPSAnMicgJiYgX19jICE9ICdlJykgdHJlZV9jbGFz
c19jaGVja19mYWlsZWQoX190LCAnZScsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNDQ1OSwg
X19GVU5DVElPTl9fKTsgX190OyB9KS0+ZXhwLm9wZXJhbmRzWzBdKSAhPSBnbG9iYWxfdHJlZXNb
VElfRVJST1JfTUFSS10gJiYgKCgoc2l6ZSktPmNvbW1vbi50eXBlKSA9PSAoKChfX2V4dGVuc2lv
bl9fICh7IGNvbnN0IHRyZWUgX190ID0gc2l6ZTsgY2hhciBfX2MgPSB0cmVlX2NvZGVfdHlwZVso
aW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldOyBpZiAoX19jICE9
ICdyJyAmJiBfX2MgIT0gJ3MnICYmIF9fYyAhPSAnPCcgJiYgX19jICE9ICcxJyAmJiBfX2MgIT0g
JzInICYmIF9fYyAhPSAnZScpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkKF9fdCwgJ2UnLCAiLi4v
Li4vZ2NjL2djYy9jLWRlY2wuYyIsIDQ0NTksIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmV4cC5v
cGVyYW5kc1swXSkpLT5jb21tb24udHlwZSkpKSAoc2l6ZSkgPSAoX19leHRlbnNpb25fXyAoeyBj
b25zdCB0cmVlIF9fdCA9IHNpemU7IGNoYXIgX19jID0gdHJlZV9jb2RlX3R5cGVbKGludCkgKCgo
ZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXTsgaWYgKF9fYyAhPSAncicgJiYg
X19jICE9ICdzJyAmJiBfX2MgIT0gJzwnICYmIF9fYyAhPSAnMScgJiYgX19jICE9ICcyJyAmJiBf
X2MgIT0gJ2UnKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZChfX3QsICdlJywgIi4uLy4uL2djYy9n
Y2MvYy1kZWNsLmMiLCA0NDU5LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5leHAub3BlcmFuZHNb
MF0pOzsKCiAgICAgICAgICAgICAgaWYgKCgoZW51bSB0cmVlX2NvZGUpICgoKHNpemUpLT5jb21t
b24udHlwZSkpLT5jb21tb24uY29kZSkgIT0gSU5URUdFUl9UWVBFCiAgICAgICAgICAgICAgICAg
ICYmICgoZW51bSB0cmVlX2NvZGUpICgoKHNpemUpLT5jb21tb24udHlwZSkpLT5jb21tb24uY29k
ZSkgIT0gRU5VTUVSQUxfVFlQRSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ZXJyb3IgKCJzaXplIG9mIGFycmF5IGAlcycgaGFzIG5vbi1pbnRlZ2VyIHR5cGUiLCBuYW1lKTsK
ICAgICAgICAgICAgICAgICAgc2l6ZSA9IGdsb2JhbF90cmVlc1tUSV9JTlRFR0VSX09ORV07CiAg
ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIGlmIChwZWRhbnRpYyAmJiBpbnRlZ2VyX3pl
cm9wIChzaXplKSkKICAgICAgICAgICAgICAgIHBlZHdhcm4gKCJJU08gQyBmb3JiaWRzIHplcm8t
c2l6ZSBhcnJheSBgJXMnIiwgbmFtZSk7CgogICAgICAgICAgICAgIGlmICgoKGVudW0gdHJlZV9j
b2RlKSAoc2l6ZSktPmNvbW1vbi5jb2RlKSA9PSBJTlRFR0VSX0NTVCkKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgY29uc3RhbnRfZXhwcmVzc2lvbl93YXJuaW5nIChzaXplKTsK
ICAgICAgICAgICAgICAgICAgaWYgKHRyZWVfaW50X2NzdF9zZ24gKHNpemUpIDwgMCkKICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBlcnJvciAoInNpemUgb2YgYXJy
YXkgYCVzJyBpcyBuZWdhdGl2ZSIsIG5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9
IGdsb2JhbF90cmVlc1tUSV9JTlRFR0VSX09ORV07CiAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKCgogICAg
ICAgICAgICAgICAgICBzaXplX3ZhcmllcyA9IDE7CgogICAgICAgICAgICAgICAgICBpZiAocGVk
YW50aWMpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgaWYgKCgo
c2l6ZSktPmNvbW1vbi5jb25zdGFudF9mbGFnKSkKICAgICAgICAgICAgICAgICAgICAgICAgcGVk
d2FybiAoIklTTyBDODkgZm9yYmlkcyBhcnJheSBgJXMnIHdob3NlIHNpemUgY2FuJ3QgYmUgZXZh
bHVhdGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7CiAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHBlZHdhcm4gKCJJU08g
Qzg5IGZvcmJpZHMgdmFyaWFibGUtc2l6ZSBhcnJheSBgJXMnIiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmFtZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgfQoKCgogICAgICAgICAgICAgIGl0eXBlID0gZm9sZCAoYnVpbGQgKE1JTlVTX0VYUFIsIGlu
ZGV4X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydCAoaW5k
ZXhfdHlwZSwgc2l6ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVy
dCAoaW5kZXhfdHlwZSwgZ2xvYmFsX3RyZWVzW1RJX1NJWkVfT05FXSkpKTsKCgoKCgoKICAgICAg
ICAgICAgICBpZiAoKChpdHlwZSktPmNvbW1vbi5wdWJsaWNfZmxhZykpCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgIGVycm9yICgic2l6ZSBvZiBhcnJheSBgJXMnIGlzIHRvbyBs
YXJnZSIsIG5hbWUpOwogICAgICAgICAgICAgICAgICB0eXBlID0gZ2xvYmFsX3RyZWVzW1RJX0VS
Uk9SX01BUktdOwogICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0K
CiAgICAgICAgICAgICAgaWYgKHNpemVfdmFyaWVzKQogICAgICAgICAgICAgICAgaXR5cGUgPSB2
YXJpYWJsZV9zaXplIChpdHlwZSk7CiAgICAgICAgICAgICAgaXR5cGUgPSBidWlsZF9pbmRleF90
eXBlIChpdHlwZSk7CiAgICAgICAgICAgIH0KIyA0NTQ2ICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5j
IgogICAgICAgICAgdHlwZSA9IGJ1aWxkX2FycmF5X3R5cGUgKHR5cGUsIGl0eXBlKTsKICAgICAg
ICAgIGlmICh0eXBlX3F1YWxzKQogICAgICAgICAgICB0eXBlID0gY19idWlsZF9xdWFsaWZpZWRf
dHlwZSAodHlwZSwgdHlwZV9xdWFscyk7CgoKCgoKCgogICAgICAgICAgaWYgKHNpemVfdmFyaWVz
KQogICAgICAgICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHR5cGU7IGlm
ICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5j
b2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8u
Li9nY2MvZ2NjL2MtZGVjbC5jIiwgNDU1NywgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5s
YW5nX2ZsYWdfMSkgPSAxOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoKChlbnVtIHRyZWVfY29k
ZSkgKGRlY2xhcmF0b3IpLT5jb21tb24uY29kZSkgPT0gQ0FMTF9FWFBSKQogICAgICAgIHsKICAg
ICAgICAgIHRyZWUgYXJnX3R5cGVzOwoKCgogICAgICAgICAgaWYgKHR5cGUgPT0gZ2xvYmFsX3Ry
ZWVzW1RJX0VSUk9SX01BUktdKQogICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICBzaXpl
X3ZhcmllcyA9IDA7CgoKCiAgICAgICAgICBpZiAoKChlbnVtIHRyZWVfY29kZSkgKHR5cGUpLT5j
b21tb24uY29kZSkgPT0gRlVOQ1RJT05fVFlQRSkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IGVycm9yICgiYCVzJyBkZWNsYXJlZCBhcyBmdW5jdGlvbiByZXR1cm5pbmcgYSBmdW5jdGlvbiIs
IG5hbWUpOwogICAgICAgICAgICAgIHR5cGUgPSBpbnRlZ2VyX3R5cGVzW2l0a19pbnRdOwogICAg
ICAgICAgICB9CiAgICAgICAgICBpZiAoKChlbnVtIHRyZWVfY29kZSkgKHR5cGUpLT5jb21tb24u
Y29kZSkgPT0gQVJSQVlfVFlQRSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGVycm9yICgi
YCVzJyBkZWNsYXJlZCBhcyBmdW5jdGlvbiByZXR1cm5pbmcgYW4gYXJyYXkiLCBuYW1lKTsKICAg
ICAgICAgICAgICB0eXBlID0gaW50ZWdlcl90eXBlc1tpdGtfaW50XTsKICAgICAgICAgICAgfQoK
CgoKICAgICAgICAgIGlmIChmbGFnX3RyYWRpdGlvbmFsICYmIChfX2V4dGVuc2lvbl9fICh7IGNv
bnN0IHRyZWUgX190ID0gdHlwZTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJl
ZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tf
ZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA0NTg2LCBfX0ZVTkNU
SU9OX18pOyBfX3Q7IH0pLT50eXBlLm1haW5fdmFyaWFudCkgPT0gZ2xvYmFsX3RyZWVzW1RJX0ZM
T0FUX1RZUEVdKQogICAgICAgICAgICB0eXBlID0gZ2xvYmFsX3RyZWVzW1RJX0RPVUJMRV9UWVBF
XTsKCgoKCgogICAgICAgICAgYXJnX3R5cGVzID0gZ3Jva3Bhcm1zICgoX19leHRlbnNpb25fXyAo
eyBjb25zdCB0cmVlIF9fdCA9IGRlY2xhcmF0b3I7IGNoYXIgX19jID0gdHJlZV9jb2RlX3R5cGVb
KGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXTsgaWYgKF9fYyAh
PSAncicgJiYgX19jICE9ICdzJyAmJiBfX2MgIT0gJzwnICYmIF9fYyAhPSAnMScgJiYgX19jICE9
ICcyJyAmJiBfX2MgIT0gJ2UnKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZChfX3QsICdlJywgIi4u
Ly4uL2djYy9nY2MvYy1kZWNsLmMiLCA0NTkzLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5leHAu
b3BlcmFuZHNbMV0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jZGVmX2Zs
YWcKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKChlbnVtIHRyZWVfY29k
ZSkgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZGVjbGFyYXRvcjsgY2hhciBf
X2MgPSB0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1v
bi5jb2RlKSldOyBpZiAoX19jICE9ICdyJyAmJiBfX2MgIT0gJ3MnICYmIF9fYyAhPSAnPCcgJiYg
X19jICE9ICcxJyAmJiBfX2MgIT0gJzInICYmIF9fYyAhPSAnZScpIHRyZWVfY2xhc3NfY2hlY2tf
ZmFpbGVkKF9fdCwgJ2UnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDQ1OTgsIF9fRlVOQ1RJ
T05fXyk7IF9fdDsgfSktPmV4cC5vcGVyYW5kc1swXSkpLT5jb21tb24uY29kZSkgPT0gSURFTlRJ
RklFUl9OT0RFKTsKCgogICAgICAgICAgaWYgKHR5cGVfcXVhbHMpCiAgICAgICAgICAgIHsKIyA0
NjEzICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIgogICAgICAgICAgICAgIGlmICgoKChlbnVtIHRy
ZWVfY29kZSkgKHR5cGUpLT5jb21tb24uY29kZSkgPT0gVk9JRF9UWVBFKSAmJiBwZWRhbnRpYyAm
JiAhaW5fc3lzdGVtX2hlYWRlcikKICAgICAgICAgICAgICAgIHBlZHdhcm4gKCJJU08gQyBmb3Ji
aWRzIHF1YWxpZmllZCB2b2lkIGZ1bmN0aW9uIHJldHVybiB0eXBlIik7CiAgICAgICAgICAgICAg
ZWxzZSBpZiAoZXh0cmFfd2FybmluZ3MKICAgICAgICAgICAgICAgICAgICAgICAmJiAhKCgoKGVu
dW0gdHJlZV9jb2RlKSAodHlwZSktPmNvbW1vbi5jb2RlKSA9PSBWT0lEX1RZUEUpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmJiB0eXBlX3F1YWxzID09IDB4MikpCiAgICAgICAgICAgICAg
ICB3YXJuaW5nICgidHlwZSBxdWFsaWZpZXJzIGlnbm9yZWQgb24gZnVuY3Rpb24gcmV0dXJuIHR5
cGUiKTsKCiAgICAgICAgICAgICAgdHlwZSA9IGNfYnVpbGRfcXVhbGlmaWVkX3R5cGUgKHR5cGUs
IHR5cGVfcXVhbHMpOwogICAgICAgICAgICB9CiAgICAgICAgICB0eXBlX3F1YWxzID0gMHgwOwoK
ICAgICAgICAgIHR5cGUgPSBidWlsZF9mdW5jdGlvbl90eXBlICh0eXBlLCBhcmdfdHlwZXMpOwog
ICAgICAgICAgZGVjbGFyYXRvciA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0g
ZGVjbGFyYXRvcjsgY2hhciBfX2MgPSB0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVf
Y29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldOyBpZiAoX19jICE9ICdyJyAmJiBfX2MgIT0gJ3Mn
ICYmIF9fYyAhPSAnPCcgJiYgX19jICE9ICcxJyAmJiBfX2MgIT0gJzInICYmIF9fYyAhPSAnZScp
IHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkKF9fdCwgJ2UnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wu
YyIsIDQ2MjUsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmV4cC5vcGVyYW5kc1swXSk7CgoKCgoK
ICAgICAgICAgIHsKICAgICAgICAgICAgcmVnaXN0ZXIgdHJlZSBsaW5rOwoKICAgICAgICAgICAg
Zm9yIChsaW5rID0gbGFzdF9mdW5jdGlvbl9wYXJtX3RhZ3M7CiAgICAgICAgICAgICAgICAgbGlu
azsKICAgICAgICAgICAgICAgICBsaW5rID0gKChsaW5rKS0+Y29tbW9uLmNoYWluKSkKICAgICAg
ICAgICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IChfX2V4dGVuc2lvbl9f
ICh7IGNvbnN0IHRyZWUgX190ID0gbGluazsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5j
b21tb24uY29kZSkgIT0gKFRSRUVfTElTVCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIFRSRUVf
TElTVCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA0NjM3LCBfX0ZVTkNUSU9OX18pOyBfX3Q7
IH0pLT5saXN0LnZhbHVlKTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9j
b2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFp
bGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA0NjM3LCBfX0ZVTkNUSU9O
X18pOyBfX3Q7IH0pLT50eXBlLmNvbnRleHQpID0gdHlwZTsKICAgICAgICAgIH0KICAgICAgICB9
CiAgICAgIGVsc2UgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChkZWNsYXJhdG9yKS0+Y29tbW9uLmNv
ZGUpID09IElORElSRUNUX1JFRikKICAgICAgICB7CgoKCiAgICAgICAgICBpZiAocGVkYW50aWMg
JiYgKChlbnVtIHRyZWVfY29kZSkgKHR5cGUpLT5jb21tb24uY29kZSkgPT0gRlVOQ1RJT05fVFlQ
RQogICAgICAgICAgICAgICYmIHR5cGVfcXVhbHMpCiAgICAgICAgICAgIHBlZHdhcm4gKCJJU08g
QyBmb3JiaWRzIHF1YWxpZmllZCBmdW5jdGlvbiB0eXBlcyIpOwogICAgICAgICAgaWYgKHR5cGVf
cXVhbHMpCiAgICAgICAgICAgIHR5cGUgPSBjX2J1aWxkX3F1YWxpZmllZF90eXBlICh0eXBlLCB0
eXBlX3F1YWxzKTsKICAgICAgICAgIHR5cGVfcXVhbHMgPSAweDA7CiAgICAgICAgICBzaXplX3Zh
cmllcyA9IDA7CgogICAgICAgICAgdHlwZSA9IGJ1aWxkX3BvaW50ZXJfdHlwZSAodHlwZSk7CgoK
CgogICAgICAgICAgaWYgKCgoZGVjbGFyYXRvciktPmNvbW1vbi50eXBlKSkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIHJlZ2lzdGVyIHRyZWUgdHlwZW1vZGxpc3Q7CiAgICAgICAgICAgICAg
aW50IGVycmVkID0gMDsKCiAgICAgICAgICAgICAgY29uc3RwID0gMDsKICAgICAgICAgICAgICB2
b2xhdGlsZXAgPSAwOwogICAgICAgICAgICAgIHJlc3RyaWN0cCA9IDA7CiAgICAgICAgICAgICAg
Zm9yICh0eXBlbW9kbGlzdCA9ICgoZGVjbGFyYXRvciktPmNvbW1vbi50eXBlKTsgdHlwZW1vZGxp
c3Q7CiAgICAgICAgICAgICAgICAgICB0eXBlbW9kbGlzdCA9ICgodHlwZW1vZGxpc3QpLT5jb21t
b24uY2hhaW4pKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICB0cmVlIHF1YWxp
ZmllciA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gdHlwZW1vZGxpc3Q7IGlm
ICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChUUkVFX0xJU1QpKSB0
cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBUUkVFX0xJU1QsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5j
IiwgNDY2OSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+bGlzdC52YWx1ZSk7CgogICAgICAgICAg
ICAgICAgICBpZiAoKChxdWFsaWZpZXIpLT5jb21tb24ubGFuZ19mbGFnXzApKQogICAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGlmICgoKChzdHJ1Y3QgbGFuZ19pZGVu
dGlmaWVyICopIChxdWFsaWZpZXIpKS0+cmlkX2NvZGUpID09IFJJRF9DT05TVCkKICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3RwKys7CiAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgo
KChzdHJ1Y3QgbGFuZ19pZGVudGlmaWVyICopIChxdWFsaWZpZXIpKS0+cmlkX2NvZGUpID09IFJJ
RF9WT0xBVElMRSkKICAgICAgICAgICAgICAgICAgICAgICAgdm9sYXRpbGVwKys7CiAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmICgoKChzdHJ1Y3QgbGFuZ19pZGVudGlmaWVyICopIChxdWFs
aWZpZXIpKS0+cmlkX2NvZGUpID09IFJJRF9SRVNUUklDVCkKICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdHJpY3RwKys7CiAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgICAgIGVycmVkKys7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgZXJyZWQrKzsKICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgaWYgKGVycmVkKQogICAgICAgICAgICAgICAgZXJyb3IgKCJpbnZhbGlkIHR5
cGUgbW9kaWZpZXIgd2l0aGluIHBvaW50ZXIgZGVjbGFyYXRvciIpOwogICAgICAgICAgICAgIGlm
IChjb25zdHAgPiAxICYmICEgZmxhZ19pc29jOTkpCiAgICAgICAgICAgICAgICBwZWR3YXJuICgi
ZHVwbGljYXRlIGBjb25zdCciKTsKICAgICAgICAgICAgICBpZiAodm9sYXRpbGVwID4gMSAmJiAh
IGZsYWdfaXNvYzk5KQogICAgICAgICAgICAgICAgcGVkd2FybiAoImR1cGxpY2F0ZSBgdm9sYXRp
bGUnIik7CiAgICAgICAgICAgICAgaWYgKHJlc3RyaWN0cCA+IDEgJiYgISBmbGFnX2lzb2M5OSkK
ICAgICAgICAgICAgICAgIHBlZHdhcm4gKCJkdXBsaWNhdGUgYHJlc3RyaWN0JyIpOwoKICAgICAg
ICAgICAgICB0eXBlX3F1YWxzID0gKChjb25zdHAgPyAweDEgOiAwKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAocmVzdHJpY3RwID8gMHg0IDogMCkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgKHZvbGF0aWxlcCA/IDB4MiA6IDApKTsKICAgICAgICAgICAgfQoKICAgICAgICAg
IGRlY2xhcmF0b3IgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGRlY2xhcmF0
b3I7IGNoYXIgX19jID0gdHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChf
X3QpLT5jb21tb24uY29kZSkpXTsgaWYgKF9fYyAhPSAncicgJiYgX19jICE9ICdzJyAmJiBfX2Mg
IT0gJzwnICYmIF9fYyAhPSAnMScgJiYgX19jICE9ICcyJyAmJiBfX2MgIT0gJ2UnKSB0cmVlX2Ns
YXNzX2NoZWNrX2ZhaWxlZChfX3QsICdlJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA0NzAw
LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5leHAub3BlcmFuZHNbMF0pOwogICAgICAgIH0KICAg
ICAgZWxzZQogICAgICAgIGZhbmN5X2Fib3J0ICgiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDQ3
MDMsIF9fRlVOQ1RJT05fXyk7CgogICAgfQoKCgoKCiAgaWYgKCgoZW51bSB0cmVlX2NvZGUpICh0
eXBlKS0+Y29tbW9uLmNvZGUpID09IEFSUkFZX1RZUEUKICAgICAgJiYgKChfX2V4dGVuc2lvbl9f
ICh7IGNvbnN0IHRyZWUgX190ID0gdHlwZTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVu
dW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3Nf
Y2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA0NzEyLCBf
X0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLnNpemUpICE9ICh0cmVlKSAoKHZvaWQgKikwKSkK
ICAgICAgJiYgKCgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHR5cGU7IGlmICh0
cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2Rl
KSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9n
Y2MvZ2NjL2MtZGVjbC5jIiwgNDcxMywgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5zaXpl
KSktPmNvbW1vbi5wdWJsaWNfZmxhZykpCiAgICBlcnJvciAoInNpemUgb2YgYXJyYXkgYCVzJyBp
cyB0b28gbGFyZ2UiLCBuYW1lKTsKCgoKICBpZiAoc3BlY2JpdHMgJiAoMSA8PCAoaW50KSBSSURf
VFlQRURFRikpCiAgICB7CiAgICAgIHRyZWUgZGVjbDsKCgogICAgICBpZiAocGVkYW50aWMgJiYg
KChlbnVtIHRyZWVfY29kZSkgKHR5cGUpLT5jb21tb24uY29kZSkgPT0gRlVOQ1RJT05fVFlQRQog
ICAgICAgICAgJiYgdHlwZV9xdWFscykKICAgICAgICBwZWR3YXJuICgiSVNPIEMgZm9yYmlkcyBx
dWFsaWZpZWQgZnVuY3Rpb24gdHlwZXMiKTsKICAgICAgaWYgKHR5cGVfcXVhbHMpCiAgICAgICAg
dHlwZSA9IGNfYnVpbGRfcXVhbGlmaWVkX3R5cGUgKHR5cGUsIHR5cGVfcXVhbHMpOwogICAgICBk
ZWNsID0gYnVpbGRfZGVjbCAoVFlQRV9ERUNMLCBkZWNsYXJhdG9yLCB0eXBlKTsKICAgICAgaWYg
KChzcGVjYml0cyAmICgxIDw8IChpbnQpIFJJRF9TSUdORUQpKQogICAgICAgICAgfHwgKHR5cGVk
ZWZfZGVjbCAmJiAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9ICh0eXBlZGVmX2Rl
Y2wpOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5j
b21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2Qn
LCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDQ3MzAsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSkt
PmRlY2wubGFuZ19mbGFnXzEpKSkKICAgICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVl
IF9fdCA9IChkZWNsKTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2Rl
KSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVk
IChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA0NzMxLCBfX0ZVTkNUSU9OX18p
OyBfX3Q7IH0pLT5kZWNsLmxhbmdfZmxhZ18xKSA9IDE7CiAgICAgIHJldHVybiBkZWNsOwogICAg
fQoKCgoKCgoKICBpZiAodHlwZSAhPSAwICYmIHR5cGVkZWZfdHlwZSAhPSAwCiAgICAgICYmICgo
ZW51bSB0cmVlX2NvZGUpICh0eXBlKS0+Y29tbW9uLmNvZGUpID09IEFSUkFZX1RZUEUgJiYgKF9f
ZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB0eXBlOyBpZiAodHJlZV9jb2RlX3R5cGVb
KGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkg
dHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wu
YyIsIDQ3NDIsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUudmFsdWVzKSA9PSAwCiAgICAg
ICYmIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gdHlwZTsgaWYgKHRyZWVfY29k
ZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0g
KCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2Mv
Yy1kZWNsLmMiLCA0NzQzLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLm1haW5fdmFyaWFu
dCkgPT0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB0eXBlZGVmX3R5cGU7IGlm
ICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5j
b2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8u
Li9nY2MvZ2NjL2MtZGVjbC5jIiwgNDc0MywgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5t
YWluX3ZhcmlhbnQpKQogICAgewogICAgICB0eXBlID0gYnVpbGRfYXJyYXlfdHlwZSAoKCh0eXBl
KS0+Y29tbW9uLnR5cGUpLCAwKTsKICAgICAgaWYgKHNpemVfdmFyaWVzKQogICAgICAgIChfX2V4
dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gdHlwZTsgaWYgKHRyZWVfY29kZV90eXBlWyhp
bnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRy
ZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMi
LCA0NzQ3LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLmxhbmdfZmxhZ18xKSA9IDE7CiAg
ICB9CgoKCgogIGlmIChkZWNsX2NvbnRleHQgPT0gVFlQRU5BTUUpCiAgICB7CgoKICAgICAgaWYg
KHBlZGFudGljICYmICgoZW51bSB0cmVlX2NvZGUpICh0eXBlKS0+Y29tbW9uLmNvZGUpID09IEZV
TkNUSU9OX1RZUEUKICAgICAgICAgICYmIHR5cGVfcXVhbHMpCiAgICAgICAgcGVkd2FybiAoIklT
TyBDIGZvcmJpZHMgY29uc3Qgb3Igdm9sYXRpbGUgZnVuY3Rpb24gdHlwZXMiKTsKICAgICAgaWYg
KHR5cGVfcXVhbHMpCiAgICAgICAgdHlwZSA9IGNfYnVpbGRfcXVhbGlmaWVkX3R5cGUgKHR5cGUs
IHR5cGVfcXVhbHMpOwogICAgICByZXR1cm4gdHlwZTsKICAgIH0KCgoKCgoKCiAgaWYgKCgoKGVu
dW0gdHJlZV9jb2RlKSAodHlwZSktPmNvbW1vbi5jb2RlKSA9PSBWT0lEX1RZUEUpICYmIGRlY2xf
Y29udGV4dCAhPSBQQVJNCiAgICAgICYmICEgKChkZWNsX2NvbnRleHQgIT0gRklFTEQgJiYgKChl
bnVtIHRyZWVfY29kZSkgKHR5cGUpLT5jb21tb24uY29kZSkgIT0gRlVOQ1RJT05fVFlQRSkKICAg
ICAgICAgICAgJiYgKChzcGVjYml0cyAmICgxIDw8IChpbnQpIFJJRF9FWFRFUk4pKQogICAgICAg
ICAgICAgICAgfHwgKGN1cnJlbnRfYmluZGluZ19sZXZlbCA9PSBnbG9iYWxfYmluZGluZ19sZXZl
bAogICAgICAgICAgICAgICAgICAgICYmICEoc3BlY2JpdHMKICAgICAgICAgICAgICAgICAgICAg
ICAgICYgKCgxIDw8IChpbnQpIFJJRF9TVEFUSUMpIHwgKDEgPDwgKGludCkgUklEX1JFR0lTVEVS
KSkpKSkpKQogICAgewogICAgICBlcnJvciAoInZhcmlhYmxlIG9yIGZpZWxkIGAlcycgZGVjbGFy
ZWQgdm9pZCIsIG5hbWUpOwogICAgICB0eXBlID0gaW50ZWdlcl90eXBlc1tpdGtfaW50XTsKICAg
IH0KCgoKCiAgewogICAgcmVnaXN0ZXIgdHJlZSBkZWNsOwoKICAgIGlmIChkZWNsX2NvbnRleHQg
PT0gUEFSTSkKICAgICAgewogICAgICAgIHRyZWUgdHlwZV9hc193cml0dGVuID0gdHlwZTsKICAg
ICAgICB0cmVlIHByb21vdGVkX3R5cGU7CgoKCgogICAgICAgIGlmICgoKGVudW0gdHJlZV9jb2Rl
KSAodHlwZSktPmNvbW1vbi5jb2RlKSA9PSBBUlJBWV9UWVBFKQogICAgICAgICAgewoKICAgICAg
ICAgICAgdHlwZSA9ICgodHlwZSktPmNvbW1vbi50eXBlKTsKICAgICAgICAgICAgaWYgKHR5cGVf
cXVhbHMpCiAgICAgICAgICAgICAgdHlwZSA9IGNfYnVpbGRfcXVhbGlmaWVkX3R5cGUgKHR5cGUs
IHR5cGVfcXVhbHMpOwogICAgICAgICAgICB0eXBlID0gYnVpbGRfcG9pbnRlcl90eXBlICh0eXBl
KTsKICAgICAgICAgICAgdHlwZV9xdWFscyA9IDB4MDsKICAgICAgICAgICAgc2l6ZV92YXJpZXMg
PSAwOwogICAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKCgoZW51bSB0cmVlX2NvZGUpICh0eXBl
KS0+Y29tbW9uLmNvZGUpID09IEZVTkNUSU9OX1RZUEUpCiAgICAgICAgICB7CiAgICAgICAgICAg
IGlmIChwZWRhbnRpYyAmJiB0eXBlX3F1YWxzKQogICAgICAgICAgICAgIHBlZHdhcm4gKCJJU08g
QyBmb3JiaWRzIHF1YWxpZmllZCBmdW5jdGlvbiB0eXBlcyIpOwogICAgICAgICAgICBpZiAodHlw
ZV9xdWFscykKICAgICAgICAgICAgICB0eXBlID0gY19idWlsZF9xdWFsaWZpZWRfdHlwZSAodHlw
ZSwgdHlwZV9xdWFscyk7CiAgICAgICAgICAgIHR5cGUgPSBidWlsZF9wb2ludGVyX3R5cGUgKHR5
cGUpOwogICAgICAgICAgICB0eXBlX3F1YWxzID0gMHgwOwogICAgICAgICAgfQoKICAgICAgICBk
ZWNsID0gYnVpbGRfZGVjbCAoUEFSTV9ERUNMLCBkZWNsYXJhdG9yLCB0eXBlKTsKICAgICAgICBp
ZiAoc2l6ZV92YXJpZXMpCiAgICAgICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9f
dCA9IGRlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9f
dCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190
LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNDgxOCwgX19GVU5DVElPTl9fKTsgX190
OyB9KS0+ZGVjbC5sYW5nX2ZsYWdfMCkgPSAxOwoKCgoKCgogICAgICAgIGlmICh0eXBlID09IGds
b2JhbF90cmVlc1tUSV9FUlJPUl9NQVJLXSkKICAgICAgICAgIHByb21vdGVkX3R5cGUgPSB0eXBl
OwogICAgICAgIGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAgcHJvbW90ZWRfdHlwZSA9IHNp
bXBsZV90eXBlX3Byb21vdGVzX3RvICh0eXBlKTsKICAgICAgICAgICAgaWYgKCEgcHJvbW90ZWRf
dHlwZSkKICAgICAgICAgICAgICBwcm9tb3RlZF90eXBlID0gdHlwZTsKICAgICAgICAgIH0KCiAg
ICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBkZWNsOyBpZiAoKChlbnVt
IHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoUEFSTV9ERUNMKSkgdHJlZV9jaGVj
a19mYWlsZWQgKF9fdCwgUEFSTV9ERUNMLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDQ4MzQs
IF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5pdGlhbCkgPSBwcm9tb3RlZF90eXBlOwog
ICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZGVjbDsgaWYgKCgoZW51
bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKFBBUk1fREVDTCkpIHRyZWVfY2hl
Y2tfZmFpbGVkIChfX3QsIFBBUk1fREVDTCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA0ODM1
LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLnJlc3VsdCkgPSB0eXBlX2FzX3dyaXR0ZW47
CiAgICAgIH0KICAgIGVsc2UgaWYgKGRlY2xfY29udGV4dCA9PSBGSUVMRCkKICAgICAgewoKCiAg
ICAgICAgaWYgKCgoZW51bSB0cmVlX2NvZGUpICh0eXBlKS0+Y29tbW9uLmNvZGUpID09IEZVTkNU
SU9OX1RZUEUpCiAgICAgICAgICB7CiAgICAgICAgICAgIGVycm9yICgiZmllbGQgYCVzJyBkZWNs
YXJlZCBhcyBhIGZ1bmN0aW9uIiwgbmFtZSk7CiAgICAgICAgICAgIHR5cGUgPSBidWlsZF9wb2lu
dGVyX3R5cGUgKHR5cGUpOwogICAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKCgoZW51bSB0cmVl
X2NvZGUpICh0eXBlKS0+Y29tbW9uLmNvZGUpICE9IEVSUk9SX01BUksKICAgICAgICAgICAgICAg
ICAmJiAhKCgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9ICgoZW51bSB0cmVlX2Nv
ZGUpICh0eXBlKS0+Y29tbW9uLmNvZGUpID09IEFSUkFZX1RZUEUgPyAoKHR5cGUpLT5jb21tb24u
dHlwZSkgOiB0eXBlOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUp
IChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQg
KF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDQ4NDcsIF9fRlVOQ1RJT05fXyk7
IF9fdDsgfSktPnR5cGUuc2l6ZSkgIT0gKHRyZWUpICgodm9pZCAqKTApKSkpCiAgICAgICAgICB7
CiAgICAgICAgICAgIGVycm9yICgiZmllbGQgYCVzJyBoYXMgaW5jb21wbGV0ZSB0eXBlIiwgbmFt
ZSk7CiAgICAgICAgICAgIHR5cGUgPSBnbG9iYWxfdHJlZXNbVElfRVJST1JfTUFSS107CiAgICAg
ICAgICB9CgogICAgICAgIGlmICgoKGVudW0gdHJlZV9jb2RlKSAodHlwZSktPmNvbW1vbi5jb2Rl
KSA9PSBBUlJBWV9UWVBFICYmIHR5cGVfcXVhbHMpCiAgICAgICAgICB7CiAgICAgICAgICAgIHR5
cGUgPSBidWlsZF9hcnJheV90eXBlIChjX2J1aWxkX3F1YWxpZmllZF90eXBlICgoKHR5cGUpLT5j
b21tb24udHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlX3F1YWxzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gdHlwZTsgaWYgKHRy
ZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUp
KV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2dj
Yy9nY2MvYy1kZWNsLmMiLCA0ODU3LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLnZhbHVl
cykpOwoKCgoKICAgICAgICAgIH0KICAgICAgICBkZWNsID0gYnVpbGRfZGVjbCAoRklFTERfREVD
TCwgZGVjbGFyYXRvciwgdHlwZSk7CiAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJl
ZSBfX3QgPSBkZWNsOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAh
PSAoRklFTERfREVDTCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIEZJRUxEX0RFQ0wsICIuLi8u
Li9nY2MvZ2NjL2MtZGVjbC5jIiwgNDg2NCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5u
b25fYWRkcmVzc2FibGUpID0gYml0ZmllbGQ7CgogICAgICAgIGlmIChzaXplX3ZhcmllcykKICAg
ICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZGVjbDsgaWYgKHRyZWVf
Y29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0g
IT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9n
Y2MvYy1kZWNsLmMiLCA0ODY3LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmxhbmdfZmxh
Z18wKSA9IDE7CiAgICAgIH0KICAgIGVsc2UgaWYgKCgoZW51bSB0cmVlX2NvZGUpICh0eXBlKS0+
Y29tbW9uLmNvZGUpID09IEZVTkNUSU9OX1RZUEUpCiAgICAgIHsKCgoKCgogICAgICAgIGludCBl
eHRlcm5fcmVmID0gKCEoc3BlY2JpdHMgJiAoMSA8PCAoaW50KSBSSURfQVVUTykpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgY3VycmVudF9iaW5kaW5nX2xldmVsID09IGdsb2JhbF9iaW5k
aW5nX2xldmVsKTsKCiAgICAgICAgaWYgKHNwZWNiaXRzICYgKDEgPDwgKGludCkgUklEX0FVVE8p
CiAgICAgICAgICAgICYmIChwZWRhbnRpYyB8fCBjdXJyZW50X2JpbmRpbmdfbGV2ZWwgPT0gZ2xv
YmFsX2JpbmRpbmdfbGV2ZWwpKQogICAgICAgICAgcGVkd2FybiAoImludmFsaWQgc3RvcmFnZSBj
bGFzcyBmb3IgZnVuY3Rpb24gYCVzJyIsIG5hbWUpOwogICAgICAgIGlmIChzcGVjYml0cyAmICgx
IDw8IChpbnQpIFJJRF9SRUdJU1RFUikpCiAgICAgICAgICBlcnJvciAoImludmFsaWQgc3RvcmFn
ZSBjbGFzcyBmb3IgZnVuY3Rpb24gYCVzJyIsIG5hbWUpOwoKCgogICAgICAgIGlmIChjdXJyZW50
X2JpbmRpbmdfbGV2ZWwgIT0gZ2xvYmFsX2JpbmRpbmdfbGV2ZWwKICAgICAgICAgICAgJiYgKHNw
ZWNiaXRzICYgKCgxIDw8IChpbnQpIFJJRF9TVEFUSUMpIHwgKDEgPDwgKGludCkgUklEX0lOTElO
RSkpKQogICAgICAgICAgICAmJiBwZWRhbnRpYykKICAgICAgICAgIHBlZHdhcm4gKCJpbnZhbGlk
IHN0b3JhZ2UgY2xhc3MgZm9yIGZ1bmN0aW9uIGAlcyciLCBuYW1lKTsKCiAgICAgICAgZGVjbCA9
IGJ1aWxkX2RlY2wgKEZVTkNUSU9OX0RFQ0wsIGRlY2xhcmF0b3IsIHR5cGUpOwogICAgICAgIGRl
Y2wgPSBidWlsZF9kZWNsX2F0dHJpYnV0ZV92YXJpYW50IChkZWNsLCBkZWNsX21hY2hpbmVfYXR0
cik7CgogICAgICAgIGlmIChwZWRhbnRpYyAmJiB0eXBlX3F1YWxzICYmICEgKF9fZXh0ZW5zaW9u
X18gKHsgY29uc3QgdHJlZSBfX3QgPSBkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgo
ZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFz
c19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDQ4OTUs
IF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5fc3lzdGVtX2hlYWRlcl9mbGFnKSkKICAg
ICAgICAgIHBlZHdhcm4gKCJJU08gQyBmb3JiaWRzIHF1YWxpZmllZCBmdW5jdGlvbiB0eXBlcyIp
OwoKCgogICAgICAgIGlmICgodHlwZV9xdWFscyAmIDB4MikKICAgICAgICAgICAgJiYgISgoKGVu
dW0gdHJlZV9jb2RlKSAoKCgoKGRlY2wpLT5jb21tb24udHlwZSkpLT5jb21tb24udHlwZSkpLT5j
b21tb24uY29kZSkgPT0gVk9JRF9UWVBFKSkKICAgICAgICAgIHdhcm5pbmcgKCJgbm9yZXR1cm4n
IGZ1bmN0aW9uIHJldHVybnMgbm9uLXZvaWQgdmFsdWUiKTsKCiAgICAgICAgaWYgKGV4dGVybl9y
ZWYpCiAgICAgICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGRlY2w7IGlm
ICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5j
b2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8u
Li9nY2MvZ2NjL2MtZGVjbC5jIiwgNDkwNSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5l
eHRlcm5hbF9mbGFnKSA9IDE7CgogICAgICAgICgoZGVjbCktPmNvbW1vbi5wdWJsaWNfZmxhZykK
ICAgICAgICAgID0gIShzcGVjYml0cyAmICgoMSA8PCAoaW50KSBSSURfU1RBVElDKSB8ICgxIDw8
IChpbnQpIFJJRF9BVVRPKSkpOwoKCiAgICAgICAgaWYgKGlubGluZXApCiAgICAgICAgICB7CiAg
ICAgICAgICAgIGlmICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGRlY2xhcmF0
b3I7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChJREVOVElG
SUVSX05PREUpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBJREVOVElGSUVSX05PREUsICIuLi8u
Li9nY2MvZ2NjL2MtZGVjbC5jIiwgNDkxMywgX19GVU5DVElPTl9fKTsgX190OyB9KSA9PSBnbG9i
YWxfdHJlZXNbVElfTUFJTl9JREVOVElGSUVSXSkpCiAgICAgICAgICAgICAgd2FybmluZyAoImNh
bm5vdCBpbmxpbmUgZnVuY3Rpb24gYG1haW4nIik7CiAgICAgICAgICAgIGVsc2UKCiAgICAgICAg
ICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBkZWNsOyBpZiAoKChlbnVt
IHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoRlVOQ1RJT05fREVDTCkpIHRyZWVf
Y2hlY2tfZmFpbGVkIChfX3QsIEZVTkNUSU9OX0RFQ0wsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5j
IiwgNDkxNywgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5pbmxpbmVfZmxhZykgPSAxOwoK
ICAgICAgICAgICAgaWYgKHNwZWNiaXRzICYgKDEgPDwgKGludCkgUklEX0VYVEVSTikpCiAgICAg
ICAgICAgICAgY3VycmVudF9leHRlcm5faW5saW5lID0gMTsKICAgICAgICAgIH0KICAgICAgfQog
ICAgZWxzZQogICAgICB7CgoKICAgICAgICBpbnQgZXh0ZXJuX3JlZiA9ICFpbml0aWFsaXplZCAm
JiAoc3BlY2JpdHMgJiAoMSA8PCAoaW50KSBSSURfRVhURVJOKSk7CgoKICAgICAgICBpZiAoKChl
bnVtIHRyZWVfY29kZSkgKHR5cGUpLT5jb21tb24uY29kZSkgPT0gQVJSQVlfVFlQRSAmJiB0eXBl
X3F1YWxzKQogICAgICAgICAgewogICAgICAgICAgICB0eXBlID0gYnVpbGRfYXJyYXlfdHlwZSAo
Y19idWlsZF9xdWFsaWZpZWRfdHlwZSAoKCh0eXBlKS0+Y29tbW9uLnR5cGUpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV9x
dWFscyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19leHRlbnNpb25f
XyAoeyBjb25zdCB0cmVlIF9fdCA9IHR5cGU7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChl
bnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNz
X2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNDkzNCwg
X19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS52YWx1ZXMpKTsKCgoKICAgICAgICAgIH0KCiAg
ICAgICAgZGVjbCA9IGJ1aWxkX2RlY2wgKFZBUl9ERUNMLCBkZWNsYXJhdG9yLCB0eXBlKTsKICAg
ICAgICBpZiAoc2l6ZV92YXJpZXMpCiAgICAgICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0
cmVlIF9fdCA9IGRlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29k
ZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxl
ZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNDk0MiwgX19GVU5DVElPTl9f
KTsgX190OyB9KS0+ZGVjbC5sYW5nX2ZsYWdfMCkgPSAxOwoKICAgICAgICBpZiAoaW5saW5lcCkK
ICAgICAgICAgIHBlZHdhcm5fd2l0aF9kZWNsIChkZWNsLCAidmFyaWFibGUgYCVzJyBkZWNsYXJl
ZCBgaW5saW5lJyIpOwoKICAgICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9
IGRlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCkt
PmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAn
ZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNDk0NywgX19GVU5DVElPTl9fKTsgX190OyB9
KS0+ZGVjbC5leHRlcm5hbF9mbGFnKSA9IGV4dGVybl9yZWY7CgoKCgogICAgICAgIGlmIChjdXJy
ZW50X2JpbmRpbmdfbGV2ZWwgPT0gZ2xvYmFsX2JpbmRpbmdfbGV2ZWwpCiAgICAgICAgICB7CiAg
ICAgICAgICAgICgoZGVjbCktPmNvbW1vbi5wdWJsaWNfZmxhZykKICAgICAgICAgICAgICA9ICEo
c3BlY2JpdHMKICAgICAgICAgICAgICAgICAgJiAoKDEgPDwgKGludCkgUklEX1NUQVRJQykgfCAo
MSA8PCAoaW50KSBSSURfUkVHSVNURVIpKSk7CiAgICAgICAgICAgICgoZGVjbCktPmNvbW1vbi5z
dGF0aWNfZmxhZykgPSAhIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZGVjbDsg
aWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9u
LmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4u
Ly4uL2djYy9nY2MvYy1kZWNsLmMiLCA0OTU3LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNs
LmV4dGVybmFsX2ZsYWcpOwogICAgICAgICAgfQoKICAgICAgICBlbHNlCiAgICAgICAgICB7CiAg
ICAgICAgICAgICgoZGVjbCktPmNvbW1vbi5zdGF0aWNfZmxhZykgPSAoc3BlY2JpdHMgJiAoMSA8
PCAoaW50KSBSSURfU1RBVElDKSkgIT0gMDsKICAgICAgICAgICAgKChkZWNsKS0+Y29tbW9uLnB1
YmxpY19mbGFnKSA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZGVjbDsgaWYg
KHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNv
ZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4u
L2djYy9nY2MvYy1kZWNsLmMiLCA0OTYzLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmV4
dGVybmFsX2ZsYWcpOwogICAgICAgICAgfQogICAgICB9CgoKCgogICAgaWYgKHNwZWNiaXRzICYg
KDEgPDwgKGludCkgUklEX1JFR0lTVEVSKSkKICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3Qg
dHJlZSBfX3QgPSBkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2Nv
ZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWls
ZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDQ5NzEsIF9fRlVOQ1RJT05f
Xyk7IF9fdDsgfSktPmRlY2wucmVnZGVjbF9mbGFnKSA9IDE7CgoKICAgIGNfYXBwbHlfdHlwZV9x
dWFsc190b19kZWNsICh0eXBlX3F1YWxzLCBkZWNsKTsKCgoKCiAgICBpZiAoKCgoKGRlY2wpLT5j
b21tb24udHlwZSkpLT5jb21tb24ubGFuZ19mbGFnXzIpKQogICAgICBtYXJrX2FkZHJlc3NhYmxl
IChkZWNsKTsKCiAgICByZXR1cm4gZGVjbDsKICB9Cn0KIyA1MDA0ICIuLi8uLi9nY2MvZ2NjL2Mt
ZGVjbC5jIgpzdGF0aWMgdHJlZQpncm9rcGFybXMgKHBhcm1zX2luZm8sIGZ1bmNkZWZfZmxhZykK
ICAgICB0cmVlIHBhcm1zX2luZm87CiAgICAgaW50IGZ1bmNkZWZfZmxhZzsKewogIHRyZWUgZmly
c3RfcGFybSA9ICgocGFybXNfaW5mbyktPmNvbW1vbi5jaGFpbik7CgogIGxhc3RfZnVuY3Rpb25f
cGFybXMgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHBhcm1zX2luZm87IGlm
ICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChUUkVFX0xJU1QpKSB0
cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBUUkVFX0xJU1QsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5j
IiwgNTAxMSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+bGlzdC5wdXJwb3NlKTsKICBsYXN0X2Z1
bmN0aW9uX3Bhcm1fdGFncyA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gcGFy
bXNfaW5mbzsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKFRS
RUVfTElTVCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIFRSRUVfTElTVCwgIi4uLy4uL2djYy9n
Y2MvYy1kZWNsLmMiLCA1MDEyLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5saXN0LnZhbHVlKTsK
CiAgaWYgKHdhcm5fc3RyaWN0X3Byb3RvdHlwZXMgJiYgZmlyc3RfcGFybSA9PSAwICYmICFmdW5j
ZGVmX2ZsYWcKICAgICAgJiYgIWluX3N5c3RlbV9oZWFkZXIpCiAgICB3YXJuaW5nICgiZnVuY3Rp
b24gZGVjbGFyYXRpb24gaXNuJ3QgYSBwcm90b3R5cGUiKTsKCiAgaWYgKGZpcnN0X3Bhcm0gIT0g
MAogICAgICAmJiAoKGVudW0gdHJlZV9jb2RlKSAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJl
ZSBfX3QgPSBmaXJzdF9wYXJtOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5j
b2RlKSAhPSAoVFJFRV9MSVNUKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgVFJFRV9MSVNULCAi
Li4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDUwMTksIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmxp
c3QudmFsdWUpKS0+Y29tbW9uLmNvZGUpID09IElERU5USUZJRVJfTk9ERSkKICAgIHsKICAgICAg
aWYgKCEgZnVuY2RlZl9mbGFnKQogICAgICAgIHBlZHdhcm4gKCJwYXJhbWV0ZXIgbmFtZXMgKHdp
dGhvdXQgdHlwZXMpIGluIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIik7CgogICAgICBsYXN0X2Z1bmN0
aW9uX3Bhcm1zID0gZmlyc3RfcGFybTsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgZWxzZQogICAg
ewogICAgICB0cmVlIHBhcm07CiAgICAgIHRyZWUgdHlwZWx0OwojIDUwNDEgIi4uLy4uL2djYy9n
Y2MvYy1kZWNsLmMiCiAgICAgICAgZm9yIChwYXJtID0gbGFzdF9mdW5jdGlvbl9wYXJtcywgdHlw
ZWx0ID0gZmlyc3RfcGFybTsKICAgICAgICAgICAgIHBhcm07CiAgICAgICAgICAgICBwYXJtID0g
KChwYXJtKS0+Y29tbW9uLmNoYWluKSkKCiAgICAgICAgICBpZiAoKChlbnVtIHRyZWVfY29kZSkg
KHBhcm0pLT5jb21tb24uY29kZSkgPT0gUEFSTV9ERUNMKQogICAgICAgICAgICB7CgogICAgICAg
ICAgICAgIHRyZWUgdHlwZSA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gdHlw
ZWx0OyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoVFJFRV9M
SVNUKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgVFJFRV9MSVNULCAiLi4vLi4vZ2NjL2djYy9j
LWRlY2wuYyIsIDUwNDgsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmxpc3QudmFsdWUpOwogICAg
ICAgICAgICAgIGlmICghKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gdHlwZTsg
aWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9u
LmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4u
Ly4uL2djYy9nY2MvYy1kZWNsLmMiLCA1MDQ5LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBl
LnNpemUpICE9ICh0cmVlKSAoKHZvaWQgKikwKSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgIGlmIChmdW5jZGVmX2ZsYWcgJiYgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJl
ZSBfX3QgPSBwYXJtOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUp
IChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQg
KF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDUwNTEsIF9fRlVOQ1RJT05fXyk7
IF9fdDsgfSktPmRlY2wubmFtZSkgIT0gMCkKICAgICAgICAgICAgICAgICAgICBlcnJvciAoInBh
cmFtZXRlciBgJXMnIGhhcyBpbmNvbXBsZXRlIHR5cGUiLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IChfX2V4dGVuc2lvbl9fICh7
IGNvbnN0IHRyZWUgX190ID0gcGFybTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0g
dHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hl
Y2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1MDUzLCBfX0ZV
TkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLm5hbWUpOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9f
dCktPmNvbW1vbi5jb2RlKSAhPSAoSURFTlRJRklFUl9OT0RFKSkgdHJlZV9jaGVja19mYWlsZWQg
KF9fdCwgSURFTlRJRklFUl9OT0RFLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDUwNTMsIF9f
RlVOQ1RJT05fXyk7IF9fdDsgfSktPmlkZW50aWZpZXIucG9pbnRlcikpOwogICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgd2FybmluZyAoInBhcmFtZXRlciBoYXMgaW5j
b21wbGV0ZSB0eXBlIik7CiAgICAgICAgICAgICAgICAgIGlmIChmdW5jZGVmX2ZsYWcpCiAgICAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsg
Y29uc3QgdHJlZSBfX3QgPSB0eXBlbHQ7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29t
bW9uLmNvZGUpICE9IChUUkVFX0xJU1QpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBUUkVFX0xJ
U1QsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTA1OCwgX19GVU5DVElPTl9fKTsgX190OyB9
KS0+bGlzdC52YWx1ZSkgPSBnbG9iYWxfdHJlZXNbVElfRVJST1JfTUFSS107CiAgICAgICAgICAg
ICAgICAgICAgICAoKHBhcm0pLT5jb21tb24udHlwZSkgPSBnbG9iYWxfdHJlZXNbVElfRVJST1Jf
TUFSS107CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQojIDUwODMgIi4u
Ly4uL2djYy9nY2MvYy1kZWNsLmMiCiAgICAgICAgICAgICAgdHlwZWx0ID0gKCh0eXBlbHQpLT5j
b21tb24uY2hhaW4pOwogICAgICAgICAgICB9CgogICAgICByZXR1cm4gZmlyc3RfcGFybTsKICAg
IH0KfQojIDUwOTkgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiCnRyZWUKZ2V0X3Bhcm1faW5mbyAo
dm9pZF9hdF9lbmQpCiAgICAgaW50IHZvaWRfYXRfZW5kOwp7CiAgcmVnaXN0ZXIgdHJlZSBkZWNs
LCB0OwogIHJlZ2lzdGVyIHRyZWUgdHlwZXMgPSAwOwogIGludCBlcnJlZCA9IDA7CiAgdHJlZSB0
YWdzID0gZ2V0dGFncyAoKTsKICB0cmVlIHBhcm1zID0gZ2V0ZGVjbHMgKCk7CiAgdHJlZSBuZXdf
cGFybXMgPSAwOwogIHRyZWUgb3JkZXIgPSBjdXJyZW50X2JpbmRpbmdfbGV2ZWwtPnBhcm1fb3Jk
ZXI7CgoKCgoKCiAgaWYgKHZvaWRfYXRfZW5kICYmIHBhcm1zICE9IDAKICAgICAgJiYgKChwYXJt
cyktPmNvbW1vbi5jaGFpbikgPT0gMAogICAgICAmJiAoKChlbnVtIHRyZWVfY29kZSkgKCgocGFy
bXMpLT5jb21tb24udHlwZSkpLT5jb21tb24uY29kZSkgPT0gVk9JRF9UWVBFKQogICAgICAmJiAh
ICgocGFybXMpLT5jb21tb24udm9sYXRpbGVfZmxhZykKICAgICAgJiYgISAoKHBhcm1zKS0+Y29t
bW9uLnJlYWRvbmx5X2ZsYWcpCiAgICAgICYmICEgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJl
ZSBfX3QgPSBwYXJtczsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2Rl
KSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVk
IChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1MTIxLCBfX0ZVTkNUSU9OX18p
OyBfX3Q7IH0pLT5kZWNsLnJlZ2RlY2xfZmxhZykKICAgICAgJiYgKF9fZXh0ZW5zaW9uX18gKHsg
Y29uc3QgdHJlZSBfX3QgPSBwYXJtczsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0g
dHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hl
Y2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1MTIyLCBfX0ZV
TkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLm5hbWUpID09IDApCiAgICB7CiAgICAgIHBhcm1zID0g
KHRyZWUpICgodm9pZCAqKTApOwogICAgICBzdG9yZWRlY2xzICgodHJlZSkgKCh2b2lkICopMCkp
OwogICAgICByZXR1cm4gdHJlZV9jb25zICgodHJlZSkgKCh2b2lkICopMCksICh0cmVlKSAoKHZv
aWQgKikwKSwKICAgICAgICAgICAgICAgICAgICAgICAgdHJlZV9jb25zICgodHJlZSkgKCh2b2lk
ICopMCksIGdsb2JhbF90cmVlc1tUSV9WT0lEX1RZUEVdLCAodHJlZSkgKCh2b2lkICopMCkpKTsK
ICAgIH0KCgoKICBmb3IgKGRlY2wgPSBwYXJtczsgZGVjbDspCiAgICB7CiAgICAgIHRyZWUgbmV4
dCA9ICgoZGVjbCktPmNvbW1vbi5jaGFpbik7CgogICAgICBpZiAoKChlbnVtIHRyZWVfY29kZSkg
KGRlY2wpLT5jb21tb24uY29kZSkgIT0gUEFSTV9ERUNMKQogICAgICAgIHsKICAgICAgICAgICgo
ZGVjbCktPmNvbW1vbi5jaGFpbikgPSBuZXdfcGFybXM7CiAgICAgICAgICBuZXdfcGFybXMgPSBk
ZWNsOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoKChkZWNsKS0+Y29tbW9uLmFzbV93cml0dGVu
X2ZsYWcpKQogICAgICAgIHsKICAgICAgICAgIGVycm9yX3dpdGhfZGVjbCAoZGVjbCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlciBgJXMnIGhhcyBqdXN0IGEgZm9yd2FyZCBk
ZWNsYXJhdGlvbiIpOwogICAgICAgICAgKChkZWNsKS0+Y29tbW9uLmNoYWluKSA9IG5ld19wYXJt
czsKICAgICAgICAgIG5ld19wYXJtcyA9IGRlY2w7CiAgICAgICAgfQogICAgICBkZWNsID0gbmV4
dDsKICAgIH0KCgogIGZvciAodCA9IG9yZGVyOyB0OyB0ID0gKCh0KS0+Y29tbW9uLmNoYWluKSkK
ICAgIHsKICAgICAgaWYgKCgodCktPmNvbW1vbi5jaGFpbikpCiAgICAgICAgKCgoX19leHRlbnNp
b25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHQ7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+
Y29tbW9uLmNvZGUpICE9IChUUkVFX0xJU1QpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBUUkVF
X0xJU1QsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTE1NSwgX19GVU5DVElPTl9fKTsgX190
OyB9KS0+bGlzdC52YWx1ZSkpLT5jb21tb24uY2hhaW4pID0gKF9fZXh0ZW5zaW9uX18gKHsgY29u
c3QgdHJlZSBfX3QgPSAoKHQpLT5jb21tb24uY2hhaW4pOyBpZiAoKChlbnVtIHRyZWVfY29kZSkg
KF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoVFJFRV9MSVNUKSkgdHJlZV9jaGVja19mYWlsZWQgKF9f
dCwgVFJFRV9MSVNULCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDUxNTUsIF9fRlVOQ1RJT05f
Xyk7IF9fdDsgfSktPmxpc3QudmFsdWUpOwogICAgICBlbHNlCiAgICAgICAgKCgoX19leHRlbnNp
b25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHQ7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+
Y29tbW9uLmNvZGUpICE9IChUUkVFX0xJU1QpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBUUkVF
X0xJU1QsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTE1NywgX19GVU5DVElPTl9fKTsgX190
OyB9KS0+bGlzdC52YWx1ZSkpLT5jb21tb24uY2hhaW4pID0gMDsKICAgIH0KCiAgbmV3X3Bhcm1z
ID0gY2hhaW5vbiAob3JkZXIgPyBucmV2ZXJzZSAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJl
ZSBfX3QgPSBvcmRlcjsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkg
IT0gKFRSRUVfTElTVCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIFRSRUVfTElTVCwgIi4uLy4u
L2djYy9nY2MvYy1kZWNsLmMiLCA1MTYwLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5saXN0LnZh
bHVlKSkgOiAwLAogICAgICAgICAgICAgICAgICAgICAgIG5ld19wYXJtcyk7CgoKCiAgc3RvcmVk
ZWNscyAobmV3X3Bhcm1zKTsKCiAgZm9yIChkZWNsID0gbmV3X3Bhcm1zOyBkZWNsOyBkZWNsID0g
KChkZWNsKS0+Y29tbW9uLmNoYWluKSkKCgogICAgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChkZWNs
KS0+Y29tbW9uLmNvZGUpID09IFBBUk1fREVDTCkKICAgICAgewoKCiAgICAgICAgdHJlZSB0eXBl
ID0gKChkZWNsKS0+Y29tbW9uLnR5cGUpOwogICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0
IHRyZWUgX190ID0gZGVjbDsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29k
ZSkgIT0gKFBBUk1fREVDTCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIFBBUk1fREVDTCwgIi4u
Ly4uL2djYy9nY2MvYy1kZWNsLmMiLCA1MTc1LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNs
LmluaXRpYWwpID0gdHlwZTsKICAgICAgICBpZiAoMQogICAgICAgICAgICAmJiAoKChlbnVtIHRy
ZWVfY29kZSkgKHR5cGUpLT5jb21tb24uY29kZSkgPT0gSU5URUdFUl9UWVBFCiAgICAgICAgICAg
ICAgICB8fCAoKGVudW0gdHJlZV9jb2RlKSAodHlwZSktPmNvbW1vbi5jb2RlKSA9PSBFTlVNRVJB
TF9UWVBFKQogICAgICAgICAgICAmJiAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9
IHR5cGU7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCkt
PmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAn
dCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTE3OSwgX19GVU5DVElPTl9fKTsgX190OyB9
KS0+dHlwZS5wcmVjaXNpb24pIDwgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBp
bnRlZ2VyX3R5cGVzW2l0a19pbnRdOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0
cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVj
a19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDUxNzksIF9fRlVO
Q1RJT05fXyk7IF9fdDsgfSktPnR5cGUucHJlY2lzaW9uKSkKICAgICAgICAgIChfX2V4dGVuc2lv
bl9fICh7IGNvbnN0IHRyZWUgX190ID0gZGVjbDsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3Qp
LT5jb21tb24uY29kZSkgIT0gKFBBUk1fREVDTCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIFBB
Uk1fREVDTCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1MTgwLCBfX0ZVTkNUSU9OX18pOyBf
X3Q7IH0pLT5kZWNsLmluaXRpYWwpID0gaW50ZWdlcl90eXBlc1tpdGtfaW50XTsKCiAgICAgICAg
dHlwZXMgPSB0cmVlX2NvbnMgKCh0cmVlKSAoKHZvaWQgKikwKSwgKChkZWNsKS0+Y29tbW9uLnR5
cGUpLCB0eXBlcyk7CiAgICAgICAgaWYgKCgoKGVudW0gdHJlZV9jb2RlKSAoKF9fZXh0ZW5zaW9u
X18gKHsgY29uc3QgdHJlZSBfX3QgPSB0eXBlczsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3Qp
LT5jb21tb24uY29kZSkgIT0gKFRSRUVfTElTVCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIFRS
RUVfTElTVCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1MTgzLCBfX0ZVTkNUSU9OX18pOyBf
X3Q7IH0pLT5saXN0LnZhbHVlKSktPmNvbW1vbi5jb2RlKSA9PSBWT0lEX1RZUEUpICYmICEgZXJy
ZWQKICAgICAgICAgICAgJiYgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBkZWNs
OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21t
b24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAi
Li4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDUxODQsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRl
Y2wubmFtZSkgPT0gMCkKICAgICAgICAgIHsKICAgICAgICAgICAgZXJyb3IgKCJgdm9pZCcgaW4g
cGFyYW1ldGVyIGxpc3QgbXVzdCBiZSB0aGUgZW50aXJlIGxpc3QiKTsKICAgICAgICAgICAgZXJy
ZWQgPSAxOwogICAgICAgICAgfQogICAgICB9CgogIGlmICh2b2lkX2F0X2VuZCkKICAgIHJldHVy
biB0cmVlX2NvbnMgKG5ld19wYXJtcywgdGFncywKICAgICAgICAgICAgICAgICAgICAgIG5yZXZl
cnNlICh0cmVlX2NvbnMgKCh0cmVlKSAoKHZvaWQgKikwKSwgZ2xvYmFsX3RyZWVzW1RJX1ZPSURf
VFlQRV0sIHR5cGVzKSkpOwoKICByZXR1cm4gdHJlZV9jb25zIChuZXdfcGFybXMsIHRhZ3MsIG5y
ZXZlcnNlICh0eXBlcykpOwp9CgoKCgp2b2lkCnBhcm1saXN0X3RhZ3Nfd2FybmluZyAoKQp7CiAg
dHJlZSBlbHQ7CiAgc3RhdGljIGludCBhbHJlYWR5OwoKICBmb3IgKGVsdCA9IGN1cnJlbnRfYmlu
ZGluZ19sZXZlbC0+dGFnczsgZWx0OyBlbHQgPSAoKGVsdCktPmNvbW1vbi5jaGFpbikpCiAgICB7
CiAgICAgIGVudW0gdHJlZV9jb2RlIGNvZGUgPSAoKGVudW0gdHJlZV9jb2RlKSAoKF9fZXh0ZW5z
aW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBlbHQ7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190
KS0+Y29tbW9uLmNvZGUpICE9IChUUkVFX0xJU1QpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBU
UkVFX0xJU1QsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTIwOSwgX19GVU5DVElPTl9fKTsg
X190OyB9KS0+bGlzdC52YWx1ZSkpLT5jb21tb24uY29kZSk7CgoKICAgICAgaWYgKGNvZGUgPT0g
VU5JT05fVFlQRSAmJiAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGVsdDsgaWYg
KCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKFRSRUVfTElTVCkpIHRy
ZWVfY2hlY2tfZmFpbGVkIChfX3QsIFRSRUVfTElTVCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMi
LCA1MjEyLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5saXN0LnB1cnBvc2UpID09IDAgJiYgIXBl
ZGFudGljKQogICAgICAgIGNvbnRpbnVlOwogICAgICBpZiAoKF9fZXh0ZW5zaW9uX18gKHsgY29u
c3QgdHJlZSBfX3QgPSBlbHQ7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNv
ZGUpICE9IChUUkVFX0xJU1QpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBUUkVFX0xJU1QsICIu
Li8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTIxNCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+bGlz
dC5wdXJwb3NlKSAhPSAwKQogICAgICAgIHdhcm5pbmcgKCJgJXMgJXMnIGRlY2xhcmVkIGluc2lk
ZSBwYXJhbWV0ZXIgbGlzdCIsCiAgICAgICAgICAgICAgICAgKGNvZGUgPT0gUkVDT1JEX1RZUEUg
PyAic3RydWN0IgogICAgICAgICAgICAgICAgICA6IGNvZGUgPT0gVU5JT05fVFlQRSA/ICJ1bmlv
biIKICAgICAgICAgICAgICAgICAgOiAiZW51bSIpLAogICAgICAgICAgICAgICAgIChfX2V4dGVu
c2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBf
X3QgPSBlbHQ7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChU
UkVFX0xJU1QpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBUUkVFX0xJU1QsICIuLi8uLi9nY2Mv
Z2NjL2MtZGVjbC5jIiwgNTIxOSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+bGlzdC5wdXJwb3Nl
KTsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKElERU5USUZJ
RVJfTk9ERSkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIElERU5USUZJRVJfTk9ERSwgIi4uLy4u
L2djYy9nY2MvYy1kZWNsLmMiLCA1MjE5LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5pZGVudGlm
aWVyLnBvaW50ZXIpKTsKICAgICAgZWxzZQogICAgICAgIHsKCiAgICAgICAgICBpZiAoY29kZSA9
PSBSRUNPUkRfVFlQRSkKICAgICAgICAgICAgd2FybmluZyAoImFub255bW91cyBzdHJ1Y3QgZGVj
bGFyZWQgaW5zaWRlIHBhcmFtZXRlciBsaXN0Iik7CiAgICAgICAgICBlbHNlIGlmIChjb2RlID09
IFVOSU9OX1RZUEUpCiAgICAgICAgICAgIHdhcm5pbmcgKCJhbm9ueW1vdXMgdW5pb24gZGVjbGFy
ZWQgaW5zaWRlIHBhcmFtZXRlciBsaXN0Iik7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHdh
cm5pbmcgKCJhbm9ueW1vdXMgZW51bSBkZWNsYXJlZCBpbnNpZGUgcGFyYW1ldGVyIGxpc3QiKTsK
ICAgICAgICB9CiAgICAgIGlmICghIGFscmVhZHkpCiAgICAgICAgewogICAgICAgICAgd2Fybmlu
ZyAoIml0cyBzY29wZSBpcyBvbmx5IHRoaXMgZGVmaW5pdGlvbiBvciBkZWNsYXJhdGlvbiwgd2hp
Y2ggaXMgcHJvYmFibHkgbm90IHdoYXQgeW91IHdhbnQuIik7CiAgICAgICAgICBhbHJlYWR5ID0g
MTsKICAgICAgICB9CiAgICB9Cn0KCgoKCnRyZWUKeHJlZl90YWcgKGNvZGUsIG5hbWUpCiAgICAg
ZW51bSB0cmVlX2NvZGUgY29kZTsKICAgICB0cmVlIG5hbWU7CnsKCgoKICByZWdpc3RlciB0cmVl
IHJlZiA9IGxvb2t1cF90YWcgKGNvZGUsIG5hbWUsIGN1cnJlbnRfYmluZGluZ19sZXZlbCwgMCk7
CgoKCgogIGlmIChyZWYpCiAgICByZXR1cm4gcmVmOwoKCgoKCgogIHJlZiA9IG1ha2Vfbm9kZSAo
Y29kZSk7CiAgaWYgKGNvZGUgPT0gRU5VTUVSQUxfVFlQRSkKICAgIHsKCiAgICAgIGlmIChwZWRh
bnRpYykKICAgICAgICBwZWR3YXJuICgiSVNPIEMgZm9yYmlkcyBmb3J3YXJkIHJlZmVyZW5jZXMg
dG8gYGVudW0nIHR5cGVzIik7CgoKICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBf
X3QgPSByZWY7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9f
dCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190
LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTI3MCwgX19GVU5DVElPTl9fKTsgX190
OyB9KS0+dHlwZS5tb2RlKSA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gaW50
ZWdlcl90eXBlc1tpdGtfdW5zaWduZWRfaW50XTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgo
KGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xh
c3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1Mjcw
LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLm1vZGUpOwogICAgICAoX19leHRlbnNpb25f
XyAoeyBjb25zdCB0cmVlIF9fdCA9IHJlZjsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVu
dW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3Nf
Y2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1MjcxLCBf
X0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLmFsaWduKSA9IChfX2V4dGVuc2lvbl9fICh7IGNv
bnN0IHRyZWUgX190ID0gaW50ZWdlcl90eXBlc1tpdGtfdW5zaWduZWRfaW50XTsgaWYgKHRyZWVf
Y29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0g
IT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9n
Y2MvYy1kZWNsLmMiLCA1MjcxLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLmFsaWduKTsK
ICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSByZWY7IGlmICh0cmVlX2Nv
ZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9
ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2Nj
L2MtZGVjbC5jIiwgNTI3MiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS51c2VyX2FsaWdu
KSA9IDA7CiAgICAgICgocmVmKS0+Y29tbW9uLnVuc2lnbmVkX2ZsYWcpID0gMTsKICAgICAgKF9f
ZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSByZWY7IGlmICh0cmVlX2NvZGVfdHlwZVso
aW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0
cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5j
IiwgNTI3NCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5wcmVjaXNpb24pID0gKF9fZXh0
ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBpbnRlZ2VyX3R5cGVzW2l0a191bnNpZ25lZF9p
bnRdOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5j
b21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3Qn
LCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDUyNzQsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSkt
PnR5cGUucHJlY2lzaW9uKTsKICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3Qg
PSByZWY7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCkt
PmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAn
dCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTI3NSwgX19GVU5DVElPTl9fKTsgX190OyB9
KS0+dHlwZS5taW52YWwpID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBpbnRl
Z2VyX3R5cGVzW2l0a191bnNpZ25lZF9pbnRdOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgo
ZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFz
c19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDUyNzUs
IF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUubWludmFsKTsKICAgICAgKF9fZXh0ZW5zaW9u
X18gKHsgY29uc3QgdHJlZSBfX3QgPSByZWY7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChl
bnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNz
X2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTI3Niwg
X19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5tYXh2YWwpID0gKF9fZXh0ZW5zaW9uX18gKHsg
Y29uc3QgdHJlZSBfX3QgPSBpbnRlZ2VyX3R5cGVzW2l0a191bnNpZ25lZF9pbnRdOyBpZiAodHJl
ZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkp
XSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2Nj
L2djYy9jLWRlY2wuYyIsIDUyNzYsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUubWF4dmFs
KTsKICAgIH0KCiAgcHVzaHRhZyAobmFtZSwgcmVmKTsKCiAgcmV0dXJuIHJlZjsKfQoKCgoKCnRy
ZWUKc3RhcnRfc3RydWN0IChjb2RlLCBuYW1lKQogICAgIGVudW0gdHJlZV9jb2RlIGNvZGU7CiAg
ICAgdHJlZSBuYW1lOwp7CgoKCiAgcmVnaXN0ZXIgdHJlZSByZWYgPSAwOwoKICBpZiAobmFtZSAh
PSAwKQogICAgcmVmID0gbG9va3VwX3RhZyAoY29kZSwgbmFtZSwgY3VycmVudF9iaW5kaW5nX2xl
dmVsLCAxKTsKICBpZiAocmVmICYmICgoZW51bSB0cmVlX2NvZGUpIChyZWYpLT5jb21tb24uY29k
ZSkgPT0gY29kZSkKICAgIHsKICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3Qg
PSByZWY7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCkt
PmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAn
dCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTMwMiwgX19GVU5DVElPTl9fKTsgX190OyB9
KS0+dHlwZS5sYW5nX2ZsYWdfMCkgPSAxOwogICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0
cmVlIF9fdCA9IHJlZjsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2Rl
KSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVk
IChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1MzAzLCBfX0ZVTkNUSU9OX18p
OyBfX3Q7IH0pLT50eXBlLnBhY2tlZF9mbGFnKSA9IGZsYWdfcGFja19zdHJ1Y3Q7CiAgICAgIGlm
ICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHJlZjsgaWYgKHRyZWVfY29kZV90
eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0
JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1k
ZWNsLmMiLCA1MzA0LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLnZhbHVlcykpCiAgICAg
ICAgZXJyb3IgKCJyZWRlZmluaXRpb24gb2YgYCVzICVzJyIsCiAgICAgICAgICAgICAgIGNvZGUg
PT0gVU5JT05fVFlQRSA/ICJ1bmlvbiIgOiAic3RydWN0IiwKICAgICAgICAgICAgICAgKF9fZXh0
ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBuYW1lOyBpZiAoKChlbnVtIHRyZWVfY29kZSkg
KF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoSURFTlRJRklFUl9OT0RFKSkgdHJlZV9jaGVja19mYWls
ZWQgKF9fdCwgSURFTlRJRklFUl9OT0RFLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDUzMDcs
IF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmlkZW50aWZpZXIucG9pbnRlcikpOwoKICAgICAgcmV0
dXJuIHJlZjsKICAgIH0KCgoKICByZWYgPSBtYWtlX25vZGUgKGNvZGUpOwogIHB1c2h0YWcgKG5h
bWUsIHJlZik7CiAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSByZWY7IGlmICh0
cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2Rl
KSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9n
Y2MvZ2NjL2MtZGVjbC5jIiwgNTMxNiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5sYW5n
X2ZsYWdfMCkgPSAxOwogIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gcmVmOyBp
ZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24u
Y29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4v
Li4vZ2NjL2djYy9jLWRlY2wuYyIsIDUzMTcsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUu
cGFja2VkX2ZsYWcpID0gZmxhZ19wYWNrX3N0cnVjdDsKICByZXR1cm4gcmVmOwp9CiMgNTMyOSAi
Li4vLi4vZ2NjL2djYy9jLWRlY2wuYyIKdHJlZQpncm9rZmllbGQgKGZpbGVuYW1lLCBsaW5lLCBk
ZWNsYXJhdG9yLCBkZWNsc3BlY3MsIHdpZHRoKQogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lIF9f
YXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7CiAgICAgaW50IGxpbmUgX19hdHRyaWJ1dGVfXyAo
KF9fdW51c2VkX18pKTsKICAgICB0cmVlIGRlY2xhcmF0b3IsIGRlY2xzcGVjcywgd2lkdGg7CnsK
ICB0cmVlIHZhbHVlOwoKICB2YWx1ZSA9IGdyb2tkZWNsYXJhdG9yIChkZWNsYXJhdG9yLCBkZWNs
c3BlY3MsIHdpZHRoID8gQklURklFTEQgOiBGSUVMRCwgMCk7CgogIGZpbmlzaF9kZWNsICh2YWx1
ZSwgKHRyZWUpICgodm9pZCAqKTApLCAodHJlZSkgKCh2b2lkICopMCkpOwogIChfX2V4dGVuc2lv
bl9fICh7IGNvbnN0IHRyZWUgX190ID0gdmFsdWU7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAo
KChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2Ns
YXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTM0
MCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5pbml0aWFsKSA9IHdpZHRoOwoKICBtYXli
ZV9vYmpjX2NoZWNrX2RlY2wgKHZhbHVlKTsKICByZXR1cm4gdmFsdWU7Cn0KCgoKCgp0cmVlCmZp
bmlzaF9zdHJ1Y3QgKHQsIGZpZWxkbGlzdCwgYXR0cmlidXRlcykKICAgICB0cmVlIHQ7CiAgICAg
dHJlZSBmaWVsZGxpc3Q7CiAgICAgdHJlZSBhdHRyaWJ1dGVzOwp7CiAgcmVnaXN0ZXIgdHJlZSB4
OwogIGludCB0b3BsZXZlbCA9IGdsb2JhbF9iaW5kaW5nX2xldmVsID09IGN1cnJlbnRfYmluZGlu
Z19sZXZlbDsKCgoKCiAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB0OyBpZiAo
dHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29k
ZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4v
Z2NjL2djYy9jLWRlY2wuYyIsIDUzNjIsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUuc2l6
ZSkgPSAwOwoKICBkZWNsX2F0dHJpYnV0ZXMgKHQsIGF0dHJpYnV0ZXMsICh0cmVlKSAoKHZvaWQg
KikwKSk7CgoKICBpZiAoISAoKChlbnVtIHRyZWVfY29kZSkgKHQpLT5jb21tb24uY29kZSkgPT0g
VU5JT05fVFlQRSAmJiAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHQ7IGlmICh0
cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2Rl
KSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9n
Y2MvZ2NjL2MtZGVjbC5jIiwgNTM2NywgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5uYW1l
KSA9PSAwKSAmJiAhcGVkYW50aWMpCgogICAgaWYgKGluX3Bhcm1fbGV2ZWxfcCAoKSkKICAgICAg
ewogICAgICAgIGlmIChwZWRhbnRpYykKICAgICAgICAgIHBlZHdhcm4gKCIlcyBkZWZpbmVkIGlu
c2lkZSBwYXJtcyIsCiAgICAgICAgICAgICAgICAgICAoKGVudW0gdHJlZV9jb2RlKSAodCktPmNv
bW1vbi5jb2RlKSA9PSBVTklPTl9UWVBFID8gKCJ1bmlvbiIpIDogKCJzdHJ1Y3R1cmUiKSk7CiAg
ICAgICAgZWxzZSBpZiAoISBmbGFnX3RyYWRpdGlvbmFsKQogICAgICAgICAgd2FybmluZyAoIiVz
IGRlZmluZWQgaW5zaWRlIHBhcm1zIiwKICAgICAgICAgICAgICAgICAgICgoZW51bSB0cmVlX2Nv
ZGUpICh0KS0+Y29tbW9uLmNvZGUpID09IFVOSU9OX1RZUEUgPyAoInVuaW9uIikgOiAoInN0cnVj
dHVyZSIpKTsKICAgICAgfQoKICBpZiAocGVkYW50aWMpCiAgICB7CiAgICAgIGZvciAoeCA9IGZp
ZWxkbGlzdDsgeDsgeCA9ICgoeCktPmNvbW1vbi5jaGFpbikpCiAgICAgICAgaWYgKChfX2V4dGVu
c2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0geDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgo
KGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xh
c3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1Mzgy
LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLm5hbWUpICE9IDApCiAgICAgICAgICBicmVh
azsKCiAgICAgIGlmICh4ID09IDApCiAgICAgICAgcGVkd2FybiAoIiVzIGhhcyBubyAlcyIsCiAg
ICAgICAgICAgICAgICAgKChlbnVtIHRyZWVfY29kZSkgKHQpLT5jb21tb24uY29kZSkgPT0gVU5J
T05fVFlQRSA/ICgidW5pb24iKSA6ICgic3RydWN0IiksCiAgICAgICAgICAgICAgICAgZmllbGRs
aXN0ID8gKCJuYW1lZCBtZW1iZXJzIikgOiAoIm1lbWJlcnMiKSk7CiAgICB9CgoKCgoKCiAgZm9y
ICh4ID0gZmllbGRsaXN0OyB4OyB4ID0gKCh4KS0+Y29tbW9uLmNoYWluKSkKICAgIHsKICAgICAg
KF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB4OyBpZiAodHJlZV9jb2RlX3R5cGVb
KGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkg
dHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wu
YyIsIDUzOTgsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuY29udGV4dCkgPSB0OwogICAg
ICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHg7IGlmICgoKGVudW0gdHJlZV9j
b2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChGSUVMRF9ERUNMKSkgdHJlZV9jaGVja19mYWls
ZWQgKF9fdCwgRklFTERfREVDTCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1Mzk5LCBfX0ZV
TkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLnJlZ2RlY2xfZmxhZykgfD0gKF9fZXh0ZW5zaW9uX18g
KHsgY29uc3QgdHJlZSBfX3QgPSB0OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0
cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVj
a19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDUzOTksIF9fRlVO
Q1RJT05fXyk7IF9fdDsgfSktPnR5cGUucGFja2VkX2ZsYWcpOwoKCiAgICAgIGlmICgoKHgpLT5j
b21tb24ucmVhZG9ubHlfZmxhZykpCiAgICAgICAgKCh0KS0+Y29tbW9uLmxhbmdfZmxhZ18xKSA9
IDE7CiAgICAgIGVsc2UKICAgICAgICB7CgogICAgICAgICAgdHJlZSB0MSA9ICgoeCktPmNvbW1v
bi50eXBlKTsKICAgICAgICAgIHdoaWxlICgoKGVudW0gdHJlZV9jb2RlKSAodDEpLT5jb21tb24u
Y29kZSkgPT0gQVJSQVlfVFlQRSkKICAgICAgICAgICAgdDEgPSAoKHQxKS0+Y29tbW9uLnR5cGUp
OwogICAgICAgICAgaWYgKCgoKGVudW0gdHJlZV9jb2RlKSAodDEpLT5jb21tb24uY29kZSkgPT0g
UkVDT1JEX1RZUEUgfHwgKChlbnVtIHRyZWVfY29kZSkgKHQxKS0+Y29tbW9uLmNvZGUpID09IFVO
SU9OX1RZUEUpCiAgICAgICAgICAgICAgJiYgKCh0MSktPmNvbW1vbi5sYW5nX2ZsYWdfMSkpCiAg
ICAgICAgICAgICgodCktPmNvbW1vbi5sYW5nX2ZsYWdfMSkgPSAxOwogICAgICAgIH0KCgoKICAg
ICAgaWYgKCgoeCktPmNvbW1vbi52b2xhdGlsZV9mbGFnKSkKICAgICAgICAoKHQpLT5jb21tb24u
bGFuZ19mbGFnXzIpID0gMTsKCgogICAgICBpZiAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJl
ZSBfX3QgPSB4OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChf
X3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9f
dCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU0MjEsIF9fRlVOQ1RJT05fXyk7IF9f
dDsgfSktPmRlY2wubGFuZ19mbGFnXzApKQogICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0
IHRyZWUgX190ID0gdDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2Rl
KSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVk
IChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1NDIyLCBfX0ZVTkNUSU9OX18p
OyBfX3Q7IH0pLT50eXBlLmxhbmdfZmxhZ18xKSA9IDE7CgoKICAgICAgaWYgKCgoeCktPmNvbW1v
bi50eXBlKSA9PSB0KQogICAgICAgIGVycm9yICgibmVzdGVkIHJlZGVmaW5pdGlvbiBvZiBgJXMn
IiwKICAgICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSAoX19l
eHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHQ7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50
KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVl
X2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwg
NTQyNywgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5uYW1lKTsgaWYgKCgoZW51bSB0cmVl
X2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKElERU5USUZJRVJfTk9ERSkpIHRyZWVfY2hl
Y2tfZmFpbGVkIChfX3QsIElERU5USUZJRVJfTk9ERSwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMi
LCA1NDI3LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5pZGVudGlmaWVyLnBvaW50ZXIpKTsKCgog
ICAgICBpZiAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB4OyBpZiAodHJlZV9j
b2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAh
PSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2dj
Yy9jLWRlY2wuYyIsIDU0MzAsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5pdGlhbCkp
CiAgICAgICAgd2hpbGUgKCgoKGVudW0gdHJlZV9jb2RlKSAoKF9fZXh0ZW5zaW9uX18gKHsgY29u
c3QgdHJlZSBfX3QgPSB4OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2Nv
ZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWls
ZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU0MzEsIF9fRlVOQ1RJT05f
Xyk7IF9fdDsgfSktPmRlY2wuaW5pdGlhbCkpLT5jb21tb24uY29kZSkgPT0gTk9QX0VYUFIgfHwg
KChlbnVtIHRyZWVfY29kZSkgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0geDsg
aWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9u
LmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4u
Ly4uL2djYy9nY2MvYy1kZWNsLmMiLCA1NDMxLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNs
LmluaXRpYWwpKS0+Y29tbW9uLmNvZGUpID09IENPTlZFUlRfRVhQUiB8fCAoKGVudW0gdHJlZV9j
b2RlKSAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB4OyBpZiAodHJlZV9jb2Rl
X3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAo
J2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9j
LWRlY2wuYyIsIDU0MzEsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5pdGlhbCkpLT5j
b21tb24uY29kZSkgPT0gTk9OX0xWQUxVRV9FWFBSKSAmJiAoX19leHRlbnNpb25fXyAoeyBjb25z
dCB0cmVlIF9fdCA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0geDsgaWYgKHRy
ZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUp
KV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2dj
Yy9nY2MvYy1kZWNsLmMiLCA1NDMxLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmluaXRp
YWwpOyBjaGFyIF9fYyA9IHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAo
X190KS0+Y29tbW9uLmNvZGUpKV07IGlmIChfX2MgIT0gJ3InICYmIF9fYyAhPSAncycgJiYgX19j
ICE9ICc8JyAmJiBfX2MgIT0gJzEnICYmIF9fYyAhPSAnMicgJiYgX19jICE9ICdlJykgdHJlZV9j
bGFzc19jaGVja19mYWlsZWQoX190LCAnZScsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTQz
MSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZXhwLm9wZXJhbmRzWzBdKSAhPSBnbG9iYWxfdHJl
ZXNbVElfRVJST1JfTUFSS10gJiYgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0g
KCgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHg7IGlmICh0cmVlX2NvZGVfdHlw
ZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcp
KSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVj
bC5jIiwgNTQzMSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5pbml0aWFsKSktPmNvbW1v
bi50eXBlKTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190
KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3Qs
ICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1NDMxLCBfX0ZVTkNUSU9OX18pOyBfX3Q7
IH0pLT50eXBlLm1vZGUpID09IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gKCgo
X19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0
IHRyZWUgX190ID0geDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2Rl
KSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVk
IChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1NDMxLCBfX0ZVTkNUSU9OX18p
OyBfX3Q7IH0pLT5kZWNsLmluaXRpYWwpOyBjaGFyIF9fYyA9IHRyZWVfY29kZV90eXBlWyhpbnQp
ICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV07IGlmIChfX2MgIT0gJ3In
ICYmIF9fYyAhPSAncycgJiYgX19jICE9ICc8JyAmJiBfX2MgIT0gJzEnICYmIF9fYyAhPSAnMicg
JiYgX19jICE9ICdlJykgdHJlZV9jbGFzc19jaGVja19mYWlsZWQoX190LCAnZScsICIuLi8uLi9n
Y2MvZ2NjL2MtZGVjbC5jIiwgNTQzMSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZXhwLm9wZXJh
bmRzWzBdKSktPmNvbW1vbi50eXBlKTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0g
dHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hl
Y2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1NDMxLCBfX0ZV
TkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLm1vZGUpKSkgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0
IHRyZWUgX190ID0geDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2Rl
KSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVk
IChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1NDMxLCBfX0ZVTkNUSU9OX18p
OyBfX3Q7IH0pLT5kZWNsLmluaXRpYWwpKSA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUg
X190ID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB4OyBpZiAodHJlZV9jb2Rl
X3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAo
J2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9j
LWRlY2wuYyIsIDU0MzEsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5pdGlhbCk7IGNo
YXIgX19jID0gdHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5j
b21tb24uY29kZSkpXTsgaWYgKF9fYyAhPSAncicgJiYgX19jICE9ICdzJyAmJiBfX2MgIT0gJzwn
ICYmIF9fYyAhPSAnMScgJiYgX19jICE9ICcyJyAmJiBfX2MgIT0gJ2UnKSB0cmVlX2NsYXNzX2No
ZWNrX2ZhaWxlZChfX3QsICdlJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1NDMxLCBfX0ZV
TkNUSU9OX18pOyBfX3Q7IH0pLT5leHAub3BlcmFuZHNbMF0pOzsKICAgICAgaWYgKChfX2V4dGVu
c2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0geDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgo
KGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xh
c3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1NDMy
LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmluaXRpYWwpKQogICAgICAgIHsKICAgICAg
ICAgIGlmICgoKGVudW0gdHJlZV9jb2RlKSAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBf
X3QgPSB4OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3Qp
LT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwg
J2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU0MzQsIF9fRlVOQ1RJT05fXyk7IF9fdDsg
fSktPmRlY2wuaW5pdGlhbCkpLT5jb21tb24uY29kZSkgPT0gSU5URUdFUl9DU1QpCiAgICAgICAg
ICAgIGNvbnN0YW50X2V4cHJlc3Npb25fd2FybmluZyAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3Qg
dHJlZSBfX3QgPSB4OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUp
IChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQg
KF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU0MzUsIF9fRlVOQ1RJT05fXyk7
IF9fdDsgfSktPmRlY2wuaW5pdGlhbCkpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgZXJyb3Jfd2l0aF9kZWNsICh4LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImJpdC1maWVsZCBgJXMnIHdpZHRoIG5vdCBhbiBpbnRlZ2VyIGNvbnN0YW50Iik7CiAg
ICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB4OyBpZiAodHJl
ZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkp
XSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2Nj
L2djYy9jLWRlY2wuYyIsIDU0NDAsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5pdGlh
bCkgPSAoKHZvaWQgKikwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCgogICAgICBpZiAoKF9f
ZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB4OyBpZiAodHJlZV9jb2RlX3R5cGVbKGlu
dCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJl
ZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIs
IDU0NDUsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5pdGlhbCkKICAgICAgICAgICYm
ICgoZW51bSB0cmVlX2NvZGUpICgoKHgpLT5jb21tb24udHlwZSkpLT5jb21tb24uY29kZSkgIT0g
SU5URUdFUl9UWVBFCiAgICAgICAgICAmJiAoKGVudW0gdHJlZV9jb2RlKSAoKCh4KS0+Y29tbW9u
LnR5cGUpKS0+Y29tbW9uLmNvZGUpICE9IEJPT0xFQU5fVFlQRQogICAgICAgICAgJiYgKChlbnVt
IHRyZWVfY29kZSkgKCgoeCktPmNvbW1vbi50eXBlKSktPmNvbW1vbi5jb2RlKSAhPSBFTlVNRVJB
TF9UWVBFKQogICAgICAgIHsKICAgICAgICAgIGVycm9yX3dpdGhfZGVjbCAoeCwgImJpdC1maWVs
ZCBgJXMnIGhhcyBpbnZhbGlkIHR5cGUiKTsKICAgICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNv
bnN0IHRyZWUgX190ID0geDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9j
b2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFp
bGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1NDUxLCBfX0ZVTkNUSU9O
X18pOyBfX3Q7IH0pLT5kZWNsLmluaXRpYWwpID0gKCh2b2lkICopMCk7CiAgICAgICAgfQoKICAg
ICAgaWYgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0geDsgaWYgKHRyZWVfY29k
ZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0g
KCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2Mv
Yy1kZWNsLmMiLCA1NDU0LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmluaXRpYWwpICYm
IHBlZGFudGljCiAgICAgICAgICAmJiAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9
ICgoeCktPmNvbW1vbi50eXBlKTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJl
ZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tf
ZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1NDU1LCBfX0ZVTkNU
SU9OX18pOyBfX3Q7IH0pLT50eXBlLm1haW5fdmFyaWFudCkgIT0gaW50ZWdlcl90eXBlc1tpdGtf
aW50XQogICAgICAgICAgJiYgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSAoKHgp
LT5jb21tb24udHlwZSk7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29k
ZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxl
ZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTQ1NiwgX19GVU5DVElPTl9f
KTsgX190OyB9KS0+dHlwZS5tYWluX3ZhcmlhbnQpICE9IGludGVnZXJfdHlwZXNbaXRrX3Vuc2ln
bmVkX2ludF0KICAgICAgICAgICYmIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0g
KCh4KS0+Y29tbW9uLnR5cGUpOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVl
X2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19m
YWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU0NTcsIF9fRlVOQ1RJ
T05fXyk7IF9fdDsgfSktPnR5cGUubWFpbl92YXJpYW50KSAhPSBjX2dsb2JhbF90cmVlc1tDVElf
Q19CT09MX1RZUEVdCgogICAgICAgICAgJiYgISgoKGVudW0gdHJlZV9jb2RlKSAoKCh4KS0+Y29t
bW9uLnR5cGUpKS0+Y29tbW9uLmNvZGUpID09IEVOVU1FUkFMX1RZUEUKICAgICAgICAgICAgICAg
JiYgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gKCh4KS0+Y29tbW9uLnR5cGUp
OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21t
b24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAi
Li4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU0NjAsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5
cGUucHJlY2lzaW9uKQogICAgICAgICAgICAgICAgICAgPT0gKF9fZXh0ZW5zaW9uX18gKHsgY29u
c3QgdHJlZSBfX3QgPSBpbnRlZ2VyX3R5cGVzW2l0a19pbnRdOyBpZiAodHJlZV9jb2RlX3R5cGVb
KGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkg
dHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wu
YyIsIDU0NjEsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUucHJlY2lzaW9uKSkpKQogICAg
ICAgIHBlZHdhcm5fd2l0aF9kZWNsICh4LCAiYml0LWZpZWxkIGAlcycgdHlwZSBpbnZhbGlkIGlu
IElTTyBDIik7CgoKCiAgICAgIGlmICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9
IHg7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNv
bW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcs
ICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTQ2NiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+
ZGVjbC5pbml0aWFsKSkKICAgICAgICB7CiAgICAgICAgICBpbnQgbWF4X3dpZHRoOwogICAgICAg
ICAgaWYgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gKCh4KS0+Y29tbW9uLnR5
cGUpOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5j
b21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3Qn
LCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU0NjksIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSkt
PnR5cGUubWFpbl92YXJpYW50KSA9PSBjX2dsb2JhbF90cmVlc1tDVElfQ19CT09MX1RZUEVdKQog
ICAgICAgICAgICBtYXhfd2lkdGggPSA4OwogICAgICAgICAgZWxzZQogICAgICAgICAgICBtYXhf
d2lkdGggPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9ICgoeCktPmNvbW1vbi50
eXBlKTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+
Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0
JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1NDcyLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0p
LT50eXBlLnByZWNpc2lvbik7CiAgICAgICAgICBpZiAodHJlZV9pbnRfY3N0X3NnbiAoKF9fZXh0
ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB4OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkg
KCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9j
bGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU0
NzMsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5pdGlhbCkpIDwgMCkKICAgICAgICAg
ICAgZXJyb3Jfd2l0aF9kZWNsICh4LCAibmVnYXRpdmUgd2lkdGggaW4gYml0LWZpZWxkIGAlcyci
KTsKICAgICAgICAgIGVsc2UgaWYgKDAgPCBjb21wYXJlX3RyZWVfaW50ICgoX19leHRlbnNpb25f
XyAoeyBjb25zdCB0cmVlIF9fdCA9IHg7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVt
IHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2No
ZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTQ3NSwgX19G
VU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5pbml0aWFsKSwgbWF4X3dpZHRoKSkKICAgICAgICAg
ICAgcGVkd2Fybl93aXRoX2RlY2wgKHgsICJ3aWR0aCBvZiBgJXMnIGV4Y2VlZHMgaXRzIHR5cGUi
KTsKICAgICAgICAgIGVsc2UgaWYgKGludGVnZXJfemVyb3AgKChfX2V4dGVuc2lvbl9fICh7IGNv
bnN0IHRyZWUgX190ID0geDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9j
b2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFp
bGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1NDc3LCBfX0ZVTkNUSU9O
X18pOyBfX3Q7IH0pLT5kZWNsLmluaXRpYWwpKSAmJiAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0
cmVlIF9fdCA9IHg7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkg
KF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAo
X190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTQ3NywgX19GVU5DVElPTl9fKTsg
X190OyB9KS0+ZGVjbC5uYW1lKSAhPSAwKQogICAgICAgICAgICBlcnJvcl93aXRoX2RlY2wgKHgs
ICJ6ZXJvIHdpZHRoIGZvciBiaXQtZmllbGQgYCVzJyIpOwogICAgICAgICAgZWxzZQogICAgICAg
ICAgICB7CgogICAgICAgICAgICAgIHVuc2lnbmVkIGludCB3aWR0aAogICAgICAgICAgICAgICAg
PSAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSAoX19leHRlbnNpb25fXyAoeyBj
b25zdCB0cmVlIF9fdCA9IHg7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVf
Y29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2Zh
aWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTQ4MywgX19GVU5DVElP
Tl9fKTsgX190OyB9KS0+ZGVjbC5pbml0aWFsKTsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3Qp
LT5jb21tb24uY29kZSkgIT0gKElOVEVHRVJfQ1NUKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwg
SU5URUdFUl9DU1QsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTQ4MywgX19GVU5DVElPTl9f
KTsgX190OyB9KS0+aW50X2NzdC5pbnRfY3N0KS5sb3cpOwoKICAgICAgICAgICAgICBpZiAoKChl
bnVtIHRyZWVfY29kZSkgKCgoeCktPmNvbW1vbi50eXBlKSktPmNvbW1vbi5jb2RlKSA9PSBFTlVN
RVJBTF9UWVBFCiAgICAgICAgICAgICAgICAgICYmICh3aWR0aCA8IG1pbl9wcmVjaXNpb24gKChf
X2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gKCh4KS0+Y29tbW9uLnR5cGUpOyBpZiAo
dHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29k
ZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4v
Z2NjL2djYy9jLWRlY2wuYyIsIDU0ODYsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUubWlu
dmFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKHgp
LT5jb21tb24udHlwZSkpLT5jb21tb24udW5zaWduZWRfZmxhZykpCiAgICAgICAgICAgICAgICAg
ICAgICB8fCAod2lkdGgKICAgICAgICAgICAgICAgICAgICAgICAgICA8IG1pbl9wcmVjaXNpb24g
KChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gKCh4KS0+Y29tbW9uLnR5cGUpOyBp
ZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24u
Y29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4v
Li4vZ2NjL2djYy9jLWRlY2wuYyIsIDU0ODksIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUu
bWF4dmFsKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKCh4
KS0+Y29tbW9uLnR5cGUpKS0+Y29tbW9uLnVuc2lnbmVkX2ZsYWcpKSkpKQogICAgICAgICAgICAg
ICAgd2FybmluZ193aXRoX2RlY2wgKHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImAlcycgaXMgbmFycm93ZXIgdGhhbiB2YWx1ZXMgb2YgaXRzIHR5cGUiKTsKCiAgICAgICAg
ICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB4OyBpZiAodHJlZV9jb2Rl
X3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAo
J2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9j
LWRlY2wuYyIsIDU0OTQsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuc2l6ZSkgPSBzaXpl
X2ludF93aWRlICgoaW50KSAod2lkdGgpLCBCSVRTSVpFVFlQRSk7CiAgICAgICAgICAgICAgKF9f
ZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB4OyBpZiAoKChlbnVtIHRyZWVfY29kZSkg
KF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoRklFTERfREVDTCkpIHRyZWVfY2hlY2tfZmFpbGVkIChf
X3QsIEZJRUxEX0RFQ0wsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTQ5NSwgX19GVU5DVElP
Tl9fKTsgX190OyB9KS0+ZGVjbC5iaXRfZmllbGRfZmxhZykgPSAxOwogICAgICAgICAgICAgICgo
X19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IF9fZXh0ZW5zaW9uX18gKHsgY29uc3Qg
dHJlZSBfX3QgPSB4OyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAh
PSAoRklFTERfREVDTCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIEZJRUxEX0RFQ0wsICIuLi8u
Li9nY2MvZ2NjL2MtZGVjbC5jIiwgNTQ5NiwgX19GVU5DVElPTl9fKTsgX190OyB9KTsgaWYgKHRy
ZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUp
KV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2dj
Yy9nY2MvYy1kZWNsLmMiLCA1NDk2LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmxhbmdf
ZmxhZ180KSA9IDEpOwoKICAgICAgICAgICAgICBpZiAod2lkdGggPT0gMCkKICAgICAgICAgICAg
ICAgIHsKCgogICAgICAgICAgICAgICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9f
dCA9IHg7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCkt
PmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAn
ZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTUwMiwgX19GVU5DVElPTl9fKTsgX190OyB9
KS0+ZGVjbC51MS5hLmFsaWduKSA9ICgoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3Qg
PSB4OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5j
b21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2Qn
LCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU1MDIsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSkt
PmRlY2wudTEuYS5hbGlnbikpID4gKDMyKSA/ICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVl
IF9fdCA9IHg7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9f
dCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190
LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTUwMiwgX19GVU5DVElPTl9fKTsgX190
OyB9KS0+ZGVjbC51MS5hLmFsaWduKSkgOiAoMzIpKTsKCgogICAgICAgICAgICAgICAgICBpZiAo
MSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAoX19leHRlbnNp
b25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHg7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChl
bnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNz
X2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTUwNywg
X19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC51MS5hLmFsaWduKSA9ICgoKF9fZXh0ZW5zaW9u
X18gKHsgY29uc3QgdHJlZSBfX3QgPSB4OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51
bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19j
aGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU1MDcsIF9f
RlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wudTEuYS5hbGlnbikpID4gKChfX2V4dGVuc2lvbl9f
ICh7IGNvbnN0IHRyZWUgX190ID0gKCh4KS0+Y29tbW9uLnR5cGUpOyBpZiAodHJlZV9jb2RlX3R5
cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3Qn
KSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRl
Y2wuYyIsIDU1MDcsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUuYWxpZ24pKSA/ICgoX19l
eHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHg7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50
KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVl
X2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwg
NTUwNywgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC51MS5hLmFsaWduKSkgOiAoKF9fZXh0
ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSAoKHgpLT5jb21tb24udHlwZSk7IGlmICh0cmVl
X2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSld
ICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2Mv
Z2NjL2MtZGVjbC5jIiwgNTUwNywgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5hbGlnbikp
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgIChfX2V4dGVuc2lvbl9fICh7
IGNvbnN0IHRyZWUgX190ID0geDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJl
ZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tf
ZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1NTA5LCBfX0ZVTkNU
SU9OX18pOyBfX3Q7IH0pLT5kZWNsLnVzZXJfYWxpZ24pIHw9IChfX2V4dGVuc2lvbl9fICh7IGNv
bnN0IHRyZWUgX190ID0gKCh4KS0+Y29tbW9uLnR5cGUpOyBpZiAodHJlZV9jb2RlX3R5cGVbKGlu
dCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJl
ZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIs
IDU1MDksIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUudXNlcl9hbGlnbik7CiAgICAgICAg
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0K
CiAgICAgIGVsc2UgaWYgKCgoeCktPmNvbW1vbi50eXBlKSAhPSBnbG9iYWxfdHJlZXNbVElfRVJS
T1JfTUFSS10pCiAgICAgICAgewogICAgICAgICAgdW5zaWduZWQgaW50IG1pbl9hbGlnbiA9ICgo
X19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHg7IGlmICgoKGVudW0gdHJlZV9jb2Rl
KSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChGSUVMRF9ERUNMKSkgdHJlZV9jaGVja19mYWlsZWQg
KF9fdCwgRklFTERfREVDTCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1NTE4LCBfX0ZVTkNU
SU9OX18pOyBfX3Q7IH0pLT5kZWNsLnJlZ2RlY2xfZmxhZykgPyA4CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDogKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSAo
KHgpLT5jb21tb24udHlwZSk7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVf
Y29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2Zh
aWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTUxOSwgX19GVU5DVElP
Tl9fKTsgX190OyB9KS0+dHlwZS5hbGlnbikpOwoKCgogICAgICAgICAgKF9fZXh0ZW5zaW9uX18g
KHsgY29uc3QgdHJlZSBfX3QgPSB4OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0
cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVj
a19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU1MjMsIF9fRlVO
Q1RJT05fXyk7IF9fdDsgfSktPmRlY2wudTEuYS5hbGlnbikgPSAoKChfX2V4dGVuc2lvbl9fICh7
IGNvbnN0IHRyZWUgX190ID0geDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJl
ZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tf
ZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1NTIzLCBfX0ZVTkNU
SU9OX18pOyBfX3Q7IH0pLT5kZWNsLnUxLmEuYWxpZ24pKSA+IChtaW5fYWxpZ24pID8gKChfX2V4
dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0geDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQp
ICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVf
Y2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1
NTIzLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLnUxLmEuYWxpZ24pKSA6IChtaW5fYWxp
Z24pKTsKICAgICAgICAgIGlmICghIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0g
eDsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKEZJRUxEX0RF
Q0wpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBGSUVMRF9ERUNMLCAiLi4vLi4vZ2NjL2djYy9j
LWRlY2wuYyIsIDU1MjQsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wucmVnZGVjbF9mbGFn
KSkKICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB4OyBpZiAo
dHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29k
ZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4v
Z2NjL2djYy9jLWRlY2wuYyIsIDU1MjUsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wudXNl
cl9hbGlnbikgfD0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSAoKHgpLT5jb21t
b24udHlwZSk7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9f
dCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190
LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTUyNSwgX19GVU5DVElPTl9fKTsgX190
OyB9KS0+dHlwZS51c2VyX2FsaWduKTsKICAgICAgICB9CgogICAgICAoX19leHRlbnNpb25fXyAo
eyBjb25zdCB0cmVlIF9fdCA9IHg7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRy
ZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNr
X2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTUyOCwgX19GVU5D
VElPTl9fKTsgX190OyB9KS0+ZGVjbC5pbml0aWFsKSA9IDA7CiAgICB9CgoKICBmb3IgKHggPSBm
aWVsZGxpc3Q7IHggJiYgKCh4KS0+Y29tbW9uLmNoYWluKTspCgogICAgaWYgKChfX2V4dGVuc2lv
bl9fICh7IGNvbnN0IHRyZWUgX190ID0gKCh4KS0+Y29tbW9uLmNoYWluKTsgaWYgKHRyZWVfY29k
ZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0g
KCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2Mv
Yy1kZWNsLmMiLCA1NTM0LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLm5hbWUpID09IDAp
CiAgICAgIHggPSAoKHgpLT5jb21tb24uY2hhaW4pOwogICAgZWxzZQogICAgICB7CiAgICAgICAg
cmVnaXN0ZXIgdHJlZSB5ID0gZmllbGRsaXN0OwoKICAgICAgICB3aGlsZSAoMSkKICAgICAgICAg
IHsKICAgICAgICAgICAgaWYgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0geTsg
aWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9u
LmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4u
Ly4uL2djYy9nY2MvYy1kZWNsLmMiLCA1NTQyLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNs
Lm5hbWUpID09IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gKCh4KS0+Y29tbW9u
LmNoYWluKTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190
KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3Qs
ICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1NTQyLCBfX0ZVTkNUSU9OX18pOyBfX3Q7
IH0pLT5kZWNsLm5hbWUpKQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBpZiAoeSA9
PSB4KQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB5ID0gKCh5KS0+Y29tbW9uLmNo
YWluKTsKICAgICAgICAgIH0KICAgICAgICBpZiAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJl
ZSBfX3QgPSB5OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChf
X3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9f
dCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU1NDgsIF9fRlVOQ1RJT05fXyk7IF9f
dDsgfSktPmRlY2wubmFtZSkgPT0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSAo
KHgpLT5jb21tb24uY2hhaW4pOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVl
X2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19m
YWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU1NDgsIF9fRlVOQ1RJ
T05fXyk7IF9fdDsgfSktPmRlY2wubmFtZSkpCiAgICAgICAgICB7CiAgICAgICAgICAgIGVycm9y
X3dpdGhfZGVjbCAoKCh4KS0+Y29tbW9uLmNoYWluKSwgImR1cGxpY2F0ZSBtZW1iZXIgYCVzJyIp
OwogICAgICAgICAgICAoKHgpLT5jb21tb24uY2hhaW4pID0gKCgoKHgpLT5jb21tb24uY2hhaW4p
KS0+Y29tbW9uLmNoYWluKTsKICAgICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICB4ID0g
KCh4KS0+Y29tbW9uLmNoYWluKTsKICAgICAgfQoKCgoKICAoX19leHRlbnNpb25fXyAoeyBjb25z
dCB0cmVlIF9fdCA9IHQ7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29k
ZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxl
ZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTU2MCwgX19GVU5DVElPTl9f
KTsgX190OyB9KS0+dHlwZS52YWx1ZXMpID0gZmllbGRsaXN0OwoKICBsYXlvdXRfdHlwZSAodCk7
CgoKICB7CiAgICB0cmVlICpmaWVsZGxpc3RwID0gJmZpZWxkbGlzdDsKICAgIHdoaWxlICgqZmll
bGRsaXN0cCkKICAgICAgaWYgKCgoZW51bSB0cmVlX2NvZGUpICgqZmllbGRsaXN0cCktPmNvbW1v
bi5jb2RlKSA9PSBGSUVMRF9ERUNMICYmIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190
ID0gKmZpZWxkbGlzdHA7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29k
ZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxl
ZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTU2OCwgX19GVU5DVElPTl9f
KTsgX190OyB9KS0+ZGVjbC5pbml0aWFsKSkKICAgICAgICAqZmllbGRsaXN0cCA9ICgoKmZpZWxk
bGlzdHApLT5jb21tb24uY2hhaW4pOwogICAgICBlbHNlCiAgICAgICAgZmllbGRsaXN0cCA9ICYo
KCpmaWVsZGxpc3RwKS0+Y29tbW9uLmNoYWluKTsKICB9CgoKCgogIChfX2V4dGVuc2lvbl9fICh7
IGNvbnN0IHRyZWUgX190ID0gdDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJl
ZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tf
ZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1NTc3LCBfX0ZVTkNU
SU9OX18pOyBfX3Q7IH0pLT50eXBlLnZhbHVlcykgPSBmaWVsZGxpc3Q7CgogIGZvciAoeCA9IChf
X2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gdDsgaWYgKHRyZWVfY29kZV90eXBlWyhp
bnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRy
ZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMi
LCA1NTc5LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLm1haW5fdmFyaWFudCk7IHg7IHgg
PSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHg7IGlmICh0cmVlX2NvZGVfdHlw
ZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcp
KSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVj
bC5jIiwgNTU3OSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5uZXh0X3ZhcmlhbnQpKQog
ICAgewogICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHg7IGlmICh0cmVl
X2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSld
ICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2Mv
Z2NjL2MtZGVjbC5jIiwgNTU4MSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS52YWx1ZXMp
ID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB0OyBpZiAodHJlZV9jb2RlX3R5
cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3Qn
KSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRl
Y2wuYyIsIDU1ODEsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUudmFsdWVzKTsKICAgICAg
KF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB4OyBpZiAodHJlZV9jb2RlX3R5cGVb
KGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkg
dHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wu
YyIsIDU1ODIsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUubGFuZ19zcGVjaWZpYykgPSAo
X19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHQ7IGlmICh0cmVlX2NvZGVfdHlwZVso
aW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0
cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5j
IiwgNTU4MiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5sYW5nX3NwZWNpZmljKTsKICAg
ICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB4OyBpZiAodHJlZV9jb2RlX3R5
cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3Qn
KSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRl
Y2wuYyIsIDU1ODMsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUuYWxpZ24pID0gKF9fZXh0
ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB0OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkg
KCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9j
bGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU1
ODMsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUuYWxpZ24pOwogICAgICAoX19leHRlbnNp
b25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHg7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChl
bnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNz
X2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTU4NCwg
X19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS51c2VyX2FsaWduKSA9IChfX2V4dGVuc2lvbl9f
ICh7IGNvbnN0IHRyZWUgX190ID0gdDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0g
dHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hl
Y2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1NTg0LCBfX0ZV
TkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLnVzZXJfYWxpZ24pOwogICAgfQoKCgogIGlmICgoKGVu
dW0gdHJlZV9jb2RlKSAodCktPmNvbW1vbi5jb2RlKSA9PSBVTklPTl9UWVBFCiAgICAgICYmIChf
X2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gdDsgaWYgKCgoZW51bSB0cmVlX2NvZGUp
IChfX3QpLT5jb21tb24uY29kZSkgIT0gKFVOSU9OX1RZUEUpKSB0cmVlX2NoZWNrX2ZhaWxlZCAo
X190LCBVTklPTl9UWVBFLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU1OTAsIF9fRlVOQ1RJ
T05fXyk7IF9fdDsgfSktPnR5cGUudHJhbnNwYXJlbnRfdW5pb25fZmxhZykKICAgICAgJiYgKF9f
ZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB0OyBpZiAodHJlZV9jb2RlX3R5cGVbKGlu
dCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJl
ZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIs
IDU1OTEsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUubW9kZSkgIT0gKF9fZXh0ZW5zaW9u
X18gKHsgY29uc3QgdHJlZSBfX3QgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9
IHQ7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNv
bW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcs
ICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTU5MSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+
dHlwZS52YWx1ZXMpOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUp
IChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQg
KF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU1OTEsIF9fRlVOQ1RJT05fXyk7
IF9fdDsgfSktPmRlY2wubW9kZSkpCiAgICB7CiAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0
IHRyZWUgX190ID0gdDsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkg
IT0gKFVOSU9OX1RZUEUpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBVTklPTl9UWVBFLCAiLi4v
Li4vZ2NjL2djYy9jLWRlY2wuYyIsIDU1OTMsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUu
dHJhbnNwYXJlbnRfdW5pb25fZmxhZykgPSAwOwogICAgICB3YXJuaW5nICgidW5pb24gY2Fubm90
IGJlIG1hZGUgdHJhbnNwYXJlbnQiKTsKICAgIH0KCgoKCiAgaWYgKGN1cnJlbnRfYmluZGluZ19s
ZXZlbC0+bl9pbmNvbXBsZXRlICE9IDApCiAgICB7CiAgICAgIHRyZWUgZGVjbDsKICAgICAgZm9y
IChkZWNsID0gY3VycmVudF9iaW5kaW5nX2xldmVsLT5uYW1lczsgZGVjbDsgZGVjbCA9ICgoZGVj
bCktPmNvbW1vbi5jaGFpbikpCiAgICAgICAgewogICAgICAgICAgaWYgKChfX2V4dGVuc2lvbl9f
ICh7IGNvbnN0IHRyZWUgX190ID0gKChkZWNsKS0+Y29tbW9uLnR5cGUpOyBpZiAodHJlZV9jb2Rl
X3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAo
J3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9j
LWRlY2wuYyIsIDU2MDUsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUubWFpbl92YXJpYW50
KSA9PSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHQ7IGlmICh0cmVlX2NvZGVf
dHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgn
dCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2Mt
ZGVjbC5jIiwgNTYwNSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5tYWluX3ZhcmlhbnQp
CiAgICAgICAgICAgICAgJiYgKChlbnVtIHRyZWVfY29kZSkgKGRlY2wpLT5jb21tb24uY29kZSkg
IT0gVFlQRV9ERUNMKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbGF5b3V0X2RlY2wgKGRl
Y2wsIDApOwoKICAgICAgICAgICAgICBtYXliZV9vYmpjX2NoZWNrX2RlY2wgKGRlY2wpOwogICAg
ICAgICAgICAgIHJlc3Rfb2ZfZGVjbF9jb21waWxhdGlvbiAoZGVjbCwgKCh2b2lkICopIDApLCB0
b3BsZXZlbCwgMCk7CiAgICAgICAgICAgICAgaWYgKCEgdG9wbGV2ZWwpCiAgICAgICAgICAgICAg
ICBleHBhbmRfZGVjbCAoZGVjbCk7CiAgICAgICAgICAgICAgLS1jdXJyZW50X2JpbmRpbmdfbGV2
ZWwtPm5faW5jb21wbGV0ZTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoISgoX19l
eHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9ICgoZGVjbCktPmNvbW1vbi50eXBlKTsgaWYg
KHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNv
ZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4u
L2djYy9nY2MvYy1kZWNsLmMiLCA1NjE2LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLnNp
emUpICE9ICh0cmVlKSAoKHZvaWQgKikwKSkKICAgICAgICAgICAgICAgICAgICYmICgoZW51bSB0
cmVlX2NvZGUpICgoKGRlY2wpLT5jb21tb24udHlwZSkpLT5jb21tb24uY29kZSkgPT0gQVJSQVlf
VFlQRSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHRyZWUgZWxlbWVudCA9ICgoZGVjbCkt
PmNvbW1vbi50eXBlKTsKICAgICAgICAgICAgICB3aGlsZSAoKChlbnVtIHRyZWVfY29kZSkgKGVs
ZW1lbnQpLT5jb21tb24uY29kZSkgPT0gQVJSQVlfVFlQRSkKICAgICAgICAgICAgICAgIGVsZW1l
bnQgPSAoKGVsZW1lbnQpLT5jb21tb24udHlwZSk7CiAgICAgICAgICAgICAgaWYgKGVsZW1lbnQg
PT0gdCkKICAgICAgICAgICAgICAgIGxheW91dF9hcnJheV90eXBlICgoKGRlY2wpLT5jb21tb24u
dHlwZSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKCiAgcmVzdF9vZl90eXBlX2Nv
bXBpbGF0aW9uICh0LCB0b3BsZXZlbCk7CgogIHJldHVybiB0Owp9CgoKCnN0YXRpYyB2b2lkCmxh
eW91dF9hcnJheV90eXBlICh0KQogICAgIHRyZWUgdDsKewogIGlmICgoKGVudW0gdHJlZV9jb2Rl
KSAoKCh0KS0+Y29tbW9uLnR5cGUpKS0+Y29tbW9uLmNvZGUpID09IEFSUkFZX1RZUEUpCiAgICBs
YXlvdXRfYXJyYXlfdHlwZSAoKCh0KS0+Y29tbW9uLnR5cGUpKTsKICBsYXlvdXRfdHlwZSAodCk7
Cn0KCgoKCgoKCnRyZWUKc3RhcnRfZW51bSAobmFtZSkKICAgICB0cmVlIG5hbWU7CnsKICByZWdp
c3RlciB0cmVlIGVudW10eXBlID0gMDsKCgoKCgogIGlmIChuYW1lICE9IDApCiAgICBlbnVtdHlw
ZSA9IGxvb2t1cF90YWcgKEVOVU1FUkFMX1RZUEUsIG5hbWUsIGN1cnJlbnRfYmluZGluZ19sZXZl
bCwgMSk7CgogIGlmIChlbnVtdHlwZSA9PSAwIHx8ICgoZW51bSB0cmVlX2NvZGUpIChlbnVtdHlw
ZSktPmNvbW1vbi5jb2RlKSAhPSBFTlVNRVJBTF9UWVBFKQogICAgewogICAgICBlbnVtdHlwZSA9
IG1ha2Vfbm9kZSAoRU5VTUVSQUxfVFlQRSk7CiAgICAgIHB1c2h0YWcgKG5hbWUsIGVudW10eXBl
KTsKICAgIH0KCiAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBlbnVtdHlwZTsg
aWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9u
LmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4u
Ly4uL2djYy9nY2MvYy1kZWNsLmMiLCA1NjcwLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBl
LmxhbmdfZmxhZ18wKSA9IDE7CgogIGlmICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9f
dCA9IGVudW10eXBlOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUp
IChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQg
KF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU2NzIsIF9fRlVOQ1RJT05fXyk7
IF9fdDsgfSktPnR5cGUudmFsdWVzKSAhPSAwKQogICAgewoKICAgICAgZXJyb3IgKCJyZWRlY2xh
cmF0aW9uIG9mIGBlbnVtICVzJyIsIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0g
bmFtZTsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKElERU5U
SUZJRVJfTk9ERSkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIElERU5USUZJRVJfTk9ERSwgIi4u
Ly4uL2djYy9nY2MvYy1kZWNsLmMiLCA1Njc1LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5pZGVu
dGlmaWVyLnBvaW50ZXIpKTsKCgoKICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBf
X3QgPSBlbnVtdHlwZTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2Rl
KSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVk
IChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1Njc5LCBfX0ZVTkNUSU9OX18p
OyBfX3Q7IH0pLT50eXBlLnZhbHVlcykgPSAwOwogICAgfQoKICBlbnVtX25leHRfdmFsdWUgPSBn
bG9iYWxfdHJlZXNbVElfSU5URUdFUl9aRVJPXTsKICBlbnVtX292ZXJmbG93ID0gMDsKCiAgaWYg
KGZsYWdfc2hvcnRfZW51bXMpCiAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9
IGVudW10eXBlOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChf
X3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9f
dCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU2ODYsIF9fRlVOQ1RJT05fXyk7IF9f
dDsgfSktPnR5cGUucGFja2VkX2ZsYWcpID0gMTsKCiAgcmV0dXJuIGVudW10eXBlOwp9CgoKCgoK
Cgp0cmVlCmZpbmlzaF9lbnVtIChlbnVtdHlwZSwgdmFsdWVzLCBhdHRyaWJ1dGVzKQogICAgIHRy
ZWUgZW51bXR5cGU7CiAgICAgdHJlZSB2YWx1ZXM7CiAgICAgdHJlZSBhdHRyaWJ1dGVzOwp7CiAg
cmVnaXN0ZXIgdHJlZSBwYWlyLCB0ZW07CiAgdHJlZSBtaW5ub2RlID0gMCwgbWF4bm9kZSA9IDAs
IGVudW1fdmFsdWVfdHlwZTsKICBpbnQgcHJlY2lzaW9uLCB1bnNpZ247CiAgaW50IHRvcGxldmVs
ID0gKGdsb2JhbF9iaW5kaW5nX2xldmVsID09IGN1cnJlbnRfYmluZGluZ19sZXZlbCk7CgogIGlm
IChpbl9wYXJtX2xldmVsX3AgKCkpCiAgICB3YXJuaW5nICgiZW51bSBkZWZpbmVkIGluc2lkZSBw
YXJtcyIpOwoKICBkZWNsX2F0dHJpYnV0ZXMgKGVudW10eXBlLCBhdHRyaWJ1dGVzLCAodHJlZSkg
KCh2b2lkICopMCkpOwoKCgogIGlmICh2YWx1ZXMgPT0gZ2xvYmFsX3RyZWVzW1RJX0VSUk9SX01B
UktdKQogICAgbWlubm9kZSA9IG1heG5vZGUgPSBnbG9iYWxfdHJlZXNbVElfSU5URUdFUl9aRVJP
XTsKICBlbHNlCiAgICB7CiAgICAgIG1pbm5vZGUgPSBtYXhub2RlID0gKF9fZXh0ZW5zaW9uX18g
KHsgY29uc3QgdHJlZSBfX3QgPSB2YWx1ZXM7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+
Y29tbW9uLmNvZGUpICE9IChUUkVFX0xJU1QpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBUUkVF
X0xJU1QsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTcxOSwgX19GVU5DVElPTl9fKTsgX190
OyB9KS0+bGlzdC52YWx1ZSk7CiAgICAgIGZvciAocGFpciA9ICgodmFsdWVzKS0+Y29tbW9uLmNo
YWluKTsgcGFpcjsgcGFpciA9ICgocGFpciktPmNvbW1vbi5jaGFpbikpCiAgICAgICAgewogICAg
ICAgICAgdHJlZSB2YWx1ZSA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gcGFp
cjsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKFRSRUVfTElT
VCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIFRSRUVfTElTVCwgIi4uLy4uL2djYy9nY2MvYy1k
ZWNsLmMiLCA1NzIyLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5saXN0LnZhbHVlKTsKICAgICAg
ICAgIGlmICh0cmVlX2ludF9jc3RfbHQgKG1heG5vZGUsIHZhbHVlKSkKICAgICAgICAgICAgbWF4
bm9kZSA9IHZhbHVlOwogICAgICAgICAgaWYgKHRyZWVfaW50X2NzdF9sdCAodmFsdWUsIG1pbm5v
ZGUpKQogICAgICAgICAgICBtaW5ub2RlID0gdmFsdWU7CiAgICAgICAgfQogICAgfQoKCgoKCiAg
dW5zaWduID0gKHRyZWVfaW50X2NzdF9zZ24gKG1pbm5vZGUpID49IDApOwogIHByZWNpc2lvbiA9
ICgobWluX3ByZWNpc2lvbiAobWlubm9kZSwgdW5zaWduKSkgPiAobWluX3ByZWNpc2lvbiAobWF4
bm9kZSwgdW5zaWduKSkgPyAobWluX3ByZWNpc2lvbiAobWlubm9kZSwgdW5zaWduKSkgOiAobWlu
X3ByZWNpc2lvbiAobWF4bm9kZSwgdW5zaWduKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBpZiAoIShfX2V4dGVuc2lvbl9fICh7IGNvbnN0
IHRyZWUgX190ID0gZW51bXR5cGU7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRy
ZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNr
X2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTczNywgX19GVU5D
VElPTl9fKTsgX190OyB9KS0+dHlwZS5wYWNrZWRfZmxhZykpCiAgICBwcmVjaXNpb24gPSAoKHBy
ZWNpc2lvbikgPiAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBpbnRlZ2VyX3R5
cGVzW2l0a19pbnRdOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUp
IChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQg
KF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU3MzgsIF9fRlVOQ1RJT05fXyk7
IF9fdDsgfSktPnR5cGUucHJlY2lzaW9uKSkgPyAocHJlY2lzaW9uKSA6ICgoX19leHRlbnNpb25f
XyAoeyBjb25zdCB0cmVlIF9fdCA9IGludGVnZXJfdHlwZXNbaXRrX2ludF07IGlmICh0cmVlX2Nv
ZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9
ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2Nj
L2MtZGVjbC5jIiwgNTczOCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5wcmVjaXNpb24p
KSk7CiAgaWYgKHR5cGVfZm9yX3NpemUgKHByZWNpc2lvbiwgdW5zaWduKSA9PSAwKQogICAgewog
ICAgICB3YXJuaW5nICgiZW51bWVyYXRpb24gdmFsdWVzIGV4Y2VlZCByYW5nZSBvZiBsYXJnZXN0
IGludGVnZXIiKTsKICAgICAgcHJlY2lzaW9uID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJl
ZSBfX3QgPSBpbnRlZ2VyX3R5cGVzW2l0a19sb25nX2xvbmddOyBpZiAodHJlZV9jb2RlX3R5cGVb
KGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkg
dHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wu
YyIsIDU3NDIsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUucHJlY2lzaW9uKTsKICAgIH0K
CiAgaWYgKHByZWNpc2lvbiA9PSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGlu
dGVnZXJfdHlwZXNbaXRrX2ludF07IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRy
ZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNr
X2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTc0NSwgX19GVU5D
VElPTl9fKTsgX190OyB9KS0+dHlwZS5wcmVjaXNpb24pKQogICAgZW51bV92YWx1ZV90eXBlID0g
dHlwZV9mb3Jfc2l6ZSAocHJlY2lzaW9uLCAwKTsKICBlbHNlCiAgICBlbnVtX3ZhbHVlX3R5cGUg
PSBlbnVtdHlwZTsKCiAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBlbnVtdHlw
ZTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29t
bW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0Jywg
Ii4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1NzUwLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50
eXBlLm1pbnZhbCkgPSBtaW5ub2RlOwogIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190
ID0gZW51bXR5cGU7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkg
KF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAo
X190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTc1MSwgX19GVU5DVElPTl9fKTsg
X190OyB9KS0+dHlwZS5tYXh2YWwpID0gbWF4bm9kZTsKICAoX19leHRlbnNpb25fXyAoeyBjb25z
dCB0cmVlIF9fdCA9IGVudW10eXBlOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0
cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVj
a19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU3NTIsIF9fRlVO
Q1RJT05fXyk7IF9fdDsgfSktPnR5cGUucHJlY2lzaW9uKSA9IHByZWNpc2lvbjsKICAoKGVudW10
eXBlKS0+Y29tbW9uLnVuc2lnbmVkX2ZsYWcpID0gdW5zaWduOwogIChfX2V4dGVuc2lvbl9fICh7
IGNvbnN0IHRyZWUgX190ID0gZW51bXR5cGU7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChl
bnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNz
X2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTc1NCwg
X19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5zaXplKSA9IDA7CiAgbGF5b3V0X3R5cGUgKGVu
dW10eXBlKTsKCiAgaWYgKHZhbHVlcyAhPSBnbG9iYWxfdHJlZXNbVElfRVJST1JfTUFSS10pCiAg
ICB7CgoKCgoKCgogICAgICBmb3IgKHBhaXIgPSB2YWx1ZXM7IHBhaXI7IHBhaXIgPSAoKHBhaXIp
LT5jb21tb24uY2hhaW4pKQogICAgICAgIHsKICAgICAgICAgIHRyZWUgZW51ID0gKF9fZXh0ZW5z
aW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBwYWlyOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9f
dCktPmNvbW1vbi5jb2RlKSAhPSAoVFJFRV9MSVNUKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwg
VFJFRV9MSVNULCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU3NjgsIF9fRlVOQ1RJT05fXyk7
IF9fdDsgfSktPmxpc3QucHVycG9zZSk7CgogICAgICAgICAgKChlbnUpLT5jb21tb24udHlwZSkg
PSBlbnVtdHlwZTsKICAgICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0g
ZW51OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5j
b21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2Qn
LCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU3NzEsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSkt
PmRlY2wuc2l6ZSkgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGVudW10eXBl
OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21t
b24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAi
Li4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU3NzEsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5
cGUuc2l6ZSk7CiAgICAgICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGVu
dTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29t
bW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywg
Ii4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1NzcyLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5k
ZWNsLnNpemVfdW5pdCkgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGVudW10
eXBlOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5j
b21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3Qn
LCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU3NzIsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSkt
PnR5cGUuc2l6ZV91bml0KTsKICAgICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUg
X190ID0gZW51OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChf
X3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9f
dCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU3NzMsIF9fRlVOQ1RJT05fXyk7IF9f
dDsgfSktPmRlY2wudTEuYS5hbGlnbikgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9f
dCA9IGVudW10eXBlOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUp
IChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQg
KF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU3NzMsIF9fRlVOQ1RJT05fXyk7
IF9fdDsgfSktPnR5cGUuYWxpZ24pOwogICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3Qg
dHJlZSBfX3QgPSBlbnU7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29k
ZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxl
ZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTc3NCwgX19GVU5DVElPTl9f
KTsgX190OyB9KS0+ZGVjbC51c2VyX2FsaWduKSA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRy
ZWUgX190ID0gZW51bXR5cGU7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVf
Y29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2Zh
aWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTc3NCwgX19GVU5DVElP
Tl9fKTsgX190OyB9KS0+dHlwZS51c2VyX2FsaWduKTsKICAgICAgICAgIChfX2V4dGVuc2lvbl9f
ICh7IGNvbnN0IHRyZWUgX190ID0gZW51OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51
bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19j
aGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU3NzUsIF9f
RlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wubW9kZSkgPSAoX19leHRlbnNpb25fXyAoeyBjb25z
dCB0cmVlIF9fdCA9IGVudW10eXBlOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0
cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVj
a19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU3NzUsIF9fRlVO
Q1RJT05fXyk7IF9fdDsgfSktPnR5cGUubW9kZSk7CiMgNTc4NCAiLi4vLi4vZ2NjL2djYy9jLWRl
Y2wuYyIKICAgICAgICAgIGlmIChpbnRfZml0c190eXBlX3AgKChfX2V4dGVuc2lvbl9fICh7IGNv
bnN0IHRyZWUgX190ID0gZW51OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVl
X2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19m
YWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU3ODQsIF9fRlVOQ1RJ
T05fXyk7IF9fdDsgfSktPmRlY2wuaW5pdGlhbCksIGVudW1fdmFsdWVfdHlwZSkpCiAgICAgICAg
ICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZW51OyBpZiAodHJlZV9jb2Rl
X3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAo
J2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9j
LWRlY2wuYyIsIDU3ODUsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5pdGlhbCkgPSBj
b252ZXJ0IChlbnVtX3ZhbHVlX3R5cGUsIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190
ID0gZW51OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3Qp
LT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwg
J2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU3ODUsIF9fRlVOQ1RJT05fXyk7IF9fdDsg
fSktPmRlY2wuaW5pdGlhbCkpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICAoX19leHRlbnNp
b25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGVudTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgo
KGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xh
c3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1Nzg3
LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmluaXRpYWwpID0gY29udmVydCAoZW51bXR5
cGUsIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZW51OyBpZiAodHJlZV9jb2Rl
X3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAo
J2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9j
LWRlY2wuYyIsIDU3ODcsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5pdGlhbCkpOwoK
ICAgICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gcGFpcjsgaWYgKCgo
ZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKFRSRUVfTElTVCkpIHRyZWVf
Y2hlY2tfZmFpbGVkIChfX3QsIFRSRUVfTElTVCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1
Nzg5LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5saXN0LnB1cnBvc2UpID0gKF9fZXh0ZW5zaW9u
X18gKHsgY29uc3QgdHJlZSBfX3QgPSBlbnU7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChl
bnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNz
X2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTc4OSwg
X19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5uYW1lKTsKICAgICAgICAgIChfX2V4dGVuc2lv
bl9fICh7IGNvbnN0IHRyZWUgX190ID0gcGFpcjsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3Qp
LT5jb21tb24uY29kZSkgIT0gKFRSRUVfTElTVCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIFRS
RUVfTElTVCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1NzkwLCBfX0ZVTkNUSU9OX18pOyBf
X3Q7IH0pLT5saXN0LnZhbHVlKSA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0g
ZW51OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5j
b21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2Qn
LCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU3OTAsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSkt
PmRlY2wuaW5pdGlhbCk7CiAgICAgICAgfQoKICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3Qg
dHJlZSBfX3QgPSBlbnVtdHlwZTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJl
ZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tf
ZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1NzkzLCBfX0ZVTkNU
SU9OX18pOyBfX3Q7IH0pLT50eXBlLnZhbHVlcykgPSB2YWx1ZXM7CiAgICB9CgoKICBmb3IgKHRl
bSA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZW51bXR5cGU7IGlmICh0cmVl
X2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSld
ICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2Mv
Z2NjL2MtZGVjbC5jIiwgNTc5NywgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5tYWluX3Zh
cmlhbnQpOyB0ZW07IHRlbSA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gdGVt
OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21t
b24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAi
Li4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU3OTcsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5
cGUubmV4dF92YXJpYW50KSkKICAgIHsKICAgICAgaWYgKHRlbSA9PSBlbnVtdHlwZSkKICAgICAg
ICBjb250aW51ZTsKICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB0ZW07
IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1v
bi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIu
Li8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTgwMSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlw
ZS52YWx1ZXMpID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBlbnVtdHlwZTsg
aWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9u
LmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4u
Ly4uL2djYy9nY2MvYy1kZWNsLmMiLCA1ODAxLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBl
LnZhbHVlcyk7CiAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gdGVtOyBp
ZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24u
Y29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4v
Li4vZ2NjL2djYy9jLWRlY2wuYyIsIDU4MDIsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUu
bWludmFsKSA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZW51bXR5cGU7IGlm
ICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5j
b2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8u
Li9nY2MvZ2NjL2MtZGVjbC5jIiwgNTgwMiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5t
aW52YWwpOwogICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHRlbTsgaWYg
KHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNv
ZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4u
L2djYy9nY2MvYy1kZWNsLmMiLCA1ODAzLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLm1h
eHZhbCkgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGVudW10eXBlOyBpZiAo
dHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29k
ZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4v
Z2NjL2djYy9jLWRlY2wuYyIsIDU4MDMsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUubWF4
dmFsKTsKICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB0ZW07IGlmICh0
cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2Rl
KSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9n
Y2MvZ2NjL2MtZGVjbC5jIiwgNTgwNCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5zaXpl
KSA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZW51bXR5cGU7IGlmICh0cmVl
X2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSld
ICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2Mv
Z2NjL2MtZGVjbC5jIiwgNTgwNCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5zaXplKTsK
ICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB0ZW07IGlmICh0cmVlX2Nv
ZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9
ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2Nj
L2MtZGVjbC5jIiwgNTgwNSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5zaXplX3VuaXQp
ID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBlbnVtdHlwZTsgaWYgKHRyZWVf
Y29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0g
IT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9n
Y2MvYy1kZWNsLmMiLCA1ODA1LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLnNpemVfdW5p
dCk7CiAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gdGVtOyBpZiAodHJl
ZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkp
XSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2Nj
L2djYy9jLWRlY2wuYyIsIDU4MDYsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUubW9kZSkg
PSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGVudW10eXBlOyBpZiAodHJlZV9j
b2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAh
PSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2dj
Yy9jLWRlY2wuYyIsIDU4MDYsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUubW9kZSk7CiAg
ICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gdGVtOyBpZiAodHJlZV9jb2Rl
X3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAo
J3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9j
LWRlY2wuYyIsIDU4MDcsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUucHJlY2lzaW9uKSA9
IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZW51bXR5cGU7IGlmICh0cmVlX2Nv
ZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9
ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2Nj
L2MtZGVjbC5jIiwgNTgwNywgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5wcmVjaXNpb24p
OwogICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHRlbTsgaWYgKHRyZWVf
Y29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0g
IT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9n
Y2MvYy1kZWNsLmMiLCA1ODA4LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLmFsaWduKSA9
IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZW51bXR5cGU7IGlmICh0cmVlX2Nv
ZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9
ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2Nj
L2MtZGVjbC5jIiwgNTgwOCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5hbGlnbik7CiAg
ICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gdGVtOyBpZiAodHJlZV9jb2Rl
X3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAo
J3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9j
LWRlY2wuYyIsIDU4MDksIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUudXNlcl9hbGlnbikg
PSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGVudW10eXBlOyBpZiAodHJlZV9j
b2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAh
PSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2dj
Yy9jLWRlY2wuYyIsIDU4MDksIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUudXNlcl9hbGln
bik7CiAgICAgICgodGVtKS0+Y29tbW9uLnVuc2lnbmVkX2ZsYWcpID0gKChlbnVtdHlwZSktPmNv
bW1vbi51bnNpZ25lZF9mbGFnKTsKICAgIH0KCgogIHJlc3Rfb2ZfdHlwZV9jb21waWxhdGlvbiAo
ZW51bXR5cGUsIHRvcGxldmVsKTsKCiAgcmV0dXJuIGVudW10eXBlOwp9CgoKCgoKCnRyZWUKYnVp
bGRfZW51bWVyYXRvciAobmFtZSwgdmFsdWUpCiAgICAgdHJlZSBuYW1lLCB2YWx1ZTsKewogIHJl
Z2lzdGVyIHRyZWUgZGVjbCwgdHlwZTsKCgoKCiAgaWYgKHZhbHVlKQogICAgd2hpbGUgKCgoKGVu
dW0gdHJlZV9jb2RlKSAodmFsdWUpLT5jb21tb24uY29kZSkgPT0gTk9QX0VYUFIgfHwgKChlbnVt
IHRyZWVfY29kZSkgKHZhbHVlKS0+Y29tbW9uLmNvZGUpID09IENPTlZFUlRfRVhQUiB8fCAoKGVu
dW0gdHJlZV9jb2RlKSAodmFsdWUpLT5jb21tb24uY29kZSkgPT0gTk9OX0xWQUxVRV9FWFBSKSAm
JiAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHZhbHVlOyBjaGFyIF9fYyA9IHRy
ZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUp
KV07IGlmIChfX2MgIT0gJ3InICYmIF9fYyAhPSAncycgJiYgX19jICE9ICc8JyAmJiBfX2MgIT0g
JzEnICYmIF9fYyAhPSAnMicgJiYgX19jICE9ICdlJykgdHJlZV9jbGFzc19jaGVja19mYWlsZWQo
X190LCAnZScsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTgzNCwgX19GVU5DVElPTl9fKTsg
X190OyB9KS0+ZXhwLm9wZXJhbmRzWzBdKSAhPSBnbG9iYWxfdHJlZXNbVElfRVJST1JfTUFSS10g
JiYgKCgodmFsdWUpLT5jb21tb24udHlwZSkgPT0gKCgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0
cmVlIF9fdCA9IHZhbHVlOyBjaGFyIF9fYyA9IHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0g
dHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV07IGlmIChfX2MgIT0gJ3InICYmIF9fYyAh
PSAncycgJiYgX19jICE9ICc8JyAmJiBfX2MgIT0gJzEnICYmIF9fYyAhPSAnMicgJiYgX19jICE9
ICdlJykgdHJlZV9jbGFzc19jaGVja19mYWlsZWQoX190LCAnZScsICIuLi8uLi9nY2MvZ2NjL2Mt
ZGVjbC5jIiwgNTgzNCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZXhwLm9wZXJhbmRzWzBdKSkt
PmNvbW1vbi50eXBlKSkpICh2YWx1ZSkgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9f
dCA9IHZhbHVlOyBjaGFyIF9fYyA9IHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9j
b2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV07IGlmIChfX2MgIT0gJ3InICYmIF9fYyAhPSAncycg
JiYgX19jICE9ICc8JyAmJiBfX2MgIT0gJzEnICYmIF9fYyAhPSAnMicgJiYgX19jICE9ICdlJykg
dHJlZV9jbGFzc19jaGVja19mYWlsZWQoX190LCAnZScsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5j
IiwgNTgzNCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZXhwLm9wZXJhbmRzWzBdKTs7CgogIGlm
ICh2YWx1ZSAhPSAwKQogICAgewogICAgICBpZiAoKChlbnVtIHRyZWVfY29kZSkgKHZhbHVlKS0+
Y29tbW9uLmNvZGUpID09IElOVEVHRVJfQ1NUKQogICAgICAgIHsKICAgICAgICAgIHZhbHVlID0g
ZGVmYXVsdF9jb252ZXJzaW9uICh2YWx1ZSk7CiAgICAgICAgICBjb25zdGFudF9leHByZXNzaW9u
X3dhcm5pbmcgKHZhbHVlKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAg
ICBlcnJvciAoImVudW1lcmF0b3IgdmFsdWUgZm9yIGAlcycgbm90IGludGVnZXIgY29uc3RhbnQi
LAogICAgICAgICAgICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gbmFt
ZTsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKElERU5USUZJ
RVJfTk9ERSkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIElERU5USUZJRVJfTk9ERSwgIi4uLy4u
L2djYy9nY2MvYy1kZWNsLmMiLCA1ODQ2LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5pZGVudGlm
aWVyLnBvaW50ZXIpKTsKICAgICAgICAgIHZhbHVlID0gMDsKICAgICAgICB9CiAgICB9CgoKCgog
IGlmICh2YWx1ZSA9PSAwKQogICAgewogICAgICB2YWx1ZSA9IGVudW1fbmV4dF92YWx1ZTsKICAg
ICAgaWYgKGVudW1fb3ZlcmZsb3cpCiAgICAgICAgZXJyb3IgKCJvdmVyZmxvdyBpbiBlbnVtZXJh
dGlvbiB2YWx1ZXMiKTsKICAgIH0KCiAgaWYgKHBlZGFudGljICYmICEgaW50X2ZpdHNfdHlwZV9w
ICh2YWx1ZSwgaW50ZWdlcl90eXBlc1tpdGtfaW50XSkpCiAgICB7CiAgICAgIHBlZHdhcm4gKCJJ
U08gQyByZXN0cmljdHMgZW51bWVyYXRvciB2YWx1ZXMgdG8gcmFuZ2Ugb2YgYGludCciKTsKICAg
ICAgdmFsdWUgPSBjb252ZXJ0IChpbnRlZ2VyX3R5cGVzW2l0a19pbnRdLCB2YWx1ZSk7CiAgICB9
CgoKICBlbnVtX25leHRfdmFsdWUgPSBidWlsZF9iaW5hcnlfb3AgKFBMVVNfRVhQUiwgdmFsdWUs
IGdsb2JhbF90cmVlc1tUSV9JTlRFR0VSX09ORV0sIDApOwogIGVudW1fb3ZlcmZsb3cgPSB0cmVl
X2ludF9jc3RfbHQgKGVudW1fbmV4dF92YWx1ZSwgdmFsdWUpOwoKCgogIHR5cGUgPSAoKHZhbHVl
KS0+Y29tbW9uLnR5cGUpOwogIHR5cGUgPSB0eXBlX2Zvcl9zaXplICgoKChfX2V4dGVuc2lvbl9f
ICh7IGNvbnN0IHRyZWUgX190ID0gdHlwZTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVu
dW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3Nf
Y2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1ODc0LCBf
X0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLnByZWNpc2lvbikpID4gKChfX2V4dGVuc2lvbl9f
ICh7IGNvbnN0IHRyZWUgX190ID0gaW50ZWdlcl90eXBlc1tpdGtfaW50XTsgaWYgKHRyZWVfY29k
ZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0g
KCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2Mv
Yy1kZWNsLmMiLCA1ODc0LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLnByZWNpc2lvbikp
ID8gKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gdHlwZTsgaWYgKHRyZWVfY29k
ZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0g
KCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2Mv
Yy1kZWNsLmMiLCA1ODc0LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLnByZWNpc2lvbikp
IDogKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gaW50ZWdlcl90eXBlc1tpdGtf
aW50XTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+
Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0
JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1ODc0LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0p
LT50eXBlLnByZWNpc2lvbikpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLAogICAgICAgICAgICAgICAgICAgICAgICAoKGZs
YWdfdHJhZGl0aW9uYWwKICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoX19leHRlbnNpb25f
XyAoeyBjb25zdCB0cmVlIF9fdCA9IHR5cGU7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChl
bnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNz
X2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTg3Nywg
X19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5wcmVjaXNpb24pID49IChfX2V4dGVuc2lvbl9f
ICh7IGNvbnN0IHRyZWUgX190ID0gaW50ZWdlcl90eXBlc1tpdGtfaW50XTsgaWYgKHRyZWVfY29k
ZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0g
KCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2Mv
Yy1kZWNsLmMiLCA1ODc3LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLnByZWNpc2lvbikp
CiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKHR5cGUpLT5jb21tb24udW5zaWduZWRfZmxh
ZykpKTsKCiAgZGVjbCA9IGJ1aWxkX2RlY2wgKENPTlNUX0RFQ0wsIG5hbWUsIHR5cGUpOwogIChf
X2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZGVjbDsgaWYgKHRyZWVfY29kZV90eXBl
WyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykp
IHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNs
LmMiLCA1ODgxLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmluaXRpYWwpID0gY29udmVy
dCAodHlwZSwgdmFsdWUpOwogIHB1c2hkZWNsIChkZWNsKTsKCiAgcmV0dXJuIHRyZWVfY29ucyAo
ZGVjbCwgdmFsdWUsICh0cmVlKSAoKHZvaWQgKikwKSk7Cn0KIyA1OTAwICIuLi8uLi9nY2MvZ2Nj
L2MtZGVjbC5jIgppbnQKc3RhcnRfZnVuY3Rpb24gKGRlY2xzcGVjcywgZGVjbGFyYXRvciwgcHJl
Zml4X2F0dHJpYnV0ZXMsIGF0dHJpYnV0ZXMpCiAgICAgdHJlZSBkZWNsYXJhdG9yLCBkZWNsc3Bl
Y3MsIHByZWZpeF9hdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzOwp7CiAgdHJlZSBkZWNsMSwgb2xkX2Rl
Y2w7CiAgdHJlZSByZXN0eXBlOwogIGludCBvbGRfaW1tZWRpYXRlX3NpemVfZXhwYW5kID0gaW1t
ZWRpYXRlX3NpemVfZXhwYW5kOwoKICBjdXJyZW50X2Z1bmN0aW9uX3JldHVybnNfdmFsdWUgPSAw
OwogIGN1cnJlbnRfZnVuY3Rpb25fcmV0dXJuc19udWxsID0gMDsKICB3YXJuX2Fib3V0X3JldHVy
bl90eXBlID0gMDsKICBjdXJyZW50X2V4dGVybl9pbmxpbmUgPSAwOwogIGNfZnVuY3Rpb25fdmFy
YXJncyA9IDA7CiAgbmFtZWRfbGFiZWxzID0gMDsKICBzaGFkb3dlZF9sYWJlbHMgPSAwOwoKCiAg
aW1tZWRpYXRlX3NpemVfZXhwYW5kID0gMDsKCiAgZGVjbDEgPSBncm9rZGVjbGFyYXRvciAoZGVj
bGFyYXRvciwgZGVjbHNwZWNzLCBGVU5DREVGLCAxKTsKCgoKICBpZiAoZGVjbDEgPT0gMCkKICAg
IHsKICAgICAgaW1tZWRpYXRlX3NpemVfZXhwYW5kID0gb2xkX2ltbWVkaWF0ZV9zaXplX2V4cGFu
ZDsKICAgICAgcmV0dXJuIDA7CiAgICB9CgogIGRlY2xfYXR0cmlidXRlcyAoZGVjbDEsIHByZWZp
eF9hdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzKTsKCiAgYW5ub3VuY2VfZnVuY3Rpb24gKGRlY2wxKTsK
CiAgaWYgKCEoKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gKCgoKGRlY2wxKS0+
Y29tbW9uLnR5cGUpKS0+Y29tbW9uLnR5cGUpOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgo
ZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFz
c19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU5MzMs
IF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUuc2l6ZSkgIT0gKHRyZWUpICgodm9pZCAqKTAp
KSB8fCAoKChlbnVtIHRyZWVfY29kZSkgKCgoKChkZWNsMSktPmNvbW1vbi50eXBlKSktPmNvbW1v
bi50eXBlKSktPmNvbW1vbi5jb2RlKSA9PSBWT0lEX1RZUEUpKSkKICAgIHsKICAgICAgZXJyb3Ig
KCJyZXR1cm4gdHlwZSBpcyBhbiBpbmNvbXBsZXRlIHR5cGUiKTsKCiAgICAgICgoZGVjbDEpLT5j
b21tb24udHlwZSkKICAgICAgICA9IGJ1aWxkX2Z1bmN0aW9uX3R5cGUgKGdsb2JhbF90cmVlc1tU
SV9WT0lEX1RZUEVdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fZXh0ZW5zaW9u
X18gKHsgY29uc3QgdHJlZSBfX3QgPSAoKGRlY2wxKS0+Y29tbW9uLnR5cGUpOyBpZiAodHJlZV9j
b2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAh
PSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2dj
Yy9jLWRlY2wuYyIsIDU5MzksIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUudmFsdWVzKSk7
CiAgICB9CgogIGlmICh3YXJuX2Fib3V0X3JldHVybl90eXBlKQogICAgcGVkd2Fybl9jOTkgKCJy
ZXR1cm4gdHlwZSBkZWZhdWx0cyB0byBgaW50JyIpOwoKCgogIGN1cnJlbnRfZnVuY3Rpb25fcGFy
bXMgPSBsYXN0X2Z1bmN0aW9uX3Bhcm1zOwogIGN1cnJlbnRfZnVuY3Rpb25fcGFybV90YWdzID0g
bGFzdF9mdW5jdGlvbl9wYXJtX3RhZ3M7CgoKCiAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJl
ZSBfX3QgPSBkZWNsMTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2Rl
KSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVk
IChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1OTUyLCBfX0ZVTkNUSU9OX18p
OyBfX3Q7IH0pLT5kZWNsLmluaXRpYWwpID0gZ2xvYmFsX3RyZWVzW1RJX0VSUk9SX01BUktdOwoK
CgoKICBvbGRfZGVjbCA9IGxvb2t1cF9uYW1lX2N1cnJlbnRfbGV2ZWwgKChfX2V4dGVuc2lvbl9f
ICh7IGNvbnN0IHRyZWUgX190ID0gZGVjbDE7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChl
bnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNz
X2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTk1Nywg
X19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5uYW1lKSk7CiAgaWYgKG9sZF9kZWNsICE9IDAg
JiYgKChlbnVtIHRyZWVfY29kZSkgKCgob2xkX2RlY2wpLT5jb21tb24udHlwZSkpLT5jb21tb24u
Y29kZSkgPT0gRlVOQ1RJT05fVFlQRQogICAgICAmJiAhKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0
IHRyZWUgX190ID0gb2xkX2RlY2w7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9u
LmNvZGUpICE9IChGVU5DVElPTl9ERUNMKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgRlVOQ1RJ
T05fREVDTCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1OTU5LCBfX0ZVTkNUSU9OX18pOyBf
X3Q7IH0pLT5kZWNsLmJ1aWx0X2luX2NsYXNzKSAhPSBOT1RfQlVJTFRfSU4pCiAgICAgICYmICgo
X19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9ICgoKChkZWNsMSktPmNvbW1vbi50eXBl
KSktPmNvbW1vbi50eXBlKTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9j
b2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFp
bGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1OTYwLCBfX0ZVTkNUSU9O
X18pOyBfX3Q7IH0pLT50eXBlLm1haW5fdmFyaWFudCkKICAgICAgICAgID09IChfX2V4dGVuc2lv
bl9fICh7IGNvbnN0IHRyZWUgX190ID0gKCgoKG9sZF9kZWNsKS0+Y29tbW9uLnR5cGUpKS0+Y29t
bW9uLnR5cGUpOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChf
X3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9f
dCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU5NjEsIF9fRlVOQ1RJT05fXyk7IF9f
dDsgfSktPnR5cGUubWFpbl92YXJpYW50KSkKICAgICAgJiYgKF9fZXh0ZW5zaW9uX18gKHsgY29u
c3QgdHJlZSBfX3QgPSAoKGRlY2wxKS0+Y29tbW9uLnR5cGUpOyBpZiAodHJlZV9jb2RlX3R5cGVb
KGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkg
dHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wu
YyIsIDU5NjIsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUudmFsdWVzKSA9PSAwKQogICAg
ewogICAgICAoKGRlY2wxKS0+Y29tbW9uLnR5cGUpID0gKChvbGRfZGVjbCktPmNvbW1vbi50eXBl
KTsKICAgICAgY3VycmVudF9mdW5jdGlvbl9wcm90b3R5cGVfZmlsZSA9IChfX2V4dGVuc2lvbl9f
ICh7IGNvbnN0IHRyZWUgX190ID0gb2xkX2RlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAo
KChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2Ns
YXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTk2
NSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5maWxlbmFtZSk7CiAgICAgIGN1cnJlbnRf
ZnVuY3Rpb25fcHJvdG90eXBlX2xpbmUgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9f
dCA9IG9sZF9kZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUp
IChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQg
KF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU5NjYsIF9fRlVOQ1RJT05fXyk7
IF9fdDsgfSktPmRlY2wubGluZW51bSk7CiAgICB9CgoKCiAgaWYgKG9sZF9kZWNsID09IDApCiAg
ICBvbGRfZGVjbCA9ICgoKHN0cnVjdCBsYW5nX2lkZW50aWZpZXIgKikgKChfX2V4dGVuc2lvbl9f
ICh7IGNvbnN0IHRyZWUgX190ID0gZGVjbDE7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChl
bnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNz
X2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTk3Miwg
X19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5uYW1lKSkpLT5pbXBsaWNpdF9kZWNsKTsKCgog
IGlmICh3YXJuX3N0cmljdF9wcm90b3R5cGVzCiAgICAgICYmIChfX2V4dGVuc2lvbl9fICh7IGNv
bnN0IHRyZWUgX190ID0gKChkZWNsMSktPmNvbW1vbi50eXBlKTsgaWYgKHRyZWVfY29kZV90eXBl
WyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0Jykp
IHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNs
LmMiLCA1OTc2LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLnZhbHVlcykgPT0gMAogICAg
ICAmJiAhKG9sZF9kZWNsICE9IDAgJiYgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3Qg
PSAoKG9sZF9kZWNsKS0+Y29tbW9uLnR5cGUpOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgo
ZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFz
c19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU5Nzcs
IF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUudmFsdWVzKSAhPSAwKSkKICAgIHdhcm5pbmcg
KCJmdW5jdGlvbiBkZWNsYXJhdGlvbiBpc24ndCBhIHByb3RvdHlwZSIpOwoKICBlbHNlIGlmICh3
YXJuX21pc3NpbmdfcHJvdG90eXBlcwogICAgICAgICAgICYmICgoZGVjbDEpLT5jb21tb24ucHVi
bGljX2ZsYWcpCiAgICAgICAgICAgJiYgIShvbGRfZGVjbCAhPSAwICYmIChfX2V4dGVuc2lvbl9f
ICh7IGNvbnN0IHRyZWUgX190ID0gKChvbGRfZGVjbCktPmNvbW1vbi50eXBlKTsgaWYgKHRyZWVf
Y29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0g
IT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9n
Y2MvYy1kZWNsLmMiLCA1OTgyLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLnZhbHVlcykg
IT0gMCkKICAgICAgICAgICAmJiAhIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0g
KF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBkZWNsMTsgaWYgKHRyZWVfY29kZV90
eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdk
JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1k
ZWNsLmMiLCA1OTgzLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLm5hbWUpOyBpZiAoKChl
bnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoSURFTlRJRklFUl9OT0RFKSkg
dHJlZV9jaGVja19mYWlsZWQgKF9fdCwgSURFTlRJRklFUl9OT0RFLCAiLi4vLi4vZ2NjL2djYy9j
LWRlY2wuYyIsIDU5ODMsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSkgPT0gZ2xvYmFsX3RyZWVzW1RJ
X01BSU5fSURFTlRJRklFUl0pKQogICAgd2FybmluZ193aXRoX2RlY2wgKGRlY2wxLCAibm8gcHJl
dmlvdXMgcHJvdG90eXBlIGZvciBgJXMnIik7CgoKICBlbHNlIGlmICh3YXJuX21pc3NpbmdfcHJv
dG90eXBlcwogICAgICAgICAgICYmIG9sZF9kZWNsICE9IDAgJiYgKChvbGRfZGVjbCktPmNvbW1v
bi51c2VkX2ZsYWcpCiAgICAgICAgICAgJiYgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBf
X3QgPSAoKG9sZF9kZWNsKS0+Y29tbW9uLnR5cGUpOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkg
KCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9j
bGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDU5
ODksIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUudmFsdWVzKSA9PSAwKQogICAgd2Fybmlu
Z193aXRoX2RlY2wgKGRlY2wxLAogICAgICAgICAgICAgICAgICAgICAgICJgJXMnIHdhcyB1c2Vk
IHdpdGggbm8gcHJvdG90eXBlIGJlZm9yZSBpdHMgZGVmaW5pdGlvbiIpOwoKICBlbHNlIGlmICh3
YXJuX21pc3NpbmdfZGVjbGFyYXRpb25zCiAgICAgICAgICAgJiYgKChkZWNsMSktPmNvbW1vbi5w
dWJsaWNfZmxhZykKICAgICAgICAgICAmJiBvbGRfZGVjbCA9PSAwCiAgICAgICAgICAgJiYgISAo
X19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0
IHRyZWUgX190ID0gZGVjbDE7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVf
Y29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2Zh
aWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNTk5NiwgX19GVU5DVElP
Tl9fKTsgX190OyB9KS0+ZGVjbC5uYW1lKTsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5j
b21tb24uY29kZSkgIT0gKElERU5USUZJRVJfTk9ERSkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3Qs
IElERU5USUZJRVJfTk9ERSwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA1OTk2LCBfX0ZVTkNU
SU9OX18pOyBfX3Q7IH0pID09IGdsb2JhbF90cmVlc1tUSV9NQUlOX0lERU5USUZJRVJdKSkKICAg
IHdhcm5pbmdfd2l0aF9kZWNsIChkZWNsMSwgIm5vIHByZXZpb3VzIGRlY2xhcmF0aW9uIGZvciBg
JXMnIik7CgoKICBlbHNlIGlmICh3YXJuX21pc3NpbmdfZGVjbGFyYXRpb25zCiAgICAgICAgICAg
JiYgb2xkX2RlY2wgIT0gMCAmJiAoKG9sZF9kZWNsKS0+Y29tbW9uLnVzZWRfZmxhZykKICAgICAg
ICAgICAmJiBvbGRfZGVjbCA9PSAoKChzdHJ1Y3QgbGFuZ19pZGVudGlmaWVyICopICgoX19leHRl
bnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGRlY2wxOyBpZiAodHJlZV9jb2RlX3R5cGVbKGlu
dCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJl
ZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIs
IDYwMDIsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wubmFtZSkpKS0+aW1wbGljaXRfZGVj
bCkpCiAgICB3YXJuaW5nX3dpdGhfZGVjbCAoZGVjbDEsCiAgICAgICAgICAgICAgICAgICAgICAg
ImAlcycgd2FzIHVzZWQgd2l0aCBubyBkZWNsYXJhdGlvbiBiZWZvcmUgaXRzIGRlZmluaXRpb24i
KTsKCgoKCgogIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZGVjbDE7IGlmICh0
cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2Rl
KSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9n
Y2MvZ2NjL2MtZGVjbC5jIiwgNjAxMCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5leHRl
cm5hbF9mbGFnKSA9IGN1cnJlbnRfZXh0ZXJuX2lubGluZTsKCgoKCgoKCiAgKChkZWNsMSktPmNv
bW1vbi5zdGF0aWNfZmxhZykgPSAxOwoKCiAgaWYgKGN1cnJlbnRfZnVuY3Rpb25fZGVjbCAhPSAw
KQogICAgKChkZWNsMSktPmNvbW1vbi5wdWJsaWNfZmxhZykgPSAwOwoKCiAgaWYgKHdhcm5fbWFp
biA+IDAgJiYgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSAoX19leHRlbnNpb25f
XyAoeyBjb25zdCB0cmVlIF9fdCA9IGRlY2wxOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgo
ZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFz
c19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDYwMjUs
IF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wubmFtZSk7IGlmICgoKGVudW0gdHJlZV9jb2Rl
KSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChJREVOVElGSUVSX05PREUpKSB0cmVlX2NoZWNrX2Zh
aWxlZCAoX190LCBJREVOVElGSUVSX05PREUsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjAy
NSwgX19GVU5DVElPTl9fKTsgX190OyB9KSA9PSBnbG9iYWxfdHJlZXNbVElfTUFJTl9JREVOVElG
SUVSXSkpCiAgICB7CiAgICAgIHRyZWUgYXJnczsKICAgICAgaW50IGFyZ2N0ID0gMDsKCiAgICAg
IGlmICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9ICgoKChkZWNsMSktPmNvbW1v
bi50eXBlKSktPmNvbW1vbi50eXBlKTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0g
dHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hl
Y2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA2MDMwLCBfX0ZV
TkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLm1haW5fdmFyaWFudCkKICAgICAgICAgICE9IGludGVn
ZXJfdHlwZXNbaXRrX2ludF0pCiAgICAgICAgcGVkd2Fybl93aXRoX2RlY2wgKGRlY2wxLCAicmV0
dXJuIHR5cGUgb2YgYCVzJyBpcyBub3QgYGludCciKTsKCiAgICAgIGZvciAoYXJncyA9IChfX2V4
dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gKChkZWNsMSktPmNvbW1vbi50eXBlKTsgaWYg
KHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNv
ZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4u
L2djYy9nY2MvYy1kZWNsLmMiLCA2MDM0LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLnZh
bHVlcyk7IGFyZ3M7CiAgICAgICAgICAgYXJncyA9ICgoYXJncyktPmNvbW1vbi5jaGFpbikpCiAg
ICAgICAgewogICAgICAgICAgdHJlZSB0eXBlID0gYXJncyA/IChfX2V4dGVuc2lvbl9fICh7IGNv
bnN0IHRyZWUgX190ID0gYXJnczsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24u
Y29kZSkgIT0gKFRSRUVfTElTVCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIFRSRUVfTElTVCwg
Ii4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA2MDM3LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5s
aXN0LnZhbHVlKSA6IDA7CgogICAgICAgICAgaWYgKHR5cGUgPT0gZ2xvYmFsX3RyZWVzW1RJX1ZP
SURfVFlQRV0pCiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICsrYXJnY3Q7CiAgICAgICAg
ICBzd2l0Y2ggKGFyZ2N0KQogICAgICAgICAgICB7CiAgICAgICAgICAgIGNhc2UgMToKICAgICAg
ICAgICAgICBpZiAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB0eXBlOyBpZiAo
dHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29k
ZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4v
Z2NjL2djYy9jLWRlY2wuYyIsIDYwNDYsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUubWFp
bl92YXJpYW50KSAhPSBpbnRlZ2VyX3R5cGVzW2l0a19pbnRdKQogICAgICAgICAgICAgICAgcGVk
d2Fybl93aXRoX2RlY2wgKGRlY2wxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJmaXJzdCBhcmd1bWVudCBvZiBgJXMnIHNob3VsZCBiZSBgaW50JyIpOwogICAgICAgICAgICAg
IGJyZWFrOwoKICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIGlmICgoKGVudW0gdHJl
ZV9jb2RlKSAodHlwZSktPmNvbW1vbi5jb2RlKSAhPSBQT0lOVEVSX1RZUEUKICAgICAgICAgICAg
ICAgICAgfHwgKChlbnVtIHRyZWVfY29kZSkgKCgodHlwZSktPmNvbW1vbi50eXBlKSktPmNvbW1v
bi5jb2RlKSAhPSBQT0lOVEVSX1RZUEUKICAgICAgICAgICAgICAgICAgfHwgKChfX2V4dGVuc2lv
bl9fICh7IGNvbnN0IHRyZWUgX190ID0gKCgoKHR5cGUpLT5jb21tb24udHlwZSkpLT5jb21tb24u
dHlwZSk7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCkt
PmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAn
dCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjA1NCwgX19GVU5DVElPTl9fKTsgX190OyB9
KS0+dHlwZS5tYWluX3ZhcmlhbnQpCiAgICAgICAgICAgICAgICAgICAgICAhPSBpbnRlZ2VyX3R5
cGVzW2l0a19jaGFyXSkpCiAgICAgICAgICAgICAgICBwZWR3YXJuX3dpdGhfZGVjbCAoZGVjbDEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlY29uZCBhcmd1bWVudCBvZiBg
JXMnIHNob3VsZCBiZSBgY2hhciAqKiciKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAg
ICAgIGNhc2UgMzoKICAgICAgICAgICAgICBpZiAoKChlbnVtIHRyZWVfY29kZSkgKHR5cGUpLT5j
b21tb24uY29kZSkgIT0gUE9JTlRFUl9UWVBFCiAgICAgICAgICAgICAgICAgIHx8ICgoZW51bSB0
cmVlX2NvZGUpICgoKHR5cGUpLT5jb21tb24udHlwZSkpLT5jb21tb24uY29kZSkgIT0gUE9JTlRF
Ul9UWVBFCiAgICAgICAgICAgICAgICAgIHx8ICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVl
IF9fdCA9ICgoKCh0eXBlKS0+Y29tbW9uLnR5cGUpKS0+Y29tbW9uLnR5cGUpOyBpZiAodHJlZV9j
b2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAh
PSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2dj
Yy9jLWRlY2wuYyIsIDYwNjMsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUubWFpbl92YXJp
YW50KQogICAgICAgICAgICAgICAgICAgICAgIT0gaW50ZWdlcl90eXBlc1tpdGtfY2hhcl0pKQog
ICAgICAgICAgICAgICAgcGVkd2Fybl93aXRoX2RlY2wgKGRlY2wxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJ0aGlyZCBhcmd1bWVudCBvZiBgJXMnIHNob3VsZCBwcm9iYWJs
eSBiZSBgY2hhciAqKiciKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAg
ICAgIH0KCgoKCiAgICAgIGlmIChhcmdjdCA+IDAgJiYgKGFyZ2N0IDwgMiB8fCBhcmdjdCA+IDMp
KQogICAgICAgIHBlZHdhcm5fd2l0aF9kZWNsIChkZWNsMSwgImAlcycgdGFrZXMgb25seSB6ZXJv
IG9yIHR3byBhcmd1bWVudHMiKTsKCiAgICAgIGlmIChhcmdjdCA9PSAzICYmIHBlZGFudGljKQog
ICAgICAgIHBlZHdhcm5fd2l0aF9kZWNsIChkZWNsMSwgInRoaXJkIGFyZ3VtZW50IG9mIGAlcycg
aXMgZGVwcmVjYXRlZCIpOwoKICAgICAgaWYgKCEgKChkZWNsMSktPmNvbW1vbi5wdWJsaWNfZmxh
ZykpCiAgICAgICAgcGVkd2Fybl93aXRoX2RlY2wgKGRlY2wxLCAiYCVzJyBpcyBub3JtYWxseSBh
IG5vbi1zdGF0aWMgZnVuY3Rpb24iKTsKICAgIH0KCgoKCgogIGN1cnJlbnRfZnVuY3Rpb25fZGVj
bCA9IHB1c2hkZWNsIChkZWNsMSk7CgogIHB1c2hsZXZlbCAoMCk7CiAgZGVjbGFyZV9wYXJtX2xl
dmVsICgxKTsKICBjdXJyZW50X2JpbmRpbmdfbGV2ZWwtPnN1YmJsb2Nrc190YWdfdHJhbnNwYXJl
bnQgPSAxOwoKICBtYWtlX2Z1bmN0aW9uX3J0bCAoY3VycmVudF9mdW5jdGlvbl9kZWNsKTsKCiAg
cmVzdHlwZSA9ICgoKChjdXJyZW50X2Z1bmN0aW9uX2RlY2wpLT5jb21tb24udHlwZSkpLT5jb21t
b24udHlwZSk7CgogIGlmICgoKChlbnVtIHRyZWVfY29kZSkgKChyZXN0eXBlKSktPmNvbW1vbi5j
b2RlKSA9PSBJTlRFR0VSX1RZUEUgJiYgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190
ID0gcmVzdHlwZTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAo
X190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChf
X3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA2MDk4LCBfX0ZVTkNUSU9OX18pOyBf
X3Q7IH0pLT50eXBlLm1haW5fdmFyaWFudCkgPT0gaW50ZWdlcl90eXBlc1tpdGtfY2hhcl0gfHwg
KF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSByZXN0eXBlOyBpZiAodHJlZV9jb2Rl
X3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAo
J3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9j
LWRlY2wuYyIsIDYwOTgsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUubWFpbl92YXJpYW50
KSA9PSBpbnRlZ2VyX3R5cGVzW2l0a19zaWduZWRfY2hhcl0gfHwgKF9fZXh0ZW5zaW9uX18gKHsg
Y29uc3QgdHJlZSBfX3QgPSByZXN0eXBlOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51
bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19j
aGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDYwOTgsIF9f
RlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUubWFpbl92YXJpYW50KSA9PSBpbnRlZ2VyX3R5cGVz
W2l0a191bnNpZ25lZF9jaGFyXSB8fCAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9
IHJlc3R5cGU7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9f
dCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190
LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjA5OCwgX19GVU5DVElPTl9fKTsgX190
OyB9KS0+dHlwZS5tYWluX3ZhcmlhbnQpID09IGludGVnZXJfdHlwZXNbaXRrX3Nob3J0XSB8fCAo
X19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHJlc3R5cGU7IGlmICh0cmVlX2NvZGVf
dHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgn
dCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2Mt
ZGVjbC5jIiwgNjA5OCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5tYWluX3ZhcmlhbnQp
ID09IGludGVnZXJfdHlwZXNbaXRrX3Vuc2lnbmVkX3Nob3J0XSkpKQogICAgewoKCiAgICAgIGlm
ICgoKHJlc3R5cGUpLT5jb21tb24udW5zaWduZWRfZmxhZykKICAgICAgICAgICYmIChmbGFnX3Ry
YWRpdGlvbmFsCiAgICAgICAgICAgICAgfHwgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUg
X190ID0gcmVzdHlwZTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2Rl
KSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVk
IChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA2MTA0LCBfX0ZVTkNUSU9OX18p
OyBfX3Q7IH0pLT50eXBlLnByZWNpc2lvbikKICAgICAgICAgICAgICAgICAgPT0gKF9fZXh0ZW5z
aW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBpbnRlZ2VyX3R5cGVzW2l0a19pbnRdOyBpZiAodHJl
ZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkp
XSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2Nj
L2djYy9jLWRlY2wuYyIsIDYxMDUsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUucHJlY2lz
aW9uKSkpKQogICAgICAgIHJlc3R5cGUgPSBpbnRlZ2VyX3R5cGVzW2l0a191bnNpZ25lZF9pbnRd
OwogICAgICBlbHNlCiAgICAgICAgcmVzdHlwZSA9IGludGVnZXJfdHlwZXNbaXRrX2ludF07CiAg
ICB9CiAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBjdXJyZW50X2Z1bmN0aW9u
X2RlY2w7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChGVU5D
VElPTl9ERUNMKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgRlVOQ1RJT05fREVDTCwgIi4uLy4u
L2djYy9nY2MvYy1kZWNsLmMiLCA2MTEwLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLnJl
c3VsdCkKICAgID0gYnVpbGRfZGVjbCAoUkVTVUxUX0RFQ0wsICh0cmVlKSAoKHZvaWQgKikwKSwg
cmVzdHlwZSk7CgoKCiAgaWYgKCgoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBj
dXJyZW50X2Z1bmN0aW9uX2RlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRy
ZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNr
X2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjExNSwgX19GVU5D
VElPTl9fKTsgX190OyB9KS0+ZGVjbC5hc3NlbWJsZXJfbmFtZSkpLT5jb21tb24uYWRkcmVzc2Fi
bGVfZmxhZykpCiAgICAoKGN1cnJlbnRfZnVuY3Rpb25fZGVjbCktPmNvbW1vbi5hZGRyZXNzYWJs
ZV9mbGFnKSA9IDE7CgogIGltbWVkaWF0ZV9zaXplX2V4cGFuZCA9IG9sZF9pbW1lZGlhdGVfc2l6
ZV9leHBhbmQ7CgogIHJldHVybiAxOwp9CgoKCgoKdm9pZApjX21hcmtfdmFyYXJncyAoKQp7CiAg
Y19mdW5jdGlvbl92YXJhcmdzID0gMTsKfQojIDYxNDAgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMi
CnZvaWQKc3RvcmVfcGFybV9kZWNscyAoKQp7CiAgcmVnaXN0ZXIgdHJlZSBmbmRlY2wgPSBjdXJy
ZW50X2Z1bmN0aW9uX2RlY2w7CiAgcmVnaXN0ZXIgdHJlZSBwYXJtOwoKCgogIHRyZWUgc3BlY3Bh
cm1zID0gY3VycmVudF9mdW5jdGlvbl9wYXJtczsKCgogIHRyZWUgcGFybXRhZ3MgPSBjdXJyZW50
X2Z1bmN0aW9uX3Bhcm1fdGFnczsKCgogIHJlZ2lzdGVyIHRyZWUgcGFybWRlY2xzID0gZ2V0ZGVj
bHMgKCk7CgoKCgogIHRyZWUgbm9ucGFybXMgPSAwOwoKCiAgaW50IHByb3RvdHlwZSA9IDA7Cgog
IGlmIChzcGVjcGFybXMgIT0gMCAmJiAoKGVudW0gdHJlZV9jb2RlKSAoc3BlY3Bhcm1zKS0+Y29t
bW9uLmNvZGUpICE9IFRSRUVfTElTVCkKICAgIHsKCgoKCgogICAgICByZWdpc3RlciB0cmVlIG5l
eHQ7CiAgICAgIHRyZWUgb3RoZXJzID0gMDsKCiAgICAgIHByb3RvdHlwZSA9IDE7CgogICAgICBp
ZiAocGFybWRlY2xzICE9IDApCiAgICAgICAgewogICAgICAgICAgdHJlZSBkZWNsLCBsaW5rOwoK
ICAgICAgICAgIGVycm9yX3dpdGhfZGVjbCAoZm5kZWNsLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAicGFybSB0eXBlcyBnaXZlbiBib3RoIGluIHBhcm1saXN0IGFuZCBzZXBhcmF0ZWx5Iik7
CgoKICAgICAgICAgIGZvciAoZGVjbCA9IGN1cnJlbnRfYmluZGluZ19sZXZlbC0+bmFtZXM7CiAg
ICAgICAgICAgICAgIGRlY2w7IGRlY2wgPSAoKGRlY2wpLT5jb21tb24uY2hhaW4pKQogICAgICAg
ICAgICBpZiAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBkZWNsOyBpZiAodHJl
ZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkp
XSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2Nj
L2djYy9jLWRlY2wuYyIsIDYxODYsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wubmFtZSkp
CiAgICAgICAgICAgICAgKCgoc3RydWN0IGxhbmdfaWRlbnRpZmllciAqKSAoKF9fZXh0ZW5zaW9u
X18gKHsgY29uc3QgdHJlZSBfX3QgPSBkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgo
ZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFz
c19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDYxODcs
IF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wubmFtZSkpKS0+bG9jYWxfdmFsdWUpID0gMDsK
ICAgICAgICAgIGZvciAobGluayA9IGN1cnJlbnRfYmluZGluZ19sZXZlbC0+c2hhZG93ZWQ7CiAg
ICAgICAgICAgICAgIGxpbms7IGxpbmsgPSAoKGxpbmspLT5jb21tb24uY2hhaW4pKQogICAgICAg
ICAgICAoKChzdHJ1Y3QgbGFuZ19pZGVudGlmaWVyICopICgoX19leHRlbnNpb25fXyAoeyBjb25z
dCB0cmVlIF9fdCA9IGxpbms7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNv
ZGUpICE9IChUUkVFX0xJU1QpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBUUkVFX0xJU1QsICIu
Li8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjE5MCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+bGlz
dC5wdXJwb3NlKSkpLT5sb2NhbF92YWx1ZSkgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVl
IF9fdCA9IGxpbms7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9
IChUUkVFX0xJU1QpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBUUkVFX0xJU1QsICIuLi8uLi9n
Y2MvZ2NjL2MtZGVjbC5jIiwgNjE5MCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+bGlzdC52YWx1
ZSk7CiAgICAgICAgICBjdXJyZW50X2JpbmRpbmdfbGV2ZWwtPm5hbWVzID0gMDsKICAgICAgICAg
IGN1cnJlbnRfYmluZGluZ19sZXZlbC0+c2hhZG93ZWQgPSAwOwogICAgICAgIH0KCiAgICAgIHNw
ZWNwYXJtcyA9IG5yZXZlcnNlIChzcGVjcGFybXMpOwogICAgICBmb3IgKHBhcm0gPSBzcGVjcGFy
bXM7IHBhcm07IHBhcm0gPSBuZXh0KQogICAgICAgIHsKICAgICAgICAgIG5leHQgPSAoKHBhcm0p
LT5jb21tb24uY2hhaW4pOwogICAgICAgICAgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChwYXJtKS0+
Y29tbW9uLmNvZGUpID09IFBBUk1fREVDTCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlm
ICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHBhcm07IGlmICh0cmVlX2NvZGVf
dHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgn
ZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2Mt
ZGVjbC5jIiwgNjIwMSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5uYW1lKSA9PSAwKQog
ICAgICAgICAgICAgICAgZXJyb3Jfd2l0aF9kZWNsIChwYXJtLCAicGFyYW1ldGVyIG5hbWUgb21p
dHRlZCIpOwogICAgICAgICAgICAgIGVsc2UgaWYgKCgoZW51bSB0cmVlX2NvZGUpICgoKHBhcm0p
LT5jb21tb24udHlwZSkpLT5jb21tb24uY29kZSkgIT0gRVJST1JfTUFSSwogICAgICAgICAgICAg
ICAgICAgICAgICYmICgoKGVudW0gdHJlZV9jb2RlKSAoKChwYXJtKS0+Y29tbW9uLnR5cGUpKS0+
Y29tbW9uLmNvZGUpID09IFZPSURfVFlQRSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgIGVycm9yX3dpdGhfZGVjbCAocGFybSwgInBhcmFtZXRlciBgJXMnIGRlY2xhcmVkIHZv
aWQiKTsKCgogICAgICAgICAgICAgICAgICAoKHBhcm0pLT5jb21tb24udHlwZSkgPSBnbG9iYWxf
dHJlZXNbVElfRVJST1JfTUFSS107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcHVz
aGRlY2wgKHBhcm0pOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsK
CgogICAgICAgICAgICAgICgocGFybSktPmNvbW1vbi5jaGFpbikgPSAwOwogICAgICAgICAgICAg
IG90aGVycyA9IGNoYWlub24gKG90aGVycywgcGFybSk7CiAgICAgICAgICAgIH0KICAgICAgICB9
CgoKCiAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZm5kZWNsOyBpZiAo
dHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29k
ZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4v
Z2NjL2djYy9jLWRlY2wuYyIsIDYyMjQsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuYXJn
dW1lbnRzKSA9IGdldGRlY2xzICgpOwojIDYyNDMgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiCiAg
ICAgIGZvciAocGFybSA9IG90aGVyczsgcGFybTsgcGFybSA9IG5leHQpCiAgICAgICAgewogICAg
ICAgICAgbmV4dCA9ICgocGFybSktPmNvbW1vbi5jaGFpbik7CiAgICAgICAgICBpZiAoKF9fZXh0
ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBwYXJtOyBpZiAodHJlZV9jb2RlX3R5cGVbKGlu
dCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJl
ZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIs
IDYyNDYsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wubmFtZSkgPT0gMCkKICAgICAgICAg
ICAgOwogICAgICAgICAgZWxzZSBpZiAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3Qg
PSAoKHBhcm0pLT5jb21tb24udHlwZSk7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVt
IHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2No
ZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjI0OCwgX19G
VU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5tYWluX3ZhcmlhbnQpID09IGdsb2JhbF90cmVlc1tU
SV9WT0lEX1RZUEVdKQogICAgICAgICAgICA7CiAgICAgICAgICBlbHNlIGlmICgoKGVudW0gdHJl
ZV9jb2RlKSAocGFybSktPmNvbW1vbi5jb2RlKSAhPSBQQVJNX0RFQ0wpCiAgICAgICAgICAgIHB1
c2hkZWNsIChwYXJtKTsKICAgICAgICB9CgogICAgICBzdG9yZXRhZ3MgKGNoYWlub24gKHBhcm10
YWdzLCBnZXR0YWdzICgpKSk7CiAgICB9CiAgZWxzZQogICAgewojIDYyNzIgIi4uLy4uL2djYy9n
Y2MvYy1kZWNsLmMiCiAgICAgIGZvciAocGFybSA9IHBhcm1kZWNsczsgcGFybTsgcGFybSA9ICgo
cGFybSktPmNvbW1vbi5jaGFpbikpCiAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJl
ZSBfX3QgPSBwYXJtOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUp
IChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQg
KF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDYyNzMsIF9fRlVOQ1RJT05fXyk7
IF9fdDsgfSktPmRlY2wud2Vha19mbGFnKSA9IDA7CgogICAgICBmb3IgKHBhcm0gPSBzcGVjcGFy
bXM7IHBhcm07IHBhcm0gPSAoKHBhcm0pLT5jb21tb24uY2hhaW4pKQogICAgICAgIHsKICAgICAg
ICAgIHJlZ2lzdGVyIHRyZWUgdGFpbCwgZm91bmQgPSAoKHZvaWQgKikwKTsKCiAgICAgICAgICBp
ZiAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBwYXJtOyBpZiAoKChlbnVtIHRy
ZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoVFJFRV9MSVNUKSkgdHJlZV9jaGVja19m
YWlsZWQgKF9fdCwgVFJFRV9MSVNULCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDYyNzksIF9f
RlVOQ1RJT05fXyk7IF9fdDsgfSktPmxpc3QudmFsdWUpID09IDApCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBlcnJvcl93aXRoX2RlY2wgKGZuZGVjbCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJwYXJhbWV0ZXIgbmFtZSBtaXNzaW5nIGZyb20gcGFyYW1ldGVyIGxpc3QiKTsK
ICAgICAgICAgICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHBhcm07IGlm
ICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChUUkVFX0xJU1QpKSB0
cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBUUkVFX0xJU1QsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5j
IiwgNjI4MywgX19GVU5DVElPTl9fKTsgX190OyB9KS0+bGlzdC5wdXJwb3NlKSA9IDA7CiAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCgoKICAgICAgICAgIGZvciAodGFpbCA9
IHBhcm1kZWNsczsgdGFpbDsgdGFpbCA9ICgodGFpbCktPmNvbW1vbi5jaGFpbikpCiAgICAgICAg
ICAgIGlmICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHRhaWw7IGlmICh0cmVl
X2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSld
ICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2Mv
Z2NjL2MtZGVjbC5jIiwgNjI5MCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5uYW1lKSA9
PSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHBhcm07IGlmICgoKGVudW0gdHJl
ZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChUUkVFX0xJU1QpKSB0cmVlX2NoZWNrX2Zh
aWxlZCAoX190LCBUUkVFX0xJU1QsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjI5MCwgX19G
VU5DVElPTl9fKTsgX190OyB9KS0+bGlzdC52YWx1ZSkKICAgICAgICAgICAgICAgICYmICgoZW51
bSB0cmVlX2NvZGUpICh0YWlsKS0+Y29tbW9uLmNvZGUpID09IFBBUk1fREVDTCkKICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICBmb3VuZCA9IHRhaWw7CiAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICB9CgoKCiAgICAgICAgICBpZiAoZm91bmQgJiYgKF9fZXh0ZW5zaW9u
X18gKHsgY29uc3QgdHJlZSBfX3QgPSBmb3VuZDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgo
KGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xh
c3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA2Mjk5
LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLndlYWtfZmxhZykpCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBlcnJvcl93aXRoX2RlY2wgKGZvdW5kLCAibXVsdGlwbGUgcGFyYW1ldGVy
cyBuYW1lZCBgJXMnIik7CiAgICAgICAgICAgICAgZm91bmQgPSAwOwogICAgICAgICAgICB9CgoK
ICAgICAgICAgIGlmIChmb3VuZCAmJiAoKChlbnVtIHRyZWVfY29kZSkgKCgoZm91bmQpLT5jb21t
b24udHlwZSkpLT5jb21tb24uY29kZSkgPT0gVk9JRF9UWVBFKSkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIGVycm9yX3dpdGhfZGVjbCAoZm91bmQsICJwYXJhbWV0ZXIgYCVzJyBkZWNsYXJl
ZCB2b2lkIik7CiAgICAgICAgICAgICAgKChmb3VuZCktPmNvbW1vbi50eXBlKSA9IGludGVnZXJf
dHlwZXNbaXRrX2ludF07CiAgICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJl
ZSBfX3QgPSBmb3VuZDsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkg
IT0gKFBBUk1fREVDTCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIFBBUk1fREVDTCwgIi4uLy4u
L2djYy9nY2MvYy1kZWNsLmMiLCA2MzEwLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmlu
aXRpYWwpID0gaW50ZWdlcl90eXBlc1tpdGtfaW50XTsKICAgICAgICAgICAgICBsYXlvdXRfZGVj
bCAoZm91bmQsIDApOwogICAgICAgICAgICB9CgoKICAgICAgICAgIGlmIChmb3VuZCAmJiBmbGFn
X3RyYWRpdGlvbmFsCiAgICAgICAgICAgICAgJiYgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJl
ZSBfX3QgPSAoKGZvdW5kKS0+Y29tbW9uLnR5cGUpOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkg
KCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9j
bGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDYz
MTYsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUubWFpbl92YXJpYW50KSA9PSBnbG9iYWxf
dHJlZXNbVElfRkxPQVRfVFlQRV0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAoKGZvdW5k
KS0+Y29tbW9uLnR5cGUpID0gZ2xvYmFsX3RyZWVzW1RJX0RPVUJMRV9UWVBFXTsKICAgICAgICAg
ICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGZvdW5kOyBpZiAoKChlbnVt
IHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoUEFSTV9ERUNMKSkgdHJlZV9jaGVj
a19mYWlsZWQgKF9fdCwgUEFSTV9ERUNMLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDYzMTks
IF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5pdGlhbCkgPSBnbG9iYWxfdHJlZXNbVElf
RE9VQkxFX1RZUEVdOwogICAgICAgICAgICAgIGxheW91dF9kZWNsIChmb3VuZCwgMCk7CiAgICAg
ICAgICAgIH0KCgogICAgICAgICAgaWYgKCFmb3VuZCkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGZvdW5kID0gYnVpbGRfZGVjbCAoUEFSTV9ERUNMLCAoX19leHRlbnNpb25fXyAoeyBjb25z
dCB0cmVlIF9fdCA9IHBhcm07IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNv
ZGUpICE9IChUUkVFX0xJU1QpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBUUkVFX0xJU1QsICIu
Li8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjMyNiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+bGlz
dC52YWx1ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlZ2VyX3R5cGVz
W2l0a19pbnRdKTsKICAgICAgICAgICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9f
dCA9IGZvdW5kOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAo
UEFSTV9ERUNMKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgUEFSTV9ERUNMLCAiLi4vLi4vZ2Nj
L2djYy9jLWRlY2wuYyIsIDYzMjgsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5pdGlh
bCkgPSAoKGZvdW5kKS0+Y29tbW9uLnR5cGUpOwogICAgICAgICAgICAgIChfX2V4dGVuc2lvbl9f
ICh7IGNvbnN0IHRyZWUgX190ID0gZm91bmQ7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChl
bnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNz
X2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjMyOSwg
X19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5saW5lbnVtKSA9IChfX2V4dGVuc2lvbl9fICh7
IGNvbnN0IHRyZWUgX190ID0gZm5kZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51
bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19j
aGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDYzMjksIF9f
RlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wubGluZW51bSk7CiAgICAgICAgICAgICAgKF9fZXh0
ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBmb3VuZDsgaWYgKHRyZWVfY29kZV90eXBlWyhp
bnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRy
ZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMi
LCA2MzMwLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmZpbGVuYW1lKSA9IChfX2V4dGVu
c2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZm5kZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGlu
dCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJl
ZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIs
IDYzMzAsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuZmlsZW5hbWUpOwogICAgICAgICAg
ICAgIGlmIChmbGFnX2lzb2M5OSkKICAgICAgICAgICAgICAgIHBlZHdhcm5fd2l0aF9kZWNsIChm
b3VuZCwgInR5cGUgb2YgYCVzJyBkZWZhdWx0cyB0byBgaW50JyIpOwogICAgICAgICAgICAgIGVs
c2UgaWYgKGV4dHJhX3dhcm5pbmdzKQogICAgICAgICAgICAgICAgd2FybmluZ193aXRoX2RlY2wg
KGZvdW5kLCAidHlwZSBvZiBgJXMnIGRlZmF1bHRzIHRvIGBpbnQnIik7CiAgICAgICAgICAgICAg
cHVzaGRlY2wgKGZvdW5kKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIChfX2V4dGVuc2lvbl9f
ICh7IGNvbnN0IHRyZWUgX190ID0gcGFybTsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5j
b21tb24uY29kZSkgIT0gKFRSRUVfTElTVCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIFRSRUVf
TElTVCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA2MzM4LCBfX0ZVTkNUSU9OX18pOyBfX3Q7
IH0pLT5saXN0LnB1cnBvc2UpID0gZm91bmQ7CgoKICAgICAgICAgIChfX2V4dGVuc2lvbl9fICh7
IGNvbnN0IHRyZWUgX190ID0gZm91bmQ7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVt
IHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2No
ZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjM0MSwgX19G
VU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC53ZWFrX2ZsYWcpID0gMTsKICAgICAgICB9CgoKCgoK
CgogICAgICBub25wYXJtcyA9IDA7CiAgICAgIGZvciAocGFybSA9IHBhcm1kZWNsczsgcGFybTsp
CiAgICAgICAgewogICAgICAgICAgdHJlZSBuZXh0ID0gKChwYXJtKS0+Y29tbW9uLmNoYWluKTsK
ICAgICAgICAgICgocGFybSktPmNvbW1vbi5jaGFpbikgPSAwOwoKICAgICAgICAgIGlmICgoKGVu
dW0gdHJlZV9jb2RlKSAocGFybSktPmNvbW1vbi5jb2RlKSAhPSBQQVJNX0RFQ0wpCiAgICAgICAg
ICAgIG5vbnBhcm1zID0gY2hhaW5vbiAobm9ucGFybXMsIHBhcm0pOwogICAgICAgICAgZWxzZQog
ICAgICAgICAgICB7CgogICAgICAgICAgICAgIGlmICghKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0
IHRyZWUgX190ID0gKChwYXJtKS0+Y29tbW9uLnR5cGUpOyBpZiAodHJlZV9jb2RlX3R5cGVbKGlu
dCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJl
ZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIs
IDYzNjEsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUuc2l6ZSkgIT0gKHRyZWUpICgodm9p
ZCAqKTApKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgZXJyb3Jfd2l0aF9k
ZWNsIChwYXJtLCAicGFyYW1ldGVyIGAlcycgaGFzIGluY29tcGxldGUgdHlwZSIpOwogICAgICAg
ICAgICAgICAgICAoKHBhcm0pLT5jb21tb24udHlwZSkgPSBnbG9iYWxfdHJlZXNbVElfRVJST1Jf
TUFSS107CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIGlmICghIChfX2V4dGVuc2lv
bl9fICh7IGNvbnN0IHRyZWUgX190ID0gcGFybTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgo
KGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xh
c3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA2MzY3
LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLndlYWtfZmxhZykpCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgIGVycm9yX3dpdGhfZGVjbCAocGFybSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGVjbGFyYXRpb24gZm9yIHBhcmFtZXRlciBgJXMnIGJ1
dCBubyBzdWNoIHBhcmFtZXRlciIpOwoKCgogICAgICAgICAgICAgICAgICBzcGVjcGFybXMKICAg
ICAgICAgICAgICAgICAgICA9IGNoYWlub24gKHNwZWNwYXJtcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRyZWVfY29ucyAocGFybSwgKHRyZWUpICgodm9pZCAqKTApLCAodHJlZSkg
KCh2b2lkICopMCkpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAg
IHBhcm0gPSBuZXh0OwogICAgICAgIH0KCgoKCiAgICAgIHBhcm0gPSBzcGVjcGFybXM7CiAgICAg
IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZm5kZWNsOyBpZiAodHJlZV9jb2Rl
X3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAo
J2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9j
LWRlY2wuYyIsIDYzODcsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuYXJndW1lbnRzKSA9
IDA7CiAgICAgIHsKICAgICAgICByZWdpc3RlciB0cmVlIGxhc3Q7CiAgICAgICAgZm9yIChsYXN0
ID0gMDsgcGFybTsgcGFybSA9ICgocGFybSktPmNvbW1vbi5jaGFpbikpCiAgICAgICAgICBpZiAo
KF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBwYXJtOyBpZiAoKChlbnVtIHRyZWVf
Y29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoVFJFRV9MSVNUKSkgdHJlZV9jaGVja19mYWls
ZWQgKF9fdCwgVFJFRV9MSVNULCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDYzOTEsIF9fRlVO
Q1RJT05fXyk7IF9fdDsgfSktPmxpc3QucHVycG9zZSkpCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBpZiAobGFzdCA9PSAwKQogICAgICAgICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29u
c3QgdHJlZSBfX3QgPSBmbmRlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRy
ZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNr
X2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjM5NCwgX19GVU5D
VElPTl9fKTsgX190OyB9KS0+ZGVjbC5hcmd1bWVudHMpID0gKF9fZXh0ZW5zaW9uX18gKHsgY29u
c3QgdHJlZSBfX3QgPSBwYXJtOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5j
b2RlKSAhPSAoVFJFRV9MSVNUKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgVFJFRV9MSVNULCAi
Li4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDYzOTQsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmxp
c3QucHVycG9zZSk7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgKChsYXN0KS0+
Y29tbW9uLmNoYWluKSA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gcGFybTsg
aWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKFRSRUVfTElTVCkp
IHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIFRSRUVfTElTVCwgIi4uLy4uL2djYy9nY2MvYy1kZWNs
LmMiLCA2Mzk2LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5saXN0LnB1cnBvc2UpOwogICAgICAg
ICAgICAgIGxhc3QgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHBhcm07IGlm
ICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChUUkVFX0xJU1QpKSB0
cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBUUkVFX0xJU1QsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5j
IiwgNjM5NywgX19GVU5DVElPTl9fKTsgX190OyB9KS0+bGlzdC5wdXJwb3NlKTsKICAgICAgICAg
ICAgICAoKGxhc3QpLT5jb21tb24uY2hhaW4pID0gMDsKICAgICAgICAgICAgfQogICAgICB9CgoK
CgoKICAgICAgaWYgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gKChmbmRlY2wp
LT5jb21tb24udHlwZSk7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29k
ZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxl
ZCAoX190LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjQwNiwgX19GVU5DVElPTl9f
KTsgX190OyB9KS0+dHlwZS52YWx1ZXMpKQogICAgICAgIHsKICAgICAgICAgIHJlZ2lzdGVyIHRy
ZWUgdHlwZTsKICAgICAgICAgIGZvciAocGFybSA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRy
ZWUgX190ID0gZm5kZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2Nv
ZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWls
ZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDY0MDksIF9fRlVOQ1RJT05f
Xyk7IF9fdDsgfSktPmRlY2wuYXJndW1lbnRzKSwKICAgICAgICAgICAgICAgdHlwZSA9IChfX2V4
dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gKChmbmRlY2wpLT5jb21tb24udHlwZSk7IGlm
ICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5j
b2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8u
Li9nY2MvZ2NjL2MtZGVjbC5jIiwgNjQxMCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS52
YWx1ZXMpOwogICAgICAgICAgICAgICBwYXJtIHx8ICh0eXBlICYmICgoX19leHRlbnNpb25fXyAo
eyBjb25zdCB0cmVlIF9fdCA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gdHlw
ZTsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKFRSRUVfTElT
VCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIFRSRUVfTElTVCwgIi4uLy4uL2djYy9nY2MvYy1k
ZWNsLmMiLCA2NDExLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5saXN0LnZhbHVlKTsgaWYgKHRy
ZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUp
KV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2dj
Yy9nY2MvYy1kZWNsLmMiLCA2NDExLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLm1haW5f
dmFyaWFudCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gZ2xvYmFsX3RyZWVz
W1RJX1ZPSURfVFlQRV0pKTsKICAgICAgICAgICAgICAgcGFybSA9ICgocGFybSktPmNvbW1vbi5j
aGFpbiksIHR5cGUgPSAoKHR5cGUpLT5jb21tb24uY2hhaW4pKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgaWYgKHBhcm0gPT0gMCB8fCB0eXBlID09IDAKICAgICAgICAgICAgICAgICAgfHwg
KF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSAoX19leHRlbnNpb25fXyAoeyBjb25z
dCB0cmVlIF9fdCA9IHR5cGU7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNv
ZGUpICE9IChUUkVFX0xJU1QpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBUUkVFX0xJU1QsICIu
Li8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjQxNiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+bGlz
dC52YWx1ZSk7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9f
dCktPmNvbW1vbi5jb2RlKSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190
LCAndCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjQxNiwgX19GVU5DVElPTl9fKTsgX190
OyB9KS0+dHlwZS5tYWluX3ZhcmlhbnQpID09IGdsb2JhbF90cmVlc1tUSV9WT0lEX1RZUEVdKQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBlcnJvciAoIm51bWJlciBvZiBhcmd1
bWVudHMgZG9lc24ndCBtYXRjaCBwcm90b3R5cGUiKTsKICAgICAgICAgICAgICAgICAgZXJyb3Jf
d2l0aF9maWxlX2FuZF9saW5lIChjdXJyZW50X2Z1bmN0aW9uX3Byb3RvdHlwZV9maWxlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfZnVuY3Rpb25f
cHJvdG90eXBlX2xpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInByb3RvdHlwZSBkZWNsYXJhdGlvbiIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAgIGlmICghIGNvbXB0eXBlcyAoKF9fZXh0ZW5z
aW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBwYXJtOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9f
dCktPmNvbW1vbi5jb2RlKSAhPSAoUEFSTV9ERUNMKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwg
UEFSTV9ERUNMLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDY0MjYsIF9fRlVOQ1RJT05fXyk7
IF9fdDsgfSktPmRlY2wuaW5pdGlhbCksIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190
ID0gdHlwZTsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKFRS
RUVfTElTVCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIFRSRUVfTElTVCwgIi4uLy4uL2djYy9n
Y2MvYy1kZWNsLmMiLCA2NDI2LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5saXN0LnZhbHVlKSkp
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmICgoX19leHRlbnNpb25fXyAo
eyBjb25zdCB0cmVlIF9fdCA9ICgocGFybSktPmNvbW1vbi50eXBlKTsgaWYgKHRyZWVfY29kZV90
eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0
JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1k
ZWNsLmMiLCA2NDI4LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLm1haW5fdmFyaWFudCkK
ICAgICAgICAgICAgICAgICAgICAgID09IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190
ID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSB0eXBlOyBpZiAoKChlbnVtIHRy
ZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoVFJFRV9MSVNUKSkgdHJlZV9jaGVja19m
YWlsZWQgKF9fdCwgVFJFRV9MSVNULCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDY0MjksIF9f
RlVOQ1RJT05fXyk7IF9fdDsgfSktPmxpc3QudmFsdWUpOyBpZiAodHJlZV9jb2RlX3R5cGVbKGlu
dCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJl
ZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIs
IDY0MjksIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUubWFpbl92YXJpYW50KSkKICAgICAg
ICAgICAgICAgICAgICB7CgoKCgoKICAgICAgICAgICAgICAgICAgICAgIChfX2V4dGVuc2lvbl9f
ICh7IGNvbnN0IHRyZWUgX190ID0gcGFybTsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5j
b21tb24uY29kZSkgIT0gKFBBUk1fREVDTCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIFBBUk1f
REVDTCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA2NDM2LCBfX0ZVTkNUSU9OX18pOyBfX3Q7
IH0pLT5kZWNsLmluaXRpYWwpID0gKChwYXJtKS0+Y29tbW9uLnR5cGUpOwoKICAgICAgICAgICAg
ICAgICAgICAgIGlmICgxCiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCgoZW51bSB0cmVl
X2NvZGUpICgoKHBhcm0pLT5jb21tb24udHlwZSkpLT5jb21tb24uY29kZSkgPT0gSU5URUdFUl9U
WVBFCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoZW51bSB0cmVlX2NvZGUpICgo
KHBhcm0pLT5jb21tb24udHlwZSkpLT5jb21tb24uY29kZSkgPT0gRU5VTUVSQUxfVFlQRSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAmJiAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9f
dCA9ICgocGFybSktPmNvbW1vbi50eXBlKTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVu
dW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3Nf
Y2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA2NDQxLCBf
X0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLnByZWNpc2lvbikKICAgICAgICAgICAgICAgICAg
ICAgICAgICA8IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gaW50ZWdlcl90eXBl
c1tpdGtfaW50XTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAo
X190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChf
X3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA2NDQyLCBfX0ZVTkNUSU9OX18pOyBf
X3Q7IH0pLT50eXBlLnByZWNpc2lvbikpCiAgICAgICAgICAgICAgICAgICAgICAgIChfX2V4dGVu
c2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gcGFybTsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChf
X3QpLT5jb21tb24uY29kZSkgIT0gKFBBUk1fREVDTCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3Qs
IFBBUk1fREVDTCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA2NDQzLCBfX0ZVTkNUSU9OX18p
OyBfX3Q7IH0pLT5kZWNsLmluaXRpYWwpID0gaW50ZWdlcl90eXBlc1tpdGtfaW50XTsKCiAgICAg
ICAgICAgICAgICAgICAgICBpZiAocGVkYW50aWMpCiAgICAgICAgICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICBwZWR3YXJuICgicHJvbW90ZWQgYXJndW1lbnQgYCVz
JyBkb2Vzbid0IG1hdGNoIHByb3RvdHlwZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSAoX19leHRlbnNpb25fXyAo
eyBjb25zdCB0cmVlIF9fdCA9IHBhcm07IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVt
IHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2No
ZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjQ0OCwgX19G
VU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5uYW1lKTsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChf
X3QpLT5jb21tb24uY29kZSkgIT0gKElERU5USUZJRVJfTk9ERSkpIHRyZWVfY2hlY2tfZmFpbGVk
IChfX3QsIElERU5USUZJRVJfTk9ERSwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA2NDQ4LCBf
X0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5pZGVudGlmaWVyLnBvaW50ZXIpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICB3YXJuaW5nX3dpdGhfZmlsZV9hbmRfbGluZQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGN1cnJlbnRfZnVuY3Rpb25fcHJvdG90eXBlX2ZpbGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3VycmVudF9mdW5jdGlvbl9wcm90b3R5cGVfbGluZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAicHJvdG90eXBlIGRlY2xhcmF0aW9uIik7CiAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgoKICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoISAoZmxhZ190cmFkaXRpb25hbAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9ICgocGFybSktPmNvbW1v
bi50eXBlKTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190
KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3Qs
ICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA2NDU4LCBfX0ZVTkNUSU9OX18pOyBfX3Q7
IH0pLT50eXBlLm1haW5fdmFyaWFudCkgPT0gaW50ZWdlcl90eXBlc1tpdGtfaW50XQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmJiAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9f
dCA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gdHlwZTsgaWYgKCgoZW51bSB0
cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKFRSRUVfTElTVCkpIHRyZWVfY2hlY2tf
ZmFpbGVkIChfX3QsIFRSRUVfTElTVCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA2NDU5LCBf
X0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5saXN0LnZhbHVlKTsgaWYgKHRyZWVfY29kZV90eXBlWyhp
bnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRy
ZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMi
LCA2NDU5LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLm1haW5fdmFyaWFudCkgPT0gaW50
ZWdlcl90eXBlc1tpdGtfdW5zaWduZWRfaW50XSkpCiAgICAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICAgZXJyb3IgKCJhcmd1bWVudCBgJXMnIGRvZXNuJ3QgbWF0Y2ggcHJv
dG90eXBlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19leHRlbnNpb25fXyAoeyBj
b25zdCB0cmVlIF9fdCA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gcGFybTsg
aWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9u
LmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4u
Ly4uL2djYy9nY2MvYy1kZWNsLmMiLCA2NDYyLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNs
Lm5hbWUpOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoSURF
TlRJRklFUl9OT0RFKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgSURFTlRJRklFUl9OT0RFLCAi
Li4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDY0NjIsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmlk
ZW50aWZpZXIucG9pbnRlcikpOwogICAgICAgICAgICAgICAgICAgICAgZXJyb3Jfd2l0aF9maWxl
X2FuZF9saW5lIChjdXJyZW50X2Z1bmN0aW9uX3Byb3RvdHlwZV9maWxlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2Z1bmN0aW9uX3Byb3Rv
dHlwZV9saW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAicHJvdG90eXBlIGRlY2xhcmF0aW9uIik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAoX19leHRlbnNpb25fXyAoeyBjb25z
dCB0cmVlIF9fdCA9ICgoZm5kZWNsKS0+Y29tbW9uLnR5cGUpOyBpZiAodHJlZV9jb2RlX3R5cGVb
KGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkg
dHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wu
YyIsIDY0NjksIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUubm9uY29waWVkX3BhcnRzKSA9
IDA7CiAgICAgICAgfQoKCgogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgdHJlZSBhY3R1
YWwgPSAwLCBsYXN0ID0gMCwgdHlwZTsKCiAgICAgICAgICBmb3IgKHBhcm0gPSAoX19leHRlbnNp
b25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGZuZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQp
ICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVf
Y2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA2
NDc4LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmFyZ3VtZW50cyk7IHBhcm07IHBhcm0g
PSAoKHBhcm0pLT5jb21tb24uY2hhaW4pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHlw
ZSA9IHRyZWVfY29ucyAoKHRyZWUpICgodm9pZCAqKTApLCAoX19leHRlbnNpb25fXyAoeyBjb25z
dCB0cmVlIF9fdCA9IHBhcm07IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNv
ZGUpICE9IChQQVJNX0RFQ0wpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBQQVJNX0RFQ0wsICIu
Li8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjQ4MCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVj
bC5pbml0aWFsKSwgKHRyZWUpICgodm9pZCAqKTApKTsKICAgICAgICAgICAgICBpZiAobGFzdCkK
ICAgICAgICAgICAgICAgICgobGFzdCktPmNvbW1vbi5jaGFpbikgPSB0eXBlOwogICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgIGFjdHVhbCA9IHR5cGU7CiAgICAgICAgICAgICAgbGFz
dCA9IHR5cGU7CiAgICAgICAgICAgIH0KICAgICAgICAgIHR5cGUgPSB0cmVlX2NvbnMgKCh0cmVl
KSAoKHZvaWQgKikwKSwgZ2xvYmFsX3RyZWVzW1RJX1ZPSURfVFlQRV0sICh0cmVlKSAoKHZvaWQg
KikwKSk7CiAgICAgICAgICBpZiAobGFzdCkKICAgICAgICAgICAgKChsYXN0KS0+Y29tbW9uLmNo
YWluKSA9IHR5cGU7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGFjdHVhbCA9IHR5cGU7CiMg
NjUwMSAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIKICAgICAgICAgICgoZm5kZWNsKS0+Y29tbW9u
LnR5cGUpID0gYnVpbGRfdHlwZV9jb3B5ICgoKGZuZGVjbCktPmNvbW1vbi50eXBlKSk7CgogICAg
ICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSAoKGZuZGVjbCktPmNvbW1v
bi50eXBlKTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190
KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3Qs
ICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA2NTAzLCBfX0ZVTkNUSU9OX18pOyBfX3Q7
IH0pLT50eXBlLm5vbmNvcGllZF9wYXJ0cykgPSBhY3R1YWw7CiAgICAgICAgfQoKCgoKCgogICAg
ICBzdG9yZWRlY2xzIChjaGFpbm9uIChub25wYXJtcywgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3Qg
dHJlZSBfX3QgPSBmbmRlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVf
Y29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2Zh
aWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjUxMSwgX19GVU5DVElP
Tl9fKTsgX190OyB9KS0+ZGVjbC5hcmd1bWVudHMpKSk7CiAgICB9CgoKCgoKICBrZWVwX25leHRf
aWZfc3ViYmxvY2tzID0gMTsKIyA2NTI5ICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIgogIGdlbl9h
dXhfaW5mb19yZWNvcmQgKGZuZGVjbCwgMSwgMCwgcHJvdG90eXBlKTsKCgoKICBpbml0X2Z1bmN0
aW9uX3N0YXJ0IChmbmRlY2wsIGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOwoKCiAgKF9fZXh0ZW5z
aW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBjdXJyZW50X2Z1bmN0aW9uX2RlY2w7IGlmICh0cmVl
X2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSld
ICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2Mv
Z2NjL2MtZGVjbC5jIiwgNjUzNiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5sYW5nX3Nw
ZWNpZmljKQogICAgPSgoc3RydWN0IGxhbmdfZGVjbCAqKSBnZ2NfYWxsb2MgKHNpemVvZiAoc3Ry
dWN0IGxhbmdfZGVjbCkpKTsKICBiZWdpbl9zdG10X3RyZWUgKCYoKChzdHJ1Y3QgY19sYW5nX2Rl
Y2wgKikgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBfX2V4dGVuc2lvbl9fICh7
IGNvbnN0IHRyZWUgX190ID0gY3VycmVudF9mdW5jdGlvbl9kZWNsOyBpZiAoKChlbnVtIHRyZWVf
Y29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoRlVOQ1RJT05fREVDTCkpIHRyZWVfY2hlY2tf
ZmFpbGVkIChfX3QsIEZVTkNUSU9OX0RFQ0wsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjUz
OCwgX19GVU5DVElPTl9fKTsgX190OyB9KTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVu
dW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3Nf
Y2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA2NTM4LCBf
X0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmxhbmdfc3BlY2lmaWMpKSAtPnNhdmVkX3RyZWUp
KTsKCgogIGNmdW4tPnhfd2hvbGVfZnVuY3Rpb25fbW9kZV9wID0gMTsKCgoKCgogIGltbWVkaWF0
ZV9zaXplX2V4cGFuZCA9IDA7CiAgY2Z1bi0+eF9kb250X3NhdmVfcGVuZGluZ19zaXplc19wID0g
MTsKfQojIDY1NjEgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiCnRyZWUKY29tYmluZV9wYXJtX2Rl
Y2xzIChzcGVjcGFybXMsIHBhcm1saXN0LCB2b2lkX2F0X2VuZCkKICAgICB0cmVlIHNwZWNwYXJt
cywgcGFybWxpc3Q7CiAgICAgaW50IHZvaWRfYXRfZW5kOwp7CiAgcmVnaXN0ZXIgdHJlZSBmbmRl
Y2wgPSBjdXJyZW50X2Z1bmN0aW9uX2RlY2w7CiAgcmVnaXN0ZXIgdHJlZSBwYXJtOwoKICB0cmVl
IHBhcm1kZWNscyA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gcGFybWxpc3Q7
IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChUUkVFX0xJU1Qp
KSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBUUkVFX0xJU1QsICIuLi8uLi9nY2MvZ2NjL2MtZGVj
bC5jIiwgNjU2OSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+bGlzdC5wdXJwb3NlKTsKCgoKCiAg
dHJlZSBub25wYXJtcyA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gcGFybWxp
c3Q7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChUUkVFX0xJ
U1QpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBUUkVFX0xJU1QsICIuLi8uLi9nY2MvZ2NjL2Mt
ZGVjbC5jIiwgNjU3NCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+bGlzdC52YWx1ZSk7CgogIHRy
ZWUgdHlwZXMgPSAwOwoKICBmb3IgKHBhcm0gPSBwYXJtZGVjbHM7IHBhcm07IHBhcm0gPSAoKHBh
cm0pLT5jb21tb24uY2hhaW4pKQogICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3Qg
PSBwYXJtOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3Qp
LT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwg
J2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDY1NzksIF9fRlVOQ1RJT05fXyk7IF9fdDsg
fSktPmRlY2wud2Vha19mbGFnKSA9IDA7CgogIGZvciAocGFybSA9IHNwZWNwYXJtczsgcGFybTsg
cGFybSA9ICgocGFybSktPmNvbW1vbi5jaGFpbikpCiAgICB7CiAgICAgIHJlZ2lzdGVyIHRyZWUg
dGFpbCwgZm91bmQgPSAoKHZvaWQgKikwKTsKCgogICAgICBmb3IgKHRhaWwgPSBwYXJtZGVjbHM7
IHRhaWw7IHRhaWwgPSAoKHRhaWwpLT5jb21tb24uY2hhaW4pKQogICAgICAgIGlmICgoX19leHRl
bnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHRhaWw7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50
KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVl
X2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwg
NjU4NywgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5uYW1lKSA9PSAoX19leHRlbnNpb25f
XyAoeyBjb25zdCB0cmVlIF9fdCA9IHBhcm07IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+
Y29tbW9uLmNvZGUpICE9IChUUkVFX0xJU1QpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBUUkVF
X0xJU1QsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjU4NywgX19GVU5DVElPTl9fKTsgX190
OyB9KS0+bGlzdC52YWx1ZSkpCiAgICAgICAgICB7CiAgICAgICAgICAgIGZvdW5kID0gdGFpbDsK
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CgoKCiAgICAgIGlmIChmb3VuZCAmJiAoX19l
eHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGZvdW5kOyBpZiAodHJlZV9jb2RlX3R5cGVb
KGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkg
dHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wu
YyIsIDY1OTUsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wud2Vha19mbGFnKSkKICAgICAg
ICB7CiAgICAgICAgICBlcnJvcl93aXRoX2RlY2wgKGZvdW5kLCAibXVsdGlwbGUgcGFyYW1ldGVy
cyBuYW1lZCBgJXMnIik7CiAgICAgICAgICBmb3VuZCA9IDA7CiAgICAgICAgfQoKCiAgICAgIGlm
IChmb3VuZCAmJiAoKChlbnVtIHRyZWVfY29kZSkgKCgoZm91bmQpLT5jb21tb24udHlwZSkpLT5j
b21tb24uY29kZSkgPT0gVk9JRF9UWVBFKSkKICAgICAgICB7CiAgICAgICAgICBlcnJvcl93aXRo
X2RlY2wgKGZvdW5kLCAicGFyYW1ldGVyIGAlcycgZGVjbGFyZWQgdm9pZCIpOwogICAgICAgICAg
KChmb3VuZCktPmNvbW1vbi50eXBlKSA9IGludGVnZXJfdHlwZXNbaXRrX2ludF07CiAgICAgICAg
ICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGZvdW5kOyBpZiAoKChlbnVtIHRy
ZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoUEFSTV9ERUNMKSkgdHJlZV9jaGVja19m
YWlsZWQgKF9fdCwgUEFSTV9ERUNMLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDY2MDYsIF9f
RlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5pdGlhbCkgPSBpbnRlZ2VyX3R5cGVzW2l0a19p
bnRdOwogICAgICAgICAgbGF5b3V0X2RlY2wgKGZvdW5kLCAwKTsKICAgICAgICB9CgoKICAgICAg
aWYgKGZvdW5kICYmIGZsYWdfdHJhZGl0aW9uYWwKICAgICAgICAgICYmIChfX2V4dGVuc2lvbl9f
ICh7IGNvbnN0IHRyZWUgX190ID0gKChmb3VuZCktPmNvbW1vbi50eXBlKTsgaWYgKHRyZWVfY29k
ZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0g
KCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2Mv
Yy1kZWNsLmMiLCA2NjEyLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLm1haW5fdmFyaWFu
dCkgPT0gZ2xvYmFsX3RyZWVzW1RJX0ZMT0FUX1RZUEVdKQogICAgICAgIHsKICAgICAgICAgICgo
Zm91bmQpLT5jb21tb24udHlwZSkgPSBnbG9iYWxfdHJlZXNbVElfRE9VQkxFX1RZUEVdOwogICAg
ICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBmb3VuZDsgaWYgKCgoZW51
bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKFBBUk1fREVDTCkpIHRyZWVfY2hl
Y2tfZmFpbGVkIChfX3QsIFBBUk1fREVDTCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA2NjE1
LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmluaXRpYWwpID0gZ2xvYmFsX3RyZWVzW1RJ
X0RPVUJMRV9UWVBFXTsKICAgICAgICAgIGxheW91dF9kZWNsIChmb3VuZCwgMCk7CiAgICAgICAg
fQoKCiAgICAgIGlmICghZm91bmQpCiAgICAgICAgewogICAgICAgICAgZm91bmQgPSBidWlsZF9k
ZWNsIChQQVJNX0RFQ0wsIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gcGFybTsg
aWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKFRSRUVfTElTVCkp
IHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIFRSRUVfTElTVCwgIi4uLy4uL2djYy9nY2MvYy1kZWNs
LmMiLCA2NjIyLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5saXN0LnZhbHVlKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50ZWdlcl90eXBlc1tpdGtfaW50XSk7CiAgICAgICAgICAo
X19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGZvdW5kOyBpZiAoKChlbnVtIHRyZWVf
Y29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoUEFSTV9ERUNMKSkgdHJlZV9jaGVja19mYWls
ZWQgKF9fdCwgUEFSTV9ERUNMLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDY2MjQsIF9fRlVO
Q1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5pdGlhbCkgPSAoKGZvdW5kKS0+Y29tbW9uLnR5cGUp
OwogICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBmb3VuZDsgaWYg
KHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNv
ZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4u
L2djYy9nY2MvYy1kZWNsLmMiLCA2NjI1LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmxp
bmVudW0pID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBmbmRlY2w7IGlmICh0
cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2Rl
KSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9n
Y2MvZ2NjL2MtZGVjbC5jIiwgNjYyNSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5saW5l
bnVtKTsKICAgICAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZm91bmQ7
IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1v
bi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIu
Li8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjYyNiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVj
bC5maWxlbmFtZSkgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGZuZGVjbDsg
aWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9u
LmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4u
Ly4uL2djYy9nY2MvYy1kZWNsLmMiLCA2NjI2LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNs
LmZpbGVuYW1lKTsKICAgICAgICAgIGVycm9yX3dpdGhfZGVjbCAoZm91bmQsICJ0eXBlIG9mIHBh
cmFtZXRlciBgJXMnIGlzIG5vdCBkZWNsYXJlZCIpOwogICAgICAgICAgcHVzaGRlY2wgKGZvdW5k
KTsKICAgICAgICB9CgogICAgICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHBh
cm07IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChUUkVFX0xJ
U1QpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBUUkVFX0xJU1QsICIuLi8uLi9nY2MvZ2NjL2Mt
ZGVjbC5jIiwgNjYzMSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+bGlzdC5wdXJwb3NlKSA9IGZv
dW5kOwoKCiAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZm91bmQ7IGlm
ICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5j
b2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8u
Li9nY2MvZ2NjL2MtZGVjbC5jIiwgNjYzNCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC53
ZWFrX2ZsYWcpID0gMTsKICAgIH0KCgoKICBmb3IgKHBhcm0gPSBwYXJtZGVjbHM7IHBhcm07KQog
ICAgewogICAgICB0cmVlIG5leHQgPSAoKHBhcm0pLT5jb21tb24uY2hhaW4pOwogICAgICAoKHBh
cm0pLT5jb21tb24uY2hhaW4pID0gMDsKCgogICAgICBpZiAoISgoX19leHRlbnNpb25fXyAoeyBj
b25zdCB0cmVlIF9fdCA9ICgocGFybSktPmNvbW1vbi50eXBlKTsgaWYgKHRyZWVfY29kZV90eXBl
WyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCd0Jykp
IHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9nY2MvYy1kZWNs
LmMiLCA2NjQ1LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLnNpemUpICE9ICh0cmVlKSAo
KHZvaWQgKikwKSkpCiAgICAgICAgewogICAgICAgICAgZXJyb3Jfd2l0aF9kZWNsIChwYXJtLCAi
cGFyYW1ldGVyIGAlcycgaGFzIGluY29tcGxldGUgdHlwZSIpOwogICAgICAgICAgKChwYXJtKS0+
Y29tbW9uLnR5cGUpID0gZ2xvYmFsX3RyZWVzW1RJX0VSUk9SX01BUktdOwogICAgICAgIH0KCiAg
ICAgIGlmICghIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gcGFybTsgaWYgKHRy
ZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUp
KV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2dj
Yy9nY2MvYy1kZWNsLmMiLCA2NjUxLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLndlYWtf
ZmxhZykpCiAgICAgICAgewogICAgICAgICAgZXJyb3Jfd2l0aF9kZWNsIChwYXJtLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAiZGVjbGFyYXRpb24gZm9yIHBhcmFtZXRlciBgJXMnIGJ1dCBu
byBzdWNoIHBhcmFtZXRlciIpOwoKCgogICAgICAgICAgc3BlY3Bhcm1zCiAgICAgICAgICAgID0g
Y2hhaW5vbiAoc3BlY3Bhcm1zLAogICAgICAgICAgICAgICAgICAgICAgIHRyZWVfY29ucyAocGFy
bSwgKHRyZWUpICgodm9pZCAqKTApLCAodHJlZSkgKCh2b2lkICopMCkpKTsKICAgICAgICB9Cgog
ICAgICBwYXJtID0gbmV4dDsKICAgIH0KCgoKCiAgcGFybSA9IHNwZWNwYXJtczsKICBwYXJtZGVj
bHMgPSAwOwogIHsKICAgIHJlZ2lzdGVyIHRyZWUgbGFzdDsKICAgIGZvciAobGFzdCA9IDA7IHBh
cm07IHBhcm0gPSAoKHBhcm0pLT5jb21tb24uY2hhaW4pKQogICAgICBpZiAoKF9fZXh0ZW5zaW9u
X18gKHsgY29uc3QgdHJlZSBfX3QgPSBwYXJtOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCkt
PmNvbW1vbi5jb2RlKSAhPSAoVFJFRV9MSVNUKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgVFJF
RV9MSVNULCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDY2NzQsIF9fRlVOQ1RJT05fXyk7IF9f
dDsgfSktPmxpc3QucHVycG9zZSkpCiAgICAgICAgewogICAgICAgICAgaWYgKGxhc3QgPT0gMCkK
ICAgICAgICAgICAgcGFybWRlY2xzID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3Qg
PSBwYXJtOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoVFJF
RV9MSVNUKSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgVFJFRV9MSVNULCAiLi4vLi4vZ2NjL2dj
Yy9jLWRlY2wuYyIsIDY2NzcsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmxpc3QucHVycG9zZSk7
CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgICgobGFzdCktPmNvbW1vbi5jaGFpbikgPSAoX19l
eHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHBhcm07IGlmICgoKGVudW0gdHJlZV9jb2Rl
KSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChUUkVFX0xJU1QpKSB0cmVlX2NoZWNrX2ZhaWxlZCAo
X190LCBUUkVFX0xJU1QsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjY3OSwgX19GVU5DVElP
Tl9fKTsgX190OyB9KS0+bGlzdC5wdXJwb3NlKTsKICAgICAgICAgIGxhc3QgPSAoX19leHRlbnNp
b25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHBhcm07IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190
KS0+Y29tbW9uLmNvZGUpICE9IChUUkVFX0xJU1QpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBU
UkVFX0xJU1QsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjY4MCwgX19GVU5DVElPTl9fKTsg
X190OyB9KS0+bGlzdC5wdXJwb3NlKTsKICAgICAgICAgICgobGFzdCktPmNvbW1vbi5jaGFpbikg
PSAwOwoKICAgICAgICAgIHR5cGVzID0gdHJlZV9jb25zICgodHJlZSkgKCh2b2lkICopMCksICgo
cGFybSktPmNvbW1vbi50eXBlKSwgdHlwZXMpOwogICAgICAgIH0KICB9CgogIGlmICh2b2lkX2F0
X2VuZCkKICAgIHJldHVybiB0cmVlX2NvbnMgKHBhcm1kZWNscywgbm9ucGFybXMsCiAgICAgICAg
ICAgICAgICAgICAgICBucmV2ZXJzZSAodHJlZV9jb25zICgodHJlZSkgKCh2b2lkICopMCksIGds
b2JhbF90cmVlc1tUSV9WT0lEX1RZUEVdLCB0eXBlcykpKTsKCiAgcmV0dXJuIHRyZWVfY29ucyAo
cGFybWRlY2xzLCBub25wYXJtcywgbnJldmVyc2UgKHR5cGVzKSk7Cn0KIyA2NzAyICIuLi8uLi9n
Y2MvZ2NjL2MtZGVjbC5jIgp2b2lkCmZpbmlzaF9mdW5jdGlvbiAobmVzdGVkKQogICAgIGludCBu
ZXN0ZWQ7CnsKICByZWdpc3RlciB0cmVlIGZuZGVjbCA9IGN1cnJlbnRfZnVuY3Rpb25fZGVjbDsK
CgoKCgogIHBvcGxldmVsICgxLCAwLCAxKTsKICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVl
IF9fdCA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZm5kZWNsOyBpZiAodHJl
ZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkp
XSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2Nj
L2djYy9jLWRlY2wuYyIsIDY3MTMsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuaW5pdGlh
bCk7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChCTE9DSykp
IHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIEJMT0NLLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIs
IDY3MTMsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmJsb2NrLnN1cGVyY29udGV4dCkgPSBmbmRl
Y2w7CgoKCiAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSAoX19leHRlbnNpb25f
XyAoeyBjb25zdCB0cmVlIF9fdCA9IGZuZGVjbDsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3Qp
LT5jb21tb24uY29kZSkgIT0gKEZVTkNUSU9OX0RFQ0wpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190
LCBGVU5DVElPTl9ERUNMLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDY3MTcsIF9fRlVOQ1RJ
T05fXyk7IF9fdDsgfSktPmRlY2wucmVzdWx0KTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgo
KGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xh
c3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA2NzE3
LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmNvbnRleHQpID0gZm5kZWNsOwoKCiAgaWYg
KGZsYWdfdHJhZGl0aW9uYWwgJiYgKGNmdW4tPmNhbGxzX3NldGptcCkpCiAgICB7CiAgICAgIHNl
dGptcF9wcm90ZWN0ICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGZuZGVjbDsg
aWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9u
LmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4u
Ly4uL2djYy9nY2MvYy1kZWNsLmMiLCA2NzIyLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNs
LmluaXRpYWwpKTsKICAgICAgc2V0am1wX3Byb3RlY3RfYXJncyAoKTsKICAgIH0KCiAgaWYgKChf
X2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3Qg
dHJlZSBfX3QgPSBmbmRlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVf
Y29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2Zh
aWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjcyNiwgX19GVU5DVElP
Tl9fKTsgX190OyB9KS0+ZGVjbC5uYW1lKTsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5j
b21tb24uY29kZSkgIT0gKElERU5USUZJRVJfTk9ERSkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3Qs
IElERU5USUZJRVJfTk9ERSwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA2NzI2LCBfX0ZVTkNU
SU9OX18pOyBfX3Q7IH0pID09IGdsb2JhbF90cmVlc1tUSV9NQUlOX0lERU5USUZJRVJdKSAmJiBm
bGFnX2hvc3RlZCkKICAgIHsKICAgICAgaWYgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUg
X190ID0gKCgoKGZuZGVjbCktPmNvbW1vbi50eXBlKSktPmNvbW1vbi50eXBlKTsgaWYgKHRyZWVf
Y29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0g
IT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4uLy4uL2djYy9n
Y2MvYy1kZWNsLmMiLCA2NzI4LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBlLm1haW5fdmFy
aWFudCkKICAgICAgICAgICE9IGludGVnZXJfdHlwZXNbaXRrX2ludF0pCiAgICAgICAgewoKCiAg
ICAgICAgICBpZiAoISB3YXJuX21haW4pCiAgICAgICAgICAgIHBlZHdhcm5fd2l0aF9kZWNsIChm
bmRlY2wsICJyZXR1cm4gdHlwZSBvZiBgJXMnIGlzIG5vdCBgaW50JyIpOwogICAgICAgIH0KICAg
ICAgZWxzZQogICAgICAgIHsKCgoKCiAgICAgICAgICBpZiAoZmxhZ19pc29jOTkpCiAgICAgICAg
ICAgIGNfZXhwYW5kX3JldHVybiAoZ2xvYmFsX3RyZWVzW1RJX0lOVEVHRVJfWkVST10pOwoKICAg
ICAgICB9CiAgICB9CgoKICBmaW5pc2hfc3RtdF90cmVlICgmKCgoc3RydWN0IGNfbGFuZ19kZWNs
ICopIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gX19leHRlbnNpb25fXyAoeyBj
b25zdCB0cmVlIF9fdCA9IGZuZGVjbDsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21t
b24uY29kZSkgIT0gKEZVTkNUSU9OX0RFQ0wpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBGVU5D
VElPTl9ERUNMLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDY3NDksIF9fRlVOQ1RJT05fXyk7
IF9fdDsgfSk7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9f
dCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190
LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjc0OSwgX19GVU5DVElPTl9fKTsgX190
OyB9KS0+ZGVjbC5sYW5nX3NwZWNpZmljKSkgLT5zYXZlZF90cmVlKSk7CgogIGZyZWVfYWZ0ZXJf
cGFyc2luZyAoY2Z1bik7CgoKICBmcmVlX2FmdGVyX2NvbXBpbGF0aW9uIChjZnVuKTsKICBjZnVu
ID0gKCh2b2lkICopMCk7CgogIGlmICghIG5lc3RlZCkKICAgIHsKCiAgICAgIGNfZXhwYW5kX2Jv
ZHkgKGZuZGVjbCwgbmVzdGVkKTsKCgoKICAgICAgY3VycmVudF9mdW5jdGlvbl9kZWNsID0gKCh2
b2lkICopMCk7CiAgICAgIGNfZnVuY3Rpb25fbmFtZV9kZWNsYXJlZF9wID0gMDsKICAgIH0KfQoK
CgoKCnN0YXRpYyB2b2lkCmNfZXhwYW5kX2JvZHkgKGZuZGVjbCwgbmVzdGVkX3ApCiAgICAgdHJl
ZSBmbmRlY2w7CiAgICAgaW50IG5lc3RlZF9wOwp7CgoKICBpZiAoZmxhZ19zeW50YXhfb25seSkK
ICAgIHJldHVybjsKCgogIGlmIChuZXN0ZWRfcCkKICAgIHB1c2hfZnVuY3Rpb25fY29udGV4dCAo
KTsKCgogIGN1cnJlbnRfZnVuY3Rpb25fZGVjbCA9IGZuZGVjbDsKICBpbml0X2Z1bmN0aW9uX3N0
YXJ0IChmbmRlY2wsIGlucHV0X2ZpbGVuYW1lLCBsaW5lbm8pOwoKCiAgY2Z1bi0+eF93aG9sZV9m
dW5jdGlvbl9tb2RlX3AgPSAxOwoKCgoKCiAgaW1tZWRpYXRlX3NpemVfZXhwYW5kID0gMDsKICBj
ZnVuLT54X2RvbnRfc2F2ZV9wZW5kaW5nX3NpemVzX3AgPSAxOwoKCiAgaWYgKGNfZnVuY3Rpb25f
dmFyYXJncykKICAgIG1hcmtfdmFyYXJncyAoKTsKCgogIGV4cGFuZF9mdW5jdGlvbl9zdGFydCAo
Zm5kZWNsLCAwKTsKCgoKICBpZiAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBm
bmRlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCkt
PmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAn
ZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjgxMCwgX19GVU5DVElPTl9fKTsgX190OyB9
KS0+ZGVjbC5uYW1lKQogICAgICAmJiAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9
IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZm5kZWNsOyBpZiAodHJlZV9jb2Rl
X3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAo
J2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9j
LWRlY2wuYyIsIDY4MTEsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wubmFtZSk7IGlmICgo
KGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChJREVOVElGSUVSX05PREUp
KSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBJREVOVElGSUVSX05PREUsICIuLi8uLi9nY2MvZ2Nj
L2MtZGVjbC5jIiwgNjgxMSwgX19GVU5DVElPTl9fKTsgX190OyB9KSA9PSBnbG9iYWxfdHJlZXNb
VElfTUFJTl9JREVOVElGSUVSXSkKICAgICAgJiYgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJl
ZSBfX3QgPSBmbmRlY2w7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29k
ZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxl
ZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjgxMiwgX19GVU5DVElPTl9f
KTsgX190OyB9KS0+ZGVjbC5jb250ZXh0KSA9PSAodHJlZSkgKCh2b2lkICopMCkpCiAgICBleHBh
bmRfbWFpbl9mdW5jdGlvbiAoKTsKCgogIGV4cGFuZF9zdG10ICgoKChzdHJ1Y3QgY19sYW5nX2Rl
Y2wgKikgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBfX2V4dGVuc2lvbl9fICh7
IGNvbnN0IHRyZWUgX190ID0gZm5kZWNsOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNv
bW1vbi5jb2RlKSAhPSAoRlVOQ1RJT05fREVDTCkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIEZV
TkNUSU9OX0RFQ0wsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjgxNiwgX19GVU5DVElPTl9f
KTsgX190OyB9KTsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAo
X190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChf
X3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA2ODE2LCBfX0ZVTkNUSU9OX18pOyBf
X3Q7IH0pLT5kZWNsLmxhbmdfc3BlY2lmaWMpKSAtPnNhdmVkX3RyZWUpKTsKCiAgKCgoc3RydWN0
IGNfbGFuZ19kZWNsICopIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gX19leHRl
bnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGZuZGVjbDsgaWYgKCgoZW51bSB0cmVlX2NvZGUp
IChfX3QpLT5jb21tb24uY29kZSkgIT0gKEZVTkNUSU9OX0RFQ0wpKSB0cmVlX2NoZWNrX2ZhaWxl
ZCAoX190LCBGVU5DVElPTl9ERUNMLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDY4MTgsIF9f
RlVOQ1RJT05fXyk7IF9fdDsgfSk7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRy
ZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNr
X2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjgxOCwgX19GVU5D
VElPTl9fKTsgX190OyB9KS0+ZGVjbC5sYW5nX3NwZWNpZmljKSkgLT5zYXZlZF90cmVlKSA9ICh0
cmVlKSAoKHZvaWQgKikwKTsKCgoKCgogIGltbWVkaWF0ZV9zaXplX2V4cGFuZCA9IDE7CgoKICBp
ZiAobGFuZ19leHBhbmRfZnVuY3Rpb25fZW5kKQogICAgKCpsYW5nX2V4cGFuZF9mdW5jdGlvbl9l
bmQpICgpOwoKCiAgZXhwYW5kX2Z1bmN0aW9uX2VuZCAoaW5wdXRfZmlsZW5hbWUsIGxpbmVubywg
MCk7CgoKCiAgaWYgKG5lc3RlZF9wKQogICAgZ2djX3B1c2hfY29udGV4dCAoKTsKCgogIHJlc3Rf
b2ZfY29tcGlsYXRpb24gKGZuZGVjbCk7CgoKICBpZiAobmVzdGVkX3ApCiAgICBnZ2NfcG9wX2Nv
bnRleHQgKCk7CgoKCiAgaWYgKGV4dHJhX3dhcm5pbmdzCiAgICAgICYmIGN1cnJlbnRfZnVuY3Rp
b25fcmV0dXJuc192YWx1ZQogICAgICAmJiBjdXJyZW50X2Z1bmN0aW9uX3JldHVybnNfbnVsbCkK
ICAgIHdhcm5pbmcgKCJ0aGlzIGZ1bmN0aW9uIG1heSByZXR1cm4gd2l0aCBvciB3aXRob3V0IGEg
dmFsdWUiKTsKCgoKCgogIGlmICh3YXJuX2xhcmdlcl90aGFuICYmICEoX19leHRlbnNpb25fXyAo
eyBjb25zdCB0cmVlIF9fdCA9IGZuZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVu
dW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3Nf
Y2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA2ODU2LCBf
X0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmV4dGVybmFsX2ZsYWcpICYmICgoZm5kZWNsKS0+
Y29tbW9uLnR5cGUpKQogICAgewogICAgICB0cmVlIHJldF90eXBlID0gKCgoKGZuZGVjbCktPmNv
bW1vbi50eXBlKSktPmNvbW1vbi50eXBlKTsKCiAgICAgIGlmIChyZXRfdHlwZSAmJiAoKGVudW0g
dHJlZV9jb2RlKSAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSByZXRfdHlwZTsg
aWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9u
LmNvZGUpKV0gIT0gKCd0JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICd0JywgIi4u
Ly4uL2djYy9nY2MvYy1kZWNsLmMiLCA2ODYwLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT50eXBl
LnNpemVfdW5pdCkpLT5jb21tb24uY29kZSkgPT0gSU5URUdFUl9DU1QKICAgICAgICAgICYmIDAg
PCBjb21wYXJlX3RyZWVfaW50ICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHJl
dF90eXBlOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3Qp
LT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwg
J3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDY4NjEsIF9fRlVOQ1RJT05fXyk7IF9fdDsg
fSktPnR5cGUuc2l6ZV91bml0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
YXJnZXJfdGhhbl9zaXplKSkKICAgICAgICB7CiAgICAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZV9h
c19pbnQKICAgICAgICAgICAgPSAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSAo
X19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHJldF90eXBlOyBpZiAodHJlZV9jb2Rl
X3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAo
J3QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9j
LWRlY2wuYyIsIDY4NjUsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUuc2l6ZV91bml0KTsg
aWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKElOVEVHRVJfQ1NU
KSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgSU5URUdFUl9DU1QsICIuLi8uLi9nY2MvZ2NjL2Mt
ZGVjbC5jIiwgNjg2NSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+aW50X2NzdC5pbnRfY3N0KS5s
b3cpOwoKICAgICAgICAgIGlmIChjb21wYXJlX3RyZWVfaW50ICgoX19leHRlbnNpb25fXyAoeyBj
b25zdCB0cmVlIF9fdCA9IHJldF90eXBlOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51
bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19j
aGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDY4NjcsIF9f
RlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUuc2l6ZV91bml0KSwgc2l6ZV9hc19pbnQpID09IDAp
CiAgICAgICAgICAgIHdhcm5pbmdfd2l0aF9kZWNsIChmbmRlY2wsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAic2l6ZSBvZiByZXR1cm4gdmFsdWUgb2YgYCVzJyBpcyAldSBieXRlcyIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX2FzX2ludCk7CiAgICAgICAgICBl
bHNlCiAgICAgICAgICAgIHdhcm5pbmdfd2l0aF9kZWNsIChmbmRlY2wsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAic2l6ZSBvZiByZXR1cm4gdmFsdWUgb2YgYCVzJyBpcyBsYXJnZXIg
dGhhbiAlZCBieXRlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXJnZXJfdGhh
bl9zaXplKTsKICAgICAgICB9CiAgICB9CgogIGlmICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0
cmVlIF9fdCA9IGZuZGVjbDsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29k
ZSkgIT0gKEZVTkNUSU9OX0RFQ0wpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBGVU5DVElPTl9E
RUNMLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDY4NzgsIF9fRlVOQ1RJT05fXyk7IF9fdDsg
fSktPmRlY2wudTIuZikgPT0gMCAmJiAhIG5lc3RlZF9wKQogICAgewoKCgoKCiAgICAgIGlmICgo
X19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGZuZGVjbDsgaWYgKHRyZWVfY29kZV90
eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdk
JykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1k
ZWNsLmMiLCA2ODg1LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmluaXRpYWwpICE9IDAp
CiAgICAgICAgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBmbmRlY2w7IGlmICh0
cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2Rl
KSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9n
Y2MvZ2NjL2MtZGVjbC5jIiwgNjg4NiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5pbml0
aWFsKSA9IGdsb2JhbF90cmVlc1tUSV9FUlJPUl9NQVJLXTsKCiAgICAgIChfX2V4dGVuc2lvbl9f
ICh7IGNvbnN0IHRyZWUgX190ID0gZm5kZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgo
ZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFz
c19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDY4ODgs
IF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuYXJndW1lbnRzKSA9IDA7CiAgICB9CgogIGlm
ICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGZuZGVjbDsgaWYgKCgoZW51bSB0
cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKEZVTkNUSU9OX0RFQ0wpKSB0cmVlX2No
ZWNrX2ZhaWxlZCAoX190LCBGVU5DVElPTl9ERUNMLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIs
IDY4OTEsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRlY2wuc3RhdGljX2N0b3JfZmxhZykpCiAg
ICB7CgoKCgoKICAgICAgICBhc3NlbWJsZV9jb25zdHJ1Y3RvciAoKF9fZXh0ZW5zaW9uX18gKHsg
Y29uc3QgdHJlZSBfX3QgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGZuZGVj
bDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29t
bW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywg
Ii4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA2ODk4LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5k
ZWNsLmFzc2VtYmxlcl9uYW1lKTsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24u
Y29kZSkgIT0gKElERU5USUZJRVJfTk9ERSkpIHRyZWVfY2hlY2tfZmFpbGVkIChfX3QsIElERU5U
SUZJRVJfTk9ERSwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA2ODk4LCBfX0ZVTkNUSU9OX18p
OyBfX3Q7IH0pLT5pZGVudGlmaWVyLnBvaW50ZXIpKTsKCiAgICB9CiAgaWYgKChfX2V4dGVuc2lv
bl9fICh7IGNvbnN0IHRyZWUgX190ID0gZm5kZWNsOyBpZiAoKChlbnVtIHRyZWVfY29kZSkgKF9f
dCktPmNvbW1vbi5jb2RlKSAhPSAoRlVOQ1RJT05fREVDTCkpIHRyZWVfY2hlY2tfZmFpbGVkIChf
X3QsIEZVTkNUSU9OX0RFQ0wsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjkwMSwgX19GVU5D
VElPTl9fKTsgX190OyB9KS0+ZGVjbC5zdGF0aWNfZHRvcl9mbGFnKSkKICAgIHsKCgoKCgogICAg
ICAgIGFzc2VtYmxlX2Rlc3RydWN0b3IgKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190
ID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBmbmRlY2w7IGlmICh0cmVlX2Nv
ZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9
ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2Nj
L2MtZGVjbC5jIiwgNjkwOCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5hc3NlbWJsZXJf
bmFtZSk7IGlmICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChJREVO
VElGSUVSX05PREUpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBJREVOVElGSUVSX05PREUsICIu
Li8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjkwOCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+aWRl
bnRpZmllci5wb2ludGVyKSk7CiAgICB9CgogIGlmIChuZXN0ZWRfcCkKICAgIHsKCiAgICAgIHBv
cF9mdW5jdGlvbl9jb250ZXh0ICgpOwoKCiAgICAgIGlmICghKChmbmRlY2wpLT5jb21tb24uYXNt
X3dyaXR0ZW5fZmxhZykgJiYgKChmbmRlY2wpLT5jb21tb24uYWRkcmVzc2FibGVfZmxhZykpCiAg
ICAgICAgewogICAgICAgICAgcHVzaF9mdW5jdGlvbl9jb250ZXh0ICgpOwogICAgICAgICAgb3V0
cHV0X2lubGluZV9mdW5jdGlvbiAoZm5kZWNsKTsKICAgICAgICAgIHBvcF9mdW5jdGlvbl9jb250
ZXh0ICgpOwogICAgICAgIH0KICAgIH0KCn0KCgoKCgpzdHJ1Y3QgY19sYW5ndWFnZV9mdW5jdGlv
bgp7CiAgc3RydWN0IGxhbmd1YWdlX2Z1bmN0aW9uIGJhc2U7CiAgdHJlZSBuYW1lZF9sYWJlbHM7
CiAgdHJlZSBzaGFkb3dlZF9sYWJlbHM7CiAgaW50IHJldHVybnNfdmFsdWU7CiAgaW50IHJldHVy
bnNfbnVsbDsKICBpbnQgd2Fybl9hYm91dF9yZXR1cm5fdHlwZTsKICBpbnQgZXh0ZXJuX2lubGlu
ZTsKICBzdHJ1Y3QgYmluZGluZ19sZXZlbCAqYmluZGluZ19sZXZlbDsKfTsKCgoKCnZvaWQKcHVz
aF9jX2Z1bmN0aW9uX2NvbnRleHQgKGYpCiAgICAgc3RydWN0IGZ1bmN0aW9uICpmOwp7CiAgc3Ry
dWN0IGNfbGFuZ3VhZ2VfZnVuY3Rpb24gKnA7CiAgcCA9ICgoc3RydWN0IGNfbGFuZ3VhZ2VfZnVu
Y3Rpb24gKikKICAgICAgIHhtYWxsb2MgKHNpemVvZiAoc3RydWN0IGNfbGFuZ3VhZ2VfZnVuY3Rp
b24pKSk7CiAgZi0+bGFuZ3VhZ2UgPSAoc3RydWN0IGxhbmd1YWdlX2Z1bmN0aW9uICopIHA7Cgog
IHAtPmJhc2UueF9zdG10X3RyZWUgPSBjX3N0bXRfdHJlZTsKICBwLT5iYXNlLnhfc2NvcGVfc3Rt
dF9zdGFjayA9IGNfc2NvcGVfc3RtdF9zdGFjazsKICBwLT5iYXNlLnhfZnVuY3Rpb25fbmFtZV9k
ZWNsYXJlZF9wID0gY19mdW5jdGlvbl9uYW1lX2RlY2xhcmVkX3A7CiAgcC0+bmFtZWRfbGFiZWxz
ID0gbmFtZWRfbGFiZWxzOwogIHAtPnNoYWRvd2VkX2xhYmVscyA9IHNoYWRvd2VkX2xhYmVsczsK
ICBwLT5yZXR1cm5zX3ZhbHVlID0gY3VycmVudF9mdW5jdGlvbl9yZXR1cm5zX3ZhbHVlOwogIHAt
PnJldHVybnNfbnVsbCA9IGN1cnJlbnRfZnVuY3Rpb25fcmV0dXJuc19udWxsOwogIHAtPndhcm5f
YWJvdXRfcmV0dXJuX3R5cGUgPSB3YXJuX2Fib3V0X3JldHVybl90eXBlOwogIHAtPmV4dGVybl9p
bmxpbmUgPSBjdXJyZW50X2V4dGVybl9pbmxpbmU7CiAgcC0+YmluZGluZ19sZXZlbCA9IGN1cnJl
bnRfYmluZGluZ19sZXZlbDsKfQoKCgp2b2lkCnBvcF9jX2Z1bmN0aW9uX2NvbnRleHQgKGYpCiAg
ICAgc3RydWN0IGZ1bmN0aW9uICpmOwp7CiAgc3RydWN0IGNfbGFuZ3VhZ2VfZnVuY3Rpb24gKnAK
ICAgID0gKHN0cnVjdCBjX2xhbmd1YWdlX2Z1bmN0aW9uICopIGYtPmxhbmd1YWdlOwogIHRyZWUg
bGluazsKCgogIGZvciAobGluayA9IHNoYWRvd2VkX2xhYmVsczsgbGluazsgbGluayA9ICgobGlu
ayktPmNvbW1vbi5jaGFpbikpCiAgICBpZiAoKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBf
X3QgPSAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGxpbms7IGlmICgoKGVudW0g
dHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChUUkVFX0xJU1QpKSB0cmVlX2NoZWNr
X2ZhaWxlZCAoX190LCBUUkVFX0xJU1QsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNjk3OSwg
X19GVU5DVElPTl9fKTsgX190OyB9KS0+bGlzdC52YWx1ZSk7IGlmICh0cmVlX2NvZGVfdHlwZVso
aW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0
cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5j
IiwgNjk3OSwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5uYW1lKSAhPSAwKQogICAgICAo
KChzdHJ1Y3QgbGFuZ19pZGVudGlmaWVyICopICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVl
IF9fdCA9IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gbGluazsgaWYgKCgoZW51
bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKFRSRUVfTElTVCkpIHRyZWVfY2hl
Y2tfZmFpbGVkIChfX3QsIFRSRUVfTElTVCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA2OTgw
LCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5saXN0LnZhbHVlKTsgaWYgKHRyZWVfY29kZV90eXBl
WyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykp
IHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNs
LmMiLCA2OTgwLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLm5hbWUpKSktPmxhYmVsX3Zh
bHVlKQogICAgICAgID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBsaW5rOyBp
ZiAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSAhPSAoVFJFRV9MSVNUKSkg
dHJlZV9jaGVja19mYWlsZWQgKF9fdCwgVFJFRV9MSVNULCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wu
YyIsIDY5ODEsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmxpc3QudmFsdWUpOwoKICBpZiAoKF9f
ZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBjdXJyZW50X2Z1bmN0aW9uX2RlY2w7IGlm
ICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpICE9IChGVU5DVElPTl9ERUNM
KSkgdHJlZV9jaGVja19mYWlsZWQgKF9fdCwgRlVOQ1RJT05fREVDTCwgIi4uLy4uL2djYy9nY2Mv
Yy1kZWNsLmMiLCA2OTgzLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLnUyLmYpID09IDAK
ICAgICAgJiYgKCgoc3RydWN0IGNfbGFuZ19kZWNsICopIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0
IHRyZWUgX190ID0gX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGN1cnJlbnRfZnVu
Y3Rpb25fZGVjbDsgaWYgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0g
KEZVTkNUSU9OX0RFQ0wpKSB0cmVlX2NoZWNrX2ZhaWxlZCAoX190LCBGVU5DVElPTl9ERUNMLCAi
Li4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDY5ODQsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSk7IGlm
ICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5j
b2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8u
Li9nY2MvZ2NjL2MtZGVjbC5jIiwgNjk4NCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5s
YW5nX3NwZWNpZmljKSkgLT5zYXZlZF90cmVlKSA9PSAodHJlZSkgKCh2b2lkICopMCkpCiAgICB7
CgoKCiAgICAgIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gY3VycmVudF9mdW5j
dGlvbl9kZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChf
X3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9f
dCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDY5ODksIF9fRlVOQ1RJT05fXyk7IF9f
dDsgfSktPmRlY2wuaW5pdGlhbCkgPSBnbG9iYWxfdHJlZXNbVElfRVJST1JfTUFSS107CiAgICAg
IChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gY3VycmVudF9mdW5jdGlvbl9kZWNs
OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChfX3QpLT5jb21t
b24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9fdCwgJ2QnLCAi
Li4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDY5OTAsIF9fRlVOQ1RJT05fXyk7IF9fdDsgfSktPmRl
Y2wuYXJndW1lbnRzKSA9IDA7CiAgICB9CgogIGNfc3RtdF90cmVlID0gcC0+YmFzZS54X3N0bXRf
dHJlZTsKICBjX3Njb3BlX3N0bXRfc3RhY2sgPSBwLT5iYXNlLnhfc2NvcGVfc3RtdF9zdGFjazsK
ICBjX2Z1bmN0aW9uX25hbWVfZGVjbGFyZWRfcCA9IHAtPmJhc2UueF9mdW5jdGlvbl9uYW1lX2Rl
Y2xhcmVkX3A7CiAgbmFtZWRfbGFiZWxzID0gcC0+bmFtZWRfbGFiZWxzOwogIHNoYWRvd2VkX2xh
YmVscyA9IHAtPnNoYWRvd2VkX2xhYmVsczsKICBjdXJyZW50X2Z1bmN0aW9uX3JldHVybnNfdmFs
dWUgPSBwLT5yZXR1cm5zX3ZhbHVlOwogIGN1cnJlbnRfZnVuY3Rpb25fcmV0dXJuc19udWxsID0g
cC0+cmV0dXJuc19udWxsOwogIHdhcm5fYWJvdXRfcmV0dXJuX3R5cGUgPSBwLT53YXJuX2Fib3V0
X3JldHVybl90eXBlOwogIGN1cnJlbnRfZXh0ZXJuX2lubGluZSA9IHAtPmV4dGVybl9pbmxpbmU7
CiAgY3VycmVudF9iaW5kaW5nX2xldmVsID0gcC0+YmluZGluZ19sZXZlbDsKCiAgZnJlZSAocCk7
CiAgZi0+bGFuZ3VhZ2UgPSAwOwp9CgoKCnZvaWQKbWFya19jX2Z1bmN0aW9uX2NvbnRleHQgKGYp
CiAgICAgc3RydWN0IGZ1bmN0aW9uICpmOwp7CiAgc3RydWN0IGNfbGFuZ3VhZ2VfZnVuY3Rpb24g
KnAKICAgID0gKHN0cnVjdCBjX2xhbmd1YWdlX2Z1bmN0aW9uICopIGYtPmxhbmd1YWdlOwoKICBp
ZiAocCA9PSAwKQogICAgcmV0dXJuOwoKICBtYXJrX2NfbGFuZ3VhZ2VfZnVuY3Rpb24gKCZwLT5i
YXNlKTsKICBkbyB7IHRyZWUgdF9fID0gKHAtPnNoYWRvd2VkX2xhYmVscyk7IGlmICgoKHRfXykg
IT0gKCh2b2lkICopMCkgJiYgISBnZ2Nfc2V0X21hcmsgKHRfXykpKSBkbyB7IGlmICgoZ2djX3Bl
bmRpbmdfdHJlZXMpLT5lbGVtZW50c191c2VkID49IChnZ2NfcGVuZGluZ190cmVlcyktPm51bV9l
bGVtZW50cykgKCgoZ2djX3BlbmRpbmdfdHJlZXMpKSA9IHZhcnJheV9ncm93ICgoZ2djX3BlbmRp
bmdfdHJlZXMpLCAyICogKGdnY19wZW5kaW5nX3RyZWVzKS0+bnVtX2VsZW1lbnRzKSk7IChnZ2Nf
cGVuZGluZ190cmVlcyktPmRhdGEudHJlZVsoZ2djX3BlbmRpbmdfdHJlZXMpLT5lbGVtZW50c191
c2VkKytdID0gKHRfXyk7IH0gd2hpbGUgKDApOyB9IHdoaWxlICgwKTsKICBkbyB7IHRyZWUgdF9f
ID0gKHAtPm5hbWVkX2xhYmVscyk7IGlmICgoKHRfXykgIT0gKCh2b2lkICopMCkgJiYgISBnZ2Nf
c2V0X21hcmsgKHRfXykpKSBkbyB7IGlmICgoZ2djX3BlbmRpbmdfdHJlZXMpLT5lbGVtZW50c191
c2VkID49IChnZ2NfcGVuZGluZ190cmVlcyktPm51bV9lbGVtZW50cykgKCgoZ2djX3BlbmRpbmdf
dHJlZXMpKSA9IHZhcnJheV9ncm93ICgoZ2djX3BlbmRpbmdfdHJlZXMpLCAyICogKGdnY19wZW5k
aW5nX3RyZWVzKS0+bnVtX2VsZW1lbnRzKSk7IChnZ2NfcGVuZGluZ190cmVlcyktPmRhdGEudHJl
ZVsoZ2djX3BlbmRpbmdfdHJlZXMpLT5lbGVtZW50c191c2VkKytdID0gKHRfXyk7IH0gd2hpbGUg
KDApOyB9IHdoaWxlICgwKTsKICBtYXJrX2JpbmRpbmdfbGV2ZWwgKCZwLT5iaW5kaW5nX2xldmVs
KTsKfQoKCgp2b2lkCmNvcHlfbGFuZ19kZWNsIChkZWNsKQogICAgIHRyZWUgZGVjbDsKewogIHN0
cnVjdCBsYW5nX2RlY2wgKmxkOwoKICBpZiAoIShfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUg
X190ID0gZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAo
X190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChf
X3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA3MDM0LCBfX0ZVTkNUSU9OX18pOyBf
X3Q7IH0pLT5kZWNsLmxhbmdfc3BlY2lmaWMpKQogICAgcmV0dXJuOwoKICBsZCA9IChzdHJ1Y3Qg
bGFuZ19kZWNsICopIGdnY19hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgbGFuZ19kZWNsKSk7CiAgbWVt
Y3B5ICgoY2hhciAqKSBsZCwgKGNoYXIgKikgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBf
X3QgPSBkZWNsOyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVlX2NvZGUpIChf
X3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19mYWlsZWQgKF9f
dCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDcwMzgsIF9fRlVOQ1RJT05fXyk7IF9f
dDsgfSktPmRlY2wubGFuZ19zcGVjaWZpYyksCiAgICAgICAgICBzaXplb2YgKHN0cnVjdCBsYW5n
X2RlY2wpKTsKICAoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IGRlY2w7IGlmICh0
cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2Rl
KSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9n
Y2MvZ2NjL2MtZGVjbC5jIiwgNzA0MCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZGVjbC5sYW5n
X3NwZWNpZmljKSA9IGxkOwp9CgoKCnZvaWQKbGFuZ19tYXJrX3RyZWUgKHQpCiAgICAgdHJlZSB0
Owp7CiAgaWYgKCgoZW51bSB0cmVlX2NvZGUpICh0KS0+Y29tbW9uLmNvZGUpID09IElERU5USUZJ
RVJfTk9ERSkKICAgIHsKICAgICAgc3RydWN0IGxhbmdfaWRlbnRpZmllciAqaSA9IChzdHJ1Y3Qg
bGFuZ19pZGVudGlmaWVyICopIHQ7CiAgICAgIGRvIHsgdHJlZSB0X18gPSAoaS0+Z2xvYmFsX3Zh
bHVlKTsgaWYgKCgodF9fKSAhPSAoKHZvaWQgKikwKSAmJiAhIGdnY19zZXRfbWFyayAodF9fKSkp
IGRvIHsgaWYgKChnZ2NfcGVuZGluZ190cmVlcyktPmVsZW1lbnRzX3VzZWQgPj0gKGdnY19wZW5k
aW5nX3RyZWVzKS0+bnVtX2VsZW1lbnRzKSAoKChnZ2NfcGVuZGluZ190cmVlcykpID0gdmFycmF5
X2dyb3cgKChnZ2NfcGVuZGluZ190cmVlcyksIDIgKiAoZ2djX3BlbmRpbmdfdHJlZXMpLT5udW1f
ZWxlbWVudHMpKTsgKGdnY19wZW5kaW5nX3RyZWVzKS0+ZGF0YS50cmVlWyhnZ2NfcGVuZGluZ190
cmVlcyktPmVsZW1lbnRzX3VzZWQrK10gPSAodF9fKTsgfSB3aGlsZSAoMCk7IH0gd2hpbGUgKDAp
OwogICAgICBkbyB7IHRyZWUgdF9fID0gKGktPmxvY2FsX3ZhbHVlKTsgaWYgKCgodF9fKSAhPSAo
KHZvaWQgKikwKSAmJiAhIGdnY19zZXRfbWFyayAodF9fKSkpIGRvIHsgaWYgKChnZ2NfcGVuZGlu
Z190cmVlcyktPmVsZW1lbnRzX3VzZWQgPj0gKGdnY19wZW5kaW5nX3RyZWVzKS0+bnVtX2VsZW1l
bnRzKSAoKChnZ2NfcGVuZGluZ190cmVlcykpID0gdmFycmF5X2dyb3cgKChnZ2NfcGVuZGluZ190
cmVlcyksIDIgKiAoZ2djX3BlbmRpbmdfdHJlZXMpLT5udW1fZWxlbWVudHMpKTsgKGdnY19wZW5k
aW5nX3RyZWVzKS0+ZGF0YS50cmVlWyhnZ2NfcGVuZGluZ190cmVlcyktPmVsZW1lbnRzX3VzZWQr
K10gPSAodF9fKTsgfSB3aGlsZSAoMCk7IH0gd2hpbGUgKDApOwogICAgICBkbyB7IHRyZWUgdF9f
ID0gKGktPmxhYmVsX3ZhbHVlKTsgaWYgKCgodF9fKSAhPSAoKHZvaWQgKikwKSAmJiAhIGdnY19z
ZXRfbWFyayAodF9fKSkpIGRvIHsgaWYgKChnZ2NfcGVuZGluZ190cmVlcyktPmVsZW1lbnRzX3Vz
ZWQgPj0gKGdnY19wZW5kaW5nX3RyZWVzKS0+bnVtX2VsZW1lbnRzKSAoKChnZ2NfcGVuZGluZ190
cmVlcykpID0gdmFycmF5X2dyb3cgKChnZ2NfcGVuZGluZ190cmVlcyksIDIgKiAoZ2djX3BlbmRp
bmdfdHJlZXMpLT5udW1fZWxlbWVudHMpKTsgKGdnY19wZW5kaW5nX3RyZWVzKS0+ZGF0YS50cmVl
WyhnZ2NfcGVuZGluZ190cmVlcyktPmVsZW1lbnRzX3VzZWQrK10gPSAodF9fKTsgfSB3aGlsZSAo
MCk7IH0gd2hpbGUgKDApOwogICAgICBkbyB7IHRyZWUgdF9fID0gKGktPmltcGxpY2l0X2RlY2wp
OyBpZiAoKCh0X18pICE9ICgodm9pZCAqKTApICYmICEgZ2djX3NldF9tYXJrICh0X18pKSkgZG8g
eyBpZiAoKGdnY19wZW5kaW5nX3RyZWVzKS0+ZWxlbWVudHNfdXNlZCA+PSAoZ2djX3BlbmRpbmdf
dHJlZXMpLT5udW1fZWxlbWVudHMpICgoKGdnY19wZW5kaW5nX3RyZWVzKSkgPSB2YXJyYXlfZ3Jv
dyAoKGdnY19wZW5kaW5nX3RyZWVzKSwgMiAqIChnZ2NfcGVuZGluZ190cmVlcyktPm51bV9lbGVt
ZW50cykpOyAoZ2djX3BlbmRpbmdfdHJlZXMpLT5kYXRhLnRyZWVbKGdnY19wZW5kaW5nX3RyZWVz
KS0+ZWxlbWVudHNfdXNlZCsrXSA9ICh0X18pOyB9IHdoaWxlICgwKTsgfSB3aGlsZSAoMCk7CiAg
ICAgIGRvIHsgdHJlZSB0X18gPSAoaS0+ZXJyb3JfbG9jdXMpOyBpZiAoKCh0X18pICE9ICgodm9p
ZCAqKTApICYmICEgZ2djX3NldF9tYXJrICh0X18pKSkgZG8geyBpZiAoKGdnY19wZW5kaW5nX3Ry
ZWVzKS0+ZWxlbWVudHNfdXNlZCA+PSAoZ2djX3BlbmRpbmdfdHJlZXMpLT5udW1fZWxlbWVudHMp
ICgoKGdnY19wZW5kaW5nX3RyZWVzKSkgPSB2YXJyYXlfZ3JvdyAoKGdnY19wZW5kaW5nX3RyZWVz
KSwgMiAqIChnZ2NfcGVuZGluZ190cmVlcyktPm51bV9lbGVtZW50cykpOyAoZ2djX3BlbmRpbmdf
dHJlZXMpLT5kYXRhLnRyZWVbKGdnY19wZW5kaW5nX3RyZWVzKS0+ZWxlbWVudHNfdXNlZCsrXSA9
ICh0X18pOyB9IHdoaWxlICgwKTsgfSB3aGlsZSAoMCk7CiAgICAgIGRvIHsgdHJlZSB0X18gPSAo
aS0+bGltYm9fdmFsdWUpOyBpZiAoKCh0X18pICE9ICgodm9pZCAqKTApICYmICEgZ2djX3NldF9t
YXJrICh0X18pKSkgZG8geyBpZiAoKGdnY19wZW5kaW5nX3RyZWVzKS0+ZWxlbWVudHNfdXNlZCA+
PSAoZ2djX3BlbmRpbmdfdHJlZXMpLT5udW1fZWxlbWVudHMpICgoKGdnY19wZW5kaW5nX3RyZWVz
KSkgPSB2YXJyYXlfZ3JvdyAoKGdnY19wZW5kaW5nX3RyZWVzKSwgMiAqIChnZ2NfcGVuZGluZ190
cmVlcyktPm51bV9lbGVtZW50cykpOyAoZ2djX3BlbmRpbmdfdHJlZXMpLT5kYXRhLnRyZWVbKGdn
Y19wZW5kaW5nX3RyZWVzKS0+ZWxlbWVudHNfdXNlZCsrXSA9ICh0X18pOyB9IHdoaWxlICgwKTsg
fSB3aGlsZSAoMCk7CiAgICB9CiAgZWxzZSBpZiAoKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVu
dW0gdHJlZV9jb2RlKSAodCktPmNvbW1vbi5jb2RlKSldID09ICd0JykgJiYgKF9fZXh0ZW5zaW9u
X18gKHsgY29uc3QgdHJlZSBfX3QgPSB0OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51
bSB0cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ3QnKSkgdHJlZV9jbGFzc19j
aGVja19mYWlsZWQgKF9fdCwgJ3QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDcwNTksIF9f
RlVOQ1RJT05fXyk7IF9fdDsgfSktPnR5cGUubGFuZ19zcGVjaWZpYykpCiAgICBkbyB7IGNvbnN0
IHZvaWQgKmFfXyA9ICgoX19leHRlbnNpb25fXyAoeyBjb25zdCB0cmVlIF9fdCA9IHQ7IGlmICh0
cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRyZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2Rl
KSldICE9ICgndCcpKSB0cmVlX2NsYXNzX2NoZWNrX2ZhaWxlZCAoX190LCAndCcsICIuLi8uLi9n
Y2MvZ2NjL2MtZGVjbC5jIiwgNzA2MCwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+dHlwZS5sYW5n
X3NwZWNpZmljKSk7IGlmIChhX18gIT0gKCh2b2lkICopMCkpIGdnY19zZXRfbWFyayAoYV9fKTsg
fSB3aGlsZSAoMCk7CiAgZWxzZSBpZiAoKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJl
ZV9jb2RlKSAodCktPmNvbW1vbi5jb2RlKSldID09ICdkJykgJiYgKF9fZXh0ZW5zaW9uX18gKHsg
Y29uc3QgdHJlZSBfX3QgPSB0OyBpZiAodHJlZV9jb2RlX3R5cGVbKGludCkgKCgoZW51bSB0cmVl
X2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkpXSAhPSAoJ2QnKSkgdHJlZV9jbGFzc19jaGVja19m
YWlsZWQgKF9fdCwgJ2QnLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDcwNjEsIF9fRlVOQ1RJ
T05fXyk7IF9fdDsgfSktPmRlY2wubGFuZ19zcGVjaWZpYykpCiAgICB7CiAgICAgIGRvIHsgY29u
c3Qgdm9pZCAqYV9fID0gKChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gdDsgaWYg
KHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNv
ZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdkJywgIi4uLy4u
L2djYy9nY2MvYy1kZWNsLmMiLCA3MDYzLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0pLT5kZWNsLmxh
bmdfc3BlY2lmaWMpKTsgaWYgKGFfXyAhPSAoKHZvaWQgKikwKSkgZ2djX3NldF9tYXJrIChhX18p
OyB9IHdoaWxlICgwKTsKICAgICAgY19tYXJrX2xhbmdfZGVjbCAoJihfX2V4dGVuc2lvbl9fICh7
IGNvbnN0IHRyZWUgX190ID0gdDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJl
ZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tf
ZmFpbGVkIChfX3QsICdkJywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA3MDY0LCBfX0ZVTkNU
SU9OX18pOyBfX3Q7IH0pLT5kZWNsLmxhbmdfc3BlY2lmaWMpLT5iYXNlKTsKICAgIH0KfQojIDcw
NzcgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiCmludApzdG10c19hcmVfZnVsbF9leHByc19wICgp
CnsKICByZXR1cm4gMDsKfQoKCgoKCnN0bXRfdHJlZQpjdXJyZW50X3N0bXRfdHJlZSAoKQp7CiAg
cmV0dXJuICZjX3N0bXRfdHJlZTsKfQoKCgp0cmVlICoKY3VycmVudF9zY29wZV9zdG10X3N0YWNr
ICgpCnsKICByZXR1cm4gJmNfc2NvcGVfc3RtdF9zdGFjazsKfQoKCgoKaW50CmFub25fYWdncl90
eXBlX3AgKG5vZGUpCiAgICAgdHJlZSBub2RlIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7
CnsKICByZXR1cm4gMDsKfQoKCgp2b2lkCmV4dHJhY3RfaW50ZXJmYWNlX2luZm8gKCkKewp9CgoK
Cgp0cmVlCmNfYmVnaW5fY29tcG91bmRfc3RtdCAoKQp7CiAgdHJlZSBzdG10OwoKCiAgc3RtdCA9
IGFkZF9zdG10IChidWlsZF9zdG10IChDT01QT1VORF9TVE1ULCAodHJlZSkgKCh2b2lkICopMCkp
KTsKCgogIGlmICghY19mdW5jdGlvbl9uYW1lX2RlY2xhcmVkX3ApCiAgICB7CiAgICAgIGNfZnVu
Y3Rpb25fbmFtZV9kZWNsYXJlZF9wID0gMTsKICAgICAgZGVjbGFyZV9mdW5jdGlvbl9uYW1lICgp
OwogICAgfQoKICByZXR1cm4gc3RtdDsKfQoKCgoKdm9pZApjX2V4cGFuZF9kZWNsX3N0bXQgKHQp
CiAgICAgdHJlZSB0Owp7CiAgdHJlZSBkZWNsID0gKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJl
ZSBfX3QgPSBfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gdDsgaWYgKCgoZW51bSB0
cmVlX2NvZGUpIChfX3QpLT5jb21tb24uY29kZSkgIT0gKERFQ0xfU1RNVCkpIHRyZWVfY2hlY2tf
ZmFpbGVkIChfX3QsIERFQ0xfU1RNVCwgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA3MTQ2LCBf
X0ZVTkNUSU9OX18pOyBfX3Q7IH0pOyBjaGFyIF9fYyA9IHRyZWVfY29kZV90eXBlWyhpbnQpICgo
KGVudW0gdHJlZV9jb2RlKSAoX190KS0+Y29tbW9uLmNvZGUpKV07IGlmIChfX2MgIT0gJ3InICYm
IF9fYyAhPSAncycgJiYgX19jICE9ICc8JyAmJiBfX2MgIT0gJzEnICYmIF9fYyAhPSAnMicgJiYg
X19jICE9ICdlJykgdHJlZV9jbGFzc19jaGVja19mYWlsZWQoX190LCAnZScsICIuLi8uLi9nY2Mv
Z2NjL2MtZGVjbC5jIiwgNzE0NiwgX19GVU5DVElPTl9fKTsgX190OyB9KS0+ZXhwLm9wZXJhbmRz
WzBdKTsKCgogIGlmICgoKGVudW0gdHJlZV9jb2RlKSAoZGVjbCktPmNvbW1vbi5jb2RlKSA9PSBG
VU5DVElPTl9ERUNMCiAgICAgICYmIChfX2V4dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0g
ZGVjbDsgaWYgKHRyZWVfY29kZV90eXBlWyhpbnQpICgoKGVudW0gdHJlZV9jb2RlKSAoX190KS0+
Y29tbW9uLmNvZGUpKV0gIT0gKCdkJykpIHRyZWVfY2xhc3NfY2hlY2tfZmFpbGVkIChfX3QsICdk
JywgIi4uLy4uL2djYy9nY2MvYy1kZWNsLmMiLCA3MTUwLCBfX0ZVTkNUSU9OX18pOyBfX3Q7IH0p
LT5kZWNsLmNvbnRleHQpID09IGN1cnJlbnRfZnVuY3Rpb25fZGVjbAogICAgICAmJiAoKChzdHJ1
Y3QgY19sYW5nX2RlY2wgKikgKF9fZXh0ZW5zaW9uX18gKHsgY29uc3QgdHJlZSBfX3QgPSBfX2V4
dGVuc2lvbl9fICh7IGNvbnN0IHRyZWUgX190ID0gZGVjbDsgaWYgKCgoZW51bSB0cmVlX2NvZGUp
IChfX3QpLT5jb21tb24uY29kZSkgIT0gKEZVTkNUSU9OX0RFQ0wpKSB0cmVlX2NoZWNrX2ZhaWxl
ZCAoX190LCBGVU5DVElPTl9ERUNMLCAiLi4vLi4vZ2NjL2djYy9jLWRlY2wuYyIsIDcxNTEsIF9f
RlVOQ1RJT05fXyk7IF9fdDsgfSk7IGlmICh0cmVlX2NvZGVfdHlwZVsoaW50KSAoKChlbnVtIHRy
ZWVfY29kZSkgKF9fdCktPmNvbW1vbi5jb2RlKSldICE9ICgnZCcpKSB0cmVlX2NsYXNzX2NoZWNr
X2ZhaWxlZCAoX190LCAnZCcsICIuLi8uLi9nY2MvZ2NjL2MtZGVjbC5jIiwgNzE1MSwgX19GVU5D
VElPTl9fKTsgX190OyB9KS0+ZGVjbC5sYW5nX3NwZWNpZmljKSkgLT5zYXZlZF90cmVlKSkKICAg
IGNfZXhwYW5kX2JvZHkgKGRlY2wsIDEpOwp9Cg==

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